@retinalabsllc/zairusjs 0.7.8 → 0.7.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 +116 -3
- package/dist/index.d.ts +116 -3
- package/dist/index.js +923 -553
- package/dist/index.mjs +640 -273
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -36,6 +36,8 @@ __export(index_exports, {
|
|
|
36
36
|
AiStageCheck: () => AiStageCheck,
|
|
37
37
|
AppBento2: () => AppBento2,
|
|
38
38
|
Banner: () => Banner,
|
|
39
|
+
ConsultantShowcase: () => ConsultantShowcase,
|
|
40
|
+
ContentGridBlock: () => ContentGridBlock,
|
|
39
41
|
Faq: () => Faq,
|
|
40
42
|
FeatureScroll: () => FeatureScroll,
|
|
41
43
|
Footer: () => Footer,
|
|
@@ -50,6 +52,7 @@ __export(index_exports, {
|
|
|
50
52
|
ManagedPricingBlock: () => ManagedPricingBlock,
|
|
51
53
|
ManagedProjectsBlock: () => ManagedProjectsBlock,
|
|
52
54
|
ManagedToaster: () => ManagedToaster,
|
|
55
|
+
MedicalFeatureStatsBlock: () => MedicalFeatureStatsBlock,
|
|
53
56
|
NumberInput: () => NumberInput,
|
|
54
57
|
PageSpinner: () => PageSpinner,
|
|
55
58
|
PlatformFeatures: () => PlatformFeatures,
|
|
@@ -79,60 +82,98 @@ module.exports = __toCommonJS(index_exports);
|
|
|
79
82
|
|
|
80
83
|
// src/components/Faq.tsx
|
|
81
84
|
var import_react = __toESM(require("react"));
|
|
82
|
-
var import_react2 = require("@hugeicons/react");
|
|
83
|
-
var import_core_free_icons = require("@hugeicons/core-free-icons");
|
|
84
85
|
var Faq = ({
|
|
85
|
-
|
|
86
|
-
|
|
86
|
+
badgeText = "FAQ",
|
|
87
|
+
title = /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, "Helpful Answers For", /* @__PURE__ */ import_react.default.createElement("br", null), "Better Understanding"),
|
|
87
88
|
items
|
|
88
89
|
}) => {
|
|
89
|
-
const [activeFaq, setActiveFaq] = (0, import_react.useState)(
|
|
90
|
+
const [activeFaq, setActiveFaq] = (0, import_react.useState)(0);
|
|
91
|
+
const [isAnimating, setIsAnimating] = (0, import_react.useState)(false);
|
|
92
|
+
const titleRef = (0, import_react.useRef)(null);
|
|
93
|
+
(0, import_react.useEffect)(() => {
|
|
94
|
+
const observer = new IntersectionObserver(
|
|
95
|
+
([entry]) => {
|
|
96
|
+
if (entry.isIntersecting) {
|
|
97
|
+
if (entry.boundingClientRect.top > 0) {
|
|
98
|
+
setIsAnimating(true);
|
|
99
|
+
}
|
|
100
|
+
} else {
|
|
101
|
+
setIsAnimating(false);
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
{ threshold: 0.1 }
|
|
105
|
+
// Triggers when 10% of the title is visible
|
|
106
|
+
);
|
|
107
|
+
if (titleRef.current) {
|
|
108
|
+
observer.observe(titleRef.current);
|
|
109
|
+
}
|
|
110
|
+
return () => observer.disconnect();
|
|
111
|
+
}, []);
|
|
90
112
|
const toggleFaq = (index) => {
|
|
91
113
|
setActiveFaq(activeFaq === index ? null : index);
|
|
92
114
|
};
|
|
93
|
-
return /* @__PURE__ */ import_react.default.createElement("div", { className: "w-full flex justify-center
|
|
115
|
+
return /* @__PURE__ */ import_react.default.createElement("div", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "max-w-300 w-full flex flex-col lg:flex-row gap-12 lg:gap-20" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-col items-start lg:w-[40%] shrink-0" }, badgeText && /* @__PURE__ */ import_react.default.createElement("div", { className: "inline-flex items-center gap-2 px-3 py-1.5 rounded-full bg-black text-white mb-6 shadow-[0_4px_14px_rgba(0,0,0,0.15)]" }, /* @__PURE__ */ import_react.default.createElement("span", { className: "w-1.5 h-1.5 rounded-full bg-white/90" }), /* @__PURE__ */ import_react.default.createElement("span", { className: "text-[10px] tracking-widest uppercase font-medium mt-px" }, badgeText)), title && /* @__PURE__ */ import_react.default.createElement(
|
|
116
|
+
"h2",
|
|
117
|
+
{
|
|
118
|
+
ref: titleRef,
|
|
119
|
+
className: `font-serif text-4xl md:text-5xl text-black tracking-tight leading-[1.15] ${isAnimating ? "animate-gradient-wipe" : ""}`,
|
|
120
|
+
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
121
|
+
},
|
|
122
|
+
title
|
|
123
|
+
)), /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-col gap-6 lg:w-[60%] w-full" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-col gap-3 w-full" }, items.map((faq, index) => {
|
|
94
124
|
const isOpen = activeFaq === index;
|
|
95
|
-
const
|
|
125
|
+
const getShadowStyle = () => {
|
|
126
|
+
if (isOpen) return `
|
|
127
|
+
inset 0 1.5px 0 0 rgba(255, 255, 255, 0.2),
|
|
128
|
+
inset 0 -3px 0 0 rgba(0, 0, 0, 0.3),
|
|
129
|
+
0 4px 0 0 #0c0c0c,
|
|
130
|
+
0 12px 24px rgba(0, 0, 0, 0.1)
|
|
131
|
+
`;
|
|
132
|
+
return "none";
|
|
133
|
+
};
|
|
96
134
|
return /* @__PURE__ */ import_react.default.createElement(
|
|
97
135
|
"div",
|
|
98
136
|
{
|
|
99
137
|
key: index,
|
|
100
|
-
className: `transition-all duration-
|
|
138
|
+
className: `relative transition-all duration-500 rounded-4xl overflow-hidden ${isOpen ? "bg-black border-transparent" : "border border-neutral-200 hover:border-neutral-300"}`,
|
|
139
|
+
style: { boxShadow: getShadowStyle() }
|
|
101
140
|
},
|
|
141
|
+
isOpen && /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(
|
|
142
|
+
"div",
|
|
143
|
+
{
|
|
144
|
+
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
145
|
+
style: { backgroundImage: `url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")` }
|
|
146
|
+
}
|
|
147
|
+
), /* @__PURE__ */ import_react.default.createElement("span", { className: "absolute inset-0 rounded-4xl bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none z-10" })),
|
|
102
148
|
/* @__PURE__ */ import_react.default.createElement(
|
|
103
149
|
"button",
|
|
104
150
|
{
|
|
105
|
-
className: "flex items-center justify-between w-full gap-4 text-left
|
|
151
|
+
className: "relative z-20 flex items-center justify-between w-full gap-4 text-left px-6 py-5 outline-none cursor-pointer group",
|
|
106
152
|
onClick: () => toggleFaq(index)
|
|
107
153
|
},
|
|
108
154
|
/* @__PURE__ */ import_react.default.createElement(
|
|
109
155
|
"span",
|
|
110
156
|
{
|
|
111
|
-
className: `text-[
|
|
157
|
+
className: `text-[15px] font-medium transition-colors duration-300 flex items-center gap-2 ${isOpen ? "text-white" : "text-black"}`
|
|
112
158
|
},
|
|
159
|
+
/* @__PURE__ */ import_react.default.createElement("span", { className: isOpen ? "text-neutral-400" : "text-neutral-400" }, index + 1, "."),
|
|
113
160
|
faq.question
|
|
114
161
|
),
|
|
115
|
-
/* @__PURE__ */ import_react.default.createElement(
|
|
116
|
-
"div",
|
|
117
|
-
{
|
|
118
|
-
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 group-hover:border-neutral-400 group-hover:text-black"}`
|
|
119
|
-
},
|
|
120
|
-
/* @__PURE__ */ import_react.default.createElement(import_react2.HugeiconsIcon, { icon: import_core_free_icons.ArrowDown01Icon, size: 16 })
|
|
121
|
-
)
|
|
162
|
+
/* @__PURE__ */ import_react.default.createElement("div", { className: `shrink-0 transition-colors duration-300 ${isOpen ? "text-white" : "text-black group-hover:text-black/70"}` }, isOpen ? /* @__PURE__ */ import_react.default.createElement("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5" }, /* @__PURE__ */ import_react.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M8 12h8", strokeLinecap: "round" })) : /* @__PURE__ */ import_react.default.createElement("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5" }, /* @__PURE__ */ import_react.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M12 8v8M8 12h8", strokeLinecap: "round" })))
|
|
122
163
|
),
|
|
123
164
|
/* @__PURE__ */ import_react.default.createElement(
|
|
124
165
|
"div",
|
|
125
166
|
{
|
|
126
|
-
className: `grid transition-all duration-300 ease-in-out ${isOpen ? "grid-rows-[1fr]
|
|
167
|
+
className: `relative z-20 grid transition-all duration-300 ease-in-out ${isOpen ? "grid-rows-[1fr] opacity-100" : "grid-rows-[0fr] opacity-0"}`
|
|
127
168
|
},
|
|
128
|
-
/* @__PURE__ */ import_react.default.createElement("div", { className: "overflow-hidden" }, /* @__PURE__ */ import_react.default.createElement("p", { className:
|
|
169
|
+
/* @__PURE__ */ import_react.default.createElement("div", { className: "overflow-hidden" }, /* @__PURE__ */ import_react.default.createElement("p", { className: `text-[14px] leading-relaxed px-6 pb-6 pt-0 pr-12 transition-colors duration-300 ${isOpen ? "text-neutral-300" : "text-transparent"}` }, faq.answer))
|
|
129
170
|
)
|
|
130
171
|
);
|
|
131
|
-
}))));
|
|
172
|
+
})))));
|
|
132
173
|
};
|
|
133
174
|
|
|
134
175
|
// src/components/ThreeDButton.tsx
|
|
135
|
-
var
|
|
176
|
+
var import_react2 = __toESM(require("react"));
|
|
136
177
|
var import_link = __toESM(require("next/link"));
|
|
137
178
|
var ThreeDButton = ({
|
|
138
179
|
href,
|
|
@@ -158,7 +199,7 @@ var ThreeDButton = ({
|
|
|
158
199
|
0 1px 0 0 #0c0c0c,
|
|
159
200
|
0 2px 4px rgba(0, 0, 0, 0.2)
|
|
160
201
|
`;
|
|
161
|
-
return /* @__PURE__ */
|
|
202
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
162
203
|
import_link.default,
|
|
163
204
|
{
|
|
164
205
|
href,
|
|
@@ -181,15 +222,15 @@ var ThreeDButton = ({
|
|
|
181
222
|
e.currentTarget.style.transform = "translateY(-1px)";
|
|
182
223
|
}
|
|
183
224
|
},
|
|
184
|
-
/* @__PURE__ */
|
|
185
|
-
/* @__PURE__ */
|
|
225
|
+
/* @__PURE__ */ import_react2.default.createElement("span", { className: "absolute inset-0 rounded-full bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none" }),
|
|
226
|
+
/* @__PURE__ */ import_react2.default.createElement("span", { className: "relative z-10 pt-1 tracking-wide text-white/95 group-hover:text-white transition-colors duration-150 flex items-center justify-center leading-none" }, children)
|
|
186
227
|
);
|
|
187
228
|
};
|
|
188
229
|
|
|
189
230
|
// src/components/ThreeDActionButton.tsx
|
|
190
|
-
var
|
|
191
|
-
var
|
|
192
|
-
var
|
|
231
|
+
var import_react3 = __toESM(require("react"));
|
|
232
|
+
var import_react4 = require("@hugeicons/react");
|
|
233
|
+
var import_core_free_icons = require("@hugeicons/core-free-icons");
|
|
193
234
|
var ThreeDActionButton = ({
|
|
194
235
|
type = "button",
|
|
195
236
|
onClick,
|
|
@@ -223,7 +264,7 @@ var ThreeDActionButton = ({
|
|
|
223
264
|
inset 0 -1px 0 0 rgba(0, 0, 0, 0.3),
|
|
224
265
|
0 1px 0 0 #1c1c1c
|
|
225
266
|
`;
|
|
226
|
-
return /* @__PURE__ */
|
|
267
|
+
return /* @__PURE__ */ import_react3.default.createElement(
|
|
227
268
|
"button",
|
|
228
269
|
{
|
|
229
270
|
type,
|
|
@@ -258,17 +299,17 @@ var ThreeDActionButton = ({
|
|
|
258
299
|
e.currentTarget.style.transform = "translateY(-1px)";
|
|
259
300
|
}
|
|
260
301
|
},
|
|
261
|
-
/* @__PURE__ */
|
|
262
|
-
/* @__PURE__ */
|
|
302
|
+
/* @__PURE__ */ import_react3.default.createElement("span", { className: "absolute inset-0 rounded-full bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none" }),
|
|
303
|
+
/* @__PURE__ */ import_react3.default.createElement("span", { className: "relative z-10 flex items-center justify-center gap-2 leading-none" }, isLoading ? /* @__PURE__ */ import_react3.default.createElement(import_react4.HugeiconsIcon, { icon: import_core_free_icons.Loading03Icon, size: 16, className: "animate-spin text-white" }) : children)
|
|
263
304
|
);
|
|
264
305
|
};
|
|
265
306
|
|
|
266
307
|
// src/components/ZairusAuth.tsx
|
|
267
|
-
var
|
|
308
|
+
var import_react5 = __toESM(require("react"));
|
|
268
309
|
var import_navigation = require("next/navigation");
|
|
269
310
|
var import_react_hot_toast = __toESM(require("react-hot-toast"));
|
|
270
311
|
var import_react_google_recaptcha_v3 = require("react-google-recaptcha-v3");
|
|
271
|
-
var InputSpinner = () => /* @__PURE__ */
|
|
312
|
+
var InputSpinner = () => /* @__PURE__ */ import_react5.default.createElement("svg", { className: "animate-spin h-4 w-4 text-neutral-400", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24" }, /* @__PURE__ */ import_react5.default.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ import_react5.default.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" }));
|
|
272
313
|
function AuthFormInner({
|
|
273
314
|
companyName,
|
|
274
315
|
workspaceLabel = "Workspace",
|
|
@@ -284,27 +325,27 @@ function AuthFormInner({
|
|
|
284
325
|
const searchParams = (0, import_navigation.useSearchParams)();
|
|
285
326
|
const redirectUrl = searchParams.get("redirect") || defaultRedirectPath;
|
|
286
327
|
const captchaContext = useRecaptcha ? (0, import_react_google_recaptcha_v3.useGoogleReCaptcha)() : null;
|
|
287
|
-
const [mode, setMode] = (0,
|
|
288
|
-
const [step, setStep] = (0,
|
|
328
|
+
const [mode, setMode] = (0, import_react5.useState)("LOGIN");
|
|
329
|
+
const [step, setStep] = (0, import_react5.useState)("INPUT");
|
|
289
330
|
const getInitialSignupStep = () => {
|
|
290
331
|
if (requireNames) return "NAME";
|
|
291
332
|
if (requireOrganization) return "ORGANIZATION";
|
|
292
333
|
return "EMAIL_ID";
|
|
293
334
|
};
|
|
294
|
-
const [signupStep, setSignupStep] = (0,
|
|
295
|
-
const [isSubmitting, setIsSubmitting] = (0,
|
|
296
|
-
const [countdown, setCountdown] = (0,
|
|
297
|
-
const [emailId, setEmailId] = (0,
|
|
298
|
-
const [firstName, setFirstName] = (0,
|
|
299
|
-
const [lastName, setLastName] = (0,
|
|
300
|
-
const [orgName, setOrgName] = (0,
|
|
301
|
-
const [agreedToTerms, setAgreedToTerms] = (0,
|
|
302
|
-
const [otp, setOtp] = (0,
|
|
303
|
-
const inputRefs = (0,
|
|
335
|
+
const [signupStep, setSignupStep] = (0, import_react5.useState)(getInitialSignupStep());
|
|
336
|
+
const [isSubmitting, setIsSubmitting] = (0, import_react5.useState)(false);
|
|
337
|
+
const [countdown, setCountdown] = (0, import_react5.useState)(0);
|
|
338
|
+
const [emailId, setEmailId] = (0, import_react5.useState)("");
|
|
339
|
+
const [firstName, setFirstName] = (0, import_react5.useState)("");
|
|
340
|
+
const [lastName, setLastName] = (0, import_react5.useState)("");
|
|
341
|
+
const [orgName, setOrgName] = (0, import_react5.useState)("");
|
|
342
|
+
const [agreedToTerms, setAgreedToTerms] = (0, import_react5.useState)(false);
|
|
343
|
+
const [otp, setOtp] = (0, import_react5.useState)(["", "", "", "", "", ""]);
|
|
344
|
+
const inputRefs = (0, import_react5.useRef)([]);
|
|
304
345
|
const cleanAlpha = (val) => val.replace(/[^a-zA-Z\s-]/g, "");
|
|
305
346
|
const cleanOrgName = (val) => val.replace(/[^a-zA-Z0-9\s]/g, "").substring(0, 50);
|
|
306
347
|
const cleanEmailId = (val) => val.toLowerCase().replace(/[^a-z0-9@._-]/g, "");
|
|
307
|
-
(0,
|
|
348
|
+
(0, import_react5.useEffect)(() => {
|
|
308
349
|
if (countdown > 0) {
|
|
309
350
|
const timer = setTimeout(() => setCountdown(countdown - 1), 1e3);
|
|
310
351
|
return () => clearTimeout(timer);
|
|
@@ -408,15 +449,15 @@ function AuthFormInner({
|
|
|
408
449
|
}
|
|
409
450
|
return false;
|
|
410
451
|
};
|
|
411
|
-
return /* @__PURE__ */
|
|
452
|
+
return /* @__PURE__ */ import_react5.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_react5.default.createElement("div", { className: "w-full bg-white rounded-2xl border border-neutral-200/50 overflow-hidden" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "p-8 md:p-12" }, step === "INPUT" && /* @__PURE__ */ import_react5.default.createElement("div", { className: "animate-in fade-in duration-300" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "mb-12 text-center mt-2" }, /* @__PURE__ */ import_react5.default.createElement("h2", { className: " font-serif text-xl text-black mb-2 tracking-tight " }, mode === "LOGIN" ? `${companyName} ${workspaceLabel}` : "Create Account"), /* @__PURE__ */ import_react5.default.createElement("div", { className: "text-[13px] text-neutral-500" }, mode === "LOGIN" ? /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, "Don't have an account? ", /* @__PURE__ */ import_react5.default.createElement("button", { type: "button", onClick: () => {
|
|
412
453
|
setMode("SIGNUP");
|
|
413
454
|
setSignupStep(getInitialSignupStep());
|
|
414
|
-
}, className: "text-black transition-colors ml-1" }, "Sign up")) : /* @__PURE__ */
|
|
455
|
+
}, className: "text-black transition-colors ml-1" }, "Sign up")) : /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, "Already have an account? ", /* @__PURE__ */ import_react5.default.createElement("button", { type: "button", onClick: () => setMode("LOGIN"), className: "text-black transition-colors ml-1" }, "Log in")))), /* @__PURE__ */ import_react5.default.createElement("form", { className: "space-y-6", autoComplete: "off", onSubmit: (e) => {
|
|
415
456
|
e.preventDefault();
|
|
416
457
|
if (mode === "SIGNUP" && signupStep === "NAME") handleNextSignupStep();
|
|
417
458
|
else if (mode === "SIGNUP" && signupStep === "ORGANIZATION") handleNextSignupStep();
|
|
418
459
|
else handleAuthRequestSubmit();
|
|
419
|
-
} }, mode === "SIGNUP" && signupStep === "NAME" && requireNames && /* @__PURE__ */
|
|
460
|
+
} }, mode === "SIGNUP" && signupStep === "NAME" && requireNames && /* @__PURE__ */ import_react5.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react5.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, "First Name"), /* @__PURE__ */ import_react5.default.createElement(
|
|
420
461
|
"input",
|
|
421
462
|
{
|
|
422
463
|
type: "text",
|
|
@@ -427,7 +468,7 @@ function AuthFormInner({
|
|
|
427
468
|
className: "w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-200 text-black outline-none focus:border-black transition-all duration-300",
|
|
428
469
|
placeholder: "First name"
|
|
429
470
|
}
|
|
430
|
-
)), /* @__PURE__ */
|
|
471
|
+
)), /* @__PURE__ */ import_react5.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react5.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, "Last Name"), /* @__PURE__ */ import_react5.default.createElement(
|
|
431
472
|
"input",
|
|
432
473
|
{
|
|
433
474
|
type: "text",
|
|
@@ -437,7 +478,7 @@ function AuthFormInner({
|
|
|
437
478
|
className: "w-full px-2 py-3 bg-transparent text-sm border-b border-neutral-200 text-black outline-none focus:border-black transition-all duration-300",
|
|
438
479
|
placeholder: "Last name"
|
|
439
480
|
}
|
|
440
|
-
))), mode === "SIGNUP" && signupStep === "ORGANIZATION" && requireOrganization && /* @__PURE__ */
|
|
481
|
+
))), mode === "SIGNUP" && signupStep === "ORGANIZATION" && requireOrganization && /* @__PURE__ */ import_react5.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react5.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, "Organization Name"), /* @__PURE__ */ import_react5.default.createElement(
|
|
441
482
|
"input",
|
|
442
483
|
{
|
|
443
484
|
type: "text",
|
|
@@ -448,7 +489,7 @@ function AuthFormInner({
|
|
|
448
489
|
className: "w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-200 text-black outline-none focus:border-black transition-all duration-300",
|
|
449
490
|
placeholder: "Acme Corporation"
|
|
450
491
|
}
|
|
451
|
-
))), (mode === "LOGIN" || mode === "SIGNUP" && signupStep === "EMAIL_ID") && /* @__PURE__ */
|
|
492
|
+
))), (mode === "LOGIN" || mode === "SIGNUP" && signupStep === "EMAIL_ID") && /* @__PURE__ */ import_react5.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react5.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, "Retina ID"), /* @__PURE__ */ import_react5.default.createElement(
|
|
452
493
|
"input",
|
|
453
494
|
{
|
|
454
495
|
type: "email",
|
|
@@ -459,7 +500,7 @@ function AuthFormInner({
|
|
|
459
500
|
className: "w-full px-2 py-3 bg-transparent text-sm border-b border-neutral-200 text-black outline-none focus:border-black transition-all duration-300",
|
|
460
501
|
placeholder: "name@company.com"
|
|
461
502
|
}
|
|
462
|
-
)), mode === "SIGNUP" && /* @__PURE__ */
|
|
503
|
+
)), mode === "SIGNUP" && /* @__PURE__ */ import_react5.default.createElement("div", { className: "flex items-start gap-3 mt-4" }, /* @__PURE__ */ import_react5.default.createElement(
|
|
463
504
|
"input",
|
|
464
505
|
{
|
|
465
506
|
type: "checkbox",
|
|
@@ -469,7 +510,7 @@ function AuthFormInner({
|
|
|
469
510
|
className: "mt-0.5 w-4 h-4 bg-white border-neutral-300 rounded text-black focus:ring-black cursor-pointer",
|
|
470
511
|
required: true
|
|
471
512
|
}
|
|
472
|
-
), /* @__PURE__ */
|
|
513
|
+
), /* @__PURE__ */ import_react5.default.createElement("label", { htmlFor: "zairus-terms", className: "text-[11px] text-neutral-500 cursor-pointer leading-snug" }, "I agree to ", companyName, "'s ", /* @__PURE__ */ import_react5.default.createElement("a", { href: termsUrl, target: "_blank", rel: "noreferrer", className: "text-black underline font-medium" }, "Terms of Service"), " and ", /* @__PURE__ */ import_react5.default.createElement("a", { href: privacyUrl, target: "_blank", rel: "noreferrer", className: "text-black underline font-medium" }, "Privacy Policy"), "."))), /* @__PURE__ */ import_react5.default.createElement(
|
|
473
514
|
ThreeDActionButton,
|
|
474
515
|
{
|
|
475
516
|
type: "submit",
|
|
@@ -478,10 +519,10 @@ function AuthFormInner({
|
|
|
478
519
|
className: "w-full mt-10"
|
|
479
520
|
},
|
|
480
521
|
"Continue"
|
|
481
|
-
))), step === "OTP" && /* @__PURE__ */
|
|
522
|
+
))), step === "OTP" && /* @__PURE__ */ import_react5.default.createElement("div", { className: "animate-in fade-in duration-300" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "text-center mb-10 mt-2" }, /* @__PURE__ */ import_react5.default.createElement("h2", { className: " font-serif text-xl text-black mb-2 tracking-tight " }, "Security Check"), /* @__PURE__ */ import_react5.default.createElement("p", { className: "text-[13px] text-neutral-500" }, "Enter the code sent to ", /* @__PURE__ */ import_react5.default.createElement("br", null), /* @__PURE__ */ import_react5.default.createElement("span", { className: "text-black font-medium" }, emailId))), /* @__PURE__ */ import_react5.default.createElement("form", { className: "space-y-10", autoComplete: "off", onSubmit: (e) => {
|
|
482
523
|
e.preventDefault();
|
|
483
524
|
verifyOtpCode(otp.join(""));
|
|
484
|
-
} }, /* @__PURE__ */
|
|
525
|
+
} }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "flex justify-between gap-2", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ import_react5.default.createElement(
|
|
485
526
|
"input",
|
|
486
527
|
{
|
|
487
528
|
key: index,
|
|
@@ -495,7 +536,7 @@ function AuthFormInner({
|
|
|
495
536
|
onChange: (e) => handleOtpChange(index, e.target.value),
|
|
496
537
|
className: "w-10 h-10 text-center text-xl bg-transparent border-b-2 border-neutral-200 text-black outline-none focus:border-black transition-all duration-300"
|
|
497
538
|
}
|
|
498
|
-
))), /* @__PURE__ */
|
|
539
|
+
))), /* @__PURE__ */ import_react5.default.createElement(
|
|
499
540
|
ThreeDActionButton,
|
|
500
541
|
{
|
|
501
542
|
type: "submit",
|
|
@@ -504,7 +545,7 @@ function AuthFormInner({
|
|
|
504
545
|
className: "w-full"
|
|
505
546
|
},
|
|
506
547
|
"Verify Code"
|
|
507
|
-
))))), /* @__PURE__ */
|
|
548
|
+
))))), /* @__PURE__ */ import_react5.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_react5.default.createElement("div", { className: "flex items-center gap-2.5 px-3 py-1.5 bg-white rounded-full" }, /* @__PURE__ */ import_react5.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_react5.default.createElement(
|
|
508
549
|
"img",
|
|
509
550
|
{
|
|
510
551
|
src: "https://retinaapps.com/og-image.jpg",
|
|
@@ -514,17 +555,17 @@ function AuthFormInner({
|
|
|
514
555
|
e.currentTarget.style.display = "none";
|
|
515
556
|
}
|
|
516
557
|
}
|
|
517
|
-
)), /* @__PURE__ */
|
|
558
|
+
)), /* @__PURE__ */ import_react5.default.createElement("span", { className: "text-[11px] font-medium text-neutral-700 tracking-tight pr-1" }, "Retina Labs Company")), /* @__PURE__ */ import_react5.default.createElement("span", { className: "text-[8px] text-neutral-400 tracking-[0.25em] uppercase" }, "Authentication")));
|
|
518
559
|
}
|
|
519
560
|
var ZairusAuth = (props) => {
|
|
520
561
|
if (props.useRecaptcha && props.recaptchaSiteKey) {
|
|
521
|
-
return /* @__PURE__ */
|
|
562
|
+
return /* @__PURE__ */ import_react5.default.createElement(import_react_google_recaptcha_v3.GoogleReCaptchaProvider, { reCaptchaKey: props.recaptchaSiteKey }, /* @__PURE__ */ import_react5.default.createElement(import_react5.Suspense, { fallback: /* @__PURE__ */ import_react5.default.createElement("div", { className: "h-64 flex items-center justify-center" }, /* @__PURE__ */ import_react5.default.createElement(InputSpinner, null)) }, /* @__PURE__ */ import_react5.default.createElement(AuthFormInner, { ...props })));
|
|
522
563
|
}
|
|
523
|
-
return /* @__PURE__ */
|
|
564
|
+
return /* @__PURE__ */ import_react5.default.createElement(import_react5.Suspense, { fallback: /* @__PURE__ */ import_react5.default.createElement("div", { className: "h-64 flex items-center justify-center" }, /* @__PURE__ */ import_react5.default.createElement(InputSpinner, null)) }, /* @__PURE__ */ import_react5.default.createElement(AuthFormInner, { ...props }));
|
|
524
565
|
};
|
|
525
566
|
|
|
526
567
|
// src/components/Header.tsx
|
|
527
|
-
var
|
|
568
|
+
var import_react6 = __toESM(require("react"));
|
|
528
569
|
var import_link2 = __toESM(require("next/link"));
|
|
529
570
|
var import_image = __toESM(require("next/image"));
|
|
530
571
|
var import_navigation2 = require("next/navigation");
|
|
@@ -538,7 +579,7 @@ var NavLink = ({
|
|
|
538
579
|
const isActive = pathname === href;
|
|
539
580
|
const activeClass = light ? "text-neutral-950 font-medium" : "text-white font-medium";
|
|
540
581
|
const inactiveClass = light ? "text-neutral-600 hover:text-neutral-950" : "text-neutral-400 hover:text-white";
|
|
541
|
-
return /* @__PURE__ */
|
|
582
|
+
return /* @__PURE__ */ import_react6.default.createElement(
|
|
542
583
|
import_link2.default,
|
|
543
584
|
{
|
|
544
585
|
href,
|
|
@@ -565,7 +606,7 @@ var Header = ({
|
|
|
565
606
|
const titleColor = light ? "text-black" : "text-white";
|
|
566
607
|
const subtitleColor = light ? "text-neutral-500" : "text-neutral-400";
|
|
567
608
|
const hasBrandSection = showLogo || !hideHeaderText;
|
|
568
|
-
return /* @__PURE__ */
|
|
609
|
+
return /* @__PURE__ */ import_react6.default.createElement("div", { className: "absolute inset-x-0 top-0 w-full z-50 pointer-events-none px-4 pt-4 sm:pt-6" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "max-w-5xl mx-auto w-full pointer-events-auto flex justify-center" }, /* @__PURE__ */ import_react6.default.createElement("header", { className: `${headerLayoutWidth} ${headerBgStyle} backdrop-blur-md rounded-full py-2 px-6 flex items-center border transition-all duration-300` }, hasBrandSection && /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex items-center shrink-0" }, /* @__PURE__ */ import_react6.default.createElement(import_link2.default, { href: "/", className: "flex items-center gap-3 transition-opacity hover:opacity-70" }, showLogo && /* @__PURE__ */ import_react6.default.createElement(
|
|
569
610
|
import_image.default,
|
|
570
611
|
{
|
|
571
612
|
src: logoSrc,
|
|
@@ -575,7 +616,7 @@ var Header = ({
|
|
|
575
616
|
className: `object-contain w-6 h-auto ${invert ? "invert" : ""}`,
|
|
576
617
|
priority: true
|
|
577
618
|
}
|
|
578
|
-
), !hideHeaderText && /* @__PURE__ */
|
|
619
|
+
), !hideHeaderText && /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex flex-col justify-center" }, /* @__PURE__ */ import_react6.default.createElement("span", { className: `text-[12px] leading-none tracking-wide mb-1 transition-colors ${titleColor}` }, companyName), subtitle && /* @__PURE__ */ import_react6.default.createElement("span", { className: `text-[9px] tracking-widest leading-none transition-colors ${subtitleColor}` }, subtitle)))), /* @__PURE__ */ import_react6.default.createElement("nav", { className: "flex items-center gap-1 md:gap-2 shrink-0" }, links.map((link, index) => /* @__PURE__ */ import_react6.default.createElement(
|
|
579
620
|
NavLink,
|
|
580
621
|
{
|
|
581
622
|
key: index,
|
|
@@ -588,9 +629,9 @@ var Header = ({
|
|
|
588
629
|
};
|
|
589
630
|
|
|
590
631
|
// src/components/Footer.tsx
|
|
591
|
-
var
|
|
632
|
+
var import_react7 = __toESM(require("react"));
|
|
592
633
|
var import_link3 = __toESM(require("next/link"));
|
|
593
|
-
var
|
|
634
|
+
var import_react8 = require("@hugeicons/react");
|
|
594
635
|
var Footer = ({
|
|
595
636
|
description,
|
|
596
637
|
columns,
|
|
@@ -598,20 +639,20 @@ var Footer = ({
|
|
|
598
639
|
copyrightText,
|
|
599
640
|
topSection
|
|
600
641
|
}) => {
|
|
601
|
-
const [openCol, setOpenCol] = (0,
|
|
642
|
+
const [openCol, setOpenCol] = (0, import_react7.useState)(null);
|
|
602
643
|
const toggleColumn = (idx) => {
|
|
603
644
|
setOpenCol(openCol === idx ? null : idx);
|
|
604
645
|
};
|
|
605
|
-
return /* @__PURE__ */
|
|
646
|
+
return /* @__PURE__ */ import_react7.default.createElement("div", { className: "" }, topSection && topSection, /* @__PURE__ */ import_react7.default.createElement("footer", { className: "relative px-6 overflow-hidden flex flex-col" }, /* @__PURE__ */ import_react7.default.createElement("div", { className: "relative w-full max-w-7xl mx-auto z-20 flex flex-col" }, /* @__PURE__ */ import_react7.default.createElement("div", { className: "relative py-12 md:py-16" }, /* @__PURE__ */ import_react7.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_react7.default.createElement("div", { className: "w-full lg:max-w-sm flex flex-col items-start justify-between shrink-0" }, /* @__PURE__ */ import_react7.default.createElement("div", null, /* @__PURE__ */ import_react7.default.createElement("p", { className: "text-[12px] text-neutral-600 leading-relaxed pr-4" }, description))), /* @__PURE__ */ import_react7.default.createElement("div", { className: "w-full lg:flex-1 lg:max-w-2xl" }, /* @__PURE__ */ import_react7.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_react7.default.createElement("div", { key: idx, className: "flex flex-col" }, /* @__PURE__ */ import_react7.default.createElement("h4", { className: "text-[11px] tracking-[0.2em] text-black mb-6 uppercase" }, col.title), /* @__PURE__ */ import_react7.default.createElement("ul", { className: "space-y-4 text-[13px] text-neutral-500" }, col.links.map((link, lIdx) => /* @__PURE__ */ import_react7.default.createElement("li", { key: lIdx }, link.isExternal ? /* @__PURE__ */ import_react7.default.createElement("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", className: "hover:text-black transition-colors block truncate" }, link.label) : /* @__PURE__ */ import_react7.default.createElement(import_link3.default, { href: link.href, className: "hover:text-black transition-colors block truncate" }, link.label))))))), /* @__PURE__ */ import_react7.default.createElement("div", { className: "flex flex-col md:hidden w-full border-t border-neutral-200 mt-4" }, columns.map((col, idx) => {
|
|
606
647
|
const isOpen = openCol === idx;
|
|
607
|
-
return /* @__PURE__ */
|
|
648
|
+
return /* @__PURE__ */ import_react7.default.createElement("div", { key: idx, className: "border-b border-neutral-200" }, /* @__PURE__ */ import_react7.default.createElement(
|
|
608
649
|
"button",
|
|
609
650
|
{
|
|
610
651
|
onClick: () => toggleColumn(idx),
|
|
611
652
|
className: "w-full flex items-center justify-between py-5 text-left outline-none"
|
|
612
653
|
},
|
|
613
|
-
/* @__PURE__ */
|
|
614
|
-
/* @__PURE__ */
|
|
654
|
+
/* @__PURE__ */ import_react7.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-black uppercase" }, col.title),
|
|
655
|
+
/* @__PURE__ */ import_react7.default.createElement(
|
|
615
656
|
"svg",
|
|
616
657
|
{
|
|
617
658
|
className: `w-4 h-4 text-neutral-400 transition-transform duration-300 ${isOpen ? "rotate-180" : ""}`,
|
|
@@ -619,10 +660,10 @@ var Footer = ({
|
|
|
619
660
|
viewBox: "0 0 24 24",
|
|
620
661
|
stroke: "currentColor"
|
|
621
662
|
},
|
|
622
|
-
/* @__PURE__ */
|
|
663
|
+
/* @__PURE__ */ import_react7.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M19 9l-7 7-7-7" })
|
|
623
664
|
)
|
|
624
|
-
), /* @__PURE__ */
|
|
625
|
-
})))), /* @__PURE__ */
|
|
665
|
+
), /* @__PURE__ */ import_react7.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_react7.default.createElement("div", { className: "overflow-hidden" }, /* @__PURE__ */ import_react7.default.createElement("ul", { className: "space-y-4 text-[13px] text-neutral-500 pt-2" }, col.links.map((link, lIdx) => /* @__PURE__ */ import_react7.default.createElement("li", { key: lIdx }, link.isExternal ? /* @__PURE__ */ import_react7.default.createElement("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", className: "hover:text-black transition-colors" }, link.label) : /* @__PURE__ */ import_react7.default.createElement(import_link3.default, { href: link.href, className: "hover:text-black transition-colors" }, link.label)))))));
|
|
666
|
+
})))), /* @__PURE__ */ import_react7.default.createElement("div", { className: "pt-8 mt-4 flex flex-col-reverse md:flex-row justify-between items-start md:items-center gap-6 relative z-20" }, /* @__PURE__ */ import_react7.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-widest text-left" }, copyrightText), socialLinks && socialLinks.length > 0 && /* @__PURE__ */ import_react7.default.createElement("div", { className: "flex items-center gap-6" }, socialLinks.map((social, idx) => /* @__PURE__ */ import_react7.default.createElement(
|
|
626
667
|
"a",
|
|
627
668
|
{
|
|
628
669
|
key: idx,
|
|
@@ -632,12 +673,12 @@ var Footer = ({
|
|
|
632
673
|
className: "text-neutral-400 hover:text-black transition-colors",
|
|
633
674
|
"aria-label": social.name
|
|
634
675
|
},
|
|
635
|
-
/* @__PURE__ */
|
|
676
|
+
/* @__PURE__ */ import_react7.default.createElement(import_react8.HugeiconsIcon, { icon: social.icon, size: 20 })
|
|
636
677
|
))))))));
|
|
637
678
|
};
|
|
638
679
|
|
|
639
680
|
// src/components/HeroSection.tsx
|
|
640
|
-
var
|
|
681
|
+
var import_react9 = __toESM(require("react"));
|
|
641
682
|
var import_link4 = __toESM(require("next/link"));
|
|
642
683
|
var import_image2 = __toESM(require("next/image"));
|
|
643
684
|
var HeroSection = ({
|
|
@@ -650,10 +691,33 @@ var HeroSection = ({
|
|
|
650
691
|
ctaHref,
|
|
651
692
|
secondaryCtaText,
|
|
652
693
|
secondaryCtaHref,
|
|
694
|
+
showApps = false,
|
|
695
|
+
appsText,
|
|
696
|
+
appLogos,
|
|
653
697
|
showImage = false,
|
|
654
698
|
imageSrc = "/assets/ai.avif"
|
|
655
699
|
}) => {
|
|
656
|
-
|
|
700
|
+
const [isAnimating, setIsAnimating] = (0, import_react9.useState)(false);
|
|
701
|
+
const titleRef = (0, import_react9.useRef)(null);
|
|
702
|
+
(0, import_react9.useEffect)(() => {
|
|
703
|
+
const observer = new IntersectionObserver(
|
|
704
|
+
([entry]) => {
|
|
705
|
+
if (entry.isIntersecting) {
|
|
706
|
+
if (entry.boundingClientRect.top >= 0) {
|
|
707
|
+
setIsAnimating(true);
|
|
708
|
+
}
|
|
709
|
+
} else {
|
|
710
|
+
setIsAnimating(false);
|
|
711
|
+
}
|
|
712
|
+
},
|
|
713
|
+
{ threshold: 0.1 }
|
|
714
|
+
);
|
|
715
|
+
if (titleRef.current) {
|
|
716
|
+
observer.observe(titleRef.current);
|
|
717
|
+
}
|
|
718
|
+
return () => observer.disconnect();
|
|
719
|
+
}, []);
|
|
720
|
+
return /* @__PURE__ */ import_react9.default.createElement("section", { className: "relative pt-32 sm:pt-40 pb-16 flex flex-col items-center overflow-hidden w-full bg-[linear-gradient(to_bottom,#ffffff_0%,#ffffff_85%,#f5f5f5_100%)]" }, /* @__PURE__ */ import_react9.default.createElement(
|
|
657
721
|
"div",
|
|
658
722
|
{
|
|
659
723
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.15] mix-blend-overlay",
|
|
@@ -661,14 +725,31 @@ var HeroSection = ({
|
|
|
661
725
|
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")`
|
|
662
726
|
}
|
|
663
727
|
}
|
|
664
|
-
), /* @__PURE__ */
|
|
728
|
+
), /* @__PURE__ */ import_react9.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_react9.default.createElement("div", { className: "inline-flex items-center gap-1.5 mb-6 px-4 py-1.5 rounded-full bg-black/5 backdrop-blur-md shadow-xs" }, /* @__PURE__ */ import_react9.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-900 uppercase" }, badgeText)), /* @__PURE__ */ import_react9.default.createElement(
|
|
729
|
+
"h1",
|
|
730
|
+
{
|
|
731
|
+
ref: titleRef,
|
|
732
|
+
className: `text-[40px] font-serif font-light md:text-5xl lg:text-7xl text-neutral-900 tracking-tight leading-[1.05] max-w-4xl mb-4 ${isAnimating ? "animate-gradient-wipe" : ""}`,
|
|
733
|
+
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
734
|
+
},
|
|
735
|
+
titlePrefix
|
|
736
|
+
), /* @__PURE__ */ import_react9.default.createElement("div", { className: "flex justify-center mt-2 mb-10 md:mb-14" }, /* @__PURE__ */ import_react9.default.createElement("span", { className: "relative font-serif inline-block mx-1.5 px-4 py-2 md:py-3 bg-[#54535314] border border-[#545353] rounded-sm text-[#000000]/60 select-none text-4xl lg:text-6xl tracking-tight" }, /* @__PURE__ */ import_react9.default.createElement("span", { className: "absolute top-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#5453539e] rounded-[1px] z-10" }), /* @__PURE__ */ import_react9.default.createElement("span", { className: "absolute top-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#545353] rounded-[1px] z-10" }), /* @__PURE__ */ import_react9.default.createElement("span", { className: "absolute bottom-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#545353] rounded-[1px] z-10" }), /* @__PURE__ */ import_react9.default.createElement("span", { className: "absolute bottom-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#545353] rounded-[1px] z-10" }), highlightText, /* @__PURE__ */ import_react9.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_react9.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_react9.default.createElement("path", { d: "M1 1V17.8L5.8 13.1H12.8L1 1Z", fill: "#545353", stroke: "white", strokeWidth: "1.8", strokeLinejoin: "round" })), /* @__PURE__ */ import_react9.default.createElement("span", { className: "ml-1 bg-[#545353] text-[10px] text-white px-2 py-0.5 rounded-full border border-white tracking-wide" }, cursorLabel)))), subtitle && /* @__PURE__ */ import_react9.default.createElement("p", { className: "text-[13px] md:text-[15px] text-neutral-500 max-w-xl mx-auto mb-10 font-light leading-relaxed" }, subtitle), /* @__PURE__ */ import_react9.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_react9.default.createElement("div", { className: "w-full sm:w-60 flex justify-center *:w-full" }, /* @__PURE__ */ import_react9.default.createElement(ThreeDButton, { href: ctaHref }, ctaText)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react9.default.createElement(
|
|
665
737
|
import_link4.default,
|
|
666
738
|
{
|
|
667
739
|
href: secondaryCtaHref,
|
|
668
|
-
className: "w-full sm:w-60 inline-flex items-center justify-center text-[12px] tracking-widest rounded-full px-8 py-2.5
|
|
740
|
+
className: "w-full sm:w-60 inline-flex items-center justify-center text-[12px] tracking-widest rounded-full px-8 py-2.5 border border-neutral-200 text-center text-black text-xs hover:bg-neutral-50 outline-none transition-colors"
|
|
669
741
|
},
|
|
670
742
|
secondaryCtaText
|
|
671
|
-
)),
|
|
743
|
+
)), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */ import_react9.default.createElement("div", { className: "w-full flex flex-col items-center mb-12 md:mb-16" }, appsText && /* @__PURE__ */ import_react9.default.createElement("p", { className: "text-[10px] tracking-[0.2em] text-neutral-400 uppercase mb-5" }, appsText), /* @__PURE__ */ import_react9.default.createElement("div", { className: "flex flex-wrap justify-center items-center gap-8 md:gap-12 opacity-60 grayscale hover:grayscale-0 transition-all duration-500" }, appLogos.map((logo, idx) => /* @__PURE__ */ import_react9.default.createElement("div", { key: idx, className: "relative h-8 w-8 flex items-center justify-center transition-opacity hover:opacity-100 cursor-default" }, /* @__PURE__ */ import_react9.default.createElement(
|
|
744
|
+
import_image2.default,
|
|
745
|
+
{
|
|
746
|
+
src: logo.src,
|
|
747
|
+
alt: logo.alt,
|
|
748
|
+
width: 50,
|
|
749
|
+
height: 50,
|
|
750
|
+
className: "object-contain h-full w-auto"
|
|
751
|
+
}
|
|
752
|
+
))))), showImage && /* @__PURE__ */ import_react9.default.createElement("div", { className: "w-full max-w-4xl mx-auto px-2 sm:px-6" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "relative w-full flex flex-col items-center" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "relative w-full aspect-video rounded-xl overflow-hidden shadow-[0_0_40px_rgba(0,0,0,0.03)] border border-neutral-100" }, /* @__PURE__ */ import_react9.default.createElement(
|
|
672
753
|
import_image2.default,
|
|
673
754
|
{
|
|
674
755
|
src: imageSrc,
|
|
@@ -678,14 +759,42 @@ var HeroSection = ({
|
|
|
678
759
|
className: "object-cover object-top",
|
|
679
760
|
priority: true
|
|
680
761
|
}
|
|
681
|
-
), /* @__PURE__ */
|
|
762
|
+
), /* @__PURE__ */ import_react9.default.createElement("div", { className: "absolute inset-x-0 bottom-0 h-1/2 bg-linear-to-t from-[#f5f5f5] via-[#f5f5f5]/80 to-transparent pointer-events-none" }))))));
|
|
682
763
|
};
|
|
683
764
|
|
|
684
765
|
// src/components/AppBento2.tsx
|
|
685
|
-
var
|
|
686
|
-
var
|
|
766
|
+
var import_react10 = __toESM(require("react"));
|
|
767
|
+
var import_react11 = require("@hugeicons/react");
|
|
687
768
|
var AppBento2 = ({ tagline, headline, features }) => {
|
|
688
|
-
|
|
769
|
+
const [isAnimating, setIsAnimating] = (0, import_react10.useState)(false);
|
|
770
|
+
const titleRef = (0, import_react10.useRef)(null);
|
|
771
|
+
(0, import_react10.useEffect)(() => {
|
|
772
|
+
const observer = new IntersectionObserver(
|
|
773
|
+
([entry]) => {
|
|
774
|
+
if (entry.isIntersecting) {
|
|
775
|
+
if (entry.boundingClientRect.top > 0) {
|
|
776
|
+
setIsAnimating(true);
|
|
777
|
+
}
|
|
778
|
+
} else {
|
|
779
|
+
setIsAnimating(false);
|
|
780
|
+
}
|
|
781
|
+
},
|
|
782
|
+
{ threshold: 0.1 }
|
|
783
|
+
);
|
|
784
|
+
if (titleRef.current) {
|
|
785
|
+
observer.observe(titleRef.current);
|
|
786
|
+
}
|
|
787
|
+
return () => observer.disconnect();
|
|
788
|
+
}, []);
|
|
789
|
+
return /* @__PURE__ */ import_react10.default.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react10.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 block mb-4 uppercase" }, tagline), /* @__PURE__ */ import_react10.default.createElement(
|
|
790
|
+
"h2",
|
|
791
|
+
{
|
|
792
|
+
ref: titleRef,
|
|
793
|
+
className: `font-serif text-3xl md:text-4xl tracking-tight text-black leading-[1.1] ${isAnimating ? "animate-gradient-wipe" : ""}`,
|
|
794
|
+
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
795
|
+
},
|
|
796
|
+
headline
|
|
797
|
+
))), /* @__PURE__ */ import_react10.default.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-6 gap-6" }, features.map((f, i) => {
|
|
689
798
|
const isWhite = i === 0;
|
|
690
799
|
const isBlack = i === 1;
|
|
691
800
|
const isNeutral = i === 2;
|
|
@@ -707,36 +816,36 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
707
816
|
const textColor = isBlack ? "text-white" : "text-black";
|
|
708
817
|
const subTextColor = isBlack ? "text-neutral-300" : "text-neutral-600";
|
|
709
818
|
const labelColor = isBlack ? "text-neutral-400" : "text-neutral-500";
|
|
710
|
-
return /* @__PURE__ */
|
|
819
|
+
return /* @__PURE__ */ import_react10.default.createElement(
|
|
711
820
|
"div",
|
|
712
821
|
{
|
|
713
822
|
key: i,
|
|
714
823
|
className: `relative rounded-2xl overflow-hidden p-8 flex flex-col min-h-75 transition-all duration-500 group text-left ${getBgStyle()} ${f.size}`,
|
|
715
824
|
style: { boxShadow: getShadowStyle() }
|
|
716
825
|
},
|
|
717
|
-
/* @__PURE__ */
|
|
826
|
+
/* @__PURE__ */ import_react10.default.createElement(
|
|
718
827
|
"div",
|
|
719
828
|
{
|
|
720
829
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
721
830
|
style: { backgroundImage: `url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")` }
|
|
722
831
|
}
|
|
723
832
|
),
|
|
724
|
-
isBlack && /* @__PURE__ */
|
|
725
|
-
/* @__PURE__ */
|
|
726
|
-
/* @__PURE__ */
|
|
833
|
+
isBlack && /* @__PURE__ */ import_react10.default.createElement("span", { className: "absolute inset-0 rounded-2xl bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none z-10" }),
|
|
834
|
+
/* @__PURE__ */ import_react10.default.createElement("div", { className: "absolute inset-0 overflow-hidden pointer-events-none z-0" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: `absolute -bottom-8 -right-8 transform group-hover:scale-110 transition-transform duration-700 ease-out ${isBlack ? "text-white/5" : "text-black/5"}` }, /* @__PURE__ */ import_react10.default.createElement(import_react11.HugeiconsIcon, { icon: f.icon, size: 180 }))),
|
|
835
|
+
/* @__PURE__ */ import_react10.default.createElement("div", { className: "relative z-10 w-full h-full flex flex-col pointer-events-auto" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex items-center justify-between mb-8" }, /* @__PURE__ */ import_react10.default.createElement("span", { className: `text-[9px] uppercase tracking-widest ${labelColor}` }, f.label), /* @__PURE__ */ import_react10.default.createElement("div", { className: `p-2 rounded-full transition-colors ${isBlack ? "bg-white/10" : "bg-white/50 backdrop-blur-sm"}` }, /* @__PURE__ */ import_react10.default.createElement(import_react11.HugeiconsIcon, { icon: f.icon, size: 20, className: textColor }))), /* @__PURE__ */ import_react10.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react10.default.createElement("h3", { className: `text-xl font-serif mb-2 tracking-tight ${textColor}` }, f.title), /* @__PURE__ */ import_react10.default.createElement("p", { className: `text-[13px] leading-relaxed max-w-sm ${subTextColor}` }, f.desc)))
|
|
727
836
|
);
|
|
728
837
|
})))));
|
|
729
838
|
};
|
|
730
839
|
|
|
731
840
|
// src/components/FeatureScroll.tsx
|
|
732
|
-
var
|
|
841
|
+
var import_react12 = __toESM(require("react"));
|
|
733
842
|
var import_image3 = __toESM(require("next/image"));
|
|
734
|
-
var
|
|
735
|
-
var
|
|
843
|
+
var import_react13 = require("@hugeicons/react");
|
|
844
|
+
var import_core_free_icons2 = require("@hugeicons/core-free-icons");
|
|
736
845
|
var FeatureCard = ({ feature, bgImage }) => {
|
|
737
|
-
const [isBgLoading, setIsBgLoading] = (0,
|
|
738
|
-
const [isFgLoading, setIsFgLoading] = (0,
|
|
739
|
-
return /* @__PURE__ */
|
|
846
|
+
const [isBgLoading, setIsBgLoading] = (0, import_react12.useState)(true);
|
|
847
|
+
const [isFgLoading, setIsFgLoading] = (0, import_react12.useState)(!!feature.image);
|
|
848
|
+
return /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex flex-col shrink-0 w-[90vw] sm:w-150 snap-center md:snap-start group cursor-grab active:cursor-grabbing" }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "relative w-full aspect-16/10 bg-neutral-100 rounded-2xl overflow-hidden mb-6 flex items-center justify-center" }, /* @__PURE__ */ import_react12.default.createElement(
|
|
740
849
|
import_image3.default,
|
|
741
850
|
{
|
|
742
851
|
src: bgImage,
|
|
@@ -749,7 +858,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
749
858
|
${isBgLoading ? "blur-xl scale-110" : "blur-0 scale-100"}
|
|
750
859
|
`
|
|
751
860
|
}
|
|
752
|
-
), /* @__PURE__ */
|
|
861
|
+
), /* @__PURE__ */ import_react12.default.createElement(
|
|
753
862
|
"div",
|
|
754
863
|
{
|
|
755
864
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.25] mix-blend-overlay",
|
|
@@ -757,7 +866,7 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
757
866
|
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")`
|
|
758
867
|
}
|
|
759
868
|
}
|
|
760
|
-
), isFgLoading && feature.image && /* @__PURE__ */
|
|
869
|
+
), isFgLoading && feature.image && /* @__PURE__ */ import_react12.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-50/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ import_react12.default.createElement(import_react13.HugeiconsIcon, { icon: import_core_free_icons2.Loading03Icon, size: 32, className: "animate-spin text-neutral-400" })), feature.image && /* @__PURE__ */ import_react12.default.createElement("div", { className: "absolute -bottom-6 -right-6 w-[85%] h-[85%] z-10 transition-transform duration-700 ease-out group-hover:-translate-x-2 group-hover:-translate-y-2" }, /* @__PURE__ */ import_react12.default.createElement(
|
|
761
870
|
import_image3.default,
|
|
762
871
|
{
|
|
763
872
|
src: feature.image,
|
|
@@ -770,12 +879,12 @@ var FeatureCard = ({ feature, bgImage }) => {
|
|
|
770
879
|
${isFgLoading ? "opacity-0 blur-xl" : "opacity-100 blur-0"}
|
|
771
880
|
`
|
|
772
881
|
}
|
|
773
|
-
))), /* @__PURE__ */
|
|
882
|
+
))), /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ import_react12.default.createElement("h3", { className: " font-serif text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ import_react12.default.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 max-w-[90%]" }, feature.desc)));
|
|
774
883
|
};
|
|
775
884
|
var FeatureScroll = ({ tagline, headline, features }) => {
|
|
776
|
-
const scrollRef = (0,
|
|
777
|
-
const [canScrollLeft, setCanScrollLeft] = (0,
|
|
778
|
-
const [canScrollRight, setCanScrollRight] = (0,
|
|
885
|
+
const scrollRef = (0, import_react12.useRef)(null);
|
|
886
|
+
const [canScrollLeft, setCanScrollLeft] = (0, import_react12.useState)(false);
|
|
887
|
+
const [canScrollRight, setCanScrollRight] = (0, import_react12.useState)(true);
|
|
779
888
|
const checkScroll = () => {
|
|
780
889
|
if (scrollRef.current) {
|
|
781
890
|
const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;
|
|
@@ -783,7 +892,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
783
892
|
setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 2);
|
|
784
893
|
}
|
|
785
894
|
};
|
|
786
|
-
(0,
|
|
895
|
+
(0, import_react12.useEffect)(() => {
|
|
787
896
|
checkScroll();
|
|
788
897
|
window.addEventListener("resize", checkScroll);
|
|
789
898
|
return () => window.removeEventListener("resize", checkScroll);
|
|
@@ -799,7 +908,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
799
908
|
"/assets/webp/card-bg2.webp",
|
|
800
909
|
"/assets/webp/card-bg3.webp"
|
|
801
910
|
];
|
|
802
|
-
return /* @__PURE__ */
|
|
911
|
+
return /* @__PURE__ */ import_react12.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden" }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "relative z-10 text-left" }, /* @__PURE__ */ import_react12.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ import_react12.default.createElement("h2", { className: " font-serif text-3xl md:text-5xl tracking-tight text-black leading-[1.05]" }, headline)), /* @__PURE__ */ import_react12.default.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ import_react12.default.createElement(
|
|
803
912
|
"button",
|
|
804
913
|
{
|
|
805
914
|
onClick: () => scroll("left"),
|
|
@@ -807,8 +916,8 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
807
916
|
className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 disabled:hover:border-neutral-200 disabled:hover:text-neutral-500 disabled:cursor-not-allowed transition-all outline-none",
|
|
808
917
|
"aria-label": "Previous feature"
|
|
809
918
|
},
|
|
810
|
-
/* @__PURE__ */
|
|
811
|
-
), /* @__PURE__ */
|
|
919
|
+
/* @__PURE__ */ import_react12.default.createElement(import_react13.HugeiconsIcon, { icon: import_core_free_icons2.ArrowLeft01Icon, size: 20 })
|
|
920
|
+
), /* @__PURE__ */ import_react12.default.createElement(
|
|
812
921
|
"button",
|
|
813
922
|
{
|
|
814
923
|
onClick: () => scroll("right"),
|
|
@@ -816,39 +925,39 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
816
925
|
className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 disabled:hover:border-neutral-200 disabled:hover:text-neutral-500 disabled:cursor-not-allowed transition-all outline-none",
|
|
817
926
|
"aria-label": "Next feature"
|
|
818
927
|
},
|
|
819
|
-
/* @__PURE__ */
|
|
820
|
-
))), /* @__PURE__ */
|
|
928
|
+
/* @__PURE__ */ import_react12.default.createElement(import_react13.HugeiconsIcon, { icon: import_core_free_icons2.ArrowRight01Icon, size: 20 })
|
|
929
|
+
))), /* @__PURE__ */ import_react12.default.createElement(
|
|
821
930
|
"div",
|
|
822
931
|
{
|
|
823
932
|
ref: scrollRef,
|
|
824
933
|
onScroll: checkScroll,
|
|
825
934
|
className: "flex gap-6 overflow-x-auto snap-x snap-mandatory [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] scrollbar-none pb-8 -mx-4 px-4 md:mx-0 md:px-0"
|
|
826
935
|
},
|
|
827
|
-
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */
|
|
828
|
-
), /* @__PURE__ */
|
|
936
|
+
features.slice(0, 3).map((feature, idx) => /* @__PURE__ */ import_react12.default.createElement(FeatureCard, { key: idx, feature, bgImage: bgImages[idx] }))
|
|
937
|
+
), /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ import_react12.default.createElement(
|
|
829
938
|
"button",
|
|
830
939
|
{
|
|
831
940
|
onClick: () => scroll("left"),
|
|
832
941
|
disabled: !canScrollLeft,
|
|
833
942
|
className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 transition-all outline-none"
|
|
834
943
|
},
|
|
835
|
-
/* @__PURE__ */
|
|
836
|
-
), /* @__PURE__ */
|
|
944
|
+
/* @__PURE__ */ import_react12.default.createElement(import_react13.HugeiconsIcon, { icon: import_core_free_icons2.ArrowLeft01Icon, size: 20 })
|
|
945
|
+
), /* @__PURE__ */ import_react12.default.createElement(
|
|
837
946
|
"button",
|
|
838
947
|
{
|
|
839
948
|
onClick: () => scroll("right"),
|
|
840
949
|
disabled: !canScrollRight,
|
|
841
950
|
className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 transition-all outline-none"
|
|
842
951
|
},
|
|
843
|
-
/* @__PURE__ */
|
|
952
|
+
/* @__PURE__ */ import_react12.default.createElement(import_react13.HugeiconsIcon, { icon: import_core_free_icons2.ArrowRight01Icon, size: 20 })
|
|
844
953
|
))));
|
|
845
954
|
};
|
|
846
955
|
|
|
847
956
|
// src/components/AITranscriptionFeature.tsx
|
|
848
|
-
var
|
|
957
|
+
var import_react14 = __toESM(require("react"));
|
|
849
958
|
var import_image4 = __toESM(require("next/image"));
|
|
850
|
-
var
|
|
851
|
-
var
|
|
959
|
+
var import_react15 = require("@hugeicons/react");
|
|
960
|
+
var import_core_free_icons3 = require("@hugeicons/core-free-icons");
|
|
852
961
|
var AITranscriptionFeature = ({
|
|
853
962
|
tagline,
|
|
854
963
|
headline,
|
|
@@ -859,8 +968,8 @@ var AITranscriptionFeature = ({
|
|
|
859
968
|
cursorLabel,
|
|
860
969
|
detailTextSuffix
|
|
861
970
|
}) => {
|
|
862
|
-
const [isLoading, setIsLoading] = (0,
|
|
863
|
-
return /* @__PURE__ */
|
|
971
|
+
const [isLoading, setIsLoading] = (0, import_react14.useState)(!!imagePath);
|
|
972
|
+
return /* @__PURE__ */ import_react14.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex flex-col items-center text-center mb-12 relative z-10 animate-in fade-in slide-in-from-bottom-4 duration-700" }, /* @__PURE__ */ import_react14.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ import_react14.default.createElement("h2", { className: " font-serif text-3xl md:text-5xl tracking-tight animate-gradient-wipe leading-[1.05] mb-4" }, headline), /* @__PURE__ */ import_react14.default.createElement("p", { className: "text-[15px] md:text-[16px] leading-[1.8] text-neutral-600 max-w-xl mx-auto" }, description)), /* @__PURE__ */ import_react14.default.createElement("div", { className: "relative w-full max-w-5xl mx-auto aspect-video sm:aspect-21/9 bg-neutral-100 rounded-2xl overflow-hidden mb-12 flex items-center justify-center shadow-[0_0_40px_rgba(0,0,0,0.03)] animate-in fade-in zoom-in-95 duration-700 delay-150 fill-mode-both" }, /* @__PURE__ */ import_react14.default.createElement(
|
|
864
973
|
"div",
|
|
865
974
|
{
|
|
866
975
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-20 mix-blend-overlay",
|
|
@@ -869,7 +978,7 @@ var AITranscriptionFeature = ({
|
|
|
869
978
|
backgroundRepeat: "repeat"
|
|
870
979
|
}
|
|
871
980
|
}
|
|
872
|
-
), isLoading && imagePath && /* @__PURE__ */
|
|
981
|
+
), isLoading && imagePath && /* @__PURE__ */ import_react14.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-50/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ import_react14.default.createElement(import_react15.HugeiconsIcon, { icon: import_core_free_icons3.Loading03Icon, size: 32, className: "animate-spin text-neutral-400" })), imagePath ? /* @__PURE__ */ import_react14.default.createElement(
|
|
873
982
|
import_image4.default,
|
|
874
983
|
{
|
|
875
984
|
src: imagePath,
|
|
@@ -882,32 +991,32 @@ var AITranscriptionFeature = ({
|
|
|
882
991
|
${isLoading ? "scale-105 blur-2xl opacity-0" : "scale-100 blur-0 opacity-100"}
|
|
883
992
|
`
|
|
884
993
|
}
|
|
885
|
-
) : /* @__PURE__ */
|
|
994
|
+
) : /* @__PURE__ */ import_react14.default.createElement("div", { className: "absolute inset-0 bg-white z-0" })), /* @__PURE__ */ import_react14.default.createElement("div", { className: "max-w-3xl mx-auto text-center animate-in fade-in slide-in-from-bottom-4 duration-700 delay-300 fill-mode-both" }, /* @__PURE__ */ import_react14.default.createElement("p", { className: "text-[18px] sm:text-[22px] md:text-[25px] leading-[1.8] text-neutral-800" }, detailTextPrefix, " ", /* @__PURE__ */ import_react14.default.createElement("span", { className: "relative font-serif inline-block mx-1 px-2.5 py-0.5 bg-[#cd8bff]/10 border border-[#cd8bff] rounded-[3px] text-[#a651e7] transition-all duration-300 max-w-full wrap-break-word" }, /* @__PURE__ */ import_react14.default.createElement("span", { className: "absolute top-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), /* @__PURE__ */ import_react14.default.createElement("span", { className: "absolute top-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), /* @__PURE__ */ import_react14.default.createElement("span", { className: "absolute bottom-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), /* @__PURE__ */ import_react14.default.createElement("span", { className: "absolute bottom-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), highlightText, /* @__PURE__ */ import_react14.default.createElement("span", { className: "absolute -bottom-6 -right-4 sm:-right-6 flex items-center z-20 pointer-events-none select-none filter drop-shadow-[0_2px_4px_rgba(0,0,0,0.15)]" }, /* @__PURE__ */ import_react14.default.createElement("svg", { width: "16", height: "20", viewBox: "0 0 16 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: "transform -rotate-12" }, /* @__PURE__ */ import_react14.default.createElement("path", { d: "M1 1V17.8L5.8 13.1H12.8L1 1Z", fill: "#cd8bff", stroke: "white", strokeWidth: "1.8", strokeLinejoin: "round" })), /* @__PURE__ */ import_react14.default.createElement("span", { className: "ml-1 bg-[#cd8bff] text-[10px] text-white font-mono px-2 py-0.5 rounded-full border border-white tracking-wide" }, cursorLabel))), " ", detailTextSuffix))));
|
|
886
995
|
};
|
|
887
996
|
|
|
888
997
|
// src/components/PlatformFeatures.tsx
|
|
889
|
-
var
|
|
890
|
-
var
|
|
998
|
+
var import_react16 = __toESM(require("react"));
|
|
999
|
+
var import_react17 = require("@hugeicons/react");
|
|
891
1000
|
var PlatformFeatures = ({
|
|
892
1001
|
tagline,
|
|
893
1002
|
headline,
|
|
894
1003
|
description,
|
|
895
1004
|
features
|
|
896
1005
|
}) => {
|
|
897
|
-
return /* @__PURE__ */
|
|
1006
|
+
return /* @__PURE__ */ import_react16.default.createElement("section", { className: "w-full flex justify-center mb-15 relative z-10" }, /* @__PURE__ */ import_react16.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react16.default.createElement("div", { className: "flex flex-col items-start mb-16 relative z-10" }, /* @__PURE__ */ import_react16.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ import_react16.default.createElement("h2", { className: " font-serif text-3xl md:text-5xl tracking-tight text-black leading-[1.05] mb-6" }, headline), /* @__PURE__ */ import_react16.default.createElement("p", { className: "text-[15px] md:text-[16px] leading-[1.8] text-neutral-600 max-w-2xl" }, description)), /* @__PURE__ */ import_react16.default.createElement("div", { className: "w-full h-px bg-neutral-100 mb-16", "aria-hidden": "true" }), /* @__PURE__ */ import_react16.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-x-8 gap-y-12" }, features.map((feature, idx) => /* @__PURE__ */ import_react16.default.createElement(
|
|
898
1007
|
"div",
|
|
899
1008
|
{
|
|
900
1009
|
key: idx,
|
|
901
1010
|
className: "flex flex-col group animate-in fade-in slide-in-from-bottom-4 duration-700 fill-mode-both",
|
|
902
1011
|
style: { animationDelay: feature.delay || "0ms" }
|
|
903
1012
|
},
|
|
904
|
-
/* @__PURE__ */
|
|
905
|
-
/* @__PURE__ */
|
|
1013
|
+
/* @__PURE__ */ import_react16.default.createElement("div", { className: "w-12 h-12 rounded-full bg-neutral-100 flex items-center justify-center text-neutral-600 mb-5 transition-colors duration-300" }, /* @__PURE__ */ import_react16.default.createElement(import_react17.HugeiconsIcon, { icon: feature.icon, size: 24 })),
|
|
1014
|
+
/* @__PURE__ */ import_react16.default.createElement("div", null, /* @__PURE__ */ import_react16.default.createElement("h3", { className: " text-xl font-serif tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ import_react16.default.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 pr-4" }, feature.desc))
|
|
906
1015
|
)))));
|
|
907
1016
|
};
|
|
908
1017
|
|
|
909
1018
|
// src/components/ManagedDocument.tsx
|
|
910
|
-
var
|
|
1019
|
+
var import_react18 = __toESM(require("react"));
|
|
911
1020
|
var ManagedDocument = ({
|
|
912
1021
|
tagline,
|
|
913
1022
|
title,
|
|
@@ -915,9 +1024,37 @@ var ManagedDocument = ({
|
|
|
915
1024
|
contactText,
|
|
916
1025
|
contactEmail
|
|
917
1026
|
}) => {
|
|
1027
|
+
const [isAnimating, setIsAnimating] = (0, import_react18.useState)(false);
|
|
1028
|
+
const titleRef = (0, import_react18.useRef)(null);
|
|
1029
|
+
(0, import_react18.useEffect)(() => {
|
|
1030
|
+
const observer = new IntersectionObserver(
|
|
1031
|
+
([entry]) => {
|
|
1032
|
+
if (entry.isIntersecting) {
|
|
1033
|
+
if (entry.boundingClientRect.top > 0) {
|
|
1034
|
+
setIsAnimating(true);
|
|
1035
|
+
}
|
|
1036
|
+
} else {
|
|
1037
|
+
setIsAnimating(false);
|
|
1038
|
+
}
|
|
1039
|
+
},
|
|
1040
|
+
{ threshold: 0.1 }
|
|
1041
|
+
);
|
|
1042
|
+
if (titleRef.current) {
|
|
1043
|
+
observer.observe(titleRef.current);
|
|
1044
|
+
}
|
|
1045
|
+
return () => observer.disconnect();
|
|
1046
|
+
}, []);
|
|
918
1047
|
return (
|
|
919
1048
|
// Outer layout wrapper (takes up available space, adds padding)
|
|
920
|
-
/* @__PURE__ */
|
|
1049
|
+
/* @__PURE__ */ import_react18.default.createElement("div", { className: "grow pt-28 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react18.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react18.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react18.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react18.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 text-left block uppercase" }, tagline), /* @__PURE__ */ import_react18.default.createElement(
|
|
1050
|
+
"h1",
|
|
1051
|
+
{
|
|
1052
|
+
ref: titleRef,
|
|
1053
|
+
className: `font-serif text-4xl md:text-5xl mt-4 text-black tracking-tight text-left ${isAnimating ? "animate-gradient-wipe" : ""}`,
|
|
1054
|
+
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
1055
|
+
},
|
|
1056
|
+
title
|
|
1057
|
+
)), sections.map((section, index) => /* @__PURE__ */ import_react18.default.createElement("div", { key: index, className: "relative px-5 md:px-12 py-8 md:py-10" }, section.heading && /* @__PURE__ */ import_react18.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_react18.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_react18.default.createElement("p", { key: pIndex }, text))), section.quote && /* @__PURE__ */ import_react18.default.createElement("div", { className: `border-neutral-200 border rounded-xl p-6 ${section.paragraphs && section.paragraphs.length > 0 ? "mt-6" : ""}` }, /* @__PURE__ */ import_react18.default.createElement("p", { className: "text-neutral-900 text-[14px] md:text-[14px] leading-relaxed" }, '"', section.quote, '"')))), (contactText || contactEmail) && /* @__PURE__ */ import_react18.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ import_react18.default.createElement("p", { className: "text-[12px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ import_react18.default.createElement(
|
|
921
1058
|
"a",
|
|
922
1059
|
{
|
|
923
1060
|
href: `mailto:${contactEmail}`,
|
|
@@ -929,18 +1066,18 @@ var ManagedDocument = ({
|
|
|
929
1066
|
};
|
|
930
1067
|
|
|
931
1068
|
// src/components/ManagedContactBlock.tsx
|
|
932
|
-
var
|
|
933
|
-
var
|
|
1069
|
+
var import_react19 = __toESM(require("react"));
|
|
1070
|
+
var import_react20 = require("@hugeicons/react");
|
|
934
1071
|
var SecureEmail = ({ user, domain, className }) => {
|
|
935
|
-
const [isMounted, setIsMounted] = (0,
|
|
936
|
-
(0,
|
|
1072
|
+
const [isMounted, setIsMounted] = (0, import_react19.useState)(false);
|
|
1073
|
+
(0, import_react19.useEffect)(() => {
|
|
937
1074
|
setIsMounted(true);
|
|
938
1075
|
}, []);
|
|
939
1076
|
if (!isMounted) {
|
|
940
|
-
return /* @__PURE__ */
|
|
1077
|
+
return /* @__PURE__ */ import_react19.default.createElement("span", { className, style: { opacity: 0 } }, "Loading");
|
|
941
1078
|
}
|
|
942
1079
|
const email = `${user}@${domain}`;
|
|
943
|
-
return /* @__PURE__ */
|
|
1080
|
+
return /* @__PURE__ */ import_react19.default.createElement("a", { href: `mailto:${email}`, className }, email);
|
|
944
1081
|
};
|
|
945
1082
|
var ManagedContactBlock = ({
|
|
946
1083
|
tagline,
|
|
@@ -949,7 +1086,7 @@ var ManagedContactBlock = ({
|
|
|
949
1086
|
emails,
|
|
950
1087
|
socials
|
|
951
1088
|
}) => {
|
|
952
|
-
return /* @__PURE__ */
|
|
1089
|
+
return /* @__PURE__ */ import_react19.default.createElement("div", { className: "grow pt-28 pb-20 px-4 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(
|
|
953
1090
|
"div",
|
|
954
1091
|
{
|
|
955
1092
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -958,21 +1095,21 @@ var ManagedContactBlock = ({
|
|
|
958
1095
|
backgroundRepeat: "repeat"
|
|
959
1096
|
}
|
|
960
1097
|
}
|
|
961
|
-
), /* @__PURE__ */
|
|
1098
|
+
), /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative px-8 md:px-12 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)), /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative px-8 md:px-12 py-8 pb-14" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex flex-wrap gap-12 lg:gap-16 w-full" }, company && /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react19.default.createElement("h2", { className: "text-[11px] tracking-[0.2em] text-black mb-4 uppercase" }, "Contact Details"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-3 text-[13px] text-neutral-600 leading-[1.8]" }, company.name && /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-black" }, company.name), company.lines && company.lines.map((line, idx) => /* @__PURE__ */ import_react19.default.createElement("p", { key: idx }, line)), company.phone && /* @__PURE__ */ import_react19.default.createElement("p", { className: "pt-2" }, /* @__PURE__ */ import_react19.default.createElement(
|
|
962
1099
|
"a",
|
|
963
1100
|
{
|
|
964
1101
|
href: `tel:${company.phone.replace(/\s+/g, "")}`,
|
|
965
1102
|
className: "transition-colors hover:text-black"
|
|
966
1103
|
},
|
|
967
1104
|
company.phone
|
|
968
|
-
)))), emails && emails.length > 0 && /* @__PURE__ */
|
|
1105
|
+
)))), emails && emails.length > 0 && /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react19.default.createElement("h2", { className: "text-[11px] tracking-[0.2em] text-black mb-4 uppercase" }, "Email Directory"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-6 text-[13px]" }, emails.map((email, idx) => /* @__PURE__ */ import_react19.default.createElement("div", { key: idx }, /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-[10px] tracking-[0.2em] mb-1.5 text-neutral-500 uppercase" }, email.label), /* @__PURE__ */ import_react19.default.createElement(
|
|
969
1106
|
SecureEmail,
|
|
970
1107
|
{
|
|
971
1108
|
user: email.user,
|
|
972
1109
|
domain: email.domain,
|
|
973
1110
|
className: "text-neutral-600 transition-colors hover:text-black"
|
|
974
1111
|
}
|
|
975
|
-
))))), socials && socials.length > 0 && /* @__PURE__ */
|
|
1112
|
+
))))), socials && socials.length > 0 && /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react19.default.createElement("h2", { className: "text-[11px] tracking-[0.2em] text-black mb-4 uppercase" }, "Find Us Online"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex flex-col space-y-5 pt-1" }, socials.map((social, idx) => /* @__PURE__ */ import_react19.default.createElement(
|
|
976
1113
|
"a",
|
|
977
1114
|
{
|
|
978
1115
|
key: idx,
|
|
@@ -982,29 +1119,74 @@ var ManagedContactBlock = ({
|
|
|
982
1119
|
className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black",
|
|
983
1120
|
"aria-label": social.label
|
|
984
1121
|
},
|
|
985
|
-
/* @__PURE__ */
|
|
986
|
-
/* @__PURE__ */
|
|
1122
|
+
/* @__PURE__ */ import_react19.default.createElement(import_react20.HugeiconsIcon, { icon: social.icon, size: 18 }),
|
|
1123
|
+
/* @__PURE__ */ import_react19.default.createElement("span", { className: "text-[13px]" }, social.label)
|
|
987
1124
|
)))))))));
|
|
988
1125
|
};
|
|
989
1126
|
|
|
990
1127
|
// src/components/ManagedPricingBlock.tsx
|
|
991
|
-
var
|
|
1128
|
+
var import_react21 = __toESM(require("react"));
|
|
992
1129
|
var import_link5 = __toESM(require("next/link"));
|
|
993
|
-
var
|
|
994
|
-
var
|
|
1130
|
+
var import_image5 = __toESM(require("next/image"));
|
|
1131
|
+
var CheckIcon = ({ className = "" }) => /* @__PURE__ */ import_react21.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react21.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ import_react21.default.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
1132
|
+
var CrossIcon = ({ className = "" }) => /* @__PURE__ */ import_react21.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react21.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ import_react21.default.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
995
1133
|
var ManagedPricingBlock = ({
|
|
996
1134
|
tagline,
|
|
997
1135
|
title,
|
|
998
1136
|
plans
|
|
999
1137
|
}) => {
|
|
1000
|
-
|
|
1138
|
+
const [isAnimating, setIsAnimating] = (0, import_react21.useState)(false);
|
|
1139
|
+
const titleRef = (0, import_react21.useRef)(null);
|
|
1140
|
+
(0, import_react21.useEffect)(() => {
|
|
1141
|
+
const observer = new IntersectionObserver(
|
|
1142
|
+
([entry]) => {
|
|
1143
|
+
if (entry.isIntersecting) {
|
|
1144
|
+
if (entry.boundingClientRect.top > 0) {
|
|
1145
|
+
setIsAnimating(true);
|
|
1146
|
+
}
|
|
1147
|
+
} else {
|
|
1148
|
+
setIsAnimating(false);
|
|
1149
|
+
}
|
|
1150
|
+
},
|
|
1151
|
+
{ threshold: 0.1 }
|
|
1152
|
+
);
|
|
1153
|
+
if (titleRef.current) {
|
|
1154
|
+
observer.observe(titleRef.current);
|
|
1155
|
+
}
|
|
1156
|
+
return () => observer.disconnect();
|
|
1157
|
+
}, []);
|
|
1158
|
+
return /* @__PURE__ */ import_react21.default.createElement("div", { className: "grow pt-40 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col items-center" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full flex flex-col items-center text-center mb-12" }, tagline && /* @__PURE__ */ import_react21.default.createElement("span", { className: "text-[9px] tracking-[0.4em] text-black block uppercase" }, tagline), /* @__PURE__ */ import_react21.default.createElement(
|
|
1159
|
+
"h1",
|
|
1160
|
+
{
|
|
1161
|
+
ref: titleRef,
|
|
1162
|
+
className: `font-serif text-2xl sm:text-3xl mt-3 text-black tracking-tight ${isAnimating ? "animate-gradient-wipe" : ""}`,
|
|
1163
|
+
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
1164
|
+
},
|
|
1165
|
+
title
|
|
1166
|
+
)), /* @__PURE__ */ import_react21.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-5 w-full max-w-3xl" }, plans.map((plan, planIdx) => /* @__PURE__ */ import_react21.default.createElement(
|
|
1001
1167
|
"div",
|
|
1002
1168
|
{
|
|
1003
1169
|
key: planIdx,
|
|
1004
1170
|
className: `bg-white rounded-3xl p-6 flex flex-col relative overflow-hidden ${plan.isPremium ? "" : ""}`
|
|
1005
1171
|
},
|
|
1006
|
-
/* @__PURE__ */
|
|
1007
|
-
|
|
1172
|
+
/* @__PURE__ */ import_react21.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ import_react21.default.createElement("span", { className: "text-black text-base block mb-1" }, plan.name), /* @__PURE__ */ import_react21.default.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ import_react21.default.createElement("span", { className: "text-5xl font-serif text-black" }, plan.price), plan.period && /* @__PURE__ */ import_react21.default.createElement("span", { className: "text-xs text-neutral-500" }, plan.period)), /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-xs text-neutral-500 mt-2" }, plan.description), plan.showApps && plan.appLogos && plan.appLogos.length > 0 && /* @__PURE__ */ import_react21.default.createElement("div", { className: "flex items-center gap-2 mt-4" }, plan.appLogos.map((logo, logoIdx) => /* @__PURE__ */ import_react21.default.createElement(
|
|
1173
|
+
"div",
|
|
1174
|
+
{
|
|
1175
|
+
key: logoIdx,
|
|
1176
|
+
className: "relative w-7 h-7 rounded-md border border-neutral-100 overflow-hidden bg-neutral-50/50 flex items-center justify-center shrink-0 shadow-sm"
|
|
1177
|
+
},
|
|
1178
|
+
/* @__PURE__ */ import_react21.default.createElement(
|
|
1179
|
+
import_image5.default,
|
|
1180
|
+
{
|
|
1181
|
+
src: logo.src,
|
|
1182
|
+
alt: logo.alt,
|
|
1183
|
+
width: 16,
|
|
1184
|
+
height: 16,
|
|
1185
|
+
className: "object-contain"
|
|
1186
|
+
}
|
|
1187
|
+
)
|
|
1188
|
+
)))),
|
|
1189
|
+
plan.isPremium ? /* @__PURE__ */ import_react21.default.createElement(ThreeDButton, { href: plan.ctaHref, className: "mb-6 w-full" }, plan.ctaText) : /* @__PURE__ */ import_react21.default.createElement(
|
|
1008
1190
|
import_link5.default,
|
|
1009
1191
|
{
|
|
1010
1192
|
href: plan.ctaHref,
|
|
@@ -1012,20 +1194,20 @@ var ManagedPricingBlock = ({
|
|
|
1012
1194
|
},
|
|
1013
1195
|
plan.ctaText
|
|
1014
1196
|
),
|
|
1015
|
-
/* @__PURE__ */
|
|
1197
|
+
/* @__PURE__ */ import_react21.default.createElement("div", { className: "flex flex-col gap-3" }, plan.features.map((feature, featureIdx) => {
|
|
1016
1198
|
const isAvailable = feature.value !== false;
|
|
1017
1199
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
1018
|
-
return /* @__PURE__ */
|
|
1200
|
+
return /* @__PURE__ */ import_react21.default.createElement("div", { key: featureIdx, className: "flex items-center gap-2.5" }, isAvailable ? /* @__PURE__ */ import_react21.default.createElement(CheckIcon, null) : /* @__PURE__ */ import_react21.default.createElement(CrossIcon, null), /* @__PURE__ */ import_react21.default.createElement("span", { className: `text-xs ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ import_react21.default.createElement("span", { className: "text-neutral-500 ml-1" }, "(", valueText, ")")));
|
|
1019
1201
|
}))
|
|
1020
1202
|
)))));
|
|
1021
1203
|
};
|
|
1022
1204
|
|
|
1023
1205
|
// src/components/ManagedBoardBlock.tsx
|
|
1024
|
-
var
|
|
1025
|
-
var
|
|
1026
|
-
var
|
|
1027
|
-
var
|
|
1028
|
-
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */
|
|
1206
|
+
var import_react22 = __toESM(require("react"));
|
|
1207
|
+
var import_image6 = __toESM(require("next/image"));
|
|
1208
|
+
var import_react23 = require("@hugeicons/react");
|
|
1209
|
+
var import_core_free_icons4 = require("@hugeicons/core-free-icons");
|
|
1210
|
+
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ import_react22.default.createElement(
|
|
1029
1211
|
"a",
|
|
1030
1212
|
{
|
|
1031
1213
|
href,
|
|
@@ -1034,7 +1216,7 @@ var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ import_r
|
|
|
1034
1216
|
className: "text-neutral-400 hover:text-black transition-colors",
|
|
1035
1217
|
"aria-label": `${name} on ${label}`
|
|
1036
1218
|
},
|
|
1037
|
-
/* @__PURE__ */
|
|
1219
|
+
/* @__PURE__ */ import_react22.default.createElement(import_react23.HugeiconsIcon, { icon, size: 16 })
|
|
1038
1220
|
);
|
|
1039
1221
|
var ManagedBoardBlock = ({
|
|
1040
1222
|
tagline,
|
|
@@ -1043,7 +1225,7 @@ var ManagedBoardBlock = ({
|
|
|
1043
1225
|
contactText,
|
|
1044
1226
|
contactEmail
|
|
1045
1227
|
}) => {
|
|
1046
|
-
return /* @__PURE__ */
|
|
1228
|
+
return /* @__PURE__ */ import_react22.default.createElement("div", { className: "grow pt-28 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "relative w-full mx-auto overflow-hidden max-w-7xl" }, /* @__PURE__ */ import_react22.default.createElement(
|
|
1047
1229
|
"div",
|
|
1048
1230
|
{
|
|
1049
1231
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -1052,8 +1234,8 @@ var ManagedBoardBlock = ({
|
|
|
1052
1234
|
backgroundRepeat: "repeat"
|
|
1053
1235
|
}
|
|
1054
1236
|
}
|
|
1055
|
-
), /* @__PURE__ */
|
|
1056
|
-
|
|
1237
|
+
), /* @__PURE__ */ import_react22.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react22.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 text-left block uppercase" }, tagline), /* @__PURE__ */ import_react22.default.createElement("h1", { className: " font-serif text-4xl md:text-5xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ import_react22.default.createElement("div", { className: "relative px-5 md:px-12 py-4 md:py-8" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-5 md:gap-8" }, members.map((member, idx) => /* @__PURE__ */ import_react22.default.createElement("div", { key: idx, className: "relative p-6 md:p-8 rounded-2xl bg-white flex flex-col transition-all group" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-start space-x-4 md:space-x-5 mb-5 md:mb-6" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "relative w-14 h-14 md:w-16 md:h-16 shrink-0 bg-white overflow-hidden rounded-xl" }, /* @__PURE__ */ import_react22.default.createElement(
|
|
1238
|
+
import_image6.default,
|
|
1057
1239
|
{
|
|
1058
1240
|
src: member.imageSrc,
|
|
1059
1241
|
alt: member.name,
|
|
@@ -1061,39 +1243,39 @@ var ManagedBoardBlock = ({
|
|
|
1061
1243
|
sizes: "(max-width: 768px) 56px, 64px",
|
|
1062
1244
|
className: "object-cover grayscale opacity-100 transition-opacity"
|
|
1063
1245
|
}
|
|
1064
|
-
)), /* @__PURE__ */
|
|
1246
|
+
)), /* @__PURE__ */ import_react22.default.createElement("div", { className: "pt-1" }, /* @__PURE__ */ import_react22.default.createElement("h3", { className: " text-[14px] md:text-[15px] text-black tracking-tight" }, member.name), /* @__PURE__ */ import_react22.default.createElement("p", { className: "text-[10px] tracking-[0.2em] text-neutral-500 mt-1.5 uppercase" }, member.title))), /* @__PURE__ */ import_react22.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 text-left grow mb-8" }, member.bio), /* @__PURE__ */ import_react22.default.createElement("div", { className: "space-y-6 mt-auto" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ import_react22.default.createElement(ThreeDButton, { href: member.website }, "Visit Website")), /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex space-x-4 pt-5" }, member.twitterHandle && member.twitterHandle.length > 0 && /* @__PURE__ */ import_react22.default.createElement(
|
|
1065
1247
|
MemberSocialLink,
|
|
1066
1248
|
{
|
|
1067
1249
|
href: `https://x.com/${member.twitterHandle}`,
|
|
1068
|
-
icon:
|
|
1250
|
+
icon: import_core_free_icons4.TwitterIcon,
|
|
1069
1251
|
label: "X",
|
|
1070
1252
|
name: member.name
|
|
1071
1253
|
}
|
|
1072
|
-
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */
|
|
1254
|
+
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */ import_react22.default.createElement(
|
|
1073
1255
|
MemberSocialLink,
|
|
1074
1256
|
{
|
|
1075
1257
|
href: member.linkedinHandle,
|
|
1076
|
-
icon:
|
|
1258
|
+
icon: import_core_free_icons4.LinkedinIcon,
|
|
1077
1259
|
label: "LinkedIn",
|
|
1078
1260
|
name: member.name
|
|
1079
1261
|
}
|
|
1080
|
-
))))))), (contactText || contactEmail) && /* @__PURE__ */
|
|
1262
|
+
))))))), (contactText || contactEmail) && /* @__PURE__ */ import_react22.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ import_react22.default.createElement("p", { className: "text-[12px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ import_react22.default.createElement("a", { href: `mailto:${contactEmail}`, className: "text-black decoration-black decoration-2 underline-offset-4 ml-1 transition-colors" }, contactEmail))))));
|
|
1081
1263
|
};
|
|
1082
1264
|
|
|
1083
1265
|
// src/components/ManagedProjectsBlock.tsx
|
|
1084
|
-
var
|
|
1266
|
+
var import_react24 = __toESM(require("react"));
|
|
1085
1267
|
var import_link6 = __toESM(require("next/link"));
|
|
1086
1268
|
var GridSection = ({
|
|
1087
1269
|
children,
|
|
1088
1270
|
isLast = false,
|
|
1089
1271
|
className = "py-8 md:py-10"
|
|
1090
|
-
}) => /* @__PURE__ */
|
|
1272
|
+
}) => /* @__PURE__ */ import_react24.default.createElement("div", { className: `relative px-5 md:px-12 ${className} ${!isLast ? "border-b border-neutral-200" : ""}` }, children);
|
|
1091
1273
|
var ManagedProjectsBlock = ({
|
|
1092
1274
|
tagline,
|
|
1093
1275
|
title,
|
|
1094
1276
|
projects
|
|
1095
1277
|
}) => {
|
|
1096
|
-
return /* @__PURE__ */
|
|
1278
|
+
return /* @__PURE__ */ import_react24.default.createElement("div", { className: "grow pt-28 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react24.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-5xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react24.default.createElement(
|
|
1097
1279
|
"div",
|
|
1098
1280
|
{
|
|
1099
1281
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -1102,36 +1284,36 @@ var ManagedProjectsBlock = ({
|
|
|
1102
1284
|
backgroundRepeat: "repeat"
|
|
1103
1285
|
}
|
|
1104
1286
|
}
|
|
1105
|
-
), /* @__PURE__ */
|
|
1287
|
+
), /* @__PURE__ */ import_react24.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react24.default.createElement(GridSection, null, tagline && /* @__PURE__ */ import_react24.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 text-left block uppercase" }, tagline), /* @__PURE__ */ import_react24.default.createElement("h1", { className: " font-serif text-4xl md:text-5xl mt-4 text-black tracking-tight text-left" }, title)), projects.map((project, index) => {
|
|
1106
1288
|
const isLast = index === projects.length - 1;
|
|
1107
|
-
const projectContent = /* @__PURE__ */
|
|
1108
|
-
return /* @__PURE__ */
|
|
1289
|
+
const projectContent = /* @__PURE__ */ import_react24.default.createElement("div", { className: "group block w-full" }, /* @__PURE__ */ import_react24.default.createElement("div", { className: "flex flex-col md:flex-row md:items-center justify-between gap-3 md:gap-4 mb-4 md:mb-5" }, /* @__PURE__ */ import_react24.default.createElement("div", { className: "flex items-center gap-3 md:gap-4" }, /* @__PURE__ */ import_react24.default.createElement("h2", { className: " font-serif text-[16px] text-black transition-all flex items-center gap-2" }, project.title, /* @__PURE__ */ import_react24.default.createElement("span", { className: "text-[12px] opacity-0 -translate-x-2 group-hover:opacity-100 group-hover:translate-x-0 transition-all duration-300" }, project.isExternal ? "\u2197" : "\u2192")), /* @__PURE__ */ import_react24.default.createElement("span", { className: `text-[9px] px-2.5 py-1 rounded-full tracking-[0.15em] uppercase transition-colors ${project.status.toLowerCase() === "production" ? "bg-black text-white" : "bg-neutral-100 text-neutral-500 group-hover:bg-neutral-200 group-hover:text-black"}` }, project.status)), /* @__PURE__ */ import_react24.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-500 shrink-0 uppercase" }, project.date)), /* @__PURE__ */ import_react24.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 max-w-4xl text-left transition-colors group-hover:text-black" }, project.description));
|
|
1290
|
+
return /* @__PURE__ */ import_react24.default.createElement(GridSection, { key: project.id || index, isLast, className: isLast ? "py-8 md:py-10 pb-12 md:pb-14" : "py-8 md:py-10" }, project.isExternal ? /* @__PURE__ */ import_react24.default.createElement("a", { href: project.link, target: "_blank", rel: "noopener noreferrer", className: "block outline-none" }, projectContent) : /* @__PURE__ */ import_react24.default.createElement(import_link6.default, { href: project.link, className: "block outline-none" }, projectContent));
|
|
1109
1291
|
}))));
|
|
1110
1292
|
};
|
|
1111
1293
|
|
|
1112
1294
|
// src/components/ManagedNotFoundBlock.tsx
|
|
1113
|
-
var
|
|
1295
|
+
var import_react25 = __toESM(require("react"));
|
|
1114
1296
|
var ManagedNotFoundBlock = ({
|
|
1115
1297
|
title = "404 - Page Not Found",
|
|
1116
1298
|
description = "The page you are looking for does not exist or has been moved.",
|
|
1117
1299
|
backLinkText = "Go back to Homepage",
|
|
1118
1300
|
backLinkHref = "/"
|
|
1119
1301
|
}) => {
|
|
1120
|
-
return /* @__PURE__ */
|
|
1302
|
+
return /* @__PURE__ */ import_react25.default.createElement("main", { className: "min-h-screen flex items-center justify-center relative z-20 bg-transparent" }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "p-6 w-full max-w-md mx-auto text-center" }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "mb-8 flex justify-center" }, /* @__PURE__ */ import_react25.default.createElement(
|
|
1121
1303
|
"svg",
|
|
1122
1304
|
{
|
|
1123
1305
|
xmlns: "http://www.w3.org/2000/svg",
|
|
1124
1306
|
viewBox: "0 0 24 24",
|
|
1125
1307
|
className: "w-12 h-12 fill-neutral-200"
|
|
1126
1308
|
},
|
|
1127
|
-
/* @__PURE__ */
|
|
1128
|
-
)), /* @__PURE__ */
|
|
1309
|
+
/* @__PURE__ */ import_react25.default.createElement("path", { fillRule: "evenodd", d: "M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z", clipRule: "evenodd" })
|
|
1310
|
+
)), /* @__PURE__ */ import_react25.default.createElement("h1", { className: " font-serif text-xl md:text-3xl text-black tracking-tight mb-4" }, title), /* @__PURE__ */ import_react25.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-12" }, description)));
|
|
1129
1311
|
};
|
|
1130
1312
|
|
|
1131
1313
|
// src/components/PageSpinner.tsx
|
|
1132
|
-
var
|
|
1133
|
-
var
|
|
1134
|
-
var
|
|
1314
|
+
var import_react26 = __toESM(require("react"));
|
|
1315
|
+
var import_react27 = require("@hugeicons/react");
|
|
1316
|
+
var import_core_free_icons5 = require("@hugeicons/core-free-icons");
|
|
1135
1317
|
var PageSpinner = ({
|
|
1136
1318
|
className = "",
|
|
1137
1319
|
iconClassName = "text-black",
|
|
@@ -1139,10 +1321,10 @@ var PageSpinner = ({
|
|
|
1139
1321
|
}) => {
|
|
1140
1322
|
return (
|
|
1141
1323
|
// z-[100] ensures it sits above absolute headers and modals
|
|
1142
|
-
/* @__PURE__ */
|
|
1143
|
-
|
|
1324
|
+
/* @__PURE__ */ import_react26.default.createElement("div", { className: `fixed inset-0 z-100 flex flex-col items-center justify-center w-full h-full pointer-events-none ${className}` }, /* @__PURE__ */ import_react26.default.createElement(
|
|
1325
|
+
import_react27.HugeiconsIcon,
|
|
1144
1326
|
{
|
|
1145
|
-
icon:
|
|
1327
|
+
icon: import_core_free_icons5.Loading03Icon,
|
|
1146
1328
|
size,
|
|
1147
1329
|
className: `animate-spin mb-4 ${iconClassName}`
|
|
1148
1330
|
}
|
|
@@ -1151,10 +1333,10 @@ var PageSpinner = ({
|
|
|
1151
1333
|
};
|
|
1152
1334
|
|
|
1153
1335
|
// src/components/ManagedToaster.tsx
|
|
1154
|
-
var
|
|
1336
|
+
var import_react28 = __toESM(require("react"));
|
|
1155
1337
|
var import_react_hot_toast2 = require("react-hot-toast");
|
|
1156
1338
|
var ManagedToaster = () => {
|
|
1157
|
-
return /* @__PURE__ */
|
|
1339
|
+
return /* @__PURE__ */ import_react28.default.createElement(
|
|
1158
1340
|
import_react_hot_toast2.Toaster,
|
|
1159
1341
|
{
|
|
1160
1342
|
position: "top-right",
|
|
@@ -1186,8 +1368,8 @@ var ManagedToaster = () => {
|
|
|
1186
1368
|
};
|
|
1187
1369
|
|
|
1188
1370
|
// src/components/ManagedNewsletterSplitBlock.tsx
|
|
1189
|
-
var
|
|
1190
|
-
var
|
|
1371
|
+
var import_react29 = __toESM(require("react"));
|
|
1372
|
+
var import_image7 = __toESM(require("next/image"));
|
|
1191
1373
|
var ManagedNewsletterSplitBlock = ({
|
|
1192
1374
|
tagline,
|
|
1193
1375
|
title,
|
|
@@ -1200,8 +1382,8 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
1200
1382
|
ctaHref = "/contact-us",
|
|
1201
1383
|
children
|
|
1202
1384
|
}) => {
|
|
1203
|
-
return /* @__PURE__ */
|
|
1204
|
-
|
|
1385
|
+
return /* @__PURE__ */ import_react29.default.createElement("div", { className: "grow flex flex-col md:flex-row relative w-full pt-32 md:pt-0" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "hidden md:block md:w-1/2 relative min-h-screen overflow-hidden" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
1386
|
+
import_image7.default,
|
|
1205
1387
|
{
|
|
1206
1388
|
src: imageSrc,
|
|
1207
1389
|
alt: imageAlt,
|
|
@@ -1210,7 +1392,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
1210
1392
|
className: "object-cover object-top grayscale opacity-60",
|
|
1211
1393
|
quality: 100
|
|
1212
1394
|
}
|
|
1213
|
-
), /* @__PURE__ */
|
|
1395
|
+
), /* @__PURE__ */ import_react29.default.createElement(
|
|
1214
1396
|
"div",
|
|
1215
1397
|
{
|
|
1216
1398
|
className: "absolute inset-0 z-10 pointer-events-none",
|
|
@@ -1218,7 +1400,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
1218
1400
|
background: "linear-gradient(to right, rgba(255,255,255,0) 30%, #ffffff 100%)"
|
|
1219
1401
|
}
|
|
1220
1402
|
}
|
|
1221
|
-
), /* @__PURE__ */
|
|
1403
|
+
), /* @__PURE__ */ import_react29.default.createElement(
|
|
1222
1404
|
"div",
|
|
1223
1405
|
{
|
|
1224
1406
|
className: "absolute inset-x-0 bottom-0 h-40 z-10 pointer-events-none",
|
|
@@ -1226,7 +1408,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
1226
1408
|
background: "linear-gradient(to bottom, rgba(255,255,255,0) 0%, #ffffff 100%)"
|
|
1227
1409
|
}
|
|
1228
1410
|
}
|
|
1229
|
-
)), /* @__PURE__ */
|
|
1411
|
+
)), /* @__PURE__ */ import_react29.default.createElement("div", { className: "w-full md:w-1/2 flex mt-22 flex-col items-center justify-center p-4 md:p-12 relative z-20" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "relative w-full max-w-lg p-8 md:p-12 text-center md:text-left transition-all duration-700 ease-out" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
1230
1412
|
"div",
|
|
1231
1413
|
{
|
|
1232
1414
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -1235,7 +1417,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
1235
1417
|
backgroundRepeat: "repeat"
|
|
1236
1418
|
}
|
|
1237
1419
|
}
|
|
1238
|
-
), /* @__PURE__ */
|
|
1420
|
+
), /* @__PURE__ */ import_react29.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "mb-10 border-b border-neutral-200 pb-8 text-center md:text-left" }, tagline && /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 uppercase" }, tagline), /* @__PURE__ */ import_react29.default.createElement("h1", { className: " font-serif text-4xl md:text-5xl mt-4 text-black tracking-tight mb-4" }, title), subtitle && /* @__PURE__ */ import_react29.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 uppercase" }, subtitle)), /* @__PURE__ */ import_react29.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-10 text-center md:text-left" }, description), children && /* @__PURE__ */ import_react29.default.createElement("div", { className: "mb-8 text-left" }, children), /* @__PURE__ */ import_react29.default.createElement("div", { className: "text-center md:text-left mt-10 space-y-6" }, dividerText && /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "grow h-px bg-neutral-200" }), /* @__PURE__ */ import_react29.default.createElement("span", { className: "shrink mx-4 text-[10px] tracking-[0.2em] text-neutral-400 uppercase" }, dividerText), /* @__PURE__ */ import_react29.default.createElement("div", { className: "grow h-px bg-neutral-200" })), ctaText && ctaHref && /* @__PURE__ */ import_react29.default.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
1239
1421
|
ThreeDButton,
|
|
1240
1422
|
{
|
|
1241
1423
|
href: ctaHref,
|
|
@@ -1246,7 +1428,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
1246
1428
|
};
|
|
1247
1429
|
|
|
1248
1430
|
// src/components/ReusableInputs.tsx
|
|
1249
|
-
var
|
|
1431
|
+
var import_react30 = __toESM(require("react"));
|
|
1250
1432
|
var TextInput = ({
|
|
1251
1433
|
label,
|
|
1252
1434
|
value,
|
|
@@ -1257,7 +1439,7 @@ var TextInput = ({
|
|
|
1257
1439
|
readOnly,
|
|
1258
1440
|
type = "text",
|
|
1259
1441
|
onClick
|
|
1260
|
-
}) => /* @__PURE__ */
|
|
1442
|
+
}) => /* @__PURE__ */ import_react30.default.createElement("div", { className: "space-y-2 flex-1 w-full", onClick }, label && /* @__PURE__ */ import_react30.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, label), /* @__PURE__ */ import_react30.default.createElement(
|
|
1261
1443
|
"input",
|
|
1262
1444
|
{
|
|
1263
1445
|
type,
|
|
@@ -1278,7 +1460,7 @@ var NumberInput = ({
|
|
|
1278
1460
|
placeholder,
|
|
1279
1461
|
maxLength,
|
|
1280
1462
|
disabled
|
|
1281
|
-
}) => /* @__PURE__ */
|
|
1463
|
+
}) => /* @__PURE__ */ import_react30.default.createElement("div", { className: "space-y-2 flex-1 w-full" }, label && /* @__PURE__ */ import_react30.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, label), /* @__PURE__ */ import_react30.default.createElement(
|
|
1282
1464
|
"input",
|
|
1283
1465
|
{
|
|
1284
1466
|
type: "text",
|
|
@@ -1296,14 +1478,14 @@ var NumberInput = ({
|
|
|
1296
1478
|
));
|
|
1297
1479
|
|
|
1298
1480
|
// src/components/PortfolioHero.tsx
|
|
1299
|
-
var
|
|
1481
|
+
var import_react31 = __toESM(require("react"));
|
|
1300
1482
|
var import_link7 = __toESM(require("next/link"));
|
|
1301
|
-
var
|
|
1302
|
-
var
|
|
1303
|
-
var
|
|
1483
|
+
var import_image8 = __toESM(require("next/image"));
|
|
1484
|
+
var import_react32 = require("@hugeicons/react");
|
|
1485
|
+
var import_core_free_icons6 = require("@hugeicons/core-free-icons");
|
|
1304
1486
|
var useScrollAnimation = () => {
|
|
1305
|
-
const elementRef = (0,
|
|
1306
|
-
(0,
|
|
1487
|
+
const elementRef = (0, import_react31.useRef)(null);
|
|
1488
|
+
(0, import_react31.useEffect)(() => {
|
|
1307
1489
|
const el = elementRef.current;
|
|
1308
1490
|
if (!el) return;
|
|
1309
1491
|
const observer = new IntersectionObserver(
|
|
@@ -1339,14 +1521,14 @@ var PortfolioHero = ({
|
|
|
1339
1521
|
secondaryCtaHref
|
|
1340
1522
|
}) => {
|
|
1341
1523
|
const heroContentRef = useScrollAnimation();
|
|
1342
|
-
return /* @__PURE__ */
|
|
1524
|
+
return /* @__PURE__ */ import_react31.default.createElement("section", { className: "pt-44 md:pt-52 pb-16 px-6 md:px-12 flex flex-col relative overflow-hidden z-10 w-full" }, /* @__PURE__ */ import_react31.default.createElement(
|
|
1343
1525
|
"div",
|
|
1344
1526
|
{
|
|
1345
1527
|
ref: heroContentRef,
|
|
1346
1528
|
className: "w-full opacity-0 translate-y-5 transition-all duration-1000 ease-out relative z-10"
|
|
1347
1529
|
},
|
|
1348
|
-
/* @__PURE__ */
|
|
1349
|
-
|
|
1530
|
+
/* @__PURE__ */ import_react31.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-5 sm:gap-8 mb-10" }, /* @__PURE__ */ import_react31.default.createElement("div", { className: "relative w-20 h-20 sm:w-32 sm:h-32 rounded-full overflow-hidden border border-neutral-200 shrink-0 shadow-sm" }, /* @__PURE__ */ import_react31.default.createElement(
|
|
1531
|
+
import_image8.default,
|
|
1350
1532
|
{
|
|
1351
1533
|
src: imageSrc,
|
|
1352
1534
|
alt: imageAlt,
|
|
@@ -1356,7 +1538,7 @@ var PortfolioHero = ({
|
|
|
1356
1538
|
sizes: "(max-width: 640px) 80px, 128px",
|
|
1357
1539
|
quality: 100
|
|
1358
1540
|
}
|
|
1359
|
-
)), /* @__PURE__ */
|
|
1541
|
+
)), /* @__PURE__ */ import_react31.default.createElement("div", { className: "flex flex-col text-left" }, /* @__PURE__ */ import_react31.default.createElement("h1", { className: " font-serif text-3xl sm:text-5xl lg:text-6xl tracking-tight text-black leading-none mb-3" }, name), socialLabel && /* @__PURE__ */ import_react31.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-500 uppercase" }, socialLabel), socialLinkText && socialLinkHref && /* @__PURE__ */ import_react31.default.createElement(
|
|
1360
1542
|
"a",
|
|
1361
1543
|
{
|
|
1362
1544
|
href: socialLinkHref,
|
|
@@ -1366,30 +1548,30 @@ var PortfolioHero = ({
|
|
|
1366
1548
|
},
|
|
1367
1549
|
socialLinkText
|
|
1368
1550
|
))),
|
|
1369
|
-
/* @__PURE__ */
|
|
1370
|
-
/* @__PURE__ */
|
|
1551
|
+
/* @__PURE__ */ import_react31.default.createElement("p", { className: "text-[13px] md:text-[16px] leading-[1.8] max-w-4xl mb-12 text-neutral-600" }, bio),
|
|
1552
|
+
/* @__PURE__ */ import_react31.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 w-full sm:w-auto" }, primaryCtaText && primaryCtaHref && /* @__PURE__ */ import_react31.default.createElement("div", { className: "w-full sm:w-auto *:w-full" }, /* @__PURE__ */ import_react31.default.createElement(
|
|
1371
1553
|
ThreeDButton,
|
|
1372
1554
|
{
|
|
1373
1555
|
href: primaryCtaHref,
|
|
1374
1556
|
className: "py-3 uppercase tracking-widest text-[11px]"
|
|
1375
1557
|
},
|
|
1376
1558
|
primaryCtaText
|
|
1377
|
-
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
1559
|
+
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react31.default.createElement(
|
|
1378
1560
|
import_link7.default,
|
|
1379
1561
|
{
|
|
1380
1562
|
href: secondaryCtaHref,
|
|
1381
1563
|
className: "w-full sm:w-auto inline-flex items-center justify-center gap-3 text-[11px] tracking-[0.2em] uppercase rounded-full px-8 py-3.5 bg-neutral-200 transition-colors text-black hover:bg-neutral-200 outline-none"
|
|
1382
1564
|
},
|
|
1383
1565
|
secondaryCtaText,
|
|
1384
|
-
/* @__PURE__ */
|
|
1566
|
+
/* @__PURE__ */ import_react31.default.createElement(import_react32.HugeiconsIcon, { icon: import_core_free_icons6.ArrowRight01Icon, size: 16 })
|
|
1385
1567
|
))
|
|
1386
1568
|
));
|
|
1387
1569
|
};
|
|
1388
1570
|
|
|
1389
1571
|
// src/components/ProductHero.tsx
|
|
1390
|
-
var
|
|
1572
|
+
var import_react33 = __toESM(require("react"));
|
|
1391
1573
|
var import_link8 = __toESM(require("next/link"));
|
|
1392
|
-
var
|
|
1574
|
+
var import_image9 = __toESM(require("next/image"));
|
|
1393
1575
|
var ProductHero = ({
|
|
1394
1576
|
badgeText,
|
|
1395
1577
|
titlePrefix,
|
|
@@ -1401,14 +1583,14 @@ var ProductHero = ({
|
|
|
1401
1583
|
secondaryCtaHref,
|
|
1402
1584
|
images
|
|
1403
1585
|
}) => {
|
|
1404
|
-
const [currentIndex, setCurrentIndex] = (0,
|
|
1405
|
-
const nextSlide = (0,
|
|
1586
|
+
const [currentIndex, setCurrentIndex] = (0, import_react33.useState)(0);
|
|
1587
|
+
const nextSlide = (0, import_react33.useCallback)(() => {
|
|
1406
1588
|
setCurrentIndex((prev) => (prev + 1) % images.length);
|
|
1407
1589
|
}, [images.length]);
|
|
1408
|
-
const prevSlide = (0,
|
|
1590
|
+
const prevSlide = (0, import_react33.useCallback)(() => {
|
|
1409
1591
|
setCurrentIndex((prev) => (prev - 1 + images.length) % images.length);
|
|
1410
1592
|
}, [images.length]);
|
|
1411
|
-
(0,
|
|
1593
|
+
(0, import_react33.useEffect)(() => {
|
|
1412
1594
|
const timer = setInterval(() => {
|
|
1413
1595
|
nextSlide();
|
|
1414
1596
|
}, 5e3);
|
|
@@ -1427,12 +1609,12 @@ var ProductHero = ({
|
|
|
1427
1609
|
}
|
|
1428
1610
|
return "opacity-0 z-0 scale-75 pointer-events-none";
|
|
1429
1611
|
};
|
|
1430
|
-
return /* @__PURE__ */
|
|
1612
|
+
return /* @__PURE__ */ import_react33.default.createElement("section", { className: "relative pt-32 sm:pt-40 pb-0 flex flex-col items-center overflow-hidden w-full bg-[#f5f5f5]" }, /* @__PURE__ */ import_react33.default.createElement(
|
|
1431
1613
|
"div",
|
|
1432
1614
|
{
|
|
1433
1615
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 bg-linear-to-b from-white via-white to-[#f5f5f5]"
|
|
1434
1616
|
}
|
|
1435
|
-
), /* @__PURE__ */
|
|
1617
|
+
), /* @__PURE__ */ import_react33.default.createElement(
|
|
1436
1618
|
"div",
|
|
1437
1619
|
{
|
|
1438
1620
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.3] mix-blend-overlay",
|
|
@@ -1440,14 +1622,14 @@ var ProductHero = ({
|
|
|
1440
1622
|
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")`
|
|
1441
1623
|
}
|
|
1442
1624
|
}
|
|
1443
|
-
), /* @__PURE__ */
|
|
1625
|
+
), /* @__PURE__ */ import_react33.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_react33.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-200 backdrop-blur-md shadow-xs" }, /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-600 uppercase font-medium" }, badgeText)), /* @__PURE__ */ import_react33.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_react33.default.createElement("span", { className: "bg-linear-to-r from-[#043324] to-[#21a473] bg-clip-text text-transparent italic pr-2" }, highlightText)), subtitle && /* @__PURE__ */ import_react33.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_react33.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_react33.default.createElement("div", { className: "w-full sm:w-60 flex justify-center *:w-full" }, /* @__PURE__ */ import_react33.default.createElement(ThreeDButton, { href: ctaHref }, ctaText)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react33.default.createElement(
|
|
1444
1626
|
import_link8.default,
|
|
1445
1627
|
{
|
|
1446
1628
|
href: secondaryCtaHref,
|
|
1447
1629
|
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-200 transition-colors hover:bg-neutral-50 outline-none shadow-sm"
|
|
1448
1630
|
},
|
|
1449
1631
|
secondaryCtaText
|
|
1450
|
-
)), /* @__PURE__ */
|
|
1632
|
+
)), /* @__PURE__ */ import_react33.default.createElement("div", { className: "relative w-full max-w-4xl mx-auto px-2 sm:px-6 mt-8 z-20" }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "relative w-full aspect-4/3 md:aspect-video flex items-center justify-center" }, /* @__PURE__ */ import_react33.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_react33.default.createElement("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react33.default.createElement("path", { d: "M15 18l-6-6 6-6" }))), /* @__PURE__ */ import_react33.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_react33.default.createElement("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react33.default.createElement("path", { d: "M9 18l6-6-6-6" }))), images.map((src, idx) => /* @__PURE__ */ import_react33.default.createElement(
|
|
1451
1633
|
"div",
|
|
1452
1634
|
{
|
|
1453
1635
|
key: idx,
|
|
@@ -1456,8 +1638,8 @@ var ProductHero = ({
|
|
|
1456
1638
|
},
|
|
1457
1639
|
className: `absolute inset-0 transition-all duration-700 ease-out transform ${getCarouselClasses(idx)}`
|
|
1458
1640
|
},
|
|
1459
|
-
/* @__PURE__ */
|
|
1460
|
-
|
|
1641
|
+
/* @__PURE__ */ import_react33.default.createElement("div", { className: "relative w-full h-full rounded-2xl overflow-hidden shadow-xl" }, /* @__PURE__ */ import_react33.default.createElement(
|
|
1642
|
+
import_image9.default,
|
|
1461
1643
|
{
|
|
1462
1644
|
src,
|
|
1463
1645
|
alt: `Product Overview ${idx + 1}`,
|
|
@@ -1467,14 +1649,14 @@ var ProductHero = ({
|
|
|
1467
1649
|
priority: idx === 0
|
|
1468
1650
|
}
|
|
1469
1651
|
))
|
|
1470
|
-
)), /* @__PURE__ */
|
|
1652
|
+
)), /* @__PURE__ */ import_react33.default.createElement("div", { className: "absolute inset-x-0 bottom-0 h-1/3 sm:h-1/2 bg-linear-to-t from-[#f5f5f5] to-transparent z-40 pointer-events-none" })))));
|
|
1471
1653
|
};
|
|
1472
1654
|
|
|
1473
1655
|
// src/components/GifFeatureCard.tsx
|
|
1474
|
-
var
|
|
1475
|
-
var
|
|
1476
|
-
var
|
|
1477
|
-
var
|
|
1656
|
+
var import_react34 = __toESM(require("react"));
|
|
1657
|
+
var import_image10 = __toESM(require("next/image"));
|
|
1658
|
+
var import_react35 = require("@hugeicons/react");
|
|
1659
|
+
var import_core_free_icons7 = require("@hugeicons/core-free-icons");
|
|
1478
1660
|
var GifFeatureCard = ({
|
|
1479
1661
|
gifSrc,
|
|
1480
1662
|
title,
|
|
@@ -1482,21 +1664,21 @@ var GifFeatureCard = ({
|
|
|
1482
1664
|
alt = "Feature animation",
|
|
1483
1665
|
className = "aspect-video"
|
|
1484
1666
|
}) => {
|
|
1485
|
-
const [isLoading, setIsLoading] = (0,
|
|
1486
|
-
return /* @__PURE__ */
|
|
1487
|
-
|
|
1667
|
+
const [isLoading, setIsLoading] = (0, import_react34.useState)(true);
|
|
1668
|
+
return /* @__PURE__ */ import_react34.default.createElement("div", { className: `relative w-full bg-black overflow-hidden shadow-2xl ${className}` }, isLoading && /* @__PURE__ */ import_react34.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-black" }, /* @__PURE__ */ import_react34.default.createElement(
|
|
1669
|
+
import_react35.HugeiconsIcon,
|
|
1488
1670
|
{
|
|
1489
|
-
icon:
|
|
1671
|
+
icon: import_core_free_icons7.Loading03Icon,
|
|
1490
1672
|
size: 32,
|
|
1491
1673
|
className: "animate-spin text-white"
|
|
1492
1674
|
}
|
|
1493
|
-
)), /* @__PURE__ */
|
|
1675
|
+
)), /* @__PURE__ */ import_react34.default.createElement(
|
|
1494
1676
|
"div",
|
|
1495
1677
|
{
|
|
1496
1678
|
className: `absolute inset-0 z-0 transition-all duration-1000 ease-out ${isLoading ? "scale-105 blur-2xl opacity-0" : "scale-100 blur-0 opacity-100"}`
|
|
1497
1679
|
},
|
|
1498
|
-
/* @__PURE__ */
|
|
1499
|
-
|
|
1680
|
+
/* @__PURE__ */ import_react34.default.createElement(
|
|
1681
|
+
import_image10.default,
|
|
1500
1682
|
{
|
|
1501
1683
|
src: gifSrc,
|
|
1502
1684
|
alt,
|
|
@@ -1506,20 +1688,20 @@ var GifFeatureCard = ({
|
|
|
1506
1688
|
className: "object-cover object-center pointer-events-none"
|
|
1507
1689
|
}
|
|
1508
1690
|
)
|
|
1509
|
-
), /* @__PURE__ */
|
|
1691
|
+
), /* @__PURE__ */ import_react34.default.createElement(
|
|
1510
1692
|
"div",
|
|
1511
1693
|
{
|
|
1512
1694
|
className: "absolute inset-x-0 bottom-0 h-1/2 sm:h-2/3 bg-linear-to-t from-black/95 via-black/40 to-transparent z-10 pointer-events-none transition-opacity duration-700"
|
|
1513
1695
|
}
|
|
1514
|
-
), /* @__PURE__ */
|
|
1696
|
+
), /* @__PURE__ */ import_react34.default.createElement("div", { className: "absolute inset-x-0 bottom-0 p-6 sm:p-8 z-30 flex flex-col justify-end text-left pointer-events-none" }, title && /* @__PURE__ */ import_react34.default.createElement("h3", { className: " font-serif text-xl sm:text-2xl md:text-3xl font-medium text-white tracking-tight mb-2 sm:mb-3 drop-shadow-md" }, title), subtitle && /* @__PURE__ */ import_react34.default.createElement("p", { className: "text-[13px] sm:text-[15px] leading-relaxed text-neutral-300 max-w-2xl drop-shadow-sm" }, subtitle)));
|
|
1515
1697
|
};
|
|
1516
1698
|
|
|
1517
1699
|
// src/components/UniversalSidebar.tsx
|
|
1518
|
-
var
|
|
1700
|
+
var import_react36 = __toESM(require("react"));
|
|
1519
1701
|
var import_link9 = __toESM(require("next/link"));
|
|
1520
|
-
var
|
|
1521
|
-
var
|
|
1522
|
-
var ButtonSpinner = () => /* @__PURE__ */
|
|
1702
|
+
var import_react37 = require("@hugeicons/react");
|
|
1703
|
+
var import_core_free_icons8 = require("@hugeicons/core-free-icons");
|
|
1704
|
+
var ButtonSpinner = () => /* @__PURE__ */ import_react36.default.createElement("svg", { className: "animate-spin h-4 w-4 text-neutral-400", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24" }, /* @__PURE__ */ import_react36.default.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ import_react36.default.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" }));
|
|
1523
1705
|
var UniversalSidebar = ({
|
|
1524
1706
|
navItems,
|
|
1525
1707
|
currentPath,
|
|
@@ -1546,11 +1728,11 @@ var UniversalSidebar = ({
|
|
|
1546
1728
|
interceptTitle = "Discard Changes",
|
|
1547
1729
|
interceptMessage = "Are you sure you want to leave? All unsaved changes will be lost."
|
|
1548
1730
|
}) => {
|
|
1549
|
-
const [isCollapsed, setIsCollapsed] = (0,
|
|
1550
|
-
const [showSwitcherDialog, setShowSwitcherDialog] = (0,
|
|
1551
|
-
const [showLogoutDialog, setShowLogoutDialog] = (0,
|
|
1552
|
-
const [isLoggingOut, setIsLoggingOut] = (0,
|
|
1553
|
-
(0,
|
|
1731
|
+
const [isCollapsed, setIsCollapsed] = (0, import_react36.useState)(false);
|
|
1732
|
+
const [showSwitcherDialog, setShowSwitcherDialog] = (0, import_react36.useState)(false);
|
|
1733
|
+
const [showLogoutDialog, setShowLogoutDialog] = (0, import_react36.useState)(false);
|
|
1734
|
+
const [isLoggingOut, setIsLoggingOut] = (0, import_react36.useState)(false);
|
|
1735
|
+
(0, import_react36.useEffect)(() => {
|
|
1554
1736
|
if (isMobileOpen) {
|
|
1555
1737
|
closeMobile();
|
|
1556
1738
|
}
|
|
@@ -1568,37 +1750,37 @@ var UniversalSidebar = ({
|
|
|
1568
1750
|
setShowLogoutDialog(false);
|
|
1569
1751
|
}
|
|
1570
1752
|
};
|
|
1571
|
-
return /* @__PURE__ */
|
|
1753
|
+
return /* @__PURE__ */ import_react36.default.createElement(import_react36.default.Fragment, null, /* @__PURE__ */ import_react36.default.createElement("div", { className: "md:hidden fixed top-0 left-0 w-full h-16 bg-neutral-100 z-40 flex items-center justify-between px-4" }, /* @__PURE__ */ import_react36.default.createElement(
|
|
1572
1754
|
"button",
|
|
1573
1755
|
{
|
|
1574
1756
|
onClick: openMobile,
|
|
1575
1757
|
className: `w-10 h-10 bg-white rounded-full flex items-center justify-center text-black transition-all duration-300 outline-none ${isMobileOpen ? "opacity-0 pointer-events-none scale-90" : "opacity-100 scale-100"}`,
|
|
1576
1758
|
"aria-label": "Open Menu"
|
|
1577
1759
|
},
|
|
1578
|
-
/* @__PURE__ */
|
|
1579
|
-
), showBackButton && /* @__PURE__ */
|
|
1760
|
+
/* @__PURE__ */ import_react36.default.createElement(import_react37.HugeiconsIcon, { icon: import_core_free_icons8.SidebarLeft01Icon, size: 18 })
|
|
1761
|
+
), showBackButton && /* @__PURE__ */ import_react36.default.createElement(
|
|
1580
1762
|
import_link9.default,
|
|
1581
1763
|
{
|
|
1582
1764
|
href: backUrl,
|
|
1583
1765
|
className: "w-10 h-10 bg-white rounded-full flex items-center justify-center text-black hover:bg-neutral-50 transition-all duration-300 outline-none",
|
|
1584
1766
|
"aria-label": "Go Back"
|
|
1585
1767
|
},
|
|
1586
|
-
/* @__PURE__ */
|
|
1587
|
-
)), showBackButton && /* @__PURE__ */
|
|
1768
|
+
/* @__PURE__ */ import_react36.default.createElement(import_react37.HugeiconsIcon, { icon: import_core_free_icons8.ArrowLeft01Icon, size: 18 })
|
|
1769
|
+
)), showBackButton && /* @__PURE__ */ import_react36.default.createElement("div", { className: "hidden md:flex fixed top-0 right-0 w-full justify-end px-8 pt-6 pb-4 bg-neutral-100 z-40 pointer-events-none" }, /* @__PURE__ */ import_react36.default.createElement(
|
|
1588
1770
|
import_link9.default,
|
|
1589
1771
|
{
|
|
1590
1772
|
href: backUrl,
|
|
1591
1773
|
className: "w-10 h-10 bg-white rounded-full flex items-center justify-center text-black hover:bg-neutral-50 transition-all duration-300 outline-none pointer-events-auto",
|
|
1592
1774
|
"aria-label": "Go Back"
|
|
1593
1775
|
},
|
|
1594
|
-
/* @__PURE__ */
|
|
1595
|
-
)), /* @__PURE__ */
|
|
1776
|
+
/* @__PURE__ */ import_react36.default.createElement(import_react37.HugeiconsIcon, { icon: import_core_free_icons8.ArrowLeft01Icon, size: 18 })
|
|
1777
|
+
)), /* @__PURE__ */ import_react36.default.createElement(
|
|
1596
1778
|
"div",
|
|
1597
1779
|
{
|
|
1598
1780
|
className: `fixed inset-0 bg-black/30 shadow-2xl transition-opacity duration-300 md:hidden z-90 ${isMobileOpen ? "opacity-100 pointer-events-auto" : "opacity-0 pointer-events-none"}`,
|
|
1599
1781
|
onClick: closeMobile
|
|
1600
1782
|
}
|
|
1601
|
-
), /* @__PURE__ */
|
|
1783
|
+
), /* @__PURE__ */ import_react36.default.createElement(
|
|
1602
1784
|
"aside",
|
|
1603
1785
|
{
|
|
1604
1786
|
className: `
|
|
@@ -1608,19 +1790,19 @@ var UniversalSidebar = ({
|
|
|
1608
1790
|
${isCollapsed ? "md:w-16 w-64" : "w-64"}
|
|
1609
1791
|
`
|
|
1610
1792
|
},
|
|
1611
|
-
/* @__PURE__ */
|
|
1793
|
+
/* @__PURE__ */ import_react36.default.createElement("div", { className: `flex items-center shrink-0 p-5 ${isCollapsed && !isMobileOpen ? "justify-center min-h-18" : "justify-between"}` }, (!isCollapsed || isMobileOpen) && /* @__PURE__ */ import_react36.default.createElement(import_link9.default, { href: homeUrl, className: "flex flex-col justify-center outline-none group min-w-0 pr-2" }, /* @__PURE__ */ import_react36.default.createElement("span", { className: "text-[13px] text-black leading-none truncate tracking-wide mb-1 group-hover:opacity-70 transition-opacity" }, title), subtitle && /* @__PURE__ */ import_react36.default.createElement("span", { className: "text-[9px] text-neutral-500 truncate tracking-[0.2em] leading-none" }, subtitle)), /* @__PURE__ */ import_react36.default.createElement("div", { className: "md:hidden flex shrink-0" }, /* @__PURE__ */ import_react36.default.createElement(
|
|
1612
1794
|
"button",
|
|
1613
1795
|
{
|
|
1614
1796
|
onClick: closeMobile,
|
|
1615
1797
|
className: "text-neutral-400 hover:text-black transition-colors outline-none",
|
|
1616
1798
|
"aria-label": "Close Menu"
|
|
1617
1799
|
},
|
|
1618
|
-
/* @__PURE__ */
|
|
1800
|
+
/* @__PURE__ */ import_react36.default.createElement(import_react37.HugeiconsIcon, { icon: import_core_free_icons8.CancelCircleIcon, size: 24 })
|
|
1619
1801
|
))),
|
|
1620
|
-
/* @__PURE__ */
|
|
1802
|
+
/* @__PURE__ */ import_react36.default.createElement("nav", { className: "flex-1 py-2 flex flex-col gap-1.5 px-3 overflow-y-auto custom-scrollbar" }, navItems.map((item, index) => {
|
|
1621
1803
|
const isExactOrSubMatch = item.path === "/mod" || item.path === "/app" ? currentPath === item.path : currentPath === item.path || currentPath?.startsWith(`${item.path}/`);
|
|
1622
1804
|
const isCurrentRoute = isExactOrSubMatch || !hasActiveMatch && index === 0;
|
|
1623
|
-
return /* @__PURE__ */
|
|
1805
|
+
return /* @__PURE__ */ import_react36.default.createElement(
|
|
1624
1806
|
import_link9.default,
|
|
1625
1807
|
{
|
|
1626
1808
|
key: item.name,
|
|
@@ -1629,49 +1811,49 @@ var UniversalSidebar = ({
|
|
|
1629
1811
|
className: `flex items-center gap-3 px-3 py-2 rounded-full transition-all outline-none group shrink-0 ${isCurrentRoute ? "bg-neutral-100 text-black " : "text-neutral-500 hover:text-black hover:bg-neutral-50"}`,
|
|
1630
1812
|
title: isCollapsed && !isMobileOpen ? item.name : void 0
|
|
1631
1813
|
},
|
|
1632
|
-
/* @__PURE__ */
|
|
1633
|
-
|
|
1814
|
+
/* @__PURE__ */ import_react36.default.createElement(
|
|
1815
|
+
import_react37.HugeiconsIcon,
|
|
1634
1816
|
{
|
|
1635
1817
|
icon: item.icon,
|
|
1636
1818
|
size: 18,
|
|
1637
1819
|
className: `shrink-0 transition-colors ${isCurrentRoute ? "text-black" : "text-neutral-400 group-hover:text-black"}`
|
|
1638
1820
|
}
|
|
1639
1821
|
),
|
|
1640
|
-
(!isCollapsed || isMobileOpen) && /* @__PURE__ */
|
|
1822
|
+
(!isCollapsed || isMobileOpen) && /* @__PURE__ */ import_react36.default.createElement("span", { className: "text-xs tracking-wide truncate" }, item.name)
|
|
1641
1823
|
);
|
|
1642
1824
|
})),
|
|
1643
|
-
/* @__PURE__ */
|
|
1825
|
+
/* @__PURE__ */ import_react36.default.createElement("div", { className: "p-4 shrink-0 flex flex-col gap-2 " }, (showWorkspaceSwitcher || showLogoutAction) && /* @__PURE__ */ import_react36.default.createElement("div", { className: `flex gap-2 px-1 pb-2 ${isCollapsed && !isMobileOpen ? "flex-col items-center" : "items-center"}` }, showWorkspaceSwitcher && workspaces && workspaces.length > 0 && /* @__PURE__ */ import_react36.default.createElement(
|
|
1644
1826
|
"button",
|
|
1645
1827
|
{
|
|
1646
1828
|
onClick: () => setShowSwitcherDialog(true),
|
|
1647
1829
|
className: "w-8 h-8 shrink-0 rounded-full bg-neutral-50 flex items-center justify-center text-neutral-500 hover:text-black hover:bg-neutral-100 transition-all outline-none",
|
|
1648
1830
|
title: "Switch Workspace"
|
|
1649
1831
|
},
|
|
1650
|
-
/* @__PURE__ */
|
|
1651
|
-
), showLogoutAction && /* @__PURE__ */
|
|
1832
|
+
/* @__PURE__ */ import_react36.default.createElement(import_react37.HugeiconsIcon, { icon: import_core_free_icons8.UserIcon, size: 16 })
|
|
1833
|
+
), showLogoutAction && /* @__PURE__ */ import_react36.default.createElement(
|
|
1652
1834
|
"button",
|
|
1653
1835
|
{
|
|
1654
1836
|
onClick: () => setShowLogoutDialog(true),
|
|
1655
1837
|
className: "w-8 h-8 shrink-0 rounded-full bg-neutral-50 flex items-center justify-center text-neutral-500 hover:text-black hover:bg-neutral-100 transition-all outline-none",
|
|
1656
1838
|
title: "Secure Logout"
|
|
1657
1839
|
},
|
|
1658
|
-
/* @__PURE__ */
|
|
1659
|
-
)), /* @__PURE__ */
|
|
1840
|
+
/* @__PURE__ */ import_react36.default.createElement(import_react37.HugeiconsIcon, { icon: import_core_free_icons8.LogoutCircle02Icon, size: 16 })
|
|
1841
|
+
)), /* @__PURE__ */ import_react36.default.createElement("div", { className: "hidden md:block" }, /* @__PURE__ */ import_react36.default.createElement(
|
|
1660
1842
|
"button",
|
|
1661
1843
|
{
|
|
1662
1844
|
onClick: () => setIsCollapsed(!isCollapsed),
|
|
1663
1845
|
className: "flex items-center justify-center md:justify-start gap-3 w-full p-2.5 rounded-full text-neutral-500 hover:text-black hover:bg-neutral-50 transition-colors outline-none"
|
|
1664
1846
|
},
|
|
1665
|
-
/* @__PURE__ */
|
|
1666
|
-
!isCollapsed && /* @__PURE__ */
|
|
1847
|
+
/* @__PURE__ */ import_react36.default.createElement(import_react37.HugeiconsIcon, { icon: import_core_free_icons8.SidebarLeft01Icon, size: 18, className: "shrink-0 text-neutral-400" }),
|
|
1848
|
+
!isCollapsed && /* @__PURE__ */ import_react36.default.createElement("span", { className: "text-xs" }, "Collapse")
|
|
1667
1849
|
)))
|
|
1668
|
-
), showSwitcherDialog && showWorkspaceSwitcher && workspaces && workspaces.length > 0 && /* @__PURE__ */
|
|
1850
|
+
), showSwitcherDialog && showWorkspaceSwitcher && workspaces && workspaces.length > 0 && /* @__PURE__ */ import_react36.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react36.default.createElement(
|
|
1669
1851
|
"div",
|
|
1670
1852
|
{
|
|
1671
1853
|
className: "absolute inset-0 bg-black/30",
|
|
1672
1854
|
onClick: () => setShowSwitcherDialog(false)
|
|
1673
1855
|
}
|
|
1674
|
-
), /* @__PURE__ */
|
|
1856
|
+
), /* @__PURE__ */ import_react36.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react36.default.createElement("div", { className: "p-5 text-center w-full" }, /* @__PURE__ */ import_react36.default.createElement("h3", { className: " font-serif text-[17px] text-black tracking-tight mb-1" }, "Switch Workspace"), /* @__PURE__ */ import_react36.default.createElement("p", { className: "text-[11px] text-neutral-500 leading-snug" }, "Select an organization to switch your current context.")), /* @__PURE__ */ import_react36.default.createElement("div", { className: "max-h-75 overflow-y-auto w-full custom-scrollbar" }, workspaces.map((org) => /* @__PURE__ */ import_react36.default.createElement(
|
|
1675
1857
|
"button",
|
|
1676
1858
|
{
|
|
1677
1859
|
key: org.id,
|
|
@@ -1681,22 +1863,22 @@ var UniversalSidebar = ({
|
|
|
1681
1863
|
},
|
|
1682
1864
|
className: "w-full text-left px-5 py-4 flex items-center justify-between hover:bg-neutral-50 transition-colors group outline-none last:border-0"
|
|
1683
1865
|
},
|
|
1684
|
-
/* @__PURE__ */
|
|
1685
|
-
activeWorkspaceId === org.id && /* @__PURE__ */
|
|
1686
|
-
))), /* @__PURE__ */
|
|
1866
|
+
/* @__PURE__ */ import_react36.default.createElement("div", { className: "flex flex-col truncate pr-4" }, /* @__PURE__ */ import_react36.default.createElement("span", { className: `text-[13px] truncate ${activeWorkspaceId === org.id ? "text-black" : "text-neutral-600 group-hover:text-black"}` }, org.name), /* @__PURE__ */ import_react36.default.createElement("span", { className: "text-[9px] text-neutral-400 tracking-[0.2em] mt-1" }, "Role: ", org.role)),
|
|
1867
|
+
activeWorkspaceId === org.id && /* @__PURE__ */ import_react36.default.createElement(import_react37.HugeiconsIcon, { icon: import_core_free_icons8.CheckmarkCircle01Icon, size: 16, className: "text-black shrink-0" })
|
|
1868
|
+
))), /* @__PURE__ */ import_react36.default.createElement("div", { className: "w-full flex mt-auto" }, /* @__PURE__ */ import_react36.default.createElement(
|
|
1687
1869
|
"button",
|
|
1688
1870
|
{
|
|
1689
1871
|
onClick: () => setShowSwitcherDialog(false),
|
|
1690
1872
|
className: "w-full py-2.5 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors outline-none"
|
|
1691
1873
|
},
|
|
1692
1874
|
"Cancel"
|
|
1693
|
-
)))), showLogoutDialog && showLogoutAction && /* @__PURE__ */
|
|
1875
|
+
)))), showLogoutDialog && showLogoutAction && /* @__PURE__ */ import_react36.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react36.default.createElement(
|
|
1694
1876
|
"div",
|
|
1695
1877
|
{
|
|
1696
1878
|
className: "absolute inset-0 bg-black/30",
|
|
1697
1879
|
onClick: () => !isLoggingOut && setShowLogoutDialog(false)
|
|
1698
1880
|
}
|
|
1699
|
-
), /* @__PURE__ */
|
|
1881
|
+
), /* @__PURE__ */ import_react36.default.createElement("div", { className: "relative w-72 bg-white rounded-2xl flex flex-col items-center overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react36.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react36.default.createElement("h3", { className: " font-serif text-[17px] text-black tracking-tight mb-1" }, "Secure Logout"), /* @__PURE__ */ import_react36.default.createElement("p", { className: "text-[12px] text-neutral-500 leading-snug mt-2" }, "Are you sure you want to log out? You will need to authenticate to return.")), /* @__PURE__ */ import_react36.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react36.default.createElement(
|
|
1700
1882
|
"button",
|
|
1701
1883
|
{
|
|
1702
1884
|
onClick: () => setShowLogoutDialog(false),
|
|
@@ -1704,28 +1886,28 @@ var UniversalSidebar = ({
|
|
|
1704
1886
|
className: "flex-1 py-2 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none"
|
|
1705
1887
|
},
|
|
1706
1888
|
"Cancel"
|
|
1707
|
-
), /* @__PURE__ */
|
|
1889
|
+
), /* @__PURE__ */ import_react36.default.createElement(
|
|
1708
1890
|
"button",
|
|
1709
1891
|
{
|
|
1710
1892
|
onClick: handleLogoutInitiation,
|
|
1711
1893
|
disabled: isLoggingOut,
|
|
1712
1894
|
className: "flex-1 py-2 text-[13px] text-[#F16A50] hover:bg-neutral-50 transition-colors disabled:opacity-50 flex justify-center items-center outline-none"
|
|
1713
1895
|
},
|
|
1714
|
-
isLoggingOut ? /* @__PURE__ */
|
|
1715
|
-
)))), showInterceptDialog && /* @__PURE__ */
|
|
1896
|
+
isLoggingOut ? /* @__PURE__ */ import_react36.default.createElement(ButtonSpinner, null) : "Log Out"
|
|
1897
|
+
)))), showInterceptDialog && /* @__PURE__ */ import_react36.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react36.default.createElement(
|
|
1716
1898
|
"div",
|
|
1717
1899
|
{
|
|
1718
1900
|
className: "absolute inset-0 bg-black/30",
|
|
1719
1901
|
onClick: onCancelIntercept
|
|
1720
1902
|
}
|
|
1721
|
-
), /* @__PURE__ */
|
|
1903
|
+
), /* @__PURE__ */ import_react36.default.createElement("div", { className: "relative w-72 bg-white rounded-2xl flex flex-col items-center overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react36.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react36.default.createElement("h3", { className: " font-serif text-[17px] text-black tracking-tight mb-1" }, interceptTitle), /* @__PURE__ */ import_react36.default.createElement("p", { className: "text-[12px] text-neutral-500 leading-snug mt-2" }, interceptMessage)), /* @__PURE__ */ import_react36.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react36.default.createElement(
|
|
1722
1904
|
"button",
|
|
1723
1905
|
{
|
|
1724
1906
|
onClick: onCancelIntercept,
|
|
1725
1907
|
className: "flex-1 py-2 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors outline-none"
|
|
1726
1908
|
},
|
|
1727
1909
|
"Cancel"
|
|
1728
|
-
), /* @__PURE__ */
|
|
1910
|
+
), /* @__PURE__ */ import_react36.default.createElement(
|
|
1729
1911
|
"button",
|
|
1730
1912
|
{
|
|
1731
1913
|
onClick: onConfirmIntercept,
|
|
@@ -1736,11 +1918,11 @@ var UniversalSidebar = ({
|
|
|
1736
1918
|
};
|
|
1737
1919
|
|
|
1738
1920
|
// src/components/UniversalOrganizationPage.tsx
|
|
1739
|
-
var
|
|
1921
|
+
var import_react38 = __toESM(require("react"));
|
|
1740
1922
|
var import_react_hot_toast3 = __toESM(require("react-hot-toast"));
|
|
1741
|
-
var
|
|
1742
|
-
var
|
|
1743
|
-
var InputSpinner2 = () => /* @__PURE__ */
|
|
1923
|
+
var import_react39 = require("@hugeicons/react");
|
|
1924
|
+
var import_core_free_icons9 = require("@hugeicons/core-free-icons");
|
|
1925
|
+
var InputSpinner2 = () => /* @__PURE__ */ import_react38.default.createElement("svg", { className: "animate-spin h-4 w-4 text-neutral-400", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24" }, /* @__PURE__ */ import_react38.default.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ import_react38.default.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" }));
|
|
1744
1926
|
var UniversalOrganizationPage = ({
|
|
1745
1927
|
initialOrgName,
|
|
1746
1928
|
initialSlug,
|
|
@@ -1750,12 +1932,12 @@ var UniversalOrganizationPage = ({
|
|
|
1750
1932
|
onSaveConfiguration,
|
|
1751
1933
|
onCheckSlugAvailability
|
|
1752
1934
|
}) => {
|
|
1753
|
-
const [orgName, setOrgName] = (0,
|
|
1754
|
-
const [slug, setSlug] = (0,
|
|
1755
|
-
const [isCheckingSlug, setIsCheckingSlug] = (0,
|
|
1756
|
-
const [slugAvailable, setSlugAvailable] = (0,
|
|
1757
|
-
const [isSubmitting, setIsSubmitting] = (0,
|
|
1758
|
-
(0,
|
|
1935
|
+
const [orgName, setOrgName] = (0, import_react38.useState)(initialOrgName);
|
|
1936
|
+
const [slug, setSlug] = (0, import_react38.useState)(initialSlug);
|
|
1937
|
+
const [isCheckingSlug, setIsCheckingSlug] = (0, import_react38.useState)(false);
|
|
1938
|
+
const [slugAvailable, setSlugAvailable] = (0, import_react38.useState)(null);
|
|
1939
|
+
const [isSubmitting, setIsSubmitting] = (0, import_react38.useState)(false);
|
|
1940
|
+
(0, import_react38.useEffect)(() => {
|
|
1759
1941
|
setOrgName(initialOrgName || "");
|
|
1760
1942
|
setSlug(initialSlug || "");
|
|
1761
1943
|
}, [initialOrgName, initialSlug]);
|
|
@@ -1765,7 +1947,7 @@ var UniversalOrganizationPage = ({
|
|
|
1765
1947
|
const handleSlugChange = (val) => {
|
|
1766
1948
|
setSlug(val.toLowerCase().replace(/[^a-z0-9-]/g, "").replace(/-+/g, "-").substring(0, 50));
|
|
1767
1949
|
};
|
|
1768
|
-
(0,
|
|
1950
|
+
(0, import_react38.useEffect)(() => {
|
|
1769
1951
|
if (!slug || slug === initialSlug) {
|
|
1770
1952
|
setSlugAvailable(null);
|
|
1771
1953
|
setIsCheckingSlug(false);
|
|
@@ -1819,7 +2001,7 @@ var UniversalOrganizationPage = ({
|
|
|
1819
2001
|
};
|
|
1820
2002
|
const hasChanges = orgName !== initialOrgName || slug !== initialSlug;
|
|
1821
2003
|
const isSaveDisabled = isSubmitting || isReadOnly || isCheckingSlug || !hasChanges || orgName.length < 3 || slug.length < 3 || slug !== initialSlug && slugAvailable === false;
|
|
1822
|
-
return /* @__PURE__ */
|
|
2004
|
+
return /* @__PURE__ */ import_react38.default.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl rounded-2xl p-6 bg-white fade-in duration-300 " }, /* @__PURE__ */ import_react38.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react38.default.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react38.default.createElement("div", null, /* @__PURE__ */ import_react38.default.createElement("h1", { className: " font-serif text-xl text-black mb-1 tracking-tight" }, "Organization"), /* @__PURE__ */ import_react38.default.createElement("p", { className: "text-xs text-neutral-500" }, "Manage your tenant workspace details and identity.")), isReadOnly && /* @__PURE__ */ import_react38.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full " }, /* @__PURE__ */ import_react38.default.createElement(import_react39.HugeiconsIcon, { icon: import_core_free_icons9.CircleLock02Icon, size: 18, className: "text-current" }))), /* @__PURE__ */ import_react38.default.createElement("div", { className: "w-full max-w-2xl" }, /* @__PURE__ */ import_react38.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ import_react38.default.createElement(
|
|
1823
2005
|
TextInput,
|
|
1824
2006
|
{
|
|
1825
2007
|
label: "Organization Name",
|
|
@@ -1829,7 +2011,7 @@ var UniversalOrganizationPage = ({
|
|
|
1829
2011
|
placeholder: "Acme Corporation",
|
|
1830
2012
|
maxLength: 50
|
|
1831
2013
|
}
|
|
1832
|
-
), /* @__PURE__ */
|
|
2014
|
+
), /* @__PURE__ */ import_react38.default.createElement("div", { className: "space-y-2 relative w-full" }, /* @__PURE__ */ import_react38.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, "Organization Slug"), /* @__PURE__ */ import_react38.default.createElement("div", { className: "flex items-center relative w-full" }, /* @__PURE__ */ import_react38.default.createElement("span", { className: "text-neutral-400 text-sm py-3 pr-2 border-b border-neutral-200 shrink-0" }, slugPrefixUrl), /* @__PURE__ */ import_react38.default.createElement(
|
|
1833
2015
|
"input",
|
|
1834
2016
|
{
|
|
1835
2017
|
type: "text",
|
|
@@ -1841,7 +2023,7 @@ var UniversalOrganizationPage = ({
|
|
|
1841
2023
|
className: "w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-200 text-black transition-all outline-none focus:border-black pr-8 disabled:opacity-50 disabled:cursor-not-allowed",
|
|
1842
2024
|
placeholder: "acme-corp"
|
|
1843
2025
|
}
|
|
1844
|
-
), /* @__PURE__ */
|
|
2026
|
+
), /* @__PURE__ */ import_react38.default.createElement("div", { className: "absolute right-2 top-1/2 -translate-y-1/2" }, isCheckingSlug && /* @__PURE__ */ import_react38.default.createElement(InputSpinner2, null), !isCheckingSlug && !isReadOnly && slug !== initialSlug && slug.length >= 3 && slugAvailable === false && /* @__PURE__ */ import_react38.default.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-red-100" }, /* @__PURE__ */ import_react38.default.createElement("svg", { className: "w-2 h-2 text-red-600", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ import_react38.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_react38.default.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-green-100" }, /* @__PURE__ */ import_react38.default.createElement("svg", { className: "w-2 h-2 text-green-600", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ import_react38.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_react38.default.createElement("div", { className: "pt-8 mt-2 flex items-center gap-4" }, /* @__PURE__ */ import_react38.default.createElement(
|
|
1845
2027
|
ThreeDActionButton,
|
|
1846
2028
|
{
|
|
1847
2029
|
type: "submit",
|
|
@@ -1850,7 +2032,7 @@ var UniversalOrganizationPage = ({
|
|
|
1850
2032
|
className: "min-w-32"
|
|
1851
2033
|
},
|
|
1852
2034
|
"Save Changes"
|
|
1853
|
-
), hasChanges && !isSubmitting && !isReadOnly && /* @__PURE__ */
|
|
2035
|
+
), hasChanges && !isSubmitting && !isReadOnly && /* @__PURE__ */ import_react38.default.createElement(
|
|
1854
2036
|
"button",
|
|
1855
2037
|
{
|
|
1856
2038
|
type: "button",
|
|
@@ -1865,11 +2047,11 @@ var UniversalOrganizationPage = ({
|
|
|
1865
2047
|
};
|
|
1866
2048
|
|
|
1867
2049
|
// src/components/UniversalIdentityPage.tsx
|
|
1868
|
-
var
|
|
2050
|
+
var import_react40 = __toESM(require("react"));
|
|
1869
2051
|
var import_react_hot_toast4 = __toESM(require("react-hot-toast"));
|
|
1870
|
-
var
|
|
1871
|
-
var
|
|
1872
|
-
var ButtonSpinner2 = () => /* @__PURE__ */
|
|
2052
|
+
var import_react41 = require("@hugeicons/react");
|
|
2053
|
+
var import_core_free_icons10 = require("@hugeicons/core-free-icons");
|
|
2054
|
+
var ButtonSpinner2 = () => /* @__PURE__ */ import_react40.default.createElement("svg", { className: "animate-spin h-4 w-4 text-neutral-400", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24" }, /* @__PURE__ */ import_react40.default.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ import_react40.default.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" }));
|
|
1873
2055
|
var UniversalIdentityPage = ({
|
|
1874
2056
|
headerTitle,
|
|
1875
2057
|
headerDescription,
|
|
@@ -1885,12 +2067,12 @@ var UniversalIdentityPage = ({
|
|
|
1885
2067
|
onDeleteResource,
|
|
1886
2068
|
onSuccessfulDeleteRedirect = "/app"
|
|
1887
2069
|
}) => {
|
|
1888
|
-
const [primaryValue, setPrimaryValue] = (0,
|
|
1889
|
-
const [secondaryValue, setSecondaryValue] = (0,
|
|
1890
|
-
const [isSubmitting, setIsSubmitting] = (0,
|
|
1891
|
-
const [isDeleteModalOpen, setIsDeleteModalOpen] = (0,
|
|
1892
|
-
const [isDeleting, setIsDeleting] = (0,
|
|
1893
|
-
(0,
|
|
2070
|
+
const [primaryValue, setPrimaryValue] = (0, import_react40.useState)(initialPrimaryValue);
|
|
2071
|
+
const [secondaryValue, setSecondaryValue] = (0, import_react40.useState)(initialSecondaryValue);
|
|
2072
|
+
const [isSubmitting, setIsSubmitting] = (0, import_react40.useState)(false);
|
|
2073
|
+
const [isDeleteModalOpen, setIsDeleteModalOpen] = (0, import_react40.useState)(false);
|
|
2074
|
+
const [isDeleting, setIsDeleting] = (0, import_react40.useState)(false);
|
|
2075
|
+
(0, import_react40.useEffect)(() => {
|
|
1894
2076
|
setPrimaryValue(initialPrimaryValue || "");
|
|
1895
2077
|
setSecondaryValue(initialSecondaryValue || "");
|
|
1896
2078
|
}, [initialPrimaryValue, initialSecondaryValue]);
|
|
@@ -1941,7 +2123,7 @@ var UniversalIdentityPage = ({
|
|
|
1941
2123
|
};
|
|
1942
2124
|
const hasChanges = primaryValue !== initialPrimaryValue || secondaryValue !== initialSecondaryValue;
|
|
1943
2125
|
const isSaveDisabled = isSubmitting || isReadOnly || !hasChanges || primaryValue.trim().length < 3;
|
|
1944
|
-
return /* @__PURE__ */
|
|
2126
|
+
return /* @__PURE__ */ import_react40.default.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl rounded-2xl p-6 bg-white fade-in duration-300 " }, /* @__PURE__ */ import_react40.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react40.default.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react40.default.createElement("div", null, /* @__PURE__ */ import_react40.default.createElement("h1", { className: " font-serif text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ import_react40.default.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription)), isReadOnly && /* @__PURE__ */ import_react40.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full " }, /* @__PURE__ */ import_react40.default.createElement(import_react41.HugeiconsIcon, { icon: import_core_free_icons10.CircleLock02Icon, size: 18, className: "text-current" }))), /* @__PURE__ */ import_react40.default.createElement("div", { className: "w-full max-w-2xl" }, /* @__PURE__ */ import_react40.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ import_react40.default.createElement(
|
|
1945
2127
|
TextInput,
|
|
1946
2128
|
{
|
|
1947
2129
|
label: primaryInputLabel,
|
|
@@ -1950,7 +2132,7 @@ var UniversalIdentityPage = ({
|
|
|
1950
2132
|
disabled: isReadOnly || isSubmitting,
|
|
1951
2133
|
maxLength: 50
|
|
1952
2134
|
}
|
|
1953
|
-
), secondaryInputLabel && /* @__PURE__ */
|
|
2135
|
+
), secondaryInputLabel && /* @__PURE__ */ import_react40.default.createElement(
|
|
1954
2136
|
TextInput,
|
|
1955
2137
|
{
|
|
1956
2138
|
label: secondaryInputLabel,
|
|
@@ -1959,7 +2141,7 @@ var UniversalIdentityPage = ({
|
|
|
1959
2141
|
disabled: isReadOnly || isSubmitting,
|
|
1960
2142
|
maxLength: 150
|
|
1961
2143
|
}
|
|
1962
|
-
), !isReadOnly && /* @__PURE__ */
|
|
2144
|
+
), !isReadOnly && /* @__PURE__ */ import_react40.default.createElement("div", { className: "pt-8 mt-2 flex flex-col sm:flex-row sm:items-center justify-between gap-6" }, /* @__PURE__ */ import_react40.default.createElement("div", { className: "flex items-center gap-4 w-full sm:w-auto" }, /* @__PURE__ */ import_react40.default.createElement(
|
|
1963
2145
|
ThreeDActionButton,
|
|
1964
2146
|
{
|
|
1965
2147
|
type: "submit",
|
|
@@ -1968,7 +2150,7 @@ var UniversalIdentityPage = ({
|
|
|
1968
2150
|
className: "min-w-32 w-full sm:w-auto"
|
|
1969
2151
|
},
|
|
1970
2152
|
"Save Changes"
|
|
1971
|
-
), hasChanges && !isSubmitting && /* @__PURE__ */
|
|
2153
|
+
), hasChanges && !isSubmitting && /* @__PURE__ */ import_react40.default.createElement(
|
|
1972
2154
|
"button",
|
|
1973
2155
|
{
|
|
1974
2156
|
type: "button",
|
|
@@ -1979,7 +2161,7 @@ var UniversalIdentityPage = ({
|
|
|
1979
2161
|
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"
|
|
1980
2162
|
},
|
|
1981
2163
|
"Cancel"
|
|
1982
|
-
)), allowDeletion && /* @__PURE__ */
|
|
2164
|
+
)), allowDeletion && /* @__PURE__ */ import_react40.default.createElement(
|
|
1983
2165
|
"button",
|
|
1984
2166
|
{
|
|
1985
2167
|
type: "button",
|
|
@@ -1988,7 +2170,7 @@ var UniversalIdentityPage = ({
|
|
|
1988
2170
|
},
|
|
1989
2171
|
"Delete ",
|
|
1990
2172
|
headerTitle.split(" ")[0]
|
|
1991
|
-
)))), isDeleteModalOpen && !isReadOnly && allowDeletion && /* @__PURE__ */
|
|
2173
|
+
)))), isDeleteModalOpen && !isReadOnly && allowDeletion && /* @__PURE__ */ import_react40.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react40.default.createElement("div", { className: "absolute inset-0 bg-black/30 shadow-2xl", onClick: () => !isDeleting && setIsDeleteModalOpen(false) }), /* @__PURE__ */ import_react40.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_react40.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react40.default.createElement("h3", { className: " font-serif text-[17px] text-black tracking-tight mb-1" }, "Confirm Deletion"), /* @__PURE__ */ import_react40.default.createElement("p", { className: "text-[12px] text-neutral-500 leading-snug mt-2" }, deleteWarningText)), /* @__PURE__ */ import_react40.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react40.default.createElement(
|
|
1992
2174
|
"button",
|
|
1993
2175
|
{
|
|
1994
2176
|
type: "button",
|
|
@@ -1997,7 +2179,7 @@ var UniversalIdentityPage = ({
|
|
|
1997
2179
|
className: "flex-1 py-2 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none"
|
|
1998
2180
|
},
|
|
1999
2181
|
"Cancel"
|
|
2000
|
-
), /* @__PURE__ */
|
|
2182
|
+
), /* @__PURE__ */ import_react40.default.createElement(
|
|
2001
2183
|
"button",
|
|
2002
2184
|
{
|
|
2003
2185
|
type: "button",
|
|
@@ -2005,17 +2187,17 @@ var UniversalIdentityPage = ({
|
|
|
2005
2187
|
disabled: isDeleting,
|
|
2006
2188
|
className: "flex-1 py-2 text-[13px] text-red-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 flex justify-center items-center outline-none"
|
|
2007
2189
|
},
|
|
2008
|
-
isDeleting ? /* @__PURE__ */
|
|
2190
|
+
isDeleting ? /* @__PURE__ */ import_react40.default.createElement(ButtonSpinner2, null) : "Delete"
|
|
2009
2191
|
)))));
|
|
2010
2192
|
};
|
|
2011
2193
|
|
|
2012
2194
|
// src/components/UniversalMembersPage.tsx
|
|
2013
|
-
var
|
|
2195
|
+
var import_react42 = __toESM(require("react"));
|
|
2014
2196
|
var import_react_hot_toast5 = __toESM(require("react-hot-toast"));
|
|
2015
|
-
var
|
|
2016
|
-
var
|
|
2017
|
-
var ButtonSpinner3 = () => /* @__PURE__ */
|
|
2018
|
-
var PageSpinner2 = () => /* @__PURE__ */
|
|
2197
|
+
var import_react43 = require("@hugeicons/react");
|
|
2198
|
+
var import_core_free_icons11 = require("@hugeicons/core-free-icons");
|
|
2199
|
+
var ButtonSpinner3 = () => /* @__PURE__ */ import_react42.default.createElement(import_react43.HugeiconsIcon, { icon: import_core_free_icons11.Loading03Icon, size: 16, className: "animate-spin text-white" });
|
|
2200
|
+
var PageSpinner2 = () => /* @__PURE__ */ import_react42.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react42.default.createElement(import_react43.HugeiconsIcon, { icon: import_core_free_icons11.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
2019
2201
|
var getInitials = (name) => {
|
|
2020
2202
|
if (!name) return "U";
|
|
2021
2203
|
const parts = name.trim().split(" ");
|
|
@@ -2058,18 +2240,18 @@ var UniversalMembersPage = ({
|
|
|
2058
2240
|
onRemoveMember,
|
|
2059
2241
|
onUpdateRole
|
|
2060
2242
|
}) => {
|
|
2061
|
-
const [currentView, setCurrentView] = (0,
|
|
2062
|
-
const [selectedMember, setSelectedMember] = (0,
|
|
2063
|
-
const [inviteEmail, setInviteEmail] = (0,
|
|
2064
|
-
const [inviteFirst, setInviteFirst] = (0,
|
|
2065
|
-
const [inviteLast, setInviteLast] = (0,
|
|
2066
|
-
const [isInviting, setIsInviting] = (0,
|
|
2067
|
-
const [isRoleModalOpen, setIsRoleModalOpen] = (0,
|
|
2068
|
-
const [isUpdatingRole, setIsUpdatingRole] = (0,
|
|
2069
|
-
const [memberToDelete, setMemberToDelete] = (0,
|
|
2070
|
-
const [isDeleting, setIsDeleting] = (0,
|
|
2071
|
-
const dropdownRef = (0,
|
|
2072
|
-
(0,
|
|
2243
|
+
const [currentView, setCurrentView] = (0, import_react42.useState)("list");
|
|
2244
|
+
const [selectedMember, setSelectedMember] = (0, import_react42.useState)(null);
|
|
2245
|
+
const [inviteEmail, setInviteEmail] = (0, import_react42.useState)("");
|
|
2246
|
+
const [inviteFirst, setInviteFirst] = (0, import_react42.useState)("");
|
|
2247
|
+
const [inviteLast, setInviteLast] = (0, import_react42.useState)("");
|
|
2248
|
+
const [isInviting, setIsInviting] = (0, import_react42.useState)(false);
|
|
2249
|
+
const [isRoleModalOpen, setIsRoleModalOpen] = (0, import_react42.useState)(false);
|
|
2250
|
+
const [isUpdatingRole, setIsUpdatingRole] = (0, import_react42.useState)(false);
|
|
2251
|
+
const [memberToDelete, setMemberToDelete] = (0, import_react42.useState)(null);
|
|
2252
|
+
const [isDeleting, setIsDeleting] = (0, import_react42.useState)(false);
|
|
2253
|
+
const dropdownRef = (0, import_react42.useRef)(null);
|
|
2254
|
+
(0, import_react42.useEffect)(() => {
|
|
2073
2255
|
function handleClickOutside(event) {
|
|
2074
2256
|
if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
|
|
2075
2257
|
setIsRoleModalOpen(false);
|
|
@@ -2143,15 +2325,15 @@ var UniversalMembersPage = ({
|
|
|
2143
2325
|
setSelectedMember(null);
|
|
2144
2326
|
setIsRoleModalOpen(false);
|
|
2145
2327
|
};
|
|
2146
|
-
return /* @__PURE__ */
|
|
2328
|
+
return /* @__PURE__ */ import_react42.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_react42.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react42.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, currentView === "list" && /* @__PURE__ */ import_react42.default.createElement(import_react42.default.Fragment, null, /* @__PURE__ */ import_react42.default.createElement("div", null, /* @__PURE__ */ import_react42.default.createElement("h1", { className: " font-serif text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ import_react42.default.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription)), canManage && /* @__PURE__ */ import_react42.default.createElement(
|
|
2147
2329
|
ThreeDActionButton,
|
|
2148
2330
|
{
|
|
2149
2331
|
onClick: () => setCurrentView("invite"),
|
|
2150
2332
|
className: "w-fit shrink-0 gap-2"
|
|
2151
2333
|
},
|
|
2152
|
-
/* @__PURE__ */
|
|
2334
|
+
/* @__PURE__ */ import_react42.default.createElement(import_react43.HugeiconsIcon, { icon: import_core_free_icons11.UserAdd01Icon, size: 12 }),
|
|
2153
2335
|
"Add Member"
|
|
2154
|
-
)), currentView !== "list" && /* @__PURE__ */
|
|
2336
|
+
)), currentView !== "list" && /* @__PURE__ */ import_react42.default.createElement("div", { className: "flex flex-col items-start gap-3" }, /* @__PURE__ */ import_react42.default.createElement("button", { onClick: goBack, className: "text-[10px] text-neutral-400 hover:text-black tracking-[0.2em] flex items-center gap-1.5 transition-colors outline-none" }, /* @__PURE__ */ import_react42.default.createElement(import_react43.HugeiconsIcon, { icon: import_core_free_icons11.ArrowLeft01Icon, size: 12 }), " Back"), /* @__PURE__ */ import_react42.default.createElement("h1", { className: " font-serif text-lg text-black tracking-tight" }, currentView === "invite" ? "Add New Member" : "Member Profile"))), currentView === "list" && /* @__PURE__ */ import_react42.default.createElement("div", { className: "w-full overflow-hidden" }, isLoading ? /* @__PURE__ */ import_react42.default.createElement(PageSpinner2, null) : /* @__PURE__ */ import_react42.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react42.default.createElement("div", { className: "divide-y divide-neutral-100" }, members.map((member) => /* @__PURE__ */ import_react42.default.createElement(
|
|
2155
2337
|
"div",
|
|
2156
2338
|
{
|
|
2157
2339
|
key: member.id,
|
|
@@ -2161,7 +2343,7 @@ var UniversalMembersPage = ({
|
|
|
2161
2343
|
},
|
|
2162
2344
|
className: "flex items-center justify-between p-4 sm:p-5 hover:bg-neutral-50/50 transition-colors cursor-pointer group min-w-0"
|
|
2163
2345
|
},
|
|
2164
|
-
/* @__PURE__ */
|
|
2346
|
+
/* @__PURE__ */ import_react42.default.createElement("div", { className: "flex items-center gap-3 sm:gap-4 min-w-0 flex-1" }, member.displayImage && member.displayImage !== "NO_IMAGE" ? /* @__PURE__ */ import_react42.default.createElement("div", { className: "w-10 h-10 shrink-0 rounded-full overflow-hidden bg-neutral-100" }, /* @__PURE__ */ import_react42.default.createElement(
|
|
2165
2347
|
"img",
|
|
2166
2348
|
{
|
|
2167
2349
|
src: member.displayImage,
|
|
@@ -2169,25 +2351,25 @@ var UniversalMembersPage = ({
|
|
|
2169
2351
|
className: "w-full h-full object-cover blur-sm transition-all duration-300",
|
|
2170
2352
|
onLoad: (e) => e.currentTarget.classList.remove("blur-sm")
|
|
2171
2353
|
}
|
|
2172
|
-
)) : /* @__PURE__ */
|
|
2173
|
-
/* @__PURE__ */
|
|
2174
|
-
))), /* @__PURE__ */
|
|
2354
|
+
)) : /* @__PURE__ */ import_react42.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_react42.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react42.default.createElement("p", { className: "text-sm text-black truncate pr-2 sm:pr-4" }, member.fullName, " ", member.userId === currentUserId && /* @__PURE__ */ import_react42.default.createElement("span", { className: "text-neutral-400 ml-1 sm:ml-2" }, "(You)")), /* @__PURE__ */ import_react42.default.createElement("p", { className: "text-xs text-neutral-500 truncate pr-2 sm:pr-4 mt-0.5" }, member.email))),
|
|
2355
|
+
/* @__PURE__ */ import_react42.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_react42.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-black border border-neutral-200 px-4 py-2 rounded-full bg-white whitespace-nowrap" }, canManage ? "Manage" : "View"))
|
|
2356
|
+
))), /* @__PURE__ */ import_react42.default.createElement("div", { className: "flex items-center justify-between p-4 sm:p-5" }, /* @__PURE__ */ import_react42.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", totalPages), /* @__PURE__ */ import_react42.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react42.default.createElement(
|
|
2175
2357
|
"button",
|
|
2176
2358
|
{
|
|
2177
2359
|
onClick: () => onPageChange(currentPage - 1),
|
|
2178
2360
|
disabled: currentPage === 1 || isLoading,
|
|
2179
2361
|
className: "p-2 border border-neutral-200 rounded-full bg-white text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none"
|
|
2180
2362
|
},
|
|
2181
|
-
/* @__PURE__ */
|
|
2182
|
-
), /* @__PURE__ */
|
|
2363
|
+
/* @__PURE__ */ import_react42.default.createElement(import_react43.HugeiconsIcon, { icon: import_core_free_icons11.ArrowLeft01Icon, size: 14 })
|
|
2364
|
+
), /* @__PURE__ */ import_react42.default.createElement(
|
|
2183
2365
|
"button",
|
|
2184
2366
|
{
|
|
2185
2367
|
onClick: () => onPageChange(currentPage + 1),
|
|
2186
2368
|
disabled: currentPage >= totalPages || isLoading,
|
|
2187
2369
|
className: "p-2 border border-neutral-200 rounded-full bg-white text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none"
|
|
2188
2370
|
},
|
|
2189
|
-
/* @__PURE__ */
|
|
2190
|
-
))))), currentView === "details" && selectedMember && /* @__PURE__ */
|
|
2371
|
+
/* @__PURE__ */ import_react42.default.createElement(import_react43.HugeiconsIcon, { icon: import_core_free_icons11.ArrowRight01Icon, size: 14 })
|
|
2372
|
+
))))), currentView === "details" && selectedMember && /* @__PURE__ */ import_react42.default.createElement("div", { className: "w-full max-w-2xl text-left" }, /* @__PURE__ */ import_react42.default.createElement("div", { className: "flex flex-col gap-8" }, /* @__PURE__ */ import_react42.default.createElement("div", { className: "flex items-center gap-5" }, selectedMember.displayImage && selectedMember.displayImage !== "NO_IMAGE" ? /* @__PURE__ */ import_react42.default.createElement("div", { className: "w-16 h-16 shrink-0 rounded-full overflow-hidden bg-neutral-100" }, /* @__PURE__ */ import_react42.default.createElement(
|
|
2191
2373
|
"img",
|
|
2192
2374
|
{
|
|
2193
2375
|
src: selectedMember.displayImage,
|
|
@@ -2195,7 +2377,7 @@ var UniversalMembersPage = ({
|
|
|
2195
2377
|
className: "w-full h-full object-cover blur-sm transition-all duration-300",
|
|
2196
2378
|
onLoad: (e) => e.currentTarget.classList.remove("blur-sm")
|
|
2197
2379
|
}
|
|
2198
|
-
)) : /* @__PURE__ */
|
|
2380
|
+
)) : /* @__PURE__ */ import_react42.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_react42.default.createElement("div", null, /* @__PURE__ */ import_react42.default.createElement("h2", { className: " font-serif text-lg text-black" }, selectedMember.fullName), /* @__PURE__ */ import_react42.default.createElement("p", { className: "text-sm text-neutral-500 mt-1" }, selectedMember.email))), /* @__PURE__ */ import_react42.default.createElement("div", { className: "grid grid-cols-2 gap-6 border-t border-neutral-200 pt-8" }, /* @__PURE__ */ import_react42.default.createElement("div", null, /* @__PURE__ */ import_react42.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-3" }, "Role"), canChangeRoles && selectedMember.userId !== currentUserId ? /* @__PURE__ */ import_react42.default.createElement(
|
|
2199
2381
|
"button",
|
|
2200
2382
|
{
|
|
2201
2383
|
onClick: () => !isUpdatingRole && setIsRoleModalOpen(true),
|
|
@@ -2203,16 +2385,16 @@ var UniversalMembersPage = ({
|
|
|
2203
2385
|
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-200 hover:bg-neutral-50"}`
|
|
2204
2386
|
},
|
|
2205
2387
|
selectedMember.role,
|
|
2206
|
-
isUpdatingRole ? /* @__PURE__ */
|
|
2207
|
-
) : /* @__PURE__ */
|
|
2388
|
+
isUpdatingRole ? /* @__PURE__ */ import_react42.default.createElement(ButtonSpinner3, null) : /* @__PURE__ */ import_react42.default.createElement(import_react43.HugeiconsIcon, { icon: import_core_free_icons11.ArrowDown01Icon, size: 14, className: "text-neutral-400" })
|
|
2389
|
+
) : /* @__PURE__ */ import_react42.default.createElement("span", { className: "text-xs text-black bg-neutral-50 px-4 py-2 rounded-full inline-block" }, selectedMember.role)), /* @__PURE__ */ import_react42.default.createElement("div", null, /* @__PURE__ */ import_react42.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-400 block mb-3" }, "Joined Date"), /* @__PURE__ */ import_react42.default.createElement("span", { className: "text-sm text-black" }, new Date(selectedMember.joinedAt).toLocaleDateString()))), canManage && selectedMember.userId !== currentUserId && /* @__PURE__ */ import_react42.default.createElement("div", { className: "pt-8 mt-2 border-t border-neutral-200" }, /* @__PURE__ */ import_react42.default.createElement(
|
|
2208
2390
|
"button",
|
|
2209
2391
|
{
|
|
2210
2392
|
onClick: () => setMemberToDelete(selectedMember),
|
|
2211
2393
|
className: "flex items-center gap-2 text-[11px] tracking-widest text-red-600 hover:text-red-700 transition-colors w-fit outline-none"
|
|
2212
2394
|
},
|
|
2213
|
-
/* @__PURE__ */
|
|
2395
|
+
/* @__PURE__ */ import_react42.default.createElement(import_react43.HugeiconsIcon, { icon: import_core_free_icons11.Delete01Icon, size: 14 }),
|
|
2214
2396
|
" Remove Member"
|
|
2215
|
-
)))), currentView === "invite" && canManage && /* @__PURE__ */
|
|
2397
|
+
)))), currentView === "invite" && canManage && /* @__PURE__ */ import_react42.default.createElement("div", { className: "w-full max-w-2xl text-left" }, /* @__PURE__ */ import_react42.default.createElement("form", { onSubmit: handleInvite, className: "space-y-8", autoComplete: "off" }, /* @__PURE__ */ import_react42.default.createElement(
|
|
2216
2398
|
TextInput,
|
|
2217
2399
|
{
|
|
2218
2400
|
label: "Email Address",
|
|
@@ -2221,7 +2403,7 @@ var UniversalMembersPage = ({
|
|
|
2221
2403
|
disabled: isInviting,
|
|
2222
2404
|
placeholder: "developer@acme.com"
|
|
2223
2405
|
}
|
|
2224
|
-
), requireNamesForInvite && /* @__PURE__ */
|
|
2406
|
+
), requireNamesForInvite && /* @__PURE__ */ import_react42.default.createElement("div", { className: "flex flex-col sm:flex-row gap-6" }, /* @__PURE__ */ import_react42.default.createElement(
|
|
2225
2407
|
TextInput,
|
|
2226
2408
|
{
|
|
2227
2409
|
label: "First Name",
|
|
@@ -2230,7 +2412,7 @@ var UniversalMembersPage = ({
|
|
|
2230
2412
|
disabled: isInviting,
|
|
2231
2413
|
placeholder: "Jane"
|
|
2232
2414
|
}
|
|
2233
|
-
), /* @__PURE__ */
|
|
2415
|
+
), /* @__PURE__ */ import_react42.default.createElement(
|
|
2234
2416
|
TextInput,
|
|
2235
2417
|
{
|
|
2236
2418
|
label: "Last Name",
|
|
@@ -2239,7 +2421,7 @@ var UniversalMembersPage = ({
|
|
|
2239
2421
|
disabled: isInviting,
|
|
2240
2422
|
placeholder: "Doe"
|
|
2241
2423
|
}
|
|
2242
|
-
)), /* @__PURE__ */
|
|
2424
|
+
)), /* @__PURE__ */ import_react42.default.createElement("div", { className: "pt-8 mt-2" }, /* @__PURE__ */ import_react42.default.createElement(
|
|
2243
2425
|
ThreeDActionButton,
|
|
2244
2426
|
{
|
|
2245
2427
|
type: "submit",
|
|
@@ -2248,7 +2430,7 @@ var UniversalMembersPage = ({
|
|
|
2248
2430
|
className: "min-w-40"
|
|
2249
2431
|
},
|
|
2250
2432
|
"Send Invitation"
|
|
2251
|
-
)))), isRoleModalOpen && canChangeRoles && /* @__PURE__ */
|
|
2433
|
+
)))), isRoleModalOpen && canChangeRoles && /* @__PURE__ */ import_react42.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react42.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isUpdatingRole && setIsRoleModalOpen(false) }), /* @__PURE__ */ import_react42.default.createElement("div", { ref: dropdownRef, 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_react42.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react42.default.createElement("h3", { className: " font-serif text-[14px] text-black tracking-tight" }, "Update Role")), /* @__PURE__ */ import_react42.default.createElement("div", { className: "w-full flex flex-col pl-2 pr-2" }, availableRoles.map((roleOption) => /* @__PURE__ */ import_react42.default.createElement(
|
|
2252
2434
|
"button",
|
|
2253
2435
|
{
|
|
2254
2436
|
key: roleOption,
|
|
@@ -2256,9 +2438,9 @@ var UniversalMembersPage = ({
|
|
|
2256
2438
|
disabled: isUpdatingRole,
|
|
2257
2439
|
className: `text-left px-4 py-3 text-[12px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none ${selectedMember?.role === roleOption ? "bg-neutral-100 text-black" : "text-neutral-500 hover:bg-neutral-50 hover:text-black"}`
|
|
2258
2440
|
},
|
|
2259
|
-
/* @__PURE__ */
|
|
2260
|
-
selectedMember?.role === roleOption && /* @__PURE__ */
|
|
2261
|
-
))), /* @__PURE__ */
|
|
2441
|
+
/* @__PURE__ */ import_react42.default.createElement("span", { className: "truncate pr-2" }, roleOption),
|
|
2442
|
+
selectedMember?.role === roleOption && /* @__PURE__ */ import_react42.default.createElement("div", null)
|
|
2443
|
+
))), /* @__PURE__ */ import_react42.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react42.default.createElement(
|
|
2262
2444
|
"button",
|
|
2263
2445
|
{
|
|
2264
2446
|
onClick: () => setIsRoleModalOpen(false),
|
|
@@ -2266,14 +2448,14 @@ var UniversalMembersPage = ({
|
|
|
2266
2448
|
className: "w-full py-2.5 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none"
|
|
2267
2449
|
},
|
|
2268
2450
|
"Cancel"
|
|
2269
|
-
)))), memberToDelete && canManage && /* @__PURE__ */
|
|
2451
|
+
)))), memberToDelete && canManage && /* @__PURE__ */ import_react42.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react42.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isDeleting && setMemberToDelete(null) }), /* @__PURE__ */ import_react42.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_react42.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react42.default.createElement("h3", { className: " font-serif text-[17px] text-black tracking-tight mb-1" }, "Remove Member"), /* @__PURE__ */ import_react42.default.createElement("p", { className: "text-[12px] text-neutral-500 leading-snug mt-2" }, "Are you sure you want to remove this member? They will lose access instantly.")), /* @__PURE__ */ import_react42.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react42.default.createElement("button", { onClick: () => setMemberToDelete(null), disabled: isDeleting, className: "flex-1 py-2 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none" }, "Cancel"), /* @__PURE__ */ import_react42.default.createElement("button", { onClick: handleDelete, disabled: isDeleting, className: "flex-1 py-2 text-[13px] text-red-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 flex justify-center outline-none" }, isDeleting ? /* @__PURE__ */ import_react42.default.createElement(ButtonSpinner3, null) : "Remove")))));
|
|
2270
2452
|
};
|
|
2271
2453
|
|
|
2272
2454
|
// src/components/UniversalProfileSettings.tsx
|
|
2273
|
-
var
|
|
2455
|
+
var import_react44 = __toESM(require("react"));
|
|
2274
2456
|
var import_react_hot_toast6 = __toESM(require("react-hot-toast"));
|
|
2275
|
-
var
|
|
2276
|
-
var
|
|
2457
|
+
var import_react45 = require("@hugeicons/react");
|
|
2458
|
+
var import_core_free_icons12 = require("@hugeicons/core-free-icons");
|
|
2277
2459
|
var UniversalProfileSettings = ({
|
|
2278
2460
|
initialFirstName,
|
|
2279
2461
|
initialLastName,
|
|
@@ -2283,10 +2465,10 @@ var UniversalProfileSettings = ({
|
|
|
2283
2465
|
isReadOnly = false,
|
|
2284
2466
|
onSaveProfile
|
|
2285
2467
|
}) => {
|
|
2286
|
-
const [firstName, setFirstName] = (0,
|
|
2287
|
-
const [lastName, setLastName] = (0,
|
|
2288
|
-
const [isSubmitting, setIsSubmitting] = (0,
|
|
2289
|
-
(0,
|
|
2468
|
+
const [firstName, setFirstName] = (0, import_react44.useState)(initialFirstName);
|
|
2469
|
+
const [lastName, setLastName] = (0, import_react44.useState)(initialLastName);
|
|
2470
|
+
const [isSubmitting, setIsSubmitting] = (0, import_react44.useState)(false);
|
|
2471
|
+
(0, import_react44.useEffect)(() => {
|
|
2290
2472
|
setFirstName(initialFirstName || "");
|
|
2291
2473
|
setLastName(initialLastName || "");
|
|
2292
2474
|
}, [initialFirstName, initialLastName]);
|
|
@@ -2316,7 +2498,7 @@ var UniversalProfileSettings = ({
|
|
|
2316
2498
|
};
|
|
2317
2499
|
const hasChanges = firstName !== initialFirstName || lastName !== initialLastName;
|
|
2318
2500
|
const isSaveDisabled = isSubmitting || isReadOnly || !hasChanges || firstName.trim().length === 0 || lastName.trim().length === 0;
|
|
2319
|
-
return /* @__PURE__ */
|
|
2501
|
+
return /* @__PURE__ */ import_react44.default.createElement("div", { className: "flex flex-col max-w-3xl rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300 " }, /* @__PURE__ */ import_react44.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react44.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ import_react44.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react44.default.createElement("h1", { className: " font-serif text-xl text-black mb-1 truncate tracking-tight" }, "Personal Settings"), /* @__PURE__ */ import_react44.default.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your personal account profile.")), isReadOnly && /* @__PURE__ */ import_react44.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full " }, /* @__PURE__ */ import_react44.default.createElement(import_react45.HugeiconsIcon, { icon: import_core_free_icons12.CircleLock02Icon, size: 18, className: "text-current" }))), /* @__PURE__ */ import_react44.default.createElement("div", { className: "w-full max-w-2xl" }, /* @__PURE__ */ import_react44.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ import_react44.default.createElement("div", { className: "flex flex-col sm:flex-row gap-6" }, /* @__PURE__ */ import_react44.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react44.default.createElement(
|
|
2320
2502
|
TextInput,
|
|
2321
2503
|
{
|
|
2322
2504
|
label: "First Name",
|
|
@@ -2325,7 +2507,7 @@ var UniversalProfileSettings = ({
|
|
|
2325
2507
|
disabled: isReadOnly || isSubmitting,
|
|
2326
2508
|
placeholder: "System"
|
|
2327
2509
|
}
|
|
2328
|
-
)), /* @__PURE__ */
|
|
2510
|
+
)), /* @__PURE__ */ import_react44.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react44.default.createElement(
|
|
2329
2511
|
TextInput,
|
|
2330
2512
|
{
|
|
2331
2513
|
label: "Last Name",
|
|
@@ -2334,7 +2516,7 @@ var UniversalProfileSettings = ({
|
|
|
2334
2516
|
disabled: isReadOnly || isSubmitting,
|
|
2335
2517
|
placeholder: "Admin"
|
|
2336
2518
|
}
|
|
2337
|
-
))), /* @__PURE__ */
|
|
2519
|
+
))), /* @__PURE__ */ import_react44.default.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ import_react44.default.createElement(
|
|
2338
2520
|
TextInput,
|
|
2339
2521
|
{
|
|
2340
2522
|
label: "Email ID",
|
|
@@ -2343,7 +2525,7 @@ var UniversalProfileSettings = ({
|
|
|
2343
2525
|
},
|
|
2344
2526
|
disabled: true
|
|
2345
2527
|
}
|
|
2346
|
-
), /* @__PURE__ */
|
|
2528
|
+
), /* @__PURE__ */ import_react44.default.createElement("p", { className: "text-[10px] text-neutral-400 mt-1 truncate" }, "To change your email address, please contact support.")), /* @__PURE__ */ import_react44.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between pt-8 mt-2 gap-6 sm:gap-4 " }, /* @__PURE__ */ import_react44.default.createElement("div", { className: "flex items-center gap-6 min-w-0" }, /* @__PURE__ */ import_react44.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react44.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block truncate uppercase" }, "Account Status"), /* @__PURE__ */ import_react44.default.createElement("span", { className: "text-xs text-black block truncate" }, accountStatus)), /* @__PURE__ */ import_react44.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react44.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block truncate uppercase" }, "Member Since"), /* @__PURE__ */ import_react44.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_react44.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_react44.default.createElement(
|
|
2347
2529
|
"button",
|
|
2348
2530
|
{
|
|
2349
2531
|
type: "button",
|
|
@@ -2354,7 +2536,7 @@ var UniversalProfileSettings = ({
|
|
|
2354
2536
|
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"
|
|
2355
2537
|
},
|
|
2356
2538
|
"Cancel"
|
|
2357
|
-
), /* @__PURE__ */
|
|
2539
|
+
), /* @__PURE__ */ import_react44.default.createElement(
|
|
2358
2540
|
ThreeDActionButton,
|
|
2359
2541
|
{
|
|
2360
2542
|
type: "submit",
|
|
@@ -2367,11 +2549,11 @@ var UniversalProfileSettings = ({
|
|
|
2367
2549
|
};
|
|
2368
2550
|
|
|
2369
2551
|
// src/components/UniversalBillingPage.tsx
|
|
2370
|
-
var
|
|
2371
|
-
var
|
|
2372
|
-
var
|
|
2373
|
-
var PageSpinner3 = () => /* @__PURE__ */
|
|
2374
|
-
var ButtonSpinner4 = () => /* @__PURE__ */
|
|
2552
|
+
var import_react46 = __toESM(require("react"));
|
|
2553
|
+
var import_react47 = require("@hugeicons/react");
|
|
2554
|
+
var import_core_free_icons13 = require("@hugeicons/core-free-icons");
|
|
2555
|
+
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_icons13.Loading03Icon, size: 32, className: "animate-spin mb-4 text-neutral-400" }));
|
|
2556
|
+
var ButtonSpinner4 = () => /* @__PURE__ */ import_react46.default.createElement(import_react47.HugeiconsIcon, { icon: import_core_free_icons13.Loading03Icon, size: 16, className: "animate-spin text-neutral-500" });
|
|
2375
2557
|
var formatDate = (dateString) => {
|
|
2376
2558
|
if (!dateString) return "N/A";
|
|
2377
2559
|
return new Date(dateString).toLocaleDateString("en-US", {
|
|
@@ -2413,13 +2595,13 @@ var UniversalBillingPage = ({
|
|
|
2413
2595
|
onPayInvoice,
|
|
2414
2596
|
onUpdateInvoiceStatus
|
|
2415
2597
|
}) => {
|
|
2416
|
-
const [currentView, setCurrentView] = (0,
|
|
2417
|
-
const [selectedInvoice, setSelectedInvoice] = (0,
|
|
2418
|
-
const [isTimeframeModalOpen, setIsTimeframeModalOpen] = (0,
|
|
2419
|
-
const [isPaying, setIsPaying] = (0,
|
|
2420
|
-
const [isActionModalOpen, setIsActionModalOpen] = (0,
|
|
2421
|
-
const [isUpdating, setIsUpdating] = (0,
|
|
2422
|
-
const [twoFactorCode, setTwoFactorCode] = (0,
|
|
2598
|
+
const [currentView, setCurrentView] = (0, import_react46.useState)("list");
|
|
2599
|
+
const [selectedInvoice, setSelectedInvoice] = (0, import_react46.useState)(null);
|
|
2600
|
+
const [isTimeframeModalOpen, setIsTimeframeModalOpen] = (0, import_react46.useState)(false);
|
|
2601
|
+
const [isPaying, setIsPaying] = (0, import_react46.useState)(false);
|
|
2602
|
+
const [isActionModalOpen, setIsActionModalOpen] = (0, import_react46.useState)(false);
|
|
2603
|
+
const [isUpdating, setIsUpdating] = (0, import_react46.useState)(false);
|
|
2604
|
+
const [twoFactorCode, setTwoFactorCode] = (0, import_react46.useState)("");
|
|
2423
2605
|
const handlePayment = async () => {
|
|
2424
2606
|
if (!selectedInvoice || isReadOnly || !onPayInvoice || isPaying) return;
|
|
2425
2607
|
setIsPaying(true);
|
|
@@ -2446,14 +2628,14 @@ var UniversalBillingPage = ({
|
|
|
2446
2628
|
setIsUpdating(false);
|
|
2447
2629
|
}
|
|
2448
2630
|
};
|
|
2449
|
-
return /* @__PURE__ */
|
|
2631
|
+
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 " }, /* @__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(
|
|
2450
2632
|
TextInput,
|
|
2451
2633
|
{
|
|
2452
2634
|
placeholder: "Search by ID or Name...",
|
|
2453
2635
|
value: searchQuery,
|
|
2454
2636
|
onChange: onSearchChange
|
|
2455
2637
|
}
|
|
2456
|
-
), /* @__PURE__ */
|
|
2638
|
+
), /* @__PURE__ */ import_react46.default.createElement(
|
|
2457
2639
|
"button",
|
|
2458
2640
|
{
|
|
2459
2641
|
type: "button",
|
|
@@ -2461,10 +2643,10 @@ var UniversalBillingPage = ({
|
|
|
2461
2643
|
className: "px-4 py-3 text-sm bg-transparent border-b border-neutral-200 text-black outline-none focus:border-black shrink-0 text-left"
|
|
2462
2644
|
},
|
|
2463
2645
|
timeframe === "ALL" ? "All Time" : timeframe === "24H" ? "Past 24 Hours" : timeframe === "7D" ? "Past 7 Days" : "Past 30 Days"
|
|
2464
|
-
))) : /* @__PURE__ */
|
|
2646
|
+
))) : /* @__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_icons13.ArrowLeft01Icon, size: 12 }), " Back")), isReadOnly && currentView === "list" && /* @__PURE__ */ import_react46.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full " }, /* @__PURE__ */ import_react46.default.createElement(import_react47.HugeiconsIcon, { icon: import_core_free_icons13.CircleLock02Icon, size: 18, className: "text-current" }))), 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-200 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-200" }, /* @__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-200" }, /* @__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(import_react46.default.Fragment, null, /* @__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: () => {
|
|
2465
2647
|
setSelectedInvoice(inv);
|
|
2466
2648
|
setCurrentView("details");
|
|
2467
|
-
}, className: "flex items-center justify-between py-4 hover:bg-neutral-50/50 cursor-pointer group min-w-0 px-2 transition-colors" }, /* @__PURE__ */
|
|
2649
|
+
}, 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-200 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_icons13.ArrowLeft01Icon, size: 14 })), /* @__PURE__ */ import_react46.default.createElement("button", { onClick: () => onPageChange(currentPage + 1), disabled: currentPage >= totalPages || isLoading, className: "p-2 border border-neutral-200 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_icons13.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-200" }, /* @__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(
|
|
2468
2650
|
"button",
|
|
2469
2651
|
{
|
|
2470
2652
|
onClick: () => !isUpdating && setIsActionModalOpen(true),
|
|
@@ -2472,8 +2654,8 @@ var UniversalBillingPage = ({
|
|
|
2472
2654
|
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-200 hover:bg-neutral-50"}`
|
|
2473
2655
|
},
|
|
2474
2656
|
selectedInvoice.status,
|
|
2475
|
-
isUpdating ? /* @__PURE__ */
|
|
2476
|
-
) : /* @__PURE__ */
|
|
2657
|
+
isUpdating ? /* @__PURE__ */ import_react46.default.createElement(ButtonSpinner4, null) : /* @__PURE__ */ import_react46.default.createElement(import_react47.HugeiconsIcon, { icon: import_core_free_icons13.ArrowDown01Icon, size: 14, className: "text-neutral-400" })
|
|
2658
|
+
) : /* @__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-200/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-200 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(
|
|
2477
2659
|
ThreeDActionButton,
|
|
2478
2660
|
{
|
|
2479
2661
|
onClick: handlePayment,
|
|
@@ -2482,12 +2664,12 @@ var UniversalBillingPage = ({
|
|
|
2482
2664
|
className: "w-full sm:w-auto"
|
|
2483
2665
|
},
|
|
2484
2666
|
"Pay Invoice"
|
|
2485
|
-
)), !isModMode && selectedInvoice.status === "PAID" && /* @__PURE__ */
|
|
2667
|
+
)), !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" }, [
|
|
2486
2668
|
{ value: "ALL", label: "All Time" },
|
|
2487
2669
|
{ value: "24H", label: "Past 24 Hours" },
|
|
2488
2670
|
{ value: "7D", label: "Past 7 Days" },
|
|
2489
2671
|
{ value: "30D", label: "Past 30 Days" }
|
|
2490
|
-
].map((option) => /* @__PURE__ */
|
|
2672
|
+
].map((option) => /* @__PURE__ */ import_react46.default.createElement(
|
|
2491
2673
|
"button",
|
|
2492
2674
|
{
|
|
2493
2675
|
key: option.value,
|
|
@@ -2498,9 +2680,9 @@ var UniversalBillingPage = ({
|
|
|
2498
2680
|
},
|
|
2499
2681
|
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"}`
|
|
2500
2682
|
},
|
|
2501
|
-
/* @__PURE__ */
|
|
2502
|
-
timeframe === option.value && /* @__PURE__ */
|
|
2503
|
-
))), /* @__PURE__ */
|
|
2683
|
+
/* @__PURE__ */ import_react46.default.createElement("span", { className: "truncate pr-2" }, option.label),
|
|
2684
|
+
timeframe === option.value && /* @__PURE__ */ import_react46.default.createElement("div", null)
|
|
2685
|
+
))), /* @__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(
|
|
2504
2686
|
TextInput,
|
|
2505
2687
|
{
|
|
2506
2688
|
placeholder: "Enter 2FA Code...",
|
|
@@ -2508,7 +2690,7 @@ var UniversalBillingPage = ({
|
|
|
2508
2690
|
onChange: setTwoFactorCode,
|
|
2509
2691
|
type: "password"
|
|
2510
2692
|
}
|
|
2511
|
-
)), /* @__PURE__ */
|
|
2693
|
+
)), /* @__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(
|
|
2512
2694
|
"button",
|
|
2513
2695
|
{
|
|
2514
2696
|
key: statusOption,
|
|
@@ -2516,15 +2698,15 @@ var UniversalBillingPage = ({
|
|
|
2516
2698
|
disabled: isUpdating || !twoFactorCode,
|
|
2517
2699
|
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"}`
|
|
2518
2700
|
},
|
|
2519
|
-
/* @__PURE__ */
|
|
2520
|
-
selectedInvoice?.status === statusOption && /* @__PURE__ */
|
|
2521
|
-
))), /* @__PURE__ */
|
|
2701
|
+
/* @__PURE__ */ import_react46.default.createElement("span", { className: "truncate pr-2" }, statusOption),
|
|
2702
|
+
selectedInvoice?.status === statusOption && /* @__PURE__ */ import_react46.default.createElement("div", null)
|
|
2703
|
+
))), /* @__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")))));
|
|
2522
2704
|
};
|
|
2523
2705
|
|
|
2524
2706
|
// src/components/UniversalDashboardPage.tsx
|
|
2525
|
-
var
|
|
2526
|
-
var
|
|
2527
|
-
var
|
|
2707
|
+
var import_react48 = __toESM(require("react"));
|
|
2708
|
+
var import_react49 = require("@hugeicons/react");
|
|
2709
|
+
var import_core_free_icons14 = require("@hugeicons/core-free-icons");
|
|
2528
2710
|
var UniversalDashboardPage = ({
|
|
2529
2711
|
headerTitle,
|
|
2530
2712
|
headerDescription,
|
|
@@ -2535,20 +2717,20 @@ var UniversalDashboardPage = ({
|
|
|
2535
2717
|
lists,
|
|
2536
2718
|
isLoading = false
|
|
2537
2719
|
}) => {
|
|
2538
|
-
const [isTimeframeModalOpen, setIsTimeframeModalOpen] = (0,
|
|
2720
|
+
const [isTimeframeModalOpen, setIsTimeframeModalOpen] = (0, import_react48.useState)(false);
|
|
2539
2721
|
const selectedTimeframe = timeframes.find((t) => t.id === activeTimeframe) || timeframes[0];
|
|
2540
2722
|
if (isLoading) {
|
|
2541
|
-
return /* @__PURE__ */
|
|
2723
|
+
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_icons14.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
2542
2724
|
}
|
|
2543
|
-
return /* @__PURE__ */
|
|
2725
|
+
return /* @__PURE__ */ import_react48.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in duration-300 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(
|
|
2544
2726
|
"button",
|
|
2545
2727
|
{
|
|
2546
2728
|
onClick: () => setIsTimeframeModalOpen(true),
|
|
2547
2729
|
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"
|
|
2548
2730
|
},
|
|
2549
|
-
/* @__PURE__ */
|
|
2550
|
-
/* @__PURE__ */
|
|
2551
|
-
)), stats.length > 0 && /* @__PURE__ */
|
|
2731
|
+
/* @__PURE__ */ import_react48.default.createElement("span", null, selectedTimeframe.label),
|
|
2732
|
+
/* @__PURE__ */ import_react48.default.createElement(import_react49.HugeiconsIcon, { icon: import_core_free_icons14.ArrowDown01Icon, size: 14, className: "text-neutral-400" })
|
|
2733
|
+
)), 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(
|
|
2552
2734
|
"button",
|
|
2553
2735
|
{
|
|
2554
2736
|
key: tf.id,
|
|
@@ -2558,9 +2740,9 @@ var UniversalDashboardPage = ({
|
|
|
2558
2740
|
},
|
|
2559
2741
|
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"}`
|
|
2560
2742
|
},
|
|
2561
|
-
/* @__PURE__ */
|
|
2562
|
-
activeTimeframe === tf.id && /* @__PURE__ */
|
|
2563
|
-
))), /* @__PURE__ */
|
|
2743
|
+
/* @__PURE__ */ import_react48.default.createElement("span", { className: "truncate pr-2" }, tf.label),
|
|
2744
|
+
activeTimeframe === tf.id && /* @__PURE__ */ import_react48.default.createElement("div", null)
|
|
2745
|
+
))), /* @__PURE__ */ import_react48.default.createElement("div", { className: "w-full flex border-t border-neutral-50" }, /* @__PURE__ */ import_react48.default.createElement(
|
|
2564
2746
|
"button",
|
|
2565
2747
|
{
|
|
2566
2748
|
onClick: () => setIsTimeframeModalOpen(false),
|
|
@@ -2571,9 +2753,9 @@ var UniversalDashboardPage = ({
|
|
|
2571
2753
|
};
|
|
2572
2754
|
|
|
2573
2755
|
// src/components/UniversalAgentConsole.tsx
|
|
2574
|
-
var
|
|
2575
|
-
var
|
|
2576
|
-
var
|
|
2756
|
+
var import_react50 = __toESM(require("react"));
|
|
2757
|
+
var import_react51 = require("@hugeicons/react");
|
|
2758
|
+
var import_core_free_icons15 = require("@hugeicons/core-free-icons");
|
|
2577
2759
|
var formatKeyName = (key) => key.replace(/([A-Z])/g, " $1").replace(/^./, (str) => str.toUpperCase()).trim();
|
|
2578
2760
|
var toTitleCaseSafe = (str) => {
|
|
2579
2761
|
if (!str) return "";
|
|
@@ -2602,13 +2784,13 @@ var UniversalAgentConsole = ({
|
|
|
2602
2784
|
onUploadArchives,
|
|
2603
2785
|
onDeleteArchive
|
|
2604
2786
|
}) => {
|
|
2605
|
-
const archiveRef = (0,
|
|
2606
|
-
const [pendingFiles, setPendingFiles] = (0,
|
|
2607
|
-
const [isUploading, setIsUploading] = (0,
|
|
2608
|
-
const [isActioning, setIsActioning] = (0,
|
|
2609
|
-
const [actionModal, setActionModal] = (0,
|
|
2610
|
-
const [actionMessage, setActionMessage] = (0,
|
|
2611
|
-
const [archiveToDelete, setArchiveToDelete] = (0,
|
|
2787
|
+
const archiveRef = (0, import_react50.useRef)(null);
|
|
2788
|
+
const [pendingFiles, setPendingFiles] = (0, import_react50.useState)([]);
|
|
2789
|
+
const [isUploading, setIsUploading] = (0, import_react50.useState)(false);
|
|
2790
|
+
const [isActioning, setIsActioning] = (0, import_react50.useState)(false);
|
|
2791
|
+
const [actionModal, setActionModal] = (0, import_react50.useState)(null);
|
|
2792
|
+
const [actionMessage, setActionMessage] = (0, import_react50.useState)("");
|
|
2793
|
+
const [archiveToDelete, setArchiveToDelete] = (0, import_react50.useState)(null);
|
|
2612
2794
|
const handleFileSelect = (e) => {
|
|
2613
2795
|
if (e.target.files && e.target.files.length > 0) {
|
|
2614
2796
|
setPendingFiles((prev) => [...prev, ...Array.from(e.target.files)]);
|
|
@@ -2637,36 +2819,36 @@ var UniversalAgentConsole = ({
|
|
|
2637
2819
|
}
|
|
2638
2820
|
};
|
|
2639
2821
|
const DynamicArrayAccordion = ({ items, parentKey }) => {
|
|
2640
|
-
const [activeFAQ, setActiveFAQ] = (0,
|
|
2641
|
-
return /* @__PURE__ */
|
|
2822
|
+
const [activeFAQ, setActiveFAQ] = (0, import_react50.useState)(null);
|
|
2823
|
+
return /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col relative z-10 bg-transparent w-full mt-2 border-t border-neutral-200" }, items.map((item, index) => {
|
|
2642
2824
|
const isOpen = activeFAQ === index;
|
|
2643
2825
|
let label = `${parentKey ? formatKeyName(parentKey) : "Item"} ${index + 1}`;
|
|
2644
2826
|
if (item.fullName) label = toTitleCaseSafe(item.fullName);
|
|
2645
2827
|
else if (item.role) label = item.role;
|
|
2646
2828
|
else if (item.proposedName) label = toTitleCaseSafe(item.proposedName);
|
|
2647
|
-
return /* @__PURE__ */
|
|
2829
|
+
return /* @__PURE__ */ import_react50.default.createElement("div", { key: index, className: `transition-all duration-300 ${index !== items.length - 1 ? "border-b border-neutral-200" : ""}` }, /* @__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_icons15.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)))));
|
|
2648
2830
|
}));
|
|
2649
2831
|
};
|
|
2650
2832
|
const renderValue = (key, value) => {
|
|
2651
2833
|
if (value === null || value === void 0 || value === "") return null;
|
|
2652
2834
|
if (typeof value === "string") {
|
|
2653
|
-
if (value.startsWith("http") || value.startsWith("data:image")) return /* @__PURE__ */
|
|
2654
|
-
if (key.toLowerCase().includes("name") && !value.includes("@")) return /* @__PURE__ */
|
|
2655
|
-
return /* @__PURE__ */
|
|
2835
|
+
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-200 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_icons15.Download01Icon, size: 14 }), " Download File");
|
|
2836
|
+
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));
|
|
2837
|
+
return /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-[12px] md:text-[13px] leading-[1.8] text-neutral-600" }, value);
|
|
2656
2838
|
}
|
|
2657
2839
|
if (Array.isArray(value)) {
|
|
2658
2840
|
const validItems = value.filter((item) => item !== null && item !== void 0 && item !== "");
|
|
2659
2841
|
if (validItems.length === 0) return null;
|
|
2660
|
-
if (typeof validItems[0] === "string") return /* @__PURE__ */
|
|
2661
|
-
return /* @__PURE__ */
|
|
2842
|
+
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))));
|
|
2843
|
+
return /* @__PURE__ */ import_react50.default.createElement(DynamicArrayAccordion, { items: validItems, parentKey: key });
|
|
2662
2844
|
}
|
|
2663
2845
|
if (typeof value === "object") {
|
|
2664
2846
|
if (Object.keys(value).length === 0) return null;
|
|
2665
2847
|
const renderedObj = renderDynamicObject(value);
|
|
2666
2848
|
if (!renderedObj || Array.isArray(renderedObj) && renderedObj.length === 0) return null;
|
|
2667
|
-
return /* @__PURE__ */
|
|
2849
|
+
return /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col gap-3 mt-1 w-full border-l border-neutral-200 pl-4 py-2" }, renderedObj);
|
|
2668
2850
|
}
|
|
2669
|
-
return /* @__PURE__ */
|
|
2851
|
+
return /* @__PURE__ */ import_react50.default.createElement("span", { className: "text-sm text-black" }, String(value));
|
|
2670
2852
|
};
|
|
2671
2853
|
const renderDynamicObject = (obj) => {
|
|
2672
2854
|
if (!obj) return null;
|
|
@@ -2677,22 +2859,22 @@ var UniversalAgentConsole = ({
|
|
|
2677
2859
|
return true;
|
|
2678
2860
|
});
|
|
2679
2861
|
if (entries.length === 0) return null;
|
|
2680
|
-
return entries.map(([k, v]) => /* @__PURE__ */
|
|
2862
|
+
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)));
|
|
2681
2863
|
};
|
|
2682
|
-
return /* @__PURE__ */
|
|
2864
|
+
return /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in duration-300 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-200 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_icons15.Loading03Icon, size: 32, className: "animate-spin text-black" })) : listData.length === 0 ? /* @__PURE__ */ import_react50.default.createElement(import_react50.default.Fragment, null, /* @__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-200 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_icons15.ArrowLeft01Icon, size: 14 })), /* @__PURE__ */ import_react50.default.createElement("button", { onClick: () => onPageChange(currentPage + 1), disabled: currentPage >= totalPages, className: "p-2 border border-neutral-200 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_icons15.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: () => {
|
|
2683
2865
|
onBackToList();
|
|
2684
2866
|
setPendingFiles([]);
|
|
2685
|
-
}, className: "flex items-center gap-2 text-[10px] text-neutral-400 hover:text-black tracking-widest transition-colors outline-none uppercase" }, /* @__PURE__ */
|
|
2867
|
+
}, 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_icons15.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-200" }, /* @__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_icons15.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_icons15.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_icons15.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_icons15.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-200 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_icons15.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 () => {
|
|
2686
2868
|
setIsActioning(true);
|
|
2687
2869
|
await onAcceptApplication(selectedApp.id);
|
|
2688
2870
|
setIsActioning(false);
|
|
2689
|
-
}, disabled: isActioning, isLoading: isActioning, className: "w-full sm:w-auto" }, "Accept Application") : selectedApp.agentId !== currentAgentId ? /* @__PURE__ */
|
|
2871
|
+
}, 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_icons15.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-200 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-200 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 () => {
|
|
2690
2872
|
setIsActioning(true);
|
|
2691
2873
|
await onUpdateStatus(selectedApp.id, actionModal === "success" ? "COMPLETED" : actionModal === "reject" ? "REJECTED" : "QUEUED", actionMessage);
|
|
2692
2874
|
setIsActioning(false);
|
|
2693
2875
|
setActionModal(null);
|
|
2694
2876
|
setActionMessage("");
|
|
2695
|
-
}, disabled: isActioning || (actionModal === "query" || actionModal === "reject") && actionMessage.trim().length < 5, isLoading: isActioning, className: "flex-1" }, "Confirm ", actionModal)))), archiveToDelete && /* @__PURE__ */
|
|
2877
|
+
}, 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 () => {
|
|
2696
2878
|
setIsActioning(true);
|
|
2697
2879
|
await onDeleteArchive(selectedApp.id, archiveToDelete.id);
|
|
2698
2880
|
setIsActioning(false);
|
|
@@ -2701,12 +2883,12 @@ var UniversalAgentConsole = ({
|
|
|
2701
2883
|
};
|
|
2702
2884
|
|
|
2703
2885
|
// src/components/UniversalOverviewPage.tsx
|
|
2704
|
-
var
|
|
2886
|
+
var import_react54 = __toESM(require("react"));
|
|
2705
2887
|
|
|
2706
2888
|
// src/components/Banner.tsx
|
|
2707
|
-
var
|
|
2708
|
-
var
|
|
2709
|
-
var
|
|
2889
|
+
var import_react52 = __toESM(require("react"));
|
|
2890
|
+
var import_react53 = require("@hugeicons/react");
|
|
2891
|
+
var import_core_free_icons16 = require("@hugeicons/core-free-icons");
|
|
2710
2892
|
var Banner = ({
|
|
2711
2893
|
title,
|
|
2712
2894
|
message,
|
|
@@ -2716,7 +2898,7 @@ var Banner = ({
|
|
|
2716
2898
|
onDismiss,
|
|
2717
2899
|
action
|
|
2718
2900
|
}) => {
|
|
2719
|
-
const [isVisible, setIsVisible] = (0,
|
|
2901
|
+
const [isVisible, setIsVisible] = (0, import_react52.useState)(true);
|
|
2720
2902
|
if (!isVisible) return null;
|
|
2721
2903
|
const handleDismiss = () => {
|
|
2722
2904
|
setIsVisible(false);
|
|
@@ -2728,7 +2910,7 @@ var Banner = ({
|
|
|
2728
2910
|
iconColor: "text-emerald-600",
|
|
2729
2911
|
titleColor: "text-emerald-900",
|
|
2730
2912
|
msgColor: "text-emerald-700",
|
|
2731
|
-
defaultIcon:
|
|
2913
|
+
defaultIcon: import_core_free_icons16.CheckmarkBadge01Icon,
|
|
2732
2914
|
closeHover: "hover:bg-emerald-100 text-emerald-500"
|
|
2733
2915
|
},
|
|
2734
2916
|
warning: {
|
|
@@ -2736,7 +2918,7 @@ var Banner = ({
|
|
|
2736
2918
|
iconColor: "text-amber-600",
|
|
2737
2919
|
titleColor: "text-amber-900",
|
|
2738
2920
|
msgColor: "text-amber-700",
|
|
2739
|
-
defaultIcon:
|
|
2921
|
+
defaultIcon: import_core_free_icons16.InformationCircleIcon,
|
|
2740
2922
|
closeHover: "hover:bg-amber-100 text-amber-500"
|
|
2741
2923
|
},
|
|
2742
2924
|
alert: {
|
|
@@ -2744,20 +2926,20 @@ var Banner = ({
|
|
|
2744
2926
|
iconColor: "text-red-600",
|
|
2745
2927
|
titleColor: "text-red-900",
|
|
2746
2928
|
msgColor: "text-red-700",
|
|
2747
|
-
defaultIcon:
|
|
2929
|
+
defaultIcon: import_core_free_icons16.Alert02Icon,
|
|
2748
2930
|
closeHover: "hover:bg-red-100 text-red-500"
|
|
2749
2931
|
}
|
|
2750
2932
|
};
|
|
2751
2933
|
const currentConfig = config[type];
|
|
2752
2934
|
const IconToUse = icon || currentConfig.defaultIcon;
|
|
2753
|
-
return /* @__PURE__ */
|
|
2935
|
+
return /* @__PURE__ */ import_react52.default.createElement("div", { className: `relative w-full rounded-2xl p-4 flex items-start gap-4 transition-all duration-300 animate-in fade-in slide-in-from-top-2 ${currentConfig.bg}` }, /* @__PURE__ */ import_react52.default.createElement("div", { className: `shrink-0 mt-0.5 ${currentConfig.iconColor}` }, /* @__PURE__ */ import_react52.default.createElement(import_react53.HugeiconsIcon, { icon: IconToUse, size: 20 })), /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex-1 flex flex-col min-w-0 pr-6" }, /* @__PURE__ */ import_react52.default.createElement("h4", { className: `text-sm font-medium tracking-tight mb-1 ${currentConfig.titleColor}` }, title), /* @__PURE__ */ import_react52.default.createElement("p", { className: `text-xs leading-relaxed ${currentConfig.msgColor}` }, message), action && /* @__PURE__ */ import_react52.default.createElement("div", { className: "mt-3" }, action)), isDismissible && /* @__PURE__ */ import_react52.default.createElement(
|
|
2754
2936
|
"button",
|
|
2755
2937
|
{
|
|
2756
2938
|
onClick: handleDismiss,
|
|
2757
2939
|
className: `absolute top-3 right-3 p-1.5 rounded-full transition-colors outline-none shrink-0 ${currentConfig.closeHover}`,
|
|
2758
2940
|
"aria-label": "Dismiss banner"
|
|
2759
2941
|
},
|
|
2760
|
-
/* @__PURE__ */
|
|
2942
|
+
/* @__PURE__ */ import_react52.default.createElement(import_react53.HugeiconsIcon, { icon: import_core_free_icons16.Cancel01Icon, size: 16 })
|
|
2761
2943
|
));
|
|
2762
2944
|
};
|
|
2763
2945
|
|
|
@@ -2772,7 +2954,7 @@ var UniversalOverviewPage = ({
|
|
|
2772
2954
|
alerts = [],
|
|
2773
2955
|
banner
|
|
2774
2956
|
}) => {
|
|
2775
|
-
return /* @__PURE__ */
|
|
2957
|
+
return /* @__PURE__ */ import_react54.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in duration-300 pb-10" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "flex items-center justify-between gap-4" }, /* @__PURE__ */ import_react54.default.createElement("div", null, /* @__PURE__ */ import_react54.default.createElement("h1", { className: " font-serif text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ import_react54.default.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription))), quickStats.length > 0 && /* @__PURE__ */ import_react54.default.createElement("div", { className: "w-full rounded-2xl overflow-hidden max-w-3xl bg-white" }, /* @__PURE__ */ import_react54.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_react54.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_react54.default.createElement("div", { className: "w-12 h-12 rounded-full border border-neutral-200 bg-white flex items-center justify-center text-black shrink-0" }, stat.icon), /* @__PURE__ */ import_react54.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react54.default.createElement("p", { className: "text-[10px] tracking-[0.2em] text-neutral-400 mb-1 truncate uppercase" }, stat.label), /* @__PURE__ */ import_react54.default.createElement("p", { className: "text-lg md:text-xl text-black tracking-tight truncate" }, stat.value)))))), banner && banner.isVisible && /* @__PURE__ */ import_react54.default.createElement("div", { className: "w-full max-w-3xl" }, /* @__PURE__ */ import_react54.default.createElement(
|
|
2776
2958
|
Banner,
|
|
2777
2959
|
{
|
|
2778
2960
|
title: banner.title,
|
|
@@ -2783,7 +2965,7 @@ var UniversalOverviewPage = ({
|
|
|
2783
2965
|
onDismiss: banner.onDismiss,
|
|
2784
2966
|
action: banner.action
|
|
2785
2967
|
}
|
|
2786
|
-
)), /* @__PURE__ */
|
|
2968
|
+
)), /* @__PURE__ */ import_react54.default.createElement("div", { className: "w-full rounded-2xl max-w-3xl overflow-hidden bg-white min-w-0" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "p-6 sm:p-8 flex flex-col h-full min-w-0 gap-6" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "flex flex-wrap items-center justify-between gap-4 border-b border-neutral-200 pb-4" }, /* @__PURE__ */ import_react54.default.createElement("h3", { className: " font-serif text-[11px] text-black tracking-[0.2em] uppercase" }, detailsTitle), primaryAction && (primaryAction.href ? /* @__PURE__ */ import_react54.default.createElement(
|
|
2787
2969
|
ThreeDButton,
|
|
2788
2970
|
{
|
|
2789
2971
|
href: primaryAction.href,
|
|
@@ -2792,7 +2974,7 @@ var UniversalOverviewPage = ({
|
|
|
2792
2974
|
},
|
|
2793
2975
|
primaryAction.label,
|
|
2794
2976
|
primaryAction.icon
|
|
2795
|
-
) : /* @__PURE__ */
|
|
2977
|
+
) : /* @__PURE__ */ import_react54.default.createElement(
|
|
2796
2978
|
ThreeDActionButton,
|
|
2797
2979
|
{
|
|
2798
2980
|
onClick: primaryAction.onClick,
|
|
@@ -2801,19 +2983,19 @@ var UniversalOverviewPage = ({
|
|
|
2801
2983
|
},
|
|
2802
2984
|
primaryAction.label,
|
|
2803
2985
|
primaryAction.icon
|
|
2804
|
-
))), /* @__PURE__ */
|
|
2986
|
+
))), /* @__PURE__ */ import_react54.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-8" }, details.map((detail, idx) => /* @__PURE__ */ import_react54.default.createElement("div", { key: idx, className: "min-w-0" }, /* @__PURE__ */ import_react54.default.createElement("p", { className: "text-[10px] tracking-[0.2em] text-neutral-400 mb-1.5 uppercase" }, detail.label), /* @__PURE__ */ import_react54.default.createElement("p", { className: "text-[13px] text-black truncate" }, detail.value)))), alerts.map((alert, idx) => {
|
|
2805
2987
|
const bgClass = alert.type === "warning" ? "bg-amber-50/50" : alert.type === "info" ? "bg-blue-50/50" : "bg-red-50/50";
|
|
2806
2988
|
const textClass = alert.type === "warning" ? "text-amber-600" : alert.type === "info" ? "text-blue-600" : "text-red-600";
|
|
2807
2989
|
const valClass = alert.type === "warning" ? "text-amber-700" : alert.type === "info" ? "text-blue-700" : "text-red-700";
|
|
2808
2990
|
const lblClass = alert.type === "warning" ? "text-amber-400" : alert.type === "info" ? "text-blue-400" : "text-red-400";
|
|
2809
|
-
return /* @__PURE__ */
|
|
2991
|
+
return /* @__PURE__ */ import_react54.default.createElement("div", { key: idx, className: `mt-4 p-5 rounded-xl flex flex-col gap-4 ${bgClass}` }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react54.default.createElement("span", { className: `text-[11px] tracking-widest uppercase ${textClass}` }, alert.title)), alert.items.map((item, itemIdx) => /* @__PURE__ */ import_react54.default.createElement("div", { key: itemIdx }, /* @__PURE__ */ import_react54.default.createElement("span", { className: `text-[10px] tracking-[0.2em] block mb-1 uppercase ${lblClass}` }, item.label), /* @__PURE__ */ import_react54.default.createElement("p", { className: `text-[13px] leading-relaxed ${valClass}` }, item.text))));
|
|
2810
2992
|
}))));
|
|
2811
2993
|
};
|
|
2812
2994
|
|
|
2813
2995
|
// src/components/UniversalErrorView.tsx
|
|
2814
|
-
var
|
|
2815
|
-
var
|
|
2816
|
-
var
|
|
2996
|
+
var import_react55 = __toESM(require("react"));
|
|
2997
|
+
var import_react56 = require("@hugeicons/react");
|
|
2998
|
+
var import_core_free_icons17 = require("@hugeicons/core-free-icons");
|
|
2817
2999
|
var UniversalErrorView = ({
|
|
2818
3000
|
isBooting,
|
|
2819
3001
|
isLoading,
|
|
@@ -2825,7 +3007,7 @@ var UniversalErrorView = ({
|
|
|
2825
3007
|
returnLabel = "Return to Workspace"
|
|
2826
3008
|
}) => {
|
|
2827
3009
|
if (isBooting || isLoading && !activeData) {
|
|
2828
|
-
return /* @__PURE__ */
|
|
3010
|
+
return /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex items-center justify-center h-screen w-full bg-transparent" }, /* @__PURE__ */ import_react55.default.createElement(PageSpinner, null));
|
|
2829
3011
|
}
|
|
2830
3012
|
if (!isLoading && (!activeData || activeError)) {
|
|
2831
3013
|
const errorString = typeof activeError === "string" ? activeError : JSON.stringify(activeError || "");
|
|
@@ -2836,7 +3018,7 @@ var UniversalErrorView = ({
|
|
|
2836
3018
|
const apiMessage = typeof activeError === "string" && activeError.trim() !== "" ? activeError : null;
|
|
2837
3019
|
let title = "Oops Connection Error";
|
|
2838
3020
|
let description = apiMessage || `We could not load your request. Please check your connection and try again.`;
|
|
2839
|
-
let IconComponent =
|
|
3021
|
+
let IconComponent = import_core_free_icons17.ConfusedIcon;
|
|
2840
3022
|
if (isNotFoundError) {
|
|
2841
3023
|
title = "Oops its not your fault";
|
|
2842
3024
|
description = apiMessage || `We could not reach the ${envName} you just loaded. Our team has been notified.`;
|
|
@@ -2844,7 +3026,7 @@ var UniversalErrorView = ({
|
|
|
2844
3026
|
title = "Access Restricted";
|
|
2845
3027
|
description = apiMessage || `You have insufficient permissions to view this ${envName}. Please contact your administrator.`;
|
|
2846
3028
|
}
|
|
2847
|
-
return /* @__PURE__ */
|
|
3029
|
+
return /* @__PURE__ */ import_react55.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_react55.default.createElement("div", { className: "mb-4 flex justify-center" }, /* @__PURE__ */ import_react55.default.createElement(import_react56.HugeiconsIcon, { icon: IconComponent, size: 48, className: "text-neutral-300" })), /* @__PURE__ */ import_react55.default.createElement("h2", { className: " font-serif text-lg text-black tracking-tight " }, title), /* @__PURE__ */ import_react55.default.createElement("p", { className: "text-xs mt-2 mb-8 text-neutral-500 max-w-sm text-center leading-relaxed" }, description), /* @__PURE__ */ import_react55.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_react55.default.createElement(
|
|
2848
3030
|
"button",
|
|
2849
3031
|
{
|
|
2850
3032
|
onClick: () => window.location.href = returnUrl,
|
|
@@ -2853,14 +3035,14 @@ var UniversalErrorView = ({
|
|
|
2853
3035
|
returnLabel
|
|
2854
3036
|
) : (
|
|
2855
3037
|
// Soft errors (Network timeouts) allow them to retry or optionally retreat
|
|
2856
|
-
/* @__PURE__ */
|
|
3038
|
+
/* @__PURE__ */ import_react55.default.createElement(import_react55.default.Fragment, null, envName.toLowerCase().includes("application") && /* @__PURE__ */ import_react55.default.createElement(
|
|
2857
3039
|
"button",
|
|
2858
3040
|
{
|
|
2859
3041
|
onClick: () => window.location.href = returnUrl,
|
|
2860
3042
|
className: "px-6 py-2 bg-transparent border border-neutral-200 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"
|
|
2861
3043
|
},
|
|
2862
3044
|
"Back Home"
|
|
2863
|
-
), /* @__PURE__ */
|
|
3045
|
+
), /* @__PURE__ */ import_react55.default.createElement(
|
|
2864
3046
|
"button",
|
|
2865
3047
|
{
|
|
2866
3048
|
onClick: onRetry,
|
|
@@ -2875,9 +3057,9 @@ var UniversalErrorView = ({
|
|
|
2875
3057
|
};
|
|
2876
3058
|
|
|
2877
3059
|
// src/components/UniversalLookupPage.tsx
|
|
2878
|
-
var
|
|
2879
|
-
var
|
|
2880
|
-
var
|
|
3060
|
+
var import_react57 = __toESM(require("react"));
|
|
3061
|
+
var import_react58 = require("@hugeicons/react");
|
|
3062
|
+
var import_core_free_icons18 = require("@hugeicons/core-free-icons");
|
|
2881
3063
|
var UniversalLookupPage = ({
|
|
2882
3064
|
headerTitle,
|
|
2883
3065
|
headerDescription,
|
|
@@ -2891,9 +3073,9 @@ var UniversalLookupPage = ({
|
|
|
2891
3073
|
resultContent,
|
|
2892
3074
|
modals
|
|
2893
3075
|
}) => {
|
|
2894
|
-
const [isTypeModalOpen, setIsTypeModalOpen] = (0,
|
|
3076
|
+
const [isTypeModalOpen, setIsTypeModalOpen] = (0, import_react57.useState)(false);
|
|
2895
3077
|
const currentOptionLabel = searchOptions.find((opt) => opt.value === selectedSearchType)?.label || "Select Type";
|
|
2896
|
-
return /* @__PURE__ */
|
|
3078
|
+
return /* @__PURE__ */ import_react57.default.createElement("div", { className: "flex flex-col max-w-3xl rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300 pb-20" }, /* @__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-3 sm:gap-4" }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react57.default.createElement("h1", { className: " font-serif text-xl text-black mb-1 truncate tracking-tight" }, headerTitle), /* @__PURE__ */ import_react57.default.createElement("p", { className: "text-xs text-neutral-500 truncate" }, headerDescription))), /* @__PURE__ */ import_react57.default.createElement("div", { className: "w-full max-w-2xl pb-8" }, /* @__PURE__ */ import_react57.default.createElement("form", { className: "flex flex-col gap-6", onSubmit: onSearch, autoComplete: "off" }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "flex gap-4" }, /* @__PURE__ */ import_react57.default.createElement(
|
|
2897
3079
|
"button",
|
|
2898
3080
|
{
|
|
2899
3081
|
type: "button",
|
|
@@ -2901,7 +3083,7 @@ var UniversalLookupPage = ({
|
|
|
2901
3083
|
className: "mt-2 text-[12px] tracking-widest bg-transparent border-b border-neutral-200 text-black text-left outline-none focus:border-black shrink-0 uppercase"
|
|
2902
3084
|
},
|
|
2903
3085
|
currentOptionLabel
|
|
2904
|
-
), /* @__PURE__ */
|
|
3086
|
+
), /* @__PURE__ */ import_react57.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ import_react57.default.createElement(
|
|
2905
3087
|
TextInput,
|
|
2906
3088
|
{
|
|
2907
3089
|
placeholder: "Enter Exact ID, Email, or Slug...",
|
|
@@ -2909,7 +3091,7 @@ var UniversalLookupPage = ({
|
|
|
2909
3091
|
onChange: onSearchQueryChange,
|
|
2910
3092
|
disabled: isSearching
|
|
2911
3093
|
}
|
|
2912
|
-
))), /* @__PURE__ */
|
|
3094
|
+
))), /* @__PURE__ */ import_react57.default.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ import_react57.default.createElement(
|
|
2913
3095
|
ThreeDActionButton,
|
|
2914
3096
|
{
|
|
2915
3097
|
type: "submit",
|
|
@@ -2917,9 +3099,9 @@ var UniversalLookupPage = ({
|
|
|
2917
3099
|
isLoading: isSearching,
|
|
2918
3100
|
className: "min-w-32"
|
|
2919
3101
|
},
|
|
2920
|
-
/* @__PURE__ */
|
|
3102
|
+
/* @__PURE__ */ import_react57.default.createElement(import_react58.HugeiconsIcon, { icon: import_core_free_icons18.Search01Icon, size: 14, className: "mr-2" }),
|
|
2921
3103
|
" Lookup"
|
|
2922
|
-
)))), resultContent && /* @__PURE__ */
|
|
3104
|
+
)))), resultContent && /* @__PURE__ */ import_react57.default.createElement("div", { className: "w-full max-w-2xl bg-white text-left animate-in fade-in slide-in-from-bottom-4" }, /* @__PURE__ */ import_react57.default.createElement("h3", { className: " font-serif text-[10px] text-neutral-400 tracking-[0.2em] mb-6 uppercase" }, "Entity Record Found"), resultContent), isTypeModalOpen && /* @__PURE__ */ import_react57.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setIsTypeModalOpen(false) }), /* @__PURE__ */ import_react57.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_react57.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react57.default.createElement("h3", { className: " font-serif text-[14px] text-black tracking-tight mb-2" }, "Select Entity Type")), /* @__PURE__ */ import_react57.default.createElement("div", { className: "w-full flex flex-col pl-2 pr-2 pb-2" }, searchOptions.map((option) => /* @__PURE__ */ import_react57.default.createElement(
|
|
2923
3105
|
"button",
|
|
2924
3106
|
{
|
|
2925
3107
|
key: option.value,
|
|
@@ -2930,16 +3112,16 @@ var UniversalLookupPage = ({
|
|
|
2930
3112
|
},
|
|
2931
3113
|
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"}`
|
|
2932
3114
|
},
|
|
2933
|
-
/* @__PURE__ */
|
|
2934
|
-
selectedSearchType === option.value && /* @__PURE__ */
|
|
2935
|
-
))), /* @__PURE__ */
|
|
3115
|
+
/* @__PURE__ */ import_react57.default.createElement("span", { className: "truncate pr-2" }, option.label),
|
|
3116
|
+
selectedSearchType === option.value && /* @__PURE__ */ import_react57.default.createElement("div", null)
|
|
3117
|
+
))), /* @__PURE__ */ import_react57.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react57.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);
|
|
2936
3118
|
};
|
|
2937
3119
|
|
|
2938
3120
|
// src/components/UniversalDirectoryPage.tsx
|
|
2939
|
-
var
|
|
2940
|
-
var
|
|
2941
|
-
var
|
|
2942
|
-
var PageSpinner4 = () => /* @__PURE__ */
|
|
3121
|
+
var import_react59 = __toESM(require("react"));
|
|
3122
|
+
var import_react60 = require("@hugeicons/react");
|
|
3123
|
+
var import_core_free_icons19 = require("@hugeicons/core-free-icons");
|
|
3124
|
+
var PageSpinner4 = () => /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react59.default.createElement(import_react60.HugeiconsIcon, { icon: import_core_free_icons19.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
2943
3125
|
var UniversalDirectoryPage = ({
|
|
2944
3126
|
headerTitle,
|
|
2945
3127
|
headerDescription,
|
|
@@ -2961,33 +3143,33 @@ var UniversalDirectoryPage = ({
|
|
|
2961
3143
|
detailsContent,
|
|
2962
3144
|
modals
|
|
2963
3145
|
}) => {
|
|
2964
|
-
return /* @__PURE__ */
|
|
3146
|
+
return /* @__PURE__ */ import_react59.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_react59.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, currentView === "list" ? /* @__PURE__ */ import_react59.default.createElement(import_react59.default.Fragment, null, /* @__PURE__ */ import_react59.default.createElement("div", { className: "w-full" }, /* @__PURE__ */ import_react59.default.createElement("h1", { className: " font-serif text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ import_react59.default.createElement("p", { className: "text-xs text-neutral-500 mb-6" }, headerDescription), !hideSearch && /* @__PURE__ */ import_react59.default.createElement(
|
|
2965
3147
|
TextInput,
|
|
2966
3148
|
{
|
|
2967
3149
|
placeholder: searchPlaceholder,
|
|
2968
3150
|
value: searchQuery,
|
|
2969
3151
|
onChange: onSearchChange
|
|
2970
3152
|
}
|
|
2971
|
-
)), headerAction && /* @__PURE__ */
|
|
3153
|
+
)), headerAction && /* @__PURE__ */ import_react59.default.createElement("div", { className: "shrink-0 w-full sm:w-auto mt-4 sm:mt-0" }, headerAction)) : /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex flex-col items-start gap-3" }, /* @__PURE__ */ import_react59.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_react59.default.createElement(import_react60.HugeiconsIcon, { icon: import_core_free_icons19.ArrowLeft01Icon, size: 12 }), " Back"))), currentView === "list" && /* @__PURE__ */ import_react59.default.createElement("div", { className: "w-full overflow-hidden pt-2" }, isLoading ? /* @__PURE__ */ import_react59.default.createElement(PageSpinner4, null) : /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react59.default.createElement("div", { className: "divide-y divide-neutral-100" }, items.length === 0 ? /* @__PURE__ */ import_react59.default.createElement(import_react59.default.Fragment, null, /* @__PURE__ */ import_react59.default.createElement("p", { className: "text-xs text-neutral-500 py-6 text-center" }, "No records found.")) : items.map((item) => /* @__PURE__ */ import_react59.default.createElement(
|
|
2972
3154
|
"div",
|
|
2973
3155
|
{
|
|
2974
3156
|
key: item.id,
|
|
2975
3157
|
onClick: () => onRowClick(item.id),
|
|
2976
3158
|
className: "flex items-center justify-between p-4 sm:p-5 hover:bg-neutral-50/50 transition-colors cursor-pointer group min-w-0"
|
|
2977
3159
|
},
|
|
2978
|
-
/* @__PURE__ */
|
|
2979
|
-
item.rightBadge && /* @__PURE__ */
|
|
2980
|
-
))), totalPages > 1 && /* @__PURE__ */
|
|
3160
|
+
/* @__PURE__ */ import_react59.default.createElement("div", { className: "flex items-center gap-3 sm:gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react59.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_react59.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react59.default.createElement("div", { className: "text-sm text-black truncate pr-2" }, item.primaryText), /* @__PURE__ */ import_react59.default.createElement("div", { className: "text-xs text-neutral-500 truncate pr-2 mt-0.5" }, item.secondaryText))),
|
|
3161
|
+
item.rightBadge && /* @__PURE__ */ import_react59.default.createElement("div", { className: "shrink-0 pl-2" }, /* @__PURE__ */ import_react59.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-200 bg-white"}` }, item.rightBadge))
|
|
3162
|
+
))), totalPages > 1 && /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex items-center justify-between p-4 sm:p-5" }, /* @__PURE__ */ import_react59.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em] uppercase" }, "Page ", currentPage, " of ", totalPages), /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react59.default.createElement("button", { onClick: () => onPageChange(currentPage - 1), disabled: currentPage === 1 || isLoading, className: "p-2 border border-neutral-200 rounded-full bg-white text-neutral-500 hover:text-black outline-none disabled:opacity-30" }, /* @__PURE__ */ import_react59.default.createElement(import_react60.HugeiconsIcon, { icon: import_core_free_icons19.ArrowLeft01Icon, size: 14 })), /* @__PURE__ */ import_react59.default.createElement("button", { onClick: () => onPageChange(currentPage + 1), disabled: currentPage >= totalPages || isLoading, className: "p-2 border border-neutral-200 rounded-full bg-white text-neutral-500 hover:text-black outline-none disabled:opacity-30" }, /* @__PURE__ */ import_react59.default.createElement(import_react60.HugeiconsIcon, { icon: import_core_free_icons19.ArrowRight01Icon, size: 14 })))))), currentView === "details" && detailsContent, modals);
|
|
2981
3163
|
};
|
|
2982
3164
|
|
|
2983
3165
|
// src/components/AiApproveDecline.tsx
|
|
2984
|
-
var
|
|
2985
|
-
var
|
|
2986
|
-
var
|
|
3166
|
+
var import_react61 = __toESM(require("react"));
|
|
3167
|
+
var import_react62 = require("@hugeicons/react");
|
|
3168
|
+
var import_core_free_icons20 = require("@hugeicons/core-free-icons");
|
|
2987
3169
|
var AiApproveDecline = ({ suggestionTitle, suggestionValue, onApprove, onDecline, onEdit }) => {
|
|
2988
|
-
const [isEditing, setIsEditing] = (0,
|
|
2989
|
-
const [editVal, setEditVal] = (0,
|
|
2990
|
-
return /* @__PURE__ */
|
|
3170
|
+
const [isEditing, setIsEditing] = (0, import_react61.useState)(false);
|
|
3171
|
+
const [editVal, setEditVal] = (0, import_react61.useState)(typeof suggestionValue === "string" ? suggestionValue : "");
|
|
3172
|
+
return /* @__PURE__ */ import_react61.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_react61.default.createElement("div", null, /* @__PURE__ */ import_react61.default.createElement("span", { className: "text-[10px] tracking-widest text-purple-600 block mb-1 uppercase" }, "AI Suggestion: ", suggestionTitle), !isEditing ? /* @__PURE__ */ import_react61.default.createElement("div", { className: "text-sm text-black" }, suggestionValue) : /* @__PURE__ */ import_react61.default.createElement(
|
|
2991
3173
|
"input",
|
|
2992
3174
|
{
|
|
2993
3175
|
type: "text",
|
|
@@ -2996,45 +3178,45 @@ var AiApproveDecline = ({ suggestionTitle, suggestionValue, onApprove, onDecline
|
|
|
2996
3178
|
className: "w-full text-sm p-2 border-b border-purple-200 bg-transparent outline-none focus:border-purple-400 transition-colors",
|
|
2997
3179
|
autoFocus: true
|
|
2998
3180
|
}
|
|
2999
|
-
)), /* @__PURE__ */
|
|
3181
|
+
)), /* @__PURE__ */ import_react61.default.createElement("div", { className: "flex items-center gap-1 mt-2" }, !isEditing ? /* @__PURE__ */ import_react61.default.createElement(import_react61.default.Fragment, null, /* @__PURE__ */ import_react61.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_react61.default.createElement(import_react62.HugeiconsIcon, { icon: import_core_free_icons20.CheckmarkCircle01Icon, size: 28 })), /* @__PURE__ */ import_react61.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_react61.default.createElement(import_react62.HugeiconsIcon, { icon: import_core_free_icons20.CancelCircleIcon, size: 28 })), onEdit && /* @__PURE__ */ import_react61.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_react61.default.createElement(import_react62.HugeiconsIcon, { icon: import_core_free_icons20.PencilEdit01Icon, size: 18 }))) : /* @__PURE__ */ import_react61.default.createElement(import_react61.default.Fragment, null, /* @__PURE__ */ import_react61.default.createElement("button", { onClick: () => {
|
|
3000
3182
|
onEdit?.(editVal);
|
|
3001
3183
|
setIsEditing(false);
|
|
3002
|
-
}, 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__ */
|
|
3184
|
+
}, 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_react61.default.createElement(import_react62.HugeiconsIcon, { icon: import_core_free_icons20.CheckmarkCircle01Icon, size: 28 })), /* @__PURE__ */ import_react61.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_react61.default.createElement(import_react62.HugeiconsIcon, { icon: import_core_free_icons20.CancelCircleIcon, size: 28 })))));
|
|
3003
3185
|
};
|
|
3004
3186
|
|
|
3005
3187
|
// src/components/AiStageCheck.tsx
|
|
3006
|
-
var
|
|
3007
|
-
var
|
|
3008
|
-
var
|
|
3188
|
+
var import_react63 = __toESM(require("react"));
|
|
3189
|
+
var import_react64 = require("@hugeicons/react");
|
|
3190
|
+
var import_core_free_icons21 = require("@hugeicons/core-free-icons");
|
|
3009
3191
|
var AiStageCheck = ({ tasks }) => {
|
|
3010
|
-
return /* @__PURE__ */
|
|
3192
|
+
return /* @__PURE__ */ import_react63.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_react63.default.createElement("span", { className: "text-[10px] tracking-widest text-purple-600 mb-1 uppercase" }, "AI Processing"), tasks.map((task) => /* @__PURE__ */ import_react63.default.createElement("div", { key: task.id, className: "flex items-center gap-3" }, task.status === "pending" && /* @__PURE__ */ import_react63.default.createElement("div", { className: "w-4 h-4 rounded-full border border-purple-200" }), task.status === "loading" && /* @__PURE__ */ import_react63.default.createElement(import_react64.HugeiconsIcon, { icon: import_core_free_icons21.Loading03Icon, size: 16, className: "animate-spin text-purple-500" }), task.status === "success" && /* @__PURE__ */ import_react63.default.createElement(import_react64.HugeiconsIcon, { icon: import_core_free_icons21.CheckmarkCircle02Icon, size: 16, className: "text-emerald-500" }), task.status === "error" && /* @__PURE__ */ import_react63.default.createElement(import_react64.HugeiconsIcon, { icon: import_core_free_icons21.CancelCircleIcon, size: 16, className: "text-red-500" }), /* @__PURE__ */ import_react63.default.createElement("span", { className: `text-xs transition-colors ${task.status === "success" ? "text-black" : task.status === "loading" ? "text-purple-700" : "text-neutral-500"}` }, task.label))));
|
|
3011
3193
|
};
|
|
3012
3194
|
|
|
3013
3195
|
// src/components/Stagger.tsx
|
|
3014
|
-
var
|
|
3015
|
-
var
|
|
3016
|
-
var
|
|
3196
|
+
var import_react65 = __toESM(require("react"));
|
|
3197
|
+
var import_react66 = require("@hugeicons/react");
|
|
3198
|
+
var import_core_free_icons22 = require("@hugeicons/core-free-icons");
|
|
3017
3199
|
var Stagger = ({ steps, currentStep }) => {
|
|
3018
3200
|
const getIconForStep = (stepName) => {
|
|
3019
3201
|
const lowerName = stepName.toLowerCase();
|
|
3020
|
-
if (lowerName.includes("document")) return
|
|
3021
|
-
if (lowerName.includes("review")) return
|
|
3022
|
-
if (lowerName.includes("submit")) return
|
|
3023
|
-
return
|
|
3202
|
+
if (lowerName.includes("document")) return import_core_free_icons22.Upload01Icon;
|
|
3203
|
+
if (lowerName.includes("review")) return import_core_free_icons22.FileSyncIcon;
|
|
3204
|
+
if (lowerName.includes("submit")) return import_core_free_icons22.CloudUploadIcon;
|
|
3205
|
+
return import_core_free_icons22.Briefcase02Icon;
|
|
3024
3206
|
};
|
|
3025
|
-
return /* @__PURE__ */
|
|
3207
|
+
return /* @__PURE__ */ import_react65.default.createElement("div", { className: "w-full flex items-center justify-between relative z-0" }, /* @__PURE__ */ import_react65.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_react65.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) => {
|
|
3026
3208
|
const isActive = idx === currentStep;
|
|
3027
3209
|
const isPassed = idx < currentStep;
|
|
3028
3210
|
const colorClass = isPassed ? "bg-emerald-500 text-white" : isActive ? "bg-neutral-200 text-neutral-500" : "bg-neutral-200 text-neutral-500";
|
|
3029
|
-
return /* @__PURE__ */
|
|
3211
|
+
return /* @__PURE__ */ import_react65.default.createElement("div", { key: step, className: `w-6 h-6 rounded-full flex items-center justify-center transition-colors duration-300 ${colorClass}` }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: getIconForStep(step), size: 11 }));
|
|
3030
3212
|
}));
|
|
3031
3213
|
};
|
|
3032
3214
|
|
|
3033
3215
|
// src/components/UniversalRegistrationFlow.tsx
|
|
3034
|
-
var
|
|
3216
|
+
var import_react67 = __toESM(require("react"));
|
|
3035
3217
|
var import_react_hot_toast7 = __toESM(require("react-hot-toast"));
|
|
3036
|
-
var
|
|
3037
|
-
var
|
|
3218
|
+
var import_react68 = require("@hugeicons/react");
|
|
3219
|
+
var import_core_free_icons23 = require("@hugeicons/core-free-icons");
|
|
3038
3220
|
var MACRO_STEPS = ["Details", "Documents", "Review", "Submit"];
|
|
3039
3221
|
var NIGERIAN_STATES = ["Abia", "Adamawa", "Akwa Ibom", "Anambra", "Bauchi", "Bayelsa", "Benue", "Borno", "Cross River", "Delta", "Ebonyi", "Edo", "Ekiti", "Enugu", "FCT - Abuja", "Gombe", "Imo", "Jigawa", "Kaduna", "Kano", "Katsina", "Kebbi", "Kogi", "Kwara", "Lagos", "Nasarawa", "Niger", "Ogun", "Ondo", "Osun", "Oyo", "Plateau", "Rivers", "Sokoto", "Taraba", "Yobe", "Zamfara"];
|
|
3040
3222
|
var MEMBER_ROLES = ["Director Only", "Shareholder Only", "Both Director & Shareholder"];
|
|
@@ -3047,12 +3229,12 @@ var UniversalRegistrationFlow = ({
|
|
|
3047
3229
|
onRedirectToBilling,
|
|
3048
3230
|
onRedirectToApplication
|
|
3049
3231
|
}) => {
|
|
3050
|
-
const [isBooting, setIsBooting] = (0,
|
|
3051
|
-
const [macroStep, setMacroStep] = (0,
|
|
3052
|
-
const [appStatus, setAppStatus] = (0,
|
|
3053
|
-
const [isAbortModalOpen, setIsAbortModalOpen] = (0,
|
|
3054
|
-
const [isAborting, setIsAborting] = (0,
|
|
3055
|
-
const [formState, setFormState] = (0,
|
|
3232
|
+
const [isBooting, setIsBooting] = (0, import_react67.useState)(true);
|
|
3233
|
+
const [macroStep, setMacroStep] = (0, import_react67.useState)(0);
|
|
3234
|
+
const [appStatus, setAppStatus] = (0, import_react67.useState)("");
|
|
3235
|
+
const [isAbortModalOpen, setIsAbortModalOpen] = (0, import_react67.useState)(false);
|
|
3236
|
+
const [isAborting, setIsAborting] = (0, import_react67.useState)(false);
|
|
3237
|
+
const [formState, setFormState] = (0, import_react67.useState)({
|
|
3056
3238
|
natureApproved: false,
|
|
3057
3239
|
nameApproved: false,
|
|
3058
3240
|
addressApproved: false,
|
|
@@ -3063,13 +3245,13 @@ var UniversalRegistrationFlow = ({
|
|
|
3063
3245
|
passportApproved: false,
|
|
3064
3246
|
signatureApproved: false
|
|
3065
3247
|
});
|
|
3066
|
-
const idRef = (0,
|
|
3067
|
-
const passportRef = (0,
|
|
3068
|
-
const signatureRef = (0,
|
|
3069
|
-
const other1Ref = (0,
|
|
3070
|
-
const other2Ref = (0,
|
|
3071
|
-
const other3Ref = (0,
|
|
3072
|
-
const [formData, setFormData] = (0,
|
|
3248
|
+
const idRef = (0, import_react67.useRef)(null);
|
|
3249
|
+
const passportRef = (0, import_react67.useRef)(null);
|
|
3250
|
+
const signatureRef = (0, import_react67.useRef)(null);
|
|
3251
|
+
const other1Ref = (0, import_react67.useRef)(null);
|
|
3252
|
+
const other2Ref = (0, import_react67.useRef)(null);
|
|
3253
|
+
const other3Ref = (0, import_react67.useRef)(null);
|
|
3254
|
+
const [formData, setFormData] = (0, import_react67.useState)({
|
|
3073
3255
|
businessDesc: "",
|
|
3074
3256
|
natureOfBusiness: null,
|
|
3075
3257
|
proposedName: "",
|
|
@@ -3096,22 +3278,22 @@ var UniversalRegistrationFlow = ({
|
|
|
3096
3278
|
otherDoc3Url: "",
|
|
3097
3279
|
otherDoc3Meta: null
|
|
3098
3280
|
});
|
|
3099
|
-
const [activeModal, setActiveModal] = (0,
|
|
3100
|
-
const [iAgree, setIAgree] = (0,
|
|
3101
|
-
const [isAnalyzingNature, setIsAnalyzingNature] = (0,
|
|
3102
|
-
const [suggestedNature, setSuggestedNature] = (0,
|
|
3103
|
-
const [isCheckingQualifier, setIsCheckingQualifier] = (0,
|
|
3104
|
-
const [qualifierCheckResult, setQualifierCheckResult] = (0,
|
|
3105
|
-
const [isCheckingName, setIsCheckingName] = (0,
|
|
3106
|
-
const [nameCheckResult, setNameCheckResult] = (0,
|
|
3107
|
-
const [globalExtractingId, setGlobalExtractingId] = (0,
|
|
3108
|
-
const [globalUploadingPassport, setGlobalUploadingPassport] = (0,
|
|
3109
|
-
const [globalUploadingSignature, setGlobalUploadingSignature] = (0,
|
|
3110
|
-
const [isUploadingOther1, setIsUploadingOther1] = (0,
|
|
3111
|
-
const [isUploadingOther2, setIsUploadingOther2] = (0,
|
|
3112
|
-
const [isUploadingOther3, setIsUploadingOther3] = (0,
|
|
3113
|
-
const [aiTasks, setAiTasks] = (0,
|
|
3114
|
-
const [isSubmitting, setIsSubmitting] = (0,
|
|
3281
|
+
const [activeModal, setActiveModal] = (0, import_react67.useState)({ isOpen: false, type: null, memberIndex: null });
|
|
3282
|
+
const [iAgree, setIAgree] = (0, import_react67.useState)(false);
|
|
3283
|
+
const [isAnalyzingNature, setIsAnalyzingNature] = (0, import_react67.useState)(false);
|
|
3284
|
+
const [suggestedNature, setSuggestedNature] = (0, import_react67.useState)(null);
|
|
3285
|
+
const [isCheckingQualifier, setIsCheckingQualifier] = (0, import_react67.useState)(false);
|
|
3286
|
+
const [qualifierCheckResult, setQualifierCheckResult] = (0, import_react67.useState)(null);
|
|
3287
|
+
const [isCheckingName, setIsCheckingName] = (0, import_react67.useState)(false);
|
|
3288
|
+
const [nameCheckResult, setNameCheckResult] = (0, import_react67.useState)(null);
|
|
3289
|
+
const [globalExtractingId, setGlobalExtractingId] = (0, import_react67.useState)(false);
|
|
3290
|
+
const [globalUploadingPassport, setGlobalUploadingPassport] = (0, import_react67.useState)(false);
|
|
3291
|
+
const [globalUploadingSignature, setGlobalUploadingSignature] = (0, import_react67.useState)(false);
|
|
3292
|
+
const [isUploadingOther1, setIsUploadingOther1] = (0, import_react67.useState)(false);
|
|
3293
|
+
const [isUploadingOther2, setIsUploadingOther2] = (0, import_react67.useState)(false);
|
|
3294
|
+
const [isUploadingOther3, setIsUploadingOther3] = (0, import_react67.useState)(false);
|
|
3295
|
+
const [aiTasks, setAiTasks] = (0, import_react67.useState)([]);
|
|
3296
|
+
const [isSubmitting, setIsSubmitting] = (0, import_react67.useState)(false);
|
|
3115
3297
|
const isReadOnly = ["PENDING", "AWAITING_PAYMENT", "COMPLETED"].includes(appStatus);
|
|
3116
3298
|
const isAnyUploading = globalExtractingId || globalUploadingPassport || globalUploadingSignature || isUploadingOther1 || isUploadingOther2 || isUploadingOther3;
|
|
3117
3299
|
const baseApi = async (action, payload = {}) => {
|
|
@@ -3126,7 +3308,7 @@ var UniversalRegistrationFlow = ({
|
|
|
3126
3308
|
return { success: false, error: "Network communication failed." };
|
|
3127
3309
|
}
|
|
3128
3310
|
};
|
|
3129
|
-
(0,
|
|
3311
|
+
(0, import_react67.useEffect)(() => {
|
|
3130
3312
|
baseApi("progress_load").then((data) => {
|
|
3131
3313
|
if (data.success && data.data) {
|
|
3132
3314
|
const meta = data.data;
|
|
@@ -3602,23 +3784,23 @@ var UniversalRegistrationFlow = ({
|
|
|
3602
3784
|
const isStep0Valid = type === "company" ? formState.natureApproved && formState.nameApproved && formState.addressApproved && formState.membersDetailsApproved : formState.natureApproved && formState.nameApproved && formState.addressApproved && formState.ownerApproved;
|
|
3603
3785
|
const isStep1Valid = type === "company" ? formState.membersDocsApproved : formState.idApproved && formState.passportApproved && formState.signatureApproved;
|
|
3604
3786
|
const titleText = type === "company" ? "Company Incorporation (LLC)" : "Business Name Registration";
|
|
3605
|
-
if (isBooting) return /* @__PURE__ */
|
|
3787
|
+
if (isBooting) return /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex justify-center py-20" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Loading03Icon, size: 32, className: "animate-spin text-black" }));
|
|
3606
3788
|
if (!["DRAFT", "QUEUED", "REJECTED"].includes(appStatus) && appStatus !== "") {
|
|
3607
|
-
return /* @__PURE__ */
|
|
3789
|
+
return /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-full max-w-3xl mx-auto bg-white rounded-2xl p-6 sm:p-10 flex flex-col items-center justify-center text-center gap-5 animate-in fade-in slide-in-from-bottom-2 duration-500 mb-20 py-24" }, appStatus === "COMPLETED" ? /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null, /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-20 h-20 bg-neutral-50 text-neutral-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.CheckmarkBadge01Icon, size: 35 })), /* @__PURE__ */ import_react67.default.createElement("h2", { className: "text-xl font-serif text-black" }, "Registration Completed"), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application has been successfully verified and registered.")) : appStatus === "PENDING" ? /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null, /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-20 h-20 bg-neutral-50 text-neutral-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.HourglassIcon, size: 35, className: "animate-spin" })), /* @__PURE__ */ import_react67.default.createElement("h2", { className: "text-xl font-serif text-black" }, "Application is Pending"), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application is currently pending review.")) : appStatus === "AWAITING_PAYMENT" ? /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null, /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-20 h-20 bg-amber-50 text-amber-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.HourglassIcon, size: 35, className: "animate-pulse" })), /* @__PURE__ */ import_react67.default.createElement("h2", { className: "text-xl font-serif text-black" }, "Awaiting Payment"), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application is complete and awaiting government fee settlement. Please go to the Billing tab to authorize payment."), /* @__PURE__ */ import_react67.default.createElement("div", { className: "mt-6 flex flex-col items-center gap-3" }, /* @__PURE__ */ import_react67.default.createElement("button", { onClick: onRedirectToBilling, className: "px-8 py-3 bg-black text-white text-[11px] tracking-widest rounded-full hover:bg-neutral-800 outline-none" }, "Go to Billing & Invoices"), /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => setIsAbortModalOpen(true), className: "px-8 py-3 border border-neutral-200 text-neutral-600 text-[11px] tracking-widest rounded-full hover:bg-neutral-50 outline-none" }, "Abort & Edit Application"))) : /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null, /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-20 h-20 bg-neutral-50 text-neutral-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.HourglassIcon, size: 35 })), /* @__PURE__ */ import_react67.default.createElement("h2", { className: "text-xl font-serif text-black" }, "Application Submitted"), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application is currently ", appStatus.replace(/_/g, " ").toLowerCase(), "."), ["AWAITING_PAYMENT", "READY_FOR_SUBMISSION", "AWAITING_CONFIRMATION"].includes(appStatus) && /* @__PURE__ */ import_react67.default.createElement("div", { className: "mt-6 flex flex-col items-center gap-3" }, /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => setIsAbortModalOpen(true), className: "px-8 py-3 border border-neutral-200 text-neutral-600 text-[11px] tracking-widest rounded-full hover:bg-neutral-50 outline-none" }, "Abort Application"))), isAbortModalOpen && /* @__PURE__ */ import_react67.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isAborting && setIsAbortModalOpen(false) }), /* @__PURE__ */ import_react67.default.createElement("div", { className: "relative w-100 bg-white shadow-2xl rounded-3xl flex flex-col overflow-hidden animate-in zoom-in-95 duration-200 text-left" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "p-6 flex flex-col gap-4 text-center" }, /* @__PURE__ */ import_react67.default.createElement("h3", { className: "text-[17px] font-serif text-black tracking-tight" }, "Abort Application?"), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-[12px] text-neutral-500 leading-relaxed" }, "Are you sure you want to abort? If you have already made a payment, returning to draft may cause issues. Your invoice will be deleted.")), /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-full flex " }, /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => setIsAbortModalOpen(false), disabled: isAborting, className: "flex-1 py-4 text-[13px] text-neutral-500 hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50" }, "Cancel"), /* @__PURE__ */ import_react67.default.createElement("button", { onClick: handleAbort, disabled: isAborting, className: "flex-1 py-4 text-[13px] text-red-500 hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50" }, isAborting ? "Aborting..." : "Yes, Abort")))));
|
|
3608
3790
|
}
|
|
3609
|
-
return /* @__PURE__ */
|
|
3791
|
+
return /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-full max-w-3xl mx-auto bg-white rounded-2xl p-6 sm:p-10 flex flex-col gap-10 animate-in fade-in slide-in-from-bottom-2 duration-500 mb-20" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-8" }, /* @__PURE__ */ import_react67.default.createElement("div", null, /* @__PURE__ */ import_react67.default.createElement("h2", { className: "text-xl font-serif text-black tracking-tight mb-1" }, titleText), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-sm text-neutral-500" }, "Answer the questions below to build your official application.")), /* @__PURE__ */ import_react67.default.createElement("div", { className: "px-2" }, /* @__PURE__ */ import_react67.default.createElement(Stagger, { steps: MACRO_STEPS, currentStep: macroStep }))), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-8" }, macroStep === 0 && /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react67.default.createElement("h3", { className: "text-sm " }, "What does your ", type === "company" ? "company" : "business", " do?")), !formState.natureApproved ? /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-3 " }, /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: type === "company" ? "Company Description" : "Business Description", placeholder: "e.g. We provide professional services to clients.", value: formData.businessDesc, onChange: (v) => setFormData({ ...formData, businessDesc: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react67.default.createElement(ThreeDActionButton, { onClick: handleAnalyzeNature, disabled: formData.businessDesc.length < 5 || isAnalyzingNature || isReadOnly, isLoading: isAnalyzingNature, className: "w-fit" }, "Analyze Nature")), isAnalyzingNature && /* @__PURE__ */ import_react67.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react67.default.createElement(AiStageCheck, { tasks: [{ id: "1", label: "Matching with Official Categories...", status: "loading" }] })), suggestedNature && /* @__PURE__ */ import_react67.default.createElement("div", { className: " mt-2 animate-in fade-in" }, /* @__PURE__ */ import_react67.default.createElement(AiApproveDecline, { suggestionTitle: "Classification Found", suggestionValue: /* @__PURE__ */ import_react67.default.createElement("div", null, /* @__PURE__ */ import_react67.default.createElement("p", { className: " text-black" }, suggestedNature.specificLabel), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-neutral-400 mt-1" }, "Category: ", suggestedNature.categoryLabel)), onApprove: () => {
|
|
3610
3792
|
const newForm = { ...formData, natureOfBusiness: suggestedNature };
|
|
3611
3793
|
setFormData(newForm);
|
|
3612
3794
|
approveSection("natureApproved", newForm);
|
|
3613
|
-
}, onDecline: () => setSuggestedNature(null) }))) : /* @__PURE__ */
|
|
3795
|
+
}, onDecline: () => setSuggestedNature(null) }))) : /* @__PURE__ */ import_react67.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "pr-4" }, /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-sm text-black" }, formData.natureOfBusiness?.specificLabel), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-neutral-400 mt-1" }, formData.businessDesc)), !isReadOnly && /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => editSection("natureApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.PencilEdit01Icon, size: 16 })))), formState.natureApproved && /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react67.default.createElement("h3", { className: "text-sm " }, "What name would you like to register?")), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-neutral-400 -mt-2" }, "Provide two options. We will verify availability against the official registry."), !formState.nameApproved ? /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "Proposed Name 1 (Preferred)", value: formData.proposedName, onChange: (v) => setFormData({ ...formData, proposedName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "Proposed Name 2 (Alternative)", value: formData.proposedName2, onChange: (v) => setFormData({ ...formData, proposedName2: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react67.default.createElement(ThreeDActionButton, { onClick: () => handleCheckNames(formData.proposedName), disabled: !formData.proposedName || !formData.proposedName2 || isCheckingName || isCheckingQualifier || isReadOnly, isLoading: isCheckingQualifier || isCheckingName, className: "w-fit" }, "Check Availability")), (isCheckingQualifier || isCheckingName) && /* @__PURE__ */ import_react67.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react67.default.createElement(AiStageCheck, { tasks: [{ id: "1", label: "AI Qualifier Pre-check...", status: isCheckingQualifier ? "loading" : "success" }, { id: "2", label: "Checking Official Registry Database...", status: isCheckingName ? "loading" : "pending" }, { id: "3", label: "Fallback Checking Public Database...", status: isCheckingName ? "loading" : "pending" }, { id: "4", label: "Validation Status...", status: isCheckingName ? "loading" : "pending" }] })), qualifierCheckResult && /* @__PURE__ */ import_react67.default.createElement("div", { className: "mt-2 animate-in fade-in" }, /* @__PURE__ */ import_react67.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_react67.default.createElement("div", null, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-[10px] tracking-widest text-purple-600 block mb-1" }, "AI Suggestion: Structural Qualifier Missing"), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-sm text-black mb-3" }, "Nigerian registrations require a structural qualifier to be approved."), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-2" }, (qualifierCheckResult.suggestions || []).map((alt, i) => /* @__PURE__ */ import_react67.default.createElement("button", { key: i, onClick: () => setFormData({ ...formData, proposedName: alt }), className: "text-left px-4 py-2 border border-neutral-200 rounded-full hover:border-black text-sm transition-colors outline-none" }, alt)))), /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => setQualifierCheckResult(null), className: "w-fit text-[11px] tracking-widest text-neutral-500 hover:text-black transition-colors mt-2 outline-none" }, "Edit Name Manually"))), nameCheckResult && /* @__PURE__ */ import_react67.default.createElement("div", { className: " mt-2 animate-in fade-in" }, nameCheckResult.status === "APPROVED" || nameCheckResult.status === "APPROVED_WARNING" || nameCheckResult.status === "SKIPPED" ? /* @__PURE__ */ import_react67.default.createElement(AiApproveDecline, { suggestionTitle: nameCheckResult.status === "APPROVED" ? "Name Available!" : "Fallback Approval", suggestionValue: /* @__PURE__ */ import_react67.default.createElement("div", null, /* @__PURE__ */ import_react67.default.createElement("p", { className: `mb-1 ${nameCheckResult.status === "APPROVED" ? "text-emerald-600 " : "text-orange-500 "}` }, nameCheckResult.status === "APPROVED" ? "Excellent chance of approval." : "Validation Bypassed / Fallback."), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-neutral-600" }, nameCheckResult.message), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-neutral-600 mt-2 " }, "Proposed Option: ", nameCheckResult.approvedOption)), onApprove: () => {
|
|
3614
3796
|
const newForm = { ...formData, approvedName: nameCheckResult.approvedOption };
|
|
3615
3797
|
setFormData(newForm);
|
|
3616
3798
|
approveSection("nameApproved", newForm);
|
|
3617
|
-
}, onDecline: () => setNameCheckResult(null) }) : /* @__PURE__ */
|
|
3618
|
-
}, disabled: isReadOnly || isSubmitting })), /* @__PURE__ */
|
|
3619
|
-
}, disabled: isReadOnly || isSubmitting }), member.role !== "Director Only" && /* @__PURE__ */
|
|
3620
|
-
}, disabled: isReadOnly || isSubmitting }), /* @__PURE__ */
|
|
3621
|
-
}, disabled: isReadOnly || isSubmitting })))), /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center justify-between mt-2" }, !isReadOnly && /* @__PURE__ */ import_react68.default.createElement("button", { onClick: addCompanyMember, className: "px-6 py-2 bg-white border border-neutral-200 text-black text-[11px] tracking-widest rounded-full hover:bg-neutral-50 transition-colors outline-none" }, "+ Add Member"), /* @__PURE__ */ import_react68.default.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDetailsApproved"), disabled: !areCompanyMembersValid() || isReadOnly, className: "w-fit" }, "Confirm Members"))) : /* @__PURE__ */ import_react68.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react68.default.createElement("div", null, /* @__PURE__ */ import_react68.default.createElement("p", { className: "text-sm text-black" }, formData.members.length, " Member(s) Registered"), /* @__PURE__ */ import_react68.default.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, "Total Shares: 100% Verified.")), !isReadOnly && /* @__PURE__ */ import_react68.default.createElement("button", { onClick: () => editSection("membersDetailsApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.PencilEdit01Icon, size: 16 })))), formState.addressApproved && type === "business" && /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react68.default.createElement("h3", { className: "text-sm " }, "Who owns the business?")), /* @__PURE__ */ import_react68.default.createElement("p", { className: "text-xs text-neutral-400 -mt-2" }, "Provide basic contact info. We will extract your DOB and ID number automatically in the next step."), !formState.ownerApproved ? /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ import_react68.default.createElement(TextInput, { label: "Full Name", value: formData.ownerName, onChange: (v) => setFormData({ ...formData, ownerName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react68.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react68.default.createElement(NumberInput, { label: "Phone Number", value: formData.ownerPhone, onChange: (v) => setFormData({ ...formData, ownerPhone: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react68.default.createElement(TextInput, { label: "Email Address", value: formData.ownerEmail, onChange: (v) => setFormData({ ...formData, ownerEmail: v }), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react68.default.createElement(ThreeDActionButton, { onClick: () => approveSection("ownerApproved"), disabled: !formData.ownerName || !formData.ownerPhone || !formData.ownerEmail || isReadOnly, className: "w-fit mt-2" }, "Confirm Owner Details")) : /* @__PURE__ */ import_react68.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react68.default.createElement("div", null, /* @__PURE__ */ import_react68.default.createElement("p", { className: "text-sm text-black" }, formData.ownerName), /* @__PURE__ */ import_react68.default.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, formData.ownerEmail, " \u2022 ", formData.ownerPhone)), !isReadOnly && /* @__PURE__ */ import_react68.default.createElement("button", { onClick: () => editSection("ownerApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.PencilEdit01Icon, size: 16 })))), /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ import_react68.default.createElement("button", { onClick: handleBack, className: "flex items-center gap-2 px-6 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.ArrowLeft01Icon, size: 14 }), " Close"), /* @__PURE__ */ import_react68.default.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep0Valid, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 1 && /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, type === "company" ? /* @__PURE__ */ import_react68.default.createElement(import_react68.default.Fragment, null, /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ import_react68.default.createElement("h3", { className: "text-sm text-black" }, "Member Identity Documents"), /* @__PURE__ */ import_react68.default.createElement("p", { className: "text-xs text-neutral-500 leading-relaxed" }, "Upload valid means of identification, passport photographs, and signatures for every director and shareholder.")), !formState.membersDocsApproved ? /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex flex-col gap-6" }, formData.members.map((member, i) => /* @__PURE__ */ import_react68.default.createElement("div", { key: member.id, className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react68.default.createElement("span", { className: "text-[11px] tracking-widest text-black mb-1" }, member.fullName || `Member ${i + 1}`, " ", /* @__PURE__ */ import_react68.default.createElement("span", { className: "text-neutral-400 ml-2" }, "(", member.role, ")")), /* @__PURE__ */ import_react68.default.createElement("input", { id: `id-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "id"), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react68.default.createElement("input", { id: `pass-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "passport"), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react68.default.createElement("input", { id: `sig-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "signature"), disabled: isReadOnly || isAnyUploading }), !member.idExtractedData && !globalExtractingId ? /* @__PURE__ */ import_react68.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`id-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-200 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Valid ID (NIN, License, Voter's Card)") : globalExtractingId && !member.idExtractedData ? /* @__PURE__ */ import_react68.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react68.default.createElement(AiStageCheck, { tasks: aiTasks })) : member.idExtractedData ? /* @__PURE__ */ import_react68.default.createElement("div", { className: " mt-2 animate-in fade-in border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white p-5 rounded-xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react68.default.createElement("div", null, /* @__PURE__ */ import_react68.default.createElement("span", { className: "text-[10px] tracking-widest text-purple-600 block mb-2" }, "Review Extracted ID"), /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react68.default.createElement(TextInput, { label: "Full Name on ID", value: member.idExtractedData.fullName, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, fullName: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react68.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react68.default.createElement(TextInput, { label: "ID Number", value: member.idExtractedData.idNumber, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, idNumber: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react68.default.createElement(TextInput, { label: "Date of Birth", value: member.idExtractedData.dob, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, dob: v }), disabled: isReadOnly || isAnyUploading })))), /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center gap-2 mt-2" }, !isReadOnly && /* @__PURE__ */ import_react68.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "id"), disabled: isAnyUploading, className: "px-6 py-2 bg-white border border-neutral-200 text-neutral-500 text-[11px] rounded-full tracking-widest hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, "Delete & Re-upload ID"))) : null, !member.passportFileUrl && !globalUploadingPassport ? /* @__PURE__ */ import_react68.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`pass-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-200 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !member.passportFileUrl ? /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-200 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : member.passportFileUrl ? /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ import_react68.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "passport"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.Delete02Icon, size: 16 }))) : null, !member.signatureFileUrl && !globalUploadingSignature ? /* @__PURE__ */ import_react68.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`sig-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-200 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !member.signatureFileUrl ? /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-200 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : member.signatureFileUrl ? /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ import_react68.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "signature"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.Delete02Icon, size: 16 }))) : null)), /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ import_react68.default.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDocsApproved"), disabled: !areCompanyMemberDocsValid() || isReadOnly || isAnyUploading, className: "w-fit" }, "Confirm All Documents"))) : /* @__PURE__ */ import_react68.default.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ import_react68.default.createElement("div", null, /* @__PURE__ */ import_react68.default.createElement("p", { className: "text-sm text-emerald-800" }, "Documents Uploaded"), /* @__PURE__ */ import_react68.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted.")), !isReadOnly && /* @__PURE__ */ import_react68.default.createElement("button", { onClick: () => editSection("membersDocsApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.PencilEdit01Icon, size: 16 })))) : /* @__PURE__ */ import_react68.default.createElement(import_react68.default.Fragment, null, /* @__PURE__ */ import_react68.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: idRef, onChange: (e) => handleBusinessUpload(e, "id"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react68.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: passportRef, onChange: (e) => handleBusinessUpload(e, "passport"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react68.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: signatureRef, onChange: (e) => handleBusinessUpload(e, "signature"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center gap-2 text-black" }, /* @__PURE__ */ import_react68.default.createElement("h3", { className: "text-sm " }, "Upload Means of Identification")), /* @__PURE__ */ import_react68.default.createElement("p", { className: "text-xs text-neutral-500 -mt-2" }, "Upload your NIN, Driver's License, Voter's Card, or Int'l Passport (JPG/PNG/WEBP)."), !formState.idApproved ? /* @__PURE__ */ import_react68.default.createElement(import_react68.default.Fragment, null, /* @__PURE__ */ import_react68.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && idRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `w-full h-32 border border-neutral-200 rounded-full flex flex-col items-center justify-center gap-2 transition-colors outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "hover:bg-neutral-50 text-black"}` }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.Upload01Icon, size: 24, className: "text-neutral-400" }), /* @__PURE__ */ import_react68.default.createElement("span", { className: "text-xs" }, "Select ID Image to Upload")), globalExtractingId && /* @__PURE__ */ import_react68.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react68.default.createElement(AiStageCheck, { tasks: aiTasks })), formData.idExtractedData && /* @__PURE__ */ import_react68.default.createElement("div", { className: " mt-2 animate-in fade-in 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_react68.default.createElement("div", null, /* @__PURE__ */ import_react68.default.createElement("span", { className: "text-[10px] tracking-widest text-purple-600 block mb-2" }, "Review AI Extracted Data"), /* @__PURE__ */ import_react68.default.createElement("p", { className: "text-xs text-neutral-500 mb-4" }, "Please verify the extracted information and correct any OCR mistakes before approving."), /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react68.default.createElement(TextInput, { label: "Full Name on ID", value: formData.idExtractedData.fullName, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, fullName: v } })), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react68.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react68.default.createElement(TextInput, { label: "ID Number", value: formData.idExtractedData.idNumber, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, idNumber: v } })), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react68.default.createElement(TextInput, { label: "Date of Birth (YYYY-MM-DD)", value: formData.idExtractedData.dob, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, dob: v } })), disabled: isReadOnly || isAnyUploading })))), /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center gap-2 mt-2" }, /* @__PURE__ */ import_react68.default.createElement(ThreeDActionButton, { onClick: () => approveSection("idApproved"), disabled: isAnyUploading || isReadOnly, className: "w-fit shrink-0" }, "Approve Data"), !isReadOnly && /* @__PURE__ */ import_react68.default.createElement("button", { onClick: () => deleteBusinessDocument("id"), disabled: isAnyUploading, className: "px-6 py-2 bg-white border border-neutral-200 text-neutral-500 text-[11px] rounded-full tracking-widest hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, "Delete & Re-upload")))) : /* @__PURE__ */ import_react68.default.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ import_react68.default.createElement("div", null, /* @__PURE__ */ import_react68.default.createElement("p", { className: "text-sm text-emerald-800" }, "ID Document Verified"), /* @__PURE__ */ import_react68.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted and stored.")), !isReadOnly && /* @__PURE__ */ import_react68.default.createElement("button", { onClick: () => editSection("idApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.PencilEdit01Icon, size: 16 })))), /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex flex-col gap-3 " }, !formState.passportApproved && !globalUploadingPassport ? /* @__PURE__ */ import_react68.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && passportRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `flex items-center gap-3 p-4 border border-neutral-200 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}` }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !formData.passportFileUrl ? /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-200 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ import_react68.default.createElement("button", { onClick: () => deleteBusinessDocument("passport"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.Delete02Icon, size: 16 }))), !formState.signatureApproved && !globalUploadingSignature ? /* @__PURE__ */ import_react68.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && signatureRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `flex items-center gap-3 p-4 border border-neutral-200 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}` }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !formData.signatureFileUrl ? /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-200 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ import_react68.default.createElement("button", { onClick: () => deleteBusinessDocument("signature"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react68.default.createElement(import_react69.HugeiconsIcon, { icon: import_core_free_icons24.Delete02Icon, size: 16 })))))), /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex flex-col gap-4 pt-6 border-t border-neutral-200 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react68.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other1Ref, onChange: (e) => handleOptionalUpload(e, "other1"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react68.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other2Ref, onChange: (e) => handleOptionalUpload(e, "other2"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react68.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other3Ref, onChange: (e) => handleOptionalUpload(e, "other3"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex flex-col gap-1 mb-2" }, /* @__PURE__ */ import_react68.default.createElement("h3", { className: "text-sm text-black" }, "Additional Documents (Optional)"), /* @__PURE__ */ import_react68.default.createElement("p", { className: "text-xs text-neutral-500 leading-relaxed" }, "If your ", type === "company" ? "company" : "business", " involves regulated professional services, please upload relevant licenses, certificates, or permits here (up to 3 documents).")), /* @__PURE__ */ import_react68.default.createElement("div", { className: "flex flex-col gap-3" }, [1, 2, 3].map((num) => {
|
|
3799
|
+
}, onDecline: () => setNameCheckResult(null) }) : /* @__PURE__ */ import_react67.default.createElement("div", { className: "border border-red-100 bg-linear-to-bl from-red-50/80 via-white to-white p-5 rounded-2xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react67.default.createElement("div", null, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-[10px] tracking-widest text-red-600 block mb-1" }, "Registry Conflict Detected"), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-sm text-black mb-3" }, nameCheckResult.message), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-2" }, (nameCheckResult.alternatives || []).map((alt, i) => /* @__PURE__ */ import_react67.default.createElement("button", { key: i, onClick: () => setFormData({ ...formData, proposedName: alt }), className: "text-left px-4 py-2 border border-neutral-200 rounded-full hover:border-black text-sm transition-colors outline-none" }, alt)))), /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => setNameCheckResult(null), className: "w-fit text-[11px] tracking-widest text-neutral-500 hover:text-black transition-colors mt-2 outline-none" }, "Try New Name")))) : /* @__PURE__ */ import_react67.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react67.default.createElement("div", null, /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-sm text-black" }, formData.approvedName), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Verified against registry")), !isReadOnly && /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => editSection("nameApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.PencilEdit01Icon, size: 16 })))), formState.nameApproved && /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react67.default.createElement("h3", { className: "text-sm " }, "Where is your head office located?")), !formState.addressApproved ? /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "Street Address", value: formData.address, onChange: (v) => setFormData({ ...formData, address: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react67.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "City", value: formData.city, onChange: (v) => setFormData({ ...formData, city: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "State", value: formData.state, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "state", memberIndex: null, isGlobalState: true }), placeholder: "Select State", onChange: () => {
|
|
3800
|
+
}, disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react67.default.createElement(ThreeDActionButton, { onClick: () => approveSection("addressApproved"), disabled: !formData.address || !formData.city || !formData.state || isReadOnly, className: "w-fit mt-2" }, "Confirm Address")) : /* @__PURE__ */ import_react67.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-sm text-neutral-500" }, formData.address, ", ", formData.city, ", ", formData.state), !isReadOnly && /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => editSection("addressApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.PencilEdit01Icon, size: 16 })))), formState.addressApproved && type === "company" && /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center justify-between gap-2 text-black" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ import_react67.default.createElement("h3", { className: "text-sm " }, "Directors & Shareholders")), !formState.membersDetailsApproved && /* @__PURE__ */ import_react67.default.createElement("div", { className: `text-xs px-3 py-1 rounded-full ${getCompanyTotalShares() === 100 ? "bg-emerald-50 text-emerald-600" : "bg-red-50 text-red-500"}` }, "Total Shares: ", getCompanyTotalShares(), "%")), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-neutral-400 -mt-2" }, "Provide details for all individuals. Ensure total share percentage equals 100%."), !formState.membersDetailsApproved ? /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-6 " }, formData.members.map((member, i) => /* @__PURE__ */ import_react67.default.createElement("div", { key: member.id, className: "flex flex-col gap-4 border border-neutral-200 p-5 rounded-2xl bg-neutral-50/30" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex justify-between items-center mb-1" }, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-[10px] tracking-widest text-neutral-400" }, "Member ", i + 1), formData.members.length > 1 && !isReadOnly && /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => removeCompanyMember(i), className: "text-red-500 text-xs hover:text-red-600" }, "Remove")), /* @__PURE__ */ import_react67.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "Role", value: member.role, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "role", memberIndex: i }), onChange: () => {
|
|
3801
|
+
}, disabled: isReadOnly || isSubmitting }), member.role !== "Director Only" && /* @__PURE__ */ import_react67.default.createElement(NumberInput, { label: "Share Percentage (%)", value: member.sharePercentage, onChange: (v) => updateCompanyMemberInfo(i, "sharePercentage", v), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "Full Name", value: member.fullName, onChange: (v) => updateCompanyMemberInfo(i, "fullName", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react67.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react67.default.createElement(NumberInput, { label: "Phone Number", value: member.phone, onChange: (v) => updateCompanyMemberInfo(i, "phone", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "Email Address", value: member.email, onChange: (v) => updateCompanyMemberInfo(i, "email", v), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "Nationality", value: member.nationality, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "nationality", memberIndex: i }), onChange: () => {
|
|
3802
|
+
}, disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "Residential Address", value: member.address, onChange: (v) => updateCompanyMemberInfo(i, "address", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react67.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "City", value: member.city, onChange: (v) => updateCompanyMemberInfo(i, "city", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "State", value: member.state, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "state", memberIndex: i }), onChange: () => {
|
|
3803
|
+
}, disabled: isReadOnly || isSubmitting })))), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center justify-between mt-2" }, !isReadOnly && /* @__PURE__ */ import_react67.default.createElement("button", { onClick: addCompanyMember, className: "px-6 py-2 bg-white border border-neutral-200 text-black text-[11px] tracking-widest rounded-full hover:bg-neutral-50 transition-colors outline-none" }, "+ Add Member"), /* @__PURE__ */ import_react67.default.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDetailsApproved"), disabled: !areCompanyMembersValid() || isReadOnly, className: "w-fit" }, "Confirm Members"))) : /* @__PURE__ */ import_react67.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react67.default.createElement("div", null, /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-sm text-black" }, formData.members.length, " Member(s) Registered"), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, "Total Shares: 100% Verified.")), !isReadOnly && /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => editSection("membersDetailsApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.PencilEdit01Icon, size: 16 })))), formState.addressApproved && type === "business" && /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react67.default.createElement("h3", { className: "text-sm " }, "Who owns the business?")), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-neutral-400 -mt-2" }, "Provide basic contact info. We will extract your DOB and ID number automatically in the next step."), !formState.ownerApproved ? /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "Full Name", value: formData.ownerName, onChange: (v) => setFormData({ ...formData, ownerName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react67.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react67.default.createElement(NumberInput, { label: "Phone Number", value: formData.ownerPhone, onChange: (v) => setFormData({ ...formData, ownerPhone: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "Email Address", value: formData.ownerEmail, onChange: (v) => setFormData({ ...formData, ownerEmail: v }), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react67.default.createElement(ThreeDActionButton, { onClick: () => approveSection("ownerApproved"), disabled: !formData.ownerName || !formData.ownerPhone || !formData.ownerEmail || isReadOnly, className: "w-fit mt-2" }, "Confirm Owner Details")) : /* @__PURE__ */ import_react67.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react67.default.createElement("div", null, /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-sm text-black" }, formData.ownerName), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, formData.ownerEmail, " \u2022 ", formData.ownerPhone)), !isReadOnly && /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => editSection("ownerApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.PencilEdit01Icon, size: 16 })))), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ import_react67.default.createElement("button", { onClick: handleBack, className: "flex items-center gap-2 px-6 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.ArrowLeft01Icon, size: 14 }), " Close"), /* @__PURE__ */ import_react67.default.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep0Valid, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 1 && /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, type === "company" ? /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ import_react67.default.createElement("h3", { className: "text-sm text-black" }, "Member Identity Documents"), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-neutral-500 leading-relaxed" }, "Upload valid means of identification, passport photographs, and signatures for every director and shareholder.")), !formState.membersDocsApproved ? /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-6" }, formData.members.map((member, i) => /* @__PURE__ */ import_react67.default.createElement("div", { key: member.id, className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-[11px] tracking-widest text-black mb-1" }, member.fullName || `Member ${i + 1}`, " ", /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-neutral-400 ml-2" }, "(", member.role, ")")), /* @__PURE__ */ import_react67.default.createElement("input", { id: `id-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "id"), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react67.default.createElement("input", { id: `pass-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "passport"), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react67.default.createElement("input", { id: `sig-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "signature"), disabled: isReadOnly || isAnyUploading }), !member.idExtractedData && !globalExtractingId ? /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`id-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-200 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Valid ID (NIN, License, Voter's Card)") : globalExtractingId && !member.idExtractedData ? /* @__PURE__ */ import_react67.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react67.default.createElement(AiStageCheck, { tasks: aiTasks })) : member.idExtractedData ? /* @__PURE__ */ import_react67.default.createElement("div", { className: " mt-2 animate-in fade-in border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white p-5 rounded-xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react67.default.createElement("div", null, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-[10px] tracking-widest text-purple-600 block mb-2" }, "Review Extracted ID"), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "Full Name on ID", value: member.idExtractedData.fullName, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, fullName: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react67.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "ID Number", value: member.idExtractedData.idNumber, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, idNumber: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "Date of Birth", value: member.idExtractedData.dob, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, dob: v }), disabled: isReadOnly || isAnyUploading })))), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-2 mt-2" }, !isReadOnly && /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "id"), disabled: isAnyUploading, className: "px-6 py-2 bg-white border border-neutral-200 text-neutral-500 text-[11px] rounded-full tracking-widest hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, "Delete & Re-upload ID"))) : null, !member.passportFileUrl && !globalUploadingPassport ? /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`pass-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-200 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !member.passportFileUrl ? /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-200 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : member.passportFileUrl ? /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "passport"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Delete02Icon, size: 16 }))) : null, !member.signatureFileUrl && !globalUploadingSignature ? /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`sig-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-200 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !member.signatureFileUrl ? /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-200 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : member.signatureFileUrl ? /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "signature"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Delete02Icon, size: 16 }))) : null)), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ import_react67.default.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDocsApproved"), disabled: !areCompanyMemberDocsValid() || isReadOnly || isAnyUploading, className: "w-fit" }, "Confirm All Documents"))) : /* @__PURE__ */ import_react67.default.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ import_react67.default.createElement("div", null, /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-sm text-emerald-800" }, "Documents Uploaded"), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted.")), !isReadOnly && /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => editSection("membersDocsApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.PencilEdit01Icon, size: 16 })))) : /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null, /* @__PURE__ */ import_react67.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: idRef, onChange: (e) => handleBusinessUpload(e, "id"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react67.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: passportRef, onChange: (e) => handleBusinessUpload(e, "passport"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react67.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: signatureRef, onChange: (e) => handleBusinessUpload(e, "signature"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-2 text-black" }, /* @__PURE__ */ import_react67.default.createElement("h3", { className: "text-sm " }, "Upload Means of Identification")), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-neutral-500 -mt-2" }, "Upload your NIN, Driver's License, Voter's Card, or Int'l Passport (JPG/PNG/WEBP)."), !formState.idApproved ? /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null, /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && idRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `w-full h-32 border border-neutral-200 rounded-full flex flex-col items-center justify-center gap-2 transition-colors outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "hover:bg-neutral-50 text-black"}` }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Upload01Icon, size: 24, className: "text-neutral-400" }), /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-xs" }, "Select ID Image to Upload")), globalExtractingId && /* @__PURE__ */ import_react67.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react67.default.createElement(AiStageCheck, { tasks: aiTasks })), formData.idExtractedData && /* @__PURE__ */ import_react67.default.createElement("div", { className: " mt-2 animate-in fade-in 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_react67.default.createElement("div", null, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-[10px] tracking-widest text-purple-600 block mb-2" }, "Review AI Extracted Data"), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-neutral-500 mb-4" }, "Please verify the extracted information and correct any OCR mistakes before approving."), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "Full Name on ID", value: formData.idExtractedData.fullName, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, fullName: v } })), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react67.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "ID Number", value: formData.idExtractedData.idNumber, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, idNumber: v } })), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react67.default.createElement(TextInput, { label: "Date of Birth (YYYY-MM-DD)", value: formData.idExtractedData.dob, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, dob: v } })), disabled: isReadOnly || isAnyUploading })))), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-2 mt-2" }, /* @__PURE__ */ import_react67.default.createElement(ThreeDActionButton, { onClick: () => approveSection("idApproved"), disabled: isAnyUploading || isReadOnly, className: "w-fit shrink-0" }, "Approve Data"), !isReadOnly && /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => deleteBusinessDocument("id"), disabled: isAnyUploading, className: "px-6 py-2 bg-white border border-neutral-200 text-neutral-500 text-[11px] rounded-full tracking-widest hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, "Delete & Re-upload")))) : /* @__PURE__ */ import_react67.default.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ import_react67.default.createElement("div", null, /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-sm text-emerald-800" }, "ID Document Verified"), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted and stored.")), !isReadOnly && /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => editSection("idApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.PencilEdit01Icon, size: 16 })))), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-3 " }, !formState.passportApproved && !globalUploadingPassport ? /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && passportRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `flex items-center gap-3 p-4 border border-neutral-200 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}` }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !formData.passportFileUrl ? /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-200 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => deleteBusinessDocument("passport"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Delete02Icon, size: 16 }))), !formState.signatureApproved && !globalUploadingSignature ? /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && signatureRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `flex items-center gap-3 p-4 border border-neutral-200 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}` }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !formData.signatureFileUrl ? /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-200 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => deleteBusinessDocument("signature"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Delete02Icon, size: 16 })))))), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-4 pt-6 border-t border-neutral-200 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react67.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other1Ref, onChange: (e) => handleOptionalUpload(e, "other1"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react67.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other2Ref, onChange: (e) => handleOptionalUpload(e, "other2"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react67.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other3Ref, onChange: (e) => handleOptionalUpload(e, "other3"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-1 mb-2" }, /* @__PURE__ */ import_react67.default.createElement("h3", { className: "text-sm text-black" }, "Additional Documents (Optional)"), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-neutral-500 leading-relaxed" }, "If your ", type === "company" ? "company" : "business", " involves regulated professional services, please upload relevant licenses, certificates, or permits here (up to 3 documents).")), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-3" }, [1, 2, 3].map((num) => {
|
|
3622
3804
|
const docType = `other${num}`;
|
|
3623
3805
|
const ref = num === 1 ? other1Ref : num === 2 ? other2Ref : other3Ref;
|
|
3624
3806
|
const isUploading = num === 1 ? isUploadingOther1 : num === 2 ? isUploadingOther2 : isUploadingOther3;
|
|
@@ -3626,28 +3808,28 @@ var UniversalRegistrationFlow = ({
|
|
|
3626
3808
|
if (!fileUrl && !isUploading) {
|
|
3627
3809
|
const prevUrl = num > 1 ? formData[`otherDoc${num - 1}Url`] : true;
|
|
3628
3810
|
if (!prevUrl) return null;
|
|
3629
|
-
return /* @__PURE__ */
|
|
3811
|
+
return /* @__PURE__ */ import_react67.default.createElement("button", { key: num, onClick: () => !isReadOnly && !isAnyUploading && ref.current?.click(), disabled: isReadOnly || isAnyUploading, className: `flex items-center gap-3 p-4 border border-neutral-200 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}` }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Optional Document ", num);
|
|
3630
3812
|
}
|
|
3631
3813
|
if (isUploading) {
|
|
3632
|
-
return /* @__PURE__ */
|
|
3814
|
+
return /* @__PURE__ */ import_react67.default.createElement("div", { key: num, className: "flex items-center gap-3 p-4 border border-neutral-200 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Document ", num, "...");
|
|
3633
3815
|
}
|
|
3634
|
-
return /* @__PURE__ */
|
|
3635
|
-
}))), /* @__PURE__ */
|
|
3816
|
+
return /* @__PURE__ */ import_react67.default.createElement("div", { key: num, className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.CheckmarkBadge01Icon, size: 18 }), " Optional Document ", num, " Uploaded"), !isReadOnly && /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => deleteOptionalDocument(docType), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Delete02Icon, size: 16 })));
|
|
3817
|
+
}))), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ import_react67.default.createElement("button", { onClick: handleBack, disabled: isAnyUploading, className: "flex items-center gap-2 px-6 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.ArrowLeft01Icon, size: 14 }), " Back"), /* @__PURE__ */ import_react67.default.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep1Valid || isAnyUploading, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 2 && /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in" }, /* @__PURE__ */ import_react67.default.createElement("div", null, /* @__PURE__ */ import_react67.default.createElement("h3", { className: "text-sm mb-5 text-black" }, "Application Summary"), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-4 text-sm" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-200 pb-3 gap-1" }, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-neutral-500 truncate text-[13px] " }, type === "company" ? "Company Name" : "Business Name"), /* @__PURE__ */ import_react67.default.createElement("span", { className: " text-black text-[13px]" }, formData.approvedName)), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-200 pb-3 gap-1" }, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Classification"), /* @__PURE__ */ import_react67.default.createElement("span", { className: " text-black truncate sm:text-right text-[13px] " }, formData.natureOfBusiness?.specificLabel || "Pending")), type === "company" ? /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-200 pb-3 gap-1" }, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Total Members"), /* @__PURE__ */ import_react67.default.createElement("span", { className: " text-black truncate text-[13px] " }, formData.members.length, " Directors/Shareholders")), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-200 pb-3 gap-1" }, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Share Capital"), /* @__PURE__ */ import_react67.default.createElement("span", { className: " text-black truncate text-[13px] " }, "100% Allocated"))) : /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-200 pb-3 gap-1" }, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Proprietor"), /* @__PURE__ */ import_react67.default.createElement("span", { className: " text-black truncate text-[13px] " }, formData.ownerName)), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Documents Attached"), /* @__PURE__ */ import_react67.default.createElement("span", { className: " text-neutral-400 text-[13px] " }, "ID, Passport, Signature")), formData.otherDoc1Url && /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Optional Documents"), /* @__PURE__ */ import_react67.default.createElement("span", { className: " text-neutral-400 text-[13px] " }, [formData.otherDoc1Url, formData.otherDoc2Url, formData.otherDoc3Url].filter(Boolean).length, " Attached")))), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center justify-between mt-4 pt-4 " }, /* @__PURE__ */ import_react67.default.createElement("button", { onClick: handleBack, className: "flex items-center gap-2 px-6 py-2 rounded-full text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 transition-colors outline-none" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.ArrowLeft01Icon, size: 14 }), " Back"), /* @__PURE__ */ import_react67.default.createElement(ThreeDActionButton, { onClick: handleNext, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 3 && /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-6 py-6 animate-in zoom-in-95 duration-500" }, /* @__PURE__ */ import_react67.default.createElement("h2", { className: "text-lg font-serif text-black tracking-tight mb-2" }, "Terms and Conditions of Application"), /* @__PURE__ */ import_react67.default.createElement("div", { className: "text-xs text-neutral-500 mb-4" }, /* @__PURE__ */ import_react67.default.createElement("p", { className: " mb-3" }, "Declaration and Consent"), /* @__PURE__ */ import_react67.default.createElement("p", { className: "mb-3 leading-relaxed" }, "By proceeding with this application, you acknowledge and agree that all data, documents, and identification materials provided herein will be securely transmitted to the relevant official registries and authorized agents for the purpose of ", type === "company" ? "company" : "business", " incorporation and compliance verification."), /* @__PURE__ */ import_react67.default.createElement("p", { className: "mb-3 leading-relaxed" }, "You confirm that all information provided is accurate and authentic. Any falsification of identity or corporate data may result in immediate rejection, and you may be held liable under applicable laws and regulations."), /* @__PURE__ */ import_react67.default.createElement("p", { className: "mb-3 leading-relaxed" }, "This service operates strictly as a digital intermediary connecting you with official registries. The final approval of the ", type === "company" ? "company" : "business", " name and registration rests solely with the regulatory authorities. We are not liable for rejections arising from pre existing conflicts, non compliance, or regulatory policy changes not flagged during the AI pre check stages."), /* @__PURE__ */ import_react67.default.createElement("p", { className: "leading-relaxed" }, "Proceeding to generate the invoice confirms your acceptance of these terms and initiates the formal filing process.")), /* @__PURE__ */ import_react67.default.createElement("label", { className: "flex items-start gap-3 mt-2 cursor-pointer group" }, /* @__PURE__ */ import_react67.default.createElement("input", { type: "checkbox", checked: iAgree, onChange: (e) => setIAgree(e.target.checked), disabled: isReadOnly, className: "mt-0.5 w-4 h-4 accent-black rounded cursor-pointer" }), /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-[13px] text-red-500 group-hover:text-red-600 transition-colors" }, "I have read, understood, and agree to the terms of data transfer and processing.")), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-4 mt-8 w-full justify-end pt-6" }, /* @__PURE__ */ import_react67.default.createElement("button", { onClick: onCancelOrClose, disabled: isSubmitting, className: "px-8 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none w-full sm:w-auto" }, "Cancel"), /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => setMacroStep(0), disabled: isSubmitting || isReadOnly, className: "px-8 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none w-full sm:w-auto" }, "Edit Application"), /* @__PURE__ */ import_react67.default.createElement(ThreeDActionButton, { onClick: handleFinalSubmit, disabled: isSubmitting || !iAgree || isReadOnly, isLoading: isSubmitting, className: "min-w-40 w-full sm:w-auto" }, "Submit")))), activeModal.isOpen && /* @__PURE__ */ import_react67.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setActiveModal({ isOpen: false, type: null, memberIndex: null }) }), /* @__PURE__ */ import_react67.default.createElement("div", { className: "relative w-80 bg-white shadow-2xl rounded-3xl flex flex-col overflow-hidden animate-in zoom-in-95 duration-200 max-h-[80vh]" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "p-4 text-center w-full shrink-0" }, /* @__PURE__ */ import_react67.default.createElement("h3", { className: "text-[14px] text-black tracking-tight capitalize" }, "Select ", activeModal.type)), /* @__PURE__ */ import_react67.default.createElement("div", { className: "p-4 flex flex-col gap-2 overflow-y-auto custom-scrollbar" }, (activeModal.type === "state" ? NIGERIAN_STATES : activeModal.type === "role" ? MEMBER_ROLES : NATIONALITIES).map((opt) => {
|
|
3636
3818
|
const isSelected = activeModal.isGlobalState ? formData.state === opt : formData.members[activeModal.memberIndex][activeModal.type] === opt;
|
|
3637
|
-
return /* @__PURE__ */
|
|
3819
|
+
return /* @__PURE__ */ import_react67.default.createElement("button", { key: opt, onClick: () => {
|
|
3638
3820
|
if (activeModal.isGlobalState) setFormData({ ...formData, state: opt });
|
|
3639
3821
|
else updateCompanyMemberInfo(activeModal.memberIndex, activeModal.type, opt);
|
|
3640
3822
|
setActiveModal({ isOpen: false, type: null, memberIndex: null });
|
|
3641
3823
|
}, className: `text-left px-4 py-3 rounded-full text-[13px] transition-colors outline-none ${isSelected ? "bg-neutral-100 text-black" : "text-neutral-500 hover:bg-neutral-50 hover:text-black"}` }, opt);
|
|
3642
|
-
})), /* @__PURE__ */
|
|
3824
|
+
})), /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-full flex mt-auto shrink-0 " }, /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => setActiveModal({ isOpen: false, type: null, memberIndex: null }), className: "w-full py-4 text-[13px] text-neutral-500 hover:bg-neutral-50 transition-colors outline-none" }, "Close")))));
|
|
3643
3825
|
};
|
|
3644
3826
|
|
|
3645
3827
|
// src/components/UniversalDeveloperSettings.tsx
|
|
3646
|
-
var
|
|
3828
|
+
var import_react69 = __toESM(require("react"));
|
|
3647
3829
|
var import_react_hot_toast8 = require("react-hot-toast");
|
|
3648
|
-
var
|
|
3649
|
-
var
|
|
3650
|
-
var ButtonSpinner5 = () => /* @__PURE__ */
|
|
3830
|
+
var import_react70 = require("@hugeicons/react");
|
|
3831
|
+
var import_core_free_icons24 = require("@hugeicons/core-free-icons");
|
|
3832
|
+
var ButtonSpinner5 = () => /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.Loading03Icon, size: 16, className: "animate-spin text-current" });
|
|
3651
3833
|
var UniversalDeveloperSettings = ({
|
|
3652
3834
|
initialPublicKey,
|
|
3653
3835
|
initialWebhookUrl,
|
|
@@ -3655,12 +3837,12 @@ var UniversalDeveloperSettings = ({
|
|
|
3655
3837
|
onGenerateKeys,
|
|
3656
3838
|
onSaveWebhook
|
|
3657
3839
|
}) => {
|
|
3658
|
-
const [publicKey, setPublicKey] = (0,
|
|
3659
|
-
const [webhookUrl, setWebhookUrl] = (0,
|
|
3660
|
-
const [isGenerating, setIsGenerating] = (0,
|
|
3661
|
-
const [isSavingWebhook, setIsSavingWebhook] = (0,
|
|
3662
|
-
const [isRollModalOpen, setIsRollModalOpen] = (0,
|
|
3663
|
-
(0,
|
|
3840
|
+
const [publicKey, setPublicKey] = (0, import_react69.useState)(initialPublicKey);
|
|
3841
|
+
const [webhookUrl, setWebhookUrl] = (0, import_react69.useState)(initialWebhookUrl);
|
|
3842
|
+
const [isGenerating, setIsGenerating] = (0, import_react69.useState)(false);
|
|
3843
|
+
const [isSavingWebhook, setIsSavingWebhook] = (0, import_react69.useState)(false);
|
|
3844
|
+
const [isRollModalOpen, setIsRollModalOpen] = (0, import_react69.useState)(false);
|
|
3845
|
+
(0, import_react69.useEffect)(() => {
|
|
3664
3846
|
setPublicKey(initialPublicKey || "");
|
|
3665
3847
|
setWebhookUrl(initialWebhookUrl || "");
|
|
3666
3848
|
}, [initialPublicKey, initialWebhookUrl]);
|
|
@@ -3720,7 +3902,7 @@ AUDDITUR_SECRET_KEY="${secKey}"
|
|
|
3720
3902
|
};
|
|
3721
3903
|
const hasWebhookChanges = webhookUrl !== initialWebhookUrl;
|
|
3722
3904
|
const isWebhookSaveDisabled = isSavingWebhook || isReadOnly || !hasWebhookChanges;
|
|
3723
|
-
return /* @__PURE__ */
|
|
3905
|
+
return /* @__PURE__ */ import_react69.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_react69.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react69.default.createElement("h1", { className: "font-serif text-xl text-black mb-1 truncate tracking-tight" }, "Developer Settings"), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your API credentials and webhook integrations.")), isReadOnly && /* @__PURE__ */ import_react69.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full " }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.CircleLock02Icon, size: 18, className: "text-current" }))), /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full max-w-2xl flex flex-col gap-12" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ import_react69.default.createElement(
|
|
3724
3906
|
TextInput,
|
|
3725
3907
|
{
|
|
3726
3908
|
label: "Public Key",
|
|
@@ -3729,7 +3911,7 @@ AUDDITUR_SECRET_KEY="${secKey}"
|
|
|
3729
3911
|
},
|
|
3730
3912
|
disabled: true
|
|
3731
3913
|
}
|
|
3732
|
-
), /* @__PURE__ */
|
|
3914
|
+
), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-[10px] text-neutral-400 mt-1 leading-snug" }, "Your public key is used to identify your application. Your secret key will only be shown once upon generation.")), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react69.default.createElement(
|
|
3733
3915
|
ThreeDActionButton,
|
|
3734
3916
|
{
|
|
3735
3917
|
onClick: () => {
|
|
@@ -3741,7 +3923,7 @@ AUDDITUR_SECRET_KEY="${secKey}"
|
|
|
3741
3923
|
className: "w-fit"
|
|
3742
3924
|
},
|
|
3743
3925
|
publicKey ? "Roll API Keys" : "Generate Keys"
|
|
3744
|
-
))), /* @__PURE__ */
|
|
3926
|
+
))), /* @__PURE__ */ import_react69.default.createElement("form", { className: "flex flex-col gap-6 border-t border-neutral-200 pt-8", onSubmit: handleSaveWebhook, autoComplete: "off" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ import_react69.default.createElement(
|
|
3745
3927
|
TextInput,
|
|
3746
3928
|
{
|
|
3747
3929
|
label: "Webhook URL",
|
|
@@ -3751,7 +3933,7 @@ AUDDITUR_SECRET_KEY="${secKey}"
|
|
|
3751
3933
|
placeholder: "https://your-domain.com/webhook",
|
|
3752
3934
|
type: "url"
|
|
3753
3935
|
}
|
|
3754
|
-
), /* @__PURE__ */
|
|
3936
|
+
), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-[10px] text-neutral-400 mt-1 leading-snug" }, "We will send secure POST requests to this endpoint when significant events occur. Must use HTTPS.")), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between mt-2 gap-6 sm:gap-4" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-6 min-w-0" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block truncate uppercase" }, "Webhook Status"), /* @__PURE__ */ import_react69.default.createElement("span", { className: `text-xs block truncate ${webhookUrl ? "text-emerald-600" : "text-neutral-400"}` }, webhookUrl ? "Active" : "Inactive"))), /* @__PURE__ */ import_react69.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" }, hasWebhookChanges && !isSavingWebhook && !isReadOnly && /* @__PURE__ */ import_react69.default.createElement(
|
|
3755
3937
|
"button",
|
|
3756
3938
|
{
|
|
3757
3939
|
type: "button",
|
|
@@ -3759,7 +3941,7 @@ AUDDITUR_SECRET_KEY="${secKey}"
|
|
|
3759
3941
|
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"
|
|
3760
3942
|
},
|
|
3761
3943
|
"Cancel"
|
|
3762
|
-
), /* @__PURE__ */
|
|
3944
|
+
), /* @__PURE__ */ import_react69.default.createElement(
|
|
3763
3945
|
ThreeDActionButton,
|
|
3764
3946
|
{
|
|
3765
3947
|
type: "submit",
|
|
@@ -3768,7 +3950,7 @@ AUDDITUR_SECRET_KEY="${secKey}"
|
|
|
3768
3950
|
className: "min-w-32 w-full sm:w-auto"
|
|
3769
3951
|
},
|
|
3770
3952
|
"Save Webhook"
|
|
3771
|
-
))))), isRollModalOpen && !isReadOnly && /* @__PURE__ */
|
|
3953
|
+
))))), isRollModalOpen && !isReadOnly && /* @__PURE__ */ import_react69.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isGenerating && setIsRollModalOpen(false) }), /* @__PURE__ */ import_react69.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_react69.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react69.default.createElement("h3", { className: "font-serif text-[17px] text-black tracking-tight mb-1" }, "Roll API Keys"), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-[12px] text-neutral-500 leading-snug mt-2" }, "Are you sure you want to roll your keys? This will permanently invalidate your current secret key and active MCP tokens.")), /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react69.default.createElement(
|
|
3772
3954
|
"button",
|
|
3773
3955
|
{
|
|
3774
3956
|
onClick: () => setIsRollModalOpen(false),
|
|
@@ -3776,16 +3958,201 @@ AUDDITUR_SECRET_KEY="${secKey}"
|
|
|
3776
3958
|
className: "flex-1 py-2 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none"
|
|
3777
3959
|
},
|
|
3778
3960
|
"Cancel"
|
|
3779
|
-
), /* @__PURE__ */
|
|
3961
|
+
), /* @__PURE__ */ import_react69.default.createElement(
|
|
3780
3962
|
"button",
|
|
3781
3963
|
{
|
|
3782
3964
|
onClick: handleGenerateKeys,
|
|
3783
3965
|
disabled: isGenerating,
|
|
3784
3966
|
className: "flex-1 py-2 text-[13px] text-red-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 flex justify-center outline-none"
|
|
3785
3967
|
},
|
|
3786
|
-
isGenerating ? /* @__PURE__ */
|
|
3968
|
+
isGenerating ? /* @__PURE__ */ import_react69.default.createElement(ButtonSpinner5, null) : "Roll Keys"
|
|
3787
3969
|
)))));
|
|
3788
3970
|
};
|
|
3971
|
+
|
|
3972
|
+
// src/components/MedicalFeatureStatsBlock.tsx
|
|
3973
|
+
var import_react71 = __toESM(require("react"));
|
|
3974
|
+
var import_image11 = __toESM(require("next/image"));
|
|
3975
|
+
var MedicalFeatureStatsBlock = ({
|
|
3976
|
+
bottomHeadline,
|
|
3977
|
+
bottomDescription,
|
|
3978
|
+
avatars,
|
|
3979
|
+
trustText,
|
|
3980
|
+
stats
|
|
3981
|
+
}) => {
|
|
3982
|
+
const [isAnimating, setIsAnimating] = (0, import_react71.useState)(false);
|
|
3983
|
+
const titleRef = (0, import_react71.useRef)(null);
|
|
3984
|
+
(0, import_react71.useEffect)(() => {
|
|
3985
|
+
const observer = new IntersectionObserver(
|
|
3986
|
+
([entry]) => {
|
|
3987
|
+
if (entry.isIntersecting) {
|
|
3988
|
+
if (entry.boundingClientRect.top > 0) {
|
|
3989
|
+
setIsAnimating(true);
|
|
3990
|
+
}
|
|
3991
|
+
} else {
|
|
3992
|
+
setIsAnimating(false);
|
|
3993
|
+
}
|
|
3994
|
+
},
|
|
3995
|
+
{ threshold: 0.1 }
|
|
3996
|
+
);
|
|
3997
|
+
if (titleRef.current) {
|
|
3998
|
+
observer.observe(titleRef.current);
|
|
3999
|
+
}
|
|
4000
|
+
return () => observer.disconnect();
|
|
4001
|
+
}, []);
|
|
4002
|
+
return /* @__PURE__ */ import_react71.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ import_react71.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8 gap-32" }, /* @__PURE__ */ import_react71.default.createElement("div", null, /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ import_react71.default.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ import_react71.default.createElement(
|
|
4003
|
+
"h2",
|
|
4004
|
+
{
|
|
4005
|
+
ref: titleRef,
|
|
4006
|
+
className: `font-serif text-4xl md:text-5xl text-black tracking-tight leading-[1.1] mb-5 ${isAnimating ? "animate-gradient-wipe" : ""}`,
|
|
4007
|
+
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
4008
|
+
},
|
|
4009
|
+
bottomHeadline
|
|
4010
|
+
), /* @__PURE__ */ import_react71.default.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ import_react71.default.createElement("div", { key: i, className: "relative w-12 h-12 rounded-full border-[3px] border-white overflow-hidden bg-neutral-100 s z-1 hover:z-10 transition-all" }, /* @__PURE__ */ import_react71.default.createElement(
|
|
4011
|
+
import_image11.default,
|
|
4012
|
+
{
|
|
4013
|
+
src,
|
|
4014
|
+
alt: "Professional Avatar",
|
|
4015
|
+
fill: true,
|
|
4016
|
+
sizes: "48px",
|
|
4017
|
+
className: "object-cover"
|
|
4018
|
+
}
|
|
4019
|
+
)))), /* @__PURE__ */ import_react71.default.createElement("p", { className: "text-[12px] font-medium text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ import_react71.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ import_react71.default.createElement("div", { key: idx, className: " border border-neutral-200 rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex items-center gap-3 mb-6" }, /* @__PURE__ */ import_react71.default.createElement("span", { className: "w-1.5 h-1.5 rounded-full bg-neutral-400 shrink-0" }), /* @__PURE__ */ import_react71.default.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ import_react71.default.createElement("div", { className: "text-6xl md:text-[80px] font-light tracking-tighter text-black mt-auto leading-none" }, stat.value)))))));
|
|
4020
|
+
};
|
|
4021
|
+
|
|
4022
|
+
// src/components/ConsultantShowcase.tsx
|
|
4023
|
+
var import_react72 = __toESM(require("react"));
|
|
4024
|
+
var import_image12 = __toESM(require("next/image"));
|
|
4025
|
+
var import_react73 = require("@hugeicons/react");
|
|
4026
|
+
var import_core_free_icons25 = require("@hugeicons/core-free-icons");
|
|
4027
|
+
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
4028
|
+
const [isLoading, setIsLoading] = (0, import_react72.useState)(true);
|
|
4029
|
+
return /* @__PURE__ */ import_react72.default.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ import_react72.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-800/50 backdrop-blur-md transition-opacity duration-300" }, /* @__PURE__ */ import_react72.default.createElement(import_react73.HugeiconsIcon, { icon: import_core_free_icons25.Loading03Icon, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ import_react72.default.createElement(
|
|
4030
|
+
import_image12.default,
|
|
4031
|
+
{
|
|
4032
|
+
src,
|
|
4033
|
+
alt,
|
|
4034
|
+
fill: true,
|
|
4035
|
+
priority,
|
|
4036
|
+
sizes: sizes || "(max-width: 768px) 100vw, 1200px",
|
|
4037
|
+
onLoad: () => setIsLoading(false),
|
|
4038
|
+
className: `
|
|
4039
|
+
object-cover transition-all duration-1000 ease-out z-10
|
|
4040
|
+
${isLoading ? "scale-105 blur-xl opacity-0" : "scale-100 blur-0 opacity-100"}
|
|
4041
|
+
`
|
|
4042
|
+
}
|
|
4043
|
+
));
|
|
4044
|
+
};
|
|
4045
|
+
var ConsultantShowcase = ({
|
|
4046
|
+
profiles
|
|
4047
|
+
}) => {
|
|
4048
|
+
const [currentIndex, setCurrentIndex] = (0, import_react72.useState)(0);
|
|
4049
|
+
const [touchStart, setTouchStart] = (0, import_react72.useState)(null);
|
|
4050
|
+
const [touchEnd, setTouchEnd] = (0, import_react72.useState)(null);
|
|
4051
|
+
const nextSlide = () => {
|
|
4052
|
+
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
4053
|
+
};
|
|
4054
|
+
const prevSlide = () => {
|
|
4055
|
+
setCurrentIndex((prev) => prev === 0 ? profiles.length - 1 : prev - 1);
|
|
4056
|
+
};
|
|
4057
|
+
const onTouchStart = (e) => {
|
|
4058
|
+
setTouchEnd(null);
|
|
4059
|
+
setTouchStart(e.targetTouches[0].clientX);
|
|
4060
|
+
};
|
|
4061
|
+
const onTouchMove = (e) => {
|
|
4062
|
+
setTouchEnd(e.targetTouches[0].clientX);
|
|
4063
|
+
};
|
|
4064
|
+
const onTouchEnd = () => {
|
|
4065
|
+
if (!touchStart || !touchEnd) return;
|
|
4066
|
+
const distance = touchStart - touchEnd;
|
|
4067
|
+
const minSwipeDistance = 50;
|
|
4068
|
+
if (distance > minSwipeDistance) {
|
|
4069
|
+
nextSlide();
|
|
4070
|
+
} else if (distance < -minSwipeDistance) {
|
|
4071
|
+
prevSlide();
|
|
4072
|
+
}
|
|
4073
|
+
};
|
|
4074
|
+
if (!profiles || profiles.length === 0) return null;
|
|
4075
|
+
return /* @__PURE__ */ import_react72.default.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 bg-white z-10 relative" }, /* @__PURE__ */ import_react72.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react72.default.createElement(
|
|
4076
|
+
"div",
|
|
4077
|
+
{
|
|
4078
|
+
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 shadow-xl shadow-black/5 group select-none",
|
|
4079
|
+
onTouchStart,
|
|
4080
|
+
onTouchMove,
|
|
4081
|
+
onTouchEnd
|
|
4082
|
+
},
|
|
4083
|
+
profiles.map((profile, idx) => {
|
|
4084
|
+
const isActive = idx === currentIndex;
|
|
4085
|
+
return /* @__PURE__ */ import_react72.default.createElement(
|
|
4086
|
+
"div",
|
|
4087
|
+
{
|
|
4088
|
+
key: profile.id,
|
|
4089
|
+
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
4090
|
+
},
|
|
4091
|
+
/* @__PURE__ */ import_react72.default.createElement(
|
|
4092
|
+
ImageWithLoader,
|
|
4093
|
+
{
|
|
4094
|
+
src: profile.imageSrc,
|
|
4095
|
+
alt: profile.name,
|
|
4096
|
+
priority: idx === 0
|
|
4097
|
+
}
|
|
4098
|
+
),
|
|
4099
|
+
/* @__PURE__ */ import_react72.default.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
4100
|
+
/* @__PURE__ */ import_react72.default.createElement("div", { className: "absolute top-0 left-0 w-full h-[60%] bg-linear-to-b from-black/80 via-black/30 to-transparent z-20 pointer-events-none" }),
|
|
4101
|
+
/* @__PURE__ */ import_react72.default.createElement("div", { className: `absolute top-8 left-8 md:top-12 md:left-12 z-30 text-white max-w-lg transition-transform duration-700 ease-out ${isActive ? "translate-y-0" : "-translate-y-4"}` }, /* @__PURE__ */ import_react72.default.createElement("h2", { className: "text-[32px] font-serif tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ import_react72.default.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ import_react72.default.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide mt-1" }, profile.description)))
|
|
4102
|
+
);
|
|
4103
|
+
}),
|
|
4104
|
+
/* @__PURE__ */ import_react72.default.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide, "aria-label": "Previous image" }),
|
|
4105
|
+
/* @__PURE__ */ import_react72.default.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide, "aria-label": "Next image" }),
|
|
4106
|
+
/* @__PURE__ */ import_react72.default.createElement("div", { className: "absolute bottom-6 md:bottom-8 left-0 w-full px-4 z-30 flex justify-center items-center gap-2" }, profiles.map((_, idx) => /* @__PURE__ */ import_react72.default.createElement(
|
|
4107
|
+
"button",
|
|
4108
|
+
{
|
|
4109
|
+
key: idx,
|
|
4110
|
+
onClick: () => setCurrentIndex(idx),
|
|
4111
|
+
"aria-label": `Go to slide ${idx + 1}`,
|
|
4112
|
+
className: `h-1 rounded-full transition-all duration-300 ease-out outline-none ${currentIndex === idx ? "w-8 bg-white" : "w-4 bg-white/30 hover:bg-white/60 cursor-pointer"}`
|
|
4113
|
+
}
|
|
4114
|
+
)))
|
|
4115
|
+
)));
|
|
4116
|
+
};
|
|
4117
|
+
|
|
4118
|
+
// src/components/ContentGridBlock.tsx
|
|
4119
|
+
var import_react74 = __toESM(require("react"));
|
|
4120
|
+
var import_image13 = __toESM(require("next/image"));
|
|
4121
|
+
var import_react75 = require("@hugeicons/react");
|
|
4122
|
+
var import_core_free_icons26 = require("@hugeicons/core-free-icons");
|
|
4123
|
+
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
4124
|
+
const [isLoading, setIsLoading] = (0, import_react74.useState)(true);
|
|
4125
|
+
return /* @__PURE__ */ import_react74.default.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ import_react74.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-100/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ import_react74.default.createElement(import_react75.HugeiconsIcon, { icon: import_core_free_icons26.Loading03Icon, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ import_react74.default.createElement(
|
|
4126
|
+
import_image13.default,
|
|
4127
|
+
{
|
|
4128
|
+
src,
|
|
4129
|
+
alt,
|
|
4130
|
+
fill: true,
|
|
4131
|
+
sizes: sizes || "(max-width: 768px) 100vw, 500px",
|
|
4132
|
+
onLoad: () => setIsLoading(false),
|
|
4133
|
+
className: `
|
|
4134
|
+
object-cover transition-all duration-1000 ease-out z-10
|
|
4135
|
+
${isLoading ? "scale-105 blur-xl opacity-0" : "scale-100 blur-0 opacity-100"}
|
|
4136
|
+
`
|
|
4137
|
+
}
|
|
4138
|
+
));
|
|
4139
|
+
};
|
|
4140
|
+
var ContentGridBlock = ({
|
|
4141
|
+
header,
|
|
4142
|
+
leftCard,
|
|
4143
|
+
middleTopCard,
|
|
4144
|
+
middleBottomCard,
|
|
4145
|
+
rightCards
|
|
4146
|
+
}) => {
|
|
4147
|
+
return /* @__PURE__ */ import_react74.default.createElement("section", { className: "py-24 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react74.default.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ import_react74.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ import_react74.default.createElement("h2", { className: "text-5xl font-serif font-medium tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ import_react74.default.createElement("span", { className: "text-[#A7372A]" }, header.highlightText))), /* @__PURE__ */ import_react74.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ import_react74.default.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ import_react74.default.createElement("div", { className: "border border-neutral-200 rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react74.default.createElement("p", { className: "text-[17px] text-black leading-snug font-medium mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ import_react74.default.createElement("span", { className: "mb-auto text-[11px] font-medium text-neutral-400 uppercase tracking-widest" }, leftCard.tag), /* @__PURE__ */ import_react74.default.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ import_react74.default.createElement("div", null, /* @__PURE__ */ import_react74.default.createElement("h4", { className: "text-[15px] font-semibold text-black" }, leftCard.title), /* @__PURE__ */ import_react74.default.createElement("p", { className: "text-[13px] text-neutral-400" }, leftCard.subtitle)), /* @__PURE__ */ import_react74.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react74.default.createElement(import_image13.default, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ import_react74.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react74.default.createElement("div", { className: "border border-neutral-200 rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ import_react74.default.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ import_react74.default.createElement("span", { className: "text-[11px] text-neutral-400 font-medium tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ import_react74.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react74.default.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ import_react74.default.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ import_react74.default.createElement(import_image13.default, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ import_react74.default.createElement("span", { className: "text-sm font-medium text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ import_react74.default.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ import_react74.default.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-200 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ import_react74.default.createElement("span", { className: "font-semibold text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ import_react74.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react74.default.createElement("p", { className: "text-[12px] text-neutral-400 font-medium tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ import_react74.default.createElement("p", { className: "text-[14px] text-black font-medium leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ import_react74.default.createElement("div", { className: "border border-neutral-200 rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react74.default.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ import_react74.default.createElement("div", null, /* @__PURE__ */ import_react74.default.createElement("h4", { className: "text-[15px] font-semibold text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ import_react74.default.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ import_react74.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react74.default.createElement(import_image13.default, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ import_react74.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react74.default.createElement("p", { className: "text-[16px] text-black leading-snug font-medium mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ import_react74.default.createElement("span", { className: "text-[11px] font-medium text-neutral-400 uppercase tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ import_react74.default.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ import_react74.default.createElement("div", { key: idx, className: "relative w-full h-80 rounded-3xl overflow-hidden group" }, /* @__PURE__ */ import_react74.default.createElement(
|
|
4148
|
+
ImageWithLoader2,
|
|
4149
|
+
{
|
|
4150
|
+
src: card.bgImageSrc,
|
|
4151
|
+
alt: card.title,
|
|
4152
|
+
className: "absolute inset-0 w-full h-full"
|
|
4153
|
+
}
|
|
4154
|
+
), /* @__PURE__ */ import_react74.default.createElement("div", { className: "absolute inset-0 bg-linear-to-t from-black/90 via-black/30 to-transparent z-20 pointer-events-none" }), /* @__PURE__ */ import_react74.default.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ import_react74.default.createElement("p", { className: "text-[14px] font-medium leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ import_react74.default.createElement("span", { className: "mb-4 text-[11px] font-medium text-white/50 uppercase tracking-widest" }, card.tag), /* @__PURE__ */ import_react74.default.createElement("div", { className: "pt-3" }, /* @__PURE__ */ import_react74.default.createElement("h4", { className: "text-[15px] font-semibold tracking-wide" }, card.title), /* @__PURE__ */ import_react74.default.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
|
|
4155
|
+
};
|
|
3789
4156
|
// Annotate the CommonJS export names for ESM import in node:
|
|
3790
4157
|
0 && (module.exports = {
|
|
3791
4158
|
AITranscriptionFeature,
|
|
@@ -3793,6 +4160,8 @@ AUDDITUR_SECRET_KEY="${secKey}"
|
|
|
3793
4160
|
AiStageCheck,
|
|
3794
4161
|
AppBento2,
|
|
3795
4162
|
Banner,
|
|
4163
|
+
ConsultantShowcase,
|
|
4164
|
+
ContentGridBlock,
|
|
3796
4165
|
Faq,
|
|
3797
4166
|
FeatureScroll,
|
|
3798
4167
|
Footer,
|
|
@@ -3807,6 +4176,7 @@ AUDDITUR_SECRET_KEY="${secKey}"
|
|
|
3807
4176
|
ManagedPricingBlock,
|
|
3808
4177
|
ManagedProjectsBlock,
|
|
3809
4178
|
ManagedToaster,
|
|
4179
|
+
MedicalFeatureStatsBlock,
|
|
3810
4180
|
NumberInput,
|
|
3811
4181
|
PageSpinner,
|
|
3812
4182
|
PlatformFeatures,
|