@mdxui/named 6.0.0 → 6.2.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.
@@ -0,0 +1,235 @@
1
+ // src/schemas/index.ts
2
+ import { z } from "zod";
3
+ var HeroPropsSchema = z.object({
4
+ badgeEmoji: z.string().optional(),
5
+ badgeText: z.string().optional(),
6
+ badgeHref: z.string().optional(),
7
+ heading: z.string().optional(),
8
+ description: z.string().optional(),
9
+ ctaText: z.string().optional(),
10
+ ctaHref: z.string().optional(),
11
+ ctaVariant: z.enum(["default", "secondary", "outline", "ghost"]).optional(),
12
+ rightImageSrc: z.string().optional(),
13
+ rightImageAlt: z.string().optional(),
14
+ rightImageSizes: z.string().optional(),
15
+ showIconOverlay: z.boolean().optional(),
16
+ marqueeTitle: z.string().optional(),
17
+ marqueeImages: z.array(z.string()).optional(),
18
+ className: z.string().optional()
19
+ }).describe("Hero section props");
20
+ var FAQItemSchema = z.object({
21
+ question: z.string(),
22
+ answer: z.string()
23
+ }).describe("FAQ item");
24
+ var FAQPropsSchema = z.object({
25
+ heading: z.string().optional(),
26
+ faqs: z.array(FAQItemSchema).optional(),
27
+ backgroundColor: z.string().optional(),
28
+ className: z.string().optional()
29
+ }).describe("FAQ section props");
30
+ var FeatureItemSchema = z.object({
31
+ text: z.string()
32
+ }).describe("Feature item (bullet)");
33
+ var FeatureSchema = z.object({
34
+ title: z.string(),
35
+ description: z.string(),
36
+ items: z.array(FeatureItemSchema),
37
+ code: z.string(),
38
+ badge: z.string()
39
+ }).describe("Feature card");
40
+ var FeaturesPropsSchema = z.object({
41
+ heading: z.string().optional(),
42
+ description: z.string().optional(),
43
+ features: z.array(FeatureSchema).optional(),
44
+ className: z.string().optional()
45
+ }).describe("Features section props");
46
+ var PricingFeatureSchema = z.object({
47
+ text: z.string()
48
+ }).describe("Pricing feature bullet");
49
+ var PricingPropsSchema = z.object({
50
+ heading: z.string().optional(),
51
+ subheading: z.string().optional(),
52
+ price: z.string().optional(),
53
+ priceUnit: z.string().optional(),
54
+ trialText: z.string().optional(),
55
+ ctaText: z.string().optional(),
56
+ ctaHref: z.string().optional(),
57
+ featuresHeading: z.string().optional(),
58
+ features: z.array(PricingFeatureSchema).optional(),
59
+ backgroundColor: z.string().optional(),
60
+ securityNote: z.string().optional(),
61
+ className: z.string().optional()
62
+ }).describe("Single-tier pricing section props");
63
+ var PricingTierFeatureSchema = z.object({
64
+ text: z.string()
65
+ }).describe("Pricing tier feature bullet");
66
+ var PricingTierSchema = z.object({
67
+ title: z.string(),
68
+ description: z.string(),
69
+ price: z.string(),
70
+ priceUnit: z.string(),
71
+ ctaText: z.string(),
72
+ ctaVariant: z.enum(["primary", "secondary"]).optional(),
73
+ ctaHref: z.string().optional(),
74
+ features: z.array(PricingTierFeatureSchema),
75
+ image: z.string().optional(),
76
+ imageAlt: z.string().optional(),
77
+ featured: z.boolean().optional()
78
+ }).describe("Pricing tier card");
79
+ var PricingTiersPropsSchema = z.object({
80
+ heading: z.string().optional(),
81
+ subheading: z.string().optional(),
82
+ tiers: z.array(PricingTierSchema).optional(),
83
+ backgroundColor: z.string().optional(),
84
+ securityNote: z.string().optional(),
85
+ className: z.string().optional()
86
+ }).describe("Multi-tier pricing section props");
87
+ var Pricing1PropsSchema = PricingPropsSchema;
88
+ var Pricing2PropsSchema = PricingTiersPropsSchema;
89
+ var CTAButtonSchema = z.object({
90
+ text: z.string(),
91
+ href: z.string(),
92
+ variant: z.enum(["primary", "secondary"]).optional(),
93
+ showArrow: z.boolean().optional()
94
+ }).describe("CTA button");
95
+ var CTAPropsSchema = z.object({
96
+ heading: z.string().optional(),
97
+ subheading: z.string().optional(),
98
+ buttons: z.array(CTAButtonSchema).optional(),
99
+ backgroundColor: z.enum(["light", "blue", "green", "purple", "orange"]).optional(),
100
+ className: z.string().optional()
101
+ }).describe("CTA section props");
102
+ var FormFieldSchema = z.object({
103
+ id: z.string(),
104
+ label: z.string(),
105
+ type: z.enum(["text", "email", "tel", "textarea"]),
106
+ placeholder: z.string().optional(),
107
+ required: z.boolean().optional()
108
+ }).describe("Contact form field");
109
+ var ContactPropsSchema = z.object({
110
+ heading: z.string().optional(),
111
+ subheading: z.string().optional(),
112
+ fields: z.array(FormFieldSchema).optional(),
113
+ submitButtonText: z.string().optional(),
114
+ successMessage: z.string().optional(),
115
+ errorMessage: z.string().optional(),
116
+ // Non-translating: function fields are accepted but not deeply validated.
117
+ onSubmit: z.function().optional(),
118
+ backgroundColor: z.string().optional(),
119
+ className: z.string().optional()
120
+ }).describe("Contact section props");
121
+ var WorkflowItemSchema = z.object({
122
+ // Non-translating: react-icons IconType is a function — round-trip via z.custom.
123
+ icon: z.custom((v) => typeof v === "function"),
124
+ label: z.string()
125
+ }).describe("Workflow chip");
126
+ var ProblemPropsSchema = z.object({
127
+ heading: z.string().optional(),
128
+ headingHighlight: z.string().optional(),
129
+ workflows: z.array(WorkflowItemSchema).optional(),
130
+ subheading: z.string().optional(),
131
+ subheadingHighlight: z.string().optional(),
132
+ highlightColor: z.string().optional(),
133
+ marqueeDuration: z.string().optional(),
134
+ marqueeGap: z.string().optional(),
135
+ backgroundColor: z.string().optional(),
136
+ className: z.string().optional()
137
+ }).describe("Problem section props");
138
+ var IntegrationNodeSchema = z.object({
139
+ type: z.enum(["image", "icon", "component"]),
140
+ // Non-translating: string | React.ReactNode — accept anything, runtime user decides.
141
+ content: z.union([z.string(), z.any()]),
142
+ alt: z.string().optional(),
143
+ className: z.string().optional()
144
+ }).describe("Integration node (left/right of the beam)");
145
+ var AnimationConfigSchema = z.object({
146
+ startYOffset: z.number().optional(),
147
+ endYOffset: z.number().optional(),
148
+ curvature: z.number().optional(),
149
+ duration: z.number().optional(),
150
+ reverse: z.boolean().optional()
151
+ }).describe("AnimatedBeam configuration");
152
+ var IntegrationPropsSchema = z.object({
153
+ title: z.string().optional(),
154
+ description: z.string().optional(),
155
+ buttonText: z.string().optional(),
156
+ buttonHref: z.string().optional(),
157
+ leftNode: IntegrationNodeSchema,
158
+ rightNode: IntegrationNodeSchema,
159
+ beamAnimations: z.array(AnimationConfigSchema).optional(),
160
+ gridPatternWidth: z.number().optional(),
161
+ gridPatternHeight: z.number().optional(),
162
+ maxWidth: z.enum(["sm", "md", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "7xl"]).optional(),
163
+ className: z.string().optional(),
164
+ contentOrder: z.enum(["left", "right"]).optional()
165
+ }).describe("Integration section props");
166
+ var NavLinkSchema = z.object({
167
+ label: z.string(),
168
+ href: z.string()
169
+ }).describe("Nav link");
170
+ var NavigationPropsSchema = z.object({
171
+ // Non-translating: string | React.ReactNode.
172
+ logo: z.union([z.string(), z.any()]).optional(),
173
+ logoHref: z.string().optional(),
174
+ links: z.array(NavLinkSchema).optional(),
175
+ ctaText: z.string().optional(),
176
+ ctaHref: z.string().optional(),
177
+ ctaVariant: z.enum(["default", "secondary", "outline", "ghost", "link", "destructive"]).optional(),
178
+ className: z.string().optional(),
179
+ maxWidth: z.enum(["sm", "md", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "7xl", "full"]).optional(),
180
+ sticky: z.boolean().optional(),
181
+ showScrollEffect: z.boolean().optional()
182
+ }).describe("Navigation section props");
183
+ var SocialLinkSchema = z.object({
184
+ href: z.string(),
185
+ // Non-translating: react-icons IconType is a function — round-trip via z.custom.
186
+ icon: z.custom((v) => typeof v === "function"),
187
+ label: z.string()
188
+ }).describe("Social link");
189
+ var QuickLinkSchema = z.object({
190
+ href: z.string(),
191
+ label: z.string()
192
+ }).describe("Footer quick link");
193
+ var FooterPropsSchema = z.object({
194
+ logo: z.string().optional(),
195
+ description: z.string().optional(),
196
+ socialLinks: z.array(SocialLinkSchema).optional(),
197
+ quickLinks: z.array(QuickLinkSchema).optional(),
198
+ contactTitle: z.string().optional(),
199
+ emailPlaceholder: z.string().optional(),
200
+ // Non-translating: function field.
201
+ onEmailSubmit: z.function().optional(),
202
+ copyrightText: z.string().optional(),
203
+ showThemeToggle: z.boolean().optional(),
204
+ className: z.string().optional()
205
+ }).describe("Footer section props");
206
+ export {
207
+ AnimationConfigSchema,
208
+ CTAButtonSchema,
209
+ CTAPropsSchema,
210
+ ContactPropsSchema,
211
+ FAQItemSchema,
212
+ FAQPropsSchema,
213
+ FeatureItemSchema,
214
+ FeatureSchema,
215
+ FeaturesPropsSchema,
216
+ FooterPropsSchema,
217
+ FormFieldSchema,
218
+ HeroPropsSchema,
219
+ IntegrationNodeSchema,
220
+ IntegrationPropsSchema,
221
+ NavLinkSchema,
222
+ NavigationPropsSchema,
223
+ Pricing1PropsSchema,
224
+ Pricing2PropsSchema,
225
+ PricingFeatureSchema,
226
+ PricingPropsSchema,
227
+ PricingTierFeatureSchema,
228
+ PricingTierSchema,
229
+ PricingTiersPropsSchema,
230
+ ProblemPropsSchema,
231
+ QuickLinkSchema,
232
+ SocialLinkSchema,
233
+ WorkflowItemSchema
234
+ };
235
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/schemas/index.ts"],"sourcesContent":["/**\n * Pure-Zod schemas for @mdxui/named section components.\n *\n * This subpath has NO React, no @mdxui/primitives, and no next/* imports —\n * consumers (e.g. dot-do/named-agents) can validate prop data at runtime\n * without pulling Radix, React, or the rest of the UI tree into their build.\n *\n * Each `XxxPropsSchema` is annotated as `z.ZodType<XxxProps>` and cast back\n * (annotate-and-cast pattern) so any future drift between the TS interface\n * and the Zod schema is caught at typecheck — without triggering the\n * variance issues that `satisfies` raises on function / ReactNode fields.\n *\n * Authoring reference: `packages/mdxui/src/zod.ts`.\n * Function / ReactNode handling reference: `packages/mdxui/src/ui/shell/shell.ts`.\n */\nimport { z } from 'zod'\nimport type { IconType } from 'react-icons'\n\n// Re-export the existing interfaces type-only — type-only erases at build,\n// so this entry stays runtime-clean (only `zod` survives in the JS output).\nexport type { HeroProps } from '../components/hero/hero'\nexport type { FAQItem, FAQProps } from '../components/faq/faq'\nexport type { FeatureItem, Feature, FeaturesProps } from '../components/features/features'\nexport type { PricingFeature, PricingProps } from '../components/pricing/pricing'\nexport type { PricingTierFeature, PricingTier, PricingTiersProps } from '../components/pricing/pricing-tiers'\nexport type { CTAButton, CTAProps } from '../components/cta/cta'\nexport type { FormField, ContactProps } from '../components/contact/contact'\nexport type { WorkflowItem, ProblemProps } from '../components/problem/problem'\nexport type { IntegrationNode, AnimationConfig, IntegrationProps } from '../components/integration/integration'\nexport type { NavLink, NavigationProps } from '../components/navigation/navigation'\nexport type { SocialLink, QuickLink, FooterProps } from '../components/footer/footer'\n\n// Import types for the annotate-and-cast assertions below.\nimport type { HeroProps } from '../components/hero/hero'\nimport type { FAQItem, FAQProps } from '../components/faq/faq'\nimport type { FeatureItem, Feature, FeaturesProps } from '../components/features/features'\nimport type { PricingFeature, PricingProps } from '../components/pricing/pricing'\nimport type { PricingTierFeature, PricingTier, PricingTiersProps } from '../components/pricing/pricing-tiers'\nimport type { CTAButton, CTAProps } from '../components/cta/cta'\nimport type { FormField, ContactProps } from '../components/contact/contact'\nimport type { WorkflowItem, ProblemProps } from '../components/problem/problem'\nimport type { IntegrationNode, AnimationConfig, IntegrationProps } from '../components/integration/integration'\nimport type { NavLink, NavigationProps } from '../components/navigation/navigation'\nimport type { SocialLink, QuickLink, FooterProps } from '../components/footer/footer'\n\n// =============================================================================\n// Hero\n// =============================================================================\n\nexport const HeroPropsSchema: z.ZodType<HeroProps> = z.object({\n badgeEmoji: z.string().optional(),\n badgeText: z.string().optional(),\n badgeHref: z.string().optional(),\n heading: z.string().optional(),\n description: z.string().optional(),\n ctaText: z.string().optional(),\n ctaHref: z.string().optional(),\n ctaVariant: z.enum(['default', 'secondary', 'outline', 'ghost']).optional(),\n rightImageSrc: z.string().optional(),\n rightImageAlt: z.string().optional(),\n rightImageSizes: z.string().optional(),\n showIconOverlay: z.boolean().optional(),\n marqueeTitle: z.string().optional(),\n marqueeImages: z.array(z.string()).optional(),\n className: z.string().optional(),\n}).describe('Hero section props') as z.ZodType<HeroProps>\n\n// =============================================================================\n// FAQ\n// =============================================================================\n\nexport const FAQItemSchema: z.ZodType<FAQItem> = z.object({\n question: z.string(),\n answer: z.string(),\n}).describe('FAQ item') as z.ZodType<FAQItem>\n\nexport const FAQPropsSchema: z.ZodType<FAQProps> = z.object({\n heading: z.string().optional(),\n faqs: z.array(FAQItemSchema).optional(),\n backgroundColor: z.string().optional(),\n className: z.string().optional(),\n}).describe('FAQ section props') as z.ZodType<FAQProps>\n\n// =============================================================================\n// Features\n// =============================================================================\n\nexport const FeatureItemSchema: z.ZodType<FeatureItem> = z.object({\n text: z.string(),\n}).describe('Feature item (bullet)') as z.ZodType<FeatureItem>\n\nexport const FeatureSchema: z.ZodType<Feature> = z.object({\n title: z.string(),\n description: z.string(),\n items: z.array(FeatureItemSchema),\n code: z.string(),\n badge: z.string(),\n}).describe('Feature card') as z.ZodType<Feature>\n\nexport const FeaturesPropsSchema: z.ZodType<FeaturesProps> = z.object({\n heading: z.string().optional(),\n description: z.string().optional(),\n features: z.array(FeatureSchema).optional(),\n className: z.string().optional(),\n}).describe('Features section props') as z.ZodType<FeaturesProps>\n\n// =============================================================================\n// Pricing (single-tier)\n// =============================================================================\n\nexport const PricingFeatureSchema: z.ZodType<PricingFeature> = z.object({\n text: z.string(),\n}).describe('Pricing feature bullet') as z.ZodType<PricingFeature>\n\nexport const PricingPropsSchema: z.ZodType<PricingProps> = z.object({\n heading: z.string().optional(),\n subheading: z.string().optional(),\n price: z.string().optional(),\n priceUnit: z.string().optional(),\n trialText: z.string().optional(),\n ctaText: z.string().optional(),\n ctaHref: z.string().optional(),\n featuresHeading: z.string().optional(),\n features: z.array(PricingFeatureSchema).optional(),\n backgroundColor: z.string().optional(),\n securityNote: z.string().optional(),\n className: z.string().optional(),\n}).describe('Single-tier pricing section props') as z.ZodType<PricingProps>\n\n// =============================================================================\n// PricingTiers (multi-tier)\n// =============================================================================\n\nexport const PricingTierFeatureSchema: z.ZodType<PricingTierFeature> = z.object({\n text: z.string(),\n}).describe('Pricing tier feature bullet') as z.ZodType<PricingTierFeature>\n\nexport const PricingTierSchema: z.ZodType<PricingTier> = z.object({\n title: z.string(),\n description: z.string(),\n price: z.string(),\n priceUnit: z.string(),\n ctaText: z.string(),\n ctaVariant: z.enum(['primary', 'secondary']).optional(),\n ctaHref: z.string().optional(),\n features: z.array(PricingTierFeatureSchema),\n image: z.string().optional(),\n imageAlt: z.string().optional(),\n featured: z.boolean().optional(),\n}).describe('Pricing tier card') as z.ZodType<PricingTier>\n\nexport const PricingTiersPropsSchema: z.ZodType<PricingTiersProps> = z.object({\n heading: z.string().optional(),\n subheading: z.string().optional(),\n tiers: z.array(PricingTierSchema).optional(),\n backgroundColor: z.string().optional(),\n securityNote: z.string().optional(),\n className: z.string().optional(),\n}).describe('Multi-tier pricing section props') as z.ZodType<PricingTiersProps>\n\n// Backwards-friendly aliases matching the issue's vocabulary.\nexport const Pricing1PropsSchema = PricingPropsSchema\nexport const Pricing2PropsSchema = PricingTiersPropsSchema\n\n// =============================================================================\n// CTA\n// =============================================================================\n\nexport const CTAButtonSchema: z.ZodType<CTAButton> = z.object({\n text: z.string(),\n href: z.string(),\n variant: z.enum(['primary', 'secondary']).optional(),\n showArrow: z.boolean().optional(),\n}).describe('CTA button') as z.ZodType<CTAButton>\n\nexport const CTAPropsSchema: z.ZodType<CTAProps> = z.object({\n heading: z.string().optional(),\n subheading: z.string().optional(),\n buttons: z.array(CTAButtonSchema).optional(),\n backgroundColor: z.enum(['light', 'blue', 'green', 'purple', 'orange']).optional(),\n className: z.string().optional(),\n}).describe('CTA section props') as z.ZodType<CTAProps>\n\n// =============================================================================\n// Contact\n// =============================================================================\n\nexport const FormFieldSchema: z.ZodType<FormField> = z.object({\n id: z.string(),\n label: z.string(),\n type: z.enum(['text', 'email', 'tel', 'textarea']),\n placeholder: z.string().optional(),\n required: z.boolean().optional(),\n}).describe('Contact form field') as z.ZodType<FormField>\n\nexport const ContactPropsSchema: z.ZodType<ContactProps> = z.object({\n heading: z.string().optional(),\n subheading: z.string().optional(),\n fields: z.array(FormFieldSchema).optional(),\n submitButtonText: z.string().optional(),\n successMessage: z.string().optional(),\n errorMessage: z.string().optional(),\n // Non-translating: function fields are accepted but not deeply validated.\n onSubmit: z.function().optional(),\n backgroundColor: z.string().optional(),\n className: z.string().optional(),\n}).describe('Contact section props') as z.ZodType<ContactProps>\n\n// =============================================================================\n// Problem\n// =============================================================================\n\nexport const WorkflowItemSchema: z.ZodType<WorkflowItem> = z.object({\n // Non-translating: react-icons IconType is a function — round-trip via z.custom.\n icon: z.custom<IconType>((v) => typeof v === 'function'),\n label: z.string(),\n}).describe('Workflow chip') as z.ZodType<WorkflowItem>\n\nexport const ProblemPropsSchema: z.ZodType<ProblemProps> = z.object({\n heading: z.string().optional(),\n headingHighlight: z.string().optional(),\n workflows: z.array(WorkflowItemSchema).optional(),\n subheading: z.string().optional(),\n subheadingHighlight: z.string().optional(),\n highlightColor: z.string().optional(),\n marqueeDuration: z.string().optional(),\n marqueeGap: z.string().optional(),\n backgroundColor: z.string().optional(),\n className: z.string().optional(),\n}).describe('Problem section props') as z.ZodType<ProblemProps>\n\n// =============================================================================\n// Integration\n// =============================================================================\n\nexport const IntegrationNodeSchema: z.ZodType<IntegrationNode> = z.object({\n type: z.enum(['image', 'icon', 'component']),\n // Non-translating: string | React.ReactNode — accept anything, runtime user decides.\n content: z.union([z.string(), z.any()]),\n alt: z.string().optional(),\n className: z.string().optional(),\n}).describe('Integration node (left/right of the beam)') as z.ZodType<IntegrationNode>\n\nexport const AnimationConfigSchema: z.ZodType<AnimationConfig> = z.object({\n startYOffset: z.number().optional(),\n endYOffset: z.number().optional(),\n curvature: z.number().optional(),\n duration: z.number().optional(),\n reverse: z.boolean().optional(),\n}).describe('AnimatedBeam configuration') as z.ZodType<AnimationConfig>\n\nexport const IntegrationPropsSchema: z.ZodType<IntegrationProps> = z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n buttonText: z.string().optional(),\n buttonHref: z.string().optional(),\n leftNode: IntegrationNodeSchema,\n rightNode: IntegrationNodeSchema,\n beamAnimations: z.array(AnimationConfigSchema).optional(),\n gridPatternWidth: z.number().optional(),\n gridPatternHeight: z.number().optional(),\n maxWidth: z.enum(['sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl', '6xl', '7xl']).optional(),\n className: z.string().optional(),\n contentOrder: z.enum(['left', 'right']).optional(),\n}).describe('Integration section props') as z.ZodType<IntegrationProps>\n\n// =============================================================================\n// Navigation\n// =============================================================================\n\nexport const NavLinkSchema: z.ZodType<NavLink> = z.object({\n label: z.string(),\n href: z.string(),\n}).describe('Nav link') as z.ZodType<NavLink>\n\nexport const NavigationPropsSchema: z.ZodType<NavigationProps> = z.object({\n // Non-translating: string | React.ReactNode.\n logo: z.union([z.string(), z.any()]).optional(),\n logoHref: z.string().optional(),\n links: z.array(NavLinkSchema).optional(),\n ctaText: z.string().optional(),\n ctaHref: z.string().optional(),\n ctaVariant: z.enum(['default', 'secondary', 'outline', 'ghost', 'link', 'destructive']).optional(),\n className: z.string().optional(),\n maxWidth: z.enum(['sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl', '6xl', '7xl', 'full']).optional(),\n sticky: z.boolean().optional(),\n showScrollEffect: z.boolean().optional(),\n}).describe('Navigation section props') as z.ZodType<NavigationProps>\n\n// =============================================================================\n// Footer\n// =============================================================================\n\nexport const SocialLinkSchema: z.ZodType<SocialLink> = z.object({\n href: z.string(),\n // Non-translating: react-icons IconType is a function — round-trip via z.custom.\n icon: z.custom<IconType>((v) => typeof v === 'function'),\n label: z.string(),\n}).describe('Social link') as z.ZodType<SocialLink>\n\nexport const QuickLinkSchema: z.ZodType<QuickLink> = z.object({\n href: z.string(),\n label: z.string(),\n}).describe('Footer quick link') as z.ZodType<QuickLink>\n\nexport const FooterPropsSchema: z.ZodType<FooterProps> = z.object({\n logo: z.string().optional(),\n description: z.string().optional(),\n socialLinks: z.array(SocialLinkSchema).optional(),\n quickLinks: z.array(QuickLinkSchema).optional(),\n contactTitle: z.string().optional(),\n emailPlaceholder: z.string().optional(),\n // Non-translating: function field.\n onEmailSubmit: z.function().optional(),\n copyrightText: z.string().optional(),\n showThemeToggle: z.boolean().optional(),\n className: z.string().optional(),\n}).describe('Footer section props') as z.ZodType<FooterProps>\n"],"mappings":"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","names":[]}
@@ -293,7 +293,7 @@ function GridPattern({
293
293
  "svg",
294
294
  {
295
295
  "aria-hidden": "true",
296
- className: cn("pointer-events-none absolute inset-0 h-full w-full fill-gray-400/30 stroke-gray-400/30", className),
296
+ className: cn("pointer-events-none absolute inset-0 h-full w-full fill-muted-foreground/20 stroke-muted-foreground/20", className),
297
297
  ...props,
298
298
  children: [
299
299
  /* @__PURE__ */ jsx5("defs", { children: /* @__PURE__ */ jsx5("pattern", { id, width, height, patternUnits: "userSpaceOnUse", x, y, children: /* @__PURE__ */ jsx5("path", { d: `M.5 ${height}V.5H${width}`, fill: "none", strokeDasharray }) }) }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/shared/scroll-reveal/scroll-reveal.tsx","../../src/shared/animated-beam/animated-beam.tsx","../../src/lib/utils.ts","../../src/shared/marquee/marquee.tsx","../../src/shared/code-window/code-window.tsx","../../src/shared/grid-pattern/grid-pattern.tsx"],"sourcesContent":["'use client'\n\nimport { motion, Variants } from 'motion/react'\nimport { ReactNode } from 'react'\n\nexport interface ScrollRevealProps {\n children: ReactNode\n className?: string\n delay?: number\n direction?: 'up' | 'down' | 'left' | 'right' | 'none'\n duration?: number\n trigger?: 'inView' | 'mount'\n once?: boolean\n margin?: string\n}\n\nconst directionVariants: Record<string, Variants> = {\n up: {\n hidden: { opacity: 0, y: 50 },\n visible: { opacity: 1, y: 0 },\n },\n down: {\n hidden: { opacity: 0, y: -50 },\n visible: { opacity: 1, y: 0 },\n },\n left: {\n hidden: { opacity: 0, x: -50 },\n visible: { opacity: 1, x: 0 },\n },\n right: {\n hidden: { opacity: 0, x: 50 },\n visible: { opacity: 1, x: 0 },\n },\n none: {\n hidden: { opacity: 0 },\n visible: { opacity: 1 },\n },\n}\n\nexport function ScrollReveal({\n children,\n className,\n delay = 0,\n direction = 'up',\n duration = 0.5,\n trigger = 'inView',\n once = true,\n margin = '-100px',\n}: ScrollRevealProps) {\n if (trigger === 'mount') {\n return (\n <motion.div\n initial=\"hidden\"\n animate=\"visible\"\n transition={{ duration, delay, ease: 'easeOut' }}\n variants={directionVariants[direction]}\n className={className}\n >\n {children}\n </motion.div>\n )\n }\n\n return (\n <motion.div\n initial=\"hidden\"\n whileInView=\"visible\"\n viewport={{ once, margin }}\n transition={{ duration, delay, ease: 'easeOut' }}\n variants={directionVariants[direction]}\n className={className}\n >\n {children}\n </motion.div>\n )\n}\n","'use client'\n\nimport { RefObject, useEffect, useId, useState } from 'react'\nimport { motion } from 'motion/react'\nimport { cn } from '../../lib/utils'\n\nexport interface AnimatedBeamProps {\n className?: string\n containerRef: RefObject<HTMLElement | null>\n fromRef: RefObject<HTMLElement | null>\n toRef: RefObject<HTMLElement | null>\n curvature?: number\n reverse?: boolean\n pathColor?: string\n pathWidth?: number\n pathOpacity?: number\n gradientStartColor?: string\n gradientStopColor?: string\n delay?: number\n duration?: number\n startXOffset?: number\n startYOffset?: number\n endXOffset?: number\n endYOffset?: number\n}\n\nexport function AnimatedBeam({\n className,\n containerRef,\n fromRef,\n toRef,\n curvature = 0,\n reverse = false,\n duration = Math.random() * 3 + 4,\n delay = 0,\n pathColor = 'gray',\n pathWidth = 2,\n pathOpacity = 0.2,\n gradientStartColor = '#ffaa40',\n gradientStopColor = '#9c40ff',\n startXOffset = 0,\n startYOffset = 0,\n endXOffset = 0,\n endYOffset = 0,\n}: AnimatedBeamProps) {\n const id = useId()\n const [pathD, setPathD] = useState('')\n const [svgDimensions, setSvgDimensions] = useState({ width: 0, height: 0 })\n\n const gradientCoordinates = reverse\n ? {\n x1: ['90%', '-10%'],\n x2: ['100%', '0%'],\n y1: ['0%', '0%'],\n y2: ['0%', '0%'],\n }\n : {\n x1: ['10%', '110%'],\n x2: ['0%', '100%'],\n y1: ['0%', '0%'],\n y2: ['0%', '0%'],\n }\n\n useEffect(() => {\n const updatePath = () => {\n if (containerRef.current && fromRef.current && toRef.current) {\n const containerRect = containerRef.current.getBoundingClientRect()\n const rectA = fromRef.current.getBoundingClientRect()\n const rectB = toRef.current.getBoundingClientRect()\n\n const svgWidth = containerRect.width\n const svgHeight = containerRect.height\n setSvgDimensions({ width: svgWidth, height: svgHeight })\n\n const startX = rectA.left - containerRect.left + rectA.width / 2 + startXOffset\n const startY = rectA.top - containerRect.top + rectA.height / 2 + startYOffset\n const endX = rectB.left - containerRect.left + rectB.width / 2 + endXOffset\n const endY = rectB.top - containerRect.top + rectB.height / 2 + endYOffset\n\n const controlY = startY - curvature\n const d = `M ${startX},${startY} Q ${(startX + endX) / 2},${controlY} ${endX},${endY}`\n setPathD(d)\n }\n }\n\n const resizeObserver = new ResizeObserver(() => {\n updatePath()\n })\n\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current)\n }\n\n updatePath()\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [containerRef, fromRef, toRef, curvature, startXOffset, startYOffset, endXOffset, endYOffset])\n\n return (\n <svg\n fill=\"none\"\n width={svgDimensions.width}\n height={svgDimensions.height}\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn('pointer-events-none absolute top-0 left-0 transform-gpu stroke-2', className)}\n viewBox={`0 0 ${svgDimensions.width} ${svgDimensions.height}`}\n >\n <path d={pathD} stroke={pathColor} strokeWidth={pathWidth} strokeOpacity={pathOpacity} strokeLinecap=\"round\" />\n <path d={pathD} strokeWidth={pathWidth} stroke={`url(#${id})`} strokeOpacity=\"1\" strokeLinecap=\"round\" />\n <defs>\n <motion.linearGradient\n className=\"transform-gpu\"\n id={id}\n gradientUnits={'userSpaceOnUse'}\n initial={{\n x1: '0%',\n x2: '0%',\n y1: '0%',\n y2: '0%',\n }}\n animate={{\n x1: gradientCoordinates.x1,\n x2: gradientCoordinates.x2,\n y1: gradientCoordinates.y1,\n y2: gradientCoordinates.y2,\n }}\n transition={{\n delay,\n duration,\n ease: [0.16, 1, 0.3, 1],\n repeat: Infinity,\n repeatDelay: 0,\n }}\n >\n <stop stopColor={gradientStartColor} stopOpacity=\"0\"></stop>\n <stop stopColor={gradientStartColor}></stop>\n <stop offset=\"32.5%\" stopColor={gradientStopColor}></stop>\n <stop offset=\"100%\" stopColor={gradientStopColor} stopOpacity=\"0\"></stop>\n </motion.linearGradient>\n </defs>\n </svg>\n )\n}\n","import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { ComponentPropsWithoutRef } from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface MarqueeProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * Optional CSS class name to apply custom styles\n */\n className?: string\n /**\n * Whether to reverse the animation direction\n * @default false\n */\n reverse?: boolean\n /**\n * Whether to pause the animation on hover\n * @default false\n */\n pauseOnHover?: boolean\n /**\n * Content to be displayed in the marquee\n */\n children: React.ReactNode\n /**\n * Whether to animate vertically instead of horizontally\n * @default false\n */\n vertical?: boolean\n /**\n * Number of times to repeat the content\n * @default 4\n */\n repeat?: number\n}\n\nexport function Marquee({\n className,\n reverse = false,\n pauseOnHover = false,\n children,\n vertical = false,\n repeat = 4,\n ...props\n}: MarqueeProps) {\n return (\n <div\n {...props}\n className={cn(\n 'group flex [gap:var(--gap)] overflow-hidden p-2 [--duration:40s] [--gap:1rem]',\n {\n 'flex-row': !vertical,\n 'flex-col': vertical,\n },\n className\n )}\n >\n {Array(repeat)\n .fill(0)\n .map((_, i) => (\n <div\n key={i}\n className={cn('flex shrink-0 justify-around [gap:var(--gap)]', {\n 'animate-marquee flex-row': !vertical,\n 'animate-marquee-vertical flex-col': vertical,\n 'group-hover:[animation-play-state:paused]': pauseOnHover,\n '[animation-direction:reverse]': reverse,\n })}\n >\n {children}\n </div>\n ))}\n </div>\n )\n}\n","import React from 'react'\n\nexport interface CodeWindowProps {\n code: string\n className?: string\n}\n\nexport function CodeWindow({ code, className }: CodeWindowProps) {\n const highlightCode = (code: string) => {\n const lines = code.split('\\n')\n const result: React.ReactElement[] = []\n let prevWasComment = false\n let prevWasCode = false\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n const isComment = line.trim().startsWith('//')\n const isEmpty = line.trim() === ''\n const isCode = !isComment && !isEmpty\n\n if (isComment && prevWasCode) {\n result.push(<div key={`space-before-${i}`} className=\"h-5\"></div>)\n }\n\n if (prevWasComment && isCode) {\n result.push(<div key={`space-after-${i}`} className=\"h-5\"></div>)\n }\n\n if (isEmpty) {\n result.push(<div key={i} className=\"h-5\"></div>)\n prevWasComment = false\n prevWasCode = false\n continue\n }\n\n if (isComment) {\n result.push(\n <div key={i} className=\"text-[#7d8590]\">\n {line}\n </div>\n )\n prevWasComment = true\n prevWasCode = false\n continue\n }\n\n let highlighted = line\n\n // Function names and properties with dots\n highlighted = highlighted.replace(\n /\\$\\.(\\w+)\\.(\\w+)/g,\n '<span class=\"text-[#79c0ff]\">$</span>.<span class=\"text-[#d2a8ff]\">$1</span>.<span class=\"text-[#ffa657]\">$2</span>'\n )\n\n // Object properties\n highlighted = highlighted.replace(/(\\w+):/g, '<span class=\"text-[#79c0ff]\">$1</span>:')\n\n // Strings\n highlighted = highlighted.replace(/'([^']*)'/g, \"<span class=\\\"text-[#a5d6ff]\\\">'$1'</span>\")\n\n // Numbers\n highlighted = highlighted.replace(/\\b(\\d+)\\b/g, '<span class=\"text-[#79c0ff]\">$1</span>')\n\n result.push(<div key={i} dangerouslySetInnerHTML={{ __html: highlighted }} />)\n\n prevWasComment = false\n prevWasCode = true\n }\n\n return result\n }\n\n return (\n <div className={`w-full h-full bg-[#0d1117] rounded-lg overflow-hidden ${className ?? ''}`}>\n <div className=\"flex-1 overflow-auto p-6 lg:p-8\">\n <pre className=\"text-sm lg:text-sm leading-relaxed font-mono text-[#e6edf3]\">{highlightCode(code)}</pre>\n </div>\n </div>\n )\n}\n","import { useId } from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface GridPatternProps extends React.SVGProps<SVGSVGElement> {\n width?: number\n height?: number\n x?: number\n y?: number\n squares?: Array<[x: number, y: number]>\n strokeDasharray?: string\n className?: string\n}\n\nexport function GridPattern({\n width = 40,\n height = 40,\n x = -1,\n y = -1,\n strokeDasharray = '0',\n squares,\n className,\n ...props\n}: GridPatternProps) {\n const id = useId()\n\n return (\n <svg\n aria-hidden=\"true\"\n className={cn('pointer-events-none absolute inset-0 h-full w-full fill-gray-400/30 stroke-gray-400/30', className)}\n {...props}\n >\n <defs>\n <pattern id={id} width={width} height={height} patternUnits=\"userSpaceOnUse\" x={x} y={y}>\n <path d={`M.5 ${height}V.5H${width}`} fill=\"none\" strokeDasharray={strokeDasharray} />\n </pattern>\n </defs>\n <rect width=\"100%\" height=\"100%\" strokeWidth={0} fill={`url(#${id})`} />\n {squares && (\n <svg x={x} y={y} className=\"overflow-visible\">\n {squares.map(([sx, sy]) => (\n <rect strokeWidth=\"0\" key={`${sx}-${sy}`} width={width - 1} height={height - 1} x={sx * width + 1} y={sy * height + 1} />\n ))}\n </svg>\n )}\n </svg>\n )\n}\n"],"mappings":"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","names":["motion","jsx","motion","jsx","jsx","code","useId","jsx","jsxs","useId"]}
1
+ {"version":3,"sources":["../../src/shared/scroll-reveal/scroll-reveal.tsx","../../src/shared/animated-beam/animated-beam.tsx","../../src/lib/utils.ts","../../src/shared/marquee/marquee.tsx","../../src/shared/code-window/code-window.tsx","../../src/shared/grid-pattern/grid-pattern.tsx"],"sourcesContent":["'use client'\n\nimport { motion, Variants } from 'motion/react'\nimport { ReactNode } from 'react'\n\nexport interface ScrollRevealProps {\n children: ReactNode\n className?: string\n delay?: number\n direction?: 'up' | 'down' | 'left' | 'right' | 'none'\n duration?: number\n trigger?: 'inView' | 'mount'\n once?: boolean\n margin?: string\n}\n\nconst directionVariants: Record<string, Variants> = {\n up: {\n hidden: { opacity: 0, y: 50 },\n visible: { opacity: 1, y: 0 },\n },\n down: {\n hidden: { opacity: 0, y: -50 },\n visible: { opacity: 1, y: 0 },\n },\n left: {\n hidden: { opacity: 0, x: -50 },\n visible: { opacity: 1, x: 0 },\n },\n right: {\n hidden: { opacity: 0, x: 50 },\n visible: { opacity: 1, x: 0 },\n },\n none: {\n hidden: { opacity: 0 },\n visible: { opacity: 1 },\n },\n}\n\nexport function ScrollReveal({\n children,\n className,\n delay = 0,\n direction = 'up',\n duration = 0.5,\n trigger = 'inView',\n once = true,\n margin = '-100px',\n}: ScrollRevealProps) {\n if (trigger === 'mount') {\n return (\n <motion.div\n initial=\"hidden\"\n animate=\"visible\"\n transition={{ duration, delay, ease: 'easeOut' }}\n variants={directionVariants[direction]}\n className={className}\n >\n {children}\n </motion.div>\n )\n }\n\n return (\n <motion.div\n initial=\"hidden\"\n whileInView=\"visible\"\n viewport={{ once, margin }}\n transition={{ duration, delay, ease: 'easeOut' }}\n variants={directionVariants[direction]}\n className={className}\n >\n {children}\n </motion.div>\n )\n}\n","'use client'\n\nimport { RefObject, useEffect, useId, useState } from 'react'\nimport { motion } from 'motion/react'\nimport { cn } from '../../lib/utils'\n\nexport interface AnimatedBeamProps {\n className?: string\n containerRef: RefObject<HTMLElement | null>\n fromRef: RefObject<HTMLElement | null>\n toRef: RefObject<HTMLElement | null>\n curvature?: number\n reverse?: boolean\n pathColor?: string\n pathWidth?: number\n pathOpacity?: number\n gradientStartColor?: string\n gradientStopColor?: string\n delay?: number\n duration?: number\n startXOffset?: number\n startYOffset?: number\n endXOffset?: number\n endYOffset?: number\n}\n\nexport function AnimatedBeam({\n className,\n containerRef,\n fromRef,\n toRef,\n curvature = 0,\n reverse = false,\n duration = Math.random() * 3 + 4,\n delay = 0,\n pathColor = 'gray',\n pathWidth = 2,\n pathOpacity = 0.2,\n gradientStartColor = '#ffaa40',\n gradientStopColor = '#9c40ff',\n startXOffset = 0,\n startYOffset = 0,\n endXOffset = 0,\n endYOffset = 0,\n}: AnimatedBeamProps) {\n const id = useId()\n const [pathD, setPathD] = useState('')\n const [svgDimensions, setSvgDimensions] = useState({ width: 0, height: 0 })\n\n const gradientCoordinates = reverse\n ? {\n x1: ['90%', '-10%'],\n x2: ['100%', '0%'],\n y1: ['0%', '0%'],\n y2: ['0%', '0%'],\n }\n : {\n x1: ['10%', '110%'],\n x2: ['0%', '100%'],\n y1: ['0%', '0%'],\n y2: ['0%', '0%'],\n }\n\n useEffect(() => {\n const updatePath = () => {\n if (containerRef.current && fromRef.current && toRef.current) {\n const containerRect = containerRef.current.getBoundingClientRect()\n const rectA = fromRef.current.getBoundingClientRect()\n const rectB = toRef.current.getBoundingClientRect()\n\n const svgWidth = containerRect.width\n const svgHeight = containerRect.height\n setSvgDimensions({ width: svgWidth, height: svgHeight })\n\n const startX = rectA.left - containerRect.left + rectA.width / 2 + startXOffset\n const startY = rectA.top - containerRect.top + rectA.height / 2 + startYOffset\n const endX = rectB.left - containerRect.left + rectB.width / 2 + endXOffset\n const endY = rectB.top - containerRect.top + rectB.height / 2 + endYOffset\n\n const controlY = startY - curvature\n const d = `M ${startX},${startY} Q ${(startX + endX) / 2},${controlY} ${endX},${endY}`\n setPathD(d)\n }\n }\n\n const resizeObserver = new ResizeObserver(() => {\n updatePath()\n })\n\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current)\n }\n\n updatePath()\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [containerRef, fromRef, toRef, curvature, startXOffset, startYOffset, endXOffset, endYOffset])\n\n return (\n <svg\n fill=\"none\"\n width={svgDimensions.width}\n height={svgDimensions.height}\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn('pointer-events-none absolute top-0 left-0 transform-gpu stroke-2', className)}\n viewBox={`0 0 ${svgDimensions.width} ${svgDimensions.height}`}\n >\n <path d={pathD} stroke={pathColor} strokeWidth={pathWidth} strokeOpacity={pathOpacity} strokeLinecap=\"round\" />\n <path d={pathD} strokeWidth={pathWidth} stroke={`url(#${id})`} strokeOpacity=\"1\" strokeLinecap=\"round\" />\n <defs>\n <motion.linearGradient\n className=\"transform-gpu\"\n id={id}\n gradientUnits={'userSpaceOnUse'}\n initial={{\n x1: '0%',\n x2: '0%',\n y1: '0%',\n y2: '0%',\n }}\n animate={{\n x1: gradientCoordinates.x1,\n x2: gradientCoordinates.x2,\n y1: gradientCoordinates.y1,\n y2: gradientCoordinates.y2,\n }}\n transition={{\n delay,\n duration,\n ease: [0.16, 1, 0.3, 1],\n repeat: Infinity,\n repeatDelay: 0,\n }}\n >\n <stop stopColor={gradientStartColor} stopOpacity=\"0\"></stop>\n <stop stopColor={gradientStartColor}></stop>\n <stop offset=\"32.5%\" stopColor={gradientStopColor}></stop>\n <stop offset=\"100%\" stopColor={gradientStopColor} stopOpacity=\"0\"></stop>\n </motion.linearGradient>\n </defs>\n </svg>\n )\n}\n","import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { ComponentPropsWithoutRef } from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface MarqueeProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * Optional CSS class name to apply custom styles\n */\n className?: string\n /**\n * Whether to reverse the animation direction\n * @default false\n */\n reverse?: boolean\n /**\n * Whether to pause the animation on hover\n * @default false\n */\n pauseOnHover?: boolean\n /**\n * Content to be displayed in the marquee\n */\n children: React.ReactNode\n /**\n * Whether to animate vertically instead of horizontally\n * @default false\n */\n vertical?: boolean\n /**\n * Number of times to repeat the content\n * @default 4\n */\n repeat?: number\n}\n\nexport function Marquee({\n className,\n reverse = false,\n pauseOnHover = false,\n children,\n vertical = false,\n repeat = 4,\n ...props\n}: MarqueeProps) {\n return (\n <div\n {...props}\n className={cn(\n 'group flex [gap:var(--gap)] overflow-hidden p-2 [--duration:40s] [--gap:1rem]',\n {\n 'flex-row': !vertical,\n 'flex-col': vertical,\n },\n className\n )}\n >\n {Array(repeat)\n .fill(0)\n .map((_, i) => (\n <div\n key={i}\n className={cn('flex shrink-0 justify-around [gap:var(--gap)]', {\n 'animate-marquee flex-row': !vertical,\n 'animate-marquee-vertical flex-col': vertical,\n 'group-hover:[animation-play-state:paused]': pauseOnHover,\n '[animation-direction:reverse]': reverse,\n })}\n >\n {children}\n </div>\n ))}\n </div>\n )\n}\n","import React from 'react'\n\nexport interface CodeWindowProps {\n code: string\n className?: string\n}\n\nexport function CodeWindow({ code, className }: CodeWindowProps) {\n const highlightCode = (code: string) => {\n const lines = code.split('\\n')\n const result: React.ReactElement[] = []\n let prevWasComment = false\n let prevWasCode = false\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n const isComment = line.trim().startsWith('//')\n const isEmpty = line.trim() === ''\n const isCode = !isComment && !isEmpty\n\n if (isComment && prevWasCode) {\n result.push(<div key={`space-before-${i}`} className=\"h-5\"></div>)\n }\n\n if (prevWasComment && isCode) {\n result.push(<div key={`space-after-${i}`} className=\"h-5\"></div>)\n }\n\n if (isEmpty) {\n result.push(<div key={i} className=\"h-5\"></div>)\n prevWasComment = false\n prevWasCode = false\n continue\n }\n\n if (isComment) {\n result.push(\n <div key={i} className=\"text-[#7d8590]\">\n {line}\n </div>\n )\n prevWasComment = true\n prevWasCode = false\n continue\n }\n\n let highlighted = line\n\n // Function names and properties with dots\n highlighted = highlighted.replace(\n /\\$\\.(\\w+)\\.(\\w+)/g,\n '<span class=\"text-[#79c0ff]\">$</span>.<span class=\"text-[#d2a8ff]\">$1</span>.<span class=\"text-[#ffa657]\">$2</span>'\n )\n\n // Object properties\n highlighted = highlighted.replace(/(\\w+):/g, '<span class=\"text-[#79c0ff]\">$1</span>:')\n\n // Strings\n highlighted = highlighted.replace(/'([^']*)'/g, \"<span class=\\\"text-[#a5d6ff]\\\">'$1'</span>\")\n\n // Numbers\n highlighted = highlighted.replace(/\\b(\\d+)\\b/g, '<span class=\"text-[#79c0ff]\">$1</span>')\n\n result.push(<div key={i} dangerouslySetInnerHTML={{ __html: highlighted }} />)\n\n prevWasComment = false\n prevWasCode = true\n }\n\n return result\n }\n\n return (\n <div className={`w-full h-full bg-[#0d1117] rounded-lg overflow-hidden ${className ?? ''}`}>\n <div className=\"flex-1 overflow-auto p-6 lg:p-8\">\n <pre className=\"text-sm lg:text-sm leading-relaxed font-mono text-[#e6edf3]\">{highlightCode(code)}</pre>\n </div>\n </div>\n )\n}\n","import { useId } from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface GridPatternProps extends React.SVGProps<SVGSVGElement> {\n width?: number\n height?: number\n x?: number\n y?: number\n squares?: Array<[x: number, y: number]>\n strokeDasharray?: string\n className?: string\n}\n\nexport function GridPattern({\n width = 40,\n height = 40,\n x = -1,\n y = -1,\n strokeDasharray = '0',\n squares,\n className,\n ...props\n}: GridPatternProps) {\n const id = useId()\n\n return (\n <svg\n aria-hidden=\"true\"\n className={cn('pointer-events-none absolute inset-0 h-full w-full fill-muted-foreground/20 stroke-muted-foreground/20', className)}\n {...props}\n >\n <defs>\n <pattern id={id} width={width} height={height} patternUnits=\"userSpaceOnUse\" x={x} y={y}>\n <path d={`M.5 ${height}V.5H${width}`} fill=\"none\" strokeDasharray={strokeDasharray} />\n </pattern>\n </defs>\n <rect width=\"100%\" height=\"100%\" strokeWidth={0} fill={`url(#${id})`} />\n {squares && (\n <svg x={x} y={y} className=\"overflow-visible\">\n {squares.map(([sx, sy]) => (\n <rect strokeWidth=\"0\" key={`${sx}-${sy}`} width={width - 1} height={height - 1} x={sx * width + 1} y={sy * height + 1} />\n ))}\n </svg>\n )}\n </svg>\n )\n}\n"],"mappings":"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","names":["motion","jsx","motion","jsx","jsx","code","useId","jsx","jsxs","useId"]}
@@ -0,0 +1,166 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ThemePreset } from '@mdxui/themes';
3
+ import { IconType } from 'react-icons';
4
+ import { W as WorkflowItem } from '../problem-B2-XszSB.js';
5
+
6
+ /** Single FAQ item. */
7
+ type NamedAgentFaqItem = {
8
+ question: string;
9
+ answer: string;
10
+ };
11
+ /** Hero — persona pill (badge), heading/description, single CTA, optional
12
+ * split image + a tool marquee below. */
13
+ type NamedAgentHero = {
14
+ badgeEmoji?: string;
15
+ badgeText?: string;
16
+ badgeHref?: string;
17
+ heading: string;
18
+ description: string;
19
+ ctaText: string;
20
+ ctaHref: string;
21
+ /** Modelled for richer Startups; the named Hero renders a single CTA today. */
22
+ secondaryCtaText?: string;
23
+ secondaryCtaHref?: string;
24
+ rightImageSrc?: string;
25
+ rightImageAlt?: string;
26
+ showIconOverlay?: boolean;
27
+ marqueeTitle?: string;
28
+ marqueeImages?: string[];
29
+ };
30
+ /** Problem — workflow chips + dual-line headline. `icon` is a free-form hint
31
+ * string (the wire can't carry a React component); the mapper resolves it to
32
+ * a react-icons glyph, falling back to a neutral dot. */
33
+ type NamedAgentWorkflow = {
34
+ icon: string;
35
+ label: string;
36
+ };
37
+ type NamedAgentProblem = {
38
+ heading: string;
39
+ workflows: NamedAgentWorkflow[];
40
+ subheading: string;
41
+ subheadingHighlight: string;
42
+ };
43
+ /** Features — numbered cards (title + description + bullet items + code window). */
44
+ type NamedAgentFeature = {
45
+ title: string;
46
+ description: string;
47
+ items: {
48
+ text: string;
49
+ }[];
50
+ code: string;
51
+ badge: string;
52
+ };
53
+ type NamedAgentFeatures = {
54
+ heading: string;
55
+ description: string;
56
+ features: NamedAgentFeature[];
57
+ };
58
+ /** Pricing — Pricing1 (single tier) vs Pricing2 (multi-tier) fork, discriminated
59
+ * on `variant` so both are expressible on one wire field. */
60
+ type NamedAgentPricingFeature = {
61
+ text: string;
62
+ };
63
+ type NamedAgentPricingTier = {
64
+ title: string;
65
+ description: string;
66
+ price: string;
67
+ priceUnit: string;
68
+ ctaText: string;
69
+ ctaVariant?: 'primary' | 'secondary';
70
+ ctaHref?: string;
71
+ features: NamedAgentPricingFeature[];
72
+ image?: string;
73
+ imageAlt?: string;
74
+ featured?: boolean;
75
+ };
76
+ type NamedAgentPricing = {
77
+ variant: 'single';
78
+ heading: string;
79
+ subheading?: string;
80
+ price: string;
81
+ priceUnit: string;
82
+ trialText?: string;
83
+ ctaText: string;
84
+ ctaHref: string;
85
+ featuresHeading?: string;
86
+ features: NamedAgentPricingFeature[];
87
+ securityNote?: string;
88
+ } | {
89
+ variant: 'tiers';
90
+ heading: string;
91
+ subheading?: string;
92
+ tiers: NamedAgentPricingTier[];
93
+ securityNote?: string;
94
+ };
95
+ type NamedAgentFaq = {
96
+ heading: string;
97
+ faqs: NamedAgentFaqItem[];
98
+ };
99
+ type NamedAgentCtaButton = {
100
+ text: string;
101
+ href: string;
102
+ variant?: 'primary' | 'secondary';
103
+ showArrow?: boolean;
104
+ };
105
+ type NamedAgentCta = {
106
+ heading: string;
107
+ subheading?: string;
108
+ buttons: NamedAgentCtaButton[];
109
+ };
110
+ /** Integration — animated-beam two-node motif. `content` is a free-form string
111
+ * (icon name / image src / label); `type` tells the component how to render it. */
112
+ type NamedAgentIntegrationNode = {
113
+ type: 'image' | 'icon' | 'component';
114
+ content: string;
115
+ alt?: string;
116
+ };
117
+ type NamedAgentIntegration = {
118
+ title: string;
119
+ description: string;
120
+ buttonText?: string;
121
+ buttonHref?: string;
122
+ leftNode: NamedAgentIntegrationNode;
123
+ rightNode: NamedAgentIntegrationNode;
124
+ };
125
+ /** Contact — presentation-only form (no submit handler on the wire). */
126
+ type NamedAgentContactField = {
127
+ id: string;
128
+ label: string;
129
+ type: 'text' | 'email' | 'tel' | 'textarea';
130
+ placeholder?: string;
131
+ required?: boolean;
132
+ };
133
+ type NamedAgentContact = {
134
+ heading: string;
135
+ subheading?: string;
136
+ fields: NamedAgentContactField[];
137
+ submitButtonText: string;
138
+ };
139
+ /** Full named-agent landing content. */
140
+ type NamedAgentLandingContent = {
141
+ hero: NamedAgentHero;
142
+ problem: NamedAgentProblem;
143
+ features: NamedAgentFeatures;
144
+ integration?: NamedAgentIntegration;
145
+ pricing: NamedAgentPricing;
146
+ faq: NamedAgentFaq;
147
+ cta: NamedAgentCta;
148
+ contact?: NamedAgentContact;
149
+ };
150
+
151
+ interface NamedAgentViewProps {
152
+ content: NamedAgentLandingContent;
153
+ theme: ThemePreset;
154
+ mode: 'light' | 'dark';
155
+ brandName: string;
156
+ hostname: string;
157
+ }
158
+ declare function NamedAgentView({ content, theme, mode, brandName, hostname }: NamedAgentViewProps): react_jsx_runtime.JSX.Element;
159
+
160
+ /** Resolve one workflow icon hint to a react-icons component. */
161
+ declare function resolveWorkflowIcon(hint: string): IconType;
162
+ /** Map wire workflows ({ icon: hint, label }) → named Problem `WorkflowItem[]`
163
+ * ({ icon: IconType, label }). */
164
+ declare function mapWorkflows(workflows: NamedAgentWorkflow[]): WorkflowItem[];
165
+
166
+ export { type NamedAgentContact, type NamedAgentContactField, type NamedAgentCta, type NamedAgentCtaButton, type NamedAgentFaq, type NamedAgentFaqItem, type NamedAgentFeature, type NamedAgentFeatures, type NamedAgentHero, type NamedAgentIntegration, type NamedAgentIntegrationNode, type NamedAgentLandingContent, type NamedAgentPricing, type NamedAgentPricingFeature, type NamedAgentPricingTier, type NamedAgentProblem, NamedAgentView, type NamedAgentViewProps, type NamedAgentWorkflow, NamedAgentView as default, mapWorkflows, resolveWorkflowIcon };