chore: update dependencies and configuration for Tailwind CSS

- Added "@tailwindcss/postcss" to package.json dependencies.
- Updated "tailwindcss" version to "^4.3.0" in package.json.
- Modified postcss.config.mjs to use "@tailwindcss/postcss" instead of "tailwindcss".
- Changed darkMode configuration in tailwind.config.ts to a string format.
This commit is contained in:
Poyraz Avsever
2026-06-02 12:46:18 +03:00
parent b6b6f4fc32
commit 01692d3958
12 changed files with 1401 additions and 1208 deletions
+73 -57
View File
@@ -1,67 +1,81 @@
@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";
@import "tailwindcss";
@import "poyraz-ui/preset.css";
@source "../app/**/*.{js,ts,jsx,tsx,mdx}";
@source "../components/**/*.{js,ts,jsx,tsx,mdx}";
@source "../config/**/*.{js,ts,jsx,tsx,mdx}";
@layer base {
:root, .dark {
/* Deeper premium dark mode background */
--background: #120D1C;
--background-dark: #0A0710;
--foreground: #FBF9FE;
--card: #1F172B;
--card-foreground: #FBF9FE;
--popover: #1F172B;
--popover-foreground: #FBF9FE;
--primary: #6C5BB0;
--primary-foreground: #FFFFFF;
--primary-hover: #594D9F;
--primary-pressed: #493D90;
--secondary: #2B2538;
--secondary-foreground: #C0B8D6;
--muted: #3B3448;
--muted-foreground: #8F89A5;
--accent: #3B3448;
--accent-foreground: #FBF9FE;
--destructive: #d8644a;
--destructive-foreground: #FBF9FE;
--border: #3B3448;
--input: #3B3448;
--input-bg: #1A1325;
--overlay: #000000;
--ring: #6C5BB0;
--radius: 0.75rem;
:root {
--poyraz-background: #ffffff;
--poyraz-foreground: #101828;
--poyraz-primary: #dc2626;
--poyraz-primary-foreground: #ffffff;
--poyraz-primary-hover: #b91c1c;
--poyraz-primary-active: #991b1b;
--poyraz-primary-muted: #fef2f2;
--poyraz-primary-muted-foreground: #b91c1c;
--poyraz-secondary: #f8fafc;
--poyraz-secondary-foreground: #101828;
--poyraz-muted: #f8fafc;
--poyraz-muted-foreground: #667085;
--poyraz-accent: #f1f5f9;
--poyraz-accent-hover: #e2e8f0;
--poyraz-accent-foreground: #101828;
--poyraz-border: #e4e7ec;
--poyraz-border-strong: #d0d5dd;
--poyraz-input: #98a2b3;
--poyraz-ring: #dc2626;
--poyraz-card: #ffffff;
--poyraz-card-foreground: #101828;
/* Legacy aliases kept until all prototype pages move to Poyraz UI. */
--background: var(--poyraz-background);
--background-dark: #f8fafc;
--foreground: var(--poyraz-foreground);
--card: var(--poyraz-card);
--card-foreground: var(--poyraz-card-foreground);
--popover: #ffffff;
--popover-foreground: var(--poyraz-foreground);
--primary: var(--poyraz-primary);
--primary-foreground: var(--poyraz-primary-foreground);
--primary-hover: var(--poyraz-primary-hover);
--primary-pressed: var(--poyraz-primary-active);
--secondary: var(--poyraz-secondary);
--secondary-foreground: var(--poyraz-secondary-foreground);
--muted: var(--poyraz-muted);
--muted-foreground: var(--poyraz-muted-foreground);
--accent: var(--poyraz-accent);
--accent-foreground: var(--poyraz-accent-foreground);
--destructive: #ef4444;
--destructive-foreground: #ffffff;
--border: var(--poyraz-border);
--input: var(--poyraz-input);
--input-bg: #ffffff;
--overlay: rgba(15, 23, 42, 0.48);
--ring: var(--poyraz-ring);
--radius: 0.375rem;
}
}
@layer base {
* {
@apply border-border;
}
body {
@apply text-foreground;
background: linear-gradient(135deg, var(--background), var(--background-dark));
background-attachment: fixed;
min-height: 100vh;
html {
color-scheme: light;
}
/* Fix for Chrome autofill turning inputs yellow/olive */
body {
@apply min-h-screen bg-background text-foreground antialiased;
}
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
-webkit-box-shadow: 0 0 0 30px var(--input-bg) inset !important;
-webkit-text-fill-color: var(--foreground) !important;
transition: background-color 5000s ease-in-out 0s;
-webkit-box-shadow: 0 0 0 30px var(--input-bg) inset !important;
-webkit-text-fill-color: var(--foreground) !important;
transition: background-color 5000s ease-in-out 0s;
}
}
@@ -70,15 +84,17 @@
width: 4px;
height: 4px;
}
.tiny-scrollbar::-webkit-scrollbar-track {
background: transparent;
}
.tiny-scrollbar::-webkit-scrollbar-thumb {
background: theme('colors.primary.DEFAULT' / 30%);
background: color-mix(in srgb, var(--poyraz-primary) 30%, transparent);
border-radius: 4px;
}
.tiny-scrollbar::-webkit-scrollbar-thumb:hover {
background: theme('colors.primary.DEFAULT' / 60%);
background: color-mix(in srgb, var(--poyraz-primary) 55%, transparent);
}
}
+3 -3
View File
@@ -7,8 +7,8 @@ import { Toaster } from "react-hot-toast";
const geist = Geist({ subsets: ["latin"], variable: "--font-sans" });
export const metadata: Metadata = {
title: "Cognis - Your AI Assistant",
description: "Productivity Dashboard - AI-Powered Personal Life and Planning Dashboard",
title: "Cognis",
description: "Self-hosted freelancer operating dashboard",
};
export default function RootLayout({
@@ -19,7 +19,7 @@ export default function RootLayout({
return (
<html
lang="tr"
className={cn("font-sans dark", geist.variable)}
className={cn("font-sans", geist.variable)}
suppressHydrationWarning
>
<body>
+36 -42
View File
@@ -1,50 +1,52 @@
import { login } from '@/app/login/actions'
import { Button } from '@/components/ui/button'
import { Input } from '@/components/ui/input'
import { Label } from '@/components/ui/label'
import Link from 'next/link'
import { ErrorToaster } from '@/components/error-toaster'
import { Icon } from '@/components/ui/icon'
import { AuthPageShell } from '@/components/auth/auth-page-shell'
import { login } from "@/app/login/actions";
import { AuthPageShell } from "@/components/auth/auth-page-shell";
import { ErrorToaster } from "@/components/error-toaster";
import { LockKeyhole, LogIn, Mail, Search } from "lucide-react";
import Link from "next/link";
import { Button, Input, Label } from "poyraz-ui/atoms";
export default async function LoginPage({
searchParams,
}: {
searchParams: Promise<{ [key: string]: string | string[] | undefined }>
searchParams: Promise<{ [key: string]: string | string[] | undefined }>;
}) {
const resolvedParams = await searchParams
const error = resolvedParams?.error
const message = resolvedParams?.message
const resolvedParams = await searchParams;
const error = resolvedParams?.error;
const message = resolvedParams?.message;
return (
<>
{error && message && <ErrorToaster message={String(message)} />}
<AuthPageShell
title="Tekrar Hoş Geldiniz"
description="Kişisel alanınıza ulaşmak için giriş yapın"
imageSrc="/images/1830857_Image.png"
imageAlt="MindSpace Background"
imageSide="left"
title="Giriş yap"
description="Cognis çalışma alanına erişmek için hesabına giriş yap."
form={
<form className="space-y-6">
<div className="space-y-4">
<div className="space-y-2">
<Label htmlFor="email">E-posta</Label>
<Label htmlFor="email" className="flex items-center gap-2">
<Mail className="h-4 w-4 text-muted-foreground" />
E-posta
</Label>
<Input
id="email"
name="email"
type="email"
placeholder="ornek@mail.com"
required
className="h-11 bg-input-bg border-border"
className="h-11"
/>
</div>
<div className="space-y-2">
<div className="flex items-center justify-between">
<Label htmlFor="password">Şifre</Label>
<div className="flex items-center justify-between gap-3">
<Label htmlFor="password" className="flex items-center gap-2">
<LockKeyhole className="h-4 w-4 text-muted-foreground" />
Şifre
</Label>
<Link
href="/forgot-password"
className="text-sm font-medium text-primary hover:text-primary-hover transition-colors"
className="text-sm font-medium text-primary transition-colors hover:text-primary-hover"
>
Şifremi unuttum
</Link>
@@ -54,16 +56,14 @@ export default async function LoginPage({
name="password"
type="password"
required
className="h-11 bg-input-bg border-border"
className="h-11"
/>
</div>
</div>
<Button
formAction={login}
className="w-full h-11 text-base font-medium shadow-md transition-transform active:scale-[0.98] bg-primary hover:bg-primary-hover text-primary-foreground"
>
Giriş Yap
<Button formAction={login} className="h-11 w-full gap-2">
<LogIn className="h-4 w-4" />
Giriş yap
</Button>
</form>
}
@@ -74,34 +74,28 @@ export default async function LoginPage({
<span className="w-full border-t border-border" />
</div>
<div className="relative flex justify-center text-xs uppercase">
<span className="bg-background px-2 text-muted-foreground">
veya
</span>
<span className="bg-background px-2 text-muted-foreground">veya</span>
</div>
</div>
<Button
type="button"
variant="outline"
className="w-full h-11 text-base font-medium bg-card border-border hover:bg-secondary transition-colors"
>
<Icon icon="flat-color-icons:google" className="w-5 h-5 mr-2" />
Google ile Devam Et
<Button type="button" variant="outline" className="h-11 w-full gap-2">
<Search className="h-4 w-4" />
Google ile devam et
</Button>
</div>
}
footer={
<div className="text-center text-sm">
Hesabınız yok mu?{' '}
Hesabın yok mu?{" "}
<Link
href="/register"
className="font-medium text-primary hover:text-primary-hover transition-colors"
className="font-medium text-primary transition-colors hover:text-primary-hover"
>
Kayıt Ol
Kayıt ol
</Link>
</div>
}
/>
</>
)
);
}
+34 -40
View File
@@ -1,61 +1,61 @@
import { signup } from '@/app/login/actions'
import { Button } from '@/components/ui/button'
import { Input } from '@/components/ui/input'
import { Label } from '@/components/ui/label'
import Link from 'next/link'
import { ErrorToaster } from '@/components/error-toaster'
import { Icon } from '@/components/ui/icon'
import { AuthPageShell } from '@/components/auth/auth-page-shell'
import { signup } from "@/app/login/actions";
import { AuthPageShell } from "@/components/auth/auth-page-shell";
import { ErrorToaster } from "@/components/error-toaster";
import { LockKeyhole, Mail, Search, UserPlus } from "lucide-react";
import Link from "next/link";
import { Button, Input, Label } from "poyraz-ui/atoms";
export default async function RegisterPage({
searchParams,
}: {
searchParams: Promise<{ [key: string]: string | string[] | undefined }>
searchParams: Promise<{ [key: string]: string | string[] | undefined }>;
}) {
const resolvedParams = await searchParams
const error = resolvedParams?.error
const message = resolvedParams?.message
const resolvedParams = await searchParams;
const error = resolvedParams?.error;
const message = resolvedParams?.message;
return (
<>
{error && message && <ErrorToaster message={String(message)} />}
<AuthPageShell
title="Aramıza Katılın"
description="Kişisel yaşam alanınızı oluşturmak için kayıt olun"
imageSrc="/images/1830837_Image.png"
imageAlt="MindSpace Background"
imageSide="right"
title="Kayıt ol"
description="Freelancer operasyon panelini kullanmak için hesabını oluştur."
form={
<form className="space-y-6">
<div className="space-y-4">
<div className="space-y-2">
<Label htmlFor="email">E-posta</Label>
<Label htmlFor="email" className="flex items-center gap-2">
<Mail className="h-4 w-4 text-muted-foreground" />
E-posta
</Label>
<Input
id="email"
name="email"
type="email"
placeholder="ornek@mail.com"
required
className="h-11 bg-input-bg border-border"
className="h-11"
/>
</div>
<div className="space-y-2">
<Label htmlFor="password">Şifre</Label>
<Label htmlFor="password" className="flex items-center gap-2">
<LockKeyhole className="h-4 w-4 text-muted-foreground" />
Şifre
</Label>
<Input
id="password"
name="password"
type="password"
required
className="h-11 bg-input-bg border-border"
className="h-11"
/>
</div>
</div>
<Button
formAction={signup}
className="w-full h-11 text-base font-medium shadow-md transition-transform active:scale-[0.98] bg-primary hover:bg-primary-hover text-primary-foreground"
>
Kayıt Ol
<Button formAction={signup} className="h-11 w-full gap-2">
<UserPlus className="h-4 w-4" />
Hesap oluştur
</Button>
</form>
}
@@ -66,34 +66,28 @@ export default async function RegisterPage({
<span className="w-full border-t border-border" />
</div>
<div className="relative flex justify-center text-xs uppercase">
<span className="bg-background px-2 text-muted-foreground">
veya
</span>
<span className="bg-background px-2 text-muted-foreground">veya</span>
</div>
</div>
<Button
type="button"
variant="outline"
className="w-full h-11 text-base font-medium bg-card border-border hover:bg-secondary transition-colors"
>
<Icon icon="flat-color-icons:google" className="w-5 h-5 mr-2" />
Google ile Devam Et
<Button type="button" variant="outline" className="h-11 w-full gap-2">
<Search className="h-4 w-4" />
Google ile devam et
</Button>
</div>
}
footer={
<div className="text-center text-sm">
Zaten hesabınız var mı?{' '}
Zaten hesabın var mı?{" "}
<Link
href="/login"
className="font-medium text-primary hover:text-primary-hover transition-colors"
className="font-medium text-primary transition-colors hover:text-primary-hover"
>
Giriş Yap
Giriş yap
</Link>
</div>
}
/>
</>
)
);
}