Elle yazılmış tek-dosya CSS (sabit koyu tema, ham table/button, window.confirm ile silme onayı) yerine tutarlı bir bileşen sistemi: Card/Table/Badge/Button/ Input/Switch/AlertDialog primitifleri, Hanken Grotesk + JetBrains Mono tipografi çifti, "broadcast/monitör" temalı özel bir renk paleti (camgöbeği accent, ok/warn/err/live durum rengi sözlüğü). Tüm sayfalar (dashboard, kanal detay, segmentler, ayarlar, istatistik, kullanıcılar, login) aynı oturumda taşındı — silme onayları artık gerçek AlertDialog, native confirm() değil. Veri akışı/server action'lar değişmedi, tamamen görsel katman. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
56 lines
1.9 KiB
TypeScript
56 lines
1.9 KiB
TypeScript
import type { Metadata } from "next";
|
||
import { Hanken_Grotesk, JetBrains_Mono } from "next/font/google";
|
||
import "./globals.css";
|
||
import { getSession } from "../lib/auth";
|
||
import { logout } from "./login/actions";
|
||
import { NavLink } from "./components/NavLink";
|
||
import { Button } from "@/components/ui/button";
|
||
|
||
const hankenGrotesk = Hanken_Grotesk({
|
||
subsets: ["latin"],
|
||
variable: "--font-hanken-grotesk",
|
||
display: "swap",
|
||
});
|
||
|
||
const jetbrainsMono = JetBrains_Mono({
|
||
subsets: ["latin"],
|
||
variable: "--font-jetbrains-mono",
|
||
display: "swap",
|
||
});
|
||
|
||
export const metadata: Metadata = {
|
||
title: "StreamClipper AI — Panel",
|
||
};
|
||
|
||
export default async function RootLayout({ children }: { children: React.ReactNode }) {
|
||
const session = await getSession();
|
||
|
||
return (
|
||
<html lang="tr" className={`${hankenGrotesk.variable} ${jetbrainsMono.variable}`}>
|
||
<body>
|
||
{session && (
|
||
<nav className="flex items-center gap-6 border-b border-border px-6 py-4">
|
||
<span className="mr-2 text-sm font-semibold tracking-tight text-foreground">
|
||
StreamClipper<span className="text-primary">.</span>
|
||
</span>
|
||
<NavLink href="/">Kanal Durumu</NavLink>
|
||
<NavLink href="/segments">Segment & Aday Kütüphanesi</NavLink>
|
||
<NavLink href="/stats">İstatistik</NavLink>
|
||
<NavLink href="/settings">Ayarlar</NavLink>
|
||
<NavLink href="/users">Kullanıcılar</NavLink>
|
||
<span className="ml-auto flex items-center gap-4">
|
||
<span className="font-mono-num text-xs text-muted-foreground">{session.username}</span>
|
||
<form action={logout}>
|
||
<Button type="submit" variant="ghost" size="sm" className="text-muted-foreground">
|
||
Çıkış Yap
|
||
</Button>
|
||
</form>
|
||
</span>
|
||
</nav>
|
||
)}
|
||
<main className="mx-auto max-w-4xl px-6 py-10">{children}</main>
|
||
</body>
|
||
</html>
|
||
);
|
||
}
|