master
1---
2import { footerConfig, profileConfig } from '@/config';
3
4const currentYear = new Date().getFullYear();
5---
6
7<footer class="mt-auto shrink-0" id="page-footer">
8 {
9 footerConfig.columns && (
10 <div class="mx-auto mt-4 mb-8 flex w-full max-w-(--breakpoint-xl) flex-wrap justify-between px-8 md:px-12 xl:px-8">
11 {footerConfig.columns.map((col) => (
12 <nav class="grid grid-cols-1 gap-4">
13 <ul class="menu">
14 <li class="menu-title">
15 <h3 class="font-bold uppercase">{col.title}</h3>
16 </li>
17 {col.items.map((item) => (
18 <li>
19 <a href={item.link} {...(item.blank ? { target: '_blank' } : {})}>
20 {item.text}
21 </a>
22 </li>
23 ))}
24 </ul>
25 </nav>
26 ))}
27 </div>
28 )
29 }
30</footer>
31<footer
32 class="footer border-base-300 bg-base-200 text-base-content flex flex-col justify-between border-t px-10 py-4 text-lg md:flex-row"
33 id="footer"
34>
35 <aside class="items-center">
36 <p>
37 © {footerConfig.copyrightYear}{
38 footerConfig.copyrightYear < currentYear && `-${currentYear}`
39 }
40 <a href="/about/" class="font-bold">{profileConfig.name}</a>
41 </p>
42 </aside>
43 <nav class="flex flex-row">
44 {
45 footerConfig.rightItems.map((item) => (
46 <span>
47 {item.map((c) => {
48 if (typeof c === 'string') return <span>{c}</span>;
49 else if ('link' in c)
50 return (
51 <a href={c.link} class={c.class || ''} target="_blank">
52 {c.text}
53 </a>
54 );
55 else return <span class:list={c.class || ''}>{c.text}</span>;
56 })}
57 </span>
58 ))
59 }
60 </nav>
61</footer>
62
63<style>
64 a {
65 @apply duration-150;
66
67 &:hover {
68 color: var(--color-primary);
69 }
70 }
71</style>