- lib/sihirbaz.ts ikiye ayrıldı: sihirbaz-sabitler.ts (şema + doğrulayıcılar + event/storage sabitleri + sonucHref/secimOzeti, izomorfik) ve sihirbaz-profil.ts (localStorage oku/yaz/sil); 25 tüketicinin importu sembol bazında bölünerek güncellendi, localStorage anahtar/event değerleri birebir aynı - sihirbaz-adimlar(+lazy), hero-form, cta-sira-form, il-secim-haritasi ve /sonuc'un sihirbaz-modal/sihirbaz-cagri-karti/sira-gerekli bileşenleri features/sihirbaz/components/ altına taşındı - sihirbaz-queries.ts ve async SihirbazBolumu sarmalayıcısı /sonuc sayfa dönüşümüyle birlikte Faz 9'da gelecek (o zamana dek ölü kod olurlardı) - Davranış değişikliği yok Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
59 lines
1.7 KiB
TypeScript
59 lines
1.7 KiB
TypeScript
"use client";
|
||
|
||
// SihirbazAdimlar, turkey-map-react'in ~235 KB'lık il geometrisini taşır.
|
||
// Modal kapalıyken bu yükün ilk sayfa bundle'ına girmemesi için tek noktadan
|
||
// dynamic import: hem hero-form hem sonuc/sihirbaz-modal burayı kullanır.
|
||
|
||
import dynamic from "next/dynamic";
|
||
import { Skeleton } from "@/components/ui/skeleton";
|
||
|
||
function SihirbazAdimlarSkeleton() {
|
||
return (
|
||
<div
|
||
aria-busy="true"
|
||
aria-live="polite"
|
||
className="flex min-h-64 flex-col gap-5"
|
||
>
|
||
<div className="flex items-center gap-1.5">
|
||
<Skeleton className="h-1.5 w-6 rounded-full" />
|
||
<Skeleton className="size-1.5 rounded-full" />
|
||
<Skeleton className="size-1.5 rounded-full" />
|
||
<Skeleton className="ml-2 h-3 w-14" />
|
||
</div>
|
||
|
||
<div>
|
||
<Skeleton className="h-6 w-64 max-w-full" />
|
||
<Skeleton className="mt-2 h-4 w-80 max-w-full" />
|
||
<div className="mt-4 flex flex-wrap gap-2">
|
||
{[88, 112, 96, 128, 72, 104, 120, 84, 100].map((w, i) => (
|
||
<Skeleton
|
||
key={i}
|
||
className="h-9 rounded-full"
|
||
style={{ width: w }}
|
||
/>
|
||
))}
|
||
</div>
|
||
</div>
|
||
|
||
<div className="flex items-center justify-between border-t border-slate-100 pt-4">
|
||
<Skeleton className="h-9 w-20 rounded-lg" />
|
||
<Skeleton className="h-9 w-24 rounded-lg" />
|
||
</div>
|
||
</div>
|
||
);
|
||
}
|
||
|
||
export const SihirbazAdimlarLazy = dynamic(
|
||
() =>
|
||
import("./sihirbaz-adimlar").then((m) => m.SihirbazAdimlar),
|
||
{
|
||
ssr: false,
|
||
loading: () => <SihirbazAdimlarSkeleton />,
|
||
},
|
||
);
|
||
|
||
/** Kullanıcı forma dokunduğu anda chunk'ı arka planda indir. */
|
||
export function preloadSihirbazAdimlar() {
|
||
void import("./sihirbaz-adimlar");
|
||
}
|