@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.
- package/dist/components/index.d.ts +1 -51
- package/dist/components/index.js +32 -453
- package/dist/components/index.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.js +48 -324
- package/dist/index.js.map +1 -1
- package/dist/schemas/index.d.ts +2 -10
- package/dist/schemas/index.js +1 -72
- package/dist/schemas/index.js.map +1 -1
- package/dist/view/index.d.ts +3 -55
- package/dist/view/index.js +10 -488
- package/dist/view/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/problem-B2-XszSB.d.ts +0 -22
|
@@ -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
|
-
|
|
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 };
|
package/dist/components/index.js
CHANGED
|
@@ -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
|
|
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__ */
|
|
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__ */
|
|
718
|
-
/* @__PURE__ */
|
|
719
|
-
/* @__PURE__ */
|
|
720
|
-
links && links.length > 0 && /* @__PURE__ */
|
|
721
|
-
ctaText && ctaHref && /* @__PURE__ */
|
|
722
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
733
|
-
links.map((link) => /* @__PURE__ */
|
|
734
|
-
ctaText && ctaHref && /* @__PURE__ */
|
|
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
|
|
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__ */
|
|
780
|
-
/* @__PURE__ */
|
|
781
|
-
/* @__PURE__ */
|
|
782
|
-
/* @__PURE__ */
|
|
783
|
-
/* @__PURE__ */
|
|
784
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
734
|
+
children: /* @__PURE__ */ jsx11(Icon, { className: "w-5 h-5" })
|
|
795
735
|
},
|
|
796
736
|
link.label
|
|
797
737
|
);
|
|
798
738
|
}) })
|
|
799
739
|
] }),
|
|
800
|
-
/* @__PURE__ */
|
|
801
|
-
/* @__PURE__ */
|
|
802
|
-
/* @__PURE__ */
|
|
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__ */
|
|
805
|
-
/* @__PURE__ */
|
|
806
|
-
/* @__PURE__ */
|
|
807
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
763
|
+
children: /* @__PURE__ */ jsx11(FaArrowRight, { className: "w-3 h-3" })
|
|
824
764
|
}
|
|
825
765
|
)
|
|
826
766
|
] })
|
|
827
767
|
] }) })
|
|
828
768
|
] }),
|
|
829
|
-
/* @__PURE__ */
|
|
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
|