@mdxui/tremor 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +255 -0
- package/dist/dashboard/components/index.d.ts +355 -0
- package/dist/dashboard/components/index.js +549 -0
- package/dist/dashboard/components/index.js.map +1 -0
- package/dist/dashboard/index.d.ts +275 -0
- package/dist/dashboard/index.js +1062 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/database/index.d.ts +334 -0
- package/dist/database/index.js +474 -0
- package/dist/database/index.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +1089 -0
- package/dist/index.js.map +1 -0
- package/dist/insights/components/index.d.ts +362 -0
- package/dist/insights/components/index.js +1397 -0
- package/dist/insights/components/index.js.map +1 -0
- package/dist/insights/index.d.ts +360 -0
- package/dist/insights/index.js +1815 -0
- package/dist/insights/index.js.map +1 -0
- package/dist/overview/components/index.d.ts +86 -0
- package/dist/overview/components/index.js +775 -0
- package/dist/overview/components/index.js.map +1 -0
- package/dist/overview/index.d.ts +301 -0
- package/dist/overview/index.js +1077 -0
- package/dist/overview/index.js.map +1 -0
- package/dist/shared/index.d.ts +296 -0
- package/dist/shared/index.js +395 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/solar/components/index.d.ts +341 -0
- package/dist/solar/components/index.js +831 -0
- package/dist/solar/components/index.js.map +1 -0
- package/dist/solar/index.d.ts +301 -0
- package/dist/solar/index.js +1130 -0
- package/dist/solar/index.js.map +1 -0
- package/package.json +135 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/solar/shared/utils.ts","../../src/solar/components/cta/cta.tsx","../../src/solar/components/features/features.tsx","../../src/solar/components/footer/index.tsx","../../src/solar/components/header/index.tsx","../../src/solar/components/hero/index.tsx","../../src/solar/layouts/landing-page.tsx","../../src/solar/layouts/site.tsx","../../src/solar/index.ts"],"sourcesContent":["import { twMerge } from \"tailwind-merge\";\n\ntype ClassValue = string | number | null | undefined | boolean | ClassValue[];\n\n/**\n * Merge class names with Tailwind CSS class deduplication.\n */\nexport function cx(...args: ClassValue[]): string {\n\treturn twMerge(\n\t\targs\n\t\t\t.flat()\n\t\t\t.filter(\n\t\t\t\t(x): x is string | number =>\n\t\t\t\t\ttypeof x === \"string\" || typeof x === \"number\",\n\t\t\t)\n\t\t\t.join(\" \"),\n\t);\n}\n\n/**\n * Focus ring styles for accessible focus indicators.\n */\nexport const focusRing = [\n\t\"outline outline-offset-2 outline-0 focus-visible:outline-2\",\n\t\"outline-blue-500 dark:outline-blue-500\",\n];\n","\"use client\";\n\nimport type { ComponentType, ReactNode } from \"react\";\nimport { cx, focusRing } from \"../../shared\";\n\n/**\n * Action configuration for CTA buttons\n */\nexport interface CTAActionConfig {\n\thref: string;\n\tonClick?: () => void;\n\ttarget?: \"_blank\" | \"_self\";\n}\n\n/**\n * Link component props for custom routing\n */\nexport interface CTALinkProps {\n\thref: string;\n\tchildren: ReactNode;\n\tclassName?: string;\n}\n\n/**\n * CTA (Call to Action) component props\n */\nexport interface CTAProps {\n\t/** Main title */\n\ttitle: ReactNode;\n\t/** Description text */\n\tdescription?: ReactNode;\n\t/** Primary call-to-action button text */\n\tcallToAction: ReactNode;\n\t/** Secondary call-to-action button text */\n\tsecondaryCallToAction?: ReactNode;\n\t/** Image URL or component */\n\timage?: ReactNode;\n\t/** Image alt text */\n\timageAlt?: string;\n\t/** Action behaviors */\n\tactions?: {\n\t\tprimary?: string | CTAActionConfig;\n\t\tsecondary?: string | CTAActionConfig;\n\t};\n\t/** Custom link component */\n\tLinkComponent?: ComponentType<CTALinkProps>;\n\t/** Additional className */\n\tclassName?: string;\n}\n\nfunction DefaultLink({ href, children, className }: CTALinkProps) {\n\treturn (\n\t\t<a href={href} className={className}>\n\t\t\t{children}\n\t\t</a>\n\t);\n}\n\nfunction resolveAction(\n\taction: string | CTAActionConfig | undefined,\n\tdefaultHref = \"#\",\n): { href: string; onClick?: () => void; target?: string } {\n\tif (!action) return { href: defaultHref };\n\tif (typeof action === \"string\") return { href: action };\n\treturn { href: action.href, onClick: action.onClick, target: action.target };\n}\n\n/**\n * Call to Action section for the Solar template.\n *\n * Based on Tremor's Solar template CallToAction component with mdxui interface.\n * Features:\n * - Two-column layout with content and image\n * - Primary and secondary action buttons\n * - Responsive design\n *\n * @example\n * ```tsx\n * <CTA\n * title=\"Ready to get started?\"\n * description=\"Begin your smart farming journey today.\"\n * callToAction=\"Start now\"\n * secondaryCallToAction=\"Find nearest dealer\"\n * image=\"/images/farm.webp\"\n * actions={{\n * primary: '/signup',\n * secondary: '/dealers',\n * }}\n * />\n * ```\n */\nexport function CTA({\n\ttitle,\n\tdescription,\n\tcallToAction,\n\tsecondaryCallToAction,\n\timage,\n\timageAlt = \"CTA image\",\n\tactions,\n\tLinkComponent = DefaultLink,\n\tclassName,\n}: CTAProps) {\n\tconst primaryAction = resolveAction(actions?.primary, \"#\");\n\tconst secondaryAction = resolveAction(actions?.secondary, \"#\");\n\n\tconst PrimaryButton = primaryAction.onClick ? (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={primaryAction.onClick}\n\t\t\tclassName={cx(\n\t\t\t\t\"inline-flex items-center justify-center rounded-md border-b-[1.5px] border-orange-700 bg-gradient-to-b from-orange-400 to-orange-500 px-4 py-2.5 text-base font-medium text-white shadow-sm transition-all hover:shadow-orange-300\",\n\t\t\t\tfocusRing,\n\t\t\t)}\n\t\t>\n\t\t\t{callToAction}\n\t\t</button>\n\t) : (\n\t\t<LinkComponent\n\t\t\thref={primaryAction.href}\n\t\t\tclassName={cx(\n\t\t\t\t\"inline-flex items-center justify-center rounded-md border-b-[1.5px] border-orange-700 bg-gradient-to-b from-orange-400 to-orange-500 px-4 py-2.5 text-base font-medium text-white shadow-sm transition-all hover:shadow-orange-300\",\n\t\t\t\tfocusRing,\n\t\t\t)}\n\t\t>\n\t\t\t{callToAction}\n\t\t</LinkComponent>\n\t);\n\n\tconst SecondaryButton = secondaryCallToAction ? (\n\t\tsecondaryAction.onClick ? (\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={secondaryAction.onClick}\n\t\t\t\tclassName={cx(\n\t\t\t\t\t\"inline-flex items-center justify-center rounded-md border border-gray-300 bg-white px-4 py-2.5 text-base font-medium text-gray-900 shadow-xs transition-colors hover:bg-gray-50\",\n\t\t\t\t\tfocusRing,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{secondaryCallToAction}\n\t\t\t</button>\n\t\t) : (\n\t\t\t<LinkComponent\n\t\t\t\thref={secondaryAction.href}\n\t\t\t\tclassName={cx(\n\t\t\t\t\t\"inline-flex items-center justify-center rounded-md border border-gray-300 bg-white px-4 py-2.5 text-base font-medium text-gray-900 shadow-xs transition-colors hover:bg-gray-50\",\n\t\t\t\t\tfocusRing,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{secondaryCallToAction}\n\t\t\t</LinkComponent>\n\t\t)\n\t) : null;\n\n\treturn (\n\t\t<section\n\t\t\taria-labelledby=\"cta-title\"\n\t\t\tclassName={cx(\"mx-auto max-w-6xl px-4 xl:px-0\", className)}\n\t\t>\n\t\t\t<div className=\"grid items-center gap-8 sm:grid-cols-6\">\n\t\t\t\t{/* Content */}\n\t\t\t\t<div className=\"sm:col-span-2\">\n\t\t\t\t\t<h2\n\t\t\t\t\t\tid=\"cta-title\"\n\t\t\t\t\t\tclassName=\"scroll-my-60 text-3xl font-semibold tracking-tighter text-balance text-gray-900 md:text-4xl\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</h2>\n\t\t\t\t\t{description && (\n\t\t\t\t\t\t<p className=\"mt-3 mb-8 text-lg text-gray-600\">{description}</p>\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"flex flex-wrap gap-4\">\n\t\t\t\t\t\t{PrimaryButton}\n\t\t\t\t\t\t{SecondaryButton}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Image */}\n\t\t\t\t<div className=\"relative isolate rounded-xl sm:col-span-4 sm:h-full\">\n\t\t\t\t\t{typeof image === \"string\" ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t\talt={imageAlt}\n\t\t\t\t\t\t\t\tsrc={image}\n\t\t\t\t\t\t\t\tclassName=\"absolute inset-0 -z-10 rounded-2xl blur-xl\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\talt={imageAlt}\n\t\t\t\t\t\t\t\tsrc={image}\n\t\t\t\t\t\t\t\tclassName=\"relative z-10 rounded-2xl w-full h-auto\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : image ? (\n\t\t\t\t\t\timage\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"h-64 w-full rounded-2xl bg-gradient-to-br from-orange-100 to-orange-200\" />\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t);\n}\n","\"use client\";\n\nimport type { ComponentType, ReactNode } from \"react\";\nimport { cx } from \"../../shared\";\n\n/**\n * Feature item definition\n */\nexport interface FeatureItem {\n\t/** Feature title */\n\ttitle: string;\n\t/** Feature description */\n\tdescription: string;\n\t/** Feature icon (React node or Lucide icon name) */\n\ticon?: ReactNode;\n}\n\n/**\n * Feature block definition (for alternating layout)\n */\nexport interface FeatureBlock {\n\t/** Block badge/label */\n\tbadge: string;\n\t/** Block title */\n\ttitle: string;\n\t/** Block description */\n\tdescription: string;\n\t/** Block illustration (React node) */\n\tillustration?: ReactNode;\n}\n\n/**\n * Link component props for custom routing\n */\nexport interface FeaturesLinkProps {\n\thref: string;\n\tchildren: ReactNode;\n\tclassName?: string;\n}\n\n/**\n * Features component props\n */\nexport interface FeaturesProps {\n\t/** Section ID for anchor links */\n\tid?: string;\n\t/** Feature blocks for alternating layout */\n\tblocks?: FeatureBlock[];\n\t/** Simple feature items for grid layout */\n\titems?: FeatureItem[];\n\t/** Number of columns for grid layout */\n\tcolumns?: 2 | 3 | 4;\n\t/** Custom link component */\n\tLinkComponent?: ComponentType<FeaturesLinkProps>;\n\t/** Additional className */\n\tclassName?: string;\n\t/** Children for custom content */\n\tchildren?: ReactNode;\n}\n\n/**\n * Features section for the Solar template.\n *\n * Based on Tremor's Solar template Features component with mdxui interface.\n * Supports both alternating block layout and simple grid layout.\n *\n * @example\n * ```tsx\n * <Features\n * id=\"solutions\"\n * blocks={[\n * {\n * badge: 'Smart Farming',\n * title: 'A network of autonomous systems',\n * description: 'Deploy intelligent monitoring...',\n * illustration: <OrbitAnimation />,\n * },\n * ]}\n * />\n * ```\n */\nexport function Features({\n\tid = \"solutions\",\n\tblocks = [],\n\titems = [],\n\tcolumns = 3,\n\tclassName,\n\tchildren,\n}: FeaturesProps) {\n\tconst columnClasses = {\n\t\t2: \"md:grid-cols-2\",\n\t\t3: \"md:grid-cols-3\",\n\t\t4: \"md:grid-cols-4\",\n\t};\n\n\t// If children are provided, render them directly\n\tif (children) {\n\t\treturn (\n\t\t\t<section\n\t\t\t\taria-label=\"Features\"\n\t\t\t\tid={id}\n\t\t\t\tclassName={cx(\n\t\t\t\t\t\"relative mx-auto max-w-6xl scroll-my-24 px-4 xl:px-0\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</section>\n\t\t);\n\t}\n\n\t// Block layout (alternating content and illustration)\n\tif (blocks.length > 0) {\n\t\treturn (\n\t\t\t<section\n\t\t\t\taria-label=\"Features\"\n\t\t\t\tid={id}\n\t\t\t\tclassName={cx(\"relative mx-auto max-w-6xl scroll-my-24\", className)}\n\t\t\t>\n\t\t\t\t{/* Vertical Lines (decorative) */}\n\t\t\t\t<div className=\"pointer-events-none inset-0 select-none\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0 -my-20 w-px\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmaskImage:\n\t\t\t\t\t\t\t\t\"linear-gradient(transparent, white 5rem, white calc(100% - 5rem), transparent)\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg className=\"h-full w-full\" preserveAspectRatio=\"none\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t<line\n\t\t\t\t\t\t\t\tx1=\"0\"\n\t\t\t\t\t\t\t\ty1=\"0\"\n\t\t\t\t\t\t\t\tx2=\"0\"\n\t\t\t\t\t\t\t\ty2=\"100%\"\n\t\t\t\t\t\t\t\tclassName=\"stroke-gray-300\"\n\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\tstrokeDasharray=\"3 3\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0 right-0 -my-20 w-px\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmaskImage:\n\t\t\t\t\t\t\t\t\"linear-gradient(transparent, white 5rem, white calc(100% - 5rem), transparent)\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg className=\"h-full w-full\" preserveAspectRatio=\"none\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t<line\n\t\t\t\t\t\t\t\tx1=\"0\"\n\t\t\t\t\t\t\t\ty1=\"0\"\n\t\t\t\t\t\t\t\tx2=\"0\"\n\t\t\t\t\t\t\t\ty2=\"100%\"\n\t\t\t\t\t\t\t\tclassName=\"stroke-gray-300\"\n\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\tstrokeDasharray=\"3 3\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0 left-1/2 -z-10 -my-20 w-px\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmaskImage:\n\t\t\t\t\t\t\t\t\"linear-gradient(transparent, white 5rem, white calc(100% - 5rem), transparent)\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg className=\"h-full w-full\" preserveAspectRatio=\"none\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t<line\n\t\t\t\t\t\t\t\tx1=\"0\"\n\t\t\t\t\t\t\t\ty1=\"0\"\n\t\t\t\t\t\t\t\tx2=\"0\"\n\t\t\t\t\t\t\t\ty2=\"100%\"\n\t\t\t\t\t\t\t\tclassName=\"stroke-gray-300\"\n\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\tstrokeDasharray=\"3 3\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"grid grid-cols-1 gap-12 md:grid-cols-4 md:gap-0\">\n\t\t\t\t\t{blocks.map((block, index) => (\n\t\t\t\t\t\t<div key={block.badge} className=\"contents\">\n\t\t\t\t\t\t\t{/* Content */}\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\t\t\t\"col-span-2 my-auto px-2\",\n\t\t\t\t\t\t\t\t\tindex % 2 === 1 ? \"md:order-2\" : \"\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<h2 className=\"relative text-lg font-semibold tracking-tight text-orange-500\">\n\t\t\t\t\t\t\t\t\t{block.badge}\n\t\t\t\t\t\t\t\t\t<div className=\"absolute top-1 -left-[8px] h-5 w-[3px] rounded-r-sm bg-orange-500\" />\n\t\t\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t\t\t<p className=\"mt-2 text-3xl font-semibold tracking-tighter text-balance text-gray-900 md:text-4xl\">\n\t\t\t\t\t\t\t\t\t{block.title}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t<p className=\"mt-4 text-balance text-gray-700\">\n\t\t\t\t\t\t\t\t\t{block.description}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t{/* Illustration */}\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\t\t\t\"relative col-span-2 flex items-center justify-center overflow-hidden\",\n\t\t\t\t\t\t\t\t\tindex % 2 === 1 ? \"md:order-1\" : \"\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{block.illustration || (\n\t\t\t\t\t\t\t\t\t<div className=\"h-64 w-full bg-gradient-to-br from-orange-50 to-orange-100 rounded-lg\" />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t);\n\t}\n\n\t// Grid layout (simple feature cards)\n\tif (items.length > 0) {\n\t\treturn (\n\t\t\t<section\n\t\t\t\taria-label=\"Features\"\n\t\t\t\tid={id}\n\t\t\t\tclassName={cx(\"mx-auto max-w-6xl px-4 xl:px-0\", className)}\n\t\t\t>\n\t\t\t\t<div className={cx(\"grid grid-cols-1 gap-8\", columnClasses[columns])}>\n\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={item.title}\n\t\t\t\t\t\t\tclassName=\"rounded-lg border border-gray-200 bg-white p-6 shadow-sm\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{item.icon && (\n\t\t\t\t\t\t\t\t<div className=\"mb-4 inline-flex size-10 items-center justify-center rounded-lg bg-orange-100 text-orange-600\">\n\t\t\t\t\t\t\t\t\t{item.icon}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<h3 className=\"text-lg font-semibold text-gray-900\">\n\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t<p className=\"mt-2 text-sm text-gray-600\">{item.description}</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t);\n\t}\n\n\treturn null;\n}\n","import type { ComponentType, ReactNode } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Footer link configuration\n */\nexport interface FooterLink {\n\t/** Link label */\n\tlabel: string;\n\t/** Link destination */\n\thref: string;\n\t/** Open in new tab */\n\texternal?: boolean;\n}\n\n/**\n * Footer link group configuration\n */\nexport interface FooterLinkGroup {\n\t/** Group title */\n\ttitle: string;\n\t/** Links in this group */\n\tlinks: FooterLink[];\n}\n\n/**\n * Social link configuration\n */\nexport interface SocialLink {\n\t/** Platform name (twitter, github, discord, linkedin, youtube, instagram) */\n\tplatform:\n\t\t| \"twitter\"\n\t\t| \"github\"\n\t\t| \"discord\"\n\t\t| \"linkedin\"\n\t\t| \"youtube\"\n\t\t| \"instagram\"\n\t\t| string;\n\t/** Profile URL */\n\thref: string;\n}\n\n/**\n * Link component props for custom routing\n */\nexport interface FooterLinkProps {\n\thref: string;\n\tchildren: ReactNode;\n\tclassName?: string;\n\ttarget?: string;\n\trel?: string;\n}\n\n/**\n * Footer component props\n */\nexport interface FooterProps {\n\t/** Logo element or string */\n\tlogo?: ReactNode;\n\t/** Simple footer links (flat list) */\n\tlinks: FooterLink[];\n\t/** Grouped footer links (columns) */\n\tlinkGroups?: FooterLinkGroup[];\n\t/** Social media links */\n\tsocial?: SocialLink[];\n\t/** Copyright text */\n\tcopyright?: string;\n\t/** Custom link component (e.g., Next.js Link) */\n\tLinkComponent?: ComponentType<FooterLinkProps>;\n\t/** Additional className */\n\tclassName?: string;\n}\n\nfunction DefaultLink({\n\thref,\n\tchildren,\n\tclassName,\n\ttarget,\n\trel,\n}: FooterLinkProps) {\n\treturn (\n\t\t<a href={href} className={className} target={target} rel={rel}>\n\t\t\t{children}\n\t\t</a>\n\t);\n}\n\n/**\n * Social media icons\n */\nfunction SocialIcon({ platform }: { platform: string }) {\n\tconst iconClass = \"size-5\";\n\n\tswitch (platform) {\n\t\tcase \"twitter\":\n\t\t\treturn (\n\t\t\t\t<svg\n\t\t\t\t\tclassName={iconClass}\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<path d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\" />\n\t\t\t\t</svg>\n\t\t\t);\n\t\tcase \"github\":\n\t\t\treturn (\n\t\t\t\t<svg\n\t\t\t\t\tclassName={iconClass}\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\t\t\tclipRule=\"evenodd\"\n\t\t\t\t\t\td=\"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t);\n\t\tcase \"youtube\":\n\t\t\treturn (\n\t\t\t\t<svg\n\t\t\t\t\tclassName={iconClass}\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\t\t\tclipRule=\"evenodd\"\n\t\t\t\t\t\td=\"M19.812 5.418c.861.23 1.538.907 1.768 1.768C21.998 8.746 22 12 22 12s0 3.255-.418 4.814a2.504 2.504 0 0 1-1.768 1.768c-1.56.419-7.814.419-7.814.419s-6.255 0-7.814-.419a2.505 2.505 0 0 1-1.768-1.768C2 15.255 2 12 2 12s0-3.255.417-4.814a2.507 2.507 0 0 1 1.768-1.768C5.744 5 11.998 5 11.998 5s6.255 0 7.814.418ZM15.194 12 10 15V9l5.194 3Z\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t);\n\t\tcase \"discord\":\n\t\t\treturn (\n\t\t\t\t<svg\n\t\t\t\t\tclassName={iconClass}\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<path d=\"M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028 14.09 14.09 0 0 0 1.226-1.994.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z\" />\n\t\t\t\t</svg>\n\t\t\t);\n\t\tcase \"linkedin\":\n\t\t\treturn (\n\t\t\t\t<svg\n\t\t\t\t\tclassName={iconClass}\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<path d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\" />\n\t\t\t\t</svg>\n\t\t\t);\n\t\tcase \"instagram\":\n\t\t\treturn (\n\t\t\t\t<svg\n\t\t\t\t\tclassName={iconClass}\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\t\t\tclipRule=\"evenodd\"\n\t\t\t\t\t\td=\"M12.315 2c2.43 0 2.784.013 3.808.06 1.064.049 1.791.218 2.427.465a4.902 4.902 0 011.772 1.153 4.902 4.902 0 011.153 1.772c.247.636.416 1.363.465 2.427.048 1.067.06 1.407.06 4.123v.08c0 2.643-.012 2.987-.06 4.043-.049 1.064-.218 1.791-.465 2.427a4.902 4.902 0 01-1.153 1.772 4.902 4.902 0 01-1.772 1.153c-.636.247-1.363.416-2.427.465-1.067.048-1.407.06-4.123.06h-.08c-2.643 0-2.987-.012-4.043-.06-1.064-.049-1.791-.218-2.427-.465a4.902 4.902 0 01-1.772-1.153 4.902 4.902 0 01-1.153-1.772c-.247-.636-.416-1.363-.465-2.427-.047-1.024-.06-1.379-.06-3.808v-.63c0-2.43.013-2.784.06-3.808.049-1.064.218-1.791.465-2.427a4.902 4.902 0 011.153-1.772A4.902 4.902 0 015.45 2.525c.636-.247 1.363-.416 2.427-.465C8.901 2.013 9.256 2 11.685 2h.63zm-.081 1.802h-.468c-2.456 0-2.784.011-3.807.058-.975.045-1.504.207-1.857.344-.467.182-.8.398-1.15.748-.35.35-.566.683-.748 1.15-.137.353-.3.882-.344 1.857-.047 1.023-.058 1.351-.058 3.807v.468c0 2.456.011 2.784.058 3.807.045.975.207 1.504.344 1.857.182.466.399.8.748 1.15.35.35.683.566 1.15.748.353.137.882.3 1.857.344 1.054.048 1.37.058 4.041.058h.08c2.597 0 2.917-.01 3.96-.058.976-.045 1.505-.207 1.858-.344.466-.182.8-.398 1.15-.748.35-.35.566-.683.748-1.15.137-.353.3-.882.344-1.857.048-1.055.058-1.37.058-4.041v-.08c0-2.597-.01-2.917-.058-3.96-.045-.976-.207-1.505-.344-1.858a3.097 3.097 0 00-.748-1.15 3.098 3.098 0 00-1.15-.748c-.353-.137-.882-.3-1.857-.344-1.023-.047-1.351-.058-3.807-.058zM12 6.865a5.135 5.135 0 110 10.27 5.135 5.135 0 010-10.27zm0 1.802a3.333 3.333 0 100 6.666 3.333 3.333 0 000-6.666zm5.338-3.205a1.2 1.2 0 110 2.4 1.2 1.2 0 010-2.4z\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t);\n\t\tdefault:\n\t\t\treturn (\n\t\t\t\t<svg\n\t\t\t\t\tclassName={iconClass}\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z\" />\n\t\t\t\t</svg>\n\t\t\t);\n\t}\n}\n\n/**\n * Footer component for Solar template\n *\n * A responsive footer with logo, link columns, social links, and copyright.\n * Based on the Solar template design.\n */\nexport function Footer({\n\tlogo,\n\tlinks,\n\tlinkGroups = [],\n\tsocial,\n\tcopyright,\n\tLinkComponent = DefaultLink,\n\tclassName,\n}: FooterProps) {\n\tconst currentYear = new Date().getFullYear();\n\tconst defaultCopyright = `${currentYear} All rights reserved.`;\n\n\treturn (\n\t\t<footer\n\t\t\tid=\"footer\"\n\t\t\tclassName={twMerge(\n\t\t\t\t\"relative mx-auto flex max-w-6xl flex-wrap px-4 pt-4 xl:px-0\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{/* Decorative border lines */}\n\t\t\t<div className=\"pointer-events-none inset-0\">\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"absolute inset-y-0 -my-20 w-px\"\n\t\t\t\t\tstyle={{ maskImage: \"linear-gradient(transparent, white 5rem)\" }}\n\t\t\t\t>\n\t\t\t\t\t<svg className=\"h-full w-full\" preserveAspectRatio=\"none\" aria-hidden=\"true\">\n\t\t\t\t\t\t<line\n\t\t\t\t\t\t\tx1=\"0\"\n\t\t\t\t\t\t\ty1=\"0\"\n\t\t\t\t\t\t\tx2=\"0\"\n\t\t\t\t\t\t\ty2=\"100%\"\n\t\t\t\t\t\t\tclassName=\"stroke-gray-300\"\n\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\tstrokeDasharray=\"3 3\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"absolute inset-y-0 right-0 -my-20 w-px\"\n\t\t\t\t\tstyle={{ maskImage: \"linear-gradient(transparent, white 5rem)\" }}\n\t\t\t\t>\n\t\t\t\t\t<svg className=\"h-full w-full\" preserveAspectRatio=\"none\" aria-hidden=\"true\">\n\t\t\t\t\t\t<line\n\t\t\t\t\t\t\tx1=\"0\"\n\t\t\t\t\t\t\ty1=\"0\"\n\t\t\t\t\t\t\tx2=\"0\"\n\t\t\t\t\t\t\ty2=\"100%\"\n\t\t\t\t\t\t\tclassName=\"stroke-gray-300\"\n\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\tstrokeDasharray=\"3 3\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* Diagonal pattern separator */}\n\t\t\t<svg className=\"mb-10 h-20 w-full border-y border-dashed border-gray-300 stroke-gray-300\" aria-hidden=\"true\">\n\t\t\t\t<defs>\n\t\t\t\t\t<pattern\n\t\t\t\t\t\tid=\"diagonal-footer-pattern\"\n\t\t\t\t\t\tpatternUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\twidth=\"64\"\n\t\t\t\t\t\theight=\"64\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{Array.from({ length: 17 }, (_, i) => {\n\t\t\t\t\t\t\tconst offset = i * 8;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tkey={i.toString()}\n\t\t\t\t\t\t\t\t\td={`M${-106 + offset} 110L${22 + offset} -18`}\n\t\t\t\t\t\t\t\t\tstrokeWidth=\"1\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</pattern>\n\t\t\t\t</defs>\n\t\t\t\t<rect\n\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\theight=\"100%\"\n\t\t\t\t\tfill=\"url(#diagonal-footer-pattern)\"\n\t\t\t\t/>\n\t\t\t</svg>\n\n\t\t\t{/* Logo and social section */}\n\t\t\t<div className=\"mr-auto flex w-full justify-between lg:w-fit lg:flex-col\">\n\t\t\t\t{logo && (\n\t\t\t\t\t<LinkComponent\n\t\t\t\t\t\thref=\"/\"\n\t\t\t\t\t\tclassName=\"flex items-center font-medium text-gray-700 select-none sm:text-sm\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{typeof logo === \"string\" ? (\n\t\t\t\t\t\t\t<span className=\"ml-2 text-xl font-semibold\">{logo}</span>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tlogo\n\t\t\t\t\t\t)}\n\t\t\t\t\t</LinkComponent>\n\t\t\t\t)}\n\n\t\t\t\t<div>\n\t\t\t\t\t{social && social.length > 0 && (\n\t\t\t\t\t\t<div className=\"mt-4 flex items-center\">\n\t\t\t\t\t\t\t{social.map((item) => (\n\t\t\t\t\t\t\t\t<LinkComponent\n\t\t\t\t\t\t\t\t\tkey={item.platform}\n\t\t\t\t\t\t\t\t\thref={item.href}\n\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\tclassName=\"rounded-sm p-2 text-gray-700 transition-colors duration-200 hover:bg-gray-200 hover:text-gray-900\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<SocialIcon platform={item.platform} />\n\t\t\t\t\t\t\t\t</LinkComponent>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"ml-2 hidden text-sm text-gray-700 lg:inline\">\n\t\t\t\t\t\t{copyright || defaultCopyright}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* Link groups */}\n\t\t\t{linkGroups.map((group) => (\n\t\t\t\t<div key={group.title} className=\"mt-10 min-w-44 pl-2 lg:mt-0 lg:pl-0\">\n\t\t\t\t\t<h3 className=\"mb-4 font-medium text-gray-900 sm:text-sm\">\n\t\t\t\t\t\t{group.title}\n\t\t\t\t\t</h3>\n\t\t\t\t\t<ul className=\"space-y-4\">\n\t\t\t\t\t\t{group.links.map((link) => (\n\t\t\t\t\t\t\t<li key={link.label} className=\"text-sm\">\n\t\t\t\t\t\t\t\t<LinkComponent\n\t\t\t\t\t\t\t\t\thref={link.href}\n\t\t\t\t\t\t\t\t\ttarget={link.external ? \"_blank\" : undefined}\n\t\t\t\t\t\t\t\t\trel={link.external ? \"noopener noreferrer\" : undefined}\n\t\t\t\t\t\t\t\t\tclassName=\"text-gray-600 transition-colors duration-200 hover:text-gray-900\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{link.label}\n\t\t\t\t\t\t\t\t</LinkComponent>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t))}\n\n\t\t\t{/* Simple links (flat list, rendered if no link groups) */}\n\t\t\t{linkGroups.length === 0 && links.length > 0 && (\n\t\t\t\t<div className=\"mt-10 flex flex-wrap gap-6 lg:mt-0\">\n\t\t\t\t\t{links.map((link) => (\n\t\t\t\t\t\t<LinkComponent\n\t\t\t\t\t\t\tkey={link.label}\n\t\t\t\t\t\t\thref={link.href}\n\t\t\t\t\t\t\ttarget={link.external ? \"_blank\" : undefined}\n\t\t\t\t\t\t\trel={link.external ? \"noopener noreferrer\" : undefined}\n\t\t\t\t\t\t\tclassName=\"text-sm text-gray-600 transition-colors duration-200 hover:text-gray-900\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{link.label}\n\t\t\t\t\t\t</LinkComponent>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Mobile copyright (shown below on small screens) */}\n\t\t\t<div className=\"mt-10 w-full text-center text-sm text-gray-700 lg:hidden\">\n\t\t\t\t{copyright || defaultCopyright}\n\t\t\t</div>\n\t\t</footer>\n\t);\n}\n","'use client'\n\nimport type { ComponentType, ReactNode } from 'react'\nimport { useEffect, useState } from 'react'\nimport { twMerge } from 'tailwind-merge'\n\n/**\n * Navigation item configuration\n */\nexport interface NavItem {\n /** Link label */\n label: string\n /** Link destination */\n href: string\n}\n\n/**\n * CTA button configuration\n */\nexport interface HeaderCTA {\n /** Button label */\n label: string\n /** Button destination */\n href: string\n /** Click handler (alternative to href) */\n onClick?: () => void\n}\n\n/**\n * Link component props for custom routing\n */\nexport interface HeaderLinkProps {\n href: string\n children: ReactNode\n className?: string\n onClick?: () => void\n}\n\n/**\n * Header component props\n */\nexport interface HeaderProps {\n /** Logo element or string */\n logo: ReactNode\n /** Navigation items */\n navItems: NavItem[]\n /** Primary CTA button */\n cta?: HeaderCTA\n /** Custom link component (e.g., Next.js Link) */\n LinkComponent?: ComponentType<HeaderLinkProps>\n /** Sticky header behavior */\n sticky?: boolean\n /** Transparent when at top */\n transparentOnTop?: boolean\n /** Additional className */\n className?: string\n}\n\nfunction DefaultLink({ href, children, className, onClick }: HeaderLinkProps) {\n return (\n <a href={href} className={className} onClick={onClick}>\n {children}\n </a>\n )\n}\n\n/**\n * Menu icon for mobile\n */\nfunction MenuIcon({ className }: { className?: string }) {\n return (\n <svg className={className} fill='none' viewBox='0 0 24 24' strokeWidth={1.5} stroke='currentColor' aria-hidden='true'>\n <path strokeLinecap='round' strokeLinejoin='round' d='M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5' />\n </svg>\n )\n}\n\n/**\n * Close icon for mobile menu\n */\nfunction CloseIcon({ className }: { className?: string }) {\n return (\n <svg className={className} fill='none' viewBox='0 0 24 24' strokeWidth={1.5} stroke='currentColor' aria-hidden='true'>\n <path strokeLinecap='round' strokeLinejoin='round' d='M6 18L18 6M6 6l12 12' />\n </svg>\n )\n}\n\n/**\n * Header component for Solar template\n *\n * A responsive navigation header with logo, nav items, and optional CTA button.\n * Supports sticky behavior and transparent-on-top styling.\n */\nexport function Header({\n logo,\n navItems,\n cta,\n LinkComponent = DefaultLink,\n sticky = true,\n transparentOnTop = false,\n className,\n}: HeaderProps) {\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false)\n const [scrolled, setScrolled] = useState(false)\n\n useEffect(() => {\n const handleScroll = () => {\n setScrolled(window.scrollY > 15)\n }\n\n window.addEventListener('scroll', handleScroll)\n return () => window.removeEventListener('scroll', handleScroll)\n }, [])\n\n const closeMobileMenu = () => setMobileMenuOpen(false)\n\n const showBackground = scrolled || mobileMenuOpen || !transparentOnTop\n\n return (\n <header\n className={twMerge(\n 'inset-x-4 top-4 z-50 mx-auto flex max-w-6xl justify-center rounded-lg border border-transparent px-3 py-3 transition duration-300',\n sticky && 'fixed',\n showBackground ? 'border-gray-200/50 bg-white/80 shadow-2xl shadow-black/5 backdrop-blur-sm' : 'bg-white/0',\n className,\n )}>\n <div className='w-full md:my-auto'>\n <div className='relative flex items-center justify-between'>\n {/* Logo */}\n <LinkComponent href='/' className='flex items-center'>\n {typeof logo === 'string' ?\n <span className='text-xl font-semibold text-gray-900'>{logo}</span>\n : logo}\n </LinkComponent>\n\n {/* Desktop Navigation */}\n {navItems.length > 0 && (\n <nav className='hidden sm:block md:absolute md:top-1/2 md:left-1/2 md:-translate-x-1/2 md:-translate-y-1/2'>\n <div className='flex items-center gap-10 font-medium'>\n {navItems.map((item) => (\n <LinkComponent key={item.href} href={item.href} className='px-2 py-1 text-gray-900 hover:text-gray-600 transition-colors'>\n {item.label}\n </LinkComponent>\n ))}\n </div>\n </nav>\n )}\n\n {/* Desktop CTA */}\n {cta && (\n <button\n type='button'\n className='hidden h-10 rounded-md border border-gray-200 bg-white px-4 font-semibold text-gray-900 transition-colors hover:bg-gray-50 sm:block'\n onClick={cta.onClick}>\n {cta.label}\n </button>\n )}\n\n {/* Mobile Menu Button */}\n <button\n type='button'\n onClick={() => setMobileMenuOpen(!mobileMenuOpen)}\n className='rounded-md border border-gray-200 bg-white p-1.5 sm:hidden'\n aria-label={mobileMenuOpen ? 'Close navigation menu' : 'Open navigation menu'}>\n {mobileMenuOpen ?\n <CloseIcon className='size-6 shrink-0 text-gray-900' />\n : <MenuIcon className='size-6 shrink-0 text-gray-900' />}\n </button>\n </div>\n\n {/* Mobile Navigation */}\n {mobileMenuOpen && (\n <nav className='mt-6 flex flex-col gap-6 text-lg sm:hidden'>\n <ul className='space-y-4 font-medium'>\n {navItems.map((item) => (\n // biome-ignore lint/a11y/useKeyWithClickEvents: Header is a client component\n <li key={item.href} onClick={closeMobileMenu}>\n <LinkComponent href={item.href} className='text-gray-900'>\n {item.label}\n </LinkComponent>\n </li>\n ))}\n </ul>\n {cta && (\n <button\n type='button'\n className='rounded-md border border-gray-200 bg-white px-4 py-3 text-lg font-medium text-gray-900 transition-colors hover:bg-gray-50'\n onClick={cta.onClick}>\n {cta.label}\n </button>\n )}\n </nav>\n )}\n </div>\n </header>\n )\n}\n","import type { ComponentType, ReactNode } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Hero CTA configuration\n */\nexport interface HeroCTAConfig {\n\t/** Primary button text */\n\tprimary?: string;\n\t/** Secondary button text */\n\tsecondary?: string;\n\t/** Primary button action */\n\tprimaryAction?: string | (() => void);\n\t/** Secondary button action */\n\tsecondaryAction?: string | (() => void);\n}\n\n/**\n * Link component props for custom routing\n */\nexport interface HeroLinkProps {\n\thref: string;\n\tchildren: ReactNode;\n\tclassName?: string;\n}\n\n/**\n * Hero component props following mdxui content/actions pattern\n */\nexport interface HeroProps {\n\t/** Main title text (mdxui standard) */\n\ttitle: string;\n\t/** Supporting subtitle (mdxui standard) */\n\tsubtitle?: string;\n\t/** Badge text (shown above title) */\n\tbadge?: string;\n\t/** Primary call-to-action text (mdxui standard) */\n\tcallToAction: string;\n\t/** Secondary call-to-action text (mdxui standard) */\n\tsecondaryCallToAction?: string;\n\t/** Hero variant */\n\tvariant?: \"default\" | \"minimal\" | \"gradient\";\n\t/** Action behaviors - where buttons navigate (mdxui standard) */\n\tactions?: {\n\t\tprimary?:\n\t\t\t| string\n\t\t\t| { href: string; onClick?: () => void; target?: \"_blank\" | \"_self\" };\n\t\tsecondary?:\n\t\t\t| string\n\t\t\t| { href: string; onClick?: () => void; target?: \"_blank\" | \"_self\" };\n\t};\n\t/** Custom link component (e.g., Next.js Link) */\n\tLinkComponent?: ComponentType<HeroLinkProps>;\n\t/** Additional className */\n\tclassName?: string;\n\t/** Children for custom content */\n\tchildren?: ReactNode;\n}\n\nfunction DefaultLink({ href, children, className }: HeroLinkProps) {\n\treturn (\n\t\t<a href={href} className={className}>\n\t\t\t{children}\n\t\t</a>\n\t);\n}\n\nfunction resolveAction(action: string | (() => void) | undefined): {\n\thref?: string;\n\tonClick?: () => void;\n} {\n\tif (!action) return {};\n\tif (typeof action === \"string\") return { href: action };\n\treturn { onClick: action };\n}\n\n/**\n * Primary CTA Button component\n */\nfunction CTAButton({\n\tchildren,\n\taction,\n\tvariant = \"primary\",\n\tLinkComponent,\n}: {\n\tchildren: ReactNode;\n\taction?: string | (() => void);\n\tvariant?: \"primary\" | \"secondary\";\n\tLinkComponent: ComponentType<HeroLinkProps>;\n}) {\n\tconst resolved = resolveAction(action);\n\tconst isPrimary = variant === \"primary\";\n\n\tconst className = twMerge(\n\t\t\"inline-flex items-center justify-center gap-1 rounded-md px-5 py-3 font-medium tracking-wide whitespace-nowrap transition-all duration-200\",\n\t\tisPrimary\n\t\t\t? \"border-b-[1.5px] border-orange-700 bg-gradient-to-b from-orange-400 to-orange-500 text-white shadow-[0_0_0_2px_rgba(0,0,0,0.04),0_0_14px_0_rgba(255,255,255,0.19)] hover:shadow-orange-300\"\n\t\t\t: \"border border-gray-300 bg-white text-gray-900 hover:bg-gray-50\",\n\t);\n\n\tif (resolved.onClick) {\n\t\treturn (\n\t\t\t<button type=\"button\" className={className} onClick={resolved.onClick}>\n\t\t\t\t{children}\n\t\t\t</button>\n\t\t);\n\t}\n\n\tif (resolved.href) {\n\t\treturn (\n\t\t\t<LinkComponent href={resolved.href} className={className}>\n\t\t\t\t{children}\n\t\t\t</LinkComponent>\n\t\t);\n\t}\n\n\treturn (\n\t\t<button type=\"button\" className={className}>\n\t\t\t{children}\n\t\t</button>\n\t);\n}\n\n/**\n * Hero component - Default variant\n *\n * A centered hero section with title, subtitle, badge, and CTA buttons.\n * Based on the Solar template design with mdxui interface.\n */\nexport function Hero({\n\ttitle,\n\tsubtitle,\n\tbadge,\n\tcallToAction,\n\tsecondaryCallToAction,\n\tvariant = \"default\",\n\tactions,\n\tLinkComponent = DefaultLink,\n\tclassName,\n\tchildren,\n}: HeroProps) {\n\t// Route to variant components\n\tif (variant === \"minimal\") {\n\t\treturn (\n\t\t\t<HeroMinimal\n\t\t\t\ttitle={title}\n\t\t\t\tsubtitle={subtitle}\n\t\t\t\tbadge={badge}\n\t\t\t\tcallToAction={callToAction}\n\t\t\t\tsecondaryCallToAction={secondaryCallToAction}\n\t\t\t\tactions={actions}\n\t\t\t\tLinkComponent={LinkComponent}\n\t\t\t\tclassName={className}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</HeroMinimal>\n\t\t);\n\t}\n\n\tif (variant === \"gradient\") {\n\t\treturn (\n\t\t\t<HeroGradient\n\t\t\t\ttitle={title}\n\t\t\t\tsubtitle={subtitle}\n\t\t\t\tbadge={badge}\n\t\t\t\tcallToAction={callToAction}\n\t\t\t\tsecondaryCallToAction={secondaryCallToAction}\n\t\t\t\tactions={actions}\n\t\t\t\tLinkComponent={LinkComponent}\n\t\t\t\tclassName={className}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</HeroGradient>\n\t\t);\n\t}\n\n\treturn (\n\t\t<section aria-label=\"hero\" className={twMerge(\"relative\", className)}>\n\t\t\t<div className=\"relative flex flex-col items-center justify-center py-16 sm:py-24\">\n\t\t\t\t{badge && (\n\t\t\t\t\t<div className=\"mb-6\">\n\t\t\t\t\t\t<div className=\"inline-flex items-center gap-3 rounded-full bg-white/5 px-2.5 py-0.5 pr-3 pl-0.5 font-medium text-gray-900 ring-1 shadow-lg shadow-orange-400/20 ring-black/10 backdrop-blur-[1px] transition-colors hover:bg-orange-500/5 sm:text-sm\">\n\t\t\t\t\t\t\t<span className=\"shrink-0 rounded-full border bg-gray-50 px-2.5 py-1 text-sm text-gray-600 sm:text-xs\">\n\t\t\t\t\t\t\t\t{badge}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<h1 className=\"mt-2 text-center text-5xl font-semibold tracking-tighter text-gray-900 sm:text-8xl sm:leading-[1.1]\">\n\t\t\t\t\t{title}\n\t\t\t\t</h1>\n\n\t\t\t\t{subtitle && (\n\t\t\t\t\t<p className=\"mt-5 max-w-xl text-center text-base text-balance text-gray-700 sm:mt-8 sm:text-xl\">\n\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\n\t\t\t\t{(callToAction || secondaryCallToAction) && (\n\t\t\t\t\t<div className=\"mt-6 flex flex-wrap items-center justify-center gap-4\">\n\t\t\t\t\t\t{callToAction && (\n\t\t\t\t\t\t\t<CTAButton\n\t\t\t\t\t\t\t\taction={\n\t\t\t\t\t\t\t\t\ttypeof actions?.primary === \"string\"\n\t\t\t\t\t\t\t\t\t\t? actions.primary\n\t\t\t\t\t\t\t\t\t\t: actions?.primary?.href\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\tLinkComponent={LinkComponent}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{callToAction}\n\t\t\t\t\t\t\t</CTAButton>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{secondaryCallToAction && (\n\t\t\t\t\t\t\t<CTAButton\n\t\t\t\t\t\t\t\taction={\n\t\t\t\t\t\t\t\t\ttypeof actions?.secondary === \"string\"\n\t\t\t\t\t\t\t\t\t\t? actions.secondary\n\t\t\t\t\t\t\t\t\t\t: actions?.secondary?.href\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tLinkComponent={LinkComponent}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{secondaryCallToAction}\n\t\t\t\t\t\t\t</CTAButton>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</section>\n\t);\n}\n\n/**\n * HeroMinimal - A minimal, clean hero variant without background effects\n */\nexport function HeroMinimal({\n\ttitle,\n\tsubtitle,\n\tbadge,\n\tcallToAction,\n\tsecondaryCallToAction,\n\tactions,\n\tLinkComponent = DefaultLink,\n\tclassName,\n\tchildren,\n}: HeroProps) {\n\treturn (\n\t\t<section aria-label=\"hero\" className={twMerge(\"relative\", className)}>\n\t\t\t<div className=\"flex flex-col items-center justify-center py-12 sm:py-20\">\n\t\t\t\t{badge && (\n\t\t\t\t\t<div className=\"mb-4\">\n\t\t\t\t\t\t<span className=\"inline-flex rounded-full bg-gray-100 px-3 py-1 text-sm font-medium text-gray-700\">\n\t\t\t\t\t\t\t{badge}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<h1 className=\"text-center text-4xl font-semibold tracking-tight text-gray-900 sm:text-6xl\">\n\t\t\t\t\t{title}\n\t\t\t\t</h1>\n\n\t\t\t\t{subtitle && (\n\t\t\t\t\t<p className=\"mt-4 max-w-lg text-center text-base text-gray-600 sm:mt-6 sm:text-lg\">\n\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\n\t\t\t\t{(callToAction || secondaryCallToAction) && (\n\t\t\t\t\t<div className=\"mt-6 flex flex-wrap items-center justify-center gap-4\">\n\t\t\t\t\t\t{callToAction && (\n\t\t\t\t\t\t\t<CTAButton\n\t\t\t\t\t\t\t\taction={\n\t\t\t\t\t\t\t\t\ttypeof actions?.primary === \"string\"\n\t\t\t\t\t\t\t\t\t\t? actions.primary\n\t\t\t\t\t\t\t\t\t\t: actions?.primary?.href\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\tLinkComponent={LinkComponent}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{callToAction}\n\t\t\t\t\t\t\t</CTAButton>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{secondaryCallToAction && (\n\t\t\t\t\t\t\t<CTAButton\n\t\t\t\t\t\t\t\taction={\n\t\t\t\t\t\t\t\t\ttypeof actions?.secondary === \"string\"\n\t\t\t\t\t\t\t\t\t\t? actions.secondary\n\t\t\t\t\t\t\t\t\t\t: actions?.secondary?.href\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tLinkComponent={LinkComponent}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{secondaryCallToAction}\n\t\t\t\t\t\t\t</CTAButton>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</section>\n\t);\n}\n\n/**\n * HeroGradient - Hero variant with gradient background effects\n */\nexport function HeroGradient({\n\ttitle,\n\tsubtitle,\n\tbadge,\n\tcallToAction,\n\tsecondaryCallToAction,\n\tactions,\n\tLinkComponent = DefaultLink,\n\tclassName,\n\tchildren,\n}: HeroProps) {\n\treturn (\n\t\t<section\n\t\t\taria-label=\"hero\"\n\t\t\tclassName={twMerge(\"relative overflow-hidden\", className)}\n\t\t>\n\t\t\t{/* Gradient background */}\n\t\t\t<div className=\"absolute inset-0 -z-10 bg-gradient-to-br from-orange-50 via-white to-orange-100\" />\n\t\t\t<div className=\"absolute inset-0 -z-10 bg-gradient-radial from-orange-200/30 via-transparent to-transparent\" />\n\n\t\t\t<div className=\"flex flex-col items-center justify-center py-16 sm:py-24\">\n\t\t\t\t{badge && (\n\t\t\t\t\t<div className=\"mb-6\">\n\t\t\t\t\t\t<div className=\"inline-flex items-center gap-3 rounded-full bg-white/80 px-2.5 py-0.5 pr-3 pl-0.5 font-medium text-gray-900 ring-1 shadow-lg shadow-orange-400/20 ring-black/10 backdrop-blur-sm transition-colors hover:bg-white sm:text-sm\">\n\t\t\t\t\t\t\t<span className=\"shrink-0 rounded-full border bg-orange-50 px-2.5 py-1 text-sm text-orange-700 sm:text-xs\">\n\t\t\t\t\t\t\t\t{badge}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<h1 className=\"text-center text-5xl font-semibold tracking-tighter text-gray-900 sm:text-8xl sm:leading-[1.1]\">\n\t\t\t\t\t{title}\n\t\t\t\t</h1>\n\n\t\t\t\t{subtitle && (\n\t\t\t\t\t<p className=\"mt-5 max-w-xl text-center text-base text-balance text-gray-700 sm:mt-8 sm:text-xl\">\n\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\n\t\t\t\t{(callToAction || secondaryCallToAction) && (\n\t\t\t\t\t<div className=\"mt-6 flex flex-wrap items-center justify-center gap-4\">\n\t\t\t\t\t\t{callToAction && (\n\t\t\t\t\t\t\t<CTAButton\n\t\t\t\t\t\t\t\taction={\n\t\t\t\t\t\t\t\t\ttypeof actions?.primary === \"string\"\n\t\t\t\t\t\t\t\t\t\t? actions.primary\n\t\t\t\t\t\t\t\t\t\t: actions?.primary?.href\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\tLinkComponent={LinkComponent}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{callToAction}\n\t\t\t\t\t\t\t</CTAButton>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{secondaryCallToAction && (\n\t\t\t\t\t\t\t<CTAButton\n\t\t\t\t\t\t\t\taction={\n\t\t\t\t\t\t\t\t\ttypeof actions?.secondary === \"string\"\n\t\t\t\t\t\t\t\t\t\t? actions.secondary\n\t\t\t\t\t\t\t\t\t\t: actions?.secondary?.href\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tLinkComponent={LinkComponent}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{secondaryCallToAction}\n\t\t\t\t\t\t\t</CTAButton>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</section>\n\t);\n}\n","import { isValidElement, type ReactNode } from \"react\";\n\n// =============================================================================\n// Local prop types - flexible versions without required variants\n// =============================================================================\n\ninterface SolarHeroProps {\n\ttitle: string;\n\tsubtitle?: string;\n\tcallToAction: string;\n\tsecondaryCallToAction?: string;\n\tvariant?:\n\t\t| \"default\"\n\t\t| \"centered\"\n\t\t| \"split\"\n\t\t| \"code-below\"\n\t\t| \"video-beside\"\n\t\t| \"image-split\";\n\tactions?: {\n\t\tprimary?:\n\t\t\t| string\n\t\t\t| { href: string; onClick?: () => void; target?: \"_blank\" | \"_self\" };\n\t\tsecondary?:\n\t\t\t| string\n\t\t\t| { href: string; onClick?: () => void; target?: \"_blank\" | \"_self\" };\n\t};\n}\n\ninterface SolarFeatureItem {\n\ttitle: string;\n\tdescription: string;\n\ticon?: unknown;\n}\n\ninterface SolarFeaturesProps {\n\ttitle?: string;\n\tdescription?: string;\n\tfeatures: SolarFeatureItem[];\n\tvariant?: \"grid\" | \"list\" | \"bento\";\n\tcolumns?: number;\n}\n\ninterface SolarPricingTier {\n\tname: string;\n\tprice: string;\n\tdescription?: string;\n\tfeatures: string[];\n\tcallToAction: string;\n\thighlighted?: boolean;\n\tactions?: {\n\t\tprimary?: string | { href: string };\n\t};\n}\n\ninterface SolarPricingProps {\n\ttitle?: string;\n\tdescription?: string;\n\ttiers: SolarPricingTier[];\n\tshowToggle?: boolean;\n}\n\ninterface SolarTestimonial {\n\tquote: string;\n\tauthor: string;\n\ttitle?: string;\n\tcompany?: string;\n\tavatar?: string;\n}\n\ninterface SolarTestimonialsProps {\n\ttitle?: string;\n\ttestimonials: SolarTestimonial[];\n\tvariant?: \"grid\" | \"carousel\" | \"masonry\";\n}\n\ninterface SolarCTASectionProps {\n\ttitle: string;\n\tdescription?: string;\n\tcallToAction: string;\n\tsecondaryCallToAction?: string;\n\tvariant?: \"simple\" | \"split\" | \"centered\";\n\tactions?: {\n\t\tprimary?: string | { href: string };\n\t\tsecondary?: string | { href: string };\n\t};\n}\n\ninterface SolarFAQItem {\n\tquestion: string;\n\tanswer: string;\n}\n\ninterface SolarFAQProps {\n\ttitle?: string;\n\titems: SolarFAQItem[];\n\tvariant?: \"accordion\" | \"grid\" | \"list\";\n}\n\n/**\n * LandingPage orchestrator props\n * Composes Hero, Features, Pricing, Testimonials, CTA, and FAQ sections\n *\n * All section props accept either:\n * - A config object (will render the built-in section component)\n * - A ReactNode (will render the custom component directly)\n */\nexport interface LandingPageProps {\n\t/** Hero section - config object or custom ReactNode */\n\thero?: SolarHeroProps | ReactNode;\n\t/** Features section - config object or custom ReactNode */\n\tfeatures?: SolarFeaturesProps | ReactNode;\n\t/** Pricing section - config object or custom ReactNode */\n\tpricing?: SolarPricingProps | ReactNode;\n\t/** Testimonials section - config object or custom ReactNode */\n\ttestimonials?: SolarTestimonialsProps | ReactNode;\n\t/** CTA section - config object or custom ReactNode */\n\tcta?: SolarCTASectionProps | ReactNode;\n\t/** FAQ section - config object or custom ReactNode */\n\tfaq?: SolarFAQProps | ReactNode;\n\t/** Additional sections - rendered after FAQ */\n\tsections?: ReactNode[];\n\t/** Additional children content */\n\tchildren?: ReactNode;\n\t/** Additional className */\n\tclassName?: string;\n}\n\n/**\n * Hero section component\n */\nfunction HeroSection({\n\ttitle,\n\tsubtitle,\n\tcallToAction,\n\tsecondaryCallToAction,\n\tactions,\n\tvariant: _variant,\n}: SolarHeroProps) {\n\treturn (\n\t\t<section className=\"relative py-20 lg:py-32 bg-gradient-to-br from-slate-900 to-slate-800\">\n\t\t\t<div className=\"mx-auto max-w-7xl px-6 lg:px-8 text-center\">\n\t\t\t\t<h1 className=\"text-4xl font-bold tracking-tight text-white sm:text-6xl\">\n\t\t\t\t\t{title}\n\t\t\t\t</h1>\n\t\t\t\t{subtitle && (\n\t\t\t\t\t<p className=\"mt-6 text-lg leading-8 text-slate-300\">{subtitle}</p>\n\t\t\t\t)}\n\t\t\t\t<div className=\"mt-10 flex items-center justify-center gap-x-6\">\n\t\t\t\t\t<a\n\t\t\t\t\t\thref={\n\t\t\t\t\t\t\ttypeof actions?.primary === \"string\"\n\t\t\t\t\t\t\t\t? actions.primary\n\t\t\t\t\t\t\t\t: (actions?.primary?.href ?? \"#\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclassName=\"rounded-md bg-indigo-600 px-3.5 py-2.5 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{callToAction}\n\t\t\t\t\t</a>\n\t\t\t\t\t{secondaryCallToAction && (\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref={\n\t\t\t\t\t\t\t\ttypeof actions?.secondary === \"string\"\n\t\t\t\t\t\t\t\t\t? actions.secondary\n\t\t\t\t\t\t\t\t\t: (actions?.secondary?.href ?? \"#\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tclassName=\"text-sm font-semibold leading-6 text-white\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{secondaryCallToAction} <span aria-hidden=\"true\">-></span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t);\n}\n\n/**\n * Features section component\n */\nfunction FeaturesSection({\n\ttitle,\n\tdescription,\n\tfeatures,\n\tvariant: _variant,\n\tcolumns = 3,\n}: SolarFeaturesProps) {\n\treturn (\n\t\t<section className=\"py-20 lg:py-24 bg-white\">\n\t\t\t<div className=\"mx-auto max-w-7xl px-6 lg:px-8\">\n\t\t\t\t{title && (\n\t\t\t\t\t<div className=\"mx-auto max-w-2xl text-center\">\n\t\t\t\t\t\t<h2 className=\"text-3xl font-bold tracking-tight text-slate-900 sm:text-4xl\">\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t{description && (\n\t\t\t\t\t\t\t<p className=\"mt-4 text-lg leading-8 text-slate-600\">\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<div\n\t\t\t\t\tclassName={`mx-auto mt-16 grid max-w-2xl gap-x-8 gap-y-16 lg:max-w-none ${\n\t\t\t\t\t\tcolumns === 2\n\t\t\t\t\t\t\t? \"sm:grid-cols-2\"\n\t\t\t\t\t\t\t: columns === 4\n\t\t\t\t\t\t\t\t? \"sm:grid-cols-2 lg:grid-cols-4\"\n\t\t\t\t\t\t\t\t: \"sm:grid-cols-2 lg:grid-cols-3\"\n\t\t\t\t\t}`}\n\t\t\t\t>\n\t\t\t\t\t{features.map((feature, index) => (\n\t\t\t\t\t\t<div key={index.toString()} className=\"flex flex-col\">\n\t\t\t\t\t\t\t<h3 className=\"text-lg font-semibold leading-8 text-slate-900\">\n\t\t\t\t\t\t\t\t{feature.title}\n\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t<p className=\"mt-2 text-base leading-7 text-slate-600\">\n\t\t\t\t\t\t\t\t{feature.description}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t);\n}\n\n/**\n * Pricing section component\n */\nfunction PricingSection({\n\ttitle,\n\tdescription,\n\ttiers,\n\tshowToggle: _showToggle,\n}: SolarPricingProps) {\n\treturn (\n\t\t<section className=\"py-20 lg:py-24 bg-slate-50\">\n\t\t\t<div className=\"mx-auto max-w-7xl px-6 lg:px-8\">\n\t\t\t\t{title && (\n\t\t\t\t\t<div className=\"mx-auto max-w-2xl text-center\">\n\t\t\t\t\t\t<h2 className=\"text-3xl font-bold tracking-tight text-slate-900 sm:text-4xl\">\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t{description && (\n\t\t\t\t\t\t\t<p className=\"mt-4 text-lg leading-8 text-slate-600\">\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<div className=\"mx-auto mt-16 grid max-w-lg gap-8 lg:max-w-none lg:grid-cols-3\">\n\t\t\t\t\t{tiers.map((tier, index) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={index.toString()}\n\t\t\t\t\t\t\tclassName={`flex flex-col rounded-2xl p-8 ring-1 ${\n\t\t\t\t\t\t\t\ttier.highlighted\n\t\t\t\t\t\t\t\t\t? \"ring-2 ring-indigo-600 bg-white\"\n\t\t\t\t\t\t\t\t\t: \"ring-slate-200 bg-white\"\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<h3 className=\"text-lg font-semibold leading-8 text-slate-900\">\n\t\t\t\t\t\t\t\t{tier.name}\n\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t<p className=\"mt-4 text-4xl font-bold tracking-tight text-slate-900\">\n\t\t\t\t\t\t\t\t{tier.price}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t{tier.description && (\n\t\t\t\t\t\t\t\t<p className=\"mt-4 text-base leading-7 text-slate-600\">\n\t\t\t\t\t\t\t\t\t{tier.description}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<ul className=\"mt-8 space-y-3 text-sm leading-6 text-slate-600\">\n\t\t\t\t\t\t\t\t{tier.features.map((feature, featureIndex) => (\n\t\t\t\t\t\t\t\t\t<li key={featureIndex.toString()} className=\"flex gap-x-3\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-indigo-600\">*</span>\n\t\t\t\t\t\t\t\t\t\t{feature}\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref={\n\t\t\t\t\t\t\t\t\ttypeof tier.actions?.primary === \"string\"\n\t\t\t\t\t\t\t\t\t\t? tier.actions.primary\n\t\t\t\t\t\t\t\t\t\t: (tier.actions?.primary?.href ?? \"#\")\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tclassName={`mt-8 block rounded-md px-3 py-2 text-center text-sm font-semibold shadow-sm ${\n\t\t\t\t\t\t\t\t\ttier.highlighted\n\t\t\t\t\t\t\t\t\t\t? \"bg-indigo-600 text-white hover:bg-indigo-500\"\n\t\t\t\t\t\t\t\t\t\t: \"bg-white text-indigo-600 ring-1 ring-inset ring-indigo-200 hover:ring-indigo-300\"\n\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{tier.callToAction}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t);\n}\n\n/**\n * Testimonials section component\n */\nfunction TestimonialsSection({\n\ttitle,\n\ttestimonials,\n\tvariant: _variant,\n}: SolarTestimonialsProps) {\n\treturn (\n\t\t<section className=\"py-20 lg:py-24 bg-white\">\n\t\t\t<div className=\"mx-auto max-w-7xl px-6 lg:px-8\">\n\t\t\t\t{title && (\n\t\t\t\t\t<h2 className=\"text-center text-3xl font-bold tracking-tight text-slate-900 sm:text-4xl\">\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</h2>\n\t\t\t\t)}\n\t\t\t\t<div className=\"mx-auto mt-16 grid max-w-2xl gap-8 lg:max-w-none lg:grid-cols-3\">\n\t\t\t\t\t{testimonials.map((testimonial, index) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={index.toString()}\n\t\t\t\t\t\t\tclassName=\"flex flex-col bg-slate-50 p-8 rounded-2xl\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<blockquote className=\"text-lg leading-7 text-slate-700\">\n\t\t\t\t\t\t\t\t“{testimonial.quote}”\n\t\t\t\t\t\t\t</blockquote>\n\t\t\t\t\t\t\t<div className=\"mt-6\">\n\t\t\t\t\t\t\t\t<p className=\"font-semibold text-slate-900\">\n\t\t\t\t\t\t\t\t\t{testimonial.author}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t{(testimonial.title || testimonial.company) && (\n\t\t\t\t\t\t\t\t\t<p className=\"text-sm text-slate-500\">\n\t\t\t\t\t\t\t\t\t\t{testimonial.title}\n\t\t\t\t\t\t\t\t\t\t{testimonial.title && testimonial.company ? \", \" : \"\"}\n\t\t\t\t\t\t\t\t\t\t{testimonial.company}\n\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t);\n}\n\n/**\n * CTA section component\n */\nfunction CTASection({\n\ttitle,\n\tdescription,\n\tcallToAction,\n\tsecondaryCallToAction,\n\tactions,\n\tvariant: _variant,\n}: SolarCTASectionProps) {\n\treturn (\n\t\t<section className=\"py-20 lg:py-24 bg-indigo-600\">\n\t\t\t<div className=\"mx-auto max-w-7xl px-6 lg:px-8 text-center\">\n\t\t\t\t<h2 className=\"text-3xl font-bold tracking-tight text-white sm:text-4xl\">\n\t\t\t\t\t{title}\n\t\t\t\t</h2>\n\t\t\t\t{description && (\n\t\t\t\t\t<p className=\"mx-auto mt-6 max-w-xl text-lg leading-8 text-indigo-100\">\n\t\t\t\t\t\t{description}\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t\t<div className=\"mt-10 flex items-center justify-center gap-x-6\">\n\t\t\t\t\t<a\n\t\t\t\t\t\thref={\n\t\t\t\t\t\t\ttypeof actions?.primary === \"string\"\n\t\t\t\t\t\t\t\t? actions.primary\n\t\t\t\t\t\t\t\t: (actions?.primary?.href ?? \"#\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclassName=\"rounded-md bg-white px-3.5 py-2.5 text-sm font-semibold text-indigo-600 shadow-sm hover:bg-indigo-50\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{callToAction}\n\t\t\t\t\t</a>\n\t\t\t\t\t{secondaryCallToAction && (\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref={\n\t\t\t\t\t\t\t\ttypeof actions?.secondary === \"string\"\n\t\t\t\t\t\t\t\t\t? actions.secondary\n\t\t\t\t\t\t\t\t\t: (actions?.secondary?.href ?? \"#\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tclassName=\"text-sm font-semibold leading-6 text-white\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{secondaryCallToAction} <span aria-hidden=\"true\">-></span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t);\n}\n\n/**\n * FAQ section component\n */\nfunction FAQSection({ title, items, variant: _variant }: SolarFAQProps) {\n\treturn (\n\t\t<section className=\"py-20 lg:py-24 bg-white\">\n\t\t\t<div className=\"mx-auto max-w-7xl px-6 lg:px-8\">\n\t\t\t\t{title && (\n\t\t\t\t\t<h2 className=\"text-center text-3xl font-bold tracking-tight text-slate-900 sm:text-4xl\">\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</h2>\n\t\t\t\t)}\n\t\t\t\t<div className=\"mx-auto mt-16 max-w-3xl divide-y divide-slate-200\">\n\t\t\t\t\t{items.map((item, index) => (\n\t\t\t\t\t\t<div key={index.toString()} className=\"py-6\">\n\t\t\t\t\t\t\t<h3 className=\"text-lg font-semibold leading-7 text-slate-900\">\n\t\t\t\t\t\t\t\t{item.question}\n\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t<p className=\"mt-2 text-base leading-7 text-slate-600\">\n\t\t\t\t\t\t\t\t{item.answer}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t);\n}\n\n/**\n * LandingPage orchestrator\n *\n * Composes a complete landing page from section configurations.\n * Renders Hero, Features, Pricing, Testimonials, CTA, and FAQ sections\n * based on the provided props.\n *\n * @example\n * ```tsx\n * <LandingPage\n * hero={{\n * title: 'Build faster',\n * subtitle: 'Ship with confidence',\n * callToAction: 'Get Started',\n * actions: { primary: '/signup' }\n * }}\n * features={{\n * features: [\n * { title: 'Feature 1', description: 'Description 1' },\n * ]\n * }}\n * pricing={{\n * tiers: [\n * { name: 'Free', price: '$0', features: ['Basic'], callToAction: 'Start' }\n * ]\n * }}\n * />\n * ```\n */\nexport function LandingPage({\n\thero,\n\tfeatures,\n\tpricing,\n\ttestimonials,\n\tcta,\n\tfaq,\n\tsections,\n\tchildren,\n\tclassName,\n}: LandingPageProps) {\n\treturn (\n\t\t<div className={className}>\n\t\t\t{hero && (isValidElement(hero) ? hero : <HeroSection {...(hero as SolarHeroProps)} />)}\n\t\t\t{features && (isValidElement(features) ? features : <FeaturesSection {...(features as SolarFeaturesProps)} />)}\n\t\t\t{pricing && (isValidElement(pricing) ? pricing : <PricingSection {...(pricing as SolarPricingProps)} />)}\n\t\t\t{testimonials && (isValidElement(testimonials) ? testimonials : <TestimonialsSection {...(testimonials as SolarTestimonialsProps)} />)}\n\t\t\t{cta && (isValidElement(cta) ? cta : <CTASection {...(cta as SolarCTASectionProps)} />)}\n\t\t\t{faq && (isValidElement(faq) ? faq : <FAQSection {...(faq as SolarFAQProps)} />)}\n\t\t\t{sections?.map((section, index) => (\n\t\t\t\t<div key={index.toString()}>{section}</div>\n\t\t\t))}\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","import { isValidElement, type ComponentType, type ReactNode } from \"react\";\n\n// =============================================================================\n// Local prop types - flexible versions for solar template\n// =============================================================================\n\ninterface SolarNavItem {\n\tlabel: string;\n\thref: string;\n\ticon?: string;\n\tdescription?: string;\n\tchildren?: SolarNavItem[];\n}\n\ninterface SolarCTA {\n\ttext: string;\n\thref: string;\n}\n\ninterface SolarLinkProps {\n\thref: string;\n\tchildren: ReactNode;\n\tclassName?: string;\n\tonClick?: () => void;\n}\n\ninterface SolarHeaderProps {\n\tlogo: ReactNode;\n\tnav: SolarNavItem[];\n\tcta?: SolarCTA;\n\tLinkComponent?: ComponentType<SolarLinkProps>;\n}\n\ninterface SolarFooterLink {\n\tlabel: string;\n\thref: string;\n}\n\ninterface SolarFooterLinkGroup {\n\ttitle: string;\n\tlinks: SolarFooterLink[];\n}\n\ninterface SolarSocialLink {\n\tplatform: string;\n\thref: string;\n\ticon?: ReactNode;\n}\n\ninterface SolarFooterProps {\n\tlogo: ReactNode;\n\tlinks: SolarFooterLinkGroup[];\n\tsocial?: SolarSocialLink[];\n\tcopyright?: string;\n}\n\n/**\n * Header component\n * Renders navigation header with logo, nav links, and optional CTA\n */\nfunction Header({ logo, nav, cta, LinkComponent }: SolarHeaderProps) {\n\tconst Link =\n\t\tLinkComponent ??\n\t\t(({\n\t\t\thref,\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t}: {\n\t\t\thref: string;\n\t\t\tchildren: ReactNode;\n\t\t\tclassName?: string;\n\t\t}) => (\n\t\t\t<a href={href} className={className}>\n\t\t\t\t{children}\n\t\t\t</a>\n\t\t));\n\n\treturn (\n\t\t<header className=\"sticky top-0 z-50 bg-white/80 backdrop-blur-md border-b border-slate-200\">\n\t\t\t<nav className=\"mx-auto flex max-w-7xl items-center justify-between p-6 lg:px-8\">\n\t\t\t\t<div className=\"flex lg:flex-1\">\n\t\t\t\t\t<Link href=\"/\" className=\"-m-1.5 p-1.5\">\n\t\t\t\t\t\t{logo}\n\t\t\t\t\t</Link>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"hidden lg:flex lg:gap-x-12\">\n\t\t\t\t\t{nav.map((item, index) => (\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\tkey={index.toString()}\n\t\t\t\t\t\t\thref={item.href}\n\t\t\t\t\t\t\tclassName=\"text-sm font-semibold leading-6 text-slate-900 hover:text-slate-600\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"hidden lg:flex lg:flex-1 lg:justify-end\">\n\t\t\t\t\t{cta && (\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\thref={cta.href}\n\t\t\t\t\t\t\tclassName=\"rounded-md bg-indigo-600 px-3.5 py-2.5 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{cta.text}\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</nav>\n\t\t</header>\n\t);\n}\n\n/**\n * Footer component\n * Renders site footer with logo, link groups, social links, and copyright\n */\nfunction Footer({ logo, links, social, copyright }: SolarFooterProps) {\n\treturn (\n\t\t<footer className=\"bg-slate-900\">\n\t\t\t<div className=\"mx-auto max-w-7xl px-6 py-12 lg:px-8 lg:py-16\">\n\t\t\t\t<div className=\"xl:grid xl:grid-cols-3 xl:gap-8\">\n\t\t\t\t\t<div className=\"space-y-8\">{logo}</div>\n\t\t\t\t\t{links.length > 0 && (\n\t\t\t\t\t\t<div className=\"mt-16 grid grid-cols-2 gap-8 xl:col-span-2 xl:mt-0\">\n\t\t\t\t\t\t\t{links.map((group, groupIndex) => (\n\t\t\t\t\t\t\t\t<div key={groupIndex.toString()}>\n\t\t\t\t\t\t\t\t\t<h3 className=\"text-sm font-semibold leading-6 text-white\">\n\t\t\t\t\t\t\t\t\t\t{group.title}\n\t\t\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t\t\t<ul className=\"mt-6 space-y-4\">\n\t\t\t\t\t\t\t\t\t\t{group.links.map((link, linkIndex) => (\n\t\t\t\t\t\t\t\t\t\t\t<li key={linkIndex.toString()}>\n\t\t\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\t\t\thref={link.href}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"text-sm leading-6 text-slate-300 hover:text-white\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{link.label}\n\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t{(social || copyright) && (\n\t\t\t\t\t<div className=\"mt-16 border-t border-slate-700 pt-8 sm:mt-20 lg:mt-24\">\n\t\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t\t{copyright && (\n\t\t\t\t\t\t\t\t<p className=\"text-sm leading-5 text-slate-400\">{copyright}</p>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{social && social.length > 0 && (\n\t\t\t\t\t\t\t\t<div className=\"flex space-x-6\">\n\t\t\t\t\t\t\t\t\t{social.map((item, index) => (\n\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\tkey={index.toString()}\n\t\t\t\t\t\t\t\t\t\t\thref={item.href}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"text-slate-400 hover:text-slate-300\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">{item.platform}</span>\n\t\t\t\t\t\t\t\t\t\t\t{item.icon ?? item.platform}\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</footer>\n\t);\n}\n\n/**\n * Site props including header and footer configuration\n *\n * Both header and footer can be either:\n * - A config object (will render the built-in Header/Footer components)\n * - A ReactNode (will render the custom component directly)\n */\nexport interface SolarSiteProps {\n\t/** Site display name */\n\tname?: string;\n\t/** Primary domain (e.g., \"example.com.ai\") */\n\tdomain?: string;\n\t/** Theme mode */\n\ttheme?: \"light\" | \"dark\" | \"system\";\n\t/** Header configuration or custom header ReactNode */\n\theader: SolarHeaderProps | ReactNode;\n\t/** Footer configuration or custom footer ReactNode */\n\tfooter: SolarFooterProps | ReactNode;\n\t/** Child content */\n\tchildren?: ReactNode;\n}\n\n/**\n * Site component\n *\n * Root wrapper for the solar template. Provides header and footer\n * layout with theme support.\n *\n * @example\n * ```tsx\n * <Site\n * name=\"My Site\"\n * header={{\n * logo: <Logo />,\n * nav: [{ label: 'Home', href: '/' }],\n * }}\n * footer={{\n * logo: <Logo />,\n * links: [\n * { title: 'Company', links: [{ label: 'About', href: '/about' }] }\n * ],\n * copyright: '2024 My Company',\n * }}\n * >\n * <LandingPage {...} />\n * </Site>\n * ```\n */\nexport function Site({\n\tname: _name,\n\tdomain: _domain,\n\ttheme,\n\theader,\n\tfooter,\n\tchildren,\n}: SolarSiteProps) {\n\t// Check if header/footer are ReactNodes or config objects\n\tconst isHeaderNode = isValidElement(header);\n\tconst isFooterNode = isValidElement(footer);\n\n\treturn (\n\t\t<div className=\"min-h-screen flex flex-col\" data-theme={theme}>\n\t\t\t{isHeaderNode ? header : <Header {...(header as SolarHeaderProps)} />}\n\t\t\t<main className=\"flex-1\">{children}</main>\n\t\t\t{isFooterNode ? footer : <Footer {...(footer as SolarFooterProps)} />}\n\t\t</div>\n\t);\n}\n","/**\n * Solar Template - Minimal Landing Page\n *\n * Implements SiteComponents interface for minimal landing pages.\n *\n * @example\n * ```tsx\n * import { components, LandingPage, Site } from '@mdxui/tremor/solar'\n *\n * // Use SiteComponents interface\n * const { Site, LandingPage, Hero, Header, Footer } = components\n *\n * // Or use layout components directly\n * <Site\n * name=\"My Site\"\n * header={{ logo: <Logo />, nav: [...] }}\n * footer={{ logo: <Logo />, links: [...] }}\n * >\n * <LandingPage\n * hero={{ title: 'Build faster', callToAction: 'Get Started' }}\n * features={{ features: [...] }}\n * />\n * </Site>\n *\n * // Or use individual components\n * <HeroGradient\n * headline=\"Build faster\"\n * subheadline=\"Ship with confidence\"\n * cta={{ primary: 'Get Started', primaryAction: '/signup' }}\n * />\n * ```\n */\n\nexport * from \"./components\";\nexport * from \"./layouts\";\n\nimport type { SiteComponents } from \"mdxui\";\nimport { CTA } from \"./components/cta\";\nimport { Features } from \"./components/features\";\nimport { Footer } from \"./components/footer\";\nimport { Header } from \"./components/header\";\n// Import components for SiteComponents interface\nimport { Hero, HeroGradient, HeroMinimal } from \"./components/hero\";\nimport { LandingPage } from \"./layouts/landing-page\";\nimport { Site } from \"./layouts/site\";\n\n/**\n * SiteComponents interface implementation for Solar template.\n * Provides core layout components for marketing landing pages.\n *\n * Note: Some components use Solar-specific prop patterns (e.g., HeroProps with headline/subheadline)\n * rather than the mdxui standard (title/subtitle). Use these components directly or map props as needed.\n */\nexport const components = {\n\t// Layout components (required by SiteComponents)\n\tSite,\n\tHeader,\n\tFooter,\n\tLandingPage,\n\n\t// Section components\n\tHero,\n\tHeroMinimal,\n\tHeroGradient,\n\tFeatures,\n\tCTA,\n\n\t// Page component (using LandingPage as default Page)\n\tPage: LandingPage,\n} as const;\n\n/**\n * Type-safe SiteComponents export for mdxui integration.\n * Cast to any to avoid type mismatch with Solar-specific props.\n */\nexport const siteComponents = components as unknown as Partial<SiteComponents>;\n"],"mappings":"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","names":["jsx","jsxs","twMerge","jsx","jsxs","DefaultLink","twMerge","jsx","jsxs","DefaultLink","twMerge","jsx","jsxs","DefaultLink","resolveAction","jsx","jsxs","isValidElement","jsx","jsxs","Header","Footer"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mdxui/tremor",
|
|
3
|
+
"version": "6.0.0",
|
|
4
|
+
"description": "Tremor template wrappers implementing the mdxui interface - analytics dashboards, landing pages, and marketing sites",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"author": "dot.do",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/dot-do/ui.git",
|
|
12
|
+
"directory": "packages/tremor"
|
|
13
|
+
},
|
|
14
|
+
"homepage": "https://mdxui.dev",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/dot-do/ui/issues"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"mdxui",
|
|
20
|
+
"tremor",
|
|
21
|
+
"react",
|
|
22
|
+
"dashboard",
|
|
23
|
+
"analytics",
|
|
24
|
+
"charts",
|
|
25
|
+
"components"
|
|
26
|
+
],
|
|
27
|
+
"main": "./dist/index.js",
|
|
28
|
+
"module": "./dist/index.js",
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"exports": {
|
|
31
|
+
".": {
|
|
32
|
+
"types": "./dist/index.d.ts",
|
|
33
|
+
"import": "./dist/index.js"
|
|
34
|
+
},
|
|
35
|
+
"./shared": {
|
|
36
|
+
"types": "./dist/shared/index.d.ts",
|
|
37
|
+
"import": "./dist/shared/index.js"
|
|
38
|
+
},
|
|
39
|
+
"./insights": {
|
|
40
|
+
"types": "./dist/insights/index.d.ts",
|
|
41
|
+
"import": "./dist/insights/index.js"
|
|
42
|
+
},
|
|
43
|
+
"./insights/components": {
|
|
44
|
+
"types": "./dist/insights/components/index.d.ts",
|
|
45
|
+
"import": "./dist/insights/components/index.js"
|
|
46
|
+
},
|
|
47
|
+
"./dashboard": {
|
|
48
|
+
"types": "./dist/dashboard/index.d.ts",
|
|
49
|
+
"import": "./dist/dashboard/index.js"
|
|
50
|
+
},
|
|
51
|
+
"./dashboard/components": {
|
|
52
|
+
"types": "./dist/dashboard/components/index.d.ts",
|
|
53
|
+
"import": "./dist/dashboard/components/index.js"
|
|
54
|
+
},
|
|
55
|
+
"./overview": {
|
|
56
|
+
"types": "./dist/overview/index.d.ts",
|
|
57
|
+
"import": "./dist/overview/index.js"
|
|
58
|
+
},
|
|
59
|
+
"./overview/components": {
|
|
60
|
+
"types": "./dist/overview/components/index.d.ts",
|
|
61
|
+
"import": "./dist/overview/components/index.js"
|
|
62
|
+
},
|
|
63
|
+
"./solar": {
|
|
64
|
+
"types": "./dist/solar/index.d.ts",
|
|
65
|
+
"import": "./dist/solar/index.js"
|
|
66
|
+
},
|
|
67
|
+
"./solar/components": {
|
|
68
|
+
"types": "./dist/solar/components/index.d.ts",
|
|
69
|
+
"import": "./dist/solar/components/index.js"
|
|
70
|
+
},
|
|
71
|
+
"./database": {
|
|
72
|
+
"types": "./dist/database/index.d.ts",
|
|
73
|
+
"import": "./dist/database/index.js"
|
|
74
|
+
},
|
|
75
|
+
"./database/pages": {
|
|
76
|
+
"types": "./dist/database/pages/index.d.ts",
|
|
77
|
+
"import": "./dist/database/pages/index.js"
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"files": [
|
|
81
|
+
"dist",
|
|
82
|
+
"README.md"
|
|
83
|
+
],
|
|
84
|
+
"devDependencies": {
|
|
85
|
+
"@playwright/test": "^1.40.0",
|
|
86
|
+
"@testing-library/jest-dom": "^6.6.3",
|
|
87
|
+
"@testing-library/react": "^16.1.0",
|
|
88
|
+
"@types/react": "^19.2.7",
|
|
89
|
+
"@types/react-dom": "^19.2.3",
|
|
90
|
+
"@vitejs/plugin-react": "^4.3.4",
|
|
91
|
+
"jsdom": "^25.0.1",
|
|
92
|
+
"tsup": "^8.0.0",
|
|
93
|
+
"typescript": "5.9.3",
|
|
94
|
+
"vitest": "^2.1.8",
|
|
95
|
+
"@mdxui/dashboard-panels": "6.0.0",
|
|
96
|
+
"@mdxui/primitives": "6.0.0",
|
|
97
|
+
"@mdxui/typescript-config": "6.0.0",
|
|
98
|
+
"mdxui": "6.0.0"
|
|
99
|
+
},
|
|
100
|
+
"dependencies": {
|
|
101
|
+
"@tanstack/react-table": "^8.20.6",
|
|
102
|
+
"recharts": "^3.5.1",
|
|
103
|
+
"tailwind-merge": "^2.0.0"
|
|
104
|
+
},
|
|
105
|
+
"peerDependencies": {
|
|
106
|
+
"@mdxui/primitives": ">=0.0.0",
|
|
107
|
+
"@tremor/react": ">=3.0.0",
|
|
108
|
+
"mdxui": ">=6.0.0",
|
|
109
|
+
"react": "^18.0.0 || ^19.0.0"
|
|
110
|
+
},
|
|
111
|
+
"peerDependenciesMeta": {
|
|
112
|
+
"@mdxui/primitives": {
|
|
113
|
+
"optional": false
|
|
114
|
+
},
|
|
115
|
+
"@tremor/react": {
|
|
116
|
+
"optional": false
|
|
117
|
+
},
|
|
118
|
+
"mdxui": {
|
|
119
|
+
"optional": false
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
"publishConfig": {
|
|
123
|
+
"access": "public"
|
|
124
|
+
},
|
|
125
|
+
"scripts": {
|
|
126
|
+
"build": "tsup",
|
|
127
|
+
"typecheck": "tsc --noEmit",
|
|
128
|
+
"clean": "rm -rf dist .turbo node_modules",
|
|
129
|
+
"test": "vitest run",
|
|
130
|
+
"test:watch": "vitest",
|
|
131
|
+
"test:visual": "playwright test",
|
|
132
|
+
"test:visual:update": "playwright test --update-snapshots",
|
|
133
|
+
"test:visual:ui": "playwright test --ui"
|
|
134
|
+
}
|
|
135
|
+
}
|