@retinalabsllc/zairusjs 16.3.5 → 17.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/index.js +42 -12
  2. package/dist/index.mjs +195 -165
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -2883,33 +2883,63 @@ var HeroSection = ({
2883
2883
  var import_react46 = __toESM(require("react"));
2884
2884
  var import_react47 = require("@hugeicons/react");
2885
2885
  var AppBento2 = ({ tagline, headline, features }) => {
2886
+ const [isAnimating, setIsAnimating] = (0, import_react46.useState)(false);
2887
+ const titleRef = (0, import_react46.useRef)(null);
2888
+ (0, import_react46.useEffect)(() => {
2889
+ const observer = new IntersectionObserver(
2890
+ ([entry]) => {
2891
+ if (entry.isIntersecting) {
2892
+ if (entry.boundingClientRect.top > 0) {
2893
+ setIsAnimating(true);
2894
+ }
2895
+ } else {
2896
+ setIsAnimating(false);
2897
+ }
2898
+ },
2899
+ { threshold: 0.1 }
2900
+ );
2901
+ if (titleRef.current) {
2902
+ observer.observe(titleRef.current);
2903
+ }
2904
+ return () => observer.disconnect();
2905
+ }, []);
2886
2906
  return /* @__PURE__ */ import_react46.default.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react46.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), /* @__PURE__ */ import_react46.default.createElement(
2887
2907
  "h2",
2888
2908
  {
2889
- className: "text-3xl tracking-tight text-black leading-[1.1]"
2909
+ ref: titleRef,
2910
+ className: ` text-3xl tracking-tight text-black leading-[1.1] ${isAnimating ? "" : ""}`,
2911
+ style: isAnimating ? { animationIterationCount: 1 } : {}
2890
2912
  },
2891
2913
  headline
2892
2914
  ))), /* @__PURE__ */ import_react46.default.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-6 gap-6" }, features.map((f, i) => {
2893
2915
  const isWhite = i === 0;
2894
- const isBrand = i === 1;
2916
+ const isBlack = i === 1;
2895
2917
  const isNeutral = i === 2;
2896
2918
  const getBgStyle = () => {
2897
- if (isWhite) return "bg-white ";
2898
- if (isBrand) return "bg-[#068afe] ";
2899
- if (isNeutral) return "bg-neutral-200 ";
2900
- return "bg-white ";
2919
+ if (isWhite) return "bg-white";
2920
+ if (isBlack) return "bg-[#068afe]";
2921
+ if (isNeutral) return "bg-neutral-200";
2922
+ return "bg-neutral-200";
2901
2923
  };
2902
- const textColor = isBrand ? "text-white" : "text-black";
2903
- const subTextColor = isBrand ? "text-white/80" : "text-neutral-600";
2904
- const labelColor = isBrand ? "text-white/70" : "text-neutral-500";
2924
+ const textColor = isBlack ? "text-white" : "text-black";
2925
+ const subTextColor = isBlack ? "text-neutral-300" : "text-neutral-600";
2926
+ const labelColor = isBlack ? "text-neutral-400" : "text-neutral-500";
2905
2927
  return /* @__PURE__ */ import_react46.default.createElement(
2906
2928
  "div",
2907
2929
  {
2908
2930
  key: i,
2909
- className: `relative rounded-2xl overflow-hidden p-8 flex flex-col min-h-75 transition-all duration-300 group text-left ${getBgStyle()}`
2931
+ className: `relative rounded-4xl overflow-hidden p-8 flex flex-col min-h-75 transition-all duration-500 group text-left ${getBgStyle()} ${f.size}`
2910
2932
  },
2911
- /* @__PURE__ */ import_react46.default.createElement("div", { className: "absolute inset-0 overflow-hidden pointer-events-none z-0" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: `absolute -bottom-8 -right-8 transform group-hover:scale-110 transition-transform duration-700 ease-out ${isBrand ? "text-white/10" : "text-black/5"}` }, /* @__PURE__ */ import_react46.default.createElement(import_react47.HugeiconsIcon, { icon: f.icon, size: 180 }))),
2912
- /* @__PURE__ */ import_react46.default.createElement("div", { className: "relative z-10 w-full h-full flex flex-col pointer-events-auto" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex items-center justify-between mb-8" }, /* @__PURE__ */ import_react46.default.createElement("span", { className: `text-[9px] tracking-widest ${labelColor}` }, f.label), /* @__PURE__ */ import_react46.default.createElement("div", { className: `p-2 rounded-full transition-colors ${isBrand ? "bg-white/20" : "bg-neutral-100"}` }, /* @__PURE__ */ import_react46.default.createElement(import_react47.HugeiconsIcon, { icon: f.icon, size: 20, className: textColor }))), /* @__PURE__ */ import_react46.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react46.default.createElement("h3", { className: `text-xl mb-2 tracking-tight ${textColor}` }, f.title), /* @__PURE__ */ import_react46.default.createElement("p", { className: `text-[13px] leading-relaxed max-w-sm ${subTextColor}` }, f.desc)))
2933
+ /* @__PURE__ */ import_react46.default.createElement(
2934
+ "div",
2935
+ {
2936
+ className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
2937
+ style: { 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.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")` }
2938
+ }
2939
+ ),
2940
+ isBlack && /* @__PURE__ */ import_react46.default.createElement("span", { className: "absolute inset-0 rounded-4xl bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none z-10" }),
2941
+ /* @__PURE__ */ import_react46.default.createElement("div", { className: "absolute inset-0 overflow-hidden pointer-events-none z-0" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: `absolute -bottom-8 -right-8 transform group-hover:scale-110 transition-transform duration-700 ease-out ${isBlack ? "text-white/5" : "text-black/5"}` }, /* @__PURE__ */ import_react46.default.createElement(import_react47.HugeiconsIcon, { icon: f.icon, size: 180 }))),
2942
+ /* @__PURE__ */ import_react46.default.createElement("div", { className: "relative z-10 w-full h-full flex flex-col pointer-events-auto" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex items-center justify-between mb-8" }, /* @__PURE__ */ import_react46.default.createElement("span", { className: `text-[9px] tracking-widest ${labelColor}` }, f.label), /* @__PURE__ */ import_react46.default.createElement("div", { className: `p-2 rounded-full transition-colors ${isBlack ? "bg-white/10" : "bg-white/50 backdrop-blur-sm"}` }, /* @__PURE__ */ import_react46.default.createElement(import_react47.HugeiconsIcon, { icon: f.icon, size: 20, className: textColor }))), /* @__PURE__ */ import_react46.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react46.default.createElement("h3", { className: `text-xl mb-2 tracking-tight ${textColor}` }, f.title), /* @__PURE__ */ import_react46.default.createElement("p", { className: `text-[13px] leading-relaxed max-w-sm ${subTextColor}` }, f.desc)))
2913
2943
  );
2914
2944
  })))));
2915
2945
  };
