@retinalabsllc/zairusjs 0.4.7 → 0.4.9
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 +1 -10
- package/dist/index.d.ts +1 -10
- package/dist/index.js +177 -207
- package/dist/index.mjs +96 -126
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -95,7 +95,7 @@ var Faq = ({
|
|
|
95
95
|
"div",
|
|
96
96
|
{
|
|
97
97
|
key: index,
|
|
98
|
-
className: `transition-all duration-300 ${!isLast ? "border-b border-neutral-
|
|
98
|
+
className: `transition-all duration-300 ${!isLast ? "border-b border-neutral-100" : ""}`
|
|
99
99
|
},
|
|
100
100
|
/* @__PURE__ */ import_react.default.createElement(
|
|
101
101
|
"button",
|
|
@@ -406,7 +406,7 @@ function AuthFormInner({
|
|
|
406
406
|
}
|
|
407
407
|
return false;
|
|
408
408
|
};
|
|
409
|
-
return /* @__PURE__ */ import_react6.default.createElement("div", { className: "w-full max-w-md mx-auto
|
|
409
|
+
return /* @__PURE__ */ import_react6.default.createElement("div", { className: "w-full max-w-md mx-auto flex flex-col items-center gap-4 relative z-10 animate-in fade-in duration-300" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "w-full bg-white rounded-2xl border border-neutral-100/50 overflow-hidden" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "p-8 md:p-12" }, step === "INPUT" && /* @__PURE__ */ import_react6.default.createElement("div", { className: "animate-in fade-in duration-300" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "mb-12 text-center mt-2" }, /* @__PURE__ */ import_react6.default.createElement("h2", { className: " font-serif text-xl text-black mb-2 tracking-tight " }, mode === "LOGIN" ? `${companyName} ${workspaceLabel}` : "Create Account"), /* @__PURE__ */ import_react6.default.createElement("div", { className: "text-[13px] text-neutral-500" }, mode === "LOGIN" ? /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, "Don't have an account? ", /* @__PURE__ */ import_react6.default.createElement("button", { type: "button", onClick: () => {
|
|
410
410
|
setMode("SIGNUP");
|
|
411
411
|
setSignupStep(getInitialSignupStep());
|
|
412
412
|
}, className: "text-black transition-colors ml-1" }, "Sign up")) : /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, "Already have an account? ", /* @__PURE__ */ import_react6.default.createElement("button", { type: "button", onClick: () => setMode("LOGIN"), className: "text-black transition-colors ml-1" }, "Log in")))), /* @__PURE__ */ import_react6.default.createElement("form", { className: "space-y-6", autoComplete: "off", onSubmit: (e) => {
|
|
@@ -422,7 +422,7 @@ function AuthFormInner({
|
|
|
422
422
|
onChange: (e) => setFirstName(cleanAlpha(e.target.value)),
|
|
423
423
|
required: true,
|
|
424
424
|
autoFocus: true,
|
|
425
|
-
className: "w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-
|
|
425
|
+
className: "w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-100 text-black outline-none focus:border-black transition-all duration-300",
|
|
426
426
|
placeholder: "First name"
|
|
427
427
|
}
|
|
428
428
|
)), /* @__PURE__ */ import_react6.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react6.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, "Last Name"), /* @__PURE__ */ import_react6.default.createElement(
|
|
@@ -432,7 +432,7 @@ function AuthFormInner({
|
|
|
432
432
|
value: lastName,
|
|
433
433
|
onChange: (e) => setLastName(cleanAlpha(e.target.value)),
|
|
434
434
|
required: true,
|
|
435
|
-
className: "w-full px-2 py-3 bg-transparent text-sm border-b border-neutral-
|
|
435
|
+
className: "w-full px-2 py-3 bg-transparent text-sm border-b border-neutral-100 text-black outline-none focus:border-black transition-all duration-300",
|
|
436
436
|
placeholder: "Last name"
|
|
437
437
|
}
|
|
438
438
|
))), mode === "SIGNUP" && signupStep === "ORGANIZATION" && requireOrganization && /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react6.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, "Organization Name"), /* @__PURE__ */ import_react6.default.createElement(
|
|
@@ -443,7 +443,7 @@ function AuthFormInner({
|
|
|
443
443
|
onChange: (e) => setOrgName(cleanOrgName(e.target.value)),
|
|
444
444
|
required: true,
|
|
445
445
|
autoFocus: true,
|
|
446
|
-
className: "w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-
|
|
446
|
+
className: "w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-100 text-black outline-none focus:border-black transition-all duration-300",
|
|
447
447
|
placeholder: "Acme Corporation"
|
|
448
448
|
}
|
|
449
449
|
))), (mode === "LOGIN" || mode === "SIGNUP" && signupStep === "EMAIL_ID") && /* @__PURE__ */ import_react6.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react6.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, "Retina ID"), /* @__PURE__ */ import_react6.default.createElement(
|
|
@@ -454,7 +454,7 @@ function AuthFormInner({
|
|
|
454
454
|
onChange: (e) => setEmailId(cleanEmailId(e.target.value)),
|
|
455
455
|
required: true,
|
|
456
456
|
autoFocus: true,
|
|
457
|
-
className: "w-full px-2 py-3 bg-transparent text-sm border-b border-neutral-
|
|
457
|
+
className: "w-full px-2 py-3 bg-transparent text-sm border-b border-neutral-100 text-black outline-none focus:border-black transition-all duration-300",
|
|
458
458
|
placeholder: "name@company.com"
|
|
459
459
|
}
|
|
460
460
|
)), mode === "SIGNUP" && /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex items-start gap-3 mt-4" }, /* @__PURE__ */ import_react6.default.createElement(
|
|
@@ -491,7 +491,7 @@ function AuthFormInner({
|
|
|
491
491
|
maxLength: 1,
|
|
492
492
|
value: digit,
|
|
493
493
|
onChange: (e) => handleOtpChange(index, e.target.value),
|
|
494
|
-
className: "w-10 h-10 text-center text-xl bg-transparent border-b-2 border-neutral-
|
|
494
|
+
className: "w-10 h-10 text-center text-xl bg-transparent border-b-2 border-neutral-100 text-black outline-none focus:border-black transition-all duration-300"
|
|
495
495
|
}
|
|
496
496
|
))), /* @__PURE__ */ import_react6.default.createElement(
|
|
497
497
|
ThreeDActionButton,
|
|
@@ -502,7 +502,17 @@ function AuthFormInner({
|
|
|
502
502
|
className: "w-full"
|
|
503
503
|
},
|
|
504
504
|
"Verify Code"
|
|
505
|
-
)))))
|
|
505
|
+
))))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex flex-col items-center gap-1.5 animate-in slide-in-from-bottom-3 duration-500 delay-100" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex items-center gap-2.5 px-3 py-1.5 bg-white rounded-full" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "w-5 h-5 bg-neutral-100 rounded-full flex items-center justify-center shrink-0 overflow-hidden relative" }, /* @__PURE__ */ import_react6.default.createElement(
|
|
506
|
+
"img",
|
|
507
|
+
{
|
|
508
|
+
src: "/assets/retina-logo.jpg",
|
|
509
|
+
alt: "Retina Labs Logo",
|
|
510
|
+
className: "w-full h-full object-cover rounded-full",
|
|
511
|
+
onError: (e) => {
|
|
512
|
+
e.currentTarget.style.display = "none";
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
)), /* @__PURE__ */ import_react6.default.createElement("span", { className: "text-[11px] font-medium text-neutral-700 tracking-tight pr-1" }, "Retina Labs Company")), /* @__PURE__ */ import_react6.default.createElement("span", { className: "text-[8px] text-neutral-400 tracking-[0.25em] uppercase" }, "Authentication")));
|
|
506
516
|
}
|
|
507
517
|
var ZairusAuth = (props) => {
|
|
508
518
|
if (props.useRecaptcha && props.recaptchaSiteKey) {
|
|
@@ -590,9 +600,9 @@ var Footer = ({
|
|
|
590
600
|
const toggleColumn = (idx) => {
|
|
591
601
|
setOpenCol(openCol === idx ? null : idx);
|
|
592
602
|
};
|
|
593
|
-
return /* @__PURE__ */ import_react8.default.createElement("div", { className: "" }, topSection && topSection, /* @__PURE__ */ import_react8.default.createElement("footer", { className: "relative px-6 overflow-hidden flex flex-col" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "relative w-full max-w-7xl mx-auto z-20 flex flex-col" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "relative py-12 md:py-16" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start gap-12 lg:gap-16 mb-12 text-left" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "w-full lg:max-w-sm flex flex-col items-start justify-between shrink-0" }, /* @__PURE__ */ import_react8.default.createElement("div", null, /* @__PURE__ */ import_react8.default.createElement("p", { className: "text-[12px] text-neutral-600 leading-relaxed pr-4" }, description))), /* @__PURE__ */ import_react8.default.createElement("div", { className: "w-full lg:flex-1 lg:max-w-2xl" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "hidden md:grid grid-cols-2 gap-x-16 lg:gap-x-24 gap-y-12" }, columns.map((col, idx) => /* @__PURE__ */ import_react8.default.createElement("div", { key: idx, className: "flex flex-col" }, /* @__PURE__ */ import_react8.default.createElement("h4", { className: "text-[11px] tracking-[0.2em] text-black mb-6 uppercase" }, col.title), /* @__PURE__ */ import_react8.default.createElement("ul", { className: "space-y-4 text-[13px] text-neutral-500" }, col.links.map((link, lIdx) => /* @__PURE__ */ import_react8.default.createElement("li", { key: lIdx }, link.isExternal ? /* @__PURE__ */ import_react8.default.createElement("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", className: "hover:text-black transition-colors block truncate" }, link.label) : /* @__PURE__ */ import_react8.default.createElement(import_link3.default, { href: link.href, className: "hover:text-black transition-colors block truncate" }, link.label))))))), /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex flex-col md:hidden w-full border-t border-neutral-
|
|
603
|
+
return /* @__PURE__ */ import_react8.default.createElement("div", { className: "" }, topSection && topSection, /* @__PURE__ */ import_react8.default.createElement("footer", { className: "relative px-6 overflow-hidden flex flex-col" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "relative w-full max-w-7xl mx-auto z-20 flex flex-col" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "relative py-12 md:py-16" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start gap-12 lg:gap-16 mb-12 text-left" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "w-full lg:max-w-sm flex flex-col items-start justify-between shrink-0" }, /* @__PURE__ */ import_react8.default.createElement("div", null, /* @__PURE__ */ import_react8.default.createElement("p", { className: "text-[12px] text-neutral-600 leading-relaxed pr-4" }, description))), /* @__PURE__ */ import_react8.default.createElement("div", { className: "w-full lg:flex-1 lg:max-w-2xl" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "hidden md:grid grid-cols-2 gap-x-16 lg:gap-x-24 gap-y-12" }, columns.map((col, idx) => /* @__PURE__ */ import_react8.default.createElement("div", { key: idx, className: "flex flex-col" }, /* @__PURE__ */ import_react8.default.createElement("h4", { className: "text-[11px] tracking-[0.2em] text-black mb-6 uppercase" }, col.title), /* @__PURE__ */ import_react8.default.createElement("ul", { className: "space-y-4 text-[13px] text-neutral-500" }, col.links.map((link, lIdx) => /* @__PURE__ */ import_react8.default.createElement("li", { key: lIdx }, link.isExternal ? /* @__PURE__ */ import_react8.default.createElement("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", className: "hover:text-black transition-colors block truncate" }, link.label) : /* @__PURE__ */ import_react8.default.createElement(import_link3.default, { href: link.href, className: "hover:text-black transition-colors block truncate" }, link.label))))))), /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex flex-col md:hidden w-full border-t border-neutral-100 mt-4" }, columns.map((col, idx) => {
|
|
594
604
|
const isOpen = openCol === idx;
|
|
595
|
-
return /* @__PURE__ */ import_react8.default.createElement("div", { key: idx, className: "border-b border-neutral-
|
|
605
|
+
return /* @__PURE__ */ import_react8.default.createElement("div", { key: idx, className: "border-b border-neutral-100" }, /* @__PURE__ */ import_react8.default.createElement(
|
|
596
606
|
"button",
|
|
597
607
|
{
|
|
598
608
|
onClick: () => toggleColumn(idx),
|
|
@@ -610,7 +620,7 @@ var Footer = ({
|
|
|
610
620
|
/* @__PURE__ */ import_react8.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M19 9l-7 7-7-7" })
|
|
611
621
|
)
|
|
612
622
|
), /* @__PURE__ */ import_react8.default.createElement("div", { className: `grid transition-all duration-300 ease-in-out ${isOpen ? "grid-rows-[1fr] pb-6 opacity-100" : "grid-rows-[0fr] opacity-0"}` }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "overflow-hidden" }, /* @__PURE__ */ import_react8.default.createElement("ul", { className: "space-y-4 text-[13px] text-neutral-500 pt-2" }, col.links.map((link, lIdx) => /* @__PURE__ */ import_react8.default.createElement("li", { key: lIdx }, link.isExternal ? /* @__PURE__ */ import_react8.default.createElement("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", className: "hover:text-black transition-colors" }, link.label) : /* @__PURE__ */ import_react8.default.createElement(import_link3.default, { href: link.href, className: "hover:text-black transition-colors" }, link.label)))))));
|
|
613
|
-
})))), /* @__PURE__ */ import_react8.default.createElement("div", { className: "pt-8 mt-4 border-t border-neutral-
|
|
623
|
+
})))), /* @__PURE__ */ import_react8.default.createElement("div", { className: "pt-8 mt-4 border-t border-neutral-100 flex flex-col-reverse md:flex-row justify-between items-start md:items-center gap-6 relative z-20" }, /* @__PURE__ */ import_react8.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-widest text-left" }, copyrightText), socialLinks && socialLinks.length > 0 && /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex items-center gap-6" }, socialLinks.map((social, idx) => /* @__PURE__ */ import_react8.default.createElement(
|
|
614
624
|
"a",
|
|
615
625
|
{
|
|
616
626
|
key: idx,
|
|
@@ -657,7 +667,7 @@ var HeroSection = ({
|
|
|
657
667
|
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")`
|
|
658
668
|
}
|
|
659
669
|
}
|
|
660
|
-
), /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative max-w-5xl mx-auto px-4 sm:px-6 w-full flex flex-col items-center text-center z-10" }, badgeText && /* @__PURE__ */ import_react10.default.createElement("div", { className: "inline-flex items-center gap-1.5 mb-6 px-4 py-1.5 rounded-full bg-white/10 backdrop-blur-md shadow-xs" }, /* @__PURE__ */ import_react10.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-white uppercase" }, badgeText)), /* @__PURE__ */ import_react10.default.createElement("h1", { className: " text-[40px] md:text-5xl lg:text-7xl text-white tracking-tight leading-[1.05] max-w-4xl mb-4" }, titlePrefix), /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex justify-center mt-2 mb-10 md:mb-14" }, /* @__PURE__ */ import_react10.default.createElement("span", { className: "relative font-serif inline-block mx-1.5 px-4 py-2 md:py-3 bg-[#21a473]/25 border border-[#3ae9a8] rounded-sm text-white select-none text-4xl lg:text-6xl tracking-tight" }, /* @__PURE__ */ import_react10.default.createElement("span", { className: "absolute top-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#21a473] rounded-[1px] z-10" }), /* @__PURE__ */ import_react10.default.createElement("span", { className: "absolute top-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#21a473] rounded-[1px] z-10" }), /* @__PURE__ */ import_react10.default.createElement("span", { className: "absolute bottom-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#21a473] rounded-[1px] z-10" }), /* @__PURE__ */ import_react10.default.createElement("span", { className: "absolute bottom-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#21a473] rounded-[1px] z-10" }), highlightText, /* @__PURE__ */ import_react10.default.createElement("span", { className: "absolute -bottom-5 -right-5 flex items-center z-20 pointer-events-none select-none filter drop-shadow-[0_2px_4px_rgba(0,0,0,0.25)]" }, /* @__PURE__ */ import_react10.default.createElement("svg", { width: "18", height: "22", viewBox: "0 0 16 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: "transform -rotate-12" }, /* @__PURE__ */ import_react10.default.createElement("path", { d: "M1 1V17.8L5.8 13.1H12.8L1 1Z", fill: "#21a473", stroke: "white", strokeWidth: "1.8", strokeLinejoin: "round" })), /* @__PURE__ */ import_react10.default.createElement("span", { className: "ml-1 bg-[#21a473] text-[10px] text-white px-2 py-0.5 rounded-full border border-white tracking-wide" }, cursorLabel)))), subtitle && /* @__PURE__ */ import_react10.default.createElement("p", { className: "text-[13px] md:text-[15px] text-[#bbf7df]/90 max-w-xl mx-auto mb-10 font-light leading-relaxed" }, subtitle), /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 justify-center items-center w-full px-2 sm:px-0 mx-auto mb-10" }, ctaText && ctaHref && /* @__PURE__ */ import_react10.default.createElement("div", { className: "w-full sm:w-60 flex justify-center *:w-full" }, /* @__PURE__ */ import_react10.default.createElement(ThreeDButton, { href: ctaHref }, ctaText)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react10.default.createElement(
|
|
670
|
+
), /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative max-w-5xl mx-auto px-4 sm:px-6 w-full flex flex-col items-center text-center z-10" }, badgeText && /* @__PURE__ */ import_react10.default.createElement("div", { className: "inline-flex items-center gap-1.5 mb-6 px-4 py-1.5 rounded-full bg-white/10 backdrop-blur-md shadow-xs" }, /* @__PURE__ */ import_react10.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-white uppercase" }, badgeText)), /* @__PURE__ */ import_react10.default.createElement("h1", { className: " text-[40px] font-light md:text-5xl lg:text-7xl text-white tracking-tight leading-[1.05] max-w-4xl mb-4" }, titlePrefix), /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex justify-center mt-2 mb-10 md:mb-14" }, /* @__PURE__ */ import_react10.default.createElement("span", { className: "relative font-serif inline-block mx-1.5 px-4 py-2 md:py-3 bg-[#21a473]/25 border border-[#3ae9a8] rounded-sm text-white select-none text-4xl lg:text-6xl tracking-tight" }, /* @__PURE__ */ import_react10.default.createElement("span", { className: "absolute top-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#21a473] rounded-[1px] z-10" }), /* @__PURE__ */ import_react10.default.createElement("span", { className: "absolute top-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#21a473] rounded-[1px] z-10" }), /* @__PURE__ */ import_react10.default.createElement("span", { className: "absolute bottom-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#21a473] rounded-[1px] z-10" }), /* @__PURE__ */ import_react10.default.createElement("span", { className: "absolute bottom-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#21a473] rounded-[1px] z-10" }), highlightText, /* @__PURE__ */ import_react10.default.createElement("span", { className: "absolute -bottom-5 -right-5 flex items-center z-20 pointer-events-none select-none filter drop-shadow-[0_2px_4px_rgba(0,0,0,0.25)]" }, /* @__PURE__ */ import_react10.default.createElement("svg", { width: "18", height: "22", viewBox: "0 0 16 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: "transform -rotate-12" }, /* @__PURE__ */ import_react10.default.createElement("path", { d: "M1 1V17.8L5.8 13.1H12.8L1 1Z", fill: "#21a473", stroke: "white", strokeWidth: "1.8", strokeLinejoin: "round" })), /* @__PURE__ */ import_react10.default.createElement("span", { className: "ml-1 bg-[#21a473] text-[10px] text-white px-2 py-0.5 rounded-full border border-white tracking-wide" }, cursorLabel)))), subtitle && /* @__PURE__ */ import_react10.default.createElement("p", { className: "text-[13px] md:text-[15px] text-[#bbf7df]/90 max-w-xl mx-auto mb-10 font-light leading-relaxed" }, subtitle), /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 justify-center items-center w-full px-2 sm:px-0 mx-auto mb-10" }, ctaText && ctaHref && /* @__PURE__ */ import_react10.default.createElement("div", { className: "w-full sm:w-60 flex justify-center *:w-full" }, /* @__PURE__ */ import_react10.default.createElement(ThreeDButton, { href: ctaHref }, ctaText)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react10.default.createElement(
|
|
661
671
|
import_link4.default,
|
|
662
672
|
{
|
|
663
673
|
href: secondaryCtaHref,
|
|
@@ -783,7 +793,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
783
793
|
{
|
|
784
794
|
onClick: () => scroll("left"),
|
|
785
795
|
disabled: !canScrollLeft,
|
|
786
|
-
className: "p-4 border border-neutral-
|
|
796
|
+
className: "p-4 border border-neutral-100 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 disabled:hover:border-neutral-100 disabled:hover:text-neutral-500 disabled:cursor-not-allowed transition-all outline-none",
|
|
787
797
|
"aria-label": "Previous feature"
|
|
788
798
|
},
|
|
789
799
|
/* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons3.ArrowLeft01Icon, size: 20 })
|
|
@@ -792,7 +802,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
792
802
|
{
|
|
793
803
|
onClick: () => scroll("right"),
|
|
794
804
|
disabled: !canScrollRight,
|
|
795
|
-
className: "p-4 border border-neutral-
|
|
805
|
+
className: "p-4 border border-neutral-100 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 disabled:hover:border-neutral-100 disabled:hover:text-neutral-500 disabled:cursor-not-allowed transition-all outline-none",
|
|
796
806
|
"aria-label": "Next feature"
|
|
797
807
|
},
|
|
798
808
|
/* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons3.ArrowRight01Icon, size: 20 })
|
|
@@ -809,7 +819,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
809
819
|
{
|
|
810
820
|
onClick: () => scroll("left"),
|
|
811
821
|
disabled: !canScrollLeft,
|
|
812
|
-
className: "p-4 border border-neutral-
|
|
822
|
+
className: "p-4 border border-neutral-100 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 transition-all outline-none"
|
|
813
823
|
},
|
|
814
824
|
/* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons3.ArrowLeft01Icon, size: 20 })
|
|
815
825
|
), /* @__PURE__ */ import_react13.default.createElement(
|
|
@@ -817,7 +827,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
817
827
|
{
|
|
818
828
|
onClick: () => scroll("right"),
|
|
819
829
|
disabled: !canScrollRight,
|
|
820
|
-
className: "p-4 border border-neutral-
|
|
830
|
+
className: "p-4 border border-neutral-100 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 transition-all outline-none"
|
|
821
831
|
},
|
|
822
832
|
/* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons3.ArrowRight01Icon, size: 20 })
|
|
823
833
|
))));
|
|
@@ -896,7 +906,7 @@ var ManagedDocument = ({
|
|
|
896
906
|
}) => {
|
|
897
907
|
return (
|
|
898
908
|
// Outer layout wrapper (takes up available space, adds padding)
|
|
899
|
-
/* @__PURE__ */ import_react19.default.createElement("div", { className: "grow pt-28 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 text-left block uppercase" }, tagline), /* @__PURE__ */ import_react19.default.createElement("h1", { className: " font-serif text-4xl md:text-5xl mt-4 text-black tracking-tight text-left" }, title)), sections.map((section, index) => /* @__PURE__ */ import_react19.default.createElement("div", { key: index, className: "relative px-5 md:px-12 py-8 md:py-10" }, section.heading && /* @__PURE__ */ import_react19.default.createElement("h2", { className: " text-[11px] tracking-[0.2em] text-black mb-4 text-left uppercase" }, section.heading), section.paragraphs && section.paragraphs.length > 0 && /* @__PURE__ */ import_react19.default.createElement("div", { className: "text-[14px] leading-[1.8] text-neutral-700 space-y-4 text-left font-light" }, section.paragraphs.map((text, pIndex) => /* @__PURE__ */ import_react19.default.createElement("p", { key: pIndex }, text))), section.quote && /* @__PURE__ */ import_react19.default.createElement("div", { className: `border-neutral-100 border rounded-xl p-6 ${section.paragraphs && section.paragraphs.length > 0 ? "mt-6" : ""}` }, /* @__PURE__ */ import_react19.default.createElement("p", { className: "
|
|
909
|
+
/* @__PURE__ */ import_react19.default.createElement("div", { className: "grow pt-28 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 text-left block uppercase" }, tagline), /* @__PURE__ */ import_react19.default.createElement("h1", { className: " font-serif text-4xl md:text-5xl mt-4 text-black tracking-tight text-left" }, title)), sections.map((section, index) => /* @__PURE__ */ import_react19.default.createElement("div", { key: index, className: "relative px-5 md:px-12 py-8 md:py-10" }, section.heading && /* @__PURE__ */ import_react19.default.createElement("h2", { className: " text-[11px] tracking-[0.2em] text-black mb-4 text-left uppercase" }, section.heading), section.paragraphs && section.paragraphs.length > 0 && /* @__PURE__ */ import_react19.default.createElement("div", { className: "text-[14px] leading-[1.8] text-neutral-700 space-y-4 text-left font-light" }, section.paragraphs.map((text, pIndex) => /* @__PURE__ */ import_react19.default.createElement("p", { key: pIndex }, text))), section.quote && /* @__PURE__ */ import_react19.default.createElement("div", { className: `border-neutral-100 border rounded-xl p-6 ${section.paragraphs && section.paragraphs.length > 0 ? "mt-6" : ""}` }, /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-neutral-900 text-[14px] md:text-[14px] leading-relaxed" }, '"', section.quote, '"')))), (contactText || contactEmail) && /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-[12px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ import_react19.default.createElement(
|
|
900
910
|
"a",
|
|
901
911
|
{
|
|
902
912
|
href: `mailto:${contactEmail}`,
|
|
@@ -1214,7 +1224,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
1214
1224
|
backgroundRepeat: "repeat"
|
|
1215
1225
|
}
|
|
1216
1226
|
}
|
|
1217
|
-
), /* @__PURE__ */ import_react30.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react30.default.createElement("div", { className: "mb-10 border-b border-neutral-
|
|
1227
|
+
), /* @__PURE__ */ import_react30.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react30.default.createElement("div", { className: "mb-10 border-b border-neutral-100 pb-8 text-center md:text-left" }, tagline && /* @__PURE__ */ import_react30.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 uppercase" }, tagline), /* @__PURE__ */ import_react30.default.createElement("h1", { className: " font-serif text-4xl md:text-5xl mt-4 text-black tracking-tight mb-4" }, title), subtitle && /* @__PURE__ */ import_react30.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 uppercase" }, subtitle)), /* @__PURE__ */ import_react30.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-10 text-center md:text-left" }, description), children && /* @__PURE__ */ import_react30.default.createElement("div", { className: "mb-8 text-left" }, children), /* @__PURE__ */ import_react30.default.createElement("div", { className: "text-center md:text-left mt-10 space-y-6" }, dividerText && /* @__PURE__ */ import_react30.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ import_react30.default.createElement("div", { className: "grow h-px bg-neutral-200" }), /* @__PURE__ */ import_react30.default.createElement("span", { className: "shrink mx-4 text-[10px] tracking-[0.2em] text-neutral-400 uppercase" }, dividerText), /* @__PURE__ */ import_react30.default.createElement("div", { className: "grow h-px bg-neutral-200" })), ctaText && ctaHref && /* @__PURE__ */ import_react30.default.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ import_react30.default.createElement(
|
|
1218
1228
|
ThreeDButton,
|
|
1219
1229
|
{
|
|
1220
1230
|
href: ctaHref,
|
|
@@ -1247,7 +1257,7 @@ var TextInput = ({
|
|
|
1247
1257
|
readOnly,
|
|
1248
1258
|
autoComplete: "off",
|
|
1249
1259
|
spellCheck: "false",
|
|
1250
|
-
className: `w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-
|
|
1260
|
+
className: `w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-100 text-black transition-all outline-none focus:border-black disabled:opacity-50 ${readOnly ? "cursor-pointer" : ""}`
|
|
1251
1261
|
}
|
|
1252
1262
|
));
|
|
1253
1263
|
var NumberInput = ({
|
|
@@ -1270,7 +1280,7 @@ var NumberInput = ({
|
|
|
1270
1280
|
disabled,
|
|
1271
1281
|
autoComplete: "off",
|
|
1272
1282
|
spellCheck: "false",
|
|
1273
|
-
className: "w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-
|
|
1283
|
+
className: "w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-100 text-black transition-all outline-none focus:border-black disabled:opacity-50"
|
|
1274
1284
|
}
|
|
1275
1285
|
));
|
|
1276
1286
|
|
|
@@ -1324,7 +1334,7 @@ var PortfolioHero = ({
|
|
|
1324
1334
|
ref: heroContentRef,
|
|
1325
1335
|
className: "w-full opacity-0 translate-y-5 transition-all duration-1000 ease-out relative z-10"
|
|
1326
1336
|
},
|
|
1327
|
-
/* @__PURE__ */ import_react32.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-5 sm:gap-8 mb-10" }, /* @__PURE__ */ import_react32.default.createElement("div", { className: "relative w-20 h-20 sm:w-32 sm:h-32 rounded-full overflow-hidden border border-neutral-
|
|
1337
|
+
/* @__PURE__ */ import_react32.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-5 sm:gap-8 mb-10" }, /* @__PURE__ */ import_react32.default.createElement("div", { className: "relative w-20 h-20 sm:w-32 sm:h-32 rounded-full overflow-hidden border border-neutral-100 shrink-0 shadow-sm" }, /* @__PURE__ */ import_react32.default.createElement(
|
|
1328
1338
|
import_image7.default,
|
|
1329
1339
|
{
|
|
1330
1340
|
src: imageSrc,
|
|
@@ -1419,11 +1429,11 @@ var ProductHero = ({
|
|
|
1419
1429
|
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")`
|
|
1420
1430
|
}
|
|
1421
1431
|
}
|
|
1422
|
-
), /* @__PURE__ */ import_react34.default.createElement("div", { className: "relative max-w-5xl mx-auto px-4 sm:px-6 w-full flex flex-col items-center text-center z-10" }, badgeText && /* @__PURE__ */ import_react34.default.createElement("div", { className: "inline-flex items-center gap-1.5 mb-6 px-4 py-1.5 rounded-full bg-neutral-100 border border-neutral-
|
|
1432
|
+
), /* @__PURE__ */ import_react34.default.createElement("div", { className: "relative max-w-5xl mx-auto px-4 sm:px-6 w-full flex flex-col items-center text-center z-10" }, badgeText && /* @__PURE__ */ import_react34.default.createElement("div", { className: "inline-flex items-center gap-1.5 mb-6 px-4 py-1.5 rounded-full bg-neutral-100 border border-neutral-100 backdrop-blur-md shadow-xs" }, /* @__PURE__ */ import_react34.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-600 uppercase font-medium" }, badgeText)), /* @__PURE__ */ import_react34.default.createElement("h1", { className: " font-serif text-[40px] font-light md:text-5xl lg:text-7xl text-black tracking-tight leading-[1.05] max-w-4xl mb-4" }, titlePrefix, " ", /* @__PURE__ */ import_react34.default.createElement("span", { className: "bg-linear-to-r from-[#043324] to-[#21a473] bg-clip-text text-transparent italic pr-2" }, highlightText)), subtitle && /* @__PURE__ */ import_react34.default.createElement("p", { className: "text-[13px] md:text-[16px] text-neutral-600 max-w-xl mx-auto mb-10 font-light leading-relaxed" }, subtitle), /* @__PURE__ */ import_react34.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 justify-center items-center w-full px-2 sm:px-0 mx-auto mb-12 relative z-30" }, ctaText && ctaHref && /* @__PURE__ */ import_react34.default.createElement("div", { className: "w-full sm:w-60 flex justify-center *:w-full" }, /* @__PURE__ */ import_react34.default.createElement(ThreeDButton, { href: ctaHref }, ctaText)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react34.default.createElement(
|
|
1423
1433
|
import_link8.default,
|
|
1424
1434
|
{
|
|
1425
1435
|
href: secondaryCtaHref,
|
|
1426
|
-
className: "w-full sm:w-60 inline-flex items-center justify-center text-[12px] tracking-widest rounded-full px-8 py-2.5 bg-white text-black border border-neutral-
|
|
1436
|
+
className: "w-full sm:w-60 inline-flex items-center justify-center text-[12px] tracking-widest rounded-full px-8 py-2.5 bg-white text-black border border-neutral-100 transition-colors hover:bg-neutral-50 outline-none shadow-sm"
|
|
1427
1437
|
},
|
|
1428
1438
|
secondaryCtaText
|
|
1429
1439
|
)), /* @__PURE__ */ import_react34.default.createElement("div", { className: "relative w-full max-w-4xl mx-auto px-2 sm:px-6 mt-8 z-20" }, /* @__PURE__ */ import_react34.default.createElement("div", { className: "relative w-full aspect-4/3 md:aspect-video flex items-center justify-center" }, /* @__PURE__ */ import_react34.default.createElement("button", { onClick: prevSlide, className: "absolute left-0 sm:-left-12 z-40 p-2 text-neutral-400 hover:text-black transition-colors outline-none", "aria-label": "Previous image" }, /* @__PURE__ */ import_react34.default.createElement("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react34.default.createElement("path", { d: "M15 18l-6-6 6-6" }))), /* @__PURE__ */ import_react34.default.createElement("button", { onClick: nextSlide, className: "absolute right-0 sm:-right-12 z-40 p-2 text-neutral-400 hover:text-black transition-colors outline-none", "aria-label": "Next image" }, /* @__PURE__ */ import_react34.default.createElement("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react34.default.createElement("path", { d: "M9 18l6-6-6-6" }))), images.map((src, idx) => /* @__PURE__ */ import_react34.default.createElement(
|
|
@@ -1640,15 +1650,15 @@ var UniversalHeader = ({
|
|
|
1640
1650
|
"button",
|
|
1641
1651
|
{
|
|
1642
1652
|
onClick: () => setShowSwitcherDialog(true),
|
|
1643
|
-
className: "w-10 h-10 rounded-full border border-neutral-
|
|
1653
|
+
className: "w-10 h-10 rounded-full border border-neutral-100 bg-white flex items-center justify-center text-neutral-500 hover:text-black hover:border-black hover:bg-neutral-50 transition-all group outline-none",
|
|
1644
1654
|
"aria-label": "Switch Workspace"
|
|
1645
1655
|
},
|
|
1646
|
-
/* @__PURE__ */ import_react39.default.createElement(import_react40.HugeiconsIcon, { icon: import_core_free_icons10.
|
|
1656
|
+
/* @__PURE__ */ import_react39.default.createElement(import_react40.HugeiconsIcon, { icon: import_core_free_icons10.NewOfficeIcon, size: 16, className: "transition-transform group-hover:-translate-x-0.5" })
|
|
1647
1657
|
), showLogoutAction && /* @__PURE__ */ import_react39.default.createElement(
|
|
1648
1658
|
"button",
|
|
1649
1659
|
{
|
|
1650
1660
|
onClick: () => setShowLogoutDialog(true),
|
|
1651
|
-
className: "w-10 h-10 rounded-full border border-neutral-
|
|
1661
|
+
className: "w-10 h-10 rounded-full border border-neutral-100 bg-white flex items-center justify-center text-neutral-500 hover:text-black hover:border-black hover:bg-neutral-50 transition-all group outline-none",
|
|
1652
1662
|
"aria-label": "Secure Logout"
|
|
1653
1663
|
},
|
|
1654
1664
|
/* @__PURE__ */ import_react39.default.createElement(import_react40.HugeiconsIcon, { icon: import_core_free_icons10.LogoutCircle02Icon, size: 16, className: "transition-transform group-hover:-translate-x-0.5" })
|
|
@@ -1656,7 +1666,7 @@ var UniversalHeader = ({
|
|
|
1656
1666
|
import_link10.default,
|
|
1657
1667
|
{
|
|
1658
1668
|
href: backUrl,
|
|
1659
|
-
className: "flex items-center justify-center w-10 h-10 border border-neutral-
|
|
1669
|
+
className: "flex items-center justify-center w-10 h-10 border border-neutral-100 bg-white rounded-full text-neutral-500 hover:text-black hover:border-black hover:bg-neutral-50 transition-all group outline-none",
|
|
1660
1670
|
"aria-label": "Go Back"
|
|
1661
1671
|
},
|
|
1662
1672
|
/* @__PURE__ */ import_react39.default.createElement(import_react40.HugeiconsIcon, { icon: import_core_free_icons10.ArrowLeft01Icon, size: 16, className: "transition-transform group-hover:-translate-x-0.5" })
|
|
@@ -1802,7 +1812,7 @@ var UniversalOrganizationPage = ({
|
|
|
1802
1812
|
placeholder: "Acme Corporation",
|
|
1803
1813
|
maxLength: 50
|
|
1804
1814
|
}
|
|
1805
|
-
), /* @__PURE__ */ import_react41.default.createElement("div", { className: "space-y-2 relative w-full" }, /* @__PURE__ */ import_react41.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, "Organization Slug"), /* @__PURE__ */ import_react41.default.createElement("div", { className: "flex items-center relative w-full" }, /* @__PURE__ */ import_react41.default.createElement("span", { className: "text-neutral-400 text-sm py-3 pr-2 border-b border-neutral-
|
|
1815
|
+
), /* @__PURE__ */ import_react41.default.createElement("div", { className: "space-y-2 relative w-full" }, /* @__PURE__ */ import_react41.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, "Organization Slug"), /* @__PURE__ */ import_react41.default.createElement("div", { className: "flex items-center relative w-full" }, /* @__PURE__ */ import_react41.default.createElement("span", { className: "text-neutral-400 text-sm py-3 pr-2 border-b border-neutral-100 shrink-0" }, slugPrefixUrl), /* @__PURE__ */ import_react41.default.createElement(
|
|
1806
1816
|
"input",
|
|
1807
1817
|
{
|
|
1808
1818
|
type: "text",
|
|
@@ -1811,7 +1821,7 @@ var UniversalOrganizationPage = ({
|
|
|
1811
1821
|
onChange: (e) => handleSlugChange(e.target.value),
|
|
1812
1822
|
spellCheck: "false",
|
|
1813
1823
|
autoComplete: "off",
|
|
1814
|
-
className: "w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-
|
|
1824
|
+
className: "w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-100 text-black transition-all outline-none focus:border-black pr-8 disabled:opacity-50 disabled:cursor-not-allowed",
|
|
1815
1825
|
placeholder: "acme-corp"
|
|
1816
1826
|
}
|
|
1817
1827
|
), /* @__PURE__ */ import_react41.default.createElement("div", { className: "absolute right-2 top-1/2 -translate-y-1/2" }, isCheckingSlug && /* @__PURE__ */ import_react41.default.createElement(InputSpinner2, null), !isCheckingSlug && !isReadOnly && slug !== initialSlug && slug.length >= 3 && slugAvailable === false && /* @__PURE__ */ import_react41.default.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-red-100" }, /* @__PURE__ */ import_react41.default.createElement("svg", { className: "w-2 h-2 text-red-600", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ import_react41.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" }))), !isCheckingSlug && !isReadOnly && slug !== initialSlug && slug.length >= 3 && slugAvailable === true && /* @__PURE__ */ import_react41.default.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-green-100" }, /* @__PURE__ */ import_react41.default.createElement("svg", { className: "w-2 h-2 text-green-600", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ import_react41.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M16.707 5.293a1 1 0 00-1.414 0L8 12.586 4.707 9.293a1 1 0 10-1.414 1.414l4 4a1 1 0 001.414 0l8-8a1 1 0 000-1.414z" })))))), /* @__PURE__ */ import_react41.default.createElement("div", { className: "pt-8 mt-2 flex items-center gap-4" }, /* @__PURE__ */ import_react41.default.createElement(
|
|
@@ -2008,7 +2018,7 @@ var resolveThemeColor = (colorCode) => {
|
|
|
2008
2018
|
case "COLOR_F":
|
|
2009
2019
|
return "bg-pink-100 border-pink-200";
|
|
2010
2020
|
default:
|
|
2011
|
-
return "bg-neutral-100 border-neutral-
|
|
2021
|
+
return "bg-neutral-100 border-neutral-100";
|
|
2012
2022
|
}
|
|
2013
2023
|
};
|
|
2014
2024
|
var cleanName = (val) => val.replace(/[^a-zA-Z\s-]/g, "").substring(0, 50);
|
|
@@ -2114,7 +2124,7 @@ var UniversalMembersPage = ({
|
|
|
2114
2124
|
setSelectedMember(null);
|
|
2115
2125
|
setIsRoleModalOpen(false);
|
|
2116
2126
|
};
|
|
2117
|
-
return /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl fade-in duration-300 p-6 rounded-2xl bg-white
|
|
2127
|
+
return /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl fade-in duration-300 p-6 rounded-2xl bg-white " }, /* @__PURE__ */ import_react43.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, currentView === "list" && /* @__PURE__ */ import_react43.default.createElement(import_react43.default.Fragment, null, /* @__PURE__ */ import_react43.default.createElement("div", null, /* @__PURE__ */ import_react43.default.createElement("h1", { className: " font-serif text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ import_react43.default.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription)), canManage && /* @__PURE__ */ import_react43.default.createElement(
|
|
2118
2128
|
ThreeDActionButton,
|
|
2119
2129
|
{
|
|
2120
2130
|
onClick: () => setCurrentView("invite"),
|
|
@@ -2141,13 +2151,13 @@ var UniversalMembersPage = ({
|
|
|
2141
2151
|
onLoad: (e) => e.currentTarget.classList.remove("blur-sm")
|
|
2142
2152
|
}
|
|
2143
2153
|
)) : /* @__PURE__ */ import_react43.default.createElement("div", { className: `w-10 h-10 shrink-0 rounded-full flex items-center justify-center text-black text-xs ${resolveThemeColor(member.profileColor)}` }, getInitials(member.fullName)), /* @__PURE__ */ import_react43.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react43.default.createElement("p", { className: "text-sm text-black truncate pr-2 sm:pr-4" }, member.fullName, " ", member.userId === currentUserId && /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-neutral-400 ml-1 sm:ml-2" }, "(You)")), /* @__PURE__ */ import_react43.default.createElement("p", { className: "text-xs text-neutral-500 truncate pr-2 sm:pr-4 mt-0.5" }, member.email))),
|
|
2144
|
-
/* @__PURE__ */ import_react43.default.createElement("div", { className: `shrink-0 pl-2 sm:pl-4 transition-opacity hidden sm:block ${canManage ? "opacity-0 group-hover:opacity-100" : "opacity-100"}` }, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-black border border-neutral-
|
|
2154
|
+
/* @__PURE__ */ import_react43.default.createElement("div", { className: `shrink-0 pl-2 sm:pl-4 transition-opacity hidden sm:block ${canManage ? "opacity-0 group-hover:opacity-100" : "opacity-100"}` }, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-black border border-neutral-100 px-4 py-2 rounded-full bg-white whitespace-nowrap" }, canManage ? "Manage" : "View"))
|
|
2145
2155
|
))), /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex items-center justify-between p-4 sm:p-5" }, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", totalPages), /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react43.default.createElement(
|
|
2146
2156
|
"button",
|
|
2147
2157
|
{
|
|
2148
2158
|
onClick: () => onPageChange(currentPage - 1),
|
|
2149
2159
|
disabled: currentPage === 1 || isLoading,
|
|
2150
|
-
className: "p-2 border border-neutral-
|
|
2160
|
+
className: "p-2 border border-neutral-100 rounded-full bg-white text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none"
|
|
2151
2161
|
},
|
|
2152
2162
|
/* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons11.ArrowLeft01Icon, size: 14 })
|
|
2153
2163
|
), /* @__PURE__ */ import_react43.default.createElement(
|
|
@@ -2155,7 +2165,7 @@ var UniversalMembersPage = ({
|
|
|
2155
2165
|
{
|
|
2156
2166
|
onClick: () => onPageChange(currentPage + 1),
|
|
2157
2167
|
disabled: currentPage >= totalPages || isLoading,
|
|
2158
|
-
className: "p-2 border border-neutral-
|
|
2168
|
+
className: "p-2 border border-neutral-100 rounded-full bg-white text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none"
|
|
2159
2169
|
},
|
|
2160
2170
|
/* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons11.ArrowRight01Icon, size: 14 })
|
|
2161
2171
|
))))), currentView === "details" && selectedMember && /* @__PURE__ */ import_react43.default.createElement("div", { className: "w-full max-w-2xl text-left" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex flex-col gap-8" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex items-center gap-5" }, selectedMember.displayImage && selectedMember.displayImage !== "NO_IMAGE" ? /* @__PURE__ */ import_react43.default.createElement("div", { className: "w-16 h-16 shrink-0 rounded-full overflow-hidden bg-neutral-100" }, /* @__PURE__ */ import_react43.default.createElement(
|
|
@@ -2166,16 +2176,16 @@ var UniversalMembersPage = ({
|
|
|
2166
2176
|
className: "w-full h-full object-cover blur-sm transition-all duration-300",
|
|
2167
2177
|
onLoad: (e) => e.currentTarget.classList.remove("blur-sm")
|
|
2168
2178
|
}
|
|
2169
|
-
)) : /* @__PURE__ */ import_react43.default.createElement("div", { className: `w-16 h-16 shrink-0 rounded-full flex items-center justify-center text-black text-sm ${resolveThemeColor(selectedMember.profileColor)}` }, getInitials(selectedMember.fullName)), /* @__PURE__ */ import_react43.default.createElement("div", null, /* @__PURE__ */ import_react43.default.createElement("h2", { className: " font-serif text-lg text-black" }, selectedMember.fullName), /* @__PURE__ */ import_react43.default.createElement("p", { className: "text-sm text-neutral-500 mt-1" }, selectedMember.email))), /* @__PURE__ */ import_react43.default.createElement("div", { className: "grid grid-cols-2 gap-6 border-t border-neutral-
|
|
2179
|
+
)) : /* @__PURE__ */ import_react43.default.createElement("div", { className: `w-16 h-16 shrink-0 rounded-full flex items-center justify-center text-black text-sm ${resolveThemeColor(selectedMember.profileColor)}` }, getInitials(selectedMember.fullName)), /* @__PURE__ */ import_react43.default.createElement("div", null, /* @__PURE__ */ import_react43.default.createElement("h2", { className: " font-serif text-lg text-black" }, selectedMember.fullName), /* @__PURE__ */ import_react43.default.createElement("p", { className: "text-sm text-neutral-500 mt-1" }, selectedMember.email))), /* @__PURE__ */ import_react43.default.createElement("div", { className: "grid grid-cols-2 gap-6 border-t border-neutral-100 pt-8" }, /* @__PURE__ */ import_react43.default.createElement("div", null, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-3" }, "Role"), canChangeRoles && selectedMember.userId !== currentUserId ? /* @__PURE__ */ import_react43.default.createElement(
|
|
2170
2180
|
"button",
|
|
2171
2181
|
{
|
|
2172
2182
|
onClick: () => !isUpdatingRole && setIsRoleModalOpen(true),
|
|
2173
2183
|
disabled: isUpdatingRole,
|
|
2174
|
-
className: `flex items-center gap-3 text-xs text-black pl-4 pr-3 py-2 border rounded-full transition-colors disabled:opacity-50 outline-none ${isRoleModalOpen ? "bg-neutral-50 border-neutral-300" : "bg-white border-neutral-
|
|
2184
|
+
className: `flex items-center gap-3 text-xs text-black pl-4 pr-3 py-2 border rounded-full transition-colors disabled:opacity-50 outline-none ${isRoleModalOpen ? "bg-neutral-50 border-neutral-300" : "bg-white border-neutral-100 hover:bg-neutral-50"}`
|
|
2175
2185
|
},
|
|
2176
2186
|
selectedMember.role,
|
|
2177
2187
|
isUpdatingRole ? /* @__PURE__ */ import_react43.default.createElement(ButtonSpinner3, null) : /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons11.ArrowDown01Icon, size: 14, className: "text-neutral-400" })
|
|
2178
|
-
) : /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-xs text-black bg-neutral-50 px-4 py-2 rounded-full inline-block" }, selectedMember.role)), /* @__PURE__ */ import_react43.default.createElement("div", null, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-3" }, "Joined Date"), /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-sm text-black" }, new Date(selectedMember.joinedAt).toLocaleDateString()))), canManage && selectedMember.userId !== currentUserId && /* @__PURE__ */ import_react43.default.createElement("div", { className: "pt-8 mt-2 border-t border-neutral-
|
|
2188
|
+
) : /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-xs text-black bg-neutral-50 px-4 py-2 rounded-full inline-block" }, selectedMember.role)), /* @__PURE__ */ import_react43.default.createElement("div", null, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-3" }, "Joined Date"), /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-sm text-black" }, new Date(selectedMember.joinedAt).toLocaleDateString()))), canManage && selectedMember.userId !== currentUserId && /* @__PURE__ */ import_react43.default.createElement("div", { className: "pt-8 mt-2 border-t border-neutral-100" }, /* @__PURE__ */ import_react43.default.createElement(
|
|
2179
2189
|
"button",
|
|
2180
2190
|
{
|
|
2181
2191
|
onClick: () => setMemberToDelete(selectedMember),
|
|
@@ -2243,29 +2253,22 @@ var UniversalMembersPage = ({
|
|
|
2243
2253
|
// src/components/UniversalProfileSettings.tsx
|
|
2244
2254
|
var import_react45 = __toESM(require("react"));
|
|
2245
2255
|
var import_react_hot_toast6 = __toESM(require("react-hot-toast"));
|
|
2246
|
-
var import_react46 = require("@hugeicons/react");
|
|
2247
|
-
var import_core_free_icons12 = require("@hugeicons/core-free-icons");
|
|
2248
2256
|
var UniversalProfileSettings = ({
|
|
2249
2257
|
initialFirstName,
|
|
2250
2258
|
initialLastName,
|
|
2251
2259
|
email,
|
|
2252
|
-
initialProfileColor,
|
|
2253
2260
|
accountStatus = "GOOD",
|
|
2254
2261
|
memberSince,
|
|
2255
2262
|
isReadOnly = false,
|
|
2256
|
-
themeColors,
|
|
2257
2263
|
onSaveProfile
|
|
2258
2264
|
}) => {
|
|
2259
2265
|
const [firstName, setFirstName] = (0, import_react45.useState)(initialFirstName);
|
|
2260
2266
|
const [lastName, setLastName] = (0, import_react45.useState)(initialLastName);
|
|
2261
|
-
const [profileColor, setProfileColor] = (0, import_react45.useState)(initialProfileColor);
|
|
2262
2267
|
const [isSubmitting, setIsSubmitting] = (0, import_react45.useState)(false);
|
|
2263
|
-
const [isColorModalOpen, setIsColorModalOpen] = (0, import_react45.useState)(false);
|
|
2264
2268
|
(0, import_react45.useEffect)(() => {
|
|
2265
2269
|
setFirstName(initialFirstName || "");
|
|
2266
2270
|
setLastName(initialLastName || "");
|
|
2267
|
-
|
|
2268
|
-
}, [initialFirstName, initialLastName, initialProfileColor]);
|
|
2271
|
+
}, [initialFirstName, initialLastName]);
|
|
2269
2272
|
const handleFirstNameChange = (val) => {
|
|
2270
2273
|
setFirstName(val.replace(/[^a-zA-Z\s-]/g, "").substring(0, 50));
|
|
2271
2274
|
};
|
|
@@ -2277,22 +2280,21 @@ var UniversalProfileSettings = ({
|
|
|
2277
2280
|
if (isSubmitting || isReadOnly) return;
|
|
2278
2281
|
setIsSubmitting(true);
|
|
2279
2282
|
try {
|
|
2280
|
-
const res = await onSaveProfile({ firstName, lastName
|
|
2283
|
+
const res = await onSaveProfile({ firstName, lastName });
|
|
2281
2284
|
if (res.success) {
|
|
2282
2285
|
import_react_hot_toast6.default.success("Profile updated successfully.");
|
|
2283
2286
|
setTimeout(() => window.location.reload(), 1e3);
|
|
2284
2287
|
} else {
|
|
2285
|
-
import_react_hot_toast6.default.error(res.error || "
|
|
2288
|
+
import_react_hot_toast6.default.error(res.error || "Uh oh! Something went wrong.");
|
|
2286
2289
|
setIsSubmitting(false);
|
|
2287
2290
|
}
|
|
2288
2291
|
} catch (error) {
|
|
2289
|
-
import_react_hot_toast6.default.error("
|
|
2292
|
+
import_react_hot_toast6.default.error("Uh oh! Something went wrong.");
|
|
2290
2293
|
setIsSubmitting(false);
|
|
2291
2294
|
}
|
|
2292
2295
|
};
|
|
2293
|
-
const hasChanges = firstName !== initialFirstName || lastName !== initialLastName
|
|
2296
|
+
const hasChanges = firstName !== initialFirstName || lastName !== initialLastName;
|
|
2294
2297
|
const isSaveDisabled = isSubmitting || isReadOnly || !hasChanges || firstName.trim().length === 0 || lastName.trim().length === 0;
|
|
2295
|
-
const selectedColorDef = themeColors.find((c) => c.id === profileColor) || themeColors[0] || { label: "Default", bgClass: "bg-neutral-100", borderClass: "border-neutral-200" };
|
|
2296
2298
|
return /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex flex-col max-w-3xl rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300 min-h-full" }, /* @__PURE__ */ import_react45.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react45.default.createElement("h1", { className: " font-serif text-xl text-black mb-1 truncate tracking-tight" }, "Personal Settings"), /* @__PURE__ */ import_react45.default.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your personal account profile.")), isReadOnly && /* @__PURE__ */ import_react45.default.createElement("span", { className: "px-3 py-1 bg-neutral-50 text-neutral-500 rounded-full text-[10px] tracking-[0.2em] shrink-0 w-fit" }, "Read Only Access")), /* @__PURE__ */ import_react45.default.createElement("div", { className: "w-full max-w-2xl" }, /* @__PURE__ */ import_react45.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex flex-col sm:flex-row gap-6" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react45.default.createElement(
|
|
2297
2299
|
TextInput,
|
|
2298
2300
|
{
|
|
@@ -2320,24 +2322,13 @@ var UniversalProfileSettings = ({
|
|
|
2320
2322
|
},
|
|
2321
2323
|
disabled: true
|
|
2322
2324
|
}
|
|
2323
|
-
), /* @__PURE__ */ import_react45.default.createElement("p", { className: "text-[10px] text-neutral-400 mt-1 truncate" }, "To change your email address, please contact support.")), /* @__PURE__ */ import_react45.default.createElement("div", { className: "
|
|
2324
|
-
"button",
|
|
2325
|
-
{
|
|
2326
|
-
type: "button",
|
|
2327
|
-
onClick: () => !isReadOnly && setIsColorModalOpen(true),
|
|
2328
|
-
disabled: isReadOnly || isSubmitting,
|
|
2329
|
-
className: "w-full flex items-center justify-between px-2 py-3 text-sm bg-transparent border-b border-neutral-200 text-black transition-all outline-none focus:border-black disabled:opacity-50 disabled:cursor-not-allowed text-left"
|
|
2330
|
-
},
|
|
2331
|
-
/* @__PURE__ */ import_react45.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: `w-4 h-4 rounded-full border ${selectedColorDef.bgClass} ${selectedColorDef.borderClass}` }), /* @__PURE__ */ import_react45.default.createElement("span", null, selectedColorDef.label)),
|
|
2332
|
-
/* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: import_core_free_icons12.ArrowDown01Icon, size: 14, className: "text-neutral-400 shrink-0" })
|
|
2333
|
-
)), /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between pt-8 mt-2 gap-6 sm:gap-4 border-t border-neutral-100" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex items-center gap-6 min-w-0" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block truncate uppercase" }, "Account Status"), /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-xs text-black block truncate" }, accountStatus)), /* @__PURE__ */ import_react45.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block truncate uppercase" }, "Member Since"), /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-xs text-black block truncate" }, memberSince ? new Date(memberSince).toLocaleDateString("en-US", { month: "long", day: "numeric", year: "numeric" }) : "N/A"))), /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex flex-col-reverse sm:flex-row items-center gap-3 sm:gap-4 w-full sm:w-auto shrink-0" }, hasChanges && !isSubmitting && !isReadOnly && /* @__PURE__ */ import_react45.default.createElement(
|
|
2325
|
+
), /* @__PURE__ */ import_react45.default.createElement("p", { className: "text-[10px] text-neutral-400 mt-1 truncate" }, "To change your email address, please contact support.")), /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between pt-8 mt-2 gap-6 sm:gap-4 border-t border-neutral-100" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex items-center gap-6 min-w-0" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block truncate uppercase" }, "Account Status"), /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-xs text-black block truncate" }, accountStatus)), /* @__PURE__ */ import_react45.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block truncate uppercase" }, "Member Since"), /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-xs text-black block truncate" }, memberSince ? new Date(memberSince).toLocaleDateString("en-US", { month: "long", day: "numeric", year: "numeric" }) : "N/A"))), /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex flex-col-reverse sm:flex-row items-center gap-3 sm:gap-4 w-full sm:w-auto shrink-0" }, hasChanges && !isSubmitting && !isReadOnly && /* @__PURE__ */ import_react45.default.createElement(
|
|
2334
2326
|
"button",
|
|
2335
2327
|
{
|
|
2336
2328
|
type: "button",
|
|
2337
2329
|
onClick: () => {
|
|
2338
2330
|
setFirstName(initialFirstName);
|
|
2339
2331
|
setLastName(initialLastName);
|
|
2340
|
-
setProfileColor(initialProfileColor);
|
|
2341
2332
|
},
|
|
2342
2333
|
className: "text-[11px] tracking-widest text-neutral-500 hover:text-black transition-colors w-full sm:w-auto py-2 sm:py-0 outline-none"
|
|
2343
2334
|
},
|
|
@@ -2351,36 +2342,15 @@ var UniversalProfileSettings = ({
|
|
|
2351
2342
|
className: "min-w-32 w-full sm:w-auto"
|
|
2352
2343
|
},
|
|
2353
2344
|
"Save Changes"
|
|
2354
|
-
)))))
|
|
2355
|
-
"button",
|
|
2356
|
-
{
|
|
2357
|
-
type: "button",
|
|
2358
|
-
key: colorOption.id,
|
|
2359
|
-
onClick: () => {
|
|
2360
|
-
setProfileColor(colorOption.id);
|
|
2361
|
-
setIsColorModalOpen(false);
|
|
2362
|
-
},
|
|
2363
|
-
className: `text-left px-4 py-3 text-[12px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none ${profileColor === colorOption.id ? "bg-neutral-100 text-black" : "text-neutral-500 hover:bg-neutral-50 hover:text-black"}`
|
|
2364
|
-
},
|
|
2365
|
-
/* @__PURE__ */ import_react45.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: `w-3.5 h-3.5 rounded-full border ${colorOption.bgClass} ${colorOption.borderClass}` }), /* @__PURE__ */ import_react45.default.createElement("span", { className: "truncate pr-2" }, colorOption.label)),
|
|
2366
|
-
profileColor === colorOption.id && /* @__PURE__ */ import_react45.default.createElement("div", { className: "w-1.5 h-1.5 rounded-full shrink-0 bg-black" })
|
|
2367
|
-
))), /* @__PURE__ */ import_react45.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react45.default.createElement(
|
|
2368
|
-
"button",
|
|
2369
|
-
{
|
|
2370
|
-
type: "button",
|
|
2371
|
-
onClick: () => setIsColorModalOpen(false),
|
|
2372
|
-
className: "w-full py-2.5 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors outline-none"
|
|
2373
|
-
},
|
|
2374
|
-
"Cancel"
|
|
2375
|
-
)))));
|
|
2345
|
+
))))));
|
|
2376
2346
|
};
|
|
2377
2347
|
|
|
2378
2348
|
// src/components/UniversalBillingPage.tsx
|
|
2379
|
-
var
|
|
2380
|
-
var
|
|
2381
|
-
var
|
|
2382
|
-
var PageSpinner3 = () => /* @__PURE__ */
|
|
2383
|
-
var ButtonSpinner4 = () => /* @__PURE__ */
|
|
2349
|
+
var import_react46 = __toESM(require("react"));
|
|
2350
|
+
var import_react47 = require("@hugeicons/react");
|
|
2351
|
+
var import_core_free_icons12 = require("@hugeicons/core-free-icons");
|
|
2352
|
+
var PageSpinner3 = () => /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react46.default.createElement(import_react47.HugeiconsIcon, { icon: import_core_free_icons12.Loading03Icon, size: 32, className: "animate-spin mb-4 text-neutral-400" }));
|
|
2353
|
+
var ButtonSpinner4 = () => /* @__PURE__ */ import_react46.default.createElement(import_react47.HugeiconsIcon, { icon: import_core_free_icons12.Loading03Icon, size: 16, className: "animate-spin text-neutral-500" });
|
|
2384
2354
|
var formatDate = (dateString) => {
|
|
2385
2355
|
if (!dateString) return "N/A";
|
|
2386
2356
|
return new Date(dateString).toLocaleDateString("en-US", {
|
|
@@ -2422,13 +2392,13 @@ var UniversalBillingPage = ({
|
|
|
2422
2392
|
onPayInvoice,
|
|
2423
2393
|
onUpdateInvoiceStatus
|
|
2424
2394
|
}) => {
|
|
2425
|
-
const [currentView, setCurrentView] = (0,
|
|
2426
|
-
const [selectedInvoice, setSelectedInvoice] = (0,
|
|
2427
|
-
const [isTimeframeModalOpen, setIsTimeframeModalOpen] = (0,
|
|
2428
|
-
const [isPaying, setIsPaying] = (0,
|
|
2429
|
-
const [isActionModalOpen, setIsActionModalOpen] = (0,
|
|
2430
|
-
const [isUpdating, setIsUpdating] = (0,
|
|
2431
|
-
const [twoFactorCode, setTwoFactorCode] = (0,
|
|
2395
|
+
const [currentView, setCurrentView] = (0, import_react46.useState)("list");
|
|
2396
|
+
const [selectedInvoice, setSelectedInvoice] = (0, import_react46.useState)(null);
|
|
2397
|
+
const [isTimeframeModalOpen, setIsTimeframeModalOpen] = (0, import_react46.useState)(false);
|
|
2398
|
+
const [isPaying, setIsPaying] = (0, import_react46.useState)(false);
|
|
2399
|
+
const [isActionModalOpen, setIsActionModalOpen] = (0, import_react46.useState)(false);
|
|
2400
|
+
const [isUpdating, setIsUpdating] = (0, import_react46.useState)(false);
|
|
2401
|
+
const [twoFactorCode, setTwoFactorCode] = (0, import_react46.useState)("");
|
|
2432
2402
|
const handlePayment = async () => {
|
|
2433
2403
|
if (!selectedInvoice || isReadOnly || !onPayInvoice || isPaying) return;
|
|
2434
2404
|
setIsPaying(true);
|
|
@@ -2453,34 +2423,34 @@ var UniversalBillingPage = ({
|
|
|
2453
2423
|
setIsUpdating(false);
|
|
2454
2424
|
}
|
|
2455
2425
|
};
|
|
2456
|
-
return /* @__PURE__ */
|
|
2426
|
+
return /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex max-w-3xl rounded-2xl bg-white p-6 flex-col gap-8 animate-in fade-in duration-300 min-h-full" }, /* @__PURE__ */ import_react46.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, currentView === "list" ? /* @__PURE__ */ import_react46.default.createElement("div", { className: "min-w-0 w-full" }, /* @__PURE__ */ import_react46.default.createElement("h1", { className: " font-serif text-xl text-black mb-1 truncate tracking-tight" }, headerTitle), /* @__PURE__ */ import_react46.default.createElement("p", { className: "text-xs text-neutral-500 truncate mb-6" }, headerDescription), showSearchAndFilter && onSearchChange && onTimeframeChange && /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 mb-4" }, /* @__PURE__ */ import_react46.default.createElement(
|
|
2457
2427
|
TextInput,
|
|
2458
2428
|
{
|
|
2459
2429
|
placeholder: "Search by ID or Name...",
|
|
2460
2430
|
value: searchQuery,
|
|
2461
2431
|
onChange: onSearchChange
|
|
2462
2432
|
}
|
|
2463
|
-
), /* @__PURE__ */
|
|
2433
|
+
), /* @__PURE__ */ import_react46.default.createElement(
|
|
2464
2434
|
"button",
|
|
2465
2435
|
{
|
|
2466
2436
|
type: "button",
|
|
2467
2437
|
onClick: () => setIsTimeframeModalOpen(true),
|
|
2468
|
-
className: "px-4 py-3 text-sm bg-transparent border-b border-neutral-
|
|
2438
|
+
className: "px-4 py-3 text-sm bg-transparent border-b border-neutral-100 text-black outline-none focus:border-black shrink-0 text-left"
|
|
2469
2439
|
},
|
|
2470
2440
|
timeframe === "ALL" ? "All Time" : timeframe === "24H" ? "Past 24 Hours" : timeframe === "7D" ? "Past 7 Days" : "Past 30 Days"
|
|
2471
|
-
))) : /* @__PURE__ */
|
|
2441
|
+
))) : /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex flex-col items-start gap-3" }, /* @__PURE__ */ import_react46.default.createElement("button", { onClick: () => setCurrentView("list"), className: "text-[10px] text-neutral-400 hover:text-black tracking-[0.2em] flex items-center gap-1.5 transition-colors outline-none" }, /* @__PURE__ */ import_react46.default.createElement(import_react47.HugeiconsIcon, { icon: import_core_free_icons12.ArrowLeft01Icon, size: 12 }), " Back")), isReadOnly && currentView === "list" && /* @__PURE__ */ import_react46.default.createElement("span", { className: "px-3 py-1 bg-neutral-50 text-neutral-500 rounded-full text-[10px] tracking-[0.2em] shrink-0 w-fit" }, "Read Only Access")), currentView === "list" && /* @__PURE__ */ import_react46.default.createElement("div", { className: "w-full max-w-2xl" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex flex-col gap-8 w-full" }, (metricPrimaryLabel || metricSecondaryLabel) && /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between sm:items-start pb-8 border-b border-neutral-100 gap-6 sm:gap-0" }, metricPrimaryLabel && /* @__PURE__ */ import_react46.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react46.default.createElement("h3", { className: " font-serif text-[10px] text-neutral-400 tracking-[0.2em] mb-2 truncate block uppercase" }, metricPrimaryLabel), /* @__PURE__ */ import_react46.default.createElement("div", { className: "text-xl text-black tracking-tight truncate" }, formatNaira(metricPrimaryValue)), metricPrimarySubtext && /* @__PURE__ */ import_react46.default.createElement("p", { className: "text-[10px] text-neutral-500 mt-1 tracking-widest uppercase" }, metricPrimarySubtext)), metricSecondaryLabel && /* @__PURE__ */ import_react46.default.createElement("div", { className: "min-w-0 sm:text-right" }, /* @__PURE__ */ import_react46.default.createElement("h3", { className: " font-serif text-[10px] text-neutral-400 tracking-[0.2em] mb-2 truncate block uppercase" }, metricSecondaryLabel), /* @__PURE__ */ import_react46.default.createElement("div", { className: "text-xl text-emerald-600 tracking-tight truncate" }, formatNaira(metricSecondaryValue)), metricSecondarySubtext && /* @__PURE__ */ import_react46.default.createElement("p", { className: "text-[10px] text-neutral-500 mt-1 tracking-widest uppercase" }, metricSecondarySubtext))), !isReadOnly && showBillingOverview && /* @__PURE__ */ import_react46.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-3 gap-8 sm:gap-4" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react46.default.createElement("h3", { className: " font-serif text-[10px] text-neutral-400 tracking-[0.2em] mb-3 truncate block uppercase" }, "Billing Status"), /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex items-center gap-2 min-w-0" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: `w-2 h-2 rounded-full shrink-0 ${billingStatus === "ACTIVE" ? "bg-green-500" : "bg-neutral-300"}` }), /* @__PURE__ */ import_react46.default.createElement("p", { className: "text-xs text-black tracking-widest truncate" }, billingStatus || "UNKNOWN"))), /* @__PURE__ */ import_react46.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react46.default.createElement("h3", { className: " font-serif text-[10px] text-neutral-400 tracking-[0.2em] mb-3 truncate block uppercase" }, "Next Billing Date"), /* @__PURE__ */ import_react46.default.createElement("p", { className: "text-sm text-black truncate" }, formatDate(nextBillingDate))), lastPaidDate && /* @__PURE__ */ import_react46.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react46.default.createElement("h3", { className: " font-serif text-[10px] text-neutral-400 tracking-[0.2em] mb-3 truncate block uppercase" }, "Last Paid Date"), /* @__PURE__ */ import_react46.default.createElement("p", { className: "text-sm text-neutral-600 truncate" }, formatDate(lastPaidDate)))), !isReadOnly && showUsageMetrics && usageMetrics.length > 0 && /* @__PURE__ */ import_react46.default.createElement("div", { className: "pt-8 border-t border-neutral-100" }, /* @__PURE__ */ import_react46.default.createElement("h3", { className: " font-serif text-[10px] text-neutral-400 tracking-[0.2em] mb-6 truncate block uppercase" }, "Usage & Limits"), /* @__PURE__ */ import_react46.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-x-8 gap-y-4 text-sm text-black" }, usageMetrics.map((metric, idx) => /* @__PURE__ */ import_react46.default.createElement("div", { key: idx, className: "flex justify-between border-b border-neutral-50 pb-2" }, /* @__PURE__ */ import_react46.default.createElement("span", { className: "text-neutral-500 text-xs" }, metric.label), /* @__PURE__ */ import_react46.default.createElement("span", { className: "text-xs text-black" }, metric.value))))), /* @__PURE__ */ import_react46.default.createElement("div", { className: "pt-8 border-t border-neutral-100" }, /* @__PURE__ */ import_react46.default.createElement("h3", { className: " font-serif text-[10px] text-neutral-400 tracking-[0.2em] mb-4 truncate block uppercase" }, "Transaction History"), isLoading ? /* @__PURE__ */ import_react46.default.createElement(PageSpinner3, null) : invoices.length === 0 ? /* @__PURE__ */ import_react46.default.createElement("p", { className: "text-xs text-neutral-500 py-4" }, "No records found.") : /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: "divide-y divide-neutral-100" }, invoices.map((inv) => /* @__PURE__ */ import_react46.default.createElement("div", { key: inv.id, onClick: () => {
|
|
2472
2442
|
setSelectedInvoice(inv);
|
|
2473
2443
|
setCurrentView("details");
|
|
2474
|
-
}, className: "flex items-center justify-between py-4 hover:bg-neutral-50/50 cursor-pointer group min-w-0 px-2 transition-colors" }, /* @__PURE__ */
|
|
2444
|
+
}, className: "flex items-center justify-between py-4 hover:bg-neutral-50/50 cursor-pointer group min-w-0 px-2 transition-colors" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex flex-col gap-1 min-w-0 flex-1" }, /* @__PURE__ */ import_react46.default.createElement("p", { className: "text-sm text-black truncate pr-4" }, inv.name), /* @__PURE__ */ import_react46.default.createElement("p", { className: "text-xs text-neutral-500 truncate" }, inv.subtext)), /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex flex-col items-end gap-1 shrink-0 pl-4" }, /* @__PURE__ */ import_react46.default.createElement("p", { className: "text-sm text-black" }, formatNaira(inv.amountDue)), /* @__PURE__ */ import_react46.default.createElement("span", { className: `text-[9px] tracking-widest px-2 py-0.5 rounded-full ${inv.status === "PAID" ? "bg-emerald-50 text-emerald-600" : "bg-neutral-50 text-neutral-600"}` }, inv.status))))), totalPages > 1 && /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex items-center justify-between pt-4 mt-2" }, /* @__PURE__ */ import_react46.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", totalPages), /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react46.default.createElement("button", { onClick: () => onPageChange(currentPage - 1), disabled: currentPage === 1 || isLoading, className: "p-2 border border-neutral-100 rounded-full bg-white text-neutral-500 hover:text-black outline-none disabled:opacity-30" }, /* @__PURE__ */ import_react46.default.createElement(import_react47.HugeiconsIcon, { icon: import_core_free_icons12.ArrowLeft01Icon, size: 14 })), /* @__PURE__ */ import_react46.default.createElement("button", { onClick: () => onPageChange(currentPage + 1), disabled: currentPage >= totalPages || isLoading, className: "p-2 border border-neutral-100 rounded-full bg-white text-neutral-500 hover:text-black outline-none disabled:opacity-30" }, /* @__PURE__ */ import_react46.default.createElement(import_react47.HugeiconsIcon, { icon: import_core_free_icons12.ArrowRight01Icon, size: 14 })))))))), currentView === "details" && selectedInvoice && /* @__PURE__ */ import_react46.default.createElement("div", { className: "w-full max-w-2xl animate-in fade-in duration-300" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex flex-col gap-6 w-full" }, /* @__PURE__ */ import_react46.default.createElement("div", null, /* @__PURE__ */ import_react46.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-1 uppercase" }, "Breakdown"), /* @__PURE__ */ import_react46.default.createElement("h2", { className: " font-serif text-xl text-black mb-1" }, selectedInvoice.name), /* @__PURE__ */ import_react46.default.createElement("p", { className: "text-xs text-neutral-500" }, "Generated on ", formatDate(selectedInvoice.createdAt))), /* @__PURE__ */ import_react46.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6 p-6 sm:p-8 rounded-2xl border border-neutral-100" }, /* @__PURE__ */ import_react46.default.createElement("div", null, /* @__PURE__ */ import_react46.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-1 uppercase" }, "Amount"), /* @__PURE__ */ import_react46.default.createElement("p", { className: "text-xl text-black" }, formatNaira(selectedInvoice.amountDue))), /* @__PURE__ */ import_react46.default.createElement("div", null, /* @__PURE__ */ import_react46.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-1 uppercase" }, "Status"), isModMode ? /* @__PURE__ */ import_react46.default.createElement(
|
|
2475
2445
|
"button",
|
|
2476
2446
|
{
|
|
2477
2447
|
onClick: () => !isUpdating && setIsActionModalOpen(true),
|
|
2478
2448
|
disabled: isUpdating,
|
|
2479
|
-
className: `flex items-center gap-3 text-xs text-black px-3 py-1.5 mt-1 border rounded-full transition-colors disabled:opacity-50 outline-none ${isActionModalOpen ? "bg-neutral-50 border-neutral-300" : "bg-white border-neutral-
|
|
2449
|
+
className: `flex items-center gap-3 text-xs text-black px-3 py-1.5 mt-1 border rounded-full transition-colors disabled:opacity-50 outline-none ${isActionModalOpen ? "bg-neutral-50 border-neutral-300" : "bg-white border-neutral-100 hover:bg-neutral-50"}`
|
|
2480
2450
|
},
|
|
2481
2451
|
selectedInvoice.status,
|
|
2482
|
-
isUpdating ? /* @__PURE__ */
|
|
2483
|
-
) : /* @__PURE__ */
|
|
2452
|
+
isUpdating ? /* @__PURE__ */ import_react46.default.createElement(ButtonSpinner4, null) : /* @__PURE__ */ import_react46.default.createElement(import_react47.HugeiconsIcon, { icon: import_core_free_icons12.ArrowDown01Icon, size: 14, className: "text-neutral-400" })
|
|
2453
|
+
) : /* @__PURE__ */ import_react46.default.createElement("span", { className: `text-[10px] tracking-widest px-3 py-1 mt-1 inline-block rounded-full ${selectedInvoice.status === "PAID" ? "bg-emerald-100 text-emerald-700" : "bg-neutral-100 text-neutral-700"}` }, selectedInvoice.status)), /* @__PURE__ */ import_react46.default.createElement("div", { className: "md:col-span-2 pt-4 border-t border-neutral-100/60 mt-2" }, /* @__PURE__ */ import_react46.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-1 uppercase" }, "Reference ID"), /* @__PURE__ */ import_react46.default.createElement("p", { className: "text-xs text-neutral-500 bg-white px-3 py-2 rounded-full border border-neutral-100 inline-block" }, selectedInvoice.id))), /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-end gap-4 pt-4" }, !isModMode && selectedInvoice.status === "SCHEDULED" && onPayInvoice && /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex flex-col items-end gap-2 w-full sm:w-auto" }, /* @__PURE__ */ import_react46.default.createElement(
|
|
2484
2454
|
ThreeDActionButton,
|
|
2485
2455
|
{
|
|
2486
2456
|
onClick: handlePayment,
|
|
@@ -2489,12 +2459,12 @@ var UniversalBillingPage = ({
|
|
|
2489
2459
|
className: "w-full sm:w-auto"
|
|
2490
2460
|
},
|
|
2491
2461
|
"Pay Invoice"
|
|
2492
|
-
)), !isModMode && selectedInvoice.status === "PAID" && /* @__PURE__ */
|
|
2462
|
+
)), !isModMode && selectedInvoice.status === "PAID" && /* @__PURE__ */ import_react46.default.createElement("span", { className: "text-[11px] tracking-widest text-emerald-600 px-6 py-3 bg-emerald-50 rounded-full" }, "Invoice Completed")))), isTimeframeModalOpen && showSearchAndFilter && onTimeframeChange && /* @__PURE__ */ import_react46.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setIsTimeframeModalOpen(false) }), /* @__PURE__ */ import_react46.default.createElement("div", { className: "relative w-80 bg-white shadow-2xl rounded-2xl flex flex-col items-center overflow-hidden animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react46.default.createElement("h3", { className: " font-serif text-[14px] text-black tracking-tight mb-2" }, "Select Timeframe"), /* @__PURE__ */ import_react46.default.createElement("p", { className: "text-[12px] text-neutral-500" }, "Choose the range of transactions to display.")), /* @__PURE__ */ import_react46.default.createElement("div", { className: "w-full flex flex-col pl-2 pr-2" }, [
|
|
2493
2463
|
{ value: "ALL", label: "All Time" },
|
|
2494
2464
|
{ value: "24H", label: "Past 24 Hours" },
|
|
2495
2465
|
{ value: "7D", label: "Past 7 Days" },
|
|
2496
2466
|
{ value: "30D", label: "Past 30 Days" }
|
|
2497
|
-
].map((option) => /* @__PURE__ */
|
|
2467
|
+
].map((option) => /* @__PURE__ */ import_react46.default.createElement(
|
|
2498
2468
|
"button",
|
|
2499
2469
|
{
|
|
2500
2470
|
key: option.value,
|
|
@@ -2505,9 +2475,9 @@ var UniversalBillingPage = ({
|
|
|
2505
2475
|
},
|
|
2506
2476
|
className: `text-left px-4 py-3 text-[12px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none ${timeframe === option.value ? "bg-neutral-100 text-black" : "text-neutral-500 hover:bg-neutral-50 hover:text-black"}`
|
|
2507
2477
|
},
|
|
2508
|
-
/* @__PURE__ */
|
|
2509
|
-
timeframe === option.value && /* @__PURE__ */
|
|
2510
|
-
))), /* @__PURE__ */
|
|
2478
|
+
/* @__PURE__ */ import_react46.default.createElement("span", { className: "truncate pr-2" }, option.label),
|
|
2479
|
+
timeframe === option.value && /* @__PURE__ */ import_react46.default.createElement("div", { className: "w-1.5 h-1.5 bg-black rounded-full shrink-0" })
|
|
2480
|
+
))), /* @__PURE__ */ import_react46.default.createElement("div", { className: "w-full flex mt-2" }, /* @__PURE__ */ import_react46.default.createElement("button", { onClick: () => setIsTimeframeModalOpen(false), className: "w-full py-2.5 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors outline-none" }, "Cancel")))), isActionModalOpen && isModMode && /* @__PURE__ */ import_react46.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isUpdating && setIsActionModalOpen(false) }), /* @__PURE__ */ import_react46.default.createElement("div", { className: "relative w-80 bg-white shadow-2xl rounded-2xl flex flex-col items-center overflow-hidden animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react46.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react46.default.createElement("h3", { className: " font-serif text-[14px] text-black tracking-tight mb-2" }, "Update Invoice Status"), /* @__PURE__ */ import_react46.default.createElement(
|
|
2511
2481
|
TextInput,
|
|
2512
2482
|
{
|
|
2513
2483
|
placeholder: "Enter 2FA Code...",
|
|
@@ -2515,7 +2485,7 @@ var UniversalBillingPage = ({
|
|
|
2515
2485
|
onChange: setTwoFactorCode,
|
|
2516
2486
|
type: "password"
|
|
2517
2487
|
}
|
|
2518
|
-
)), /* @__PURE__ */
|
|
2488
|
+
)), /* @__PURE__ */ import_react46.default.createElement("div", { className: "w-full flex flex-col pl-2 pr-2" }, ["SCHEDULED", "PAID", "FAILED", "CANCELED"].map((statusOption) => /* @__PURE__ */ import_react46.default.createElement(
|
|
2519
2489
|
"button",
|
|
2520
2490
|
{
|
|
2521
2491
|
key: statusOption,
|
|
@@ -2523,15 +2493,15 @@ var UniversalBillingPage = ({
|
|
|
2523
2493
|
disabled: isUpdating || !twoFactorCode,
|
|
2524
2494
|
className: `text-left px-4 py-3 text-[12px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none ${selectedInvoice?.status === statusOption ? "bg-neutral-100 text-black" : "text-neutral-500 hover:bg-neutral-50 hover:text-black"}`
|
|
2525
2495
|
},
|
|
2526
|
-
/* @__PURE__ */
|
|
2527
|
-
selectedInvoice?.status === statusOption && /* @__PURE__ */
|
|
2528
|
-
))), /* @__PURE__ */
|
|
2496
|
+
/* @__PURE__ */ import_react46.default.createElement("span", { className: "truncate pr-2" }, statusOption),
|
|
2497
|
+
selectedInvoice?.status === statusOption && /* @__PURE__ */ import_react46.default.createElement("div", { className: "w-1.5 h-1.5 bg-black rounded-full shrink-0" })
|
|
2498
|
+
))), /* @__PURE__ */ import_react46.default.createElement("div", { className: "w-full flex mt-2" }, /* @__PURE__ */ import_react46.default.createElement("button", { onClick: () => setIsActionModalOpen(false), disabled: isUpdating, className: "w-full py-2.5 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none" }, "Cancel")))));
|
|
2529
2499
|
};
|
|
2530
2500
|
|
|
2531
2501
|
// src/components/UniversalDashboardPage.tsx
|
|
2532
|
-
var
|
|
2533
|
-
var
|
|
2534
|
-
var
|
|
2502
|
+
var import_react48 = __toESM(require("react"));
|
|
2503
|
+
var import_react49 = require("@hugeicons/react");
|
|
2504
|
+
var import_core_free_icons13 = require("@hugeicons/core-free-icons");
|
|
2535
2505
|
var UniversalDashboardPage = ({
|
|
2536
2506
|
headerTitle,
|
|
2537
2507
|
headerDescription,
|
|
@@ -2542,20 +2512,20 @@ var UniversalDashboardPage = ({
|
|
|
2542
2512
|
lists,
|
|
2543
2513
|
isLoading = false
|
|
2544
2514
|
}) => {
|
|
2545
|
-
const [isTimeframeModalOpen, setIsTimeframeModalOpen] = (0,
|
|
2515
|
+
const [isTimeframeModalOpen, setIsTimeframeModalOpen] = (0, import_react48.useState)(false);
|
|
2546
2516
|
const selectedTimeframe = timeframes.find((t) => t.id === activeTimeframe) || timeframes[0];
|
|
2547
2517
|
if (isLoading) {
|
|
2548
|
-
return /* @__PURE__ */
|
|
2518
|
+
return /* @__PURE__ */ import_react48.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react48.default.createElement(import_react49.HugeiconsIcon, { icon: import_core_free_icons13.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
2549
2519
|
}
|
|
2550
|
-
return /* @__PURE__ */
|
|
2520
|
+
return /* @__PURE__ */ import_react48.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in duration-300 min-h-full pb-10" }, /* @__PURE__ */ import_react48.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react48.default.createElement("div", { className: "flex flex-col sm:flex-row items-start sm:items-center justify-between gap-4" }, /* @__PURE__ */ import_react48.default.createElement("div", null, /* @__PURE__ */ import_react48.default.createElement("h1", { className: " font-serif text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ import_react48.default.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription)), timeframes.length > 0 && selectedTimeframe && onTimeframeChange && /* @__PURE__ */ import_react48.default.createElement(
|
|
2551
2521
|
"button",
|
|
2552
2522
|
{
|
|
2553
2523
|
onClick: () => setIsTimeframeModalOpen(true),
|
|
2554
2524
|
className: "flex items-center gap-3 px-4 py-2 text-xs bg-white text-black outline-none rounded-full transition-colors hover:bg-neutral-50 shrink-0"
|
|
2555
2525
|
},
|
|
2556
|
-
/* @__PURE__ */
|
|
2557
|
-
/* @__PURE__ */
|
|
2558
|
-
)), stats.length > 0 && /* @__PURE__ */
|
|
2526
|
+
/* @__PURE__ */ import_react48.default.createElement("span", null, selectedTimeframe.label),
|
|
2527
|
+
/* @__PURE__ */ import_react48.default.createElement(import_react49.HugeiconsIcon, { icon: import_core_free_icons13.ArrowDown01Icon, size: 14, className: "text-neutral-400" })
|
|
2528
|
+
)), stats.length > 0 && /* @__PURE__ */ import_react48.default.createElement("div", { className: "w-full rounded-2xl overflow-hidden bg-white" }, /* @__PURE__ */ import_react48.default.createElement("div", { className: "grid grid-cols-2 md:grid-cols-5 divide-y md:divide-y-0 md:divide-x divide-neutral-100" }, stats.map((stat, idx) => /* @__PURE__ */ import_react48.default.createElement("div", { key: idx, className: "p-6 flex flex-col gap-1 min-w-0" }, /* @__PURE__ */ import_react48.default.createElement("p", { className: "text-[10px] tracking-[0.2em] text-neutral-400 truncate uppercase" }, stat.label), /* @__PURE__ */ import_react48.default.createElement("p", { className: `text-xl tracking-tight truncate ${stat.valueClass || "text-black"}` }, stat.value))))), lists.length > 0 && /* @__PURE__ */ import_react48.default.createElement("div", { className: "flex flex-col gap-8 w-full max-w-4xl" }, lists.map((list, idx) => /* @__PURE__ */ import_react48.default.createElement("div", { key: idx, className: "bg-white rounded-2xl p-6 flex flex-col min-w-0" }, /* @__PURE__ */ import_react48.default.createElement("div", { className: "flex items-center gap-3 mb-6" }, /* @__PURE__ */ import_react48.default.createElement("div", { className: "text-neutral-400" }, list.icon), /* @__PURE__ */ import_react48.default.createElement("h2", { className: " font-serif text-[11px] text-black tracking-[0.2em] uppercase" }, list.title)), /* @__PURE__ */ import_react48.default.createElement("div", { className: "divide-y divide-neutral-100 flex-1 overflow-y-auto" }, list.items.length === 0 ? /* @__PURE__ */ import_react48.default.createElement("p", { className: "text-xs text-neutral-500 py-4" }, list.emptyMessage) : list.items.map((item) => /* @__PURE__ */ import_react48.default.createElement("div", { key: item.id, className: "flex flex-col sm:flex-row sm:items-center justify-between py-4 gap-2 min-w-0 group" }, /* @__PURE__ */ import_react48.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react48.default.createElement("p", { className: "text-sm text-black truncate pr-4" }, item.primaryText), /* @__PURE__ */ import_react48.default.createElement("p", { className: "text-[10px] text-neutral-500 truncate tracking-widest mt-0.5" }, item.secondaryText)), /* @__PURE__ */ import_react48.default.createElement("div", { className: "flex items-center gap-4 shrink-0 pl-4" }, item.rightText && /* @__PURE__ */ import_react48.default.createElement("p", { className: "text-xs text-black" }, item.rightText), item.rightBadge && /* @__PURE__ */ import_react48.default.createElement("span", { className: `text-[9px] tracking-widest px-2.5 py-1 rounded-full ${item.rightBadgeClass || "bg-neutral-50 text-neutral-600"}` }, item.rightBadge)))))))), isTimeframeModalOpen && timeframes.length > 0 && onTimeframeChange && /* @__PURE__ */ import_react48.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react48.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setIsTimeframeModalOpen(false) }), /* @__PURE__ */ import_react48.default.createElement("div", { className: "relative w-72 bg-white shadow-2xl rounded-2xl flex flex-col items-center overflow-hidden animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react48.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react48.default.createElement("h3", { className: " font-serif text-[14px] text-black tracking-tight" }, "Select Timeframe")), /* @__PURE__ */ import_react48.default.createElement("div", { className: "w-full flex flex-col pl-2 pr-2 pb-2" }, timeframes.map((tf) => /* @__PURE__ */ import_react48.default.createElement(
|
|
2559
2529
|
"button",
|
|
2560
2530
|
{
|
|
2561
2531
|
key: tf.id,
|
|
@@ -2565,9 +2535,9 @@ var UniversalDashboardPage = ({
|
|
|
2565
2535
|
},
|
|
2566
2536
|
className: `text-left px-4 py-3 text-[12px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none ${activeTimeframe === tf.id ? "bg-neutral-100 text-black" : "text-neutral-500 hover:bg-neutral-50 hover:text-black"}`
|
|
2567
2537
|
},
|
|
2568
|
-
/* @__PURE__ */
|
|
2569
|
-
activeTimeframe === tf.id && /* @__PURE__ */
|
|
2570
|
-
))), /* @__PURE__ */
|
|
2538
|
+
/* @__PURE__ */ import_react48.default.createElement("span", { className: "truncate pr-2" }, tf.label),
|
|
2539
|
+
activeTimeframe === tf.id && /* @__PURE__ */ import_react48.default.createElement("div", { className: "w-1.5 h-1.5 bg-black rounded-full shrink-0" })
|
|
2540
|
+
))), /* @__PURE__ */ import_react48.default.createElement("div", { className: "w-full flex border-t border-neutral-50" }, /* @__PURE__ */ import_react48.default.createElement(
|
|
2571
2541
|
"button",
|
|
2572
2542
|
{
|
|
2573
2543
|
onClick: () => setIsTimeframeModalOpen(false),
|
|
@@ -2578,9 +2548,9 @@ var UniversalDashboardPage = ({
|
|
|
2578
2548
|
};
|
|
2579
2549
|
|
|
2580
2550
|
// src/components/UniversalAgentConsole.tsx
|
|
2581
|
-
var
|
|
2582
|
-
var
|
|
2583
|
-
var
|
|
2551
|
+
var import_react50 = __toESM(require("react"));
|
|
2552
|
+
var import_react51 = require("@hugeicons/react");
|
|
2553
|
+
var import_core_free_icons14 = require("@hugeicons/core-free-icons");
|
|
2584
2554
|
var formatKeyName = (key) => key.replace(/([A-Z])/g, " $1").replace(/^./, (str) => str.toUpperCase()).trim();
|
|
2585
2555
|
var toTitleCaseSafe = (str) => {
|
|
2586
2556
|
if (!str) return "";
|
|
@@ -2609,13 +2579,13 @@ var UniversalAgentConsole = ({
|
|
|
2609
2579
|
onUploadArchives,
|
|
2610
2580
|
onDeleteArchive
|
|
2611
2581
|
}) => {
|
|
2612
|
-
const archiveRef = (0,
|
|
2613
|
-
const [pendingFiles, setPendingFiles] = (0,
|
|
2614
|
-
const [isUploading, setIsUploading] = (0,
|
|
2615
|
-
const [isActioning, setIsActioning] = (0,
|
|
2616
|
-
const [actionModal, setActionModal] = (0,
|
|
2617
|
-
const [actionMessage, setActionMessage] = (0,
|
|
2618
|
-
const [archiveToDelete, setArchiveToDelete] = (0,
|
|
2582
|
+
const archiveRef = (0, import_react50.useRef)(null);
|
|
2583
|
+
const [pendingFiles, setPendingFiles] = (0, import_react50.useState)([]);
|
|
2584
|
+
const [isUploading, setIsUploading] = (0, import_react50.useState)(false);
|
|
2585
|
+
const [isActioning, setIsActioning] = (0, import_react50.useState)(false);
|
|
2586
|
+
const [actionModal, setActionModal] = (0, import_react50.useState)(null);
|
|
2587
|
+
const [actionMessage, setActionMessage] = (0, import_react50.useState)("");
|
|
2588
|
+
const [archiveToDelete, setArchiveToDelete] = (0, import_react50.useState)(null);
|
|
2619
2589
|
const handleFileSelect = (e) => {
|
|
2620
2590
|
if (e.target.files && e.target.files.length > 0) {
|
|
2621
2591
|
setPendingFiles((prev) => [...prev, ...Array.from(e.target.files)]);
|
|
@@ -2644,36 +2614,36 @@ var UniversalAgentConsole = ({
|
|
|
2644
2614
|
}
|
|
2645
2615
|
};
|
|
2646
2616
|
const DynamicArrayAccordion = ({ items, parentKey }) => {
|
|
2647
|
-
const [activeFAQ, setActiveFAQ] = (0,
|
|
2648
|
-
return /* @__PURE__ */
|
|
2617
|
+
const [activeFAQ, setActiveFAQ] = (0, import_react50.useState)(null);
|
|
2618
|
+
return /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col relative z-10 bg-transparent w-full mt-2 border-t border-neutral-100" }, items.map((item, index) => {
|
|
2649
2619
|
const isOpen = activeFAQ === index;
|
|
2650
2620
|
let label = `${parentKey ? formatKeyName(parentKey) : "Item"} ${index + 1}`;
|
|
2651
2621
|
if (item.fullName) label = toTitleCaseSafe(item.fullName);
|
|
2652
2622
|
else if (item.role) label = item.role;
|
|
2653
2623
|
else if (item.proposedName) label = toTitleCaseSafe(item.proposedName);
|
|
2654
|
-
return /* @__PURE__ */
|
|
2624
|
+
return /* @__PURE__ */ import_react50.default.createElement("div", { key: index, className: `transition-all duration-300 ${index !== items.length - 1 ? "border-b border-neutral-100" : ""}` }, /* @__PURE__ */ import_react50.default.createElement("button", { className: "flex items-center justify-between w-full gap-4 text-left py-5 md:py-6 group outline-none bg-transparent", onClick: () => setActiveFAQ(isOpen ? null : index) }, /* @__PURE__ */ import_react50.default.createElement("span", { className: `text-[13px] md:text-[14px] transition-colors ${isOpen ? "text-black" : "text-neutral-700 group-hover:text-black"}` }, label), /* @__PURE__ */ import_react50.default.createElement("div", { className: `shrink-0 flex items-center justify-center w-8 h-8 rounded-full border transition-all duration-300 ${isOpen ? "rotate-180 border-black text-black" : "border-neutral-300 text-neutral-500"}` }, /* @__PURE__ */ import_react50.default.createElement(import_react51.HugeiconsIcon, { icon: import_core_free_icons14.ArrowDown01Icon, size: 16 }))), /* @__PURE__ */ import_react50.default.createElement("div", { className: `grid transition-all duration-300 ease-in-out ${isOpen ? "grid-rows-[1fr] pb-6 md:pb-8 opacity-100" : "grid-rows-[0fr] opacity-0"}` }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "overflow-hidden" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "pt-2 flex flex-col gap-3 pr-4 md:pr-12" }, renderDynamicObject(item)))));
|
|
2655
2625
|
}));
|
|
2656
2626
|
};
|
|
2657
2627
|
const renderValue = (key, value) => {
|
|
2658
2628
|
if (value === null || value === void 0 || value === "") return null;
|
|
2659
2629
|
if (typeof value === "string") {
|
|
2660
|
-
if (value.startsWith("http") || value.startsWith("data:image")) return /* @__PURE__ */
|
|
2661
|
-
if (key.toLowerCase().includes("name") && !value.includes("@")) return /* @__PURE__ */
|
|
2662
|
-
return /* @__PURE__ */
|
|
2630
|
+
if (value.startsWith("http") || value.startsWith("data:image")) return /* @__PURE__ */ import_react50.default.createElement("a", { href: value, download: true, target: "_blank", rel: "noopener noreferrer", className: "flex items-center gap-2 px-5 py-2 bg-white border border-neutral-100 text-black text-[11px] tracking-widest rounded-full hover:bg-neutral-50 transition-colors w-fit outline-none mt-2" }, /* @__PURE__ */ import_react50.default.createElement(import_react51.HugeiconsIcon, { icon: import_core_free_icons14.Download01Icon, size: 14 }), " Download File");
|
|
2631
|
+
if (key.toLowerCase().includes("name") && !value.includes("@")) return /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-[12px] md:text-[13px] leading-[1.8] text-neutral-600" }, toTitleCaseSafe(value));
|
|
2632
|
+
return /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-[12px] md:text-[13px] leading-[1.8] text-neutral-600" }, value);
|
|
2663
2633
|
}
|
|
2664
2634
|
if (Array.isArray(value)) {
|
|
2665
2635
|
const validItems = value.filter((item) => item !== null && item !== void 0 && item !== "");
|
|
2666
2636
|
if (validItems.length === 0) return null;
|
|
2667
|
-
if (typeof validItems[0] === "string") return /* @__PURE__ */
|
|
2668
|
-
return /* @__PURE__ */
|
|
2637
|
+
if (typeof validItems[0] === "string") return /* @__PURE__ */ import_react50.default.createElement("ul", { className: "list-disc pl-4 mt-1" }, validItems.map((v, i) => /* @__PURE__ */ import_react50.default.createElement("li", { key: i, className: "text-[12px] md:text-[13px] leading-[1.8] text-neutral-600" }, toTitleCaseSafe(v))));
|
|
2638
|
+
return /* @__PURE__ */ import_react50.default.createElement(DynamicArrayAccordion, { items: validItems, parentKey: key });
|
|
2669
2639
|
}
|
|
2670
2640
|
if (typeof value === "object") {
|
|
2671
2641
|
if (Object.keys(value).length === 0) return null;
|
|
2672
2642
|
const renderedObj = renderDynamicObject(value);
|
|
2673
2643
|
if (!renderedObj || Array.isArray(renderedObj) && renderedObj.length === 0) return null;
|
|
2674
|
-
return /* @__PURE__ */
|
|
2644
|
+
return /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col gap-3 mt-1 w-full border-l border-neutral-100 pl-4 py-2" }, renderedObj);
|
|
2675
2645
|
}
|
|
2676
|
-
return /* @__PURE__ */
|
|
2646
|
+
return /* @__PURE__ */ import_react50.default.createElement("span", { className: "text-sm text-black" }, String(value));
|
|
2677
2647
|
};
|
|
2678
2648
|
const renderDynamicObject = (obj) => {
|
|
2679
2649
|
if (!obj) return null;
|
|
@@ -2684,22 +2654,22 @@ var UniversalAgentConsole = ({
|
|
|
2684
2654
|
return true;
|
|
2685
2655
|
});
|
|
2686
2656
|
if (entries.length === 0) return null;
|
|
2687
|
-
return entries.map(([k, v]) => /* @__PURE__ */
|
|
2657
|
+
return entries.map(([k, v]) => /* @__PURE__ */ import_react50.default.createElement("div", { key: k, className: "flex flex-col items-start min-w-0 wrap-break-word w-full mb-3 last:mb-0" }, /* @__PURE__ */ import_react50.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 mb-1 uppercase" }, formatKeyName(k)), renderValue(k, v)));
|
|
2688
2658
|
};
|
|
2689
|
-
return /* @__PURE__ */
|
|
2659
|
+
return /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in duration-300 min-h-full pb-10" }, /* @__PURE__ */ import_react50.default.createElement(ManagedToaster, null), currentView === "list" && /* @__PURE__ */ import_react50.default.createElement(import_react50.default.Fragment, null, /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col items-start gap-1" }, /* @__PURE__ */ import_react50.default.createElement("h1", { className: " font-serif text-xl text-black tracking-tight" }, headerTitle), /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-sm text-neutral-500" }, headerDescription)), stats.length > 0 && /* @__PURE__ */ import_react50.default.createElement("div", { className: "w-full rounded-2xl max-w-3xl overflow-hidden bg-white" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-3 divide-y md:divide-y-0 md:divide-x divide-neutral-100" }, stats.map((stat, idx) => /* @__PURE__ */ import_react50.default.createElement("div", { key: idx, className: "p-6 flex items-center gap-4 hover:bg-neutral-50/50 transition-colors min-w-0" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "w-12 h-12 rounded-full border border-neutral-100 bg-white flex items-center justify-center text-black shrink-0" }, stat.icon), /* @__PURE__ */ import_react50.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-[10px] tracking-[0.2em] text-neutral-400 mb-1 truncate uppercase" }, stat.label), /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-xl text-black tracking-tight truncate" }, stat.value)))))), tabs.length > 0 && /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex items-center gap-6" }, tabs.map((tab) => /* @__PURE__ */ import_react50.default.createElement("button", { key: tab.id, onClick: () => onTabChange(tab.id), className: `pb-3 text-sm transition-colors outline-none ${activeTab === tab.id ? "text-black border-b border-black" : "text-neutral-400 hover:text-black"}` }, tab.label))), /* @__PURE__ */ import_react50.default.createElement("div", { className: "w-full bg-white rounded-2xl max-w-3xl overflow-hidden flex flex-col min-h-100" }, isLoadingList ? /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react50.default.createElement(import_react51.HugeiconsIcon, { icon: import_core_free_icons14.Loading03Icon, size: 32, className: "animate-spin text-black" })) : listData.length === 0 ? /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex-1 flex justify-center items-center text-neutral-500 text-sm py-20" }, "No matching applications found.") : /* @__PURE__ */ import_react50.default.createElement(import_react50.default.Fragment, null, /* @__PURE__ */ import_react50.default.createElement("div", { className: "divide-y divide-neutral-100 flex-1" }, listData.map((item) => /* @__PURE__ */ import_react50.default.createElement("div", { key: item.id, onClick: () => onRowClick(item.id), className: "flex items-center justify-between p-5 hover:bg-neutral-50/50 transition-colors cursor-pointer group min-w-0" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-sm text-black truncate pr-4" }, item.title), /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-xs text-neutral-500 truncate mt-1" }, item.subtitle)), /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col items-end gap-1 shrink-0 pl-4" }, /* @__PURE__ */ import_react50.default.createElement("span", { className: `text-[10px] tracking-widest px-3 py-1 rounded-full uppercase ${item.status === "COMPLETED" ? "bg-emerald-50 text-emerald-600" : "bg-neutral-50 text-neutral-600"}` }, item.status.replace(/_/g, " ")), /* @__PURE__ */ import_react50.default.createElement("span", { className: "text-[10px] text-neutral-400 mt-1" }, item.date))))), totalPages > 1 && /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex items-center justify-between p-5 bg-neutral-50/50" }, /* @__PURE__ */ import_react50.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", totalPages), /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react50.default.createElement("button", { onClick: () => onPageChange(currentPage - 1), disabled: currentPage === 1, className: "p-2 border border-neutral-100 rounded-full bg-white text-neutral-500 hover:text-black outline-none disabled:opacity-30" }, /* @__PURE__ */ import_react50.default.createElement(import_react51.HugeiconsIcon, { icon: import_core_free_icons14.ArrowLeft01Icon, size: 14 })), /* @__PURE__ */ import_react50.default.createElement("button", { onClick: () => onPageChange(currentPage + 1), disabled: currentPage >= totalPages, className: "p-2 border border-neutral-100 rounded-full bg-white text-neutral-500 hover:text-black outline-none disabled:opacity-30" }, /* @__PURE__ */ import_react50.default.createElement(import_react51.HugeiconsIcon, { icon: import_core_free_icons14.ArrowRight01Icon, size: 14 }))))))), currentView === "details" && selectedApp && /* @__PURE__ */ import_react50.default.createElement("div", { className: "w-full bg-white rounded-2xl p-6 sm:p-10 animate-in fade-in duration-300 max-w-3xl flex flex-col" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex items-center justify-between gap-4 pb-6" }, /* @__PURE__ */ import_react50.default.createElement("button", { onClick: () => {
|
|
2690
2660
|
onBackToList();
|
|
2691
2661
|
setPendingFiles([]);
|
|
2692
|
-
}, className: "flex items-center gap-2 text-[10px] text-neutral-400 hover:text-black tracking-widest transition-colors outline-none uppercase" }, /* @__PURE__ */
|
|
2662
|
+
}, className: "flex items-center gap-2 text-[10px] text-neutral-400 hover:text-black tracking-widest transition-colors outline-none uppercase" }, /* @__PURE__ */ import_react50.default.createElement(import_react51.HugeiconsIcon, { icon: import_core_free_icons14.ArrowLeft01Icon, size: 14 }), " Back to List"), /* @__PURE__ */ import_react50.default.createElement("span", { className: `text-[10px] tracking-widest px-4 py-1.5 rounded-full uppercase ${selectedApp.status === "COMPLETED" ? "bg-emerald-50 text-emerald-600" : "bg-neutral-50 text-neutral-600"}` }, selectedApp.status.replace(/_/g, " "))), /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col gap-2 mb-8" }, /* @__PURE__ */ import_react50.default.createElement("h2", { className: " font-serif text-xl text-black tracking-tight" }, selectedApp.name || selectedApp.title), /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-sm text-neutral-500" }, selectedApp.type ? selectedApp.type.replace(/_/g, " ").toLowerCase().replace(/\b\w/g, (c) => c.toUpperCase()) : selectedApp.subtitle)), selectedApp.agentId === currentAgentId && selectedApp.metadata && Object.keys(selectedApp.metadata).length > 0 ? /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col gap-5" }, renderDynamicObject(selectedApp.metadata)) : selectedApp.agentId === currentAgentId ? /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col gap-5" }, /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-sm text-neutral-500" }, "No application data extracted.")) : null, selectedApp.agentId && /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col gap-4 pt-8 mt-4 border-t border-neutral-100" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col gap-1 mb-4" }, /* @__PURE__ */ import_react50.default.createElement("h3", { className: " font-serif text-sm text-black" }, "Official Archives"), /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-xs text-neutral-500 leading-relaxed" }, "Upload final certificates or documents. Once marked completed, the archive unlocks for the user.")), selectedApp.archives?.map((arch) => /* @__PURE__ */ import_react50.default.createElement("div", { key: arch.id, className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex items-center gap-3 min-w-0" }, /* @__PURE__ */ import_react50.default.createElement(import_react51.HugeiconsIcon, { icon: import_core_free_icons14.File02Icon, size: 18, className: "shrink-0" }), /* @__PURE__ */ import_react50.default.createElement("span", { className: "truncate pr-2" }, arch.name)), /* @__PURE__ */ import_react50.default.createElement("button", { onClick: () => setArchiveToDelete(arch), className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0" }, /* @__PURE__ */ import_react50.default.createElement(import_react51.HugeiconsIcon, { icon: import_core_free_icons14.Delete02Icon, size: 16 })))), pendingFiles.map((file, idx) => /* @__PURE__ */ import_react50.default.createElement("div", { key: idx, className: "flex items-center justify-between text-neutral-600 text-sm w-full" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex items-center gap-3 min-w-0" }, /* @__PURE__ */ import_react50.default.createElement(import_react51.HugeiconsIcon, { icon: import_core_free_icons14.AttachmentIcon, size: 18, className: "shrink-0" }), /* @__PURE__ */ import_react50.default.createElement("span", { className: "truncate pr-2" }, file.name)), /* @__PURE__ */ import_react50.default.createElement("button", { onClick: () => setPendingFiles((p) => p.filter((_, i) => i !== idx)), className: "text-neutral-400 hover:text-red-500 transition-colors p-1 outline-none shrink-0" }, /* @__PURE__ */ import_react50.default.createElement(import_react51.HugeiconsIcon, { icon: import_core_free_icons14.Cancel01Icon, size: 16 })))), /* @__PURE__ */ import_react50.default.createElement("input", { type: "file", multiple: true, ref: archiveRef, onChange: handleFileSelect, className: "hidden", accept: "application/pdf,image/*" }), /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-3 w-full" }, /* @__PURE__ */ import_react50.default.createElement("button", { onClick: () => archiveRef.current?.click(), disabled: selectedApp.status !== "COMPLETED" || isUploading, className: "flex items-center justify-center gap-3 p-4 border border-neutral-100 rounded-full hover:bg-neutral-50 transition-colors text-black text-sm w-full outline-none disabled:opacity-50" }, /* @__PURE__ */ import_react50.default.createElement(import_react51.HugeiconsIcon, { icon: import_core_free_icons14.Upload01Icon, size: 18, className: "text-neutral-400" }), " Select Files to Upload"), pendingFiles.length > 0 && /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-3 w-full sm:w-auto shrink-0" }, /* @__PURE__ */ import_react50.default.createElement("button", { onClick: () => setPendingFiles([]), disabled: isUploading, className: "px-6 py-2 text-neutral-600 text-[11px] tracking-widest rounded-full hover:bg-neutral-200 outline-none w-full sm:w-auto uppercase" }, "Clear All"), /* @__PURE__ */ import_react50.default.createElement(ThreeDActionButton, { onClick: executeUpload, disabled: isUploading, isLoading: isUploading, className: "w-full sm:w-auto" }, "Upload ", pendingFiles.length, " File(s)")))), /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col sm:flex-row items-center justify-between gap-4 mt-8 pt-6" }, !selectedApp.agentId ? /* @__PURE__ */ import_react50.default.createElement(ThreeDActionButton, { onClick: async () => {
|
|
2693
2663
|
setIsActioning(true);
|
|
2694
2664
|
await onAcceptApplication(selectedApp.id);
|
|
2695
2665
|
setIsActioning(false);
|
|
2696
|
-
}, disabled: isActioning, isLoading: isActioning, className: "w-full sm:w-auto" }, "Accept Application") : selectedApp.agentId !== currentAgentId ? /* @__PURE__ */
|
|
2666
|
+
}, disabled: isActioning, isLoading: isActioning, className: "w-full sm:w-auto" }, "Accept Application") : selectedApp.agentId !== currentAgentId ? /* @__PURE__ */ import_react50.default.createElement("div", { className: "w-full p-4 border border-red-100 bg-red-50/30 rounded-xl flex items-start gap-3" }, /* @__PURE__ */ import_react50.default.createElement(import_react51.HugeiconsIcon, { icon: import_core_free_icons14.Cancel01Icon, size: 16, className: "text-red-500 shrink-0 mt-0.5" }), /* @__PURE__ */ import_react50.default.createElement("div", null, /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-sm text-red-700" }, "Application Taken"), /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-xs text-red-600 mt-1" }, "Currently handled by ", selectedApp.agentName || "another agent", "."))) : /* @__PURE__ */ import_react50.default.createElement("div", { className: "w-full flex flex-col sm:flex-row items-center gap-4 justify-between" }, /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-xs text-neutral-500" }, "You are the assigned agent."), /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col sm:flex-row items-center justify-end gap-3 w-full sm:w-auto" }, /* @__PURE__ */ import_react50.default.createElement("button", { onClick: () => setActionModal("query"), disabled: selectedApp.status === "COMPLETED", className: "w-full sm:w-auto px-6 py-2 bg-white border border-neutral-100 text-neutral-600 text-[11px] tracking-widest rounded-full hover:bg-neutral-50 transition-colors outline-none disabled:opacity-30 uppercase" }, "Query"), /* @__PURE__ */ import_react50.default.createElement("button", { onClick: () => setActionModal("reject"), disabled: selectedApp.status === "COMPLETED", className: "w-full sm:w-auto px-6 py-2 bg-white border border-neutral-100 text-neutral-600 text-[11px] tracking-widest rounded-full hover:bg-neutral-50 transition-colors outline-none disabled:opacity-30 uppercase" }, "Reject"), /* @__PURE__ */ import_react50.default.createElement(ThreeDActionButton, { onClick: () => setActionModal("success"), disabled: selectedApp.status === "COMPLETED", className: "w-full sm:w-auto" }, "Mark Success"))))), actionModal && /* @__PURE__ */ import_react50.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isActioning && setActionModal(null) }), /* @__PURE__ */ import_react50.default.createElement("div", { className: "relative w-full max-w-md bg-white rounded-3xl flex flex-col overflow-hidden animate-in zoom-in-95 duration-200 text-left" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "p-6" }, /* @__PURE__ */ import_react50.default.createElement("h3", { className: " font-serif text-lg text-black tracking-tight capitalize mb-2" }, actionModal === "success" ? "Complete Application" : `${actionModal} Application`), /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-xs text-neutral-500" }, actionModal === "success" ? "Are you sure you want to mark this application as successfully completed?" : `Please provide a clear reason for the user. They will see this message and be asked to fix their application.`)), (actionModal === "query" || actionModal === "reject") && /* @__PURE__ */ import_react50.default.createElement("div", { className: "p-6 pb-2" }, /* @__PURE__ */ import_react50.default.createElement(TextInput, { label: "Reason for Action", value: actionMessage, onChange: setActionMessage, placeholder: "Enter your reason here...", disabled: isActioning })), /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex items-center p-6 pt-4 gap-3" }, /* @__PURE__ */ import_react50.default.createElement("button", { onClick: () => setActionModal(null), disabled: isActioning, className: "flex-1 py-3 text-[11px] tracking-widest uppercase text-neutral-600 rounded-full hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50" }, "Cancel"), /* @__PURE__ */ import_react50.default.createElement(ThreeDActionButton, { onClick: async () => {
|
|
2697
2667
|
setIsActioning(true);
|
|
2698
2668
|
await onUpdateStatus(selectedApp.id, actionModal === "success" ? "COMPLETED" : actionModal === "reject" ? "REJECTED" : "QUEUED", actionMessage);
|
|
2699
2669
|
setIsActioning(false);
|
|
2700
2670
|
setActionModal(null);
|
|
2701
2671
|
setActionMessage("");
|
|
2702
|
-
}, disabled: isActioning || (actionModal === "query" || actionModal === "reject") && actionMessage.trim().length < 5, isLoading: isActioning, className: "flex-1" }, "Confirm ", actionModal)))), archiveToDelete && /* @__PURE__ */
|
|
2672
|
+
}, disabled: isActioning || (actionModal === "query" || actionModal === "reject") && actionMessage.trim().length < 5, isLoading: isActioning, className: "flex-1" }, "Confirm ", actionModal)))), archiveToDelete && /* @__PURE__ */ import_react50.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isActioning && setArchiveToDelete(null) }), /* @__PURE__ */ import_react50.default.createElement("div", { className: "relative w-full max-w-md bg-white rounded-3xl flex flex-col overflow-hidden animate-in zoom-in-95 duration-200 text-left" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "p-6" }, /* @__PURE__ */ import_react50.default.createElement("h3", { className: " font-serif text-lg text-black tracking-tight mb-2" }, "Delete Document?"), /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-xs text-neutral-500" }, 'Are you sure you want to permanently delete "', archiveToDelete.name, '"?')), /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex items-center p-6 gap-3" }, /* @__PURE__ */ import_react50.default.createElement("button", { onClick: () => setArchiveToDelete(null), disabled: isActioning, className: "flex-1 py-3 text-[11px] tracking-widest uppercase text-neutral-600 rounded-full hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50" }, "Cancel"), /* @__PURE__ */ import_react50.default.createElement(ThreeDActionButton, { onClick: async () => {
|
|
2703
2673
|
setIsActioning(true);
|
|
2704
2674
|
await onDeleteArchive(selectedApp.id, archiveToDelete.id);
|
|
2705
2675
|
setIsActioning(false);
|
|
@@ -2708,7 +2678,7 @@ var UniversalAgentConsole = ({
|
|
|
2708
2678
|
};
|
|
2709
2679
|
|
|
2710
2680
|
// src/components/UniversalOverviewPage.tsx
|
|
2711
|
-
var
|
|
2681
|
+
var import_react52 = __toESM(require("react"));
|
|
2712
2682
|
var UniversalOverviewPage = ({
|
|
2713
2683
|
headerTitle,
|
|
2714
2684
|
headerDescription,
|
|
@@ -2718,7 +2688,7 @@ var UniversalOverviewPage = ({
|
|
|
2718
2688
|
primaryAction,
|
|
2719
2689
|
alerts = []
|
|
2720
2690
|
}) => {
|
|
2721
|
-
return /* @__PURE__ */
|
|
2691
|
+
return /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in duration-300 min-h-full pb-10" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex items-center justify-between gap-4" }, /* @__PURE__ */ import_react52.default.createElement("div", null, /* @__PURE__ */ import_react52.default.createElement("h1", { className: " font-serif text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription))), quickStats.length > 0 && /* @__PURE__ */ import_react52.default.createElement("div", { className: "w-full rounded-2xl overflow-hidden max-w-3xl bg-white" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-3 divide-y md:divide-y-0 md:divide-x divide-neutral-100" }, quickStats.map((stat, idx) => /* @__PURE__ */ import_react52.default.createElement("div", { key: idx, className: "p-6 flex items-center gap-4 hover:bg-neutral-50/50 transition-colors min-w-0" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "w-12 h-12 rounded-full border border-neutral-100 bg-white flex items-center justify-center text-black shrink-0" }, stat.icon), /* @__PURE__ */ import_react52.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-[10px] tracking-[0.2em] text-neutral-400 mb-1 truncate uppercase" }, stat.label), /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-lg md:text-xl text-black tracking-tight truncate" }, stat.value)))))), /* @__PURE__ */ import_react52.default.createElement("div", { className: "w-full rounded-2xl max-w-3xl overflow-hidden bg-white min-w-0" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "p-6 sm:p-8 flex flex-col h-full min-w-0 gap-6" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-wrap items-center justify-between gap-4 border-b border-neutral-100 pb-4" }, /* @__PURE__ */ import_react52.default.createElement("h3", { className: " font-serif text-[11px] text-black tracking-[0.2em] uppercase" }, detailsTitle), primaryAction && (primaryAction.href ? /* @__PURE__ */ import_react52.default.createElement(
|
|
2722
2692
|
ThreeDButton,
|
|
2723
2693
|
{
|
|
2724
2694
|
href: primaryAction.href,
|
|
@@ -2727,7 +2697,7 @@ var UniversalOverviewPage = ({
|
|
|
2727
2697
|
},
|
|
2728
2698
|
primaryAction.label,
|
|
2729
2699
|
primaryAction.icon
|
|
2730
|
-
) : /* @__PURE__ */
|
|
2700
|
+
) : /* @__PURE__ */ import_react52.default.createElement(
|
|
2731
2701
|
ThreeDActionButton,
|
|
2732
2702
|
{
|
|
2733
2703
|
onClick: primaryAction.onClick,
|
|
@@ -2736,19 +2706,19 @@ var UniversalOverviewPage = ({
|
|
|
2736
2706
|
},
|
|
2737
2707
|
primaryAction.label,
|
|
2738
2708
|
primaryAction.icon
|
|
2739
|
-
))), /* @__PURE__ */
|
|
2709
|
+
))), /* @__PURE__ */ import_react52.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-8" }, details.map((detail, idx) => /* @__PURE__ */ import_react52.default.createElement("div", { key: idx, className: "min-w-0" }, /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-[10px] tracking-[0.2em] text-neutral-400 mb-1.5 uppercase" }, detail.label), /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-[13px] text-black truncate" }, detail.value)))), alerts.map((alert, idx) => {
|
|
2740
2710
|
const bgClass = alert.type === "warning" ? "bg-amber-50/50" : alert.type === "info" ? "bg-blue-50/50" : "bg-red-50/50";
|
|
2741
2711
|
const textClass = alert.type === "warning" ? "text-amber-600" : alert.type === "info" ? "text-blue-600" : "text-red-600";
|
|
2742
2712
|
const valClass = alert.type === "warning" ? "text-amber-700" : alert.type === "info" ? "text-blue-700" : "text-red-700";
|
|
2743
2713
|
const lblClass = alert.type === "warning" ? "text-amber-400" : alert.type === "info" ? "text-blue-400" : "text-red-400";
|
|
2744
|
-
return /* @__PURE__ */
|
|
2714
|
+
return /* @__PURE__ */ import_react52.default.createElement("div", { key: idx, className: `mt-4 p-5 rounded-xl flex flex-col gap-4 ${bgClass}` }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react52.default.createElement("span", { className: `text-[11px] tracking-widest uppercase ${textClass}` }, alert.title)), alert.items.map((item, itemIdx) => /* @__PURE__ */ import_react52.default.createElement("div", { key: itemIdx }, /* @__PURE__ */ import_react52.default.createElement("span", { className: `text-[10px] tracking-[0.2em] block mb-1 uppercase ${lblClass}` }, item.label), /* @__PURE__ */ import_react52.default.createElement("p", { className: `text-[13px] leading-relaxed ${valClass}` }, item.text))));
|
|
2745
2715
|
}))));
|
|
2746
2716
|
};
|
|
2747
2717
|
|
|
2748
2718
|
// src/components/UniversalErrorView.tsx
|
|
2749
|
-
var
|
|
2750
|
-
var
|
|
2751
|
-
var
|
|
2719
|
+
var import_react53 = __toESM(require("react"));
|
|
2720
|
+
var import_react54 = require("@hugeicons/react");
|
|
2721
|
+
var import_core_free_icons15 = require("@hugeicons/core-free-icons");
|
|
2752
2722
|
var UniversalErrorView = ({
|
|
2753
2723
|
isBooting,
|
|
2754
2724
|
isLoading,
|
|
@@ -2760,7 +2730,7 @@ var UniversalErrorView = ({
|
|
|
2760
2730
|
returnLabel = "Return to Workspace"
|
|
2761
2731
|
}) => {
|
|
2762
2732
|
if (isBooting || isLoading && !activeData) {
|
|
2763
|
-
return /* @__PURE__ */
|
|
2733
|
+
return /* @__PURE__ */ import_react53.default.createElement("div", { className: "flex items-center justify-center h-screen w-full bg-transparent" }, /* @__PURE__ */ import_react53.default.createElement(PageSpinner, null));
|
|
2764
2734
|
}
|
|
2765
2735
|
if (!isLoading && (!activeData || activeError)) {
|
|
2766
2736
|
const errorString = typeof activeError === "string" ? activeError : JSON.stringify(activeError || "");
|
|
@@ -2771,7 +2741,7 @@ var UniversalErrorView = ({
|
|
|
2771
2741
|
const apiMessage = typeof activeError === "string" && activeError.trim() !== "" ? activeError : null;
|
|
2772
2742
|
let title = "Oops Connection Error";
|
|
2773
2743
|
let description = apiMessage || `We could not load your request. Please check your connection and try again.`;
|
|
2774
|
-
let IconComponent =
|
|
2744
|
+
let IconComponent = import_core_free_icons15.ConfusedIcon;
|
|
2775
2745
|
if (isNotFoundError) {
|
|
2776
2746
|
title = "Oops its not your fault";
|
|
2777
2747
|
description = apiMessage || `We could not reach the ${envName} you just loaded. Our team has been notified.`;
|
|
@@ -2779,7 +2749,7 @@ var UniversalErrorView = ({
|
|
|
2779
2749
|
title = "Access Restricted";
|
|
2780
2750
|
description = apiMessage || `You have insufficient permissions to view this ${envName}. Please contact your administrator.`;
|
|
2781
2751
|
}
|
|
2782
|
-
return /* @__PURE__ */
|
|
2752
|
+
return /* @__PURE__ */ import_react53.default.createElement("div", { className: "flex flex-col items-center justify-center h-screen w-full px-4 animate-in fade-in duration-500" }, /* @__PURE__ */ import_react53.default.createElement("div", { className: "mb-4 flex justify-center" }, /* @__PURE__ */ import_react53.default.createElement(import_react54.HugeiconsIcon, { icon: IconComponent, size: 48, className: "text-neutral-300" })), /* @__PURE__ */ import_react53.default.createElement("h2", { className: " font-serif text-lg text-black tracking-tight " }, title), /* @__PURE__ */ import_react53.default.createElement("p", { className: "text-xs mt-2 mb-8 text-neutral-500 max-w-sm text-center leading-relaxed" }, description), /* @__PURE__ */ import_react53.default.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-3 w-full justify-center sm:w-auto" }, isNotFoundError || isPermissionError ? /* @__PURE__ */ import_react53.default.createElement(
|
|
2783
2753
|
"button",
|
|
2784
2754
|
{
|
|
2785
2755
|
onClick: () => window.location.href = returnUrl,
|
|
@@ -2788,14 +2758,14 @@ var UniversalErrorView = ({
|
|
|
2788
2758
|
returnLabel
|
|
2789
2759
|
) : (
|
|
2790
2760
|
// Soft errors (Network timeouts) allow them to retry or optionally retreat
|
|
2791
|
-
/* @__PURE__ */
|
|
2761
|
+
/* @__PURE__ */ import_react53.default.createElement(import_react53.default.Fragment, null, envName.toLowerCase().includes("application") && /* @__PURE__ */ import_react53.default.createElement(
|
|
2792
2762
|
"button",
|
|
2793
2763
|
{
|
|
2794
2764
|
onClick: () => window.location.href = returnUrl,
|
|
2795
|
-
className: "px-6 py-2 bg-transparent border border-neutral-
|
|
2765
|
+
className: "px-6 py-2 bg-transparent border border-neutral-100 hover:bg-neutral-50 text-neutral-600 hover:text-black rounded-full text-[11px] tracking-widest transition-colors w-full sm:w-auto outline-none"
|
|
2796
2766
|
},
|
|
2797
2767
|
"Back Home"
|
|
2798
|
-
), /* @__PURE__ */
|
|
2768
|
+
), /* @__PURE__ */ import_react53.default.createElement(
|
|
2799
2769
|
"button",
|
|
2800
2770
|
{
|
|
2801
2771
|
onClick: onRetry,
|
|
@@ -2810,9 +2780,9 @@ var UniversalErrorView = ({
|
|
|
2810
2780
|
};
|
|
2811
2781
|
|
|
2812
2782
|
// src/components/UniversalLookupPage.tsx
|
|
2813
|
-
var
|
|
2814
|
-
var
|
|
2815
|
-
var
|
|
2783
|
+
var import_react55 = __toESM(require("react"));
|
|
2784
|
+
var import_react56 = require("@hugeicons/react");
|
|
2785
|
+
var import_core_free_icons16 = require("@hugeicons/core-free-icons");
|
|
2816
2786
|
var UniversalLookupPage = ({
|
|
2817
2787
|
headerTitle,
|
|
2818
2788
|
headerDescription,
|
|
@@ -2826,17 +2796,17 @@ var UniversalLookupPage = ({
|
|
|
2826
2796
|
resultContent,
|
|
2827
2797
|
modals
|
|
2828
2798
|
}) => {
|
|
2829
|
-
const [isTypeModalOpen, setIsTypeModalOpen] = (0,
|
|
2799
|
+
const [isTypeModalOpen, setIsTypeModalOpen] = (0, import_react55.useState)(false);
|
|
2830
2800
|
const currentOptionLabel = searchOptions.find((opt) => opt.value === selectedSearchType)?.label || "Select Type";
|
|
2831
|
-
return /* @__PURE__ */
|
|
2801
|
+
return /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex flex-col max-w-3xl rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300 min-h-full pb-20" }, /* @__PURE__ */ import_react55.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react55.default.createElement("h1", { className: " font-serif text-xl text-black mb-1 truncate tracking-tight" }, headerTitle), /* @__PURE__ */ import_react55.default.createElement("p", { className: "text-xs text-neutral-500 truncate" }, headerDescription))), /* @__PURE__ */ import_react55.default.createElement("div", { className: "w-full max-w-2xl pb-8" }, /* @__PURE__ */ import_react55.default.createElement("form", { className: "flex flex-col gap-6", onSubmit: onSearch, autoComplete: "off" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex gap-4" }, /* @__PURE__ */ import_react55.default.createElement(
|
|
2832
2802
|
"button",
|
|
2833
2803
|
{
|
|
2834
2804
|
type: "button",
|
|
2835
2805
|
onClick: () => setIsTypeModalOpen(true),
|
|
2836
|
-
className: "mt-2 text-[12px] tracking-widest bg-transparent border-b border-neutral-
|
|
2806
|
+
className: "mt-2 text-[12px] tracking-widest bg-transparent border-b border-neutral-100 text-black text-left outline-none focus:border-black shrink-0 uppercase"
|
|
2837
2807
|
},
|
|
2838
2808
|
currentOptionLabel
|
|
2839
|
-
), /* @__PURE__ */
|
|
2809
|
+
), /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ import_react55.default.createElement(
|
|
2840
2810
|
TextInput,
|
|
2841
2811
|
{
|
|
2842
2812
|
placeholder: "Enter Exact ID, Email, or Slug...",
|
|
@@ -2844,7 +2814,7 @@ var UniversalLookupPage = ({
|
|
|
2844
2814
|
onChange: onSearchQueryChange,
|
|
2845
2815
|
disabled: isSearching
|
|
2846
2816
|
}
|
|
2847
|
-
))), /* @__PURE__ */
|
|
2817
|
+
))), /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ import_react55.default.createElement(
|
|
2848
2818
|
ThreeDActionButton,
|
|
2849
2819
|
{
|
|
2850
2820
|
type: "submit",
|
|
@@ -2852,9 +2822,9 @@ var UniversalLookupPage = ({
|
|
|
2852
2822
|
isLoading: isSearching,
|
|
2853
2823
|
className: "min-w-32"
|
|
2854
2824
|
},
|
|
2855
|
-
/* @__PURE__ */
|
|
2825
|
+
/* @__PURE__ */ import_react55.default.createElement(import_react56.HugeiconsIcon, { icon: import_core_free_icons16.Search01Icon, size: 14, className: "mr-2" }),
|
|
2856
2826
|
" Lookup"
|
|
2857
|
-
)))), resultContent && /* @__PURE__ */
|
|
2827
|
+
)))), resultContent && /* @__PURE__ */ import_react55.default.createElement("div", { className: "w-full max-w-2xl bg-white text-left animate-in fade-in slide-in-from-bottom-4" }, /* @__PURE__ */ import_react55.default.createElement("h3", { className: " font-serif text-[10px] text-neutral-400 tracking-[0.2em] mb-6 uppercase" }, "Entity Record Found"), resultContent), isTypeModalOpen && /* @__PURE__ */ import_react55.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setIsTypeModalOpen(false) }), /* @__PURE__ */ import_react55.default.createElement("div", { className: "relative w-80 bg-white shadow-2xl rounded-2xl flex flex-col items-center overflow-hidden animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react55.default.createElement("h3", { className: " font-serif text-[14px] text-black tracking-tight mb-2" }, "Select Entity Type")), /* @__PURE__ */ import_react55.default.createElement("div", { className: "w-full flex flex-col pl-2 pr-2 pb-2" }, searchOptions.map((option) => /* @__PURE__ */ import_react55.default.createElement(
|
|
2858
2828
|
"button",
|
|
2859
2829
|
{
|
|
2860
2830
|
key: option.value,
|
|
@@ -2865,16 +2835,16 @@ var UniversalLookupPage = ({
|
|
|
2865
2835
|
},
|
|
2866
2836
|
className: `text-left px-4 py-3 text-[12px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none ${selectedSearchType === option.value ? "bg-neutral-100 text-black" : "text-neutral-500 hover:bg-neutral-50 hover:text-black"}`
|
|
2867
2837
|
},
|
|
2868
|
-
/* @__PURE__ */
|
|
2869
|
-
selectedSearchType === option.value && /* @__PURE__ */
|
|
2870
|
-
))), /* @__PURE__ */
|
|
2838
|
+
/* @__PURE__ */ import_react55.default.createElement("span", { className: "truncate pr-2" }, option.label),
|
|
2839
|
+
selectedSearchType === option.value && /* @__PURE__ */ import_react55.default.createElement("div", { className: "w-1.5 h-1.5 bg-black rounded-full shrink-0" })
|
|
2840
|
+
))), /* @__PURE__ */ import_react55.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react55.default.createElement("button", { type: "button", onClick: () => setIsTypeModalOpen(false), className: "w-full py-2.5 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors outline-none" }, "Cancel")))), modals);
|
|
2871
2841
|
};
|
|
2872
2842
|
|
|
2873
2843
|
// src/components/UniversalDirectoryPage.tsx
|
|
2874
|
-
var
|
|
2875
|
-
var
|
|
2876
|
-
var
|
|
2877
|
-
var PageSpinner4 = () => /* @__PURE__ */
|
|
2844
|
+
var import_react57 = __toESM(require("react"));
|
|
2845
|
+
var import_react58 = require("@hugeicons/react");
|
|
2846
|
+
var import_core_free_icons17 = require("@hugeicons/core-free-icons");
|
|
2847
|
+
var PageSpinner4 = () => /* @__PURE__ */ import_react57.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react57.default.createElement(import_react58.HugeiconsIcon, { icon: import_core_free_icons17.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
2878
2848
|
var UniversalDirectoryPage = ({
|
|
2879
2849
|
headerTitle,
|
|
2880
2850
|
headerDescription,
|
|
@@ -2896,33 +2866,33 @@ var UniversalDirectoryPage = ({
|
|
|
2896
2866
|
detailsContent,
|
|
2897
2867
|
modals
|
|
2898
2868
|
}) => {
|
|
2899
|
-
return /* @__PURE__ */
|
|
2869
|
+
return /* @__PURE__ */ import_react57.default.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl fade-in duration-300 p-6 rounded-2xl bg-white" }, /* @__PURE__ */ import_react57.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react57.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, currentView === "list" ? /* @__PURE__ */ import_react57.default.createElement(import_react57.default.Fragment, null, /* @__PURE__ */ import_react57.default.createElement("div", { className: "w-full" }, /* @__PURE__ */ import_react57.default.createElement("h1", { className: " font-serif text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ import_react57.default.createElement("p", { className: "text-xs text-neutral-500 mb-6" }, headerDescription), !hideSearch && /* @__PURE__ */ import_react57.default.createElement(
|
|
2900
2870
|
TextInput,
|
|
2901
2871
|
{
|
|
2902
2872
|
placeholder: searchPlaceholder,
|
|
2903
2873
|
value: searchQuery,
|
|
2904
2874
|
onChange: onSearchChange
|
|
2905
2875
|
}
|
|
2906
|
-
)), headerAction && /* @__PURE__ */
|
|
2876
|
+
)), headerAction && /* @__PURE__ */ import_react57.default.createElement("div", { className: "shrink-0 w-full sm:w-auto mt-4 sm:mt-0" }, headerAction)) : /* @__PURE__ */ import_react57.default.createElement("div", { className: "flex flex-col items-start gap-3" }, /* @__PURE__ */ import_react57.default.createElement("button", { onClick: onBackToList, className: "text-[10px] text-neutral-400 hover:text-black tracking-[0.2em] flex items-center gap-1.5 transition-colors outline-none uppercase" }, /* @__PURE__ */ import_react57.default.createElement(import_react58.HugeiconsIcon, { icon: import_core_free_icons17.ArrowLeft01Icon, size: 12 }), " Back"))), currentView === "list" && /* @__PURE__ */ import_react57.default.createElement("div", { className: "w-full overflow-hidden pt-2" }, isLoading ? /* @__PURE__ */ import_react57.default.createElement(PageSpinner4, null) : /* @__PURE__ */ import_react57.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "divide-y divide-neutral-100" }, items.length === 0 ? /* @__PURE__ */ import_react57.default.createElement("p", { className: "text-xs text-neutral-500 py-6 text-center" }, "No records found.") : items.map((item) => /* @__PURE__ */ import_react57.default.createElement(
|
|
2907
2877
|
"div",
|
|
2908
2878
|
{
|
|
2909
2879
|
key: item.id,
|
|
2910
2880
|
onClick: () => onRowClick(item.id),
|
|
2911
2881
|
className: "flex items-center justify-between p-4 sm:p-5 hover:bg-neutral-50/50 transition-colors cursor-pointer group min-w-0"
|
|
2912
2882
|
},
|
|
2913
|
-
/* @__PURE__ */
|
|
2914
|
-
item.rightBadge && /* @__PURE__ */
|
|
2915
|
-
))), totalPages > 1 && /* @__PURE__ */
|
|
2883
|
+
/* @__PURE__ */ import_react57.default.createElement("div", { className: "flex items-center gap-3 sm:gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "w-10 h-10 shrink-0 rounded-full flex items-center justify-center bg-neutral-100 text-black text-xs" }, item.icon), /* @__PURE__ */ import_react57.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "text-sm text-black truncate pr-2" }, item.primaryText), /* @__PURE__ */ import_react57.default.createElement("div", { className: "text-xs text-neutral-500 truncate pr-2 mt-0.5" }, item.secondaryText))),
|
|
2884
|
+
item.rightBadge && /* @__PURE__ */ import_react57.default.createElement("div", { className: "shrink-0 pl-2" }, /* @__PURE__ */ import_react57.default.createElement("span", { className: `text-[10px] tracking-[0.2em] px-3 py-1 rounded-full whitespace-nowrap uppercase ${item.rightBadgeClass || "text-neutral-500 border border-neutral-100 bg-white"}` }, item.rightBadge))
|
|
2885
|
+
))), totalPages > 1 && /* @__PURE__ */ import_react57.default.createElement("div", { className: "flex items-center justify-between p-4 sm:p-5" }, /* @__PURE__ */ import_react57.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em] uppercase" }, "Page ", currentPage, " of ", totalPages), /* @__PURE__ */ import_react57.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react57.default.createElement("button", { onClick: () => onPageChange(currentPage - 1), disabled: currentPage === 1 || isLoading, className: "p-2 border border-neutral-100 rounded-full bg-white text-neutral-500 hover:text-black outline-none disabled:opacity-30" }, /* @__PURE__ */ import_react57.default.createElement(import_react58.HugeiconsIcon, { icon: import_core_free_icons17.ArrowLeft01Icon, size: 14 })), /* @__PURE__ */ import_react57.default.createElement("button", { onClick: () => onPageChange(currentPage + 1), disabled: currentPage >= totalPages || isLoading, className: "p-2 border border-neutral-100 rounded-full bg-white text-neutral-500 hover:text-black outline-none disabled:opacity-30" }, /* @__PURE__ */ import_react57.default.createElement(import_react58.HugeiconsIcon, { icon: import_core_free_icons17.ArrowRight01Icon, size: 14 })))))), currentView === "details" && detailsContent, modals);
|
|
2916
2886
|
};
|
|
2917
2887
|
|
|
2918
2888
|
// src/components/AiApproveDecline.tsx
|
|
2919
|
-
var
|
|
2920
|
-
var
|
|
2921
|
-
var
|
|
2889
|
+
var import_react59 = __toESM(require("react"));
|
|
2890
|
+
var import_react60 = require("@hugeicons/react");
|
|
2891
|
+
var import_core_free_icons18 = require("@hugeicons/core-free-icons");
|
|
2922
2892
|
var AiApproveDecline = ({ suggestionTitle, suggestionValue, onApprove, onDecline, onEdit }) => {
|
|
2923
|
-
const [isEditing, setIsEditing] = (0,
|
|
2924
|
-
const [editVal, setEditVal] = (0,
|
|
2925
|
-
return /* @__PURE__ */
|
|
2893
|
+
const [isEditing, setIsEditing] = (0, import_react59.useState)(false);
|
|
2894
|
+
const [editVal, setEditVal] = (0, import_react59.useState)(typeof suggestionValue === "string" ? suggestionValue : "");
|
|
2895
|
+
return /* @__PURE__ */ import_react59.default.createElement("div", { className: "border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white p-5 rounded-2xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react59.default.createElement("div", null, /* @__PURE__ */ import_react59.default.createElement("span", { className: "text-[10px] tracking-widest text-purple-600 block mb-1 uppercase" }, "AI Suggestion: ", suggestionTitle), !isEditing ? /* @__PURE__ */ import_react59.default.createElement("div", { className: "text-sm text-black" }, suggestionValue) : /* @__PURE__ */ import_react59.default.createElement(
|
|
2926
2896
|
"input",
|
|
2927
2897
|
{
|
|
2928
2898
|
type: "text",
|
|
@@ -2931,37 +2901,37 @@ var AiApproveDecline = ({ suggestionTitle, suggestionValue, onApprove, onDecline
|
|
|
2931
2901
|
className: "w-full text-sm p-2 border-b border-purple-200 bg-transparent outline-none focus:border-purple-400 transition-colors",
|
|
2932
2902
|
autoFocus: true
|
|
2933
2903
|
}
|
|
2934
|
-
)), /* @__PURE__ */
|
|
2904
|
+
)), /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex items-center gap-1 mt-2" }, !isEditing ? /* @__PURE__ */ import_react59.default.createElement(import_react59.default.Fragment, null, /* @__PURE__ */ import_react59.default.createElement("button", { onClick: onApprove, title: "Approve", className: "p-1.5 text-black hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react59.default.createElement(import_react60.HugeiconsIcon, { icon: import_core_free_icons18.CheckmarkCircle01Icon, size: 28 })), /* @__PURE__ */ import_react59.default.createElement("button", { onClick: onDecline, title: "Decline", className: "p-1.5 text-neutral-400 hover:text-neutral-400 hover:bg-neutral-50 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react59.default.createElement(import_react60.HugeiconsIcon, { icon: import_core_free_icons18.CancelCircleIcon, size: 28 })), onEdit && /* @__PURE__ */ import_react59.default.createElement("button", { onClick: () => setIsEditing(true), title: "Edit", className: "ml-auto p-1.5 text-neutral-400 hover:text-black hover:bg-neutral-100 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react59.default.createElement(import_react60.HugeiconsIcon, { icon: import_core_free_icons18.PencilEdit01Icon, size: 18 }))) : /* @__PURE__ */ import_react59.default.createElement(import_react59.default.Fragment, null, /* @__PURE__ */ import_react59.default.createElement("button", { onClick: () => {
|
|
2935
2905
|
onEdit?.(editVal);
|
|
2936
2906
|
setIsEditing(false);
|
|
2937
|
-
}, title: "Save Edit", className: "p-1.5 text-emerald-500 hover:text-emerald-600 hover:bg-emerald-50 rounded-full transition-colors outline-none" }, /* @__PURE__ */
|
|
2907
|
+
}, title: "Save Edit", className: "p-1.5 text-emerald-500 hover:text-emerald-600 hover:bg-emerald-50 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react59.default.createElement(import_react60.HugeiconsIcon, { icon: import_core_free_icons18.CheckmarkCircle01Icon, size: 28 })), /* @__PURE__ */ import_react59.default.createElement("button", { onClick: () => setIsEditing(false), title: "Cancel Edit", className: "p-1.5 text-neutral-400 hover:text-black hover:bg-neutral-100 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react59.default.createElement(import_react60.HugeiconsIcon, { icon: import_core_free_icons18.CancelCircleIcon, size: 28 })))));
|
|
2938
2908
|
};
|
|
2939
2909
|
|
|
2940
2910
|
// src/components/AiStageCheck.tsx
|
|
2941
|
-
var
|
|
2942
|
-
var
|
|
2943
|
-
var
|
|
2911
|
+
var import_react61 = __toESM(require("react"));
|
|
2912
|
+
var import_react62 = require("@hugeicons/react");
|
|
2913
|
+
var import_core_free_icons19 = require("@hugeicons/core-free-icons");
|
|
2944
2914
|
var AiStageCheck = ({ tasks }) => {
|
|
2945
|
-
return /* @__PURE__ */
|
|
2915
|
+
return /* @__PURE__ */ import_react61.default.createElement("div", { className: "flex flex-col gap-3 p-5 rounded-2xl border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white relative overflow-hidden" }, /* @__PURE__ */ import_react61.default.createElement("span", { className: "text-[10px] tracking-widest text-purple-600 mb-1 uppercase" }, "AI Processing"), tasks.map((task) => /* @__PURE__ */ import_react61.default.createElement("div", { key: task.id, className: "flex items-center gap-3" }, task.status === "pending" && /* @__PURE__ */ import_react61.default.createElement("div", { className: "w-4 h-4 rounded-full border border-purple-200" }), task.status === "loading" && /* @__PURE__ */ import_react61.default.createElement(import_react62.HugeiconsIcon, { icon: import_core_free_icons19.Loading03Icon, size: 16, className: "animate-spin text-purple-500" }), task.status === "success" && /* @__PURE__ */ import_react61.default.createElement(import_react62.HugeiconsIcon, { icon: import_core_free_icons19.CheckmarkCircle02Icon, size: 16, className: "text-emerald-500" }), task.status === "error" && /* @__PURE__ */ import_react61.default.createElement(import_react62.HugeiconsIcon, { icon: import_core_free_icons19.CancelCircleIcon, size: 16, className: "text-red-500" }), /* @__PURE__ */ import_react61.default.createElement("span", { className: `text-xs transition-colors ${task.status === "success" ? "text-black" : task.status === "loading" ? "text-purple-700" : "text-neutral-500"}` }, task.label))));
|
|
2946
2916
|
};
|
|
2947
2917
|
|
|
2948
2918
|
// src/components/Stagger.tsx
|
|
2949
|
-
var
|
|
2950
|
-
var
|
|
2951
|
-
var
|
|
2919
|
+
var import_react63 = __toESM(require("react"));
|
|
2920
|
+
var import_react64 = require("@hugeicons/react");
|
|
2921
|
+
var import_core_free_icons20 = require("@hugeicons/core-free-icons");
|
|
2952
2922
|
var Stagger = ({ steps, currentStep }) => {
|
|
2953
2923
|
const getIconForStep = (stepName) => {
|
|
2954
2924
|
const lowerName = stepName.toLowerCase();
|
|
2955
|
-
if (lowerName.includes("document")) return
|
|
2956
|
-
if (lowerName.includes("review")) return
|
|
2957
|
-
if (lowerName.includes("submit")) return
|
|
2958
|
-
return
|
|
2925
|
+
if (lowerName.includes("document")) return import_core_free_icons20.Upload01Icon;
|
|
2926
|
+
if (lowerName.includes("review")) return import_core_free_icons20.FileSyncIcon;
|
|
2927
|
+
if (lowerName.includes("submit")) return import_core_free_icons20.CloudUploadIcon;
|
|
2928
|
+
return import_core_free_icons20.Briefcase02Icon;
|
|
2959
2929
|
};
|
|
2960
|
-
return /* @__PURE__ */
|
|
2930
|
+
return /* @__PURE__ */ import_react63.default.createElement("div", { className: "w-full flex items-center justify-between relative z-0" }, /* @__PURE__ */ import_react63.default.createElement("div", { className: "absolute left-0 top-1/2 -translate-y-1/2 w-full h-px bg-neutral-200 -z-10" }), /* @__PURE__ */ import_react63.default.createElement("div", { className: "absolute left-0 top-1/2 -translate-y-1/2 h-px bg-emerald-500 -z-10 transition-all duration-500", style: { width: `${currentStep / (steps.length - 1) * 100}%` } }), steps.map((step, idx) => {
|
|
2961
2931
|
const isActive = idx === currentStep;
|
|
2962
2932
|
const isPassed = idx < currentStep;
|
|
2963
2933
|
const colorClass = isPassed ? "bg-emerald-500 text-white" : isActive ? "bg-neutral-200 text-neutral-500" : "bg-neutral-200 text-neutral-500";
|
|
2964
|
-
return /* @__PURE__ */
|
|
2934
|
+
return /* @__PURE__ */ import_react63.default.createElement("div", { key: step, className: `w-6 h-6 rounded-full flex items-center justify-center transition-colors duration-300 ${colorClass}` }, /* @__PURE__ */ import_react63.default.createElement(import_react64.HugeiconsIcon, { icon: getIconForStep(step), size: 11 }));
|
|
2965
2935
|
}));
|
|
2966
2936
|
};
|
|
2967
2937
|
// Annotate the CommonJS export names for ESM import in node:
|