Files
kolaytercih/src/components/cta-bandi.tsx
bilalgursen 259534fa9c feat(katalog+tasarim): şehir adları her yerde link; piksel yüzeylere beyaz ton
- ilSayfaHref: üniversite sayfası il hapı, /universiteler listesi, bölüm /
  sonuç / listem / tadımlık satırlarındaki il metası şehir sayfasına gider.
- Şehir kümeleri tüm (üniversite, il) çiftlerinden: DB'deki her il değerinin
  sayfası var (ODTÜ Ankara + KKTC); dev'de eski globalThis önbelleğine dayanıklı.
- PikselZemin ton="acik", CtaBandi/CtaSiraForm ton="beyaz": /universiteler
  altı ve /meraklisina kapanışı beyaz, diğer bantlar mavi (dönüşümlü).
- ilUlkeHaritasi: il değerinden ülke haritası + şehir konumu.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 14:56:11 +03:00

66 lines
2.2 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 { ComponentProps, Ref } from "react";
import { PikselZemin } from "@/components/piksel-zemin";
import { cn } from "@/lib/utils";
/**
* CTA bandı — DESIGN.md §10.8 kanonik yüzey: sitenin mavisi (`bg-primary`),
* arka planda büyüklü küçüklü, masonry gibi kaymış ve imleç yaklaşınca
* turuncuya ısınan piksel dokusu (`PixelMasonry`), beyaz yazı, tek turuncu buton.
*
* - `buyuk` (varsayılan): sayfa kapanışı / panel — ortalı, iri boşluk.
* - `kompakt`: çekmece altı gibi dar yerler — sola yaslı, alçak.
* - `ton="beyaz"`: aynı bant beyaz zeminde — slate kenarlık, koyu yazı,
* slate pikseller. Aynı sayfada üst üste iki mavi bant olmasın diye
* (Bilal, 24 Eyl 2026: "her kısımda mavi arka kullanmışsın, çeşitlendir").
* Çağıran paragraf renklerini tona göre verir (`text-white/90` ↔
* `text-slate-600`).
*
* İçerik (başlık, paragraf, buton) çağıranındır; yalnız kabuk burada durur.
* Bilal'in kararı (24 Eyl 2026): koyu slate-950 yüzey yerine bu band.
*/
export function CtaBandi({
children,
className,
seed = 8,
boyut = "buyuk",
ton = "mavi",
etiket = "section",
ref,
...props
}: Omit<ComponentProps<"div">, "ref"> & {
/** Piksel dokusunun deseni; aynı sayfadaki iki band farklı olsun */
seed?: number;
boyut?: "buyuk" | "kompakt";
ton?: "mavi" | "beyaz";
/** Çekmece altı gibi başlıksız yerlerde `div` */
etiket?: "section" | "div";
ref?: Ref<HTMLElement>;
}) {
const buyuk = boyut === "buyuk";
// İki etiket de HTMLElement'tir; JSX tipi için div'e daraltılır.
const Etiket = etiket as "div";
return (
<Etiket
ref={ref as Ref<HTMLDivElement>}
className={cn(
"relative isolate overflow-hidden rounded-2xl",
ton === "beyaz"
? "border border-slate-200 bg-white text-slate-900"
: "bg-primary text-white",
buyuk ? "px-5 py-8 text-center sm:p-12" : "px-5 py-4 text-left sm:py-5",
className,
)}
{...props}
>
<PikselZemin
seed={seed}
ton={ton === "beyaz" ? "acik" : "koyu"}
className={buyuk ? "-inset-y-10" : undefined}
/>
{children}
</Etiket>
);
}