|
1 | 1 | <x-request-analytics::layouts.app> |
2 | | - <main class="container px-4 sm:px-6 lg:px-8 py-8"> |
| 2 | + <main class="container px-4 sm:px-6 lg:px-8 py-8" x-data="{ darkMode: localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches) }"> |
3 | 3 | <!-- Header Section --> |
4 | 4 | <div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-8"> |
5 | 5 | <div class="w-full sm:w-auto"> |
6 | | - <h1 class="text-2xl font-semibold text-gray-900 mb-2">Analytics Dashboard</h1> |
7 | | - <p class="text-sm text-gray-500">Track your website performance and user insights</p> |
| 6 | + <h1 class="text-2xl font-semibold text-gray-900 dark:text-gray-100 mb-2">Analytics Dashboard</h1> |
| 7 | + <p class="text-sm text-gray-500 dark:text-gray-400">Track your website performance and user insights</p> |
8 | 8 | </div> |
9 | | - <div class="w-full sm:w-auto"> |
| 9 | + <div class="w-full sm:w-auto flex items-center gap-3"> |
| 10 | + <!-- Dark Mode Toggle --> |
| 11 | + <button |
| 12 | + @click="darkMode = !darkMode; localStorage.theme = darkMode ? 'dark' : 'light'; document.documentElement.classList.toggle('dark', darkMode)" |
| 13 | + class="flex items-center justify-center w-10 h-10 rounded-lg bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors" |
| 14 | + title="Toggle dark mode" |
| 15 | + > |
| 16 | + <!-- Sun Icon --> |
| 17 | + <svg x-show="darkMode" class="w-5 h-5 text-yellow-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"> |
| 18 | + <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z" /> |
| 19 | + </svg> |
| 20 | + <!-- Moon Icon --> |
| 21 | + <svg x-show="!darkMode" class="w-5 h-5 text-gray-700" fill="none" stroke="currentColor" viewBox="0 0 24 24"> |
| 22 | + <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z" /> |
| 23 | + </svg> |
| 24 | + </button> |
| 25 | + |
10 | 26 | <form method="GET" action="{{ route(config('request-analytics.route.name')) }}" class="flex items-center gap-2 flex-wrap"> |
11 | 27 | <x-request-analytics::core.calendar-filter |
12 | 28 | :dateRange="$dateRange" |
13 | 29 | :startDate="request('start_date')" |
14 | 30 | :endDate="request('end_date')" |
15 | 31 | /> |
16 | | - <select name="request_category" class="bg-white border border-gray-300 rounded-lg px-3 pr-6 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 h-10"> |
| 32 | + <select name="request_category" class="bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-700 rounded-lg px-3 pr-6 text-sm text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 h-10"> |
17 | 33 | <option value="" {{ !request('request_category') ? 'selected' : '' }}>All Requests</option> |
18 | 34 | <option value="web" {{ request('request_category') == 'web' ? 'selected' : '' }}>Web Only</option> |
19 | 35 | <option value="api" {{ request('request_category') == 'api' ? 'selected' : '' }}>API Only</option> |
20 | 36 | </select> |
21 | | - <button type="submit" class="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2.5 rounded-lg text-sm font-medium focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 transition-colors h-10"> |
| 37 | + <button type="submit" class="bg-blue-600 hover:bg-blue-700 dark:bg-blue-500 dark:hover:bg-blue-600 text-white px-4 py-2.5 rounded-lg text-sm font-medium focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:ring-offset-gray-900 transition-colors h-10"> |
22 | 38 | Apply Filters |
23 | 39 | </button> |
24 | 40 | </form> |
|
27 | 43 |
|
28 | 44 | <!-- Key Metrics Cards --> |
29 | 45 | <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6 mb-8"> |
30 | | - <div class="bg-white rounded-xl shadow-sm border border-gray-100 p-6 hover:shadow-md transition-shadow duration-200"> |
| 46 | + <div class="bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-100 dark:border-gray-700 p-6 hover:shadow-md dark:hover:shadow-gray-900/50 transition-shadow duration-200"> |
31 | 47 | <x-request-analytics::stats.count label="Views" :value='$average["views"]'/> |
32 | 48 | </div> |
33 | | - <div class="bg-white rounded-xl shadow-sm border border-gray-100 p-6 hover:shadow-md transition-shadow duration-200"> |
| 49 | + <div class="bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-100 dark:border-gray-700 p-6 hover:shadow-md dark:hover:shadow-gray-900/50 transition-shadow duration-200"> |
34 | 50 | <x-request-analytics::stats.count label="Visitors" :value='$average["visitors"]'/> |
35 | 51 | </div> |
36 | | - <div class="bg-white rounded-xl shadow-sm border border-gray-100 p-6 hover:shadow-md transition-shadow duration-200"> |
| 52 | + <div class="bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-100 dark:border-gray-700 p-6 hover:shadow-md dark:hover:shadow-gray-900/50 transition-shadow duration-200"> |
37 | 53 | <x-request-analytics::stats.count label="Bounce Rate" :value='$average["bounce_rate"]'/> |
38 | 54 | </div> |
39 | | - <div class="bg-white rounded-xl shadow-sm border border-gray-100 p-6 hover:shadow-md transition-shadow duration-200"> |
| 55 | + <div class="bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-100 dark:border-gray-700 p-6 hover:shadow-md dark:hover:shadow-gray-900/50 transition-shadow duration-200"> |
40 | 56 | <x-request-analytics::stats.count label="Average Visit Time" :value='$average["average_visit_time"]'/> |
41 | 57 | </div> |
42 | 58 | </div> |
43 | 59 |
|
44 | 60 | <!-- Chart Section --> |
45 | | - <div class="bg-white rounded-xl shadow-sm border border-gray-100 p-6 mb-8"> |
| 61 | + <div class="bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-100 dark:border-gray-700 p-6 mb-8"> |
46 | 62 | <div class="mb-4"> |
47 | | - <h2 class="text-lg font-semibold text-gray-900">Traffic Overview</h2> |
48 | | - <p class="text-sm text-gray-500">Daily visitor and page view trends</p> |
| 63 | + <h2 class="text-lg font-semibold text-gray-900 dark:text-gray-100">Traffic Overview</h2> |
| 64 | + <p class="text-sm text-gray-500 dark:text-gray-400">Daily visitor and page view trends</p> |
49 | 65 | </div> |
50 | 66 | <x-request-analytics::stats.chart :labels='$labels' :datasets='$datasets' type="line"/> |
51 | 67 | </div> |
52 | 68 |
|
53 | 69 | <!-- Analytics Grid --> |
54 | | - <div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8"> |
55 | | - <div class="bg-white rounded-xl shadow-sm border border-gray-100 overflow-hidden"> |
| 70 | + <div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8 "> |
| 71 | + <div class="bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-100 dark:border-gray-700 overflow-hidden"> |
56 | 72 | <x-request-analytics::analytics.pages :pages='$pages'/> |
57 | 73 | </div> |
58 | | - <div class="bg-white rounded-xl shadow-sm border border-gray-100 overflow-hidden"> |
| 74 | + <div class="bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-100 dark:border-gray-700 overflow-hidden"> |
59 | 75 | <x-request-analytics::analytics.referrers :referrers='$referrers'/> |
60 | 76 | </div> |
61 | 77 | </div> |
62 | 78 |
|
63 | 79 | <!-- Additional Analytics --> |
64 | 80 | <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6"> |
65 | | - <div class="bg-white rounded-xl shadow-sm border border-gray-100 overflow-hidden"> |
| 81 | + <div class="bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-100 dark:border-gray-700 overflow-hidden"> |
66 | 82 | <x-request-analytics::analytics.browsers :browsers='$browsers'/> |
67 | 83 | </div> |
68 | | - <div class="bg-white rounded-xl shadow-sm border border-gray-100 overflow-hidden"> |
| 84 | + <div class="bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-100 dark:border-gray-700 overflow-hidden"> |
69 | 85 | <x-request-analytics::analytics.operating-systems :operatingSystems='$operatingSystems'/> |
70 | 86 | </div> |
71 | | - <div class="bg-white rounded-xl shadow-sm border border-gray-100 overflow-hidden"> |
| 87 | + <div class="bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-100 dark:border-gray-700 overflow-hidden"> |
72 | 88 | <x-request-analytics::analytics.devices :devices='$devices'/> |
73 | 89 | </div> |
74 | | - <div class="bg-white rounded-xl shadow-sm border border-gray-100 overflow-hidden"> |
| 90 | + <div class="bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-100 dark:border-gray-700 overflow-hidden"> |
75 | 91 | <x-request-analytics::analytics.countries :countries='$countries'/> |
76 | 92 | </div> |
77 | 93 | </div> |
|
0 commit comments