Dev paneli Apple hareket diliyle yenilendi; animasyon ve UX düzeltmeleri
All checks were successful
Deploy / deploy (push) Successful in 9m29s

- Dev paneli: DEV çipinden layoutId morph ile büyüyüp küçülür (kritik sönümlü
  spring), yarı saydam malzeme (backdrop-blur + saturate), basışta anında
  scale geri bildirimi, Escape ile kapanış, reduced-motion/transparency desteği
- TypingAnimation ve TextLoop: prefers-reduced-motion'da sonsuz döngü durur,
  ilk metin sabit gösterilir
- kt-unblur: reduced-motion'da blur çözülmesi yerine kısa yumuşak belirme
- Sihirbaz: reduced-motion'da adım geçişinde height/x anında oturur;
  adım noktalarında transition-all yerine kapsamlı geçiş özellikleri
- Sihirbaz il adımındaki arama kutusu kaldırıldı; tüm iller program sayısına
  göre sıralı çip olarak listelenir
- /giris: spinner yerine kartın iskeletini gösteren route-level Skeleton

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-07-26 15:26:40 +03:00
parent 7288c926d0
commit 40a1c8ef8e
7 changed files with 338 additions and 224 deletions

View File

@@ -12,6 +12,7 @@ import {
import {
motion,
useInView,
useReducedMotion,
type DOMMotionComponents,
type HTMLMotionProps,
type MotionProps,
@@ -84,6 +85,9 @@ export function TypingAnimation({
const [currentWordIndex, setCurrentWordIndex] = useState(0)
const [currentCharIndex, setCurrentCharIndex] = useState(0)
const [phase, setPhase] = useState<"typing" | "pause" | "deleting">("typing")
// Sürekli yazıp silen döngü, hareket azaltılsın diyen kullanıcı için
// rahatsız edici: ilk metin tam ve sabit gösterilir, imleç yanmaz.
const azMotion = useReducedMotion()
const elementRef = useRef<HTMLElement | null>(null)
const isInView = useInView(elementRef as RefObject<Element>, {
amount: 0.3,
@@ -117,7 +121,7 @@ export function TypingAnimation({
useEffect(() => {
let timeout: ReturnType<typeof setTimeout> | null = null
if (shouldStart && wordsToAnimate.length > 0) {
if (!azMotion && shouldStart && wordsToAnimate.length > 0) {
const timeoutDelay =
delay > 0 && displayedText === ""
? delay
@@ -175,6 +179,7 @@ export function TypingAnimation({
}
}
}, [
azMotion,
shouldStart,
phase,
currentCharIndex,
@@ -225,8 +230,8 @@ export function TypingAnimation({
)}
{...props}
>
{displayedText}
{shouldShowCursor && (
{azMotion ? (wordsToAnimate[0] ?? "") : displayedText}
{shouldShowCursor && !azMotion && (
<span
className={cn("inline-block", blinkCursor && "animate-blink-cursor")}
>