@mdxui/named 6.4.0 → 7.0.0

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.
@@ -1,5 +1,4 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- export { P as Problem, a as ProblemProps, W as WorkflowItem } from '../problem-B2-XszSB.js';
3
2
  import { IconType } from 'react-icons';
4
3
 
5
4
  interface HeroProps {
@@ -153,53 +152,4 @@ interface FooterProps {
153
152
  }
154
153
  declare function Footer({ logo, description, socialLinks, quickLinks, contactTitle, emailPlaceholder, onEmailSubmit, copyrightText, className, }: FooterProps): react_jsx_runtime.JSX.Element;
155
154
 
156
- interface FormField {
157
- id: string;
158
- label: string;
159
- type: 'text' | 'email' | 'tel' | 'textarea';
160
- placeholder?: string;
161
- required?: boolean;
162
- }
163
- interface ContactProps {
164
- heading?: string;
165
- subheading?: string;
166
- fields?: FormField[];
167
- submitButtonText?: string;
168
- successMessage?: string;
169
- errorMessage?: string;
170
- onSubmit?: (data: Record<string, string>) => Promise<void> | void;
171
- backgroundColor?: string;
172
- className?: string;
173
- }
174
- declare function Contact({ heading, subheading, fields, submitButtonText, successMessage, errorMessage, onSubmit, backgroundColor, className, }: ContactProps): react_jsx_runtime.JSX.Element;
175
-
176
- interface IntegrationNode {
177
- type: 'image' | 'icon' | 'component';
178
- content: string | React.ReactNode;
179
- alt?: string;
180
- className?: string;
181
- }
182
- interface AnimationConfig {
183
- startYOffset?: number;
184
- endYOffset?: number;
185
- curvature?: number;
186
- duration?: number;
187
- reverse?: boolean;
188
- }
189
- interface IntegrationProps {
190
- title?: string;
191
- description?: string;
192
- buttonText?: string;
193
- buttonHref?: string;
194
- leftNode: IntegrationNode;
195
- rightNode: IntegrationNode;
196
- beamAnimations?: AnimationConfig[];
197
- gridPatternWidth?: number;
198
- gridPatternHeight?: number;
199
- maxWidth?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl' | '7xl';
200
- className?: string;
201
- contentOrder?: 'left' | 'right';
202
- }
203
- declare function Integration({ title, description, buttonText, buttonHref, leftNode, rightNode, beamAnimations, gridPatternWidth, gridPatternHeight, maxWidth, className, contentOrder, }: IntegrationProps): react_jsx_runtime.JSX.Element;
204
-
205
- export { type AnimationConfig, CTA, type CTAButton, type CTAProps, Contact, type ContactProps, FAQ, type FAQItem, type FAQProps, type Feature, type FeatureItem, Features, type FeaturesProps, Footer, type FooterProps, type FormField, Hero, type HeroProps, Integration, type IntegrationNode, type IntegrationProps, type NavLink, Navigation, type NavigationProps, Pricing, type PricingFeature, type PricingProps, type PricingTier, type PricingTierFeature, PricingTiers, type PricingTiersProps, type QuickLink, type SocialLink };
155
+ export { CTA, type CTAButton, type CTAProps, FAQ, type FAQItem, type FAQProps, type Feature, type FeatureItem, Features, type FeaturesProps, Footer, type FooterProps, Hero, type HeroProps, type NavLink, Navigation, type NavigationProps, Pricing, type PricingFeature, type PricingProps, type PricingTier, type PricingTierFeature, PricingTiers, type PricingTiersProps, type QuickLink, type SocialLink };
@@ -599,73 +599,13 @@ function FAQ({ heading = "FAQs", faqs = defaultFaqs, backgroundColor = "bg-backg
599
599
  ] }) });
600
600
  }
601
601
 
