Merge version_1 into main #2
@@ -44,7 +44,7 @@ export default function LandingPage() {
|
||||
<HeroLogoBillboardSplit
|
||||
logoText="EASYER"
|
||||
description="La plateforme double qui révolutionne l'expérience en salle. Service autonome pour les clients. Dashboard puissant pour les restaurateurs."
|
||||
background={{ variant: "circleGradient" }}
|
||||
background={{ variant: "plain" }}
|
||||
buttons={[
|
||||
{ text: "Je suis client", href: "#easyer-client" },
|
||||
{ text: "Je suis restaurateur", href: "#easyer-plus" }
|
||||
@@ -78,7 +78,7 @@ export default function LandingPage() {
|
||||
id: "2", title: "Demandes clic & go", descriptions: [
|
||||
"Je voudrais commander", "J'ai une demande urgente", "Il me manque quelque chose", "Sous-menus spécialisés pour chaque besoin"
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-vector/modern-ad-block-concept-with-flat-design_23-2147875796.jpg?_wi=1", imageAlt: "Boutons de demandes rapides et urgentes"
|
||||
imageSrc: "http://img.b2bpic.net/free-vector/modern-ad-block-concept-with-flat-design_23-2147875796.jpg", imageAlt: "Boutons de demandes rapides et urgentes"
|
||||
},
|
||||
{
|
||||
id: "3", title: "Menu enrichi", descriptions: [
|
||||
@@ -102,7 +102,7 @@ export default function LandingPage() {
|
||||
id: "6", title: "Service sans contact", descriptions: [
|
||||
"Toutes les interactions digitales", "Réduction des contacts inutiles", "Hygiène et sécurité renforcées", "Expérience moderne et sûre"
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-vector/modern-ad-block-concept-with-flat-design_23-2147875796.jpg?_wi=2", imageAlt: "Interface digitale sans contact"
|
||||
imageSrc: "http://img.b2bpic.net/free-vector/modern-ad-block-concept-with-flat-design_23-2147875796.jpg", imageAlt: "Interface digitale sans contact"
|
||||
}
|
||||
]}
|
||||
gridVariant="two-columns-alternating-heights"
|
||||
@@ -126,7 +126,7 @@ export default function LandingPage() {
|
||||
id: "1", title: "Flux de demandes en direct", descriptions: [
|
||||
"Tableau des urgences avec statut URGENT", "Temps écoulé visible pour chaque demande", "Bouton Prendre pour assigner rapidement", "Verre cassé, plat froid, autres urgences"
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-vector/dashboard-user-panel-template_23-2148367355.jpg?_wi=1", imageAlt: "Tableau de flux des demandes urgentes"
|
||||
imageSrc: "http://img.b2bpic.net/free-vector/dashboard-user-panel-template_23-2148367355.jpg", imageAlt: "Tableau de flux des demandes urgentes"
|
||||
},
|
||||
{
|
||||
id: "2", title: "Performance équipe & pourboires", descriptions: [
|
||||
@@ -156,7 +156,7 @@ export default function LandingPage() {
|
||||
id: "6", title: "Réduction des temps d'attente", descriptions: [
|
||||
"Optimisation automatique du service", "Alertes urgences en priorité", "Distribution équilibrée des tâches", "Satisfaction client maximale"
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-vector/dashboard-user-panel-template_23-2148367355.jpg?_wi=2", imageAlt: "Gestion optimisée des urgences"
|
||||
imageSrc: "http://img.b2bpic.net/free-vector/dashboard-user-panel-template_23-2148367355.jpg", imageAlt: "Gestion optimisée des urgences"
|
||||
}
|
||||
]}
|
||||
gridVariant="two-columns-alternating-heights"
|
||||
@@ -213,11 +213,11 @@ export default function LandingPage() {
|
||||
<TestimonialCardTwelve
|
||||
testimonials={[
|
||||
{ id: "1", name: "Loïc Durand", imageSrc: "http://img.b2bpic.net/free-photo/closeup-serious-business-leader-sitting_1262-4831.jpg", imageAlt: "professional CEO portrait businessman" },
|
||||
{ id: "2", name: "Julien Deprez", imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-male-florist-work_23-2149127319.jpg?_wi=1", imageAlt: "restaurant manager professional portrait" },
|
||||
{ id: "2", name: "Julien Deprez", imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-male-florist-work_23-2149127319.jpg", imageAlt: "restaurant manager professional portrait" },
|
||||
{ id: "3", name: "Inès Sahli", imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-business-woman-standing-bu-office-building_1303-31732.jpg", imageAlt: "female restaurant manager portrait" },
|
||||
{ id: "4", name: "Antoine Morel", imageSrc: "http://img.b2bpic.net/free-photo/young-waitress-near-banquet-table_23-2147830631.jpg", imageAlt: "restaurant team member portrait" },
|
||||
{ id: "5", name: "Élodie Bertrand", imageSrc: "http://img.b2bpic.net/free-photo/person-enjoying-their-time-dj-party_23-2149658437.jpg", imageAlt: "restaurant owner male portrait" },
|
||||
{ id: "6", name: "Nicolas Ferrand", imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-male-florist-work_23-2149127319.jpg?_wi=2", imageAlt: "restaurant manager professional portrait" }
|
||||
{ id: "6", name: "Nicolas Ferrand", imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-male-florist-work_23-2149127319.jpg", imageAlt: "restaurant manager professional portrait" }
|
||||
]}
|
||||
cardTitle="Easyer redonne du temps humain à vos équipes. – Loïc Durand, Founder & CEO"
|
||||
cardTag="Déjà adopté par +200 restaurants en France"
|
||||
|
||||
@@ -1,51 +1,45 @@
|
||||
"use client";
|
||||
|
||||
import { memo } from "react";
|
||||
import useSvgTextLogo from "./useSvgTextLogo";
|
||||
import { cls } from "@/lib/utils";
|
||||
import React from 'react';
|
||||
|
||||
interface SvgTextLogoProps {
|
||||
logoText: string;
|
||||
adjustHeightFactor?: number;
|
||||
verticalAlign?: "top" | "center";
|
||||
text: string;
|
||||
fontSize?: number;
|
||||
fontFamily?: string;
|
||||
fontWeight?: number | string;
|
||||
fill?: string;
|
||||
className?: string;
|
||||
}
|
||||
|
||||
const SvgTextLogo = memo<SvgTextLogoProps>(function SvgTextLogo({
|
||||
logoText,
|
||||
adjustHeightFactor,
|
||||
verticalAlign = "top",
|
||||
className = "",
|
||||
}) {
|
||||
const { svgRef, textRef, viewBox, aspectRatio } = useSvgTextLogo(logoText, false, adjustHeightFactor);
|
||||
const SvgTextLogo: React.FC<SvgTextLogoProps> = ({
|
||||
text,
|
||||
fontSize = 48,
|
||||
fontFamily = 'Arial, sans-serif',
|
||||
fontWeight = 'bold',
|
||||
fill = 'currentColor',
|
||||
className,
|
||||
}) => {
|
||||
const textProps = {
|
||||
x: '50%',
|
||||
y: '50%',
|
||||
textAnchor: 'middle' as const,
|
||||
dominantBaseline: 'middle' as const,
|
||||
fontSize,
|
||||
fontFamily,
|
||||
fontWeight,
|
||||
fill,
|
||||
};
|
||||
|
||||
return (
|
||||
<svg
|
||||
ref={svgRef}
|
||||
viewBox={viewBox}
|
||||
className={cls("w-full", className)}
|
||||
style={{ aspectRatio: aspectRatio }}
|
||||
preserveAspectRatio="none"
|
||||
viewBox="0 0 200 100"
|
||||
className={className}
|
||||
role="img"
|
||||
aria-label={`${logoText} logo`}
|
||||
aria-label={text}
|
||||
>
|
||||
<text
|
||||
ref={textRef}
|
||||
x="0"
|
||||
y={verticalAlign === "center" ? "50%" : "0"}
|
||||
className="font-bold fill-current"
|
||||
style={{
|
||||
fontSize: "20px",
|
||||
letterSpacing: "-0.02em",
|
||||
dominantBaseline: verticalAlign === "center" ? "middle" : "text-before-edge"
|
||||
}}
|
||||
>
|
||||
{logoText}
|
||||
<text {...textProps}>
|
||||
{text}
|
||||
</text>
|
||||
</svg>
|
||||
);
|
||||
});
|
||||
|
||||
SvgTextLogo.displayName = "SvgTextLogo";
|
||||
};
|
||||
|
||||
export default SvgTextLogo;
|
||||
|
||||
Reference in New Issue
Block a user