decane-connect-kit 2.28.0 → 2.29.0
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.cjs +270 -422
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +270 -422
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -5601,6 +5601,7 @@ var tokens = {
|
|
|
5601
5601
|
accent: "#F5C800",
|
|
5602
5602
|
accentHover: "#D4A800",
|
|
5603
5603
|
accentText: "#0D0D0B",
|
|
5604
|
+
accentInk: "#7A5F00",
|
|
5604
5605
|
badgeEvm: "#1A1917",
|
|
5605
5606
|
badgeEvmText: "#F5C800",
|
|
5606
5607
|
badgeSolana: "#F5C800",
|
|
@@ -5621,6 +5622,7 @@ var tokens = {
|
|
|
5621
5622
|
accent: "#F5C800",
|
|
5622
5623
|
accentHover: "#FFE04D",
|
|
5623
5624
|
accentText: "#0D0D0B",
|
|
5625
|
+
accentInk: "#F5C800",
|
|
5624
5626
|
badgeEvm: "#F5C800",
|
|
5625
5627
|
badgeEvmText: "#0D0D0B",
|
|
5626
5628
|
badgeSolana: "#1A1917",
|
|
@@ -5646,6 +5648,7 @@ var CSS_VARS = {
|
|
|
5646
5648
|
--dc-accent: ${tokens.light.accent};
|
|
5647
5649
|
--dc-accent-hover: ${tokens.light.accentHover};
|
|
5648
5650
|
--dc-accent-text: ${tokens.light.accentText};
|
|
5651
|
+
--dc-accent-ink: ${tokens.light.accentInk};
|
|
5649
5652
|
--dc-badge-evm: ${tokens.light.badgeEvm};
|
|
5650
5653
|
--dc-badge-evm-text: ${tokens.light.badgeEvmText};
|
|
5651
5654
|
--dc-badge-sol: ${tokens.light.badgeSolana};
|
|
@@ -5667,6 +5670,7 @@ var CSS_VARS = {
|
|
|
5667
5670
|
--dc-accent: ${tokens.dark.accent};
|
|
5668
5671
|
--dc-accent-hover: ${tokens.dark.accentHover};
|
|
5669
5672
|
--dc-accent-text: ${tokens.dark.accentText};
|
|
5673
|
+
--dc-accent-ink: ${tokens.dark.accentInk};
|
|
5670
5674
|
--dc-badge-evm: ${tokens.dark.badgeEvm};
|
|
5671
5675
|
--dc-badge-evm-text: ${tokens.dark.badgeEvmText};
|
|
5672
5676
|
--dc-badge-sol: ${tokens.dark.badgeSolana};
|
|
@@ -5828,6 +5832,54 @@ function XLogo({ size = 14 }) {
|
|
|
5828
5832
|
/* @__PURE__ */ import_react.default.createElement("path", { d: "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" })
|
|
5829
5833
|
);
|
|
5830
5834
|
}
|
|
5835
|
+
var line = {
|
|
5836
|
+
fill: "none",
|
|
5837
|
+
stroke: "currentColor",
|
|
5838
|
+
strokeWidth: 1.8,
|
|
5839
|
+
strokeLinecap: "round",
|
|
5840
|
+
strokeLinejoin: "round"
|
|
5841
|
+
};
|
|
5842
|
+
function GoogleMark({ size = 18 }) {
|
|
5843
|
+
return /* @__PURE__ */ import_react.default.createElement("svg", { width: size, height: size, viewBox: "0 0 48 48", "aria-hidden": "true", style: { flexShrink: 0 } }, /* @__PURE__ */ import_react.default.createElement("path", { fill: "#EA4335", d: "M24 9.5c3.5 0 6 1.5 7.4 2.8l5.4-5.3C33.5 3.9 29.2 2 24 2 15.4 2 8 7 4.7 14.2l6.3 4.9C12.6 13.4 17.8 9.5 24 9.5z" }), /* @__PURE__ */ import_react.default.createElement("path", { fill: "#4285F4", d: "M46 24.5c0-1.6-.1-2.8-.4-4H24v7.5h12.6c-.3 2.2-1.7 5.5-4.9 7.7l6.1 4.7C41.5 37 46 31.4 46 24.5z" }), /* @__PURE__ */ import_react.default.createElement("path", { fill: "#FBBC05", d: "M11 29.1a13.9 13.9 0 0 1 0-10l-6.3-4.9A22 22 0 0 0 2 24c0 3.5.8 6.9 2.4 9.8L11 29.1z" }), /* @__PURE__ */ import_react.default.createElement("path", { fill: "#34A853", d: "M24 46c5.9 0 10.9-2 14.5-5.4l-6.1-4.7c-1.7 1.2-4 2-8.4 2-6.2 0-11.4-4-13.1-9.6l-6.3 4.9C7.9 40.9 15.3 46 24 46z" }));
|
|
5844
|
+
}
|
|
5845
|
+
function MailIcon({ size = 18 }) {
|
|
5846
|
+
return /* @__PURE__ */ import_react.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", ...line, "aria-hidden": "true", style: { flexShrink: 0 } }, /* @__PURE__ */ import_react.default.createElement("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2.5" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "m3.5 7 8.5 6 8.5-6" }));
|
|
5847
|
+
}
|
|
5848
|
+
function PhoneIcon({ size = 18 }) {
|
|
5849
|
+
return /* @__PURE__ */ import_react.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", ...line, "aria-hidden": "true", style: { flexShrink: 0 } }, /* @__PURE__ */ import_react.default.createElement("rect", { x: "7", y: "2.5", width: "10", height: "19", rx: "2.5" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M11 18h2" }));
|
|
5850
|
+
}
|
|
5851
|
+
function ChatIcon({ size = 18 }) {
|
|
5852
|
+
return /* @__PURE__ */ import_react.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", ...line, "aria-hidden": "true", style: { flexShrink: 0 } }, /* @__PURE__ */ import_react.default.createElement("path", { d: "M4 6.5A2.5 2.5 0 0 1 6.5 4h11A2.5 2.5 0 0 1 20 6.5v7a2.5 2.5 0 0 1-2.5 2.5H10l-4.2 3.2a.6.6 0 0 1-1-.5V16A2.5 2.5 0 0 1 4 13.5z" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M8.5 9h7M8.5 12.5h4.5" }));
|
|
5853
|
+
}
|
|
5854
|
+
function KeyIcon({ size = 18 }) {
|
|
5855
|
+
return /* @__PURE__ */ import_react.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", ...line, "aria-hidden": "true", style: { flexShrink: 0 } }, /* @__PURE__ */ import_react.default.createElement("circle", { cx: "8", cy: "12", r: "4" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M12 12h9M18 12v3M15 12v2.5" }));
|
|
5856
|
+
}
|
|
5857
|
+
function UserIcon({ size = 18 }) {
|
|
5858
|
+
return /* @__PURE__ */ import_react.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", ...line, "aria-hidden": "true", style: { flexShrink: 0 } }, /* @__PURE__ */ import_react.default.createElement("circle", { cx: "12", cy: "8.5", r: "3.8" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M4.5 20a7.5 7.5 0 0 1 15 0" }));
|
|
5859
|
+
}
|
|
5860
|
+
function CopyIcon({ size = 15 }) {
|
|
5861
|
+
return /* @__PURE__ */ import_react.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", ...line, "aria-hidden": "true", style: { flexShrink: 0 } }, /* @__PURE__ */ import_react.default.createElement("rect", { x: "8.5", y: "8.5", width: "12", height: "12", rx: "2.5" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M15.5 8.5V6A2.5 2.5 0 0 0 13 3.5H6A2.5 2.5 0 0 0 3.5 6v7A2.5 2.5 0 0 0 6 15.5h2.5" }));
|
|
5862
|
+
}
|
|
5863
|
+
function CheckIcon({ size = 15 }) {
|
|
5864
|
+
return /* @__PURE__ */ import_react.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", ...line, "aria-hidden": "true", style: { flexShrink: 0 } }, /* @__PURE__ */ import_react.default.createElement("path", { d: "m5 12.5 4.5 4.5L19 7.5" }));
|
|
5865
|
+
}
|
|
5866
|
+
function CloseIcon({ size = 16 }) {
|
|
5867
|
+
return /* @__PURE__ */ import_react.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", ...line, "aria-hidden": "true", style: { flexShrink: 0 } }, /* @__PURE__ */ import_react.default.createElement("path", { d: "M6 6l12 12M18 6 6 18" }));
|
|
5868
|
+
}
|
|
5869
|
+
function ChevronIcon({ size = 16, open = false }) {
|
|
5870
|
+
return /* @__PURE__ */ import_react.default.createElement(
|
|
5871
|
+
"svg",
|
|
5872
|
+
{
|
|
5873
|
+
width: size,
|
|
5874
|
+
height: size,
|
|
5875
|
+
viewBox: "0 0 24 24",
|
|
5876
|
+
...line,
|
|
5877
|
+
"aria-hidden": "true",
|
|
5878
|
+
style: { flexShrink: 0, transition: "transform .2s", transform: open ? "rotate(180deg)" : "none" }
|
|
5879
|
+
},
|
|
5880
|
+
/* @__PURE__ */ import_react.default.createElement("path", { d: "m6 9 6 6 6-6" })
|
|
5881
|
+
);
|
|
5882
|
+
}
|
|
5831
5883
|
|
|
5832
5884
|
// src/ui/WalletSelector.tsx
|
|
5833
5885
|
var FONT_URL = "https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap";
|
|
@@ -6891,33 +6943,6 @@ function downloadJson(data, filename) {
|
|
|
6891
6943
|
a.click();
|
|
6892
6944
|
URL.revokeObjectURL(url);
|
|
6893
6945
|
}
|
|
6894
|
-
function CopyButton({ value }) {
|
|
6895
|
-
const [copied, setCopied] = (0, import_react3.useState)(false);
|
|
6896
|
-
async function copy() {
|
|
6897
|
-
await navigator.clipboard.writeText(value).catch(() => {
|
|
6898
|
-
});
|
|
6899
|
-
setCopied(true);
|
|
6900
|
-
setTimeout(() => setCopied(false), 1500);
|
|
6901
|
-
}
|
|
6902
|
-
return /* @__PURE__ */ import_react3.default.createElement(
|
|
6903
|
-
"button",
|
|
6904
|
-
{
|
|
6905
|
-
onClick: copy,
|
|
6906
|
-
style: {
|
|
6907
|
-
background: "none",
|
|
6908
|
-
border: "none",
|
|
6909
|
-
cursor: "pointer",
|
|
6910
|
-
color: copied ? "var(--dc-accent)" : "var(--dc-text-muted)",
|
|
6911
|
-
fontSize: 11,
|
|
6912
|
-
fontFamily: "inherit",
|
|
6913
|
-
padding: "2px 6px",
|
|
6914
|
-
borderRadius: 5,
|
|
6915
|
-
transition: "color 0.15s"
|
|
6916
|
-
}
|
|
6917
|
-
},
|
|
6918
|
-
copied ? "\u2713" : "copy"
|
|
6919
|
-
);
|
|
6920
|
-
}
|
|
6921
6946
|
function useBalance(kind, address, chain, rpcUrls) {
|
|
6922
6947
|
const [state, setState] = (0, import_react3.useState)({ loading: false, value: null, symbol: kind === "evm" ? "ETH" : "SOL" });
|
|
6923
6948
|
(0, import_react3.useEffect)(() => {
|
|
@@ -6935,6 +6960,117 @@ function useBalance(kind, address, chain, rpcUrls) {
|
|
|
6935
6960
|
}, [kind, address, chain, rpcUrls]);
|
|
6936
6961
|
return state;
|
|
6937
6962
|
}
|
|
6963
|
+
var MODAL_CSS = `
|
|
6964
|
+
.dcm-card { position: relative; width: 100%; max-width: 380px; max-height: calc(100vh - 32px); overflow-y: auto;
|
|
6965
|
+
background: var(--dc-bg); color: var(--dc-text); border: 1px solid var(--dc-border); border-radius: 24px;
|
|
6966
|
+
box-shadow: 0 24px 64px -12px rgba(0,0,0,.35), 0 2px 8px rgba(0,0,0,.08);
|
|
6967
|
+
animation: dcm-in .22s cubic-bezier(.2,.8,.2,1); box-sizing: border-box; }
|
|
6968
|
+
.dcm-card *, .dcm-card *::before, .dcm-card *::after { box-sizing: border-box; }
|
|
6969
|
+
@keyframes dcm-in { from { opacity: 0; transform: translateY(8px) scale(.985); } to { opacity: 1; transform: none; } }
|
|
6970
|
+
@keyframes dcm-fade { from { opacity: 0; } to { opacity: 1; } }
|
|
6971
|
+
@media (prefers-reduced-motion: reduce) { .dcm-card, .dcm-backdrop { animation: none !important; } }
|
|
6972
|
+
.dcm-backdrop { position: absolute; inset: 0; background: var(--dc-bg-overlay);
|
|
6973
|
+
backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); animation: dcm-fade .2s ease; }
|
|
6974
|
+
.dcm-icon-btn { position: absolute; top: 14px; width: 32px; height: 32px; border-radius: 10px; border: 0;
|
|
6975
|
+
background: transparent; color: var(--dc-text-muted); cursor: pointer; display: grid; place-items: center;
|
|
6976
|
+
padding: 0; transition: background .15s, color .15s; z-index: 1; }
|
|
6977
|
+
.dcm-icon-btn:hover { background: var(--dc-surface-hover); color: var(--dc-text); }
|
|
6978
|
+
.dcm-body { padding: 32px 24px 20px; display: flex; flex-direction: column; align-items: center; gap: 14px; text-align: center; }
|
|
6979
|
+
.dcm-title { margin: 4px 0 0; font-size: 20px; font-weight: 600; letter-spacing: -0.02em; line-height: 1.25; color: var(--dc-text); }
|
|
6980
|
+
.dcm-sub { margin: -6px 0 2px; font-size: 13.5px; line-height: 1.5; color: var(--dc-text-secondary); overflow-wrap: anywhere; }
|
|
6981
|
+
.dcm-sub b { color: var(--dc-text); font-weight: 600; }
|
|
6982
|
+
.dcm-methods { width: 100%; display: grid; gap: 8px; margin-top: 4px; }
|
|
6983
|
+
.dcm-method { width: 100%; height: 48px; display: flex; align-items: center; gap: 12px; padding: 0 14px;
|
|
6984
|
+
border-radius: 14px; border: 1px solid var(--dc-border); background: var(--dc-surface); color: var(--dc-text);
|
|
6985
|
+
font-weight: 500; font-size: 14.5px; line-height: 1; font-family: inherit; cursor: pointer; text-align: left;
|
|
6986
|
+
transition: border-color .15s, background .15s; }
|
|
6987
|
+
.dcm-method:hover:not(:disabled) { border-color: var(--dc-text-muted); background: var(--dc-surface-hover); }
|
|
6988
|
+
.dcm-method:disabled { opacity: .6; cursor: default; }
|
|
6989
|
+
.dcm-method:focus-visible, .dcm-primary:focus-visible, .dcm-link:focus-visible, .dcm-icon-btn:focus-visible,
|
|
6990
|
+
.dcm-ghost:focus-visible, .dcm-copy:focus-visible { outline: 2px solid var(--dc-accent); outline-offset: 2px; }
|
|
6991
|
+
.dcm-method > svg { color: var(--dc-text-secondary); }
|
|
6992
|
+
.dcm-method-input { cursor: text; padding-right: 6px; }
|
|
6993
|
+
.dcm-method-input:focus-within { border-color: var(--dc-accent); }
|
|
6994
|
+
.dcm-method-input input { flex: 1; min-width: 0; height: 100%; border: 0; outline: 0; background: transparent;
|
|
6995
|
+
color: var(--dc-text); font-family: inherit; font-size: 14.5px; padding: 0; }
|
|
6996
|
+
.dcm-method-input input::placeholder { color: var(--dc-text-muted); }
|
|
6997
|
+
.dcm-submit { height: 34px; padding: 0 12px; border-radius: 10px; border: 0; background: transparent;
|
|
6998
|
+
color: var(--dc-accent-ink); font-weight: 600; font-size: 13.5px; line-height: 1; font-family: inherit; cursor: pointer; transition: background .15s; }
|
|
6999
|
+
.dcm-submit:hover:not(:disabled) { background: var(--dc-surface-hover); }
|
|
7000
|
+
.dcm-submit:disabled { color: var(--dc-text-muted); cursor: default; }
|
|
7001
|
+
.dcm-form { width: 100%; display: grid; gap: 10px; margin-top: 4px; }
|
|
7002
|
+
.dcm-field { width: 100%; padding: 12px 14px; border-radius: 12px; border: 1px solid var(--dc-border);
|
|
7003
|
+
background: var(--dc-surface); color: var(--dc-text); font-family: inherit; font-size: 15px; outline: none;
|
|
7004
|
+
transition: border-color .15s, box-shadow .15s; }
|
|
7005
|
+
.dcm-field::placeholder { color: var(--dc-text-muted); }
|
|
7006
|
+
.dcm-field:focus { border-color: var(--dc-accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--dc-accent) 22%, transparent); }
|
|
7007
|
+
.dcm-code { height: 56px; text-align: center; font-family: var(--dc-font-mono); font-size: 24px; letter-spacing: .45em; padding-left: calc(14px + .45em); }
|
|
7008
|
+
.dcm-primary { width: 100%; height: 48px; border-radius: 14px; border: 0; background: var(--dc-accent); color: var(--dc-accent-text);
|
|
7009
|
+
font-weight: 600; font-size: 14.5px; line-height: 1; font-family: inherit; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 8px;
|
|
7010
|
+
transition: background .15s, opacity .15s; }
|
|
7011
|
+
.dcm-primary:hover:not(:disabled) { background: var(--dc-accent-hover); }
|
|
7012
|
+
.dcm-primary:disabled { opacity: .55; cursor: default; }
|
|
7013
|
+
.dcm-ghost { height: 44px; padding: 0 16px; border-radius: 12px; border: 1px solid var(--dc-border); background: transparent;
|
|
7014
|
+
color: var(--dc-text); font-weight: 500; font-size: 14px; line-height: 1; font-family: inherit; cursor: pointer; transition: background .15s, border-color .15s; white-space: nowrap; }
|
|
7015
|
+
.dcm-ghost:hover:not(:disabled) { background: var(--dc-surface-hover); border-color: var(--dc-text-muted); }
|
|
7016
|
+
.dcm-ghost:disabled { opacity: .55; cursor: default; }
|
|
7017
|
+
.dcm-link { border: 0; background: transparent; color: var(--dc-accent-ink); font-weight: 500; font-size: 13.5px; line-height: 1.4; font-family: inherit;
|
|
7018
|
+
cursor: pointer; padding: 4px; border-radius: 6px; }
|
|
7019
|
+
.dcm-link:hover { text-decoration: underline; text-underline-offset: 3px; }
|
|
7020
|
+
.dcm-badge { width: 52px; height: 52px; border-radius: 16px; display: grid; place-items: center;
|
|
7021
|
+
background: var(--dc-surface); border: 1px solid var(--dc-border); color: var(--dc-text); }
|
|
7022
|
+
.dcm-error { margin: 0; width: 100%; font-size: 13px; line-height: 1.45; color: var(--dc-danger); overflow-wrap: anywhere; }
|
|
7023
|
+
.dcm-protected { width: 100%; display: flex; align-items: center; justify-content: center; gap: 6px;
|
|
7024
|
+
margin-top: 6px; padding-top: 14px; border-top: 1px solid var(--dc-border); font-size: 12.5px; color: var(--dc-text-muted); }
|
|
7025
|
+
.dcm-status { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 500; }
|
|
7026
|
+
.dcm-status i { width: 7px; height: 7px; border-radius: 50%; display: block; }
|
|
7027
|
+
.dcm-addresses { width: 100%; border: 1px solid var(--dc-border); border-radius: 16px; overflow: hidden; text-align: left; }
|
|
7028
|
+
.dcm-address { display: flex; align-items: center; gap: 12px; padding: 12px 14px; background: var(--dc-surface); }
|
|
7029
|
+
.dcm-address + .dcm-address { border-top: 1px solid var(--dc-border); }
|
|
7030
|
+
.dcm-address-main { flex: 1; min-width: 0; display: grid; gap: 3px; }
|
|
7031
|
+
.dcm-address-main span { font-size: 13px; color: var(--dc-text-secondary); }
|
|
7032
|
+
.dcm-address-main code { font-family: var(--dc-font-mono); font-size: 13px; color: var(--dc-text); }
|
|
7033
|
+
.dcm-balance { font-family: var(--dc-font-mono); font-size: 13px; color: var(--dc-text); white-space: nowrap; }
|
|
7034
|
+
.dcm-copy { width: 30px; height: 30px; border-radius: 9px; border: 0; background: transparent; color: var(--dc-text-muted);
|
|
7035
|
+
display: grid; place-items: center; cursor: pointer; padding: 0; transition: background .15s, color .15s; }
|
|
7036
|
+
.dcm-copy:hover { background: var(--dc-surface-hover); color: var(--dc-text); }
|
|
7037
|
+
.dcm-panel { width: 100%; border: 1px solid var(--dc-border); border-radius: 16px; text-align: left; overflow: hidden; }
|
|
7038
|
+
.dcm-panel-head { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 13px 14px;
|
|
7039
|
+
border: 0; background: var(--dc-surface); color: var(--dc-text); font-weight: 500; font-size: 14px; line-height: 1; font-family: inherit; cursor: pointer; }
|
|
7040
|
+
.dcm-panel-head:hover { background: var(--dc-surface-hover); }
|
|
7041
|
+
.dcm-panel-head svg { color: var(--dc-text-muted); }
|
|
7042
|
+
.dcm-panel-body { padding: 14px; border-top: 1px solid var(--dc-border); display: grid; gap: 10px; }
|
|
7043
|
+
.dcm-note { margin: 0; font-size: 13px; line-height: 1.5; color: var(--dc-text-secondary); }
|
|
7044
|
+
.dcm-warn { padding: 12px; border-radius: 12px; font-size: 13px; line-height: 1.5;
|
|
7045
|
+
background: color-mix(in srgb, var(--dc-danger) 9%, transparent); border: 1px solid color-mix(in srgb, var(--dc-danger) 30%, transparent); color: var(--dc-text); }
|
|
7046
|
+
.dcm-warn strong { display: block; margin-bottom: 2px; color: var(--dc-danger); font-weight: 600; }
|
|
7047
|
+
.dcm-check { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--dc-text); cursor: pointer; }
|
|
7048
|
+
.dcm-check input { width: 16px; height: 16px; margin: 0; accent-color: var(--dc-accent); }
|
|
7049
|
+
.dcm-row { display: flex; gap: 8px; width: 100%; }
|
|
7050
|
+
.dcm-row > .dcm-primary { flex: 1; height: 44px; border-radius: 12px; }
|
|
7051
|
+
.dcm-actions { width: 100%; display: flex; gap: 8px; }
|
|
7052
|
+
.dcm-actions > * { flex: 1; }
|
|
7053
|
+
`;
|
|
7054
|
+
function injectModalCss() {
|
|
7055
|
+
if (document.getElementById("decane-modal-css")) return;
|
|
7056
|
+
const el = document.createElement("style");
|
|
7057
|
+
el.id = "decane-modal-css";
|
|
7058
|
+
el.textContent = MODAL_CSS;
|
|
7059
|
+
document.head.appendChild(el);
|
|
7060
|
+
}
|
|
7061
|
+
function shortAddress(a, head = 6, tail = 4) {
|
|
7062
|
+
return a.length > head + tail + 1 ? `${a.slice(0, head)}\u2026${a.slice(-tail)}` : a;
|
|
7063
|
+
}
|
|
7064
|
+
function CopyButton({ value, label }) {
|
|
7065
|
+
const [copied, setCopied] = (0, import_react3.useState)(false);
|
|
7066
|
+
async function copy() {
|
|
7067
|
+
await navigator.clipboard.writeText(value).catch(() => {
|
|
7068
|
+
});
|
|
7069
|
+
setCopied(true);
|
|
7070
|
+
setTimeout(() => setCopied(false), 1500);
|
|
7071
|
+
}
|
|
7072
|
+
return /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-copy", onClick: copy, "aria-label": copied ? "Copied" : `Copy ${label} address`, title: copied ? "Copied" : "Copy address" }, copied ? /* @__PURE__ */ import_react3.default.createElement(CheckIcon, null) : /* @__PURE__ */ import_react3.default.createElement(CopyIcon, null));
|
|
7073
|
+
}
|
|
6938
7074
|
function AddressRow({
|
|
6939
7075
|
label,
|
|
6940
7076
|
address,
|
|
@@ -6943,14 +7079,10 @@ function AddressRow({
|
|
|
6943
7079
|
rpcUrls
|
|
6944
7080
|
}) {
|
|
6945
7081
|
const balance = useBalance(kind, address, chain, rpcUrls);
|
|
6946
|
-
|
|
6947
|
-
|
|
6948
|
-
|
|
6949
|
-
|
|
6950
|
-
borderRadius: 10,
|
|
6951
|
-
padding: "10px 14px",
|
|
6952
|
-
marginBottom: 8
|
|
6953
|
-
} }, /* @__PURE__ */ import_react3.default.createElement("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", marginBottom: 5 } }, /* @__PURE__ */ import_react3.default.createElement("span", { style: { fontSize: 10, fontWeight: 700, color: "var(--dc-text-muted)", letterSpacing: "0.06em", textTransform: "uppercase" } }, label), /* @__PURE__ */ import_react3.default.createElement("span", { style: { fontSize: 11, fontFamily: "monospace", color: "var(--dc-text)" } }, balance.loading ? "\u2026" : `${formatBalanceDisplay(balance.value)} ${balance.symbol}`)), /* @__PURE__ */ import_react3.default.createElement("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 8 } }, /* @__PURE__ */ import_react3.default.createElement("span", { style: { fontSize: 13, fontFamily: "monospace", color: "var(--dc-text)", letterSpacing: "0.02em" } }, short), /* @__PURE__ */ import_react3.default.createElement(CopyButton, { value: address })));
|
|
7082
|
+
return /* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-address" }, /* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-address-main" }, /* @__PURE__ */ import_react3.default.createElement("span", null, label), /* @__PURE__ */ import_react3.default.createElement("code", { title: address }, shortAddress(address, 8, 6))), /* @__PURE__ */ import_react3.default.createElement("span", { className: "dcm-balance" }, balance.loading ? "\u2026" : `${formatBalanceDisplay(balance.value)} ${balance.symbol}`), /* @__PURE__ */ import_react3.default.createElement(CopyButton, { value: address, label }));
|
|
7083
|
+
}
|
|
7084
|
+
function ProtectedBy() {
|
|
7085
|
+
return /* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-protected" }, /* @__PURE__ */ import_react3.default.createElement("span", null, "Protected by"), /* @__PURE__ */ import_react3.default.createElement(DecaneMark, { size: 14, muted: true }), /* @__PURE__ */ import_react3.default.createElement(DecaneWordmark, { size: 12, muted: true }));
|
|
6954
7086
|
}
|
|
6955
7087
|
function SignInView({
|
|
6956
7088
|
onGoogleSignIn,
|
|
@@ -6984,6 +7116,7 @@ function SignInView({
|
|
|
6984
7116
|
const [showOtherMethods, setShowOtherMethods] = (0, import_react3.useState)(false);
|
|
6985
7117
|
const [error, setError] = (0, import_react3.useState)("");
|
|
6986
7118
|
const passkeyFirst = !!canUsePasskey && !!onPasskeySignIn && !showOtherMethods;
|
|
7119
|
+
const busy = googleLoading || kingsChatLoading || xLoading || customLoading || emailLoading || phoneLoading;
|
|
6987
7120
|
async function handlePasskey() {
|
|
6988
7121
|
if (!onPasskeySignIn) return;
|
|
6989
7122
|
setError("");
|
|
@@ -7037,7 +7170,7 @@ function SignInView({
|
|
|
7037
7170
|
setError("");
|
|
7038
7171
|
setEmailLoading(true);
|
|
7039
7172
|
try {
|
|
7040
|
-
await onEmailStart(email);
|
|
7173
|
+
await onEmailStart(email.trim());
|
|
7041
7174
|
setEmailSent(true);
|
|
7042
7175
|
} catch (e2) {
|
|
7043
7176
|
setError(e2.message);
|
|
@@ -7050,7 +7183,7 @@ function SignInView({
|
|
|
7050
7183
|
setError("");
|
|
7051
7184
|
setEmailLoading(true);
|
|
7052
7185
|
try {
|
|
7053
|
-
await onEmailVerify(email, code);
|
|
7186
|
+
await onEmailVerify(email.trim(), code);
|
|
7054
7187
|
} catch (e2) {
|
|
7055
7188
|
setError(e2.message);
|
|
7056
7189
|
} finally {
|
|
@@ -7063,7 +7196,7 @@ function SignInView({
|
|
|
7063
7196
|
setError("");
|
|
7064
7197
|
setPhoneLoading(true);
|
|
7065
7198
|
try {
|
|
7066
|
-
await onPhoneStart(phone);
|
|
7199
|
+
await onPhoneStart(phone.trim());
|
|
7067
7200
|
setPhoneSent(true);
|
|
7068
7201
|
} catch (e2) {
|
|
7069
7202
|
setError(e2.message);
|
|
@@ -7077,7 +7210,7 @@ function SignInView({
|
|
|
7077
7210
|
setError("");
|
|
7078
7211
|
setPhoneLoading(true);
|
|
7079
7212
|
try {
|
|
7080
|
-
await onPhoneVerify(phone, phoneCode);
|
|
7213
|
+
await onPhoneVerify(phone.trim(), phoneCode);
|
|
7081
7214
|
} catch (e2) {
|
|
7082
7215
|
setError(e2.message);
|
|
7083
7216
|
} finally {
|
|
@@ -7096,226 +7229,67 @@ function SignInView({
|
|
|
7096
7229
|
setCustomLoading(false);
|
|
7097
7230
|
}
|
|
7098
7231
|
}
|
|
7099
|
-
|
|
7100
|
-
|
|
7101
|
-
|
|
7102
|
-
|
|
7103
|
-
|
|
7104
|
-
|
|
7105
|
-
|
|
7106
|
-
|
|
7107
|
-
|
|
7108
|
-
|
|
7109
|
-
|
|
7110
|
-
|
|
7111
|
-
|
|
7112
|
-
|
|
7113
|
-
|
|
7114
|
-
|
|
7115
|
-
|
|
7116
|
-
|
|
7117
|
-
|
|
7118
|
-
|
|
7119
|
-
|
|
7120
|
-
|
|
7121
|
-
|
|
7122
|
-
|
|
7123
|
-
|
|
7124
|
-
|
|
7125
|
-
|
|
7126
|
-
|
|
7127
|
-
|
|
7128
|
-
|
|
7129
|
-
|
|
7130
|
-
|
|
7131
|
-
|
|
7132
|
-
|
|
7133
|
-
|
|
7134
|
-
|
|
7135
|
-
), /* @__PURE__ */ import_react3.default.createElement(
|
|
7136
|
-
"button",
|
|
7137
|
-
{
|
|
7138
|
-
onClick: () => setShowOtherMethods(true),
|
|
7139
|
-
style: {
|
|
7140
|
-
width: "100%",
|
|
7141
|
-
marginTop: 10,
|
|
7142
|
-
background: "none",
|
|
7143
|
-
border: "none",
|
|
7144
|
-
color: "var(--dc-text-muted)",
|
|
7145
|
-
fontSize: 12,
|
|
7146
|
-
cursor: "pointer",
|
|
7147
|
-
fontFamily: "inherit"
|
|
7148
|
-
}
|
|
7149
|
-
},
|
|
7150
|
-
"Use email or Google instead"
|
|
7151
|
-
), error && /* @__PURE__ */ import_react3.default.createElement("div", { style: { marginTop: 10, fontSize: 12, color: "var(--dc-danger, #ff5533)" } }, error)), !passkeyFirst && authMethods.includes("google") && /* @__PURE__ */ import_react3.default.createElement(
|
|
7152
|
-
"button",
|
|
7153
|
-
{
|
|
7154
|
-
onClick: handleGoogle,
|
|
7155
|
-
disabled: googleLoading,
|
|
7156
|
-
style: {
|
|
7157
|
-
width: "100%",
|
|
7158
|
-
padding: "10px 0",
|
|
7159
|
-
marginBottom: 10,
|
|
7160
|
-
background: "var(--dc-accent)",
|
|
7161
|
-
color: "var(--dc-accent-text)",
|
|
7162
|
-
border: "none",
|
|
7163
|
-
borderRadius: 10,
|
|
7164
|
-
fontSize: 13,
|
|
7165
|
-
fontWeight: 700,
|
|
7166
|
-
cursor: googleLoading ? "not-allowed" : "pointer",
|
|
7167
|
-
opacity: googleLoading ? 0.7 : 1,
|
|
7168
|
-
fontFamily: "inherit"
|
|
7169
|
-
}
|
|
7170
|
-
},
|
|
7171
|
-
googleLoading ? "Redirecting\u2026" : "Continue with Google"
|
|
7172
|
-
), !passkeyFirst && authMethods.includes("kingschat") && onKingsChatSignIn && /* @__PURE__ */ import_react3.default.createElement(
|
|
7173
|
-
"button",
|
|
7174
|
-
{
|
|
7175
|
-
onClick: handleKingsChat,
|
|
7176
|
-
disabled: kingsChatLoading,
|
|
7177
|
-
style: {
|
|
7178
|
-
width: "100%",
|
|
7179
|
-
padding: "10px 0",
|
|
7180
|
-
marginBottom: 10,
|
|
7181
|
-
background: "var(--dc-surface)",
|
|
7182
|
-
color: "var(--dc-text)",
|
|
7183
|
-
border: "1px solid var(--dc-border)",
|
|
7184
|
-
borderRadius: 10,
|
|
7185
|
-
fontSize: 13,
|
|
7186
|
-
fontWeight: 700,
|
|
7187
|
-
cursor: kingsChatLoading ? "not-allowed" : "pointer",
|
|
7188
|
-
opacity: kingsChatLoading ? 0.7 : 1,
|
|
7189
|
-
fontFamily: "inherit"
|
|
7190
|
-
}
|
|
7191
|
-
},
|
|
7192
|
-
kingsChatLoading ? "Waiting for KingsChat\u2026" : "Continue with KingsChat"
|
|
7193
|
-
), !passkeyFirst && authMethods.includes("x") && onXSignIn && /* @__PURE__ */ import_react3.default.createElement(
|
|
7194
|
-
"button",
|
|
7195
|
-
{
|
|
7196
|
-
onClick: handleX,
|
|
7197
|
-
disabled: xLoading,
|
|
7198
|
-
style: {
|
|
7199
|
-
width: "100%",
|
|
7200
|
-
padding: "10px 0",
|
|
7201
|
-
marginBottom: 10,
|
|
7202
|
-
background: "var(--dc-surface)",
|
|
7203
|
-
color: "var(--dc-text)",
|
|
7204
|
-
border: "1px solid var(--dc-border)",
|
|
7205
|
-
borderRadius: 10,
|
|
7206
|
-
fontSize: 13,
|
|
7207
|
-
fontWeight: 700,
|
|
7208
|
-
cursor: xLoading ? "not-allowed" : "pointer",
|
|
7209
|
-
opacity: xLoading ? 0.7 : 1,
|
|
7210
|
-
fontFamily: "inherit",
|
|
7211
|
-
display: "flex",
|
|
7212
|
-
alignItems: "center",
|
|
7213
|
-
justifyContent: "center",
|
|
7214
|
-
gap: 8
|
|
7215
|
-
}
|
|
7216
|
-
},
|
|
7217
|
-
/* @__PURE__ */ import_react3.default.createElement(XLogo, null),
|
|
7218
|
-
xLoading ? "Redirecting\u2026" : "Continue with X"
|
|
7219
|
-
), !passkeyFirst && authMethods.includes("email") && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, authMethods.includes("google") && /* @__PURE__ */ import_react3.default.createElement("div", { style: { textAlign: "center", color: "var(--dc-text-muted)", fontSize: 12, margin: "10px 0" } }, "\u2014 or \u2014"), !emailSent ? /* @__PURE__ */ import_react3.default.createElement("form", { onSubmit: handleEmailStart, style: { display: "flex", gap: 8 } }, /* @__PURE__ */ import_react3.default.createElement(
|
|
7232
|
+
function backToMethods() {
|
|
7233
|
+
setEmailSent(false);
|
|
7234
|
+
setCode("");
|
|
7235
|
+
setPhoneSent(false);
|
|
7236
|
+
setPhoneCode("");
|
|
7237
|
+
setError("");
|
|
7238
|
+
}
|
|
7239
|
+
const errorLine = error ? /* @__PURE__ */ import_react3.default.createElement("p", { className: "dcm-error", role: "alert" }, error) : null;
|
|
7240
|
+
if (passkeyFirst) {
|
|
7241
|
+
return /* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-body" }, /* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-badge" }, /* @__PURE__ */ import_react3.default.createElement(KeyIcon, { size: 22 })), /* @__PURE__ */ import_react3.default.createElement("h2", { className: "dcm-title" }, "Welcome back"), /* @__PURE__ */ import_react3.default.createElement("p", { className: "dcm-sub" }, passkeyAddress ? /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, "Unlock ", /* @__PURE__ */ import_react3.default.createElement("b", null, shortAddress(passkeyAddress)), " with your passkey.") : "Unlock your wallet with your passkey."), /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-primary", onClick: handlePasskey, disabled: passkeyLoading }, passkeyLoading ? "Waiting for passkey\u2026" : "Continue with passkey"), errorLine, /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-link", onClick: () => {
|
|
7242
|
+
setError("");
|
|
7243
|
+
setShowOtherMethods(true);
|
|
7244
|
+
} }, "Use another sign-in method"), /* @__PURE__ */ import_react3.default.createElement(ProtectedBy, null));
|
|
7245
|
+
}
|
|
7246
|
+
if (emailSent || phoneSent) {
|
|
7247
|
+
const isEmail = emailSent;
|
|
7248
|
+
const value = isEmail ? code : phoneCode;
|
|
7249
|
+
const setValue = isEmail ? setCode : setPhoneCode;
|
|
7250
|
+
const loading = isEmail ? emailLoading : phoneLoading;
|
|
7251
|
+
return /* @__PURE__ */ import_react3.default.createElement("form", { className: "dcm-body", onSubmit: isEmail ? handleEmailVerify : handlePhoneVerify }, /* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-badge" }, isEmail ? /* @__PURE__ */ import_react3.default.createElement(MailIcon, { size: 22 }) : /* @__PURE__ */ import_react3.default.createElement(PhoneIcon, { size: 22 })), /* @__PURE__ */ import_react3.default.createElement("h2", { className: "dcm-title" }, "Enter your code"), /* @__PURE__ */ import_react3.default.createElement("p", { className: "dcm-sub" }, "We sent a 6-digit code to ", /* @__PURE__ */ import_react3.default.createElement("b", null, isEmail ? email.trim() : phone.trim())), /* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-form" }, /* @__PURE__ */ import_react3.default.createElement(
|
|
7252
|
+
"input",
|
|
7253
|
+
{
|
|
7254
|
+
className: "dcm-field dcm-code",
|
|
7255
|
+
"aria-label": "6-digit code",
|
|
7256
|
+
placeholder: "000000",
|
|
7257
|
+
value,
|
|
7258
|
+
maxLength: 6,
|
|
7259
|
+
autoFocus: true,
|
|
7260
|
+
inputMode: "numeric",
|
|
7261
|
+
autoComplete: "one-time-code",
|
|
7262
|
+
onChange: (e) => setValue(e.target.value.replace(/\D/g, ""))
|
|
7263
|
+
}
|
|
7264
|
+
), /* @__PURE__ */ import_react3.default.createElement("button", { type: "submit", className: "dcm-primary", disabled: loading || value.length < 6 }, loading ? "Verifying\u2026" : "Continue")), errorLine, /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-link", onClick: backToMethods }, "Use a different method"), /* @__PURE__ */ import_react3.default.createElement(ProtectedBy, null));
|
|
7265
|
+
}
|
|
7266
|
+
const showPhone = authMethods.includes("phone") && !!onPhoneStart && !!onPhoneVerify;
|
|
7267
|
+
return /* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-body" }, /* @__PURE__ */ import_react3.default.createElement(DecaneMark, { size: 44 }), /* @__PURE__ */ import_react3.default.createElement("h2", { className: "dcm-title" }, resumeHint ? "Welcome back" : "Log in or sign up"), resumeHint && /* @__PURE__ */ import_react3.default.createElement("p", { className: "dcm-sub" }, "Sign in again to resume ", resumeHint, "."), /* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-methods" }, authMethods.includes("google") && /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-method", onClick: handleGoogle, disabled: busy }, /* @__PURE__ */ import_react3.default.createElement(GoogleMark, { size: 18 }), /* @__PURE__ */ import_react3.default.createElement("span", null, googleLoading ? "Redirecting to Google\u2026" : "Google")), authMethods.includes("email") && /* @__PURE__ */ import_react3.default.createElement("form", { className: "dcm-method dcm-method-input", onSubmit: handleEmailStart }, /* @__PURE__ */ import_react3.default.createElement(MailIcon, { size: 18 }), /* @__PURE__ */ import_react3.default.createElement(
|
|
7220
7268
|
"input",
|
|
7221
7269
|
{
|
|
7222
7270
|
type: "email",
|
|
7223
7271
|
required: true,
|
|
7224
7272
|
placeholder: "your@email.com",
|
|
7273
|
+
"aria-label": "Email address",
|
|
7274
|
+
autoComplete: "email",
|
|
7225
7275
|
value: email,
|
|
7226
|
-
onChange: (e) => setEmail(e.target.value)
|
|
7227
|
-
|
|
7228
|
-
|
|
7229
|
-
), /* @__PURE__ */ import_react3.default.createElement("button", { type: "submit", disabled: emailLoading, style: {
|
|
7230
|
-
padding: "0 16px",
|
|
7231
|
-
background: "var(--dc-surface)",
|
|
7232
|
-
border: "1px solid var(--dc-border)",
|
|
7233
|
-
borderRadius: 8,
|
|
7234
|
-
color: "var(--dc-text)",
|
|
7235
|
-
fontSize: 13,
|
|
7236
|
-
cursor: "pointer",
|
|
7237
|
-
fontFamily: "inherit"
|
|
7238
|
-
} }, emailLoading ? "\u2026" : "Send code")) : /* @__PURE__ */ import_react3.default.createElement("form", { onSubmit: handleEmailVerify, style: { display: "flex", gap: 8 } }, /* @__PURE__ */ import_react3.default.createElement(
|
|
7239
|
-
"input",
|
|
7240
|
-
{
|
|
7241
|
-
placeholder: "6-digit code",
|
|
7242
|
-
value: code,
|
|
7243
|
-
maxLength: 6,
|
|
7244
|
-
autoFocus: true,
|
|
7245
|
-
onChange: (e) => setCode(e.target.value.replace(/\D/g, "")),
|
|
7246
|
-
style: { ...inputStyle, flex: 1, letterSpacing: 4, textAlign: "center" }
|
|
7247
|
-
}
|
|
7248
|
-
), /* @__PURE__ */ import_react3.default.createElement("button", { type: "submit", disabled: emailLoading, style: {
|
|
7249
|
-
padding: "0 16px",
|
|
7250
|
-
background: "var(--dc-accent)",
|
|
7251
|
-
color: "var(--dc-accent-text)",
|
|
7252
|
-
border: "none",
|
|
7253
|
-
borderRadius: 8,
|
|
7254
|
-
fontSize: 13,
|
|
7255
|
-
fontWeight: 700,
|
|
7256
|
-
cursor: "pointer",
|
|
7257
|
-
fontFamily: "inherit"
|
|
7258
|
-
} }, emailLoading ? "\u2026" : "Verify"))), !passkeyFirst && authMethods.includes("phone") && onPhoneStart && onPhoneVerify && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, (authMethods.includes("google") || authMethods.includes("email")) && /* @__PURE__ */ import_react3.default.createElement("div", { style: { textAlign: "center", color: "var(--dc-text-muted)", fontSize: 12, margin: "10px 0" } }, "\u2014 or \u2014"), !phoneSent ? /* @__PURE__ */ import_react3.default.createElement("form", { onSubmit: handlePhoneStart, style: { display: "flex", gap: 8 } }, /* @__PURE__ */ import_react3.default.createElement(
|
|
7276
|
+
onChange: (e) => setEmail(e.target.value)
|
|
7277
|
+
}
|
|
7278
|
+
), /* @__PURE__ */ import_react3.default.createElement("button", { type: "submit", className: "dcm-submit", disabled: busy || !email.trim() }, emailLoading ? "Sending\u2026" : "Submit")), showPhone && /* @__PURE__ */ import_react3.default.createElement("form", { className: "dcm-method dcm-method-input", onSubmit: handlePhoneStart }, /* @__PURE__ */ import_react3.default.createElement(PhoneIcon, { size: 18 }), /* @__PURE__ */ import_react3.default.createElement(
|
|
7259
7279
|
"input",
|
|
7260
7280
|
{
|
|
7261
7281
|
type: "tel",
|
|
7262
7282
|
required: true,
|
|
7263
7283
|
placeholder: "+234 801 234 5678",
|
|
7284
|
+
"aria-label": "Phone number",
|
|
7285
|
+
autoComplete: "tel",
|
|
7264
7286
|
value: phone,
|
|
7265
|
-
onChange: (e) => setPhone(e.target.value)
|
|
7266
|
-
|
|
7267
|
-
|
|
7268
|
-
|
|
7269
|
-
|
|
7270
|
-
|
|
7271
|
-
border: "1px solid var(--dc-border)",
|
|
7272
|
-
borderRadius: 8,
|
|
7273
|
-
color: "var(--dc-text)",
|
|
7274
|
-
fontSize: 13,
|
|
7275
|
-
cursor: "pointer",
|
|
7276
|
-
fontFamily: "inherit"
|
|
7277
|
-
} }, phoneLoading ? "\u2026" : "Send code")) : /* @__PURE__ */ import_react3.default.createElement("form", { onSubmit: handlePhoneVerify, style: { display: "flex", gap: 8 } }, /* @__PURE__ */ import_react3.default.createElement(
|
|
7278
|
-
"input",
|
|
7279
|
-
{
|
|
7280
|
-
placeholder: "6-digit code",
|
|
7281
|
-
value: phoneCode,
|
|
7282
|
-
maxLength: 6,
|
|
7283
|
-
autoFocus: true,
|
|
7284
|
-
inputMode: "numeric",
|
|
7285
|
-
onChange: (e) => setPhoneCode(e.target.value.replace(/\D/g, "")),
|
|
7286
|
-
style: { ...inputStyle, flex: 1, letterSpacing: 4, textAlign: "center" }
|
|
7287
|
-
}
|
|
7288
|
-
), /* @__PURE__ */ import_react3.default.createElement("button", { type: "submit", disabled: phoneLoading, style: {
|
|
7289
|
-
padding: "0 16px",
|
|
7290
|
-
background: "var(--dc-accent)",
|
|
7291
|
-
color: "var(--dc-accent-text)",
|
|
7292
|
-
border: "none",
|
|
7293
|
-
borderRadius: 8,
|
|
7294
|
-
fontSize: 13,
|
|
7295
|
-
fontWeight: 700,
|
|
7296
|
-
cursor: "pointer",
|
|
7297
|
-
fontFamily: "inherit"
|
|
7298
|
-
} }, phoneLoading ? "\u2026" : "Verify"))), !passkeyFirst && customAuthLabel && onCustomAuthSignIn && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, (authMethods.includes("google") || authMethods.includes("email")) && /* @__PURE__ */ import_react3.default.createElement("div", { style: { textAlign: "center", color: "var(--dc-text-muted)", fontSize: 12, margin: "10px 0" } }, "\u2014 or \u2014"), /* @__PURE__ */ import_react3.default.createElement(
|
|
7299
|
-
"button",
|
|
7300
|
-
{
|
|
7301
|
-
onClick: handleCustomAuth,
|
|
7302
|
-
disabled: customLoading,
|
|
7303
|
-
style: {
|
|
7304
|
-
width: "100%",
|
|
7305
|
-
padding: "10px 0",
|
|
7306
|
-
background: "var(--dc-surface)",
|
|
7307
|
-
color: "var(--dc-text)",
|
|
7308
|
-
border: "1px solid var(--dc-border)",
|
|
7309
|
-
borderRadius: 10,
|
|
7310
|
-
fontSize: 13,
|
|
7311
|
-
fontWeight: 600,
|
|
7312
|
-
cursor: customLoading ? "not-allowed" : "pointer",
|
|
7313
|
-
opacity: customLoading ? 0.7 : 1,
|
|
7314
|
-
fontFamily: "inherit"
|
|
7315
|
-
}
|
|
7316
|
-
},
|
|
7317
|
-
customLoading ? "Connecting\u2026" : customAuthLabel
|
|
7318
|
-
)), error && /* @__PURE__ */ import_react3.default.createElement("div", { style: { marginTop: 10, fontSize: 12, color: "var(--dc-danger, #ff5533)" } }, error));
|
|
7287
|
+
onChange: (e) => setPhone(e.target.value)
|
|
7288
|
+
}
|
|
7289
|
+
), /* @__PURE__ */ import_react3.default.createElement("button", { type: "submit", className: "dcm-submit", disabled: busy || !phone.trim() }, phoneLoading ? "Sending\u2026" : "Submit")), authMethods.includes("x") && onXSignIn && /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-method", onClick: handleX, disabled: busy }, /* @__PURE__ */ import_react3.default.createElement(XLogo, { size: 16 }), /* @__PURE__ */ import_react3.default.createElement("span", null, xLoading ? "Redirecting to X\u2026" : "X")), authMethods.includes("kingschat") && onKingsChatSignIn && /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-method", onClick: handleKingsChat, disabled: busy }, /* @__PURE__ */ import_react3.default.createElement(ChatIcon, { size: 18 }), /* @__PURE__ */ import_react3.default.createElement("span", null, kingsChatLoading ? "Waiting for KingsChat\u2026" : "KingsChat")), customAuthLabel && onCustomAuthSignIn && /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-method", onClick: handleCustomAuth, disabled: busy }, /* @__PURE__ */ import_react3.default.createElement(UserIcon, { size: 18 }), /* @__PURE__ */ import_react3.default.createElement("span", null, customLoading ? "Connecting\u2026" : customAuthLabel))), errorLine, canUsePasskey && onPasskeySignIn && /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-link", onClick: () => {
|
|
7290
|
+
setError("");
|
|
7291
|
+
setShowOtherMethods(false);
|
|
7292
|
+
} }, "Use my passkey instead"), /* @__PURE__ */ import_react3.default.createElement(ProtectedBy, null));
|
|
7319
7293
|
}
|
|
7320
7294
|
function RecoverySection({
|
|
7321
7295
|
addresses,
|
|
@@ -7366,60 +7340,34 @@ function RecoverySection({
|
|
|
7366
7340
|
setBusy(false);
|
|
7367
7341
|
}
|
|
7368
7342
|
}
|
|
7369
|
-
const
|
|
7370
|
-
|
|
7371
|
-
background: "var(--dc-bg)",
|
|
7372
|
-
border: "1px solid var(--dc-border)",
|
|
7373
|
-
borderRadius: 8,
|
|
7374
|
-
color: "var(--dc-text)",
|
|
7375
|
-
padding: "8px 10px",
|
|
7376
|
-
fontSize: 12,
|
|
7377
|
-
outline: "none",
|
|
7378
|
-
fontFamily: "inherit",
|
|
7379
|
-
boxSizing: "border-box"
|
|
7380
|
-
};
|
|
7381
|
-
const btnStyle = {
|
|
7382
|
-
padding: "8px 12px",
|
|
7383
|
-
borderRadius: 8,
|
|
7384
|
-
fontSize: 12,
|
|
7385
|
-
fontWeight: 700,
|
|
7386
|
-
cursor: "pointer",
|
|
7387
|
-
fontFamily: "inherit",
|
|
7388
|
-
border: "none"
|
|
7389
|
-
};
|
|
7390
|
-
return /* @__PURE__ */ import_react3.default.createElement("div", { style: { margin: "0 16px 14px", border: "1px solid var(--dc-border)", borderRadius: 10, overflow: "hidden" } }, /* @__PURE__ */ import_react3.default.createElement(
|
|
7391
|
-
"button",
|
|
7343
|
+
const passwordFields = /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement(
|
|
7344
|
+
"input",
|
|
7392
7345
|
{
|
|
7393
|
-
|
|
7394
|
-
|
|
7395
|
-
|
|
7396
|
-
|
|
7397
|
-
|
|
7398
|
-
|
|
7399
|
-
|
|
7400
|
-
|
|
7401
|
-
|
|
7402
|
-
|
|
7403
|
-
|
|
7404
|
-
|
|
7405
|
-
|
|
7406
|
-
|
|
7407
|
-
|
|
7408
|
-
|
|
7346
|
+
className: "dcm-field",
|
|
7347
|
+
type: "password",
|
|
7348
|
+
placeholder: "Password (at least 8 characters)",
|
|
7349
|
+
"aria-label": "Password",
|
|
7350
|
+
autoComplete: "new-password",
|
|
7351
|
+
value: password,
|
|
7352
|
+
onChange: (e) => setPassword(e.target.value)
|
|
7353
|
+
}
|
|
7354
|
+
), /* @__PURE__ */ import_react3.default.createElement(
|
|
7355
|
+
"input",
|
|
7356
|
+
{
|
|
7357
|
+
className: "dcm-field",
|
|
7358
|
+
placeholder: "Password hint (optional)",
|
|
7359
|
+
"aria-label": "Password hint",
|
|
7360
|
+
value: passwordHint,
|
|
7361
|
+
onChange: (e) => setPasswordHint(e.target.value)
|
|
7362
|
+
}
|
|
7363
|
+
), error && /* @__PURE__ */ import_react3.default.createElement("p", { className: "dcm-error", role: "alert" }, error));
|
|
7364
|
+
return /* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-panel" }, /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-panel-head", onClick: () => setExpanded((v) => !v), "aria-expanded": expanded }, /* @__PURE__ */ import_react3.default.createElement("span", null, "Recovery file"), /* @__PURE__ */ import_react3.default.createElement(ChevronIcon, { open: expanded })), expanded && /* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-panel-body" }, !mode && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement("p", { className: "dcm-note" }, "Save a recovery file so you can restore this wallet on a new device."), /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-primary", style: { height: 44, borderRadius: 12 }, onClick: () => {
|
|
7409
7365
|
reset();
|
|
7410
7366
|
setMode("share");
|
|
7411
|
-
}
|
|
7367
|
+
} }, "Download recovery-share file"), /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-ghost", onClick: () => {
|
|
7412
7368
|
reset();
|
|
7413
7369
|
setMode("portable");
|
|
7414
|
-
}
|
|
7415
|
-
background: "rgba(255,85,51,0.08)",
|
|
7416
|
-
border: "1px solid rgba(255,85,51,0.3)",
|
|
7417
|
-
borderRadius: 8,
|
|
7418
|
-
padding: "8px 10px",
|
|
7419
|
-
fontSize: 11,
|
|
7420
|
-
color: "#ff9977",
|
|
7421
|
-
lineHeight: 1.5
|
|
7422
|
-
} }, /* @__PURE__ */ import_react3.default.createElement("strong", { style: { display: "block", marginBottom: 3, color: "#ff5533" } }, "This file controls your wallet"), "Contains two shares \u2014 file plus password gives complete control. Keep it offline, not a cloud drive. This also invalidates your current recovery-share file."), /* @__PURE__ */ import_react3.default.createElement("label", { style: { display: "flex", alignItems: "center", gap: 6, fontSize: 11, color: "var(--dc-text)" } }, /* @__PURE__ */ import_react3.default.createElement("input", { type: "checkbox", checked: confirmed, onChange: (e) => setConfirmed(e.target.checked), style: { width: "auto" } }), "I understand this is a bearer secret"), /* @__PURE__ */ import_react3.default.createElement("input", { type: "password", placeholder: "Password (min 8 chars)", value: password, onChange: (e) => setPassword(e.target.value), style: inputStyle }), /* @__PURE__ */ import_react3.default.createElement("input", { placeholder: "Password hint (optional)", value: passwordHint, onChange: (e) => setPasswordHint(e.target.value), style: inputStyle }), error && /* @__PURE__ */ import_react3.default.createElement("div", { style: { fontSize: 11, color: "var(--dc-danger, #ff5533)" } }, error), /* @__PURE__ */ import_react3.default.createElement("div", { style: { display: "flex", gap: 8 } }, /* @__PURE__ */ import_react3.default.createElement("button", { onClick: handleGenerate, disabled: busy || !confirmed, style: { ...btnStyle, flex: 1, background: "var(--dc-accent)", color: "var(--dc-accent-text)" } }, busy ? "Generating\u2026" : "Generate & download"), /* @__PURE__ */ import_react3.default.createElement("button", { onClick: reset, style: { ...btnStyle, background: "transparent", border: "1px solid var(--dc-border)", color: "var(--dc-text-muted)" } }, "Cancel"))), result && /* @__PURE__ */ import_react3.default.createElement("div", { style: { marginTop: 10, fontSize: 11, color: "var(--dc-text-muted)", lineHeight: 1.5 } }, result.kind === "share" ? "Recovery-share file" : "Full recovery file", " downloaded \u2014 share set is now version ", result.version, ". Any previous recovery file no longer works.")));
|
|
7370
|
+
} }, "Download full recovery file")), mode === "share" && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement("p", { className: "dcm-note" }, "One share. It is useless on its own, so a password manager or cloud drive is a fine place for it. A new file replaces any previous recovery-share file."), passwordFields, /* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-row" }, /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-primary", onClick: handleGenerate, disabled: busy }, busy ? "Preparing\u2026" : "Download"), /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-ghost", onClick: reset }, "Cancel"))), mode === "portable" && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-warn" }, /* @__PURE__ */ import_react3.default.createElement("strong", null, "This file controls your wallet"), "It holds two shares, so the file plus its password is full control. Keep it offline, not in a cloud drive. It also replaces your current recovery-share file."), /* @__PURE__ */ import_react3.default.createElement("label", { className: "dcm-check" }, /* @__PURE__ */ import_react3.default.createElement("input", { type: "checkbox", checked: confirmed, onChange: (e) => setConfirmed(e.target.checked) }), "I understand anyone with this file and password controls the wallet"), passwordFields, /* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-row" }, /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-primary", onClick: handleGenerate, disabled: busy || !confirmed }, busy ? "Preparing\u2026" : "Download"), /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-ghost", onClick: reset }, "Cancel"))), result && /* @__PURE__ */ import_react3.default.createElement("p", { className: "dcm-note" }, result.kind === "share" ? "Recovery-share file" : "Full recovery file", " downloaded. The share set is now version ", result.version, ", and any earlier recovery file no longer works.")));
|
|
7423
7371
|
}
|
|
7424
7372
|
function SocialWalletModal({
|
|
7425
7373
|
open,
|
|
@@ -7430,6 +7378,7 @@ function SocialWalletModal({
|
|
|
7430
7378
|
onDisconnect,
|
|
7431
7379
|
onGoogleSignIn,
|
|
7432
7380
|
onKingsChatSignIn,
|
|
7381
|
+
onXSignIn,
|
|
7433
7382
|
onEmailStart,
|
|
7434
7383
|
onEmailVerify,
|
|
7435
7384
|
onPhoneStart,
|
|
@@ -7448,9 +7397,11 @@ function SocialWalletModal({
|
|
|
7448
7397
|
const [timer, setTimer] = (0, import_react3.useState)("");
|
|
7449
7398
|
const [unlocking, setUnlocking] = (0, import_react3.useState)(false);
|
|
7450
7399
|
const [disconnecting, setDisconnecting] = (0, import_react3.useState)(false);
|
|
7400
|
+
const [actionError, setActionError] = (0, import_react3.useState)("");
|
|
7451
7401
|
(0, import_react3.useEffect)(() => {
|
|
7452
7402
|
if (!open) return;
|
|
7453
7403
|
injectTokens2(theme);
|
|
7404
|
+
injectModalCss();
|
|
7454
7405
|
if (theme !== "auto") return;
|
|
7455
7406
|
const mq = window.matchMedia("(prefers-color-scheme: dark)");
|
|
7456
7407
|
const h = () => injectTokens2("auto");
|
|
@@ -7477,17 +7428,23 @@ function SocialWalletModal({
|
|
|
7477
7428
|
if (!open) return null;
|
|
7478
7429
|
async function handleUnlock() {
|
|
7479
7430
|
setUnlocking(true);
|
|
7431
|
+
setActionError("");
|
|
7480
7432
|
try {
|
|
7481
7433
|
await onUnlock();
|
|
7434
|
+
} catch (e) {
|
|
7435
|
+
setActionError(e.message);
|
|
7482
7436
|
} finally {
|
|
7483
7437
|
setUnlocking(false);
|
|
7484
7438
|
}
|
|
7485
7439
|
}
|
|
7486
7440
|
async function handleDisconnect() {
|
|
7487
7441
|
setDisconnecting(true);
|
|
7442
|
+
setActionError("");
|
|
7488
7443
|
try {
|
|
7489
7444
|
await onDisconnect();
|
|
7490
7445
|
onClose();
|
|
7446
|
+
} catch (e) {
|
|
7447
|
+
setActionError(e.message);
|
|
7491
7448
|
} finally {
|
|
7492
7449
|
setDisconnecting(false);
|
|
7493
7450
|
}
|
|
@@ -7495,12 +7452,13 @@ function SocialWalletModal({
|
|
|
7495
7452
|
const evmChain = chains?.find((c) => c.startsWith("evm:")) ?? "evm:11155111";
|
|
7496
7453
|
const solChain = chains?.find((c) => c.startsWith("solana:")) ?? "solana:mainnet";
|
|
7497
7454
|
const showSignIn = !socialAuth.addresses || socialAuth.needsReconnect;
|
|
7455
|
+
const unlocked = socialAuth.isUnlocked;
|
|
7498
7456
|
const modal = /* @__PURE__ */ import_react3.default.createElement(
|
|
7499
7457
|
"div",
|
|
7500
7458
|
{
|
|
7501
7459
|
role: "dialog",
|
|
7502
7460
|
"aria-modal": "true",
|
|
7503
|
-
"aria-label": "
|
|
7461
|
+
"aria-label": showSignIn ? "Log in or sign up" : "Your wallet",
|
|
7504
7462
|
style: {
|
|
7505
7463
|
position: "fixed",
|
|
7506
7464
|
inset: 0,
|
|
@@ -7509,63 +7467,17 @@ function SocialWalletModal({
|
|
|
7509
7467
|
alignItems: "center",
|
|
7510
7468
|
justifyContent: "center",
|
|
7511
7469
|
padding: 16,
|
|
7512
|
-
fontFamily: "var(--dc-font-sans, system-ui, sans-serif)"
|
|
7470
|
+
fontFamily: "var(--dc-font-sans, system-ui, sans-serif)",
|
|
7471
|
+
WebkitFontSmoothing: "antialiased"
|
|
7513
7472
|
}
|
|
7514
7473
|
},
|
|
7515
|
-
/* @__PURE__ */ import_react3.default.createElement(
|
|
7516
|
-
|
|
7517
|
-
{
|
|
7518
|
-
onClick: onClose,
|
|
7519
|
-
style: {
|
|
7520
|
-
position: "absolute",
|
|
7521
|
-
inset: 0,
|
|
7522
|
-
background: "var(--dc-bg-overlay)",
|
|
7523
|
-
backdropFilter: "blur(8px)",
|
|
7524
|
-
WebkitBackdropFilter: "blur(8px)"
|
|
7525
|
-
}
|
|
7526
|
-
}
|
|
7527
|
-
),
|
|
7528
|
-
/* @__PURE__ */ import_react3.default.createElement("div", { style: {
|
|
7529
|
-
position: "relative",
|
|
7530
|
-
background: "var(--dc-bg)",
|
|
7531
|
-
border: "1px solid var(--dc-border)",
|
|
7532
|
-
borderRadius: 20,
|
|
7533
|
-
width: "100%",
|
|
7534
|
-
maxWidth: 380,
|
|
7535
|
-
maxHeight: "90vh",
|
|
7536
|
-
overflowY: "auto",
|
|
7537
|
-
boxShadow: "0 24px 64px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.04)"
|
|
7538
|
-
} }, /* @__PURE__ */ import_react3.default.createElement("div", { style: {
|
|
7539
|
-
height: 2,
|
|
7540
|
-
position: "sticky",
|
|
7541
|
-
top: 0,
|
|
7542
|
-
zIndex: 1,
|
|
7543
|
-
background: "linear-gradient(90deg, transparent, var(--dc-accent) 30%, var(--dc-accent) 70%, transparent)"
|
|
7544
|
-
} }), /* @__PURE__ */ import_react3.default.createElement("div", { style: { padding: "18px 20px 16px", display: "flex", alignItems: "center", gap: 11 } }, /* @__PURE__ */ import_react3.default.createElement(DecaneMark, { size: 38 }), /* @__PURE__ */ import_react3.default.createElement("div", { style: { flex: 1 } }, /* @__PURE__ */ import_react3.default.createElement("div", { style: { display: "flex", alignItems: "baseline", gap: 6 } }, /* @__PURE__ */ import_react3.default.createElement(DecaneWordmark, { size: 15 }), /* @__PURE__ */ import_react3.default.createElement("span", { style: { fontSize: 13, fontWeight: 700, color: "var(--dc-text-muted)", letterSpacing: "-0.01em" } }, "wallet")), /* @__PURE__ */ import_react3.default.createElement("div", { style: { fontSize: 11, color: "var(--dc-text-muted)", marginTop: 2 } }, "Non-custodial \xB7 key split three ways")), /* @__PURE__ */ import_react3.default.createElement(
|
|
7545
|
-
"button",
|
|
7546
|
-
{
|
|
7547
|
-
onClick: onClose,
|
|
7548
|
-
style: {
|
|
7549
|
-
background: "var(--dc-surface)",
|
|
7550
|
-
border: "1px solid var(--dc-border)",
|
|
7551
|
-
borderRadius: 8,
|
|
7552
|
-
width: 28,
|
|
7553
|
-
height: 28,
|
|
7554
|
-
cursor: "pointer",
|
|
7555
|
-
display: "flex",
|
|
7556
|
-
alignItems: "center",
|
|
7557
|
-
justifyContent: "center",
|
|
7558
|
-
color: "var(--dc-text-muted)",
|
|
7559
|
-
flexShrink: 0,
|
|
7560
|
-
padding: 0
|
|
7561
|
-
}
|
|
7562
|
-
},
|
|
7563
|
-
/* @__PURE__ */ import_react3.default.createElement("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none" }, /* @__PURE__ */ import_react3.default.createElement("path", { d: "M1.5 1.5L10.5 10.5M10.5 1.5L1.5 10.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }))
|
|
7564
|
-
)), showSignIn ? /* @__PURE__ */ import_react3.default.createElement(
|
|
7474
|
+
/* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-backdrop", onClick: onClose }),
|
|
7475
|
+
/* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-card" }, /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-icon-btn", style: { right: 14 }, onClick: onClose, "aria-label": "Close" }, /* @__PURE__ */ import_react3.default.createElement(CloseIcon, null)), showSignIn ? /* @__PURE__ */ import_react3.default.createElement(
|
|
7565
7476
|
SignInView,
|
|
7566
7477
|
{
|
|
7567
7478
|
onGoogleSignIn,
|
|
7568
7479
|
onKingsChatSignIn,
|
|
7480
|
+
onXSignIn,
|
|
7569
7481
|
onEmailStart,
|
|
7570
7482
|
onEmailVerify,
|
|
7571
7483
|
onPhoneStart,
|
|
@@ -7578,86 +7490,22 @@ function SocialWalletModal({
|
|
|
7578
7490
|
passkeyAddress,
|
|
7579
7491
|
onPasskeySignIn
|
|
7580
7492
|
}
|
|
7581
|
-
) : /* @__PURE__ */ import_react3.default.createElement(import_react3.default.
|
|
7582
|
-
|
|
7583
|
-
|
|
7584
|
-
|
|
7585
|
-
|
|
7586
|
-
|
|
7587
|
-
|
|
7588
|
-
|
|
7589
|
-
|
|
7590
|
-
} }, /* @__PURE__ */ import_react3.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: 8 } }, /* @__PURE__ */ import_react3.default.createElement("span", { style: {
|
|
7591
|
-
width: 7,
|
|
7592
|
-
height: 7,
|
|
7593
|
-
borderRadius: "50%",
|
|
7594
|
-
flexShrink: 0,
|
|
7595
|
-
background: socialAuth.isUnlocked ? "#12b76a" : "var(--dc-accent)",
|
|
7596
|
-
boxShadow: `0 0 6px ${socialAuth.isUnlocked ? "#12b76a" : "var(--dc-accent)"}`
|
|
7597
|
-
} }), /* @__PURE__ */ import_react3.default.createElement("span", { style: {
|
|
7598
|
-
fontSize: 12,
|
|
7599
|
-
fontWeight: 700,
|
|
7600
|
-
color: socialAuth.isUnlocked ? "#12b76a" : "var(--dc-accent)"
|
|
7601
|
-
} }, socialAuth.isUnlocked ? "Unlocked" : "Locked")), socialAuth.isUnlocked && timer && /* @__PURE__ */ import_react3.default.createElement("span", { style: { fontSize: 11, color: "var(--dc-text-muted)", fontFamily: "monospace" } }, "expires ", timer)), /* @__PURE__ */ import_react3.default.createElement("div", { style: { padding: "0 16px 14px" } }, socialAuth.addresses?.evm && /* @__PURE__ */ import_react3.default.createElement(AddressRow, { label: "EVM (Ethereum, Base, \u2026)", address: socialAuth.addresses.evm, kind: "evm", chain: evmChain, rpcUrls }), socialAuth.addresses?.solana && /* @__PURE__ */ import_react3.default.createElement(AddressRow, { label: "Solana", address: socialAuth.addresses.solana, kind: "solana", chain: solChain, rpcUrls })), socialAuth.isUnlocked && /* @__PURE__ */ import_react3.default.createElement(
|
|
7493
|
+
) : /* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-body" }, /* @__PURE__ */ import_react3.default.createElement(DecaneMark, { size: 44 }), /* @__PURE__ */ import_react3.default.createElement("h2", { className: "dcm-title" }, "Your wallet"), /* @__PURE__ */ import_react3.default.createElement(
|
|
7494
|
+
"span",
|
|
7495
|
+
{
|
|
7496
|
+
className: "dcm-status",
|
|
7497
|
+
style: { color: unlocked ? "#12b76a" : "var(--dc-accent-ink)", marginTop: -8 }
|
|
7498
|
+
},
|
|
7499
|
+
/* @__PURE__ */ import_react3.default.createElement("i", { style: { background: unlocked ? "#12b76a" : "var(--dc-accent)" } }),
|
|
7500
|
+
unlocked ? timer ? `Unlocked, expires in ${timer}` : "Unlocked" : "Locked"
|
|
7501
|
+
), (socialAuth.addresses?.evm || socialAuth.addresses?.solana) && /* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-addresses" }, socialAuth.addresses?.evm && /* @__PURE__ */ import_react3.default.createElement(AddressRow, { label: "Ethereum and EVM", address: socialAuth.addresses.evm, kind: "evm", chain: evmChain, rpcUrls }), socialAuth.addresses?.solana && /* @__PURE__ */ import_react3.default.createElement(AddressRow, { label: "Solana", address: socialAuth.addresses.solana, kind: "solana", chain: solChain, rpcUrls })), unlocked && /* @__PURE__ */ import_react3.default.createElement(
|
|
7602
7502
|
RecoverySection,
|
|
7603
7503
|
{
|
|
7604
7504
|
addresses: socialAuth.addresses,
|
|
7605
7505
|
onRotateShares,
|
|
7606
7506
|
onExportPortableBackup
|
|
7607
7507
|
}
|
|
7608
|
-
), /* @__PURE__ */ import_react3.default.createElement("div", { style: {
|
|
7609
|
-
padding: "14px 16px",
|
|
7610
|
-
borderTop: "1px solid var(--dc-border)",
|
|
7611
|
-
display: "flex",
|
|
7612
|
-
gap: 8
|
|
7613
|
-
} }, !socialAuth.isUnlocked && /* @__PURE__ */ import_react3.default.createElement(
|
|
7614
|
-
"button",
|
|
7615
|
-
{
|
|
7616
|
-
onClick: handleUnlock,
|
|
7617
|
-
disabled: unlocking,
|
|
7618
|
-
style: {
|
|
7619
|
-
flex: 1,
|
|
7620
|
-
padding: "10px 0",
|
|
7621
|
-
background: "var(--dc-accent)",
|
|
7622
|
-
color: "var(--dc-accent-text)",
|
|
7623
|
-
border: "none",
|
|
7624
|
-
borderRadius: 10,
|
|
7625
|
-
fontSize: 13,
|
|
7626
|
-
fontWeight: 700,
|
|
7627
|
-
cursor: unlocking ? "not-allowed" : "pointer",
|
|
7628
|
-
fontFamily: "inherit",
|
|
7629
|
-
opacity: unlocking ? 0.7 : 1
|
|
7630
|
-
}
|
|
7631
|
-
},
|
|
7632
|
-
unlocking ? "Unlocking\u2026" : "\u{1F513} Unlock wallet"
|
|
7633
|
-
), /* @__PURE__ */ import_react3.default.createElement(
|
|
7634
|
-
"button",
|
|
7635
|
-
{
|
|
7636
|
-
onClick: handleDisconnect,
|
|
7637
|
-
disabled: disconnecting,
|
|
7638
|
-
style: {
|
|
7639
|
-
flex: socialAuth.isUnlocked ? 1 : 0,
|
|
7640
|
-
padding: "10px 16px",
|
|
7641
|
-
background: "transparent",
|
|
7642
|
-
border: "1px solid var(--dc-border)",
|
|
7643
|
-
borderRadius: 10,
|
|
7644
|
-
color: "var(--dc-text-muted)",
|
|
7645
|
-
fontSize: 13,
|
|
7646
|
-
cursor: disconnecting ? "not-allowed" : "pointer",
|
|
7647
|
-
fontFamily: "inherit",
|
|
7648
|
-
opacity: disconnecting ? 0.7 : 1,
|
|
7649
|
-
whiteSpace: "nowrap"
|
|
7650
|
-
}
|
|
7651
|
-
},
|
|
7652
|
-
disconnecting ? "Signing out\u2026" : "Sign out"
|
|
7653
|
-
))), /* @__PURE__ */ import_react3.default.createElement("div", { style: {
|
|
7654
|
-
padding: "11px 16px",
|
|
7655
|
-
borderTop: "1px solid var(--dc-border)",
|
|
7656
|
-
display: "flex",
|
|
7657
|
-
alignItems: "center",
|
|
7658
|
-
justifyContent: "center",
|
|
7659
|
-
gap: 6
|
|
7660
|
-
} }, /* @__PURE__ */ import_react3.default.createElement("span", { style: { fontSize: 10.5, color: "var(--dc-text-muted)", letterSpacing: "0.02em" } }, "Secured by"), /* @__PURE__ */ import_react3.default.createElement(DecaneMark, { size: 13, muted: true }), /* @__PURE__ */ import_react3.default.createElement(DecaneWordmark, { size: 11, muted: true })))
|
|
7508
|
+
), actionError && /* @__PURE__ */ import_react3.default.createElement("p", { className: "dcm-error", role: "alert" }, actionError), /* @__PURE__ */ import_react3.default.createElement("div", { className: "dcm-actions" }, !unlocked && /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-primary", style: { height: 44, borderRadius: 12 }, onClick: handleUnlock, disabled: unlocking }, unlocking ? "Unlocking\u2026" : "Unlock wallet"), /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "dcm-ghost", onClick: handleDisconnect, disabled: disconnecting }, disconnecting ? "Signing out\u2026" : "Sign out")), /* @__PURE__ */ import_react3.default.createElement(ProtectedBy, null)))
|
|
7661
7509
|
);
|
|
7662
7510
|
return (0, import_react_dom2.createPortal)(modal, document.body);
|
|
7663
7511
|
}
|