feat(tasarim): form alanları hap, CTA bandı tek kaynak, masonry piksel zemin, çekmeceler §4.10
- Input/Select/Textarea: shadcn'in ince varsayılanı yerine üst çubuk haplarıyla aynı kalıp (h-12, rounded-full, slate-200, 16 px; md:text-sm yok); kullanım yerleri yalnız yerleşim sınıfı taşır. DESIGN.md §4.6 tam sınıf dizisi; denetime ince-form-alani (hata) ve ham-input (uyarı) - CtaBandi (mavi zemin + piksel doku) tek kaynak: /sonuc iki panel, katalog altı kart, "Kendi Listem" çekmecesi altı. Ana sayfa kapanışı koyu PikselCtaYuzeyi + 24'lük piksel liste kreatifiyle kalır (Bilal: "orası bayağı iyiydi"); yazılıp silinen satır kaldırıldı - PixelMasonry: CTA arka planları büyüklü küçüklü, hafif kaymış kareler; eşit ızgaralı PixelField kaldırıldı - Çekmece başlığındaki 12×2 piksel liste kaldırıldı (çok dolu); sayı + ilerleme çubuğu + risk dağılımı geri geldi - "Saniyede gör" çekmecesi §4.10 düzeninde: ortalı DrawerTitle + bağlam, rozet ve çizgili "neler alacaksın" listesi yok; kapı modalındaki iki rozet kalktı; denetime modal-rozet (hata) - Kapı panelinde 3 px odak halkası kırpılmıyor (px-px → p-1) - Liste satırı: üniversite adı + tür/il/süre adın altında tek akan satır, telefonda text-xs (SATIR_ALT_GRUP); katalog listelerinde ad kendi satırında (SATIR_GRUP space-y-2). Ölçüm 375 px canlı bölüm sayfası: satır yüksekliğini metin değil alt alta iki 44 px düğme belirliyor Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
59
src/components/cta-bandi.tsx
Normal file
59
src/components/cta-bandi.tsx
Normal file
@@ -0,0 +1,59 @@
|
||||
"use client";
|
||||
|
||||
import type { ComponentProps, Ref } from "react";
|
||||
import { PixelMasonry } from "@/components/pixel-decor";
|
||||
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}
|
||||
>
|
||||
<div
|
||||
aria-hidden
|
||||
className={cn(
|
||||
"pointer-events-none absolute inset-x-0 -z-10 text-white",
|
||||
buyuk ? "-inset-y-10" : "-inset-y-6",
|
||||
)}
|
||||
>
|
||||
<PixelMasonry seed={seed} />
|
||||
</div>
|
||||
{children}
|
||||
</Etiket>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user