Merge dev into preprod: WAVE accessibility fixes
This commit is contained in:
commit
c2a236b406
|
|
@ -97,7 +97,7 @@ export default function ContactPage() {
|
||||||
{/* Nom complet */}
|
{/* Nom complet */}
|
||||||
<div>
|
<div>
|
||||||
<label htmlFor="fullName" className="block text-sm font-semibold text-gray-700 mb-2">
|
<label htmlFor="fullName" className="block text-sm font-semibold text-gray-700 mb-2">
|
||||||
Nom complet <span className="text-red-500">*</span>
|
Nom complet <span className="text-red-600" aria-hidden="true">*</span>
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
id="fullName"
|
id="fullName"
|
||||||
|
|
@ -114,7 +114,7 @@ export default function ContactPage() {
|
||||||
{/* Email */}
|
{/* Email */}
|
||||||
<div>
|
<div>
|
||||||
<label htmlFor="email" className="block text-sm font-semibold text-gray-700 mb-2">
|
<label htmlFor="email" className="block text-sm font-semibold text-gray-700 mb-2">
|
||||||
Email <span className="text-red-500">*</span>
|
Email <span className="text-red-600" aria-hidden="true">*</span>
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
id="email"
|
id="email"
|
||||||
|
|
@ -131,7 +131,7 @@ export default function ContactPage() {
|
||||||
{/* Sujet */}
|
{/* Sujet */}
|
||||||
<div>
|
<div>
|
||||||
<label htmlFor="subject" className="block text-sm font-semibold text-gray-700 mb-2">
|
<label htmlFor="subject" className="block text-sm font-semibold text-gray-700 mb-2">
|
||||||
Sujet <span className="text-red-500">*</span>
|
Sujet <span className="text-red-600" aria-hidden="true">*</span>
|
||||||
</label>
|
</label>
|
||||||
<select
|
<select
|
||||||
id="subject"
|
id="subject"
|
||||||
|
|
@ -153,7 +153,7 @@ export default function ContactPage() {
|
||||||
{/* Message */}
|
{/* Message */}
|
||||||
<div>
|
<div>
|
||||||
<label htmlFor="message" className="block text-sm font-semibold text-gray-700 mb-2">
|
<label htmlFor="message" className="block text-sm font-semibold text-gray-700 mb-2">
|
||||||
Message <span className="text-red-500">*</span>
|
Message <span className="text-red-600" aria-hidden="true">*</span>
|
||||||
</label>
|
</label>
|
||||||
<textarea
|
<textarea
|
||||||
id="message"
|
id="message"
|
||||||
|
|
@ -183,7 +183,7 @@ export default function ContactPage() {
|
||||||
<Link href="/privacy" className="text-primary-500 underline hover:text-primary-600">
|
<Link href="/privacy" className="text-primary-500 underline hover:text-primary-600">
|
||||||
politique de confidentialité
|
politique de confidentialité
|
||||||
</Link>{' '}
|
</Link>{' '}
|
||||||
<span className="text-red-500">*</span>
|
<span className="text-red-600" aria-hidden="true">*</span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -291,9 +291,10 @@ export default function ContactPage() {
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 z-10 group"
|
className="absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 z-10 group"
|
||||||
|
aria-label="Voir notre emplacement sur Google Maps - 18 Avenue Thiers, Nice"
|
||||||
>
|
>
|
||||||
<span className="block w-6 h-6 bg-primary-500 rounded-full border-2 border-white shadow-lg cursor-pointer hover:scale-125 transition-transform animate-pulse"></span>
|
<span className="block w-6 h-6 bg-primary-500 rounded-full border-2 border-white shadow-lg cursor-pointer hover:scale-125 transition-transform animate-pulse" aria-hidden="true"></span>
|
||||||
<span className="absolute -bottom-1 left-1/2 transform -translate-x-1/2 w-0 h-0 border-l-[6px] border-r-[6px] border-t-[8px] border-l-transparent border-r-transparent border-t-primary-500"></span>
|
<span className="absolute -bottom-1 left-1/2 transform -translate-x-1/2 w-0 h-0 border-l-[6px] border-r-[6px] border-t-[8px] border-l-transparent border-r-transparent border-t-primary-500" aria-hidden="true"></span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<a
|
<a
|
||||||
|
|
|
||||||
|
|
@ -163,12 +163,17 @@ export default function HistoriquePage() {
|
||||||
<div className="flex flex-col md:flex-row gap-4">
|
<div className="flex flex-col md:flex-row gap-4">
|
||||||
<div className="flex-1">
|
<div className="flex-1">
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
<Search className="absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-500 w-5 h-5" />
|
<label htmlFor="search-tickets" className="sr-only">
|
||||||
|
Rechercher par code ticket
|
||||||
|
</label>
|
||||||
|
<Search className="absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-500 w-5 h-5" aria-hidden="true" />
|
||||||
<input
|
<input
|
||||||
|
id="search-tickets"
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Rechercher par code ticket..."
|
placeholder="Rechercher par code ticket..."
|
||||||
value={searchQuery}
|
value={searchQuery}
|
||||||
onChange={(e) => setSearchQuery(e.target.value)}
|
onChange={(e) => setSearchQuery(e.target.value)}
|
||||||
|
aria-label="Rechercher par code ticket"
|
||||||
className="w-full pl-10 pr-4 py-3 border-2 border-beige-300 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-primary-500 focus:outline-none"
|
className="w-full pl-10 pr-4 py-3 border-2 border-beige-300 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-primary-500 focus:outline-none"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ export default function Footer() {
|
||||||
<div className="mb-4">
|
<div className="mb-4">
|
||||||
<Logo variant="default" size="md" showText={true} />
|
<Logo variant="default" size="md" showText={true} />
|
||||||
</div>
|
</div>
|
||||||
<p className="text-sm text-beige-600 mb-4">
|
<p className="text-sm text-beige-700 mb-4">
|
||||||
Découvrez nos thés premium bio et artisanaux. Participez à notre grand
|
Découvrez nos thés premium bio et artisanaux. Participez à notre grand
|
||||||
jeu-concours 100% gagnant et tentez de remporter nos magnifiques lots !
|
jeu-concours 100% gagnant et tentez de remporter nos magnifiques lots !
|
||||||
</p>
|
</p>
|
||||||
|
|
@ -58,7 +58,7 @@ export default function Footer() {
|
||||||
href="https://www.facebook.com/profile.php?id=61584261567579"
|
href="https://www.facebook.com/profile.php?id=61584261567579"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="text-beige-600 hover:text-primary-500 transition-colors"
|
className="text-beige-700 hover:text-primary-500 transition-colors"
|
||||||
aria-label="Facebook"
|
aria-label="Facebook"
|
||||||
>
|
>
|
||||||
<svg className="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
<svg className="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
||||||
|
|
@ -69,7 +69,7 @@ export default function Footer() {
|
||||||
href="https://www.instagram.com/thetiptopgr3/"
|
href="https://www.instagram.com/thetiptopgr3/"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="text-beige-600 hover:text-primary-500 transition-colors"
|
className="text-beige-700 hover:text-primary-500 transition-colors"
|
||||||
aria-label="Instagram"
|
aria-label="Instagram"
|
||||||
>
|
>
|
||||||
<svg className="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
<svg className="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
||||||
|
|
@ -80,7 +80,7 @@ export default function Footer() {
|
||||||
href="https://www.pinterest.com/The_Tip_Top_/"
|
href="https://www.pinterest.com/The_Tip_Top_/"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="text-beige-600 hover:text-primary-500 transition-colors"
|
className="text-beige-700 hover:text-primary-500 transition-colors"
|
||||||
aria-label="Pinterest"
|
aria-label="Pinterest"
|
||||||
>
|
>
|
||||||
<svg className="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
<svg className="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
||||||
|
|
@ -99,7 +99,7 @@ export default function Footer() {
|
||||||
<li>
|
<li>
|
||||||
<Link
|
<Link
|
||||||
href={ROUTES.HOME}
|
href={ROUTES.HOME}
|
||||||
className="text-sm text-beige-600 hover:text-primary-500 transition-colors"
|
className="text-sm text-beige-700 hover:text-primary-500 transition-colors"
|
||||||
>
|
>
|
||||||
Accueil
|
Accueil
|
||||||
</Link>
|
</Link>
|
||||||
|
|
@ -107,7 +107,7 @@ export default function Footer() {
|
||||||
<li>
|
<li>
|
||||||
<Link
|
<Link
|
||||||
href={isAuthenticated ? ROUTES.GAME : ROUTES.REGISTER}
|
href={isAuthenticated ? ROUTES.GAME : ROUTES.REGISTER}
|
||||||
className="text-sm text-beige-600 hover:text-primary-500 transition-colors"
|
className="text-sm text-beige-700 hover:text-primary-500 transition-colors"
|
||||||
>
|
>
|
||||||
Participer au jeu
|
Participer au jeu
|
||||||
</Link>
|
</Link>
|
||||||
|
|
@ -115,7 +115,7 @@ export default function Footer() {
|
||||||
<li>
|
<li>
|
||||||
<Link
|
<Link
|
||||||
href="/contact"
|
href="/contact"
|
||||||
className="text-sm text-beige-600 hover:text-primary-500 transition-colors"
|
className="text-sm text-beige-700 hover:text-primary-500 transition-colors"
|
||||||
>
|
>
|
||||||
Contact
|
Contact
|
||||||
</Link>
|
</Link>
|
||||||
|
|
@ -123,7 +123,7 @@ export default function Footer() {
|
||||||
<li>
|
<li>
|
||||||
<Link
|
<Link
|
||||||
href="/faq"
|
href="/faq"
|
||||||
className="text-sm text-beige-600 hover:text-primary-500 transition-colors"
|
className="text-sm text-beige-700 hover:text-primary-500 transition-colors"
|
||||||
>
|
>
|
||||||
FAQ
|
FAQ
|
||||||
</Link>
|
</Link>
|
||||||
|
|
@ -138,7 +138,7 @@ export default function Footer() {
|
||||||
<li>
|
<li>
|
||||||
<Link
|
<Link
|
||||||
href="/terms"
|
href="/terms"
|
||||||
className="text-sm text-beige-600 hover:text-primary-500 transition-colors"
|
className="text-sm text-beige-700 hover:text-primary-500 transition-colors"
|
||||||
>
|
>
|
||||||
Conditions d'utilisation
|
Conditions d'utilisation
|
||||||
</Link>
|
</Link>
|
||||||
|
|
@ -146,7 +146,7 @@ export default function Footer() {
|
||||||
<li>
|
<li>
|
||||||
<Link
|
<Link
|
||||||
href="/privacy"
|
href="/privacy"
|
||||||
className="text-sm text-beige-600 hover:text-primary-500 transition-colors"
|
className="text-sm text-beige-700 hover:text-primary-500 transition-colors"
|
||||||
>
|
>
|
||||||
Politique de confidentialité
|
Politique de confidentialité
|
||||||
</Link>
|
</Link>
|
||||||
|
|
@ -154,7 +154,7 @@ export default function Footer() {
|
||||||
<li>
|
<li>
|
||||||
<Link
|
<Link
|
||||||
href="/rules"
|
href="/rules"
|
||||||
className="text-sm text-beige-600 hover:text-primary-500 transition-colors"
|
className="text-sm text-beige-700 hover:text-primary-500 transition-colors"
|
||||||
>
|
>
|
||||||
Règlement du jeu
|
Règlement du jeu
|
||||||
</Link>
|
</Link>
|
||||||
|
|
@ -162,7 +162,7 @@ export default function Footer() {
|
||||||
<li>
|
<li>
|
||||||
<Link
|
<Link
|
||||||
href="/legal"
|
href="/legal"
|
||||||
className="text-sm text-beige-600 hover:text-primary-500 transition-colors"
|
className="text-sm text-beige-700 hover:text-primary-500 transition-colors"
|
||||||
>
|
>
|
||||||
Mentions légales
|
Mentions légales
|
||||||
</Link>
|
</Link>
|
||||||
|
|
@ -173,16 +173,21 @@ export default function Footer() {
|
||||||
{/* Newsletter */}
|
{/* Newsletter */}
|
||||||
<div>
|
<div>
|
||||||
<h3 className="text-lg font-semibold text-primary-500 mb-4">NEWSLETTER</h3>
|
<h3 className="text-lg font-semibold text-primary-500 mb-4">NEWSLETTER</h3>
|
||||||
<p className="text-sm text-beige-600 mb-4">
|
<p className="text-sm text-beige-700 mb-4">
|
||||||
Inscrivez-vous pour recevoir nos offres exclusives et nouveautés !
|
Inscrivez-vous pour recevoir nos offres exclusives et nouveautés !
|
||||||
</p>
|
</p>
|
||||||
<form onSubmit={handleNewsletterSubmit} className="space-y-3">
|
<form onSubmit={handleNewsletterSubmit} className="space-y-3">
|
||||||
<div>
|
<div>
|
||||||
|
<label htmlFor="newsletter-email" className="sr-only">
|
||||||
|
Adresse email pour la newsletter
|
||||||
|
</label>
|
||||||
<input
|
<input
|
||||||
|
id="newsletter-email"
|
||||||
type="email"
|
type="email"
|
||||||
value={email}
|
value={email}
|
||||||
onChange={(e) => setEmail(e.target.value)}
|
onChange={(e) => setEmail(e.target.value)}
|
||||||
placeholder="Votre email"
|
placeholder="Votre email"
|
||||||
|
aria-label="Adresse email pour la newsletter"
|
||||||
className="w-full px-4 py-2 text-sm border border-beige-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent bg-white text-beige-800 placeholder-beige-500"
|
className="w-full px-4 py-2 text-sm border border-beige-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent bg-white text-beige-800 placeholder-beige-500"
|
||||||
disabled={isLoading}
|
disabled={isLoading}
|
||||||
/>
|
/>
|
||||||
|
|
@ -205,7 +210,7 @@ export default function Footer() {
|
||||||
)}
|
)}
|
||||||
</form>
|
</form>
|
||||||
<div className="mt-4 pt-4 border-t border-beige-300">
|
<div className="mt-4 pt-4 border-t border-beige-300">
|
||||||
<p className="text-xs text-beige-600 flex items-center gap-1">
|
<p className="text-xs text-beige-700 flex items-center gap-1">
|
||||||
<span>✉️</span>
|
<span>✉️</span>
|
||||||
<a
|
<a
|
||||||
href="mailto:thetiptopgr3@gmail.com"
|
href="mailto:thetiptopgr3@gmail.com"
|
||||||
|
|
@ -214,7 +219,7 @@ export default function Footer() {
|
||||||
thetiptopgr3@gmail.com
|
thetiptopgr3@gmail.com
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
<p className="text-xs text-beige-600 mt-1 flex items-center gap-1">
|
<p className="text-xs text-beige-700 mt-1 flex items-center gap-1">
|
||||||
<span>📞</span>
|
<span>📞</span>
|
||||||
<a
|
<a
|
||||||
href="tel:+33123456789"
|
href="tel:+33123456789"
|
||||||
|
|
@ -232,8 +237,8 @@ export default function Footer() {
|
||||||
<div className="border-t border-beige-300">
|
<div className="border-t border-beige-300">
|
||||||
<div className="container mx-auto px-4 py-6">
|
<div className="container mx-auto px-4 py-6">
|
||||||
<div className="flex items-center justify-center text-sm">
|
<div className="flex items-center justify-center text-sm">
|
||||||
<p className="text-beige-600">
|
<p className="text-beige-700">
|
||||||
© {currentYear} Tous droits réservés. <span className="text-beige-500 text-xs">Site étudiant</span>
|
© {currentYear} Tous droits réservés. <span className="text-beige-600 text-xs">Site étudiant</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -109,40 +109,40 @@ export default function ProfilePage({
|
||||||
</div>
|
</div>
|
||||||
<div className="p-6">
|
<div className="p-6">
|
||||||
{!isEditing ? (
|
{!isEditing ? (
|
||||||
<div className="space-y-4">
|
<dl className="space-y-4">
|
||||||
<div>
|
<div>
|
||||||
<label className="text-sm font-medium text-gray-600">
|
<dt className="text-sm font-medium text-gray-700">
|
||||||
Prénom
|
Prénom
|
||||||
</label>
|
</dt>
|
||||||
<p className="text-lg text-gray-900">{user.firstName}</p>
|
<dd className="text-lg text-gray-900">{user.firstName}</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label className="text-sm font-medium text-gray-600">
|
<dt className="text-sm font-medium text-gray-700">
|
||||||
Nom
|
Nom
|
||||||
</label>
|
</dt>
|
||||||
<p className="text-lg text-gray-900">{user.lastName}</p>
|
<dd className="text-lg text-gray-900">{user.lastName}</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label className="text-sm font-medium text-gray-600">
|
<dt className="text-sm font-medium text-gray-700">
|
||||||
Email
|
Email
|
||||||
</label>
|
</dt>
|
||||||
<p className="text-lg text-gray-900">{user.email}</p>
|
<dd className="text-lg text-gray-900">{user.email}</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label className="text-sm font-medium text-gray-600">
|
<dt className="text-sm font-medium text-gray-700">
|
||||||
Téléphone
|
Téléphone
|
||||||
</label>
|
</dt>
|
||||||
<p className="text-lg text-gray-900">
|
<dd className="text-lg text-gray-900">
|
||||||
{user.phone || "Non renseigné"}
|
{user.phone || "Non renseigné"}
|
||||||
</p>
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label className="text-sm font-medium text-gray-600">
|
<dt className="text-sm font-medium text-gray-700">
|
||||||
Rôle
|
Rôle
|
||||||
</label>
|
</dt>
|
||||||
<div className="mt-1">
|
<dd className="mt-1">
|
||||||
<Badge variant={badgeVariant}>{roleLabel}</Badge>
|
<Badge variant={badgeVariant}>{roleLabel}</Badge>
|
||||||
</div>
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div className="pt-4">
|
<div className="pt-4">
|
||||||
<button
|
<button
|
||||||
|
|
@ -152,7 +152,7 @@ export default function ProfilePage({
|
||||||
Modifier mes informations
|
Modifier mes informations
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</dl>
|
||||||
) : (
|
) : (
|
||||||
<form onSubmit={handleSubmit(onSubmit)} className="space-y-4">
|
<form onSubmit={handleSubmit(onSubmit)} className="space-y-4">
|
||||||
<Input
|
<Input
|
||||||
|
|
@ -216,14 +216,14 @@ export default function ProfilePage({
|
||||||
<h2 className="text-xl font-bold text-gray-900">Statut du compte</h2>
|
<h2 className="text-xl font-bold text-gray-900">Statut du compte</h2>
|
||||||
</div>
|
</div>
|
||||||
<div className="p-6 space-y-4">
|
<div className="p-6 space-y-4">
|
||||||
<div>
|
<dl>
|
||||||
<label className="text-sm font-medium text-gray-600">
|
<dt className="text-sm font-medium text-gray-700">
|
||||||
Membre depuis
|
Membre depuis
|
||||||
</label>
|
</dt>
|
||||||
<p className="text-sm text-gray-900 mt-1">
|
<dd className="text-sm text-gray-900 mt-1">
|
||||||
{formatDate(user.createdAt)}
|
{formatDate(user.createdAt)}
|
||||||
</p>
|
</dd>
|
||||||
</div>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user