@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.mjs
CHANGED
|
@@ -933,7 +933,8 @@ import {
|
|
|
933
933
|
CircleLock02Icon as CircleLock02Icon2,
|
|
934
934
|
CancelCircleIcon,
|
|
935
935
|
Loading03Icon as Loading03Icon2,
|
|
936
|
-
LockKeyIcon
|
|
936
|
+
LockKeyIcon,
|
|
937
|
+
ArrowLeft01Icon
|
|
937
938
|
} from "@hugeicons/core-free-icons";
|
|
938
939
|
var UniversalProfileSettings = ({
|
|
939
940
|
initialFirstName,
|
|
@@ -946,8 +947,12 @@ var UniversalProfileSettings = ({
|
|
|
946
947
|
hasPin = false,
|
|
947
948
|
isPinLoading = false,
|
|
948
949
|
onSavePin,
|
|
949
|
-
onSaveProfile
|
|
950
|
+
onSaveProfile,
|
|
951
|
+
onBack
|
|
950
952
|
}) => {
|
|
953
|
+
const onBackHandler = onBack ?? (() => {
|
|
954
|
+
if (typeof window !== "undefined") window.history.back();
|
|
955
|
+
});
|
|
951
956
|
const [firstName, setFirstName] = useState7(initialFirstName);
|
|
952
957
|
const [lastName, setLastName] = useState7(initialLastName);
|
|
953
958
|
const [isSubmitting, setIsSubmitting] = useState7(false);
|
|
@@ -1022,7 +1027,15 @@ var UniversalProfileSettings = ({
|
|
|
1022
1027
|
};
|
|
1023
1028
|
const hasChanges = firstName !== initialFirstName || lastName !== initialLastName;
|
|
1024
1029
|
const isSaveDisabled = isSubmitting || isReadOnly || !hasChanges || firstName.trim().length === 0 || lastName.trim().length === 0;
|
|
1025
|
-
return /* @__PURE__ */ React12.createElement("div",
|
|
1030
|
+
return /* @__PURE__ */ React12.createElement("div", null, /* @__PURE__ */ React12.createElement("div", { className: "mb-3 flex max-w-3xl w-full mx-auto items-center px-1" }, /* @__PURE__ */ React12.createElement(
|
|
1031
|
+
"button",
|
|
1032
|
+
{
|
|
1033
|
+
onClick: onBackHandler,
|
|
1034
|
+
className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] font-medium outline-none"
|
|
1035
|
+
},
|
|
1036
|
+
/* @__PURE__ */ React12.createElement(HugeiconsIcon6, { icon: ArrowLeft01Icon, size: 16 }),
|
|
1037
|
+
" Back"
|
|
1038
|
+
)), /* @__PURE__ */ React12.createElement("div", { className: "flex flex-col rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300" }, /* @__PURE__ */ React12.createElement(ManagedToaster, null), /* @__PURE__ */ React12.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ React12.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React12.createElement("h1", { className: "text-black text-xl mb-1 truncate tracking-tight" }, "Personal Settings"), /* @__PURE__ */ React12.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your personal account profile.")), isReadOnly && /* @__PURE__ */ React12.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-100 text-neutral-400 rounded-full shrink-0" }, /* @__PURE__ */ React12.createElement(HugeiconsIcon6, { icon: CircleLock02Icon2, size: 18, className: "text-current" }))), bannerProps && /* @__PURE__ */ React12.createElement(Banner, { ...bannerProps }), /* @__PURE__ */ React12.createElement("div", { className: "w-full max-w-5xl" }, /* @__PURE__ */ React12.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ React12.createElement("div", { className: "flex flex-col sm:flex-row gap-6" }, /* @__PURE__ */ React12.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React12.createElement(
|
|
1026
1039
|
TextInput,
|
|
1027
1040
|
{
|
|
1028
1041
|
label: "First Name",
|
|
@@ -1120,7 +1133,7 @@ var UniversalProfileSettings = ({
|
|
|
1120
1133
|
className: "w-full py-3"
|
|
1121
1134
|
},
|
|
1122
1135
|
hasPin ? "Update PIN" : "Set PIN"
|
|
1123
|
-
)))))));
|
|
1136
|
+
))))))));
|
|
1124
1137
|
};
|
|
1125
1138
|
|
|
1126
1139
|
// src/components/UniversalErrorView.tsx
|
|
@@ -1216,7 +1229,7 @@ import React15, { useState as useState8, useEffect as useEffect6, useRef as useR
|
|
|
1216
1229
|
import { HugeiconsIcon as HugeiconsIcon9 } from "@hugeicons/react";
|
|
1217
1230
|
import toast4 from "react-hot-toast";
|
|
1218
1231
|
import {
|
|
1219
|
-
ArrowLeft01Icon,
|
|
1232
|
+
ArrowLeft01Icon as ArrowLeft01Icon2,
|
|
1220
1233
|
ArrowRight01Icon,
|
|
1221
1234
|
Loading03Icon as Loading03Icon4,
|
|
1222
1235
|
ArrowDownRight01Icon,
|
|
@@ -1363,7 +1376,7 @@ var UniversalTransactionPage = ({
|
|
|
1363
1376
|
disabled: currentPage <= 1 || isListLoading,
|
|
1364
1377
|
className: "p-2 bg-white border border-neutral-200 rounded-full text-black hover:bg-neutral-50 disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none"
|
|
1365
1378
|
},
|
|
1366
|
-
/* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon:
|
|
1379
|
+
/* @__PURE__ */ React15.createElement(HugeiconsIcon9, { icon: ArrowLeft01Icon2, size: 14 })
|
|
1367
1380
|
), /* @__PURE__ */ React15.createElement(
|
|
1368
1381
|
"button",
|
|
1369
1382
|
{
|
|
@@ -2601,15 +2614,294 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
2601
2614
|
})))));
|
|
2602
2615
|
};
|
|
2603
2616
|
|
|
2617
|
+
// src/components/UniversalSecurityPage.tsx
|
|
2618
|
+
import React27, { useState as useState18, useRef as useRef6 } from "react";
|
|
2619
|
+
import toast7 from "react-hot-toast";
|
|
2620
|
+
import { HugeiconsIcon as HugeiconsIcon19 } from "@hugeicons/react";
|
|
2621
|
+
import {
|
|
2622
|
+
CancelCircleIcon as CancelCircleIcon6,
|
|
2623
|
+
Loading03Icon as Loading03Icon10,
|
|
2624
|
+
Copy01Icon as Copy01Icon3,
|
|
2625
|
+
ArrowLeft01Icon as ArrowLeft01Icon3,
|
|
2626
|
+
Shield02Icon,
|
|
2627
|
+
Key01Icon,
|
|
2628
|
+
ArrowRight01Icon as ArrowRight01Icon4
|
|
2629
|
+
} from "@hugeicons/core-free-icons";
|
|
2630
|
+
var UniversalSecurityPage = ({
|
|
2631
|
+
has2FA,
|
|
2632
|
+
hasPasskey,
|
|
2633
|
+
userEmail = "your account",
|
|
2634
|
+
is2FALoading = false,
|
|
2635
|
+
isPasskeyLoading = false,
|
|
2636
|
+
onBack,
|
|
2637
|
+
onRequest2FASetup,
|
|
2638
|
+
onVerifyAndEnable2FA,
|
|
2639
|
+
onVerifyAndDisable2FA,
|
|
2640
|
+
onEnablePasskey,
|
|
2641
|
+
onDisablePasskey
|
|
2642
|
+
}) => {
|
|
2643
|
+
const [show2FASetupModal, setShow2FASetupModal] = useState18(false);
|
|
2644
|
+
const [show2FADisableModal, setShow2FADisableModal] = useState18(false);
|
|
2645
|
+
const [showPasskeyModal, setShowPasskeyModal] = useState18(false);
|
|
2646
|
+
const [twoFaSecret, setTwoFaSecret] = useState18("");
|
|
2647
|
+
const [twoFaQr, setTwoFaQr] = useState18("");
|
|
2648
|
+
const [isFetchingSetup, setIsFetchingSetup] = useState18(false);
|
|
2649
|
+
const [otp, setOtp] = useState18(Array(6).fill(""));
|
|
2650
|
+
const [isSubmitting, setIsSubmitting] = useState18(false);
|
|
2651
|
+
const inputRefs = useRef6([]);
|
|
2652
|
+
const resetOtp = () => {
|
|
2653
|
+
setOtp(Array(6).fill(""));
|
|
2654
|
+
setIsSubmitting(false);
|
|
2655
|
+
};
|
|
2656
|
+
const handleOtpChange = (index, value) => {
|
|
2657
|
+
const sanitizedValue = value.replace(/\D/g, "").slice(-1);
|
|
2658
|
+
const newOtp = [...otp];
|
|
2659
|
+
newOtp[index] = sanitizedValue;
|
|
2660
|
+
setOtp(newOtp);
|
|
2661
|
+
if (sanitizedValue && index < 5) {
|
|
2662
|
+
inputRefs.current[index + 1]?.focus();
|
|
2663
|
+
}
|
|
2664
|
+
};
|
|
2665
|
+
const handlePaste = (e) => {
|
|
2666
|
+
e.preventDefault();
|
|
2667
|
+
const pastedData = e.clipboardData.getData("text").replace(/\D/g, "").slice(0, 6);
|
|
2668
|
+
if (!pastedData) return;
|
|
2669
|
+
const newOtp = [...otp];
|
|
2670
|
+
for (let i = 0; i < pastedData.length; i++) {
|
|
2671
|
+
newOtp[i] = pastedData[i];
|
|
2672
|
+
}
|
|
2673
|
+
setOtp(newOtp);
|
|
2674
|
+
const focusIndex = Math.min(pastedData.length, 5);
|
|
2675
|
+
inputRefs.current[focusIndex]?.focus();
|
|
2676
|
+
};
|
|
2677
|
+
const handleCopySecret = async (secret) => {
|
|
2678
|
+
try {
|
|
2679
|
+
await navigator.clipboard.writeText(secret);
|
|
2680
|
+
toast7.success("Secret copied to clipboard");
|
|
2681
|
+
} catch {
|
|
2682
|
+
toast7.error("Failed to copy");
|
|
2683
|
+
}
|
|
2684
|
+
};
|
|
2685
|
+
const handleToggle2FA = async () => {
|
|
2686
|
+
if (is2FALoading) return;
|
|
2687
|
+
if (has2FA) {
|
|
2688
|
+
resetOtp();
|
|
2689
|
+
setShow2FADisableModal(true);
|
|
2690
|
+
} else {
|
|
2691
|
+
if (!onRequest2FASetup) return;
|
|
2692
|
+
setIsFetchingSetup(true);
|
|
2693
|
+
try {
|
|
2694
|
+
const data = await onRequest2FASetup();
|
|
2695
|
+
setTwoFaSecret(data.secret);
|
|
2696
|
+
setTwoFaQr(data.qrCodeUrl);
|
|
2697
|
+
resetOtp();
|
|
2698
|
+
setShow2FASetupModal(true);
|
|
2699
|
+
} catch (error) {
|
|
2700
|
+
toast7.error("Failed to initialize 2FA setup");
|
|
2701
|
+
} finally {
|
|
2702
|
+
setIsFetchingSetup(false);
|
|
2703
|
+
}
|
|
2704
|
+
}
|
|
2705
|
+
};
|
|
2706
|
+
const handleTogglePasskey = () => {
|
|
2707
|
+
if (isPasskeyLoading) return;
|
|
2708
|
+
if (hasPasskey) {
|
|
2709
|
+
if (onDisablePasskey) onDisablePasskey();
|
|
2710
|
+
} else {
|
|
2711
|
+
setShowPasskeyModal(true);
|
|
2712
|
+
}
|
|
2713
|
+
};
|
|
2714
|
+
const submitEnable2FA = async (code) => {
|
|
2715
|
+
if (!onVerifyAndEnable2FA) return;
|
|
2716
|
+
setIsSubmitting(true);
|
|
2717
|
+
try {
|
|
2718
|
+
const res = await onVerifyAndEnable2FA(code);
|
|
2719
|
+
if (res.success) {
|
|
2720
|
+
toast7.success("2FA Enabled Successfully");
|
|
2721
|
+
setShow2FASetupModal(false);
|
|
2722
|
+
} else {
|
|
2723
|
+
toast7.error("Invalid verification code");
|
|
2724
|
+
}
|
|
2725
|
+
} catch (error) {
|
|
2726
|
+
toast7.error("Verification failed");
|
|
2727
|
+
} finally {
|
|
2728
|
+
setIsSubmitting(false);
|
|
2729
|
+
}
|
|
2730
|
+
};
|
|
2731
|
+
const submitDisable2FA = async (code) => {
|
|
2732
|
+
if (!onVerifyAndDisable2FA) return;
|
|
2733
|
+
setIsSubmitting(true);
|
|
2734
|
+
try {
|
|
2735
|
+
const res = await onVerifyAndDisable2FA(code);
|
|
2736
|
+
if (res.success) {
|
|
2737
|
+
toast7.success("2FA Disabled");
|
|
2738
|
+
setShow2FADisableModal(false);
|
|
2739
|
+
} else {
|
|
2740
|
+
toast7.error("Invalid verification code");
|
|
2741
|
+
}
|
|
2742
|
+
} catch (error) {
|
|
2743
|
+
toast7.error("Verification failed");
|
|
2744
|
+
} finally {
|
|
2745
|
+
setIsSubmitting(false);
|
|
2746
|
+
}
|
|
2747
|
+
};
|
|
2748
|
+
const submitEnablePasskey = async () => {
|
|
2749
|
+
if (!onEnablePasskey) return;
|
|
2750
|
+
setIsSubmitting(true);
|
|
2751
|
+
try {
|
|
2752
|
+
const res = await onEnablePasskey();
|
|
2753
|
+
if (res.success) {
|
|
2754
|
+
toast7.success("Passkey Created Successfully");
|
|
2755
|
+
setShowPasskeyModal(false);
|
|
2756
|
+
}
|
|
2757
|
+
} catch (error) {
|
|
2758
|
+
toast7.error("Passkey setup failed or was canceled");
|
|
2759
|
+
} finally {
|
|
2760
|
+
setIsSubmitting(false);
|
|
2761
|
+
}
|
|
2762
|
+
};
|
|
2763
|
+
return /* @__PURE__ */ React27.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 pb-12" }, /* @__PURE__ */ React27.createElement(ManagedToaster, null), /* @__PURE__ */ React27.createElement("div", { className: "mb-6 flex items-center px-1" }, /* @__PURE__ */ React27.createElement(
|
|
2764
|
+
"button",
|
|
2765
|
+
{
|
|
2766
|
+
onClick: onBack,
|
|
2767
|
+
className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] font-medium outline-none"
|
|
2768
|
+
},
|
|
2769
|
+
/* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: ArrowLeft01Icon3, size: 16 }),
|
|
2770
|
+
" Back"
|
|
2771
|
+
)), /* @__PURE__ */ React27.createElement("div", { className: "w-full flex flex-col gap-4" }, /* @__PURE__ */ React27.createElement("div", { className: "w-full bg-white rounded-2xl overflow-hidden" }, /* @__PURE__ */ React27.createElement(
|
|
2772
|
+
MenuRow3,
|
|
2773
|
+
{
|
|
2774
|
+
icon: Shield02Icon,
|
|
2775
|
+
title: "Authenticator App",
|
|
2776
|
+
subtitle: "Secure your account with 2FA",
|
|
2777
|
+
onClick: handleToggle2FA,
|
|
2778
|
+
isToggle: true,
|
|
2779
|
+
toggleState: has2FA,
|
|
2780
|
+
toggleLoading: is2FALoading || isFetchingSetup
|
|
2781
|
+
}
|
|
2782
|
+
), /* @__PURE__ */ React27.createElement(
|
|
2783
|
+
MenuRow3,
|
|
2784
|
+
{
|
|
2785
|
+
icon: Key01Icon,
|
|
2786
|
+
title: "Passkeys",
|
|
2787
|
+
subtitle: "Sign in quickly with biometrics",
|
|
2788
|
+
onClick: handleTogglePasskey,
|
|
2789
|
+
isToggle: true,
|
|
2790
|
+
toggleState: hasPasskey,
|
|
2791
|
+
toggleLoading: isPasskeyLoading,
|
|
2792
|
+
isLast: true
|
|
2793
|
+
}
|
|
2794
|
+
))), show2FASetupModal && /* @__PURE__ */ React27.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React27.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShow2FASetupModal(false) }), /* @__PURE__ */ React27.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[90vh]" }, /* @__PURE__ */ React27.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ React27.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable 2FA"), /* @__PURE__ */ React27.createElement("button", { onClick: () => !isSubmitting && setShow2FASetupModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: CancelCircleIcon6, size: 18 }))), /* @__PURE__ */ React27.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-2" }, /* @__PURE__ */ React27.createElement("div", { className: "w-full flex justify-center mb-6 mix-blend-multiply" }, twoFaQr ? /* @__PURE__ */ React27.createElement("img", { src: twoFaQr, alt: "2FA QR Code", className: "w-40 h-40 object-contain rounded-xl border border-neutral-100 p-2" }) : /* @__PURE__ */ React27.createElement("div", { className: "w-40 h-40 bg-neutral-100 rounded-xl flex items-center justify-center animate-pulse" })), /* @__PURE__ */ React27.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-8" }, /* @__PURE__ */ React27.createElement("div", null, /* @__PURE__ */ React27.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2 uppercase" }, "Setup Key"), /* @__PURE__ */ React27.createElement("div", { className: "flex items-center gap-2 min-w-0 bg-neutral-50 px-3 py-2.5 rounded-xl border border-neutral-100" }, /* @__PURE__ */ React27.createElement("span", { className: "text-[13px] font-mono tracking-widest text-black truncate min-w-0 block flex-1" }, twoFaSecret), /* @__PURE__ */ React27.createElement(
|
|
2795
|
+
"button",
|
|
2796
|
+
{
|
|
2797
|
+
onClick: () => handleCopySecret(twoFaSecret),
|
|
2798
|
+
className: "text-neutral-400 hover:text-black transition-colors outline-none shrink-0 ml-2"
|
|
2799
|
+
},
|
|
2800
|
+
/* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: Copy01Icon3, size: 16 })
|
|
2801
|
+
)))), /* @__PURE__ */ React27.createElement("div", { className: "text-center mb-8 mt-2" }, /* @__PURE__ */ React27.createElement("h2", { className: "text-xl text-black mb-2 tracking-tight" }, "Security Check"), /* @__PURE__ */ React27.createElement("p", { className: "text-[13px] text-neutral-500" }, "Enter the 6-digit code from your app")), /* @__PURE__ */ React27.createElement("form", { className: "space-y-8", autoComplete: "off", onSubmit: (e) => {
|
|
2802
|
+
e.preventDefault();
|
|
2803
|
+
submitEnable2FA(otp.join(""));
|
|
2804
|
+
} }, /* @__PURE__ */ React27.createElement("div", { className: "flex justify-between gap-2", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ React27.createElement(
|
|
2805
|
+
"input",
|
|
2806
|
+
{
|
|
2807
|
+
key: index,
|
|
2808
|
+
ref: (el) => {
|
|
2809
|
+
inputRefs.current[index] = el;
|
|
2810
|
+
},
|
|
2811
|
+
type: "text",
|
|
2812
|
+
inputMode: "numeric",
|
|
2813
|
+
maxLength: 1,
|
|
2814
|
+
value: digit,
|
|
2815
|
+
onChange: (e) => handleOtpChange(index, e.target.value),
|
|
2816
|
+
onKeyDown: (e) => {
|
|
2817
|
+
if (e.key === "Backspace" && !otp[index] && index > 0) {
|
|
2818
|
+
inputRefs.current[index - 1]?.focus();
|
|
2819
|
+
}
|
|
2820
|
+
},
|
|
2821
|
+
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"
|
|
2822
|
+
}
|
|
2823
|
+
))), /* @__PURE__ */ React27.createElement(
|
|
2824
|
+
ThreeDActionButton,
|
|
2825
|
+
{
|
|
2826
|
+
type: "submit",
|
|
2827
|
+
disabled: otp.join("").length < 6,
|
|
2828
|
+
isLoading: isSubmitting,
|
|
2829
|
+
className: "w-full py-3.5"
|
|
2830
|
+
},
|
|
2831
|
+
"Verify & Enable"
|
|
2832
|
+
))))), show2FADisableModal && /* @__PURE__ */ React27.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React27.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShow2FADisableModal(false) }), /* @__PURE__ */ React27.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React27.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 border-b border-neutral-50" }, /* @__PURE__ */ React27.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Disable 2FA"), /* @__PURE__ */ React27.createElement("button", { onClick: () => !isSubmitting && setShow2FADisableModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: CancelCircleIcon6, size: 18 }))), /* @__PURE__ */ React27.createElement("div", { className: "p-6" }, /* @__PURE__ */ React27.createElement("div", { className: "text-center mb-8 mt-2" }, /* @__PURE__ */ React27.createElement("h2", { className: "text-xl text-black mb-2 tracking-tight" }, "Security Check"), /* @__PURE__ */ React27.createElement("p", { className: "text-[13px] text-neutral-500" }, "Enter the code from your authenticator app to disable 2FA.")), /* @__PURE__ */ React27.createElement("form", { className: "space-y-8", autoComplete: "off", onSubmit: (e) => {
|
|
2833
|
+
e.preventDefault();
|
|
2834
|
+
submitDisable2FA(otp.join(""));
|
|
2835
|
+
} }, /* @__PURE__ */ React27.createElement("div", { className: "flex justify-between gap-2", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ React27.createElement(
|
|
2836
|
+
"input",
|
|
2837
|
+
{
|
|
2838
|
+
key: index,
|
|
2839
|
+
ref: (el) => {
|
|
2840
|
+
inputRefs.current[index] = el;
|
|
2841
|
+
},
|
|
2842
|
+
type: "text",
|
|
2843
|
+
inputMode: "numeric",
|
|
2844
|
+
maxLength: 1,
|
|
2845
|
+
value: digit,
|
|
2846
|
+
onChange: (e) => handleOtpChange(index, e.target.value),
|
|
2847
|
+
onKeyDown: (e) => {
|
|
2848
|
+
if (e.key === "Backspace" && !otp[index] && index > 0) {
|
|
2849
|
+
inputRefs.current[index - 1]?.focus();
|
|
2850
|
+
}
|
|
2851
|
+
},
|
|
2852
|
+
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"
|
|
2853
|
+
}
|
|
2854
|
+
))), /* @__PURE__ */ React27.createElement(
|
|
2855
|
+
ThreeDActionButton,
|
|
2856
|
+
{
|
|
2857
|
+
type: "submit",
|
|
2858
|
+
disabled: otp.join("").length < 6,
|
|
2859
|
+
isLoading: isSubmitting,
|
|
2860
|
+
className: "w-full py-3.5"
|
|
2861
|
+
},
|
|
2862
|
+
"Verify & Disable"
|
|
2863
|
+
))))), showPasskeyModal && /* @__PURE__ */ React27.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React27.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isSubmitting && setShowPasskeyModal(false) }), /* @__PURE__ */ React27.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React27.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 border-b border-neutral-50" }, /* @__PURE__ */ React27.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Enable Passkey"), /* @__PURE__ */ React27.createElement("button", { onClick: () => !isSubmitting && setShowPasskeyModal(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: CancelCircleIcon6, size: 18 }))), /* @__PURE__ */ React27.createElement("div", { className: "p-6 text-center" }, /* @__PURE__ */ React27.createElement("div", { className: "w-16 h-16 bg-neutral-100 rounded-full flex items-center justify-center mx-auto mb-4 text-black" }, /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: Key01Icon, size: 28 })), /* @__PURE__ */ React27.createElement("h2", { className: "text-lg text-black mb-2 tracking-tight" }, "Simplify your Sign In"), /* @__PURE__ */ React27.createElement("p", { className: "text-[13px] text-neutral-500 mb-8 leading-relaxed" }, "Use your device's biometrics (Face ID, Touch ID, or PIN) to securely sign into your account without needing a password."), /* @__PURE__ */ React27.createElement(
|
|
2864
|
+
ThreeDActionButton,
|
|
2865
|
+
{
|
|
2866
|
+
onClick: submitEnablePasskey,
|
|
2867
|
+
isLoading: isSubmitting,
|
|
2868
|
+
className: "w-full py-3.5"
|
|
2869
|
+
},
|
|
2870
|
+
"Create Passkey"
|
|
2871
|
+
)))));
|
|
2872
|
+
};
|
|
2873
|
+
var MenuRow3 = ({
|
|
2874
|
+
icon,
|
|
2875
|
+
title,
|
|
2876
|
+
subtitle,
|
|
2877
|
+
onClick,
|
|
2878
|
+
iconColor = "text-black",
|
|
2879
|
+
titleColor = "text-black",
|
|
2880
|
+
isLast = false,
|
|
2881
|
+
isToggle = false,
|
|
2882
|
+
toggleState = false,
|
|
2883
|
+
toggleLoading = false,
|
|
2884
|
+
disabled = false
|
|
2885
|
+
}) => /* @__PURE__ */ React27.createElement(
|
|
2886
|
+
"div",
|
|
2887
|
+
{
|
|
2888
|
+
onClick: disabled ? void 0 : onClick,
|
|
2889
|
+
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"}`
|
|
2890
|
+
},
|
|
2891
|
+
/* @__PURE__ */ React27.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__ */ React27.createElement(HugeiconsIcon19, { icon, size: 18, className: iconColor })),
|
|
2892
|
+
/* @__PURE__ */ React27.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React27.createElement("p", { className: `text-[14px] font-medium truncate ${titleColor}` }, title), /* @__PURE__ */ React27.createElement("p", { className: "text-[12px] text-neutral-500 truncate" }, subtitle)),
|
|
2893
|
+
isToggle ? /* @__PURE__ */ React27.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__ */ React27.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__ */ React27.createElement(HugeiconsIcon19, { icon: Loading03Icon10, size: 10, className: "animate-spin text-black" }))) : /* @__PURE__ */ React27.createElement(HugeiconsIcon19, { icon: ArrowRight01Icon4, size: 18, className: "text-neutral-400 shrink-0 ml-2" })
|
|
2894
|
+
);
|
|
2895
|
+
|
|
2604
2896
|
// src/components/FeatureScroll.tsx
|
|
2605
|
-
import
|
|
2897
|
+
import React28, { useRef as useRef7, useState as useState19, useEffect as useEffect12 } from "react";
|
|
2606
2898
|
import Image4 from "next/image";
|
|
2607
|
-
import { HugeiconsIcon as
|
|
2608
|
-
import { ArrowLeft01Icon as
|
|
2899
|
+
import { HugeiconsIcon as HugeiconsIcon20 } from "@hugeicons/react";
|
|
2900
|
+
import { ArrowLeft01Icon as ArrowLeft01Icon4, ArrowRight01Icon as ArrowRight01Icon5, Loading03Icon as Loading03Icon11 } from "@hugeicons/core-free-icons";
|
|
2609
2901
|
var FeatureCard = ({ feature, bgImage }) => {
|
|
2610
|
-
const [isBgLoading, setIsBgLoading] =
|
|
2611
|
-
const [isFgLoading, setIsFgLoading] =
|
|
2612
|
-
return /* @__PURE__ */
|
|
2902
|
+
const [isBgLoading, setIsBgLoading] = useState19(true);
|
|
2903
|
+
const [isFgLoading, setIsFgLoading] = useState19(!!feature.image);
|
|
2904
|
+
return /* @__PURE__ */ React28.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__ */ React28.createElement("div", { className: "relative w-full aspect-16/10 bg-neutral-100 rounded-2xl overflow-hidden mb-6 flex items-center justify-center" }, /* @__PURE__ */ React28.createElement(
|
|
2613
2905
|
Image4,
|
|
2614
2906
|
{
|
|
2615
2907
|
src: bgImage,
|
|
@@ -2622,7 +2914,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2622
2914
|
${isBgLoading ? "blur-xl scale-110" : "blur-0 scale-100"}
|
|
2623
2915
|
`
|
|
2624
2916
|
}
|
|
2625
|
-
), /* @__PURE__ */
|
|
2917
|
+
), /* @__PURE__ */ React28.createElement(
|
|
2626
2918
|
"div",
|
|
2627
2919
|
{
|
|
2628
2920
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.25] mix-blend-overlay",
|
|
@@ -2630,7 +2922,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2630
2922
|
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")`
|
|
2631
2923
|
}
|
|
2632
2924
|
}
|
|
2633
|
-
), isFgLoading && feature.image && /* @__PURE__ */
|
|
2925
|
+
), isFgLoading && feature.image && /* @__PURE__ */ React28.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__ */ React28.createElement(HugeiconsIcon20, { icon: Loading03Icon11, size: 32, className: "animate-spin text-neutral-400" })), feature.image && /* @__PURE__ */ React28.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__ */ React28.createElement(
|
|
2634
2926
|
Image4,
|
|
2635
2927
|
{
|
|
2636
2928
|
src: feature.image,
|
|
@@ -2643,12 +2935,12 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
2643
2935
|
${isFgLoading ? "opacity-0 blur-xl" : "opacity-100 blur-0"}
|
|
2644
2936
|
`
|
|
2645
2937
|
}
|
|
2646
|
-
))), /* @__PURE__ */
|
|
2938
|
+
))), /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ React28.createElement("h3", { className: " text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ React28.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 max-w-[90%]" }, feature.desc)));
|
|
2647
2939
|
};
|
|
2648
2940
|
var FeatureScroll = ({ tagline, headline, features }) => {
|
|
2649
|
-
const scrollRef =
|
|
2650
|
-
const [canScrollLeft, setCanScrollLeft] =
|
|
2651
|
-
const [canScrollRight, setCanScrollRight] =
|
|
2941
|
+
const scrollRef = useRef7(null);
|
|
2942
|
+
const [canScrollLeft, setCanScrollLeft] = useState19(false);
|
|
2943
|
+
const [canScrollRight, setCanScrollRight] = useState19(true);
|
|
2652
2944
|
const checkScroll = () => {
|
|
2653
2945
|
if (scrollRef.current) {
|
|
2654
2946
|
const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;
|
|
@@ -2672,72 +2964,72 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
2672
2964
|
"https://retinalabs.company/assets/images/bg_6.avif",
|
|
2673
2965
|
"https://retinalabs.company/assets/images/bg_1.avif"
|
|
2674
2966
|
];
|
|
2675
|
-
return /* @__PURE__ */
|
|
2967
|
+
return /* @__PURE__ */ React28.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden" }, /* @__PURE__ */ React28.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ React28.createElement("div", { className: "relative z-10 text-left" }, /* @__PURE__ */ React28.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ React28.createElement("h2", { className: " text-3xl tracking-tight text-black leading-[1.05]" }, headline)), /* @__PURE__ */ React28.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ React28.createElement(
|
|
2676
2968
|
"button",
|
|
2677
2969
|
{
|
|
2678
2970
|
onClick: () => scroll("left"),
|
|
2679
2971
|
disabled: !canScrollLeft,
|
|
2680
2972
|
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"
|
|
2681
2973
|
},
|
|
2682
|
-
/* @__PURE__ */
|
|
2683
|
-
), /* @__PURE__ */
|
|
2974
|
+
/* @__PURE__ */ React28.createElement(HugeiconsIcon20, { icon: ArrowLeft01Icon4, size: 20 })
|
|
2975
|
+
), /* @__PURE__ */ React28.createElement(
|
|
2684
2976
|
"button",
|
|
2685
2977
|
{
|
|
2686
2978
|
onClick: () => scroll("right"),
|
|
2687
2979
|
disabled: !canScrollRight,
|
|
2688
2980
|
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"
|
|
2689
2981
|
},
|
|
2690
|
-
/* @__PURE__ */
|
|
2691
|
-
))), /* @__PURE__ */
|
|
2982
|
+
/* @__PURE__ */ React28.createElement(HugeiconsIcon20, { icon: ArrowRight01Icon5, size: 20 })
|
|
2983
|
+
))), /* @__PURE__ */ React28.createElement(
|
|
2692
2984
|
"div",
|
|
2693
2985
|
{
|
|
2694
2986
|
ref: scrollRef,
|
|
2695
2987
|
onScroll: checkScroll,
|
|
2696
2988
|
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"
|
|
2697
2989
|
},
|
|
2698
|
-
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */
|
|
2699
|
-
), /* @__PURE__ */
|
|
2990
|
+
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */ React28.createElement(FeatureCard, { key: idx, feature, bgImage: bgImages[idx] }))
|
|
2991
|
+
), /* @__PURE__ */ React28.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ React28.createElement(
|
|
2700
2992
|
"button",
|
|
2701
2993
|
{
|
|
2702
2994
|
onClick: () => scroll("left"),
|
|
2703
2995
|
disabled: !canScrollLeft,
|
|
2704
2996
|
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"
|
|
2705
2997
|
},
|
|
2706
|
-
/* @__PURE__ */
|
|
2707
|
-
), /* @__PURE__ */
|
|
2998
|
+
/* @__PURE__ */ React28.createElement(HugeiconsIcon20, { icon: ArrowLeft01Icon4, size: 20 })
|
|
2999
|
+
), /* @__PURE__ */ React28.createElement(
|
|
2708
3000
|
"button",
|
|
2709
3001
|
{
|
|
2710
3002
|
onClick: () => scroll("right"),
|
|
2711
3003
|
disabled: !canScrollRight,
|
|
2712
3004
|
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"
|
|
2713
3005
|
},
|
|
2714
|
-
/* @__PURE__ */
|
|
3006
|
+
/* @__PURE__ */ React28.createElement(HugeiconsIcon20, { icon: ArrowRight01Icon5, size: 20 })
|
|
2715
3007
|
))));
|
|
2716
3008
|
};
|
|
2717
3009
|
|
|
2718
3010
|
// src/components/PlatformFeatures.tsx
|
|
2719
|
-
import
|
|
2720
|
-
import { HugeiconsIcon as
|
|
3011
|
+
import React29 from "react";
|
|
3012
|
+
import { HugeiconsIcon as HugeiconsIcon21 } from "@hugeicons/react";
|
|
2721
3013
|
var PlatformFeatures = ({
|
|
2722
3014
|
tagline,
|
|
2723
3015
|
headline,
|
|
2724
3016
|
description,
|
|
2725
3017
|
features
|
|
2726
3018
|
}) => {
|
|
2727
|
-
return /* @__PURE__ */
|
|
3019
|
+
return /* @__PURE__ */ React29.createElement("section", { className: "w-full flex justify-center mb-15 relative z-10" }, /* @__PURE__ */ React29.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col items-start mb-16 relative z-10" }, /* @__PURE__ */ React29.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ React29.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.05] mb-6" }, headline), /* @__PURE__ */ React29.createElement("p", { className: "text-[15px] leading-[1.8] text-neutral-600 max-w-2xl" }, description)), /* @__PURE__ */ React29.createElement("div", { className: "w-full h-px bg-neutral-100 mb-16", "aria-hidden": "true" }), /* @__PURE__ */ React29.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__ */ React29.createElement(
|
|
2728
3020
|
"div",
|
|
2729
3021
|
{
|
|
2730
3022
|
key: idx,
|
|
2731
3023
|
className: "flex flex-col group animate-in fade-in slide-in-from-bottom-4 duration-700 fill-mode-both",
|
|
2732
3024
|
style: { animationDelay: feature.delay || "0ms" }
|
|
2733
3025
|
},
|
|
2734
|
-
/* @__PURE__ */
|
|
2735
|
-
/* @__PURE__ */
|
|
3026
|
+
/* @__PURE__ */ React29.createElement("div", { className: "flex flex-row items-center gap-4 mb-4" }, /* @__PURE__ */ React29.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__ */ React29.createElement(HugeiconsIcon21, { icon: feature.icon, size: 24 })), /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col justify-center" }, /* @__PURE__ */ React29.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400 mb-0.5" }, feature.label || "CAPABILITY"), /* @__PURE__ */ React29.createElement("h3", { className: "text-xl tracking-tight text-black" }, feature.title))),
|
|
3027
|
+
/* @__PURE__ */ React29.createElement("div", null, /* @__PURE__ */ React29.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 pr-4" }, feature.desc))
|
|
2736
3028
|
)))));
|
|
2737
3029
|
};
|
|
2738
3030
|
|
|
2739
3031
|
// src/components/ManagedDocument.tsx
|
|
2740
|
-
import
|
|
3032
|
+
import React30, { useState as useState20, useEffect as useEffect13, useRef as useRef8 } from "react";
|
|
2741
3033
|
var ManagedDocument = ({
|
|
2742
3034
|
tagline,
|
|
2743
3035
|
title,
|
|
@@ -2745,8 +3037,8 @@ var ManagedDocument = ({
|
|
|
2745
3037
|
contactText,
|
|
2746
3038
|
contactEmail
|
|
2747
3039
|
}) => {
|
|
2748
|
-
const [isAnimating, setIsAnimating] =
|
|
2749
|
-
const titleRef =
|
|
3040
|
+
const [isAnimating, setIsAnimating] = useState20(false);
|
|
3041
|
+
const titleRef = useRef8(null);
|
|
2750
3042
|
useEffect13(() => {
|
|
2751
3043
|
const observer = new IntersectionObserver(
|
|
2752
3044
|
([entry]) => {
|
|
@@ -2767,7 +3059,7 @@ var ManagedDocument = ({
|
|
|
2767
3059
|
}, []);
|
|
2768
3060
|
return (
|
|
2769
3061
|
// Outer layout wrapper (takes up available space, adds padding)
|
|
2770
|
-
/* @__PURE__ */
|
|
3062
|
+
/* @__PURE__ */ React30.createElement("div", { className: "grow pt-4 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React30.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ React30.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React30.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ React30.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React30.createElement(
|
|
2771
3063
|
"h1",
|
|
2772
3064
|
{
|
|
2773
3065
|
ref: titleRef,
|
|
@@ -2775,7 +3067,7 @@ var ManagedDocument = ({
|
|
|
2775
3067
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2776
3068
|
},
|
|
2777
3069
|
title
|
|
2778
|
-
)), sections.map((section, index) => /* @__PURE__ */
|
|
3070
|
+
)), sections.map((section, index) => /* @__PURE__ */ React30.createElement("div", { key: index, className: "relative px-5 md:px-12 py-8 md:py-10" }, section.heading && /* @__PURE__ */ React30.createElement("p", { className: " text-[11px] tracking-[0.2em] text-black mb-4 text-left " }, section.heading), section.paragraphs && section.paragraphs.length > 0 && /* @__PURE__ */ React30.createElement("div", { className: "text-[14px] leading-[1.8] text-neutral-700 space-y-4 text-left " }, section.paragraphs.map((text, pIndex) => /* @__PURE__ */ React30.createElement("p", { key: pIndex }, text))), section.quote && /* @__PURE__ */ React30.createElement("div", { className: `border-neutral-100 border rounded-xl p-6 ${section.paragraphs && section.paragraphs.length > 0 ? "mt-6" : ""}` }, /* @__PURE__ */ React30.createElement("p", { className: "text-neutral-900 text-[14px] md:text-[14px] leading-relaxed" }, '"', section.quote, '"')))), (contactText || contactEmail) && /* @__PURE__ */ React30.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ React30.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ React30.createElement(
|
|
2779
3071
|
"a",
|
|
2780
3072
|
{
|
|
2781
3073
|
href: `mailto:${contactEmail}`,
|
|
@@ -2787,18 +3079,18 @@ var ManagedDocument = ({
|
|
|
2787
3079
|
};
|
|
2788
3080
|
|
|
2789
3081
|
// src/components/ManagedContactBlock.tsx
|
|
2790
|
-
import
|
|
2791
|
-
import { HugeiconsIcon as
|
|
3082
|
+
import React31, { useState as useState21, useEffect as useEffect14 } from "react";
|
|
3083
|
+
import { HugeiconsIcon as HugeiconsIcon22 } from "@hugeicons/react";
|
|
2792
3084
|
var SecureEmail = ({ user, domain, className }) => {
|
|
2793
|
-
const [isMounted, setIsMounted] =
|
|
3085
|
+
const [isMounted, setIsMounted] = useState21(false);
|
|
2794
3086
|
useEffect14(() => {
|
|
2795
3087
|
setIsMounted(true);
|
|
2796
3088
|
}, []);
|
|
2797
3089
|
if (!isMounted) {
|
|
2798
|
-
return /* @__PURE__ */
|
|
3090
|
+
return /* @__PURE__ */ React31.createElement("span", { className, style: { opacity: 0 } }, "Loading");
|
|
2799
3091
|
}
|
|
2800
3092
|
const email = `${user}@${domain}`;
|
|
2801
|
-
return /* @__PURE__ */
|
|
3093
|
+
return /* @__PURE__ */ React31.createElement("a", { href: `mailto:${email}`, className }, email);
|
|
2802
3094
|
};
|
|
2803
3095
|
var ManagedContactBlock = ({
|
|
2804
3096
|
tagline,
|
|
@@ -2807,7 +3099,7 @@ var ManagedContactBlock = ({
|
|
|
2807
3099
|
emails,
|
|
2808
3100
|
socials
|
|
2809
3101
|
}) => {
|
|
2810
|
-
return /* @__PURE__ */
|
|
3102
|
+
return /* @__PURE__ */ React31.createElement("div", { className: "grow pt-4 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React31.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ React31.createElement(
|
|
2811
3103
|
"div",
|
|
2812
3104
|
{
|
|
2813
3105
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2816,21 +3108,21 @@ var ManagedContactBlock = ({
|
|
|
2816
3108
|
backgroundRepeat: "repeat"
|
|
2817
3109
|
}
|
|
2818
3110
|
}
|
|
2819
|
-
), /* @__PURE__ */
|
|
3111
|
+
), /* @__PURE__ */ React31.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React31.createElement("div", { className: "relative px-8 md:px-12 py-10" }, tagline && /* @__PURE__ */ React31.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React31.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ React31.createElement("div", { className: "relative px-8 md:px-12 py-8 pb-14" }, /* @__PURE__ */ React31.createElement("div", { className: "flex flex-wrap gap-12 lg:gap-16 w-full" }, company && /* @__PURE__ */ React31.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React31.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Contact Details"), /* @__PURE__ */ React31.createElement("div", { className: "space-y-3 text-[13px] text-neutral-600 leading-[1.8]" }, company.name && /* @__PURE__ */ React31.createElement("p", { className: "text-black" }, company.name), company.lines && company.lines.map((line, idx) => /* @__PURE__ */ React31.createElement("p", { key: idx }, line)), company.phone && /* @__PURE__ */ React31.createElement("p", { className: "pt-2" }, /* @__PURE__ */ React31.createElement(
|
|
2820
3112
|
"a",
|
|
2821
3113
|
{
|
|
2822
3114
|
href: `tel:${company.phone.replace(/\s+/g, "")}`,
|
|
2823
3115
|
className: "transition-colors hover:text-black"
|
|
2824
3116
|
},
|
|
2825
3117
|
company.phone
|
|
2826
|
-
)))), emails && emails.length > 0 && /* @__PURE__ */
|
|
3118
|
+
)))), emails && emails.length > 0 && /* @__PURE__ */ React31.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React31.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Email Directory"), /* @__PURE__ */ React31.createElement("div", { className: "space-y-6 text-[13px]" }, emails.map((email, idx) => /* @__PURE__ */ React31.createElement("div", { key: idx }, /* @__PURE__ */ React31.createElement("p", { className: "text-[11px] tracking-[0.2em] mb-1.5 text-neutral-500 " }, email.label), /* @__PURE__ */ React31.createElement(
|
|
2827
3119
|
SecureEmail,
|
|
2828
3120
|
{
|
|
2829
3121
|
user: email.user,
|
|
2830
3122
|
domain: email.domain,
|
|
2831
3123
|
className: "text-neutral-600 transition-colors hover:text-black"
|
|
2832
3124
|
}
|
|
2833
|
-
))))), socials && socials.length > 0 && /* @__PURE__ */
|
|
3125
|
+
))))), socials && socials.length > 0 && /* @__PURE__ */ React31.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ React31.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Find Us Online"), /* @__PURE__ */ React31.createElement("div", { className: "flex flex-col space-y-5 pt-1" }, socials.map((social, idx) => /* @__PURE__ */ React31.createElement(
|
|
2834
3126
|
"a",
|
|
2835
3127
|
{
|
|
2836
3128
|
key: idx,
|
|
@@ -2839,26 +3131,26 @@ var ManagedContactBlock = ({
|
|
|
2839
3131
|
rel: "noopener noreferrer",
|
|
2840
3132
|
className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black"
|
|
2841
3133
|
},
|
|
2842
|
-
/* @__PURE__ */
|
|
2843
|
-
/* @__PURE__ */
|
|
3134
|
+
/* @__PURE__ */ React31.createElement(HugeiconsIcon22, { icon: social.icon, size: 18 }),
|
|
3135
|
+
/* @__PURE__ */ React31.createElement("span", { className: "text-[13px]" }, social.label)
|
|
2844
3136
|
)))))))));
|
|
2845
3137
|
};
|
|
2846
3138
|
|
|
2847
3139
|
// src/components/ManagedPricingBlock.tsx
|
|
2848
|
-
import
|
|
3140
|
+
import React32, { useState as useState22, useEffect as useEffect15, useRef as useRef9 } from "react";
|
|
2849
3141
|
import Link7 from "next/link";
|
|
2850
3142
|
import Image5 from "next/image";
|
|
2851
|
-
var CheckIcon = ({ className = "" }) => /* @__PURE__ */
|
|
2852
|
-
var CrossIcon = ({ className = "" }) => /* @__PURE__ */
|
|
3143
|
+
var CheckIcon = ({ className = "" }) => /* @__PURE__ */ React32.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__ */ React32.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ React32.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
3144
|
+
var CrossIcon = ({ className = "" }) => /* @__PURE__ */ React32.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__ */ React32.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ React32.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
2853
3145
|
var ManagedPricingBlock = ({
|
|
2854
3146
|
tagline,
|
|
2855
3147
|
title,
|
|
2856
3148
|
plans = [],
|
|
2857
3149
|
tabs
|
|
2858
3150
|
}) => {
|
|
2859
|
-
const [isAnimating, setIsAnimating] =
|
|
2860
|
-
const [activeTabIndex, setActiveTabIndex] =
|
|
2861
|
-
const titleRef =
|
|
3151
|
+
const [isAnimating, setIsAnimating] = useState22(false);
|
|
3152
|
+
const [activeTabIndex, setActiveTabIndex] = useState22(0);
|
|
3153
|
+
const titleRef = useRef9(null);
|
|
2862
3154
|
useEffect15(() => {
|
|
2863
3155
|
const observer = new IntersectionObserver(
|
|
2864
3156
|
([entry]) => {
|
|
@@ -2879,7 +3171,7 @@ var ManagedPricingBlock = ({
|
|
|
2879
3171
|
}, []);
|
|
2880
3172
|
const hasTabs = tabs && tabs.length > 0;
|
|
2881
3173
|
const currentPlans = hasTabs ? tabs[activeTabIndex].plans : plans;
|
|
2882
|
-
return /* @__PURE__ */
|
|
3174
|
+
return /* @__PURE__ */ React32.createElement("div", { className: "grow pt-10 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React32.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col items-center" }, /* @__PURE__ */ React32.createElement("div", { className: "w-full flex flex-col items-center text-center mb-10 sm:mb-12" }, tagline && /* @__PURE__ */ React32.createElement("span", { className: "text-[9px] tracking-[0.4em] text-black block " }, tagline), /* @__PURE__ */ React32.createElement(
|
|
2883
3175
|
"h1",
|
|
2884
3176
|
{
|
|
2885
3177
|
ref: titleRef,
|
|
@@ -2887,9 +3179,9 @@ var ManagedPricingBlock = ({
|
|
|
2887
3179
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
2888
3180
|
},
|
|
2889
3181
|
title
|
|
2890
|
-
)), hasTabs && /* @__PURE__ */
|
|
3182
|
+
)), hasTabs && /* @__PURE__ */ React32.createElement("div", { className: "flex items-center justify-center mb-8 sm:mb-10 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ React32.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) => {
|
|
2891
3183
|
const isActive = activeTabIndex === idx;
|
|
2892
|
-
return /* @__PURE__ */
|
|
3184
|
+
return /* @__PURE__ */ React32.createElement(
|
|
2893
3185
|
"button",
|
|
2894
3186
|
{
|
|
2895
3187
|
key: idx,
|
|
@@ -2898,19 +3190,19 @@ var ManagedPricingBlock = ({
|
|
|
2898
3190
|
},
|
|
2899
3191
|
tab.label
|
|
2900
3192
|
);
|
|
2901
|
-
}))), /* @__PURE__ */
|
|
3193
|
+
}))), /* @__PURE__ */ React32.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__ */ React32.createElement(
|
|
2902
3194
|
"div",
|
|
2903
3195
|
{
|
|
2904
3196
|
key: `${activeTabIndex}-${planIdx}`,
|
|
2905
3197
|
className: `bg-white rounded-3xl p-6 flex flex-col relative overflow-hidden transition-all duration-300 ${plan.isPremium ? "" : ""}`
|
|
2906
3198
|
},
|
|
2907
|
-
/* @__PURE__ */
|
|
3199
|
+
/* @__PURE__ */ React32.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React32.createElement("span", { className: "text-black text-base block mb-1" }, plan.name), /* @__PURE__ */ React32.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ React32.createElement("h3", { className: "text-3xl font-light text-black" }, plan.price), plan.period && /* @__PURE__ */ React32.createElement("span", { className: "text-xs text-neutral-500" }, plan.period)), /* @__PURE__ */ React32.createElement("p", { className: "text-xs text-neutral-500 mt-2 min-h-8" }, plan.description), plan.showApps && plan.appLogos && plan.appLogos.length > 0 && /* @__PURE__ */ React32.createElement("div", { className: "flex items-center gap-2 mt-4" }, plan.appLogos.map((logo, logoIdx) => /* @__PURE__ */ React32.createElement(
|
|
2908
3200
|
"div",
|
|
2909
3201
|
{
|
|
2910
3202
|
key: logoIdx,
|
|
2911
3203
|
className: "relative w-5 h-5 overflow-hidden flex items-center justify-center shrink-0"
|
|
2912
3204
|
},
|
|
2913
|
-
/* @__PURE__ */
|
|
3205
|
+
/* @__PURE__ */ React32.createElement(
|
|
2914
3206
|
Image5,
|
|
2915
3207
|
{
|
|
2916
3208
|
src: logo.src,
|
|
@@ -2921,7 +3213,7 @@ var ManagedPricingBlock = ({
|
|
|
2921
3213
|
}
|
|
2922
3214
|
)
|
|
2923
3215
|
)))),
|
|
2924
|
-
plan.isPremium ? /* @__PURE__ */
|
|
3216
|
+
plan.isPremium ? /* @__PURE__ */ React32.createElement(ThreeDButton, { href: plan.ctaHref, className: "mb-6 w-full" }, plan.ctaText) : /* @__PURE__ */ React32.createElement(
|
|
2925
3217
|
Link7,
|
|
2926
3218
|
{
|
|
2927
3219
|
href: plan.ctaHref,
|
|
@@ -2929,20 +3221,20 @@ var ManagedPricingBlock = ({
|
|
|
2929
3221
|
},
|
|
2930
3222
|
plan.ctaText
|
|
2931
3223
|
),
|
|
2932
|
-
/* @__PURE__ */
|
|
3224
|
+
/* @__PURE__ */ React32.createElement("div", { className: "flex flex-col gap-3" }, plan.features.map((feature, featureIdx) => {
|
|
2933
3225
|
const isAvailable = feature.value !== false;
|
|
2934
3226
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
2935
|
-
return /* @__PURE__ */
|
|
3227
|
+
return /* @__PURE__ */ React32.createElement("div", { key: featureIdx, className: "flex items-center gap-2.5" }, isAvailable ? /* @__PURE__ */ React32.createElement(CheckIcon, null) : /* @__PURE__ */ React32.createElement(CrossIcon, null), /* @__PURE__ */ React32.createElement("span", { className: `text-xs truncate ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ React32.createElement("span", { className: "text-neutral-500 ml-1" }, "(", valueText, ")")));
|
|
2936
3228
|
}))
|
|
2937
3229
|
)))));
|
|
2938
3230
|
};
|
|
2939
3231
|
|
|
2940
3232
|
// src/components/ManagedBoardBlock.tsx
|
|
2941
|
-
import
|
|
3233
|
+
import React33 from "react";
|
|
2942
3234
|
import Image6 from "next/image";
|
|
2943
|
-
import { HugeiconsIcon as
|
|
3235
|
+
import { HugeiconsIcon as HugeiconsIcon23 } from "@hugeicons/react";
|
|
2944
3236
|
import { TwitterIcon, LinkedinIcon } from "@hugeicons/core-free-icons";
|
|
2945
|
-
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */
|
|
3237
|
+
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ React33.createElement(
|
|
2946
3238
|
"a",
|
|
2947
3239
|
{
|
|
2948
3240
|
href,
|
|
@@ -2950,7 +3242,7 @@ var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ React32.
|
|
|
2950
3242
|
rel: "noopener noreferrer",
|
|
2951
3243
|
className: "text-neutral-400 hover:text-black transition-colors"
|
|
2952
3244
|
},
|
|
2953
|
-
/* @__PURE__ */
|
|
3245
|
+
/* @__PURE__ */ React33.createElement(HugeiconsIcon23, { icon, size: 16 })
|
|
2954
3246
|
);
|
|
2955
3247
|
var ManagedBoardBlock = ({
|
|
2956
3248
|
tagline,
|
|
@@ -2959,7 +3251,7 @@ var ManagedBoardBlock = ({
|
|
|
2959
3251
|
contactText,
|
|
2960
3252
|
contactEmail
|
|
2961
3253
|
}) => {
|
|
2962
|
-
return /* @__PURE__ */
|
|
3254
|
+
return /* @__PURE__ */ React33.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React33.createElement("div", { className: "relative w-full mx-auto overflow-hidden max-w-7xl" }, /* @__PURE__ */ React33.createElement(
|
|
2963
3255
|
"div",
|
|
2964
3256
|
{
|
|
2965
3257
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -2968,7 +3260,7 @@ var ManagedBoardBlock = ({
|
|
|
2968
3260
|
backgroundRepeat: "repeat"
|
|
2969
3261
|
}
|
|
2970
3262
|
}
|
|
2971
|
-
), /* @__PURE__ */
|
|
3263
|
+
), /* @__PURE__ */ React33.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React33.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ React33.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React33.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ React33.createElement("div", { className: "relative px-5 md:px-12 py-4 md:py-8" }, /* @__PURE__ */ React33.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__ */ React33.createElement("div", { key: idx, className: "relative p-6 md:p-8 rounded-2xl bg-white flex flex-col transition-all group" }, /* @__PURE__ */ React33.createElement("div", { className: "flex items-start space-x-4 md:space-x-5 mb-5 md:mb-6" }, /* @__PURE__ */ React33.createElement("div", { className: "relative w-14 h-14 md:w-16 md:h-16 shrink-0 bg-white overflow-hidden rounded-xl" }, /* @__PURE__ */ React33.createElement(
|
|
2972
3264
|
Image6,
|
|
2973
3265
|
{
|
|
2974
3266
|
src: member.imageSrc,
|
|
@@ -2977,7 +3269,7 @@ var ManagedBoardBlock = ({
|
|
|
2977
3269
|
sizes: "(max-width: 768px) 56px, 64px",
|
|
2978
3270
|
className: "object-cover grayscale opacity-100 transition-opacity"
|
|
2979
3271
|
}
|
|
2980
|
-
)), /* @__PURE__ */
|
|
3272
|
+
)), /* @__PURE__ */ React33.createElement("div", { className: "pt-1" }, /* @__PURE__ */ React33.createElement("h3", { className: " text-[14px] md:text-[15px] text-black tracking-tight" }, member.name), /* @__PURE__ */ React33.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 mt-1.5 " }, member.title))), /* @__PURE__ */ React33.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 text-left grow mb-8" }, member.bio), /* @__PURE__ */ React33.createElement("div", { className: "space-y-6 mt-auto" }, /* @__PURE__ */ React33.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ React33.createElement(ThreeDButton, { href: member.website }, "Visit Website")), /* @__PURE__ */ React33.createElement("div", { className: "flex space-x-4 pt-5" }, member.twitterHandle && member.twitterHandle.length > 0 && /* @__PURE__ */ React33.createElement(
|
|
2981
3273
|
MemberSocialLink,
|
|
2982
3274
|
{
|
|
2983
3275
|
href: `https://x.com/${member.twitterHandle}`,
|
|
@@ -2985,7 +3277,7 @@ var ManagedBoardBlock = ({
|
|
|
2985
3277
|
label: "X",
|
|
2986
3278
|
name: member.name
|
|
2987
3279
|
}
|
|
2988
|
-
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */
|
|
3280
|
+
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */ React33.createElement(
|
|
2989
3281
|
MemberSocialLink,
|
|
2990
3282
|
{
|
|
2991
3283
|
href: member.linkedinHandle,
|
|
@@ -2993,28 +3285,28 @@ var ManagedBoardBlock = ({
|
|
|
2993
3285
|
label: "LinkedIn",
|
|
2994
3286
|
name: member.name
|
|
2995
3287
|
}
|
|
2996
|
-
))))))), (contactText || contactEmail) && /* @__PURE__ */
|
|
3288
|
+
))))))), (contactText || contactEmail) && /* @__PURE__ */ React33.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ React33.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ React33.createElement("a", { href: `mailto:${contactEmail}`, className: "text-black decoration-black decoration-2 underline-offset-4 ml-1 transition-colors" }, contactEmail))))));
|
|
2997
3289
|
};
|
|
2998
3290
|
|
|
2999
3291
|
// src/components/ManagedNotFoundBlock.tsx
|
|
3000
|
-
import
|
|
3292
|
+
import React34 from "react";
|
|
3001
3293
|
var ManagedNotFoundBlock = ({
|
|
3002
3294
|
title = "404 - Page Not Found",
|
|
3003
3295
|
description = "The page you are looking for does not exist or has been moved."
|
|
3004
3296
|
}) => {
|
|
3005
|
-
return /* @__PURE__ */
|
|
3297
|
+
return /* @__PURE__ */ React34.createElement("main", { className: "min-h-screen flex items-center justify-center relative z-20 bg-transparent" }, /* @__PURE__ */ React34.createElement("div", { className: "p-6 w-full max-w-md mx-auto text-center" }, /* @__PURE__ */ React34.createElement("div", { className: "mb-8 flex justify-center" }, /* @__PURE__ */ React34.createElement(
|
|
3006
3298
|
"svg",
|
|
3007
3299
|
{
|
|
3008
3300
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3009
3301
|
viewBox: "0 0 24 24",
|
|
3010
3302
|
className: "w-12 h-12 fill-neutral-100"
|
|
3011
3303
|
},
|
|
3012
|
-
/* @__PURE__ */
|
|
3013
|
-
)), /* @__PURE__ */
|
|
3304
|
+
/* @__PURE__ */ React34.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" })
|
|
3305
|
+
)), /* @__PURE__ */ React34.createElement("h1", { className: " text-xl md:text-3xl text-black tracking-tight mb-4" }, title), /* @__PURE__ */ React34.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-12" }, description)));
|
|
3014
3306
|
};
|
|
3015
3307
|
|
|
3016
3308
|
// src/components/ManagedNewsletterSplitBlock.tsx
|
|
3017
|
-
import
|
|
3309
|
+
import React35 from "react";
|
|
3018
3310
|
import Image7 from "next/image";
|
|
3019
3311
|
var ManagedNewsletterSplitBlock = ({
|
|
3020
3312
|
tagline,
|
|
@@ -3028,7 +3320,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3028
3320
|
ctaHref = "/contact",
|
|
3029
3321
|
children
|
|
3030
3322
|
}) => {
|
|
3031
|
-
return /* @__PURE__ */
|
|
3323
|
+
return /* @__PURE__ */ React35.createElement("div", { className: "grow flex flex-col md:flex-row relative w-full pt-32 md:pt-0" }, /* @__PURE__ */ React35.createElement("div", { className: "hidden md:block md:w-1/2 relative min-h-screen overflow-hidden" }, /* @__PURE__ */ React35.createElement(
|
|
3032
3324
|
Image7,
|
|
3033
3325
|
{
|
|
3034
3326
|
src: imageSrc,
|
|
@@ -3038,7 +3330,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3038
3330
|
className: "object-cover object-top grayscale opacity-60",
|
|
3039
3331
|
quality: 100
|
|
3040
3332
|
}
|
|
3041
|
-
), /* @__PURE__ */
|
|
3333
|
+
), /* @__PURE__ */ React35.createElement(
|
|
3042
3334
|
"div",
|
|
3043
3335
|
{
|
|
3044
3336
|
className: "absolute inset-0 z-10 pointer-events-none",
|
|
@@ -3046,7 +3338,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3046
3338
|
background: "linear-gradient(to right, rgba(255,255,255,0) 30%, #ffffff 100%)"
|
|
3047
3339
|
}
|
|
3048
3340
|
}
|
|
3049
|
-
), /* @__PURE__ */
|
|
3341
|
+
), /* @__PURE__ */ React35.createElement(
|
|
3050
3342
|
"div",
|
|
3051
3343
|
{
|
|
3052
3344
|
className: "absolute inset-x-0 bottom-0 h-40 z-10 pointer-events-none",
|
|
@@ -3054,7 +3346,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3054
3346
|
background: "linear-gradient(to bottom, rgba(255,255,255,0) 0%, #ffffff 100%)"
|
|
3055
3347
|
}
|
|
3056
3348
|
}
|
|
3057
|
-
)), /* @__PURE__ */
|
|
3349
|
+
)), /* @__PURE__ */ React35.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__ */ React35.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__ */ React35.createElement(
|
|
3058
3350
|
"div",
|
|
3059
3351
|
{
|
|
3060
3352
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3063,7 +3355,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3063
3355
|
backgroundRepeat: "repeat"
|
|
3064
3356
|
}
|
|
3065
3357
|
}
|
|
3066
|
-
), /* @__PURE__ */
|
|
3358
|
+
), /* @__PURE__ */ React35.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React35.createElement("div", { className: "mb-10 border-b border-neutral-100 pb-8 text-center md:text-left" }, tagline && /* @__PURE__ */ React35.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 " }, tagline), /* @__PURE__ */ React35.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight mb-4" }, title), subtitle && /* @__PURE__ */ React35.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, subtitle)), /* @__PURE__ */ React35.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-10 text-center md:text-left" }, description), children && /* @__PURE__ */ React35.createElement("div", { className: "mb-8 text-left" }, children), /* @__PURE__ */ React35.createElement("div", { className: "text-center md:text-left mt-10 space-y-6" }, dividerText && /* @__PURE__ */ React35.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React35.createElement("div", { className: "grow h-px bg-neutral-100" }), /* @__PURE__ */ React35.createElement("span", { className: "shrink mx-4 text-[11px] tracking-[0.2em] text-neutral-400 " }, dividerText), /* @__PURE__ */ React35.createElement("div", { className: "grow h-px bg-neutral-100" })), ctaText && ctaHref && /* @__PURE__ */ React35.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ React35.createElement(
|
|
3067
3359
|
ThreeDButton,
|
|
3068
3360
|
{
|
|
3069
3361
|
href: ctaHref,
|
|
@@ -3074,13 +3366,13 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
3074
3366
|
};
|
|
3075
3367
|
|
|
3076
3368
|
// src/components/PortfolioHero.tsx
|
|
3077
|
-
import
|
|
3369
|
+
import React36, { useEffect as useEffect16, useRef as useRef10 } from "react";
|
|
3078
3370
|
import Link8 from "next/link";
|
|
3079
3371
|
import Image8 from "next/image";
|
|
3080
|
-
import { HugeiconsIcon as
|
|
3081
|
-
import { ArrowRight01Icon as
|
|
3372
|
+
import { HugeiconsIcon as HugeiconsIcon24 } from "@hugeicons/react";
|
|
3373
|
+
import { ArrowRight01Icon as ArrowRight01Icon6 } from "@hugeicons/core-free-icons";
|
|
3082
3374
|
var useScrollAnimation = () => {
|
|
3083
|
-
const elementRef =
|
|
3375
|
+
const elementRef = useRef10(null);
|
|
3084
3376
|
useEffect16(() => {
|
|
3085
3377
|
const el = elementRef.current;
|
|
3086
3378
|
if (!el) return;
|
|
@@ -3117,13 +3409,13 @@ var PortfolioHero = ({
|
|
|
3117
3409
|
secondaryCtaHref
|
|
3118
3410
|
}) => {
|
|
3119
3411
|
const heroContentRef = useScrollAnimation();
|
|
3120
|
-
return /* @__PURE__ */
|
|
3412
|
+
return /* @__PURE__ */ React36.createElement("section", { className: "pt-8 pb-16 px-6 md:px-12 flex flex-col relative overflow-hidden z-10 w-full" }, /* @__PURE__ */ React36.createElement(
|
|
3121
3413
|
"div",
|
|
3122
3414
|
{
|
|
3123
3415
|
ref: heroContentRef,
|
|
3124
3416
|
className: "w-full opacity-0 translate-y-5 transition-all duration-1000 ease-out relative z-10"
|
|
3125
3417
|
},
|
|
3126
|
-
/* @__PURE__ */
|
|
3418
|
+
/* @__PURE__ */ React36.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-5 sm:gap-8 mb-10" }, /* @__PURE__ */ React36.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__ */ React36.createElement(
|
|
3127
3419
|
Image8,
|
|
3128
3420
|
{
|
|
3129
3421
|
src: imageSrc,
|
|
@@ -3134,7 +3426,7 @@ var PortfolioHero = ({
|
|
|
3134
3426
|
sizes: "(max-width: 640px) 80px, 128px",
|
|
3135
3427
|
quality: 100
|
|
3136
3428
|
}
|
|
3137
|
-
)), /* @__PURE__ */
|
|
3429
|
+
)), /* @__PURE__ */ React36.createElement("div", { className: "flex flex-col text-left" }, /* @__PURE__ */ React36.createElement("h1", { className: " text-3xl sm:text-5xl lg:text-6xl tracking-tight text-black leading-none mb-3" }, name), socialLabel && /* @__PURE__ */ React36.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, socialLabel), socialLinkText && socialLinkHref && /* @__PURE__ */ React36.createElement(
|
|
3138
3430
|
"a",
|
|
3139
3431
|
{
|
|
3140
3432
|
href: socialLinkHref,
|
|
@@ -3144,31 +3436,31 @@ var PortfolioHero = ({
|
|
|
3144
3436
|
},
|
|
3145
3437
|
socialLinkText
|
|
3146
3438
|
))),
|
|
3147
|
-
/* @__PURE__ */
|
|
3148
|
-
/* @__PURE__ */
|
|
3439
|
+
/* @__PURE__ */ React36.createElement("p", { className: "text-[13px] leading-[1.8] max-w-4xl mb-12 text-neutral-600" }, bio),
|
|
3440
|
+
/* @__PURE__ */ React36.createElement("div", { className: "flex flex-col sm:flex-row gap-4 w-full sm:w-auto" }, primaryCtaText && primaryCtaHref && /* @__PURE__ */ React36.createElement("div", { className: "w-full sm:w-auto *:w-full" }, /* @__PURE__ */ React36.createElement(
|
|
3149
3441
|
ThreeDButton,
|
|
3150
3442
|
{
|
|
3151
3443
|
href: primaryCtaHref,
|
|
3152
3444
|
className: "py-3 tracking-widest text-[11px]"
|
|
3153
3445
|
},
|
|
3154
3446
|
primaryCtaText
|
|
3155
|
-
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
3447
|
+
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ React36.createElement(
|
|
3156
3448
|
Link8,
|
|
3157
3449
|
{
|
|
3158
3450
|
href: secondaryCtaHref,
|
|
3159
3451
|
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"
|
|
3160
3452
|
},
|
|
3161
3453
|
secondaryCtaText,
|
|
3162
|
-
/* @__PURE__ */
|
|
3454
|
+
/* @__PURE__ */ React36.createElement(HugeiconsIcon24, { icon: ArrowRight01Icon6, size: 16 })
|
|
3163
3455
|
))
|
|
3164
3456
|
));
|
|
3165
3457
|
};
|
|
3166
3458
|
|
|
3167
3459
|
// src/components/GifFeatureCard.tsx
|
|
3168
|
-
import
|
|
3460
|
+
import React37, { useState as useState23 } from "react";
|
|
3169
3461
|
import Image9 from "next/image";
|
|
3170
|
-
import { HugeiconsIcon as
|
|
3171
|
-
import { Loading03Icon as
|
|
3462
|
+
import { HugeiconsIcon as HugeiconsIcon25 } from "@hugeicons/react";
|
|
3463
|
+
import { Loading03Icon as Loading03Icon12 } from "@hugeicons/core-free-icons";
|
|
3172
3464
|
var GifFeatureCard = ({
|
|
3173
3465
|
gifSrc,
|
|
3174
3466
|
title,
|
|
@@ -3176,20 +3468,20 @@ var GifFeatureCard = ({
|
|
|
3176
3468
|
alt = "Feature animation",
|
|
3177
3469
|
className = "aspect-video"
|
|
3178
3470
|
}) => {
|
|
3179
|
-
const [isLoading, setIsLoading] =
|
|
3180
|
-
return /* @__PURE__ */
|
|
3181
|
-
|
|
3471
|
+
const [isLoading, setIsLoading] = useState23(true);
|
|
3472
|
+
return /* @__PURE__ */ React37.createElement("div", { className: `relative w-full bg-black overflow-hidden shadow-2xl ${className}` }, isLoading && /* @__PURE__ */ React37.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-black" }, /* @__PURE__ */ React37.createElement(
|
|
3473
|
+
HugeiconsIcon25,
|
|
3182
3474
|
{
|
|
3183
|
-
icon:
|
|
3475
|
+
icon: Loading03Icon12,
|
|
3184
3476
|
size: 32,
|
|
3185
3477
|
className: "animate-spin text-white"
|
|
3186
3478
|
}
|
|
3187
|
-
)), /* @__PURE__ */
|
|
3479
|
+
)), /* @__PURE__ */ React37.createElement(
|
|
3188
3480
|
"div",
|
|
3189
3481
|
{
|
|
3190
3482
|
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"}`
|
|
3191
3483
|
},
|
|
3192
|
-
/* @__PURE__ */
|
|
3484
|
+
/* @__PURE__ */ React37.createElement(
|
|
3193
3485
|
Image9,
|
|
3194
3486
|
{
|
|
3195
3487
|
src: gifSrc,
|
|
@@ -3200,16 +3492,16 @@ var GifFeatureCard = ({
|
|
|
3200
3492
|
className: "object-cover object-center pointer-events-none"
|
|
3201
3493
|
}
|
|
3202
3494
|
)
|
|
3203
|
-
), /* @__PURE__ */
|
|
3495
|
+
), /* @__PURE__ */ React37.createElement(
|
|
3204
3496
|
"div",
|
|
3205
3497
|
{
|
|
3206
3498
|
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"
|
|
3207
3499
|
}
|
|
3208
|
-
), /* @__PURE__ */
|
|
3500
|
+
), /* @__PURE__ */ React37.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__ */ React37.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__ */ React37.createElement("p", { className: "text-[13px] sm:text-[15px] leading-relaxed text-neutral-300 max-w-2xl drop-shadow-sm" }, subtitle)));
|
|
3209
3501
|
};
|
|
3210
3502
|
|
|
3211
3503
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
3212
|
-
import
|
|
3504
|
+
import React38, { useState as useState24, useEffect as useEffect17, useRef as useRef11 } from "react";
|
|
3213
3505
|
import Image10 from "next/image";
|
|
3214
3506
|
var MedicalFeatureStatsBlock = ({
|
|
3215
3507
|
bottomHeadline,
|
|
@@ -3218,8 +3510,8 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3218
3510
|
trustText,
|
|
3219
3511
|
stats
|
|
3220
3512
|
}) => {
|
|
3221
|
-
const [isAnimating, setIsAnimating] =
|
|
3222
|
-
const titleRef =
|
|
3513
|
+
const [isAnimating, setIsAnimating] = useState24(false);
|
|
3514
|
+
const titleRef = useRef11(null);
|
|
3223
3515
|
useEffect17(() => {
|
|
3224
3516
|
const observer = new IntersectionObserver(
|
|
3225
3517
|
([entry]) => {
|
|
@@ -3238,7 +3530,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3238
3530
|
}
|
|
3239
3531
|
return () => observer.disconnect();
|
|
3240
3532
|
}, []);
|
|
3241
|
-
return /* @__PURE__ */
|
|
3533
|
+
return /* @__PURE__ */ React38.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ React38.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React38.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ React38.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ React38.createElement(
|
|
3242
3534
|
"h2",
|
|
3243
3535
|
{
|
|
3244
3536
|
ref: titleRef,
|
|
@@ -3246,7 +3538,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3246
3538
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
3247
3539
|
},
|
|
3248
3540
|
bottomHeadline
|
|
3249
|
-
), /* @__PURE__ */
|
|
3541
|
+
), /* @__PURE__ */ React38.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ React38.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ React38.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ React38.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__ */ React38.createElement(
|
|
3250
3542
|
Image10,
|
|
3251
3543
|
{
|
|
3252
3544
|
src,
|
|
@@ -3255,17 +3547,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
3255
3547
|
sizes: "48px",
|
|
3256
3548
|
className: "object-cover"
|
|
3257
3549
|
}
|
|
3258
|
-
)))), /* @__PURE__ */
|
|
3550
|
+
)))), /* @__PURE__ */ React38.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ React38.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ React38.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ React38.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ React38.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ React38.createElement("h1", { className: "text-6xl gradient-text md:text-[80px] tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
|
|
3259
3551
|
};
|
|
3260
3552
|
|
|
3261
3553
|
// src/components/ConsultantShowcase.tsx
|
|
3262
|
-
import
|
|
3554
|
+
import React39, { useState as useState25 } from "react";
|
|
3263
3555
|
import Image11 from "next/image";
|
|
3264
|
-
import { HugeiconsIcon as
|
|
3265
|
-
import { Loading03Icon as
|
|
3556
|
+
import { HugeiconsIcon as HugeiconsIcon26 } from "@hugeicons/react";
|
|
3557
|
+
import { Loading03Icon as Loading03Icon13 } from "@hugeicons/core-free-icons";
|
|
3266
3558
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
3267
|
-
const [isLoading, setIsLoading] =
|
|
3268
|
-
return /* @__PURE__ */
|
|
3559
|
+
const [isLoading, setIsLoading] = useState25(true);
|
|
3560
|
+
return /* @__PURE__ */ React39.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ React39.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__ */ React39.createElement(HugeiconsIcon26, { icon: Loading03Icon13, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ React39.createElement(
|
|
3269
3561
|
Image11,
|
|
3270
3562
|
{
|
|
3271
3563
|
src,
|
|
@@ -3284,9 +3576,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
3284
3576
|
var ConsultantShowcase = ({
|
|
3285
3577
|
profiles
|
|
3286
3578
|
}) => {
|
|
3287
|
-
const [currentIndex, setCurrentIndex] =
|
|
3288
|
-
const [touchStart, setTouchStart] =
|
|
3289
|
-
const [touchEnd, setTouchEnd] =
|
|
3579
|
+
const [currentIndex, setCurrentIndex] = useState25(0);
|
|
3580
|
+
const [touchStart, setTouchStart] = useState25(null);
|
|
3581
|
+
const [touchEnd, setTouchEnd] = useState25(null);
|
|
3290
3582
|
const nextSlide = () => {
|
|
3291
3583
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
3292
3584
|
};
|
|
@@ -3311,7 +3603,7 @@ var ConsultantShowcase = ({
|
|
|
3311
3603
|
}
|
|
3312
3604
|
};
|
|
3313
3605
|
if (!profiles || profiles.length === 0) return null;
|
|
3314
|
-
return /* @__PURE__ */
|
|
3606
|
+
return /* @__PURE__ */ React39.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ React39.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React39.createElement(
|
|
3315
3607
|
"div",
|
|
3316
3608
|
{
|
|
3317
3609
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -3321,13 +3613,13 @@ var ConsultantShowcase = ({
|
|
|
3321
3613
|
},
|
|
3322
3614
|
profiles.map((profile, idx) => {
|
|
3323
3615
|
const isActive = idx === currentIndex;
|
|
3324
|
-
return /* @__PURE__ */
|
|
3616
|
+
return /* @__PURE__ */ React39.createElement(
|
|
3325
3617
|
"div",
|
|
3326
3618
|
{
|
|
3327
3619
|
key: profile.id,
|
|
3328
3620
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
3329
3621
|
},
|
|
3330
|
-
/* @__PURE__ */
|
|
3622
|
+
/* @__PURE__ */ React39.createElement(
|
|
3331
3623
|
ImageWithLoader,
|
|
3332
3624
|
{
|
|
3333
3625
|
src: profile.imageSrc,
|
|
@@ -3335,14 +3627,14 @@ var ConsultantShowcase = ({
|
|
|
3335
3627
|
priority: idx === 0
|
|
3336
3628
|
}
|
|
3337
3629
|
),
|
|
3338
|
-
/* @__PURE__ */
|
|
3339
|
-
/* @__PURE__ */
|
|
3340
|
-
/* @__PURE__ */
|
|
3630
|
+
/* @__PURE__ */ React39.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
3631
|
+
/* @__PURE__ */ React39.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" }),
|
|
3632
|
+
/* @__PURE__ */ React39.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__ */ React39.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ React39.createElement("p", { className: "text-[15px] text-white/80 tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ React39.createElement("p", { className: "text-[15px] text-white/80 tracking-wide mt-1" }, profile.description)))
|
|
3341
3633
|
);
|
|
3342
3634
|
}),
|
|
3343
|
-
/* @__PURE__ */
|
|
3344
|
-
/* @__PURE__ */
|
|
3345
|
-
/* @__PURE__ */
|
|
3635
|
+
/* @__PURE__ */ React39.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide }),
|
|
3636
|
+
/* @__PURE__ */ React39.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide }),
|
|
3637
|
+
/* @__PURE__ */ React39.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__ */ React39.createElement(
|
|
3346
3638
|
"button",
|
|
3347
3639
|
{
|
|
3348
3640
|
key: idx,
|
|
@@ -3354,13 +3646,13 @@ var ConsultantShowcase = ({
|
|
|
3354
3646
|
};
|
|
3355
3647
|
|
|
3356
3648
|
// src/components/ContentGridBlock.tsx
|
|
3357
|
-
import
|
|
3649
|
+
import React40, { useState as useState26 } from "react";
|
|
3358
3650
|
import Image12 from "next/image";
|
|
3359
|
-
import { HugeiconsIcon as
|
|
3360
|
-
import { Loading03Icon as
|
|
3651
|
+
import { HugeiconsIcon as HugeiconsIcon27 } from "@hugeicons/react";
|
|
3652
|
+
import { Loading03Icon as Loading03Icon14 } from "@hugeicons/core-free-icons";
|
|
3361
3653
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
3362
|
-
const [isLoading, setIsLoading] =
|
|
3363
|
-
return /* @__PURE__ */
|
|
3654
|
+
const [isLoading, setIsLoading] = useState26(true);
|
|
3655
|
+
return /* @__PURE__ */ React40.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ React40.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__ */ React40.createElement(HugeiconsIcon27, { icon: Loading03Icon14, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ React40.createElement(
|
|
3364
3656
|
Image12,
|
|
3365
3657
|
{
|
|
3366
3658
|
src,
|
|
@@ -3382,30 +3674,30 @@ var ContentGridBlock = ({
|
|
|
3382
3674
|
middleBottomCard,
|
|
3383
3675
|
rightCards
|
|
3384
3676
|
}) => {
|
|
3385
|
-
return /* @__PURE__ */
|
|
3677
|
+
return /* @__PURE__ */ React40.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React40.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ React40.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ React40.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ React40.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ React40.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ React40.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ React40.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React40.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ React40.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ React40.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ React40.createElement("div", null, /* @__PURE__ */ React40.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ React40.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ React40.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React40.createElement(Image12, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ React40.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React40.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ React40.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ React40.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ React40.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React40.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ React40.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ React40.createElement(Image12, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ React40.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ React40.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ React40.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__ */ React40.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ React40.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React40.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ React40.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ React40.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React40.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ React40.createElement("div", null, /* @__PURE__ */ React40.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ React40.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ React40.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React40.createElement(Image12, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ React40.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React40.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ React40.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ React40.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ React40.createElement("div", { key: idx, className: "relative w-full h-80 text-white rounded-3xl overflow-hidden group" }, /* @__PURE__ */ React40.createElement(
|
|
3386
3678
|
ImageWithLoader2,
|
|
3387
3679
|
{
|
|
3388
3680
|
src: card.bgImageSrc,
|
|
3389
3681
|
alt: card.title,
|
|
3390
3682
|
className: "absolute inset-0 w-full h-full"
|
|
3391
3683
|
}
|
|
3392
|
-
), /* @__PURE__ */
|
|
3684
|
+
), /* @__PURE__ */ React40.createElement("div", { className: "absolute inset-0 z-20 pointer-events-none" }), /* @__PURE__ */ React40.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ React40.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ React40.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ React40.createElement("div", { className: "pt-3" }, /* @__PURE__ */ React40.createElement("h4", { className: "text-[15px] text-white tracking-wide" }, card.title), /* @__PURE__ */ React40.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
|
|
3393
3685
|
};
|
|
3394
3686
|
|
|
3395
3687
|
// src/components/ManagedProjectsBlock.tsx
|
|
3396
|
-
import
|
|
3688
|
+
import React41 from "react";
|
|
3397
3689
|
import Link9 from "next/link";
|
|
3398
3690
|
var GridSection = ({
|
|
3399
3691
|
children,
|
|
3400
3692
|
isLast = false,
|
|
3401
3693
|
className = "py-8 md:py-10"
|
|
3402
|
-
}) => /* @__PURE__ */
|
|
3694
|
+
}) => /* @__PURE__ */ React41.createElement("div", { className: `relative px-5 md:px-12 ${className} ${!isLast ? "" : ""}` }, children);
|
|
3403
3695
|
var ManagedProjectsBlock = ({
|
|
3404
3696
|
tagline,
|
|
3405
3697
|
title,
|
|
3406
3698
|
projects
|
|
3407
3699
|
}) => {
|
|
3408
|
-
return /* @__PURE__ */
|
|
3700
|
+
return /* @__PURE__ */ React41.createElement("div", { className: "grow pt-4 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React41.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-5xl mx-auto overflow-hidden" }, /* @__PURE__ */ React41.createElement(
|
|
3409
3701
|
"div",
|
|
3410
3702
|
{
|
|
3411
3703
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -3414,10 +3706,10 @@ var ManagedProjectsBlock = ({
|
|
|
3414
3706
|
backgroundRepeat: "repeat"
|
|
3415
3707
|
}
|
|
3416
3708
|
}
|
|
3417
|
-
), /* @__PURE__ */
|
|
3709
|
+
), /* @__PURE__ */ React41.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React41.createElement(GridSection, null, tagline && /* @__PURE__ */ React41.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ React41.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), projects.map((project, index) => {
|
|
3418
3710
|
const isLast = index === projects.length - 1;
|
|
3419
|
-
const projectContent = /* @__PURE__ */
|
|
3420
|
-
return /* @__PURE__ */
|
|
3711
|
+
const projectContent = /* @__PURE__ */ React41.createElement("div", { className: "group block w-full" }, /* @__PURE__ */ React41.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__ */ React41.createElement("div", { className: "flex items-center gap-3 md:gap-4" }, /* @__PURE__ */ React41.createElement("h2", { className: " text-[16px] text-black transition-all flex items-center gap-2" }, project.title, /* @__PURE__ */ React41.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__ */ React41.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__ */ React41.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 shrink-0 " }, project.date)), /* @__PURE__ */ React41.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 max-w-4xl text-left transition-colors group-hover:text-black" }, project.description));
|
|
3712
|
+
return /* @__PURE__ */ React41.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__ */ React41.createElement("a", { href: project.link, target: "_blank", rel: "noopener noreferrer", className: "block outline-none" }, projectContent) : /* @__PURE__ */ React41.createElement(Link9, { href: project.link, className: "block outline-none" }, projectContent));
|
|
3421
3713
|
}))));
|
|
3422
3714
|
};
|
|
3423
3715
|
export {
|
|
@@ -3454,6 +3746,7 @@ export {
|
|
|
3454
3746
|
UniversalOrganizationPage,
|
|
3455
3747
|
UniversalProfilePage,
|
|
3456
3748
|
UniversalProfileSettings,
|
|
3749
|
+
UniversalSecurityPage,
|
|
3457
3750
|
UniversalSidebar,
|
|
3458
3751
|
UniversalTransactionPage,
|
|
3459
3752
|
UniversalWalletPage,
|