@treely/strapi-slices 7.5.0 → 7.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/strapi-slices.cjs.development.js +63 -82
- package/dist/strapi-slices.cjs.development.js.map +1 -1
- package/dist/strapi-slices.cjs.production.min.js +1 -1
- package/dist/strapi-slices.cjs.production.min.js.map +1 -1
- package/dist/strapi-slices.esm.js +63 -82
- package/dist/strapi-slices.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/integrations/strapi/getAllSlugsFromStrapi.test.ts +1 -13
- package/src/integrations/strapi/getAllSlugsFromStrapi.ts +24 -19
- package/src/integrations/strapi/getAvailableLocalesFromStrapi.test.ts +1 -1
- package/src/integrations/strapi/getStrapiCollectionType.test.ts +20 -15
- package/src/integrations/strapi/getStrapiCollectionType.ts +38 -28
|
@@ -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/getAvailableLocalesFromStrapi.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/utils/openHubSpotChat.ts","../src/components/StrapiLinkButton/StrapiLinkButton.tsx","../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/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/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/components/EventCard/EventCard.tsx","../src/slices/Events/Events.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';\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';\n\nconst getAvailableLocalesFromStrapi = async (): Promise<string[]> => {\n const { data } = await strapiClient.get('/i18n/locales');\n return data.map((locale: { code: string }) => locale.code);\n};\n\nexport default getAvailableLocalesFromStrapi;\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';\nimport getAvailableLocalesFromStrapi from './getAvailableLocalesFromStrapi';\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 allLocales = await getAvailableLocalesFromStrapi();\n\n const slugPromises = allLocales.map((locale) => {\n const params: Record<string, any> = {\n locale,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters,\n };\n\n return strapiClient.get<IStrapiResponse<IStrapiData<T>[]>>(path, {\n params,\n });\n });\n\n const slugResults = await Promise.all(slugPromises);\n\n let allSlugs = slugResults\n .map((result) =>\n result.data.data.map((page) => ({\n slug: page.attributes.slug,\n locale: page.attributes.locale,\n }))\n )\n .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 />\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 { STRAPI_DEFAULT_PAGE_SIZE } 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: '6',\n locale,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n };\n\n if (preview) {\n params.publicationState = 'preview';\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_FALLBACK_LOCALE,\n} from '../../constants/strapi';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport IStrapiResponse from '../../models/strapi/IStrapiResponse';\nimport LocalizedEntity from '../../models/LocalizedEntity';\nimport getAvailableLocalesFromStrapi from './getAvailableLocalesFromStrapi';\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 const allLocales = await getAvailableLocalesFromStrapi();\n\n if (!allLocales.includes(STRAPI_FALLBACK_LOCALE)) {\n allLocales.push(STRAPI_FALLBACK_LOCALE);\n }\n\n const responses: IStrapiData<T>[] = [];\n\n for (const loc of allLocales) {\n const params: Record<string, any> = {\n pLevel: '6',\n loc,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters,\n };\n\n if (preview) {\n params.publicationState = 'preview';\n }\n\n const { data } = await strapiClient.get<IStrapiResponse<IStrapiData<T>[]>>(\n path,\n { params, cache }\n );\n\n responses.push(...data.data);\n }\n\n const groupedResponses = responses.reduce<Record<string, IStrapiData<T>>>(\n (acc, response) => {\n const keyValue = response.attributes[key];\n if (!acc[keyValue] || response.attributes.locale === locale) {\n acc[keyValue] = response;\n }\n return acc;\n },\n {}\n );\n\n return Object.values(groupedResponses);\n};\n\nexport default getStrapiCollectionType;\n","import { AxiosResponse } from 'axios';\nimport strapiClient from './strapiClient';\nimport {\n STRAPI_DEFAULT_PAGE_SIZE,\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: '6',\n locale,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters,\n };\n\n if (preview) {\n params.publicationState = 'preview';\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","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 { 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';\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}\n\nexport const StrapiLinkButton: React.FC<StrapiLinkButtonProps> = ({\n link,\n ...buttonProps\n}: StrapiLinkButtonProps) => {\n const adBlockDetected = useDetectAdBlock();\n\n if (link.intercomLauncher) {\n if (adBlockDetected) {\n return (\n <Button {...buttonProps} as={Link} href=\"mailto:hello@tree.ly\">\n {link.text}\n </Button>\n );\n }\n\n return (\n <Button {...buttonProps} onClick={openHubSpotChat}>\n {link.text}\n </Button>\n );\n }\n\n return (\n <Button {...buttonProps} as={Link} href={strapiLinkUrl(link)}>\n {link.text}\n </Button>\n );\n};\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 />\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 />\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 />\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 />\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 />\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 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';\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\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 />\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: () => push(strapiLinkUrl(slice.card?.button)),\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 />\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 link={slice.buttons[0]} size=\"xl\" />\n {slice.buttons.length === 2 && (\n <StrapiLinkButton\n link={slice.buttons[1]}\n variant=\"outline\"\n size=\"xl\"\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 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';\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\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 />\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: () => push(strapiLinkUrl(slice.hero?.button)),\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 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';\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\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: () => push(strapiLinkUrl(slice.hero?.button)),\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, { createRef, useEffect, useRef, useState } 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';\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 [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 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: () => push(strapiLinkUrl(slice.card?.button)),\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\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 { 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\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}\n\nexport const ContextProvider: React.FC<ContextProviderProps> = ({\n children,\n locale,\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 {children}\n </IntlContext.Provider>\n </SWRConfig>\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';\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 { 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 { 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: () => push(strapiLinkUrl(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 />\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 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';\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 [white] = useToken('colors', ['white']);\n const [belowBreakpoint] = useMediaQuery(BREAKPOINT_LG_QUERY);\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: () => push(strapiLinkUrl(slice.contact?.button)),\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: () => push(strapiLinkUrl(slice.contact?.button)),\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.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 />\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 link={slice.button} mt=\"6\" size=\"lg\" />\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.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 />\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 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} />\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 />\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 />\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 />\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 />\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 mt=\"6\" link={button} size=\"md\" variant=\"outline\" />\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=\"2xl\"\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 />\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 />\n </Box>\n )}\n {item.image ? (\n <>\n <Box\n position=\"relative\"\n mt=\"4\"\n height={['2xs', null, null, null, '48']}\n minWidth={[null, null, null, null, '50%']}\n >\n <Image\n src={strapiMediaUrl(item.image.img, 'xLarge')}\n alt={item.image.alt}\n fill\n style={{\n cursor: mobile ? 'unset' : 'pointer',\n objectFit: item.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n onClick={() => !mobile && setIsOpen(true)}\n />\n <FullScreenImage\n images={[item.image]}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n />\n </Box>\n </>\n ) : (\n <></>\n )}\n </Flex>\n </Container>\n {mobile && index + 1 < slice.timelineItems.length && (\n <Box\n overflow=\"visible\"\n borderRight=\"dashed 1px var(--boemly-colors-gray-200)\"\n transform=\"translateX(-50%)\"\n position=\"relative\"\n height=\"20\"\n />\n )}\n </SimpleGrid>\n ))}\n </Flex>\n {visibleItems < slice.timelineItems.length && (\n <>\n <Box\n width=\"full\"\n height={['36', null, null, '64']}\n position=\"absolute\"\n bottom=\"0\"\n zIndex=\"1\"\n background=\"linear-gradient(180deg, rgba(255, 255, 255, 0.00) 0%, rgba(255, 255, 255, 0.98) 76.54%, #FFF 100%)\"\n />\n <Box\n bottom=\"0\"\n textAlign=\"center\"\n zIndex=\"overlay\"\n position=\"relative\"\n >\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={showMoreItems}\n m={[null, null, null, '8']}\n >\n {formatMessage({ id: 'sections.timeline.showMoreButton' })}\n </Button>\n </Box>\n </>\n )}\n </Box>\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import 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';\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 \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)} \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)} \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 {formatNumber(new Date(event.start).getUTCHours(), {\n minimumIntegerDigits: 2,\n })}\n :\n {formatNumber(new Date(event.start).getUTCMinutes(), {\n minimumIntegerDigits: 2,\n })}{' '}\n -{' '}\n {formatNumber(new Date(event.end).getUTCHours(), {\n minimumIntegerDigits: 2,\n })}\n :\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 />\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","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 { STRAPI_URI } 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', '6');\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', '6');\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","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';\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}\n\nexport const SliceRenderer = ({\n slices,\n blogPosts,\n projects,\n customerStories,\n locale = 'en',\n CustomSlice,\n}: SliceRendererProps): JSX.Element => (\n <ContextProvider locale={locale}>\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_FALLBACK_LOCALE","strapiClient","setupCache","axios","default","create","baseURL","headers","paramsSerializer","p","qs","stringify","encodeValuesOnly","timeout","ttl","includes","getAvailableLocalesFromStrapi","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","get","abrupt","sent","data","map","locale","code","stop","apply","this","arguments","getAllSlugsFromStrapi","path","locales","_temp","_ref2$filters","filters","slugPromises","allSlugs","missingLocales","params","Promise","all","result","page","slug","attributes","flat","flatMap","filter","fallbackSlug","some","_extends","concat","_x","_x2","_x3","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","publicationState","Map","length","fpmProjectId","set","fpmProject","_strapiProject$attrib","strapiProject","id","toReturn","thumbnail","portfolio","host","portfolioHost","getStrapiCollectionType","_ref2","key","_ref$locale","_ref$preview","_ref$filters","allLocales","responses","_iterator","_step","groupedResponses","push","_createForOfIteratorHelperLoose","done","loc","value","reduce","acc","response","keyValue","Object","values","getStrapiSingleType","_error$response","t0","isAxiosError","status","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","openHubSpotChat","w","window","HubSpotConversations","widget","open","hsConversationsOnReady","StrapiLinkButton","link","buttonProps","_objectWithoutPropertiesLoose","_excluded","adBlockDetected","useDetectAdBlock","Button","intercomLauncher","Link","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","props","rightIcon","destination","Globe","getLinkIcon","ImageGrid","_useToken","useToken","minChildWidth","links","flexDir","flexWrap","ImageTextSequence","oneColumnGrid","primary50","gray700","background","imageTextRows","index","imageBox","LeftTextRightCard","useRouter","Grid","templateColumns","templateRows","GridItem","colSpan","rowSpan","pr","checkMarkLabels","BoemlyList","listItems","colorScheme","ArrowRight","card","PortfolioCard","_slice$card","facts","portfolioNumber","LogoGridWithText","RichText","logos","logo","MapHeroContainer","styled","_templateObject","_taggedTemplateLiteralLoose","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","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","css","listProps","textSize","buttonIndex","weight","CarouselContainer","CarouselInnerContainer","motion","div","numberOfItems","CardContainer","GLOBAL_STYLE","rootMessagesDe","creditsAvailableBadgeMessagesDe","messages","en","creditsAvailableBadgeMessagesEn","de","getMessages","messagesLocale","keys","createIntlCache","intlFactory","createIntl","IntlContext","createContext","ContextProvider","children","fetcher","resource","init","errorData","message","Error","t1","t2","body","SWRConfig","Global","styles","Provider","TextCarousel","_useMeasure","useMeasure","itemRef","itemWidth","formatMessage","useContext","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","displayAs","py","px","AnimatePresence","initial","exit","ArrowLeft","TextWithTextCards","contact","ContactArea","_slice$contact","_slice$contact2","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","area","location","certificationDate","year","Date","getFullYear","creditAvailability","TextWithCard","portfolioProject","projects","find","_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","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","type","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","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","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/getAvailableLocalesFromStrapi.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/utils/openHubSpotChat.ts","../src/components/StrapiLinkButton/StrapiLinkButton.tsx","../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/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/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/components/EventCard/EventCard.tsx","../src/slices/Events/Events.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';\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';\n\nconst getAvailableLocalesFromStrapi = async (): Promise<string[]> => {\n const { data } = await strapiClient.get('/i18n/locales');\n return data.map((locale: { code: string }) => locale.code);\n};\n\nexport default getAvailableLocalesFromStrapi;\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';\nimport getAvailableLocalesFromStrapi from './getAvailableLocalesFromStrapi';\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 allLocales = await getAvailableLocalesFromStrapi();\n\n const slugPromises = allLocales.map((locale) =>\n strapiClient\n .get<IStrapiResponse<IStrapiData<T>[]>>(path, {\n params: {\n 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 />\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 { STRAPI_DEFAULT_PAGE_SIZE } 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: '6',\n locale,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n };\n\n if (preview) {\n params.publicationState = 'preview';\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_FALLBACK_LOCALE,\n} from '../../constants/strapi';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport IStrapiResponse from '../../models/strapi/IStrapiResponse';\nimport LocalizedEntity from '../../models/LocalizedEntity';\nimport getAvailableLocalesFromStrapi from './getAvailableLocalesFromStrapi';\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 const allLocales = await getAvailableLocalesFromStrapi();\n\n if (!allLocales.includes(STRAPI_FALLBACK_LOCALE)) {\n allLocales.push(STRAPI_FALLBACK_LOCALE);\n }\n\n const promises = allLocales.map((loc) =>\n strapiClient\n .get<IStrapiResponse<IStrapiData<T>[]>>(path, {\n params: {\n pLevel: '6',\n locale: loc,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters,\n ...(preview ? { publicationState: 'preview' } : {}),\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\n const responses = await Promise.all(promises);\n\n const results = responses.flat();\n\n const localizedResponses = results.filter(\n (d) => d.attributes.locale === locale\n );\n\n const fallbackResponses = results.filter(\n (d) => d.attributes.locale === STRAPI_FALLBACK_LOCALE\n );\n\n const result = fallbackResponses.map((fallbackResponse) => {\n const localizedResponse = localizedResponses.find(\n (localized) =>\n localized.attributes[key] === fallbackResponse.attributes[key]\n );\n\n return localizedResponse || fallbackResponse;\n });\n\n return result;\n};\n\nexport default getStrapiCollectionType;\n","import { AxiosResponse } from 'axios';\nimport strapiClient from './strapiClient';\nimport {\n STRAPI_DEFAULT_PAGE_SIZE,\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: '6',\n locale,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters,\n };\n\n if (preview) {\n params.publicationState = 'preview';\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","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 { 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';\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}\n\nexport const StrapiLinkButton: React.FC<StrapiLinkButtonProps> = ({\n link,\n ...buttonProps\n}: StrapiLinkButtonProps) => {\n const adBlockDetected = useDetectAdBlock();\n\n if (link.intercomLauncher) {\n if (adBlockDetected) {\n return (\n <Button {...buttonProps} as={Link} href=\"mailto:hello@tree.ly\">\n {link.text}\n </Button>\n );\n }\n\n return (\n <Button {...buttonProps} onClick={openHubSpotChat}>\n {link.text}\n </Button>\n );\n }\n\n return (\n <Button {...buttonProps} as={Link} href={strapiLinkUrl(link)}>\n {link.text}\n </Button>\n );\n};\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 />\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 />\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 />\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 />\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 />\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 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';\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\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 />\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: () => push(strapiLinkUrl(slice.card?.button)),\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 />\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 link={slice.buttons[0]} size=\"xl\" />\n {slice.buttons.length === 2 && (\n <StrapiLinkButton\n link={slice.buttons[1]}\n variant=\"outline\"\n size=\"xl\"\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 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';\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\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 />\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: () => push(strapiLinkUrl(slice.hero?.button)),\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 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';\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\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: () => push(strapiLinkUrl(slice.hero?.button)),\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, { createRef, useEffect, useRef, useState } 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';\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 [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 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: () => push(strapiLinkUrl(slice.card?.button)),\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\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 { 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\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}\n\nexport const ContextProvider: React.FC<ContextProviderProps> = ({\n children,\n locale,\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 {children}\n </IntlContext.Provider>\n </SWRConfig>\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';\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 { 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 { 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: () => push(strapiLinkUrl(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 />\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 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';\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 [white] = useToken('colors', ['white']);\n const [belowBreakpoint] = useMediaQuery(BREAKPOINT_LG_QUERY);\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: () => push(strapiLinkUrl(slice.contact?.button)),\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: () => push(strapiLinkUrl(slice.contact?.button)),\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.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 />\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 link={slice.button} mt=\"6\" size=\"lg\" />\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.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 />\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 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} />\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 />\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 />\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 />\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 />\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 mt=\"6\" link={button} size=\"md\" variant=\"outline\" />\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=\"2xl\"\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 />\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 />\n </Box>\n )}\n {item.image ? (\n <>\n <Box\n position=\"relative\"\n mt=\"4\"\n height={['2xs', null, null, null, '48']}\n minWidth={[null, null, null, null, '50%']}\n >\n <Image\n src={strapiMediaUrl(item.image.img, 'xLarge')}\n alt={item.image.alt}\n fill\n style={{\n cursor: mobile ? 'unset' : 'pointer',\n objectFit: item.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n onClick={() => !mobile && setIsOpen(true)}\n />\n <FullScreenImage\n images={[item.image]}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n />\n </Box>\n </>\n ) : (\n <></>\n )}\n </Flex>\n </Container>\n {mobile && index + 1 < slice.timelineItems.length && (\n <Box\n overflow=\"visible\"\n borderRight=\"dashed 1px var(--boemly-colors-gray-200)\"\n transform=\"translateX(-50%)\"\n position=\"relative\"\n height=\"20\"\n />\n )}\n </SimpleGrid>\n ))}\n </Flex>\n {visibleItems < slice.timelineItems.length && (\n <>\n <Box\n width=\"full\"\n height={['36', null, null, '64']}\n position=\"absolute\"\n bottom=\"0\"\n zIndex=\"1\"\n background=\"linear-gradient(180deg, rgba(255, 255, 255, 0.00) 0%, rgba(255, 255, 255, 0.98) 76.54%, #FFF 100%)\"\n />\n <Box\n bottom=\"0\"\n textAlign=\"center\"\n zIndex=\"overlay\"\n position=\"relative\"\n >\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={showMoreItems}\n m={[null, null, null, '8']}\n >\n {formatMessage({ id: 'sections.timeline.showMoreButton' })}\n </Button>\n </Box>\n </>\n )}\n </Box>\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import 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';\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 \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)} \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)} \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 {formatNumber(new Date(event.start).getUTCHours(), {\n minimumIntegerDigits: 2,\n })}\n :\n {formatNumber(new Date(event.start).getUTCMinutes(), {\n minimumIntegerDigits: 2,\n })}{' '}\n -{' '}\n {formatNumber(new Date(event.end).getUTCHours(), {\n minimumIntegerDigits: 2,\n })}\n :\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 />\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","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 { STRAPI_URI } 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', '6');\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', '6');\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","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';\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}\n\nexport const SliceRenderer = ({\n slices,\n blogPosts,\n projects,\n customerStories,\n locale = 'en',\n CustomSlice,\n}: SliceRendererProps): JSX.Element => (\n <ContextProvider locale={locale}>\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_FALLBACK_LOCALE","strapiClient","setupCache","axios","default","create","baseURL","headers","paramsSerializer","p","qs","stringify","encodeValuesOnly","timeout","ttl","includes","getAvailableLocalesFromStrapi","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","get","abrupt","sent","data","map","locale","code","stop","apply","this","arguments","getAllSlugsFromStrapi","path","locales","_temp","_ref2$filters","filters","slugPromises","allSlugs","missingLocales","params","then","response","page","slug","attributes","error","_error$response","status","Promise","all","flat","flatMap","filter","fallbackSlug","some","_extends","concat","_x","_x2","_x3","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","publicationState","Map","length","fpmProjectId","set","fpmProject","_strapiProject$attrib","strapiProject","id","toReturn","thumbnail","portfolio","host","portfolioHost","getStrapiCollectionType","_ref2","key","_ref$locale","_ref$preview","_ref$filters","allLocales","promises","results","localizedResponses","fallbackResponses","result","push","loc","d","fallbackResponse","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","openHubSpotChat","w","window","HubSpotConversations","widget","open","hsConversationsOnReady","StrapiLinkButton","link","buttonProps","_objectWithoutPropertiesLoose","_excluded","adBlockDetected","useDetectAdBlock","Button","intercomLauncher","Link","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","StrapiLinkButtonWithIcon","props","rightIcon","destination","Globe","getLinkIcon","ImageGrid","_useToken","useToken","minChildWidth","links","flexDir","flexWrap","ImageTextSequence","oneColumnGrid","primary50","gray700","background","imageTextRows","index","imageBox","LeftTextRightCard","useRouter","Grid","templateColumns","templateRows","GridItem","colSpan","rowSpan","pr","checkMarkLabels","BoemlyList","listItems","colorScheme","ArrowRight","card","PortfolioCard","_slice$card","facts","portfolioNumber","LogoGridWithText","RichText","logos","logo","MapHeroContainer","styled","_templateObject","_taggedTemplateLiteralLoose","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","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","css","listProps","textSize","buttonIndex","weight","CarouselContainer","CarouselInnerContainer","motion","div","numberOfItems","CardContainer","GLOBAL_STYLE","rootMessagesDe","creditsAvailableBadgeMessagesDe","messages","en","creditsAvailableBadgeMessagesEn","de","getMessages","messagesLocale","Object","keys","createIntlCache","intlFactory","createIntl","IntlContext","createContext","ContextProvider","children","fetcher","resource","init","errorData","message","Error","t1","t2","body","SWRConfig","value","Global","styles","Provider","TextCarousel","_useMeasure","useMeasure","itemRef","itemWidth","formatMessage","useContext","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","displayAs","py","px","AnimatePresence","initial","exit","ArrowLeft","TextWithTextCards","contact","ContactArea","_slice$contact","_slice$contact2","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","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","type","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","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","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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"}
|