feat: Complete mobile UX/UI overhaul

Major improvements:
- New CSS design system with custom properties (tokens)
- Consistent spacing scale (4px base)
- Touch-friendly sizing (44px min targets)
- Improved Carousel with better touch handling and rubber-band effect
- Enhanced FilterControls (auto-collapse on mobile)
- Better stat card styling with change indicators
- Refined chart cards and toggle switches
- Smoother transitions and micro-interactions
- Better RTL support
- Print styles
- Responsive breakpoints for tablet (1024px), mobile (768px), and small mobile (375px)
- Cleaner typography hierarchy
- Subtle shadows and depth

Components updated:
- App.css: Complete rewrite with design tokens
- Carousel.jsx: Better touch gestures with velocity detection
- StatCard.jsx: Improved change indicator styling
- FilterControls.jsx: Auto-collapse on mobile
- EmptyState.jsx: Better accessibility
- ChartExport.js: Cleaned up unused imports
This commit is contained in:
fahed
2026-02-03 15:02:29 +03:00
parent f17e19f3f8
commit 0e5d285680
18 changed files with 2610 additions and 1610 deletions

155
src/locales/ar.json Normal file
View File

@@ -0,0 +1,155 @@
{
"app": {
"name": "هاي هلا داتا",
"loading": "جارٍ تحميل البيانات...",
"error": "تعذر تحميل البيانات",
"retry": "إعادة المحاولة"
},
"nav": {
"dashboard": "لوحة التحكم",
"comparison": "المقارنة",
"compare": "مقارنة",
"slides": "الشرائح",
"labels": "التسميات",
"labelsOn": "التسميات مفعّلة",
"labelsOff": "التسميات معطّلة",
"labelsTooltip": "عرض القيم على الرسوم البيانية"
},
"toggle": {
"on": "تشغيل",
"off": "إيقاف"
},
"dataSources": {
"museums": "المتاحف",
"coffees": "المقاهي",
"ecommerce": "التجارة الإلكترونية",
"soon": "قريباً"
},
"filters": {
"title": "الفلاتر",
"year": "السنة",
"district": "المنطقة",
"museum": "المتحف",
"quarter": "الربع",
"allYears": "كل السنوات",
"allDistricts": "كل المناطق",
"allMuseums": "كل المتاحف",
"allQuarters": "كل الأرباع",
"reset": "إعادة تعيين الفلاتر"
},
"metrics": {
"revenue": "الإيرادات",
"totalRevenue": "إجمالي الإيرادات",
"visitors": "الزوار",
"totalVisitors": "إجمالي الزوار",
"tickets": "التذاكر",
"totalTickets": "إجمالي التذاكر",
"avgRevenue": "متوسط الإيراد/زائر",
"avgRevenuePerVisitor": "متوسط الإيراد لكل زائر",
"pilgrims": "المعتمرون",
"captureRate": "نسبة الاستقطاب"
},
"dashboard": {
"title": "لوحة التحكم",
"subtitle": "تحليلات المتاحف المباشرة من جداول بيانات Google",
"noData": "لا توجد بيانات",
"noDataMessage": "لا توجد سجلات تطابق الفلاتر الحالية. حاول تعديل اختيارك.",
"quarterlyComparison": "مقارنة ربع سنوية: 2024 مقابل 2025",
"revenueTrends": "اتجاهات الإيرادات",
"visitorsByMuseum": "الزوار حسب المتحف",
"revenueByMuseum": "الإيرادات حسب المتحف",
"quarterlyRevenue": "الإيرادات الربعية (سنوي)",
"districtPerformance": "أداء المناطق",
"captureRateChart": "نسبة الاستقطاب مقابل المعتمرين"
},
"table": {
"quarter": "الربع",
"rev2024": "إيرادات 2024",
"rev2025": "إيرادات 2025",
"change": "التغيير",
"visitors2024": "زوار 2024",
"visitors2025": "زوار 2025",
"capture2024": "استقطاب 2024",
"capture2025": "استقطاب 2025"
},
"time": {
"daily": "يومي",
"weekly": "أسبوعي",
"monthly": "شهري",
"q1": "ر1",
"q2": "ر2",
"q3": "ر3",
"q4": "ر4",
"h1": "ن1",
"h2": "ن2",
"fullYear": "السنة كاملة"
},
"months": {
"january": "يناير",
"february": "فبراير",
"march": "مارس",
"april": "أبريل",
"may": "مايو",
"june": "يونيو",
"july": "يوليو",
"august": "أغسطس",
"september": "سبتمبر",
"october": "أكتوبر",
"november": "نوفمبر",
"december": "ديسمبر"
},
"comparison": {
"title": "مقارنة الفترات",
"subtitle": "اختر فترة وسنة — تتم المقارنة تلقائياً مع نفس الفترة من السنة السابقة",
"selectPeriod": "اختر الفترة",
"period": "الفترة",
"from": "من",
"to": "إلى",
"custom": "مخصص",
"previousPeriod": "الفترة السابقة",
"currentPeriod": "الفترة الحالية",
"vs": "مقابل",
"noData": "لا توجد بيانات لهذه الفترة",
"noDataMessage": "لم يتم العثور على سجلات للنطاق الزمني والفلاتر المحددة.",
"trend": "الاتجاه",
"byMuseum": "حسب المتحف",
"pendingData": "البيانات لم تُنشر بعد"
},
"slides": {
"title": "منشئ العروض التقديمية",
"subtitle": "إنشاء شرائح مع رسوم بيانية وتصديرها كـ HTML أو PDF",
"addSlide": "إضافة شريحة",
"preview": "معاينة",
"exportHtml": "تصدير HTML",
"slidesCount": "الشرائح",
"noSlides": "لا توجد شرائح بعد",
"addFirst": "أضف شريحتك الأولى",
"slideTitle": "عنوان الشريحة",
"chartType": "نوع الرسم البياني",
"metric": "المقياس",
"startDate": "تاريخ البداية",
"endDate": "تاريخ النهاية",
"showYoY": "إظهار مقارنة سنة بسنة",
"exit": "خروج",
"revenueTrend": "اتجاه الإيرادات",
"byMuseum": "حسب المتحف",
"kpiSummary": "ملخص مؤشرات الأداء",
"yoyComparison": "مقارنة سنوية"
},
"charts": {
"revenueTrend": "اتجاه الإيرادات",
"visitors": "الزوار",
"revenue": "الإيرادات",
"quarterly": "ربع سنوي",
"district": "المنطقة",
"captureRate": "نسبة الاستقطاب"
},
"language": {
"switch": "EN"
},
"export": {
"exportAll": "تصدير كل الرسوم البيانية",
"exportSlides": "تصدير للعرض التقديمي",
"exporting": "جارٍ التصدير..."
}
}

