@retinalabsllc/zairusjs 10.0.1 → 10.0.2
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 +48 -6
- package/dist/index.mjs +49 -6
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2714,10 +2714,23 @@ var UniversalSecurityPage = ({
|
|
|
2714
2714
|
};
|
|
2715
2715
|
const handleCopySecret = async (secret) => {
|
|
2716
2716
|
try {
|
|
2717
|
-
|
|
2717
|
+
if (navigator.clipboard && window.isSecureContext) {
|
|
2718
|
+
await navigator.clipboard.writeText(secret);
|
|
2719
|
+
} else {
|
|
2720
|
+
const textArea = document.createElement("textarea");
|
|
2721
|
+
textArea.value = secret;
|
|
2722
|
+
textArea.style.position = "fixed";
|
|
2723
|
+
textArea.style.left = "-999999px";
|
|
2724
|
+
textArea.style.top = "-999999px";
|
|
2725
|
+
document.body.appendChild(textArea);
|
|
2726
|
+
textArea.focus();
|
|
2727
|
+
textArea.select();
|
|
2728
|
+
document.execCommand("copy");
|
|
2729
|
+
textArea.remove();
|
|
2730
|
+
}
|
|
2718
2731
|
import_react_hot_toast8.default.success("Secret copied to clipboard");
|
|
2719
2732
|
} catch {
|
|
2720
|
-
import_react_hot_toast8.default.error("
|
|
2733
|
+
import_react_hot_toast8.default.error("Unable to copy");
|
|
2721
2734
|
}
|
|
2722
2735
|
};
|
|
2723
2736
|
const handleToggle2FA = async () => {
|
|
@@ -2787,13 +2800,33 @@ var UniversalSecurityPage = ({
|
|
|
2787
2800
|
if (!onEnablePasskey) return;
|
|
2788
2801
|
setIsSubmitting(true);
|
|
2789
2802
|
try {
|
|
2803
|
+
if (!window.PublicKeyCredential) {
|
|
2804
|
+
throw new Error("Passkeys are not supported on this device/browser.");
|
|
2805
|
+
}
|
|
2806
|
+
const challenge = window.crypto.getRandomValues ? window.crypto.getRandomValues(new Uint8Array(32)) : new Uint8Array(32).fill(1);
|
|
2807
|
+
const userId = new Uint8Array(16).fill(2);
|
|
2808
|
+
const publicKeyCredentialCreationOptions = {
|
|
2809
|
+
challenge,
|
|
2810
|
+
rp: { name: "Aeona Finance", id: window.location.hostname },
|
|
2811
|
+
user: {
|
|
2812
|
+
id: userId,
|
|
2813
|
+
name: userEmail || "User",
|
|
2814
|
+
displayName: userEmail || "User"
|
|
2815
|
+
},
|
|
2816
|
+
pubKeyCredParams: [{ alg: -7, type: "public-key" }, { alg: -257, type: "public-key" }],
|
|
2817
|
+
authenticatorSelection: { authenticatorAttachment: "platform", userVerification: "required" },
|
|
2818
|
+
timeout: 6e4,
|
|
2819
|
+
attestation: "none"
|
|
2820
|
+
};
|
|
2821
|
+
const credential = await navigator.credentials.create({ publicKey: publicKeyCredentialCreationOptions });
|
|
2822
|
+
if (!credential) throw new Error("Passkey creation was canceled.");
|
|
2790
2823
|
const res = await onEnablePasskey();
|
|
2791
2824
|
if (res.success) {
|
|
2792
2825
|
import_react_hot_toast8.default.success("Passkey Created Successfully");
|
|
2793
2826
|
setShowPasskeyModal(false);
|
|
2794
2827
|
}
|
|
2795
2828
|
} catch (error) {
|
|
2796
|
-
import_react_hot_toast8.default.error("Passkey setup failed or was canceled");
|
|
2829
|
+
import_react_hot_toast8.default.error(error.message || "Passkey setup failed or was canceled.");
|
|
2797
2830
|
} finally {
|
|
2798
2831
|
setIsSubmitting(false);
|
|
2799
2832
|
}
|
|
@@ -2829,7 +2862,15 @@ var UniversalSecurityPage = ({
|
|
|
2829
2862
|
toggleLoading: isPasskeyLoading,
|
|
2830
2863
|
isLast: true
|
|
2831
2864
|
}
|
|
2832
|
-
))), show2FASetupModal && /* @__PURE__ */ import_react45.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShow2FASetupModal(false) }), /* @__PURE__ */ import_react45.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[90vh]" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ import_react45.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable 2FA"), /* @__PURE__ */ import_react45.default.createElement("button", { onClick: () => !isSubmitting && setShow2FASetupModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-2" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "w-full flex justify-center mb-6 mix-blend-multiply" }, twoFaQr ? /* @__PURE__ */ import_react45.default.createElement("img", { src: twoFaQr, alt: "2FA QR Code", className: "w-40 h-40 object-contain rounded-xl border border-neutral-100 p-2" }) : /* @__PURE__ */ import_react45.default.createElement("div", { className: "w-40 h-40 bg-neutral-100 rounded-xl flex items-center justify-center animate-pulse" })), /* @__PURE__ */ import_react45.default.createElement("div", { className: "
|
|
2865
|
+
))), show2FASetupModal && /* @__PURE__ */ import_react45.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShow2FASetupModal(false) }), /* @__PURE__ */ import_react45.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[90vh]" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ import_react45.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable 2FA"), /* @__PURE__ */ import_react45.default.createElement("button", { onClick: () => !isSubmitting && setShow2FASetupModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-2" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "w-full flex justify-center mb-6 mix-blend-multiply" }, twoFaQr ? /* @__PURE__ */ import_react45.default.createElement("img", { src: twoFaQr, alt: "2FA QR Code", className: "w-40 h-40 object-contain rounded-xl border border-neutral-100 p-2" }) : /* @__PURE__ */ import_react45.default.createElement("div", { className: "w-40 h-40 bg-neutral-100 rounded-xl flex items-center justify-center animate-pulse" })), /* @__PURE__ */ import_react45.default.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-8" }, /* @__PURE__ */ import_react45.default.createElement("div", null, /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2 uppercase" }, "Setup Key"), /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex items-center gap-2 min-w-0 bg-neutral-50 px-3 py-2.5 rounded-xl border border-neutral-100" }, /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-[13px] font-mono tracking-widest text-black truncate min-w-0 block flex-1" }, twoFaSecret), /* @__PURE__ */ import_react45.default.createElement(
|
|
2866
|
+
"button",
|
|
2867
|
+
{
|
|
2868
|
+
type: "button",
|
|
2869
|
+
onClick: () => handleCopySecret(twoFaSecret),
|
|
2870
|
+
className: "text-neutral-400 hover:text-black transition-colors outline-none shrink-0 ml-2"
|
|
2871
|
+
},
|
|
2872
|
+
/* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.Copy01Icon, size: 16 })
|
|
2873
|
+
)))), /* @__PURE__ */ import_react45.default.createElement("div", { className: "text-center mb-8 mt-2" }, /* @__PURE__ */ import_react45.default.createElement("h2", { className: "text-xl text-black mb-2 tracking-tight" }, "Security Check"), /* @__PURE__ */ import_react45.default.createElement("p", { className: "text-[13px] text-neutral-500" }, "Enter the 6-digit code from your app")), /* @__PURE__ */ import_react45.default.createElement("form", { className: "space-y-8", autoComplete: "off", onSubmit: (e) => {
|
|
2833
2874
|
e.preventDefault();
|
|
2834
2875
|
submitEnable2FA(otp.join(""));
|
|
2835
2876
|
} }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex justify-between gap-2", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ import_react45.default.createElement(
|
|
@@ -2863,8 +2904,9 @@ var UniversalSecurityPage = ({
|
|
|
2863
2904
|
), /* @__PURE__ */ import_react45.default.createElement(
|
|
2864
2905
|
"button",
|
|
2865
2906
|
{
|
|
2907
|
+
type: "button",
|
|
2866
2908
|
onClick: () => handleCopySecret(twoFaSecret),
|
|
2867
|
-
className: "w-full flex
|
|
2909
|
+
className: "w-full flex items-center justify-center py-2.5 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 outline-none text-[13px] tracking-wide transition-colors mt-2"
|
|
2868
2910
|
},
|
|
2869
2911
|
"Copy Secret Key"
|
|
2870
2912
|
))))), show2FADisableModal && /* @__PURE__ */ import_react45.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShow2FADisableModal(false) }), /* @__PURE__ */ import_react45.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ import_react45.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Disable 2FA"), /* @__PURE__ */ import_react45.default.createElement("button", { onClick: () => !isSubmitting && setShow2FADisableModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react45.default.createElement("div", { className: "p-6" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "text-center mb-8 mt-2" }, /* @__PURE__ */ import_react45.default.createElement("h2", { className: "text-xl text-black mb-2 tracking-tight" }, "Security Check"), /* @__PURE__ */ import_react45.default.createElement("p", { className: "text-[13px] text-neutral-500" }, "Enter the code from your authenticator app to disable 2FA.")), /* @__PURE__ */ import_react45.default.createElement("form", { className: "space-y-8", autoComplete: "off", onSubmit: (e) => {
|
|
@@ -2898,7 +2940,7 @@ var UniversalSecurityPage = ({
|
|
|
2898
2940
|
className: "w-full py-3.5"
|
|
2899
2941
|
},
|
|
2900
2942
|
"Verify & Disable"
|
|
2901
|
-
))))), showPasskeyModal && /* @__PURE__ */ import_react45.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShowPasskeyModal(false) }), /* @__PURE__ */ import_react45.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 border-b border-neutral-50" }, /* @__PURE__ */ import_react45.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable Passkey"), /* @__PURE__ */ import_react45.default.createElement("button", { onClick: () => !isSubmitting && setShowPasskeyModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react45.default.createElement("div", { className: "p-6 text-center" }, /* @__PURE__ */ import_react45.default.createElement("
|
|
2943
|
+
))))), showPasskeyModal && /* @__PURE__ */ import_react45.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShowPasskeyModal(false) }), /* @__PURE__ */ import_react45.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 border-b border-neutral-50" }, /* @__PURE__ */ import_react45.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable Passkey"), /* @__PURE__ */ import_react45.default.createElement("button", { onClick: () => !isSubmitting && setShowPasskeyModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react45.default.createElement("div", { className: "p-6 text-center" }, /* @__PURE__ */ import_react45.default.createElement("h2", { className: "text-lg text-black mb-2 tracking-tight" }, "Simplify your Sign In"), /* @__PURE__ */ import_react45.default.createElement("p", { className: "text-[13px] text-neutral-500 mb-8 leading-relaxed" }, "Use your device's biometrics (Face ID, Touch ID, or PIN) to securely sign into your account without needing a password."), /* @__PURE__ */ import_react45.default.createElement(
|
|
2902
2944
|
ThreeDActionButton,
|
|
2903
2945
|
{
|
|
2904
2946
|
onClick: submitEnablePasskey,
|
package/dist/index.mjs
CHANGED
|
@@ -2647,6 +2647,7 @@ import { HugeiconsIcon as HugeiconsIcon19 } from "@hugeicons/react";
|
|
|
2647
2647
|
import {
|
|
2648
2648
|
CancelCircleIcon as CancelCircleIcon6,
|
|
2649
2649
|
Loading03Icon as Loading03Icon10,
|
|
2650
|
+
Copy01Icon as Copy01Icon3,
|
|
2650
2651
|
ArrowLeft01Icon as ArrowLeft01Icon5,
|
|
2651
2652
|
Shield02Icon,
|
|
2652
2653
|
Key01Icon,
|
|
@@ -2701,10 +2702,23 @@ var UniversalSecurityPage = ({
|
|
|
2701
2702
|
};
|
|
2702
2703
|
const handleCopySecret = async (secret) => {
|
|
2703
2704
|
try {
|
|
2704
|
-
|
|
2705
|
+
if (navigator.clipboard && window.isSecureContext) {
|
|
2706
|
+
await navigator.clipboard.writeText(secret);
|
|
2707
|
+
} else {
|
|
2708
|
+
const textArea = document.createElement("textarea");
|
|
2709
|
+
textArea.value = secret;
|
|
2710
|
+
textArea.style.position = "fixed";
|
|
2711
|
+
textArea.style.left = "-999999px";
|
|
2712
|
+
textArea.style.top = "-999999px";
|
|
2713
|
+
document.body.appendChild(textArea);
|
|
2714
|
+
textArea.focus();
|
|
2715
|
+
textArea.select();
|
|
2716
|
+
document.execCommand("copy");
|
|
2717
|
+
textArea.remove();
|
|
2718
|
+
}
|
|
2705
2719
|
toast7.success("Secret copied to clipboard");
|
|
2706
2720
|
} catch {
|
|
2707
|
-
toast7.error("
|
|
2721
|
+
toast7.error("Unable to copy");
|
|
2708
2722
|
}
|
|
2709
2723
|
};
|
|
2710
2724
|
const handleToggle2FA = async () => {
|
|
@@ -2774,13 +2788,33 @@ var UniversalSecurityPage = ({
|
|
|
2774
2788
|
if (!onEnablePasskey) return;
|
|
2775
2789
|
setIsSubmitting(true);
|
|
2776
2790
|
try {
|
|
2791
|
+
if (!window.PublicKeyCredential) {
|
|
2792
|
+
throw new Error("Passkeys are not supported on this device/browser.");
|
|
2793
|
+
}
|
|
2794
|
+
const challenge = window.crypto.getRandomValues ? window.crypto.getRandomValues(new Uint8Array(32)) : new Uint8Array(32).fill(1);
|
|
2795
|
+
const userId = new Uint8Array(16).fill(2);
|
|
2796
|
+
const publicKeyCredentialCreationOptions = {
|
|
2797
|
+
challenge,
|
|
2798
|
+
rp: { name: "Aeona Finance", id: window.location.hostname },
|
|
2799
|
+
user: {
|
|
2800
|
+
id: userId,
|
|
2801
|
+
name: userEmail || "User",
|
|
2802
|
+
displayName: userEmail || "User"
|
|
2803
|
+
},
|
|
2804
|
+
pubKeyCredParams: [{ alg: -7, type: "public-key" }, { alg: -257, type: "public-key" }],
|
|
2805
|
+
authenticatorSelection: { authenticatorAttachment: "platform", userVerification: "required" },
|
|
2806
|
+
timeout: 6e4,
|
|
2807
|
+
attestation: "none"
|
|
2808
|
+
};
|
|
2809
|
+
const credential = await navigator.credentials.create({ publicKey: publicKeyCredentialCreationOptions });
|
|
2810
|
+
if (!credential) throw new Error("Passkey creation was canceled.");
|
|
2777
2811
|
const res = await onEnablePasskey();
|
|
2778
2812
|
if (res.success) {
|
|
2779
2813
|
toast7.success("Passkey Created Successfully");
|
|
2780
2814
|
setShowPasskeyModal(false);
|
|
2781
2815
|
}
|
|
2782
2816
|
} catch (error) {
|
|
2783
|
-
toast7.error("Passkey setup failed or was canceled");
|
|
2817
|
+
toast7.error(error.message || "Passkey setup failed or was canceled.");
|
|
2784
2818
|
} finally {
|
|
2785
2819
|
setIsSubmitting(false);
|
|
2786
2820
|
}
|
|
@@ -2816,7 +2850,15 @@ var UniversalSecurityPage = ({
|
|
|
2816
2850
|
toggleLoading: isPasskeyLoading,
|
|
2817
2851
|
isLast: true
|
|
2818
2852
|
}
|
|
2819
|
-
))), show2FASetupModal && /* @__PURE__ */ React27.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React27.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShow2FASetupModal(false) }), /* @__PURE__ */ React27.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[90vh]" }, /* @__PURE__ */ React27.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ React27.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable 2FA"), /* @__PURE__ */ React27.createElement("button", { onClick: () => !isSubmitting && setShow2FASetupModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: CancelCircleIcon6, size: 18 }))), /* @__PURE__ */ React27.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-2" }, /* @__PURE__ */ React27.createElement("div", { className: "w-full flex justify-center mb-6 mix-blend-multiply" }, twoFaQr ? /* @__PURE__ */ React27.createElement("img", { src: twoFaQr, alt: "2FA QR Code", className: "w-40 h-40 object-contain rounded-xl border border-neutral-100 p-2" }) : /* @__PURE__ */ React27.createElement("div", { className: "w-40 h-40 bg-neutral-100 rounded-xl flex items-center justify-center animate-pulse" })), /* @__PURE__ */ React27.createElement("div", { className: "
|
|
2853
|
+
))), show2FASetupModal && /* @__PURE__ */ React27.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React27.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShow2FASetupModal(false) }), /* @__PURE__ */ React27.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[90vh]" }, /* @__PURE__ */ React27.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ React27.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable 2FA"), /* @__PURE__ */ React27.createElement("button", { onClick: () => !isSubmitting && setShow2FASetupModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: CancelCircleIcon6, size: 18 }))), /* @__PURE__ */ React27.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-2" }, /* @__PURE__ */ React27.createElement("div", { className: "w-full flex justify-center mb-6 mix-blend-multiply" }, twoFaQr ? /* @__PURE__ */ React27.createElement("img", { src: twoFaQr, alt: "2FA QR Code", className: "w-40 h-40 object-contain rounded-xl border border-neutral-100 p-2" }) : /* @__PURE__ */ React27.createElement("div", { className: "w-40 h-40 bg-neutral-100 rounded-xl flex items-center justify-center animate-pulse" })), /* @__PURE__ */ React27.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-8" }, /* @__PURE__ */ React27.createElement("div", null, /* @__PURE__ */ React27.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2 uppercase" }, "Setup Key"), /* @__PURE__ */ React27.createElement("div", { className: "flex items-center gap-2 min-w-0 bg-neutral-50 px-3 py-2.5 rounded-xl border border-neutral-100" }, /* @__PURE__ */ React27.createElement("span", { className: "text-[13px] font-mono tracking-widest text-black truncate min-w-0 block flex-1" }, twoFaSecret), /* @__PURE__ */ React27.createElement(
|
|
2854
|
+
"button",
|
|
2855
|
+
{
|
|
2856
|
+
type: "button",
|
|
2857
|
+
onClick: () => handleCopySecret(twoFaSecret),
|
|
2858
|
+
className: "text-neutral-400 hover:text-black transition-colors outline-none shrink-0 ml-2"
|
|
2859
|
+
},
|
|
2860
|
+
/* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: Copy01Icon3, size: 16 })
|
|
2861
|
+
)))), /* @__PURE__ */ React27.createElement("div", { className: "text-center mb-8 mt-2" }, /* @__PURE__ */ React27.createElement("h2", { className: "text-xl text-black mb-2 tracking-tight" }, "Security Check"), /* @__PURE__ */ React27.createElement("p", { className: "text-[13px] text-neutral-500" }, "Enter the 6-digit code from your app")), /* @__PURE__ */ React27.createElement("form", { className: "space-y-8", autoComplete: "off", onSubmit: (e) => {
|
|
2820
2862
|
e.preventDefault();
|
|
2821
2863
|
submitEnable2FA(otp.join(""));
|
|
2822
2864
|
} }, /* @__PURE__ */ React27.createElement("div", { className: "flex justify-between gap-2", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ React27.createElement(
|
|
@@ -2850,8 +2892,9 @@ var UniversalSecurityPage = ({
|
|
|
2850
2892
|
), /* @__PURE__ */ React27.createElement(
|
|
2851
2893
|
"button",
|
|
2852
2894
|
{
|
|
2895
|
+
type: "button",
|
|
2853
2896
|
onClick: () => handleCopySecret(twoFaSecret),
|
|
2854
|
-
className: "w-full flex
|
|
2897
|
+
className: "w-full flex items-center justify-center py-2.5 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 outline-none text-[13px] tracking-wide transition-colors mt-2"
|
|
2855
2898
|
},
|
|
2856
2899
|
"Copy Secret Key"
|
|
2857
2900
|
))))), show2FADisableModal && /* @__PURE__ */ React27.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React27.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShow2FADisableModal(false) }), /* @__PURE__ */ React27.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React27.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ React27.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Disable 2FA"), /* @__PURE__ */ React27.createElement("button", { onClick: () => !isSubmitting && setShow2FADisableModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: CancelCircleIcon6, size: 18 }))), /* @__PURE__ */ React27.createElement("div", { className: "p-6" }, /* @__PURE__ */ React27.createElement("div", { className: "text-center mb-8 mt-2" }, /* @__PURE__ */ React27.createElement("h2", { className: "text-xl text-black mb-2 tracking-tight" }, "Security Check"), /* @__PURE__ */ React27.createElement("p", { className: "text-[13px] text-neutral-500" }, "Enter the code from your authenticator app to disable 2FA.")), /* @__PURE__ */ React27.createElement("form", { className: "space-y-8", autoComplete: "off", onSubmit: (e) => {
|
|
@@ -2885,7 +2928,7 @@ var UniversalSecurityPage = ({
|
|
|
2885
2928
|
className: "w-full py-3.5"
|
|
2886
2929
|
},
|
|
2887
2930
|
"Verify & Disable"
|
|
2888
|
-
))))), showPasskeyModal && /* @__PURE__ */ React27.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React27.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShowPasskeyModal(false) }), /* @__PURE__ */ React27.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React27.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 border-b border-neutral-50" }, /* @__PURE__ */ React27.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable Passkey"), /* @__PURE__ */ React27.createElement("button", { onClick: () => !isSubmitting && setShowPasskeyModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: CancelCircleIcon6, size: 18 }))), /* @__PURE__ */ React27.createElement("div", { className: "p-6 text-center" }, /* @__PURE__ */ React27.createElement("
|
|
2931
|
+
))))), showPasskeyModal && /* @__PURE__ */ React27.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React27.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShowPasskeyModal(false) }), /* @__PURE__ */ React27.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React27.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 border-b border-neutral-50" }, /* @__PURE__ */ React27.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable Passkey"), /* @__PURE__ */ React27.createElement("button", { onClick: () => !isSubmitting && setShowPasskeyModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: CancelCircleIcon6, size: 18 }))), /* @__PURE__ */ React27.createElement("div", { className: "p-6 text-center" }, /* @__PURE__ */ React27.createElement("h2", { className: "text-lg text-black mb-2 tracking-tight" }, "Simplify your Sign In"), /* @__PURE__ */ React27.createElement("p", { className: "text-[13px] text-neutral-500 mb-8 leading-relaxed" }, "Use your device's biometrics (Face ID, Touch ID, or PIN) to securely sign into your account without needing a password."), /* @__PURE__ */ React27.createElement(
|
|
2889
2932
|
ThreeDActionButton,
|
|
2890
2933
|
{
|
|
2891
2934
|
onClick: submitEnablePasskey,
|