@treely/strapi-slices 3.2.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"strapi-slices.cjs.production.min.js","sources":["../src/constants/strapi.ts","../src/utils/strapiMediaUrl.ts","../src/constants/metadata.ts","../src/constants/sectionsConfig.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/constants/api.ts","../src/slices/TextCardGrid/TextCardGrid.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/CreditsAvailableState.ts","../src/slices/TextCarousel/styles.ts","../src/slices/TextCarousel/TextCarousel.tsx","../src/slices/TextWithTextCards/TextWithTextCards.tsx","../src/constants/mapbox.ts","../src/constants/formatter.ts","../src/unit.messages.en.ts","../src/rootMessages.de.ts","../src/components/CreditsAvailableBadge/messages.de.ts","../src/components/portfolio/DocumentsDownloadList/messages.de.ts","../src/components/portfolio/PortfolioProjectCard/messages.de.ts","../src/components/portfolio/ProjectInfo/messages.de.ts","../src/components/portfolio/SmallCheckout/messages.de.ts","../src/slices/Comparison/messages.de.ts","../src/slices/Cta/messages.de.ts","../src/slices/CustomerStories/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/rootMessages.en.ts","../src/components/CreditsAvailableBadge/messages.en.ts","../src/components/portfolio/DocumentsDownloadList/messages.en.ts","../src/components/portfolio/PortfolioProjectCard/messages.en.ts","../src/components/portfolio/ProjectInfo/messages.en.ts","../src/components/portfolio/SmallCheckout/messages.en.ts","../src/slices/Comparison/messages.en.ts","../src/slices/Cta/messages.en.ts","../src/slices/CustomerStories/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/constants/globalStyle.ts","../src/constants/fontCustomizations.ts","../src/components/ContextProvider/ContextProvider.tsx","../src/components/portfolio/PortfolioProjectCard/PortfolioProjectCard.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/components/MinimalProviders/MinimalProviders.tsx","../src/components/CreditsAvailableBadge/CreditsAvailableBadge.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/slices/FullWidthImageSlider/utils.ts","../src/slices/FullWidthImageSlider/FullWidthImageSlider.tsx","../src/slices/SideBySideImages/SideBySideImages.tsx","../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/slices/CustomerStories/CustomerStories.tsx","../src/slices/Comparison/Icon.tsx","../src/slices/Comparison/Comparison.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","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 !process.env.STORYBOOK\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 SECTIONS_WITH_BLOG_POSTS = [\n 'sections.blog',\n 'sections.blog-cards',\n];\nexport const SECTIONS_WITH_CUSTOMER_STORIES = ['sections.customer-stories'];\nexport const SECTIONS_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, { useEffect, useRef, useState } 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 openIndex?: number;\n}\n\nexport const FullScreenImage = ({\n images,\n isOpen,\n onClose,\n openIndex,\n}: FullScreenImageProps) => {\n const [imageIndex, setImageIndex] = useState(0);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useLockBodyScroll(isOpen);\n\n const canMoveRight = imageIndex < images.length - 1;\n const canMoveLeft = imageIndex !== 0;\n\n const onRight = () => setImageIndex((p) => (canMoveRight ? p + 1 : p));\n const onLeft = () => setImageIndex((p) => (canMoveLeft ? p - 1 : p));\n\n useKey('ArrowRight', onRight, {}, [onRight]);\n useKey('ArrowLeft', onLeft, {}, [onLeft]);\n\n useEffect(() => {\n if (openIndex !== undefined) {\n setImageIndex(openIndex);\n }\n }, [openIndex]);\n\n useEffect(() => {\n if (containerRef.current) {\n containerRef.current.scrollTo({\n left: imageIndex * containerRef.current.clientWidth,\n behavior: 'smooth',\n });\n }\n }, [imageIndex, containerRef]);\n\n const onCloseLocal = () => {\n setImageIndex(0);\n onClose();\n };\n\n return (\n <BoemlyModal\n onClose={onCloseLocal}\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 = '320px';\nexport const BREAKPOINT_MD = '768px';\nexport const BREAKPOINT_LG = '960px';\nexport const BREAKPOINT_XL = '1200px';\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}\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: React.FC<HeroProps> = ({ slice }: HeroProps) => (\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: React.FC<IconGridProps> = ({ slice }: IconGridProps) => (\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={[1, null, null, 2]}\n gap=\"32\"\n rowGap={['16', null, null, '28']}\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(iconWithTextAndButton.icon.img, 'xSmall')}\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","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","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) => shapePositions[index],\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 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={{ objectFit: image.objectFit || 'contain' }}\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>\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 };\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={0}\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';\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 <>\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: () => 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","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 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","enum CreditsAvailableState {\n YES = 'yes',\n SOME = 'some',\n NO = 'no',\n NOT_YET = 'notYet',\n}\n\nexport default CreditsAvailableState;\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 overflow-x: scroll;\n\n margin-top: var(--boemly-space-6);\n padding: var(--boemly-space-8) 0;\n\n scrollbar-width: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n margin-top: var(--boemly-space-4);\n }\n`;\n\ninterface CarouselInnerContainerProps {\n numberofitems: number;\n}\nexport const CarouselInnerContainer = styled(\n motion.div\n)<CarouselInnerContainerProps>`\n display: flex;\n justify-content: center;\n width: calc(\n (var(--boemly-sizes-sm) + var(--boemly-space-16)) *\n ${({ numberofitems }: CarouselInnerContainerProps) => numberofitems} +\n var(--boemly-space-16)\n );\n min-width: var(--boemly-sizes-full);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n width: calc(\n (var(--boemly-sizes-xs) + var(--boemly-space-4)) *\n ${({ numberofitems }: CarouselInnerContainerProps) => numberofitems} +\n var(--boemly-space-6)\n );\n }\n`;\n\ninterface CardContainerProps {\n numberofitems: number;\n}\nexport const CardContainer = styled(Box)<CardContainerProps>`\n width: ${({ numberofitems }: CardContainerProps) =>\n numberofitems === 3 ? 'var(--boemly-sizes-xl)' : 'var(--boemly-sizes-sm)'};\n\n margin-right: var(--boemly-space-16);\n\n &:first-of-type {\n margin-left: var(--boemly-space-16);\n }\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n width: var(--boemly-sizes-xs);\n\n margin-right: var(--boemly-space-4);\n\n &:first-of-type {\n margin-left: var(--boemly-space-6);\n }\n }\n`;\n","import React, { useRef } from 'react';\nimport {\n Center,\n DefaultSectionContainer,\n DefaultSectionHeader,\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';\n\ninterface TextCarouselSlice extends StrapiDefaultHeader {\n slides: StrapiTextCardWithIcon[];\n button?: StrapiLink;\n}\nexport interface TextCarouselProps {\n slice: TextCarouselSlice;\n}\n\nexport const TextCarousel: React.FC<TextCarouselProps> = ({\n slice,\n}: TextCarouselProps) => {\n const [primary50] = useToken('colors', ['primary.50']);\n\n const containerRef = useRef(null);\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 <CarouselInnerContainer\n drag=\"x\"\n dragConstraints={containerRef}\n numberofitems={slice.slides.length}\n >\n {slice.slides.map(({ id, title, text, icon }) => (\n <CardContainer key={id} numberofitems={slice.slides.length}>\n <TextCardWithIcon\n title={title}\n text={text}\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 displayAs=\"column\"\n />\n </CardContainer>\n ))}\n </CarouselInnerContainer>\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","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","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 { 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","const unitMessagesEn = {\n 'unit.formatter.tonsCo2': '{number} /tCO₂',\n 'unit.formatter.tonsCo2PerYear': '{number} tCO₂/year',\n};\nexport default unitMessagesEn;\n","import comparisonMessagesDe from './slices/Comparison/messages.de';\nimport ctaMessagesDe from './slices/Cta/messages.de';\nimport customerStoriesDe from './slices/CustomerStories/messages.de';\nimport glossaryMessagesDe from './slices/Glossary/messages.de';\nimport projectFactsMessagesDe from './slices/ProjectFacts/messages.de';\nimport projectsMapMessagesDe from './slices/ProjectsMap/messages.de';\nimport shopCheckoutMessagesDe from './slices/ShopCheckout/messages.de';\nimport creditsAvailableBadgeMessagesDe from './components/CreditsAvailableBadge/messages.de';\nimport portfolioDocumentsDownloadListMessagesDe from './components/portfolio/DocumentsDownloadList/messages.de';\nimport portfolioProjectInfoMessagesDe from './components/portfolio/ProjectInfo/messages.de';\nimport portfolioSmallCheckoutMessagesDe from './components/portfolio/SmallCheckout/messages.de';\nimport portfolioProjectCardMessagesDe from './components/portfolio/PortfolioProjectCard/messages.de';\n\nimport unitMessagesDe from './unit.messages.en';\n\nconst rootMessagesDe = {\n //\n // Components\n //\n ...creditsAvailableBadgeMessagesDe,\n ...portfolioDocumentsDownloadListMessagesDe,\n ...portfolioProjectCardMessagesDe,\n ...portfolioProjectInfoMessagesDe,\n ...portfolioSmallCheckoutMessagesDe,\n\n //\n // Slices\n //\n ...comparisonMessagesDe,\n ...ctaMessagesDe,\n ...customerStoriesDe,\n ...glossaryMessagesDe,\n ...projectFactsMessagesDe,\n ...projectsMapMessagesDe,\n ...shopCheckoutMessagesDe,\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':\n 'Noch keine Credits verfügbar',\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 'components.portfolioProjectCard.text.yes': 'Credits verfügbar',\n 'components.portfolioProjectCard.text.some': 'Einige verbleibende Credits',\n 'components.portfolioProjectCard.text.no': 'Keine verbleibenden Credits',\n 'components.portfolioProjectCard.text.notYet': 'Noch keine Credits verfügbar',\n};\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.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};\nexport default messagesDe;\n","const messagesDe = {\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 über den unten stehenden Button',\n\n 'portfolio.smallCheckout.contributionValueKgs.label': 'Beitrag in Tonnen',\n\n 'portfolio.smallCheckout.submitButton': 'Credits kaufen',\n\n 'portfolio.smallCheckout.cta.title':\n 'Möchten Sie mehr als 10.000 tCO₂ kaufen?',\n 'portfolio.smallCheckout.cta.subTitle':\n 'Für Unternehmenskunden bieten wir individuelle Lösungen an. Kontaktieren Sie uns.',\n 'portfolio.smallCheckout.cta.button': 'Unser Vertriebsteam kontaktieren',\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.customerStories.more': 'Weiterlesen',\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 'projects.projectFacts.properties.area': 'Fläche',\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\n 'sections.shopCheckout.submit': 'Kaufen',\n};\nexport default messagesDe;\n","import comparisonMessagesEn from './slices/Comparison/messages.en';\nimport ctaMessagesEn from './slices/Cta/messages.en';\nimport customerStoriesEn from './slices/CustomerStories/messages.en';\nimport glossaryMessagesEn from './slices/Glossary/messages.en';\nimport projectFactsMessagesEn from './slices/ProjectFacts/messages.en';\nimport projectsMapMessagesEn from './slices/ProjectsMap/messages.en';\nimport shopCheckoutMessagesEn from './slices/ShopCheckout/messages.en';\nimport creditsAvailableBadgeMessagesEn from './components/CreditsAvailableBadge/messages.en';\nimport portfolioDocumentsDownloadListMessagesEn from './components/portfolio/DocumentsDownloadList/messages.en';\nimport portfolioProjectInfoMessagesEn from './components/portfolio/ProjectInfo/messages.en';\nimport portfolioSmallCheckoutMessagesEn from './components/portfolio/SmallCheckout/messages.en';\nimport portfolioProjectCardMessagesEn from './components/portfolio/PortfolioProjectCard/messages.en';\n\nimport unitMessagesEn from './unit.messages.en';\n\nconst rootMessagesEn = {\n //\n // Components\n //\n ...creditsAvailableBadgeMessagesEn,\n ...portfolioDocumentsDownloadListMessagesEn,\n ...portfolioProjectCardMessagesEn,\n ...portfolioProjectInfoMessagesEn,\n ...portfolioSmallCheckoutMessagesEn,\n\n //\n // Slices\n //\n ...comparisonMessagesEn,\n ...ctaMessagesEn,\n ...customerStoriesEn,\n ...glossaryMessagesEn,\n ...projectFactsMessagesEn,\n ...projectsMapMessagesEn,\n ...shopCheckoutMessagesEn,\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': 'No credits available yet',\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 'components.portfolioProjectCard.text.yes': 'Credits available',\n 'components.portfolioProjectCard.text.some': 'Some remaining credits',\n 'components.portfolioProjectCard.text.no': 'No remaining credits',\n 'components.portfolioProjectCard.text.notYet': 'No credits available yet',\n};\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.forecastedAmountYear.label':\n 'Project Volume',\n 'features.projectInfo.properties.riskBuffer': 'Risk Buffer Share',\n\n 'features.projectInfo.properties.year':\n '{years} {years, plural, one {year} other {years} }',\n};\nexport default messagesEn;\n","const messagesEn = {\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 via office@tree.ly',\n\n 'portfolio.smallCheckout.contributionValueKgs.label':\n 'Contribution Amount in Tons',\n\n 'portfolio.smallCheckout.submitButton': 'Buy credits',\n\n 'portfolio.smallCheckout.cta.title': 'Looking to buy more than 10.000 tCO₂?',\n 'portfolio.smallCheckout.cta.subTitle':\n 'For enterprise-customers we offer custom solutions. Feel free to contact us.',\n 'portfolio.smallCheckout.cta.button': 'Contact our Sales Team',\n};\nexport default messagesEn;\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.customerStories.more': 'Read more',\n};\nexport default messagesEn;\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 'projects.projectFacts.properties.area': 'Area',\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\n 'sections.shopCheckout.submit': 'Checkout',\n};\nexport default messagesEn;\n","import { css } from '@emotion/react';\nimport { CDN_URI } from './api';\n\nexport const GLOBAL_STYLE = css`\n // GintoNord\n @font-face {\n font-family: 'GintoNord';\n src: url('${CDN_URI}/assets/v3/fonts/ABCGintoNord-Bold.woff2')\n format('woff2');\n font-style: normal;\n font-weight: 700;\n font-display: block;\n }\n // Inter\n @font-face {\n font-family: 'Inter';\n src: url('${CDN_URI}/assets/v3/fonts/Inter-Regular.woff2') format('woff2');\n font-style: normal;\n font-weight: 400;\n font-display: block;\n }\n @font-face {\n font-family: 'Inter';\n src: url('${CDN_URI}/assets/v3/fonts/Inter-Medium.woff2') format('woff2');\n font-style: normal;\n font-weight: 500;\n font-display: block;\n }\n @font-face {\n font-family: 'Inter';\n src: url('${CDN_URI}/assets/v3/fonts/Inter-SemiBold.woff2') format('woff2');\n font-style: normal;\n font-weight: 600;\n font-display: block;\n }\n @font-face {\n font-family: 'Inter';\n src: url('${CDN_URI}/assets/v3/fonts/Inter-Bold.woff2') format('woff2');\n font-style: normal;\n font-weight: 700;\n font-display: block;\n }\n // SpaceMono\n @font-face {\n font-family: 'SpaceMono';\n src: url('${CDN_URI}/assets/v3/fonts/SpaceMono-Bold.woff2') format('woff2');\n font-style: normal;\n font-weight: 700;\n font-display: block;\n }\n\n :root {\n --default-hero-height: calc(100vh - var(--boemly-space-24));\n }\n\n a {\n text-decoration: none;\n }\n`;\n","export const FONT_CUSTOMIZATIONS = {\n body: 'Inter',\n heading: 'Inter',\n display: 'GintoNord',\n mono: 'SpaceMono',\n};\n","import React, { createContext } from 'react';\nimport { createIntl, createIntlCache } from 'react-intl';\nimport rootMessagesDe from '../../rootMessages.de';\nimport rootMessagesEn from '../../rootMessages.en';\nimport Locale from '../../models/Locale';\nimport { BoemlyThemeProvider } from 'boemly';\nimport { Global } from '@emotion/react';\nimport { GLOBAL_STYLE } from '../../constants/globalStyle';\nimport { FONT_CUSTOMIZATIONS } from '../../constants/fontCustomizations';\n\nconst cache = createIntlCache();\n\nconst intlFactory = (locale: string) =>\n createIntl(\n {\n locale,\n messages: { de: rootMessagesDe, en: rootMessagesEn }[locale],\n },\n cache\n );\n\nexport const IntlContext = createContext(intlFactory('en'));\n\nexport interface ContextProviderProps {\n children: React.ReactNode;\n locale: Locale;\n}\n\nexport const ContextProvider: React.FC<ContextProviderProps> = ({\n children,\n locale,\n}: ContextProviderProps): JSX.Element => {\n return (\n <BoemlyThemeProvider fonts={FONT_CUSTOMIZATIONS}>\n <Global styles={{ GLOBAL_STYLE }} />\n <IntlContext.Provider value={intlFactory(locale)}>\n {children}\n </IntlContext.Provider>\n </BoemlyThemeProvider>\n );\n};\n","import React, { useContext } from 'react';\nimport { ProjectCard } from 'boemly';\nimport { PortfolioProject, strapiMediaUrl } from '../../..';\nimport CreditsAvailableState from '../../../models/CreditsAvailableState';\nimport { FORMAT_AS_HECTARE_CONFIG } from '../../../constants/formatter';\nimport Image from 'next/image';\nimport { IntlContext } from '../../ContextProvider';\n\nexport interface PortfolioProjectCardProps {\n project: PortfolioProject;\n}\n\nexport const PortfolioProjectCard = ({\n project,\n}: PortfolioProjectCardProps) => {\n const { formatMessage, formatNumber } = useContext(IntlContext);\n\n const creditsAvailableMessages: Record<CreditsAvailableState, string> = {\n [CreditsAvailableState.YES]: formatMessage({\n id: 'components.portfolioProjectCard.text.yes',\n }),\n\n [CreditsAvailableState.SOME]: formatMessage({\n id: 'components.portfolioProjectCard.text.some',\n }),\n\n [CreditsAvailableState.NO]: formatMessage({\n id: 'components.portfolioProjectCard.text.no',\n }),\n\n [CreditsAvailableState.NOT_YET]: formatMessage({\n id: 'components.portfolioProjectCard.text.notYet',\n }),\n };\n\n return (\n <ProjectCard\n title={project.title}\n facts={[\n {\n id: 1,\n text: formatNumber(\n (project.area || 0) / 10000,\n FORMAT_AS_HECTARE_CONFIG\n ),\n },\n { id: 2, text: project.location || '' },\n ]}\n footerTitle={\n creditsAvailableMessages[\n project.creditsAvailable ?? CreditsAvailableState.NOT_YET\n ]\n }\n footerSubTitle={project.footerSubTitle || ''}\n image={\n project.thumbnail && (\n <Image\n src={strapiMediaUrl(project.thumbnail?.img, 'medium')}\n alt={project.thumbnail?.alt}\n fill\n style={{\n objectFit: project.thumbnail?.objectFit || 'cover',\n }}\n />\n )\n }\n />\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 { IStrapi, IStrapiData, PortfolioProject, StrapiProject } from '../..';\nimport PortfolioProjectCard from '../../components/portfolio/PortfolioProjectCard';\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?: IStrapi<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 && <PortfolioProjectCard 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 && (\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\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 PortfolioProjectCard from '../../components/portfolio/PortfolioProjectCard';\nimport { IStrapi, IStrapiData, StrapiProject } from '../..';\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={`/portfolio/${project.slug}`}\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 width=\"fit-content\"\n height=\"fit-content\"\n transition={`box-shadow ease ${MEDIUM_TRANSITION_DURATION}s`}\n _hover={{ boxShadow: 'lg' }}\n >\n <PortfolioProjectCard project={project} />\n </Box>\n </ConditionalWrapper>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport { FONT_CUSTOMIZATIONS } from '../../constants/fontCustomizations';\nimport rootMessagesDe from '../../rootMessages.de';\nimport rootMessagesEn from '../../rootMessages.en';\nimport { BoemlyThemeProvider } from 'boemly';\nimport { IntlProvider } from 'react-intl';\n\nconst messages = {\n en: rootMessagesEn,\n de: rootMessagesDe,\n};\n\ninterface MinimalProvidersProps {\n locale: string;\n children: JSX.Element | JSX.Element[];\n}\n\nconst MinimalProviders = ({ children, locale }: MinimalProvidersProps) => (\n <IntlProvider messages={messages[locale as 'en' | 'de']} 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 CreditsAvailableState from '../../models/CreditsAvailableState';\nimport { Badge } from 'boemly';\nimport NextLink from 'next/link';\nimport { IntlContext } from '../ContextProvider';\n\nexport interface CreditsAvailableBadgeProps {\n status: CreditsAvailableState;\n href?: string;\n}\n\nconst CreditsAvailableBadge = ({\n status,\n href,\n}: CreditsAvailableBadgeProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n const variants: Record<\n CreditsAvailableState,\n { color: string; text: string }\n > = {\n [CreditsAvailableState.YES]: {\n color: 'green',\n text: formatMessage({ id: 'components.creditsAvailableBadge.text.yes' }),\n },\n [CreditsAvailableState.SOME]: {\n color: 'orange',\n text: formatMessage({ id: 'components.creditsAvailableBadge.text.some' }),\n },\n [CreditsAvailableState.NO]: {\n color: 'red',\n text: formatMessage({ id: 'components.creditsAvailableBadge.text.no' }),\n },\n [CreditsAvailableState.NOT_YET]: {\n color: 'blue',\n text: formatMessage({\n id: 'components.creditsAvailableBadge.text.notYet',\n }),\n },\n };\n\n const variant = variants[status];\n\n return (\n <Badge\n as={href ? NextLink : undefined}\n href={href}\n colorScheme={variant.color}\n width=\"fit-content\"\n >\n {variant.text}\n </Badge>\n );\n};\n\nexport default CreditsAvailableBadge;\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 CreditsAvailableState from '../../models/CreditsAvailableState';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface MapMarkerProps {\n title: string;\n isPublic?: boolean;\n projectDeveloper?: string;\n slug?: string;\n creditsAvailable?: CreditsAvailableState;\n}\n\nconst MapMarker = ({\n title,\n projectDeveloper,\n slug,\n creditsAvailable,\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 as={slug ? NextLink : undefined} href={slug && `/portfolio/${slug}`}>\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 {creditsAvailable && (\n <>\n <CreditsAvailableBadge\n status={creditsAvailable}\n href={slug && `/portfolio/${slug}`}\n />\n <Box height=\"3\" />\n </>\n )}\n\n <Heading size=\"md\">{title}</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={`/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 slug={project.slug}\n creditsAvailable={project.creditsAvailable}\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 },\n centerWithoutImage: {\n textAlign: 'center',\n paddingTagline: '28',\n paddingTitle: '20',\n justifyContent: 'center',\n buttonJustifyContent: 'center',\n textMarginLeft: '0',\n },\n centerWithImage: {\n textAlign: 'center',\n paddingTagline: '28',\n paddingTitle: '20',\n justifyContent: 'center',\n buttonJustifyContent: 'center',\n textMarginLeft: '0',\n },\n right: {\n textAlign: 'left',\n paddingTagline: '0',\n paddingTitle: '0',\n justifyContent: 'start',\n buttonJustifyContent: 'start',\n textMarginLeft: '0',\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 >\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 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: 'Inter',\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 ButtonsContainerProps {\n show: string;\n}\nexport const ButtonsContainer = styled(Box)<ButtonsContainerProps>`\n display: ${({ show }: ButtonsContainerProps) => (show ? 'flex' : 'none')};\n pointer-events: none;\n\n // Place at 50% of height of tallest image minus size of button\n position: absolute;\n top: calc(50% - var(--boemly-sizes-12));\n left: 0;\n width: var(--boemly-sizes-full);\n\n padding: 0 var(--boemly-sizes-32);\n justify-content: space-between;\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n display: none;\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];\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, { 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 ButtonsContainer,\n ItemContainer,\n SliderContainer,\n SliderInnerContainer,\n ImageContainer,\n} from './styles';\nimport { getClosestRatio } from './utils';\n\nexport interface FullWidthImageSliderProps {\n slice: {\n images: {\n id: number;\n caption: string;\n img: StrapiImage;\n }[];\n };\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 allowScroll = windowWidth / 2 / imageWidth < slice.images.length;\n const canMoveRight = sliderIndex < slice.images.length - 1;\n const canMoveLeft = sliderIndex !== 0;\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 <Text height=\"6\">{image.caption}</Text>\n </Flex>\n </ItemContainer>\n ))}\n </SliderInnerContainer>\n </SliderContainer>\n\n <ButtonsContainer show={(allowScroll && !isOpen).toString()}>\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 </ButtonsContainer>\n\n <FullScreenImage\n images={slice.images.map((image) => image.img)}\n openIndex={sliderIndex}\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 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 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\">{item.text}</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 { useRouter } from 'next/router';\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';\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 };\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 url = new URL(`${FPM_API_URI}/v1/webhooks/shop/checkout`);\n\n url.searchParams.append('batchId', slice.batchId);\n\n url.searchParams.append(\n 'quantity',\n Math.floor(contributionValue / slice.pricePerKg).toString()\n );\n\n if (slice.couponId) url.searchParams.append('couponId', slice.couponId);\n\n push(url.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 />\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 <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(values.contributionValue / slice.pricePerKg),\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(\n Math.floor(\n values.contributionValue / slice.pricePerKg\n ) * slice.pricePerKg,\n {\n style: 'currency',\n currency: slice.currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\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 </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 = 60_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=\"GintoNord\"\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>>;\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\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';\n\nexport interface SmallCheckoutProps {\n batchId: string;\n pricePerKg: number;\n initialContributionValue: number;\n checkoutText?: string;\n currency: 'EUR' | 'CHF';\n\n title?: string;\n subtitle?: string;\n button?: StrapiLink;\n}\n\ninterface SmallCheckoutForm {\n contributionValueCurrency: number;\n contributionValueKgs: number;\n}\n\nconst SmallCheckout = ({\n pricePerKg,\n currency,\n batchId,\n initialContributionValue,\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\n if (!values.contributionValueCurrency) {\n errors.contributionValueCurrency = formatMessage({\n id: 'portfolio.smallCheckout.contributionValueCurrency.validation.empty',\n });\n } else if (\n values.contributionValueCurrency < MINIMUM_CONTRIBUTION_VALUE_IN_MONEY\n ) {\n errors.contributionValueCurrency = formatMessage({\n id: `portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.${currency}`,\n });\n } else if (\n values.contributionValueCurrency > MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY\n ) {\n errors.contributionValueCurrency = formatMessage({\n id: 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh',\n });\n }\n\n return errors;\n },\n [locale]\n );\n\n const onSubmit = async ({ contributionValueCurrency }: SmallCheckoutForm) =>\n push(\n `${FPM_API_URI}/v1/webhooks/shop/checkout?batchId=${batchId}&quantity=${Math.floor(\n contributionValueCurrency / pricePerKg\n )}`\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=\"1\" 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 </Flex>\n\n <Formik\n initialValues={{\n contributionValueCurrency: initialContributionValue,\n contributionValueKgs: initialContributionValue / pricePerKg / 1000,\n }}\n validate={validateForm}\n onSubmit={onSubmit}\n >\n {({\n errors,\n touched,\n handleSubmit,\n setValues,\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 // valueAsNumber might be NaN\n const value = e.target.valueAsNumber || 0;\n\n setValues({\n contributionValueCurrency: value,\n contributionValueKgs: value / pricePerKg / 1000,\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=\"contributionValueKgs\">\n {({ field }: FieldProps) => (\n <BoemlyFormControl\n id=\"contributionValueKgs\"\n size=\"md\"\n inputProps={{\n type: 'number',\n value: field.value,\n onChange: (e) => {\n const value = e.target.valueAsNumber || 0;\n\n setValues({\n contributionValueCurrency:\n value * pricePerKg * 1000,\n contributionValueKgs: value,\n });\n },\n }}\n label={formatMessage({\n id: 'portfolio.smallCheckout.contributionValueKgs.label',\n })}\n rightAddonsOrElements={[\n <InputRightAddon key=\"tCO₂\">tCO₂</InputRightAddon>,\n ]}\n isInvalid={\n !!errors.contributionValueKgs &&\n touched.contributionValueKgs\n }\n errorMessage={errors.contributionValueKgs}\n />\n )}\n </Field>\n </Box>\n </Flex>\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 id: 1,\n intercomLauncher: true,\n text: button.text,\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} 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 <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\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 {project.creditsAvailable ? (\n <Box mt=\"2\">\n <CreditsAvailableBadge status={project.creditsAvailable} />\n </Box>\n ) : (\n <></>\n )}\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 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 />\n ) : (\n (slice.contactTitle ||\n slice.contactText ||\n slice.contactButton ||\n slice.contactAvatar) && (\n <Contact\n title={slice.contactTitle}\n text={slice.contactText}\n button={slice.contactButton}\n avatar={slice.contactAvatar}\n />\n )\n )}\n </Flex>\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React, { useContext } from 'react';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport StrapiCustomerStory from '../../models/strapi/StrapiCustomerStory';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport {\n Box,\n Button,\n Center,\n Container,\n DefaultSectionContainer,\n Heading,\n SimpleGrid,\n Text,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport Link from 'next/link';\nimport { IntlContext } from '../../components/ContextProvider';\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 const { formatMessage } = useContext(IntlContext);\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2]} spacingX={56} spacingY={24}>\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 <Container padding=\"none\" key={customerStory.id}>\n <Center\n height=\"24\"\n backgroundColor=\"primary.50\"\n borderTopRadius=\"xl\"\n >\n <Box position=\"relative\" height=\"12\" width=\"12\">\n <Image\n src={strapiMediaUrl(\n customerStory.attributes.customerLogo.img,\n 'medium'\n )}\n alt={customerStory.attributes.customerLogo.alt}\n fill\n style={{\n objectFit:\n customerStory.attributes.customerLogo.objectFit,\n }}\n />\n </Box>\n </Center>\n <Box px=\"6\" pt=\"12\" pb=\"6\">\n <Text size=\"xsMonoUppercase\" color=\"gray.500\" mb=\"2\">\n {customerStory.attributes.customerIndustry}\n </Text>\n <Heading size=\"xl\">{customerStory.attributes.title}</Heading>\n <Button\n as={Link}\n href={`/customer-stories/${customerStory.attributes.slug}`}\n variant=\"outline\"\n size=\"sm\"\n mt=\"12\"\n >\n {formatMessage({ id: 'sections.customerStories.more' })}\n </Button>\n </Box>\n </Container>\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 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 Locale from '../../models/Locale';\nimport { ContextProvider } from '../ContextProvider';\n\nexport interface CustomSliceProps {\n slice: any;\n id: string;\n}\n\nexport interface SliceRendererProps {\n slices: any;\n blogPosts: IStrapiData<StrapiBlogPost>[];\n projects: PortfolioProject[];\n customerStories: IStrapiData<StrapiCustomerStory>[];\n locale?: Locale;\n CustomSlice?: ({ slice, id }: CustomSliceProps) => JSX.Element;\n}\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 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';\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 return {\n ...post,\n // Portfolio Projects\n 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: blog,\n banner: global.attributes.banner,\n topBanner: post?.attributes.topBanner || global.attributes.topBanner,\n customerStories: [],\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';\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 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,\n banner: global.attributes.banner,\n topBanner:\n customerStory?.attributes.topBanner || global.attributes.topBanner,\n blogPosts: [],\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} from '../constants/sectionsConfig';\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 return {\n ...page,\n // Portfolio Projects\n 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,\n banner: global.attributes.banner,\n topBanner: page?.attributes.topBanner || global.attributes.topBanner,\n customerStories,\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} from '../constants/sectionsConfig';\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 return {\n ...project,\n // Portfolio Projects\n 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,\n banner: global.attributes.banner,\n topBanner: project?.attributes.topBanner || global.attributes.topBanner,\n customerStories: [],\n };\n};\n\nexport default mergeGlobalAndStrapiProject;\n"],"names":["STRAPI_URI","process","env","NEXT_PUBLIC_STRAPI_URI","strapiMediaUrl","media","preferredSize","_media$data$attribute","url","data","attributes","ext","formats","indexOf","includes","STORYBOOK","DEFAULT_SHARE_IMAGE","DEFAULT_SHARE_ALT","EXTENDABLE_HEADER_SECTIONS","DARK_THEME_HEADER_SECTIONS","strapiLinkUrl","strapiLink","_strapiLink","_strapiLink2","undefined","page","slug","ZoomableImage","_ref","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","default","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","openIndex","imageIndex","setImageIndex","containerRef","useRef","useLockBodyScroll","canMoveRight","length","canMoveLeft","onRight","p","onLeft","useKey","useEffect","current","scrollTo","left","clientWidth","behavior","BoemlyModal","title","trigger","size","content","Flex","insetY","insetX","alignItems","justifyContent","ref","flexGrow","flexBasis","gap","marginX","scrollSnapType","map","key","id","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","_extends","intercomLauncher","Link","Hero","minHeight","backgroundColor","overflowX","Gradient","shape","bottom","borderTopRightRadius","right","top","transform","subTitle","color","mx","button","additionalButtons","IconGrid","flexDirection","Spacer","h","SimpleGrid","columns","rowGap","iconsWithTextAndButton","iconWithTextAndButton","margin","Heading","mb","Text","LinkedInIcon","viewBox","xmlns","clipPath","d","StrapiLinkButtonWithIcon","props","rightIcon","destination","Globe","getLinkIcon","ImageGrid","_useToken","useToken","minChildWidth","_ref2","links","flexDir","flexWrap","ShapePosition","FPM_API_URI","NEXT_PUBLIC_FPM_API_URI","CDN_URI","ImageTextSequence","oneColumnGrid","primary50","gray700","background","imageTextRows","index","imageBox","LeftTextRightCard","push","useRouter","Grid","templateColumns","templateRows","GridItem","colSpan","rowSpan","pr","checkMarkLabels","BoemlyList","listItems","colorScheme","ArrowRight","card","PortfolioCard","_slice$card","facts","portfolioNumber","LogoGridWithText","RichText","logos","logo","MapHeroContainer","styled","_templateObject","_taggedTemplateLiteralLoose","MapHeroTextContainer","_templateObject2","ShapeContainer","_templateObject3","MapContainer","_templateObject4","MapGradient","_templateObject5","MapHero","belowBreakpoint","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","maxWidth","QuoteCard","avatar","name","description","marginTop","RichTextSection","Steps","_slice$card$shapes","gray900","Array","steps","stepRefs","setStepRefs","stepProgress","setStepProgress","offsetY","useWindowScroll","windowHeight","useWindowSize","createRef","_containerRef$current","containerOffsetTop","offsetTop","_ref$current","currentItemOffsetTop","Center","step","options","forceBlock","marginBottom","borderLeft","opacity","borderRight","transition","ShapesCard","CreditsAvailableState","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","_ref3","TextCarousel","drag","dragConstraints","slides","TextCardWithIcon","displayAs","TextWithTextCards","contact","ContactArea","_slice$contact","_slice$contact2","MapBoxStyle","CreditsAvailableState$1","FORMAT_AS_HECTARE_CONFIG","unit","unitDisplay","maximumFractionDigits","FORMAT_AS_PERCENT_CONFIG","unitMessagesEn","rootMessagesDe","unitMessagesDe","rootMessagesEn","GLOBAL_STYLE","FONT_CUSTOMIZATIONS","body","heading","mono","cache","createIntlCache","intlFactory","locale","createIntl","messages","de","en","IntlContext","createContext","ContextProvider","children","BoemlyThemeProvider","fonts","Global","styles","Provider","value","PortfolioProjectCard","_creditsAvailableMess","_project$creditsAvail","_project$thumbnail","_project$thumbnail2","_project$thumbnail3","project","_useContext","useContext","formatMessage","formatNumber","creditsAvailableMessages","YES","SOME","NO","NOT_YET","ProjectCard","area","location","footerTitle","creditsAvailable","footerSubTitle","thumbnail","TextWithCard","portfolioProject","projects","find","_slice$project","_slice$project2","fpmProjectId","cardPosition","columnGap","LinkCardsGrid","px","py","borderStyle","borderWidth","borderColor","transitionDuration","MEDIUM_TRANSITION_DURATION","_hover","minWidth","colors","dark","light","SmallHero","theme","gradient","tags","direction","justify","wrap","Tag","BlogItemContainer","ImageContainer","Blog","blogPosts","formatDate","sortedBlogPosts","blog_posts","sort","a","b","Date","createdAt","getTime","spacingX","spacingY","blogPost","bp","category","teaser","DatePersonPair","date","person","author","ConditionalWrapper","condition","wrapper","ProjectsGrid","filteredProjects","filter","fpmProject","some","strapiProject","passHref","legacyBehavior","MinimalProviders","IntlProvider","CreditsAvailableBadge","_variants","status","Badge","NextLink","MapMarker","projectDeveloper","_ref$isPublic","isPublic","_useDisclosure","useDisclosure","onOpen","blue600","onMouseEnter","onMouseLeave","MapPin","Container","shadow","whiteSpace","mapboxStyle","mapboxgl","accessToken","CtaCardType","ProjectsMap","boundingBoxes","minLeft","minBottom","maxRight","maxTop","geom","center","defaultCenterCoordinates","longitude","latitude","bounds","concat","coordinates","c","forEach","mapContainer","Map","container","CaliTerrain","defaultZoomLevel","maxZoom","_project$projectDevel","document","createRoot","render","marker","Marker","offset","setLngLat","addTo","remove","Video","_useMeasure","useMeasure","youTubeID","frameBorder","allow","allowFullScreen","FullWidthHighlightQuote","quote","AvatarWithName","avatarWithName","orientation","SliderContainer","ButtonsContainer","show","SliderInnerContainer","ItemContainer","aspectRatio","ALLOWED_RATIOS","FullWidthImageSlider","imageRef","imageWidth","windowWidth","sliderIndex","setSliderIndex","allowScroll","animate","duration","ease","imageCount","ratio","minDiff","Math","abs","posMinDiff","allowedRatio","caption","toString","AnimatePresence","initial","exit","ArrowLeft","SideBySideImages","STATES","paddingTagline","paddingTitle","buttonJustifyContent","textMarginLeft","centerWithoutImage","centerWithImage","taglineColor","titleColor","subTitleColor","Cta","ctaCards","ctaCard","ctaCardType","CenterWithImage","CenterWithoutImage","Left","Right","getTypeOfCard","elevation","backgroundShape","marginLeft","paddingX","fontFamily","fontSize","fontWeight","lineHeight","CtaOnly","Glossary","copyToClipboard","useCopyToClipboard","grouped","copiedItem","setCopiedItem","glossary_items","localeCompare","curr","_curr$attributes$titl","at","toUpperCase","handleAnchorClick","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_window","currentUrl","_context","prev","next","split","setTimeout","stop","_x","apply","this","arguments","Object","entries","letter","items","placeSelf","spacing","item","scrollMarginTop","Check","LinkIcon","_onClick","_callee2","_context2","abrupt","keys","Divider","ShopCheckout","validateForm","useCallback","values","errors","contributionValue","currency","marginRight","badge","textTransform","checkoutText","LabelNumberPair","label","number","pricePerKg","Formik","initialValues","initialContributionValue","validate","onSubmit","URL","searchParams","append","batchId","floor","couponId","touched","Form","handleSubmit","Field","_ref4","BoemlyFormControl","inputProps","type","field","rightAddonsOrElements","InputRightAddon","isInvalid","errorMessage","minimumFractionDigits","factKeyColor","factValueColor","Facts","fact","sortByCreatedAt","BlogCards","mobile","useMemo","blogPostsToDisplay","_slice$blogPostCatego","blogPostCategory","_blogPost$attributes$","_slice$blogPostCatego2","SmallCheckout","subtitle","contributionValueCurrency","contributionValueKgs","setValues","_ref5","onChange","target","valueAsNumber","_ref6","my","ProjectInfo","amount","start","end","monthsDifference","yearsDifference","areaInM2","subtitles","LabelTextPair","parseInt","areaSubtitle","locationSubtitle","year","month","startSubtitle","years","getMonth","getFullYear","timeSpanSubtitle","projectType","verificationStandard","projectTypeSubtitle","projectDeveloperSubtitle","defaultMessage","verificationStandardSubtitle","defaultIssuer","logoUrl","forecastedAmountYearly","riskBuffer","forecastedAmountSubtitle","riskBufferSubtitle","DocumentsDownloadList","documentUrls","documentUrl","FilePdf","DownloadSimple","Contact","border","ProjectFacts","customTitle","customSubtitle","customButton","contactTitle","contactText","contactButton","contactAvatar","CustomerStories","customerStories","customer_stories","customerStory","cs","borderTopRadius","customerLogo","pt","customerIndustry","BULLET_POINT_VARIANTS","bulletPointColor","Icon","X","factColor","dividerColor","Comparison","comparisonCards","comparisonCard","factTitle","factSubtitle","lists","list","_shareImage$url","_shareImage$alt","shareImage","_ref$metaTitleSuffix","metaTitleSuffix","_ref$favicon","favicon","_ref$domain","domain","shareImageUrl","shareImageAlt","property","_ref$locale","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","headerType","extendable","headerNavMenus","navbar","navMenus","headerButtons","footerLinks","footer","banner","topBanner","_customerStory$attrib","_customerStory$attrib2","_customerStory$attrib3","_customerStory$attrib4","_customerStory$attrib5","_customerStory$attrib6","_customerStory$attrib7","_customerStory$attrib8","_customerStory$attrib9","_customerStory$attrib10","_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","_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/utils/strapiMediaUrl.ts","../src/constants/metadata.ts","../src/constants/sectionsConfig.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/constants/api.ts","../src/slices/TextCardGrid/TextCardGrid.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/CreditsAvailableState.ts","../src/slices/TextCarousel/styles.ts","../src/slices/TextCarousel/TextCarousel.tsx","../src/slices/TextWithTextCards/TextWithTextCards.tsx","../src/constants/mapbox.ts","../src/constants/formatter.ts","../src/unit.messages.en.ts","../src/rootMessages.de.ts","../src/components/CreditsAvailableBadge/messages.de.ts","../src/components/portfolio/DocumentsDownloadList/messages.de.ts","../src/components/portfolio/PortfolioProjectCard/messages.de.ts","../src/components/portfolio/ProjectInfo/messages.de.ts","../src/components/portfolio/SmallCheckout/messages.de.ts","../src/slices/Comparison/messages.de.ts","../src/slices/Cta/messages.de.ts","../src/slices/CustomerStories/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/rootMessages.en.ts","../src/components/CreditsAvailableBadge/messages.en.ts","../src/components/portfolio/DocumentsDownloadList/messages.en.ts","../src/components/portfolio/PortfolioProjectCard/messages.en.ts","../src/components/portfolio/ProjectInfo/messages.en.ts","../src/components/portfolio/SmallCheckout/messages.en.ts","../src/slices/Comparison/messages.en.ts","../src/slices/Cta/messages.en.ts","../src/slices/CustomerStories/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/constants/globalStyle.ts","../src/constants/fontCustomizations.ts","../src/components/ContextProvider/ContextProvider.tsx","../src/components/portfolio/PortfolioProjectCard/PortfolioProjectCard.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/components/MinimalProviders/MinimalProviders.tsx","../src/components/CreditsAvailableBadge/CreditsAvailableBadge.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/slices/FullWidthImageSlider/utils.ts","../src/slices/FullWidthImageSlider/FullWidthImageSlider.tsx","../src/slices/SideBySideImages/SideBySideImages.tsx","../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/slices/CustomerStories/CustomerStories.tsx","../src/slices/Comparison/Icon.tsx","../src/slices/Comparison/Comparison.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","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 !process.env.STORYBOOK\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 SECTIONS_WITH_BLOG_POSTS = [\n 'sections.blog',\n 'sections.blog-cards',\n];\nexport const SECTIONS_WITH_CUSTOMER_STORIES = ['sections.customer-stories'];\nexport const SECTIONS_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, { useEffect, useRef, useState } 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 openIndex?: number;\n}\n\nexport const FullScreenImage = ({\n images,\n isOpen,\n onClose,\n openIndex,\n}: FullScreenImageProps) => {\n const [imageIndex, setImageIndex] = useState(0);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useLockBodyScroll(isOpen);\n\n const canMoveRight = imageIndex < images.length - 1;\n const canMoveLeft = imageIndex !== 0;\n\n const onRight = () => setImageIndex((p) => (canMoveRight ? p + 1 : p));\n const onLeft = () => setImageIndex((p) => (canMoveLeft ? p - 1 : p));\n\n useKey('ArrowRight', onRight, {}, [onRight]);\n useKey('ArrowLeft', onLeft, {}, [onLeft]);\n\n useEffect(() => {\n if (openIndex !== undefined) {\n setImageIndex(openIndex);\n }\n }, [openIndex]);\n\n useEffect(() => {\n if (containerRef.current) {\n containerRef.current.scrollTo({\n left: imageIndex * containerRef.current.clientWidth,\n behavior: 'smooth',\n });\n }\n }, [imageIndex, containerRef]);\n\n const onCloseLocal = () => {\n setImageIndex(0);\n onClose();\n };\n\n return (\n <BoemlyModal\n onClose={onCloseLocal}\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 = '320px';\nexport const BREAKPOINT_MD = '768px';\nexport const BREAKPOINT_LG = '960px';\nexport const BREAKPOINT_XL = '1200px';\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}\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: React.FC<HeroProps> = ({ slice }: HeroProps) => (\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: React.FC<IconGridProps> = ({ slice }: IconGridProps) => (\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={[1, null, null, 2]}\n gap=\"32\"\n rowGap={['16', null, null, '28']}\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(iconWithTextAndButton.icon.img, 'xSmall')}\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","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","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) => shapePositions[index],\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 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={{ objectFit: image.objectFit || 'contain' }}\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>\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 };\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={0}\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';\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 <>\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: () => 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","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 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","enum CreditsAvailableState {\n YES = 'yes',\n SOME = 'some',\n NO = 'no',\n NOT_YET = 'notYet',\n}\n\nexport default CreditsAvailableState;\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 overflow-x: scroll;\n\n margin-top: var(--boemly-space-6);\n padding: var(--boemly-space-8) 0;\n\n scrollbar-width: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n margin-top: var(--boemly-space-4);\n }\n`;\n\ninterface CarouselInnerContainerProps {\n numberofitems: number;\n}\nexport const CarouselInnerContainer = styled(\n motion.div\n)<CarouselInnerContainerProps>`\n display: flex;\n justify-content: center;\n width: calc(\n (var(--boemly-sizes-sm) + var(--boemly-space-16)) *\n ${({ numberofitems }: CarouselInnerContainerProps) => numberofitems} +\n var(--boemly-space-16)\n );\n min-width: var(--boemly-sizes-full);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n width: calc(\n (var(--boemly-sizes-xs) + var(--boemly-space-4)) *\n ${({ numberofitems }: CarouselInnerContainerProps) => numberofitems} +\n var(--boemly-space-6)\n );\n }\n`;\n\ninterface CardContainerProps {\n numberofitems: number;\n}\nexport const CardContainer = styled(Box)<CardContainerProps>`\n width: ${({ numberofitems }: CardContainerProps) =>\n numberofitems === 3 ? 'var(--boemly-sizes-xl)' : 'var(--boemly-sizes-sm)'};\n\n margin-right: var(--boemly-space-16);\n\n &:first-of-type {\n margin-left: var(--boemly-space-16);\n }\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n width: var(--boemly-sizes-xs);\n\n margin-right: var(--boemly-space-4);\n\n &:first-of-type {\n margin-left: var(--boemly-space-6);\n }\n }\n`;\n","import React, { useRef } from 'react';\nimport {\n Center,\n DefaultSectionContainer,\n DefaultSectionHeader,\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';\n\ninterface TextCarouselSlice extends StrapiDefaultHeader {\n slides: StrapiTextCardWithIcon[];\n button?: StrapiLink;\n}\nexport interface TextCarouselProps {\n slice: TextCarouselSlice;\n}\n\nexport const TextCarousel: React.FC<TextCarouselProps> = ({\n slice,\n}: TextCarouselProps) => {\n const [primary50] = useToken('colors', ['primary.50']);\n\n const containerRef = useRef(null);\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 <CarouselInnerContainer\n drag=\"x\"\n dragConstraints={containerRef}\n numberofitems={slice.slides.length}\n >\n {slice.slides.map(({ id, title, text, icon }) => (\n <CardContainer key={id} numberofitems={slice.slides.length}>\n <TextCardWithIcon\n title={title}\n text={text}\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 displayAs=\"column\"\n />\n </CardContainer>\n ))}\n </CarouselInnerContainer>\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","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","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 { 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","const unitMessagesEn = {\n 'unit.formatter.tonsCo2': '{number} /tCO₂',\n 'unit.formatter.tonsCo2PerYear': '{number} tCO₂/year',\n};\nexport default unitMessagesEn;\n","import comparisonMessagesDe from './slices/Comparison/messages.de';\nimport ctaMessagesDe from './slices/Cta/messages.de';\nimport customerStoriesDe from './slices/CustomerStories/messages.de';\nimport glossaryMessagesDe from './slices/Glossary/messages.de';\nimport projectFactsMessagesDe from './slices/ProjectFacts/messages.de';\nimport projectsMapMessagesDe from './slices/ProjectsMap/messages.de';\nimport shopCheckoutMessagesDe from './slices/ShopCheckout/messages.de';\nimport creditsAvailableBadgeMessagesDe from './components/CreditsAvailableBadge/messages.de';\nimport portfolioDocumentsDownloadListMessagesDe from './components/portfolio/DocumentsDownloadList/messages.de';\nimport portfolioProjectInfoMessagesDe from './components/portfolio/ProjectInfo/messages.de';\nimport portfolioSmallCheckoutMessagesDe from './components/portfolio/SmallCheckout/messages.de';\nimport portfolioProjectCardMessagesDe from './components/portfolio/PortfolioProjectCard/messages.de';\n\nimport unitMessagesDe from './unit.messages.en';\n\nconst rootMessagesDe = {\n //\n // Components\n //\n ...creditsAvailableBadgeMessagesDe,\n ...portfolioDocumentsDownloadListMessagesDe,\n ...portfolioProjectCardMessagesDe,\n ...portfolioProjectInfoMessagesDe,\n ...portfolioSmallCheckoutMessagesDe,\n\n //\n // Slices\n //\n ...comparisonMessagesDe,\n ...ctaMessagesDe,\n ...customerStoriesDe,\n ...glossaryMessagesDe,\n ...projectFactsMessagesDe,\n ...projectsMapMessagesDe,\n ...shopCheckoutMessagesDe,\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':\n 'Noch keine Credits verfügbar',\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 'components.portfolioProjectCard.text.yes': 'Credits verfügbar',\n 'components.portfolioProjectCard.text.some': 'Einige verbleibende Credits',\n 'components.portfolioProjectCard.text.no': 'Keine verbleibenden Credits',\n 'components.portfolioProjectCard.text.notYet': 'Noch keine Credits verfügbar',\n};\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.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};\nexport default messagesDe;\n","const messagesDe = {\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 über den unten stehenden Button',\n\n 'portfolio.smallCheckout.contributionValueKgs.label': 'Beitrag in Tonnen',\n\n 'portfolio.smallCheckout.submitButton': 'Credits kaufen',\n\n 'portfolio.smallCheckout.cta.title':\n 'Möchten Sie mehr als 10.000 tCO₂ kaufen?',\n 'portfolio.smallCheckout.cta.subTitle':\n 'Für Unternehmenskunden bieten wir individuelle Lösungen an. Kontaktieren Sie uns.',\n 'portfolio.smallCheckout.cta.button': 'Unser Vertriebsteam kontaktieren',\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.customerStories.more': 'Weiterlesen',\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 'projects.projectFacts.properties.area': 'Fläche',\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\n 'sections.shopCheckout.submit': 'Kaufen',\n};\nexport default messagesDe;\n","import comparisonMessagesEn from './slices/Comparison/messages.en';\nimport ctaMessagesEn from './slices/Cta/messages.en';\nimport customerStoriesEn from './slices/CustomerStories/messages.en';\nimport glossaryMessagesEn from './slices/Glossary/messages.en';\nimport projectFactsMessagesEn from './slices/ProjectFacts/messages.en';\nimport projectsMapMessagesEn from './slices/ProjectsMap/messages.en';\nimport shopCheckoutMessagesEn from './slices/ShopCheckout/messages.en';\nimport creditsAvailableBadgeMessagesEn from './components/CreditsAvailableBadge/messages.en';\nimport portfolioDocumentsDownloadListMessagesEn from './components/portfolio/DocumentsDownloadList/messages.en';\nimport portfolioProjectInfoMessagesEn from './components/portfolio/ProjectInfo/messages.en';\nimport portfolioSmallCheckoutMessagesEn from './components/portfolio/SmallCheckout/messages.en';\nimport portfolioProjectCardMessagesEn from './components/portfolio/PortfolioProjectCard/messages.en';\n\nimport unitMessagesEn from './unit.messages.en';\n\nconst rootMessagesEn = {\n //\n // Components\n //\n ...creditsAvailableBadgeMessagesEn,\n ...portfolioDocumentsDownloadListMessagesEn,\n ...portfolioProjectCardMessagesEn,\n ...portfolioProjectInfoMessagesEn,\n ...portfolioSmallCheckoutMessagesEn,\n\n //\n // Slices\n //\n ...comparisonMessagesEn,\n ...ctaMessagesEn,\n ...customerStoriesEn,\n ...glossaryMessagesEn,\n ...projectFactsMessagesEn,\n ...projectsMapMessagesEn,\n ...shopCheckoutMessagesEn,\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': 'No credits available yet',\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 'components.portfolioProjectCard.text.yes': 'Credits available',\n 'components.portfolioProjectCard.text.some': 'Some remaining credits',\n 'components.portfolioProjectCard.text.no': 'No remaining credits',\n 'components.portfolioProjectCard.text.notYet': 'No credits available yet',\n};\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.forecastedAmountYear.label':\n 'Project Volume',\n 'features.projectInfo.properties.riskBuffer': 'Risk Buffer Share',\n\n 'features.projectInfo.properties.year':\n '{years} {years, plural, one {year} other {years} }',\n};\nexport default messagesEn;\n","const messagesEn = {\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 via office@tree.ly',\n\n 'portfolio.smallCheckout.contributionValueKgs.label':\n 'Contribution Amount in Tons',\n\n 'portfolio.smallCheckout.submitButton': 'Buy credits',\n\n 'portfolio.smallCheckout.cta.title': 'Looking to buy more than 10.000 tCO₂?',\n 'portfolio.smallCheckout.cta.subTitle':\n 'For enterprise-customers we offer custom solutions. Feel free to contact us.',\n 'portfolio.smallCheckout.cta.button': 'Contact our Sales Team',\n};\nexport default messagesEn;\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.customerStories.more': 'Read more',\n};\nexport default messagesEn;\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 'projects.projectFacts.properties.area': 'Area',\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\n 'sections.shopCheckout.submit': 'Checkout',\n};\nexport default messagesEn;\n","import { css } from '@emotion/react';\nimport { CDN_URI } from './api';\n\nexport const GLOBAL_STYLE = css`\n // GintoNord\n @font-face {\n font-family: 'GintoNord';\n src: url('${CDN_URI}/assets/v3/fonts/ABCGintoNord-Bold.woff2')\n format('woff2');\n font-style: normal;\n font-weight: 700;\n font-display: block;\n }\n // Inter\n @font-face {\n font-family: 'Inter';\n src: url('${CDN_URI}/assets/v3/fonts/Inter-Regular.woff2') format('woff2');\n font-style: normal;\n font-weight: 400;\n font-display: block;\n }\n @font-face {\n font-family: 'Inter';\n src: url('${CDN_URI}/assets/v3/fonts/Inter-Medium.woff2') format('woff2');\n font-style: normal;\n font-weight: 500;\n font-display: block;\n }\n @font-face {\n font-family: 'Inter';\n src: url('${CDN_URI}/assets/v3/fonts/Inter-SemiBold.woff2') format('woff2');\n font-style: normal;\n font-weight: 600;\n font-display: block;\n }\n @font-face {\n font-family: 'Inter';\n src: url('${CDN_URI}/assets/v3/fonts/Inter-Bold.woff2') format('woff2');\n font-style: normal;\n font-weight: 700;\n font-display: block;\n }\n // SpaceMono\n @font-face {\n font-family: 'SpaceMono';\n src: url('${CDN_URI}/assets/v3/fonts/SpaceMono-Bold.woff2') format('woff2');\n font-style: normal;\n font-weight: 700;\n font-display: block;\n }\n\n :root {\n --default-hero-height: calc(100vh - var(--boemly-space-24));\n }\n\n a {\n text-decoration: none;\n }\n`;\n","export const FONT_CUSTOMIZATIONS = {\n body: 'Inter',\n heading: 'Inter',\n display: 'GintoNord',\n mono: 'SpaceMono',\n};\n","import React, { createContext } from 'react';\nimport { createIntl, createIntlCache } from 'react-intl';\nimport rootMessagesDe from '../../rootMessages.de';\nimport rootMessagesEn from '../../rootMessages.en';\nimport Locale from '../../models/Locale';\nimport { BoemlyThemeProvider } from 'boemly';\nimport { Global } from '@emotion/react';\nimport { GLOBAL_STYLE } from '../../constants/globalStyle';\nimport { FONT_CUSTOMIZATIONS } from '../../constants/fontCustomizations';\n\nconst cache = createIntlCache();\n\nconst intlFactory = (locale: string) =>\n createIntl(\n {\n locale,\n messages: { de: rootMessagesDe, en: rootMessagesEn }[locale],\n },\n cache\n );\n\nexport const IntlContext = createContext(intlFactory('en'));\n\nexport interface ContextProviderProps {\n children: React.ReactNode;\n locale: Locale;\n}\n\nexport const ContextProvider: React.FC<ContextProviderProps> = ({\n children,\n locale,\n}: ContextProviderProps): JSX.Element => {\n return (\n <BoemlyThemeProvider fonts={FONT_CUSTOMIZATIONS}>\n <Global styles={{ GLOBAL_STYLE }} />\n <IntlContext.Provider value={intlFactory(locale)}>\n {children}\n </IntlContext.Provider>\n </BoemlyThemeProvider>\n );\n};\n","import React, { useContext } from 'react';\nimport { ProjectCard } from 'boemly';\nimport { PortfolioProject, strapiMediaUrl } from '../../..';\nimport CreditsAvailableState from '../../../models/CreditsAvailableState';\nimport { FORMAT_AS_HECTARE_CONFIG } from '../../../constants/formatter';\nimport Image from 'next/image';\nimport { IntlContext } from '../../ContextProvider';\n\nexport interface PortfolioProjectCardProps {\n project: PortfolioProject;\n}\n\nexport const PortfolioProjectCard = ({\n project,\n}: PortfolioProjectCardProps) => {\n const { formatMessage, formatNumber } = useContext(IntlContext);\n\n const creditsAvailableMessages: Record<CreditsAvailableState, string> = {\n [CreditsAvailableState.YES]: formatMessage({\n id: 'components.portfolioProjectCard.text.yes',\n }),\n\n [CreditsAvailableState.SOME]: formatMessage({\n id: 'components.portfolioProjectCard.text.some',\n }),\n\n [CreditsAvailableState.NO]: formatMessage({\n id: 'components.portfolioProjectCard.text.no',\n }),\n\n [CreditsAvailableState.NOT_YET]: formatMessage({\n id: 'components.portfolioProjectCard.text.notYet',\n }),\n };\n\n return (\n <ProjectCard\n title={project.title}\n facts={[\n {\n id: 1,\n text: formatNumber(\n (project.area || 0) / 10000,\n FORMAT_AS_HECTARE_CONFIG\n ),\n },\n { id: 2, text: project.location || '' },\n ]}\n footerTitle={\n creditsAvailableMessages[\n project.creditsAvailable ?? CreditsAvailableState.NOT_YET\n ]\n }\n footerSubTitle={project.footerSubTitle || ''}\n image={\n project.thumbnail && (\n <Image\n src={strapiMediaUrl(project.thumbnail?.img, 'medium')}\n alt={project.thumbnail?.alt}\n fill\n style={{\n objectFit: project.thumbnail?.objectFit || 'cover',\n }}\n />\n )\n }\n />\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 PortfolioProjectCard from '../../components/portfolio/PortfolioProjectCard';\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 && <PortfolioProjectCard 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 && (\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\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 PortfolioProjectCard from '../../components/portfolio/PortfolioProjectCard';\nimport { IStrapi, IStrapiData, StrapiProject } from '../..';\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={`/portfolio/${project.slug}`}\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 width=\"fit-content\"\n height=\"fit-content\"\n transition={`box-shadow ease ${MEDIUM_TRANSITION_DURATION}s`}\n _hover={{ boxShadow: 'lg' }}\n >\n <PortfolioProjectCard project={project} />\n </Box>\n </ConditionalWrapper>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport { FONT_CUSTOMIZATIONS } from '../../constants/fontCustomizations';\nimport rootMessagesDe from '../../rootMessages.de';\nimport rootMessagesEn from '../../rootMessages.en';\nimport { BoemlyThemeProvider } from 'boemly';\nimport { IntlProvider } from 'react-intl';\n\nconst messages = {\n en: rootMessagesEn,\n de: rootMessagesDe,\n};\n\ninterface MinimalProvidersProps {\n locale: string;\n children: JSX.Element | JSX.Element[];\n}\n\nconst MinimalProviders = ({ children, locale }: MinimalProvidersProps) => (\n <IntlProvider messages={messages[locale as 'en' | 'de']} 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 CreditsAvailableState from '../../models/CreditsAvailableState';\nimport { Badge } from 'boemly';\nimport NextLink from 'next/link';\nimport { IntlContext } from '../ContextProvider';\n\nexport interface CreditsAvailableBadgeProps {\n status: CreditsAvailableState;\n href?: string;\n}\n\nconst CreditsAvailableBadge = ({\n status,\n href,\n}: CreditsAvailableBadgeProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n const variants: Record<\n CreditsAvailableState,\n { color: string; text: string }\n > = {\n [CreditsAvailableState.YES]: {\n color: 'green',\n text: formatMessage({ id: 'components.creditsAvailableBadge.text.yes' }),\n },\n [CreditsAvailableState.SOME]: {\n color: 'orange',\n text: formatMessage({ id: 'components.creditsAvailableBadge.text.some' }),\n },\n [CreditsAvailableState.NO]: {\n color: 'red',\n text: formatMessage({ id: 'components.creditsAvailableBadge.text.no' }),\n },\n [CreditsAvailableState.NOT_YET]: {\n color: 'blue',\n text: formatMessage({\n id: 'components.creditsAvailableBadge.text.notYet',\n }),\n },\n };\n\n const variant = variants[status];\n\n return (\n <Badge\n as={href ? NextLink : undefined}\n href={href}\n colorScheme={variant.color}\n width=\"fit-content\"\n >\n {variant.text}\n </Badge>\n );\n};\n\nexport default CreditsAvailableBadge;\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 CreditsAvailableState from '../../models/CreditsAvailableState';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface MapMarkerProps {\n title: string;\n isPublic?: boolean;\n projectDeveloper?: string;\n slug?: string;\n creditsAvailable?: CreditsAvailableState;\n}\n\nconst MapMarker = ({\n title,\n projectDeveloper,\n slug,\n creditsAvailable,\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 as={slug ? NextLink : undefined} href={slug && `/portfolio/${slug}`}>\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 {creditsAvailable && (\n <>\n <CreditsAvailableBadge\n status={creditsAvailable}\n href={slug && `/portfolio/${slug}`}\n />\n <Box height=\"3\" />\n </>\n )}\n\n <Heading size=\"md\">{title}</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={`/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 slug={project.slug}\n creditsAvailable={project.creditsAvailable}\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 },\n centerWithoutImage: {\n textAlign: 'center',\n paddingTagline: '28',\n paddingTitle: '20',\n justifyContent: 'center',\n buttonJustifyContent: 'center',\n textMarginLeft: '0',\n },\n centerWithImage: {\n textAlign: 'center',\n paddingTagline: '28',\n paddingTitle: '20',\n justifyContent: 'center',\n buttonJustifyContent: 'center',\n textMarginLeft: '0',\n },\n right: {\n textAlign: 'left',\n paddingTagline: '0',\n paddingTitle: '0',\n justifyContent: 'start',\n buttonJustifyContent: 'start',\n textMarginLeft: '0',\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 >\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 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: 'Inter',\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 ButtonsContainerProps {\n show: string;\n}\nexport const ButtonsContainer = styled(Box)<ButtonsContainerProps>`\n display: ${({ show }: ButtonsContainerProps) => (show ? 'flex' : 'none')};\n pointer-events: none;\n\n // Place at 50% of height of tallest image minus size of button\n position: absolute;\n top: calc(50% - var(--boemly-sizes-12));\n left: 0;\n width: var(--boemly-sizes-full);\n\n padding: 0 var(--boemly-sizes-32);\n justify-content: space-between;\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n display: none;\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];\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, { 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 ButtonsContainer,\n ItemContainer,\n SliderContainer,\n SliderInnerContainer,\n ImageContainer,\n} from './styles';\nimport { getClosestRatio } from './utils';\n\nexport interface FullWidthImageSliderProps {\n slice: {\n images: {\n id: number;\n caption: string;\n img: StrapiImage;\n }[];\n };\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 allowScroll = windowWidth / 2 / imageWidth < slice.images.length;\n const canMoveRight = sliderIndex < slice.images.length - 1;\n const canMoveLeft = sliderIndex !== 0;\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 <Text height=\"6\">{image.caption}</Text>\n </Flex>\n </ItemContainer>\n ))}\n </SliderInnerContainer>\n </SliderContainer>\n\n <ButtonsContainer show={(allowScroll && !isOpen).toString()}>\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 </ButtonsContainer>\n\n <FullScreenImage\n images={slice.images.map((image) => image.img)}\n openIndex={sliderIndex}\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 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 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\">{item.text}</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 { useRouter } from 'next/router';\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';\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 };\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 url = new URL(`${FPM_API_URI}/v1/webhooks/shop/checkout`);\n\n url.searchParams.append('batchId', slice.batchId);\n\n url.searchParams.append(\n 'quantity',\n Math.floor(contributionValue / slice.pricePerKg).toString()\n );\n\n if (slice.couponId) url.searchParams.append('couponId', slice.couponId);\n\n push(url.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 />\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 <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(values.contributionValue / slice.pricePerKg),\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(\n Math.floor(\n values.contributionValue / slice.pricePerKg\n ) * slice.pricePerKg,\n {\n style: 'currency',\n currency: slice.currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\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 </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 = 60_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=\"GintoNord\"\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>>;\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\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';\n\nexport interface SmallCheckoutProps {\n batchId: string;\n pricePerKg: number;\n initialContributionValue: number;\n checkoutText?: string;\n currency: 'EUR' | 'CHF';\n\n title?: string;\n subtitle?: string;\n button?: StrapiLink;\n}\n\ninterface SmallCheckoutForm {\n contributionValueCurrency: number;\n contributionValueKgs: number;\n}\n\nconst SmallCheckout = ({\n pricePerKg,\n currency,\n batchId,\n initialContributionValue,\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\n if (!values.contributionValueCurrency) {\n errors.contributionValueCurrency = formatMessage({\n id: 'portfolio.smallCheckout.contributionValueCurrency.validation.empty',\n });\n } else if (\n values.contributionValueCurrency < MINIMUM_CONTRIBUTION_VALUE_IN_MONEY\n ) {\n errors.contributionValueCurrency = formatMessage({\n id: `portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.${currency}`,\n });\n } else if (\n values.contributionValueCurrency > MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY\n ) {\n errors.contributionValueCurrency = formatMessage({\n id: 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh',\n });\n }\n\n return errors;\n },\n [locale]\n );\n\n const onSubmit = async ({ contributionValueCurrency }: SmallCheckoutForm) =>\n push(\n `${FPM_API_URI}/v1/webhooks/shop/checkout?batchId=${batchId}&quantity=${Math.floor(\n contributionValueCurrency / pricePerKg\n )}`\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=\"1\" 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 </Flex>\n\n <Formik\n initialValues={{\n contributionValueCurrency: initialContributionValue,\n contributionValueKgs: initialContributionValue / pricePerKg / 1000,\n }}\n validate={validateForm}\n onSubmit={onSubmit}\n >\n {({\n errors,\n touched,\n handleSubmit,\n setValues,\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 // valueAsNumber might be NaN\n const value = e.target.valueAsNumber || 0;\n\n setValues({\n contributionValueCurrency: value,\n contributionValueKgs: value / pricePerKg / 1000,\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=\"contributionValueKgs\">\n {({ field }: FieldProps) => (\n <BoemlyFormControl\n id=\"contributionValueKgs\"\n size=\"md\"\n inputProps={{\n type: 'number',\n value: field.value,\n onChange: (e) => {\n const value = e.target.valueAsNumber || 0;\n\n setValues({\n contributionValueCurrency:\n value * pricePerKg * 1000,\n contributionValueKgs: value,\n });\n },\n }}\n label={formatMessage({\n id: 'portfolio.smallCheckout.contributionValueKgs.label',\n })}\n rightAddonsOrElements={[\n <InputRightAddon key=\"tCO₂\">tCO₂</InputRightAddon>,\n ]}\n isInvalid={\n !!errors.contributionValueKgs &&\n touched.contributionValueKgs\n }\n errorMessage={errors.contributionValueKgs}\n />\n )}\n </Field>\n </Box>\n </Flex>\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 id: 1,\n intercomLauncher: true,\n text: button.text,\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} 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 <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\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 {project.creditsAvailable ? (\n <Box mt=\"2\">\n <CreditsAvailableBadge status={project.creditsAvailable} />\n </Box>\n ) : (\n <></>\n )}\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 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 />\n ) : (\n (slice.contactTitle ||\n slice.contactText ||\n slice.contactButton ||\n slice.contactAvatar) && (\n <Contact\n title={slice.contactTitle}\n text={slice.contactText}\n button={slice.contactButton}\n avatar={slice.contactAvatar}\n />\n )\n )}\n </Flex>\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React, { useContext } from 'react';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport StrapiCustomerStory from '../../models/strapi/StrapiCustomerStory';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport {\n Box,\n Button,\n Center,\n Container,\n DefaultSectionContainer,\n Heading,\n SimpleGrid,\n Text,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport Link from 'next/link';\nimport { IntlContext } from '../../components/ContextProvider';\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 const { formatMessage } = useContext(IntlContext);\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2]} spacingX={56} spacingY={24}>\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 <Container padding=\"none\" key={customerStory.id}>\n <Center\n height=\"24\"\n backgroundColor=\"primary.50\"\n borderTopRadius=\"xl\"\n >\n <Box position=\"relative\" height=\"12\" width=\"12\">\n <Image\n src={strapiMediaUrl(\n customerStory.attributes.customerLogo.img,\n 'medium'\n )}\n alt={customerStory.attributes.customerLogo.alt}\n fill\n style={{\n objectFit:\n customerStory.attributes.customerLogo.objectFit,\n }}\n />\n </Box>\n </Center>\n <Box px=\"6\" pt=\"12\" pb=\"6\">\n <Text size=\"xsMonoUppercase\" color=\"gray.500\" mb=\"2\">\n {customerStory.attributes.customerIndustry}\n </Text>\n <Heading size=\"xl\">{customerStory.attributes.title}</Heading>\n <Button\n as={Link}\n href={`/customer-stories/${customerStory.attributes.slug}`}\n variant=\"outline\"\n size=\"sm\"\n mt=\"12\"\n >\n {formatMessage({ id: 'sections.customerStories.more' })}\n </Button>\n </Box>\n </Container>\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 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 Locale from '../../models/Locale';\nimport { ContextProvider } from '../ContextProvider';\n\nexport interface CustomSliceProps {\n slice: any;\n id: string;\n}\n\nexport interface SliceRendererProps {\n slices: any;\n blogPosts: IStrapiData<StrapiBlogPost>[];\n projects: PortfolioProject[];\n customerStories: IStrapiData<StrapiCustomerStory>[];\n locale?: Locale;\n CustomSlice?: ({ slice, id }: CustomSliceProps) => JSX.Element;\n}\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 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';\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 return {\n ...post,\n // Portfolio Projects\n 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: blog,\n banner: global.attributes.banner,\n topBanner: post?.attributes.topBanner || global.attributes.topBanner,\n customerStories: [],\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';\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 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,\n banner: global.attributes.banner,\n topBanner:\n customerStory?.attributes.topBanner || global.attributes.topBanner,\n blogPosts: [],\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} from '../constants/sectionsConfig';\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 return {\n ...page,\n // Portfolio Projects\n 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,\n banner: global.attributes.banner,\n topBanner: page?.attributes.topBanner || global.attributes.topBanner,\n customerStories,\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} from '../constants/sectionsConfig';\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 return {\n ...project,\n // Portfolio Projects\n 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,\n banner: global.attributes.banner,\n topBanner: project?.attributes.topBanner || global.attributes.topBanner,\n customerStories: [],\n };\n};\n\nexport default mergeGlobalAndStrapiProject;\n"],"names":["STRAPI_URI","process","env","NEXT_PUBLIC_STRAPI_URI","strapiMediaUrl","media","preferredSize","_media$data$attribute","url","data","attributes","ext","formats","indexOf","includes","STORYBOOK","DEFAULT_SHARE_IMAGE","DEFAULT_SHARE_ALT","EXTENDABLE_HEADER_SECTIONS","DARK_THEME_HEADER_SECTIONS","strapiLinkUrl","strapiLink","_strapiLink","_strapiLink2","undefined","page","slug","ZoomableImage","_ref","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","default","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","openIndex","imageIndex","setImageIndex","containerRef","useRef","useLockBodyScroll","canMoveRight","length","canMoveLeft","onRight","p","onLeft","useKey","useEffect","current","scrollTo","left","clientWidth","behavior","BoemlyModal","title","trigger","size","content","Flex","insetY","insetX","alignItems","justifyContent","ref","flexGrow","flexBasis","gap","marginX","scrollSnapType","map","key","id","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","_extends","intercomLauncher","Link","Hero","minHeight","backgroundColor","overflowX","Gradient","shape","bottom","borderTopRightRadius","right","top","transform","subTitle","color","mx","button","additionalButtons","IconGrid","flexDirection","Spacer","h","SimpleGrid","columns","rowGap","iconsWithTextAndButton","iconWithTextAndButton","margin","Heading","mb","Text","LinkedInIcon","viewBox","xmlns","clipPath","d","StrapiLinkButtonWithIcon","props","rightIcon","destination","Globe","getLinkIcon","ImageGrid","_useToken","useToken","minChildWidth","_ref2","links","flexDir","flexWrap","ShapePosition","FPM_API_URI","NEXT_PUBLIC_FPM_API_URI","CDN_URI","ImageTextSequence","oneColumnGrid","primary50","gray700","background","imageTextRows","index","imageBox","LeftTextRightCard","push","useRouter","Grid","templateColumns","templateRows","GridItem","colSpan","rowSpan","pr","checkMarkLabels","BoemlyList","listItems","colorScheme","ArrowRight","card","PortfolioCard","_slice$card","facts","portfolioNumber","LogoGridWithText","RichText","logos","logo","MapHeroContainer","styled","_templateObject","_taggedTemplateLiteralLoose","MapHeroTextContainer","_templateObject2","ShapeContainer","_templateObject3","MapContainer","_templateObject4","MapGradient","_templateObject5","MapHero","belowBreakpoint","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","maxWidth","QuoteCard","avatar","name","description","marginTop","RichTextSection","Steps","_slice$card$shapes","gray900","Array","steps","stepRefs","setStepRefs","stepProgress","setStepProgress","offsetY","useWindowScroll","windowHeight","useWindowSize","createRef","_containerRef$current","containerOffsetTop","offsetTop","_ref$current","currentItemOffsetTop","Center","step","options","forceBlock","marginBottom","borderLeft","opacity","borderRight","transition","ShapesCard","CreditsAvailableState","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","_ref3","TextCarousel","drag","dragConstraints","slides","TextCardWithIcon","displayAs","TextWithTextCards","contact","ContactArea","_slice$contact","_slice$contact2","MapBoxStyle","CreditsAvailableState$1","FORMAT_AS_HECTARE_CONFIG","unit","unitDisplay","maximumFractionDigits","FORMAT_AS_PERCENT_CONFIG","unitMessagesEn","rootMessagesDe","unitMessagesDe","rootMessagesEn","GLOBAL_STYLE","FONT_CUSTOMIZATIONS","body","heading","mono","cache","createIntlCache","intlFactory","locale","createIntl","messages","de","en","IntlContext","createContext","ContextProvider","children","BoemlyThemeProvider","fonts","Global","styles","Provider","value","PortfolioProjectCard","_creditsAvailableMess","_project$creditsAvail","_project$thumbnail","_project$thumbnail2","_project$thumbnail3","project","_useContext","useContext","formatMessage","formatNumber","creditsAvailableMessages","YES","SOME","NO","NOT_YET","ProjectCard","area","location","footerTitle","creditsAvailable","footerSubTitle","thumbnail","TextWithCard","portfolioProject","projects","find","_slice$project","fpmProjectId","cardPosition","columnGap","LinkCardsGrid","px","py","borderStyle","borderWidth","borderColor","transitionDuration","MEDIUM_TRANSITION_DURATION","_hover","minWidth","colors","dark","light","SmallHero","theme","gradient","tags","direction","justify","wrap","Tag","BlogItemContainer","ImageContainer","Blog","blogPosts","formatDate","sortedBlogPosts","blog_posts","sort","a","b","Date","createdAt","getTime","spacingX","spacingY","blogPost","bp","category","teaser","DatePersonPair","date","person","author","ConditionalWrapper","condition","wrapper","ProjectsGrid","filteredProjects","filter","fpmProject","some","strapiProject","passHref","legacyBehavior","MinimalProviders","IntlProvider","CreditsAvailableBadge","_variants","status","Badge","NextLink","MapMarker","projectDeveloper","_ref$isPublic","isPublic","_useDisclosure","useDisclosure","onOpen","blue600","onMouseEnter","onMouseLeave","MapPin","Container","shadow","whiteSpace","mapboxStyle","mapboxgl","accessToken","CtaCardType","ProjectsMap","boundingBoxes","minLeft","minBottom","maxRight","maxTop","geom","center","defaultCenterCoordinates","longitude","latitude","bounds","concat","coordinates","c","forEach","mapContainer","Map","container","CaliTerrain","defaultZoomLevel","maxZoom","_project$projectDevel","document","createRoot","render","marker","Marker","offset","setLngLat","addTo","remove","Video","_useMeasure","useMeasure","youTubeID","frameBorder","allow","allowFullScreen","FullWidthHighlightQuote","quote","AvatarWithName","avatarWithName","orientation","SliderContainer","ButtonsContainer","show","SliderInnerContainer","ItemContainer","aspectRatio","ALLOWED_RATIOS","FullWidthImageSlider","imageRef","imageWidth","windowWidth","sliderIndex","setSliderIndex","allowScroll","animate","duration","ease","imageCount","ratio","minDiff","Math","abs","posMinDiff","allowedRatio","caption","toString","AnimatePresence","initial","exit","ArrowLeft","SideBySideImages","STATES","paddingTagline","paddingTitle","buttonJustifyContent","textMarginLeft","centerWithoutImage","centerWithImage","taglineColor","titleColor","subTitleColor","Cta","ctaCards","ctaCard","ctaCardType","CenterWithImage","CenterWithoutImage","Left","Right","getTypeOfCard","elevation","backgroundShape","marginLeft","paddingX","fontFamily","fontSize","fontWeight","lineHeight","CtaOnly","Glossary","copyToClipboard","useCopyToClipboard","grouped","copiedItem","setCopiedItem","glossary_items","localeCompare","curr","_curr$attributes$titl","at","toUpperCase","handleAnchorClick","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_window","currentUrl","_context","prev","next","split","setTimeout","stop","_x","apply","this","arguments","Object","entries","letter","items","placeSelf","spacing","item","scrollMarginTop","Check","LinkIcon","_onClick","_callee2","_context2","abrupt","keys","Divider","ShopCheckout","validateForm","useCallback","values","errors","contributionValue","currency","marginRight","badge","textTransform","checkoutText","LabelNumberPair","label","number","pricePerKg","Formik","initialValues","initialContributionValue","validate","onSubmit","URL","searchParams","append","batchId","floor","couponId","touched","Form","handleSubmit","Field","_ref4","BoemlyFormControl","inputProps","type","field","rightAddonsOrElements","InputRightAddon","isInvalid","errorMessage","minimumFractionDigits","factKeyColor","factValueColor","Facts","fact","sortByCreatedAt","BlogCards","mobile","useMemo","blogPostsToDisplay","_slice$blogPostCatego","blogPostCategory","_blogPost$attributes$","_slice$blogPostCatego2","SmallCheckout","subtitle","contributionValueCurrency","contributionValueKgs","setValues","_ref5","onChange","target","valueAsNumber","_ref6","my","ProjectInfo","amount","start","end","monthsDifference","yearsDifference","areaInM2","subtitles","LabelTextPair","parseInt","areaSubtitle","locationSubtitle","year","month","startSubtitle","years","getMonth","getFullYear","timeSpanSubtitle","projectType","verificationStandard","projectTypeSubtitle","projectDeveloperSubtitle","defaultMessage","verificationStandardSubtitle","defaultIssuer","logoUrl","forecastedAmountYearly","riskBuffer","forecastedAmountSubtitle","riskBufferSubtitle","DocumentsDownloadList","documentUrls","documentUrl","FilePdf","DownloadSimple","Contact","border","ProjectFacts","customTitle","customSubtitle","customButton","contactTitle","contactText","contactButton","contactAvatar","CustomerStories","customerStories","customer_stories","customerStory","cs","borderTopRadius","customerLogo","pt","customerIndustry","BULLET_POINT_VARIANTS","bulletPointColor","Icon","X","factColor","dividerColor","Comparison","comparisonCards","comparisonCard","factTitle","factSubtitle","lists","list","_shareImage$url","_shareImage$alt","shareImage","_ref$metaTitleSuffix","metaTitleSuffix","_ref$favicon","favicon","_ref$domain","domain","shareImageUrl","shareImageAlt","property","_ref$locale","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","headerType","extendable","headerNavMenus","navbar","navMenus","headerButtons","footerLinks","footer","banner","topBanner","_customerStory$attrib","_customerStory$attrib2","_customerStory$attrib3","_customerStory$attrib4","_customerStory$attrib5","_customerStory$attrib6","_customerStory$attrib7","_customerStory$attrib8","_customerStory$attrib9","_customerStory$attrib10","_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","_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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"}