"use client"; import type { ReactNode } from "react"; import Image from "next/image"; import Link from "next/link"; import { motion, useReducedMotion } from "framer-motion"; import { Typography } from "poyraz-ui/atoms"; import { ArrowUpRight, BarChart3, CalendarDays, Kanban, Wallet, } from "lucide-react"; type AuthPageShellProps = { branding: { applicationName: string; lightLogoUrl: string | null; darkLogoUrl: string | null; }; title: string; description: string; imageSrc?: string; imageAlt?: string; imageSide?: "left" | "right"; form: ReactNode; secondaryAction?: ReactNode; footer: ReactNode; marketing?: { headline: string; description: string; openSource: string; github: string; via: string; builtBy: string; highlights: [string, string, string, string]; }; }; const highlightIcons = [Kanban, CalendarDays, Wallet, BarChart3]; export function AuthPageShell({ branding, title, description, form, secondaryAction, footer, marketing = { headline: "Freelancer işlerini, müşterilerini ve finansını tek yerde yönet.", description: `${branding.applicationName}, günlük operasyonunu, projelerini, side projectlerini ve temel finans durumunu sade raporlarla takip etmen için tasarlanır.`, openSource: "Açık kaynak ve self-host edilebilir.", github: "GitHub", via: "üzerinden ulaşabilirsin.", builtBy: "tarafından kodlandı.", highlights: ["Müşteriler", "Takvim", "Finans", "Raporlar"], }, }: AuthPageShellProps) { const reducedMotion = useReducedMotion(); const fadeUp = { initial: reducedMotion ? false : { opacity: 0, y: 18 }, animate: { opacity: 1, y: 0 }, transition: { duration: reducedMotion ? 0 : 0.55, ease: [0.22, 1, 0.36, 1] as const, }, }; return (
{branding.applicationName}
{marketing.headline} {marketing.description} {marketing.highlights.map((label, index) => { const Icon = highlightIcons[index] ?? Kanban; return (
{label}
); })}
{marketing.openSource}{" "} {marketing.github} {marketing.via} Poyraz Avsever {marketing.builtBy}
{`${branding.applicationName} {`${branding.applicationName}
{title} {description}
{form} {secondaryAction} {footer}
); }