From 5a7150cc05ea64046e60441bd1d87445e0ac2fd6 Mon Sep 17 00:00:00 2001 From: Emil Gulamov <125820963+mearashadowfax@users.noreply.github.com> Date: Mon, 25 Mar 2024 22:39:36 +0400 Subject: [PATCH 1/3] Update tsconfig and import paths for project-wide consistency Modified tsconfig.json to add compilerOptions for @/* base directory paths and updated all relative file import paths in the project to use this configuration. This change provides a cleaner, more consistent, and efficient way to handle file imports. --- src/components/sections/FooterSection.astro | 2 +- src/components/sections/Navbar.astro | 2 +- .../sections/features/FeaturesStatsAlt.astro | 2 +- src/components/ui/cards/CardBlog.astro | 2 +- src/components/ui/cards/CardRelated.astro | 2 +- src/components/ui/starlight/SiteTitle.astro | 4 +-- src/content/blog/post-1.md | 4 +-- src/content/blog/post-2.md | 4 +-- src/content/blog/post-3.md | 4 +-- src/content/insights/insight-1.md | 2 +- src/content/insights/insight-2.md | 2 +- src/content/insights/insight-3.md | 2 +- src/content/products/a765.md | 8 ++--- src/content/products/b203.md | 8 ++--- src/content/products/f303.md | 8 ++--- src/content/products/t845.md | 8 ++--- src/layouts/MainLayout.astro | 11 +++--- src/pages/404.astro | 4 +-- src/pages/blog/[...slug].astro | 14 ++++---- src/pages/blog/index.astro | 8 ++--- src/pages/contact.astro | 4 +-- src/pages/index.astro | 34 +++++++++---------- src/pages/insights/[...slug].astro | 2 +- src/pages/products/[...slug].astro | 6 ++-- src/pages/products/index.astro | 12 +++---- src/pages/services.astro | 26 +++++++------- tsconfig.json | 8 ++++- 27 files changed, 100 insertions(+), 93 deletions(-) diff --git a/src/components/sections/FooterSection.astro b/src/components/sections/FooterSection.astro index c1821e0..5bba7b4 100644 --- a/src/components/sections/FooterSection.astro +++ b/src/components/sections/FooterSection.astro @@ -2,7 +2,7 @@ // Import the necessary dependencies import FooterSocialLink from "../ui/links/FooterSocialLink.astro"; import EmailFooterInput from "../ui/forms/input/EmailFooterInput.astro"; -import { footerLinks, socialLinks } from "../../utils/navigation.ts"; +import { footerLinks, socialLinks } from "@/utils/navigation.ts"; import Icon from "../ui/icons/Icon.astro"; // Define the variables that will be used in this component diff --git a/src/components/sections/Navbar.astro b/src/components/sections/Navbar.astro index 027269f..53c9b73 100644 --- a/src/components/sections/Navbar.astro +++ b/src/components/sections/Navbar.astro @@ -3,7 +3,7 @@ import ThemeIcon from "../ThemeIcon.astro"; import NavLink from "../ui/links/NavLink.astro"; import Authentication from "./Authentication.astro"; -import { navBarLinks } from "../../utils/navigation.ts"; +import { navBarLinks } from "@/utils/navigation.ts"; --- diff --git a/src/components/sections/features/FeaturesStatsAlt.astro b/src/components/sections/features/FeaturesStatsAlt.astro index 350e122..7de64e6 100644 --- a/src/components/sections/features/FeaturesStatsAlt.astro +++ b/src/components/sections/features/FeaturesStatsAlt.astro @@ -1,6 +1,6 @@ --- import { Image } from "astro:assets"; -import product5 from "../../../images/features-image.avif"; +import product5 from "@/images/features-image.avif"; // Define props from Astro const { title, subTitle, benefits } = Astro.props; diff --git a/src/components/ui/cards/CardBlog.astro b/src/components/ui/cards/CardBlog.astro index 80d45fc..0c5056a 100644 --- a/src/components/ui/cards/CardBlog.astro +++ b/src/components/ui/cards/CardBlog.astro @@ -2,7 +2,7 @@ // Import necessary components and utilities import AvatarBlog from "../avatars/AvatarBlog.astro"; import { Image } from "astro:assets"; -import { formatDate } from "../../../utils/utils"; +import { formatDate } from "@/utils/utils"; import type { CollectionEntry } from "astro:content"; const { blogEntry } = Astro.props; diff --git a/src/components/ui/cards/CardRelated.astro b/src/components/ui/cards/CardRelated.astro index 217ac0b..41a669a 100644 --- a/src/components/ui/cards/CardRelated.astro +++ b/src/components/ui/cards/CardRelated.astro @@ -1,7 +1,7 @@ --- // Import necessary modules and utilities import { Image } from "astro:assets"; -import { formatDate } from "../../../utils/utils"; +import { formatDate } from "@/utils/utils"; import type { CollectionEntry } from "astro:content"; const { blogEntry } = Astro.props; diff --git a/src/components/ui/starlight/SiteTitle.astro b/src/components/ui/starlight/SiteTitle.astro index 6d730a6..db03bc5 100644 --- a/src/components/ui/starlight/SiteTitle.astro +++ b/src/components/ui/starlight/SiteTitle.astro @@ -1,6 +1,6 @@ --- -import logo from "../../../images/starlight/screwfast_logo_dark.svg?raw"; -import docs from "../../../images/starlight/docs_logo.svg?raw"; +import logo from "@/images/starlight/screwfast_logo_dark.svg?raw"; +import docs from "@/images/starlight/docs_logo.svg?raw"; import type { Props } from "@astrojs/starlight/props"; const main = "/"; diff --git a/src/content/blog/post-1.md b/src/content/blog/post-1.md index 0b8fd19..b4c3aaa 100644 --- a/src/content/blog/post-1.md +++ b/src/content/blog/post-1.md @@ -2,10 +2,10 @@ title: "Maximizing Efficiency with ScrewFast's Cutting-Edge Tools" description: "Innovating Construction Efficiency with Precision Tools & Support" author: "Jacob" -authorImage: "../../images/blog/jacob.avif" +authorImage: "@/images/blog/jacob.avif" authorImageAlt: "Avatar Description" pubDate: 2024-02-06 -cardImage: "../../images/blog/post-1.avif" +cardImage: "@/images/blog/post-1.avif" cardImageAlt: "Top view mechanical tools arrangement" readTime: 4 tags: ["tools", "construction", "workflow" ] diff --git a/src/content/blog/post-2.md b/src/content/blog/post-2.md index 7cd7e5b..17d80ce 100644 --- a/src/content/blog/post-2.md +++ b/src/content/blog/post-2.md @@ -2,10 +2,10 @@ title: "Enhancing Safety and Workmanship with ScrewFast Construction Services" description: "Quality construction services for lasting results" author: "Brad" -authorImage: "../../images/blog/brad.avif" +authorImage: "@/images/blog/brad.avif" authorImageAlt: "Avatar Description" pubDate: 2024-02-10 -cardImage: "../../images/blog/post-2.avif" +cardImage: "@/images/blog/post-2.avif" cardImageAlt: "Man in black sweatpants using DEWALT circular saw and cutting a wood plank" readTime: 5 tags: ["safety", "craftsmanship", "management" ] diff --git a/src/content/blog/post-3.md b/src/content/blog/post-3.md index 0d4348d..7f6add0 100644 --- a/src/content/blog/post-3.md +++ b/src/content/blog/post-3.md @@ -3,10 +3,10 @@ title: "Simplify Procurement and Stay Within Budget with ScrewFast" description: "Affordable, durable tools for efficient construction projects" author: "Olga Zabegina" role: "Strategic Marketing Manager" -authorImage: "../../images/blog/anna.avif" +authorImage: "@/images/blog/anna.avif" authorImageAlt: "Avatar Description" pubDate: 2024-02-18 -cardImage: "../../images/blog/post-3.avif" +cardImage: "@/images/blog/post-3.avif" cardImageAlt: "Side view worker wearing gloves" readTime: 3 tags: ["procurement", "affordable", "efficiency" ] diff --git a/src/content/insights/insight-1.md b/src/content/insights/insight-1.md index abac73f..74022e9 100644 --- a/src/content/insights/insight-1.md +++ b/src/content/insights/insight-1.md @@ -1,7 +1,7 @@ --- title: "The Future of Construction Technology" description: "Explore ScrewFast's pioneering role in revolutionizing construction through advanced technology and innovative solutions." -cardImage: "../../images/insights/insight-1.avif" +cardImage: "@/images/insights/insight-1.avif" cardImageAlt: "Top view mechanical tools arrangement" contents: [ "As technology continues to evolve, so too does the construction industry. From advanced robotics to augmented reality, the possibilities for innovation are endless. At ScrewFast, we're at the forefront of this technological revolution, developing cutting-edge tools and solutions to drive the industry forward.", diff --git a/src/content/insights/insight-2.md b/src/content/insights/insight-2.md index 8d063c6..2620744 100644 --- a/src/content/insights/insight-2.md +++ b/src/content/insights/insight-2.md @@ -1,7 +1,7 @@ --- title: "The Importance of Collaboration" description: "Explore how collaboration is central to ScrewFast's construction approach, driving effective communication and teamwork to achieve outstanding outcomes." -cardImage: "../../images/insights/insight-2.avif" +cardImage: "@/images/insights/insight-2.avif" cardImageAlt: "Top view mechanical tools arrangement" contents: [ "Construction projects are complex undertakings that require collaboration and coordination among various stakeholders. From architects and engineers to contractors and suppliers, effective collaboration is essential for success.", diff --git a/src/content/insights/insight-3.md b/src/content/insights/insight-3.md index ae6599e..b8ba501 100644 --- a/src/content/insights/insight-3.md +++ b/src/content/insights/insight-3.md @@ -1,7 +1,7 @@ --- title: "The Impact of Sustainable Practices" description: "Discover how ScrewFast is leading the charge in promoting sustainability within the construction industry" -cardImage: "../../images/insights/insight-3.avif" +cardImage: "@/images/insights/insight-3.avif" cardImageAlt: "Top view mechanical tools arrangement" contents: [ "With growing concerns about climate change and environmental sustainability, the construction industry is facing increasing pressure to adopt more eco-friendly practices. At ScrewFast, we're committed to doing our part to minimize our environmental footprint and promote sustainability in everything we do.", diff --git a/src/content/products/a765.md b/src/content/products/a765.md index 24c2505..639668c 100644 --- a/src/content/products/a765.md +++ b/src/content/products/a765.md @@ -5,8 +5,8 @@ main: subTitle: "Assorted Screw Set" content: | Introducing the SF-AB A765 Assorted Screw Set – the ultimate solution for your screw fastening needs. This comprehensive set includes a wide variety of screws meticulously curated to tackle various projects with ease and precision. - imgCard: "../../images/product-image-2.avif" - imgMain: "../../images/product-image-main-2.avif" + imgCard: "@/images/product-image-2.avif" + imgMain: "@/images/product-image-main-2.avif" imgAlt: "Mockup boxes of assorted screw set" tabs: - id: "tabs-with-card-item-1" @@ -50,7 +50,7 @@ specificationsRight: - title: "Applications" subTitle: "Suitable for a wide range of applications, including woodworking, metalworking, construction, and more." blueprints: - first: "../../images/blueprint-1.avif" - second: "../../images/blueprint-2.avif" + first: "@/images/blueprint-1.avif" + second: "@/images/blueprint-2.avif" slug: a765 --- diff --git a/src/content/products/b203.md b/src/content/products/b203.md index 4302560..ecba7a0 100644 --- a/src/content/products/b203.md +++ b/src/content/products/b203.md @@ -5,8 +5,8 @@ main: subTitle: "Tap Bolts and Nuts Set" content: | Meet the SF-BN B203 – your reliable companion for professional-grade fastening. This comprehensive box set comes with a versatile selection of tap bolts and nuts, meticulously crafted to provide the strongest hold for your construction and assembly projects. - imgCard: "../../images/product-image-3.avif" - imgMain: "../../images/product-image-main-3.avif" + imgCard: "@/images/product-image-3.avif" + imgMain: "@/images/product-image-main-3.avif" imgAlt: "Mockup boxes of a tap bolts and nuts set" tabs: - id: "tabs-with-card-item-1" @@ -50,7 +50,7 @@ specificationsRight: - title: "Suitable Applications" subTitle: "Ideal for a wide array of uses, from construction environments to mechanical assemblies that demand strong and secure joints." blueprints: - first: "../../images/blueprint-1.avif" - second: "../../images/blueprint-2.avif" + first: "@/images/blueprint-1.avif" + second: "@/images/blueprint-2.avif" slug: b203 --- diff --git a/src/content/products/f303.md b/src/content/products/f303.md index 4a5b977..5292a05 100644 --- a/src/content/products/f303.md +++ b/src/content/products/f303.md @@ -5,8 +5,8 @@ main: subTitle: "Hex Bolts" content: | Introducing the SF-FN F303 Hex Bolts – the perfect choice for heavy-duty fastening applications. Crafted with precision and durability in mind, these hex bolts provide the strength and reliability you need for your toughest projects. - imgCard: "../../images/product-image-4.avif" - imgMain: "../../images/product-image-main-4.avif" + imgCard: "@/images/product-image-4.avif" + imgMain: "@/images/product-image-main-4.avif" imgAlt: "Mockup boxes of hex bolts" tabs: - id: "tabs-with-card-item-1" @@ -50,7 +50,7 @@ specificationsRight: - title: "Applications" subTitle: "Ideal for use in construction, machinery, automotive, and other heavy-duty applications that demand strong and reliable fastening." blueprints: - first: "../../images/blueprint-1.avif" - second: "../../images/blueprint-2.avif" + first: "@/images/blueprint-1.avif" + second: "@/images/blueprint-2.avif" slug: f303 --- diff --git a/src/content/products/t845.md b/src/content/products/t845.md index f1c16f8..43e8471 100644 --- a/src/content/products/t845.md +++ b/src/content/products/t845.md @@ -5,8 +5,8 @@ main: subTitle: "Machine Screws" content: | Introducing the SF-TB T845 – your go-to solution for precision fastening in machinery and equipment. This comprehensive set of machine screws is meticulously crafted to meet the stringent demands of industrial applications, ensuring secure and reliable fastening. - imgCard: "../../images/product-image-1.avif" - imgMain: "../../images/product-image-main-1.avif" + imgCard: "@/images/product-image-1.avif" + imgMain: "@/images/product-image-main-1.avif" imgAlt: "Mockup boxes of machine screws set" tabs: - id: "tabs-with-card-item-1" @@ -50,7 +50,7 @@ specificationsRight: - title: "Applications" subTitle: "Ideal for use in a wide range of industrial machinery, equipment, and assemblies that demand precise and secure fastening." blueprints: - first: "../../images/blueprint-1.avif" - second: "../../images/blueprint-2.avif" + first: "@/images/blueprint-1.avif" + second: "@/images/blueprint-2.avif" slug: t845 --- diff --git a/src/layouts/MainLayout.astro b/src/layouts/MainLayout.astro index abe753e..a37c802 100644 --- a/src/layouts/MainLayout.astro +++ b/src/layouts/MainLayout.astro @@ -1,17 +1,18 @@ --- // Importing necessary components -import Meta from "../components/Meta.astro"; -import Navbar from "../components/sections/Navbar.astro"; -import FooterSection from "../components/sections/FooterSection.astro"; +import Meta from "@/components/Meta.astro"; +import Navbar from "@/components/sections/Navbar.astro"; +import FooterSection from "@/components/sections/FooterSection.astro"; // Setting expected props -const { title = "ScrewFast", meta, structuredData } = Astro.props; +const { title = "ScrewFast", meta, structuredData, lang = "en" } = Astro.props; // Interface to type-check the properties interface Props { title?: string; meta?: string; structuredData?: object; + lang?: string; } --- @@ -19,7 +20,7 @@ interface Props { This is the main structure for the page. We set the language of the page to English and add classes for scrollbar and scroll behavior. --> - + diff --git a/src/pages/404.astro b/src/pages/404.astro index dda7b50..9d5281c 100644 --- a/src/pages/404.astro +++ b/src/pages/404.astro @@ -1,7 +1,7 @@ --- // Import section components -import MainLayout from "../layouts/MainLayout.astro"; -import Btn404 from "../components/ui/buttons/Btn404.astro"; +import MainLayout from "@/layouts/MainLayout.astro"; +import Btn404 from "@/components/ui/buttons/Btn404.astro"; // Define variables for page content const title: string = "404"; diff --git a/src/pages/blog/[...slug].astro b/src/pages/blog/[...slug].astro index a62d2c7..0fff043 100644 --- a/src/pages/blog/[...slug].astro +++ b/src/pages/blog/[...slug].astro @@ -1,13 +1,13 @@ --- // Import necessary components and utilities -import MainLayout from "../../layouts/MainLayout.astro"; -import AvatarBlogLarge from "../../components/ui/avatars/AvatarBlogLarge.astro"; -import CardRelated from "../../components/ui/cards/CardRelated.astro"; -import Bookmark from "../../components/ui/buttons/Bookmark.astro"; -import SocialShare from "../../components/ui/buttons/SocialShare.astro"; -import PostFeedback from "../../components/ui/feedback/PostFeedback.astro"; +import MainLayout from "@/layouts/MainLayout.astro"; +import AvatarBlogLarge from "@/components/ui/avatars/AvatarBlogLarge.astro"; +import CardRelated from "@/components/ui/cards/CardRelated.astro"; +import Bookmark from "@/components/ui/buttons/Bookmark.astro"; +import SocialShare from "@/components/ui/buttons/SocialShare.astro"; +import PostFeedback from "@/components/ui/feedback/PostFeedback.astro"; import { Image } from "astro:assets"; -import { capitalize, formatDate } from "../../utils/utils"; +import { capitalize, formatDate } from "@/utils/utils"; import { getCollection } from "astro:content"; import type { CollectionEntry } from "astro:content"; diff --git a/src/pages/blog/index.astro b/src/pages/blog/index.astro index 75f598e..ae058c6 100644 --- a/src/pages/blog/index.astro +++ b/src/pages/blog/index.astro @@ -1,9 +1,9 @@ --- // Import necessary components, modules and types -import MainLayout from "../../layouts/MainLayout.astro"; -import CardBlog from "../../components/ui/cards/CardBlog.astro"; -import CardBlogRecent from "../../components/ui/cards/CardBlogRecent.astro"; -import CardInsight from "../../components/ui/cards/CardInsight.astro"; +import MainLayout from "@/layouts/MainLayout.astro"; +import CardBlog from "@/components/ui/cards/CardBlog.astro"; +import CardBlogRecent from "@/components/ui/cards/CardBlogRecent.astro"; +import CardInsight from "@/components/ui/cards/CardInsight.astro"; import { getCollection } from "astro:content"; import type { CollectionEntry } from "astro:content"; diff --git a/src/pages/contact.astro b/src/pages/contact.astro index aa4c782..1efb1f8 100644 --- a/src/pages/contact.astro +++ b/src/pages/contact.astro @@ -1,7 +1,7 @@ --- // Import the necessary components -import MainLayout from "../layouts/MainLayout.astro"; -import ContactSection from "../components/sections/ContactSection.astro"; +import MainLayout from "@/layouts/MainLayout.astro"; +import ContactSection from "@/components/sections/ContactSection.astro"; --- diff --git a/src/pages/index.astro b/src/pages/index.astro index d5a259a..327ef1b 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,22 +1,22 @@ --- // Import the necessary components -import MainLayout from "../layouts/MainLayout.astro"; -import HeroSection from "../components/sections/landing/HeroSection.astro"; -import HeroSectionAlt from "../components/sections/landing/HeroSectionAlt.astro"; -import ClientsSection from "../components/sections/landing/ClientsSection.astro"; -import FeaturesGeneral from "../components/sections/features/FeaturesGeneral.astro"; -import FeaturesNavs from "../components/sections/features/FeaturesNavs.astro"; -import TestimonialsSection from "../components/sections/testimonials/TestimonialsSection.astro"; -import PricingSection from "../components/sections/pricing/PricingSection.astro"; -import FAQ from "../components/sections/FAQ.astro"; -import AnnouncementBanner from "../components/ui/banners/AnnouncementBanner.astro"; -import heroImage from "../images/hero-image.avif"; -import faqs from "../data_files/faqs.json"; -import features from "../data_files/features.json"; -import featureImage from "../images/features-image.avif"; -import construction from "../images/construction-image.avif"; -import tools from "../images/automated-tools.avif"; -import dashboard from "../images/dashboard-image.avif"; +import MainLayout from "@/layouts/MainLayout.astro"; +import HeroSection from "@/components/sections/landing/HeroSection.astro"; +import HeroSectionAlt from "@/components/sections/landing/HeroSectionAlt.astro"; +import ClientsSection from "@/components/sections/landing/ClientsSection.astro"; +import FeaturesGeneral from "@/components/sections/features/FeaturesGeneral.astro"; +import FeaturesNavs from "@/components/sections/features/FeaturesNavs.astro"; +import TestimonialsSection from "@/components/sections/testimonials/TestimonialsSection.astro"; +import PricingSection from "@/components/sections/pricing/PricingSection.astro"; +import FAQ from "@/components/sections/FAQ.astro"; +import AnnouncementBanner from "@/components/ui/banners/AnnouncementBanner.astro"; +import heroImage from "@/images/hero-image.avif"; +import faqs from "@/data_files/faqs.json"; +import features from "@/data_files/features.json"; +import featureImage from "@/images/features-image.avif"; +import construction from "@/images/construction-image.avif"; +import tools from "@/images/automated-tools.avif"; +import dashboard from "@/images/dashboard-image.avif"; const avatarSrcs: Array = [ "https://images.unsplash.com/photo-1568602471122-7832951cc4c5?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=facearea&facepad=2&w=300&h=300&q=80", diff --git a/src/pages/insights/[...slug].astro b/src/pages/insights/[...slug].astro index e28c54e..0d0ddc5 100644 --- a/src/pages/insights/[...slug].astro +++ b/src/pages/insights/[...slug].astro @@ -1,6 +1,6 @@ --- // Import section components -import MainLayout from "../../layouts/MainLayout.astro"; +import MainLayout from "@/layouts/MainLayout.astro"; import { Image } from "astro:assets"; import { getCollection } from "astro:content"; diff --git a/src/pages/products/[...slug].astro b/src/pages/products/[...slug].astro index 3ead72a..3e68918 100644 --- a/src/pages/products/[...slug].astro +++ b/src/pages/products/[...slug].astro @@ -1,8 +1,8 @@ --- // Import section components -import MainLayout from "../../layouts/MainLayout.astro"; -import ProductTabBtn from "../../components/ui/buttons/ProductTabBtn.astro"; -import PrimaryCTA from "../../components/ui/buttons/PrimaryCTA.astro"; +import MainLayout from "@/layouts/MainLayout.astro"; +import ProductTabBtn from "@/components/ui/buttons/ProductTabBtn.astro"; +import PrimaryCTA from "@/components/ui/buttons/PrimaryCTA.astro"; import { Image } from "astro:assets"; import { getCollection } from "astro:content"; diff --git a/src/pages/products/index.astro b/src/pages/products/index.astro index 3001cf9..cb103be 100644 --- a/src/pages/products/index.astro +++ b/src/pages/products/index.astro @@ -1,11 +1,11 @@ --- // Importing necessary components -import MainLayout from "../../layouts/MainLayout.astro"; -import PrimaryCTA from "../../components/ui/buttons/PrimaryCTA.astro"; -import CardSmall from "../../components/ui/cards/CardSmall.astro"; -import CardWide from "../../components/ui/cards/CardWide.astro"; -import FeaturesStatsAlt from "../../components/sections/features/FeaturesStatsAlt.astro"; -import TestimonialsSectionAlt from "../../components/sections/testimonials/TestimonialsSectionAlt.astro"; +import MainLayout from "@/layouts/MainLayout.astro"; +import PrimaryCTA from "@/components/ui/buttons/PrimaryCTA.astro"; +import CardSmall from "@/components/ui/cards/CardSmall.astro"; +import CardWide from "@/components/ui/cards/CardWide.astro"; +import FeaturesStatsAlt from "@/components/sections/features/FeaturesStatsAlt.astro"; +import TestimonialsSectionAlt from "@/components/sections/testimonials/TestimonialsSectionAlt.astro"; // Importing necessary functions from Astro import { getCollection } from "astro:content"; diff --git a/src/pages/services.astro b/src/pages/services.astro index dea44fa..ac2d0c4 100644 --- a/src/pages/services.astro +++ b/src/pages/services.astro @@ -1,20 +1,20 @@ --- // Import necessary components -import MainLayout from "../layouts/MainLayout.astro"; -import MainSection from "../components/ui/blocks/MainSection.astro"; -import LeftSection from "../components/ui/blocks/LeftSection.astro"; -import RightSection from "../components/ui/blocks/RightSection.astro"; -import FeaturesStats from "../components/sections/features/FeaturesStats.astro"; +import MainLayout from "@/layouts/MainLayout.astro"; +import MainSection from "@/components/ui/blocks/MainSection.astro"; +import LeftSection from "@/components/ui/blocks/LeftSection.astro"; +import RightSection from "@/components/ui/blocks/RightSection.astro"; +import FeaturesStats from "@/components/sections/features/FeaturesStats.astro"; // Import necessary images -import blueprints from "../images/blueprints-image.avif"; -import personWorking from "../images/person-working.avif"; -import beforeAfter from "../images/before-after.avif"; -import constructionWorkers from "../images/construction-workers.avif"; -import aerialView from "../images/aerial-view.avif"; -import usingTools from "../images/using-tools.avif"; -import progressBuilding from "../images/progress-building.avif"; -import underConstruction from "../images/under-construction.avif"; +import blueprints from "@/images/blueprints-image.avif"; +import personWorking from "@/images/person-working.avif"; +import beforeAfter from "@/images/before-after.avif"; +import constructionWorkers from "@/images/construction-workers.avif"; +import aerialView from "@/images/aerial-view.avif"; +import usingTools from "@/images/using-tools.avif"; +import progressBuilding from "@/images/progress-building.avif"; +import underConstruction from "@/images/under-construction.avif"; interface Article { isRightSection: boolean; diff --git a/tsconfig.json b/tsconfig.json index 77da9dd..f356c6f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,3 +1,9 @@ { - "extends": "astro/tsconfigs/strict" + "extends": "astro/tsconfigs/strict", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + }, + } } \ No newline at end of file From a7abaee69f538aed2ce0b71c2fc0538d2a224627 Mon Sep 17 00:00:00 2001 From: Emil Gulamov <125820963+mearashadowfax@users.noreply.github.com> Date: Mon, 25 Mar 2024 22:40:28 +0400 Subject: [PATCH 2/3] Add new ContactSection_fr component and update related Icons Introduced a new ContactSection_fr.astro component to handle the Contact Us section of the application and expanded the Icon component to encompass new icons used in the ContactSection. --- src/components/sections/ContactSection.astro | 61 ++----------------- src/components/ui/icons/icons.ts | 63 ++++++++++++++++++++ 2 files changed, 68 insertions(+), 56 deletions(-) diff --git a/src/components/sections/ContactSection.astro b/src/components/sections/ContactSection.astro index e6812a2..4555a16 100644 --- a/src/components/sections/ContactSection.astro +++ b/src/components/sections/ContactSection.astro @@ -6,6 +6,7 @@ import TextInput from "../ui/forms/input/TextInput.astro"; import EmailContactInput from "../ui/forms/input/EmailContactInput.astro"; import PhoneInput from "../ui/forms/input/PhoneInput.astro"; import TextAreaInput from "../ui/forms/input/TextAreaInput.astro"; +import Icon from "../ui/icons/Icon.astro"; // Define the variables that will be used in this component const title: string = "Contact us"; @@ -82,19 +83,7 @@ const formSubTitle: string = "We'll get back to you in 1-2 business days."; linkTitle="Visit guides & tutorials" linkURL="#" isArrowVisible={true} - > - - + > - - + > - - - + > - - + > diff --git a/src/components/ui/icons/icons.ts b/src/components/ui/icons/icons.ts index 1969ec6..5669891 100644 --- a/src/components/ui/icons/icons.ts +++ b/src/components/ui/icons/icons.ts @@ -343,4 +343,67 @@ export const Icons = { viewBox: "0 0 16 16", fill: "currentColor", }, + question: { + paths: [ + { + d: "M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 5.25h.008v.008H12v-.008Z", + }, + ], + class: + "mt-1.5 h-6 w-6 flex-shrink-0 text-neutral-600 dark:text-neutral-400", + viewBox: "0 0 24 24", + fill: "none", + strokeWidth: "1.5", + strokeLinecap: "round", + strokeLinejoin: "round", + stroke: "currentColor", + }, + chatBubble: { + paths: [ + { + d: "M20.25 8.511c.884.284 1.5 1.128 1.5 2.097v4.286c0 1.136-.847 2.1-1.98 2.193-.34.027-.68.052-1.02.072v3.091l-3-3c-1.354 0-2.694-.055-4.02-.163a2.115 2.115 0 0 1-.825-.242m9.345-8.334a2.126 2.126 0 0 0-.476-.095 48.64 48.64 0 0 0-8.048 0c-1.131.094-1.976 1.057-1.976 2.192v4.286c0 .837.46 1.58 1.155 1.951m9.345-8.334V6.637c0-1.621-1.152-3.026-2.76-3.235A48.455 48.455 0 0 0 11.25 3c-2.115 0-4.198.137-6.24.402-1.608.209-2.76 1.614-2.76 3.235v6.226c0 1.621 1.152 3.026 2.76 3.235.577.075 1.157.14 1.74.194V21l4.155-4.155", + }, + ], + class: + "mt-1.5 h-6 w-6 flex-shrink-0 text-neutral-600 dark:text-neutral-400", + viewBox: "0 0 24 24", + fill: "none", + strokeWidth: "1.5", + strokeLinecap: "round", + strokeLinejoin: "round", + stroke: "currentColor", + }, + mapPin: { + paths: [ + { + d: "M15 10.5a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z", + }, + { + d: "M19.5 10.5c0 7.142-7.5 11.25-7.5 11.25S4.5 17.642 4.5 10.5a7.5 7.5 0 1 1 15 0Z", + }, + ], + class: + "mt-1.5 h-6 w-6 flex-shrink-0 text-neutral-600 dark:text-neutral-400", + viewBox: "0 0 24 24", + fill: "none", + strokeWidth: "1.5", + strokeLinecap: "round", + strokeLinejoin: "round", + stroke: "currentColor", + }, + envelopeOpen: { + paths: [ + { + d: "M21.75 9v.906a2.25 2.25 0 0 1-1.183 1.981l-6.478 3.488M2.25 9v.906a2.25 2.25 0 0 0 1.183 1.981l6.478 3.488m8.839 2.51-4.66-2.51m0 0-1.023-.55a2.25 2.25 0 0 0-2.134 0l-1.022.55m0 0-4.661 2.51m16.5 1.615a2.25 2.25 0 0 1-2.25 2.25h-15a2.25 2.25 0 0 1-2.25-2.25V8.844a2.25 2.25 0 0 1 1.183-1.981l7.5-4.039a2.25 2.25 0 0 1 2.134 0l7.5 4.039a2.25 2.25 0 0 1 1.183 1.98V19.5Z", + }, + ], + class: + "mt-1.5 h-6 w-6 flex-shrink-0 text-neutral-600 dark:text-neutral-400", + viewBox: "0 0 24 24", + fill: "none", + strokeWidth: "1.5", + strokeLinecap: "round", + strokeLinejoin: "round", + stroke: "currentColor", + }, }; From 82916cce1b216fed9c629f4f5f224f0c4d723c21 Mon Sep 17 00:00:00 2001 From: Emil Gulamov <125820963+mearashadowfax@users.noreply.github.com> Date: Mon, 25 Mar 2024 22:40:55 +0400 Subject: [PATCH 3/3] Add French translations of new pages and update site configuration Introduced French translations of new pages including 404, contact, products index, home, and services. Also updated site configuration to handle French translations and added a new ContactSection_fr.astro component for the French version of the Contact Us section. --- astro.config.mjs | 7 + .../sections/ContactSection_fr.astro | 119 ++++++++++++ src/pages/fr/404.astro | 45 +++++ src/pages/fr/contact.astro | 30 +++ src/pages/fr/index.astro | 143 ++++++++++++++ src/pages/fr/products/index.astro | 136 +++++++++++++ src/pages/fr/services.astro | 181 ++++++++++++++++++ 7 files changed, 661 insertions(+) create mode 100644 src/components/sections/ContactSection_fr.astro create mode 100644 src/pages/fr/404.astro create mode 100644 src/pages/fr/contact.astro create mode 100644 src/pages/fr/index.astro create mode 100644 src/pages/fr/products/index.astro create mode 100644 src/pages/fr/services.astro diff --git a/astro.config.mjs b/astro.config.mjs index d7ac878..a9d7c4f 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -12,6 +12,13 @@ export default defineConfig({ image: { domains: ["images.unsplash.com"], }, + i18n: { + defaultLocale: "en", + locales: ["en", "fr"], + routing: { + prefixDefaultLocale: false + } + }, prefetch: true, integrations: [ tailwind(), diff --git a/src/components/sections/ContactSection_fr.astro b/src/components/sections/ContactSection_fr.astro new file mode 100644 index 0000000..0675203 --- /dev/null +++ b/src/components/sections/ContactSection_fr.astro @@ -0,0 +1,119 @@ +--- +// Import the necessary dependencies. +import AuthBtn from "../ui/buttons/AuthBtn.astro"; +import ContactIconBlock from "../ui/blocks/ContactIconBlock.astro"; +import TextInput from "../ui/forms/input/TextInput.astro"; +import EmailContactInput from "../ui/forms/input/EmailContactInput.astro"; +import PhoneInput from "../ui/forms/input/PhoneInput.astro"; +import TextAreaInput from "../ui/forms/input/TextAreaInput.astro"; +import Icon from "../ui/icons/Icon.astro"; + +// Define the variables that will be used in this component +const title: string = "Contactez-nous"; +const subTitle: string = + "Vous avez des questions ou souhaitez discuter d'un projet ? Contactez-nous et laissons-nous élaborer la solution parfaite avec nos outils et services."; +const formTitle: string = "Remplissez le formulaire ci-dessous"; +const formSubTitle: string = + "Nous vous répondrons dans un délai de 1 à 2 jours ouvrables."; +--- + + +
+
+
+

+ {title} +

+

+ {subTitle} +

+
+ +
+
+

+ {formTitle} +

+ + +
+
+
+ + +
+ + + +
+ +
+ +
+ +
+

+ {formSubTitle} +

+
+
+
+ + +
+ + + + + + + + + + + +
+
+
+
diff --git a/src/pages/fr/404.astro b/src/pages/fr/404.astro new file mode 100644 index 0000000..f03d793 --- /dev/null +++ b/src/pages/fr/404.astro @@ -0,0 +1,45 @@ +--- +// Import section components +import MainLayout from "@/layouts/MainLayout.astro"; +import Btn404 from "@/components/ui/buttons/Btn404.astro"; + +// Define variables for page content +const title: string = "404"; +const subTitle: string = "Oops, ce n'est pas l'outil que vous recherchiez !"; +const content: string = + "Ne laissez pas ce contretemps vous ralentir. Revenons à la construction de votre chef-d'œuvre."; +const btnTitle: string = "Retournez"; +--- + + +
+
+
+

+ {title} +

+

+ {subTitle} +

+ +

+ {content} +

+ + +
+
+
+
+ + diff --git a/src/pages/fr/contact.astro b/src/pages/fr/contact.astro new file mode 100644 index 0000000..04531e7 --- /dev/null +++ b/src/pages/fr/contact.astro @@ -0,0 +1,30 @@ +--- +// Import the necessary components +import MainLayout from "@/layouts/MainLayout.astro"; +import ContactSection from "@/components/sections/ContactSection_fr.astro"; +--- + + + + + diff --git a/src/pages/fr/index.astro b/src/pages/fr/index.astro new file mode 100644 index 0000000..f1a8d65 --- /dev/null +++ b/src/pages/fr/index.astro @@ -0,0 +1,143 @@ +--- +// Import the necessary components +import MainLayout from "@/layouts/MainLayout.astro"; +import HeroSection from "@/components/sections/landing/HeroSection.astro"; +import HeroSectionAlt from "@/components/sections/landing/HeroSectionAlt.astro"; +import ClientsSection from "@/components/sections/landing/ClientsSection.astro"; +import FeaturesGeneral from "@/components/sections/features/FeaturesGeneral.astro"; +import FeaturesNavs from "@/components/sections/features/FeaturesNavs.astro"; +import TestimonialsSection from "@/components/sections/testimonials/TestimonialsSection.astro"; +import PricingSection from "@/components/sections/pricing/PricingSection.astro"; +import FAQ from "@/components/sections/FAQ.astro"; +import AnnouncementBanner from "@/components/ui/banners/AnnouncementBanner.astro"; +import heroImage from "@/images/hero-image.avif"; +import faqs from "@/data_files/faqs.json"; +import features from "@/data_files/features.json"; +import featureImage from "@/images/features-image.avif"; +import construction from "@/images/construction-image.avif"; +import tools from "@/images/automated-tools.avif"; +import dashboard from "@/images/dashboard-image.avif"; + +const avatarSrcs: Array = [ + "https://images.unsplash.com/photo-1568602471122-7832951cc4c5?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=facearea&facepad=2&w=300&h=300&q=80", + "https://images.unsplash.com/photo-1531927557220-a9e23c1e4794?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=facearea&facepad=2&w=300&h=300&q=80", + "https://images.unsplash.com/photo-1541101767792-f9b2b1c4f127?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&&auto=format&fit=facearea&facepad=3&w=300&h=300&q=80", + "https://images.unsplash.com/photo-1492562080023-ab3db95bfbce?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=facearea&facepad=2&w=300&h=300&q=80", +]; +--- + + + + + ScrewFast` + subTitle="Outils matériels de haute qualité et services de construction experts pour tous les besoins en projet." + primaryBtn="Commencez à explorer" + primaryBtnURL="/products" + secondaryBtn="Contacter l'équipe commerciale" + secondaryBtnURL="/contact" + withReview={true} + avatars={avatarSrcs} + rating=`4.8 / 5` + starCount={4} + reviews=`À partir de plus de 12,8k avis` + src={heroImage} + alt="Pile de boîtes de produits ScrewFast contenant des outils matériels assortis" + /> + + + + + + ScrewFast pour répondre parfaitement à vos besoins en matériel et en construction.` + tabs={[ + { + heading: "Outils de pointe", + content: + "Optimisez vos projets avec les outils de pointe de ScrewFast. Faites l'expérience d'une efficacité accrue dans la gestion de la construction avec nos solutions automatisées sophistiquées.", + svg: "tools", + src: tools, + alt: "Équipement lourd jaune et noir sur un champ d'herbe brune", + first: true, + }, + { + heading: "Tableaux de bord intuitifs", + content: + "Naviguez facilement avec les tableaux de bord intuitifs de ScrewFast. Configurez et supervisez vos projets de manière transparente, avec des interfaces conviviales conçues pour une gestion efficace des flux de travail rapide et efficace.", + svg: "dashboard", + src: dashboard, + alt: "Capture d'écran ou représentation graphique du tableau de bord intuitif", + second: true, + }, + { + heading: "Fonctionnalités robustes", + content: + "Minimisez la complexité, maximisez la productivité. Les fonctionnalités robustes de ScrewFast sont conçues pour rationaliser votre processus de construction, offrant des résultats qui se distinguent par leur excellence.", + svg: "house", + src: construction, + alt: "Structure métallique grise d'un bâtiment près d'une grue à tour pendant la journée", + }, + ]} + /> + + + + + + + + + diff --git a/src/pages/fr/products/index.astro b/src/pages/fr/products/index.astro new file mode 100644 index 0000000..8f215e5 --- /dev/null +++ b/src/pages/fr/products/index.astro @@ -0,0 +1,136 @@ +--- +// Importing necessary components +import MainLayout from "@/layouts/MainLayout.astro"; +import PrimaryCTA from "@/components/ui/buttons/PrimaryCTA.astro"; +import CardSmall from "@/components/ui/cards/CardSmall.astro"; +import CardWide from "@/components/ui/cards/CardWide.astro"; +import FeaturesStatsAlt from "@/components/sections/features/FeaturesStatsAlt.astro"; +import TestimonialsSectionAlt from "@/components/sections/testimonials/TestimonialsSectionAlt.astro"; + +// Importing necessary functions from Astro +import { getCollection } from "astro:content"; +import type { CollectionEntry } from "astro:content"; + +// Fetching all the product related content and sorting it by main.id +const product: CollectionEntry<"products">[] = ( + await getCollection("products") +).sort( + (a: CollectionEntry<"products">, b: CollectionEntry<"products">) => + a.data.main.id - b.data.main.id +); + +// Define variables for page content +const title: string = "Produits"; +const subTitle: string = + "Explorez la durabilité et la précision des outils ScrewFast, conçus aussi bien pour les professionnels que pour les amateurs. Chacun de nos produits est fabriqué avec précision et conçu pour durer, garantissant que vous disposez du bon outil pour chaque tâche."; + +// Testimonial data that will be rendered in the component +const testimonials = [ + { + content: + "Depuis que nous avons adopté les outils matériels de ScrewFast, l'efficacité sur nos chantiers de construction a explosé. La durabilité des boulons hexagonaux et la précision des vis machine sont tout simplement inégalées. C'est rafraîchissant de travailler avec une entreprise qui comprend vraiment les exigences quotidiennes de l'industrie.", + author: "Jason Clark", + role: "Contremaître de chantier | TopBuild", + avatarSrc: + "https://images.unsplash.com/photo-1500648767791-00dcc994a43e?q=80&w=1374&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=facearea&facepad=2&w=320&h=320&q=80", + avatarAlt: "Description de l'image", + }, + + { + content: + "En tant que designer d'intérieur, je suis toujours à la recherche de matériaux et d'outils de haute qualité qui m'aident à donner vie à mes visions. L'assortiment de vis mixtes de ScrewFast a révolutionné mes projets, offrant le mélange parfait de qualité et de variété. Le support client exceptionnel était la cerise sur le gâteau !", + author: "Maria Gonzalez", + role: "Designer d'intérieur | Creative Spaces", + avatarSrc: + "https://images.unsplash.com/photo-1544005313-94ddf0286df2?q=80&w=1376&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D8&auto=format&fit=facearea&facepad=2&w=320&h=320&q=80", + avatarAlt: "Description de l'image", + }, + + { + content: + "Je suis menuisier professionnel depuis plus de 15 ans, et je peux sincèrement dire que les boulons et écrous à tarauder de ScrewFast sont parmi les meilleurs que j'ai utilisés. Ils adhèrent comme aucun autre, et j'ai une confiance totale dans chaque joint et élément. De plus, le service est impeccable - ils se soucient vraiment du succès de mon projet.", + author: "Richard Kim", + role: "Menuisier-Maître | WoodWright", + avatarSrc: + "https://images.unsplash.com/photo-1474176857210-7287d38d27c6?q=80&w=1470&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D8&auto=format&fit=facearea&facepad=2&w=320&h=320&q=80", + avatarAlt: "Description de l'image", + }, +]; +--- + + +
+
+
+

+ {title} +

+ { + subTitle && ( + + ) + } +
+ +
+ + +
+ { + product.map((product, index) => { + const position = index % 4; + if (position === 0 || position === 3) { + return ; + } else { + return ; + } + }) + } +
+
+ + + + +
diff --git a/src/pages/fr/services.astro b/src/pages/fr/services.astro new file mode 100644 index 0000000..ee1d242 --- /dev/null +++ b/src/pages/fr/services.astro @@ -0,0 +1,181 @@ +--- +// Import necessary components +import MainLayout from "@/layouts/MainLayout.astro"; +import MainSection from "@/components/ui/blocks/MainSection.astro"; +import LeftSection from "@/components/ui/blocks/LeftSection.astro"; +import RightSection from "@/components/ui/blocks/RightSection.astro"; +import FeaturesStats from "@/components/sections/features/FeaturesStats.astro"; + +// Import necessary images +import blueprints from "@/images/blueprints-image.avif"; +import personWorking from "@/images/person-working.avif"; +import beforeAfter from "@/images/before-after.avif"; +import constructionWorkers from "@/images/construction-workers.avif"; +import aerialView from "@/images/aerial-view.avif"; +import usingTools from "@/images/using-tools.avif"; +import progressBuilding from "@/images/progress-building.avif"; +import underConstruction from "@/images/under-construction.avif"; + +interface Article { + isRightSection: boolean; + title: string; + subTitle: string; + btnExists?: boolean; + btnTitle?: string; + btnURL?: string; + single?: boolean; + img?: any; + imgAlt?: string; + imgOne?: any; + imgOneAlt?: string; + imgTwo?: any; + imgTwoAlt?: string; +} + +const articles: Article[] = [ + { + isRightSection: true, + title: "Fournir des conseils d'experts", + subTitle: + "Se lancer dans un projet de construction peut être accablant. Avec nos services de consultation professionnelle, nous vous guidons à chaque étape, en veillant à ce que vous preniez des décisions éclairées. Que vous soyez un passionné du bricolage ou un entrepreneur qualifié, nos experts sont là pour vous offrir des conseils sur mesure sur la sélection de produits, l'envergure du projet et la conformité aux réglementations locales.", + single: false, + imgOne: blueprints, + imgOneAlt: "Plans et tablette numérique avec des plans de construction.", + imgTwo: personWorking, + imgTwoAlt: "Personne travaillant au bureau", + }, + { + isRightSection: false, + title: "Transformer les conceptions en réalité", + subTitle: + "Nos artisans qualifiés apportent précision et excellence à chaque projet de construction. Des installations mineures aux travaux structuraux substantiels, ScrewFast offre des services de construction fiables pour concrétiser vos plans. Nous assurons les normes les plus élevées de sécurité et de savoir-faire, en utilisant des outils et des matériaux de haute qualité de notre vaste inventaire.", + img: beforeAfter, + imgAlt: "Chantier de construction avant et après", + btnExists: true, + btnTitle: "En savoir plus", + btnURL: "#", + }, + { + isRightSection: true, + title: "Naviguer dans les projets avec une supervision professionnelle", + subTitle: + "La gestion de projet efficace est au cœur de toute construction réussie. ScrewFast offre une planification approfondie et des services de gestion solides qui maintiennent votre projet dans les délais et dans le budget. Laissez-nous gérer les complexités de la coordination des flux de travail, de l'allocation des ressources et de la communication avec les parties prenantes pendant que vous vous concentrez sur votre vision.", + single: false, + imgOne: constructionWorkers, + imgOneAlt: "Ouvriers du bâtiment orchestrant un projet", + imgTwo: aerialView, + imgTwoAlt: "Vue aérienne d'une construction gérée", + }, + { + isRightSection: false, + title: "Garantir des performances durables", + subTitle: + "Notre engagement envers votre projet ne s'arrête pas à son achèvement. ScrewFast propose des services de maintenance et de support continus pour assurer la longévité et les performances de votre construction. Des vérifications régulières à l'assistance en cas d'urgence, notre équipe réactive est là pour vous fournir un soutien sans faille.", + img: usingTools, + imgAlt: + "Homme en gilet orange et noir portant un casque blanc tenant un outil électrique jaune et noir", + }, + { + isRightSection: true, + title: "Élaboration de stratégies sur mesure pour des défis uniques", + subTitle: + "Pour nos clients d'entreprise de plus grande envergure, ScrewFast propose des solutions personnalisées conçues pour répondre à des défis spécifiques de l'industrie. En comprenant vos besoins uniques, nous concevons des stratégies sur mesure visant à optimiser vos opérations, à améliorer l'efficacité et à faire avancer votre entreprise.", + single: false, + imgOne: progressBuilding, + imgOneAlt: "Structure de bâtiment en cours de construction", + imgTwo: underConstruction, + imgTwoAlt: "Bâtiment marron et gris en construction", + btnExists: true, + btnTitle: "Lire la suite", + btnURL: "#", + }, +]; +--- + + + + + + { + articles.map((article) => { + return article.isRightSection ? ( + + ) : ( + + ); + }) + } + + +