Bilal'in isteği (24 Eyl 2026): piksel arka planı her CTA benzeri kısmın arkasında, büyüklü küçüklü masonry. Tek kaynak PikselZemin (açık kartta silik mavi, koyu/mavi yüzeyde beyaz); CtaBandi ve PikselCtaYuzeyi de onu kullanır. Eklenen yüzeyler: /sonuc "listen hazır" kartı, /listem dört üretim kartı + boş durum + kilit kartı, tadımlık kartı, sıralama-yok sayfası, meraklısına kapanış kartı, ana sayfa ve /paket ana paket kartı, kaydet bandı, katalog üstü kompakt satır, arama penceresi kartı. Kapsam dışı (form, durum kartı, modal düğmesi, 404) DESIGN.md §10.8'de. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
52 lines
1.7 KiB
TypeScript
52 lines
1.7 KiB
TypeScript
"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.
|
||
*
|
||
* İç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",
|
||
etiket = "section",
|
||
ref,
|
||
...props
|
||
}: Omit<ComponentProps<"div">, "ref"> & {
|
||
/** Piksel dokusunun deseni; aynı sayfadaki iki band farklı olsun */
|
||
seed?: number;
|
||
boyut?: "buyuk" | "kompakt";
|
||
/** Ç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 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="koyu" className={buyuk ? "-inset-y-10" : undefined} />
|
||
{children}
|
||
</Etiket>
|
||
);
|
||
}
|