@mdxui/named 8.2.1 → 8.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/index.d.ts +2 -4
- package/dist/components/index.js +5 -17
- package/dist/components/index.js.map +1 -1
- package/dist/index.d.ts +62 -1
- package/dist/index.js +35 -18
- package/dist/index.js.map +1 -1
- package/dist/schemas/index.js +0 -2
- package/dist/schemas/index.js.map +1 -1
- package/dist/view/index.d.ts +0 -2
- package/dist/view/index.js +120 -83
- package/dist/view/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +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 '../templates/studio/components/hero/hero'\nexport type { FAQItem, FAQProps } from '../templates/studio/components/faq/faq'\nexport type { FeatureItem, Feature, FeaturesProps } from '../templates/studio/components/features/features'\nexport type { PricingFeature, PricingProps } from '../templates/studio/components/pricing/pricing'\nexport type { PricingTierFeature, PricingTier, PricingTiersProps } from '../templates/studio/components/pricing/pricing-tiers'\nexport type { CTAButton, CTAProps } from '../templates/studio/components/cta/cta'\nexport type { NavLink, NavigationProps } from '../templates/studio/components/navigation/navigation'\nexport type { SocialLink, QuickLink, FooterProps } from '../templates/studio/components/footer/footer'\n\n// Import types for the annotate-and-cast assertions below.\nimport type { HeroProps } from '../templates/studio/components/hero/hero'\nimport type { FAQItem, FAQProps } from '../templates/studio/components/faq/faq'\nimport type { FeatureItem, Feature, FeaturesProps } from '../templates/studio/components/features/features'\nimport type { PricingFeature, PricingProps } from '../templates/studio/components/pricing/pricing'\nimport type { PricingTierFeature, PricingTier, PricingTiersProps } from '../templates/studio/components/pricing/pricing-tiers'\nimport type { CTAButton, CTAProps } from '../templates/studio/components/cta/cta'\nimport type { NavLink, NavigationProps } from '../templates/studio/components/navigation/navigation'\nimport type { SocialLink, QuickLink, FooterProps } from '../templates/studio/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 language: z.string().optional(),\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// 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', 'accent']).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":[]}
|
|
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 '../templates/studio/components/hero/hero'\nexport type { FAQItem, FAQProps } from '../templates/studio/components/faq/faq'\nexport type { FeatureItem, Feature, FeaturesProps } from '../templates/studio/components/features/features'\nexport type { PricingFeature, PricingProps } from '../templates/studio/components/pricing/pricing'\nexport type { PricingTierFeature, PricingTier, PricingTiersProps } from '../templates/studio/components/pricing/pricing-tiers'\nexport type { CTAButton, CTAProps } from '../templates/studio/components/cta/cta'\nexport type { NavLink, NavigationProps } from '../templates/studio/components/navigation/navigation'\nexport type { SocialLink, QuickLink, FooterProps } from '../templates/studio/components/footer/footer'\n\n// Import types for the annotate-and-cast assertions below.\nimport type { HeroProps } from '../templates/studio/components/hero/hero'\nimport type { FAQItem, FAQProps } from '../templates/studio/components/faq/faq'\nimport type { FeatureItem, Feature, FeaturesProps } from '../templates/studio/components/features/features'\nimport type { PricingFeature, PricingProps } from '../templates/studio/components/pricing/pricing'\nimport type { PricingTierFeature, PricingTier, PricingTiersProps } from '../templates/studio/components/pricing/pricing-tiers'\nimport type { CTAButton, CTAProps } from '../templates/studio/components/cta/cta'\nimport type { NavLink, NavigationProps } from '../templates/studio/components/navigation/navigation'\nimport type { SocialLink, QuickLink, FooterProps } from '../templates/studio/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 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 language: z.string().optional(),\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 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// 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', 'accent']).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":[]}
|
package/dist/view/index.d.ts
CHANGED
|
@@ -11,7 +11,6 @@ type NamedAgentFaqItem = {
|
|
|
11
11
|
type NamedAgentHero = {
|
|
12
12
|
badgeEmoji?: string;
|
|
13
13
|
badgeText?: string;
|
|
14
|
-
badgeHref?: string;
|
|
15
14
|
heading: string;
|
|
16
15
|
description: string;
|
|
17
16
|
ctaText: string;
|
|
@@ -68,7 +67,6 @@ type NamedAgentPricing = {
|
|
|
68
67
|
subheading?: string;
|
|
69
68
|
price: string;
|
|
70
69
|
priceUnit: string;
|
|
71
|
-
trialText?: string;
|
|
72
70
|
ctaText: string;
|
|
73
71
|
ctaHref: string;
|
|
74
72
|
featuresHeading?: string;
|
package/dist/view/index.js
CHANGED
|
@@ -172,7 +172,6 @@ import { jsx as jsx4, jsxs } from "react/jsx-runtime";
|
|
|
172
172
|
function Hero({
|
|
173
173
|
badgeEmoji = "",
|
|
174
174
|
badgeText = "Meet Priya",
|
|
175
|
-
badgeHref = "#",
|
|
176
175
|
heading = "Your AI Product Manager for GitHub",
|
|
177
176
|
description = "Priya triages issues, plans sprints, and grooms your backlog automatically. You focus on building.",
|
|
178
177
|
ctaText = "Get Started",
|
|
@@ -197,19 +196,10 @@ function Hero({
|
|
|
197
196
|
return /* @__PURE__ */ jsx4("section", { className: cn("relative py-12 md:py-16 px-6 lg:px-12 bg-background", className), children: /* @__PURE__ */ jsxs("div", { className: "max-w-7xl mx-auto p-0 sm:p-16 rounded-none sm:rounded-3xl md:[background:linear-gradient(180deg,var(--card)_0%,transparent_83.55%)]", children: [
|
|
198
197
|
/* @__PURE__ */ jsxs("div", { className: cn("grid gap-8 lg:gap-16 items-start mb-16 lg:mb-20", hasHeroImage && "lg:grid-cols-2"), children: [
|
|
199
198
|
/* @__PURE__ */ jsxs("div", { className: cn("space-y-6 lg:pt-8", !hasHeroImage && "mx-auto max-w-3xl text-center"), children: [
|
|
200
|
-
/* @__PURE__ */ jsx4(ScrollReveal, { direction: "down", delay: 0.1, children: /* @__PURE__ */ jsx4("div", { className: "inline-block", children: /* @__PURE__ */ jsxs(
|
|
201
|
-
"
|
|
202
|
-
{
|
|
203
|
-
|
|
204
|
-
target: "_blank",
|
|
205
|
-
rel: "noopener noreferrer",
|
|
206
|
-
className: "inline-flex items-center gap-2.5 px-4 py-2 rounded-full transition-colors border border-border bg-card",
|
|
207
|
-
children: [
|
|
208
|
-
/* @__PURE__ */ jsx4("span", { className: "text-base", children: badgeEmoji }),
|
|
209
|
-
/* @__PURE__ */ jsx4("p", { className: "font-normal text-sm tracking-wide leading-snug text-foreground uppercase", children: badgeText })
|
|
210
|
-
]
|
|
211
|
-
}
|
|
212
|
-
) }) }),
|
|
199
|
+
/* @__PURE__ */ jsx4(ScrollReveal, { direction: "down", delay: 0.1, children: /* @__PURE__ */ jsx4("div", { className: "inline-block", children: /* @__PURE__ */ jsxs("div", { className: "inline-flex items-center gap-2.5 px-4 py-2 rounded-full border border-border bg-card", children: [
|
|
200
|
+
/* @__PURE__ */ jsx4("span", { className: "text-base", children: badgeEmoji }),
|
|
201
|
+
/* @__PURE__ */ jsx4("p", { className: "font-normal text-sm tracking-wide leading-snug text-foreground uppercase", children: badgeText })
|
|
202
|
+
] }) }) }),
|
|
213
203
|
/* @__PURE__ */ jsx4(ScrollReveal, { direction: "up", delay: 0.2, children: /* @__PURE__ */ jsx4("h1", { className: "font-halant font-normal text-[clamp(56px,6vw,72px)] leading-tight tracking-tight text-foreground", children: heading }) }),
|
|
214
204
|
/* @__PURE__ */ jsx4(ScrollReveal, { direction: "up", delay: 0.3, children: /* @__PURE__ */ jsx4("p", { className: cn("text-lg leading-relaxed max-w-lg", !hasHeroImage && "mx-auto"), children: description }) }),
|
|
215
205
|
/* @__PURE__ */ jsx4(ScrollReveal, { direction: "up", delay: 0.4, trigger: "mount", children: /* @__PURE__ */ jsx4("div", { className: cn("flex flex-col sm:flex-row gap-3 pt-4", !hasHeroImage && "sm:justify-center"), children: /* @__PURE__ */ jsx4(Button, { asChild: true, variant: ctaVariant, children: /* @__PURE__ */ jsxs("a", { href: ctaHref, children: [
|
|
@@ -426,7 +416,6 @@ function Pricing({
|
|
|
426
416
|
subheading = "Start automating your product workflow in minutes. No credit card required to get started.",
|
|
427
417
|
price = "$16",
|
|
428
418
|
priceUnit = "/ month",
|
|
429
|
-
trialText = "With a 7-day free trial",
|
|
430
419
|
ctaText = "Get Started",
|
|
431
420
|
ctaHref = "#contact",
|
|
432
421
|
featuresHeading = "What's included",
|
|
@@ -443,10 +432,9 @@ function Pricing({
|
|
|
443
432
|
/* @__PURE__ */ jsx7(ScrollReveal, { direction: "up", delay: 0.2, children: /* @__PURE__ */ jsxs3("div", { className: "bg-card mx-auto flex w-full md:max-w-md lg:max-w-3xl flex-col rounded-3xl border border-border feature-card-shadow p-6 md:p-8 px-6", children: [
|
|
444
433
|
/* @__PURE__ */ jsxs3("div", { className: "text-center", children: [
|
|
445
434
|
/* @__PURE__ */ jsxs3("div", { className: "flex justify-start sm:justify-center items-baseline", children: [
|
|
446
|
-
/* @__PURE__ */ jsx7("span", { className: "text-
|
|
435
|
+
/* @__PURE__ */ jsx7("span", { className: "text-4xl font-semibold text-foreground", children: price }),
|
|
447
436
|
/* @__PURE__ */ jsx7("span", { className: "text-muted-foreground ml-2 text-sm", children: priceUnit })
|
|
448
437
|
] }),
|
|
449
|
-
trialText && /* @__PURE__ */ jsx7("p", { className: "text-left sm:text-center text-muted-foreground mt-3 text-sm", children: trialText }),
|
|
450
438
|
/* @__PURE__ */ jsx7(Button, { asChild: true, variant: "default", className: "mt-5 w-full md:w-64", children: /* @__PURE__ */ jsx7("a", { href: ctaHref, children: ctaText }) })
|
|
451
439
|
] }),
|
|
452
440
|
/* @__PURE__ */ jsxs3("div", { className: "mt-8", children: [
|
|
@@ -824,22 +812,47 @@ function Footer({
|
|
|
824
812
|
] }) });
|
|
825
813
|
}
|
|
826
814
|
|
|
815
|
+
// src/templates/chrome.ts
|
|
816
|
+
var NAMED_FIXED_CHROME = {
|
|
817
|
+
/** Navbar CTA — every template. */
|
|
818
|
+
navCta: "Hire me",
|
|
819
|
+
/** Hero primary button. The hero renders NO secondary button. */
|
|
820
|
+
heroCta: "Get Started",
|
|
821
|
+
/** "How It Works" section (the wire `features` section) title. */
|
|
822
|
+
howItWorksTitle: "How It Works",
|
|
823
|
+
/** Pricing section title — both single-tier and multi-tier variants. */
|
|
824
|
+
pricingTitle: "Simple, transparent pricing",
|
|
825
|
+
/** FAQ section title. */
|
|
826
|
+
faqTitle: "FAQs",
|
|
827
|
+
/** Closing CTA button label. The closing CTA renders exactly ONE button. */
|
|
828
|
+
bottomCta: "Get Started"
|
|
829
|
+
};
|
|
830
|
+
function clampHowItWorks(features) {
|
|
831
|
+
return features.slice(0, 4).map((f) => ({ ...f, items: f.items.slice(0, 3) }));
|
|
832
|
+
}
|
|
833
|
+
function normalizePricingTiers(tiers) {
|
|
834
|
+
return tiers.slice(0, 2).map((tier, i) => ({
|
|
835
|
+
...tier,
|
|
836
|
+
featured: i === 0,
|
|
837
|
+
ctaVariant: i === 0 ? "primary" : "secondary"
|
|
838
|
+
}));
|
|
839
|
+
}
|
|
840
|
+
|
|
827
841
|
// src/templates/studio/view.tsx
|
|
828
842
|
import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
829
843
|
function StudioView({ content, brandName, hostname }) {
|
|
830
844
|
const { hero, features, pricing, faq, cta } = content;
|
|
831
845
|
return /* @__PURE__ */ jsxs9(Fragment2, { children: [
|
|
832
|
-
/* @__PURE__ */ jsx14(Navigation, { logo: brandName }),
|
|
846
|
+
/* @__PURE__ */ jsx14(Navigation, { logo: brandName, ctaText: NAMED_FIXED_CHROME.navCta }),
|
|
833
847
|
/* @__PURE__ */ jsxs9("main", { children: [
|
|
834
848
|
/* @__PURE__ */ jsx14(
|
|
835
849
|
Hero,
|
|
836
850
|
{
|
|
837
851
|
badgeEmoji: hero.badgeEmoji,
|
|
838
852
|
badgeText: hero.badgeText,
|
|
839
|
-
badgeHref: hero.badgeHref,
|
|
840
853
|
heading: hero.heading,
|
|
841
854
|
description: hero.description,
|
|
842
|
-
ctaText:
|
|
855
|
+
ctaText: NAMED_FIXED_CHROME.heroCta,
|
|
843
856
|
ctaHref: hero.ctaHref,
|
|
844
857
|
rightImageSrc: hero.rightImageSrc,
|
|
845
858
|
rightImageAlt: hero.rightImageAlt,
|
|
@@ -851,19 +864,18 @@ function StudioView({ content, brandName, hostname }) {
|
|
|
851
864
|
/* @__PURE__ */ jsx14(
|
|
852
865
|
Features,
|
|
853
866
|
{
|
|
854
|
-
heading:
|
|
867
|
+
heading: NAMED_FIXED_CHROME.howItWorksTitle,
|
|
855
868
|
description: features.description,
|
|
856
|
-
features: features.features
|
|
869
|
+
features: clampHowItWorks(features.features)
|
|
857
870
|
}
|
|
858
871
|
),
|
|
859
872
|
pricing.variant === "single" ? /* @__PURE__ */ jsx14(
|
|
860
873
|
Pricing,
|
|
861
874
|
{
|
|
862
|
-
heading:
|
|
875
|
+
heading: NAMED_FIXED_CHROME.pricingTitle,
|
|
863
876
|
subheading: pricing.subheading,
|
|
864
877
|
price: pricing.price,
|
|
865
878
|
priceUnit: pricing.priceUnit,
|
|
866
|
-
trialText: pricing.trialText,
|
|
867
879
|
ctaText: pricing.ctaText,
|
|
868
880
|
ctaHref: pricing.ctaHref,
|
|
869
881
|
featuresHeading: pricing.featuresHeading,
|
|
@@ -873,14 +885,28 @@ function StudioView({ content, brandName, hostname }) {
|
|
|
873
885
|
) : /* @__PURE__ */ jsx14(
|
|
874
886
|
PricingTiers,
|
|
875
887
|
{
|
|
876
|
-
heading:
|
|
888
|
+
heading: NAMED_FIXED_CHROME.pricingTitle,
|
|
877
889
|
subheading: pricing.subheading,
|
|
878
|
-
tiers: pricing.tiers,
|
|
890
|
+
tiers: normalizePricingTiers(pricing.tiers),
|
|
879
891
|
securityNote: pricing.securityNote
|
|
880
892
|
}
|
|
881
893
|
),
|
|
882
|
-
/* @__PURE__ */ jsx14(FAQ, { heading:
|
|
883
|
-
/* @__PURE__ */ jsx14(
|
|
894
|
+
/* @__PURE__ */ jsx14(FAQ, { heading: NAMED_FIXED_CHROME.faqTitle, faqs: faq.faqs }),
|
|
895
|
+
/* @__PURE__ */ jsx14(
|
|
896
|
+
CTA,
|
|
897
|
+
{
|
|
898
|
+
heading: cta.heading,
|
|
899
|
+
subheading: cta.subheading,
|
|
900
|
+
buttons: [
|
|
901
|
+
{
|
|
902
|
+
text: NAMED_FIXED_CHROME.bottomCta,
|
|
903
|
+
href: cta.buttons[0]?.href ?? "#pricing",
|
|
904
|
+
variant: "primary",
|
|
905
|
+
showArrow: true
|
|
906
|
+
}
|
|
907
|
+
]
|
|
908
|
+
}
|
|
909
|
+
)
|
|
884
910
|
] }),
|
|
885
911
|
/* @__PURE__ */ jsx14(
|
|
886
912
|
Footer,
|
|
@@ -953,7 +979,7 @@ function ExecNavigation({
|
|
|
953
979
|
{
|
|
954
980
|
className: cn(
|
|
955
981
|
"sticky top-0 z-50 w-full bg-(--color-surface) transition-[border-color] duration-200 border-b",
|
|
956
|
-
isScrolled ? "border-(--color-border
|
|
982
|
+
isScrolled ? "border-(--color-border)" : "border-transparent",
|
|
957
983
|
className
|
|
958
984
|
),
|
|
959
985
|
children: /* @__PURE__ */ jsxs10("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 py-4", children: [
|
|
@@ -1018,7 +1044,7 @@ function ExecHero({
|
|
|
1018
1044
|
/* @__PURE__ */ jsxs11("div", { className: "grid md:grid-cols-12 gap-x-6 gap-y-8 pt-10 md:pt-12 pb-14 md:pb-20", children: [
|
|
1019
1045
|
/* @__PURE__ */ jsx17("div", { className: "md:col-span-7", children: /* @__PURE__ */ jsx17(ScrollReveal, { direction: "up", delay: 0.12, trigger: "mount", children: /* @__PURE__ */ jsx17("p", { className: "exec-serif italic text-xl md:text-2xl leading-relaxed text-(--color-accent-fg)/90 max-w-[44ch]", children: description }) }) }),
|
|
1020
1046
|
/* @__PURE__ */ jsx17("div", { className: "md:col-span-4 md:col-start-9 flex md:justify-end md:items-end", children: /* @__PURE__ */ jsx17(ScrollReveal, { direction: "up", delay: 0.22, trigger: "mount", children: /* @__PURE__ */ jsxs11("div", { className: "flex flex-col sm:flex-row gap-3", children: [
|
|
1021
|
-
/* @__PURE__ */ jsx17(ExecButton, { asChild: true, className: "bg-(--color-accent-fg) text-(--color-accent-field) hover:bg-(--color-
|
|
1047
|
+
/* @__PURE__ */ jsx17(ExecButton, { asChild: true, className: "bg-(--color-accent-fg) text-(--color-accent-field) hover:bg-(--color-accent-fg)/90", children: /* @__PURE__ */ jsxs11("a", { href: ctaHref, children: [
|
|
1022
1048
|
ctaText,
|
|
1023
1049
|
/* @__PURE__ */ jsx17(HiArrowRight2, { className: "w-4 h-4" })
|
|
1024
1050
|
] }) }),
|
|
@@ -1048,8 +1074,8 @@ function ExecFeatures({
|
|
|
1048
1074
|
features = [],
|
|
1049
1075
|
className
|
|
1050
1076
|
}) {
|
|
1051
|
-
return /* @__PURE__ */ jsx18("section", { id: "features", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs12("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 py-
|
|
1052
|
-
/* @__PURE__ */ jsx18(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsxs12("div", { className: "grid md:grid-cols-12 gap-6 pb-8 border-b-
|
|
1077
|
+
return /* @__PURE__ */ jsx18("section", { id: "features", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs12("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 py-12 md:py-24", children: [
|
|
1078
|
+
/* @__PURE__ */ jsx18(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsxs12("div", { className: "grid md:grid-cols-12 gap-6 pb-8 border-b-2 border-(--color-fg) dark:border-(--color-fg)/50", children: [
|
|
1053
1079
|
/* @__PURE__ */ jsx18("h2", { className: "md:col-span-7 font-halant text-[clamp(44px,6vw,84px)] text-(--color-fg)", children: heading }),
|
|
1054
1080
|
description && /* @__PURE__ */ jsx18("p", { className: "md:col-span-4 md:col-start-9 text-base leading-relaxed text-(--color-fg-soft) max-w-[58ch] self-end", children: description })
|
|
1055
1081
|
] }) }),
|
|
@@ -1082,7 +1108,6 @@ function ExecPricing({
|
|
|
1082
1108
|
subheading,
|
|
1083
1109
|
price = "$16",
|
|
1084
1110
|
priceUnit = "/ month",
|
|
1085
|
-
trialText,
|
|
1086
1111
|
ctaText = "Get Started",
|
|
1087
1112
|
ctaHref = "#contact",
|
|
1088
1113
|
featuresHeading = "What's included",
|
|
@@ -1090,8 +1115,8 @@ function ExecPricing({
|
|
|
1090
1115
|
securityNote,
|
|
1091
1116
|
className
|
|
1092
1117
|
}) {
|
|
1093
|
-
return /* @__PURE__ */ jsx19("section", { id: "pricing", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs13("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 py-
|
|
1094
|
-
/* @__PURE__ */ jsxs13("div", { className: "grid md:grid-cols-12 gap-6 pb-8 border-b-
|
|
1118
|
+
return /* @__PURE__ */ jsx19("section", { id: "pricing", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs13("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 py-12 md:py-24", children: [
|
|
1119
|
+
/* @__PURE__ */ jsxs13("div", { className: "grid md:grid-cols-12 gap-6 pb-8 border-b-2 border-(--color-fg) dark:border-(--color-fg)/50", children: [
|
|
1095
1120
|
/* @__PURE__ */ jsx19("h2", { className: "md:col-span-7 font-halant text-[clamp(44px,6vw,84px)] text-(--color-fg)", children: heading }),
|
|
1096
1121
|
subheading && /* @__PURE__ */ jsx19("p", { className: "md:col-span-6 md:col-start-7 text-base leading-relaxed text-(--color-fg-soft) max-w-[58ch] self-end", children: subheading })
|
|
1097
1122
|
] }),
|
|
@@ -1101,7 +1126,6 @@ function ExecPricing({
|
|
|
1101
1126
|
/* @__PURE__ */ jsx19("span", { className: "exec-figure font-halant text-6xl text-(--color-accent-strong)", children: price }),
|
|
1102
1127
|
/* @__PURE__ */ jsx19("span", { className: "text-sm text-(--color-fg-muted)", children: priceUnit })
|
|
1103
1128
|
] }),
|
|
1104
|
-
trialText && /* @__PURE__ */ jsx19("p", { className: "mt-3 text-sm text-(--color-fg-soft)", children: trialText }),
|
|
1105
1129
|
/* @__PURE__ */ jsx19("div", { className: "mt-8", children: /* @__PURE__ */ jsx19(ExecButton, { asChild: true, children: /* @__PURE__ */ jsx19("a", { href: ctaHref, children: ctaText }) }) })
|
|
1106
1130
|
] }),
|
|
1107
1131
|
/* @__PURE__ */ jsxs13("div", { className: "md:col-span-6 md:col-start-7", children: [
|
|
@@ -1132,8 +1156,8 @@ function ExecPricingTiers({
|
|
|
1132
1156
|
securityNote,
|
|
1133
1157
|
className
|
|
1134
1158
|
}) {
|
|
1135
|
-
return /* @__PURE__ */ jsx20("section", { id: "pricing", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs14("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 py-
|
|
1136
|
-
/* @__PURE__ */ jsxs14("div", { className: "grid md:grid-cols-12 gap-6 pb-8 border-b-
|
|
1159
|
+
return /* @__PURE__ */ jsx20("section", { id: "pricing", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs14("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 py-12 md:py-24", children: [
|
|
1160
|
+
/* @__PURE__ */ jsxs14("div", { className: "grid md:grid-cols-12 gap-6 pb-8 border-b-2 border-(--color-fg) dark:border-(--color-fg)/50", children: [
|
|
1137
1161
|
/* @__PURE__ */ jsx20("h2", { className: "md:col-span-7 font-halant text-[clamp(44px,6vw,84px)] text-(--color-fg)", children: heading }),
|
|
1138
1162
|
subheading && /* @__PURE__ */ jsx20("p", { className: "md:col-span-4 md:col-start-9 text-base leading-relaxed text-(--color-fg-soft) max-w-[58ch] self-end", children: subheading })
|
|
1139
1163
|
] }),
|
|
@@ -1184,7 +1208,7 @@ function ExecPricingTiers({
|
|
|
1184
1208
|
),
|
|
1185
1209
|
/* @__PURE__ */ jsx20("span", { className: cn("text-sm", featured ? "text-(--color-accent-fg)/60" : "text-(--color-fg-muted)"), children: tier.priceUnit })
|
|
1186
1210
|
] }),
|
|
1187
|
-
/* @__PURE__ */ jsx20("div", { className: "mt-9", children: featured ? /* @__PURE__ */ jsx20(ExecButton, { asChild: true, className: "bg-(--color-accent-fg) text-(--color-accent-field) hover:bg-(--color-
|
|
1211
|
+
/* @__PURE__ */ jsx20("div", { className: "mt-9", children: featured ? /* @__PURE__ */ jsx20(ExecButton, { asChild: true, className: "bg-(--color-accent-fg) text-(--color-accent-field) hover:bg-(--color-accent-fg)/90 w-full sm:w-auto", children: /* @__PURE__ */ jsx20("a", { href: tier.ctaHref || "#", children: tier.ctaText }) }) : /* @__PURE__ */ jsx20(ExecButton, { asChild: true, variant: "secondary", className: "w-full sm:w-auto", children: /* @__PURE__ */ jsx20("a", { href: tier.ctaHref || "#", children: tier.ctaText }) }) }),
|
|
1188
1212
|
/* @__PURE__ */ jsx20("ul", { className: "mt-10 flex-1", children: tier.features.map((feature, featureIndex) => /* @__PURE__ */ jsx20(
|
|
1189
1213
|
"li",
|
|
1190
1214
|
{
|
|
@@ -1212,8 +1236,8 @@ function ExecPricingTiers({
|
|
|
1212
1236
|
import { Accordion as Accordion2, AccordionContent as AccordionContent2, AccordionItem as AccordionItem2, AccordionTrigger as AccordionTrigger2 } from "@mdxui/primitives";
|
|
1213
1237
|
import { jsx as jsx21, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1214
1238
|
function ExecFAQ({ heading = "FAQs", faqs = [], className }) {
|
|
1215
|
-
return /* @__PURE__ */ jsx21("section", { id: "faq", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs15("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 py-
|
|
1216
|
-
/* @__PURE__ */ jsx21("div", { className: "pb-8 border-b-
|
|
1239
|
+
return /* @__PURE__ */ jsx21("section", { id: "faq", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs15("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 py-12 md:py-24", children: [
|
|
1240
|
+
/* @__PURE__ */ jsx21("div", { className: "pb-8 border-b-2 border-(--color-fg) dark:border-(--color-fg)/50", children: /* @__PURE__ */ jsx21("h2", { className: "font-halant text-[clamp(44px,6vw,84px)] text-(--color-fg)", children: heading }) }),
|
|
1217
1241
|
/* @__PURE__ */ jsx21(Accordion2, { type: "single", collapsible: true, children: faqs.map((faq, index) => /* @__PURE__ */ jsxs15(
|
|
1218
1242
|
AccordionItem2,
|
|
1219
1243
|
{
|
|
@@ -1221,10 +1245,10 @@ function ExecFAQ({ heading = "FAQs", faqs = [], className }) {
|
|
|
1221
1245
|
className: "border-b border-(--color-border) rounded-none",
|
|
1222
1246
|
children: [
|
|
1223
1247
|
/* @__PURE__ */ jsx21(AccordionTrigger2, { className: "hover:no-underline py-6 text-base font-medium text-(--color-fg) gap-6", children: /* @__PURE__ */ jsxs15("span", { className: "flex items-baseline gap-5 text-left", children: [
|
|
1224
|
-
/* @__PURE__ */ jsx21("span", { className: "exec-figure text-xs text-(--color-fg-muted) shrink-0", "aria-hidden": "true", children: String(index + 1).padStart(2, "0") }),
|
|
1248
|
+
/* @__PURE__ */ jsx21("span", { className: "exec-figure hidden text-xs text-(--color-fg-muted) shrink-0 md:inline", "aria-hidden": "true", children: String(index + 1).padStart(2, "0") }),
|
|
1225
1249
|
faq.question
|
|
1226
1250
|
] }) }),
|
|
1227
|
-
/* @__PURE__ */ jsx21(AccordionContent2, { className: "pb-6 pl-
|
|
1251
|
+
/* @__PURE__ */ jsx21(AccordionContent2, { className: "pb-6 pl-0 text-sm leading-relaxed text-(--color-fg-soft) max-w-[65ch] md:pl-10", children: faq.answer })
|
|
1228
1252
|
]
|
|
1229
1253
|
},
|
|
1230
1254
|
index
|
|
@@ -1241,7 +1265,7 @@ function ExecCTA({
|
|
|
1241
1265
|
buttons = [{ text: "Get Started", href: "#pricing", variant: "primary", showArrow: true }],
|
|
1242
1266
|
className
|
|
1243
1267
|
}) {
|
|
1244
|
-
return /* @__PURE__ */ jsx22("section", { className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsx22("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 pb-
|
|
1268
|
+
return /* @__PURE__ */ jsx22("section", { className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsx22("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 pb-12 md:pb-24", children: /* @__PURE__ */ jsx22("div", { className: "exec-double-rule pt-10 md:pt-12", children: /* @__PURE__ */ jsx22(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx22("div", { className: "rounded-[2px] bg-(--color-fg) px-8 py-14 md:px-14 md:py-20", children: /* @__PURE__ */ jsxs16("div", { className: "grid md:grid-cols-12 gap-x-6 gap-y-10 items-end", children: [
|
|
1245
1269
|
/* @__PURE__ */ jsxs16("div", { className: "md:col-span-8", children: [
|
|
1246
1270
|
/* @__PURE__ */ jsx22("h2", { className: "font-halant text-[clamp(44px,6vw,92px)] text-(--color-surface) max-w-[16ch]", children: heading }),
|
|
1247
1271
|
subheading && /* @__PURE__ */ jsx22("p", { className: "exec-serif italic mt-5 text-lg md:text-xl text-(--color-surface)/70", children: subheading })
|
|
@@ -1287,8 +1311,8 @@ function ExecFooter({
|
|
|
1287
1311
|
className
|
|
1288
1312
|
}) {
|
|
1289
1313
|
return /* @__PURE__ */ jsx23("footer", { className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsx23("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 pb-12", children: /* @__PURE__ */ jsxs17("div", { className: "exec-double-rule pt-10", children: [
|
|
1290
|
-
/* @__PURE__ */ jsxs17("div", { className: "grid md:grid-cols-12 gap-x-6 gap-y-10", children: [
|
|
1291
|
-
/* @__PURE__ */ jsxs17("div", { className: "md:col-span-6", children: [
|
|
1314
|
+
/* @__PURE__ */ jsxs17("div", { className: "grid grid-cols-2 md:grid-cols-12 gap-x-6 gap-y-10", children: [
|
|
1315
|
+
/* @__PURE__ */ jsxs17("div", { className: "col-span-2 md:col-span-6", children: [
|
|
1292
1316
|
/* @__PURE__ */ jsx23(Link4, { href: "/", className: "inline-block", children: /* @__PURE__ */ jsx23("span", { className: "exec-serif italic text-4xl md:text-5xl text-(--color-fg)", children: logo }) }),
|
|
1293
1317
|
/* @__PURE__ */ jsxs17("div", { className: "mt-4 flex items-baseline gap-3 border-t border-(--color-border) pt-3 max-w-[44ch]", children: [
|
|
1294
1318
|
/* @__PURE__ */ jsx23("span", { className: "inline-block size-[7px] shrink-0 translate-y-[-1px] bg-(--color-accent-strong)", "aria-hidden": "true" }),
|
|
@@ -1322,17 +1346,15 @@ import { Fragment as Fragment3, jsx as jsx24, jsxs as jsxs18 } from "react/jsx-r
|
|
|
1322
1346
|
function ExecutiveView({ content, brandName, hostname }) {
|
|
1323
1347
|
const { hero, features, pricing, faq, cta } = content;
|
|
1324
1348
|
return /* @__PURE__ */ jsxs18(Fragment3, { children: [
|
|
1325
|
-
/* @__PURE__ */ jsx24(ExecNavigation, { logo: brandName }),
|
|
1349
|
+
/* @__PURE__ */ jsx24(ExecNavigation, { logo: brandName, ctaText: NAMED_FIXED_CHROME.navCta }),
|
|
1326
1350
|
/* @__PURE__ */ jsxs18("main", { children: [
|
|
1327
1351
|
/* @__PURE__ */ jsx24(
|
|
1328
1352
|
ExecHero,
|
|
1329
1353
|
{
|
|
1330
1354
|
heading: hero.heading,
|
|
1331
1355
|
description: hero.description,
|
|
1332
|
-
ctaText:
|
|
1356
|
+
ctaText: NAMED_FIXED_CHROME.heroCta,
|
|
1333
1357
|
ctaHref: hero.ctaHref,
|
|
1334
|
-
secondaryCtaText: hero.secondaryCtaText,
|
|
1335
|
-
secondaryCtaHref: hero.secondaryCtaHref,
|
|
1336
1358
|
marqueeTitle: hero.marqueeTitle,
|
|
1337
1359
|
marqueeImages: hero.marqueeImages
|
|
1338
1360
|
}
|
|
@@ -1340,19 +1362,18 @@ function ExecutiveView({ content, brandName, hostname }) {
|
|
|
1340
1362
|
/* @__PURE__ */ jsx24(
|
|
1341
1363
|
ExecFeatures,
|
|
1342
1364
|
{
|
|
1343
|
-
heading:
|
|
1365
|
+
heading: NAMED_FIXED_CHROME.howItWorksTitle,
|
|
1344
1366
|
description: features.description,
|
|
1345
|
-
features: features.features
|
|
1367
|
+
features: clampHowItWorks(features.features)
|
|
1346
1368
|
}
|
|
1347
1369
|
),
|
|
1348
1370
|
pricing.variant === "single" ? /* @__PURE__ */ jsx24(
|
|
1349
1371
|
ExecPricing,
|
|
1350
1372
|
{
|
|
1351
|
-
heading:
|
|
1373
|
+
heading: NAMED_FIXED_CHROME.pricingTitle,
|
|
1352
1374
|
subheading: pricing.subheading,
|
|
1353
1375
|
price: pricing.price,
|
|
1354
1376
|
priceUnit: pricing.priceUnit,
|
|
1355
|
-
trialText: pricing.trialText,
|
|
1356
1377
|
ctaText: pricing.ctaText,
|
|
1357
1378
|
ctaHref: pricing.ctaHref,
|
|
1358
1379
|
featuresHeading: pricing.featuresHeading,
|
|
@@ -1362,14 +1383,28 @@ function ExecutiveView({ content, brandName, hostname }) {
|
|
|
1362
1383
|
) : /* @__PURE__ */ jsx24(
|
|
1363
1384
|
ExecPricingTiers,
|
|
1364
1385
|
{
|
|
1365
|
-
heading:
|
|
1386
|
+
heading: NAMED_FIXED_CHROME.pricingTitle,
|
|
1366
1387
|
subheading: pricing.subheading,
|
|
1367
|
-
tiers: pricing.tiers,
|
|
1388
|
+
tiers: normalizePricingTiers(pricing.tiers),
|
|
1368
1389
|
securityNote: pricing.securityNote
|
|
1369
1390
|
}
|
|
1370
1391
|
),
|
|
1371
|
-
/* @__PURE__ */ jsx24(ExecFAQ, { heading:
|
|
1372
|
-
/* @__PURE__ */ jsx24(
|
|
1392
|
+
/* @__PURE__ */ jsx24(ExecFAQ, { heading: NAMED_FIXED_CHROME.faqTitle, faqs: faq.faqs }),
|
|
1393
|
+
/* @__PURE__ */ jsx24(
|
|
1394
|
+
ExecCTA,
|
|
1395
|
+
{
|
|
1396
|
+
heading: cta.heading,
|
|
1397
|
+
subheading: cta.subheading,
|
|
1398
|
+
buttons: [
|
|
1399
|
+
{
|
|
1400
|
+
text: NAMED_FIXED_CHROME.bottomCta,
|
|
1401
|
+
href: cta.buttons[0]?.href ?? "#pricing",
|
|
1402
|
+
variant: "primary",
|
|
1403
|
+
showArrow: true
|
|
1404
|
+
}
|
|
1405
|
+
]
|
|
1406
|
+
}
|
|
1407
|
+
)
|
|
1373
1408
|
] }),
|
|
1374
1409
|
/* @__PURE__ */ jsx24(
|
|
1375
1410
|
ExecFooter,
|
|
@@ -1467,7 +1502,7 @@ function GalNavigation({
|
|
|
1467
1502
|
{
|
|
1468
1503
|
className: cn(
|
|
1469
1504
|
"sticky top-0 z-50 w-full border-b bg-(--color-surface) transition-[border-color] duration-200",
|
|
1470
|
-
isScrolled ? "border-(--color-border
|
|
1505
|
+
isScrolled ? "border-(--color-border)" : "border-transparent",
|
|
1471
1506
|
className
|
|
1472
1507
|
),
|
|
1473
1508
|
children: /* @__PURE__ */ jsxs20("div", { className: "mx-auto max-w-6xl px-6 py-5 lg:px-10", children: [
|
|
@@ -1584,7 +1619,7 @@ function GalFeatures({
|
|
|
1584
1619
|
features = [],
|
|
1585
1620
|
className
|
|
1586
1621
|
}) {
|
|
1587
|
-
return /* @__PURE__ */ jsx29("section", { id: "features", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs22("div", { className: "mx-auto max-w-6xl px-6 py-
|
|
1622
|
+
return /* @__PURE__ */ jsx29("section", { id: "features", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs22("div", { className: "mx-auto max-w-6xl px-6 py-16 md:py-40 lg:px-10", children: [
|
|
1588
1623
|
/* @__PURE__ */ jsx29(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx29(
|
|
1589
1624
|
GalSectionHead,
|
|
1590
1625
|
{
|
|
@@ -1592,10 +1627,10 @@ function GalFeatures({
|
|
|
1592
1627
|
statement: description
|
|
1593
1628
|
}
|
|
1594
1629
|
) }),
|
|
1595
|
-
/* @__PURE__ */ jsx29("div", { className: "mt-
|
|
1630
|
+
/* @__PURE__ */ jsx29("div", { className: "mt-12 space-y-28 md:mt-36 md:space-y-44", children: features.map((feature, index) => {
|
|
1596
1631
|
const reversed = index % 2 === 1;
|
|
1597
1632
|
const language = feature.language ?? "typescript";
|
|
1598
|
-
return /* @__PURE__ */ jsx29(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsxs22("article", { className: "grid items-center gap-y-
|
|
1633
|
+
return /* @__PURE__ */ jsx29(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsxs22("article", { className: "grid items-center gap-y-6 md:grid-cols-12 md:gap-x-10", children: [
|
|
1599
1634
|
feature.code && /* @__PURE__ */ jsx29("div", { className: cn("md:col-span-7", reversed && "md:order-2"), children: /* @__PURE__ */ jsx29("div", { className: "rounded-[2px] md:border md:border-(--color-vitrine-border) md:bg-(--color-placard) md:p-1.5 md:shadow-(--shadow-lg)", children: /* @__PURE__ */ jsx29(
|
|
1600
1635
|
CodeWindow,
|
|
1601
1636
|
{
|
|
@@ -1644,7 +1679,6 @@ function GalPricing({
|
|
|
1644
1679
|
subheading,
|
|
1645
1680
|
price = "$16",
|
|
1646
1681
|
priceUnit = "/ month",
|
|
1647
|
-
trialText,
|
|
1648
1682
|
ctaText = "Get Started",
|
|
1649
1683
|
ctaHref = "#contact",
|
|
1650
1684
|
featuresHeading = "What's included",
|
|
@@ -1652,15 +1686,14 @@ function GalPricing({
|
|
|
1652
1686
|
securityNote,
|
|
1653
1687
|
className
|
|
1654
1688
|
}) {
|
|
1655
|
-
return /* @__PURE__ */ jsx30("section", { id: "pricing", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs23("div", { className: "mx-auto max-w-6xl px-6 py-
|
|
1689
|
+
return /* @__PURE__ */ jsx30("section", { id: "pricing", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs23("div", { className: "mx-auto max-w-6xl px-6 py-16 md:py-40 lg:px-10", children: [
|
|
1656
1690
|
/* @__PURE__ */ jsx30(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx30(GalSectionHead, { heading, statement: subheading }) }),
|
|
1657
|
-
/* @__PURE__ */ jsx30(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx30("div", { className: "mt-
|
|
1691
|
+
/* @__PURE__ */ jsx30(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx30("div", { className: "mt-12 rounded-[4px] border border-(--color-placard-border) bg-(--color-placard) p-8 text-(--color-placard-fg) shadow-(--shadow-md) md:mt-28 md:p-12", children: /* @__PURE__ */ jsxs23("div", { className: "grid gap-y-10 md:grid-cols-12 md:gap-x-10", children: [
|
|
1658
1692
|
/* @__PURE__ */ jsxs23("div", { className: "md:col-span-5", children: [
|
|
1659
1693
|
/* @__PURE__ */ jsxs23("div", { className: "flex items-baseline gap-2.5", children: [
|
|
1660
1694
|
/* @__PURE__ */ jsx30("span", { className: "gal-display text-7xl font-[560] tracking-[-0.02em] text-(--color-placard-fg) md:text-8xl", children: price }),
|
|
1661
1695
|
/* @__PURE__ */ jsx30("span", { className: "text-sm text-(--color-placard-muted)", children: priceUnit })
|
|
1662
1696
|
] }),
|
|
1663
|
-
trialText && /* @__PURE__ */ jsx30("p", { className: "mt-4 text-sm text-(--color-placard-soft)", children: trialText }),
|
|
1664
1697
|
/* @__PURE__ */ jsx30("div", { className: "mt-9", children: /* @__PURE__ */ jsx30(GalButton, { asChild: true, children: /* @__PURE__ */ jsx30("a", { href: ctaHref, children: ctaText }) }) })
|
|
1665
1698
|
] }),
|
|
1666
1699
|
/* @__PURE__ */ jsxs23("div", { className: "md:col-span-6 md:col-start-7", children: [
|
|
@@ -1688,7 +1721,7 @@ function GalPricingTiers({
|
|
|
1688
1721
|
securityNote,
|
|
1689
1722
|
className
|
|
1690
1723
|
}) {
|
|
1691
|
-
return /* @__PURE__ */ jsx31("section", { id: "pricing", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs24("div", { className: "mx-auto max-w-6xl px-6 py-
|
|
1724
|
+
return /* @__PURE__ */ jsx31("section", { id: "pricing", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs24("div", { className: "mx-auto max-w-6xl px-6 py-16 md:py-40 lg:px-10", children: [
|
|
1692
1725
|
/* @__PURE__ */ jsx31(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx31(
|
|
1693
1726
|
GalSectionHead,
|
|
1694
1727
|
{
|
|
@@ -1788,7 +1821,7 @@ import {
|
|
|
1788
1821
|
} from "@mdxui/primitives";
|
|
1789
1822
|
import { jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
1790
1823
|
function GalFAQ({ heading = "FAQs", faqs = [], className }) {
|
|
1791
|
-
return /* @__PURE__ */ jsx32("section", { id: "faq", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs25("div", { className: "mx-auto max-w-6xl px-6 py-
|
|
1824
|
+
return /* @__PURE__ */ jsx32("section", { id: "faq", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs25("div", { className: "mx-auto max-w-6xl px-6 py-16 md:py-40 lg:px-10", children: [
|
|
1792
1825
|
/* @__PURE__ */ jsx32(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx32(
|
|
1793
1826
|
GalSectionHead,
|
|
1794
1827
|
{
|
|
@@ -1802,13 +1835,13 @@ function GalFAQ({ heading = "FAQs", faqs = [], className }) {
|
|
|
1802
1835
|
className: "rounded-none border-b border-(--color-border)",
|
|
1803
1836
|
children: [
|
|
1804
1837
|
/* @__PURE__ */ jsx32(AccordionTrigger3, { className: "gap-6 py-7 text-base font-medium text-(--color-fg) hover:no-underline", children: /* @__PURE__ */ jsxs25("span", { className: "flex items-baseline gap-6 text-left", children: [
|
|
1805
|
-
/* @__PURE__ */ jsxs25("span", { className: "gal-no shrink-0 text-sm text-(--color-accent-strong)", "aria-hidden": "true", children: [
|
|
1838
|
+
/* @__PURE__ */ jsxs25("span", { className: "gal-no hidden shrink-0 text-sm text-(--color-accent-strong) md:inline", "aria-hidden": "true", children: [
|
|
1806
1839
|
"No. ",
|
|
1807
1840
|
index + 1
|
|
1808
1841
|
] }),
|
|
1809
1842
|
faq.question
|
|
1810
1843
|
] }) }),
|
|
1811
|
-
/* @__PURE__ */ jsx32(AccordionContent3, { className: "max-w-[62ch] pb-8 pl-
|
|
1844
|
+
/* @__PURE__ */ jsx32(AccordionContent3, { className: "max-w-[62ch] pb-8 pl-0 text-sm leading-relaxed text-(--color-fg-soft) md:pl-18", children: faq.answer })
|
|
1812
1845
|
]
|
|
1813
1846
|
},
|
|
1814
1847
|
index
|
|
@@ -1826,7 +1859,7 @@ function GalCTA({
|
|
|
1826
1859
|
hostname,
|
|
1827
1860
|
className
|
|
1828
1861
|
}) {
|
|
1829
|
-
return /* @__PURE__ */ jsx33("section", { className: cn("bg-(--color-accent-field) text-(--color-accent-fg)", className), children: /* @__PURE__ */ jsx33("div", { className: "mx-auto max-w-6xl px-6 py-
|
|
1862
|
+
return /* @__PURE__ */ jsx33("section", { className: cn("bg-(--color-accent-field) text-(--color-accent-fg)", className), children: /* @__PURE__ */ jsx33("div", { className: "mx-auto max-w-6xl px-6 py-16 md:py-36 lg:px-10", children: /* @__PURE__ */ jsxs26(ScrollReveal, { direction: "up", children: [
|
|
1830
1863
|
hostname && /* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-3", children: [
|
|
1831
1864
|
/* @__PURE__ */ jsx33(GalDiamond, { className: "bg-(--color-accent-fg)" }),
|
|
1832
1865
|
/* @__PURE__ */ jsx33("span", { className: "gal-label text-(--color-accent-fg)/70", children: hostname })
|
|
@@ -1912,7 +1945,7 @@ import { Fragment as Fragment4, jsx as jsx35, jsxs as jsxs28 } from "react/jsx-r
|
|
|
1912
1945
|
function GalleryView({ content, brandName, hostname }) {
|
|
1913
1946
|
const { hero, features, pricing, faq, cta } = content;
|
|
1914
1947
|
return /* @__PURE__ */ jsxs28(Fragment4, { children: [
|
|
1915
|
-
/* @__PURE__ */ jsx35(GalNavigation, { logo: brandName }),
|
|
1948
|
+
/* @__PURE__ */ jsx35(GalNavigation, { logo: brandName, ctaText: NAMED_FIXED_CHROME.navCta }),
|
|
1916
1949
|
/* @__PURE__ */ jsxs28("main", { children: [
|
|
1917
1950
|
/* @__PURE__ */ jsx35(
|
|
1918
1951
|
GalHero,
|
|
@@ -1921,10 +1954,8 @@ function GalleryView({ content, brandName, hostname }) {
|
|
|
1921
1954
|
badgeText: hero.badgeText,
|
|
1922
1955
|
heading: hero.heading,
|
|
1923
1956
|
description: hero.description,
|
|
1924
|
-
ctaText:
|
|
1957
|
+
ctaText: NAMED_FIXED_CHROME.heroCta,
|
|
1925
1958
|
ctaHref: hero.ctaHref,
|
|
1926
|
-
secondaryCtaText: hero.secondaryCtaText,
|
|
1927
|
-
secondaryCtaHref: hero.secondaryCtaHref,
|
|
1928
1959
|
marqueeTitle: hero.marqueeTitle,
|
|
1929
1960
|
marqueeImages: hero.marqueeImages
|
|
1930
1961
|
}
|
|
@@ -1932,19 +1963,18 @@ function GalleryView({ content, brandName, hostname }) {
|
|
|
1932
1963
|
/* @__PURE__ */ jsx35(
|
|
1933
1964
|
GalFeatures,
|
|
1934
1965
|
{
|
|
1935
|
-
heading:
|
|
1966
|
+
heading: NAMED_FIXED_CHROME.howItWorksTitle,
|
|
1936
1967
|
description: features.description,
|
|
1937
|
-
features: features.features
|
|
1968
|
+
features: clampHowItWorks(features.features)
|
|
1938
1969
|
}
|
|
1939
1970
|
),
|
|
1940
1971
|
pricing.variant === "single" ? /* @__PURE__ */ jsx35(
|
|
1941
1972
|
GalPricing,
|
|
1942
1973
|
{
|
|
1943
|
-
heading:
|
|
1974
|
+
heading: NAMED_FIXED_CHROME.pricingTitle,
|
|
1944
1975
|
subheading: pricing.subheading,
|
|
1945
1976
|
price: pricing.price,
|
|
1946
1977
|
priceUnit: pricing.priceUnit,
|
|
1947
|
-
trialText: pricing.trialText,
|
|
1948
1978
|
ctaText: pricing.ctaText,
|
|
1949
1979
|
ctaHref: pricing.ctaHref,
|
|
1950
1980
|
featuresHeading: pricing.featuresHeading,
|
|
@@ -1954,19 +1984,26 @@ function GalleryView({ content, brandName, hostname }) {
|
|
|
1954
1984
|
) : /* @__PURE__ */ jsx35(
|
|
1955
1985
|
GalPricingTiers,
|
|
1956
1986
|
{
|
|
1957
|
-
heading:
|
|
1987
|
+
heading: NAMED_FIXED_CHROME.pricingTitle,
|
|
1958
1988
|
subheading: pricing.subheading,
|
|
1959
|
-
tiers: pricing.tiers,
|
|
1989
|
+
tiers: normalizePricingTiers(pricing.tiers),
|
|
1960
1990
|
securityNote: pricing.securityNote
|
|
1961
1991
|
}
|
|
1962
1992
|
),
|
|
1963
|
-
/* @__PURE__ */ jsx35(GalFAQ, { heading:
|
|
1993
|
+
/* @__PURE__ */ jsx35(GalFAQ, { heading: NAMED_FIXED_CHROME.faqTitle, faqs: faq.faqs }),
|
|
1964
1994
|
/* @__PURE__ */ jsx35(
|
|
1965
1995
|
GalCTA,
|
|
1966
1996
|
{
|
|
1967
1997
|
heading: cta.heading,
|
|
1968
1998
|
subheading: cta.subheading,
|
|
1969
|
-
buttons:
|
|
1999
|
+
buttons: [
|
|
2000
|
+
{
|
|
2001
|
+
text: NAMED_FIXED_CHROME.bottomCta,
|
|
2002
|
+
href: cta.buttons[0]?.href ?? "#pricing",
|
|
2003
|
+
variant: "primary",
|
|
2004
|
+
showArrow: true
|
|
2005
|
+
}
|
|
2006
|
+
],
|
|
1970
2007
|
hostname
|
|
1971
2008
|
}
|
|
1972
2009
|
)
|