Files
kolaytercih/src/features/katalog/components/akademik-ayrinti.tsx
bilalgursen 7d52e8d5f1 refactor(ui): AcilisSahnesi ortak bileşen (components/ui/acilis-sahnesi.tsx), kartsız logo→içerik modu
akademik-ayrinti.tsx'teki açılış sahnesi src/components/ui/acilis-sahnesi.tsx'e
taşındı; davranışı değişmedi (kartlı mod). Eklenenler: `hazir` prop'u (false
iken sahne oynamaz, veri gelince oynar), `className` prop'u ve kartsız mod:
`data-logo` kabındaki üç `data-logo-kare` logodaki yerinde belirir, durur,
scale 0.6 + opacity 0 ile söner, kap sıfır boya iner, `data-sonra` bloklar
netleşir. Hareketi azalt: logo gizli, 0,25 s solma.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 23:16:13 +03:00

85 lines
3.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use client";
import type { ReactNode } from "react";
import { ChevronRight, GraduationCap, X } from "lucide-react";
import {
AltSayfa,
AltSayfaKapat,
AltSayfaGovde,
AltSayfaIcerik,
AltSayfaAciklama,
AltSayfaBaslik,
AltSayfaTetik,
} from "@/components/ui/alt-sayfa";
import { AcilisSahnesi } from "@/components/ui/acilis-sahnesi";
/**
* Üniversite ve bölüm sayfasında özet kartlarının altındaki ayrıntı satırı
* ("Akademik göstergeler ›", "Mezun istihdamı ›"; Apple Sağlık'taki "Tüm
* verileri göster" gibi): sık bakılan sayılar
* kartlarda, ayrıntı bir dokunuş derinde. İkinci satır içeride ne olduğunu
* önceden söyler. Ayrıntı alttan açılan çekmecede; çekmece ve kapatma
* çarpısı cta-sira-form.tsx'teki çekmeceyle birebir aynı sınıf setinde.
* Kartlar sunucuda üretilip `children` olarak gelir; açılış koreografisini
* AcilisSahnesi (`src/components/ui/acilis-sahnesi.tsx`, kartlı mod) oynatır.
*/
export function AkademikAyrinti({
baglam,
onizleme,
baslik = "Akademik göstergeler",
ikon,
children,
}: {
/** Çekmece başlığının altındaki bağlam satırı (üniversite ya da bölüm adı) */
baglam: string;
onizleme: string;
baslik?: string;
/** İkon kutusunun içi; verilmezse mezuniyet kepi */
ikon?: ReactNode;
children: ReactNode;
}) {
return (
<AltSayfa>
<AltSayfaTetik asChild>
<button
type="button"
className="mt-4 flex w-full cursor-pointer items-center gap-4 group rounded-2xl border border-slate-200 bg-card p-4 text-left transition-[background-color,border-color,transform] duration-150 hover:border-orange-500 hover:bg-orange-50/60 active:scale-[0.99] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring sm:p-5"
>
<span className="flex size-11 shrink-0 items-center justify-center rounded-xl bg-primary/10">
{ikon ?? (
<GraduationCap className="size-5 text-primary" aria-hidden />
)}
</span>
<span className="min-w-0 flex-1">
<span className="block font-heading text-lg font-bold text-slate-900">
{baslik}
</span>
<span className="block truncate text-sm text-slate-500">
{onizleme}
</span>
</span>
<ChevronRight
className="size-5 shrink-0 text-slate-400 transition-[color,transform] duration-150 group-hover:translate-x-0.5 group-hover:text-orange-500"
aria-hidden
/>
</button>
</AltSayfaTetik>
<AltSayfaIcerik>
<AltSayfaKapat className="absolute top-3 right-3 z-10 flex size-9 cursor-pointer items-center justify-center rounded-full border border-slate-200 bg-popover text-slate-500 transition-[background-color,transform] duration-150 hover:bg-slate-100 hover:text-slate-800 active:scale-[0.96]">
<X className="size-4" aria-hidden />
<span className="sr-only">Kapat</span>
</AltSayfaKapat>
<AltSayfaGovde className="px-4 pt-3 pb-[max(1.25rem,env(safe-area-inset-bottom))] sm:px-6">
<AltSayfaBaslik className="px-10 text-center font-heading text-2xl font-bold text-slate-900">
{baslik}
</AltSayfaBaslik>
<AltSayfaAciklama className="mt-1 px-10 text-center text-sm text-slate-500">
{baglam}
</AltSayfaAciklama>
<AcilisSahnesi>{children}</AcilisSahnesi>
</AltSayfaGovde>
</AltSayfaIcerik>
</AltSayfa>
);
}