@opensite/ui 0.1.3 → 0.1.4
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.cjs +1501 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.cts +13 -0
- package/dist/components.d.ts +13 -0
- package/dist/components.js +1489 -1
- package/dist/components.js.map +1 -1
- package/dist/footer-animated-social.cjs +272 -0
- package/dist/footer-animated-social.cjs.map +1 -0
- package/dist/footer-animated-social.d.cts +41 -0
- package/dist/footer-animated-social.d.ts +41 -0
- package/dist/footer-animated-social.js +250 -0
- package/dist/footer-animated-social.js.map +1 -0
- package/dist/footer-background-card.cjs +149 -0
- package/dist/footer-background-card.cjs.map +1 -0
- package/dist/footer-background-card.d.cts +74 -0
- package/dist/footer-background-card.d.ts +74 -0
- package/dist/footer-background-card.js +147 -0
- package/dist/footer-background-card.js.map +1 -0
- package/dist/footer-brand-description.cjs +244 -0
- package/dist/footer-brand-description.cjs.map +1 -0
- package/dist/footer-brand-description.d.cts +65 -0
- package/dist/footer-brand-description.d.ts +65 -0
- package/dist/footer-brand-description.js +222 -0
- package/dist/footer-brand-description.js.map +1 -0
- package/dist/footer-contact-card.cjs +238 -0
- package/dist/footer-contact-card.cjs.map +1 -0
- package/dist/footer-contact-card.d.cts +65 -0
- package/dist/footer-contact-card.d.ts +65 -0
- package/dist/footer-contact-card.js +216 -0
- package/dist/footer-contact-card.js.map +1 -0
- package/dist/footer-cta-banner.cjs +282 -0
- package/dist/footer-cta-banner.cjs.map +1 -0
- package/dist/footer-cta-banner.d.cts +77 -0
- package/dist/footer-cta-banner.d.ts +77 -0
- package/dist/footer-cta-banner.js +260 -0
- package/dist/footer-cta-banner.js.map +1 -0
- package/dist/footer-cta-social.cjs +221 -0
- package/dist/footer-cta-social.cjs.map +1 -0
- package/dist/footer-cta-social.d.cts +45 -0
- package/dist/footer-cta-social.d.ts +45 -0
- package/dist/footer-cta-social.js +199 -0
- package/dist/footer-cta-social.js.map +1 -0
- package/dist/footer-links-grid.cjs +119 -0
- package/dist/footer-links-grid.cjs.map +1 -0
- package/dist/footer-links-grid.d.cts +54 -0
- package/dist/footer-links-grid.d.ts +54 -0
- package/dist/footer-links-grid.js +117 -0
- package/dist/footer-links-grid.js.map +1 -0
- package/dist/footer-nav-social.cjs +273 -0
- package/dist/footer-nav-social.cjs.map +1 -0
- package/dist/footer-nav-social.d.cts +72 -0
- package/dist/footer-nav-social.d.ts +72 -0
- package/dist/footer-nav-social.js +251 -0
- package/dist/footer-nav-social.js.map +1 -0
- package/dist/footer-newsletter-grid.cjs +271 -0
- package/dist/footer-newsletter-grid.cjs.map +1 -0
- package/dist/footer-newsletter-grid.d.cts +74 -0
- package/dist/footer-newsletter-grid.d.ts +74 -0
- package/dist/footer-newsletter-grid.js +249 -0
- package/dist/footer-newsletter-grid.js.map +1 -0
- package/dist/footer-newsletter-minimal.cjs +271 -0
- package/dist/footer-newsletter-minimal.cjs.map +1 -0
- package/dist/footer-newsletter-minimal.d.cts +57 -0
- package/dist/footer-newsletter-minimal.d.ts +57 -0
- package/dist/footer-newsletter-minimal.js +249 -0
- package/dist/footer-newsletter-minimal.js.map +1 -0
- package/dist/footer-simple-centered.cjs +101 -0
- package/dist/footer-simple-centered.cjs.map +1 -0
- package/dist/footer-simple-centered.d.cts +52 -0
- package/dist/footer-simple-centered.d.ts +52 -0
- package/dist/footer-simple-centered.js +99 -0
- package/dist/footer-simple-centered.js.map +1 -0
- package/dist/footer-social-apps.cjs +247 -0
- package/dist/footer-social-apps.cjs.map +1 -0
- package/dist/footer-social-apps.d.cts +75 -0
- package/dist/footer-social-apps.d.ts +75 -0
- package/dist/footer-social-apps.js +225 -0
- package/dist/footer-social-apps.js.map +1 -0
- package/dist/footer-social-newsletter.cjs +267 -0
- package/dist/footer-social-newsletter.cjs.map +1 -0
- package/dist/footer-social-newsletter.d.cts +68 -0
- package/dist/footer-social-newsletter.d.ts +68 -0
- package/dist/footer-social-newsletter.js +245 -0
- package/dist/footer-social-newsletter.js.map +1 -0
- package/dist/index.cjs +1501 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +1489 -1
- package/dist/index.js.map +1 -1
- package/dist/registry.cjs +1971 -1
- package/dist/registry.cjs.map +1 -1
- package/dist/registry.js +1971 -1
- package/dist/registry.js.map +1 -1
- package/dist/team-media-showcase.cjs +182 -0
- package/dist/team-media-showcase.cjs.map +1 -0
- package/dist/team-media-showcase.d.cts +145 -0
- package/dist/team-media-showcase.d.ts +145 -0
- package/dist/team-media-showcase.js +160 -0
- package/dist/team-media-showcase.js.map +1 -0
- package/package.json +71 -1
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../lib/utils.ts","../components/ui/container.tsx","../components/ui/section.tsx","../components/blocks/about/alternating-blocks.tsx","../components/blocks/cta/media-hover-ctas.tsx","../lib/button-variants.ts","../components/ui/button.tsx","../components/ui/dynamic-icon.tsx","../components/ui/carousel.tsx","../components/blocks/features/feature-showcase.tsx","../src/registry/blocks.ts"],"names":["React","jsx","jsxs","React3","iconName","api","useState","useEffect"],"mappings":"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","file":"registry.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { ContainerProps } from \"../../src/types\";\n\nconst maxWidthStyles = {\n sm: \"max-w-screen-sm\",\n md: \"max-w-screen-md\",\n lg: \"max-w-screen-lg\",\n xl: \"max-w-screen-xl\",\n \"2xl\": \"max-w-screen-2xl\",\n \"4xl\": \"max-w-[1536px]\",\n full: \"max-w-full\",\n};\n\n/**\n * Container component for consistent content width and centering\n *\n * @example\n * ```tsx\n * <Container maxWidth=\"xl\">\n * <h1>Page Content</h1>\n * </Container>\n * ```\n */\nexport const Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n ({ children, maxWidth = \"xl\", className, as = \"div\", ...props }, ref) => {\n const Component = as as any;\n return (\n <Component\n ref={ref}\n className={cn(\n \"mx-auto w-full px-4 sm:px-6 lg:px-8\",\n maxWidthStyles[maxWidth],\n className\n )}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\n\nContainer.displayName = \"Container\";\n","import React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Container } from \"./container\";\nimport type { SectionProps } from \"../../src/types\";\n\n/**\n * Background style variants\n * Uses standard Tailwind/shadcn CSS variables for theming\n */\nconst backgroundStyles = {\n white: \"bg-background text-foreground\",\n gray: \"bg-muted/30 text-foreground\",\n dark: \"bg-foreground text-background\",\n gradient: \"bg-gradient-to-br from-primary via-primary/90 to-foreground text-primary-foreground\",\n primary: \"bg-primary text-primary-foreground\",\n secondary: \"bg-secondary text-secondary-foreground\",\n muted: \"bg-muted text-muted-foreground\",\n};\n\n/**\n * Vertical spacing variants\n */\nconst spacingStyles = {\n sm: \"py-12 md:py-16\",\n md: \"py-16 md:py-24\",\n lg: \"py-20 md:py-32\",\n xl: \"py-24 md:py-40\",\n};\n\n/**\n * Section component for consistent page sections with optional title, subtitle, and background\n *\n * @example\n * ```tsx\n * <Section\n * title=\"Our Services\"\n * subtitle=\"What we offer\"\n * background=\"gray\"\n * spacing=\"lg\"\n * >\n * <div>Section content goes here</div>\n * </Section>\n * ```\n */\nexport const Section = React.forwardRef<HTMLElement, SectionProps>(\n (\n {\n id,\n title,\n subtitle,\n children,\n className,\n style,\n background = \"white\",\n spacing = \"lg\",\n ...props\n },\n ref\n ) => {\n return (\n <section\n ref={ref}\n id={id}\n className={cn(\n backgroundStyles[background],\n spacingStyles[spacing],\n className\n )}\n style={style}\n {...props}\n >\n <Container>\n {(title || subtitle) && (\n <div className=\"text-center mb-12 md:mb-16\">\n {subtitle && (\n <p className=\"text-sm font-semibold uppercase tracking-wider mb-2 text-primary\">\n {subtitle}\n </p>\n )}\n {title && (\n <h2 className=\"text-3xl md:text-4xl lg:text-5xl font-bold tracking-tight\">\n {title}\n </h2>\n )}\n </div>\n )}\n {children}\n </Container>\n </section>\n );\n }\n);\n\nSection.displayName = \"Section\";\n","import * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Section } from \"../../ui/section\";\nimport type { SectionBackground, SectionSpacing } from \"../../../src/types\";\n\nexport interface AlternatingBlockSection {\n content: React.ReactNode;\n media: React.ReactNode;\n mediaLeft?: boolean;\n}\n\nexport interface AlternatingBlocksProps {\n /**\n * Array of sections to display with alternating layout\n */\n sections: AlternatingBlockSection[];\n /**\n * Section title (optional)\n */\n title?: string;\n /**\n * Section subtitle/eyebrow (optional)\n */\n subtitle?: string;\n /**\n * Background style variant\n * @default \"white\"\n */\n background?: SectionBackground;\n /**\n * Vertical spacing variant\n * @default \"lg\"\n */\n spacing?: SectionSpacing;\n /**\n * Additional CSS classes for the Section wrapper\n */\n className?: string;\n /**\n * Additional CSS classes for the content container\n */\n contentClassName?: string;\n}\n\n/**\n * AlternatingBlocks component displays content sections with alternating media placement.\n * Uses the Section component for consistent spacing, backgrounds, and optional titles.\n *\n * @example\n * ```tsx\n * <AlternatingBlocks\n * title=\"Our Story\"\n * subtitle=\"About Us\"\n * background=\"gray\"\n * spacing=\"xl\"\n * sections={[\n * {\n * content: <div><h3>Title</h3><p>Description</p></div>,\n * media: <img src=\"...\" alt=\"...\" />,\n * mediaLeft: false\n * }\n * ]}\n * />\n * ```\n */\nexport function AlternatingBlocks({\n sections,\n title,\n subtitle,\n background = \"white\",\n spacing = \"lg\",\n className,\n contentClassName,\n}: AlternatingBlocksProps) {\n return (\n <Section\n title={title}\n subtitle={subtitle}\n background={background}\n spacing={spacing}\n className={className}\n >\n <div className={cn(\"mx-auto w-full max-w-[900px]\", contentClassName)}>\n <div className=\"space-y-12\">\n {sections?.map((section, index) => (\n <div\n key={index}\n className=\"grid items-center gap-8 md:grid-cols-2 md:gap-12\"\n >\n <div className={section.mediaLeft ? \"md:order-2\" : \"\"}>\n {section.content}\n </div>\n\n <div\n className={cn(\n \"aspect-4/3 overflow-hidden rounded-lg border\",\n section.mediaLeft ? \"md:order-1\" : \"\",\n )}\n >\n <div className=\"flex h-full w-full items-center justify-center\">\n {section.media}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </Section>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Img } from \"@page-speed/img\";\n\nexport interface MediaHoverCtaItem {\n /**\n * Content to render inside the CTA card.\n */\n content?: React.ReactNode;\n /**\n * Image URL to reveal on hover (optional).\n */\n onHoverImgSrc?: string;\n /**\n * Additional classes for the hover image.\n */\n imgHoverClassName?: string;\n /**\n * Alt text for the hover image (leave empty for decorative images).\n */\n altText?: string;\n /**\n * Optional href to make the card a link.\n */\n cardHref?: string;\n /**\n * Initial background color (CSS color value or CSS variable).\n * Example: \"#111\" or \"var(--brand-900)\".\n */\n initialBackgroundColor?: string;\n /**\n * Hover background color (CSS color value or CSS variable).\n * Applied only when onHoverImgSrc is not provided.\n */\n onHoverBackgroundColor?: string;\n}\n\nexport type MediaHoverCtaType = MediaHoverCtaItem;\n\nexport interface MediaHoverCtasProps {\n /**\n * Additional classes for the section wrapper.\n */\n sectionClassName?: string;\n /**\n * Additional classes for the grid container.\n */\n gridClassName?: string;\n /**\n * CTA items to render.\n */\n items?: MediaHoverCtaItem[];\n /**\n * Optional Optix Flow configuration for @page-speed/img.\n */\n optixFlowConfig?: {\n apiKey: string;\n compression?: number;\n };\n}\n\n/**\n * MediaHoverCtas displays a two-column CTA grid with hover media reveals.\n *\n * Each card can show a hover image or a hover background color while keeping\n * content customizable via React nodes.\n *\n * @example\n * ```tsx\n * <MediaHoverCtas\n * items={[\n * {\n * content: <div><h3>Our Mission</h3><p>...</p></div>,\n * onHoverImgSrc: \"/mission.jpg\",\n * altText: \"Our Mission\"\n * },\n * {\n * content: <div><h3>Our Vision</h3><p>...</p></div>,\n * initialBackgroundColor: \"var(--brand-100)\",\n * onHoverBackgroundColor: \"var(--brand-900)\"\n * }\n * ]}\n * />\n * ```\n */\nexport function MediaHoverCtas(\n props: MediaHoverCtasProps\n): React.JSX.Element {\n const { sectionClassName, gridClassName, items, optixFlowConfig } = props;\n const resolvedItems = items ?? [];\n\n return (\n <section className={cn(\"py-32\", sectionClassName)}>\n <div\n className={cn(\n \"grid min-h-100 grid-cols-1 gap-1 lg:grid-cols-2\",\n gridClassName\n )}\n >\n {resolvedItems.map((item, index) => {\n const CardComponent: React.ElementType = item.cardHref ? \"a\" : \"div\";\n const hasHoverImage = Boolean(item.onHoverImgSrc);\n const applyHoverBackground = Boolean(\n item.onHoverBackgroundColor && !hasHoverImage\n );\n const cardStyle =\n item.initialBackgroundColor || applyHoverBackground\n ? ({\n ...(item.initialBackgroundColor\n ? { \"--media-hover-cta-bg\": item.initialBackgroundColor }\n : {}),\n ...(applyHoverBackground\n ? {\n \"--media-hover-cta-hover-bg\":\n item.onHoverBackgroundColor,\n }\n : {}),\n } as React.CSSProperties)\n : undefined;\n const baseBackgroundClassName = item.initialBackgroundColor\n ? \"bg-[var(--media-hover-cta-bg)]\"\n : \"bg-muted-foreground/10\";\n const hoverBackgroundClassName = applyHoverBackground\n ? \"group-hover:bg-[var(--media-hover-cta-hover-bg)]\"\n : \"\";\n const hoverImageAltText = item.altText ?? \"\";\n\n return (\n <CardComponent\n key={index}\n {...(item.cardHref ? { href: item.cardHref } : {})}\n className={cn(\n \"group relative flex min-h-100 cursor-pointer items-center overflow-hidden justify-start p-10 transition-colors duration-500\",\n index % 2 === 0\n ? \"md:justify-center\"\n : \"md:justify-start md:pl-24\",\n baseBackgroundClassName,\n hoverBackgroundClassName\n )}\n style={cardStyle}\n >\n {item.onHoverImgSrc ? (\n <Img\n src={item.onHoverImgSrc}\n alt={hoverImageAltText}\n aria-hidden={item.altText ? undefined : true}\n className={cn(\n \"absolute top-0 left-0 z-[-1] h-full w-full object-cover opacity-0 transition-opacity duration-500 group-hover:opacity-100\",\n item.imgHoverClassName\n )}\n loading=\"lazy\"\n optixFlowConfig={optixFlowConfig}\n />\n ) : null}\n\n {item.content}\n </CardComponent>\n );\n })}\n </div>\n </section>\n );\n}\n","import { cva } from \"class-variance-authority\";\n\n/**\n * Button variants using class-variance-authority (cva).\n *\n * This is extracted to a separate file to avoid importing @radix-ui/react-slot\n * when only the variants are needed (e.g., in Pressable component).\n *\n * ## CSS Variable Reference\n *\n * ### Master Button Variables (apply to all variants)\n * - `--button-font-family` - Font family (default: inherit)\n * - `--button-font-weight` - Font weight (default: 500)\n * - `--button-letter-spacing` - Letter spacing (default: 0)\n * - `--button-line-height` - Line height (default: 1.25)\n * - `--button-text-transform` - Text transform (default: none)\n * - `--button-transition` - Transition timing (default: all 250ms cubic-bezier(0.4, 0, 0.2, 1))\n * - `--button-radius` - Border radius (default: var(--radius, 0.375rem))\n * - `--button-shadow` - Default box shadow (default: none)\n * - `--button-shadow-hover` - Hover box shadow (default: none)\n *\n * ### Size Variables\n * - `--button-height-sm/md/lg` - Button heights\n * - `--button-padding-x-sm/md/lg` - Horizontal padding\n * - `--button-padding-y-sm/md/lg` - Vertical padding\n *\n * ### Per-Variant Variables (replace {variant} with: default, destructive, outline, secondary, ghost, link)\n * - `--button-{variant}-bg` - Background color\n * - `--button-{variant}-fg` - Text/foreground color\n * - `--button-{variant}-border` - Border color\n * - `--button-{variant}-border-width` - Border width\n * - `--button-{variant}-hover-bg` - Hover background color\n * - `--button-{variant}-hover-fg` - Hover text color\n * - `--button-{variant}-hover-border` - Hover border color\n * - `--button-{variant}-shadow` - Box shadow (overrides master)\n * - `--button-{variant}-shadow-hover` - Hover box shadow (overrides master)\n */\n\n// Base styles applied to all buttons - includes master typography, transition, and layout\nconst baseStyles = [\n // Layout\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap shrink-0\",\n // Typography - using CSS variables with sensible defaults\n \"font-[var(--button-font-family,inherit)]\",\n \"font-[var(--button-font-weight,500)]\",\n \"tracking-[var(--button-letter-spacing,0)]\",\n \"leading-[var(--button-line-height,1.25)]\",\n \"[text-transform:var(--button-text-transform,none)]\",\n \"text-sm\",\n // Border radius\n \"rounded-[var(--button-radius,var(--radius,0.375rem))]\",\n // Smooth transition - using [transition:...] to set full shorthand property (not just transition-property)\n \"[transition:var(--button-transition,all_250ms_cubic-bezier(0.4,0,0.2,1))]\",\n // Box shadow (master level) - using [box-shadow:...] for complex multi-value shadows\n \"[box-shadow:var(--button-shadow,none)]\",\n \"hover:[box-shadow:var(--button-shadow-hover,var(--button-shadow,none))]\",\n // Disabled state\n \"disabled:pointer-events-none disabled:opacity-50\",\n // SVG handling\n \"[&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0\",\n // Focus styles\n \"outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n // Invalid state\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n].join(\" \");\n\nexport const buttonVariants = cva(baseStyles, {\n variants: {\n variant: {\n // Default (Primary) variant - full customization\n default: [\n \"bg-[var(--button-default-bg,hsl(var(--primary)))]\",\n \"text-[var(--button-default-fg,hsl(var(--primary-foreground)))]\",\n \"border-[length:var(--button-default-border-width,0px)]\",\n \"border-[color:var(--button-default-border,transparent)]\",\n \"[box-shadow:var(--button-default-shadow,var(--button-shadow,none))]\",\n \"hover:bg-[var(--button-default-hover-bg,hsl(var(--primary)/0.9))]\",\n \"hover:text-[var(--button-default-hover-fg,var(--button-default-fg,hsl(var(--primary-foreground))))]\",\n \"hover:border-[color:var(--button-default-hover-border,var(--button-default-border,transparent))]\",\n \"hover:[box-shadow:var(--button-default-shadow-hover,var(--button-shadow-hover,var(--button-default-shadow,var(--button-shadow,none))))]\",\n ].join(\" \"),\n\n // Destructive variant - full customization\n destructive: [\n \"bg-[var(--button-destructive-bg,hsl(var(--destructive)))]\",\n \"text-[var(--button-destructive-fg,white)]\",\n \"border-[length:var(--button-destructive-border-width,0px)]\",\n \"border-[color:var(--button-destructive-border,transparent)]\",\n \"[box-shadow:var(--button-destructive-shadow,var(--button-shadow,none))]\",\n \"hover:bg-[var(--button-destructive-hover-bg,hsl(var(--destructive)/0.9))]\",\n \"hover:text-[var(--button-destructive-hover-fg,var(--button-destructive-fg,white))]\",\n \"hover:border-[color:var(--button-destructive-hover-border,var(--button-destructive-border,transparent))]\",\n \"hover:[box-shadow:var(--button-destructive-shadow-hover,var(--button-shadow-hover,var(--button-destructive-shadow,var(--button-shadow,none))))]\",\n \"focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40\",\n \"dark:bg-destructive/60\",\n ].join(\" \"),\n\n // Outline variant - full customization with proper border handling\n outline: [\n \"bg-[var(--button-outline-bg,hsl(var(--background)))]\",\n \"text-[var(--button-outline-fg,inherit)]\",\n \"border-[length:var(--button-outline-border-width,1px)]\",\n \"border-[color:var(--button-outline-border,hsl(var(--border)))]\",\n \"[box-shadow:var(--button-outline-shadow,var(--button-shadow,0_1px_2px_0_rgb(0_0_0/0.05)))]\",\n \"hover:bg-[var(--button-outline-hover-bg,hsl(var(--accent)))]\",\n \"hover:text-[var(--button-outline-hover-fg,hsl(var(--accent-foreground)))]\",\n \"hover:border-[color:var(--button-outline-hover-border,var(--button-outline-border,hsl(var(--border))))]\",\n \"hover:[box-shadow:var(--button-outline-shadow-hover,var(--button-shadow-hover,var(--button-outline-shadow,var(--button-shadow,none))))]\",\n \"dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n ].join(\" \"),\n\n // Secondary variant - full customization\n secondary: [\n \"bg-[var(--button-secondary-bg,hsl(var(--secondary)))]\",\n \"text-[var(--button-secondary-fg,hsl(var(--secondary-foreground)))]\",\n \"border-[length:var(--button-secondary-border-width,0px)]\",\n \"border-[color:var(--button-secondary-border,transparent)]\",\n \"[box-shadow:var(--button-secondary-shadow,var(--button-shadow,none))]\",\n \"hover:bg-[var(--button-secondary-hover-bg,hsl(var(--secondary)/0.8))]\",\n \"hover:text-[var(--button-secondary-hover-fg,var(--button-secondary-fg,hsl(var(--secondary-foreground))))]\",\n \"hover:border-[color:var(--button-secondary-hover-border,var(--button-secondary-border,transparent))]\",\n \"hover:[box-shadow:var(--button-secondary-shadow-hover,var(--button-shadow-hover,var(--button-secondary-shadow,var(--button-shadow,none))))]\",\n ].join(\" \"),\n\n // Ghost variant - full customization\n ghost: [\n \"bg-[var(--button-ghost-bg,transparent)]\",\n \"text-[var(--button-ghost-fg,inherit)]\",\n \"border-[length:var(--button-ghost-border-width,0px)]\",\n \"border-[color:var(--button-ghost-border,transparent)]\",\n \"[box-shadow:var(--button-ghost-shadow,var(--button-shadow,none))]\",\n \"hover:bg-[var(--button-ghost-hover-bg,hsl(var(--accent)))]\",\n \"hover:text-[var(--button-ghost-hover-fg,hsl(var(--accent-foreground)))]\",\n \"hover:border-[color:var(--button-ghost-hover-border,var(--button-ghost-border,transparent))]\",\n \"hover:[box-shadow:var(--button-ghost-shadow-hover,var(--button-shadow-hover,var(--button-ghost-shadow,var(--button-shadow,none))))]\",\n \"dark:hover:bg-accent/50\",\n ].join(\" \"),\n\n // Link variant - full customization\n link: [\n \"bg-[var(--button-link-bg,transparent)]\",\n \"text-[var(--button-link-fg,hsl(var(--primary)))]\",\n \"border-[length:var(--button-link-border-width,0px)]\",\n \"border-[color:var(--button-link-border,transparent)]\",\n \"[box-shadow:var(--button-link-shadow,none)]\",\n \"hover:bg-[var(--button-link-hover-bg,transparent)]\",\n \"hover:text-[var(--button-link-hover-fg,var(--button-link-fg,hsl(var(--primary))))]\",\n \"hover:[box-shadow:var(--button-link-shadow-hover,none)]\",\n \"underline-offset-4 hover:underline\",\n ].join(\" \"),\n },\n size: {\n default: [\n \"h-[var(--button-height-md,2.25rem)]\",\n \"px-[var(--button-padding-x-md,1rem)]\",\n \"py-[var(--button-padding-y-md,0.5rem)]\",\n \"has-[>svg]:px-[calc(var(--button-padding-x-md,1rem)*0.75)]\",\n ].join(\" \"),\n sm: [\n \"h-[var(--button-height-sm,2rem)]\",\n \"px-[var(--button-padding-x-sm,0.75rem)]\",\n \"py-[var(--button-padding-y-sm,0.25rem)]\",\n \"gap-1.5\",\n \"has-[>svg]:px-[calc(var(--button-padding-x-sm,0.75rem)*0.83)]\",\n ].join(\" \"),\n md: [\n \"h-[var(--button-height-md,2.25rem)]\",\n \"px-[var(--button-padding-x-md,1rem)]\",\n \"py-[var(--button-padding-y-md,0.5rem)]\",\n \"has-[>svg]:px-[calc(var(--button-padding-x-md,1rem)*0.75)]\",\n ].join(\" \"),\n lg: [\n \"h-[var(--button-height-lg,2.5rem)]\",\n \"px-[var(--button-padding-x-lg,1.5rem)]\",\n \"py-[var(--button-padding-y-lg,0.5rem)]\",\n \"has-[>svg]:px-[calc(var(--button-padding-x-lg,1.5rem)*0.67)]\",\n ].join(\" \"),\n icon: \"size-[var(--button-height-md,2.25rem)]\",\n \"icon-sm\": \"size-[var(--button-height-sm,2rem)]\",\n \"icon-lg\": \"size-[var(--button-height-lg,2.5rem)]\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n});\n\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { buttonVariants } from \"../../lib/button-variants\"\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\ninterface DynamicIconProps {\n /**\n * Icon name in format: prefix/name or prefix:name\n * Examples: \"lucide/home\", \"mdi:account\", \"heroicons/check\"\n */\n name: string;\n /**\n * Icon size in pixels\n * @default 28\n */\n size?: number;\n /**\n * Icon color - accepts any valid CSS color\n * Note: When not specified, the icon inherits color from parent via CSS currentColor\n */\n color?: string;\n /**\n * Additional CSS classes\n */\n className?: string;\n /**\n * Alt text for accessibility\n */\n alt?: string;\n}\n\n// Simple in-memory cache for fetched SVGs\nconst svgCache = new Map<string, string>();\n\n/**\n * Lightweight icon component that dynamically loads SVG icons from icons.opensite.ai API.\n *\n * Features:\n * - Pulls SVGs from https://icons.opensite.ai API and inlines them for CSS color inheritance\n * - Supports currentColor - icons inherit color from parent element\n * - Accepts prefix/name or prefix:name format\n * - Customizable size and explicit color via props\n * - In-memory caching to prevent duplicate fetches\n *\n * @example\n * ```tsx\n * // Icon inherits color from parent (recommended for hover states, etc.)\n * <span className=\"text-white hover:text-red-500\">\n * <DynamicIcon name=\"lucide/home\" size={24} />\n * </span>\n *\n * // Icon with explicit color\n * <DynamicIcon name=\"mdi:account\" size={32} color=\"#ff0000\" />\n * ```\n */\nexport function DynamicIcon({\n name,\n size = 28,\n color,\n className,\n alt,\n}: DynamicIconProps) {\n const [svgContent, setSvgContent] = React.useState<string | null>(null);\n const [isLoading, setIsLoading] = React.useState(true);\n const [error, setError] = React.useState<string | null>(null);\n\n const { url, iconName } = React.useMemo(() => {\n const separator = name.includes(\"/\") ? \"/\" : \":\";\n const [prefix, iconName] = name.split(separator);\n // Don't pass color to API - we'll handle it via CSS\n const baseUrl = `https://icons.opensite.ai/api/icon/${prefix}/${iconName}?format=svg&width=${size}&height=${size}`;\n\n return {\n url: baseUrl,\n iconName,\n };\n }, [name, size]);\n\n React.useEffect(() => {\n let isMounted = true;\n\n const fetchSvg = async () => {\n // Check cache first\n const cached = svgCache.get(url);\n if (cached) {\n if (isMounted) {\n setSvgContent(cached);\n setIsLoading(false);\n }\n return;\n }\n\n try {\n setIsLoading(true);\n setError(null);\n\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch icon: ${response.status}`);\n }\n\n let svg = await response.text();\n\n // Process SVG to ensure currentColor works:\n // 1. Replace any hardcoded colors with currentColor\n // 2. Ensure stroke/fill use currentColor where appropriate\n svg = processSvgForCurrentColor(svg);\n\n // Cache the processed SVG\n svgCache.set(url, svg);\n\n if (isMounted) {\n setSvgContent(svg);\n setIsLoading(false);\n }\n } catch (err) {\n if (isMounted) {\n setError(err instanceof Error ? err.message : \"Failed to load icon\");\n setIsLoading(false);\n }\n }\n };\n\n fetchSvg();\n\n return () => {\n isMounted = false;\n };\n }, [url]);\n\n // Loading state - show placeholder with same dimensions\n if (isLoading) {\n return (\n <span\n className={cn(\"inline-block\", className)}\n style={{ width: size, height: size }}\n aria-hidden=\"true\"\n />\n );\n }\n\n // Error state - show nothing or fallback\n if (error || !svgContent) {\n return (\n <span\n className={cn(\"inline-block\", className)}\n style={{ width: size, height: size }}\n role=\"img\"\n aria-label={alt || iconName}\n />\n );\n }\n\n // Render inline SVG\n // The color prop applies an explicit color, otherwise inherits from parent via currentColor\n return (\n <span\n className={cn(\"inline-flex items-center justify-center\", className)}\n style={{\n width: size,\n height: size,\n color: color || \"inherit\",\n }}\n role=\"img\"\n aria-label={alt || iconName}\n dangerouslySetInnerHTML={{ __html: svgContent }}\n />\n );\n}\n\n/**\n * Process SVG to ensure it uses currentColor for proper CSS inheritance.\n * This handles various icon libraries that may use different color approaches.\n */\nfunction processSvgForCurrentColor(svg: string): string {\n // Replace stroke=\"currentColor\" is already correct, but ensure fill also works\n // Some icons use fill=\"none\" with stroke, others use fill with no stroke\n\n // Ensure the SVG doesn't have hardcoded colors that should be currentColor\n // Common patterns to replace:\n // - stroke=\"#000\" or stroke=\"#000000\" or stroke=\"black\" -> stroke=\"currentColor\"\n // - fill=\"#000\" or fill=\"#000000\" or fill=\"black\" -> fill=\"currentColor\"\n\n let processed = svg;\n\n // Replace common black color values with currentColor for stroke\n processed = processed.replace(\n /stroke=[\"'](#000000|#000|black)[\"']/gi,\n 'stroke=\"currentColor\"'\n );\n\n // Replace common black color values with currentColor for fill\n // But be careful not to replace fill=\"none\"\n processed = processed.replace(\n /fill=[\"'](#000000|#000|black)[\"']/gi,\n 'fill=\"currentColor\"'\n );\n\n return processed;\n}\n","import * as React from \"react\";\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\";\n\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\nimport { DynamicIcon } from \"./dynamic-icon\";\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n orientation?: \"horizontal\" | \"vertical\";\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n\n return context;\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext]\n );\n\n React.useEffect(() => {\n if (!api || !setApi) return;\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) return;\n onSelect(api);\n api.on(\"reInit\", onSelect);\n api.on(\"select\", onSelect);\n\n return () => {\n api?.off(\"select\", onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation:\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div\n ref={carouselRef}\n className=\"overflow-hidden\"\n data-slot=\"carousel-content\"\n >\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\",\n className\n )}\n {...props}\n />\n </div>\n );\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -left-12 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <DynamicIcon name=\"lucide/arrow-left\" />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n}\n\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -right-12 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <DynamicIcon name=\"lucide/arrow-right\" />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n};\n","\"use client\";\n\nimport { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport {\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n} from \"../../ui/carousel\";\n\nexport interface FeatureShowcaseItem {\n content: ReactNode;\n mediaComponent: ReactNode;\n}\n\nexport interface FeatureShowcaseProps {\n items: FeatureShowcaseItem[];\n children?: ReactNode;\n className?: string;\n carouselClassName?: string;\n slideClassName?: string;\n contentClassName?: string;\n mediaClassName?: string;\n arrowClassName?: string;\n equalizeOnMobile?: boolean;\n stretchMediaOnMobile?: boolean;\n}\n\n/**\n * Feature Showcase component with carousel navigation\n *\n * Displays feature content with media in a carousel format. Each slide shows\n * content (text, headings) alongside media (images, videos). Features mobile\n * height equalization for consistent slide heights and customizable styling.\n *\n * @example\n * ```tsx\n * <FeatureShowcase\n * items={[\n * {\n * content: <div><h3>Feature 1</h3><p>Description</p></div>,\n * mediaComponent: <img src=\"/feature1.jpg\" alt=\"Feature 1\" />\n * },\n * {\n * content: <div><h3>Feature 2</h3><p>Description</p></div>,\n * mediaComponent: <img src=\"/feature2.jpg\" alt=\"Feature 2\" />\n * }\n * ]}\n * />\n * ```\n */\nexport function FeatureShowcase({\n items,\n children,\n className,\n carouselClassName,\n slideClassName,\n contentClassName,\n mediaClassName,\n arrowClassName,\n equalizeOnMobile = true,\n stretchMediaOnMobile = true,\n}: FeatureShowcaseProps) {\n const baseArrowClassName =\n \"bottom-4 top-auto size-12 translate-y-0 rounded-full border border-current bg-transparent text-current shadow-sm focus:ring-current focus:ring-offset-2 focus:ring-offset-transparent hover:bg-current/10 md:bottom-6\";\n const [mobileSlideHeight, setMobileSlideHeight] = useState<number | null>(\n null\n );\n const slideRefs = useRef<Array<HTMLDivElement | null>>([]);\n const mediaWrapperClassName =\n equalizeOnMobile && stretchMediaOnMobile\n ? \"flex-1 min-h-0 md:flex-none\"\n : \"\";\n\n useEffect(() => {\n if (!equalizeOnMobile) {\n setMobileSlideHeight(null);\n return;\n }\n\n const updateHeights = () => {\n if (typeof window === \"undefined\") return;\n const isMobile = window.innerWidth < 768;\n\n if (!isMobile) {\n setMobileSlideHeight(null);\n return;\n }\n\n const heights = slideRefs.current\n .slice(0, items.length)\n .map((node) => node?.offsetHeight ?? 0);\n const maxHeight = Math.max(...heights, 0);\n\n if (maxHeight > 0) {\n setMobileSlideHeight((prev) =>\n prev === maxHeight ? prev : maxHeight\n );\n }\n };\n\n updateHeights();\n window.addEventListener(\"resize\", updateHeights);\n\n let resizeObserver: ResizeObserver | null = null;\n if (typeof ResizeObserver !== \"undefined\") {\n resizeObserver = new ResizeObserver(updateHeights);\n slideRefs.current.slice(0, items.length).forEach((node) => {\n if (node) resizeObserver?.observe(node);\n });\n }\n\n return () => {\n window.removeEventListener(\"resize\", updateHeights);\n resizeObserver?.disconnect();\n };\n }, [equalizeOnMobile, items.length]);\n\n return (\n <div className={className}>\n {children}\n <Carousel className={carouselClassName}>\n <div className=\"pb-18 md:pb-24\">\n <CarouselContent className=\"ease-in\">\n {items.map((item, itemIndex) => (\n <CarouselItem key={`slide-${itemIndex}`}>\n <div\n ref={(node) => {\n slideRefs.current[itemIndex] = node;\n }}\n style={\n equalizeOnMobile && mobileSlideHeight\n ? { minHeight: mobileSlideHeight }\n : undefined\n }\n className={cn(\n \"flex flex-col gap-8 md:gap-14 md:flex-row md:items-center md:justify-between\",\n slideClassName\n )}\n >\n <div className={cn(\"w-full\", contentClassName)}>\n {item.content}\n </div>\n <div\n className={cn(\n \"w-full\",\n mediaWrapperClassName,\n mediaClassName\n )}\n >\n {item.mediaComponent}\n </div>\n </div>\n </CarouselItem>\n ))}\n </CarouselContent>\n </div>\n <CarouselPrevious\n className={cn(baseArrowClassName, \"left-4 md:left-6\", arrowClassName)}\n />\n <CarouselNext\n className={cn(baseArrowClassName, \"right-4 md:right-6\", arrowClassName)}\n />\n </Carousel>\n </div>\n );\n}\n","/**\n * Semantic Block Registry\n *\n * This registry maps semantic concepts to available UI blocks for AI-driven\n * site generation. Each block entry contains:\n * - id: Unique identifier for the block\n * - name: Human-readable name\n * - description: What the block does and when to use it\n * - semanticTags: Array of semantic concepts this block represents\n * - category: Block category (about, features, cta, testimonials, etc.)\n * - component: Reference to the actual component\n * - props: TypeScript type for the component's props\n * - exampleUsage: Code example showing how to use the block\n */\n\nimport { AlternatingBlocks } from \"../../components/blocks/about/alternating-blocks\";\nimport type { AlternatingBlocksProps } from \"../../components/blocks/about/alternating-blocks\";\nimport { MediaHoverCtas } from \"../../components/blocks/cta/media-hover-ctas\";\nimport type { MediaHoverCtasProps } from \"../../components/blocks/cta/media-hover-ctas\";\nimport { FeatureShowcase } from \"../../components/blocks/features/feature-showcase\";\nimport type { FeatureShowcaseProps } from \"../../components/blocks/features/feature-showcase\";\n\nexport interface BlockRegistryEntry<T = any> {\n id: string;\n name: string;\n description: string;\n semanticTags: string[];\n category: BlockCategory;\n component: React.ComponentType<T>;\n props: string;\n exampleUsage: string;\n}\n\nexport type BlockCategory =\n | \"about\"\n | \"features\"\n | \"cta\"\n | \"testimonials\"\n | \"services\"\n | \"hero\"\n | \"footer\"\n | \"header\"\n | \"pricing\"\n | \"team\"\n | \"stats\"\n | \"faq\"\n | \"contact\"\n | \"gallery\"\n | \"timeline\"\n | \"process\"\n | \"benefits\"\n | \"comparison\";\n\n/**\n * Block Registry - Central registry of all available UI blocks\n */\nexport const BLOCK_REGISTRY: Record<string, BlockRegistryEntry> = {\n \"alternating-blocks\": {\n id: \"alternating-blocks\",\n name: \"Alternating Content Blocks\",\n description:\n \"Display content sections with alternating left/right media placement. Ideal for storytelling, feature showcases, or company history sections.\",\n semanticTags: [\n \"about\",\n \"story\",\n \"history\",\n \"timeline\",\n \"features\",\n \"benefits\",\n \"alternating\",\n \"two-column\",\n \"content-media\",\n ],\n category: \"about\",\n component: AlternatingBlocks,\n props: \"AlternatingBlocksProps\",\n exampleUsage: `\n<AlternatingBlocks\n sections={[\n {\n content: (\n <div>\n <div className=\"flex items-center gap-2 mb-3\">\n <Lightbulb className=\"h-4 w-4 text-primary\" />\n <span className=\"text-sm font-medium text-muted-foreground\">\n The Origin\n </span>\n </div>\n <h3 className=\"mb-3 text-2xl font-semibold tracking-tight\">\n It started with frustration\n </h3>\n <p className=\"text-muted-foreground leading-relaxed\">\n We spent years watching teams drown in tools that promised to help\n but only added complexity. In 2018, we decided to build something better.\n </p>\n </div>\n ),\n media: <img src=\"...\" alt=\"...\" />,\n mediaLeft: false\n },\n {\n content: <div>...</div>,\n media: <img src=\"...\" alt=\"...\" />,\n mediaLeft: true\n }\n ]}\n/>\n `.trim(),\n },\n \"media-hover-ctas\": {\n id: \"media-hover-ctas\",\n name: \"Media Hover CTAs\",\n description:\n \"Display CTA cards that reveal background imagery or color on hover. Ideal for mission/vision tiles, service highlights, or campaign prompts.\",\n semanticTags: [\n \"cta\",\n \"call-to-action\",\n \"hover\",\n \"media\",\n \"cards\",\n \"grid\",\n \"image-hover\",\n \"tiles\",\n \"mission\",\n \"vision\",\n ],\n category: \"cta\",\n component: MediaHoverCtas,\n props: \"MediaHoverCtasProps\",\n exampleUsage: `\n<MediaHoverCtas\n items={[\n {\n content: (\n <div className=\"flex max-w-sm flex-col gap-4\">\n <span className=\"text-sm font-semibold uppercase tracking-wide text-primary\">\n Our Mission\n </span>\n <p className=\"text-muted-foreground\">\n Deliver remarkable experiences with thoughtful design.\n </p>\n </div>\n ),\n onHoverImgSrc: \"/images/mission.jpg\",\n altText: \"Our Mission\"\n },\n {\n content: (\n <div className=\"flex max-w-sm flex-col gap-4\">\n <span className=\"text-sm font-semibold uppercase tracking-wide text-primary\">\n Our Vision\n </span>\n <p className=\"text-muted-foreground\">\n Build the future of adaptive customer experiences.\n </p>\n </div>\n ),\n initialBackgroundColor: \"var(--brand-100)\",\n onHoverBackgroundColor: \"var(--brand-900)\"\n }\n ]}\n/>\n `.trim(),\n },\n \"feature-showcase\": {\n id: \"feature-showcase\",\n name: \"Feature Showcase Carousel\",\n description:\n \"Display feature content with media in an interactive carousel format. Each slide shows feature content alongside images or videos with smooth navigation. Features mobile height equalization for consistent appearance.\",\n semanticTags: [\n \"features\",\n \"carousel\",\n \"showcase\",\n \"slider\",\n \"highlights\",\n \"product-features\",\n \"capabilities\",\n \"interactive\",\n \"media-gallery\",\n ],\n category: \"features\",\n component: FeatureShowcase,\n props: \"FeatureShowcaseProps\",\n exampleUsage: `\n<FeatureShowcase\n items={[\n {\n content: (\n <div>\n <span className=\"text-sm font-medium text-primary mb-2 block\">\n DESIGNED TO HELP YOU GROW\n </span>\n <h3 className=\"mb-4 text-3xl font-bold tracking-tight\">\n Powerful Analytics\n </h3>\n <p className=\"text-muted-foreground leading-relaxed\">\n Track every metric that matters with real-time dashboards\n and comprehensive reporting tools.\n </p>\n </div>\n ),\n mediaComponent: <img src=\"...\" alt=\"Analytics Dashboard\" className=\"rounded-lg\" />\n },\n {\n content: (\n <div>\n <span className=\"text-sm font-medium text-primary mb-2 block\">\n SEAMLESS INTEGRATION\n </span>\n <h3 className=\"mb-4 text-3xl font-bold tracking-tight\">\n Connect Anywhere\n </h3>\n <p className=\"text-muted-foreground leading-relaxed\">\n Integrate with your favorite tools and platforms in seconds.\n </p>\n </div>\n ),\n mediaComponent: <img src=\"...\" alt=\"Integrations\" className=\"rounded-lg\" />\n }\n ]}\n/>\n `.trim(),\n },\n // Add more blocks here following this pattern\n};\n\n/**\n * Get blocks by semantic tag\n */\nexport function getBlocksBySemanticTag(tag: string): BlockRegistryEntry[] {\n return Object.values(BLOCK_REGISTRY).filter((block) =>\n block.semanticTags.includes(tag)\n );\n}\n\n/**\n * Get blocks by category\n */\nexport function getBlocksByCategory(\n category: BlockCategory\n): BlockRegistryEntry[] {\n return Object.values(BLOCK_REGISTRY).filter(\n (block) => block.category === category\n );\n}\n\n/**\n * Get block by ID\n */\nexport function getBlockById(id: string): BlockRegistryEntry | undefined {\n return BLOCK_REGISTRY[id];\n}\n\n/**\n * Get all available blocks\n */\nexport function getAllBlocks(): BlockRegistryEntry[] {\n return Object.values(BLOCK_REGISTRY);\n}\n\n/**\n * Get all categories\n */\nexport function getAllCategories(): BlockCategory[] {\n return Array.from(\n new Set(Object.values(BLOCK_REGISTRY).map((block) => block.category))\n );\n}\n\n/**\n * Search blocks by query (searches name, description, and semantic tags)\n */\nexport function searchBlocks(query: string): BlockRegistryEntry[] {\n const lowercaseQuery = query.toLowerCase();\n return Object.values(BLOCK_REGISTRY).filter(\n (block) =>\n block.name.toLowerCase().includes(lowercaseQuery) ||\n block.description.toLowerCase().includes(lowercaseQuery) ||\n block.semanticTags.some((tag) =>\n tag.toLowerCase().includes(lowercaseQuery)\n )\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../lib/utils.ts","../components/ui/container.tsx","../components/ui/section.tsx","../components/blocks/about/alternating-blocks.tsx","../components/blocks/cta/media-hover-ctas.tsx","../lib/button-variants.ts","../components/ui/button.tsx","../components/ui/dynamic-icon.tsx","../components/ui/carousel.tsx","../components/blocks/features/feature-showcase.tsx","../components/blocks/team/team-media-showcase.tsx","../components/blocks/footers/footer-links-grid.tsx","../components/blocks/footers/footer-social-newsletter.tsx","../components/blocks/footers/footer-social-apps.tsx","../components/blocks/footers/footer-simple-centered.tsx","../components/blocks/footers/footer-brand-description.tsx","../components/blocks/footers/footer-newsletter-grid.tsx","../components/blocks/footers/footer-cta-banner.tsx","../components/blocks/footers/footer-contact-card.tsx","../components/blocks/footers/footer-background-card.tsx","../components/blocks/footers/footer-animated-social.tsx","../components/blocks/footers/footer-newsletter-minimal.tsx","../components/blocks/footers/footer-cta-social.tsx","../components/blocks/footers/footer-nav-social.tsx","../src/registry/blocks.ts"],"names":["React","jsx","jsxs","React3","iconName","api","useState","useEffect","React5","Img","defaultSections","defaultSocialLinks","defaultBottomLinks","defaultLegalLinks","defaultMenuItems","defaultNavLinks","motion","React6"],"mappings":"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","file":"registry.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { ContainerProps } from \"../../src/types\";\n\nconst maxWidthStyles = {\n sm: \"max-w-screen-sm\",\n md: \"max-w-screen-md\",\n lg: \"max-w-screen-lg\",\n xl: \"max-w-screen-xl\",\n \"2xl\": \"max-w-screen-2xl\",\n \"4xl\": \"max-w-[1536px]\",\n full: \"max-w-full\",\n};\n\n/**\n * Container component for consistent content width and centering\n *\n * @example\n * ```tsx\n * <Container maxWidth=\"xl\">\n * <h1>Page Content</h1>\n * </Container>\n * ```\n */\nexport const Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n ({ children, maxWidth = \"xl\", className, as = \"div\", ...props }, ref) => {\n const Component = as as any;\n return (\n <Component\n ref={ref}\n className={cn(\n \"mx-auto w-full px-4 sm:px-6 lg:px-8\",\n maxWidthStyles[maxWidth],\n className\n )}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\n\nContainer.displayName = \"Container\";\n","import React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Container } from \"./container\";\nimport type { SectionProps } from \"../../src/types\";\n\n/**\n * Background style variants\n * Uses standard Tailwind/shadcn CSS variables for theming\n */\nconst backgroundStyles = {\n white: \"bg-background text-foreground\",\n gray: \"bg-muted/30 text-foreground\",\n dark: \"bg-foreground text-background\",\n gradient: \"bg-gradient-to-br from-primary via-primary/90 to-foreground text-primary-foreground\",\n primary: \"bg-primary text-primary-foreground\",\n secondary: \"bg-secondary text-secondary-foreground\",\n muted: \"bg-muted text-muted-foreground\",\n};\n\n/**\n * Vertical spacing variants\n */\nconst spacingStyles = {\n sm: \"py-12 md:py-16\",\n md: \"py-16 md:py-24\",\n lg: \"py-20 md:py-32\",\n xl: \"py-24 md:py-40\",\n};\n\n/**\n * Section component for consistent page sections with optional title, subtitle, and background\n *\n * @example\n * ```tsx\n * <Section\n * title=\"Our Services\"\n * subtitle=\"What we offer\"\n * background=\"gray\"\n * spacing=\"lg\"\n * >\n * <div>Section content goes here</div>\n * </Section>\n * ```\n */\nexport const Section = React.forwardRef<HTMLElement, SectionProps>(\n (\n {\n id,\n title,\n subtitle,\n children,\n className,\n style,\n background = \"white\",\n spacing = \"lg\",\n ...props\n },\n ref\n ) => {\n return (\n <section\n ref={ref}\n id={id}\n className={cn(\n backgroundStyles[background],\n spacingStyles[spacing],\n className\n )}\n style={style}\n {...props}\n >\n <Container>\n {(title || subtitle) && (\n <div className=\"text-center mb-12 md:mb-16\">\n {subtitle && (\n <p className=\"text-sm font-semibold uppercase tracking-wider mb-2 text-primary\">\n {subtitle}\n </p>\n )}\n {title && (\n <h2 className=\"text-3xl md:text-4xl lg:text-5xl font-bold tracking-tight\">\n {title}\n </h2>\n )}\n </div>\n )}\n {children}\n </Container>\n </section>\n );\n }\n);\n\nSection.displayName = \"Section\";\n","import * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Section } from \"../../ui/section\";\nimport type { SectionBackground, SectionSpacing } from \"../../../src/types\";\n\nexport interface AlternatingBlockSection {\n content: React.ReactNode;\n media: React.ReactNode;\n mediaLeft?: boolean;\n}\n\nexport interface AlternatingBlocksProps {\n /**\n * Array of sections to display with alternating layout\n */\n sections: AlternatingBlockSection[];\n /**\n * Section title (optional)\n */\n title?: string;\n /**\n * Section subtitle/eyebrow (optional)\n */\n subtitle?: string;\n /**\n * Background style variant\n * @default \"white\"\n */\n background?: SectionBackground;\n /**\n * Vertical spacing variant\n * @default \"lg\"\n */\n spacing?: SectionSpacing;\n /**\n * Additional CSS classes for the Section wrapper\n */\n className?: string;\n /**\n * Additional CSS classes for the content container\n */\n contentClassName?: string;\n}\n\n/**\n * AlternatingBlocks component displays content sections with alternating media placement.\n * Uses the Section component for consistent spacing, backgrounds, and optional titles.\n *\n * @example\n * ```tsx\n * <AlternatingBlocks\n * title=\"Our Story\"\n * subtitle=\"About Us\"\n * background=\"gray\"\n * spacing=\"xl\"\n * sections={[\n * {\n * content: <div><h3>Title</h3><p>Description</p></div>,\n * media: <img src=\"...\" alt=\"...\" />,\n * mediaLeft: false\n * }\n * ]}\n * />\n * ```\n */\nexport function AlternatingBlocks({\n sections,\n title,\n subtitle,\n background = \"white\",\n spacing = \"lg\",\n className,\n contentClassName,\n}: AlternatingBlocksProps) {\n return (\n <Section\n title={title}\n subtitle={subtitle}\n background={background}\n spacing={spacing}\n className={className}\n >\n <div className={cn(\"mx-auto w-full max-w-[900px]\", contentClassName)}>\n <div className=\"space-y-12\">\n {sections?.map((section, index) => (\n <div\n key={index}\n className=\"grid items-center gap-8 md:grid-cols-2 md:gap-12\"\n >\n <div className={section.mediaLeft ? \"md:order-2\" : \"\"}>\n {section.content}\n </div>\n\n <div\n className={cn(\n \"aspect-4/3 overflow-hidden rounded-lg border\",\n section.mediaLeft ? \"md:order-1\" : \"\",\n )}\n >\n <div className=\"flex h-full w-full items-center justify-center\">\n {section.media}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </Section>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Img } from \"@page-speed/img\";\n\nexport interface MediaHoverCtaItem {\n /**\n * Content to render inside the CTA card.\n */\n content?: React.ReactNode;\n /**\n * Image URL to reveal on hover (optional).\n */\n onHoverImgSrc?: string;\n /**\n * Additional classes for the hover image.\n */\n imgHoverClassName?: string;\n /**\n * Alt text for the hover image (leave empty for decorative images).\n */\n altText?: string;\n /**\n * Optional href to make the card a link.\n */\n cardHref?: string;\n /**\n * Initial background color (CSS color value or CSS variable).\n * Example: \"#111\" or \"var(--brand-900)\".\n */\n initialBackgroundColor?: string;\n /**\n * Hover background color (CSS color value or CSS variable).\n * Applied only when onHoverImgSrc is not provided.\n */\n onHoverBackgroundColor?: string;\n}\n\nexport type MediaHoverCtaType = MediaHoverCtaItem;\n\nexport interface MediaHoverCtasProps {\n /**\n * Additional classes for the section wrapper.\n */\n sectionClassName?: string;\n /**\n * Additional classes for the grid container.\n */\n gridClassName?: string;\n /**\n * CTA items to render.\n */\n items?: MediaHoverCtaItem[];\n /**\n * Optional Optix Flow configuration for @page-speed/img.\n */\n optixFlowConfig?: {\n apiKey: string;\n compression?: number;\n };\n}\n\n/**\n * MediaHoverCtas displays a two-column CTA grid with hover media reveals.\n *\n * Each card can show a hover image or a hover background color while keeping\n * content customizable via React nodes.\n *\n * @example\n * ```tsx\n * <MediaHoverCtas\n * items={[\n * {\n * content: <div><h3>Our Mission</h3><p>...</p></div>,\n * onHoverImgSrc: \"/mission.jpg\",\n * altText: \"Our Mission\"\n * },\n * {\n * content: <div><h3>Our Vision</h3><p>...</p></div>,\n * initialBackgroundColor: \"var(--brand-100)\",\n * onHoverBackgroundColor: \"var(--brand-900)\"\n * }\n * ]}\n * />\n * ```\n */\nexport function MediaHoverCtas(\n props: MediaHoverCtasProps\n): React.JSX.Element {\n const { sectionClassName, gridClassName, items, optixFlowConfig } = props;\n const resolvedItems = items ?? [];\n\n return (\n <section className={cn(\"py-32\", sectionClassName)}>\n <div\n className={cn(\n \"grid min-h-100 grid-cols-1 gap-1 lg:grid-cols-2\",\n gridClassName\n )}\n >\n {resolvedItems.map((item, index) => {\n const CardComponent: React.ElementType = item.cardHref ? \"a\" : \"div\";\n const hasHoverImage = Boolean(item.onHoverImgSrc);\n const applyHoverBackground = Boolean(\n item.onHoverBackgroundColor && !hasHoverImage\n );\n const cardStyle =\n item.initialBackgroundColor || applyHoverBackground\n ? ({\n ...(item.initialBackgroundColor\n ? { \"--media-hover-cta-bg\": item.initialBackgroundColor }\n : {}),\n ...(applyHoverBackground\n ? {\n \"--media-hover-cta-hover-bg\":\n item.onHoverBackgroundColor,\n }\n : {}),\n } as React.CSSProperties)\n : undefined;\n const baseBackgroundClassName = item.initialBackgroundColor\n ? \"bg-[var(--media-hover-cta-bg)]\"\n : \"bg-muted-foreground/10\";\n const hoverBackgroundClassName = applyHoverBackground\n ? \"group-hover:bg-[var(--media-hover-cta-hover-bg)]\"\n : \"\";\n const hoverImageAltText = item.altText ?? \"\";\n\n return (\n <CardComponent\n key={index}\n {...(item.cardHref ? { href: item.cardHref } : {})}\n className={cn(\n \"group relative flex min-h-100 cursor-pointer items-center overflow-hidden justify-start p-10 transition-colors duration-500\",\n index % 2 === 0\n ? \"md:justify-center\"\n : \"md:justify-start md:pl-24\",\n baseBackgroundClassName,\n hoverBackgroundClassName\n )}\n style={cardStyle}\n >\n {item.onHoverImgSrc ? (\n <Img\n src={item.onHoverImgSrc}\n alt={hoverImageAltText}\n aria-hidden={item.altText ? undefined : true}\n className={cn(\n \"absolute top-0 left-0 z-[-1] h-full w-full object-cover opacity-0 transition-opacity duration-500 group-hover:opacity-100\",\n item.imgHoverClassName\n )}\n loading=\"lazy\"\n optixFlowConfig={optixFlowConfig}\n />\n ) : null}\n\n {item.content}\n </CardComponent>\n );\n })}\n </div>\n </section>\n );\n}\n","import { cva } from \"class-variance-authority\";\n\n/**\n * Button variants using class-variance-authority (cva).\n *\n * This is extracted to a separate file to avoid importing @radix-ui/react-slot\n * when only the variants are needed (e.g., in Pressable component).\n *\n * ## CSS Variable Reference\n *\n * ### Master Button Variables (apply to all variants)\n * - `--button-font-family` - Font family (default: inherit)\n * - `--button-font-weight` - Font weight (default: 500)\n * - `--button-letter-spacing` - Letter spacing (default: 0)\n * - `--button-line-height` - Line height (default: 1.25)\n * - `--button-text-transform` - Text transform (default: none)\n * - `--button-transition` - Transition timing (default: all 250ms cubic-bezier(0.4, 0, 0.2, 1))\n * - `--button-radius` - Border radius (default: var(--radius, 0.375rem))\n * - `--button-shadow` - Default box shadow (default: none)\n * - `--button-shadow-hover` - Hover box shadow (default: none)\n *\n * ### Size Variables\n * - `--button-height-sm/md/lg` - Button heights\n * - `--button-padding-x-sm/md/lg` - Horizontal padding\n * - `--button-padding-y-sm/md/lg` - Vertical padding\n *\n * ### Per-Variant Variables (replace {variant} with: default, destructive, outline, secondary, ghost, link)\n * - `--button-{variant}-bg` - Background color\n * - `--button-{variant}-fg` - Text/foreground color\n * - `--button-{variant}-border` - Border color\n * - `--button-{variant}-border-width` - Border width\n * - `--button-{variant}-hover-bg` - Hover background color\n * - `--button-{variant}-hover-fg` - Hover text color\n * - `--button-{variant}-hover-border` - Hover border color\n * - `--button-{variant}-shadow` - Box shadow (overrides master)\n * - `--button-{variant}-shadow-hover` - Hover box shadow (overrides master)\n */\n\n// Base styles applied to all buttons - includes master typography, transition, and layout\nconst baseStyles = [\n // Layout\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap shrink-0\",\n // Typography - using CSS variables with sensible defaults\n \"font-[var(--button-font-family,inherit)]\",\n \"font-[var(--button-font-weight,500)]\",\n \"tracking-[var(--button-letter-spacing,0)]\",\n \"leading-[var(--button-line-height,1.25)]\",\n \"[text-transform:var(--button-text-transform,none)]\",\n \"text-sm\",\n // Border radius\n \"rounded-[var(--button-radius,var(--radius,0.375rem))]\",\n // Smooth transition - using [transition:...] to set full shorthand property (not just transition-property)\n \"[transition:var(--button-transition,all_250ms_cubic-bezier(0.4,0,0.2,1))]\",\n // Box shadow (master level) - using [box-shadow:...] for complex multi-value shadows\n \"[box-shadow:var(--button-shadow,none)]\",\n \"hover:[box-shadow:var(--button-shadow-hover,var(--button-shadow,none))]\",\n // Disabled state\n \"disabled:pointer-events-none disabled:opacity-50\",\n // SVG handling\n \"[&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0\",\n // Focus styles\n \"outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n // Invalid state\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n].join(\" \");\n\nexport const buttonVariants = cva(baseStyles, {\n variants: {\n variant: {\n // Default (Primary) variant - full customization\n default: [\n \"bg-[var(--button-default-bg,hsl(var(--primary)))]\",\n \"text-[var(--button-default-fg,hsl(var(--primary-foreground)))]\",\n \"border-[length:var(--button-default-border-width,0px)]\",\n \"border-[color:var(--button-default-border,transparent)]\",\n \"[box-shadow:var(--button-default-shadow,var(--button-shadow,none))]\",\n \"hover:bg-[var(--button-default-hover-bg,hsl(var(--primary)/0.9))]\",\n \"hover:text-[var(--button-default-hover-fg,var(--button-default-fg,hsl(var(--primary-foreground))))]\",\n \"hover:border-[color:var(--button-default-hover-border,var(--button-default-border,transparent))]\",\n \"hover:[box-shadow:var(--button-default-shadow-hover,var(--button-shadow-hover,var(--button-default-shadow,var(--button-shadow,none))))]\",\n ].join(\" \"),\n\n // Destructive variant - full customization\n destructive: [\n \"bg-[var(--button-destructive-bg,hsl(var(--destructive)))]\",\n \"text-[var(--button-destructive-fg,white)]\",\n \"border-[length:var(--button-destructive-border-width,0px)]\",\n \"border-[color:var(--button-destructive-border,transparent)]\",\n \"[box-shadow:var(--button-destructive-shadow,var(--button-shadow,none))]\",\n \"hover:bg-[var(--button-destructive-hover-bg,hsl(var(--destructive)/0.9))]\",\n \"hover:text-[var(--button-destructive-hover-fg,var(--button-destructive-fg,white))]\",\n \"hover:border-[color:var(--button-destructive-hover-border,var(--button-destructive-border,transparent))]\",\n \"hover:[box-shadow:var(--button-destructive-shadow-hover,var(--button-shadow-hover,var(--button-destructive-shadow,var(--button-shadow,none))))]\",\n \"focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40\",\n \"dark:bg-destructive/60\",\n ].join(\" \"),\n\n // Outline variant - full customization with proper border handling\n outline: [\n \"bg-[var(--button-outline-bg,hsl(var(--background)))]\",\n \"text-[var(--button-outline-fg,inherit)]\",\n \"border-[length:var(--button-outline-border-width,1px)]\",\n \"border-[color:var(--button-outline-border,hsl(var(--border)))]\",\n \"[box-shadow:var(--button-outline-shadow,var(--button-shadow,0_1px_2px_0_rgb(0_0_0/0.05)))]\",\n \"hover:bg-[var(--button-outline-hover-bg,hsl(var(--accent)))]\",\n \"hover:text-[var(--button-outline-hover-fg,hsl(var(--accent-foreground)))]\",\n \"hover:border-[color:var(--button-outline-hover-border,var(--button-outline-border,hsl(var(--border))))]\",\n \"hover:[box-shadow:var(--button-outline-shadow-hover,var(--button-shadow-hover,var(--button-outline-shadow,var(--button-shadow,none))))]\",\n \"dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n ].join(\" \"),\n\n // Secondary variant - full customization\n secondary: [\n \"bg-[var(--button-secondary-bg,hsl(var(--secondary)))]\",\n \"text-[var(--button-secondary-fg,hsl(var(--secondary-foreground)))]\",\n \"border-[length:var(--button-secondary-border-width,0px)]\",\n \"border-[color:var(--button-secondary-border,transparent)]\",\n \"[box-shadow:var(--button-secondary-shadow,var(--button-shadow,none))]\",\n \"hover:bg-[var(--button-secondary-hover-bg,hsl(var(--secondary)/0.8))]\",\n \"hover:text-[var(--button-secondary-hover-fg,var(--button-secondary-fg,hsl(var(--secondary-foreground))))]\",\n \"hover:border-[color:var(--button-secondary-hover-border,var(--button-secondary-border,transparent))]\",\n \"hover:[box-shadow:var(--button-secondary-shadow-hover,var(--button-shadow-hover,var(--button-secondary-shadow,var(--button-shadow,none))))]\",\n ].join(\" \"),\n\n // Ghost variant - full customization\n ghost: [\n \"bg-[var(--button-ghost-bg,transparent)]\",\n \"text-[var(--button-ghost-fg,inherit)]\",\n \"border-[length:var(--button-ghost-border-width,0px)]\",\n \"border-[color:var(--button-ghost-border,transparent)]\",\n \"[box-shadow:var(--button-ghost-shadow,var(--button-shadow,none))]\",\n \"hover:bg-[var(--button-ghost-hover-bg,hsl(var(--accent)))]\",\n \"hover:text-[var(--button-ghost-hover-fg,hsl(var(--accent-foreground)))]\",\n \"hover:border-[color:var(--button-ghost-hover-border,var(--button-ghost-border,transparent))]\",\n \"hover:[box-shadow:var(--button-ghost-shadow-hover,var(--button-shadow-hover,var(--button-ghost-shadow,var(--button-shadow,none))))]\",\n \"dark:hover:bg-accent/50\",\n ].join(\" \"),\n\n // Link variant - full customization\n link: [\n \"bg-[var(--button-link-bg,transparent)]\",\n \"text-[var(--button-link-fg,hsl(var(--primary)))]\",\n \"border-[length:var(--button-link-border-width,0px)]\",\n \"border-[color:var(--button-link-border,transparent)]\",\n \"[box-shadow:var(--button-link-shadow,none)]\",\n \"hover:bg-[var(--button-link-hover-bg,transparent)]\",\n \"hover:text-[var(--button-link-hover-fg,var(--button-link-fg,hsl(var(--primary))))]\",\n \"hover:[box-shadow:var(--button-link-shadow-hover,none)]\",\n \"underline-offset-4 hover:underline\",\n ].join(\" \"),\n },\n size: {\n default: [\n \"h-[var(--button-height-md,2.25rem)]\",\n \"px-[var(--button-padding-x-md,1rem)]\",\n \"py-[var(--button-padding-y-md,0.5rem)]\",\n \"has-[>svg]:px-[calc(var(--button-padding-x-md,1rem)*0.75)]\",\n ].join(\" \"),\n sm: [\n \"h-[var(--button-height-sm,2rem)]\",\n \"px-[var(--button-padding-x-sm,0.75rem)]\",\n \"py-[var(--button-padding-y-sm,0.25rem)]\",\n \"gap-1.5\",\n \"has-[>svg]:px-[calc(var(--button-padding-x-sm,0.75rem)*0.83)]\",\n ].join(\" \"),\n md: [\n \"h-[var(--button-height-md,2.25rem)]\",\n \"px-[var(--button-padding-x-md,1rem)]\",\n \"py-[var(--button-padding-y-md,0.5rem)]\",\n \"has-[>svg]:px-[calc(var(--button-padding-x-md,1rem)*0.75)]\",\n ].join(\" \"),\n lg: [\n \"h-[var(--button-height-lg,2.5rem)]\",\n \"px-[var(--button-padding-x-lg,1.5rem)]\",\n \"py-[var(--button-padding-y-lg,0.5rem)]\",\n \"has-[>svg]:px-[calc(var(--button-padding-x-lg,1.5rem)*0.67)]\",\n ].join(\" \"),\n icon: \"size-[var(--button-height-md,2.25rem)]\",\n \"icon-sm\": \"size-[var(--button-height-sm,2rem)]\",\n \"icon-lg\": \"size-[var(--button-height-lg,2.5rem)]\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n});\n\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { buttonVariants } from \"../../lib/button-variants\"\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\ninterface DynamicIconProps {\n /**\n * Icon name in format: prefix/name or prefix:name\n * Examples: \"lucide/home\", \"mdi:account\", \"heroicons/check\"\n */\n name: string;\n /**\n * Icon size in pixels\n * @default 28\n */\n size?: number;\n /**\n * Icon color - accepts any valid CSS color\n * Note: When not specified, the icon inherits color from parent via CSS currentColor\n */\n color?: string;\n /**\n * Additional CSS classes\n */\n className?: string;\n /**\n * Alt text for accessibility\n */\n alt?: string;\n}\n\n// Simple in-memory cache for fetched SVGs\nconst svgCache = new Map<string, string>();\n\n/**\n * Lightweight icon component that dynamically loads SVG icons from icons.opensite.ai API.\n *\n * Features:\n * - Pulls SVGs from https://icons.opensite.ai API and inlines them for CSS color inheritance\n * - Supports currentColor - icons inherit color from parent element\n * - Accepts prefix/name or prefix:name format\n * - Customizable size and explicit color via props\n * - In-memory caching to prevent duplicate fetches\n *\n * @example\n * ```tsx\n * // Icon inherits color from parent (recommended for hover states, etc.)\n * <span className=\"text-white hover:text-red-500\">\n * <DynamicIcon name=\"lucide/home\" size={24} />\n * </span>\n *\n * // Icon with explicit color\n * <DynamicIcon name=\"mdi:account\" size={32} color=\"#ff0000\" />\n * ```\n */\nexport function DynamicIcon({\n name,\n size = 28,\n color,\n className,\n alt,\n}: DynamicIconProps) {\n const [svgContent, setSvgContent] = React.useState<string | null>(null);\n const [isLoading, setIsLoading] = React.useState(true);\n const [error, setError] = React.useState<string | null>(null);\n\n const { url, iconName } = React.useMemo(() => {\n const separator = name.includes(\"/\") ? \"/\" : \":\";\n const [prefix, iconName] = name.split(separator);\n // Don't pass color to API - we'll handle it via CSS\n const baseUrl = `https://icons.opensite.ai/api/icon/${prefix}/${iconName}?format=svg&width=${size}&height=${size}`;\n\n return {\n url: baseUrl,\n iconName,\n };\n }, [name, size]);\n\n React.useEffect(() => {\n let isMounted = true;\n\n const fetchSvg = async () => {\n // Check cache first\n const cached = svgCache.get(url);\n if (cached) {\n if (isMounted) {\n setSvgContent(cached);\n setIsLoading(false);\n }\n return;\n }\n\n try {\n setIsLoading(true);\n setError(null);\n\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch icon: ${response.status}`);\n }\n\n let svg = await response.text();\n\n // Process SVG to ensure currentColor works:\n // 1. Replace any hardcoded colors with currentColor\n // 2. Ensure stroke/fill use currentColor where appropriate\n svg = processSvgForCurrentColor(svg);\n\n // Cache the processed SVG\n svgCache.set(url, svg);\n\n if (isMounted) {\n setSvgContent(svg);\n setIsLoading(false);\n }\n } catch (err) {\n if (isMounted) {\n setError(err instanceof Error ? err.message : \"Failed to load icon\");\n setIsLoading(false);\n }\n }\n };\n\n fetchSvg();\n\n return () => {\n isMounted = false;\n };\n }, [url]);\n\n // Loading state - show placeholder with same dimensions\n if (isLoading) {\n return (\n <span\n className={cn(\"inline-block\", className)}\n style={{ width: size, height: size }}\n aria-hidden=\"true\"\n />\n );\n }\n\n // Error state - show nothing or fallback\n if (error || !svgContent) {\n return (\n <span\n className={cn(\"inline-block\", className)}\n style={{ width: size, height: size }}\n role=\"img\"\n aria-label={alt || iconName}\n />\n );\n }\n\n // Render inline SVG\n // The color prop applies an explicit color, otherwise inherits from parent via currentColor\n return (\n <span\n className={cn(\"inline-flex items-center justify-center\", className)}\n style={{\n width: size,\n height: size,\n color: color || \"inherit\",\n }}\n role=\"img\"\n aria-label={alt || iconName}\n dangerouslySetInnerHTML={{ __html: svgContent }}\n />\n );\n}\n\n/**\n * Process SVG to ensure it uses currentColor for proper CSS inheritance.\n * This handles various icon libraries that may use different color approaches.\n */\nfunction processSvgForCurrentColor(svg: string): string {\n // Replace stroke=\"currentColor\" is already correct, but ensure fill also works\n // Some icons use fill=\"none\" with stroke, others use fill with no stroke\n\n // Ensure the SVG doesn't have hardcoded colors that should be currentColor\n // Common patterns to replace:\n // - stroke=\"#000\" or stroke=\"#000000\" or stroke=\"black\" -> stroke=\"currentColor\"\n // - fill=\"#000\" or fill=\"#000000\" or fill=\"black\" -> fill=\"currentColor\"\n\n let processed = svg;\n\n // Replace common black color values with currentColor for stroke\n processed = processed.replace(\n /stroke=[\"'](#000000|#000|black)[\"']/gi,\n 'stroke=\"currentColor\"'\n );\n\n // Replace common black color values with currentColor for fill\n // But be careful not to replace fill=\"none\"\n processed = processed.replace(\n /fill=[\"'](#000000|#000|black)[\"']/gi,\n 'fill=\"currentColor\"'\n );\n\n return processed;\n}\n","import * as React from \"react\";\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\";\n\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\nimport { DynamicIcon } from \"./dynamic-icon\";\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n orientation?: \"horizontal\" | \"vertical\";\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n\n return context;\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext]\n );\n\n React.useEffect(() => {\n if (!api || !setApi) return;\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) return;\n onSelect(api);\n api.on(\"reInit\", onSelect);\n api.on(\"select\", onSelect);\n\n return () => {\n api?.off(\"select\", onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation:\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div\n ref={carouselRef}\n className=\"overflow-hidden\"\n data-slot=\"carousel-content\"\n >\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\",\n className\n )}\n {...props}\n />\n </div>\n );\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -left-12 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <DynamicIcon name=\"lucide/arrow-left\" />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n}\n\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -right-12 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <DynamicIcon name=\"lucide/arrow-right\" />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n};\n","\"use client\";\n\nimport { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport {\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n} from \"../../ui/carousel\";\n\nexport interface FeatureShowcaseItem {\n content: ReactNode;\n mediaComponent: ReactNode;\n}\n\nexport interface FeatureShowcaseProps {\n items: FeatureShowcaseItem[];\n children?: ReactNode;\n className?: string;\n carouselClassName?: string;\n slideClassName?: string;\n contentClassName?: string;\n mediaClassName?: string;\n arrowClassName?: string;\n equalizeOnMobile?: boolean;\n stretchMediaOnMobile?: boolean;\n}\n\n/**\n * Feature Showcase component with carousel navigation\n *\n * Displays feature content with media in a carousel format. Each slide shows\n * content (text, headings) alongside media (images, videos). Features mobile\n * height equalization for consistent slide heights and customizable styling.\n *\n * @example\n * ```tsx\n * <FeatureShowcase\n * items={[\n * {\n * content: <div><h3>Feature 1</h3><p>Description</p></div>,\n * mediaComponent: <img src=\"/feature1.jpg\" alt=\"Feature 1\" />\n * },\n * {\n * content: <div><h3>Feature 2</h3><p>Description</p></div>,\n * mediaComponent: <img src=\"/feature2.jpg\" alt=\"Feature 2\" />\n * }\n * ]}\n * />\n * ```\n */\nexport function FeatureShowcase({\n items,\n children,\n className,\n carouselClassName,\n slideClassName,\n contentClassName,\n mediaClassName,\n arrowClassName,\n equalizeOnMobile = true,\n stretchMediaOnMobile = true,\n}: FeatureShowcaseProps) {\n const baseArrowClassName =\n \"bottom-4 top-auto size-12 translate-y-0 rounded-full border border-current bg-transparent text-current shadow-sm focus:ring-current focus:ring-offset-2 focus:ring-offset-transparent hover:bg-current/10 md:bottom-6\";\n const [mobileSlideHeight, setMobileSlideHeight] = useState<number | null>(\n null\n );\n const slideRefs = useRef<Array<HTMLDivElement | null>>([]);\n const mediaWrapperClassName =\n equalizeOnMobile && stretchMediaOnMobile\n ? \"flex-1 min-h-0 md:flex-none\"\n : \"\";\n\n useEffect(() => {\n if (!equalizeOnMobile) {\n setMobileSlideHeight(null);\n return;\n }\n\n const updateHeights = () => {\n if (typeof window === \"undefined\") return;\n const isMobile = window.innerWidth < 768;\n\n if (!isMobile) {\n setMobileSlideHeight(null);\n return;\n }\n\n const heights = slideRefs.current\n .slice(0, items.length)\n .map((node) => node?.offsetHeight ?? 0);\n const maxHeight = Math.max(...heights, 0);\n\n if (maxHeight > 0) {\n setMobileSlideHeight((prev) =>\n prev === maxHeight ? prev : maxHeight\n );\n }\n };\n\n updateHeights();\n window.addEventListener(\"resize\", updateHeights);\n\n let resizeObserver: ResizeObserver | null = null;\n if (typeof ResizeObserver !== \"undefined\") {\n resizeObserver = new ResizeObserver(updateHeights);\n slideRefs.current.slice(0, items.length).forEach((node) => {\n if (node) resizeObserver?.observe(node);\n });\n }\n\n return () => {\n window.removeEventListener(\"resize\", updateHeights);\n resizeObserver?.disconnect();\n };\n }, [equalizeOnMobile, items.length]);\n\n return (\n <div className={className}>\n {children}\n <Carousel className={carouselClassName}>\n <div className=\"pb-18 md:pb-24\">\n <CarouselContent className=\"ease-in\">\n {items.map((item, itemIndex) => (\n <CarouselItem key={`slide-${itemIndex}`}>\n <div\n ref={(node) => {\n slideRefs.current[itemIndex] = node;\n }}\n style={\n equalizeOnMobile && mobileSlideHeight\n ? { minHeight: mobileSlideHeight }\n : undefined\n }\n className={cn(\n \"flex flex-col gap-8 md:gap-14 md:flex-row md:items-center md:justify-between\",\n slideClassName\n )}\n >\n <div className={cn(\"w-full\", contentClassName)}>\n {item.content}\n </div>\n <div\n className={cn(\n \"w-full\",\n mediaWrapperClassName,\n mediaClassName\n )}\n >\n {item.mediaComponent}\n </div>\n </div>\n </CarouselItem>\n ))}\n </CarouselContent>\n </div>\n <CarouselPrevious\n className={cn(baseArrowClassName, \"left-4 md:left-6\", arrowClassName)}\n />\n <CarouselNext\n className={cn(baseArrowClassName, \"right-4 md:right-6\", arrowClassName)}\n />\n </Carousel>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Container } from \"../../ui/container\";\nimport { Section } from \"../../ui/section\";\nimport { Img } from \"@page-speed/img\";\nimport type { SectionBackground, SectionSpacing } from \"../../../src/types\";\n\n/**\n * Configuration for Optix Flow image optimization\n */\nexport interface OptixFlowConfig {\n /**\n * API key for Optix Flow service\n */\n apiKey: string;\n /**\n * Compression level (0-100)\n */\n compression?: number;\n}\n\n/**\n * Individual team member item for TeamMediaShowcase\n */\nexport interface TeamMediaShowcaseItem {\n /**\n * Image source URL for the team member (required)\n */\n imageSrc: string;\n /**\n * Team member's name (optional)\n */\n name?: string;\n /**\n * Team member's role/title (optional)\n */\n role?: string;\n /**\n * Custom action element to display on hover (optional)\n * Can be a button, link, or any React node\n */\n action?: React.ReactNode;\n /**\n * Alt text for the image (defaults to name or generic text)\n */\n imageAlt?: string;\n /**\n * Additional CSS classes for the card\n */\n cardClassName?: string;\n}\n\n/**\n * Props for TeamMediaShowcase component\n */\nexport interface TeamMediaShowcaseProps {\n /**\n * Array of team member items to display (required)\n * Each item must have at least an imageSrc\n */\n items: TeamMediaShowcaseItem[];\n /**\n * Optional children to render above the grid (e.g., section header content)\n */\n children?: React.ReactNode;\n /**\n * Eyebrow text displayed above the grid\n */\n listEyebrow?: string;\n /**\n * Background style variant for the section\n * @default \"white\"\n */\n background?: SectionBackground;\n /**\n * Vertical spacing/margin variant\n * @default \"lg\"\n */\n verticalMargin?: SectionSpacing;\n /**\n * Custom grid CSS classes\n * @default \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\"\n */\n gridClassName?: string;\n /**\n * Additional CSS classes for the section wrapper\n */\n className?: string;\n /**\n * Optional Optix Flow configuration for @page-speed/img\n */\n optixFlowConfig?: OptixFlowConfig;\n}\n\n/**\n * Props for TeamMemberBackgroundImageCard component\n */\ninterface TeamMemberBackgroundImageCardProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Image URL for the background\n */\n imageUrl: string;\n /**\n * Alt text for the image\n */\n imageAlt: string;\n /**\n * Card content (overlaid on the image)\n */\n children?: React.ReactNode;\n /**\n * Optional Optix Flow configuration for @page-speed/img\n */\n optixFlowConfig?: OptixFlowConfig;\n}\n\n/**\n * TeamMemberBackgroundImageCard - Individual card with background image and hover effects\n *\n * Displays a team member with a full-bleed background image that zooms on hover,\n * with a gradient overlay for text readability.\n */\nconst TeamMemberBackgroundImageCard = React.forwardRef<\n HTMLDivElement,\n TeamMemberBackgroundImageCardProps\n>(({ className, imageUrl, imageAlt, children, optixFlowConfig, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"group h-[400px] relative w-full max-w-sm overflow-hidden rounded-xl border border-border bg-card shadow-lg\",\n \"transition-all duration-300 ease-in-out\",\n className\n )}\n {...props}\n >\n <Img\n src={imageUrl}\n alt={imageAlt}\n className=\"absolute inset-0 h-full w-full object-cover transition-transform duration-500 ease-in-out group-hover:scale-110\"\n optixFlowConfig={optixFlowConfig}\n />\n\n <div className=\"absolute inset-0 bg-gradient-to-t from-black/80 via-black/20 to-transparent\"></div>\n\n {children}\n </div>\n );\n});\nTeamMemberBackgroundImageCard.displayName = \"TeamMemberBackgroundImageCard\";\n\n/**\n * TeamMediaShowcase - Display team members in a grid with background images\n *\n * A responsive grid of team member cards featuring full-bleed background images\n * with hover effects. Each card shows the member's name and role with an optional\n * action element that appears on hover.\n *\n * @example\n * ```tsx\n * <TeamMediaShowcase\n * listEyebrow=\"Our Team\"\n * items={[\n * {\n * imageSrc: \"/team/john.jpg\",\n * name: \"John Doe\",\n * role: \"CEO\",\n * action: <Button>View Profile</Button>\n * },\n * {\n * imageSrc: \"/team/jane.jpg\",\n * name: \"Jane Smith\",\n * role: \"CTO\"\n * }\n * ]}\n * />\n * ```\n */\nexport function TeamMediaShowcase({\n items,\n children,\n listEyebrow,\n background = \"white\",\n verticalMargin = \"lg\",\n gridClassName = \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\",\n className,\n optixFlowConfig,\n}: TeamMediaShowcaseProps): React.JSX.Element {\n return (\n <Section background={background} spacing={verticalMargin} className={className}>\n <Container>\n {children}\n\n <div className=\"space-y-12\">\n <div className=\"space-y-6\">\n {listEyebrow && typeof listEyebrow === \"string\" && listEyebrow.trim() !== \"\" && (\n <div className=\"text-md pt-8 uppercase text-dark-charcoal/70 tracking-[0.2em] font-semibold\">\n {listEyebrow}\n </div>\n )}\n <div className={gridClassName}>\n {items.map((member, idx) => {\n const imageAlt =\n member.imageAlt ||\n (member.name && typeof member.name === \"string\" && member.name.trim() !== \"\"\n ? member.name\n : `member-${idx}`);\n\n return (\n <TeamMemberBackgroundImageCard\n key={idx}\n imageUrl={member.imageSrc}\n imageAlt={imageAlt}\n className={member.cardClassName}\n optixFlowConfig={optixFlowConfig}\n >\n <div className=\"relative flex h-full flex-col justify-end p-6 text-card-foreground\">\n <div className=\"space-y-4 transition-transform duration-500 ease-in-out group-hover:-translate-y-12\">\n <div>\n {member.name &&\n typeof member.name === \"string\" &&\n member.name.trim() !== \"\" && (\n <h4 className=\"text-3xl font-bold text-white\">\n {member.name}\n </h4>\n )}\n {member.role &&\n typeof member.role === \"string\" &&\n member.role.trim() !== \"\" && (\n <p className=\"text-sm text-white/80\">{member.role}</p>\n )}\n </div>\n </div>\n\n {member.action ? (\n <div className=\"absolute -bottom-20 left-0 w-full pt-2 p-6 opacity-0 transition-all duration-500 ease-in-out group-hover:bottom-0 group-hover:opacity-100\">\n {member.action}\n </div>\n ) : null}\n </div>\n </TeamMemberBackgroundImageCard>\n );\n })}\n </div>\n </div>\n </div>\n </Container>\n </Section>\n );\n}\n\nexport { TeamMemberBackgroundImageCard };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Img } from \"@page-speed/img\";\n\n/**\n * Menu item structure for footer navigation sections\n */\nexport interface FooterLinksGridMenuItem {\n /** Section title */\n title: string;\n /** Links within the section */\n links: {\n text: string;\n url: string;\n }[];\n}\n\n/**\n * Props for the FooterLinksGrid component\n */\nexport interface FooterLinksGridProps {\n /** Logo configuration */\n logo?: {\n url: string;\n src: string;\n alt: string;\n title: string;\n };\n /** Additional CSS classes */\n className?: string;\n /** Tagline displayed below the logo */\n tagline?: string;\n /** Navigation menu sections */\n menuItems?: FooterLinksGridMenuItem[];\n /** Copyright text - use {year} placeholder for dynamic year */\n copyright?: string;\n /** Bottom links (terms, privacy, etc.) */\n bottomLinks?: {\n text: string;\n url: string;\n }[];\n /** Optional Optix Flow configuration for @page-speed/img */\n optixFlowConfig?: {\n apiKey: string;\n compression?: number;\n };\n}\n\nconst defaultMenuItems: FooterLinksGridMenuItem[] = [\n {\n title: \"Product\",\n links: [\n { text: \"Overview\", url: \"#\" },\n { text: \"Pricing\", url: \"#\" },\n { text: \"Marketplace\", url: \"#\" },\n { text: \"Features\", url: \"#\" },\n { text: \"Integrations\", url: \"#\" },\n ],\n },\n {\n title: \"Company\",\n links: [\n { text: \"About\", url: \"#\" },\n { text: \"Team\", url: \"#\" },\n { text: \"Blog\", url: \"#\" },\n { text: \"Careers\", url: \"#\" },\n { text: \"Contact\", url: \"#\" },\n ],\n },\n {\n title: \"Resources\",\n links: [\n { text: \"Help\", url: \"#\" },\n { text: \"Sales\", url: \"#\" },\n { text: \"Advertise\", url: \"#\" },\n ],\n },\n {\n title: \"Social\",\n links: [\n { text: \"Twitter\", url: \"#\" },\n { text: \"Instagram\", url: \"#\" },\n { text: \"LinkedIn\", url: \"#\" },\n ],\n },\n];\n\nconst defaultBottomLinks = [\n { text: \"Terms and Conditions\", url: \"#\" },\n { text: \"Privacy Policy\", url: \"#\" },\n];\n\n/**\n * FooterLinksGrid - A multi-column footer with logo, navigation links, and legal information.\n *\n * Features a responsive grid layout with customizable navigation sections,\n * company branding, and bottom legal links. Ideal for corporate websites,\n * SaaS products, and marketing sites that need organized footer navigation.\n */\nexport function FooterLinksGrid({\n logo = {\n src: \"https://cdn.ing/assets/i/r/285975/eud79qeya11q5w6ueyhklueardyx/os-suircle-black-white.png\",\n alt: \"Opensite AI\",\n title: \"Opensite AI\",\n url: \"https://opensite.ai\",\n },\n className,\n tagline = \"Components made easy.\",\n menuItems = defaultMenuItems,\n copyright = `© ${new Date().getFullYear()} Opensite AI. All rights reserved.`,\n bottomLinks = defaultBottomLinks,\n optixFlowConfig,\n}: FooterLinksGridProps): React.JSX.Element {\n return (\n <section className={cn(\"py-32\", className)}>\n <div className=\"container\">\n <footer>\n <div className=\"grid grid-cols-2 gap-8 lg:grid-cols-6\">\n <div className=\"col-span-2 mb-8 lg:mb-0\">\n <div className=\"flex items-center gap-2 lg:justify-start\">\n <a href={logo.url} className=\"flex items-center gap-2\">\n <Img\n src={logo.src}\n alt={logo.alt}\n className=\"h-10 dark:invert\"\n optixFlowConfig={optixFlowConfig}\n />\n <span className=\"text-xl font-semibold\">{logo.title}</span>\n </a>\n </div>\n <p className=\"mt-4 font-bold\">{tagline}</p>\n </div>\n {menuItems.map((section, sectionIdx) => (\n <div key={sectionIdx}>\n <h3 className=\"mb-4 font-bold\">{section.title}</h3>\n <ul className=\"space-y-4 text-muted-foreground\">\n {section.links.map((link, linkIdx) => (\n <li\n key={linkIdx}\n className=\"font-medium hover:text-primary\"\n >\n <a href={link.url}>{link.text}</a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n <div className=\"mt-24 flex flex-col justify-between gap-4 border-t pt-8 text-sm font-medium text-muted-foreground md:flex-row md:items-center\">\n <div className=\"flex flex-col gap-2 md:flex-row md:items-center md:gap-4\">\n <p>{copyright}</p>\n <a\n href=\"https://opensite.ai\"\n className=\"hover:text-primary\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n AI Website and Automation Platform by Opensite\n </a>\n </div>\n <ul className=\"flex gap-4\">\n {bottomLinks.map((link, linkIdx) => (\n <li key={linkIdx} className=\"underline hover:text-primary\">\n <a href={link.url}>{link.text}</a>\n </li>\n ))}\n </ul>\n </div>\n </footer>\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Img } from \"@page-speed/img\";\nimport { DynamicIcon } from \"../../ui/dynamic-icon\";\n\n/**\n * Social link configuration\n */\nexport interface FooterSocialNewsletterSocialLink {\n /** Icon name in format: prefix/name (e.g., \"simple-icons/discord\") */\n icon: string;\n /** Link URL */\n href: string;\n /** Accessible label */\n label: string;\n}\n\n/**\n * Navigation section configuration\n */\nexport interface FooterSocialNewsletterSection {\n title: string;\n links: {\n name: string;\n href: string;\n }[];\n}\n\n/**\n * Props for the FooterSocialNewsletter component\n */\nexport interface FooterSocialNewsletterProps {\n /** Logo configuration */\n logo?: {\n url: string;\n src: string;\n alt: string;\n title: string;\n };\n /** Additional CSS classes */\n className?: string;\n /** Navigation sections */\n sections?: FooterSocialNewsletterSection[];\n /** Social media links */\n socialLinks?: FooterSocialNewsletterSocialLink[];\n /** Newsletter label text */\n newsletterLabel?: string;\n /** Newsletter placeholder text */\n newsletterPlaceholder?: string;\n /** Newsletter button text */\n newsletterButtonText?: string;\n /** Privacy policy link text */\n privacyLinkText?: string;\n /** Privacy policy URL */\n privacyLinkUrl?: string;\n /** Copyright text */\n copyright?: string;\n /** Optional Optix Flow configuration for @page-speed/img */\n optixFlowConfig?: {\n apiKey: string;\n compression?: number;\n };\n}\n\nconst defaultSections: FooterSocialNewsletterSection[] = [\n {\n title: \"Product\",\n links: [\n { name: \"Overview\", href: \"#\" },\n { name: \"Pricing\", href: \"#\" },\n { name: \"Marketplace\", href: \"#\" },\n { name: \"Features\", href: \"#\" },\n { name: \"Integrations\", href: \"#\" },\n ],\n },\n {\n title: \"Company\",\n links: [\n { name: \"About\", href: \"#\" },\n { name: \"Team\", href: \"#\" },\n { name: \"Blog\", href: \"#\" },\n { name: \"Careers\", href: \"#\" },\n { name: \"Contact\", href: \"#\" },\n ],\n },\n {\n title: \"Resources\",\n links: [\n { name: \"Help\", href: \"#\" },\n { name: \"Sales\", href: \"#\" },\n { name: \"Advertise\", href: \"#\" },\n ],\n },\n];\n\nconst defaultSocialLinks: FooterSocialNewsletterSocialLink[] = [\n { icon: \"simple-icons/discord\", href: \"#\", label: \"Discord\" },\n { icon: \"simple-icons/reddit\", href: \"#\", label: \"Reddit\" },\n { icon: \"simple-icons/x\", href: \"#\", label: \"X (Twitter)\" },\n { icon: \"simple-icons/telegram\", href: \"#\", label: \"Telegram\" },\n { icon: \"simple-icons/linkedin\", href: \"#\", label: \"LinkedIn\" },\n];\n\n/**\n * FooterSocialNewsletter - A footer with social icons, navigation links, and newsletter signup.\n *\n * Features prominent social media icons in circular buttons, multi-column navigation,\n * and an email newsletter subscription form. Ideal for community-focused products,\n * SaaS platforms, and businesses that prioritize social engagement and email marketing.\n */\nexport function FooterSocialNewsletter({\n logo = {\n url: \"https://opensite.ai\",\n src: \"https://cdn.ing/assets/i/r/285975/eud79qeya11q5w6ueyhklueardyx/os-suircle-black-white.png\",\n alt: \"Opensite AI\",\n title: \"Opensite AI\",\n },\n className,\n sections = defaultSections,\n socialLinks = defaultSocialLinks,\n newsletterLabel = \"Subscribe to our newsletter\",\n newsletterPlaceholder = \"Email\",\n newsletterButtonText = \"Subscribe\",\n privacyLinkText = \"Privacy Policy\",\n privacyLinkUrl = \"#\",\n copyright = `© ${new Date().getFullYear()} Opensite AI. All rights reserved.`,\n optixFlowConfig,\n}: FooterSocialNewsletterProps): React.JSX.Element {\n return (\n <section className={cn(\"py-32\", className)}>\n <div className=\"container\">\n <footer>\n <a href={logo.url} className=\"flex items-center gap-2\">\n <Img\n src={logo.src}\n alt={logo.alt}\n className=\"h-10\"\n optixFlowConfig={optixFlowConfig}\n />\n <span className=\"text-xl font-semibold\">{logo.title}</span>\n </a>\n <div className=\"mt-14 grid gap-8 md:grid-cols-2 lg:grid-cols-5 xl:grid-cols-4\">\n {sections.map((section, sectionIdx) => (\n <div key={sectionIdx}>\n <h3 className=\"mb-4 font-bold\">{section.title}</h3>\n <ul className=\"space-y-4 text-muted-foreground\">\n {section.links.map((link, linkIdx) => (\n <li\n key={linkIdx}\n className=\"font-medium hover:text-primary\"\n >\n <a href={link.href}>{link.name}</a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n <div className=\"lg:col-span-2 xl:col-span-1\">\n <ul className=\"mb-10 flex items-center gap-2 text-muted-foreground\">\n {socialLinks.map((social, idx) => (\n <li key={idx} className=\"font-medium\">\n <a href={social.href} aria-label={social.label}>\n <span className=\"flex size-12 items-center justify-center rounded-full bg-muted transition-colors hover:text-primary\">\n <DynamicIcon name={social.icon} size={24} />\n </span>\n </a>\n </li>\n ))}\n </ul>\n <div className=\"grid w-full max-w-sm items-center gap-1.5\">\n <label htmlFor=\"newsletter-email\" className=\"text-sm font-medium\">\n {newsletterLabel}\n </label>\n <div className=\"flex w-full max-w-sm items-center space-x-2\">\n <input\n type=\"email\"\n id=\"newsletter-email\"\n placeholder={newsletterPlaceholder}\n className=\"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n />\n <button\n type=\"submit\"\n className=\"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-4 py-2\"\n >\n {newsletterButtonText}\n </button>\n </div>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n By submitting, you agree to our\n <a href={privacyLinkUrl} className=\"ml-1 text-primary hover:underline\">\n {privacyLinkText}\n </a>\n </p>\n </div>\n </div>\n </div>\n <div className=\"mt-20 flex flex-col justify-between gap-4 border-t pt-8 text-sm font-medium text-muted-foreground md:flex-row md:items-center\">\n <div className=\"flex flex-col gap-2 md:flex-row md:items-center md:gap-4\">\n <p>{copyright}</p>\n <a\n href=\"https://opensite.ai\"\n className=\"hover:text-primary\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n AI Website and Automation Platform by Opensite\n </a>\n </div>\n </div>\n </footer>\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Img } from \"@page-speed/img\";\nimport { DynamicIcon } from \"../../ui/dynamic-icon\";\n\n/**\n * Social link configuration\n */\nexport interface FooterSocialAppsSocialLink {\n /** Icon name in format: prefix/name (e.g., \"simple-icons/twitter\") */\n icon: string;\n /** Link URL */\n href: string;\n /** Accessible label */\n label: string;\n}\n\n/**\n * App store link configuration\n */\nexport interface FooterSocialAppsAppLink {\n /** Icon name in format: prefix/name (e.g., \"simple-icons/android\") */\n icon: string;\n /** Link URL */\n href: string;\n /** Accessible label */\n label: string;\n}\n\n/**\n * Navigation section configuration\n */\nexport interface FooterSocialAppsSection {\n title: string;\n links: {\n name: string;\n href: string;\n }[];\n}\n\n/**\n * Props for the FooterSocialApps component\n */\nexport interface FooterSocialAppsProps {\n /** Logo configuration */\n logo?: {\n url: string;\n src: string;\n alt: string;\n title: string;\n };\n /** Additional CSS classes */\n className?: string;\n /** Navigation sections */\n sections?: FooterSocialAppsSection[];\n /** Social media links */\n socialLinks?: FooterSocialAppsSocialLink[];\n /** Mobile app store links */\n appLinks?: FooterSocialAppsAppLink[];\n /** Social section label */\n socialLabel?: string;\n /** Mobile app section label */\n appLabel?: string;\n /** Copyright text */\n copyright?: string;\n /** Optional Optix Flow configuration for @page-speed/img */\n optixFlowConfig?: {\n apiKey: string;\n compression?: number;\n };\n}\n\nconst defaultSections: FooterSocialAppsSection[] = [\n {\n title: \"Product\",\n links: [\n { name: \"Overview\", href: \"#\" },\n { name: \"Pricing\", href: \"#\" },\n { name: \"Marketplace\", href: \"#\" },\n { name: \"Features\", href: \"#\" },\n ],\n },\n {\n title: \"Company\",\n links: [\n { name: \"About\", href: \"#\" },\n { name: \"Team\", href: \"#\" },\n { name: \"Blog\", href: \"#\" },\n { name: \"Careers\", href: \"#\" },\n ],\n },\n {\n title: \"Resources\",\n links: [\n { name: \"Help\", href: \"#\" },\n { name: \"Sales\", href: \"#\" },\n { name: \"Advertise\", href: \"#\" },\n ],\n },\n];\n\nconst defaultSocialLinks: FooterSocialAppsSocialLink[] = [\n { icon: \"simple-icons/discord\", href: \"#\", label: \"Discord\" },\n { icon: \"simple-icons/x\", href: \"#\", label: \"X (Twitter)\" },\n { icon: \"simple-icons/instagram\", href: \"#\", label: \"Instagram\" },\n { icon: \"simple-icons/linkedin\", href: \"#\", label: \"LinkedIn\" },\n];\n\nconst defaultAppLinks: FooterSocialAppsAppLink[] = [\n { icon: \"mdi/android\", href: \"#\", label: \"Android\" },\n { icon: \"mdi/apple\", href: \"#\", label: \"iOS\" },\n];\n\n/**\n * FooterSocialApps - A footer with social icons, navigation links, and mobile app download links.\n *\n * Features prominent social media icons and mobile app store links in circular buttons,\n * along with multi-column navigation. Ideal for products with mobile apps, community-focused\n * platforms, and businesses that want to highlight their cross-platform presence.\n */\nexport function FooterSocialApps({\n logo = {\n url: \"https://opensite.ai\",\n src: \"https://cdn.ing/assets/i/r/285975/eud79qeya11q5w6ueyhklueardyx/os-suircle-black-white.png\",\n alt: \"Opensite AI\",\n title: \"Opensite AI\",\n },\n className,\n sections = defaultSections,\n socialLinks = defaultSocialLinks,\n appLinks = defaultAppLinks,\n socialLabel = \"Follow Us\",\n appLabel = \"Mobile App\",\n copyright = `© ${new Date().getFullYear()} Opensite AI. All rights reserved.`,\n optixFlowConfig,\n}: FooterSocialAppsProps): React.JSX.Element {\n return (\n <section className={cn(\"py-32\", className)}>\n <div className=\"container\">\n <footer>\n <div className=\"flex flex-col justify-between gap-10 lg:flex-row lg:gap-20\">\n <div className=\"flex flex-col gap-6\">\n <a href={logo.url} className=\"flex items-center gap-2\">\n <Img\n src={logo.src}\n alt={logo.alt}\n className=\"h-10\"\n optixFlowConfig={optixFlowConfig}\n />\n <span className=\"text-xl font-semibold\">{logo.title}</span>\n </a>\n </div>\n <div className=\"grid flex-1 gap-8 sm:grid-cols-2 md:grid-cols-3\">\n {sections.map((section, sectionIdx) => (\n <div key={sectionIdx}>\n <h3 className=\"mb-4 font-bold\">{section.title}</h3>\n <ul className=\"space-y-4 text-muted-foreground\">\n {section.links.map((link, linkIdx) => (\n <li\n key={linkIdx}\n className=\"font-medium hover:text-primary\"\n >\n <a href={link.href}>{link.name}</a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n <div className=\"flex flex-col gap-6\">\n <div>\n <p className=\"mb-3 font-bold\">{socialLabel}</p>\n <ul className=\"flex items-center gap-2 text-muted-foreground\">\n {socialLinks.map((social, idx) => (\n <li key={idx} className=\"font-medium\">\n <a href={social.href} aria-label={social.label}>\n <span className=\"flex size-12 items-center justify-center rounded-full bg-muted transition-colors hover:text-primary\">\n <DynamicIcon name={social.icon} size={24} />\n </span>\n </a>\n </li>\n ))}\n </ul>\n </div>\n <div>\n <p className=\"mb-3 font-bold\">{appLabel}</p>\n <ul className=\"flex items-center gap-2 text-muted-foreground\">\n {appLinks.map((app, idx) => (\n <li key={idx} className=\"font-medium\">\n <a href={app.href} aria-label={app.label}>\n <span className=\"flex size-12 items-center justify-center rounded-full bg-muted transition-colors hover:text-primary\">\n <DynamicIcon name={app.icon} size={24} />\n </span>\n </a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </div>\n <div className=\"mt-24 border-t pt-8\">\n <div className=\"flex flex-col justify-between gap-4 text-center text-sm font-medium text-muted-foreground md:flex-row md:text-left\">\n <p>{copyright}</p>\n <a\n href=\"https://opensite.ai\"\n className=\"hover:text-primary\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n AI Website and Automation Platform by Opensite\n </a>\n </div>\n </div>\n </footer>\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Img } from \"@page-speed/img\";\n\n/**\n * Sitemap section configuration\n */\nexport interface FooterSimpleCenteredSection {\n title: string;\n links: {\n title: string;\n href: string;\n }[];\n}\n\n/**\n * Props for the FooterSimpleCentered component\n */\nexport interface FooterSimpleCenteredProps {\n /** Logo configuration */\n logo?: {\n url: string;\n src: string;\n alt: string;\n title: string;\n };\n /** Additional CSS classes */\n className?: string;\n /** Tagline displayed below the logo */\n tagline?: string;\n /** Sitemap sections */\n sitemap?: FooterSimpleCenteredSection[];\n /** Copyright text */\n copyright?: string;\n /** Bottom links (terms, privacy, etc.) */\n bottomLinks?: {\n text: string;\n href: string;\n }[];\n /** Optional Optix Flow configuration for @page-speed/img */\n optixFlowConfig?: {\n apiKey: string;\n compression?: number;\n };\n}\n\nconst defaultSitemap: FooterSimpleCenteredSection[] = [\n {\n title: \"Company\",\n links: [\n { title: \"About Us\", href: \"#\" },\n { title: \"Careers\", href: \"#\" },\n { title: \"Contact\", href: \"#\" },\n { title: \"Press\", href: \"#\" },\n ],\n },\n {\n title: \"Support\",\n links: [\n { title: \"Help Center\", href: \"#\" },\n { title: \"Community\", href: \"#\" },\n { title: \"Status\", href: \"#\" },\n { title: \"API Docs\", href: \"#\" },\n ],\n },\n];\n\nconst defaultBottomLinks = [\n { text: \"Terms & Conditions\", href: \"#\" },\n { text: \"Privacy Policy\", href: \"#\" },\n];\n\n/**\n * FooterSimpleCentered - A clean, minimal footer with logo, sitemap, and legal links.\n *\n * Features a simple two-column sitemap layout with company branding and bottom legal links.\n * Ideal for corporate websites, landing pages, and products that prefer a clean,\n * uncluttered footer design without social media or newsletter elements.\n */\nexport function FooterSimpleCentered({\n logo = {\n url: \"https://opensite.ai\",\n src: \"https://cdn.ing/assets/i/r/285975/eud79qeya11q5w6ueyhklueardyx/os-suircle-black-white.png\",\n alt: \"Opensite AI\",\n title: \"Opensite AI\",\n },\n className,\n tagline = \"Components made easy.\",\n sitemap = defaultSitemap,\n copyright = `© Opensite AI ${new Date().getFullYear()}`,\n bottomLinks = defaultBottomLinks,\n optixFlowConfig,\n}: FooterSimpleCenteredProps): React.JSX.Element {\n return (\n <section className={cn(\"py-16\", className)}>\n <div className=\"container\">\n <footer>\n <div className=\"relative mb-8 flex w-full flex-col gap-x-28 gap-y-8 md:flex-row md:justify-between md:gap-y-0\">\n <div className=\"max-w-96\">\n <div className=\"mb-6 flex items-center gap-3\">\n <div className=\"flex size-12 items-center justify-center rounded-lg border border-border bg-accent p-2\">\n <Img\n src={logo.src}\n alt={logo.alt}\n className=\"size-12 h-full w-full object-contain object-center\"\n optixFlowConfig={optixFlowConfig}\n />\n </div>\n <h3 className=\"text-xl font-bold\">{logo.title}</h3>\n </div>\n <p className=\"text-base font-medium text-muted-foreground\">\n {tagline}\n </p>\n </div>\n <div className=\"flex flex-col items-start gap-x-20 gap-y-14 xl:flex-row\">\n <div className=\"inline-grid w-fit grid-cols-1 gap-x-20 gap-y-14 sm:grid-cols-2\">\n {sitemap.map((section) => (\n <div key={section.title} className=\"h-fit w-min\">\n <h4 className=\"mb-6 text-base font-semibold whitespace-nowrap\">\n {section.title}\n </h4>\n <ul className=\"space-y-3 text-base font-medium text-muted-foreground\">\n {section.links.map((link) => (\n <li key={link.title}>\n <a\n href={link.href}\n className=\"text-base whitespace-nowrap hover:text-accent-foreground\"\n >\n {link.title}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </div>\n </div>\n <div className=\"flex flex-col items-baseline justify-between gap-8 border-t border-border pt-8 md:flex-row md:gap-16\">\n <div className=\"flex flex-col gap-2 text-xs text-muted-foreground sm:flex-row sm:items-center sm:gap-4 sm:text-sm\">\n <span>{copyright}</span>\n <a\n href=\"https://opensite.ai\"\n className=\"hover:text-accent-foreground\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n AI Website and Automation Platform by Opensite\n </a>\n </div>\n <div className=\"flex flex-col items-start gap-4 text-xs text-muted-foreground sm:text-sm md:flex-row lg:items-center\">\n {bottomLinks.map((link, idx) => (\n <a key={idx} href={link.href} className=\"hover:text-accent-foreground\">\n {link.text}\n </a>\n ))}\n </div>\n </div>\n </footer>\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Img } from \"@page-speed/img\";\nimport { DynamicIcon } from \"../../ui/dynamic-icon\";\n\n/**\n * Social link configuration\n */\nexport interface FooterBrandDescriptionSocialLink {\n /** Icon name in format: prefix/name (e.g., \"simple-icons/instagram\") */\n icon: string;\n /** Link URL */\n href: string;\n /** Accessible label */\n label: string;\n}\n\n/**\n * Navigation section configuration\n */\nexport interface FooterBrandDescriptionSection {\n title: string;\n links: {\n name: string;\n href: string;\n }[];\n}\n\n/**\n * Props for the FooterBrandDescription component\n */\nexport interface FooterBrandDescriptionProps {\n /** Logo configuration */\n logo?: {\n url: string;\n src: string;\n alt: string;\n title: string;\n };\n /** Additional CSS classes */\n className?: string;\n /** Navigation sections */\n sections?: FooterBrandDescriptionSection[];\n /** Brand description text */\n description?: string;\n /** Social media links */\n socialLinks?: FooterBrandDescriptionSocialLink[];\n /** Copyright text */\n copyright?: string;\n /** Legal links (terms, privacy, etc.) */\n legalLinks?: {\n name: string;\n href: string;\n }[];\n /** Optional Optix Flow configuration for @page-speed/img */\n optixFlowConfig?: {\n apiKey: string;\n compression?: number;\n };\n}\n\nconst defaultSections: FooterBrandDescriptionSection[] = [\n {\n title: \"Product\",\n links: [\n { name: \"Overview\", href: \"#\" },\n { name: \"Pricing\", href: \"#\" },\n { name: \"Marketplace\", href: \"#\" },\n { name: \"Features\", href: \"#\" },\n ],\n },\n {\n title: \"Company\",\n links: [\n { name: \"About\", href: \"#\" },\n { name: \"Team\", href: \"#\" },\n { name: \"Blog\", href: \"#\" },\n { name: \"Careers\", href: \"#\" },\n ],\n },\n {\n title: \"Resources\",\n links: [\n { name: \"Help\", href: \"#\" },\n { name: \"Sales\", href: \"#\" },\n { name: \"Advertise\", href: \"#\" },\n { name: \"Privacy\", href: \"#\" },\n ],\n },\n];\n\nconst defaultSocialLinks: FooterBrandDescriptionSocialLink[] = [\n { icon: \"simple-icons/instagram\", href: \"#\", label: \"Instagram\" },\n { icon: \"simple-icons/facebook\", href: \"#\", label: \"Facebook\" },\n { icon: \"simple-icons/x\", href: \"#\", label: \"X (Twitter)\" },\n { icon: \"simple-icons/linkedin\", href: \"#\", label: \"LinkedIn\" },\n];\n\nconst defaultLegalLinks = [\n { name: \"Terms and Conditions\", href: \"#\" },\n { name: \"Privacy Policy\", href: \"#\" },\n];\n\n/**\n * FooterBrandDescription - A footer with logo, description, social icons, and navigation.\n *\n * Features a prominent brand section with logo, description, and social links on the left,\n * with multi-column navigation on the right. Ideal for brand-focused websites, startups,\n * and businesses that want to emphasize their identity and social presence in the footer.\n */\nexport function FooterBrandDescription({\n logo = {\n url: \"https://opensite.ai\",\n src: \"https://cdn.ing/assets/i/r/285975/eud79qeya11q5w6ueyhklueardyx/os-suircle-black-white.png\",\n alt: \"Opensite AI\",\n title: \"Opensite AI\",\n },\n className,\n sections = defaultSections,\n description = \"A collection of components for your startup business or side project.\",\n socialLinks = defaultSocialLinks,\n copyright = `© ${new Date().getFullYear()} Opensite AI. All rights reserved.`,\n legalLinks = defaultLegalLinks,\n optixFlowConfig,\n}: FooterBrandDescriptionProps): React.JSX.Element {\n return (\n <section className={cn(\"py-32\", className)}>\n <div className=\"container\">\n <div className=\"flex w-full flex-col justify-between gap-10 lg:flex-row lg:items-start lg:text-left\">\n <div className=\"flex w-full flex-col justify-between gap-6 lg:items-start\">\n <div className=\"flex items-center gap-2 lg:justify-start\">\n <a href={logo.url}>\n <Img\n src={logo.src}\n alt={logo.alt}\n className=\"h-8\"\n optixFlowConfig={optixFlowConfig}\n />\n </a>\n <h2 className=\"text-xl font-semibold\">{logo.title}</h2>\n </div>\n <p className=\"max-w-[70%] text-sm text-muted-foreground\">\n {description}\n </p>\n <ul className=\"flex items-center space-x-6 text-muted-foreground\">\n {socialLinks.map((social, idx) => (\n <li key={idx} className=\"font-medium hover:text-primary\">\n <a href={social.href} aria-label={social.label}>\n <DynamicIcon name={social.icon} size={20} />\n </a>\n </li>\n ))}\n </ul>\n </div>\n <div className=\"grid w-full gap-6 md:grid-cols-3 lg:gap-20\">\n {sections.map((section, sectionIdx) => (\n <div key={sectionIdx}>\n <h3 className=\"mb-4 font-bold\">{section.title}</h3>\n <ul className=\"space-y-3 text-sm text-muted-foreground\">\n {section.links.map((link, linkIdx) => (\n <li\n key={linkIdx}\n className=\"font-medium hover:text-primary\"\n >\n <a href={link.href}>{link.name}</a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </div>\n <div className=\"mt-8 flex flex-col justify-between gap-4 border-t py-8 text-xs font-medium text-muted-foreground md:flex-row md:items-center md:text-left\">\n <div className=\"order-2 flex flex-col gap-2 lg:order-1 lg:flex-row lg:items-center lg:gap-4\">\n <p>{copyright}</p>\n <a\n href=\"https://opensite.ai\"\n className=\"hover:text-primary\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n AI Website and Automation Platform by Opensite\n </a>\n </div>\n <ul className=\"order-1 flex flex-col gap-2 md:order-2 md:flex-row\">\n {legalLinks.map((link, idx) => (\n <li key={idx} className=\"hover:text-primary\">\n <a href={link.href}>{link.name}</a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Img } from \"@page-speed/img\";\nimport { DynamicIcon } from \"../../ui/dynamic-icon\";\n\n/**\n * Social link configuration\n */\nexport interface FooterNewsletterGridSocialLink {\n /** Icon name in format: prefix/name (e.g., \"simple-icons/instagram\") */\n icon: string;\n /** Link URL */\n href: string;\n /** Accessible label */\n label: string;\n}\n\n/**\n * Navigation section configuration\n */\nexport interface FooterNewsletterGridSection {\n title: string;\n links: {\n name: string;\n href: string;\n }[];\n}\n\n/**\n * Props for the FooterNewsletterGrid component\n */\nexport interface FooterNewsletterGridProps {\n /** Logo configuration */\n logo?: {\n url: string;\n src: string;\n alt: string;\n title: string;\n };\n /** Additional CSS classes */\n className?: string;\n /** Brand description text */\n description?: string;\n /** Navigation sections */\n sections?: FooterNewsletterGridSection[];\n /** Social media links */\n socialLinks?: FooterNewsletterGridSocialLink[];\n /** Newsletter section title */\n newsletterTitle?: string;\n /** Newsletter placeholder text */\n newsletterPlaceholder?: string;\n /** Newsletter button text */\n newsletterButtonText?: string;\n /** Privacy policy text */\n privacyText?: string;\n /** Privacy policy link text */\n privacyLinkText?: string;\n /** Privacy policy URL */\n privacyLinkUrl?: string;\n /** Copyright text */\n copyright?: string;\n /** Attribution text */\n attribution?: string;\n /** Optional Optix Flow configuration for @page-speed/img */\n optixFlowConfig?: {\n apiKey: string;\n compression?: number;\n };\n}\n\nconst defaultSections: FooterNewsletterGridSection[] = [\n {\n title: \"Product\",\n links: [\n { name: \"Overview\", href: \"#\" },\n { name: \"Pricing\", href: \"#\" },\n { name: \"Marketplace\", href: \"#\" },\n { name: \"Features\", href: \"#\" },\n { name: \"Integrations\", href: \"#\" },\n { name: \"Marketing\", href: \"#\" },\n ],\n },\n {\n title: \"Company\",\n links: [\n { name: \"About\", href: \"#\" },\n { name: \"Team\", href: \"#\" },\n { name: \"Blog\", href: \"#\" },\n { name: \"Careers\", href: \"#\" },\n { name: \"Contact\", href: \"#\" },\n ],\n },\n];\n\nconst defaultSocialLinks: FooterNewsletterGridSocialLink[] = [\n { icon: \"simple-icons/instagram\", href: \"#\", label: \"Instagram\" },\n { icon: \"simple-icons/facebook\", href: \"#\", label: \"Facebook\" },\n { icon: \"simple-icons/x\", href: \"#\", label: \"X (Twitter)\" },\n { icon: \"simple-icons/linkedin\", href: \"#\", label: \"LinkedIn\" },\n];\n\n/**\n * FooterNewsletterGrid - A comprehensive footer with logo, social icons, navigation, and newsletter.\n *\n * Features a full-width grid layout with brand section (logo, description, social icons),\n * multi-column navigation, and a prominent newsletter signup form. Ideal for content-heavy\n * websites, SaaS products, and businesses that prioritize email marketing and social engagement.\n */\nexport function FooterNewsletterGrid({\n logo = {\n url: \"https://opensite.ai\",\n src: \"https://cdn.ing/assets/i/r/285975/eud79qeya11q5w6ueyhklueardyx/os-suircle-black-white.png\",\n alt: \"Opensite AI\",\n title: \"Opensite AI\",\n },\n className,\n description = \"A collection of 100+ responsive HTML templates for your startup business or side project.\",\n sections = defaultSections,\n socialLinks = defaultSocialLinks,\n newsletterTitle = \"Newsletter\",\n newsletterPlaceholder = \"Email\",\n newsletterButtonText = \"Subscribe\",\n privacyText = \"By submitting, you agree to our\",\n privacyLinkText = \"Privacy Policy\",\n privacyLinkUrl = \"#\",\n copyright = `© ${new Date().getFullYear()} Opensite AI. All rights reserved.`,\n optixFlowConfig,\n}: FooterNewsletterGridProps): React.JSX.Element {\n return (\n <section className={cn(\"py-32\", className)}>\n <div className=\"container\">\n <footer>\n <div className=\"grid grid-cols-4 justify-between gap-10 lg:grid-cols-6 lg:text-left\">\n <div className=\"col-span-4 flex w-full flex-col gap-6 lg:col-span-2\">\n <div className=\"flex items-center gap-2 lg:justify-start\">\n <a href={logo.url}>\n <Img\n src={logo.src}\n alt={logo.alt}\n className=\"h-8\"\n optixFlowConfig={optixFlowConfig}\n />\n </a>\n <h2 className=\"text-xl font-semibold\">{logo.title}</h2>\n </div>\n <p className=\"text-muted-foreground\">{description}</p>\n <ul className=\"flex items-center space-x-6\">\n {socialLinks.map((social, idx) => (\n <li\n key={idx}\n className=\"font-medium duration-200 hover:scale-110 hover:text-muted-foreground\"\n >\n <a href={social.href} aria-label={social.label}>\n <DynamicIcon name={social.icon} size={24} />\n </a>\n </li>\n ))}\n </ul>\n </div>\n {sections.map((section, sectionIdx) => (\n <div key={sectionIdx} className=\"col-span-2 md:col-span-1\">\n <h3 className=\"mb-5 font-medium\">{section.title}</h3>\n <ul className=\"space-y-4 text-sm text-muted-foreground\">\n {section.links.map((link, linkIdx) => (\n <li\n key={linkIdx}\n className=\"font-medium hover:text-primary\"\n >\n <a href={link.href}>{link.name}</a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n <div className=\"col-span-4 md:col-span-2\">\n <h3 className=\"mb-5 font-medium\">{newsletterTitle}</h3>\n <div className=\"grid gap-1.5\">\n <div className=\"flex w-full items-center space-x-2\">\n <input\n type=\"email\"\n placeholder={newsletterPlaceholder}\n className=\"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n />\n <button\n type=\"submit\"\n className=\"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-4 py-2\"\n >\n {newsletterButtonText}\n </button>\n </div>\n </div>\n <p className=\"mt-1 text-xs font-medium text-muted-foreground\">\n {privacyText}\n <a href={privacyLinkUrl} className=\"ml-1 text-primary hover:underline\">\n {privacyLinkText}\n </a>\n </p>\n </div>\n </div>\n <div className=\"mt-20 flex flex-col justify-between gap-4 border-t pt-8 text-sm font-medium text-muted-foreground lg:flex-row lg:items-center lg:text-left\">\n <div className=\"flex flex-col gap-2 lg:flex-row lg:items-center lg:gap-4\">\n <p>\n <span className=\"mr-1 font-bold text-primary\">Opensite AI</span>\n {copyright}\n </p>\n </div>\n <a\n href=\"https://opensite.ai\"\n className=\"hover:text-primary\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n AI Website and Automation Platform by Opensite\n </a>\n </div>\n </footer>\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Img } from \"@page-speed/img\";\nimport { DynamicIcon } from \"../../ui/dynamic-icon\";\n\n/**\n * Social link configuration\n */\nexport interface FooterCtaBannerSocialLink {\n /** Icon name in format: prefix/name (e.g., \"simple-icons/instagram\") */\n icon: string;\n /** Link URL */\n href: string;\n /** Accessible label */\n label: string;\n}\n\n/**\n * Navigation section configuration\n */\nexport interface FooterCtaBannerSection {\n title: string;\n links: {\n name: string;\n href: string;\n }[];\n}\n\n/**\n * Props for the FooterCtaBanner component\n */\nexport interface FooterCtaBannerProps {\n /** Logo configuration */\n logo?: {\n url: string;\n src: string;\n alt: string;\n title: string;\n };\n /** Additional CSS classes */\n className?: string;\n /** CTA banner heading */\n ctaHeading?: string;\n /** CTA banner description */\n ctaDescription?: string;\n /** CTA button text */\n ctaButtonText?: string;\n /** CTA button URL */\n ctaButtonUrl?: string;\n /** Navigation sections */\n sections?: FooterCtaBannerSection[];\n /** Social media links */\n socialLinks?: FooterCtaBannerSocialLink[];\n /** Newsletter label */\n newsletterLabel?: string;\n /** Newsletter placeholder */\n newsletterPlaceholder?: string;\n /** Newsletter button text */\n newsletterButtonText?: string;\n /** Copyright text */\n copyright?: string;\n /** Legal links */\n legalLinks?: {\n name: string;\n href: string;\n }[];\n /** Optional Optix Flow configuration for @page-speed/img */\n optixFlowConfig?: {\n apiKey: string;\n compression?: number;\n };\n}\n\nconst defaultSections: FooterCtaBannerSection[] = [\n {\n title: \"Product\",\n links: [\n { name: \"Overview\", href: \"#\" },\n { name: \"Pricing\", href: \"#\" },\n { name: \"Marketplace\", href: \"#\" },\n { name: \"Features\", href: \"#\" },\n ],\n },\n {\n title: \"Company\",\n links: [\n { name: \"About\", href: \"#\" },\n { name: \"Team\", href: \"#\" },\n { name: \"Blog\", href: \"#\" },\n { name: \"Careers\", href: \"#\" },\n ],\n },\n {\n title: \"Resources\",\n links: [\n { name: \"Help\", href: \"#\" },\n { name: \"Sales\", href: \"#\" },\n { name: \"Advertise\", href: \"#\" },\n ],\n },\n];\n\nconst defaultSocialLinks: FooterCtaBannerSocialLink[] = [\n { icon: \"simple-icons/instagram\", href: \"#\", label: \"Instagram\" },\n { icon: \"simple-icons/facebook\", href: \"#\", label: \"Facebook\" },\n { icon: \"simple-icons/x\", href: \"#\", label: \"X (Twitter)\" },\n { icon: \"simple-icons/linkedin\", href: \"#\", label: \"LinkedIn\" },\n];\n\nconst defaultLegalLinks = [\n { name: \"Terms and Conditions\", href: \"#\" },\n { name: \"Privacy Policy\", href: \"#\" },\n];\n\n/**\n * FooterCtaBanner - A dark-themed footer with prominent CTA banner, navigation, and newsletter.\n *\n * Features a full-width call-to-action banner at the top with heading, description, and button,\n * followed by multi-column navigation, newsletter signup, and social links. Ideal for SaaS products,\n * marketing sites, and businesses that want to drive conversions directly from the footer.\n */\nexport function FooterCtaBanner({\n logo = {\n url: \"https://opensite.ai\",\n src: \"https://cdn.ing/assets/i/r/285975/eud79qeya11q5w6ueyhklueardyx/os-suircle-black-white.png\",\n alt: \"Opensite AI\",\n title: \"Opensite AI\",\n },\n className,\n ctaHeading = \"Ready to get started?\",\n ctaDescription = \"Join thousands of satisfied customers using our platform to build amazing websites.\",\n ctaButtonText = \"Get Started\",\n ctaButtonUrl = \"#\",\n sections = defaultSections,\n socialLinks = defaultSocialLinks,\n newsletterLabel = \"Subscribe to our newsletter\",\n newsletterPlaceholder = \"Enter your email\",\n newsletterButtonText = \"Subscribe\",\n copyright = `© ${new Date().getFullYear()} Opensite AI. All rights reserved.`,\n legalLinks = defaultLegalLinks,\n optixFlowConfig,\n}: FooterCtaBannerProps): React.JSX.Element {\n return (\n <section className={cn(\"dark bg-background py-16 text-foreground\", className)}>\n <div className=\"container\">\n <footer>\n {/* CTA Banner */}\n <div className=\"mb-16 rounded-lg bg-primary/10 p-8 text-center md:p-12\">\n <h2 className=\"mb-4 text-3xl font-bold md:text-4xl\">{ctaHeading}</h2>\n <p className=\"mx-auto mb-6 max-w-2xl text-muted-foreground\">\n {ctaDescription}\n </p>\n <a\n href={ctaButtonUrl}\n className=\"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-11 px-8\"\n >\n {ctaButtonText}\n </a>\n </div>\n\n {/* Main Footer Content */}\n <div className=\"grid gap-10 lg:grid-cols-5\">\n {/* Brand Section */}\n <div className=\"lg:col-span-2\">\n <a href={logo.url} className=\"mb-6 flex items-center gap-2\">\n <Img\n src={logo.src}\n alt={logo.alt}\n className=\"h-8 invert\"\n optixFlowConfig={optixFlowConfig}\n />\n <span className=\"text-xl font-semibold\">{logo.title}</span>\n </a>\n <div className=\"mb-6\">\n <p className=\"mb-2 text-sm font-medium\">{newsletterLabel}</p>\n <div className=\"flex max-w-sm gap-2\">\n <input\n type=\"email\"\n placeholder={newsletterPlaceholder}\n className=\"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n />\n <button\n type=\"submit\"\n className=\"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-4 py-2\"\n >\n {newsletterButtonText}\n </button>\n </div>\n </div>\n <ul className=\"flex items-center gap-4\">\n {socialLinks.map((social, idx) => (\n <li key={idx}>\n <a\n href={social.href}\n aria-label={social.label}\n className=\"text-muted-foreground transition-colors hover:text-foreground\"\n >\n <DynamicIcon name={social.icon} size={20} />\n </a>\n </li>\n ))}\n </ul>\n </div>\n\n {/* Navigation Sections */}\n {sections.map((section, sectionIdx) => (\n <div key={sectionIdx}>\n <h3 className=\"mb-4 font-semibold\">{section.title}</h3>\n <ul className=\"space-y-3 text-sm text-muted-foreground\">\n {section.links.map((link, linkIdx) => (\n <li key={linkIdx}>\n <a href={link.href} className=\"hover:text-foreground\">\n {link.name}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n\n {/* Bottom Section */}\n <div className=\"mt-16 flex flex-col justify-between gap-4 border-t border-border pt-8 text-sm text-muted-foreground md:flex-row md:items-center\">\n <div className=\"flex flex-col gap-2 md:flex-row md:items-center md:gap-4\">\n <p>{copyright}</p>\n <a\n href=\"https://opensite.ai\"\n className=\"hover:text-foreground\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n AI Website and Automation Platform by Opensite\n </a>\n </div>\n <ul className=\"flex gap-4\">\n {legalLinks.map((link, idx) => (\n <li key={idx}>\n <a href={link.href} className=\"hover:text-foreground\">\n {link.name}\n </a>\n </li>\n ))}\n </ul>\n </div>\n </footer>\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Img } from \"@page-speed/img\";\nimport { DynamicIcon } from \"../../ui/dynamic-icon\";\n\n/**\n * Social link configuration\n */\nexport interface FooterContactCardSocialLink {\n /** Icon name in format: prefix/name (e.g., \"simple-icons/instagram\") */\n icon: string;\n /** Link URL */\n href: string;\n /** Accessible label */\n label: string;\n}\n\n/**\n * Navigation link configuration\n */\nexport interface FooterContactCardNavLink {\n name: string;\n href: string;\n}\n\n/**\n * Props for the FooterContactCard component\n */\nexport interface FooterContactCardProps {\n /** Logo configuration */\n logo?: {\n url: string;\n src: string;\n alt: string;\n title: string;\n };\n /** Additional CSS classes */\n className?: string;\n /** Main heading text */\n heading?: string;\n /** Contact email */\n email?: string;\n /** Contact phone */\n phone?: string;\n /** Contact address */\n address?: string;\n /** Social media links */\n socialLinks?: FooterContactCardSocialLink[];\n /** Navigation links */\n navLinks?: FooterContactCardNavLink[];\n /** Location text */\n location?: string;\n /** Copyright text */\n copyright?: string;\n /** Optional Optix Flow configuration for @page-speed/img */\n optixFlowConfig?: {\n apiKey: string;\n compression?: number;\n };\n}\n\nconst defaultSocialLinks: FooterContactCardSocialLink[] = [\n { icon: \"simple-icons/instagram\", href: \"#\", label: \"Instagram\" },\n { icon: \"simple-icons/facebook\", href: \"#\", label: \"Facebook\" },\n { icon: \"simple-icons/x\", href: \"#\", label: \"X (Twitter)\" },\n { icon: \"simple-icons/linkedin\", href: \"#\", label: \"LinkedIn\" },\n];\n\nconst defaultNavLinks: FooterContactCardNavLink[] = [\n { name: \"Home\", href: \"#\" },\n { name: \"About\", href: \"#\" },\n { name: \"Services\", href: \"#\" },\n { name: \"Contact\", href: \"#\" },\n];\n\n/**\n * FooterContactCard - A footer with large heading, contact information, and social links.\n *\n * Features a prominent heading, contact details (email, phone, address), social media icons,\n * and horizontal navigation. Ideal for service businesses, agencies, and professional websites\n * that want to emphasize contact information and make it easy for visitors to get in touch.\n */\nexport function FooterContactCard({\n logo = {\n url: \"https://opensite.ai\",\n src: \"https://cdn.ing/assets/i/r/285975/eud79qeya11q5w6ueyhklueardyx/os-suircle-black-white.png\",\n alt: \"Opensite AI\",\n title: \"Opensite AI\",\n },\n className,\n heading = \"Let's work together\",\n email = \"hello@opensite.ai\",\n phone = \"+1 (555) 123-4567\",\n address = \"123 Main Street, San Francisco, CA 94102\",\n socialLinks = defaultSocialLinks,\n navLinks = defaultNavLinks,\n location = \"San Francisco\",\n copyright = `© ${new Date().getFullYear()} Opensite AI. All rights reserved.`,\n optixFlowConfig,\n}: FooterContactCardProps): React.JSX.Element {\n return (\n <section className={cn(\"py-32\", className)}>\n <div className=\"container\">\n <footer>\n <div className=\"grid gap-12 lg:grid-cols-2\">\n {/* Left Column - Heading and Contact */}\n <div>\n <a href={logo.url} className=\"mb-8 flex items-center gap-2\">\n <Img\n src={logo.src}\n alt={logo.alt}\n className=\"h-10\"\n optixFlowConfig={optixFlowConfig}\n />\n <span className=\"text-xl font-semibold\">{logo.title}</span>\n </a>\n <h2 className=\"mb-8 text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl\">\n {heading}\n </h2>\n <div className=\"space-y-4 text-muted-foreground\">\n <p>\n <a href={`mailto:${email}`} className=\"hover:text-primary\">\n {email}\n </a>\n </p>\n <p>\n <a href={`tel:${phone}`} className=\"hover:text-primary\">\n {phone}\n </a>\n </p>\n <p>{address}</p>\n </div>\n </div>\n\n {/* Right Column - Social and Navigation */}\n <div className=\"flex flex-col justify-between\">\n <div>\n <p className=\"mb-4 font-medium\">Follow Us</p>\n <ul className=\"flex items-center gap-4\">\n {socialLinks.map((social, idx) => (\n <li key={idx}>\n <a\n href={social.href}\n aria-label={social.label}\n className=\"flex size-12 items-center justify-center rounded-full bg-muted text-muted-foreground transition-colors hover:bg-primary hover:text-primary-foreground\"\n >\n <DynamicIcon name={social.icon} size={20} />\n </a>\n </li>\n ))}\n </ul>\n </div>\n <nav className=\"mt-8\">\n <ul className=\"flex flex-wrap gap-6\">\n {navLinks.map((link, idx) => (\n <li key={idx}>\n <a\n href={link.href}\n className=\"text-muted-foreground hover:text-primary\"\n >\n {link.name}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n </div>\n </div>\n\n {/* Bottom Section */}\n <div className=\"mt-16 flex flex-col justify-between gap-4 border-t pt-8 text-sm text-muted-foreground md:flex-row md:items-center\">\n <div className=\"flex flex-col gap-2 md:flex-row md:items-center md:gap-4\">\n <p>{copyright}</p>\n <a\n href=\"https://opensite.ai\"\n className=\"hover:text-primary\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n AI Website and Automation Platform by Opensite\n </a>\n </div>\n <p>\n Designed in <strong>{location}</strong>\n </p>\n </div>\n </footer>\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Img } from \"@page-speed/img\";\n\n/**\n * Menu item configuration\n */\nexport interface FooterBackgroundCardMenuItem {\n title: string;\n links: {\n text: string;\n url: string;\n }[];\n}\n\n/**\n * Contact information configuration\n */\nexport interface FooterBackgroundCardContact {\n phone: string;\n email: string;\n location: string;\n timezone: string;\n}\n\n/**\n * Props for the FooterBackgroundCard component\n */\nexport interface FooterBackgroundCardProps {\n /** Logo configuration */\n logo?: {\n url: string;\n src: string;\n alt: string;\n title: string;\n };\n /** Additional CSS classes */\n className?: string;\n /** Background image URL */\n backgroundImage?: string;\n /** Profile image URL */\n profileImage?: string;\n /** Tagline text */\n tagline?: string;\n /** Personal message text */\n personalMessage?: string;\n /** CTA button text */\n ctaText?: string;\n /** CTA button URL */\n ctaUrl?: string;\n /** Contact information */\n contact?: FooterBackgroundCardContact;\n /** Menu items */\n menuItems?: FooterBackgroundCardMenuItem[];\n /** Copyright text */\n copyright?: string;\n /** Bottom links */\n bottomLinks?: {\n text: string;\n url: string;\n }[];\n /** Optional Optix Flow configuration for @page-speed/img */\n optixFlowConfig?: {\n apiKey: string;\n compression?: number;\n };\n}\n\nconst defaultMenuItems: FooterBackgroundCardMenuItem[] = [\n {\n title: \"Portfolio\",\n links: [\n { text: \"Overview\", url: \"#\" },\n { text: \"Projects\", url: \"#\" },\n { text: \"Pricing\", url: \"#\" },\n { text: \"About\", url: \"#\" },\n ],\n },\n {\n title: \"Social\",\n links: [\n { text: \"Twitter\", url: \"#\" },\n { text: \"Instagram\", url: \"#\" },\n { text: \"LinkedIn\", url: \"#\" },\n ],\n },\n];\n\nconst defaultContact: FooterBackgroundCardContact = {\n phone: \"+1 (555) 123-4567\",\n email: \"hello@opensite.ai\",\n location: \"NYC\",\n timezone: \"EST\",\n};\n\nconst defaultBottomLinks = [\n { text: \"Terms and Conditions\", url: \"#\" },\n { text: \"Privacy Policy\", url: \"#\" },\n];\n\n/**\n * FooterBackgroundCard - A footer with background image and floating contact card.\n *\n * Features a full-width background image with a floating card containing profile image,\n * personal message, CTA button, navigation links, and contact information. Ideal for\n * creative professionals, agencies, portfolios, and businesses that want a visually\n * striking footer with a personal touch.\n */\nexport function FooterBackgroundCard({\n logo = {\n url: \"https://opensite.ai\",\n src: \"https://cdn.ing/assets/i/r/285975/eud79qeya11q5w6ueyhklueardyx/os-suircle-black-white.png\",\n alt: \"Opensite AI\",\n title: \"Opensite AI\",\n },\n className,\n backgroundImage = \"https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=1920&q=80\",\n profileImage = \"https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=200&q=80\",\n tagline = \"Let's Connect\",\n personalMessage = \"I'm passionate about creating beautiful, functional components that make your projects shine. Let's work together to bring your vision to life.\",\n ctaText = \"Schedule a call\",\n ctaUrl = \"#\",\n contact = defaultContact,\n menuItems = defaultMenuItems,\n copyright = `© ${new Date().getFullYear()} Opensite AI. All rights reserved.`,\n bottomLinks = defaultBottomLinks,\n optixFlowConfig,\n}: FooterBackgroundCardProps): React.JSX.Element {\n return (\n <section\n className={cn(\"bg-cover bg-center bg-no-repeat py-32\", className)}\n style={{\n backgroundImage: `url('${backgroundImage}')`,\n }}\n >\n <div className=\"container\">\n <div className=\"mx-auto max-w-7xl rounded-lg bg-background p-8 shadow-lg md:p-12\">\n <div className=\"grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-4 lg:gap-12\">\n {/* Profile and CTA Section */}\n <div className=\"lg:col-span-1\">\n <div className=\"mb-4 flex items-center gap-4\">\n <Img\n src={profileImage}\n alt=\"Profile\"\n className=\"h-16 w-16 rounded-full object-cover\"\n optixFlowConfig={optixFlowConfig}\n />\n <h3 className=\"text-2xl font-medium\">{tagline}</h3>\n </div>\n <p className=\"mb-6 text-sm leading-relaxed text-muted-foreground\">\n {personalMessage}\n </p>\n <a\n href={ctaUrl}\n className=\"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-4 py-2\"\n >\n {ctaText}\n </a>\n </div>\n\n {/* Menu Sections */}\n {menuItems.map((menu, idx) => (\n <div key={idx}>\n <h3 className=\"mb-4 text-sm font-medium tracking-wider text-primary uppercase\">\n {menu.title}\n </h3>\n <ul className=\"space-y-3\">\n {menu.links.map((link, index) => (\n <li key={index}>\n <a\n href={link.url}\n className=\"border-b border-transparent text-muted-foreground transition-all duration-300 ease-in-out hover:border-primary hover:text-primary\"\n >\n {link.text}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n\n {/* Contact Section */}\n <div>\n <h3 className=\"mb-4 text-sm font-medium tracking-wider text-primary uppercase\">\n Contact\n </h3>\n <ul className=\"space-y-3\">\n <li className=\"text-muted-foreground\">{contact.phone}</li>\n <li className=\"text-muted-foreground\">{contact.email}</li>\n <li className=\"text-muted-foreground\">\n {contact.location} • {contact.timezone}\n </li>\n </ul>\n </div>\n </div>\n\n {/* Bottom Section */}\n <div className=\"mt-12 flex flex-col items-center justify-between gap-4 border-t border-border pt-8 md:flex-row\">\n <div className=\"flex flex-col gap-2 text-sm text-muted-foreground md:flex-row md:items-center md:gap-4\">\n <p>{copyright}</p>\n <a\n href=\"https://opensite.ai\"\n className=\"hover:text-primary\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n AI Website and Automation Platform by Opensite\n </a>\n </div>\n <div className=\"flex gap-4\">\n {bottomLinks.map((link, idx) => (\n <a\n key={idx}\n href={link.url}\n className=\"text-sm text-muted-foreground transition-colors hover:text-primary\"\n >\n {link.text}\n </a>\n ))}\n </div>\n </div>\n </div>\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { motion } from \"framer-motion\";\nimport { cn } from \"../../../lib/utils\";\nimport { DynamicIcon } from \"../../ui/dynamic-icon\";\n\n/**\n * Social link configuration\n */\nexport interface FooterAnimatedSocialLink {\n /** Display name */\n name: string;\n /** Link URL */\n href: string;\n}\n\n/**\n * Props for the FooterAnimatedSocial component\n */\nexport interface FooterAnimatedSocialProps {\n /** Additional CSS classes */\n className?: string;\n /** Main heading text */\n heading?: string;\n /** Description text */\n description?: string;\n /** CTA button text */\n ctaText?: string;\n /** CTA button URL */\n ctaUrl?: string;\n /** Social media links */\n socialLinks?: FooterAnimatedSocialLink[];\n /** Copyright text */\n copyright?: string;\n}\n\nconst defaultSocialLinks: FooterAnimatedSocialLink[] = [\n { name: \"Instagram\", href: \"#\" },\n { name: \"X (Twitter)\", href: \"#\" },\n];\n\nconst containerVariants = {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: {\n duration: 0.6,\n staggerChildren: 0.1,\n },\n },\n};\n\nconst itemVariants = {\n hidden: { opacity: 0, y: 20 },\n visible: {\n opacity: 1,\n y: 0,\n transition: { duration: 0.5 },\n },\n};\n\n/**\n * FooterAnimatedSocial - An animated footer with Framer Motion effects and social links.\n *\n * Features smooth entrance animations, a prominent heading with CTA button,\n * animated social links with hover effects, and a clean separator. Ideal for\n * modern websites, portfolios, and creative projects that want to add visual\n * polish and interactivity to their footer.\n */\nexport function FooterAnimatedSocial({\n className,\n heading = \"Connect with Me\",\n description = \"No commitments. Just a quick chat to see if we click.\",\n ctaText = \"Get in Touch\",\n ctaUrl = \"#\",\n socialLinks = defaultSocialLinks,\n copyright = `© Copyright ${new Date().getFullYear()}. All rights Reserved.`,\n}: FooterAnimatedSocialProps): React.JSX.Element {\n return (\n <section className={cn(\"py-32\", className)}>\n <div className=\"container\">\n <footer>\n <div>\n <motion.div\n variants={containerVariants}\n initial=\"hidden\"\n whileInView=\"visible\"\n viewport={{ once: true }}\n className=\"flex flex-col justify-between md:flex-row md:items-center\"\n >\n <div className=\"space-y-8\">\n <motion.div variants={itemVariants} className=\"space-y-6\">\n <h2 className=\"text-4xl leading-tight font-bold text-foreground lg:text-5xl\">\n {heading}\n </h2>\n <p className=\"max-w-md text-lg leading-relaxed text-muted-foreground\">\n {description}\n </p>\n </motion.div>\n\n <motion.div variants={itemVariants}>\n <a\n href={ctaUrl}\n className=\"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-11 px-8\"\n >\n {ctaText}\n </a>\n </motion.div>\n </div>\n\n <div className=\"mt-5 space-y-8 md:mt-0\">\n <motion.div variants={itemVariants}>\n <div className=\"space-y-6\">\n {socialLinks.map((link) => (\n <motion.div\n key={link.name}\n variants={itemVariants}\n whileHover={{ x: 4 }}\n transition={{\n type: \"spring\",\n stiffness: 300,\n damping: 20,\n }}\n >\n <a\n href={link.href}\n className=\"group flex items-center gap-2 py-2 text-foreground transition-colors hover:text-foreground/80\"\n >\n <span className=\"text-xl font-medium\">\n {link.name}\n </span>\n <DynamicIcon\n name=\"lucide/arrow-up-right\"\n size={24}\n className=\"transition-transform group-hover:translate-x-0.5 group-hover:-translate-y-0.5\"\n />\n </a>\n </motion.div>\n ))}\n </div>\n </motion.div>\n </div>\n </motion.div>\n\n <motion.div\n variants={containerVariants}\n initial=\"hidden\"\n whileInView=\"visible\"\n viewport={{ once: true }}\n className=\"mt-16\"\n >\n <motion.div variants={itemVariants}>\n <div className=\"mb-8 h-px w-full bg-border\" />\n </motion.div>\n\n <motion.div\n variants={itemVariants}\n className=\"flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center\"\n >\n <p className=\"text-sm text-muted-foreground\">{copyright}</p>\n\n <div className=\"flex items-center gap-6 text-sm\">\n <span className=\"text-muted-foreground\">\n <motion.a\n href=\"https://opensite.ai\"\n className=\"underline underline-offset-4 transition-colors hover:text-foreground\"\n whileHover={{ scale: 1.05 }}\n transition={{\n type: \"spring\",\n stiffness: 300,\n damping: 20,\n }}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n AI Website and Automation Platform by Opensite\n </motion.a>\n </span>\n </div>\n </motion.div>\n </motion.div>\n </div>\n </footer>\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { motion } from \"framer-motion\";\nimport { cn } from \"../../../lib/utils\";\nimport { DynamicIcon } from \"../../ui/dynamic-icon\";\n\n/**\n * Navigation link configuration\n */\nexport interface FooterNewsletterMinimalNavLink {\n label: string;\n href: string;\n}\n\n/**\n * Social link configuration\n */\nexport interface FooterNewsletterMinimalSocialLink {\n label: string;\n href: string;\n}\n\n/**\n * Footer link configuration\n */\nexport interface FooterNewsletterMinimalFooterLink {\n label: string;\n href: string;\n}\n\n/**\n * Props for the FooterNewsletterMinimal component\n */\nexport interface FooterNewsletterMinimalProps {\n /** Additional CSS classes */\n className?: string;\n /** Main heading text */\n heading?: string;\n /** Support email */\n supportEmail?: string;\n /** Navigation links */\n navLinks?: FooterNewsletterMinimalNavLink[];\n /** Social links */\n socialLinks?: FooterNewsletterMinimalSocialLink[];\n /** Footer links (privacy, terms) */\n footerLinks?: FooterNewsletterMinimalFooterLink[];\n /** Newsletter label */\n newsletterLabel?: string;\n /** Newsletter placeholder */\n newsletterPlaceholder?: string;\n /** Location text */\n location?: string;\n}\n\nconst defaultNavLinks: FooterNewsletterMinimalNavLink[] = [\n { label: \"Home\", href: \"#\" },\n { label: \"Collection\", href: \"#\" },\n { label: \"Projects\", href: \"#\" },\n { label: \"Pricing\", href: \"#\" },\n { label: \"Login\", href: \"#\" },\n];\n\nconst defaultSocialLinks: FooterNewsletterMinimalSocialLink[] = [\n { label: \"Linkedin\", href: \"#\" },\n { label: \"Twitter\", href: \"#\" },\n { label: \"Facebook\", href: \"#\" },\n];\n\nconst defaultFooterLinks: FooterNewsletterMinimalFooterLink[] = [\n { label: \"Privacy Policy\", href: \"#\" },\n { label: \"Terms & Conditions\", href: \"#\" },\n];\n\n/**\n * FooterNewsletterMinimal - A dark-themed minimal footer with newsletter and animated logo.\n *\n * Features a clean layout with main heading, support email, navigation columns,\n * newsletter signup form, and a large animated brand logo. Ideal for modern SaaS products,\n * creative agencies, and businesses that want a sophisticated, dark-themed footer\n * with strong visual branding.\n */\nexport function FooterNewsletterMinimal({\n className,\n heading = \"Unlock 800+ blocks now\",\n supportEmail = \"hi@opensite.ai\",\n navLinks = defaultNavLinks,\n socialLinks = defaultSocialLinks,\n footerLinks = defaultFooterLinks,\n newsletterLabel = \"Sign up for newsletter :\",\n newsletterPlaceholder = \"Name*\",\n location = \"San Francisco, CA\",\n}: FooterNewsletterMinimalProps): React.JSX.Element {\n return (\n <section\n className={cn(\"dark bg-background py-32 text-foreground\", className)}\n >\n <div className=\"container\">\n <div className=\"flex flex-col justify-between gap-15 lg:flex-row\">\n <div className=\"flex flex-col gap-10\">\n <p className=\"relative text-4xl font-medium tracking-tight lg:text-5xl\">\n {heading}\n </p>\n <div className=\"space-y-1 text-sm font-light tracking-tight lg:text-base\">\n <p>Get Support : </p>\n <a href={`mailto:${supportEmail}`}>{supportEmail}</a>\n </div>\n </div>\n <div className=\"grid w-full max-w-xs grid-cols-2 gap-10 text-sm font-light lg:text-base\">\n <ul className=\"space-y-1\">\n {navLinks.map((item) => (\n <li key={item.label}>\n <a\n href={item.href}\n className=\"tracking-tight text-foreground hover:text-foreground/30\"\n >\n {item.label}\n </a>\n </li>\n ))}\n </ul>\n <ul className=\"space-y-1\">\n {socialLinks.map((item) => (\n <li key={item.label}>\n <a\n href={item.href}\n className=\"group flex items-center gap-1 tracking-tight text-foreground hover:text-foreground/30\"\n >\n {item.label}{\" \"}\n <DynamicIcon\n name=\"lucide/arrow-up-right\"\n size={14}\n className=\"text-foreground group-hover:text-muted-foreground/50\"\n />\n </a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n <div className=\"mt-20 flex flex-col justify-between gap-15 lg:flex-row\">\n <div className=\"flex w-full max-w-md flex-col gap-10\">\n <div className=\"space-y-1 text-sm font-light tracking-tight lg:text-base\">\n <p>{newsletterLabel}</p>\n <form className=\"flex w-full items-end border-b border-b-foreground/10\">\n <input\n type=\"text\"\n placeholder={newsletterPlaceholder}\n className=\"mt-10 w-full rounded-none border-0 bg-transparent p-0 uppercase shadow-none placeholder:text-foreground/20 focus:outline-none focus:ring-0 lg:text-base\"\n />\n <button type=\"submit\" className=\"p-2 hover:bg-muted/20\">\n <DynamicIcon name=\"lucide/arrow-right\" size={20} />\n </button>\n </form>\n </div>\n </div>\n <div className=\"grid w-full max-w-xs grid-cols-2 gap-10 text-sm font-light lg:text-base\">\n <div className=\"w-32\">{location}</div>\n <ul className=\"space-y-1\">\n {footerLinks.map((item) => (\n <li key={item.label}>\n <a\n href={item.href}\n className=\"group flex items-center gap-1 tracking-tight text-foreground hover:text-foreground/30\"\n >\n {item.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n <div className=\"mt-20 w-full lg:mt-32\">\n <motion.div\n initial={{ opacity: 0, y: 20 }}\n whileInView={{ opacity: 1, y: 0 }}\n viewport={{ once: true }}\n transition={{ duration: 0.6 }}\n className=\"text-center\"\n >\n <span className=\"text-6xl font-bold tracking-tighter md:text-8xl lg:text-9xl\">\n OPENSITE\n </span>\n </motion.div>\n </div>\n <div className=\"mt-8 text-center text-sm text-muted-foreground\">\n <p>© {new Date().getFullYear()} Opensite AI. All rights reserved.</p>\n <a\n href=\"https://opensite.ai\"\n className=\"mt-2 inline-block hover:text-foreground\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n AI Website and Automation Platform by Opensite\n </a>\n </div>\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { DynamicIcon } from \"../../ui/dynamic-icon\";\n\n/**\n * Social link configuration with icon\n */\nexport interface FooterCtaSocialLink {\n /** Icon name in format: prefix/name (e.g., \"lucide/twitter\") */\n icon: string;\n /** Link URL */\n url: string;\n /** Accessible label */\n label: string;\n}\n\n/**\n * Props for the FooterCtaSocial component\n */\nexport interface FooterCtaSocialProps {\n /** Additional CSS classes */\n className?: string;\n /** Pre-heading text */\n preHeading?: string;\n /** Main heading text */\n heading?: string;\n /** Description text */\n description?: string;\n /** CTA button text */\n buttonText?: string;\n /** CTA button URL */\n buttonUrl?: string;\n /** Contact email */\n email?: string;\n /** Social links */\n socialLinks?: FooterCtaSocialLink[];\n}\n\nconst defaultSocialLinks: FooterCtaSocialLink[] = [\n { icon: \"lucide/twitter\", url: \"#\", label: \"Twitter\" },\n { icon: \"lucide/instagram\", url: \"#\", label: \"Instagram\" },\n { icon: \"lucide/facebook\", url: \"#\", label: \"Facebook\" },\n];\n\n/**\n * FooterCtaSocial - A centered CTA footer with decorative lines and social icons.\n *\n * Features a centered layout with decorative gradient lines, pre-heading text,\n * large heading, description, prominent CTA button, social media icons, and\n * contact email. Ideal for landing pages, marketing sites, and businesses\n * that want a conversion-focused footer with strong visual appeal.\n */\nexport function FooterCtaSocial({\n className,\n preHeading = \"Let's connect\",\n heading = \"You want to scale faster? Try Opensite today.\",\n description = \"Join thousands of companies already using our platform to scale their operations\",\n buttonText = \"Get Started Now\",\n buttonUrl = \"#\",\n email = \"hello@opensite.ai\",\n socialLinks = defaultSocialLinks,\n}: FooterCtaSocialProps): React.JSX.Element {\n return (\n <section className={cn(\"relative py-32\", className)}>\n <div className=\"relative z-10 container\">\n <div className=\"mx-auto flex max-w-3xl flex-col items-center gap-2 text-center\">\n {/* Pre-heading with decorative lines */}\n <div className=\"flex w-full items-center gap-4\">\n <div className=\"h-px flex-1 bg-[linear-gradient(270deg,var(--primary,rgb(255,255,255))_0%,var(--secondary,rgb(0,0,0))_100%)] opacity-50\" />\n <p className=\"text-sm text-muted-foreground italic md:text-base\">\n {preHeading}\n </p>\n <div className=\"h-px flex-1 bg-[linear-gradient(270deg,var(--secondary,rgb(0,0,0))_0%,var(--primary,rgb(255,255,255))_100%)] opacity-50\" />\n </div>\n\n {/* Main heading */}\n <h2 className=\"py-6 text-5xl font-bold md:text-6xl\">{heading}</h2>\n\n {/* Description */}\n <p className=\"max-w-2xl text-base text-muted-foreground md:text-lg\">\n {description}\n </p>\n\n {/* CTA Button */}\n <a\n href={buttonUrl}\n className=\"group relative mt-4 inline-flex items-center gap-2 rounded-lg border bg-background px-8 py-4 text-base font-medium transition-all hover:bg-muted\"\n >\n <span>{buttonText}</span>\n <DynamicIcon\n name=\"lucide/arrow-up-right\"\n size={16}\n className=\"transition-transform group-hover:translate-x-1 group-hover:-translate-y-1\"\n />\n </a>\n\n {/* Social Media Links */}\n <div className=\"flex items-center gap-6 pt-8\">\n {socialLinks.map((link, idx) => (\n <React.Fragment key={idx}>\n <a\n href={link.url}\n className=\"text-muted-foreground transition-colors hover:text-foreground\"\n aria-label={link.label}\n >\n <DynamicIcon name={link.icon} size={20} />\n </a>\n {idx < socialLinks.length - 1 && (\n <div className=\"h-4 w-px bg-border\" />\n )}\n </React.Fragment>\n ))}\n </div>\n\n {/* Support Email */}\n <p className=\"pt-2 text-sm text-muted-foreground md:text-base\">\n <a\n href={`mailto:${email}`}\n className=\"transition-colors hover:text-foreground\"\n >\n {email}\n </a>\n </p>\n\n {/* Attribution */}\n <div className=\"mt-8 border-t pt-8 text-sm text-muted-foreground\">\n <p>© {new Date().getFullYear()} Opensite AI. All rights reserved.</p>\n <a\n href=\"https://opensite.ai\"\n className=\"mt-2 inline-block hover:text-foreground\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n AI Website and Automation Platform by Opensite\n </a>\n </div>\n </div>\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Img } from \"@page-speed/img\";\nimport { DynamicIcon } from \"../../ui/dynamic-icon\";\n\n/**\n * Social link configuration\n */\nexport interface FooterNavSocialLink {\n /** Icon name in format: prefix/name (e.g., \"simple-icons/instagram\") */\n icon: string;\n /** Link URL */\n href: string;\n /** Accessible label */\n label: string;\n}\n\n/**\n * Navigation section configuration\n */\nexport interface FooterNavSocialSection {\n title: string;\n links: {\n name: string;\n href: string;\n }[];\n}\n\n/**\n * Props for the FooterNavSocial component\n */\nexport interface FooterNavSocialProps {\n /** Logo configuration */\n logo?: {\n url: string;\n src: string;\n alt: string;\n title: string;\n };\n /** Additional CSS classes */\n className?: string;\n /** Navigation sections */\n sections?: FooterNavSocialSection[];\n /** Social media links */\n socialLinks?: FooterNavSocialLink[];\n /** Newsletter heading */\n newsletterHeading?: string;\n /** Newsletter description */\n newsletterDescription?: string;\n /** Newsletter placeholder */\n newsletterPlaceholder?: string;\n /** Newsletter button text */\n newsletterButtonText?: string;\n /** Copyright text */\n copyright?: string;\n /** Legal links */\n legalLinks?: {\n name: string;\n href: string;\n }[];\n /** Optional Optix Flow configuration for @page-speed/img */\n optixFlowConfig?: {\n apiKey: string;\n compression?: number;\n };\n}\n\nconst defaultSections: FooterNavSocialSection[] = [\n {\n title: \"Product\",\n links: [\n { name: \"Overview\", href: \"#\" },\n { name: \"Pricing\", href: \"#\" },\n { name: \"Marketplace\", href: \"#\" },\n { name: \"Features\", href: \"#\" },\n ],\n },\n {\n title: \"Company\",\n links: [\n { name: \"About\", href: \"#\" },\n { name: \"Team\", href: \"#\" },\n { name: \"Blog\", href: \"#\" },\n { name: \"Careers\", href: \"#\" },\n ],\n },\n {\n title: \"Resources\",\n links: [\n { name: \"Help\", href: \"#\" },\n { name: \"Sales\", href: \"#\" },\n { name: \"Advertise\", href: \"#\" },\n ],\n },\n];\n\nconst defaultSocialLinks: FooterNavSocialLink[] = [\n { icon: \"simple-icons/instagram\", href: \"#\", label: \"Instagram\" },\n { icon: \"simple-icons/facebook\", href: \"#\", label: \"Facebook\" },\n { icon: \"simple-icons/x\", href: \"#\", label: \"X (Twitter)\" },\n { icon: \"simple-icons/linkedin\", href: \"#\", label: \"LinkedIn\" },\n];\n\nconst defaultLegalLinks = [\n { name: \"Terms and Conditions\", href: \"#\" },\n { name: \"Privacy Policy\", href: \"#\" },\n];\n\n/**\n * FooterNavSocial - A comprehensive footer with logo, navigation, newsletter, and social links.\n *\n * Features a logo with navigation sections, a newsletter signup form with heading and\n * description, social media icons, and legal links. Ideal for SaaS products, corporate\n * websites, and businesses that want a complete footer with all essential elements\n * organized in a clean, professional layout.\n */\nexport function FooterNavSocial({\n logo = {\n url: \"https://opensite.ai\",\n src: \"https://cdn.ing/assets/i/r/285975/eud79qeya11q5w6ueyhklueardyx/os-suircle-black-white.png\",\n alt: \"Opensite AI\",\n title: \"Opensite AI\",\n },\n className,\n sections = defaultSections,\n socialLinks = defaultSocialLinks,\n newsletterHeading = \"Stay Updated\",\n newsletterDescription = \"Subscribe to our newsletter for the latest updates and news.\",\n newsletterPlaceholder = \"Enter your email\",\n newsletterButtonText = \"Subscribe\",\n copyright = `© ${new Date().getFullYear()} Opensite AI. All rights reserved.`,\n legalLinks = defaultLegalLinks,\n optixFlowConfig,\n}: FooterNavSocialProps): React.JSX.Element {\n return (\n <section className={cn(\"py-32\", className)}>\n <div className=\"container\">\n <footer>\n <div className=\"grid gap-10 lg:grid-cols-2\">\n {/* Left Column - Logo and Navigation */}\n <div>\n <a href={logo.url} className=\"mb-8 flex items-center gap-2\">\n <Img\n src={logo.src}\n alt={logo.alt}\n className=\"h-10\"\n optixFlowConfig={optixFlowConfig}\n />\n <span className=\"text-xl font-semibold\">{logo.title}</span>\n </a>\n <div className=\"grid gap-8 sm:grid-cols-3\">\n {sections.map((section, sectionIdx) => (\n <div key={sectionIdx}>\n <h3 className=\"mb-4 font-semibold\">{section.title}</h3>\n <ul className=\"space-y-3 text-sm text-muted-foreground\">\n {section.links.map((link, linkIdx) => (\n <li key={linkIdx}>\n <a href={link.href} className=\"hover:text-primary\">\n {link.name}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </div>\n\n {/* Right Column - Newsletter and Social */}\n <div className=\"flex flex-col justify-between\">\n <div className=\"mb-8\">\n <h3 className=\"mb-2 text-lg font-semibold\">{newsletterHeading}</h3>\n <p className=\"mb-4 text-sm text-muted-foreground\">\n {newsletterDescription}\n </p>\n <div className=\"flex max-w-md gap-2\">\n <input\n type=\"email\"\n placeholder={newsletterPlaceholder}\n className=\"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n />\n <button\n type=\"submit\"\n className=\"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-4 py-2\"\n >\n {newsletterButtonText}\n </button>\n </div>\n </div>\n <div>\n <p className=\"mb-4 font-medium\">Follow Us</p>\n <ul className=\"flex items-center gap-4\">\n {socialLinks.map((social, idx) => (\n <li key={idx}>\n <a\n href={social.href}\n aria-label={social.label}\n className=\"text-muted-foreground transition-colors hover:text-primary\"\n >\n <DynamicIcon name={social.icon} size={20} />\n </a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </div>\n\n {/* Bottom Section */}\n <div className=\"mt-16 flex flex-col justify-between gap-4 border-t pt-8 text-sm text-muted-foreground md:flex-row md:items-center\">\n <div className=\"flex flex-col gap-2 md:flex-row md:items-center md:gap-4\">\n <p>{copyright}</p>\n <a\n href=\"https://opensite.ai\"\n className=\"hover:text-primary\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n AI Website and Automation Platform by Opensite\n </a>\n </div>\n <ul className=\"flex gap-4\">\n {legalLinks.map((link, idx) => (\n <li key={idx}>\n <a href={link.href} className=\"hover:text-primary\">\n {link.name}\n </a>\n </li>\n ))}\n </ul>\n </div>\n </footer>\n </div>\n </section>\n );\n}\n","/**\n * Semantic Block Registry\n *\n * This registry maps semantic concepts to available UI blocks for AI-driven\n * site generation. Each block entry contains:\n * - id: Unique identifier for the block\n * - name: Human-readable name\n * - description: What the block does and when to use it\n * - semanticTags: Array of semantic concepts this block represents\n * - category: Block category (about, features, cta, testimonials, etc.)\n * - component: Reference to the actual component\n * - props: TypeScript type for the component's props\n * - exampleUsage: Code example showing how to use the block\n */\n\nimport { AlternatingBlocks } from \"../../components/blocks/about/alternating-blocks\";\nimport type { AlternatingBlocksProps } from \"../../components/blocks/about/alternating-blocks\";\nimport { MediaHoverCtas } from \"../../components/blocks/cta/media-hover-ctas\";\nimport type { MediaHoverCtasProps } from \"../../components/blocks/cta/media-hover-ctas\";\nimport { FeatureShowcase } from \"../../components/blocks/features/feature-showcase\";\nimport type { FeatureShowcaseProps } from \"../../components/blocks/features/feature-showcase\";\nimport { TeamMediaShowcase } from \"../../components/blocks/team/team-media-showcase\";\nimport type { TeamMediaShowcaseProps } from \"../../components/blocks/team/team-media-showcase\";\n\n// Footer components\nimport { FooterLinksGrid } from \"../../components/blocks/footers/footer-links-grid\";\nimport { FooterSocialNewsletter } from \"../../components/blocks/footers/footer-social-newsletter\";\nimport { FooterSocialApps } from \"../../components/blocks/footers/footer-social-apps\";\nimport { FooterSimpleCentered } from \"../../components/blocks/footers/footer-simple-centered\";\nimport { FooterBrandDescription } from \"../../components/blocks/footers/footer-brand-description\";\nimport { FooterNewsletterGrid } from \"../../components/blocks/footers/footer-newsletter-grid\";\nimport { FooterCtaBanner } from \"../../components/blocks/footers/footer-cta-banner\";\nimport { FooterContactCard } from \"../../components/blocks/footers/footer-contact-card\";\nimport { FooterBackgroundCard } from \"../../components/blocks/footers/footer-background-card\";\nimport { FooterAnimatedSocial } from \"../../components/blocks/footers/footer-animated-social\";\nimport { FooterNewsletterMinimal } from \"../../components/blocks/footers/footer-newsletter-minimal\";\nimport { FooterCtaSocial } from \"../../components/blocks/footers/footer-cta-social\";\nimport { FooterNavSocial } from \"../../components/blocks/footers/footer-nav-social\";\n\nexport interface BlockRegistryEntry<T = any> {\n id: string;\n name: string;\n description: string;\n semanticTags: string[];\n category: BlockCategory;\n component: React.ComponentType<T>;\n props: string;\n exampleUsage: string;\n}\n\nexport type BlockCategory =\n | \"about\"\n | \"features\"\n | \"cta\"\n | \"testimonials\"\n | \"services\"\n | \"hero\"\n | \"footer\"\n | \"header\"\n | \"pricing\"\n | \"team\"\n | \"stats\"\n | \"faq\"\n | \"contact\"\n | \"gallery\"\n | \"timeline\"\n | \"process\"\n | \"benefits\"\n | \"comparison\";\n\n/**\n * Block Registry - Central registry of all available UI blocks\n */\nexport const BLOCK_REGISTRY: Record<string, BlockRegistryEntry> = {\n \"alternating-blocks\": {\n id: \"alternating-blocks\",\n name: \"Alternating Content Blocks\",\n description:\n \"Display content sections with alternating left/right media placement. Ideal for storytelling, feature showcases, or company history sections.\",\n semanticTags: [\n \"about\",\n \"story\",\n \"history\",\n \"timeline\",\n \"features\",\n \"benefits\",\n \"alternating\",\n \"two-column\",\n \"content-media\",\n ],\n category: \"about\",\n component: AlternatingBlocks,\n props: \"AlternatingBlocksProps\",\n exampleUsage: `\n<AlternatingBlocks\n sections={[\n {\n content: (\n <div>\n <div className=\"flex items-center gap-2 mb-3\">\n <Lightbulb className=\"h-4 w-4 text-primary\" />\n <span className=\"text-sm font-medium text-muted-foreground\">\n The Origin\n </span>\n </div>\n <h3 className=\"mb-3 text-2xl font-semibold tracking-tight\">\n It started with frustration\n </h3>\n <p className=\"text-muted-foreground leading-relaxed\">\n We spent years watching teams drown in tools that promised to help\n but only added complexity. In 2018, we decided to build something better.\n </p>\n </div>\n ),\n media: <img src=\"...\" alt=\"...\" />,\n mediaLeft: false\n },\n {\n content: <div>...</div>,\n media: <img src=\"...\" alt=\"...\" />,\n mediaLeft: true\n }\n ]}\n/>\n `.trim(),\n },\n \"media-hover-ctas\": {\n id: \"media-hover-ctas\",\n name: \"Media Hover CTAs\",\n description:\n \"Display CTA cards that reveal background imagery or color on hover. Ideal for mission/vision tiles, service highlights, or campaign prompts.\",\n semanticTags: [\n \"cta\",\n \"call-to-action\",\n \"hover\",\n \"media\",\n \"cards\",\n \"grid\",\n \"image-hover\",\n \"tiles\",\n \"mission\",\n \"vision\",\n ],\n category: \"cta\",\n component: MediaHoverCtas,\n props: \"MediaHoverCtasProps\",\n exampleUsage: `\n<MediaHoverCtas\n items={[\n {\n content: (\n <div className=\"flex max-w-sm flex-col gap-4\">\n <span className=\"text-sm font-semibold uppercase tracking-wide text-primary\">\n Our Mission\n </span>\n <p className=\"text-muted-foreground\">\n Deliver remarkable experiences with thoughtful design.\n </p>\n </div>\n ),\n onHoverImgSrc: \"/images/mission.jpg\",\n altText: \"Our Mission\"\n },\n {\n content: (\n <div className=\"flex max-w-sm flex-col gap-4\">\n <span className=\"text-sm font-semibold uppercase tracking-wide text-primary\">\n Our Vision\n </span>\n <p className=\"text-muted-foreground\">\n Build the future of adaptive customer experiences.\n </p>\n </div>\n ),\n initialBackgroundColor: \"var(--brand-100)\",\n onHoverBackgroundColor: \"var(--brand-900)\"\n }\n ]}\n/>\n `.trim(),\n },\n \"feature-showcase\": {\n id: \"feature-showcase\",\n name: \"Feature Showcase Carousel\",\n description:\n \"Display feature content with media in an interactive carousel format. Each slide shows feature content alongside images or videos with smooth navigation. Features mobile height equalization for consistent appearance.\",\n semanticTags: [\n \"features\",\n \"carousel\",\n \"showcase\",\n \"slider\",\n \"highlights\",\n \"product-features\",\n \"capabilities\",\n \"interactive\",\n \"media-gallery\",\n ],\n category: \"features\",\n component: FeatureShowcase,\n props: \"FeatureShowcaseProps\",\n exampleUsage: `\n<FeatureShowcase\n items={[\n {\n content: (\n <div>\n <span className=\"text-sm font-medium text-primary mb-2 block\">\n DESIGNED TO HELP YOU GROW\n </span>\n <h3 className=\"mb-4 text-3xl font-bold tracking-tight\">\n Powerful Analytics\n </h3>\n <p className=\"text-muted-foreground leading-relaxed\">\n Track every metric that matters with real-time dashboards\n and comprehensive reporting tools.\n </p>\n </div>\n ),\n mediaComponent: <img src=\"...\" alt=\"Analytics Dashboard\" className=\"rounded-lg\" />\n },\n {\n content: (\n <div>\n <span className=\"text-sm font-medium text-primary mb-2 block\">\n SEAMLESS INTEGRATION\n </span>\n <h3 className=\"mb-4 text-3xl font-bold tracking-tight\">\n Connect Anywhere\n </h3>\n <p className=\"text-muted-foreground leading-relaxed\">\n Integrate with your favorite tools and platforms in seconds.\n </p>\n </div>\n ),\n mediaComponent: <img src=\"...\" alt=\"Integrations\" className=\"rounded-lg\" />\n }\n ]}\n/>\n `.trim(),\n },\n \"team-media-showcase\": {\n id: \"team-media-showcase\",\n name: \"Team Media Showcase\",\n description:\n \"Display team members in a responsive grid with full-bleed background images and hover effects. Each card shows the member's name and role with an optional action element that appears on hover. Ideal for team pages, about sections, or leadership showcases.\",\n semanticTags: [\n \"team\",\n \"members\",\n \"staff\",\n \"people\",\n \"leadership\",\n \"about\",\n \"grid\",\n \"cards\",\n \"hover\",\n \"image-background\",\n \"profiles\",\n ],\n category: \"team\",\n component: TeamMediaShowcase,\n props: \"TeamMediaShowcaseProps\",\n exampleUsage: `\n<TeamMediaShowcase\n listEyebrow=\"Our Team\"\n background=\"white\"\n verticalMargin=\"lg\"\n items={[\n {\n imageSrc: \"/team/john-doe.jpg\",\n name: \"John Doe\",\n role: \"CEO & Founder\",\n action: (\n <Button variant=\"outline\" className=\"text-white border-white\">\n View Profile\n </Button>\n )\n },\n {\n imageSrc: \"/team/jane-smith.jpg\",\n name: \"Jane Smith\",\n role: \"CTO\"\n },\n {\n imageSrc: \"/team/bob-wilson.jpg\",\n name: \"Bob Wilson\",\n role: \"Head of Design\"\n }\n ]}\n/>\n `.trim(),\n },\n // Footer blocks\n \"footer-links-grid\": {\n id: \"footer-links-grid\",\n name: \"Footer Links Grid\",\n description:\n \"A multi-column footer with logo, navigation links, and legal information. Features a responsive grid layout with customizable navigation sections, company branding, and bottom legal links. Ideal for corporate websites, SaaS products, and marketing sites that need organized footer navigation.\",\n semanticTags: [\n \"footer\",\n \"navigation\",\n \"links\",\n \"multi-column\",\n \"grid\",\n \"corporate\",\n \"legal\",\n \"sitemap\",\n \"branding\",\n ],\n category: \"footer\",\n component: FooterLinksGrid,\n props: \"FooterLinksGridProps\",\n exampleUsage: `\n<FooterLinksGrid\n logo={{\n src: \"https://example.com/logo.png\",\n alt: \"Company Logo\",\n title: \"Company Name\",\n url: \"/\"\n }}\n tagline=\"Components made easy.\"\n menuItems={[\n {\n title: \"Product\",\n links: [\n { text: \"Overview\", url: \"#\" },\n { text: \"Pricing\", url: \"#\" }\n ]\n }\n ]}\n/>\n `.trim(),\n },\n \"footer-social-newsletter\": {\n id: \"footer-social-newsletter\",\n name: \"Footer Social Newsletter\",\n description:\n \"A footer with social icons, navigation links, and newsletter signup. Features prominent social media icons in circular buttons, multi-column navigation, and an email newsletter subscription form. Ideal for community-focused products, SaaS platforms, and businesses that prioritize social engagement and email marketing.\",\n semanticTags: [\n \"footer\",\n \"social\",\n \"newsletter\",\n \"subscription\",\n \"email\",\n \"community\",\n \"icons\",\n \"navigation\",\n ],\n category: \"footer\",\n component: FooterSocialNewsletter,\n props: \"FooterSocialNewsletterProps\",\n exampleUsage: `\n<FooterSocialNewsletter\n socialLinks={[\n { icon: \"simple-icons/discord\", href: \"#\", label: \"Discord\" },\n { icon: \"simple-icons/x\", href: \"#\", label: \"X (Twitter)\" }\n ]}\n newsletterLabel=\"Subscribe to our newsletter\"\n/>\n `.trim(),\n },\n \"footer-social-apps\": {\n id: \"footer-social-apps\",\n name: \"Footer Social Apps\",\n description:\n \"A footer with social icons, navigation links, and mobile app download links. Features prominent social media icons and mobile app store links in circular buttons, along with multi-column navigation. Ideal for products with mobile apps, community-focused platforms, and businesses that want to highlight their cross-platform presence.\",\n semanticTags: [\n \"footer\",\n \"social\",\n \"mobile\",\n \"apps\",\n \"download\",\n \"android\",\n \"ios\",\n \"app-store\",\n \"navigation\",\n ],\n category: \"footer\",\n component: FooterSocialApps,\n props: \"FooterSocialAppsProps\",\n exampleUsage: `\n<FooterSocialApps\n socialLinks={[\n { icon: \"simple-icons/discord\", href: \"#\", label: \"Discord\" }\n ]}\n appLinks={[\n { icon: \"mdi/android\", href: \"#\", label: \"Android\" },\n { icon: \"mdi/apple\", href: \"#\", label: \"iOS\" }\n ]}\n/>\n `.trim(),\n },\n \"footer-simple-centered\": {\n id: \"footer-simple-centered\",\n name: \"Footer Simple Centered\",\n description:\n \"A clean, minimal footer with logo, sitemap, and legal links. Features a simple two-column sitemap layout with company branding and bottom legal links. Ideal for corporate websites, landing pages, and products that prefer a clean, uncluttered footer design without social media or newsletter elements.\",\n semanticTags: [\n \"footer\",\n \"minimal\",\n \"simple\",\n \"clean\",\n \"sitemap\",\n \"corporate\",\n \"legal\",\n \"centered\",\n ],\n category: \"footer\",\n component: FooterSimpleCentered,\n props: \"FooterSimpleCenteredProps\",\n exampleUsage: `\n<FooterSimpleCentered\n tagline=\"Components made easy.\"\n sitemap={[\n {\n title: \"Company\",\n links: [\n { title: \"About Us\", href: \"#\" },\n { title: \"Careers\", href: \"#\" }\n ]\n }\n ]}\n/>\n `.trim(),\n },\n \"footer-brand-description\": {\n id: \"footer-brand-description\",\n name: \"Footer Brand Description\",\n description:\n \"A footer with logo, description, social icons, and navigation. Features a prominent brand section with logo, description, and social links on the left, with multi-column navigation on the right. Ideal for brand-focused websites, startups, and businesses that want to emphasize their identity and social presence in the footer.\",\n semanticTags: [\n \"footer\",\n \"brand\",\n \"description\",\n \"social\",\n \"identity\",\n \"startup\",\n \"navigation\",\n \"about\",\n ],\n category: \"footer\",\n component: FooterBrandDescription,\n props: \"FooterBrandDescriptionProps\",\n exampleUsage: `\n<FooterBrandDescription\n description=\"A collection of components for your startup business or side project.\"\n socialLinks={[\n { icon: \"simple-icons/instagram\", href: \"#\", label: \"Instagram\" }\n ]}\n/>\n `.trim(),\n },\n \"footer-newsletter-grid\": {\n id: \"footer-newsletter-grid\",\n name: \"Footer Newsletter Grid\",\n description:\n \"A comprehensive footer with logo, social icons, navigation, and newsletter. Features a full-width grid layout with brand section (logo, description, social icons), multi-column navigation, and a prominent newsletter signup form. Ideal for content-heavy websites, SaaS products, and businesses that prioritize email marketing and social engagement.\",\n semanticTags: [\n \"footer\",\n \"newsletter\",\n \"grid\",\n \"social\",\n \"comprehensive\",\n \"email\",\n \"marketing\",\n \"subscription\",\n ],\n category: \"footer\",\n component: FooterNewsletterGrid,\n props: \"FooterNewsletterGridProps\",\n exampleUsage: `\n<FooterNewsletterGrid\n description=\"A collection of 100+ responsive HTML templates.\"\n newsletterTitle=\"Newsletter\"\n newsletterPlaceholder=\"Email\"\n/>\n `.trim(),\n },\n \"footer-cta-banner\": {\n id: \"footer-cta-banner\",\n name: \"Footer CTA Banner\",\n description:\n \"A dark-themed footer with prominent CTA banner, navigation, and newsletter. Features a full-width call-to-action banner at the top with heading, description, and button, followed by multi-column navigation, newsletter signup, and social links. Ideal for SaaS products, marketing sites, and businesses that want to drive conversions directly from the footer.\",\n semanticTags: [\n \"footer\",\n \"cta\",\n \"banner\",\n \"dark\",\n \"conversion\",\n \"marketing\",\n \"newsletter\",\n \"call-to-action\",\n ],\n category: \"footer\",\n component: FooterCtaBanner,\n props: \"FooterCtaBannerProps\",\n exampleUsage: `\n<FooterCtaBanner\n ctaHeading=\"Ready to get started?\"\n ctaDescription=\"Join thousands of satisfied customers.\"\n ctaButtonText=\"Get Started\"\n/>\n `.trim(),\n },\n \"footer-contact-card\": {\n id: \"footer-contact-card\",\n name: \"Footer Contact Card\",\n description:\n \"A footer with large heading, contact information, and social links. Features a prominent heading, contact details (email, phone, address), social media icons, and horizontal navigation. Ideal for service businesses, agencies, and professional websites that want to emphasize contact information and make it easy for visitors to get in touch.\",\n semanticTags: [\n \"footer\",\n \"contact\",\n \"card\",\n \"email\",\n \"phone\",\n \"address\",\n \"social\",\n \"professional\",\n \"agency\",\n ],\n category: \"footer\",\n component: FooterContactCard,\n props: \"FooterContactCardProps\",\n exampleUsage: `\n<FooterContactCard\n heading=\"Let's work together\"\n email=\"hello@example.com\"\n phone=\"+1 (555) 123-4567\"\n address=\"123 Main Street, San Francisco, CA\"\n/>\n `.trim(),\n },\n \"footer-background-card\": {\n id: \"footer-background-card\",\n name: \"Footer Background Card\",\n description:\n \"A footer with background image and floating contact card. Features a full-width background image with a floating card containing profile image, personal message, CTA button, navigation links, and contact information. Ideal for creative professionals, agencies, portfolios, and businesses that want a visually striking footer with a personal touch.\",\n semanticTags: [\n \"footer\",\n \"background\",\n \"image\",\n \"card\",\n \"creative\",\n \"portfolio\",\n \"agency\",\n \"personal\",\n \"visual\",\n ],\n category: \"footer\",\n component: FooterBackgroundCard,\n props: \"FooterBackgroundCardProps\",\n exampleUsage: `\n<FooterBackgroundCard\n backgroundImage=\"https://example.com/bg.jpg\"\n profileImage=\"https://example.com/profile.jpg\"\n tagline=\"Let's Connect\"\n personalMessage=\"I'm passionate about creating beautiful components.\"\n ctaText=\"Schedule a call\"\n/>\n `.trim(),\n },\n \"footer-animated-social\": {\n id: \"footer-animated-social\",\n name: \"Footer Animated Social\",\n description:\n \"An animated footer with Framer Motion effects and social links. Features smooth entrance animations, a prominent heading with CTA button, animated social links with hover effects, and a clean separator. Ideal for modern websites, portfolios, and creative projects that want to add visual polish and interactivity to their footer.\",\n semanticTags: [\n \"footer\",\n \"animated\",\n \"motion\",\n \"social\",\n \"modern\",\n \"interactive\",\n \"creative\",\n \"portfolio\",\n ],\n category: \"footer\",\n component: FooterAnimatedSocial,\n props: \"FooterAnimatedSocialProps\",\n exampleUsage: `\n<FooterAnimatedSocial\n heading=\"Connect with Me\"\n description=\"No commitments. Just a quick chat to see if we click.\"\n ctaText=\"Get in Touch\"\n socialLinks={[\n { name: \"Instagram\", href: \"#\" },\n { name: \"X (Twitter)\", href: \"#\" }\n ]}\n/>\n `.trim(),\n },\n \"footer-newsletter-minimal\": {\n id: \"footer-newsletter-minimal\",\n name: \"Footer Newsletter Minimal\",\n description:\n \"A dark-themed minimal footer with newsletter and animated logo. Features a clean layout with main heading, support email, navigation columns, newsletter signup form, and a large animated brand logo. Ideal for modern SaaS products, creative agencies, and businesses that want a sophisticated, dark-themed footer with strong visual branding.\",\n semanticTags: [\n \"footer\",\n \"newsletter\",\n \"minimal\",\n \"dark\",\n \"animated\",\n \"logo\",\n \"saas\",\n \"sophisticated\",\n ],\n category: \"footer\",\n component: FooterNewsletterMinimal,\n props: \"FooterNewsletterMinimalProps\",\n exampleUsage: `\n<FooterNewsletterMinimal\n heading=\"Unlock 800+ blocks now\"\n supportEmail=\"hi@example.com\"\n newsletterLabel=\"Sign up for newsletter :\"\n/>\n `.trim(),\n },\n \"footer-cta-social\": {\n id: \"footer-cta-social\",\n name: \"Footer CTA Social\",\n description:\n \"A centered CTA footer with decorative lines and social icons. Features a centered layout with decorative gradient lines, pre-heading text, large heading, description, prominent CTA button, social media icons, and contact email. Ideal for landing pages, marketing sites, and businesses that want a conversion-focused footer with strong visual appeal.\",\n semanticTags: [\n \"footer\",\n \"cta\",\n \"social\",\n \"centered\",\n \"conversion\",\n \"landing\",\n \"marketing\",\n \"decorative\",\n ],\n category: \"footer\",\n component: FooterCtaSocial,\n props: \"FooterCtaSocialProps\",\n exampleUsage: `\n<FooterCtaSocial\n preHeading=\"Let's connect\"\n heading=\"You want to scale faster? Try Opensite today.\"\n description=\"Join thousands of companies already using our platform.\"\n buttonText=\"Get Started Now\"\n/>\n `.trim(),\n },\n \"footer-nav-social\": {\n id: \"footer-nav-social\",\n name: \"Footer Nav Social\",\n description:\n \"A comprehensive footer with logo, navigation, newsletter, and social links. Features a logo with navigation sections, a newsletter signup form with heading and description, social media icons, and legal links. Ideal for SaaS products, corporate websites, and businesses that want a complete footer with all essential elements organized in a clean, professional layout.\",\n semanticTags: [\n \"footer\",\n \"navigation\",\n \"social\",\n \"newsletter\",\n \"comprehensive\",\n \"professional\",\n \"corporate\",\n \"complete\",\n ],\n category: \"footer\",\n component: FooterNavSocial,\n props: \"FooterNavSocialProps\",\n exampleUsage: `\n<FooterNavSocial\n newsletterHeading=\"Stay Updated\"\n newsletterDescription=\"Subscribe to our newsletter for the latest updates.\"\n socialLinks={[\n { icon: \"simple-icons/instagram\", href: \"#\", label: \"Instagram\" }\n ]}\n/>\n `.trim(),\n },\n};\n\n/**\n * Get blocks by semantic tag\n */\nexport function getBlocksBySemanticTag(tag: string): BlockRegistryEntry[] {\n return Object.values(BLOCK_REGISTRY).filter((block) =>\n block.semanticTags.includes(tag)\n );\n}\n\n/**\n * Get blocks by category\n */\nexport function getBlocksByCategory(\n category: BlockCategory\n): BlockRegistryEntry[] {\n return Object.values(BLOCK_REGISTRY).filter(\n (block) => block.category === category\n );\n}\n\n/**\n * Get block by ID\n */\nexport function getBlockById(id: string): BlockRegistryEntry | undefined {\n return BLOCK_REGISTRY[id];\n}\n\n/**\n * Get all available blocks\n */\nexport function getAllBlocks(): BlockRegistryEntry[] {\n return Object.values(BLOCK_REGISTRY);\n}\n\n/**\n * Get all categories\n */\nexport function getAllCategories(): BlockCategory[] {\n return Array.from(\n new Set(Object.values(BLOCK_REGISTRY).map((block) => block.category))\n );\n}\n\n/**\n * Search blocks by query (searches name, description, and semantic tags)\n */\nexport function searchBlocks(query: string): BlockRegistryEntry[] {\n const lowercaseQuery = query.toLowerCase();\n return Object.values(BLOCK_REGISTRY).filter(\n (block) =>\n block.name.toLowerCase().includes(lowercaseQuery) ||\n block.description.toLowerCase().includes(lowercaseQuery) ||\n block.semanticTags.some((tag) =>\n tag.toLowerCase().includes(lowercaseQuery)\n )\n );\n}\n"]}
|