@swype-org/react-sdk 0.2.297 → 0.2.303

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
@@ -41,6 +41,7 @@ var darkTheme = {
41
41
  accent: "#B2FF93",
42
42
  accentHover: "#8FD974",
43
43
  accentText: "#1B4332",
44
+ highlight: "#B2FF93",
44
45
  success: "#0f9d73",
45
46
  successBg: "#0f2f2a",
46
47
  error: "#d46a72",
@@ -72,6 +73,7 @@ var lightTheme = {
72
73
  accent: "#B2FF93",
73
74
  accentHover: "#8FD974",
74
75
  accentText: "#1B4332",
76
+ highlight: "#B2FF93",
75
77
  success: "#0f9d73",
76
78
  successBg: "#e6f7f1",
77
79
  error: "#ce6670",
@@ -113,6 +115,8 @@ var lightThemeNew = {
113
115
  accent: "#000000",
114
116
  accentHover: "#1a1a1a",
115
117
  accentText: "#fafafa",
118
+ // Figma `accent` token (#eaff03) — the lime "0% FEES" chip.
119
+ highlight: "#eaff03",
116
120
  success: "#0f9d73",
117
121
  successBg: "#e6f7f1",
118
122
  error: "#ce6670",
@@ -8393,12 +8397,32 @@ function PrimaryButton({
8393
8397
  icon,
8394
8398
  progress,
8395
8399
  progressText,
8396
- progressPaused
8400
+ progressPaused,
8401
+ spinnerOnly
8397
8402
  }) {
8398
8403
  const { tokens } = useBlinkConfig();
8399
8404
  const inProgress = progress != null;
8400
8405
  const isDisabled = disabled || loading || inProgress;
8401
8406
  const done = inProgress && progress >= 1;
8407
+ if (spinnerOnly) {
8408
+ return /* @__PURE__ */ jsxs(
8409
+ "button",
8410
+ {
8411
+ type: "button",
8412
+ disabled: true,
8413
+ "aria-label": "Please wait",
8414
+ style: buttonStyle2(tokens, { disabled: false, loading: true }),
8415
+ children: [
8416
+ /* @__PURE__ */ jsx("span", { "aria-hidden": true, style: inlineSpinnerStyle(tokens.accentText) }),
8417
+ /* @__PURE__ */ jsx("style", { children: `
8418
+ @keyframes blink-spin {
8419
+ to { transform: rotate(360deg); }
8420
+ }
8421
+ ` })
8422
+ ]
8423
+ }
8424
+ );
8425
+ }
8402
8426
  if (inProgress) {
8403
8427
  return /* @__PURE__ */ jsxs(
8404
8428
  "button",
@@ -8525,6 +8549,15 @@ var buttonStyle2 = (tokens, state) => {
8525
8549
  gap: 8
8526
8550
  };
8527
8551
  };
8552
+ var inlineSpinnerStyle = (color) => ({
8553
+ width: 20,
8554
+ height: 20,
8555
+ border: `2px solid ${color}44`,
8556
+ borderTopColor: color,
8557
+ borderRadius: "50%",
8558
+ animation: "blink-spin 0.9s linear infinite",
8559
+ flexShrink: 0
8560
+ });
8528
8561
  var iconWrapStyle = {
8529
8562
  display: "flex",
8530
8563
  alignItems: "center"
@@ -10641,269 +10674,288 @@ var avatarStyle = (tokens) => ({
10641
10674
  color: tokens.textMuted,
10642
10675
  background: "transparent"
10643
10676
  });
10644
- var LINK_ICON_DATA_URI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAXCAYAAACS5bYWAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAK6ADAAQAAAABAAAAFwAAAAAKDRJ/AAADIUlEQVRIDaWXMWsVQRSFX9SABgQjRFAhRV4hPAsFLQKmVDsLhaTU0p/gb7CztfAPaJnSlBYWpgiooJIIEZMiRQoLhVh4vnXP8+6+ebsz8cB5M7t37p07996ZnTcz6MZQ4pG4JJ4XT4tt/NKLPXFHfCceijl4rEHYtT42PorbYhIzybeDAU7eFjFWik0pvBa7nMYuzqbAotdFnG/gZOPp78M9NffF+YQs59UlDboh/hZ3pygQzWvimYSceZdFAonjY7QjuyYJExkYJbUosdJUtCgNMnFVjLp6HGyIRLkL6LPAm2Jbnyy9FCvEyJL2lfo9DQ6+ELfEAxHHUyCCyD+IGMdpR8w1OS3CGlplgCBYn72xgEBgEXPiJx7sLKsi/QYRYUXTHPS4dst4HL4inq2Fi2pZcI4txjAWkC2A/lfx0M4+1IOjwWTr4nFBpJnQNTmrPhHCbi7I6mXREZ5Xf/OEfkgVD4B09NVYNbDn56fk41pTnzkcqR7VsThmttLHWUrAYEWpTWR5SYst6tBgwhKwYDa3McJZUmSUpMo6Xe2bIGTjlSIudoizF4OF76Gf2+UUeSreSSjsh3fnQj+329DH2YicHRvH07eTON0GqTS8gf2c0zb0cTY6mPr29xnt0/eG5TgsRWOBOBs3FMdFKfr0cfKJaKdL7McS3cfZeMsZlViqx74POqlSCOLibjyp9nA27ji+zaWlwBFlLKlTep5at91y9mPPqD4KTOYJqREuMyWI+uitiqULTs3Hxo0fq21/bqk7h/yC+hPXs5S18A6H0T8lsmDuBlsin97jgHJaCYqv1D+IzjLJYj2A8POx2BXjbq/FEw1jjkScBFxirouUWI6+hlUgko9EB46XbNC3dOws/c8i1zN/0Ygwq+Md+CF2RepbNepfzbJ49LGH3qyIjTZwcCguiw/EBdFoXKral28GkQIf9FaKLSXzTJwWsVuS3RX/t243ZKNx3MXISlaB+mNFRMQFXgnqHyL2RYzna5QTYeqVcc5SlPf1mZ8b18Q9JRXZaIzJOM5oIdHC2HMxByyWCwy0fluPDPGXCVLj2E/iD2Rfl2nM3a3EAAAAAElFTkSuQmCC";
10677
+
10678
+ // src/deviceBiometricUnlockText.ts
10679
+ var FALLBACK = "Biometric verification";
10680
+ function getDeviceBiometricUnlockText() {
10681
+ const ua = typeof navigator !== "undefined" && typeof navigator.userAgent === "string" ? navigator.userAgent : "";
10682
+ if (/iPhone|iPad|iPod/i.test(ua)) {
10683
+ return "Face ID";
10684
+ }
10685
+ if (/Android/i.test(ua)) {
10686
+ return "Fingerprint or face unlock";
10687
+ }
10688
+ if (/Windows NT/i.test(ua)) {
10689
+ return "Windows Hello";
10690
+ }
10691
+ if (/Macintosh|Mac OS X/i.test(ua)) {
10692
+ return "Touch ID";
10693
+ }
10694
+ return FALLBACK;
10695
+ }
10696
+ var CLUSTER_LOGOS = [
10697
+ METAMASK_LOGO,
10698
+ PHANTOM_LOGO,
10699
+ RABBY_LOGO,
10700
+ OKX_WALLET_LOGO,
10701
+ TRUST_WALLET_LOGO,
10702
+ BASE_LOGO
10703
+ ];
10645
10704
  function DepositOptionsScreen({
10646
- onFromWallet,
10647
10705
  onToAddress,
10648
10706
  onSignInWithBlink,
10649
10707
  onClose
10650
10708
  }) {
10651
10709
  const { tokens } = useBlinkConfig();
10652
- const headerRight = onClose ? /* @__PURE__ */ jsx(
10653
- "button",
10654
- {
10655
- type: "button",
10656
- onClick: onClose,
10657
- "aria-label": "Close",
10658
- style: closeButtonStyle2(tokens),
10659
- children: /* @__PURE__ */ jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx(
10660
- "path",
10710
+ const depositLabel = `Deposit with ${getDeviceBiometricUnlockText()}`;
10711
+ return /* @__PURE__ */ jsx(ScreenLayout, { children: /* @__PURE__ */ jsx("div", { style: sheetStyle, children: /* @__PURE__ */ jsxs("div", { style: contentStyle2, children: [
10712
+ /* @__PURE__ */ jsxs("div", { style: headerRowStyle, children: [
10713
+ /* @__PURE__ */ jsx("img", { src: BLINK_WORDMARK, alt: "Blink", style: wordmarkImgStyle }),
10714
+ onClose ? /* @__PURE__ */ jsx(
10715
+ "button",
10661
10716
  {
10662
- d: "M6 6l12 12M18 6L6 18",
10663
- stroke: "currentColor",
10664
- strokeWidth: "2",
10665
- strokeLinecap: "round",
10666
- strokeLinejoin: "round"
10717
+ type: "button",
10718
+ onClick: onClose,
10719
+ "aria-label": "Close",
10720
+ style: closeButtonStyle2(tokens.bgRecessed, tokens.text),
10721
+ children: /* @__PURE__ */ jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx(
10722
+ "path",
10723
+ {
10724
+ d: "M6 6l12 12M18 6L6 18",
10725
+ stroke: "currentColor",
10726
+ strokeWidth: "2",
10727
+ strokeLinecap: "round",
10728
+ strokeLinejoin: "round"
10729
+ }
10730
+ ) })
10667
10731
  }
10668
- ) })
10669
- }
10670
- ) : void 0;
10671
- return /* @__PURE__ */ jsxs(
10672
- ScreenLayout,
10673
- {
10674
- footer: /* @__PURE__ */ jsx(PrimaryButton, { onClick: onSignInWithBlink, icon: /* @__PURE__ */ jsx(FaceIdIcon2, {}), children: "Sign in with Blink" }),
10675
- children: [
10676
- /* @__PURE__ */ jsx(
10677
- ScreenHeader,
10732
+ ) : null
10733
+ ] }),
10734
+ /* @__PURE__ */ jsx("img", { src: BLINK_PASSKEY_ILLUSTRATION, alt: "", "aria-hidden": "true", style: heroStyle }),
10735
+ /* @__PURE__ */ jsxs("div", { style: stackStyle, children: [
10736
+ /* @__PURE__ */ jsxs("div", { style: depositPillWrapperStyle, children: [
10737
+ /* @__PURE__ */ jsxs(
10738
+ "button",
10678
10739
  {
10679
- title: "Deposit",
10680
- right: headerRight,
10681
- left: /* @__PURE__ */ jsx(
10682
- "img",
10683
- {
10684
- src: BLINK_WORDMARK,
10685
- alt: "Blink",
10686
- style: wordmarkStyle
10687
- }
10688
- )
10740
+ type: "button",
10741
+ onClick: onSignInWithBlink,
10742
+ style: depositPillStyle(tokens.accent),
10743
+ children: [
10744
+ /* @__PURE__ */ jsx("span", { style: depositPillLabelStyle(tokens.accentText), children: depositLabel }),
10745
+ /* @__PURE__ */ jsx("span", { style: clusterStyle, children: CLUSTER_LOGOS.map((logo, i) => /* @__PURE__ */ jsx(
10746
+ "span",
10747
+ {
10748
+ style: clusterChipStyle(tokens.bgInput, i === CLUSTER_LOGOS.length - 1),
10749
+ children: /* @__PURE__ */ jsx("img", { src: logo, alt: "", "aria-hidden": "true", style: clusterIconStyle })
10750
+ },
10751
+ logo
10752
+ )) })
10753
+ ]
10689
10754
  }
10690
10755
  ),
10691
- /* @__PURE__ */ jsxs("div", { style: contentStyle2, children: [
10692
- /* @__PURE__ */ jsx(DepositTypeToggle, { tokens }),
10693
- /* @__PURE__ */ jsxs("div", { style: cardStyle(tokens.bgCardTranslucent), children: [
10694
- /* @__PURE__ */ jsx(
10695
- SourceRow,
10696
- {
10697
- name: "Connect Wallet",
10698
- icon: /* @__PURE__ */ jsx(WalletIcon, { color: tokens.text }),
10699
- onClick: onFromWallet,
10700
- right: /* @__PURE__ */ jsx("span", { style: badgeWithArrowStyle, children: /* @__PURE__ */ jsx("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { d: "M9 6l6 6-6 6", stroke: tokens.textMuted, strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) })
10701
- }
10702
- ),
10703
- /* @__PURE__ */ jsx(
10704
- SourceRow,
10705
- {
10706
- name: "Address",
10707
- icon: /* @__PURE__ */ jsx(AddressIcon, { color: tokens.text }),
10708
- onClick: onToAddress
10709
- }
10710
- ),
10711
- /* @__PURE__ */ jsx(
10712
- SourceRow,
10713
- {
10714
- name: "Exchange",
10715
- icon: /* @__PURE__ */ jsx(LinkIcon, { color: tokens.textTertiary }),
10716
- disabled: true,
10717
- disabledColor: tokens.textTertiary,
10718
- right: /* @__PURE__ */ jsx(ComingSoonBadge, { tokens })
10719
- }
10720
- )
10721
- ] })
10722
- ] })
10723
- ]
10724
- }
10725
- );
10726
- }
10727
- function DepositTypeToggle({ tokens }) {
10728
- return /* @__PURE__ */ jsx(Fragment, {});
10729
- }
10730
- function ComingSoonBadge({ tokens }) {
10731
- return /* @__PURE__ */ jsx("span", { style: comingSoonBadgeStyle(tokens.bgRecessed, tokens.textMuted), children: "Coming soon" });
10732
- }
10733
- function WalletIcon({ color }) {
10734
- return /* @__PURE__ */ jsxs("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
10735
- /* @__PURE__ */ jsx(
10736
- "path",
10737
- {
10738
- d: "M3 9.5a3 3 0 013-3h12a3 3 0 013 3v8a3 3 0 01-3 3H6a3 3 0 01-3-3v-8z",
10739
- stroke: color,
10740
- strokeWidth: "1.6"
10741
- }
10742
- ),
10743
- /* @__PURE__ */ jsx(
10744
- "path",
10745
- {
10746
- d: "M16 4.5l-9 2",
10747
- stroke: color,
10748
- strokeWidth: "1.6",
10749
- strokeLinecap: "round"
10750
- }
10751
- ),
10752
- /* @__PURE__ */ jsx("circle", { cx: "17.25", cy: "13.5", r: "1.1", fill: color })
10753
- ] });
10754
- }
10755
- function AddressIcon({ color }) {
10756
- return /* @__PURE__ */ jsxs("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
10757
- /* @__PURE__ */ jsx("rect", { x: "3.5", y: "3.5", width: "7", height: "7", rx: "1", stroke: color, strokeWidth: "1.4" }),
10758
- /* @__PURE__ */ jsx("rect", { x: "6", y: "6", width: "2", height: "2", fill: color }),
10759
- /* @__PURE__ */ jsx("rect", { x: "13.5", y: "3.5", width: "7", height: "7", rx: "1", stroke: color, strokeWidth: "1.4" }),
10760
- /* @__PURE__ */ jsx("rect", { x: "16", y: "6", width: "2", height: "2", fill: color }),
10761
- /* @__PURE__ */ jsx("rect", { x: "3.5", y: "13.5", width: "7", height: "7", rx: "1", stroke: color, strokeWidth: "1.4" }),
10762
- /* @__PURE__ */ jsx("rect", { x: "6", y: "16", width: "2", height: "2", fill: color }),
10763
- /* @__PURE__ */ jsx("rect", { x: "13.5", y: "13.5", width: "2.5", height: "2.5", fill: color }),
10764
- /* @__PURE__ */ jsx("rect", { x: "18", y: "13.5", width: "2.5", height: "2.5", fill: color }),
10765
- /* @__PURE__ */ jsx("rect", { x: "13.5", y: "18", width: "2.5", height: "2.5", fill: color }),
10766
- /* @__PURE__ */ jsx("rect", { x: "18", y: "18", width: "2.5", height: "2.5", fill: color })
10767
- ] });
10756
+ /* @__PURE__ */ jsx("span", { style: feesBadgeStyle(tokens.highlight, tokens.text), children: "0% FEES" })
10757
+ ] }),
10758
+ /* @__PURE__ */ jsxs("div", { style: dividerRowStyle, children: [
10759
+ /* @__PURE__ */ jsx("span", { style: dividerRuleStyle(tokens.textTertiary) }),
10760
+ /* @__PURE__ */ jsx("span", { style: dividerLabelStyle(tokens.textTertiary), children: "OR" }),
10761
+ /* @__PURE__ */ jsx("span", { style: dividerRuleStyle(tokens.textTertiary) })
10762
+ ] }),
10763
+ /* @__PURE__ */ jsxs(
10764
+ "button",
10765
+ {
10766
+ type: "button",
10767
+ onClick: onToAddress,
10768
+ style: manualRowStyle(tokens.bgCardTranslucent),
10769
+ children: [
10770
+ /* @__PURE__ */ jsx("span", { style: manualLabelStyle(tokens.text), children: "Send Crypto Manually" }),
10771
+ /* @__PURE__ */ jsx(QrIcon, { color: tokens.text })
10772
+ ]
10773
+ }
10774
+ )
10775
+ ] })
10776
+ ] }) }) });
10768
10777
  }
10769
- function LinkIcon({ color }) {
10770
- return /* @__PURE__ */ jsx(
10771
- "img",
10778
+ function QrIcon({ color }) {
10779
+ return /* @__PURE__ */ jsxs(
10780
+ "svg",
10772
10781
  {
10773
- src: LINK_ICON_DATA_URI,
10774
- alt: "",
10782
+ width: "24",
10783
+ height: "24",
10784
+ viewBox: "0 0 24 24",
10785
+ fill: "none",
10775
10786
  "aria-hidden": "true",
10776
- style: linkIconImageStyle(color)
10787
+ style: { flexShrink: 0 },
10788
+ children: [
10789
+ /* @__PURE__ */ jsx("rect", { x: "3.5", y: "3.5", width: "7", height: "7", rx: "1", stroke: color, strokeWidth: "1.4" }),
10790
+ /* @__PURE__ */ jsx("rect", { x: "6", y: "6", width: "2", height: "2", fill: color }),
10791
+ /* @__PURE__ */ jsx("rect", { x: "13.5", y: "3.5", width: "7", height: "7", rx: "1", stroke: color, strokeWidth: "1.4" }),
10792
+ /* @__PURE__ */ jsx("rect", { x: "16", y: "6", width: "2", height: "2", fill: color }),
10793
+ /* @__PURE__ */ jsx("rect", { x: "3.5", y: "13.5", width: "7", height: "7", rx: "1", stroke: color, strokeWidth: "1.4" }),
10794
+ /* @__PURE__ */ jsx("rect", { x: "6", y: "16", width: "2", height: "2", fill: color }),
10795
+ /* @__PURE__ */ jsx("rect", { x: "13.5", y: "13.5", width: "2.5", height: "2.5", fill: color }),
10796
+ /* @__PURE__ */ jsx("rect", { x: "18", y: "13.5", width: "2.5", height: "2.5", fill: color }),
10797
+ /* @__PURE__ */ jsx("rect", { x: "13.5", y: "18", width: "2.5", height: "2.5", fill: color }),
10798
+ /* @__PURE__ */ jsx("rect", { x: "18", y: "18", width: "2.5", height: "2.5", fill: color })
10799
+ ]
10777
10800
  }
10778
10801
  );
10779
10802
  }
10780
- function FaceIdIcon2() {
10781
- return /* @__PURE__ */ jsxs("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
10782
- /* @__PURE__ */ jsx(
10783
- "path",
10784
- {
10785
- d: "M3 8V6a3 3 0 013-3h2",
10786
- stroke: "currentColor",
10787
- strokeWidth: "1.6",
10788
- strokeLinecap: "round"
10789
- }
10790
- ),
10791
- /* @__PURE__ */ jsx(
10792
- "path",
10793
- {
10794
- d: "M16 3h2a3 3 0 013 3v2",
10795
- stroke: "currentColor",
10796
- strokeWidth: "1.6",
10797
- strokeLinecap: "round"
10798
- }
10799
- ),
10800
- /* @__PURE__ */ jsx(
10801
- "path",
10802
- {
10803
- d: "M21 16v2a3 3 0 01-3 3h-2",
10804
- stroke: "currentColor",
10805
- strokeWidth: "1.6",
10806
- strokeLinecap: "round"
10807
- }
10808
- ),
10809
- /* @__PURE__ */ jsx(
10810
- "path",
10811
- {
10812
- d: "M8 21H6a3 3 0 01-3-3v-2",
10813
- stroke: "currentColor",
10814
- strokeWidth: "1.6",
10815
- strokeLinecap: "round"
10816
- }
10817
- ),
10818
- /* @__PURE__ */ jsx(
10819
- "path",
10820
- {
10821
- d: "M9 10v1.5",
10822
- stroke: "currentColor",
10823
- strokeWidth: "1.6",
10824
- strokeLinecap: "round"
10825
- }
10826
- ),
10827
- /* @__PURE__ */ jsx(
10828
- "path",
10829
- {
10830
- d: "M15 10v1.5",
10831
- stroke: "currentColor",
10832
- strokeWidth: "1.6",
10833
- strokeLinecap: "round"
10834
- }
10835
- ),
10836
- /* @__PURE__ */ jsx(
10837
- "path",
10838
- {
10839
- d: "M12 10v3.5",
10840
- stroke: "currentColor",
10841
- strokeWidth: "1.6",
10842
- strokeLinecap: "round"
10843
- }
10844
- ),
10845
- /* @__PURE__ */ jsx(
10846
- "path",
10847
- {
10848
- d: "M9.5 16.25c.7.6 1.55.95 2.5.95s1.8-.35 2.5-.95",
10849
- stroke: "currentColor",
10850
- strokeWidth: "1.6",
10851
- strokeLinecap: "round"
10852
- }
10853
- )
10854
- ] });
10855
- }
10856
- var wordmarkStyle = {
10857
- height: 20,
10803
+ var sheetStyle = {
10804
+ position: "relative",
10805
+ minHeight: "100%",
10806
+ display: "flex",
10807
+ flexDirection: "column",
10808
+ boxSizing: "border-box"
10809
+ };
10810
+ var contentStyle2 = {
10811
+ display: "flex",
10812
+ flexDirection: "column",
10813
+ alignItems: "center",
10814
+ gap: 32,
10815
+ padding: "32px 8px"
10816
+ };
10817
+ var headerRowStyle = {
10818
+ display: "flex",
10819
+ alignItems: "center",
10820
+ justifyContent: "space-between",
10821
+ width: "100%",
10822
+ minHeight: 44
10823
+ };
10824
+ var wordmarkImgStyle = {
10825
+ height: 31,
10858
10826
  width: "auto",
10827
+ display: "block"
10828
+ };
10829
+ var heroStyle = {
10830
+ width: 253,
10831
+ height: 253,
10832
+ maxWidth: "100%",
10859
10833
  objectFit: "contain",
10860
10834
  display: "block"
10861
10835
  };
10862
- var contentStyle2 = {
10836
+ var stackStyle = {
10863
10837
  display: "flex",
10864
10838
  flexDirection: "column",
10865
- gap: 24,
10866
- paddingTop: 24
10839
+ gap: 16,
10840
+ width: "100%"
10867
10841
  };
10868
- var cardStyle = (bg) => ({
10842
+ var depositPillWrapperStyle = {
10843
+ position: "relative",
10844
+ width: "100%",
10845
+ height: 71
10846
+ };
10847
+ var depositPillStyle = (bg) => ({
10869
10848
  display: "flex",
10870
- flexDirection: "column",
10849
+ alignItems: "center",
10850
+ justifyContent: "space-between",
10851
+ width: "100%",
10852
+ height: 56,
10853
+ padding: "12px 12px 12px 24px",
10871
10854
  background: bg,
10855
+ border: "none",
10872
10856
  borderRadius: 28,
10873
- padding: "8px 8px 8px 20px"
10857
+ cursor: "pointer",
10858
+ boxSizing: "border-box",
10859
+ fontFamily: "inherit"
10860
+ });
10861
+ var depositPillLabelStyle = (color) => ({
10862
+ color,
10863
+ fontSize: 16,
10864
+ fontWeight: 500,
10865
+ whiteSpace: "nowrap"
10874
10866
  });
10875
- var comingSoonBadgeStyle = (bg, color) => ({
10867
+ var clusterStyle = {
10868
+ display: "inline-flex",
10869
+ alignItems: "center",
10870
+ isolation: "isolate"
10871
+ };
10872
+ var clusterChipStyle = (bg, last) => ({
10873
+ width: 32,
10874
+ height: 32,
10875
+ borderRadius: "50%",
10876
+ background: bg,
10877
+ display: "inline-flex",
10878
+ alignItems: "center",
10879
+ justifyContent: "center",
10880
+ marginRight: last ? 0 : -12,
10881
+ filter: "drop-shadow(0 0 2px rgba(0, 0, 0, 0.24))",
10882
+ flexShrink: 0
10883
+ });
10884
+ var clusterIconStyle = {
10885
+ width: 24,
10886
+ height: 24,
10887
+ borderRadius: "50%",
10888
+ objectFit: "cover",
10889
+ display: "block"
10890
+ };
10891
+ var feesBadgeStyle = (bg, color) => ({
10892
+ position: "absolute",
10893
+ left: 131,
10894
+ top: 45,
10876
10895
  display: "inline-flex",
10877
10896
  alignItems: "center",
10878
10897
  justifyContent: "center",
10879
10898
  background: bg,
10880
10899
  color,
10881
- fontSize: 10,
10900
+ fontSize: 12,
10882
10901
  fontWeight: 500,
10883
10902
  lineHeight: 1,
10884
10903
  padding: "4px 8px",
10885
- borderRadius: 8,
10886
- marginRight: 8,
10887
- whiteSpace: "nowrap"
10904
+ borderRadius: 6,
10905
+ whiteSpace: "nowrap",
10906
+ transform: "rotate(-6.75deg)",
10907
+ boxShadow: "0 2px 4px rgba(0, 0, 0, 0.16)",
10908
+ pointerEvents: "none"
10888
10909
  });
10889
- var badgeWithArrowStyle = {
10910
+ var dividerRowStyle = {
10890
10911
  display: "flex",
10891
- alignItems: "center"
10912
+ alignItems: "center",
10913
+ justifyContent: "center",
10914
+ gap: 10,
10915
+ padding: "0 16px",
10916
+ width: "100%",
10917
+ boxSizing: "border-box"
10892
10918
  };
10893
- var linkIconImageStyle = (color) => ({
10894
- width: 24,
10895
- height: 24,
10896
- objectFit: "contain",
10897
- display: "block",
10898
- opacity: color.includes("rgba") ? 0.3 : 1
10919
+ var dividerRuleStyle = (color) => ({
10920
+ flex: 1,
10921
+ height: 1,
10922
+ background: color
10899
10923
  });
10900
- var closeButtonStyle2 = (tokens) => ({
10901
- width: 40,
10902
- height: 40,
10924
+ var dividerLabelStyle = (color) => ({
10925
+ color,
10926
+ fontSize: 12,
10927
+ fontWeight: 500,
10928
+ whiteSpace: "nowrap"
10929
+ });
10930
+ var manualRowStyle = (bg) => ({
10931
+ display: "flex",
10932
+ alignItems: "center",
10933
+ gap: 8,
10934
+ width: "100%",
10935
+ height: 56,
10936
+ padding: "12px 24px",
10937
+ background: bg,
10938
+ border: "none",
10939
+ borderRadius: 28,
10940
+ cursor: "pointer",
10941
+ boxSizing: "border-box",
10942
+ fontFamily: "inherit"
10943
+ });
10944
+ var manualLabelStyle = (color) => ({
10945
+ flex: 1,
10946
+ minWidth: 0,
10947
+ color,
10948
+ fontSize: 16,
10949
+ fontWeight: 400
10950
+ });
10951
+ var closeButtonStyle2 = (bg, color) => ({
10952
+ flexShrink: 0,
10953
+ width: 44,
10954
+ height: 44,
10903
10955
  borderRadius: "50%",
10904
10956
  border: "none",
10905
- background: tokens.bgRecessed,
10906
- color: tokens.text,
10957
+ background: bg,
10958
+ color,
10907
10959
  display: "flex",
10908
10960
  alignItems: "center",
10909
10961
  justifyContent: "center",
@@ -11259,7 +11311,7 @@ function PasskeyPopupWelcomeScreen({
11259
11311
  /* @__PURE__ */ jsxs("div", { style: contentStyle6, children: [
11260
11312
  /* @__PURE__ */ jsxs("div", { style: lockupStyle, children: [
11261
11313
  /* @__PURE__ */ jsx("img", { src: BLINK_LOGO, alt: "", "aria-hidden": true, style: lockupMarkStyle }),
11262
- /* @__PURE__ */ jsx("span", { style: wordmarkStyle2(tokens.text), children: "Blink" })
11314
+ /* @__PURE__ */ jsx("span", { style: wordmarkStyle(tokens.text), children: "Blink" })
11263
11315
  ] }),
11264
11316
  /* @__PURE__ */ jsx("div", { style: illustrationFrameStyle, children: /* @__PURE__ */ jsx(
11265
11317
  "img",
@@ -11316,7 +11368,7 @@ var lockupMarkStyle = {
11316
11368
  height: 24,
11317
11369
  display: "block"
11318
11370
  };
11319
- var wordmarkStyle2 = (color) => ({
11371
+ var wordmarkStyle = (color) => ({
11320
11372
  fontSize: "1.45rem",
11321
11373
  fontWeight: 500,
11322
11374
  letterSpacing: "-0.03em",
@@ -11765,7 +11817,7 @@ function WalletPickerScreen({
11765
11817
  ),
11766
11818
  /* @__PURE__ */ jsx("h1", { style: titleStyle3(tokens.text), children: "Link wallet" }),
11767
11819
  error && /* @__PURE__ */ jsx("div", { style: errorBannerStyle5(tokens), children: error }),
11768
- /* @__PURE__ */ jsx("div", { style: sheetStackStyle, children: /* @__PURE__ */ jsx("div", { style: cardStyle2(tokens.bgCardTranslucent), children: showOtherWallets ? /* @__PURE__ */ jsx(
11820
+ /* @__PURE__ */ jsx("div", { style: sheetStackStyle, children: /* @__PURE__ */ jsx("div", { style: cardStyle(tokens.bgCardTranslucent), children: showOtherWallets ? /* @__PURE__ */ jsx(
11769
11821
  OtherWalletsPanel,
11770
11822
  {
11771
11823
  wallets: filteredReownWallets,
@@ -11988,7 +12040,7 @@ var sheetStackStyle = {
11988
12040
  flexDirection: "column",
11989
12041
  gap: 16
11990
12042
  };
11991
- var cardStyle2 = (bg) => ({
12043
+ var cardStyle = (bg) => ({
11992
12044
  display: "flex",
11993
12045
  flexDirection: "column",
11994
12046
  background: bg,
@@ -12141,7 +12193,7 @@ function LinkTokensScreen({
12141
12193
  {
12142
12194
  onBack,
12143
12195
  onLogout,
12144
- center: /* @__PURE__ */ jsx("img", { src: BLINK_WORDMARK, alt: "Blink", style: wordmarkImgStyle })
12196
+ center: /* @__PURE__ */ jsx("img", { src: BLINK_WORDMARK, alt: "Blink", style: wordmarkImgStyle2 })
12145
12197
  }
12146
12198
  ),
12147
12199
  /* @__PURE__ */ jsxs("div", { style: contentStyle9, children: [
@@ -12207,7 +12259,7 @@ var contentStyle9 = {
12207
12259
  minHeight: 0,
12208
12260
  width: "100%"
12209
12261
  };
12210
- var wordmarkImgStyle = {
12262
+ var wordmarkImgStyle2 = {
12211
12263
  height: 22,
12212
12264
  width: "auto",
12213
12265
  display: "block",
@@ -12531,7 +12583,7 @@ function SelectDepositSourceScreen({
12531
12583
  label: "Send manually",
12532
12584
  color: tokens.text,
12533
12585
  onClick: onSendManually,
12534
- icon: /* @__PURE__ */ jsx(QrIcon, { color: tokens.text })
12586
+ icon: /* @__PURE__ */ jsx(QrIcon2, { color: tokens.text })
12535
12587
  }
12536
12588
  ),
12537
12589
  onAddProvider && /* @__PURE__ */ jsx(
@@ -12540,7 +12592,7 @@ function SelectDepositSourceScreen({
12540
12592
  label: "Link Wallet",
12541
12593
  color: tokens.text,
12542
12594
  onClick: onAddProvider,
12543
- icon: /* @__PURE__ */ jsx(WalletIcon2, {})
12595
+ icon: /* @__PURE__ */ jsx(WalletIcon, {})
12544
12596
  }
12545
12597
  )
12546
12598
  ] })
@@ -12625,12 +12677,23 @@ function ActionRow({
12625
12677
  onClick,
12626
12678
  icon
12627
12679
  }) {
12628
- return /* @__PURE__ */ jsxs("button", { type: "button", onClick, style: actionRowStyle(color), children: [
12629
- /* @__PURE__ */ jsx("span", { style: actionIconSlotStyle, children: icon }),
12630
- /* @__PURE__ */ jsx("span", { style: actionLabelStyle, children: label })
12631
- ] });
12680
+ const [hovered, setHovered] = useState(false);
12681
+ return /* @__PURE__ */ jsxs(
12682
+ "button",
12683
+ {
12684
+ type: "button",
12685
+ onClick,
12686
+ onMouseEnter: () => setHovered(true),
12687
+ onMouseLeave: () => setHovered(false),
12688
+ style: actionRowStyle(color, hovered),
12689
+ children: [
12690
+ /* @__PURE__ */ jsx("span", { style: actionIconSlotStyle, children: icon }),
12691
+ /* @__PURE__ */ jsx("span", { style: actionLabelStyle, children: label })
12692
+ ]
12693
+ }
12694
+ );
12632
12695
  }
12633
- function QrIcon({ color }) {
12696
+ function QrIcon2({ color }) {
12634
12697
  return /* @__PURE__ */ jsxs("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
12635
12698
  /* @__PURE__ */ jsx("rect", { x: "3.5", y: "3.5", width: "7", height: "7", rx: "1", stroke: color, strokeWidth: "1.4" }),
12636
12699
  /* @__PURE__ */ jsx("rect", { x: "6", y: "6", width: "2", height: "2", fill: color }),
@@ -12644,7 +12707,7 @@ function QrIcon({ color }) {
12644
12707
  /* @__PURE__ */ jsx("rect", { x: "18", y: "18", width: "2.5", height: "2.5", fill: color })
12645
12708
  ] });
12646
12709
  }
12647
- function WalletIcon2() {
12710
+ function WalletIcon() {
12648
12711
  return /* @__PURE__ */ jsxs("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
12649
12712
  /* @__PURE__ */ jsx(
12650
12713
  "path",
@@ -12662,13 +12725,13 @@ function WalletIcon2() {
12662
12725
  )
12663
12726
  ] });
12664
12727
  }
12665
- var actionRowStyle = (color) => ({
12728
+ var actionRowStyle = (color, hovered) => ({
12666
12729
  display: "flex",
12667
12730
  alignItems: "center",
12668
12731
  gap: 8,
12669
12732
  width: "100%",
12670
12733
  padding: 4,
12671
- background: "transparent",
12734
+ background: hovered ? "rgba(255,255,255,0.24)" : "transparent",
12672
12735
  border: "none",
12673
12736
  borderRadius: 56,
12674
12737
  color,
@@ -12676,6 +12739,7 @@ var actionRowStyle = (color) => ({
12676
12739
  fontFamily: "inherit",
12677
12740
  textAlign: "left",
12678
12741
  outline: "none",
12742
+ transition: "background 0.15s ease",
12679
12743
  boxSizing: "border-box"
12680
12744
  });
12681
12745
  var actionIconSlotStyle = {
@@ -12850,7 +12914,7 @@ function DepositScreen({
12850
12914
  onClick: () => onDeposit(amount),
12851
12915
  disabled: !canDeposit,
12852
12916
  loading: processing,
12853
- icon: /* @__PURE__ */ jsx(FaceIdIcon3, {}),
12917
+ icon: /* @__PURE__ */ jsx(FaceIdIcon2, {}),
12854
12918
  children: "Deposit"
12855
12919
  }
12856
12920
  );
@@ -12998,7 +13062,7 @@ function DepositScreen({
12998
13062
  ) : /* @__PURE__ */ jsx("span", { style: redesignNoFeesStyle(tokens.text), children: "No fees" }) }),
12999
13063
  showHeroPresets && presetsRow
13000
13064
  ] }),
13001
- /* @__PURE__ */ jsx("div", { style: bannerSlotStyle2, children: showLowFunds ? /* @__PURE__ */ jsx(
13065
+ /* @__PURE__ */ jsx("div", { style: bannerSlotStyle2, children: mobileEntryWithKeypad ? null : showLowFunds ? /* @__PURE__ */ jsx(
13002
13066
  NotificationBanner,
13003
13067
  {
13004
13068
  variant: "negative",
@@ -13020,7 +13084,7 @@ function DepositScreen({
13020
13084
  ) : error ? /* @__PURE__ */ jsx(NotificationBanner, { title: "Something went wrong", description: error }) : null })
13021
13085
  ] });
13022
13086
  }
13023
- function FaceIdIcon3() {
13087
+ function FaceIdIcon2() {
13024
13088
  return /* @__PURE__ */ jsxs("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
13025
13089
  /* @__PURE__ */ jsx("path", { d: "M3 8V6a3 3 0 013-3h2", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round" }),
13026
13090
  /* @__PURE__ */ jsx("path", { d: "M16 3h2a3 3 0 013 3v2", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round" }),
@@ -14760,30 +14824,102 @@ var closeButtonStyle5 = (bg, color) => ({
14760
14824
  padding: 0
14761
14825
  });
14762
14826
  var DELAYED_RETRY_VISIBLE_MS = 2e4;
14827
+ var SPIN_KEYFRAMES_CSS2 = `
14828
+ @keyframes blink-approving-spin {
14829
+ to { transform: rotate(360deg); }
14830
+ }`;
14763
14831
  function ApprovingInWalletScreen({
14764
14832
  tokenSymbol,
14765
14833
  chainName,
14766
14834
  step,
14767
14835
  error,
14768
- onRetry
14836
+ onRetry,
14837
+ onBack,
14838
+ onLogout
14769
14839
  }) {
14770
- const { tokens } = useBlinkConfig();
14840
+ const { tokens: t } = useBlinkConfig();
14771
14841
  const showDelayedRetry = useDelayedRetry(error == null && onRetry != null);
14772
14842
  const retryVisible = onRetry != null && (error != null || showDelayedRetry);
14773
- return /* @__PURE__ */ jsx(
14843
+ const token = tokenSymbol ?? "token";
14844
+ const steps = buildSteps(step, tokenSymbol, chainName);
14845
+ return /* @__PURE__ */ jsxs(
14774
14846
  ScreenLayout,
14775
14847
  {
14776
- footer: retryVisible ? /* @__PURE__ */ jsxs("div", { style: footerStackStyle4, children: [
14777
- error && /* @__PURE__ */ jsx(InfoBanner, { children: error }),
14778
- /* @__PURE__ */ jsx(OutlineButton, { onClick: onRetry, children: "Retry" })
14779
- ] }) : void 0,
14780
- children: /* @__PURE__ */ jsxs("div", { style: contentStyle15, children: [
14781
- /* @__PURE__ */ jsxs("div", { style: lockupStyle2, children: [
14782
- /* @__PURE__ */ jsx("img", { src: BLINK_LOGO, alt: "", "aria-hidden": true, style: lockupMarkStyle2 }),
14783
- /* @__PURE__ */ jsx("span", { style: wordmarkStyle3(tokens.text), children: "Blink" })
14848
+ scrollableBody: false,
14849
+ footer: /* @__PURE__ */ jsxs("div", { style: footerStackStyle4, children: [
14850
+ /* @__PURE__ */ jsxs("div", { style: lockBannerStyle2, children: [
14851
+ /* @__PURE__ */ jsx("span", { style: lockIconWrapStyle2(t.text), children: /* @__PURE__ */ jsx(LockIcon3, {}) }),
14852
+ /* @__PURE__ */ jsx("p", { style: lockBannerTextStyle2(t.text), children: "Your passkey is required each time you deposit. Funds cannot move without your approval." })
14784
14853
  ] }),
14785
- /* @__PURE__ */ jsx("div", { style: stepsFrameStyle, children: /* @__PURE__ */ jsx(StepList, { steps: buildSteps(step, tokenSymbol, chainName), activeIndicator: "spinner", size: "lg" }) })
14786
- ] })
14854
+ retryVisible ? /* @__PURE__ */ jsxs("div", { style: retryStackStyle, children: [
14855
+ error && /* @__PURE__ */ jsx(InfoBanner, { children: error }),
14856
+ /* @__PURE__ */ jsx(OutlineButton, { onClick: onRetry, children: "Retry" })
14857
+ ] }) : /* @__PURE__ */ jsx(PrimaryButton, { spinnerOnly: true })
14858
+ ] }),
14859
+ children: [
14860
+ /* @__PURE__ */ jsx(
14861
+ ScreenHeader,
14862
+ {
14863
+ onBack,
14864
+ onLogout,
14865
+ center: /* @__PURE__ */ jsx("img", { src: BLINK_WORDMARK, alt: "Blink", style: wordmarkImgStyle3 })
14866
+ }
14867
+ ),
14868
+ /* @__PURE__ */ jsxs("div", { style: contentStyle15, children: [
14869
+ /* @__PURE__ */ jsx("h2", { style: headingStyle13(t.text), children: `Authorizing ${token} for passkey deposits` }),
14870
+ /* @__PURE__ */ jsxs("div", { style: cardStyle2(t.bgRecessed, t.radiusLg), children: [
14871
+ /* @__PURE__ */ jsx("style", { children: SPIN_KEYFRAMES_CSS2 }),
14872
+ steps.map((s, i) => /* @__PURE__ */ jsx(ChecklistRow, { step: s }, i))
14873
+ ] })
14874
+ ] })
14875
+ ]
14876
+ }
14877
+ );
14878
+ }
14879
+ function ChecklistRow({ step }) {
14880
+ const { tokens: t } = useBlinkConfig();
14881
+ const isComplete = step.status === "complete";
14882
+ const isActive = step.status === "active";
14883
+ return /* @__PURE__ */ jsxs("div", { style: rowStyle6, children: [
14884
+ isComplete ? /* @__PURE__ */ jsx("span", { style: completeBadgeStyle(t.accent), children: /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsx(
14885
+ "path",
14886
+ {
14887
+ d: "M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z",
14888
+ fill: t.accentText
14889
+ }
14890
+ ) }) }) : isActive ? /* @__PURE__ */ jsx(RowSpinner, { color: t.accent }) : /* @__PURE__ */ jsx("span", { style: pendingBadgeStyle(t.bgRecessed) }),
14891
+ /* @__PURE__ */ jsx("span", { style: labelStyle7(isComplete || isActive ? t.text : t.textMuted), children: step.label })
14892
+ ] });
14893
+ }
14894
+ function RowSpinner({ color }) {
14895
+ const size = 24;
14896
+ const stroke = 2;
14897
+ const r = (size - stroke) / 2;
14898
+ const c = size / 2;
14899
+ const circumference = 2 * Math.PI * r;
14900
+ return /* @__PURE__ */ jsx(
14901
+ "div",
14902
+ {
14903
+ role: "status",
14904
+ "aria-label": "Loading",
14905
+ style: {
14906
+ width: size,
14907
+ height: size,
14908
+ flexShrink: 0,
14909
+ animation: "blink-approving-spin 0.9s linear infinite"
14910
+ },
14911
+ children: /* @__PURE__ */ jsx("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, fill: "none", children: /* @__PURE__ */ jsx(
14912
+ "circle",
14913
+ {
14914
+ cx: c,
14915
+ cy: c,
14916
+ r,
14917
+ stroke: color,
14918
+ strokeWidth: stroke,
14919
+ strokeLinecap: "round",
14920
+ strokeDasharray: `${circumference * 0.25} ${circumference}`
14921
+ }
14922
+ ) })
14787
14923
  }
14788
14924
  );
14789
14925
  }
@@ -14812,50 +14948,124 @@ function useDelayedRetry(enabled) {
14812
14948
  }, [enabled]);
14813
14949
  return visible;
14814
14950
  }
14951
+ function LockIcon3() {
14952
+ return /* @__PURE__ */ jsx("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx(
14953
+ "path",
14954
+ {
14955
+ d: "M7 10V8a5 5 0 0 1 10 0v2m-12 0h14a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1z",
14956
+ stroke: "currentColor",
14957
+ strokeWidth: "2",
14958
+ strokeLinecap: "round",
14959
+ strokeLinejoin: "round"
14960
+ }
14961
+ ) });
14962
+ }
14963
+ var wordmarkImgStyle3 = {
14964
+ height: 22,
14965
+ width: "auto",
14966
+ display: "block",
14967
+ pointerEvents: "none",
14968
+ userSelect: "none"
14969
+ };
14815
14970
  var contentStyle15 = {
14971
+ display: "flex",
14972
+ flexDirection: "column",
14973
+ alignItems: "center",
14974
+ gap: 16,
14975
+ paddingTop: 8,
14816
14976
  flex: 1,
14817
14977
  minHeight: 0,
14978
+ width: "100%"
14979
+ };
14980
+ var headingStyle13 = (color) => ({
14981
+ fontSize: 24,
14982
+ fontWeight: 700,
14983
+ lineHeight: "normal",
14984
+ letterSpacing: 0,
14985
+ color,
14986
+ margin: 0,
14987
+ textAlign: "center"
14988
+ });
14989
+ var cardStyle2 = (bg, radius) => ({
14990
+ background: bg,
14991
+ borderRadius: radius,
14992
+ padding: 8,
14993
+ width: "100%",
14994
+ boxSizing: "border-box",
14818
14995
  display: "flex",
14819
14996
  flexDirection: "column",
14997
+ gap: 4
14998
+ });
14999
+ var rowStyle6 = {
15000
+ display: "flex",
14820
15001
  alignItems: "center",
15002
+ gap: 16,
15003
+ padding: "12px 16px 12px 12px",
15004
+ borderRadius: 16,
14821
15005
  width: "100%",
14822
- // ScreenLayout body already applies 24px side padding; +8px here reaches the
14823
- // 32px Figma gutter, with 32px above the logo and a 32px gap to the checklist.
14824
- padding: "32px 8px 0",
14825
- gap: 32
15006
+ boxSizing: "border-box"
14826
15007
  };
14827
- var lockupStyle2 = {
14828
- display: "flex",
15008
+ var completeBadgeStyle = (color) => ({
15009
+ width: 24,
15010
+ height: 24,
15011
+ borderRadius: "50%",
15012
+ background: color,
15013
+ display: "inline-flex",
14829
15014
  alignItems: "center",
14830
- gap: 6,
15015
+ justifyContent: "center",
14831
15016
  flexShrink: 0
14832
- };
14833
- var lockupMarkStyle2 = {
15017
+ });
15018
+ var pendingBadgeStyle = (color) => ({
14834
15019
  width: 24,
14835
15020
  height: 24,
14836
- display: "block"
14837
- };
14838
- var wordmarkStyle3 = (color) => ({
14839
- fontSize: "1.45rem",
14840
- fontWeight: 500,
14841
- letterSpacing: "-0.03em",
14842
- lineHeight: 1,
15021
+ borderRadius: "50%",
15022
+ background: color,
15023
+ flexShrink: 0
15024
+ });
15025
+ var labelStyle7 = (color) => ({
15026
+ fontSize: "1rem",
15027
+ fontWeight: 400,
15028
+ lineHeight: 1.25,
14843
15029
  color
14844
15030
  });
14845
- var stepsFrameStyle = {
14846
- flex: 1,
14847
- minHeight: 0,
15031
+ var footerStackStyle4 = {
14848
15032
  display: "flex",
14849
15033
  flexDirection: "column",
14850
- alignItems: "center",
14851
- justifyContent: "center",
15034
+ gap: 16,
14852
15035
  width: "100%"
14853
15036
  };
14854
- var footerStackStyle4 = {
15037
+ var retryStackStyle = {
14855
15038
  display: "flex",
14856
15039
  flexDirection: "column",
14857
- gap: 8
15040
+ gap: 8,
15041
+ width: "100%"
14858
15042
  };
15043
+ var lockBannerStyle2 = {
15044
+ display: "flex",
15045
+ alignItems: "flex-start",
15046
+ gap: 16,
15047
+ padding: "12px 16px 12px 12px",
15048
+ borderRadius: 16,
15049
+ width: "100%",
15050
+ boxSizing: "border-box"
15051
+ };
15052
+ var lockIconWrapStyle2 = (color) => ({
15053
+ flexShrink: 0,
15054
+ width: 24,
15055
+ height: 24,
15056
+ display: "inline-flex",
15057
+ alignItems: "center",
15058
+ justifyContent: "center",
15059
+ color
15060
+ });
15061
+ var lockBannerTextStyle2 = (color) => ({
15062
+ margin: 0,
15063
+ flex: 1,
15064
+ fontSize: 12,
15065
+ fontWeight: 500,
15066
+ lineHeight: "normal",
15067
+ color
15068
+ });
14859
15069
  function ConfirmSignScreen({
14860
15070
  walletName,
14861
15071
  chainFamily,
@@ -14884,7 +15094,7 @@ function ConfirmSignScreen({
14884
15094
  /* @__PURE__ */ jsx(ScreenHeader, { onLogout }),
14885
15095
  /* @__PURE__ */ jsxs("div", { style: contentStyle16, children: [
14886
15096
  logoSrc ? /* @__PURE__ */ jsx("img", { src: logoSrc, alt: displayName, style: logoStyle3 }) : /* @__PURE__ */ jsx(Spinner, { size: 48 }),
14887
- /* @__PURE__ */ jsx("h2", { style: headingStyle13(tokens.text), children: heading }),
15097
+ /* @__PURE__ */ jsx("h2", { style: headingStyle14(tokens.text), children: heading }),
14888
15098
  /* @__PURE__ */ jsx("p", { style: subtitleStyle10(tokens.textSecondary), children: subtitle }),
14889
15099
  /* @__PURE__ */ jsxs("div", { style: successBadgeStyle(tokens), children: [
14890
15100
  /* @__PURE__ */ jsx("span", { style: checkmarkStyle, children: "\u2713" }),
@@ -14910,7 +15120,7 @@ var logoStyle3 = {
14910
15120
  borderRadius: 14,
14911
15121
  objectFit: "contain"
14912
15122
  };
14913
- var headingStyle13 = (color) => ({
15123
+ var headingStyle14 = (color) => ({
14914
15124
  fontSize: "1.45rem",
14915
15125
  fontWeight: 700,
14916
15126
  letterSpacing: "-0.02em",
@@ -15272,10 +15482,10 @@ function GuestTokenPickerScreen({
15272
15482
  children: [
15273
15483
  /* @__PURE__ */ jsx(ScreenHeader, { onBack }),
15274
15484
  /* @__PURE__ */ jsxs("div", { style: contentStyle17, children: [
15275
- /* @__PURE__ */ jsx("h2", { style: headingStyle14(tokens.text), children: title }),
15485
+ /* @__PURE__ */ jsx("h2", { style: headingStyle15(tokens.text), children: title }),
15276
15486
  error && /* @__PURE__ */ jsx("div", { style: errorBannerStyle8(tokens), children: error }),
15277
15487
  entries2.length === 0 ? /* @__PURE__ */ jsx("p", { style: subtitleStyle11(tokens.textMuted), children: emptyMessage ?? "No tokens available." }) : /* @__PURE__ */ jsxs(Fragment, { children: [
15278
- /* @__PURE__ */ jsx("label", { style: labelStyle7(tokens.textSecondary), children: "Token" }),
15488
+ /* @__PURE__ */ jsx("label", { style: labelStyle8(tokens.textSecondary), children: "Token" }),
15279
15489
  /* @__PURE__ */ jsx(
15280
15490
  "button",
15281
15491
  {
@@ -15355,7 +15565,7 @@ var contentStyle17 = {
15355
15565
  padding: "0 20px 16px",
15356
15566
  gap: 12
15357
15567
  };
15358
- var headingStyle14 = (color) => ({
15568
+ var headingStyle15 = (color) => ({
15359
15569
  fontSize: "1.25rem",
15360
15570
  fontWeight: 700,
15361
15571
  color,
@@ -15367,7 +15577,7 @@ var subtitleStyle11 = (color) => ({
15367
15577
  color,
15368
15578
  textAlign: "center"
15369
15579
  });
15370
- var labelStyle7 = (color) => ({
15580
+ var labelStyle8 = (color) => ({
15371
15581
  fontSize: "0.75rem",
15372
15582
  fontWeight: 600,
15373
15583
  color,
@@ -15500,7 +15710,7 @@ function ManualTransferFlow({
15500
15710
  screenContent = /* @__PURE__ */ jsxs(ScreenLayout, { footer: /* @__PURE__ */ jsx(PrimaryButton, { onClick: onBack, children: "Back" }), children: [
15501
15711
  /* @__PURE__ */ jsx(ScreenHeader, { onBack }),
15502
15712
  /* @__PURE__ */ jsxs("div", { style: contentStyle18, children: [
15503
- /* @__PURE__ */ jsx("h2", { style: headingStyle15(tokens.text), children: "Manual transfer unavailable" }),
15713
+ /* @__PURE__ */ jsx("h2", { style: headingStyle16(tokens.text), children: "Manual transfer unavailable" }),
15504
15714
  /* @__PURE__ */ jsx("p", { style: bodyStyle5(tokens.textMuted), children: "merchantAuthorization is required." })
15505
15715
  ] })
15506
15716
  ] });
@@ -15579,7 +15789,7 @@ var contentStyle18 = {
15579
15789
  paddingBottom: 24,
15580
15790
  width: "100%"
15581
15791
  };
15582
- var headingStyle15 = (color) => ({
15792
+ var headingStyle16 = (color) => ({
15583
15793
  color,
15584
15794
  fontSize: "2rem",
15585
15795
  lineHeight: 1.05,
@@ -15604,7 +15814,7 @@ function GenericLoadingShimmer() {
15604
15814
  role: "status",
15605
15815
  "aria-label": "Loading payment flow",
15606
15816
  "aria-busy": "true",
15607
- style: sheetStyle(tokens),
15817
+ style: sheetStyle2(tokens),
15608
15818
  children: [
15609
15819
  /* @__PURE__ */ jsx("style", { children: `
15610
15820
  @keyframes blink-loading-shimmer {
@@ -15650,7 +15860,7 @@ function ShimmerBlock2({
15650
15860
  }
15651
15861
  );
15652
15862
  }
15653
- var sheetStyle = (tokens) => ({
15863
+ var sheetStyle2 = (tokens) => ({
15654
15864
  display: "flex",
15655
15865
  flexDirection: "column",
15656
15866
  height: "100%",
@@ -15697,12 +15907,12 @@ function buildLoginScreenProps({ flow, handlers }) {
15697
15907
  }
15698
15908
  function buildDepositOptionsScreenProps({ flow, handlers }) {
15699
15909
  return {
15700
- // "From Wallet" routes through REQUEST_LOGIN (handlers.onLogin) so the
15701
- // existing login path runs unchanged.
15702
- onFromWallet: handlers.onLogin,
15703
- // "To Address" navigates to the manual-transfer flow.
15910
+ // "Send Crypto Manually" navigates to the manual-transfer flow.
15704
15911
  onToAddress: () => handlers.onSetPhase({ step: "manual-transfer" }),
15705
- onSignInWithBlink: handlers.onLoginWithPasskey,
15912
+ // The primary CTA routes to the login screen (credential selection) rather
15913
+ // than prompting for a passkey directly, matching the connect-wallet entry
15914
+ // point. onLogin dispatches REQUEST_LOGIN → step 'login' → LoginScreen.
15915
+ onSignInWithBlink: handlers.onLogin,
15706
15916
  // Deposit-options is the root screen for the full-widget flow, so the
15707
15917
  // top-right (X) closes the widget through the same `onBack` the host
15708
15918
  // provides. Falling back to `undefined` hides the close button when the
@@ -15794,7 +16004,8 @@ function buildApprovingInWalletScreenProps({
15794
16004
  chainName: setupToken?.chainName ?? null,
15795
16005
  step,
15796
16006
  error: flow.state.error || remote.authExecutorError,
15797
- onRetry: handlers.onRetryAuthorization
16007
+ onRetry: handlers.onRetryAuthorization,
16008
+ onLogout: flow.isDesktop ? handlers.onLogout : void 0
15798
16009
  };
15799
16010
  }
15800
16011
  function buildLinkTokensScreenProps({
@@ -19556,25 +19767,6 @@ function BlinkPaymentInner({
19556
19767
  ) });
19557
19768
  }
19558
19769
 
19559
- // src/deviceBiometricUnlockText.ts
19560
- var FALLBACK = "Biometric verification";
19561
- function getDeviceBiometricUnlockText() {
19562
- const ua = typeof navigator !== "undefined" && typeof navigator.userAgent === "string" ? navigator.userAgent : "";
19563
- if (/iPhone|iPad|iPod/i.test(ua)) {
19564
- return "Face ID";
19565
- }
19566
- if (/Android/i.test(ua)) {
19567
- return "Fingerprint or face unlock";
19568
- }
19569
- if (/Windows NT/i.test(ua)) {
19570
- return "Windows Hello";
19571
- }
19572
- if (/Macintosh|Mac OS X/i.test(ua)) {
19573
- return "Touch ID";
19574
- }
19575
- return FALLBACK;
19576
- }
19577
-
19578
- export { ACCOUNT_SWITCH_CONFLICT_MESSAGE, AdvancedSourceScreen, ApprovingInWalletScreen, AuthorizationSessionCancelledError, BLINK_ERROR_ILLUSTRATION, BLINK_LOGO, BLINK_MASCOT, BLINK_PASSKEY_ILLUSTRATION, BLINK_SUCCESS_ILLUSTRATION, BlinkErrorScreen, BlinkInitialLoadingScreen, BlinkLoadingScreen, BlinkPayment, BlinkProvider, ConfirmSignScreen, DepositCompleteScreen, DepositScreen, DepositTransferStatusScreen, GuestTokenPickerScreen, IconCircle, InfoBanner, LOGIN_KEY_ILLUSTRATION, LinkTokensScreen, LoginScreen, OpenWalletScreen, OtpVerifyScreen, OutlineButton, PasskeyIframeBlockedError, PasskeyPopupWelcomeScreen, PasskeyScreen, PoweredByFooter, PrimaryButton, ScreenHeader, ScreenLayout, SecondaryButton, SelectDepositSourceScreen, SelectSourceScreen, SettingsMenu, Spinner, StepList, StepRenderer, SuccessScreen, TokenPickerScreen, VerifyPasskeyScreen, WalletPickerScreen, appendDebug, api_exports as blinkApi, clearDebugEntries, createInitialState, credentialIdBase64ToBytes, darkTheme, darkThemeNew, darkTransparentTheme, darkTransparentThemeNew, deviceHasPasskey, encodePermit2ApproveCalldata, findDevicePasskey, findDevicePasskeyViaPopup, getAtomicBatchSupportDebugInfo, getDebugEntries, getDeviceBiometricUnlockText, getTheme, getThemeBase, getWalletCapabilities, isAuthorizationSessionCancelled, isExpectedAuthorizationCancellation, isTerminalTransferStatus, isTransferAwaitingCompletion, isTransparentTheme, isUserDismissedAuthorizationError, isVisibleUsdAmountAtTwoDecimals, lightTheme, lightThemeNew, lightTransparentTheme, lightTransparentThemeNew, mapGuestPickerEntries, replaceOpenProviderForAccountSwitch, resolvePasskeyRpId, screenForPhase, subscribeDebug, supportsAtomicBatch, supportsPaymasterService, useAuthorizationExecutor, useAuthorizationOrchestrator, useBlinkConfig, useBlinkDebugLog, useBlinkDepositAmount, useTransferPolling, useTransferSigning };
19770
+ export { ACCOUNT_SWITCH_CONFLICT_MESSAGE, AdvancedSourceScreen, ApprovingInWalletScreen, AuthorizationSessionCancelledError, BLINK_ERROR_ILLUSTRATION, BLINK_LOGO, BLINK_MASCOT, BLINK_PASSKEY_ILLUSTRATION, BLINK_SUCCESS_ILLUSTRATION, BlinkErrorScreen, BlinkInitialLoadingScreen, BlinkLoadingScreen, BlinkPayment, BlinkProvider, ConfirmSignScreen, DepositCompleteScreen, DepositOptionsScreen, DepositScreen, DepositTransferStatusScreen, GuestTokenPickerScreen, IconCircle, InfoBanner, LOGIN_KEY_ILLUSTRATION, LinkTokensScreen, LoginScreen, OpenWalletScreen, OtpVerifyScreen, OutlineButton, PasskeyIframeBlockedError, PasskeyPopupWelcomeScreen, PasskeyScreen, PoweredByFooter, PrimaryButton, ScreenHeader, ScreenLayout, SecondaryButton, SelectDepositSourceScreen, SelectSourceScreen, SettingsMenu, Spinner, StepList, StepRenderer, SuccessScreen, TokenPickerScreen, VerifyPasskeyScreen, WalletPickerScreen, appendDebug, api_exports as blinkApi, clearDebugEntries, createInitialState, credentialIdBase64ToBytes, darkTheme, darkThemeNew, darkTransparentTheme, darkTransparentThemeNew, deviceHasPasskey, encodePermit2ApproveCalldata, findDevicePasskey, findDevicePasskeyViaPopup, getAtomicBatchSupportDebugInfo, getDebugEntries, getDeviceBiometricUnlockText, getTheme, getThemeBase, getWalletCapabilities, isAuthorizationSessionCancelled, isExpectedAuthorizationCancellation, isTerminalTransferStatus, isTransferAwaitingCompletion, isTransparentTheme, isUserDismissedAuthorizationError, isVisibleUsdAmountAtTwoDecimals, lightTheme, lightThemeNew, lightTransparentTheme, lightTransparentThemeNew, mapGuestPickerEntries, replaceOpenProviderForAccountSwitch, resolvePasskeyRpId, screenForPhase, subscribeDebug, supportsAtomicBatch, supportsPaymasterService, useAuthorizationExecutor, useAuthorizationOrchestrator, useBlinkConfig, useBlinkDebugLog, useBlinkDepositAmount, useTransferPolling, useTransferSigning };
19579
19771
  //# sourceMappingURL=index.js.map
19580
19772
  //# sourceMappingURL=index.js.map