9–10 Ekim oturumlarının commit'lenmemiş işi tek parça alındı (raporlar: docs/ekip-raporlari/2026-10-09, 2026-10-10): - Landing deneyim dili 1. dalga: sayfa geçişi (ViewTransition), piksel morf/şerit, sorun sahneleri, adım akışı, sayan sayı, mobil menü, adım göstergesi, logoya tepki; DESIGN.md §11 ve AGENTS.md kuralları, tasarım denetimine yeni kurallar - Tema: tema ikonu, D kısayolu, tema geçişi - PWA: manifest.ts ve ikonlar - Danışman: revizyon niyet modeli (OPENROUTER_NIYET_MODEL), sohbet geçmişi, soru API'si - /listem ve /sonuc tadımlığı bileşen denetimi düzeltmeleri - eslint: .venv-tts/ yok sayılır tsc, eslint ve tasarım denetimi sıfır hata. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
67 lines
2.1 KiB
TypeScript
67 lines
2.1 KiB
TypeScript
// Adım adım ilerleyen panellerin ortak geçişi (DESIGN.md §6): sihirbazın
|
||
// alan → il → öncelik adımları (sihirbaz-adimlar.tsx, TransitionPanel) ile
|
||
// danışmanın soru formundaki sorular (sohbet-anketi.tsx) aynı yoldan gelir
|
||
// gider — yeni adım ileri giderken sağdan, geri dönerken soldan kayar; boy
|
||
// ölçülen yüksekliğe yayla uzar. Sabitler yalnız burada; iki yerde de bu iki
|
||
// fonksiyon çağrılır, kopyası yazılmaz. Yay sekmesiz (stiffness 300 /
|
||
// damping 30), opaklık 0,2 s. "Hareketi azalt"ta kayma ve boy yayı yok,
|
||
// yalnız 0,12 s'lik çapraz solma.
|
||
|
||
import type { Transition, Variants } from "motion/react";
|
||
import { YAY } from "@/lib/hareket";
|
||
|
||
/**
|
||
* enter / center / exit varyantları; `custom` geçiş yönüdür (1 ileri, -1
|
||
* geri). Giren panel akışta (`relative`) durur, çıkan panel mutlak konuma
|
||
* alınır ki ikisi aynı anda üst üste kayabilsin. `yukseklik` ölçülen boy
|
||
* (ilk ölçümden önce "auto").
|
||
*/
|
||
export function adimGecisiVaryantlari({
|
||
hareketiAzalt,
|
||
yukseklik,
|
||
}: {
|
||
hareketiAzalt: boolean;
|
||
yukseklik: number | "auto";
|
||
}): Variants {
|
||
return {
|
||
enter: (gecisYonu: number) => ({
|
||
x: hareketiAzalt ? 0 : gecisYonu > 0 ? "100%" : "-100%",
|
||
opacity: 0,
|
||
height: yukseklik,
|
||
position: "relative",
|
||
}),
|
||
center: {
|
||
zIndex: 1,
|
||
x: 0,
|
||
opacity: 1,
|
||
height: yukseklik,
|
||
position: "relative",
|
||
},
|
||
exit: (gecisYonu: number) => ({
|
||
zIndex: 0,
|
||
x: hareketiAzalt ? 0 : gecisYonu < 0 ? "100%" : "-100%",
|
||
opacity: 0,
|
||
position: "absolute",
|
||
top: 0,
|
||
left: 0,
|
||
width: "100%",
|
||
}),
|
||
};
|
||
}
|
||
|
||
/** Geçişin zamanlaması; azaltılmış harekette x/height açıkça sıfırlanır ki
|
||
* varsayılan yaya düşüp oynamasın. */
|
||
export function adimGecisi(hareketiAzalt: boolean): Transition {
|
||
return hareketiAzalt
|
||
? {
|
||
opacity: { duration: 0.12 },
|
||
x: { duration: 0 },
|
||
height: { duration: 0 },
|
||
}
|
||
: {
|
||
x: YAY.adim,
|
||
height: YAY.adim,
|
||
opacity: { duration: 0.2 },
|
||
};
|
||
}
|