Skip to content

Commit da93ac2

Browse files
committed
feat: add social links configuration and footer component
1 parent bd26789 commit da93ac2

File tree

5 files changed

+133
-6
lines changed

5 files changed

+133
-6
lines changed

explainer.config.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,11 @@ export default defineExplainerConfig({
6262
label: 'Blog',
6363
href: '/blog',
6464
},
65-
]
65+
],
66+
social: {
67+
github: {
68+
href: 'https://github.com/LeadcodeDev/explainer',
69+
icon: 'mdi:github',
70+
},
71+
}
6672
})
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
const navigation = {
2+
main: [
3+
{ name: 'About', href: '#' },
4+
{ name: 'Blog', href: '#' },
5+
{ name: 'Jobs', href: '#' },
6+
{ name: 'Press', href: '#' },
7+
{ name: 'Accessibility', href: '#' },
8+
{ name: 'Partners', href: '#' },
9+
],
10+
social: [
11+
{
12+
name: 'Facebook',
13+
href: '#',
14+
icon: (props) => (
15+
<svg fill="currentColor" viewBox="0 0 24 24" {...props}>
16+
<path
17+
fillRule="evenodd"
18+
d="M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.878v-6.987h-2.54V12h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.89h-2.33v6.988C18.343 21.128 22 16.991 22 12z"
19+
clipRule="evenodd"
20+
/>
21+
</svg>
22+
),
23+
},
24+
{
25+
name: 'Instagram',
26+
href: '#',
27+
icon: (props) => (
28+
<svg fill="currentColor" viewBox="0 0 24 24" {...props}>
29+
<path
30+
fillRule="evenodd"
31+
d="M12.315 2c2.43 0 2.784.013 3.808.06 1.064.049 1.791.218 2.427.465a4.902 4.902 0 011.772 1.153 4.902 4.902 0 011.153 1.772c.247.636.416 1.363.465 2.427.048 1.067.06 1.407.06 4.123v.08c0 2.643-.012 2.987-.06 4.043-.049 1.064-.218 1.791-.465 2.427a4.902 4.902 0 01-1.153 1.772 4.902 4.902 0 01-1.772 1.153c-.636.247-1.363.416-2.427.465-1.067.048-1.407.06-4.123.06h-.08c-2.643 0-2.987-.012-4.043-.06-1.064-.049-1.791-.218-2.427-.465a4.902 4.902 0 01-1.772-1.153 4.902 4.902 0 01-1.153-1.772c-.247-.636-.416-1.363-.465-2.427-.047-1.024-.06-1.379-.06-3.808v-.63c0-2.43.013-2.784.06-3.808.049-1.064.218-1.791.465-2.427a4.902 4.902 0 011.153-1.772A4.902 4.902 0 015.45 2.525c.636-.247 1.363-.416 2.427-.465C8.901 2.013 9.256 2 11.685 2h.63zm-.081 1.802h-.468c-2.456 0-2.784.011-3.807.058-.975.045-1.504.207-1.857.344-.467.182-.8.398-1.15.748-.35.35-.566.683-.748 1.15-.137.353-.3.882-.344 1.857-.047 1.023-.058 1.351-.058 3.807v.468c0 2.456.011 2.784.058 3.807.045.975.207 1.504.344 1.857.182.466.399.8.748 1.15.35.35.683.566 1.15.748.353.137.882.3 1.857.344 1.054.048 1.37.058 4.041.058h.08c2.597 0 2.917-.01 3.96-.058.976-.045 1.505-.207 1.858-.344.466-.182.8-.398 1.15-.748.35-.35.566-.683.748-1.15.137-.353.3-.882.344-1.857.048-1.055.058-1.37.058-4.041v-.08c0-2.597-.01-2.917-.058-3.96-.045-.976-.207-1.505-.344-1.858a3.097 3.097 0 00-.748-1.15 3.098 3.098 0 00-1.15-.748c-.353-.137-.882-.3-1.857-.344-1.023-.047-1.351-.058-3.807-.058zM12 6.865a5.135 5.135 0 110 10.27 5.135 5.135 0 010-10.27zm0 1.802a3.333 3.333 0 100 6.666 3.333 3.333 0 000-6.666zm5.338-3.205a1.2 1.2 0 110 2.4 1.2 1.2 0 010-2.4z"
32+
clipRule="evenodd"
33+
/>
34+
</svg>
35+
),
36+
},
37+
{
38+
name: 'X',
39+
href: '#',
40+
icon: (props) => (
41+
<svg fill="currentColor" viewBox="0 0 24 24" {...props}>
42+
<path d="M13.6823 10.6218L20.2391 3H18.6854L12.9921 9.61788L8.44486 3H3.2002L10.0765 13.0074L3.2002 21H4.75404L10.7663 14.0113L15.5685 21H20.8131L13.6819 10.6218H13.6823ZM11.5541 13.0956L10.8574 12.0991L5.31391 4.16971H7.70053L12.1742 10.5689L12.8709 11.5655L18.6861 19.8835H16.2995L11.5541 13.096V13.0956Z" />
43+
</svg>
44+
),
45+
},
46+
{
47+
name: 'GitHub',
48+
href: '#',
49+
icon: (props) => (
50+
<svg fill="currentColor" viewBox="0 0 24 24" {...props}>
51+
<path
52+
fillRule="evenodd"
53+
d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
54+
clipRule="evenodd"
55+
/>
56+
</svg>
57+
),
58+
},
59+
{
60+
name: 'YouTube',
61+
href: '#',
62+
icon: (props) => (
63+
<svg fill="currentColor" viewBox="0 0 24 24" {...props}>
64+
<path
65+
fillRule="evenodd"
66+
d="M19.812 5.418c.861.23 1.538.907 1.768 1.768C21.998 8.746 22 12 22 12s0 3.255-.418 4.814a2.504 2.504 0 0 1-1.768 1.768c-1.56.419-7.814.419-7.814.419s-6.255 0-7.814-.419a2.505 2.505 0 0 1-1.768-1.768C2 15.255 2 12 2 12s0-3.255.417-4.814a2.507 2.507 0 0 1 1.768-1.768C5.744 5 11.998 5 11.998 5s6.255 0 7.814.418ZM15.194 12 10 15V9l5.194 3Z"
67+
clipRule="evenodd"
68+
/>
69+
</svg>
70+
),
71+
},
72+
],
73+
}
74+
75+
import { Icon } from '@iconify/react'
76+
import config from 'explainer.config'
77+
78+
export default function Footer() {
79+
return (
80+
<footer className="bg-white">
81+
<div className="mx-auto max-w-7xl overflow-hidden px-6 py-10 lg:px-8">
82+
<div className="mt-16 flex justify-center gap-x-10">
83+
{Object.entries(config.social).map(([key, item]) => (
84+
<a
85+
key={key}
86+
href={item.href}
87+
target="_blank"
88+
rel="noopener noreferrer"
89+
className="text-gray-600 hover:text-gray-800"
90+
>
91+
<span className="sr-only">{key}</span>
92+
<Icon icon={item.icon} aria-hidden="true" className="size-6" />
93+
</a>
94+
))}
95+
</div>
96+
<p className="mt-10 text-center text-sm/6 text-gray-600">&copy; 2024 Your Company, Inc. All rights reserved.</p>
97+
</div>
98+
</footer>
99+
)
100+
}

