feat(tasarim): /sonuc program tablosu "şişko ve sade" dile göre

- Liste satırı sınıfları src/components/liste-satiri.ts'e çıkarıldı;
  üniversite, bölüm ve /sonuc tabloları oradan okuyor
- /sonuc satırı: ad sarar, üniversite adı ayrı satırda ve düzgün
  harfle, telefonda risk + taban sıra adın altında, 44 px butonlar,
  "boş kaldı" 12 px altından çıktı
- Dilim sekmeleri 375 px'te taşıyordu (418 px); telefonda üç eşit hap
- Tercih kapısında büyük harfli etiketler SectionEyebrow'a, harita
  şeridinde 10 px yazılar 12 px'e

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-09-24 00:44:59 +03:00
parent 5b51fd16e0
commit f02494ef78
7 changed files with 255 additions and 112 deletions

View File

@@ -12,6 +12,19 @@ import {
ProgramSiraGecmisi,
ProgramTabanTrendi,
} from "@/components/program-liste-verileri";
import {
SATIR_AD,
SATIR_AD_DUZ,
SATIR_AD_HUCRE,
SATIR_ALT_AD,
SATIR_BASLIK,
SATIR_BUTON_BASLIK,
SATIR_BUTON_HUCRE,
SATIR_BUTON_KABI,
SATIR_CIP,
SATIR_META,
SATIR_MOBIL_SAYI,
} from "@/components/liste-satiri";
import { ProgramEkleButonu } from "@/features/liste/components/program-ekle-butonu";
import { ProgramNetleriButonu } from "./program-netleri";
import { UniLogo } from "@/components/uni-logo";
@@ -162,10 +175,10 @@ export function BolumProgramListesi({
<Table>
<TableHeader>
<TableRow className="hover:bg-transparent">
<TableHead className="h-12 pl-4 text-sm font-semibold text-slate-500 sm:pl-5">
<TableHead className={`${SATIR_BASLIK} pl-4 sm:pl-5`}>
Üniversite
</TableHead>
<TableHead className="hidden h-12 text-right text-sm font-semibold text-slate-500 lg:table-cell">
<TableHead className={`hidden text-right lg:table-cell ${SATIR_BASLIK}`}>
Son {VERI_YIL_SAYISI} yıl
</TableHead>
<TableHead className="hidden h-12 text-right lg:table-cell">
@@ -192,7 +205,7 @@ export function BolumProgramListesi({
onSirala={sirala}
/>
</TableHead>
<TableHead className="h-12 w-14 text-right sm:w-28">
<TableHead className={SATIR_BUTON_BASLIK}>
<span className="sr-only">Netler ve listeye ekle</span>
</TableHead>
</TableRow>
@@ -206,7 +219,7 @@ export function BolumProgramListesi({
return (
<TableRow key={p.id} className="kt-cv-satir">
<TableCell className="w-full whitespace-normal py-4 pl-4 sm:pl-5">
<TableCell className={SATIR_AD_HUCRE}>
<span className="flex items-start gap-3">
{p.universiteSlug ? (
<UniLogo slug={p.universiteSlug} ad={uniAd} boy="sm" />
@@ -215,23 +228,23 @@ export function BolumProgramListesi({
{p.universiteSlug ? (
<Link
href={`/universite/${p.universiteSlug}`}
className="block text-base font-semibold leading-snug text-slate-900 transition-colors hover:text-primary hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
className={SATIR_AD}
>
{uniAd}
</Link>
) : (
<span className="block text-base font-semibold leading-snug text-slate-900">
<span className={SATIR_AD_DUZ}>
{uniAd}
</span>
)}
{varyant ? (
<span className="mt-0.5 block text-sm leading-snug text-slate-600">
<span className={SATIR_ALT_AD}>
{varyant}
</span>
) : null}
<span className="mt-2 flex flex-wrap items-center gap-x-2 gap-y-1 text-sm text-slate-500">
<span className={SATIR_META}>
{p.unitur ? (
<span className="shrink-0 rounded-full bg-slate-100 px-2.5 py-0.5 text-xs font-semibold text-slate-700">
<span className={SATIR_CIP}>
{UNITUR_ETIKET[p.unitur]?.cip ??
trBaslikDuzeni(p.unitur)}
</span>
@@ -245,7 +258,7 @@ export function BolumProgramListesi({
<span className="shrink-0">{p.sure} yıl</span>
) : null}
</span>
<span className="mt-1.5 flex items-center gap-1.5 text-sm text-slate-500 sm:hidden">
<span className={SATIR_MOBIL_SAYI}>
Taban sıra
<span className="font-semibold tabular-nums text-slate-900">
{tabanMetni}
@@ -272,8 +285,8 @@ export function BolumProgramListesi({
{tabanMetni}
</span>
</TableCell>
<TableCell className="py-4 pr-4 text-right sm:pr-5">
<span className="inline-flex flex-col items-center gap-2 sm:flex-row">
<TableCell className={SATIR_BUTON_HUCRE}>
<span className={SATIR_BUTON_KABI}>
<ProgramNetleriButonu
programId={p.id}
isim={p.isim.trim()}

View File

@@ -8,6 +8,18 @@ import {
ProgramTabanTrendi,
programEtkinSira,
} from "@/components/program-liste-verileri";
import {
SATIR_AD,
SATIR_AD_DUZ,
SATIR_AD_HUCRE,
SATIR_BASLIK,
SATIR_BUTON_BASLIK,
SATIR_BUTON_HUCRE,
SATIR_BUTON_KABI,
SATIR_CIP,
SATIR_META,
SATIR_MOBIL_SAYI,
} from "@/components/liste-satiri";
import { ProgramEkleButonu } from "@/features/liste/components/program-ekle-butonu";
import { ProgramNetleriButonu } from "./program-netleri";
import {
@@ -50,22 +62,22 @@ export function UniversiteProgramTablosu({
<Table>
<TableHeader>
<TableRow className="hover:bg-transparent">
<TableHead className="h-12 pl-4 text-sm font-semibold text-slate-500 sm:pl-5">
<TableHead className={`${SATIR_BASLIK} pl-4 sm:pl-5`}>
Program
</TableHead>
<TableHead className="hidden h-12 text-right text-sm font-semibold text-slate-500 lg:table-cell">
<TableHead className={`hidden text-right lg:table-cell ${SATIR_BASLIK}`}>
Son {VERI_YIL_SAYISI} yıl
</TableHead>
<TableHead className="hidden h-12 text-right text-sm font-semibold text-slate-500 lg:table-cell">
<TableHead className={`hidden text-right lg:table-cell ${SATIR_BASLIK}`}>
{SON_YIL} puan
</TableHead>
<TableHead className="hidden h-12 text-right text-sm font-semibold text-slate-500 md:table-cell">
<TableHead className={`hidden text-right md:table-cell ${SATIR_BASLIK}`}>
Kontenjan
</TableHead>
<TableHead className="hidden h-12 text-right text-sm font-semibold text-slate-500 sm:table-cell">
<TableHead className={`hidden text-right sm:table-cell ${SATIR_BASLIK}`}>
Taban sıra
</TableHead>
<TableHead className="h-12 w-14 text-right sm:w-28">
<TableHead className={SATIR_BUTON_BASLIK}>
<span className="sr-only">Netler ve listeye ekle</span>
</TableHead>
</TableRow>
@@ -76,28 +88,28 @@ export function UniversiteProgramTablosu({
const tabanMetni = taban != null ? `~${sayi(taban)}.` : "—";
return (
<TableRow key={p.id} className="kt-cv-satir">
<TableCell className="w-full whitespace-normal py-4 pl-4 sm:pl-5">
<TableCell className={SATIR_AD_HUCRE}>
{p.bolumSlug ? (
<Link
href={`/bolum/${p.bolumSlug}`}
className="block text-base font-semibold leading-snug text-slate-900 transition-colors hover:text-primary hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
className={SATIR_AD}
>
{p.isim.trim()}
</Link>
) : (
<span className="block text-base font-semibold leading-snug text-slate-900">
<span className={SATIR_AD_DUZ}>
{p.isim.trim()}
</span>
)}
<span className="mt-2 flex flex-wrap items-center gap-x-2 gap-y-1 text-sm text-slate-500">
<span className="shrink-0 rounded-full bg-slate-100 px-2.5 py-0.5 text-xs font-semibold text-slate-700">
<span className={SATIR_META}>
<span className={SATIR_CIP}>
{TUR_ETIKET[p.tur] ?? p.tur}
</span>
{p.sure ? (
<span className="shrink-0">{p.sure} yıl</span>
) : null}
</span>
<span className="mt-1.5 flex items-center gap-1.5 text-sm text-slate-500 sm:hidden">
<span className={SATIR_MOBIL_SAYI}>
Taban sıra
<span className="font-semibold tabular-nums text-slate-900">
{tabanMetni}
@@ -124,8 +136,8 @@ export function UniversiteProgramTablosu({
{tabanMetni}
</span>
</TableCell>
<TableCell className="py-4 pr-4 text-right sm:pr-5">
<span className="inline-flex flex-col items-center gap-2 sm:flex-row">
<TableCell className={SATIR_BUTON_HUCRE}>
<span className={SATIR_BUTON_KABI}>
<ProgramNetleriButonu
programId={p.id}
isim={p.isim.trim()}