@retinalabsllc/zairusjs 8.1.50 → 8.1.55

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 CHANGED
@@ -475,4 +475,10 @@ interface ManagedProjectsBlockProps {
475
475
  }
476
476
  declare const ManagedProjectsBlock: React.FC<ManagedProjectsBlockProps>;
477
477
 
478
- export { AppBento2, type AppBento2Props, type BentoFeature, type BoardMember, type CompanyDetails, type ConsultantProfile, ConsultantShowcase, type ConsultantShowcaseProps, ContentGridBlock, type ContentGridBlockProps, type DocumentSectionData, type EmailContact, Faq, type FaqItem, type FaqProps, FeatureScroll, type FeatureScrollProps, Footer, type FooterColumn, type FooterLink, type FooterProps, GifFeatureCard, type GifFeatureCardProps, Header, type HeaderLink, type HeaderProps, type AppLogo$1 as HeroAppLogo, HeroSection, type HeroSectionProps, ManagedBoardBlock, type ManagedBoardBlockProps, ManagedContactBlock, type ManagedContactBlockProps, ManagedDocument, type ManagedDocumentProps, ManagedNewsletterSplitBlock, type ManagedNewsletterSplitBlockProps, ManagedNotFoundBlock, type ManagedNotFoundBlockProps, ManagedPricingBlock, type ManagedPricingBlockProps, ManagedProjectsBlock, type ManagedProjectsBlockProps, ManagedToaster, MedicalFeatureStatsBlock, NumberInput, type NumberInputProps, PageSpinner, type PageSpinnerProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type AppLogo as PricingAppLogo, type PricingFeature, type PricingPlan, type PricingTab, type ProjectItem, type ScrollFeature, type SocialContact, type SocialLink, type StatItem, TextInput, type TextInputProps, ThreeDActionButton, type ThreeDActionButtonProps, ThreeDButton, type ThreeDButtonProps };
478
+ interface WaitlistDialogProps {
479
+ isOpen: boolean;
480
+ onClose: () => void;
481
+ }
482
+ declare const WaitlistDialog: React.FC<WaitlistDialogProps>;
483
+
484
+ export { AppBento2, type AppBento2Props, type BentoFeature, type BoardMember, type CompanyDetails, type ConsultantProfile, ConsultantShowcase, type ConsultantShowcaseProps, ContentGridBlock, type ContentGridBlockProps, type DocumentSectionData, type EmailContact, Faq, type FaqItem, type FaqProps, FeatureScroll, type FeatureScrollProps, Footer, type FooterColumn, type FooterLink, type FooterProps, GifFeatureCard, type GifFeatureCardProps, Header, type HeaderLink, type HeaderProps, type AppLogo$1 as HeroAppLogo, HeroSection, type HeroSectionProps, ManagedBoardBlock, type ManagedBoardBlockProps, ManagedContactBlock, type ManagedContactBlockProps, ManagedDocument, type ManagedDocumentProps, ManagedNewsletterSplitBlock, type ManagedNewsletterSplitBlockProps, ManagedNotFoundBlock, type ManagedNotFoundBlockProps, ManagedPricingBlock, type ManagedPricingBlockProps, ManagedProjectsBlock, type ManagedProjectsBlockProps, ManagedToaster, MedicalFeatureStatsBlock, NumberInput, type NumberInputProps, PageSpinner, type PageSpinnerProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type AppLogo as PricingAppLogo, type PricingFeature, type PricingPlan, type PricingTab, type ProjectItem, type ScrollFeature, type SocialContact, type SocialLink, type StatItem, TextInput, type TextInputProps, ThreeDActionButton, type ThreeDActionButtonProps, ThreeDButton, type ThreeDButtonProps, WaitlistDialog, type WaitlistDialogProps };
package/dist/index.d.ts CHANGED
@@ -475,4 +475,10 @@ interface ManagedProjectsBlockProps {
475
475
  }
476
476
  declare const ManagedProjectsBlock: React.FC<ManagedProjectsBlockProps>;
477
477
 
