@retinalabsllc/zairusjs 0.2.0 → 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 +72 -1
- package/dist/index.d.ts +72 -1
- package/dist/index.js +604 -141
- package/dist/index.mjs +591 -132
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -36,6 +36,7 @@ __export(index_exports, {
|
|
|
36
36
|
Faq: () => Faq,
|
|
37
37
|
FeatureScroll: () => FeatureScroll,
|
|
38
38
|
Footer: () => Footer,
|
|
39
|
+
GifFeatureCard: () => GifFeatureCard,
|
|
39
40
|
Header: () => Header,
|
|
40
41
|
HeroSection: () => HeroSection,
|
|
41
42
|
ManagedBoardBlock: () => ManagedBoardBlock,
|
|
@@ -50,8 +51,11 @@ __export(index_exports, {
|
|
|
50
51
|
PageSpinner: () => PageSpinner,
|
|
51
52
|
PlatformFeatures: () => PlatformFeatures,
|
|
52
53
|
PortfolioHero: () => PortfolioHero,
|
|
54
|
+
ProductHero: () => ProductHero,
|
|
53
55
|
TextInput: () => TextInput,
|
|
54
|
-
|
|
56
|
+
ThreeDActionButton: () => ThreeDActionButton,
|
|
57
|
+
ThreeDButton: () => ThreeDButton,
|
|
58
|
+
ZairusAuth: () => ZairusAuth
|
|
55
59
|
});
|
|
56
60
|
module.exports = __toCommonJS(index_exports);
|
|
57
61
|
|
|
@@ -164,22 +168,349 @@ var ThreeDButton = ({
|
|
|
164
168
|
);
|
|
165
169
|
};
|
|
166
170
|
|
|
167
|
-
// src/components/
|
|
171
|
+
// src/components/ThreeDActionButton.tsx
|
|
168
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"));
|
|
169
500
|
var import_link2 = __toESM(require("next/link"));
|
|
170
501
|
var import_image = __toESM(require("next/image"));
|
|
171
|
-
var
|
|
502
|
+
var import_navigation2 = require("next/navigation");
|
|
172
503
|
var NavLink = ({
|
|
173
504
|
href,
|
|
174
505
|
children,
|
|
175
506
|
className = "",
|
|
176
507
|
light = true
|
|
177
508
|
}) => {
|
|
178
|
-
const pathname = (0,
|
|
509
|
+
const pathname = (0, import_navigation2.usePathname)();
|
|
179
510
|
const isActive = pathname === href;
|
|
180
511
|
const activeClass = light ? "text-neutral-950 font-medium" : "text-white font-medium";
|
|
181
512
|
const inactiveClass = light ? "text-neutral-600 hover:text-neutral-950" : "text-neutral-400 hover:text-white";
|
|
182
|
-
return /* @__PURE__ */
|
|
513
|
+
return /* @__PURE__ */ import_react7.default.createElement(
|
|
183
514
|
import_link2.default,
|
|
184
515
|
{
|
|
185
516
|
href,
|
|
@@ -206,7 +537,7 @@ var Header = ({
|
|
|
206
537
|
const titleColor = light ? "text-black" : "text-white";
|
|
207
538
|
const subtitleColor = light ? "text-neutral-500" : "text-neutral-400";
|
|
208
539
|
const hasBrandSection = showLogo || !hideHeaderText;
|
|
209
|
-
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(
|
|
210
541
|
import_image.default,
|
|
211
542
|
{
|
|
212
543
|
src: logoSrc,
|
|
@@ -216,7 +547,7 @@ var Header = ({
|
|
|
216
547
|
className: `object-contain w-5 h-auto ${invert ? "invert" : ""}`,
|
|
217
548
|
priority: true
|
|
218
549
|
}
|
|
219
|
-
), !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(
|
|
220
551
|
NavLink,
|
|
221
552
|
{
|
|
222
553
|
key: index,
|
|
@@ -229,9 +560,9 @@ var Header = ({
|
|
|
229
560
|
};
|
|
230
561
|
|
|
231
562
|
// src/components/Footer.tsx
|
|
232
|
-
var
|
|
563
|
+
var import_react8 = __toESM(require("react"));
|
|
233
564
|
var import_link3 = __toESM(require("next/link"));
|
|
234
|
-
var
|
|
565
|
+
var import_react9 = require("@hugeicons/react");
|
|
235
566
|
var Footer = ({
|
|
236
567
|
description,
|
|
237
568
|
columns,
|
|
@@ -239,20 +570,20 @@ var Footer = ({
|
|
|
239
570
|
copyrightText,
|
|
240
571
|
topSection
|
|
241
572
|
}) => {
|
|
242
|
-
const [openCol, setOpenCol] = (0,
|
|
573
|
+
const [openCol, setOpenCol] = (0, import_react8.useState)(null);
|
|
243
574
|
const toggleColumn = (idx) => {
|
|
244
575
|
setOpenCol(openCol === idx ? null : idx);
|
|
245
576
|
};
|
|
246
|
-
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) => {
|
|
247
578
|
const isOpen = openCol === idx;
|
|
248
|
-
return /* @__PURE__ */
|
|
579
|
+
return /* @__PURE__ */ import_react8.default.createElement("div", { key: idx, className: "border-b border-neutral-200" }, /* @__PURE__ */ import_react8.default.createElement(
|
|
249
580
|
"button",
|
|
250
581
|
{
|
|
251
582
|
onClick: () => toggleColumn(idx),
|
|
252
583
|
className: "w-full flex items-center justify-between py-5 text-left outline-none"
|
|
253
584
|
},
|
|
254
|
-
/* @__PURE__ */
|
|
255
|
-
/* @__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(
|
|
256
587
|
"svg",
|
|
257
588
|
{
|
|
258
589
|
className: `w-4 h-4 text-neutral-400 transition-transform duration-300 ${isOpen ? "rotate-180" : ""}`,
|
|
@@ -260,10 +591,10 @@ var Footer = ({
|
|
|
260
591
|
viewBox: "0 0 24 24",
|
|
261
592
|
stroke: "currentColor"
|
|
262
593
|
},
|
|
263
|
-
/* @__PURE__ */
|
|
594
|
+
/* @__PURE__ */ import_react8.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M19 9l-7 7-7-7" })
|
|
264
595
|
)
|
|
265
|
-
), /* @__PURE__ */
|
|
266
|
-
})))), /* @__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(
|
|
267
598
|
"a",
|
|
268
599
|
{
|
|
269
600
|
key: idx,
|
|
@@ -273,12 +604,12 @@ var Footer = ({
|
|
|
273
604
|
className: "text-neutral-400 hover:text-black transition-colors",
|
|
274
605
|
"aria-label": social.name
|
|
275
606
|
},
|
|
276
|
-
/* @__PURE__ */
|
|
607
|
+
/* @__PURE__ */ import_react8.default.createElement(import_react9.HugeiconsIcon, { icon: social.icon, size: 20 })
|
|
277
608
|
))))))));
|
|
278
609
|
};
|
|
279
610
|
|
|
280
611
|
// src/components/HeroSection.tsx
|
|
281
|
-
var
|
|
612
|
+
var import_react10 = __toESM(require("react"));
|
|
282
613
|
var import_link4 = __toESM(require("next/link"));
|
|
283
614
|
var import_image2 = __toESM(require("next/image"));
|
|
284
615
|
var HeroSection = ({
|
|
@@ -294,7 +625,7 @@ var HeroSection = ({
|
|
|
294
625
|
showImage = false,
|
|
295
626
|
imageSrc = "/assets/ai.avif"
|
|
296
627
|
}) => {
|
|
297
|
-
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(
|
|
298
629
|
"div",
|
|
299
630
|
{
|
|
300
631
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0",
|
|
@@ -302,7 +633,7 @@ var HeroSection = ({
|
|
|
302
633
|
background: `radial-gradient(120% 100% at 50% 0%, #043324 0%, #21a473 45%, #e0f6ce 80%, #f5f5f5 100%)`
|
|
303
634
|
}
|
|
304
635
|
}
|
|
305
|
-
), /* @__PURE__ */
|
|
636
|
+
), /* @__PURE__ */ import_react10.default.createElement(
|
|
306
637
|
"div",
|
|
307
638
|
{
|
|
308
639
|
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.25] mix-blend-overlay",
|
|
@@ -310,14 +641,14 @@ var HeroSection = ({
|
|
|
310
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")`
|
|
311
642
|
}
|
|
312
643
|
}
|
|
313
|
-
), /* @__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(
|
|
314
645
|
import_link4.default,
|
|
315
646
|
{
|
|
316
647
|
href: secondaryCtaHref,
|
|
317
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"
|
|
318
649
|
},
|
|
319
650
|
secondaryCtaText
|
|
320
|
-
)), 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(
|
|
321
652
|
import_image2.default,
|
|
322
653
|
{
|
|
323
654
|
src: imageSrc,
|
|
@@ -327,14 +658,14 @@ var HeroSection = ({
|
|
|
327
658
|
className: "object-cover object-top",
|
|
328
659
|
priority: true
|
|
329
660
|
}
|
|
330
|
-
))), /* @__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" }))))));
|
|
331
662
|
};
|
|
332
663
|
|
|
333
664
|
// src/components/AppBento2.tsx
|
|
334
|
-
var
|
|
335
|
-
var
|
|
665
|
+
var import_react11 = __toESM(require("react"));
|
|
666
|
+
var import_react12 = require("@hugeicons/react");
|
|
336
667
|
var AppBento2 = ({ tagline, headline, features }) => {
|
|
337
|
-
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) => {
|
|
338
669
|
const isWhite = i === 0;
|
|
339
670
|
const isBlack = i === 1;
|
|
340
671
|
const isNeutral = i === 2;
|
|
@@ -356,35 +687,35 @@ var AppBento2 = ({ tagline, headline, features }) => {
|
|
|
356
687
|
const textColor = isBlack ? "text-white" : "text-black";
|
|
357
688
|
const subTextColor = isBlack ? "text-neutral-300" : "text-neutral-600";
|
|
358
689
|
const labelColor = isBlack ? "text-neutral-400" : "text-neutral-500";
|
|
359
|
-
return /* @__PURE__ */
|
|
690
|
+
return /* @__PURE__ */ import_react11.default.createElement(
|
|
360
691
|
"div",
|
|
361
692
|
{
|
|
362
693
|
key: i,
|
|
363
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}`,
|
|
364
695
|
style: { boxShadow: getShadowStyle() }
|
|
365
696
|
},
|
|
366
|
-
/* @__PURE__ */
|
|
697
|
+
/* @__PURE__ */ import_react11.default.createElement(
|
|
367
698
|
"div",
|
|
368
699
|
{
|
|
369
700
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
370
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")` }
|
|
371
702
|
}
|
|
372
703
|
),
|
|
373
|
-
isBlack && /* @__PURE__ */
|
|
374
|
-
/* @__PURE__ */
|
|
375
|
-
/* @__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)))
|
|
376
707
|
);
|
|
377
708
|
})))));
|
|
378
709
|
};
|
|
379
710
|
|
|
380
711
|
// src/components/FeatureScroll.tsx
|
|
381
|
-
var
|
|
712
|
+
var import_react13 = __toESM(require("react"));
|
|
382
713
|
var import_image3 = __toESM(require("next/image"));
|
|
383
|
-
var
|
|
384
|
-
var
|
|
714
|
+
var import_react14 = require("@hugeicons/react");
|
|
715
|
+
var import_core_free_icons3 = require("@hugeicons/core-free-icons");
|
|
385
716
|
var FeatureCard = ({ feature }) => {
|
|
386
|
-
const [isLoading, setIsLoading] = (0,
|
|
387
|
-
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(
|
|
388
719
|
"div",
|
|
389
720
|
{
|
|
390
721
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-20 mix-blend-overlay",
|
|
@@ -393,7 +724,7 @@ var FeatureCard = ({ feature }) => {
|
|
|
393
724
|
backgroundRepeat: "repeat"
|
|
394
725
|
}
|
|
395
726
|
}
|
|
396
|
-
), 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(
|
|
397
728
|
import_image3.default,
|
|
398
729
|
{
|
|
399
730
|
src: feature.image,
|
|
@@ -407,12 +738,12 @@ var FeatureCard = ({ feature }) => {
|
|
|
407
738
|
group-hover:scale-105
|
|
408
739
|
`
|
|
409
740
|
}
|
|
410
|
-
) : /* @__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)));
|
|
411
742
|
};
|
|
412
743
|
var FeatureScroll = ({ tagline, headline, features }) => {
|
|
413
|
-
const scrollRef = (0,
|
|
414
|
-
const [canScrollLeft, setCanScrollLeft] = (0,
|
|
415
|
-
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);
|
|
416
747
|
const checkScroll = () => {
|
|
417
748
|
if (scrollRef.current) {
|
|
418
749
|
const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;
|
|
@@ -420,7 +751,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
420
751
|
setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 2);
|
|
421
752
|
}
|
|
422
753
|
};
|
|
423
|
-
(0,
|
|
754
|
+
(0, import_react13.useEffect)(() => {
|
|
424
755
|
checkScroll();
|
|
425
756
|
window.addEventListener("resize", checkScroll);
|
|
426
757
|
return () => window.removeEventListener("resize", checkScroll);
|
|
@@ -431,7 +762,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
431
762
|
scrollRef.current.scrollBy({ left: scrollAmount, behavior: "smooth" });
|
|
432
763
|
}
|
|
433
764
|
};
|
|
434
|
-
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(
|
|
435
766
|
"button",
|
|
436
767
|
{
|
|
437
768
|
onClick: () => scroll("left"),
|
|
@@ -439,8 +770,8 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
439
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",
|
|
440
771
|
"aria-label": "Previous feature"
|
|
441
772
|
},
|
|
442
|
-
/* @__PURE__ */
|
|
443
|
-
), /* @__PURE__ */
|
|
773
|
+
/* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons3.ArrowLeft01Icon, size: 20 })
|
|
774
|
+
), /* @__PURE__ */ import_react13.default.createElement(
|
|
444
775
|
"button",
|
|
445
776
|
{
|
|
446
777
|
onClick: () => scroll("right"),
|
|
@@ -448,39 +779,39 @@ var FeatureScroll = ({ tagline, headline, features }) => {
|
|
|
448
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",
|
|
449
780
|
"aria-label": "Next feature"
|
|
450
781
|
},
|
|
451
|
-
/* @__PURE__ */
|
|
452
|
-
))), /* @__PURE__ */
|
|
782
|
+
/* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons3.ArrowRight01Icon, size: 20 })
|
|
783
|
+
))), /* @__PURE__ */ import_react13.default.createElement(
|
|
453
784
|
"div",
|
|
454
785
|
{
|
|
455
786
|
ref: scrollRef,
|
|
456
787
|
onScroll: checkScroll,
|
|
457
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"
|
|
458
789
|
},
|
|
459
|
-
features.map((feature, idx) => /* @__PURE__ */
|
|
460
|
-
), /* @__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(
|
|
461
792
|
"button",
|
|
462
793
|
{
|
|
463
794
|
onClick: () => scroll("left"),
|
|
464
795
|
disabled: !canScrollLeft,
|
|
465
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"
|
|
466
797
|
},
|
|
467
|
-
/* @__PURE__ */
|
|
468
|
-
), /* @__PURE__ */
|
|
798
|
+
/* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons3.ArrowLeft01Icon, size: 20 })
|
|
799
|
+
), /* @__PURE__ */ import_react13.default.createElement(
|
|
469
800
|
"button",
|
|
470
801
|
{
|
|
471
802
|
onClick: () => scroll("right"),
|
|
472
803
|
disabled: !canScrollRight,
|
|
473
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"
|
|
474
805
|
},
|
|
475
|
-
/* @__PURE__ */
|
|
806
|
+
/* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons3.ArrowRight01Icon, size: 20 })
|
|
476
807
|
))));
|
|
477
808
|
};
|
|
478
809
|
|
|
479
810
|
// src/components/AITranscriptionFeature.tsx
|
|
480
|
-
var
|
|
811
|
+
var import_react15 = __toESM(require("react"));
|
|
481
812
|
var import_image4 = __toESM(require("next/image"));
|
|
482
|
-
var
|
|
483
|
-
var
|
|
813
|
+
var import_react16 = require("@hugeicons/react");
|
|
814
|
+
var import_core_free_icons4 = require("@hugeicons/core-free-icons");
|
|
484
815
|
var AITranscriptionFeature = ({
|
|
485
816
|
tagline,
|
|
486
817
|
headline,
|
|
@@ -491,8 +822,8 @@ var AITranscriptionFeature = ({
|
|
|
491
822
|
cursorLabel,
|
|
492
823
|
detailTextSuffix
|
|
493
824
|
}) => {
|
|
494
|
-
const [isLoading, setIsLoading] = (0,
|
|
495
|
-
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(
|
|
496
827
|
"div",
|
|
497
828
|
{
|
|
498
829
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-20 mix-blend-overlay",
|
|
@@ -501,7 +832,7 @@ var AITranscriptionFeature = ({
|
|
|
501
832
|
backgroundRepeat: "repeat"
|
|
502
833
|
}
|
|
503
834
|
}
|
|
504
|
-
), 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(
|
|
505
836
|
import_image4.default,
|
|
506
837
|
{
|
|
507
838
|
src: imagePath,
|
|
@@ -514,32 +845,32 @@ var AITranscriptionFeature = ({
|
|
|
514
845
|
${isLoading ? "scale-105 blur-2xl opacity-0" : "scale-100 blur-0 opacity-100"}
|
|
515
846
|
`
|
|
516
847
|
}
|
|
517
|
-
) : /* @__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))));
|
|
518
849
|
};
|
|
519
850
|
|
|
520
851
|
// src/components/PlatformFeatures.tsx
|
|
521
|
-
var
|
|
522
|
-
var
|
|
852
|
+
var import_react17 = __toESM(require("react"));
|
|
853
|
+
var import_react18 = require("@hugeicons/react");
|
|
523
854
|
var PlatformFeatures = ({
|
|
524
855
|
tagline,
|
|
525
856
|
headline,
|
|
526
857
|
description,
|
|
527
858
|
features
|
|
528
859
|
}) => {
|
|
529
|
-
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(
|
|
530
861
|
"div",
|
|
531
862
|
{
|
|
532
863
|
key: idx,
|
|
533
864
|
className: "flex flex-col group animate-in fade-in slide-in-from-bottom-4 duration-700 fill-mode-both",
|
|
534
865
|
style: { animationDelay: feature.delay || "0ms" }
|
|
535
866
|
},
|
|
536
|
-
/* @__PURE__ */
|
|
537
|
-
/* @__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))
|
|
538
869
|
)))));
|
|
539
870
|
};
|
|
540
871
|
|
|
541
872
|
// src/components/ManagedDocument.tsx
|
|
542
|
-
var
|
|
873
|
+
var import_react19 = __toESM(require("react"));
|
|
543
874
|
var ManagedDocument = ({
|
|
544
875
|
tagline,
|
|
545
876
|
title,
|
|
@@ -549,7 +880,7 @@ var ManagedDocument = ({
|
|
|
549
880
|
}) => {
|
|
550
881
|
return (
|
|
551
882
|
// Outer layout wrapper (takes up available space, adds padding)
|
|
552
|
-
/* @__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(
|
|
553
884
|
"a",
|
|
554
885
|
{
|
|
555
886
|
href: `mailto:${contactEmail}`,
|
|
@@ -561,18 +892,18 @@ var ManagedDocument = ({
|
|
|
561
892
|
};
|
|
562
893
|
|
|
563
894
|
// src/components/ManagedContactBlock.tsx
|
|
564
|
-
var
|
|
565
|
-
var
|
|
895
|
+
var import_react20 = __toESM(require("react"));
|
|
896
|
+
var import_react21 = require("@hugeicons/react");
|
|
566
897
|
var SecureEmail = ({ user, domain, className }) => {
|
|
567
|
-
const [isMounted, setIsMounted] = (0,
|
|
568
|
-
(0,
|
|
898
|
+
const [isMounted, setIsMounted] = (0, import_react20.useState)(false);
|
|
899
|
+
(0, import_react20.useEffect)(() => {
|
|
569
900
|
setIsMounted(true);
|
|
570
901
|
}, []);
|
|
571
902
|
if (!isMounted) {
|
|
572
|
-
return /* @__PURE__ */
|
|
903
|
+
return /* @__PURE__ */ import_react20.default.createElement("span", { className, style: { opacity: 0 } }, "Loading");
|
|
573
904
|
}
|
|
574
905
|
const email = `${user}@${domain}`;
|
|
575
|
-
return /* @__PURE__ */
|
|
906
|
+
return /* @__PURE__ */ import_react20.default.createElement("a", { href: `mailto:${email}`, className }, email);
|
|
576
907
|
};
|
|
577
908
|
var ManagedContactBlock = ({
|
|
578
909
|
tagline,
|
|
@@ -581,7 +912,7 @@ var ManagedContactBlock = ({
|
|
|
581
912
|
emails,
|
|
582
913
|
socials
|
|
583
914
|
}) => {
|
|
584
|
-
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(
|
|
585
916
|
"div",
|
|
586
917
|
{
|
|
587
918
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -590,21 +921,21 @@ var ManagedContactBlock = ({
|
|
|
590
921
|
backgroundRepeat: "repeat"
|
|
591
922
|
}
|
|
592
923
|
}
|
|
593
|
-
), /* @__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(
|
|
594
925
|
"a",
|
|
595
926
|
{
|
|
596
927
|
href: `tel:${company.phone.replace(/\s+/g, "")}`,
|
|
597
928
|
className: "transition-colors hover:text-black"
|
|
598
929
|
},
|
|
599
930
|
company.phone
|
|
600
|
-
)))), 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(
|
|
601
932
|
SecureEmail,
|
|
602
933
|
{
|
|
603
934
|
user: email.user,
|
|
604
935
|
domain: email.domain,
|
|
605
936
|
className: "text-neutral-600 transition-colors hover:text-black"
|
|
606
937
|
}
|
|
607
|
-
))))), 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(
|
|
608
939
|
"a",
|
|
609
940
|
{
|
|
610
941
|
key: idx,
|
|
@@ -614,29 +945,29 @@ var ManagedContactBlock = ({
|
|
|
614
945
|
className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black",
|
|
615
946
|
"aria-label": social.label
|
|
616
947
|
},
|
|
617
|
-
/* @__PURE__ */
|
|
618
|
-
/* @__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)
|
|
619
950
|
)))))))));
|
|
620
951
|
};
|
|
621
952
|
|
|
622
953
|
// src/components/ManagedPricingBlock.tsx
|
|
623
|
-
var
|
|
954
|
+
var import_react22 = __toESM(require("react"));
|
|
624
955
|
var import_link5 = __toESM(require("next/link"));
|
|
625
|
-
var CheckIcon = ({ className = "" }) => /* @__PURE__ */
|
|
626
|
-
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" }));
|
|
627
958
|
var ManagedPricingBlock = ({
|
|
628
959
|
tagline,
|
|
629
960
|
title,
|
|
630
961
|
plans
|
|
631
962
|
}) => {
|
|
632
|
-
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(
|
|
633
964
|
"div",
|
|
634
965
|
{
|
|
635
966
|
key: planIdx,
|
|
636
967
|
className: `bg-white rounded-3xl p-6 flex flex-col relative overflow-hidden ${plan.isPremium ? "border border-neutral-100" : ""}`
|
|
637
968
|
},
|
|
638
|
-
/* @__PURE__ */
|
|
639
|
-
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(
|
|
640
971
|
import_link5.default,
|
|
641
972
|
{
|
|
642
973
|
href: plan.ctaHref,
|
|
@@ -644,20 +975,20 @@ var ManagedPricingBlock = ({
|
|
|
644
975
|
},
|
|
645
976
|
plan.ctaText
|
|
646
977
|
),
|
|
647
|
-
/* @__PURE__ */
|
|
978
|
+
/* @__PURE__ */ import_react22.default.createElement("div", { className: "flex flex-col gap-3" }, plan.features.map((feature, featureIdx) => {
|
|
648
979
|
const isAvailable = feature.value !== false;
|
|
649
980
|
const valueText = typeof feature.value === "string" ? feature.value : "";
|
|
650
|
-
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, ")")));
|
|
651
982
|
}))
|
|
652
983
|
)))));
|
|
653
984
|
};
|
|
654
985
|
|
|
655
986
|
// src/components/ManagedBoardBlock.tsx
|
|
656
|
-
var
|
|
987
|
+
var import_react23 = __toESM(require("react"));
|
|
657
988
|
var import_image5 = __toESM(require("next/image"));
|
|
658
|
-
var
|
|
659
|
-
var
|
|
660
|
-
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(
|
|
661
992
|
"a",
|
|
662
993
|
{
|
|
663
994
|
href,
|
|
@@ -666,7 +997,7 @@ var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ import_r
|
|
|
666
997
|
className: "text-neutral-400 hover:text-black transition-colors",
|
|
667
998
|
"aria-label": `${name} on ${label}`
|
|
668
999
|
},
|
|
669
|
-
/* @__PURE__ */
|
|
1000
|
+
/* @__PURE__ */ import_react23.default.createElement(import_react24.HugeiconsIcon, { icon, size: 16 })
|
|
670
1001
|
);
|
|
671
1002
|
var ManagedBoardBlock = ({
|
|
672
1003
|
tagline,
|
|
@@ -675,7 +1006,7 @@ var ManagedBoardBlock = ({
|
|
|
675
1006
|
contactText,
|
|
676
1007
|
contactEmail
|
|
677
1008
|
}) => {
|
|
678
|
-
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(
|
|
679
1010
|
"div",
|
|
680
1011
|
{
|
|
681
1012
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -684,7 +1015,7 @@ var ManagedBoardBlock = ({
|
|
|
684
1015
|
backgroundRepeat: "repeat"
|
|
685
1016
|
}
|
|
686
1017
|
}
|
|
687
|
-
), /* @__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(
|
|
688
1019
|
import_image5.default,
|
|
689
1020
|
{
|
|
690
1021
|
src: member.imageSrc,
|
|
@@ -693,39 +1024,39 @@ var ManagedBoardBlock = ({
|
|
|
693
1024
|
sizes: "(max-width: 768px) 56px, 64px",
|
|
694
1025
|
className: "object-cover grayscale opacity-100 transition-opacity"
|
|
695
1026
|
}
|
|
696
|
-
)), /* @__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(
|
|
697
1028
|
MemberSocialLink,
|
|
698
1029
|
{
|
|
699
1030
|
href: `https://x.com/${member.twitterHandle}`,
|
|
700
|
-
icon:
|
|
1031
|
+
icon: import_core_free_icons5.TwitterIcon,
|
|
701
1032
|
label: "X",
|
|
702
1033
|
name: member.name
|
|
703
1034
|
}
|
|
704
|
-
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */
|
|
1035
|
+
), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */ import_react23.default.createElement(
|
|
705
1036
|
MemberSocialLink,
|
|
706
1037
|
{
|
|
707
1038
|
href: member.linkedinHandle,
|
|
708
|
-
icon:
|
|
1039
|
+
icon: import_core_free_icons5.LinkedinIcon,
|
|
709
1040
|
label: "LinkedIn",
|
|
710
1041
|
name: member.name
|
|
711
1042
|
}
|
|
712
|
-
))))))), (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))))));
|
|
713
1044
|
};
|
|
714
1045
|
|
|
715
1046
|
// src/components/ManagedProjectsBlock.tsx
|
|
716
|
-
var
|
|
1047
|
+
var import_react25 = __toESM(require("react"));
|
|
717
1048
|
var import_link6 = __toESM(require("next/link"));
|
|
718
1049
|
var GridSection = ({
|
|
719
1050
|
children,
|
|
720
1051
|
isLast = false,
|
|
721
1052
|
className = "py-8 md:py-10"
|
|
722
|
-
}) => /* @__PURE__ */
|
|
1053
|
+
}) => /* @__PURE__ */ import_react25.default.createElement("div", { className: `relative px-5 md:px-12 ${className} ${!isLast ? "border-b border-neutral-100" : ""}` }, children);
|
|
723
1054
|
var ManagedProjectsBlock = ({
|
|
724
1055
|
tagline,
|
|
725
1056
|
title,
|
|
726
1057
|
projects
|
|
727
1058
|
}) => {
|
|
728
|
-
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(
|
|
729
1060
|
"div",
|
|
730
1061
|
{
|
|
731
1062
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -734,15 +1065,15 @@ var ManagedProjectsBlock = ({
|
|
|
734
1065
|
backgroundRepeat: "repeat"
|
|
735
1066
|
}
|
|
736
1067
|
}
|
|
737
|
-
), /* @__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) => {
|
|
738
1069
|
const isLast = index === projects.length - 1;
|
|
739
|
-
const projectContent = /* @__PURE__ */
|
|
740
|
-
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));
|
|
741
1072
|
}))));
|
|
742
1073
|
};
|
|
743
1074
|
|
|
744
1075
|
// src/components/ManagedNotFoundBlock.tsx
|
|
745
|
-
var
|
|
1076
|
+
var import_react26 = __toESM(require("react"));
|
|
746
1077
|
var import_link7 = __toESM(require("next/link"));
|
|
747
1078
|
var ManagedNotFoundBlock = ({
|
|
748
1079
|
title = "404 - Page Not Found",
|
|
@@ -750,15 +1081,15 @@ var ManagedNotFoundBlock = ({
|
|
|
750
1081
|
backLinkText = "\u2190 Go back to Homepage",
|
|
751
1082
|
backLinkHref = "/"
|
|
752
1083
|
}) => {
|
|
753
|
-
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(
|
|
754
1085
|
"svg",
|
|
755
1086
|
{
|
|
756
1087
|
xmlns: "http://www.w3.org/2000/svg",
|
|
757
1088
|
viewBox: "0 0 24 24",
|
|
758
1089
|
className: "w-12 h-12 fill-neutral-200"
|
|
759
1090
|
},
|
|
760
|
-
/* @__PURE__ */
|
|
761
|
-
)), /* @__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(
|
|
762
1093
|
import_link7.default,
|
|
763
1094
|
{
|
|
764
1095
|
href: backLinkHref,
|
|
@@ -769,9 +1100,9 @@ var ManagedNotFoundBlock = ({
|
|
|
769
1100
|
};
|
|
770
1101
|
|
|
771
1102
|
// src/components/PageSpinner.tsx
|
|
772
|
-
var
|
|
773
|
-
var
|
|
774
|
-
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");
|
|
775
1106
|
var PageSpinner = ({
|
|
776
1107
|
className = "",
|
|
777
1108
|
iconClassName = "text-black",
|
|
@@ -779,10 +1110,10 @@ var PageSpinner = ({
|
|
|
779
1110
|
}) => {
|
|
780
1111
|
return (
|
|
781
1112
|
// z-[100] ensures it sits above absolute headers and modals
|
|
782
|
-
/* @__PURE__ */
|
|
783
|
-
|
|
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,
|
|
784
1115
|
{
|
|
785
|
-
icon:
|
|
1116
|
+
icon: import_core_free_icons6.Loading03Icon,
|
|
786
1117
|
size,
|
|
787
1118
|
className: `animate-spin mb-4 ${iconClassName}`
|
|
788
1119
|
}
|
|
@@ -791,11 +1122,11 @@ var PageSpinner = ({
|
|
|
791
1122
|
};
|
|
792
1123
|
|
|
793
1124
|
// src/components/ManagedToaster.tsx
|
|
794
|
-
var
|
|
795
|
-
var
|
|
1125
|
+
var import_react29 = __toESM(require("react"));
|
|
1126
|
+
var import_react_hot_toast2 = require("react-hot-toast");
|
|
796
1127
|
var ManagedToaster = (props) => {
|
|
797
|
-
return /* @__PURE__ */
|
|
798
|
-
|
|
1128
|
+
return /* @__PURE__ */ import_react29.default.createElement(
|
|
1129
|
+
import_react_hot_toast2.Toaster,
|
|
799
1130
|
{
|
|
800
1131
|
position: "top-right",
|
|
801
1132
|
...props,
|
|
@@ -829,7 +1160,7 @@ var ManagedToaster = (props) => {
|
|
|
829
1160
|
};
|
|
830
1161
|
|
|
831
1162
|
// src/components/ManagedNewsletterSplitBlock.tsx
|
|
832
|
-
var
|
|
1163
|
+
var import_react30 = __toESM(require("react"));
|
|
833
1164
|
var import_image6 = __toESM(require("next/image"));
|
|
834
1165
|
var ManagedNewsletterSplitBlock = ({
|
|
835
1166
|
tagline,
|
|
@@ -843,7 +1174,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
843
1174
|
ctaHref = "/contact-us",
|
|
844
1175
|
children
|
|
845
1176
|
}) => {
|
|
846
|
-
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(
|
|
847
1178
|
import_image6.default,
|
|
848
1179
|
{
|
|
849
1180
|
src: imageSrc,
|
|
@@ -853,7 +1184,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
853
1184
|
className: "object-cover object-top grayscale opacity-60",
|
|
854
1185
|
quality: 100
|
|
855
1186
|
}
|
|
856
|
-
), /* @__PURE__ */
|
|
1187
|
+
), /* @__PURE__ */ import_react30.default.createElement(
|
|
857
1188
|
"div",
|
|
858
1189
|
{
|
|
859
1190
|
className: "absolute inset-0 z-10 pointer-events-none",
|
|
@@ -861,7 +1192,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
861
1192
|
background: "linear-gradient(to right, rgba(255,255,255,0) 30%, #ffffff 100%)"
|
|
862
1193
|
}
|
|
863
1194
|
}
|
|
864
|
-
), /* @__PURE__ */
|
|
1195
|
+
), /* @__PURE__ */ import_react30.default.createElement(
|
|
865
1196
|
"div",
|
|
866
1197
|
{
|
|
867
1198
|
className: "absolute inset-x-0 bottom-0 h-40 z-10 pointer-events-none",
|
|
@@ -869,7 +1200,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
869
1200
|
background: "linear-gradient(to bottom, rgba(255,255,255,0) 0%, #ffffff 100%)"
|
|
870
1201
|
}
|
|
871
1202
|
}
|
|
872
|
-
)), /* @__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(
|
|
873
1204
|
"div",
|
|
874
1205
|
{
|
|
875
1206
|
className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
|
|
@@ -878,7 +1209,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
878
1209
|
backgroundRepeat: "repeat"
|
|
879
1210
|
}
|
|
880
1211
|
}
|
|
881
|
-
), /* @__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(
|
|
882
1213
|
ThreeDButton,
|
|
883
1214
|
{
|
|
884
1215
|
href: ctaHref,
|
|
@@ -889,7 +1220,7 @@ var ManagedNewsletterSplitBlock = ({
|
|
|
889
1220
|
};
|
|
890
1221
|
|
|
891
1222
|
// src/components/ReusableInputs.tsx
|
|
892
|
-
var
|
|
1223
|
+
var import_react31 = __toESM(require("react"));
|
|
893
1224
|
var TextInput = ({
|
|
894
1225
|
label,
|
|
895
1226
|
value,
|
|
@@ -899,7 +1230,7 @@ var TextInput = ({
|
|
|
899
1230
|
disabled,
|
|
900
1231
|
readOnly,
|
|
901
1232
|
onClick
|
|
902
|
-
}) => /* @__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(
|
|
903
1234
|
"input",
|
|
904
1235
|
{
|
|
905
1236
|
type: "text",
|
|
@@ -920,7 +1251,7 @@ var NumberInput = ({
|
|
|
920
1251
|
placeholder,
|
|
921
1252
|
maxLength,
|
|
922
1253
|
disabled
|
|
923
|
-
}) => /* @__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(
|
|
924
1255
|
"input",
|
|
925
1256
|
{
|
|
926
1257
|
type: "text",
|
|
@@ -938,14 +1269,14 @@ var NumberInput = ({
|
|
|
938
1269
|
));
|
|
939
1270
|
|
|
940
1271
|
// src/components/PortfolioHero.tsx
|
|
941
|
-
var
|
|
1272
|
+
var import_react32 = __toESM(require("react"));
|
|
942
1273
|
var import_link8 = __toESM(require("next/link"));
|
|
943
1274
|
var import_image7 = __toESM(require("next/image"));
|
|
944
|
-
var
|
|
945
|
-
var
|
|
1275
|
+
var import_react33 = require("@hugeicons/react");
|
|
1276
|
+
var import_core_free_icons7 = require("@hugeicons/core-free-icons");
|
|
946
1277
|
var useScrollAnimation = () => {
|
|
947
|
-
const elementRef = (0,
|
|
948
|
-
(0,
|
|
1278
|
+
const elementRef = (0, import_react32.useRef)(null);
|
|
1279
|
+
(0, import_react32.useEffect)(() => {
|
|
949
1280
|
const el = elementRef.current;
|
|
950
1281
|
if (!el) return;
|
|
951
1282
|
const observer = new IntersectionObserver(
|
|
@@ -981,13 +1312,13 @@ var PortfolioHero = ({
|
|
|
981
1312
|
secondaryCtaHref
|
|
982
1313
|
}) => {
|
|
983
1314
|
const heroContentRef = useScrollAnimation();
|
|
984
|
-
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(
|
|
985
1316
|
"div",
|
|
986
1317
|
{
|
|
987
1318
|
ref: heroContentRef,
|
|
988
1319
|
className: "w-full opacity-0 translate-y-5 transition-all duration-1000 ease-out relative z-10"
|
|
989
1320
|
},
|
|
990
|
-
/* @__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(
|
|
991
1322
|
import_image7.default,
|
|
992
1323
|
{
|
|
993
1324
|
src: imageSrc,
|
|
@@ -998,7 +1329,7 @@ var PortfolioHero = ({
|
|
|
998
1329
|
sizes: "(max-width: 640px) 80px, 128px",
|
|
999
1330
|
quality: 100
|
|
1000
1331
|
}
|
|
1001
|
-
)), /* @__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(
|
|
1002
1333
|
"a",
|
|
1003
1334
|
{
|
|
1004
1335
|
href: socialLinkHref,
|
|
@@ -1008,25 +1339,153 @@ var PortfolioHero = ({
|
|
|
1008
1339
|
},
|
|
1009
1340
|
socialLinkText
|
|
1010
1341
|
))),
|
|
1011
|
-
/* @__PURE__ */
|
|
1012
|
-
/* @__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(
|
|
1013
1344
|
ThreeDButton,
|
|
1014
1345
|
{
|
|
1015
1346
|
href: primaryCtaHref,
|
|
1016
1347
|
className: "py-3 uppercase tracking-widest text-[11px]"
|
|
1017
1348
|
},
|
|
1018
1349
|
primaryCtaText
|
|
1019
|
-
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */
|
|
1350
|
+
)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react32.default.createElement(
|
|
1020
1351
|
import_link8.default,
|
|
1021
1352
|
{
|
|
1022
1353
|
href: secondaryCtaHref,
|
|
1023
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"
|
|
1024
1355
|
},
|
|
1025
1356
|
secondaryCtaText,
|
|
1026
|
-
/* @__PURE__ */
|
|
1357
|
+
/* @__PURE__ */ import_react32.default.createElement(import_react33.HugeiconsIcon, { icon: import_core_free_icons7.ArrowRight01Icon, size: 16 })
|
|
1027
1358
|
))
|
|
1028
1359
|
));
|
|
1029
1360
|
};
|
|
1361
|
+
|
|
1362
|
+
// src/components/ProductHero.tsx
|
|
1363
|
+
var import_react34 = __toESM(require("react"));
|
|
1364
|
+
var import_link9 = __toESM(require("next/link"));
|
|
1365
|
+
var import_image8 = __toESM(require("next/image"));
|
|
1366
|
+
var ProductHero = ({
|
|
1367
|
+
badgeText,
|
|
1368
|
+
titlePrefix,
|
|
1369
|
+
highlightText,
|
|
1370
|
+
subtitle,
|
|
1371
|
+
ctaText,
|
|
1372
|
+
ctaHref,
|
|
1373
|
+
secondaryCtaText,
|
|
1374
|
+
secondaryCtaHref,
|
|
1375
|
+
images
|
|
1376
|
+
}) => {
|
|
1377
|
+
const [currentIndex, setCurrentIndex] = (0, import_react34.useState)(0);
|
|
1378
|
+
const nextSlide = (0, import_react34.useCallback)(() => {
|
|
1379
|
+
setCurrentIndex((prev) => (prev + 1) % images.length);
|
|
1380
|
+
}, [images.length]);
|
|
1381
|
+
const prevSlide = (0, import_react34.useCallback)(() => {
|
|
1382
|
+
setCurrentIndex((prev) => (prev - 1 + images.length) % images.length);
|
|
1383
|
+
}, [images.length]);
|
|
1384
|
+
(0, import_react34.useEffect)(() => {
|
|
1385
|
+
const timer = setInterval(() => {
|
|
1386
|
+
nextSlide();
|
|
1387
|
+
}, 5e3);
|
|
1388
|
+
return () => clearInterval(timer);
|
|
1389
|
+
}, [nextSlide]);
|
|
1390
|
+
const getCarouselClasses = (idx) => {
|
|
1391
|
+
const diff = (idx - currentIndex + images.length) % images.length;
|
|
1392
|
+
if (diff === 0) {
|
|
1393
|
+
return "translate-x-0 scale-100 opacity-100 z-30 pointer-events-auto shadow-2xl";
|
|
1394
|
+
}
|
|
1395
|
+
if (diff === 1 || diff < 0 && diff === -2) {
|
|
1396
|
+
return "translate-x-[40%] sm:translate-x-[35%] scale-90 opacity-30 z-20 cursor-pointer hover:opacity-50";
|
|
1397
|
+
}
|
|
1398
|
+
if (diff === images.length - 1 || diff === -1) {
|
|
1399
|
+
return "-translate-x-[40%] sm:-translate-x-[35%] scale-90 opacity-30 z-20 cursor-pointer hover:opacity-50";
|
|
1400
|
+
}
|
|
1401
|
+
return "opacity-0 z-0 scale-75 pointer-events-none";
|
|
1402
|
+
};
|
|
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(
|
|
1404
|
+
"div",
|
|
1405
|
+
{
|
|
1406
|
+
className: "absolute inset-0 w-full h-full pointer-events-none z-0 bg-linear-to-b from-white via-white to-[#f5f5f5]"
|
|
1407
|
+
}
|
|
1408
|
+
), /* @__PURE__ */ import_react34.default.createElement(
|
|
1409
|
+
"div",
|
|
1410
|
+
{
|
|
1411
|
+
className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.3] mix-blend-overlay",
|
|
1412
|
+
style: {
|
|
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")`
|
|
1414
|
+
}
|
|
1415
|
+
}
|
|
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(
|
|
1417
|
+
import_link9.default,
|
|
1418
|
+
{
|
|
1419
|
+
href: secondaryCtaHref,
|
|
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"
|
|
1421
|
+
},
|
|
1422
|
+
secondaryCtaText
|
|
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(
|
|
1424
|
+
"div",
|
|
1425
|
+
{
|
|
1426
|
+
key: idx,
|
|
1427
|
+
onClick: () => {
|
|
1428
|
+
if (currentIndex !== idx) setCurrentIndex(idx);
|
|
1429
|
+
},
|
|
1430
|
+
className: `absolute inset-0 transition-all duration-700 ease-out transform ${getCarouselClasses(idx)}`
|
|
1431
|
+
},
|
|
1432
|
+
/* @__PURE__ */ import_react34.default.createElement("div", { className: "relative w-full h-full rounded-2xl overflow-hidden shadow-xl" }, /* @__PURE__ */ import_react34.default.createElement(
|
|
1433
|
+
import_image8.default,
|
|
1434
|
+
{
|
|
1435
|
+
src,
|
|
1436
|
+
alt: `Product Overview ${idx + 1}`,
|
|
1437
|
+
fill: true,
|
|
1438
|
+
sizes: "(max-width: 768px) 100vw, 800px",
|
|
1439
|
+
className: "object-cover object-center select-none",
|
|
1440
|
+
priority: idx === 0
|
|
1441
|
+
}
|
|
1442
|
+
))
|
|
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" })))));
|
|
1444
|
+
};
|
|
1445
|
+
|
|
1446
|
+
// src/components/GifFeatureCard.tsx
|
|
1447
|
+
var import_react35 = __toESM(require("react"));
|
|
1448
|
+
var import_image9 = __toESM(require("next/image"));
|
|
1449
|
+
var import_react36 = require("@hugeicons/react");
|
|
1450
|
+
var import_core_free_icons8 = require("@hugeicons/core-free-icons");
|
|
1451
|
+
var GifFeatureCard = ({
|
|
1452
|
+
gifSrc,
|
|
1453
|
+
title,
|
|
1454
|
+
subtitle,
|
|
1455
|
+
alt = "Feature animation",
|
|
1456
|
+
className = "aspect-video"
|
|
1457
|
+
}) => {
|
|
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,
|
|
1461
|
+
{
|
|
1462
|
+
icon: import_core_free_icons8.Loading03Icon,
|
|
1463
|
+
size: 32,
|
|
1464
|
+
className: "animate-spin text-white"
|
|
1465
|
+
}
|
|
1466
|
+
)), /* @__PURE__ */ import_react35.default.createElement(
|
|
1467
|
+
"div",
|
|
1468
|
+
{
|
|
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"}`
|
|
1470
|
+
},
|
|
1471
|
+
/* @__PURE__ */ import_react35.default.createElement(
|
|
1472
|
+
import_image9.default,
|
|
1473
|
+
{
|
|
1474
|
+
src: gifSrc,
|
|
1475
|
+
alt,
|
|
1476
|
+
fill: true,
|
|
1477
|
+
unoptimized: true,
|
|
1478
|
+
onLoad: () => setIsLoading(false),
|
|
1479
|
+
className: "object-cover object-center pointer-events-none"
|
|
1480
|
+
}
|
|
1481
|
+
)
|
|
1482
|
+
), /* @__PURE__ */ import_react35.default.createElement(
|
|
1483
|
+
"div",
|
|
1484
|
+
{
|
|
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"
|
|
1486
|
+
}
|
|
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)));
|
|
1488
|
+
};
|
|
1030
1489
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1031
1490
|
0 && (module.exports = {
|
|
1032
1491
|
AITranscriptionFeature,
|
|
@@ -1034,6 +1493,7 @@ var PortfolioHero = ({
|
|
|
1034
1493
|
Faq,
|
|
1035
1494
|
FeatureScroll,
|
|
1036
1495
|
Footer,
|
|
1496
|
+
GifFeatureCard,
|
|
1037
1497
|
Header,
|
|
1038
1498
|
HeroSection,
|
|
1039
1499
|
ManagedBoardBlock,
|
|
@@ -1048,6 +1508,9 @@ var PortfolioHero = ({
|
|
|
1048
1508
|
PageSpinner,
|
|
1049
1509
|
PlatformFeatures,
|
|
1050
1510
|
PortfolioHero,
|
|
1511
|
+
ProductHero,
|
|
1051
1512
|
TextInput,
|
|
1052
|
-
|
|
1513
|
+
ThreeDActionButton,
|
|
1514
|
+
ThreeDButton,
|
|
1515
|
+
ZairusAuth
|
|
1053
1516
|
});
|