{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "saas-landing",
  "type": "registry:block",
  "title": "SaaS landing page",
  "description": "A complete SaaS landing page built from Facade UI sections. You supply one content object.",
  "categories": [
    "template"
  ],
  "registryDependencies": [
    "https://facadeui.dev/r/cta-band.json",
    "https://facadeui.dev/r/faq-accordion.json",
    "https://facadeui.dev/r/feature-grid.json",
    "https://facadeui.dev/r/feature-rows.json",
    "https://facadeui.dev/r/footer.json",
    "https://facadeui.dev/r/hero-split.json",
    "https://facadeui.dev/r/logo-cloud.json",
    "https://facadeui.dev/r/logo-mark.json",
    "https://facadeui.dev/r/nav-top.json",
    "https://facadeui.dev/r/pricing-tier.json",
    "https://facadeui.dev/r/pricing-tiers.json",
    "https://facadeui.dev/r/stat.json",
    "https://facadeui.dev/r/stats.json",
    "https://facadeui.dev/r/testimonial.json",
    "https://facadeui.dev/r/testimonials-grid.json",
    "https://facadeui.dev/r/types.json"
  ],
  "files": [
    {
      "path": "src/templates/saas-landing.tsx",
      "type": "registry:component",
      "target": "components/templates/saas-landing.tsx",
      "content": "/**\n * SaasLanding — a complete SaaS marketing page, assembled from registry sections.\n *\n * A template is composition, not a new component: every section below is the\n * same one you can install on its own, given content. That is the point — the\n * template shows how the pieces sit together and is meant to be edited, not\n * configured.\n *\n * Everything is content-driven through one `SaasLandingContent` object, so the\n * page can be rendered from a CMS payload without touching this file. Pass\n * `image` and `link` once and they reach every section that needs them.\n *\n * a11y: the heading outline is the template's job, and it is explicit here\n * rather than left to each section's default. The hero is the page's `<h1>`;\n * every other band is an `<h2>` with its own items at `<h3>`. Because the\n * sections take `headingLevel` as a prop, that holds no matter how the page is\n * rearranged.\n *\n * `<main>` is rendered here, and `NavTop`'s `<header>` and `Footer`'s\n * `<footer>` sit outside it, so the landmark structure is correct for the whole\n * document rather than for a fragment of it.\n *\n * Dependencies: react, @/lib/types, @/components/sections/*.\n */\n\nimport type { ReactNode } from \"react\"\n\nimport type { CtaItem, ImageComponent, LinkComponent } from \"@/lib/types\"\nimport { CtaBand } from \"@/components/sections/cta-band\"\nimport { FaqAccordion, type FaqItem } from \"@/components/sections/faq-accordion\"\nimport { FeatureGrid, type FeatureItem } from \"@/components/sections/feature-grid\"\nimport { FeatureRows, type FeatureRowItem } from \"@/components/sections/feature-rows\"\nimport { Footer, type FooterGroup, type FooterLink } from \"@/components/sections/footer\"\nimport { HeroSplit } from \"@/components/sections/hero-split\"\nimport { LogoCloud } from \"@/components/sections/logo-cloud\"\nimport { NavTop, type NavItem } from \"@/components/sections/nav-top\"\nimport { PricingTiers } from \"@/components/sections/pricing-tiers\"\nimport { Stats } from \"@/components/sections/stats\"\nimport { TestimonialsGrid } from \"@/components/sections/testimonials-grid\"\nimport type { LogoItem } from \"@/components/ui/logo-mark\"\nimport type { PricingTierItem } from \"@/components/ui/pricing-tier\"\nimport type { StatItem } from \"@/components/ui/stat\"\nimport type { TestimonialItem } from \"@/components/ui/testimonial\"\n\nexport interface SaasLandingContent {\n  brand: ReactNode\n  nav: NavItem[]\n  navActions?: CtaItem[]\n\n  hero: {\n    eyebrow?: string\n    title: string\n    description: string\n    actions: CtaItem[]\n    note?: ReactNode\n    media?: ReactNode\n  }\n\n  logos?: { title?: string; items: LogoItem[] }\n  stats?: { title?: string; eyebrow?: string; items: StatItem[] }\n\n  features: {\n    eyebrow?: string\n    title: string\n    description?: string\n    items: FeatureItem[]\n  }\n\n  rows?: {\n    eyebrow?: string\n    title?: string\n    description?: string\n    items: FeatureRowItem[]\n  }\n\n  testimonials?: {\n    eyebrow?: string\n    title: string\n    description?: string\n    items: TestimonialItem[]\n  }\n\n  pricing?: {\n    eyebrow?: string\n    title: string\n    description?: string\n    items: PricingTierItem[]\n    note?: ReactNode\n  }\n\n  faq?: {\n    eyebrow?: string\n    title: string\n    description?: string\n    items: FaqItem[]\n  }\n\n  cta: {\n    eyebrow?: string\n    title: string\n    description?: string\n    actions: CtaItem[]\n    note?: ReactNode\n  }\n\n  footer: {\n    groups?: FooterGroup[]\n    brand?: ReactNode\n    copyright?: ReactNode\n    legal?: FooterLink[]\n  }\n}\n\nexport interface SaasLandingProps {\n  content: SaasLandingContent\n  image?: ImageComponent\n  link?: LinkComponent\n  /** Marks the active nav item. */\n  currentPath?: string\n  /** Shown above the header. Usually a `Banner`. */\n  banner?: ReactNode\n}\n\nexport function SaasLanding({\n  content,\n  image,\n  link,\n  currentPath,\n  banner,\n}: SaasLandingProps) {\n  const { hero, logos, stats, features, rows, testimonials, pricing, faq, cta, footer } =\n    content\n\n  return (\n    <>\n      {banner}\n\n      <NavTop\n        brand={content.brand}\n        items={content.nav}\n        actions={content.navActions}\n        link={link}\n        currentPath={currentPath}\n      />\n\n      <main id=\"main\">\n        {/* The only h1 on the page. */}\n        <HeroSplit\n          eyebrow={hero.eyebrow}\n          title={hero.title}\n          description={hero.description}\n          actions={hero.actions}\n          note={hero.note}\n          media={hero.media}\n          link={link}\n          headingLevel={1}\n          spacing=\"lg\"\n        />\n\n        {logos ? (\n          <LogoCloud\n            title={logos.title}\n            items={logos.items}\n            image={image}\n            link={link}\n            headingLevel={2}\n            spacing=\"sm\"\n          />\n        ) : null}\n\n        <FeatureGrid\n          eyebrow={features.eyebrow}\n          title={features.title}\n          description={features.description}\n          items={features.items}\n          link={link}\n          headingLevel={2}\n          itemHeadingLevel={3}\n          align=\"center\"\n        />\n\n        {rows ? (\n          <FeatureRows\n            eyebrow={rows.eyebrow}\n            title={rows.title}\n            description={rows.description}\n            items={rows.items}\n            link={link}\n            headingLevel={2}\n            itemHeadingLevel={3}\n            align=\"center\"\n          />\n        ) : null}\n\n        {stats ? (\n          <Stats\n            eyebrow={stats.eyebrow}\n            title={stats.title}\n            items={stats.items}\n            headingLevel={2}\n            className=\"border-y\"\n          />\n        ) : null}\n\n        {testimonials ? (\n          <TestimonialsGrid\n            eyebrow={testimonials.eyebrow}\n            title={testimonials.title}\n            description={testimonials.description}\n            items={testimonials.items}\n            image={image}\n            headingLevel={2}\n          />\n        ) : null}\n\n        {pricing ? (\n          <PricingTiers\n            eyebrow={pricing.eyebrow}\n            title={pricing.title}\n            description={pricing.description}\n            items={pricing.items}\n            note={pricing.note}\n            link={link}\n            headingLevel={2}\n            tierHeadingLevel={3}\n          />\n        ) : null}\n\n        {faq ? (\n          <FaqAccordion\n            eyebrow={faq.eyebrow}\n            title={faq.title}\n            description={faq.description}\n            items={faq.items}\n            headingLevel={2}\n            itemHeadingLevel={3}\n            align=\"center\"\n            schemaOrg\n          />\n        ) : null}\n\n        <CtaBand\n          eyebrow={cta.eyebrow}\n          title={cta.title}\n          description={cta.description}\n          actions={cta.actions}\n          note={cta.note}\n          link={link}\n          headingLevel={2}\n          variant=\"primary\"\n        />\n      </main>\n\n      <Footer\n        brand={footer.brand ?? content.brand}\n        groups={footer.groups}\n        copyright={footer.copyright}\n        legal={footer.legal}\n        link={link}\n        headingLevel={2}\n      />\n    </>\n  )\n}\n"
    }
  ],
  "docs": "Import styles/facade-tokens.css in your global stylesheet, after @import \"tailwindcss\". Render the template from a page with your own content object; it sets the page outline (one h1). Docs: https://facadeui.dev/components/saas-landing"
}
