33{% block title %}Contact Messages{% endblock %}
44
55{% block content %}
6- < div class ="space-y-8 " x-data ="{ selectedMessage: null, modalOpen: false } ">
6+ < div class ="space-y-6 " x-data ="{ selectedMessage: null, modalOpen: false } ">
77 <!-- Header -->
8- < div class ="flex flex-col md:flex-row justify-between items-end md:items- center gap-4 border-b border-slate-100 dark:border-slate-800 pb-8 ">
8+ < div class ="flex flex-col md:flex-row justify-between items-center gap-4 pb-6 border-b border-slate-200 dark:border-slate-800 ">
99 < div >
10- < h1 class ="text-3xl font-black text-slate-900 dark:text-white tracking-tight uppercase "> Contact Messages</ h1 >
11- < p class ="text-slate-500 dark:text-slate-400 font-medium text-xs uppercase tracking-widest mt-1 "> Manage inquiries from your website</ p >
10+ < h1 class ="text-2xl font-extrabold text-slate-900 dark:text-white tracking-tight "> Contact Messages</ h1 >
11+ < p class ="text-slate-500 dark:text-slate-400 text-sm "> Manage inquiries from your website visitors </ p >
1212 </ div >
1313 </ div >
1414
15- <!-- Table -->
16- < div class ="bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 rounded-3xl overflow-hidden shadow-sm ">
17- < div class ="overflow-x-auto ">
18- < table class ="w-full text-left border-collapse ">
15+ <!-- Table Container -->
16+ < div class ="bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 rounded-2xl overflow-hidden shadow-sm ">
17+ < div class ="overflow-x-auto p-4 ">
18+ < table class ="w-full text-left border-collapse border border-slate-200 dark:border-slate-700 rounded-lg overflow-hidden ">
1919 < thead >
20- < tr class ="bg-slate-50/50 dark:bg-slate-800/50 border-b border- slate-100 dark:border -slate-800 ">
21- < th class ="px-6 py-4 text-[10px] font-black text- slate-400 uppercase tracking-[0.2em] " > Name </ th >
22- < th class ="px-6 py-4 text-[10px] font-black text- slate-400 uppercase tracking-[0.2em] "> Email</ th >
23- < th class ="px-6 py-4 text-[10px] font-black text- slate-400 uppercase tracking-[0.2em] " > Date </ th >
24- < th class ="px-6 py-4 text-[10px] font-black text- slate-400 uppercase tracking-[0.2em] text-right "> Actions</ th >
20+ < tr class ="bg-slate-100 dark:bg-slate-800 text-[11px] font-bold text- slate-600 dark:text -slate-300 uppercase tracking-wider ">
21+ < th class ="px-6 py-4 border border- slate-200 dark:border-slate-700 " > Sender </ th >
22+ < th class ="px-6 py-4 border border- slate-200 dark:border-slate-700 "> Email Address </ th >
23+ < th class ="px-6 py-4 border border- slate-200 dark:border-slate-700 " > Received On </ th >
24+ < th class ="px-6 py-4 border border- slate-200 dark:border-slate-700 text-right "> Actions</ th >
2525 </ tr >
2626 </ thead >
27- < tbody class ="divide-y divide-slate-100 dark:divide-slate-800 ">
27+ < tbody class ="divide-y divide-slate-200 dark:divide-slate-700 text-sm ">
2828 {% for message in messages.items %}
29- < tr class ="hover:bg-slate-50/50 dark:hover:bg-slate-800/30 transition-colors group ">
30- < td class ="px-6 py-4 ">
31- < span class =" text-xs font-bold text-slate-900 dark:text-white " > {{ message.name }}</ span >
29+ < tr class ="hover:bg-slate-50 dark:hover:bg-slate-800/50 transition-colors ">
30+ < td class ="px-6 py-4 border border-slate-200 dark:border-slate-700 font-semibold text-slate-900 dark:text-white ">
31+ {{ message.name }}
3232 </ td >
33- < td class ="px-6 py-4 text-xs text-slate-500 dark:text-slate-400 ">
33+ < td class ="px-6 py-4 border border-slate-200 dark:border-slate-700 text-slate-600 dark:text-slate-400 ">
3434 {{ message.email }}
3535 </ td >
36- < td class ="px-6 py-4 text-[10px] font-bold text-slate-400 uppercase tracking-wider ">
37- {{ message.created_date.strftime('%Y-%m-%d %H:%M') if message.created_date else '' }}
36+ < td class ="px-6 py-4 border border-slate-200 dark:border-slate-700 text-slate-500 dark:text-slate-500 tabular-nums ">
37+ {{ message.created_date.strftime('%Y-%m-%d %H:%M') if message.created_date else '- ' }}
3838 </ td >
39- < td class ="px-6 py-4 text-right ">
39+ < td class ="px-6 py-4 border border-slate-200 dark:border-slate-700 text-right ">
4040 < button
41- @click ="selectedMessage = { name: ' {{ message.name }}' , email: ' {{ message.email }}' , content: ` {{ message.message | replace('\n', '<br>') | safe }}` }; modalOpen = true "
42- class ="inline-flex items-center gap-2 px-4 py-2 rounded-xl bg-primary/10 text-primary hover:bg-primary hover:text-white text-[10px] font-black uppercase tracking-widest transition-all ">
43- < i class ="fas fa-eye "> </ i >
44- View
41+ @click ="selectedMessage = { name: {{ message.name|tojson }}, email: {{ message.email|tojson }}, content: {{ message.message|tojson }} }; modalOpen = true "
42+ class ="inline-flex items-center px-3 py-1.5 rounded-lg bg-indigo-600 text-white hover:bg-indigo-700 transition-all font-bold text-xs shadow-sm ">
43+ < i class ="fas fa-envelope-open-text mr-2 "> </ i >
44+ View Message
4545 </ button >
4646 </ td >
4747 </ tr >
4848 {% endfor %}
49+
4950 {% if not messages.items %}
5051 < tr >
51- < td colspan ="4 " class ="px-6 py-12 text-center ">
52- < div class ="flex flex-col items-center ">
53- < div class ="w-12 h-12 rounded-2xl bg-slate-50 dark:bg-slate-800 flex items-center justify-center text-slate-300 dark:text-slate-600 text-xl mb-4 ">
54- < i class ="fas fa-inbox "> </ i >
55- </ div >
56- < p class ="text-xs font-bold text-slate-400 uppercase tracking-widest "> No messages found</ p >
52+ < td colspan ="4 " class ="px-6 py-16 text-center text-slate-400 ">
53+ < div class ="flex flex-col items-center gap-2 ">
54+ < i class ="fas fa-inbox text-3xl opacity-20 "> </ i >
55+ < p class ="font-medium "> No messages found in your inbox</ p >
5756 </ div >
5857 </ td >
5958 </ tr >
@@ -64,74 +63,44 @@ <h1 class="text-3xl font-black text-slate-900 dark:text-white tracking-tight upp
6463
6564 <!-- Pagination -->
6665 {% if messages.pages > 1 %}
67- < div class ="px-6 py-4 bg-slate-50/50 dark:bg-slate-800/50 border-t border-slate-100 dark:border-slate-800 flex justify-between items-center ">
68- < div class ="text-[10px] font-bold text-slate-400 uppercase tracking-widest ">
69- Page {{ messages.page }} of {{ messages.pages }}
70- </ div >
66+ < div class ="px-6 py-4 bg-slate-50 dark:bg-slate-800/30 border-t border-slate-200 dark:border-slate-800 flex items-center justify-between ">
67+ < span class ="text-xs text-slate-500 font-medium "> Page {{ messages.page }} of {{ messages.pages }}</ span >
7168 < div class ="flex gap-2 ">
7269 {% if messages.has_prev %}
73- < a href ="{{ url_for('contact.dashboard', page=messages.prev_num) }} " class ="px-3 py-1 rounded-lg border border-slate-200 dark:border-slate-700 text-[10px] font-black uppercase tracking-widest hover: bg-white dark:hover: bg-slate-900 transition-all text-slate-600 dark:text-slate-300 " > Prev </ a >
70+ < a href ="{{ url_for('contact.dashboard', page=messages.prev_num) }} " class ="px-3 py-1 rounded-md border border-slate-300 dark:border-slate-700 bg-white dark:bg-slate-900 text-xs font-bold text-slate-600 dark:text-slate-300 hover:bg-slate-50 " > Previous </ a >
7471 {% endif %}
7572 {% if messages.has_next %}
76- < a href ="{{ url_for('contact.dashboard', page=messages.next_num) }} " class ="px-3 py-1 rounded-lg border border-slate-200 dark:border-slate-700 text-[10px] font-black uppercase tracking-widest hover: bg-white dark:hover: bg-slate-900 transition-all text-slate-600 dark:text-slate-300 "> Next</ a >
73+ < a href ="{{ url_for('contact.dashboard', page=messages.next_num) }} " class ="px-3 py-1 rounded-md border border-slate-300 dark:border-slate-700 bg-white dark:bg-slate-900 text-xs font-bold text-slate-600 dark:text-slate-300 hover:bg-slate-50 "> Next</ a >
7774 {% endif %}
7875 </ div >
7976 </ div >
8077 {% endif %}
8178 </ div >
8279
83- <!-- Alpine Modal -->
84- < div
85- x-show ="modalOpen "
86- class ="fixed inset-0 z-50 overflow-y-auto "
87- x-cloak
88- >
89- < div class ="flex items-center justify-center min-h-screen px-4 pt-4 pb-20 text-center sm:block sm:p-0 ">
90- <!-- Overlay -->
91- < div
92- x-show ="modalOpen "
93- x-transition:enter ="ease-out duration-300 "
94- x-transition:enter-start ="opacity-0 "
95- x-transition:enter-end ="opacity-100 "
96- x-transition:leave ="ease-in duration-200 "
97- x-transition:leave-start ="opacity-100 "
98- x-transition:leave-end ="opacity-0 "
99- @click ="modalOpen = false "
100- class ="fixed inset-0 transition-opacity bg-slate-950/60 backdrop-blur-sm "
101- > </ div >
102-
103- <!-- Modal Panel -->
104- < div
105- x-show ="modalOpen "
106- x-transition:enter ="ease-out duration-300 "
107- x-transition:enter-start ="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95 "
108- x-transition:enter-end ="opacity-100 translate-y-0 sm:scale-100 "
109- x-transition:leave ="ease-in duration-200 "
110- x-transition:leave-start ="opacity-100 translate-y-0 sm:scale-100 "
111- x-transition:leave-end ="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95 "
112- class ="inline-block w-full max-w-xl p-8 my-8 overflow-hidden text-left align-middle transition-all transform bg-white dark:bg-slate-900 shadow-2xl rounded-3xl border border-slate-100 dark:border-slate-800 "
113- >
114- < div class ="flex justify-between items-start mb-6 ">
80+ <!-- Modal -->
81+ < template x-if ="modalOpen ">
82+ < div class ="fixed inset-0 z-50 flex items-center justify-center p-4 ">
83+ < div class ="absolute inset-0 bg-slate-900/60 backdrop-blur-sm " @click ="modalOpen = false "> </ div >
84+ < div class ="relative bg-white dark:bg-slate-900 w-full max-w-lg rounded-2xl shadow-2xl overflow-hidden border border-slate-200 dark:border-slate-800 animate-in zoom-in duration-200 ">
85+ < div class ="p-6 border-b border-slate-100 dark:border-slate-800 flex justify-between items-start ">
11586 < div >
116- < h3 class ="text-xl font-black text-slate-900 dark:text-white uppercase tracking-tight " x-text ="selectedMessage? .name "> </ h3 >
117- < p class ="text-[10px] font-bold text-primary uppercase tracking-widest mt-1 " x-text ="selectedMessage? .email "> </ p >
87+ < h3 class ="text-lg font-bold text-slate-900 dark:text-white " x-text ="selectedMessage.name "> </ h3 >
88+ < p class ="text-xs text-indigo-600 dark: text-indigo-400 font-medium " x-text ="selectedMessage.email "> </ p >
11889 </ div >
119- < button @click ="modalOpen = false " class ="text-slate-400 hover:text-slate-600 dark:hover:text-white transition-colors ">
90+ < button @click ="modalOpen = false " class ="text-slate-400 hover:text-slate-600 dark:hover:text-white ">
12091 < i class ="fas fa-times "> </ i >
12192 </ button >
12293 </ div >
123-
124- < div class ="bg-slate-50 dark:bg-slate-800/50 rounded-2xl p-6 border border-slate-100 dark:border-slate-700/50 ">
125- < div class ="text-sm text-slate-600 dark:text-slate-300 leading-relaxed whitespace-pre-wrap " x-html ="selectedMessage?.content "> </ div >
94+ < div class ="p-6 bg-slate-50/50 dark:bg-slate-800/20 ">
95+ < div class ="text-sm text-slate-700 dark:text-slate-300 whitespace-pre-wrap leading-relaxed " x-text ="selectedMessage.content "> </ div >
12696 </ div >
127-
128- < div class ="mt-8 flex justify-end ">
129- < button @click ="modalOpen = false " class ="px-6 py-3 rounded-2xl bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 text-[10px] font-black uppercase tracking-[0.2em] hover:bg-slate-200 dark:hover:bg-slate-700 transition-all ">
97+ < div class ="p-4 bg-slate-50 dark:bg-slate-800/50 flex justify-end ">
98+ < button @click ="modalOpen = false " class ="px-4 py-2 rounded-lg bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700 text-xs font-bold text-slate-600 dark:text-slate-300 shadow-sm hover:bg-slate-50 transition-all ">
13099 Close
131100 </ button >
132101 </ div >
133102 </ div >
134103 </ div >
135- </ div >
104+ </ template >
136105</ div >
137106{% endblock %}
0 commit comments