@retinalabsllc/zairusjs 0.2.1 → 0.2.2
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 +44 -1
- package/dist/index.d.ts +44 -1
- package/dist/index.js +494 -163
- package/dist/index.mjs +481 -152
- package/package.json +2 -1
package/dist/index.js
CHANGED
|
@@ -53,7 +53,9 @@ __export(index_exports, {
|
|
|
53
53
|
PortfolioHero: () => PortfolioHero,
|
|
54
54
|
ProductHero: () => ProductHero,
|
|
55
55
|
TextInput: () => TextInput,
|
|
56
|
-
|
|
56
|
+
ThreeDActionButton: () => ThreeDActionButton,
|
|
57
|
+
ThreeDButton: () => ThreeDButton,
|
|
58
|
+
ZairusAuth: () => ZairusAuth
|
|
57
59
|
});
|
|
58
60
|
module.exports = __toCommonJS(index_exports);
|
|
59
61
|
|
|
@@ -166,22 +168,349 @@ var ThreeDButton = ({
|
|
|
166
168
|
);
|
|
167
169
|
};
|
|
168
170
|
|
|
169
|
-
// src/components/
|
|
171
|
+
// src/components/ThreeDActionButton.tsx
|
|
170
172
|
var import_react4 = __toESM(require("react"));
|
|
173
|
+
var import_react5 = require("@hugeicons/react");
|
|
174
|
+
var import_core_free_icons2 = require("@hugeicons/core-free-icons");
|
|
175
|
+
var ThreeDActionButton = ({
|
|
176
|
+
type = "button",
|
|
177
|
+
onClick,
|
|
178
|
+
disabled = false,
|
|
179
|
+
isLoading = false,
|
|
180
|
+
children,
|
|
181
|
+
className = "",
|
|
182
|
+
ariaLabel
|
|
183
|
+
}) => {
|
|
184
|
+
const isInteractionDisabled = disabled || isLoading;
|
|
185
|
+
const baseShadow = `
|
|
186
|
+
inset 0 1.5px 0 0 rgba(255, 255, 255, 0.3),
|
|
187
|
+
inset 0 -2px 0 0 rgba(0, 0, 0, 0.5),
|
|
188
|
+
0 3px 0 0 #0c0c0c,
|
|
189
|
+
0 6px 10px rgba(0, 0, 0, 0.3)
|
|
190
|
+
`;
|
|
191
|
+
const hoverShadow = `
|
|
192
|
+
inset 0 1.5px 0 0 rgba(255, 255, 255, 0.35),
|
|
193
|
+
inset 0 -2px 0 0 rgba(0, 0, 0, 0.5),
|
|
194
|
+
0 4px 0 0 #0c0c0c,
|
|
195
|
+
0 8px 12px rgba(0, 0, 0, 0.35)
|
|
196
|
+
`;
|
|
197
|
+
const activeShadow = `
|
|
198
|
+
inset 0 1px 0 0 rgba(255, 255, 255, 0.1),
|
|
199
|
+
inset 0 -1px 0 0 rgba(0, 0, 0, 0.5),
|
|
200
|
+
0 1px 0 0 #0c0c0c,
|
|
201
|
+
0 2px 4px rgba(0, 0, 0, 0.2)
|
|
202
|
+
`;
|
|
203
|
+
const disabledShadow = `
|
|
204
|
+
inset 0 1px 0 0 rgba(255, 255, 255, 0.15),
|
|
205
|
+
inset 0 -1px 0 0 rgba(0, 0, 0, 0.3),
|
|
206
|
+
0 1px 0 0 #1c1c1c
|
|
207
|
+
`;
|
|
208
|
+
return /* @__PURE__ */ import_react4.default.createElement(
|
|
209
|
+
"button",
|
|
210
|
+
{
|
|
211
|
+
type,
|
|
212
|
+
disabled: isInteractionDisabled,
|
|
213
|
+
onClick,
|
|
214
|
+
"aria-label": ariaLabel,
|
|
215
|
+
className: `
|
|
216
|
+
relative inline-flex items-center justify-center py-2.5 px-8 rounded-full
|
|
217
|
+
bg-neutral-950 text-white text-xs tracking-widest
|
|
218
|
+
transition-all duration-150 select-none group outline-none
|
|
219
|
+
${isInteractionDisabled ? "opacity-50 cursor-not-allowed" : "active:translate-y-0.5"}
|
|
220
|
+
${className}
|
|
221
|
+
`,
|
|
222
|
+
style: { boxShadow: isInteractionDisabled ? disabledShadow : baseShadow },
|
|
223
|
+
onMouseEnter: (e) => {
|
|
224
|
+
if (isInteractionDisabled) return;
|
|
225
|
+
e.currentTarget.style.boxShadow = hoverShadow;
|
|
226
|
+
e.currentTarget.style.transform = "translateY(-1px)";
|
|
227
|
+
},
|
|
228
|
+
onMouseLeave: (e) => {
|
|
229
|
+
if (isInteractionDisabled) return;
|
|
230
|
+
e.currentTarget.style.boxShadow = baseShadow;
|
|
231
|
+
e.currentTarget.style.transform = "translateY(0px)";
|
|
232
|
+
},
|
|
233
|
+
onMouseDown: (e) => {
|
|
234
|
+
if (isInteractionDisabled) return;
|
|
235
|
+
e.currentTarget.style.boxShadow = activeShadow;
|
|
236
|
+
e.currentTarget.style.transform = "translateY(2px)";
|
|
237
|
+
},
|
|
238
|
+
onMouseUp: (e) => {
|
|
239
|
+
if (isInteractionDisabled) return;
|
|
240
|
+
e.currentTarget.style.transform = "translateY(-1px)";
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
/* @__PURE__ */ import_react4.default.createElement("span", { className: "absolute inset-0 rounded-full bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none" }),
|
|
244
|
+
/* @__PURE__ */ import_react4.default.createElement("span", { className: "relative z-10 flex items-center justify-center gap-2 leading-none" }, isLoading ? /* @__PURE__ */ import_react4.default.createElement(import_react5.HugeiconsIcon, { icon: import_core_free_icons2.Loading03Icon, size: 16, className: "animate-spin text-white" }) : children)
|
|
245
|
+
);
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
// src/components/ZairusAuth.tsx
|
|
249
|
+
var import_react6 = __toESM(require("react"));
|
|
250
|
+
var import_navigation = require("next/navigation");
|
|
251
|
+
var import_react_hot_toast = __toESM(require("react-hot-toast"));
|
|
252
|
+
var import_react_google_recaptcha_v3 = require("react-google-recaptcha-v3");
|
|
253
|
+
var InputSpinner = () => /* @__PURE__ */ import_react6.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_react6.default.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ import_react6.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" }));
|
|
254
|
+
function AuthFormInner({
|
|
255
|
+
companyName,
|
|
256
|
+
workspaceLabel = "Workspace",
|
|
257
|
+
termsUrl = "https://retinalabs.company/terms-of-service",
|
|
258
|
+
privacyUrl = "https://retinalabs.company/privacy-policy",
|
|
259
|
+
requireNames = true,
|
|
260
|
+
requireOrganization = true,
|
|
261
|
+
useRecaptcha = false,
|
|
262
|
+
defaultRedirectPath = "/app",
|
|
263
|
+
onAuthRequest,
|
|
264
|
+
onVerifyOtp
|
|
265
|
+
}) {
|
|
266
|
+
const searchParams = (0, import_navigation.useSearchParams)();
|
|
267
|
+
const redirectUrl = searchParams.get("redirect") || defaultRedirectPath;
|
|
268
|
+
const captchaContext = useRecaptcha ? (0, import_react_google_recaptcha_v3.useGoogleReCaptcha)() : null;
|
|
269
|
+
const [mode, setMode] = (0, import_react6.useState)("LOGIN");
|
|
270
|
+
const [step, setStep] = (0, import_react6.useState)("INPUT");
|
|
271
|
+
const getInitialSignupStep = () => {
|
|
272
|
+
if (requireNames) return "NAME";
|
|
273
|
+
if (requireOrganization) return "ORGANIZATION";
|
|
274
|
+
return "EMAIL_ID";
|
|
275
|
+
};
|
|
276
|
+
const [signupStep, setSignupStep] = (0, import_react6.useState)(getInitialSignupStep());
|
|
277
|
+
const [isSubmitting, setIsSubmitting] = (0, import_react6.useState)(false);
|
|
278
|
+
const [countdown, setCountdown] = (0, import_react6.useState)(0);
|
|
279
|
+
const [emailId, setEmailId] = (0, import_react6.useState)("");
|
|
280
|
+
const [firstName, setFirstName] = (0, import_react6.useState)("");
|
|
281
|
+
const [lastName, setLastName] = (0, import_react6.useState)("");
|
|
282
|
+
const [orgName, setOrgName] = (0, import_react6.useState)("");
|
|
283
|
+
const [agreedToTerms, setAgreedToTerms] = (0, import_react6.useState)(false);
|
|
284
|
+
const [otp, setOtp] = (0, import_react6.useState)(["", "", "", "", "", ""]);
|
|
285
|
+
const inputRefs = (0, import_react6.useRef)([]);
|
|
286
|
+
const cleanAlpha = (val) => val.replace(/[^a-zA-Z\s-]/g, "");
|
|
287
|
+
const cleanOrgName = (val) => val.replace(/[^a-zA-Z0-9\s]/g, "").substring(0, 50);
|
|
288
|
+
const cleanEmailId = (val) => val.toLowerCase().replace(/[^a-z0-9@._-]/g, "");
|
|
289
|
+
(0, import_react6.useEffect)(() => {
|
|
290
|
+
if (countdown > 0) {
|
|
291
|
+
const timer = setTimeout(() => setCountdown(countdown - 1), 1e3);
|
|
292
|
+
return () => clearTimeout(timer);
|
|
293
|
+
}
|
|
294
|
+
}, [countdown]);
|
|
295
|
+
const handleOtpChange = (index, value) => {
|
|
296
|
+
const cleanValue = value.replace(/[^0-9]/g, "");
|
|
297
|
+
if (!cleanValue && value !== "") return;
|
|
298
|
+
const newOtp = [...otp];
|
|
299
|
+
newOtp[index] = cleanValue.slice(-1);
|
|
300
|
+
setOtp(newOtp);
|
|
301
|
+
if (cleanValue && index < 5) {
|
|
302
|
+
inputRefs.current[index + 1]?.focus();
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
const handlePaste = (e) => {
|
|
306
|
+
e.preventDefault();
|
|
307
|
+
const pastedData = e.clipboardData.getData("text/plain");
|
|
308
|
+
const numbersOnly = pastedData.replace(/[^0-9]/g, "");
|
|
309
|
+
if (!numbersOnly) return;
|
|
310
|
+
const newOtp = [...otp];
|
|
311
|
+
const length = Math.min(numbersOnly.length, 6);
|
|
312
|
+
for (let i = 0; i < length; i++) {
|
|
313
|
+
newOtp[i] = numbersOnly[i];
|
|
314
|
+
}
|
|
315
|
+
setOtp(newOtp);
|
|
316
|
+
if (length < 6) {
|
|
317
|
+
inputRefs.current[length]?.focus();
|
|
318
|
+
} else {
|
|
319
|
+
inputRefs.current[5]?.focus();
|
|
320
|
+
verifyOtpCode(newOtp.join(""));
|
|
321
|
+
}
|
|
322
|
+
};
|
|
323
|
+
const handleAuthRequestSubmit = async (e) => {
|
|
324
|
+
if (e) e.preventDefault();
|
|
325
|
+
if (mode === "SIGNUP" && !agreedToTerms) {
|
|
326
|
+
import_react_hot_toast.default.error("You must agree to the Terms and Privacy Policy.");
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
if (isSubmitting || countdown > 0) return;
|
|
330
|
+
setIsSubmitting(true);
|
|
331
|
+
try {
|
|
332
|
+
let recaptchaToken = void 0;
|
|
333
|
+
if (useRecaptcha && captchaContext?.executeRecaptcha) {
|
|
334
|
+
recaptchaToken = await captchaContext.executeRecaptcha("auth_request");
|
|
335
|
+
}
|
|
336
|
+
const res = await onAuthRequest({
|
|
337
|
+
email: emailId,
|
|
338
|
+
firstName: mode === "SIGNUP" && requireNames ? firstName : void 0,
|
|
339
|
+
lastName: mode === "SIGNUP" && requireNames ? lastName : void 0,
|
|
340
|
+
organizationName: mode === "SIGNUP" && requireOrganization ? orgName : void 0,
|
|
341
|
+
mode,
|
|
342
|
+
recaptchaToken
|
|
343
|
+
});
|
|
344
|
+
if (res.success) {
|
|
345
|
+
import_react_hot_toast.default.success("Verification code sent");
|
|
346
|
+
setStep("OTP");
|
|
347
|
+
setCountdown(60);
|
|
348
|
+
} else {
|
|
349
|
+
import_react_hot_toast.default.error(res.error || "Authentication failed.");
|
|
350
|
+
}
|
|
351
|
+
} catch {
|
|
352
|
+
import_react_hot_toast.default.error("Service unavailable. Try again later.");
|
|
353
|
+
} finally {
|
|
354
|
+
setIsSubmitting(false);
|
|
355
|
+
}
|
|
356
|
+
};
|
|
357
|
+
const verifyOtpCode = async (codeToVerify) => {
|
|
358
|
+
if (codeToVerify.length !== 6 || isSubmitting) return;
|
|
359
|
+
setIsSubmitting(true);
|
|
360
|
+
try {
|
|
361
|
+
const res = await onVerifyOtp({ email: emailId, code: codeToVerify });
|
|
362
|
+
if (res.success) {
|
|
363
|
+
window.location.href = redirectUrl;
|
|
364
|
+
} else {
|
|
365
|
+
import_react_hot_toast.default.error(res.error || "Invalid code.");
|
|
366
|
+
setOtp(["", "", "", "", "", ""]);
|
|
367
|
+
inputRefs.current[0]?.focus();
|
|
368
|
+
}
|
|
369
|
+
} catch {
|
|
370
|
+
import_react_hot_toast.default.error("Verification failed.");
|
|
371
|
+
} finally {
|
|
372
|
+
setIsSubmitting(false);
|
|
373
|
+
}
|
|
374
|
+
};
|
|
375
|
+
const handleNextSignupStep = () => {
|
|
376
|
+
if (signupStep === "NAME") {
|
|
377
|
+
if (requireOrganization) setSignupStep("ORGANIZATION");
|
|
378
|
+
else setSignupStep("EMAIL_ID");
|
|
379
|
+
} else if (signupStep === "ORGANIZATION") {
|
|
380
|
+
setSignupStep("EMAIL_ID");
|
|
381
|
+
}
|
|
382
|
+
};
|
|
383
|
+
const isContinueDisabled = () => {
|
|
384
|
+
if (isSubmitting) return true;
|
|
385
|
+
if (mode === "LOGIN") return emailId.length < 3;
|
|
386
|
+
if (mode === "SIGNUP") {
|
|
387
|
+
if (signupStep === "NAME") return firstName.trim() === "" || lastName.trim() === "";
|
|
388
|
+
if (signupStep === "ORGANIZATION") return orgName.trim().length < 3;
|
|
389
|
+
if (signupStep === "EMAIL_ID") return emailId.length < 3 || !agreedToTerms;
|
|
390
|
+
}
|
|
391
|
+
return false;
|
|
392
|
+
};
|
|
393
|
+
return /* @__PURE__ */ import_react6.default.createElement("div", { className: "w-full max-w-md mx-auto border border-neutral-100 flex flex-col relative z-10 animate-in fade-in duration-300 rounded-2xl bg-white shadow-xs" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "p-8 md:p-12" }, step === "INPUT" && /* @__PURE__ */ import_react6.default.createElement("div", { className: "animate-in fade-in duration-300" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "mb-12 text-center mt-2" }, /* @__PURE__ */ import_react6.default.createElement("h2", { className: "text-xl text-black mb-2 tracking-tight " }, mode === "LOGIN" ? `${companyName} ${workspaceLabel}` : "Create Account"), /* @__PURE__ */ import_react6.default.createElement("div", { className: "text-[13px] text-neutral-500" }, mode === "LOGIN" ? /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, "Don't have an account? ", /* @__PURE__ */ import_react6.default.createElement("button", { type: "button", onClick: () => {
|
|
394
|
+
setMode("SIGNUP");
|
|
395
|
+
setSignupStep(getInitialSignupStep());
|
|
396
|
+
}, className: "text-black transition-colors ml-1" }, "Sign up")) : /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, "Already have an account? ", /* @__PURE__ */ import_react6.default.createElement("button", { type: "button", onClick: () => setMode("LOGIN"), className: "text-black transition-colors ml-1" }, "Log in")))), /* @__PURE__ */ import_react6.default.createElement("form", { className: "space-y-6", autoComplete: "off", onSubmit: (e) => {
|
|
397
|
+
e.preventDefault();
|
|
398
|
+
if (mode === "SIGNUP" && signupStep === "NAME") handleNextSignupStep();
|
|
399
|
+
else if (mode === "SIGNUP" && signupStep === "ORGANIZATION") handleNextSignupStep();
|
|
400
|
+
else handleAuthRequestSubmit();
|
|
401
|
+
} }, mode === "SIGNUP" && signupStep === "NAME" && requireNames && /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react6.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, "First Name"), /* @__PURE__ */ import_react6.default.createElement(
|
|
402
|
+
"input",
|
|
403
|
+
{
|
|
404
|
+
type: "text",
|
|
405
|
+
value: firstName,
|
|
406
|
+
onChange: (e) => setFirstName(cleanAlpha(e.target.value)),
|
|
407
|
+
required: true,
|
|
408
|
+
autoFocus: true,
|
|
409
|
+
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",
|
|
410
|
+
placeholder: "First name"
|
|
411
|
+
}
|
|
412
|
+
)), /* @__PURE__ */ import_react6.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react6.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, "Last Name"), /* @__PURE__ */ import_react6.default.createElement(
|
|
413
|
+
"input",
|
|
414
|
+
{
|
|
415
|
+
type: "text",
|
|
416
|
+
value: lastName,
|
|
417
|
+
onChange: (e) => setLastName(cleanAlpha(e.target.value)),
|
|
418
|
+
required: true,
|
|
419
|
+
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",
|
|
420
|
+
placeholder: "Last name"
|
|
421
|
+
}
|
|
422
|
+
))), mode === "SIGNUP" && signupStep === "ORGANIZATION" && requireOrganization && /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react6.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, "Organization Name"), /* @__PURE__ */ import_react6.default.createElement(
|
|
423
|
+
"input",
|
|
424
|
+
{
|
|
425
|
+
type: "text",
|
|
426
|
+
value: orgName,
|
|
427
|
+
onChange: (e) => setOrgName(cleanOrgName(e.target.value)),
|
|
428
|
+
required: true,
|
|
429
|
+
autoFocus: true,
|
|
430
|
+
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",
|
|
431
|
+
placeholder: "Acme Corporation"
|
|
432
|
+
}
|
|
433
|
+
))), (mode === "LOGIN" || mode === "SIGNUP" && signupStep === "EMAIL_ID") && /* @__PURE__ */ import_react6.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react6.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, "Email ID"), /* @__PURE__ */ import_react6.default.createElement(
|
|
434
|
+
"input",
|
|
435
|
+
{
|
|
436
|
+
type: "email",
|
|
437
|
+
value: emailId,
|
|
438
|
+
onChange: (e) => setEmailId(cleanEmailId(e.target.value)),
|
|
439
|
+
required: true,
|
|
440
|
+
autoFocus: true,
|
|
441
|
+
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",
|
|
442
|
+
placeholder: "name@company.com"
|
|
443
|
+
}
|
|
444
|
+
)), mode === "SIGNUP" && /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex items-start gap-3 mt-4" }, /* @__PURE__ */ import_react6.default.createElement(
|
|
445
|
+
"input",
|
|
446
|
+
{
|
|
447
|
+
type: "checkbox",
|
|
448
|
+
id: "zairus-terms",
|
|
449
|
+
checked: agreedToTerms,
|
|
450
|
+
onChange: (e) => setAgreedToTerms(e.target.checked),
|
|
451
|
+
className: "mt-0.5 w-4 h-4 bg-white border-neutral-300 rounded text-black focus:ring-black cursor-pointer",
|
|
452
|
+
required: true
|
|
453
|
+
}
|
|
454
|
+
), /* @__PURE__ */ import_react6.default.createElement("label", { htmlFor: "zairus-terms", className: "text-[11px] text-neutral-500 cursor-pointer leading-snug" }, "I agree to ", companyName, "'s ", /* @__PURE__ */ import_react6.default.createElement("a", { href: termsUrl, target: "_blank", rel: "noreferrer", className: "text-black underline font-medium" }, "Terms of Service"), " and ", /* @__PURE__ */ import_react6.default.createElement("a", { href: privacyUrl, target: "_blank", rel: "noreferrer", className: "text-black underline font-medium" }, "Privacy Policy"), "."))), /* @__PURE__ */ import_react6.default.createElement(
|
|
455
|
+
ThreeDActionButton,
|
|
456
|
+
{
|
|
457
|
+
type: "submit",
|
|
458
|
+
disabled: isContinueDisabled(),
|
|
459
|
+
isLoading: isSubmitting,
|
|
460
|
+
className: "w-full mt-10"
|
|
461
|
+
},
|
|
462
|
+
"Continue"
|
|
463
|
+
))), step === "OTP" && /* @__PURE__ */ import_react6.default.createElement("div", { className: "animate-in fade-in duration-300" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "text-center mb-10 mt-2" }, /* @__PURE__ */ import_react6.default.createElement("h2", { className: "text-xl text-black mb-2 tracking-tight " }, "Security Check"), /* @__PURE__ */ import_react6.default.createElement("p", { className: "text-[13px] text-neutral-500" }, "Enter the code sent to ", /* @__PURE__ */ import_react6.default.createElement("br", null), /* @__PURE__ */ import_react6.default.createElement("span", { className: "text-black font-medium" }, emailId))), /* @__PURE__ */ import_react6.default.createElement("form", { className: "space-y-10", autoComplete: "off", onSubmit: (e) => {
|
|
464
|
+
e.preventDefault();
|
|
465
|
+
verifyOtpCode(otp.join(""));
|
|
466
|
+
} }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex justify-between gap-2", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ import_react6.default.createElement(
|
|
467
|
+
"input",
|
|
468
|
+
{
|
|
469
|
+
key: index,
|
|
470
|
+
ref: (el) => {
|
|
471
|
+
inputRefs.current[index] = el;
|
|
472
|
+
},
|
|
473
|
+
type: "text",
|
|
474
|
+
inputMode: "numeric",
|
|
475
|
+
maxLength: 1,
|
|
476
|
+
value: digit,
|
|
477
|
+
onChange: (e) => handleOtpChange(index, e.target.value),
|
|
478
|
+
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"
|
|
479
|
+
}
|
|
480
|
+
))), /* @__PURE__ */ import_react6.default.createElement(
|
|
481
|
+
ThreeDActionButton,
|
|
482
|
+
{
|
|
483
|
+
type: "submit",
|
|
484
|
+
disabled: otp.join("").length < 6,
|
|
485
|
+
isLoading: isSubmitting,
|
|
486
|
+
className: "w-full"
|
|
487
|
+
},
|
|
488
|
+
"Verify Code"
|
|
489
|
+
)))));
|
|
490
|
+
}
|
|
491
|
+
var ZairusAuth = (props) => {
|
|
492
|
+
if (props.useRecaptcha && props.recaptchaSiteKey) {
|
|
493
|
+
return /* @__PURE__ */ import_react6.default.createElement(import_react_google_recaptcha_v3.GoogleReCaptchaProvider, { reCaptchaKey: props.recaptchaSiteKey }, /* @__PURE__ */ import_react6.default.createElement(import_react6.Suspense, { fallback: /* @__PURE__ */ import_react6.default.createElement("div", { className: "h-64 flex items-center justify-center" }, /* @__PURE__ */ import_react6.default.createElement(InputSpinner, null)) }, /* @__PURE__ */ import_react6.default.createElement(AuthFormInner, { ...props })));
|
|
494
|
+
}
|
|
495
|
+
return /* @__PURE__ */ import_react6.default.createElement(import_react6.Suspense, { fallback: /* @__PURE__ */ import_react6.default.createElement("div", { className: "h-64 flex items-center justify-center" }, /* @__PURE__ */ import_react6.default.createElement(InputSpinner, null)) }, /* @__PURE__ */ import_react6.default.createElement(AuthFormInner, { ...props }));
|
|
496
|
+
};
|
|
497
|
+
|
|
498
|
+
// src/components/Header.tsx
|
|
499
|
+
var import_react7 = __toESM(require("react"));
|
|
171
500
|
var import_link2 = __toESM(require("next/link"));
|
|
172
501
|
var import_image = __toESM(require("next/image"));
|
|
173
|
-
var
|
|
502
|
+
var import_navigation2 = require("next/navigation");
|
|
174
503
|
var NavLink = ({
|
|
175
504
|
href,
|
|
176
505
|
children,
|
|
177
506
|
className = "",
|
|
178
507
|
light = true
|
|
179
508
|
}) => {
|
|
180
|
-
const pathname = (0,
|
|
509
|
+
const pathname = (0, import_navigation2.usePathname)();
|
|
181
510
|
const isActive = pathname === href;
|
|
182
511
|
const activeClass = light ? "text-neutral-950 font-medium" : "text-white font-medium";
|
|
183
512
|
const inactiveClass = light ? "text-neutral-600 hover:text-neutral-950" : "text-neutral-400 hover:text-white";
|
|
184
|
-
return /* @__PURE__ */
|
|
513
|
+
return /* @__PURE__ */ import_react7.default.createElement(
|
|
185
514
|
import_link2.default,
|
|
186
515
|
{
|
|
187
516
|
href,
|
|
@@ -208,7 +537,7 @@ var Header = ({
|
|
|
208
537
|
const titleColor = light ? "text-black" : "text-white";
|
|
209
538
|
const subtitleColor = light ? "text-neutral-500" : "text-neutral-400";
|
|
210
539
|
const hasBrandSection = showLogo || !hideHeaderText;
|
|
211
|
-
return /* @__PURE__ */
|
|
540
|
+
return /* @__PURE__ */ import_react7.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_react7.default.createElement("div", { className: "max-w-5xl mx-auto w-full pointer-events-auto flex justify-center" }, /* @__PURE__ */ import_react7.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_react7.default.createElement("div", { className: "flex items-center shrink-0" }, /* @__PURE__ */ import_react7.default.createElement(import_link2.default, { href: "/", className: "flex items-center gap-3 transition-opacity hover:opacity-70" }, showLogo && /* @__PURE__ */ import_react7.default.createElement(
|
|
212
541
|
import_image.default,
|
|
213
542
|
{
|
|
214
543
|
src: logoSrc,
|
|
@@ -218,7 +547,7 @@ var Header = ({
|
|
|
218
547
|
className: `object-contain w-5 h-auto ${invert ? "invert" : ""}`,
|
|
219
548
|
priority: true
|
|
220
549
|
}
|
|
221
|
-
), !hideHeaderText && /* @__PURE__ */
|
|
550
|
+
), !hideHeaderText && /* @__PURE__ */ import_react7.default.createElement("div", { className: "flex flex-col justify-center" }, /* @__PURE__ */ import_react7.default.createElement("span", { className: `text-[12px] leading-none tracking-wide mb-1 transition-colors ${titleColor}` }, companyName), subtitle && /* @__PURE__ */ import_react7.default.createElement("span", { className: `text-[9px] tracking-widest leading-none transition-colors ${subtitleColor}` }, subtitle)))), /* @__PURE__ */ import_react7.default.createElement("nav", { className: "flex items-center gap-1 md:gap-2 shrink-0" }, links.map((link, index) => /* @__PURE__ */ import_react7.default.createElement(
|
|
222
551
|
NavLink,
|
|
223
552
|
{
|
|
224
553
|
key: index,
|
|
@@ -231,9 +560,9 @@ var Header = ({
|
|
|
231
560
|
};
|
|
232
561
|
|
|
233
562
|
// src/components/Footer.tsx
|
|
234
|
-
var
|
|
563
|
+
var import_react8 = __toESM(require("react"));
|
|
235
564
|
var import_link3 = __toESM(require("next/link"));
|
|
236
|
-
var
|
|
565
|
+
var import_react9 = require("@hugeicons/react");
|
|
237
566
|
var Footer = ({
|
|
238
567
|
description,
|
|
239
568
|
columns,
|
|
@@ -241,20 +570,20 @@ var Footer = ({
|
|
|
241
570
|
copyrightText,
|
|
242
571
|
topSection
|
|
243
572
|
}) => {
|
|
244
|
-
const [openCol, setOpenCol] = (0,
|
|
573
|
+
const [openCol, setOpenCol] = (0, import_react8.useState)(null);
|
|
245
574
|
const toggleColumn = (idx) => {
|
|
246
575
|
setOpenCol(openCol === idx ? null : idx);
|
|
247
576
|
};
|
|
248
|
-
return /* @__PURE__ */
|
|
577
|
+
return /* @__PURE__ */ import_react8.default.createElement("div", { className: "" }, topSection && topSection, /* @__PURE__ */ import_react8.default.createElement("footer", { className: "relative px-6 overflow-hidden flex flex-col" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "relative w-full max-w-7xl mx-auto z-20 flex flex-col" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "relative py-12 md:py-16" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start gap-12 lg:gap-16 mb-12 text-left" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "w-full lg:max-w-sm flex flex-col items-start justify-between shrink-0" }, /* @__PURE__ */ import_react8.default.createElement("div", null, /* @__PURE__ */ import_react8.default.createElement("p", { className: "text-[12px] font-serif text-neutral-600 leading-relaxed pr-4" }, description))), /* @__PURE__ */ import_react8.default.createElement("div", { className: "w-full lg:flex-1 lg:max-w-2xl" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "hidden md:grid grid-cols-2 gap-x-16 lg:gap-x-24 gap-y-12" }, columns.map((col, idx) => /* @__PURE__ */ import_react8.default.createElement("div", { key: idx, className: "flex flex-col" }, /* @__PURE__ */ import_react8.default.createElement("h4", { className: "text-[11px] tracking-[0.2em] text-black mb-6 uppercase" }, col.title), /* @__PURE__ */ import_react8.default.createElement("ul", { className: "space-y-4 text-[13px] text-neutral-500" }, col.links.map((link, lIdx) => /* @__PURE__ */ import_react8.default.createElement("li", { key: lIdx }, link.isExternal ? /* @__PURE__ */ import_react8.default.createElement("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", className: "hover:text-black transition-colors block truncate" }, link.label) : /* @__PURE__ */ import_react8.default.createElement(import_link3.default, { href: link.href, className: "hover:text-black transition-colors block truncate" }, link.label))))))), /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex flex-col md:hidden w-full border-t border-neutral-200 mt-4" }, columns.map((col, idx) => {
|
|
249
578
|
const isOpen = openCol === idx;
|
|
250
|
-
return /* @__PURE__ */
|
|
579
|
+
return /* @__PURE__ */ import_react8.default.createElement("div", { key: idx, className: "border-b border-neutral-200" }, /* @__PURE__ */ import_react8.default.createElement(
|
|
251
580
|
"button",
|
|
252
581
|
{
|
|
253
582
|
onClick: () => toggleColumn(idx),
|
|
254
583
|
className: "w-full flex items-center justify-between py-5 text-left outline-none"
|
|
255
584
|
},
|
|
256
|
-
/* @__PURE__ */
|
|
257
|
-
/* @__PURE__ */
|
|
585
|
+
/* @__PURE__ */ import_react8.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-black uppercase" }, col.title),
|
|
586
|
+
/* @__PURE__ */ import_react8.default.createElement(
|
|
258
587
|
"svg",
|
|
259
588
|
{
|
|
260
589
|
className: `w-4 h-4 text-neutral-400 transition-transform duration-300 ${isOpen ? "rotate-180" : ""}`,
|
|
@@ -262,10 +591,10 @@ var Footer = ({
|
|
|
262
591
|
viewBox: "0 0 24 24",
|
|
263
592
|
stroke: "currentColor"
|
|
264
593
|
},
|
|
265
|
-
/* @__PURE__ */
|
|
594
|
+
/* @__PURE__ */ import_react8.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M19 9l-7 7-7-7" })
|
|
266
595
|
)
|
|
267
|
-
), /* @__PURE__ */
|
|
268
|
-
})))), /* @__PURE__ */
|
|
596
|
+
), /* @__PURE__ */ import_react8.default.createElement("div", { className: `grid transition-all duration-300 ease-in-out ${isOpen ? "grid-rows-[1fr] pb-6 opacity-100" : "grid-rows-[0fr] opacity-0"}` }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "overflow-hidden" }, /* @__PURE__ */ import_react8.default.createElement("ul", { className: "space-y-4 text-[13px] text-neutral-500 pt-2" }, col.links.map((link, lIdx) => /* @__PURE__ */ import_react8.default.createElement("li", { key: lIdx }, link.isExternal ? /* @__PURE__ */ import_react8.default.createElement("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", className: "hover:text-black transition-colors" }, link.label) : /* @__PURE__ */ import_react8.default.createElement(import_link3.default, { href: link.href, className: "hover:text-black transition-colors" }, link.label)))))));
|
|
597
|
+
})))), /* @__PURE__ */ import_react8.default.createElement("div", { className: "pt-8 mt-4 border-t border-neutral-200 flex flex-col-reverse md:flex-row justify-between items-start md:items-center gap-6 relative z-20" }, /* @__PURE__ */ import_react8.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-widest text-left" }, copyrightText), socialLinks && socialLinks.length > 0 && /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex items-center gap-6" }, socialLinks.map((social, idx) => /* @__PURE__ */ import_react8.default.createElement(
|
|
269
598
|
"a",
|
|
270
599
|
{
|
|
271
600
|
key: idx,
|
|
@@ -275,12 +604,12 @@ var Footer = ({
|
|
|
275
604
|
className: "text-neutral-400 hover:text-black transition-colors",
|
|
276
605
|
"aria-label": social.name
|
|
277
606
|
},
|
|
278
|
-
/* @__PURE__ */
|
|
607
|
+
/* @__PURE__ */ import_react8.default.createElement(import_react9.HugeiconsIcon, { icon: social.icon, size: 20 })
|
|
279
608
|
))))))));
|
|
280
609
|
};
|
|
281
610
|
|
|
282
611
|
// src/components/HeroSection.tsx
|
|
283
|
-
var
|
|
612
|
+
var import_react10 = __toESM(require("react"));
|
|
284
613
|
var import_link4 = __toESM(require("next/link"));
|
|
285
614
|
var import_image2 = __toESM(require("next/image"));
|
|
286
615
|
var HeroSection = ({
|
|
@@ -296,7 +625,7 @@ var HeroSection = ({
|
|
|
296
625
|
showImage = false,
|
|
297
626
|
imageSrc = "/assets/ai.avif"
|
|
298
627
|
}) => {
|
|
299
|
-
return /* @__PURE__ */
|
|
628
|
+
return /* @__PURE__ */ import_react10.default.createElement("section", { className: "relative pt-32 sm:pt-40 pb-16 flex flex-col items-center overflow-hidden w-full" }, /* @__PURE__ */ import_react10.default.createElement(
|
|
300
629
|
"div",
|
|
301
630
|
{
|
|
302
631
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0",
|
|
@@ -304,7 +633,7 @@ var HeroSection = ({
|
|
|
304
633
|
background: `radial-gradient(120% 100% at 50% 0%, #043324 0%, #21a473 45%, #e0f6ce 80%, #f5f5f5 100%)`
|
|
305
634
|
}
|
|
306
635
|
}
|
|
307
|
-
), /* @__PURE__ */
|
|
636
|
+
), /* @__PURE__ */ import_react10.default.createElement(
|
|
308
637
|
"div",
|
|
309
638
|
{
|
|
310
639
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.25] mix-blend-overlay",
|
|
@@ -312,14 +641,14 @@ var HeroSection = ({
|
|
|
312
641
|
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")`
|
|
313
642
|
}
|
|
314
643
|
}
|
|
315
|
-
), /* @__PURE__ */
|
|
644
|
+
), /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative max-w-5xl mx-auto px-4 sm:px-6 w-full flex flex-col items-center text-center z-10" }, badgeText && /* @__PURE__ */ import_react10.default.createElement("div", { className: "inline-flex items-center gap-1.5 mb-6 px-4 py-1.5 rounded-full bg-white/10 backdrop-blur-md shadow-xs" }, /* @__PURE__ */ import_react10.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-white uppercase" }, badgeText)), /* @__PURE__ */ import_react10.default.createElement("h1", { className: "text-[40px] md:text-5xl lg:text-7xl text-white tracking-tight leading-[1.05] max-w-4xl mb-4" }, titlePrefix), /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex justify-center mt-2 mb-10 md:mb-14" }, /* @__PURE__ */ import_react10.default.createElement("span", { className: "relative inline-block mx-1.5 px-4 py-2 md:py-3 bg-[#21a473]/25 border border-[#3ae9a8] rounded-sm text-white select-none font-serif text-4xl lg:text-6xl tracking-tight" }, /* @__PURE__ */ import_react10.default.createElement("span", { className: "absolute top-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#21a473] rounded-[1px] z-10" }), /* @__PURE__ */ import_react10.default.createElement("span", { className: "absolute top-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#21a473] rounded-[1px] z-10" }), /* @__PURE__ */ import_react10.default.createElement("span", { className: "absolute bottom-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#21a473] rounded-[1px] z-10" }), /* @__PURE__ */ import_react10.default.createElement("span", { className: "absolute bottom-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#21a473] rounded-[1px] z-10" }), highlightText, /* @__PURE__ */ import_react10.default.createElement("span", { className: "absolute -bottom-5 -right-5 flex items-center z-20 pointer-events-none select-none filter drop-shadow-[0_2px_4px_rgba(0,0,0,0.25)]" }, /* @__PURE__ */ import_react10.default.createElement("svg", { width: "18", height: "22", viewBox: "0 0 16 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: "transform -rotate-12" }, /* @__PURE__ */ import_react10.default.createElement("path", { d: "M1 1V17.8L5.8 13.1H12.8L1 1Z", fill: "#21a473", stroke: "white", strokeWidth: "1.8", strokeLinejoin: "round" })), /* @__PURE__ */ import_react10.default.createElement("span", { className: "ml-1 bg-[#21a473] text-[10px] text-white px-2 py-0.5 rounded-full border border-white tracking-wide" }, cursorLabel)))), subtitle && /* @__PURE__ */ import_react10.default.createElement("p", { className: "text-[13px] md:text-[15px] text-[#bbf7df]/90 max-w-xl mx-auto mb-10 font-light leading-relaxed" }, subtitle), /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 justify-center items-center w-full px-2 sm:px-0 mx-auto mb-10" }, ctaText && ctaHref && /* @__PURE__ */ import_react10.default.createElement("div", { className: "w-full sm:w-60 flex justify-center *:w-full" }, /* @__PURE__ */ import_react10.default.createElement(ThreeDButton, { href: ctaHref }, ctaText)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react10.default.createElement(
|
|
316
645
|
import_link4.default,
|
|
317
646
|
{
|
|
318
647
|
href: secondaryCtaHref,
|
|
319
648
|
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 transition-colors hover:bg-neutral-200 outline-none"
|
|
320
649
|
},
|
|
321
650
|
secondaryCtaText
|
|
322
|
-
)), showImage && /* @__PURE__ */
|
|
651
|
+
)), showImage && /* @__PURE__ */ import_react10.default.createElement("div", { className: "w-full max-w-4xl mx-auto px-2 sm:px-6" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative w-full flex flex-col items-center" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative w-full rounded-t-xl overflow-hidden border-[5px] border-[#1c1c1e] bg-[#1c1c1e] shadow-2xl aspect-video" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "absolute top-1.5 left-1/2 -translate-x-1/2 w-2.5 h-2.5 bg-[#0a0a0b] rounded-full flex items-center justify-center z-30" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "w-1 h-1 bg-[#1a2d42] rounded-full" })), /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative w-full h-full rounded-sm overflow-hidden" }, /* @__PURE__ */ import_react10.default.createElement(
|
|
323
652
|
import_image2.default,
|
|
324
653
|
{
|
|
325
654
|
src: imageSrc,
|
|
@@ -329,14 +658,14 @@ var HeroSection = ({
|
|
|
329
658
|
className: "object-cover object-top",
|
|
330
659
|
priority: true
|
|
331
660
|
}
|
|
332
|
-
))), /* @__PURE__ */
|
|
661
|
+
))), /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative w-[105%] h-2 md:h-2.5 bg-linear-to-b from-[#e2e8f0] via-[#cbd5e1] to-[#94a3b8] rounded-b-xl border-t border-slate-300 shadow-xl flex justify-center" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "w-16 md:w-24 h-1 md:h-1.5 bg-slate-400/30 rounded-b-md" }))))));
|
|
333
662
|
};
|
|
334
663
|
|
|
335
664
|
// src/components/AppBento2.tsx
|
|
336
|
-
var
|
|
337
|
-
var
|
|
665
|
+
var import_react11 = __toESM(require("react"));
|
|
666
|
+
var import_react12 = require("@hugeicons/react");
|
|
338
667
|
var AppBento2 = ({ tagline, headline, features }) => {
|
|
339
|
-
return /* @__PURE__ */
|
|
668
|
+
return /* @__PURE__ */ import_react11.default.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react11.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 block mb-4 uppercase" }, tagline), /* @__PURE__ */ import_react11.default.createElement("h2", { className: "text-3xl font-serif md:text-4xl tracking-tight text-black leading-[1.1]" }, headline))), /* @__PURE__ */ import_react11.default.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-6 gap-6" }, features.map((f, i) => {
|
|
340
669
|
const isWhite = i === 0;
|
|
341
670
|
const isBlack = i === 1;
|
|
342
671
|
const isNeutral = i === 2;
|
|
@@ -358,35 +687,35 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
358
687
|
const textColor = isBlack ? "text-white" : "text-black";
|
|
359
688
|
const subTextColor = isBlack ? "text-neutral-300" : "text-neutral-600";
|
|
360
689
|
const labelColor = isBlack ? "text-neutral-400" : "text-neutral-500";
|
|
361
|
-
return /* @__PURE__ */
|
|
690
|
+
return /* @__PURE__ */ import_react11.default.createElement(
|
|
362
691
|
"div",
|
|
363
692
|
{
|
|
364
693
|
key: i,
|
|
365
694
|
className: `relative rounded-2xl overflow-hidden p-8 flex flex-col min-h-75 transition-all duration-500 group text-left ${getBgStyle()} ${f.size}`,
|
|
366
695
|
style: { boxShadow: getShadowStyle() }
|
|
367
696
|
},
|
|
368
|
-
/* @__PURE__ */
|
|
697
|
+
/* @__PURE__ */ import_react11.default.createElement(
|
|
369
698
|
"div",
|
|
370
699
|
{
|
|
371
700
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
372
701
|
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")` }
|
|
373
702
|
}
|
|
374
703
|
),
|
|
375
|
-
isBlack && /* @__PURE__ */
|
|
376
|
-
/* @__PURE__ */
|
|
377
|
-
/* @__PURE__ */
|
|
704
|
+
isBlack && /* @__PURE__ */ import_react11.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" }),
|
|
705
|
+
/* @__PURE__ */ import_react11.default.createElement("div", { className: "absolute inset-0 overflow-hidden pointer-events-none z-0" }, /* @__PURE__ */ import_react11.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_react11.default.createElement(import_react12.HugeiconsIcon, { icon: f.icon, size: 180 }))),
|
|
706
|
+
/* @__PURE__ */ import_react11.default.createElement("div", { className: "relative z-10 w-full h-full flex flex-col pointer-events-auto" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-center justify-between mb-8" }, /* @__PURE__ */ import_react11.default.createElement("span", { className: `text-[9px] uppercase tracking-widest ${labelColor}` }, f.label), /* @__PURE__ */ import_react11.default.createElement("div", { className: `p-2 rounded-full transition-colors ${isBlack ? "bg-white/10" : "bg-white/50 backdrop-blur-sm"}` }, /* @__PURE__ */ import_react11.default.createElement(import_react12.HugeiconsIcon, { icon: f.icon, size: 20, className: textColor }))), /* @__PURE__ */ import_react11.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react11.default.createElement("h3", { className: `text-xl font-serif mb-2 tracking-tight ${textColor}` }, f.title), /* @__PURE__ */ import_react11.default.createElement("p", { className: `text-[13px] leading-relaxed max-w-sm ${subTextColor}` }, f.desc)))
|
|
378
707
|
);
|
|
379
708
|
})))));
|
|
380
709
|
};
|
|
381
710
|
|
|
382
711
|
// src/components/FeatureScroll.tsx
|
|
383
|
-
var
|
|
712
|
+
var import_react13 = __toESM(require("react"));
|
|
384
713
|
var import_image3 = __toESM(require("next/image"));
|
|
385
|
-
var
|
|
386
|
-
var
|
|
714
|
+
var import_react14 = require("@hugeicons/react");
|
|
715
|
+
var import_core_free_icons3 = require("@hugeicons/core-free-icons");
|
|
387
716
|
var FeatureCard = ({ feature }) => {
|
|
388
|
-
const [isLoading, setIsLoading] = (0,
|
|
389
|
-
return /* @__PURE__ */
|
|
717
|
+
const [isLoading, setIsLoading] = (0, import_react13.useState)(!!feature.image);
|
|
718
|
+
return /* @__PURE__ */ import_react13.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_react13.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_react13.default.createElement(
|
|
390
719
|
"div",
|
|
391
720
|
{
|
|
392
721
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-20 mix-blend-overlay",
|
|
@@ -395,7 +724,7 @@ var FeatureCard = ({ feature }) => {
|
|
|
395
724
|
backgroundRepeat: "repeat"
|
|
396
725
|
}
|
|
397
726
|
}
|
|
398
|
-
), isLoading && feature.image && /* @__PURE__ */
|
|
727
|
+
), isLoading && feature.image && /* @__PURE__ */ import_react13.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-50/50 backdrop-blur-sm" }, /* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons3.Loading03Icon, size: 32, className: "animate-spin text-neutral-400" })), feature.image ? /* @__PURE__ */ import_react13.default.createElement(
|
|
399
728
|
import_image3.default,
|
|
400
729
|
{
|
|
401
730
|
src: feature.image,
|
|
@@ -409,12 +738,12 @@ var FeatureCard = ({ feature }) => {
|
|
|
409
738
|
group-hover:scale-105
|
|
410
739
|
`
|
|
411
740
|
}
|
|
412
|
-
) : /* @__PURE__ */
|
|
741
|
+
) : /* @__PURE__ */ import_react13.default.createElement("div", { className: "absolute inset-0 bg-white z-0 transition-transform duration-700 ease-out group-hover:scale-105" })), /* @__PURE__ */ import_react13.default.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ import_react13.default.createElement("h3", { className: "text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ import_react13.default.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 max-w-[90%]" }, feature.desc)));
|
|
413
742
|
};
|
|
414
743
|
var FeatureScroll = ({ tagline, headline, features }) => {
|
|
415
|
-
const scrollRef = (0,
|
|
416
|
-
const [canScrollLeft, setCanScrollLeft] = (0,
|
|
417
|
-
const [canScrollRight, setCanScrollRight] = (0,
|
|
744
|
+
const scrollRef = (0, import_react13.useRef)(null);
|
|
745
|
+
const [canScrollLeft, setCanScrollLeft] = (0, import_react13.useState)(false);
|
|
746
|
+
const [canScrollRight, setCanScrollRight] = (0, import_react13.useState)(true);
|
|
418
747
|
const checkScroll = () => {
|
|
419
748
|
if (scrollRef.current) {
|
|
420
749
|
const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;
|
|
@@ -422,7 +751,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
422
751
|
setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 2);
|
|
423
752
|
}
|
|
424
753
|
};
|
|
425
|
-
(0,
|
|
754
|
+
(0, import_react13.useEffect)(() => {
|
|
426
755
|
checkScroll();
|
|
427
756
|
window.addEventListener("resize", checkScroll);
|
|
428
757
|
return () => window.removeEventListener("resize", checkScroll);
|
|
@@ -433,7 +762,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
433
762
|
scrollRef.current.scrollBy({ left: scrollAmount, behavior: "smooth" });
|
|
434
763
|
}
|
|
435
764
|
};
|
|
436
|
-
return /* @__PURE__ */
|
|
765
|
+
return /* @__PURE__ */ import_react13.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "relative z-10 text-left" }, /* @__PURE__ */ import_react13.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ import_react13.default.createElement("h2", { className: "text-3xl font-serif md:text-5xl tracking-tight text-black leading-[1.05]" }, headline)), /* @__PURE__ */ import_react13.default.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ import_react13.default.createElement(
|
|
437
766
|
"button",
|
|
438
767
|
{
|
|
439
768
|
onClick: () => scroll("left"),
|
|
@@ -441,8 +770,8 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
441
770
|
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",
|
|
442
771
|
"aria-label": "Previous feature"
|
|
443
772
|
},
|
|
444
|
-
/* @__PURE__ */
|
|
445
|
-
), /* @__PURE__ */
|
|
773
|
+
/* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons3.ArrowLeft01Icon, size: 20 })
|
|
774
|
+
), /* @__PURE__ */ import_react13.default.createElement(
|
|
446
775
|
"button",
|
|
447
776
|
{
|
|
448
777
|
onClick: () => scroll("right"),
|
|
@@ -450,39 +779,39 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
450
779
|
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",
|
|
451
780
|
"aria-label": "Next feature"
|
|
452
781
|
},
|
|
453
|
-
/* @__PURE__ */
|
|
454
|
-
))), /* @__PURE__ */
|
|
782
|
+
/* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons3.ArrowRight01Icon, size: 20 })
|
|
783
|
+
))), /* @__PURE__ */ import_react13.default.createElement(
|
|
455
784
|
"div",
|
|
456
785
|
{
|
|
457
786
|
ref: scrollRef,
|
|
458
787
|
onScroll: checkScroll,
|
|
459
788
|
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"
|
|
460
789
|
},
|
|
461
|
-
features.map((feature, idx) => /* @__PURE__ */
|
|
462
|
-
), /* @__PURE__ */
|
|
790
|
+
features.map((feature, idx) => /* @__PURE__ */ import_react13.default.createElement(FeatureCard, { key: idx, feature }))
|
|
791
|
+
), /* @__PURE__ */ import_react13.default.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ import_react13.default.createElement(
|
|
463
792
|
"button",
|
|
464
793
|
{
|
|
465
794
|
onClick: () => scroll("left"),
|
|
466
795
|
disabled: !canScrollLeft,
|
|
467
796
|
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"
|
|
468
797
|
},
|
|
469
|
-
/* @__PURE__ */
|
|
470
|
-
), /* @__PURE__ */
|
|
798
|
+
/* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons3.ArrowLeft01Icon, size: 20 })
|
|
799
|
+
), /* @__PURE__ */ import_react13.default.createElement(
|
|
471
800
|
"button",
|
|
472
801
|
{
|
|
473
802
|
onClick: () => scroll("right"),
|
|
474
803
|
disabled: !canScrollRight,
|
|
475
804
|
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"
|
|
476
805
|
},
|
|
477
|
-
/* @__PURE__ */
|
|
806
|
+
/* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons3.ArrowRight01Icon, size: 20 })
|
|
478
807
|
))));
|
|
479
808
|
};
|
|
480
809
|
|
|
481
810
|
// src/components/AITranscriptionFeature.tsx
|
|
482
|
-
var
|
|
811
|
+
var import_react15 = __toESM(require("react"));
|
|
483
812
|
var import_image4 = __toESM(require("next/image"));
|
|
484
|
-
var
|
|
485
|
-
var
|
|
813
|
+
var import_react16 = require("@hugeicons/react");
|
|
814
|
+
var import_core_free_icons4 = require("@hugeicons/core-free-icons");
|
|
486
815
|
var AITranscriptionFeature = ({
|
|
487
816
|
tagline,
|
|
488
817
|
headline,
|
|
@@ -493,8 +822,8 @@ var AITranscriptionFeature = ({
|
|
|
493
822
|
cursorLabel,
|
|
494
823
|
detailTextSuffix
|
|
495
824
|
}) => {
|
|
496
|
-
const [isLoading, setIsLoading] = (0,
|
|
497
|
-
return /* @__PURE__ */
|
|
825
|
+
const [isLoading, setIsLoading] = (0, import_react15.useState)(!!imagePath);
|
|
826
|
+
return /* @__PURE__ */ import_react15.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react15.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_react15.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ import_react15.default.createElement("h2", { className: "text-3xl font-serif md:text-5xl tracking-tight animate-gradient-wipe leading-[1.05] mb-4" }, headline), /* @__PURE__ */ import_react15.default.createElement("p", { className: "text-[15px] md:text-[16px] leading-[1.8] text-neutral-600 max-w-xl mx-auto" }, description)), /* @__PURE__ */ import_react15.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_react15.default.createElement(
|
|
498
827
|
"div",
|
|
499
828
|
{
|
|
500
829
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-20 mix-blend-overlay",
|
|
@@ -503,7 +832,7 @@ var AITranscriptionFeature = ({
|
|
|
503
832
|
backgroundRepeat: "repeat"
|
|
504
833
|
}
|
|
505
834
|
}
|
|
506
|
-
), isLoading && imagePath && /* @__PURE__ */
|
|
835
|
+
), isLoading && imagePath && /* @__PURE__ */ import_react15.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_react15.default.createElement(import_react16.HugeiconsIcon, { icon: import_core_free_icons4.Loading03Icon, size: 32, className: "animate-spin text-neutral-400" })), imagePath ? /* @__PURE__ */ import_react15.default.createElement(
|
|
507
836
|
import_image4.default,
|
|
508
837
|
{
|
|
509
838
|
src: imagePath,
|
|
@@ -516,32 +845,32 @@ var AITranscriptionFeature = ({
|
|
|
516
845
|
${isLoading ? "scale-105 blur-2xl opacity-0" : "scale-100 blur-0 opacity-100"}
|
|
517
846
|
`
|
|
518
847
|
}
|
|
519
|
-
) : /* @__PURE__ */
|
|
848
|
+
) : /* @__PURE__ */ import_react15.default.createElement("div", { className: "absolute inset-0 bg-white z-0" })), /* @__PURE__ */ import_react15.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_react15.default.createElement("p", { className: "text-[18px] sm:text-[22px] md:text-[25px] leading-[1.8] text-neutral-800" }, detailTextPrefix, " ", /* @__PURE__ */ import_react15.default.createElement("span", { className: "relative font-serif inline-block mx-1 px-2.5 py-0.5 bg-[#20A272]/10 border border-[#20A272] rounded-[3px] text-[#1C3D36] transition-all duration-300 max-w-full wrap-break-word" }, /* @__PURE__ */ import_react15.default.createElement("span", { className: "absolute top-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#20A272] rounded-[1px] z-10" }), /* @__PURE__ */ import_react15.default.createElement("span", { className: "absolute top-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#20A272] rounded-[1px] z-10" }), /* @__PURE__ */ import_react15.default.createElement("span", { className: "absolute bottom-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#20A272] rounded-[1px] z-10" }), /* @__PURE__ */ import_react15.default.createElement("span", { className: "absolute bottom-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#20A272] rounded-[1px] z-10" }), highlightText, /* @__PURE__ */ import_react15.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_react15.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_react15.default.createElement("path", { d: "M1 1V17.8L5.8 13.1H12.8L1 1Z", fill: "#20A272", stroke: "white", strokeWidth: "1.8", strokeLinejoin: "round" })), /* @__PURE__ */ import_react15.default.createElement("span", { className: "ml-1 bg-[#20A272] text-[10px] text-white font-mono px-2 py-0.5 rounded-full border border-white tracking-wide" }, cursorLabel))), " ", detailTextSuffix))));
|
|
520
849
|
};
|
|
521
850
|
|
|
522
851
|
// src/components/PlatformFeatures.tsx
|
|
523
|
-
var
|
|
524
|
-
var
|
|
852
|
+
var import_react17 = __toESM(require("react"));
|
|
853
|
+
var import_react18 = require("@hugeicons/react");
|
|
525
854
|
var PlatformFeatures = ({
|
|
526
855
|
tagline,
|
|
527
856
|
headline,
|
|
528
857
|
description,
|
|
529
858
|
features
|
|
530
859
|
}) => {
|
|
531
|
-
return /* @__PURE__ */
|
|
860
|
+
return /* @__PURE__ */ import_react17.default.createElement("section", { className: "w-full flex justify-center mb-15 relative z-10" }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex flex-col items-start mb-16 relative z-10" }, /* @__PURE__ */ import_react17.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ import_react17.default.createElement("h2", { className: "text-3xl font-serif md:text-5xl tracking-tight text-black leading-[1.05] mb-6" }, headline), /* @__PURE__ */ import_react17.default.createElement("p", { className: "text-[15px] md:text-[16px] leading-[1.8] text-neutral-600 max-w-2xl" }, description)), /* @__PURE__ */ import_react17.default.createElement("div", { className: "w-full h-px bg-neutral-100 mb-16", "aria-hidden": "true" }), /* @__PURE__ */ import_react17.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_react17.default.createElement(
|
|
532
861
|
"div",
|
|
533
862
|
{
|
|
534
863
|
key: idx,
|
|
535
864
|
className: "flex flex-col group animate-in fade-in slide-in-from-bottom-4 duration-700 fill-mode-both",
|
|
536
865
|
style: { animationDelay: feature.delay || "0ms" }
|
|
537
866
|
},
|
|
538
|
-
/* @__PURE__ */
|
|
539
|
-
/* @__PURE__ */
|
|
867
|
+
/* @__PURE__ */ import_react17.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_react17.default.createElement(import_react18.HugeiconsIcon, { icon: feature.icon, size: 24 })),
|
|
868
|
+
/* @__PURE__ */ import_react17.default.createElement("div", null, /* @__PURE__ */ import_react17.default.createElement("h3", { className: "text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ import_react17.default.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 pr-4" }, feature.desc))
|
|
540
869
|
)))));
|
|
541
870
|
};
|
|
542
871
|
|
|
543
872
|
// src/components/ManagedDocument.tsx
|
|
544
|
-
var
|
|
873
|
+
var import_react19 = __toESM(require("react"));
|
|
545
874
|
var ManagedDocument = ({
|
|
546
875
|
tagline,
|
|
547
876
|
title,
|
|
@@ -551,7 +880,7 @@ var ManagedDocument = ({
|
|
|
551
880
|
}) => {
|
|
552
881
|
return (
|
|
553
882
|
// Outer layout wrapper (takes up available space, adds padding)
|
|
554
|
-
/* @__PURE__ */
|
|
883
|
+
/* @__PURE__ */ import_react19.default.createElement("div", { className: "grow pt-28 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 text-left block uppercase" }, tagline), /* @__PURE__ */ import_react19.default.createElement("h1", { className: "text-4xl font-serif md:text-5xl mt-4 text-black tracking-tight text-left" }, title)), sections.map((section, index) => /* @__PURE__ */ import_react19.default.createElement("div", { key: index, className: "relative px-5 md:px-12 py-8 md:py-10" }, section.heading && /* @__PURE__ */ import_react19.default.createElement("h2", { className: "text-[11px] tracking-[0.2em] text-black mb-4 text-left uppercase" }, section.heading), section.paragraphs && section.paragraphs.length > 0 && /* @__PURE__ */ import_react19.default.createElement("div", { className: "text-[14px] leading-[1.8] text-neutral-700 space-y-4 text-left font-light" }, section.paragraphs.map((text, pIndex) => /* @__PURE__ */ import_react19.default.createElement("p", { key: pIndex }, text))), section.quote && /* @__PURE__ */ import_react19.default.createElement("div", { className: `bg-neutral-100 rounded-xl p-6 ${section.paragraphs && section.paragraphs.length > 0 ? "mt-6" : ""}` }, /* @__PURE__ */ import_react19.default.createElement("p", { className: "italic text-neutral-900 text-[13px] md:text-[14px] leading-relaxed" }, '"', section.quote, '"')))), (contactText || contactEmail) && /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-[12px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ import_react19.default.createElement(
|
|
555
884
|
"a",
|
|
556
885
|
{
|
|
557
886
|
href: `mailto:${contactEmail}`,
|
|
@@ -563,18 +892,18 @@ var ManagedDocument = ({
|
|
|
563
892
|
};
|
|
564
893
|
|
|
565
894
|
// src/components/ManagedContactBlock.tsx
|
|
566
|
-
var
|
|
567
|
-
var
|
|
895
|
+
var import_react20 = __toESM(require("react"));
|
|
896
|
+
var import_react21 = require("@hugeicons/react");
|
|
568
897
|
var SecureEmail = ({ user, domain, className }) => {
|
|
569
|
-
const [isMounted, setIsMounted] = (0,
|
|
570
|
-
(0,
|
|
898
|
+
const [isMounted, setIsMounted] = (0, import_react20.useState)(false);
|
|
899
|
+
(0, import_react20.useEffect)(() => {
|
|
571
900
|
setIsMounted(true);
|
|
572
901
|
}, []);
|
|
573
902
|
if (!isMounted) {
|
|
574
|
-
return /* @__PURE__ */
|
|
903
|
+
return /* @__PURE__ */ import_react20.default.createElement("span", { className, style: { opacity: 0 } }, "Loading");
|
|
575
904
|
}
|
|
576
905
|
const email = `${user}@${domain}`;
|
|
577
|
-
return /* @__PURE__ */
|
|
906
|
+
return /* @__PURE__ */ import_react20.default.createElement("a", { href: `mailto:${email}`, className }, email);
|
|
578
907
|
};
|
|
579
908
|
var ManagedContactBlock = ({
|
|
580
909
|
tagline,
|
|
@@ -583,7 +912,7 @@ var ManagedContactBlock = ({
|
|
|
583
912
|
emails,
|
|
584
913
|
socials
|
|
585
914
|
}) => {
|
|
586
|
-
return /* @__PURE__ */
|
|
915
|
+
return /* @__PURE__ */ import_react20.default.createElement("div", { className: "grow pt-28 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react20.default.createElement(
|
|
587
916
|
"div",
|
|
588
917
|
{
|
|
589
918
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -592,21 +921,21 @@ var ManagedContactBlock = ({
|
|
|
592
921
|
backgroundRepeat: "repeat"
|
|
593
922
|
}
|
|
594
923
|
}
|
|
595
|
-
), /* @__PURE__ */
|
|
924
|
+
), /* @__PURE__ */ import_react20.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "relative px-8 md:px-12 py-10" }, tagline && /* @__PURE__ */ import_react20.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 text-left block uppercase" }, tagline), /* @__PURE__ */ import_react20.default.createElement("h1", { className: "text-4xl font-serif md:text-5xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ import_react20.default.createElement("div", { className: "relative px-8 md:px-12 py-8 pb-14" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex flex-wrap gap-12 lg:gap-16 w-full" }, company && /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react20.default.createElement("h2", { className: "text-[11px] tracking-[0.2em] text-black mb-4 uppercase" }, "Contact Details"), /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-3 text-[13px] text-neutral-600 leading-[1.8]" }, company.name && /* @__PURE__ */ import_react20.default.createElement("p", { className: "text-black" }, company.name), company.lines && company.lines.map((line, idx) => /* @__PURE__ */ import_react20.default.createElement("p", { key: idx }, line)), company.phone && /* @__PURE__ */ import_react20.default.createElement("p", { className: "pt-2" }, /* @__PURE__ */ import_react20.default.createElement(
|
|
596
925
|
"a",
|
|
597
926
|
{
|
|
598
927
|
href: `tel:${company.phone.replace(/\s+/g, "")}`,
|
|
599
928
|
className: "transition-colors hover:text-black"
|
|
600
929
|
},
|
|
601
930
|
company.phone
|
|
602
|
-
)))), emails && emails.length > 0 && /* @__PURE__ */
|
|
931
|
+
)))), emails && emails.length > 0 && /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react20.default.createElement("h2", { className: "text-[11px] tracking-[0.2em] text-black mb-4 uppercase" }, "Email Directory"), /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-6 text-[13px]" }, emails.map((email, idx) => /* @__PURE__ */ import_react20.default.createElement("div", { key: idx }, /* @__PURE__ */ import_react20.default.createElement("p", { className: "text-[10px] tracking-[0.2em] mb-1.5 text-neutral-500 uppercase" }, email.label), /* @__PURE__ */ import_react20.default.createElement(
|
|
603
932
|
SecureEmail,
|
|
604
933
|
{
|
|
605
934
|
user: email.user,
|
|
606
935
|
domain: email.domain,
|
|
607
936
|
className: "text-neutral-600 transition-colors hover:text-black"
|
|
608
937
|
}
|
|
609
|
-
))))), socials && socials.length > 0 && /* @__PURE__ */
|
|
938
|
+
))))), socials && socials.length > 0 && /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react20.default.createElement("h2", { className: "text-[11px] tracking-[0.2em] text-black mb-4 uppercase" }, "Find Us Online"), /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex flex-col space-y-5 pt-1" }, socials.map((social, idx) => /* @__PURE__ */ import_react20.default.createElement(
|
|
610
939
|
"a",
|
|
611
940
|
{
|
|
612
941
|
key: idx,
|
|
@@ -616,29 +945,29 @@ var ManagedContactBlock = ({
|
|
|
616
945
|
className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black",
|
|
617
946
|
"aria-label": social.label
|
|
618
947
|
},
|
|
619
|
-
/* @__PURE__ */
|
|
620
|
-
/* @__PURE__ */
|
|
948
|
+
/* @__PURE__ */ import_react20.default.createElement(import_react21.HugeiconsIcon, { icon: social.icon, size: 18 }),
|
|
949
|
+
/* @__PURE__ */ import_react20.default.createElement("span", { className: "text-[13px]" }, social.label)
|
|
621
950
|
)))))))));
|
|
622
951
|
};
|
|
623
952
|
|
|
624
953
|
// src/components/ManagedPricingBlock.tsx
|
|
625
|
-
var
|
|
954
|
+
var import_react22 = __toESM(require("react"));
|
|
626
955
|
var import_link5 = __toESM(require("next/link"));
|
|
627
|
-
var CheckIcon = ({ className = "" }) => /* @__PURE__ */
|
|
628
|
-
var CrossIcon = ({ className = "" }) => /* @__PURE__ */
|
|
956
|
+
var CheckIcon = ({ className = "" }) => /* @__PURE__ */ import_react22.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_react22.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ import_react22.default.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
957
|
+
var CrossIcon = ({ className = "" }) => /* @__PURE__ */ import_react22.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_react22.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ import_react22.default.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
629
958
|
var ManagedPricingBlock = ({
|
|
630
959
|
tagline,
|
|
631
960
|
title,
|
|
632
961
|
plans
|
|
633
962
|
}) => {
|
|
634
|
-
return /* @__PURE__ */
|
|
963
|
+
return /* @__PURE__ */ import_react22.default.createElement("div", { className: "grow pt-40 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col items-center" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "w-full flex flex-col items-center text-center mb-12" }, tagline && /* @__PURE__ */ import_react22.default.createElement("span", { className: "text-[9px] tracking-[0.4em] text-black block uppercase" }, tagline), /* @__PURE__ */ import_react22.default.createElement("h1", { className: "text-2xl font-serif sm:text-3xl mt-3 text-black tracking-tight" }, title)), /* @__PURE__ */ import_react22.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_react22.default.createElement(
|
|
635
964
|
"div",
|
|
636
965
|
{
|
|
637
966
|
key: planIdx,
|
|
638
967
|
className: `bg-white rounded-3xl p-6 flex flex-col relative overflow-hidden ${plan.isPremium ? "border border-neutral-100" : ""}`
|
|
639
968
|
},
|
|
640
|
-
/* @__PURE__ */
|
|
641
|
-
plan.isPremium ? /* @__PURE__ */
|
|
969
|
+
/* @__PURE__ */ import_react22.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ import_react22.default.createElement("span", { className: "text-black text-base block mb-1" }, plan.name), /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ import_react22.default.createElement("span", { className: "text-3xl text-black" }, plan.price), plan.period && /* @__PURE__ */ import_react22.default.createElement("span", { className: "text-xs text-neutral-500" }, plan.period)), /* @__PURE__ */ import_react22.default.createElement("p", { className: "text-xs text-neutral-500 mt-2" }, plan.description)),
|
|
970
|
+
plan.isPremium ? /* @__PURE__ */ import_react22.default.createElement(ThreeDButton, { href: plan.ctaHref, className: "mb-6 w-full" }, plan.ctaText) : /* @__PURE__ */ import_react22.default.createElement(
|
|
642
971
|
import_link5.default,
|
|
643
972
|
{
|
|
644
973
|
href: plan.ctaHref,
|
|
@@ -646,20 +975,20 @@ var ManagedPricingBlock = ({
|
|
|
646
975
|
},
|
|
647
976
|
plan.ctaText
|
|
648
977
|
),
|
|
649
|
-
/* @__PURE__ */
|
|
978
|
+
/* @__PURE__ */ import_react22.default.createElement("div", { className: "flex flex-col gap-3" }, plan.features.map((feature, featureIdx) => {
|
|
650
979
|
const isAvailable = feature.value !== false;
|
|
651
980
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
652
|
-
return /* @__PURE__ */
|
|
981
|
+
return /* @__PURE__ */ import_react22.default.createElement("div", { key: featureIdx, className: "flex items-center gap-2.5" }, isAvailable ? /* @__PURE__ */ import_react22.default.createElement(CheckIcon, null) : /* @__PURE__ */ import_react22.default.createElement(CrossIcon, null), /* @__PURE__ */ import_react22.default.createElement("span", { className: `text-xs ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ import_react22.default.createElement("span", { className: "text-neutral-500 ml-1" }, "(", valueText, ")")));
|
|
653
982
|
}))
|
|
654
983
|
)))));
|
|
655
984
|
};
|
|
656
985
|
|
|
657
986
|
// src/components/ManagedBoardBlock.tsx
|
|
658
|
-
var
|
|
987
|
+
var import_react23 = __toESM(require("react"));
|
|
659
988
|
var import_image5 = __toESM(require("next/image"));
|
|
660
|
-
var
|
|
661
|
-
var
|
|
662
|
-
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */
|
|
989
|
+
var import_react24 = require("@hugeicons/react");
|
|
990
|
+
var import_core_free_icons5 = require("@hugeicons/core-free-icons");
|
|
991
|
+
var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ import_react23.default.createElement(
|
|
663
992
|
"a",
|
|
664
993
|
{
|
|
665
994
|
href,
|
|
@@ -668,7 +997,7 @@ var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ import_r
|
|
|
668
997
|
className: "text-neutral-400 hover:text-black transition-colors",
|
|
669
998
|
"aria-label": `${name} on ${label}`
|
|
670
999
|
},
|
|
671
|
-
/* @__PURE__ */
|
|
1000
|
+
/* @__PURE__ */ import_react23.default.createElement(import_react24.HugeiconsIcon, { icon, size: 16 })
|
|
672
1001
|
);
|
|
673
1002
|
var ManagedBoardBlock = ({
|
|
674
1003
|
tagline,
|
|
@@ -677,7 +1006,7 @@ var ManagedBoardBlock = ({
|
|
|
677
1006
|
contactText,
|
|
678
1007
|
contactEmail
|
|
679
1008
|
}) => {
|
|
680
|
-
return /* @__PURE__ */
|
|
1009
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { className: "grow pt-28 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "relative w-full mx-auto overflow-hidden max-w-7xl" }, /* @__PURE__ */ import_react23.default.createElement(
|
|
681
1010
|
"div",
|
|
682
1011
|
{
|
|
683
1012
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -686,7 +1015,7 @@ var ManagedBoardBlock = ({
|
|
|
686
1015
|
backgroundRepeat: "repeat"
|
|
687
1016
|
}
|
|
688
1017
|
}
|
|
689
|
-
), /* @__PURE__ */
|
|
1018
|
+
), /* @__PURE__ */ import_react23.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react23.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 text-left block uppercase" }, tagline), /* @__PURE__ */ import_react23.default.createElement("h1", { className: "text-4xl font-serif md:text-5xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ import_react23.default.createElement("div", { className: "relative px-5 md:px-12 py-4 md:py-8" }, /* @__PURE__ */ import_react23.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_react23.default.createElement("div", { key: idx, className: "relative p-6 md:p-8 rounded-2xl bg-white flex flex-col transition-all group" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "flex items-start space-x-4 md:space-x-5 mb-5 md:mb-6" }, /* @__PURE__ */ import_react23.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_react23.default.createElement(
|
|
690
1019
|
import_image5.default,
|
|
691
1020
|
{
|
|
692
1021
|
src: member.imageSrc,
|
|
@@ -695,39 +1024,39 @@ var ManagedBoardBlock = ({
|
|
|
695
1024
|
sizes: "(max-width: 768px) 56px, 64px",
|
|
696
1025
|
className: "object-cover grayscale opacity-100 transition-opacity"
|
|
697
1026
|
}
|
|
698
|
-
)), /* @__PURE__ */
|
|
1027
|
+
)), /* @__PURE__ */ import_react23.default.createElement("div", { className: "pt-1" }, /* @__PURE__ */ import_react23.default.createElement("h3", { className: "text-[14px] md:text-[15px] text-black tracking-tight" }, member.name), /* @__PURE__ */ import_react23.default.createElement("p", { className: "text-[10px] tracking-[0.2em] text-neutral-500 mt-1.5 uppercase" }, member.title))), /* @__PURE__ */ import_react23.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 text-left grow mb-8" }, member.bio), /* @__PURE__ */ import_react23.default.createElement("div", { className: "space-y-6 mt-auto" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ import_react23.default.createElement(ThreeDButton, { href: member.website }, "Visit Website")), /* @__PURE__ */ import_react23.default.createElement("div", { className: "flex space-x-4 pt-5" }, member.twitterHandle && member.twitterHandle.length > 0 && /* @__PURE__ */ import_react23.default.createElement(
|
|
699
1028
|
MemberSocialLink,
|
|
700
1029
|
{
|
|
701
1030
|
href: `https://x.com/${member.twitterHandle}`,
|
|
702
|
-
icon:
|
|
1031
|
+
icon: import_core_free_icons5.TwitterIcon,
|
|
703
1032
|
label: "X",
|
|
704
1033
|
name: member.name
|
|
705
1034
|
}
|
|
706
|
-
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */
|
|
1035
|
+
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */ import_react23.default.createElement(
|
|
707
1036
|
MemberSocialLink,
|
|
708
1037
|
{
|
|
709
1038
|
href: member.linkedinHandle,
|
|
710
|
-
icon:
|
|
1039
|
+
icon: import_core_free_icons5.LinkedinIcon,
|
|
711
1040
|
label: "LinkedIn",
|
|
712
1041
|
name: member.name
|
|
713
1042
|
}
|
|
714
|
-
))))))), (contactText || contactEmail) && /* @__PURE__ */
|
|
1043
|
+
))))))), (contactText || contactEmail) && /* @__PURE__ */ import_react23.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ import_react23.default.createElement("p", { className: "text-[12px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ import_react23.default.createElement("a", { href: `mailto:${contactEmail}`, className: "text-black decoration-black decoration-2 underline-offset-4 ml-1 transition-colors" }, contactEmail))))));
|
|
715
1044
|
};
|
|
716
1045
|
|
|
717
1046
|
// src/components/ManagedProjectsBlock.tsx
|
|
718
|
-
var
|
|
1047
|
+
var import_react25 = __toESM(require("react"));
|
|
719
1048
|
var import_link6 = __toESM(require("next/link"));
|
|
720
1049
|
var GridSection = ({
|
|
721
1050
|
children,
|
|
722
1051
|
isLast = false,
|
|
723
1052
|
className = "py-8 md:py-10"
|
|
724
|
-
}) => /* @__PURE__ */
|
|
1053
|
+
}) => /* @__PURE__ */ import_react25.default.createElement("div", { className: `relative px-5 md:px-12 ${className} ${!isLast ? "border-b border-neutral-100" : ""}` }, children);
|
|
725
1054
|
var ManagedProjectsBlock = ({
|
|
726
1055
|
tagline,
|
|
727
1056
|
title,
|
|
728
1057
|
projects
|
|
729
1058
|
}) => {
|
|
730
|
-
return /* @__PURE__ */
|
|
1059
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { className: "grow pt-28 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-5xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react25.default.createElement(
|
|
731
1060
|
"div",
|
|
732
1061
|
{
|
|
733
1062
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -736,15 +1065,15 @@ var ManagedProjectsBlock = ({
|
|
|
736
1065
|
backgroundRepeat: "repeat"
|
|
737
1066
|
}
|
|
738
1067
|
}
|
|
739
|
-
), /* @__PURE__ */
|
|
1068
|
+
), /* @__PURE__ */ import_react25.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react25.default.createElement(GridSection, null, tagline && /* @__PURE__ */ import_react25.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 text-left block uppercase" }, tagline), /* @__PURE__ */ import_react25.default.createElement("h1", { className: "text-4xl font-serif md:text-5xl mt-4 text-black tracking-tight text-left" }, title)), projects.map((project, index) => {
|
|
740
1069
|
const isLast = index === projects.length - 1;
|
|
741
|
-
const projectContent = /* @__PURE__ */
|
|
742
|
-
return /* @__PURE__ */
|
|
1070
|
+
const projectContent = /* @__PURE__ */ import_react25.default.createElement("div", { className: "group block w-full" }, /* @__PURE__ */ import_react25.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_react25.default.createElement("div", { className: "flex items-center gap-3 md:gap-4" }, /* @__PURE__ */ import_react25.default.createElement("h2", { className: "text-[16px] text-black transition-all flex items-center gap-2" }, project.title, /* @__PURE__ */ import_react25.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_react25.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_react25.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-500 shrink-0 uppercase" }, project.date)), /* @__PURE__ */ import_react25.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));
|
|
1071
|
+
return /* @__PURE__ */ import_react25.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_react25.default.createElement("a", { href: project.link, target: "_blank", rel: "noopener noreferrer", className: "block outline-none" }, projectContent) : /* @__PURE__ */ import_react25.default.createElement(import_link6.default, { href: project.link, className: "block outline-none" }, projectContent));
|
|
743
1072
|
}))));
|
|
744
1073
|
};
|
|
745
1074
|
|
|
746
1075
|
// src/components/ManagedNotFoundBlock.tsx
|
|
747
|
-
var
|
|
1076
|
+
var import_react26 = __toESM(require("react"));
|
|
748
1077
|
var import_link7 = __toESM(require("next/link"));
|
|
749
1078
|
var ManagedNotFoundBlock = ({
|
|
750
1079
|
title = "404 - Page Not Found",
|
|
@@ -752,15 +1081,15 @@ var ManagedNotFoundBlock = ({
|
|
|
752
1081
|
backLinkText = "\u2190 Go back to Homepage",
|
|
753
1082
|
backLinkHref = "/"
|
|
754
1083
|
}) => {
|
|
755
|
-
return /* @__PURE__ */
|
|
1084
|
+
return /* @__PURE__ */ import_react26.default.createElement("main", { className: "min-h-screen flex items-center justify-center relative z-20 bg-transparent" }, /* @__PURE__ */ import_react26.default.createElement("div", { className: "p-6 w-full max-w-md mx-auto text-center" }, /* @__PURE__ */ import_react26.default.createElement("div", { className: "mb-8 flex justify-center" }, /* @__PURE__ */ import_react26.default.createElement(
|
|
756
1085
|
"svg",
|
|
757
1086
|
{
|
|
758
1087
|
xmlns: "http://www.w3.org/2000/svg",
|
|
759
1088
|
viewBox: "0 0 24 24",
|
|
760
1089
|
className: "w-12 h-12 fill-neutral-200"
|
|
761
1090
|
},
|
|
762
|
-
/* @__PURE__ */
|
|
763
|
-
)), /* @__PURE__ */
|
|
1091
|
+
/* @__PURE__ */ import_react26.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" })
|
|
1092
|
+
)), /* @__PURE__ */ import_react26.default.createElement("h1", { className: "text-xl font-serif md:text-3xl text-black tracking-tight mb-4" }, title), /* @__PURE__ */ import_react26.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-12" }, description), /* @__PURE__ */ import_react26.default.createElement(
|
|
764
1093
|
import_link7.default,
|
|
765
1094
|
{
|
|
766
1095
|
href: backLinkHref,
|
|
@@ -771,9 +1100,9 @@ var ManagedNotFoundBlock = ({
|
|
|
771
1100
|
};
|
|
772
1101
|
|
|
773
1102
|
// src/components/PageSpinner.tsx
|
|
774
|
-
var
|
|
775
|
-
var
|
|
776
|
-
var
|
|
1103
|
+
var import_react27 = __toESM(require("react"));
|
|
1104
|
+
var import_react28 = require("@hugeicons/react");
|
|
1105
|
+
var import_core_free_icons6 = require("@hugeicons/core-free-icons");
|
|
777
1106
|
var PageSpinner = ({
|
|
778
1107
|
className = "",
|
|
779
1108
|
iconClassName = "text-black",
|
|
@@ -781,10 +1110,10 @@ var PageSpinner = ({
|
|
|
781
1110
|
}) => {
|
|
782
1111
|
return (
|
|
783
1112
|
// z-[100] ensures it sits above absolute headers and modals
|
|
784
|
-
/* @__PURE__ */
|
|
785
|
-
|
|
1113
|
+
/* @__PURE__ */ import_react27.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_react27.default.createElement(
|
|
1114
|
+
import_react28.HugeiconsIcon,
|
|
786
1115
|
{
|
|
787
|
-
icon:
|
|
1116
|
+
icon: import_core_free_icons6.Loading03Icon,
|
|
788
1117
|
size,
|
|
789
1118
|
className: `animate-spin mb-4 ${iconClassName}`
|
|
790
1119
|
}
|
|
@@ -793,11 +1122,11 @@ var PageSpinner = ({
|
|
|
793
1122
|
};
|
|
794
1123
|
|
|
795
1124
|
// src/components/ManagedToaster.tsx
|
|
796
|
-
var
|
|
797
|
-
var
|
|
1125
|
+
var import_react29 = __toESM(require("react"));
|
|
1126
|
+
var import_react_hot_toast2 = require("react-hot-toast");
|
|
798
1127
|
var ManagedToaster = (props) => {
|
|
799
|
-
return /* @__PURE__ */
|
|
800
|
-
|
|
1128
|
+
return /* @__PURE__ */ import_react29.default.createElement(
|
|
1129
|
+
import_react_hot_toast2.Toaster,
|
|
801
1130
|
{
|
|
802
1131
|
position: "top-right",
|
|
803
1132
|
...props,
|
|
@@ -831,7 +1160,7 @@ var ManagedToaster = (props) => {
|
|
|
831
1160
|
};
|
|
832
1161
|
|
|
833
1162
|
// src/components/ManagedNewsletterSplitBlock.tsx
|
|
834
|
-
var
|
|
1163
|
+
var import_react30 = __toESM(require("react"));
|
|
835
1164
|
var import_image6 = __toESM(require("next/image"));
|
|
836
1165
|
var ManagedNewsletterSplitBlock = ({
|
|
837
1166
|
tagline,
|
|
@@ -845,7 +1174,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
845
1174
|
ctaHref = "/contact-us",
|
|
846
1175
|
children
|
|
847
1176
|
}) => {
|
|
848
|
-
return /* @__PURE__ */
|
|
1177
|
+
return /* @__PURE__ */ import_react30.default.createElement("div", { className: "grow flex flex-col md:flex-row relative w-full pt-32 md:pt-0" }, /* @__PURE__ */ import_react30.default.createElement("div", { className: "hidden md:block md:w-1/2 relative min-h-screen overflow-hidden" }, /* @__PURE__ */ import_react30.default.createElement(
|
|
849
1178
|
import_image6.default,
|
|
850
1179
|
{
|
|
851
1180
|
src: imageSrc,
|
|
@@ -855,7 +1184,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
855
1184
|
className: "object-cover object-top grayscale opacity-60",
|
|
856
1185
|
quality: 100
|
|
857
1186
|
}
|
|
858
|
-
), /* @__PURE__ */
|
|
1187
|
+
), /* @__PURE__ */ import_react30.default.createElement(
|
|
859
1188
|
"div",
|
|
860
1189
|
{
|
|
861
1190
|
className: "absolute inset-0 z-10 pointer-events-none",
|
|
@@ -863,7 +1192,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
863
1192
|
background: "linear-gradient(to right, rgba(255,255,255,0) 30%, #ffffff 100%)"
|
|
864
1193
|
}
|
|
865
1194
|
}
|
|
866
|
-
), /* @__PURE__ */
|
|
1195
|
+
), /* @__PURE__ */ import_react30.default.createElement(
|
|
867
1196
|
"div",
|
|
868
1197
|
{
|
|
869
1198
|
className: "absolute inset-x-0 bottom-0 h-40 z-10 pointer-events-none",
|
|
@@ -871,7 +1200,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
871
1200
|
background: "linear-gradient(to bottom, rgba(255,255,255,0) 0%, #ffffff 100%)"
|
|
872
1201
|
}
|
|
873
1202
|
}
|
|
874
|
-
)), /* @__PURE__ */
|
|
1203
|
+
)), /* @__PURE__ */ import_react30.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_react30.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_react30.default.createElement(
|
|
875
1204
|
"div",
|
|
876
1205
|
{
|
|
877
1206
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -880,7 +1209,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
880
1209
|
backgroundRepeat: "repeat"
|
|
881
1210
|
}
|
|
882
1211
|
}
|
|
883
|
-
), /* @__PURE__ */
|
|
1212
|
+
), /* @__PURE__ */ import_react30.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react30.default.createElement("div", { className: "mb-10 border-b border-neutral-200 pb-8 text-center md:text-left" }, tagline && /* @__PURE__ */ import_react30.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-500 uppercase" }, tagline), /* @__PURE__ */ import_react30.default.createElement("h1", { className: "text-4xl font-serif md:text-5xl mt-4 text-black tracking-tight mb-4" }, title), subtitle && /* @__PURE__ */ import_react30.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 uppercase" }, subtitle)), /* @__PURE__ */ import_react30.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-10 text-center md:text-left" }, description), children && /* @__PURE__ */ import_react30.default.createElement("div", { className: "mb-8 text-left" }, children), /* @__PURE__ */ import_react30.default.createElement("div", { className: "text-center md:text-left mt-10 space-y-6" }, dividerText && /* @__PURE__ */ import_react30.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ import_react30.default.createElement("div", { className: "grow h-px bg-neutral-200" }), /* @__PURE__ */ import_react30.default.createElement("span", { className: "shrink mx-4 text-[10px] tracking-[0.2em] text-neutral-400 uppercase" }, dividerText), /* @__PURE__ */ import_react30.default.createElement("div", { className: "grow h-px bg-neutral-200" })), ctaText && ctaHref && /* @__PURE__ */ import_react30.default.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ import_react30.default.createElement(
|
|
884
1213
|
ThreeDButton,
|
|
885
1214
|
{
|
|
886
1215
|
href: ctaHref,
|
|
@@ -891,7 +1220,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
891
1220
|
};
|
|
892
1221
|
|
|
893
1222
|
// src/components/ReusableInputs.tsx
|
|
894
|
-
var
|
|
1223
|
+
var import_react31 = __toESM(require("react"));
|
|
895
1224
|
var TextInput = ({
|
|
896
1225
|
label,
|
|
897
1226
|
value,
|
|
@@ -901,7 +1230,7 @@ var TextInput = ({
|
|
|
901
1230
|
disabled,
|
|
902
1231
|
readOnly,
|
|
903
1232
|
onClick
|
|
904
|
-
}) => /* @__PURE__ */
|
|
1233
|
+
}) => /* @__PURE__ */ import_react31.default.createElement("div", { className: "space-y-2 flex-1 w-full", onClick }, /* @__PURE__ */ import_react31.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, label), /* @__PURE__ */ import_react31.default.createElement(
|
|
905
1234
|
"input",
|
|
906
1235
|
{
|
|
907
1236
|
type: "text",
|
|
@@ -922,7 +1251,7 @@ var NumberInput = ({
|
|
|
922
1251
|
placeholder,
|
|
923
1252
|
maxLength,
|
|
924
1253
|
disabled
|
|
925
|
-
}) => /* @__PURE__ */
|
|
1254
|
+
}) => /* @__PURE__ */ import_react31.default.createElement("div", { className: "space-y-2 flex-1 w-full" }, /* @__PURE__ */ import_react31.default.createElement("label", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block uppercase" }, label), /* @__PURE__ */ import_react31.default.createElement(
|
|
926
1255
|
"input",
|
|
927
1256
|
{
|
|
928
1257
|
type: "text",
|
|
@@ -940,14 +1269,14 @@ var NumberInput = ({
|
|
|
940
1269
|
));
|
|
941
1270
|
|
|
942
1271
|
// src/components/PortfolioHero.tsx
|
|
943
|
-
var
|
|
1272
|
+
var import_react32 = __toESM(require("react"));
|
|
944
1273
|
var import_link8 = __toESM(require("next/link"));
|
|
945
1274
|
var import_image7 = __toESM(require("next/image"));
|
|
946
|
-
var
|
|
947
|
-
var
|
|
1275
|
+
var import_react33 = require("@hugeicons/react");
|
|
1276
|
+
var import_core_free_icons7 = require("@hugeicons/core-free-icons");
|
|
948
1277
|
var useScrollAnimation = () => {
|
|
949
|
-
const elementRef = (0,
|
|
950
|
-
(0,
|
|
1278
|
+
const elementRef = (0, import_react32.useRef)(null);
|
|
1279
|
+
(0, import_react32.useEffect)(() => {
|
|
951
1280
|
const el = elementRef.current;
|
|
952
1281
|
if (!el) return;
|
|
953
1282
|
const observer = new IntersectionObserver(
|
|
@@ -983,13 +1312,13 @@ var PortfolioHero = ({
|
|
|
983
1312
|
secondaryCtaHref
|
|
984
1313
|
}) => {
|
|
985
1314
|
const heroContentRef = useScrollAnimation();
|
|
986
|
-
return /* @__PURE__ */
|
|
1315
|
+
return /* @__PURE__ */ import_react32.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_react32.default.createElement(
|
|
987
1316
|
"div",
|
|
988
1317
|
{
|
|
989
1318
|
ref: heroContentRef,
|
|
990
1319
|
className: "w-full opacity-0 translate-y-5 transition-all duration-1000 ease-out relative z-10"
|
|
991
1320
|
},
|
|
992
|
-
/* @__PURE__ */
|
|
1321
|
+
/* @__PURE__ */ import_react32.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-5 sm:gap-8 mb-10" }, /* @__PURE__ */ import_react32.default.createElement("div", { className: "relative w-20 h-20 sm:w-32 sm:h-32 rounded-full overflow-hidden border border-neutral-200 shrink-0 shadow-sm" }, /* @__PURE__ */ import_react32.default.createElement(
|
|
993
1322
|
import_image7.default,
|
|
994
1323
|
{
|
|
995
1324
|
src: imageSrc,
|
|
@@ -1000,7 +1329,7 @@ var PortfolioHero = ({
|
|
|
1000
1329
|
sizes: "(max-width: 640px) 80px, 128px",
|
|
1001
1330
|
quality: 100
|
|
1002
1331
|
}
|
|
1003
|
-
)), /* @__PURE__ */
|
|
1332
|
+
)), /* @__PURE__ */ import_react32.default.createElement("div", { className: "flex flex-col text-left" }, /* @__PURE__ */ import_react32.default.createElement("h1", { className: "text-3xl font-serif sm:text-5xl animate-gradient-wipe lg:text-6xl tracking-tight text-black leading-none mb-3" }, name), socialLabel && /* @__PURE__ */ import_react32.default.createElement("span", { className: "text-[10px] tracking-[0.2em] text-neutral-500 uppercase" }, socialLabel), socialLinkText && socialLinkHref && /* @__PURE__ */ import_react32.default.createElement(
|
|
1004
1333
|
"a",
|
|
1005
1334
|
{
|
|
1006
1335
|
href: socialLinkHref,
|
|
@@ -1010,28 +1339,28 @@ var PortfolioHero = ({
|
|
|
1010
1339
|
},
|
|
1011
1340
|
socialLinkText
|
|
1012
1341
|
))),
|
|
1013
|
-
/* @__PURE__ */
|
|
1014
|
-
/* @__PURE__ */
|
|
1342
|
+
/* @__PURE__ */ import_react32.default.createElement("p", { className: "text-[13px] md:text-[16px] leading-[1.8] max-w-4xl mb-12 text-neutral-600" }, bio),
|
|
1343
|
+
/* @__PURE__ */ import_react32.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 w-full sm:w-auto" }, primaryCtaText && primaryCtaHref && /* @__PURE__ */ import_react32.default.createElement("div", { className: "w-full sm:w-auto *:w-full" }, /* @__PURE__ */ import_react32.default.createElement(
|
|
1015
1344
|
ThreeDButton,
|
|
1016
1345
|
{
|
|
1017
1346
|
href: primaryCtaHref,
|
|
1018
1347
|
className: "py-3 uppercase tracking-widest text-[11px]"
|
|
1019
1348
|
},
|
|
1020
1349
|
primaryCtaText
|
|
1021
|
-
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
1350
|
+
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react32.default.createElement(
|
|
1022
1351
|
import_link8.default,
|
|
1023
1352
|
{
|
|
1024
1353
|
href: secondaryCtaHref,
|
|
1025
1354
|
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"
|
|
1026
1355
|
},
|
|
1027
1356
|
secondaryCtaText,
|
|
1028
|
-
/* @__PURE__ */
|
|
1357
|
+
/* @__PURE__ */ import_react32.default.createElement(import_react33.HugeiconsIcon, { icon: import_core_free_icons7.ArrowRight01Icon, size: 16 })
|
|
1029
1358
|
))
|
|
1030
1359
|
));
|
|
1031
1360
|
};
|
|
1032
1361
|
|
|
1033
1362
|
// src/components/ProductHero.tsx
|
|
1034
|
-
var
|
|
1363
|
+
var import_react34 = __toESM(require("react"));
|
|
1035
1364
|
var import_link9 = __toESM(require("next/link"));
|
|
1036
1365
|
var import_image8 = __toESM(require("next/image"));
|
|
1037
1366
|
var ProductHero = ({
|
|
@@ -1045,14 +1374,14 @@ var ProductHero = ({
|
|
|
1045
1374
|
secondaryCtaHref,
|
|
1046
1375
|
images
|
|
1047
1376
|
}) => {
|
|
1048
|
-
const [currentIndex, setCurrentIndex] = (0,
|
|
1049
|
-
const nextSlide = (0,
|
|
1377
|
+
const [currentIndex, setCurrentIndex] = (0, import_react34.useState)(0);
|
|
1378
|
+
const nextSlide = (0, import_react34.useCallback)(() => {
|
|
1050
1379
|
setCurrentIndex((prev) => (prev + 1) % images.length);
|
|
1051
1380
|
}, [images.length]);
|
|
1052
|
-
const prevSlide = (0,
|
|
1381
|
+
const prevSlide = (0, import_react34.useCallback)(() => {
|
|
1053
1382
|
setCurrentIndex((prev) => (prev - 1 + images.length) % images.length);
|
|
1054
1383
|
}, [images.length]);
|
|
1055
|
-
(0,
|
|
1384
|
+
(0, import_react34.useEffect)(() => {
|
|
1056
1385
|
const timer = setInterval(() => {
|
|
1057
1386
|
nextSlide();
|
|
1058
1387
|
}, 5e3);
|
|
@@ -1071,12 +1400,12 @@ var ProductHero = ({
|
|
|
1071
1400
|
}
|
|
1072
1401
|
return "opacity-0 z-0 scale-75 pointer-events-none";
|
|
1073
1402
|
};
|
|
1074
|
-
return /* @__PURE__ */
|
|
1403
|
+
return /* @__PURE__ */ import_react34.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_react34.default.createElement(
|
|
1075
1404
|
"div",
|
|
1076
1405
|
{
|
|
1077
1406
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 bg-linear-to-b from-white via-white to-[#f5f5f5]"
|
|
1078
1407
|
}
|
|
1079
|
-
), /* @__PURE__ */
|
|
1408
|
+
), /* @__PURE__ */ import_react34.default.createElement(
|
|
1080
1409
|
"div",
|
|
1081
1410
|
{
|
|
1082
1411
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.3] mix-blend-overlay",
|
|
@@ -1084,14 +1413,14 @@ var ProductHero = ({
|
|
|
1084
1413
|
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")`
|
|
1085
1414
|
}
|
|
1086
1415
|
}
|
|
1087
|
-
), /* @__PURE__ */
|
|
1416
|
+
), /* @__PURE__ */ import_react34.default.createElement("div", { className: "relative max-w-5xl mx-auto px-4 sm:px-6 w-full flex flex-col items-center text-center z-10" }, badgeText && /* @__PURE__ */ import_react34.default.createElement("div", { className: "inline-flex items-center gap-1.5 mb-6 px-4 py-1.5 rounded-full bg-neutral-100 border border-neutral-200 backdrop-blur-md shadow-xs" }, /* @__PURE__ */ import_react34.default.createElement("span", { className: "text-[10px] tracking-[0.4em] text-neutral-600 uppercase font-medium" }, badgeText)), /* @__PURE__ */ import_react34.default.createElement("h1", { className: "text-[40px] md:text-5xl lg:text-7xl text-black tracking-tight leading-[1.05] max-w-4xl mb-4" }, titlePrefix, " ", /* @__PURE__ */ import_react34.default.createElement("span", { className: "bg-linear-to-r from-[#043324] to-[#21a473] bg-clip-text text-transparent font-serif italic pr-2" }, highlightText)), subtitle && /* @__PURE__ */ import_react34.default.createElement("p", { className: "text-[13px] md:text-[16px] text-neutral-600 max-w-xl mx-auto mb-10 font-light leading-relaxed" }, subtitle), /* @__PURE__ */ import_react34.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 justify-center items-center w-full px-2 sm:px-0 mx-auto mb-12 relative z-30" }, ctaText && ctaHref && /* @__PURE__ */ import_react34.default.createElement("div", { className: "w-full sm:w-60 flex justify-center *:w-full" }, /* @__PURE__ */ import_react34.default.createElement(ThreeDButton, { href: ctaHref }, ctaText)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react34.default.createElement(
|
|
1088
1417
|
import_link9.default,
|
|
1089
1418
|
{
|
|
1090
1419
|
href: secondaryCtaHref,
|
|
1091
1420
|
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"
|
|
1092
1421
|
},
|
|
1093
1422
|
secondaryCtaText
|
|
1094
|
-
)), /* @__PURE__ */
|
|
1423
|
+
)), /* @__PURE__ */ import_react34.default.createElement("div", { className: "relative w-full max-w-4xl mx-auto px-2 sm:px-6 mt-8 z-20" }, /* @__PURE__ */ import_react34.default.createElement("div", { className: "relative w-full aspect-4/3 md:aspect-video flex items-center justify-center" }, /* @__PURE__ */ import_react34.default.createElement("button", { onClick: prevSlide, className: "absolute left-0 sm:-left-12 z-40 p-2 text-neutral-400 hover:text-black transition-colors outline-none", "aria-label": "Previous image" }, /* @__PURE__ */ import_react34.default.createElement("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react34.default.createElement("path", { d: "M15 18l-6-6 6-6" }))), /* @__PURE__ */ import_react34.default.createElement("button", { onClick: nextSlide, className: "absolute right-0 sm:-right-12 z-40 p-2 text-neutral-400 hover:text-black transition-colors outline-none", "aria-label": "Next image" }, /* @__PURE__ */ import_react34.default.createElement("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react34.default.createElement("path", { d: "M9 18l6-6-6-6" }))), images.map((src, idx) => /* @__PURE__ */ import_react34.default.createElement(
|
|
1095
1424
|
"div",
|
|
1096
1425
|
{
|
|
1097
1426
|
key: idx,
|
|
@@ -1100,7 +1429,7 @@ var ProductHero = ({
|
|
|
1100
1429
|
},
|
|
1101
1430
|
className: `absolute inset-0 transition-all duration-700 ease-out transform ${getCarouselClasses(idx)}`
|
|
1102
1431
|
},
|
|
1103
|
-
/* @__PURE__ */
|
|
1432
|
+
/* @__PURE__ */ import_react34.default.createElement("div", { className: "relative w-full h-full rounded-2xl overflow-hidden shadow-xl" }, /* @__PURE__ */ import_react34.default.createElement(
|
|
1104
1433
|
import_image8.default,
|
|
1105
1434
|
{
|
|
1106
1435
|
src,
|
|
@@ -1111,14 +1440,14 @@ var ProductHero = ({
|
|
|
1111
1440
|
priority: idx === 0
|
|
1112
1441
|
}
|
|
1113
1442
|
))
|
|
1114
|
-
)), /* @__PURE__ */
|
|
1443
|
+
)), /* @__PURE__ */ import_react34.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" })))));
|
|
1115
1444
|
};
|
|
1116
1445
|
|
|
1117
1446
|
// src/components/GifFeatureCard.tsx
|
|
1118
|
-
var
|
|
1447
|
+
var import_react35 = __toESM(require("react"));
|
|
1119
1448
|
var import_image9 = __toESM(require("next/image"));
|
|
1120
|
-
var
|
|
1121
|
-
var
|
|
1449
|
+
var import_react36 = require("@hugeicons/react");
|
|
1450
|
+
var import_core_free_icons8 = require("@hugeicons/core-free-icons");
|
|
1122
1451
|
var GifFeatureCard = ({
|
|
1123
1452
|
gifSrc,
|
|
1124
1453
|
title,
|
|
@@ -1126,20 +1455,20 @@ var GifFeatureCard = ({
|
|
|
1126
1455
|
alt = "Feature animation",
|
|
1127
1456
|
className = "aspect-video"
|
|
1128
1457
|
}) => {
|
|
1129
|
-
const [isLoading, setIsLoading] = (0,
|
|
1130
|
-
return /* @__PURE__ */
|
|
1131
|
-
|
|
1458
|
+
const [isLoading, setIsLoading] = (0, import_react35.useState)(true);
|
|
1459
|
+
return /* @__PURE__ */ import_react35.default.createElement("div", { className: `relative w-full bg-black overflow-hidden shadow-2xl ${className}` }, isLoading && /* @__PURE__ */ import_react35.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-black" }, /* @__PURE__ */ import_react35.default.createElement(
|
|
1460
|
+
import_react36.HugeiconsIcon,
|
|
1132
1461
|
{
|
|
1133
|
-
icon:
|
|
1462
|
+
icon: import_core_free_icons8.Loading03Icon,
|
|
1134
1463
|
size: 32,
|
|
1135
1464
|
className: "animate-spin text-white"
|
|
1136
1465
|
}
|
|
1137
|
-
)), /* @__PURE__ */
|
|
1466
|
+
)), /* @__PURE__ */ import_react35.default.createElement(
|
|
1138
1467
|
"div",
|
|
1139
1468
|
{
|
|
1140
1469
|
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"}`
|
|
1141
1470
|
},
|
|
1142
|
-
/* @__PURE__ */
|
|
1471
|
+
/* @__PURE__ */ import_react35.default.createElement(
|
|
1143
1472
|
import_image9.default,
|
|
1144
1473
|
{
|
|
1145
1474
|
src: gifSrc,
|
|
@@ -1150,12 +1479,12 @@ var GifFeatureCard = ({
|
|
|
1150
1479
|
className: "object-cover object-center pointer-events-none"
|
|
1151
1480
|
}
|
|
1152
1481
|
)
|
|
1153
|
-
), /* @__PURE__ */
|
|
1482
|
+
), /* @__PURE__ */ import_react35.default.createElement(
|
|
1154
1483
|
"div",
|
|
1155
1484
|
{
|
|
1156
1485
|
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"
|
|
1157
1486
|
}
|
|
1158
|
-
), /* @__PURE__ */
|
|
1487
|
+
), /* @__PURE__ */ import_react35.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_react35.default.createElement("h3", { className: "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_react35.default.createElement("p", { className: "text-[13px] sm:text-[15px] leading-relaxed text-neutral-300 max-w-2xl drop-shadow-sm" }, subtitle)));
|
|
1159
1488
|
};
|
|
1160
1489
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1161
1490
|
0 && (module.exports = {
|
|
@@ -1181,5 +1510,7 @@ var GifFeatureCard = ({
|
|
|
1181
1510
|
PortfolioHero,
|
|
1182
1511
|
ProductHero,
|
|
1183
1512
|
TextInput,
|
|
1184
|
-
|
|
1513
|
+
ThreeDActionButton,
|
|
1514
|
+
ThreeDButton,
|
|
1515
|
+
ZairusAuth
|
|
1185
1516
|
});
|