simple-links/src/app/page.tsx

152 lines
4.8 KiB
TypeScript
Raw Normal View History

import { library } from "@fortawesome/fontawesome-svg-core";
import { fab } from "@fortawesome/free-brands-svg-icons";
import { far } from "@fortawesome/free-regular-svg-icons";
import { fas } from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
2023-07-02 11:02:11 +00:00
import Image from "next/image";
import Config from "../../config.json";
2023-07-01 21:08:39 +00:00
library.add(fab, far, fas); // Loading in the icons from FontAwesome
2023-07-01 20:43:53 +00:00
export default function Home() {
2023-07-10 04:06:28 +00:00
const {
background,
infoCard,
avatar,
name,
links,
2023-07-12 08:40:24 +00:00
socialLinks,
2023-07-10 04:06:28 +00:00
options,
description,
2023-07-12 08:40:24 +00:00
theme,
2023-07-10 04:06:28 +00:00
} = Config; // All of the settings pulled from the config file
2023-07-10 02:54:12 +00:00
2023-07-10 04:06:28 +00:00
// Theme colors to use when using the selected theme
// all used colors are from TailwindCSS
const themeColors: {
[key: string]: {
background: string;
textColor: string;
buttonTextColor: string;
};
} = {
dark: {
background: "bg-neutral-900",
textColor: "text-white",
buttonTextColor: "text-white",
},
light: {
background: "bg-white",
textColor: "text-black",
buttonTextColor: "text-white",
},
};
2023-07-10 04:15:39 +00:00
const selectedTheme = themeColors[theme] || themeColors.dark; // The theme to use (fallback of dark)
2023-07-09 06:19:08 +00:00
2023-07-10 04:06:28 +00:00
return (
<>
<main
className={`flex flex-col items-center justify-center w-screen h-screen bg-neutral-900 ${selectedTheme.textColor}`}
>
<div
className={`absolute inset-0 filter w-screen h-screen ${
background.blur && "blur-sm"
}`}
style={
background.showBackground
? {
zIndex: 0,
background: background.darken.enabled
? `linear-gradient(rgba(0, 0, 0, ${background.darken.amount}), rgba(0, 0, 0, ${background.darken.amount})),
2023-07-09 06:19:08 +00:00
url(${background.backgroundImage})`
2023-07-10 04:06:28 +00:00
: `url(${background.backgroundImage})`,
backgroundSize: "cover",
backgroundBlendMode: "multiply",
}
: {}
}
></div>
<div
className={`${selectedTheme.background} rounded-lg text-center shadow-lg`}
style={{
zIndex: 1,
opacity: infoCard.transparency,
}}
>
<div className="m-5">
<div className="flex flex-col items-center justify-center">
<Image
src={avatar}
alt="Avatar"
width={120}
height={120}
className="rounded-full"
/>
<div className="mb-3"></div>
<h1 className="text-4xl font-bold">{name}</h1>
</div>
2023-07-01 21:08:39 +00:00
2023-07-12 08:40:24 +00:00
{/* Description of user */}
2023-07-10 04:06:28 +00:00
<p className="mt-4 text-lg max-w-lg">{description}</p>
2023-07-01 20:43:53 +00:00
2023-07-12 08:40:24 +00:00
{/* Links (Buttons) */}
2023-07-10 04:06:28 +00:00
<div className="flex flex-col items-center">
2023-07-12 08:41:04 +00:00
{links &&
links.map((link, index) => {
const icons: any = link.icon?.split(" ") ?? [];
2023-07-12 08:41:04 +00:00
return (
<a
key={index}
href={link.url}
target="_blank"
rel="noopener noreferrer"
className={`flex flex-row items-center justify-center mt-4 px-4 w-60 py-2 rounded
2023-07-12 08:40:24 +00:00
${selectedTheme.buttonTextColor} ${link.color.normal} hover:brightness-75 transition gap-2`}
2023-07-12 08:41:04 +00:00
>
{link.icon && <FontAwesomeIcon icon={icons} />}
<p>{link.title}</p>
</a>
);
})}
2023-07-10 04:06:28 +00:00
</div>
2023-07-12 08:40:24 +00:00
{/* Social Links */}
<div className="flex items-center justify-center gap-3 mt-4">
{socialLinks &&
socialLinks.map((link, index) => {
const icons: any = link.icon?.split(" ") ?? [];
return (
<a
key={index}
href={link.url}
target="_blank"
rel="noopener noreferrer"
className={`hover:brightness-75 transition`}
>
{link.icon && <FontAwesomeIcon size="2xl" icon={icons} />}
</a>
);
})}
</div>
2023-07-10 04:06:28 +00:00
</div>
</div>
2023-07-12 08:40:24 +00:00
{/* Footer */}
2023-07-10 04:06:28 +00:00
<div className="absolute bottom-0 right-0 mb-5 mr-5">
{options.showSourceLink && (
<a
href="https://git.fascinated.cc/Fascinated/simple-links"
target="_blank"
className="mt-5 text-blue-300"
>
Website Source
</a>
)}
</div>
</main>
</>
);
2023-07-01 20:43:53 +00:00
}