155
src/locales/en.json Normal file
View File

@@ -0,0 +1,155 @@
{
"app": {
"name": "HiHala Data",
"loading": "Loading data...",
"error": "Unable to load data",
"retry": "Retry"
},
"nav": {
"dashboard": "Dashboard",
"comparison": "Comparison",
"compare": "Compare",
"slides": "Slides",
"labels": "Labels",
"labelsOn": "Labels On",
"labelsOff": "Labels Off",
"labelsTooltip": "Show values on charts"
},
"toggle": {
"on": "On",
"off": "Off"
},
"dataSources": {
"museums": "Museums",
"coffees": "Coffees",
"ecommerce": "eCommerce",
"soon": "soon"
},
"filters": {
"title": "Filters",
"year": "Year",
"district": "District",
"museum": "Museum",
"quarter": "Quarter",
"allYears": "All Years",
"allDistricts": "All Districts",
"allMuseums": "All Museums",
"allQuarters": "All Quarters",
"reset": "Reset Filters"
},
"metrics": {
"revenue": "Revenue",
"totalRevenue": "Total Revenue",
"visitors": "Visitors",
"totalVisitors": "Total Visitors",
"tickets": "Tickets",
"totalTickets": "Total Tickets",
"avgRevenue": "Avg Rev/Visitor",
"avgRevenuePerVisitor": "Avg Revenue/Visitor",
"pilgrims": "Pilgrims",
"captureRate": "Capture Rate"
},
"dashboard": {
"title": "Dashboard",
"subtitle": "Real-time museum analytics from Google Sheets",
"noData": "No data found",
"noDataMessage": "No records match your current filters. Try adjusting your selection.",
"quarterlyComparison": "Quarterly Comparison: 2024 vs 2025",
"revenueTrends": "Revenue Trends",
"visitorsByMuseum": "Visitors by Museum",
"revenueByMuseum": "Revenue by Museum",
"quarterlyRevenue": "Quarterly Revenue (YoY)",
"districtPerformance": "District Performance",
"captureRateChart": "Capture Rate vs Umrah Pilgrims"
},
"table": {
"quarter": "Quarter",
"rev2024": "Rev 2024",
"rev2025": "Rev 2025",
"change": "Change",
"visitors2024": "Visitors 2024",
"visitors2025": "Visitors 2025",
"capture2024": "Capture 2024",
"capture2025": "Capture 2025"
},
"time": {
"daily": "Daily",
"weekly": "Weekly",
"monthly": "Monthly",
"q1": "Q1",
"q2": "Q2",
"q3": "Q3",
"q4": "Q4",
"h1": "H1",
"h2": "H2",
"fullYear": "Full Year"
},
"months": {
"january": "January",
"february": "February",
"march": "March",
"april": "April",
"may": "May",
"june": "June",
"july": "July",
"august": "August",
"september": "September",
"october": "October",
"november": "November",
"december": "December"
},
"comparison": {
"title": "Period Comparison",
"subtitle": "Select a period and year — automatically compares with the same period in the previous year",
"selectPeriod": "Select Period",
"period": "Period",
"from": "From",
"to": "To",
"custom": "Custom",
"previousPeriod": "Previous Period",
"currentPeriod": "Current Period",
"vs": "vs",
"noData": "No data for this period",
"noDataMessage": "No records found for the selected date range and filters.",
"trend": "Trend",
"byMuseum": "By Museum",
"pendingData": "Data not published yet"
},
"slides": {
"title": "Presentation Builder",
"subtitle": "Create slides with charts and export as HTML or PDF",
"addSlide": "Add Slide",
"preview": "Preview",
"exportHtml": "Export HTML",
"slidesCount": "Slides",
"noSlides": "No slides yet",
"addFirst": "Add your first slide",
"slideTitle": "Slide Title",
"chartType": "Chart Type",
"metric": "Metric",
"startDate": "Start Date",
"endDate": "End Date",
"showYoY": "Show Year-over-Year Comparison",
"exit": "Exit",
"revenueTrend": "Revenue Trend",
"byMuseum": "By Museum",
"kpiSummary": "KPI Summary",
"yoyComparison": "YoY Comparison"
},
"charts": {
"revenueTrend": "Revenue Trend",
"visitors": "Visitors",
"revenue": "Revenue",
"quarterly": "Quarterly",
"district": "District",
"captureRate": "Capture Rate"
},
"language": {
"switch": "عربي"
},
"export": {
"exportAll": "Export All Charts",
"exportSlides": "Export for Slides",
"exporting": "Exporting..."
}
}