118 lines
5.2 KiB
TypeScript
118 lines
5.2 KiB
TypeScript
|
|
import { Link } from "@/i18n/navigation";
|
||
|
|
import { getTranslations } from "next-intl/server";
|
||
|
|
function WeChatIcon({ size = 16 }: { size?: number }) {
|
||
|
|
return (
|
||
|
|
<svg width={size} height={size} viewBox="0 0 24 24" fill="currentColor">
|
||
|
|
<path d="M8.691 2.188C3.891 2.188 0 5.476 0 9.53c0 2.212 1.17 4.203 3.002 5.55a.59.59 0 0 1 .213.665l-.39 1.48c-.019.07-.048.141-.048.213 0 .163.13.295.29.295a.326.326 0 0 0 .167-.054l1.903-1.114a.864.864 0 0 1 .717-.098 10.16 10.16 0 0 0 2.837.403c.276 0 .543-.027.811-.05a6.329 6.329 0 0 1-.235-1.69c0-3.542 3.276-6.426 7.315-6.426.348 0 .688.029 1.023.074C16.088 4.68 12.727 2.189 8.691 2.189zM5.785 5.991a1.09 1.09 0 0 1 1.083 1.09 1.09 1.09 0 0 1-1.083 1.09A1.09 1.09 0 0 1 4.7 7.08a1.09 1.09 0 0 1 1.085-1.09zm5.88 0a1.09 1.09 0 0 1 1.083 1.09 1.09 1.09 0 0 1-1.083 1.09 1.09 1.09 0 0 1-1.085-1.09 1.09 1.09 0 0 1 1.085-1.09zm2.927 3.525c-3.508 0-6.36 2.51-6.36 5.596 0 3.088 2.852 5.596 6.36 5.596a7.5 7.5 0 0 0 2.36-.382.636.636 0 0 1 .527.074l1.402.822a.244.244 0 0 0 .122.04.214.214 0 0 0 .213-.217c0-.053-.02-.105-.035-.156l-.286-1.09a.432.432 0 0 1 .156-.488c1.352-.998 2.22-2.465 2.22-4.1 0-3.087-2.853-5.596-6.36-5.596h-.319zm-1.834 2.89a.905.905 0 0 1 .9.907.905.905 0 0 1-.9.906.905.905 0 0 1-.902-.906.905.905 0 0 1 .902-.906zm3.99 0a.905.905 0 0 1 .9.907.905.905 0 0 1-.9.906.905.905 0 0 1-.902-.906.905.905 0 0 1 .901-.906z" />
|
||
|
|
</svg>
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
function LinkedInIcon({ size = 16 }: { size?: number }) {
|
||
|
|
return (
|
||
|
|
<svg width={size} height={size} viewBox="0 0 24 24" fill="currentColor">
|
||
|
|
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" />
|
||
|
|
</svg>
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
function XIcon({ size = 16 }: { size?: number }) {
|
||
|
|
return (
|
||
|
|
<svg width={size} height={size} viewBox="0 0 24 24" fill="currentColor">
|
||
|
|
<path d="M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z" />
|
||
|
|
</svg>
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
function MailIcon({ size = 16 }: { size?: number }) {
|
||
|
|
return (
|
||
|
|
<svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round">
|
||
|
|
<rect x="2" y="4" width="20" height="16" rx="2" />
|
||
|
|
<path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7" />
|
||
|
|
</svg>
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
const socialIcons = [
|
||
|
|
{ icon: WeChatIcon, label: "WeChat" },
|
||
|
|
{ icon: LinkedInIcon, label: "LinkedIn" },
|
||
|
|
{ icon: XIcon, label: "X" },
|
||
|
|
{ icon: MailIcon, label: "Email" },
|
||
|
|
];
|
||
|
|
|
||
|
|
export default async function Footer() {
|
||
|
|
const t = await getTranslations("footer");
|
||
|
|
const th = await getTranslations("header");
|
||
|
|
|
||
|
|
const pageLinks = [
|
||
|
|
{ label: th("home"), href: "/" as const },
|
||
|
|
{ label: th("tech"), href: "/tech" as const },
|
||
|
|
{ label: th("solutions"), href: "/solutions" as const },
|
||
|
|
{ label: th("about"), href: "/about" as const },
|
||
|
|
];
|
||
|
|
|
||
|
|
const businessLinks = [
|
||
|
|
{ label: t("bizDeSpace"), href: "#" as const },
|
||
|
|
{ label: t("bizRWA"), href: "#" as const },
|
||
|
|
{ label: t("bizQuant"), href: "#" as const },
|
||
|
|
];
|
||
|
|
|
||
|
|
return (
|
||
|
|
<footer className="footer">
|
||
|
|
<div className="footer-main">
|
||
|
|
<div className="footer-brand">
|
||
|
|
{/* eslint-disable-next-line @next/next/no-img-element */}
|
||
|
|
<img
|
||
|
|
src="/logo.png"
|
||
|
|
alt="DESUN SINGULARITY"
|
||
|
|
width={160}
|
||
|
|
height={46}
|
||
|
|
className="footer-logo-img"
|
||
|
|
/>
|
||
|
|
<p className="footer-tagline">{t("tagline")}</p>
|
||
|
|
<div className="footer-contact">
|
||
|
|
<span className="footer-contact-label">{t("contactLabel")}</span>
|
||
|
|
<div className="footer-social">
|
||
|
|
{socialIcons.map((item) => (
|
||
|
|
<a
|
||
|
|
key={item.label}
|
||
|
|
href="#"
|
||
|
|
className="footer-social-icon"
|
||
|
|
aria-label={item.label}
|
||
|
|
>
|
||
|
|
<item.icon size={16} />
|
||
|
|
</a>
|
||
|
|
))}
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<div className="footer-links">
|
||
|
|
<div className="footer-col">
|
||
|
|
<span className="footer-col-title">{t("pagesTitle")}</span>
|
||
|
|
{pageLinks.map((link) => (
|
||
|
|
<Link key={link.href} href={link.href} className="footer-link">
|
||
|
|
{link.label}
|
||
|
|
</Link>
|
||
|
|
))}
|
||
|
|
</div>
|
||
|
|
<div className="footer-col">
|
||
|
|
<span className="footer-col-title">{t("businessTitle")}</span>
|
||
|
|
{businessLinks.map((link) => (
|
||
|
|
<a key={link.label} href={link.href} className="footer-link">
|
||
|
|
{link.label}
|
||
|
|
</a>
|
||
|
|
))}
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<div className="footer-divider" />
|
||
|
|
|
||
|
|
<div className="footer-bottom">
|
||
|
|
<span className="footer-copyright">{t("copyright")}</span>
|
||
|
|
</div>
|
||
|
|
</footer>
|
||
|
|
);
|
||
|
|
}
|