"use client"; import { motion } from "framer-motion"; import { brand } from "~/lib/branding"; import { useAppearance } from "~/components/providers/appearance-provider"; import { cn } from "~/lib/utils"; interface LogoProps { className?: string; size?: "sm" | "md" | "lg" | "xl" | "icon"; animated?: boolean; } function splitLogoText(logoText: string) { const voiceIndex = logoText.toLowerCase().indexOf("voice"); if (voiceIndex > 0) { return [logoText.slice(0, voiceIndex), logoText.slice(voiceIndex)] as const; } return [ logoText.slice(0, Math.ceil(logoText.length / 2)), logoText.slice(Math.ceil(logoText.length / 2)), ] as const; } export function Logo({ className, size = "md", animated = true }: LogoProps) { const appearance = useAppearance(); const logoText = appearance.brandLogoText || brand.logoText; const icon = appearance.brandIcon || brand.icon; const [logoPrefix, logoSuffix] = splitLogoText(logoText); const sizeClasses = { sm: "text-base", md: "text-xl", lg: "text-3xl", xl: "text-5xl", icon: "text-2xl", }; if (!animated) { return ( ); } return ( {icon} {size !== "icon" && ( <> {logoPrefix} {logoSuffix} > )} ); } function LogoContent({ className, size, sizeClasses, logoPrefix, logoSuffix, icon, }: { className?: string; size: "sm" | "md" | "lg" | "xl" | "icon"; sizeClasses: Record; logoPrefix: string; logoSuffix: string; icon: string; }) { return ( {icon} {size !== "icon" && ( <> {logoPrefix} {logoSuffix} > )} ); }