package/dist/index.mjs CHANGED
@@ -2873,42 +2873,72 @@ var HeroSection = ({
2873
2873
  };
2874
2874
 
2875
2875
  // src/components/AppBento2.tsx
2876
- import React27 from "react";
2876
+ import React27, { useState as useState20, useEffect as useEffect11, useRef as useRef6 } from "react";
2877
2877
  import { HugeiconsIcon as HugeiconsIcon20 } from "@hugeicons/react";
2878
2878
  var AppBento2 = ({ tagline, headline, features }) => {
2879
+ const [isAnimating, setIsAnimating] = useState20(false);
2880
+ const titleRef = useRef6(null);
2881
+ useEffect11(() => {
2882
+ const observer = new IntersectionObserver(
2883
+ ([entry]) => {
2884
+ if (entry.isIntersecting) {
2885
+ if (entry.boundingClientRect.top > 0) {
2886
+ setIsAnimating(true);
2887
+ }
2888
+ } else {
2889
+ setIsAnimating(false);
2890
+ }
2891
+ },
2892
+ { threshold: 0.1 }
2893
+ );
2894
+ if (titleRef.current) {
2895
+ observer.observe(titleRef.current);
2896
+ }
2897
+ return () => observer.disconnect();
2898
+ }, []);
2879
2899
  return /* @__PURE__ */ React27.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ React27.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ React27.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React27.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ React27.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ React27.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), /* @__PURE__ */ React27.createElement(
2880
2900
  "h2",
2881
2901
  {
2882
- className: "text-3xl tracking-tight text-black leading-[1.1]"
2902
+ ref: titleRef,
2903
+ className: ` text-3xl tracking-tight text-black leading-[1.1] ${isAnimating ? "" : ""}`,
2904
+ style: isAnimating ? { animationIterationCount: 1 } : {}
2883
2905
  },
2884
2906
  headline
2885
2907
  ))), /* @__PURE__ */ React27.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-6 gap-6" }, features.map((f, i) => {
2886
2908
  const isWhite = i === 0;
2887
- const isBrand = i === 1;
2909
+ const isBlack = i === 1;
2888
2910
  const isNeutral = i === 2;
2889
2911
  const getBgStyle = () => {
2890
- if (isWhite) return "bg-white ";
2891
- if (isBrand) return "bg-[#068afe] ";
2892
- if (isNeutral) return "bg-neutral-200 ";
2893
- return "bg-white ";
2912
+ if (isWhite) return "bg-white";
2913
+ if (isBlack) return "bg-[#068afe]";
2914
+ if (isNeutral) return "bg-neutral-200";
2915
+ return "bg-neutral-200";
2894
2916
  };
2895
- const textColor = isBrand ? "text-white" : "text-black";
2896
- const subTextColor = isBrand ? "text-white/80" : "text-neutral-600";
2897
- const labelColor = isBrand ? "text-white/70" : "text-neutral-500";
2917
+ const textColor = isBlack ? "text-white" : "text-black";
2918
+ const subTextColor = isBlack ? "text-neutral-300" : "text-neutral-600";
2919
+ const labelColor = isBlack ? "text-neutral-400" : "text-neutral-500";
2898
2920
  return /* @__PURE__ */ React27.createElement(
2899
2921
  "div",
2900
2922
  {
2901
2923
  key: i,
2902
- className: `relative rounded-2xl overflow-hidden p-8 flex flex-col min-h-75 transition-all duration-300 group text-left ${getBgStyle()}`
2924
+ className: `relative rounded-4xl overflow-hidden p-8 flex flex-col min-h-75 transition-all duration-500 group text-left ${getBgStyle()} ${f.size}`
2903
2925
  },
2904
- /* @__PURE__ */ React27.createElement("div", { className: "absolute inset-0 overflow-hidden pointer-events-none z-0" }, /* @__PURE__ */ React27.createElement("div", { className: `absolute -bottom-8 -right-8 transform group-hover:scale-110 transition-transform duration-700 ease-out ${isBrand ? "text-white/10" : "text-black/5"}` }, /* @__PURE__ */ React27.createElement(HugeiconsIcon20, { icon: f.icon, size: 180 }))),
2905
- /* @__PURE__ */ React27.createElement("div", { className: "relative z-10 w-full h-full flex flex-col pointer-events-auto" }, /* @__PURE__ */ React27.createElement("div", { className: "flex items-center justify-between mb-8" }, /* @__PURE__ */ React27.createElement("span", { className: `text-[9px] tracking-widest ${labelColor}` }, f.label), /* @__PURE__ */ React27.createElement("div", { className: `p-2 rounded-full transition-colors ${isBrand ? "bg-white/20" : "bg-neutral-100"}` }, /* @__PURE__ */ React27.createElement(HugeiconsIcon20, { icon: f.icon, size: 20, className: textColor }))), /* @__PURE__ */ React27.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React27.createElement("h3", { className: `text-xl mb-2 tracking-tight ${textColor}` }, f.title), /* @__PURE__ */ React27.createElement("p", { className: `text-[13px] leading-relaxed max-w-sm ${subTextColor}` }, f.desc)))
2926
+ /* @__PURE__ */ React27.createElement(
2927
+ "div",
2928
+ {
2929
+ className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
2930
+ style: { 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.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")` }
2931
+ }
2932
+ ),
2933
+ isBlack && /* @__PURE__ */ React27.createElement("span", { className: "absolute inset-0 rounded-4xl bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none z-10" }),
2934
+ /* @__PURE__ */ React27.createElement("div", { className: "absolute inset-0 overflow-hidden pointer-events-none z-0" }, /* @__PURE__ */ React27.createElement("div", { className: `absolute -bottom-8 -right-8 transform group-hover:scale-110 transition-transform duration-700 ease-out ${isBlack ? "text-white/5" : "text-black/5"}` }, /* @__PURE__ */ React27.createElement(HugeiconsIcon20, { icon: f.icon, size: 180 }))),
2935
+ /* @__PURE__ */ React27.createElement("div", { className: "relative z-10 w-full h-full flex flex-col pointer-events-auto" }, /* @__PURE__ */ React27.createElement("div", { className: "flex items-center justify-between mb-8" }, /* @__PURE__ */ React27.createElement("span", { className: `text-[9px] tracking-widest ${labelColor}` }, f.label), /* @__PURE__ */ React27.createElement("div", { className: `p-2 rounded-full transition-colors ${isBlack ? "bg-white/10" : "bg-white/50 backdrop-blur-sm"}` }, /* @__PURE__ */ React27.createElement(HugeiconsIcon20, { icon: f.icon, size: 20, className: textColor }))), /* @__PURE__ */ React27.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React27.createElement("h3", { className: `text-xl mb-2 tracking-tight ${textColor}` }, f.title), /* @__PURE__ */ React27.createElement("p", { className: `text-[13px] leading-relaxed max-w-sm ${subTextColor}` }, f.desc)))
2906
2936
  );
2907
2937
  })))));
2908
2938
  };
2909
2939
 
2910
2940
  // src/components/UniversalSecurityPage.tsx
2911
- import React28, { useState as useState20 } from "react";
2941
+ import React28, { useState as useState21 } from "react";
2912
2942
  import toast8 from "react-hot-toast";
2913
2943
  import { HugeiconsIcon as HugeiconsIcon21 } from "@hugeicons/react";