478
- export { AppBento2, type AppBento2Props, type BentoFeature, type BoardMember, type CompanyDetails, type ConsultantProfile, ConsultantShowcase, type ConsultantShowcaseProps, ContentGridBlock, type ContentGridBlockProps, type DocumentSectionData, type EmailContact, Faq, type FaqItem, type FaqProps, FeatureScroll, type FeatureScrollProps, Footer, type FooterColumn, type FooterLink, type FooterProps, GifFeatureCard, type GifFeatureCardProps, Header, type HeaderLink, type HeaderProps, type AppLogo$1 as HeroAppLogo, HeroSection, type HeroSectionProps, ManagedBoardBlock, type ManagedBoardBlockProps, ManagedContactBlock, type ManagedContactBlockProps, ManagedDocument, type ManagedDocumentProps, ManagedNewsletterSplitBlock, type ManagedNewsletterSplitBlockProps, ManagedNotFoundBlock, type ManagedNotFoundBlockProps, ManagedPricingBlock, type ManagedPricingBlockProps, ManagedProjectsBlock, type ManagedProjectsBlockProps, ManagedToaster, MedicalFeatureStatsBlock, NumberInput, type NumberInputProps, PageSpinner, type PageSpinnerProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type AppLogo as PricingAppLogo, type PricingFeature, type PricingPlan, type PricingTab, type ProjectItem, type ScrollFeature, type SocialContact, type SocialLink, type StatItem, TextInput, type TextInputProps, ThreeDActionButton, type ThreeDActionButtonProps, ThreeDButton, type ThreeDButtonProps };
478
+ interface WaitlistDialogProps {
479
+ isOpen: boolean;
480
+ onClose: () => void;
481
+ }
482
+ declare const WaitlistDialog: React.FC<WaitlistDialogProps>;
483
+
484
+ export { AppBento2, type AppBento2Props, type BentoFeature, type BoardMember, type CompanyDetails, type ConsultantProfile, ConsultantShowcase, type ConsultantShowcaseProps, ContentGridBlock, type ContentGridBlockProps, type DocumentSectionData, type EmailContact, Faq, type FaqItem, type FaqProps, FeatureScroll, type FeatureScrollProps, Footer, type FooterColumn, type FooterLink, type FooterProps, GifFeatureCard, type GifFeatureCardProps, Header, type HeaderLink, type HeaderProps, type AppLogo$1 as HeroAppLogo, HeroSection, type HeroSectionProps, ManagedBoardBlock, type ManagedBoardBlockProps, ManagedContactBlock, type ManagedContactBlockProps, ManagedDocument, type ManagedDocumentProps, ManagedNewsletterSplitBlock, type ManagedNewsletterSplitBlockProps, ManagedNotFoundBlock, type ManagedNotFoundBlockProps, ManagedPricingBlock, type ManagedPricingBlockProps, ManagedProjectsBlock, type ManagedProjectsBlockProps, ManagedToaster, MedicalFeatureStatsBlock, NumberInput, type NumberInputProps, PageSpinner, type PageSpinnerProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type AppLogo as PricingAppLogo, type PricingFeature, type PricingPlan, type PricingTab, type ProjectItem, type ScrollFeature, type SocialContact, type SocialLink, type StatItem, TextInput, type TextInputProps, ThreeDActionButton, type ThreeDActionButtonProps, ThreeDButton, type ThreeDButtonProps, WaitlistDialog, type WaitlistDialogProps };
package/dist/index.js CHANGED
@@ -55,7 +55,8 @@ __export(index_exports, {
55
55
  PortfolioHero: () => PortfolioHero,
56
56
  TextInput: () => TextInput,
57
57
  ThreeDActionButton: () => ThreeDActionButton,
58
- ThreeDButton: () => ThreeDButton
58
+ ThreeDButton: () => ThreeDButton,
59
+ WaitlistDialog: () => WaitlistDialog
59
60
  });
60
61
  module.exports = __toCommonJS(index_exports);
61
62
 
