- giris-form, giris-baslik, user-nav, sign-out-button features/kullanici/components/ altına taşındı - /giris'in session+redirect+callback temizliği GirisKarti'ya (async), /giris/dogrula'nın inline doğrulama formu + guvenliYol kalkanı DogrulaKarti'ya çıkarıldı; skeleton'lar aynı dosyada - İki sayfa senkron: searchParams.then() + sayfada Suspense; app/giris/loading.tsx silindi (geometrisi GirisKartiSkeleton'da yaşıyor) - site-header'ın UserNav importu güncellendi; mevcut Suspense sınırı yerinde - Davranış değişikliği yok Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
"use client";
|
||
|
||
import { TypingAnimation } from "@/components/ui/typing-animation";
|
||
|
||
// Hepsi aynı şablon: "Giriş yap, çünkü …"
|
||
const FUNNEL_MESAJLARI = [
|
||
", çünkü listen seni bekliyor",
|
||
", çünkü tercihine 1 adım kaldı",
|
||
", çünkü seçimlerin hazır",
|
||
", çünkü 5 kredin yanında",
|
||
", çünkü kaçırmak istemezsin",
|
||
", çünkü listen hemen üretilsin",
|
||
];
|
||
|
||
/**
|
||
* Giriş sayfası başlığı. Kullanıcı sihirbazdan (callback /sonuc'a dönüyorsa)
|
||
* geldiyse sabit "Giriş yap" + typewriter hook'ları; diğer girişlerde
|
||
* yalnız sabit başlık.
|
||
*/
|
||
export function GirisBaslik({ funnel }: { funnel: boolean }) {
|
||
if (!funnel) {
|
||
return <h1 className="font-heading text-xl font-bold">Giriş yap</h1>;
|
||
}
|
||
|
||
return (
|
||
<h1 className="flex flex-wrap items-baseline font-heading text-xl font-bold leading-tight">
|
||
<span className="shrink-0">Giriş yap</span>
|
||
<TypingAnimation
|
||
as="span"
|
||
words={FUNNEL_MESAJLARI}
|
||
loop
|
||
startOnView={false}
|
||
typeSpeed={42}
|
||
deleteSpeed={22}
|
||
pauseDelay={2400}
|
||
className="min-h-[1.25em] font-heading text-xl font-bold leading-tight tracking-[-0.02em] text-primary"
|
||
/>
|
||
</h1>
|
||
);
|
||
}
|