Files
www_indaba/src/components/footer.tsx
2025-06-05 18:15:52 +02:00

171 lines
5.4 KiB
TypeScript

import { PlusGrid, PlusGridItem, PlusGridRow } from '@/components/plus-grid'
import { Button } from './button'
import { Container } from './container'
import { Gradient } from './gradient'
import { Link } from './link'
import { Logo } from './logo'
import { Subheading } from './text'
function SitemapHeading({ children }: { children: React.ReactNode }) {
return <h3 className="text-base font-semibold text-white">{children}</h3>
}
function SitemapLinks({ children }: { children: React.ReactNode }) {
return <ul className="mt-6 space-y-4 text-sm/6">{children}</ul>
}
function SitemapLink(props: React.ComponentPropsWithoutRef<typeof Link>) {
return (
<li>
<Link
{...props}
className="font-medium text-white data-hover:text-white"
/>
</li>
)
}
function Sitemap() {
return (
<>
<div>
<SitemapHeading>Product</SitemapHeading>
<SitemapLinks>
<SitemapLink href="/pricing">Pricing</SitemapLink>
<SitemapLink href="#">Analysis</SitemapLink>
<SitemapLink href="#">API</SitemapLink>
</SitemapLinks>
</div>
<div>
<SitemapHeading>Company</SitemapHeading>
<SitemapLinks>
<SitemapLink href="#">Careers</SitemapLink>
<SitemapLink href="/blog">Blog</SitemapLink>
<SitemapLink href="/company">Company</SitemapLink>
</SitemapLinks>
</div>
<div>
<SitemapHeading>Support</SitemapHeading>
<SitemapLinks>
<SitemapLink href="#">Help center</SitemapLink>
<SitemapLink href="#">Community</SitemapLink>
</SitemapLinks>
</div>
<div>
<SitemapHeading>Company</SitemapHeading>
<SitemapLinks>
<SitemapLink href="#">Terms of service</SitemapLink>
<SitemapLink href="#">Privacy policy</SitemapLink>
</SitemapLinks>
</div>
</>
)
}
function SocialIconX(props: React.ComponentPropsWithoutRef<'svg'>) {
return (
<svg viewBox="0 0 16 16" fill="currentColor" {...props}>
<path d="M12.6 0h2.454l-5.36 6.778L16 16h-4.937l-3.867-5.594L2.771 16H.316l5.733-7.25L0 0h5.063l3.495 5.114L12.6 0zm-.86 14.376h1.36L4.323 1.539H2.865l8.875 12.837z" />
</svg>
)
}
function SocialIconFacebook(props: React.ComponentPropsWithoutRef<'svg'>) {
return (
<svg viewBox="0 0 16 16" fill="currentColor" {...props}>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M16 8.05C16 3.603 12.418 0 8 0S0 3.604 0 8.05c0 4.016 2.926 7.346 6.75 7.95v-5.624H4.718V8.05H6.75V6.276c0-2.017 1.194-3.131 3.022-3.131.875 0 1.79.157 1.79.157v1.98h-1.008c-.994 0-1.304.62-1.304 1.257v1.51h2.219l-.355 2.326H9.25V16c3.824-.604 6.75-3.934 6.75-7.95z"
/>
</svg>
)
}
function SocialIconLinkedIn(props: React.ComponentPropsWithoutRef<'svg'>) {
return (
<svg viewBox="0 0 16 16" fill="currentColor" {...props}>
<path d="M14.82 0H1.18A1.169 1.169 0 000 1.154v13.694A1.168 1.168 0 001.18 16h13.64A1.17 1.17 0 0016 14.845V1.15A1.171 1.171 0 0014.82 0zM4.744 13.64H2.369V5.996h2.375v7.644zm-1.18-8.684a1.377 1.377 0 11.52-.106 1.377 1.377 0 01-.527.103l.007.003zm10.075 8.683h-2.375V9.921c0-.885-.015-2.025-1.234-2.025-1.218 0-1.425.966-1.425 1.968v3.775H6.233V5.997H8.51v1.05h.032c.317-.601 1.09-1.235 2.246-1.235 2.405-.005 2.851 1.578 2.851 3.63v4.197z" />
</svg>
)
}
function SocialLinks() {
return (
<>
<Link
href="https://facebook.com"
target="_blank"
aria-label="Visit us on Facebook"
className="text-gray-100 data-hover:text-white"
>
<SocialIconFacebook className="size-4" />
</Link>
<Link
href="https://x.com"
target="_blank"
aria-label="Visit us on X"
className="text-gray-100 data-hover:text-white"
>
<SocialIconX className="size-4" />
</Link>
<Link
href="https://linkedin.com"
target="_blank"
aria-label="Visit us on LinkedIn"
className="text-gray-100 data-hover:text-white"
>
<SocialIconLinkedIn className="size-4" />
</Link>
</>
)
}
function Copyright() {
return (
<div className="text-sm/6 text-white">
&copy; {new Date().getFullYear()} Radiant Inc.
</div>
)
}
export function Footer() {
return (
<footer>
<Gradient className="relative pt-8">
<div className="absolute inset-2 rounded-4xl bg-transparent p" />
<Container>
<PlusGrid className="pb-16">
<PlusGridRow>
<div className="grid grid-cols-2 gap-y-10 pb-6 lg:grid-cols-6 lg:gap-8">
<div className="col-span-2 flex">
<PlusGridItem className="pt-6 lg:pb-6">
<Logo className="h-9" />
</PlusGridItem>
</div>
<div className="col-span-2 grid grid-cols-2 gap-x-8 gap-y-12 lg:col-span-4 lg:grid-cols-subgrid lg:pt-6">
<Sitemap />
</div>
</div>
</PlusGridRow>
<PlusGridRow className="flex justify-between">
<div>
<PlusGridItem className="py-3">
<Copyright />
</PlusGridItem>
</div>
<div className="flex">
<PlusGridItem className="flex items-center gap-8 py-3">
<SocialLinks />
</PlusGridItem>
</div>
</PlusGridRow>
</PlusGrid>
</Container>
</Gradient>
</footer>
)
}