src/lib/layouts/BaseLayout.astro

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
---
2+
import Footer from "@/components/elements/footer";
23
import Navbar from "@/components/elements/navbar";
34
import config from "../../../explainer.config";
45
import "../../assets/css/global.css";
@@ -9,7 +10,7 @@ const { title = config.meta.title } = Astro.props;
910
<!doctype html>
1011
<html lang="en">
1112
<head>
12-
<meta charset="UTF-8" />
13+
<meta charSet="UTF-8" />
1314
<meta name="viewport" content="width=device-width" />
1415

1516
<title>{title}</title>
@@ -27,10 +28,11 @@ const { title = config.meta.title } = Astro.props;
2728
<meta property="og:image:width" content="1200" />
2829
<meta property="og:image:height" content="630" />
2930
</head>
30-
<body class="relative min-h-screen">
31-
<div class="min-h-screen flex flex-col">
31+
<body className="relative min-h-screen">
32+
<div className="min-h-screen flex flex-col">
3233
<Navbar client:only />
3334
<slot />
35+
<Footer client:only />
3436
</div>
3537
</body>
3638
</html>

src/lib/layouts/Layout.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import BaseLayout from "./BaseLayout.astro";
55
---
66

77
<BaseLayout>
8-
<div class="relative">
8+
<div className="relative">
99
<Separator accent />
1010
<slot />
1111
</div>

src/lib/utils.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,24 @@ type ExplainerBlog = {
4646
}
4747
}
4848

49+
const SocialLink = {
50+
github: 'Github',
51+
twitter: 'Twitter',
52+
linkedin: 'LinkedIn',
53+
facebook: 'Facebook',
54+
instagram: 'Instagram',
55+
youtube: 'YouTube',
56+
tiktok: 'TikTok',
57+
twitch: 'Twitch',
58+
} as const
59+
60+
type ExplainerSocial = {
61+
[key in keyof typeof SocialLink]?: {
62+
href: string
63+
icon: string
64+
}
65+
}
66+
4967
type ExplainerConfig = {
5068
meta: ExplainerMeta
5169
docs: { [key in CollectionKey]?: ExplainerDocs }
@@ -55,7 +73,8 @@ type ExplainerConfig = {
5573
documentation?: string
5674
},
5775
navbar: NavbarCollection[],
58-
blog: ExplainerBlog
76+
blog: ExplainerBlog,
77+
social: ExplainerSocial
5978
}
6079

6180
export function defineExplainerConfig(config: ExplainerConfig) {

0 commit comments

Comments
 (0)