@treely/strapi-slices 7.10.0 → 7.11.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.
@@ -1 +1 @@
1
- {"version":3,"file":"strapi-slices.cjs.production.min.js","sources":["../src/constants/strapi.ts","../src/integrations/strapi/strapiClient.ts","../src/integrations/strapi/getAllSlugsFromStrapi.ts","../src/constants/api.ts","../src/slices/TextCardGrid/TextCardGrid.tsx","../src/integrations/fpmClient.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/strapiLinkUrl.ts","../src/components/FullScreenImage/ZoomableImage.tsx","../src/components/FullScreenImage/FullScreenImage.tsx","../src/constants/breakpoints.ts","../src/slices/FullWidthImage/FullWidthImage.tsx","../src/constants/globalStyle.ts","../src/rootMessages.de.ts","../src/components/CreditsAvailableBadge/messages.de.ts","../src/components/EventCard/messages.de.ts","../src/components/portfolio/DocumentsDownloadList/messages.de.ts","../src/components/portfolio/ProjectInfo/messages.de.ts","../src/components/portfolio/SmallCheckout/messages.de.ts","../src/components/ProjectGridCard/messages.de.ts","../src/slices/Comparison/messages.de.ts","../src/slices/Cta/messages.de.ts","../src/components/CustomerCard/messages.de.ts","../src/components/CustomerQuoteCard/messages.de.ts","../src/slices/Events/messages.de.ts","../src/slices/Glossary/messages.de.ts","../src/slices/ProjectFacts/messages.de.ts","../src/slices/ProjectsMap/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/utils/getMessages.ts","../src/rootMessages.en.ts","../src/components/CreditsAvailableBadge/messages.en.ts","../src/components/EventCard/messages.en.ts","../src/components/portfolio/DocumentsDownloadList/messages.en.ts","../src/components/portfolio/ProjectInfo/messages.en.ts","../src/components/portfolio/SmallCheckout/messages.en.ts","../src/components/ProjectGridCard/messages.en.ts","../src/slices/Comparison/messages.en.ts","../src/slices/Cta/messages.en.ts","../src/components/CustomerCard/messages.en.ts","../src/components/CustomerQuoteCard/messages.en.ts","../src/slices/Events/messages.en.ts","../src/slices/Glossary/messages.en.ts","../src/slices/ProjectFacts/messages.en.ts","../src/slices/ProjectsMap/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/components/ContextProvider/ContextProvider.tsx","../src/components/StrapiLinkButton/StrapiLinkButton.tsx","../src/utils/openHubSpotChat.ts","../src/slices/Hero/Hero.tsx","../src/slices/IconGrid/IconGrid.tsx","../src/icons/LinkedInIcon.tsx","../src/components/StrapiLinkButtonWithIcon/StrapiLinkButtonWithIcon.tsx","../src/slices/ImageGrid/ImageGrid.tsx","../src/slices/ImageTextSequence/ImageTextSequence.tsx","../src/slices/LeftTextRightCard/LeftTextRightCard.tsx","../src/slices/LogoGridWithText/LogoGridWithText.tsx","../src/slices/MapHero/styles.ts","../src/slices/MapHero/MapHero.tsx","../src/utils/convertToKebabCase.ts","../src/slices/QAndA/QAndA.tsx","../src/slices/QuoteCards/QuoteCards.tsx","../src/slices/RichTextSection/RichTextSection.tsx","../src/slices/Steps/Steps.tsx","../src/models/fpm/FPMProject.ts","../src/slices/TextCarousel/styles.ts","../src/slices/TextCarousel/TextCarousel.tsx","../src/utils/shuffleElements.ts","../src/slices/TextWithTextCards/TextWithTextCards.tsx","../src/constants/formatter.ts","../src/components/CreditsAvailableBadge/CreditsAvailableBadge.tsx","../src/constants/mapbox.ts","../src/components/ProjectGridCard/ProjectGridCard.tsx","../src/slices/TextWithCard/TextWithCard.tsx","../src/slices/LinkCardsGrid/LinkCardsGrid.tsx","../src/slices/SmallHero/SmallHero.tsx","../src/slices/Blog/styles.ts","../src/slices/Blog/Blog.tsx","../src/slices/ProjectsGrid/ProjectsGrid.tsx","../src/constants/fontCustomizations.ts","../src/components/MinimalProviders/MinimalProviders.tsx","../src/slices/ProjectsMap/MapMarker.tsx","../src/slices/ProjectsMap/mapboxStyle.ts","../src/slices/ProjectsMap/ProjectsMap.tsx","../src/slices/Cta/Cta.tsx","../src/utils/mergeBoundingBoxes.ts","../src/slices/Video/Video.tsx","../src/slices/FullWidthHighlightQuote/FullWidthHighlightQuote.tsx","../src/slices/FullWidthImageSlider/styles.ts","../src/utils/getClosestRatio.ts","../src/slices/FullWidthImageSlider/FullWidthImageSlider.tsx","../src/slices/SideBySideImages/SideBySideImages.tsx","../src/models/strapi/StrapiEvent.ts","../src/slices/CtaOnly/CtaOnly.tsx","../src/slices/Glossary/Glossary.tsx","../src/slices/ShopCheckout/ShopCheckout.tsx","../src/constants/domain.ts","../src/slices/Facts/Facts.tsx","../src/slices/BlogCards/BlogCards.tsx","../src/components/portfolio/SmallCheckout/SmallCheckout.tsx","../src/components/portfolio/ProjectInfo/ProjectInfo.tsx","../src/utils/convertCo2AmountKgToTons.ts","../src/utils/getTimeSpanInYears.ts","../src/utils/convertAreaM2ToHa.ts","../src/components/portfolio/DocumentsDownloadList/DocumentsDownloadList.tsx","../src/components/portfolio/Contact/Contact.tsx","../src/slices/ProjectFacts/ProjectFacts.tsx","../src/components/CustomerCard/CustomerCard.tsx","../src/components/CustomerQuoteCard/CustomerQuoteCard.tsx","../src/components/LogoCard/LogoCard.tsx","../src/slices/CustomerStories/CustomerStories.tsx","../src/slices/Comparison/Icon.tsx","../src/slices/Comparison/Comparison.tsx","../src/slices/CarouselMarqueeBanner/styles.ts","../src/slices/CarouselMarqueeBanner/CarouselMarqueeBanner.tsx","../src/slices/Timeline/Timeline.tsx","../src/utils/isSameDate.ts","../src/slices/Events/Events.tsx","../src/components/EventCard/EventCard.tsx","../src/utils/getCountryFlag.ts","../src/models/hooks/useEvents.ts","../src/components/PreviewAlert/PreviewAlert.tsx","../src/components/SEOTags/SEOTags.tsx","../src/components/SliceRenderer/SliceRenderer.tsx","../src/utils/mergeGlobalAndStrapiBlogPostData.ts","../src/utils/mergeGlobalAndStrapiCustomerStoryData.ts","../src/utils/mergeGlobalAndStrapiPageData.ts","../src/utils/mergeGlobalAndStrapiProjectData.ts"],"sourcesContent":["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 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","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","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 React from 'react';\nimport { css } from '@emotion/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 { CaretRight } 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 variants[slice.variant]\n .positionIcon(index)\n .includes('unset')\n ? css`\n & span,\n div,\n img {\n border-radius: var(--boemly-radii-xl);\n }\n `\n : css`\n & span,\n div,\n img {\n border-${\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ]\n }-radius: var(--boemly-radii-full);\n }\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 size: '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 <CaretRight 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 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","import {\n IStrapiData,\n IStrapiResponse,\n PortfolioProject,\n StrapiProject,\n} from '../..';\nimport {\n STRAPI_DEFAULT_PAGE_SIZE,\n STRAPI_DEFAULT_POPULATE_DEPTH,\n} from '../../constants/strapi';\nimport FPMProject from '../../models/fpm/FPMProject';\nimport fpmClient from '../fpmClient';\nimport strapiClient from './strapiClient';\n\nconst FALLBACK_LOCALE = 'en';\n\nconst getPortfolioProjects = async (\n locale: string = 'en',\n preview: boolean = false\n): Promise<PortfolioProject[]> => {\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 status: preview ? 'draft' : 'published',\n };\n\n const [\n { data: fpmProjects },\n { data: strapiProjectsLocalized },\n { data: strapiProjectsEnglish },\n ] = await Promise.all([\n fpmClient.get<FPMProject[]>('/public/projects', { cache }),\n strapiClient.get<IStrapiResponse<IStrapiData<StrapiProject>[]>>(\n '/projects',\n { params, cache }\n ),\n strapiClient.get<IStrapiResponse<IStrapiData<StrapiProject>[]>>(\n '/projects',\n {\n params: { ...params, locale: FALLBACK_LOCALE },\n cache,\n }\n ),\n ]);\n\n const strapiProjects = new Map<string, IStrapiData<StrapiProject>>();\n\n for (const project of [\n ...strapiProjectsEnglish.data,\n ...strapiProjectsLocalized.data,\n ]) {\n if (project.attributes.fpmProjectId) {\n strapiProjects.set(project.attributes.fpmProjectId, project);\n }\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 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 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 React, { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { BoemlyModal, Flex, IconButton } from 'boemly';\nimport { useKey, useLockBodyScroll } from 'react-use';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport { CaretLeft, CaretRight } 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 useLockBodyScroll(isOpen);\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]\n );\n const onLeft = useCallback(\n () => canMoveLeft && setCurrentIndex && setCurrentIndex((c) => c - 1),\n [canMoveLeft]\n );\n\n useKey('ArrowRight', onRight, {}, [onRight]);\n useKey('ArrowLeft', onLeft, {}, [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 onClose={onClose}\n isOpen={isOpen}\n title=\"\"\n trigger=\"\"\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 icon={<CaretLeft size={16} />}\n aria-label=\"Previous picture\"\n variant=\"outline\"\n pointerEvents=\"all\"\n mr=\"6\"\n />\n\n <IconButton\n visibility={canMoveRight ? 'visible' : 'hidden'}\n onClick={onRight}\n icon={<CaretRight size={16} />}\n aria-label=\"Next picture\"\n variant=\"outline\"\n pointerEvents=\"all\"\n ml=\"4\"\n />\n </Flex>\n </Flex>\n }\n />\n );\n};\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 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\" height={['3xs', null, 'xl']}>\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 { css } from '@emotion/react';\n\nexport const GLOBAL_STYLE = css`\n :root {\n --default-hero-height: calc(100vh - var(--boemly-space-24));\n }\n\n a {\n text-decoration: none;\n }\n`;\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 messagesDe = {\n 'components.creditsAvailableBadge.text.yes': 'Credits verfügbar',\n 'components.creditsAvailableBadge.text.some': 'Einige verbleibende Credits',\n 'components.creditsAvailableBadge.text.no': 'Keine verbleibenden Credits',\n 'components.creditsAvailableBadge.text.notYet': 'Credits bald verfügbar',\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 'features.portfolio.documentsDownloadList.projectDocuments':\n 'Projektdokumente',\n 'features.portfolio.documentsDownloadList.downloadDocument':\n 'Dokument herunterladen',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'features.projectInfo.projectInfo.value': 'Projekt Infos',\n 'features.projectInfo.properties.area': 'Projekt Fläche',\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® Forest Carbon Standard, ISO 14064-2',\n 'features.projectInfo.properties.verificationStandard.value.MfKWCH':\n 'Methodik für Klimaschutzprojekte im Wald für die Schweiz',\n 'features.projectInfo.properties.forecastedAmountYear.toolTip':\n 'Dies ist das jährliche Projekt-Senkenvolumen gemäß dem TÜV-geprüften PDD, dieser Wert stellt nicht die aktuellen Verfügbarkeiten dar.',\n 'features.projectInfo.properties.forecastedAmountYear.label':\n '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 € ein',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '€',\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ür größere Einkäufe 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 'components.projectGridCard.certified': 'Zertifiziert, {year}',\n 'components.projectGridCard.certificationInProgress':\n 'Zertifizierung ist in Arbeit',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.comparison.backgroundShapes': 'Hintergrundformen',\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.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': 'Älteste 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 '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 'sections.shopCheckout.intro.price': 'Preis',\n\n 'sections.shopCheckout.contributionValue.label.EUR':\n 'Geben sie einen Betrag in € ein',\n 'sections.shopCheckout.contributionValue.label.CHF':\n 'Geben sie einen Betrag in CHF ein',\n 'sections.shopCheckout.contributionValue.unit.EUR': '€',\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ür größere Einkäufe kontaktieren Sie bitte unser Verkaufsteam über 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₂',\n 'unit.formatter.tonsCo2PerYear': '{number} tCO₂/Jahr',\n};\nexport default unitMessagesDe;\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 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","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.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 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 '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® Forest Carbon Standard, ISO 14064-2',\n 'features.projectInfo.properties.verificationStandard.value.MfKWCH':\n 'Methodik für Klimaschutzprojekte im Wald für die Schweiz',\n 'features.projectInfo.properties.forecastedAmountYear.label':\n 'Project Volume',\n 'features.projectInfo.properties.forecastedAmountYear.toolTip':\n \"This is the yearly project sink volume according to the TÜV-verified PDD, this value doesn't represent current 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 €',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '€',\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 messagesDe = {\n 'components.projectGridCard.certified': 'Certified, {year}',\n 'components.projectGridCard.certificationInProgress':\n 'Certification in progress',\n};\nexport default messagesDe;\n","const messagesEn = {\n 'sections.comparison.backgroundShapes': 'Background shapes',\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 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 '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 'sections.shopCheckout.intro.price': 'Price',\n\n 'sections.shopCheckout.contributionValue.label.EUR':\n 'Enter contribution value in €',\n 'sections.shopCheckout.contributionValue.label.CHF':\n 'Enter contribution value in CHF',\n 'sections.shopCheckout.contributionValue.unit.EUR': '€',\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₂',\n 'unit.formatter.tonsCo2PerYear': '{number} tCO₂/year',\n};\nexport default unitMessagesEn;\n","import React, { createContext } from 'react';\nimport { createIntl, createIntlCache } from 'react-intl';\nimport { Global } from '@emotion/react';\nimport { GLOBAL_STYLE } from '../../constants/globalStyle';\nimport getMessages from '../../utils/getMessages';\nimport strapiClient from '../../integrations/strapi/strapiClient';\nimport { SWRConfig } from 'swr/_internal';\n\nexport type AnalyticsFunction = ({\n type,\n props,\n}: {\n type: 'track' | 'page';\n props?: Record<string, any>;\n}) => void;\n\nexport const AnalyticsContext = createContext<AnalyticsFunction | undefined>(\n undefined\n);\n\nconst cache = createIntlCache();\n\nconst intlFactory = (locale: string) =>\n createIntl(\n {\n locale,\n messages: getMessages(locale),\n },\n cache\n );\n\nexport const IntlContext = createContext(intlFactory('en'));\n\nexport interface ContextProviderProps {\n children: React.ReactNode;\n locale: string;\n analyticsFunction?: AnalyticsFunction;\n}\n\nexport const ContextProvider: React.FC<ContextProviderProps> = ({\n children,\n locale,\n analyticsFunction,\n}: ContextProviderProps): 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 <IntlContext.Provider value={intlFactory(locale)}>\n <AnalyticsContext.Provider value={analyticsFunction}>\n {children}\n </AnalyticsContext.Provider>\n </IntlContext.Provider>\n </SWRConfig>\n </>\n );\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 colorScheme?: 'primary' | 'gray' | 'orange' | 'green' | 'white';\n rightIcon?: JSX.Element;\n leftIcon?: 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 ...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 if (link.intercomLauncher) {\n if (adBlockDetected) {\n return (\n <Button\n {...buttonProps}\n as={Link}\n href=\"mailto:hello@tree.ly\"\n onClick={handleClick}\n >\n {link.text}\n </Button>\n );\n }\n\n return (\n <Button\n {...buttonProps}\n onClick={() => {\n handleClick();\n openHubSpotChat();\n }}\n >\n {link.text}\n </Button>\n );\n }\n\n return (\n <Button\n {...buttonProps}\n as={Link}\n href={strapiLinkUrl(link)}\n onClick={handleClick}\n >\n {link.text}\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 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): 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 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): 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 h=\"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 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 React from 'react';\nimport { CaretRight, Globe } 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 <Globe />;\n }\n default: {\n return <CaretRight />;\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';\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, { 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 { CaretRight } 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 <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={<CaretRight size=\"10\" color={gray700} />}\n component=\"ImageTextSequence\"\n />\n )}\n </Box>\n {!oneColumnGrid && index % 2 === 0 && imageBox}\n </Fragment>\n );\n }\n )}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\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 { ArrowRight } 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 colorScheme=\"white\"\n variant=\"outline\"\n rightIcon={<ArrowRight />}\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 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 { ArrowRight } 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 colorScheme=\"white\"\n variant=\"outline\"\n mt=\"6\"\n rightIcon={<ArrowRight />}\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 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\n padding-top: var(--boemly-space-32);\n }\n`;\n\nexport const ShapeContainer = styled(Box)`\n position: absolute;\n bottom: calc(var(--boemly-space-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-space-72) * -1);\n background-color: var(--boemly-colors-white);\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\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 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","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 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 { ArrowRight } 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 colorScheme=\"white\"\n background=\"white\"\n rightIcon={<ArrowRight />}\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","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 image: (\n <Image\n src={strapiMediaUrl(card.avatar.image.img, 'small')}\n alt={card.avatar.image.alt}\n fill\n style={{\n objectFit: card.avatar.image.objectFit || 'cover',\n }}\n />\n ),\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 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 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 'react-use';\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]);\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 size: '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 Issuer from './Issuer';\n\nexport enum CreditAvailability {\n CREDITS_AVAILABLE = 'credits_available',\n NO_CREDITS_AVAILABLE = 'no_credits_available',\n SOME_CREDITS_AVAILABLE = 'some_credits_available',\n SOON_CREDITS_AVAILABLE = 'soon_credits_available',\n}\n\ninterface FPMProject {\n id: string;\n title: string;\n friendlyName?: string;\n\n isPublic?: boolean;\n geom?: {\n type: 'Point';\n coordinates: [number, number];\n };\n area?: number;\n location?: string;\n start?: Date;\n end?: Date;\n projectType?: {\n title: string;\n id: string;\n createdAt: Date;\n updatedAt: Date;\n };\n projectDeveloper?: {\n name: string;\n id: string;\n createdAt: Date;\n updatedAt: Date;\n };\n verificationStandard?: {\n id: string;\n createdAt: Date;\n updatedAt: Date;\n };\n forecastedAmountYearly?: number;\n riskBuffer?: number;\n defaultIssuer?: Issuer;\n creditAvailability: CreditAvailability;\n certificationDate?: Date;\n\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport default FPMProject;\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-space-6);\n padding: var(--boemly-space-8) 0;\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n margin-top: var(--boemly-space-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-space-6);\n justify-content: center;\n\n width: calc(\n (var(--boemly-sizes-sm) + var(--boemly-space-6)) *\n ${({ numberOfItems }: CarouselInnerContainerProps) => numberOfItems} +\n var(--boemly-space-6)\n );\n min-width: var(--boemly-sizes-full);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n gap: var(--boemly-space-1);\n justify-content: flex-start;\n width: calc(\n (var(--boemly-sizes-2xs) + var(--boemly-space-4)) *\n ${({ numberOfItems }: CarouselInnerContainerProps) => numberOfItems} +\n var(--boemly-space-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-space-4);\n\n &:first-of-type {\n margin-left: var(--boemly-space-6);\n }\n }\n`;\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 'react-use';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { ArrowLeft, ArrowRight } 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, { width: itemWidth }] = useMeasure<HTMLDivElement>();\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 <IconButton\n key=\"leftButton\"\n as={motion.button}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex - 1)}\n aria-label={formatMessage({\n id: 'sections.textCarousel.moveLeft',\n })}\n icon={<ArrowLeft size={16} />}\n pointerEvents=\"auto\"\n boxShadow=\"md\"\n />\n )}\n </AnimatePresence>\n </Box>\n <Box>\n <AnimatePresence>\n {canMoveRight && (\n <IconButton\n key=\"rightButton\"\n as={motion.button}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex + 1)}\n aria-label={formatMessage({\n id: 'sections.textCarousel.moveRight',\n })}\n icon={<ArrowRight size={16} />}\n pointerEvents=\"auto\"\n boxShadow=\"md\"\n />\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","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 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 image: (\n <Image\n src={strapiMediaUrl(\n slice.contact.avatar.image.img,\n 'small'\n )}\n alt={slice.contact.avatar.image.alt}\n fill\n style={{\n objectFit:\n slice.contact.avatar.image.objectFit || 'cover',\n }}\n />\n ),\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 image: (\n <Image\n src={strapiMediaUrl(\n slice.contact.avatar.image.img,\n 'small'\n )}\n alt={slice.contact.avatar.image.alt}\n fill\n style={{\n objectFit:\n slice.contact.avatar.image.objectFit || 'cover',\n }}\n />\n ),\n }}\n link={{\n text: slice.contact.button.text,\n onClick: handleContactButtonClick,\n }}\n />\n )}\n </>\n </Wrapper>\n </DefaultSectionContainer>\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 { Flex, Tag, 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: 'green.600',\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 return (\n <Flex\n justifyContent=\"flex-start\"\n as={href ? NextLink : undefined}\n href={href}\n >\n <Tag backgroundColor={variant.color}>\n <Text color=\"white\" size=\"xsLowBold\">\n {variant.message}\n </Text>\n </Tag>\n </Flex>\n );\n};\n\nexport default CreditsAvailableBadge;\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 { Box, Container, Flex, Heading, Tag, Text } from 'boemly';\nimport React, { useContext } from 'react';\nimport Image from 'next/image';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport { strapiMediaUrl } from '../..';\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): 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 <Tag>\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {formatNumber(\n (project.area || 0) / 10000,\n FORMAT_AS_HECTARE_CONFIG\n )}\n </Text>\n </Tag>\n <Tag>\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {project.location}\n </Text>\n </Tag>\n {project.certificationDate ? (\n <Tag>\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 </Tag>\n ) : (\n <Tag>\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {formatMessage({\n id: 'components.projectGridCard.certificationInProgress',\n })}\n </Text>\n </Tag>\n )}\n <CreditsAvailableBadge status={project.creditAvailability} />\n </Flex>\n </Flex>\n </Container>\n );\n};\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 { ArrowRight } 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, PortfolioProject, StrapiProject } from '../..';\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 colorScheme=\"white\"\n variant=\"outline\"\n rightIcon={<ArrowRight />}\n component=\"TextWithCard\"\n />\n )}\n </GridItem>\n {slice.cardPosition === 'right' && card}\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\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 { CaretRight } 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 <Box\n key={id}\n as={Link}\n href={strapiLinkUrl(link)}\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 <CaretRight />\n </Box>\n </Box>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n);\n","import React from 'react';\nimport {\n Box,\n DefaultSectionHeader,\n Flex,\n Gradient,\n Tag,\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 colorScheme: 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, colorScheme }) => (\n <Tag\n key={id}\n colorScheme={colorScheme}\n size=\"md\"\n variant=\"subtle\"\n >\n {text}\n </Tag>\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 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\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 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]} spacingX={56} spacingY={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 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: JSX.Element) => JSX.Element;\n children: 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: 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","export const FONT_CUSTOMIZATIONS = {\n body: 'Inter',\n heading: 'Inter',\n display: 'GintoNord',\n mono: 'SpaceMono',\n};\n","import React from 'react';\nimport { FONT_CUSTOMIZATIONS } from '../../constants/fontCustomizations';\nimport { BoemlyThemeProvider } from 'boemly';\nimport { IntlProvider } from 'react-intl';\nimport getMessages from '../../utils/getMessages';\n\ninterface MinimalProvidersProps {\n locale: string;\n children: JSX.Element | JSX.Element[];\n}\n\nconst MinimalProviders = ({ children, locale }: MinimalProvidersProps) => (\n <IntlProvider messages={getMessages(locale)} locale={locale}>\n <BoemlyThemeProvider fonts={FONT_CUSTOMIZATIONS}>\n {children}\n </BoemlyThemeProvider>\n </IntlProvider>\n);\n\nexport default MinimalProviders;\n","import React, { useContext } from 'react';\nimport {\n Box,\n Button,\n Container,\n Flex,\n Heading,\n Text,\n useDisclosure,\n useToken,\n} from 'boemly';\nimport { MapPin } from '@phosphor-icons/react';\nimport NextLink from 'next/link';\nimport CreditsAvailableBadge from '../../components/CreditsAvailableBadge';\nimport { IntlContext } from '../../components/ContextProvider';\nimport { CreditAvailability } from '../../models/fpm/FPMProject';\n\nexport interface MapMarkerProps {\n title: string;\n isPublic?: boolean;\n projectDeveloper?: string;\n slug?: string;\n portfolioHost?: string;\n creditAvailability: CreditAvailability;\n}\n\nconst MapMarker = ({\n title,\n projectDeveloper,\n slug,\n creditAvailability,\n portfolioHost = '',\n isPublic = false,\n}: MapMarkerProps) => {\n const { formatMessage } = useContext(IntlContext);\n const { isOpen, onOpen, onClose } = useDisclosure();\n const blue600 = useToken('colors', 'blue.600');\n\n return (\n <Flex\n position=\"absolute\"\n gap=\"4\"\n onMouseEnter={onOpen}\n onMouseLeave={onClose}\n cursor=\"grab\"\n >\n <Box\n as={slug ? NextLink : undefined}\n href={slug && `${portfolioHost}/portfolio/${slug}`}\n >\n <MapPin\n size=\"40px\"\n color={blue600}\n weight=\"fill\"\n data-testid=\"mapmarker-pin\"\n filter=\"drop-shadow(0px 0px 2px #FFF)\"\n />\n </Box>\n\n {isPublic && isOpen && (\n <Container\n shadow=\"md\"\n width=\"max-content\"\n minWidth=\"3xs\"\n maxWidth={['3xs', null, null, 'sm']}\n >\n <Flex direction=\"column\">\n <CreditsAvailableBadge\n status={creditAvailability}\n href={slug && `${portfolioHost}/portfolio/${slug}`}\n />\n <Heading mt=\"3\" size=\"md\">\n {title}\n </Heading>\n\n {projectDeveloper && (\n <Text size=\"smLowNormal\" mt=\"1\">\n {projectDeveloper}\n </Text>\n )}\n\n {slug && (\n <Button\n width=\"fit-content\"\n variant=\"outline\"\n size=\"sm\"\n as={NextLink}\n href={`${portfolioHost}/portfolio/${slug}`}\n mt=\"4\"\n whiteSpace=\"nowrap\"\n >\n {formatMessage({ id: 'sections.projectsMap.link.text' })}\n </Button>\n )}\n </Flex>\n </Container>\n )}\n </Flex>\n );\n};\n\nexport default MapMarker;\n","import { css } from '@emotion/react';\n\nconst mapboxStyle = css`\n .mapboxgl-map {\n -webkit-tap-highlight-color: rgb(0 0 0/0);\n font: 12px/20px Helvetica Neue, Arial, Helvetica, 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: rgb(0 0 0/5%);\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: rgb(0 0 0/5%);\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: rgb(0 0 0/5%);\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: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, 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 React, { useContext } from 'react';\nimport {\n MAPBOX_INITIAL_ZOOM,\n MAPBOX_MAX_ZOOM,\n MAPBOX_TOKEN,\n MapBoxStyle,\n} from '../../constants/mapbox';\nimport BBox from '../../models/BBox';\nimport mergeBoundingBoxes from '../../utils/mergeBoundingBoxes';\nimport { css } from '@emotion/react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Wrapper,\n} from 'boemly';\nimport mapboxgl, { LngLatBoundsLike, LngLatLike, Map, Marker } from 'mapbox-gl';\nimport { MutableRefObject, createRef, useEffect, useRef } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport MinimalProviders from '../../components/MinimalProviders';\nimport MapMarker from './MapMarker';\nimport mapboxStyle from './mapboxStyle';\nimport { IntlContext } from '../../components/ContextProvider';\n\nmapboxgl.accessToken = MAPBOX_TOKEN;\n\nexport interface ProjectsMapProps {\n slice: {\n tagline?: string;\n title?: string;\n text?: string;\n\n defaultCenterCoordinates?: {\n latitude: number;\n longitude: number;\n };\n defaultZoomLevel?: number;\n };\n\n projects: PortfolioProject[];\n}\n\nexport const ProjectsMap: React.FC<ProjectsMapProps> = ({\n slice,\n projects,\n}: ProjectsMapProps) => {\n const { locale } = useContext(IntlContext);\n\n const filteredProjects = projects.filter(\n (project) => project.geom\n ) as (PortfolioProject & {\n geom: Pick<PortfolioProject, 'geom'>;\n })[];\n\n const center: LngLatLike | undefined = slice.defaultCenterCoordinates\n ? [\n slice.defaultCenterCoordinates.longitude,\n slice.defaultCenterCoordinates.latitude,\n ]\n : undefined;\n\n const bounds: LngLatBoundsLike | undefined = center\n ? undefined\n : mergeBoundingBoxes(\n filteredProjects.map(\n (p): BBox =>\n [\n ...p.geom.coordinates.map((c) => c - 0.2),\n ...p.geom.coordinates.map((c) => c + 0.2),\n ] as BBox\n )\n );\n\n const mapContainer = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const map = new Map({\n container: mapContainer.current || '',\n style: MapBoxStyle.CaliTerrain,\n center,\n zoom: slice.defaultZoomLevel || MAPBOX_INITIAL_ZOOM,\n maxZoom: MAPBOX_MAX_ZOOM,\n bounds,\n });\n\n filteredProjects\n // Sort by longitude, so that the markers are rendeed form right to left\n .sort((a, b) => b.geom.coordinates[0] - a.geom.coordinates[0])\n .forEach((project) => {\n const ref =\n createRef<HTMLDivElement>() as MutableRefObject<HTMLDivElement>;\n ref.current = document.createElement('div');\n\n createRoot(ref.current).render(\n <MinimalProviders locale={locale}>\n <MapMarker\n title={project.friendlyName || project.title}\n isPublic={project.isPublic}\n portfolioHost={project.portfolioHost}\n slug={project.slug}\n creditAvailability={project.creditAvailability}\n projectDeveloper={project.projectDeveloper?.name}\n />\n </MinimalProviders>\n );\n\n // Offset is needed to center the marker on the coordinates\n const marker = new Marker(ref.current, { offset: [-20, -40] });\n\n // No chaining here, because the mocks don't support it\n marker.setLngLat(project.geom.coordinates);\n marker.addTo(map);\n });\n\n // Clean up on unmount\n return () => map.remove();\n }, [locale]);\n\n return (\n <DefaultSectionContainer>\n <Box css={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\n <Box\n height=\"xl\"\n ref={mapContainer}\n borderRadius=\"xl\"\n overflow=\"hidden\"\n boxShadow={['md', null, null, 'none']}\n css={css`\n mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC);\n `}\n />\n </Wrapper>\n </Box>\n </DefaultSectionContainer>\n );\n};\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 BBox from '../models/BBox';\n\nconst mergeBoundingBoxes = (boundingBoxes: BBox[]): BBox => {\n let minLeft: number = 180;\n let minBottom: number = 90;\n let maxRight: number = -180;\n let maxTop: number = -90;\n\n boundingBoxes.forEach(([left, bottom, right, top]) => {\n if (left < minLeft) minLeft = left;\n if (bottom < minBottom) minBottom = bottom;\n if (right > maxRight) maxRight = right;\n if (top > maxTop) maxTop = top;\n });\n\n return [minLeft, minBottom, maxRight, maxTop];\n};\n\nexport default mergeBoundingBoxes;\n","import React from 'react';\nimport { Box, DefaultSectionContainer, Wrapper } from 'boemly';\nimport { useMeasure } from 'react-use';\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, { width }] = useMeasure<HTMLDivElement>();\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 React from 'react';\nimport Image from 'next/image';\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 image={\n <Image\n src={strapiMediaUrl(slice.avatarWithName.image.img, 'small')}\n alt={slice.avatarWithName.image.alt}\n fill\n style={{\n objectFit: slice.avatarWithName.image.objectFit || 'cover',\n }}\n />\n }\n orientation=\"vertical\"\n />\n </Wrapper>\n </DefaultSectionContainer>\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-space-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-space-8),\n calc(50vw - var(--boemly-sizes-7xl) / 2 + var(--boemly-space-6))\n );\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n overflow-x: scroll;\n padding-left: max(\n var(--boemly-space-8),\n calc(50vw - var(--boemly-sizes-7xl) / 2 + var(--boemly-space-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-space-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-space-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 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 'react-use';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { ArrowLeft, ArrowRight } 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, { width: imageWidth }] = useMeasure<HTMLDivElement>();\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 noOfLines={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 <IconButton\n key=\"leftButton\"\n as={motion.button}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex - 1)}\n aria-label=\"Move left\"\n icon={<ArrowLeft size={16} />}\n pointerEvents=\"auto\"\n />\n )}\n </AnimatePresence>\n </Box>\n <Box>\n <AnimatePresence>\n {canMoveRight && (\n <IconButton\n key=\"rightButton\"\n as={motion.button}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex + 1)}\n aria-label=\"Move right\"\n icon={<ArrowRight size={16} />}\n pointerEvents=\"auto\"\n />\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 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 Locale from '../Locale';\nimport StrapiImage from './StrapiImage';\nimport StrapiLink from './StrapiLink';\nimport StrapiLocalization from './StrapiLocalization';\nimport StrapiTopBanner from './StrapiTopBanner';\n\nexport enum EventType {\n CONFERENCE = 'Conference',\n MEET_UP = 'Meet Up',\n WEBINAR = 'Webinar',\n FOREST_WALK = 'Forest Walk',\n LUNCH_AND_LEARN = 'Lunch & Learn',\n FESTIVAL = 'Festival',\n ROADSHOW = 'RoadShow',\n PARTNER_EVENT = 'Partner Event',\n FAIR = 'Fair',\n}\n\ninterface StrapiEvent {\n title: string;\n description: string;\n button?: StrapiLink;\n buttonVariant?: 'outline' | 'ghost' | 'link' | 'solid' | 'outlineWhite';\n recommended?: boolean;\n speakers?: {\n id: number;\n name: string;\n image: StrapiImage;\n }[];\n image: StrapiImage;\n logo: StrapiImage;\n eventTypes: {\n id: number;\n eventType: EventType;\n }[];\n languages: {\n id: number;\n language: string;\n countryCode: string;\n }[];\n location?: string;\n locale: Locale;\n online?: boolean;\n start: Date;\n end?: Date;\n allDay?: boolean;\n slices: any[];\n localizations: StrapiLocalization[];\n topBanner?: StrapiTopBanner;\n}\n\nexport default StrapiEvent;\n","import React from 'react';\nimport { Box, 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 <Wrapper>\n <Box position=\"absolute\" top=\"-28\" transform=\"translateY(50%)\">\n <StrapiLinkButton size=\"md\" link={slice.button} component=\"CtaOnly\" />\n </Box>\n </Wrapper>\n);\n","import React, { useContext, useState } from 'react';\nimport {\n DefaultSectionContainer,\n Divider,\n Flex,\n GridItem,\n Heading,\n IconButton,\n SimpleGrid,\n Text,\n Wrapper,\n} from 'boemly';\nimport { Check, Link as LinkIcon } from '@phosphor-icons/react';\nimport { useCopyToClipboard } from 'react-use';\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 [, copyToClipboard] = useCopyToClipboard();\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 (window?.location) {\n const currentUrl = window.location.href.split('#')[0];\n copyToClipboard(`${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 spacing=\"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 icon={\n copiedItem === item.slug ? (\n <Check size=\"16\" data-testid=\"check-icon\" />\n ) : (\n <LinkIcon size=\"16\" />\n )\n }\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 </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 <Divider maxW=\"xl\" placeSelf=\"center\" mb=\"10\" mt=\"10\" />\n )}\n </GridItem>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React, { useContext, useCallback } from 'react';\nimport {\n Badge,\n BoemlyFormControl,\n Box,\n Button,\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Divider,\n Flex,\n InputRightAddon,\n LabelNumberPair,\n RichText,\n SimpleGrid,\n Spacer,\n useToken,\n Wrapper,\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 = ({ slice }: ShopCheckoutProps): 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 colorScheme=\"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 <Divider />\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₂`}\n caption={formatMessage({\n id: 'sections.shopCheckout.summary.price.taxNotIncluded',\n })}\n />\n\n <Spacer height=\"6\" />\n <Divider />\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 rightAddonsOrElements={[\n <InputRightAddon key=\"1\">\n {formatMessage({\n id: `sections.shopCheckout.contributionValue.unit.${slice.currency}`,\n })}\n </InputRightAddon>,\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₂`}\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 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 gap={[null, null, null, '12']}\n >\n {slice.facts.map((fact) => (\n <Flex\n key={fact.key}\n flexDir=\"column\"\n width={[\n 'var(--boemly-sizes-full)',\n null,\n null,\n 'calc((var(--boemly-sizes-full) - var(--boemly-space-24))/ 3 )',\n ]}\n mt={['8', '8', '8', slice.facts.length > 3 ? '16' : '0']}\n >\n <Heading\n fontSize=\"6xl\"\n fontFamily=\"display\"\n lineHeight=\"10\"\n fontWeight=\"700\"\n color={VARIANTS[slice.variant].factValueColor}\n mb=\"2\"\n as=\"p\"\n >\n {fact.value}\n </Heading>\n\n <Text\n size=\"mdLowNormal\"\n color={VARIANTS[slice.variant].factKeyColor}\n >\n {fact.key}\n </Text>\n </Flex>\n ))}\n </Flex>\n\n {slice.button && (\n <>\n <Spacer height={['0', null, '20']} />\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n variant={slice.variant === 'green' ? 'outline' : 'solid'}\n component=\"Facts\"\n />\n </>\n )}\n </>\n </DefaultSectionContainer>\n);\n","import 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 { CaretRight } 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={<CaretRight color={gray700} />}\n component=\"BlogCards\"\n />\n </Box>\n </Flex>\n )}\n <Spacer height=\"14\" />\n <SimpleGrid\n columns={[1, null, null, 3]}\n spacingX={4}\n spacingY={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.attributes.slug}\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={<CaretRight color={gray700} />}\n component=\"BlogCards\"\n />\n </Box>\n </>\n )}\n </>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React, { useCallback, useContext } from 'react';\nimport {\n BoemlyFormControl,\n Box,\n Button,\n Divider,\n Flex,\n InputRightAddon,\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 rightAddonsOrElements={[\n <InputRightAddon key=\"currencyUnit\">\n {formatMessage({\n id: `portfolio.smallCheckout.contributionValueCurrency.unit.${currency}`,\n })}\n </InputRightAddon>,\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 rightAddonsOrElements={[\n <InputRightAddon key=\"tCO₂\">tCO₂</InputRightAddon>,\n ]}\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 <Divider 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 React, { useContext } from 'react';\nimport {\n Box,\n Container,\n Divider,\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 forecastedAmountSubtitle?: 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\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 spacingX=\"10\"\n spacingY=\"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 <Divider />\n <Spacer height=\"6\" />\n </>\n ) : (\n <></>\n )}\n <SimpleGrid columns={[1, null, null, 2]} spacingX=\"10\" spacingY=\"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.forecastedAmountYearly && project.riskBuffer ? (\n <>\n <Spacer height=\"8\" />\n <Divider />\n <Spacer height=\"8\" />\n <SimpleGrid columns={[1, null, null, 2]} spacingX=\"10\" spacingY=\"8\">\n <Tooltip\n label={formatMessage({\n id: 'features.projectInfo.properties.forecastedAmountYear.toolTip',\n })}\n >\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.forecastedAmountYear.label',\n })}\n text={formatMessage(\n {\n id: 'unit.formatter.tonsCo2PerYear',\n },\n {\n number: formatNumber(\n convertCo2AmountKgToTons(\n project.forecastedAmountYearly.toString()\n ),\n { maximumFractionDigits: 0 }\n ),\n }\n )}\n caption={subtitles.forecastedAmountSubtitle}\n />\n </Box>\n </Tooltip>\n\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 </SimpleGrid>\n </>\n ) : (\n <></>\n )}\n\n <Box mt=\"2\">\n <CreditsAvailableBadge status={project.creditAvailability} />\n </Box>\n </Container>\n );\n};\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","const convertAreaM2ToHa = (areaInM2: string): number =>\n parseInt(areaInM2, 10) / 10000;\n\nexport default convertAreaM2ToHa;\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 { DownloadSimple, FilePdf } 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 <FilePdf />\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 icon={<DownloadSimple />}\n as={Link}\n href={documentUrl.url}\n size=\"sm\"\n />\n </Flex>\n ))}\n </Flex>\n </Container>\n );\n};\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 React 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';\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 forecastedAmountSubtitle?: 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 if (!project) {\n return (\n <>Invalid configuration, check if a project this id exists in the FPM</>\n );\n }\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <Flex flexDir={['column', null, null, 'row']} gap=\"4\" width=\"full\">\n <ProjectInfo project={project} 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 { Container, Center, Heading, Button, Box, Text, Flex } from 'boemly';\nimport React, { useContext } from 'react';\nimport { StrapiCustomerStory, strapiMediaUrl } from '../..';\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): 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 <Button\n as={Link}\n href={`/customer-stories/${customerStory.slug}`}\n variant=\"outline\"\n size=\"sm\"\n >\n {formatMessage({ id: 'sections.customerCard.more' })}\n </Button>\n </Box>\n </Flex>\n </Container>\n );\n};\n","import { Container, Heading, Button, Box, Text } from 'boemly';\nimport React, { useContext } from 'react';\nimport { StrapiCustomerStory, strapiMediaUrl } from '../..';\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): 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 size=\"xs\">{customerStory.quoteCardCustomerTitle}</Text>\n </Box>\n <Text size=\"xs\" color=\"black\">\n {customerStory.quoteCardQuote}\n </Text>\n <Button\n href={`/customer-stories/${customerStory.slug}`}\n as={Link}\n variant=\"outline\"\n size=\"sm\"\n mt=\"8\"\n >\n {formatMessage({ id: 'sections.customerQuoteCard.more' })}\n </Button>\n </Box>\n </Container>\n );\n};\n","import { Box, Container, Flex } from 'boemly';\nimport { StrapiCustomerStory, strapiMediaUrl } from '../..';\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 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): JSX.Element => {\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2, 3]} spacingX={6} spacingY={6}>\n {slice.customer_stories.map(({ attributes }) => {\n const customerStory: IStrapiData<StrapiCustomerStory> | undefined =\n customerStories.find(\n (cs) => cs.attributes.slug === attributes.slug\n );\n if (!customerStory) {\n return null;\n }\n return (\n <Box key={customerStory.id}>\n {attributes.variant === 'customerCard' && (\n <CustomerCard customerStory={customerStory.attributes} />\n )}\n {attributes.variant === 'quoteCard' && (\n <CustomerQuoteCard customerStory={customerStory.attributes} />\n )}\n {attributes.variant === 'logoCard' && (\n <LogoCard customerStory={customerStory.attributes} />\n )}\n </Box>\n );\n })}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport { Check, X } 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): JSX.Element => {\n switch (icon) {\n case 'check':\n return <Check size={20} color=\"var(--boemly-colors-primary-500)\" />;\n case 'cross':\n return <X 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 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 Divider,\n Heading,\n Badge,\n SimpleGrid,\n} from 'boemly';\nimport Image from 'next/image';\nimport { CaretRight } 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 spacing=\"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={<CaretRight 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 <Divider\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 { 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-space-24);\n padding-right: var(--boemly-space-24);\n padding-left: var(--boemly-space-24);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n width: calc(\n ${(props) => props.logoCount} *\n (var(--boemly-sizes-16) + var(--boemly-space-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-space-24);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-gap: var(--boemly-space-6);\n }\n`;\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 'react-use';\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 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 Tag,\n Text,\n Wrapper,\n useMediaQuery,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { CDN_URI } from '../../constants/api';\nimport { IntlContext } from 'react-intl';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\nimport { useState } from 'react';\nimport FullScreenImage from '../../components/FullScreenImage';\n\nexport interface TimelineProps {\n slice: {\n title: string;\n text?: string;\n tagline?: string;\n\n timelineItems: TimelineItem[];\n };\n}\n\nexport interface TimelineItem {\n id: number;\n tagline?: string;\n title: string;\n text?: string;\n badge?: { text: string; variant: 'orange' | 'green' | 'red' | 'gray' };\n logo?: StrapiImage;\n icon?: StrapiImage;\n image?: StrapiImage;\n button?: StrapiLink;\n backgroundShapes?: boolean;\n}\n\nexport const Timeline: React.FC<TimelineProps> = ({ slice }: TimelineProps) => {\n const { formatMessage } = useContext(IntlContext);\n const [visibleItems, setVisibleItems] = useState(3);\n const [mobile] = useMediaQuery(BREAKPOINT_MD_QUERY);\n const [isOpen, setIsOpen] = useState(false);\n\n const showMoreItems = () => {\n setVisibleItems((prevVisibleItems) => prevVisibleItems + 3);\n };\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <Flex flexDir={['column', null, null, 'row']}>\n <Box\n width={['full', null, null, '50%']}\n position={[null, null, null, 'sticky']}\n top={['16', null, null, '32']}\n height=\"full\"\n paddingRight={[null, null, null, '28']}\n >\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n {mobile && (\n <>\n <Spacer h=\"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, null, '50%']}\n borderLeft={[\n null,\n null,\n null,\n 'dashed 1px var(--boemly-colors-gray-200)',\n ]}\n position=\"relative\"\n width=\"full\"\n >\n <Flex\n flexDir=\"column\"\n overflow=\"visible\"\n gap={[null, null, null, '8']}\n >\n {slice.timelineItems.slice(0, visibleItems).map((item, index) => (\n <SimpleGrid\n gap={['none', null, null, '4']}\n key={item.id}\n columns={[1, null, null, 2]}\n alignContent=\"center\"\n gridTemplateColumns={[null, null, null, '1fr 16fr']}\n position=\"relative\"\n >\n <Flex\n alignItems=\"center\"\n justifyContent={['center', null, null, 'flex-start']}\n >\n <Box\n position=\"absolute\"\n transform={[null, 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 h=\"2\" />\n </>\n )}\n </Box>\n <Flex>\n {item.badge && (\n <Tag\n colorScheme={item.badge.variant}\n borderRadius=\"md\"\n >\n {item.badge.text}\n </Tag>\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 h=\"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","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 {\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 '@testing-library/react';\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 h=\"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 h={['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 spacingX=\"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 isLoading={isLoadingMoreUpcoming}\n >\n {formatMessage({ id: 'sections.events.loadMore' })}\n </Button>\n )}\n </Flex>\n </Wrapper>\n\n <Spacer h={['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 h=\"10\" />\n\n {(!pastEvents || pastEvents.length === 0) && !isLoadingPast ? (\n <>\n <Center>\n {formatMessage({ id: 'sections.events.noPastEvents' })}\n </Center>\n <Spacer h=\"24\" />\n </>\n ) : (\n // List of past events\n <SimpleGrid\n columns={[1, null, null, null, null, 2]}\n spacingX=\"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 isLoading={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 Tag,\n useMediaQuery,\n Button,\n} from 'boemly';\nimport { css } from '@emotion/react';\nimport Image from 'next/image';\nimport StrapiLinkButton from '../StrapiLinkButton';\nimport {\n BowlFood,\n CalendarBlank,\n CaretDown,\n CaretRight,\n CaretUp,\n ChalkboardTeacher,\n Confetti,\n Handshake,\n Headset,\n Info,\n Laptop,\n MapPinLine,\n PersonSimpleWalk,\n ProjectorScreenChart,\n Star,\n UsersThree,\n Webcam,\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): JSX.Element => {\n switch (eventType) {\n case EventType.WEBINAR:\n return <Webcam size={12} />;\n case EventType.CONFERENCE:\n return <Headset size={12} />;\n case EventType.MEET_UP:\n return <UsersThree size={12} />;\n case EventType.FOREST_WALK:\n return <PersonSimpleWalk size={12} />;\n case EventType.PARTNER_EVENT:\n return <Handshake size={12} />;\n case EventType.LUNCH_AND_LEARN:\n return <BowlFood size={12} />;\n case EventType.FAIR:\n return <ChalkboardTeacher size={12} />;\n case EventType.FESTIVAL:\n return <Confetti size={12} />;\n case EventType.ROADSHOW:\n return <ProjectorScreenChart size={12} />;\n default:\n return <Info size={12} weight=\"fill\" />;\n }\n};\n\nexport const EventCard = ({ event }: EventCardProps): 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={css`\n & span,\n div,\n img {\n border-top-left-radius: inherit;\n border-top-right-radius: 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 <Tag backgroundColor=\"green.600\">\n <Star size={12} weight=\"fill\" color=\"white\" />\n &nbsp;\n <Text size=\"xsLowBold\" color=\"white\">\n {formatMessage({\n id: 'sections.eventCard.recommendedEvent',\n })}\n </Text>\n </Tag>\n </Flex>\n ) : (\n <></>\n )}\n <Flex flexWrap=\"wrap\" gap=\"2\">\n {event.eventTypes.map((e) => (\n <Tag key={e.id}>\n {getEventIcon(e.eventType)}&nbsp;\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 </Tag>\n ))}\n {event.languages.map(({ id, language, countryCode }) => (\n <Tag key={id}>\n {getCountryFlag(countryCode)}&nbsp;\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {language}\n </Text>\n </Tag>\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 <Laptop size={20} color={'var(--boemly-colors-primary-700)'} />\n <Text size={['xsLowBold', null, null, 'smLowBold']}>Online</Text>\n </Flex>\n )}\n {event.location && (\n <Flex gap=\"2\" alignItems=\"center\">\n <MapPinLine\n size={20}\n color={'var(--boemly-colors-primary-700)'}\n weight=\"fill\"\n />\n <Text size={['xsLowBold', null, null, 'smLowBold']}>\n {event.location}\n </Text>\n </Flex>\n )}\n <Flex alignItems=\"center\" gap=\"2\">\n <CalendarBlank\n size={20}\n color={'var(--boemly-colors-primary-700)'}\n />\n <Text size={['xsLowBold', null, null, '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={['xsRegularNormal', null, null, '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\n mt=\"2\"\n onClick={toggleText}\n variant=\"link\"\n rightIcon={\n isExpanded ? <CaretUp size=\"12\" /> : <CaretDown size=\"12\" />\n }\n >\n {formatMessage(\n isExpanded\n ? {\n id: 'sections.eventCard.buttonShowLess',\n }\n : { id: 'sections.eventCard.buttonShowMore' }\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={<CaretRight 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 label={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","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 React from 'react';\nimport { BoemlyAlert, Box } from 'boemly';\n\nexport const PreviewAlert = (): 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';\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\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}: SEOTagsProps) => {\n const shareImageUrl = shareImage?.url ?? DEFAULT_SHARE_IMAGE;\n const shareImageAlt = shareImage?.alt ?? DEFAULT_SHARE_ALT;\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 </Head>\n );\n};\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 { AnalyticsFunction } from '../ContextProvider/ContextProvider';\n\nexport interface CustomSliceProps {\n slice: any;\n id: string;\n}\n\nexport interface SliceRendererProps {\n slices: any;\n blogPosts: IStrapiData<StrapiBlogPost>[];\n projects: PortfolioProject[];\n customerStories: IStrapiData<StrapiCustomerStory>[];\n locale?: Locale;\n CustomSlice?: ({ slice, id }: CustomSliceProps) => JSX.Element;\n analyticsFunction?: AnalyticsFunction;\n}\n\nexport const SliceRenderer = ({\n slices,\n blogPosts,\n projects,\n customerStories,\n locale = 'en',\n CustomSlice,\n analyticsFunction,\n}: SliceRendererProps): JSX.Element => (\n <ContextProvider locale={locale} analyticsFunction={analyticsFunction}>\n {slices.map((slice: any) => {\n switch (slice.__component) {\n case 'sections.hero':\n return (\n <Hero key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.map-hero':\n return (\n <MapHero key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.rich-text':\n return (\n <RichTextSection\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.left-text-right-card':\n return (\n <LeftTextRightCard\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-with-card':\n return (\n <TextWithCard\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n projects={projects}\n />\n );\n case 'sections.logo-grid-with-text':\n return (\n <LogoGridWithText\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.quote-cards':\n return (\n <QuoteCards\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.q-and-a':\n return (\n <QAndA key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.image-grid':\n return (\n <ImageGrid key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.full-width-image':\n return (\n <FullWidthImage\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-with-text-cards':\n return (\n <TextWithTextCards\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-card-grid':\n return (\n <TextCardGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.icon-grid':\n return (\n <IconGrid key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.image-text-sequence':\n return (\n <ImageTextSequence\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.steps':\n return (\n <Steps key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.text-carousel':\n return (\n <TextCarousel\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.link-cards-grid':\n return (\n <LinkCardsGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.small-hero':\n return (\n <SmallHero\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n theme=\"dark\"\n />\n );\n case 'sections.small-hero-light':\n return (\n <SmallHero\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n theme=\"light\"\n />\n );\n case 'sections.project-facts':\n return (\n <ProjectFacts\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n project={projects.find((p) => p.id === slice.projectId)}\n />\n );\n case 'sections.projects-grid':\n return (\n <ProjectsGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n projects={projects}\n />\n );\n case 'sections.projects-map':\n return (\n <ProjectsMap\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n projects={projects}\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 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","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 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 },\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 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 },\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 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 },\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 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 },\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"],"names":["STRAPI_URI","process","env","NEXT_PUBLIC_STRAPI_URI","STRAPI_DEFAULT_PAGE_SIZE","STRAPI_DEFAULT_POPULATE_DEPTH","STRAPI_FALLBACK_LOCALE","strapiClient","setupCache","axios","default","create","baseURL","headers","paramsSerializer","p","qs","stringify","encodeValuesOnly","timeout","ttl","includes","getAllSlugsFromStrapi","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","path","locales","_temp","_ref2$filters","filters","slugPromises","allSlugs","missingLocales","wrap","_context","prev","next","map","locale","get","params","then","response","data","page","slug","attributes","error","_error$response","status","Promise","all","sent","flat","flatMap","filter","fallbackSlug","some","_extends","abrupt","concat","stop","_x","_x2","_x3","apply","this","arguments","ShapePosition","FPM_API_URI","NEXT_PUBLIC_FPM_API_URI","CDN_URI","fpmClient","getPortfolioProjects","preview","cache","_yield$Promise$all","fpmProjects","strapiProjectsLocalized","strapiProjectsEnglish","strapiProjects","_i","_arr","project","undefined","pLevel","Map","length","fpmProjectId","set","fpmProject","_strapiProject$attrib","strapiProject","id","toReturn","thumbnail","portfolio","host","portfolioHost","getStrapiCollectionType","_ref2","key","_ref$locale","_ref$preview","_ref$filters","sharedParams","requestedLocaleData","results","_error$response2","fallbackLocaleDataEntry","find","localized","getStrapiSingleType","t0","isAxiosError","strapiMediaUrl","media","preferredSize","_media$data$attribute","url","ext","formats","indexOf","DEFAULT_SHARE_IMAGE","DEFAULT_SHARE_ALT","EXTENDABLE_HEADER_SECTIONS","DARK_THEME_HEADER_SECTIONS","SLICES_WITH_BLOG_POSTS","SLICES_WITH_CUSTOMER_STORIES","SLICES_WITH_PROJECTS","strapiLinkUrl","strapiLink","_strapiLink","_strapiLink2","ZoomableImage","image","_ref$zoom","zoom","_useState","useState","isZoomed","setIsZoomed","_useState2","backgroundPos","setBackgroundPos","imageSrc","img","zoomInPosition","e","zoomer","currentTarget","getBoundingClientRect","clientX","x","width","y","clientY","height","React","createElement","Fragment","Head","rel","as","href","Box","position","display","overflow","flexShrink","scrollSnapAlign","scrollSnapStop","draggable","cursor","backgroundImage","backgroundSize","backgroundPosition","onClick","toggleZoomImage","handleClick","onMouseMove","handleMove","Image","src","alt","fill","style","visibility","objectFit","FullScreenImage","images","isOpen","onClose","_ref$currentIndex","currentIndex","setCurrentIndex","containerRef","useRef","useLockBodyScroll","canMoveRight","useMemo","canMoveLeft","onRight","useCallback","c","onLeft","useKey","useEffect","setTimeout","_containerRef$current","current","scrollTo","left","clientWidth","behavior","BoemlyModal","title","trigger","size","content","Flex","insetY","insetX","alignItems","justifyContent","ref","flexGrow","flexBasis","gap","marginX","scrollSnapType","inset","pointerEvents","IconButton","icon","CaretLeft","variant","mr","CaretRight","ml","BREAKPOINT_MD","BREAKPOINT_LG","BREAKPOINT_MD_QUERY","BREAKPOINT_LG_QUERY","FullWidthImage","slice","setIsOpen","isMobile","useMediaQuery","DefaultSectionContainer","Wrapper","DefaultSectionHeader","isHero","tagline","text","taglineProps","textAlign","mt","titleProps","maxW","textProps","borderRadius","GLOBAL_STYLE","css","_templateObject","_taggedTemplateLiteralLoose","rootMessagesDe","creditsAvailableBadgeMessagesDe","messages","en","creditsAvailableBadgeMessagesEn","de","getMessages","messagesLocale","Object","keys","AnalyticsContext","createContext","createIntlCache","intlFactory","createIntl","IntlContext","ContextProvider","children","analyticsFunction","fetcher","resource","init","errorData","message","Error","t1","t2","body","SWRConfig","value","Global","styles","Provider","StrapiLinkButton","link","_ref$component","component","buttonProps","_objectWithoutPropertiesLoose","_excluded","adBlockDetected","useDetectAdBlock","useContext","buttonUrl","intercomLauncher","type","props","action","buttonText","Button","Link","w","window","HubSpotConversations","widget","open","hsConversationsOnReady","Hero","minHeight","backgroundColor","overflowX","Gradient","shape","bottom","borderTopRightRadius","right","top","transform","subTitle","color","mx","button","additionalButtons","IconGrid","flexDirection","Spacer","h","SimpleGrid","columns","iconsWithTextAndButton","rowGap","iconWithTextAndButton","margin","Heading","mb","Text","LinkedInIcon","viewBox","xmlns","clipPath","d","StrapiLinkButtonWithIcon","rightIcon","destination","Globe","getLinkIcon","ImageGrid","_useToken","useToken","minChildWidth","links","flexDir","flexWrap","ImageTextSequence","oneColumnGrid","primary50","gray700","background","imageTextRows","index","imageBox","LeftTextRightCard","push","useRouter","Grid","templateColumns","templateRows","GridItem","colSpan","rowSpan","pr","checkMarkLabels","BoemlyList","listItems","colorScheme","ArrowRight","card","PortfolioCard","_slice$card","_slice$card5","_slice$card2","_slice$card3","_slice$card4","cardTitle","facts","portfolioNumber","LogoGridWithText","RichText","logos","logo","MapHeroContainer","styled","MapHeroTextContainer","_templateObject2","ShapeContainer","_templateObject3","MapContainer","_templateObject4","MapGradient","_templateObject5","MapHero","belowBreakpoint","maxWidth","buttons","mobileMap","convertToKebabCase","str","matches","match","toLowerCase","join","VARIANTS","gray","tagLineColor","textColor","accordionVariant","otherQuestionsBackground","green","white","QAndA","_slice$variant","pb","hero","paddingY","maxHeight","paddingTop","paddingRight","overflowY","BoemlyAccordion","rows","questionsAndAnswers","defaultIndex","padding","otherQuestions","HeroCard","_slice$hero","section","QuoteCards","paddingBottom","shapes","Shape","radius","cards","QuoteCard","avatar","name","description","marginTop","RichTextSection","Steps","_slice$card$shapes","gray900","Array","steps","stepRefs","setStepRefs","stepProgress","setStepProgress","offsetY","useWindowScroll","windowHeight","useWindowSize","createRef","containerOffsetTop","offsetTop","_ref$current","currentItemOffsetTop","Center","step","options","forceBlock","marginBottom","borderLeft","opacity","borderRight","transition","ShapesCard","CreditAvailability","shapePositions","topLeft","bottomRight","topRight","bottomLeft","oppositesOfCorners","_oppositesOfCorners","unset","variants","positionIcon","TextCardGrid","justifyItems","zIndex","boxShadow","borderBottomRightRadius","borderBottomLeftRadius","borderTopLeftRadius","listProps","textSize","buttonIndex","weight","CarouselContainer","CarouselInnerContainer","motion","div","numberOfItems","CardContainer","TextCarousel","_useMeasure","useMeasure","itemRef","itemWidth","formatMessage","windowWidth","slides","displaySlides","setDisplaySlides","sliderIndex","setSliderIndex","sliderItemsWidth","offsetLeft","allowScroll","ITEM_GAP","_slice$isShuffled","isShuffled","slidesCopy","i","j","Math","floor","random","shuffleElements","animate","duration","ease","TextCardWithIcon","handleSlidesButtonClick","displayAs","py","px","AnimatePresence","initial","exit","ArrowLeft","TextWithTextCards","handleContactButtonClick","_slice$contact","contact","ContactArea","FORMAT_AS_HECTARE_CONFIG","unit","unitDisplay","maximumFractionDigits","FORMAT_AS_PERCENT_CONFIG","MapBoxStyle","CreditsAvailableBadge","_variants","CREDITS_AVAILABLE","NO_CREDITS_AVAILABLE","SOME_CREDITS_AVAILABLE","SOON_CREDITS_AVAILABLE","NextLink","Tag","ProjectGridCard","_project$thumbnail","_project$thumbnail2","_project$thumbnail3","_useContext","formatNumber","Container","my","friendlyName","area","location","certificationDate","year","Date","getFullYear","creditAvailability","TextWithCard","portfolioProject","projects","_slice$project","cardPosition","ProjectCard","footerSubTitle","footerTitle","columnGap","LinkCardsGrid","borderStyle","borderWidth","borderColor","transitionDuration","MEDIUM_TRANSITION_DURATION","_hover","minWidth","colors","dark","light","SmallHero","theme","gradient","tags","direction","justify","BlogItemContainer","ImageContainer","Blog","blogPosts","formatDate","sortedBlogPosts","blog_posts","sort","a","b","createdAt","getTime","spacingX","spacingY","blogPost","bp","category","teaser","DatePersonPair","date","person","author","ConditionalWrapper","condition","wrapper","ProjectsGrid","filteredProjects","passHref","legacyBehavior","FONT_CUSTOMIZATIONS","heading","mono","MinimalProviders","IntlProvider","BoemlyThemeProvider","fonts","MapMarker","projectDeveloper","_ref$portfolioHost","_ref$isPublic","isPublic","_useDisclosure","useDisclosure","onOpen","blue600","onMouseEnter","onMouseLeave","MapPin","shadow","whiteSpace","mapboxStyle","mapboxgl","accessToken","CtaCardType","ProjectsMap","boundingBoxes","minLeft","minBottom","maxRight","maxTop","geom","center","defaultCenterCoordinates","longitude","latitude","bounds","coordinates","forEach","mapContainer","container","CaliTerrain","defaultZoomLevel","maxZoom","_project$projectDevel","document","createRoot","render","marker","Marker","offset","setLngLat","addTo","remove","Video","youTubeID","frameBorder","allow","allowFullScreen","FullWidthHighlightQuote","quote","AvatarWithName","avatarWithName","orientation","SliderContainer","SliderInnerContainer","ItemContainer","aspectRatio","ALLOWED_RATIOS","getClosestRatio","ratio","minDiff","abs","posMinDiff","allowedRatio","FullWidthImageSlider","imageRef","imageWidth","imageCount","noOfLines","fontSize","caption","SideBySideImages","EventType","STATES","paddingTagline","paddingTitle","buttonJustifyContent","textMarginLeft","textMarginRight","centerWithoutImage","centerWithImage","taglineColor","titleColor","subTitleColor","Cta","ctaCards","ctaCard","ctaCardType","CenterWithImage","CenterWithoutImage","Left","Right","getTypeOfCard","elevation","backgroundShape","marginLeft","marginRight","paddingX","fontFamily","fontWeight","lineHeight","CtaOnly","Glossary","copyToClipboard","useCopyToClipboard","grouped","copiedItem","setCopiedItem","glossary_items","localeCompare","curr","_curr$attributes$titl","at","toUpperCase","handleAnchorClick","_window","currentUrl","split","entries","_ref3","letter","items","placeSelf","spacing","item","wordBreak","scrollMarginTop","Check","LinkIcon","_onClick","_callee2","_context2","Divider","ShopCheckout","validateForm","values","errors","contributionValue","currency","badge","Badge","textTransform","checkoutText","LabelNumberPair","label","number","pricePerKg","Formik","initialValues","initialContributionValue","validate","onSubmit","checkoutURL","URL","currentURL","searchParams","append","batchId","toString","pathname","couponId","touched","handleSubmit","summaryPrice","Form","Field","_ref4","BoemlyFormControl","inputProps","field","rightAddonsOrElements","InputRightAddon","isInvalid","errorMessage","minimumFractionDigits","taxInPercent","factKeyColor","factValueColor","Facts","fact","sortByCreatedAt","BlogCards","mobile","blogPostsToDisplay","_slice$blogPostCatego","blogPostCategory","_blogPost$attributes$","_slice$blogPostCatego2","_blogPost$attributes$2","calculateTaxIncludedValue","parseInt","contributionValueCurrency","isNaN","SmallCheckout","subtitle","contributionValueTons","setValues","_ref5","onChange","target","valueAsNumber","_ref6","ProjectInfo","amount","start","end","monthsDifference","yearsDifference","areaInM2","subtitles","LabelTextPair","areaSubtitle","locationSubtitle","month","startSubtitle","years","getMonth","timeSpanSubtitle","projectType","verificationStandard","projectTypeSubtitle","projectDeveloperSubtitle","defaultMessage","verificationStandardSubtitle","defaultIssuer","logoUrl","forecastedAmountYearly","riskBuffer","Tooltip","forecastedAmountSubtitle","riskBufferSubtitle","DocumentsDownloadList","documentUrls","documentUrl","FilePdf","DownloadSimple","Contact","border","ProjectFacts","customTitle","customSubtitle","customButton","contactTitle","contactText","contactButton","contactAvatar","CustomerCard","customerStory","borderTopRadius","cardImage","pt","customerCardCustomerIndustry","CustomerQuoteCard","customerName","quoteCardCustomerTitle","quoteCardQuote","LogoCard","marginY","CustomerStories","customerStories","customer_stories","cs","BULLET_POINT_VARIANTS","bulletPointColor","Icon","X","factColor","dividerColor","Comparison","comparisonCards","comparisonCard","factTitle","factSubtitle","lists","list","logoCount","LogoGrid","CarouselMarqueeBannerContent","_useWindowSize","hasEnoughLogosForLoop","logosToRender","from","emblaRef","useEmblaCarousel","loop","align","containScroll","dragFree","AutoScroll","playOnInit","speed","stopOnInteraction","stopOnMouseEnter","stopOnFocusIn","CarouselMarqueeBanner","showChild","setShowChild","Timeline","visibleItems","setVisibleItems","timelineItems","alignContent","gridTemplateColumns","backgroundShapes","prevVisibleItems","m","Sort","isSameDate","date1","date2","getDate","EventCard","_event$location$lengt","_event$location","_event$image","_event$image2","_event$image3","event","isExpanded","setIsExpanded","isLocationTooLong","recommended","Star","eventTypes","eventType","WEBINAR","Webcam","CONFERENCE","Headset","MEET_UP","UsersThree","FOREST_WALK","PersonSimpleWalk","PARTNER_EVENT","Handshake","LUNCH_AND_LEARN","BowlFood","FAIR","ChalkboardTeacher","FESTIVAL","Confetti","ROADSHOW","ProjectorScreenChart","Info","getEventIcon","replace","languages","language","countryCode","char","String","fromCodePoint","charCodeAt","online","Laptop","MapPinLine","CalendarBlank","day","allDay","getUTCHours","minimumIntegerDigits","getUTCMinutes","substring","CaretUp","CaretDown","buttonVariant","speakers","speaker","useEvents","batchSize","_useSWRInfinite","useSWRInfinite","getKey","revalidateFirstPage","revalidateAll","isLoading","setSize","mutate","count","_data$","meta","pagination","total","isLoadingMore","loadMore","canLoadMore","refetch","Events","eventTypeFilter","setEventTypeFilter","languageFilter","setLanguageFilter","_useState3","NEWEST_FIRST","setSort","_useState4","allEventTypeOptions","setAllEventTypeOptions","_useState5","allLanguageOptions","setAllLanguageOptions","now","toISOString","buildEventsUrl","startFilter","OLDEST_FIRST","search","getUpcomingKey","getPastKey","_useEvents","upcomingData","isLoadingUpcoming","isLoadingMoreUpcoming","canLoadMoreUpcoming","loadMoreUpcoming","_useEvents2","pastData","isLoadingPast","isLoadingMorePast","canLoadMorePast","loadMorePast","processEvents","_data$flatMap","_d$body","t","upcomingEvents","pastEvents","fetchAllOptions","events","allEventTypes","allLanguages","fetch","json","Set","_event$attributes","add","_event$attributes2","removeFilter","filterType","valueToRemove","upcomingTitle","upcomingDescription","filterSearch","Select","isMultiple","isSearchable","placeholder","searchPlaceholder","selected","option","BoemlyTag","isClosable","singleLanguage","placeItems","pastTitle","pastDescription","BoemlyAlert","_shareImage$url","_shareImage$alt","shareImage","_ref$metaTitleSuffix","metaTitleSuffix","_ref$favicon","favicon","_ref$domain","domain","shareImageUrl","shareImageAlt","property","CustomSlice","slices","__component","projectId","context","global","post","blog","_post$attributes$meta","_post$attributes$meta2","_post$attributes$meta3","_global$attributes$me","_post$attributes","_post$attributes$meta4","_post$attributes$meta5","_post$attributes$meta6","_post$attributes$meta7","_post$attributes$meta8","_post$attributes$meta9","_global$attributes$me2","metaShareImageUrl","metadata","returnBlog","returnProjects","headerType","extendable","headerNavMenus","navbar","navMenus","headerButtons","footerLinks","footer","banner","topBanner","isFallbackLocale","_customerStory$attrib","_customerStory$attrib2","_customerStory$attrib3","_customerStory$attrib4","_customerStory$attrib5","_customerStory$attrib6","_customerStory$attrib7","_customerStory$attrib8","_customerStory$attrib9","_customerStory$attrib10","returnCustomerStories","_page$attributes$meta","_page$attributes$meta2","_page$attributes$meta3","_page$attributes$meta4","_page$attributes","_page$attributes$slic","_page$attributes$slic2","_page$attributes$meta5","_page$attributes$meta6","_page$attributes$meta7","_page$attributes$meta8","_page$attributes$meta9","_page$attributes$meta10","returnBlogPosts","_project$attributes$m","_project$attributes$m2","_project$attributes$m3","_project$attributes","_project$attributes$s","_project$attributes$s2","_project$attributes$m4","_project$attributes$m5","_project$attributes$m6","_project$attributes$m7","_project$attributes$m8","_project$attributes$m9"],"mappings":"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"}
1
+ {"version":3,"file":"strapi-slices.cjs.production.min.js","sources":["../src/constants/strapi.ts","../src/integrations/strapi/strapiClient.ts","../src/integrations/strapi/getAllSlugsFromStrapi.ts","../src/constants/api.ts","../src/slices/TextCardGrid/TextCardGrid.tsx","../src/integrations/fpmClient.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/strapiLinkUrl.ts","../src/components/SEOTags/SEOTags.tsx","../src/components/FullScreenImage/ZoomableImage.tsx","../src/components/FullScreenImage/FullScreenImage.tsx","../src/constants/breakpoints.ts","../src/slices/FullWidthImage/FullWidthImage.tsx","../src/constants/globalStyle.ts","../src/rootMessages.de.ts","../src/components/CreditsAvailableBadge/messages.de.ts","../src/components/EventCard/messages.de.ts","../src/components/portfolio/DocumentsDownloadList/messages.de.ts","../src/components/portfolio/ProjectInfo/messages.de.ts","../src/components/portfolio/SmallCheckout/messages.de.ts","../src/components/ProjectGridCard/messages.de.ts","../src/slices/Comparison/messages.de.ts","../src/slices/Cta/messages.de.ts","../src/components/CustomerCard/messages.de.ts","../src/components/CustomerQuoteCard/messages.de.ts","../src/slices/Events/messages.de.ts","../src/slices/Glossary/messages.de.ts","../src/slices/ProjectFacts/messages.de.ts","../src/slices/ProjectsMap/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/utils/getMessages.ts","../src/rootMessages.en.ts","../src/components/CreditsAvailableBadge/messages.en.ts","../src/components/EventCard/messages.en.ts","../src/components/portfolio/DocumentsDownloadList/messages.en.ts","../src/components/portfolio/ProjectInfo/messages.en.ts","../src/components/portfolio/SmallCheckout/messages.en.ts","../src/components/ProjectGridCard/messages.en.ts","../src/slices/Comparison/messages.en.ts","../src/slices/Cta/messages.en.ts","../src/components/CustomerCard/messages.en.ts","../src/components/CustomerQuoteCard/messages.en.ts","../src/slices/Events/messages.en.ts","../src/slices/Glossary/messages.en.ts","../src/slices/ProjectFacts/messages.en.ts","../src/slices/ProjectsMap/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/components/ContextProvider/ContextProvider.tsx","../src/components/StrapiLinkButton/StrapiLinkButton.tsx","../src/utils/openHubSpotChat.ts","../src/slices/Hero/Hero.tsx","../src/slices/IconGrid/IconGrid.tsx","../src/icons/LinkedInIcon.tsx","../src/components/StrapiLinkButtonWithIcon/StrapiLinkButtonWithIcon.tsx","../src/slices/ImageGrid/ImageGrid.tsx","../src/slices/ImageTextSequence/ImageTextSequence.tsx","../src/slices/LeftTextRightCard/LeftTextRightCard.tsx","../src/slices/LogoGridWithText/LogoGridWithText.tsx","../src/slices/MapHero/styles.ts","../src/slices/MapHero/MapHero.tsx","../src/utils/convertToKebabCase.ts","../src/slices/QAndA/QAndA.tsx","../src/slices/QuoteCards/QuoteCards.tsx","../src/slices/RichTextSection/RichTextSection.tsx","../src/slices/Steps/Steps.tsx","../src/models/fpm/FPMProject.ts","../src/slices/TextCarousel/styles.ts","../src/slices/TextCarousel/TextCarousel.tsx","../src/utils/shuffleElements.ts","../src/slices/TextWithTextCards/TextWithTextCards.tsx","../src/constants/formatter.ts","../src/components/CreditsAvailableBadge/CreditsAvailableBadge.tsx","../src/constants/mapbox.ts","../src/components/ProjectGridCard/ProjectGridCard.tsx","../src/slices/TextWithCard/TextWithCard.tsx","../src/slices/LinkCardsGrid/LinkCardsGrid.tsx","../src/slices/SmallHero/SmallHero.tsx","../src/slices/Blog/styles.ts","../src/slices/Blog/Blog.tsx","../src/slices/ProjectsGrid/ProjectsGrid.tsx","../src/constants/fontCustomizations.ts","../src/components/MinimalProviders/MinimalProviders.tsx","../src/slices/ProjectsMap/MapMarker.tsx","../src/slices/ProjectsMap/mapboxStyle.ts","../src/slices/ProjectsMap/ProjectsMap.tsx","../src/slices/Cta/Cta.tsx","../src/utils/mergeBoundingBoxes.ts","../src/slices/Video/Video.tsx","../src/slices/FullWidthHighlightQuote/FullWidthHighlightQuote.tsx","../src/slices/FullWidthImageSlider/styles.ts","../src/utils/getClosestRatio.ts","../src/slices/FullWidthImageSlider/FullWidthImageSlider.tsx","../src/slices/SideBySideImages/SideBySideImages.tsx","../src/models/strapi/StrapiEvent.ts","../src/slices/CtaOnly/CtaOnly.tsx","../src/slices/Glossary/Glossary.tsx","../src/slices/ShopCheckout/ShopCheckout.tsx","../src/constants/domain.ts","../src/slices/Facts/Facts.tsx","../src/slices/BlogCards/BlogCards.tsx","../src/components/portfolio/SmallCheckout/SmallCheckout.tsx","../src/components/portfolio/ProjectInfo/ProjectInfo.tsx","../src/utils/convertCo2AmountKgToTons.ts","../src/utils/getTimeSpanInYears.ts","../src/utils/convertAreaM2ToHa.ts","../src/components/portfolio/DocumentsDownloadList/DocumentsDownloadList.tsx","../src/components/portfolio/Contact/Contact.tsx","../src/slices/ProjectFacts/ProjectFacts.tsx","../src/components/CustomerCard/CustomerCard.tsx","../src/components/CustomerQuoteCard/CustomerQuoteCard.tsx","../src/components/LogoCard/LogoCard.tsx","../src/slices/CustomerStories/CustomerStories.tsx","../src/slices/Comparison/Icon.tsx","../src/slices/Comparison/Comparison.tsx","../src/slices/CarouselMarqueeBanner/styles.ts","../src/slices/CarouselMarqueeBanner/CarouselMarqueeBanner.tsx","../src/slices/Timeline/Timeline.tsx","../src/utils/isSameDate.ts","../src/slices/Events/Events.tsx","../src/components/EventCard/EventCard.tsx","../src/utils/getCountryFlag.ts","../src/models/hooks/useEvents.ts","../src/components/PreviewAlert/PreviewAlert.tsx","../src/components/SliceRenderer/SliceRenderer.tsx","../src/utils/mergeGlobalAndStrapiBlogPostData.ts","../src/utils/mergeGlobalAndStrapiCustomerStoryData.ts","../src/utils/mergeGlobalAndStrapiPageData.ts","../src/utils/mergeGlobalAndStrapiProjectData.ts"],"sourcesContent":["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 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","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","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 React from 'react';\nimport { css } from '@emotion/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 { CaretRight } 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 variants[slice.variant]\n .positionIcon(index)\n .includes('unset')\n ? css`\n & span,\n div,\n img {\n border-radius: var(--boemly-radii-xl);\n }\n `\n : css`\n & span,\n div,\n img {\n border-${\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ]\n }-radius: var(--boemly-radii-full);\n }\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 size: '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 <CaretRight 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 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","import {\n IStrapiData,\n IStrapiResponse,\n PortfolioProject,\n StrapiProject,\n} from '../..';\nimport {\n STRAPI_DEFAULT_PAGE_SIZE,\n STRAPI_DEFAULT_POPULATE_DEPTH,\n} from '../../constants/strapi';\nimport FPMProject from '../../models/fpm/FPMProject';\nimport fpmClient from '../fpmClient';\nimport strapiClient from './strapiClient';\n\nconst FALLBACK_LOCALE = 'en';\n\nconst getPortfolioProjects = async (\n locale: string = 'en',\n preview: boolean = false\n): Promise<PortfolioProject[]> => {\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 status: preview ? 'draft' : 'published',\n };\n\n const [\n { data: fpmProjects },\n { data: strapiProjectsLocalized },\n { data: strapiProjectsEnglish },\n ] = await Promise.all([\n fpmClient.get<FPMProject[]>('/public/projects', { cache }),\n strapiClient.get<IStrapiResponse<IStrapiData<StrapiProject>[]>>(\n '/projects',\n { params, cache }\n ),\n strapiClient.get<IStrapiResponse<IStrapiData<StrapiProject>[]>>(\n '/projects',\n {\n params: { ...params, locale: FALLBACK_LOCALE },\n cache,\n }\n ),\n ]);\n\n const strapiProjects = new Map<string, IStrapiData<StrapiProject>>();\n\n for (const project of [\n ...strapiProjectsEnglish.data,\n ...strapiProjectsLocalized.data,\n ]) {\n if (project.attributes.fpmProjectId) {\n strapiProjects.set(project.attributes.fpmProjectId, project);\n }\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 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 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 Service,\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 | Service\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 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 * The schema falls back to the default schema if it is invalid.\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\nconst DEFAULT_SCHEMA: WithContext<Organization> = {\n '@context': 'https://schema.org',\n '@type': 'Organization',\n name: 'Tree.ly',\n url: 'https://tree.ly',\n logo: 'https://cdn.tree.ly/logo.png',\n address: {\n '@type': 'PostalAddress',\n streetAddress: 'Littengasse 2b/c',\n addressLocality: 'Dornbirn',\n postalCode: '6850',\n addressRegion: 'Vorarlberg',\n addressCountry: 'AT',\n },\n contactPoint: {\n '@type': 'ContactPoint',\n telephone: '+43-5572-432015',\n contactType: 'Customer Service',\n areaServed: 'AT',\n availableLanguage: ['English', 'German'],\n },\n sameAs: [\n 'https://www.linkedin.com/company/tree-ly',\n 'https://www.facebook.com/treely',\n 'https://www.instagram.com/treely',\n ],\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 || DEFAULT_SCHEMA;\n let isValidSchema = validateSchema(schemas);\n\n if (schemaMarkup && !isValidSchema) {\n console.warn(\n 'Invalid schema markup provided to SEOTags component. Falling back to default schema.',\n schemaMarkup\n );\n schemas = DEFAULT_SCHEMA;\n isValidSchema = true;\n }\n\n const schemaArray = Array.isArray(schemas) ? schemas : [schemas];\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 // Add index to ensure uniqueness, especially for fallback identifiers\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 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 React, { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { BoemlyModal, Flex, IconButton } from 'boemly';\nimport { useKey, useLockBodyScroll } from 'react-use';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport { CaretLeft, CaretRight } 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 useLockBodyScroll(isOpen);\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]\n );\n const onLeft = useCallback(\n () => canMoveLeft && setCurrentIndex && setCurrentIndex((c) => c - 1),\n [canMoveLeft]\n );\n\n useKey('ArrowRight', onRight, {}, [onRight]);\n useKey('ArrowLeft', onLeft, {}, [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 onClose={onClose}\n isOpen={isOpen}\n title=\"\"\n trigger=\"\"\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 icon={<CaretLeft size={16} />}\n aria-label=\"Previous picture\"\n variant=\"outline\"\n pointerEvents=\"all\"\n mr=\"6\"\n />\n\n <IconButton\n visibility={canMoveRight ? 'visible' : 'hidden'}\n onClick={onRight}\n icon={<CaretRight size={16} />}\n aria-label=\"Next picture\"\n variant=\"outline\"\n pointerEvents=\"all\"\n ml=\"4\"\n />\n </Flex>\n </Flex>\n }\n />\n );\n};\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 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\" height={['3xs', null, 'xl']}>\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 { css } from '@emotion/react';\n\nexport const GLOBAL_STYLE = css`\n :root {\n --default-hero-height: calc(100vh - var(--boemly-space-24));\n }\n\n a {\n text-decoration: none;\n }\n`;\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 messagesDe = {\n 'components.creditsAvailableBadge.text.yes': 'Credits verfügbar',\n 'components.creditsAvailableBadge.text.some': 'Einige verbleibende Credits',\n 'components.creditsAvailableBadge.text.no': 'Keine verbleibenden Credits',\n 'components.creditsAvailableBadge.text.notYet': 'Credits bald verfügbar',\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 'features.portfolio.documentsDownloadList.projectDocuments':\n 'Projektdokumente',\n 'features.portfolio.documentsDownloadList.downloadDocument':\n 'Dokument herunterladen',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'features.projectInfo.projectInfo.value': 'Projekt Infos',\n 'features.projectInfo.properties.area': 'Projekt Fläche',\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® Forest Carbon Standard, ISO 14064-2',\n 'features.projectInfo.properties.verificationStandard.value.MfKWCH':\n 'Methodik für Klimaschutzprojekte im Wald für die Schweiz',\n 'features.projectInfo.properties.forecastedAmountYear.toolTip':\n 'Dies ist das jährliche Projekt-Senkenvolumen gemäß dem TÜV-geprüften PDD, dieser Wert stellt nicht die aktuellen Verfügbarkeiten dar.',\n 'features.projectInfo.properties.forecastedAmountYear.label':\n '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 € ein',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '€',\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ür größere Einkäufe 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 'components.projectGridCard.certified': 'Zertifiziert, {year}',\n 'components.projectGridCard.certificationInProgress':\n 'Zertifizierung ist in Arbeit',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.comparison.backgroundShapes': 'Hintergrundformen',\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.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': 'Älteste 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 '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 'sections.shopCheckout.intro.price': 'Preis',\n\n 'sections.shopCheckout.contributionValue.label.EUR':\n 'Geben sie einen Betrag in € ein',\n 'sections.shopCheckout.contributionValue.label.CHF':\n 'Geben sie einen Betrag in CHF ein',\n 'sections.shopCheckout.contributionValue.unit.EUR': '€',\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ür größere Einkäufe kontaktieren Sie bitte unser Verkaufsteam über 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₂',\n 'unit.formatter.tonsCo2PerYear': '{number} tCO₂/Jahr',\n};\nexport default unitMessagesDe;\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 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","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.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 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 '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® Forest Carbon Standard, ISO 14064-2',\n 'features.projectInfo.properties.verificationStandard.value.MfKWCH':\n 'Methodik für Klimaschutzprojekte im Wald für die Schweiz',\n 'features.projectInfo.properties.forecastedAmountYear.label':\n 'Project Volume',\n 'features.projectInfo.properties.forecastedAmountYear.toolTip':\n \"This is the yearly project sink volume according to the TÜV-verified PDD, this value doesn't represent current 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 €',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '€',\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 messagesDe = {\n 'components.projectGridCard.certified': 'Certified, {year}',\n 'components.projectGridCard.certificationInProgress':\n 'Certification in progress',\n};\nexport default messagesDe;\n","const messagesEn = {\n 'sections.comparison.backgroundShapes': 'Background shapes',\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 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 '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 'sections.shopCheckout.intro.price': 'Price',\n\n 'sections.shopCheckout.contributionValue.label.EUR':\n 'Enter contribution value in €',\n 'sections.shopCheckout.contributionValue.label.CHF':\n 'Enter contribution value in CHF',\n 'sections.shopCheckout.contributionValue.unit.EUR': '€',\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₂',\n 'unit.formatter.tonsCo2PerYear': '{number} tCO₂/year',\n};\nexport default unitMessagesEn;\n","import React, { createContext } from 'react';\nimport { createIntl, createIntlCache } from 'react-intl';\nimport { Global } from '@emotion/react';\nimport { GLOBAL_STYLE } from '../../constants/globalStyle';\nimport getMessages from '../../utils/getMessages';\nimport strapiClient from '../../integrations/strapi/strapiClient';\nimport { SWRConfig } from 'swr/_internal';\n\nexport type AnalyticsFunction = ({\n type,\n props,\n}: {\n type: 'track' | 'page';\n props?: Record<string, any>;\n}) => void;\n\nexport const AnalyticsContext = createContext<AnalyticsFunction | undefined>(\n undefined\n);\n\nconst cache = createIntlCache();\n\nconst intlFactory = (locale: string) =>\n createIntl(\n {\n locale,\n messages: getMessages(locale),\n },\n cache\n );\n\nexport const IntlContext = createContext(intlFactory('en'));\n\nexport interface ContextProviderProps {\n children: React.ReactNode;\n locale: string;\n analyticsFunction?: AnalyticsFunction;\n}\n\nexport const ContextProvider: React.FC<ContextProviderProps> = ({\n children,\n locale,\n analyticsFunction,\n}: ContextProviderProps): 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 <IntlContext.Provider value={intlFactory(locale)}>\n <AnalyticsContext.Provider value={analyticsFunction}>\n {children}\n </AnalyticsContext.Provider>\n </IntlContext.Provider>\n </SWRConfig>\n </>\n );\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 colorScheme?: 'primary' | 'gray' | 'orange' | 'green' | 'white';\n rightIcon?: JSX.Element;\n leftIcon?: 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 ...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 if (link.intercomLauncher) {\n if (adBlockDetected) {\n return (\n <Button\n {...buttonProps}\n as={Link}\n href=\"mailto:hello@tree.ly\"\n onClick={handleClick}\n >\n {link.text}\n </Button>\n );\n }\n\n return (\n <Button\n {...buttonProps}\n onClick={() => {\n handleClick();\n openHubSpotChat();\n }}\n >\n {link.text}\n </Button>\n );\n }\n\n return (\n <Button\n {...buttonProps}\n as={Link}\n href={strapiLinkUrl(link)}\n onClick={handleClick}\n >\n {link.text}\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 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): 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 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): 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 h=\"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 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 React from 'react';\nimport { CaretRight, Globe } 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 <Globe />;\n }\n default: {\n return <CaretRight />;\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';\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, { 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 { CaretRight } 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 <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={<CaretRight size=\"10\" color={gray700} />}\n component=\"ImageTextSequence\"\n />\n )}\n </Box>\n {!oneColumnGrid && index % 2 === 0 && imageBox}\n </Fragment>\n );\n }\n )}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\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 { ArrowRight } 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 colorScheme=\"white\"\n variant=\"outline\"\n rightIcon={<ArrowRight />}\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 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 { ArrowRight } 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 colorScheme=\"white\"\n variant=\"outline\"\n mt=\"6\"\n rightIcon={<ArrowRight />}\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 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\n padding-top: var(--boemly-space-32);\n }\n`;\n\nexport const ShapeContainer = styled(Box)`\n position: absolute;\n bottom: calc(var(--boemly-space-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-space-72) * -1);\n background-color: var(--boemly-colors-white);\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\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 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","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 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 { ArrowRight } 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 colorScheme=\"white\"\n background=\"white\"\n rightIcon={<ArrowRight />}\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","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 image: (\n <Image\n src={strapiMediaUrl(card.avatar.image.img, 'small')}\n alt={card.avatar.image.alt}\n fill\n style={{\n objectFit: card.avatar.image.objectFit || 'cover',\n }}\n />\n ),\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 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 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 'react-use';\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]);\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 size: '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 Issuer from './Issuer';\n\nexport enum CreditAvailability {\n CREDITS_AVAILABLE = 'credits_available',\n NO_CREDITS_AVAILABLE = 'no_credits_available',\n SOME_CREDITS_AVAILABLE = 'some_credits_available',\n SOON_CREDITS_AVAILABLE = 'soon_credits_available',\n}\n\ninterface FPMProject {\n id: string;\n title: string;\n friendlyName?: string;\n\n isPublic?: boolean;\n geom?: {\n type: 'Point';\n coordinates: [number, number];\n };\n area?: number;\n location?: string;\n start?: Date;\n end?: Date;\n projectType?: {\n title: string;\n id: string;\n createdAt: Date;\n updatedAt: Date;\n };\n projectDeveloper?: {\n name: string;\n id: string;\n createdAt: Date;\n updatedAt: Date;\n };\n verificationStandard?: {\n id: string;\n createdAt: Date;\n updatedAt: Date;\n };\n forecastedAmountYearly?: number;\n riskBuffer?: number;\n defaultIssuer?: Issuer;\n creditAvailability: CreditAvailability;\n certificationDate?: Date;\n\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport default FPMProject;\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-space-6);\n padding: var(--boemly-space-8) 0;\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n margin-top: var(--boemly-space-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-space-6);\n justify-content: center;\n\n width: calc(\n (var(--boemly-sizes-sm) + var(--boemly-space-6)) *\n ${({ numberOfItems }: CarouselInnerContainerProps) => numberOfItems} +\n var(--boemly-space-6)\n );\n min-width: var(--boemly-sizes-full);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n gap: var(--boemly-space-1);\n justify-content: flex-start;\n width: calc(\n (var(--boemly-sizes-2xs) + var(--boemly-space-4)) *\n ${({ numberOfItems }: CarouselInnerContainerProps) => numberOfItems} +\n var(--boemly-space-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-space-4);\n\n &:first-of-type {\n margin-left: var(--boemly-space-6);\n }\n }\n`;\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 'react-use';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { ArrowLeft, ArrowRight } 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, { width: itemWidth }] = useMeasure<HTMLDivElement>();\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 <IconButton\n key=\"leftButton\"\n as={motion.button}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex - 1)}\n aria-label={formatMessage({\n id: 'sections.textCarousel.moveLeft',\n })}\n icon={<ArrowLeft size={16} />}\n pointerEvents=\"auto\"\n boxShadow=\"md\"\n />\n )}\n </AnimatePresence>\n </Box>\n <Box>\n <AnimatePresence>\n {canMoveRight && (\n <IconButton\n key=\"rightButton\"\n as={motion.button}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex + 1)}\n aria-label={formatMessage({\n id: 'sections.textCarousel.moveRight',\n })}\n icon={<ArrowRight size={16} />}\n pointerEvents=\"auto\"\n boxShadow=\"md\"\n />\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","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 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 image: (\n <Image\n src={strapiMediaUrl(\n slice.contact.avatar.image.img,\n 'small'\n )}\n alt={slice.contact.avatar.image.alt}\n fill\n style={{\n objectFit:\n slice.contact.avatar.image.objectFit || 'cover',\n }}\n />\n ),\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 image: (\n <Image\n src={strapiMediaUrl(\n slice.contact.avatar.image.img,\n 'small'\n )}\n alt={slice.contact.avatar.image.alt}\n fill\n style={{\n objectFit:\n slice.contact.avatar.image.objectFit || 'cover',\n }}\n />\n ),\n }}\n link={{\n text: slice.contact.button.text,\n onClick: handleContactButtonClick,\n }}\n />\n )}\n </>\n </Wrapper>\n </DefaultSectionContainer>\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 { Flex, Tag, 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: 'green.600',\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 return (\n <Flex\n justifyContent=\"flex-start\"\n as={href ? NextLink : undefined}\n href={href}\n >\n <Tag backgroundColor={variant.color}>\n <Text color=\"white\" size=\"xsLowBold\">\n {variant.message}\n </Text>\n </Tag>\n </Flex>\n );\n};\n\nexport default CreditsAvailableBadge;\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 { Box, Container, Flex, Heading, Tag, Text } from 'boemly';\nimport React, { useContext } from 'react';\nimport Image from 'next/image';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport { strapiMediaUrl } from '../..';\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): 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 <Tag>\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {formatNumber(\n (project.area || 0) / 10000,\n FORMAT_AS_HECTARE_CONFIG\n )}\n </Text>\n </Tag>\n <Tag>\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {project.location}\n </Text>\n </Tag>\n {project.certificationDate ? (\n <Tag>\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 </Tag>\n ) : (\n <Tag>\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {formatMessage({\n id: 'components.projectGridCard.certificationInProgress',\n })}\n </Text>\n </Tag>\n )}\n <CreditsAvailableBadge status={project.creditAvailability} />\n </Flex>\n </Flex>\n </Container>\n );\n};\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 { ArrowRight } 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, PortfolioProject, StrapiProject } from '../..';\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 colorScheme=\"white\"\n variant=\"outline\"\n rightIcon={<ArrowRight />}\n component=\"TextWithCard\"\n />\n )}\n </GridItem>\n {slice.cardPosition === 'right' && card}\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\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 { CaretRight } 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 <Box\n key={id}\n as={Link}\n href={strapiLinkUrl(link)}\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 <CaretRight />\n </Box>\n </Box>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n);\n","import React from 'react';\nimport {\n Box,\n DefaultSectionHeader,\n Flex,\n Gradient,\n Tag,\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 colorScheme: 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, colorScheme }) => (\n <Tag\n key={id}\n colorScheme={colorScheme}\n size=\"md\"\n variant=\"subtle\"\n >\n {text}\n </Tag>\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 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\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 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]} spacingX={56} spacingY={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 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: JSX.Element) => JSX.Element;\n children: 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: 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","export const FONT_CUSTOMIZATIONS = {\n body: 'Inter',\n heading: 'Inter',\n display: 'GintoNord',\n mono: 'SpaceMono',\n};\n","import React from 'react';\nimport { FONT_CUSTOMIZATIONS } from '../../constants/fontCustomizations';\nimport { BoemlyThemeProvider } from 'boemly';\nimport { IntlProvider } from 'react-intl';\nimport getMessages from '../../utils/getMessages';\n\ninterface MinimalProvidersProps {\n locale: string;\n children: JSX.Element | JSX.Element[];\n}\n\nconst MinimalProviders = ({ children, locale }: MinimalProvidersProps) => (\n <IntlProvider messages={getMessages(locale)} locale={locale}>\n <BoemlyThemeProvider fonts={FONT_CUSTOMIZATIONS}>\n {children}\n </BoemlyThemeProvider>\n </IntlProvider>\n);\n\nexport default MinimalProviders;\n","import React, { useContext } from 'react';\nimport {\n Box,\n Button,\n Container,\n Flex,\n Heading,\n Text,\n useDisclosure,\n useToken,\n} from 'boemly';\nimport { MapPin } from '@phosphor-icons/react';\nimport NextLink from 'next/link';\nimport CreditsAvailableBadge from '../../components/CreditsAvailableBadge';\nimport { IntlContext } from '../../components/ContextProvider';\nimport { CreditAvailability } from '../../models/fpm/FPMProject';\n\nexport interface MapMarkerProps {\n title: string;\n isPublic?: boolean;\n projectDeveloper?: string;\n slug?: string;\n portfolioHost?: string;\n creditAvailability: CreditAvailability;\n}\n\nconst MapMarker = ({\n title,\n projectDeveloper,\n slug,\n creditAvailability,\n portfolioHost = '',\n isPublic = false,\n}: MapMarkerProps) => {\n const { formatMessage } = useContext(IntlContext);\n const { isOpen, onOpen, onClose } = useDisclosure();\n const blue600 = useToken('colors', 'blue.600');\n\n return (\n <Flex\n position=\"absolute\"\n gap=\"4\"\n onMouseEnter={onOpen}\n onMouseLeave={onClose}\n cursor=\"grab\"\n >\n <Box\n as={slug ? NextLink : undefined}\n href={slug && `${portfolioHost}/portfolio/${slug}`}\n >\n <MapPin\n size=\"40px\"\n color={blue600}\n weight=\"fill\"\n data-testid=\"mapmarker-pin\"\n filter=\"drop-shadow(0px 0px 2px #FFF)\"\n />\n </Box>\n\n {isPublic && isOpen && (\n <Container\n shadow=\"md\"\n width=\"max-content\"\n minWidth=\"3xs\"\n maxWidth={['3xs', null, null, 'sm']}\n >\n <Flex direction=\"column\">\n <CreditsAvailableBadge\n status={creditAvailability}\n href={slug && `${portfolioHost}/portfolio/${slug}`}\n />\n <Heading mt=\"3\" size=\"md\">\n {title}\n </Heading>\n\n {projectDeveloper && (\n <Text size=\"smLowNormal\" mt=\"1\">\n {projectDeveloper}\n </Text>\n )}\n\n {slug && (\n <Button\n width=\"fit-content\"\n variant=\"outline\"\n size=\"sm\"\n as={NextLink}\n href={`${portfolioHost}/portfolio/${slug}`}\n mt=\"4\"\n whiteSpace=\"nowrap\"\n >\n {formatMessage({ id: 'sections.projectsMap.link.text' })}\n </Button>\n )}\n </Flex>\n </Container>\n )}\n </Flex>\n );\n};\n\nexport default MapMarker;\n","import { css } from '@emotion/react';\n\nconst mapboxStyle = css`\n .mapboxgl-map {\n -webkit-tap-highlight-color: rgb(0 0 0/0);\n font: 12px/20px Helvetica Neue, Arial, Helvetica, 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: rgb(0 0 0/5%);\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: rgb(0 0 0/5%);\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: rgb(0 0 0/5%);\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: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, 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 React, { useContext } from 'react';\nimport {\n MAPBOX_INITIAL_ZOOM,\n MAPBOX_MAX_ZOOM,\n MAPBOX_TOKEN,\n MapBoxStyle,\n} from '../../constants/mapbox';\nimport BBox from '../../models/BBox';\nimport mergeBoundingBoxes from '../../utils/mergeBoundingBoxes';\nimport { css } from '@emotion/react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Wrapper,\n} from 'boemly';\nimport mapboxgl, { LngLatBoundsLike, LngLatLike, Map, Marker } from 'mapbox-gl';\nimport { MutableRefObject, createRef, useEffect, useRef } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport MinimalProviders from '../../components/MinimalProviders';\nimport MapMarker from './MapMarker';\nimport mapboxStyle from './mapboxStyle';\nimport { IntlContext } from '../../components/ContextProvider';\n\nmapboxgl.accessToken = MAPBOX_TOKEN;\n\nexport interface ProjectsMapProps {\n slice: {\n tagline?: string;\n title?: string;\n text?: string;\n\n defaultCenterCoordinates?: {\n latitude: number;\n longitude: number;\n };\n defaultZoomLevel?: number;\n };\n\n projects: PortfolioProject[];\n}\n\nexport const ProjectsMap: React.FC<ProjectsMapProps> = ({\n slice,\n projects,\n}: ProjectsMapProps) => {\n const { locale } = useContext(IntlContext);\n\n const filteredProjects = projects.filter(\n (project) => project.geom\n ) as (PortfolioProject & {\n geom: Pick<PortfolioProject, 'geom'>;\n })[];\n\n const center: LngLatLike | undefined = slice.defaultCenterCoordinates\n ? [\n slice.defaultCenterCoordinates.longitude,\n slice.defaultCenterCoordinates.latitude,\n ]\n : undefined;\n\n const bounds: LngLatBoundsLike | undefined = center\n ? undefined\n : mergeBoundingBoxes(\n filteredProjects.map(\n (p): BBox =>\n [\n ...p.geom.coordinates.map((c) => c - 0.2),\n ...p.geom.coordinates.map((c) => c + 0.2),\n ] as BBox\n )\n );\n\n const mapContainer = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const map = new Map({\n container: mapContainer.current || '',\n style: MapBoxStyle.CaliTerrain,\n center,\n zoom: slice.defaultZoomLevel || MAPBOX_INITIAL_ZOOM,\n maxZoom: MAPBOX_MAX_ZOOM,\n bounds,\n });\n\n filteredProjects\n // Sort by longitude, so that the markers are rendeed form right to left\n .sort((a, b) => b.geom.coordinates[0] - a.geom.coordinates[0])\n .forEach((project) => {\n const ref =\n createRef<HTMLDivElement>() as MutableRefObject<HTMLDivElement>;\n ref.current = document.createElement('div');\n\n createRoot(ref.current).render(\n <MinimalProviders locale={locale}>\n <MapMarker\n title={project.friendlyName || project.title}\n isPublic={project.isPublic}\n portfolioHost={project.portfolioHost}\n slug={project.slug}\n creditAvailability={project.creditAvailability}\n projectDeveloper={project.projectDeveloper?.name}\n />\n </MinimalProviders>\n );\n\n // Offset is needed to center the marker on the coordinates\n const marker = new Marker(ref.current, { offset: [-20, -40] });\n\n // No chaining here, because the mocks don't support it\n marker.setLngLat(project.geom.coordinates);\n marker.addTo(map);\n });\n\n // Clean up on unmount\n return () => map.remove();\n }, [locale]);\n\n return (\n <DefaultSectionContainer>\n <Box css={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\n <Box\n height=\"xl\"\n ref={mapContainer}\n borderRadius=\"xl\"\n overflow=\"hidden\"\n boxShadow={['md', null, null, 'none']}\n css={css`\n mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC);\n `}\n />\n </Wrapper>\n </Box>\n </DefaultSectionContainer>\n );\n};\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 BBox from '../models/BBox';\n\nconst mergeBoundingBoxes = (boundingBoxes: BBox[]): BBox => {\n let minLeft: number = 180;\n let minBottom: number = 90;\n let maxRight: number = -180;\n let maxTop: number = -90;\n\n boundingBoxes.forEach(([left, bottom, right, top]) => {\n if (left < minLeft) minLeft = left;\n if (bottom < minBottom) minBottom = bottom;\n if (right > maxRight) maxRight = right;\n if (top > maxTop) maxTop = top;\n });\n\n return [minLeft, minBottom, maxRight, maxTop];\n};\n\nexport default mergeBoundingBoxes;\n","import React from 'react';\nimport { Box, DefaultSectionContainer, Wrapper } from 'boemly';\nimport { useMeasure } from 'react-use';\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, { width }] = useMeasure<HTMLDivElement>();\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 React from 'react';\nimport Image from 'next/image';\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 image={\n <Image\n src={strapiMediaUrl(slice.avatarWithName.image.img, 'small')}\n alt={slice.avatarWithName.image.alt}\n fill\n style={{\n objectFit: slice.avatarWithName.image.objectFit || 'cover',\n }}\n />\n }\n orientation=\"vertical\"\n />\n </Wrapper>\n </DefaultSectionContainer>\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-space-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-space-8),\n calc(50vw - var(--boemly-sizes-7xl) / 2 + var(--boemly-space-6))\n );\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n overflow-x: scroll;\n padding-left: max(\n var(--boemly-space-8),\n calc(50vw - var(--boemly-sizes-7xl) / 2 + var(--boemly-space-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-space-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-space-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 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 'react-use';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { ArrowLeft, ArrowRight } 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, { width: imageWidth }] = useMeasure<HTMLDivElement>();\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 noOfLines={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 <IconButton\n key=\"leftButton\"\n as={motion.button}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex - 1)}\n aria-label=\"Move left\"\n icon={<ArrowLeft size={16} />}\n pointerEvents=\"auto\"\n />\n )}\n </AnimatePresence>\n </Box>\n <Box>\n <AnimatePresence>\n {canMoveRight && (\n <IconButton\n key=\"rightButton\"\n as={motion.button}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex + 1)}\n aria-label=\"Move right\"\n icon={<ArrowRight size={16} />}\n pointerEvents=\"auto\"\n />\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 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 Locale from '../Locale';\nimport StrapiImage from './StrapiImage';\nimport StrapiLink from './StrapiLink';\nimport StrapiLocalization from './StrapiLocalization';\nimport StrapiTopBanner from './StrapiTopBanner';\n\nexport enum EventType {\n CONFERENCE = 'Conference',\n MEET_UP = 'Meet Up',\n WEBINAR = 'Webinar',\n FOREST_WALK = 'Forest Walk',\n LUNCH_AND_LEARN = 'Lunch & Learn',\n FESTIVAL = 'Festival',\n ROADSHOW = 'RoadShow',\n PARTNER_EVENT = 'Partner Event',\n FAIR = 'Fair',\n}\n\ninterface StrapiEvent {\n title: string;\n description: string;\n button?: StrapiLink;\n buttonVariant?: 'outline' | 'ghost' | 'link' | 'solid' | 'outlineWhite';\n recommended?: boolean;\n speakers?: {\n id: number;\n name: string;\n image: StrapiImage;\n }[];\n image: StrapiImage;\n logo: StrapiImage;\n eventTypes: {\n id: number;\n eventType: EventType;\n }[];\n languages: {\n id: number;\n language: string;\n countryCode: string;\n }[];\n location?: string;\n locale: Locale;\n online?: boolean;\n start: Date;\n end?: Date;\n allDay?: boolean;\n slices: any[];\n localizations: StrapiLocalization[];\n topBanner?: StrapiTopBanner;\n}\n\nexport default StrapiEvent;\n","import React from 'react';\nimport { Box, 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 <Wrapper>\n <Box position=\"absolute\" top=\"-28\" transform=\"translateY(50%)\">\n <StrapiLinkButton size=\"md\" link={slice.button} component=\"CtaOnly\" />\n </Box>\n </Wrapper>\n);\n","import React, { useContext, useState } from 'react';\nimport {\n DefaultSectionContainer,\n Divider,\n Flex,\n GridItem,\n Heading,\n IconButton,\n SimpleGrid,\n Text,\n Wrapper,\n} from 'boemly';\nimport { Check, Link as LinkIcon } from '@phosphor-icons/react';\nimport { useCopyToClipboard } from 'react-use';\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 [, copyToClipboard] = useCopyToClipboard();\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 (window?.location) {\n const currentUrl = window.location.href.split('#')[0];\n copyToClipboard(`${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 spacing=\"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 icon={\n copiedItem === item.slug ? (\n <Check size=\"16\" data-testid=\"check-icon\" />\n ) : (\n <LinkIcon size=\"16\" />\n )\n }\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 </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 <Divider maxW=\"xl\" placeSelf=\"center\" mb=\"10\" mt=\"10\" />\n )}\n </GridItem>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React, { useContext, useCallback } from 'react';\nimport {\n Badge,\n BoemlyFormControl,\n Box,\n Button,\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Divider,\n Flex,\n InputRightAddon,\n LabelNumberPair,\n RichText,\n SimpleGrid,\n Spacer,\n useToken,\n Wrapper,\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 = ({ slice }: ShopCheckoutProps): 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 colorScheme=\"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 <Divider />\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₂`}\n caption={formatMessage({\n id: 'sections.shopCheckout.summary.price.taxNotIncluded',\n })}\n />\n\n <Spacer height=\"6\" />\n <Divider />\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 rightAddonsOrElements={[\n <InputRightAddon key=\"1\">\n {formatMessage({\n id: `sections.shopCheckout.contributionValue.unit.${slice.currency}`,\n })}\n </InputRightAddon>,\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₂`}\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 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 gap={[null, null, null, '12']}\n >\n {slice.facts.map((fact) => (\n <Flex\n key={fact.key}\n flexDir=\"column\"\n width={[\n 'var(--boemly-sizes-full)',\n null,\n null,\n 'calc((var(--boemly-sizes-full) - var(--boemly-space-24))/ 3 )',\n ]}\n mt={['8', '8', '8', slice.facts.length > 3 ? '16' : '0']}\n >\n <Heading\n fontSize=\"6xl\"\n fontFamily=\"display\"\n lineHeight=\"10\"\n fontWeight=\"700\"\n color={VARIANTS[slice.variant].factValueColor}\n mb=\"2\"\n as=\"p\"\n >\n {fact.value}\n </Heading>\n\n <Text\n size=\"mdLowNormal\"\n color={VARIANTS[slice.variant].factKeyColor}\n >\n {fact.key}\n </Text>\n </Flex>\n ))}\n </Flex>\n\n {slice.button && (\n <>\n <Spacer height={['0', null, '20']} />\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n variant={slice.variant === 'green' ? 'outline' : 'solid'}\n component=\"Facts\"\n />\n </>\n )}\n </>\n </DefaultSectionContainer>\n);\n","import 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 { CaretRight } 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={<CaretRight color={gray700} />}\n component=\"BlogCards\"\n />\n </Box>\n </Flex>\n )}\n <Spacer height=\"14\" />\n <SimpleGrid\n columns={[1, null, null, 3]}\n spacingX={4}\n spacingY={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.attributes.slug}\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={<CaretRight color={gray700} />}\n component=\"BlogCards\"\n />\n </Box>\n </>\n )}\n </>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React, { useCallback, useContext } from 'react';\nimport {\n BoemlyFormControl,\n Box,\n Button,\n Divider,\n Flex,\n InputRightAddon,\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 rightAddonsOrElements={[\n <InputRightAddon key=\"currencyUnit\">\n {formatMessage({\n id: `portfolio.smallCheckout.contributionValueCurrency.unit.${currency}`,\n })}\n </InputRightAddon>,\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 rightAddonsOrElements={[\n <InputRightAddon key=\"tCO₂\">tCO₂</InputRightAddon>,\n ]}\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 <Divider 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 React, { useContext } from 'react';\nimport {\n Box,\n Container,\n Divider,\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 forecastedAmountSubtitle?: 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\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 spacingX=\"10\"\n spacingY=\"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 <Divider />\n <Spacer height=\"6\" />\n </>\n ) : (\n <></>\n )}\n <SimpleGrid columns={[1, null, null, 2]} spacingX=\"10\" spacingY=\"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.forecastedAmountYearly && project.riskBuffer ? (\n <>\n <Spacer height=\"8\" />\n <Divider />\n <Spacer height=\"8\" />\n <SimpleGrid columns={[1, null, null, 2]} spacingX=\"10\" spacingY=\"8\">\n <Tooltip\n label={formatMessage({\n id: 'features.projectInfo.properties.forecastedAmountYear.toolTip',\n })}\n >\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.forecastedAmountYear.label',\n })}\n text={formatMessage(\n {\n id: 'unit.formatter.tonsCo2PerYear',\n },\n {\n number: formatNumber(\n convertCo2AmountKgToTons(\n project.forecastedAmountYearly.toString()\n ),\n { maximumFractionDigits: 0 }\n ),\n }\n )}\n caption={subtitles.forecastedAmountSubtitle}\n />\n </Box>\n </Tooltip>\n\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 </SimpleGrid>\n </>\n ) : (\n <></>\n )}\n\n <Box mt=\"2\">\n <CreditsAvailableBadge status={project.creditAvailability} />\n </Box>\n </Container>\n );\n};\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","const convertAreaM2ToHa = (areaInM2: string): number =>\n parseInt(areaInM2, 10) / 10000;\n\nexport default convertAreaM2ToHa;\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 { DownloadSimple, FilePdf } 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 <FilePdf />\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 icon={<DownloadSimple />}\n as={Link}\n href={documentUrl.url}\n size=\"sm\"\n />\n </Flex>\n ))}\n </Flex>\n </Container>\n );\n};\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 React 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';\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 forecastedAmountSubtitle?: 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 if (!project) {\n return (\n <>Invalid configuration, check if a project this id exists in the FPM</>\n );\n }\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <Flex flexDir={['column', null, null, 'row']} gap=\"4\" width=\"full\">\n <ProjectInfo project={project} 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 { Container, Center, Heading, Button, Box, Text, Flex } from 'boemly';\nimport React, { useContext } from 'react';\nimport { StrapiCustomerStory, strapiMediaUrl } from '../..';\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): 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 <Button\n as={Link}\n href={`/customer-stories/${customerStory.slug}`}\n variant=\"outline\"\n size=\"sm\"\n >\n {formatMessage({ id: 'sections.customerCard.more' })}\n </Button>\n </Box>\n </Flex>\n </Container>\n );\n};\n","import { Container, Heading, Button, Box, Text } from 'boemly';\nimport React, { useContext } from 'react';\nimport { StrapiCustomerStory, strapiMediaUrl } from '../..';\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): 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 size=\"xs\">{customerStory.quoteCardCustomerTitle}</Text>\n </Box>\n <Text size=\"xs\" color=\"black\">\n {customerStory.quoteCardQuote}\n </Text>\n <Button\n href={`/customer-stories/${customerStory.slug}`}\n as={Link}\n variant=\"outline\"\n size=\"sm\"\n mt=\"8\"\n >\n {formatMessage({ id: 'sections.customerQuoteCard.more' })}\n </Button>\n </Box>\n </Container>\n );\n};\n","import { Box, Container, Flex } from 'boemly';\nimport { StrapiCustomerStory, strapiMediaUrl } from '../..';\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 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): JSX.Element => {\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2, 3]} spacingX={6} spacingY={6}>\n {slice.customer_stories.map(({ attributes }) => {\n const customerStory: IStrapiData<StrapiCustomerStory> | undefined =\n customerStories.find(\n (cs) => cs.attributes.slug === attributes.slug\n );\n if (!customerStory) {\n return null;\n }\n return (\n <Box key={customerStory.id}>\n {attributes.variant === 'customerCard' && (\n <CustomerCard customerStory={customerStory.attributes} />\n )}\n {attributes.variant === 'quoteCard' && (\n <CustomerQuoteCard customerStory={customerStory.attributes} />\n )}\n {attributes.variant === 'logoCard' && (\n <LogoCard customerStory={customerStory.attributes} />\n )}\n </Box>\n );\n })}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport { Check, X } 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): JSX.Element => {\n switch (icon) {\n case 'check':\n return <Check size={20} color=\"var(--boemly-colors-primary-500)\" />;\n case 'cross':\n return <X 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 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 Divider,\n Heading,\n Badge,\n SimpleGrid,\n} from 'boemly';\nimport Image from 'next/image';\nimport { CaretRight } 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 spacing=\"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={<CaretRight 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 <Divider\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 { 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-space-24);\n padding-right: var(--boemly-space-24);\n padding-left: var(--boemly-space-24);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n width: calc(\n ${(props) => props.logoCount} *\n (var(--boemly-sizes-16) + var(--boemly-space-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-space-24);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-gap: var(--boemly-space-6);\n }\n`;\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 'react-use';\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 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 Tag,\n Text,\n Wrapper,\n useMediaQuery,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { CDN_URI } from '../../constants/api';\nimport { IntlContext } from 'react-intl';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\nimport { useState } from 'react';\nimport FullScreenImage from '../../components/FullScreenImage';\n\nexport interface TimelineProps {\n slice: {\n title: string;\n text?: string;\n tagline?: string;\n\n timelineItems: TimelineItem[];\n };\n}\n\nexport interface TimelineItem {\n id: number;\n tagline?: string;\n title: string;\n text?: string;\n badge?: { text: string; variant: 'orange' | 'green' | 'red' | 'gray' };\n logo?: StrapiImage;\n icon?: StrapiImage;\n image?: StrapiImage;\n button?: StrapiLink;\n backgroundShapes?: boolean;\n}\n\nexport const Timeline: React.FC<TimelineProps> = ({ slice }: TimelineProps) => {\n const { formatMessage } = useContext(IntlContext);\n const [visibleItems, setVisibleItems] = useState(3);\n const [mobile] = useMediaQuery(BREAKPOINT_MD_QUERY);\n const [isOpen, setIsOpen] = useState(false);\n\n const showMoreItems = () => {\n setVisibleItems((prevVisibleItems) => prevVisibleItems + 3);\n };\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <Flex flexDir={['column', null, null, 'row']}>\n <Box\n width={['full', null, null, '50%']}\n position={[null, null, null, 'sticky']}\n top={['16', null, null, '32']}\n height=\"full\"\n paddingRight={[null, null, null, '28']}\n >\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n {mobile && (\n <>\n <Spacer h=\"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, null, '50%']}\n borderLeft={[\n null,\n null,\n null,\n 'dashed 1px var(--boemly-colors-gray-200)',\n ]}\n position=\"relative\"\n width=\"full\"\n >\n <Flex\n flexDir=\"column\"\n overflow=\"visible\"\n gap={[null, null, null, '8']}\n >\n {slice.timelineItems.slice(0, visibleItems).map((item, index) => (\n <SimpleGrid\n gap={['none', null, null, '4']}\n key={item.id}\n columns={[1, null, null, 2]}\n alignContent=\"center\"\n gridTemplateColumns={[null, null, null, '1fr 16fr']}\n position=\"relative\"\n >\n <Flex\n alignItems=\"center\"\n justifyContent={['center', null, null, 'flex-start']}\n >\n <Box\n position=\"absolute\"\n transform={[null, 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 h=\"2\" />\n </>\n )}\n </Box>\n <Flex>\n {item.badge && (\n <Tag\n colorScheme={item.badge.variant}\n borderRadius=\"md\"\n >\n {item.badge.text}\n </Tag>\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 h=\"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","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 {\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 '@testing-library/react';\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 h=\"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 h={['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 spacingX=\"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 isLoading={isLoadingMoreUpcoming}\n >\n {formatMessage({ id: 'sections.events.loadMore' })}\n </Button>\n )}\n </Flex>\n </Wrapper>\n\n <Spacer h={['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 h=\"10\" />\n\n {(!pastEvents || pastEvents.length === 0) && !isLoadingPast ? (\n <>\n <Center>\n {formatMessage({ id: 'sections.events.noPastEvents' })}\n </Center>\n <Spacer h=\"24\" />\n </>\n ) : (\n // List of past events\n <SimpleGrid\n columns={[1, null, null, null, null, 2]}\n spacingX=\"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 isLoading={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 Tag,\n useMediaQuery,\n Button,\n} from 'boemly';\nimport { css } from '@emotion/react';\nimport Image from 'next/image';\nimport StrapiLinkButton from '../StrapiLinkButton';\nimport {\n BowlFood,\n CalendarBlank,\n CaretDown,\n CaretRight,\n CaretUp,\n ChalkboardTeacher,\n Confetti,\n Handshake,\n Headset,\n Info,\n Laptop,\n MapPinLine,\n PersonSimpleWalk,\n ProjectorScreenChart,\n Star,\n UsersThree,\n Webcam,\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): JSX.Element => {\n switch (eventType) {\n case EventType.WEBINAR:\n return <Webcam size={12} />;\n case EventType.CONFERENCE:\n return <Headset size={12} />;\n case EventType.MEET_UP:\n return <UsersThree size={12} />;\n case EventType.FOREST_WALK:\n return <PersonSimpleWalk size={12} />;\n case EventType.PARTNER_EVENT:\n return <Handshake size={12} />;\n case EventType.LUNCH_AND_LEARN:\n return <BowlFood size={12} />;\n case EventType.FAIR:\n return <ChalkboardTeacher size={12} />;\n case EventType.FESTIVAL:\n return <Confetti size={12} />;\n case EventType.ROADSHOW:\n return <ProjectorScreenChart size={12} />;\n default:\n return <Info size={12} weight=\"fill\" />;\n }\n};\n\nexport const EventCard = ({ event }: EventCardProps): 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={css`\n & span,\n div,\n img {\n border-top-left-radius: inherit;\n border-top-right-radius: 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 <Tag backgroundColor=\"green.600\">\n <Star size={12} weight=\"fill\" color=\"white\" />\n &nbsp;\n <Text size=\"xsLowBold\" color=\"white\">\n {formatMessage({\n id: 'sections.eventCard.recommendedEvent',\n })}\n </Text>\n </Tag>\n </Flex>\n ) : (\n <></>\n )}\n <Flex flexWrap=\"wrap\" gap=\"2\">\n {event.eventTypes.map((e) => (\n <Tag key={e.id}>\n {getEventIcon(e.eventType)}&nbsp;\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 </Tag>\n ))}\n {event.languages.map(({ id, language, countryCode }) => (\n <Tag key={id}>\n {getCountryFlag(countryCode)}&nbsp;\n <Text size=\"xsLowBold\" color=\"gray.800\">\n {language}\n </Text>\n </Tag>\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 <Laptop size={20} color={'var(--boemly-colors-primary-700)'} />\n <Text size={['xsLowBold', null, null, 'smLowBold']}>Online</Text>\n </Flex>\n )}\n {event.location && (\n <Flex gap=\"2\" alignItems=\"center\">\n <MapPinLine\n size={20}\n color={'var(--boemly-colors-primary-700)'}\n weight=\"fill\"\n />\n <Text size={['xsLowBold', null, null, 'smLowBold']}>\n {event.location}\n </Text>\n </Flex>\n )}\n <Flex alignItems=\"center\" gap=\"2\">\n <CalendarBlank\n size={20}\n color={'var(--boemly-colors-primary-700)'}\n />\n <Text size={['xsLowBold', null, null, '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={['xsRegularNormal', null, null, '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\n mt=\"2\"\n onClick={toggleText}\n variant=\"link\"\n rightIcon={\n isExpanded ? <CaretUp size=\"12\" /> : <CaretDown size=\"12\" />\n }\n >\n {formatMessage(\n isExpanded\n ? {\n id: 'sections.eventCard.buttonShowLess',\n }\n : { id: 'sections.eventCard.buttonShowMore' }\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={<CaretRight 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 label={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","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 React from 'react';\nimport { BoemlyAlert, Box } from 'boemly';\n\nexport const PreviewAlert = (): 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 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 { AnalyticsFunction } from '../ContextProvider/ContextProvider';\n\nexport interface CustomSliceProps {\n slice: any;\n id: string;\n}\n\nexport interface SliceRendererProps {\n slices: any;\n blogPosts: IStrapiData<StrapiBlogPost>[];\n projects: PortfolioProject[];\n customerStories: IStrapiData<StrapiCustomerStory>[];\n locale?: Locale;\n CustomSlice?: ({ slice, id }: CustomSliceProps) => JSX.Element;\n analyticsFunction?: AnalyticsFunction;\n}\n\nexport const SliceRenderer = ({\n slices,\n blogPosts,\n projects,\n customerStories,\n locale = 'en',\n CustomSlice,\n analyticsFunction,\n}: SliceRendererProps): JSX.Element => (\n <ContextProvider locale={locale} analyticsFunction={analyticsFunction}>\n {slices.map((slice: any) => {\n switch (slice.__component) {\n case 'sections.hero':\n return (\n <Hero key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.map-hero':\n return (\n <MapHero key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.rich-text':\n return (\n <RichTextSection\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.left-text-right-card':\n return (\n <LeftTextRightCard\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-with-card':\n return (\n <TextWithCard\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n projects={projects}\n />\n );\n case 'sections.logo-grid-with-text':\n return (\n <LogoGridWithText\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.quote-cards':\n return (\n <QuoteCards\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.q-and-a':\n return (\n <QAndA key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.image-grid':\n return (\n <ImageGrid key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.full-width-image':\n return (\n <FullWidthImage\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-with-text-cards':\n return (\n <TextWithTextCards\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-card-grid':\n return (\n <TextCardGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.icon-grid':\n return (\n <IconGrid key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.image-text-sequence':\n return (\n <ImageTextSequence\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.steps':\n return (\n <Steps key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.text-carousel':\n return (\n <TextCarousel\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.link-cards-grid':\n return (\n <LinkCardsGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.small-hero':\n return (\n <SmallHero\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n theme=\"dark\"\n />\n );\n case 'sections.small-hero-light':\n return (\n <SmallHero\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n theme=\"light\"\n />\n );\n case 'sections.project-facts':\n return (\n <ProjectFacts\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n project={projects.find((p) => p.id === slice.projectId)}\n />\n );\n case 'sections.projects-grid':\n return (\n <ProjectsGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n projects={projects}\n />\n );\n case 'sections.projects-map':\n return (\n <ProjectsMap\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n projects={projects}\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 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","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 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 },\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 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 },\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 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 },\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 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 },\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"],"names":["STRAPI_URI","process","env","NEXT_PUBLIC_STRAPI_URI","STRAPI_DEFAULT_PAGE_SIZE","STRAPI_DEFAULT_POPULATE_DEPTH","STRAPI_FALLBACK_LOCALE","strapiClient","setupCache","axios","default","create","baseURL","headers","paramsSerializer","p","qs","stringify","encodeValuesOnly","timeout","ttl","includes","getAllSlugsFromStrapi","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","path","locales","_temp","_ref2$filters","filters","slugPromises","allSlugs","missingLocales","wrap","_context","prev","next","map","locale","get","params","then","response","data","page","slug","attributes","error","_error$response","status","Promise","all","sent","flat","flatMap","filter","fallbackSlug","some","_extends","abrupt","concat","stop","_x","_x2","_x3","apply","this","arguments","ShapePosition","FPM_API_URI","NEXT_PUBLIC_FPM_API_URI","CDN_URI","fpmClient","getPortfolioProjects","preview","cache","_yield$Promise$all","fpmProjects","strapiProjectsLocalized","strapiProjectsEnglish","strapiProjects","_i","_arr","project","undefined","pLevel","Map","length","fpmProjectId","set","fpmProject","_strapiProject$attrib","strapiProject","id","toReturn","thumbnail","portfolio","host","portfolioHost","getStrapiCollectionType","_ref2","key","_ref$locale","_ref$preview","_ref$filters","sharedParams","requestedLocaleData","results","_error$response2","fallbackLocaleDataEntry","find","localized","getStrapiSingleType","t0","isAxiosError","strapiMediaUrl","media","preferredSize","_media$data$attribute","url","ext","formats","indexOf","DEFAULT_SHARE_IMAGE","DEFAULT_SHARE_ALT","EXTENDABLE_HEADER_SECTIONS","DARK_THEME_HEADER_SECTIONS","SLICES_WITH_BLOG_POSTS","SLICES_WITH_CUSTOMER_STORIES","SLICES_WITH_PROJECTS","strapiLinkUrl","strapiLink","_strapiLink","_strapiLink2","getSchemaProperty","schema","property","value","text","DEFAULT_SCHEMA","name","logo","address","streetAddress","addressLocality","postalCode","addressRegion","addressCountry","contactPoint","telephone","contactType","areaServed","availableLanguage","sameAs","ZoomableImage","image","_ref$zoom","zoom","_useState","useState","isZoomed","setIsZoomed","_useState2","backgroundPos","setBackgroundPos","imageSrc","img","zoomInPosition","e","zoomer","currentTarget","getBoundingClientRect","clientX","x","width","y","clientY","height","React","createElement","Fragment","Head","rel","as","href","Box","position","display","overflow","flexShrink","scrollSnapAlign","scrollSnapStop","draggable","cursor","backgroundImage","backgroundSize","backgroundPosition","onClick","toggleZoomImage","handleClick","onMouseMove","handleMove","Image","src","alt","fill","style","visibility","objectFit","FullScreenImage","images","isOpen","onClose","_ref$currentIndex","currentIndex","setCurrentIndex","containerRef","useRef","useLockBodyScroll","canMoveRight","useMemo","canMoveLeft","onRight","useCallback","c","onLeft","useKey","useEffect","setTimeout","_containerRef$current","current","scrollTo","left","clientWidth","behavior","BoemlyModal","title","trigger","size","content","Flex","insetY","insetX","alignItems","justifyContent","ref","flexGrow","flexBasis","gap","marginX","scrollSnapType","inset","pointerEvents","IconButton","icon","CaretLeft","variant","mr","CaretRight","ml","BREAKPOINT_MD","BREAKPOINT_LG","BREAKPOINT_MD_QUERY","BREAKPOINT_LG_QUERY","FullWidthImage","slice","setIsOpen","isMobile","useMediaQuery","DefaultSectionContainer","Wrapper","DefaultSectionHeader","isHero","tagline","taglineProps","textAlign","mt","titleProps","maxW","textProps","borderRadius","GLOBAL_STYLE","css","_templateObject","_taggedTemplateLiteralLoose","rootMessagesDe","creditsAvailableBadgeMessagesDe","messages","en","creditsAvailableBadgeMessagesEn","de","getMessages","messagesLocale","Object","keys","AnalyticsContext","createContext","createIntlCache","intlFactory","createIntl","IntlContext","ContextProvider","children","analyticsFunction","fetcher","resource","init","errorData","message","Error","t1","t2","body","SWRConfig","Global","styles","Provider","StrapiLinkButton","link","_ref$component","component","buttonProps","_objectWithoutPropertiesLoose","_excluded","adBlockDetected","useDetectAdBlock","useContext","buttonUrl","intercomLauncher","type","props","action","buttonText","Button","Link","w","window","HubSpotConversations","widget","open","hsConversationsOnReady","Hero","minHeight","backgroundColor","overflowX","Gradient","shape","bottom","borderTopRightRadius","right","top","transform","subTitle","color","mx","button","additionalButtons","IconGrid","flexDirection","Spacer","h","SimpleGrid","columns","iconsWithTextAndButton","rowGap","iconWithTextAndButton","margin","Heading","mb","Text","LinkedInIcon","viewBox","xmlns","clipPath","d","StrapiLinkButtonWithIcon","rightIcon","destination","Globe","getLinkIcon","ImageGrid","_useToken","useToken","minChildWidth","links","flexDir","flexWrap","ImageTextSequence","oneColumnGrid","primary50","gray700","background","imageTextRows","index","imageBox","LeftTextRightCard","push","useRouter","Grid","templateColumns","templateRows","GridItem","colSpan","rowSpan","pr","checkMarkLabels","BoemlyList","listItems","colorScheme","ArrowRight","card","PortfolioCard","_slice$card","_slice$card5","_slice$card2","_slice$card3","_slice$card4","cardTitle","facts","portfolioNumber","LogoGridWithText","RichText","logos","MapHeroContainer","styled","MapHeroTextContainer","_templateObject2","ShapeContainer","_templateObject3","MapContainer","_templateObject4","MapGradient","_templateObject5","MapHero","belowBreakpoint","maxWidth","buttons","mobileMap","convertToKebabCase","str","matches","match","toLowerCase","join","VARIANTS","gray","tagLineColor","textColor","accordionVariant","otherQuestionsBackground","green","white","QAndA","_slice$variant","pb","hero","paddingY","maxHeight","paddingTop","paddingRight","overflowY","BoemlyAccordion","rows","questionsAndAnswers","defaultIndex","padding","otherQuestions","HeroCard","_slice$hero","section","QuoteCards","paddingBottom","shapes","Shape","radius","cards","QuoteCard","avatar","description","marginTop","RichTextSection","Steps","_slice$card$shapes","gray900","Array","steps","stepRefs","setStepRefs","stepProgress","setStepProgress","offsetY","useWindowScroll","windowHeight","useWindowSize","createRef","containerOffsetTop","offsetTop","_ref$current","currentItemOffsetTop","Center","step","options","forceBlock","marginBottom","borderLeft","opacity","borderRight","transition","ShapesCard","CreditAvailability","shapePositions","topLeft","bottomRight","topRight","bottomLeft","oppositesOfCorners","_oppositesOfCorners","unset","variants","positionIcon","TextCardGrid","justifyItems","zIndex","boxShadow","borderBottomRightRadius","borderBottomLeftRadius","borderTopLeftRadius","listProps","textSize","buttonIndex","weight","CarouselContainer","CarouselInnerContainer","motion","div","numberOfItems","CardContainer","TextCarousel","_useMeasure","useMeasure","itemRef","itemWidth","formatMessage","windowWidth","slides","displaySlides","setDisplaySlides","sliderIndex","setSliderIndex","sliderItemsWidth","offsetLeft","allowScroll","ITEM_GAP","_slice$isShuffled","isShuffled","slidesCopy","i","j","Math","floor","random","shuffleElements","animate","duration","ease","TextCardWithIcon","handleSlidesButtonClick","displayAs","py","px","AnimatePresence","initial","exit","ArrowLeft","TextWithTextCards","handleContactButtonClick","_slice$contact","contact","ContactArea","FORMAT_AS_HECTARE_CONFIG","unit","unitDisplay","maximumFractionDigits","FORMAT_AS_PERCENT_CONFIG","MapBoxStyle","CreditsAvailableBadge","_variants","CREDITS_AVAILABLE","NO_CREDITS_AVAILABLE","SOME_CREDITS_AVAILABLE","SOON_CREDITS_AVAILABLE","NextLink","Tag","ProjectGridCard","_project$thumbnail","_project$thumbnail2","_project$thumbnail3","_useContext","formatNumber","Container","my","friendlyName","area","location","certificationDate","year","Date","getFullYear","creditAvailability","TextWithCard","portfolioProject","projects","_slice$project","cardPosition","ProjectCard","footerSubTitle","footerTitle","columnGap","LinkCardsGrid","borderStyle","borderWidth","borderColor","transitionDuration","MEDIUM_TRANSITION_DURATION","_hover","minWidth","colors","dark","light","SmallHero","theme","gradient","tags","direction","justify","BlogItemContainer","ImageContainer","Blog","blogPosts","formatDate","sortedBlogPosts","blog_posts","sort","a","b","createdAt","getTime","spacingX","spacingY","blogPost","bp","category","teaser","DatePersonPair","date","person","author","ConditionalWrapper","condition","wrapper","ProjectsGrid","filteredProjects","passHref","legacyBehavior","FONT_CUSTOMIZATIONS","heading","mono","MinimalProviders","IntlProvider","BoemlyThemeProvider","fonts","MapMarker","projectDeveloper","_ref$portfolioHost","_ref$isPublic","isPublic","_useDisclosure","useDisclosure","onOpen","blue600","onMouseEnter","onMouseLeave","MapPin","shadow","whiteSpace","mapboxStyle","mapboxgl","accessToken","CtaCardType","ProjectsMap","boundingBoxes","minLeft","minBottom","maxRight","maxTop","geom","center","defaultCenterCoordinates","longitude","latitude","bounds","coordinates","forEach","mapContainer","container","CaliTerrain","defaultZoomLevel","maxZoom","_project$projectDevel","document","createRoot","render","marker","Marker","offset","setLngLat","addTo","remove","Video","youTubeID","frameBorder","allow","allowFullScreen","FullWidthHighlightQuote","quote","AvatarWithName","avatarWithName","orientation","SliderContainer","SliderInnerContainer","ItemContainer","aspectRatio","ALLOWED_RATIOS","getClosestRatio","ratio","minDiff","abs","posMinDiff","allowedRatio","FullWidthImageSlider","imageRef","imageWidth","imageCount","noOfLines","fontSize","caption","SideBySideImages","EventType","STATES","paddingTagline","paddingTitle","buttonJustifyContent","textMarginLeft","textMarginRight","centerWithoutImage","centerWithImage","taglineColor","titleColor","subTitleColor","Cta","ctaCards","ctaCard","ctaCardType","CenterWithImage","CenterWithoutImage","Left","Right","getTypeOfCard","elevation","backgroundShape","marginLeft","marginRight","paddingX","fontFamily","fontWeight","lineHeight","CtaOnly","Glossary","copyToClipboard","useCopyToClipboard","grouped","copiedItem","setCopiedItem","glossary_items","localeCompare","curr","_curr$attributes$titl","at","toUpperCase","handleAnchorClick","_window","currentUrl","split","entries","_ref3","letter","items","placeSelf","spacing","item","wordBreak","scrollMarginTop","Check","LinkIcon","_onClick","_callee2","_context2","Divider","ShopCheckout","validateForm","values","errors","contributionValue","currency","badge","Badge","textTransform","checkoutText","LabelNumberPair","label","number","pricePerKg","Formik","initialValues","initialContributionValue","validate","onSubmit","checkoutURL","URL","currentURL","searchParams","append","batchId","toString","pathname","couponId","touched","handleSubmit","summaryPrice","Form","Field","_ref4","BoemlyFormControl","inputProps","field","rightAddonsOrElements","InputRightAddon","isInvalid","errorMessage","minimumFractionDigits","taxInPercent","factKeyColor","factValueColor","Facts","fact","sortByCreatedAt","BlogCards","mobile","blogPostsToDisplay","_slice$blogPostCatego","blogPostCategory","_blogPost$attributes$","_slice$blogPostCatego2","_blogPost$attributes$2","calculateTaxIncludedValue","parseInt","contributionValueCurrency","isNaN","SmallCheckout","subtitle","contributionValueTons","setValues","_ref5","onChange","target","valueAsNumber","_ref6","ProjectInfo","amount","start","end","monthsDifference","yearsDifference","areaInM2","subtitles","LabelTextPair","areaSubtitle","locationSubtitle","month","startSubtitle","years","getMonth","timeSpanSubtitle","projectType","verificationStandard","projectTypeSubtitle","projectDeveloperSubtitle","defaultMessage","verificationStandardSubtitle","defaultIssuer","logoUrl","forecastedAmountYearly","riskBuffer","Tooltip","forecastedAmountSubtitle","riskBufferSubtitle","DocumentsDownloadList","documentUrls","documentUrl","FilePdf","DownloadSimple","Contact","border","ProjectFacts","customTitle","customSubtitle","customButton","contactTitle","contactText","contactButton","contactAvatar","CustomerCard","customerStory","borderTopRadius","cardImage","pt","customerCardCustomerIndustry","CustomerQuoteCard","customerName","quoteCardCustomerTitle","quoteCardQuote","LogoCard","marginY","CustomerStories","customerStories","customer_stories","cs","BULLET_POINT_VARIANTS","bulletPointColor","Icon","X","factColor","dividerColor","Comparison","comparisonCards","comparisonCard","factTitle","factSubtitle","lists","list","logoCount","LogoGrid","CarouselMarqueeBannerContent","_useWindowSize","hasEnoughLogosForLoop","logosToRender","from","emblaRef","useEmblaCarousel","loop","align","containScroll","dragFree","AutoScroll","playOnInit","speed","stopOnInteraction","stopOnMouseEnter","stopOnFocusIn","CarouselMarqueeBanner","showChild","setShowChild","Timeline","visibleItems","setVisibleItems","timelineItems","alignContent","gridTemplateColumns","backgroundShapes","prevVisibleItems","m","Sort","isSameDate","date1","date2","getDate","EventCard","_event$location$lengt","_event$location","_event$image","_event$image2","_event$image3","event","isExpanded","setIsExpanded","isLocationTooLong","recommended","Star","eventTypes","eventType","WEBINAR","Webcam","CONFERENCE","Headset","MEET_UP","UsersThree","FOREST_WALK","PersonSimpleWalk","PARTNER_EVENT","Handshake","LUNCH_AND_LEARN","BowlFood","FAIR","ChalkboardTeacher","FESTIVAL","Confetti","ROADSHOW","ProjectorScreenChart","Info","getEventIcon","replace","languages","language","countryCode","char","String","fromCodePoint","charCodeAt","online","Laptop","MapPinLine","CalendarBlank","day","allDay","getUTCHours","minimumIntegerDigits","getUTCMinutes","substring","CaretUp","CaretDown","buttonVariant","speakers","speaker","useEvents","batchSize","_useSWRInfinite","useSWRInfinite","getKey","revalidateFirstPage","revalidateAll","isLoading","setSize","mutate","count","_data$","meta","pagination","total","isLoadingMore","loadMore","canLoadMore","refetch","Events","eventTypeFilter","setEventTypeFilter","languageFilter","setLanguageFilter","_useState3","NEWEST_FIRST","setSort","_useState4","allEventTypeOptions","setAllEventTypeOptions","_useState5","allLanguageOptions","setAllLanguageOptions","now","toISOString","buildEventsUrl","startFilter","OLDEST_FIRST","search","getUpcomingKey","getPastKey","_useEvents","upcomingData","isLoadingUpcoming","isLoadingMoreUpcoming","canLoadMoreUpcoming","loadMoreUpcoming","_useEvents2","pastData","isLoadingPast","isLoadingMorePast","canLoadMorePast","loadMorePast","processEvents","_data$flatMap","_d$body","t","upcomingEvents","pastEvents","fetchAllOptions","events","allEventTypes","allLanguages","fetch","json","Set","_event$attributes","add","_event$attributes2","removeFilter","filterType","valueToRemove","upcomingTitle","upcomingDescription","filterSearch","Select","isMultiple","isSearchable","placeholder","searchPlaceholder","selected","option","BoemlyTag","isClosable","singleLanguage","placeItems","pastTitle","pastDescription","BoemlyAlert","_shareImage$url","_shareImage$alt","shareImage","_ref$metaTitleSuffix","metaTitleSuffix","_ref$favicon","favicon","_ref$domain","domain","schemaMarkup","shareImageUrl","shareImageAlt","schemas","isValidSchema","isArray","every","console","warn","schemaArray","getSchemaKey","identifier","_offer$price","price","getSchemaIdentifier","dangerouslySetInnerHTML","__html","JSON","CustomSlice","slices","__component","projectId","context","global","post","blog","_post$attributes$meta","_post$attributes$meta2","_post$attributes$meta3","_global$attributes$me","_post$attributes","_post$attributes$meta4","_post$attributes$meta5","_post$attributes$meta6","_post$attributes$meta7","_post$attributes$meta8","_post$attributes$meta9","_global$attributes$me2","metaShareImageUrl","metadata","returnBlog","returnProjects","headerType","extendable","headerNavMenus","navbar","navMenus","headerButtons","footerLinks","footer","banner","topBanner","isFallbackLocale","_customerStory$attrib","_customerStory$attrib2","_customerStory$attrib3","_customerStory$attrib4","_customerStory$attrib5","_customerStory$attrib6","_customerStory$attrib7","_customerStory$attrib8","_customerStory$attrib9","_customerStory$attrib10","returnCustomerStories","_page$attributes$meta","_page$attributes$meta2","_page$attributes$meta3","_page$attributes$meta4","_page$attributes","_page$attributes$slic","_page$attributes$slic2","_page$attributes$meta5","_page$attributes$meta6","_page$attributes$meta7","_page$attributes$meta8","_page$attributes$meta9","_page$attributes$meta10","returnBlogPosts","_project$attributes$m","_project$attributes$m2","_project$attributes$m3","_project$attributes","_project$attributes$s","_project$attributes$s2","_project$attributes$m4","_project$attributes$m5","_project$attributes$m6","_project$attributes$m7","_project$attributes$m8","_project$attributes$m9"],"mappings":"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"}