@treely/strapi-slices 8.0.4 → 8.1.0

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.
Files changed (37) hide show
  1. package/dist/components/CertificationBadge/CertificationBadge.d.ts +7 -0
  2. package/dist/components/CertificationBadge/CertificationBadge.d.ts.map +1 -0
  3. package/dist/components/CertificationBadge/index.d.ts +3 -0
  4. package/dist/components/CertificationBadge/index.d.ts.map +1 -0
  5. package/dist/components/CertificationBadge/messages.de.d.ts +6 -0
  6. package/dist/components/CertificationBadge/messages.de.d.ts.map +1 -0
  7. package/dist/components/CertificationBadge/messages.en.d.ts +6 -0
  8. package/dist/components/CertificationBadge/messages.en.d.ts.map +1 -0
  9. package/dist/components/CreditsAvailableBadge/CreditsAvailableBadge.d.ts +2 -1
  10. package/dist/components/CreditsAvailableBadge/CreditsAvailableBadge.d.ts.map +1 -1
  11. package/dist/components/ProjectGridCard/ProjectGridCard.d.ts.map +1 -1
  12. package/dist/components/ProjectGridCardV2/ProjectGridCardV2.d.ts +7 -0
  13. package/dist/components/ProjectGridCardV2/ProjectGridCardV2.d.ts.map +1 -0
  14. package/dist/components/ProjectGridCardV2/index.d.ts +3 -0
  15. package/dist/components/ProjectGridCardV2/index.d.ts.map +1 -0
  16. package/dist/components/SliceRenderer/SliceRenderer.d.ts.map +1 -1
  17. package/dist/index.cjs +1208 -958
  18. package/dist/index.cjs.map +4 -4
  19. package/dist/index.js +1125 -875
  20. package/dist/index.js.map +4 -4
  21. package/dist/rootMessages.de.d.ts +2 -2
  22. package/dist/rootMessages.en.d.ts +2 -2
  23. package/dist/slices/Facts/Facts.d.ts.map +1 -1
  24. package/dist/slices/HeroWithHighlights/HeroWithHighlights.d.ts +17 -0
  25. package/dist/slices/HeroWithHighlights/HeroWithHighlights.d.ts.map +1 -0
  26. package/dist/slices/HeroWithHighlights/index.d.ts +3 -0
  27. package/dist/slices/HeroWithHighlights/index.d.ts.map +1 -0
  28. package/dist/slices/ProjectsGridV2/ProjectsGridV2.d.ts +13 -0
  29. package/dist/slices/ProjectsGridV2/ProjectsGridV2.d.ts.map +1 -0
  30. package/dist/slices/ProjectsGridV2/index.d.ts +3 -0
  31. package/dist/slices/ProjectsGridV2/index.d.ts.map +1 -0
  32. package/dist/utils/getMessages.d.ts +4 -4
  33. package/package.json +1 -1
  34. package/dist/components/ProjectGridCard/messages.de.d.ts +0 -6
  35. package/dist/components/ProjectGridCard/messages.de.d.ts.map +0 -1
  36. package/dist/components/ProjectGridCard/messages.en.d.ts +0 -6
  37. package/dist/components/ProjectGridCard/messages.en.d.ts.map +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 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 FontsCustomization from './constants/fontCustomizations';\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 // Constants\n FontsCustomization,\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 FontsCustomization, {\n FONT_CUSTOMIZATIONS,\n} 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 colors?: Record<string, any>;\n fonts?: FontsCustomization;\n}\n\nexport const ContextProvider: React.FC<ContextProviderProps> = ({\n children,\n locale,\n analyticsFunction,\n colors,\n fonts,\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={fonts || FONT_CUSTOMIZATIONS} colors={colors}>\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 '../../components/ContextProvider';\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';\nimport FontsCustomization from '../../constants/fontCustomizations';\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 colors?: Record<string, any>;\n fonts?: FontsCustomization;\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 colors,\n fonts,\n CustomSlice,\n analyticsFunction,\n}: SliceRendererProps): React.JSX.Element => (\n <ContextProvider\n locale={locale}\n analyticsFunction={analyticsFunction}\n colors={colors}\n fonts={fonts}\n >\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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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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",
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", "colors", "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", "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", "colors"]
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/CertificationBadge/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/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/CertificationBadge/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/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/CertificationBadge/CertificationBadge.tsx", "../src/components/CertificationBadge/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/ProjectsGridV2/ProjectsGridV2.tsx", "../src/components/ProjectGridCardV2/ProjectGridCardV2.tsx", "../src/utils/getCountryFlag.ts", "../src/components/ProjectGridCardV2/index.ts", "../src/slices/ProjectsGridV2/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/isSameDate.ts", "../src/components/EventCard/index.ts", "../src/models/hooks/useEvents.ts", "../src/slices/Events/index.ts", "../src/slices/HeroWithHighlights/HeroWithHighlights.tsx", "../src/slices/HeroWithHighlights/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 FontsCustomization from './constants/fontCustomizations';\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 // Constants\n FontsCustomization,\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 FontsCustomization, {\n FONT_CUSTOMIZATIONS,\n} 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 colors?: Record<string, any>;\n fonts?: FontsCustomization;\n}\n\nexport const ContextProvider: React.FC<ContextProviderProps> = ({\n children,\n locale,\n analyticsFunction,\n colors,\n fonts,\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={fonts || FONT_CUSTOMIZATIONS} colors={colors}>\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", "export default {\n 'components.certificationBadge.certified': 'Zertifiziert, {year}',\n 'components.certificationBadge.certificationInProgress':\n 'Zertifizierung ist in Arbeit',\n};\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 '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 certificationBadgeMessagesDe from './components/CertificationBadge/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 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 ...certificationBadgeMessagesDe,\n ...creditsAvailableBadgeMessagesDe,\n ...eventCardMessagesDe,\n ...portfolioDocumentsDownloadListMessagesDe,\n ...portfolioProjectInfoMessagesDe,\n ...portfolioSmallCheckoutMessagesDe,\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", "export default {\n 'components.certificationBadge.certified': 'Certified, {year}',\n 'components.certificationBadge.certificationInProgress':\n 'Certification in progress',\n};\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 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 certificationBadgeMessagesEn from './components/CertificationBadge/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 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 ...certificationBadgeMessagesEn,\n ...creditsAvailableBadgeMessagesEn,\n ...eventCardMessagesEn,\n ...portfolioDocumentsDownloadListMessagesEn,\n ...portfolioProjectInfoMessagesEn,\n ...portfolioSmallCheckoutMessagesEn,\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 CertificationBadge from '../../components/CertificationBadge';\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 } = 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 <CertificationBadge certificationDate={project.certificationDate} />\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 { useContext } from 'react';\nimport { BoemlyTag, Flex, Text } from 'boemly';\nimport NextLink from 'next/link';\nimport { ShoppingCartIcon } from '@phosphor-icons/react';\nimport { IntlContext } from '../ContextProvider';\nimport { CreditAvailability } from '../../models/fpm/FPMProject';\n\nexport interface CreditsAvailableBadgeProps {\n status: CreditAvailability;\n href?: string;\n variant?: 'default' | 'withIcon';\n}\n\nconst CreditsAvailableBadge = ({\n status,\n href,\n variant = 'default',\n}: CreditsAvailableBadgeProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n const variants: Record<\n CreditAvailability,\n {\n message: string;\n color: string;\n withIconColor?: string;\n }\n > = {\n [CreditAvailability.CREDITS_AVAILABLE]: {\n message: formatMessage({\n id: 'components.creditsAvailableBadge.text.yes',\n }),\n color: 'primary.800',\n withIconColor: 'primary.700',\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 config = variants[status];\n\n const backgroundColor =\n variant === 'withIcon'\n ? config.withIconColor || config.color\n : config.color;\n\n const defaultBadge = (\n <BoemlyTag backgroundColor={backgroundColor}>\n <Text color=\"white\" size=\"xsLowBold\">\n {config.message}\n </Text>\n </BoemlyTag>\n );\n\n const withIconBadge = (\n <BoemlyTag backgroundColor={backgroundColor} borderRadius=\"full\">\n <Flex alignItems=\"center\" gap=\"2\">\n <ShoppingCartIcon size={16} color=\"white\" weight=\"bold\" />\n <Text size=\"smRegularNormalBold\" color=\"white\">\n {config.message}\n </Text>\n </Flex>\n </BoemlyTag>\n );\n\n const badge = variant === 'withIcon' ? withIconBadge : defaultBadge;\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 { useContext } from 'react';\nimport { BoemlyTag, Flex, Text } from 'boemly';\nimport { SealCheckIcon } from '@phosphor-icons/react';\nimport { IntlContext } from '../ContextProvider';\n\nexport interface CertificationBadgeProps {\n certificationDate?: string | Date;\n variant?: 'default' | 'withIcon';\n}\n\nconst CertificationBadge = ({\n certificationDate,\n variant = 'default',\n}: CertificationBadgeProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n const isCertified = !!certificationDate;\n\n const defaultBadge = (\n <BoemlyTag backgroundColor=\"gray.100\">\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {isCertified\n ? formatMessage(\n { id: 'components.certificationBadge.certified' },\n { year: new Date(certificationDate).getFullYear() }\n )\n : formatMessage({\n id: 'components.certificationBadge.certificationInProgress',\n })}\n </Text>\n </BoemlyTag>\n );\n\n const withIconBadge = isCertified ? (\n <BoemlyTag backgroundColor=\"primary.700\" borderRadius=\"full\">\n <Flex alignItems=\"center\" gap=\"2\">\n <SealCheckIcon size={16} color=\"white\" weight=\"bold\" />\n <Text size=\"smRegularNormalBold\" color=\"white\">\n {formatMessage(\n { id: 'components.certificationBadge.certified' },\n { year: new Date(certificationDate).getFullYear() }\n )}\n </Text>\n </Flex>\n </BoemlyTag>\n ) : (\n <BoemlyTag backgroundColor=\"gray.100\" borderRadius=\"full\">\n <Flex alignItems=\"center\" gap=\"2\">\n <SealCheckIcon size={16} color=\"gray.800\" weight=\"bold\" />\n <Text size=\"smRegularNormalBold\" color=\"gray.800\">\n {formatMessage({\n id: 'components.certificationBadge.certificationInProgress',\n })}\n </Text>\n </Flex>\n </BoemlyTag>\n );\n\n return variant === 'withIcon' ? withIconBadge : defaultBadge;\n};\n\nexport default CertificationBadge;\n", "import CertificationBadge from './CertificationBadge';\n\nexport default CertificationBadge;\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 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 ProjectGridCardV2 from '../../components/ProjectGridCardV2';\n\nexport interface ProjectsGridV2Props {\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 ProjectsGridV2: React.FC<ProjectsGridV2Props> = ({\n projects,\n slice,\n}: ProjectsGridV2Props) => {\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, 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 maxWidth=\"xs\"\n >\n <ProjectGridCardV2 project={project} />\n </Box>\n </ConditionalWrapper>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { BoemlyTag, Box, Flex, Heading, Text } from 'boemly';\nimport React, { useContext } from 'react';\nimport Image from 'next/image';\nimport { MapPinIcon, ArrowsOutIcon } from '@phosphor-icons/react';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport { FORMAT_AS_HECTARE_CONFIG } from '../../constants/formatter';\nimport { IntlContext } from '../ContextProvider';\nimport CreditsAvailableBadge from '../CreditsAvailableBadge';\nimport CertificationBadge from '../CertificationBadge';\nimport getCountryFlag from '../../utils/getCountryFlag';\n\nexport interface ProjectGridCardV2Props {\n project: PortfolioProject;\n}\n\nexport const ProjectGridCardV2 = ({\n project,\n}: ProjectGridCardV2Props): React.JSX.Element => {\n const { formatNumber } = useContext(IntlContext);\n\n return (\n <Box height=\"full\" borderRadius=\"lg\" boxShadow=\"sm\" overflow=\"hidden\">\n <Flex flexDir=\"column\" height=\"full\">\n {/* Image Section with Overlaid Tags */}\n <Box position=\"relative\" height=\"56\">\n {project.thumbnail && (\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 }}\n />\n )}\n\n {/* Project Type Badge - Top Left */}\n {project.projectType?.title && (\n <Box position=\"absolute\" top=\"4\" left=\"4\">\n <BoemlyTag backgroundColor=\"gray.900\" borderRadius=\"full\">\n <Text size=\"smRegularNormalBold\" color=\"white\">\n {project.projectType.title}\n </Text>\n </BoemlyTag>\n </Box>\n )}\n\n {/* Status Tags - Bottom Right */}\n <Flex\n position=\"absolute\"\n bottom=\"4\"\n right=\"4\"\n flexDir=\"column\"\n gap=\"2\"\n alignItems=\"flex-end\"\n >\n <CertificationBadge\n certificationDate={project.certificationDate}\n variant=\"withIcon\"\n />\n <CreditsAvailableBadge\n variant=\"withIcon\"\n status={project.creditAvailability}\n />\n </Flex>\n </Box>\n\n {/* Content Section */}\n <Box padding=\"6\" backgroundColor=\"white\">\n <Heading size=\"2xl\" color=\"primary.700\" mb=\"2\">\n {project.friendlyName || project.title}\n </Heading>\n\n <Flex flexDir=\"column\" gap=\"2\">\n {/* Location */}\n <Flex alignItems=\"center\" gap=\"3\">\n <MapPinIcon size={20} color=\"var(--boemly-colors-gray-400)\" />\n <Text fontSize=\"lg\" color=\"gray.500\">\n {project.location} {getCountryFlag(project.countryCode)}\n </Text>\n </Flex>\n\n {/* Area */}\n <Flex alignItems=\"center\" gap=\"3\">\n <ArrowsOutIcon size={20} color=\"var(--boemly-colors-gray-400)\" />\n <Text fontSize=\"lg\" color=\"gray.500\">\n {formatNumber(\n (project.area || 0) / 10000,\n FORMAT_AS_HECTARE_CONFIG\n )}\n </Text>\n </Flex>\n </Flex>\n </Box>\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", "import { ProjectGridCardV2 } from './ProjectGridCardV2';\n\nexport default ProjectGridCardV2;\n", "import { ProjectsGridV2 } from './ProjectsGridV2';\n\nexport default ProjectsGridV2;\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: 'black',\n factValueColor: 'black',\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 paddingY=\"12\"\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 '../../components/ContextProvider';\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 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 React from 'react';\nimport { Box, DefaultSectionContainer, Heading, Text, Wrapper } from 'boemly';\n\nexport interface HeroWithHighlightsProps {\n slice: {\n /**\n * Title with optional highlights. Use [text] to mark highlighted parts.\n * Example: \"Forest project [Portfolio]\" or \"[Participation requirements] for forest conversion\"\n */\n title: string;\n subTitle?: string;\n headingLevel?: 'h1' | 'h2' | 'h3';\n headingSize?: // all options from the ChakraUI documentation\n | 'xs'\n | 'sm'\n | 'md'\n | 'lg'\n | 'xl'\n | '2xl'\n | '3xl'\n | '4xl'\n | '5xl'\n | '6xl'\n | '7xl';\n variant?: 'white' | 'gray';\n textAlign?: 'left' | 'center' | 'right';\n };\n}\n\ninterface TitlePart {\n text: string;\n highlighted: boolean;\n}\n\nconst parseTitle = (title: string): TitlePart[] => {\n const parts: TitlePart[] = [];\n const regex = /\\[([^\\]]+)\\]|([^[\\]]+)/g;\n\n for (const match of title.matchAll(regex)) {\n if (match[1]) parts.push({ text: match[1], highlighted: true });\n if (match[2]) parts.push({ text: match[2], highlighted: false });\n }\n\n return parts;\n};\n\nconst VARIANTS = {\n white: { backgroundColor: 'white', titleColor: 'black' },\n gray: { backgroundColor: 'primary.50', titleColor: 'black' },\n};\n\nexport const HeroWithHighlights: React.FC<HeroWithHighlightsProps> = ({\n slice,\n}: HeroWithHighlightsProps) => {\n const parts = parseTitle(slice.title);\n const variant = slice.variant || 'white';\n const textAlign = slice.textAlign || 'left';\n\n return (\n <DefaultSectionContainer\n backgroundColor={VARIANTS[variant].backgroundColor}\n paddingY={['10', null, '16']}\n >\n <Wrapper>\n <Heading\n as={slice.headingLevel || 'h1'}\n size={[slice.headingSize || '3xl']}\n color={VARIANTS[variant].titleColor}\n lineHeight=\"1.3\"\n fontWeight=\"600\"\n textAlign={textAlign}\n >\n {parts.map((part, i) =>\n part.highlighted ? (\n <Box as=\"span\" key={i} px=\"2\" backgroundColor=\"primary.500\">\n {part.text}\n </Box>\n ) : (\n part.text\n )\n )}\n </Heading>\n\n {slice.subTitle && (\n <Text\n size=\"lgRegularNormal\"\n color=\"gray.500\"\n mt=\"4\"\n textAlign={textAlign}\n >\n {slice.subTitle}\n </Text>\n )}\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n", "import { HeroWithHighlights } from './HeroWithHighlights';\n\nexport default HeroWithHighlights;\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 ProjectsGridV2 from '../../slices/ProjectsGridV2';\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 HeroWithHighlights from '../../slices/HeroWithHighlights';\nimport Redirect from '../../slices/Redirect';\nimport { AnalyticsFunction } from '../ContextProvider/ContextProvider';\nimport FontsCustomization from '../../constants/fontCustomizations';\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 colors?: Record<string, any>;\n fonts?: FontsCustomization;\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 colors,\n fonts,\n CustomSlice,\n analyticsFunction,\n}: SliceRendererProps): React.JSX.Element => (\n <ContextProvider\n locale={locale}\n analyticsFunction={analyticsFunction}\n colors={colors}\n fonts={fonts}\n >\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-grid-v2':\n return (\n <ProjectsGridV2\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 case 'sections.hero-with-highlights':\n return (\n <HeroWithHighlights\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\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
+ "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", "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", "messages_en_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", "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", "colors", "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_react", "import_boemly", "import_jsx_runtime", "CertificationBadge_default", "import_jsx_runtime", "Image", "CertificationBadge_default", "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_boemly", "import_link", "import_boemly", "import_react", "import_image", "import_jsx_runtime", "Image", "CertificationBadge_default", "CreditsAvailableBadge_default", "import_jsx_runtime", "ConditionalWrapper", "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", "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_boemly", "import_jsx_runtime", "VARIANTS", "import_router", "import_react", "import_jsx_runtime", "import_jsx_runtime", "colors"]
7
7
  }