@@ -167,7 +168,7 @@ var ThreeDButton = ({
167
168
  {
168
169
  href,
169
170
  onClick,
170
- className: `relative inline-flex items-center justify-center py-2.5 px-8 rounded-full text-neutral-900 text-xs font-semibold transition-all duration-150 select-none group overflow-hidden ${className}`,
171
+ className: `relative inline-flex items-center justify-center py-2.5 px-8 rounded-full text-neutral-900 text-xs font-medium transition-all duration-150 select-none group overflow-hidden ${className}`,
171
172
  style: {
172
173
  backgroundImage: silverBg,
173
174
  backgroundSize: "cover",
@@ -224,7 +225,7 @@ var ThreeDActionButton = ({
224
225
  "aria-label": ariaLabel,
225
226
  className: `
226
227
  relative inline-flex items-center justify-center py-2.5 px-8 rounded-full
227
- text-neutral-900 text-xs font-semibold tracking-widest
228
+ text-neutral-900 text-xs font-medium tracking-widest
228
229
  transition-all duration-150 select-none group outline-none overflow-hidden
229
230
  ${isInteractionDisabled ? "opacity-70 cursor-not-allowed" : "active:translate-y-0.5"}
230
231
  ${className}
@@ -469,7 +470,7 @@ var HeroSection = ({
469
470
  import_link4.default,
470
471
  {
471
472
  href: secondaryCtaHref,
472
- className: "w-full sm:w-60 inline-flex font-semibold items-center justify-center text-[11px] tracking-widest rounded-full px-8 py-3 bg-black/40 backdrop-blur-md text-center text-white text-xs hover:bg-neutral-800 hover:border-neutral-500 outline-none transition-all drop-shadow-lg"
473
+ className: "w-full sm:w-60 inline-flex font-medium items-center justify-center text-[11px] tracking-widest rounded-full px-8 py-3 bg-black/40 backdrop-blur-md text-center text-white text-xs hover:bg-neutral-800 hover:border-neutral-500 outline-none transition-all drop-shadow-lg"
473
474
  },
474
475
  secondaryCtaText
475
476
  )), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */ import_react8.default.createElement("div", { className: "w-full flex flex-col items-center mt-4" }, appsText && /* @__PURE__ */ import_react8.default.createElement("p", { className: "text-[9px] tracking-[0.2em] text-neutral-300 mb-5 " }, appsText), /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex flex-wrap justify-center items-center gap-6 opacity-90" }, appLogos.map((logo, idx) => /* @__PURE__ */ import_react8.default.createElement("div", { key: idx, className: "relative h-6 w-6 sm:h-8 sm:w-8 flex items-center justify-center cursor-default filter invert" }, /* @__PURE__ */ import_react8.default.createElement(
@@ -886,7 +887,7 @@ var ManagedPricingBlock = ({
886
887
  import_link5.default,
887
888
  {
888
889
  href: plan.ctaHref,
889
- className: "w-full py-2.5 px-5 rounded-full font-semibold border border-neutral-700 text-center text-white text-xs hover:bg-neutral-800 hover:border-neutral-600 transition-colors mb-6 outline-none block"
890
+ className: "w-full py-2.5 px-5 rounded-full font-medium border border-neutral-700 text-center text-white text-xs hover:bg-neutral-800 hover:border-neutral-600 transition-colors mb-6 outline-none block"
890
891
  },
891
892
  plan.ctaText
892
893
  ),
@@ -1476,6 +1477,95 @@ var ManagedProjectsBlock = ({
1476
1477
  return /* @__PURE__ */ import_react36.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_react36.default.createElement("a", { href: project.link, target: "_blank", rel: "noopener noreferrer", className: "block outline-none" }, projectContent) : /* @__PURE__ */ import_react36.default.createElement(import_link8.default, { href: project.link, className: "block outline-none" }, projectContent));
1477
1478
  }))));
1478
1479
  };
1480
+
1481
+ // src/components/WaitlistDialog.tsx
1482
+ var import_react37 = __toESM(require("react"));
1483
+ var import_react_hot_toast2 = require("react-hot-toast");
1484
+ var WaitlistDialog = ({ isOpen, onClose }) => {
1485
+ const [email, setEmail] = (0, import_react37.useState)("");
1486
+ const [isLoading, setIsLoading] = (0, import_react37.useState)(false);
1487
+ if (!isOpen) return null;
1488
+ const handleSubmit = async (e) => {
1489
+ e.preventDefault();
1490
+ if (!email || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
1491
+ import_react_hot_toast2.toast.error("Please enter a valid email address.");
1492
+ return;
1493
+ }
1494
+ setIsLoading(true);
1495
+ try {
1496
+ const response = await fetch("/api/waitlist", {
1497
+ method: "POST",
1498
+ headers: {
1499
+ "Content-Type": "application/json"
1500
+ },
1501
+ body: JSON.stringify({ email })
1502
+ });
1503
+ const data = await response.json();
1504
+ if (response.ok && data.success) {
1505
+ import_react_hot_toast2.toast.success(data.message || "You've been added to the waitlist!");
1506
+ setEmail("");
1507
+ onClose();
1508
+ } else {
1509
+ import_react_hot_toast2.toast.error(data.error || "Something went wrong. Please try again.");
1510
+ }
1511
+ } catch (error) {
1512
+ import_react_hot_toast2.toast.error("Network error. Please check your connection.");
1513
+ } finally {
1514
+ setIsLoading(false);
1515
+ }
1516
+ };
1517
+ return /* @__PURE__ */ import_react37.default.createElement("div", { className: "fixed inset-0 z-100 flex items-center justify-center p-4 bg-black/60 " }, /* @__PURE__ */ import_react37.default.createElement("div", { className: "absolute inset-0", onClick: !isLoading ? onClose : void 0 }), /* @__PURE__ */ import_react37.default.createElement(
1518
+ "div",
1519
+ {
1520
+ className: "w-full max-w-md bg-[#0a0a0a] rounded-2xl shadow-2xl overflow-hidden relative z-10 animate-in fade-in zoom-in-95 duration-200"
1521
+ },
1522
+ /* @__PURE__ */ import_react37.default.createElement(
1523
+ "button",
1524
+ {
1525
+ onClick: onClose,
1526
+ disabled: isLoading,
1527
+ className: "absolute top-4 right-4 p-2 text-neutral-500 hover:text-white transition-colors disabled:opacity-50 outline-none",
1528
+ "aria-label": "Close dialog"
1529
+ },
1530
+ /* @__PURE__ */ import_react37.default.createElement(
1531
+ "svg",
1532
+ {
1533
+ xmlns: "http://www.w3.org/2000/svg",
1534
+ width: "20",
1535
+ height: "20",
1536
+ viewBox: "0 0 24 24",
1537
+ fill: "none",
1538
+ stroke: "currentColor",
1539
+ strokeWidth: "2",
1540
+ strokeLinecap: "round",
1541
+ strokeLinejoin: "round"
1542
+ },
1543
+ /* @__PURE__ */ import_react37.default.createElement("path", { d: "M18 6 6 18" }),
1544
+ /* @__PURE__ */ import_react37.default.createElement("path", { d: "m6 6 12 12" })
1545
+ )
1546
+ ),
1547
+ /* @__PURE__ */ import_react37.default.createElement("div", { className: "p-6 sm:p-8" }, /* @__PURE__ */ import_react37.default.createElement("div", { className: "mb-8 mt-2" }, /* @__PURE__ */ import_react37.default.createElement("h2", { className: "text-2xl font-light text-white tracking-tight mb-2" }, "Join the Waitlist"), /* @__PURE__ */ import_react37.default.createElement("p", { className: "text-[13px] text-neutral-400 font-light leading-relaxed" }, "Be the first to experience the future of natural language computing. Secure your early access spot today.")), /* @__PURE__ */ import_react37.default.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col gap-8" }, /* @__PURE__ */ import_react37.default.createElement(
1548
+ TextInput,
1549
+ {
1550
+ label: "EMAIL ADDRESS",
1551
+ type: "email",
1552
+ value: email,
1553
+ onChange: setEmail,
1554
+ placeholder: "name@example.com",
1555
+ disabled: isLoading
1556
+ }
1557
+ ), /* @__PURE__ */ import_react37.default.createElement(
1558
+ ThreeDActionButton,
1559
+ {
1560
+ type: "submit",
1561
+ isLoading,
1562
+ disabled: !email,
1563
+ className: "w-full mt-2"
1564
+ },
1565
+ "Join Waitlist"
1566
+ )))
1567
+ ));
1568
+ };
1479
1569
  // Annotate the CommonJS export names for ESM import in node:
1480
1570
  0 && (module.exports = {
1481
1571
  AppBento2,
@@ -1502,5 +1592,6 @@ var ManagedProjectsBlock = ({
1502
1592
  PortfolioHero,
1503
1593
  TextInput,
1504
1594
  ThreeDActionButton,
1505
- ThreeDButton
1595
+ ThreeDButton,
1596
+ WaitlistDialog
1506
1597
  });
package/dist/index.mjs CHANGED
@@ -108,7 +108,7 @@ var ThreeDButton = ({
108
108
  {
109
109
  href,
110
110
  onClick,
111
- className: `relative inline-flex items-center justify-center py-2.5 px-8 rounded-full text-neutral-900 text-xs font-semibold transition-all duration-150 select-none group overflow-hidden ${className}`,
111
+ className: `relative inline-flex items-center justify-center py-2.5 px-8 rounded-full text-neutral-900 text-xs font-medium transition-all duration-150 select-none group overflow-hidden ${className}`,
112
112
  style: {
113
113
  backgroundImage: silverBg,
114
114
  backgroundSize: "cover",
@@ -165,7 +165,7 @@ var ThreeDActionButton = ({
165
165
  "aria-label": ariaLabel,
166
166
  className: `
167
167
  relative inline-flex items-center justify-center py-2.5 px-8 rounded-full
168
- text-neutral-900 text-xs font-semibold tracking-widest
168
+ text-neutral-900 text-xs font-medium tracking-widest
169
169
  transition-all duration-150 select-none group outline-none overflow-hidden
170
170
  ${isInteractionDisabled ? "opacity-70 cursor-not-allowed" : "active:translate-y-0.5"}
171
171
  ${className}
@@ -410,7 +410,7 @@ var HeroSection = ({
410
410
  Link4,
411
411
  {
412
412
  href: secondaryCtaHref,
413
- className: "w-full sm:w-60 inline-flex font-semibold items-center justify-center text-[11px] tracking-widest rounded-full px-8 py-3 bg-black/40 backdrop-blur-md text-center text-white text-xs hover:bg-neutral-800 hover:border-neutral-500 outline-none transition-all drop-shadow-lg"
413
+ className: "w-full sm:w-60 inline-flex font-medium items-center justify-center text-[11px] tracking-widest rounded-full px-8 py-3 bg-black/40 backdrop-blur-md text-center text-white text-xs hover:bg-neutral-800 hover:border-neutral-500 outline-none transition-all drop-shadow-lg"
414
414
  },
415
415
  secondaryCtaText
416
416
  )), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */ React6.createElement("div", { className: "w-full flex flex-col items-center mt-4" }, appsText && /* @__PURE__ */ React6.createElement("p", { className: "text-[9px] tracking-[0.2em] text-neutral-300 mb-5 " }, appsText), /* @__PURE__ */ React6.createElement("div", { className: "flex flex-wrap justify-center items-center gap-6 opacity-90" }, appLogos.map((logo, idx) => /* @__PURE__ */ React6.createElement("div", { key: idx, className: "relative h-6 w-6 sm:h-8 sm:w-8 flex items-center justify-center cursor-default filter invert" }, /* @__PURE__ */ React6.createElement(
@@ -827,7 +827,7 @@ var ManagedPricingBlock = ({
827
827
  Link5,
828
828
  {
829
829
  href: plan.ctaHref,
830
- className: "w-full py-2.5 px-5 rounded-full font-semibold border border-neutral-700 text-center text-white text-xs hover:bg-neutral-800 hover:border-neutral-600 transition-colors mb-6 outline-none block"
830
+ className: "w-full py-2.5 px-5 rounded-full font-medium border border-neutral-700 text-center text-white text-xs hover:bg-neutral-800 hover:border-neutral-600 transition-colors mb-6 outline-none block"
831
831
  },
832
832
  plan.ctaText
833
833
  ),
@@ -1417,6 +1417,95 @@ var ManagedProjectsBlock = ({
1417
1417
  return /* @__PURE__ */ React24.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__ */ React24.createElement("a", { href: project.link, target: "_blank", rel: "noopener noreferrer", className: "block outline-none" }, projectContent) : /* @__PURE__ */ React24.createElement(Link8, { href: project.link, className: "block outline-none" }, projectContent));
1418
1418
  }))));
1419
1419
  };
1420
+
1421
+ // src/components/WaitlistDialog.tsx
1422
+ import React25, { useState as useState13 } from "react";
1423
+ import { toast } from "react-hot-toast";
1424
+ var WaitlistDialog = ({ isOpen, onClose }) => {
1425
+ const [email, setEmail] = useState13("");
1426
+ const [isLoading, setIsLoading] = useState13(false);
1427
+ if (!isOpen) return null;
1428
+ const handleSubmit = async (e) => {
1429
+ e.preventDefault();
1430
+ if (!email || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
1431
+ toast.error("Please enter a valid email address.");
1432
+ return;
1433
+ }
1434
+ setIsLoading(true);
1435
+ try {
1436
+ const response = await fetch("/api/waitlist", {
1437
+ method: "POST",
1438
+ headers: {
1439
+ "Content-Type": "application/json"
1440
+ },
1441
+ body: JSON.stringify({ email })
1442
+ });
1443
+ const data = await response.json();
1444
+ if (response.ok && data.success) {
1445
+ toast.success(data.message || "You've been added to the waitlist!");
1446
+ setEmail("");
1447
+ onClose();
1448
+ } else {
1449
+ toast.error(data.error || "Something went wrong. Please try again.");
1450
+ }
1451
+ } catch (error) {
1452
+ toast.error("Network error. Please check your connection.");
1453
+ } finally {
1454
+ setIsLoading(false);
1455
+ }
1456
+ };
1457
+ return /* @__PURE__ */ React25.createElement("div", { className: "fixed inset-0 z-100 flex items-center justify-center p-4 bg-black/60 " }, /* @__PURE__ */ React25.createElement("div", { className: "absolute inset-0", onClick: !isLoading ? onClose : void 0 }), /* @__PURE__ */ React25.createElement(
1458
+ "div",
1459
+ {
1460
+ className: "w-full max-w-md bg-[#0a0a0a] rounded-2xl shadow-2xl overflow-hidden relative z-10 animate-in fade-in zoom-in-95 duration-200"
1461
+ },
1462
+ /* @__PURE__ */ React25.createElement(
1463
+ "button",
1464
+ {
1465
+ onClick: onClose,
1466
+ disabled: isLoading,
1467
+ className: "absolute top-4 right-4 p-2 text-neutral-500 hover:text-white transition-colors disabled:opacity-50 outline-none",
1468
+ "aria-label": "Close dialog"
1469
+ },
1470
+ /* @__PURE__ */ React25.createElement(
1471
+ "svg",
1472
+ {
1473
+ xmlns: "http://www.w3.org/2000/svg",
1474
+ width: "20",
1475
+ height: "20",
1476
+ viewBox: "0 0 24 24",
1477
+ fill: "none",
1478
+ stroke: "currentColor",
1479
+ strokeWidth: "2",
1480
+ strokeLinecap: "round",
1481
+ strokeLinejoin: "round"
1482
+ },
1483
+ /* @__PURE__ */ React25.createElement("path", { d: "M18 6 6 18" }),
1484
+ /* @__PURE__ */ React25.createElement("path", { d: "m6 6 12 12" })
1485
+ )
1486
+ ),
1487
+ /* @__PURE__ */ React25.createElement("div", { className: "p-6 sm:p-8" }, /* @__PURE__ */ React25.createElement("div", { className: "mb-8 mt-2" }, /* @__PURE__ */ React25.createElement("h2", { className: "text-2xl font-light text-white tracking-tight mb-2" }, "Join the Waitlist"), /* @__PURE__ */ React25.createElement("p", { className: "text-[13px] text-neutral-400 font-light leading-relaxed" }, "Be the first to experience the future of natural language computing. Secure your early access spot today.")), /* @__PURE__ */ React25.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col gap-8" }, /* @__PURE__ */ React25.createElement(
1488
+ TextInput,
1489
+ {
1490
+ label: "EMAIL ADDRESS",
1491
+ type: "email",
1492
+ value: email,
1493
+ onChange: setEmail,
1494
+ placeholder: "name@example.com",
1495
+ disabled: isLoading
1496
+ }
1497
+ ), /* @__PURE__ */ React25.createElement(
1498
+ ThreeDActionButton,
1499
+ {
1500
+ type: "submit",
1501
+ isLoading,
1502
+ disabled: !email,
1503
+ className: "w-full mt-2"
1504
+ },
1505
+ "Join Waitlist"
1506
+ )))
1507
+ ));
1508
+ };
1420
1509
  export {
1421
1510
  AppBento2,
1422
1511
  ConsultantShowcase,
@@ -1442,5 +1531,6 @@ export {
1442
1531
  PortfolioHero,
1443
1532
  TextInput,
1444
1533
  ThreeDActionButton,
1445
- ThreeDButton
1534
+ ThreeDButton,
1535
+ WaitlistDialog
1446
1536
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@retinalabsllc/zairusjs",
3
- "version": "8.1.50",
3
+ "version": "8.1.55",
4
4
  "description": "A perceptive, Ai data driven Next.js UI component library.",
5
5
  "author": "Retina Labs Company",
6
6
  "license": "MIT",