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:
+73
-57
@@ -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
@@ -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
@@ -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
@@ -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>
|
||||
}
|
||||
/>
|
||||
</>
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user