# Kappadokya AI Travel Planner - Component Documentation ## Premium Navbar ve Global Bileşenler Bu dokümantasyon, uygulamaya eklenen premium navbar ve global bileşenlerin kullanımını açıklar. --- ## 🎨 Tasarım Sistemi ### Renk Paleti Uygulama, modern ve premium bir görünüm için aşağıdaki renk paletini kullanır: **Light Mode:** - Primary Blue: `#3B82F6` (HSL: 217 91% 60%) - Primary Dark: `#1E40AF` (HSL: 221 83% 53%) - Secondary Pink: `#EC4899` (HSL: 328 86% 70%) - Success Green: `#10B981` (HSL: 142 71% 45%) - Warning Orange: `#F59E0B` (HSL: 38 92% 50%) - Error Red: `#EF4444` (HSL: 0 84.2% 60.2%) **Dark Mode:** - Otomatik olarak uyumlu koyu tonlar ### Kullanım Tailwind CSS semantic token'ları kullanın: ```tsx

Açıklama metni

``` --- ## 📦 Bileşenler ### 1. Navbar Premium, responsive navbar bileşeni. **Özellikler:** - ✅ Sticky pozisyon (scroll'da sabit kalır) - ✅ Arama modalı - ✅ Tema değiştirici (light/dark) - ✅ Bildirimler dropdown'u (giriş yapılmışsa) - ✅ Kullanıcı menüsü dropdown'u - ✅ Mobil hamburger menü - ✅ Scroll efekti (shadow animasyonu) **Kullanım:** ```tsx import { Navbar } from '@/components/layout/Navbar'; function App() { return ( <> {/* Sayfa içeriği */} ); } ``` **Not:** Navbar artık `App.tsx` içinde global olarak kullanılıyor, sayfalarda tekrar eklemeye gerek yok. --- ### 2. SearchModal Arama modalı bileşeni. **Özellikler:** - ✅ Gerçek zamanlı arama - ✅ Son aramalar - ✅ Kategori bazlı sonuçlar (Mekan, Rota, Blog) - ✅ Klavye navigasyonu (Escape ile kapatma) **Kullanım:** ```tsx import { SearchModal } from '@/components/layout/SearchModal'; const [searchOpen, setSearchOpen] = useState(false); ``` --- ### 3. NotificationsDropdown Bildirimler dropdown bileşeni. **Özellikler:** - ✅ Okunmamış bildirim sayısı badge'i - ✅ Bildirim tipleri (success, info, warning) - ✅ Scroll edilebilir liste - ✅ Tümünü gör linki **Kullanım:** ```tsx import { NotificationsDropdown } from '@/components/layout/NotificationsDropdown'; ``` --- ### 4. ThemeToggle Tema değiştirici bileşeni. **Özellikler:** - ✅ Light/Dark mode geçişi - ✅ LocalStorage'da tercih kaydı - ✅ Sistem teması desteği **Kullanım:** ```tsx import { ThemeToggle } from '@/components/layout/ThemeToggle'; ``` --- ### 5. MobileMenu Mobil hamburger menü bileşeni. **Özellikler:** - ✅ Sheet (yan panel) kullanımı - ✅ Kullanıcı bilgileri (giriş yapılmışsa) - ✅ Tüm navigasyon linkleri - ✅ Giriş/Kayıt butonları (giriş yapılmamışsa) - ✅ Smooth animasyonlar **Kullanım:** ```tsx import { MobileMenu } from '@/components/layout/MobileMenu'; ``` --- ### 6. PageHeader Sayfa başlığı bileşeni. **Özellikler:** - ✅ Breadcrumb desteği - ✅ Başlık ve açıklama - ✅ Aksiyon butonları alanı **Kullanım:** ```tsx import { PageHeader } from '@/components/common/PageHeader'; import { Button } from '@/components/ui/button'; import { Plus } from 'lucide-react'; Yeni Gezi } /> ``` --- ### 7. LoadingSkeleton Yükleme iskelet bileşeni. **Özellikler:** - ✅ Farklı tipler: card, text, avatar, table, list - ✅ Özelleştirilebilir sayı - ✅ Pulse animasyonu **Kullanım:** ```tsx import { LoadingSkeleton } from '@/components/common/LoadingSkeleton'; // Kart iskeletleri // Metin iskeletleri // Avatar iskeletleri // Tablo iskeletleri // Liste iskeletleri ``` --- ### 8. EmptyState Boş durum bileşeni. **Özellikler:** - ✅ İkon desteği - ✅ Başlık ve açıklama - ✅ Aksiyon butonu - ✅ Opsiyonel görsel **Kullanım:** ```tsx import { EmptyState } from '@/components/common/EmptyState'; import { Luggage } from 'lucide-react'; navigate('/planner') }} /> ``` --- ### 9. ErrorBoundary Hata yakalama bileşeni. **Özellikler:** - ✅ React hata yakalama - ✅ Kullanıcı dostu hata mesajı - ✅ Geliştirme modunda detaylı hata bilgisi - ✅ Sayfa yenileme ve ana sayfa butonları **Kullanım:** ```tsx import { ErrorBoundary } from '@/components/common/ErrorBoundary'; ``` **Not:** ErrorBoundary artık `App.tsx` içinde global olarak kullanılıyor. --- ## 🎯 Kullanım Örnekleri ### Tam Sayfa Örneği ```tsx import { PageHeader } from '@/components/common/PageHeader'; import { LoadingSkeleton } from '@/components/common/LoadingSkeleton'; import { EmptyState } from '@/components/common/EmptyState'; import { Button } from '@/components/ui/button'; import { Plus, Luggage } from 'lucide-react'; import { useState, useEffect } from 'react'; export default function TripsPage() { const [loading, setLoading] = useState(true); const [trips, setTrips] = useState([]); useEffect(() => { // Veri yükleme loadTrips(); }, []); const loadTrips = async () => { setLoading(true); // API çağrısı setLoading(false); }; return (
Yeni Gezi } /> {loading ? ( ) : trips.length === 0 ? ( navigate('/planner') }} /> ) : (
{trips.map(trip => ( ))}
)}
); } ``` --- ## 🎨 Stil Kuralları ### CSS Sınıfları Özel CSS sınıfları `src/index.css` içinde tanımlanmıştır: ```css /* Navbar shadow */ .navbar-shadow { box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1); } /* Smooth transitions */ .transition-smooth { transition: all 200ms ease; } /* Backdrop blur */ .backdrop-blur-navbar { backdrop-filter: blur(12px); } /* Notification badge */ .notification-badge { /* Bildirim sayısı badge stili */ } /* Gradient text */ .gradient-text { background: linear-gradient(135deg, hsl(var(--primary)), hsl(var(--secondary))); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; } ``` --- ## 📱 Responsive Davranış ### Breakpoint'ler - **Mobile:** < 640px - **Tablet:** 640px - 1024px - **Desktop:** > 1024px ### Navbar Davranışı **Desktop (>1024px):** - Tam navbar görünür - Orta navigasyon linkleri görünür - Kullanıcı menüsü dropdown - Hamburger menü gizli **Tablet (640px-1024px):** - Logo küçülür - Orta navigasyon gizli - Hamburger menü görünür - Sağ kısım: İkonlar + kullanıcı menüsü **Mobile (<640px):** - Tam hamburger menü - Sadece logo + ikonlar (arama, menü) - Orta navigasyon gizli - Kullanıcı menüsü dropdown gizli --- ## 🔧 Özelleştirme ### Renkleri Değiştirme `src/index.css` dosyasında CSS değişkenlerini düzenleyin: ```css :root { --primary: 217 91% 60%; /* Mavi */ --secondary: 328 86% 70%; /* Pembe */ /* ... diğer renkler */ } ``` ### Navbar Yüksekliğini Değiştirme ```tsx // Navbar.tsx içinde
{/* h-16 = 64px */} ``` Değiştirdikten sonra, sticky elementlerin `top` değerini de güncelleyin: ```tsx // ExplorePage.tsx içinde
{/* Navbar yüksekliği kadar */} ``` --- ## 🚀 Performans İpuçları 1. **Lazy Loading:** Büyük bileşenleri lazy load edin 2. **Memoization:** React.memo kullanarak gereksiz render'ları önleyin 3. **Debouncing:** Arama inputlarında debounce kullanın 4. **Image Optimization:** Görselleri optimize edin ve lazy load edin --- ## 📚 Ek Kaynaklar - [shadcn/ui Documentation](https://ui.shadcn.com/) - [Tailwind CSS Documentation](https://tailwindcss.com/) - [Lucide Icons](https://lucide.dev/) - [React Router Documentation](https://reactrouter.com/) --- ## 🐛 Sorun Giderme ### Navbar görünmüyor - `App.tsx` içinde `` bileşeninin eklendiğinden emin olun - Sayfa bileşenlerinde tekrar `` eklemeyin ### Tema değişmiyor - LocalStorage'ın etkin olduğundan emin olun - Tarayıcı konsolunda hata olup olmadığını kontrol edin ### Mobil menü açılmıyor - Sheet bileşeninin doğru import edildiğinden emin olun - `lg:hidden` sınıfının doğru kullanıldığını kontrol edin --- ## 📝 Lisans © 2026 Kappadokya AI Travel Planner