2914
2944
  import {
@@ -2931,13 +2961,13 @@ var UniversalSecurityPage = ({
2931
2961
  onVerifyAndEnablePasskey,
2932
2962
  onDisablePasskey
2933
2963
  }) => {
2934
- const [showPasskeyModal, setShowPasskeyModal] = useState20(false);
2935
- const [isSubmitting, setIsSubmitting] = useState20(false);
2936
- const [isPasscodeModalOpen, setIsPasscodeModalOpen] = useState20(false);
2937
- const [oldPasscode, setOldPasscode] = useState20("");
2938
- const [newPasscode, setNewPasscode] = useState20("");
2939
- const [confirmPasscode, setConfirmPasscode] = useState20("");
2940
- const [isPasscodeSubmitting, setIsPasscodeSubmitting] = useState20(false);
2964
+ const [showPasskeyModal, setShowPasskeyModal] = useState21(false);
2965
+ const [isSubmitting, setIsSubmitting] = useState21(false);
2966
+ const [isPasscodeModalOpen, setIsPasscodeModalOpen] = useState21(false);
2967
+ const [oldPasscode, setOldPasscode] = useState21("");
2968
+ const [newPasscode, setNewPasscode] = useState21("");
2969
+ const [confirmPasscode, setConfirmPasscode] = useState21("");
2970
+ const [isPasscodeSubmitting, setIsPasscodeSubmitting] = useState21(false);
2941
2971
  const handleTogglePasskey = () => {
2942
2972
  if (isPasskeyLoading) return;
2943
2973
  if (hasPasskey) {
@@ -3114,13 +3144,13 @@ var MenuRow3 = ({
3114
3144
  );
3115
3145
 
3116
3146
  // src/components/FeatureScroll.tsx
3117
- import React29, { useRef as useRef6, useState as useState21, useEffect as useEffect11 } from "react";
3147
+ import React29, { useRef as useRef7, useState as useState22, useEffect as useEffect12 } from "react";
3118
3148
  import Image4 from "next/image";
3119
3149
  import { HugeiconsIcon as HugeiconsIcon22 } from "@hugeicons/react";
3120
3150
  import { ArrowLeft01Icon as ArrowLeft01Icon9, ArrowRight01Icon as ArrowRight01Icon8, Loading03Icon as Loading03Icon13 } from "@hugeicons/core-free-icons";
3121
3151
  var FeatureCard = ({ feature, bgImage }) => {
3122
- const [isBgLoading, setIsBgLoading] = useState21(true);
3123
- const [isFgLoading, setIsFgLoading] = useState21(!!feature.image);
3152
+ const [isBgLoading, setIsBgLoading] = useState22(true);
3153
+ const [isFgLoading, setIsFgLoading] = useState22(!!feature.image);
3124
3154
  return /* @__PURE__ */ React29.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__ */ React29.createElement("div", { className: "relative w-full aspect-16/10 bg-neutral-100 rounded-2xl overflow-hidden mb-6 flex items-center justify-center" }, /* @__PURE__ */ React29.createElement(
3125
3155
  Image4,
3126
3156
  {
@@ -3158,9 +3188,9 @@ var FeatureCard = ({ feature, bgImage }) => {
3158
3188
  ))), /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ React29.createElement("h3", { className: " text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ React29.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 max-w-[90%]" }, feature.desc)));
3159
3189
  };
3160
3190
  var FeatureScroll = ({ tagline, headline, features }) => {
3161
- const scrollRef = useRef6(null);
3162
- const [canScrollLeft, setCanScrollLeft] = useState21(false);
3163
- const [canScrollRight, setCanScrollRight] = useState21(true);
3191
+ const scrollRef = useRef7(null);
3192
+ const [canScrollLeft, setCanScrollLeft] = useState22(false);
3193
+ const [canScrollRight, setCanScrollRight] = useState22(true);
3164
3194
  const checkScroll = () => {
3165
3195
  if (scrollRef.current) {
3166
3196
  const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;
@@ -3168,7 +3198,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
3168
3198
  setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 2);
3169
3199
  }
3170
3200
  };
3171
- useEffect11(() => {
3201
+ useEffect12(() => {
3172
3202
  checkScroll();
3173
3203
  window.addEventListener("resize", checkScroll);
3174
3204
  return () => window.removeEventListener("resize", checkScroll);
@@ -3249,7 +3279,7 @@ var PlatformFeatures = ({
3249
3279
  };
3250
3280
 
3251
3281
  // src/components/ManagedDocument.tsx
3252
- import React31, { useState as useState22, useEffect as useEffect12, useRef as useRef7 } from "react";
3282
+ import React31, { useState as useState23, useEffect as useEffect13, useRef as useRef8 } from "react";
3253
3283
  var ManagedDocument = ({
3254
3284
  tagline,
3255
3285
  title,
@@ -3257,9 +3287,9 @@ var ManagedDocument = ({
3257
3287
  contactText,
3258
3288
  contactEmail
3259
3289
  }) => {
3260
- const [isAnimating, setIsAnimating] = useState22(false);
3261
- const titleRef = useRef7(null);
3262
- useEffect12(() => {
3290
+ const [isAnimating, setIsAnimating] = useState23(false);
3291
+ const titleRef = useRef8(null);
3292
+ useEffect13(() => {
3263
3293
  const observer = new IntersectionObserver(
3264
3294
  ([entry]) => {
3265
3295
  if (entry.isIntersecting) {
@@ -3299,11 +3329,11 @@ var ManagedDocument = ({
3299
3329
  };
3300
3330
 
3301
3331
  // src/components/ManagedContactBlock.tsx
3302
- import React32, { useState as useState23, useEffect as useEffect13 } from "react";
3332
+ import React32, { useState as useState24, useEffect as useEffect14 } from "react";
3303
3333
  import { HugeiconsIcon as HugeiconsIcon24 } from "@hugeicons/react";
3304
3334
  var SecureEmail = ({ user, domain, className }) => {
3305
- const [isMounted, setIsMounted] = useState23(false);
3306
- useEffect13(() => {
3335
+ const [isMounted, setIsMounted] = useState24(false);
3336
+ useEffect14(() => {
3307
3337
  setIsMounted(true);
3308
3338
  }, []);
3309
3339
  if (!isMounted) {
@@ -3364,7 +3394,7 @@ var ManagedContactBlock = ({
3364
3394
  };
3365
3395
 
3366
3396
  // src/components/ManagedPricingBlock.tsx
3367
- import React33, { useState as useState24, useEffect as useEffect14, useRef as useRef8 } from "react";
3397
+ import React33, { useState as useState25, useEffect as useEffect15, useRef as useRef9 } from "react";
3368
3398
  import Link7 from "next/link";
3369
3399
  import Image5 from "next/image";
3370
3400
  var CheckIcon = ({ className = "" }) => /* @__PURE__ */ React33.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__ */ React33.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ React33.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
@@ -3375,10 +3405,10 @@ var ManagedPricingBlock = ({
3375
3405
  plans = [],
3376
3406
  tabs
3377
3407
  }) => {
3378
- const [isAnimating, setIsAnimating] = useState24(false);
3379
- const [activeTabIndex, setActiveTabIndex] = useState24(0);
3380
- const titleRef = useRef8(null);
3381
- useEffect14(() => {
3408
+ const [isAnimating, setIsAnimating] = useState25(false);
3409
+ const [activeTabIndex, setActiveTabIndex] = useState25(0);
3410
+ const titleRef = useRef9(null);
3411
+ useEffect15(() => {
3382
3412
  const observer = new IntersectionObserver(
3383
3413
  ([entry]) => {
3384
3414
  if (entry.isIntersecting) {
@@ -3593,14 +3623,14 @@ var ManagedNewsletterSplitBlock = ({
3593
3623
  };
3594
3624
 
3595
3625
  // src/components/PortfolioHero.tsx
3596
- import React37, { useEffect as useEffect15, useRef as useRef9 } from "react";
3626
+ import React37, { useEffect as useEffect16, useRef as useRef10 } from "react";
3597
3627
  import Link8 from "next/link";
3598
3628
  import Image8 from "next/image";
3599
3629
  import { HugeiconsIcon as HugeiconsIcon26 } from "@hugeicons/react";
3600
3630
  import { ArrowRight01Icon as ArrowRight01Icon9 } from "@hugeicons/core-free-icons";
3601
3631
  var useScrollAnimation = () => {
3602
- const elementRef = useRef9(null);
3603
- useEffect15(() => {
3632
+ const elementRef = useRef10(null);
3633
+ useEffect16(() => {
3604
3634
  const el = elementRef.current;
3605
3635
  if (!el) return;
3606
3636
  const observer = new IntersectionObserver(
@@ -3684,7 +3714,7 @@ var PortfolioHero = ({
3684
3714
  };
3685
3715
 
3686
3716
  // src/components/GifFeatureCard.tsx
3687
- import React38, { useState as useState25 } from "react";
3717
+ import React38, { useState as useState26 } from "react";
3688
3718
  import Image9 from "next/image";
3689
3719
  import { HugeiconsIcon as HugeiconsIcon27 } from "@hugeicons/react";
3690
3720
  import { Loading03Icon as Loading03Icon14 } from "@hugeicons/core-free-icons";
@@ -3695,7 +3725,7 @@ var GifFeatureCard = ({
3695
3725
  alt = "Feature animation",
3696
3726
  className = "aspect-video"
3697
3727
  }) => {
3698
- const [isLoading, setIsLoading] = useState25(true);
3728
+ const [isLoading, setIsLoading] = useState26(true);
3699
3729
  return /* @__PURE__ */ React38.createElement("div", { className: `relative w-full bg-black overflow-hidden shadow-2xl ${className}` }, isLoading && /* @__PURE__ */ React38.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-black" }, /* @__PURE__ */ React38.createElement(
3700
3730
  HugeiconsIcon27,
3701
3731
  {
@@ -3728,7 +3758,7 @@ var GifFeatureCard = ({
3728
3758
  };
3729
3759
 
3730
3760
  // src/components/MedicalFeatureStatsBlock.tsx
3731
- import React39, { useState as useState26, useEffect as useEffect16, useRef as useRef10 } from "react";
3761
+ import React39, { useState as useState27, useEffect as useEffect17, useRef as useRef11 } from "react";
3732
3762
  import Image10 from "next/image";
3733
3763
  var MedicalFeatureStatsBlock = ({
3734
3764
  bottomHeadline,
@@ -3737,9 +3767,9 @@ var MedicalFeatureStatsBlock = ({
3737
3767
  trustText,
3738
3768
  stats
3739
3769
  }) => {
3740
- const [isAnimating, setIsAnimating] = useState26(false);
3741
- const titleRef = useRef10(null);
3742
- useEffect16(() => {
3770
+ const [isAnimating, setIsAnimating] = useState27(false);
3771
+ const titleRef = useRef11(null);
3772
+ useEffect17(() => {
3743
3773
  const observer = new IntersectionObserver(
3744
3774
  ([entry]) => {
3745
3775
  if (entry.isIntersecting) {
@@ -3778,12 +3808,12 @@ var MedicalFeatureStatsBlock = ({
3778
3808
  };
3779
3809
 
3780
3810
  // src/components/ConsultantShowcase.tsx
3781
- import React40, { useState as useState27 } from "react";
3811
+ import React40, { useState as useState28 } from "react";
3782
3812
  import Image11 from "next/image";
3783
3813
  import { HugeiconsIcon as HugeiconsIcon28 } from "@hugeicons/react";
3784
3814
  import { Loading03Icon as Loading03Icon15 } from "@hugeicons/core-free-icons";
3785
3815
  var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
3786
- const [isLoading, setIsLoading] = useState27(true);
3816
+ const [isLoading, setIsLoading] = useState28(true);
3787
3817
  return /* @__PURE__ */ React40.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ React40.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__ */ React40.createElement(HugeiconsIcon28, { icon: Loading03Icon15, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ React40.createElement(
3788
3818
  Image11,
3789
3819
  {
@@ -3803,9 +3833,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
3803
3833
  var ConsultantShowcase = ({
3804
3834
  profiles
3805
3835
  }) => {
3806
- const [currentIndex, setCurrentIndex] = useState27(0);
3807
- const [touchStart, setTouchStart] = useState27(null);
3808
- const [touchEnd, setTouchEnd] = useState27(null);
3836
+ const [currentIndex, setCurrentIndex] = useState28(0);
3837
+ const [touchStart, setTouchStart] = useState28(null);
3838
+ const [touchEnd, setTouchEnd] = useState28(null);
3809
3839
  const nextSlide = () => {
3810
3840
  setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
3811
3841
  };
@@ -3873,7 +3903,7 @@ var ConsultantShowcase = ({
3873
3903
  };
3874
3904
 
3875
3905
  // src/components/ContentGridBlock.tsx
3876
- import React41, { useState as useState28 } from "react";
3906
+ import React41, { useState as useState29 } from "react";
3877
3907
  import Image12 from "next/image";
3878
3908
  import { HugeiconsIcon as HugeiconsIcon29 } from "@hugeicons/react";
3879
3909
  import { Loading03Icon as Loading03Icon16 } from "@hugeicons/core-free-icons";
@@ -4065,7 +4095,7 @@ var UniversalVerificationPage = ({
4065
4095
  };
4066
4096
 
4067
4097
  // src/components/UniversalRewardPage.tsx
4068
- import React44, { useState as useState29 } from "react";
4098
+ import React44, { useState as useState30 } from "react";
4069
4099
  import axios from "axios";
4070
4100
  import toast9 from "react-hot-toast";
4071
4101
  import Confetti from "react-confetti";
@@ -4082,7 +4112,7 @@ var formatWeb3Name = (name) => {
4082
4112
  };
4083
4113
  var PageSpinner4 = () => /* @__PURE__ */ React44.createElement("div", { className: "flex justify-center items-center py-12 w-full" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon31, { icon: Loading03Icon18, size: 32, className: "animate-spin mb-4 text-black" }));
4084
4114
  var AvatarLogo = ({ src, alt, name, sizeClass = "w-12 h-12" }) => {
4085
- const [isLoaded, setIsLoaded] = useState29(false);
4115
+ const [isLoaded, setIsLoaded] = useState30(false);
4086
4116
  const fallbackUrl = `/api/avatar/?name=${encodeURIComponent(name || " ")}&background=ffffff&color=000000&size=100&font-size=0.33`;
4087
4117
  const finalSrc = src || fallbackUrl;
4088
4118
  return /* @__PURE__ */ React44.createElement("div", { className: `relative shrink-0 rounded-full bg-neutral-100 flex items-center justify-center overflow-hidden border-[3px] border-white ${sizeClass}` }, !isLoaded && /* @__PURE__ */ React44.createElement(HugeiconsIcon31, { icon: Loading03Icon18, size: 16, className: "animate-spin text-neutral-400 absolute" }), /* @__PURE__ */ React44.createElement("img", { src: finalSrc, alt, onLoad: () => setIsLoaded(true), className: `w-full h-full object-cover transition-opacity duration-300 ${isLoaded ? "opacity-100" : "opacity-0"}` }));
@@ -4100,11 +4130,11 @@ var UniversalRewardPage = ({
4100
4130
  const onBackHandler = onBack ?? (() => {
4101
4131
  if (typeof window !== "undefined") window.history.back();
4102
4132
  });
4103
- const [activeTabIndex, setActiveTabIndex] = useState29(1);
4133
+ const [activeTabIndex, setActiveTabIndex] = useState30(1);
4104
4134
  const tabs = [{ label: "Today" }, { label: "Week" }, { label: "Month" }];
4105
- const [selectedReward, setSelectedReward] = useState29(null);
4106
- const [isClaiming, setIsClaiming] = useState29(false);
4107
- const [showConfetti, setShowConfetti] = useState29(false);
4135
+ const [selectedReward, setSelectedReward] = useState30(null);
4136
+ const [isClaiming, setIsClaiming] = useState30(false);
4137
+ const [showConfetti, setShowConfetti] = useState30(false);
4108
4138
  const getActiveLeaderboard = () => {
4109
4139
  if (activeTabIndex === 0) return leaderboardToday || [];
4110
4140
  if (activeTabIndex === 1) return leaderboardWeek || [];
@@ -4179,7 +4209,7 @@ var UniversalRewardPage = ({
4179
4209
  };
4180
4210
 
4181
4211
  // src/components/UniversalReferralPage.tsx
4182
- import React45, { useState as useState30 } from "react";
4212
+ import React45, { useState as useState31 } from "react";
4183
4213
  import toast10 from "react-hot-toast";
4184
4214
  import { HugeiconsIcon as HugeiconsIcon32 } from "@hugeicons/react";
4185
4215
  import {
@@ -4220,7 +4250,7 @@ var UniversalReferralPage = ({
4220
4250
  }
4221
4251
  };
4222
4252
  const AvatarLogo2 = ({ src, alt, name, sizeClass = "w-10 h-10" }) => {
4223
- const [isLoaded, setIsLoaded] = useState30(false);
4253
+ const [isLoaded, setIsLoaded] = useState31(false);
4224
4254
  const fallbackUrl = `/api/avatar/?name=${encodeURIComponent(name || " ")}&background=e0e0e0&color=000000&size=100&font-size=0.33`;
4225
4255
  const finalSrc = src || fallbackUrl;
4226
4256
  return /* @__PURE__ */ React45.createElement("div", { className: `relative shrink-0 rounded-full bg-neutral-100 flex items-center justify-center overflow-hidden border-2 border-white ${sizeClass}` }, !isLoaded && /* @__PURE__ */ React45.createElement(HugeiconsIcon32, { icon: Loading03Icon19, size: 16, className: "animate-spin text-neutral-400 absolute" }), /* @__PURE__ */ React45.createElement("img", { src: finalSrc, alt, onLoad: () => setIsLoaded(true), className: `w-full h-full object-cover transition-opacity duration-300 ${isLoaded ? "opacity-100" : "opacity-0"}` }));
@@ -4268,7 +4298,7 @@ var UniversalReferralPage = ({
4268
4298
  };
4269
4299
 
4270
4300
  // src/components/UniversalCardActionPage.tsx
4271
- import React46, { useState as useState31 } from "react";
4301
+ import React46, { useState as useState32 } from "react";
4272
4302
  import Confetti2 from "react-confetti";
4273
4303
  import { useWindowSize as useWindowSize2 } from "react-use";
4274
4304
  import { HugeiconsIcon as HugeiconsIcon33 } from "@hugeicons/react";
@@ -4319,10 +4349,10 @@ var UniversalCardActionPage = ({
4319
4349
  if (typeof window !== "undefined") window.history.back();
4320
4350
  });
4321
4351
  const { width, height } = useWindowSize2();
4322
- const [selectedTier, setSelectedTier] = useState31(null);
4323
- const [intendedAction, setIntendedAction] = useState31(null);
4324
- const [isProcessing, setIsProcessing] = useState31(false);
4325
- const [showConfetti, setShowConfetti] = useState31(false);
4352
+ const [selectedTier, setSelectedTier] = useState32(null);
4353
+ const [intendedAction, setIntendedAction] = useState32(null);
4354
+ const [isProcessing, setIsProcessing] = useState32(false);
4355
+ const [showConfetti, setShowConfetti] = useState32(false);
4326
4356
  const availableTiers = tiers.filter((t) => t.isAvailable || t.acceptPreorder || t.acceptWaitlist);
4327
4357
  const handleTierClick = (tier, explicitAction) => {
4328
4358
  setSelectedTier(tier);
@@ -4462,7 +4492,7 @@ var UniversalCardActionPage = ({
4462
4492
  };
4463
4493
 
4464
4494
  // src/components/PinDialerBottomSheet.tsx
4465
- import React47, { useState as useState32, useEffect as useEffect17 } from "react";
4495
+ import React47, { useState as useState33, useEffect as useEffect18 } from "react";
4466
4496
  import { HugeiconsIcon as HugeiconsIcon34 } from "@hugeicons/react";
4467
4497
  import { CancelCircleIcon as CancelCircleIcon10 } from "@hugeicons/core-free-icons";
4468
4498
  var PinDialerBottomSheet = ({
@@ -4472,8 +4502,8 @@ var PinDialerBottomSheet = ({
4472
4502
  onClose,
4473
4503
  onComplete
4474
4504
  }) => {
4475
- const [pin, setPin] = useState32("");
4476
- useEffect17(() => {
4505
+ const [pin, setPin] = useState33("");
4506
+ useEffect18(() => {
4477
4507
  setPin("");
4478
4508
  }, [isOpen]);
4479
4509
  const handleSubmit = (e) => {
@@ -4524,7 +4554,7 @@ var PinDialerBottomSheet = ({
4524
4554
  };
4525
4555
 
4526
4556
  // src/components/UniversalBuyCryptoPage.tsx
4527
- import React48, { useState as useState33, useEffect as useEffect18, useRef as useRef11, useCallback } from "react";
4557
+ import React48, { useState as useState34, useEffect as useEffect19, useRef as useRef12, useCallback } from "react";
4528
4558
  import toast11 from "react-hot-toast";
4529
4559
  import { HugeiconsIcon as HugeiconsIcon35 } from "@hugeicons/react";
4530
4560
  import {
@@ -4532,8 +4562,8 @@ import {
4532
4562
  CheckmarkCircle02Icon
4533
4563
  } from "@hugeicons/core-free-icons";
4534
4564
  var CircularLogo = ({ src, alt, fallbackText }) => {
4535
- const [isLoaded, setIsLoaded] = useState33(false);
4536
- const [hasError, setHasError] = useState33(false);
4565
+ const [isLoaded, setIsLoaded] = useState34(false);
4566
+ const [hasError, setHasError] = useState34(false);
4537
4567
  return /* @__PURE__ */ React48.createElement("div", { className: "relative w-5 h-5 rounded-full overflow-hidden bg-neutral-100 flex items-center justify-center shrink-0" }, !hasError && src ? /* @__PURE__ */ React48.createElement(React48.Fragment, null, !isLoaded && /* @__PURE__ */ React48.createElement("div", { className: "absolute inset-0 bg-neutral-200 animate-pulse" }), /* @__PURE__ */ React48.createElement(
4538
4568
  "img",
4539
4569
  {
@@ -4583,33 +4613,33 @@ var UniversalBuyCryptoPage = ({
4583
4613
  const onBackHandler = onBack ?? (() => {
4584
4614
  if (typeof window !== "undefined") window.history.back();
4585
4615
  });
4586
- const [selectedCrypto, setSelectedCrypto] = useState33(() => {
4616
+ const [selectedCrypto, setSelectedCrypto] = useState34(() => {
4587
4617
  if (defaultCryptoCode) {
4588
4618
  const found = cryptoOptions.find((c) => c.code === defaultCryptoCode);
4589
4619
  if (found) return found;
4590
4620
  }
4591
4621
  return cryptoOptions[0];
4592
4622
  });
4593
- const [selectedNetwork, setSelectedNetwork] = useState33(() => {
4623
+ const [selectedNetwork, setSelectedNetwork] = useState34(() => {
4594
4624
  if (defaultNetworkId && selectedCrypto?.networks) {
4595
4625
  const foundNet = selectedCrypto.networks.find((n) => n.id === defaultNetworkId);
4596
4626
  if (foundNet) return foundNet;
4597
4627
  }
4598
4628
  return selectedCrypto?.networks?.[0] || { id: "polygon", name: "Polygon", symbol: "POLYGON" };
4599
4629
  });
4600
- const [fiatAmount, setFiatAmount] = useState33("");
4601
- const [cryptoAmount, setCryptoAmount] = useState33("");
4602
- const [activeSource, setActiveSource] = useState33("FIAT");
4603
- const [isCalculating, setIsCalculating] = useState33(false);
4604
- const [rateDisplay, setRateDisplay] = useState33(null);
4605
- const [currentRateKey, setCurrentRateKey] = useState33(null);
4606
- const [recipientAddress, setRecipientAddress] = useState33(defaultRecipientAddress);
4607
- const [isAddressValid, setIsAddressValid] = useState33(false);
4608
- const [isCryptoDialogOpen, setIsCryptoDialogOpen] = useState33(false);
4609
- const [isNetworkDialogOpen, setIsNetworkDialogOpen] = useState33(false);
4610
- const [isSubmitting, setIsSubmitting] = useState33(false);
4611
- const debounceTimerRef = useRef11(null);
4612
- useEffect18(() => {
4630
+ const [fiatAmount, setFiatAmount] = useState34("");
4631
+ const [cryptoAmount, setCryptoAmount] = useState34("");
4632
+ const [activeSource, setActiveSource] = useState34("FIAT");
4633
+ const [isCalculating, setIsCalculating] = useState34(false);
4634
+ const [rateDisplay, setRateDisplay] = useState34(null);
4635
+ const [currentRateKey, setCurrentRateKey] = useState34(null);
4636
+ const [recipientAddress, setRecipientAddress] = useState34(defaultRecipientAddress);
4637
+ const [isAddressValid, setIsAddressValid] = useState34(false);
4638
+ const [isCryptoDialogOpen, setIsCryptoDialogOpen] = useState34(false);
4639
+ const [isNetworkDialogOpen, setIsNetworkDialogOpen] = useState34(false);
4640
+ const [isSubmitting, setIsSubmitting] = useState34(false);
4641
+ const debounceTimerRef = useRef12(null);
4642
+ useEffect19(() => {
4613
4643
  if (selectedCrypto?.networks?.length > 0) {
4614
4644
  const exists = selectedCrypto.networks.find((n) => n.id === selectedNetwork.id);
4615
4645
  if (!exists) {
@@ -4617,7 +4647,7 @@ var UniversalBuyCryptoPage = ({
4617
4647
  }
4618
4648
  }
4619
4649
  }, [selectedCrypto]);
4620
- useEffect18(() => {
4650
+ useEffect19(() => {
4621
4651
  if (!recipientAddress.trim()) {
4622
4652
  setIsAddressValid(false);
4623
4653
  return;
@@ -4805,7 +4835,7 @@ var UniversalBuyCryptoPage = ({
4805
4835
  };
4806
4836
 
4807
4837
  // src/components/UniversalHuddlesPage.tsx
4808
- import React49, { useState as useState34 } from "react";
4838
+ import React49, { useState as useState35 } from "react";
4809
4839
  import { HugeiconsIcon as HugeiconsIcon36 } from "@hugeicons/react";
4810
4840
  import {
4811
4841
  ArrowLeft01Icon as ArrowLeft01Icon15,
@@ -4813,8 +4843,8 @@ import {
4813
4843
  Loading03Icon as Loading03Icon22
4814
4844
  } from "@hugeicons/core-free-icons";
4815
4845
  var HuddleAvatar = ({ src, status, sizeClass = "w-10 h-10" }) => {
4816
- const [loaded, setLoaded] = useState34(false);
4817
- const [error, setError] = useState34(false);
4846
+ const [loaded, setLoaded] = useState35(false);
4847
+ const [error, setError] = useState35(false);
4818
4848
  const defaultAvatar = "https://storage.googleapis.com/retina-cloud-v2/assets/images/default_a.avif";
4819
4849
  const finalSrc = error || !src ? defaultAvatar : src;
4820
4850
  const getStatusColor = () => {
@@ -4891,7 +4921,7 @@ var UniversalHuddlesPage = ({
4891
4921
  };
4892
4922
 
4893
4923
  // src/components/UniversalMembersPage.tsx
4894
- import React50, { useState as useState35, useEffect as useEffect19, useRef as useRef12 } from "react";
4924
+ import React50, { useState as useState36, useEffect as useEffect20, useRef as useRef13 } from "react";
4895
4925
  import { HugeiconsIcon as HugeiconsIcon37 } from "@hugeicons/react";
4896
4926
  import toast12 from "react-hot-toast";
4897
4927
  import {
@@ -4903,8 +4933,8 @@ import {
4903
4933
  ListSettingIcon as ListSettingIcon2
4904
4934
  } from "@hugeicons/core-free-icons";
4905
4935
  var MemberAvatar2 = ({ src, status }) => {
4906
- const [loaded, setLoaded] = useState35(false);
4907
- const [error, setError] = useState35(false);
4936
+ const [loaded, setLoaded] = useState36(false);
4937
+ const [error, setError] = useState36(false);
4908
4938
  const defaultAvatar = "https://storage.googleapis.com/retina-cloud-v2/assets/images/avatar.avif";
4909
4939
  const finalSrc = error || !src ? defaultAvatar : src;
4910
4940
  const getStatusColor = () => {
@@ -4952,20 +4982,20 @@ var UniversalMembersPage = ({
4952
4982
  onRemoveMember,
4953
4983
  onInviteMember
4954
4984
  }) => {
4955
- const [expandedId, setExpandedId] = useState35(null);
4956
- const [memberToRemove, setMemberToRemove] = useState35(null);
4957
- const [isRemoving, setIsRemoving] = useState35(false);
4958
- const [isInviteMode, setIsInviteMode] = useState35(false);
4959
- const [inviteEmail, setInviteEmail] = useState35("");
4960
- const [isInviting, setIsInviting] = useState35(false);
4961
- const [localSearchQuery, setLocalSearchQuery] = useState35(searchQuery);
4962
- const [isTyping, setIsTyping] = useState35(false);
4963
- const [isStatusModalOpen, setIsStatusModalOpen] = useState35(false);
4964
- const [isRoleModalOpen, setIsRoleModalOpen] = useState35(false);
4965
- const statusDropdownRef = useRef12(null);
4966
- const roleDropdownRef = useRef12(null);
4985
+ const [expandedId, setExpandedId] = useState36(null);
4986
+ const [memberToRemove, setMemberToRemove] = useState36(null);
4987
+ const [isRemoving, setIsRemoving] = useState36(false);
4988
+ const [isInviteMode, setIsInviteMode] = useState36(false);
4989
+ const [inviteEmail, setInviteEmail] = useState36("");
4990
+ const [isInviting, setIsInviting] = useState36(false);
4991
+ const [localSearchQuery, setLocalSearchQuery] = useState36(searchQuery);
4992
+ const [isTyping, setIsTyping] = useState36(false);
4993
+ const [isStatusModalOpen, setIsStatusModalOpen] = useState36(false);
4994
+ const [isRoleModalOpen, setIsRoleModalOpen] = useState36(false);
4995
+ const statusDropdownRef = useRef13(null);
4996
+ const roleDropdownRef = useRef13(null);
4967
4997
  const cleanEmailId = (val) => val.toLowerCase().replace(/[^a-z0-9@._-]/g, "");
4968
- useEffect19(() => {
4998
+ useEffect20(() => {
4969
4999
  function handleClickOutside(event) {
4970
5000
  if (statusDropdownRef.current && !statusDropdownRef.current.contains(event.target)) {
4971
5001
  setIsStatusModalOpen(false);
@@ -4977,7 +5007,7 @@ var UniversalMembersPage = ({
4977
5007
  document.addEventListener("mousedown", handleClickOutside);
4978
5008
  return () => document.removeEventListener("mousedown", handleClickOutside);
4979
5009
  }, []);
4980
- useEffect19(() => {
5010
+ useEffect20(() => {
4981
5011
  setIsTyping(true);
4982
5012
  const handler = setTimeout(() => {
4983
5013
  onSearchChange(localSearchQuery);
@@ -4985,7 +5015,7 @@ var UniversalMembersPage = ({
4985
5015
  }, 600);
4986
5016
  return () => clearTimeout(handler);
4987
5017
  }, [localSearchQuery, onSearchChange]);
4988
- useEffect19(() => {
5018
+ useEffect20(() => {
4989
5019
  if (searchQuery === "" && localSearchQuery !== "") {
4990
5020
  setLocalSearchQuery("");
4991
5021
  }
@@ -5157,7 +5187,7 @@ var UniversalMembersPage = ({
5157
5187
  };
5158
5188
 
5159
5189
  // src/components/UniversalHome2.tsx
5160
- import React51, { useState as useState36 } from "react";
5190
+ import React51, { useState as useState37 } from "react";
5161
5191
  import { useRouter as useRouter3 } from "next/navigation";
5162
5192
  import { HugeiconsIcon as HugeiconsIcon38 } from "@hugeicons/react";
5163
5193
  import toast13 from "react-hot-toast";
@@ -5173,8 +5203,8 @@ import {
5173
5203
  Tick02Icon as Tick02Icon2
5174
5204
  } from "@hugeicons/core-free-icons";
5175
5205
  var OrgAvatar = ({ src, sizeClass = "w-10 h-10" }) => {
5176
- const [loaded, setLoaded] = useState36(false);
5177
- const [error, setError] = useState36(false);
5206
+ const [loaded, setLoaded] = useState37(false);
5207
+ const [error, setError] = useState37(false);
5178
5208
  const defaultAvatar = "https://storage.googleapis.com/retina-cloud-v2/assets/images/office_a.avif";
5179
5209
  const finalSrc = error || !src ? defaultAvatar : src;
5180
5210
  return /* @__PURE__ */ React51.createElement("div", { className: `relative shrink-0 ${sizeClass}` }, /* @__PURE__ */ React51.createElement("div", { className: "w-full h-full rounded-lg bg-neutral-100 flex items-center justify-center overflow-hidden" }, !loaded && !error && /* @__PURE__ */ React51.createElement(HugeiconsIcon38, { icon: Loading03Icon24, className: "animate-spin text-neutral-400 absolute", size: 14 }), /* @__PURE__ */ React51.createElement(
@@ -5207,13 +5237,13 @@ var UniversalHome2 = ({
5207
5237
  huddlesProps,
5208
5238
  onLogout
5209
5239
  }) => {
5210
- const [isAvatarLoaded, setIsAvatarLoaded] = useState36(false);
5211
- const [showNotifDialog, setShowNotifDialog] = useState36(false);
5212
- const [showOrgSwitcher, setShowOrgSwitcher] = useState36(false);
5213
- const [selectedNotif, setSelectedNotif] = useState36(null);
5214
- const [isResolving, setIsResolving] = useState36(false);
5215
- const [showLogoutConfirm, setShowLogoutConfirm] = useState36(false);
5216
- const [isLoggingOut, setIsLoggingOut] = useState36(false);
5240
+ const [isAvatarLoaded, setIsAvatarLoaded] = useState37(false);
5241
+ const [showNotifDialog, setShowNotifDialog] = useState37(false);
5242
+ const [showOrgSwitcher, setShowOrgSwitcher] = useState37(false);
5243
+ const [selectedNotif, setSelectedNotif] = useState37(null);
5244
+ const [isResolving, setIsResolving] = useState37(false);
5245
+ const [showLogoutConfirm, setShowLogoutConfirm] = useState37(false);
5246
+ const [isLoggingOut, setIsLoggingOut] = useState37(false);
5217
5247
  const router = useRouter3();
5218
5248
  const fallbackAvatarUrl = "https://storage.googleapis.com/retina-cloud-v2/assets/images/avatar.avif";
5219
5249
  const finalAvatarSrc = avatarSrc || fallbackAvatarUrl;
@@ -5386,7 +5416,7 @@ var UniversalHome2 = ({
5386
5416
  };
5387
5417
 
5388
5418
  // src/components/UniversalSettings.tsx
5389
- import React52, { useState as useState37, useEffect as useEffect20, useRef as useRef13 } from "react";
5419
+ import React52, { useState as useState38, useEffect as useEffect21, useRef as useRef14 } from "react";
5390
5420
  import toast14 from "react-hot-toast";
5391
5421
  import { HugeiconsIcon as HugeiconsIcon39 } from "@hugeicons/react";
5392
5422
  import {
@@ -5401,8 +5431,8 @@ import {
5401
5431
  PlusSignIcon as PlusSignIcon3
5402
5432
  } from "@hugeicons/core-free-icons";
5403
5433
  var MemberAvatar3 = ({ src, status, sizeClass = "w-10 h-10" }) => {
5404
- const [loaded, setLoaded] = useState37(false);
5405
- const [error, setError] = useState37(false);
5434
+ const [loaded, setLoaded] = useState38(false);
5435
+ const [error, setError] = useState38(false);
5406
5436
  const defaultAvatar = "https://storage.googleapis.com/retina-cloud-v2/assets/images/avatar.avif";
5407
5437
  const finalSrc = error || !src ? defaultAvatar : src;
5408
5438
  const getStatusColor = () => {
@@ -5461,36 +5491,36 @@ var UniversalSettings = ({
5461
5491
  });
5462
5492
  const isOrg = accountType === "ORGANIZATION";
5463
5493
  const canManage = userRole === "ADMIN" || userRole === "MANAGER";
5464
- const [activeTab, setActiveTab] = useState37(isOrg ? "MEMBERS" : "ACCOUNT");
5465
- const [expandedId, setExpandedId] = useState37(null);
5466
- const [memberToRemove, setMemberToRemove] = useState37(null);
5467
- const [isRemoving, setIsRemoving] = useState37(false);
5468
- const [isInviteMode, setIsInviteMode] = useState37(false);
5469
- const [inviteEmail, setInviteEmail] = useState37("");
5470
- const [isInviting, setIsInviting] = useState37(false);
5471
- const [localSearchQuery, setLocalSearchQuery] = useState37(membersSearchQuery);
5472
- const [isTyping, setIsTyping] = useState37(false);
5473
- const isFirstSearchMount = useRef13(true);
5474
- const [isStatusModalOpen, setIsStatusModalOpen] = useState37(false);
5475
- const [isRoleModalOpen, setIsRoleModalOpen] = useState37(false);
5476
- const [roleEditTarget, setRoleEditTarget] = useState37(null);
5477
- const [isUpdatingRole, setIsUpdatingRole] = useState37(false);
5478
- const [orgName, setOrgName] = useState37(initialOrgName);
5479
- const [orgSlug, setOrgSlug] = useState37(initialOrgSlug);
5480
- const [firstName, setFirstName] = useState37("");
5481
- const [lastName, setLastName] = useState37("");
5482
- const [isCheckingSlug, setIsCheckingSlug] = useState37(false);
5483
- const [slugAvailable, setSlugAvailable] = useState37(null);
5484
- const [isSavingOrg, setIsSavingOrg] = useState37(false);
5485
- const [isSavingProfile, setIsSavingProfile] = useState37(false);
5486
- useEffect20(() => {
5494
+ const [activeTab, setActiveTab] = useState38(isOrg ? "MEMBERS" : "ACCOUNT");
5495
+ const [expandedId, setExpandedId] = useState38(null);
5496
+ const [memberToRemove, setMemberToRemove] = useState38(null);
5497
+ const [isRemoving, setIsRemoving] = useState38(false);
5498
+ const [isInviteMode, setIsInviteMode] = useState38(false);
5499
+ const [inviteEmail, setInviteEmail] = useState38("");
5500
+ const [isInviting, setIsInviting] = useState38(false);
5501
+ const [localSearchQuery, setLocalSearchQuery] = useState38(membersSearchQuery);
5502
+ const [isTyping, setIsTyping] = useState38(false);
5503
+ const isFirstSearchMount = useRef14(true);
5504
+ const [isStatusModalOpen, setIsStatusModalOpen] = useState38(false);
5505
+ const [isRoleModalOpen, setIsRoleModalOpen] = useState38(false);
5506
+ const [roleEditTarget, setRoleEditTarget] = useState38(null);
5507
+ const [isUpdatingRole, setIsUpdatingRole] = useState38(false);
5508
+ const [orgName, setOrgName] = useState38(initialOrgName);
5509
+ const [orgSlug, setOrgSlug] = useState38(initialOrgSlug);
5510
+ const [firstName, setFirstName] = useState38("");
5511
+ const [lastName, setLastName] = useState38("");
5512
+ const [isCheckingSlug, setIsCheckingSlug] = useState38(false);
5513
+ const [slugAvailable, setSlugAvailable] = useState38(null);
5514
+ const [isSavingOrg, setIsSavingOrg] = useState38(false);
5515
+ const [isSavingProfile, setIsSavingProfile] = useState38(false);
5516
+ useEffect21(() => {
5487
5517
  setOrgName(initialOrgName || "");
5488
5518
  setOrgSlug(initialOrgSlug || "");
5489
5519
  const parts = (initialFullName || "").split(" ");
5490
5520
  setFirstName(parts[0] || "");
5491
5521
  setLastName(parts.slice(1).join(" ") || "");
5492
5522
  }, [initialOrgName, initialOrgSlug, initialFullName]);
5493
- useEffect20(() => {
5523
+ useEffect21(() => {
5494
5524
  if (activeTab !== "MEMBERS") return;
5495
5525
  if (isFirstSearchMount.current) {
5496
5526
  isFirstSearchMount.current = false;
@@ -5547,7 +5577,7 @@ var UniversalSettings = ({
5547
5577
  }
5548
5578
  };
5549
5579
  const activeExpandedMember = expandedId ? members.find((m) => m.id === expandedId) : null;
5550
- useEffect20(() => {
5580
+ useEffect21(() => {
5551
5581
  if (!isOrg || !orgSlug || orgSlug === initialOrgSlug) {
5552
5582
  setSlugAvailable(null);
5553
5583
  setIsCheckingSlug(false);
@@ -5642,7 +5672,7 @@ var UniversalSettings = ({
5642
5672
  };
5643
5673
 
5644
5674
  // src/components/UniversalCreateHuddle.tsx
5645
- import React53, { useState as useState38, useEffect as useEffect21, useRef as useRef14 } from "react";
5675
+ import React53, { useState as useState39, useEffect as useEffect22, useRef as useRef15 } from "react";
5646
5676
  import toast15 from "react-hot-toast";
5647
5677
  import { HugeiconsIcon as HugeiconsIcon40 } from "@hugeicons/react";
5648
5678
  import {
@@ -5657,8 +5687,8 @@ import {
5657
5687
  CircleLock02Icon as CircleLock02Icon4
5658
5688
  } from "@hugeicons/core-free-icons";
5659
5689
  var MemberAvatar4 = ({ src, sizeClass = "w-10 h-10" }) => {
5660
- const [loaded, setLoaded] = useState38(false);
5661
- const [error, setError] = useState38(false);
5690
+ const [loaded, setLoaded] = useState39(false);
5691
+ const [error, setError] = useState39(false);
5662
5692
  const defaultAvatar = "https://storage.googleapis.com/retina-cloud-v2/assets/images/avatar.avif";
5663
5693
  return /* @__PURE__ */ React53.createElement("div", { className: `relative shrink-0 ${sizeClass}` }, /* @__PURE__ */ React53.createElement("div", { className: "w-full h-full rounded-lg bg-neutral-100 flex items-center justify-center overflow-hidden" }, !loaded && !error && /* @__PURE__ */ React53.createElement(HugeiconsIcon40, { icon: Loading03Icon26, className: "animate-spin text-neutral-400 absolute", size: 14 }), /* @__PURE__ */ React53.createElement(
5664
5694
  "img",
@@ -5701,28 +5731,28 @@ var UniversalCreateHuddle = ({
5701
5731
  onCreateSubmit
5702
5732
  }) => {
5703
5733
  const canManage = userRole === "ADMIN" || userRole === "MANAGER";
5704
- const [huddleDate, setHuddleDate] = useState38(() => {
5734
+ const [huddleDate, setHuddleDate] = useState39(() => {
5705
5735
  const d = /* @__PURE__ */ new Date();
5706
5736
  d.setHours(d.getHours() + 1, 0, 0, 0);
5707
5737
  return d;
5708
5738
  });
5709
- const [title, setTitle] = useState38("");
5710
- const [isPrivate, setIsPrivate] = useState38(false);
5711
- const [timezone, setTimezone] = useState38("UTC");
5712
- useEffect21(() => {
5739
+ const [title, setTitle] = useState39("");
5740
+ const [isPrivate, setIsPrivate] = useState39(false);
5741
+ const [timezone, setTimezone] = useState39("UTC");
5742
+ useEffect22(() => {
5713
5743
  try {
5714
5744
  setTimezone(Intl.DateTimeFormat().resolvedOptions().timeZone);
5715
5745
  } catch (e) {
5716
5746
  }
5717
5747
  }, []);
5718
- const [calendarMode, setCalendarMode] = useState38(null);
5719
- const [showTimezoneModal, setShowTimezoneModal] = useState38(false);
5720
- const [showMembersModal, setShowMembersModal] = useState38(false);
5721
- const [selectedParticipants, setSelectedParticipants] = useState38(/* @__PURE__ */ new Set());
5722
- const [isSubmitting, setIsSubmitting] = useState38(false);
5723
- const [localSearchQuery, setLocalSearchQuery] = useState38(membersSearchQuery);
5724
- const [isTyping, setIsTyping] = useState38(false);
5725
- const typingTimer = useRef14(null);
5748
+ const [calendarMode, setCalendarMode] = useState39(null);
5749
+ const [showTimezoneModal, setShowTimezoneModal] = useState39(false);
5750
+ const [showMembersModal, setShowMembersModal] = useState39(false);
5751
+ const [selectedParticipants, setSelectedParticipants] = useState39(/* @__PURE__ */ new Set());
5752
+ const [isSubmitting, setIsSubmitting] = useState39(false);
5753
+ const [localSearchQuery, setLocalSearchQuery] = useState39(membersSearchQuery);
5754
+ const [isTyping, setIsTyping] = useState39(false);
5755
+ const typingTimer = useRef15(null);
5726
5756
  const handleSearchInput = (e) => {
5727
5757
  const val = e.target.value;
5728
5758
  setLocalSearchQuery(val);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@retinalabsllc/zairusjs",
3
- "version": "16.3.5",
3
+ "version": "17.1.0",
4
4
  "description": "A perceptive, Ai data driven Next.js UI component library.",
5
5
  "author": "Retina Labs Company",
6
6
  "license": "MIT",