| { | { | ||||
| "name": "frontend", | "name": "frontend", | ||||
| "version": "3.0.3", | |||||
| "version": "3.0.4", | |||||
| "private": true, | "private": true, | ||||
| "dependencies": { | "dependencies": { | ||||
| "@faceless-ui/slider": "^1.1.14", | "@faceless-ui/slider": "^1.1.14", |
| import React from 'react' | import React from 'react' | ||||
| const api_url = process.env.REACT_APP_API_URL; | |||||
| const ArticleAuthorSection = ({data}) => { | const ArticleAuthorSection = ({data}) => { | ||||
| return ( | return ( | ||||
| <div className="flex gap-4 mb-32p items-center"> | <div className="flex gap-4 mb-32p items-center"> | ||||
| <img | <img | ||||
| className="max-h-[60px] object-fit rounded-full" | className="max-h-[60px] object-fit rounded-full" | ||||
| src={api_url + data.AuthorImage.data.attributes.url} | |||||
| alt={api_url + data.AuthorImage.data.attributes.alternativeText} | |||||
| src={data.AuthorImage.data.attributes.url} | |||||
| alt={data.AuthorImage.data.attributes.alternativeText} | |||||
| /> | /> | ||||
| <div className="flex flex-col items-start align-middle"> | <div className="flex flex-col items-start align-middle"> | ||||
| <p className="paragraph">{data.Author}</p> | <p className="paragraph">{data.Author}</p> |
| <div className="mb-12"> | <div className="mb-12"> | ||||
| <div className="w-full"> | <div className="w-full"> | ||||
| <img | <img | ||||
| src={api_url + post.image.data.attributes.formats.thumbnail.url} | |||||
| src={post.image.data.attributes.formats.thumbnail.url} | |||||
| alt="Post's image" | alt="Post's image" | ||||
| className="max-w-fit max-h-fit" | className="max-w-fit max-h-fit" | ||||
| /> | /> |
| className={'card max-w-[360px]'} | className={'card max-w-[360px]'} | ||||
| > | > | ||||
| <img | <img | ||||
| src={api_url + card.icon.data.attributes.url} | |||||
| src={card.icon.data.attributes.url} | |||||
| alt={card.icon.data.attributes.alternativeText} | alt={card.icon.data.attributes.alternativeText} | ||||
| className={'ml-auto mr-auto block w-[70px] bg-none text-dark-gray rounded-full'} | className={'ml-auto mr-auto block w-[70px] bg-none text-dark-gray rounded-full'} | ||||
| /> | /> |
| </div> | </div> | ||||
| <img | <img | ||||
| src={api_url + card.icon.data.attributes.url} | |||||
| src={card.icon.data.attributes.url} | |||||
| className="ml-auto mr-auto block w-[70px] text-dark-gray bg-none rounded-full" | className="ml-auto mr-auto block w-[70px] text-dark-gray bg-none rounded-full" | ||||
| /> | /> | ||||
| <h3 className="ml-6 w-full font-semibold text-2xl">{card.title}</h3> | <h3 className="ml-6 w-full font-semibold text-2xl">{card.title}</h3> |
| </h3> | </h3> | ||||
| <p className="text-sm">{props.client_paragraph}</p> | <p className="text-sm">{props.client_paragraph}</p> | ||||
| </div> | </div> | ||||
| <img src={api_url + props.image} alt="Case Study's Image" /> | |||||
| <img src={props.image} alt="Case Study's Image" /> | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| {/* Summary, Engineers & Technologies */} | {/* Summary, Engineers & Technologies */} | ||||
| <ul className="flex flex-row items-center justify-center mt-2 md:mt-0"> | <ul className="flex flex-row items-center justify-center mt-2 md:mt-0"> | ||||
| {study.technologies.data.map(technology => ( | {study.technologies.data.map(technology => ( | ||||
| <li key={technology.id} className="mr-2"> | <li key={technology.id} className="mr-2"> | ||||
| <img src={api_url + technology.attributes.url} alt="Technology's Icon" width={27} /> | |||||
| <img src={technology.attributes.url} alt="Technology's Icon" width={27} /> | |||||
| </li> | </li> | ||||
| ))} | ))} | ||||
| </ul> | </ul> |
| (item.media.data && | (item.media.data && | ||||
| <img | <img | ||||
| key={index} | key={index} | ||||
| src={api_url + item.media.data.attributes.url} | |||||
| src={item.media.data.attributes.url} | |||||
| alt={item.media.data.attributes.alternativeText} | alt={item.media.data.attributes.alternativeText} | ||||
| className={ | className={ | ||||
| 'image-switch bg-fixed hidden sm:block opacity-0 absolute top-1/4 right-10 w-2/5 transition-all' + | 'image-switch bg-fixed hidden sm:block opacity-0 absolute top-1/4 right-10 w-2/5 transition-all' + |
| <div className="flex gap-2"> | <div className="flex gap-2"> | ||||
| <img | <img | ||||
| className="max-h-[36px] object-fit rounded-full" | className="max-h-[36px] object-fit rounded-full" | ||||
| src={api_url + element.attributes.AuthorImage.data.attributes.url} | |||||
| src={element.attributes.AuthorImage.data.attributes.url} | |||||
| alt={ | alt={ | ||||
| api_url + | api_url + | ||||
| element.attributes.AuthorImage.data.attributes.alternativeText | element.attributes.AuthorImage.data.attributes.alternativeText | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <img | <img | ||||
| src={api_url + element.attributes.ArticleImage.data.attributes.url} | |||||
| src={element.attributes.ArticleImage.data.attributes.url} | |||||
| alt={ | alt={ | ||||
| api_url + element.attributes.ArticleImage.data.attributes.alternativeText | |||||
| element.attributes.ArticleImage.data.attributes.alternativeText | |||||
| } | } | ||||
| /> | /> | ||||
| </a> | </a> |
| btn: 'check it out', | btn: 'check it out', | ||||
| }; | }; | ||||
| const api_url = process.env.REACT_APP_API_URL; | |||||
| const ProcessSection = ({ image, imageAlt, heading, btn, mobileImages }) => { | const ProcessSection = ({ image, imageAlt, heading, btn, mobileImages }) => { | ||||
| const [isMobile, setIsMobile] = useState(false); | const [isMobile, setIsMobile] = useState(false); | ||||
| <div className="relative mx-auto my-32p md:my-90p"> | <div className="relative mx-auto my-32p md:my-90p"> | ||||
| {!isMobile ? ( | {!isMobile ? ( | ||||
| <div className="w-full"> | <div className="w-full"> | ||||
| {image ? <img src={api_url + image.data.attributes.url} alt={image.data.attributes.alternativeText}></img> : null} | |||||
| {image ? <img src={image.data.attributes.url} alt={image.data.attributes.alternativeText}></img> : null} | |||||
| </div> | </div> | ||||
| ) : ( | ) : ( | ||||
| <div className=""> | <div className=""> |
| import propTypes from 'prop-types'; | import propTypes from 'prop-types'; | ||||
| export default function ServiceCard(props) { | export default function ServiceCard(props) { | ||||
| const api_url = process.env.REACT_APP_API_URL; | |||||
| return ( | return ( | ||||
| <div className="flex flex-col md:flex-row items-center md:items-center justify-center py-16" key={props.key}> | <div className="flex flex-col md:flex-row items-center md:items-center justify-center py-16" key={props.key}> | ||||
| <div className="flex flex-col items-center justify-center"> | <div className="flex flex-col items-center justify-center"> | ||||
| <img src={api_url + props.icon} alt="Icon" className="w-24 md:w-64" /> | |||||
| <img src={props.icon} alt="Icon" className="w-24 md:w-64" /> | |||||
| </div> | </div> | ||||
| <div className="mt-2 md:mt-0 flex flex-col items-center md:items-start text-center md:text-left"> | <div className="mt-2 md:mt-0 flex flex-col items-center md:items-start text-center md:text-left"> | ||||
| <h3 className="ml-0 md:ml-3 text-lg font-semibold dark:text-white">{props.heading}</h3> | <h3 className="ml-0 md:ml-3 text-lg font-semibold dark:text-white">{props.heading}</h3> |
| name={item[0].attributes.Name} | name={item[0].attributes.Name} | ||||
| role={item[0].attributes.Role} | role={item[0].attributes.Role} | ||||
| company={item[0].attributes.Company} | company={item[0].attributes.Company} | ||||
| clientImg={api_url + item[0].attributes.Image.data?.attributes.url} | |||||
| clientImg={item[0].attributes.Image.data?.attributes.url} | |||||
| paragraph={item[0].attributes.Quote} | paragraph={item[0].attributes.Quote} | ||||
| /> | /> | ||||
| </Fragment> | </Fragment> | ||||
| name={item[1].attributes.Name} | name={item[1].attributes.Name} | ||||
| role={item[1].attributes.Role} | role={item[1].attributes.Role} | ||||
| company={item[1].attributes.Company} | company={item[1].attributes.Company} | ||||
| clientImg={api_url + item[1].attributes.Image.data?.attributes.url} | |||||
| clientImg={item[1].attributes.Image.data?.attributes.url} | |||||
| paragraph={item[1].attributes.Quote} | paragraph={item[1].attributes.Quote} | ||||
| /> | /> | ||||
| </Fragment> | </Fragment> |
| import propTypes from 'prop-types'; | import propTypes from 'prop-types'; | ||||
| const api_url = process.env.REACT_APP_API_URL; | |||||
| export default function WhyUsCard(props) { | export default function WhyUsCard(props) { | ||||
| return ( | return ( | ||||
| <div className="card-no-hover w-fit h-full flex flex-col text-center justify-between group"> | <div className="card-no-hover w-fit h-full flex flex-col text-center justify-between group"> | ||||
| <img | <img | ||||
| src={api_url + props.image} | |||||
| src={props.image} | |||||
| alt={props.alt} | alt={props.alt} | ||||
| className="ml-auto mr-auto block w-2/5 bg-baby-blue text-dark-gray rounded-full" | className="ml-auto mr-auto block w-2/5 bg-baby-blue text-dark-gray rounded-full" | ||||
| /> | /> |
| const Image = ({data}) => { | const Image = ({data}) => { | ||||
| return ( | return ( | ||||
| <img src={api_url + data.data.attributes.url} alt={data.data.attributes.alternativeText} className='rounded-md w-full' /> | |||||
| <img src={data.data.attributes.url} alt={data.data.attributes.alternativeText} className='rounded-md w-full' /> | |||||
| ) | ) | ||||
| } | } | ||||
| index == leng - 1 ? ( | index == leng - 1 ? ( | ||||
| <img | <img | ||||
| className="col-start-1 col-span-2 row-start-1 row-span-1 w-full rounded-md" | className="col-start-1 col-span-2 row-start-1 row-span-1 w-full rounded-md" | ||||
| src={api_url + item.attributes.url} | |||||
| src={item.attributes.url} | |||||
| alt={item.attributes.alternativeText} | alt={item.attributes.alternativeText} | ||||
| /> | /> | ||||
| ) : ( | ) : ( | ||||
| <img | <img | ||||
| className="col-span-1 w-full rounded-md" | className="col-span-1 w-full rounded-md" | ||||
| src={api_url + item.attributes.url} | |||||
| src={item.attributes.url} | |||||
| alt={item.attributes.alternativeText} | alt={item.attributes.alternativeText} | ||||
| /> | /> | ||||
| ) | ) | ||||
| ) : ( | ) : ( | ||||
| <img | <img | ||||
| className="col-span-1 w-full rounded-md" | className="col-span-1 w-full rounded-md" | ||||
| src={api_url + item.attributes.url} | |||||
| src={item.attributes.url} | |||||
| alt={item.attributes.alternativeText} | alt={item.attributes.alternativeText} | ||||
| /> | /> | ||||
| )} | )} |
| <div className="flex gap-4"> | <div className="flex gap-4"> | ||||
| <img | <img | ||||
| className="max-h-[45px] object-fit rounded-full" | className="max-h-[45px] object-fit rounded-full" | ||||
| src={api_url + data.AuthorImage.data.attributes.url} | |||||
| src={data.AuthorImage.data.attributes.url} | |||||
| alt={data.AuthorImage.data.attributes.alternativeText} | alt={data.AuthorImage.data.attributes.alternativeText} | ||||
| /> | /> | ||||
| <div className="flex flex-col items-start"> | <div className="flex flex-col items-start"> | ||||
| </div> | </div> | ||||
| <div className="w-full md:w-[450px] rounded-8 overflow-hidden"> | <div className="w-full md:w-[450px] rounded-8 overflow-hidden"> | ||||
| <img | <img | ||||
| src={api_url + data.ArticleImage.data.attributes.url} | |||||
| src={data.ArticleImage.data.attributes.url} | |||||
| alt={data.ArticleImage.data.attributes.alternativeText} | alt={data.ArticleImage.data.attributes.alternativeText} | ||||
| /> | /> | ||||
| </div> | </div> |
| import propTypes from 'prop-types'; | import propTypes from 'prop-types'; | ||||
| const api_url = process.env.REACT_APP_API_URL; | |||||
| export default function Card(props) { | export default function Card(props) { | ||||
| return ( | return ( | ||||
| <div className="card mb-8 lg:mb-0 lg:mr-8" key={props.key}> | <div className="card mb-8 lg:mb-0 lg:mr-8" key={props.key}> | ||||
| <img src={api_url + props.image} className="ml-auto mr-auto block w-2/5 bg-baby-blue text-dark-gray rounded-full p-4" /> | |||||
| <img src={props.image} className="ml-auto mr-auto block w-2/5 bg-baby-blue text-dark-gray rounded-full p-4" /> | |||||
| <h3 className="mt-6 font-semibold text-2xl">{props.heading}</h3> | <h3 className="mt-6 font-semibold text-2xl">{props.heading}</h3> | ||||
| <p className="mt-6 text-sm"> | <p className="mt-6 text-sm"> | ||||
| {props.paragraph} | {props.paragraph} |
| exit={{ x: 60, opacity: 0 }} | exit={{ x: 60, opacity: 0 }} | ||||
| transition={{ duration: 0.3, ease: 'easeOut' }} | transition={{ duration: 0.3, ease: 'easeOut' }} | ||||
| > | > | ||||
| <img src={api_url + img.data.attributes.url} alt={img.data.attributes.alternativeText} /> | |||||
| <img src={img.data.attributes.url} alt={img.data.attributes.alternativeText} /> | |||||
| </motion.div> | </motion.div> | ||||
| </div> | </div> | ||||
| </div> | </div> |
| vid.playbackRate = 2; | vid.playbackRate = 2; | ||||
| axios | axios | ||||
| .get( | .get( | ||||
| `${api_url}/api/careerspage?populate[0]=heading&populate[1]=info&populate[2]=job.icon`, | |||||
| `${api_url}/api/w-home-page?populate[0]=BusinessInquiry.image&populate[1]=ApplyPosition.image`, | |||||
| ) | ) | ||||
| .then(res => { | .then(res => { | ||||
| setCntCareers(res.data.data.attributes); | setCntCareers(res.data.data.attributes); | ||||
| onMouseDown={handleTabClick} | onMouseDown={handleTabClick} | ||||
| > | > | ||||
| {tab ? ( | {tab ? ( | ||||
| <PageTitle left heading={business.title} subheading={business.subtitle} /> | |||||
| <PageTitle left heading={cntCareers.BusinessInquiry.title} subheading={cntCareers.BusinessInquiry.subtitle} /> | |||||
| ) : ( | ) : ( | ||||
| <PageTitle left heading={job.title} subheading={job.title} /> | |||||
| <PageTitle left heading={cntCareers.ApplyPosition.title} subheading={cntCareers.ApplyPosition.subtitle} /> | |||||
| )} | )} | ||||
| <Tab.List className="flex flex-row items-center md:flex-col lg:flex-row h-fit w-fit max-w-max md:ml-auto z-20 p-1 min-h-12 space-x-1 bg-dg-primary-400 rounded-xl my-4 align-middle"> | <Tab.List className="flex flex-row items-center md:flex-col lg:flex-row h-fit w-fit max-w-max md:ml-auto z-20 p-1 min-h-12 space-x-1 bg-dg-primary-400 rounded-xl my-4 align-middle"> |
| transition={{ duration: 0.3, ease: 'easeOut' }} | transition={{ duration: 0.3, ease: 'easeOut' }} | ||||
| > | > | ||||
| <img | <img | ||||
| src={api_url + props.img.data.attributes.url} | |||||
| src={props.img.data.attributes.url} | |||||
| alt={props.img.data.attributes.alternativeText} | alt={props.img.data.attributes.alternativeText} | ||||
| /> | /> | ||||
| </motion.div> | </motion.div> |
| <a className={'card box my-2 flex- flex-col items-center'} href={`/case-studies/${data.Slug}`}> | <a className={'card box my-2 flex- flex-col items-center'} href={`/case-studies/${data.Slug}`}> | ||||
| {data.BackgroundImage && ( | {data.BackgroundImage && ( | ||||
| <img | <img | ||||
| src={api_url + data.BackgroundImage.data.attributes?.url} | |||||
| src={data.BackgroundImage.data.attributes?.url} | |||||
| alt={data.BackgroundImage.data.attributes?.alternativeText} | alt={data.BackgroundImage.data.attributes?.alternativeText} | ||||
| className={'mb-12 mx-auto self-center'} | className={'mb-12 mx-auto self-center'} | ||||
| ></img> | ></img> |
| {slides.map((slide, index) => ( | {slides.map((slide, index) => ( | ||||
| <Slide key={index} index={index} className={'h-full'}> | <Slide key={index} index={index} className={'h-full'}> | ||||
| <img | <img | ||||
| src={api_url + slide.url} | |||||
| src={slide.url} | |||||
| alt={slide.alternativeText} | alt={slide.alternativeText} | ||||
| className={'h-full mx-auto'} | className={'h-full mx-auto'} | ||||
| ></img> | ></img> |
| <meta name="description" content={seo.metaDescription} /> | <meta name="description" content={seo.metaDescription} /> | ||||
| <link rel="canonical" href={seo.canonicalURL} /> | <link rel="canonical" href={seo.canonicalURL} /> | ||||
| <meta name="keywords" content={seo.keywords} /> | <meta name="keywords" content={seo.keywords} /> | ||||
| <meta name="viewport" content={seo.metaViewport} /> | |||||
| <meta name="viewport" content={seo.metaViewport ? seo.metaViewport : 'width=device-width, height=device-height'} /> | |||||
| <meta name="robots" content={seo.metaRobots} /> | <meta name="robots" content={seo.metaRobots} /> | ||||
| {seo.metaSocial && seo.metaSocial.lenght > 0 && ( | {seo.metaSocial && seo.metaSocial.lenght > 0 && ( | ||||
| <Fragment> | <Fragment> | ||||
| <meta property="og:title" content={seo.metaSocial[0]?.title} /> | <meta property="og:title" content={seo.metaSocial[0]?.title} /> | ||||
| <meta | <meta | ||||
| property="og:image" | property="og:image" | ||||
| content={`${api_url}${seo.metaSocial[0]?.image?.data?.attributes?.url}`} | |||||
| content={`${seo.metaSocial[0]?.image?.data?.attributes?.url}`} | |||||
| /> | /> | ||||
| <meta property="og:description" content={seo.metaSocial[0]?.description} /> | <meta property="og:description" content={seo.metaSocial[0]?.description} /> | ||||
| <meta property="twitter:title" content={seo.metaSocial[1]?.title} /> | <meta property="twitter:title" content={seo.metaSocial[1]?.title} /> | ||||
| {seo.metaSocial[1]?.image?.data && ( | {seo.metaSocial[1]?.image?.data && ( | ||||
| <meta | <meta | ||||
| property="twitter:image" | property="twitter:image" | ||||
| content={`${api_url}${seo.metaSocial[1]?.image?.data?.attributes?.url}`} | |||||
| content={`${seo.metaSocial[1]?.image?.data?.attributes?.url}`} | |||||
| /> | /> | ||||
| )} | )} | ||||
| import React, { useRef } from 'react'; | import React, { useRef } from 'react'; | ||||
| import { useEffect } from 'react'; | |||||
| import { useState } from 'react'; | import { useState } from 'react'; | ||||
| import UseAnimations from 'react-useanimations'; | import UseAnimations from 'react-useanimations'; | ||||
| const VideoComponent = ({ source, alt }) => { | const VideoComponent = ({ source, alt }) => { | ||||
| const [mute, setMute] = useState(true); | const [mute, setMute] = useState(true); | ||||
| const [string, setString] = useState(''); | |||||
| const vidRef = useRef(); | const vidRef = useRef(); | ||||
| const muteRef = useRef(); | const muteRef = useRef(); | ||||
| setMute(!mute); | setMute(!mute); | ||||
| } | } | ||||
| // this is needed becouse Strapi has a wierd bug that duplicates the folder path from Cloudflare, | |||||
| // this function checks the prop for dublicate folder path and removes one instance | |||||
| function handleString(str) { | |||||
| if (str.indexOf('media-lib/') !== -1) { | |||||
| let afterMediaLib = str.substring(str.indexOf('media-lib/') + 'media-lib/'.length); | |||||
| if ( | |||||
| afterMediaLib.indexOf('media-lib/') !== -1 && | |||||
| afterMediaLib.substring( | |||||
| 0, | |||||
| afterMediaLib.indexOf('media-lib/') + 'media-lib/'.length, | |||||
| ) === 'media-lib/' | |||||
| ) { | |||||
| str = str.replace('media-lib/', ''); | |||||
| } | |||||
| } | |||||
| setString(str); | |||||
| } | |||||
| useEffect(() => { | |||||
| handleString(source); | |||||
| }, [source]); | |||||
| return ( | return ( | ||||
| <div className="w-full py-48p lg:py-72p relative"> | <div className="w-full py-48p lg:py-72p relative"> | ||||
| <video autoPlay loop ref={vidRef} muted className="rounded-[32px]"> | |||||
| <source type="video/mp4" src={api_url + source} alt={api_url + alt} /> | |||||
| </video> | |||||
| {string != '' && ( | |||||
| <video autoPlay loop ref={vidRef} muted className="rounded-[32px]"> | |||||
| <source type="video/mp4" src={string} alt={alt} /> | |||||
| </video> | |||||
| )} | |||||
| <div className="absolute bottom-16 right-4 md:bottom-24 md:right-8 rounded-full overflow-clip"> | <div className="absolute bottom-16 right-4 md:bottom-24 md:right-8 rounded-full overflow-clip"> | ||||
| <UseAnimations | <UseAnimations | ||||
| reverse={mute} | reverse={mute} |
| import React, {useEffect} from "react"; | |||||
| import React, {Fragment, useEffect} from "react"; | |||||
| const PageLayout = ({children}) => { | const PageLayout = ({children}) => { | ||||
| // }, []) | // }, []) | ||||
| return ( | return ( | ||||
| <div className="">{children}</div> | |||||
| <Fragment>{children}</Fragment> | |||||
| ); | ); | ||||
| } | } | ||||
| <p className="mt-4 paragraph">{data.Heading.Paragraph}</p> | <p className="mt-4 paragraph">{data.Heading.Paragraph}</p> | ||||
| </div> | </div> | ||||
| <img | <img | ||||
| src={api_url + data.Heading.Image.data.attributes.url} | |||||
| src={data.Heading.Image.data.attributes.url} | |||||
| alt="Our Team's image" | alt="Our Team's image" | ||||
| className="w-full md:w-1/2 text-center -ml-2 lg-ml-0" | className="w-full md:w-1/2 text-center -ml-2 lg-ml-0" | ||||
| /> | /> | ||||
| > | > | ||||
| <p className="mt-4 paragraph w-full md:w-1/2">{item.Paragraph}</p> | <p className="mt-4 paragraph w-full md:w-1/2">{item.Paragraph}</p> | ||||
| <img | <img | ||||
| src={api_url + item.Image.data.attributes.url} | |||||
| src={item.Image.data.attributes.url} | |||||
| alt="Our Team's image" | alt="Our Team's image" | ||||
| className="w-full md:w-1/2 text-center -ml-2 lg-ml-0" | className="w-full md:w-1/2 text-center -ml-2 lg-ml-0" | ||||
| /> | /> | ||||
| > | > | ||||
| <div className="flex flex-col items-center justify-center w-full"> | <div className="flex flex-col items-center justify-center w-full"> | ||||
| <img | <img | ||||
| src={api_url + data.ItalicSection.Section.Image.data.attributes.url} | |||||
| src={data.ItalicSection.Section.Image.data.attributes.url} | |||||
| alt={ | alt={ | ||||
| api_url + | |||||
| data.ItalicSection.Section.Image.data.attributes.alternativeText | data.ItalicSection.Section.Image.data.attributes.alternativeText | ||||
| } | } | ||||
| className="max-w-[660px] w-full" | className="max-w-[660px] w-full" | ||||
| <p className="paragraph mt-4">{data.Mission.Paragraph}</p> | <p className="paragraph mt-4">{data.Mission.Paragraph}</p> | ||||
| </div> | </div> | ||||
| <img | <img | ||||
| src={api_url + data.Mission.Image.data.attributes.url} | |||||
| alt={api_url + data.Mission.Image.data.attributes.alternativeText} | |||||
| src={data.Mission.Image.data.attributes.url} | |||||
| alt={data.Mission.Image.data.attributes.alternativeText} | |||||
| className="text-center w-full md:w-1/2" | className="text-center w-full md:w-1/2" | ||||
| /> | /> | ||||
| </div> | </div> | ||||
| <div className="my-8 flex flex-col-reverse md:flex-row justify-center items-center w-full max-w-custom m-auto px-8 xl:px-0"> | <div className="my-8 flex flex-col-reverse md:flex-row justify-center items-center w-full max-w-custom m-auto px-8 xl:px-0"> | ||||
| <img | <img | ||||
| src={api_url + data.Vision.Image.data.attributes.url} | |||||
| alt={api_url + data.Vision.Image.data.attributes.alternativeText} | |||||
| src={data.Vision.Image.data.attributes.url} | |||||
| alt={data.Vision.Image.data.attributes.alternativeText} | |||||
| className="text-center w-full md:w-1/2 mt-8 md:mt-0" | className="text-center w-full md:w-1/2 mt-8 md:mt-0" | ||||
| /> | /> | ||||
| <div className="w-full md:w-1/2 md:pl-16"> | <div className="w-full md:w-1/2 md:pl-16"> | ||||
| {data.Values.Items && data.Values.Items.map((item, index) => ( | {data.Values.Items && data.Values.Items.map((item, index) => ( | ||||
| <CardValues | <CardValues | ||||
| key={index} | key={index} | ||||
| image={api_url + item.Image.data.attributes.url} | |||||
| alt={api_url + item.Image.data.attributes.alternativeText || 'alt'} | |||||
| image={item.Image.data.attributes.url} | |||||
| alt={item.Image.data.attributes.alternativeText || 'alt'} | |||||
| heading={item.heading} | heading={item.heading} | ||||
| paragraph={item.paragraph} | paragraph={item.paragraph} | ||||
| /> | /> | ||||
| {data.Partners.images.data && data.Partners.images.data.map((item, index) => ( | {data.Partners.images.data && data.Partners.images.data.map((item, index) => ( | ||||
| <img | <img | ||||
| key={index} | key={index} | ||||
| src={api_url + item.attributes.url} | |||||
| alt={api_url + item.attributes.alternativeText} | |||||
| src={item.attributes.url} | |||||
| alt={item.attributes.alternativeText} | |||||
| className="w-16 md:w-20 lg:w-24" | className="w-16 md:w-20 lg:w-24" | ||||
| /> | /> | ||||
| ))} | ))} | ||||
| <p className="paragraph mt-2">{industry.paragraph}</p> | <p className="paragraph mt-2">{industry.paragraph}</p> | ||||
| {industry.Image.data && ( | {industry.Image.data && ( | ||||
| <img | <img | ||||
| src={api_url + industry.Image.data.attributes.url} | |||||
| alt={api_url + industry.Image.data.attributes.alternativeText} | |||||
| src={industry.Image.data.attributes.url} | |||||
| alt={industry.Image.data.attributes.alternativeText} | |||||
| className="m-auto" | className="m-auto" | ||||
| /> | /> | ||||
| )} | )} |
| </p> | </p> | ||||
| {/* Video Frame */} | {/* Video Frame */} | ||||
| {data && data.Video != undefined ? ( | |||||
| {data && data.Video && data.Video.data && | |||||
| <VideoComponent source={data.Video.data.attributes.url} alt={data.Video.data.attributes.alternativeText} /> | <VideoComponent source={data.Video.data.attributes.url} alt={data.Video.data.attributes.alternativeText} /> | ||||
| ) : null} | |||||
| } | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| {data.benefits_card.map((item, index) => ( | {data.benefits_card.map((item, index) => ( | ||||
| <CardValues | <CardValues | ||||
| key={index} | key={index} | ||||
| image={api_url + item.media.data.attributes.url} | |||||
| image={item.media.data.attributes.url} | |||||
| heading={item.heading} | heading={item.heading} | ||||
| paragraph={item.paragraph} | paragraph={item.paragraph} | ||||
| /> | /> |
| > | > | ||||
| <div className="absolute top-0 left-[-50%] lg:left-0 right-[-50%] lg:right-0 bottom-0"> | <div className="absolute top-0 left-[-50%] lg:left-0 right-[-50%] lg:right-0 bottom-0"> | ||||
| <img | <img | ||||
| src={api_url + data[0].attributes.BackgroundImage.data?.attributes.url} | |||||
| src={data[0].attributes.BackgroundImage.data?.attributes.url} | |||||
| alt={ | alt={ | ||||
| data[0].attributes.BackgroundImage.data?.attributes.alternativeText | data[0].attributes.BackgroundImage.data?.attributes.alternativeText | ||||
| } | } | ||||
| </div> | </div> | ||||
| {data[0].attributes.CaseStudyImage.data && ( | {data[0].attributes.CaseStudyImage.data && ( | ||||
| <img | <img | ||||
| src={api_url + data[0].attributes.CaseStudyImage.data.attributes.url} | |||||
| src={data[0].attributes.CaseStudyImage.data.attributes.url} | |||||
| alt={ | alt={ | ||||
| data[0].attributes.CaseStudyImage.data.attributes.alternativeText | data[0].attributes.CaseStudyImage.data.attributes.alternativeText | ||||
| } | } |
| </div> | </div> | ||||
| </div> | </div> | ||||
| <img | <img | ||||
| src={api_url + item.img.data.attributes.url} | |||||
| src={item.img.data.attributes.url} | |||||
| alt={item.img.data.attributes.alternativeText} | alt={item.img.data.attributes.alternativeText} | ||||
| className="text-center w-full md:w-1/2" | className="text-center w-full md:w-1/2" | ||||
| /> | /> |
| /> | /> | ||||
| ) : null} | ) : null} | ||||
| {/* Our Services Section */} | |||||
| {/* <ServicesHome /> */} | |||||
| {/* Our Process Section */} | {/* Our Process Section */} | ||||
| {data ? ( | {data ? ( | ||||
| <ProcessSection | <ProcessSection | ||||
| heading={data.ProcessHeading} | heading={data.ProcessHeading} |
| <div className="w-full"> | <div className="w-full"> | ||||
| {data ? ( | {data ? ( | ||||
| <img | <img | ||||
| src={api_url + data.ProcessImage.data.attributes.url} | |||||
| src={data.ProcessImage.data.attributes.url} | |||||
| alt={data.ProcessImage.data.attributes.alternativeText} | alt={data.ProcessImage.data.attributes.alternativeText} | ||||
| ></img> | ></img> | ||||
| ) : null} | ) : null} |
| } | } | ||||
| > | > | ||||
| <div> | <div> | ||||
| <img src={api_url + item.img.data.attributes.url}></img> | |||||
| <img src={item.img.data.attributes.url}></img> | |||||
| </div> | </div> | ||||
| <div className="flex flex-col gap-[8px] md:gap-[16px] max-w-[520px]"> | <div className="flex flex-col gap-[8px] md:gap-[16px] max-w-[520px]"> | ||||
| <h6 className="n-h3-heading text-dark-gray">{item.title}</h6> | <h6 className="n-h3-heading text-dark-gray">{item.title}</h6> | ||||
| <div className="radial-gradient absolute top-0 left-0 right-0 bottom-0"></div> | <div className="radial-gradient absolute top-0 left-0 right-0 bottom-0"></div> | ||||
| <div className="max-w-custom mx-auto"> | <div className="max-w-custom mx-auto"> | ||||
| <img | <img | ||||
| src={api_url + data.OfficeImg.data.attributes.url} | |||||
| src={data.OfficeImg.data.attributes.url} | |||||
| alt={data.OfficeImgAlt} | alt={data.OfficeImgAlt} | ||||
| ></img> | ></img> | ||||
| </div> | </div> |