@retinalabsllc/zairusjs 9.0.80 → 9.0.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +28 -1
- package/dist/index.d.ts +28 -1
- package/dist/index.js +431 -146
- package/dist/index.mjs +434 -141
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -64,6 +64,7 @@ __export(index_exports, {
|
|
|
64
64
|
UniversalOrganizationPage: () => UniversalOrganizationPage,
|
|
65
65
|
UniversalProfilePage: () => UniversalProfilePage,
|
|
66
66
|
UniversalProfileSettings: () => UniversalProfileSettings,
|
|
67
|
+
UniversalSecurityPage: () => UniversalSecurityPage,
|
|
67
68
|
UniversalSidebar: () => UniversalSidebar,
|
|
68
69
|
UniversalTransactionPage: () => UniversalTransactionPage,
|
|
69
70
|
UniversalWalletPage: () => UniversalWalletPage,
|
|
@@ -1005,8 +1006,12 @@ var UniversalProfileSettings = ({
|
|
|
1005
1006
|
hasPin = false,
|
|
1006
1007
|
isPinLoading = false,
|
|
1007
1008
|
onSavePin,
|
|
1008
|
-
onSaveProfile
|
|
1009
|
+
onSaveProfile,
|
|
1010
|
+
onBack
|
|
1009
1011
|
}) => {
|
|
1012
|
+
const onBackHandler = onBack ?? (() => {
|
|
1013
|
+
if (typeof window !== "undefined") window.history.back();
|
|
1014
|
+
});
|
|
1010
1015
|
const [firstName, setFirstName] = (0, import_react17.useState)(initialFirstName);
|
|
1011
1016
|
const [lastName, setLastName] = (0, import_react17.useState)(initialLastName);
|
|
1012
1017
|
const [isSubmitting, setIsSubmitting] = (0, import_react17.useState)(false);
|
|
@@ -1081,7 +1086,15 @@ var UniversalProfileSettings = ({
|
|
|
1081
1086
|
};
|
|
1082
1087
|
const hasChanges = firstName !== initialFirstName || lastName !== initialLastName;
|
|
1083
1088
|
const isSaveDisabled = isSubmitting || isReadOnly || !hasChanges || firstName.trim().length === 0 || lastName.trim().length === 0;
|
|
1084
|
-
return /* @__PURE__ */ import_react17.default.createElement("div",
|
|
1089
|
+
return /* @__PURE__ */ import_react17.default.createElement("div", null, /* @__PURE__ */ import_react17.default.createElement("div", { className: "mb-3 flex max-w-3xl w-full mx-auto items-center px-1" }, /* @__PURE__ */ import_react17.default.createElement(
|
|
1090
|
+
"button",
|
|
1091
|
+
{
|
|
1092
|
+
onClick: onBackHandler,
|
|
1093
|
+
className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] font-medium outline-none"
|
|
1094
|
+
},
|
|
1095
|
+
/* @__PURE__ */ import_react17.default.createElement(import_react18.HugeiconsIcon, { icon: import_core_free_icons4.ArrowLeft01Icon, size: 16 }),
|
|
1096
|
+
" Back"
|
|
1097
|
+
)), /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex flex-col rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300" }, /* @__PURE__ */ import_react17.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react17.default.createElement("h1", { className: "text-black text-xl mb-1 truncate tracking-tight" }, "Personal Settings"), /* @__PURE__ */ import_react17.default.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your personal account profile.")), isReadOnly && /* @__PURE__ */ import_react17.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-100 text-neutral-400 rounded-full shrink-0" }, /* @__PURE__ */ import_react17.default.createElement(import_react18.HugeiconsIcon, { icon: import_core_free_icons4.CircleLock02Icon, size: 18, className: "text-current" }))), bannerProps && /* @__PURE__ */ import_react17.default.createElement(Banner, { ...bannerProps }), /* @__PURE__ */ import_react17.default.createElement("div", { className: "w-full max-w-5xl" }, /* @__PURE__ */ import_react17.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex flex-col sm:flex-row gap-6" }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react17.default.createElement(
|
|
1085
1098
|
TextInput,
|
|
1086
1099
|
{
|
|
1087
1100
|
label: "First Name",
|
|
@@ -1179,7 +1192,7 @@ var UniversalProfileSettings = ({
|
|
|
1179
1192
|
className: "w-full py-3"
|
|
1180
1193
|
},
|
|
1181
1194
|
hasPin ? "Update PIN" : "Set PIN"
|
|
1182
|
-
)))))));
|
|
1195
|
+
))))))));
|
|
1183
1196
|
};
|
|
1184
1197
|
|
|
1185
1198
|
// src/components/UniversalErrorView.tsx
|
|
@@ -2623,15 +2636,286 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2623
2636
|
})))));
|
|
2624
2637
|
};
|
|
2625
2638
|
|
|
2626
|
-
// src/components/
|
|
2639
|
+
// src/components/UniversalSecurityPage.tsx
|
|
2627
2640
|
var import_react45 = __toESM(require("react"));
|
|
2628
|
-
var
|
|
2641
|
+
var import_react_hot_toast8 = __toESM(require("react-hot-toast"));
|
|
2629
2642
|
var import_react46 = require("@hugeicons/react");
|
|
2630
2643
|
var import_core_free_icons16 = require("@hugeicons/core-free-icons");
|
|
2644
|
+
var UniversalSecurityPage = ({
|
|
2645
|
+
has2FA,
|
|
2646
|
+
hasPasskey,
|
|
2647
|
+
userEmail = "your account",
|
|
2648
|
+
is2FALoading = false,
|
|
2649
|
+
isPasskeyLoading = false,
|
|
2650
|
+
onBack,
|
|
2651
|
+
onRequest2FASetup,
|
|
2652
|
+
onVerifyAndEnable2FA,
|
|
2653
|
+
onVerifyAndDisable2FA,
|
|
2654
|
+
onEnablePasskey,
|
|
2655
|
+
onDisablePasskey
|
|
2656
|
+
}) => {
|
|
2657
|
+
const [show2FASetupModal, setShow2FASetupModal] = (0, import_react45.useState)(false);
|
|
2658
|
+
const [show2FADisableModal, setShow2FADisableModal] = (0, import_react45.useState)(false);
|
|
2659
|
+
const [showPasskeyModal, setShowPasskeyModal] = (0, import_react45.useState)(false);
|
|
2660
|
+
const [twoFaSecret, setTwoFaSecret] = (0, import_react45.useState)("");
|
|
2661
|
+
const [twoFaQr, setTwoFaQr] = (0, import_react45.useState)("");
|
|
2662
|
+
const [isFetchingSetup, setIsFetchingSetup] = (0, import_react45.useState)(false);
|
|
2663
|
+
const [otp, setOtp] = (0, import_react45.useState)(Array(6).fill(""));
|
|
2664
|
+
const [isSubmitting, setIsSubmitting] = (0, import_react45.useState)(false);
|
|
2665
|
+
const inputRefs = (0, import_react45.useRef)([]);
|
|
2666
|
+
const resetOtp = () => {
|
|
2667
|
+
setOtp(Array(6).fill(""));
|
|
2668
|
+
setIsSubmitting(false);
|
|
2669
|
+
};
|
|
2670
|
+
const handleOtpChange = (index, value) => {
|
|
2671
|
+
const sanitizedValue = value.replace(/\D/g, "").slice(-1);
|
|
2672
|
+
const newOtp = [...otp];
|
|
2673
|
+
newOtp[index] = sanitizedValue;
|
|
2674
|
+
setOtp(newOtp);
|
|
2675
|
+
if (sanitizedValue && index < 5) {
|
|
2676
|
+
inputRefs.current[index + 1]?.focus();
|
|
2677
|
+
}
|
|
2678
|
+
};
|
|
2679
|
+
const handlePaste = (e) => {
|
|
2680
|
+
e.preventDefault();
|
|
2681
|
+
const pastedData = e.clipboardData.getData("text").replace(/\D/g, "").slice(0, 6);
|
|
2682
|
+
if (!pastedData) return;
|
|
2683
|
+
const newOtp = [...otp];
|
|
2684
|
+
for (let i = 0; i < pastedData.length; i++) {
|
|
2685
|
+
newOtp[i] = pastedData[i];
|
|
2686
|
+
}
|
|
2687
|
+
setOtp(newOtp);
|
|
2688
|
+
const focusIndex = Math.min(pastedData.length, 5);
|
|
2689
|
+
inputRefs.current[focusIndex]?.focus();
|
|
2690
|
+
};
|
|
2691
|
+
const handleCopySecret = async (secret) => {
|
|
2692
|
+
try {
|
|
2693
|
+
await navigator.clipboard.writeText(secret);
|
|
2694
|
+
import_react_hot_toast8.default.success("Secret copied to clipboard");
|
|
2695
|
+
} catch {
|
|
2696
|
+
import_react_hot_toast8.default.error("Failed to copy");
|
|
2697
|
+
}
|
|
2698
|
+
};
|
|
2699
|
+
const handleToggle2FA = async () => {
|
|
2700
|
+
if (is2FALoading) return;
|
|
2701
|
+
if (has2FA) {
|
|
2702
|
+
resetOtp();
|
|
2703
|
+
setShow2FADisableModal(true);
|
|
2704
|
+
} else {
|
|
2705
|
+
if (!onRequest2FASetup) return;
|
|
2706
|
+
setIsFetchingSetup(true);
|
|
2707
|
+
try {
|
|
2708
|
+
const data = await onRequest2FASetup();
|
|
2709
|
+
setTwoFaSecret(data.secret);
|
|
2710
|
+
setTwoFaQr(data.qrCodeUrl);
|
|
2711
|
+
resetOtp();
|
|
2712
|
+
setShow2FASetupModal(true);
|
|
2713
|
+
} catch (error) {
|
|
2714
|
+
import_react_hot_toast8.default.error("Failed to initialize 2FA setup");
|
|
2715
|
+
} finally {
|
|
2716
|
+
setIsFetchingSetup(false);
|
|
2717
|
+
}
|
|
2718
|
+
}
|
|
2719
|
+
};
|
|
2720
|
+
const handleTogglePasskey = () => {
|
|
2721
|
+
if (isPasskeyLoading) return;
|
|
2722
|
+
if (hasPasskey) {
|
|
2723
|
+
if (onDisablePasskey) onDisablePasskey();
|
|
2724
|
+
} else {
|
|
2725
|
+
setShowPasskeyModal(true);
|
|
2726
|
+
}
|
|
2727
|
+
};
|
|
2728
|
+
const submitEnable2FA = async (code) => {
|
|
2729
|
+
if (!onVerifyAndEnable2FA) return;
|
|
2730
|
+
setIsSubmitting(true);
|
|
2731
|
+
try {
|
|
2732
|
+
const res = await onVerifyAndEnable2FA(code);
|
|
2733
|
+
if (res.success) {
|
|
2734
|
+
import_react_hot_toast8.default.success("2FA Enabled Successfully");
|
|
2735
|
+
setShow2FASetupModal(false);
|
|
2736
|
+
} else {
|
|
2737
|
+
import_react_hot_toast8.default.error("Invalid verification code");
|
|
2738
|
+
}
|
|
2739
|
+
} catch (error) {
|
|
2740
|
+
import_react_hot_toast8.default.error("Verification failed");
|
|
2741
|
+
} finally {
|
|
2742
|
+
setIsSubmitting(false);
|
|
2743
|
+
}
|
|
2744
|
+
};
|
|
2745
|
+
const submitDisable2FA = async (code) => {
|
|
2746
|
+
if (!onVerifyAndDisable2FA) return;
|
|
2747
|
+
setIsSubmitting(true);
|
|
2748
|
+
try {
|
|
2749
|
+
const res = await onVerifyAndDisable2FA(code);
|
|
2750
|
+
if (res.success) {
|
|
2751
|
+
import_react_hot_toast8.default.success("2FA Disabled");
|
|
2752
|
+
setShow2FADisableModal(false);
|
|
2753
|
+
} else {
|
|
2754
|
+
import_react_hot_toast8.default.error("Invalid verification code");
|
|
2755
|
+
}
|
|
2756
|
+
} catch (error) {
|
|
2757
|
+
import_react_hot_toast8.default.error("Verification failed");
|
|
2758
|
+
} finally {
|
|
2759
|
+
setIsSubmitting(false);
|
|
2760
|
+
}
|
|
2761
|
+
};
|
|
2762
|
+
const submitEnablePasskey = async () => {
|
|
2763
|
+
if (!onEnablePasskey) return;
|
|
2764
|
+
setIsSubmitting(true);
|
|
2765
|
+
try {
|
|
2766
|
+
const res = await onEnablePasskey();
|
|
2767
|
+
if (res.success) {
|
|
2768
|
+
import_react_hot_toast8.default.success("Passkey Created Successfully");
|
|
2769
|
+
setShowPasskeyModal(false);
|
|
2770
|
+
}
|
|
2771
|
+
} catch (error) {
|
|
2772
|
+
import_react_hot_toast8.default.error("Passkey setup failed or was canceled");
|
|
2773
|
+
} finally {
|
|
2774
|
+
setIsSubmitting(false);
|
|
2775
|
+
}
|
|
2776
|
+
};
|
|
2777
|
+
return /* @__PURE__ */ import_react45.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 pb-12" }, /* @__PURE__ */ import_react45.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react45.default.createElement("div", { className: "mb-6 flex items-center px-1" }, /* @__PURE__ */ import_react45.default.createElement(
|
|
2778
|
+
"button",
|
|
2779
|
+
{
|
|
2780
|
+
onClick: onBack,
|
|
2781
|
+
className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] font-medium outline-none"
|
|
2782
|
+
},
|
|
2783
|
+
/* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.ArrowLeft01Icon, size: 16 }),
|
|
2784
|
+
" Back"
|
|
2785
|
+
)), /* @__PURE__ */ import_react45.default.createElement("div", { className: "w-full flex flex-col gap-4" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react45.default.createElement(
|
|
2786
|
+
MenuRow3,
|
|
2787
|
+
{
|
|
2788
|
+
icon: import_core_free_icons16.Shield02Icon,
|
|
2789
|
+
title: "Authenticator App",
|
|
2790
|
+
subtitle: "Secure your account with 2FA",
|
|
2791
|
+
onClick: handleToggle2FA,
|
|
2792
|
+
isToggle: true,
|
|
2793
|
+
toggleState: has2FA,
|
|
2794
|
+
toggleLoading: is2FALoading || isFetchingSetup
|
|
2795
|
+
}
|
|
2796
|
+
), /* @__PURE__ */ import_react45.default.createElement(
|
|
2797
|
+
MenuRow3,
|
|
2798
|
+
{
|
|
2799
|
+
icon: import_core_free_icons16.Key01Icon,
|
|
2800
|
+
title: "Passkeys",
|
|
2801
|
+
subtitle: "Sign in quickly with biometrics",
|
|
2802
|
+
onClick: handleTogglePasskey,
|
|
2803
|
+
isToggle: true,
|
|
2804
|
+
toggleState: hasPasskey,
|
|
2805
|
+
toggleLoading: isPasskeyLoading,
|
|
2806
|
+
isLast: true
|
|
2807
|
+
}
|
|
2808
|
+
))), 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(
|
|
2809
|
+
"button",
|
|
2810
|
+
{
|
|
2811
|
+
onClick: () => handleCopySecret(twoFaSecret),
|
|
2812
|
+
className: "text-neutral-400 hover:text-black transition-colors outline-none shrink-0 ml-2"
|
|
2813
|
+
},
|
|
2814
|
+
/* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.Copy01Icon, size: 16 })
|
|
2815
|
+
)))), /* @__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) => {
|
|
2816
|
+
e.preventDefault();
|
|
2817
|
+
submitEnable2FA(otp.join(""));
|
|
2818
|
+
} }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex justify-between gap-2", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ import_react45.default.createElement(
|
|
2819
|
+
"input",
|
|
2820
|
+
{
|
|
2821
|
+
key: index,
|
|
2822
|
+
ref: (el) => {
|
|
2823
|
+
inputRefs.current[index] = el;
|
|
2824
|
+
},
|
|
2825
|
+
type: "text",
|
|
2826
|
+
inputMode: "numeric",
|
|
2827
|
+
maxLength: 1,
|
|
2828
|
+
value: digit,
|
|
2829
|
+
onChange: (e) => handleOtpChange(index, e.target.value),
|
|
2830
|
+
onKeyDown: (e) => {
|
|
2831
|
+
if (e.key === "Backspace" && !otp[index] && index > 0) {
|
|
2832
|
+
inputRefs.current[index - 1]?.focus();
|
|
2833
|
+
}
|
|
2834
|
+
},
|
|
2835
|
+
className: "w-10 h-12 text-center text-lg bg-transparent border-b-2 border-neutral-100 text-black outline-none focus:border-black transition-all duration-300"
|
|
2836
|
+
}
|
|
2837
|
+
))), /* @__PURE__ */ import_react45.default.createElement(
|
|
2838
|
+
ThreeDActionButton,
|
|
2839
|
+
{
|
|
2840
|
+
type: "submit",
|
|
2841
|
+
disabled: otp.join("").length < 6,
|
|
2842
|
+
isLoading: isSubmitting,
|
|
2843
|
+
className: "w-full py-3.5"
|
|
2844
|
+
},
|
|
2845
|
+
"Verify & Enable"
|
|
2846
|
+
))))), 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 border-b border-neutral-50" }, /* @__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) => {
|
|
2847
|
+
e.preventDefault();
|
|
2848
|
+
submitDisable2FA(otp.join(""));
|
|
2849
|
+
} }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex justify-between gap-2", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ import_react45.default.createElement(
|
|
2850
|
+
"input",
|
|
2851
|
+
{
|
|
2852
|
+
key: index,
|
|
2853
|
+
ref: (el) => {
|
|
2854
|
+
inputRefs.current[index] = el;
|
|
2855
|
+
},
|
|
2856
|
+
type: "text",
|
|
2857
|
+
inputMode: "numeric",
|
|
2858
|
+
maxLength: 1,
|
|
2859
|
+
value: digit,
|
|
2860
|
+
onChange: (e) => handleOtpChange(index, e.target.value),
|
|
2861
|
+
onKeyDown: (e) => {
|
|
2862
|
+
if (e.key === "Backspace" && !otp[index] && index > 0) {
|
|
2863
|
+
inputRefs.current[index - 1]?.focus();
|
|
2864
|
+
}
|
|
2865
|
+
},
|
|
2866
|
+
className: "w-10 h-12 text-center text-lg bg-transparent border-b-2 border-neutral-100 text-black outline-none focus:border-black transition-all duration-300"
|
|
2867
|
+
}
|
|
2868
|
+
))), /* @__PURE__ */ import_react45.default.createElement(
|
|
2869
|
+
ThreeDActionButton,
|
|
2870
|
+
{
|
|
2871
|
+
type: "submit",
|
|
2872
|
+
disabled: otp.join("").length < 6,
|
|
2873
|
+
isLoading: isSubmitting,
|
|
2874
|
+
className: "w-full py-3.5"
|
|
2875
|
+
},
|
|
2876
|
+
"Verify & Disable"
|
|
2877
|
+
))))), 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("div", { className: "w-16 h-16 bg-neutral-100 rounded-full flex items-center justify-center mx-auto mb-4 text-black" }, /* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.Key01Icon, size: 28 })), /* @__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(
|
|
2878
|
+
ThreeDActionButton,
|
|
2879
|
+
{
|
|
2880
|
+
onClick: submitEnablePasskey,
|
|
2881
|
+
isLoading: isSubmitting,
|
|
2882
|
+
className: "w-full py-3.5"
|
|
2883
|
+
},
|
|
2884
|
+
"Create Passkey"
|
|
2885
|
+
)))));
|
|
2886
|
+
};
|
|
2887
|
+
var MenuRow3 = ({
|
|
2888
|
+
icon,
|
|
2889
|
+
title,
|
|
2890
|
+
subtitle,
|
|
2891
|
+
onClick,
|
|
2892
|
+
iconColor = "text-black",
|
|
2893
|
+
titleColor = "text-black",
|
|
2894
|
+
isLast = false,
|
|
2895
|
+
isToggle = false,
|
|
2896
|
+
toggleState = false,
|
|
2897
|
+
toggleLoading = false,
|
|
2898
|
+
disabled = false
|
|
2899
|
+
}) => /* @__PURE__ */ import_react45.default.createElement(
|
|
2900
|
+
"div",
|
|
2901
|
+
{
|
|
2902
|
+
onClick: disabled ? void 0 : onClick,
|
|
2903
|
+
className: `flex items-center p-4 transition-colors ${!isLast ? "border-b border-neutral-50" : ""} ${disabled ? "opacity-40 cursor-not-allowed" : "cursor-pointer hover:bg-neutral-50"}`
|
|
2904
|
+
},
|
|
2905
|
+
/* @__PURE__ */ import_react45.default.createElement("div", { className: "w-10 h-10 rounded-full border border-neutral-100 bg-neutral-50 flex items-center justify-center shrink-0 mr-4" }, /* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon, size: 18, className: iconColor })),
|
|
2906
|
+
/* @__PURE__ */ import_react45.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react45.default.createElement("p", { className: `text-[14px] font-medium truncate ${titleColor}` }, title), /* @__PURE__ */ import_react45.default.createElement("p", { className: "text-[12px] text-neutral-500 truncate" }, subtitle)),
|
|
2907
|
+
isToggle ? /* @__PURE__ */ import_react45.default.createElement("div", { className: `relative w-11 h-6 rounded-full transition-colors duration-300 ml-2 shrink-0 ${toggleState ? "bg-black" : "bg-neutral-200"} ${disabled ? "opacity-50" : ""}` }, /* @__PURE__ */ import_react45.default.createElement("div", { className: `absolute top-1 left-1 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300 flex items-center justify-center ${toggleState ? "translate-x-5" : "translate-x-0"}` }, toggleLoading && /* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.Loading03Icon, size: 10, className: "animate-spin text-black" }))) : /* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons16.ArrowRight01Icon, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
2908
|
+
);
|
|
2909
|
+
|
|
2910
|
+
// src/components/FeatureScroll.tsx
|
|
2911
|
+
var import_react47 = __toESM(require("react"));
|
|
2912
|
+
var import_image3 = __toESM(require("next/image"));
|
|
2913
|
+
var import_react48 = require("@hugeicons/react");
|
|
2914
|
+
var import_core_free_icons17 = require("@hugeicons/core-free-icons");
|
|
2631
2915
|
var FeatureCard = ({ feature, bgImage }) => {
|
|
2632
|
-
const [isBgLoading, setIsBgLoading] = (0,
|
|
2633
|
-
const [isFgLoading, setIsFgLoading] = (0,
|
|
2634
|
-
return /* @__PURE__ */
|
|
2916
|
+
const [isBgLoading, setIsBgLoading] = (0, import_react47.useState)(true);
|
|
2917
|
+
const [isFgLoading, setIsFgLoading] = (0, import_react47.useState)(!!feature.image);
|
|
2918
|
+
return /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex flex-col shrink-0 w-[90vw] sm:w-150 snap-center md:snap-start group cursor-grab active:cursor-grabbing" }, /* @__PURE__ */ import_react47.default.createElement("div", { className: "relative w-full aspect-16/10 bg-neutral-100 rounded-2xl overflow-hidden mb-6 flex items-center justify-center" }, /* @__PURE__ */ import_react47.default.createElement(
|
|
2635
2919
|
import_image3.default,
|
|
2636
2920
|
{
|
|
2637
2921
|
src: bgImage,
|
|
@@ -2644,7 +2928,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2644
2928
|
${isBgLoading ? "blur-xl scale-110" : "blur-0 scale-100"}
|
|
2645
2929
|
`
|
|
2646
2930
|
}
|
|
2647
|
-
), /* @__PURE__ */
|
|
2931
|
+
), /* @__PURE__ */ import_react47.default.createElement(
|
|
2648
2932
|
"div",
|
|
2649
2933
|
{
|
|
2650
2934
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.25] mix-blend-overlay",
|
|
@@ -2652,7 +2936,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2652
2936
|
backgroundImage: `url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")`
|
|
2653
2937
|
}
|
|
2654
2938
|
}
|
|
2655
|
-
), isFgLoading && feature.image && /* @__PURE__ */
|
|
2939
|
+
), isFgLoading && feature.image && /* @__PURE__ */ import_react47.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-50/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ import_react47.default.createElement(import_react48.HugeiconsIcon, { icon: import_core_free_icons17.Loading03Icon, size: 32, className: "animate-spin text-neutral-400" })), feature.image && /* @__PURE__ */ import_react47.default.createElement("div", { className: "absolute -bottom-6 -right-6 w-[85%] h-[85%] z-10 transition-transform duration-700 ease-out group-hover:-translate-x-2 group-hover:-translate-y-2" }, /* @__PURE__ */ import_react47.default.createElement(
|
|
2656
2940
|
import_image3.default,
|
|
2657
2941
|
{
|
|
2658
2942
|
src: feature.image,
|
|
@@ -2665,12 +2949,12 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2665
2949
|
${isFgLoading ? "opacity-0 blur-xl" : "opacity-100 blur-0"}
|
|
2666
2950
|
`
|
|
2667
2951
|
}
|
|
2668
|
-
))), /* @__PURE__ */
|
|
2952
|
+
))), /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ import_react47.default.createElement("h3", { className: " text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ import_react47.default.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 max-w-[90%]" }, feature.desc)));
|
|
2669
2953
|
};
|
|
2670
2954
|
var FeatureScroll = ({ tagline, headline, features }) => {
|
|
2671
|
-
const scrollRef = (0,
|
|
2672
|
-
const [canScrollLeft, setCanScrollLeft] = (0,
|
|
2673
|
-
const [canScrollRight, setCanScrollRight] = (0,
|
|
2955
|
+
const scrollRef = (0, import_react47.useRef)(null);
|
|
2956
|
+
const [canScrollLeft, setCanScrollLeft] = (0, import_react47.useState)(false);
|
|
2957
|
+
const [canScrollRight, setCanScrollRight] = (0, import_react47.useState)(true);
|
|
2674
2958
|
const checkScroll = () => {
|
|
2675
2959
|
if (scrollRef.current) {
|
|
2676
2960
|
const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;
|
|
@@ -2678,7 +2962,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2678
2962
|
setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 2);
|
|
2679
2963
|
}
|
|
2680
2964
|
};
|
|
2681
|
-
(0,
|
|
2965
|
+
(0, import_react47.useEffect)(() => {
|
|
2682
2966
|
checkScroll();
|
|
2683
2967
|
window.addEventListener("resize", checkScroll);
|
|
2684
2968
|
return () => window.removeEventListener("resize", checkScroll);
|
|
@@ -2694,72 +2978,72 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2694
2978
|
"https://retinalabs.company/assets/images/bg_6.avif",
|
|
2695
2979
|
"https://retinalabs.company/assets/images/bg_1.avif"
|
|
2696
2980
|
];
|
|
2697
|
-
return /* @__PURE__ */
|
|
2981
|
+
return /* @__PURE__ */ import_react47.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden" }, /* @__PURE__ */ import_react47.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ import_react47.default.createElement("div", { className: "relative z-10 text-left" }, /* @__PURE__ */ import_react47.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ import_react47.default.createElement("h2", { className: " text-3xl tracking-tight text-black leading-[1.05]" }, headline)), /* @__PURE__ */ import_react47.default.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ import_react47.default.createElement(
|
|
2698
2982
|
"button",
|
|
2699
2983
|
{
|
|
2700
2984
|
onClick: () => scroll("left"),
|
|
2701
2985
|
disabled: !canScrollLeft,
|
|
2702
2986
|
className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 disabled:hover:border-neutral-200 disabled:hover:text-neutral-500 disabled:cursor-not-allowed transition-all outline-none"
|
|
2703
2987
|
},
|
|
2704
|
-
/* @__PURE__ */
|
|
2705
|
-
), /* @__PURE__ */
|
|
2988
|
+
/* @__PURE__ */ import_react47.default.createElement(import_react48.HugeiconsIcon, { icon: import_core_free_icons17.ArrowLeft01Icon, size: 20 })
|
|
2989
|
+
), /* @__PURE__ */ import_react47.default.createElement(
|
|
2706
2990
|
"button",
|
|
2707
2991
|
{
|
|
2708
2992
|
onClick: () => scroll("right"),
|
|
2709
2993
|
disabled: !canScrollRight,
|
|
2710
2994
|
className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 disabled:hover:border-neutral-200 disabled:hover:text-neutral-500 disabled:cursor-not-allowed transition-all outline-none"
|
|
2711
2995
|
},
|
|
2712
|
-
/* @__PURE__ */
|
|
2713
|
-
))), /* @__PURE__ */
|
|
2996
|
+
/* @__PURE__ */ import_react47.default.createElement(import_react48.HugeiconsIcon, { icon: import_core_free_icons17.ArrowRight01Icon, size: 20 })
|
|
2997
|
+
))), /* @__PURE__ */ import_react47.default.createElement(
|
|
2714
2998
|
"div",
|
|
2715
2999
|
{
|
|
2716
3000
|
ref: scrollRef,
|
|
2717
3001
|
onScroll: checkScroll,
|
|
2718
3002
|
className: "flex gap-6 overflow-x-auto snap-x snap-mandatory [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] scrollbar-none pb-8 -mx-4 px-4 md:mx-0 md:px-0"
|
|
2719
3003
|
},
|
|
2720
|
-
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */
|
|
2721
|
-
), /* @__PURE__ */
|
|
3004
|
+
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */ import_react47.default.createElement(FeatureCard, { key: idx, feature, bgImage: bgImages[idx] }))
|
|
3005
|
+
), /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ import_react47.default.createElement(
|
|
2722
3006
|
"button",
|
|
2723
3007
|
{
|
|
2724
3008
|
onClick: () => scroll("left"),
|
|
2725
3009
|
disabled: !canScrollLeft,
|
|
2726
3010
|
className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 transition-all outline-none"
|
|
2727
3011
|
},
|
|
2728
|
-
/* @__PURE__ */
|
|
2729
|
-
), /* @__PURE__ */
|
|
3012
|
+
/* @__PURE__ */ import_react47.default.createElement(import_react48.HugeiconsIcon, { icon: import_core_free_icons17.ArrowLeft01Icon, size: 20 })
|
|
3013
|
+
), /* @__PURE__ */ import_react47.default.createElement(
|
|
2730
3014
|
"button",
|
|
2731
3015
|
{
|
|
2732
3016
|
onClick: () => scroll("right"),
|
|
2733
3017
|
disabled: !canScrollRight,
|
|
2734
3018
|
className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 transition-all outline-none"
|
|
2735
3019
|
},
|
|
2736
|
-
/* @__PURE__ */
|
|
3020
|
+
/* @__PURE__ */ import_react47.default.createElement(import_react48.HugeiconsIcon, { icon: import_core_free_icons17.ArrowRight01Icon, size: 20 })
|
|
2737
3021
|
))));
|
|
2738
3022
|
};
|
|
2739
3023
|
|
|
2740
3024
|
// src/components/PlatformFeatures.tsx
|
|
2741
|
-
var
|
|
2742
|
-
var
|
|
3025
|
+
var import_react49 = __toESM(require("react"));
|
|
3026
|
+
var import_react50 = require("@hugeicons/react");
|
|
2743
3027
|
var PlatformFeatures = ({
|
|
2744
3028
|
tagline,
|
|
2745
3029
|
headline,
|
|
2746
3030
|
description,
|
|
2747
3031
|
features
|
|
2748
3032
|
}) => {
|
|
2749
|
-
return /* @__PURE__ */
|
|
3033
|
+
return /* @__PURE__ */ import_react49.default.createElement("section", { className: "w-full flex justify-center mb-15 relative z-10" }, /* @__PURE__ */ import_react49.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react49.default.createElement("div", { className: "flex flex-col items-start mb-16 relative z-10" }, /* @__PURE__ */ import_react49.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ import_react49.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.05] mb-6" }, headline), /* @__PURE__ */ import_react49.default.createElement("p", { className: "text-[15px] leading-[1.8] text-neutral-600 max-w-2xl" }, description)), /* @__PURE__ */ import_react49.default.createElement("div", { className: "w-full h-px bg-neutral-100 mb-16", "aria-hidden": "true" }), /* @__PURE__ */ import_react49.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-x-8 gap-y-12" }, features.map((feature, idx) => /* @__PURE__ */ import_react49.default.createElement(
|
|
2750
3034
|
"div",
|
|
2751
3035
|
{
|
|
2752
3036
|
key: idx,
|
|
2753
3037
|
className: "flex flex-col group animate-in fade-in slide-in-from-bottom-4 duration-700 fill-mode-both",
|
|
2754
3038
|
style: { animationDelay: feature.delay || "0ms" }
|
|
2755
3039
|
},
|
|
2756
|
-
/* @__PURE__ */
|
|
2757
|
-
/* @__PURE__ */
|
|
3040
|
+
/* @__PURE__ */ import_react49.default.createElement("div", { className: "flex flex-row items-center gap-4 mb-4" }, /* @__PURE__ */ import_react49.default.createElement("div", { className: "w-14 h-14 shrink-0 rounded-xl border border-neutral-200 flex items-center justify-center text-neutral-600 transition-colors duration-300" }, /* @__PURE__ */ import_react49.default.createElement(import_react50.HugeiconsIcon, { icon: feature.icon, size: 24 })), /* @__PURE__ */ import_react49.default.createElement("div", { className: "flex flex-col justify-center" }, /* @__PURE__ */ import_react49.default.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400 mb-0.5" }, feature.label || "CAPABILITY"), /* @__PURE__ */ import_react49.default.createElement("h3", { className: "text-xl tracking-tight text-black" }, feature.title))),
|
|
3041
|
+
/* @__PURE__ */ import_react49.default.createElement("div", null, /* @__PURE__ */ import_react49.default.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 pr-4" }, feature.desc))
|
|
2758
3042
|
)))));
|
|
2759
3043
|
};
|
|
2760
3044
|
|
|
2761
3045
|
// src/components/ManagedDocument.tsx
|
|
2762
|
-
var
|
|
3046
|
+
var import_react51 = __toESM(require("react"));
|
|
2763
3047
|
var ManagedDocument = ({
|
|
2764
3048
|
tagline,
|
|
2765
3049
|
title,
|
|
@@ -2767,9 +3051,9 @@ var ManagedDocument = ({
|
|
|
2767
3051
|
contactText,
|
|
2768
3052
|
contactEmail
|
|
2769
3053
|
}) => {
|
|
2770
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
2771
|
-
const titleRef = (0,
|
|
2772
|
-
(0,
|
|
3054
|
+
const [isAnimating, setIsAnimating] = (0, import_react51.useState)(false);
|
|
3055
|
+
const titleRef = (0, import_react51.useRef)(null);
|
|
3056
|
+
(0, import_react51.useEffect)(() => {
|
|
2773
3057
|
const observer = new IntersectionObserver(
|
|
2774
3058
|
([entry]) => {
|
|
2775
3059
|
if (entry.isIntersecting) {
|
|
@@ -2789,7 +3073,7 @@ var ManagedDocument = ({
|
|
|
2789
3073
|
}, []);
|
|
2790
3074
|
return (
|
|
2791
3075
|
// Outer layout wrapper (takes up available space, adds padding)
|
|
2792
|
-
/* @__PURE__ */
|
|
3076
|
+
/* @__PURE__ */ import_react51.default.createElement("div", { className: "grow pt-4 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react51.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react51.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react51.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react51.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react51.default.createElement(
|
|
2793
3077
|
"h1",
|
|
2794
3078
|
{
|
|
2795
3079
|
ref: titleRef,
|
|
@@ -2797,7 +3081,7 @@ var ManagedDocument = ({
|
|
|
2797
3081
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2798
3082
|
},
|
|
2799
3083
|
title
|
|
2800
|
-
)), sections.map((section, index) => /* @__PURE__ */
|
|
3084
|
+
)), sections.map((section, index) => /* @__PURE__ */ import_react51.default.createElement("div", { key: index, className: "relative px-5 md:px-12 py-8 md:py-10" }, section.heading && /* @__PURE__ */ import_react51.default.createElement("p", { className: " text-[11px] tracking-[0.2em] text-black mb-4 text-left " }, section.heading), section.paragraphs && section.paragraphs.length > 0 && /* @__PURE__ */ import_react51.default.createElement("div", { className: "text-[14px] leading-[1.8] text-neutral-700 space-y-4 text-left " }, section.paragraphs.map((text, pIndex) => /* @__PURE__ */ import_react51.default.createElement("p", { key: pIndex }, text))), section.quote && /* @__PURE__ */ import_react51.default.createElement("div", { className: `border-neutral-100 border rounded-xl p-6 ${section.paragraphs && section.paragraphs.length > 0 ? "mt-6" : ""}` }, /* @__PURE__ */ import_react51.default.createElement("p", { className: "text-neutral-900 text-[14px] md:text-[14px] leading-relaxed" }, '"', section.quote, '"')))), (contactText || contactEmail) && /* @__PURE__ */ import_react51.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ import_react51.default.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ import_react51.default.createElement(
|
|
2801
3085
|
"a",
|
|
2802
3086
|
{
|
|
2803
3087
|
href: `mailto:${contactEmail}`,
|
|
@@ -2809,18 +3093,18 @@ var ManagedDocument = ({
|
|
|
2809
3093
|
};
|
|
2810
3094
|
|
|
2811
3095
|
// src/components/ManagedContactBlock.tsx
|
|
2812
|
-
var
|
|
2813
|
-
var
|
|
3096
|
+
var import_react52 = __toESM(require("react"));
|
|
3097
|
+
var import_react53 = require("@hugeicons/react");
|
|
2814
3098
|
var SecureEmail = ({ user, domain, className }) => {
|
|
2815
|
-
const [isMounted, setIsMounted] = (0,
|
|
2816
|
-
(0,
|
|
3099
|
+
const [isMounted, setIsMounted] = (0, import_react52.useState)(false);
|
|
3100
|
+
(0, import_react52.useEffect)(() => {
|
|
2817
3101
|
setIsMounted(true);
|
|
2818
3102
|
}, []);
|
|
2819
3103
|
if (!isMounted) {
|
|
2820
|
-
return /* @__PURE__ */
|
|
3104
|
+
return /* @__PURE__ */ import_react52.default.createElement("span", { className, style: { opacity: 0 } }, "Loading");
|
|
2821
3105
|
}
|
|
2822
3106
|
const email = `${user}@${domain}`;
|
|
2823
|
-
return /* @__PURE__ */
|
|
3107
|
+
return /* @__PURE__ */ import_react52.default.createElement("a", { href: `mailto:${email}`, className }, email);
|
|
2824
3108
|
};
|
|
2825
3109
|
var ManagedContactBlock = ({
|
|
2826
3110
|
tagline,
|
|
@@ -2829,7 +3113,7 @@ var ManagedContactBlock = ({
|
|
|
2829
3113
|
emails,
|
|
2830
3114
|
socials
|
|
2831
3115
|
}) => {
|
|
2832
|
-
return /* @__PURE__ */
|
|
3116
|
+
return /* @__PURE__ */ import_react52.default.createElement("div", { className: "grow pt-4 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react52.default.createElement(
|
|
2833
3117
|
"div",
|
|
2834
3118
|
{
|
|
2835
3119
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2838,21 +3122,21 @@ var ManagedContactBlock = ({
|
|
|
2838
3122
|
backgroundRepeat: "repeat"
|
|
2839
3123
|
}
|
|
2840
3124
|
}
|
|
2841
|
-
), /* @__PURE__ */
|
|
3125
|
+
), /* @__PURE__ */ import_react52.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "relative px-8 md:px-12 py-10" }, tagline && /* @__PURE__ */ import_react52.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react52.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ import_react52.default.createElement("div", { className: "relative px-8 md:px-12 py-8 pb-14" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-wrap gap-12 lg:gap-16 w-full" }, company && /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Contact Details"), /* @__PURE__ */ import_react52.default.createElement("div", { className: "space-y-3 text-[13px] text-neutral-600 leading-[1.8]" }, company.name && /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-black" }, company.name), company.lines && company.lines.map((line, idx) => /* @__PURE__ */ import_react52.default.createElement("p", { key: idx }, line)), company.phone && /* @__PURE__ */ import_react52.default.createElement("p", { className: "pt-2" }, /* @__PURE__ */ import_react52.default.createElement(
|
|
2842
3126
|
"a",
|
|
2843
3127
|
{
|
|
2844
3128
|
href: `tel:${company.phone.replace(/\s+/g, "")}`,
|
|
2845
3129
|
className: "transition-colors hover:text-black"
|
|
2846
3130
|
},
|
|
2847
3131
|
company.phone
|
|
2848
|
-
)))), emails && emails.length > 0 && /* @__PURE__ */
|
|
3132
|
+
)))), emails && emails.length > 0 && /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Email Directory"), /* @__PURE__ */ import_react52.default.createElement("div", { className: "space-y-6 text-[13px]" }, emails.map((email, idx) => /* @__PURE__ */ import_react52.default.createElement("div", { key: idx }, /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-[11px] tracking-[0.2em] mb-1.5 text-neutral-500 " }, email.label), /* @__PURE__ */ import_react52.default.createElement(
|
|
2849
3133
|
SecureEmail,
|
|
2850
3134
|
{
|
|
2851
3135
|
user: email.user,
|
|
2852
3136
|
domain: email.domain,
|
|
2853
3137
|
className: "text-neutral-600 transition-colors hover:text-black"
|
|
2854
3138
|
}
|
|
2855
|
-
))))), socials && socials.length > 0 && /* @__PURE__ */
|
|
3139
|
+
))))), socials && socials.length > 0 && /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Find Us Online"), /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-col space-y-5 pt-1" }, socials.map((social, idx) => /* @__PURE__ */ import_react52.default.createElement(
|
|
2856
3140
|
"a",
|
|
2857
3141
|
{
|
|
2858
3142
|
key: idx,
|
|
@@ -2861,27 +3145,27 @@ var ManagedContactBlock = ({
|
|
|
2861
3145
|
rel: "noopener noreferrer",
|
|
2862
3146
|
className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black"
|
|
2863
3147
|
},
|
|
2864
|
-
/* @__PURE__ */
|
|
2865
|
-
/* @__PURE__ */
|
|
3148
|
+
/* @__PURE__ */ import_react52.default.createElement(import_react53.HugeiconsIcon, { icon: social.icon, size: 18 }),
|
|
3149
|
+
/* @__PURE__ */ import_react52.default.createElement("span", { className: "text-[13px]" }, social.label)
|
|
2866
3150
|
)))))))));
|
|
2867
3151
|
};
|
|
2868
3152
|
|
|
2869
3153
|
// src/components/ManagedPricingBlock.tsx
|
|
2870
|
-
var
|
|
3154
|
+
var import_react54 = __toESM(require("react"));
|
|
2871
3155
|
var import_link7 = __toESM(require("next/link"));
|
|
2872
3156
|
var import_image4 = __toESM(require("next/image"));
|
|
2873
|
-
var CheckIcon = ({ className = "" }) => /* @__PURE__ */
|
|
2874
|
-
var CrossIcon = ({ className = "" }) => /* @__PURE__ */
|
|
3157
|
+
var CheckIcon = ({ className = "" }) => /* @__PURE__ */ import_react54.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react54.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ import_react54.default.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
3158
|
+
var CrossIcon = ({ className = "" }) => /* @__PURE__ */ import_react54.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react54.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ import_react54.default.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
2875
3159
|
var ManagedPricingBlock = ({
|
|
2876
3160
|
tagline,
|
|
2877
3161
|
title,
|
|
2878
3162
|
plans = [],
|
|
2879
3163
|
tabs
|
|
2880
3164
|
}) => {
|
|
2881
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
2882
|
-
const [activeTabIndex, setActiveTabIndex] = (0,
|
|
2883
|
-
const titleRef = (0,
|
|
2884
|
-
(0,
|
|
3165
|
+
const [isAnimating, setIsAnimating] = (0, import_react54.useState)(false);
|
|
3166
|
+
const [activeTabIndex, setActiveTabIndex] = (0, import_react54.useState)(0);
|
|
3167
|
+
const titleRef = (0, import_react54.useRef)(null);
|
|
3168
|
+
(0, import_react54.useEffect)(() => {
|
|
2885
3169
|
const observer = new IntersectionObserver(
|
|
2886
3170
|
([entry]) => {
|
|
2887
3171
|
if (entry.isIntersecting) {
|
|
@@ -2901,7 +3185,7 @@ var ManagedPricingBlock = ({
|
|
|
2901
3185
|
}, []);
|
|
2902
3186
|
const hasTabs = tabs && tabs.length > 0;
|
|
2903
3187
|
const currentPlans = hasTabs ? tabs[activeTabIndex].plans : plans;
|
|
2904
|
-
return /* @__PURE__ */
|
|
3188
|
+
return /* @__PURE__ */ import_react54.default.createElement("div", { className: "grow pt-10 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col items-center" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "w-full flex flex-col items-center text-center mb-10 sm:mb-12" }, tagline && /* @__PURE__ */ import_react54.default.createElement("span", { className: "text-[9px] tracking-[0.4em] text-black block " }, tagline), /* @__PURE__ */ import_react54.default.createElement(
|
|
2905
3189
|
"h1",
|
|
2906
3190
|
{
|
|
2907
3191
|
ref: titleRef,
|
|
@@ -2909,9 +3193,9 @@ var ManagedPricingBlock = ({
|
|
|
2909
3193
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2910
3194
|
},
|
|
2911
3195
|
title
|
|
2912
|
-
)), hasTabs && /* @__PURE__ */
|
|
3196
|
+
)), hasTabs && /* @__PURE__ */ import_react54.default.createElement("div", { className: "flex items-center justify-center mb-8 sm:mb-10 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "flex items-center bg-white rounded-full p-1 sm:p-1.5 max-w-full overflow-x-auto custom-scrollbar" }, tabs.map((tab, idx) => {
|
|
2913
3197
|
const isActive = activeTabIndex === idx;
|
|
2914
|
-
return /* @__PURE__ */
|
|
3198
|
+
return /* @__PURE__ */ import_react54.default.createElement(
|
|
2915
3199
|
"button",
|
|
2916
3200
|
{
|
|
2917
3201
|
key: idx,
|
|
@@ -2920,19 +3204,19 @@ var ManagedPricingBlock = ({
|
|
|
2920
3204
|
},
|
|
2921
3205
|
tab.label
|
|
2922
3206
|
);
|
|
2923
|
-
}))), /* @__PURE__ */
|
|
3207
|
+
}))), /* @__PURE__ */ import_react54.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-5 w-full max-w-3xl animate-in slide-in-from-bottom-2 fade-in duration-500" }, currentPlans.map((plan, planIdx) => /* @__PURE__ */ import_react54.default.createElement(
|
|
2924
3208
|
"div",
|
|
2925
3209
|
{
|
|
2926
3210
|
key: `${activeTabIndex}-${planIdx}`,
|
|
2927
3211
|
className: `bg-white rounded-3xl p-6 flex flex-col relative overflow-hidden transition-all duration-300 ${plan.isPremium ? "" : ""}`
|
|
2928
3212
|
},
|
|
2929
|
-
/* @__PURE__ */
|
|
3213
|
+
/* @__PURE__ */ import_react54.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ import_react54.default.createElement("span", { className: "text-black text-base block mb-1" }, plan.name), /* @__PURE__ */ import_react54.default.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ import_react54.default.createElement("h3", { className: "text-3xl font-light text-black" }, plan.price), plan.period && /* @__PURE__ */ import_react54.default.createElement("span", { className: "text-xs text-neutral-500" }, plan.period)), /* @__PURE__ */ import_react54.default.createElement("p", { className: "text-xs text-neutral-500 mt-2 min-h-8" }, plan.description), plan.showApps && plan.appLogos && plan.appLogos.length > 0 && /* @__PURE__ */ import_react54.default.createElement("div", { className: "flex items-center gap-2 mt-4" }, plan.appLogos.map((logo, logoIdx) => /* @__PURE__ */ import_react54.default.createElement(
|
|
2930
3214
|
"div",
|
|
2931
3215
|
{
|
|
2932
3216
|
key: logoIdx,
|
|
2933
3217
|
className: "relative w-5 h-5 overflow-hidden flex items-center justify-center shrink-0"
|
|
2934
3218
|
},
|
|
2935
|
-
/* @__PURE__ */
|
|
3219
|
+
/* @__PURE__ */ import_react54.default.createElement(
|
|
2936
3220
|
import_image4.default,
|
|
2937
3221
|
{
|
|
2938
3222
|
src: logo.src,
|
|
@@ -2943,7 +3227,7 @@ var ManagedPricingBlock = ({
|
|
|
2943
3227
|
}
|
|
2944
3228
|
)
|
|
2945
3229
|
)))),
|
|
2946
|
-
plan.isPremium ? /* @__PURE__ */
|
|
3230
|
+
plan.isPremium ? /* @__PURE__ */ import_react54.default.createElement(ThreeDButton, { href: plan.ctaHref, className: "mb-6 w-full" }, plan.ctaText) : /* @__PURE__ */ import_react54.default.createElement(
|
|
2947
3231
|
import_link7.default,
|
|
2948
3232
|
{
|
|
2949
3233
|
href: plan.ctaHref,
|
|
@@ -2951,20 +3235,20 @@ var ManagedPricingBlock = ({
|
|
|
2951
3235
|
},
|
|
2952
3236
|
plan.ctaText
|
|
2953
3237
|
),
|
|
2954
|
-
/* @__PURE__ */
|
|
3238
|
+
/* @__PURE__ */ import_react54.default.createElement("div", { className: "flex flex-col gap-3" }, plan.features.map((feature, featureIdx) => {
|
|
2955
3239
|
const isAvailable = feature.value !== false;
|
|
2956
3240
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
2957
|
-
return /* @__PURE__ */
|
|
3241
|
+
return /* @__PURE__ */ import_react54.default.createElement("div", { key: featureIdx, className: "flex items-center gap-2.5" }, isAvailable ? /* @__PURE__ */ import_react54.default.createElement(CheckIcon, null) : /* @__PURE__ */ import_react54.default.createElement(CrossIcon, null), /* @__PURE__ */ import_react54.default.createElement("span", { className: `text-xs truncate ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ import_react54.default.createElement("span", { className: "text-neutral-500 ml-1" }, "(", valueText, ")")));
|
|
2958
3242
|
}))
|
|
2959
3243
|
)))));
|
|
2960
3244
|
};
|
|
2961
3245
|
|
|
2962
3246
|
// src/components/ManagedBoardBlock.tsx
|
|
2963
|
-
var
|
|
3247
|
+
var import_react55 = __toESM(require("react"));
|
|
2964
3248
|
var import_image5 = __toESM(require("next/image"));
|
|
2965
|
-
var
|
|
2966
|
-
var
|
|
2967
|
-
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */
|
|
3249
|
+
var import_react56 = require("@hugeicons/react");
|
|
3250
|
+
var import_core_free_icons18 = require("@hugeicons/core-free-icons");
|
|
3251
|
+
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ import_react55.default.createElement(
|
|
2968
3252
|
"a",
|
|
2969
3253
|
{
|
|
2970
3254
|
href,
|
|
@@ -2972,7 +3256,7 @@ var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ import_r
|
|
|
2972
3256
|
rel: "noopener noreferrer",
|
|
2973
3257
|
className: "text-neutral-400 hover:text-black transition-colors"
|
|
2974
3258
|
},
|
|
2975
|
-
/* @__PURE__ */
|
|
3259
|
+
/* @__PURE__ */ import_react55.default.createElement(import_react56.HugeiconsIcon, { icon, size: 16 })
|
|
2976
3260
|
);
|
|
2977
3261
|
var ManagedBoardBlock = ({
|
|
2978
3262
|
tagline,
|
|
@@ -2981,7 +3265,7 @@ var ManagedBoardBlock = ({
|
|
|
2981
3265
|
contactText,
|
|
2982
3266
|
contactEmail
|
|
2983
3267
|
}) => {
|
|
2984
|
-
return /* @__PURE__ */
|
|
3268
|
+
return /* @__PURE__ */ import_react55.default.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "relative w-full mx-auto overflow-hidden max-w-7xl" }, /* @__PURE__ */ import_react55.default.createElement(
|
|
2985
3269
|
"div",
|
|
2986
3270
|
{
|
|
2987
3271
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2990,7 +3274,7 @@ var ManagedBoardBlock = ({
|
|
|
2990
3274
|
backgroundRepeat: "repeat"
|
|
2991
3275
|
}
|
|
2992
3276
|
}
|
|
2993
|
-
), /* @__PURE__ */
|
|
3277
|
+
), /* @__PURE__ */ import_react55.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react55.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react55.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ import_react55.default.createElement("div", { className: "relative px-5 md:px-12 py-4 md:py-8" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-5 md:gap-8" }, members.map((member, idx) => /* @__PURE__ */ import_react55.default.createElement("div", { key: idx, className: "relative p-6 md:p-8 rounded-2xl bg-white flex flex-col transition-all group" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex items-start space-x-4 md:space-x-5 mb-5 md:mb-6" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "relative w-14 h-14 md:w-16 md:h-16 shrink-0 bg-white overflow-hidden rounded-xl" }, /* @__PURE__ */ import_react55.default.createElement(
|
|
2994
3278
|
import_image5.default,
|
|
2995
3279
|
{
|
|
2996
3280
|
src: member.imageSrc,
|
|
@@ -2999,44 +3283,44 @@ var ManagedBoardBlock = ({
|
|
|
2999
3283
|
sizes: "(max-width: 768px) 56px, 64px",
|
|
3000
3284
|
className: "object-cover grayscale opacity-100 transition-opacity"
|
|
3001
3285
|
}
|
|
3002
|
-
)), /* @__PURE__ */
|
|
3286
|
+
)), /* @__PURE__ */ import_react55.default.createElement("div", { className: "pt-1" }, /* @__PURE__ */ import_react55.default.createElement("h3", { className: " text-[14px] md:text-[15px] text-black tracking-tight" }, member.name), /* @__PURE__ */ import_react55.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 mt-1.5 " }, member.title))), /* @__PURE__ */ import_react55.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 text-left grow mb-8" }, member.bio), /* @__PURE__ */ import_react55.default.createElement("div", { className: "space-y-6 mt-auto" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ import_react55.default.createElement(ThreeDButton, { href: member.website }, "Visit Website")), /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex space-x-4 pt-5" }, member.twitterHandle && member.twitterHandle.length > 0 && /* @__PURE__ */ import_react55.default.createElement(
|
|
3003
3287
|
MemberSocialLink,
|
|
3004
3288
|
{
|
|
3005
3289
|
href: `https://x.com/${member.twitterHandle}`,
|
|
3006
|
-
icon:
|
|
3290
|
+
icon: import_core_free_icons18.TwitterIcon,
|
|
3007
3291
|
label: "X",
|
|
3008
3292
|
name: member.name
|
|
3009
3293
|
}
|
|
3010
|
-
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */
|
|
3294
|
+
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */ import_react55.default.createElement(
|
|
3011
3295
|
MemberSocialLink,
|
|
3012
3296
|
{
|
|
3013
3297
|
href: member.linkedinHandle,
|
|
3014
|
-
icon:
|
|
3298
|
+
icon: import_core_free_icons18.LinkedinIcon,
|
|
3015
3299
|
label: "LinkedIn",
|
|
3016
3300
|
name: member.name
|
|
3017
3301
|
}
|
|
3018
|
-
))))))), (contactText || contactEmail) && /* @__PURE__ */
|
|
3302
|
+
))))))), (contactText || contactEmail) && /* @__PURE__ */ import_react55.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ import_react55.default.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ import_react55.default.createElement("a", { href: `mailto:${contactEmail}`, className: "text-black decoration-black decoration-2 underline-offset-4 ml-1 transition-colors" }, contactEmail))))));
|
|
3019
3303
|
};
|
|
3020
3304
|
|
|
3021
3305
|
// src/components/ManagedNotFoundBlock.tsx
|
|
3022
|
-
var
|
|
3306
|
+
var import_react57 = __toESM(require("react"));
|
|
3023
3307
|
var ManagedNotFoundBlock = ({
|
|
3024
3308
|
title = "404 - Page Not Found",
|
|
3025
3309
|
description = "The page you are looking for does not exist or has been moved."
|
|
3026
3310
|
}) => {
|
|
3027
|
-
return /* @__PURE__ */
|
|
3311
|
+
return /* @__PURE__ */ import_react57.default.createElement("main", { className: "min-h-screen flex items-center justify-center relative z-20 bg-transparent" }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "p-6 w-full max-w-md mx-auto text-center" }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "mb-8 flex justify-center" }, /* @__PURE__ */ import_react57.default.createElement(
|
|
3028
3312
|
"svg",
|
|
3029
3313
|
{
|
|
3030
3314
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3031
3315
|
viewBox: "0 0 24 24",
|
|
3032
3316
|
className: "w-12 h-12 fill-neutral-100"
|
|
3033
3317
|
},
|
|
3034
|
-
/* @__PURE__ */
|
|
3035
|
-
)), /* @__PURE__ */
|
|
3318
|
+
/* @__PURE__ */ import_react57.default.createElement("path", { fillRule: "evenodd", d: "M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z", clipRule: "evenodd" })
|
|
3319
|
+
)), /* @__PURE__ */ import_react57.default.createElement("h1", { className: " text-xl md:text-3xl text-black tracking-tight mb-4" }, title), /* @__PURE__ */ import_react57.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-12" }, description)));
|
|
3036
3320
|
};
|
|
3037
3321
|
|
|
3038
3322
|
// src/components/ManagedNewsletterSplitBlock.tsx
|
|
3039
|
-
var
|
|
3323
|
+
var import_react58 = __toESM(require("react"));
|
|
3040
3324
|
var import_image6 = __toESM(require("next/image"));
|
|
3041
3325
|
var ManagedNewsletterSplitBlock = ({
|
|
3042
3326
|
tagline,
|
|
@@ -3050,7 +3334,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3050
3334
|
ctaHref = "/contact",
|
|
3051
3335
|
children
|
|
3052
3336
|
}) => {
|
|
3053
|
-
return /* @__PURE__ */
|
|
3337
|
+
return /* @__PURE__ */ import_react58.default.createElement("div", { className: "grow flex flex-col md:flex-row relative w-full pt-32 md:pt-0" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "hidden md:block md:w-1/2 relative min-h-screen overflow-hidden" }, /* @__PURE__ */ import_react58.default.createElement(
|
|
3054
3338
|
import_image6.default,
|
|
3055
3339
|
{
|
|
3056
3340
|
src: imageSrc,
|
|
@@ -3060,7 +3344,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3060
3344
|
className: "object-cover object-top grayscale opacity-60",
|
|
3061
3345
|
quality: 100
|
|
3062
3346
|
}
|
|
3063
|
-
), /* @__PURE__ */
|
|
3347
|
+
), /* @__PURE__ */ import_react58.default.createElement(
|
|
3064
3348
|
"div",
|
|
3065
3349
|
{
|
|
3066
3350
|
className: "absolute inset-0 z-10 pointer-events-none",
|
|
@@ -3068,7 +3352,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3068
3352
|
background: "linear-gradient(to right, rgba(255,255,255,0) 30%, #ffffff 100%)"
|
|
3069
3353
|
}
|
|
3070
3354
|
}
|
|
3071
|
-
), /* @__PURE__ */
|
|
3355
|
+
), /* @__PURE__ */ import_react58.default.createElement(
|
|
3072
3356
|
"div",
|
|
3073
3357
|
{
|
|
3074
3358
|
className: "absolute inset-x-0 bottom-0 h-40 z-10 pointer-events-none",
|
|
@@ -3076,7 +3360,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3076
3360
|
background: "linear-gradient(to bottom, rgba(255,255,255,0) 0%, #ffffff 100%)"
|
|
3077
3361
|
}
|
|
3078
3362
|
}
|
|
3079
|
-
)), /* @__PURE__ */
|
|
3363
|
+
)), /* @__PURE__ */ import_react58.default.createElement("div", { className: "w-full md:w-1/2 flex mt-22 flex-col items-center justify-center p-4 md:p-12 relative z-20" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "relative w-full max-w-lg p-8 md:p-12 text-center md:text-left transition-all duration-700 ease-out" }, /* @__PURE__ */ import_react58.default.createElement(
|
|
3080
3364
|
"div",
|
|
3081
3365
|
{
|
|
3082
3366
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3085,7 +3369,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3085
3369
|
backgroundRepeat: "repeat"
|
|
3086
3370
|
}
|
|
3087
3371
|
}
|
|
3088
|
-
), /* @__PURE__ */
|
|
3372
|
+
), /* @__PURE__ */ import_react58.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "mb-10 border-b border-neutral-100 pb-8 text-center md:text-left" }, tagline && /* @__PURE__ */ import_react58.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 " }, tagline), /* @__PURE__ */ import_react58.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight mb-4" }, title), subtitle && /* @__PURE__ */ import_react58.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, subtitle)), /* @__PURE__ */ import_react58.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-10 text-center md:text-left" }, description), children && /* @__PURE__ */ import_react58.default.createElement("div", { className: "mb-8 text-left" }, children), /* @__PURE__ */ import_react58.default.createElement("div", { className: "text-center md:text-left mt-10 space-y-6" }, dividerText && /* @__PURE__ */ import_react58.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "grow h-px bg-neutral-100" }), /* @__PURE__ */ import_react58.default.createElement("span", { className: "shrink mx-4 text-[11px] tracking-[0.2em] text-neutral-400 " }, dividerText), /* @__PURE__ */ import_react58.default.createElement("div", { className: "grow h-px bg-neutral-100" })), ctaText && ctaHref && /* @__PURE__ */ import_react58.default.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ import_react58.default.createElement(
|
|
3089
3373
|
ThreeDButton,
|
|
3090
3374
|
{
|
|
3091
3375
|
href: ctaHref,
|
|
@@ -3096,14 +3380,14 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3096
3380
|
};
|
|
3097
3381
|
|
|
3098
3382
|
// src/components/PortfolioHero.tsx
|
|
3099
|
-
var
|
|
3383
|
+
var import_react59 = __toESM(require("react"));
|
|
3100
3384
|
var import_link8 = __toESM(require("next/link"));
|
|
3101
3385
|
var import_image7 = __toESM(require("next/image"));
|
|
3102
|
-
var
|
|
3103
|
-
var
|
|
3386
|
+
var import_react60 = require("@hugeicons/react");
|
|
3387
|
+
var import_core_free_icons19 = require("@hugeicons/core-free-icons");
|
|
3104
3388
|
var useScrollAnimation = () => {
|
|
3105
|
-
const elementRef = (0,
|
|
3106
|
-
(0,
|
|
3389
|
+
const elementRef = (0, import_react59.useRef)(null);
|
|
3390
|
+
(0, import_react59.useEffect)(() => {
|
|
3107
3391
|
const el = elementRef.current;
|
|
3108
3392
|
if (!el) return;
|
|
3109
3393
|
const observer = new IntersectionObserver(
|
|
@@ -3139,13 +3423,13 @@ var PortfolioHero = ({
|
|
|
3139
3423
|
secondaryCtaHref
|
|
3140
3424
|
}) => {
|
|
3141
3425
|
const heroContentRef = useScrollAnimation();
|
|
3142
|
-
return /* @__PURE__ */
|
|
3426
|
+
return /* @__PURE__ */ import_react59.default.createElement("section", { className: "pt-8 pb-16 px-6 md:px-12 flex flex-col relative overflow-hidden z-10 w-full" }, /* @__PURE__ */ import_react59.default.createElement(
|
|
3143
3427
|
"div",
|
|
3144
3428
|
{
|
|
3145
3429
|
ref: heroContentRef,
|
|
3146
3430
|
className: "w-full opacity-0 translate-y-5 transition-all duration-1000 ease-out relative z-10"
|
|
3147
3431
|
},
|
|
3148
|
-
/* @__PURE__ */
|
|
3432
|
+
/* @__PURE__ */ import_react59.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-5 sm:gap-8 mb-10" }, /* @__PURE__ */ import_react59.default.createElement("div", { className: "relative w-20 h-20 sm:w-32 sm:h-32 rounded-full overflow-hidden border border-neutral-100 shrink-0 shadow-sm" }, /* @__PURE__ */ import_react59.default.createElement(
|
|
3149
3433
|
import_image7.default,
|
|
3150
3434
|
{
|
|
3151
3435
|
src: imageSrc,
|
|
@@ -3156,7 +3440,7 @@ var PortfolioHero = ({
|
|
|
3156
3440
|
sizes: "(max-width: 640px) 80px, 128px",
|
|
3157
3441
|
quality: 100
|
|
3158
3442
|
}
|
|
3159
|
-
)), /* @__PURE__ */
|
|
3443
|
+
)), /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex flex-col text-left" }, /* @__PURE__ */ import_react59.default.createElement("h1", { className: " text-3xl sm:text-5xl lg:text-6xl tracking-tight text-black leading-none mb-3" }, name), socialLabel && /* @__PURE__ */ import_react59.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, socialLabel), socialLinkText && socialLinkHref && /* @__PURE__ */ import_react59.default.createElement(
|
|
3160
3444
|
"a",
|
|
3161
3445
|
{
|
|
3162
3446
|
href: socialLinkHref,
|
|
@@ -3166,31 +3450,31 @@ var PortfolioHero = ({
|
|
|
3166
3450
|
},
|
|
3167
3451
|
socialLinkText
|
|
3168
3452
|
))),
|
|
3169
|
-
/* @__PURE__ */
|
|
3170
|
-
/* @__PURE__ */
|
|
3453
|
+
/* @__PURE__ */ import_react59.default.createElement("p", { className: "text-[13px] leading-[1.8] max-w-4xl mb-12 text-neutral-600" }, bio),
|
|
3454
|
+
/* @__PURE__ */ import_react59.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 w-full sm:w-auto" }, primaryCtaText && primaryCtaHref && /* @__PURE__ */ import_react59.default.createElement("div", { className: "w-full sm:w-auto *:w-full" }, /* @__PURE__ */ import_react59.default.createElement(
|
|
3171
3455
|
ThreeDButton,
|
|
3172
3456
|
{
|
|
3173
3457
|
href: primaryCtaHref,
|
|
3174
3458
|
className: "py-3 tracking-widest text-[11px]"
|
|
3175
3459
|
},
|
|
3176
3460
|
primaryCtaText
|
|
3177
|
-
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
3461
|
+
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react59.default.createElement(
|
|
3178
3462
|
import_link8.default,
|
|
3179
3463
|
{
|
|
3180
3464
|
href: secondaryCtaHref,
|
|
3181
3465
|
className: "w-full sm:w-auto inline-flex items-center justify-center gap-3 text-[11px] tracking-[0.2em] rounded-full px-8 py-3.5 bg-neutral-200 transition-colors text-black hover:bg-neutral-200 outline-none"
|
|
3182
3466
|
},
|
|
3183
3467
|
secondaryCtaText,
|
|
3184
|
-
/* @__PURE__ */
|
|
3468
|
+
/* @__PURE__ */ import_react59.default.createElement(import_react60.HugeiconsIcon, { icon: import_core_free_icons19.ArrowRight01Icon, size: 16 })
|
|
3185
3469
|
))
|
|
3186
3470
|
));
|
|
3187
3471
|
};
|
|
3188
3472
|
|
|
3189
3473
|
// src/components/GifFeatureCard.tsx
|
|
3190
|
-
var
|
|
3474
|
+
var import_react61 = __toESM(require("react"));
|
|
3191
3475
|
var import_image8 = __toESM(require("next/image"));
|
|
3192
|
-
var
|
|
3193
|
-
var
|
|
3476
|
+
var import_react62 = require("@hugeicons/react");
|
|
3477
|
+
var import_core_free_icons20 = require("@hugeicons/core-free-icons");
|
|
3194
3478
|
var GifFeatureCard = ({
|
|
3195
3479
|
gifSrc,
|
|
3196
3480
|
title,
|
|
@@ -3198,20 +3482,20 @@ var GifFeatureCard = ({
|
|
|
3198
3482
|
alt = "Feature animation",
|
|
3199
3483
|
className = "aspect-video"
|
|
3200
3484
|
}) => {
|
|
3201
|
-
const [isLoading, setIsLoading] = (0,
|
|
3202
|
-
return /* @__PURE__ */
|
|
3203
|
-
|
|
3485
|
+
const [isLoading, setIsLoading] = (0, import_react61.useState)(true);
|
|
3486
|
+
return /* @__PURE__ */ import_react61.default.createElement("div", { className: `relative w-full bg-black overflow-hidden shadow-2xl ${className}` }, isLoading && /* @__PURE__ */ import_react61.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-black" }, /* @__PURE__ */ import_react61.default.createElement(
|
|
3487
|
+
import_react62.HugeiconsIcon,
|
|
3204
3488
|
{
|
|
3205
|
-
icon:
|
|
3489
|
+
icon: import_core_free_icons20.Loading03Icon,
|
|
3206
3490
|
size: 32,
|
|
3207
3491
|
className: "animate-spin text-white"
|
|
3208
3492
|
}
|
|
3209
|
-
)), /* @__PURE__ */
|
|
3493
|
+
)), /* @__PURE__ */ import_react61.default.createElement(
|
|
3210
3494
|
"div",
|
|
3211
3495
|
{
|
|
3212
3496
|
className: `absolute inset-0 z-0 transition-all duration-1000 ease-out ${isLoading ? "scale-105 blur-2xl opacity-0" : "scale-100 blur-0 opacity-100"}`
|
|
3213
3497
|
},
|
|
3214
|
-
/* @__PURE__ */
|
|
3498
|
+
/* @__PURE__ */ import_react61.default.createElement(
|
|
3215
3499
|
import_image8.default,
|
|
3216
3500
|
{
|
|
3217
3501
|
src: gifSrc,
|
|
@@ -3222,16 +3506,16 @@ var GifFeatureCard = ({
|
|
|
3222
3506
|
className: "object-cover object-center pointer-events-none"
|
|
3223
3507
|
}
|
|
3224
3508
|
)
|
|
3225
|
-
), /* @__PURE__ */
|
|
3509
|
+
), /* @__PURE__ */ import_react61.default.createElement(
|
|
3226
3510
|
"div",
|
|
3227
3511
|
{
|
|
3228
3512
|
className: "absolute inset-x-0 bottom-0 h-1/2 sm:h-2/3 bg-linear-to-t from-black/95 via-black/40 to-transparent z-10 pointer-events-none transition-opacity duration-700"
|
|
3229
3513
|
}
|
|
3230
|
-
), /* @__PURE__ */
|
|
3514
|
+
), /* @__PURE__ */ import_react61.default.createElement("div", { className: "absolute inset-x-0 bottom-0 p-6 sm:p-8 z-30 flex flex-col justify-end text-left pointer-events-none" }, title && /* @__PURE__ */ import_react61.default.createElement("h3", { className: " text-xl sm:text-2xl md:text-3xl text-white tracking-tight mb-2 sm:mb-3 drop-shadow-md" }, title), subtitle && /* @__PURE__ */ import_react61.default.createElement("p", { className: "text-[13px] sm:text-[15px] leading-relaxed text-neutral-300 max-w-2xl drop-shadow-sm" }, subtitle)));
|
|
3231
3515
|
};
|
|
3232
3516
|
|
|
3233
3517
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
3234
|
-
var
|
|
3518
|
+
var import_react63 = __toESM(require("react"));
|
|
3235
3519
|
var import_image9 = __toESM(require("next/image"));
|
|
3236
3520
|
var MedicalFeatureStatsBlock = ({
|
|
3237
3521
|
bottomHeadline,
|
|
@@ -3240,9 +3524,9 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3240
3524
|
trustText,
|
|
3241
3525
|
stats
|
|
3242
3526
|
}) => {
|
|
3243
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
3244
|
-
const titleRef = (0,
|
|
3245
|
-
(0,
|
|
3527
|
+
const [isAnimating, setIsAnimating] = (0, import_react63.useState)(false);
|
|
3528
|
+
const titleRef = (0, import_react63.useRef)(null);
|
|
3529
|
+
(0, import_react63.useEffect)(() => {
|
|
3246
3530
|
const observer = new IntersectionObserver(
|
|
3247
3531
|
([entry]) => {
|
|
3248
3532
|
if (entry.isIntersecting) {
|
|
@@ -3260,7 +3544,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3260
3544
|
}
|
|
3261
3545
|
return () => observer.disconnect();
|
|
3262
3546
|
}, []);
|
|
3263
|
-
return /* @__PURE__ */
|
|
3547
|
+
return /* @__PURE__ */ import_react63.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ import_react63.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react63.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ import_react63.default.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ import_react63.default.createElement(
|
|
3264
3548
|
"h2",
|
|
3265
3549
|
{
|
|
3266
3550
|
ref: titleRef,
|
|
@@ -3268,7 +3552,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3268
3552
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
3269
3553
|
},
|
|
3270
3554
|
bottomHeadline
|
|
3271
|
-
), /* @__PURE__ */
|
|
3555
|
+
), /* @__PURE__ */ import_react63.default.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ import_react63.default.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ import_react63.default.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ import_react63.default.createElement("div", { key: i, className: "relative w-12 h-12 rounded-full border-[3px] border-white overflow-hidden bg-neutral-100 z-1 hover:z-10 transition-all" }, /* @__PURE__ */ import_react63.default.createElement(
|
|
3272
3556
|
import_image9.default,
|
|
3273
3557
|
{
|
|
3274
3558
|
src,
|
|
@@ -3277,17 +3561,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3277
3561
|
sizes: "48px",
|
|
3278
3562
|
className: "object-cover"
|
|
3279
3563
|
}
|
|
3280
|
-
)))), /* @__PURE__ */
|
|
3564
|
+
)))), /* @__PURE__ */ import_react63.default.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ import_react63.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ import_react63.default.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ import_react63.default.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ import_react63.default.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ import_react63.default.createElement("h1", { className: "text-6xl gradient-text md:text-[80px] tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
|
|
3281
3565
|
};
|
|
3282
3566
|
|
|
3283
3567
|
// src/components/ConsultantShowcase.tsx
|
|
3284
|
-
var
|
|
3568
|
+
var import_react64 = __toESM(require("react"));
|
|
3285
3569
|
var import_image10 = __toESM(require("next/image"));
|
|
3286
|
-
var
|
|
3287
|
-
var
|
|
3570
|
+
var import_react65 = require("@hugeicons/react");
|
|
3571
|
+
var import_core_free_icons21 = require("@hugeicons/core-free-icons");
|
|
3288
3572
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
3289
|
-
const [isLoading, setIsLoading] = (0,
|
|
3290
|
-
return /* @__PURE__ */
|
|
3573
|
+
const [isLoading, setIsLoading] = (0, import_react64.useState)(true);
|
|
3574
|
+
return /* @__PURE__ */ import_react64.default.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ import_react64.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-800/50 backdrop-blur-md transition-opacity duration-300" }, /* @__PURE__ */ import_react64.default.createElement(import_react65.HugeiconsIcon, { icon: import_core_free_icons21.Loading03Icon, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ import_react64.default.createElement(
|
|
3291
3575
|
import_image10.default,
|
|
3292
3576
|
{
|
|
3293
3577
|
src,
|
|
@@ -3306,9 +3590,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
3306
3590
|
var ConsultantShowcase = ({
|
|
3307
3591
|
profiles
|
|
3308
3592
|
}) => {
|
|
3309
|
-
const [currentIndex, setCurrentIndex] = (0,
|
|
3310
|
-
const [touchStart, setTouchStart] = (0,
|
|
3311
|
-
const [touchEnd, setTouchEnd] = (0,
|
|
3593
|
+
const [currentIndex, setCurrentIndex] = (0, import_react64.useState)(0);
|
|
3594
|
+
const [touchStart, setTouchStart] = (0, import_react64.useState)(null);
|
|
3595
|
+
const [touchEnd, setTouchEnd] = (0, import_react64.useState)(null);
|
|
3312
3596
|
const nextSlide = () => {
|
|
3313
3597
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
3314
3598
|
};
|
|
@@ -3333,7 +3617,7 @@ var ConsultantShowcase = ({
|
|
|
3333
3617
|
}
|
|
3334
3618
|
};
|
|
3335
3619
|
if (!profiles || profiles.length === 0) return null;
|
|
3336
|
-
return /* @__PURE__ */
|
|
3620
|
+
return /* @__PURE__ */ import_react64.default.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ import_react64.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react64.default.createElement(
|
|
3337
3621
|
"div",
|
|
3338
3622
|
{
|
|
3339
3623
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -3343,13 +3627,13 @@ var ConsultantShowcase = ({
|
|
|
3343
3627
|
},
|
|
3344
3628
|
profiles.map((profile, idx) => {
|
|
3345
3629
|
const isActive = idx === currentIndex;
|
|
3346
|
-
return /* @__PURE__ */
|
|
3630
|
+
return /* @__PURE__ */ import_react64.default.createElement(
|
|
3347
3631
|
"div",
|
|
3348
3632
|
{
|
|
3349
3633
|
key: profile.id,
|
|
3350
3634
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
3351
3635
|
},
|
|
3352
|
-
/* @__PURE__ */
|
|
3636
|
+
/* @__PURE__ */ import_react64.default.createElement(
|
|
3353
3637
|
ImageWithLoader,
|
|
3354
3638
|
{
|
|
3355
3639
|
src: profile.imageSrc,
|
|
@@ -3357,14 +3641,14 @@ var ConsultantShowcase = ({
|
|
|
3357
3641
|
priority: idx === 0
|
|
3358
3642
|
}
|
|
3359
3643
|
),
|
|
3360
|
-
/* @__PURE__ */
|
|
3361
|
-
/* @__PURE__ */
|
|
3362
|
-
/* @__PURE__ */
|
|
3644
|
+
/* @__PURE__ */ import_react64.default.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
3645
|
+
/* @__PURE__ */ import_react64.default.createElement("div", { className: "absolute top-0 left-0 w-full h-[60%] bg-linear-to-b from-black/80 via-black/30 to-transparent z-20 pointer-events-none" }),
|
|
3646
|
+
/* @__PURE__ */ import_react64.default.createElement("div", { className: `absolute top-8 left-8 md:top-12 md:left-12 z-30 text-white max-w-lg transition-transform duration-700 ease-out ${isActive ? "translate-y-0" : "-translate-y-4"}` }, /* @__PURE__ */ import_react64.default.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ import_react64.default.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[15px] text-white/80 tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ import_react64.default.createElement("p", { className: "text-[15px] text-white/80 tracking-wide mt-1" }, profile.description)))
|
|
3363
3647
|
);
|
|
3364
3648
|
}),
|
|
3365
|
-
/* @__PURE__ */
|
|
3366
|
-
/* @__PURE__ */
|
|
3367
|
-
/* @__PURE__ */
|
|
3649
|
+
/* @__PURE__ */ import_react64.default.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide }),
|
|
3650
|
+
/* @__PURE__ */ import_react64.default.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide }),
|
|
3651
|
+
/* @__PURE__ */ import_react64.default.createElement("div", { className: "absolute bottom-6 md:bottom-8 left-0 w-full px-4 z-30 flex justify-center items-center gap-2" }, profiles.map((_, idx) => /* @__PURE__ */ import_react64.default.createElement(
|
|
3368
3652
|
"button",
|
|
3369
3653
|
{
|
|
3370
3654
|
key: idx,
|
|
@@ -3376,13 +3660,13 @@ var ConsultantShowcase = ({
|
|
|
3376
3660
|
};
|
|
3377
3661
|
|
|
3378
3662
|
// src/components/ContentGridBlock.tsx
|
|
3379
|
-
var
|
|
3663
|
+
var import_react66 = __toESM(require("react"));
|
|
3380
3664
|
var import_image11 = __toESM(require("next/image"));
|
|
3381
|
-
var
|
|
3382
|
-
var
|
|
3665
|
+
var import_react67 = require("@hugeicons/react");
|
|
3666
|
+
var import_core_free_icons22 = require("@hugeicons/core-free-icons");
|
|
3383
3667
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
3384
|
-
const [isLoading, setIsLoading] = (0,
|
|
3385
|
-
return /* @__PURE__ */
|
|
3668
|
+
const [isLoading, setIsLoading] = (0, import_react66.useState)(true);
|
|
3669
|
+
return /* @__PURE__ */ import_react66.default.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ import_react66.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-100/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ import_react66.default.createElement(import_react67.HugeiconsIcon, { icon: import_core_free_icons22.Loading03Icon, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ import_react66.default.createElement(
|
|
3386
3670
|
import_image11.default,
|
|
3387
3671
|
{
|
|
3388
3672
|
src,
|
|
@@ -3404,30 +3688,30 @@ var ContentGridBlock = ({
|
|
|
3404
3688
|
middleBottomCard,
|
|
3405
3689
|
rightCards
|
|
3406
3690
|
}) => {
|
|
3407
|
-
return /* @__PURE__ */
|
|
3691
|
+
return /* @__PURE__ */ import_react66.default.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react66.default.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ import_react66.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ import_react66.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ import_react66.default.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ import_react66.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ import_react66.default.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ import_react66.default.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react66.default.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ import_react66.default.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ import_react66.default.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ import_react66.default.createElement("div", null, /* @__PURE__ */ import_react66.default.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ import_react66.default.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ import_react66.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react66.default.createElement(import_image11.default, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ import_react66.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react66.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ import_react66.default.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ import_react66.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ import_react66.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react66.default.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ import_react66.default.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ import_react66.default.createElement(import_image11.default, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ import_react66.default.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ import_react66.default.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ import_react66.default.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-100 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ import_react66.default.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ import_react66.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react66.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ import_react66.default.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ import_react66.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react66.default.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ import_react66.default.createElement("div", null, /* @__PURE__ */ import_react66.default.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ import_react66.default.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ import_react66.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react66.default.createElement(import_image11.default, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ import_react66.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react66.default.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ import_react66.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ import_react66.default.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ import_react66.default.createElement("div", { key: idx, className: "relative w-full h-80 text-white rounded-3xl overflow-hidden group" }, /* @__PURE__ */ import_react66.default.createElement(
|
|
3408
3692
|
ImageWithLoader2,
|
|
3409
3693
|
{
|
|
3410
3694
|
src: card.bgImageSrc,
|
|
3411
3695
|
alt: card.title,
|
|
3412
3696
|
className: "absolute inset-0 w-full h-full"
|
|
3413
3697
|
}
|
|
3414
|
-
), /* @__PURE__ */
|
|
3698
|
+
), /* @__PURE__ */ import_react66.default.createElement("div", { className: "absolute inset-0 z-20 pointer-events-none" }), /* @__PURE__ */ import_react66.default.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ import_react66.default.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ import_react66.default.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ import_react66.default.createElement("div", { className: "pt-3" }, /* @__PURE__ */ import_react66.default.createElement("h4", { className: "text-[15px] text-white tracking-wide" }, card.title), /* @__PURE__ */ import_react66.default.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
|
|
3415
3699
|
};
|
|
3416
3700
|
|
|
3417
3701
|
// src/components/ManagedProjectsBlock.tsx
|
|
3418
|
-
var
|
|
3702
|
+
var import_react68 = __toESM(require("react"));
|
|
3419
3703
|
var import_link9 = __toESM(require("next/link"));
|
|
3420
3704
|
var GridSection = ({
|
|
3421
3705
|
children,
|
|
3422
3706
|
isLast = false,
|
|
3423
3707
|
className = "py-8 md:py-10"
|
|
3424
|
-
}) => /* @__PURE__ */
|
|
3708
|
+
}) => /* @__PURE__ */ import_react68.default.createElement("div", { className: `relative px-5 md:px-12 ${className} ${!isLast ? "" : ""}` }, children);
|
|
3425
3709
|
var ManagedProjectsBlock = ({
|
|
3426
3710
|
tagline,
|
|
3427
3711
|
title,
|
|
3428
3712
|
projects
|
|
3429
3713
|
}) => {
|
|
3430
|
-
return /* @__PURE__ */
|
|
3714
|
+
return /* @__PURE__ */ import_react68.default.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react68.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-5xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react68.default.createElement(
|
|
3431
3715
|
"div",
|
|
3432
3716
|
{
|
|
3433
3717
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3436,10 +3720,10 @@ var ManagedProjectsBlock = ({
|
|
|
3436
3720
|
backgroundRepeat: "repeat"
|
|
3437
3721
|
}
|
|
3438
3722
|
}
|
|
3439
|
-
), /* @__PURE__ */
|
|
3723
|
+
), /* @__PURE__ */ import_react68.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react68.default.createElement(GridSection, null, tagline && /* @__PURE__ */ import_react68.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react68.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), projects.map((project, index) => {
|
|
3440
3724
|
const isLast = index === projects.length - 1;
|
|
3441
|
-
const projectContent = /* @__PURE__ */
|
|
3442
|
-
return /* @__PURE__ */
|
|
3725
|
+
const projectContent = /* @__PURE__ */ import_react68.default.createElement("div", { className: "group block w-full" }, /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex flex-col md:flex-row md:items-center justify-between gap-3 md:gap-4 mb-4 md:mb-5" }, /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center gap-3 md:gap-4" }, /* @__PURE__ */ import_react68.default.createElement("h2", { className: " text-[16px] text-black transition-all flex items-center gap-2" }, project.title, /* @__PURE__ */ import_react68.default.createElement("span", { className: "text-[11px] opacity-0 -translate-x-2 group-hover:opacity-100 group-hover:translate-x-0 transition-all duration-300" }, project.isExternal ? "\u2197" : "\u2192")), /* @__PURE__ */ import_react68.default.createElement("span", { className: `text-[9px] px-2.5 py-1 rounded-full tracking-[0.15em] transition-colors ${project.status.toLowerCase() === "production" ? "bg-black text-white" : "bg-neutral-100 text-neutral-500 group-hover:bg-neutral-100 group-hover:text-black"}` }, project.status)), /* @__PURE__ */ import_react68.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 shrink-0 " }, project.date)), /* @__PURE__ */ import_react68.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 max-w-4xl text-left transition-colors group-hover:text-black" }, project.description));
|
|
3726
|
+
return /* @__PURE__ */ import_react68.default.createElement(GridSection, { key: project.id || index, isLast, className: isLast ? "py-8 md:py-10 pb-12 md:pb-14" : "py-8 md:py-10" }, project.isExternal ? /* @__PURE__ */ import_react68.default.createElement("a", { href: project.link, target: "_blank", rel: "noopener noreferrer", className: "block outline-none" }, projectContent) : /* @__PURE__ */ import_react68.default.createElement(import_link9.default, { href: project.link, className: "block outline-none" }, projectContent));
|
|
3443
3727
|
}))));
|
|
3444
3728
|
};
|
|
3445
3729
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -3477,6 +3761,7 @@ var ManagedProjectsBlock = ({
|
|
|
3477
3761
|
UniversalOrganizationPage,
|
|
3478
3762
|
UniversalProfilePage,
|
|
3479
3763
|
UniversalProfileSettings,
|
|
3764
|
+
UniversalSecurityPage,
|
|
3480
3765
|
UniversalSidebar,
|
|
3481
3766
|
UniversalTransactionPage,
|
|
3482
3767
|
UniversalWalletPage,
|