- Accordion
- Avatar
- Badge
- Breadcrumb
- Button
- Calendar
- Checkbox
- Combobox
- Container
- CurrencyInput
- DistributionSlider
- Drawer
- Dropdown
- Grid
- Heading
- Image
- Input
- InputGroup
- Label
- Logo
- MapPin
- Modal
- NativeSelect
- NumberInput
- OtpInput
- PhoneInput
- Popover
- Progress
- PropertyCalendar
- RadioGroup
- RadioGroupCards
- ResponsiveModal
- ScrollArea
- SearchBar
- SearchBarFallback
- SearchInput
- Select
- Separator
- Spinner
- Switch
- Tabs
- Text
- Textarea
- Toast
- Toggle
- ToggleGroup
- Tooltip
Footer
Site footer with social media bar and multi-column link grid with alternating column widths
pnpm add @wandercom/design-system-web
The Footer component provides a comprehensive site footer with social media links, multi-column navigation, and branding. It's designed to work seamlessly with the Grid system and supports both standard WanderOS and individual property sites through its variant system.
import { Footer } from '@wandercom/design-system-web/blocks/footer';
import { Logo } from '@wandercom/design-system-web/ui/logo';
export function Example() {
return (
<Footer
topBar={{
title: 'Follow us',
links: [
{
label: 'X (Twitter)',
href: 'https://x.com/wander',
isExternal: true,
},
],
}}
sections={[
{
title: 'Company',
links: [{ label: 'About', href: '/about' }],
},
]}
logo={<Logo className="h-8 w-auto text-primary" />}
/>
);
}The default footer variant includes trademark and copyright sections at the bottom, along with social media links and multi-column navigation.
<Footer
topBar={{
title: 'Follow us',
links: [
{
label: 'X (Twitter)',
href: 'https://x.com/wander',
isExternal: true,
},
{
label: 'Instagram',
href: 'https://instagram.com/wander',
isExternal: true,
},
{
label: 'TikTok',
href: 'https://tiktok.com/@wander',
isExternal: true,
},
{
label: 'LinkedIn',
href: 'https://linkedin.com/company/wander',
isExternal: true,
},
{
label: 'YouTube',
href: 'https://youtube.com/@wander',
isExternal: true,
},
],
}}
sections={[
{
title: 'Company',
links: [
{ label: 'About', href: '/about' },
{ label: 'Blog', href: '/blog' },
{
label: 'Contact',
key: 'contact',
onClick: () =>
toast.success({
label: "Copied to clipboard",
description: "Contact information copied",
}),
},
{ label: 'Careers', href: '/careers' },
{ label: 'Store', href: '/store' },
],
},
{
title: 'Resources',
links: [
{ label: 'Locations', href: '/locations' },
{ label: 'Licensing', href: '/licensing' },
{ label: 'Terms', href: '/terms' },
{ label: 'Privacy', href: '/privacy' },
{ label: 'Sitemap', href: '/sitemap' },
{ label: 'Events', href: '/events' },
],
},
{
title: 'Hosts',
links: [
{ label: 'WanderOS', href: '/sites' },
{ label: 'Operate with us', href: '/operate' },
{ label: 'List with us', href: '/listed' },
],
},
{
title: 'Partners',
links: [
{ label: 'Ambassadors', href: '/ambassadors' },
{ label: 'Travel Agents', href: '/travelagents' },
],
},
]}
logo={<Logo className="h-8 w-auto text-primary" />}
/>The Footer component supports two variants optimized for different use cases.
The default variant is designed for main Wander marketing and application sites. It features trademark and copyright sections at the bottom, and uses an alternating column width pattern for visual interest.
The Sites variant is optimized for individual property site footers. It replaces the trademark/copyright section with "Powered by WanderOS" branding and uses a custom 2-2-4 column span pattern for sections.
<Footer
variant="sites"
logo={<WanderOSLogo className="h-10 w-auto text-primary" />}
topBar={{
title: 'Follow us',
links: [
{
label: 'X (Twitter)',
href: 'https://x.com/wander',
isExternal: true,
},
{
label: 'Instagram',
href: 'https://instagram.com/wander',
isExternal: true,
},
{
label: 'TikTok',
href: 'https://tiktok.com/@wander',
isExternal: true,
},
{
label: 'LinkedIn',
href: 'https://linkedin.com/company/wander',
isExternal: true,
},
{
label: 'YouTube',
href: 'https://youtube.com/@wander',
isExternal: true,
},
],
}}
sections={[
{
title: 'Company',
links: [
{ label: 'About', href: '/about' },
{ label: 'List with us', href: '/list' },
{ label: 'Contact', href: '/contact' },
{ label: 'Property manager portal', href: '/property-manager' },
{ label: 'Owner portal', href: '/owner-portal' },
],
},
{
title: 'Resources',
links: [
{
label: 'Activities in Northern Kentucky',
href: '/northern-kentucky',
},
{ label: 'Activities in Nashville', href: '/nashville' },
{ label: 'Sitemap', href: '/sitemap' },
{ label: 'Terms of service', href: '/terms' },
{ label: 'Privacy policy', href: '/privacy' },
],
},
{
title: 'Contact us',
links: [
{ label: 'Send us a message', href: '/message' },
{
label: 'info@downtimevacationrentals.com',
href: 'mailto:info@downtimevacationrentals.com',
},
{ label: '603-770-9939', href: 'tel:6037709939' },
{
label: '219 Surfside DR, Myrtle Beach, South Carolina',
href: 'https://maps.google.com/?q=219+Surfside+DR,+Myrtle+Beach,+SC',
},
],
},
]}
/>The Footer component supports two types of links to accommodate different interaction patterns.
Most footer links use the href prop to navigate to pages. For external links, set isExternal: true to add proper security attributes.
{ label: 'Privacy', href: '/privacy' }
{ label: 'Twitter', href: 'https://twitter.com/wander', isExternal: true }For links that trigger actions instead of navigation (like copying to clipboard), use the onClick pattern. When using onClick, you must provide a unique key prop.
{
label: 'Contact',
key: 'contact',
onClick: () => toast.success({ label: 'Copied!' })
}The footer uses a responsive Grid layout with different patterns for each variant:
Default variant:
- Mobile (base): All sections span full width and stack vertically
- Tablet (md): Sections alternate between 2 and 4 columns for visual rhythm (1st: 2 cols, 2nd: 4 cols, 3rd: 2 cols, 4th: 4 cols)
- Desktop (lg): All sections span 2 columns within a 12-column grid
Sites variant:
- Custom column span pattern: 2-2-4 (first section: 2 cols, second: 2 cols, third: 4 cols)
The logo section always spans full width on mobile and 4 columns on desktop, remaining unaffected by section span patterns.