602
- // src/components/problem/problem.tsx
603
- import { FaInbox, FaCalendarAlt, FaListUl, FaFileAlt, FaRocket, FaProjectDiagram, FaBug, FaLightbulb } from "react-icons/fa";
604
- import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
605
- var defaultWorkflows = [
606
- { icon: FaInbox, label: "Issue triage" },
607
- { icon: FaCalendarAlt, label: "Sprint planning" },
608
- { icon: FaListUl, label: "Backlog grooming" },
609
- { icon: FaFileAlt, label: "Status updates" },
610
- { icon: FaRocket, label: "Release planning" },
611
- { icon: FaProjectDiagram, label: "Dependency tracking" },
612
- { icon: FaBug, label: "Bug prioritization" },
613
- { icon: FaLightbulb, label: "Feature requests" }
614
- ];
615
- function Problem({
616
- heading = "Product managers <strong>spend 15+ hours</strong> per week on busywork",
617
- workflows = defaultWorkflows,
618
- subheading = "What if all of that just... ",
619
- subheadingHighlight = "happened automatically?",
620
- highlightColor = "bg-primary/20",
621
- marqueeDuration = "30s",
622
- marqueeGap = "0.5rem",
623
- backgroundColor = "bg-background",
624
- className
625
- }) {
626
- return /* @__PURE__ */ jsx10("section", { id: "problem", className: cn(`py-20 md:pb-32 px-6 lg:px-12 ${backgroundColor}`, className), children: /* @__PURE__ */ jsx10("div", { className: "max-w-4xl mx-auto", children: /* @__PURE__ */ jsxs7("div", { className: "text-center space-y-8", children: [
627
- /* @__PURE__ */ jsx10(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsx10(
628
- "h2",
629
- {
630
- className: "font-normal text-[clamp(36px,4vw,40px)] leading-tight text-foreground",
631
- dangerouslySetInnerHTML: { __html: heading }
632
- }
633
- ) }),
634
- /* @__PURE__ */ jsx10(ScrollReveal, { direction: "none", delay: 0.2, children: /* @__PURE__ */ jsxs7("div", { className: "relative py-6", children: [
635
- /* @__PURE__ */ jsx10("div", { className: "absolute left-0 top-0 bottom-0 w-32 bg-gradient-to-r from-background to-transparent z-10 pointer-events-none" }),
636
- /* @__PURE__ */ jsx10("div", { className: "absolute right-0 top-0 bottom-0 w-32 bg-gradient-to-l from-background to-transparent z-10 pointer-events-none" }),
637
- /* @__PURE__ */ jsx10(
638
- Marquee,
639
- {
640
- className: "[--duration:30s] [--gap:0.5rem]",
641
- style: {
642
- "--duration": marqueeDuration,
643
- "--gap": marqueeGap
644
- },
645
- children: workflows.map((workflow, index) => /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-2.5 pl-1.5 pr-3.5 py-1.5 bg-card border border-border rounded-full", children: [
646
- /* @__PURE__ */ jsx10("div", { className: "flex items-center justify-center w-7 h-7 rounded-full bg-background", children: /* @__PURE__ */ jsx10(workflow.icon, { className: "w-3.5 h-3.5 text-foreground" }) }),
647
- /* @__PURE__ */ jsx10("span", { className: "text-sm text-foreground whitespace-nowrap", children: workflow.label })
648
- ] }, index))
649
- }
650
- )
651
- ] }) }),
652
- /* @__PURE__ */ jsx10(ScrollReveal, { direction: "up", delay: 0.3, children: /* @__PURE__ */ jsx10("div", { className: "pt-2 md:pt-4", children: /* @__PURE__ */ jsxs7("h3", { className: "font-normal text-[clamp(26px,3.5vw,32px)] leading-tight text-foreground", children: [
653
- subheading,
654
- /* @__PURE__ */ jsxs7("span", { className: "relative inline-block", children: [
655
- /* @__PURE__ */ jsx10("span", { className: "relative z-10", children: subheadingHighlight }),
656
- /* @__PURE__ */ jsx10("span", { className: `absolute bottom-1 left-0 w-full h-3 ${highlightColor} opacity-30 -rotate-1` })
657
- ] })
658
- ] }) }) })
659
- ] }) }) });
660
- }
661
-
662
602
  // src/components/navigation/navigation.tsx
663
603
  import { useState, useEffect } from "react";
664
604
  import Link from "next/link";
665
605
  import { Menu, X } from "lucide-react";
666
606
  import { motion as motion2, AnimatePresence } from "motion/react";
667
607
  import { Button as Button5 } from "@mdxui/primitives";
