@treely/strapi-slices 8.0.1 → 8.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.tsx", "../src/integrations/strapi/strapiClient.ts", "../src/constants/strapi.ts", "../src/integrations/strapi/getAllSlugsFromStrapi.ts", "../src/integrations/fpmClient.ts", "../src/constants/api.ts", "../src/integrations/strapi/getStrapiProjects.ts", "../src/integrations/strapi/getPortfolioProjects.ts", "../src/integrations/strapi/getStrapiCollectionType.ts", "../src/integrations/strapi/getStrapiSingleType.ts", "../src/utils/strapiMediaUrl.ts", "../src/constants/metadata.ts", "../src/constants/slicesConfig.ts", "../src/utils/mergeGlobalAndStrapiBlogPostData.ts", "../src/utils/mergeGlobalAndStrapiCustomerStoryData.ts", "../src/utils/mergeGlobalAndStrapiPageData.ts", "../src/utils/mergeGlobalAndStrapiProjectData.ts", "../src/utils/strapiLinkUrl.ts", "../src/components/PreviewAlert/PreviewAlert.tsx", "../src/components/SEOTags/SEOTags.tsx", "../src/slices/FullWidthImage/FullWidthImage.tsx", "../src/components/FullScreenImage/FullScreenImage.tsx", "../src/components/FullScreenImage/ZoomableImage.tsx", "../src/components/FullScreenImage/index.ts", "../src/constants/breakpoints.ts", "../src/slices/FullWidthImage/index.ts", "../src/slices/Hero/Hero.tsx", "../src/components/StrapiLinkButton/StrapiLinkButton.tsx", "../src/utils/openHubSpotChat.ts", "../src/components/ContextProvider/ContextProvider.tsx", "../src/constants/globalStyle.ts", "../src/constants/fontCustomizations.ts", "../src/slices/Comparison/messages.de.ts", "../src/components/CreditsAvailableBadge/messages.de.ts", "../src/slices/Cta/messages.de.ts", "../src/components/CustomerCard/messages.de.ts", "../src/components/CustomerQuoteCard/messages.de.ts", "../src/components/EventCard/messages.de.ts", "../src/slices/Events/messages.de.ts", "../src/slices/Glossary/messages.de.ts", "../src/components/portfolio/DocumentsDownloadList/messages.de.ts", "../src/slices/ProjectFacts/messages.de.ts", "../src/components/ProjectGridCard/messages.de.ts", "../src/slices/ProjectsMap/messages.de.ts", "../src/components/portfolio/ProjectInfo/messages.de.ts", "../src/components/portfolio/SmallCheckout/messages.de.ts", "../src/slices/ShopCheckout/messages.de.ts", "../src/slices/TextCarousel/messages.de.ts", "../src/slices/Timeline/messages.de.ts", "../src/unit.messages.de.ts", "../src/rootMessages.de.ts", "../src/slices/Comparison/messages.en.ts", "../src/components/CreditsAvailableBadge/messages.en.ts", "../src/slices/Cta/messages.en.ts", "../src/components/CustomerCard/messages.en.ts", "../src/components/CustomerQuoteCard/messages.en.ts", "../src/components/EventCard/messages.en.ts", "../src/slices/Events/messages.en.ts", "../src/slices/Glossary/messages.en.ts", "../src/components/portfolio/DocumentsDownloadList/messages.en.ts", "../src/slices/ProjectFacts/messages.en.ts", "../src/components/ProjectGridCard/messages.en.ts", "../src/slices/ProjectsMap/messages.en.ts", "../src/components/portfolio/ProjectInfo/messages.en.ts", "../src/components/portfolio/SmallCheckout/messages.en.ts", "../src/slices/ShopCheckout/messages.en.ts", "../src/slices/TextCarousel/messages.en.ts", "../src/slices/Timeline/messages.en.ts", "../src/unit.messages.en.ts", "../src/rootMessages.en.ts", "../src/utils/getMessages.ts", "../src/components/StrapiLinkButton/index.ts", "../src/slices/Hero/index.ts", "../src/slices/IconGrid/IconGrid.tsx", "../src/slices/IconGrid/index.ts", "../src/slices/ImageGrid/ImageGrid.tsx", "../src/components/StrapiLinkButtonWithIcon/StrapiLinkButtonWithIcon.tsx", "../src/icons/LinkedInIcon.tsx", "../src/components/StrapiLinkButtonWithIcon/index.ts", "../src/slices/ImageGrid/index.ts", "../src/slices/ImageTextSequence/ImageTextSequence.tsx", "../src/slices/ImageTextSequence/index.ts", "../src/slices/LeftTextRightCard/LeftTextRightCard.tsx", "../src/slices/LeftTextRightCard/index.ts", "../src/slices/LogoGridWithText/LogoGridWithText.tsx", "../src/slices/LogoGridWithText/index.ts", "../src/slices/MapHero/MapHero.tsx", "../src/slices/MapHero/styles.ts", "../src/slices/MapHero/index.ts", "../src/slices/QAndA/QAndA.tsx", "../src/utils/convertToKebabCase.ts", "../src/slices/QAndA/index.ts", "../src/slices/QuoteCards/QuoteCards.tsx", "../src/slices/QuoteCards/index.ts", "../src/slices/RichTextSection/RichTextSection.tsx", "../src/slices/RichTextSection/index.ts", "../src/slices/Steps/Steps.tsx", "../src/slices/Steps/index.ts", "../src/slices/TextCardGrid/TextCardGrid.tsx", "../src/slices/TextCardGrid/index.ts", "../src/slices/TextCarousel/TextCarousel.tsx", "../src/slices/TextCarousel/styles.ts", "../src/utils/shuffleElements.ts", "../src/slices/TextCarousel/index.ts", "../src/slices/TextWithTextCards/TextWithTextCards.tsx", "../src/slices/TextWithTextCards/index.ts", "../src/slices/TextWithCard/TextWithCard.tsx", "../src/components/ProjectGridCard/ProjectGridCard.tsx", "../src/constants/formatter.ts", "../src/components/CreditsAvailableBadge/CreditsAvailableBadge.tsx", "../src/components/CreditsAvailableBadge/index.ts", "../src/components/ProjectGridCard/index.ts", "../src/slices/TextWithCard/index.ts", "../src/slices/LinkCardsGrid/LinkCardsGrid.tsx", "../src/constants/animations.ts", "../src/slices/LinkCardsGrid/index.ts", "../src/slices/SmallHero/SmallHero.tsx", "../src/slices/SmallHero/index.ts", "../src/slices/Blog/Blog.tsx", "../src/slices/Blog/styles.ts", "../src/slices/Blog/index.ts", "../src/slices/ProjectsGrid/ProjectsGrid.tsx", "../src/slices/ProjectsGrid/index.ts", "../src/slices/ProjectsMap/ProjectsMap.tsx", "../src/constants/mapbox.ts", "../src/slices/ProjectsMap/mapboxStyle.ts", "../src/integrations/strapi/getFpmProjectsByBbox.ts", "../src/utils/mergeProjectData.ts", "../src/slices/ProjectsMap/index.ts", "../src/slices/Video/Video.tsx", "../src/slices/Video/index.ts", "../src/slices/FullWidthHighlightQuote/FullWidthHighlightQuote.tsx", "../src/slices/FullWidthHighlightQuote/index.ts", "../src/slices/FullWidthImageSlider/FullWidthImageSlider.tsx", "../src/slices/FullWidthImageSlider/styles.ts", "../src/utils/getClosestRatio.ts", "../src/slices/FullWidthImageSlider/index.ts", "../src/slices/SideBySideImages/SideBySideImages.tsx", "../src/slices/SideBySideImages/index.ts", "../src/slices/Cta/Cta.tsx", "../src/slices/Cta/index.ts", "../src/slices/CtaOnly/CtaOnly.tsx", "../src/slices/CtaOnly/index.ts", "../src/slices/Glossary/Glossary.tsx", "../src/slices/Glossary/index.ts", "../src/slices/ShopCheckout/ShopCheckout.tsx", "../src/constants/domain.ts", "../src/slices/ShopCheckout/index.ts", "../src/slices/Facts/Facts.tsx", "../src/slices/Facts/index.ts", "../src/slices/BlogCards/BlogCards.tsx", "../src/slices/BlogCards/index.ts", "../src/slices/ProjectFacts/ProjectFacts.tsx", "../src/components/portfolio/SmallCheckout/SmallCheckout.tsx", "../src/components/portfolio/SmallCheckout/index.ts", "../src/components/portfolio/ProjectInfo/ProjectInfo.tsx", "../src/utils/convertAreaM2ToHa.ts", "../src/utils/convertCo2AmountKgToTons.ts", "../src/utils/getTimeSpanInYears.ts", "../src/components/portfolio/ProjectInfo/index.ts", "../src/components/portfolio/DocumentsDownloadList/DocumentsDownloadList.tsx", "../src/components/portfolio/DocumentsDownloadList/index.ts", "../src/components/portfolio/Contact/Contact.tsx", "../src/components/portfolio/Contact/index.ts", "../src/integrations/strapi/getFpmProjectById.ts", "../src/slices/ProjectFacts/index.ts", "../src/slices/CustomerStories/CustomerStories.tsx", "../src/components/CustomerCard/CustomerCard.tsx", "../src/components/CustomerCard/index.ts", "../src/components/CustomerQuoteCard/CustomerQuoteCard.tsx", "../src/components/CustomerQuoteCard/index.ts", "../src/components/LogoCard/LogoCard.tsx", "../src/components/LogoCard/index.ts", "../src/slices/CustomerStories/index.ts", "../src/slices/Comparison/Comparison.tsx", "../src/slices/Comparison/Icon.tsx", "../src/slices/Comparison/index.ts", "../src/slices/CarouselMarqueeBanner/CarouselMarqueeBanner.tsx", "../src/slices/CarouselMarqueeBanner/styles.ts", "../src/slices/CarouselMarqueeBanner/index.ts", "../src/slices/Timeline/Timeline.tsx", "../src/slices/Timeline/index.ts", "../src/slices/Events/Events.tsx", "../src/components/EventCard/EventCard.tsx", "../src/utils/getCountryFlag.ts", "../src/utils/isSameDate.ts", "../src/components/EventCard/index.ts", "../src/models/hooks/useEvents.ts", "../src/slices/Events/index.ts", "../src/slices/Redirect/Redirect.tsx", "../src/utils/buildRedirectUrl.ts", "../src/slices/Redirect/index.ts", "../src/components/SliceRenderer/SliceRenderer.tsx"],
4
- "sourcesContent": ["import IStrapi from './models/strapi/IStrapi';\nimport IStrapiData from './models/strapi/IStrapiData';\nimport IStrapiResponse from './models/strapi/IStrapiResponse';\nimport StrapiAuthor from './models/strapi/StrapiAuthor';\nimport StrapiAvatarWithName from './models/strapi/StrapiAvatarWithName';\nimport StrapiBanner from './models/strapi/StrapiBanner';\nimport StrapiBlogPost from './models/strapi/StrapiBlogPost';\nimport StrapiBlogPostProps from './models/strapi/StrapiBlogPostProps';\nimport StrapiButtonWithVariant from './models/strapi/StrapiButtonWithVariant';\nimport StrapiCategory from './models/strapi/StrapiCategory';\nimport StrapiContactArea from './models/strapi/StrapiContactArea';\nimport StrapiCustomerStory from './models/strapi/StrapiCustomerStory';\nimport StrapiCustomerStoryProps from './models/strapi/StrapiCustomerStoryProps';\nimport StrapiDefaultHeader from './models/strapi/StrapiDefaultHeader';\nimport StrapiEvent from './models/strapi/StrapiEvent';\nimport StrapiGlobal from './models/strapi/StrapiGlobal';\nimport StrapiGlossaryItem from './models/strapi/StrapiGlossaryItem';\nimport StrapiHeroCard from './models/strapi/StrapiHeroCard';\nimport StrapiImage from './models/strapi/StrapiImage';\nimport StrapiImageFormat from './models/strapi/StrapiImageFormat';\nimport StrapiImageWithLink from './models/strapi/StrapiImageWithLink';\nimport StrapiLink from './models/strapi/StrapiLink';\nimport StrapiLinkList from './models/strapi/StrapiLinkList';\nimport StrapiLinkPage from './models/strapi/StrapiLinkPage';\nimport StrapiLinkWithIcon from './models/strapi/StrapiLinkWithIcon';\nimport StrapiLocalization from './models/strapi/StrapiLocalization';\nimport StrapiMedia from './models/strapi/StrapiMedia';\nimport StrapiMetadata from './models/strapi/StrapiMetadata';\nimport StrapiNavMenu from './models/strapi/StrapiNavMenu';\nimport StrapiPage from './models/strapi/StrapiPage';\nimport StrapiPageProps from './models/strapi/StrapiPageProps';\nimport StrapiPortfolio from './models/strapi/StrapiPortfolio';\nimport StrapiPortfolioCard from './models/strapi/StrapiPortfolioCard';\nimport StrapiProject from './models/strapi/StrapiProject';\nimport StrapiProjectCard from './models/strapi/StrapiProjectCard';\nimport StrapiProjectProps from './models/strapi/StrapiProjectProps';\nimport StrapiQuoteCard from './models/strapi/StrapiQuoteCard';\nimport StrapiShapesCard from './models/strapi/StrapiShapesCard';\nimport StrapiTextCardWithIcons from './models/strapi/StrapiTextCardWithIcons';\nimport StrapiTopBanner from './models/strapi/StrapiTopBanner';\n\nimport HeaderType from './models/HeaderType';\nimport Image from './models/Image';\nimport Locale from './models/Locale';\nimport PageMetadata from './models/PageMetadata';\nimport PageProps from './models/PageProps';\nimport PortfolioProject from './models/PortfolioProject';\n\nimport getAllSlugsFromStrapi from './integrations/strapi/getAllSlugsFromStrapi';\nimport getPortfolioProjects from './integrations/strapi/getPortfolioProjects';\nimport getStrapiCollectionType from './integrations/strapi/getStrapiCollectionType';\nimport getStrapiSingleType from './integrations/strapi/getStrapiSingleType';\n\nimport mergeGlobalAndStrapiBlogPostData from './utils/mergeGlobalAndStrapiBlogPostData';\nimport mergeGlobalAndStrapiCustomerStoryData from './utils/mergeGlobalAndStrapiCustomerStoryData';\nimport mergeGlobalAndStrapiPageData from './utils/mergeGlobalAndStrapiPageData';\nimport mergeGlobalAndStrapiProjectData from './utils/mergeGlobalAndStrapiProjectData';\nimport strapiLinkUrl from './utils/strapiLinkUrl';\nimport strapiMediaUrl from './utils/strapiMediaUrl';\n\nexport { PreviewAlert } from './components/PreviewAlert';\nexport { SEOTags } from './components/SEOTags';\nexport { SliceRenderer } from './components/SliceRenderer';\n\nexport {\n // Utils\n mergeGlobalAndStrapiBlogPostData,\n mergeGlobalAndStrapiCustomerStoryData,\n mergeGlobalAndStrapiPageData,\n mergeGlobalAndStrapiProjectData,\n strapiLinkUrl,\n strapiMediaUrl,\n\n // Integrations\n getAllSlugsFromStrapi,\n getPortfolioProjects,\n getStrapiCollectionType,\n getStrapiSingleType,\n};\n\nexport type {\n // Strapi Models\n IStrapi,\n IStrapiData,\n IStrapiResponse,\n StrapiAuthor,\n StrapiAvatarWithName,\n StrapiBanner,\n StrapiBlogPost,\n StrapiBlogPostProps,\n StrapiButtonWithVariant,\n StrapiCategory,\n StrapiContactArea,\n StrapiCustomerStory,\n StrapiCustomerStoryProps,\n StrapiDefaultHeader,\n StrapiEvent,\n StrapiGlobal,\n StrapiGlossaryItem,\n StrapiHeroCard,\n StrapiImage,\n StrapiImageFormat,\n StrapiImageWithLink,\n StrapiLink,\n StrapiLinkList,\n StrapiLinkPage,\n StrapiLinkWithIcon,\n StrapiLocalization,\n StrapiMedia,\n StrapiMetadata,\n StrapiNavMenu,\n StrapiPage,\n StrapiPageProps,\n StrapiPortfolio,\n StrapiPortfolioCard,\n StrapiProject,\n StrapiProjectCard,\n StrapiProjectProps,\n StrapiQuoteCard,\n StrapiShapesCard,\n StrapiTextCardWithIcons,\n StrapiTopBanner,\n\n // Models\n HeaderType,\n Image,\n Locale,\n PageMetadata,\n PageProps,\n PortfolioProject,\n};\n", "import axios from 'axios';\nimport qs from 'qs';\nimport { setupCache } from 'axios-cache-interceptor';\nimport { STRAPI_URI } from '../../constants/strapi';\n\nconst strapiClient = setupCache(\n axios.create({\n baseURL: `${STRAPI_URI}/api`,\n headers: { 'Strapi-Response-Format': 'v4' },\n paramsSerializer: (p) => qs.stringify(p, { encodeValuesOnly: true }),\n timeout: 60_000,\n }),\n {\n ttl:\n STRAPI_URI.includes('127.0.0.1') || STRAPI_URI.includes('localhost')\n ? 0\n : 10 * 60 * 1000, // 10 minutes\n }\n);\n\nexport default strapiClient;\n", "export const STRAPI_URI =\n process.env.NEXT_PUBLIC_STRAPI_URI || 'http://127.0.0.1:1337';\n\nexport const STRAPI_DEFAULT_PAGE_SIZE = '100';\nexport const STRAPI_DEFAULT_POPULATE_DEPTH = '6';\n\nexport const STRAPI_FALLBACK_LOCALE = 'en';\n", "import strapiClient from './strapiClient';\nimport {\n STRAPI_DEFAULT_PAGE_SIZE,\n STRAPI_FALLBACK_LOCALE,\n} from '../../constants/strapi';\nimport IStrapiResponse from '../../models/strapi/IStrapiResponse';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport LocalizedEntity from '../../models/LocalizedEntity';\n\ninterface Options {\n filters?: Record<string, any>;\n}\n\ntype Slug = { slug: string; locale: string };\n\nconst getAllSlugsFromStrapi = async <T extends LocalizedEntity<'slug'>>(\n path: string,\n locales: string[],\n { filters = {} }: Options = { filters: {} }\n): Promise<Slug[]> => {\n const slugPromises = locales.map((locale) =>\n strapiClient\n .get<IStrapiResponse<IStrapiData<T>[]>>(path, {\n params: {\n locale: locale,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters,\n },\n })\n .then((response) =>\n response.data.data.map((page) => ({\n slug: page.attributes.slug,\n locale: page.attributes.locale,\n }))\n )\n // when a collection type for a requested locale does not exist, Strapi returns a 404. In this case, we return an empty array instead of throwing an error\n .catch((error) => {\n if (error.response?.status === 404) {\n return [];\n }\n throw error;\n })\n );\n\n const slugResults = await Promise.all(slugPromises);\n\n let allSlugs = slugResults.flat();\n\n // Identify missing locales for each slug\n const missingLocales = locales.flatMap((locale) => {\n return allSlugs\n .filter((slug) => slug.locale === STRAPI_FALLBACK_LOCALE)\n .filter(\n (fallbackSlug) =>\n !allSlugs.some(\n (slug) => slug.slug === fallbackSlug.slug && slug.locale === locale\n )\n )\n .map((fallbackSlug) => ({ ...fallbackSlug, locale })); // Clone only for missing locales\n });\n\n return [...allSlugs, ...missingLocales]; // Merge original and missing slugs\n};\n\nexport default getAllSlugsFromStrapi;\n", "import axios from 'axios';\nimport qs from 'qs';\nimport { setupCache } from 'axios-cache-interceptor';\nimport { FPM_API_URI } from '../constants/api';\n\nconst fpmClient = setupCache(\n axios.create({\n baseURL: `${FPM_API_URI}/v1`,\n paramsSerializer: (p) => qs.stringify(p, { encodeValuesOnly: true }),\n timeout: 5000,\n }),\n {\n ttl:\n FPM_API_URI.includes('127.0.0.1') || FPM_API_URI.includes('localhost')\n ? 0\n : 10 * 60 * 1000, // 10 minutes\n }\n);\n\nexport default fpmClient;\n", "export const API_URI =\n process.env.NEXT_PUBLIC_API_URI || 'http://localhost:4001';\nexport const FPM_API_URI =\n process.env.NEXT_PUBLIC_FPM_API_URI || 'https://api.fpm.t-staging.com';\nexport const CDN_URI = 'https://cdn.tree.ly';\n", "import { IStrapiData, IStrapiResponse, StrapiProject } from '../..';\nimport {\n STRAPI_DEFAULT_PAGE_SIZE,\n STRAPI_DEFAULT_POPULATE_DEPTH,\n} from '../../constants/strapi';\nimport strapiClient from './strapiClient';\n\nconst FALLBACK_LOCALE = 'en';\n\nconst getStrapiProjects = async (\n locale: string = 'en',\n pLevel: string = STRAPI_DEFAULT_POPULATE_DEPTH,\n preview: boolean = false\n): Promise<Map<string, IStrapiData<StrapiProject>>> => {\n const cache = preview ? false : undefined;\n const strapiParams: Record<string, any> = {\n pLevel,\n locale,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n status: preview ? 'draft' : 'published',\n };\n\n const strapiProjects = new Map<string, IStrapiData<StrapiProject>>();\n\n try {\n const [strapiProjectsLocalized, strapiProjectsEnglish] = await Promise.all([\n strapiClient.get<IStrapiResponse<IStrapiData<StrapiProject>[]>>(\n '/projects',\n { params: strapiParams, cache }\n ),\n strapiClient.get<IStrapiResponse<IStrapiData<StrapiProject>[]>>(\n '/projects',\n {\n params: { ...strapiParams, locale: FALLBACK_LOCALE },\n cache,\n }\n ),\n ]);\n\n // Process Strapi data if we got it\n for (const project of [\n ...strapiProjectsEnglish.data.data,\n ...strapiProjectsLocalized.data.data,\n ]) {\n if (project.attributes.fpmProjectId) {\n strapiProjects.set(project.attributes.fpmProjectId, project);\n }\n }\n } catch (error) {\n console.warn('Failed to fetch Strapi data:', error);\n // Return empty map on failure\n }\n\n return strapiProjects;\n};\n\nexport default getStrapiProjects;\n", "import { PortfolioProject } from '../..';\nimport { STRAPI_DEFAULT_POPULATE_DEPTH } from '../../constants/strapi';\nimport FPMProject from '../../models/fpm/FPMProject';\nimport fpmClient from '../fpmClient';\nimport getStrapiProjects from './getStrapiProjects';\n\nconst getPortfolioProjects = async (\n locale: string = 'en',\n preview: boolean = false\n): Promise<PortfolioProject[]> => {\n const cache = preview ? false : undefined;\n\n const [{ data: fpmProjects }, strapiProjects] = await Promise.all([\n fpmClient.get<FPMProject[]>('/public/projects', { cache }),\n getStrapiProjects(locale, STRAPI_DEFAULT_POPULATE_DEPTH, preview),\n ]);\n\n return fpmProjects.map((fpmProject: FPMProject) => {\n const strapiProject = strapiProjects.get(fpmProject.id);\n\n const toReturn: PortfolioProject = fpmProject;\n\n if (strapiProject?.attributes.slug) {\n toReturn.slug = strapiProject.attributes.slug;\n }\n if (strapiProject?.attributes.thumbnail) {\n toReturn.thumbnail = strapiProject?.attributes.thumbnail;\n }\n if (strapiProject?.attributes.portfolio.data?.attributes.host) {\n toReturn.portfolioHost =\n strapiProject.attributes.portfolio.data.attributes.host;\n }\n\n return toReturn;\n });\n};\n\nexport default getPortfolioProjects;\n", "import strapiClient from './strapiClient';\nimport {\n STRAPI_DEFAULT_PAGE_SIZE,\n STRAPI_DEFAULT_POPULATE_DEPTH,\n STRAPI_FALLBACK_LOCALE,\n} from '../../constants/strapi';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport IStrapiResponse from '../../models/strapi/IStrapiResponse';\nimport LocalizedEntity from '../../models/LocalizedEntity';\n\ninterface Options {\n locale?: string;\n slug?: string;\n preview?: boolean;\n filters?: Record<string, any>;\n}\n\nconst getStrapiCollectionType = async <\n T extends LocalizedEntity<K>,\n K extends string,\n>(\n path: string,\n key: K,\n { locale = 'en', preview = false, filters = {} }: Options\n): Promise<IStrapiData<T>[]> => {\n const cache = preview ? false : undefined;\n\n const sharedParams = {\n pLevel: STRAPI_DEFAULT_POPULATE_DEPTH,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters,\n status: preview ? 'draft' : 'published',\n };\n\n const requestedLocaleData = await strapiClient\n .get<IStrapiResponse<IStrapiData<T>[]>>(path, {\n params: {\n ...sharedParams,\n locale,\n },\n cache,\n })\n .then((response) => response.data.data)\n // when a collection type for a requested locale does not exist, Strapi returns a 404. In this case, we return an empty array instead of throwing an error\n .catch((error) => {\n if (error.response?.status === 404) {\n return [];\n }\n throw error;\n });\n\n const fallbackLocaleData = await strapiClient\n .get<IStrapiResponse<IStrapiData<T>[]>>(path, {\n params: {\n ...sharedParams,\n locale: STRAPI_FALLBACK_LOCALE,\n },\n cache,\n })\n .then((response) => response.data.data)\n // when a collection type for a requested locale does not exist, Strapi returns a 404. In this case, we return an empty array instead of throwing an error\n .catch((error) => {\n if (error.response?.status === 404) {\n return [];\n }\n throw error;\n });\n\n const results = fallbackLocaleData.map((fallbackLocaleDataEntry) => {\n const requestedLocale = requestedLocaleData.find(\n (localized) =>\n localized.attributes[key] === fallbackLocaleDataEntry.attributes[key]\n );\n\n return requestedLocale || fallbackLocaleDataEntry;\n });\n\n return results;\n};\n\nexport default getStrapiCollectionType;\n", "import { AxiosResponse } from 'axios';\nimport strapiClient from './strapiClient';\nimport {\n STRAPI_DEFAULT_PAGE_SIZE,\n STRAPI_DEFAULT_POPULATE_DEPTH,\n STRAPI_FALLBACK_LOCALE,\n} from '../../constants/strapi';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport IStrapiResponse from '../../models/strapi/IStrapiResponse';\n\ninterface Options {\n locale?: string;\n preview?: boolean;\n filters?: Record<string, any>;\n}\n\nconst getStrapiSingleType = async <T>(\n path: string,\n { locale = 'en', preview = false, filters = {} }: Options\n): Promise<IStrapiData<T>> => {\n const cache = preview ? false : undefined;\n const params: Record<string, any> = {\n pLevel: STRAPI_DEFAULT_POPULATE_DEPTH,\n locale,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters,\n status: preview ? 'draft' : 'published',\n };\n\n let response: AxiosResponse<IStrapiResponse<IStrapiData<T>>>;\n\n try {\n response = await strapiClient.get(path, { params, cache });\n return response.data.data;\n } catch (error: any) {\n if (error.isAxiosError && error.response?.status === 404) {\n // Retry request with fallback locale\n response = await strapiClient.get(path, {\n params: { ...params, locale: STRAPI_FALLBACK_LOCALE },\n cache,\n });\n\n return response.data.data;\n }\n\n throw error;\n }\n};\n\nexport default getStrapiSingleType;\n", "import { STRAPI_URI } from '../constants/strapi';\nimport IStrapi from '../models/strapi/IStrapi';\nimport IStrapiData from '../models/strapi/IStrapiData';\nimport StrapiMedia from '../models/strapi/StrapiMedia';\n\nconst strapiMediaUrl = (\n media: IStrapi<IStrapiData<StrapiMedia>>,\n preferredSize:\n | 'native'\n | 'thumbnail'\n | 'xSmall'\n | 'small'\n | 'medium'\n | 'large'\n | 'xLarge' = 'native'\n): string => {\n let { url } = media.data.attributes || {};\n if (preferredSize !== 'native' && media.data.attributes.ext !== '.svg') {\n url = media.data.attributes.formats[preferredSize]?.url || url;\n }\n if (url && (url.indexOf('http://') === 0 || url.indexOf('https://') === 0)) {\n return url;\n }\n return `${\n STRAPI_URI.includes('127.0.0.1') || STRAPI_URI.includes('localhost')\n ? STRAPI_URI\n : ''\n }${url}`;\n};\n\nexport default strapiMediaUrl;\n", "export const DEFAULT_SHARE_IMAGE =\n 'https://cdn.tree.ly/assets/v3/app/share-image-generic.webp';\nexport const DEFAULT_SHARE_ALT = 'Share Image';\n", "export const EXTENDABLE_HEADER_SECTIONS = [\n 'sections.hero',\n 'sections.map-hero',\n 'sections.full-width-image',\n 'sections.small-hero',\n 'sections.small-hero-light',\n];\nexport const DARK_THEME_HEADER_SECTIONS = [\n 'sections.hero',\n 'sections.small-hero',\n];\nexport const SLICES_WITH_BLOG_POSTS = ['sections.blog', 'sections.blog-cards'];\nexport const SLICES_WITH_CUSTOMER_STORIES = ['sections.customer-stories'];\nexport const SLICES_WITH_PROJECTS = [\n 'sections.projects-grid',\n 'sections.projects-map',\n 'sections.project-facts',\n 'sections.text-with-card',\n];\n", "import { GetStaticPropsContext } from 'next';\nimport strapiMediaUrl from './strapiMediaUrl';\nimport {\n IStrapiData,\n StrapiBlogPost,\n StrapiBlogPostProps,\n StrapiGlobal,\n} from '..';\nimport PortfolioProject from '../models/PortfolioProject';\nimport { DEFAULT_SHARE_ALT, DEFAULT_SHARE_IMAGE } from '../constants/metadata';\nimport {\n SLICES_WITH_BLOG_POSTS,\n SLICES_WITH_PROJECTS,\n} from '../constants/slicesConfig';\n\nconst mergeGlobalAndStrapiBlogPostData = (\n context: GetStaticPropsContext,\n global: IStrapiData<StrapiGlobal>,\n post: IStrapiData<StrapiBlogPost>,\n blog: IStrapiData<StrapiBlogPost>[],\n projects: PortfolioProject[]\n): StrapiBlogPostProps => {\n const metaShareImageUrl = post.attributes.metadata?.shareImage\n ? strapiMediaUrl(\n post.attributes.metadata?.shareImage.media ??\n global.attributes.metadata.shareImage?.media,\n 'large'\n )\n : DEFAULT_SHARE_IMAGE;\n\n const schemaMarkupTypes =\n post.attributes.metadata?.schemaMarkupTypes ??\n global.attributes.metadata?.schemaMarkupTypes ??\n [];\n\n const returnBlog = post.attributes.slices.some((slice) =>\n SLICES_WITH_BLOG_POSTS.includes(slice.__component)\n );\n const returnProjects = post.attributes.slices.some((slice) =>\n SLICES_WITH_PROJECTS.includes(slice.__component)\n );\n\n return {\n ...post,\n // Portfolio Projects\n projects: returnProjects ? projects : [],\n // StrapiBlogPost\n attributes: {\n ...post?.attributes,\n metadata: post?.attributes?.metadata || global.attributes.metadata,\n },\n // PageProps\n headerType: {\n extendable: true,\n theme: 'light',\n },\n headerNavMenus: global.attributes.navbar.navMenus || [],\n headerButtons: global.attributes.navbar.buttons || [],\n footerLinks: global.attributes.footer.links || [],\n metadata: {\n title:\n post.attributes.metadata?.title ?? global.attributes.metadata.title,\n description:\n post.attributes.metadata?.description ??\n global.attributes.metadata.description,\n shareImage: {\n url: metaShareImageUrl,\n alt:\n post.attributes.metadata?.shareImage?.alt ??\n global.attributes.metadata.shareImage?.alt ??\n DEFAULT_SHARE_ALT,\n },\n metaTitleSuffix: global.attributes.metaTitleSuffix,\n favicon: strapiMediaUrl(global.attributes.favicon, 'thumbnail'),\n schemaMarkupTypes,\n },\n slices: post?.attributes.slices,\n blogPosts: returnBlog ? blog : [],\n banner: global.attributes.banner,\n topBanner: post?.attributes.topBanner || global.attributes.topBanner,\n customerStories: [],\n preview: !!context.preview,\n isFallbackLocale: context.locale !== post.attributes.locale,\n };\n};\n\nexport default mergeGlobalAndStrapiBlogPostData;\n", "import { GetStaticPropsContext } from 'next';\nimport strapiMediaUrl from './strapiMediaUrl';\nimport {\n IStrapiData,\n StrapiCustomerStory,\n StrapiCustomerStoryProps,\n StrapiGlobal,\n} from '..';\nimport { DEFAULT_SHARE_ALT, DEFAULT_SHARE_IMAGE } from '../constants/metadata';\nimport { SLICES_WITH_CUSTOMER_STORIES } from '../constants/slicesConfig';\n\nconst mergeGlobalAndStrapiCustomerStoryData = (\n context: GetStaticPropsContext,\n global: IStrapiData<StrapiGlobal>,\n customerStory: IStrapiData<StrapiCustomerStory>,\n customerStories: IStrapiData<StrapiCustomerStory>[]\n): StrapiCustomerStoryProps => {\n const metaShareImageUrl = customerStory.attributes.metadata?.shareImage\n ? strapiMediaUrl(\n customerStory.attributes.metadata?.shareImage.media ??\n global.attributes.metadata.shareImage?.media,\n 'large'\n )\n : DEFAULT_SHARE_IMAGE;\n\n const schemaMarkupTypes =\n customerStory.attributes.metadata?.schemaMarkupTypes ??\n global.attributes.metadata?.schemaMarkupTypes ??\n [];\n\n const returnCustomerStories = customerStory.attributes.slices.some((slice) =>\n SLICES_WITH_CUSTOMER_STORIES.includes(slice.__component)\n );\n\n return {\n ...customerStory,\n // Portfolio Projects\n projects: [],\n attributes: {\n ...customerStory?.attributes,\n metadata:\n customerStory?.attributes?.metadata || global.attributes.metadata,\n },\n // PageProps\n headerType: {\n extendable: true,\n theme: 'light',\n },\n headerNavMenus: global.attributes.navbar.navMenus || [],\n headerButtons: global.attributes.navbar.buttons || [],\n footerLinks: global.attributes.footer.links || [],\n metadata: {\n title:\n customerStory.attributes.metadata?.title ??\n global.attributes.metadata.title,\n description:\n customerStory.attributes.metadata?.description ??\n global.attributes.metadata.description,\n shareImage: {\n url: metaShareImageUrl,\n alt:\n customerStory.attributes.metadata?.shareImage?.alt ??\n global.attributes.metadata.shareImage?.alt ??\n DEFAULT_SHARE_ALT,\n },\n metaTitleSuffix: global.attributes.metaTitleSuffix,\n favicon: strapiMediaUrl(global.attributes.favicon, 'thumbnail'),\n schemaMarkupTypes,\n },\n slices: customerStory?.attributes.slices,\n customerStories: returnCustomerStories ? customerStories : [],\n banner: global.attributes.banner,\n topBanner:\n customerStory?.attributes.topBanner || global.attributes.topBanner,\n blogPosts: [],\n preview: !!context.preview,\n isFallbackLocale: context.locale !== customerStory.attributes.locale,\n };\n};\n\nexport default mergeGlobalAndStrapiCustomerStoryData;\n", "import { GetStaticPropsContext } from 'next';\nimport strapiMediaUrl from './strapiMediaUrl';\nimport {\n IStrapiData,\n StrapiBlogPost,\n StrapiCustomerStory,\n StrapiGlobal,\n StrapiPage,\n StrapiPageProps,\n} from '..';\nimport PortfolioProject from '../models/PortfolioProject';\nimport {\n DARK_THEME_HEADER_SECTIONS,\n EXTENDABLE_HEADER_SECTIONS,\n SLICES_WITH_BLOG_POSTS,\n SLICES_WITH_CUSTOMER_STORIES,\n SLICES_WITH_PROJECTS,\n} from '../constants/slicesConfig';\nimport { DEFAULT_SHARE_ALT, DEFAULT_SHARE_IMAGE } from '../constants/metadata';\n\nconst mergeGlobalAndStrapiPageData = (\n context: GetStaticPropsContext,\n global: IStrapiData<StrapiGlobal>,\n page: IStrapiData<StrapiPage>,\n blogPosts: IStrapiData<StrapiBlogPost>[],\n customerStories: IStrapiData<StrapiCustomerStory>[],\n projects: PortfolioProject[]\n): StrapiPageProps => {\n const metaShareImageUrl = page.attributes.metadata?.shareImage\n ? strapiMediaUrl(\n page.attributes.metadata?.shareImage.media ??\n global.attributes.metadata.shareImage?.media,\n 'large'\n )\n : DEFAULT_SHARE_IMAGE;\n\n const schemaMarkupTypes =\n page.attributes.metadata?.schemaMarkupTypes ??\n global.attributes.metadata?.schemaMarkupTypes ??\n [];\n\n const returnBlogPosts = page.attributes.slices.some((slice) =>\n SLICES_WITH_BLOG_POSTS.includes(slice.__component)\n );\n const returnCustomerStories = page.attributes.slices.some((slice) =>\n SLICES_WITH_CUSTOMER_STORIES.includes(slice.__component)\n );\n const returnProjects = page.attributes.slices.some((slice) =>\n SLICES_WITH_PROJECTS.includes(slice.__component)\n );\n\n return {\n ...page,\n // Portfolio Projects\n projects: returnProjects ? projects : [],\n // StrapiPage\n attributes: {\n ...page?.attributes,\n metadata: page?.attributes?.metadata ?? global.attributes.metadata,\n },\n // PageProps\n headerType: {\n extendable: EXTENDABLE_HEADER_SECTIONS.includes(\n page.attributes.slices[0]?.__component\n ),\n theme: DARK_THEME_HEADER_SECTIONS.includes(\n page.attributes.slices[0]?.__component\n )\n ? 'dark'\n : 'light',\n },\n headerNavMenus: global.attributes.navbar.navMenus || [],\n headerButtons: global.attributes.navbar.buttons || [],\n footerLinks: global.attributes.footer.links || [],\n metadata: {\n title:\n page.attributes.metadata?.title ?? global.attributes.metadata.title,\n description:\n page.attributes.metadata?.description ??\n global.attributes.metadata.description,\n shareImage: {\n url: metaShareImageUrl,\n alt:\n page.attributes.metadata?.shareImage?.alt ??\n global.attributes.metadata.shareImage?.alt ??\n DEFAULT_SHARE_ALT,\n },\n metaTitleSuffix: global.attributes.metaTitleSuffix,\n favicon: strapiMediaUrl(global.attributes.favicon, 'thumbnail'),\n schemaMarkupTypes,\n },\n slices: page?.attributes.slices,\n blogPosts: returnBlogPosts ? blogPosts : [],\n banner: global.attributes.banner,\n topBanner: page?.attributes.topBanner || global.attributes.topBanner,\n customerStories: returnCustomerStories ? customerStories : [],\n preview: !!context.preview,\n isFallbackLocale: context.locale !== page.attributes.locale,\n };\n};\n\nexport default mergeGlobalAndStrapiPageData;\n", "import { GetStaticPropsContext } from 'next';\nimport strapiMediaUrl from './strapiMediaUrl';\nimport {\n IStrapiData,\n StrapiBlogPost,\n StrapiGlobal,\n StrapiProject,\n StrapiProjectProps,\n} from '..';\nimport PortfolioProject from '../models/PortfolioProject';\nimport {\n DARK_THEME_HEADER_SECTIONS,\n EXTENDABLE_HEADER_SECTIONS,\n SLICES_WITH_BLOG_POSTS,\n SLICES_WITH_PROJECTS,\n} from '../constants/slicesConfig';\nimport { DEFAULT_SHARE_ALT, DEFAULT_SHARE_IMAGE } from '../constants/metadata';\n\nconst mergeGlobalAndStrapiProject = (\n context: GetStaticPropsContext,\n global: IStrapiData<StrapiGlobal>,\n project: IStrapiData<StrapiProject>,\n blogPosts: IStrapiData<StrapiBlogPost>[],\n projects: PortfolioProject[]\n): StrapiProjectProps => {\n const metaShareImageUrl = project.attributes.metadata?.shareImage\n ? strapiMediaUrl(\n project.attributes.metadata?.shareImage.media ??\n global.attributes.metadata.shareImage?.media,\n 'large'\n )\n : DEFAULT_SHARE_IMAGE;\n\n const schemaMarkupTypes =\n project.attributes.metadata?.schemaMarkupTypes ??\n global.attributes.metadata?.schemaMarkupTypes ??\n [];\n\n const returnBlogPosts = project.attributes.slices.some((slice) =>\n SLICES_WITH_BLOG_POSTS.includes(slice.__component)\n );\n const returnProjects = project.attributes.slices.some((slice) =>\n SLICES_WITH_PROJECTS.includes(slice.__component)\n );\n\n return {\n ...project,\n // Portfolio Projects\n projects: returnProjects ? projects : [],\n // StrapiProject\n attributes: {\n ...project.attributes,\n metadata: project?.attributes?.metadata || global.attributes.metadata,\n },\n headerType: {\n extendable: EXTENDABLE_HEADER_SECTIONS.includes(\n project.attributes.slices[0]?.__component\n ),\n theme: DARK_THEME_HEADER_SECTIONS.includes(\n project.attributes.slices[0]?.__component\n )\n ? 'dark'\n : 'light',\n },\n // PageProps\n headerNavMenus: global.attributes.navbar.navMenus || [],\n headerButtons: global.attributes.navbar.buttons || [],\n footerLinks: global.attributes.footer.links || [],\n metadata: {\n title:\n project.attributes.metadata?.title ?? global.attributes.metadata.title,\n description:\n project.attributes.metadata?.description ??\n global.attributes.metadata.description,\n shareImage: {\n url: metaShareImageUrl,\n alt:\n project.attributes.metadata?.shareImage?.alt ??\n global.attributes.metadata.shareImage?.alt ??\n DEFAULT_SHARE_ALT,\n },\n metaTitleSuffix: global.attributes.metaTitleSuffix,\n favicon: strapiMediaUrl(global.attributes.favicon, 'thumbnail'),\n schemaMarkupTypes,\n },\n slices: project.attributes.slices,\n blogPosts: returnBlogPosts ? blogPosts : [],\n banner: global.attributes.banner,\n topBanner: project?.attributes.topBanner || global.attributes.topBanner,\n customerStories: [],\n preview: !!context.preview,\n isFallbackLocale: context.locale !== project.attributes.locale,\n };\n};\n\nexport default mergeGlobalAndStrapiProject;\n", "import StrapiLink from '../models/strapi/StrapiLink';\n\nconst strapiLinkUrl = (\n strapiLink: StrapiLink | undefined = undefined\n): string => {\n if (strapiLink?.page?.data) {\n return `/${strapiLink.page.data.attributes.slug}`;\n }\n\n return strapiLink?.url || '/';\n};\n\nexport default strapiLinkUrl;\n", "import React from 'react';\nimport { BoemlyAlert, Box } from 'boemly';\n\nexport const PreviewAlert = (): React.JSX.Element => {\n return (\n <Box position=\"fixed\" top=\"4\" left=\"4\">\n <BoemlyAlert text=\"Preview\" status=\"error\" />\n </Box>\n );\n};\n", "import React from 'react';\nimport Head from 'next/head';\nimport {\n DEFAULT_SHARE_ALT,\n DEFAULT_SHARE_IMAGE,\n} from '../../constants/metadata';\nimport {\n Article,\n BlogPosting,\n Brand,\n BreadcrumbList,\n Event,\n FAQPage,\n HowTo,\n LocalBusiness,\n Offer,\n Organization,\n Person,\n Product,\n QAPage,\n Service,\n SoftwareApplication,\n WebPage,\n WithContext,\n} from 'schema-dts';\n\ntype SupportedSchemaType =\n | Article\n | BlogPosting\n | Brand\n | BreadcrumbList\n | Event\n | FAQPage\n | HowTo\n | LocalBusiness\n | Offer\n | Organization\n | Person\n | Product\n | QAPage\n | Product\n | Service\n | SoftwareApplication\n | WebPage;\n\n// Helper function to convert SchemaValue to string\nconst getTextValue = (value: unknown): string => {\n if (typeof value === 'string') return value;\n if (typeof value === 'object' && value !== null && 'text' in value) {\n return (value as { text: string }).text;\n }\n return '';\n};\n\n// Helper function to safely access properties from a schema\nconst getSchemaProperty = (\n schema: SupportedSchemaType,\n property: string\n): string => {\n return (\n getTextValue((schema as unknown as Record<string, unknown>)[property]) || ''\n );\n};\n\n// Helper function to get a unique identifier from a schema\nconst getSchemaIdentifier = (schema: SupportedSchemaType): string => {\n const type = (schema as { '@type': string })['@type'];\n\n switch (type) {\n case 'Organization':\n return getSchemaProperty(schema, 'name') || 'default';\n case 'Article':\n case 'BlogPosting':\n return getSchemaProperty(schema, 'headline') || 'untitled-article';\n case 'Product':\n return getSchemaProperty(schema, 'name') || 'untitled-product';\n case 'Person':\n return getSchemaProperty(schema, 'name') || 'unnamed-person';\n case 'Event':\n return getSchemaProperty(schema, 'name') || 'untitled-event';\n case 'LocalBusiness':\n return getSchemaProperty(schema, 'name') || 'unnamed-business';\n case 'Service':\n return getSchemaProperty(schema, 'name') || 'unnamed-service';\n case 'Brand':\n return getSchemaProperty(schema, 'name') || 'unnamed-brand';\n case 'FAQPage':\n return 'faq-page';\n case 'HowTo':\n return getSchemaProperty(schema, 'name') || 'untitled-howto';\n case 'BreadcrumbList':\n return 'breadcrumbs';\n case 'Offer':\n const offer = schema as Offer;\n return `offer-${offer.price ?? 'unknown-price'}`;\n case 'WebPage':\n return getSchemaProperty(schema, 'name') || 'untitled-page';\n case 'QAPage':\n return getSchemaProperty(schema, 'name') || 'untitled-qa';\n case 'SoftwareApplication':\n return getSchemaProperty(schema, 'name') || 'untitled-software';\n default:\n return 'unknown-schema';\n }\n};\n\ninterface SEOTagsProps {\n title: string;\n description: string;\n shareImage?: {\n url: string;\n alt: string;\n };\n metaTitleSuffix?: string;\n favicon?: string;\n domain?: string;\n /**\n * Structured data for SEO purposes, following the schema.org standard.\n * This can be a single schema object or an array of schema objects.\n * Each object must include an `@context` property set to \"https://schema.org\"\n * and an `@type` property indicating the type of schema (e.g., Article, Product).\n */\n schemaMarkup?:\n | WithContext<SupportedSchemaType>\n | WithContext<SupportedSchemaType>[];\n}\n\nconst validateSchema = (\n schema: WithContext<SupportedSchemaType> | WithContext<SupportedSchemaType>[]\n): boolean => {\n if (Array.isArray(schema)) {\n return schema.every(\n (item) => item['@context'] === 'https://schema.org' && '@type' in item\n );\n }\n return schema['@context'] === 'https://schema.org' && '@type' in schema;\n};\n\nexport const SEOTags: React.FC<SEOTagsProps> = ({\n title,\n description,\n shareImage,\n metaTitleSuffix = 'Tree.ly',\n favicon = 'https://cdn.tree.ly/favicon.ico',\n domain = 'tree.ly',\n schemaMarkup,\n}: SEOTagsProps) => {\n const shareImageUrl = shareImage?.url ?? DEFAULT_SHARE_IMAGE;\n const shareImageAlt = shareImage?.alt ?? DEFAULT_SHARE_ALT;\n\n let schemas = schemaMarkup;\n let isValidSchema = schemaMarkup ? validateSchema(schemaMarkup) : false;\n\n if (schemaMarkup && !isValidSchema) {\n console.warn(\n 'Invalid schema markup provided to SEOTags component. Schema markup will not be rendered.',\n schemaMarkup\n );\n schemas = undefined;\n isValidSchema = false;\n }\n\n const schemaArray = schemas\n ? Array.isArray(schemas)\n ? schemas\n : [schemas]\n : [];\n\n const getSchemaKey = (\n schema: WithContext<SupportedSchemaType>,\n index: number\n ): string => {\n const type = (schema as { '@type': string })['@type'];\n const identifier = getSchemaIdentifier(schema as SupportedSchemaType);\n return `${type}-${identifier}-${index}`;\n };\n\n return (\n <Head>\n <title>{`${title} - ${metaTitleSuffix}`}</title>\n <meta name=\"description\" content={description} />\n <link rel=\"icon\" href={favicon} />\n\n <meta property=\"og:url\" content={`https://${domain}`} />\n <meta property=\"og:type\" content=\"website\" />\n <meta property=\"og:title\" content={title} />\n <meta property=\"og:description\" content={description} />\n <meta property=\"og:image\" content={shareImageUrl} />\n <meta property=\"og:image:alt\" content={shareImageAlt} />\n\n <meta name=\"twitter:card\" content=\"summary_large_image\" />\n <meta property=\"twitter:domain\" content={domain} />\n <meta property=\"twitter:url\" content={`https://${domain}`} />\n <meta name=\"twitter:title\" content={title} />\n <meta name=\"twitter:description\" content={description} />\n <meta name=\"twitter:image\" content={shareImageUrl} />\n <meta name=\"twitter:image:alt\" content={shareImageAlt} />\n\n {isValidSchema &&\n schemaArray.map((schema, index) => (\n <script\n key={getSchemaKey(schema, index)}\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{\n __html: JSON.stringify(schema),\n }}\n />\n ))}\n </Head>\n );\n};\n", "import React, { useState } from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Wrapper,\n useMediaQuery,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport FullScreenImage from '../../components/FullScreenImage';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\n\ninterface FullWidthImageSlice extends StrapiDefaultHeader {\n image: StrapiImage;\n}\nexport interface FullWidthImageProps {\n slice: FullWidthImageSlice;\n}\n\nexport const FullWidthImage: React.FC<FullWidthImageProps> = ({\n slice,\n}: FullWidthImageProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const [isMobile] = useMediaQuery([BREAKPOINT_MD_QUERY]);\n\n return (\n <DefaultSectionContainer title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n isHero\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center', mt: ['32', null, null, '56'] }}\n titleProps={{ textAlign: 'center', maxW: '6xl', marginX: 'auto' }}\n textProps={{ textAlign: 'center', maxW: '3xl', marginX: 'auto' }}\n />\n\n <Box position=\"relative\" mt=\"20\" minHeight={['xl', null, '3xl']}>\n <Image\n src={strapiMediaUrl(slice.image.img, 'xLarge')}\n alt={slice.image.alt}\n fill\n style={{\n objectFit: slice.image.objectFit || 'cover',\n cursor: isMobile ? 'unset' : 'pointer',\n borderRadius: 'var(--boemly-radii-2xl)',\n }}\n onClick={() => !isMobile && setIsOpen(true)}\n />\n\n <FullScreenImage\n images={[slice.image]}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n />\n </Box>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { BoemlyModal, Flex, IconButton } from 'boemly';\nimport { useScrollLock } from '@reactuses/core';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport { CaretLeftIcon, CaretRightIcon } from '@phosphor-icons/react';\nimport ZoomableImage from './ZoomableImage';\n\nexport interface FullScreenImageProps {\n images: StrapiImage[];\n isOpen: boolean;\n onClose: () => void;\n currentIndex?: number;\n setCurrentIndex?: (callback: (c: number) => number) => void;\n}\n\nexport const FullScreenImage = ({\n images,\n isOpen,\n onClose,\n currentIndex = 0,\n setCurrentIndex,\n}: FullScreenImageProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [, setLocked] = useScrollLock(\n typeof document !== 'undefined' ? document.body : null\n );\n useEffect(() => {\n setLocked(isOpen);\n return () => {\n setLocked(false);\n };\n }, [isOpen, setLocked]);\n\n const canMoveRight = useMemo(\n () => currentIndex < images.length - 1,\n [currentIndex, images.length]\n );\n const canMoveLeft = useMemo(() => currentIndex !== 0, [currentIndex]);\n\n const onRight = useCallback(\n () => canMoveRight && setCurrentIndex && setCurrentIndex((c) => c + 1),\n [canMoveRight, setCurrentIndex]\n );\n const onLeft = useCallback(\n () => canMoveLeft && setCurrentIndex && setCurrentIndex((c) => c - 1),\n [canMoveLeft, setCurrentIndex]\n );\n\n useEffect(() => {\n if (!isOpen) return;\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n onRight();\n } else if (event.key === 'ArrowLeft') {\n event.preventDefault();\n onLeft();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [isOpen, onRight, onLeft]);\n\n useEffect(() => {\n if (!!isOpen) {\n setTimeout(() => {\n containerRef?.current?.scrollTo({\n left: currentIndex * containerRef.current.clientWidth,\n behavior: 'instant',\n });\n }, 10);\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (containerRef.current) {\n containerRef.current.scrollTo({\n left: currentIndex * containerRef.current.clientWidth,\n behavior: 'smooth',\n });\n }\n }, [currentIndex, containerRef]);\n\n return (\n <BoemlyModal\n onOpenChange={(isModalOpen) => {\n if (!isModalOpen) {\n onClose();\n }\n }}\n open={isOpen}\n title=\"\"\n trigger={<span style={{ display: 'none' }} />}\n size=\"full\"\n content={\n <Flex\n position=\"absolute\"\n insetY=\"16\"\n insetX=\"0\"\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <Flex\n ref={containerRef}\n flexGrow=\"1\"\n flexBasis=\"100%\"\n flexShrink=\"1\"\n gap=\"4\"\n marginX=\"24\"\n scrollSnapType=\"x mandatory\"\n overflow=\"hidden\"\n position=\"relative\"\n height=\"full\"\n width=\"full\"\n >\n {images.map((image) => (\n <ZoomableImage key={image.id} image={image} />\n ))}\n </Flex>\n\n <Flex\n position=\"absolute\"\n inset=\"6\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n pointerEvents=\"none\"\n >\n <IconButton\n visibility={canMoveLeft ? 'visible' : 'hidden'}\n onClick={onLeft}\n aria-label=\"Previous picture\"\n variant=\"outline\"\n pointerEvents=\"all\"\n mr=\"6\"\n >\n <CaretLeftIcon size={16} />\n </IconButton>\n <IconButton\n visibility={canMoveRight ? 'visible' : 'hidden'}\n onClick={onRight}\n aria-label=\"Next picture\"\n variant=\"outline\"\n pointerEvents=\"all\"\n ml=\"4\"\n >\n <CaretRightIcon size={16} />\n </IconButton>\n </Flex>\n </Flex>\n }\n />\n );\n};\n", "import StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport { Box } from 'boemly';\nimport Head from 'next/head';\nimport Image from 'next/image';\nimport React, { useState } from 'react';\n\ninterface ZoomableImageProps {\n image: StrapiImage;\n zoom?: number;\n}\n\nconst ZoomableImage = ({ image, zoom = 200 }: ZoomableImageProps) => {\n // define and set default values to the states of the component\n const [isZoomed, setIsZoomed] = useState(false);\n const [backgroundPos, setBackgroundPos] = useState('50% 50%');\n\n const imageSrc = strapiMediaUrl(image.img, 'xLarge');\n\n const zoomInPosition = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n // This will handle the calculations of the area where the image needs to zoom in depending on the user interaction\n const zoomer = e.currentTarget.getBoundingClientRect();\n const x = ((e.clientX - zoomer.x) / zoomer.width) * 100;\n const y = ((e.clientY - zoomer.y) / zoomer.height) * 100;\n setBackgroundPos(`${x}% ${y}%`);\n };\n\n const toggleZoomImage = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n if (isZoomed) {\n setIsZoomed(false);\n } else {\n // Zoom in and set the background position correctly\n setIsZoomed(true);\n zoomInPosition(e);\n }\n };\n\n const handleClick = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n toggleZoomImage(e);\n };\n\n const handleMove = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n if (isZoomed) {\n zoomInPosition(e);\n }\n };\n\n return (\n <>\n <Head>\n <link rel=\"prefetch\" as=\"image\" href={imageSrc} />\n </Head>\n <Box\n position=\"relative\"\n display=\"inline-block\"\n width=\"full\"\n height=\"full\"\n overflow=\"hidden\"\n flexShrink=\"0\"\n scrollSnapAlign=\"center\"\n scrollSnapStop=\"always\"\n draggable=\"false\"\n cursor={isZoomed ? 'zoom-out' : 'zoom-in'}\n backgroundImage={isZoomed ? `url( ${imageSrc} )` : 'none'}\n backgroundSize={`${zoom}%`}\n backgroundPosition={backgroundPos}\n onClick={(e) => handleClick(e)}\n onMouseMove={(e) => handleMove(e)}\n >\n <Image\n src={imageSrc}\n alt={image.alt}\n fill\n style={{\n visibility: isZoomed ? 'hidden' : 'visible',\n objectFit: 'contain',\n }}\n />\n </Box>\n </>\n );\n};\n\nexport default ZoomableImage;\n", "import { FullScreenImage } from './FullScreenImage';\n\nexport default FullScreenImage;\n", "export const BREAKPOINT_SM = `${320 - 1}px`;\nexport const BREAKPOINT_MD = `${768 - 1}px`;\nexport const BREAKPOINT_LG = `${960 - 1}px`;\nexport const BREAKPOINT_XL = `${1200 - 1}px`;\n\nexport const BREAKPOINT_SM_QUERY = `(max-width: ${BREAKPOINT_SM})`;\nexport const BREAKPOINT_MD_QUERY = `(max-width: ${BREAKPOINT_MD})`;\nexport const BREAKPOINT_LG_QUERY = `(max-width: ${BREAKPOINT_LG})`;\nexport const BREAKPOINT_XL_QUERY = `(max-width: ${BREAKPOINT_XL})`;\n", "import { FullWidthImage } from './FullWidthImage';\n\nexport default FullWidthImage;\n", "import React from 'react';\nimport { Box, DefaultSectionHeader, Flex, Gradient, Wrapper } from 'boemly';\nimport Image from 'next/image';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiButtonWithVariant from '../../models/strapi/StrapiButtonWithVariant';\n\nexport interface HeroProps {\n slice: {\n tagline?: string;\n title: string;\n subTitle: string;\n button?: StrapiLink;\n additionalButtons: StrapiButtonWithVariant[];\n image?: StrapiImage;\n textAlign: 'left' | 'center';\n shape?: StrapiImage;\n };\n}\n\nexport const Hero = ({ slice }: HeroProps): React.JSX.Element => (\n <Box\n position=\"relative\"\n width=\"full\"\n height=\"var(--default-hero-height)\"\n minHeight=\"2xl\"\n backgroundColor=\"gray.900\"\n overflowX=\"hidden\"\n >\n {slice.image && (\n <>\n <Image\n src={strapiMediaUrl(slice.image.img, 'xLarge')}\n alt={slice.image.alt}\n fill\n style={{ objectFit: slice.image.objectFit || 'cover' }}\n />\n <Gradient />\n </>\n )}\n {slice.shape && (\n <Box\n position=\"absolute\"\n bottom=\"0\"\n borderTopRightRadius=\"full\"\n width={['3xs', null, '2xs', null, 'sm']}\n height={['3xs', null, '2xs', null, 'sm']}\n right={['-16', null, '24']}\n >\n <Image\n src={strapiMediaUrl(slice.shape.img, 'medium')}\n alt={slice.shape.alt}\n fill\n style={{\n objectFit: slice.shape.objectFit || 'cover',\n borderTopRightRadius: 'var(--boemly-radii-full)',\n }}\n />\n </Box>\n )}\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"56%\"\n width=\"full\"\n textAlign={slice.textAlign}\n transform=\"translateY(-50%)\"\n >\n <Wrapper>\n <>\n <DefaultSectionHeader\n isHero\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n taglineProps={{ color: 'white' }}\n titleProps={{\n color: 'white',\n maxW: slice.textAlign === 'center' ? '4xl' : '3xl',\n mx: slice.textAlign === 'center' ? 'auto' : 'unset',\n textAlign: slice.textAlign,\n }}\n textProps={{\n maxW: '2xl',\n mx: slice.textAlign === 'center' ? 'auto' : 'unset',\n textAlign: slice.textAlign,\n color: 'white',\n }}\n />\n\n <Flex\n gap=\"8\"\n justifyContent={slice.textAlign === 'center' ? 'center' : 'start'}\n >\n {slice.button && (\n <StrapiLinkButton\n key={slice.button.id}\n mt=\"10\"\n size=\"xl\"\n link={slice.button}\n component=\"Hero\"\n />\n )}\n {slice.additionalButtons.map((button) => (\n <StrapiLinkButton\n key={button.button.id}\n mt=\"10\"\n size=\"xl\"\n variant={button.variant}\n link={button.button}\n component=\"Hero\"\n />\n ))}\n </Flex>\n </>\n </Wrapper>\n </Box>\n </Box>\n);\n", "import React, { useContext } from 'react';\nimport { Button } from 'boemly';\nimport Link from 'next/link';\nimport { useDetectAdBlock } from 'adblock-detect-react';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport openHubSpotChat from '../../utils/openHubSpotChat';\nimport { AnalyticsContext } from '../ContextProvider/ContextProvider';\n\nexport interface StrapiLinkButtonProps {\n link: StrapiLink;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n variant?: 'solid' | 'outline' | 'outlineWhite' | 'link' | 'ghost';\n colorPalette?: 'primary' | 'gray' | 'orange' | 'green' | 'white';\n rightIcon?: React.JSX.Element;\n leftIcon?: React.JSX.Element;\n mt?: any;\n mr?: any;\n mb?: any;\n ml?: any;\n mx?: any;\n my?: any;\n background?: string;\n width?: string;\n component?: string;\n}\n\nexport const StrapiLinkButton: React.FC<StrapiLinkButtonProps> = ({\n link,\n component = 'StrapiLinkButton',\n rightIcon,\n leftIcon,\n ...buttonProps\n}: StrapiLinkButtonProps) => {\n const adBlockDetected = useDetectAdBlock();\n const analyticsFunction = useContext(AnalyticsContext);\n\n const handleClick = () => {\n const buttonUrl =\n link.intercomLauncher && adBlockDetected\n ? 'mailto:hello@tree.ly'\n : strapiLinkUrl(link);\n\n analyticsFunction?.({\n type: 'track',\n props: {\n action: 'click',\n component,\n buttonText: link.text,\n buttonUrl,\n },\n });\n };\n\n const buttonContent = (\n <>\n {leftIcon}\n {link.text}\n {rightIcon}\n </>\n );\n\n if (link.intercomLauncher) {\n if (adBlockDetected) {\n return (\n <Button {...buttonProps} asChild onClick={handleClick}>\n <Link href=\"mailto:hello@tree.ly\">{buttonContent}</Link>\n </Button>\n );\n }\n\n return (\n <Button\n {...buttonProps}\n onClick={() => {\n handleClick();\n openHubSpotChat();\n }}\n >\n {buttonContent}\n </Button>\n );\n }\n\n return (\n <Button {...buttonProps} asChild onClick={handleClick}>\n <Link href={strapiLinkUrl(link)}>{buttonContent}</Link>\n </Button>\n );\n};\n", "const openHubSpotChat = () => {\n const w = window as any;\n\n if (w.HubSpotConversations) {\n w.HubSpotConversations.widget.open();\n } else {\n w.hsConversationsOnReady = [\n () => {\n w.HubSpotConversations.widget.open();\n },\n ];\n }\n};\n\nexport default openHubSpotChat;\n", "import React, { createContext } from 'react';\nimport { createIntl, createIntlCache } from 'react-intl';\nimport { Global } from '@emotion/react';\nimport { BoemlyThemeProvider } from 'boemly';\nimport { GLOBAL_STYLE } from '../../constants/globalStyle';\nimport { FONT_CUSTOMIZATIONS } from '../../constants/fontCustomizations';\nimport getMessages from '../../utils/getMessages';\nimport strapiClient from '../../integrations/strapi/strapiClient';\nimport { SWRConfig } from 'swr/_internal';\n\nexport type AnalyticsFunction = ({\n type,\n props,\n}: {\n type: 'track' | 'page';\n props?: Record<string, any>;\n}) => void;\n\nexport const AnalyticsContext = createContext<AnalyticsFunction | undefined>(\n undefined\n);\n\nconst cache = createIntlCache();\n\nconst intlFactory = (locale: string) =>\n createIntl(\n {\n locale,\n messages: getMessages(locale),\n },\n cache\n );\n\nexport const IntlContext = createContext(intlFactory('en'));\n\nexport interface ContextProviderProps {\n children: React.ReactNode;\n locale: string;\n analyticsFunction?: AnalyticsFunction;\n}\n\nexport const ContextProvider: React.FC<ContextProviderProps> = ({\n children,\n locale,\n analyticsFunction,\n}: ContextProviderProps): React.JSX.Element => {\n const fetcher = async (resource: any, init: any) => {\n const response = await strapiClient.get(`${resource}`, {\n ...init,\n headers: {},\n });\n // Check if the response was an error:\n if (response.status < 200 || response.status >= 300) {\n let errorData = { message: '' };\n try {\n errorData = await response.data;\n } catch (error) {\n errorData = {\n message: `An unknown error occurred while fetching data.`,\n };\n }\n throw new Error(errorData.message); // Throwing the error will lead to onError being called\n }\n\n return { body: await response.data, headers: response.headers };\n };\n return (\n <>\n <SWRConfig\n value={{\n fetcher,\n }}\n >\n <Global styles={{ GLOBAL_STYLE }} />\n <BoemlyThemeProvider fonts={FONT_CUSTOMIZATIONS}>\n <IntlContext.Provider value={intlFactory(locale)}>\n <AnalyticsContext.Provider value={analyticsFunction}>\n {children}\n </AnalyticsContext.Provider>\n </IntlContext.Provider>\n </BoemlyThemeProvider>\n </SWRConfig>\n </>\n );\n};\n", "import { css } from '@emotion/react';\n\nexport const GLOBAL_STYLE = css`\n :root {\n --default-hero-height: calc(100vh - var(--boemly-spacing-24));\n }\n\n a {\n text-decoration: none;\n }\n`;\n", "interface FontsCustomization {\n body?: { value: string };\n display?: { value: string };\n heading?: { value: string };\n mono?: { value: string };\n}\n\nexport const FONT_CUSTOMIZATIONS: FontsCustomization = {\n body: { value: 'Inter' },\n heading: { value: 'Inter' },\n display: { value: 'GintoNord' },\n mono: { value: 'SpaceMono' },\n};\n\nexport default FontsCustomization;\n", "const messagesDe = {\n 'sections.comparison.backgroundShapes': 'Hintergrundformen',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'components.creditsAvailableBadge.text.yes': 'Credits verf\u00FCgbar',\n 'components.creditsAvailableBadge.text.some': 'Einige verbleibende Credits',\n 'components.creditsAvailableBadge.text.no': 'Keine verbleibenden Credits',\n 'components.creditsAvailableBadge.text.notYet': 'Credits bald verf\u00FCgbar',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.cta.backgroundShapes': 'Dunkle Hintergrundformen',\n 'sections.cta.backgroundShapesLight': 'Helle Hintergrundformen',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.customerCard.more': 'Weiterlesen',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.customerQuoteCard.more': 'Weiterlesen',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.eventCard.recommendedEvent': 'Empfohlene Veranstaltung',\n 'sections.eventCard.buttonShowMore': 'Mehr anzeigen',\n 'sections.eventCard.buttonShowLess': 'Weniger anzeigen',\n\n 'sections.eventCard.eventType.conference': 'Konferenz',\n 'sections.eventCard.eventType.webinar': 'Webinar',\n 'sections.eventCard.eventType.forestwalk': 'Waldspaziergang',\n 'sections.eventCard.eventType.partnerevent': 'Partnerveranstaltung',\n 'sections.eventCard.eventType.lunch&learn': 'Mittagessen & Lernen',\n 'sections.eventCard.eventType.fair': 'Messe',\n 'sections.eventCard.eventType.festival': 'Festival',\n 'sections.eventCard.eventType.roadshow': 'Roadshow',\n 'sections.eventCard.eventType.meetup': 'Meet Up',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.events.loadMore': 'Mehr laden',\n 'sections.events.noUpcomingEvents':\n 'Keine bevorstehenden Veranstaltungen gefunden',\n 'sections.events.noPastEvents': 'Keine vergangenen Veranstaltungen gefunden',\n 'sections.eventsFilter.searchPlaceholder': 'Suchen',\n 'sections.events.eventsFilter.eventType': 'Event Type',\n 'sections.events.eventsFilter.language': 'Sprache',\n 'sections.events.eventsFilter.sortBy.title': 'Sortieren nach',\n 'sections.events.eventsFilter.sortBy.newest': 'Neueste zuerst',\n 'sections.events.eventsFilter.sortBy.oldest': '\u00C4lteste zuerst',\n};\n\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.glossary.copyButtonLabel':\n 'Kopiere den Link zu diesem Abschnitt in die Zwischenablage',\n 'sections.glossary.copySuccessMessage': 'Link in die Zwischenablage kopiert',\n 'sections.glossary.copyFailureMessage':\n 'Link konnte nicht in die Zwischenablage kopiert werden',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'features.portfolio.documentsDownloadList.projectDocuments':\n 'Projektdokumente',\n 'features.portfolio.documentsDownloadList.downloadDocument':\n 'Dokument herunterladen',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.projectFacts.projectInfo.value': 'Projekt Infos',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'components.projectGridCard.certified': 'Zertifiziert, {year}',\n 'components.projectGridCard.certificationInProgress':\n 'Zertifizierung ist in Arbeit',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.projectsMap.link.text': 'Mehr Infos',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'features.projectInfo.projectInfo.value': 'Projekt Infos',\n 'features.projectInfo.properties.area': 'Projekt Fl\u00E4che',\n 'features.projectInfo.properties.location': 'Standort',\n 'features.projectInfo.properties.start': 'Projekt Start Datum',\n 'features.projectInfo.properties.timeSpan': 'Projekt Zeitraum',\n 'features.projectInfo.properties.projectType': 'Projekt Typ',\n 'features.projectInfo.properties.projectDeveloper': 'Projekt Entwickler',\n 'features.projectInfo.properties.verificationStandard.label':\n 'Verifizierungsstandard',\n 'features.projectInfo.properties.verificationStandard.value.SilvaconsultFCSISO14':\n 'SILVACONSULT\u00AE Forest Carbon Standard, ISO 14064-2',\n 'features.projectInfo.properties.verificationStandard.value.MfKWCH':\n 'Methodik f\u00FCr Klimaschutzprojekte im Wald f\u00FCr die Schweiz',\n 'features.projectInfo.properties.projectVolume.toolTip':\n 'Dies ist die durchschnittliche Anzahl der Credits, die pro Jahr ausgestellt werden. Dieser Wert entspricht nicht den Verf\u00FCgbarkeiten.',\n 'features.projectInfo.properties.projectVolume.label': 'Projektvolumen',\n 'features.projectInfo.properties.riskBuffer': 'Anteil Risikopuffer',\n\n 'features.projectInfo.properties.year':\n '{years} {years, plural, one {Jahr} other {Jahre} }',\n};\n\nexport default messagesDe;\n", "const messagesDe = {\n 'portfolio.smallCheckout.price.taxNotIncluded': 'ohne Steuern',\n 'portfolio.smallCheckout.price.taxIncluded':\n 'Preis inklusive Steuern: {number}',\n\n 'portfolio.smallCheckout.contributionValueCurrency.label.CHF':\n 'Geben Sie den Beitrag in Fr. ein',\n 'portfolio.smallCheckout.contributionValueCurrency.label.EUR':\n 'Geben Sie den Beitrag in \u20AC ein',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '\u20AC',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.CHF': 'Fr.',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.CHF':\n 'Der Wert muss mindestens 10 CHF betragen',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.EUR':\n 'Der Wert muss mindestens 10 Euro betragen.',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.empty':\n 'Bitte geben Sie einen Wert ein',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh':\n 'F\u00FCr gr\u00F6\u00DFere Eink\u00E4ufe kontaktieren Sie bitte unser Verkaufsteam',\n\n 'portfolio.smallCheckout.contributionValueTons.label': 'Beitrag in Tonnen',\n\n 'portfolio.smallCheckout.submitButton': 'Credits kaufen',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.shopCheckout.intro.price': 'Preis',\n\n 'sections.shopCheckout.contributionValue.label.EUR':\n 'Geben sie einen Betrag in \u20AC ein',\n 'sections.shopCheckout.contributionValue.label.CHF':\n 'Geben sie einen Betrag in CHF ein',\n 'sections.shopCheckout.contributionValue.unit.EUR': '\u20AC',\n 'sections.shopCheckout.contributionValue.unit.CHF': 'CHF',\n 'sections.shopCheckout.contributionValue.validation.empty':\n 'Bitte geben sie einen Betrag ein',\n 'sections.shopCheckout.contributionValue.validation.tooLow.EUR':\n 'Der Betrag muss mindestens 10 Euro sein',\n 'sections.shopCheckout.contributionValue.validation.tooLow.CHF':\n 'Der Betrag muss mindestens 10 CHF sein',\n 'sections.shopCheckout.contributionValue.validation.tooHigh':\n 'F\u00FCr gr\u00F6\u00DFere Eink\u00E4ufe kontaktieren Sie bitte unser Verkaufsteam \u00FCber office@tree.ly',\n\n 'sections.shopCheckout.summary.kg': 'Menge',\n 'sections.shopCheckout.summary.price': 'Preis',\n 'sections.shopCheckout.summary.price.taxNotIncluded': 'ohne Steuern',\n 'sections.shopCheckout.summary.price.taxIncluded':\n 'Preis inklusive Steuern: {number}',\n\n 'sections.shopCheckout.submit': 'Kaufen',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.textCarousel.moveRight': 'Nach rechts bewegen',\n 'sections.textCarousel.moveLeft': 'Nach links bewegen',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.timeline.backgroundShapes': 'Hintergrundformen',\n 'sections.timeline.showMoreButton': 'Drei weitere Meilensteine anzeigen',\n};\nexport default messagesDe;\n", "const unitMessagesDe = {\n 'unit.formatter.tonsCo2': '{number} /tCO\u2082',\n 'unit.formatter.tonsCo2PerYear': '{number} tCO\u2082/Jahr',\n};\nexport default unitMessagesDe;\n", "import comparisonMessagesDe from './slices/Comparison/messages.de';\nimport creditsAvailableBadgeMessagesDe from './components/CreditsAvailableBadge/messages.de';\nimport ctaMessagesDe from './slices/Cta/messages.de';\nimport customerCardMessagesDe from './components/CustomerCard/messages.de';\nimport customerQuoteCardMessagesDe from './components/CustomerQuoteCard/messages.de';\nimport eventCardMessagesDe from './components/EventCard/messages.de';\nimport eventsMessagesDe from './slices/Events/messages.de';\nimport glossaryMessagesDe from './slices/Glossary/messages.de';\nimport portfolioDocumentsDownloadListMessagesDe from './components/portfolio/DocumentsDownloadList/messages.de';\nimport projectFactsMessagesDe from './slices/ProjectFacts/messages.de';\nimport projectGridCardMessagesDe from './components/ProjectGridCard/messages.de';\nimport projectsMapMessagesDe from './slices/ProjectsMap/messages.de';\nimport portfolioProjectInfoMessagesDe from './components/portfolio/ProjectInfo/messages.de';\nimport portfolioSmallCheckoutMessagesDe from './components/portfolio/SmallCheckout/messages.de';\nimport shopCheckoutMessagesDe from './slices/ShopCheckout/messages.de';\nimport textCarouselMessagesDe from './slices/TextCarousel/messages.de';\nimport timelineMessagesDe from './slices/Timeline/messages.de';\n\nimport unitMessagesDe from './unit.messages.de';\n\nconst rootMessagesDe = {\n //\n // Components\n //\n ...creditsAvailableBadgeMessagesDe,\n ...eventCardMessagesDe,\n ...portfolioDocumentsDownloadListMessagesDe,\n ...portfolioProjectInfoMessagesDe,\n ...portfolioSmallCheckoutMessagesDe,\n ...projectGridCardMessagesDe,\n\n //\n // Slices\n //\n ...comparisonMessagesDe,\n ...ctaMessagesDe,\n ...customerCardMessagesDe,\n ...customerQuoteCardMessagesDe,\n ...eventsMessagesDe,\n ...glossaryMessagesDe,\n ...projectFactsMessagesDe,\n ...projectsMapMessagesDe,\n ...shopCheckoutMessagesDe,\n ...textCarouselMessagesDe,\n ...timelineMessagesDe,\n\n //\n // Units\n //\n ...unitMessagesDe,\n};\n\nexport default rootMessagesDe;\n", "const messagesEn = {\n 'sections.comparison.backgroundShapes': 'Background shapes',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'components.creditsAvailableBadge.text.yes': 'Credits available',\n 'components.creditsAvailableBadge.text.some': 'Some remaining credits',\n 'components.creditsAvailableBadge.text.no': 'No remaining credits',\n 'components.creditsAvailableBadge.text.notYet': 'Credits available soon',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'sections.cta.backgroundShapesDark': 'Dark background shapes',\n 'sections.cta.backgroundShapesLight': 'Light background shapes',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'sections.customerCard.more': 'Read more',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'sections.customerQuoteCard.more': 'Read more',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'sections.eventCard.recommendedEvent': 'Recommended Event',\n 'sections.eventCard.buttonShowMore': 'Show More',\n 'sections.eventCard.buttonShowLess': 'Show Less',\n\n 'sections.eventCard.eventType.conference': 'Conference',\n 'sections.eventCard.eventType.webinar': 'Webinar',\n 'sections.eventCard.eventType.forestwalk': 'Forest Walk',\n 'sections.eventCard.eventType.partnerevent': 'Partner Event',\n 'sections.eventCard.eventType.lunch&learn': 'Lunch & Learn',\n 'sections.eventCard.eventType.fair': 'Fair',\n 'sections.eventCard.eventType.festival': 'Festival',\n 'sections.eventCard.eventType.roadshow': 'Roadshow',\n 'sections.eventCard.eventType.meetup': 'Meet Up',\n};\nexport default messagesEn;\n", "const messagesDe = {\n 'sections.events.loadMore': 'Load more',\n 'sections.events.noUpcomingEvents': 'No upcoming events found',\n 'sections.events.noPastEvents': 'No past events found',\n 'sections.events.eventsFilter.searchPlaceholder': 'Search',\n 'sections.events.eventsFilter.eventType': 'Event Type',\n 'sections.events.eventsFilter.language': 'Language',\n 'sections.events.eventsFilter.sortBy.title': 'Sort by',\n 'sections.events.eventsFilter.sortBy.newest': 'Newest first',\n 'sections.events.eventsFilter.sortBy.oldest': 'Oldest first',\n};\n\nexport default messagesDe;\n", "const messagesEn = {\n 'sections.glossary.copyButtonLabel':\n 'Copy a link to this section to your clipboard',\n 'sections.glossary.copySuccessMessage': 'Copied the link to your clipboard',\n 'sections.glossary.copyFailureMessage': 'Could not copy link to clipboard',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'features.portfolio.documentsDownloadList.projectDocuments':\n 'Project documents',\n 'features.portfolio.documentsDownloadList.downloadDocument':\n 'Download document',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'sections.projectFacts.projectInfo.value': 'Project Infos',\n};\nexport default messagesEn;\n", "const messagesDe = {\n 'components.projectGridCard.certified': 'Certified, {year}',\n 'components.projectGridCard.certificationInProgress':\n 'Certification in progress',\n};\nexport default messagesDe;\n", "const messagesEn = {\n 'sections.projectsMap.link.text': 'Show more info',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'features.projectInfo.projectInfo.value': 'Project Infos',\n 'features.projectInfo.properties.area': 'Project Area',\n 'features.projectInfo.properties.location': 'Location',\n 'features.projectInfo.properties.start': 'Project Start Date',\n 'features.projectInfo.properties.timeSpan': 'Project Time Span',\n 'features.projectInfo.properties.projectType': 'Project Type',\n 'features.projectInfo.properties.projectDeveloper': 'Project Developer',\n 'features.projectInfo.properties.verificationStandard.label':\n 'Verification Standard',\n 'features.projectInfo.properties.verificationStandard.value.SilvaconsultFCSISO14':\n 'SILVACONSULT\u00AE Forest Carbon Standard, ISO 14064-2',\n 'features.projectInfo.properties.verificationStandard.value.MfKWCH':\n 'Methodik f\u00FCr Klimaschutzprojekte im Wald f\u00FCr die Schweiz',\n 'features.projectInfo.properties.projectVolume.label': 'Project Volume',\n 'features.projectInfo.properties.projectVolume.toolTip':\n \"This is the average amount of credits that are issued per year. This value doesn't represent availabilities.\",\n 'features.projectInfo.properties.riskBuffer': 'Risk Buffer Share',\n\n 'features.projectInfo.properties.year':\n '{years} {years, plural, one {year} other {years} }',\n};\n\nexport default messagesEn;\n", "const messagesEn = {\n 'portfolio.smallCheckout.price.taxNotIncluded': 'not including tax',\n 'portfolio.smallCheckout.price.taxIncluded': 'Price including tax: {number}',\n\n 'portfolio.smallCheckout.contributionValueCurrency.label.CHF':\n 'Contribution Amount in CHF',\n 'portfolio.smallCheckout.contributionValueCurrency.label.EUR':\n 'Contribution Amount in \u20AC',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '\u20AC',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.CHF': 'CHF',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.CHF':\n 'The value must be at least 10 CHF',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.EUR':\n 'The value must be at least 10 Euro',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.empty':\n 'Please enter a value',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh':\n 'For bigger purchases please contact our sales team',\n\n 'portfolio.smallCheckout.contributionValueTons.label':\n 'Contribution Amount in Tons',\n\n 'portfolio.smallCheckout.submitButton': 'Buy credits',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'sections.shopCheckout.intro.price': 'Price',\n\n 'sections.shopCheckout.contributionValue.label.EUR':\n 'Enter contribution value in \u20AC',\n 'sections.shopCheckout.contributionValue.label.CHF':\n 'Enter contribution value in CHF',\n 'sections.shopCheckout.contributionValue.unit.EUR': '\u20AC',\n 'sections.shopCheckout.contributionValue.unit.CHF': 'CHF',\n 'sections.shopCheckout.contributionValue.validation.empty':\n 'Please enter a value',\n 'sections.shopCheckout.contributionValue.validation.tooLow.EUR':\n 'Der Betrag muss mindestens 10 Euro sein',\n 'sections.shopCheckout.contributionValue.validation.tooLow.CHF':\n 'Der Betrag muss mindestens 10 CHF sein',\n 'sections.shopCheckout.contributionValue.validation.tooHigh':\n 'For bigger purchases please contact our sales team via office@tree.ly',\n\n 'sections.shopCheckout.summary.kg': 'Quantity',\n 'sections.shopCheckout.summary.price': 'Price',\n 'sections.shopCheckout.summary.price.taxNotIncluded': 'not including tax',\n 'sections.shopCheckout.summary.price.taxIncluded':\n 'Price including tax: {number}',\n\n 'sections.shopCheckout.submit': 'Checkout',\n};\nexport default messagesEn;\n", "const messagesDe = {\n 'sections.textCarousel.moveRight': 'Move right',\n 'sections.textCarousel.moveLeft': 'Move left',\n};\nexport default messagesDe;\n", "const messagesEn = {\n 'sections.timeline.backgroundShapes': 'Background shapes',\n 'sections.timeline.showMoreButton': 'Show three more milestones',\n};\nexport default messagesEn;\n", "const unitMessagesEn = {\n 'unit.formatter.tonsCo2': '{number} /tCO\u2082',\n 'unit.formatter.tonsCo2PerYear': '{number} tCO\u2082/year',\n};\nexport default unitMessagesEn;\n", "import comparisonMessagesEn from './slices/Comparison/messages.en';\nimport creditsAvailableBadgeMessagesEn from './components/CreditsAvailableBadge/messages.en';\nimport ctaMessagesEn from './slices/Cta/messages.en';\nimport customerCardMessagesEn from './components/CustomerCard/messages.en';\nimport customerQuoteCardMessagesEn from './components/CustomerQuoteCard/messages.en';\nimport eventCardMessagesEn from './components/EventCard/messages.en';\nimport eventsMessagesEn from './slices/Events/messages.en';\nimport glossaryMessagesEn from './slices/Glossary/messages.en';\nimport portfolioDocumentsDownloadListMessagesEn from './components/portfolio/DocumentsDownloadList/messages.en';\nimport projectFactsMessagesEn from './slices/ProjectFacts/messages.en';\nimport projectGridCardMessagesEn from './components/ProjectGridCard/messages.en';\nimport projectsMapMessagesEn from './slices/ProjectsMap/messages.en';\nimport portfolioProjectInfoMessagesEn from './components/portfolio/ProjectInfo/messages.en';\nimport portfolioSmallCheckoutMessagesEn from './components/portfolio/SmallCheckout/messages.en';\nimport shopCheckoutMessagesEn from './slices/ShopCheckout/messages.en';\nimport textCarouselMessagesEn from './slices/TextCarousel/messages.en';\nimport timelineMessagesEn from './slices/Timeline/messages.en';\n\nimport unitMessagesEn from './unit.messages.en';\n\nconst rootMessagesEn = {\n //\n // Components\n //\n ...creditsAvailableBadgeMessagesEn,\n ...eventCardMessagesEn,\n ...portfolioDocumentsDownloadListMessagesEn,\n ...portfolioProjectInfoMessagesEn,\n ...portfolioSmallCheckoutMessagesEn,\n ...projectGridCardMessagesEn,\n\n //\n // Slices\n //\n ...comparisonMessagesEn,\n ...ctaMessagesEn,\n ...customerCardMessagesEn,\n ...customerQuoteCardMessagesEn,\n ...eventsMessagesEn,\n ...glossaryMessagesEn,\n ...projectFactsMessagesEn,\n ...projectsMapMessagesEn,\n ...shopCheckoutMessagesEn,\n ...textCarouselMessagesEn,\n ...timelineMessagesEn,\n\n //\n // Units\n //\n ...unitMessagesEn,\n};\n\nexport default rootMessagesEn;\n", "import { STRAPI_FALLBACK_LOCALE } from '../constants/strapi';\nimport rootMessagesDe from '../rootMessages.de';\nimport rootMessagesEn from '../rootMessages.en';\n\nconst messages = {\n en: rootMessagesEn,\n de: rootMessagesDe,\n};\n\nconst getMessages = (locale: string) => {\n const messagesLocale = Object.keys(messages).includes(`${locale}`)\n ? (locale as keyof typeof messages)\n : STRAPI_FALLBACK_LOCALE;\n\n return messages[messagesLocale];\n};\n\nexport default getMessages;\n", "import { StrapiLinkButton } from './StrapiLinkButton';\n\nexport default StrapiLinkButton;\n", "import { Hero } from './Hero';\n\nexport default Hero;\n", "import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n SimpleGrid,\n Spacer,\n Text,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\n\nexport interface IconGridProps {\n slice: {\n tagline?: string;\n title?: string;\n subTitle?: string;\n iconsWithTextAndButton: {\n id: number;\n title: string;\n text: string;\n icon: StrapiImage;\n button?: StrapiLink;\n }[];\n };\n}\n\nexport const IconGrid = ({ slice }: IconGridProps): React.JSX.Element => {\n const columns = () => {\n if (slice.iconsWithTextAndButton.length === 2) {\n return [1, null, null, 2, 2];\n }\n if (slice.iconsWithTextAndButton.length === 1) {\n return 1;\n }\n return [1, null, null, 2, 3];\n };\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n {slice.title ? (\n <>\n <Flex alignItems=\"center\" flexDirection=\"column\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n taglineProps={{ maxW: '2xl', textAlign: 'center' }}\n titleProps={{ maxW: '3xl', textAlign: 'center' }}\n textProps={{ maxW: '3xl', textAlign: 'center' }}\n />\n </Flex>\n <Spacer height=\"20\" />\n </>\n ) : (\n <></>\n )}\n\n <SimpleGrid\n columns={columns()}\n gap={slice.iconsWithTextAndButton.length === 2 ? '14' : '16'}\n rowGap={['16', null, null, '20']}\n >\n {slice.iconsWithTextAndButton.map((iconWithTextAndButton) => (\n <Box key={iconWithTextAndButton.id}>\n <Box\n margin=\"0 auto\"\n backgroundColor=\"primary.50\"\n borderRadius=\"full\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-around\"\n width=\"6.5rem\"\n height=\"6.5rem\"\n >\n <Box position=\"absolute\" width=\"12\" height=\"12\">\n <Image\n src={strapiMediaUrl(\n iconWithTextAndButton.icon.img,\n 'xSmall'\n )}\n alt={iconWithTextAndButton.icon.alt}\n fill\n style={{\n objectFit:\n iconWithTextAndButton.icon.objectFit || 'contain',\n }}\n />\n </Box>\n </Box>\n <Heading size=\"xl\" textAlign=\"center\" mb=\"4\" mt=\"8\">\n {iconWithTextAndButton.title}\n </Heading>\n <Text size=\"mdRegularNormal\" textAlign=\"center\">\n {iconWithTextAndButton.text}\n </Text>\n {iconWithTextAndButton.button && (\n <Box textAlign=\"center\">\n <StrapiLinkButton\n key={iconWithTextAndButton.button.id}\n mt=\"8\"\n size=\"md\"\n variant=\"outline\"\n link={iconWithTextAndButton.button}\n component=\"IconGrid\"\n />\n </Box>\n )}\n </Box>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { IconGrid } from './IconGrid';\n\nexport default IconGrid;\n", "import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n SimpleGrid,\n Text,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiLinkButtonWithIcon from '../../components/StrapiLinkButtonWithIcon';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLinkWithIcon from '../../models/strapi/StrapiLinkWithIcon';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\ninterface ImageGridSlice extends StrapiDefaultHeader {\n images: {\n id: number;\n title: string;\n subTitle?: string;\n image: StrapiImage;\n links: StrapiLinkWithIcon[];\n }[];\n}\nexport interface ImageGridProps {\n slice: ImageGridSlice;\n}\n\nexport const ImageGrid: React.FC<ImageGridProps> = ({\n slice,\n}: ImageGridProps) => {\n const [primary50] = useToken('colors', ['primary.50']);\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center' }}\n titleProps={{ textAlign: 'center', maxW: '6xl', marginX: 'auto' }}\n textProps={{ textAlign: 'center', maxW: '2xl', marginX: 'auto' }}\n />\n\n <SimpleGrid\n mt=\"24\"\n columns={3}\n gap=\"24\"\n rowGap=\"16\"\n minChildWidth=\"16rem\"\n >\n {slice.images.map(({ id, title, subTitle, image, links }) => (\n <Box key={id}>\n <Box position=\"relative\" height=\"sm\" borderRadius=\"xl\">\n <Image\n src={strapiMediaUrl(image.img, 'medium')}\n alt={image.alt}\n fill\n style={{\n objectFit: image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n <Heading size=\"xl\" mt=\"4\">\n {title}\n </Heading>\n {subTitle && <Text size=\"mdRegularNormal\">{subTitle}</Text>}\n {links && links.length > 0 && (\n <Flex mt=\"3\" flexDir=\"row\" gap=\"2\" flexWrap=\"wrap\">\n {links.map((link) => (\n <StrapiLinkButtonWithIcon\n key={link.id}\n link={link}\n size=\"sm\"\n variant=\"outline\"\n component=\"ImageGrid\"\n />\n ))}\n </Flex>\n )}\n </Box>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import React from 'react';\nimport { CaretRightIcon, GlobeIcon } from '@phosphor-icons/react';\nimport LinkedInIcon from '../../icons/LinkedInIcon';\nimport StrapiLinkWithIcon from '../../models/strapi/StrapiLinkWithIcon';\nimport StrapiLinkButton from '../StrapiLinkButton';\nimport { StrapiLinkButtonProps } from '../StrapiLinkButton/StrapiLinkButton';\n\nexport interface StrapiLinkButtonWithIconProps\n extends Omit<StrapiLinkButtonProps, 'link'> {\n link: StrapiLinkWithIcon;\n}\n\nexport const StrapiLinkButtonWithIcon: React.FC<\n StrapiLinkButtonWithIconProps\n> = ({ link, ...props }: StrapiLinkButtonWithIconProps) => {\n const getLinkIcon = (destination: string) => {\n switch (destination) {\n case 'linkedin': {\n return <LinkedInIcon />;\n }\n case 'web': {\n return <GlobeIcon />;\n }\n default: {\n return <CaretRightIcon />;\n }\n }\n };\n\n return (\n <StrapiLinkButton\n {...props}\n link={link.link}\n rightIcon={getLinkIcon(link.destination)}\n />\n );\n};\n", "import React from 'react';\n\nconst LinkedInIcon = () => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_112_606)\">\n <path\n d=\"M11.9286 11.9285H9.85424V8.67998C9.85424 7.90534 9.84042 6.90813 8.77539 6.90813C7.695 6.90813 7.52969 7.75213 7.52969 8.62357V11.9283H5.45533V5.24799H7.44671V6.16093H7.47459C7.67388 5.82018 7.96186 5.53986 8.30786 5.34984C8.65386 5.15981 9.04493 5.06719 9.4394 5.08183C11.5418 5.08183 11.9295 6.46473 11.9295 8.2638L11.9286 11.9285ZM3.11477 4.33484C2.87669 4.33489 2.64393 4.26433 2.44595 4.13209C2.24796 3.99985 2.09365 3.81188 2.0025 3.59193C1.91135 3.37199 1.88746 3.12995 1.93387 2.89644C1.98027 2.66292 2.09488 2.44841 2.26321 2.28003C2.43153 2.11164 2.646 1.99696 2.8795 1.95047C3.11301 1.90398 3.35504 1.92778 3.57502 2.01884C3.795 2.10992 3.98303 2.26417 4.11533 2.46211C4.24764 2.66004 4.31829 2.89277 4.31833 3.13085C4.31836 3.28894 4.28725 3.44547 4.22678 3.59153C4.1663 3.7376 4.07767 3.87031 3.96591 3.98211C3.85415 4.09392 3.72146 4.18261 3.57541 4.24313C3.42937 4.30365 3.27286 4.33481 3.11477 4.33484ZM4.15194 11.9285H2.07544V5.24799H4.15194V11.9285ZM12.9628 0.000953808H1.03307C0.762304 -0.00210183 0.501383 0.102466 0.307673 0.291681C0.113961 0.480895 0.00330461 0.739273 0 1.01004V12.9892C0.00319151 13.2602 0.113783 13.5187 0.307487 13.7081C0.501192 13.8975 0.762169 14.0023 1.03307 13.9994H12.9628C13.2342 14.0028 13.496 13.8983 13.6904 13.7089C13.8848 13.5195 13.9962 13.2607 14 12.9892V1.00918C13.9961 0.737873 13.8846 0.479199 13.6902 0.28999C13.4958 0.10078 13.2341 -0.00348904 12.9628 8.91429e-05\"\n fill=\"#0A66C2\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_112_606\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n);\n\nexport default LinkedInIcon;\n", "import { StrapiLinkButtonWithIcon } from './StrapiLinkButtonWithIcon';\n\nexport default StrapiLinkButtonWithIcon;\n", "import { ImageGrid } from './ImageGrid';\n\nexport default ImageGrid;\n", "import React, { Fragment } from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Heading,\n SimpleGrid,\n Text,\n useMediaQuery,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { CaretRightIcon } from '@phosphor-icons/react';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport { BREAKPOINT_LG_QUERY } from '../../constants/breakpoints';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { CDN_URI } from '../../constants/api';\n\ninterface ImageTextSequenceSlice extends StrapiDefaultHeader {\n imageTextRows: {\n id: number;\n title: string;\n text: string;\n button?: StrapiLink;\n image: StrapiImage;\n }[];\n background?: boolean;\n}\nexport interface ImageTextSequenceProps {\n slice: ImageTextSequenceSlice;\n}\n\nexport const ImageTextSequence: React.FC<ImageTextSequenceProps> = ({\n slice,\n}: ImageTextSequenceProps) => {\n const [oneColumnGrid] = useMediaQuery([BREAKPOINT_LG_QUERY]);\n const [primary50] = useToken('colors', ['primary.50']);\n const [gray700] = useToken('colors', ['gray.700']);\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n {slice.background ? (\n <>\n <Box\n position=\"absolute\"\n top=\"0\"\n right=\"24\"\n display={['none', null, null, 'unset']}\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/desktop-map-border.svg`}\n alt=\"Map\"\n width=\"786\"\n height=\"897\"\n />\n </Box>\n <Box\n position=\"absolute\"\n top=\"64\"\n right=\"-14\"\n display={['unset', null, null, 'none']}\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/mobile-map-border.svg`}\n alt=\"Map\"\n width=\"227\"\n height=\"452\"\n />\n </Box>\n </>\n ) : (\n <></>\n )}\n <Wrapper>\n <Box position=\"relative\" zIndex=\"1\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: ['left', null, null, null, 'center'] }}\n titleProps={{\n maxW: '6xl',\n marginX: ['0', null, null, null, 'auto'],\n textAlign: ['left', null, null, null, 'center'],\n }}\n textProps={{\n maxW: '2xl',\n marginX: ['0', null, null, null, 'auto'],\n textAlign: ['left', null, null, null, 'center'],\n color: 'black',\n }}\n />\n\n <SimpleGrid\n gap=\"16\"\n mt={['28', null, null, null, '40']}\n columns={[1, null, null, null, 2]}\n >\n {slice.imageTextRows.map(\n ({ id, title, text, button, image }, index) => {\n const imageBox = (\n <Box>\n <Box\n position=\"relative\"\n width=\"full\"\n minHeight={['2xs', null, null, 'sm']}\n >\n <Image\n src={strapiMediaUrl(image.img, 'large')}\n alt={image.alt}\n fill\n style={{\n objectFit: image.objectFit || 'contain',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n </Box>\n );\n return (\n <Fragment key={id}>\n {(oneColumnGrid || index % 2 !== 0) && imageBox}\n <Box\n display=\"flex\"\n alignItems=\"flex-start\"\n flexDirection=\"column\"\n justifyContent=\"center\"\n >\n <Heading as=\"h2\" size=\"xl\" mb=\"4\">\n {title}\n </Heading>\n <Text size=\"mdRegularNormal\">{text}</Text>\n {button && (\n <StrapiLinkButton\n mt=\"5\"\n link={button}\n size=\"sm\"\n variant=\"outline\"\n rightIcon={\n <CaretRightIcon size=\"10\" color={gray700} />\n }\n component=\"ImageTextSequence\"\n />\n )}\n </Box>\n {!oneColumnGrid && index % 2 === 0 && imageBox}\n </Fragment>\n );\n }\n )}\n </SimpleGrid>\n </Box>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { ImageTextSequence } from './ImageTextSequence';\n\nexport default ImageTextSequence;\n", "import React, { useContext } from 'react';\nimport {\n DefaultSectionContainer,\n DefaultSectionHeader,\n Grid,\n GridItem,\n PortfolioCard,\n Spacer,\n BoemlyList,\n Wrapper,\n} from 'boemly';\nimport { ArrowRightIcon } from '@phosphor-icons/react';\nimport Image from 'next/image';\nimport { useRouter } from 'next/router';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiPortfolioCard from '../../models/strapi/StrapiPortfolioCard';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { AnalyticsContext } from '../../components/ContextProvider/ContextProvider';\n\ninterface LeftTextRightCardSlice extends StrapiDefaultHeader {\n checkMarkLabels?: {\n id: number;\n text: string;\n }[];\n button?: StrapiLink;\n card?: StrapiPortfolioCard;\n}\nexport interface LeftTextRightCardProps {\n slice: LeftTextRightCardSlice;\n}\n\nexport const LeftTextRightCard: React.FC<LeftTextRightCardProps> = ({\n slice,\n}: LeftTextRightCardProps) => {\n const { push } = useRouter();\n const analyticsFunction = useContext(AnalyticsContext);\n\n const handleCardButtonClick = () => {\n if (slice.card?.button) {\n if (analyticsFunction) {\n analyticsFunction({\n type: 'track',\n props: {\n action: 'click',\n component: 'LeftTextRightCard',\n buttonText: slice.card?.button?.text,\n buttonUrl: strapiLinkUrl(slice.card?.button),\n cardTitle: slice.card?.title,\n },\n });\n }\n\n push(strapiLinkUrl(slice.card?.button));\n }\n };\n\n return (\n <DefaultSectionContainer title={slice.title}>\n <Wrapper>\n <Grid\n templateColumns={[\n 'repeat(8, 1fr)',\n null,\n null,\n null,\n 'repeat(12, 1fr)',\n ]}\n templateRows={['repeat(2, 1fr)', null, null, null, 'repeat(1, 1fr)']}\n rowGap=\"12\"\n >\n <GridItem colSpan={8} rowSpan={1} pr={['0', null, null, null, '28']}>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n\n {slice.checkMarkLabels && (\n <>\n <Spacer height=\"10\" />\n <BoemlyList listItems={slice.checkMarkLabels} />\n <Spacer height=\"10\" />\n </>\n )}\n\n {slice.button && (\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n colorPalette=\"white\"\n variant=\"outline\"\n rightIcon={<ArrowRightIcon />}\n component=\"LeftTextRightCard\"\n />\n )}\n </GridItem>\n <GridItem\n colSpan={[8, null, null, null, 4]}\n rowSpan={1}\n position=\"relative\"\n >\n {slice.card && (\n <PortfolioCard\n title={slice.card.title}\n button={\n slice.card.button && {\n text: slice.card.button.text,\n onClick: handleCardButtonClick,\n }\n }\n facts={slice.card.facts}\n image={\n <Image\n src={strapiMediaUrl(slice.card.image.img, 'medium')}\n alt={slice.card.image.alt}\n fill\n style={{ objectFit: slice.card.image.objectFit || 'cover' }}\n />\n }\n portfolioNumber={slice.card.portfolioNumber}\n />\n )}\n </GridItem>\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { LeftTextRightCard } from './LeftTextRightCard';\n\nexport default LeftTextRightCard;\n", "import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n Flex,\n Heading,\n RichText,\n SimpleGrid,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { ArrowRightIcon } from '@phosphor-icons/react';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImageWithLink from '../../models/strapi/StrapiImageWithLink';\nimport StrapiLink from '../../models/strapi/StrapiLink';\n\nexport interface LogoGridWithTextProps {\n slice: {\n title: string;\n text: string;\n button?: StrapiLink;\n logos: StrapiImageWithLink[];\n };\n}\n\nexport const LogoGridWithText: React.FC<LogoGridWithTextProps> = ({\n slice,\n}: LogoGridWithTextProps) => {\n const [primary50] = useToken('colors', ['primary.50']);\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n <Wrapper>\n <SimpleGrid columns={2} gap=\"28\" minChildWidth=\"16rem\">\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n justifyContent=\"center\"\n alignItems=\"flex-start\"\n >\n <Heading as=\"h2\" size=\"3xl\" mb=\"4\">\n {slice.title}\n </Heading>\n <RichText content={slice.text} />\n {slice.button && (\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n colorPalette=\"white\"\n variant=\"outline\"\n mt=\"6\"\n rightIcon={<ArrowRightIcon />}\n component=\"LogoGridWithText\"\n />\n )}\n </Box>\n <Flex flexDir=\"row\" flexWrap=\"wrap\" gap={['12', null, null, '28']}>\n {slice.logos.map((logo) => (\n <Flex\n key={logo.id}\n justifyContent=\"center\"\n alignItems=\"center\"\n flexGrow={1}\n flexShrink={0}\n flexBasis={slice.logos.length > 2 ? '34%' : '90%'} // 34% are just enough to not allow three in one row\n >\n <Box position=\"relative\" height=\"20\" width=\"100%\">\n {logo.link ? (\n <a href={strapiLinkUrl(logo.link)}>\n <Image\n src={strapiMediaUrl(logo.img, 'small')}\n alt={logo.alt}\n fill\n style={{ objectFit: logo.objectFit || 'contain' }}\n />\n </a>\n ) : (\n <Image\n src={strapiMediaUrl(logo.img, 'small')}\n alt={logo.alt}\n fill\n style={{ objectFit: logo.objectFit || 'contain' }}\n />\n )}\n </Box>\n </Flex>\n ))}\n </Flex>\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { LogoGridWithText } from './LogoGridWithText';\n\nexport default LogoGridWithText;\n", "import React from 'react';\nimport { DefaultSectionHeader, Flex, useMediaQuery, Wrapper } from 'boemly';\nimport Image from 'next/image';\nimport { BREAKPOINT_LG_QUERY } from '../../constants/breakpoints';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport {\n MapHeroContainer,\n MapHeroTextContainer,\n ShapeContainer,\n MapContainer,\n MapGradient,\n} from './styles';\n\nexport interface MapHeroProps {\n slice: {\n tagline?: string;\n title: string;\n subTitle?: string;\n buttons?: StrapiLink[];\n shape?: StrapiImage;\n map: StrapiImage;\n mobileMap: StrapiImage;\n };\n}\n\nexport const MapHero: React.FC<MapHeroProps> = ({ slice }: MapHeroProps) => {\n const [belowBreakpoint] = useMediaQuery([BREAKPOINT_LG_QUERY]);\n\n return (\n <MapHeroContainer maxWidth=\"full\">\n {slice.shape && (\n <ShapeContainer>\n <Image\n src={strapiMediaUrl(slice.shape.img, 'medium')}\n alt={slice.shape.alt}\n fill\n style={{ objectFit: slice.shape.objectFit || 'cover' }}\n />\n </ShapeContainer>\n )}\n <MapHeroTextContainer>\n <Wrapper>\n <>\n <DefaultSectionHeader\n isHero\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n titleProps={{ maxW: ['100%', null, null, null, '60%'] }}\n textProps={{ maxW: ['100%', null, null, null, '55%'] }}\n />\n {slice.buttons && slice.buttons.length > 0 && (\n <Flex mt=\"10\" flexDir=\"row\" gap=\"5\">\n <StrapiLinkButton\n link={slice.buttons[0]}\n size=\"xl\"\n component=\"MapHero\"\n />\n {slice.buttons.length === 2 && (\n <StrapiLinkButton\n link={slice.buttons[1]}\n variant=\"outline\"\n size=\"xl\"\n component=\"MapHero\"\n />\n )}\n </Flex>\n )}\n </>\n </Wrapper>\n </MapHeroTextContainer>\n <MapContainer>\n {belowBreakpoint ? (\n <Image\n src={strapiMediaUrl(slice.mobileMap.img, 'xLarge')}\n alt={slice.mobileMap.alt}\n fill\n style={{ objectFit: slice.mobileMap.objectFit || 'contain' }}\n />\n ) : (\n <Image\n src={strapiMediaUrl(slice.map.img, 'xLarge')}\n alt={slice.map.alt}\n fill\n style={{ objectFit: slice.map.objectFit || 'cover' }}\n />\n )}\n <MapGradient />\n </MapContainer>\n </MapHeroContainer>\n );\n};\n", "import styled from '@emotion/styled';\nimport { BREAKPOINT_LG } from '../../constants/breakpoints';\nimport { Box } from 'boemly';\n\nexport const MapHeroContainer = styled(Box)`\n position: relative;\n width: 100vw;\n height: var(--default-hero-height);\n min-height: var(--boemly-sizes-3xl);\n background-color: var(--boemly-colors-primary-50);\n overflow: hidden;\n z-index: var(--boemly-zIndices-base);\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n height: auto;\n }\n`;\n\nexport const MapHeroTextContainer = styled(Box)`\n position: absolute;\n width: 100vw;\n top: 56%;\n left: 0;\n transform: translateY(-50%);\n z-index: var(--boemly-zIndices-aboveBase);\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n position: relative;\n transform: unset;\n z-index: 10;\n\n padding-top: var(--boemly-spacing-32);\n }\n`;\n\nexport const ShapeContainer = styled(Box)`\n position: absolute;\n bottom: calc(var(--boemly-spacing-8) * -1);\n left: 0;\n\n width: var(--boemly-sizes-sm);\n height: var(--boemly-sizes-sm);\n\n border-top-right-radius: var(--boemly-radii-full);\n\n & span,\n div {\n border-top-right-radius: var(--boemly-radii-full);\n }\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n display: none;\n }\n`;\n\nexport const MapContainer = styled(Box)`\n position: absolute;\n\n width: 50%;\n height: 100%;\n\n right: 0;\n top: 0;\n\n & img {\n object-fit: cover !important;\n }\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n width: 100%;\n height: var(--boemly-sizes-4xl);\n position: relative;\n margin-top: calc(var(--boemly-spacing-72) * -1);\n background-color: var(--boemly-colors-white);\n z-index: 1;\n\n & img {\n object-fit: contain !important;\n }\n }\n`;\n\nexport const MapGradient = styled(Box)`\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n z-index: var(--boemly-zIndices-base);\n\n background: linear-gradient(\n 90deg,\n var(--boemly-colors-primary-50) 0%,\n var(--boemly-colors-primary-50) 10%,\n rgba(243, 246, 245, 0.6) 28%,\n rgba(243, 246, 245, 0) 40%,\n rgba(243, 246, 245, 0) 100%\n );\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n background: linear-gradient(\n 180deg,\n var(--boemly-colors-primary-50) 0%,\n var(--boemly-colors-primary-50) 36%,\n rgba(243, 246, 245, 0.12) 46%,\n rgba(243, 246, 245, 0) 100%\n );\n }\n`;\n", "import { MapHero } from './MapHero';\n\nexport default MapHero;\n", "import React, { useContext } from 'react';\nimport {\n Box,\n Heading,\n HeroCard,\n SimpleGrid,\n Text,\n BoemlyAccordion,\n Wrapper,\n Flex,\n Spacer,\n} from 'boemly';\nimport { ArrowRightIcon } from '@phosphor-icons/react';\nimport { useRouter } from 'next/router';\nimport Image from 'next/image';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiHeroCard from '../../models/strapi/StrapiHeroCard';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport convertToKebabCase from '../../utils/convertToKebabCase';\nimport { AnalyticsContext } from '../../components/ContextProvider/ContextProvider';\n\nconst VARIANTS = {\n gray: {\n backgroundColor: 'primary.50',\n tagLineColor: 'primary.500',\n textColor: 'black',\n accordionVariant: 'black',\n otherQuestionsBackground: 'primary.700',\n },\n green: {\n backgroundColor: 'primary.800',\n tagLineColor: 'white',\n textColor: 'white',\n accordionVariant: 'white',\n otherQuestionsBackground: 'primary.900',\n },\n white: {\n backgroundColor: 'white',\n tagLineColor: 'primary.500',\n textColor: 'black',\n accordionVariant: 'black',\n otherQuestionsBackground: 'primary.700',\n },\n};\n\nexport interface QAndAProps {\n slice: {\n tagline: string;\n title: string;\n questionsAndAnswers: {\n id: number;\n key: string;\n value: string;\n }[];\n otherQuestions: string;\n button: StrapiLink;\n hero?: StrapiHeroCard;\n variant?: keyof typeof VARIANTS;\n defaultIndex: number[];\n };\n}\n\nexport const QAndA: React.FC<QAndAProps> = ({ slice }: QAndAProps) => {\n const { push } = useRouter();\n const analyticsFunction = useContext(AnalyticsContext);\n\n const handleHeroButtonClick = () => {\n if (slice.hero?.button) {\n analyticsFunction?.({\n type: 'track',\n props: {\n action: 'click',\n component: 'QAndA',\n buttonText: slice.hero.button.text,\n buttonUrl: strapiLinkUrl(slice.hero.button),\n section: 'hero',\n },\n });\n push(strapiLinkUrl(slice.hero.button));\n }\n };\n\n const variant = VARIANTS[slice.variant ?? 'green'];\n\n return (\n <>\n <Box\n pb={slice.hero ? 80 : 28}\n id={convertToKebabCase(slice.title)}\n backgroundColor={variant.backgroundColor}\n >\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2]}>\n <Box mr=\"16\" paddingY=\"28\">\n <Text size=\"mdMonoUppercase\" color={variant.tagLineColor}>\n {slice.tagline}\n </Text>\n <Heading\n as=\"h2\"\n size=\"3xl\"\n color={variant.textColor}\n mt=\"6\"\n mb=\"16\"\n >\n {slice.title}\n </Heading>\n </Box>\n <Box\n maxHeight={['unset', null, null, 'xl']}\n paddingTop={['0', null, null, '28']}\n paddingRight={['0', null, null, '6']}\n overflowY={['unset', null, null, 'scroll']}\n >\n <Box>\n <BoemlyAccordion\n rows={slice.questionsAndAnswers}\n defaultIndex={slice.defaultIndex}\n variant={variant.accordionVariant as 'white' | 'black'}\n />\n <Flex\n padding=\"8\"\n backgroundColor={variant.otherQuestionsBackground}\n borderRadius=\"2xl\"\n mt=\"14\"\n flexDir={['column', null, null, 'row']}\n justifyContent={['flex-start', null, null, 'space-between']}\n alignItems={['flex-start', null, null, 'center']}\n >\n <Heading as=\"h6\" size=\"sm\" color=\"white\">\n {slice.otherQuestions}\n </Heading>\n <Spacer minHeight={['4', null, null, '0']} />\n <StrapiLinkButton\n size=\"lg\"\n colorPalette=\"white\"\n background=\"white\"\n rightIcon={<ArrowRightIcon />}\n link={slice.button}\n component=\"QAndA\"\n />\n </Flex>\n </Box>\n </Box>\n </SimpleGrid>\n </Wrapper>\n </Box>\n\n {slice.hero && (\n <Box pb=\"28\" mt=\"-56\">\n <Wrapper>\n <HeroCard\n title={slice.hero.title}\n subTitle={slice.hero.subTitle}\n link={\n slice.hero.button && {\n text: slice.hero.button.text,\n onClick: handleHeroButtonClick,\n }\n }\n image={\n slice.hero.image && (\n <Image\n src={strapiMediaUrl(slice.hero.image.img, 'xLarge')}\n alt={slice.hero.image.alt}\n fill\n style={{ objectFit: slice.hero.image.objectFit || 'cover' }}\n />\n )\n }\n />\n </Wrapper>\n </Box>\n )}\n </>\n );\n};\n", "const convertToKebabCase = (str: string) => {\n const matches =\n str &&\n str.match(\n /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g\n );\n return matches ? matches.map((x: string) => x.toLowerCase()).join('-') : '';\n};\n\nexport default convertToKebabCase;\n", "import { QAndA } from './QAndA';\n\nexport default QAndA;\n", "import React, { useContext } from 'react';\nimport Image from 'next/image';\nimport {\n Box,\n DefaultSectionHeader,\n HeroCard,\n QuoteCard,\n Shape,\n SimpleGrid,\n Wrapper,\n} from 'boemly';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiQuoteCard from '../../models/strapi/StrapiQuoteCard';\nimport StrapiHeroCard from '../../models/strapi/StrapiHeroCard';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport convertToKebabCase from '../../utils/convertToKebabCase';\nimport { useRouter } from 'next/router';\nimport { AnalyticsContext } from '../../components/ContextProvider/ContextProvider';\n\ninterface QuoteCardsSlice extends StrapiDefaultHeader {\n cards: StrapiQuoteCard[];\n shapes?: StrapiImage[];\n hero?: StrapiHeroCard;\n}\nexport interface QuoteCardsProps {\n slice: QuoteCardsSlice;\n}\n\nexport const QuoteCards: React.FC<QuoteCardsProps> = ({\n slice,\n}: QuoteCardsProps) => {\n const { push } = useRouter();\n const analyticsFunction = useContext(AnalyticsContext);\n\n const handleHeroCardButtonClick = () => {\n if (slice.hero?.button) {\n analyticsFunction?.({\n type: 'track',\n props: {\n action: 'click',\n component: 'QuoteCards',\n buttonText: slice.hero.button.text,\n buttonUrl: strapiLinkUrl(slice.hero.button),\n section: 'hero',\n },\n });\n push(strapiLinkUrl(slice.hero.button));\n }\n };\n\n return (\n <>\n <Box\n id={convertToKebabCase(slice.title)}\n position=\"relative\"\n paddingTop=\"28\"\n paddingBottom={!!slice.hero ? '80' : '28'}\n >\n {slice.shapes && slice.shapes.length === 2 && (\n <>\n <Shape\n shape={\n <Image\n src={strapiMediaUrl(slice.shapes[0].img, 'small')}\n alt={slice.shapes[0].alt}\n fill\n style={{ objectFit: slice.shapes[0].objectFit || 'cover' }}\n />\n }\n top=\"0\"\n right=\"0\"\n size=\"xs\"\n radius=\"bottom-left\"\n />\n <Shape\n shape={\n <Image\n src={strapiMediaUrl(slice.shapes[1].img, 'small')}\n alt={slice.shapes[1].alt}\n fill\n style={{ objectFit: slice.shapes[1].objectFit || 'cover' }}\n />\n }\n bottom=\"0\"\n left=\"0\"\n radius=\"top-right\"\n />\n </>\n )}\n <Wrapper>\n <Box maxW=\"3xl\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n </Box>\n <SimpleGrid\n columns={2}\n gap=\"20\"\n rowGap=\"6\"\n mt=\"16\"\n minChildWidth={['100%', null, '16rem']}\n >\n {slice.cards.map((card) => (\n <Box key={card.id} width=\"full\" maxWidth=\"2xl\">\n <QuoteCard\n key={card.id}\n avatar={{\n name: card.avatar.name,\n description: card.avatar.description,\n imageSrc: strapiMediaUrl(card.avatar.image.img, 'small'),\n imageAlt: card.avatar.image.alt,\n imageObjectFit: card.avatar.image.objectFit || 'cover',\n }}\n text={card.text}\n />\n </Box>\n ))}\n </SimpleGrid>\n </Wrapper>\n </Box>\n {slice.hero && (\n <Box marginTop=\"-40\" paddingBottom=\"28\">\n <Wrapper>\n <HeroCard\n title={slice.hero.title}\n subTitle={slice.hero.subTitle}\n link={\n slice.hero.button && {\n text: slice.hero.button.text,\n onClick: handleHeroCardButtonClick,\n }\n }\n image={\n slice.hero.image && (\n <Image\n src={strapiMediaUrl(slice.hero.image.img, 'xLarge')}\n alt={slice.hero.image.alt}\n fill\n style={{ objectFit: slice.hero.image.objectFit || 'cover' }}\n />\n )\n }\n />\n </Wrapper>\n </Box>\n )}\n </>\n );\n};\n", "import { QuoteCards } from './QuoteCards';\n\nexport default QuoteCards;\n", "import React from 'react';\nimport {\n DefaultSectionContainer,\n Grid,\n GridItem,\n RichText,\n Wrapper,\n} from 'boemly';\n\nexport interface RichTextSectionProps {\n slice: {\n content: string;\n };\n}\n\nexport const RichTextSection: React.FC<RichTextSectionProps> = ({\n slice,\n}: RichTextSectionProps) => (\n <DefaultSectionContainer>\n <Wrapper>\n <Grid templateColumns=\"repeat(12, 1fr)\" gap=\"4\">\n <GridItem colSpan={[12, null, null, 7]}>\n <RichText content={slice.content} />\n </GridItem>\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n);\n", "import { RichTextSection } from './RichTextSection';\n\nexport default RichTextSection;\n", "import React, {\n createRef,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport {\n Box,\n Center,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Gradient,\n Heading,\n RichText,\n ShapesCard,\n Text,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { useWindowScroll, useWindowSize } from '@reactuses/core';\nimport { useRouter } from 'next/router';\nimport StrapiShapesCard from '../../models/strapi/StrapiShapesCard';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport { AnalyticsContext } from '../../components/ContextProvider/ContextProvider';\n\ninterface StepsSlice extends StrapiDefaultHeader {\n steps: {\n id: number;\n step: number;\n title: string;\n text?: string;\n }[];\n image?: StrapiImage;\n card?: StrapiShapesCard;\n}\nexport interface StepsProps {\n slice: StepsSlice;\n}\n\nexport const Steps: React.FC<StepsProps> = ({ slice }: StepsProps) => {\n const { push } = useRouter();\n const analyticsFunction = useContext(AnalyticsContext);\n\n const [gray900] = useToken('colors', ['gray.900']);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [stepRefs, setStepRefs] = useState(new Array(slice.steps.length));\n const [stepProgress, setStepProgress] = useState(\n new Array(slice.steps.length)\n );\n\n const { y: offsetY } = useWindowScroll();\n const { height: windowHeight } = useWindowSize();\n\n const handleShapesCardButtonClick = () => {\n if (slice.card?.button) {\n analyticsFunction?.({\n type: 'track',\n props: {\n action: 'click',\n component: 'Steps',\n buttonText: slice.card.button.text,\n buttonUrl: strapiLinkUrl(slice.card.button),\n section: 'card',\n },\n });\n push(strapiLinkUrl(slice.card.button));\n }\n };\n useEffect(() => {\n setStepRefs(slice.steps.map(() => createRef()));\n }, []);\n\n useEffect(() => {\n const containerOffsetTop = containerRef.current?.offsetTop || 0;\n setStepProgress(\n stepRefs.map((ref) => {\n const currentItemOffsetTop = ref.current?.offsetTop || 0;\n return containerOffsetTop + currentItemOffsetTop <\n offsetY + windowHeight / 3\n ? 100\n : 0;\n })\n );\n }, [offsetY, windowHeight, stepRefs]);\n\n return (\n <div ref={containerRef}>\n <DefaultSectionContainer backgroundColor={gray900} title={slice.title}>\n <>\n {slice.image && (\n <Box\n position=\"absolute\"\n top=\"0\"\n left=\"0\"\n width=\"full\"\n height=\"full\"\n >\n <Image\n src={strapiMediaUrl(slice.image.img, 'xLarge')}\n alt={slice.image.alt}\n fill\n style={{ objectFit: slice.image.objectFit || 'cover' }}\n />\n <Gradient />\n </Box>\n )}\n </>\n <Wrapper>\n <>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center' }}\n titleProps={{\n textAlign: 'center',\n maxW: '2xl',\n marginX: 'auto',\n color: 'white',\n }}\n textProps={{\n textAlign: 'center',\n maxW: 'xl',\n marginX: 'auto',\n color: 'whiteAlpha.800',\n }}\n />\n\n <Box marginTop={['16', null, '24']}>\n {slice.steps.map(({ id, step, title, text }, index) => (\n <Flex flexDir=\"column\" alignItems=\"center\" key={id}>\n <Center\n width=\"10\"\n height=\"10\"\n borderRadius=\"full\"\n backgroundColor=\"white\"\n >\n <Text size=\"smRegularNormal\" color=\"black\">\n {step}\n </Text>\n </Center>\n <Heading size=\"lg\" color=\"white\" mt=\"4\" textAlign=\"center\">\n {title}\n </Heading>\n {text && (\n <Box maxW=\"xl\" mt=\"4\">\n <RichText\n options={{ forceBlock: true }}\n content={text}\n textProps={{\n fontSize: 'mdRegularNormal',\n color: 'whiteAlpha.700',\n textAlign: 'center',\n }}\n />\n </Box>\n )}\n {(index + 1 < slice.steps.length || slice.card) && (\n <Box\n ref={stepRefs[index]}\n position=\"relative\"\n marginTop=\"4\"\n marginBottom=\"6\"\n height=\"12\"\n >\n <Box\n position=\"absolute\"\n height=\"full\"\n borderLeft=\"dashed 1px white\"\n opacity=\"0.5\"\n />\n <Box\n position=\"absolute\"\n height={`${stepProgress[index]}%`}\n borderRight=\"solid 1px white\"\n opacity=\"1\"\n transition=\"height ease var(--medium-transition-duration)\"\n />\n </Box>\n )}\n </Flex>\n ))}\n </Box>\n\n {slice.card && (\n <ShapesCard\n tagline={slice.card.tagline}\n title={slice.card.title}\n text={slice.card.text}\n shapes={\n slice.card.shapes &&\n slice.card.shapes?.map((shape) => (\n <Image\n key={shape.id}\n src={strapiMediaUrl(shape.img, 'small')}\n alt={shape.alt}\n fill\n style={{ objectFit: shape.objectFit || 'cover' }}\n />\n ))\n }\n button={\n slice.card.button && {\n text: slice.card.button.text,\n onClick: handleShapesCardButtonClick,\n }\n }\n />\n )}\n </>\n </Wrapper>\n </DefaultSectionContainer>\n </div>\n );\n};\n", "import { Steps } from './Steps';\n\nexport default Steps;\n", "import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n RichText,\n SimpleGrid,\n Text,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { CaretRightIcon } from '@phosphor-icons/react';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\ninterface TextCardGridSlice extends StrapiDefaultHeader {\n variant: 'shape' | 'image';\n cards: {\n id: number;\n tagline?: string;\n title: string;\n text: string;\n image: StrapiImage;\n buttons?: StrapiLink[];\n }[];\n}\nexport interface TextCardGridProps {\n slice: TextCardGridSlice;\n}\n\nenum ShapePosition {\n topLeft = 'top-left',\n topRight = 'top-right',\n bottomLeft = 'bottom-left',\n bottomRight = 'bottom-right',\n unset = 'unset',\n}\n\nconst shapePositions: ShapePosition[] = [\n ShapePosition.topLeft,\n ShapePosition.bottomRight,\n ShapePosition.topRight,\n ShapePosition.bottomLeft,\n ShapePosition.topRight,\n ShapePosition.bottomLeft,\n ShapePosition.topLeft,\n ShapePosition.bottomRight,\n];\n\nconst oppositesOfCorners = {\n [ShapePosition.bottomLeft]: ShapePosition.topRight,\n [ShapePosition.topRight]: ShapePosition.bottomLeft,\n [ShapePosition.bottomRight]: ShapePosition.topLeft,\n [ShapePosition.topLeft]: ShapePosition.bottomRight,\n [ShapePosition.unset]: ShapePosition.unset,\n};\n\ntype Variant = {\n padding: (string | null)[];\n positionIcon: (index: number) => ShapePosition;\n width: string;\n height: string;\n position: 'absolute' | 'relative';\n mb: string;\n};\n\nconst variants: { shape: Variant; image: Variant } = {\n shape: {\n padding: ['6', null, null, '8'],\n positionIcon: (index: number) =>\n shapePositions[index % shapePositions.length],\n width: '40',\n height: '40',\n position: 'absolute',\n mb: 'unset',\n },\n image: {\n padding: ['6', null, null, '8'],\n positionIcon: () => ShapePosition.unset,\n width: '24',\n height: '24',\n position: 'relative',\n mb: '10',\n },\n};\n\nexport const TextCardGrid: React.FC<TextCardGridProps> = ({\n slice,\n}: TextCardGridProps) => {\n const [primary800] = useToken('colors', ['primary.800']);\n\n return (\n <DefaultSectionContainer backgroundColor={primary800} title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center', color: 'white' }}\n titleProps={{\n textAlign: 'center',\n maxW: '2xl',\n marginX: 'auto',\n color: 'white',\n }}\n textProps={{\n textAlign: 'center',\n maxW: 'xl',\n marginX: 'auto',\n color: 'whiteAlpha.800',\n }}\n />\n\n <SimpleGrid\n mt={['14', null, null, '24']}\n columns={3}\n justifyItems=\"center\"\n gap=\"20\"\n rowGap=\"16\"\n minChildWidth={['100%', null, '16rem']}\n >\n {slice.cards.map(\n ({ id, tagline, title, text, image, buttons }, index) => (\n <Box\n key={id}\n backgroundColor=\"white\"\n zIndex=\"base\"\n padding={variants[slice.variant].padding}\n boxShadow=\"lg\"\n borderRadius=\"2xl\"\n minHeight=\"2xs\"\n width=\"full\"\n maxWidth={slice.cards.length > 1 ? 'unset' : 'xl'}\n position=\"relative\"\n display=\"flex\"\n flexDir=\"column\"\n alignItems=\"flex-start\"\n justifyContent={\n slice.variant === 'shape' ? 'flex-end' : 'flex-start'\n }\n overflow=\"hidden\"\n >\n <Box\n position={variants[slice.variant].position}\n width={variants[slice.variant].width}\n height={variants[slice.variant].height}\n mb={variants[slice.variant].mb}\n top={\n variants[slice.variant].positionIcon(index).includes('top')\n ? '-4'\n : 'unset'\n }\n left={\n variants[slice.variant].positionIcon(index).includes('left')\n ? '-4'\n : 'unset'\n }\n right={\n variants[slice.variant]\n .positionIcon(index)\n .includes('right')\n ? '-4'\n : 'unset'\n }\n bottom={\n variants[slice.variant]\n .positionIcon(index)\n .includes('bottom')\n ? '-4'\n : 'unset'\n }\n borderBottomRightRadius={\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ].includes('bottomRight')\n ? 'full'\n : 'unset'\n }\n borderBottomLeftRadius={\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ].includes('bottomLeft')\n ? 'full'\n : 'unset'\n }\n borderTopRightRadius={\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ].includes('topRight')\n ? 'full'\n : 'unset'\n }\n borderTopLeftRadius={\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ].includes('topLeft')\n ? 'full'\n : 'unset'\n }\n css={{\n '& span, div, img': {\n borderRadius: variants[slice.variant]\n .positionIcon(index)\n .includes('unset')\n ? 'var(--boemly-radii-xl)'\n : undefined,\n [`border${oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ]\n .split('-')\n .map(\n (word) => word.charAt(0).toUpperCase() + word.slice(1)\n )\n .join('')}Radius`]: !variants[slice.variant]\n .positionIcon(index)\n .includes('unset')\n ? 'var(--boemly-radii-full)'\n : undefined,\n },\n }}\n >\n <Image\n src={strapiMediaUrl(image.img, 'small')}\n alt={image.alt}\n fill\n style={{ objectFit: image.objectFit || 'cover' }}\n />\n </Box>\n <Box zIndex=\"aboveBase\" width=\"full\">\n {tagline && (\n <Text color=\"black\" size=\"smMonoNormal\" mb=\"2\">\n {tagline}\n </Text>\n )}\n <Heading as=\"h4\" size=\"xl\" mb=\"3\">\n {title}\n </Heading>\n <RichText\n content={text}\n listProps={{\n textColor: 'gray.500',\n textSize: 'smRegularNormal',\n }}\n textProps={{\n color: 'gray.500',\n fontSize: 'smRegularNormal',\n }}\n />\n {buttons && !!buttons.length && (\n <Flex\n mt=\"4\"\n gap=\"3\"\n flexDir={['column', null, null, null, 'row']}\n >\n {buttons.map((button, buttonIndex) => (\n <StrapiLinkButton\n key={button.id}\n link={button}\n size=\"sm\"\n rightIcon={\n buttonIndex === 0 ? (\n <CaretRightIcon size=\"10\" weight=\"bold\" />\n ) : undefined\n }\n variant={buttonIndex === 0 ? 'outline' : 'ghost'}\n component=\"TextCardGrid\"\n />\n ))}\n </Flex>\n )}\n </Box>\n </Box>\n )\n )}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { TextCardGrid } from './TextCardGrid';\n\nexport default TextCardGrid;\n", "import React, { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Box,\n Center,\n DefaultSectionContainer,\n DefaultSectionHeader,\n IconButton,\n TextCardWithIcon,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiTextCardWithIcon from '../../models/strapi/StrapiTextCardWithIcons';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport {\n CardContainer,\n CarouselContainer,\n CarouselInnerContainer,\n} from './styles';\nimport { useMeasure, useWindowSize } from '@reactuses/core';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { ArrowLeftIcon, ArrowRightIcon } from '@phosphor-icons/react';\nimport { IntlContext } from '../../components/ContextProvider';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport { useRouter } from 'next/router';\nimport shuffleElements from '../../utils/shuffleElements';\nimport { AnalyticsContext } from '../../components/ContextProvider/ContextProvider';\n\ninterface TextCarouselSlice extends StrapiDefaultHeader {\n slides: StrapiTextCardWithIcon[];\n button?: StrapiLink;\n isShuffled?: boolean;\n}\nexport interface TextCarouselProps {\n slice: TextCarouselSlice;\n}\n\nconst ITEM_GAP = 24;\nconst MAX_OFFSET_RIGHT = 55;\n\nexport const TextCarousel: React.FC<TextCarouselProps> = ({\n slice,\n}: TextCarouselProps) => {\n const containerRef = useRef(null);\n const [primary50] = useToken('colors', ['primary.50']);\n const itemRef = useRef<HTMLDivElement>(null);\n const [rect] = useMeasure(itemRef);\n const itemWidth = rect.width;\n const { formatMessage } = useContext(IntlContext);\n const analyticsFunction = useContext(AnalyticsContext);\n const { width: windowWidth } = useWindowSize();\n const { push } = useRouter();\n\n const [displaySlides, setDisplaySlides] = useState(slice.slides);\n const [sliderIndex, setSliderIndex] = useState(0);\n\n const numberOfItems = useMemo(\n () => slice.slides.length,\n [slice.slides.length]\n );\n\n const sliderItemsWidth = useMemo(\n () => numberOfItems * (itemWidth + ITEM_GAP) - ITEM_GAP,\n [itemWidth, numberOfItems]\n );\n\n const offsetLeft = useMemo(\n () => sliderIndex * (itemWidth + ITEM_GAP) * -1,\n [sliderIndex, itemWidth]\n );\n\n const allowScroll = useMemo(\n () => sliderItemsWidth + ITEM_GAP * 2 > windowWidth,\n\n [sliderItemsWidth, windowWidth]\n );\n\n const canMoveRight = useMemo(() => {\n const offsetRight = windowWidth - (sliderItemsWidth + offsetLeft);\n\n return offsetRight < MAX_OFFSET_RIGHT;\n }, [itemWidth, sliderIndex, sliderItemsWidth, windowWidth]);\n\n const canMoveLeft = useMemo(() => sliderIndex !== 0, [sliderIndex]);\n\n const handleSlidesButtonClick = (button?: StrapiLink) => {\n if (button) {\n analyticsFunction?.({\n type: 'track',\n props: {\n action: 'click',\n component: 'TextCarousel',\n buttonText: button.text,\n buttonUrl: strapiLinkUrl(button),\n section: 'slides',\n },\n });\n push(strapiLinkUrl(button));\n }\n };\n\n const { slides, isShuffled = false } = slice;\n\n useEffect(() => {\n if (isShuffled) {\n setDisplaySlides(shuffleElements(slides));\n }\n }, [slides, isShuffled]);\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center' }}\n titleProps={{ textAlign: 'center', maxW: '6xl', marginX: 'auto' }}\n textProps={{ textAlign: 'center', maxW: '2xl', marginX: 'auto' }}\n />\n </Wrapper>\n\n <CarouselContainer ref={containerRef}>\n <Box position=\"relative\" width=\"full\">\n <Wrapper>\n <CarouselInnerContainer\n numberOfItems={slice.slides.length}\n animate={{\n x: offsetLeft,\n }}\n transition={{\n duration: 0.3,\n ease: 'easeInOut',\n }}\n >\n {displaySlides.map(({ id, title, text, icon, image, button }) => (\n <CardContainer key={id} ref={itemRef}>\n <TextCardWithIcon\n title={title}\n text={text}\n height=\"full\"\n icon={\n <Image\n src={strapiMediaUrl(icon.img, 'small')}\n alt={icon.alt}\n fill\n style={{ objectFit: icon.objectFit || 'contain' }}\n />\n }\n image={\n image && (\n <Image\n src={strapiMediaUrl(image?.img, 'medium')}\n alt={image?.alt}\n fill\n style={{\n objectFit: image?.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n )\n }\n button={\n button && {\n text: button.text,\n onClick: () => handleSlidesButtonClick(button),\n }\n }\n displayAs=\"column\"\n />\n </CardContainer>\n ))}\n </CarouselInnerContainer>\n </Wrapper>\n <Box\n display={['none', null, null, !!allowScroll ? 'flex' : 'none']}\n pointerEvents=\"none\"\n position=\"absolute\"\n top=\"40%\"\n left=\"0\"\n width=\"full\"\n py=\"0\"\n px=\"32\"\n justifyContent=\"space-between\"\n >\n <Box>\n <AnimatePresence>\n {canMoveLeft && (\n <motion.div\n key=\"leftButton\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n >\n <IconButton\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex - 1)}\n aria-label={formatMessage({\n id: 'sections.textCarousel.moveLeft',\n })}\n pointerEvents=\"auto\"\n boxShadow=\"md\"\n >\n <ArrowLeftIcon size={16} />\n </IconButton>\n </motion.div>\n )}\n </AnimatePresence>\n </Box>\n <Box>\n <AnimatePresence>\n {canMoveRight && (\n <motion.div\n key=\"rightButton\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n >\n <IconButton\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex + 1)}\n aria-label={formatMessage({\n id: 'sections.textCarousel.moveRight',\n })}\n pointerEvents=\"auto\"\n boxShadow=\"md\"\n >\n <ArrowRightIcon size={16} />\n </IconButton>\n </motion.div>\n )}\n </AnimatePresence>\n </Box>\n </Box>\n </Box>\n </CarouselContainer>\n\n <>\n {slice.button && (\n <Wrapper>\n <Center>\n <StrapiLinkButton\n link={slice.button}\n size=\"xl\"\n mt={['8', null, '14']}\n component=\"TextCarousel\"\n />\n </Center>\n </Wrapper>\n )}\n </>\n </DefaultSectionContainer>\n );\n};\n", "import { motion } from 'framer-motion';\nimport styled from '@emotion/styled';\nimport { BREAKPOINT_MD } from '../../constants/breakpoints';\nimport { Box } from 'boemly';\n\nexport const CarouselContainer = styled(Box)`\n margin-top: var(--boemly-spacing-6);\n padding: var(--boemly-spacing-8) 0;\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n margin-top: var(--boemly-spacing-4);\n width: var(--boemly-sizes-full);\n }\n\n width: var(--boemly-sizes-full);\n\n overflow-x: hidden;\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n overflow-x: scroll;\n }\n`;\n\ninterface CarouselInnerContainerProps {\n numberOfItems: number;\n}\nexport const CarouselInnerContainer = styled(\n motion.div\n)<CarouselInnerContainerProps>`\n display: flex;\n gap: var(--boemly-spacing-6);\n justify-content: center;\n\n width: calc(\n (var(--boemly-sizes-sm) + var(--boemly-spacing-6)) *\n ${({ numberOfItems }: CarouselInnerContainerProps) => numberOfItems} +\n var(--boemly-spacing-6)\n );\n min-width: var(--boemly-sizes-full);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n gap: var(--boemly-spacing-1);\n justify-content: flex-start;\n width: calc(\n (var(--boemly-sizes-2xs) + var(--boemly-spacing-4)) *\n ${({ numberOfItems }: CarouselInnerContainerProps) => numberOfItems} +\n var(--boemly-spacing-6)\n );\n }\n`;\n\nexport const CardContainer = styled(Box)`\n width: var(--boemly-sizes-sm);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n min-width: var(--boemly-sizes-sm);\n\n margin-right: var(--boemly-spacing-4);\n\n &:first-of-type {\n margin-left: var(--boemly-spacing-6);\n }\n }\n`;\n", "const shuffleElements = (slides: any[]) => {\n const slidesCopy = [...slides]; // Create a copy to avoid mutating the original array\n for (let i = slidesCopy.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [slidesCopy[i], slidesCopy[j]] = [slidesCopy[j], slidesCopy[i]];\n }\n return slidesCopy;\n};\n\nexport default shuffleElements;\n", "import { TextCarousel } from './TextCarousel';\n\nexport default TextCarousel;\n", "import React, { useContext } from 'react';\nimport {\n Box,\n ContactArea,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Grid,\n GridItem,\n TextCardWithIcon,\n useMediaQuery,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { useRouter } from 'next/router';\nimport { BREAKPOINT_LG_QUERY } from '../../constants/breakpoints';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiContactArea from '../../models/strapi/StrapiContactArea';\nimport StrapiTextCardWithIcon from '../../models/strapi/StrapiTextCardWithIcons';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport { AnalyticsContext } from '../../components/ContextProvider/ContextProvider';\n\ninterface TextWithTextCardsSlice extends StrapiDefaultHeader {\n cards: StrapiTextCardWithIcon[];\n contact?: StrapiContactArea;\n shape?: StrapiImage;\n}\nexport interface TextWithTextCardsProps {\n slice: TextWithTextCardsSlice;\n}\n\nexport const TextWithTextCards: React.FC<TextWithTextCardsProps> = ({\n slice,\n}: TextWithTextCardsProps) => {\n const { push } = useRouter();\n const analyticsFunction = useContext(AnalyticsContext);\n const [white] = useToken('colors', ['white']);\n const [belowBreakpoint] = useMediaQuery([BREAKPOINT_LG_QUERY]);\n\n const handleContactButtonClick = () => {\n if (slice.contact?.button) {\n analyticsFunction?.({\n type: 'track',\n props: {\n action: 'click',\n component: 'TextWithTextCards',\n buttonText: slice.contact.button.text,\n buttonUrl: strapiLinkUrl(slice.contact.button),\n section: 'contact',\n },\n });\n push(strapiLinkUrl(slice.contact.button));\n }\n };\n\n return (\n <DefaultSectionContainer backgroundColor={white} title={slice.title}>\n <>\n {slice.shape && (\n <Box\n position=\"absolute\"\n right={['-28', null, null, '-136']}\n top={['96', null, null, '-28']}\n width={['sm', null, null, '4xl']}\n height={['sm', null, null, '4xl']}\n borderBottomRightRadius=\"full\"\n >\n <Image\n src={strapiMediaUrl(slice.shape.img, 'medium')}\n alt={slice.shape.alt}\n fill\n style={{\n objectFit: slice.shape.objectFit || 'cover',\n borderBottomRightRadius: 'var(--boemly-radii-full)',\n }}\n />\n </Box>\n )}\n </>\n <Wrapper>\n <>\n <Grid\n templateColumns={[\n 'repeat(8, 1fr)',\n null,\n null,\n null,\n 'repeat(16, 1fr)',\n ]}\n templateRows={[\n 'repeat(2, auto)',\n null,\n null,\n null,\n 'repeat(1, auto)',\n ]}\n rowGap=\"12\"\n >\n <GridItem\n colSpan={[8, null, null, null, 9]}\n rowSpan={1}\n pr={['0', null, null, null, '32']}\n >\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n textProps={{ pr: ['0', null, null, null, '10'] }}\n />\n\n {slice.contact && !belowBreakpoint && (\n <ContactArea\n title={slice.contact.title}\n text={slice.contact.text}\n avatar={{\n name: slice.contact.avatar.name,\n description: slice.contact.avatar.description,\n imageSrc: strapiMediaUrl(\n slice.contact.avatar.image.img,\n 'small'\n ),\n imageAlt: slice.contact.avatar.image.alt,\n imageObjectFit:\n slice.contact.avatar.image.objectFit || 'cover',\n }}\n link={{\n text: slice.contact.button.text,\n onClick: handleContactButtonClick,\n }}\n />\n )}\n </GridItem>\n <GridItem\n colSpan={[8, null, null, null, 7]}\n rowSpan={1}\n position=\"relative\"\n >\n {slice.cards.map((card) => (\n <TextCardWithIcon\n key={card.id}\n title={card.title}\n text={card.text}\n icon={\n <Image\n src={strapiMediaUrl(card.icon.img, 'small')}\n alt={card.icon.alt}\n fill\n style={{ objectFit: card.icon.objectFit || 'contain' }}\n />\n }\n />\n ))}\n </GridItem>\n </Grid>\n {slice.contact && belowBreakpoint && (\n <ContactArea\n title={slice.contact.title}\n text={slice.contact.text}\n avatar={{\n name: slice.contact.avatar.name,\n description: slice.contact.avatar.description,\n imageSrc: strapiMediaUrl(\n slice.contact.avatar.image.img,\n 'small'\n ),\n imageAlt: slice.contact.avatar.image.alt,\n imageObjectFit: slice.contact.avatar.image.objectFit || 'cover',\n }}\n link={{\n text: slice.contact.button.text,\n onClick: handleContactButtonClick,\n }}\n />\n )}\n </>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { TextWithTextCards } from './TextWithTextCards';\n\nexport default TextWithTextCards;\n", "import React from 'react';\nimport {\n DefaultSectionContainer,\n DefaultSectionHeader,\n Grid,\n GridItem,\n ProjectCard,\n Spacer,\n BoemlyList,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { ArrowRightIcon } from '@phosphor-icons/react';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiProjectCard from '../../models/strapi/StrapiProjectCard';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport StrapiProject from '../../models/strapi/StrapiProject';\nimport ProjectGridCard from '../../components/ProjectGridCard';\n\ninterface TextWithCardSlice {\n tagline?: string;\n title: string;\n text?: string;\n listItems?: {\n id: number;\n text: string;\n }[];\n button?: StrapiLink;\n card?: StrapiProjectCard;\n project?: { data?: IStrapiData<StrapiProject> };\n cardPosition: 'left' | 'right';\n}\nexport interface TextWithCardProps {\n slice: TextWithCardSlice;\n projects: PortfolioProject[];\n}\n\nexport const TextWithCard: React.FC<TextWithCardProps> = ({\n slice,\n projects,\n}: TextWithCardProps) => {\n const portfolioProject = projects.find(\n (p) =>\n slice.project?.data?.attributes.fpmProjectId &&\n p.id === slice.project.data.attributes.fpmProjectId\n );\n\n const card = (\n <GridItem\n colSpan={[4, null, null, null, 2]}\n rowSpan={1}\n position=\"relative\"\n data-testid={`card-position-${slice.cardPosition}`}\n >\n {portfolioProject && <ProjectGridCard project={portfolioProject} />}\n {!portfolioProject && slice.card && (\n <ProjectCard\n facts={slice.card.facts}\n footerSubTitle={slice.card.footerSubTitle}\n footerTitle={slice.card.footerTitle}\n title={slice.card.title}\n image={\n <Image\n src={strapiMediaUrl(slice.card.image.img, 'medium')}\n alt={slice.card.image.alt}\n fill\n style={{ objectFit: slice.card.image.objectFit || 'cover' }}\n />\n }\n />\n )}\n </GridItem>\n );\n\n return (\n <DefaultSectionContainer title={slice.title}>\n <Wrapper>\n <Grid\n templateColumns={[\n 'repeat(4, auto)',\n null,\n null,\n null,\n 'repeat(6, auto)',\n ]}\n templateRows={[\n 'repeat(2, auto)',\n null,\n null,\n null,\n 'repeat(1, auto)',\n ]}\n rowGap=\"12\"\n columnGap={['0', null, null, null, '28']}\n >\n {slice.cardPosition === 'left' && card}\n <GridItem colSpan={4} rowSpan={1} position=\"relative\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n\n {slice.listItems && (\n <>\n <Spacer height=\"10\" />\n <BoemlyList listItems={slice.listItems} />\n <Spacer height=\"10\" />\n </>\n )}\n\n {slice.button && (\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n colorPalette=\"white\"\n variant=\"outline\"\n rightIcon={<ArrowRightIcon />}\n component=\"TextWithCard\"\n />\n )}\n </GridItem>\n {slice.cardPosition === 'right' && card}\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { BoemlyTag, Box, Container, Flex, Heading, Text } from 'boemly';\nimport React, { useContext } from 'react';\nimport Image from 'next/image';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport { FORMAT_AS_HECTARE_CONFIG } from '../../constants/formatter';\nimport CreditsAvailableBadge from '../../components/CreditsAvailableBadge';\nimport { IntlContext } from '../ContextProvider';\n\nexport interface ProjectGridCardProps {\n project: PortfolioProject;\n}\n\nexport const ProjectGridCard = ({\n project,\n}: ProjectGridCardProps): React.JSX.Element => {\n const { formatNumber, formatMessage } = useContext(IntlContext);\n\n return (\n <Container height=\"full\">\n <Flex flexDir=\"column\" height=\"full\">\n {project.thumbnail && (\n <Box borderRadius=\"xl\" position=\"relative\" height=\"36\" mb=\"2\">\n <Image\n src={strapiMediaUrl(project.thumbnail?.img, 'medium')}\n alt={project.thumbnail?.alt}\n fill\n style={{\n objectFit: project.thumbnail?.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n )}\n <Heading my=\"4\" size=\"lg\">\n {project.friendlyName || project.title}\n </Heading>\n <Flex flexDir=\"row\" gap=\"2\" flexWrap=\"wrap\">\n <BoemlyTag backgroundColor=\"gray.100\">\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {formatNumber(\n (project.area || 0) / 10000,\n FORMAT_AS_HECTARE_CONFIG\n )}\n </Text>\n </BoemlyTag>\n <BoemlyTag backgroundColor=\"gray.100\">\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {project.location}\n </Text>\n </BoemlyTag>\n {project.certificationDate ? (\n <BoemlyTag backgroundColor=\"gray.100\">\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {formatMessage(\n { id: 'components.projectGridCard.certified' },\n { year: new Date(project.certificationDate).getFullYear() }\n )}\n </Text>\n </BoemlyTag>\n ) : (\n <BoemlyTag backgroundColor=\"gray.100\">\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {formatMessage({\n id: 'components.projectGridCard.certificationInProgress',\n })}\n </Text>\n </BoemlyTag>\n )}\n <CreditsAvailableBadge status={project.creditAvailability} />\n </Flex>\n </Flex>\n </Container>\n );\n};\n", "import { FormatNumberOptions } from 'react-intl';\n\nexport const FORMAT_AS_EUR_CONFIG: FormatNumberOptions = {\n style: 'currency',\n currency: 'EUR',\n};\n\nexport const FORMAT_AS_METER_CONFIG: FormatNumberOptions = {\n unit: 'meter',\n unitDisplay: 'short',\n style: 'unit',\n maximumFractionDigits: 0,\n};\n\nexport const FORMAT_AS_HECTARE_CONFIG: FormatNumberOptions = {\n unit: 'hectare',\n unitDisplay: 'short',\n style: 'unit',\n maximumFractionDigits: 2,\n};\n\nexport const FORMAT_AS_CUBIC_METERS_PER_HECTARE_CONFIG: FormatNumberOptions = {\n maximumFractionDigits: 0,\n};\n\nexport const FORMAT_AS_PERCENT_CONFIG: FormatNumberOptions = {\n style: 'percent',\n maximumFractionDigits: 2,\n};\n", "import React, { useContext } from 'react';\nimport { BoemlyTag, Flex, Text } from 'boemly';\nimport NextLink from 'next/link';\nimport { IntlContext } from '../ContextProvider';\nimport { CreditAvailability } from '../../models/fpm/FPMProject';\n\nexport interface CreditsAvailableBadgeProps {\n status: CreditAvailability;\n href?: string;\n}\n\nconst CreditsAvailableBadge = ({\n status,\n href,\n}: CreditsAvailableBadgeProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n const variants: Record<\n CreditAvailability,\n { message: string; color: string }\n > = {\n [CreditAvailability.CREDITS_AVAILABLE]: {\n message: formatMessage({\n id: 'components.creditsAvailableBadge.text.yes',\n }),\n color: 'primary.800',\n },\n [CreditAvailability.NO_CREDITS_AVAILABLE]: {\n message: formatMessage({\n id: 'components.creditsAvailableBadge.text.no',\n }),\n color: 'red.600',\n },\n [CreditAvailability.SOME_CREDITS_AVAILABLE]: {\n message: formatMessage({\n id: 'components.creditsAvailableBadge.text.some',\n }),\n color: 'orange.500',\n },\n [CreditAvailability.SOON_CREDITS_AVAILABLE]: {\n message: formatMessage({\n id: 'components.creditsAvailableBadge.text.notYet',\n }),\n color: 'blue.500',\n },\n };\n\n const variant = variants[status];\n\n const badge = (\n <BoemlyTag backgroundColor={variant.color}>\n <Text color=\"white\" size=\"xsLowBold\">\n {variant.message}\n </Text>\n </BoemlyTag>\n );\n\n return (\n <Flex justifyContent=\"flex-start\">\n {href ? <NextLink href={href}>{badge}</NextLink> : badge}\n </Flex>\n );\n};\n\nexport default CreditsAvailableBadge;\n", "import CreditsAvailableBadge from './CreditsAvailableBadge';\n\nexport default CreditsAvailableBadge;\n", "import { ProjectGridCard } from './ProjectGridCard';\n\nexport default ProjectGridCard;\n", "import { TextWithCard } from './TextWithCard';\n\nexport default TextWithCard;\n", "import React from 'react';\nimport Link from 'next/link';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Heading,\n SimpleGrid,\n Text,\n Wrapper,\n} from 'boemly';\nimport { CaretRightIcon } from '@phosphor-icons/react';\nimport { MEDIUM_TRANSITION_DURATION } from '../../constants/animations';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\n\ninterface LinkCardsGridSlice {\n tagline?: string;\n title: string;\n text?: string;\n cards: {\n id: number;\n title: string;\n text?: string;\n link: StrapiLink;\n }[];\n}\nexport interface LinkCardsGridProps {\n slice: LinkCardsGridSlice;\n}\n\nexport const LinkCardsGrid: React.FC<LinkCardsGridProps> = ({\n slice,\n}: LinkCardsGridProps) => (\n <DefaultSectionContainer title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n\n <SimpleGrid mt=\"16\" columns={[1, null, null, null, 2]} gap=\"4\">\n {slice.cards.map(({ id, title, text, link }) => (\n <Link key={id} href={strapiLinkUrl(link)}>\n <Box\n data-testid=\"link\"\n px=\"10\"\n py=\"8\"\n borderStyle=\"solid\"\n borderWidth=\"thin\"\n borderColor=\"gray.200\"\n borderRadius=\"2xl\"\n display=\"flex\"\n flexDir=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n cursor=\"pointer\"\n transitionDuration={`${MEDIUM_TRANSITION_DURATION}s`}\n _hover={{ backgroundColor: 'gray.50' }}\n >\n <div>\n <Heading as=\"h4\" size=\"lg\">\n {title}\n </Heading>\n {text && (\n <Text mt=\"2\" size=\"smRegularNormal\">\n {text}\n </Text>\n )}\n </div>\n\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n borderStyle=\"solid\"\n borderWidth=\"thin\"\n borderColor=\"gray.200\"\n borderRadius=\"2xl\"\n height=\"12\"\n width=\"12\"\n minWidth=\"12\"\n minHeight=\"12\"\n ml=\"6\"\n backgroundColor=\"white\"\n >\n <CaretRightIcon />\n </Box>\n </Box>\n </Link>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n);\n", "export const MEDIUM_TRANSITION_DURATION = 0.2;\n", "import { LinkCardsGrid } from './LinkCardsGrid';\n\nexport default LinkCardsGrid;\n", "import React from 'react';\nimport {\n BoemlyTag,\n Box,\n DefaultSectionHeader,\n Flex,\n Gradient,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\nexport interface SmallHeroProps {\n slice: {\n tags?: {\n id: number;\n text: string;\n colorPalette: string;\n }[];\n tagline?: string;\n title: string;\n subTitle?: string;\n button?: StrapiLink;\n image?: StrapiImage;\n gradient?: boolean;\n };\n theme: 'dark' | 'light';\n}\n\nconst colors = {\n dark: {\n tagline: 'white',\n title: 'white',\n text: 'white',\n background: 'gray.900',\n },\n light: {\n tagline: 'primary.500',\n title: 'black',\n text: 'gray.500',\n background: 'primary.50',\n },\n};\n\nexport const SmallHero: React.FC<SmallHeroProps> = ({\n slice,\n theme,\n}: SmallHeroProps) => (\n <Box\n position=\"relative\"\n width=\"full\"\n height=\"xl\"\n backgroundColor={colors[theme].background}\n >\n {slice.image && (\n <>\n <Image\n src={strapiMediaUrl(slice.image.img, 'xLarge')}\n alt={slice.image.alt}\n fill\n style={{ objectFit: slice.image.objectFit || 'cover' }}\n />\n {slice.gradient && <Gradient />}\n </>\n )}\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"60%\"\n width=\"full\"\n textAlign=\"center\"\n transform=\"translateY(-50%)\"\n >\n <Wrapper>\n <>\n {slice.tags && (\n <Flex direction=\"row\" justify=\"center\" gap=\"2\" mb=\"4\" wrap=\"wrap\">\n {slice.tags.map(({ id, text, colorPalette }) => (\n <BoemlyTag\n key={id}\n colorPalette={colorPalette}\n size=\"md\"\n variant=\"subtle\"\n >\n {text}\n </BoemlyTag>\n ))}\n </Flex>\n )}\n <DefaultSectionHeader\n isHero\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n taglineProps={{\n color: colors[theme].tagline,\n textAlign: 'center',\n mx: 'auto',\n }}\n titleProps={{\n color: colors[theme].title,\n maxW: '4xl',\n textAlign: 'center',\n mx: 'auto',\n }}\n textProps={{\n maxW: '2xl',\n textAlign: 'center',\n mx: 'auto',\n color: colors[theme].text,\n }}\n />\n {slice.button && (\n <StrapiLinkButton\n link={slice.button}\n mt=\"6\"\n size=\"lg\"\n component=\"SmallHero\"\n />\n )}\n </>\n </Wrapper>\n </Box>\n </Box>\n);\n", "import { SmallHero } from './SmallHero';\n\nexport default SmallHero;\n", "import React, { useContext } from 'react';\nimport {\n Box,\n DatePersonPair,\n DefaultSectionContainer,\n Heading,\n SimpleGrid,\n Spacer,\n Text,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport Link from 'next/link';\nimport StrapiBlogPost from '../../models/strapi/StrapiBlogPost';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport { BlogItemContainer, ImageContainer } from './styles';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface BlogProps {\n slice: {\n blog_posts: IStrapiData<StrapiBlogPost>[];\n };\n blogPosts: IStrapiData<StrapiBlogPost>[];\n}\n\nexport const Blog: React.FC<BlogProps> = ({ slice, blogPosts }: BlogProps) => {\n const { formatDate } = useContext(IntlContext);\n const sortedBlogPosts = slice.blog_posts.sort(\n (a, b) =>\n new Date(b.attributes.createdAt).getTime() -\n new Date(a.attributes.createdAt).getTime()\n );\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2]} gapX={56} gapY={24}>\n {sortedBlogPosts.map(({ attributes }) => {\n const blogPost: IStrapiData<StrapiBlogPost> | undefined =\n blogPosts.find((bp) => bp.attributes.slug === attributes.slug);\n if (!blogPost) {\n return null;\n }\n return (\n <BlogItemContainer\n key={blogPost.attributes.slug}\n as={Link}\n href={`/blog/${blogPost.attributes.slug}`}\n >\n <ImageContainer>\n <Image\n src={strapiMediaUrl(blogPost.attributes.img.img, 'large')}\n alt={blogPost.attributes.img.alt}\n fill\n style={{\n objectFit: blogPost.attributes.img.objectFit || 'cover',\n }}\n />\n </ImageContainer>\n <Box px=\"2\" py=\"8\">\n {blogPost.attributes.category.data && (\n <Text size=\"smMonoUppercase\" color=\"primary.800\" mb=\"2\">\n {blogPost.attributes.category.data.attributes.name}\n </Text>\n )}\n <Heading size=\"lg\">{blogPost.attributes.title}</Heading>\n {blogPost.attributes.teaser && (\n <Text size=\"mdRegularNormal\" mt=\"2\">\n {blogPost.attributes.teaser}\n </Text>\n )}\n <Spacer height=\"4\" />\n <DatePersonPair\n date={formatDate(blogPost.attributes.createdAt)}\n person={\n blogPost.attributes.author.data\n ? {\n name: blogPost.attributes.author.data.attributes\n .name,\n image: (\n <Image\n src={strapiMediaUrl(\n blogPost.attributes.author.data.attributes.img\n .img,\n 'thumbnail'\n )}\n alt={\n blogPost.attributes.author.data.attributes.img\n .alt\n }\n fill\n style={{\n objectFit:\n blogPost.attributes.author.data.attributes\n .img.objectFit || 'cover',\n }}\n />\n ),\n }\n : undefined\n }\n />\n </Box>\n </BlogItemContainer>\n );\n })}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import styled from '@emotion/styled';\nimport { BREAKPOINT_MD } from '../../constants/breakpoints';\nimport { Box, Link } from 'boemly';\n\nexport const BlogItemContainer = styled(Link)`\n text-decoration: none;\n display: flex;\n flex-direction: column;\n height: 100%;\n\n & div img {\n transition: transform var(--default-ease) var(--medium-transition-duration);\n }\n\n &:hover {\n text-decoration: none;\n\n & > div:first-of-type img {\n transform: scale(1.03);\n }\n }\n`;\n\nexport const ImageContainer = styled(Box)`\n width: 100%;\n height: var(--boemly-sizes-xs);\n position: relative;\n border-radius: var(--boemly-radii-2xl);\n\n // Fixes the flickering of borders during animation in Safari\n -webkit-mask-image: -webkit-radial-gradient(white, black);\n\n & span,\n div {\n border-radius: var(--boemly-radii-2xl);\n }\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n height: var(--boemly-sizes-3xs);\n }\n`;\n", "import { Blog } from './Blog';\n\nexport default Blog;\n", "import React from 'react';\nimport { Box, DefaultSectionContainer, SimpleGrid, Wrapper } from 'boemly';\nimport Link from 'next/link';\nimport { MEDIUM_TRANSITION_DURATION } from '../../constants/animations';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport IStrapi from '../../models/strapi/IStrapi';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport StrapiProject from '../../models/strapi/StrapiProject';\nimport ProjectGridCard from '../../components/ProjectGridCard';\n\nexport interface ProjectsGridProps {\n slice: {\n projects: IStrapi<IStrapiData<StrapiProject>[]>;\n };\n projects: PortfolioProject[];\n}\n\nconst ConditionalWrapper = ({\n condition,\n wrapper,\n children,\n}: {\n condition: boolean;\n wrapper: (children: React.JSX.Element) => React.JSX.Element;\n children: React.JSX.Element;\n}) => (condition ? wrapper(children) : children);\n\nexport const ProjectsGrid: React.FC<ProjectsGridProps> = ({\n projects,\n slice,\n}: ProjectsGridProps) => {\n const filteredProjects = projects.filter(\n (fpmProject) =>\n fpmProject.thumbnail &&\n slice.projects.data.some(\n (strapiProject) =>\n strapiProject.attributes.fpmProjectId === fpmProject.id\n )\n );\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2, null, 3]} gap=\"16\">\n {filteredProjects.map((project) => (\n <ConditionalWrapper\n key={project.id}\n condition={!!project.slug}\n wrapper={(children: React.JSX.Element) => (\n <Link\n href={`${project.portfolioHost || ''}/portfolio/${\n project.slug\n }`}\n passHref\n key={project.id}\n legacyBehavior\n >\n {children}\n </Link>\n )}\n >\n <Box\n as=\"a\"\n cursor=\"pointer\"\n borderRadius=\"2xl\"\n transition={`box-shadow ease ${MEDIUM_TRANSITION_DURATION}s`}\n _hover={{ boxShadow: 'lg' }}\n >\n <ProjectGridCard project={project} />\n </Box>\n </ConditionalWrapper>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { ProjectsGrid } from './ProjectsGrid';\n\nexport default ProjectsGrid;\n", "import React, {\n useRef,\n useEffect,\n useState,\n useCallback,\n useContext,\n} from 'react';\nimport { Global } from '@emotion/react';\nimport mapboxgl from 'mapbox-gl';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Wrapper,\n} from 'boemly';\nimport { MAPBOX_MAX_ZOOM, MAPBOX_TOKEN } from '../../constants/mapbox';\nimport { IntlContext } from '../../components/ContextProvider';\nimport mapboxStyle from './mapboxStyle';\nimport { FeatureCollection } from 'geojson';\nimport debounce from 'lodash/debounce';\nimport getFpmProjectsByBbox from '../../integrations/strapi/getFpmProjectsByBbox';\nimport getStrapiProjects from '../../integrations/strapi/getStrapiProjects';\nimport mergeProjectData from '../../utils/mergeProjectData';\nimport { CreditAvailability } from '../../models/fpm/FPMProject';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport StrapiProject from '../../models/strapi/StrapiProject';\n\nconst projectPinImage =\n 'https://cdn.jsdelivr.net/npm/@phosphor-icons/core@2.0.2/assets/fill/map-pin-fill.svg';\n\nmapboxgl.accessToken = MAPBOX_TOKEN;\n\nexport interface ProjectsMapProps {\n slice: {\n tagline?: string;\n title?: string;\n text?: string;\n defaultCenterCoordinates?: { latitude: number; longitude: number };\n defaultZoomLevel?: number;\n };\n}\n\nconst FALLBACK_BBOX =\n '-1.9950830850086163,44.4464186384987,21.995083085002875,54.12644342419196';\n\nexport const ProjectsMap: React.FC<ProjectsMapProps> = ({\n slice,\n}: ProjectsMapProps) => {\n const { locale, formatMessage } = useContext(IntlContext);\n const mapContainer = useRef<HTMLDivElement>(null);\n const map = useRef<mapboxgl.Map | null>(null);\n const animationIntervalRef = useRef<NodeJS.Timeout | null>(null);\n const [featureCollection, setFeatureCollection] =\n useState<FeatureCollection | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const initialBboxRef = useRef<string | null>(null);\n const [isMapReady, setIsMapReady] = useState(false);\n const [strapiProjects, setStrapiProjects] = useState<Map<\n string,\n IStrapiData<StrapiProject>\n > | null>(null);\n\n const isBboxContained = useCallback(\n (innerBbox: string, outerBbox: string): boolean => {\n const [innerWest, innerSouth, innerEast, innerNorth] = innerBbox\n .split(',')\n .map(Number);\n const [outerWest, outerSouth, outerEast, outerNorth] = outerBbox\n .split(',')\n .map(Number);\n return (\n innerWest >= outerWest &&\n innerEast <= outerEast &&\n innerSouth >= outerSouth &&\n innerNorth <= outerNorth\n );\n },\n []\n );\n\n const fetchStrapiData = useCallback(async () => {\n if (strapiProjects) return; // If we already have Strapi data, don't fetch it again\n\n try {\n const data = await getStrapiProjects(locale, '2'); // pLevel = Population depth which is a param in the API request. 2 is enough to get the slug and the portfolioHost\n setStrapiProjects(data);\n } catch (error) {\n console.error('\u274C Error fetching Strapi projects:', error);\n }\n }, [locale, strapiProjects]);\n\n const fetchProjectsData = useCallback(\n async (bbox: string) => {\n setIsLoading(true);\n try {\n const fpmData = await getFpmProjectsByBbox(bbox);\n\n // If we have Strapi data, merge it, otherwise show FPM data immediately\n const mergedData = strapiProjects\n ? mergeProjectData(fpmData, strapiProjects)\n : fpmData;\n\n setFeatureCollection(mergedData);\n } catch (error) {\n console.error('Error fetching projects:', error);\n } finally {\n setIsLoading(false);\n }\n },\n [strapiProjects]\n );\n\n const debouncedUpdateBbox = useCallback(\n debounce(() => {\n if (!map.current || !initialBboxRef.current) return;\n const bounds = map.current.getBounds();\n const newBbox = `${bounds.getWest()},${bounds.getSouth()},${bounds.getEast()},${bounds.getNorth()}`;\n if (!isBboxContained(newBbox, initialBboxRef.current)) {\n fetchProjectsData(newBbox);\n initialBboxRef.current = newBbox;\n }\n }, 500),\n [fetchProjectsData, isBboxContained]\n );\n\n const addProjectsLayer = useCallback(() => {\n if (!map.current || !featureCollection || !map.current.isStyleLoaded()) {\n return;\n }\n\n const filteredFeatureCollection = {\n ...featureCollection,\n features: featureCollection.features.filter(\n (feature) => feature.properties?.isPublic !== false\n ),\n };\n\n const source = map.current.getSource('projects') as mapboxgl.GeoJSONSource;\n\n if (!source) {\n map.current.addSource('projects', {\n type: 'geojson',\n data: filteredFeatureCollection,\n cluster: true,\n clusterMaxZoom: 14,\n clusterRadius: 50,\n });\n\n map.current.addLayer({\n id: 'clusters',\n type: 'circle',\n source: 'projects',\n filter: ['has', 'point_count'],\n paint: {\n 'circle-color': [\n 'step',\n ['get', 'point_count'],\n '#51bbd6',\n 2,\n '#2A3FBA',\n ],\n 'circle-radius': ['step', ['get', 'point_count'], 20, 10, 30, 30, 40],\n 'circle-radius-transition': { duration: 300 },\n 'circle-stroke-width': 5,\n 'circle-stroke-color': '#2A3FBA',\n 'circle-stroke-opacity': 0.4,\n },\n });\n\n if (animationIntervalRef.current) {\n clearInterval(animationIntervalRef.current);\n }\n animationIntervalRef.current = setInterval(() => {\n if (!map.current) return;\n const now = Date.now() / 1000;\n const pulseFactor = 1 + 0.05 * Math.sin((now * 2 * Math.PI) / 2.8);\n const expression = [\n 'step',\n ['get', 'point_count'],\n 20 * pulseFactor,\n 10,\n 30 * pulseFactor,\n 30,\n 40 * pulseFactor,\n ] as mapboxgl.ExpressionSpecification;\n map.current.setPaintProperty('clusters', 'circle-radius', expression);\n }, 50);\n\n map.current.addLayer({\n id: 'cluster-count',\n type: 'symbol',\n source: 'projects',\n filter: ['has', 'point_count'],\n layout: {\n 'text-field': '{point_count_abbreviated}',\n 'text-font': ['DIN Offc Pro Medium', 'Arial Unicode MS Bold'],\n 'text-size': 12,\n },\n paint: {\n 'text-color': '#fff',\n },\n });\n\n // Load SVG as PNG\n fetch(projectPinImage)\n .then((response) => response.text())\n .then((svgText) => {\n // Modify SVG color\n const modifiedSvg = svgText.replace(/fill=\"[^\"]*\"/, `fill=\"#2A3FBA\"`);\n const img = new Image();\n img.src = `data:image/svg+xml;base64,${btoa(modifiedSvg)}`;\n return new Promise<HTMLImageElement>((resolve, reject) => {\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n })\n .then((img) => {\n if (!map.current) return;\n const canvas = document.createElement('canvas');\n canvas.width = 80;\n canvas.height = 80;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n ctx.drawImage(img, 10, 10, 60, 60);\n const pngImg = new Image();\n pngImg.src = canvas.toDataURL('image/png');\n pngImg.onload = () => {\n map.current?.addImage('project-pin', pngImg, { pixelRatio: 2 });\n map.current?.addLayer({\n id: 'unclustered-point',\n type: 'symbol',\n source: 'projects',\n filter: ['!', ['has', 'point_count']],\n layout: {\n 'icon-image': 'project-pin',\n },\n });\n };\n })\n .catch((error) => {\n console.error('Error loading project pin image:', error);\n });\n\n const popup = new mapboxgl.Popup({\n closeButton: true,\n closeOnClick: false,\n className: 'custom-popup',\n offset: [0, -20],\n });\n\n const style = document.createElement('style');\n style.textContent = `\n .custom-popup .mapboxgl-popup-content {\n border-radius: 8px;\n padding: 12px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.2);\n background: white;\n color: #333;\n }\n .mapboxgl-popup {\n max-width: 300px !important;\n }\n .mapboxgl-popup-close-button {\n padding: 4px 8px;\n font-size: 16px;\n color: #666;\n }\n .mapboxgl-popup-close-button:hover {\n background: #f0f0f0;\n color: #333;\n }\n `;\n document.head.appendChild(style);\n\n map.current.on('click', 'unclustered-point', (e) => {\n if (!e.features || !e.features[0].properties) return;\n map.current!.getCanvas().style.cursor = 'pointer';\n\n const coordinates = (e.features[0].geometry as any).coordinates.slice();\n const {\n title,\n projectDeveloper,\n slug,\n portfolioHost,\n creditAvailability,\n } = e.features[0].properties;\n\n // Calculate if popup would go off screen at the top\n const point = map.current!.project(coordinates);\n const popupHeight = 150; // Approximate height of popup\n const offset: [number, number] =\n point.y - popupHeight - 20 < 0 ? [0, 20] : [0, -20];\n\n let developer = 'Unknown';\n try {\n const projectDeveloperRaw = projectDeveloper;\n if (projectDeveloperRaw) {\n developer =\n JSON.parse(projectDeveloperRaw as string)?.name ?? 'Unknown';\n }\n } catch {\n developer = 'Unknown';\n }\n\n const projectUrl =\n slug && portfolioHost ? `${portfolioHost}/portfolio/${slug}` : null;\n\n const getBadgeMessage = (status: string) => {\n switch (status) {\n case CreditAvailability.CREDITS_AVAILABLE:\n return formatMessage({\n id: 'components.creditsAvailableBadge.text.yes',\n });\n case CreditAvailability.NO_CREDITS_AVAILABLE:\n return formatMessage({\n id: 'components.creditsAvailableBadge.text.no',\n });\n case CreditAvailability.SOME_CREDITS_AVAILABLE:\n return formatMessage({\n id: 'components.creditsAvailableBadge.text.some',\n });\n case CreditAvailability.SOON_CREDITS_AVAILABLE:\n return formatMessage({\n id: 'components.creditsAvailableBadge.text.notYet',\n });\n default:\n return '';\n }\n };\n\n const getBadgeColor = (status: string) => {\n switch (status) {\n case CreditAvailability.CREDITS_AVAILABLE:\n return '#15803d';\n case CreditAvailability.NO_CREDITS_AVAILABLE:\n return '#b91c1c';\n case CreditAvailability.SOME_CREDITS_AVAILABLE:\n return '#ea580c';\n case CreditAvailability.SOON_CREDITS_AVAILABLE:\n return '#2563eb';\n default:\n return '#e0e7ff';\n }\n };\n\n const badgeColor = getBadgeColor(creditAvailability);\n const badgeMessage = getBadgeMessage(creditAvailability);\n\n const badge = projectUrl\n ? `<a href=\"${projectUrl}\" target=\"_blank\" rel=\"noopener\" style=\"text-decoration: none;\"><span style=\"display: inline-block; background: ${badgeColor}; color: white; font-weight: 600; border-radius: 4px; padding: 2px 8px; font-size: 12px; margin-bottom: 6px; cursor: pointer;\">${badgeMessage}</span></a>`\n : `<span style=\"display: inline-block; background: ${badgeColor}; color: white; font-weight: 600; border-radius: 4px; padding: 2px 8px; font-size: 12px; margin-bottom: 6px;\">${badgeMessage}</span>`;\n\n const button = projectUrl\n ? `<a href=\"${projectUrl}\" target=\"_blank\" rel=\"noopener\" style=\"display: inline-block; margin-top: 12px; padding: 4px 8px; border: 1px solid #e2e8f0; border-radius: 4px; background: #fff; font-size: 14px; font-weight: 700; text-decoration: none;\">Show more info</a>`\n : '';\n\n const description = `\n <div style=\"padding: 2px; padding-right: 16px; min-width: 180px; max-width: 260px;\">\n ${badge}\n <h3 style=\"font-size: 15px; font-weight: bold;\">${title}</h3>\n <p style=\"font-size: 15px; color: #64748b;\">${developer}</p>\n ${button}\n </div>\n `;\n\n while (Math.abs(e.lngLat.lng - coordinates[0]) > 180) {\n coordinates[0] += e.lngLat.lng > coordinates[0] ? 360 : -360;\n }\n\n popup\n .setOffset(offset)\n .setLngLat(coordinates)\n .setHTML(description)\n .addTo(map.current!);\n });\n\n map.current.on('click', 'clusters', (e) => {\n const features = map.current?.queryRenderedFeatures(e.point, {\n layers: ['clusters'],\n });\n if (!features || !features[0].properties) return;\n\n const clusterId = features[0].properties.cluster_id;\n const projectSource = map.current?.getSource(\n 'projects'\n ) as mapboxgl.GeoJSONSource;\n\n projectSource.getClusterExpansionZoom(clusterId, (err, zoom) => {\n if (err || !map.current) return;\n const coordinates = (features[0].geometry as any).coordinates;\n map.current.easeTo({ center: coordinates, zoom });\n });\n });\n\n map.current.on('mouseenter', 'clusters', () => {\n if (map.current) map.current.getCanvas().style.cursor = 'pointer';\n });\n map.current.on('mouseleave', 'clusters', () => {\n if (map.current) map.current.getCanvas().style.cursor = '';\n });\n\n map.current.on('mouseenter', 'unclustered-point', () => {\n if (map.current) map.current.getCanvas().style.cursor = 'pointer';\n });\n map.current.on('mouseleave', 'unclustered-point', () => {\n if (map.current) map.current.getCanvas().style.cursor = '';\n });\n } else {\n source.setData(filteredFeatureCollection);\n }\n }, [featureCollection, locale, formatMessage]);\n\n useEffect(() => {\n if (map.current || !mapContainer.current) return;\n\n let initialCenter: [number, number];\n let initialZoom: number;\n\n if (slice.defaultCenterCoordinates && slice.defaultZoomLevel) {\n initialCenter = [\n slice.defaultCenterCoordinates.longitude,\n slice.defaultCenterCoordinates.latitude,\n ];\n initialZoom = slice.defaultZoomLevel;\n } else {\n // Always start with fallback view - don't wait for user location\n const bbox = initialBboxRef.current || FALLBACK_BBOX;\n const [west, south, east, north] = bbox.split(',').map(Number);\n const bounds = new mapboxgl.LngLatBounds([west, south], [east, north]);\n const center = bounds.getCenter();\n initialCenter = [center.lng, center.lat];\n initialZoom = 6;\n }\n\n map.current = new mapboxgl.Map({\n container: mapContainer.current,\n style: 'mapbox://styles/mapbox/streets-v12',\n center: initialCenter,\n zoom: initialZoom,\n maxZoom: MAPBOX_MAX_ZOOM,\n });\n\n map.current.addControl(new mapboxgl.NavigationControl(), 'top-right');\n\n map.current.on('load', () => {\n setIsMapReady(true);\n if (!(slice.defaultCenterCoordinates && slice.defaultZoomLevel)) {\n const bbox = initialBboxRef.current || FALLBACK_BBOX;\n const [west, south, east, north] = bbox.split(',').map(Number);\n const bounds = new mapboxgl.LngLatBounds([west, south], [east, north]);\n map.current?.fitBounds(bounds, { padding: 20 });\n }\n });\n\n map.current.on('moveend', () => {\n if (initialBboxRef.current) {\n debouncedUpdateBbox();\n }\n });\n\n return () => {\n debouncedUpdateBbox.cancel();\n if (animationIntervalRef.current) {\n clearInterval(animationIntervalRef.current);\n }\n map.current?.remove();\n map.current = null;\n };\n }, [\n slice.defaultCenterCoordinates,\n slice.defaultZoomLevel,\n debouncedUpdateBbox,\n ]);\n\n // Fetch Strapi data once on component mount\n useEffect(() => {\n fetchStrapiData();\n }, [fetchStrapiData]);\n\n // Handle re-merging data when Strapi data becomes available\n useEffect(() => {\n if (strapiProjects && featureCollection) {\n const mergedData = mergeProjectData(featureCollection, strapiProjects);\n setFeatureCollection(mergedData);\n }\n }, [strapiProjects]);\n\n // Request user location (non-blocking)\n useEffect(() => {\n if (slice.defaultCenterCoordinates && slice.defaultZoomLevel) {\n // Use provided default coordinates\n const { latitude, longitude } = slice.defaultCenterCoordinates;\n const buffer = 10;\n const bbox = `${longitude - buffer},${latitude - buffer},${\n longitude + buffer\n },${latitude + buffer}`;\n initialBboxRef.current = bbox;\n fetchProjectsData(bbox);\n } else if (navigator.geolocation) {\n // Set fallback immediately (non-blocking)\n initialBboxRef.current = FALLBACK_BBOX;\n fetchProjectsData(FALLBACK_BBOX);\n\n // Request user location asynchronously\n navigator.geolocation.getCurrentPosition(\n (position) => {\n const userLoc = {\n lat: position.coords.latitude,\n lon: position.coords.longitude,\n };\n if (map.current) {\n map.current.easeTo({\n center: [userLoc.lon, userLoc.lat],\n zoom: 10,\n duration: 1500,\n });\n\n // Update bbox for this location\n const buffer = 1;\n const bbox = `${userLoc.lon - buffer},${userLoc.lat - buffer},${\n userLoc.lon + buffer\n },${userLoc.lat + buffer}`;\n initialBboxRef.current = bbox;\n fetchProjectsData(bbox);\n }\n },\n () => {\n // Permission denied or error - already have fallback data loaded\n // No need to re-fetch since we already loaded FALLBACK_BBOX data\n }\n );\n } else {\n // Geolocation not supported - use fallback\n initialBboxRef.current = FALLBACK_BBOX;\n fetchProjectsData(FALLBACK_BBOX);\n }\n }, [\n slice.defaultCenterCoordinates,\n slice.defaultZoomLevel,\n fetchProjectsData,\n ]);\n\n useEffect(() => {\n if (isMapReady && featureCollection && map.current?.isStyleLoaded()) {\n addProjectsLayer();\n }\n }, [isMapReady, featureCollection, addProjectsLayer]);\n\n return (\n <DefaultSectionContainer>\n <Global styles={mapboxStyle} />\n <Wrapper>\n {slice.title ? (\n <>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center' }}\n titleProps={{\n textAlign: 'center',\n maxW: '6xl',\n marginX: 'auto',\n }}\n textProps={{\n textAlign: 'center',\n maxW: '3xl',\n marginX: 'auto',\n }}\n />\n <Box height=\"16\" />\n </>\n ) : (\n <></>\n )}\n <Box\n height=\"xl\"\n ref={mapContainer}\n borderRadius=\"xl\"\n overflow=\"hidden\"\n boxShadow={['md', null, null, 'none']}\n />\n <>{isLoading && <Box>Loading projects...</Box>}</>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n\nexport default ProjectsMap;\n", "export const MAPBOX_TOKEN =\n 'pk.eyJ1IjoidHJlZS1seSIsImEiOiJja25rNG1heHgwNThjMnZwZTl2eThmeXUwIn0.SOrYUKfevZkbx8jZPxJesA';\n\nexport enum MapBoxStyle {\n Outdoors = 'mapbox://styles/mapbox/outdoors-v11',\n SatelliteStreets = 'mapbox://styles/mapbox/satellite-streets-v11',\n Satellite = 'mapbox://styles/mapbox/satellite-v9',\n CaliTerrain = 'mapbox://styles/tree-ly/clna54iq603ht01pbc199cszw',\n}\n\nexport const MAPBOX_TILES_URL = `${\n process.env.NEXT_PUBLIC_MAPBOX_TILES_URL || 'http://localhost:8123'\n}/vectortiles/v1/plots/{z}/{x}/{y}.mvt`;\nexport const MAPBOX_SOURCE_LAYER = 'plots';\nexport const MAPBOX_SOURCE_IDENTIFIER = 'plots';\nexport const MAPBOX_BORDER_LAYER_IDENTIFIER = 'plots-borders';\nexport const MAPBOX_FILL_LAYER_IDENTIFIER = 'plots-fill';\nexport const MAPBOX_TEXT_LAYER_IDENTIFIER = 'plots-text';\n\nexport const MAPBOX_TEXT_MIN_ZOOM = 15;\nexport const MAPBOX_SHAPES_MIN_ZOOM = 13;\n\nexport const MAPBOX_MAX_ZOOM = 19;\nexport const MAPBOX_INITIAL_ZOOM = 13;\n", "import { css } from '@emotion/react';\n\nconst mapboxStyle = css`\n .mapboxgl-map {\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n font:\n 12px/20px Helvetica Neue,\n Arial,\n Helvetica,\n sans-serif;\n overflow: hidden;\n position: relative;\n }\n .mapboxgl-canvas {\n left: 0;\n position: absolute;\n top: 0;\n }\n .mapboxgl-map:-webkit-full-screen {\n height: 100%;\n width: 100%;\n }\n .mapboxgl-canary {\n background-color: salmon;\n }\n .mapboxgl-canvas-container.mapboxgl-interactive,\n .mapboxgl-ctrl-group button.mapboxgl-ctrl-compass {\n cursor: grab;\n -webkit-user-select: none;\n user-select: none;\n }\n .mapboxgl-canvas-container.mapboxgl-interactive.mapboxgl-track-pointer {\n cursor: pointer;\n }\n .mapboxgl-canvas-container.mapboxgl-interactive:active,\n .mapboxgl-ctrl-group button.mapboxgl-ctrl-compass:active {\n cursor: grabbing;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate,\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate .mapboxgl-canvas {\n touch-action: pan-x pan-y;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-drag-pan,\n .mapboxgl-canvas-container.mapboxgl-touch-drag-pan .mapboxgl-canvas {\n touch-action: pinch-zoom;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan,\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan\n .mapboxgl-canvas {\n touch-action: none;\n }\n .mapboxgl-ctrl-bottom-left,\n .mapboxgl-ctrl-bottom-right,\n .mapboxgl-ctrl-top-left,\n .mapboxgl-ctrl-top-right {\n pointer-events: none;\n position: absolute;\n z-index: 2;\n }\n .mapboxgl-ctrl-top-left {\n left: 0;\n top: 0;\n }\n .mapboxgl-ctrl-top-right {\n right: 0;\n top: 0;\n }\n .mapboxgl-ctrl-bottom-left {\n bottom: 0;\n left: 0;\n }\n .mapboxgl-ctrl-bottom-right {\n bottom: 0;\n right: 0;\n }\n .mapboxgl-ctrl {\n clear: both;\n pointer-events: auto;\n transform: translate(0);\n }\n .mapboxgl-ctrl-top-left .mapboxgl-ctrl {\n float: left;\n margin: 10px 0 0 10px;\n }\n .mapboxgl-ctrl-top-right .mapboxgl-ctrl {\n float: right;\n margin: 10px 10px 0 0;\n }\n .mapboxgl-ctrl-bottom-left .mapboxgl-ctrl {\n float: left;\n margin: 0 0 10px 10px;\n }\n .mapboxgl-ctrl-bottom-right .mapboxgl-ctrl {\n float: right;\n margin: 0 10px 10px 0;\n }\n .mapboxgl-ctrl-group {\n background: #fff;\n border-radius: 4px;\n }\n .mapboxgl-ctrl-group:not(:empty) {\n box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1);\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl-group:not(:empty) {\n box-shadow: 0 0 0 2px ButtonText;\n }\n }\n .mapboxgl-ctrl-group button {\n background-color: transparent;\n border: 0;\n box-sizing: border-box;\n cursor: pointer;\n display: block;\n height: 29px;\n outline: none;\n overflow: hidden;\n padding: 0;\n width: 29px;\n }\n .mapboxgl-ctrl-group button + button {\n border-top: 1px solid #ddd;\n }\n .mapboxgl-ctrl button .mapboxgl-ctrl-icon {\n background-position: 50%;\n background-repeat: no-repeat;\n display: block;\n height: 100%;\n width: 100%;\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl-icon {\n background-color: transparent;\n }\n .mapboxgl-ctrl-group button + button {\n border-top: 1px solid ButtonText;\n }\n }\n .mapboxgl-ctrl-attrib-button:focus,\n .mapboxgl-ctrl-group button:focus {\n box-shadow: 0 0 2px 2px #0096ff;\n }\n .mapboxgl-ctrl button:disabled {\n cursor: not-allowed;\n }\n .mapboxgl-ctrl button:disabled .mapboxgl-ctrl-icon {\n opacity: 0.25;\n }\n .mapboxgl-ctrl-group button:first-of-type {\n border-radius: 4px 4px 0 0;\n }\n .mapboxgl-ctrl-group button:last-of-type {\n border-radius: 0 0 4px 4px;\n }\n .mapboxgl-ctrl-group button:only-of-type {\n border-radius: inherit;\n }\n .mapboxgl-ctrl button:not(:disabled):hover {\n background-color: rgba(0, 0, 0, 0.05);\n }\n .mapboxgl-ctrl-group button:focus:focus-visible {\n box-shadow: 0 0 2px 2px #0096ff;\n }\n .mapboxgl-ctrl-group button:focus:not(:focus-visible) {\n box-shadow: none;\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E\");\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E\");\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E\");\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23999'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23aaa'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-waiting\n .mapboxgl-ctrl-icon {\n animation: mapboxgl-spin 2s linear infinite;\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23999'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23000'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23666'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E\");\n }\n }\n @keyframes mapboxgl-spin {\n 0% {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(1turn);\n }\n }\n a.mapboxgl-ctrl-logo {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='0.3' stroke='%23000' stroke-width='3'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='0.9' fill='%23fff'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n cursor: pointer;\n display: block;\n height: 23px;\n margin: 0 0 -4px -4px;\n overflow: hidden;\n width: 88px;\n }\n a.mapboxgl-ctrl-logo.mapboxgl-compact {\n width: 23px;\n }\n @media (-ms-high-contrast: active) {\n a.mapboxgl-ctrl-logo {\n background-color: transparent;\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='1' stroke='%23000' stroke-width='3'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='1' fill='%23fff'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n a.mapboxgl-ctrl-logo {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='1' stroke='%23fff' stroke-width='3' fill='%23fff'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='1' fill='%23000'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl.mapboxgl-ctrl-attrib {\n background-color: hsla(0, 0%, 100%, 0.5);\n margin: 0;\n padding: 0 5px;\n }\n @media screen {\n .mapboxgl-ctrl-attrib.mapboxgl-compact {\n background-color: #fff;\n border-radius: 12px;\n margin: 10px;\n min-height: 20px;\n padding: 2px 24px 2px 0;\n position: relative;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact-show {\n padding: 2px 28px 2px 8px;\n visibility: visible;\n }\n .mapboxgl-ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact-show,\n .mapboxgl-ctrl-top-left > .mapboxgl-ctrl-attrib.mapboxgl-compact-show {\n border-radius: 12px;\n padding: 2px 8px 2px 28px;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner {\n display: none;\n }\n .mapboxgl-ctrl-attrib-button {\n background-color: hsla(0, 0%, 100%, 0.5);\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E\");\n border: 0;\n border-radius: 12px;\n box-sizing: border-box;\n cursor: pointer;\n display: none;\n height: 24px;\n outline: none;\n position: absolute;\n right: 0;\n top: 0;\n width: 24px;\n }\n .mapboxgl-ctrl-bottom-left .mapboxgl-ctrl-attrib-button,\n .mapboxgl-ctrl-top-left .mapboxgl-ctrl-attrib-button {\n left: 0;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-button,\n .mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-inner {\n display: block;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-button {\n background-color: rgba(0, 0, 0, 0.05);\n }\n .mapboxgl-ctrl-bottom-right > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n bottom: 0;\n right: 0;\n }\n .mapboxgl-ctrl-top-right > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n right: 0;\n top: 0;\n }\n .mapboxgl-ctrl-top-left > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n left: 0;\n top: 0;\n }\n .mapboxgl-ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n bottom: 0;\n left: 0;\n }\n }\n @media screen and (-ms-high-contrast: active) {\n .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' fill='%23fff'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E\");\n }\n }\n @media screen and (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl-attrib a {\n color: rgba(0, 0, 0, 0.75);\n text-decoration: none;\n }\n .mapboxgl-ctrl-attrib a:hover {\n color: inherit;\n text-decoration: underline;\n }\n .mapboxgl-ctrl-attrib .mapbox-improve-map {\n font-weight: 700;\n margin-left: 2px;\n }\n .mapboxgl-attrib-empty {\n display: none;\n }\n .mapboxgl-ctrl-scale {\n background-color: hsla(0, 0%, 100%, 0.75);\n border: 2px solid #333;\n border-top: #333;\n box-sizing: border-box;\n color: #333;\n font-size: 10px;\n padding: 0 5px;\n white-space: nowrap;\n }\n .mapboxgl-popup {\n display: flex;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n will-change: transform;\n }\n .mapboxgl-popup-anchor-top,\n .mapboxgl-popup-anchor-top-left,\n .mapboxgl-popup-anchor-top-right {\n flex-direction: column;\n }\n .mapboxgl-popup-anchor-bottom,\n .mapboxgl-popup-anchor-bottom-left,\n .mapboxgl-popup-anchor-bottom-right {\n flex-direction: column-reverse;\n }\n .mapboxgl-popup-anchor-left {\n flex-direction: row;\n }\n .mapboxgl-popup-anchor-right {\n flex-direction: row-reverse;\n }\n .mapboxgl-popup-tip {\n border: 10px solid transparent;\n height: 0;\n width: 0;\n z-index: 1;\n }\n .mapboxgl-popup-anchor-top .mapboxgl-popup-tip {\n align-self: center;\n border-bottom-color: #fff;\n border-top: none;\n }\n .mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip {\n align-self: flex-start;\n border-bottom-color: #fff;\n border-left: none;\n border-top: none;\n }\n .mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip {\n align-self: flex-end;\n border-bottom-color: #fff;\n border-right: none;\n border-top: none;\n }\n .mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip {\n align-self: center;\n border-bottom: none;\n border-top-color: #fff;\n }\n .mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip {\n align-self: flex-start;\n border-bottom: none;\n border-left: none;\n border-top-color: #fff;\n }\n .mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip {\n align-self: flex-end;\n border-bottom: none;\n border-right: none;\n border-top-color: #fff;\n }\n .mapboxgl-popup-anchor-left .mapboxgl-popup-tip {\n align-self: center;\n border-left: none;\n border-right-color: #fff;\n }\n .mapboxgl-popup-anchor-right .mapboxgl-popup-tip {\n align-self: center;\n border-left-color: #fff;\n border-right: none;\n }\n .mapboxgl-popup-close-button {\n background-color: transparent;\n border: 0;\n border-radius: 0 3px 0 0;\n cursor: pointer;\n position: absolute;\n right: 0;\n top: 0;\n }\n .mapboxgl-popup-close-button:hover {\n background-color: rgba(0, 0, 0, 0.05);\n }\n .mapboxgl-popup-content {\n background: #fff;\n border-radius: 3px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n padding: 10px 10px 15px;\n pointer-events: auto;\n position: relative;\n }\n .mapboxgl-popup-anchor-top-left .mapboxgl-popup-content {\n border-top-left-radius: 0;\n }\n .mapboxgl-popup-anchor-top-right .mapboxgl-popup-content {\n border-top-right-radius: 0;\n }\n .mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-content {\n border-bottom-left-radius: 0;\n }\n .mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-content {\n border-bottom-right-radius: 0;\n }\n .mapboxgl-popup-track-pointer {\n display: none;\n }\n .mapboxgl-popup-track-pointer * {\n pointer-events: none;\n user-select: none;\n }\n .mapboxgl-map:hover .mapboxgl-popup-track-pointer {\n display: flex;\n }\n .mapboxgl-map:active .mapboxgl-popup-track-pointer {\n display: none;\n }\n .mapboxgl-marker {\n left: 0;\n opacity: 1;\n position: absolute;\n top: 0;\n transition: opacity 0.2s;\n will-change: transform;\n }\n .mapboxgl-user-location-dot,\n .mapboxgl-user-location-dot:before {\n background-color: #1da1f2;\n border-radius: 50%;\n height: 15px;\n width: 15px;\n }\n .mapboxgl-user-location-dot:before {\n animation: mapboxgl-user-location-dot-pulse 2s infinite;\n content: '';\n position: absolute;\n }\n .mapboxgl-user-location-dot:after {\n border: 2px solid #fff;\n border-radius: 50%;\n box-shadow: 0 0 3px rgba(0, 0, 0, 0.35);\n box-sizing: border-box;\n content: '';\n height: 19px;\n left: -2px;\n position: absolute;\n top: -2px;\n width: 19px;\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading {\n height: 0;\n width: 0;\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after,\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before {\n border-bottom: 7.5px solid #4aa1eb;\n content: '';\n position: absolute;\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before {\n border-left: 7.5px solid transparent;\n transform: translateY(-28px) skewY(-20deg);\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after {\n border-right: 7.5px solid transparent;\n transform: translate(7.5px, -28px) skewY(20deg);\n }\n @keyframes mapboxgl-user-location-dot-pulse {\n 0% {\n opacity: 1;\n transform: scale(1);\n }\n 70% {\n opacity: 0;\n transform: scale(3);\n }\n to {\n opacity: 0;\n transform: scale(1);\n }\n }\n .mapboxgl-user-location-dot-stale {\n background-color: #aaa;\n }\n .mapboxgl-user-location-dot-stale:after {\n display: none;\n }\n .mapboxgl-user-location-accuracy-circle {\n background-color: #1da1f233;\n border-radius: 100%;\n height: 1px;\n width: 1px;\n }\n .mapboxgl-crosshair,\n .mapboxgl-crosshair .mapboxgl-interactive,\n .mapboxgl-crosshair .mapboxgl-interactive:active {\n cursor: crosshair;\n }\n .mapboxgl-boxzoom {\n background: #fff;\n border: 2px dotted #202020;\n height: 0;\n left: 0;\n opacity: 0.5;\n position: absolute;\n top: 0;\n width: 0;\n }\n @media print {\n .mapbox-improve-map {\n display: none;\n }\n }\n .mapboxgl-scroll-zoom-blocker,\n .mapboxgl-touch-pan-blocker {\n align-items: center;\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n display: flex;\n font-family:\n -apple-system,\n BlinkMacSystemFont,\n Segoe UI,\n Helvetica,\n Arial,\n sans-serif;\n height: 100%;\n justify-content: center;\n left: 0;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n text-align: center;\n top: 0;\n transition: opacity 0.75s ease-in-out;\n transition-delay: 1s;\n width: 100%;\n }\n .mapboxgl-scroll-zoom-blocker-show,\n .mapboxgl-touch-pan-blocker-show {\n opacity: 1;\n transition: opacity 0.1s ease-in-out;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page,\n .mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page\n .mapboxgl-canvas {\n touch-action: pan-x pan-y;\n }\n`;\n\nexport default mapboxStyle;\n", "import { FeatureCollection } from 'geojson';\nimport fpmClient from '../fpmClient';\n\nconst getFpmProjectsByBbox = async (\n bbox: string,\n preview: boolean = false\n): Promise<FeatureCollection> => {\n const [west, south, east, north] = bbox.split(',').map(Number);\n const cache = preview ? false : undefined;\n\n const fpmResponse = await fpmClient.get<FeatureCollection>(\n '/public/projects',\n {\n params: {\n bbox: `${west},${south},${east},${north}`,\n },\n cache,\n }\n );\n\n return fpmResponse.data;\n};\n\nexport default getFpmProjectsByBbox;\n", "import { FeatureCollection } from 'geojson';\nimport { IStrapiData, StrapiProject } from '..';\n\nconst mergeProjectData = (\n featureCollection: FeatureCollection,\n strapiProjects: Map<string, IStrapiData<StrapiProject>>\n): FeatureCollection => {\n // Add slug and portfolioHost to each feature's properties if we have Strapi data\n const mergedFeatureCollection = {\n ...featureCollection,\n features: featureCollection.features.map((feature) => {\n const fpmProjectId = feature.properties?.id;\n const strapiProject = fpmProjectId\n ? strapiProjects.get(fpmProjectId)\n : null;\n\n if (strapiProject) {\n feature.properties = {\n ...feature.properties,\n slug: strapiProject.attributes.slug || undefined,\n portfolioHost:\n strapiProject.attributes.portfolio?.data?.attributes.host ||\n undefined,\n };\n }\n\n return feature;\n }),\n };\n\n return mergedFeatureCollection;\n};\n\nexport default mergeProjectData;\n", "import { ProjectsMap } from './ProjectsMap';\n\nexport default ProjectsMap;\n", "import React, { useRef } from 'react';\nimport { Box, DefaultSectionContainer, Wrapper } from 'boemly';\nimport { useMeasure } from '@reactuses/core';\n\ninterface VideoSlice {\n youTubeID: string;\n title: string;\n}\n\nexport interface VideoProps {\n slice: VideoSlice;\n}\n\nexport const Video: React.FC<VideoProps> = ({ slice }: VideoProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const [rect] = useMeasure(ref);\n const width = rect.width;\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <Box ref={ref} borderRadius=\"xl\">\n <iframe\n data-testid=\"video-iframe\"\n width={width}\n height={(width / 16) * 9}\n src={`https://www.youtube.com/embed/${slice.youTubeID}`}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n title={slice.title}\n style={{ borderRadius: 'var(--boemly-radii-xl)' }}\n />\n </Box>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { Video } from './Video';\n\nexport default Video;\n", "import React from 'react';\nimport {\n DefaultSectionContainer,\n Wrapper,\n AvatarWithName,\n Text,\n Box,\n} from 'boemly';\nimport StrapiAvatarWithName from '../../models/strapi/StrapiAvatarWithName';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\nexport interface FullWidthHighlightQuoteProps {\n slice: {\n tagline?: string;\n quote: string;\n avatarWithName: StrapiAvatarWithName;\n };\n}\n\nexport const FullWidthHighlightQuote: React.FC<\n FullWidthHighlightQuoteProps\n> = ({ slice }: FullWidthHighlightQuoteProps) => (\n <DefaultSectionContainer>\n <Wrapper>\n <Box maxWidth=\"5xl\" marginX=\"auto\" mb=\"8\">\n {slice.tagline && (\n <Text\n color=\"primary.700\"\n size=\"mdMonoUppercase\"\n textAlign=\"center\"\n mb=\"3\"\n >\n {slice.tagline}\n </Text>\n )}\n <Text color=\"black\" size=\"xlRegularNormalBold\" textAlign=\"center\">\n {slice.quote}\n </Text>\n </Box>\n <AvatarWithName\n name={slice.avatarWithName.name}\n description={slice.avatarWithName.description}\n imageSrc={strapiMediaUrl(slice.avatarWithName.image.img, 'small')}\n imageAlt={slice.avatarWithName.image.alt}\n imageObjectFit={slice.avatarWithName.image.objectFit || 'cover'}\n orientation=\"vertical\"\n />\n </Wrapper>\n </DefaultSectionContainer>\n);\n", "import { FullWidthHighlightQuote } from './FullWidthHighlightQuote';\n\nexport default FullWidthHighlightQuote;\n", "import React, { useMemo, useRef, useState } from 'react';\nimport {\n Box,\n IconButton,\n DefaultSectionContainer,\n Flex,\n Text,\n useMediaQuery,\n} from 'boemly';\nimport Image from 'next/image';\nimport { useMeasure, useWindowSize } from '@reactuses/core';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { ArrowLeftIcon, ArrowRightIcon } from '@phosphor-icons/react';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport FullScreenImage from '../../components/FullScreenImage';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\nimport {\n ItemContainer,\n SliderContainer,\n SliderInnerContainer,\n ImageContainer,\n} from './styles';\nimport { getClosestRatio } from '../../utils/getClosestRatio';\n\nexport interface FullWidthImageSliderProps {\n slice: {\n images: {\n id: number;\n caption: string;\n img: StrapiImage;\n }[];\n };\n}\n\nconst ITEM_GAP = 24;\nconst MAX_OFFSET_RIGHT = 162;\n\nexport const FullWidthImageSlider: React.FC<FullWidthImageSliderProps> = ({\n slice,\n}: FullWidthImageSliderProps) => {\n const containerRef = useRef(null);\n const imageRef = useRef<HTMLDivElement>(null);\n const [rect] = useMeasure(imageRef);\n const imageWidth = rect.width;\n const { width: windowWidth } = useWindowSize();\n const [isMobile] = useMediaQuery([BREAKPOINT_MD_QUERY]);\n\n const [sliderIndex, setSliderIndex] = useState(0);\n const [isOpen, setIsOpen] = useState(false);\n\n const numberOfItems = useMemo(\n () => slice.images.length,\n [slice.images.length]\n );\n\n const sliderItemsWidth = useMemo(\n () => numberOfItems * (imageWidth + ITEM_GAP) - ITEM_GAP,\n [imageWidth, numberOfItems]\n );\n\n const offsetLeft = useMemo(\n () => sliderIndex * (imageWidth + ITEM_GAP) * -1,\n [sliderIndex, imageWidth]\n );\n\n const allowScroll = useMemo(\n () => sliderItemsWidth + ITEM_GAP * 3 > windowWidth,\n\n [sliderItemsWidth, windowWidth]\n );\n\n const canMoveRight = useMemo(() => {\n const offsetRight = windowWidth - (sliderItemsWidth + offsetLeft);\n\n return offsetRight < MAX_OFFSET_RIGHT;\n }, [imageWidth, sliderIndex, sliderItemsWidth, windowWidth]);\n\n const canMoveLeft = useMemo(() => sliderIndex !== 0, [sliderIndex]);\n\n return (\n <DefaultSectionContainer>\n <SliderContainer ref={containerRef}>\n <SliderInnerContainer\n animate={{\n x: imageWidth * -sliderIndex,\n }}\n transition={{\n duration: 0.3,\n ease: 'easeInOut',\n }}\n imageCount={slice.images.length}\n >\n {slice.images.map((image, index) => (\n <ItemContainer key={image.id} ref={imageRef}>\n <Flex\n height=\"full\"\n width=\"full\"\n justifyContent=\"end\"\n flexDirection=\"column\"\n gap=\"2\"\n >\n <ImageContainer\n aspectRatio={getClosestRatio(\n image.img.img.data.attributes.width,\n image.img.img.data.attributes.height\n )}\n >\n <Image\n src={strapiMediaUrl(image.img.img, 'large')}\n alt={image.img.alt}\n fill\n style={{\n objectFit: image.img.objectFit || 'cover',\n cursor: isMobile ? 'unset' : 'pointer',\n }}\n onClick={() => {\n setSliderIndex(index);\n if (!isMobile) setIsOpen(true);\n }}\n />\n </ImageContainer>\n\n <Text lineClamp={3} height=\"72px\" fontSize=\"md\">\n {image.caption}\n </Text>\n </Flex>\n </ItemContainer>\n ))}\n </SliderInnerContainer>\n </SliderContainer>\n\n <Box\n display={['none', null, null, !!allowScroll ? 'flex' : 'none']}\n pointerEvents=\"none\"\n position=\"absolute\"\n top=\"calc(50% - var(--boemly-sizes-12))\"\n left=\"0\"\n width=\"full\"\n py=\"0\"\n px=\"32\"\n justifyContent=\"space-between\"\n >\n <Box>\n <AnimatePresence>\n {canMoveLeft && (\n <motion.div\n key=\"leftButton\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n >\n <IconButton\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex - 1)}\n aria-label=\"Move left\"\n pointerEvents=\"auto\"\n >\n <ArrowLeftIcon size={16} />\n </IconButton>\n </motion.div>\n )}\n </AnimatePresence>\n </Box>\n <Box>\n <AnimatePresence>\n {canMoveRight && (\n <motion.div\n key=\"rightButton\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n >\n <IconButton\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex + 1)}\n aria-label=\"Move right\"\n pointerEvents=\"auto\"\n >\n <ArrowRightIcon size={16} />\n </IconButton>\n </motion.div>\n )}\n </AnimatePresence>\n </Box>\n </Box>\n\n <FullScreenImage\n images={slice.images.map((image) => image.img)}\n currentIndex={sliderIndex}\n setCurrentIndex={setSliderIndex}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n />\n </DefaultSectionContainer>\n );\n};\n", "import { motion } from 'framer-motion';\nimport styled from '@emotion/styled';\nimport { BREAKPOINT_MD } from '../../constants/breakpoints';\nimport { Box } from 'boemly';\n\nexport const SliderContainer = styled(Box)`\n --mobile-image-width: calc(100vw - var(--boemly-spacing-24));\n --desktop-image-width: var(--boemly-sizes-md);\n\n width: var(--boemly-size-full);\n\n overflow-x: hidden;\n\n padding-left: max(\n var(--boemly-spacing-8),\n calc(50vw - var(--boemly-sizes-7xl) / 2 + var(--boemly-spacing-6))\n );\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n overflow-x: scroll;\n padding-left: max(\n var(--boemly-spacing-8),\n calc(50vw - var(--boemly-sizes-7xl) / 2 + var(--boemly-spacing-8))\n );\n }\n`;\n\ninterface SliderInnerContainerProps {\n imageCount: number;\n}\nexport const SliderInnerContainer = styled(\n motion.div\n)<SliderInnerContainerProps>`\n display: flex;\n gap: var(--boemly-spacing-6);\n\n width: fit-content;\n`;\n\nexport const ItemContainer = styled(Box)`\n width: var(--desktop-image-width);\n\n :last-of-type {\n margin-right: var(--boemly-spacing-8);\n }\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n width: var(--mobile-image-width);\n }\n`;\n\ninterface ImageContainerProps {\n aspectRatio: number;\n}\nexport const ImageContainer = styled(Box)<ImageContainerProps>`\n position: relative;\n\n max-height: var(--boemly-sizes-xl);\n height: calc(\n var(--desktop-image-width) /\n ${({ aspectRatio }: ImageContainerProps) => aspectRatio}\n );\n width: var(--desktop-image-width);\n\n border-radius: var(--boemly-radii-xl);\n\n & img {\n border-radius: var(--boemly-radii-xl);\n }\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n height: calc(\n var(--mobile-image-width) /\n ${({ aspectRatio }: ImageContainerProps) => aspectRatio}\n );\n width: var(--mobile-image-width);\n }\n`;\n", "const ALLOWED_RATIOS = [2 / 3, 1 / 1, 3 / 2, 2 / 1, 3 / 1, 4 / 1, 5 / 1]; // width / height\n\nexport const getClosestRatio = (width: number, height: number): number => {\n const ratio = width / height;\n\n let minDiff = Math.abs(ratio - ALLOWED_RATIOS[0]);\n let posMinDiff = 0;\n\n ALLOWED_RATIOS.forEach((allowedRatio, index) => {\n if (Math.abs(ratio - allowedRatio) < minDiff) {\n minDiff = Math.abs(ratio - allowedRatio);\n posMinDiff = index;\n }\n });\n\n return ALLOWED_RATIOS[posMinDiff];\n};\n", "import { FullWidthImageSlider } from './FullWidthImageSlider';\n\nexport default FullWidthImageSlider;\n", "import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n Grid,\n GridItem,\n SimpleGrid,\n Text,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\nexport interface SideBySideImagesProps {\n slice: {\n images: {\n id: number;\n caption: string;\n img: StrapiImage;\n }[];\n };\n}\nexport const SideBySideImages: React.FC<SideBySideImagesProps> = ({\n slice,\n}: SideBySideImagesProps) => (\n <DefaultSectionContainer>\n <Wrapper>\n <Grid templateColumns=\"repeat(12, 1fr)\" gap=\"4\">\n <GridItem colSpan={[12, null, null, 7]}>\n <SimpleGrid\n columns={[1, null, null, 2]}\n gap={['12', null, null, '6']}\n >\n {slice.images.map((image) => (\n <Box key={image.id}>\n <Box height=\"md\" position=\"relative\" borderRadius=\"xl\">\n <Image\n src={strapiMediaUrl(image.img.img, 'large')}\n alt={image.img.alt}\n fill\n style={{\n objectFit: image.img.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n <Text mt=\"3\" size=\"xsLowNormal\">\n {image.caption}\n </Text>\n </Box>\n ))}\n </SimpleGrid>\n </GridItem>\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n);\n", "import { SideBySideImages } from './SideBySideImages';\n\nexport default SideBySideImages;\n", "import React, { useContext } from 'react';\nimport {\n Box,\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Gradient,\n Spacer,\n Wrapper,\n} from 'boemly';\nimport StrapiButtonWithVariant from '../../models/strapi/StrapiButtonWithVariant';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport Image from 'next/image';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport { CDN_URI } from '../../constants/api';\nimport { IntlContext } from '../../components/ContextProvider';\n\ntype Variant = 'gray' | 'green' | 'white';\n\nenum CtaCardType {\n Left = 'left',\n CenterWithoutImage = 'centerWithoutImage',\n CenterWithImage = 'centerWithImage',\n Right = 'right',\n}\n\nexport interface CtaProps {\n slice: {\n tagline?: string;\n title?: string;\n subTitle?: string;\n variant: Variant;\n ctaCards: CtaCard[];\n };\n}\n\nexport interface CtaCard {\n id: number;\n tagline?: string;\n title: string;\n subTitle?: string;\n image?: StrapiImage;\n buttons?: StrapiButtonWithVariant[];\n variant: Variant;\n backgroundShape: boolean;\n textAlign: 'left' | 'right' | 'center';\n}\n\nconst STATES: Record<CtaCardType, Record<string, any>> = {\n left: {\n textAlign: 'left',\n paddingTagline: '0',\n paddingTitle: '0',\n justifyContent: 'space-between',\n buttonJustifyContent: 'start',\n textMarginLeft: ['0', null, null, null, '14'],\n textMarginRight: '0',\n },\n centerWithoutImage: {\n textAlign: 'center',\n paddingTagline: '28',\n paddingTitle: '20',\n justifyContent: 'center',\n buttonJustifyContent: 'center',\n textMarginLeft: '0',\n textMarginRight: '0',\n },\n centerWithImage: {\n textAlign: 'center',\n paddingTagline: '28',\n paddingTitle: '20',\n justifyContent: 'center',\n buttonJustifyContent: 'center',\n textMarginLeft: '0',\n textMarginRight: '0',\n },\n right: {\n textAlign: 'left',\n paddingTagline: '0',\n paddingTitle: '0',\n justifyContent: 'start',\n buttonJustifyContent: 'start',\n textMarginLeft: '0',\n textMarginRight: ['0', null, null, null, '10'],\n },\n};\n\nconst VARIANTS: Record<Variant, Record<string, Record<CtaCardType, string>>> = {\n gray: {\n backgroundColor: {\n left: 'primary.50',\n centerWithoutImage: 'primary.50',\n centerWithImage: 'primary.50',\n right: 'primary.50',\n },\n taglineColor: {\n left: 'primary.500',\n centerWithoutImage: 'primary.500',\n centerWithImage: 'white',\n right: 'primary.500',\n },\n titleColor: {\n left: 'black',\n centerWithoutImage: 'black',\n centerWithImage: 'white',\n right: 'black',\n },\n subTitleColor: {\n left: 'black',\n centerWithoutImage: 'black',\n centerWithImage: 'white',\n right: 'black',\n },\n },\n green: {\n backgroundColor: {\n left: 'primary.800',\n centerWithoutImage: 'primary.800',\n centerWithImage: 'primary.800',\n right: 'primary.800',\n },\n taglineColor: {\n left: 'white',\n centerWithoutImage: 'white',\n centerWithImage: 'white',\n right: 'white',\n },\n titleColor: {\n left: 'white',\n centerWithoutImage: 'white',\n centerWithImage: 'white',\n right: 'white',\n },\n subTitleColor: {\n left: 'white',\n centerWithoutImage: 'white',\n centerWithImage: 'white',\n right: 'white',\n },\n },\n white: {\n backgroundColor: {\n left: 'white',\n centerWithoutImage: 'white',\n centerWithImage: 'primary.800',\n right: 'white',\n },\n taglineColor: {\n left: 'primary.500',\n centerWithoutImage: 'primary.500',\n centerWithImage: 'white',\n right: 'primary.500',\n },\n titleColor: {\n left: 'black',\n centerWithoutImage: 'black',\n centerWithImage: 'white',\n right: 'black',\n },\n subTitleColor: {\n left: 'black',\n centerWithoutImage: 'black',\n centerWithImage: 'white',\n right: 'black',\n },\n },\n};\n\nconst getTypeOfCard = (ctaCard: CtaCard): CtaCardType => {\n if (ctaCard.textAlign === 'center') {\n if (ctaCard.image) {\n return CtaCardType.CenterWithImage;\n }\n return CtaCardType.CenterWithoutImage;\n }\n if (ctaCard.textAlign === 'left') {\n return CtaCardType.Left;\n }\n return CtaCardType.Right;\n};\n\nexport const Cta: React.FC<CtaProps> = ({ slice }: CtaProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <DefaultSectionContainer\n backgroundColor={VARIANTS[slice.variant].backgroundColor.left}\n title={slice.title}\n >\n <Wrapper>\n {slice.title ? (\n <>\n <Flex alignItems=\"center\" flexDirection=\"column\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n taglineProps={{\n color: VARIANTS[slice.variant].taglineColor.left,\n textAlign: 'center',\n maxWidth: '3xl',\n }}\n title={slice.title}\n titleProps={{\n color: VARIANTS[slice.variant].titleColor.left,\n textAlign: 'center',\n width: 'full',\n maxWidth: '3xl',\n }}\n text={slice.subTitle}\n textProps={{\n color: VARIANTS[slice.variant].subTitleColor.left,\n textAlign: 'center',\n maxWidth: '3xl',\n }}\n />\n </Flex>\n <Spacer height={['16', null, null, null, '20']} />\n </>\n ) : (\n <></>\n )}\n <Flex gap=\"4\" flexDirection=\"column\">\n {slice.ctaCards.map((ctaCard) => {\n const ctaCardType = getTypeOfCard(ctaCard);\n\n return (\n <Container\n backgroundColor={\n VARIANTS[ctaCard.variant].backgroundColor[ctaCardType]\n }\n key={ctaCard.id}\n position=\"relative\"\n elevation=\"none\"\n >\n {ctaCard.image &&\n ctaCardType === CtaCardType.CenterWithImage ? (\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"0\"\n width=\"full\"\n height=\"full\"\n borderRadius=\"xl\"\n overflow=\"hidden\"\n >\n <Image\n src={strapiMediaUrl(ctaCard.image.img, 'large')}\n alt={ctaCard.image.alt}\n fill\n style={{\n objectFit: ctaCard.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n <Gradient />\n </Box>\n ) : (\n <></>\n )}\n {ctaCard.backgroundShape ? (\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"0\"\n width=\"full\"\n height=\"full\"\n >\n <Image\n src={\n ctaCardType === CtaCardType.CenterWithImage ||\n ctaCard.variant === 'green'\n ? `${CDN_URI}/assets/v3/strapi-slices/shapes-dark.svg`\n : `${CDN_URI}/assets/v3/strapi-slices/shapes-light.svg`\n }\n alt={formatMessage({\n id: `sections.cta.backgroundShapes${\n ctaCardType === CtaCardType.CenterWithImage ||\n ctaCard.variant === 'green'\n ? 'Dark'\n : 'Light'\n }`,\n })}\n fill\n style={{\n objectFit: 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n\n <Flex\n flexDir={['column', null, null, null, 'row']}\n flexGrow=\"1\"\n gap={['8', null, null, null, '16']}\n justifyContent={STATES[ctaCardType].justifyContent}\n >\n {ctaCard.image && ctaCardType === CtaCardType.Right ? (\n <Box\n position=\"relative\"\n height={['3xs', null, null, null, 'auto']}\n minWidth={[null, null, null, null, '50%']}\n >\n <Image\n src={strapiMediaUrl(ctaCard.image.img, 'xLarge')}\n alt={ctaCard.image.alt}\n fill\n style={{\n objectFit: ctaCard.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n\n <Box\n zIndex=\"base\"\n marginLeft={STATES[ctaCardType].textMarginLeft}\n marginRight={STATES[ctaCardType].textMarginRight}\n maxWidth=\"3xl\"\n >\n <Spacer height={['0', null, null, null, '20']} />\n\n <DefaultSectionHeader\n tagline={ctaCard.tagline}\n taglineProps={{\n textAlign: STATES[ctaCardType].textAlign,\n color:\n VARIANTS[ctaCard.variant].taglineColor[ctaCardType],\n paddingX: [\n '0',\n null,\n null,\n null,\n STATES[ctaCardType].paddingTagline,\n ],\n }}\n title={ctaCard.title}\n titleProps={{\n fontFamily: 'heading',\n fontSize: '4xl',\n fontWeight: '600',\n lineHeight: '9',\n textAlign: STATES[ctaCardType].textAlign,\n paddingX: [\n '0',\n null,\n null,\n null,\n STATES[ctaCardType].paddingTitle,\n ],\n color:\n VARIANTS[ctaCard.variant].titleColor[ctaCardType],\n }}\n text={ctaCard.subTitle}\n textProps={{\n textAlign: STATES[ctaCardType].textAlign,\n color:\n VARIANTS[ctaCard.variant].subTitleColor[ctaCardType],\n }}\n />\n {ctaCard.buttons && ctaCard.buttons.length > 0 ? (\n <>\n <Spacer height=\"8\" />\n <Flex\n gap=\"2\"\n justifyContent={\n STATES[ctaCardType].buttonJustifyContent\n }\n >\n {ctaCard.buttons &&\n ctaCard.buttons.map((button) => (\n <StrapiLinkButton\n key={button.button.id}\n link={button.button}\n size=\"md\"\n variant={button.variant}\n component=\"Cta\"\n />\n ))}\n </Flex>\n </>\n ) : (\n <></>\n )}\n <Spacer height={['1', null, null, null, '20']} />\n </Box>\n {ctaCard.image && ctaCardType === CtaCardType.Left ? (\n <Box\n position=\"relative\"\n height={['3xs', null, null, null, 'auto']}\n minWidth={[null, null, null, null, '50%']}\n >\n <Image\n src={strapiMediaUrl(ctaCard.image.img, 'xLarge')}\n alt={ctaCard.image.alt}\n fill\n style={{\n objectFit: ctaCard.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n </Flex>\n </Container>\n );\n })}\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { Cta } from './Cta';\n\nexport default Cta;\n", "import React from 'react';\nimport { DefaultSectionContainer, Wrapper } from 'boemly';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiLink from '../../models/strapi/StrapiLink';\n\nexport interface CtaOnlyProps {\n slice: {\n button: StrapiLink;\n };\n}\n\nexport const CtaOnly: React.FC<CtaOnlyProps> = ({ slice }: CtaOnlyProps) => (\n <DefaultSectionContainer>\n <Wrapper>\n <StrapiLinkButton size=\"md\" link={slice.button} component=\"CtaOnly\" />\n </Wrapper>\n </DefaultSectionContainer>\n);\n", "import { CtaOnly } from './CtaOnly';\n\nexport default CtaOnly;\n", "import { useContext, useState } from 'react';\nimport {\n DefaultSectionContainer,\n Separator,\n Flex,\n GridItem,\n Heading,\n IconButton,\n SimpleGrid,\n Text,\n Wrapper,\n Box,\n} from 'boemly';\nimport { CheckIcon, LinkIcon } from '@phosphor-icons/react';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport StrapiGlossaryItem from '../../models/strapi/StrapiGlossaryItem';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface GlossaryProps {\n slice: {\n glossary_items: IStrapiData<StrapiGlossaryItem>[];\n };\n}\n\nexport const Glossary: React.FC<GlossaryProps> = ({ slice }: GlossaryProps) => {\n const { formatMessage } = useContext(IntlContext);\n const grouped: Record<string, StrapiGlossaryItem[]> = {};\n const [copiedItem, setCopiedItem] = useState<string>();\n\n slice.glossary_items\n .sort((a, b) => a.attributes.title.localeCompare(b.attributes.title))\n .forEach((curr) => {\n const index = curr.attributes.title.at(0)?.toUpperCase() || 'A';\n if (!grouped[index]) {\n grouped[index] = [];\n }\n grouped[index].push(curr.attributes);\n }, {});\n\n const handleAnchorClick = async (slug: string) => {\n if (\n typeof window !== 'undefined' &&\n window.location &&\n navigator.clipboard\n ) {\n const currentUrl = window.location.href.split('#')[0];\n await navigator.clipboard.writeText(`${currentUrl}#${slug}`);\n setCopiedItem(slug);\n\n setTimeout(() => {\n setCopiedItem(undefined);\n }, 1200);\n }\n };\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid>\n {Object.entries(grouped).map(([letter, items], index) => (\n <GridItem maxW=\"xl\" placeSelf=\"center\" key={letter}>\n <Heading size=\"3xl\" mb=\"8\">\n {letter}\n </Heading>\n\n <SimpleGrid gap=\"6\">\n {items.map((item) => (\n <GridItem key={item.slug}>\n <Flex mb=\"2\" gap=\"1.5\" alignItems=\"center\">\n <Heading\n wordBreak=\"break-word\"\n size=\"xl\"\n id={item.slug}\n scrollMarginTop=\"calc(var(--header-height) + var(--boemly-sizes-10))\"\n >\n {item.title}\n </Heading>\n <IconButton\n variant=\"ghost\"\n size=\"xs\"\n title={formatMessage({\n id: 'sections.glossary.copyButtonLabel',\n })}\n aria-label={formatMessage({\n id: 'sections.glossary.copyButtonLabel',\n })}\n onClick={async () => handleAnchorClick(item.slug)}\n >\n {copiedItem === item.slug ? (\n <CheckIcon size=\"16\" data-testid=\"check-icon\" />\n ) : (\n <LinkIcon size=\"16\" />\n )}\n </IconButton>\n </Flex>\n <Text color=\"black\" wordBreak=\"break-word\">\n {item.text}\n </Text>\n </GridItem>\n ))}\n </SimpleGrid>\n\n {index !== Object.keys(grouped).length - 1 && (\n <Flex justifyContent=\"center\" mt=\"10\" mb=\"10\">\n <Box maxW=\"xl\" width=\"full\">\n <Separator />\n </Box>\n </Flex>\n )}\n </GridItem>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { Glossary } from './Glossary';\n\nexport default Glossary;\n", "import React, { useContext, useCallback } from 'react';\nimport {\n Badge,\n BoemlyFormControl,\n Box,\n Button,\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Separator,\n Flex,\n LabelNumberPair,\n RichText,\n SimpleGrid,\n Spacer,\n useToken,\n Wrapper,\n Text,\n} from 'boemly';\nimport { Field, FieldProps, Form, Formik, FormikProps } from 'formik';\nimport { FPM_API_URI } from '../../constants/api';\nimport CheckoutForm from '../../models/forms/CheckoutForm';\nimport {\n MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY,\n MINIMUM_CONTRIBUTION_VALUE_IN_MONEY,\n} from '../../constants/domain';\nimport { IntlContext } from '../../components/ContextProvider';\nimport { useRouter } from 'next/router';\n\nexport interface ShopCheckoutProps {\n slice: {\n tagline?: string;\n title: string;\n text?: string;\n badge?: string;\n batchId: string;\n pricePerKg: number;\n couponId?: string;\n initialContributionValue: number;\n checkoutText: string;\n currency: 'EUR' | 'CHF';\n taxInPercent?: number;\n };\n}\n\nexport const ShopCheckout = ({\n slice,\n}: ShopCheckoutProps): React.JSX.Element => {\n const [primary50] = useToken('colors', ['primary.50']);\n const { formatMessage, formatNumber, locale } = useContext(IntlContext);\n const { push } = useRouter();\n\n const validateForm = useCallback(\n (values: CheckoutForm) => {\n const errors: Partial<{ contributionValue: string }> = {};\n\n if (!values.contributionValue) {\n errors.contributionValue = formatMessage({\n id: 'sections.shopCheckout.contributionValue.validation.empty',\n });\n } else if (\n values.contributionValue < MINIMUM_CONTRIBUTION_VALUE_IN_MONEY\n ) {\n errors.contributionValue = formatMessage({\n id: `sections.shopCheckout.contributionValue.validation.tooLow.${slice.currency}`,\n });\n } else if (\n values.contributionValue > MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY\n ) {\n errors.contributionValue = formatMessage({\n id: 'sections.shopCheckout.contributionValue.validation.tooHigh',\n });\n }\n\n return errors;\n },\n [locale]\n );\n\n const onSubmit = ({ contributionValue }: CheckoutForm) => {\n const checkoutURL = new URL(`${FPM_API_URI}/v1/webhooks/shop/checkout`);\n const currentURL = new URL(window.location.href);\n\n checkoutURL.searchParams.append('batchId', slice.batchId);\n\n checkoutURL.searchParams.append(\n 'quantity',\n Math.floor(contributionValue / slice.pricePerKg).toString()\n );\n\n checkoutURL.searchParams.append('cancelPath', currentURL.pathname);\n\n if (slice.couponId)\n checkoutURL.searchParams.append('couponId', slice.couponId);\n\n push(checkoutURL.toString());\n };\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n <Wrapper>\n <Flex\n flexDir={['column', null, null, null, 'row']}\n justifyContent=\"space-between\"\n alignItems={['left', null, null, null, 'center']}\n >\n <Box marginRight={['0', null, null, null, '36']} flexShrink={2}>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n </Box>\n <Container maxWidth=\"md\" padding=\"lg\" shadow=\"lg\">\n {slice.badge ? (\n <>\n <Badge\n colorPalette=\"green\"\n textTransform=\"none\"\n whiteSpace=\"unset\"\n >\n {slice.badge}\n </Badge>\n <Spacer height=\"3\" />\n </>\n ) : (\n <></>\n )}\n\n <RichText\n content={slice.checkoutText}\n textProps={{ color: 'gray.500' }}\n />\n\n <Spacer height=\"6\" />\n <Separator />\n <Spacer height=\"6\" />\n\n <LabelNumberPair\n label={formatMessage({ id: 'sections.shopCheckout.intro.price' })}\n number={`${formatNumber(slice.pricePerKg * 100, {\n style: 'currency',\n currency: slice.currency,\n })}/${formatNumber(100, {\n style: 'unit',\n unit: 'kilogram',\n })} CO\u2082`}\n caption={formatMessage({\n id: 'sections.shopCheckout.summary.price.taxNotIncluded',\n })}\n />\n\n <Spacer height=\"6\" />\n <Separator />\n <Spacer height=\"6\" />\n\n <Formik\n initialValues={{\n contributionValue: slice.initialContributionValue,\n }}\n validate={validateForm}\n onSubmit={onSubmit}\n >\n {({\n errors,\n touched,\n handleSubmit,\n values,\n }: FormikProps<CheckoutForm>) => {\n const summaryPrice =\n Math.floor(values.contributionValue / slice.pricePerKg) *\n slice.pricePerKg;\n\n return (\n <Form onSubmit={handleSubmit}>\n <Box width=\"full\">\n <Field name=\"contributionValue\">\n {({ field }: FieldProps) => (\n <BoemlyFormControl\n id=\"contributionValue\"\n size=\"md\"\n inputProps={{ type: 'number', ...field }}\n label={formatMessage({\n id: `sections.shopCheckout.contributionValue.label.${slice.currency}`,\n })}\n rightAddons={[\n <Text key=\"1\">\n {formatMessage({\n id: `sections.shopCheckout.contributionValue.unit.${slice.currency}`,\n })}\n </Text>,\n ]}\n isInvalid={\n !!errors.contributionValue &&\n touched.contributionValue\n }\n errorMessage={errors.contributionValue}\n />\n )}\n </Field>\n </Box>\n\n <Spacer height=\"6\" />\n\n <SimpleGrid columns={2} gap=\"4\">\n <LabelNumberPair\n label={formatMessage({\n id: 'sections.shopCheckout.summary.kg',\n })}\n number={`${formatNumber(\n Math.floor(\n values.contributionValue / slice.pricePerKg\n ),\n {\n style: 'unit',\n unit: 'kilogram',\n maximumFractionDigits: 0,\n }\n )} CO\u2082`}\n />\n <LabelNumberPair\n label={formatMessage({\n id: 'sections.shopCheckout.summary.price',\n })}\n number={formatNumber(summaryPrice, {\n style: 'currency',\n currency: slice.currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}\n caption={\n slice.taxInPercent &&\n slice.taxInPercent > 0 &&\n summaryPrice > 0\n ? formatMessage(\n {\n id: 'sections.shopCheckout.summary.price.taxIncluded',\n },\n {\n number: formatNumber(\n summaryPrice +\n summaryPrice * (slice.taxInPercent / 100),\n {\n style: 'currency',\n currency: slice.currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }\n ),\n }\n )\n : ''\n }\n />\n </SimpleGrid>\n\n <Spacer height=\"6\" />\n\n <Button type=\"submit\" width=\"full\">\n {formatMessage({ id: 'sections.shopCheckout.submit' })}\n </Button>\n </Form>\n );\n }}\n </Formik>\n </Container>\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "export const MINIMUM_CONTRIBUTION_VALUE_IN_MONEY = 10;\n\nexport const MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY = 10_000;\n", "import { ShopCheckout } from './ShopCheckout';\n\nexport default ShopCheckout;\n", "import React from 'react';\nimport {\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n Spacer,\n Text,\n} from 'boemly';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiLink from '../../models/strapi/StrapiLink';\n\nexport interface FactsProps {\n slice: {\n tagline?: string;\n title?: string;\n subTitle?: string;\n button?: StrapiLink;\n variant: 'gray' | 'green' | 'white';\n facts: { key: string; value: string }[];\n };\n}\n\nconst VARIANTS = {\n gray: {\n backgroundColor: 'primary.50',\n tagLineColor: 'primary.500',\n titleColor: 'black',\n subTitleColor: 'black',\n factKeyColor: 'gray.700',\n factValueColor: 'gray.700',\n },\n green: {\n backgroundColor: 'primary.800',\n tagLineColor: 'white',\n titleColor: 'white',\n subTitleColor: 'white',\n factKeyColor: 'whiteAlpha.900',\n factValueColor: 'white',\n },\n white: {\n backgroundColor: 'white',\n tagLineColor: 'primary.500',\n titleColor: 'black',\n subTitleColor: 'black',\n factKeyColor: 'gray.700',\n factValueColor: 'gray.700',\n },\n};\n\nexport const Facts: React.FC<FactsProps> = ({ slice }: FactsProps) => (\n <DefaultSectionContainer\n backgroundColor={VARIANTS[slice.variant].backgroundColor}\n flexDir=\"column\"\n textAlign=\"center\"\n justifyContent=\"space-between\"\n paddingX={['6', null, '8']}\n title={slice.title}\n >\n <>\n {slice.title && (\n <>\n <DefaultSectionHeader\n tagline={slice.tagline}\n text={slice.subTitle}\n title={slice.title}\n taglineProps={{\n color: VARIANTS[slice.variant].tagLineColor,\n textAlign: 'center',\n }}\n titleProps={{\n color: VARIANTS[slice.variant].titleColor,\n textAlign: 'center',\n maxW: '6xl',\n marginX: 'auto',\n }}\n textProps={{\n color: VARIANTS[slice.variant].subTitleColor,\n textAlign: 'center',\n maxW: '3xl',\n marginX: 'auto',\n }}\n />\n <Spacer height={['0', null, '12']} />\n </>\n )}\n <Flex\n justifyContent={slice.facts.length <= 4 ? 'center' : 'flex-start'}\n alignItems=\"center\"\n flexWrap=\"wrap\"\n mx={[null, null, null, '22', '28']}\n flexDir={['column', null, null, 'row']}\n gap={[null, null, null, '12']}\n >\n {slice.facts.map((fact) => (\n <Flex\n key={fact.key}\n flexDir=\"column\"\n width={[\n 'var(--boemly-sizes-full)',\n null,\n null,\n 'calc((var(--boemly-sizes-full) - var(--boemly-space-24))/ 3 )',\n ]}\n mt={['8', '8', '8', slice.facts.length > 3 ? '16' : '0']}\n >\n <Heading\n fontSize=\"6xl\"\n fontFamily=\"display\"\n lineHeight=\"10\"\n fontWeight=\"700\"\n color={VARIANTS[slice.variant].factValueColor}\n mb=\"2\"\n as=\"p\"\n >\n {fact.value}\n </Heading>\n\n <Text\n size=\"mdLowNormal\"\n color={VARIANTS[slice.variant].factKeyColor}\n >\n {fact.key}\n </Text>\n </Flex>\n ))}\n </Flex>\n\n {slice.button && (\n <>\n <Spacer height={['0', null, '20']} />\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n variant={slice.variant === 'green' ? 'outline' : 'solid'}\n component=\"Facts\"\n />\n </>\n )}\n </>\n </DefaultSectionContainer>\n);\n", "import { Facts } from './Facts';\n\nexport default Facts;\n", "import React, { useContext, useMemo } from 'react';\nimport {\n Text,\n Heading,\n Spacer,\n DatePersonPair,\n DefaultSectionHeader,\n DefaultSectionContainer,\n Wrapper,\n SimpleGrid,\n Box,\n Flex,\n useMediaQuery,\n useToken,\n} from 'boemly';\nimport Image from 'next/image';\nimport Link from 'next/link';\nimport { CaretRightIcon } from '@phosphor-icons/react';\nimport StrapiBlogPost from '../../models/strapi/StrapiBlogPost';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiCategory from '../../models/strapi/StrapiCategory';\nimport IStrapi from '../../models/strapi/IStrapi';\nimport { BREAKPOINT_LG_QUERY } from '../../constants/breakpoints';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { BlogItemContainer, ImageContainer } from '../Blog/styles';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface BlogCardsProps {\n slice: {\n tagline: string;\n title: string;\n subTitle: string;\n button?: StrapiLink;\n variant: 'white' | 'gray';\n blogPostCategory: IStrapi<IStrapiData<StrapiCategory> | null>;\n };\n blogPosts: IStrapiData<StrapiBlogPost>[];\n}\n\nconst VARIANTS = {\n white: {\n backgroundColor: 'white',\n },\n gray: {\n backgroundColor: 'primary.50',\n },\n};\n\nconst sortByCreatedAt = (\n a: IStrapiData<StrapiBlogPost>,\n b: IStrapiData<StrapiBlogPost>\n): number =>\n new Date(b.attributes.createdAt).getTime() -\n new Date(a.attributes.createdAt).getTime();\n\nexport const BlogCards: React.FC<BlogCardsProps> = ({\n slice,\n blogPosts,\n}: BlogCardsProps) => {\n const { formatDate } = useContext(IntlContext);\n const [mobile] = useMediaQuery([BREAKPOINT_LG_QUERY]);\n const [gray700] = useToken('colors', ['gray.700']);\n\n const sortedBlogPosts = useMemo(\n () => blogPosts.sort(sortByCreatedAt),\n [blogPosts]\n );\n\n const blogPostsToDisplay = useMemo(\n () =>\n slice.blogPostCategory?.data?.attributes.name\n ? sortedBlogPosts\n .filter(\n (blogPost) =>\n blogPost.attributes.category.data?.attributes.name ===\n slice.blogPostCategory?.data?.attributes.name\n )\n .slice(0, 3)\n : sortedBlogPosts.slice(0, 3),\n [sortedBlogPosts, slice]\n );\n\n return (\n <DefaultSectionContainer\n backgroundColor={VARIANTS[slice.variant].backgroundColor}\n title={slice.title}\n >\n <Wrapper>\n {mobile || !slice.button ? (\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n titleProps={{ maxW: '2xl' }}\n textProps={{ maxW: '2xl' }}\n />\n ) : (\n <Flex justifyContent=\"space-between\" alignItems=\"center\" gap=\"60\">\n <Box>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n />\n </Box>\n <Box minWidth=\"40\">\n <StrapiLinkButton\n link={slice.button}\n size=\"lg\"\n variant=\"outline\"\n rightIcon={<CaretRightIcon color={gray700} />}\n component=\"BlogCards\"\n />\n </Box>\n </Flex>\n )}\n <Spacer height=\"14\" />\n <SimpleGrid\n columns={[1, null, null, 3]}\n columnGap={4}\n rowGap={24}\n flexShrink=\"0\"\n >\n {blogPostsToDisplay.map((blogPost) => (\n <BlogItemContainer\n as={Link}\n href={`/blog/${blogPost.attributes.slug}`}\n data-testid=\"blog-item\"\n key={blogPost.id}\n >\n <ImageContainer>\n <Image\n src={strapiMediaUrl(blogPost.attributes.img.img, 'medium')}\n alt={blogPost.attributes.img.alt}\n fill\n style={{\n objectFit: blogPost.attributes.img.objectFit || 'cover',\n }}\n />\n </ImageContainer>\n <Box px=\"2\" py=\"8\">\n {blogPost.attributes.category && (\n <Text size=\"smMonoUppercase\" color=\"primary.800\" mb=\"2\">\n {blogPost.attributes.category.data?.attributes.name}\n </Text>\n )}\n <Heading size=\"lg\">{blogPost.attributes.title}</Heading>\n {blogPost.attributes.teaser && (\n <Text size=\"mdRegularNormal\" mt=\"2\">\n {blogPost.attributes.teaser}\n </Text>\n )}\n\n <Spacer height=\"4\" />\n\n <DatePersonPair\n date={formatDate(blogPost.attributes.createdAt)}\n person={\n blogPost.attributes.author.data\n ? {\n name: blogPost.attributes.author.data.attributes.name,\n image: (\n <Image\n src={strapiMediaUrl(\n blogPost.attributes.author.data.attributes.img\n .img,\n 'thumbnail'\n )}\n alt={\n blogPost.attributes.author.data.attributes.img\n .alt\n }\n fill\n style={{\n objectFit:\n blogPost.attributes.author.data.attributes.img\n .objectFit || 'cover',\n }}\n />\n ),\n }\n : undefined\n }\n />\n </Box>\n </BlogItemContainer>\n ))}\n </SimpleGrid>\n <>\n {mobile && slice.button && (\n <>\n <Box minWidth=\"40\" mt=\"6\">\n <StrapiLinkButton\n link={slice.button}\n size=\"lg\"\n variant=\"outline\"\n rightIcon={<CaretRightIcon color={gray700} />}\n component=\"BlogCards\"\n />\n </Box>\n </>\n )}\n </>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { BlogCards } from './BlogCards';\n\nexport default BlogCards;\n", "import React, { useEffect, useState } from 'react';\nimport { DefaultSectionContainer, Flex, Wrapper } from 'boemly';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport SmallCheckout from '../../components/portfolio/SmallCheckout';\nimport ProjectInfo from '../../components/portfolio/ProjectInfo';\nimport DocumentsDownloadList from '../../components/portfolio/DocumentsDownloadList';\nimport Contact from '../../components/portfolio/Contact';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport getFpmProjectById from '../../integrations/strapi/getFpmProjectById';\n\nexport interface ProjectFactsProps {\n project?: PortfolioProject;\n slice: {\n projectId: string;\n\n batchId?: string;\n currency?: 'EUR' | 'CHF';\n pricePerKg?: number;\n taxInPercent?: number;\n initialContributionValue?: number;\n checkoutText?: string;\n\n customTitle?: string;\n customSubtitle?: string;\n customButton?: StrapiLink;\n documentUrls?: StrapiLink[];\n\n areaSubtitle?: string;\n locationSubtitle?: string;\n startSubtitle?: string;\n timeSpanSubtitle?: string;\n projectTypeSubtitle?: string;\n projectDeveloperSubtitle?: string;\n verificationStandardSubtitle?: string;\n averageSellableAmountPerYearSubtitle?: string;\n riskBufferSubtitle?: string;\n buyCreditsSubtitle?: string;\n\n contactTitle?: string;\n contactText?: string;\n contactButton?: StrapiLink;\n contactAvatar?: StrapiImage;\n };\n}\n\nexport const ProjectFacts: React.FC<ProjectFactsProps> = ({\n slice,\n project,\n}: ProjectFactsProps) => {\n const [enhancedProject, setEnhancedProject] = useState<\n PortfolioProject | undefined\n >(project);\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n const fetchCompleteProjectData = async () => {\n if (project && project.id) {\n setIsLoading(true);\n try {\n const completeFpmProject = await getFpmProjectById(project.id);\n\n // Merge the complete FPM data with existing project data (preserving Strapi fields like slug, portfolioHost, thumbnail)\n const mergedProject: PortfolioProject = {\n ...completeFpmProject,\n slug: project.slug,\n portfolioHost: project.portfolioHost,\n thumbnail: project.thumbnail,\n };\n\n setEnhancedProject(mergedProject);\n } catch (error) {\n console.error('Error fetching complete project data:', error);\n // Fallback to original project data if fetch fails\n setEnhancedProject(project);\n } finally {\n setIsLoading(false);\n }\n }\n };\n\n fetchCompleteProjectData();\n }, [project]);\n\n if (!enhancedProject) {\n return (\n <>Invalid configuration, check if a project this id exists in the FPM</>\n );\n }\n\n if (isLoading) {\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <div>Loading project data...</div>\n </Wrapper>\n </DefaultSectionContainer>\n );\n }\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <Flex flexDir={['column', null, null, 'row']} gap=\"4\" width=\"full\">\n <ProjectInfo project={enhancedProject} subtitles={slice} />\n <Flex flexDir=\"column\" gap=\"4\" width=\"full\">\n {slice.documentUrls && slice.documentUrls.length > 0 && (\n <DocumentsDownloadList documentUrls={slice.documentUrls} />\n )}\n {slice.batchId &&\n slice.pricePerKg &&\n slice.currency &&\n slice.initialContributionValue ? (\n <SmallCheckout\n batchId={slice.batchId}\n checkoutText={slice.checkoutText}\n currency={slice.currency}\n initialContributionValue={slice.initialContributionValue}\n pricePerKg={slice.pricePerKg}\n title={slice.customTitle}\n subtitle={slice.customSubtitle}\n button={slice.customButton}\n taxInPercent={slice.taxInPercent}\n />\n ) : (\n (slice.contactTitle ||\n slice.contactText ||\n slice.contactButton ||\n slice.contactAvatar) && (\n <Contact\n title={slice.contactTitle}\n text={slice.contactText}\n button={slice.contactButton}\n avatar={slice.contactAvatar}\n />\n )\n )}\n </Flex>\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import React, { useCallback, useContext } from 'react';\nimport {\n BoemlyFormControl,\n Box,\n Button,\n Separator,\n Flex,\n Spacer,\n Text,\n} from 'boemly';\nimport {\n Field,\n FieldProps,\n Form,\n Formik,\n FormikErrors,\n FormikProps,\n} from 'formik';\nimport { useRouter } from 'next/router';\nimport Image from 'next/image';\nimport { StrapiLink } from '../../..';\nimport { IntlContext } from '../../ContextProvider';\nimport {\n MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY,\n MINIMUM_CONTRIBUTION_VALUE_IN_MONEY,\n} from '../../../constants/domain';\nimport { CDN_URI, FPM_API_URI } from '../../../constants/api';\nimport StrapiLinkButton from '../../StrapiLinkButton';\nimport SmallCheckoutForm from '../../../models/forms/SmallCheckoutForm';\n\nconst calculateTaxIncludedValue = (\n values: SmallCheckoutForm,\n taxInPercent: number\n) => {\n const value = parseInt(values.contributionValueCurrency);\n\n if (isNaN(value)) return 0;\n\n return value + value * (taxInPercent / 100);\n};\n\nexport interface SmallCheckoutProps {\n batchId: string;\n pricePerKg: number;\n initialContributionValue: number;\n taxInPercent?: number;\n checkoutText?: string;\n currency: 'EUR' | 'CHF';\n\n title?: string;\n subtitle?: string;\n button?: StrapiLink;\n}\n\nconst SmallCheckout = ({\n pricePerKg,\n currency,\n batchId,\n initialContributionValue,\n taxInPercent,\n checkoutText,\n title,\n subtitle,\n button,\n}: SmallCheckoutProps) => {\n const { formatNumber, formatMessage, locale } = useContext(IntlContext);\n const { push } = useRouter();\n\n const validateForm = useCallback(\n (values: SmallCheckoutForm) => {\n const errors: FormikErrors<SmallCheckoutForm> = {};\n const value = parseInt(values.contributionValueCurrency);\n if (!values.contributionValueCurrency || isNaN(value)) {\n errors.contributionValueCurrency = formatMessage({\n id: 'portfolio.smallCheckout.contributionValueCurrency.validation.empty',\n });\n } else if (value < MINIMUM_CONTRIBUTION_VALUE_IN_MONEY) {\n errors.contributionValueCurrency = formatMessage({\n id: `portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.${currency}`,\n });\n } else if (value > MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY) {\n errors.contributionValueCurrency = formatMessage({\n id: 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh',\n });\n }\n\n return errors;\n },\n [currency, locale]\n );\n\n const onSubmit = async ({ contributionValueCurrency }: SmallCheckoutForm) => {\n const checkoutURL = new URL(`${FPM_API_URI}/v1/webhooks/shop/checkout`);\n const currentURL = new URL(window.location.href);\n\n checkoutURL.searchParams.append('batchId', batchId);\n\n checkoutURL.searchParams.append(\n 'quantity',\n Math.floor(parseInt(contributionValueCurrency) / pricePerKg).toString()\n );\n\n checkoutURL.searchParams.append('cancelPath', currentURL.pathname);\n\n push(checkoutURL.toString());\n };\n\n return (\n <Flex\n width=\"full\"\n height=\"full\"\n borderRadius=\"xl\"\n background=\"primary.100\"\n padding=\"6\"\n direction=\"column\"\n >\n <Flex gap=\"2\" alignItems=\"end\" mb=\"6\">\n <Text color=\"black\" lineHeight=\"0\">\n {formatMessage(\n { id: 'unit.formatter.tonsCo2' },\n {\n number: (\n <Text as=\"span\" size=\"lgLowBold\" color=\"black\">\n {formatNumber(pricePerKg * 1000, {\n style: 'currency',\n currency,\n maximumFractionDigits: 0,\n })}\n </Text>\n ),\n }\n )}\n </Text>\n <Text size=\"smLowNormal\">\n {formatMessage({\n id: 'portfolio.smallCheckout.price.taxNotIncluded',\n })}\n </Text>\n </Flex>\n\n <Formik\n initialValues={{\n contributionValueCurrency: initialContributionValue.toString(),\n contributionValueTons: (\n initialContributionValue /\n pricePerKg /\n 1000\n ).toString(),\n }}\n validate={validateForm}\n onSubmit={onSubmit}\n >\n {({\n errors,\n touched,\n handleSubmit,\n setValues,\n values,\n }: FormikProps<SmallCheckoutForm>) => (\n <Form onSubmit={handleSubmit}>\n <Flex gap=\"4\">\n <Box width=\"full\">\n <Field name=\"contributionValueCurrency\">\n {({ field }: FieldProps) => (\n <BoemlyFormControl\n id=\"contributionValueCurrency\"\n size=\"md\"\n inputProps={{\n type: 'number',\n value: field.value || '',\n onChange: (e) => {\n const value = e.target.valueAsNumber;\n\n setValues({\n contributionValueCurrency: value.toString(),\n contributionValueTons: (\n value /\n pricePerKg /\n 1000\n ).toString(),\n });\n },\n }}\n label={formatMessage({\n id: `portfolio.smallCheckout.contributionValueCurrency.label.${currency}`,\n })}\n rightAddons={[\n <Text key=\"currencyUnit\">\n {formatMessage({\n id: `portfolio.smallCheckout.contributionValueCurrency.unit.${currency}`,\n })}\n </Text>,\n ]}\n isInvalid={\n !!errors.contributionValueCurrency &&\n touched.contributionValueCurrency\n }\n errorMessage={errors.contributionValueCurrency}\n />\n )}\n </Field>\n </Box>\n\n <Box width=\"full\">\n <Field name=\"contributionValueTons\">\n {({ field }: FieldProps) => (\n <BoemlyFormControl\n id=\"contributionValueTons\"\n size=\"md\"\n inputProps={{\n type: 'number',\n value: field.value || '',\n onChange: (e) => {\n const value = e.target.valueAsNumber;\n setValues({\n contributionValueCurrency: (\n value *\n pricePerKg *\n 1000\n ).toString(),\n contributionValueTons: value.toString(),\n });\n },\n }}\n label={formatMessage({\n id: 'portfolio.smallCheckout.contributionValueTons.label',\n })}\n rightAddons={[<Text key=\"tCO\u2082\">tCO\u2082</Text>]}\n isInvalid={\n !!errors.contributionValueTons &&\n touched.contributionValueTons\n }\n errorMessage={errors.contributionValueTons}\n />\n )}\n </Field>\n </Box>\n </Flex>\n {values.contributionValueCurrency &&\n taxInPercent &&\n taxInPercent > 0 && (\n <Text size=\"smLowNormal\" mt=\"2\">\n {formatMessage(\n { id: 'portfolio.smallCheckout.price.taxIncluded' },\n {\n number: formatNumber(\n calculateTaxIncludedValue(values, taxInPercent),\n {\n style: 'currency',\n currency,\n maximumFractionDigits: 2,\n }\n ),\n }\n )}\n </Text>\n )}\n\n <Spacer height=\"4\" />\n\n <Button type=\"submit\" width=\"full\">\n {formatMessage({ id: 'portfolio.smallCheckout.submitButton' })}\n </Button>\n </Form>\n )}\n </Formik>\n\n <Flex\n width=\"full\"\n justifyContent=\"center\"\n alignItems=\"center\"\n mt=\"6\"\n gap=\"2\"\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/globe-love-icon.svg`}\n alt=\"Icon\"\n width={20}\n height={20}\n />\n <Text size=\"smLowNormal\">{checkoutText}</Text>\n </Flex>\n\n <Separator my=\"6\" />\n\n <Flex width=\"full\" alignItems=\"center\" direction=\"column\">\n {title && (\n <Text size=\"smLowBold\" textAlign=\"center\" color=\"black\" mb=\"2\">\n {title}\n </Text>\n )}\n {subtitle && (\n <Text size=\"smRegularNormal\" textAlign=\"center\" mb=\"3\">\n {subtitle}\n </Text>\n )}\n {button && (\n <StrapiLinkButton\n link={{\n intercomLauncher: true,\n ...button,\n }}\n variant=\"outline\"\n component=\"SmallCheckout\"\n />\n )}\n </Flex>\n </Flex>\n );\n};\n\nexport default SmallCheckout;\n", "import SmallCheckout from './SmallCheckout';\n\nexport default SmallCheckout;\n", "import React, { useContext } from 'react';\nimport {\n Box,\n Container,\n Separator,\n Flex,\n Heading,\n LabelTextPair,\n SimpleGrid,\n Spacer,\n Tooltip,\n} from 'boemly';\nimport Image from 'next/image';\nimport convertAreaM2ToHa from '../../../utils/convertAreaM2ToHa';\nimport convertCo2AmountKgToTons from '../../../utils/convertCo2AmountKgToTons';\nimport CreditsAvailableBadge from '../../../components/CreditsAvailableBadge';\nimport PortfolioProject from '../../../models/PortfolioProject';\nimport {\n FORMAT_AS_HECTARE_CONFIG,\n FORMAT_AS_PERCENT_CONFIG,\n} from '../../../constants/formatter';\nimport getTimeSpanInYears from '../../../utils/getTimeSpanInYears';\nimport { IntlContext } from '../../ContextProvider';\n\nexport interface ProjectInfoProps {\n project: PortfolioProject;\n subtitles: {\n areaSubtitle?: string;\n locationSubtitle?: string;\n startSubtitle?: string;\n timeSpanSubtitle?: string;\n projectTypeSubtitle?: string;\n projectDeveloperSubtitle?: string;\n verificationStandardSubtitle?: string;\n averageSellableAmountPerYearSubtitle?: string;\n riskBufferSubtitle?: string;\n buyCreditsSubtitle?: string;\n };\n}\n\nexport const ProjectInfo: React.FC<ProjectInfoProps> = ({\n project,\n subtitles,\n}: ProjectInfoProps) => {\n const { formatMessage, formatNumber, formatDate } = useContext(IntlContext);\n return (\n <Container p=\"2\" width=\"full\">\n <Heading size=\"xl\" textAlign=\"left\">\n {formatMessage({ id: 'features.projectInfo.projectInfo.value' })}\n </Heading>\n\n <Spacer height=\"8\" />\n\n <SimpleGrid\n columns={[1, null, null, 2]}\n gap=\"8\"\n columnGap=\"10\"\n rowGap=\"8\"\n >\n {project.area && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.area',\n })}\n text={formatNumber(\n convertAreaM2ToHa(project.area.toString()),\n FORMAT_AS_HECTARE_CONFIG\n )}\n caption={subtitles.areaSubtitle}\n />\n </Box>\n )}\n\n {project.location && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.location',\n })}\n text={project.location}\n caption={subtitles.locationSubtitle}\n />\n </Box>\n )}\n\n {project.start && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.start',\n })}\n text={formatDate(project.start, {\n year: 'numeric',\n month: 'long',\n })}\n caption={subtitles.startSubtitle}\n />\n </Box>\n )}\n\n {project.start && project.end && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.timeSpan',\n })}\n text={formatMessage(\n {\n id: 'features.projectInfo.properties.year',\n },\n {\n years: getTimeSpanInYears(\n new Date(project.start),\n new Date(project.end)\n ),\n }\n )}\n caption={subtitles.timeSpanSubtitle}\n />\n </Box>\n )}\n </SimpleGrid>\n\n {project.projectType ||\n project.projectDeveloper ||\n project.verificationStandard ? (\n <>\n <Spacer height=\"6\" />\n <Separator />\n <Spacer height=\"6\" />\n </>\n ) : (\n <></>\n )}\n <SimpleGrid columns={[1, null, null, 2]} columnGap=\"10\" rowGap=\"8\">\n {project.projectType && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.projectType',\n })}\n text={project.projectType.title}\n caption={subtitles.projectTypeSubtitle}\n />\n </Box>\n )}\n {project.projectDeveloper && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.projectDeveloper',\n })}\n text={project.projectDeveloper.name}\n caption={subtitles.projectDeveloperSubtitle}\n />\n </Box>\n )}\n </SimpleGrid>\n\n {project.verificationStandard ? (\n <>\n {project.projectType || project.projectDeveloper ? (\n <Spacer height=\"6\" />\n ) : (\n <></>\n )}\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.verificationStandard.label',\n })}\n text={formatMessage({\n id: `features.projectInfo.properties.verificationStandard.value.${project.verificationStandard.id}`,\n defaultMessage: project.verificationStandard.id,\n })}\n caption={subtitles.verificationStandardSubtitle}\n />\n </Box>\n\n {project.defaultIssuer && (\n <Box position=\"relative\" width=\"14\" height=\"8\">\n <Image\n src={project.defaultIssuer.logoUrl}\n alt={`${project.defaultIssuer.name} logo`}\n fill\n style={{ objectFit: 'contain' }}\n />\n </Box>\n )}\n </Flex>\n </>\n ) : (\n <></>\n )}\n\n {(project.averageSellableAmountPerYear &&\n project.averageSellableAmountPerYear > 0) ||\n project.riskBuffer ? (\n <>\n <Spacer height=\"8\" />\n <Separator />\n <Spacer height=\"8\" />\n </>\n ) : (\n <></>\n )}\n <SimpleGrid columns={[1, null, null, 2]} columnGap=\"10\" rowGap=\"8\">\n {project.averageSellableAmountPerYear > 0 ? (\n <Tooltip\n content={formatMessage({\n id: 'features.projectInfo.properties.projectVolume.toolTip',\n })}\n >\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.projectVolume.label',\n })}\n text={formatMessage(\n {\n id: 'unit.formatter.tonsCo2PerYear',\n },\n {\n number: formatNumber(\n convertCo2AmountKgToTons(\n project.averageSellableAmountPerYear.toString()\n ),\n { maximumFractionDigits: 0 }\n ),\n }\n )}\n caption={subtitles.averageSellableAmountPerYearSubtitle}\n />\n </Box>\n </Tooltip>\n ) : (\n <Box>\n <CreditsAvailableBadge status={project.creditAvailability} />\n </Box>\n )}\n\n {project.riskBuffer && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.riskBuffer',\n })}\n text={formatNumber(\n project.riskBuffer / 100,\n FORMAT_AS_PERCENT_CONFIG\n )}\n caption={subtitles.riskBufferSubtitle}\n />\n </Box>\n )}\n </SimpleGrid>\n\n {project.averageSellableAmountPerYear > 0 ? (\n <Box mt=\"2\">\n <CreditsAvailableBadge status={project.creditAvailability} />\n </Box>\n ) : (\n <></>\n )}\n </Container>\n );\n};\n", "const convertAreaM2ToHa = (areaInM2: string): number =>\n parseInt(areaInM2, 10) / 10000;\n\nexport default convertAreaM2ToHa;\n", "const convertCo2AmountKgToTons = (amount: string): number =>\n parseInt(amount, 10) / 1000;\n\nexport default convertCo2AmountKgToTons;\n", "const getTimeSpanInYears = (start: Date, end: Date) => {\n const monthsDifference = end.getMonth() - start.getMonth();\n const yearsDifference = end.getFullYear() - start.getFullYear();\n\n if (monthsDifference > 4) {\n return yearsDifference + 1;\n }\n if (monthsDifference < -4) {\n return yearsDifference - 1;\n }\n return yearsDifference;\n};\n\nexport default getTimeSpanInYears;\n", "import { ProjectInfo } from './ProjectInfo';\n\nexport default ProjectInfo;\n", "import React, { useContext } from 'react';\nimport StrapiLink from '../../../models/strapi/StrapiLink';\nimport {\n Center,\n Container,\n Flex,\n Heading,\n IconButton,\n Spacer,\n Text,\n} from 'boemly';\nimport { DownloadSimpleIcon, FilePdfIcon } from '@phosphor-icons/react';\nimport Link from 'next/link';\nimport { IntlContext } from '../../ContextProvider';\n\nexport interface DocumentsDownloadListProps {\n documentUrls: StrapiLink[];\n}\n\nexport const DocumentsDownloadList: React.FC<DocumentsDownloadListProps> = ({\n documentUrls,\n}: DocumentsDownloadListProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <Container p=\"2\">\n <Heading size=\"xl\" textAlign=\"left\">\n {formatMessage({\n id: 'features.portfolio.documentsDownloadList.projectDocuments',\n })}\n </Heading>\n\n <Flex flexDir=\"column\">\n {documentUrls.map((documentUrl) => (\n <Flex\n justifyContent=\"space-between\"\n alignItems=\"center\"\n mt=\"6\"\n key={documentUrl.text}\n >\n <Flex alignItems=\"center\">\n <Center\n w=\"8\"\n h=\"8\"\n borderRadius=\"full\"\n borderWidth=\"1px\"\n borderColor=\"grey.200\"\n >\n <FilePdfIcon />\n </Center>\n\n <Spacer width=\"4\" />\n\n <Flex flexDir=\"column\">\n <Text size=\"smMonoNormal\">PDF</Text>\n <Text size=\"mdLowBold\" color=\"black\" textAlign=\"left\">\n {documentUrl.text}\n </Text>\n </Flex>\n </Flex>\n\n <Spacer width=\"32\" />\n\n <IconButton\n variant=\"outline\"\n aria-label={formatMessage({\n id: 'features.portfolio.documentsDownloadList.downloadDocument',\n })}\n size=\"sm\"\n asChild\n >\n <Link href={documentUrl.url || '#'}>\n <DownloadSimpleIcon />\n </Link>\n </IconButton>\n </Flex>\n ))}\n </Flex>\n </Container>\n );\n};\n", "import { DocumentsDownloadList } from './DocumentsDownloadList';\n\nexport default DocumentsDownloadList;\n", "import React from 'react';\nimport StrapiImage from '../../../models/strapi/StrapiImage';\nimport StrapiLink from '../../../models/strapi/StrapiLink';\nimport strapiMediaUrl from '../../../utils/strapiMediaUrl';\nimport { Text, Heading, Flex, Box, Container } from 'boemly';\nimport Image from 'next/image';\nimport StrapiLinkButton from '../../../components/StrapiLinkButton';\n\nexport interface ContactProps {\n avatar?: StrapiImage;\n title?: string;\n text?: string;\n button?: StrapiLink;\n}\n\nexport const Contact: React.FC<ContactProps> = ({\n avatar,\n title,\n text,\n button,\n}: ContactProps) => (\n <Container backgroundColor=\"primary.100\" border=\"none\" p=\"8\" height=\"full\">\n <Flex\n flexDir=\"column\"\n justifyContent=\"center\"\n alignItems=\"center\"\n height=\"full\"\n >\n {avatar ? (\n <Box\n position=\"relative\"\n width=\"20\"\n height=\"20\"\n borderRadius=\"full\"\n overflow=\"hidden\"\n >\n <Image\n src={strapiMediaUrl(avatar.img, 'small')}\n alt={avatar.alt}\n fill\n objectFit={avatar.objectFit}\n />\n </Box>\n ) : (\n <></>\n )}\n {title ? (\n <Heading\n mt=\"6\"\n size=\"md\"\n fontWeight=\"500\"\n textAlign=\"center\"\n color=\"black\"\n >\n {title}\n </Heading>\n ) : (\n <></>\n )}\n {text ? (\n <Text mt=\"2\" size=\"smRegularNormal\" textAlign=\"center\">\n {text}\n </Text>\n ) : (\n <></>\n )}\n {button ? (\n <StrapiLinkButton\n mt=\"6\"\n link={button}\n size=\"md\"\n variant=\"outline\"\n component=\"Contact\"\n />\n ) : (\n <></>\n )}\n </Flex>\n </Container>\n);\n", "import { Contact } from './Contact';\n\nexport default Contact;\n", "import FPMProject from '../../models/fpm/FPMProject';\nimport fpmClient from '../fpmClient';\n\nconst getFpmProjectById = async (projectId: string): Promise<FPMProject> => {\n const fpmResponse = await fpmClient.get<FPMProject>(\n `/public/projects/${projectId}`\n );\n\n return fpmResponse.data;\n};\n\nexport default getFpmProjectById;\n", "import { ProjectFacts } from './ProjectFacts';\n\nexport default ProjectFacts;\n", "import React from 'react';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport StrapiCustomerStory from '../../models/strapi/StrapiCustomerStory';\nimport { Box, DefaultSectionContainer, SimpleGrid, Wrapper } from 'boemly';\nimport CustomerCard from '../../components/CustomerCard';\nimport CustomerQuoteCard from '../../components/CustomerQuoteCard';\nimport LogoCard from '../../components/LogoCard';\n\nexport interface CustomerStoriesProps {\n slice: {\n customer_stories: IStrapiData<StrapiCustomerStory>[];\n };\n customerStories: IStrapiData<StrapiCustomerStory>[];\n}\n\nexport const CustomerStories = ({\n slice,\n customerStories,\n}: CustomerStoriesProps): React.JSX.Element => {\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2, 3]} gap=\"6\">\n {slice.customer_stories.map((customerStoryRef, index) => {\n const customerStory: IStrapiData<StrapiCustomerStory> | undefined =\n customerStories.find(\n (cs) => cs.attributes.slug === customerStoryRef.attributes.slug\n );\n if (!customerStory) {\n return null;\n }\n return (\n <Box key={`${customerStoryRef.id}-${index}`}>\n {customerStoryRef.attributes.variant === 'customerCard' && (\n <CustomerCard customerStory={customerStory.attributes} />\n )}\n {customerStoryRef.attributes.variant === 'quoteCard' && (\n <CustomerQuoteCard customerStory={customerStory.attributes} />\n )}\n {customerStoryRef.attributes.variant === 'logoCard' && (\n <LogoCard customerStory={customerStory.attributes} />\n )}\n </Box>\n );\n })}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { Container, Center, Heading, Button, Box, Text, Flex } from 'boemly';\nimport React, { useContext } from 'react';\nimport StrapiCustomerStory from '../../models/strapi/StrapiCustomerStory';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport Image from 'next/image';\nimport { IntlContext } from '../../components/ContextProvider';\nimport Link from 'next/link';\n\nexport interface CustomerCardProps {\n customerStory: StrapiCustomerStory;\n}\nexport const CustomerCard = ({\n customerStory,\n}: CustomerCardProps): React.JSX.Element => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <Container padding=\"none\" height=\"full\">\n <Flex flexDir=\"column\" height=\"full\">\n <Center height=\"24\" backgroundColor=\"primary.50\" borderTopRadius=\"xl\">\n {customerStory.cardImage && (\n <Box position=\"relative\" height=\"12\" width=\"12\">\n <Image\n src={strapiMediaUrl(customerStory.cardImage.img, 'medium')}\n alt={customerStory.cardImage.alt}\n fill\n style={{\n objectFit: customerStory.cardImage.objectFit,\n }}\n />\n </Box>\n )}\n </Center>\n <Box px=\"6\" pt=\"8\" pb=\"6\" mb=\"auto\">\n {customerStory.customerCardCustomerIndustry && (\n <Text size=\"xsMonoUppercase\" color=\"gray.500\" mb=\"2\">\n {customerStory.customerCardCustomerIndustry}\n </Text>\n )}\n {customerStory.title && (\n <Heading size=\"md\" fontWeight=\"500\">\n {customerStory.title}\n </Heading>\n )}\n </Box>\n <Box px=\"6\" pt=\"8\" pb=\"6\">\n <Link href={`/customer-stories/${customerStory.slug}`}>\n <Button variant=\"outline\" size=\"sm\">\n {formatMessage({ id: 'sections.customerCard.more' })}\n </Button>\n </Link>\n </Box>\n </Flex>\n </Container>\n );\n};\n", "import { CustomerCard } from './CustomerCard';\n\nexport default CustomerCard;\n", "import { Container, Heading, Button, Box, Text } from 'boemly';\nimport React, { useContext } from 'react';\nimport StrapiCustomerStory from '../../models/strapi/StrapiCustomerStory';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport Image from 'next/image';\nimport { IntlContext } from '../../components/ContextProvider';\nimport Link from 'next/link';\n\nexport interface CustomerQuoteCardProps {\n customerStory: StrapiCustomerStory;\n}\n\nexport const CustomerQuoteCard = ({\n customerStory,\n}: CustomerQuoteCardProps): React.JSX.Element => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <Container p=\"1\" backgroundColor=\"primary.100\" height=\"full\">\n {customerStory.cardImage ? (\n <Box\n position=\"relative\"\n height=\"12\"\n width=\"12\"\n borderRadius=\"full\"\n overflow=\"hidden\"\n >\n <Image\n src={strapiMediaUrl(customerStory.cardImage.img, 'medium')}\n alt={customerStory.cardImage.alt}\n fill\n style={{\n objectFit: customerStory.cardImage.objectFit,\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n <Box>\n <Box my=\"8\">\n <Heading size=\"md\" fontWeight=\"500\">\n {customerStory.customerName}\n </Heading>\n <Text fontSize=\"md\">{customerStory.quoteCardCustomerTitle}</Text>\n </Box>\n <Text fontSize=\"md\" color=\"black\">\n {customerStory.quoteCardQuote}\n </Text>\n <Link href={`/customer-stories/${customerStory.slug}`}>\n <Button variant=\"outline\" size=\"sm\" mt=\"8\">\n {formatMessage({ id: 'sections.customerQuoteCard.more' })}\n </Button>\n </Link>\n </Box>\n </Container>\n );\n};\n", "import { CustomerQuoteCard } from './CustomerQuoteCard';\n\nexport default CustomerQuoteCard;\n", "import { Box, Container, Flex } from 'boemly';\nimport StrapiCustomerStory from '../../models/strapi/StrapiCustomerStory';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport Image from 'next/image';\nimport React from 'react';\nimport Link from 'next/link';\n\nexport interface LogoCardProps {\n customerStory: StrapiCustomerStory;\n}\nexport const LogoCard = ({ customerStory }: LogoCardProps) => {\n if (customerStory.cardImage) {\n return (\n <Container height=\"full\" backgroundColor=\"primary.50\">\n <Flex justifyContent=\"center\" height=\"full\" padding=\"4\">\n <Box position=\"relative\" height=\"12\" width=\"36\" marginY=\"auto\">\n <Link href={`/customer-stories/${customerStory.slug}`}>\n <Image\n src={strapiMediaUrl(customerStory.cardImage.img, 'medium')}\n alt={customerStory.cardImage.alt}\n fill\n style={{\n objectFit: customerStory.cardImage.objectFit,\n }}\n />\n </Link>\n </Box>\n </Flex>\n </Container>\n );\n }\n return <></>;\n};\n", "import { LogoCard } from './LogoCard';\n\nexport default LogoCard;\n", "import { CustomerStories } from './CustomerStories';\n\nexport default CustomerStories;\n", "import React, { useContext } from 'react';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport {\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Wrapper,\n Text,\n Flex,\n Box,\n Spacer,\n Separator,\n Heading,\n Badge,\n SimpleGrid,\n} from 'boemly';\nimport Image from 'next/image';\nimport { CaretRightIcon } from '@phosphor-icons/react';\nimport { Icon } from './Icon';\nimport { CDN_URI } from '../../constants/api';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface ComparisonProps {\n slice: {\n title?: string;\n subTitle?: string;\n tagline?: string;\n\n comparisonCards: ComparisonCard[];\n };\n}\n\nexport interface ComparisonCard {\n id: number;\n title: string;\n subTitle: string;\n badge?: string;\n variant: 'gray' | 'green' | 'white';\n image?: StrapiImage;\n button?: StrapiLink;\n factTitle?: string;\n factSubtitle?: string;\n lists: {\n id: string;\n title: string;\n items: { id: string; text: string; icon: 'bullet' | 'check' | 'cross' }[];\n }[];\n}\n\nconst VARIANTS = {\n gray: {\n backgroundColor: 'primary.50',\n textColor: 'black',\n subTitleColor: 'gray.500',\n factColor: 'primary.800',\n dividerColor: 'gray.200',\n },\n green: {\n backgroundColor: 'primary.800',\n textColor: 'white',\n subTitleColor: 'whiteAlpha.900',\n factColor: 'white',\n dividerColor: 'whiteAlpha.200',\n },\n white: {\n backgroundColor: 'white',\n textColor: 'black',\n subTitleColor: 'gray.500',\n factColor: 'primary.800',\n dividerColor: 'gray.200',\n },\n};\n\nexport const Comparison: React.FC<ComparisonProps> = ({\n slice,\n}: ComparisonProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n {slice.title ? (\n <>\n <Flex alignItems=\"center\" flexDirection=\"column\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n textProps={{ maxW: '2xl', textAlign: 'center' }}\n titleProps={{\n textAlign: 'center',\n maxWidth: '3xl',\n }}\n taglineProps={{ textAlign: 'center', maxWidth: '3xl' }}\n />\n </Flex>\n <Spacer height=\"12\" />\n </>\n ) : (\n <></>\n )}\n <SimpleGrid\n columns={[1, null, null, null, slice.comparisonCards.length]}\n gap=\"4\"\n >\n {slice.comparisonCards.map((comparisonCard) => (\n <Container\n boxShadow={comparisonCard.variant === 'green' ? 'xl' : 'base'}\n border={\n comparisonCard.variant === 'green' ? 'primary.800' : undefined\n }\n zIndex=\"base\"\n key={comparisonCard.id}\n position=\"relative\"\n elevation=\"none\"\n p=\"3\"\n backgroundColor={VARIANTS[comparisonCard.variant].backgroundColor}\n >\n {comparisonCard.variant === 'green' ? (\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"0\"\n width=\"full\"\n height=\"full\"\n zIndex=\"-1\"\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/shapes-comparison.svg`}\n alt={formatMessage({\n id: 'sections.comparison.backgroundShapes',\n })}\n fill\n style={{\n objectFit: 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n <Flex flexDir=\"column\" gap=\"4\">\n {comparisonCard.image && (\n <Box position=\"relative\" height=\"7\" width=\"100%\">\n <Image\n src={strapiMediaUrl(comparisonCard.image.img, 'small')}\n alt={comparisonCard.image.alt}\n fill\n style={{\n objectFit: comparisonCard.image.objectFit,\n }}\n />\n </Box>\n )}\n <Flex gap=\"2\" alignItems=\"center\" flexWrap=\"wrap\">\n <Heading\n size=\"xl\"\n color={VARIANTS[comparisonCard.variant].textColor}\n whiteSpace=\"pre-line\"\n >\n {comparisonCard.title}\n </Heading>\n {comparisonCard.badge && (\n <Badge\n backgroundColor=\"green.100\"\n borderRadius=\"md\"\n whiteSpace=\"pre-line\"\n >\n {comparisonCard.badge}\n </Badge>\n )}\n </Flex>\n </Flex>\n <Spacer height=\"4\" />\n <Text\n size=\"smRegularNormal\"\n color={VARIANTS[comparisonCard.variant].subTitleColor}\n >\n {comparisonCard.subTitle}\n </Text>\n\n {comparisonCard.factTitle ||\n comparisonCard.factSubtitle ||\n comparisonCard.button ? (\n <>\n <Spacer height=\"6\" />\n <Flex flexDir=\"column\">\n {comparisonCard.factTitle && (\n <>\n <Text\n color={VARIANTS[comparisonCard.variant].factColor}\n size=\"lgMonoNormal\"\n >\n {comparisonCard.factTitle}\n </Text>\n <Text\n color={VARIANTS[comparisonCard.variant].factColor}\n size=\"smLowNormal\"\n >\n {comparisonCard.factSubtitle}\n </Text>\n </>\n )}\n {comparisonCard.button && (\n <StrapiLinkButton\n mt=\"6\"\n link={comparisonCard.button}\n size=\"md\"\n variant=\"outline\"\n rightIcon={<CaretRightIcon size={16} weight=\"bold\" />}\n component=\"Comparison\"\n />\n )}\n </Flex>\n </>\n ) : (\n <></>\n )}\n <>\n {comparisonCard.lists.map((list) => (\n <Box key={list.id}>\n <Separator\n my=\"8\"\n color={VARIANTS[comparisonCard.variant].dividerColor}\n />\n <Text\n size=\"smLowBold\"\n color={VARIANTS[comparisonCard.variant].textColor}\n >\n {list.title}\n </Text>\n <>\n {list.items.map((item) => (\n <Box key={item.id}>\n <Spacer height=\"4\" />\n <Flex gap=\"4\" alignItems=\"center\">\n <Box>\n <Icon\n variant={comparisonCard.variant}\n icon={item.icon}\n />\n </Box>\n <Text\n size=\"smLowNormal\"\n color={VARIANTS[comparisonCard.variant].textColor}\n >\n {item.text}\n </Text>\n </Flex>\n </Box>\n ))}\n </>\n </Box>\n ))}\n </>\n </Container>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\nexport default Comparison;\n", "import React from 'react';\nimport { CheckIcon, XIcon } from '@phosphor-icons/react';\nimport { Box } from 'boemly';\n\nexport interface IconProps {\n variant: 'gray' | 'green' | 'white';\n icon: string;\n}\n\nconst BULLET_POINT_VARIANTS = {\n gray: { bulletPointColor: 'black' },\n green: { bulletPointColor: 'white' },\n white: { bulletPointColor: 'black' },\n};\n\nexport const Icon = ({ variant, icon }: IconProps): React.JSX.Element => {\n switch (icon) {\n case 'check':\n return <CheckIcon size={20} color=\"var(--boemly-colors-primary-500)\" />;\n case 'cross':\n return <XIcon size={20} color=\"var(--boemly-colors-red-500)\" />;\n default:\n return (\n <Box\n data-testid=\"bullet-point-box\"\n borderRadius=\"full\"\n backgroundColor={BULLET_POINT_VARIANTS[variant].bulletPointColor}\n width=\"2\"\n height=\"2\"\n margin=\"1.5\"\n />\n );\n }\n};\nexport default Icon;\n", "import { Comparison } from './Comparison';\n\nexport default Comparison;\n", "import React, { useEffect, useState } from 'react';\nimport {\n DefaultSectionContainer,\n Flex,\n Heading,\n Spacer,\n Box,\n useMediaQuery,\n useToken,\n} from 'boemly';\nimport Image from 'next/image';\nimport useEmblaCarousel from 'embla-carousel-react';\nimport { useWindowSize } from '@reactuses/core';\n\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport AutoScroll from 'embla-carousel-auto-scroll';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\nimport { getClosestRatio } from '../../utils/getClosestRatio';\nimport { CarouselInnerContainer, LogoGrid } from './styles';\n\nexport interface CarouselMarqueeBannerProps {\n slice: {\n title?: string;\n logos: StrapiImage[];\n };\n}\n\n// Separate component containing the actual logic\nconst CarouselMarqueeBannerContent: React.FC<CarouselMarqueeBannerProps> = ({\n slice,\n}) => {\n const [primary50] = useToken('colors', ['primary.50']);\n const { width: windowWidth } = useWindowSize();\n const hasEnoughLogosForLoop = slice.logos.length >= 5;\n const LOOP_ARRAY_LENGTH = windowWidth > 2000 ? 5 : 4;\n\n // Duplicate Logos to create a full loop\n const logosToRender = hasEnoughLogosForLoop\n ? Array.from({ length: LOOP_ARRAY_LENGTH }, () => slice.logos).flat()\n : slice.logos;\n\n const [isMobile] = useMediaQuery([BREAKPOINT_MD_QUERY]);\n\n // Carousel setup\n const [emblaRef] = useEmblaCarousel(\n {\n loop: hasEnoughLogosForLoop,\n align: 'start',\n containScroll: 'trimSnaps',\n dragFree: true,\n },\n hasEnoughLogosForLoop\n ? [\n AutoScroll({\n playOnInit: true,\n speed: isMobile ? 0.5 : 1,\n stopOnInteraction: false,\n stopOnMouseEnter: false,\n stopOnFocusIn: false,\n }),\n ]\n : []\n );\n\n const renderLogos = (): React.ReactNode => {\n if (!hasEnoughLogosForLoop) {\n return (\n <LogoGrid>\n {slice.logos.map((logo, index) => (\n <Box\n key={`${logo.id}-${index}`}\n flexShrink={0}\n transform=\"translate3d(0, 0, 0)\"\n >\n <Flex\n height=\"full\"\n width=\"full\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <Box\n position=\"relative\"\n height={isMobile ? '16' : '36'}\n width={`calc(var(--boemly-sizes-10)\n * ${getClosestRatio(\n logo.img.data.attributes.width,\n logo.img.data.attributes.height\n )})`}\n >\n <Image\n src={strapiMediaUrl(logo.img, 'large')}\n alt={logo.alt}\n fill\n style={{\n objectFit: logo.objectFit || 'contain',\n filter: 'grayscale(100%)',\n }}\n />\n </Box>\n </Flex>\n </Box>\n ))}\n </LogoGrid>\n );\n }\n\n return (\n <Box width=\"full\" overflow=\"hidden\" ref={emblaRef} cursor=\"pointer\">\n <CarouselInnerContainer logoCount={slice.logos.length}>\n {logosToRender.map((logo, index) => (\n <Box\n key={`${logo.id}-${index}`}\n flexShrink={0}\n transform=\"translate3d(0, 0, 0)\"\n >\n <Flex\n height=\"full\"\n width=\"full\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <Box\n position=\"relative\"\n height={isMobile ? '16' : '36'}\n width={`calc(var(--boemly-sizes-10) * ${getClosestRatio(\n logo.img.data.attributes.width,\n logo.img.data.attributes.height\n )})`}\n >\n <Image\n src={strapiMediaUrl(logo.img, 'large')}\n alt={logo.alt}\n fill\n style={{\n objectFit: logo.objectFit || 'contain',\n filter: 'grayscale(100%)',\n }}\n />\n </Box>\n </Flex>\n </Box>\n ))}\n </CarouselInnerContainer>\n </Box>\n );\n };\n\n return (\n <DefaultSectionContainer backgroundColor={primary50}>\n <>\n {slice.title ? (\n <>\n <Flex alignItems=\"center\" flexDirection=\"column\">\n <Heading size=\"md\" fontWeight=\"500\">\n {slice.title}\n </Heading>\n </Flex>\n <Spacer height=\"12\" minHeight=\"12\" />\n </>\n ) : null}\n\n {renderLogos()}\n </>\n </DefaultSectionContainer>\n );\n};\n\n// Lazy-rendering the child component after client-side hydration\nexport const CarouselMarqueeBanner: React.FC<CarouselMarqueeBannerProps> = ({\n slice,\n}: CarouselMarqueeBannerProps) => {\n const [showChild, setShowChild] = useState(false);\n\n useEffect(() => {\n setShowChild(true); // Hydrate the component after the client-side is ready\n }, []);\n\n if (!showChild) {\n return <div />;\n }\n\n return <CarouselMarqueeBannerContent slice={slice} />;\n};\n\nexport default CarouselMarqueeBanner;\n", "import { motion } from 'framer-motion';\nimport styled from '@emotion/styled';\nimport { BREAKPOINT_MD } from '../../constants/breakpoints';\n\ninterface CarouselInnerContainerProps {\n logoCount: number;\n}\n\nexport const CarouselInnerContainer = styled(\n motion.div\n)<CarouselInnerContainerProps>`\n display: flex;\n justify-content: ${(props) =>\n props.logoCount < 5 ? 'center' : 'flex-start'};\n gap: var(--boemly-spacing-24);\n padding-right: var(--boemly-spacing-24);\n padding-left: var(--boemly-spacing-24);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n width: calc(\n ${(props) => props.logoCount} *\n (var(--boemly-sizes-16) + var(--boemly-spacing-6))\n );\n justify-content: ${(props) =>\n props.logoCount < 5 ? 'center' : 'flex-start'};\n }\n`;\n\nexport const LogoGrid = styled(motion.div)`\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--boemly-spacing-24);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-gap: var(--boemly-spacing-6);\n }\n`;\n", "import { CarouselMarqueeBanner } from './CarouselMarqueeBanner';\n\nexport default CarouselMarqueeBanner;\n", "import React, { useContext } from 'react';\nimport {\n Button,\n Box,\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n RichText,\n SimpleGrid,\n Spacer,\n Text,\n Wrapper,\n useMediaQuery,\n BoemlyTag,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { CDN_URI } from '../../constants/api';\nimport { IntlContext } from 'react-intl';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\nimport { useState } from 'react';\nimport FullScreenImage from '../../components/FullScreenImage';\n\nexport interface TimelineProps {\n slice: {\n title: string;\n text?: string;\n tagline?: string;\n\n timelineItems: TimelineItem[];\n };\n}\n\nexport interface TimelineItem {\n id: number;\n tagline?: string;\n title: string;\n text?: string;\n badge?: { text: string; variant: 'orange' | 'green' | 'red' | 'gray' };\n logo?: StrapiImage;\n icon?: StrapiImage;\n image?: StrapiImage;\n button?: StrapiLink;\n backgroundShapes?: boolean;\n}\n\nexport const Timeline: React.FC<TimelineProps> = ({ slice }: TimelineProps) => {\n const { formatMessage } = useContext(IntlContext);\n const [visibleItems, setVisibleItems] = useState(3);\n const [mobile] = useMediaQuery([BREAKPOINT_MD_QUERY]);\n const [isOpen, setIsOpen] = useState(false);\n\n const showMoreItems = () => {\n setVisibleItems((prevVisibleItems) => prevVisibleItems + 3);\n };\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <Flex flexDir={['column', null, 'row']}>\n <Box\n width={['full', null, '50%']}\n position={[null, null, 'sticky']}\n top={['16', null, '32']}\n height=\"full\"\n paddingRight={[null, null, '28']}\n >\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n {mobile && (\n <>\n <Spacer height=\"10\" />\n <Flex justifyContent=\"center\">\n <Box\n borderRadius=\"full\"\n width=\"3\"\n height=\"3\"\n margin=\"1.5\"\n backgroundColor=\"gray\"\n />\n </Flex>\n <Box\n overflow=\"visible\"\n borderRight=\"dashed 1px var(--boemly-colors-gray-200)\"\n transform=\"translateX(-50%)\"\n position=\"relative\"\n height=\"20\"\n />\n </>\n )}\n </Box>\n <Box\n overflow=\"visible\"\n maxWidth={['full', null, '50%']}\n borderLeft={[\n null,\n null,\n 'dashed 1px var(--boemly-colors-gray-200)',\n ]}\n position=\"relative\"\n width=\"full\"\n >\n <Flex flexDir=\"column\" overflow=\"visible\" gap={['8', null, '8']}>\n {slice.timelineItems.slice(0, visibleItems).map((item, index) => (\n <SimpleGrid\n gap={['4', null, '4']}\n key={`${item.id}-${index}`}\n columns={[1, null, 2]}\n alignContent=\"center\"\n gridTemplateColumns={[null, null, '1fr 16fr']}\n position=\"relative\"\n >\n <Flex\n alignItems=\"center\"\n justifyContent={['center', null, 'flex-start']}\n >\n <Box\n position=\"absolute\"\n transform={[null, null, 'translateX(-50%)']}\n backgroundColor=\"white\"\n >\n {item.icon ? (\n <Box padding=\"2\">\n <Image\n src={strapiMediaUrl(item.icon.img, 'xSmall')}\n alt={item.icon.alt}\n width=\"21\"\n height=\"21\"\n />\n </Box>\n ) : (\n <Box padding=\"2\">\n <Box\n borderRadius=\"full\"\n backgroundColor=\"primary.800\"\n width=\"2\"\n height=\"2\"\n />\n </Box>\n )}\n {mobile && (\n <Box\n overflow=\"visible\"\n borderRight=\"dashed 1px var(--boemly-colors-gray-200)\"\n transform=\"translateX(-50%)\"\n position=\"relative\"\n height=\"10\"\n />\n )}\n </Box>\n </Flex>\n <Container\n p={[null, null, null, '3']}\n zIndex=\"base\"\n position=\"relative\"\n elevation=\"none\"\n >\n {item.backgroundShapes ? (\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"0\"\n width=\"full\"\n height=\"full\"\n zIndex=\"-1\"\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/timeline-shapes.svg`}\n alt={formatMessage({\n id: 'sections.timeline.backgroundShapes',\n })}\n fill\n style={{\n objectFit: 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n\n <Flex flexDir=\"column\">\n <Flex\n alignItems=\"flex-start\"\n justifyContent=\"space-between\"\n >\n <Box>\n {item.tagline && (\n <>\n <Text color=\"primary.800\" size=\"smMonoUppercase\">\n {item.tagline}\n </Text>\n <Spacer height=\"2\" />\n </>\n )}\n </Box>\n <Flex>\n {item.badge && (\n <BoemlyTag\n colorPalette={item.badge.variant}\n borderRadius=\"md\"\n >\n {item.badge.text}\n </BoemlyTag>\n )}\n {item.logo && (\n <Box position=\"relative\" height=\"8\" width=\"16\">\n <Image\n src={strapiMediaUrl(item.logo.img, 'small')}\n alt={item.logo.alt}\n fill\n style={{\n objectFit: item.logo.objectFit,\n }}\n />\n </Box>\n )}\n </Flex>\n </Flex>\n <Heading\n size=\"lg\"\n mt={['6', null, null, '3']}\n maxWidth=\"xs\"\n >\n {item.title}\n </Heading>\n {item.text && (\n <Box mt=\"3\">\n <RichText content={item.text} />\n </Box>\n )}\n {item.button && (\n <Box textAlign=\"left\">\n <Spacer height=\"4\" />\n <StrapiLinkButton\n link={item.button}\n size=\"sm\"\n variant=\"outline\"\n component=\"Timeline\"\n />\n </Box>\n )}\n {item.image ? (\n <>\n <Box\n position=\"relative\"\n mt=\"4\"\n height={['2xs', null, null, null, '48']}\n minWidth={[null, null, null, null, '50%']}\n >\n <Image\n src={strapiMediaUrl(item.image.img, 'xLarge')}\n alt={item.image.alt}\n fill\n style={{\n cursor: mobile ? 'unset' : 'pointer',\n objectFit: item.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n onClick={() => !mobile && setIsOpen(true)}\n />\n <FullScreenImage\n images={[item.image]}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n />\n </Box>\n </>\n ) : (\n <></>\n )}\n </Flex>\n </Container>\n {mobile && index + 1 < slice.timelineItems.length && (\n <Box\n overflow=\"visible\"\n borderRight=\"dashed 1px var(--boemly-colors-gray-200)\"\n transform=\"translateX(-50%)\"\n position=\"relative\"\n height=\"20\"\n />\n )}\n </SimpleGrid>\n ))}\n </Flex>\n {visibleItems < slice.timelineItems.length && (\n <>\n <Box\n width=\"full\"\n height={['36', null, null, '64']}\n position=\"absolute\"\n bottom=\"0\"\n zIndex=\"1\"\n background=\"linear-gradient(180deg, rgba(255, 255, 255, 0.00) 0%, rgba(255, 255, 255, 0.98) 76.54%, #FFF 100%)\"\n />\n <Box\n bottom=\"0\"\n textAlign=\"center\"\n zIndex=\"overlay\"\n position=\"relative\"\n >\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={showMoreItems}\n m={[null, null, null, '8']}\n >\n {formatMessage({ id: 'sections.timeline.showMoreButton' })}\n </Button>\n </Box>\n </>\n )}\n </Box>\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { Timeline } from './Timeline';\n\nexport default Timeline;\n", "import {\n DefaultSectionContainer,\n Wrapper,\n Spacer,\n DefaultSectionHeader,\n SimpleGrid,\n Box,\n Button,\n Flex,\n Center,\n Text,\n BoemlyTag,\n Select,\n} from 'boemly';\n\nimport React, {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport EventCard from '../../components/EventCard';\nimport { SWRInfiniteKeyLoader } from 'swr/infinite';\nimport useEvents from '../../models/hooks/useEvents';\nimport {\n STRAPI_DEFAULT_POPULATE_DEPTH,\n STRAPI_URI,\n} from '../../constants/strapi';\nimport { IntlContext } from '../../components/ContextProvider';\nimport { mutate } from 'swr/_internal';\nimport { EventType } from '../../models/strapi/StrapiEvent';\nimport StrapiEvent from '../../models/strapi/StrapiEvent';\nimport IStrapiData from '../../models/strapi/IStrapiData';\n\nconst UPCOMING_BATCH_SIZE = 6;\nconst PAST_BATCH_SIZE = 2;\n\ninterface FiltersProps {\n eventTypes: EventType[];\n languages: {\n id: number;\n language: string;\n countryCode: string;\n }[];\n}\n\nexport interface EventsProps {\n slice: {\n upcomingTitle?: string;\n upcomingDescription?: string;\n pastTitle: string;\n pastDescription?: string;\n filterSearch?: boolean;\n };\n}\n\nconst enum Sort {\n NEWEST_FIRST = 'newest',\n OLDEST_FIRST = 'oldest',\n}\n\ninterface EventOption {\n value: string;\n label: string;\n}\n\nexport const Events: React.FC<EventsProps> = ({ slice }: EventsProps) => {\n const { formatMessage, locale } = useContext(IntlContext);\n const [eventTypeFilter, setEventTypeFilter] = useState([] as string[]);\n const [languageFilter, setLanguageFilter] = useState([] as string[]);\n const [sort, setSort] = useState([Sort.NEWEST_FIRST] as string[]);\n\n const [allEventTypeOptions, setAllEventTypeOptions] = useState<EventOption[]>(\n []\n );\n const [allLanguageOptions, setAllLanguageOptions] = useState<EventOption[]>(\n []\n );\n\n const now = new Date().toISOString();\n\n const buildEventsUrl = (\n index: any,\n batchSize: number,\n startFilter: string\n ) => {\n const url = new URL(`/treely-events`, STRAPI_URI);\n url.searchParams.append(\n 'pagination[start]',\n (index * batchSize).toString()\n );\n url.searchParams.append('pagination[limit]', batchSize.toString());\n url.searchParams.append(startFilter, now);\n url.searchParams.append('locale', locale);\n url.searchParams.append('pLevel', STRAPI_DEFAULT_POPULATE_DEPTH);\n\n if (sort[0] === Sort.OLDEST_FIRST) {\n url.searchParams.append('sort', 'start:asc');\n } else {\n url.searchParams.append('sort', 'start:desc');\n }\n\n if (eventTypeFilter.length) {\n eventTypeFilter.forEach((filter, i) => {\n url.searchParams.append(\n `filters[$or][${i}][eventTypes][eventType]`,\n filter\n );\n });\n }\n\n if (languageFilter.length) {\n languageFilter.forEach((filter, i) => {\n url.searchParams.append(\n `filters[$or][${eventTypeFilter.length + i}][languages][language]`,\n filter\n );\n });\n }\n return `/treely-events` + url.search;\n };\n\n const getUpcomingKey: SWRInfiniteKeyLoader = useCallback(\n (index) =>\n buildEventsUrl(index, UPCOMING_BATCH_SIZE, 'filters[start][$gte]'),\n [eventTypeFilter, languageFilter, sort]\n );\n\n const getPastKey: SWRInfiniteKeyLoader = useCallback(\n (index) => buildEventsUrl(index, PAST_BATCH_SIZE, 'filters[start][$lt]'),\n [eventTypeFilter, languageFilter, sort]\n );\n\n const {\n data: upcomingData,\n isLoading: isLoadingUpcoming,\n isLoadingMore: isLoadingMoreUpcoming,\n canLoadMore: canLoadMoreUpcoming,\n loadMore: loadMoreUpcoming,\n } = useEvents({ getKey: getUpcomingKey, batchSize: UPCOMING_BATCH_SIZE });\n\n const {\n data: pastData,\n isLoading: isLoadingPast,\n isLoadingMore: isLoadingMorePast,\n canLoadMore: canLoadMorePast,\n loadMore: loadMorePast,\n } = useEvents({ getKey: getPastKey, batchSize: PAST_BATCH_SIZE });\n\n const processEvents = (data: any) => {\n return (\n data?.flatMap((d: any) => d?.body?.data)?.filter((t: any) => !!t) || []\n );\n };\n\n // Process upcoming events\n const upcomingEvents = useMemo(() => {\n return processEvents(upcomingData);\n }, [upcomingData]);\n\n // Process past events\n const pastEvents = useMemo(() => {\n return processEvents(pastData);\n }, [pastData]);\n\n // Function to fetch all possible options\n const fetchAllOptions = useCallback(async () => {\n const url = new URL(`/treely-events`, STRAPI_URI);\n url.searchParams.append('locale', locale);\n url.searchParams.append('pLevel', STRAPI_DEFAULT_POPULATE_DEPTH);\n\n const response = await fetch(\n `${STRAPI_URI}/api/treely-events${url.search}`,\n {\n headers: {\n 'Strapi-Response-Format': 'v4',\n },\n }\n );\n const data = await response.json();\n\n const events = data?.data || [];\n\n // Extract all event types\n const allEventTypes = new Set<string>();\n events.forEach((event: any) => {\n if (event?.attributes?.eventTypes) {\n event.attributes.eventTypes.forEach((item: any) => {\n allEventTypes.add(item.eventType);\n });\n }\n });\n\n // Extract all languages\n const allLanguages = new Set<string>();\n events.forEach((event: any) => {\n if (event?.attributes?.languages) {\n event.attributes.languages.forEach((item: any) => {\n allLanguages.add(item.language);\n });\n }\n });\n\n // Update state with all options\n setAllEventTypeOptions(\n Array.from(allEventTypes).map((value) => ({ value, label: value }))\n );\n\n setAllLanguageOptions(\n Array.from(allLanguages).map((value) => ({ value, label: value }))\n );\n }, [locale]);\n\n // Fetch all options when component mounts\n useEffect(() => {\n fetchAllOptions();\n }, [fetchAllOptions]);\n\n const removeFilter = (\n filterType: keyof FiltersProps,\n valueToRemove: string\n ) => {\n if (filterType === 'eventTypes') {\n setEventTypeFilter((prev) =>\n prev.filter((item) => item !== valueToRemove)\n );\n } else if (filterType === 'languages') {\n setLanguageFilter((prev) =>\n prev.filter((item) => item !== valueToRemove)\n );\n }\n };\n\n useEffect(() => {\n mutate(getUpcomingKey);\n }, [eventTypeFilter, languageFilter, sort]);\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n {slice.upcomingTitle ? (\n <>\n <DefaultSectionHeader\n title={slice.upcomingTitle}\n text={slice.upcomingDescription}\n titleProps={{ maxW: '3xl' }}\n textProps={{ maxW: '3xl' }}\n />\n <Spacer height=\"10\" />\n </>\n ) : (\n <></>\n )}\n {slice.filterSearch && (upcomingEvents || pastEvents) ? (\n <>\n <Flex\n justifyContent=\"space-between\"\n direction={['column-reverse', null, null, 'row']}\n alignItems=\"baseline\"\n gap=\"4\"\n >\n <Flex\n direction=\"column\"\n width=\"full\"\n justifyContent=\"start\"\n gap=\"4\"\n >\n {/* Filter section */}\n <Flex\n direction={['column', null, null, 'row']}\n gap=\"4\"\n justifyContent=\"start\"\n >\n <Box position=\"relative\" width={['full', null, null, '56']}>\n <Select\n isMultiple={true}\n isSearchable={true}\n id=\"eventTypeFilter\"\n size=\"md\"\n placeholder={formatMessage({\n id: 'sections.events.eventsFilter.eventType',\n })}\n searchPlaceholder={formatMessage({\n id: 'sections.events.eventsFilter.searchPlaceholder',\n })}\n options={allEventTypeOptions}\n value={eventTypeFilter ?? []}\n onChange={(selected: string[]) => {\n setEventTypeFilter(selected);\n }}\n />\n </Box>\n <Box position=\"relative\" width={['full', null, null, '56']}>\n <Select\n isMultiple={true}\n isSearchable={true}\n id=\"languageFilter\"\n size=\"md\"\n placeholder={formatMessage({\n id: 'sections.events.eventsFilter.language',\n })}\n searchPlaceholder={formatMessage({\n id: 'sections.events.eventsFilter.searchPlaceholder',\n })}\n options={allLanguageOptions}\n value={languageFilter ?? []}\n onChange={(selected: string[]) => {\n setLanguageFilter(selected);\n }}\n />\n </Box>\n </Flex>\n\n {/* Filter Tags */}\n <Box display=\"flex\" flexWrap=\"wrap\" minHeight=\"6\" gap=\"2\">\n {eventTypeFilter.map((eventType) => {\n const event = allEventTypeOptions.find(\n (option) => option.value === eventType\n );\n return (\n <BoemlyTag\n key={eventType}\n isClosable={true}\n onClose={() => removeFilter('eventTypes', eventType)}\n >\n {event?.label}\n </BoemlyTag>\n );\n })}\n\n {languageFilter.map((singleLanguage) => {\n const language = allLanguageOptions.find(\n (option) => option.value === singleLanguage\n );\n return (\n <BoemlyTag\n key={singleLanguage}\n isClosable={true}\n onClose={() =>\n removeFilter('languages', singleLanguage)\n }\n >\n {language?.label}\n </BoemlyTag>\n );\n })}\n </Box>\n </Flex>\n {/* Sort Section */}\n <Box display=\"flex\" gap=\"1px\" width=\"52\" alignItems=\"center\">\n <Text size=\"smLowNormal\" color=\"black\" width=\"20\">\n Sort by:\n </Text>\n <Select\n isMultiple={false}\n borderColor=\"white\"\n value={[sort[0]]}\n placeholder={sort[0]}\n onChange={(selected: string[]) => setSort(selected)}\n options={[\n {\n label: formatMessage({\n id: `sections.events.eventsFilter.sortBy.${Sort.NEWEST_FIRST}`,\n }),\n value: Sort.NEWEST_FIRST,\n },\n {\n label: formatMessage({\n id: `sections.events.eventsFilter.sortBy.${Sort.OLDEST_FIRST}`,\n }),\n value: Sort.OLDEST_FIRST,\n },\n ]}\n />\n </Box>\n </Flex>\n\n <Spacer height={['8', null, null, '16']} />\n </>\n ) : (\n <></>\n )}\n\n {(!upcomingEvents || upcomingEvents.length === 0) &&\n !isLoadingUpcoming ? (\n <Center>\n {formatMessage({ id: 'sections.events.noUpcomingEvents' })}\n </Center>\n ) : (\n // List of upcoming events\n <SimpleGrid\n columns={[1, null, null, null, null, 2]}\n columnGap=\"6\"\n gap=\"6\"\n flexShrink=\"0\"\n mb={['10', null, null, '20']}\n placeItems=\"center\"\n >\n {upcomingEvents.map((event: IStrapiData<StrapiEvent>) => (\n <Box key={event.id} width=\"full\" height=\"full\">\n <EventCard event={event.attributes} />\n </Box>\n ))}\n </SimpleGrid>\n )}\n <Flex justifyContent=\"center\">\n {!isLoadingUpcoming && canLoadMoreUpcoming && (\n <Button\n onClick={() => {\n loadMoreUpcoming();\n }}\n variant=\"solid\"\n loading={isLoadingMoreUpcoming}\n >\n {formatMessage({ id: 'sections.events.loadMore' })}\n </Button>\n )}\n </Flex>\n </Wrapper>\n\n <Spacer height={['10', null, null, '28']} />\n\n <Box background=\"primary.50\" pt={['8', null, null, '24']}>\n <Wrapper>\n <DefaultSectionHeader\n title={slice.pastTitle}\n text={slice.pastDescription}\n titleProps={{ maxW: '3xl' }}\n textProps={{ maxW: '3xl' }}\n />\n\n <Spacer height=\"10\" />\n\n {(!pastEvents || pastEvents.length === 0) && !isLoadingPast ? (\n <>\n <Center>\n {formatMessage({ id: 'sections.events.noPastEvents' })}\n </Center>\n <Spacer height=\"24\" />\n </>\n ) : (\n // List of past events\n <SimpleGrid\n columns={[1, null, null, null, null, 2]}\n columnGap=\"6\"\n gap=\"6\"\n flexShrink=\"0\"\n placeItems=\"center\"\n mb={['10', null, null, '20']}\n >\n {pastEvents.map((event: IStrapiData<StrapiEvent>) => (\n <Box key={event.id} height=\"full\" width=\"full\">\n <EventCard event={event.attributes} />\n </Box>\n ))}\n </SimpleGrid>\n )}\n <Flex justifyContent=\"center\">\n {!isLoadingPast && canLoadMorePast && (\n <Button\n mb=\"20\"\n onClick={() => {\n loadMorePast();\n }}\n variant=\"solid\"\n loading={isLoadingMorePast}\n >\n {formatMessage({ id: 'sections.events.loadMore' })}\n </Button>\n )}\n </Flex>\n </Wrapper>\n </Box>\n </DefaultSectionContainer>\n );\n};\n", "import React, { useContext, useState } from 'react';\nimport {\n Text,\n Box,\n Flex,\n Heading,\n Tooltip,\n useMediaQuery,\n Button,\n BoemlyTag,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiLinkButton from '../StrapiLinkButton';\nimport {\n BowlFoodIcon,\n CalendarBlankIcon,\n CaretDownIcon,\n CaretRightIcon,\n CaretUpIcon,\n ChalkboardTeacherIcon,\n ConfettiIcon,\n HandshakeIcon,\n HeadsetIcon,\n InfoIcon,\n LaptopIcon,\n MapPinLineIcon,\n PersonSimpleWalkIcon,\n ProjectorScreenChartIcon,\n StarIcon,\n UsersThreeIcon,\n WebcamIcon,\n} from '@phosphor-icons/react';\nimport getCountryFlag from '../../utils/getCountryFlag';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\nimport StrapiEvent, { EventType } from '../../models/strapi/StrapiEvent';\nimport { IntlContext } from '../ContextProvider';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport isSameDate from '../../utils/isSameDate';\n\nexport interface EventCardProps {\n event: StrapiEvent;\n}\n\nconst MAX_LENGTH = 120;\nconst LOCATION_MAX_LENGTH = 28;\n\nconst getEventIcon = (eventType: string): React.JSX.Element => {\n switch (eventType) {\n case EventType.WEBINAR:\n return <WebcamIcon size={12} />;\n case EventType.CONFERENCE:\n return <HeadsetIcon size={12} />;\n case EventType.MEET_UP:\n return <UsersThreeIcon size={12} />;\n case EventType.FOREST_WALK:\n return <PersonSimpleWalkIcon size={12} />;\n case EventType.PARTNER_EVENT:\n return <HandshakeIcon size={12} />;\n case EventType.LUNCH_AND_LEARN:\n return <BowlFoodIcon size={12} />;\n case EventType.FAIR:\n return <ChalkboardTeacherIcon size={12} />;\n case EventType.FESTIVAL:\n return <ConfettiIcon size={12} />;\n case EventType.ROADSHOW:\n return <ProjectorScreenChartIcon size={12} />;\n default:\n return <InfoIcon size={12} weight=\"fill\" />;\n }\n};\n\nexport const EventCard = ({ event }: EventCardProps): React.JSX.Element => {\n const { formatDate, formatNumber, formatMessage } = useContext(IntlContext);\n const [isExpanded, setIsExpanded] = useState(false);\n const [mobile] = useMediaQuery([BREAKPOINT_MD_QUERY]);\n\n const toggleText = () => {\n setIsExpanded(!isExpanded);\n };\n\n const isLocationTooLong =\n (event.location?.length ?? 0) >= LOCATION_MAX_LENGTH;\n\n return (\n <Box\n borderRadius={['xl', null, null, '2xl']}\n height=\"full\"\n width=\"full\"\n border=\"1px solid var(--boemly-colors-gray-200)\"\n background=\"white\"\n >\n <Box\n position=\"relative\"\n width=\"full\"\n height={['32', null, null, '44']}\n borderTopRadius={['xl', null, null, '2xl']}\n css={{\n '& span, div, img': {\n borderTopLeftRadius: 'inherit',\n borderTopRightRadius: 'inherit',\n },\n }}\n >\n <Image\n src={strapiMediaUrl(event.image?.img, 'medium')}\n alt={event.image?.alt}\n fill\n style={{\n objectFit: event.image?.objectFit || 'cover',\n }}\n />\n\n <Box\n position=\"absolute\"\n top={['6', null, null, '8']}\n right={['6', null, null, '8']}\n zIndex=\"1\"\n width={['12', null, null, '16']}\n height={['12', null, null, '16']}\n >\n <Image\n src={strapiMediaUrl(event.logo.img, 'medium')}\n alt={event.logo.alt}\n fill\n style={{\n objectFit: event.logo.objectFit || 'contain',\n borderRadius: 'var(--boemly-radii-md)',\n border:\n '1px solid, var(--whiteAlpha-700, rgba(255, 255, 255, 0.64))',\n }}\n />\n </Box>\n </Box>\n <Flex\n flexDir=\"column\"\n p={['6', null, null, '8']}\n h=\"calc(var(--boemly-sizes-full) - var(--boemly-sizes-44))\"\n >\n <Flex flexDir=\"row\" mb=\"4\" gap=\"2\" flexWrap=\"wrap\">\n {event.recommended ? (\n <Flex mb={['2', null, null, '0']}>\n <BoemlyTag backgroundColor=\"green.600\">\n <Flex alignItems=\"center\" gap=\"1\" whiteSpace=\"nowrap\">\n <StarIcon size={12} weight=\"fill\" color=\"white\" />\n <Text size=\"xsLowBold\" color=\"white\">\n {formatMessage({\n id: 'sections.eventCard.recommendedEvent',\n })}\n </Text>\n </Flex>\n </BoemlyTag>\n </Flex>\n ) : (\n <></>\n )}\n <Flex flexWrap=\"wrap\" gap=\"2\">\n {event.eventTypes.map((e) => (\n <BoemlyTag key={e.id}>\n <Flex alignItems=\"center\" gap=\"1\" whiteSpace=\"nowrap\">\n {getEventIcon(e.eventType)}\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {formatMessage({\n id: `sections.eventCard.eventType.${e.eventType\n .toLowerCase()\n .replace(/\\s+/g, '')}`,\n })}\n </Text>\n </Flex>\n </BoemlyTag>\n ))}\n {event.languages.map(({ id, language, countryCode }) => (\n <BoemlyTag key={id}>\n <Flex alignItems=\"center\" gap=\"1\" whiteSpace=\"nowrap\">\n {getCountryFlag(countryCode)}\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {language}\n </Text>\n </Flex>\n </BoemlyTag>\n ))}\n </Flex>\n </Flex>\n <Heading>{event.title}</Heading>\n <Flex\n gap={isLocationTooLong ? '2' : ['2', null, null, '6']}\n alignItems={mobile || isLocationTooLong ? 'flex-start' : 'center'}\n my=\"4\"\n flexDir={mobile || isLocationTooLong ? 'column' : 'row'}\n >\n {event.online && (\n <Flex gap=\"2\" alignItems=\"center\">\n <LaptopIcon\n size={20}\n color={'var(--boemly-colors-primary-700)'}\n />\n <Text size={mobile ? 'xsLowBold' : 'smLowBold'}>Online</Text>\n </Flex>\n )}\n {event.location && (\n <Flex gap=\"2\" alignItems=\"center\">\n <MapPinLineIcon\n size={20}\n color={'var(--boemly-colors-primary-700)'}\n weight=\"fill\"\n />\n <Text size={mobile ? 'xsLowBold' : 'smLowBold'}>\n {event.location}\n </Text>\n </Flex>\n )}\n <Flex alignItems=\"center\" gap=\"2\">\n <CalendarBlankIcon\n size={20}\n color={'var(--boemly-colors-primary-700)'}\n />\n <Text size={mobile ? 'xsLowBold' : 'smLowBold'}>\n {formatDate(event.start, {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n })}\n\n {!event.allDay &&\n ` | ${formatNumber(new Date(event.start).getUTCHours(), {\n minimumIntegerDigits: 2,\n })}:${formatNumber(new Date(event.start).getUTCMinutes(), {\n minimumIntegerDigits: 2,\n })}`}\n\n {event.end &&\n !isSameDate(new Date(event.start), new Date(event.end)) && (\n <>\n {' - '}\n {formatDate(event.end, {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n })}\n\n {!event.allDay &&\n ` | ${formatNumber(new Date(event.end).getUTCHours(), {\n minimumIntegerDigits: 2,\n })}:${formatNumber(new Date(event.end).getUTCMinutes(), {\n minimumIntegerDigits: 2,\n })}`}\n </>\n )}\n\n {event.end &&\n !event.allDay &&\n isSameDate(new Date(event.start), new Date(event.end)) &&\n ` - ${formatNumber(new Date(event.end).getUTCHours(), {\n minimumIntegerDigits: 2,\n })}:${formatNumber(new Date(event.end).getUTCMinutes(), {\n minimumIntegerDigits: 2,\n })}`}\n </Text>\n </Flex>\n </Flex>\n <Text\n mb={mobile ? '0' : '7'}\n size={mobile ? 'xsRegularNormal' : 'smRegularNormal'}\n >\n {isExpanded || !mobile\n ? event.description\n : `${event.description.substring(0, MAX_LENGTH)}...`}\n </Text>\n {event.description.length > MAX_LENGTH && mobile && (\n <Flex justifyContent=\"flex-start\">\n <Button mt=\"2\" onClick={toggleText} variant=\"link\">\n {formatMessage(\n isExpanded\n ? {\n id: 'sections.eventCard.buttonShowLess',\n }\n : { id: 'sections.eventCard.buttonShowMore' }\n )}\n {isExpanded ? (\n <CaretUpIcon size=\"12\" />\n ) : (\n <CaretDownIcon size=\"12\" />\n )}\n </Button>\n </Flex>\n )}\n <Flex\n mt={mobile ? '7' : 'auto'}\n justifyContent={mobile ? undefined : 'space-between'}\n flexDir={mobile ? 'column-reverse' : 'row'}\n gap={mobile ? '4' : '0'}\n >\n {event.button && (\n <Flex width={mobile ? 'full' : 'auto'}>\n <StrapiLinkButton\n key={event.button.id}\n size=\"md\"\n variant={event.buttonVariant}\n link={event.button}\n rightIcon={<CaretRightIcon size=\"10\" />}\n width=\"full\"\n component=\"EventCard\"\n />\n </Flex>\n )}\n {event.speakers && event.speakers.length > 0 && (\n <Flex flexDir=\"row\" gap=\"2\">\n {event.speakers.map((speaker) => (\n <Box key={speaker.id}>\n <Box\n width={['10', null, null, '12']}\n height={['10', null, null, '12']}\n position=\"relative\"\n borderRadius=\"2xl\"\n >\n <Tooltip content={speaker.name}>\n <Image\n src={strapiMediaUrl(speaker.image.img, 'medium')}\n alt={speaker.image.alt}\n fill\n style={{\n objectFit: speaker.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-md)',\n border:\n '1px solid, var(--whiteAlpha-700, rgba(255, 255, 255, 0.64))',\n }}\n />\n </Tooltip>\n </Box>\n </Box>\n ))}\n </Flex>\n )}\n </Flex>\n </Flex>\n </Box>\n );\n};\n", "const getCountryFlag = (countryCode: string): string => {\n return countryCode\n .toUpperCase()\n .replace(/./g, (char) => String.fromCodePoint(char.charCodeAt(0) + 127397));\n};\nexport default getCountryFlag;\n", "const isSameDate = (date1: Date, date2: Date): boolean => {\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n );\n};\n\nexport default isSameDate;\n", "import { EventCard } from './EventCard';\n\nexport default EventCard;\n", "import useSWRInfinite, { SWRInfiniteKeyLoader } from 'swr/infinite';\nimport { useCallback, useMemo } from 'react';\nimport UseInfiniteDataHookProps from './UseInfiniteDataHookProps';\nimport SWRData from '../SWRData';\nimport IStrapiResponse from '../../models/strapi/IStrapiResponse';\nimport StrapiEvent from '../strapi/StrapiEvent';\n\nconst useEvents = ({\n getKey,\n batchSize,\n}: {\n getKey: SWRInfiniteKeyLoader;\n batchSize: number;\n}): UseInfiniteDataHookProps<IStrapiResponse<StrapiEvent[]>[]> => {\n const { data, isLoading, setSize, size, mutate } = useSWRInfinite<\n SWRData<IStrapiResponse<StrapiEvent[]>>\n >(getKey, { revalidateFirstPage: false, revalidateAll: false });\n\n const count: number | undefined = useMemo(() => {\n return data?.[0]?.body?.meta?.pagination?.total || 0;\n }, [data]);\n\n const isLoadingMore = useMemo(\n () => !!(size > 0 && data && typeof data[size - 1] === 'undefined'),\n [size, data]\n );\n\n const loadMore = useCallback(() => setSize(size + 1), [setSize, size]);\n\n const canLoadMore = useMemo(\n () => count !== undefined && size * batchSize < count,\n [count, size, batchSize]\n );\n\n return {\n data: data as any,\n isLoading,\n isLoadingMore,\n canLoadMore,\n refetch: mutate,\n loadMore,\n count,\n };\n};\n\nexport default useEvents;\n", "import { Events } from './Events';\n\nexport default Events;\n", "import { useRouter } from 'next/router';\nimport React, { useEffect } from 'react';\nimport { buildRedirectUrl } from '../../utils/buildRedirectUrl';\n\nexport interface RedirectProps {\n slice: {\n url: string;\n };\n}\n\nexport const Redirect = ({ slice }: RedirectProps): React.JSX.Element => {\n const router = useRouter();\n\n useEffect(() => {\n if (!slice.url) return;\n\n // Build redirect URL\n const redirectUrl = buildRedirectUrl(\n slice.url,\n router.asPath,\n router.query\n );\n\n // Redirect\n router.replace(redirectUrl);\n }, [slice.url, router]);\n\n return <></>;\n};\n", "import type { ParsedUrlQuery } from 'querystring';\n\nexport function buildRedirectUrl(\n url: string,\n asPath: string,\n query: ParsedUrlQuery\n): string {\n if (!url) return '';\n\n // Parse the base target URL\n const target = new URL(url, window.location.origin);\n\n // Merge existing params from the target\n const mergedParams = new URLSearchParams(target.search);\n\n // Add absolute source\n const absoluteSource = `${window.location.origin}${asPath}`;\n mergedParams.set('source', absoluteSource);\n\n // Forward utm_* params from the current page\n for (const [key, value] of Object.entries(query)) {\n if (key.startsWith('utm_') && typeof value === 'string') {\n mergedParams.set(key, value);\n }\n }\n\n // Add timestamp\n mergedParams.set('ts', Date.now().toString());\n\n // Build final merged URL\n target.search = mergedParams.toString();\n\n return target.toString();\n}\n", "import { Redirect } from './Redirect';\n\nexport default Redirect;\n", "import React from 'react';\nimport FullWidthImage from '../../slices/FullWidthImage';\nimport Hero from '../../slices/Hero';\nimport IconGrid from '../../slices/IconGrid';\nimport ImageGrid from '../../slices/ImageGrid';\nimport ImageTextSequence from '../../slices/ImageTextSequence';\nimport LeftTextRightCard from '../../slices/LeftTextRightCard';\nimport LogoGridWithText from '../../slices/LogoGridWithText';\nimport MapHero from '../../slices/MapHero';\nimport QAndA from '../../slices/QAndA';\nimport QuoteCards from '../../slices/QuoteCards';\nimport RichTextSection from '../../slices/RichTextSection';\nimport Steps from '../../slices/Steps';\nimport TextCardGrid from '../../slices/TextCardGrid';\nimport TextCarousel from '../../slices/TextCarousel';\nimport TextWithTextCards from '../../slices/TextWithTextCards';\nimport TextWithCard from '../../slices/TextWithCard';\nimport LinkCardsGrid from '../../slices/LinkCardsGrid';\nimport SmallHero from '../../slices/SmallHero';\nimport Blog from '../../slices/Blog';\nimport StrapiBlogPost from '../../models/strapi/StrapiBlogPost';\nimport ProjectsGrid from '../../slices/ProjectsGrid';\nimport ProjectsMap from '../../slices/ProjectsMap';\nimport Video from '../../slices/Video';\nimport FullWidthHighlightQuote from '../../slices/FullWidthHighlightQuote';\nimport FullWidthImageSlider from '../../slices/FullWidthImageSlider';\nimport SideBySideImages from '../../slices/SideBySideImages';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport Cta from '../../slices/Cta';\nimport CtaOnly from '../../slices/CtaOnly';\nimport Glossary from '../../slices/Glossary';\nimport ShopCheckout from '../../slices/ShopCheckout';\nimport Facts from '../../slices/Facts';\nimport BlogCards from '../../slices/BlogCards';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport ProjectFacts from '../../slices/ProjectFacts';\nimport CustomerStories from '../../slices/CustomerStories';\nimport StrapiCustomerStory from '../../models/strapi/StrapiCustomerStory';\nimport Comparison from '../../slices/Comparison';\nimport CarouselMarqueeBanner from '../../slices/CarouselMarqueeBanner';\nimport Locale from '../../models/Locale';\nimport { ContextProvider } from '../ContextProvider';\nimport Timeline from '../../slices/Timeline';\nimport Events from '../../slices/Events';\nimport Redirect from '../../slices/Redirect';\nimport { AnalyticsFunction } from '../ContextProvider/ContextProvider';\n\nexport interface CustomSliceProps {\n slice: any;\n id: string;\n}\n\nexport interface SliceRendererProps {\n slices: any;\n blogPosts: IStrapiData<StrapiBlogPost>[];\n projects: PortfolioProject[];\n customerStories: IStrapiData<StrapiCustomerStory>[];\n locale?: Locale;\n CustomSlice?: ({ slice, id }: CustomSliceProps) => React.JSX.Element;\n analyticsFunction?: AnalyticsFunction;\n}\n\nexport const SliceRenderer = ({\n slices,\n blogPosts,\n projects,\n customerStories,\n locale = 'en',\n CustomSlice,\n analyticsFunction,\n}: SliceRendererProps): React.JSX.Element => (\n <ContextProvider locale={locale} analyticsFunction={analyticsFunction}>\n {slices.map((slice: any) => {\n switch (slice.__component) {\n case 'sections.hero':\n return (\n <Hero key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.map-hero':\n return (\n <MapHero key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.rich-text':\n return (\n <RichTextSection\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.left-text-right-card':\n return (\n <LeftTextRightCard\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-with-card':\n return (\n <TextWithCard\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n projects={projects}\n />\n );\n case 'sections.logo-grid-with-text':\n return (\n <LogoGridWithText\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.quote-cards':\n return (\n <QuoteCards\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.q-and-a':\n return (\n <QAndA key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.image-grid':\n return (\n <ImageGrid key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.full-width-image':\n return (\n <FullWidthImage\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-with-text-cards':\n return (\n <TextWithTextCards\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-card-grid':\n return (\n <TextCardGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.icon-grid':\n return (\n <IconGrid key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.image-text-sequence':\n return (\n <ImageTextSequence\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.steps':\n return (\n <Steps key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.text-carousel':\n return (\n <TextCarousel\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.link-cards-grid':\n return (\n <LinkCardsGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.small-hero':\n return (\n <SmallHero\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n theme=\"dark\"\n />\n );\n case 'sections.small-hero-light':\n return (\n <SmallHero\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n theme=\"light\"\n />\n );\n case 'sections.project-facts':\n return (\n <ProjectFacts\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n project={projects.find((p) => p.id === slice.projectId)}\n />\n );\n case 'sections.projects-grid':\n return (\n <ProjectsGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n projects={projects}\n />\n );\n case 'sections.projects-map':\n return (\n <ProjectsMap\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.video':\n return (\n <Video key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.full-width-highlight-quote':\n return (\n <FullWidthHighlightQuote\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.full-width-image-slider':\n return (\n <FullWidthImageSlider\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.side-by-side-images':\n return (\n <SideBySideImages\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.cta-only':\n return (\n <CtaOnly key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.cta':\n return <Cta key={`${slice.__component}-${slice.id}`} slice={slice} />;\n case 'sections.shop-checkout':\n return (\n <ShopCheckout\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.facts':\n return (\n <Facts key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.blog-cards':\n return (\n <BlogCards\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n blogPosts={blogPosts}\n />\n );\n case 'sections.blog':\n return (\n <Blog\n key={`${slice.__component}-${slice.id}`}\n slice={{\n ...slice,\n blog_posts: slice.blog_posts.data,\n }}\n blogPosts={blogPosts}\n />\n );\n case 'sections.glossary':\n return (\n <Glossary\n key={`${slice.__component}-${slice.id}`}\n slice={{\n ...slice,\n glossary_items: slice.glossary_items.data,\n }}\n />\n );\n case 'sections.customer-stories':\n return (\n <CustomerStories\n key={`${slice.__component}-${slice.id}`}\n slice={{\n ...slice,\n customer_stories: slice.customer_stories.data,\n }}\n customerStories={customerStories}\n />\n );\n case 'sections.comparison':\n return (\n <Comparison\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.timeline':\n return (\n <Timeline key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.carousel-marquee-banner':\n return (\n <CarouselMarqueeBanner\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.events':\n return (\n <Events key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.redirect':\n return (\n <Redirect key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n default:\n if (CustomSlice) {\n return (\n <CustomSlice\n key={`${slice.__component}-${slice.id}`}\n id={slice.__component}\n slice={slice}\n />\n );\n }\n\n return (\n <div key={`${slice.__component}-${slice.id}`}>\n Slice component not supported\n </div>\n );\n }\n })}\n </ContextProvider>\n);\n"],
5
- "mappings": "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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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",
4
+ "sourcesContent": ["import IStrapi from './models/strapi/IStrapi';\nimport IStrapiData from './models/strapi/IStrapiData';\nimport IStrapiResponse from './models/strapi/IStrapiResponse';\nimport StrapiAuthor from './models/strapi/StrapiAuthor';\nimport StrapiAvatarWithName from './models/strapi/StrapiAvatarWithName';\nimport StrapiBanner from './models/strapi/StrapiBanner';\nimport StrapiBlogPost from './models/strapi/StrapiBlogPost';\nimport StrapiBlogPostProps from './models/strapi/StrapiBlogPostProps';\nimport StrapiButtonWithVariant from './models/strapi/StrapiButtonWithVariant';\nimport StrapiCategory from './models/strapi/StrapiCategory';\nimport StrapiContactArea from './models/strapi/StrapiContactArea';\nimport StrapiCustomerStory from './models/strapi/StrapiCustomerStory';\nimport StrapiCustomerStoryProps from './models/strapi/StrapiCustomerStoryProps';\nimport StrapiDefaultHeader from './models/strapi/StrapiDefaultHeader';\nimport StrapiEvent from './models/strapi/StrapiEvent';\nimport StrapiGlobal from './models/strapi/StrapiGlobal';\nimport StrapiGlossaryItem from './models/strapi/StrapiGlossaryItem';\nimport StrapiHeroCard from './models/strapi/StrapiHeroCard';\nimport StrapiImage from './models/strapi/StrapiImage';\nimport StrapiImageFormat from './models/strapi/StrapiImageFormat';\nimport StrapiImageWithLink from './models/strapi/StrapiImageWithLink';\nimport StrapiLink from './models/strapi/StrapiLink';\nimport StrapiLinkList from './models/strapi/StrapiLinkList';\nimport StrapiLinkPage from './models/strapi/StrapiLinkPage';\nimport StrapiLinkWithIcon from './models/strapi/StrapiLinkWithIcon';\nimport StrapiLocalization from './models/strapi/StrapiLocalization';\nimport StrapiMedia from './models/strapi/StrapiMedia';\nimport StrapiMetadata from './models/strapi/StrapiMetadata';\nimport StrapiNavMenu from './models/strapi/StrapiNavMenu';\nimport StrapiPage from './models/strapi/StrapiPage';\nimport StrapiPageProps from './models/strapi/StrapiPageProps';\nimport StrapiPortfolio from './models/strapi/StrapiPortfolio';\nimport StrapiPortfolioCard from './models/strapi/StrapiPortfolioCard';\nimport StrapiProject from './models/strapi/StrapiProject';\nimport StrapiProjectCard from './models/strapi/StrapiProjectCard';\nimport StrapiProjectProps from './models/strapi/StrapiProjectProps';\nimport StrapiQuoteCard from './models/strapi/StrapiQuoteCard';\nimport StrapiShapesCard from './models/strapi/StrapiShapesCard';\nimport StrapiTextCardWithIcons from './models/strapi/StrapiTextCardWithIcons';\nimport StrapiTopBanner from './models/strapi/StrapiTopBanner';\n\nimport HeaderType from './models/HeaderType';\nimport Image from './models/Image';\nimport Locale from './models/Locale';\nimport PageMetadata from './models/PageMetadata';\nimport PageProps from './models/PageProps';\nimport PortfolioProject from './models/PortfolioProject';\n\nimport getAllSlugsFromStrapi from './integrations/strapi/getAllSlugsFromStrapi';\nimport getPortfolioProjects from './integrations/strapi/getPortfolioProjects';\nimport getStrapiCollectionType from './integrations/strapi/getStrapiCollectionType';\nimport getStrapiSingleType from './integrations/strapi/getStrapiSingleType';\n\nimport mergeGlobalAndStrapiBlogPostData from './utils/mergeGlobalAndStrapiBlogPostData';\nimport mergeGlobalAndStrapiCustomerStoryData from './utils/mergeGlobalAndStrapiCustomerStoryData';\nimport mergeGlobalAndStrapiPageData from './utils/mergeGlobalAndStrapiPageData';\nimport mergeGlobalAndStrapiProjectData from './utils/mergeGlobalAndStrapiProjectData';\nimport strapiLinkUrl from './utils/strapiLinkUrl';\nimport strapiMediaUrl from './utils/strapiMediaUrl';\n\nexport { PreviewAlert } from './components/PreviewAlert';\nexport { SEOTags } from './components/SEOTags';\nexport { SliceRenderer } from './components/SliceRenderer';\n\nexport {\n // Utils\n mergeGlobalAndStrapiBlogPostData,\n mergeGlobalAndStrapiCustomerStoryData,\n mergeGlobalAndStrapiPageData,\n mergeGlobalAndStrapiProjectData,\n strapiLinkUrl,\n strapiMediaUrl,\n\n // Integrations\n getAllSlugsFromStrapi,\n getPortfolioProjects,\n getStrapiCollectionType,\n getStrapiSingleType,\n};\n\nexport type {\n // Strapi Models\n IStrapi,\n IStrapiData,\n IStrapiResponse,\n StrapiAuthor,\n StrapiAvatarWithName,\n StrapiBanner,\n StrapiBlogPost,\n StrapiBlogPostProps,\n StrapiButtonWithVariant,\n StrapiCategory,\n StrapiContactArea,\n StrapiCustomerStory,\n StrapiCustomerStoryProps,\n StrapiDefaultHeader,\n StrapiEvent,\n StrapiGlobal,\n StrapiGlossaryItem,\n StrapiHeroCard,\n StrapiImage,\n StrapiImageFormat,\n StrapiImageWithLink,\n StrapiLink,\n StrapiLinkList,\n StrapiLinkPage,\n StrapiLinkWithIcon,\n StrapiLocalization,\n StrapiMedia,\n StrapiMetadata,\n StrapiNavMenu,\n StrapiPage,\n StrapiPageProps,\n StrapiPortfolio,\n StrapiPortfolioCard,\n StrapiProject,\n StrapiProjectCard,\n StrapiProjectProps,\n StrapiQuoteCard,\n StrapiShapesCard,\n StrapiTextCardWithIcons,\n StrapiTopBanner,\n\n // Models\n HeaderType,\n Image,\n Locale,\n PageMetadata,\n PageProps,\n PortfolioProject,\n};\n", "import axios from 'axios';\nimport qs from 'qs';\nimport { setupCache } from 'axios-cache-interceptor';\nimport { STRAPI_URI } from '../../constants/strapi';\n\nconst strapiClient = setupCache(\n axios.create({\n baseURL: `${STRAPI_URI}/api`,\n headers: { 'Strapi-Response-Format': 'v4' },\n paramsSerializer: (p) => qs.stringify(p, { encodeValuesOnly: true }),\n timeout: 60_000,\n }),\n {\n ttl:\n STRAPI_URI.includes('127.0.0.1') || STRAPI_URI.includes('localhost')\n ? 0\n : 10 * 60 * 1000, // 10 minutes\n }\n);\n\nexport default strapiClient;\n", "export const STRAPI_URI =\n process.env.NEXT_PUBLIC_STRAPI_URI || 'http://127.0.0.1:1337';\n\nexport const STRAPI_DEFAULT_PAGE_SIZE = '100';\nexport const STRAPI_DEFAULT_POPULATE_DEPTH = '6';\n\nexport const STRAPI_FALLBACK_LOCALE = 'en';\n", "import strapiClient from './strapiClient';\nimport {\n STRAPI_DEFAULT_PAGE_SIZE,\n STRAPI_FALLBACK_LOCALE,\n} from '../../constants/strapi';\nimport IStrapiResponse from '../../models/strapi/IStrapiResponse';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport LocalizedEntity from '../../models/LocalizedEntity';\n\ninterface Options {\n filters?: Record<string, any>;\n}\n\ntype Slug = { slug: string; locale: string };\n\nconst getAllSlugsFromStrapi = async <T extends LocalizedEntity<'slug'>>(\n path: string,\n locales: string[],\n { filters = {} }: Options = { filters: {} }\n): Promise<Slug[]> => {\n const slugPromises = locales.map((locale) =>\n strapiClient\n .get<IStrapiResponse<IStrapiData<T>[]>>(path, {\n params: {\n locale: locale,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters,\n },\n })\n .then((response) =>\n response.data.data.map((page) => ({\n slug: page.attributes.slug,\n locale: page.attributes.locale,\n }))\n )\n // when a collection type for a requested locale does not exist, Strapi returns a 404. In this case, we return an empty array instead of throwing an error\n .catch((error) => {\n if (error.response?.status === 404) {\n return [];\n }\n throw error;\n })\n );\n\n const slugResults = await Promise.all(slugPromises);\n\n let allSlugs = slugResults.flat();\n\n // Identify missing locales for each slug\n const missingLocales = locales.flatMap((locale) => {\n return allSlugs\n .filter((slug) => slug.locale === STRAPI_FALLBACK_LOCALE)\n .filter(\n (fallbackSlug) =>\n !allSlugs.some(\n (slug) => slug.slug === fallbackSlug.slug && slug.locale === locale\n )\n )\n .map((fallbackSlug) => ({ ...fallbackSlug, locale })); // Clone only for missing locales\n });\n\n return [...allSlugs, ...missingLocales]; // Merge original and missing slugs\n};\n\nexport default getAllSlugsFromStrapi;\n", "import axios from 'axios';\nimport qs from 'qs';\nimport { setupCache } from 'axios-cache-interceptor';\nimport { FPM_API_URI } from '../constants/api';\n\nconst fpmClient = setupCache(\n axios.create({\n baseURL: `${FPM_API_URI}/v1`,\n paramsSerializer: (p) => qs.stringify(p, { encodeValuesOnly: true }),\n timeout: 5000,\n }),\n {\n ttl:\n FPM_API_URI.includes('127.0.0.1') || FPM_API_URI.includes('localhost')\n ? 0\n : 10 * 60 * 1000, // 10 minutes\n }\n);\n\nexport default fpmClient;\n", "export const API_URI =\n process.env.NEXT_PUBLIC_API_URI || 'http://localhost:4001';\nexport const FPM_API_URI =\n process.env.NEXT_PUBLIC_FPM_API_URI || 'https://api.fpm.t-staging.com';\nexport const CDN_URI = 'https://cdn.tree.ly';\n", "import { IStrapiData, IStrapiResponse, StrapiProject } from '../..';\nimport {\n STRAPI_DEFAULT_PAGE_SIZE,\n STRAPI_DEFAULT_POPULATE_DEPTH,\n} from '../../constants/strapi';\nimport strapiClient from './strapiClient';\n\nconst FALLBACK_LOCALE = 'en';\n\nconst getStrapiProjects = async (\n locale: string = 'en',\n pLevel: string = STRAPI_DEFAULT_POPULATE_DEPTH,\n preview: boolean = false\n): Promise<Map<string, IStrapiData<StrapiProject>>> => {\n const cache = preview ? false : undefined;\n const strapiParams: Record<string, any> = {\n pLevel,\n locale,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n status: preview ? 'draft' : 'published',\n };\n\n const strapiProjects = new Map<string, IStrapiData<StrapiProject>>();\n\n try {\n const [strapiProjectsLocalized, strapiProjectsEnglish] = await Promise.all([\n strapiClient.get<IStrapiResponse<IStrapiData<StrapiProject>[]>>(\n '/projects',\n { params: strapiParams, cache }\n ),\n strapiClient.get<IStrapiResponse<IStrapiData<StrapiProject>[]>>(\n '/projects',\n {\n params: { ...strapiParams, locale: FALLBACK_LOCALE },\n cache,\n }\n ),\n ]);\n\n // Process Strapi data if we got it\n for (const project of [\n ...strapiProjectsEnglish.data.data,\n ...strapiProjectsLocalized.data.data,\n ]) {\n if (project.attributes.fpmProjectId) {\n strapiProjects.set(project.attributes.fpmProjectId, project);\n }\n }\n } catch (error) {\n console.warn('Failed to fetch Strapi data:', error);\n // Return empty map on failure\n }\n\n return strapiProjects;\n};\n\nexport default getStrapiProjects;\n", "import { PortfolioProject } from '../..';\nimport { STRAPI_DEFAULT_POPULATE_DEPTH } from '../../constants/strapi';\nimport FPMProject from '../../models/fpm/FPMProject';\nimport fpmClient from '../fpmClient';\nimport getStrapiProjects from './getStrapiProjects';\n\nconst getPortfolioProjects = async (\n locale: string = 'en',\n preview: boolean = false\n): Promise<PortfolioProject[]> => {\n const cache = preview ? false : undefined;\n\n const [{ data: fpmProjects }, strapiProjects] = await Promise.all([\n fpmClient.get<FPMProject[]>('/public/projects', { cache }),\n getStrapiProjects(locale, STRAPI_DEFAULT_POPULATE_DEPTH, preview),\n ]);\n\n return fpmProjects.map((fpmProject: FPMProject) => {\n const strapiProject = strapiProjects.get(fpmProject.id);\n\n const toReturn: PortfolioProject = fpmProject;\n\n if (strapiProject?.attributes.slug) {\n toReturn.slug = strapiProject.attributes.slug;\n }\n if (strapiProject?.attributes.thumbnail) {\n toReturn.thumbnail = strapiProject?.attributes.thumbnail;\n }\n if (strapiProject?.attributes.portfolio.data?.attributes.host) {\n toReturn.portfolioHost =\n strapiProject.attributes.portfolio.data.attributes.host;\n }\n\n return toReturn;\n });\n};\n\nexport default getPortfolioProjects;\n", "import strapiClient from './strapiClient';\nimport {\n STRAPI_DEFAULT_PAGE_SIZE,\n STRAPI_DEFAULT_POPULATE_DEPTH,\n STRAPI_FALLBACK_LOCALE,\n} from '../../constants/strapi';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport IStrapiResponse from '../../models/strapi/IStrapiResponse';\nimport LocalizedEntity from '../../models/LocalizedEntity';\n\ninterface Options {\n locale?: string;\n slug?: string;\n preview?: boolean;\n filters?: Record<string, any>;\n}\n\nconst getStrapiCollectionType = async <\n T extends LocalizedEntity<K>,\n K extends string,\n>(\n path: string,\n key: K,\n { locale = 'en', preview = false, filters = {} }: Options\n): Promise<IStrapiData<T>[]> => {\n const cache = preview ? false : undefined;\n\n const sharedParams = {\n pLevel: STRAPI_DEFAULT_POPULATE_DEPTH,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters,\n status: preview ? 'draft' : 'published',\n };\n\n const requestedLocaleData = await strapiClient\n .get<IStrapiResponse<IStrapiData<T>[]>>(path, {\n params: {\n ...sharedParams,\n locale,\n },\n cache,\n })\n .then((response) => response.data.data)\n // when a collection type for a requested locale does not exist, Strapi returns a 404. In this case, we return an empty array instead of throwing an error\n .catch((error) => {\n if (error.response?.status === 404) {\n return [];\n }\n throw error;\n });\n\n const fallbackLocaleData = await strapiClient\n .get<IStrapiResponse<IStrapiData<T>[]>>(path, {\n params: {\n ...sharedParams,\n locale: STRAPI_FALLBACK_LOCALE,\n },\n cache,\n })\n .then((response) => response.data.data)\n // when a collection type for a requested locale does not exist, Strapi returns a 404. In this case, we return an empty array instead of throwing an error\n .catch((error) => {\n if (error.response?.status === 404) {\n return [];\n }\n throw error;\n });\n\n const results = fallbackLocaleData.map((fallbackLocaleDataEntry) => {\n const requestedLocale = requestedLocaleData.find(\n (localized) =>\n localized.attributes[key] === fallbackLocaleDataEntry.attributes[key]\n );\n\n return requestedLocale || fallbackLocaleDataEntry;\n });\n\n return results;\n};\n\nexport default getStrapiCollectionType;\n", "import { AxiosResponse } from 'axios';\nimport strapiClient from './strapiClient';\nimport {\n STRAPI_DEFAULT_PAGE_SIZE,\n STRAPI_DEFAULT_POPULATE_DEPTH,\n STRAPI_FALLBACK_LOCALE,\n} from '../../constants/strapi';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport IStrapiResponse from '../../models/strapi/IStrapiResponse';\n\ninterface Options {\n locale?: string;\n preview?: boolean;\n filters?: Record<string, any>;\n}\n\nconst getStrapiSingleType = async <T>(\n path: string,\n { locale = 'en', preview = false, filters = {} }: Options\n): Promise<IStrapiData<T>> => {\n const cache = preview ? false : undefined;\n const params: Record<string, any> = {\n pLevel: STRAPI_DEFAULT_POPULATE_DEPTH,\n locale,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters,\n status: preview ? 'draft' : 'published',\n };\n\n let response: AxiosResponse<IStrapiResponse<IStrapiData<T>>>;\n\n try {\n response = await strapiClient.get(path, { params, cache });\n return response.data.data;\n } catch (error: any) {\n if (error.isAxiosError && error.response?.status === 404) {\n // Retry request with fallback locale\n response = await strapiClient.get(path, {\n params: { ...params, locale: STRAPI_FALLBACK_LOCALE },\n cache,\n });\n\n return response.data.data;\n }\n\n throw error;\n }\n};\n\nexport default getStrapiSingleType;\n", "import { STRAPI_URI } from '../constants/strapi';\nimport IStrapi from '../models/strapi/IStrapi';\nimport IStrapiData from '../models/strapi/IStrapiData';\nimport StrapiMedia from '../models/strapi/StrapiMedia';\n\nconst strapiMediaUrl = (\n media: IStrapi<IStrapiData<StrapiMedia>>,\n preferredSize:\n | 'native'\n | 'thumbnail'\n | 'xSmall'\n | 'small'\n | 'medium'\n | 'large'\n | 'xLarge' = 'native'\n): string => {\n let { url } = media.data.attributes || {};\n if (preferredSize !== 'native' && media.data.attributes.ext !== '.svg') {\n url = media.data.attributes.formats[preferredSize]?.url || url;\n }\n if (url && (url.indexOf('http://') === 0 || url.indexOf('https://') === 0)) {\n return url;\n }\n return `${\n STRAPI_URI.includes('127.0.0.1') || STRAPI_URI.includes('localhost')\n ? STRAPI_URI\n : ''\n }${url}`;\n};\n\nexport default strapiMediaUrl;\n", "export const DEFAULT_SHARE_IMAGE =\n 'https://cdn.tree.ly/assets/v3/app/share-image-generic.webp';\nexport const DEFAULT_SHARE_ALT = 'Share Image';\n", "export const EXTENDABLE_HEADER_SECTIONS = [\n 'sections.hero',\n 'sections.map-hero',\n 'sections.full-width-image',\n 'sections.small-hero',\n 'sections.small-hero-light',\n];\nexport const DARK_THEME_HEADER_SECTIONS = [\n 'sections.hero',\n 'sections.small-hero',\n];\nexport const SLICES_WITH_BLOG_POSTS = ['sections.blog', 'sections.blog-cards'];\nexport const SLICES_WITH_CUSTOMER_STORIES = ['sections.customer-stories'];\nexport const SLICES_WITH_PROJECTS = [\n 'sections.projects-grid',\n 'sections.projects-map',\n 'sections.project-facts',\n 'sections.text-with-card',\n];\n", "import { GetStaticPropsContext } from 'next';\nimport strapiMediaUrl from './strapiMediaUrl';\nimport {\n IStrapiData,\n StrapiBlogPost,\n StrapiBlogPostProps,\n StrapiGlobal,\n} from '..';\nimport PortfolioProject from '../models/PortfolioProject';\nimport { DEFAULT_SHARE_ALT, DEFAULT_SHARE_IMAGE } from '../constants/metadata';\nimport {\n SLICES_WITH_BLOG_POSTS,\n SLICES_WITH_PROJECTS,\n} from '../constants/slicesConfig';\n\nconst mergeGlobalAndStrapiBlogPostData = (\n context: GetStaticPropsContext,\n global: IStrapiData<StrapiGlobal>,\n post: IStrapiData<StrapiBlogPost>,\n blog: IStrapiData<StrapiBlogPost>[],\n projects: PortfolioProject[]\n): StrapiBlogPostProps => {\n const metaShareImageUrl = post.attributes.metadata?.shareImage\n ? strapiMediaUrl(\n post.attributes.metadata?.shareImage.media ??\n global.attributes.metadata.shareImage?.media,\n 'large'\n )\n : DEFAULT_SHARE_IMAGE;\n\n const schemaMarkupTypes =\n post.attributes.metadata?.schemaMarkupTypes ??\n global.attributes.metadata?.schemaMarkupTypes ??\n [];\n\n const returnBlog = post.attributes.slices.some((slice) =>\n SLICES_WITH_BLOG_POSTS.includes(slice.__component)\n );\n const returnProjects = post.attributes.slices.some((slice) =>\n SLICES_WITH_PROJECTS.includes(slice.__component)\n );\n\n return {\n ...post,\n // Portfolio Projects\n projects: returnProjects ? projects : [],\n // StrapiBlogPost\n attributes: {\n ...post?.attributes,\n metadata: post?.attributes?.metadata || global.attributes.metadata,\n },\n // PageProps\n headerType: {\n extendable: true,\n theme: 'light',\n },\n headerNavMenus: global.attributes.navbar.navMenus || [],\n headerButtons: global.attributes.navbar.buttons || [],\n footerLinks: global.attributes.footer.links || [],\n metadata: {\n title:\n post.attributes.metadata?.title ?? global.attributes.metadata.title,\n description:\n post.attributes.metadata?.description ??\n global.attributes.metadata.description,\n shareImage: {\n url: metaShareImageUrl,\n alt:\n post.attributes.metadata?.shareImage?.alt ??\n global.attributes.metadata.shareImage?.alt ??\n DEFAULT_SHARE_ALT,\n },\n metaTitleSuffix: global.attributes.metaTitleSuffix,\n favicon: strapiMediaUrl(global.attributes.favicon, 'thumbnail'),\n schemaMarkupTypes,\n },\n slices: post?.attributes.slices,\n blogPosts: returnBlog ? blog : [],\n banner: global.attributes.banner,\n topBanner: post?.attributes.topBanner || global.attributes.topBanner,\n customerStories: [],\n preview: !!context.preview,\n isFallbackLocale: context.locale !== post.attributes.locale,\n };\n};\n\nexport default mergeGlobalAndStrapiBlogPostData;\n", "import { GetStaticPropsContext } from 'next';\nimport strapiMediaUrl from './strapiMediaUrl';\nimport {\n IStrapiData,\n StrapiCustomerStory,\n StrapiCustomerStoryProps,\n StrapiGlobal,\n} from '..';\nimport { DEFAULT_SHARE_ALT, DEFAULT_SHARE_IMAGE } from '../constants/metadata';\nimport { SLICES_WITH_CUSTOMER_STORIES } from '../constants/slicesConfig';\n\nconst mergeGlobalAndStrapiCustomerStoryData = (\n context: GetStaticPropsContext,\n global: IStrapiData<StrapiGlobal>,\n customerStory: IStrapiData<StrapiCustomerStory>,\n customerStories: IStrapiData<StrapiCustomerStory>[]\n): StrapiCustomerStoryProps => {\n const metaShareImageUrl = customerStory.attributes.metadata?.shareImage\n ? strapiMediaUrl(\n customerStory.attributes.metadata?.shareImage.media ??\n global.attributes.metadata.shareImage?.media,\n 'large'\n )\n : DEFAULT_SHARE_IMAGE;\n\n const schemaMarkupTypes =\n customerStory.attributes.metadata?.schemaMarkupTypes ??\n global.attributes.metadata?.schemaMarkupTypes ??\n [];\n\n const returnCustomerStories = customerStory.attributes.slices.some((slice) =>\n SLICES_WITH_CUSTOMER_STORIES.includes(slice.__component)\n );\n\n return {\n ...customerStory,\n // Portfolio Projects\n projects: [],\n attributes: {\n ...customerStory?.attributes,\n metadata:\n customerStory?.attributes?.metadata || global.attributes.metadata,\n },\n // PageProps\n headerType: {\n extendable: true,\n theme: 'light',\n },\n headerNavMenus: global.attributes.navbar.navMenus || [],\n headerButtons: global.attributes.navbar.buttons || [],\n footerLinks: global.attributes.footer.links || [],\n metadata: {\n title:\n customerStory.attributes.metadata?.title ??\n global.attributes.metadata.title,\n description:\n customerStory.attributes.metadata?.description ??\n global.attributes.metadata.description,\n shareImage: {\n url: metaShareImageUrl,\n alt:\n customerStory.attributes.metadata?.shareImage?.alt ??\n global.attributes.metadata.shareImage?.alt ??\n DEFAULT_SHARE_ALT,\n },\n metaTitleSuffix: global.attributes.metaTitleSuffix,\n favicon: strapiMediaUrl(global.attributes.favicon, 'thumbnail'),\n schemaMarkupTypes,\n },\n slices: customerStory?.attributes.slices,\n customerStories: returnCustomerStories ? customerStories : [],\n banner: global.attributes.banner,\n topBanner:\n customerStory?.attributes.topBanner || global.attributes.topBanner,\n blogPosts: [],\n preview: !!context.preview,\n isFallbackLocale: context.locale !== customerStory.attributes.locale,\n };\n};\n\nexport default mergeGlobalAndStrapiCustomerStoryData;\n", "import { GetStaticPropsContext } from 'next';\nimport strapiMediaUrl from './strapiMediaUrl';\nimport {\n IStrapiData,\n StrapiBlogPost,\n StrapiCustomerStory,\n StrapiGlobal,\n StrapiPage,\n StrapiPageProps,\n} from '..';\nimport PortfolioProject from '../models/PortfolioProject';\nimport {\n DARK_THEME_HEADER_SECTIONS,\n EXTENDABLE_HEADER_SECTIONS,\n SLICES_WITH_BLOG_POSTS,\n SLICES_WITH_CUSTOMER_STORIES,\n SLICES_WITH_PROJECTS,\n} from '../constants/slicesConfig';\nimport { DEFAULT_SHARE_ALT, DEFAULT_SHARE_IMAGE } from '../constants/metadata';\n\nconst mergeGlobalAndStrapiPageData = (\n context: GetStaticPropsContext,\n global: IStrapiData<StrapiGlobal>,\n page: IStrapiData<StrapiPage>,\n blogPosts: IStrapiData<StrapiBlogPost>[],\n customerStories: IStrapiData<StrapiCustomerStory>[],\n projects: PortfolioProject[]\n): StrapiPageProps => {\n const metaShareImageUrl = page.attributes.metadata?.shareImage\n ? strapiMediaUrl(\n page.attributes.metadata?.shareImage.media ??\n global.attributes.metadata.shareImage?.media,\n 'large'\n )\n : DEFAULT_SHARE_IMAGE;\n\n const schemaMarkupTypes =\n page.attributes.metadata?.schemaMarkupTypes ??\n global.attributes.metadata?.schemaMarkupTypes ??\n [];\n\n const returnBlogPosts = page.attributes.slices.some((slice) =>\n SLICES_WITH_BLOG_POSTS.includes(slice.__component)\n );\n const returnCustomerStories = page.attributes.slices.some((slice) =>\n SLICES_WITH_CUSTOMER_STORIES.includes(slice.__component)\n );\n const returnProjects = page.attributes.slices.some((slice) =>\n SLICES_WITH_PROJECTS.includes(slice.__component)\n );\n\n return {\n ...page,\n // Portfolio Projects\n projects: returnProjects ? projects : [],\n // StrapiPage\n attributes: {\n ...page?.attributes,\n metadata: page?.attributes?.metadata ?? global.attributes.metadata,\n },\n // PageProps\n headerType: {\n extendable: EXTENDABLE_HEADER_SECTIONS.includes(\n page.attributes.slices[0]?.__component\n ),\n theme: DARK_THEME_HEADER_SECTIONS.includes(\n page.attributes.slices[0]?.__component\n )\n ? 'dark'\n : 'light',\n },\n headerNavMenus: global.attributes.navbar.navMenus || [],\n headerButtons: global.attributes.navbar.buttons || [],\n footerLinks: global.attributes.footer.links || [],\n metadata: {\n title:\n page.attributes.metadata?.title ?? global.attributes.metadata.title,\n description:\n page.attributes.metadata?.description ??\n global.attributes.metadata.description,\n shareImage: {\n url: metaShareImageUrl,\n alt:\n page.attributes.metadata?.shareImage?.alt ??\n global.attributes.metadata.shareImage?.alt ??\n DEFAULT_SHARE_ALT,\n },\n metaTitleSuffix: global.attributes.metaTitleSuffix,\n favicon: strapiMediaUrl(global.attributes.favicon, 'thumbnail'),\n schemaMarkupTypes,\n },\n slices: page?.attributes.slices,\n blogPosts: returnBlogPosts ? blogPosts : [],\n banner: global.attributes.banner,\n topBanner: page?.attributes.topBanner || global.attributes.topBanner,\n customerStories: returnCustomerStories ? customerStories : [],\n preview: !!context.preview,\n isFallbackLocale: context.locale !== page.attributes.locale,\n };\n};\n\nexport default mergeGlobalAndStrapiPageData;\n", "import { GetStaticPropsContext } from 'next';\nimport strapiMediaUrl from './strapiMediaUrl';\nimport {\n IStrapiData,\n StrapiBlogPost,\n StrapiGlobal,\n StrapiProject,\n StrapiProjectProps,\n} from '..';\nimport PortfolioProject from '../models/PortfolioProject';\nimport {\n DARK_THEME_HEADER_SECTIONS,\n EXTENDABLE_HEADER_SECTIONS,\n SLICES_WITH_BLOG_POSTS,\n SLICES_WITH_PROJECTS,\n} from '../constants/slicesConfig';\nimport { DEFAULT_SHARE_ALT, DEFAULT_SHARE_IMAGE } from '../constants/metadata';\n\nconst mergeGlobalAndStrapiProject = (\n context: GetStaticPropsContext,\n global: IStrapiData<StrapiGlobal>,\n project: IStrapiData<StrapiProject>,\n blogPosts: IStrapiData<StrapiBlogPost>[],\n projects: PortfolioProject[]\n): StrapiProjectProps => {\n const metaShareImageUrl = project.attributes.metadata?.shareImage\n ? strapiMediaUrl(\n project.attributes.metadata?.shareImage.media ??\n global.attributes.metadata.shareImage?.media,\n 'large'\n )\n : DEFAULT_SHARE_IMAGE;\n\n const schemaMarkupTypes =\n project.attributes.metadata?.schemaMarkupTypes ??\n global.attributes.metadata?.schemaMarkupTypes ??\n [];\n\n const returnBlogPosts = project.attributes.slices.some((slice) =>\n SLICES_WITH_BLOG_POSTS.includes(slice.__component)\n );\n const returnProjects = project.attributes.slices.some((slice) =>\n SLICES_WITH_PROJECTS.includes(slice.__component)\n );\n\n return {\n ...project,\n // Portfolio Projects\n projects: returnProjects ? projects : [],\n // StrapiProject\n attributes: {\n ...project.attributes,\n metadata: project?.attributes?.metadata || global.attributes.metadata,\n },\n headerType: {\n extendable: EXTENDABLE_HEADER_SECTIONS.includes(\n project.attributes.slices[0]?.__component\n ),\n theme: DARK_THEME_HEADER_SECTIONS.includes(\n project.attributes.slices[0]?.__component\n )\n ? 'dark'\n : 'light',\n },\n // PageProps\n headerNavMenus: global.attributes.navbar.navMenus || [],\n headerButtons: global.attributes.navbar.buttons || [],\n footerLinks: global.attributes.footer.links || [],\n metadata: {\n title:\n project.attributes.metadata?.title ?? global.attributes.metadata.title,\n description:\n project.attributes.metadata?.description ??\n global.attributes.metadata.description,\n shareImage: {\n url: metaShareImageUrl,\n alt:\n project.attributes.metadata?.shareImage?.alt ??\n global.attributes.metadata.shareImage?.alt ??\n DEFAULT_SHARE_ALT,\n },\n metaTitleSuffix: global.attributes.metaTitleSuffix,\n favicon: strapiMediaUrl(global.attributes.favicon, 'thumbnail'),\n schemaMarkupTypes,\n },\n slices: project.attributes.slices,\n blogPosts: returnBlogPosts ? blogPosts : [],\n banner: global.attributes.banner,\n topBanner: project?.attributes.topBanner || global.attributes.topBanner,\n customerStories: [],\n preview: !!context.preview,\n isFallbackLocale: context.locale !== project.attributes.locale,\n };\n};\n\nexport default mergeGlobalAndStrapiProject;\n", "import StrapiLink from '../models/strapi/StrapiLink';\n\nconst strapiLinkUrl = (\n strapiLink: StrapiLink | undefined = undefined\n): string => {\n if (strapiLink?.page?.data) {\n return `/${strapiLink.page.data.attributes.slug}`;\n }\n\n return strapiLink?.url || '/';\n};\n\nexport default strapiLinkUrl;\n", "import React from 'react';\nimport { BoemlyAlert, Box } from 'boemly';\n\nexport const PreviewAlert = (): React.JSX.Element => {\n return (\n <Box position=\"fixed\" top=\"4\" left=\"4\">\n <BoemlyAlert text=\"Preview\" status=\"error\" />\n </Box>\n );\n};\n", "import React from 'react';\nimport Head from 'next/head';\nimport {\n DEFAULT_SHARE_ALT,\n DEFAULT_SHARE_IMAGE,\n} from '../../constants/metadata';\nimport {\n Article,\n BlogPosting,\n Brand,\n BreadcrumbList,\n Event,\n FAQPage,\n HowTo,\n LocalBusiness,\n Offer,\n Organization,\n Person,\n Product,\n QAPage,\n Service,\n SoftwareApplication,\n WebPage,\n WithContext,\n} from 'schema-dts';\n\ntype SupportedSchemaType =\n | Article\n | BlogPosting\n | Brand\n | BreadcrumbList\n | Event\n | FAQPage\n | HowTo\n | LocalBusiness\n | Offer\n | Organization\n | Person\n | Product\n | QAPage\n | Product\n | Service\n | SoftwareApplication\n | WebPage;\n\n// Helper function to convert SchemaValue to string\nconst getTextValue = (value: unknown): string => {\n if (typeof value === 'string') return value;\n if (typeof value === 'object' && value !== null && 'text' in value) {\n return (value as { text: string }).text;\n }\n return '';\n};\n\n// Helper function to safely access properties from a schema\nconst getSchemaProperty = (\n schema: SupportedSchemaType,\n property: string\n): string => {\n return (\n getTextValue((schema as unknown as Record<string, unknown>)[property]) || ''\n );\n};\n\n// Helper function to get a unique identifier from a schema\nconst getSchemaIdentifier = (schema: SupportedSchemaType): string => {\n const type = (schema as { '@type': string })['@type'];\n\n switch (type) {\n case 'Organization':\n return getSchemaProperty(schema, 'name') || 'default';\n case 'Article':\n case 'BlogPosting':\n return getSchemaProperty(schema, 'headline') || 'untitled-article';\n case 'Product':\n return getSchemaProperty(schema, 'name') || 'untitled-product';\n case 'Person':\n return getSchemaProperty(schema, 'name') || 'unnamed-person';\n case 'Event':\n return getSchemaProperty(schema, 'name') || 'untitled-event';\n case 'LocalBusiness':\n return getSchemaProperty(schema, 'name') || 'unnamed-business';\n case 'Service':\n return getSchemaProperty(schema, 'name') || 'unnamed-service';\n case 'Brand':\n return getSchemaProperty(schema, 'name') || 'unnamed-brand';\n case 'FAQPage':\n return 'faq-page';\n case 'HowTo':\n return getSchemaProperty(schema, 'name') || 'untitled-howto';\n case 'BreadcrumbList':\n return 'breadcrumbs';\n case 'Offer':\n const offer = schema as Offer;\n return `offer-${offer.price ?? 'unknown-price'}`;\n case 'WebPage':\n return getSchemaProperty(schema, 'name') || 'untitled-page';\n case 'QAPage':\n return getSchemaProperty(schema, 'name') || 'untitled-qa';\n case 'SoftwareApplication':\n return getSchemaProperty(schema, 'name') || 'untitled-software';\n default:\n return 'unknown-schema';\n }\n};\n\ninterface SEOTagsProps {\n title: string;\n description: string;\n shareImage?: {\n url: string;\n alt: string;\n };\n metaTitleSuffix?: string;\n favicon?: string;\n domain?: string;\n /**\n * Structured data for SEO purposes, following the schema.org standard.\n * This can be a single schema object or an array of schema objects.\n * Each object must include an `@context` property set to \"https://schema.org\"\n * and an `@type` property indicating the type of schema (e.g., Article, Product).\n */\n schemaMarkup?:\n | WithContext<SupportedSchemaType>\n | WithContext<SupportedSchemaType>[];\n}\n\nconst validateSchema = (\n schema: WithContext<SupportedSchemaType> | WithContext<SupportedSchemaType>[]\n): boolean => {\n if (Array.isArray(schema)) {\n return schema.every(\n (item) => item['@context'] === 'https://schema.org' && '@type' in item\n );\n }\n return schema['@context'] === 'https://schema.org' && '@type' in schema;\n};\n\nexport const SEOTags: React.FC<SEOTagsProps> = ({\n title,\n description,\n shareImage,\n metaTitleSuffix = 'Tree.ly',\n favicon = 'https://cdn.tree.ly/favicon.ico',\n domain = 'tree.ly',\n schemaMarkup,\n}: SEOTagsProps) => {\n const shareImageUrl = shareImage?.url ?? DEFAULT_SHARE_IMAGE;\n const shareImageAlt = shareImage?.alt ?? DEFAULT_SHARE_ALT;\n\n let schemas = schemaMarkup;\n let isValidSchema = schemaMarkup ? validateSchema(schemaMarkup) : false;\n\n if (schemaMarkup && !isValidSchema) {\n console.warn(\n 'Invalid schema markup provided to SEOTags component. Schema markup will not be rendered.',\n schemaMarkup\n );\n schemas = undefined;\n isValidSchema = false;\n }\n\n const schemaArray = schemas\n ? Array.isArray(schemas)\n ? schemas\n : [schemas]\n : [];\n\n const getSchemaKey = (\n schema: WithContext<SupportedSchemaType>,\n index: number\n ): string => {\n const type = (schema as { '@type': string })['@type'];\n const identifier = getSchemaIdentifier(schema as SupportedSchemaType);\n return `${type}-${identifier}-${index}`;\n };\n\n return (\n <Head>\n <title>{`${title} - ${metaTitleSuffix}`}</title>\n <meta name=\"description\" content={description} />\n <link rel=\"icon\" href={favicon} />\n\n <meta property=\"og:url\" content={`https://${domain}`} />\n <meta property=\"og:type\" content=\"website\" />\n <meta property=\"og:title\" content={title} />\n <meta property=\"og:description\" content={description} />\n <meta property=\"og:image\" content={shareImageUrl} />\n <meta property=\"og:image:alt\" content={shareImageAlt} />\n\n <meta name=\"twitter:card\" content=\"summary_large_image\" />\n <meta property=\"twitter:domain\" content={domain} />\n <meta property=\"twitter:url\" content={`https://${domain}`} />\n <meta name=\"twitter:title\" content={title} />\n <meta name=\"twitter:description\" content={description} />\n <meta name=\"twitter:image\" content={shareImageUrl} />\n <meta name=\"twitter:image:alt\" content={shareImageAlt} />\n\n {isValidSchema &&\n schemaArray.map((schema, index) => (\n <script\n key={getSchemaKey(schema, index)}\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{\n __html: JSON.stringify(schema),\n }}\n />\n ))}\n </Head>\n );\n};\n", "import React, { useState } from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Wrapper,\n useMediaQuery,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport FullScreenImage from '../../components/FullScreenImage';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\n\ninterface FullWidthImageSlice extends StrapiDefaultHeader {\n image: StrapiImage;\n}\nexport interface FullWidthImageProps {\n slice: FullWidthImageSlice;\n}\n\nexport const FullWidthImage: React.FC<FullWidthImageProps> = ({\n slice,\n}: FullWidthImageProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const [isMobile] = useMediaQuery([BREAKPOINT_MD_QUERY]);\n\n return (\n <DefaultSectionContainer title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n isHero\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center', mt: ['32', null, null, '56'] }}\n titleProps={{ textAlign: 'center', maxW: '6xl', marginX: 'auto' }}\n textProps={{ textAlign: 'center', maxW: '3xl', marginX: 'auto' }}\n />\n\n <Box position=\"relative\" mt=\"20\" minHeight={['xl', null, '3xl']}>\n <Image\n src={strapiMediaUrl(slice.image.img, 'xLarge')}\n alt={slice.image.alt}\n fill\n style={{\n objectFit: slice.image.objectFit || 'cover',\n cursor: isMobile ? 'unset' : 'pointer',\n borderRadius: 'var(--boemly-radii-2xl)',\n }}\n onClick={() => !isMobile && setIsOpen(true)}\n />\n\n <FullScreenImage\n images={[slice.image]}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n />\n </Box>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { BoemlyModal, Flex, IconButton } from 'boemly';\nimport { useScrollLock } from '@reactuses/core';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport { CaretLeftIcon, CaretRightIcon } from '@phosphor-icons/react';\nimport ZoomableImage from './ZoomableImage';\n\nexport interface FullScreenImageProps {\n images: StrapiImage[];\n isOpen: boolean;\n onClose: () => void;\n currentIndex?: number;\n setCurrentIndex?: (callback: (c: number) => number) => void;\n}\n\nexport const FullScreenImage = ({\n images,\n isOpen,\n onClose,\n currentIndex = 0,\n setCurrentIndex,\n}: FullScreenImageProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [, setLocked] = useScrollLock(\n typeof document !== 'undefined' ? document.body : null\n );\n useEffect(() => {\n setLocked(isOpen);\n return () => {\n setLocked(false);\n };\n }, [isOpen, setLocked]);\n\n const canMoveRight = useMemo(\n () => currentIndex < images.length - 1,\n [currentIndex, images.length]\n );\n const canMoveLeft = useMemo(() => currentIndex !== 0, [currentIndex]);\n\n const onRight = useCallback(\n () => canMoveRight && setCurrentIndex && setCurrentIndex((c) => c + 1),\n [canMoveRight, setCurrentIndex]\n );\n const onLeft = useCallback(\n () => canMoveLeft && setCurrentIndex && setCurrentIndex((c) => c - 1),\n [canMoveLeft, setCurrentIndex]\n );\n\n useEffect(() => {\n if (!isOpen) return;\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n onRight();\n } else if (event.key === 'ArrowLeft') {\n event.preventDefault();\n onLeft();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [isOpen, onRight, onLeft]);\n\n useEffect(() => {\n if (!!isOpen) {\n setTimeout(() => {\n containerRef?.current?.scrollTo({\n left: currentIndex * containerRef.current.clientWidth,\n behavior: 'instant',\n });\n }, 10);\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (containerRef.current) {\n containerRef.current.scrollTo({\n left: currentIndex * containerRef.current.clientWidth,\n behavior: 'smooth',\n });\n }\n }, [currentIndex, containerRef]);\n\n return (\n <BoemlyModal\n onOpenChange={(isModalOpen) => {\n if (!isModalOpen) {\n onClose();\n }\n }}\n open={isOpen}\n title=\"\"\n trigger={<span style={{ display: 'none' }} />}\n size=\"full\"\n content={\n <Flex\n position=\"absolute\"\n insetY=\"16\"\n insetX=\"0\"\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <Flex\n ref={containerRef}\n flexGrow=\"1\"\n flexBasis=\"100%\"\n flexShrink=\"1\"\n gap=\"4\"\n marginX=\"24\"\n scrollSnapType=\"x mandatory\"\n overflow=\"hidden\"\n position=\"relative\"\n height=\"full\"\n width=\"full\"\n >\n {images.map((image) => (\n <ZoomableImage key={image.id} image={image} />\n ))}\n </Flex>\n\n <Flex\n position=\"absolute\"\n inset=\"6\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n pointerEvents=\"none\"\n >\n <IconButton\n visibility={canMoveLeft ? 'visible' : 'hidden'}\n onClick={onLeft}\n aria-label=\"Previous picture\"\n variant=\"outline\"\n pointerEvents=\"all\"\n mr=\"6\"\n >\n <CaretLeftIcon size={16} />\n </IconButton>\n <IconButton\n visibility={canMoveRight ? 'visible' : 'hidden'}\n onClick={onRight}\n aria-label=\"Next picture\"\n variant=\"outline\"\n pointerEvents=\"all\"\n ml=\"4\"\n >\n <CaretRightIcon size={16} />\n </IconButton>\n </Flex>\n </Flex>\n }\n />\n );\n};\n", "import StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport { Box } from 'boemly';\nimport Head from 'next/head';\nimport Image from 'next/image';\nimport React, { useState } from 'react';\n\ninterface ZoomableImageProps {\n image: StrapiImage;\n zoom?: number;\n}\n\nconst ZoomableImage = ({ image, zoom = 200 }: ZoomableImageProps) => {\n // define and set default values to the states of the component\n const [isZoomed, setIsZoomed] = useState(false);\n const [backgroundPos, setBackgroundPos] = useState('50% 50%');\n\n const imageSrc = strapiMediaUrl(image.img, 'xLarge');\n\n const zoomInPosition = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n // This will handle the calculations of the area where the image needs to zoom in depending on the user interaction\n const zoomer = e.currentTarget.getBoundingClientRect();\n const x = ((e.clientX - zoomer.x) / zoomer.width) * 100;\n const y = ((e.clientY - zoomer.y) / zoomer.height) * 100;\n setBackgroundPos(`${x}% ${y}%`);\n };\n\n const toggleZoomImage = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n if (isZoomed) {\n setIsZoomed(false);\n } else {\n // Zoom in and set the background position correctly\n setIsZoomed(true);\n zoomInPosition(e);\n }\n };\n\n const handleClick = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n toggleZoomImage(e);\n };\n\n const handleMove = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n if (isZoomed) {\n zoomInPosition(e);\n }\n };\n\n return (\n <>\n <Head>\n <link rel=\"prefetch\" as=\"image\" href={imageSrc} />\n </Head>\n <Box\n position=\"relative\"\n display=\"inline-block\"\n width=\"full\"\n height=\"full\"\n overflow=\"hidden\"\n flexShrink=\"0\"\n scrollSnapAlign=\"center\"\n scrollSnapStop=\"always\"\n draggable=\"false\"\n cursor={isZoomed ? 'zoom-out' : 'zoom-in'}\n backgroundImage={isZoomed ? `url( ${imageSrc} )` : 'none'}\n backgroundSize={`${zoom}%`}\n backgroundPosition={backgroundPos}\n onClick={(e) => handleClick(e)}\n onMouseMove={(e) => handleMove(e)}\n >\n <Image\n src={imageSrc}\n alt={image.alt}\n fill\n style={{\n visibility: isZoomed ? 'hidden' : 'visible',\n objectFit: 'contain',\n }}\n />\n </Box>\n </>\n );\n};\n\nexport default ZoomableImage;\n", "import { FullScreenImage } from './FullScreenImage';\n\nexport default FullScreenImage;\n", "export const BREAKPOINT_SM = `${320 - 1}px`;\nexport const BREAKPOINT_MD = `${768 - 1}px`;\nexport const BREAKPOINT_LG = `${960 - 1}px`;\nexport const BREAKPOINT_XL = `${1200 - 1}px`;\n\nexport const BREAKPOINT_SM_QUERY = `(max-width: ${BREAKPOINT_SM})`;\nexport const BREAKPOINT_MD_QUERY = `(max-width: ${BREAKPOINT_MD})`;\nexport const BREAKPOINT_LG_QUERY = `(max-width: ${BREAKPOINT_LG})`;\nexport const BREAKPOINT_XL_QUERY = `(max-width: ${BREAKPOINT_XL})`;\n", "import { FullWidthImage } from './FullWidthImage';\n\nexport default FullWidthImage;\n", "import React from 'react';\nimport { Box, DefaultSectionHeader, Flex, Gradient, Wrapper } from 'boemly';\nimport Image from 'next/image';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiButtonWithVariant from '../../models/strapi/StrapiButtonWithVariant';\n\nexport interface HeroProps {\n slice: {\n tagline?: string;\n title: string;\n subTitle: string;\n button?: StrapiLink;\n additionalButtons: StrapiButtonWithVariant[];\n image?: StrapiImage;\n textAlign: 'left' | 'center';\n shape?: StrapiImage;\n };\n}\n\nexport const Hero = ({ slice }: HeroProps): React.JSX.Element => (\n <Box\n position=\"relative\"\n width=\"full\"\n height=\"var(--default-hero-height)\"\n minHeight=\"2xl\"\n backgroundColor=\"gray.900\"\n overflowX=\"hidden\"\n >\n {slice.image && (\n <>\n <Image\n src={strapiMediaUrl(slice.image.img, 'xLarge')}\n alt={slice.image.alt}\n fill\n style={{ objectFit: slice.image.objectFit || 'cover' }}\n />\n <Gradient />\n </>\n )}\n {slice.shape && (\n <Box\n position=\"absolute\"\n bottom=\"0\"\n borderTopRightRadius=\"full\"\n width={['3xs', null, '2xs', null, 'sm']}\n height={['3xs', null, '2xs', null, 'sm']}\n right={['-16', null, '24']}\n >\n <Image\n src={strapiMediaUrl(slice.shape.img, 'medium')}\n alt={slice.shape.alt}\n fill\n style={{\n objectFit: slice.shape.objectFit || 'cover',\n borderTopRightRadius: 'var(--boemly-radii-full)',\n }}\n />\n </Box>\n )}\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"56%\"\n width=\"full\"\n textAlign={slice.textAlign}\n transform=\"translateY(-50%)\"\n >\n <Wrapper>\n <>\n <DefaultSectionHeader\n isHero\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n taglineProps={{ color: 'white' }}\n titleProps={{\n color: 'white',\n maxW: slice.textAlign === 'center' ? '4xl' : '3xl',\n mx: slice.textAlign === 'center' ? 'auto' : 'unset',\n textAlign: slice.textAlign,\n }}\n textProps={{\n maxW: '2xl',\n mx: slice.textAlign === 'center' ? 'auto' : 'unset',\n textAlign: slice.textAlign,\n color: 'white',\n }}\n />\n\n <Flex\n gap=\"8\"\n justifyContent={slice.textAlign === 'center' ? 'center' : 'start'}\n >\n {slice.button && (\n <StrapiLinkButton\n key={slice.button.id}\n mt=\"10\"\n size=\"xl\"\n link={slice.button}\n component=\"Hero\"\n />\n )}\n {slice.additionalButtons.map((button) => (\n <StrapiLinkButton\n key={button.button.id}\n mt=\"10\"\n size=\"xl\"\n variant={button.variant}\n link={button.button}\n component=\"Hero\"\n />\n ))}\n </Flex>\n </>\n </Wrapper>\n </Box>\n </Box>\n);\n", "import React, { useContext } from 'react';\nimport { Button } from 'boemly';\nimport Link from 'next/link';\nimport { useDetectAdBlock } from 'adblock-detect-react';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport openHubSpotChat from '../../utils/openHubSpotChat';\nimport { AnalyticsContext } from '../ContextProvider/ContextProvider';\n\nexport interface StrapiLinkButtonProps {\n link: StrapiLink;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n variant?: 'solid' | 'outline' | 'outlineWhite' | 'link' | 'ghost';\n colorPalette?: 'primary' | 'gray' | 'orange' | 'green' | 'white';\n rightIcon?: React.JSX.Element;\n leftIcon?: React.JSX.Element;\n mt?: any;\n mr?: any;\n mb?: any;\n ml?: any;\n mx?: any;\n my?: any;\n background?: string;\n width?: string;\n component?: string;\n}\n\nexport const StrapiLinkButton: React.FC<StrapiLinkButtonProps> = ({\n link,\n component = 'StrapiLinkButton',\n rightIcon,\n leftIcon,\n ...buttonProps\n}: StrapiLinkButtonProps) => {\n const adBlockDetected = useDetectAdBlock();\n const analyticsFunction = useContext(AnalyticsContext);\n\n const handleClick = () => {\n const buttonUrl =\n link.intercomLauncher && adBlockDetected\n ? 'mailto:hello@tree.ly'\n : strapiLinkUrl(link);\n\n analyticsFunction?.({\n type: 'track',\n props: {\n action: 'click',\n component,\n buttonText: link.text,\n buttonUrl,\n },\n });\n };\n\n const buttonContent = (\n <>\n {leftIcon}\n {link.text}\n {rightIcon}\n </>\n );\n\n if (link.intercomLauncher) {\n if (adBlockDetected) {\n return (\n <Button {...buttonProps} asChild onClick={handleClick}>\n <Link href=\"mailto:hello@tree.ly\">{buttonContent}</Link>\n </Button>\n );\n }\n\n return (\n <Button\n {...buttonProps}\n onClick={() => {\n handleClick();\n openHubSpotChat();\n }}\n >\n {buttonContent}\n </Button>\n );\n }\n\n return (\n <Button {...buttonProps} asChild onClick={handleClick}>\n <Link href={strapiLinkUrl(link)}>{buttonContent}</Link>\n </Button>\n );\n};\n", "const openHubSpotChat = () => {\n const w = window as any;\n\n if (w.HubSpotConversations) {\n w.HubSpotConversations.widget.open();\n } else {\n w.hsConversationsOnReady = [\n () => {\n w.HubSpotConversations.widget.open();\n },\n ];\n }\n};\n\nexport default openHubSpotChat;\n", "import React, { createContext } from 'react';\nimport { createIntl, createIntlCache } from 'react-intl';\nimport { Global } from '@emotion/react';\nimport { BoemlyThemeProvider } from 'boemly';\nimport { GLOBAL_STYLE } from '../../constants/globalStyle';\nimport { FONT_CUSTOMIZATIONS } from '../../constants/fontCustomizations';\nimport getMessages from '../../utils/getMessages';\nimport strapiClient from '../../integrations/strapi/strapiClient';\nimport { SWRConfig } from 'swr/_internal';\n\nexport type AnalyticsFunction = ({\n type,\n props,\n}: {\n type: 'track' | 'page';\n props?: Record<string, any>;\n}) => void;\n\nexport const AnalyticsContext = createContext<AnalyticsFunction | undefined>(\n undefined\n);\n\nconst cache = createIntlCache();\n\nconst intlFactory = (locale: string) =>\n createIntl(\n {\n locale,\n messages: getMessages(locale),\n },\n cache\n );\n\nexport const IntlContext = createContext(intlFactory('en'));\n\nexport interface ContextProviderProps {\n children: React.ReactNode;\n locale: string;\n analyticsFunction?: AnalyticsFunction;\n}\n\nexport const ContextProvider: React.FC<ContextProviderProps> = ({\n children,\n locale,\n analyticsFunction,\n}: ContextProviderProps): React.JSX.Element => {\n const fetcher = async (resource: any, init: any) => {\n const response = await strapiClient.get(`${resource}`, {\n ...init,\n headers: {},\n });\n // Check if the response was an error:\n if (response.status < 200 || response.status >= 300) {\n let errorData = { message: '' };\n try {\n errorData = await response.data;\n } catch (error) {\n errorData = {\n message: `An unknown error occurred while fetching data.`,\n };\n }\n throw new Error(errorData.message); // Throwing the error will lead to onError being called\n }\n\n return { body: await response.data, headers: response.headers };\n };\n return (\n <>\n <SWRConfig\n value={{\n fetcher,\n }}\n >\n <Global styles={{ GLOBAL_STYLE }} />\n <BoemlyThemeProvider fonts={FONT_CUSTOMIZATIONS}>\n <IntlContext.Provider value={intlFactory(locale)}>\n <AnalyticsContext.Provider value={analyticsFunction}>\n {children}\n </AnalyticsContext.Provider>\n </IntlContext.Provider>\n </BoemlyThemeProvider>\n </SWRConfig>\n </>\n );\n};\n", "import { css } from '@emotion/react';\n\nexport const GLOBAL_STYLE = css`\n :root {\n --default-hero-height: calc(100vh - var(--boemly-spacing-24));\n }\n\n a {\n text-decoration: none;\n }\n`;\n", "interface FontsCustomization {\n body?: { value: string };\n display?: { value: string };\n heading?: { value: string };\n mono?: { value: string };\n}\n\nexport const FONT_CUSTOMIZATIONS: FontsCustomization = {\n body: { value: 'Inter' },\n heading: { value: 'Inter' },\n display: { value: 'GintoNord' },\n mono: { value: 'SpaceMono' },\n};\n\nexport default FontsCustomization;\n", "const messagesDe = {\n 'sections.comparison.backgroundShapes': 'Hintergrundformen',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'components.creditsAvailableBadge.text.yes': 'Credits verf\u00FCgbar',\n 'components.creditsAvailableBadge.text.some': 'Einige verbleibende Credits',\n 'components.creditsAvailableBadge.text.no': 'Keine verbleibenden Credits',\n 'components.creditsAvailableBadge.text.notYet': 'Credits bald verf\u00FCgbar',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.cta.backgroundShapes': 'Dunkle Hintergrundformen',\n 'sections.cta.backgroundShapesLight': 'Helle Hintergrundformen',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.customerCard.more': 'Weiterlesen',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.customerQuoteCard.more': 'Weiterlesen',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.eventCard.recommendedEvent': 'Empfohlene Veranstaltung',\n 'sections.eventCard.buttonShowMore': 'Mehr anzeigen',\n 'sections.eventCard.buttonShowLess': 'Weniger anzeigen',\n\n 'sections.eventCard.eventType.conference': 'Konferenz',\n 'sections.eventCard.eventType.webinar': 'Webinar',\n 'sections.eventCard.eventType.forestwalk': 'Waldspaziergang',\n 'sections.eventCard.eventType.partnerevent': 'Partnerveranstaltung',\n 'sections.eventCard.eventType.lunch&learn': 'Mittagessen & Lernen',\n 'sections.eventCard.eventType.fair': 'Messe',\n 'sections.eventCard.eventType.festival': 'Festival',\n 'sections.eventCard.eventType.roadshow': 'Roadshow',\n 'sections.eventCard.eventType.meetup': 'Meet Up',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.events.loadMore': 'Mehr laden',\n 'sections.events.noUpcomingEvents':\n 'Keine bevorstehenden Veranstaltungen gefunden',\n 'sections.events.noPastEvents': 'Keine vergangenen Veranstaltungen gefunden',\n 'sections.eventsFilter.searchPlaceholder': 'Suchen',\n 'sections.events.eventsFilter.eventType': 'Event Type',\n 'sections.events.eventsFilter.language': 'Sprache',\n 'sections.events.eventsFilter.sortBy.title': 'Sortieren nach',\n 'sections.events.eventsFilter.sortBy.newest': 'Neueste zuerst',\n 'sections.events.eventsFilter.sortBy.oldest': '\u00C4lteste zuerst',\n};\n\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.glossary.copyButtonLabel':\n 'Kopiere den Link zu diesem Abschnitt in die Zwischenablage',\n 'sections.glossary.copySuccessMessage': 'Link in die Zwischenablage kopiert',\n 'sections.glossary.copyFailureMessage':\n 'Link konnte nicht in die Zwischenablage kopiert werden',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'features.portfolio.documentsDownloadList.projectDocuments':\n 'Projektdokumente',\n 'features.portfolio.documentsDownloadList.downloadDocument':\n 'Dokument herunterladen',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.projectFacts.projectInfo.value': 'Projekt Infos',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'components.projectGridCard.certified': 'Zertifiziert, {year}',\n 'components.projectGridCard.certificationInProgress':\n 'Zertifizierung ist in Arbeit',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.projectsMap.link.text': 'Mehr Infos',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'features.projectInfo.projectInfo.value': 'Projekt Infos',\n 'features.projectInfo.properties.area': 'Projekt Fl\u00E4che',\n 'features.projectInfo.properties.location': 'Standort',\n 'features.projectInfo.properties.start': 'Projekt Start Datum',\n 'features.projectInfo.properties.timeSpan': 'Projekt Zeitraum',\n 'features.projectInfo.properties.projectType': 'Projekt Typ',\n 'features.projectInfo.properties.projectDeveloper': 'Projekt Entwickler',\n 'features.projectInfo.properties.verificationStandard.label':\n 'Verifizierungsstandard',\n 'features.projectInfo.properties.verificationStandard.value.SilvaconsultFCSISO14':\n 'SILVACONSULT\u00AE Forest Carbon Standard, ISO 14064-2',\n 'features.projectInfo.properties.verificationStandard.value.MfKWCH':\n 'Methodik f\u00FCr Klimaschutzprojekte im Wald f\u00FCr die Schweiz',\n 'features.projectInfo.properties.projectVolume.toolTip':\n 'Dies ist die durchschnittliche Anzahl der Credits, die pro Jahr ausgestellt werden. Dieser Wert entspricht nicht den Verf\u00FCgbarkeiten.',\n 'features.projectInfo.properties.projectVolume.label': 'Projektvolumen',\n 'features.projectInfo.properties.riskBuffer': 'Anteil Risikopuffer',\n\n 'features.projectInfo.properties.year':\n '{years} {years, plural, one {Jahr} other {Jahre} }',\n};\n\nexport default messagesDe;\n", "const messagesDe = {\n 'portfolio.smallCheckout.price.taxNotIncluded': 'ohne Steuern',\n 'portfolio.smallCheckout.price.taxIncluded':\n 'Preis inklusive Steuern: {number}',\n\n 'portfolio.smallCheckout.contributionValueCurrency.label.CHF':\n 'Geben Sie den Beitrag in Fr. ein',\n 'portfolio.smallCheckout.contributionValueCurrency.label.EUR':\n 'Geben Sie den Beitrag in \u20AC ein',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '\u20AC',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.CHF': 'Fr.',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.CHF':\n 'Der Wert muss mindestens 10 CHF betragen',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.EUR':\n 'Der Wert muss mindestens 10 Euro betragen.',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.empty':\n 'Bitte geben Sie einen Wert ein',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh':\n 'F\u00FCr gr\u00F6\u00DFere Eink\u00E4ufe kontaktieren Sie bitte unser Verkaufsteam',\n\n 'portfolio.smallCheckout.contributionValueTons.label': 'Beitrag in Tonnen',\n\n 'portfolio.smallCheckout.submitButton': 'Credits kaufen',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.shopCheckout.intro.price': 'Preis',\n\n 'sections.shopCheckout.contributionValue.label.EUR':\n 'Geben sie einen Betrag in \u20AC ein',\n 'sections.shopCheckout.contributionValue.label.CHF':\n 'Geben sie einen Betrag in CHF ein',\n 'sections.shopCheckout.contributionValue.unit.EUR': '\u20AC',\n 'sections.shopCheckout.contributionValue.unit.CHF': 'CHF',\n 'sections.shopCheckout.contributionValue.validation.empty':\n 'Bitte geben sie einen Betrag ein',\n 'sections.shopCheckout.contributionValue.validation.tooLow.EUR':\n 'Der Betrag muss mindestens 10 Euro sein',\n 'sections.shopCheckout.contributionValue.validation.tooLow.CHF':\n 'Der Betrag muss mindestens 10 CHF sein',\n 'sections.shopCheckout.contributionValue.validation.tooHigh':\n 'F\u00FCr gr\u00F6\u00DFere Eink\u00E4ufe kontaktieren Sie bitte unser Verkaufsteam \u00FCber office@tree.ly',\n\n 'sections.shopCheckout.summary.kg': 'Menge',\n 'sections.shopCheckout.summary.price': 'Preis',\n 'sections.shopCheckout.summary.price.taxNotIncluded': 'ohne Steuern',\n 'sections.shopCheckout.summary.price.taxIncluded':\n 'Preis inklusive Steuern: {number}',\n\n 'sections.shopCheckout.submit': 'Kaufen',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.textCarousel.moveRight': 'Nach rechts bewegen',\n 'sections.textCarousel.moveLeft': 'Nach links bewegen',\n};\nexport default messagesDe;\n", "const messagesDe = {\n 'sections.timeline.backgroundShapes': 'Hintergrundformen',\n 'sections.timeline.showMoreButton': 'Drei weitere Meilensteine anzeigen',\n};\nexport default messagesDe;\n", "const unitMessagesDe = {\n 'unit.formatter.tonsCo2': '{number} /tCO\u2082',\n 'unit.formatter.tonsCo2PerYear': '{number} tCO\u2082/Jahr',\n};\nexport default unitMessagesDe;\n", "import comparisonMessagesDe from './slices/Comparison/messages.de';\nimport creditsAvailableBadgeMessagesDe from './components/CreditsAvailableBadge/messages.de';\nimport ctaMessagesDe from './slices/Cta/messages.de';\nimport customerCardMessagesDe from './components/CustomerCard/messages.de';\nimport customerQuoteCardMessagesDe from './components/CustomerQuoteCard/messages.de';\nimport eventCardMessagesDe from './components/EventCard/messages.de';\nimport eventsMessagesDe from './slices/Events/messages.de';\nimport glossaryMessagesDe from './slices/Glossary/messages.de';\nimport portfolioDocumentsDownloadListMessagesDe from './components/portfolio/DocumentsDownloadList/messages.de';\nimport projectFactsMessagesDe from './slices/ProjectFacts/messages.de';\nimport projectGridCardMessagesDe from './components/ProjectGridCard/messages.de';\nimport projectsMapMessagesDe from './slices/ProjectsMap/messages.de';\nimport portfolioProjectInfoMessagesDe from './components/portfolio/ProjectInfo/messages.de';\nimport portfolioSmallCheckoutMessagesDe from './components/portfolio/SmallCheckout/messages.de';\nimport shopCheckoutMessagesDe from './slices/ShopCheckout/messages.de';\nimport textCarouselMessagesDe from './slices/TextCarousel/messages.de';\nimport timelineMessagesDe from './slices/Timeline/messages.de';\n\nimport unitMessagesDe from './unit.messages.de';\n\nconst rootMessagesDe = {\n //\n // Components\n //\n ...creditsAvailableBadgeMessagesDe,\n ...eventCardMessagesDe,\n ...portfolioDocumentsDownloadListMessagesDe,\n ...portfolioProjectInfoMessagesDe,\n ...portfolioSmallCheckoutMessagesDe,\n ...projectGridCardMessagesDe,\n\n //\n // Slices\n //\n ...comparisonMessagesDe,\n ...ctaMessagesDe,\n ...customerCardMessagesDe,\n ...customerQuoteCardMessagesDe,\n ...eventsMessagesDe,\n ...glossaryMessagesDe,\n ...projectFactsMessagesDe,\n ...projectsMapMessagesDe,\n ...shopCheckoutMessagesDe,\n ...textCarouselMessagesDe,\n ...timelineMessagesDe,\n\n //\n // Units\n //\n ...unitMessagesDe,\n};\n\nexport default rootMessagesDe;\n", "const messagesEn = {\n 'sections.comparison.backgroundShapes': 'Background shapes',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'components.creditsAvailableBadge.text.yes': 'Credits available',\n 'components.creditsAvailableBadge.text.some': 'Some remaining credits',\n 'components.creditsAvailableBadge.text.no': 'No remaining credits',\n 'components.creditsAvailableBadge.text.notYet': 'Credits available soon',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'sections.cta.backgroundShapesDark': 'Dark background shapes',\n 'sections.cta.backgroundShapesLight': 'Light background shapes',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'sections.customerCard.more': 'Read more',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'sections.customerQuoteCard.more': 'Read more',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'sections.eventCard.recommendedEvent': 'Recommended Event',\n 'sections.eventCard.buttonShowMore': 'Show More',\n 'sections.eventCard.buttonShowLess': 'Show Less',\n\n 'sections.eventCard.eventType.conference': 'Conference',\n 'sections.eventCard.eventType.webinar': 'Webinar',\n 'sections.eventCard.eventType.forestwalk': 'Forest Walk',\n 'sections.eventCard.eventType.partnerevent': 'Partner Event',\n 'sections.eventCard.eventType.lunch&learn': 'Lunch & Learn',\n 'sections.eventCard.eventType.fair': 'Fair',\n 'sections.eventCard.eventType.festival': 'Festival',\n 'sections.eventCard.eventType.roadshow': 'Roadshow',\n 'sections.eventCard.eventType.meetup': 'Meet Up',\n};\nexport default messagesEn;\n", "const messagesDe = {\n 'sections.events.loadMore': 'Load more',\n 'sections.events.noUpcomingEvents': 'No upcoming events found',\n 'sections.events.noPastEvents': 'No past events found',\n 'sections.events.eventsFilter.searchPlaceholder': 'Search',\n 'sections.events.eventsFilter.eventType': 'Event Type',\n 'sections.events.eventsFilter.language': 'Language',\n 'sections.events.eventsFilter.sortBy.title': 'Sort by',\n 'sections.events.eventsFilter.sortBy.newest': 'Newest first',\n 'sections.events.eventsFilter.sortBy.oldest': 'Oldest first',\n};\n\nexport default messagesDe;\n", "const messagesEn = {\n 'sections.glossary.copyButtonLabel':\n 'Copy a link to this section to your clipboard',\n 'sections.glossary.copySuccessMessage': 'Copied the link to your clipboard',\n 'sections.glossary.copyFailureMessage': 'Could not copy link to clipboard',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'features.portfolio.documentsDownloadList.projectDocuments':\n 'Project documents',\n 'features.portfolio.documentsDownloadList.downloadDocument':\n 'Download document',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'sections.projectFacts.projectInfo.value': 'Project Infos',\n};\nexport default messagesEn;\n", "const messagesDe = {\n 'components.projectGridCard.certified': 'Certified, {year}',\n 'components.projectGridCard.certificationInProgress':\n 'Certification in progress',\n};\nexport default messagesDe;\n", "const messagesEn = {\n 'sections.projectsMap.link.text': 'Show more info',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'features.projectInfo.projectInfo.value': 'Project Infos',\n 'features.projectInfo.properties.area': 'Project Area',\n 'features.projectInfo.properties.location': 'Location',\n 'features.projectInfo.properties.start': 'Project Start Date',\n 'features.projectInfo.properties.timeSpan': 'Project Time Span',\n 'features.projectInfo.properties.projectType': 'Project Type',\n 'features.projectInfo.properties.projectDeveloper': 'Project Developer',\n 'features.projectInfo.properties.verificationStandard.label':\n 'Verification Standard',\n 'features.projectInfo.properties.verificationStandard.value.SilvaconsultFCSISO14':\n 'SILVACONSULT\u00AE Forest Carbon Standard, ISO 14064-2',\n 'features.projectInfo.properties.verificationStandard.value.MfKWCH':\n 'Methodik f\u00FCr Klimaschutzprojekte im Wald f\u00FCr die Schweiz',\n 'features.projectInfo.properties.projectVolume.label': 'Project Volume',\n 'features.projectInfo.properties.projectVolume.toolTip':\n \"This is the average amount of credits that are issued per year. This value doesn't represent availabilities.\",\n 'features.projectInfo.properties.riskBuffer': 'Risk Buffer Share',\n\n 'features.projectInfo.properties.year':\n '{years} {years, plural, one {year} other {years} }',\n};\n\nexport default messagesEn;\n", "const messagesEn = {\n 'portfolio.smallCheckout.price.taxNotIncluded': 'not including tax',\n 'portfolio.smallCheckout.price.taxIncluded': 'Price including tax: {number}',\n\n 'portfolio.smallCheckout.contributionValueCurrency.label.CHF':\n 'Contribution Amount in CHF',\n 'portfolio.smallCheckout.contributionValueCurrency.label.EUR':\n 'Contribution Amount in \u20AC',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '\u20AC',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.CHF': 'CHF',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.CHF':\n 'The value must be at least 10 CHF',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.EUR':\n 'The value must be at least 10 Euro',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.empty':\n 'Please enter a value',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh':\n 'For bigger purchases please contact our sales team',\n\n 'portfolio.smallCheckout.contributionValueTons.label':\n 'Contribution Amount in Tons',\n\n 'portfolio.smallCheckout.submitButton': 'Buy credits',\n};\nexport default messagesEn;\n", "const messagesEn = {\n 'sections.shopCheckout.intro.price': 'Price',\n\n 'sections.shopCheckout.contributionValue.label.EUR':\n 'Enter contribution value in \u20AC',\n 'sections.shopCheckout.contributionValue.label.CHF':\n 'Enter contribution value in CHF',\n 'sections.shopCheckout.contributionValue.unit.EUR': '\u20AC',\n 'sections.shopCheckout.contributionValue.unit.CHF': 'CHF',\n 'sections.shopCheckout.contributionValue.validation.empty':\n 'Please enter a value',\n 'sections.shopCheckout.contributionValue.validation.tooLow.EUR':\n 'Der Betrag muss mindestens 10 Euro sein',\n 'sections.shopCheckout.contributionValue.validation.tooLow.CHF':\n 'Der Betrag muss mindestens 10 CHF sein',\n 'sections.shopCheckout.contributionValue.validation.tooHigh':\n 'For bigger purchases please contact our sales team via office@tree.ly',\n\n 'sections.shopCheckout.summary.kg': 'Quantity',\n 'sections.shopCheckout.summary.price': 'Price',\n 'sections.shopCheckout.summary.price.taxNotIncluded': 'not including tax',\n 'sections.shopCheckout.summary.price.taxIncluded':\n 'Price including tax: {number}',\n\n 'sections.shopCheckout.submit': 'Checkout',\n};\nexport default messagesEn;\n", "const messagesDe = {\n 'sections.textCarousel.moveRight': 'Move right',\n 'sections.textCarousel.moveLeft': 'Move left',\n};\nexport default messagesDe;\n", "const messagesEn = {\n 'sections.timeline.backgroundShapes': 'Background shapes',\n 'sections.timeline.showMoreButton': 'Show three more milestones',\n};\nexport default messagesEn;\n", "const unitMessagesEn = {\n 'unit.formatter.tonsCo2': '{number} /tCO\u2082',\n 'unit.formatter.tonsCo2PerYear': '{number} tCO\u2082/year',\n};\nexport default unitMessagesEn;\n", "import comparisonMessagesEn from './slices/Comparison/messages.en';\nimport creditsAvailableBadgeMessagesEn from './components/CreditsAvailableBadge/messages.en';\nimport ctaMessagesEn from './slices/Cta/messages.en';\nimport customerCardMessagesEn from './components/CustomerCard/messages.en';\nimport customerQuoteCardMessagesEn from './components/CustomerQuoteCard/messages.en';\nimport eventCardMessagesEn from './components/EventCard/messages.en';\nimport eventsMessagesEn from './slices/Events/messages.en';\nimport glossaryMessagesEn from './slices/Glossary/messages.en';\nimport portfolioDocumentsDownloadListMessagesEn from './components/portfolio/DocumentsDownloadList/messages.en';\nimport projectFactsMessagesEn from './slices/ProjectFacts/messages.en';\nimport projectGridCardMessagesEn from './components/ProjectGridCard/messages.en';\nimport projectsMapMessagesEn from './slices/ProjectsMap/messages.en';\nimport portfolioProjectInfoMessagesEn from './components/portfolio/ProjectInfo/messages.en';\nimport portfolioSmallCheckoutMessagesEn from './components/portfolio/SmallCheckout/messages.en';\nimport shopCheckoutMessagesEn from './slices/ShopCheckout/messages.en';\nimport textCarouselMessagesEn from './slices/TextCarousel/messages.en';\nimport timelineMessagesEn from './slices/Timeline/messages.en';\n\nimport unitMessagesEn from './unit.messages.en';\n\nconst rootMessagesEn = {\n //\n // Components\n //\n ...creditsAvailableBadgeMessagesEn,\n ...eventCardMessagesEn,\n ...portfolioDocumentsDownloadListMessagesEn,\n ...portfolioProjectInfoMessagesEn,\n ...portfolioSmallCheckoutMessagesEn,\n ...projectGridCardMessagesEn,\n\n //\n // Slices\n //\n ...comparisonMessagesEn,\n ...ctaMessagesEn,\n ...customerCardMessagesEn,\n ...customerQuoteCardMessagesEn,\n ...eventsMessagesEn,\n ...glossaryMessagesEn,\n ...projectFactsMessagesEn,\n ...projectsMapMessagesEn,\n ...shopCheckoutMessagesEn,\n ...textCarouselMessagesEn,\n ...timelineMessagesEn,\n\n //\n // Units\n //\n ...unitMessagesEn,\n};\n\nexport default rootMessagesEn;\n", "import { STRAPI_FALLBACK_LOCALE } from '../constants/strapi';\nimport rootMessagesDe from '../rootMessages.de';\nimport rootMessagesEn from '../rootMessages.en';\n\nconst messages = {\n en: rootMessagesEn,\n de: rootMessagesDe,\n};\n\nconst getMessages = (locale: string) => {\n const messagesLocale = Object.keys(messages).includes(`${locale}`)\n ? (locale as keyof typeof messages)\n : STRAPI_FALLBACK_LOCALE;\n\n return messages[messagesLocale];\n};\n\nexport default getMessages;\n", "import { StrapiLinkButton } from './StrapiLinkButton';\n\nexport default StrapiLinkButton;\n", "import { Hero } from './Hero';\n\nexport default Hero;\n", "import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n SimpleGrid,\n Spacer,\n Text,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\n\nexport interface IconGridProps {\n slice: {\n tagline?: string;\n title?: string;\n subTitle?: string;\n iconsWithTextAndButton: {\n id: number;\n title: string;\n text: string;\n icon: StrapiImage;\n button?: StrapiLink;\n }[];\n };\n}\n\nexport const IconGrid = ({ slice }: IconGridProps): React.JSX.Element => {\n const columns = () => {\n if (slice.iconsWithTextAndButton.length === 2) {\n return [1, null, null, 2, 2];\n }\n if (slice.iconsWithTextAndButton.length === 1) {\n return 1;\n }\n return [1, null, null, 2, 3];\n };\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n {slice.title ? (\n <>\n <Flex alignItems=\"center\" flexDirection=\"column\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n taglineProps={{ maxW: '2xl', textAlign: 'center' }}\n titleProps={{ maxW: '3xl', textAlign: 'center' }}\n textProps={{ maxW: '3xl', textAlign: 'center' }}\n />\n </Flex>\n <Spacer height=\"20\" />\n </>\n ) : (\n <></>\n )}\n\n <SimpleGrid\n columns={columns()}\n gap={slice.iconsWithTextAndButton.length === 2 ? '14' : '16'}\n rowGap={['16', null, null, '20']}\n >\n {slice.iconsWithTextAndButton.map((iconWithTextAndButton) => (\n <Box key={iconWithTextAndButton.id}>\n <Box\n margin=\"0 auto\"\n backgroundColor=\"primary.50\"\n borderRadius=\"full\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-around\"\n width=\"6.5rem\"\n height=\"6.5rem\"\n >\n <Box position=\"absolute\" width=\"12\" height=\"12\">\n <Image\n src={strapiMediaUrl(\n iconWithTextAndButton.icon.img,\n 'xSmall'\n )}\n alt={iconWithTextAndButton.icon.alt}\n fill\n style={{\n objectFit:\n iconWithTextAndButton.icon.objectFit || 'contain',\n }}\n />\n </Box>\n </Box>\n <Heading size=\"xl\" textAlign=\"center\" mb=\"4\" mt=\"8\">\n {iconWithTextAndButton.title}\n </Heading>\n <Text size=\"mdRegularNormal\" textAlign=\"center\">\n {iconWithTextAndButton.text}\n </Text>\n {iconWithTextAndButton.button && (\n <Box textAlign=\"center\">\n <StrapiLinkButton\n key={iconWithTextAndButton.button.id}\n mt=\"8\"\n size=\"md\"\n variant=\"outline\"\n link={iconWithTextAndButton.button}\n component=\"IconGrid\"\n />\n </Box>\n )}\n </Box>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { IconGrid } from './IconGrid';\n\nexport default IconGrid;\n", "import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n SimpleGrid,\n Text,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiLinkButtonWithIcon from '../../components/StrapiLinkButtonWithIcon';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLinkWithIcon from '../../models/strapi/StrapiLinkWithIcon';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\ninterface ImageGridSlice extends StrapiDefaultHeader {\n images: {\n id: number;\n title: string;\n subTitle?: string;\n image: StrapiImage;\n links: StrapiLinkWithIcon[];\n }[];\n}\nexport interface ImageGridProps {\n slice: ImageGridSlice;\n}\n\nexport const ImageGrid: React.FC<ImageGridProps> = ({\n slice,\n}: ImageGridProps) => {\n const [primary50] = useToken('colors', ['primary.50']);\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center' }}\n titleProps={{ textAlign: 'center', maxW: '6xl', marginX: 'auto' }}\n textProps={{ textAlign: 'center', maxW: '2xl', marginX: 'auto' }}\n />\n\n <SimpleGrid\n mt=\"24\"\n columns={3}\n gap=\"24\"\n rowGap=\"16\"\n minChildWidth=\"16rem\"\n >\n {slice.images.map(({ id, title, subTitle, image, links }) => (\n <Box key={id}>\n <Box position=\"relative\" height=\"sm\" borderRadius=\"xl\">\n <Image\n src={strapiMediaUrl(image.img, 'medium')}\n alt={image.alt}\n fill\n style={{\n objectFit: image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n <Heading size=\"xl\" mt=\"4\">\n {title}\n </Heading>\n {subTitle && <Text size=\"mdRegularNormal\">{subTitle}</Text>}\n {links && links.length > 0 && (\n <Flex mt=\"3\" flexDir=\"row\" gap=\"2\" flexWrap=\"wrap\">\n {links.map((link) => (\n <StrapiLinkButtonWithIcon\n key={link.id}\n link={link}\n size=\"sm\"\n variant=\"outline\"\n component=\"ImageGrid\"\n />\n ))}\n </Flex>\n )}\n </Box>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import React from 'react';\nimport { CaretRightIcon, GlobeIcon } from '@phosphor-icons/react';\nimport LinkedInIcon from '../../icons/LinkedInIcon';\nimport StrapiLinkWithIcon from '../../models/strapi/StrapiLinkWithIcon';\nimport StrapiLinkButton from '../StrapiLinkButton';\nimport { StrapiLinkButtonProps } from '../StrapiLinkButton/StrapiLinkButton';\n\nexport interface StrapiLinkButtonWithIconProps\n extends Omit<StrapiLinkButtonProps, 'link'> {\n link: StrapiLinkWithIcon;\n}\n\nexport const StrapiLinkButtonWithIcon: React.FC<\n StrapiLinkButtonWithIconProps\n> = ({ link, ...props }: StrapiLinkButtonWithIconProps) => {\n const getLinkIcon = (destination: string) => {\n switch (destination) {\n case 'linkedin': {\n return <LinkedInIcon />;\n }\n case 'web': {\n return <GlobeIcon />;\n }\n default: {\n return <CaretRightIcon />;\n }\n }\n };\n\n return (\n <StrapiLinkButton\n {...props}\n link={link.link}\n rightIcon={getLinkIcon(link.destination)}\n />\n );\n};\n", "import React from 'react';\n\nconst LinkedInIcon = () => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_112_606)\">\n <path\n d=\"M11.9286 11.9285H9.85424V8.67998C9.85424 7.90534 9.84042 6.90813 8.77539 6.90813C7.695 6.90813 7.52969 7.75213 7.52969 8.62357V11.9283H5.45533V5.24799H7.44671V6.16093H7.47459C7.67388 5.82018 7.96186 5.53986 8.30786 5.34984C8.65386 5.15981 9.04493 5.06719 9.4394 5.08183C11.5418 5.08183 11.9295 6.46473 11.9295 8.2638L11.9286 11.9285ZM3.11477 4.33484C2.87669 4.33489 2.64393 4.26433 2.44595 4.13209C2.24796 3.99985 2.09365 3.81188 2.0025 3.59193C1.91135 3.37199 1.88746 3.12995 1.93387 2.89644C1.98027 2.66292 2.09488 2.44841 2.26321 2.28003C2.43153 2.11164 2.646 1.99696 2.8795 1.95047C3.11301 1.90398 3.35504 1.92778 3.57502 2.01884C3.795 2.10992 3.98303 2.26417 4.11533 2.46211C4.24764 2.66004 4.31829 2.89277 4.31833 3.13085C4.31836 3.28894 4.28725 3.44547 4.22678 3.59153C4.1663 3.7376 4.07767 3.87031 3.96591 3.98211C3.85415 4.09392 3.72146 4.18261 3.57541 4.24313C3.42937 4.30365 3.27286 4.33481 3.11477 4.33484ZM4.15194 11.9285H2.07544V5.24799H4.15194V11.9285ZM12.9628 0.000953808H1.03307C0.762304 -0.00210183 0.501383 0.102466 0.307673 0.291681C0.113961 0.480895 0.00330461 0.739273 0 1.01004V12.9892C0.00319151 13.2602 0.113783 13.5187 0.307487 13.7081C0.501192 13.8975 0.762169 14.0023 1.03307 13.9994H12.9628C13.2342 14.0028 13.496 13.8983 13.6904 13.7089C13.8848 13.5195 13.9962 13.2607 14 12.9892V1.00918C13.9961 0.737873 13.8846 0.479199 13.6902 0.28999C13.4958 0.10078 13.2341 -0.00348904 12.9628 8.91429e-05\"\n fill=\"#0A66C2\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_112_606\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n);\n\nexport default LinkedInIcon;\n", "import { StrapiLinkButtonWithIcon } from './StrapiLinkButtonWithIcon';\n\nexport default StrapiLinkButtonWithIcon;\n", "import { ImageGrid } from './ImageGrid';\n\nexport default ImageGrid;\n", "import React, { Fragment } from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Heading,\n SimpleGrid,\n Text,\n useMediaQuery,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { CaretRightIcon } from '@phosphor-icons/react';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport { BREAKPOINT_LG_QUERY } from '../../constants/breakpoints';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { CDN_URI } from '../../constants/api';\n\ninterface ImageTextSequenceSlice extends StrapiDefaultHeader {\n imageTextRows: {\n id: number;\n title: string;\n text: string;\n button?: StrapiLink;\n image: StrapiImage;\n }[];\n background?: boolean;\n}\nexport interface ImageTextSequenceProps {\n slice: ImageTextSequenceSlice;\n}\n\nexport const ImageTextSequence: React.FC<ImageTextSequenceProps> = ({\n slice,\n}: ImageTextSequenceProps) => {\n const [oneColumnGrid] = useMediaQuery([BREAKPOINT_LG_QUERY]);\n const [primary50] = useToken('colors', ['primary.50']);\n const [gray700] = useToken('colors', ['gray.700']);\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n {slice.background ? (\n <>\n <Box\n position=\"absolute\"\n top=\"0\"\n right=\"24\"\n display={['none', null, null, 'unset']}\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/desktop-map-border.svg`}\n alt=\"Map\"\n width=\"786\"\n height=\"897\"\n />\n </Box>\n <Box\n position=\"absolute\"\n top=\"64\"\n right=\"-14\"\n display={['unset', null, null, 'none']}\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/mobile-map-border.svg`}\n alt=\"Map\"\n width=\"227\"\n height=\"452\"\n />\n </Box>\n </>\n ) : (\n <></>\n )}\n <Wrapper>\n <Box position=\"relative\" zIndex=\"1\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: ['left', null, null, null, 'center'] }}\n titleProps={{\n maxW: '6xl',\n marginX: ['0', null, null, null, 'auto'],\n textAlign: ['left', null, null, null, 'center'],\n }}\n textProps={{\n maxW: '2xl',\n marginX: ['0', null, null, null, 'auto'],\n textAlign: ['left', null, null, null, 'center'],\n color: 'black',\n }}\n />\n\n <SimpleGrid\n gap=\"16\"\n mt={['28', null, null, null, '40']}\n columns={[1, null, null, null, 2]}\n >\n {slice.imageTextRows.map(\n ({ id, title, text, button, image }, index) => {\n const imageBox = (\n <Box>\n <Box\n position=\"relative\"\n width=\"full\"\n minHeight={['2xs', null, null, 'sm']}\n >\n <Image\n src={strapiMediaUrl(image.img, 'large')}\n alt={image.alt}\n fill\n style={{\n objectFit: image.objectFit || 'contain',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n </Box>\n );\n return (\n <Fragment key={id}>\n {(oneColumnGrid || index % 2 !== 0) && imageBox}\n <Box\n display=\"flex\"\n alignItems=\"flex-start\"\n flexDirection=\"column\"\n justifyContent=\"center\"\n >\n <Heading as=\"h2\" size=\"xl\" mb=\"4\">\n {title}\n </Heading>\n <Text size=\"mdRegularNormal\">{text}</Text>\n {button && (\n <StrapiLinkButton\n mt=\"5\"\n link={button}\n size=\"sm\"\n variant=\"outline\"\n rightIcon={\n <CaretRightIcon size=\"10\" color={gray700} />\n }\n component=\"ImageTextSequence\"\n />\n )}\n </Box>\n {!oneColumnGrid && index % 2 === 0 && imageBox}\n </Fragment>\n );\n }\n )}\n </SimpleGrid>\n </Box>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { ImageTextSequence } from './ImageTextSequence';\n\nexport default ImageTextSequence;\n", "import React, { useContext } from 'react';\nimport {\n DefaultSectionContainer,\n DefaultSectionHeader,\n Grid,\n GridItem,\n PortfolioCard,\n Spacer,\n BoemlyList,\n Wrapper,\n} from 'boemly';\nimport { ArrowRightIcon } from '@phosphor-icons/react';\nimport Image from 'next/image';\nimport { useRouter } from 'next/router';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiPortfolioCard from '../../models/strapi/StrapiPortfolioCard';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { AnalyticsContext } from '../../components/ContextProvider/ContextProvider';\n\ninterface LeftTextRightCardSlice extends StrapiDefaultHeader {\n checkMarkLabels?: {\n id: number;\n text: string;\n }[];\n button?: StrapiLink;\n card?: StrapiPortfolioCard;\n}\nexport interface LeftTextRightCardProps {\n slice: LeftTextRightCardSlice;\n}\n\nexport const LeftTextRightCard: React.FC<LeftTextRightCardProps> = ({\n slice,\n}: LeftTextRightCardProps) => {\n const { push } = useRouter();\n const analyticsFunction = useContext(AnalyticsContext);\n\n const handleCardButtonClick = () => {\n if (slice.card?.button) {\n if (analyticsFunction) {\n analyticsFunction({\n type: 'track',\n props: {\n action: 'click',\n component: 'LeftTextRightCard',\n buttonText: slice.card?.button?.text,\n buttonUrl: strapiLinkUrl(slice.card?.button),\n cardTitle: slice.card?.title,\n },\n });\n }\n\n push(strapiLinkUrl(slice.card?.button));\n }\n };\n\n return (\n <DefaultSectionContainer title={slice.title}>\n <Wrapper>\n <Grid\n templateColumns={[\n 'repeat(8, 1fr)',\n null,\n null,\n null,\n 'repeat(12, 1fr)',\n ]}\n templateRows={['repeat(2, 1fr)', null, null, null, 'repeat(1, 1fr)']}\n rowGap=\"12\"\n >\n <GridItem colSpan={8} rowSpan={1} pr={['0', null, null, null, '28']}>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n\n {slice.checkMarkLabels && (\n <>\n <Spacer height=\"10\" />\n <BoemlyList listItems={slice.checkMarkLabels} />\n <Spacer height=\"10\" />\n </>\n )}\n\n {slice.button && (\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n colorPalette=\"white\"\n variant=\"outline\"\n rightIcon={<ArrowRightIcon />}\n component=\"LeftTextRightCard\"\n />\n )}\n </GridItem>\n <GridItem\n colSpan={[8, null, null, null, 4]}\n rowSpan={1}\n position=\"relative\"\n >\n {slice.card && (\n <PortfolioCard\n title={slice.card.title}\n button={\n slice.card.button && {\n text: slice.card.button.text,\n onClick: handleCardButtonClick,\n }\n }\n facts={slice.card.facts}\n image={\n <Image\n src={strapiMediaUrl(slice.card.image.img, 'medium')}\n alt={slice.card.image.alt}\n fill\n style={{ objectFit: slice.card.image.objectFit || 'cover' }}\n />\n }\n portfolioNumber={slice.card.portfolioNumber}\n />\n )}\n </GridItem>\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { LeftTextRightCard } from './LeftTextRightCard';\n\nexport default LeftTextRightCard;\n", "import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n Flex,\n Heading,\n RichText,\n SimpleGrid,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { ArrowRightIcon } from '@phosphor-icons/react';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImageWithLink from '../../models/strapi/StrapiImageWithLink';\nimport StrapiLink from '../../models/strapi/StrapiLink';\n\nexport interface LogoGridWithTextProps {\n slice: {\n title: string;\n text: string;\n button?: StrapiLink;\n logos: StrapiImageWithLink[];\n };\n}\n\nexport const LogoGridWithText: React.FC<LogoGridWithTextProps> = ({\n slice,\n}: LogoGridWithTextProps) => {\n const [primary50] = useToken('colors', ['primary.50']);\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n <Wrapper>\n <SimpleGrid columns={2} gap=\"28\" minChildWidth=\"16rem\">\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n justifyContent=\"center\"\n alignItems=\"flex-start\"\n >\n <Heading as=\"h2\" size=\"3xl\" mb=\"4\">\n {slice.title}\n </Heading>\n <RichText content={slice.text} />\n {slice.button && (\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n colorPalette=\"white\"\n variant=\"outline\"\n mt=\"6\"\n rightIcon={<ArrowRightIcon />}\n component=\"LogoGridWithText\"\n />\n )}\n </Box>\n <Flex flexDir=\"row\" flexWrap=\"wrap\" gap={['12', null, null, '28']}>\n {slice.logos.map((logo) => (\n <Flex\n key={logo.id}\n justifyContent=\"center\"\n alignItems=\"center\"\n flexGrow={1}\n flexShrink={0}\n flexBasis={slice.logos.length > 2 ? '34%' : '90%'} // 34% are just enough to not allow three in one row\n >\n <Box position=\"relative\" height=\"20\" width=\"100%\">\n {logo.link ? (\n <a href={strapiLinkUrl(logo.link)}>\n <Image\n src={strapiMediaUrl(logo.img, 'small')}\n alt={logo.alt}\n fill\n style={{ objectFit: logo.objectFit || 'contain' }}\n />\n </a>\n ) : (\n <Image\n src={strapiMediaUrl(logo.img, 'small')}\n alt={logo.alt}\n fill\n style={{ objectFit: logo.objectFit || 'contain' }}\n />\n )}\n </Box>\n </Flex>\n ))}\n </Flex>\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { LogoGridWithText } from './LogoGridWithText';\n\nexport default LogoGridWithText;\n", "import React from 'react';\nimport { DefaultSectionHeader, Flex, useMediaQuery, Wrapper } from 'boemly';\nimport Image from 'next/image';\nimport { BREAKPOINT_LG_QUERY } from '../../constants/breakpoints';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport {\n MapHeroContainer,\n MapHeroTextContainer,\n ShapeContainer,\n MapContainer,\n MapGradient,\n} from './styles';\n\nexport interface MapHeroProps {\n slice: {\n tagline?: string;\n title: string;\n subTitle?: string;\n buttons?: StrapiLink[];\n shape?: StrapiImage;\n map: StrapiImage;\n mobileMap: StrapiImage;\n };\n}\n\nexport const MapHero: React.FC<MapHeroProps> = ({ slice }: MapHeroProps) => {\n const [belowBreakpoint] = useMediaQuery([BREAKPOINT_LG_QUERY]);\n\n return (\n <MapHeroContainer maxWidth=\"full\">\n {slice.shape && (\n <ShapeContainer>\n <Image\n src={strapiMediaUrl(slice.shape.img, 'medium')}\n alt={slice.shape.alt}\n fill\n style={{ objectFit: slice.shape.objectFit || 'cover' }}\n />\n </ShapeContainer>\n )}\n <MapHeroTextContainer>\n <Wrapper>\n <>\n <DefaultSectionHeader\n isHero\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n titleProps={{ maxW: ['100%', null, null, null, '60%'] }}\n textProps={{ maxW: ['100%', null, null, null, '55%'] }}\n />\n {slice.buttons && slice.buttons.length > 0 && (\n <Flex mt=\"10\" flexDir=\"row\" gap=\"5\">\n <StrapiLinkButton\n link={slice.buttons[0]}\n size=\"xl\"\n component=\"MapHero\"\n />\n {slice.buttons.length === 2 && (\n <StrapiLinkButton\n link={slice.buttons[1]}\n variant=\"outline\"\n size=\"xl\"\n component=\"MapHero\"\n />\n )}\n </Flex>\n )}\n </>\n </Wrapper>\n </MapHeroTextContainer>\n <MapContainer>\n {belowBreakpoint ? (\n <Image\n src={strapiMediaUrl(slice.mobileMap.img, 'xLarge')}\n alt={slice.mobileMap.alt}\n fill\n style={{ objectFit: slice.mobileMap.objectFit || 'contain' }}\n />\n ) : (\n <Image\n src={strapiMediaUrl(slice.map.img, 'xLarge')}\n alt={slice.map.alt}\n fill\n style={{ objectFit: slice.map.objectFit || 'cover' }}\n />\n )}\n <MapGradient />\n </MapContainer>\n </MapHeroContainer>\n );\n};\n", "import styled from '@emotion/styled';\nimport { BREAKPOINT_LG } from '../../constants/breakpoints';\nimport { Box } from 'boemly';\n\nexport const MapHeroContainer = styled(Box)`\n position: relative;\n width: 100vw;\n height: var(--default-hero-height);\n min-height: var(--boemly-sizes-3xl);\n background-color: var(--boemly-colors-primary-50);\n overflow: hidden;\n z-index: var(--boemly-zIndices-base);\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n height: auto;\n }\n`;\n\nexport const MapHeroTextContainer = styled(Box)`\n position: absolute;\n width: 100vw;\n top: 56%;\n left: 0;\n transform: translateY(-50%);\n z-index: var(--boemly-zIndices-aboveBase);\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n position: relative;\n transform: unset;\n z-index: 10;\n\n padding-top: var(--boemly-spacing-32);\n }\n`;\n\nexport const ShapeContainer = styled(Box)`\n position: absolute;\n bottom: calc(var(--boemly-spacing-8) * -1);\n left: 0;\n\n width: var(--boemly-sizes-sm);\n height: var(--boemly-sizes-sm);\n\n border-top-right-radius: var(--boemly-radii-full);\n\n & span,\n div {\n border-top-right-radius: var(--boemly-radii-full);\n }\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n display: none;\n }\n`;\n\nexport const MapContainer = styled(Box)`\n position: absolute;\n\n width: 50%;\n height: 100%;\n\n right: 0;\n top: 0;\n\n & img {\n object-fit: cover !important;\n }\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n width: 100%;\n height: var(--boemly-sizes-4xl);\n position: relative;\n margin-top: calc(var(--boemly-spacing-72) * -1);\n background-color: var(--boemly-colors-white);\n z-index: 1;\n\n & img {\n object-fit: contain !important;\n }\n }\n`;\n\nexport const MapGradient = styled(Box)`\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n z-index: var(--boemly-zIndices-base);\n\n background: linear-gradient(\n 90deg,\n var(--boemly-colors-primary-50) 0%,\n var(--boemly-colors-primary-50) 10%,\n rgba(243, 246, 245, 0.6) 28%,\n rgba(243, 246, 245, 0) 40%,\n rgba(243, 246, 245, 0) 100%\n );\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n background: linear-gradient(\n 180deg,\n var(--boemly-colors-primary-50) 0%,\n var(--boemly-colors-primary-50) 36%,\n rgba(243, 246, 245, 0.12) 46%,\n rgba(243, 246, 245, 0) 100%\n );\n }\n`;\n", "import { MapHero } from './MapHero';\n\nexport default MapHero;\n", "import React, { useContext } from 'react';\nimport {\n Box,\n Heading,\n HeroCard,\n SimpleGrid,\n Text,\n BoemlyAccordion,\n Wrapper,\n Flex,\n Spacer,\n} from 'boemly';\nimport { ArrowRightIcon } from '@phosphor-icons/react';\nimport { useRouter } from 'next/router';\nimport Image from 'next/image';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiHeroCard from '../../models/strapi/StrapiHeroCard';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport convertToKebabCase from '../../utils/convertToKebabCase';\nimport { AnalyticsContext } from '../../components/ContextProvider/ContextProvider';\n\nconst VARIANTS = {\n gray: {\n backgroundColor: 'primary.50',\n tagLineColor: 'primary.500',\n textColor: 'black',\n accordionVariant: 'black',\n otherQuestionsBackground: 'primary.700',\n },\n green: {\n backgroundColor: 'primary.800',\n tagLineColor: 'white',\n textColor: 'white',\n accordionVariant: 'white',\n otherQuestionsBackground: 'primary.900',\n },\n white: {\n backgroundColor: 'white',\n tagLineColor: 'primary.500',\n textColor: 'black',\n accordionVariant: 'black',\n otherQuestionsBackground: 'primary.700',\n },\n};\n\nexport interface QAndAProps {\n slice: {\n tagline: string;\n title: string;\n questionsAndAnswers: {\n id: number;\n key: string;\n value: string;\n }[];\n otherQuestions: string;\n button: StrapiLink;\n hero?: StrapiHeroCard;\n variant?: keyof typeof VARIANTS;\n defaultIndex: number[];\n };\n}\n\nexport const QAndA: React.FC<QAndAProps> = ({ slice }: QAndAProps) => {\n const { push } = useRouter();\n const analyticsFunction = useContext(AnalyticsContext);\n\n const handleHeroButtonClick = () => {\n if (slice.hero?.button) {\n analyticsFunction?.({\n type: 'track',\n props: {\n action: 'click',\n component: 'QAndA',\n buttonText: slice.hero.button.text,\n buttonUrl: strapiLinkUrl(slice.hero.button),\n section: 'hero',\n },\n });\n push(strapiLinkUrl(slice.hero.button));\n }\n };\n\n const variant = VARIANTS[slice.variant ?? 'green'];\n\n return (\n <>\n <Box\n pb={slice.hero ? 80 : 28}\n id={convertToKebabCase(slice.title)}\n backgroundColor={variant.backgroundColor}\n >\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2]}>\n <Box mr=\"16\" paddingY=\"28\">\n <Text size=\"mdMonoUppercase\" color={variant.tagLineColor}>\n {slice.tagline}\n </Text>\n <Heading\n as=\"h2\"\n size=\"3xl\"\n color={variant.textColor}\n mt=\"6\"\n mb=\"16\"\n >\n {slice.title}\n </Heading>\n </Box>\n <Box\n maxHeight={['unset', null, null, 'xl']}\n paddingTop={['0', null, null, '28']}\n paddingRight={['0', null, null, '6']}\n overflowY={['unset', null, null, 'scroll']}\n >\n <Box>\n <BoemlyAccordion\n rows={slice.questionsAndAnswers}\n defaultIndex={slice.defaultIndex}\n variant={variant.accordionVariant as 'white' | 'black'}\n />\n <Flex\n padding=\"8\"\n backgroundColor={variant.otherQuestionsBackground}\n borderRadius=\"2xl\"\n mt=\"14\"\n flexDir={['column', null, null, 'row']}\n justifyContent={['flex-start', null, null, 'space-between']}\n alignItems={['flex-start', null, null, 'center']}\n >\n <Heading as=\"h6\" size=\"sm\" color=\"white\">\n {slice.otherQuestions}\n </Heading>\n <Spacer minHeight={['4', null, null, '0']} />\n <StrapiLinkButton\n size=\"lg\"\n colorPalette=\"white\"\n background=\"white\"\n rightIcon={<ArrowRightIcon />}\n link={slice.button}\n component=\"QAndA\"\n />\n </Flex>\n </Box>\n </Box>\n </SimpleGrid>\n </Wrapper>\n </Box>\n\n {slice.hero && (\n <Box pb=\"28\" mt=\"-56\">\n <Wrapper>\n <HeroCard\n title={slice.hero.title}\n subTitle={slice.hero.subTitle}\n link={\n slice.hero.button && {\n text: slice.hero.button.text,\n onClick: handleHeroButtonClick,\n }\n }\n image={\n slice.hero.image && (\n <Image\n src={strapiMediaUrl(slice.hero.image.img, 'xLarge')}\n alt={slice.hero.image.alt}\n fill\n style={{ objectFit: slice.hero.image.objectFit || 'cover' }}\n />\n )\n }\n />\n </Wrapper>\n </Box>\n )}\n </>\n );\n};\n", "const convertToKebabCase = (str: string) => {\n const matches =\n str &&\n str.match(\n /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g\n );\n return matches ? matches.map((x: string) => x.toLowerCase()).join('-') : '';\n};\n\nexport default convertToKebabCase;\n", "import { QAndA } from './QAndA';\n\nexport default QAndA;\n", "import React, { useContext } from 'react';\nimport Image from 'next/image';\nimport {\n Box,\n DefaultSectionHeader,\n HeroCard,\n QuoteCard,\n Shape,\n SimpleGrid,\n Wrapper,\n} from 'boemly';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiQuoteCard from '../../models/strapi/StrapiQuoteCard';\nimport StrapiHeroCard from '../../models/strapi/StrapiHeroCard';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport convertToKebabCase from '../../utils/convertToKebabCase';\nimport { useRouter } from 'next/router';\nimport { AnalyticsContext } from '../../components/ContextProvider/ContextProvider';\n\ninterface QuoteCardsSlice extends StrapiDefaultHeader {\n cards: StrapiQuoteCard[];\n shapes?: StrapiImage[];\n hero?: StrapiHeroCard;\n}\nexport interface QuoteCardsProps {\n slice: QuoteCardsSlice;\n}\n\nexport const QuoteCards: React.FC<QuoteCardsProps> = ({\n slice,\n}: QuoteCardsProps) => {\n const { push } = useRouter();\n const analyticsFunction = useContext(AnalyticsContext);\n\n const handleHeroCardButtonClick = () => {\n if (slice.hero?.button) {\n analyticsFunction?.({\n type: 'track',\n props: {\n action: 'click',\n component: 'QuoteCards',\n buttonText: slice.hero.button.text,\n buttonUrl: strapiLinkUrl(slice.hero.button),\n section: 'hero',\n },\n });\n push(strapiLinkUrl(slice.hero.button));\n }\n };\n\n return (\n <>\n <Box\n id={convertToKebabCase(slice.title)}\n position=\"relative\"\n paddingTop=\"28\"\n paddingBottom={!!slice.hero ? '80' : '28'}\n >\n {slice.shapes && slice.shapes.length === 2 && (\n <>\n <Shape\n shape={\n <Image\n src={strapiMediaUrl(slice.shapes[0].img, 'small')}\n alt={slice.shapes[0].alt}\n fill\n style={{ objectFit: slice.shapes[0].objectFit || 'cover' }}\n />\n }\n top=\"0\"\n right=\"0\"\n size=\"xs\"\n radius=\"bottom-left\"\n />\n <Shape\n shape={\n <Image\n src={strapiMediaUrl(slice.shapes[1].img, 'small')}\n alt={slice.shapes[1].alt}\n fill\n style={{ objectFit: slice.shapes[1].objectFit || 'cover' }}\n />\n }\n bottom=\"0\"\n left=\"0\"\n radius=\"top-right\"\n />\n </>\n )}\n <Wrapper>\n <Box maxW=\"3xl\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n </Box>\n <SimpleGrid\n columns={2}\n gap=\"20\"\n rowGap=\"6\"\n mt=\"16\"\n minChildWidth={['100%', null, '16rem']}\n >\n {slice.cards.map((card) => (\n <Box key={card.id} width=\"full\" maxWidth=\"2xl\">\n <QuoteCard\n key={card.id}\n avatar={{\n name: card.avatar.name,\n description: card.avatar.description,\n imageSrc: strapiMediaUrl(card.avatar.image.img, 'small'),\n imageAlt: card.avatar.image.alt,\n imageObjectFit: card.avatar.image.objectFit || 'cover',\n }}\n text={card.text}\n />\n </Box>\n ))}\n </SimpleGrid>\n </Wrapper>\n </Box>\n {slice.hero && (\n <Box marginTop=\"-40\" paddingBottom=\"28\">\n <Wrapper>\n <HeroCard\n title={slice.hero.title}\n subTitle={slice.hero.subTitle}\n link={\n slice.hero.button && {\n text: slice.hero.button.text,\n onClick: handleHeroCardButtonClick,\n }\n }\n image={\n slice.hero.image && (\n <Image\n src={strapiMediaUrl(slice.hero.image.img, 'xLarge')}\n alt={slice.hero.image.alt}\n fill\n style={{ objectFit: slice.hero.image.objectFit || 'cover' }}\n />\n )\n }\n />\n </Wrapper>\n </Box>\n )}\n </>\n );\n};\n", "import { QuoteCards } from './QuoteCards';\n\nexport default QuoteCards;\n", "import React from 'react';\nimport {\n DefaultSectionContainer,\n Grid,\n GridItem,\n RichText,\n Wrapper,\n} from 'boemly';\n\nexport interface RichTextSectionProps {\n slice: {\n content: string;\n };\n}\n\nexport const RichTextSection: React.FC<RichTextSectionProps> = ({\n slice,\n}: RichTextSectionProps) => (\n <DefaultSectionContainer>\n <Wrapper>\n <Grid templateColumns=\"repeat(12, 1fr)\" gap=\"4\">\n <GridItem colSpan={[12, null, null, 7]}>\n <RichText content={slice.content} />\n </GridItem>\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n);\n", "import { RichTextSection } from './RichTextSection';\n\nexport default RichTextSection;\n", "import React, {\n createRef,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport {\n Box,\n Center,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Gradient,\n Heading,\n RichText,\n ShapesCard,\n Text,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { useWindowScroll, useWindowSize } from '@reactuses/core';\nimport { useRouter } from 'next/router';\nimport StrapiShapesCard from '../../models/strapi/StrapiShapesCard';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport { AnalyticsContext } from '../../components/ContextProvider/ContextProvider';\n\ninterface StepsSlice extends StrapiDefaultHeader {\n steps: {\n id: number;\n step: number;\n title: string;\n text?: string;\n }[];\n image?: StrapiImage;\n card?: StrapiShapesCard;\n}\nexport interface StepsProps {\n slice: StepsSlice;\n}\n\nexport const Steps: React.FC<StepsProps> = ({ slice }: StepsProps) => {\n const { push } = useRouter();\n const analyticsFunction = useContext(AnalyticsContext);\n\n const [gray900] = useToken('colors', ['gray.900']);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [stepRefs, setStepRefs] = useState(new Array(slice.steps.length));\n const [stepProgress, setStepProgress] = useState(\n new Array(slice.steps.length)\n );\n\n const { y: offsetY } = useWindowScroll();\n const { height: windowHeight } = useWindowSize();\n\n const handleShapesCardButtonClick = () => {\n if (slice.card?.button) {\n analyticsFunction?.({\n type: 'track',\n props: {\n action: 'click',\n component: 'Steps',\n buttonText: slice.card.button.text,\n buttonUrl: strapiLinkUrl(slice.card.button),\n section: 'card',\n },\n });\n push(strapiLinkUrl(slice.card.button));\n }\n };\n useEffect(() => {\n setStepRefs(slice.steps.map(() => createRef()));\n }, []);\n\n useEffect(() => {\n const containerOffsetTop = containerRef.current?.offsetTop || 0;\n setStepProgress(\n stepRefs.map((ref) => {\n const currentItemOffsetTop = ref.current?.offsetTop || 0;\n return containerOffsetTop + currentItemOffsetTop <\n offsetY + windowHeight / 3\n ? 100\n : 0;\n })\n );\n }, [offsetY, windowHeight, stepRefs]);\n\n return (\n <div ref={containerRef}>\n <DefaultSectionContainer backgroundColor={gray900} title={slice.title}>\n <>\n {slice.image && (\n <Box\n position=\"absolute\"\n top=\"0\"\n left=\"0\"\n width=\"full\"\n height=\"full\"\n >\n <Image\n src={strapiMediaUrl(slice.image.img, 'xLarge')}\n alt={slice.image.alt}\n fill\n style={{ objectFit: slice.image.objectFit || 'cover' }}\n />\n <Gradient />\n </Box>\n )}\n </>\n <Wrapper>\n <>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center' }}\n titleProps={{\n textAlign: 'center',\n maxW: '2xl',\n marginX: 'auto',\n color: 'white',\n }}\n textProps={{\n textAlign: 'center',\n maxW: 'xl',\n marginX: 'auto',\n color: 'whiteAlpha.800',\n }}\n />\n\n <Box marginTop={['16', null, '24']}>\n {slice.steps.map(({ id, step, title, text }, index) => (\n <Flex flexDir=\"column\" alignItems=\"center\" key={id}>\n <Center\n width=\"10\"\n height=\"10\"\n borderRadius=\"full\"\n backgroundColor=\"white\"\n >\n <Text size=\"smRegularNormal\" color=\"black\">\n {step}\n </Text>\n </Center>\n <Heading size=\"lg\" color=\"white\" mt=\"4\" textAlign=\"center\">\n {title}\n </Heading>\n {text && (\n <Box maxW=\"xl\" mt=\"4\">\n <RichText\n options={{ forceBlock: true }}\n content={text}\n textProps={{\n fontSize: 'mdRegularNormal',\n color: 'whiteAlpha.700',\n textAlign: 'center',\n }}\n />\n </Box>\n )}\n {(index + 1 < slice.steps.length || slice.card) && (\n <Box\n ref={stepRefs[index]}\n position=\"relative\"\n marginTop=\"4\"\n marginBottom=\"6\"\n height=\"12\"\n >\n <Box\n position=\"absolute\"\n height=\"full\"\n borderLeft=\"dashed 1px white\"\n opacity=\"0.5\"\n />\n <Box\n position=\"absolute\"\n height={`${stepProgress[index]}%`}\n borderRight=\"solid 1px white\"\n opacity=\"1\"\n transition=\"height ease var(--medium-transition-duration)\"\n />\n </Box>\n )}\n </Flex>\n ))}\n </Box>\n\n {slice.card && (\n <ShapesCard\n tagline={slice.card.tagline}\n title={slice.card.title}\n text={slice.card.text}\n shapes={\n slice.card.shapes &&\n slice.card.shapes?.map((shape) => (\n <Image\n key={shape.id}\n src={strapiMediaUrl(shape.img, 'small')}\n alt={shape.alt}\n fill\n style={{ objectFit: shape.objectFit || 'cover' }}\n />\n ))\n }\n button={\n slice.card.button && {\n text: slice.card.button.text,\n onClick: handleShapesCardButtonClick,\n }\n }\n />\n )}\n </>\n </Wrapper>\n </DefaultSectionContainer>\n </div>\n );\n};\n", "import { Steps } from './Steps';\n\nexport default Steps;\n", "import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n RichText,\n SimpleGrid,\n Text,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { CaretRightIcon } from '@phosphor-icons/react';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\ninterface TextCardGridSlice extends StrapiDefaultHeader {\n variant: 'shape' | 'image';\n cards: {\n id: number;\n tagline?: string;\n title: string;\n text: string;\n image: StrapiImage;\n buttons?: StrapiLink[];\n }[];\n}\nexport interface TextCardGridProps {\n slice: TextCardGridSlice;\n}\n\nenum ShapePosition {\n topLeft = 'top-left',\n topRight = 'top-right',\n bottomLeft = 'bottom-left',\n bottomRight = 'bottom-right',\n unset = 'unset',\n}\n\nconst shapePositions: ShapePosition[] = [\n ShapePosition.topLeft,\n ShapePosition.bottomRight,\n ShapePosition.topRight,\n ShapePosition.bottomLeft,\n ShapePosition.topRight,\n ShapePosition.bottomLeft,\n ShapePosition.topLeft,\n ShapePosition.bottomRight,\n];\n\nconst oppositesOfCorners = {\n [ShapePosition.bottomLeft]: ShapePosition.topRight,\n [ShapePosition.topRight]: ShapePosition.bottomLeft,\n [ShapePosition.bottomRight]: ShapePosition.topLeft,\n [ShapePosition.topLeft]: ShapePosition.bottomRight,\n [ShapePosition.unset]: ShapePosition.unset,\n};\n\ntype Variant = {\n padding: (string | null)[];\n positionIcon: (index: number) => ShapePosition;\n width: string;\n height: string;\n position: 'absolute' | 'relative';\n mb: string;\n};\n\nconst variants: { shape: Variant; image: Variant } = {\n shape: {\n padding: ['6', null, null, '8'],\n positionIcon: (index: number) =>\n shapePositions[index % shapePositions.length],\n width: '40',\n height: '40',\n position: 'absolute',\n mb: 'unset',\n },\n image: {\n padding: ['6', null, null, '8'],\n positionIcon: () => ShapePosition.unset,\n width: '24',\n height: '24',\n position: 'relative',\n mb: '10',\n },\n};\n\nexport const TextCardGrid: React.FC<TextCardGridProps> = ({\n slice,\n}: TextCardGridProps) => {\n const [primary800] = useToken('colors', ['primary.800']);\n\n return (\n <DefaultSectionContainer backgroundColor={primary800} title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center', color: 'white' }}\n titleProps={{\n textAlign: 'center',\n maxW: '2xl',\n marginX: 'auto',\n color: 'white',\n }}\n textProps={{\n textAlign: 'center',\n maxW: 'xl',\n marginX: 'auto',\n color: 'whiteAlpha.800',\n }}\n />\n\n <SimpleGrid\n mt={['14', null, null, '24']}\n columns={3}\n justifyItems=\"center\"\n gap=\"20\"\n rowGap=\"16\"\n minChildWidth={['100%', null, '16rem']}\n >\n {slice.cards.map(\n ({ id, tagline, title, text, image, buttons }, index) => (\n <Box\n key={id}\n backgroundColor=\"white\"\n zIndex=\"base\"\n padding={variants[slice.variant].padding}\n boxShadow=\"lg\"\n borderRadius=\"2xl\"\n minHeight=\"2xs\"\n width=\"full\"\n maxWidth={slice.cards.length > 1 ? 'unset' : 'xl'}\n position=\"relative\"\n display=\"flex\"\n flexDir=\"column\"\n alignItems=\"flex-start\"\n justifyContent={\n slice.variant === 'shape' ? 'flex-end' : 'flex-start'\n }\n overflow=\"hidden\"\n >\n <Box\n position={variants[slice.variant].position}\n width={variants[slice.variant].width}\n height={variants[slice.variant].height}\n mb={variants[slice.variant].mb}\n top={\n variants[slice.variant].positionIcon(index).includes('top')\n ? '-4'\n : 'unset'\n }\n left={\n variants[slice.variant].positionIcon(index).includes('left')\n ? '-4'\n : 'unset'\n }\n right={\n variants[slice.variant]\n .positionIcon(index)\n .includes('right')\n ? '-4'\n : 'unset'\n }\n bottom={\n variants[slice.variant]\n .positionIcon(index)\n .includes('bottom')\n ? '-4'\n : 'unset'\n }\n borderBottomRightRadius={\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ].includes('bottomRight')\n ? 'full'\n : 'unset'\n }\n borderBottomLeftRadius={\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ].includes('bottomLeft')\n ? 'full'\n : 'unset'\n }\n borderTopRightRadius={\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ].includes('topRight')\n ? 'full'\n : 'unset'\n }\n borderTopLeftRadius={\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ].includes('topLeft')\n ? 'full'\n : 'unset'\n }\n css={{\n '& span, div, img': {\n borderRadius: variants[slice.variant]\n .positionIcon(index)\n .includes('unset')\n ? 'var(--boemly-radii-xl)'\n : undefined,\n [`border${oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ]\n .split('-')\n .map(\n (word) => word.charAt(0).toUpperCase() + word.slice(1)\n )\n .join('')}Radius`]: !variants[slice.variant]\n .positionIcon(index)\n .includes('unset')\n ? 'var(--boemly-radii-full)'\n : undefined,\n },\n }}\n >\n <Image\n src={strapiMediaUrl(image.img, 'small')}\n alt={image.alt}\n fill\n style={{ objectFit: image.objectFit || 'cover' }}\n />\n </Box>\n <Box zIndex=\"aboveBase\" width=\"full\">\n {tagline && (\n <Text color=\"black\" size=\"smMonoNormal\" mb=\"2\">\n {tagline}\n </Text>\n )}\n <Heading as=\"h4\" size=\"xl\" mb=\"3\">\n {title}\n </Heading>\n <RichText\n content={text}\n listProps={{\n textColor: 'gray.500',\n textSize: 'smRegularNormal',\n }}\n textProps={{\n color: 'gray.500',\n fontSize: 'smRegularNormal',\n }}\n />\n {buttons && !!buttons.length && (\n <Flex\n mt=\"4\"\n gap=\"3\"\n flexDir={['column', null, null, null, 'row']}\n >\n {buttons.map((button, buttonIndex) => (\n <StrapiLinkButton\n key={button.id}\n link={button}\n size=\"sm\"\n rightIcon={\n buttonIndex === 0 ? (\n <CaretRightIcon size=\"10\" weight=\"bold\" />\n ) : undefined\n }\n variant={buttonIndex === 0 ? 'outline' : 'ghost'}\n component=\"TextCardGrid\"\n />\n ))}\n </Flex>\n )}\n </Box>\n </Box>\n )\n )}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { TextCardGrid } from './TextCardGrid';\n\nexport default TextCardGrid;\n", "import React, { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Box,\n Center,\n DefaultSectionContainer,\n DefaultSectionHeader,\n IconButton,\n TextCardWithIcon,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiTextCardWithIcon from '../../models/strapi/StrapiTextCardWithIcons';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport {\n CardContainer,\n CarouselContainer,\n CarouselInnerContainer,\n} from './styles';\nimport { useMeasure, useWindowSize } from '@reactuses/core';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { ArrowLeftIcon, ArrowRightIcon } from '@phosphor-icons/react';\nimport { IntlContext } from '../../components/ContextProvider';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport { useRouter } from 'next/router';\nimport shuffleElements from '../../utils/shuffleElements';\nimport { AnalyticsContext } from '../../components/ContextProvider/ContextProvider';\n\ninterface TextCarouselSlice extends StrapiDefaultHeader {\n slides: StrapiTextCardWithIcon[];\n button?: StrapiLink;\n isShuffled?: boolean;\n}\nexport interface TextCarouselProps {\n slice: TextCarouselSlice;\n}\n\nconst ITEM_GAP = 24;\nconst MAX_OFFSET_RIGHT = 55;\n\nexport const TextCarousel: React.FC<TextCarouselProps> = ({\n slice,\n}: TextCarouselProps) => {\n const containerRef = useRef(null);\n const [primary50] = useToken('colors', ['primary.50']);\n const itemRef = useRef<HTMLDivElement>(null);\n const [rect] = useMeasure(itemRef);\n const itemWidth = rect.width;\n const { formatMessage } = useContext(IntlContext);\n const analyticsFunction = useContext(AnalyticsContext);\n const { width: windowWidth } = useWindowSize();\n const { push } = useRouter();\n\n const [displaySlides, setDisplaySlides] = useState(slice.slides);\n const [sliderIndex, setSliderIndex] = useState(0);\n\n const numberOfItems = useMemo(\n () => slice.slides.length,\n [slice.slides.length]\n );\n\n const sliderItemsWidth = useMemo(\n () => numberOfItems * (itemWidth + ITEM_GAP) - ITEM_GAP,\n [itemWidth, numberOfItems]\n );\n\n const offsetLeft = useMemo(\n () => sliderIndex * (itemWidth + ITEM_GAP) * -1,\n [sliderIndex, itemWidth]\n );\n\n const allowScroll = useMemo(\n () => sliderItemsWidth + ITEM_GAP * 2 > windowWidth,\n\n [sliderItemsWidth, windowWidth]\n );\n\n const canMoveRight = useMemo(() => {\n const offsetRight = windowWidth - (sliderItemsWidth + offsetLeft);\n\n return offsetRight < MAX_OFFSET_RIGHT;\n }, [itemWidth, sliderIndex, sliderItemsWidth, windowWidth]);\n\n const canMoveLeft = useMemo(() => sliderIndex !== 0, [sliderIndex]);\n\n const handleSlidesButtonClick = (button?: StrapiLink) => {\n if (button) {\n analyticsFunction?.({\n type: 'track',\n props: {\n action: 'click',\n component: 'TextCarousel',\n buttonText: button.text,\n buttonUrl: strapiLinkUrl(button),\n section: 'slides',\n },\n });\n push(strapiLinkUrl(button));\n }\n };\n\n const { slides, isShuffled = false } = slice;\n\n useEffect(() => {\n if (isShuffled) {\n setDisplaySlides(shuffleElements(slides));\n }\n }, [slides, isShuffled]);\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center' }}\n titleProps={{ textAlign: 'center', maxW: '6xl', marginX: 'auto' }}\n textProps={{ textAlign: 'center', maxW: '2xl', marginX: 'auto' }}\n />\n </Wrapper>\n\n <CarouselContainer ref={containerRef}>\n <Box position=\"relative\" width=\"full\">\n <Wrapper>\n <CarouselInnerContainer\n numberOfItems={slice.slides.length}\n animate={{\n x: offsetLeft,\n }}\n transition={{\n duration: 0.3,\n ease: 'easeInOut',\n }}\n >\n {displaySlides.map(({ id, title, text, icon, image, button }) => (\n <CardContainer key={id} ref={itemRef}>\n <TextCardWithIcon\n title={title}\n text={text}\n height=\"full\"\n icon={\n <Image\n src={strapiMediaUrl(icon.img, 'small')}\n alt={icon.alt}\n fill\n style={{ objectFit: icon.objectFit || 'contain' }}\n />\n }\n image={\n image && (\n <Image\n src={strapiMediaUrl(image?.img, 'medium')}\n alt={image?.alt}\n fill\n style={{\n objectFit: image?.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n )\n }\n button={\n button && {\n text: button.text,\n onClick: () => handleSlidesButtonClick(button),\n }\n }\n displayAs=\"column\"\n />\n </CardContainer>\n ))}\n </CarouselInnerContainer>\n </Wrapper>\n <Box\n display={['none', null, null, !!allowScroll ? 'flex' : 'none']}\n pointerEvents=\"none\"\n position=\"absolute\"\n top=\"40%\"\n left=\"0\"\n width=\"full\"\n py=\"0\"\n px=\"32\"\n justifyContent=\"space-between\"\n >\n <Box>\n <AnimatePresence>\n {canMoveLeft && (\n <motion.div\n key=\"leftButton\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n >\n <IconButton\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex - 1)}\n aria-label={formatMessage({\n id: 'sections.textCarousel.moveLeft',\n })}\n pointerEvents=\"auto\"\n boxShadow=\"md\"\n >\n <ArrowLeftIcon size={16} />\n </IconButton>\n </motion.div>\n )}\n </AnimatePresence>\n </Box>\n <Box>\n <AnimatePresence>\n {canMoveRight && (\n <motion.div\n key=\"rightButton\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n >\n <IconButton\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex + 1)}\n aria-label={formatMessage({\n id: 'sections.textCarousel.moveRight',\n })}\n pointerEvents=\"auto\"\n boxShadow=\"md\"\n >\n <ArrowRightIcon size={16} />\n </IconButton>\n </motion.div>\n )}\n </AnimatePresence>\n </Box>\n </Box>\n </Box>\n </CarouselContainer>\n\n <>\n {slice.button && (\n <Wrapper>\n <Center>\n <StrapiLinkButton\n link={slice.button}\n size=\"xl\"\n mt={['8', null, '14']}\n component=\"TextCarousel\"\n />\n </Center>\n </Wrapper>\n )}\n </>\n </DefaultSectionContainer>\n );\n};\n", "import { motion } from 'framer-motion';\nimport styled from '@emotion/styled';\nimport { BREAKPOINT_MD } from '../../constants/breakpoints';\nimport { Box } from 'boemly';\n\nexport const CarouselContainer = styled(Box)`\n margin-top: var(--boemly-spacing-6);\n padding: var(--boemly-spacing-8) 0;\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n margin-top: var(--boemly-spacing-4);\n width: var(--boemly-sizes-full);\n }\n\n width: var(--boemly-sizes-full);\n\n overflow-x: hidden;\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n overflow-x: scroll;\n }\n`;\n\ninterface CarouselInnerContainerProps {\n numberOfItems: number;\n}\nexport const CarouselInnerContainer = styled(\n motion.div\n)<CarouselInnerContainerProps>`\n display: flex;\n gap: var(--boemly-spacing-6);\n justify-content: center;\n\n width: calc(\n (var(--boemly-sizes-sm) + var(--boemly-spacing-6)) *\n ${({ numberOfItems }: CarouselInnerContainerProps) => numberOfItems} +\n var(--boemly-spacing-6)\n );\n min-width: var(--boemly-sizes-full);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n gap: var(--boemly-spacing-1);\n justify-content: flex-start;\n width: calc(\n (var(--boemly-sizes-2xs) + var(--boemly-spacing-4)) *\n ${({ numberOfItems }: CarouselInnerContainerProps) => numberOfItems} +\n var(--boemly-spacing-6)\n );\n }\n`;\n\nexport const CardContainer = styled(Box)`\n width: var(--boemly-sizes-sm);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n min-width: var(--boemly-sizes-sm);\n\n margin-right: var(--boemly-spacing-4);\n\n &:first-of-type {\n margin-left: var(--boemly-spacing-6);\n }\n }\n`;\n", "const shuffleElements = (slides: any[]) => {\n const slidesCopy = [...slides]; // Create a copy to avoid mutating the original array\n for (let i = slidesCopy.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [slidesCopy[i], slidesCopy[j]] = [slidesCopy[j], slidesCopy[i]];\n }\n return slidesCopy;\n};\n\nexport default shuffleElements;\n", "import { TextCarousel } from './TextCarousel';\n\nexport default TextCarousel;\n", "import React, { useContext } from 'react';\nimport {\n Box,\n ContactArea,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Grid,\n GridItem,\n TextCardWithIcon,\n useMediaQuery,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { useRouter } from 'next/router';\nimport { BREAKPOINT_LG_QUERY } from '../../constants/breakpoints';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiContactArea from '../../models/strapi/StrapiContactArea';\nimport StrapiTextCardWithIcon from '../../models/strapi/StrapiTextCardWithIcons';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport { AnalyticsContext } from '../../components/ContextProvider/ContextProvider';\n\ninterface TextWithTextCardsSlice extends StrapiDefaultHeader {\n cards: StrapiTextCardWithIcon[];\n contact?: StrapiContactArea;\n shape?: StrapiImage;\n}\nexport interface TextWithTextCardsProps {\n slice: TextWithTextCardsSlice;\n}\n\nexport const TextWithTextCards: React.FC<TextWithTextCardsProps> = ({\n slice,\n}: TextWithTextCardsProps) => {\n const { push } = useRouter();\n const analyticsFunction = useContext(AnalyticsContext);\n const [white] = useToken('colors', ['white']);\n const [belowBreakpoint] = useMediaQuery([BREAKPOINT_LG_QUERY]);\n\n const handleContactButtonClick = () => {\n if (slice.contact?.button) {\n analyticsFunction?.({\n type: 'track',\n props: {\n action: 'click',\n component: 'TextWithTextCards',\n buttonText: slice.contact.button.text,\n buttonUrl: strapiLinkUrl(slice.contact.button),\n section: 'contact',\n },\n });\n push(strapiLinkUrl(slice.contact.button));\n }\n };\n\n return (\n <DefaultSectionContainer backgroundColor={white} title={slice.title}>\n <>\n {slice.shape && (\n <Box\n position=\"absolute\"\n right={['-28', null, null, '-136']}\n top={['96', null, null, '-28']}\n width={['sm', null, null, '4xl']}\n height={['sm', null, null, '4xl']}\n borderBottomRightRadius=\"full\"\n >\n <Image\n src={strapiMediaUrl(slice.shape.img, 'medium')}\n alt={slice.shape.alt}\n fill\n style={{\n objectFit: slice.shape.objectFit || 'cover',\n borderBottomRightRadius: 'var(--boemly-radii-full)',\n }}\n />\n </Box>\n )}\n </>\n <Wrapper>\n <>\n <Grid\n templateColumns={[\n 'repeat(8, 1fr)',\n null,\n null,\n null,\n 'repeat(16, 1fr)',\n ]}\n templateRows={[\n 'repeat(2, auto)',\n null,\n null,\n null,\n 'repeat(1, auto)',\n ]}\n rowGap=\"12\"\n >\n <GridItem\n colSpan={[8, null, null, null, 9]}\n rowSpan={1}\n pr={['0', null, null, null, '32']}\n >\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n textProps={{ pr: ['0', null, null, null, '10'] }}\n />\n\n {slice.contact && !belowBreakpoint && (\n <ContactArea\n title={slice.contact.title}\n text={slice.contact.text}\n avatar={{\n name: slice.contact.avatar.name,\n description: slice.contact.avatar.description,\n imageSrc: strapiMediaUrl(\n slice.contact.avatar.image.img,\n 'small'\n ),\n imageAlt: slice.contact.avatar.image.alt,\n imageObjectFit:\n slice.contact.avatar.image.objectFit || 'cover',\n }}\n link={{\n text: slice.contact.button.text,\n onClick: handleContactButtonClick,\n }}\n />\n )}\n </GridItem>\n <GridItem\n colSpan={[8, null, null, null, 7]}\n rowSpan={1}\n position=\"relative\"\n >\n {slice.cards.map((card) => (\n <TextCardWithIcon\n key={card.id}\n title={card.title}\n text={card.text}\n icon={\n <Image\n src={strapiMediaUrl(card.icon.img, 'small')}\n alt={card.icon.alt}\n fill\n style={{ objectFit: card.icon.objectFit || 'contain' }}\n />\n }\n />\n ))}\n </GridItem>\n </Grid>\n {slice.contact && belowBreakpoint && (\n <ContactArea\n title={slice.contact.title}\n text={slice.contact.text}\n avatar={{\n name: slice.contact.avatar.name,\n description: slice.contact.avatar.description,\n imageSrc: strapiMediaUrl(\n slice.contact.avatar.image.img,\n 'small'\n ),\n imageAlt: slice.contact.avatar.image.alt,\n imageObjectFit: slice.contact.avatar.image.objectFit || 'cover',\n }}\n link={{\n text: slice.contact.button.text,\n onClick: handleContactButtonClick,\n }}\n />\n )}\n </>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { TextWithTextCards } from './TextWithTextCards';\n\nexport default TextWithTextCards;\n", "import React from 'react';\nimport {\n DefaultSectionContainer,\n DefaultSectionHeader,\n Grid,\n GridItem,\n ProjectCard,\n Spacer,\n BoemlyList,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { ArrowRightIcon } from '@phosphor-icons/react';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiProjectCard from '../../models/strapi/StrapiProjectCard';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport StrapiProject from '../../models/strapi/StrapiProject';\nimport ProjectGridCard from '../../components/ProjectGridCard';\n\ninterface TextWithCardSlice {\n tagline?: string;\n title: string;\n text?: string;\n listItems?: {\n id: number;\n text: string;\n }[];\n button?: StrapiLink;\n card?: StrapiProjectCard;\n project?: { data?: IStrapiData<StrapiProject> };\n cardPosition: 'left' | 'right';\n}\nexport interface TextWithCardProps {\n slice: TextWithCardSlice;\n projects: PortfolioProject[];\n}\n\nexport const TextWithCard: React.FC<TextWithCardProps> = ({\n slice,\n projects,\n}: TextWithCardProps) => {\n const portfolioProject = projects.find(\n (p) =>\n slice.project?.data?.attributes.fpmProjectId &&\n p.id === slice.project.data.attributes.fpmProjectId\n );\n\n const card = (\n <GridItem\n colSpan={[4, null, null, null, 2]}\n rowSpan={1}\n position=\"relative\"\n data-testid={`card-position-${slice.cardPosition}`}\n >\n {portfolioProject && <ProjectGridCard project={portfolioProject} />}\n {!portfolioProject && slice.card && (\n <ProjectCard\n facts={slice.card.facts}\n footerSubTitle={slice.card.footerSubTitle}\n footerTitle={slice.card.footerTitle}\n title={slice.card.title}\n image={\n <Image\n src={strapiMediaUrl(slice.card.image.img, 'medium')}\n alt={slice.card.image.alt}\n fill\n style={{ objectFit: slice.card.image.objectFit || 'cover' }}\n />\n }\n />\n )}\n </GridItem>\n );\n\n return (\n <DefaultSectionContainer title={slice.title}>\n <Wrapper>\n <Grid\n templateColumns={[\n 'repeat(4, auto)',\n null,\n null,\n null,\n 'repeat(6, auto)',\n ]}\n templateRows={[\n 'repeat(2, auto)',\n null,\n null,\n null,\n 'repeat(1, auto)',\n ]}\n rowGap=\"12\"\n columnGap={['0', null, null, null, '28']}\n >\n {slice.cardPosition === 'left' && card}\n <GridItem colSpan={4} rowSpan={1} position=\"relative\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n\n {slice.listItems && (\n <>\n <Spacer height=\"10\" />\n <BoemlyList listItems={slice.listItems} />\n <Spacer height=\"10\" />\n </>\n )}\n\n {slice.button && (\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n colorPalette=\"white\"\n variant=\"outline\"\n rightIcon={<ArrowRightIcon />}\n component=\"TextWithCard\"\n />\n )}\n </GridItem>\n {slice.cardPosition === 'right' && card}\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { BoemlyTag, Box, Container, Flex, Heading, Text } from 'boemly';\nimport React, { useContext } from 'react';\nimport Image from 'next/image';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport { FORMAT_AS_HECTARE_CONFIG } from '../../constants/formatter';\nimport CreditsAvailableBadge from '../../components/CreditsAvailableBadge';\nimport { IntlContext } from '../ContextProvider';\n\nexport interface ProjectGridCardProps {\n project: PortfolioProject;\n}\n\nexport const ProjectGridCard = ({\n project,\n}: ProjectGridCardProps): React.JSX.Element => {\n const { formatNumber, formatMessage } = useContext(IntlContext);\n\n return (\n <Container height=\"full\">\n <Flex flexDir=\"column\" height=\"full\">\n {project.thumbnail && (\n <Box borderRadius=\"xl\" position=\"relative\" height=\"36\" mb=\"2\">\n <Image\n src={strapiMediaUrl(project.thumbnail?.img, 'medium')}\n alt={project.thumbnail?.alt}\n fill\n style={{\n objectFit: project.thumbnail?.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n )}\n <Heading my=\"4\" size=\"lg\">\n {project.friendlyName || project.title}\n </Heading>\n <Flex flexDir=\"row\" gap=\"2\" flexWrap=\"wrap\">\n <BoemlyTag backgroundColor=\"gray.100\">\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {formatNumber(\n (project.area || 0) / 10000,\n FORMAT_AS_HECTARE_CONFIG\n )}\n </Text>\n </BoemlyTag>\n <BoemlyTag backgroundColor=\"gray.100\">\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {project.location}\n </Text>\n </BoemlyTag>\n {project.certificationDate ? (\n <BoemlyTag backgroundColor=\"gray.100\">\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {formatMessage(\n { id: 'components.projectGridCard.certified' },\n { year: new Date(project.certificationDate).getFullYear() }\n )}\n </Text>\n </BoemlyTag>\n ) : (\n <BoemlyTag backgroundColor=\"gray.100\">\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {formatMessage({\n id: 'components.projectGridCard.certificationInProgress',\n })}\n </Text>\n </BoemlyTag>\n )}\n <CreditsAvailableBadge status={project.creditAvailability} />\n </Flex>\n </Flex>\n </Container>\n );\n};\n", "import { FormatNumberOptions } from 'react-intl';\n\nexport const FORMAT_AS_EUR_CONFIG: FormatNumberOptions = {\n style: 'currency',\n currency: 'EUR',\n};\n\nexport const FORMAT_AS_METER_CONFIG: FormatNumberOptions = {\n unit: 'meter',\n unitDisplay: 'short',\n style: 'unit',\n maximumFractionDigits: 0,\n};\n\nexport const FORMAT_AS_HECTARE_CONFIG: FormatNumberOptions = {\n unit: 'hectare',\n unitDisplay: 'short',\n style: 'unit',\n maximumFractionDigits: 2,\n};\n\nexport const FORMAT_AS_CUBIC_METERS_PER_HECTARE_CONFIG: FormatNumberOptions = {\n maximumFractionDigits: 0,\n};\n\nexport const FORMAT_AS_PERCENT_CONFIG: FormatNumberOptions = {\n style: 'percent',\n maximumFractionDigits: 2,\n};\n", "import React, { useContext } from 'react';\nimport { BoemlyTag, Flex, Text } from 'boemly';\nimport NextLink from 'next/link';\nimport { IntlContext } from '../ContextProvider';\nimport { CreditAvailability } from '../../models/fpm/FPMProject';\n\nexport interface CreditsAvailableBadgeProps {\n status: CreditAvailability;\n href?: string;\n}\n\nconst CreditsAvailableBadge = ({\n status,\n href,\n}: CreditsAvailableBadgeProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n const variants: Record<\n CreditAvailability,\n { message: string; color: string }\n > = {\n [CreditAvailability.CREDITS_AVAILABLE]: {\n message: formatMessage({\n id: 'components.creditsAvailableBadge.text.yes',\n }),\n color: 'primary.800',\n },\n [CreditAvailability.NO_CREDITS_AVAILABLE]: {\n message: formatMessage({\n id: 'components.creditsAvailableBadge.text.no',\n }),\n color: 'red.600',\n },\n [CreditAvailability.SOME_CREDITS_AVAILABLE]: {\n message: formatMessage({\n id: 'components.creditsAvailableBadge.text.some',\n }),\n color: 'orange.500',\n },\n [CreditAvailability.SOON_CREDITS_AVAILABLE]: {\n message: formatMessage({\n id: 'components.creditsAvailableBadge.text.notYet',\n }),\n color: 'blue.500',\n },\n };\n\n const variant = variants[status];\n\n const badge = (\n <BoemlyTag backgroundColor={variant.color}>\n <Text color=\"white\" size=\"xsLowBold\">\n {variant.message}\n </Text>\n </BoemlyTag>\n );\n\n return (\n <Flex justifyContent=\"flex-start\">\n {href ? <NextLink href={href}>{badge}</NextLink> : badge}\n </Flex>\n );\n};\n\nexport default CreditsAvailableBadge;\n", "import CreditsAvailableBadge from './CreditsAvailableBadge';\n\nexport default CreditsAvailableBadge;\n", "import { ProjectGridCard } from './ProjectGridCard';\n\nexport default ProjectGridCard;\n", "import { TextWithCard } from './TextWithCard';\n\nexport default TextWithCard;\n", "import React from 'react';\nimport Link from 'next/link';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Heading,\n SimpleGrid,\n Text,\n Wrapper,\n} from 'boemly';\nimport { CaretRightIcon } from '@phosphor-icons/react';\nimport { MEDIUM_TRANSITION_DURATION } from '../../constants/animations';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\n\ninterface LinkCardsGridSlice {\n tagline?: string;\n title: string;\n text?: string;\n cards: {\n id: number;\n title: string;\n text?: string;\n link: StrapiLink;\n }[];\n}\nexport interface LinkCardsGridProps {\n slice: LinkCardsGridSlice;\n}\n\nexport const LinkCardsGrid: React.FC<LinkCardsGridProps> = ({\n slice,\n}: LinkCardsGridProps) => (\n <DefaultSectionContainer title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n\n <SimpleGrid mt=\"16\" columns={[1, null, null, null, 2]} gap=\"4\">\n {slice.cards.map(({ id, title, text, link }) => (\n <Link key={id} href={strapiLinkUrl(link)}>\n <Box\n data-testid=\"link\"\n px=\"10\"\n py=\"8\"\n borderStyle=\"solid\"\n borderWidth=\"thin\"\n borderColor=\"gray.200\"\n borderRadius=\"2xl\"\n display=\"flex\"\n flexDir=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n cursor=\"pointer\"\n transitionDuration={`${MEDIUM_TRANSITION_DURATION}s`}\n _hover={{ backgroundColor: 'gray.50' }}\n >\n <div>\n <Heading as=\"h4\" size=\"lg\">\n {title}\n </Heading>\n {text && (\n <Text mt=\"2\" size=\"smRegularNormal\">\n {text}\n </Text>\n )}\n </div>\n\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n borderStyle=\"solid\"\n borderWidth=\"thin\"\n borderColor=\"gray.200\"\n borderRadius=\"2xl\"\n height=\"12\"\n width=\"12\"\n minWidth=\"12\"\n minHeight=\"12\"\n ml=\"6\"\n backgroundColor=\"white\"\n >\n <CaretRightIcon />\n </Box>\n </Box>\n </Link>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n);\n", "export const MEDIUM_TRANSITION_DURATION = 0.2;\n", "import { LinkCardsGrid } from './LinkCardsGrid';\n\nexport default LinkCardsGrid;\n", "import React from 'react';\nimport {\n BoemlyTag,\n Box,\n DefaultSectionHeader,\n Flex,\n Gradient,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\nexport interface SmallHeroProps {\n slice: {\n tags?: {\n id: number;\n text: string;\n colorPalette: string;\n }[];\n tagline?: string;\n title: string;\n subTitle?: string;\n button?: StrapiLink;\n image?: StrapiImage;\n gradient?: boolean;\n };\n theme: 'dark' | 'light';\n}\n\nconst colors = {\n dark: {\n tagline: 'white',\n title: 'white',\n text: 'white',\n background: 'gray.900',\n },\n light: {\n tagline: 'primary.500',\n title: 'black',\n text: 'gray.500',\n background: 'primary.50',\n },\n};\n\nexport const SmallHero: React.FC<SmallHeroProps> = ({\n slice,\n theme,\n}: SmallHeroProps) => (\n <Box\n position=\"relative\"\n width=\"full\"\n height=\"xl\"\n backgroundColor={colors[theme].background}\n >\n {slice.image && (\n <>\n <Image\n src={strapiMediaUrl(slice.image.img, 'xLarge')}\n alt={slice.image.alt}\n fill\n style={{ objectFit: slice.image.objectFit || 'cover' }}\n />\n {slice.gradient && <Gradient />}\n </>\n )}\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"60%\"\n width=\"full\"\n textAlign=\"center\"\n transform=\"translateY(-50%)\"\n >\n <Wrapper>\n <>\n {slice.tags && (\n <Flex direction=\"row\" justify=\"center\" gap=\"2\" mb=\"4\" wrap=\"wrap\">\n {slice.tags.map(({ id, text, colorPalette }) => (\n <BoemlyTag\n key={id}\n colorPalette={colorPalette}\n size=\"md\"\n variant=\"subtle\"\n >\n {text}\n </BoemlyTag>\n ))}\n </Flex>\n )}\n <DefaultSectionHeader\n isHero\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n taglineProps={{\n color: colors[theme].tagline,\n textAlign: 'center',\n mx: 'auto',\n }}\n titleProps={{\n color: colors[theme].title,\n maxW: '4xl',\n textAlign: 'center',\n mx: 'auto',\n }}\n textProps={{\n maxW: '2xl',\n textAlign: 'center',\n mx: 'auto',\n color: colors[theme].text,\n }}\n />\n {slice.button && (\n <StrapiLinkButton\n link={slice.button}\n mt=\"6\"\n size=\"lg\"\n component=\"SmallHero\"\n />\n )}\n </>\n </Wrapper>\n </Box>\n </Box>\n);\n", "import { SmallHero } from './SmallHero';\n\nexport default SmallHero;\n", "import React, { useContext } from 'react';\nimport {\n Box,\n DatePersonPair,\n DefaultSectionContainer,\n Heading,\n SimpleGrid,\n Spacer,\n Text,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport Link from 'next/link';\nimport StrapiBlogPost from '../../models/strapi/StrapiBlogPost';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport { BlogItemContainer, ImageContainer } from './styles';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface BlogProps {\n slice: {\n blog_posts: IStrapiData<StrapiBlogPost>[];\n };\n blogPosts: IStrapiData<StrapiBlogPost>[];\n}\n\nexport const Blog: React.FC<BlogProps> = ({ slice, blogPosts }: BlogProps) => {\n const { formatDate } = useContext(IntlContext);\n const sortedBlogPosts = slice.blog_posts.sort(\n (a, b) =>\n new Date(b.attributes.createdAt).getTime() -\n new Date(a.attributes.createdAt).getTime()\n );\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2]} gapX={56} gapY={24}>\n {sortedBlogPosts.map(({ attributes }) => {\n const blogPost: IStrapiData<StrapiBlogPost> | undefined =\n blogPosts.find((bp) => bp.attributes.slug === attributes.slug);\n if (!blogPost) {\n return null;\n }\n return (\n <BlogItemContainer\n key={blogPost.attributes.slug}\n as={Link}\n href={`/blog/${blogPost.attributes.slug}`}\n >\n <ImageContainer>\n <Image\n src={strapiMediaUrl(blogPost.attributes.img.img, 'large')}\n alt={blogPost.attributes.img.alt}\n fill\n style={{\n objectFit: blogPost.attributes.img.objectFit || 'cover',\n }}\n />\n </ImageContainer>\n <Box px=\"2\" py=\"8\">\n {blogPost.attributes.category.data && (\n <Text size=\"smMonoUppercase\" color=\"primary.800\" mb=\"2\">\n {blogPost.attributes.category.data.attributes.name}\n </Text>\n )}\n <Heading size=\"lg\">{blogPost.attributes.title}</Heading>\n {blogPost.attributes.teaser && (\n <Text size=\"mdRegularNormal\" mt=\"2\">\n {blogPost.attributes.teaser}\n </Text>\n )}\n <Spacer height=\"4\" />\n <DatePersonPair\n date={formatDate(blogPost.attributes.createdAt)}\n person={\n blogPost.attributes.author.data\n ? {\n name: blogPost.attributes.author.data.attributes\n .name,\n image: (\n <Image\n src={strapiMediaUrl(\n blogPost.attributes.author.data.attributes.img\n .img,\n 'thumbnail'\n )}\n alt={\n blogPost.attributes.author.data.attributes.img\n .alt\n }\n fill\n style={{\n objectFit:\n blogPost.attributes.author.data.attributes\n .img.objectFit || 'cover',\n }}\n />\n ),\n }\n : undefined\n }\n />\n </Box>\n </BlogItemContainer>\n );\n })}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import styled from '@emotion/styled';\nimport { BREAKPOINT_MD } from '../../constants/breakpoints';\nimport { Box, Link } from 'boemly';\n\nexport const BlogItemContainer = styled(Link)`\n text-decoration: none;\n display: flex;\n flex-direction: column;\n height: 100%;\n\n & div img {\n transition: transform var(--default-ease) var(--medium-transition-duration);\n }\n\n &:hover {\n text-decoration: none;\n\n & > div:first-of-type img {\n transform: scale(1.03);\n }\n }\n`;\n\nexport const ImageContainer = styled(Box)`\n width: 100%;\n height: var(--boemly-sizes-xs);\n position: relative;\n border-radius: var(--boemly-radii-2xl);\n\n // Fixes the flickering of borders during animation in Safari\n -webkit-mask-image: -webkit-radial-gradient(white, black);\n\n & span,\n div {\n border-radius: var(--boemly-radii-2xl);\n }\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n height: var(--boemly-sizes-3xs);\n }\n`;\n", "import { Blog } from './Blog';\n\nexport default Blog;\n", "import React from 'react';\nimport { Box, DefaultSectionContainer, SimpleGrid, Wrapper } from 'boemly';\nimport Link from 'next/link';\nimport { MEDIUM_TRANSITION_DURATION } from '../../constants/animations';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport IStrapi from '../../models/strapi/IStrapi';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport StrapiProject from '../../models/strapi/StrapiProject';\nimport ProjectGridCard from '../../components/ProjectGridCard';\n\nexport interface ProjectsGridProps {\n slice: {\n projects: IStrapi<IStrapiData<StrapiProject>[]>;\n };\n projects: PortfolioProject[];\n}\n\nconst ConditionalWrapper = ({\n condition,\n wrapper,\n children,\n}: {\n condition: boolean;\n wrapper: (children: React.JSX.Element) => React.JSX.Element;\n children: React.JSX.Element;\n}) => (condition ? wrapper(children) : children);\n\nexport const ProjectsGrid: React.FC<ProjectsGridProps> = ({\n projects,\n slice,\n}: ProjectsGridProps) => {\n const filteredProjects = projects.filter(\n (fpmProject) =>\n fpmProject.thumbnail &&\n slice.projects.data.some(\n (strapiProject) =>\n strapiProject.attributes.fpmProjectId === fpmProject.id\n )\n );\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2, null, 3]} gap=\"16\">\n {filteredProjects.map((project) => (\n <ConditionalWrapper\n key={project.id}\n condition={!!project.slug}\n wrapper={(children: React.JSX.Element) => (\n <Link\n href={`${project.portfolioHost || ''}/portfolio/${\n project.slug\n }`}\n passHref\n key={project.id}\n legacyBehavior\n >\n {children}\n </Link>\n )}\n >\n <Box\n as=\"a\"\n cursor=\"pointer\"\n borderRadius=\"2xl\"\n transition={`box-shadow ease ${MEDIUM_TRANSITION_DURATION}s`}\n _hover={{ boxShadow: 'lg' }}\n >\n <ProjectGridCard project={project} />\n </Box>\n </ConditionalWrapper>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { ProjectsGrid } from './ProjectsGrid';\n\nexport default ProjectsGrid;\n", "import React, {\n useRef,\n useEffect,\n useState,\n useCallback,\n useContext,\n} from 'react';\nimport { Global } from '@emotion/react';\nimport mapboxgl from 'mapbox-gl';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Wrapper,\n} from 'boemly';\nimport { MAPBOX_MAX_ZOOM, MAPBOX_TOKEN } from '../../constants/mapbox';\nimport { IntlContext } from '../../components/ContextProvider';\nimport mapboxStyle from './mapboxStyle';\nimport { FeatureCollection } from 'geojson';\nimport debounce from 'lodash/debounce';\nimport getFpmProjectsByBbox from '../../integrations/strapi/getFpmProjectsByBbox';\nimport getStrapiProjects from '../../integrations/strapi/getStrapiProjects';\nimport mergeProjectData from '../../utils/mergeProjectData';\nimport { CreditAvailability } from '../../models/fpm/FPMProject';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport StrapiProject from '../../models/strapi/StrapiProject';\n\nconst projectPinImage =\n 'https://cdn.jsdelivr.net/npm/@phosphor-icons/core@2.0.2/assets/fill/map-pin-fill.svg';\n\nmapboxgl.accessToken = MAPBOX_TOKEN;\n\nexport interface ProjectsMapProps {\n slice: {\n tagline?: string;\n title?: string;\n text?: string;\n defaultCenterCoordinates?: { latitude: number; longitude: number };\n defaultZoomLevel?: number;\n };\n}\n\nconst FALLBACK_BBOX =\n '-1.9950830850086163,44.4464186384987,21.995083085002875,54.12644342419196';\n\nexport const ProjectsMap: React.FC<ProjectsMapProps> = ({\n slice,\n}: ProjectsMapProps) => {\n const { locale, formatMessage } = useContext(IntlContext);\n const mapContainer = useRef<HTMLDivElement>(null);\n const map = useRef<mapboxgl.Map | null>(null);\n const animationIntervalRef = useRef<NodeJS.Timeout | null>(null);\n const [featureCollection, setFeatureCollection] =\n useState<FeatureCollection | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const initialBboxRef = useRef<string | null>(null);\n const [isMapReady, setIsMapReady] = useState(false);\n const [strapiProjects, setStrapiProjects] = useState<Map<\n string,\n IStrapiData<StrapiProject>\n > | null>(null);\n\n const isBboxContained = useCallback(\n (innerBbox: string, outerBbox: string): boolean => {\n const [innerWest, innerSouth, innerEast, innerNorth] = innerBbox\n .split(',')\n .map(Number);\n const [outerWest, outerSouth, outerEast, outerNorth] = outerBbox\n .split(',')\n .map(Number);\n return (\n innerWest >= outerWest &&\n innerEast <= outerEast &&\n innerSouth >= outerSouth &&\n innerNorth <= outerNorth\n );\n },\n []\n );\n\n const fetchStrapiData = useCallback(async () => {\n if (strapiProjects) return; // If we already have Strapi data, don't fetch it again\n\n try {\n const data = await getStrapiProjects(locale, '2'); // pLevel = Population depth which is a param in the API request. 2 is enough to get the slug and the portfolioHost\n setStrapiProjects(data);\n } catch (error) {\n console.error('\u274C Error fetching Strapi projects:', error);\n }\n }, [locale, strapiProjects]);\n\n const fetchProjectsData = useCallback(\n async (bbox: string) => {\n setIsLoading(true);\n try {\n const fpmData = await getFpmProjectsByBbox(bbox);\n\n // If we have Strapi data, merge it, otherwise show FPM data immediately\n const mergedData = strapiProjects\n ? mergeProjectData(fpmData, strapiProjects)\n : fpmData;\n\n setFeatureCollection(mergedData);\n } catch (error) {\n console.error('Error fetching projects:', error);\n } finally {\n setIsLoading(false);\n }\n },\n [strapiProjects]\n );\n\n const debouncedUpdateBbox = useCallback(\n debounce(() => {\n if (!map.current || !initialBboxRef.current) return;\n const bounds = map.current.getBounds();\n const newBbox = `${bounds.getWest()},${bounds.getSouth()},${bounds.getEast()},${bounds.getNorth()}`;\n if (!isBboxContained(newBbox, initialBboxRef.current)) {\n fetchProjectsData(newBbox);\n initialBboxRef.current = newBbox;\n }\n }, 500),\n [fetchProjectsData, isBboxContained]\n );\n\n const addProjectsLayer = useCallback(() => {\n if (!map.current || !featureCollection || !map.current.isStyleLoaded()) {\n return;\n }\n\n const filteredFeatureCollection = {\n ...featureCollection,\n features: featureCollection.features.filter(\n (feature) => feature.properties?.isPublic !== false\n ),\n };\n\n const source = map.current.getSource('projects') as mapboxgl.GeoJSONSource;\n\n if (!source) {\n map.current.addSource('projects', {\n type: 'geojson',\n data: filteredFeatureCollection,\n cluster: true,\n clusterMaxZoom: 14,\n clusterRadius: 50,\n });\n\n map.current.addLayer({\n id: 'clusters',\n type: 'circle',\n source: 'projects',\n filter: ['has', 'point_count'],\n paint: {\n 'circle-color': [\n 'step',\n ['get', 'point_count'],\n '#51bbd6',\n 2,\n '#2A3FBA',\n ],\n 'circle-radius': ['step', ['get', 'point_count'], 20, 10, 30, 30, 40],\n 'circle-radius-transition': { duration: 300 },\n 'circle-stroke-width': 5,\n 'circle-stroke-color': '#2A3FBA',\n 'circle-stroke-opacity': 0.4,\n },\n });\n\n if (animationIntervalRef.current) {\n clearInterval(animationIntervalRef.current);\n }\n animationIntervalRef.current = setInterval(() => {\n if (!map.current) return;\n const now = Date.now() / 1000;\n const pulseFactor = 1 + 0.05 * Math.sin((now * 2 * Math.PI) / 2.8);\n const expression = [\n 'step',\n ['get', 'point_count'],\n 20 * pulseFactor,\n 10,\n 30 * pulseFactor,\n 30,\n 40 * pulseFactor,\n ] as mapboxgl.ExpressionSpecification;\n map.current.setPaintProperty('clusters', 'circle-radius', expression);\n }, 50);\n\n map.current.addLayer({\n id: 'cluster-count',\n type: 'symbol',\n source: 'projects',\n filter: ['has', 'point_count'],\n layout: {\n 'text-field': '{point_count_abbreviated}',\n 'text-font': ['DIN Offc Pro Medium', 'Arial Unicode MS Bold'],\n 'text-size': 12,\n },\n paint: {\n 'text-color': '#fff',\n },\n });\n\n // Load SVG as PNG\n fetch(projectPinImage)\n .then((response) => response.text())\n .then((svgText) => {\n // Modify SVG color\n const modifiedSvg = svgText.replace(/fill=\"[^\"]*\"/, `fill=\"#2A3FBA\"`);\n const img = new Image();\n img.src = `data:image/svg+xml;base64,${btoa(modifiedSvg)}`;\n return new Promise<HTMLImageElement>((resolve, reject) => {\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n })\n .then((img) => {\n if (!map.current) return;\n const canvas = document.createElement('canvas');\n canvas.width = 80;\n canvas.height = 80;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n ctx.drawImage(img, 10, 10, 60, 60);\n const pngImg = new Image();\n pngImg.src = canvas.toDataURL('image/png');\n pngImg.onload = () => {\n map.current?.addImage('project-pin', pngImg, { pixelRatio: 2 });\n map.current?.addLayer({\n id: 'unclustered-point',\n type: 'symbol',\n source: 'projects',\n filter: ['!', ['has', 'point_count']],\n layout: {\n 'icon-image': 'project-pin',\n },\n });\n };\n })\n .catch((error) => {\n console.error('Error loading project pin image:', error);\n });\n\n const popup = new mapboxgl.Popup({\n closeButton: true,\n closeOnClick: false,\n className: 'custom-popup',\n offset: [0, -20],\n });\n\n const style = document.createElement('style');\n style.textContent = `\n .custom-popup .mapboxgl-popup-content {\n border-radius: 8px;\n padding: 12px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.2);\n background: white;\n color: #333;\n }\n .mapboxgl-popup {\n max-width: 300px !important;\n }\n .mapboxgl-popup-close-button {\n padding: 4px 8px;\n font-size: 16px;\n color: #666;\n }\n .mapboxgl-popup-close-button:hover {\n background: #f0f0f0;\n color: #333;\n }\n `;\n document.head.appendChild(style);\n\n map.current.on('click', 'unclustered-point', (e) => {\n if (!e.features || !e.features[0].properties) return;\n map.current!.getCanvas().style.cursor = 'pointer';\n\n const coordinates = (e.features[0].geometry as any).coordinates.slice();\n const {\n title,\n projectDeveloper,\n slug,\n portfolioHost,\n creditAvailability,\n } = e.features[0].properties;\n\n // Calculate if popup would go off screen at the top\n const point = map.current!.project(coordinates);\n const popupHeight = 150; // Approximate height of popup\n const offset: [number, number] =\n point.y - popupHeight - 20 < 0 ? [0, 20] : [0, -20];\n\n let developer = 'Unknown';\n try {\n const projectDeveloperRaw = projectDeveloper;\n if (projectDeveloperRaw) {\n developer =\n JSON.parse(projectDeveloperRaw as string)?.name ?? 'Unknown';\n }\n } catch {\n developer = 'Unknown';\n }\n\n const projectUrl =\n slug && portfolioHost ? `${portfolioHost}/portfolio/${slug}` : null;\n\n const getBadgeMessage = (status: string) => {\n switch (status) {\n case CreditAvailability.CREDITS_AVAILABLE:\n return formatMessage({\n id: 'components.creditsAvailableBadge.text.yes',\n });\n case CreditAvailability.NO_CREDITS_AVAILABLE:\n return formatMessage({\n id: 'components.creditsAvailableBadge.text.no',\n });\n case CreditAvailability.SOME_CREDITS_AVAILABLE:\n return formatMessage({\n id: 'components.creditsAvailableBadge.text.some',\n });\n case CreditAvailability.SOON_CREDITS_AVAILABLE:\n return formatMessage({\n id: 'components.creditsAvailableBadge.text.notYet',\n });\n default:\n return '';\n }\n };\n\n const getBadgeColor = (status: string) => {\n switch (status) {\n case CreditAvailability.CREDITS_AVAILABLE:\n return '#15803d';\n case CreditAvailability.NO_CREDITS_AVAILABLE:\n return '#b91c1c';\n case CreditAvailability.SOME_CREDITS_AVAILABLE:\n return '#ea580c';\n case CreditAvailability.SOON_CREDITS_AVAILABLE:\n return '#2563eb';\n default:\n return '#e0e7ff';\n }\n };\n\n const badgeColor = getBadgeColor(creditAvailability);\n const badgeMessage = getBadgeMessage(creditAvailability);\n\n const badge = projectUrl\n ? `<a href=\"${projectUrl}\" target=\"_blank\" rel=\"noopener\" style=\"text-decoration: none;\"><span style=\"display: inline-block; background: ${badgeColor}; color: white; font-weight: 600; border-radius: 4px; padding: 2px 8px; font-size: 12px; margin-bottom: 6px; cursor: pointer;\">${badgeMessage}</span></a>`\n : `<span style=\"display: inline-block; background: ${badgeColor}; color: white; font-weight: 600; border-radius: 4px; padding: 2px 8px; font-size: 12px; margin-bottom: 6px;\">${badgeMessage}</span>`;\n\n const button = projectUrl\n ? `<a href=\"${projectUrl}\" target=\"_blank\" rel=\"noopener\" style=\"display: inline-block; margin-top: 12px; padding: 4px 8px; border: 1px solid #e2e8f0; border-radius: 4px; background: #fff; font-size: 14px; font-weight: 700; text-decoration: none;\">Show more info</a>`\n : '';\n\n const description = `\n <div style=\"padding: 2px; padding-right: 16px; min-width: 180px; max-width: 260px;\">\n ${badge}\n <h3 style=\"font-size: 15px; font-weight: bold;\">${title}</h3>\n <p style=\"font-size: 15px; color: #64748b;\">${developer}</p>\n ${button}\n </div>\n `;\n\n while (Math.abs(e.lngLat.lng - coordinates[0]) > 180) {\n coordinates[0] += e.lngLat.lng > coordinates[0] ? 360 : -360;\n }\n\n popup\n .setOffset(offset)\n .setLngLat(coordinates)\n .setHTML(description)\n .addTo(map.current!);\n });\n\n map.current.on('click', 'clusters', (e) => {\n const features = map.current?.queryRenderedFeatures(e.point, {\n layers: ['clusters'],\n });\n if (!features || !features[0].properties) return;\n\n const clusterId = features[0].properties.cluster_id;\n const projectSource = map.current?.getSource(\n 'projects'\n ) as mapboxgl.GeoJSONSource;\n\n projectSource.getClusterExpansionZoom(clusterId, (err, zoom) => {\n if (err || !map.current) return;\n const coordinates = (features[0].geometry as any).coordinates;\n map.current.easeTo({ center: coordinates, zoom });\n });\n });\n\n map.current.on('mouseenter', 'clusters', () => {\n if (map.current) map.current.getCanvas().style.cursor = 'pointer';\n });\n map.current.on('mouseleave', 'clusters', () => {\n if (map.current) map.current.getCanvas().style.cursor = '';\n });\n\n map.current.on('mouseenter', 'unclustered-point', () => {\n if (map.current) map.current.getCanvas().style.cursor = 'pointer';\n });\n map.current.on('mouseleave', 'unclustered-point', () => {\n if (map.current) map.current.getCanvas().style.cursor = '';\n });\n } else {\n source.setData(filteredFeatureCollection);\n }\n }, [featureCollection, locale, formatMessage]);\n\n useEffect(() => {\n if (map.current || !mapContainer.current) return;\n\n let initialCenter: [number, number];\n let initialZoom: number;\n\n if (slice.defaultCenterCoordinates && slice.defaultZoomLevel) {\n initialCenter = [\n slice.defaultCenterCoordinates.longitude,\n slice.defaultCenterCoordinates.latitude,\n ];\n initialZoom = slice.defaultZoomLevel;\n } else {\n // Always start with fallback view - don't wait for user location\n const bbox = initialBboxRef.current || FALLBACK_BBOX;\n const [west, south, east, north] = bbox.split(',').map(Number);\n const bounds = new mapboxgl.LngLatBounds([west, south], [east, north]);\n const center = bounds.getCenter();\n initialCenter = [center.lng, center.lat];\n initialZoom = 6;\n }\n\n map.current = new mapboxgl.Map({\n container: mapContainer.current,\n style: 'mapbox://styles/mapbox/streets-v12',\n center: initialCenter,\n zoom: initialZoom,\n maxZoom: MAPBOX_MAX_ZOOM,\n });\n\n map.current.addControl(new mapboxgl.NavigationControl(), 'top-right');\n\n map.current.on('load', () => {\n setIsMapReady(true);\n if (!(slice.defaultCenterCoordinates && slice.defaultZoomLevel)) {\n const bbox = initialBboxRef.current || FALLBACK_BBOX;\n const [west, south, east, north] = bbox.split(',').map(Number);\n const bounds = new mapboxgl.LngLatBounds([west, south], [east, north]);\n map.current?.fitBounds(bounds, { padding: 20 });\n }\n });\n\n map.current.on('moveend', () => {\n if (initialBboxRef.current) {\n debouncedUpdateBbox();\n }\n });\n\n return () => {\n debouncedUpdateBbox.cancel();\n if (animationIntervalRef.current) {\n clearInterval(animationIntervalRef.current);\n }\n map.current?.remove();\n map.current = null;\n };\n }, [\n slice.defaultCenterCoordinates,\n slice.defaultZoomLevel,\n debouncedUpdateBbox,\n ]);\n\n // Fetch Strapi data once on component mount\n useEffect(() => {\n fetchStrapiData();\n }, [fetchStrapiData]);\n\n // Handle re-merging data when Strapi data becomes available\n useEffect(() => {\n if (strapiProjects && featureCollection) {\n const mergedData = mergeProjectData(featureCollection, strapiProjects);\n setFeatureCollection(mergedData);\n }\n }, [strapiProjects]);\n\n // Request user location (non-blocking)\n useEffect(() => {\n if (slice.defaultCenterCoordinates && slice.defaultZoomLevel) {\n // Use provided default coordinates\n const { latitude, longitude } = slice.defaultCenterCoordinates;\n const buffer = 10;\n const bbox = `${longitude - buffer},${latitude - buffer},${\n longitude + buffer\n },${latitude + buffer}`;\n initialBboxRef.current = bbox;\n fetchProjectsData(bbox);\n } else if (navigator.geolocation) {\n // Set fallback immediately (non-blocking)\n initialBboxRef.current = FALLBACK_BBOX;\n fetchProjectsData(FALLBACK_BBOX);\n\n // Request user location asynchronously\n navigator.geolocation.getCurrentPosition(\n (position) => {\n const userLoc = {\n lat: position.coords.latitude,\n lon: position.coords.longitude,\n };\n if (map.current) {\n map.current.easeTo({\n center: [userLoc.lon, userLoc.lat],\n zoom: 10,\n duration: 1500,\n });\n\n // Update bbox for this location\n const buffer = 1;\n const bbox = `${userLoc.lon - buffer},${userLoc.lat - buffer},${\n userLoc.lon + buffer\n },${userLoc.lat + buffer}`;\n initialBboxRef.current = bbox;\n fetchProjectsData(bbox);\n }\n },\n () => {\n // Permission denied or error - already have fallback data loaded\n // No need to re-fetch since we already loaded FALLBACK_BBOX data\n }\n );\n } else {\n // Geolocation not supported - use fallback\n initialBboxRef.current = FALLBACK_BBOX;\n fetchProjectsData(FALLBACK_BBOX);\n }\n }, [\n slice.defaultCenterCoordinates,\n slice.defaultZoomLevel,\n fetchProjectsData,\n ]);\n\n useEffect(() => {\n if (isMapReady && featureCollection && map.current?.isStyleLoaded()) {\n addProjectsLayer();\n }\n }, [isMapReady, featureCollection, addProjectsLayer]);\n\n return (\n <DefaultSectionContainer>\n <Global styles={mapboxStyle} />\n <Wrapper>\n {slice.title ? (\n <>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center' }}\n titleProps={{\n textAlign: 'center',\n maxW: '6xl',\n marginX: 'auto',\n }}\n textProps={{\n textAlign: 'center',\n maxW: '3xl',\n marginX: 'auto',\n }}\n />\n <Box height=\"16\" />\n </>\n ) : (\n <></>\n )}\n <Box\n height=\"xl\"\n ref={mapContainer}\n borderRadius=\"xl\"\n overflow=\"hidden\"\n boxShadow={['md', null, null, 'none']}\n />\n <>{isLoading && <Box>Loading projects...</Box>}</>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n\nexport default ProjectsMap;\n", "export const MAPBOX_TOKEN =\n 'pk.eyJ1IjoidHJlZS1seSIsImEiOiJja25rNG1heHgwNThjMnZwZTl2eThmeXUwIn0.SOrYUKfevZkbx8jZPxJesA';\n\nexport enum MapBoxStyle {\n Outdoors = 'mapbox://styles/mapbox/outdoors-v11',\n SatelliteStreets = 'mapbox://styles/mapbox/satellite-streets-v11',\n Satellite = 'mapbox://styles/mapbox/satellite-v9',\n CaliTerrain = 'mapbox://styles/tree-ly/clna54iq603ht01pbc199cszw',\n}\n\nexport const MAPBOX_TILES_URL = `${\n process.env.NEXT_PUBLIC_MAPBOX_TILES_URL || 'http://localhost:8123'\n}/vectortiles/v1/plots/{z}/{x}/{y}.mvt`;\nexport const MAPBOX_SOURCE_LAYER = 'plots';\nexport const MAPBOX_SOURCE_IDENTIFIER = 'plots';\nexport const MAPBOX_BORDER_LAYER_IDENTIFIER = 'plots-borders';\nexport const MAPBOX_FILL_LAYER_IDENTIFIER = 'plots-fill';\nexport const MAPBOX_TEXT_LAYER_IDENTIFIER = 'plots-text';\n\nexport const MAPBOX_TEXT_MIN_ZOOM = 15;\nexport const MAPBOX_SHAPES_MIN_ZOOM = 13;\n\nexport const MAPBOX_MAX_ZOOM = 19;\nexport const MAPBOX_INITIAL_ZOOM = 13;\n", "import { css } from '@emotion/react';\n\nconst mapboxStyle = css`\n .mapboxgl-map {\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n font:\n 12px/20px Helvetica Neue,\n Arial,\n Helvetica,\n sans-serif;\n overflow: hidden;\n position: relative;\n }\n .mapboxgl-canvas {\n left: 0;\n position: absolute;\n top: 0;\n }\n .mapboxgl-map:-webkit-full-screen {\n height: 100%;\n width: 100%;\n }\n .mapboxgl-canary {\n background-color: salmon;\n }\n .mapboxgl-canvas-container.mapboxgl-interactive,\n .mapboxgl-ctrl-group button.mapboxgl-ctrl-compass {\n cursor: grab;\n -webkit-user-select: none;\n user-select: none;\n }\n .mapboxgl-canvas-container.mapboxgl-interactive.mapboxgl-track-pointer {\n cursor: pointer;\n }\n .mapboxgl-canvas-container.mapboxgl-interactive:active,\n .mapboxgl-ctrl-group button.mapboxgl-ctrl-compass:active {\n cursor: grabbing;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate,\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate .mapboxgl-canvas {\n touch-action: pan-x pan-y;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-drag-pan,\n .mapboxgl-canvas-container.mapboxgl-touch-drag-pan .mapboxgl-canvas {\n touch-action: pinch-zoom;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan,\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan\n .mapboxgl-canvas {\n touch-action: none;\n }\n .mapboxgl-ctrl-bottom-left,\n .mapboxgl-ctrl-bottom-right,\n .mapboxgl-ctrl-top-left,\n .mapboxgl-ctrl-top-right {\n pointer-events: none;\n position: absolute;\n z-index: 2;\n }\n .mapboxgl-ctrl-top-left {\n left: 0;\n top: 0;\n }\n .mapboxgl-ctrl-top-right {\n right: 0;\n top: 0;\n }\n .mapboxgl-ctrl-bottom-left {\n bottom: 0;\n left: 0;\n }\n .mapboxgl-ctrl-bottom-right {\n bottom: 0;\n right: 0;\n }\n .mapboxgl-ctrl {\n clear: both;\n pointer-events: auto;\n transform: translate(0);\n }\n .mapboxgl-ctrl-top-left .mapboxgl-ctrl {\n float: left;\n margin: 10px 0 0 10px;\n }\n .mapboxgl-ctrl-top-right .mapboxgl-ctrl {\n float: right;\n margin: 10px 10px 0 0;\n }\n .mapboxgl-ctrl-bottom-left .mapboxgl-ctrl {\n float: left;\n margin: 0 0 10px 10px;\n }\n .mapboxgl-ctrl-bottom-right .mapboxgl-ctrl {\n float: right;\n margin: 0 10px 10px 0;\n }\n .mapboxgl-ctrl-group {\n background: #fff;\n border-radius: 4px;\n }\n .mapboxgl-ctrl-group:not(:empty) {\n box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1);\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl-group:not(:empty) {\n box-shadow: 0 0 0 2px ButtonText;\n }\n }\n .mapboxgl-ctrl-group button {\n background-color: transparent;\n border: 0;\n box-sizing: border-box;\n cursor: pointer;\n display: block;\n height: 29px;\n outline: none;\n overflow: hidden;\n padding: 0;\n width: 29px;\n }\n .mapboxgl-ctrl-group button + button {\n border-top: 1px solid #ddd;\n }\n .mapboxgl-ctrl button .mapboxgl-ctrl-icon {\n background-position: 50%;\n background-repeat: no-repeat;\n display: block;\n height: 100%;\n width: 100%;\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl-icon {\n background-color: transparent;\n }\n .mapboxgl-ctrl-group button + button {\n border-top: 1px solid ButtonText;\n }\n }\n .mapboxgl-ctrl-attrib-button:focus,\n .mapboxgl-ctrl-group button:focus {\n box-shadow: 0 0 2px 2px #0096ff;\n }\n .mapboxgl-ctrl button:disabled {\n cursor: not-allowed;\n }\n .mapboxgl-ctrl button:disabled .mapboxgl-ctrl-icon {\n opacity: 0.25;\n }\n .mapboxgl-ctrl-group button:first-of-type {\n border-radius: 4px 4px 0 0;\n }\n .mapboxgl-ctrl-group button:last-of-type {\n border-radius: 0 0 4px 4px;\n }\n .mapboxgl-ctrl-group button:only-of-type {\n border-radius: inherit;\n }\n .mapboxgl-ctrl button:not(:disabled):hover {\n background-color: rgba(0, 0, 0, 0.05);\n }\n .mapboxgl-ctrl-group button:focus:focus-visible {\n box-shadow: 0 0 2px 2px #0096ff;\n }\n .mapboxgl-ctrl-group button:focus:not(:focus-visible) {\n box-shadow: none;\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E\");\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E\");\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E\");\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23999'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23aaa'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-waiting\n .mapboxgl-ctrl-icon {\n animation: mapboxgl-spin 2s linear infinite;\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23999'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23000'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23666'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E\");\n }\n }\n @keyframes mapboxgl-spin {\n 0% {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(1turn);\n }\n }\n a.mapboxgl-ctrl-logo {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='0.3' stroke='%23000' stroke-width='3'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='0.9' fill='%23fff'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n cursor: pointer;\n display: block;\n height: 23px;\n margin: 0 0 -4px -4px;\n overflow: hidden;\n width: 88px;\n }\n a.mapboxgl-ctrl-logo.mapboxgl-compact {\n width: 23px;\n }\n @media (-ms-high-contrast: active) {\n a.mapboxgl-ctrl-logo {\n background-color: transparent;\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='1' stroke='%23000' stroke-width='3'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='1' fill='%23fff'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n a.mapboxgl-ctrl-logo {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='1' stroke='%23fff' stroke-width='3' fill='%23fff'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='1' fill='%23000'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl.mapboxgl-ctrl-attrib {\n background-color: hsla(0, 0%, 100%, 0.5);\n margin: 0;\n padding: 0 5px;\n }\n @media screen {\n .mapboxgl-ctrl-attrib.mapboxgl-compact {\n background-color: #fff;\n border-radius: 12px;\n margin: 10px;\n min-height: 20px;\n padding: 2px 24px 2px 0;\n position: relative;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact-show {\n padding: 2px 28px 2px 8px;\n visibility: visible;\n }\n .mapboxgl-ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact-show,\n .mapboxgl-ctrl-top-left > .mapboxgl-ctrl-attrib.mapboxgl-compact-show {\n border-radius: 12px;\n padding: 2px 8px 2px 28px;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner {\n display: none;\n }\n .mapboxgl-ctrl-attrib-button {\n background-color: hsla(0, 0%, 100%, 0.5);\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E\");\n border: 0;\n border-radius: 12px;\n box-sizing: border-box;\n cursor: pointer;\n display: none;\n height: 24px;\n outline: none;\n position: absolute;\n right: 0;\n top: 0;\n width: 24px;\n }\n .mapboxgl-ctrl-bottom-left .mapboxgl-ctrl-attrib-button,\n .mapboxgl-ctrl-top-left .mapboxgl-ctrl-attrib-button {\n left: 0;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-button,\n .mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-inner {\n display: block;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-button {\n background-color: rgba(0, 0, 0, 0.05);\n }\n .mapboxgl-ctrl-bottom-right > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n bottom: 0;\n right: 0;\n }\n .mapboxgl-ctrl-top-right > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n right: 0;\n top: 0;\n }\n .mapboxgl-ctrl-top-left > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n left: 0;\n top: 0;\n }\n .mapboxgl-ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n bottom: 0;\n left: 0;\n }\n }\n @media screen and (-ms-high-contrast: active) {\n .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' fill='%23fff'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E\");\n }\n }\n @media screen and (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl-attrib a {\n color: rgba(0, 0, 0, 0.75);\n text-decoration: none;\n }\n .mapboxgl-ctrl-attrib a:hover {\n color: inherit;\n text-decoration: underline;\n }\n .mapboxgl-ctrl-attrib .mapbox-improve-map {\n font-weight: 700;\n margin-left: 2px;\n }\n .mapboxgl-attrib-empty {\n display: none;\n }\n .mapboxgl-ctrl-scale {\n background-color: hsla(0, 0%, 100%, 0.75);\n border: 2px solid #333;\n border-top: #333;\n box-sizing: border-box;\n color: #333;\n font-size: 10px;\n padding: 0 5px;\n white-space: nowrap;\n }\n .mapboxgl-popup {\n display: flex;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n will-change: transform;\n }\n .mapboxgl-popup-anchor-top,\n .mapboxgl-popup-anchor-top-left,\n .mapboxgl-popup-anchor-top-right {\n flex-direction: column;\n }\n .mapboxgl-popup-anchor-bottom,\n .mapboxgl-popup-anchor-bottom-left,\n .mapboxgl-popup-anchor-bottom-right {\n flex-direction: column-reverse;\n }\n .mapboxgl-popup-anchor-left {\n flex-direction: row;\n }\n .mapboxgl-popup-anchor-right {\n flex-direction: row-reverse;\n }\n .mapboxgl-popup-tip {\n border: 10px solid transparent;\n height: 0;\n width: 0;\n z-index: 1;\n }\n .mapboxgl-popup-anchor-top .mapboxgl-popup-tip {\n align-self: center;\n border-bottom-color: #fff;\n border-top: none;\n }\n .mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip {\n align-self: flex-start;\n border-bottom-color: #fff;\n border-left: none;\n border-top: none;\n }\n .mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip {\n align-self: flex-end;\n border-bottom-color: #fff;\n border-right: none;\n border-top: none;\n }\n .mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip {\n align-self: center;\n border-bottom: none;\n border-top-color: #fff;\n }\n .mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip {\n align-self: flex-start;\n border-bottom: none;\n border-left: none;\n border-top-color: #fff;\n }\n .mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip {\n align-self: flex-end;\n border-bottom: none;\n border-right: none;\n border-top-color: #fff;\n }\n .mapboxgl-popup-anchor-left .mapboxgl-popup-tip {\n align-self: center;\n border-left: none;\n border-right-color: #fff;\n }\n .mapboxgl-popup-anchor-right .mapboxgl-popup-tip {\n align-self: center;\n border-left-color: #fff;\n border-right: none;\n }\n .mapboxgl-popup-close-button {\n background-color: transparent;\n border: 0;\n border-radius: 0 3px 0 0;\n cursor: pointer;\n position: absolute;\n right: 0;\n top: 0;\n }\n .mapboxgl-popup-close-button:hover {\n background-color: rgba(0, 0, 0, 0.05);\n }\n .mapboxgl-popup-content {\n background: #fff;\n border-radius: 3px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n padding: 10px 10px 15px;\n pointer-events: auto;\n position: relative;\n }\n .mapboxgl-popup-anchor-top-left .mapboxgl-popup-content {\n border-top-left-radius: 0;\n }\n .mapboxgl-popup-anchor-top-right .mapboxgl-popup-content {\n border-top-right-radius: 0;\n }\n .mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-content {\n border-bottom-left-radius: 0;\n }\n .mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-content {\n border-bottom-right-radius: 0;\n }\n .mapboxgl-popup-track-pointer {\n display: none;\n }\n .mapboxgl-popup-track-pointer * {\n pointer-events: none;\n user-select: none;\n }\n .mapboxgl-map:hover .mapboxgl-popup-track-pointer {\n display: flex;\n }\n .mapboxgl-map:active .mapboxgl-popup-track-pointer {\n display: none;\n }\n .mapboxgl-marker {\n left: 0;\n opacity: 1;\n position: absolute;\n top: 0;\n transition: opacity 0.2s;\n will-change: transform;\n }\n .mapboxgl-user-location-dot,\n .mapboxgl-user-location-dot:before {\n background-color: #1da1f2;\n border-radius: 50%;\n height: 15px;\n width: 15px;\n }\n .mapboxgl-user-location-dot:before {\n animation: mapboxgl-user-location-dot-pulse 2s infinite;\n content: '';\n position: absolute;\n }\n .mapboxgl-user-location-dot:after {\n border: 2px solid #fff;\n border-radius: 50%;\n box-shadow: 0 0 3px rgba(0, 0, 0, 0.35);\n box-sizing: border-box;\n content: '';\n height: 19px;\n left: -2px;\n position: absolute;\n top: -2px;\n width: 19px;\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading {\n height: 0;\n width: 0;\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after,\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before {\n border-bottom: 7.5px solid #4aa1eb;\n content: '';\n position: absolute;\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before {\n border-left: 7.5px solid transparent;\n transform: translateY(-28px) skewY(-20deg);\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after {\n border-right: 7.5px solid transparent;\n transform: translate(7.5px, -28px) skewY(20deg);\n }\n @keyframes mapboxgl-user-location-dot-pulse {\n 0% {\n opacity: 1;\n transform: scale(1);\n }\n 70% {\n opacity: 0;\n transform: scale(3);\n }\n to {\n opacity: 0;\n transform: scale(1);\n }\n }\n .mapboxgl-user-location-dot-stale {\n background-color: #aaa;\n }\n .mapboxgl-user-location-dot-stale:after {\n display: none;\n }\n .mapboxgl-user-location-accuracy-circle {\n background-color: #1da1f233;\n border-radius: 100%;\n height: 1px;\n width: 1px;\n }\n .mapboxgl-crosshair,\n .mapboxgl-crosshair .mapboxgl-interactive,\n .mapboxgl-crosshair .mapboxgl-interactive:active {\n cursor: crosshair;\n }\n .mapboxgl-boxzoom {\n background: #fff;\n border: 2px dotted #202020;\n height: 0;\n left: 0;\n opacity: 0.5;\n position: absolute;\n top: 0;\n width: 0;\n }\n @media print {\n .mapbox-improve-map {\n display: none;\n }\n }\n .mapboxgl-scroll-zoom-blocker,\n .mapboxgl-touch-pan-blocker {\n align-items: center;\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n display: flex;\n font-family:\n -apple-system,\n BlinkMacSystemFont,\n Segoe UI,\n Helvetica,\n Arial,\n sans-serif;\n height: 100%;\n justify-content: center;\n left: 0;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n text-align: center;\n top: 0;\n transition: opacity 0.75s ease-in-out;\n transition-delay: 1s;\n width: 100%;\n }\n .mapboxgl-scroll-zoom-blocker-show,\n .mapboxgl-touch-pan-blocker-show {\n opacity: 1;\n transition: opacity 0.1s ease-in-out;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page,\n .mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page\n .mapboxgl-canvas {\n touch-action: pan-x pan-y;\n }\n`;\n\nexport default mapboxStyle;\n", "import { FeatureCollection } from 'geojson';\nimport fpmClient from '../fpmClient';\n\nconst getFpmProjectsByBbox = async (\n bbox: string,\n preview: boolean = false\n): Promise<FeatureCollection> => {\n const [west, south, east, north] = bbox.split(',').map(Number);\n const cache = preview ? false : undefined;\n\n const fpmResponse = await fpmClient.get<FeatureCollection>(\n '/public/projects',\n {\n params: {\n bbox: `${west},${south},${east},${north}`,\n },\n cache,\n }\n );\n\n return fpmResponse.data;\n};\n\nexport default getFpmProjectsByBbox;\n", "import { FeatureCollection } from 'geojson';\nimport { IStrapiData, StrapiProject } from '..';\n\nconst mergeProjectData = (\n featureCollection: FeatureCollection,\n strapiProjects: Map<string, IStrapiData<StrapiProject>>\n): FeatureCollection => {\n // Add slug and portfolioHost to each feature's properties if we have Strapi data\n const mergedFeatureCollection = {\n ...featureCollection,\n features: featureCollection.features.map((feature) => {\n const fpmProjectId = feature.properties?.id;\n const strapiProject = fpmProjectId\n ? strapiProjects.get(fpmProjectId)\n : null;\n\n if (strapiProject) {\n feature.properties = {\n ...feature.properties,\n slug: strapiProject.attributes.slug || undefined,\n portfolioHost:\n strapiProject.attributes.portfolio?.data?.attributes.host ||\n undefined,\n };\n }\n\n return feature;\n }),\n };\n\n return mergedFeatureCollection;\n};\n\nexport default mergeProjectData;\n", "import { ProjectsMap } from './ProjectsMap';\n\nexport default ProjectsMap;\n", "import React, { useRef } from 'react';\nimport { Box, DefaultSectionContainer, Wrapper } from 'boemly';\nimport { useMeasure } from '@reactuses/core';\n\ninterface VideoSlice {\n youTubeID: string;\n title: string;\n}\n\nexport interface VideoProps {\n slice: VideoSlice;\n}\n\nexport const Video: React.FC<VideoProps> = ({ slice }: VideoProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const [rect] = useMeasure(ref);\n const width = rect.width;\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <Box ref={ref} borderRadius=\"xl\">\n <iframe\n data-testid=\"video-iframe\"\n width={width}\n height={(width / 16) * 9}\n src={`https://www.youtube.com/embed/${slice.youTubeID}`}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n title={slice.title}\n style={{ borderRadius: 'var(--boemly-radii-xl)' }}\n />\n </Box>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { Video } from './Video';\n\nexport default Video;\n", "import React from 'react';\nimport {\n DefaultSectionContainer,\n Wrapper,\n AvatarWithName,\n Text,\n Box,\n} from 'boemly';\nimport StrapiAvatarWithName from '../../models/strapi/StrapiAvatarWithName';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\nexport interface FullWidthHighlightQuoteProps {\n slice: {\n tagline?: string;\n quote: string;\n avatarWithName: StrapiAvatarWithName;\n };\n}\n\nexport const FullWidthHighlightQuote: React.FC<\n FullWidthHighlightQuoteProps\n> = ({ slice }: FullWidthHighlightQuoteProps) => (\n <DefaultSectionContainer>\n <Wrapper>\n <Box maxWidth=\"5xl\" marginX=\"auto\" mb=\"8\">\n {slice.tagline && (\n <Text\n color=\"primary.700\"\n size=\"mdMonoUppercase\"\n textAlign=\"center\"\n mb=\"3\"\n >\n {slice.tagline}\n </Text>\n )}\n <Text color=\"black\" size=\"xlRegularNormalBold\" textAlign=\"center\">\n {slice.quote}\n </Text>\n </Box>\n <AvatarWithName\n name={slice.avatarWithName.name}\n description={slice.avatarWithName.description}\n imageSrc={strapiMediaUrl(slice.avatarWithName.image.img, 'small')}\n imageAlt={slice.avatarWithName.image.alt}\n imageObjectFit={slice.avatarWithName.image.objectFit || 'cover'}\n orientation=\"vertical\"\n />\n </Wrapper>\n </DefaultSectionContainer>\n);\n", "import { FullWidthHighlightQuote } from './FullWidthHighlightQuote';\n\nexport default FullWidthHighlightQuote;\n", "import React, { useMemo, useRef, useState } from 'react';\nimport {\n Box,\n IconButton,\n DefaultSectionContainer,\n Flex,\n Text,\n useMediaQuery,\n} from 'boemly';\nimport Image from 'next/image';\nimport { useMeasure, useWindowSize } from '@reactuses/core';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { ArrowLeftIcon, ArrowRightIcon } from '@phosphor-icons/react';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport FullScreenImage from '../../components/FullScreenImage';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\nimport {\n ItemContainer,\n SliderContainer,\n SliderInnerContainer,\n ImageContainer,\n} from './styles';\nimport { getClosestRatio } from '../../utils/getClosestRatio';\n\nexport interface FullWidthImageSliderProps {\n slice: {\n images: {\n id: number;\n caption: string;\n img: StrapiImage;\n }[];\n };\n}\n\nconst ITEM_GAP = 24;\nconst MAX_OFFSET_RIGHT = 162;\n\nexport const FullWidthImageSlider: React.FC<FullWidthImageSliderProps> = ({\n slice,\n}: FullWidthImageSliderProps) => {\n const containerRef = useRef(null);\n const imageRef = useRef<HTMLDivElement>(null);\n const [rect] = useMeasure(imageRef);\n const imageWidth = rect.width;\n const { width: windowWidth } = useWindowSize();\n const [isMobile] = useMediaQuery([BREAKPOINT_MD_QUERY]);\n\n const [sliderIndex, setSliderIndex] = useState(0);\n const [isOpen, setIsOpen] = useState(false);\n\n const numberOfItems = useMemo(\n () => slice.images.length,\n [slice.images.length]\n );\n\n const sliderItemsWidth = useMemo(\n () => numberOfItems * (imageWidth + ITEM_GAP) - ITEM_GAP,\n [imageWidth, numberOfItems]\n );\n\n const offsetLeft = useMemo(\n () => sliderIndex * (imageWidth + ITEM_GAP) * -1,\n [sliderIndex, imageWidth]\n );\n\n const allowScroll = useMemo(\n () => sliderItemsWidth + ITEM_GAP * 3 > windowWidth,\n\n [sliderItemsWidth, windowWidth]\n );\n\n const canMoveRight = useMemo(() => {\n const offsetRight = windowWidth - (sliderItemsWidth + offsetLeft);\n\n return offsetRight < MAX_OFFSET_RIGHT;\n }, [imageWidth, sliderIndex, sliderItemsWidth, windowWidth]);\n\n const canMoveLeft = useMemo(() => sliderIndex !== 0, [sliderIndex]);\n\n return (\n <DefaultSectionContainer>\n <SliderContainer ref={containerRef}>\n <SliderInnerContainer\n animate={{\n x: imageWidth * -sliderIndex,\n }}\n transition={{\n duration: 0.3,\n ease: 'easeInOut',\n }}\n imageCount={slice.images.length}\n >\n {slice.images.map((image, index) => (\n <ItemContainer key={image.id} ref={imageRef}>\n <Flex\n height=\"full\"\n width=\"full\"\n justifyContent=\"end\"\n flexDirection=\"column\"\n gap=\"2\"\n >\n <ImageContainer\n aspectRatio={getClosestRatio(\n image.img.img.data.attributes.width,\n image.img.img.data.attributes.height\n )}\n >\n <Image\n src={strapiMediaUrl(image.img.img, 'large')}\n alt={image.img.alt}\n fill\n style={{\n objectFit: image.img.objectFit || 'cover',\n cursor: isMobile ? 'unset' : 'pointer',\n }}\n onClick={() => {\n setSliderIndex(index);\n if (!isMobile) setIsOpen(true);\n }}\n />\n </ImageContainer>\n\n <Text lineClamp={3} height=\"72px\" fontSize=\"md\">\n {image.caption}\n </Text>\n </Flex>\n </ItemContainer>\n ))}\n </SliderInnerContainer>\n </SliderContainer>\n\n <Box\n display={['none', null, null, !!allowScroll ? 'flex' : 'none']}\n pointerEvents=\"none\"\n position=\"absolute\"\n top=\"calc(50% - var(--boemly-sizes-12))\"\n left=\"0\"\n width=\"full\"\n py=\"0\"\n px=\"32\"\n justifyContent=\"space-between\"\n >\n <Box>\n <AnimatePresence>\n {canMoveLeft && (\n <motion.div\n key=\"leftButton\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n >\n <IconButton\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex - 1)}\n aria-label=\"Move left\"\n pointerEvents=\"auto\"\n >\n <ArrowLeftIcon size={16} />\n </IconButton>\n </motion.div>\n )}\n </AnimatePresence>\n </Box>\n <Box>\n <AnimatePresence>\n {canMoveRight && (\n <motion.div\n key=\"rightButton\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n >\n <IconButton\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex + 1)}\n aria-label=\"Move right\"\n pointerEvents=\"auto\"\n >\n <ArrowRightIcon size={16} />\n </IconButton>\n </motion.div>\n )}\n </AnimatePresence>\n </Box>\n </Box>\n\n <FullScreenImage\n images={slice.images.map((image) => image.img)}\n currentIndex={sliderIndex}\n setCurrentIndex={setSliderIndex}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n />\n </DefaultSectionContainer>\n );\n};\n", "import { motion } from 'framer-motion';\nimport styled from '@emotion/styled';\nimport { BREAKPOINT_MD } from '../../constants/breakpoints';\nimport { Box } from 'boemly';\n\nexport const SliderContainer = styled(Box)`\n --mobile-image-width: calc(100vw - var(--boemly-spacing-24));\n --desktop-image-width: var(--boemly-sizes-md);\n\n width: var(--boemly-size-full);\n\n overflow-x: hidden;\n\n padding-left: max(\n var(--boemly-spacing-8),\n calc(50vw - var(--boemly-sizes-7xl) / 2 + var(--boemly-spacing-6))\n );\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n overflow-x: scroll;\n padding-left: max(\n var(--boemly-spacing-8),\n calc(50vw - var(--boemly-sizes-7xl) / 2 + var(--boemly-spacing-8))\n );\n }\n`;\n\ninterface SliderInnerContainerProps {\n imageCount: number;\n}\nexport const SliderInnerContainer = styled(\n motion.div\n)<SliderInnerContainerProps>`\n display: flex;\n gap: var(--boemly-spacing-6);\n\n width: fit-content;\n`;\n\nexport const ItemContainer = styled(Box)`\n width: var(--desktop-image-width);\n\n :last-of-type {\n margin-right: var(--boemly-spacing-8);\n }\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n width: var(--mobile-image-width);\n }\n`;\n\ninterface ImageContainerProps {\n aspectRatio: number;\n}\nexport const ImageContainer = styled(Box)<ImageContainerProps>`\n position: relative;\n\n max-height: var(--boemly-sizes-xl);\n height: calc(\n var(--desktop-image-width) /\n ${({ aspectRatio }: ImageContainerProps) => aspectRatio}\n );\n width: var(--desktop-image-width);\n\n border-radius: var(--boemly-radii-xl);\n\n & img {\n border-radius: var(--boemly-radii-xl);\n }\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n height: calc(\n var(--mobile-image-width) /\n ${({ aspectRatio }: ImageContainerProps) => aspectRatio}\n );\n width: var(--mobile-image-width);\n }\n`;\n", "const ALLOWED_RATIOS = [2 / 3, 1 / 1, 3 / 2, 2 / 1, 3 / 1, 4 / 1, 5 / 1]; // width / height\n\nexport const getClosestRatio = (width: number, height: number): number => {\n const ratio = width / height;\n\n let minDiff = Math.abs(ratio - ALLOWED_RATIOS[0]);\n let posMinDiff = 0;\n\n ALLOWED_RATIOS.forEach((allowedRatio, index) => {\n if (Math.abs(ratio - allowedRatio) < minDiff) {\n minDiff = Math.abs(ratio - allowedRatio);\n posMinDiff = index;\n }\n });\n\n return ALLOWED_RATIOS[posMinDiff];\n};\n", "import { FullWidthImageSlider } from './FullWidthImageSlider';\n\nexport default FullWidthImageSlider;\n", "import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n Grid,\n GridItem,\n SimpleGrid,\n Text,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\nexport interface SideBySideImagesProps {\n slice: {\n images: {\n id: number;\n caption: string;\n img: StrapiImage;\n }[];\n };\n}\nexport const SideBySideImages: React.FC<SideBySideImagesProps> = ({\n slice,\n}: SideBySideImagesProps) => (\n <DefaultSectionContainer>\n <Wrapper>\n <Grid templateColumns=\"repeat(12, 1fr)\" gap=\"4\">\n <GridItem colSpan={[12, null, null, 7]}>\n <SimpleGrid\n columns={[1, null, null, 2]}\n gap={['12', null, null, '6']}\n >\n {slice.images.map((image) => (\n <Box key={image.id}>\n <Box height=\"md\" position=\"relative\" borderRadius=\"xl\">\n <Image\n src={strapiMediaUrl(image.img.img, 'large')}\n alt={image.img.alt}\n fill\n style={{\n objectFit: image.img.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n <Text mt=\"3\" size=\"xsLowNormal\">\n {image.caption}\n </Text>\n </Box>\n ))}\n </SimpleGrid>\n </GridItem>\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n);\n", "import { SideBySideImages } from './SideBySideImages';\n\nexport default SideBySideImages;\n", "import React, { useContext } from 'react';\nimport {\n Box,\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Gradient,\n Spacer,\n Wrapper,\n} from 'boemly';\nimport StrapiButtonWithVariant from '../../models/strapi/StrapiButtonWithVariant';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport Image from 'next/image';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport { CDN_URI } from '../../constants/api';\nimport { IntlContext } from '../../components/ContextProvider';\n\ntype Variant = 'gray' | 'green' | 'white';\n\nenum CtaCardType {\n Left = 'left',\n CenterWithoutImage = 'centerWithoutImage',\n CenterWithImage = 'centerWithImage',\n Right = 'right',\n}\n\nexport interface CtaProps {\n slice: {\n tagline?: string;\n title?: string;\n subTitle?: string;\n variant: Variant;\n ctaCards: CtaCard[];\n };\n}\n\nexport interface CtaCard {\n id: number;\n tagline?: string;\n title: string;\n subTitle?: string;\n image?: StrapiImage;\n buttons?: StrapiButtonWithVariant[];\n variant: Variant;\n backgroundShape: boolean;\n textAlign: 'left' | 'right' | 'center';\n}\n\nconst STATES: Record<CtaCardType, Record<string, any>> = {\n left: {\n textAlign: 'left',\n paddingTagline: '0',\n paddingTitle: '0',\n justifyContent: 'space-between',\n buttonJustifyContent: 'start',\n textMarginLeft: ['0', null, null, null, '14'],\n textMarginRight: '0',\n },\n centerWithoutImage: {\n textAlign: 'center',\n paddingTagline: '28',\n paddingTitle: '20',\n justifyContent: 'center',\n buttonJustifyContent: 'center',\n textMarginLeft: '0',\n textMarginRight: '0',\n },\n centerWithImage: {\n textAlign: 'center',\n paddingTagline: '28',\n paddingTitle: '20',\n justifyContent: 'center',\n buttonJustifyContent: 'center',\n textMarginLeft: '0',\n textMarginRight: '0',\n },\n right: {\n textAlign: 'left',\n paddingTagline: '0',\n paddingTitle: '0',\n justifyContent: 'start',\n buttonJustifyContent: 'start',\n textMarginLeft: '0',\n textMarginRight: ['0', null, null, null, '10'],\n },\n};\n\nconst VARIANTS: Record<Variant, Record<string, Record<CtaCardType, string>>> = {\n gray: {\n backgroundColor: {\n left: 'primary.50',\n centerWithoutImage: 'primary.50',\n centerWithImage: 'primary.50',\n right: 'primary.50',\n },\n taglineColor: {\n left: 'primary.500',\n centerWithoutImage: 'primary.500',\n centerWithImage: 'white',\n right: 'primary.500',\n },\n titleColor: {\n left: 'black',\n centerWithoutImage: 'black',\n centerWithImage: 'white',\n right: 'black',\n },\n subTitleColor: {\n left: 'black',\n centerWithoutImage: 'black',\n centerWithImage: 'white',\n right: 'black',\n },\n },\n green: {\n backgroundColor: {\n left: 'primary.800',\n centerWithoutImage: 'primary.800',\n centerWithImage: 'primary.800',\n right: 'primary.800',\n },\n taglineColor: {\n left: 'white',\n centerWithoutImage: 'white',\n centerWithImage: 'white',\n right: 'white',\n },\n titleColor: {\n left: 'white',\n centerWithoutImage: 'white',\n centerWithImage: 'white',\n right: 'white',\n },\n subTitleColor: {\n left: 'white',\n centerWithoutImage: 'white',\n centerWithImage: 'white',\n right: 'white',\n },\n },\n white: {\n backgroundColor: {\n left: 'white',\n centerWithoutImage: 'white',\n centerWithImage: 'primary.800',\n right: 'white',\n },\n taglineColor: {\n left: 'primary.500',\n centerWithoutImage: 'primary.500',\n centerWithImage: 'white',\n right: 'primary.500',\n },\n titleColor: {\n left: 'black',\n centerWithoutImage: 'black',\n centerWithImage: 'white',\n right: 'black',\n },\n subTitleColor: {\n left: 'black',\n centerWithoutImage: 'black',\n centerWithImage: 'white',\n right: 'black',\n },\n },\n};\n\nconst getTypeOfCard = (ctaCard: CtaCard): CtaCardType => {\n if (ctaCard.textAlign === 'center') {\n if (ctaCard.image) {\n return CtaCardType.CenterWithImage;\n }\n return CtaCardType.CenterWithoutImage;\n }\n if (ctaCard.textAlign === 'left') {\n return CtaCardType.Left;\n }\n return CtaCardType.Right;\n};\n\nexport const Cta: React.FC<CtaProps> = ({ slice }: CtaProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <DefaultSectionContainer\n backgroundColor={VARIANTS[slice.variant].backgroundColor.left}\n title={slice.title}\n >\n <Wrapper>\n {slice.title ? (\n <>\n <Flex alignItems=\"center\" flexDirection=\"column\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n taglineProps={{\n color: VARIANTS[slice.variant].taglineColor.left,\n textAlign: 'center',\n maxWidth: '3xl',\n }}\n title={slice.title}\n titleProps={{\n color: VARIANTS[slice.variant].titleColor.left,\n textAlign: 'center',\n width: 'full',\n maxWidth: '3xl',\n }}\n text={slice.subTitle}\n textProps={{\n color: VARIANTS[slice.variant].subTitleColor.left,\n textAlign: 'center',\n maxWidth: '3xl',\n }}\n />\n </Flex>\n <Spacer height={['16', null, null, null, '20']} />\n </>\n ) : (\n <></>\n )}\n <Flex gap=\"4\" flexDirection=\"column\">\n {slice.ctaCards.map((ctaCard) => {\n const ctaCardType = getTypeOfCard(ctaCard);\n\n return (\n <Container\n backgroundColor={\n VARIANTS[ctaCard.variant].backgroundColor[ctaCardType]\n }\n key={ctaCard.id}\n position=\"relative\"\n elevation=\"none\"\n >\n {ctaCard.image &&\n ctaCardType === CtaCardType.CenterWithImage ? (\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"0\"\n width=\"full\"\n height=\"full\"\n borderRadius=\"xl\"\n overflow=\"hidden\"\n >\n <Image\n src={strapiMediaUrl(ctaCard.image.img, 'large')}\n alt={ctaCard.image.alt}\n fill\n style={{\n objectFit: ctaCard.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n <Gradient />\n </Box>\n ) : (\n <></>\n )}\n {ctaCard.backgroundShape ? (\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"0\"\n width=\"full\"\n height=\"full\"\n >\n <Image\n src={\n ctaCardType === CtaCardType.CenterWithImage ||\n ctaCard.variant === 'green'\n ? `${CDN_URI}/assets/v3/strapi-slices/shapes-dark.svg`\n : `${CDN_URI}/assets/v3/strapi-slices/shapes-light.svg`\n }\n alt={formatMessage({\n id: `sections.cta.backgroundShapes${\n ctaCardType === CtaCardType.CenterWithImage ||\n ctaCard.variant === 'green'\n ? 'Dark'\n : 'Light'\n }`,\n })}\n fill\n style={{\n objectFit: 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n\n <Flex\n flexDir={['column', null, null, null, 'row']}\n flexGrow=\"1\"\n gap={['8', null, null, null, '16']}\n justifyContent={STATES[ctaCardType].justifyContent}\n >\n {ctaCard.image && ctaCardType === CtaCardType.Right ? (\n <Box\n position=\"relative\"\n height={['3xs', null, null, null, 'auto']}\n minWidth={[null, null, null, null, '50%']}\n >\n <Image\n src={strapiMediaUrl(ctaCard.image.img, 'xLarge')}\n alt={ctaCard.image.alt}\n fill\n style={{\n objectFit: ctaCard.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n\n <Box\n zIndex=\"base\"\n marginLeft={STATES[ctaCardType].textMarginLeft}\n marginRight={STATES[ctaCardType].textMarginRight}\n maxWidth=\"3xl\"\n >\n <Spacer height={['0', null, null, null, '20']} />\n\n <DefaultSectionHeader\n tagline={ctaCard.tagline}\n taglineProps={{\n textAlign: STATES[ctaCardType].textAlign,\n color:\n VARIANTS[ctaCard.variant].taglineColor[ctaCardType],\n paddingX: [\n '0',\n null,\n null,\n null,\n STATES[ctaCardType].paddingTagline,\n ],\n }}\n title={ctaCard.title}\n titleProps={{\n fontFamily: 'heading',\n fontSize: '4xl',\n fontWeight: '600',\n lineHeight: '9',\n textAlign: STATES[ctaCardType].textAlign,\n paddingX: [\n '0',\n null,\n null,\n null,\n STATES[ctaCardType].paddingTitle,\n ],\n color:\n VARIANTS[ctaCard.variant].titleColor[ctaCardType],\n }}\n text={ctaCard.subTitle}\n textProps={{\n textAlign: STATES[ctaCardType].textAlign,\n color:\n VARIANTS[ctaCard.variant].subTitleColor[ctaCardType],\n }}\n />\n {ctaCard.buttons && ctaCard.buttons.length > 0 ? (\n <>\n <Spacer height=\"8\" />\n <Flex\n gap=\"2\"\n justifyContent={\n STATES[ctaCardType].buttonJustifyContent\n }\n >\n {ctaCard.buttons &&\n ctaCard.buttons.map((button) => (\n <StrapiLinkButton\n key={button.button.id}\n link={button.button}\n size=\"md\"\n variant={button.variant}\n component=\"Cta\"\n />\n ))}\n </Flex>\n </>\n ) : (\n <></>\n )}\n <Spacer height={['1', null, null, null, '20']} />\n </Box>\n {ctaCard.image && ctaCardType === CtaCardType.Left ? (\n <Box\n position=\"relative\"\n height={['3xs', null, null, null, 'auto']}\n minWidth={[null, null, null, null, '50%']}\n >\n <Image\n src={strapiMediaUrl(ctaCard.image.img, 'xLarge')}\n alt={ctaCard.image.alt}\n fill\n style={{\n objectFit: ctaCard.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n </Flex>\n </Container>\n );\n })}\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { Cta } from './Cta';\n\nexport default Cta;\n", "import React from 'react';\nimport { DefaultSectionContainer, Wrapper } from 'boemly';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiLink from '../../models/strapi/StrapiLink';\n\nexport interface CtaOnlyProps {\n slice: {\n button: StrapiLink;\n };\n}\n\nexport const CtaOnly: React.FC<CtaOnlyProps> = ({ slice }: CtaOnlyProps) => (\n <DefaultSectionContainer>\n <Wrapper>\n <StrapiLinkButton size=\"md\" link={slice.button} component=\"CtaOnly\" />\n </Wrapper>\n </DefaultSectionContainer>\n);\n", "import { CtaOnly } from './CtaOnly';\n\nexport default CtaOnly;\n", "import { useContext, useState } from 'react';\nimport {\n DefaultSectionContainer,\n Separator,\n Flex,\n GridItem,\n Heading,\n IconButton,\n SimpleGrid,\n Text,\n Wrapper,\n Box,\n} from 'boemly';\nimport { CheckIcon, LinkIcon } from '@phosphor-icons/react';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport StrapiGlossaryItem from '../../models/strapi/StrapiGlossaryItem';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface GlossaryProps {\n slice: {\n glossary_items: IStrapiData<StrapiGlossaryItem>[];\n };\n}\n\nexport const Glossary: React.FC<GlossaryProps> = ({ slice }: GlossaryProps) => {\n const { formatMessage } = useContext(IntlContext);\n const grouped: Record<string, StrapiGlossaryItem[]> = {};\n const [copiedItem, setCopiedItem] = useState<string>();\n\n slice.glossary_items\n .sort((a, b) => a.attributes.title.localeCompare(b.attributes.title))\n .forEach((curr) => {\n const index = curr.attributes.title.at(0)?.toUpperCase() || 'A';\n if (!grouped[index]) {\n grouped[index] = [];\n }\n grouped[index].push(curr.attributes);\n }, {});\n\n const handleAnchorClick = async (slug: string) => {\n if (\n typeof window !== 'undefined' &&\n window.location &&\n navigator.clipboard\n ) {\n const currentUrl = window.location.href.split('#')[0];\n await navigator.clipboard.writeText(`${currentUrl}#${slug}`);\n setCopiedItem(slug);\n\n setTimeout(() => {\n setCopiedItem(undefined);\n }, 1200);\n }\n };\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid>\n {Object.entries(grouped).map(([letter, items], index) => (\n <GridItem maxW=\"xl\" placeSelf=\"center\" key={letter}>\n <Heading size=\"3xl\" mb=\"8\">\n {letter}\n </Heading>\n\n <SimpleGrid gap=\"6\">\n {items.map((item) => (\n <GridItem key={item.slug}>\n <Flex mb=\"2\" gap=\"1.5\" alignItems=\"center\">\n <Heading\n wordBreak=\"break-word\"\n size=\"xl\"\n id={item.slug}\n scrollMarginTop=\"calc(var(--header-height) + var(--boemly-sizes-10))\"\n >\n {item.title}\n </Heading>\n <IconButton\n variant=\"ghost\"\n size=\"xs\"\n title={formatMessage({\n id: 'sections.glossary.copyButtonLabel',\n })}\n aria-label={formatMessage({\n id: 'sections.glossary.copyButtonLabel',\n })}\n onClick={async () => handleAnchorClick(item.slug)}\n >\n {copiedItem === item.slug ? (\n <CheckIcon size=\"16\" data-testid=\"check-icon\" />\n ) : (\n <LinkIcon size=\"16\" />\n )}\n </IconButton>\n </Flex>\n <Text color=\"black\" wordBreak=\"break-word\">\n {item.text}\n </Text>\n </GridItem>\n ))}\n </SimpleGrid>\n\n {index !== Object.keys(grouped).length - 1 && (\n <Flex justifyContent=\"center\" mt=\"10\" mb=\"10\">\n <Box maxW=\"xl\" width=\"full\">\n <Separator />\n </Box>\n </Flex>\n )}\n </GridItem>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { Glossary } from './Glossary';\n\nexport default Glossary;\n", "import React, { useContext, useCallback } from 'react';\nimport {\n Badge,\n BoemlyFormControl,\n Box,\n Button,\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Separator,\n Flex,\n LabelNumberPair,\n RichText,\n SimpleGrid,\n Spacer,\n useToken,\n Wrapper,\n Text,\n} from 'boemly';\nimport { Field, FieldProps, Form, Formik, FormikProps } from 'formik';\nimport { FPM_API_URI } from '../../constants/api';\nimport CheckoutForm from '../../models/forms/CheckoutForm';\nimport {\n MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY,\n MINIMUM_CONTRIBUTION_VALUE_IN_MONEY,\n} from '../../constants/domain';\nimport { IntlContext } from '../../components/ContextProvider';\nimport { useRouter } from 'next/router';\n\nexport interface ShopCheckoutProps {\n slice: {\n tagline?: string;\n title: string;\n text?: string;\n badge?: string;\n batchId: string;\n pricePerKg: number;\n couponId?: string;\n initialContributionValue: number;\n checkoutText: string;\n currency: 'EUR' | 'CHF';\n taxInPercent?: number;\n };\n}\n\nexport const ShopCheckout = ({\n slice,\n}: ShopCheckoutProps): React.JSX.Element => {\n const [primary50] = useToken('colors', ['primary.50']);\n const { formatMessage, formatNumber, locale } = useContext(IntlContext);\n const { push } = useRouter();\n\n const validateForm = useCallback(\n (values: CheckoutForm) => {\n const errors: Partial<{ contributionValue: string }> = {};\n\n if (!values.contributionValue) {\n errors.contributionValue = formatMessage({\n id: 'sections.shopCheckout.contributionValue.validation.empty',\n });\n } else if (\n values.contributionValue < MINIMUM_CONTRIBUTION_VALUE_IN_MONEY\n ) {\n errors.contributionValue = formatMessage({\n id: `sections.shopCheckout.contributionValue.validation.tooLow.${slice.currency}`,\n });\n } else if (\n values.contributionValue > MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY\n ) {\n errors.contributionValue = formatMessage({\n id: 'sections.shopCheckout.contributionValue.validation.tooHigh',\n });\n }\n\n return errors;\n },\n [locale]\n );\n\n const onSubmit = ({ contributionValue }: CheckoutForm) => {\n const checkoutURL = new URL(`${FPM_API_URI}/v1/webhooks/shop/checkout`);\n const currentURL = new URL(window.location.href);\n\n checkoutURL.searchParams.append('batchId', slice.batchId);\n\n checkoutURL.searchParams.append(\n 'quantity',\n Math.floor(contributionValue / slice.pricePerKg).toString()\n );\n\n checkoutURL.searchParams.append('cancelPath', currentURL.pathname);\n\n if (slice.couponId)\n checkoutURL.searchParams.append('couponId', slice.couponId);\n\n push(checkoutURL.toString());\n };\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n <Wrapper>\n <Flex\n flexDir={['column', null, null, null, 'row']}\n justifyContent=\"space-between\"\n alignItems={['left', null, null, null, 'center']}\n >\n <Box marginRight={['0', null, null, null, '36']} flexShrink={2}>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n </Box>\n <Container maxWidth=\"md\" padding=\"lg\" shadow=\"lg\">\n {slice.badge ? (\n <>\n <Badge\n colorPalette=\"green\"\n textTransform=\"none\"\n whiteSpace=\"unset\"\n >\n {slice.badge}\n </Badge>\n <Spacer height=\"3\" />\n </>\n ) : (\n <></>\n )}\n\n <RichText\n content={slice.checkoutText}\n textProps={{ color: 'gray.500' }}\n />\n\n <Spacer height=\"6\" />\n <Separator />\n <Spacer height=\"6\" />\n\n <LabelNumberPair\n label={formatMessage({ id: 'sections.shopCheckout.intro.price' })}\n number={`${formatNumber(slice.pricePerKg * 100, {\n style: 'currency',\n currency: slice.currency,\n })}/${formatNumber(100, {\n style: 'unit',\n unit: 'kilogram',\n })} CO\u2082`}\n caption={formatMessage({\n id: 'sections.shopCheckout.summary.price.taxNotIncluded',\n })}\n />\n\n <Spacer height=\"6\" />\n <Separator />\n <Spacer height=\"6\" />\n\n <Formik\n initialValues={{\n contributionValue: slice.initialContributionValue,\n }}\n validate={validateForm}\n onSubmit={onSubmit}\n >\n {({\n errors,\n touched,\n handleSubmit,\n values,\n }: FormikProps<CheckoutForm>) => {\n const summaryPrice =\n Math.floor(values.contributionValue / slice.pricePerKg) *\n slice.pricePerKg;\n\n return (\n <Form onSubmit={handleSubmit}>\n <Box width=\"full\">\n <Field name=\"contributionValue\">\n {({ field }: FieldProps) => (\n <BoemlyFormControl\n id=\"contributionValue\"\n size=\"md\"\n inputProps={{ type: 'number', ...field }}\n label={formatMessage({\n id: `sections.shopCheckout.contributionValue.label.${slice.currency}`,\n })}\n rightAddons={[\n <Text key=\"1\">\n {formatMessage({\n id: `sections.shopCheckout.contributionValue.unit.${slice.currency}`,\n })}\n </Text>,\n ]}\n isInvalid={\n !!errors.contributionValue &&\n touched.contributionValue\n }\n errorMessage={errors.contributionValue}\n />\n )}\n </Field>\n </Box>\n\n <Spacer height=\"6\" />\n\n <SimpleGrid columns={2} gap=\"4\">\n <LabelNumberPair\n label={formatMessage({\n id: 'sections.shopCheckout.summary.kg',\n })}\n number={`${formatNumber(\n Math.floor(\n values.contributionValue / slice.pricePerKg\n ),\n {\n style: 'unit',\n unit: 'kilogram',\n maximumFractionDigits: 0,\n }\n )} CO\u2082`}\n />\n <LabelNumberPair\n label={formatMessage({\n id: 'sections.shopCheckout.summary.price',\n })}\n number={formatNumber(summaryPrice, {\n style: 'currency',\n currency: slice.currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}\n caption={\n slice.taxInPercent &&\n slice.taxInPercent > 0 &&\n summaryPrice > 0\n ? formatMessage(\n {\n id: 'sections.shopCheckout.summary.price.taxIncluded',\n },\n {\n number: formatNumber(\n summaryPrice +\n summaryPrice * (slice.taxInPercent / 100),\n {\n style: 'currency',\n currency: slice.currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }\n ),\n }\n )\n : ''\n }\n />\n </SimpleGrid>\n\n <Spacer height=\"6\" />\n\n <Button type=\"submit\" width=\"full\">\n {formatMessage({ id: 'sections.shopCheckout.submit' })}\n </Button>\n </Form>\n );\n }}\n </Formik>\n </Container>\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "export const MINIMUM_CONTRIBUTION_VALUE_IN_MONEY = 10;\n\nexport const MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY = 10_000;\n", "import { ShopCheckout } from './ShopCheckout';\n\nexport default ShopCheckout;\n", "import React from 'react';\nimport {\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n Spacer,\n Text,\n} from 'boemly';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiLink from '../../models/strapi/StrapiLink';\n\nexport interface FactsProps {\n slice: {\n tagline?: string;\n title?: string;\n subTitle?: string;\n button?: StrapiLink;\n variant: 'gray' | 'green' | 'white';\n facts: { key: string; value: string }[];\n };\n}\n\nconst VARIANTS = {\n gray: {\n backgroundColor: 'primary.50',\n tagLineColor: 'primary.500',\n titleColor: 'black',\n subTitleColor: 'black',\n factKeyColor: 'gray.700',\n factValueColor: 'gray.700',\n },\n green: {\n backgroundColor: 'primary.800',\n tagLineColor: 'white',\n titleColor: 'white',\n subTitleColor: 'white',\n factKeyColor: 'whiteAlpha.900',\n factValueColor: 'white',\n },\n white: {\n backgroundColor: 'white',\n tagLineColor: 'primary.500',\n titleColor: 'black',\n subTitleColor: 'black',\n factKeyColor: 'gray.700',\n factValueColor: 'gray.700',\n },\n};\n\nexport const Facts: React.FC<FactsProps> = ({ slice }: FactsProps) => (\n <DefaultSectionContainer\n backgroundColor={VARIANTS[slice.variant].backgroundColor}\n flexDir=\"column\"\n textAlign=\"center\"\n justifyContent=\"space-between\"\n paddingX={['6', null, '8']}\n title={slice.title}\n >\n <>\n {slice.title && (\n <>\n <DefaultSectionHeader\n tagline={slice.tagline}\n text={slice.subTitle}\n title={slice.title}\n taglineProps={{\n color: VARIANTS[slice.variant].tagLineColor,\n textAlign: 'center',\n }}\n titleProps={{\n color: VARIANTS[slice.variant].titleColor,\n textAlign: 'center',\n maxW: '6xl',\n marginX: 'auto',\n }}\n textProps={{\n color: VARIANTS[slice.variant].subTitleColor,\n textAlign: 'center',\n maxW: '3xl',\n marginX: 'auto',\n }}\n />\n <Spacer height={['0', null, '12']} />\n </>\n )}\n <Flex\n justifyContent={slice.facts.length < 3 ? 'center' : 'flex-start'}\n alignItems=\"center\"\n flexWrap=\"wrap\"\n mx={[null, null, null, '22', '28']}\n flexDir={['column', null, null, 'row']}\n >\n {slice.facts.map((fact) => (\n <Flex\n key={fact.key}\n flexDir=\"column\"\n width={['100%', null, null, 'calc(100% / 3)']}\n mt={['8', '8', '8', slice.facts.length > 3 ? '16' : '0']}\n >\n <Heading\n fontSize=\"6xl\"\n fontFamily=\"display\"\n lineHeight=\"10\"\n fontWeight=\"700\"\n color={VARIANTS[slice.variant].factValueColor}\n mb=\"2\"\n as=\"p\"\n >\n {fact.value}\n </Heading>\n\n <Text\n size=\"mdLowNormal\"\n color={VARIANTS[slice.variant].factKeyColor}\n >\n {fact.key}\n </Text>\n </Flex>\n ))}\n </Flex>\n\n {slice.button && (\n <>\n <Spacer height={['0', null, '20']} />\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n variant={slice.variant === 'green' ? 'outline' : 'solid'}\n component=\"Facts\"\n />\n </>\n )}\n </>\n </DefaultSectionContainer>\n);\n", "import { Facts } from './Facts';\n\nexport default Facts;\n", "import React, { useContext, useMemo } from 'react';\nimport {\n Text,\n Heading,\n Spacer,\n DatePersonPair,\n DefaultSectionHeader,\n DefaultSectionContainer,\n Wrapper,\n SimpleGrid,\n Box,\n Flex,\n useMediaQuery,\n useToken,\n} from 'boemly';\nimport Image from 'next/image';\nimport Link from 'next/link';\nimport { CaretRightIcon } from '@phosphor-icons/react';\nimport StrapiBlogPost from '../../models/strapi/StrapiBlogPost';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiCategory from '../../models/strapi/StrapiCategory';\nimport IStrapi from '../../models/strapi/IStrapi';\nimport { BREAKPOINT_LG_QUERY } from '../../constants/breakpoints';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { BlogItemContainer, ImageContainer } from '../Blog/styles';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface BlogCardsProps {\n slice: {\n tagline: string;\n title: string;\n subTitle: string;\n button?: StrapiLink;\n variant: 'white' | 'gray';\n blogPostCategory: IStrapi<IStrapiData<StrapiCategory> | null>;\n };\n blogPosts: IStrapiData<StrapiBlogPost>[];\n}\n\nconst VARIANTS = {\n white: {\n backgroundColor: 'white',\n },\n gray: {\n backgroundColor: 'primary.50',\n },\n};\n\nconst sortByCreatedAt = (\n a: IStrapiData<StrapiBlogPost>,\n b: IStrapiData<StrapiBlogPost>\n): number =>\n new Date(b.attributes.createdAt).getTime() -\n new Date(a.attributes.createdAt).getTime();\n\nexport const BlogCards: React.FC<BlogCardsProps> = ({\n slice,\n blogPosts,\n}: BlogCardsProps) => {\n const { formatDate } = useContext(IntlContext);\n const [mobile] = useMediaQuery([BREAKPOINT_LG_QUERY]);\n const [gray700] = useToken('colors', ['gray.700']);\n\n const sortedBlogPosts = useMemo(\n () => blogPosts.sort(sortByCreatedAt),\n [blogPosts]\n );\n\n const blogPostsToDisplay = useMemo(\n () =>\n slice.blogPostCategory?.data?.attributes.name\n ? sortedBlogPosts\n .filter(\n (blogPost) =>\n blogPost.attributes.category.data?.attributes.name ===\n slice.blogPostCategory?.data?.attributes.name\n )\n .slice(0, 3)\n : sortedBlogPosts.slice(0, 3),\n [sortedBlogPosts, slice]\n );\n\n return (\n <DefaultSectionContainer\n backgroundColor={VARIANTS[slice.variant].backgroundColor}\n title={slice.title}\n >\n <Wrapper>\n {mobile || !slice.button ? (\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n titleProps={{ maxW: '2xl' }}\n textProps={{ maxW: '2xl' }}\n />\n ) : (\n <Flex justifyContent=\"space-between\" alignItems=\"center\" gap=\"60\">\n <Box>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n />\n </Box>\n <Box minWidth=\"40\">\n <StrapiLinkButton\n link={slice.button}\n size=\"lg\"\n variant=\"outline\"\n rightIcon={<CaretRightIcon color={gray700} />}\n component=\"BlogCards\"\n />\n </Box>\n </Flex>\n )}\n <Spacer height=\"14\" />\n <SimpleGrid\n columns={[1, null, null, 3]}\n columnGap={4}\n rowGap={24}\n flexShrink=\"0\"\n >\n {blogPostsToDisplay.map((blogPost) => (\n <BlogItemContainer\n as={Link}\n href={`/blog/${blogPost.attributes.slug}`}\n data-testid=\"blog-item\"\n key={blogPost.id}\n >\n <ImageContainer>\n <Image\n src={strapiMediaUrl(blogPost.attributes.img.img, 'medium')}\n alt={blogPost.attributes.img.alt}\n fill\n style={{\n objectFit: blogPost.attributes.img.objectFit || 'cover',\n }}\n />\n </ImageContainer>\n <Box px=\"2\" py=\"8\">\n {blogPost.attributes.category && (\n <Text size=\"smMonoUppercase\" color=\"primary.800\" mb=\"2\">\n {blogPost.attributes.category.data?.attributes.name}\n </Text>\n )}\n <Heading size=\"lg\">{blogPost.attributes.title}</Heading>\n {blogPost.attributes.teaser && (\n <Text size=\"mdRegularNormal\" mt=\"2\">\n {blogPost.attributes.teaser}\n </Text>\n )}\n\n <Spacer height=\"4\" />\n\n <DatePersonPair\n date={formatDate(blogPost.attributes.createdAt)}\n person={\n blogPost.attributes.author.data\n ? {\n name: blogPost.attributes.author.data.attributes.name,\n image: (\n <Image\n src={strapiMediaUrl(\n blogPost.attributes.author.data.attributes.img\n .img,\n 'thumbnail'\n )}\n alt={\n blogPost.attributes.author.data.attributes.img\n .alt\n }\n fill\n style={{\n objectFit:\n blogPost.attributes.author.data.attributes.img\n .objectFit || 'cover',\n }}\n />\n ),\n }\n : undefined\n }\n />\n </Box>\n </BlogItemContainer>\n ))}\n </SimpleGrid>\n <>\n {mobile && slice.button && (\n <>\n <Box minWidth=\"40\" mt=\"6\">\n <StrapiLinkButton\n link={slice.button}\n size=\"lg\"\n variant=\"outline\"\n rightIcon={<CaretRightIcon color={gray700} />}\n component=\"BlogCards\"\n />\n </Box>\n </>\n )}\n </>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { BlogCards } from './BlogCards';\n\nexport default BlogCards;\n", "import React, { useEffect, useState } from 'react';\nimport { DefaultSectionContainer, Flex, Wrapper } from 'boemly';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport SmallCheckout from '../../components/portfolio/SmallCheckout';\nimport ProjectInfo from '../../components/portfolio/ProjectInfo';\nimport DocumentsDownloadList from '../../components/portfolio/DocumentsDownloadList';\nimport Contact from '../../components/portfolio/Contact';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport getFpmProjectById from '../../integrations/strapi/getFpmProjectById';\n\nexport interface ProjectFactsProps {\n project?: PortfolioProject;\n slice: {\n projectId: string;\n\n batchId?: string;\n currency?: 'EUR' | 'CHF';\n pricePerKg?: number;\n taxInPercent?: number;\n initialContributionValue?: number;\n checkoutText?: string;\n\n customTitle?: string;\n customSubtitle?: string;\n customButton?: StrapiLink;\n documentUrls?: StrapiLink[];\n\n areaSubtitle?: string;\n locationSubtitle?: string;\n startSubtitle?: string;\n timeSpanSubtitle?: string;\n projectTypeSubtitle?: string;\n projectDeveloperSubtitle?: string;\n verificationStandardSubtitle?: string;\n averageSellableAmountPerYearSubtitle?: string;\n riskBufferSubtitle?: string;\n buyCreditsSubtitle?: string;\n\n contactTitle?: string;\n contactText?: string;\n contactButton?: StrapiLink;\n contactAvatar?: StrapiImage;\n };\n}\n\nexport const ProjectFacts: React.FC<ProjectFactsProps> = ({\n slice,\n project,\n}: ProjectFactsProps) => {\n const [enhancedProject, setEnhancedProject] = useState<\n PortfolioProject | undefined\n >(project);\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n const fetchCompleteProjectData = async () => {\n if (project && project.id) {\n setIsLoading(true);\n try {\n const completeFpmProject = await getFpmProjectById(project.id);\n\n // Merge the complete FPM data with existing project data (preserving Strapi fields like slug, portfolioHost, thumbnail)\n const mergedProject: PortfolioProject = {\n ...completeFpmProject,\n slug: project.slug,\n portfolioHost: project.portfolioHost,\n thumbnail: project.thumbnail,\n };\n\n setEnhancedProject(mergedProject);\n } catch (error) {\n console.error('Error fetching complete project data:', error);\n // Fallback to original project data if fetch fails\n setEnhancedProject(project);\n } finally {\n setIsLoading(false);\n }\n }\n };\n\n fetchCompleteProjectData();\n }, [project]);\n\n if (!enhancedProject) {\n return (\n <>Invalid configuration, check if a project this id exists in the FPM</>\n );\n }\n\n if (isLoading) {\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <div>Loading project data...</div>\n </Wrapper>\n </DefaultSectionContainer>\n );\n }\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <Flex flexDir={['column', null, null, 'row']} gap=\"4\" width=\"full\">\n <ProjectInfo project={enhancedProject} subtitles={slice} />\n <Flex flexDir=\"column\" gap=\"4\" width=\"full\">\n {slice.documentUrls && slice.documentUrls.length > 0 && (\n <DocumentsDownloadList documentUrls={slice.documentUrls} />\n )}\n {slice.batchId &&\n slice.pricePerKg &&\n slice.currency &&\n slice.initialContributionValue ? (\n <SmallCheckout\n batchId={slice.batchId}\n checkoutText={slice.checkoutText}\n currency={slice.currency}\n initialContributionValue={slice.initialContributionValue}\n pricePerKg={slice.pricePerKg}\n title={slice.customTitle}\n subtitle={slice.customSubtitle}\n button={slice.customButton}\n taxInPercent={slice.taxInPercent}\n />\n ) : (\n (slice.contactTitle ||\n slice.contactText ||\n slice.contactButton ||\n slice.contactAvatar) && (\n <Contact\n title={slice.contactTitle}\n text={slice.contactText}\n button={slice.contactButton}\n avatar={slice.contactAvatar}\n />\n )\n )}\n </Flex>\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import React, { useCallback, useContext } from 'react';\nimport {\n BoemlyFormControl,\n Box,\n Button,\n Separator,\n Flex,\n Spacer,\n Text,\n} from 'boemly';\nimport {\n Field,\n FieldProps,\n Form,\n Formik,\n FormikErrors,\n FormikProps,\n} from 'formik';\nimport { useRouter } from 'next/router';\nimport Image from 'next/image';\nimport { StrapiLink } from '../../..';\nimport { IntlContext } from '../../ContextProvider';\nimport {\n MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY,\n MINIMUM_CONTRIBUTION_VALUE_IN_MONEY,\n} from '../../../constants/domain';\nimport { CDN_URI, FPM_API_URI } from '../../../constants/api';\nimport StrapiLinkButton from '../../StrapiLinkButton';\nimport SmallCheckoutForm from '../../../models/forms/SmallCheckoutForm';\n\nconst calculateTaxIncludedValue = (\n values: SmallCheckoutForm,\n taxInPercent: number\n) => {\n const value = parseInt(values.contributionValueCurrency);\n\n if (isNaN(value)) return 0;\n\n return value + value * (taxInPercent / 100);\n};\n\nexport interface SmallCheckoutProps {\n batchId: string;\n pricePerKg: number;\n initialContributionValue: number;\n taxInPercent?: number;\n checkoutText?: string;\n currency: 'EUR' | 'CHF';\n\n title?: string;\n subtitle?: string;\n button?: StrapiLink;\n}\n\nconst SmallCheckout = ({\n pricePerKg,\n currency,\n batchId,\n initialContributionValue,\n taxInPercent,\n checkoutText,\n title,\n subtitle,\n button,\n}: SmallCheckoutProps) => {\n const { formatNumber, formatMessage, locale } = useContext(IntlContext);\n const { push } = useRouter();\n\n const validateForm = useCallback(\n (values: SmallCheckoutForm) => {\n const errors: FormikErrors<SmallCheckoutForm> = {};\n const value = parseInt(values.contributionValueCurrency);\n if (!values.contributionValueCurrency || isNaN(value)) {\n errors.contributionValueCurrency = formatMessage({\n id: 'portfolio.smallCheckout.contributionValueCurrency.validation.empty',\n });\n } else if (value < MINIMUM_CONTRIBUTION_VALUE_IN_MONEY) {\n errors.contributionValueCurrency = formatMessage({\n id: `portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.${currency}`,\n });\n } else if (value > MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY) {\n errors.contributionValueCurrency = formatMessage({\n id: 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh',\n });\n }\n\n return errors;\n },\n [currency, locale]\n );\n\n const onSubmit = async ({ contributionValueCurrency }: SmallCheckoutForm) => {\n const checkoutURL = new URL(`${FPM_API_URI}/v1/webhooks/shop/checkout`);\n const currentURL = new URL(window.location.href);\n\n checkoutURL.searchParams.append('batchId', batchId);\n\n checkoutURL.searchParams.append(\n 'quantity',\n Math.floor(parseInt(contributionValueCurrency) / pricePerKg).toString()\n );\n\n checkoutURL.searchParams.append('cancelPath', currentURL.pathname);\n\n push(checkoutURL.toString());\n };\n\n return (\n <Flex\n width=\"full\"\n height=\"full\"\n borderRadius=\"xl\"\n background=\"primary.100\"\n padding=\"6\"\n direction=\"column\"\n >\n <Flex gap=\"2\" alignItems=\"end\" mb=\"6\">\n <Text color=\"black\" lineHeight=\"0\">\n {formatMessage(\n { id: 'unit.formatter.tonsCo2' },\n {\n number: (\n <Text as=\"span\" size=\"lgLowBold\" color=\"black\">\n {formatNumber(pricePerKg * 1000, {\n style: 'currency',\n currency,\n maximumFractionDigits: 0,\n })}\n </Text>\n ),\n }\n )}\n </Text>\n <Text size=\"smLowNormal\">\n {formatMessage({\n id: 'portfolio.smallCheckout.price.taxNotIncluded',\n })}\n </Text>\n </Flex>\n\n <Formik\n initialValues={{\n contributionValueCurrency: initialContributionValue.toString(),\n contributionValueTons: (\n initialContributionValue /\n pricePerKg /\n 1000\n ).toString(),\n }}\n validate={validateForm}\n onSubmit={onSubmit}\n >\n {({\n errors,\n touched,\n handleSubmit,\n setValues,\n values,\n }: FormikProps<SmallCheckoutForm>) => (\n <Form onSubmit={handleSubmit}>\n <Flex gap=\"4\">\n <Box width=\"full\">\n <Field name=\"contributionValueCurrency\">\n {({ field }: FieldProps) => (\n <BoemlyFormControl\n id=\"contributionValueCurrency\"\n size=\"md\"\n inputProps={{\n type: 'number',\n value: field.value || '',\n onChange: (e) => {\n const value = e.target.valueAsNumber;\n\n setValues({\n contributionValueCurrency: value.toString(),\n contributionValueTons: (\n value /\n pricePerKg /\n 1000\n ).toString(),\n });\n },\n }}\n label={formatMessage({\n id: `portfolio.smallCheckout.contributionValueCurrency.label.${currency}`,\n })}\n rightAddons={[\n <Text key=\"currencyUnit\">\n {formatMessage({\n id: `portfolio.smallCheckout.contributionValueCurrency.unit.${currency}`,\n })}\n </Text>,\n ]}\n isInvalid={\n !!errors.contributionValueCurrency &&\n touched.contributionValueCurrency\n }\n errorMessage={errors.contributionValueCurrency}\n />\n )}\n </Field>\n </Box>\n\n <Box width=\"full\">\n <Field name=\"contributionValueTons\">\n {({ field }: FieldProps) => (\n <BoemlyFormControl\n id=\"contributionValueTons\"\n size=\"md\"\n inputProps={{\n type: 'number',\n value: field.value || '',\n onChange: (e) => {\n const value = e.target.valueAsNumber;\n setValues({\n contributionValueCurrency: (\n value *\n pricePerKg *\n 1000\n ).toString(),\n contributionValueTons: value.toString(),\n });\n },\n }}\n label={formatMessage({\n id: 'portfolio.smallCheckout.contributionValueTons.label',\n })}\n rightAddons={[<Text key=\"tCO\u2082\">tCO\u2082</Text>]}\n isInvalid={\n !!errors.contributionValueTons &&\n touched.contributionValueTons\n }\n errorMessage={errors.contributionValueTons}\n />\n )}\n </Field>\n </Box>\n </Flex>\n {values.contributionValueCurrency &&\n taxInPercent &&\n taxInPercent > 0 && (\n <Text size=\"smLowNormal\" mt=\"2\">\n {formatMessage(\n { id: 'portfolio.smallCheckout.price.taxIncluded' },\n {\n number: formatNumber(\n calculateTaxIncludedValue(values, taxInPercent),\n {\n style: 'currency',\n currency,\n maximumFractionDigits: 2,\n }\n ),\n }\n )}\n </Text>\n )}\n\n <Spacer height=\"4\" />\n\n <Button type=\"submit\" width=\"full\">\n {formatMessage({ id: 'portfolio.smallCheckout.submitButton' })}\n </Button>\n </Form>\n )}\n </Formik>\n\n <Flex\n width=\"full\"\n justifyContent=\"center\"\n alignItems=\"center\"\n mt=\"6\"\n gap=\"2\"\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/globe-love-icon.svg`}\n alt=\"Icon\"\n width={20}\n height={20}\n />\n <Text size=\"smLowNormal\">{checkoutText}</Text>\n </Flex>\n\n <Separator my=\"6\" />\n\n <Flex width=\"full\" alignItems=\"center\" direction=\"column\">\n {title && (\n <Text size=\"smLowBold\" textAlign=\"center\" color=\"black\" mb=\"2\">\n {title}\n </Text>\n )}\n {subtitle && (\n <Text size=\"smRegularNormal\" textAlign=\"center\" mb=\"3\">\n {subtitle}\n </Text>\n )}\n {button && (\n <StrapiLinkButton\n link={{\n intercomLauncher: true,\n ...button,\n }}\n variant=\"outline\"\n component=\"SmallCheckout\"\n />\n )}\n </Flex>\n </Flex>\n );\n};\n\nexport default SmallCheckout;\n", "import SmallCheckout from './SmallCheckout';\n\nexport default SmallCheckout;\n", "import React, { useContext } from 'react';\nimport {\n Box,\n Container,\n Separator,\n Flex,\n Heading,\n LabelTextPair,\n SimpleGrid,\n Spacer,\n Tooltip,\n} from 'boemly';\nimport Image from 'next/image';\nimport convertAreaM2ToHa from '../../../utils/convertAreaM2ToHa';\nimport convertCo2AmountKgToTons from '../../../utils/convertCo2AmountKgToTons';\nimport CreditsAvailableBadge from '../../../components/CreditsAvailableBadge';\nimport PortfolioProject from '../../../models/PortfolioProject';\nimport {\n FORMAT_AS_HECTARE_CONFIG,\n FORMAT_AS_PERCENT_CONFIG,\n} from '../../../constants/formatter';\nimport getTimeSpanInYears from '../../../utils/getTimeSpanInYears';\nimport { IntlContext } from '../../ContextProvider';\n\nexport interface ProjectInfoProps {\n project: PortfolioProject;\n subtitles: {\n areaSubtitle?: string;\n locationSubtitle?: string;\n startSubtitle?: string;\n timeSpanSubtitle?: string;\n projectTypeSubtitle?: string;\n projectDeveloperSubtitle?: string;\n verificationStandardSubtitle?: string;\n averageSellableAmountPerYearSubtitle?: string;\n riskBufferSubtitle?: string;\n buyCreditsSubtitle?: string;\n };\n}\n\nexport const ProjectInfo: React.FC<ProjectInfoProps> = ({\n project,\n subtitles,\n}: ProjectInfoProps) => {\n const { formatMessage, formatNumber, formatDate } = useContext(IntlContext);\n return (\n <Container p=\"2\" width=\"full\">\n <Heading size=\"xl\" textAlign=\"left\">\n {formatMessage({ id: 'features.projectInfo.projectInfo.value' })}\n </Heading>\n\n <Spacer height=\"8\" />\n\n <SimpleGrid\n columns={[1, null, null, 2]}\n gap=\"8\"\n columnGap=\"10\"\n rowGap=\"8\"\n >\n {project.area && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.area',\n })}\n text={formatNumber(\n convertAreaM2ToHa(project.area.toString()),\n FORMAT_AS_HECTARE_CONFIG\n )}\n caption={subtitles.areaSubtitle}\n />\n </Box>\n )}\n\n {project.location && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.location',\n })}\n text={project.location}\n caption={subtitles.locationSubtitle}\n />\n </Box>\n )}\n\n {project.start && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.start',\n })}\n text={formatDate(project.start, {\n year: 'numeric',\n month: 'long',\n })}\n caption={subtitles.startSubtitle}\n />\n </Box>\n )}\n\n {project.start && project.end && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.timeSpan',\n })}\n text={formatMessage(\n {\n id: 'features.projectInfo.properties.year',\n },\n {\n years: getTimeSpanInYears(\n new Date(project.start),\n new Date(project.end)\n ),\n }\n )}\n caption={subtitles.timeSpanSubtitle}\n />\n </Box>\n )}\n </SimpleGrid>\n\n {project.projectType ||\n project.projectDeveloper ||\n project.verificationStandard ? (\n <>\n <Spacer height=\"6\" />\n <Separator />\n <Spacer height=\"6\" />\n </>\n ) : (\n <></>\n )}\n <SimpleGrid columns={[1, null, null, 2]} columnGap=\"10\" rowGap=\"8\">\n {project.projectType && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.projectType',\n })}\n text={project.projectType.title}\n caption={subtitles.projectTypeSubtitle}\n />\n </Box>\n )}\n {project.projectDeveloper && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.projectDeveloper',\n })}\n text={project.projectDeveloper.name}\n caption={subtitles.projectDeveloperSubtitle}\n />\n </Box>\n )}\n </SimpleGrid>\n\n {project.verificationStandard ? (\n <>\n {project.projectType || project.projectDeveloper ? (\n <Spacer height=\"6\" />\n ) : (\n <></>\n )}\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.verificationStandard.label',\n })}\n text={formatMessage({\n id: `features.projectInfo.properties.verificationStandard.value.${project.verificationStandard.id}`,\n defaultMessage: project.verificationStandard.id,\n })}\n caption={subtitles.verificationStandardSubtitle}\n />\n </Box>\n\n {project.defaultIssuer && (\n <Box position=\"relative\" width=\"14\" height=\"8\">\n <Image\n src={project.defaultIssuer.logoUrl}\n alt={`${project.defaultIssuer.name} logo`}\n fill\n style={{ objectFit: 'contain' }}\n />\n </Box>\n )}\n </Flex>\n </>\n ) : (\n <></>\n )}\n\n {(project.averageSellableAmountPerYear &&\n project.averageSellableAmountPerYear > 0) ||\n project.riskBuffer ? (\n <>\n <Spacer height=\"8\" />\n <Separator />\n <Spacer height=\"8\" />\n </>\n ) : (\n <></>\n )}\n <SimpleGrid columns={[1, null, null, 2]} columnGap=\"10\" rowGap=\"8\">\n {project.averageSellableAmountPerYear > 0 ? (\n <Tooltip\n content={formatMessage({\n id: 'features.projectInfo.properties.projectVolume.toolTip',\n })}\n >\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.projectVolume.label',\n })}\n text={formatMessage(\n {\n id: 'unit.formatter.tonsCo2PerYear',\n },\n {\n number: formatNumber(\n convertCo2AmountKgToTons(\n project.averageSellableAmountPerYear.toString()\n ),\n { maximumFractionDigits: 0 }\n ),\n }\n )}\n caption={subtitles.averageSellableAmountPerYearSubtitle}\n />\n </Box>\n </Tooltip>\n ) : (\n <Box>\n <CreditsAvailableBadge status={project.creditAvailability} />\n </Box>\n )}\n\n {project.riskBuffer && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.riskBuffer',\n })}\n text={formatNumber(\n project.riskBuffer / 100,\n FORMAT_AS_PERCENT_CONFIG\n )}\n caption={subtitles.riskBufferSubtitle}\n />\n </Box>\n )}\n </SimpleGrid>\n\n {project.averageSellableAmountPerYear > 0 ? (\n <Box mt=\"2\">\n <CreditsAvailableBadge status={project.creditAvailability} />\n </Box>\n ) : (\n <></>\n )}\n </Container>\n );\n};\n", "const convertAreaM2ToHa = (areaInM2: string): number =>\n parseInt(areaInM2, 10) / 10000;\n\nexport default convertAreaM2ToHa;\n", "const convertCo2AmountKgToTons = (amount: string): number =>\n parseInt(amount, 10) / 1000;\n\nexport default convertCo2AmountKgToTons;\n", "const getTimeSpanInYears = (start: Date, end: Date) => {\n const monthsDifference = end.getMonth() - start.getMonth();\n const yearsDifference = end.getFullYear() - start.getFullYear();\n\n if (monthsDifference > 4) {\n return yearsDifference + 1;\n }\n if (monthsDifference < -4) {\n return yearsDifference - 1;\n }\n return yearsDifference;\n};\n\nexport default getTimeSpanInYears;\n", "import { ProjectInfo } from './ProjectInfo';\n\nexport default ProjectInfo;\n", "import React, { useContext } from 'react';\nimport StrapiLink from '../../../models/strapi/StrapiLink';\nimport {\n Center,\n Container,\n Flex,\n Heading,\n IconButton,\n Spacer,\n Text,\n} from 'boemly';\nimport { DownloadSimpleIcon, FilePdfIcon } from '@phosphor-icons/react';\nimport Link from 'next/link';\nimport { IntlContext } from '../../ContextProvider';\n\nexport interface DocumentsDownloadListProps {\n documentUrls: StrapiLink[];\n}\n\nexport const DocumentsDownloadList: React.FC<DocumentsDownloadListProps> = ({\n documentUrls,\n}: DocumentsDownloadListProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <Container p=\"2\">\n <Heading size=\"xl\" textAlign=\"left\">\n {formatMessage({\n id: 'features.portfolio.documentsDownloadList.projectDocuments',\n })}\n </Heading>\n\n <Flex flexDir=\"column\">\n {documentUrls.map((documentUrl) => (\n <Flex\n justifyContent=\"space-between\"\n alignItems=\"center\"\n mt=\"6\"\n key={documentUrl.text}\n >\n <Flex alignItems=\"center\">\n <Center\n w=\"8\"\n h=\"8\"\n borderRadius=\"full\"\n borderWidth=\"1px\"\n borderColor=\"grey.200\"\n >\n <FilePdfIcon />\n </Center>\n\n <Spacer width=\"4\" />\n\n <Flex flexDir=\"column\">\n <Text size=\"smMonoNormal\">PDF</Text>\n <Text size=\"mdLowBold\" color=\"black\" textAlign=\"left\">\n {documentUrl.text}\n </Text>\n </Flex>\n </Flex>\n\n <Spacer width=\"32\" />\n\n <IconButton\n variant=\"outline\"\n aria-label={formatMessage({\n id: 'features.portfolio.documentsDownloadList.downloadDocument',\n })}\n size=\"sm\"\n asChild\n >\n <Link href={documentUrl.url || '#'}>\n <DownloadSimpleIcon />\n </Link>\n </IconButton>\n </Flex>\n ))}\n </Flex>\n </Container>\n );\n};\n", "import { DocumentsDownloadList } from './DocumentsDownloadList';\n\nexport default DocumentsDownloadList;\n", "import React from 'react';\nimport StrapiImage from '../../../models/strapi/StrapiImage';\nimport StrapiLink from '../../../models/strapi/StrapiLink';\nimport strapiMediaUrl from '../../../utils/strapiMediaUrl';\nimport { Text, Heading, Flex, Box, Container } from 'boemly';\nimport Image from 'next/image';\nimport StrapiLinkButton from '../../../components/StrapiLinkButton';\n\nexport interface ContactProps {\n avatar?: StrapiImage;\n title?: string;\n text?: string;\n button?: StrapiLink;\n}\n\nexport const Contact: React.FC<ContactProps> = ({\n avatar,\n title,\n text,\n button,\n}: ContactProps) => (\n <Container backgroundColor=\"primary.100\" border=\"none\" p=\"8\" height=\"full\">\n <Flex\n flexDir=\"column\"\n justifyContent=\"center\"\n alignItems=\"center\"\n height=\"full\"\n >\n {avatar ? (\n <Box\n position=\"relative\"\n width=\"20\"\n height=\"20\"\n borderRadius=\"full\"\n overflow=\"hidden\"\n >\n <Image\n src={strapiMediaUrl(avatar.img, 'small')}\n alt={avatar.alt}\n fill\n objectFit={avatar.objectFit}\n />\n </Box>\n ) : (\n <></>\n )}\n {title ? (\n <Heading\n mt=\"6\"\n size=\"md\"\n fontWeight=\"500\"\n textAlign=\"center\"\n color=\"black\"\n >\n {title}\n </Heading>\n ) : (\n <></>\n )}\n {text ? (\n <Text mt=\"2\" size=\"smRegularNormal\" textAlign=\"center\">\n {text}\n </Text>\n ) : (\n <></>\n )}\n {button ? (\n <StrapiLinkButton\n mt=\"6\"\n link={button}\n size=\"md\"\n variant=\"outline\"\n component=\"Contact\"\n />\n ) : (\n <></>\n )}\n </Flex>\n </Container>\n);\n", "import { Contact } from './Contact';\n\nexport default Contact;\n", "import FPMProject from '../../models/fpm/FPMProject';\nimport fpmClient from '../fpmClient';\n\nconst getFpmProjectById = async (projectId: string): Promise<FPMProject> => {\n const fpmResponse = await fpmClient.get<FPMProject>(\n `/public/projects/${projectId}`\n );\n\n return fpmResponse.data;\n};\n\nexport default getFpmProjectById;\n", "import { ProjectFacts } from './ProjectFacts';\n\nexport default ProjectFacts;\n", "import React from 'react';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport StrapiCustomerStory from '../../models/strapi/StrapiCustomerStory';\nimport { Box, DefaultSectionContainer, SimpleGrid, Wrapper } from 'boemly';\nimport CustomerCard from '../../components/CustomerCard';\nimport CustomerQuoteCard from '../../components/CustomerQuoteCard';\nimport LogoCard from '../../components/LogoCard';\n\nexport interface CustomerStoriesProps {\n slice: {\n customer_stories: IStrapiData<StrapiCustomerStory>[];\n };\n customerStories: IStrapiData<StrapiCustomerStory>[];\n}\n\nexport const CustomerStories = ({\n slice,\n customerStories,\n}: CustomerStoriesProps): React.JSX.Element => {\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2, 3]} gap=\"6\">\n {slice.customer_stories.map((customerStoryRef, index) => {\n const customerStory: IStrapiData<StrapiCustomerStory> | undefined =\n customerStories.find(\n (cs) => cs.attributes.slug === customerStoryRef.attributes.slug\n );\n if (!customerStory) {\n return null;\n }\n return (\n <Box key={`${customerStoryRef.id}-${index}`}>\n {customerStoryRef.attributes.variant === 'customerCard' && (\n <CustomerCard customerStory={customerStory.attributes} />\n )}\n {customerStoryRef.attributes.variant === 'quoteCard' && (\n <CustomerQuoteCard customerStory={customerStory.attributes} />\n )}\n {customerStoryRef.attributes.variant === 'logoCard' && (\n <LogoCard customerStory={customerStory.attributes} />\n )}\n </Box>\n );\n })}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { Container, Center, Heading, Button, Box, Text, Flex } from 'boemly';\nimport React, { useContext } from 'react';\nimport StrapiCustomerStory from '../../models/strapi/StrapiCustomerStory';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport Image from 'next/image';\nimport { IntlContext } from '../../components/ContextProvider';\nimport Link from 'next/link';\n\nexport interface CustomerCardProps {\n customerStory: StrapiCustomerStory;\n}\nexport const CustomerCard = ({\n customerStory,\n}: CustomerCardProps): React.JSX.Element => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <Container padding=\"none\" height=\"full\">\n <Flex flexDir=\"column\" height=\"full\">\n <Center height=\"24\" backgroundColor=\"primary.50\" borderTopRadius=\"xl\">\n {customerStory.cardImage && (\n <Box position=\"relative\" height=\"12\" width=\"12\">\n <Image\n src={strapiMediaUrl(customerStory.cardImage.img, 'medium')}\n alt={customerStory.cardImage.alt}\n fill\n style={{\n objectFit: customerStory.cardImage.objectFit,\n }}\n />\n </Box>\n )}\n </Center>\n <Box px=\"6\" pt=\"8\" pb=\"6\" mb=\"auto\">\n {customerStory.customerCardCustomerIndustry && (\n <Text size=\"xsMonoUppercase\" color=\"gray.500\" mb=\"2\">\n {customerStory.customerCardCustomerIndustry}\n </Text>\n )}\n {customerStory.title && (\n <Heading size=\"md\" fontWeight=\"500\">\n {customerStory.title}\n </Heading>\n )}\n </Box>\n <Box px=\"6\" pt=\"8\" pb=\"6\">\n <Link href={`/customer-stories/${customerStory.slug}`}>\n <Button variant=\"outline\" size=\"sm\">\n {formatMessage({ id: 'sections.customerCard.more' })}\n </Button>\n </Link>\n </Box>\n </Flex>\n </Container>\n );\n};\n", "import { CustomerCard } from './CustomerCard';\n\nexport default CustomerCard;\n", "import { Container, Heading, Button, Box, Text } from 'boemly';\nimport React, { useContext } from 'react';\nimport StrapiCustomerStory from '../../models/strapi/StrapiCustomerStory';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport Image from 'next/image';\nimport { IntlContext } from '../../components/ContextProvider';\nimport Link from 'next/link';\n\nexport interface CustomerQuoteCardProps {\n customerStory: StrapiCustomerStory;\n}\n\nexport const CustomerQuoteCard = ({\n customerStory,\n}: CustomerQuoteCardProps): React.JSX.Element => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <Container p=\"1\" backgroundColor=\"primary.100\" height=\"full\">\n {customerStory.cardImage ? (\n <Box\n position=\"relative\"\n height=\"12\"\n width=\"12\"\n borderRadius=\"full\"\n overflow=\"hidden\"\n >\n <Image\n src={strapiMediaUrl(customerStory.cardImage.img, 'medium')}\n alt={customerStory.cardImage.alt}\n fill\n style={{\n objectFit: customerStory.cardImage.objectFit,\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n <Box>\n <Box my=\"8\">\n <Heading size=\"md\" fontWeight=\"500\">\n {customerStory.customerName}\n </Heading>\n <Text fontSize=\"md\">{customerStory.quoteCardCustomerTitle}</Text>\n </Box>\n <Text fontSize=\"md\" color=\"black\">\n {customerStory.quoteCardQuote}\n </Text>\n <Link href={`/customer-stories/${customerStory.slug}`}>\n <Button variant=\"outline\" size=\"sm\" mt=\"8\">\n {formatMessage({ id: 'sections.customerQuoteCard.more' })}\n </Button>\n </Link>\n </Box>\n </Container>\n );\n};\n", "import { CustomerQuoteCard } from './CustomerQuoteCard';\n\nexport default CustomerQuoteCard;\n", "import { Box, Container, Flex } from 'boemly';\nimport StrapiCustomerStory from '../../models/strapi/StrapiCustomerStory';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport Image from 'next/image';\nimport React from 'react';\nimport Link from 'next/link';\n\nexport interface LogoCardProps {\n customerStory: StrapiCustomerStory;\n}\nexport const LogoCard = ({ customerStory }: LogoCardProps) => {\n if (customerStory.cardImage) {\n return (\n <Container height=\"full\" backgroundColor=\"primary.50\">\n <Flex justifyContent=\"center\" height=\"full\" padding=\"4\">\n <Box position=\"relative\" height=\"12\" width=\"36\" marginY=\"auto\">\n <Link href={`/customer-stories/${customerStory.slug}`}>\n <Image\n src={strapiMediaUrl(customerStory.cardImage.img, 'medium')}\n alt={customerStory.cardImage.alt}\n fill\n style={{\n objectFit: customerStory.cardImage.objectFit,\n }}\n />\n </Link>\n </Box>\n </Flex>\n </Container>\n );\n }\n return <></>;\n};\n", "import { LogoCard } from './LogoCard';\n\nexport default LogoCard;\n", "import { CustomerStories } from './CustomerStories';\n\nexport default CustomerStories;\n", "import React, { useContext } from 'react';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport {\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Wrapper,\n Text,\n Flex,\n Box,\n Spacer,\n Separator,\n Heading,\n Badge,\n SimpleGrid,\n} from 'boemly';\nimport Image from 'next/image';\nimport { CaretRightIcon } from '@phosphor-icons/react';\nimport { Icon } from './Icon';\nimport { CDN_URI } from '../../constants/api';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface ComparisonProps {\n slice: {\n title?: string;\n subTitle?: string;\n tagline?: string;\n\n comparisonCards: ComparisonCard[];\n };\n}\n\nexport interface ComparisonCard {\n id: number;\n title: string;\n subTitle: string;\n badge?: string;\n variant: 'gray' | 'green' | 'white';\n image?: StrapiImage;\n button?: StrapiLink;\n factTitle?: string;\n factSubtitle?: string;\n lists: {\n id: string;\n title: string;\n items: { id: string; text: string; icon: 'bullet' | 'check' | 'cross' }[];\n }[];\n}\n\nconst VARIANTS = {\n gray: {\n backgroundColor: 'primary.50',\n textColor: 'black',\n subTitleColor: 'gray.500',\n factColor: 'primary.800',\n dividerColor: 'gray.200',\n },\n green: {\n backgroundColor: 'primary.800',\n textColor: 'white',\n subTitleColor: 'whiteAlpha.900',\n factColor: 'white',\n dividerColor: 'whiteAlpha.200',\n },\n white: {\n backgroundColor: 'white',\n textColor: 'black',\n subTitleColor: 'gray.500',\n factColor: 'primary.800',\n dividerColor: 'gray.200',\n },\n};\n\nexport const Comparison: React.FC<ComparisonProps> = ({\n slice,\n}: ComparisonProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n {slice.title ? (\n <>\n <Flex alignItems=\"center\" flexDirection=\"column\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n textProps={{ maxW: '2xl', textAlign: 'center' }}\n titleProps={{\n textAlign: 'center',\n maxWidth: '3xl',\n }}\n taglineProps={{ textAlign: 'center', maxWidth: '3xl' }}\n />\n </Flex>\n <Spacer height=\"12\" />\n </>\n ) : (\n <></>\n )}\n <SimpleGrid\n columns={[1, null, null, null, slice.comparisonCards.length]}\n gap=\"4\"\n >\n {slice.comparisonCards.map((comparisonCard) => (\n <Container\n boxShadow={comparisonCard.variant === 'green' ? 'xl' : 'base'}\n border={\n comparisonCard.variant === 'green' ? 'primary.800' : undefined\n }\n zIndex=\"base\"\n key={comparisonCard.id}\n position=\"relative\"\n elevation=\"none\"\n p=\"3\"\n backgroundColor={VARIANTS[comparisonCard.variant].backgroundColor}\n >\n {comparisonCard.variant === 'green' ? (\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"0\"\n width=\"full\"\n height=\"full\"\n zIndex=\"-1\"\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/shapes-comparison.svg`}\n alt={formatMessage({\n id: 'sections.comparison.backgroundShapes',\n })}\n fill\n style={{\n objectFit: 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n <Flex flexDir=\"column\" gap=\"4\">\n {comparisonCard.image && (\n <Box position=\"relative\" height=\"7\" width=\"100%\">\n <Image\n src={strapiMediaUrl(comparisonCard.image.img, 'small')}\n alt={comparisonCard.image.alt}\n fill\n style={{\n objectFit: comparisonCard.image.objectFit,\n }}\n />\n </Box>\n )}\n <Flex gap=\"2\" alignItems=\"center\" flexWrap=\"wrap\">\n <Heading\n size=\"xl\"\n color={VARIANTS[comparisonCard.variant].textColor}\n whiteSpace=\"pre-line\"\n >\n {comparisonCard.title}\n </Heading>\n {comparisonCard.badge && (\n <Badge\n backgroundColor=\"green.100\"\n borderRadius=\"md\"\n whiteSpace=\"pre-line\"\n >\n {comparisonCard.badge}\n </Badge>\n )}\n </Flex>\n </Flex>\n <Spacer height=\"4\" />\n <Text\n size=\"smRegularNormal\"\n color={VARIANTS[comparisonCard.variant].subTitleColor}\n >\n {comparisonCard.subTitle}\n </Text>\n\n {comparisonCard.factTitle ||\n comparisonCard.factSubtitle ||\n comparisonCard.button ? (\n <>\n <Spacer height=\"6\" />\n <Flex flexDir=\"column\">\n {comparisonCard.factTitle && (\n <>\n <Text\n color={VARIANTS[comparisonCard.variant].factColor}\n size=\"lgMonoNormal\"\n >\n {comparisonCard.factTitle}\n </Text>\n <Text\n color={VARIANTS[comparisonCard.variant].factColor}\n size=\"smLowNormal\"\n >\n {comparisonCard.factSubtitle}\n </Text>\n </>\n )}\n {comparisonCard.button && (\n <StrapiLinkButton\n mt=\"6\"\n link={comparisonCard.button}\n size=\"md\"\n variant=\"outline\"\n rightIcon={<CaretRightIcon size={16} weight=\"bold\" />}\n component=\"Comparison\"\n />\n )}\n </Flex>\n </>\n ) : (\n <></>\n )}\n <>\n {comparisonCard.lists.map((list) => (\n <Box key={list.id}>\n <Separator\n my=\"8\"\n color={VARIANTS[comparisonCard.variant].dividerColor}\n />\n <Text\n size=\"smLowBold\"\n color={VARIANTS[comparisonCard.variant].textColor}\n >\n {list.title}\n </Text>\n <>\n {list.items.map((item) => (\n <Box key={item.id}>\n <Spacer height=\"4\" />\n <Flex gap=\"4\" alignItems=\"center\">\n <Box>\n <Icon\n variant={comparisonCard.variant}\n icon={item.icon}\n />\n </Box>\n <Text\n size=\"smLowNormal\"\n color={VARIANTS[comparisonCard.variant].textColor}\n >\n {item.text}\n </Text>\n </Flex>\n </Box>\n ))}\n </>\n </Box>\n ))}\n </>\n </Container>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\nexport default Comparison;\n", "import React from 'react';\nimport { CheckIcon, XIcon } from '@phosphor-icons/react';\nimport { Box } from 'boemly';\n\nexport interface IconProps {\n variant: 'gray' | 'green' | 'white';\n icon: string;\n}\n\nconst BULLET_POINT_VARIANTS = {\n gray: { bulletPointColor: 'black' },\n green: { bulletPointColor: 'white' },\n white: { bulletPointColor: 'black' },\n};\n\nexport const Icon = ({ variant, icon }: IconProps): React.JSX.Element => {\n switch (icon) {\n case 'check':\n return <CheckIcon size={20} color=\"var(--boemly-colors-primary-500)\" />;\n case 'cross':\n return <XIcon size={20} color=\"var(--boemly-colors-red-500)\" />;\n default:\n return (\n <Box\n data-testid=\"bullet-point-box\"\n borderRadius=\"full\"\n backgroundColor={BULLET_POINT_VARIANTS[variant].bulletPointColor}\n width=\"2\"\n height=\"2\"\n margin=\"1.5\"\n />\n );\n }\n};\nexport default Icon;\n", "import { Comparison } from './Comparison';\n\nexport default Comparison;\n", "import React, { useEffect, useState } from 'react';\nimport {\n DefaultSectionContainer,\n Flex,\n Heading,\n Spacer,\n Box,\n useMediaQuery,\n useToken,\n} from 'boemly';\nimport Image from 'next/image';\nimport useEmblaCarousel from 'embla-carousel-react';\nimport { useWindowSize } from '@reactuses/core';\n\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport AutoScroll from 'embla-carousel-auto-scroll';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\nimport { getClosestRatio } from '../../utils/getClosestRatio';\nimport { CarouselInnerContainer, LogoGrid } from './styles';\n\nexport interface CarouselMarqueeBannerProps {\n slice: {\n title?: string;\n logos: StrapiImage[];\n };\n}\n\n// Separate component containing the actual logic\nconst CarouselMarqueeBannerContent: React.FC<CarouselMarqueeBannerProps> = ({\n slice,\n}) => {\n const [primary50] = useToken('colors', ['primary.50']);\n const { width: windowWidth } = useWindowSize();\n const hasEnoughLogosForLoop = slice.logos.length >= 5;\n const LOOP_ARRAY_LENGTH = windowWidth > 2000 ? 5 : 4;\n\n // Duplicate Logos to create a full loop\n const logosToRender = hasEnoughLogosForLoop\n ? Array.from({ length: LOOP_ARRAY_LENGTH }, () => slice.logos).flat()\n : slice.logos;\n\n const [isMobile] = useMediaQuery([BREAKPOINT_MD_QUERY]);\n\n // Carousel setup\n const [emblaRef] = useEmblaCarousel(\n {\n loop: hasEnoughLogosForLoop,\n align: 'start',\n containScroll: 'trimSnaps',\n dragFree: true,\n },\n hasEnoughLogosForLoop\n ? [\n AutoScroll({\n playOnInit: true,\n speed: isMobile ? 0.5 : 1,\n stopOnInteraction: false,\n stopOnMouseEnter: false,\n stopOnFocusIn: false,\n }),\n ]\n : []\n );\n\n const renderLogos = (): React.ReactNode => {\n if (!hasEnoughLogosForLoop) {\n return (\n <LogoGrid>\n {slice.logos.map((logo, index) => (\n <Box\n key={`${logo.id}-${index}`}\n flexShrink={0}\n transform=\"translate3d(0, 0, 0)\"\n >\n <Flex\n height=\"full\"\n width=\"full\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <Box\n position=\"relative\"\n height={isMobile ? '16' : '36'}\n width={`calc(var(--boemly-sizes-10)\n * ${getClosestRatio(\n logo.img.data.attributes.width,\n logo.img.data.attributes.height\n )})`}\n >\n <Image\n src={strapiMediaUrl(logo.img, 'large')}\n alt={logo.alt}\n fill\n style={{\n objectFit: logo.objectFit || 'contain',\n filter: 'grayscale(100%)',\n }}\n />\n </Box>\n </Flex>\n </Box>\n ))}\n </LogoGrid>\n );\n }\n\n return (\n <Box width=\"full\" overflow=\"hidden\" ref={emblaRef} cursor=\"pointer\">\n <CarouselInnerContainer logoCount={slice.logos.length}>\n {logosToRender.map((logo, index) => (\n <Box\n key={`${logo.id}-${index}`}\n flexShrink={0}\n transform=\"translate3d(0, 0, 0)\"\n >\n <Flex\n height=\"full\"\n width=\"full\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <Box\n position=\"relative\"\n height={isMobile ? '16' : '36'}\n width={`calc(var(--boemly-sizes-10) * ${getClosestRatio(\n logo.img.data.attributes.width,\n logo.img.data.attributes.height\n )})`}\n >\n <Image\n src={strapiMediaUrl(logo.img, 'large')}\n alt={logo.alt}\n fill\n style={{\n objectFit: logo.objectFit || 'contain',\n filter: 'grayscale(100%)',\n }}\n />\n </Box>\n </Flex>\n </Box>\n ))}\n </CarouselInnerContainer>\n </Box>\n );\n };\n\n return (\n <DefaultSectionContainer backgroundColor={primary50}>\n <>\n {slice.title ? (\n <>\n <Flex alignItems=\"center\" flexDirection=\"column\">\n <Heading size=\"md\" fontWeight=\"500\">\n {slice.title}\n </Heading>\n </Flex>\n <Spacer height=\"12\" minHeight=\"12\" />\n </>\n ) : null}\n\n {renderLogos()}\n </>\n </DefaultSectionContainer>\n );\n};\n\n// Lazy-rendering the child component after client-side hydration\nexport const CarouselMarqueeBanner: React.FC<CarouselMarqueeBannerProps> = ({\n slice,\n}: CarouselMarqueeBannerProps) => {\n const [showChild, setShowChild] = useState(false);\n\n useEffect(() => {\n setShowChild(true); // Hydrate the component after the client-side is ready\n }, []);\n\n if (!showChild) {\n return <div />;\n }\n\n return <CarouselMarqueeBannerContent slice={slice} />;\n};\n\nexport default CarouselMarqueeBanner;\n", "import { motion } from 'framer-motion';\nimport styled from '@emotion/styled';\nimport { BREAKPOINT_MD } from '../../constants/breakpoints';\n\ninterface CarouselInnerContainerProps {\n logoCount: number;\n}\n\nexport const CarouselInnerContainer = styled(\n motion.div\n)<CarouselInnerContainerProps>`\n display: flex;\n justify-content: ${(props) =>\n props.logoCount < 5 ? 'center' : 'flex-start'};\n gap: var(--boemly-spacing-24);\n padding-right: var(--boemly-spacing-24);\n padding-left: var(--boemly-spacing-24);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n width: calc(\n ${(props) => props.logoCount} *\n (var(--boemly-sizes-16) + var(--boemly-spacing-6))\n );\n justify-content: ${(props) =>\n props.logoCount < 5 ? 'center' : 'flex-start'};\n }\n`;\n\nexport const LogoGrid = styled(motion.div)`\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--boemly-spacing-24);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-gap: var(--boemly-spacing-6);\n }\n`;\n", "import { CarouselMarqueeBanner } from './CarouselMarqueeBanner';\n\nexport default CarouselMarqueeBanner;\n", "import React, { useContext } from 'react';\nimport {\n Button,\n Box,\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n RichText,\n SimpleGrid,\n Spacer,\n Text,\n Wrapper,\n useMediaQuery,\n BoemlyTag,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { CDN_URI } from '../../constants/api';\nimport { IntlContext } from 'react-intl';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\nimport { useState } from 'react';\nimport FullScreenImage from '../../components/FullScreenImage';\n\nexport interface TimelineProps {\n slice: {\n title: string;\n text?: string;\n tagline?: string;\n\n timelineItems: TimelineItem[];\n };\n}\n\nexport interface TimelineItem {\n id: number;\n tagline?: string;\n title: string;\n text?: string;\n badge?: { text: string; variant: 'orange' | 'green' | 'red' | 'gray' };\n logo?: StrapiImage;\n icon?: StrapiImage;\n image?: StrapiImage;\n button?: StrapiLink;\n backgroundShapes?: boolean;\n}\n\nexport const Timeline: React.FC<TimelineProps> = ({ slice }: TimelineProps) => {\n const { formatMessage } = useContext(IntlContext);\n const [visibleItems, setVisibleItems] = useState(3);\n const [mobile] = useMediaQuery([BREAKPOINT_MD_QUERY]);\n const [isOpen, setIsOpen] = useState(false);\n\n const showMoreItems = () => {\n setVisibleItems((prevVisibleItems) => prevVisibleItems + 3);\n };\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <Flex flexDir={['column', null, 'row']}>\n <Box\n width={['full', null, '50%']}\n position={[null, null, 'sticky']}\n top={['16', null, '32']}\n height=\"full\"\n paddingRight={[null, null, '28']}\n >\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n {mobile && (\n <>\n <Spacer height=\"10\" />\n <Flex justifyContent=\"center\">\n <Box\n borderRadius=\"full\"\n width=\"3\"\n height=\"3\"\n margin=\"1.5\"\n backgroundColor=\"gray\"\n />\n </Flex>\n <Box\n overflow=\"visible\"\n borderRight=\"dashed 1px var(--boemly-colors-gray-200)\"\n transform=\"translateX(-50%)\"\n position=\"relative\"\n height=\"20\"\n />\n </>\n )}\n </Box>\n <Box\n overflow=\"visible\"\n maxWidth={['full', null, '50%']}\n borderLeft={[\n null,\n null,\n 'dashed 1px var(--boemly-colors-gray-200)',\n ]}\n position=\"relative\"\n width=\"full\"\n >\n <Flex flexDir=\"column\" overflow=\"visible\" gap={['8', null, '8']}>\n {slice.timelineItems.slice(0, visibleItems).map((item, index) => (\n <SimpleGrid\n gap={['4', null, '4']}\n key={`${item.id}-${index}`}\n columns={[1, null, 2]}\n alignContent=\"center\"\n gridTemplateColumns={[null, null, '1fr 16fr']}\n position=\"relative\"\n >\n <Flex\n alignItems=\"center\"\n justifyContent={['center', null, 'flex-start']}\n >\n <Box\n position=\"absolute\"\n transform={[null, null, 'translateX(-50%)']}\n backgroundColor=\"white\"\n >\n {item.icon ? (\n <Box padding=\"2\">\n <Image\n src={strapiMediaUrl(item.icon.img, 'xSmall')}\n alt={item.icon.alt}\n width=\"21\"\n height=\"21\"\n />\n </Box>\n ) : (\n <Box padding=\"2\">\n <Box\n borderRadius=\"full\"\n backgroundColor=\"primary.800\"\n width=\"2\"\n height=\"2\"\n />\n </Box>\n )}\n {mobile && (\n <Box\n overflow=\"visible\"\n borderRight=\"dashed 1px var(--boemly-colors-gray-200)\"\n transform=\"translateX(-50%)\"\n position=\"relative\"\n height=\"10\"\n />\n )}\n </Box>\n </Flex>\n <Container\n p={[null, null, null, '3']}\n zIndex=\"base\"\n position=\"relative\"\n elevation=\"none\"\n >\n {item.backgroundShapes ? (\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"0\"\n width=\"full\"\n height=\"full\"\n zIndex=\"-1\"\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/timeline-shapes.svg`}\n alt={formatMessage({\n id: 'sections.timeline.backgroundShapes',\n })}\n fill\n style={{\n objectFit: 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n\n <Flex flexDir=\"column\">\n <Flex\n alignItems=\"flex-start\"\n justifyContent=\"space-between\"\n >\n <Box>\n {item.tagline && (\n <>\n <Text color=\"primary.800\" size=\"smMonoUppercase\">\n {item.tagline}\n </Text>\n <Spacer height=\"2\" />\n </>\n )}\n </Box>\n <Flex>\n {item.badge && (\n <BoemlyTag\n colorPalette={item.badge.variant}\n borderRadius=\"md\"\n >\n {item.badge.text}\n </BoemlyTag>\n )}\n {item.logo && (\n <Box position=\"relative\" height=\"8\" width=\"16\">\n <Image\n src={strapiMediaUrl(item.logo.img, 'small')}\n alt={item.logo.alt}\n fill\n style={{\n objectFit: item.logo.objectFit,\n }}\n />\n </Box>\n )}\n </Flex>\n </Flex>\n <Heading\n size=\"lg\"\n mt={['6', null, null, '3']}\n maxWidth=\"xs\"\n >\n {item.title}\n </Heading>\n {item.text && (\n <Box mt=\"3\">\n <RichText content={item.text} />\n </Box>\n )}\n {item.button && (\n <Box textAlign=\"left\">\n <Spacer height=\"4\" />\n <StrapiLinkButton\n link={item.button}\n size=\"sm\"\n variant=\"outline\"\n component=\"Timeline\"\n />\n </Box>\n )}\n {item.image ? (\n <>\n <Box\n position=\"relative\"\n mt=\"4\"\n height={['2xs', null, null, null, '48']}\n minWidth={[null, null, null, null, '50%']}\n >\n <Image\n src={strapiMediaUrl(item.image.img, 'xLarge')}\n alt={item.image.alt}\n fill\n style={{\n cursor: mobile ? 'unset' : 'pointer',\n objectFit: item.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n onClick={() => !mobile && setIsOpen(true)}\n />\n <FullScreenImage\n images={[item.image]}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n />\n </Box>\n </>\n ) : (\n <></>\n )}\n </Flex>\n </Container>\n {mobile && index + 1 < slice.timelineItems.length && (\n <Box\n overflow=\"visible\"\n borderRight=\"dashed 1px var(--boemly-colors-gray-200)\"\n transform=\"translateX(-50%)\"\n position=\"relative\"\n height=\"20\"\n />\n )}\n </SimpleGrid>\n ))}\n </Flex>\n {visibleItems < slice.timelineItems.length && (\n <>\n <Box\n width=\"full\"\n height={['36', null, null, '64']}\n position=\"absolute\"\n bottom=\"0\"\n zIndex=\"1\"\n background=\"linear-gradient(180deg, rgba(255, 255, 255, 0.00) 0%, rgba(255, 255, 255, 0.98) 76.54%, #FFF 100%)\"\n />\n <Box\n bottom=\"0\"\n textAlign=\"center\"\n zIndex=\"overlay\"\n position=\"relative\"\n >\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={showMoreItems}\n m={[null, null, null, '8']}\n >\n {formatMessage({ id: 'sections.timeline.showMoreButton' })}\n </Button>\n </Box>\n </>\n )}\n </Box>\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { Timeline } from './Timeline';\n\nexport default Timeline;\n", "import {\n DefaultSectionContainer,\n Wrapper,\n Spacer,\n DefaultSectionHeader,\n SimpleGrid,\n Box,\n Button,\n Flex,\n Center,\n Text,\n BoemlyTag,\n Select,\n} from 'boemly';\n\nimport React, {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport EventCard from '../../components/EventCard';\nimport { SWRInfiniteKeyLoader } from 'swr/infinite';\nimport useEvents from '../../models/hooks/useEvents';\nimport {\n STRAPI_DEFAULT_POPULATE_DEPTH,\n STRAPI_URI,\n} from '../../constants/strapi';\nimport { IntlContext } from '../../components/ContextProvider';\nimport { mutate } from 'swr/_internal';\nimport { EventType } from '../../models/strapi/StrapiEvent';\nimport StrapiEvent from '../../models/strapi/StrapiEvent';\nimport IStrapiData from '../../models/strapi/IStrapiData';\n\nconst UPCOMING_BATCH_SIZE = 6;\nconst PAST_BATCH_SIZE = 2;\n\ninterface FiltersProps {\n eventTypes: EventType[];\n languages: {\n id: number;\n language: string;\n countryCode: string;\n }[];\n}\n\nexport interface EventsProps {\n slice: {\n upcomingTitle?: string;\n upcomingDescription?: string;\n pastTitle: string;\n pastDescription?: string;\n filterSearch?: boolean;\n };\n}\n\nconst enum Sort {\n NEWEST_FIRST = 'newest',\n OLDEST_FIRST = 'oldest',\n}\n\ninterface EventOption {\n value: string;\n label: string;\n}\n\nexport const Events: React.FC<EventsProps> = ({ slice }: EventsProps) => {\n const { formatMessage, locale } = useContext(IntlContext);\n const [eventTypeFilter, setEventTypeFilter] = useState([] as string[]);\n const [languageFilter, setLanguageFilter] = useState([] as string[]);\n const [sort, setSort] = useState([Sort.NEWEST_FIRST] as string[]);\n\n const [allEventTypeOptions, setAllEventTypeOptions] = useState<EventOption[]>(\n []\n );\n const [allLanguageOptions, setAllLanguageOptions] = useState<EventOption[]>(\n []\n );\n\n const now = new Date().toISOString();\n\n const buildEventsUrl = (\n index: any,\n batchSize: number,\n startFilter: string\n ) => {\n const url = new URL(`/treely-events`, STRAPI_URI);\n url.searchParams.append(\n 'pagination[start]',\n (index * batchSize).toString()\n );\n url.searchParams.append('pagination[limit]', batchSize.toString());\n url.searchParams.append(startFilter, now);\n url.searchParams.append('locale', locale);\n url.searchParams.append('pLevel', STRAPI_DEFAULT_POPULATE_DEPTH);\n\n if (sort[0] === Sort.OLDEST_FIRST) {\n url.searchParams.append('sort', 'start:asc');\n } else {\n url.searchParams.append('sort', 'start:desc');\n }\n\n if (eventTypeFilter.length) {\n eventTypeFilter.forEach((filter, i) => {\n url.searchParams.append(\n `filters[$or][${i}][eventTypes][eventType]`,\n filter\n );\n });\n }\n\n if (languageFilter.length) {\n languageFilter.forEach((filter, i) => {\n url.searchParams.append(\n `filters[$or][${eventTypeFilter.length + i}][languages][language]`,\n filter\n );\n });\n }\n return `/treely-events` + url.search;\n };\n\n const getUpcomingKey: SWRInfiniteKeyLoader = useCallback(\n (index) =>\n buildEventsUrl(index, UPCOMING_BATCH_SIZE, 'filters[start][$gte]'),\n [eventTypeFilter, languageFilter, sort]\n );\n\n const getPastKey: SWRInfiniteKeyLoader = useCallback(\n (index) => buildEventsUrl(index, PAST_BATCH_SIZE, 'filters[start][$lt]'),\n [eventTypeFilter, languageFilter, sort]\n );\n\n const {\n data: upcomingData,\n isLoading: isLoadingUpcoming,\n isLoadingMore: isLoadingMoreUpcoming,\n canLoadMore: canLoadMoreUpcoming,\n loadMore: loadMoreUpcoming,\n } = useEvents({ getKey: getUpcomingKey, batchSize: UPCOMING_BATCH_SIZE });\n\n const {\n data: pastData,\n isLoading: isLoadingPast,\n isLoadingMore: isLoadingMorePast,\n canLoadMore: canLoadMorePast,\n loadMore: loadMorePast,\n } = useEvents({ getKey: getPastKey, batchSize: PAST_BATCH_SIZE });\n\n const processEvents = (data: any) => {\n return (\n data?.flatMap((d: any) => d?.body?.data)?.filter((t: any) => !!t) || []\n );\n };\n\n // Process upcoming events\n const upcomingEvents = useMemo(() => {\n return processEvents(upcomingData);\n }, [upcomingData]);\n\n // Process past events\n const pastEvents = useMemo(() => {\n return processEvents(pastData);\n }, [pastData]);\n\n // Function to fetch all possible options\n const fetchAllOptions = useCallback(async () => {\n const url = new URL(`/treely-events`, STRAPI_URI);\n url.searchParams.append('locale', locale);\n url.searchParams.append('pLevel', STRAPI_DEFAULT_POPULATE_DEPTH);\n\n const response = await fetch(\n `${STRAPI_URI}/api/treely-events${url.search}`,\n {\n headers: {\n 'Strapi-Response-Format': 'v4',\n },\n }\n );\n const data = await response.json();\n\n const events = data?.data || [];\n\n // Extract all event types\n const allEventTypes = new Set<string>();\n events.forEach((event: any) => {\n if (event?.attributes?.eventTypes) {\n event.attributes.eventTypes.forEach((item: any) => {\n allEventTypes.add(item.eventType);\n });\n }\n });\n\n // Extract all languages\n const allLanguages = new Set<string>();\n events.forEach((event: any) => {\n if (event?.attributes?.languages) {\n event.attributes.languages.forEach((item: any) => {\n allLanguages.add(item.language);\n });\n }\n });\n\n // Update state with all options\n setAllEventTypeOptions(\n Array.from(allEventTypes).map((value) => ({ value, label: value }))\n );\n\n setAllLanguageOptions(\n Array.from(allLanguages).map((value) => ({ value, label: value }))\n );\n }, [locale]);\n\n // Fetch all options when component mounts\n useEffect(() => {\n fetchAllOptions();\n }, [fetchAllOptions]);\n\n const removeFilter = (\n filterType: keyof FiltersProps,\n valueToRemove: string\n ) => {\n if (filterType === 'eventTypes') {\n setEventTypeFilter((prev) =>\n prev.filter((item) => item !== valueToRemove)\n );\n } else if (filterType === 'languages') {\n setLanguageFilter((prev) =>\n prev.filter((item) => item !== valueToRemove)\n );\n }\n };\n\n useEffect(() => {\n mutate(getUpcomingKey);\n }, [eventTypeFilter, languageFilter, sort]);\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n {slice.upcomingTitle ? (\n <>\n <DefaultSectionHeader\n title={slice.upcomingTitle}\n text={slice.upcomingDescription}\n titleProps={{ maxW: '3xl' }}\n textProps={{ maxW: '3xl' }}\n />\n <Spacer height=\"10\" />\n </>\n ) : (\n <></>\n )}\n {slice.filterSearch && (upcomingEvents || pastEvents) ? (\n <>\n <Flex\n justifyContent=\"space-between\"\n direction={['column-reverse', null, null, 'row']}\n alignItems=\"baseline\"\n gap=\"4\"\n >\n <Flex\n direction=\"column\"\n width=\"full\"\n justifyContent=\"start\"\n gap=\"4\"\n >\n {/* Filter section */}\n <Flex\n direction={['column', null, null, 'row']}\n gap=\"4\"\n justifyContent=\"start\"\n >\n <Box position=\"relative\" width={['full', null, null, '56']}>\n <Select\n isMultiple={true}\n isSearchable={true}\n id=\"eventTypeFilter\"\n size=\"md\"\n placeholder={formatMessage({\n id: 'sections.events.eventsFilter.eventType',\n })}\n searchPlaceholder={formatMessage({\n id: 'sections.events.eventsFilter.searchPlaceholder',\n })}\n options={allEventTypeOptions}\n value={eventTypeFilter ?? []}\n onChange={(selected: string[]) => {\n setEventTypeFilter(selected);\n }}\n />\n </Box>\n <Box position=\"relative\" width={['full', null, null, '56']}>\n <Select\n isMultiple={true}\n isSearchable={true}\n id=\"languageFilter\"\n size=\"md\"\n placeholder={formatMessage({\n id: 'sections.events.eventsFilter.language',\n })}\n searchPlaceholder={formatMessage({\n id: 'sections.events.eventsFilter.searchPlaceholder',\n })}\n options={allLanguageOptions}\n value={languageFilter ?? []}\n onChange={(selected: string[]) => {\n setLanguageFilter(selected);\n }}\n />\n </Box>\n </Flex>\n\n {/* Filter Tags */}\n <Box display=\"flex\" flexWrap=\"wrap\" minHeight=\"6\" gap=\"2\">\n {eventTypeFilter.map((eventType) => {\n const event = allEventTypeOptions.find(\n (option) => option.value === eventType\n );\n return (\n <BoemlyTag\n key={eventType}\n isClosable={true}\n onClose={() => removeFilter('eventTypes', eventType)}\n >\n {event?.label}\n </BoemlyTag>\n );\n })}\n\n {languageFilter.map((singleLanguage) => {\n const language = allLanguageOptions.find(\n (option) => option.value === singleLanguage\n );\n return (\n <BoemlyTag\n key={singleLanguage}\n isClosable={true}\n onClose={() =>\n removeFilter('languages', singleLanguage)\n }\n >\n {language?.label}\n </BoemlyTag>\n );\n })}\n </Box>\n </Flex>\n {/* Sort Section */}\n <Box display=\"flex\" gap=\"1px\" width=\"52\" alignItems=\"center\">\n <Text size=\"smLowNormal\" color=\"black\" width=\"20\">\n Sort by:\n </Text>\n <Select\n isMultiple={false}\n borderColor=\"white\"\n value={[sort[0]]}\n placeholder={sort[0]}\n onChange={(selected: string[]) => setSort(selected)}\n options={[\n {\n label: formatMessage({\n id: `sections.events.eventsFilter.sortBy.${Sort.NEWEST_FIRST}`,\n }),\n value: Sort.NEWEST_FIRST,\n },\n {\n label: formatMessage({\n id: `sections.events.eventsFilter.sortBy.${Sort.OLDEST_FIRST}`,\n }),\n value: Sort.OLDEST_FIRST,\n },\n ]}\n />\n </Box>\n </Flex>\n\n <Spacer height={['8', null, null, '16']} />\n </>\n ) : (\n <></>\n )}\n\n {(!upcomingEvents || upcomingEvents.length === 0) &&\n !isLoadingUpcoming ? (\n <Center>\n {formatMessage({ id: 'sections.events.noUpcomingEvents' })}\n </Center>\n ) : (\n // List of upcoming events\n <SimpleGrid\n columns={[1, null, null, null, null, 2]}\n columnGap=\"6\"\n gap=\"6\"\n flexShrink=\"0\"\n mb={['10', null, null, '20']}\n placeItems=\"center\"\n >\n {upcomingEvents.map((event: IStrapiData<StrapiEvent>) => (\n <Box key={event.id} width=\"full\" height=\"full\">\n <EventCard event={event.attributes} />\n </Box>\n ))}\n </SimpleGrid>\n )}\n <Flex justifyContent=\"center\">\n {!isLoadingUpcoming && canLoadMoreUpcoming && (\n <Button\n onClick={() => {\n loadMoreUpcoming();\n }}\n variant=\"solid\"\n loading={isLoadingMoreUpcoming}\n >\n {formatMessage({ id: 'sections.events.loadMore' })}\n </Button>\n )}\n </Flex>\n </Wrapper>\n\n <Spacer height={['10', null, null, '28']} />\n\n <Box background=\"primary.50\" pt={['8', null, null, '24']}>\n <Wrapper>\n <DefaultSectionHeader\n title={slice.pastTitle}\n text={slice.pastDescription}\n titleProps={{ maxW: '3xl' }}\n textProps={{ maxW: '3xl' }}\n />\n\n <Spacer height=\"10\" />\n\n {(!pastEvents || pastEvents.length === 0) && !isLoadingPast ? (\n <>\n <Center>\n {formatMessage({ id: 'sections.events.noPastEvents' })}\n </Center>\n <Spacer height=\"24\" />\n </>\n ) : (\n // List of past events\n <SimpleGrid\n columns={[1, null, null, null, null, 2]}\n columnGap=\"6\"\n gap=\"6\"\n flexShrink=\"0\"\n placeItems=\"center\"\n mb={['10', null, null, '20']}\n >\n {pastEvents.map((event: IStrapiData<StrapiEvent>) => (\n <Box key={event.id} height=\"full\" width=\"full\">\n <EventCard event={event.attributes} />\n </Box>\n ))}\n </SimpleGrid>\n )}\n <Flex justifyContent=\"center\">\n {!isLoadingPast && canLoadMorePast && (\n <Button\n mb=\"20\"\n onClick={() => {\n loadMorePast();\n }}\n variant=\"solid\"\n loading={isLoadingMorePast}\n >\n {formatMessage({ id: 'sections.events.loadMore' })}\n </Button>\n )}\n </Flex>\n </Wrapper>\n </Box>\n </DefaultSectionContainer>\n );\n};\n", "import React, { useContext, useState } from 'react';\nimport {\n Text,\n Box,\n Flex,\n Heading,\n Tooltip,\n useMediaQuery,\n Button,\n BoemlyTag,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiLinkButton from '../StrapiLinkButton';\nimport {\n BowlFoodIcon,\n CalendarBlankIcon,\n CaretDownIcon,\n CaretRightIcon,\n CaretUpIcon,\n ChalkboardTeacherIcon,\n ConfettiIcon,\n HandshakeIcon,\n HeadsetIcon,\n InfoIcon,\n LaptopIcon,\n MapPinLineIcon,\n PersonSimpleWalkIcon,\n ProjectorScreenChartIcon,\n StarIcon,\n UsersThreeIcon,\n WebcamIcon,\n} from '@phosphor-icons/react';\nimport getCountryFlag from '../../utils/getCountryFlag';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\nimport StrapiEvent, { EventType } from '../../models/strapi/StrapiEvent';\nimport { IntlContext } from '../ContextProvider';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport isSameDate from '../../utils/isSameDate';\n\nexport interface EventCardProps {\n event: StrapiEvent;\n}\n\nconst MAX_LENGTH = 120;\nconst LOCATION_MAX_LENGTH = 28;\n\nconst getEventIcon = (eventType: string): React.JSX.Element => {\n switch (eventType) {\n case EventType.WEBINAR:\n return <WebcamIcon size={12} />;\n case EventType.CONFERENCE:\n return <HeadsetIcon size={12} />;\n case EventType.MEET_UP:\n return <UsersThreeIcon size={12} />;\n case EventType.FOREST_WALK:\n return <PersonSimpleWalkIcon size={12} />;\n case EventType.PARTNER_EVENT:\n return <HandshakeIcon size={12} />;\n case EventType.LUNCH_AND_LEARN:\n return <BowlFoodIcon size={12} />;\n case EventType.FAIR:\n return <ChalkboardTeacherIcon size={12} />;\n case EventType.FESTIVAL:\n return <ConfettiIcon size={12} />;\n case EventType.ROADSHOW:\n return <ProjectorScreenChartIcon size={12} />;\n default:\n return <InfoIcon size={12} weight=\"fill\" />;\n }\n};\n\nexport const EventCard = ({ event }: EventCardProps): React.JSX.Element => {\n const { formatDate, formatNumber, formatMessage } = useContext(IntlContext);\n const [isExpanded, setIsExpanded] = useState(false);\n const [mobile] = useMediaQuery([BREAKPOINT_MD_QUERY]);\n\n const toggleText = () => {\n setIsExpanded(!isExpanded);\n };\n\n const isLocationTooLong =\n (event.location?.length ?? 0) >= LOCATION_MAX_LENGTH;\n\n return (\n <Box\n borderRadius={['xl', null, null, '2xl']}\n height=\"full\"\n width=\"full\"\n border=\"1px solid var(--boemly-colors-gray-200)\"\n background=\"white\"\n >\n <Box\n position=\"relative\"\n width=\"full\"\n height={['32', null, null, '44']}\n borderTopRadius={['xl', null, null, '2xl']}\n css={{\n '& span, div, img': {\n borderTopLeftRadius: 'inherit',\n borderTopRightRadius: 'inherit',\n },\n }}\n >\n <Image\n src={strapiMediaUrl(event.image?.img, 'medium')}\n alt={event.image?.alt}\n fill\n style={{\n objectFit: event.image?.objectFit || 'cover',\n }}\n />\n\n <Box\n position=\"absolute\"\n top={['6', null, null, '8']}\n right={['6', null, null, '8']}\n zIndex=\"1\"\n width={['12', null, null, '16']}\n height={['12', null, null, '16']}\n >\n <Image\n src={strapiMediaUrl(event.logo.img, 'medium')}\n alt={event.logo.alt}\n fill\n style={{\n objectFit: event.logo.objectFit || 'contain',\n borderRadius: 'var(--boemly-radii-md)',\n border:\n '1px solid, var(--whiteAlpha-700, rgba(255, 255, 255, 0.64))',\n }}\n />\n </Box>\n </Box>\n <Flex\n flexDir=\"column\"\n p={['6', null, null, '8']}\n h=\"calc(var(--boemly-sizes-full) - var(--boemly-sizes-44))\"\n >\n <Flex flexDir=\"row\" mb=\"4\" gap=\"2\" flexWrap=\"wrap\">\n {event.recommended ? (\n <Flex mb={['2', null, null, '0']}>\n <BoemlyTag backgroundColor=\"green.600\">\n <Flex alignItems=\"center\" gap=\"1\" whiteSpace=\"nowrap\">\n <StarIcon size={12} weight=\"fill\" color=\"white\" />\n <Text size=\"xsLowBold\" color=\"white\">\n {formatMessage({\n id: 'sections.eventCard.recommendedEvent',\n })}\n </Text>\n </Flex>\n </BoemlyTag>\n </Flex>\n ) : (\n <></>\n )}\n <Flex flexWrap=\"wrap\" gap=\"2\">\n {event.eventTypes.map((e) => (\n <BoemlyTag key={e.id}>\n <Flex alignItems=\"center\" gap=\"1\" whiteSpace=\"nowrap\">\n {getEventIcon(e.eventType)}\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {formatMessage({\n id: `sections.eventCard.eventType.${e.eventType\n .toLowerCase()\n .replace(/\\s+/g, '')}`,\n })}\n </Text>\n </Flex>\n </BoemlyTag>\n ))}\n {event.languages.map(({ id, language, countryCode }) => (\n <BoemlyTag key={id}>\n <Flex alignItems=\"center\" gap=\"1\" whiteSpace=\"nowrap\">\n {getCountryFlag(countryCode)}\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {language}\n </Text>\n </Flex>\n </BoemlyTag>\n ))}\n </Flex>\n </Flex>\n <Heading>{event.title}</Heading>\n <Flex\n gap={isLocationTooLong ? '2' : ['2', null, null, '6']}\n alignItems={mobile || isLocationTooLong ? 'flex-start' : 'center'}\n my=\"4\"\n flexDir={mobile || isLocationTooLong ? 'column' : 'row'}\n >\n {event.online && (\n <Flex gap=\"2\" alignItems=\"center\">\n <LaptopIcon\n size={20}\n color={'var(--boemly-colors-primary-700)'}\n />\n <Text size={mobile ? 'xsLowBold' : 'smLowBold'}>Online</Text>\n </Flex>\n )}\n {event.location && (\n <Flex gap=\"2\" alignItems=\"center\">\n <MapPinLineIcon\n size={20}\n color={'var(--boemly-colors-primary-700)'}\n weight=\"fill\"\n />\n <Text size={mobile ? 'xsLowBold' : 'smLowBold'}>\n {event.location}\n </Text>\n </Flex>\n )}\n <Flex alignItems=\"center\" gap=\"2\">\n <CalendarBlankIcon\n size={20}\n color={'var(--boemly-colors-primary-700)'}\n />\n <Text size={mobile ? 'xsLowBold' : 'smLowBold'}>\n {formatDate(event.start, {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n })}\n\n {!event.allDay &&\n ` | ${formatNumber(new Date(event.start).getUTCHours(), {\n minimumIntegerDigits: 2,\n })}:${formatNumber(new Date(event.start).getUTCMinutes(), {\n minimumIntegerDigits: 2,\n })}`}\n\n {event.end &&\n !isSameDate(new Date(event.start), new Date(event.end)) && (\n <>\n {' - '}\n {formatDate(event.end, {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n })}\n\n {!event.allDay &&\n ` | ${formatNumber(new Date(event.end).getUTCHours(), {\n minimumIntegerDigits: 2,\n })}:${formatNumber(new Date(event.end).getUTCMinutes(), {\n minimumIntegerDigits: 2,\n })}`}\n </>\n )}\n\n {event.end &&\n !event.allDay &&\n isSameDate(new Date(event.start), new Date(event.end)) &&\n ` - ${formatNumber(new Date(event.end).getUTCHours(), {\n minimumIntegerDigits: 2,\n })}:${formatNumber(new Date(event.end).getUTCMinutes(), {\n minimumIntegerDigits: 2,\n })}`}\n </Text>\n </Flex>\n </Flex>\n <Text\n mb={mobile ? '0' : '7'}\n size={mobile ? 'xsRegularNormal' : 'smRegularNormal'}\n >\n {isExpanded || !mobile\n ? event.description\n : `${event.description.substring(0, MAX_LENGTH)}...`}\n </Text>\n {event.description.length > MAX_LENGTH && mobile && (\n <Flex justifyContent=\"flex-start\">\n <Button mt=\"2\" onClick={toggleText} variant=\"link\">\n {formatMessage(\n isExpanded\n ? {\n id: 'sections.eventCard.buttonShowLess',\n }\n : { id: 'sections.eventCard.buttonShowMore' }\n )}\n {isExpanded ? (\n <CaretUpIcon size=\"12\" />\n ) : (\n <CaretDownIcon size=\"12\" />\n )}\n </Button>\n </Flex>\n )}\n <Flex\n mt={mobile ? '7' : 'auto'}\n justifyContent={mobile ? undefined : 'space-between'}\n flexDir={mobile ? 'column-reverse' : 'row'}\n gap={mobile ? '4' : '0'}\n >\n {event.button && (\n <Flex width={mobile ? 'full' : 'auto'}>\n <StrapiLinkButton\n key={event.button.id}\n size=\"md\"\n variant={event.buttonVariant}\n link={event.button}\n rightIcon={<CaretRightIcon size=\"10\" />}\n width=\"full\"\n component=\"EventCard\"\n />\n </Flex>\n )}\n {event.speakers && event.speakers.length > 0 && (\n <Flex flexDir=\"row\" gap=\"2\">\n {event.speakers.map((speaker) => (\n <Box key={speaker.id}>\n <Box\n width={['10', null, null, '12']}\n height={['10', null, null, '12']}\n position=\"relative\"\n borderRadius=\"2xl\"\n >\n <Tooltip content={speaker.name}>\n <Image\n src={strapiMediaUrl(speaker.image.img, 'medium')}\n alt={speaker.image.alt}\n fill\n style={{\n objectFit: speaker.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-md)',\n border:\n '1px solid, var(--whiteAlpha-700, rgba(255, 255, 255, 0.64))',\n }}\n />\n </Tooltip>\n </Box>\n </Box>\n ))}\n </Flex>\n )}\n </Flex>\n </Flex>\n </Box>\n );\n};\n", "const getCountryFlag = (countryCode: string): string => {\n return countryCode\n .toUpperCase()\n .replace(/./g, (char) => String.fromCodePoint(char.charCodeAt(0) + 127397));\n};\nexport default getCountryFlag;\n", "const isSameDate = (date1: Date, date2: Date): boolean => {\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n );\n};\n\nexport default isSameDate;\n", "import { EventCard } from './EventCard';\n\nexport default EventCard;\n", "import useSWRInfinite, { SWRInfiniteKeyLoader } from 'swr/infinite';\nimport { useCallback, useMemo } from 'react';\nimport UseInfiniteDataHookProps from './UseInfiniteDataHookProps';\nimport SWRData from '../SWRData';\nimport IStrapiResponse from '../../models/strapi/IStrapiResponse';\nimport StrapiEvent from '../strapi/StrapiEvent';\n\nconst useEvents = ({\n getKey,\n batchSize,\n}: {\n getKey: SWRInfiniteKeyLoader;\n batchSize: number;\n}): UseInfiniteDataHookProps<IStrapiResponse<StrapiEvent[]>[]> => {\n const { data, isLoading, setSize, size, mutate } = useSWRInfinite<\n SWRData<IStrapiResponse<StrapiEvent[]>>\n >(getKey, { revalidateFirstPage: false, revalidateAll: false });\n\n const count: number | undefined = useMemo(() => {\n return data?.[0]?.body?.meta?.pagination?.total || 0;\n }, [data]);\n\n const isLoadingMore = useMemo(\n () => !!(size > 0 && data && typeof data[size - 1] === 'undefined'),\n [size, data]\n );\n\n const loadMore = useCallback(() => setSize(size + 1), [setSize, size]);\n\n const canLoadMore = useMemo(\n () => count !== undefined && size * batchSize < count,\n [count, size, batchSize]\n );\n\n return {\n data: data as any,\n isLoading,\n isLoadingMore,\n canLoadMore,\n refetch: mutate,\n loadMore,\n count,\n };\n};\n\nexport default useEvents;\n", "import { Events } from './Events';\n\nexport default Events;\n", "import { useRouter } from 'next/router';\nimport React, { useEffect } from 'react';\nimport { buildRedirectUrl } from '../../utils/buildRedirectUrl';\n\nexport interface RedirectProps {\n slice: {\n url: string;\n };\n}\n\nexport const Redirect = ({ slice }: RedirectProps): React.JSX.Element => {\n const router = useRouter();\n\n useEffect(() => {\n if (!slice.url) return;\n\n // Build redirect URL\n const redirectUrl = buildRedirectUrl(\n slice.url,\n router.asPath,\n router.query\n );\n\n // Redirect\n router.replace(redirectUrl);\n }, [slice.url, router]);\n\n return <></>;\n};\n", "import type { ParsedUrlQuery } from 'querystring';\n\nexport function buildRedirectUrl(\n url: string,\n asPath: string,\n query: ParsedUrlQuery\n): string {\n if (!url) return '';\n\n // Parse the base target URL\n const target = new URL(url, window.location.origin);\n\n // Merge existing params from the target\n const mergedParams = new URLSearchParams(target.search);\n\n // Add absolute source\n const absoluteSource = `${window.location.origin}${asPath}`;\n mergedParams.set('source', absoluteSource);\n\n // Forward utm_* params from the current page\n for (const [key, value] of Object.entries(query)) {\n if (key.startsWith('utm_') && typeof value === 'string') {\n mergedParams.set(key, value);\n }\n }\n\n // Add timestamp\n mergedParams.set('ts', Date.now().toString());\n\n // Build final merged URL\n target.search = mergedParams.toString();\n\n return target.toString();\n}\n", "import { Redirect } from './Redirect';\n\nexport default Redirect;\n", "import React from 'react';\nimport FullWidthImage from '../../slices/FullWidthImage';\nimport Hero from '../../slices/Hero';\nimport IconGrid from '../../slices/IconGrid';\nimport ImageGrid from '../../slices/ImageGrid';\nimport ImageTextSequence from '../../slices/ImageTextSequence';\nimport LeftTextRightCard from '../../slices/LeftTextRightCard';\nimport LogoGridWithText from '../../slices/LogoGridWithText';\nimport MapHero from '../../slices/MapHero';\nimport QAndA from '../../slices/QAndA';\nimport QuoteCards from '../../slices/QuoteCards';\nimport RichTextSection from '../../slices/RichTextSection';\nimport Steps from '../../slices/Steps';\nimport TextCardGrid from '../../slices/TextCardGrid';\nimport TextCarousel from '../../slices/TextCarousel';\nimport TextWithTextCards from '../../slices/TextWithTextCards';\nimport TextWithCard from '../../slices/TextWithCard';\nimport LinkCardsGrid from '../../slices/LinkCardsGrid';\nimport SmallHero from '../../slices/SmallHero';\nimport Blog from '../../slices/Blog';\nimport StrapiBlogPost from '../../models/strapi/StrapiBlogPost';\nimport ProjectsGrid from '../../slices/ProjectsGrid';\nimport ProjectsMap from '../../slices/ProjectsMap';\nimport Video from '../../slices/Video';\nimport FullWidthHighlightQuote from '../../slices/FullWidthHighlightQuote';\nimport FullWidthImageSlider from '../../slices/FullWidthImageSlider';\nimport SideBySideImages from '../../slices/SideBySideImages';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport Cta from '../../slices/Cta';\nimport CtaOnly from '../../slices/CtaOnly';\nimport Glossary from '../../slices/Glossary';\nimport ShopCheckout from '../../slices/ShopCheckout';\nimport Facts from '../../slices/Facts';\nimport BlogCards from '../../slices/BlogCards';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport ProjectFacts from '../../slices/ProjectFacts';\nimport CustomerStories from '../../slices/CustomerStories';\nimport StrapiCustomerStory from '../../models/strapi/StrapiCustomerStory';\nimport Comparison from '../../slices/Comparison';\nimport CarouselMarqueeBanner from '../../slices/CarouselMarqueeBanner';\nimport Locale from '../../models/Locale';\nimport { ContextProvider } from '../ContextProvider';\nimport Timeline from '../../slices/Timeline';\nimport Events from '../../slices/Events';\nimport Redirect from '../../slices/Redirect';\nimport { AnalyticsFunction } from '../ContextProvider/ContextProvider';\n\nexport interface CustomSliceProps {\n slice: any;\n id: string;\n}\n\nexport interface SliceRendererProps {\n slices: any;\n blogPosts: IStrapiData<StrapiBlogPost>[];\n projects: PortfolioProject[];\n customerStories: IStrapiData<StrapiCustomerStory>[];\n locale?: Locale;\n CustomSlice?: ({ slice, id }: CustomSliceProps) => React.JSX.Element;\n analyticsFunction?: AnalyticsFunction;\n}\n\nexport const SliceRenderer = ({\n slices,\n blogPosts,\n projects,\n customerStories,\n locale = 'en',\n CustomSlice,\n analyticsFunction,\n}: SliceRendererProps): React.JSX.Element => (\n <ContextProvider locale={locale} analyticsFunction={analyticsFunction}>\n {slices.map((slice: any) => {\n switch (slice.__component) {\n case 'sections.hero':\n return (\n <Hero key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.map-hero':\n return (\n <MapHero key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.rich-text':\n return (\n <RichTextSection\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.left-text-right-card':\n return (\n <LeftTextRightCard\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-with-card':\n return (\n <TextWithCard\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n projects={projects}\n />\n );\n case 'sections.logo-grid-with-text':\n return (\n <LogoGridWithText\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.quote-cards':\n return (\n <QuoteCards\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.q-and-a':\n return (\n <QAndA key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.image-grid':\n return (\n <ImageGrid key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.full-width-image':\n return (\n <FullWidthImage\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-with-text-cards':\n return (\n <TextWithTextCards\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-card-grid':\n return (\n <TextCardGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.icon-grid':\n return (\n <IconGrid key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.image-text-sequence':\n return (\n <ImageTextSequence\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.steps':\n return (\n <Steps key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.text-carousel':\n return (\n <TextCarousel\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.link-cards-grid':\n return (\n <LinkCardsGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.small-hero':\n return (\n <SmallHero\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n theme=\"dark\"\n />\n );\n case 'sections.small-hero-light':\n return (\n <SmallHero\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n theme=\"light\"\n />\n );\n case 'sections.project-facts':\n return (\n <ProjectFacts\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n project={projects.find((p) => p.id === slice.projectId)}\n />\n );\n case 'sections.projects-grid':\n return (\n <ProjectsGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n projects={projects}\n />\n );\n case 'sections.projects-map':\n return (\n <ProjectsMap\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.video':\n return (\n <Video key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.full-width-highlight-quote':\n return (\n <FullWidthHighlightQuote\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.full-width-image-slider':\n return (\n <FullWidthImageSlider\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.side-by-side-images':\n return (\n <SideBySideImages\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.cta-only':\n return (\n <CtaOnly key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.cta':\n return <Cta key={`${slice.__component}-${slice.id}`} slice={slice} />;\n case 'sections.shop-checkout':\n return (\n <ShopCheckout\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.facts':\n return (\n <Facts key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.blog-cards':\n return (\n <BlogCards\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n blogPosts={blogPosts}\n />\n );\n case 'sections.blog':\n return (\n <Blog\n key={`${slice.__component}-${slice.id}`}\n slice={{\n ...slice,\n blog_posts: slice.blog_posts.data,\n }}\n blogPosts={blogPosts}\n />\n );\n case 'sections.glossary':\n return (\n <Glossary\n key={`${slice.__component}-${slice.id}`}\n slice={{\n ...slice,\n glossary_items: slice.glossary_items.data,\n }}\n />\n );\n case 'sections.customer-stories':\n return (\n <CustomerStories\n key={`${slice.__component}-${slice.id}`}\n slice={{\n ...slice,\n customer_stories: slice.customer_stories.data,\n }}\n customerStories={customerStories}\n />\n );\n case 'sections.comparison':\n return (\n <Comparison\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.timeline':\n return (\n <Timeline key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.carousel-marquee-banner':\n return (\n <CarouselMarqueeBanner\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.events':\n return (\n <Events key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.redirect':\n return (\n <Redirect key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n default:\n if (CustomSlice) {\n return (\n <CustomSlice\n key={`${slice.__component}-${slice.id}`}\n id={slice.__component}\n slice={slice}\n />\n );\n }\n\n return (\n <div key={`${slice.__component}-${slice.id}`}>\n Slice component not supported\n </div>\n );\n }\n })}\n </ContextProvider>\n);\n"],
5
+ "mappings": "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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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",
6
6
  "names": ["axios", "qs", "import_axios", "import_qs", "import_axios_cache_interceptor", "axios", "qs", "cache", "cache", "cache", "cache", "import_jsx_runtime", "Head", "import_react", "import_boemly", "import_image", "import_react", "import_boemly", "import_boemly", "import_head", "import_jsx_runtime", "Head", "Image", "import_jsx_runtime", "import_jsx_runtime", "Image", "import_boemly", "import_image", "import_react", "import_boemly", "import_react", "import_boemly", "import_react", "messagesDe", "messages_de_default", "messagesDe", "messages_de_default", "messagesDe", "messages_de_default", "messagesDe", "messages_de_default", "messagesDe", "messages_de_default", "messagesDe", "messages_de_default", "messagesDe", "messages_de_default", "messagesDe", "messages_de_default", "messagesDe", "messages_de_default", "messagesDe", "messages_de_default", "messagesDe", "messages_de_default", "messagesDe", "messages_de_default", "messagesDe", "messages_de_default", "messagesDe", "messages_de_default", "messagesDe", "messages_de_default", "messagesDe", "messages_de_default", "messages_de_default", "messagesEn", "messages_en_default", "messagesEn", "messages_en_default", "messagesEn", "messages_en_default", "messagesEn", "messages_en_default", "messagesEn", "messages_en_default", "messagesDe", "messages_en_default", "messagesEn", "messages_en_default", "messagesEn", "messages_en_default", "messagesEn", "messages_en_default", "messagesDe", "messages_en_default", "messagesEn", "messages_en_default", "messagesEn", "messages_en_default", "messagesEn", "messages_en_default", "messagesEn", "messages_en_default", "messagesDe", "messages_en_default", "messagesEn", "messages_en_default", "messages_en_default", "import_jsx_runtime", "import_jsx_runtime", "Link", "import_jsx_runtime", "Image", "import_boemly", "import_image", "import_jsx_runtime", "Image", "import_boemly", "import_image", "import_react", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "Image", "import_react", "import_boemly", "import_image", "import_jsx_runtime", "Image", "import_react", "import_boemly", "import_image", "import_jsx_runtime", "Image", "import_boemly", "import_image", "import_react", "import_jsx_runtime", "Image", "import_boemly", "import_image", "import_boemly", "styled", "import_jsx_runtime", "Image", "import_react", "import_boemly", "import_router", "import_image", "import_jsx_runtime", "Image", "import_react", "import_image", "import_boemly", "import_router", "import_jsx_runtime", "Image", "import_boemly", "import_jsx_runtime", "import_react", "import_boemly", "import_image", "import_core", "import_router", "import_jsx_runtime", "Image", "import_boemly", "import_image", "import_react", "import_jsx_runtime", "Image", "import_react", "import_boemly", "import_image", "import_styled", "import_boemly", "styled", "import_core", "import_framer_motion", "import_react", "import_router", "import_jsx_runtime", "Image", "import_react", "import_boemly", "import_image", "import_router", "import_jsx_runtime", "Image", "import_boemly", "import_image", "import_react", "import_boemly", "import_react", "import_image", "import_react", "import_boemly", "import_link", "import_jsx_runtime", "variants", "NextLink", "CreditsAvailableBadge_default", "import_jsx_runtime", "Image", "CreditsAvailableBadge_default", "import_jsx_runtime", "Image", "import_link", "import_boemly", "import_react", "import_jsx_runtime", "Link", "import_boemly", "import_image", "import_jsx_runtime", "Image", "import_react", "import_boemly", "import_image", "import_link", "import_styled", "import_boemly", "styled", "import_jsx_runtime", "Link", "Image", "import_boemly", "import_link", "import_jsx_runtime", "Link", "import_react", "import_boemly", "import_react", "cache", "import_jsx_runtime", "mapboxgl", "debounce", "import_react", "import_boemly", "import_core", "import_jsx_runtime", "import_boemly", "import_jsx_runtime", "import_react", "import_boemly", "import_image", "import_core", "import_framer_motion", "import_framer_motion", "import_styled", "import_boemly", "styled", "ImageContainer", "import_jsx_runtime", "ITEM_GAP", "MAX_OFFSET_RIGHT", "ImageContainer", "Image", "import_boemly", "import_image", "import_jsx_runtime", "Image", "import_react", "import_boemly", "import_image", "import_jsx_runtime", "VARIANTS", "Image", "import_boemly", "import_jsx_runtime", "import_react", "import_boemly", "import_jsx_runtime", "import_react", "import_boemly", "import_router", "import_jsx_runtime", "import_boemly", "import_jsx_runtime", "VARIANTS", "import_react", "import_boemly", "import_image", "import_link", "import_jsx_runtime", "VARIANTS", "Link", "Image", "import_react", "import_boemly", "import_react", "import_boemly", "import_formik", "import_router", "import_image", "import_jsx_runtime", "Image", "SmallCheckout_default", "import_react", "import_boemly", "import_image", "import_jsx_runtime", "Image", "CreditsAvailableBadge_default", "import_react", "import_boemly", "import_link", "import_jsx_runtime", "Link", "import_boemly", "import_image", "import_jsx_runtime", "Image", "import_jsx_runtime", "SmallCheckout_default", "import_boemly", "import_boemly", "import_react", "import_image", "import_link", "import_jsx_runtime", "Image", "Link", "import_boemly", "import_react", "import_image", "import_link", "import_jsx_runtime", "Image", "Link", "import_boemly", "import_image", "import_link", "import_jsx_runtime", "Link", "Image", "import_jsx_runtime", "import_react", "import_boemly", "import_image", "import_react", "import_react", "import_boemly", "import_jsx_runtime", "import_jsx_runtime", "VARIANTS", "Image", "import_react", "import_boemly", "import_image", "import_core", "import_framer_motion", "import_styled", "CarouselInnerContainer", "styled", "import_jsx_runtime", "useEmblaCarousel", "AutoScroll", "Image", "CarouselInnerContainer", "import_react", "import_boemly", "import_image", "import_react_intl", "import_react", "import_jsx_runtime", "Image", "import_boemly", "import_react", "import_react", "import_boemly", "import_image", "import_react", "import_jsx_runtime", "Image", "import_react", "mutate", "useSWRInfinite", "import_internal", "import_jsx_runtime", "import_router", "import_react", "import_jsx_runtime", "import_jsx_runtime"]
7
7
  }