blob: 06ed38b1a54ec85b85338f33af4b4315a77170c6 [file] [log] [blame]
import type { Metadata } from "next";
import { GeistSans } from "geist/font/sans";
import { GeistMono } from "geist/font/mono";
import localFont from "next/font/local";
import "./globals.css";
import { Button } from "@/components/ui/button";
import Link from "next/link";
import { MonitorIcon, WifiIcon, BluetoothIcon, Volume2Icon } from "lucide-react";
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip";
import { Separator } from "@/components/ui/separator";
const nf = localFont({
src: "/fonts/SymbolsNerdFontMono-Regular.ttf",
variable: "--font-nf"
});
export const metadata: Metadata = {
title: "System Settings",
description: "Main system settings page",
};
const props = { color: "#FFFFFF" };
const pages: {link: string, icon: JSX.Element, name: string, tooltip: string, colour: string}[] = [
{
name: "Wifi",
link: "/wifi",
icon: <WifiIcon {...props} />,
tooltip: "Configure WiFi Networks",
colour: "blue"// Tailwind's blue-500
},
{
name: "Bluetooth",
link: "/bluetooth",
icon: <BluetoothIcon {...props} />,
tooltip: "Configure and pair bluetooth devices",
colour: "blue"
},
{
name: "Sound",
link: "/sound",
icon: <Volume2Icon {...props} />,
tooltip: "Manage inputs and outputs",
colour: "red"
},
// {
// name: "VPN",
// link: "/bluetooth",
// icon: ...
// tooltip: "Configure and pair bluetooth devices"
// },
{
name: "Display",
link: "/display",
icon: <MonitorIcon {...props} />,
tooltip: "Modify the layout of your monitors",
colour: "green"
}
];
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<body
className={`${GeistSans.variable} ${GeistMono.variable} ${nf.variable} antialiased`}
>
<div className={"grid grid-cols-2 h-screen w-screen font-sans"}>
<nav className={"md:w-80 w-fit h-full bg-gray-100 flex flex-col gap-2 p-4 transition ease-in-out duration-75"}>
<div className={"flex flex-row"}>
{/*
For some reason, in dev mode (haven't tried prod), tailwind does not
seem to be able to generate the classes for the colours.
This is a shitty hack that should be removed later.
*/}
<p className="bg-red-500">R</p>
<p className="bg-green-500">G</p>
<p className="bg-blue-500">B</p>
</div>
<div className={"w-full bg-white flex flex-col p-1 rounded-md"}>
{ pages.map((page, index) => (
<TooltipProvider key={index}>
<Tooltip>
<TooltipTrigger>
<Link href={page.link}>
<div className="w-full flex flex-row items-center justify-start space-x-4 h-12 px-4">
<div className={`w-8 h-8 rounded-sm bg-${page.colour}-500 flex items-center justify-center`}>
{page.icon}
</div>
<span className="text-lg text-left text-black">{page.name}</span>
</div>
</Link>
{ (index + 1 < pages.length) && <Separator /> }
</TooltipTrigger>
<TooltipContent>{page.tooltip}</TooltipContent>
</Tooltip></TooltipProvider>
))}
</div>
</nav>
<main>{children}</main>
</div>
</body>
</html>
);
}