668
- import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
608
+ import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
669
609
  function Navigation({
670
610
  logo = "Priya",
671
611
  logoHref = "/",
@@ -705,7 +645,7 @@ function Navigation({
705
645
  "7xl": "max-w-7xl",
706
646
  full: "max-w-full"
707
647
  }[maxWidth];
708
- return /* @__PURE__ */ jsx11(
648
+ return /* @__PURE__ */ jsx10(
709
649
  "nav",
710
650
  {
711
651
  className: cn(
@@ -714,14 +654,14 @@ function Navigation({
714
654
  showScrollEffect && isScrolled ? "bg-background/95 backdrop-blur-md" : "bg-background",
715
655
  className
716
656
  ),
717
- children: /* @__PURE__ */ jsxs8("div", { className: cn(maxWidthClass, "mx-auto px-6 lg:px-12 py-4"), children: [
718
- /* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-between", children: [
719
- /* @__PURE__ */ jsx11("div", { className: "flex items-center", children: /* @__PURE__ */ jsx11(Link, { href: logoHref, className: "flex items-center", children: typeof logo === "string" ? /* @__PURE__ */ jsx11("span", { className: "text-3xl font-base text-foreground", children: logo }) : logo }) }),
720
- links && links.length > 0 && /* @__PURE__ */ jsx11("div", { className: "hidden lg:flex items-center gap-8", children: links.map((link) => /* @__PURE__ */ jsx11("a", { href: link.href, className: "text-sm text-foreground hover:opacity-60 transition-opacity", children: link.label }, link.href)) }),
721
- ctaText && ctaHref && /* @__PURE__ */ jsx11("div", { className: "hidden lg:flex items-center", children: /* @__PURE__ */ jsx11(Button5, { asChild: true, variant: ctaVariant, children: /* @__PURE__ */ jsx11("a", { href: ctaHref, children: ctaText }) }) }),
722
- /* @__PURE__ */ jsx11("button", { className: "lg:hidden p-2 text-foreground", onClick: () => setMobileMenuOpen(!mobileMenuOpen), "aria-label": "Toggle menu", children: mobileMenuOpen ? /* @__PURE__ */ jsx11(X, { className: "w-6 h-6" }) : /* @__PURE__ */ jsx11(Menu, { className: "w-6 h-6" }) })
657
+ children: /* @__PURE__ */ jsxs7("div", { className: cn(maxWidthClass, "mx-auto px-6 lg:px-12 py-4"), children: [
658
+ /* @__PURE__ */ jsxs7("div", { className: "flex items-center justify-between", children: [
659
+ /* @__PURE__ */ jsx10("div", { className: "flex items-center", children: /* @__PURE__ */ jsx10(Link, { href: logoHref, className: "flex items-center", children: typeof logo === "string" ? /* @__PURE__ */ jsx10("span", { className: "text-3xl font-base text-foreground", children: logo }) : logo }) }),
660
+ links && links.length > 0 && /* @__PURE__ */ jsx10("div", { className: "hidden lg:flex items-center gap-8", children: links.map((link) => /* @__PURE__ */ jsx10("a", { href: link.href, className: "text-sm text-foreground hover:opacity-60 transition-opacity", children: link.label }, link.href)) }),
661
+ ctaText && ctaHref && /* @__PURE__ */ jsx10("div", { className: "hidden lg:flex items-center", children: /* @__PURE__ */ jsx10(Button5, { asChild: true, variant: ctaVariant, children: /* @__PURE__ */ jsx10("a", { href: ctaHref, children: ctaText }) }) }),
662
+ /* @__PURE__ */ jsx10("button", { className: "lg:hidden p-2 text-foreground", onClick: () => setMobileMenuOpen(!mobileMenuOpen), "aria-label": "Toggle menu", children: mobileMenuOpen ? /* @__PURE__ */ jsx10(X, { className: "w-6 h-6" }) : /* @__PURE__ */ jsx10(Menu, { className: "w-6 h-6" }) })
723
663
  ] }),
724
- /* @__PURE__ */ jsx11(AnimatePresence, { children: mobileMenuOpen && /* @__PURE__ */ jsx11(
664
+ /* @__PURE__ */ jsx10(AnimatePresence, { children: mobileMenuOpen && /* @__PURE__ */ jsx10(
725
665
  motion2.div,
726
666
  {
727
667
  initial: { opacity: 0, height: 0 },
@@ -729,9 +669,9 @@ function Navigation({
729
669
  exit: { opacity: 0, height: 0 },
730
670
  transition: { duration: 0.3, ease: "easeInOut" },
731
671
  className: "lg:hidden overflow-hidden",
732
- children: /* @__PURE__ */ jsx11("div", { className: "mt-4 py-4 rounded-xl bg-card", children: /* @__PURE__ */ jsxs8("div", { className: "flex flex-col gap-4 px-6", children: [
733
- links.map((link) => /* @__PURE__ */ jsx11("a", { href: link.href, className: "py-2 text-foreground hover:opacity-70 transition-colors", onClick: () => setMobileMenuOpen(false), children: link.label }, link.href)),
734
- ctaText && ctaHref && /* @__PURE__ */ jsx11(Button5, { asChild: true, variant: ctaVariant, className: "mt-2", onClick: () => setMobileMenuOpen(false), children: /* @__PURE__ */ jsx11("a", { href: ctaHref, children: ctaText }) })
672
+ children: /* @__PURE__ */ jsx10("div", { className: "mt-4 py-4 rounded-xl bg-card", children: /* @__PURE__ */ jsxs7("div", { className: "flex flex-col gap-4 px-6", children: [
673
+ links.map((link) => /* @__PURE__ */ jsx10("a", { href: link.href, className: "py-2 text-foreground hover:opacity-70 transition-colors", onClick: () => setMobileMenuOpen(false), children: link.label }, link.href)),
674
+ ctaText && ctaHref && /* @__PURE__ */ jsx10(Button5, { asChild: true, variant: ctaVariant, className: "mt-2", onClick: () => setMobileMenuOpen(false), children: /* @__PURE__ */ jsx10("a", { href: ctaHref, children: ctaText }) })
735
675
  ] }) })
736
676
  }
737
677
  ) })
@@ -746,7 +686,7 @@ import { FaGithub, FaXTwitter } from "react-icons/fa6";
746
686
  import { SiNpm } from "react-icons/si";
747
687
  import { FaArrowRight } from "react-icons/fa6";
748
688
  import { Input } from "@mdxui/primitives";
749
- import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
689
+ import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
750
690
  function Footer({
751
691
  logo = "Priya",
752
692
  description = "Your AI Product Manager for GitHub. Automate issue triage, sprint planning, and backlog grooming.",
@@ -776,14 +716,14 @@ function Footer({
776
716
  }
777
717
  form.reset();
778
718
  };
779
- return /* @__PURE__ */ jsx12("footer", { className: cn("py-16 px-6 lg:px-12 bg-card text-card-foreground", className), children: /* @__PURE__ */ jsxs9("div", { className: "max-w-7xl mx-auto", children: [
780
- /* @__PURE__ */ jsxs9("div", { className: "grid md:grid-cols-5 gap-12 mb-12", children: [
781
- /* @__PURE__ */ jsxs9("div", { className: "md:col-span-2", children: [
782
- /* @__PURE__ */ jsx12(Link2, { href: "/", className: "inline-block mb-4", children: /* @__PURE__ */ jsx12("div", { className: "text-3xl font-base text-card-foreground", children: logo }) }),
783
- /* @__PURE__ */ jsx12("p", { className: "max-w-md text-sm leading-relaxed text-muted-foreground mb-6", children: description }),
784
- /* @__PURE__ */ jsx12("div", { className: "flex items-center gap-4", children: socialLinks.map((link) => {
719
+ return /* @__PURE__ */ jsx11("footer", { className: cn("py-16 px-6 lg:px-12 bg-card text-card-foreground", className), children: /* @__PURE__ */ jsxs8("div", { className: "max-w-7xl mx-auto", children: [
720
+ /* @__PURE__ */ jsxs8("div", { className: "grid md:grid-cols-5 gap-12 mb-12", children: [
721
+ /* @__PURE__ */ jsxs8("div", { className: "md:col-span-2", children: [
722
+ /* @__PURE__ */ jsx11(Link2, { href: "/", className: "inline-block mb-4", children: /* @__PURE__ */ jsx11("div", { className: "text-3xl font-base text-card-foreground", children: logo }) }),
723
+ /* @__PURE__ */ jsx11("p", { className: "max-w-md text-sm leading-relaxed text-muted-foreground mb-6", children: description }),
724
+ /* @__PURE__ */ jsx11("div", { className: "flex items-center gap-4", children: socialLinks.map((link) => {
785
725
  const Icon = link.icon;
786
- return /* @__PURE__ */ jsx12(
726
+ return /* @__PURE__ */ jsx11(
787
727
  Link2,
788
728
  {
789
729
  href: link.href,
@@ -791,20 +731,20 @@ function Footer({
791
731
  rel: "noopener noreferrer",
792
732
  className: "text-muted-foreground transition-colors hover:text-card-foreground",
793
733
  "aria-label": link.label,
794
- children: /* @__PURE__ */ jsx12(Icon, { className: "w-5 h-5" })
734
+ children: /* @__PURE__ */ jsx11(Icon, { className: "w-5 h-5" })
795
735
  },
796
736
  link.label
797
737
  );
798
738
  }) })
799
739
  ] }),
800
- /* @__PURE__ */ jsxs9("div", { children: [
801
- /* @__PURE__ */ jsx12("h3", { className: "font-semibold text-base mb-4 text-card-foreground", children: "Quick Links" }),
802
- /* @__PURE__ */ jsx12("ul", { className: "space-y-2", children: quickLinks.map((link) => /* @__PURE__ */ jsx12("li", { children: /* @__PURE__ */ jsx12(Link2, { href: link.href, className: "text-sm text-muted-foreground transition-colors hover:text-card-foreground", children: link.label }) }, link.label)) })
740
+ /* @__PURE__ */ jsxs8("div", { children: [
741
+ /* @__PURE__ */ jsx11("h3", { className: "font-semibold text-base mb-4 text-card-foreground", children: "Quick Links" }),
742
+ /* @__PURE__ */ jsx11("ul", { className: "space-y-2", children: quickLinks.map((link) => /* @__PURE__ */ jsx11("li", { children: /* @__PURE__ */ jsx11(Link2, { href: link.href, className: "text-sm text-muted-foreground transition-colors hover:text-card-foreground", children: link.label }) }, link.label)) })
803
743
  ] }),
804
- /* @__PURE__ */ jsx12("div", { className: "w-full md:col-span-2 md:flex md:flex-col md:items-end", children: /* @__PURE__ */ jsxs9("div", { className: "w-full md:max-w-sm", children: [
805
- /* @__PURE__ */ jsx12("h3", { className: "font-semibold text-base mb-4 text-card-foreground", children: contactTitle }),
806
- /* @__PURE__ */ jsxs9("form", { onSubmit: handleEmailSubmit, className: "relative", children: [
807
- /* @__PURE__ */ jsx12(
744
+ /* @__PURE__ */ jsx11("div", { className: "w-full md:col-span-2 md:flex md:flex-col md:items-end", children: /* @__PURE__ */ jsxs8("div", { className: "w-full md:max-w-sm", children: [
745
+ /* @__PURE__ */ jsx11("h3", { className: "font-semibold text-base mb-4 text-card-foreground", children: contactTitle }),
746
+ /* @__PURE__ */ jsxs8("form", { onSubmit: handleEmailSubmit, className: "relative", children: [
747
+ /* @__PURE__ */ jsx11(
808
748
  Input,
809
749
  {
810
750
  type: "email",
@@ -814,390 +754,29 @@ function Footer({
814
754
  className: "w-full bg-muted border-border text-card-foreground placeholder:text-muted-foreground pr-12"
815
755
  }
816
756
  ),
817
- /* @__PURE__ */ jsx12(
757
+ /* @__PURE__ */ jsx11(
818
758
  "button",
819
759
  {
820
760
  type: "submit",
821
761
  className: "absolute right-1 top-1/2 -translate-y-1/2 bg-card text-foreground hover:bg-card active:bg-card active:text-card-foreground px-3 py-3 rounded-md transition-colors",
822
762
  "aria-label": "Submit email",
823
- children: /* @__PURE__ */ jsx12(FaArrowRight, { className: "w-3 h-3" })
763
+ children: /* @__PURE__ */ jsx11(FaArrowRight, { className: "w-3 h-3" })
824
764
  }
825
765
  )
826
766
  ] })
827
767
  ] }) })
828
768
  ] }),
829
- /* @__PURE__ */ jsx12("div", { className: "border-t border-border pt-8", children: /* @__PURE__ */ jsx12("div", { className: "flex flex-col md:flex-row justify-between items-center gap-4", children: /* @__PURE__ */ jsx12("p", { className: "text-sm text-muted-foreground", children: copyrightText }) }) })
830
- ] }) });
831
- }
832
-
833
- // src/components/contact/contact.tsx
834
- import { useState as useState2 } from "react";
835
- import { Button as Button6, Input as Input2, Label, Textarea } from "@mdxui/primitives";
836
- import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
837
- var defaultFields = [
838
- {
839
- id: "name",
840
- label: "Name",
841
- type: "text",
842
- required: true
843
- },
844
- {
845
- id: "email",
846
- label: "Company Email",
847
- type: "email",
848
- required: true
849
- },
850
- {
851
- id: "message",
852
- label: "Message",
853
- type: "textarea",
854
- placeholder: "Tell us about your use case, team size, or any other questions you may have.",
855
- required: true
856
- }
857
- ];
858
- function Contact({
859
- heading = "Get in touch",
860
- subheading = "Have questions about use cases, pricing, or anything else? Let's chat!",
861
- fields = defaultFields,
862
- submitButtonText = "Submit",
863
- successMessage = "Thanks for reaching out! I'll get back to you within 24 hours.",
864
- errorMessage = "Hmm, something went wrong. Mind trying again?",
865
- onSubmit,
866
- backgroundColor = "bg-background",
867
- className
868
- }) {
869
- const [isSubmitting, setIsSubmitting] = useState2(false);
870
- const [formData, setFormData] = useState2({});
871
- const [submitStatus, setSubmitStatus] = useState2("idle");
872
- const handleSubmit = async (e) => {
873
- e.preventDefault();
874
- setIsSubmitting(true);
875
- setSubmitStatus("idle");
876
- try {
877
- if (onSubmit) {
878
- await onSubmit(formData);
879
- }
880
- setSubmitStatus("success");
881
- setFormData({});
882
- e.target.reset();
883
- } catch {
884
- setSubmitStatus("error");
885
- } finally {
886
- setIsSubmitting(false);
887
- }
888
- };
889
- const handleChange = (e) => {
890
- setFormData((prev) => ({
891
- ...prev,
892
- [e.target.id]: e.target.value
893
- }));
894
- };
895
- return /* @__PURE__ */ jsx13("section", { className: cn(`relative py-12 md:py-32 px-6 lg:px-12 ${backgroundColor}`, className), children: /* @__PURE__ */ jsxs10("div", { className: "max-w-3xl mx-auto", children: [
896
- /* @__PURE__ */ jsx13(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs10("div", { className: "mb-14 text-center", children: [
897
- /* @__PURE__ */ jsx13("h1", { className: "font-normal text-[clamp(32px,4vw,40px)] leading-tight text-foreground mb-4", children: heading }),
898
- /* @__PURE__ */ jsx13("p", { className: "text-base text-muted-foreground max-w-2xl mx-auto", children: subheading })
899
- ] }) }),
900
- /* @__PURE__ */ jsx13(ScrollReveal, { direction: "up", delay: 0.2, children: /* @__PURE__ */ jsxs10(
901
- "form",
902
- {
903
- onSubmit: handleSubmit,
904
- className: "mx-auto flex max-w-lg flex-col gap-6 bg-card p-6 md:p-8 rounded-3xl border border-border feature-card-shadow",
905
- children: [
906
- fields.map((field) => /* @__PURE__ */ jsxs10("div", { className: "grid w-full items-center gap-2", children: [
907
- /* @__PURE__ */ jsxs10(Label, { htmlFor: field.id, className: "text-foreground", children: [
908
- field.label,
909
- field.required && /* @__PURE__ */ jsx13("span", { className: "text-destructive ml-1", children: "*" })
910
- ] }),
911
- field.type === "textarea" ? /* @__PURE__ */ jsx13(Textarea, { id: field.id, placeholder: field.placeholder, required: field.required, onChange: handleChange, className: "min-h-[120px]" }) : /* @__PURE__ */ jsx13(Input2, { type: field.type, id: field.id, placeholder: field.placeholder, required: field.required, onChange: handleChange })
912
- ] }, field.id)),
913
- /* @__PURE__ */ jsx13(Button6, { type: "submit", className: "w-full", disabled: isSubmitting, children: isSubmitting ? "Submitting..." : submitButtonText }),
914
- submitStatus === "success" && /* @__PURE__ */ jsx13("p", { className: "text-primary text-sm text-center", children: successMessage }),
915
- submitStatus === "error" && /* @__PURE__ */ jsx13("p", { className: "text-destructive text-sm text-center", children: errorMessage })
916
- ]
917
- }
918
- ) })
919
- ] }) });
920
- }
921
-
922
- // src/components/integration/integration.tsx
923
- import { forwardRef, useRef, useEffect as useEffect3, useState as useState4 } from "react";
924
-
925
- // src/shared/animated-beam/animated-beam.tsx
926
- import { useEffect as useEffect2, useId, useState as useState3 } from "react";
927
- import { motion as motion3 } from "motion/react";
928
- import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
929
- function AnimatedBeam({
930
- className,
931
- containerRef,
932
- fromRef,
933
- toRef,
934
- curvature = 0,
935
- reverse = false,
936
- duration = Math.random() * 3 + 4,
937
- delay = 0,
938
- pathColor = "gray",
939
- pathWidth = 2,
940
- pathOpacity = 0.2,
941
- gradientStartColor = "#ffaa40",
942
- gradientStopColor = "#9c40ff",
943
- startXOffset = 0,
944
- startYOffset = 0,
945
- endXOffset = 0,
946
- endYOffset = 0
947
- }) {
948
- const id = useId();
949
- const [pathD, setPathD] = useState3("");
950
- const [svgDimensions, setSvgDimensions] = useState3({ width: 0, height: 0 });
951
- const gradientCoordinates = reverse ? {
952
- x1: ["90%", "-10%"],
953
- x2: ["100%", "0%"],
954
- y1: ["0%", "0%"],
955
- y2: ["0%", "0%"]
956
- } : {
957
- x1: ["10%", "110%"],
958
- x2: ["0%", "100%"],
959
- y1: ["0%", "0%"],
960
- y2: ["0%", "0%"]
961
- };
962
- useEffect2(() => {
963
- const updatePath = () => {
964
- if (containerRef.current && fromRef.current && toRef.current) {
965
- const containerRect = containerRef.current.getBoundingClientRect();
966
- const rectA = fromRef.current.getBoundingClientRect();
967
- const rectB = toRef.current.getBoundingClientRect();
968
- const svgWidth = containerRect.width;
969
- const svgHeight = containerRect.height;
970
- setSvgDimensions({ width: svgWidth, height: svgHeight });
971
- const startX = rectA.left - containerRect.left + rectA.width / 2 + startXOffset;
972
- const startY = rectA.top - containerRect.top + rectA.height / 2 + startYOffset;
973
- const endX = rectB.left - containerRect.left + rectB.width / 2 + endXOffset;
974
- const endY = rectB.top - containerRect.top + rectB.height / 2 + endYOffset;
975
- const controlY = startY - curvature;
976
- const d = `M ${startX},${startY} Q ${(startX + endX) / 2},${controlY} ${endX},${endY}`;
977
- setPathD(d);
978
- }
979
- };
980
- const resizeObserver = new ResizeObserver(() => {
981
- updatePath();
982
- });
983
- if (containerRef.current) {
984
- resizeObserver.observe(containerRef.current);
985
- }
986
- updatePath();
987
- return () => {
988
- resizeObserver.disconnect();
989
- };
990
- }, [containerRef, fromRef, toRef, curvature, startXOffset, startYOffset, endXOffset, endYOffset]);
991
- return /* @__PURE__ */ jsxs11(
992
- "svg",
993
- {
994
- fill: "none",
995
- width: svgDimensions.width,
996
- height: svgDimensions.height,
997
- xmlns: "http://www.w3.org/2000/svg",
998
- className: cn("pointer-events-none absolute top-0 left-0 transform-gpu stroke-2", className),
999
- viewBox: `0 0 ${svgDimensions.width} ${svgDimensions.height}`,
1000
- children: [
1001
- /* @__PURE__ */ jsx14("path", { d: pathD, stroke: pathColor, strokeWidth: pathWidth, strokeOpacity: pathOpacity, strokeLinecap: "round" }),
1002
- /* @__PURE__ */ jsx14("path", { d: pathD, strokeWidth: pathWidth, stroke: `url(#${id})`, strokeOpacity: "1", strokeLinecap: "round" }),
1003
- /* @__PURE__ */ jsx14("defs", { children: /* @__PURE__ */ jsxs11(
1004
- motion3.linearGradient,
1005
- {
1006
- className: "transform-gpu",
1007
- id,
1008
- gradientUnits: "userSpaceOnUse",
1009
- initial: {
1010
- x1: "0%",
1011
- x2: "0%",
1012
- y1: "0%",
1013
- y2: "0%"
1014
- },
1015
- animate: {
1016
- x1: gradientCoordinates.x1,
1017
- x2: gradientCoordinates.x2,
1018
- y1: gradientCoordinates.y1,
1019
- y2: gradientCoordinates.y2
1020
- },
1021
- transition: {
1022
- delay,
1023
- duration,
1024
- ease: [0.16, 1, 0.3, 1],
1025
- repeat: Infinity,
1026
- repeatDelay: 0
1027
- },
1028
- children: [
1029
- /* @__PURE__ */ jsx14("stop", { stopColor: gradientStartColor, stopOpacity: "0" }),
1030
- /* @__PURE__ */ jsx14("stop", { stopColor: gradientStartColor }),
1031
- /* @__PURE__ */ jsx14("stop", { offset: "32.5%", stopColor: gradientStopColor }),
1032
- /* @__PURE__ */ jsx14("stop", { offset: "100%", stopColor: gradientStopColor, stopOpacity: "0" })
1033
- ]
1034
- }
1035
- ) })
1036
- ]
1037
- }
1038
- );
1039
- }
1040
-
1041
- // src/shared/grid-pattern/grid-pattern.tsx
1042
- import { useId as useId2 } from "react";
1043
- import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
1044
- function GridPattern({
1045
- width = 40,
1046
- height = 40,
1047
- x = -1,
1048
- y = -1,
1049
- strokeDasharray = "0",
1050
- squares,
1051
- className,
1052
- ...props
1053
- }) {
1054
- const id = useId2();
1055
- return /* @__PURE__ */ jsxs12(
1056
- "svg",
1057
- {
1058
- "aria-hidden": "true",
1059
- className: cn("pointer-events-none absolute inset-0 h-full w-full fill-muted-foreground/20 stroke-muted-foreground/20", className),
1060
- ...props,
1061
- children: [
1062
- /* @__PURE__ */ jsx15("defs", { children: /* @__PURE__ */ jsx15("pattern", { id, width, height, patternUnits: "userSpaceOnUse", x, y, children: /* @__PURE__ */ jsx15("path", { d: `M.5 ${height}V.5H${width}`, fill: "none", strokeDasharray }) }) }),
1063
- /* @__PURE__ */ jsx15("rect", { width: "100%", height: "100%", strokeWidth: 0, fill: `url(#${id})` }),
1064
- squares && /* @__PURE__ */ jsx15("svg", { x, y, className: "overflow-visible", children: squares.map(([sx, sy]) => /* @__PURE__ */ jsx15("rect", { strokeWidth: "0", width: width - 1, height: height - 1, x: sx * width + 1, y: sy * height + 1 }, `${sx}-${sy}`)) })
1065
- ]
1066
- }
1067
- );
1068
- }
1069
-
1070
- // src/components/integration/integration.tsx
1071
- import Image3 from "next/image";
1072
- import { Button as Button7 } from "@mdxui/primitives";
1073
- import { Fragment as Fragment2, jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
1074
- var Square = forwardRef(({ className, children }, ref) => {
1075
- return /* @__PURE__ */ jsx16(
1076
- "div",
1077
- {
1078
- ref,
1079
- className: cn("z-10 flex size-16 items-center justify-center rounded-lg bg-card border border-border p-3 integration-square-shadow", className),
1080
- children
1081
- }
1082
- );
1083
- });
1084
- Square.displayName = "Square";
1085
- function Integration({
1086
- title = "Connect in Seconds",
1087
- description = "Just connect your account and get started immediately \u2013 no configuration, no setup, no hassle.",
1088
- buttonText = "Get Started",
1089
- buttonHref = "#pricing",
1090
- leftNode,
1091
- rightNode,
1092
- beamAnimations = [
1093
- { startYOffset: 10, endYOffset: 10, curvature: -20, duration: 3 },
1094
- { startYOffset: -10, endYOffset: -10, curvature: 20, duration: 3, reverse: true }
1095
- ],
1096
- gridPatternWidth = 30,
1097
- gridPatternHeight = 30,
1098
- maxWidth = "5xl",
1099
- className,
1100
- contentOrder = "left"
1101
- }) {
1102
- const containerRef = useRef(null);
1103
- const leftRef = useRef(null);
1104
- const rightRef = useRef(null);
1105
- const [isDark, setIsDark] = useState4(false);
1106
- useEffect3(() => {
1107
- const checkDarkMode = () => {
1108
- const isDarkMode = document.documentElement.classList.contains("dark") || window.matchMedia("(prefers-color-scheme: dark)").matches;
1109
- setIsDark(isDarkMode);
1110
- };
1111
- checkDarkMode();
1112
- const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
1113
- const observer = new MutationObserver(checkDarkMode);
1114
- mediaQuery.addEventListener("change", checkDarkMode);
1115
- observer.observe(document.documentElement, {
1116
- attributes: true,
1117
- attributeFilter: ["class"]
1118
- });
1119
- return () => {
1120
- mediaQuery.removeEventListener("change", checkDarkMode);
1121
- observer.disconnect();
1122
- };
1123
- }, []);
1124
- const renderNode = (node, ref) => {
1125
- const squareContent = (() => {
1126
- if (node.type === "image" && typeof node.content === "string") {
1127
- return /* @__PURE__ */ jsx16("div", { className: "relative w-full h-full", children: /* @__PURE__ */ jsx16(Image3, { src: node.content, alt: node.alt || "Integration", fill: true, className: "object-cover rounded-lg" }) });
1128
- }
1129
- if (node.type === "icon" && typeof node.content === "string") {
1130
- return /* @__PURE__ */ jsx16("div", { className: cn("text-foreground", node.className), children: node.content });
1131
- }
1132
- return node.content;
1133
- })();
1134
- return /* @__PURE__ */ jsx16(Square, { ref, className: cn("size-20", node.type === "image" ? "p-0" : "", node.className), children: squareContent });
1135
- };
1136
- const maxWidthClasses = {
1137
- sm: "max-w-sm",
1138
- md: "max-w-md",
1139
- lg: "max-w-lg",
1140
- xl: "max-w-xl",
1141
- "2xl": "max-w-2xl",
1142
- "3xl": "max-w-3xl",
1143
- "4xl": "max-w-4xl",
1144
- "5xl": "max-w-5xl",
1145
- "6xl": "max-w-6xl",
1146
- "7xl": "max-w-7xl"
1147
- };
1148
- const content = /* @__PURE__ */ jsxs13("div", { className: "space-y-6", children: [
1149
- /* @__PURE__ */ jsx16(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsx16("h2", { className: "font-normal text-[clamp(32px,4vw,40px)] leading-tight text-foreground", children: title }) }),
1150
- /* @__PURE__ */ jsx16(ScrollReveal, { direction: "up", delay: 0.2, children: /* @__PURE__ */ jsx16("p", { className: "text-base text-muted-foreground max-w-lg", children: description }) }),
1151
- buttonText && buttonHref && /* @__PURE__ */ jsx16(ScrollReveal, { direction: "up", delay: 0.3, children: /* @__PURE__ */ jsx16(Button7, { asChild: true, variant: "default", children: /* @__PURE__ */ jsx16("a", { href: buttonHref, children: buttonText }) }) })
1152
- ] });
1153
- const animation = /* @__PURE__ */ jsx16(ScrollReveal, { direction: contentOrder === "left" ? "right" : "left", delay: 0.2, children: /* @__PURE__ */ jsxs13("div", { className: "relative flex aspect-square max-w-md mx-auto w-full items-center justify-center overflow-hidden rounded-lg", ref: containerRef, children: [
1154
- /* @__PURE__ */ jsx16(
1155
- GridPattern,
1156
- {
1157
- width: gridPatternWidth,
1158
- height: gridPatternHeight,
1159
- className: "opacity-30 mask-[radial-gradient(ellipse_at_center,black_40%,transparent_85%)] dark:mask-[radial-gradient(ellipse_at_center,white_40%,transparent_85%)]"
1160
- }
1161
- ),
1162
- /* @__PURE__ */ jsxs13("div", { className: "flex size-full flex-row items-center justify-center gap-20 relative z-10", children: [
1163
- /* @__PURE__ */ jsx16("div", { className: "flex flex-col justify-center", children: renderNode(leftNode, leftRef) }),
1164
- /* @__PURE__ */ jsx16("div", { className: "flex flex-col justify-center", children: renderNode(rightNode, rightRef) })
1165
- ] }),
1166
- beamAnimations.map((config, index) => /* @__PURE__ */ jsx16(
1167
- AnimatedBeam,
1168
- {
1169
- containerRef,
1170
- fromRef: leftRef,
1171
- toRef: rightRef,
1172
- startYOffset: config.startYOffset,
1173
- endYOffset: config.endYOffset,
1174
- curvature: config.curvature,
1175
- duration: config.duration,
1176
- reverse: config.reverse,
1177
- pathColor: isDark ? "rgba(255, 255, 255, 0.2)" : "rgba(0, 0, 0, 0.2)"
1178
- },
1179
- index
1180
- ))
769
+ /* @__PURE__ */ jsx11("div", { className: "border-t border-border pt-8", children: /* @__PURE__ */ jsx11("div", { className: "flex flex-col md:flex-row justify-between items-center gap-4", children: /* @__PURE__ */ jsx11("p", { className: "text-sm text-muted-foreground", children: copyrightText }) }) })
1181
770
  ] }) });
1182
- return /* @__PURE__ */ jsx16("section", { className: cn("pt-10 sm:pt-0 px-8 lg:px-24 bg-background", className), children: /* @__PURE__ */ jsx16("div", { className: cn(maxWidthClasses[maxWidth], "mx-auto"), children: /* @__PURE__ */ jsx16("div", { className: "grid lg:grid-cols-2 gap-1 items-center", children: contentOrder === "left" ? /* @__PURE__ */ jsxs13(Fragment2, { children: [
1183
- content,
1184
- animation
1185
- ] }) : /* @__PURE__ */ jsxs13(Fragment2, { children: [
1186
- animation,
1187
- content
1188
- ] }) }) }) });
1189
771
  }
1190
772
  export {
1191
773
  CTA,
1192
- Contact,
1193
774
  FAQ,
1194
775
  Features,
1195
776
  Footer,
1196
777
  Hero,
1197
- Integration,
1198
778
  Navigation,
1199
779
  Pricing,
1200
- PricingTiers,
1201
- Problem
780
+ PricingTiers
1202
781
  };
1203
782
  //# sourceMappingURL=index.js.map