Example Footer Layout Component in TypeScript Sources: ** title: Contents style: nestedList # TOC style (nestedList|inlineFirstLevel) minLevel: 1 # Include headings from the specified level maxLevel: 4 # Include headings up to the specified level includeLinks: true # Make headings clickable debugInConsole: false # Print debug info in Obsidian console Overview Code Snippet "use client" import Link from "next/link" import { Logo } from "../atoms/logo" import { Divider } from "./divider" import { Icon, IconName } from "../icons" import { usePathname } from "next/navigation" import { LogoDark } from "../atoms/logo-dark" const menus = [ { name: "Docs", items: [ { name: "Getting Started", href: "/docs/quickstart" }, { name: "Guides", href: "/docs/guides" }, { name: "API", href: "/docs/other/api-reference" } ] }, { name: "Company", items: [ { name: "Effectful", href: "https://www.effectful.co/", blank: true } ] }, { name: "Legal", items: [ { name: "Terms & Conditions", href: "https://www.effectful.co/privacy-cookies", blank: true }, { name: "Privacy Policy", href: "https://www.effectful.co/terms-conditions", blank: true }, { name: "Contact Us", href: "mailto:contact@effectful.co" } ] } ] const socials = [ { name: "GitHub", icon: "github", href: "https://github.com/Effect-TS" }, { name: "Discord", icon: "discord", href: "https://discord.gg/effect-ts" }, { name: "Twitter", icon: "twitter", href: "https://twitter.com/EffectTS_" } ] export const Footer = () => { const pathname = usePathname() const wide = pathname.startsWith("/docs") return ( <div className={pathname === "/" ? "dark" : ""}> <footer className="bg-zinc-50 dark:bg-black text-zinc-700 dark:text-zinc-400 text-sm"> <Divider /> <div className={`w-full ${ wide ? "max-w-screen-2xl" : "max-w-screen-xl" } mx-auto px-4 sm:px-8 lg:px-16 py-24 flex flex-col sm:flex-row gap-10 justify-between`} > <div> <Logo className="hidden dark:block h-7 sm:h-8" /> <LogoDark className="dark:hidden h-7 sm:h-8" /> <p className="leading-relaxed my-6"> MIT Licensed <br /> Copyright © {new Date().getFullYear()} Effectful Technologies Inc. </p> <div className="flex items-center gap-4"> {socials.map(({ name, icon, href }, index) => ( <Link key={index} href={href} className="generic-hover"> <span className="sr-only">{name}</span> <Icon name={icon as IconName} className="h-5 text-zinc-700 dark:text-zinc-400" /> </Link> ))} </div> </div> <div className="flex flex-wrap sm:gap-x-12 gap-y-6 sm:mt-0"> {menus.map(({ name, items }, index) => ( <div key={index} className="w-1/2 sm:w-auto"> <h3 className="text-white mb-4">{name}</h3> <ul className="space-y-2"> {items.map(({ name, href, blank }, index) => ( <li key={index}> <Link href={href} className={`flex items-start ${pathname.startsWith(href) ? "" : "button-hover"}`} target={blank === true ? "_blank" : "_self"} > <span>{name}</span> {href.startsWith("http") && ( <Icon name="arrow-up-right-light" className="h-3 mt-0.5 ml-0.5" /> )} </Link> </li> ))} </ul> </div> ))} </div> </div> </footer> </div> ) } Details About This note is about … See Also JavaScript Map of Content JavaScript Code Hyper Text Markup Language (HTML) Cascading Style Sheets (CSS) React.js Next.js Appendix Note created on 2024-04-15 and last modified on 2024-04-15. Backlinks LIST FROM [[TS - Footer Layout Component Example]] AND -"CHANGELOG" AND -"04-RESOURCES/Code/TypeScript/TS - Footer Layout Component Example" (c) No Clocks, LLC | 2024