@opensite/ui 0.1.6 → 0.1.8

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.
Files changed (49) hide show
  1. package/dist/alternating-blocks.cjs +2 -1
  2. package/dist/alternating-blocks.cjs.map +1 -1
  3. package/dist/alternating-blocks.js +2 -1
  4. package/dist/alternating-blocks.js.map +1 -1
  5. package/dist/badge.d.cts +1 -1
  6. package/dist/badge.d.ts +1 -1
  7. package/dist/{button-variants-BTHtgG6W.d.cts → button-variants-U3-Or9vV.d.cts} +1 -1
  8. package/dist/{button-variants-BTHtgG6W.d.ts → button-variants-U3-Or9vV.d.ts} +1 -1
  9. package/dist/button.d.cts +1 -1
  10. package/dist/button.d.ts +1 -1
  11. package/dist/components.cjs +2 -1
  12. package/dist/components.cjs.map +1 -1
  13. package/dist/components.d.cts +1 -1
  14. package/dist/components.d.ts +1 -1
  15. package/dist/components.js +2 -1
  16. package/dist/components.js.map +1 -1
  17. package/dist/container.cjs +1 -1
  18. package/dist/container.cjs.map +1 -1
  19. package/dist/container.js +1 -1
  20. package/dist/container.js.map +1 -1
  21. package/dist/index.cjs +2 -1
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +1 -1
  24. package/dist/index.d.ts +1 -1
  25. package/dist/index.js +2 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/page-hero-banner.cjs +2 -2
  28. package/dist/page-hero-banner.cjs.map +1 -1
  29. package/dist/page-hero-banner.js +2 -2
  30. package/dist/page-hero-banner.js.map +1 -1
  31. package/dist/pressable.d.cts +1 -1
  32. package/dist/pressable.d.ts +1 -1
  33. package/dist/registry.cjs +4715 -754
  34. package/dist/registry.cjs.map +1 -1
  35. package/dist/registry.d.cts +1 -1
  36. package/dist/registry.d.ts +1 -1
  37. package/dist/registry.js +4448 -487
  38. package/dist/registry.js.map +1 -1
  39. package/dist/section.cjs +2 -1
  40. package/dist/section.cjs.map +1 -1
  41. package/dist/section.js +2 -1
  42. package/dist/section.js.map +1 -1
  43. package/dist/team-media-showcase.cjs +2 -1
  44. package/dist/team-media-showcase.cjs.map +1 -1
  45. package/dist/team-media-showcase.js +2 -1
  46. package/dist/team-media-showcase.js.map +1 -1
  47. package/dist/types.d.cts +1 -1
  48. package/dist/types.d.ts +1 -1
  49. package/package.json +2470 -1429
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../lib/utils.ts","../components/ui/container.tsx","../components/ui/section.tsx","../components/ui/animated-dialog.tsx","../components/ui/page-hero-banner.tsx","../lib/button-variants.ts","../components/ui/button.tsx","../components/ui/card.tsx","../components/ui/badge.tsx","../components/ui/popover.tsx","../components/ui/dynamic-icon.tsx","../lib/useNavigation.ts","../lib/Pressable.tsx","../components/blocks/about/alternating-blocks.tsx","../components/blocks/cta/media-hover-ctas.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","../lib/forms.ts","../components/blocks/footers/footer-newsletter-minimal.tsx","../components/blocks/footers/footer-cta-social.tsx","../components/blocks/footers/footer-nav-social.tsx"],"names":["React","jsx","jsxs","cva","Slot","iconName","React5","React6","Img","defaultSections","defaultSocialLinks","defaultBottomLinks","defaultLegalLinks","defaultMenuItems","motion","response","data","defaultNavLinks","React7"],"mappings":"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","file":"index.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-7xl\",\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:\n \"bg-linear-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","\"use client\";\n\nimport React, { useEffect, useId, useRef } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport { useOnClickOutside } from \"@opensite/hooks\";\nimport type { AnimatedDialogProps } from \"../../src/types\";\n\n/**\n * Size variants for the dialog\n */\nconst sizeStyles = {\n sm: \"max-w-md\",\n md: \"max-w-2xl\",\n lg: \"max-w-4xl\",\n xl: \"max-w-5xl\",\n full: \"max-w-7xl\",\n};\n\n/**\n * Animation transition configuration\n */\nconst dialogTransition = {\n duration: 0.35,\n ease: [0.16, 1, 0.3, 1] as const,\n};\n\n/**\n * Animated dialog component with framer-motion animations\n *\n * @example\n * ```tsx\n * const [open, setOpen] = useState(false);\n *\n * <AnimatedDialog\n * open={open}\n * onOpenChange={setOpen}\n * title=\"Dialog Title\"\n * description=\"Dialog description\"\n * >\n * <div>Dialog content</div>\n * </AnimatedDialog>\n * ```\n */\nexport function AnimatedDialog({\n open,\n onOpenChange,\n title,\n eyebrow,\n description,\n children,\n header,\n footer,\n size = \"lg\",\n className,\n contentClassName,\n}: AnimatedDialogProps) {\n const titleId = useId();\n const descriptionId = useId();\n const containerRef = useRef<HTMLDivElement>(null!);\n\n useOnClickOutside(containerRef, () => {\n if (open) {\n onOpenChange(false);\n }\n });\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onOpenChange(false);\n }\n };\n\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n window.addEventListener(\"keydown\", onKeyDown);\n\n return () => {\n document.body.style.overflow = previousOverflow;\n window.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [open, onOpenChange]);\n\n return (\n <AnimatePresence>\n {open ? (\n <div className=\"fixed inset-0 z-50 h-screen overflow-y-auto\">\n {/* Backdrop */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1, transition: dialogTransition }}\n exit={{ opacity: 0, transition: dialogTransition }}\n className=\"fixed inset-0 h-full w-full bg-foreground/80 backdrop-blur-lg\"\n />\n\n {/* Dialog container */}\n <motion.div\n initial={{ opacity: 0, y: 24, scale: 0.98 }}\n animate={{\n opacity: 1,\n y: 0,\n scale: 1,\n transition: dialogTransition,\n }}\n exit={{\n opacity: 0,\n y: 12,\n scale: 0.98,\n transition: dialogTransition,\n }}\n ref={containerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={description ? descriptionId : undefined}\n className={cn(\n \"relative z-60 mx-auto my-12 flex w-[92vw] max-h-[85vh] flex-col overflow-hidden rounded-3xl bg-background p-6 shadow-2xl ring-1 ring-border/10 md:my-20 md:p-12\",\n sizeStyles[size],\n className,\n )}\n >\n {/* Header */}\n <div className=\"flex items-start justify-between gap-8\">\n {header ? (\n header\n ) : (\n <div className=\"space-y-3\">\n {eyebrow ? (\n <p className=\"text-xs font-semibold uppercase tracking-[0.3em] text-primary\">\n {eyebrow}\n </p>\n ) : null}\n {title ? (\n <h2\n id={titleId}\n className=\"text-2xl font-semibold text-foreground md:text-4xl\"\n >\n {title}\n </h2>\n ) : null}\n {description ? (\n <p\n id={descriptionId}\n className=\"text-sm text-muted-foreground md:text-base\"\n >\n {description}\n </p>\n ) : null}\n </div>\n )}\n\n {/* Close button */}\n <button\n type=\"button\"\n aria-label=\"Close dialog\"\n className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-foreground text-background transition hover:bg-foreground/80 md:h-11 md:w-11\"\n onClick={() => onOpenChange(false)}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M18 6L6 18M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n\n {/* Content */}\n {children ? (\n <div\n className={cn(\n \"mt-8 flex-1 min-h-0 overflow-y-auto pr-2 md:mt-10\",\n contentClassName,\n )}\n >\n {children}\n </div>\n ) : null}\n\n {/* Footer */}\n {footer ? <div className=\"mt-8 md:mt-10\">{footer}</div> : null}\n </motion.div>\n </div>\n ) : null}\n </AnimatePresence>\n );\n}\n","\"use client\";\n\nimport { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Container } from \"./container\";\nimport type { PageHeroBannerProps } from \"../../src/types\";\n\n/**\n * Page Hero Banner component for full-width hero sections with image or video backgrounds\n *\n * @example\n * ```tsx\n * <PageHeroBanner\n * imageUrl=\"https://example.com/hero.jpg\"\n * alt=\"Hero banner\"\n * minHeight=\"600px\"\n * >\n * <h1>Welcome to our site</h1>\n * <p>Discover amazing content</p>\n * </PageHeroBanner>\n * ```\n */\nexport function PageHeroBanner({\n imageUrl,\n videoUrl,\n alt = \"Hero banner\",\n children,\n className = \"\",\n loading = \"eager\",\n minHeight = \"500px\",\n showOverlay = true,\n overlayOpacity = 0.6,\n contentMaxWidth = \"4xl\",\n overlayClassName,\n contentClassName,\n style,\n ...props\n}: PageHeroBannerProps) {\n if (!imageUrl && !videoUrl) {\n throw new Error(\"PageHeroBanner requires either imageUrl or videoUrl\");\n }\n\n if (imageUrl && videoUrl) {\n throw new Error(\n \"PageHeroBanner cannot have both imageUrl and videoUrl. Please provide only one.\"\n );\n }\n\n return (\n <div\n className={cn(\"relative w-full overflow-hidden\", className)}\n style={{\n minHeight,\n ...style,\n }}\n {...props}\n >\n {/* Image background */}\n {imageUrl && (\n <img\n src={imageUrl}\n alt={alt}\n loading={loading}\n className=\"absolute inset-0 w-full h-full object-cover\"\n />\n )}\n\n {/* Video background */}\n {videoUrl && (\n <video\n src={videoUrl}\n className=\"absolute inset-0 w-full h-full object-cover\"\n autoPlay\n loop\n muted\n playsInline\n preload=\"auto\"\n />\n )}\n\n {/* Gradient overlay */}\n {showOverlay && (\n <div\n className={cn(\n \"absolute inset-0 bg-linear-to-b from-black via-black to-black\",\n overlayClassName\n )}\n style={{ opacity: overlayOpacity }}\n />\n )}\n\n {/* Content */}\n <Container\n maxWidth={contentMaxWidth}\n className={cn(\"relative h-full flex items-center\", contentClassName)}\n style={{ minHeight }}\n >\n <div className=\"relative text-background drop-shadow-lg py-16 md:py-24\">\n {children}\n </div>\n </Container>\n </div>\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","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\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","\"use client\";\n\nimport * as React from \"react\";\n\nexport type LinkType = \"internal\" | \"external\" | \"mailto\" | \"tel\" | \"unknown\" | \"none\";\n\nexport interface UseNavigationArgs {\n href?: string;\n onClick?: React.MouseEventHandler<HTMLElement>;\n}\n\nexport interface UseNavigationReturn {\n linkType: LinkType;\n normalizedHref: string | undefined;\n target: \"_blank\" | \"_self\" | undefined;\n rel: string | undefined;\n isExternal: boolean;\n isInternal: boolean;\n shouldUseRouter: boolean;\n handleClick: React.MouseEventHandler<HTMLElement>;\n}\n\n/**\n * Normalizes phone numbers to tel: format\n * Handles formats like:\n * - \"+14322386131\"\n * - \"(432) 238-6131\"\n * - \"512-232-2212x123\"\n * - \"tel:+14322386131\"\n */\nfunction normalizePhoneNumber(input: string): string {\n const trimmed = input.trim();\n\n // Already has tel: prefix\n if (trimmed.toLowerCase().startsWith(\"tel:\")) {\n return trimmed;\n }\n\n // Extract digits and extension\n const match = trimmed.match(/^[\\s\\+\\-\\(\\)]*(\\d[\\d\\s\\-\\(\\)\\.]*\\d)[\\s\\-]*(x|ext\\.?|extension)?[\\s\\-]*(\\d+)?$/i);\n\n if (match) {\n // Clean the main number (remove spaces, dashes, dots, parentheses)\n const mainNumber = match[1].replace(/[\\s\\-\\(\\)\\.]/g, \"\");\n const extension = match[3];\n\n // Add + prefix if not already there and number looks international (10+ digits)\n const normalized = mainNumber.length >= 10 && !trimmed.startsWith(\"+\")\n ? `+${mainNumber}`\n : mainNumber;\n\n // Add extension if present\n const withExtension = extension ? `${normalized};ext=${extension}` : normalized;\n\n return `tel:${withExtension}`;\n }\n\n // Fallback: just clean and prefix\n const cleaned = trimmed.replace(/[\\s\\-\\(\\)\\.]/g, \"\");\n return `tel:${cleaned}`;\n}\n\n/**\n * Normalizes email addresses to mailto: format\n */\nfunction normalizeEmail(input: string): string {\n const trimmed = input.trim();\n\n // Already has mailto: prefix\n if (trimmed.toLowerCase().startsWith(\"mailto:\")) {\n return trimmed;\n }\n\n return `mailto:${trimmed}`;\n}\n\n/**\n * Detects if a string is an email address\n */\nfunction isEmail(input: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(input.trim());\n}\n\n/**\n * Detects if a string is a phone number\n */\nfunction isPhoneNumber(input: string): boolean {\n const trimmed = input.trim();\n\n // Already has tel: prefix\n if (trimmed.toLowerCase().startsWith(\"tel:\")) {\n return true;\n }\n\n // Match various phone formats\n const phoneRegex = /^[\\s\\+\\-\\(\\)]*\\d[\\d\\s\\-\\(\\)\\.]*\\d[\\s\\-]*(x|ext\\.?|extension)?[\\s\\-]*\\d*$/i;\n return phoneRegex.test(trimmed);\n}\n\n/**\n * Detects if a URL is internal to the current site\n * Handles cases like:\n * - \"/blog-123\"\n * - \"https://jordansite.com/blog-123\"\n * - \"https://www.jordansite.com/blog-123\"\n */\nfunction isInternalUrl(href: string): boolean {\n if (typeof window === \"undefined\") {\n // SSR fallback: assume relative paths are internal\n return href.startsWith(\"/\") && !href.startsWith(\"//\");\n }\n\n const trimmed = href.trim();\n\n // Relative paths are internal\n if (trimmed.startsWith(\"/\") && !trimmed.startsWith(\"//\")) {\n return true;\n }\n\n // Check if full URL matches current origin\n try {\n const url = new URL(trimmed, window.location.href);\n const currentOrigin = window.location.origin;\n\n // Normalize both origins (remove www. for comparison)\n const normalizeOrigin = (origin: string) =>\n origin.replace(/^(https?:\\/\\/)(www\\.)?/, \"$1\");\n\n return normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin);\n } catch {\n return false;\n }\n}\n\n/**\n * Converts a full URL to a relative path if it's internal\n */\nfunction toRelativePath(href: string): string {\n if (typeof window === \"undefined\") {\n return href;\n }\n\n const trimmed = href.trim();\n\n // Already relative\n if (trimmed.startsWith(\"/\") && !trimmed.startsWith(\"//\")) {\n return trimmed;\n }\n\n try {\n const url = new URL(trimmed, window.location.href);\n const currentOrigin = window.location.origin;\n\n // Normalize both origins for comparison\n const normalizeOrigin = (origin: string) =>\n origin.replace(/^(https?:\\/\\/)(www\\.)?/, \"$1\");\n\n if (normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin)) {\n // Return pathname + search + hash\n return url.pathname + url.search + url.hash;\n }\n } catch {\n // Invalid URL, return as-is\n }\n\n return trimmed;\n}\n\n/**\n * Hook for handling navigation with automatic link type detection,\n * URL normalization, and proper attributes for SEO and accessibility.\n *\n * Features:\n * - Detects link types: internal, external, mailto, tel\n * - Normalizes phone numbers (various formats to tel:)\n * - Normalizes email addresses to mailto:\n * - Converts full URLs matching current origin to relative paths\n * - Determines proper target and rel attributes\n * - Handles React Router-style internal navigation\n *\n * @example\n * ```tsx\n * const nav = useNavigation({ href: \"/about\" });\n * // nav.linkType === \"internal\"\n * // nav.normalizedHref === \"/about\"\n * // nav.target === \"_self\"\n *\n * const nav2 = useNavigation({ href: \"(432) 238-6131\" });\n * // nav2.linkType === \"tel\"\n * // nav2.normalizedHref === \"tel:+14322386131\"\n *\n * const nav3 = useNavigation({ href: \"https://google.com\" });\n * // nav3.linkType === \"external\"\n * // nav3.target === \"_blank\"\n * // nav3.rel === \"noopener noreferrer\"\n * ```\n */\nexport function useNavigation({\n href,\n onClick\n}: UseNavigationArgs = {}): UseNavigationReturn {\n const linkType = React.useMemo((): LinkType => {\n if (!href || href.trim() === \"\") {\n return onClick ? \"none\" : \"none\";\n }\n\n const trimmed = href.trim();\n\n // Check for mailto\n if (trimmed.toLowerCase().startsWith(\"mailto:\") || isEmail(trimmed)) {\n return \"mailto\";\n }\n\n // Check for tel\n if (trimmed.toLowerCase().startsWith(\"tel:\") || isPhoneNumber(trimmed)) {\n return \"tel\";\n }\n\n // Check for internal vs external\n if (isInternalUrl(trimmed)) {\n return \"internal\";\n }\n\n // Check if it's a valid URL\n try {\n new URL(trimmed, typeof window !== \"undefined\" ? window.location.href : \"http://localhost\");\n return \"external\";\n } catch {\n // Not a valid URL, treat as internal path\n return \"internal\";\n }\n }, [href, onClick]);\n\n const normalizedHref = React.useMemo((): string | undefined => {\n if (!href || href.trim() === \"\") {\n return undefined;\n }\n\n const trimmed = href.trim();\n\n switch (linkType) {\n case \"tel\":\n return normalizePhoneNumber(trimmed);\n case \"mailto\":\n return normalizeEmail(trimmed);\n case \"internal\":\n return toRelativePath(trimmed);\n case \"external\":\n return trimmed;\n default:\n return trimmed;\n }\n }, [href, linkType]);\n\n const target = React.useMemo((): \"_blank\" | \"_self\" | undefined => {\n switch (linkType) {\n case \"external\":\n return \"_blank\";\n case \"internal\":\n return \"_self\";\n case \"mailto\":\n case \"tel\":\n // Let browser handle default behavior\n return undefined;\n default:\n return undefined;\n }\n }, [linkType]);\n\n const rel = React.useMemo((): string | undefined => {\n if (linkType === \"external\") {\n return \"noopener noreferrer\";\n }\n return undefined;\n }, [linkType]);\n\n const isExternal = linkType === \"external\";\n const isInternal = linkType === \"internal\";\n const shouldUseRouter = isInternal && typeof normalizedHref === \"string\" && normalizedHref.startsWith(\"/\");\n\n const handleClick = React.useCallback<React.MouseEventHandler<HTMLElement>>(\n (event) => {\n // Call user's onClick first\n if (onClick) {\n try {\n onClick(event);\n } catch (error) {\n console.error(\"Error in user onClick handler:\", error);\n }\n }\n\n // If event was prevented, don't do anything else\n if (event.defaultPrevented) {\n return;\n }\n\n // Only handle internal navigation for left-clicks without modifiers\n if (\n shouldUseRouter &&\n normalizedHref &&\n event.button === 0 && // left-click only\n !event.metaKey &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.shiftKey\n ) {\n // Check if there's a navigation handler (from opensite-blocks or similar)\n if (typeof window !== \"undefined\") {\n const handler = (window as any).__opensiteNavigationHandler;\n if (typeof handler === \"function\") {\n try {\n const handled = handler(normalizedHref, event.nativeEvent || event);\n if (handled !== false) {\n event.preventDefault();\n }\n } catch (error) {\n console.error(\"Error in navigation handler:\", error);\n }\n }\n }\n }\n },\n [onClick, shouldUseRouter, normalizedHref]\n );\n\n return {\n linkType,\n normalizedHref,\n target,\n rel,\n isExternal,\n isInternal,\n shouldUseRouter,\n handleClick,\n };\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"./utils\";\nimport { useNavigation } from \"./useNavigation\";\nimport { buttonVariants } from \"./button-variants\";\n\ntype FallbackComponentType = \"span\" | \"div\" | \"button\";\n\ninterface PressableBaseProps {\n /**\n * Content inside the Pressable component\n */\n children: React.ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n\n /**\n * URL to navigate to (can be internal path, external URL, mailto:, tel:, or email/phone string)\n * Examples:\n * - \"/about\" - internal link\n * - \"https://google.com\" - external link\n * - \"mailto:hello@example.com\" or \"hello@example.com\" - email link\n * - \"tel:+14322386131\" or \"(432) 238-6131\" - phone link\n * - \"https://mysite.com/blog\" - will be converted to \"/blog\" if on mysite.com\n */\n href?: string;\n\n /**\n * Click handler\n */\n onClick?: React.MouseEventHandler<HTMLElement>;\n\n /**\n * The component type to render when there's no href or onClick\n * @default \"span\"\n */\n fallbackComponentType?: FallbackComponentType;\n\n /**\n * Explicit component type to render (overrides automatic selection)\n * Note: Internal links will ALWAYS render as <a> tags for SEO, even if componentType=\"button\"\n */\n componentType?: \"a\" | \"button\" | FallbackComponentType;\n\n /**\n * Whether to render as a button styled link (uses ShadCN button styles)\n * When true, will apply button variant classes even when rendering an <a> tag\n * @default false\n */\n asButton?: boolean;\n\n /**\n * ARIA label for accessibility\n */\n \"aria-label\"?: string;\n\n /**\n * ARIA describedby for accessibility\n */\n \"aria-describedby\"?: string;\n\n /**\n * ID attribute\n */\n id?: string;\n\n /**\n * Data attributes\n */\n [key: `data-${string}`]: any;\n}\n\n// Combine Pressable props with button variants\nexport interface PressableProps\n extends PressableBaseProps,\n VariantProps<typeof buttonVariants> {}\n\n// Type for link-specific props\ninterface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {}\n\n// Type for button-specific props\ninterface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\n/**\n * Universal link/button component with automatic URL detection and normalization.\n *\n * Features:\n * - Automatic link type detection (internal, external, mailto, tel)\n * - Phone number normalization (various formats to tel:)\n * - Email normalization to mailto:\n * - Internal URL normalization (full URLs to relative paths)\n * - Proper SEO attributes (always uses <a> for links, even when styled as buttons)\n * - ShadCN button variants and sizes\n * - Flexible layout support (icon+label or custom children)\n * - React Router-style internal navigation\n *\n * @example\n * Simple link\n * ```tsx\n * <Pressable href=\"/about\">About Us</Pressable>\n * ```\n *\n * @example\n * Button-styled link with icon\n * ```tsx\n * <Pressable href=\"/quotes\" variant=\"default\" size=\"lg\" asButton>\n * <DynamicIcon name=\"lucide/calculator\" size={20} />\n * Get a Free Quote\n * </Pressable>\n * ```\n *\n * @example\n * External link (automatically gets target=\"_blank\" and rel=\"noopener noreferrer\")\n * ```tsx\n * <Pressable href=\"https://google.com\">Visit Google</Pressable>\n * ```\n *\n * @example\n * Phone link (automatically normalized to tel: format)\n * ```tsx\n * <Pressable href=\"(432) 238-6131\">Call Us</Pressable>\n * // Renders: <a href=\"tel:+14322386131\">\n * ```\n *\n * @example\n * Custom layout with full children control\n * ```tsx\n * <Pressable href=\"/services\" className=\"custom-card\">\n * <div className=\"card-header\">\n * <DynamicIcon name=\"service-icon\" />\n * <h3>Our Services</h3>\n * </div>\n * <p>Learn more about what we offer</p>\n * </Pressable>\n * ```\n *\n * @example\n * Button with onClick (no href)\n * ```tsx\n * <Pressable onClick={() => alert(\"Clicked\")} variant=\"default\" size=\"md\" asButton>\n * Click Me\n * </Pressable>\n * ```\n */\nexport const Pressable = React.forwardRef<\n HTMLAnchorElement | HTMLButtonElement | HTMLSpanElement,\n PressableProps & Partial<LinkProps> & Partial<ButtonProps>\n>(\n (\n {\n children,\n className,\n href,\n onClick,\n variant,\n size,\n asButton = false,\n fallbackComponentType = \"span\",\n componentType,\n \"aria-label\": ariaLabel,\n \"aria-describedby\": ariaDescribedby,\n id,\n ...props\n },\n ref\n ) => {\n const navigation = useNavigation({ href, onClick });\n const {\n normalizedHref,\n target,\n rel,\n linkType,\n isInternal,\n isExternal,\n handleClick,\n } = navigation;\n\n // Determine what component to render\n const shouldRenderLink = normalizedHref && linkType !== \"none\";\n const shouldRenderButton = !shouldRenderLink && onClick;\n const shouldRenderFallback = !shouldRenderLink && !shouldRenderButton;\n\n // Force <a> tag for internal links for SEO (even if componentType=\"button\")\n const effectiveComponentType = componentType || (\n shouldRenderLink\n ? \"a\"\n : shouldRenderButton\n ? \"button\"\n : fallbackComponentType\n );\n\n // Override for SEO: internal links must be <a> tags\n const finalComponentType = isInternal && shouldRenderLink\n ? \"a\"\n : effectiveComponentType;\n\n // Determine if we should apply button styles\n const shouldApplyButtonStyles = asButton || variant || size;\n\n // Build className\n const combinedClassName = cn(\n shouldApplyButtonStyles && buttonVariants({ variant, size }),\n className\n );\n\n const dataProps = Object.fromEntries(\n Object.entries(props).filter(([key]) => key.startsWith(\"data-\"))\n );\n const buttonDataAttributes = shouldApplyButtonStyles\n ? {\n \"data-slot\": \"button\",\n \"data-variant\": variant ?? \"default\",\n \"data-size\": size ?? \"default\",\n }\n : {};\n\n // Build common props\n const commonProps = {\n className: combinedClassName,\n onClick: handleClick,\n \"aria-label\": ariaLabel,\n \"aria-describedby\": ariaDescribedby,\n id,\n ...dataProps,\n ...buttonDataAttributes,\n };\n\n // Render link\n if (finalComponentType === \"a\" && shouldRenderLink) {\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={normalizedHref}\n target={target}\n rel={rel}\n {...commonProps}\n {...(props as LinkProps)}\n >\n {children}\n </a>\n );\n }\n\n // Render button\n if (finalComponentType === \"button\") {\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type={(props as ButtonProps).type || \"button\"}\n {...commonProps}\n {...(props as ButtonProps)}\n >\n {children}\n </button>\n );\n }\n\n // Render fallback (span or div)\n if (finalComponentType === \"div\") {\n return (\n <div\n ref={ref as React.Ref<HTMLDivElement>}\n {...commonProps}\n >\n {children}\n </div>\n );\n }\n\n // Default to span\n return (\n <span\n ref={ref as React.Ref<HTMLSpanElement>}\n {...commonProps}\n >\n {children}\n </span>\n );\n }\n);\n\nPressable.displayName = \"Pressable\";\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","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Img } from \"@page-speed/img\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable 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 </Pressable>\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 <Pressable href={link.url}>{link.text}</Pressable>\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 <Pressable\n href=\"https://opensite.ai\"\n className=\"hover:text-primary\"\n >\n AI Website and Automation Platform by Opensite\n </Pressable>\n </div>\n <ul className=\"flex gap-4\">\n {bottomLinks.map((link, linkIdx) => (\n <li key={linkIdx} className=\"underline hover:text-primary\">\n <Pressable href={link.url}>{link.text}</Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable 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 </Pressable>\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 <Pressable href={link.href}>{link.name}</Pressable>\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 <Pressable 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 </Pressable>\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 <Pressable\n onClick={(e) => {\n e.preventDefault();\n // Newsletter submission logic would go here\n }}\n variant=\"default\"\n size=\"default\"\n asButton\n >\n {newsletterButtonText}\n </Pressable>\n </div>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n By submitting, you agree to our\n <Pressable href={privacyLinkUrl} className=\"ml-1 text-primary hover:underline\">\n {privacyLinkText}\n </Pressable>\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 <Pressable\n href=\"https://opensite.ai\"\n className=\"hover:text-primary\"\n >\n AI Website and Automation Platform by Opensite\n </Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable 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 </Pressable>\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 <Pressable href={link.href}>{link.name}</Pressable>\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 <Pressable 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 </Pressable>\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 <Pressable 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 </Pressable>\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 <Pressable\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 </Pressable>\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 { Pressable } from \"../../../lib/Pressable\";\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 <Pressable\n href={link.href}\n className=\"text-base whitespace-nowrap hover:text-accent-foreground\"\n >\n {link.title}\n </Pressable>\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 <Pressable\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 </Pressable>\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 <Pressable\n key={idx}\n href={link.href}\n className=\"hover:text-accent-foreground\"\n >\n {link.text}\n </Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable href={logo.url}>\n <Img\n src={logo.src}\n alt={logo.alt}\n className=\"h-8\"\n optixFlowConfig={optixFlowConfig}\n />\n </Pressable>\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 <Pressable href={social.href} aria-label={social.label}>\n <DynamicIcon name={social.icon} size={20} />\n </Pressable>\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 <Pressable href={link.href}>{link.name}</Pressable>\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 <Pressable href={link.href}>{link.name}</Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable href={logo.url}>\n <Img\n src={logo.src}\n alt={logo.alt}\n className=\"h-8\"\n optixFlowConfig={optixFlowConfig}\n />\n </Pressable>\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 <Pressable href={social.href} aria-label={social.label}>\n <DynamicIcon name={social.icon} size={24} />\n </Pressable>\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 <Pressable href={link.href}>{link.name}</Pressable>\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 <Pressable\n href={privacyLinkUrl}\n className=\"ml-1 text-primary hover:underline\"\n >\n {privacyLinkText}\n </Pressable>\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 <Pressable\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 </Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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\n className={cn(\"dark bg-background py-16 text-foreground\", className)}\n >\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\">\n {ctaHeading}\n </h2>\n <p className=\"mx-auto mb-6 max-w-2xl text-muted-foreground\">\n {ctaDescription}\n </p>\n <Pressable\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 </Pressable>\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 <Pressable\n href={logo.url}\n className=\"mb-6 flex items-center gap-2\"\n >\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 </Pressable>\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 <Pressable\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 </Pressable>\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 <Pressable\n href={link.href}\n className=\"hover:text-foreground\"\n >\n {link.name}\n </Pressable>\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 <Pressable\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 </Pressable>\n </div>\n <ul className=\"flex gap-4\">\n {legalLinks.map((link, idx) => (\n <li key={idx}>\n <Pressable href={link.href} className=\"hover:text-foreground\">\n {link.name}\n </Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable\n href={logo.url}\n className=\"mb-8 flex items-center gap-2\"\n >\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 </Pressable>\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 <Pressable\n href={`mailto:${email}`}\n className=\"hover:text-primary\"\n >\n {email}\n </Pressable>\n </p>\n <p>\n <Pressable\n href={`tel:${phone}`}\n className=\"hover:text-primary\"\n >\n {phone}\n </Pressable>\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 <Pressable\n href={link.href}\n className=\"text-muted-foreground hover:text-primary\"\n >\n {link.name}\n </Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable\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 </Pressable>\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 <Pressable\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 </Pressable>\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 <Pressable\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 </Pressable>\n </div>\n <div className=\"flex gap-4\">\n {bottomLinks.map((link, idx) => (\n <Pressable\n key={idx}\n href={link.url}\n className=\"text-sm text-muted-foreground transition-colors hover:text-primary\"\n >\n {link.text}\n </Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable\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 </Pressable>\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 <Pressable\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 </Pressable>\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 >\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","import {\n deserializeErrors,\n serializeForRails,\n type FormErrors,\n type RailsApiConfig,\n type RailsErrorResponse,\n} from \"@page-speed/forms/integration\";\n\nexport type PageSpeedFormMethod = \"post\" | \"get\" | \"put\" | \"patch\";\nexport type PageSpeedFormSubmissionFormat = \"json\" | \"rails\";\n\nexport interface PageSpeedFormConfig {\n /**\n * API endpoint used for submission (also applied to form action).\n */\n endpoint?: string;\n /**\n * HTTP method for submission.\n * @default \"post\"\n */\n method?: PageSpeedFormMethod;\n /**\n * Submission format.\n * Defaults to \"rails\" when apiKey is present, otherwise \"json\".\n */\n format?: PageSpeedFormSubmissionFormat;\n /**\n * Additional headers for the submission request.\n */\n headers?: Record<string, string>;\n /**\n * Static values merged into the payload (e.g. subject, content).\n */\n values?: Record<string, unknown>;\n /**\n * Rails API key (required for rails format).\n */\n apiKey?: string;\n /**\n * Rails contact category token.\n */\n contactCategoryToken?: string;\n /**\n * Rails location ID.\n */\n locationId?: string;\n /**\n * Rails website ID.\n */\n websiteId?: string;\n /**\n * Rails website form assignment ID.\n */\n websiteFormAssignmentId?: string;\n /**\n * Rails visitor IP address override.\n */\n visitorIpAddress?: string;\n /**\n * Reset form values after a successful submission.\n * @default true\n */\n resetOnSuccess?: boolean;\n}\n\nexport class PageSpeedFormSubmissionError extends Error {\n formErrors?: FormErrors;\n status?: number;\n\n constructor(\n message: string,\n options: { formErrors?: FormErrors; status?: number } = {}\n ) {\n super(message);\n this.name = \"PageSpeedFormSubmissionError\";\n this.formErrors = options.formErrors;\n this.status = options.status;\n }\n}\n\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nexport function isValidEmail(value: string): boolean {\n return EMAIL_REGEX.test(value);\n}\n\nfunction buildUrlWithParams(\n endpoint: string,\n values: Record<string, unknown>\n): string {\n const base =\n typeof window === \"undefined\" ? \"http://localhost\" : window.location.origin;\n const url = new URL(endpoint, base);\n\n Object.entries(values).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((item) => {\n if (item !== undefined && item !== null) {\n url.searchParams.append(key, String(item));\n }\n });\n return;\n }\n url.searchParams.set(key, String(value));\n });\n\n return url.toString();\n}\n\nfunction normalizeMethod(method?: PageSpeedFormMethod): string {\n return (method || \"post\").toUpperCase();\n}\n\nfunction resolveFormat(\n config?: PageSpeedFormConfig\n): PageSpeedFormSubmissionFormat {\n if (config?.format) {\n return config.format;\n }\n return config?.apiKey ? \"rails\" : \"json\";\n}\n\nfunction mergeValues(\n values: Record<string, unknown>,\n config?: PageSpeedFormConfig\n): Record<string, unknown> {\n return {\n ...(config?.values ?? {}),\n ...values,\n };\n}\n\nexport async function submitPageSpeedForm(\n values: Record<string, unknown>,\n config?: PageSpeedFormConfig\n): Promise<unknown> {\n if (!config?.endpoint) {\n return null;\n }\n\n const payload = mergeValues(values, config);\n const method = normalizeMethod(config.method);\n const format = resolveFormat(config);\n const headers: Record<string, string> = { ...(config.headers ?? {}) };\n\n if (format === \"rails\") {\n if (!config.apiKey) {\n throw new PageSpeedFormSubmissionError(\n \"Missing apiKey for Rails form submission.\"\n );\n }\n\n const railsConfig: RailsApiConfig = {\n apiKey: config.apiKey,\n contactCategoryToken: config.contactCategoryToken,\n locationId: config.locationId,\n websiteId: config.websiteId,\n websiteFormAssignmentId: config.websiteFormAssignmentId,\n visitorIpAddress: config.visitorIpAddress,\n };\n\n const serialized = serializeForRails(payload, railsConfig);\n\n if (serialized.contact.contact_form_upload_tokens) {\n serialized.contact.contact_form_upload_tokens = (\n serialized.contact.contact_form_upload_tokens as string[]\n ).map((token) => token.replace(/^upload_/, \"\"));\n }\n\n headers[\"Content-Type\"] ??= \"application/json\";\n\n const response = await fetch(config.endpoint, {\n method,\n headers,\n body: JSON.stringify(serialized),\n });\n\n const data = await response.json().catch(() => null);\n\n if (!response.ok || (data && data.errors)) {\n const errorResponse: RailsErrorResponse = {\n errors: data?.errors ?? { base: [\"Form submission failed\"] },\n status: data?.status ?? response.status,\n };\n const formErrors = deserializeErrors(errorResponse);\n throw new PageSpeedFormSubmissionError(\"Form submission failed.\", {\n formErrors,\n status: errorResponse.status,\n });\n }\n\n return data;\n }\n\n if (method === \"GET\") {\n const url = buildUrlWithParams(config.endpoint, payload);\n const response = await fetch(url, { method, headers });\n const data = await response.json().catch(() => null);\n\n if (!response.ok) {\n throw new PageSpeedFormSubmissionError(\n data?.message || \"Form submission failed.\",\n { status: response.status }\n );\n }\n\n return data;\n }\n\n headers[\"Content-Type\"] ??= \"application/json\";\n\n const response = await fetch(config.endpoint, {\n method,\n headers,\n body: JSON.stringify(payload),\n });\n\n const data = await response.json().catch(() => null);\n\n if (!response.ok) {\n throw new PageSpeedFormSubmissionError(\n data?.message || \"Form submission failed.\",\n { status: response.status }\n );\n }\n\n return data;\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Field, Form, useForm } from \"@page-speed/forms\";\nimport { TextInput } from \"@page-speed/forms/inputs\";\nimport { motion } from \"framer-motion\";\nimport { cn } from \"../../../lib/utils\";\nimport { DynamicIcon } from \"../../ui/dynamic-icon\";\nimport { Pressable } from \"../../../lib/Pressable\";\nimport {\n isValidEmail,\n PageSpeedFormSubmissionError,\n submitPageSpeedForm,\n type PageSpeedFormConfig,\n} from \"../../../lib/forms\";\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 /**\n * Optional form submission configuration.\n *\n * **Universal Usage**: Works with ANY REST API endpoint. Simply provide an `endpoint` URL\n * and the form will submit to it in JSON format.\n *\n * @example\n * // Works with any API\n * formConfig={{ endpoint: \"https://api.mysite.com/subscribe\", format: \"json\" }}\n *\n * @example\n * // With custom headers (e.g., authentication)\n * formConfig={{\n * endpoint: \"/api/newsletter\",\n * headers: { \"Authorization\": \"Bearer token123\" }\n * }}\n *\n * **Note**: The `apiKey`, `contactCategoryToken`, and other platform-specific fields\n * are OPTIONAL and only needed when integrating with DashTrack's Rails backend.\n * For generic REST APIs, just use `endpoint`, `method`, `format`, and `headers`.\n *\n * See `FORMS_INTEGRATION_GUIDE.md` for complete examples with Next.js, React, and more.\n */\n formConfig?: PageSpeedFormConfig;\n /**\n * Optional custom submission handler for maximum flexibility.\n *\n * Use this when you need complete control over the submission logic,\n * such as custom API calls, analytics tracking, or multi-step workflows.\n *\n * Can be used alone or in combination with `formConfig` for hybrid approaches.\n *\n * @example\n * onSubmit={async (email) => {\n * await fetch(\"/api/subscribe\", {\n * method: \"POST\",\n * body: JSON.stringify({ email, source: \"footer\" })\n * });\n * }}\n */\n onSubmit?: (email: string) => void | Promise<void>;\n /**\n * Optional success callback invoked after successful submission.\n *\n * Called after `formConfig` submission and/or `onSubmit` completes successfully.\n * Use for showing success messages, redirecting, analytics tracking, etc.\n */\n onSuccess?: (data: unknown) => void;\n /**\n * Optional error callback invoked if submission fails.\n *\n * Receives the error object for custom error handling, logging, or user notifications.\n */\n onError?: (error: Error) => void;\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 = \"Email*\",\n formConfig,\n onSubmit,\n onSuccess,\n onError,\n location = \"San Francisco, CA\",\n}: FooterNewsletterMinimalProps): React.JSX.Element {\n const form = useForm<{ email: string }>({\n initialValues: {\n email: \"\",\n },\n validationSchema: {\n email: (value) => {\n if (!value) return \"Email is required\";\n if (!isValidEmail(value)) return \"Please enter a valid email address\";\n return undefined;\n },\n },\n onSubmit: async (values, helpers) => {\n const shouldAutoSubmit = Boolean(formConfig?.endpoint);\n\n if (!shouldAutoSubmit && !onSubmit) {\n return;\n }\n\n try {\n let result: unknown;\n\n if (shouldAutoSubmit) {\n result = await submitPageSpeedForm(values, formConfig);\n }\n\n if (onSubmit) {\n await onSubmit(values.email);\n }\n\n if (shouldAutoSubmit || onSubmit) {\n if (formConfig?.resetOnSuccess !== false) {\n helpers.resetForm();\n }\n onSuccess?.(result);\n }\n } catch (error) {\n if (\n error instanceof PageSpeedFormSubmissionError &&\n error.formErrors\n ) {\n helpers.setErrors(error.formErrors);\n }\n onError?.(error as Error);\n throw error;\n }\n },\n });\n\n const formMethod =\n formConfig?.method?.toLowerCase() === \"get\" ? \"get\" : \"post\";\n\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 <Pressable href={`mailto:${supportEmail}`}>\n {supportEmail}\n </Pressable>\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 <Pressable\n href={item.href}\n className=\"tracking-tight text-foreground hover:text-foreground/30\"\n >\n {item.label}\n </Pressable>\n </li>\n ))}\n </ul>\n <ul className=\"space-y-1\">\n {socialLinks.map((item) => (\n <li key={item.label}>\n <Pressable\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 </Pressable>\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\n form={form}\n action={formConfig?.endpoint}\n method={formMethod}\n className=\"flex w-full items-end border-b border-b-foreground/10\"\n >\n <Field name=\"email\" className=\"flex-1\">\n {({ field, meta }) => (\n <TextInput\n {...field}\n type=\"email\"\n placeholder={newsletterPlaceholder}\n error={meta.touched && !!meta.error}\n className=\"mt-10 h-auto 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 aria-label={newsletterPlaceholder || \"Email address\"}\n />\n )}\n </Field>\n <Pressable\n componentType=\"button\"\n type=\"submit\"\n className=\"p-2 hover:bg-muted/20\"\n asButton={false}\n disabled={form.isSubmitting}\n >\n <DynamicIcon name=\"lucide/arrow-right\" size={20} />\n </Pressable>\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 <Pressable\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 </Pressable>\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 <Pressable\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 </Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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,hsl(var(--primary,0_0%_100%))_0%,hsl(var(--secondary,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,hsl(var(--secondary,0_0%_0%))_0%,hsl(var(--primary,0_0%_100%))_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 <Pressable\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 </Pressable>\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 <Pressable\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 </Pressable>\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 <Pressable\n href={`mailto:${email}`}\n className=\"transition-colors hover:text-foreground\"\n >\n {email}\n </Pressable>\n </p>\n\n {/* Attribution */}\n <div className=\"mt-8 border-t pt-8 text-sm text-muted-foreground\">\n <p>\n © {new Date().getFullYear()} Opensite AI. All rights reserved.\n </p>\n <Pressable\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 </Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable\n href={logo.url}\n className=\"mb-8 flex items-center gap-2\"\n >\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 </Pressable>\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 <Pressable\n href={link.href}\n className=\"hover:text-primary\"\n >\n {link.name}\n </Pressable>\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\">\n {newsletterHeading}\n </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 <Pressable\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 </Pressable>\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 <Pressable\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 </Pressable>\n </div>\n <ul className=\"flex gap-4\">\n {legalLinks.map((link, idx) => (\n <li key={idx}>\n <Pressable href={link.href} className=\"hover:text-primary\">\n {link.name}\n </Pressable>\n </li>\n ))}\n </ul>\n </div>\n </footer>\n </div>\n </section>\n );\n}\n"]}
1
+ {"version":3,"sources":["../lib/utils.ts","../components/ui/container.tsx","../components/ui/section.tsx","../components/ui/animated-dialog.tsx","../components/ui/page-hero-banner.tsx","../lib/button-variants.ts","../components/ui/button.tsx","../components/ui/card.tsx","../components/ui/badge.tsx","../components/ui/popover.tsx","../components/ui/dynamic-icon.tsx","../lib/useNavigation.ts","../lib/Pressable.tsx","../components/blocks/about/alternating-blocks.tsx","../components/blocks/cta/media-hover-ctas.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","../lib/forms.ts","../components/blocks/footers/footer-newsletter-minimal.tsx","../components/blocks/footers/footer-cta-social.tsx","../components/blocks/footers/footer-nav-social.tsx"],"names":["React","jsx","jsxs","cva","Slot","iconName","React5","React6","Img","defaultSections","defaultSocialLinks","defaultBottomLinks","defaultLegalLinks","defaultMenuItems","motion","response","data","defaultNavLinks","React7"],"mappings":"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","file":"index.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-7xl\",\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-2 sm:px-4 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:\n \"bg-linear-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 none: \"py-0 md:py-0\",\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","\"use client\";\n\nimport React, { useEffect, useId, useRef } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport { useOnClickOutside } from \"@opensite/hooks\";\nimport type { AnimatedDialogProps } from \"../../src/types\";\n\n/**\n * Size variants for the dialog\n */\nconst sizeStyles = {\n sm: \"max-w-md\",\n md: \"max-w-2xl\",\n lg: \"max-w-4xl\",\n xl: \"max-w-5xl\",\n full: \"max-w-7xl\",\n};\n\n/**\n * Animation transition configuration\n */\nconst dialogTransition = {\n duration: 0.35,\n ease: [0.16, 1, 0.3, 1] as const,\n};\n\n/**\n * Animated dialog component with framer-motion animations\n *\n * @example\n * ```tsx\n * const [open, setOpen] = useState(false);\n *\n * <AnimatedDialog\n * open={open}\n * onOpenChange={setOpen}\n * title=\"Dialog Title\"\n * description=\"Dialog description\"\n * >\n * <div>Dialog content</div>\n * </AnimatedDialog>\n * ```\n */\nexport function AnimatedDialog({\n open,\n onOpenChange,\n title,\n eyebrow,\n description,\n children,\n header,\n footer,\n size = \"lg\",\n className,\n contentClassName,\n}: AnimatedDialogProps) {\n const titleId = useId();\n const descriptionId = useId();\n const containerRef = useRef<HTMLDivElement>(null!);\n\n useOnClickOutside(containerRef, () => {\n if (open) {\n onOpenChange(false);\n }\n });\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onOpenChange(false);\n }\n };\n\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n window.addEventListener(\"keydown\", onKeyDown);\n\n return () => {\n document.body.style.overflow = previousOverflow;\n window.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [open, onOpenChange]);\n\n return (\n <AnimatePresence>\n {open ? (\n <div className=\"fixed inset-0 z-50 h-screen overflow-y-auto\">\n {/* Backdrop */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1, transition: dialogTransition }}\n exit={{ opacity: 0, transition: dialogTransition }}\n className=\"fixed inset-0 h-full w-full bg-foreground/80 backdrop-blur-lg\"\n />\n\n {/* Dialog container */}\n <motion.div\n initial={{ opacity: 0, y: 24, scale: 0.98 }}\n animate={{\n opacity: 1,\n y: 0,\n scale: 1,\n transition: dialogTransition,\n }}\n exit={{\n opacity: 0,\n y: 12,\n scale: 0.98,\n transition: dialogTransition,\n }}\n ref={containerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={description ? descriptionId : undefined}\n className={cn(\n \"relative z-60 mx-auto my-12 flex w-[92vw] max-h-[85vh] flex-col overflow-hidden rounded-3xl bg-background p-6 shadow-2xl ring-1 ring-border/10 md:my-20 md:p-12\",\n sizeStyles[size],\n className,\n )}\n >\n {/* Header */}\n <div className=\"flex items-start justify-between gap-8\">\n {header ? (\n header\n ) : (\n <div className=\"space-y-3\">\n {eyebrow ? (\n <p className=\"text-xs font-semibold uppercase tracking-[0.3em] text-primary\">\n {eyebrow}\n </p>\n ) : null}\n {title ? (\n <h2\n id={titleId}\n className=\"text-2xl font-semibold text-foreground md:text-4xl\"\n >\n {title}\n </h2>\n ) : null}\n {description ? (\n <p\n id={descriptionId}\n className=\"text-sm text-muted-foreground md:text-base\"\n >\n {description}\n </p>\n ) : null}\n </div>\n )}\n\n {/* Close button */}\n <button\n type=\"button\"\n aria-label=\"Close dialog\"\n className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-foreground text-background transition hover:bg-foreground/80 md:h-11 md:w-11\"\n onClick={() => onOpenChange(false)}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M18 6L6 18M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n\n {/* Content */}\n {children ? (\n <div\n className={cn(\n \"mt-8 flex-1 min-h-0 overflow-y-auto pr-2 md:mt-10\",\n contentClassName,\n )}\n >\n {children}\n </div>\n ) : null}\n\n {/* Footer */}\n {footer ? <div className=\"mt-8 md:mt-10\">{footer}</div> : null}\n </motion.div>\n </div>\n ) : null}\n </AnimatePresence>\n );\n}\n","import { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Container } from \"./container\";\nimport type { PageHeroBannerProps } from \"../../src/types\";\n\n/**\n * Page Hero Banner component for full-width hero sections with image or video backgrounds\n *\n * @example\n * ```tsx\n * <PageHeroBanner\n * imageUrl=\"https://example.com/hero.jpg\"\n * alt=\"Hero banner\"\n * minHeight=\"600px\"\n * >\n * <h1>Welcome to our site</h1>\n * <p>Discover amazing content</p>\n * </PageHeroBanner>\n * ```\n */\nexport function PageHeroBanner({\n imageUrl,\n videoUrl,\n alt = \"Hero banner\",\n children,\n className = \"\",\n loading = \"eager\",\n minHeight = \"500px\",\n showOverlay = true,\n overlayOpacity = 0.6,\n contentMaxWidth = \"4xl\",\n overlayClassName,\n contentClassName,\n style,\n ...props\n}: PageHeroBannerProps) {\n if (!imageUrl && !videoUrl) {\n throw new Error(\"PageHeroBanner requires either imageUrl or videoUrl\");\n }\n\n if (imageUrl && videoUrl) {\n throw new Error(\n \"PageHeroBanner cannot have both imageUrl and videoUrl. Please provide only one.\"\n );\n }\n\n return (\n <div\n className={cn(\"relative w-full overflow-hidden\", className)}\n style={{\n minHeight,\n ...style,\n }}\n {...props}\n >\n {/* Image background */}\n {imageUrl && (\n <img\n src={imageUrl}\n alt={alt}\n loading={loading}\n className=\"absolute inset-0 w-full h-full object-cover\"\n />\n )}\n\n {/* Video background */}\n {videoUrl && (\n <video\n src={videoUrl}\n className=\"absolute inset-0 w-full h-full object-cover\"\n autoPlay\n loop\n muted\n playsInline\n preload=\"auto\"\n />\n )}\n\n {/* Gradient overlay */}\n {showOverlay && (\n <div\n className={cn(\n \"absolute inset-0 bg-linear-to-b from-black via-black to-black\",\n overlayClassName\n )}\n style={{ opacity: overlayOpacity }}\n />\n )}\n\n {/* Content */}\n <Container\n maxWidth={contentMaxWidth}\n className={cn(\"relative h-full flex items-center\", contentClassName)}\n style={{ minHeight }}\n >\n <div className=\"relative text-background drop-shadow-lg py-16 md:py-24\">\n {children}\n </div>\n </Container>\n </div>\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","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\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","\"use client\";\n\nimport * as React from \"react\";\n\nexport type LinkType = \"internal\" | \"external\" | \"mailto\" | \"tel\" | \"unknown\" | \"none\";\n\nexport interface UseNavigationArgs {\n href?: string;\n onClick?: React.MouseEventHandler<HTMLElement>;\n}\n\nexport interface UseNavigationReturn {\n linkType: LinkType;\n normalizedHref: string | undefined;\n target: \"_blank\" | \"_self\" | undefined;\n rel: string | undefined;\n isExternal: boolean;\n isInternal: boolean;\n shouldUseRouter: boolean;\n handleClick: React.MouseEventHandler<HTMLElement>;\n}\n\n/**\n * Normalizes phone numbers to tel: format\n * Handles formats like:\n * - \"+14322386131\"\n * - \"(432) 238-6131\"\n * - \"512-232-2212x123\"\n * - \"tel:+14322386131\"\n */\nfunction normalizePhoneNumber(input: string): string {\n const trimmed = input.trim();\n\n // Already has tel: prefix\n if (trimmed.toLowerCase().startsWith(\"tel:\")) {\n return trimmed;\n }\n\n // Extract digits and extension\n const match = trimmed.match(/^[\\s\\+\\-\\(\\)]*(\\d[\\d\\s\\-\\(\\)\\.]*\\d)[\\s\\-]*(x|ext\\.?|extension)?[\\s\\-]*(\\d+)?$/i);\n\n if (match) {\n // Clean the main number (remove spaces, dashes, dots, parentheses)\n const mainNumber = match[1].replace(/[\\s\\-\\(\\)\\.]/g, \"\");\n const extension = match[3];\n\n // Add + prefix if not already there and number looks international (10+ digits)\n const normalized = mainNumber.length >= 10 && !trimmed.startsWith(\"+\")\n ? `+${mainNumber}`\n : mainNumber;\n\n // Add extension if present\n const withExtension = extension ? `${normalized};ext=${extension}` : normalized;\n\n return `tel:${withExtension}`;\n }\n\n // Fallback: just clean and prefix\n const cleaned = trimmed.replace(/[\\s\\-\\(\\)\\.]/g, \"\");\n return `tel:${cleaned}`;\n}\n\n/**\n * Normalizes email addresses to mailto: format\n */\nfunction normalizeEmail(input: string): string {\n const trimmed = input.trim();\n\n // Already has mailto: prefix\n if (trimmed.toLowerCase().startsWith(\"mailto:\")) {\n return trimmed;\n }\n\n return `mailto:${trimmed}`;\n}\n\n/**\n * Detects if a string is an email address\n */\nfunction isEmail(input: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(input.trim());\n}\n\n/**\n * Detects if a string is a phone number\n */\nfunction isPhoneNumber(input: string): boolean {\n const trimmed = input.trim();\n\n // Already has tel: prefix\n if (trimmed.toLowerCase().startsWith(\"tel:\")) {\n return true;\n }\n\n // Match various phone formats\n const phoneRegex = /^[\\s\\+\\-\\(\\)]*\\d[\\d\\s\\-\\(\\)\\.]*\\d[\\s\\-]*(x|ext\\.?|extension)?[\\s\\-]*\\d*$/i;\n return phoneRegex.test(trimmed);\n}\n\n/**\n * Detects if a URL is internal to the current site\n * Handles cases like:\n * - \"/blog-123\"\n * - \"https://jordansite.com/blog-123\"\n * - \"https://www.jordansite.com/blog-123\"\n */\nfunction isInternalUrl(href: string): boolean {\n if (typeof window === \"undefined\") {\n // SSR fallback: assume relative paths are internal\n return href.startsWith(\"/\") && !href.startsWith(\"//\");\n }\n\n const trimmed = href.trim();\n\n // Relative paths are internal\n if (trimmed.startsWith(\"/\") && !trimmed.startsWith(\"//\")) {\n return true;\n }\n\n // Check if full URL matches current origin\n try {\n const url = new URL(trimmed, window.location.href);\n const currentOrigin = window.location.origin;\n\n // Normalize both origins (remove www. for comparison)\n const normalizeOrigin = (origin: string) =>\n origin.replace(/^(https?:\\/\\/)(www\\.)?/, \"$1\");\n\n return normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin);\n } catch {\n return false;\n }\n}\n\n/**\n * Converts a full URL to a relative path if it's internal\n */\nfunction toRelativePath(href: string): string {\n if (typeof window === \"undefined\") {\n return href;\n }\n\n const trimmed = href.trim();\n\n // Already relative\n if (trimmed.startsWith(\"/\") && !trimmed.startsWith(\"//\")) {\n return trimmed;\n }\n\n try {\n const url = new URL(trimmed, window.location.href);\n const currentOrigin = window.location.origin;\n\n // Normalize both origins for comparison\n const normalizeOrigin = (origin: string) =>\n origin.replace(/^(https?:\\/\\/)(www\\.)?/, \"$1\");\n\n if (normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin)) {\n // Return pathname + search + hash\n return url.pathname + url.search + url.hash;\n }\n } catch {\n // Invalid URL, return as-is\n }\n\n return trimmed;\n}\n\n/**\n * Hook for handling navigation with automatic link type detection,\n * URL normalization, and proper attributes for SEO and accessibility.\n *\n * Features:\n * - Detects link types: internal, external, mailto, tel\n * - Normalizes phone numbers (various formats to tel:)\n * - Normalizes email addresses to mailto:\n * - Converts full URLs matching current origin to relative paths\n * - Determines proper target and rel attributes\n * - Handles React Router-style internal navigation\n *\n * @example\n * ```tsx\n * const nav = useNavigation({ href: \"/about\" });\n * // nav.linkType === \"internal\"\n * // nav.normalizedHref === \"/about\"\n * // nav.target === \"_self\"\n *\n * const nav2 = useNavigation({ href: \"(432) 238-6131\" });\n * // nav2.linkType === \"tel\"\n * // nav2.normalizedHref === \"tel:+14322386131\"\n *\n * const nav3 = useNavigation({ href: \"https://google.com\" });\n * // nav3.linkType === \"external\"\n * // nav3.target === \"_blank\"\n * // nav3.rel === \"noopener noreferrer\"\n * ```\n */\nexport function useNavigation({\n href,\n onClick\n}: UseNavigationArgs = {}): UseNavigationReturn {\n const linkType = React.useMemo((): LinkType => {\n if (!href || href.trim() === \"\") {\n return onClick ? \"none\" : \"none\";\n }\n\n const trimmed = href.trim();\n\n // Check for mailto\n if (trimmed.toLowerCase().startsWith(\"mailto:\") || isEmail(trimmed)) {\n return \"mailto\";\n }\n\n // Check for tel\n if (trimmed.toLowerCase().startsWith(\"tel:\") || isPhoneNumber(trimmed)) {\n return \"tel\";\n }\n\n // Check for internal vs external\n if (isInternalUrl(trimmed)) {\n return \"internal\";\n }\n\n // Check if it's a valid URL\n try {\n new URL(trimmed, typeof window !== \"undefined\" ? window.location.href : \"http://localhost\");\n return \"external\";\n } catch {\n // Not a valid URL, treat as internal path\n return \"internal\";\n }\n }, [href, onClick]);\n\n const normalizedHref = React.useMemo((): string | undefined => {\n if (!href || href.trim() === \"\") {\n return undefined;\n }\n\n const trimmed = href.trim();\n\n switch (linkType) {\n case \"tel\":\n return normalizePhoneNumber(trimmed);\n case \"mailto\":\n return normalizeEmail(trimmed);\n case \"internal\":\n return toRelativePath(trimmed);\n case \"external\":\n return trimmed;\n default:\n return trimmed;\n }\n }, [href, linkType]);\n\n const target = React.useMemo((): \"_blank\" | \"_self\" | undefined => {\n switch (linkType) {\n case \"external\":\n return \"_blank\";\n case \"internal\":\n return \"_self\";\n case \"mailto\":\n case \"tel\":\n // Let browser handle default behavior\n return undefined;\n default:\n return undefined;\n }\n }, [linkType]);\n\n const rel = React.useMemo((): string | undefined => {\n if (linkType === \"external\") {\n return \"noopener noreferrer\";\n }\n return undefined;\n }, [linkType]);\n\n const isExternal = linkType === \"external\";\n const isInternal = linkType === \"internal\";\n const shouldUseRouter = isInternal && typeof normalizedHref === \"string\" && normalizedHref.startsWith(\"/\");\n\n const handleClick = React.useCallback<React.MouseEventHandler<HTMLElement>>(\n (event) => {\n // Call user's onClick first\n if (onClick) {\n try {\n onClick(event);\n } catch (error) {\n console.error(\"Error in user onClick handler:\", error);\n }\n }\n\n // If event was prevented, don't do anything else\n if (event.defaultPrevented) {\n return;\n }\n\n // Only handle internal navigation for left-clicks without modifiers\n if (\n shouldUseRouter &&\n normalizedHref &&\n event.button === 0 && // left-click only\n !event.metaKey &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.shiftKey\n ) {\n // Check if there's a navigation handler (from opensite-blocks or similar)\n if (typeof window !== \"undefined\") {\n const handler = (window as any).__opensiteNavigationHandler;\n if (typeof handler === \"function\") {\n try {\n const handled = handler(normalizedHref, event.nativeEvent || event);\n if (handled !== false) {\n event.preventDefault();\n }\n } catch (error) {\n console.error(\"Error in navigation handler:\", error);\n }\n }\n }\n }\n },\n [onClick, shouldUseRouter, normalizedHref]\n );\n\n return {\n linkType,\n normalizedHref,\n target,\n rel,\n isExternal,\n isInternal,\n shouldUseRouter,\n handleClick,\n };\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"./utils\";\nimport { useNavigation } from \"./useNavigation\";\nimport { buttonVariants } from \"./button-variants\";\n\ntype FallbackComponentType = \"span\" | \"div\" | \"button\";\n\ninterface PressableBaseProps {\n /**\n * Content inside the Pressable component\n */\n children: React.ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n\n /**\n * URL to navigate to (can be internal path, external URL, mailto:, tel:, or email/phone string)\n * Examples:\n * - \"/about\" - internal link\n * - \"https://google.com\" - external link\n * - \"mailto:hello@example.com\" or \"hello@example.com\" - email link\n * - \"tel:+14322386131\" or \"(432) 238-6131\" - phone link\n * - \"https://mysite.com/blog\" - will be converted to \"/blog\" if on mysite.com\n */\n href?: string;\n\n /**\n * Click handler\n */\n onClick?: React.MouseEventHandler<HTMLElement>;\n\n /**\n * The component type to render when there's no href or onClick\n * @default \"span\"\n */\n fallbackComponentType?: FallbackComponentType;\n\n /**\n * Explicit component type to render (overrides automatic selection)\n * Note: Internal links will ALWAYS render as <a> tags for SEO, even if componentType=\"button\"\n */\n componentType?: \"a\" | \"button\" | FallbackComponentType;\n\n /**\n * Whether to render as a button styled link (uses ShadCN button styles)\n * When true, will apply button variant classes even when rendering an <a> tag\n * @default false\n */\n asButton?: boolean;\n\n /**\n * ARIA label for accessibility\n */\n \"aria-label\"?: string;\n\n /**\n * ARIA describedby for accessibility\n */\n \"aria-describedby\"?: string;\n\n /**\n * ID attribute\n */\n id?: string;\n\n /**\n * Data attributes\n */\n [key: `data-${string}`]: any;\n}\n\n// Combine Pressable props with button variants\nexport interface PressableProps\n extends PressableBaseProps,\n VariantProps<typeof buttonVariants> {}\n\n// Type for link-specific props\ninterface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {}\n\n// Type for button-specific props\ninterface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\n/**\n * Universal link/button component with automatic URL detection and normalization.\n *\n * Features:\n * - Automatic link type detection (internal, external, mailto, tel)\n * - Phone number normalization (various formats to tel:)\n * - Email normalization to mailto:\n * - Internal URL normalization (full URLs to relative paths)\n * - Proper SEO attributes (always uses <a> for links, even when styled as buttons)\n * - ShadCN button variants and sizes\n * - Flexible layout support (icon+label or custom children)\n * - React Router-style internal navigation\n *\n * @example\n * Simple link\n * ```tsx\n * <Pressable href=\"/about\">About Us</Pressable>\n * ```\n *\n * @example\n * Button-styled link with icon\n * ```tsx\n * <Pressable href=\"/quotes\" variant=\"default\" size=\"lg\" asButton>\n * <DynamicIcon name=\"lucide/calculator\" size={20} />\n * Get a Free Quote\n * </Pressable>\n * ```\n *\n * @example\n * External link (automatically gets target=\"_blank\" and rel=\"noopener noreferrer\")\n * ```tsx\n * <Pressable href=\"https://google.com\">Visit Google</Pressable>\n * ```\n *\n * @example\n * Phone link (automatically normalized to tel: format)\n * ```tsx\n * <Pressable href=\"(432) 238-6131\">Call Us</Pressable>\n * // Renders: <a href=\"tel:+14322386131\">\n * ```\n *\n * @example\n * Custom layout with full children control\n * ```tsx\n * <Pressable href=\"/services\" className=\"custom-card\">\n * <div className=\"card-header\">\n * <DynamicIcon name=\"service-icon\" />\n * <h3>Our Services</h3>\n * </div>\n * <p>Learn more about what we offer</p>\n * </Pressable>\n * ```\n *\n * @example\n * Button with onClick (no href)\n * ```tsx\n * <Pressable onClick={() => alert(\"Clicked\")} variant=\"default\" size=\"md\" asButton>\n * Click Me\n * </Pressable>\n * ```\n */\nexport const Pressable = React.forwardRef<\n HTMLAnchorElement | HTMLButtonElement | HTMLSpanElement,\n PressableProps & Partial<LinkProps> & Partial<ButtonProps>\n>(\n (\n {\n children,\n className,\n href,\n onClick,\n variant,\n size,\n asButton = false,\n fallbackComponentType = \"span\",\n componentType,\n \"aria-label\": ariaLabel,\n \"aria-describedby\": ariaDescribedby,\n id,\n ...props\n },\n ref\n ) => {\n const navigation = useNavigation({ href, onClick });\n const {\n normalizedHref,\n target,\n rel,\n linkType,\n isInternal,\n isExternal,\n handleClick,\n } = navigation;\n\n // Determine what component to render\n const shouldRenderLink = normalizedHref && linkType !== \"none\";\n const shouldRenderButton = !shouldRenderLink && onClick;\n const shouldRenderFallback = !shouldRenderLink && !shouldRenderButton;\n\n // Force <a> tag for internal links for SEO (even if componentType=\"button\")\n const effectiveComponentType = componentType || (\n shouldRenderLink\n ? \"a\"\n : shouldRenderButton\n ? \"button\"\n : fallbackComponentType\n );\n\n // Override for SEO: internal links must be <a> tags\n const finalComponentType = isInternal && shouldRenderLink\n ? \"a\"\n : effectiveComponentType;\n\n // Determine if we should apply button styles\n const shouldApplyButtonStyles = asButton || variant || size;\n\n // Build className\n const combinedClassName = cn(\n shouldApplyButtonStyles && buttonVariants({ variant, size }),\n className\n );\n\n const dataProps = Object.fromEntries(\n Object.entries(props).filter(([key]) => key.startsWith(\"data-\"))\n );\n const buttonDataAttributes = shouldApplyButtonStyles\n ? {\n \"data-slot\": \"button\",\n \"data-variant\": variant ?? \"default\",\n \"data-size\": size ?? \"default\",\n }\n : {};\n\n // Build common props\n const commonProps = {\n className: combinedClassName,\n onClick: handleClick,\n \"aria-label\": ariaLabel,\n \"aria-describedby\": ariaDescribedby,\n id,\n ...dataProps,\n ...buttonDataAttributes,\n };\n\n // Render link\n if (finalComponentType === \"a\" && shouldRenderLink) {\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={normalizedHref}\n target={target}\n rel={rel}\n {...commonProps}\n {...(props as LinkProps)}\n >\n {children}\n </a>\n );\n }\n\n // Render button\n if (finalComponentType === \"button\") {\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type={(props as ButtonProps).type || \"button\"}\n {...commonProps}\n {...(props as ButtonProps)}\n >\n {children}\n </button>\n );\n }\n\n // Render fallback (span or div)\n if (finalComponentType === \"div\") {\n return (\n <div\n ref={ref as React.Ref<HTMLDivElement>}\n {...commonProps}\n >\n {children}\n </div>\n );\n }\n\n // Default to span\n return (\n <span\n ref={ref as React.Ref<HTMLSpanElement>}\n {...commonProps}\n >\n {children}\n </span>\n );\n }\n);\n\nPressable.displayName = \"Pressable\";\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","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Img } from \"@page-speed/img\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable 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 </Pressable>\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 <Pressable href={link.url}>{link.text}</Pressable>\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 <Pressable\n href=\"https://opensite.ai\"\n className=\"hover:text-primary\"\n >\n AI Website and Automation Platform by Opensite\n </Pressable>\n </div>\n <ul className=\"flex gap-4\">\n {bottomLinks.map((link, linkIdx) => (\n <li key={linkIdx} className=\"underline hover:text-primary\">\n <Pressable href={link.url}>{link.text}</Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable 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 </Pressable>\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 <Pressable href={link.href}>{link.name}</Pressable>\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 <Pressable 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 </Pressable>\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 <Pressable\n onClick={(e) => {\n e.preventDefault();\n // Newsletter submission logic would go here\n }}\n variant=\"default\"\n size=\"default\"\n asButton\n >\n {newsletterButtonText}\n </Pressable>\n </div>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n By submitting, you agree to our\n <Pressable href={privacyLinkUrl} className=\"ml-1 text-primary hover:underline\">\n {privacyLinkText}\n </Pressable>\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 <Pressable\n href=\"https://opensite.ai\"\n className=\"hover:text-primary\"\n >\n AI Website and Automation Platform by Opensite\n </Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable 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 </Pressable>\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 <Pressable href={link.href}>{link.name}</Pressable>\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 <Pressable 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 </Pressable>\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 <Pressable 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 </Pressable>\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 <Pressable\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 </Pressable>\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 { Pressable } from \"../../../lib/Pressable\";\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 <Pressable\n href={link.href}\n className=\"text-base whitespace-nowrap hover:text-accent-foreground\"\n >\n {link.title}\n </Pressable>\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 <Pressable\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 </Pressable>\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 <Pressable\n key={idx}\n href={link.href}\n className=\"hover:text-accent-foreground\"\n >\n {link.text}\n </Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable href={logo.url}>\n <Img\n src={logo.src}\n alt={logo.alt}\n className=\"h-8\"\n optixFlowConfig={optixFlowConfig}\n />\n </Pressable>\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 <Pressable href={social.href} aria-label={social.label}>\n <DynamicIcon name={social.icon} size={20} />\n </Pressable>\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 <Pressable href={link.href}>{link.name}</Pressable>\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 <Pressable href={link.href}>{link.name}</Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable href={logo.url}>\n <Img\n src={logo.src}\n alt={logo.alt}\n className=\"h-8\"\n optixFlowConfig={optixFlowConfig}\n />\n </Pressable>\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 <Pressable href={social.href} aria-label={social.label}>\n <DynamicIcon name={social.icon} size={24} />\n </Pressable>\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 <Pressable href={link.href}>{link.name}</Pressable>\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 <Pressable\n href={privacyLinkUrl}\n className=\"ml-1 text-primary hover:underline\"\n >\n {privacyLinkText}\n </Pressable>\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 <Pressable\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 </Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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\n className={cn(\"dark bg-background py-16 text-foreground\", className)}\n >\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\">\n {ctaHeading}\n </h2>\n <p className=\"mx-auto mb-6 max-w-2xl text-muted-foreground\">\n {ctaDescription}\n </p>\n <Pressable\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 </Pressable>\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 <Pressable\n href={logo.url}\n className=\"mb-6 flex items-center gap-2\"\n >\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 </Pressable>\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 <Pressable\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 </Pressable>\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 <Pressable\n href={link.href}\n className=\"hover:text-foreground\"\n >\n {link.name}\n </Pressable>\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 <Pressable\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 </Pressable>\n </div>\n <ul className=\"flex gap-4\">\n {legalLinks.map((link, idx) => (\n <li key={idx}>\n <Pressable href={link.href} className=\"hover:text-foreground\">\n {link.name}\n </Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable\n href={logo.url}\n className=\"mb-8 flex items-center gap-2\"\n >\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 </Pressable>\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 <Pressable\n href={`mailto:${email}`}\n className=\"hover:text-primary\"\n >\n {email}\n </Pressable>\n </p>\n <p>\n <Pressable\n href={`tel:${phone}`}\n className=\"hover:text-primary\"\n >\n {phone}\n </Pressable>\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 <Pressable\n href={link.href}\n className=\"text-muted-foreground hover:text-primary\"\n >\n {link.name}\n </Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable\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 </Pressable>\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 <Pressable\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 </Pressable>\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 <Pressable\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 </Pressable>\n </div>\n <div className=\"flex gap-4\">\n {bottomLinks.map((link, idx) => (\n <Pressable\n key={idx}\n href={link.url}\n className=\"text-sm text-muted-foreground transition-colors hover:text-primary\"\n >\n {link.text}\n </Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable\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 </Pressable>\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 <Pressable\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 </Pressable>\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 >\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","import {\n deserializeErrors,\n serializeForRails,\n type FormErrors,\n type RailsApiConfig,\n type RailsErrorResponse,\n} from \"@page-speed/forms/integration\";\n\nexport type PageSpeedFormMethod = \"post\" | \"get\" | \"put\" | \"patch\";\nexport type PageSpeedFormSubmissionFormat = \"json\" | \"rails\";\n\nexport interface PageSpeedFormConfig {\n /**\n * API endpoint used for submission (also applied to form action).\n */\n endpoint?: string;\n /**\n * HTTP method for submission.\n * @default \"post\"\n */\n method?: PageSpeedFormMethod;\n /**\n * Submission format.\n * Defaults to \"rails\" when apiKey is present, otherwise \"json\".\n */\n format?: PageSpeedFormSubmissionFormat;\n /**\n * Additional headers for the submission request.\n */\n headers?: Record<string, string>;\n /**\n * Static values merged into the payload (e.g. subject, content).\n */\n values?: Record<string, unknown>;\n /**\n * Rails API key (required for rails format).\n */\n apiKey?: string;\n /**\n * Rails contact category token.\n */\n contactCategoryToken?: string;\n /**\n * Rails location ID.\n */\n locationId?: string;\n /**\n * Rails website ID.\n */\n websiteId?: string;\n /**\n * Rails website form assignment ID.\n */\n websiteFormAssignmentId?: string;\n /**\n * Rails visitor IP address override.\n */\n visitorIpAddress?: string;\n /**\n * Reset form values after a successful submission.\n * @default true\n */\n resetOnSuccess?: boolean;\n}\n\nexport class PageSpeedFormSubmissionError extends Error {\n formErrors?: FormErrors;\n status?: number;\n\n constructor(\n message: string,\n options: { formErrors?: FormErrors; status?: number } = {}\n ) {\n super(message);\n this.name = \"PageSpeedFormSubmissionError\";\n this.formErrors = options.formErrors;\n this.status = options.status;\n }\n}\n\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nexport function isValidEmail(value: string): boolean {\n return EMAIL_REGEX.test(value);\n}\n\nfunction buildUrlWithParams(\n endpoint: string,\n values: Record<string, unknown>\n): string {\n const base =\n typeof window === \"undefined\" ? \"http://localhost\" : window.location.origin;\n const url = new URL(endpoint, base);\n\n Object.entries(values).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((item) => {\n if (item !== undefined && item !== null) {\n url.searchParams.append(key, String(item));\n }\n });\n return;\n }\n url.searchParams.set(key, String(value));\n });\n\n return url.toString();\n}\n\nfunction normalizeMethod(method?: PageSpeedFormMethod): string {\n return (method || \"post\").toUpperCase();\n}\n\nfunction resolveFormat(\n config?: PageSpeedFormConfig\n): PageSpeedFormSubmissionFormat {\n if (config?.format) {\n return config.format;\n }\n return config?.apiKey ? \"rails\" : \"json\";\n}\n\nfunction mergeValues(\n values: Record<string, unknown>,\n config?: PageSpeedFormConfig\n): Record<string, unknown> {\n return {\n ...(config?.values ?? {}),\n ...values,\n };\n}\n\nexport async function submitPageSpeedForm(\n values: Record<string, unknown>,\n config?: PageSpeedFormConfig\n): Promise<unknown> {\n if (!config?.endpoint) {\n return null;\n }\n\n const payload = mergeValues(values, config);\n const method = normalizeMethod(config.method);\n const format = resolveFormat(config);\n const headers: Record<string, string> = { ...(config.headers ?? {}) };\n\n if (format === \"rails\") {\n if (!config.apiKey) {\n throw new PageSpeedFormSubmissionError(\n \"Missing apiKey for Rails form submission.\"\n );\n }\n\n const railsConfig: RailsApiConfig = {\n apiKey: config.apiKey,\n contactCategoryToken: config.contactCategoryToken,\n locationId: config.locationId,\n websiteId: config.websiteId,\n websiteFormAssignmentId: config.websiteFormAssignmentId,\n visitorIpAddress: config.visitorIpAddress,\n };\n\n const serialized = serializeForRails(payload, railsConfig);\n\n if (serialized.contact.contact_form_upload_tokens) {\n serialized.contact.contact_form_upload_tokens = (\n serialized.contact.contact_form_upload_tokens as string[]\n ).map((token) => token.replace(/^upload_/, \"\"));\n }\n\n headers[\"Content-Type\"] ??= \"application/json\";\n\n const response = await fetch(config.endpoint, {\n method,\n headers,\n body: JSON.stringify(serialized),\n });\n\n const data = await response.json().catch(() => null);\n\n if (!response.ok || (data && data.errors)) {\n const errorResponse: RailsErrorResponse = {\n errors: data?.errors ?? { base: [\"Form submission failed\"] },\n status: data?.status ?? response.status,\n };\n const formErrors = deserializeErrors(errorResponse);\n throw new PageSpeedFormSubmissionError(\"Form submission failed.\", {\n formErrors,\n status: errorResponse.status,\n });\n }\n\n return data;\n }\n\n if (method === \"GET\") {\n const url = buildUrlWithParams(config.endpoint, payload);\n const response = await fetch(url, { method, headers });\n const data = await response.json().catch(() => null);\n\n if (!response.ok) {\n throw new PageSpeedFormSubmissionError(\n data?.message || \"Form submission failed.\",\n { status: response.status }\n );\n }\n\n return data;\n }\n\n headers[\"Content-Type\"] ??= \"application/json\";\n\n const response = await fetch(config.endpoint, {\n method,\n headers,\n body: JSON.stringify(payload),\n });\n\n const data = await response.json().catch(() => null);\n\n if (!response.ok) {\n throw new PageSpeedFormSubmissionError(\n data?.message || \"Form submission failed.\",\n { status: response.status }\n );\n }\n\n return data;\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Field, Form, useForm } from \"@page-speed/forms\";\nimport { TextInput } from \"@page-speed/forms/inputs\";\nimport { motion } from \"framer-motion\";\nimport { cn } from \"../../../lib/utils\";\nimport { DynamicIcon } from \"../../ui/dynamic-icon\";\nimport { Pressable } from \"../../../lib/Pressable\";\nimport {\n isValidEmail,\n PageSpeedFormSubmissionError,\n submitPageSpeedForm,\n type PageSpeedFormConfig,\n} from \"../../../lib/forms\";\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 /**\n * Optional form submission configuration.\n *\n * **Universal Usage**: Works with ANY REST API endpoint. Simply provide an `endpoint` URL\n * and the form will submit to it in JSON format.\n *\n * @example\n * // Works with any API\n * formConfig={{ endpoint: \"https://api.mysite.com/subscribe\", format: \"json\" }}\n *\n * @example\n * // With custom headers (e.g., authentication)\n * formConfig={{\n * endpoint: \"/api/newsletter\",\n * headers: { \"Authorization\": \"Bearer token123\" }\n * }}\n *\n * **Note**: The `apiKey`, `contactCategoryToken`, and other platform-specific fields\n * are OPTIONAL and only needed when integrating with DashTrack's Rails backend.\n * For generic REST APIs, just use `endpoint`, `method`, `format`, and `headers`.\n *\n * See `FORMS_INTEGRATION_GUIDE.md` for complete examples with Next.js, React, and more.\n */\n formConfig?: PageSpeedFormConfig;\n /**\n * Optional custom submission handler for maximum flexibility.\n *\n * Use this when you need complete control over the submission logic,\n * such as custom API calls, analytics tracking, or multi-step workflows.\n *\n * Can be used alone or in combination with `formConfig` for hybrid approaches.\n *\n * @example\n * onSubmit={async (email) => {\n * await fetch(\"/api/subscribe\", {\n * method: \"POST\",\n * body: JSON.stringify({ email, source: \"footer\" })\n * });\n * }}\n */\n onSubmit?: (email: string) => void | Promise<void>;\n /**\n * Optional success callback invoked after successful submission.\n *\n * Called after `formConfig` submission and/or `onSubmit` completes successfully.\n * Use for showing success messages, redirecting, analytics tracking, etc.\n */\n onSuccess?: (data: unknown) => void;\n /**\n * Optional error callback invoked if submission fails.\n *\n * Receives the error object for custom error handling, logging, or user notifications.\n */\n onError?: (error: Error) => void;\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 = \"Email*\",\n formConfig,\n onSubmit,\n onSuccess,\n onError,\n location = \"San Francisco, CA\",\n}: FooterNewsletterMinimalProps): React.JSX.Element {\n const form = useForm<{ email: string }>({\n initialValues: {\n email: \"\",\n },\n validationSchema: {\n email: (value) => {\n if (!value) return \"Email is required\";\n if (!isValidEmail(value)) return \"Please enter a valid email address\";\n return undefined;\n },\n },\n onSubmit: async (values, helpers) => {\n const shouldAutoSubmit = Boolean(formConfig?.endpoint);\n\n if (!shouldAutoSubmit && !onSubmit) {\n return;\n }\n\n try {\n let result: unknown;\n\n if (shouldAutoSubmit) {\n result = await submitPageSpeedForm(values, formConfig);\n }\n\n if (onSubmit) {\n await onSubmit(values.email);\n }\n\n if (shouldAutoSubmit || onSubmit) {\n if (formConfig?.resetOnSuccess !== false) {\n helpers.resetForm();\n }\n onSuccess?.(result);\n }\n } catch (error) {\n if (\n error instanceof PageSpeedFormSubmissionError &&\n error.formErrors\n ) {\n helpers.setErrors(error.formErrors);\n }\n onError?.(error as Error);\n throw error;\n }\n },\n });\n\n const formMethod =\n formConfig?.method?.toLowerCase() === \"get\" ? \"get\" : \"post\";\n\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 <Pressable href={`mailto:${supportEmail}`}>\n {supportEmail}\n </Pressable>\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 <Pressable\n href={item.href}\n className=\"tracking-tight text-foreground hover:text-foreground/30\"\n >\n {item.label}\n </Pressable>\n </li>\n ))}\n </ul>\n <ul className=\"space-y-1\">\n {socialLinks.map((item) => (\n <li key={item.label}>\n <Pressable\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 </Pressable>\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\n form={form}\n action={formConfig?.endpoint}\n method={formMethod}\n className=\"flex w-full items-end border-b border-b-foreground/10\"\n >\n <Field name=\"email\" className=\"flex-1\">\n {({ field, meta }) => (\n <TextInput\n {...field}\n type=\"email\"\n placeholder={newsletterPlaceholder}\n error={meta.touched && !!meta.error}\n className=\"mt-10 h-auto 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 aria-label={newsletterPlaceholder || \"Email address\"}\n />\n )}\n </Field>\n <Pressable\n componentType=\"button\"\n type=\"submit\"\n className=\"p-2 hover:bg-muted/20\"\n asButton={false}\n disabled={form.isSubmitting}\n >\n <DynamicIcon name=\"lucide/arrow-right\" size={20} />\n </Pressable>\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 <Pressable\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 </Pressable>\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 <Pressable\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 </Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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,hsl(var(--primary,0_0%_100%))_0%,hsl(var(--secondary,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,hsl(var(--secondary,0_0%_0%))_0%,hsl(var(--primary,0_0%_100%))_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 <Pressable\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 </Pressable>\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 <Pressable\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 </Pressable>\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 <Pressable\n href={`mailto:${email}`}\n className=\"transition-colors hover:text-foreground\"\n >\n {email}\n </Pressable>\n </p>\n\n {/* Attribution */}\n <div className=\"mt-8 border-t pt-8 text-sm text-muted-foreground\">\n <p>\n © {new Date().getFullYear()} Opensite AI. All rights reserved.\n </p>\n <Pressable\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 </Pressable>\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\";\nimport { Pressable } from \"../../../lib/Pressable\";\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 <Pressable\n href={logo.url}\n className=\"mb-8 flex items-center gap-2\"\n >\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 </Pressable>\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 <Pressable\n href={link.href}\n className=\"hover:text-primary\"\n >\n {link.name}\n </Pressable>\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\">\n {newsletterHeading}\n </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 <Pressable\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 </Pressable>\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 <Pressable\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 </Pressable>\n </div>\n <ul className=\"flex gap-4\">\n {legalLinks.map((link, idx) => (\n <li key={idx}>\n <Pressable href={link.href} className=\"hover:text-primary\">\n {link.name}\n </Pressable>\n </li>\n ))}\n </ul>\n </div>\n </footer>\n </div>\n </section>\n );\n}\n"]}