@blateral/b.kit 2.3.0-beta.1.2 → 2.3.0-beta.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/Actions-6dd616e0.js +2 -0
- package/cjs/Actions-6dd616e0.js.map +1 -0
- package/cjs/Bdot-d898ba3b.js +2 -0
- package/cjs/Bdot-d898ba3b.js.map +1 -0
- package/cjs/Button-72747f63.js +2 -0
- package/cjs/Button-72747f63.js.map +1 -0
- package/cjs/ButtonGhost-046437c5.js +2 -0
- package/cjs/ButtonGhost-046437c5.js.map +1 -0
- package/cjs/Control-eead1a4c.js +2 -0
- package/cjs/Control-eead1a4c.js.map +1 -0
- package/cjs/FilterField-497e998f.js +2 -0
- package/cjs/{FilterField-569d60e5.js.map → FilterField-497e998f.js.map} +1 -1
- package/cjs/Image-d9681be0.js +2 -0
- package/cjs/Image-d9681be0.js.map +1 -0
- package/cjs/LanguageSwitcher-47e25e95.js +2 -0
- package/cjs/LanguageSwitcher-47e25e95.js.map +1 -0
- package/cjs/Navigation-3f5d6088.js +2 -0
- package/cjs/{Navigation-ebb27a9b.js.map → Navigation-3f5d6088.js.map} +1 -1
- package/cjs/POICard-9911980e.js +2 -0
- package/cjs/POICard-9911980e.js.map +1 -0
- package/cjs/Pointer-3588eadf.js +2 -0
- package/cjs/Pointer-3588eadf.js.map +1 -0
- package/cjs/SocialList-da77e994.js +2 -0
- package/cjs/SocialList-da77e994.js.map +1 -0
- package/cjs/TableBlock-080c9c2e.js +2 -0
- package/cjs/TableBlock-080c9c2e.js.map +1 -0
- package/cjs/VideoCard-1fa209fc.js +2 -0
- package/cjs/VideoCard-1fa209fc.js.map +1 -0
- package/cjs/blocks.js +1 -1
- package/cjs/buttons.js +1 -1
- package/cjs/cookies.js +1 -1
- package/cjs/cookies.js.map +1 -1
- package/cjs/fields.js +1 -1
- package/cjs/fields.js.map +1 -1
- package/cjs/footer.js +2 -0
- package/cjs/footer.js.map +1 -0
- package/cjs/hooks.js +1 -1
- package/cjs/hooks.js.map +1 -1
- package/cjs/navigation.js +1 -1
- package/cjs/navigation.js.map +1 -1
- package/cjs/sections.js +1 -1
- package/cjs/sections.js.map +1 -1
- package/cjs/sections_news.js +2 -0
- package/cjs/sections_news.js.map +1 -0
- package/cjs/statusFormatter-0393122b.js +2 -0
- package/cjs/statusFormatter-0393122b.js.map +1 -0
- package/cjs/{urlParams-51ce7168.js → urlParams-1d03b5a6.js} +2 -2
- package/cjs/urlParams-1d03b5a6.js.map +1 -0
- package/cjs/useIE-aef9decc.js +2 -0
- package/cjs/useIE-aef9decc.js.map +1 -0
- package/esm/Actions-73e13c48.js +57 -0
- package/esm/Actions-73e13c48.js.map +1 -0
- package/esm/Bdot-30b047cc.js +24 -0
- package/esm/Bdot-30b047cc.js.map +1 -0
- package/esm/Button-678be396.js +115 -0
- package/esm/Button-678be396.js.map +1 -0
- package/esm/ButtonGhost-6673a07e.js +112 -0
- package/esm/ButtonGhost-6673a07e.js.map +1 -0
- package/esm/{Callout-03ad4c6e.js → Callout-439308f6.js} +4 -4
- package/esm/{Callout-03ad4c6e.js.map → Callout-439308f6.js.map} +1 -1
- package/esm/{Checkbox-76c2576b.js → Checkbox-a365d733.js} +5 -5
- package/esm/{Checkbox-76c2576b.js.map → Checkbox-a365d733.js.map} +1 -1
- package/esm/{ClockFilled-cff5900e.js → ClockFilled-8784ddac.js} +2 -2
- package/esm/{ClockFilled-cff5900e.js.map → ClockFilled-8784ddac.js.map} +1 -1
- package/esm/Control-e61c9395.js +52 -0
- package/esm/Control-e61c9395.js.map +1 -0
- package/esm/{Copy-d2be4fb7.js → Copy-3444d005.js} +4 -4
- package/esm/{Copy-d2be4fb7.js.map → Copy-3444d005.js.map} +1 -1
- package/esm/{FilterField-b1a28df7.js → FilterField-f423b4d1.js} +8 -7
- package/esm/{FilterField-b1a28df7.js.map → FilterField-f423b4d1.js.map} +1 -1
- package/esm/Image-82417953.js +193 -0
- package/esm/Image-82417953.js.map +1 -0
- package/esm/LanguageSwitcher-a53094d3.js +70 -0
- package/esm/LanguageSwitcher-a53094d3.js.map +1 -0
- package/esm/{LibThemeProvider-17012395.js → LibThemeProvider-90a5375f.js} +3 -3
- package/esm/{LibThemeProvider-17012395.js.map → LibThemeProvider-90a5375f.js.map} +1 -1
- package/esm/{Link-42f0b80f.js → Link-ee8a48ed.js} +3 -3
- package/esm/{Link-42f0b80f.js.map → Link-ee8a48ed.js.map} +1 -1
- package/esm/{Navigation-fae92776.js → Navigation-ece0ff0d.js} +10 -9
- package/esm/{Navigation-fae92776.js.map → Navigation-ece0ff0d.js.map} +1 -1
- package/esm/{Bdot-a103eeef.js → POICard-d8832988.js} +56 -280
- package/esm/POICard-d8832988.js.map +1 -0
- package/esm/Pointer-da4d0977.js +111 -0
- package/esm/Pointer-da4d0977.js.map +1 -0
- package/esm/SocialList-7c00c70e.js +61 -0
- package/esm/SocialList-7c00c70e.js.map +1 -0
- package/esm/TableBlock-0bbde956.js +218 -0
- package/esm/TableBlock-0bbde956.js.map +1 -0
- package/esm/VideoCard-2557407b.js +187 -0
- package/esm/VideoCard-2557407b.js.map +1 -0
- package/esm/{Wrapper-38c912a6.js → Wrapper-f4a70e30.js} +3 -3
- package/esm/{Wrapper-38c912a6.js.map → Wrapper-f4a70e30.js.map} +1 -1
- package/esm/base.js +3 -3
- package/esm/blocks.js +15 -10
- package/esm/blocks.js.map +1 -1
- package/esm/buttons.js +6 -4
- package/esm/buttons.js.map +1 -1
- package/esm/cookies.js +9 -8
- package/esm/cookies.js.map +1 -1
- package/esm/fields.js +9 -8
- package/esm/fields.js.map +1 -1
- package/esm/footer.js +300 -0
- package/esm/footer.js.map +1 -0
- package/esm/hooks.js +10 -9
- package/esm/hooks.js.map +1 -1
- package/esm/icons.js +1 -1
- package/esm/index.js +3 -3
- package/esm/{navigation-e135836f.js → navigation-49280321.js} +2 -2
- package/esm/{navigation-e135836f.js.map → navigation-49280321.js.map} +1 -1
- package/esm/navigation.js +12 -10
- package/esm/navigation.js.map +1 -1
- package/esm/sections.js +493 -1933
- package/esm/sections.js.map +1 -1
- package/esm/sections_news.js +1018 -0
- package/esm/sections_news.js.map +1 -0
- package/esm/{Actions-59bdbbf7.js → statusFormatter-9be0fbff.js} +2 -57
- package/esm/statusFormatter-9be0fbff.js.map +1 -0
- package/esm/{styles-eca3acc8.js → styles-5f78e59d.js} +2 -2
- package/esm/{styles-eca3acc8.js.map → styles-5f78e59d.js.map} +1 -1
- package/esm/typography.js +6 -6
- package/esm/{urlParams-c16d7370.js → urlParams-882563ce.js} +4 -15
- package/esm/urlParams-882563ce.js.map +1 -0
- package/esm/{useCookieConsent-cd262961.js → useCookieConsent-db86e5cb.js} +2 -2
- package/esm/{useCookieConsent-cd262961.js.map → useCookieConsent-db86e5cb.js.map} +1 -1
- package/esm/{useGeolocation-c99d76bd.js → useGeolocation-c81e3efc.js} +2 -2
- package/esm/{useGeolocation-c99d76bd.js.map → useGeolocation-c81e3efc.js.map} +1 -1
- package/esm/useIE-a9c56989.js +15 -0
- package/esm/useIE-a9c56989.js.map +1 -0
- package/esm/{useMediaQuery-07eee3f4.js → useMediaQuery-43629cbb.js} +2 -2
- package/esm/{useMediaQuery-07eee3f4.js.map → useMediaQuery-43629cbb.js.map} +1 -1
- package/footer/package.json +7 -0
- package/package.json +2 -1
- package/sections/news/package.json +7 -0
- package/types/footer.d.ts +4 -0
- package/types/footer.d.ts.map +1 -0
- package/types/sections.d.ts +0 -13
- package/types/sections.d.ts.map +1 -1
- package/types/sections_news.d.ts +10 -0
- package/types/sections_news.d.ts.map +1 -0
- package/cjs/Actions-487104b2.js +0 -2
- package/cjs/Actions-487104b2.js.map +0 -1
- package/cjs/Bdot-760e0e3a.js +0 -2
- package/cjs/Bdot-760e0e3a.js.map +0 -1
- package/cjs/ButtonGhost-e9644acd.js +0 -2
- package/cjs/ButtonGhost-e9644acd.js.map +0 -1
- package/cjs/Control-23259241.js +0 -2
- package/cjs/Control-23259241.js.map +0 -1
- package/cjs/FilterField-569d60e5.js +0 -2
- package/cjs/Navigation-ebb27a9b.js +0 -2
- package/cjs/SocialList-79ddf9d6.js +0 -2
- package/cjs/SocialList-79ddf9d6.js.map +0 -1
- package/cjs/urlParams-51ce7168.js.map +0 -1
- package/esm/Actions-59bdbbf7.js.map +0 -1
- package/esm/Bdot-a103eeef.js.map +0 -1
- package/esm/ButtonGhost-422fd723.js +0 -220
- package/esm/ButtonGhost-422fd723.js.map +0 -1
- package/esm/Control-52ff8784.js +0 -157
- package/esm/Control-52ff8784.js.map +0 -1
- package/esm/SocialList-385cde53.js +0 -307
- package/esm/SocialList-385cde53.js.map +0 -1
- package/esm/urlParams-c16d7370.js.map +0 -1
package/cjs/sections.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sections.js","sources":["../src/utils/filters.ts","../src/components/sections/Accordion.tsx","../src/utils/structuredData.tsx","../src/components/blocks/Alert.tsx","../src/components/sections/AlertList.tsx","../src/components/sections/Article.tsx","../src/components/sections/CallToAction.tsx","../src/components/sections/CardList.tsx","../src/components/sections/ComparisonSlider.tsx","../src/components/blocks/PromotionCard.tsx","../src/components/sections/CrossPromotion.tsx","../src/components/sections/form/renderer/fieldGroupRenderer.tsx","../src/components/sections/form/validators/fieldValidator.ts","../src/components/sections/form/validators/areaValidator.ts","../src/components/sections/form/validators/selectValidator.ts","../src/components/sections/form/validators/datepickerValidator.ts","../src/components/sections/form/validators/locationValidator.ts","../src/components/sections/form/validators/fieldGroupValidator.ts","../src/components/sections/form/validators/uploadValidator.ts","../src/components/sections/form/DynamicForm.tsx","../src/components/sections/form/renderer/fieldRenderer.tsx","../src/components/sections/form/renderer/areaRenderer.tsx","../src/components/sections/form/renderer/datepickerRenderer.tsx","../src/components/sections/form/renderer/locationRenderer.tsx","../src/components/sections/form/renderer/selectRenderer.tsx","../src/components/sections/form/renderer/uploadRenderer.tsx","../src/components/sections/NewsletterForm.tsx","../src/components/base/icons/Filter.tsx","../src/components/sections/events/EventOverview.tsx","../src/components/sections/events/EventList.tsx","../src/components/sections/events/EventDetail.tsx","../src/components/blocks/Fact.tsx","../src/components/sections/FactGrid.tsx","../src/components/sections/FactList.tsx","../src/components/blocks/Feature.tsx","../src/components/sections/FeatureList.tsx","../src/components/sections/Gallery.tsx","../src/components/sections/header/Header.tsx","../src/components/sections/IconList.tsx","../src/components/sections/IndexList.tsx","../src/components/sections/Intro.tsx","../src/components/sections/Map.tsx","../src/components/blocks/NavBlock.tsx","../src/components/sections/NavList.tsx","../src/components/sections/news/NewsAuthorCard.tsx","../src/components/blocks/NewsCard.tsx","../src/components/sections/news/NewsOverview.tsx","../src/components/sections/news/NewsFooter.tsx","../src/components/sections/news/NewsImages.tsx","../src/components/sections/news/NewsIntro.tsx","../src/components/sections/news/NewsList.tsx","../src/components/sections/news/NewsTable.tsx","../src/components/sections/news/NewsText.tsx","../src/components/blocks/VideoCard.tsx","../src/components/sections/news/NewsVideo.tsx","../src/components/sections/NumberList.tsx","../src/components/sections/ParallaxBackground.tsx","../src/components/sections/Poster.tsx","../src/components/sections/PriceList.tsx","../src/components/blocks/PriceTag.tsx","../src/components/sections/PriceTable.tsx","../src/components/sections/Quote.tsx","../src/components/sections/SimpleImage.tsx","../src/components/sections/SocialWall.tsx","../src/components/sections/Table.tsx","../src/components/sections/Teaser.tsx","../src/components/sections/TeaserWide.tsx","../src/components/sections/Timeline.tsx","../src/components/sections/Video.tsx","../src/components/sections/RawVideo.tsx","../src/components/blocks/JobCard.tsx","../src/utils/escape.ts","../src/components/sections/jobs/JobList.tsx","../src/components/sections/jobs/JobArticle.tsx","../src/components/sections/pois/PointOfInterestDetail.tsx","../src/components/sections/pois/PointOfInterestOverview.tsx","../src/components/sections/pois/PointOfInterestMap.tsx","../src/components/sections/footer/skeletons/FooterBottomGrid.tsx","../src/components/sections/footer/partials/FooterBottomBar.tsx","../src/components/sections/footer/Footer.tsx","../src/components/sections/footer/skeletons/FooterArticle.tsx","../src/components/sections/footer/partials/FooterColumn.tsx"],"sourcesContent":["export const distinct = <T>(value: T, index: number, array: T[]) => {\n return array.indexOf(value) === index;\n};\n","import Plus from 'components/base/icons/Plus';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport React from 'react';\nimport styled from 'styled-components';\nimport { spacings, getColors as color, mq } from 'utils/styles';\nimport Minus from 'components/base/icons/Minus';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { generateFAQ } from 'utils/structuredData';\nimport Grid, { gridSettings } from 'components/base/Grid';\n\nconst AccordionContainer = styled.div`\n margin: 0;\n padding: 0;\n\n & > * + * {\n margin-top: ${spacings.nudge}px;\n }\n`;\n\nconst View = styled.details``;\n\nconst AccordionHead = styled.summary<{\n isInverted?: boolean;\n hasBg?: boolean;\n}>`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n\n padding: ${spacings.nudge * 2}px;\n margin: 0;\n border: none;\n outline: none;\n background: none;\n user-select: none;\n list-style: none;\n\n background: ${({ isInverted, hasBg, theme }) =>\n isInverted || hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n\n cursor: pointer;\n transition: background 0.2s ease-in-out;\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 3}px;\n }\n\n &::-webkit-details-marker {\n display: none;\n }\n\n &::marker {\n display: none;\n }\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n background: ${({ theme, isInverted, hasBg }) =>\n isInverted || hasBg\n ? color(theme).elementBg.lightHover\n : color(theme).elementBg.mediumHover};\n }\n }\n\n &:focus {\n background: ${({ theme, isInverted, hasBg }) =>\n isInverted || hasBg\n ? color(theme).elementBg.lightHover\n : color(theme).elementBg.mediumHover};\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n }\n`;\n\nconst Column = styled(Copy)`\n flex: 1 1 0;\n`;\n\nconst AccordionText = styled.div<{\n isInverted?: boolean;\n hasBg?: boolean;\n hasAside?: boolean;\n}>`\n display: flex;\n flex-direction: column;\n padding: ${spacings.nudge * 2}px;\n margin-top: 2px;\n background: ${({ isInverted, hasBg, theme }) =>\n isInverted || hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n\n & > * {\n max-width: 880px;\n }\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n flex-direction: row;\n\n & > * + * {\n margin-top: 0px;\n margin-left: ${gridSettings.gutter}px;\n }\n }\n`;\n\ninterface AccordionItem {\n label?: string;\n text?: string;\n aside?: string;\n}\n\nconst AccordionBlock: React.FC<\n AccordionItem & {\n isSelected?: boolean;\n onClick?: () => void;\n isInverted?: boolean;\n hasBg?: boolean;\n itemIcon?: (props: { isSelected: boolean }) => React.ReactNode;\n className?: string;\n }\n> = ({\n label,\n text,\n aside,\n isSelected,\n onClick,\n hasBg,\n isInverted,\n itemIcon,\n className,\n}) => {\n const { colors } = useLibTheme();\n\n return (\n <View open={isSelected} onToggle={onClick} className={className}>\n <AccordionHead isInverted={isInverted} hasBg={hasBg}>\n <Copy renderAs=\"span\" size=\"big\" type=\"copy-b\">\n {label}\n </Copy>\n <span>\n {itemIcon ? (\n itemIcon({ isSelected: isSelected || false })\n ) : isSelected ? (\n <Minus iconColor={colors.text.default} />\n ) : (\n <Plus iconColor={colors.text.default} />\n )}\n </span>\n </AccordionHead>\n <AccordionText\n isInverted={isInverted}\n hasBg={hasBg}\n hasAside={!!aside}\n >\n {text && <Column type=\"copy\" innerHTML={text} />}\n {aside && <Column type=\"copy\" innerHTML={aside} />}\n </AccordionText>\n </View>\n );\n};\n\nconst Accordion: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of accordion items */\n items?: AccordionItem[];\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Function to inject custom item state icon */\n itemIcon?: (props: { isSelected: boolean }) => React.ReactNode;\n}> = ({ anchorId, items, bgMode, itemIcon }) => {\n const [currentItems, setCurrentItems] = React.useState<number[]>([]);\n\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n {items && generateFAQ(items)}\n <Wrapper addWhitespace>\n <Grid.Row gutter={0}>\n <Grid.Col>\n <AccordionContainer aria-label=\"Accordion Control Group Buttons\">\n {items?.map(({ label, text, aside }, i) => {\n const isSelected =\n currentItems.indexOf(i) !== -1;\n return (\n <AccordionBlock\n key={`${label}_${i}`}\n isSelected={isSelected}\n label={label}\n text={text}\n aside={aside}\n onClick={() => {\n setCurrentItems((prev) => {\n const copy = [...prev];\n const index = copy.indexOf(i);\n if (index === -1) {\n copy.push(i);\n } else {\n copy.splice(index, 1);\n }\n return copy;\n });\n }}\n isInverted={isInverted}\n hasBg={hasBg}\n itemIcon={itemIcon}\n />\n );\n })}\n </AccordionContainer>\n </Grid.Col>\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const AccordionComponent = Accordion;\nexport default withLibTheme(Accordion);\n","import React from 'react';\nimport { JsonLd } from 'react-schemaorg';\nimport { MapLocation } from 'components/sections/Map';\nimport { FAQPage, JobPosting, LocalBusiness, Place } from 'schema-dts';\nimport { OrganizationData } from 'components/sections/jobs/JobArticle';\nimport { distinct } from './filters';\nimport { JobLocation } from 'components/blocks/JobCard';\n\nexport const generateLocalBusiness = (locations: MapLocation[]) => {\n return locations?.map(\n ({ position, address, contact, companyName, image }, i) => {\n if (!companyName) return '';\n return (\n <JsonLd<LocalBusiness>\n key={i}\n item={{\n '@context': 'https://schema.org',\n '@type': 'LocalBusiness',\n name: companyName,\n\n geo: {\n '@type': 'GeoCoordinates',\n name: 'Coordinates',\n latitude: position[0],\n longitude: position[1],\n },\n\n address: {\n '@type': 'PostalAddress',\n streetAddress: address?.street,\n addressLocality: address?.city,\n addressRegion: address?.city,\n postalCode: address?.postalCode,\n addressCountry: address?.country,\n },\n\n image: image || [],\n\n telephone: `${contact?.telephone?.label}`,\n\n email: `${contact?.email?.label}`,\n }}\n />\n );\n }\n );\n};\n\nexport const generateFAQ = (\n items: {\n label?: string;\n text?: string;\n aside?: string;\n hasColumns?: boolean;\n }[]\n) => {\n return (\n <JsonLd<FAQPage>\n item={{\n '@context': 'https://schema.org',\n '@type': 'FAQPage',\n mainEntity: items.map(({ label, text }) => {\n return {\n '@type': 'Question',\n name: label,\n acceptedAnswer: {\n '@type': 'Answer',\n text: text,\n },\n };\n }),\n }}\n />\n );\n};\n\nexport type StructuredEmploymentType =\n | 'FULL_TIME'\n | 'PART_TIME'\n | 'CONTRACTOR'\n | 'TEMPORARY'\n | 'INTERN'\n | 'VOLUNTEER'\n | 'PER_DIEM'\n | 'OTHER';\n\nexport const generateJob = ({\n jobTitle,\n jobDesc,\n organization,\n directApply,\n locations,\n employmentTypes,\n datePosted,\n}: {\n jobTitle: string;\n jobDesc?: string;\n organization?: OrganizationData;\n directApply?: boolean;\n locations?: JobLocation[];\n employmentTypes?: StructuredEmploymentType[];\n datePosted?: Date;\n}) => {\n return (\n <JsonLd<JobPosting>\n item={{\n '@context': 'https://schema.org',\n '@type': 'JobPosting',\n title: jobTitle,\n description: jobDesc,\n datePosted: datePosted?.toISOString(),\n employmentType: employmentTypes?.filter(distinct),\n hiringOrganization: {\n '@type': 'Organization',\n name: organization?.name,\n url: organization?.url\n ? encodeURIComponent(organization?.url)\n : '',\n logo: organization?.logo,\n telephone: organization?.telephone,\n email: organization?.email,\n address: organization?.address?.streetAddress\n ? {\n '@type': 'PostalAddress',\n streetAddress:\n organization?.address?.streetAddress,\n addressLocality:\n organization?.address?.addressLocality,\n postalCode: organization?.address?.postalCode,\n addressCountry:\n organization?.address?.addressCountry,\n }\n : undefined,\n },\n jobLocation: locations?.map<Place>((loc) => ({\n '@type': 'Place',\n address: {\n '@type': 'PostalAddress',\n addressLocality: loc.addressLocality || loc.name,\n streetAddress: loc.streetAddress,\n addressRegion: loc.addressRegion,\n postalCode: loc.postalCode,\n addressCountry: loc.addressCountry,\n },\n })),\n directApply: directApply,\n }}\n />\n );\n};\n","import Copy from 'components/typography/Copy';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport React from 'react';\nimport styled from 'styled-components';\nimport {\n getColors as color,\n getGlobals as global,\n spacings,\n} from 'utils/styles';\nimport StatusFormatter from '../../utils/statusFormatter';\nimport Info from '../base/icons/Info';\n\nconst View = styled.div<{ isInverted?: boolean }>`\n display: -ms-grid;\n display: grid;\n\n -ms-grid-columns: min-content 1fr;\n grid-template-columns: min-content 1fr;\n -ms-grid-rows: min-content 1fr;\n grid-auto-rows: min-content 1fr;\n\n text-decoration: none;\n\n position: relative;\n border: 2px solid\n ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n\n color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n\n padding: ${spacings.nudge * 3}px;\n\n text-align: left;\n width: 100%;\n cursor: pointer;\n\n transition: color ease-in-out 0.2s, border 0.2s ease-in-out;\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n border: 2px solid\n ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.invertedHover\n : color(theme).primary.hover};\n color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.invertedHover\n : color(theme).primary.hover};\n }\n }\n`;\n\nconst Icon = styled.div`\n display: flex;\n align-items: center;\n\n & > * {\n height: 48px;\n width: 48px;\n }\n`;\n\nconst MainLabel = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst Content = styled.div`\n margin-top: ${spacings.nudge}px;\n\n & > * + * {\n margin-top: ${spacings.nudge}px;\n }\n`;\n\nconst Title = styled(Copy)`\n display: inline-block;\n`;\n\nconst ViewLink = styled(Link)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n && {\n margin: 0;\n }\n\n &:focus-within {\n outline: dotted 2px\n ${({ isInverted, theme }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n outline-offset: 4px;\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n box-shadow: none;\n }\n`;\n\nexport interface AlertProps {\n /** Invert colors for use on dark backgrounds */\n isInverted?: boolean;\n\n /** Alert title text */\n title?: string;\n\n /** Alert date */\n date?: Date;\n\n /** Additional description text (richtext) */\n description?: string;\n\n /** Alert link that covers hole element */\n link?: LinkProps;\n\n /** Function to inject custom alert icon */\n customIcon?: (props: { isInverted?: boolean }) => React.ReactNode;\n}\n\nconst Alert: React.FC<AlertProps & { className?: string }> = ({\n isInverted,\n title,\n date,\n description,\n link,\n customIcon,\n className,\n}) => {\n let formattedDate = '';\n if (date) {\n const formatter = new StatusFormatter(\n date.getTime(),\n '',\n 'dd. MMMM yyyy',\n 'hh:mm',\n 'de'\n );\n formattedDate = formatter.getFormattedDate();\n }\n\n return (\n <View isInverted={isInverted} data-sheet=\"alert\" className={className}>\n <Icon>{customIcon ? customIcon({ isInverted }) : <Info />}</Icon>\n <MainLabel>\n {title && (\n <Title textColor=\"inherit\" size=\"medium\" type=\"copy-b\">\n {title}\n </Title>\n )}\n </MainLabel>\n <span />\n <Content>\n {description && (\n <Copy\n isInverted={isInverted}\n size=\"small\"\n innerHTML={description}\n />\n )}\n {date && (\n <Copy size=\"small\" isInverted={isInverted}>\n {formattedDate}\n </Copy>\n )}\n </Content>\n {link && (\n <ViewLink\n {...link}\n ariaLabel={link?.href ? title : undefined}\n />\n )}\n </View>\n );\n};\n\nexport default Alert;\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Alert, { AlertProps } from '../blocks/Alert';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\n\nconst List = styled.ul`\n margin-top: -${spacings.nudge * 2}px;\n margin-left: -${spacings.nudge * 2}px;\n padding: 0;\n list-style: none;\n\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n justify-content: center;\n flex-wrap: wrap;\n\n @media ${mq.medium} {\n margin-top: -${spacings.spacer}px;\n margin-left: -${spacings.spacer}px;\n }\n`;\n\nconst ListItem = styled.li<{ itemsPerRow: number }>`\n padding-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge * 2}px;\n flex: 1 1 100%;\n\n @media ${mq.medium} {\n flex: 0 1 50%;\n max-width: 50%;\n\n padding-top: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n }\n\n @media ${mq.large} {\n flex: 0 1 ${({ itemsPerRow }) => (1 / itemsPerRow) * 100}%;\n max-width: 600px;\n\n padding-top: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n }\n`;\n\nconst AlertList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of alert items */\n items?: Pick<AlertProps, 'title' | 'date' | 'description' | 'link'>[];\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Function to inject custom alert icon */\n customIcon?: (props: { isInverted?: boolean }) => React.ReactNode;\n}> = ({ anchorId, items, bgMode, customIcon }) => {\n const { colors } = useLibTheme();\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n const alertCount = items?.length || 0;\n const itemsPerRow = alertCount % 3 === 1 || alertCount === 2 ? 2 : 3;\n\n const { sheetRefs: alertRefs } = useEqualSheetHeight<HTMLLIElement>({\n listLength: alertCount,\n identifiers: ['[data-sheet=\"alert\"]'],\n responsive: {\n small: 1,\n medium: 2,\n semilarge: 2,\n large: itemsPerRow,\n xlarge: itemsPerRow,\n },\n });\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <List>\n {items?.map((item, i) => (\n <ListItem\n key={i}\n itemsPerRow={itemsPerRow}\n ref={alertRefs[i]}\n >\n <Alert\n {...item}\n isInverted={isInverted}\n customIcon={customIcon}\n />\n </ListItem>\n ))}\n </List>\n </Wrapper>\n </Section>\n );\n};\n\nexport const AlertListComponent = AlertList;\nexport default withLibTheme(AlertList);\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Title, { TitleSize } from 'components/blocks/Title';\nimport Copy from 'components/typography/Copy';\nimport Wrapper from 'components/base/Wrapper';\nimport { spacings, mq } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Grid from 'components/base/Grid';\n\nconst StyledTitle = styled(Title)`\n &:not(:last-child) {\n margin-bottom: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n max-width: 880px;\n }\n`;\n\nconst ContentText = styled(Copy)`\n text-align: left;\n`;\n\nconst StyledActions = styled(Actions)`\n margin-top: ${spacings.spacer}px;\n`;\n\nconst Article: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n /** Main title text */\n title?: string;\n /** Main title HTML tag type (h2, h3, h4...) */\n titleAs?: HeadlineTag;\n /** Main title size */\n titleSize?: TitleSize;\n /** Superior title that stands above main title */\n superTitle?: string;\n /** Superior title HTML tag type (h3, h4 ...) */\n superTitleAs?: HeadlineTag;\n /** Bold intro text underneath the title (limited richtext capabilites) */\n intro?: string;\n /** Main article richtext */\n text?: string;\n /** Additional article richtext in a second column */\n asideText?: string;\n /** Controls width of left text column (8/12 or 6/12) */\n halfAside?: boolean;\n\n /** Section background */\n bgMode?: 'full' | 'splitted' | 'inverted';\n\n /** Function to inject custom primary button */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n /** Function to inject custom secondary button */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n anchorId,\n title,\n titleAs = 'h2',\n titleSize = 'heading-2',\n superTitle,\n superTitleAs,\n intro,\n text,\n asideText,\n halfAside,\n bgMode,\n primaryAction,\n secondaryAction,\n}) => {\n const { colors } = useLibTheme();\n\n const isInverted = bgMode === 'inverted';\n const hasContent = intro || text || asideText;\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {(title || superTitle) && (\n <StyledTitle\n title={title}\n titleAs={titleAs}\n titleSize={titleSize}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n )}\n {hasContent && (\n <Grid.Row valign=\"top\">\n <Grid.Col\n semilarge={{ span: halfAside ? 6 / 12 : 8 / 12 }}\n >\n {intro && (\n <ContentText\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n />\n )}\n {text && (\n <ContentText\n type=\"copy\"\n isInverted={isInverted}\n innerHTML={text}\n />\n )}\n </Grid.Col>\n {asideText && (\n <Grid.Col\n semilarge={{\n span: halfAside ? 6 / 12 : 4 / 12,\n }}\n >\n <ContentText\n type=\"copy\"\n isInverted={isInverted}\n innerHTML={asideText}\n />\n </Grid.Col>\n )}\n </Grid.Row>\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const ArticleComponent = Article;\nexport default withLibTheme(Article);\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n getColors as color,\n getGlobals as global,\n mq,\n spacings,\n} from 'utils/styles';\nimport Copy from 'components/typography/Copy';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport IntroBlock from 'components/blocks/IntroBlock';\nimport Actions from 'components/blocks/Actions';\nimport { withLibTheme } from 'utils/LibThemeProvider';\nimport { gridSettings, getGridWidth } from 'components/base/Grid';\n\nconst ContactView = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n margin: 0 auto;\n width: 100%;\n\n text-align: left;\n hyphens: auto;\n overflow-wrap: break-word;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n flex-direction: row;\n\n & > * + * {\n margin-top: 0px;\n margin-left: ${gridSettings.gutter}px;\n }\n }\n`;\n\nconst Avatar = styled.img<{ isInverted?: boolean }>`\n align-self: center;\n display: block;\n border: solid 1px transparent;\n border-radius: 50%;\n width: 180px;\n height: 180px;\n\n background: ${({ theme, isInverted }) =>\n isInverted\n ? global(theme).sections.imagePlaceholderBg.inverted\n : global(theme).sections.imagePlaceholderBg.default};\n\n @media ${mq.semilarge} {\n display: block;\n width: 190px;\n height: 190px;\n }\n`;\n\nconst Description = styled(Copy)`\n text-align: center;\n\n .icon-label {\n flex-direction: column;\n }\n\n .icon-label > * + * {\n margin-left: 0;\n margin-top: ${spacings.nudge * 2}px;\n }\n\n & > * {\n justify-content: center;\n }\n\n @media ${mq.semilarge} {\n text-align: left;\n\n & > * {\n justify-content: left;\n }\n\n .icon-label {\n flex-direction: row;\n }\n\n .icon-label > * + * {\n margin-left: ${spacings.nudge * 2}px;\n margin-top: 0;\n }\n }\n`;\n\nexport interface ContactBoxProps {\n isInverted?: boolean;\n description?: string;\n avatar?: { src: string; alt: string };\n}\n\nconst ContactBox: FC<ContactBoxProps & { className?: string }> = ({\n isInverted,\n description,\n avatar,\n className,\n}) => {\n return (\n <ContactView className={className}>\n <Avatar\n src={avatar?.src}\n alt={avatar?.alt}\n isInverted={isInverted}\n />\n {description && (\n <Description\n type=\"copy\"\n isInverted={isInverted}\n innerHTML={description}\n />\n )}\n </ContactView>\n );\n};\n\nconst StyledIntro = styled(IntroBlock)<{ hasDecorator?: boolean }>`\n max-width: 880px;\n margin-right: auto;\n margin-left: auto;\n\n @media ${mq.xlarge} {\n & > *:first-child {\n min-height: ${({ hasDecorator }) => hasDecorator && '110px'};\n }\n }\n`;\n\nconst StyledContactBox = styled(ContactBox)`\n margin-top: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n max-width: ${getGridWidth({ cols: 8 })};\n margin-right: auto;\n margin-left: auto;\n }\n\n @media ${mq.large} {\n max-width: ${getGridWidth({ cols: 6 })};\n }\n`;\n\nconst StyledActions = styled(Actions)`\n margin-top: ${spacings.spacer}px;\n\n @media ${mq.medium} {\n display: block;\n text-align: center;\n }\n`;\n\nconst NewsletterWrapper = styled.div`\n width: 100%;\n margin: 0 auto;\n margin-top: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n max-width: 400px;\n }\n`;\n\nconst Badge = styled.div`\n display: none;\n position: relative;\n height: 241px;\n width: 241px;\n margin-left: auto;\n margin-bottom: -135px;\n z-index: 3;\n\n @media ${mq.xlarge} {\n display: block;\n margin-right: ${1440 * (1 / 28) + 'px'};\n }\n`;\n\nexport const CallToAction: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n /** Main title text */\n title?: string;\n /** Main title HTML tag type (h2, h3, h4...) */\n titleAs?: HeadlineTag;\n /** Superior title that stands above main title */\n superTitle?: string;\n /** Superior title HTML tag type (h3, h4 ...) */\n superTitleAs?: HeadlineTag;\n /** Bold text underneath the title (limited richtext capabilites) */\n text?: string;\n /** Props for contact area */\n contact?: ContactBoxProps;\n /** Show Newsletter defined by inject function newsFormMain. Only visible if React node is defined! */\n hasNewsletter?: boolean;\n /** Badge decorator visible only on large screens */\n badge?: React.ReactNode;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Function to inject custom primary button */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n /** Function to inject custom secondary button */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n /** Function to inject newsletter form */\n newsFormMain?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n anchorId,\n title,\n titleAs = 'h2',\n superTitle,\n superTitleAs,\n text,\n contact,\n badge,\n primaryAction,\n secondaryAction,\n hasNewsletter,\n newsFormMain,\n bgMode,\n}) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? color(theme).sectionBg.dark\n : color(theme).sectionBg.medium\n }\n bgMode={bgMode ? mapToBgMode(bgMode, true) : 'full'}\n >\n <Wrapper addWhitespace clampWidth=\"normal\">\n {badge && <Badge>{badge}</Badge>}\n {title && (\n <StyledIntro\n isCentered\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n hasDecorator={!!badge}\n text={text}\n />\n )}\n\n {contact && (\n <StyledContactBox\n isInverted={isInverted}\n description={contact.description}\n avatar={contact.avatar}\n />\n )}\n {newsFormMain && hasNewsletter && (\n <NewsletterWrapper>\n {newsFormMain(isInverted)}\n </NewsletterWrapper>\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const CallToActionComponent = CallToAction;\nexport default withLibTheme(CallToAction);\n","import Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Copy from 'components/typography/Copy';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport {\n spacings,\n getColors as color,\n mq,\n getGlobals as global,\n} from 'utils/styles';\n\nconst View = styled.div<{\n isInverted?: boolean;\n cardColor?: string;\n hasLink?: boolean;\n}>`\n display: flex;\n flex-direction: column;\n justify-content: center;\n position: relative;\n color: ${({ theme }) => color(theme).text.inverted};\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n min-height: 110px;\n\n overflow: hidden;\n\n @media ${mq.medium} {\n display: block;\n padding-top: 85%;\n }\n`;\n\nconst SolidView = styled(View)`\n background-color: ${({ theme, isInverted, cardColor }) =>\n cardColor\n ? cardColor\n : isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n\n transition: background-color 0.2s ease-in-out, box-shadow 0.2s ease-in-out;\n\n ${({ hasLink }) =>\n hasLink &&\n css`\n cursor: pointer;\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n box-shadow: 0 2px 24px 0 rgba(0, 0, 0, 0.35);\n }\n }\n `}\n`;\n\nconst ImageView = styled(View)`\n transition: box-shadow 0.2s ease-in-out;\n\n ${({ hasLink }) =>\n hasLink &&\n css`\n @media (hover: hover) and (pointer: fine) {\n cursor: pointer;\n\n img {\n -webkit-backface-visibility: hidden;\n -ms-transform: translateZ(0); /* IE 9 */\n -webkit-transform: translateZ(\n 0\n ); /* Chrome, Safari, Opera */\n transform: translateZ(0);\n transform-origin: center;\n transition: transform 0.2s ease-in-out;\n }\n\n &:hover {\n box-shadow: 0 2px 24px 0 rgba(0, 0, 0, 0.35);\n\n img {\n transform: scale(1.03);\n }\n }\n }\n `}\n\n &:after {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: ${({ theme }) => global(theme).sections.imageTextGradient};\n pointer-events: none;\n }\n\n @media ${mq.medium} {\n padding-top: 0;\n }\n`;\n\nconst StyledImage = styled(Image)`\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n\n display: block;\n width: 100%;\n height: 100%;\n\n object-fit: cover;\n object-position: center;\n\n @media ${mq.medium} {\n position: relative;\n }\n`;\n\nconst Content = styled.div<{ hasIcon?: boolean }>`\n z-index: 1;\n\n padding: ${spacings.nudge * 3}px;\n\n display: flex;\n flex-direction: row;\n align-items: center;\n\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: hidden;\n\n display: flex;\n flex-direction: ${({ hasIcon }) => (hasIcon ? 'column' : 'row')};\n justify-content: space-between;\n align-items: ${({ hasIcon }) => (hasIcon ? 'flex-start' : 'flex-end')};\n\n & > * + * {\n margin-left: 0;\n }\n }\n`;\n\nconst TextContainer = styled.div`\n width: 100%;\n overflow: hidden;\n\n & > * + * {\n margin-top: ${spacings.nudge / 2}px;\n }\n`;\n\nconst Title = styled(Copy)`\n display: inline-block;\n max-width: 100%;\n\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n text-overflow: ellipsis;\n overflow: hidden;\n`;\n\nconst Footer = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n & > * + * {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst SubLabel = styled(Copy)`\n display: inline-block;\n\n display: -webkit-box;\n -webkit-line-clamp: 1;\n -webkit-box-orient: vertical;\n overflow: hidden;\n`;\n\nconst Icon = styled.div`\n height: 100%;\n max-height: 60px;\n min-height: 40px;\n min-width: 40px;\n\n * {\n height: 100%;\n }\n\n svg,\n img {\n width: 100%;\n }\n\n @media ${mq.medium} {\n svg,\n img {\n width: auto;\n }\n }\n`;\n\nconst CardLink = styled(Link)<{ isInverted?: boolean }>`\n z-index: 1;\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n outline-color: ${({ theme }) => color(theme).primary.default};\n\n &:focus {\n border: 2px dotted ${({ theme }) => color(theme).primary.invertedHover};\n outline-offset: 4px;\n\n color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.invertedHover\n : color(theme).primary.hover};\n }\n`;\n\nexport interface CardProps {\n isInverted?: boolean;\n title?: string;\n subLabel?: string;\n image?: ImageProps;\n link?: LinkProps;\n decorator?: (props: { isInverted?: boolean }) => React.ReactNode;\n cardColor?: string;\n customIcon?: (props: { isInverted?: boolean }) => React.ReactNode;\n}\n\nconst Card: React.FC<\n Omit<CardProps, 'coverSpace' | 'ratios'> & {\n className?: string;\n }\n> = ({\n isInverted,\n title,\n subLabel,\n image,\n link,\n decorator,\n cardColor,\n customIcon,\n}) => {\n const { colors } = useLibTheme();\n const CardView = image && image.small ? ImageView : SolidView;\n const defaultCardColor = isInverted\n ? colors.primary.inverted\n : colors.primary.default;\n\n return (\n <CardView\n isInverted={isInverted}\n cardColor={cardColor || defaultCardColor}\n hasLink={!!link?.href}\n >\n {image?.small && (\n <StyledImage\n {...image}\n coverSpace\n isInverted={isInverted}\n ratios={{\n small: { w: 352, h: 108 },\n medium: { w: 286, h: 244 },\n }}\n />\n )}\n <Content hasIcon={!!customIcon}>\n {customIcon ? <Icon>{customIcon({})}</Icon> : ''}\n <TextContainer>\n {title && (\n <Title size=\"big\" type=\"copy\" isInverted>\n {title}\n </Title>\n )}\n {subLabel && (\n <Footer>\n <SubLabel type=\"copy-b\" size=\"big\" isInverted>\n {subLabel}\n </SubLabel>\n {decorator ? decorator({ isInverted }) : undefined}\n </Footer>\n )}\n </TextContainer>\n </Content>\n {link?.href && (\n <CardLink\n isInverted={isInverted}\n {...link}\n ariaLabel={title || undefined}\n />\n )}\n </CardView>\n );\n};\n\nconst List = styled.ul`\n padding: 0;\n margin-top: -${spacings.nudge * 2}px;\n margin-left: -${spacings.nudge * 2}px;\n list-style: none;\n\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n justify-content: center;\n flex-wrap: wrap;\n\n @media ${mq.medium} {\n margin-top: -${spacings.spacer}px;\n margin-left: -${spacings.spacer}px;\n }\n`;\n\nconst CardItem = styled.li<{ isEqual?: boolean; threeCols?: boolean }>`\n padding-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge * 2}px;\n\n width: 100%;\n\n @media ${mq.medium} {\n flex: 0 0 50%;\n max-width: 370px;\n padding-top: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n flex: 0 0 33.33%;\n }\n\n @media (min-width: 75em) {\n flex: ${({ isEqual, threeCols }) =>\n threeCols ? '0 0 33.33%' : isEqual && '0 0 25%'};\n }\n`;\n\nconst CardList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array with card item settings */\n items?: Omit<CardProps, 'decorator' | 'isInverted'>[];\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Function to inject custom decoration icon */\n decorator?: (props: { isInverted?: boolean }) => React.ReactNode;\n\n /** Force maximal three items per row */\n maxThreeCols?: boolean;\n}> = ({ anchorId, items, bgMode, decorator, maxThreeCols }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n addSeperation\n >\n <Wrapper addWhitespace>\n <List>\n {items?.map((item, i) => (\n <CardItem\n key={i}\n isEqual={items.length % 2 === 0}\n threeCols={maxThreeCols}\n >\n <Card\n {...item}\n isInverted={isInverted}\n decorator={decorator}\n />\n </CardItem>\n ))}\n </List>\n </Wrapper>\n </Section>\n );\n};\n\nexport const CardListComponent = CardList;\nexport default withLibTheme(CardList);\n","import React, { FC, useEffect, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport { getColors as color, spacings } from 'utils/styles';\nimport ArrowLeftRight from 'components/base/icons/ArrowLeftRight';\nimport Copy from 'components/typography/Copy';\nimport useIE from 'utils/useIE';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\n\nconst clamp = (num: number, min: number, max: number) => {\n return Math.min(Math.max(num, min), max);\n};\n\nconst Images = styled.div`\n position: relative;\n cursor: col-resize;\n & > * {\n pointer-events: none;\n user-select: none;\n }\n`;\n\nconst BackgroundImg = styled(Image)`\n position: relative;\n display: block;\n width: 100%;\n`;\n\nconst ForegroundContainer = styled.div<{\n hasTransition?: boolean;\n initalValue?: number;\n hasAnim?: boolean;\n}>`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 50%;\n overflow: hidden;\n transition: width ${({ hasTransition }) => (hasTransition ? 0.1 : 0)}s\n ease-in-out;\n ${({ hasAnim, initalValue }) =>\n hasAnim &&\n css`\n animation-name: ForegroundAnim;\n animation-duration: 5s;\n animation-iteration-count: 1;\n animation-play-state: ${hasAnim && 'running'};\n animation-timing-function: ease-in-out;\n @keyframes ForegroundAnim {\n 0% {\n width: ${initalValue\n ? clamp(initalValue * 100, 0, 100) + '%'\n : '50%'};\n }\n 33% {\n width: ${initalValue\n ? clamp(initalValue * 100 + 10, 0, 100) + '%'\n : '60%'};\n }\n 66% {\n width: ${initalValue\n ? clamp(initalValue * 100 - 10, 0, 100) + '%'\n : '40%'};\n }\n 100% {\n width: ${initalValue ? initalValue * 100 + '%' : '50%'};\n }\n }\n `}\n`;\n\nconst ForegroundImg = styled(Image)`\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n max-width: none;\n object-fit: cover;\n\n img {\n height: auto;\n width: auto;\n }\n`;\n\nconst ForegroundOverlay = styled.div<{ color: string }>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: ${({ color }) => color};\n`;\n\nconst ImageLabel = styled(Copy)<{ bgColor?: string }>`\n height: ${spacings.spacer}px;\n padding: ${spacings.nudge}px ${spacings.spacer}px ${spacings.spacer}px\n ${spacings.spacer}px;\n background: ${({ bgColor }) => bgColor && bgColor};\n`;\n\nconst ForegroundLabel = styled(ImageLabel)`\n position: absolute;\n bottom: ${spacings.spacer}px;\n left: ${spacings.spacer}px;\n pointer-events: none;\n white-space: nowrap;\n`;\n\nconst BackgroundLabel = styled(ImageLabel)`\n position: absolute;\n bottom: ${spacings.spacer}px;\n right: ${spacings.spacer}px;\n pointer-events: none;\n white-space: nowrap;\n`;\n\nconst ControlContainer = styled.div<{\n hasTransition?: boolean;\n hasAnim?: boolean;\n initalValue?: number;\n}>`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n transition: left ${({ hasTransition }) => (hasTransition ? 0.1 : 0)}s\n ease-in-out;\n ${({ hasAnim, initalValue }) =>\n hasAnim &&\n css`\n animation-name: ControlAnim;\n animation-duration: 5s;\n animation-iteration-count: 1;\n animation-play-state: ${hasAnim && 'running'};\n animation-timing-function: ease-in-out;\n @keyframes ControlAnim {\n 0% {\n left: ${initalValue\n ? clamp(initalValue * 100, 0, 100) + '%'\n : '50%'};\n }\n 33% {\n left: ${initalValue\n ? clamp(initalValue * 100 + 10, 0, 100) + '%'\n : '60%'};\n }\n 66% {\n left: ${initalValue\n ? clamp(initalValue * 100 - 10, 0, 100) + '%'\n : '40%'};\n }\n 100% {\n left: ${initalValue ? initalValue * 100 + '%' : '50%'};\n }\n }\n `}\n`;\n\nconst Control = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n height: 54px;\n width: 54px;\n border: solid 2px ${({ theme }) => color(theme).elementBg.light};\n border-radius: 50%;\n background-color: ${({ theme }) => color(theme).elementBg.medium};\n`;\n\nconst ComparisonSlider: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n bgMode?: 'full' | 'inverted' | 'splitted';\n initialValue?: number;\n foregroundImg?: ImageProps;\n backgroundImg?: ImageProps;\n foregroundLabel?: string;\n backgroundLabel?: string;\n overlayColor?: string;\n labelColor?: string;\n dragControl?: React.ReactNode;\n enableControlAnim?: boolean;\n}> = ({\n anchorId,\n bgMode,\n initialValue,\n foregroundImg,\n backgroundImg,\n foregroundLabel,\n backgroundLabel,\n overlayColor = 'rgba(0, 0 , 0, 0.2)',\n labelColor = 'rgba(0, 0 , 0, 0.3)',\n dragControl,\n enableControlAnim,\n}) => {\n const isIE = useIE(true);\n const [slideValue, setSlideValue] = useState<number>(\n initialValue ? Math.min(Math.max(initialValue, 0), 1) : 0.5\n );\n const [isHolding, setIsHolding] = useState<boolean>(false);\n const [isDragging, setIsDragging] = useState<boolean>(false);\n const [interacted, setInteracted] = useState<boolean>(true);\n const [sideOffset, setSideOffset] = useState<number>(0);\n const controlRef = useRef<HTMLDivElement | null>(null);\n const { colors } = useLibTheme();\n\n useEffect(() => {\n if (controlRef.current) {\n setSideOffset(controlRef.current.offsetWidth / 2);\n }\n }, []);\n\n useEffect(() => {\n const handleInitalLoad = () => {\n const options = {\n rootMargin: '0px',\n threshold: 1.0,\n };\n\n const observer = new IntersectionObserver((entries, observer) => {\n if (enableControlAnim && entries[0]?.isIntersecting) {\n // if control is first fully visible\n observer.unobserve(entries[0]?.target);\n setInteracted(false);\n }\n }, options);\n if (controlRef.current) observer.observe(controlRef.current);\n window.removeEventListener('load', handleInitalLoad);\n };\n\n // wait unitl user has scrolled once\n if (!isIE) {\n if (document.readyState === 'complete') handleInitalLoad();\n else window.addEventListener('load', handleInitalLoad);\n }\n\n return () => {\n window.removeEventListener('load', handleInitalLoad);\n };\n }, [enableControlAnim, isIE]);\n\n const setCurrentPos = (target: EventTarget & Element, clientX: number) => {\n if (target && clientX) {\n const relativeClientX = clientX - target.getBoundingClientRect().x;\n\n // check side offset\n if (\n relativeClientX >= sideOffset &&\n relativeClientX <=\n target.getBoundingClientRect().width - sideOffset\n ) {\n let percentage =\n relativeClientX / target.getBoundingClientRect().width;\n percentage = Math.min(Math.max(percentage, 0), 1);\n\n setSlideValue(percentage);\n }\n }\n };\n\n const handleClick = (ev: React.MouseEvent) => {\n const target = ev.currentTarget;\n if (target && ev.clientX) {\n setCurrentPos(target, ev.clientX);\n setInteracted(true);\n }\n };\n\n const handleMouseMove = (ev: React.MouseEvent) => {\n const target = ev.currentTarget;\n if (target && ev.clientX && isHolding) {\n setIsDragging(true);\n setInteracted(true);\n if (isDragging) setCurrentPos(target, ev.clientX);\n }\n };\n\n const handleTouchMove = (ev: React.TouchEvent<HTMLDivElement>) => {\n const target = ev.currentTarget;\n if (target && ev.touches[0]?.clientX) {\n setInteracted(true);\n setCurrentPos(target, ev.touches[0]?.clientX);\n }\n };\n\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper>\n {backgroundImg && foregroundImg && (\n <Images\n onClick={handleClick}\n onMouseMove={handleMouseMove}\n onMouseDown={() => {\n setIsDragging(false);\n setIsHolding(true);\n }}\n onMouseUp={() => {\n setIsDragging(false);\n setIsHolding(false);\n }}\n onMouseLeave={() => {\n setIsHolding(false);\n setIsDragging(false);\n }}\n onTouchMove={handleTouchMove}\n onTouchStart={() => setIsHolding(true)}\n onTouchEnd={() => setIsHolding(false)}\n >\n <BackgroundImg {...backgroundImg} />\n {backgroundLabel && (\n <BackgroundLabel\n textColor={colors.text.inverted}\n bgColor={labelColor}\n >\n {backgroundLabel}\n </BackgroundLabel>\n )}\n <ForegroundContainer\n hasTransition={!isHolding}\n hasAnim={!interacted}\n initalValue={initialValue}\n style={{ width: slideValue * 100 + '%' }}\n >\n <ForegroundImg {...foregroundImg} />\n {foregroundLabel && (\n <ForegroundLabel\n textColor={colors.text.inverted}\n bgColor={labelColor}\n >\n {foregroundLabel}\n </ForegroundLabel>\n )}\n <ForegroundOverlay color={overlayColor} />\n </ForegroundContainer>\n <ControlContainer\n ref={controlRef}\n hasTransition={!isHolding}\n hasAnim={!interacted}\n initalValue={initialValue}\n style={{ left: slideValue * 100 + '%' }}\n >\n {dragControl ? (\n dragControl\n ) : (\n <Control>\n <ArrowLeftRight\n iconColor={colors.elementBg.light}\n />\n </Control>\n )}\n </ControlContainer>\n </Images>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const ComparisonSliderComponent = ComparisonSlider;\nexport default withLibTheme(ComparisonSlider);\n","import React, { forwardRef } from 'react';\nimport ReactDOMServer from 'react-dom/server';\nimport styled, { css } from 'styled-components';\n\nimport {\n spacings,\n getGlobals as global,\n mq,\n withRange,\n getColors as color,\n} from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport Title from 'components/blocks/Title';\nimport External from 'components/base/icons/External';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst View = styled(Link)<{\n clickable?: boolean;\n}>`\n display: block;\n position: relative;\n width: 100%;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n overflow: hidden;\n outline: none;\n\n &:after {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: ${({ theme }) => global(theme).sections.imageTextGradient};\n pointer-events: none;\n }\n\n ${({ clickable, theme, isInverted }) =>\n clickable &&\n css`\n transition: box-shadow 0.2s ease-in-out;\n cursor: pointer;\n\n &:hover {\n box-shadow: 0 2px 24px 0 rgba(0, 0, 0, 0.35);\n }\n\n &:focus {\n box-shadow: 0 2px 24px 0 rgba(0, 0, 0, 0.35);\n outline: solid 2px\n ${isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n outline-offset: 4px;\n\n color: ${isInverted\n ? color(theme).primary.invertedHover\n : color(theme).primary.hover};\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n box-shadow: none;\n }\n `}\n`;\n\nconst StyledImage = styled(Image)`\n width: 100%;\n height: 100%;\n min-height: 300px;\n\n img {\n height: 100%;\n }\n`;\n\nconst IntroContainer = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: auto;\n z-index: 1;\n\n padding: ${spacings.spacer}px ${spacings.nudge * 3}px;\n\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n display: block;\n flex: 1 0 0px;\n }\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 5}px ${spacings.spacer}px;\n }\n`;\n\nconst StyledTitle = styled(Title)<{ clampTitle?: boolean }>`\n max-width: ${({ clampTitle }) =>\n clampTitle && (13 / 28) * spacings.wrapper + 'px'};\n`;\n\nconst ExternalIconHolder = styled.span`\n margin-left: ${spacings.nudge * 2}px;\n\n & > * {\n display: inline-block;\n }\n`;\n\nconst Icon = styled.div`\n ${withRange([60, 100], 'height')};\n ${withRange([60, 100], 'width')};\n\n position: absolute;\n top: ${spacings.nudge * 3}px;\n left: ${spacings.nudge * 3}px;\n\n & > * {\n ${withRange([60, 100], 'height')};\n ${withRange([60, 100], 'width')};\n }\n\n color: ${({ theme }) => color(theme).text.inverted};\n`;\n\nexport interface PromotionCardProps {\n /** Setup Card for dark backgrounds */\n isInverted?: boolean;\n /** Card image settings */\n image: ImageProps;\n /** Card title */\n title?: string;\n /** Card title HTML tag type (h2, h3, h4...) */\n titleAs?: HeadlineTag;\n /** Superior card title that stands above main title */\n superTitle?: string;\n /** Superior card title HTML tag type (h3, h4 ...) */\n superTitleAs?: HeadlineTag;\n /** Href path */\n href?: string;\n /** Advanced href options */\n link?: LinkProps;\n /** Inject custom icon that indicates an external link */\n externalLinkIcon?: React.ReactNode;\n\n /** Function to inject icon in top left corner */\n icon?: (props: { isInverted?: boolean }) => React.ReactNode;\n}\n\nconst PromotionCard = forwardRef<\n HTMLAnchorElement,\n PromotionCardProps & { className?: string }\n>(\n (\n {\n isInverted,\n image,\n title,\n titleAs,\n superTitle,\n superTitleAs,\n href,\n link,\n externalLinkIcon,\n icon,\n className,\n },\n ref\n ) => {\n // fallback for older versions\n let linkObj = link;\n if (href && !link) {\n linkObj = {\n href: href,\n isExternal: false,\n };\n }\n\n const externalIconString = ReactDOMServer.renderToString(\n <ExternalIconHolder>\n {externalLinkIcon || <External />}\n </ExternalIconHolder>\n );\n\n return (\n <View\n ref={ref}\n clickable={!!href || !!link}\n {...linkObj}\n className={className}\n >\n <StyledImage {...image} isInverted={isInverted} coverSpace />\n {icon && <Icon>{icon({ isInverted })}</Icon>}\n {title && (\n <IntroContainer>\n <StyledTitle\n colorMode=\"onImage\"\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n title={\n linkObj?.isExternal\n ? title + externalIconString\n : title\n }\n titleAs={titleAs || 'div'}\n clampTitle\n />\n </IntroContainer>\n )}\n </View>\n );\n }\n);\n\nPromotionCard.displayName = 'PromotionCard';\n\nexport default PromotionCard;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport Grid, { gridSettings } from 'components/base/Grid';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\n\nimport PromotionCard, {\n PromotionCardProps,\n} from 'components/blocks/PromotionCard';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\n\nconst Card = styled(PromotionCard)<{ isMain?: boolean }>`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n\n height: ${({ isMain }) => isMain && '100%'};\n\n flex: 1 0 auto;\n\n & + & {\n margin-top: ${gridSettings.gutter}px;\n }\n`;\n\nconst CrossPromotion: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Promotion card settings in main grid column (default: on right side). The size prop controls the width. */\n main?: Array<\n Omit<PromotionCardProps, 'externalLinkIcon' | 'isInverted'> & {\n size?: 'full' | 'half';\n }\n >;\n\n /** Promotion card settings in second grid column (default: on left side). The size prop controls the width. */\n aside?: Array<\n Omit<PromotionCardProps, 'externalLinkIcon' | 'isInverted'> & {\n size?: 'full' | 'half';\n }\n >;\n\n /** Section background */\n bgMode?: 'full' | 'inverted' | 'splitted';\n\n /** Switching order of main and aside columns */\n isMirrored?: boolean;\n\n /** Inject custom icon that indicates an external link */\n externalLinkIcon?: React.ReactNode;\n}> = ({ anchorId, main, aside, bgMode, isMirrored, externalLinkIcon }) => {\n const { colors } = useLibTheme();\n\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, false, isMirrored)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {aside ? (\n isMirrored ? (\n <Grid.Row>\n <Grid.Col semilarge={{ span: 6 / 12 }}>\n {main &&\n main.map((card, i) => (\n <Card\n key={i}\n isMain\n {...card}\n externalLinkIcon={externalLinkIcon}\n isInverted={isInverted}\n />\n ))}\n </Grid.Col>\n <Grid.Col semilarge={{ span: 6 / 12 }}>\n {aside.map((card, i) => (\n <Card\n key={i}\n {...card}\n externalLinkIcon={externalLinkIcon}\n isInverted={isInverted}\n />\n ))}\n </Grid.Col>\n </Grid.Row>\n ) : (\n <Grid.Row>\n <Grid.Col semilarge={{ span: 6 / 12 }}>\n {aside.map((card, i) => (\n <Card\n key={i}\n {...card}\n externalLinkIcon={externalLinkIcon}\n isInverted={isInverted}\n />\n ))}\n </Grid.Col>\n <Grid.Col semilarge={{ span: 6 / 12 }}>\n {main &&\n main.map((card, i) => (\n <Card\n key={i}\n isMain\n {...card}\n externalLinkIcon={externalLinkIcon}\n isInverted={isInverted}\n />\n ))}\n </Grid.Col>\n </Grid.Row>\n )\n ) : (\n main && (\n <Grid.Row>\n {main.map((card, i) => (\n <Grid.Col\n semilarge={{\n span:\n (card.size === 'half' ? 6 : 12) /\n 12,\n }}\n key={i}\n >\n <Card\n key={i}\n {...card}\n externalLinkIcon={externalLinkIcon}\n isInverted={isInverted}\n />\n </Grid.Col>\n ))}\n </Grid.Row>\n )\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const CrossPromotionComponent = CrossPromotion;\nexport default withLibTheme(CrossPromotion);\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport RadioButton from 'components/fields/Radio';\nimport { FieldGenerationProps, FieldGroup } from '../DynamicForm';\nimport FieldWrapper from 'components/fields/FormField';\nimport { spacings } from 'utils/styles';\nimport Checkbox from 'components/fields/Checkbox';\n\nconst FieldSet = styled.fieldset`\n display: block;\n border: none;\n background: none;\n outline: none;\n padding: 0;\n margin-left: 0;\n margin-right: 0;\n text-align: left;\n`;\n\nconst Fields = styled.div`\n & > * + * {\n margin-top: ${spacings.nudge}px;\n }\n`;\n\nexport const renderRadioGroupField = ({\n key,\n field,\n value,\n error,\n isTouched,\n isInverted,\n info,\n setField,\n}: FieldGenerationProps<FieldGroup>) => {\n const group = field;\n const groupData = value as string;\n\n return (\n <FieldSet key={key}>\n {key && (\n <FieldWrapper.Head\n isInverted={isInverted}\n label={key}\n isRequired={field.isRequired}\n />\n )}\n <Fields>\n {group?.fields?.map((field, fi) => (\n <RadioButton\n key={fi}\n enableMemo\n name={key}\n value={field.text}\n label={field.text}\n isInverted={isInverted}\n isSelected={\n field.text ? groupData === field.text : false\n }\n onChange={(e) => {\n if (field.text) {\n setField({\n key,\n value: e.currentTarget.value,\n });\n }\n }}\n />\n ))}\n </Fields>\n {isTouched && error && (\n <FieldWrapper.Messages\n errorMessage={error}\n infoMessage={info}\n />\n )}\n </FieldSet>\n );\n};\n\nexport const renderCheckboxGroupField = ({\n field,\n key,\n isInverted,\n value,\n isTouched,\n error,\n info,\n setTouched,\n validateField,\n setField,\n}: FieldGenerationProps<FieldGroup>) => {\n const group = field;\n const groupData = value as string[];\n\n return (\n <FieldSet key={key}>\n {key && (\n <FieldWrapper.Head\n isInverted={isInverted}\n label={key}\n isRequired={field.isRequired}\n />\n )}\n\n <Fields>\n {group?.fields?.map((field, ci) => (\n <Checkbox\n key={ci}\n enableMemo\n isInverted={isInverted}\n onChange={(ev) => {\n const value = ev.currentTarget.value;\n\n // add key to form data array if not exists. Otherwise remove it\n if (value) {\n const cIndex = groupData.indexOf(value);\n if (cIndex === -1) {\n groupData.push(value);\n } else {\n groupData.splice(cIndex, 1);\n }\n // set formik values\n setField({\n key,\n value: groupData,\n });\n setTouched(key, true);\n validateField(key);\n }\n }}\n isSelected={\n field.text\n ? groupData.indexOf(field.text) !== -1\n : false\n }\n name={key}\n value={field.text}\n label={field.text}\n />\n ))}\n </Fields>\n {isTouched && error && (\n <FieldWrapper.Messages\n errorMessage={error}\n infoMessage={info}\n />\n )}\n </FieldSet>\n );\n};\n","import { Field } from '../DynamicForm';\n\nconst fieldValidator = async (key: string, value: string, config: Field) => {\n const inputType = config.inputType;\n let error = '';\n\n if (config.isRequired && !value) {\n error = config.errorMsg || 'Required field';\n }\n\n switch (inputType) {\n case 'email':\n if (\n value &&\n !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(value)\n ) {\n error = config.errorMsg || 'Invalid Mail format';\n }\n break;\n case 'tel':\n if (value && /[A-Z]/gi.test(value)) {\n error = config.errorMsg || 'Ungültige Telefonnummer';\n }\n break;\n case 'number':\n if (value && !/^[+]?\\d+([.]\\d+)?$/gm.test(value as string)) {\n error = config.errorMsg || 'Zahlenformat ungültig';\n }\n break;\n }\n\n return error;\n};\n\nexport default fieldValidator;\n","import { Area } from '../DynamicForm';\n\nconst areaValidator = async (key: string, value: string, config: Area) => {\n let error = '';\n\n if (config.isRequired && !value) {\n error = config.errorMsg || 'Required field';\n }\n\n return error;\n};\n\nexport default areaValidator;\n","import { Select } from '../DynamicForm';\n\nconst selectValidator = async (\n key: string,\n selectedItem: string,\n config: Select\n) => {\n let error = '';\n\n if (config.isRequired && !selectedItem) {\n error = config.errorMsg || 'Required field';\n }\n\n return error;\n};\n\nexport default selectValidator;\n","import { Datepicker } from '../DynamicForm';\n\nconst datepickerValidator = async (\n key: string,\n value: [Date | null, Date | null],\n config: Datepicker\n) => {\n let error = '';\n const single = config.singleSelect;\n\n if (config.isRequired && !value) {\n error = single\n ? config.singleDateError || 'Please submit date!'\n : config.multiDateError || 'Please submit start- and enddate!';\n } else if (config.isRequired && single && !value[0]) {\n error = config.singleDateError || 'Please submit date!';\n } else if (config.isRequired && !single && (!value[0] || !value[1])) {\n error = config.multiDateError || 'Please submit start- and enddate!';\n }\n\n return error;\n};\n\nexport default datepickerValidator;\n","import { LocationData } from 'components/fields/LocationField';\nimport { Location } from '../DynamicForm';\n\nconst locationValidator = async (\n key: string,\n value: LocationData,\n config: Location\n) => {\n let error = '';\n\n if (\n config.isRequired &&\n !value.description &&\n !value.position?.[0] &&\n !value.position?.[1]\n ) {\n error = config.errorMsg || 'Please submit location info!';\n }\n\n return error;\n};\n\nexport default locationValidator;\n","import { FieldGroup } from '../DynamicForm';\n\nconst fieldGroupValidator = async (\n key: string,\n value: Array<string> | string,\n config: FieldGroup\n) => {\n const type = config.groupType;\n let error = '';\n\n if (type === 'Checkbox') {\n const selectValues = value as string[];\n if (config.isRequired && (!selectValues || selectValues?.length < 1)) {\n error = config.errorMsg || 'Please select at least one item!';\n }\n } else if (type === 'Radio') {\n if (config.isRequired && !value) {\n error = config.errorMsg || 'Selection required';\n }\n }\n return error;\n};\n\nexport default fieldGroupValidator;\n","import { FileUpload } from '../DynamicForm';\n\nconst uploadValidator = async (\n key: string,\n files: Array<File>,\n config: FileUpload\n) => {\n let error = '';\n\n if (config.isRequired && (!files || files?.length < 1)) {\n error = config.errorMsg || 'Please submit at least one file!';\n }\n\n return error;\n};\n\nexport default uploadValidator;\n","import React, { FC, useCallback, useEffect, useRef, useState } from 'react';\nimport styled, { DefaultTheme } from 'styled-components';\n\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { Field, FormikErrors, useFormik } from 'formik';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\nimport Button from 'components/buttons/Button';\n\nimport { LocationData } from 'components/fields/LocationField';\n\n/** Field Renderer */\nimport renderLocationField from './renderer/locationRenderer';\nimport renderDatepickerField from './renderer/datepickerRenderer';\nimport {\n renderCheckboxGroupField,\n renderRadioGroupField,\n} from './renderer/fieldGroupRenderer';\nimport renderAreaField from './renderer/areaRenderer';\nimport renderField from './renderer/fieldRenderer';\nimport renderSelectField from './renderer/selectRenderer';\nimport renderUploadField from './renderer/uploadRenderer';\nimport fieldValidator from './validators/fieldValidator';\nimport areaValidator from './validators/areaValidator';\nimport selectValidator from './validators/selectValidator';\nimport datepickerValidator from './validators/datepickerValidator';\nimport locationValidator from './validators/locationValidator';\nimport fieldGroupValidator from './validators/fieldGroupValidator';\nimport uploadValidator from './validators/uploadValidator';\nimport Copy from 'components/typography/Copy';\n\nconst StyledSection = styled(Section)`\n overflow: visible;\n`;\n\nconst Form = styled.form`\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n @media ${mq.semilarge} {\n flex-direction: row;\n }\n`;\n\nconst FieldContainer = styled.div`\n flex: 1 1 0;\n text-align: center;\n\n & + & {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n max-width: 610px;\n }\n`;\n\nconst FormFooter = styled.div`\n margin-top: ${spacings.spacer}px;\n`;\n\nconst Status = styled(Copy)`\n text-align: left;\n margin: 0 auto;\n\n @media ${mq.semilarge} {\n max-width: 610px;\n }\n`;\n\nconst ActionContainer = styled.div`\n width: 100%;\n margin: 0 auto;\n margin-top: ${spacings.spacer * 1.5}px;\n text-align: right;\n\n @media ${mq.semilarge} {\n max-width: 610px;\n }\n`;\n\nexport interface FormStructure {\n [key: string]:\n | Field\n | Area\n | Select\n | Datepicker\n | Location\n | FieldGroup\n | FileUpload;\n}\n\nexport interface FormField {\n isRequired?: boolean;\n}\n\nexport interface Field extends FormField {\n type: 'Field';\n inputType?: 'text' | 'number' | 'email' | 'password' | 'tel';\n initialValue?: string;\n placeholder?: string;\n info?: string;\n validate?: (key: string, value: string, config: Field) => Promise<string>;\n errorMsg?: string;\n}\n\nexport interface Area extends FormField {\n type: 'Area';\n initialValue?: string;\n placeholder?: string;\n info?: string;\n validate?: (key: string, value: string, config: Area) => Promise<string>;\n errorMsg?: string;\n}\n\nexport interface Select extends FormField {\n type: 'Select';\n initialOption?: string;\n placeholder?: string;\n dropdownItems: {\n label?: string;\n value?: Record<string, string>;\n }[];\n info?: string;\n validate?: (\n key: string,\n selectedItem: string,\n config: Select\n ) => Promise<string>;\n indicator?: (props: {\n isOpen: boolean;\n isDisabled?: boolean;\n }) => React.ReactNode;\n errorMsg?: string;\n}\n\nexport interface Datepicker extends FormField {\n type: 'Datepicker';\n initialDates?: [Date, Date];\n placeholder?: string;\n minDate?: Date;\n maxDate?: Date;\n singleSelect?: boolean;\n info?: string;\n customIcon?: (props: {\n isInverted?: boolean;\n singleSelect?: boolean;\n }) => React.ReactNode;\n\n singleDateError?: string;\n multiDateError?: string;\n nextCtrlUrl?: React.ReactNode;\n prevCtrlUrl?: React.ReactNode;\n validate?: (\n key: string,\n value: [Date | null, Date | null],\n config: Datepicker\n ) => Promise<string>;\n deleteAction?: (\n handleClick?: (\n e: React.SyntheticEvent<HTMLButtonElement, Event>\n ) => void\n ) => React.ReactNode;\n submitAction?: (\n handleClick?: (\n e: React.SyntheticEvent<HTMLButtonElement, Event>\n ) => void\n ) => React.ReactNode;\n}\n\nexport interface Location extends FormField {\n type: 'Location';\n zoom?: number;\n initialMapCenter?: [number, number];\n placeholder?: string;\n info?: string;\n errorMsg?: string;\n customToggle?: (props: {\n isInverted?: boolean;\n viewState?: 'desc' | 'map';\n handleClick?: () => void;\n }) => React.ReactNode;\n customLocationControl?: (props: {\n isInverted?: boolean;\n handleClick?: () => void;\n }) => React.ReactNode;\n customResetControl?: (props: {\n isInverted?: boolean;\n handleClick?: () => void;\n }) => React.ReactNode;\n validate?: (\n key: string,\n value: LocationData,\n config: Location\n ) => Promise<string>;\n toggleLabel?: string;\n trackLocationLabel?: string;\n}\n\nexport interface FieldGroup extends FormField {\n type: 'FieldGroup';\n groupType: 'Radio' | 'Checkbox';\n fields: Array<{ initialChecked?: boolean; text?: string }>;\n validate?: (\n key: string,\n value: Array<string> | string,\n config: FieldGroup\n ) => Promise<string>;\n errorMsg?: string;\n infoMsg?: string;\n}\n\nexport interface FileUpload extends FormField {\n type: 'Upload';\n addBtnLabel?: string;\n removeBtnLabel?: string;\n info?: string;\n acceptedFormats?: string;\n customUploadIcon?: (isInverted?: boolean) => React.ReactNode;\n customDeleteIcon?: (isInverted?: boolean) => React.ReactNode;\n validate?: (\n key: string,\n value: Array<File>,\n config: FileUpload\n ) => Promise<string>;\n errorMsg?: string;\n}\n\nexport interface FormData {\n [key: string]: FormDataTypes | string;\n}\n\nexport type FormDataTypes =\n | string\n | boolean\n | Record<string, string>\n | Array<string>\n | [Date | null, Date | null]\n | Array<File>\n | LocationData;\n\ntype FieldTypes =\n | Field\n | Area\n | Select\n | Datepicker\n | Location\n | FieldGroup\n | FileUpload;\n\nexport interface FieldGenerationProps<T extends FieldTypes> {\n field: T;\n value: FormDataTypes;\n error: string;\n info?: string;\n isTouched: boolean;\n key: string;\n isInverted: boolean;\n hasBg: boolean;\n theme: DefaultTheme;\n setField: (props: {\n key: string;\n value: any;\n shouldValidate?: boolean;\n }) => Promise<void | FormikErrors<FormData>>;\n validateField: (\n name: string\n ) => Promise<string | undefined> | Promise<void>;\n setTouched: (\n field: string,\n touched?: boolean | undefined,\n shouldValidate?: boolean | undefined\n ) => Promise<void> | Promise<FormikErrors<FormData>>;\n handleChange: {\n (e: React.ChangeEvent<any>): void;\n <T_1 = string | React.ChangeEvent<any>>(\n field: T_1\n ): T_1 extends React.ChangeEvent<any>\n ? void\n : (e: string | React.ChangeEvent<any>) => void;\n };\n handleBlur: {\n (e: React.FocusEvent<any>): void;\n <T = any>(fieldOrEvent: T): T extends string ? (e: any) => void : void;\n };\n validateOnBlur?: boolean;\n validateOnChange?: boolean;\n}\n\nexport type FormValues = FormData & {\n targetEmails: string[];\n subjectLine: string;\n};\n\nexport interface SubmitResponse {\n message?: string;\n isError?: boolean;\n}\n\nconst DynamicForm: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Field definitions */\n fields?: FormStructure;\n\n /** Callback on form submit */\n onSubmit?: (values: FormValues) => Promise<SubmitResponse>;\n\n /** Function to inject custom submit button */\n submitAction?: (props: {\n isInverted?: boolean;\n handleSubmit?: () => Promise<any>;\n isSubmitting?: boolean;\n }) => React.ReactNode;\n\n /** List of target emails */\n targetEmails?: string[];\n\n /** E-Mail subject */\n subjectLine?: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Functions to inject custom field components (React nodes) */\n definitions?: {\n field?: (props: FieldGenerationProps<Field>) => React.ReactNode;\n area?: (props: FieldGenerationProps<Area>) => React.ReactNode;\n select?: (props: FieldGenerationProps<Select>) => React.ReactNode;\n datepicker?: (\n props: FieldGenerationProps<Datepicker>\n ) => React.ReactNode;\n location?: (props: FieldGenerationProps<Location>) => React.ReactNode;\n checkbox?: (props: FieldGenerationProps<FieldGroup>) => React.ReactNode;\n radio?: (props: FieldGenerationProps<FieldGroup>) => React.ReactNode;\n upload?: (props: FieldGenerationProps<FileUpload>) => React.ReactNode;\n };\n}> = ({\n anchorId,\n fields,\n onSubmit,\n submitAction,\n definitions,\n subjectLine,\n targetEmails,\n bgMode,\n}) => {\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full' || isInverted;\n\n const [submitReponse, setSubmitResponse] = useState<SubmitResponse>();\n\n // generate initial data and setup yup validation definition\n const initalData: FormData = {};\n\n for (const key in fields) {\n switch (fields[key].type) {\n case 'Field':\n initalData[key] = (fields[key] as Field).initialValue || '';\n break;\n case 'Area':\n initalData[key] = (fields[key] as Area).initialValue || '';\n break;\n case 'Select':\n initalData[key] = (fields[key] as Select).initialOption || '';\n break;\n case 'Datepicker':\n initalData[key] = (fields[key] as Datepicker).initialDates || [\n null,\n null,\n ];\n break;\n case 'Location': {\n initalData[key] = {\n description: '',\n position: [0, 0],\n };\n break;\n }\n case 'Upload':\n initalData[key] = [];\n break;\n case 'FieldGroup': {\n const group = fields[key] as FieldGroup;\n const type = (fields[key] as FieldGroup).groupType;\n if (type === 'Checkbox') {\n const initalArray: string[] = [];\n group.fields.forEach((field) => {\n if (field.initialChecked && field.text)\n initalArray.push(field.text);\n });\n initalData[key] = initalArray;\n } else if (type === 'Radio') {\n initalData[key] = '';\n group.fields.every((field) => {\n if (field.initialChecked && field.text) {\n initalData[key] = field.text;\n return false;\n }\n return true;\n });\n }\n break;\n }\n }\n }\n\n const validation = async (values: FormData) => {\n const errors: Partial<FormData> = {};\n\n // search for errors and set them\n for (const key in fields) {\n switch (fields[key].type) {\n case 'Field': {\n const config = fields[key] as Field;\n const value = values[key] as string;\n\n // custom validation\n if (config.validate) {\n const error = await config.validate(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n // default\n const error = await fieldValidator(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n case 'Area': {\n const config = fields[key] as Area;\n const value = values[key] as string;\n\n // custom validation\n if (config.validate) {\n const error = await config.validate(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n // default\n const error = await areaValidator(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n case 'Select': {\n const config = fields[key] as Select;\n const value = values[key] as string;\n\n // custom validation\n if (config.validate) {\n const error = await config.validate(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n // default\n const error = await selectValidator(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n case 'Datepicker': {\n const config = fields[key] as Datepicker;\n const value = values[key] as [Date | null, Date | null];\n\n // custom validation\n if (config.validate) {\n const error = await config.validate(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n // default\n const error = await datepickerValidator(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n case 'Location': {\n const config = fields[key] as Location;\n const value = values[key] as LocationData;\n\n // custom validation\n if (config.validate) {\n const error = await config.validate(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n // default\n const error = await locationValidator(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n case 'FieldGroup': {\n const config = fields[key] as FieldGroup;\n const value = values[key] as Array<string> | string;\n\n // custom validation\n if (config.validate) {\n const error = await config.validate(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n // default\n const error = await fieldGroupValidator(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n case 'Upload': {\n const config = fields[key] as FileUpload;\n const files = values[key] as File[];\n\n // custom validation\n if (config.validate) {\n const error = await config.validate(key, files, config);\n if (error) errors[key] = error;\n break;\n }\n\n // default\n const error = await uploadValidator(key, files, config);\n if (error) errors[key] = error;\n break;\n }\n }\n }\n\n return errors;\n };\n\n // formik hook\n const {\n handleSubmit,\n handleChange,\n handleBlur,\n setFieldTouched,\n setSubmitting,\n validateField,\n submitForm,\n setValues,\n isSubmitting,\n touched,\n values,\n errors,\n dirty,\n validateOnBlur,\n validateOnChange,\n } = useFormik<FormData>({\n initialValues: {\n ...initalData,\n } as FormData,\n\n onSubmit: async (values, helpers) => {\n const valuesAndMails = {\n ...values,\n targetEmails: targetEmails || [],\n subjectLine: subjectLine || '',\n };\n\n if (!onSubmit) {\n setSubmitting(false);\n return;\n }\n\n const response = await onSubmit(valuesAndMails);\n helpers.resetForm({ values });\n setSubmitResponse(response);\n\n if (response.isError) {\n setSubmitting(false);\n }\n },\n validateOnBlur: true,\n validateOnChange: true,\n validate: validation,\n });\n\n // save last react state\n const latestValuesRef = useRef<FormData>({ ...initalData } as FormData);\n const { theme } = useLibTheme();\n\n // rewrite setFieldValue to prevent loadash feature of Formik: https://github.com/jaredpalmer/formik/issues/2262\n const setField = useCallback(\n (props: {\n key: string;\n value: any;\n prevValues: FormData;\n shouldValidate?: boolean;\n }) => {\n return setValues(\n { ...latestValuesRef.current, [props.key]: props.value },\n props.shouldValidate\n );\n },\n [setValues]\n );\n\n const fieldKeys = fields && Object.keys(fields);\n\n useEffect(() => {\n latestValuesRef.current = { ...values };\n }, [values]);\n\n return (\n <StyledSection\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? color(theme).sectionBg.dark\n : bgMode\n ? color(theme).sectionBg.medium\n : color(theme).sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <Form noValidate onSubmit={handleSubmit}>\n <FieldContainer>\n {fields &&\n fieldKeys?.map((label, i) => {\n const props = {\n index: i,\n field: fields[label],\n key: label,\n value: values[label],\n error: errors[label],\n isTouched: touched[label] || false,\n isInverted: isInverted,\n hasBg: hasBg,\n setField: setField,\n setTouched: setFieldTouched,\n validateField: validateField,\n handleChange: handleChange,\n handleBlur: handleBlur,\n validateOnBlur,\n validateOnChange,\n theme: theme,\n } as FieldGenerationProps<any>;\n\n switch (fields[label].type) {\n case 'Field': {\n if (definitions?.field) {\n return definitions.field(props);\n } else {\n return renderField(props);\n }\n }\n\n case 'Area': {\n if (definitions?.area) {\n return definitions.area(props);\n } else {\n return renderAreaField(props);\n }\n }\n\n case 'Datepicker': {\n if (definitions?.datepicker) {\n return definitions.datepicker(\n props\n );\n } else {\n return renderDatepickerField(props);\n }\n }\n\n case 'Location': {\n if (definitions?.location) {\n return definitions.location(props);\n } else {\n return renderLocationField(props);\n }\n }\n\n case 'FieldGroup': {\n if (\n (fields[label] as FieldGroup)\n .groupType === 'Checkbox'\n ) {\n if (definitions?.checkbox) {\n return definitions.checkbox(\n props\n );\n } else {\n return renderCheckboxGroupField(\n props\n );\n }\n } else {\n if (definitions?.radio) {\n return definitions.radio(props);\n } else {\n return renderRadioGroupField(\n props\n );\n }\n }\n }\n\n case 'Select': {\n if (definitions?.select) {\n return definitions.select(props);\n } else {\n return renderSelectField(props);\n }\n }\n\n case 'Upload': {\n if (definitions?.upload) {\n return definitions.upload(props);\n } else {\n return renderUploadField(props);\n }\n }\n default:\n return null;\n }\n })}\n </FieldContainer>\n </Form>\n {(fields || submitReponse?.message) && (\n <FormFooter>\n {submitReponse?.message && !dirty && (\n <Status\n textColor={\n submitReponse?.isError\n ? color(theme).error\n : isInverted\n ? color(theme).text.copyInverted\n : color(theme).text.copy\n }\n >\n {submitReponse.message || ''}\n </Status>\n )}\n {fields && (\n <ActionContainer>\n <Actions\n primary={\n submitAction ? (\n submitAction({\n isInverted,\n isSubmitting,\n handleSubmit: submitForm,\n })\n ) : (\n <Button.View\n as=\"button\"\n onClick={submitForm}\n {...{\n type: 'submit',\n }}\n >\n <Button.Label>\n Send mail\n </Button.Label>\n </Button.View>\n )\n }\n />\n </ActionContainer>\n )}\n </FormFooter>\n )}\n </Wrapper>\n </StyledSection>\n );\n};\n\nexport const DynamicFormComponent = DynamicForm;\nexport default withLibTheme(DynamicForm);\n","import React from 'react';\n\nimport Textfield from 'components/fields/Textfield';\nimport { Field, FieldGenerationProps } from '../DynamicForm';\n\nconst renderField = ({\n field,\n key,\n value,\n error,\n isTouched,\n handleChange,\n handleBlur,\n isInverted,\n}: FieldGenerationProps<Field>) => (\n <Textfield\n key={key}\n enableMemo\n label={`${key}${field.isRequired ? ' *' : ''}`}\n placeholder={field.placeholder}\n name={`['${key}']`}\n type={field.inputType}\n isInverted={isInverted}\n value={value as string}\n onChange={handleChange}\n onBlur={handleBlur}\n infoMessage={field.info}\n errorMessage={error && isTouched ? error : undefined}\n />\n);\n\nexport default renderField;\n","import React from 'react';\n\nimport Textarea from 'components/fields/Textarea';\nimport { Area, FieldGenerationProps } from '../DynamicForm';\n\nconst renderAreaField = ({\n field,\n key,\n value,\n error,\n isTouched,\n isInverted,\n handleChange,\n handleBlur,\n}: FieldGenerationProps<Area>) => (\n <Textarea\n key={key}\n enableMemo\n label={`${key}${field.isRequired ? ' *' : ''}`}\n placeholder={field.placeholder}\n name={`['${key}']`}\n value={value as string}\n isInverted={isInverted}\n onChange={handleChange}\n onBlur={handleBlur}\n infoMessage={field.info}\n errorMessage={error && isTouched ? error : undefined}\n />\n);\n\nexport default renderAreaField;\n","import React from 'react';\nimport DatepickerCmp from 'components/fields/Datepicker';\nimport { Datepicker, FieldGenerationProps } from '../DynamicForm';\nimport ButtonGhost from 'components/buttons/ButtonGhost';\nimport Button from 'components/buttons/Button';\n\nconst renderDatepickerField = ({\n key,\n field,\n value,\n error,\n isTouched,\n isInverted,\n setField,\n setTouched,\n validateField,\n}: FieldGenerationProps<Datepicker>) => {\n const dates = value as [Date | null, Date | null];\n\n const handleSubmit = async (start?: Date | null, end?: Date | null) => {\n await setTouched(key, true);\n await setField({\n key,\n value: [start || null, end || null],\n });\n validateField(key);\n };\n\n return (\n <DatepickerCmp\n key={key}\n enableMemo\n onSubmit={handleSubmit}\n onDataChange={handleSubmit}\n values={[dates?.[0] as Date, dates?.[1] as Date]}\n label={`${key}${field.isRequired ? ' *' : ''}`}\n placeholder={field.placeholder}\n singleSelect={field.singleSelect}\n infoMessage={field.info}\n errorMessage={error && isTouched ? error : undefined}\n name={key}\n customIcon={field?.customIcon}\n isInverted={isInverted}\n minDate={field.minDate}\n maxDate={field.maxDate}\n deleteAction={(handleReset) =>\n field?.deleteAction ? (\n field.deleteAction(handleReset)\n ) : (\n <ButtonGhost.View onClick={handleReset}>\n delete\n </ButtonGhost.View>\n )\n }\n submitAction={(handleSubmit) =>\n field?.submitAction ? (\n field.submitAction(handleSubmit)\n ) : (\n <Button.View onClick={handleSubmit}>submit</Button.View>\n )\n }\n nextCtrlUrl={field.nextCtrlUrl}\n prevCtrlUrl={field.prevCtrlUrl}\n />\n );\n};\n\nexport default renderDatepickerField;\n","import React from 'react';\n\nimport LocationField, { LocationData } from 'components/fields/LocationField';\nimport { FieldGenerationProps } from '../DynamicForm';\nimport { Location } from '../DynamicForm';\n\nconst renderLocationField = ({\n key,\n field,\n value,\n error,\n isTouched,\n isInverted,\n setField,\n}: FieldGenerationProps<Location>) => {\n const locationData = value as LocationData;\n const mappedData = {\n ...locationData,\n position:\n !locationData?.position?.[0] && !locationData?.position?.[1]\n ? undefined\n : locationData.position,\n };\n\n const handleChange = (location: LocationData) => {\n setField({\n key,\n value: { ...location },\n shouldValidate: true,\n });\n };\n\n return (\n <LocationField\n key={key}\n enableMemo\n name={`['${key}']`}\n label={`${key}${field.isRequired ? ' *' : ''}`}\n placeholder={field.placeholder}\n initialMapCenter={field.initialMapCenter}\n zoom={field.zoom}\n isInverted={isInverted}\n infoMessage={field.info}\n errorMessage={error && isTouched ? error : undefined}\n value={mappedData}\n onChange={handleChange}\n customLocationControl={field.customLocationControl}\n customToggle={field.customToggle}\n customResetControl={field.customResetControl}\n toggleLabel={field.toggleLabel}\n trackLocationLabel={field.trackLocationLabel}\n />\n );\n};\n\nexport default renderLocationField;\n","import React from 'react';\n\nimport SelectDropdown from 'components/fields/SelectDropdown';\nimport { Select, FieldGenerationProps } from '../DynamicForm';\n\nconst renderSelectField = ({\n field,\n key,\n value,\n error,\n isTouched,\n isInverted,\n setField,\n setTouched,\n validateField,\n validateOnChange,\n validateOnBlur,\n}: FieldGenerationProps<Select>) => {\n const selectedItem = value as string;\n\n return (\n <SelectDropdown\n key={key}\n enableMemo\n label={`${key}${field.isRequired ? ' *' : ''}`}\n name={key}\n placeholder={field.placeholder}\n errorMessage={error && isTouched ? error : undefined}\n items={field.dropdownItems\n ?.filter((item) => item.label)\n ?.map((item) => ({\n label: item.label || '',\n value: item.value || {},\n }))}\n selectedItem={selectedItem}\n onChange={async (selectedOption) => {\n setField({ key, value: selectedOption });\n await setTouched(key, true);\n if (validateOnChange) validateField(key);\n }}\n onBlur={() => setTouched(key, true, validateOnBlur)}\n indicator={field.indicator}\n isInverted={isInverted}\n />\n );\n};\n\nexport default renderSelectField;\n","import FileUploadCmp from 'components/fields/FileUpload';\nimport React from 'react';\n\nimport { FileUpload, FieldGenerationProps } from '../DynamicForm';\n\nconst renderUploadField = ({\n field,\n key,\n error,\n isTouched,\n isInverted,\n setField,\n}: FieldGenerationProps<FileUpload>) => (\n <FileUploadCmp\n key={key}\n enableMemo\n label={`${key}${field.isRequired ? ' *' : ''}`}\n name={key}\n infoMessage={field.info}\n uploadLabel={field.addBtnLabel}\n errorMessage={error && isTouched ? error : undefined}\n acceptedFormats={field.acceptedFormats}\n onUploadFiles={(files) => {\n setField({ key, value: files });\n }}\n customUploadIcon={field.customUploadIcon}\n customDeleteIcon={field.customDeleteIcon}\n isInverted={isInverted}\n />\n);\n\nexport default renderUploadField;\n","import React, { FC, useCallback, useRef } from 'react';\nimport styled, { DefaultTheme } from 'styled-components';\n\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport Textfield from 'components/fields/Textfield';\nimport { FormikErrors, useFormik } from 'formik';\nimport Actions from 'components/blocks/Actions';\nimport Button from 'components/buttons/Button';\n\nconst Form = styled.form`\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n @media ${mq.semilarge} {\n flex-direction: row;\n }\n`;\n\nconst FieldContainer = styled.div`\n flex: 1 1 0;\n text-align: center;\n\n & + & {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n max-width: 590px;\n\n & + & {\n margin-top: 0;\n }\n\n &:first-child {\n padding-right: ${spacings.nudge * 3}px;\n }\n\n &:last-child {\n padding-left: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst ActionContainer = styled.div`\n width: 100%;\n max-width: 590px;\n\n margin: 0 auto;\n margin-top: ${spacings.spacer * 2}px;\n\n text-align: center;\n`;\n\nexport interface FieldGenerationProps {\n field: NewsletterField;\n value: string;\n error: string;\n info?: string;\n isTouched: boolean;\n key: string;\n isInverted: boolean;\n theme: DefaultTheme;\n setField: (\n field: string,\n value: any,\n shouldValidate?: boolean | undefined\n ) => Promise<void> | Promise<FormikErrors<FormData>>;\n validateField: (\n name: string\n ) => Promise<string | undefined> | Promise<void>;\n setTouched: (\n field: string,\n touched?: boolean | undefined,\n shouldValidate?: boolean | undefined\n ) => Promise<void> | Promise<FormikErrors<FormData>>;\n handleChange: {\n (e: React.ChangeEvent<any>): void;\n <T_1 = string | React.ChangeEvent<any>>(\n field: T_1\n ): T_1 extends React.ChangeEvent<any>\n ? void\n : (e: string | React.ChangeEvent<any>) => void;\n };\n handleBlur: {\n (e: React.FocusEvent<any>): void;\n <T = any>(fieldOrEvent: T): T extends string ? (e: any) => void : void;\n };\n validateOnBlur?: boolean;\n validateOnChange?: boolean;\n}\n\nexport interface NewsletterFormStructure {\n [key: string]: NewsletterField;\n}\n\nexport interface FormData {\n [key: string]: string;\n}\n\nexport interface NewsletterField {\n inputType?: 'text' | 'number' | 'email' | 'password' | 'tel';\n isRequired?: boolean;\n label?: string;\n errorMsg?: string;\n initialValue?: string;\n placeholder?: string;\n info?: string;\n validate?: (\n key: string,\n value: string,\n config: NewsletterField\n ) => Promise<string>;\n}\n\nconst NewsletterForm: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Structure to define fields of newsletter form */\n fields?: NewsletterFormStructure;\n\n /** Function to inject custom field definition */\n customField?: (props: FieldGenerationProps) => React.ReactNode;\n\n /** HTML form element action */\n action?: string;\n\n /** HTML form element method */\n method?: string;\n\n /** Form submission callback */\n onSubmit?: (values: FormData, element: HTMLFormElement) => Promise<void>;\n\n /** Function to inject custom submit button */\n submitAction?: (props: {\n isInverted?: boolean;\n handleSubmit?: () => Promise<any>;\n isDisabled?: boolean;\n }) => React.ReactNode;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({\n anchorId,\n bgMode,\n fields,\n customField,\n action,\n method,\n submitAction,\n onSubmit,\n}) => {\n const { theme } = useLibTheme();\n const formRef = useRef<HTMLFormElement>(null);\n const isInverted = bgMode === 'inverted';\n\n // generate initial data and setup yup validation definition\n const initialData: FormData = {};\n\n for (const key in fields) {\n initialData[key] = fields[key].initialValue || '';\n }\n\n const validation = async (values: FormData) => {\n const errors: Partial<FormData> = {};\n\n // search for errors and set them\n for (const key in fields) {\n const config = fields[key];\n const inputType = config.inputType;\n\n // default\n if (fields[key].isRequired && !values[key]) {\n errors[key] = fields[key].errorMsg || 'Required field';\n }\n\n // custom validation\n if (config.validate) {\n const error = await config.validate(\n key,\n values[key] as string,\n config\n );\n if (error) errors[key] = error;\n break;\n }\n\n switch (inputType) {\n case 'email':\n if (\n values[key] &&\n !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(\n values[key] as string\n )\n ) {\n errors[key] =\n fields[key].errorMsg || 'Invalid Mail format';\n }\n break;\n case 'tel':\n if (values[key] && /[A-Z]/gi.test(values[key] as string)) {\n errors[key] =\n fields[key].errorMsg || 'Ungültige Telefonnummer';\n }\n break;\n case 'number':\n if (\n values[key] &&\n !/^[+]?\\d+([.]\\d+)?$/gm.test(values[key] as string)\n ) {\n errors[key] =\n fields[key].errorMsg || 'Zahlenformat ungültig';\n }\n break;\n }\n }\n\n return errors;\n };\n\n // formik hook\n const {\n handleSubmit,\n handleChange,\n handleBlur,\n setFieldTouched,\n setSubmitting,\n validateField,\n submitForm,\n setValues,\n isSubmitting,\n touched,\n values,\n errors,\n dirty,\n validateOnBlur,\n validateOnChange,\n } = useFormik<FormData>({\n initialValues: {\n ...initialData,\n } as FormData,\n\n onSubmit: async (values) => {\n if (!formRef.current) return;\n\n if (action && method) {\n formRef.current.submit();\n } else {\n onSubmit && (await onSubmit(values, formRef.current));\n }\n\n setSubmitting(false);\n },\n validateOnBlur: true,\n validateOnChange: true,\n validate: validation,\n });\n\n // rewrite setFieldValue to prevent loadash feature of Formik: https://github.com/jaredpalmer/formik/issues/2262\n const setField = useCallback(\n async (key: string, value: any, shouldValidate?: boolean) => {\n return setValues({ ...values, [key]: value }, shouldValidate);\n },\n [setValues, values]\n );\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? color(theme).sectionBg.dark\n : bgMode\n ? color(theme).sectionBg.medium\n : color(theme).sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <Form\n ref={formRef}\n action={action}\n method={method}\n onSubmit={handleSubmit}\n >\n <FieldContainer>\n {fields &&\n Object.keys(fields).map((key, i) => {\n const generationProps = {\n index: i,\n field: fields[key],\n key: key,\n value: values[key],\n error: errors[key],\n isTouched: touched[key] || false,\n isInverted: isInverted,\n setField: setField,\n setTouched: setFieldTouched,\n validateField: validateField,\n handleChange: handleChange,\n handleBlur: handleBlur,\n validateOnBlur,\n validateOnChange,\n theme: theme,\n } as FieldGenerationProps;\n\n return customField\n ? customField(generationProps)\n : generateTextField(generationProps);\n })}\n </FieldContainer>\n </Form>\n {fields && (\n <ActionContainer>\n <Actions\n primary={\n submitAction ? (\n submitAction({\n isInverted,\n isDisabled: isSubmitting || !dirty,\n handleSubmit: submitForm,\n })\n ) : (\n <Button.View\n as=\"button\"\n onClick={submitForm}\n isDisabled={isSubmitting || !dirty}\n {...{\n type: 'submit',\n }}\n >\n <Button.Label>send</Button.Label>\n </Button.View>\n )\n }\n />\n </ActionContainer>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nconst generateTextField = ({\n key,\n field,\n isInverted,\n value,\n handleChange,\n handleBlur,\n error,\n isTouched,\n}: FieldGenerationProps) => (\n <Textfield\n key={key}\n label={`${field.label || key}${field.isRequired ? '*' : ''}`}\n placeholder={field.placeholder}\n name={`${key}`}\n isInverted={isInverted}\n value={value as string}\n onChange={handleChange}\n onBlur={handleBlur}\n infoMessage={field.info}\n errorMessage={error && isTouched ? error : undefined}\n />\n);\n\nexport const NewsletterFormComponent = NewsletterForm;\nexport default withLibTheme(NewsletterForm);\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Filter: React.FC<{\n iconColor?: string;\n className?: string;\n ariaHidden?: boolean;\n}> = ({ iconColor = 'currentColor', className, ariaHidden = true }) => (\n <SVG\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n className={className}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden={ariaHidden}\n >\n <path\n d=\"M10 18h4v-2h-4v2ZM3 6v2h18V6H3Zm3 7h12v-2H6v2Z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Filter;\n","import Filter from 'components/base/icons/Filter';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport EventBlock, { EventProps } from 'components/blocks/EventBlock';\nimport Tag, { TagProps } from 'components/blocks/Tag';\nimport Pointer from 'components/buttons/Pointer';\nimport Copy from 'components/typography/Copy';\nimport React, { useCallback, useEffect, useMemo } from 'react';\nimport styled, { DefaultTheme } from 'styled-components';\nimport { isValidArray } from 'utils/arrays';\nimport { concat } from 'utils/concat';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport StatusFormatter from 'utils/statusFormatter';\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport { deleteUrlParam, getUrlParams, setUrlParam } from 'utils/urlParams';\nimport useMounted from 'utils/useMounted';\nimport { useObserverSupport } from 'utils/useObserverSupport';\nimport { useScrollTo } from 'utils/useScrollTo';\nimport useUpdateEffect from 'utils/useUpdateEffect';\n\nconst TagContainer = styled.div`\n margin-top: -${spacings.nudge}px;\n margin-left: -${spacings.nudge}px;\n\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n\n &:not(:only-child) {\n margin-bottom: ${spacings.nudge * 6}px;\n }\n`;\n\nconst TagWrapper = styled.div`\n padding-top: ${spacings.nudge}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst Events = styled.ul<{ hasBg?: boolean }>`\n list-style-type: none;\n margin: 0;\n padding: 0;\n\n & > * + * {\n border-top: 1px solid\n ${({ theme, hasBg }) =>\n hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n\n & > *:first-of-type {\n border-top: 1px solid\n ${({ theme, hasBg }) =>\n hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n\n & > *:last-of-type {\n border-bottom: 1px solid\n ${({ theme, hasBg }) =>\n hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n`;\n\nconst FilterIcon = styled(Copy)`\n display: flex;\n flex-direction: row;\n align-items: center;\n\n padding: ${spacings.nudge / 2}px ${spacings.nudge}px 0 0;\n\n & > * + * {\n margin-left: ${spacings.nudge}px;\n }\n`;\n\nconst EventItem = styled.li`\n padding: ${spacings.nudge * 3}px 0;\n`;\n\nconst ListFooter = styled.div`\n margin-top: ${spacings.nudge * 6}px;\n text-align: center;\n\n @media ${mq.medium} {\n text-align: left;\n }\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 2 ? 'block' : 'none'};\n`;\n\nexport const getEventFilterParams = (\n url: string,\n theme: DefaultTheme,\n tags: string[] = []\n) => {\n if (!url || !theme) return '';\n if (!isValidArray(tags, false)) return url;\n\n const filterName = theme.globals.sections.eventFilterName;\n if (!filterName) return url;\n\n try {\n const validUrl = new URL(url);\n const newParams = new URLSearchParams(validUrl.search);\n newParams.set(filterName, encodeURIComponent(tags.join(',')));\n\n return `${url}?${newParams.toString()}`;\n } catch (err) {\n return `${url}?${filterName}=${encodeURIComponent(tags.join(','))}`;\n }\n};\n\nexport type EventItem = Omit<\n EventProps,\n 'customTag' | 'isInverted' | 'onTagClick' | 'text'\n> & { address?: string };\n\nconst EventOverview: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of event item settings */\n events?: EventItem[];\n\n /** Tags for events filtering */\n tags?: string[];\n\n /** Initial data. If not defined the component tries to collect this from URL params */\n initial?: {\n activeTags?: string[];\n visibleRows?: number;\n };\n\n /** Text for load more toggle. Only visible if browser doesn't support IntersectionObserver. */\n showMoreText?: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /**\n * Callback function to handle tag click outside of component\n * If no callback is defined filtering is controlled on client\n * */\n onTagClick?: (tag: TagProps, insideList?: boolean) => void;\n\n /** Function to inject custom tag node */\n customTag?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n isActive?: boolean;\n clickHandler?: (ev?: React.SyntheticEvent<HTMLElement>) => void;\n }) => React.ReactNode;\n}> = ({\n tags,\n events,\n bgMode,\n anchorId,\n initial,\n showMoreText,\n onTagClick,\n customTag,\n}) => {\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const { colors, globals } = useLibTheme();\n const filterName = globals.sections.eventFilterName;\n\n const [selectedTags, setSelectedTags] = React.useState<string[]>(\n initial?.activeTags || []\n );\n const [itemsPerRow] = React.useState(1);\n const [visibleRows, setVisibleRows] = React.useState(\n initial?.visibleRows || 3\n );\n\n const targetRef = React.useRef<HTMLDivElement>(null);\n const observerSupported = useObserverSupport();\n const isMounted = useMounted();\n\n const eventCount = events?.length || 0;\n const setNewPos = useScrollTo(800);\n\n const getFilters = useCallback(() => {\n const tags: string[] = [];\n\n const filters = getUrlParams()[filterName];\n if (filters) {\n const tagsFilter = filters?.split(',');\n if (isValidArray(tagsFilter, false)) {\n tags.push(...tagsFilter);\n }\n }\n return tags;\n }, [filterName]);\n\n useEffect(() => {\n // if initial data is defined exit hook\n if (initial) return;\n\n // if no initial data provied try to find needed params in URL\n const paramTags = getFilters();\n\n if (isValidArray(paramTags, false)) {\n setSelectedTags(paramTags);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getFilters, initial]);\n\n useEffect(() => {\n if (!initial || isMounted) return;\n\n // set inital data into URL\n setUrlParam('rows', initial?.visibleRows || 3);\n\n if (isValidArray(initial?.activeTags, false)) {\n setUrlParam(filterName, initial?.activeTags?.join(','));\n } else {\n deleteUrlParam(filterName);\n }\n }, [filterName, initial, isMounted]);\n\n useUpdateEffect(() => {\n setUrlParam('rows', visibleRows);\n }, [visibleRows]);\n\n useUpdateEffect(() => {\n if (onTagClick || !isValidArray(selectedTags)) return;\n\n // set filters to URL params\n if (selectedTags.length > 0) {\n setUrlParam(filterName, selectedTags.join(','));\n } else {\n deleteUrlParam(filterName);\n }\n }, [selectedTags]);\n\n const handleTagClick = (tag: TagProps, enableToggling = true) => {\n setSelectedTags((prev) => {\n const prevCopy = [...prev];\n const itemIndex = tag.name ? prev.indexOf(tag.name) : -1;\n\n if (itemIndex === -1 && tag.name) {\n return [...prevCopy, tag.name];\n }\n if (enableToggling) {\n prevCopy.splice(itemIndex, 1);\n return prevCopy;\n }\n return prev;\n });\n setVisibleRows(3);\n };\n\n const filteredEvents = useMemo(() => {\n const tagFilterFn = (item: EventItem) => {\n if (!isValidArray(selectedTags, false)) return true;\n if (!item.tags) return false;\n\n let hasTags = false;\n for (let i = 0; i < item.tags.length; i++) {\n if (selectedTags.indexOf(item.tags[i].name || '') !== -1) {\n hasTags = true;\n break;\n }\n }\n return hasTags;\n };\n\n let filtered = isValidArray(events) ? [...events] : [];\n\n // adding filter\n filtered = filtered?.filter(tagFilterFn);\n\n return filtered;\n }, [events, selectedTags]);\n\n const visibleEvents = useMemo(() => {\n return (\n filteredEvents?.filter((_, i) => i < visibleRows * itemsPerRow) ||\n []\n );\n }, [filteredEvents, itemsPerRow, visibleRows]);\n\n useEffect(() => {\n // cancel if intersection observers are not supported\n if (!observerSupported) return;\n\n const element = targetRef.current;\n let observer: IntersectionObserver;\n\n if (element) {\n const options = {\n rootMargin: '0px 0px 100px 0px',\n threshold: 0,\n };\n\n observer = new IntersectionObserver((entries) => {\n const entry = entries[0];\n if (entry?.isIntersecting) {\n // on bottom of the wrapper load more events\n if (\n visibleRows <\n Math.ceil(filteredEvents.length / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }\n }, options);\n observer.observe(element);\n }\n\n return () => {\n if (observer) observer.disconnect();\n };\n }, [\n itemsPerRow,\n eventCount,\n visibleRows,\n observerSupported,\n filteredEvents.length,\n ]);\n\n const filteredTags = useMemo(() => {\n return tags?.filter((tag) => tag);\n }, [tags]);\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {isValidArray(filteredTags, false) && (\n <TagContainer>\n <FilterIcon\n size=\"small\"\n type=\"copy\"\n isInverted={isInverted}\n >\n <Filter />\n <span>Filter</span>\n </FilterIcon>\n {filteredTags.map((tag, i) => (\n <TagWrapper key={i}>\n {customTag ? (\n customTag({\n key: i,\n name: tag,\n isInverted: isInverted,\n isActive:\n selectedTags.indexOf(tag) !== -1,\n clickHandler: (ev) => {\n ev?.preventDefault();\n if (!onTagClick) {\n handleTagClick({ name: tag });\n } else onTagClick({ name: tag });\n },\n })\n ) : (\n <Tag\n isInverted={isInverted}\n onClick={(ev) => {\n ev?.preventDefault();\n if (!onTagClick) {\n handleTagClick({ name: tag });\n } else\n onTagClick(\n { name: tag },\n false\n );\n }}\n isActive={\n selectedTags.indexOf(tag) !== -1\n }\n >\n {tag}\n </Tag>\n )}\n </TagWrapper>\n ))}\n </TagContainer>\n )}\n <Events hasBg={hasBg}>\n {visibleEvents.map((item, i) => {\n let timespan = '';\n\n if (item.date) {\n const formatter = new StatusFormatter(\n item.date.getTime(),\n '',\n globals.sections.eventDateFormat(item.date),\n globals.sections.eventTimeFormat(item.date),\n globals.sections.eventLocaleKey\n );\n\n timespan = formatter.getFormattedTimespan(\n globals.sections.eventTimespanFormat(\n item.date,\n item.duration\n ),\n item.duration\n );\n }\n\n const text = concat([timespan, item.address], ' | ');\n\n return (\n <EventItem key={`${i}_event_${item.title}`}>\n <EventBlock\n {...item}\n text={text}\n tags={item.tags?.map((tag) => ({\n name: tag.name,\n }))}\n isInverted={isInverted}\n onTagClick={(tag) => {\n // scroll back to top\n setNewPos(0);\n if (!onTagClick) {\n // if no callback is defined handle filtering on client side inside the component\n handleTagClick(\n { name: tag.name },\n false\n );\n } else {\n onTagClick(\n { name: tag.name },\n true\n );\n }\n }}\n customTag={customTag}\n />\n </EventItem>\n );\n })}\n </Events>\n <div ref={targetRef} />\n {!observerSupported && (\n <ListFooter>\n {events && events.length > 0 && (\n <Copy\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n >\n <ShowMore\n itemCount={events.length}\n onClick={(ev) => {\n ev.preventDefault();\n if (\n visibleRows <\n Math.ceil(\n filteredEvents.length /\n itemsPerRow\n )\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows <\n filteredEvents.length / itemsPerRow && (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMoreText ||\n 'mehr anzeigen'}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n </Copy>\n )}\n </ListFooter>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const EventOverviewComponent = EventOverview;\nexport default withLibTheme(EventOverview);\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport EventBlock, { EventProps } from 'components/blocks/EventBlock';\nimport { getColors as color, spacings } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { LinkProps } from 'components/typography/Link';\nimport StatusFormatter from 'utils/statusFormatter';\nimport { concat } from 'utils/concat';\nimport { getEventFilterParams } from './EventOverview';\n\nconst List = styled.ul<{ hasBg?: boolean }>`\n list-style: none;\n margin: 0;\n padding: 0;\n\n & > * + * {\n border-top: 1px solid\n ${({ theme, hasBg }) =>\n hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n\n & > *:first-of-type {\n border-top: 1px solid\n ${({ theme, hasBg }) =>\n hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n\n & > *:last-of-type {\n border-bottom: 1px solid\n ${({ theme, hasBg }) =>\n hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n`;\n\nconst ListItem = styled.li`\n padding: ${spacings.nudge * 3}px 0;\n`;\n\nexport type EventItem = Omit<\n EventProps,\n 'customTag' | 'isInverted' | 'onTagClick' | 'text'\n> & { address?: string };\n\nconst EventList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of event item settings */\n events?: EventItem[];\n\n /** Section background */\n bgMode?: 'inverted' | 'full';\n\n /** Function to inject custom tag node */\n customTag?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n isActive?: boolean;\n link?: LinkProps;\n }) => React.ReactNode;\n}> = ({ anchorId, events, bgMode, customTag }) => {\n const { colors, globals, theme } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <List hasBg={hasBg}>\n {events?.map((event, i) => {\n let timespan = '';\n\n if (event.date) {\n const formatter = new StatusFormatter(\n event.date.getTime(),\n '',\n globals.sections.eventDateFormat(event.date),\n globals.sections.eventTimeFormat(event.date),\n globals.sections.eventLocaleKey\n );\n\n timespan = formatter.getFormattedTimespan(\n globals.sections.eventTimespanFormat(\n event.date,\n event.duration\n ),\n event.duration\n );\n }\n\n const text = concat([timespan, event.address], ' | ');\n\n return (\n <ListItem key={i}>\n <EventBlock\n {...event}\n tags={event.tags?.map((tag) => {\n let tagHref: string | undefined =\n undefined;\n\n if (tag.name && tag.link?.href) {\n tagHref = getEventFilterParams(\n tag.link.href,\n theme,\n [tag.name]\n );\n }\n\n return {\n name: tag.name,\n link: tag.link?.href\n ? {\n ...tag.link,\n href: tagHref,\n }\n : undefined,\n };\n })}\n isInverted={isInverted}\n text={text}\n customTag={customTag}\n />\n </ListItem>\n );\n })}\n </List>\n </Wrapper>\n </Section>\n );\n};\n\nexport const EventListComponent = EventList;\nexport default withLibTheme(EventList);\n","import React, { useMemo } from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { EventProps } from 'components/blocks/EventBlock';\nimport Image from 'components/blocks/Image';\nimport Tag from 'components/blocks/Tag';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\nimport { LinkProps } from 'components/typography/Link';\nimport { mq, spacings } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Grid from 'components/base/Grid';\nimport StatusFormatter from 'utils/statusFormatter';\nimport InfoList from 'components/blocks/InfoList';\nimport { isValidArray } from 'utils/arrays';\n\nconst StyledImage = styled(Image)`\n &:not(:last-child) {\n margin-bottom: ${spacings.spacer}px;\n }\n`;\n\nconst TagContainer = styled.div`\n max-width: 880px;\n margin-top: -${spacings.nudge}px;\n margin-left: -${spacings.nudge}px;\n\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n`;\n\nconst TagWrapper = styled.div`\n padding-top: ${spacings.nudge}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst EventTitle = styled(Heading)`\n max-width: 880px;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2; /* number of lines to show */\n line-clamp: 2;\n -webkit-box-orient: vertical;\n }\n`;\n\nconst EventDateTime = styled(Copy)`\n max-width: 880px;\n /* overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; */\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst EventAddress = styled(Copy)`\n max-width: 880px;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n ${EventDateTime} + & {\n margin-top: ${spacings.nudge}px;\n }\n\n @media ${mq.semilarge} {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n`;\n\nconst EventText = styled(Copy)`\n max-width: 880px;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nexport type DetailEventProps = Omit<\n EventProps,\n 'customTag' | 'isInverted' | 'onTagClick' | 'link'\n>;\n\nexport interface EventInfoGroup {\n title?: string;\n items: EventInfo[];\n}\n\nexport interface EventInfo {\n /** icon injection function */\n icon?: (isInverted?: boolean) => React.ReactNode;\n /** Event info text (richtText) */\n text?: string;\n}\n\nconst EventDetail: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of event item settings */\n event: DetailEventProps & { address?: string; abstract?: string };\n\n /** Additional event infos */\n infos?: EventInfoGroup[];\n\n /** Section background */\n bgMode?: 'inverted' | 'full';\n\n /** Function to inject custom tag node */\n customTag?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n isActive?: boolean;\n link?: LinkProps;\n }) => React.ReactNode;\n}> = ({ anchorId, event, infos, bgMode, customTag }) => {\n const { colors, globals } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n const hasInfos = useMemo(() => {\n return isValidArray(\n infos?.filter((info) => isValidArray(info.items, false)),\n false\n );\n }, [infos]);\n\n let publishedAt = '';\n let timespan = '';\n\n if (event?.date) {\n const formatter = new StatusFormatter(\n event.date.getTime(),\n '',\n globals.sections.eventDateFormat(event.date),\n globals.sections.eventTimeFormat(event.date),\n globals.sections.eventLocaleKey\n );\n publishedAt = formatter.getFormattedDate();\n\n timespan = formatter.getFormattedTimespan(\n globals.sections.eventTimespanFormat(event.date, event.duration),\n event.duration\n );\n }\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {event.image?.small && (\n <StyledImage\n {...event.image}\n coverSpace\n allowEdgeRadius\n isInverted={isInverted}\n />\n )}\n <Grid.Row\n gutter={spacings.nudge * 5}\n semilarge={{ gutter: spacings.spacer }}\n >\n <Grid.Col semilarge={{ span: hasInfos ? 5.7 / 8 : 1 }}>\n {event.tags && (\n <TagContainer>\n {event.tags.map((tag, i) => (\n <TagWrapper key={'tag_' + i}>\n {customTag ? (\n customTag({\n key: `headtag-${i}`,\n name: tag.name || '',\n isInverted: isInverted,\n isActive: false,\n link: tag.link,\n })\n ) : (\n <Tag\n link={tag.link}\n isInverted={isInverted}\n >\n {tag.name}\n </Tag>\n )}\n </TagWrapper>\n ))}\n </TagContainer>\n )}\n {event.title && (\n <EventTitle\n size=\"heading-2\"\n isInverted={isInverted}\n >\n {event.title}\n </EventTitle>\n )}\n {publishedAt && (\n <EventDateTime size=\"big\" type=\"copy-b\">\n {publishedAt || ''}\n {publishedAt && timespan ? ' | ' : ''}\n {timespan}\n </EventDateTime>\n )}\n {event.address && (\n <EventAddress\n size=\"big\"\n type=\"copy\"\n innerHTML={event.address}\n />\n )}\n {event.abstract && (\n <EventText\n size=\"medium\"\n type=\"copy-b\"\n isInverted={isInverted}\n >\n {event.abstract}\n </EventText>\n )}\n {event.text && (\n <EventText\n size=\"medium\"\n isInverted={isInverted}\n innerHTML={event.text}\n />\n )}\n </Grid.Col>\n {hasInfos && (\n <Grid.Col semilarge={{ span: 2.3 / 8 }}>\n <InfoList isInverted={isInverted} items={infos} />\n </Grid.Col>\n )}\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const EventDetailComponent = EventDetail;\nexport default withLibTheme(EventDetail);\n","import React, { forwardRef } from 'react';\nimport styled from 'styled-components';\n\nimport { spacings, getGlobals as global } from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Copy from 'components/typography/Copy';\n\nconst View = styled.div``;\n\nconst ImageContainer = styled.div<{ isCentered?: boolean }>`\n display: flex;\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n margin-bottom: ${spacings.nudge * 3}px;\n max-width: 100%;\n`;\n\nconst StyledImage = styled(Image)`\n overflow: hidden;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n`;\n\nconst Content = styled.div<{ isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst Title = styled(Copy)``;\n\nconst SubTitle = styled(Copy)``;\n\nconst Text = styled(Copy)`\n ${SubTitle} + & {\n margin-top: ${spacings.nudge}px;\n }\n`;\n\nexport interface FactProps {\n isInverted?: boolean;\n isCentered?: boolean;\n title?: string;\n subTitle?: string;\n text?: string;\n image?: ImageProps;\n}\n\nconst Fact = forwardRef<\n HTMLDivElement,\n FactProps & {\n className?: string;\n }\n>(\n (\n {\n isInverted = false,\n isCentered = false,\n title,\n subTitle,\n text,\n image,\n className,\n },\n ref\n ) => {\n return (\n <View ref={ref} className={className}>\n {image?.small && (\n <ImageContainer isCentered={isCentered}>\n <StyledImage\n isInverted={isInverted}\n small={image.small}\n medium={image.medium}\n semilarge={image.semilarge}\n large={image.large}\n xlarge={image.xlarge}\n alt={image.alt}\n coverSpace={image.coverSpace}\n ratios={image.ratios}\n showPlaceholder={image.showPlaceholder}\n />\n </ImageContainer>\n )}\n <Content isCentered={isCentered}>\n {title && (\n <Title\n type=\"copy-b\"\n size=\"big\"\n isInverted={isInverted}\n data-sheet=\"title\"\n >\n {title}\n </Title>\n )}\n {subTitle && (\n <SubTitle\n type=\"copy-b\"\n isInverted={isInverted}\n data-sheet=\"subtitle\"\n >\n {subTitle}\n </SubTitle>\n )}\n {text && (\n <Text\n type=\"copy\"\n isInverted={isInverted}\n data-sheet=\"text\"\n innerHTML={text}\n />\n )}\n </Content>\n </View>\n );\n }\n);\n\nFact.displayName = 'Fact';\n\nexport default Fact;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { mq } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Fact, { FactProps } from 'components/blocks/Fact';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport Grid from 'components/base/Grid';\n\nconst FactFill = styled.div`\n display: none;\n\n @media ${mq.large} {\n display: block;\n }\n`;\n\nconst FactGrid: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Controls amount columns on large screens */\n columns?: 3 | 4 | 6;\n\n /** Array with fact card data */\n facts?: Array<Omit<FactProps, 'isInverted' | 'isCentered'>>;\n\n /** Section background */\n bgMode?: 'full' | 'inverted' | 'splitted';\n\n /** Center text inside fact card items */\n isCentered?: boolean;\n}> = ({ anchorId, columns = 3, facts, bgMode, isCentered }) => {\n const { colors } = useLibTheme();\n const factCount = facts?.length || 0;\n\n const isInverted = bgMode === 'inverted';\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight<HTMLDivElement>({\n listLength: factCount,\n identifiers: ['[data-sheet=\"title\"]', '[data-sheet=\"subtitle\"]'],\n responsive: {\n small: 1,\n medium: columns < 3 ? columns : 3,\n semilarge: columns < 4 ? columns : 4,\n large: columns,\n xlarge: columns,\n },\n });\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <Grid.Row>\n {facts &&\n facts.map((fact, i) => {\n if (\n fact?.title ||\n fact?.subTitle ||\n fact?.image ||\n fact?.text\n ) {\n return (\n <Grid.Col\n key={i}\n medium={{ span: 4 / 12 }}\n semilarge={\n columns > 3\n ? { span: 3 / 12 }\n : { span: 4 / 12 }\n }\n large={{ span: 12 / columns / 12 }}\n >\n <Fact\n key={i}\n ref={cardRefs[i]}\n {...fact}\n isCentered={isCentered}\n isInverted={isInverted}\n />\n </Grid.Col>\n );\n } else {\n return (\n <Grid.Col\n key={i}\n medium={{ span: 4 / 12 }}\n semilarge={\n columns > 3\n ? { span: 3 / 12 }\n : { span: 4 / 12 }\n }\n large={{ span: 12 / columns / 12 }}\n >\n <FactFill ref={cardRefs[i]} key={i} />\n </Grid.Col>\n );\n }\n })}\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const FactGridComponent = FactGrid;\nexport default withLibTheme(FactGrid);\n","import React from 'react';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport styled from 'styled-components';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { spacings, getColors as color, mq } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\n\nconst FactsContainer = styled.ul`\n padding: 0;\n margin: 0;\n\n list-style-type: none;\n\n & > * + * {\n margin-top: ${spacings.nudge}px;\n }\n`;\n\nconst FactItem = styled.li<{ hasText?: boolean; hasBack?: boolean }>`\n padding: ${spacings.nudge * 2}px;\n\n background: ${({ theme, hasBack }) =>\n hasBack ? color(theme).elementBg.light : color(theme).elementBg.medium};\n\n display: flex;\n flex-direction: row;\n align-items: ${({ hasText }) => (hasText ? 'flex-start' : 'center')};\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 3}px;\n }\n`;\n\nconst Icon = styled.img`\n margin-right: ${spacings.nudge * 3}px;\n display: block;\n max-width: ${spacings.nudge * 5}px;\n\n @media ${mq.medium} {\n margin-right: ${spacings.spacer}px;\n }\n`;\n\nconst ContentBlock = styled.div`\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Description = styled(Copy)`\n max-width: 880px;\n`;\n\nconst FactList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array with fact item data */\n facts?: Array<{\n label?: string;\n text?: string;\n }>;\n\n /** Icon for each fact item */\n icon?: { src: string; alt?: string };\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, facts, icon, bgMode }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBack = isInverted || bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode === 'full'\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {facts && (\n <FactsContainer>\n {facts.map(({ label, text }, i) => {\n return (\n <FactItem\n key={i}\n hasText={!!text}\n hasBack={hasBack}\n >\n {icon && (\n <Icon\n src={icon.src}\n alt={icon.alt || ''}\n />\n )}\n <ContentBlock>\n {label && (\n <Copy type=\"copy-b\">{label}</Copy>\n )}\n {text && (\n <Description\n type=\"copy\"\n innerHTML={text}\n />\n )}\n </ContentBlock>\n </FactItem>\n );\n })}\n </FactsContainer>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const FactListComponent = FactList;\nexport default withLibTheme(FactList);\n","import React, { forwardRef } from 'react';\nimport styled, { css } from 'styled-components';\nimport {\n mq,\n spacings,\n getGlobals as global,\n getFonts as font,\n} from 'utils/styles';\n\nimport Copy, { copyStyle } from 'components/typography/Copy';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Link, { LinkProps } from 'components/typography/Link';\n\nconst View = styled.div<{ isCentered?: boolean }>`\n min-width: 270px;\n padding-bottom: ${spacings.nudge}px;\n text-align: ${({ isCentered }) => isCentered && 'center'};\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst TitleLink = styled(Link)<{ href?: string }>`\n display: inline-block;\n ${copyStyle('copy-b', 'big')}\n\n color: ${({ theme, isInverted }) =>\n isInverted\n ? font(theme)['copy-b'].big.colorInverted\n : font(theme)['copy-b'].big.color};\n text-decoration: none;\n\n ${({ href, isInverted, theme }) =>\n !href &&\n css`\n &:hover {\n color: ${isInverted\n ? font(theme)['copy-b'].big.colorInverted\n : font(theme)['copy-b'].big.color};\n }\n `}\n`;\n\nconst ImageContainer = styled(Link)<{ isCentered?: boolean }>`\n display: flex;\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n width: 100%;\n`;\n\nconst StyledImage = styled(Image)`\n overflow: hidden;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n`;\n\nconst ArticleContent = styled.div<{ isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n\n @media ${mq.medium} {\n & > * {\n max-width: 95%;\n margin-right: ${({ isCentered }) => isCentered && 'auto'};\n margin-left: ${({ isCentered }) => isCentered && 'auto'};\n }\n }\n`;\n\nconst Action = styled.div`\n max-width: 100%;\n`;\n\nexport interface FeatureProps {\n /** Invert color and background for darker themes */\n isInverted?: boolean;\n\n /** Center all texts */\n isCentered?: boolean;\n\n /** Image on item's top */\n image?: ImageProps;\n\n /** Item title text underneath the image */\n title?: string;\n\n /** Small item description text (richtext) */\n description?: string;\n\n /** Item intro text (partial richtext cause it's always bold) */\n intro?: string;\n\n /** Item's main text (richtext) */\n text?: string;\n\n /** Item link settings */\n link?: LinkProps;\n\n /** Function to inject custom primary button */\n action?: (isInverted?: boolean) => React.ReactNode;\n}\n\nconst Feature = forwardRef<\n HTMLDivElement,\n FeatureProps & {\n className?: string;\n }\n>(\n (\n {\n title,\n description,\n intro,\n text,\n link,\n image,\n isInverted = false,\n isCentered = false,\n action,\n className,\n },\n ref\n ) => {\n return (\n <View ref={ref} isCentered={isCentered} className={className}>\n {image?.small && (\n <ImageContainer {...link} isCentered={isCentered}>\n <StyledImage\n small={image.small}\n medium={image.medium}\n semilarge={image.semilarge}\n large={image.large}\n xlarge={image.xlarge}\n alt={image.alt}\n ratios={image.ratios}\n coverSpace={\n image.coverSpace === undefined\n ? true\n : image.coverSpace\n }\n isInverted={isInverted}\n />\n </ImageContainer>\n )}\n <TitleLink\n {...link}\n isInverted={isInverted}\n ariaLabel={title}\n data-sheet=\"title\"\n >\n {title}\n </TitleLink>\n <Copy\n size=\"small\"\n isInverted={isInverted}\n data-sheet=\"desc\"\n innerHTML={description}\n />\n <ArticleContent isCentered={isCentered}>\n <Copy\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n data-sheet=\"intro\"\n />\n <Copy\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n innerHTML={text}\n data-sheet=\"text\"\n />\n </ArticleContent>\n {action && <Action>{action(isInverted)}</Action>}\n </View>\n );\n }\n);\n\nFeature.displayName = 'Feature';\n\nexport default Feature;\n","import React, { useMemo } from 'react';\n\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Feature, { FeatureProps } from 'components/blocks/Feature';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport Grid from 'components/base/Grid';\n\nconst FeatureList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Center texts in every feature item */\n isCentered?: boolean;\n\n /** Array with feature item content */\n features?: FeatureProps[];\n\n /** If not defined the component falls back to legacy logic: Uneven items = max 3 per row, even items = max 2 per row */\n columns?: 2 | 3;\n\n /** Section background */\n bgMode?: 'full' | 'splitted' | 'inverted';\n}> = ({ anchorId, features, bgMode, isCentered = false, columns }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const featureCount = features?.length || 0;\n\n const isHalf = useMemo(() => {\n if (columns) {\n return columns === 2;\n }\n\n // legacy logic\n return features && features.length % 2 === 0;\n }, [features, columns]);\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight<HTMLDivElement>({\n listLength: featureCount,\n identifiers: [\n '[data-sheet=\"title\"]',\n '[data-sheet=\"desc\"]',\n '[data-sheet=\"intro\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: isHalf ? 2 : 3,\n xlarge: isHalf ? 2 : 3,\n },\n });\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper addWhitespace clampWidth=\"normal\">\n <Grid.Row\n halign={isHalf || featureCount <= 2 ? 'center' : 'left'}\n >\n {features?.map((feature, i) => (\n <Grid.Col\n semilarge={{ span: 6 / 12 }}\n large={{\n span: isHalf ? 5 / 12 : 4 / 12,\n }}\n key={i}\n >\n <Feature\n ref={cardRefs[i]}\n {...feature}\n isCentered={isCentered}\n isInverted={isInverted}\n />\n </Grid.Col>\n ))}\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const FeatureListComponent = FeatureList;\nexport default withLibTheme(FeatureList);\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport { getGlobals as global } from 'utils/styles';\nimport Grid from 'components/base/Grid';\n\nconst StyledImage = styled(Image)`\n width: 100%;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n overflow: hidden;\n\n picture > img {\n width: 100%;\n height: 100%;\n }\n`;\n\ntype ImageType = Omit<ImageProps, 'coverSpace'> & { isFull?: boolean };\n\nconst Gallery: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of image settings */\n images?: Array<ImageType>;\n\n /** Section background */\n bgMode?: 'full' | 'splitted' | 'inverted';\n}> = ({ anchorId, bgMode, images }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper addWhitespace>\n <Grid.Row>\n {images?.map((img, i) => (\n <Grid.Col\n key={i}\n semilarge={{\n span: img.isFull ? 12 / 12 : 6 / 12,\n }}\n >\n <StyledImage\n {...img}\n coverSpace\n isInverted={isInverted}\n />\n </Grid.Col>\n ))}\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const GalleryComponent = Gallery;\nexport default withLibTheme(Gallery);\n","import React, { FC } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { CalloutTag } from 'components/typography/Callout';\nimport { mq, spacings, withRange } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport HeaderKenBurns from './HeaderKenBurns';\nimport HeaderPoster from './HeaderPoster';\nimport Actions from 'components/blocks/Actions';\nimport HeaderVideo from './HeaderVideo';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { ImageProps } from 'components/blocks/Image';\nimport {\n generateNavbarIdent as genIdent,\n getFullNavbarHeights as getNavHeight,\n} from '../navigation/Navigation';\n\nconst Poster: FC<{\n isInverted?: boolean;\n videoUrl?: string;\n images?: Omit<ImageProps, 'ratios' | 'coverSpace'>[];\n focus?: HeaderFocus;\n kenBurnsZoom?: number;\n kenBurnsZoomPoint?: [number, number];\n kenBurnsInterval?: number;\n onImageChange?: (image?: Omit<ImageProps, 'ratios' | 'coverSpace'>) => void;\n className?: string;\n children?: React.ReactNode;\n}> = ({\n isInverted,\n videoUrl,\n images,\n focus,\n kenBurnsZoom,\n kenBurnsZoomPoint,\n kenBurnsInterval,\n onImageChange,\n className,\n children,\n}) => {\n switch (true) {\n case !!videoUrl: {\n return (\n <HeaderVideo\n isInverted={isInverted}\n videoUrl={videoUrl}\n focus={focus}\n placeholderImg={images?.[0]}\n className={className}\n >\n {children}\n </HeaderVideo>\n );\n }\n\n case images && images.length > 1: {\n return (\n <HeaderKenBurns\n images={images || []}\n zoom={kenBurnsZoom}\n zoomPoint={kenBurnsZoomPoint}\n interval={kenBurnsInterval}\n onImageChange={onImageChange}\n className={className}\n >\n {children}\n </HeaderKenBurns>\n );\n }\n\n // single image\n case images && images.length === 1: {\n return (\n <HeaderPoster\n isInverted={isInverted}\n bgImage={images?.[0]}\n focus={focus}\n className={className}\n >\n {children}\n </HeaderPoster>\n );\n }\n\n default: {\n return <div>{children}</div>;\n }\n }\n};\n\nconst genHeightStyles = (isFull: boolean) => css`\n // Doing some crazy shit to calculate curent navbar height in CSS\n ${({ theme }) => {\n // navbar main only\n const mainIdent = genIdent({\n pageFlow: 'beforeContent',\n hasMain: true,\n });\n\n // navbar main and top\n const mainTopIdent = genIdent({\n pageFlow: 'beforeContent',\n hasMain: true,\n hasTop: true,\n });\n\n // navbar main and bottom\n const mainBottomIdent = genIdent({\n pageFlow: 'beforeContent',\n hasMain: true,\n hasBottom: true,\n });\n\n // full navbar with all bars\n const fullIdent = genIdent({\n pageFlow: 'beforeContent',\n hasTop: true,\n hasMain: true,\n hasBottom: true,\n });\n\n const navMainHeight = getNavHeight(theme, mainIdent).large;\n const navMainTopHeight = getNavHeight(theme, mainTopIdent).large;\n const navMainBottomHeight = getNavHeight(theme, mainBottomIdent).large;\n const navFullHeight = getNavHeight(theme, fullIdent).large;\n\n const mapToSelector = (idents: string[]) => {\n return idents.map((id) => `[data-navbar-ident*='${id}']`).join('');\n };\n\n const refHeight = isFull ? '100vh' : '80vh';\n\n return css`\n & > ${StyledPoster} {\n min-height: 500px;\n height: ${refHeight};\n }\n\n // with main navbar element\n header${mapToSelector(mainIdent.split('-'))} + & {\n & > ${StyledPoster} {\n height: calc(${refHeight} - ${navMainHeight[0]}px);\n }\n }\n\n // with main and top navbar elements\n header${mapToSelector(mainTopIdent.split('-'))} + & {\n & > ${StyledPoster} {\n height: calc(${refHeight} - ${navMainTopHeight[0]}px);\n }\n }\n\n // with main and bottom navbar elements\n header${mapToSelector(mainBottomIdent.split('-'))} + & {\n & > ${StyledPoster} {\n height: calc(${refHeight} - ${navMainBottomHeight[0]}px);\n }\n }\n\n // with all navbar elements\n header${mapToSelector(fullIdent.split('-'))} + & {\n & > ${StyledPoster} {\n height: calc(${refHeight} - ${navFullHeight[0]}px);\n }\n }\n\n @media ${mq.semilarge} {\n // with main navbar element\n header${mapToSelector(mainIdent.split('-'))} + & {\n & > ${StyledPoster} {\n height: calc(${refHeight} - ${navMainHeight[1]}px);\n }\n }\n\n // with main and top navbar elements\n header${mapToSelector(mainTopIdent.split('-'))} + & {\n & > ${StyledPoster} {\n height: calc(${refHeight} - ${navMainTopHeight[1]}px);\n }\n }\n\n // with main and bottom navbar elements\n header${mapToSelector(mainBottomIdent.split('-'))} + & {\n & > ${StyledPoster} {\n height: calc(\n ${refHeight} - ${navMainBottomHeight[1]}px\n );\n }\n }\n\n // with all navbar elements\n header${mapToSelector(fullIdent.split('-'))} + & {\n & > ${StyledPoster} {\n height: calc(${refHeight} - ${navFullHeight[1]}px);\n }\n }\n }\n `;\n }}\n`;\n\nconst HeaderSection = styled(Section)`\n position: relative;\n ${genHeightStyles(true)}\n\n header + & {\n ${withRange([0], 'padding-top')}\n ${withRange([0], 'margin-top')}\n }\n`;\n\nconst HeaderSectionSmall = styled(Section)`\n position: relative;\n ${genHeightStyles(false)}\n\n header + & {\n ${withRange([0], 'padding-top')}\n ${withRange([0], 'margin-top')}\n }\n`;\n\nconst StyledPoster = styled(Poster)`\n position: relative;\n height: 100vh;\n max-height: 1300px;\n max-width: ${spacings.wrapperLarge}px;\n margin: 0 auto;\n`;\n\nconst Overlay = styled.div<{ bgValue?: string; textOnImage?: boolean }>`\n display: ${({ textOnImage }) => (textOnImage ? 'block' : 'none')};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: ${({ bgValue }) => bgValue && bgValue};\n z-index: 2;\n\n @media ${mq.medium} {\n display: block;\n }\n`;\n\nconst Content = styled.div<{ isCentered?: boolean; textOnImage?: boolean }>`\n display: none;\n max-width: ${spacings.wrapper}px;\n margin: 0 auto;\n\n ${({ textOnImage, isCentered }) =>\n textOnImage &&\n css`\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: ${isCentered && 'center'};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: ${spacings.spacer}px;\n z-index: 2;\n\n & > * {\n margin-top: ${spacings.spacer}px;\n max-width: 880px;\n }\n `}\n\n @media ${mq.medium} {\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: ${({ isCentered }) => isCentered && 'center'};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: ${spacings.spacer * 2}px;\n z-index: 2;\n\n & > * {\n margin-top: ${spacings.spacer}px;\n max-width: 880px;\n }\n }\n`;\n\nconst ContentMobile = styled.div`\n padding: ${spacings.spacer}px ${spacings.nudge * 2}px;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n display: none;\n }\n`;\n\nconst Title = styled(Heading)<{ isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n\n @media ${mq.medium} {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 3; /* number of lines to show */\n line-clamp: 3;\n -webkit-box-orient: vertical;\n }\n`;\n\nconst Text = styled(Copy)<{ isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 4; /* number of lines to show */\n line-clamp: 4;\n -webkit-box-orient: vertical;\n`;\n\nconst StyledActions = styled(Actions)<{ isCentered?: boolean }>`\n @media ${mq.medium} {\n display: block;\n text-align: ${({ isCentered }) => isCentered && 'center'};\n }\n`;\n\nexport type HeaderSize = 'full' | 'small';\nexport type HeaderImage = Omit<ImageProps, 'ratios' | 'coverSpace'> & {\n zoomPoint?: [number, number];\n zoom?: number;\n};\nexport type HeaderFocus = [\n 'left' | 'center' | 'right',\n 'top' | 'center' | 'bottom'\n];\n\nconst Header: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Header image height size (full=100vh, small=80vh) */\n size?: HeaderSize;\n\n /** Focus point of header image / video */\n focusPoint?: HeaderFocus;\n\n /** Center content */\n isCentered?: boolean;\n\n /** Header title on image */\n title?: string;\n\n /** Header title HTML tag type (h2, h3, h4...) */\n titleAs?: CalloutTag;\n\n /** Header text on image */\n text?: string;\n\n /** Force text on image on all screen widths */\n textOnImage?: boolean;\n\n /** Function to inject custom primary button */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Function to inject custom secondary button */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Array of image settings */\n images?: HeaderImage[];\n\n /** CSS value of custom image overlay to help seperate the text from the background */\n customImgOverlay?: string;\n\n /** URL to header video. First image in images array can be used as fallback */\n videoUrl?: string;\n\n /** Ken burns effect zoom */\n kenBurnsZoom?: number;\n\n /** Global zoom point for all images with ken burns effect. x and y values in the range from 0 - 1 */\n kenBurnsZoomPoint?: [number, number];\n\n /** Time between each image in ken burns mode */\n kenBurnsInterval?: number;\n\n /** Callback called on image change */\n onImageChange?: (image?: Omit<ImageProps, 'ratios' | 'coverSpace'>) => void;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({\n anchorId,\n size = 'full',\n focusPoint = ['center', 'center'],\n isCentered,\n title,\n titleAs,\n text,\n primaryAction,\n secondaryAction,\n videoUrl,\n images,\n customImgOverlay,\n kenBurnsZoom = 1.08,\n kenBurnsZoomPoint = [0.5, 0.5],\n kenBurnsInterval = 10000,\n onImageChange,\n bgMode,\n textOnImage,\n}) => {\n const { globals, colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasContent = title || text || primaryAction || secondaryAction;\n\n const overlay = hasContent\n ? customImgOverlay || globals.sections.imageTextGradient\n : undefined;\n\n const Section = size === 'full' ? HeaderSection : HeaderSectionSmall;\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <StyledPoster\n isInverted={isInverted}\n images={images}\n videoUrl={videoUrl}\n kenBurnsInterval={kenBurnsInterval}\n kenBurnsZoom={kenBurnsZoom}\n kenBurnsZoomPoint={kenBurnsZoomPoint}\n onImageChange={onImageChange}\n focus={focusPoint}\n >\n {hasContent && (\n <React.Fragment>\n <Overlay bgValue={overlay} textOnImage={textOnImage} />\n <Content\n isCentered={isCentered}\n textOnImage={textOnImage}\n >\n {title && (\n <Title\n isInverted\n size=\"heading-1\"\n isCentered={isCentered}\n renderAs={titleAs}\n innerHTML={title}\n />\n )}\n {text && (\n <Text\n isInverted\n isCentered={isCentered}\n type=\"copy-b\"\n size=\"big\"\n innerHTML={text}\n />\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n isCentered={isCentered}\n primary={\n primaryAction && primaryAction(true)\n }\n secondary={\n secondaryAction && secondaryAction(true)\n }\n />\n )}\n </Content>\n </React.Fragment>\n )}\n </StyledPoster>\n {hasContent && !textOnImage && (\n <ContentMobile>\n {title && (\n <Title\n size=\"heading-1\"\n isCentered={isCentered}\n renderAs={titleAs}\n innerHTML={title}\n isInverted={isInverted}\n />\n )}\n {text && (\n <Text\n type=\"copy-b\"\n size=\"big\"\n isCentered={isCentered}\n innerHTML={text}\n isInverted={isInverted}\n />\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n isCentered={isCentered}\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </ContentMobile>\n )}\n </Section>\n );\n};\n\nexport const HeaderComponent = Header;\nexport default withLibTheme(Header);\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\n\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { mq, spacings, getColors as color } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\nimport Pointer from 'components/buttons/Pointer';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport Image from 'components/blocks/Image';\n\nconst StyledSection = styled(Section)<{ isCentered?: boolean }>`\n margin: 0 auto;\n\n @media ${mq.semilarge} {\n margin: ${({ isCentered }) => (isCentered ? '0 auto' : '0')};\n\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n }\n`;\n\nconst ItemContainer = styled.div<{ isCentered?: boolean }>`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n text-align: center;\n\n &:not(:last-child) {\n margin-bottom: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n }\n`;\n\nconst Items = styled.ul<{ isVisible?: boolean; isCentered?: boolean }>`\n display: ${({ isVisible }) => (isVisible ? 'flex' : 'block')};\n align-items: center;\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n\n flex-wrap: wrap;\n padding: 0;\n margin: 0;\n margin-top: -${spacings.nudge * 2}px;\n margin-left: -${spacings.nudge * 2}px;\n\n list-style: none;\n\n @media ${mq.medium} {\n margin-top: -${spacings.spacer}px;\n margin-left: -${spacings.spacer}px;\n\n & > * {\n flex: 0 1 auto;\n }\n }\n`;\n\nconst Item = styled.li<{\n isVisible?: boolean;\n index: number;\n}>`\n padding-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge * 2}px;\n\n display: ${({ index, isVisible }) =>\n isVisible || index < 6 ? 'block' : 'none'};\n\n & > img {\n width: 100%;\n }\n\n @media ${mq.medium} {\n padding-top: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n\n & > img {\n width: auto;\n }\n }\n\n @media ${mq.semilarge} {\n display: ${({ index, isVisible }) =>\n isVisible || index < 8 ? 'block' : 'none'};\n }\n\n @media ${mq.large} {\n display: ${({ index, isVisible }) =>\n isVisible || index < 10 ? 'block' : 'none'};\n }\n`;\n\nconst ItemLink = styled(Link)<{ isInverted?: boolean }>`\n display: block;\n outline-color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n`;\n\nconst ShowMore = styled.div<{ itemCount?: number; isCentered?: boolean }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 6 ? 'block' : 'none'};\n\n background: none;\n border: none;\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n\n @media ${mq.semilarge} {\n display: ${({ itemCount }) =>\n itemCount && itemCount > 8 ? 'block' : 'none'};\n }\n\n @media ${mq.large} {\n display: ${({ itemCount }) =>\n itemCount && itemCount > 10 ? 'block' : 'none'};\n }\n`;\n\nconst StyledActions = styled(Actions)<{ isCentered?: boolean }>`\n margin-top: ${spacings.spacer}px;\n\n @media ${mq.medium} {\n display: block;\n text-align: ${({ isCentered }) => isCentered && 'center'};\n }\n`;\n\nexport interface IconListItem {\n src: string;\n alt?: string;\n link?: LinkProps;\n ratio?: { h: number; w: number };\n showPlaceholder?: boolean;\n}\n\nconst IconList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array with icon items data */\n items?: Array<IconListItem>;\n\n /** Function to inject custom primary button */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Function to inject custom secondary button */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Function to inject custom toggle button */\n toggle?: (props: {\n isInverted?: boolean;\n isToggled?: boolean;\n showLessText?: string;\n showMoreText?: string;\n clickHandler?: (ev?: React.SyntheticEvent<HTMLButtonElement>) => void;\n additionalProps?: Record<string, any>;\n }) => React.ReactNode;\n\n /** Custom text for toggle button in folded state */\n showMoreText?: string;\n\n /** Custom text for toggle button in expanded state */\n showLessText?: string;\n\n /** Center all icons and texts */\n isCentered?: boolean;\n\n /** Enable toggle feature */\n enableToggle?: boolean;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({\n anchorId,\n items,\n isCentered = false,\n primaryAction,\n secondaryAction,\n toggle,\n showLessText = 'show less',\n showMoreText = 'show more',\n enableToggle,\n bgMode,\n}) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const [showMore, setShowMore] = useState<boolean>(!enableToggle);\n\n const handleToggleClick = () => {\n setShowMore((prev) => !prev);\n };\n\n return (\n <StyledSection\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n isCentered={isCentered}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <ItemContainer isCentered={isCentered}>\n <Items\n isVisible={!showMore ? true : showMore === true}\n isCentered={isCentered}\n >\n {items?.map(\n ({ src, link, alt, ratio, showPlaceholder }, i) => (\n <Item isVisible={showMore} index={i} key={i}>\n <ItemLink\n {...link}\n isInverted={isInverted}\n ariaLabel={alt}\n >\n <Image\n data-img-loaded={false}\n isInverted={isInverted}\n small={src}\n alt={alt}\n ratios={\n ratio\n ? { small: ratio }\n : undefined\n }\n showPlaceholder={showPlaceholder}\n />\n </ItemLink>\n </Item>\n )\n )}\n </Items>\n </ItemContainer>\n {enableToggle && (\n <ShowMore\n isCentered={isCentered}\n itemCount={items?.length || 0}\n >\n {toggle ? (\n toggle({\n isInverted,\n showLessText,\n showMoreText,\n isToggled: showMore,\n clickHandler: handleToggleClick,\n additionalProps: { 'aria-pressed': showMore },\n })\n ) : (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n aria-pressed={showMore}\n onClick={() => handleToggleClick()}\n >\n <Pointer.Label>\n {showMore ? showLessText : showMoreText}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n )}\n\n {(primaryAction || secondaryAction) && (\n <StyledActions\n isCentered={isCentered}\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </StyledSection>\n );\n};\n\nexport const IconListComponent = IconList;\nexport default withLibTheme(IconList);\n","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { copyStyle } from 'components/typography/Copy';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { getColors as color, spacings } from 'utils/styles';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport ArrowDown from 'components/base/icons/ArrowDown';\nimport { useScrollTo } from 'utils/useScrollTo';\nimport { getFullNavbarHeights, getNavbarState } from './navigation/Navigation';\nimport { useMediaQueries } from 'utils/useMediaQuery';\n\nconst List = styled.ul<{ hasBg?: boolean; isInverted?: boolean }>`\n margin: 0;\n padding: 0;\n list-style: none;\n\n max-width: 880px;\n\n & > li + li {\n border-top: 1px solid\n ${({ theme, hasBg, isInverted }) =>\n hasBg && !isInverted\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n\n & > li:first-child {\n border-top: 1px solid\n ${({ theme, hasBg, isInverted }) =>\n hasBg && !isInverted\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n\n & > li:last-child {\n border-bottom: 1px solid\n ${({ theme, hasBg, isInverted }) =>\n hasBg && !isInverted\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n`;\n\nconst ListItem = styled.li``;\n\nconst IndexLink = styled(Link)<{ isInverted?: boolean }>`\n display: inline-flex;\n align-items: center;\n max-width: 100%;\n padding: ${spacings.nudge}px 0;\n\n ${copyStyle('copy', 'big')}\n`;\n\nconst LinkLabel = styled.span`\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst IconWrapper = styled.span`\n display: inline-block;\n\n margin-left: ${spacings.nudge * 2}px;\n`;\n\nexport interface IndexItem {\n label?: string;\n link?: LinkProps;\n}\n\nconst IndexList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of index item settings */\n items?: IndexItem[];\n\n /** Section background */\n bgMode?: 'inverted' | 'full';\n\n /** Function to inject custom icon decorator */\n customIcon?: (props: { isInverted?: boolean }) => React.ReactNode;\n\n /** Top offset for scroll to clicked item. Default: auto */\n scrollToOffset?: number;\n}> = ({ anchorId, items, bgMode, customIcon, scrollToOffset }) => {\n const { colors, theme } = useLibTheme();\n const setTargetPos = useScrollTo(500);\n const { semilarge } = useMediaQueries();\n\n const [topOffset, setTopOffset] = useState<number>(0);\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const handleLinkClick = (ev: React.SyntheticEvent<HTMLAnchorElement>) => {\n if (!ev?.currentTarget) return;\n\n ev.preventDefault();\n const href = ev.currentTarget.getAttribute('href') as string;\n\n if (!href) return;\n\n const target = document.getElementById(href.split('#')?.[1] || href);\n if (target) {\n setTargetPos(\n target.getBoundingClientRect().top +\n window.scrollY -\n (scrollToOffset || topOffset)\n );\n }\n\n if (window) {\n const url = new URL(window.location as any);\n url.hash = href.split('#')[1];\n window.history.pushState({}, '', url as any);\n }\n };\n\n useEffect(() => {\n if (scrollToOffset) return;\n\n // if header is defined get navbar height and generate top offset\n const header = document.querySelector('header[data-navbar-ident]');\n const navbarIdent = header?.getAttribute('data-navbar-ident');\n if (!navbarIdent) return;\n\n const { isStickable } = getNavbarState(navbarIdent);\n if (!isStickable) return;\n\n // calculate offset from navbar height\n const navbarHeights = getFullNavbarHeights(theme, navbarIdent);\n\n if (semilarge) setTopOffset(navbarHeights.small[1] + spacings.spacer);\n else setTopOffset(navbarHeights.small[0] + spacings.spacer);\n }, [theme, semilarge, scrollToOffset]);\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <List hasBg={hasBg} isInverted={isInverted}>\n {items?.map((item, i) => (\n <ListItem key={i}>\n <IndexLink\n {...item.link}\n isInverted={isInverted}\n onClick={handleLinkClick}\n >\n <LinkLabel>{item.label}</LinkLabel>\n <IconWrapper>\n {customIcon ? (\n customIcon({ isInverted })\n ) : (\n <ArrowDown />\n )}\n </IconWrapper>\n </IndexLink>\n </ListItem>\n ))}\n </List>\n </Wrapper>\n </Section>\n );\n};\n\nexport const IndexListComponent = IndexList;\nexport default withLibTheme(IndexList);\n","import React from 'react';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport IntroBlock from 'components/blocks/IntroBlock';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { ImageProps } from 'components/blocks/Image';\nimport { TitleSize } from 'components/blocks/Title';\n\nconst Intro: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Main title text */\n title?: string;\n\n /** Main title HTML tag type (h2, h3, h4...) */\n titleAs?: HeadlineTag;\n\n /** Main title style */\n titleSize?: TitleSize;\n\n /** Superior title that stands above main title */\n superTitle?: string;\n\n /** Superior title HTML tag type (h3, h4 ...) */\n superTitleAs?: HeadlineTag;\n\n /** Intro text under headline (richtext) */\n abstract?: string;\n\n /** Main text (richtext) */\n text?: string;\n\n /** Images for different screen sizes. coverSpace defaults to true */\n image?: ImageProps;\n\n /** Function to inject custom primary button */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Function to inject custom secondary button */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Center text and actions */\n isCentered?: boolean;\n\n /** Allow reduced section spacing to next section */\n isStackable?: boolean;\n\n /** Clamp title to a width of max 8 grid cols. */\n clampTitle?: boolean;\n\n /** Section background */\n bgMode?: 'inverted' | 'full' | 'splitted';\n className?: string;\n}> = ({\n anchorId,\n title,\n titleAs,\n titleSize = 'heading-2',\n superTitle,\n superTitleAs,\n abstract,\n text,\n primaryAction,\n secondaryAction,\n isCentered = false,\n isStackable = false,\n bgMode,\n image,\n}) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n\n // set default ratio settings\n if (image && !image?.ratios) {\n image.ratios = {\n small: { h: 1, w: 1 },\n };\n }\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n isStackable={isStackable}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <IntroBlock\n title={title}\n titleAs={titleAs}\n titleSize={titleSize}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n abstract={abstract}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n isCentered={isCentered}\n image={image}\n clampTitle\n clampAbstract\n clampText\n />\n </Wrapper>\n </Section>\n );\n};\n\nexport const IntroComponent = Intro;\nexport default withLibTheme(Intro);\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n mq,\n spacings,\n getColors as color,\n getFonts as font,\n getGlobals as global,\n withRange,\n} from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Grid, { getGridWidth, gridSettings } from 'components/base/Grid';\nimport Wrapper, { wrapperWhitespace } from 'components/base/Wrapper';\n\nimport IntroBlock from 'components/blocks/IntroBlock';\n\nimport Copy, { copyStyle } from 'components/typography/Copy';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nimport Phone from 'components/base/icons/Phone';\nimport Mail from 'components/base/icons/Mail';\n\nimport { generateLocalBusiness } from 'utils/structuredData';\nimport Link from 'components/typography/Link';\nimport LocationPin from 'components/base/icons/LocationPin';\nimport Control from 'components/buttons/Control';\nimport * as Icons from 'icons';\nimport { getSVGDataImg as getSVGData } from 'utils/dataURI';\nimport useLeafletMap from 'utils/useLeafletMap';\nimport { isValidArray } from 'utils/arrays';\n\ninterface Address {\n street: string;\n postalCode: string;\n city?: string;\n country: string;\n}\n\nconst MapSection = styled(Section)`\n position: relative;\n min-height: 500px;\n z-index: 0;\n`;\n\nconst MapContainer = styled.div<{ isMirrored?: boolean }>`\n position: relative;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n z-index: 0;\n\n height: 100%;\n min-height: 230px;\n\n @media ${mq.semilarge} {\n position: absolute;\n /** \n calculate width of 6 grid cols (grid width = viewport width without wrapper paddings)\n and add left or right wrapper padding afterwards\n */\n width: calc(\n ${getGridWidth({\n cols: 6,\n gridWidth: `100% - ${wrapperWhitespace * 2}px `,\n })} + ${wrapperWhitespace}px\n );\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '0')};\n right: ${({ isMirrored }) => (isMirrored ? '0' : 'auto')};\n }\n\n @media ${mq.xlarge} {\n width: calc(50% - ${gridSettings.gutter}px ${wrapperWhitespace}px);\n }\n\n @media ${mq.xxlarge} {\n width: calc(\n ${spacings.wrapperLarge / 2}px - ${gridSettings.gutter}px +\n ${wrapperWhitespace}px\n );\n\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '50%')};\n right: ${({ isMirrored }) => (isMirrored ? '50%' : 'auto')};\n\n ${({ isMirrored }) =>\n css`\n transform: translateX(\n calc(\n ${isMirrored\n ? `(100% + ${gridSettings.gutter}px) - `\n : `(-100% - ${gridSettings.gutter}px) + `}\n (${wrapperWhitespace}px)\n )\n );\n `};\n }\n`;\n\nconst CardWrapper = styled(Wrapper)`\n pointer-events: none;\n`;\n\nconst CardContainer = styled.div<{ isMirrored?: boolean }>`\n display: flex;\n flex-direction: row;\n position: relative;\n width: 100%;\n pointer-events: all;\n\n ${({ theme }) =>\n withRange(\n global(theme).sections.seperation.padding.default,\n 'padding-bottom'\n )}\n\n @media ${mq.semilarge} {\n ${({ theme }) =>\n withRange(\n global(theme).sections.seperation.padding.default,\n 'padding-top'\n )}\n }\n`;\n\nconst InfoCardView = styled.div`\n min-height: 100px;\n pointer-events: all;\n\n flex: 1 0 80%;\n max-width: 80%;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst CardHeader = styled.div`\n display: flex;\n`;\n\nconst ContactList = styled.ul<{ isInverted?: boolean }>`\n padding: 0;\n list-style-type: none;\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).text.inverted : color(theme).text.default};\n\n li {\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0;\n margin: 0;\n }\n\n li + li {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n span:first-child {\n flex: 0 0 30px;\n max-width: 30px;\n\n & > * {\n max-width: 100%;\n }\n }\n`;\n\nconst ContactListLink = styled(Link)`\n display: block;\n\n ${copyStyle('copy-b', 'big')}\n color: ${({ theme, isInverted }) =>\n isInverted\n ? font(theme)['copy-b'].big.colorInverted\n : font(theme)['copy-b'].big.color};\n\n * + & {\n margin-left: ${spacings.nudge * 1.5}px;\n }\n`;\n\nconst AddressContainer = styled.div<{ hasIcon?: boolean }>`\n display: -ms-grid;\n display: grid;\n\n ${({ hasIcon }) => css`\n -ms-grid-columns: ${hasIcon ? 'min-content' : ''} 1fr;\n grid-template-columns: ${hasIcon ? 'min-content' : ''} 1fr;\n -ms-grid-rows: ${hasIcon ? 'min-content' : ''} 1fr;\n grid-auto-rows: ${hasIcon ? 'min-content' : ''} 1fr;\n `}\n\n & > * + * {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst CompanyInfo: FC<{\n isInverted?: boolean;\n companyName: string;\n address?: Address;\n customIcon?: (isInverted?: boolean) => React.ReactNode;\n}> = ({ isInverted, companyName, address, customIcon }) => {\n return (\n <AddressContainer hasIcon={!!customIcon}>\n {customIcon && <span> {customIcon()} </span>}\n <div>\n <Copy type=\"copy-b\" size=\"big\" isInverted={isInverted}>\n {companyName}\n </Copy>\n {address && (\n <Copy type=\"copy-b\" size=\"big\" isInverted={isInverted}>\n <div>{address.street}</div>\n <div>{`${address.postalCode} ${address.city}`}</div>\n <div>{address.country}</div>\n </Copy>\n )}\n </div>\n </AddressContainer>\n );\n};\n\nconst Desc = styled(Copy)`\n @media ${mq.semilarge} {\n margin-top: ${spacings.spacer * 2.5}px;\n }\n`;\n\nconst LocationInfoCard: FC<\n MapLocation & {\n isInverted?: boolean;\n }\n> = ({\n isInverted,\n title,\n titleAs,\n superTitle,\n superTitleAs,\n companyName,\n address,\n addressIcon,\n contact,\n description,\n}) => {\n const { colors } = useLibTheme();\n\n const addressIconContent = addressIcon ? (\n addressIcon({ isInverted })\n ) : (\n <LocationPin\n iconColor={isInverted ? colors.text.inverted : colors.text.default}\n />\n );\n\n const phoneIconContent = contact?.telephone?.icon ? (\n contact.telephone.icon({\n isInverted,\n })\n ) : (\n <Phone />\n );\n\n const mailIconContent = contact?.email?.icon ? (\n contact.email.icon({ isInverted })\n ) : (\n <Mail />\n );\n\n return (\n <InfoCardView>\n <CardHeader>\n <IntroBlock\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n />\n </CardHeader>\n {companyName && (\n <CompanyInfo\n companyName={companyName || ''}\n address={address}\n customIcon={\n addressIconContent\n ? () => addressIconContent\n : undefined\n }\n isInverted={isInverted}\n />\n )}\n {contact && (\n <ContactList isInverted={isInverted}>\n {contact?.telephone?.label && (\n <li>\n {phoneIconContent && (\n <span>{phoneIconContent}</span>\n )}\n <ContactListLink\n isInverted={isInverted}\n href={`tel:${\n contact.telephone.link ||\n contact.telephone.label\n }`}\n >\n {contact.telephone?.label}\n </ContactListLink>\n </li>\n )}\n {contact?.email?.label && (\n <li>\n {mailIconContent && <span>{mailIconContent}</span>}\n <ContactListLink\n isInverted={isInverted}\n href={`mailto:${\n contact?.email.link || contact.email.label\n }`}\n >\n {contact?.email.label}\n </ContactListLink>\n </li>\n )}\n </ContactList>\n )}\n\n <Desc isInverted={isInverted} innerHTML={description} />\n </InfoCardView>\n );\n};\n\nconst Controls = styled.div`\n flex: 1 0 20%;\n max-width: 20%;\n display: flex;\n flex-direction: column;\n align-self: flex-start;\n margin-left: auto;\n text-align: right;\n\n & > * + * {\n margin-top: ${spacings.nudge}px;\n }\n`;\n\nconst FylToCtrlContainer = styled.button`\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1000;\n background: none;\n border: none;\n margin: 0;\n padding: 0;\n\n margin-top: ${spacings.spacer}px;\n margin-right: ${spacings.spacer}px;\n color: ${({ theme }) => color(theme).elementBg.dark};\n\n cursor: pointer;\n`;\n\nexport interface LocationIcon {\n url: string;\n size: [number, number];\n anchor: [number, number];\n\n sizeActive: [number, number];\n anchorActive: [number, number];\n}\n\nexport interface MapLocation {\n id: string;\n position: [number, number];\n icon?: LocationIcon;\n\n title?: string; // Rich Text\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n\n companyName?: string;\n address?: Address;\n addressIcon?: (props: { isInverted?: boolean }) => React.ReactNode;\n contact?: {\n telephone?: {\n link?: string;\n label?: string;\n icon?: (props: { isInverted?: boolean }) => React.ReactNode;\n };\n email?: {\n link?: string;\n label?: string;\n icon?: (props: { isInverted?: boolean }) => React.ReactNode;\n };\n };\n image?: string[];\n description?: string;\n}\n\nconst Map: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Switch horizontal order of map and location info text */\n isMirrored?: boolean;\n\n /** Map tile provider */\n provider?: string;\n\n /** Map attribution text (richtext) */\n attribution?: string;\n\n /** Initial center of the map */\n center?: [number, number];\n\n /** Initial map zoom */\n zoom?: number;\n\n /** Zoom if map jumps to location */\n flyToZoom?: number;\n\n /** Initial location */\n initialLocation?: string;\n\n /** Array of location settings */\n locations?: Array<MapLocation>;\n\n /** Show all markers on first load */\n allMarkersOnInit?: boolean;\n\n /** Map container padding for show all markers */\n fitBoundsPadding?: [number, number];\n\n /** Icon element for flight to the current active location */\n flyToControl?: React.ReactNode;\n\n /** Injection function to replace default control button */\n controlNext?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n clickHandler?: (ev: React.SyntheticEvent<HTMLButtonElement>) => void;\n }) => React.ReactNode;\n\n /** Injection function to replace default control button */\n controlPrev?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n clickHandler?: (ev: React.SyntheticEvent<HTMLButtonElement>) => void;\n }) => React.ReactNode;\n}> = ({\n anchorId,\n bgMode,\n isMirrored = false,\n provider,\n attribution,\n center = [51.505, -0.09],\n zoom = 5,\n flyToZoom,\n initialLocation,\n locations,\n allMarkersOnInit = false,\n fitBoundsPadding,\n flyToControl,\n controlNext,\n controlPrev,\n}) => {\n const { colors } = useLibTheme();\n\n const [activeLocationId, setActiveLocationId] = useState<string>(\n initialLocation || ''\n );\n const [isDirty, setIsDirty] = useState<boolean>(false);\n const activeLocation = useMemo(\n () => locations?.find((l) => l.id === activeLocationId),\n [activeLocationId, locations]\n );\n\n const hasBg = bgMode === 'full';\n const isInverted = bgMode === 'inverted';\n\n const defaultMarker: LocationIcon = {\n size: [28, 28],\n anchor: [14, 28],\n sizeActive: [70, 70],\n anchorActive: [35, 70],\n url: getSVGData(<LocationPin />),\n };\n const {\n isLoaded,\n setContainer: setMapContainer,\n flyToActive,\n showAllMarkers,\n } = useLeafletMap({\n url: provider,\n attribution,\n center,\n zoom,\n activeMarkerId: activeLocationId,\n markers: locations?.map(({ id, position, icon }) => ({\n id,\n position,\n icon: icon || defaultMarker,\n isInteractive: true,\n })),\n fitBoundsPadding,\n onMarkerClick: setActiveLocationId,\n });\n\n const goToNext = () => {\n setActiveLocationId((prev) => {\n if (!locations) return prev;\n const currentIndex = locations.findIndex(\n (l) => l.id === activeLocationId\n );\n if (currentIndex === -1) return prev;\n\n // get new index\n const newIndex = (currentIndex + 1) % locations.length;\n return locations[newIndex].id;\n });\n };\n\n const goToPrevious = () => {\n setActiveLocationId((prev) => {\n if (!locations) return prev;\n const currentIndex = locations.findIndex(\n (l) => l.id === activeLocationId\n );\n if (currentIndex === -1) return prev;\n\n // get new index\n const newIndex =\n currentIndex - 1 < 0 ? locations.length - 1 : currentIndex - 1;\n return locations[newIndex].id;\n });\n };\n\n useEffect(() => {\n if (isLoaded && !isDirty) {\n if (allMarkersOnInit) showAllMarkers();\n } else {\n flyToActive(flyToZoom);\n }\n }, [\n activeLocationId,\n allMarkersOnInit,\n flyToActive,\n flyToZoom,\n initialLocation,\n isDirty,\n isLoaded,\n showAllMarkers,\n ]);\n\n useEffect(() => {\n if (!isDirty && activeLocationId !== initialLocation) setIsDirty(true);\n }, [activeLocationId, initialLocation, isDirty]);\n\n return (\n <MapSection\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n {locations && generateLocalBusiness(locations)}\n <MapContainer ref={setMapContainer} isMirrored={isMirrored}>\n {flyToControl && (\n <FylToCtrlContainer\n onClick={(ev) => {\n ev.stopPropagation();\n flyToActive(flyToZoom);\n }}\n >\n {flyToControl}\n </FylToCtrlContainer>\n )}\n </MapContainer>\n\n <CardWrapper addWhitespace clampWidth=\"normal\">\n <Grid.Row>\n <Grid.Col\n semilarge={{\n span: 6 / 12,\n move: (isMirrored ? 6 : 0) / 12,\n }}\n ></Grid.Col>\n <Grid.Col\n semilarge={{\n span: 6 / 12,\n move: (isMirrored ? -6 : 0) / 12,\n }}\n >\n <CardContainer isMirrored={isMirrored}>\n {isValidArray(locations, false) && (\n <React.Fragment>\n {activeLocation && (\n <LocationInfoCard\n {...activeLocation}\n isInverted={isInverted}\n />\n )}\n {locations.length > 1 && (\n <Controls>\n {controlNext ? (\n controlNext({\n isInverted,\n isActive: true,\n clickHandler: goToNext,\n name: 'control_next_head',\n })\n ) : (\n <Control\n isInverted={isInverted}\n isDisabled={false}\n onClick={goToNext}\n >\n <Icons.ArrowRightGhost />\n </Control>\n )}\n {controlPrev ? (\n controlPrev({\n isInverted,\n isActive: true,\n clickHandler: goToPrevious,\n name: 'control_prev_head',\n })\n ) : (\n <Control\n isInverted={isInverted}\n isDisabled={false}\n onClick={goToPrevious}\n >\n <Icons.ArrowLeftGhost />\n </Control>\n )}\n </Controls>\n )}\n </React.Fragment>\n )}\n </CardContainer>\n </Grid.Col>\n </Grid.Row>\n </CardWrapper>\n </MapSection>\n );\n};\n\nexport const MapComponent = Map;\nexport default withLibTheme(Map);\n","import Copy from 'components/typography/Copy';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport React from 'react';\nimport styled from 'styled-components';\nimport { getColors as color, mq, spacings } from 'utils/styles';\n\nconst View = styled(Link)<{ isInverted?: boolean; hasIcon?: boolean }>`\n display: -ms-grid;\n display: grid;\n\n -ms-grid-columns: ${({ hasIcon }) => (hasIcon ? 'min-content 1fr' : '1fr')};\n grid-template-columns: ${({ hasIcon }) =>\n hasIcon ? 'min-content 1fr' : '1fr'};\n -ms-grid-rows: min-content 1fr;\n grid-auto-rows: min-content 1fr;\n\n cursor: pointer;\n text-decoration: none;\n color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n\n outline-color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n\n transition: all ease-in-out 0.2s;\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.invertedHover\n : color(theme).primary.hover};\n }\n }\n`;\n\nconst MainLabel = styled.div<{ hasIcon?: boolean }>`\n display: flex;\n align-items: center;\n margin-left: ${({ hasIcon }) => hasIcon && `${spacings.nudge * 3}px`};\n`;\n\nconst Text = styled(Copy)<{ hasIcon?: boolean }>`\n margin-top: ${({ hasIcon }) =>\n hasIcon ? spacings.nudge : spacings.nudge * 2}px;\n margin-left: ${({ hasIcon }) => hasIcon && `${spacings.nudge * 3}px`};\n`;\n\nconst Icon = styled.div`\n display: flex;\n align-items: center;\n\n & > * {\n height: 48px;\n width: 48px;\n }\n`;\n\nconst Title = styled(Copy)`\n display: inline-block;\n`;\n\nconst TitleIcon = styled.span`\n display: inline-block;\n margin-left: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n margin-left: ${spacings.nudge * 3}px;\n }\n`;\n\nexport interface NavBlockProps {\n /** Invert colors for use on dark backgrounds */\n isInverted?: boolean;\n\n /** Navigation title */\n title?: string;\n\n /** Navigation text (richtext) */\n text?: string;\n\n /** Link settings */\n link?: LinkProps;\n\n /** Function to inject custom icon node */\n customIcon?: (props: { isInverted?: boolean }) => React.ReactNode;\n\n /** Function to inject custom title icon decorator node */\n customTitleIcon?: (props: { isInverted?: boolean }) => React.ReactNode;\n\n className?: string;\n}\n\nconst NavBlock: React.FC<NavBlockProps> = ({\n isInverted = false,\n title,\n text,\n link,\n customIcon,\n customTitleIcon,\n className,\n}) => {\n return (\n <View\n {...link}\n isInverted={isInverted}\n hasIcon={!!customIcon}\n className={className}\n >\n {customIcon ? <Icon>{customIcon({})}</Icon> : ''}\n <MainLabel hasIcon={!!customIcon}>\n {title && (\n <Title textColor=\"inherit\" size=\"medium\" type=\"copy-b\">\n {title}\n {title && customTitleIcon && (\n <TitleIcon>\n {customTitleIcon({ isInverted })}\n </TitleIcon>\n )}\n </Title>\n )}\n </MainLabel>\n {text && (\n <>\n <span />\n <Text\n size=\"small\"\n isInverted={isInverted}\n innerHTML={text}\n hasIcon={!!customIcon}\n />\n </>\n )}\n </View>\n );\n};\n\nexport default NavBlock;\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport NavBlock, { NavBlockProps } from 'components/blocks/NavBlock';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { mq, spacings } from 'utils/styles';\n\nconst List = styled.ul`\n margin: 0;\n margin-top: -${spacings.spacer}px;\n margin-left: -${spacings.spacer}px;\n padding: 0;\n list-style: none;\n\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n flex-wrap: wrap;\n\n @media ${mq.medium} {\n margin-top: -${spacings.spacer * 2}px;\n }\n`;\n\nconst ListItem = styled.li`\n padding-top: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n flex: 1 0 100%;\n\n @media ${mq.medium} {\n flex: 0 0 50%;\n max-width: 50%;\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.large} {\n flex: 0 0 33.33%;\n max-width: 33.33%;\n }\n\n // print version\n @media print {\n flex: 0 0 50%;\n max-width: 50%;\n padding-top: ${spacings.spacer * 2}px;\n }\n`;\n\nexport type NavItem = Omit<\n NavBlockProps,\n 'isInverted' | 'customTitleIcon' | 'className'\n>;\n\nconst NavList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of navigation item settings */\n items?: NavItem[];\n\n /** Section backgrounds */\n bgMode?: 'full' | 'inverted';\n\n /** Function to inject custom title decorator icon */\n customTitleIcon?: (props: { isInverted?: boolean }) => React.ReactNode;\n}> = ({ anchorId, items, bgMode, customTitleIcon }) => {\n const { colors } = useLibTheme();\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <List>\n {items?.map((item, i) => (\n <ListItem key={i}>\n <NavBlock\n {...item}\n isInverted={isInverted}\n customTitleIcon={customTitleIcon}\n />\n </ListItem>\n ))}\n </List>\n </Wrapper>\n </Section>\n );\n};\n\nexport const NavListComponent = NavList;\nexport default withLibTheme(NavList);\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\n\nconst Seperator = styled.div<{ isInverted?: boolean; isTop?: boolean }>`\n border-bottom: solid 1px\n ${({ isInverted, theme }) =>\n isInverted\n ? color(theme).elementBg.light\n : color(theme).elementBg.dark};\n\n margin-top: ${({ isTop }) => !isTop && spacings.spacer}px;\n margin-bottom: ${({ isTop }) => isTop && spacings.spacer}px;\n`;\n\nconst AuthorContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n flex-direction: row;\n justify-content: flex-start;\n text-align: left;\n\n & > * + * {\n margin-top: 0;\n margin-left: ${spacings.spacer}px;\n }\n }\n`;\n\nconst Avatar = styled.img`\n border-radius: 50%; ;\n`;\n\nconst Author = styled.div``;\n\nconst StyledCopy = styled(Copy)`\n text-transform: uppercase;\n margin-bottom: ${spacings.nudge * 3}px;\n`;\n\nconst NewsAuthorCard: React.FC<{\n /** Text above author name */\n label?: string;\n\n /** Article's author name */\n author?: string;\n\n /** Author avatar image */\n avatar?: { src: string; alt?: string };\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({ label, author, avatar, bgMode }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n {author && (\n <React.Fragment>\n <Seperator isTop isInverted={isInverted} />\n <AuthorContainer>\n {avatar && (\n <Avatar src={avatar.src} alt={avatar.alt} />\n )}\n <Author>\n {author && (\n <StyledCopy\n isInverted={isInverted}\n type=\"copy-b\"\n >\n {label || 'Written By'}\n </StyledCopy>\n )}\n <Heading\n isInverted={isInverted}\n size=\"heading-2\"\n >\n {author}\n </Heading>\n </Author>\n </AuthorContainer>\n </React.Fragment>\n )}\n <Seperator isInverted={isInverted} />\n </Wrapper>\n </Section>\n );\n};\n\nexport const NewsAuthorCardComponent = NewsAuthorCard;\nexport default withLibTheme(NewsAuthorCard);\n","import React, { forwardRef, useMemo } from 'react';\nimport styled from 'styled-components';\n\nimport {\n spacings,\n getGlobals as global,\n getFonts as font,\n getColors,\n} from 'utils/styles';\nimport Copy, { copyStyle } from 'components/typography/Copy';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Tag, { TagProps } from 'components/blocks/Tag';\nimport StatusFormatter from 'utils/statusFormatter';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport { useLibTheme } from 'utils/LibThemeProvider';\nimport { isValidArray } from 'utils/arrays';\n\nconst View = styled.div`\n position: relative;\n text-decoration: none;\n margin: 0;\n padding: 0;\n`;\n\nconst ImageLink = styled(Link)`\n display: block;\n width: 100%;\n`;\n\nconst StyledImage = styled(Image)`\n overflow: hidden;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n`;\n\nconst BorderPlaceholder = styled.div<{ hasBg?: boolean }>`\n border-top: 1px solid\n ${({ theme, hasBg }) =>\n hasBg\n ? getColors(theme).elementBg.light\n : getColors(theme).elementBg.medium};\n`;\n\nconst TitleLink = styled(Link)`\n display: inline-block;\n ${copyStyle('copy-b', 'big')}\n\n color: ${({ theme, isInverted }) =>\n isInverted\n ? font(theme)['copy-b'].big.colorInverted\n : font(theme)['copy-b'].big.color};\n text-decoration: none;\n`;\n\nconst Head = styled.div`\n display: flex;\n\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n &:not(:last-child) {\n margin-bottom: ${spacings.nudge * 3}px;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n`;\n\nconst Tags = styled.div`\n display: flex;\n overflow: scroll;\n scrollbar-width: none;\n\n &::-webkit-scrollbar {\n width: 0;\n height: 0;\n display: none;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge}px;\n }\n`;\n\nconst PublishDate = styled(Copy)`\n &:only-child {\n margin-left: auto;\n }\n`;\n\nconst Main = styled.div`\n max-width: 95%;\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst Text = styled(Copy)`\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 6; /* number of lines to show */\n line-clamp: 6;\n -webkit-box-orient: vertical;\n\n & > * {\n margin: 0 !important;\n }\n\n & > p:not(:first-of-type) {\n display: none;\n }\n\n & > ul,\n & > ol,\n & > table {\n display: none;\n }\n`;\n\nconst Action = styled.div`\n margin-top: ${spacings.nudge * 3}px;\n`;\n\nexport interface NewsCardProps {\n /** Invert text and background for use on dark sections */\n isInverted?: boolean;\n\n /** News tag name */\n tags?: TagProps[];\n\n /** News publish date */\n publishDate?: Date;\n\n /** News title */\n title?: string;\n\n /** News text */\n text?: string;\n\n /** News image settings */\n image?: Omit<ImageProps, 'coverSpace'>;\n\n /** News link settings */\n link?: LinkProps;\n\n /** Callback function if tag in news iten has been clicked */\n onTagClick?: (tag: TagProps) => void;\n\n /** Function to inject primary action */\n action?: (isInverted?: boolean) => React.ReactNode;\n\n /** Function to inject custom tag node */\n customTag?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n isActive?: boolean;\n link?: LinkProps;\n clickHandler?: (ev?: React.SyntheticEvent<HTMLAnchorElement>) => void;\n }) => React.ReactNode;\n\n hasBg?: boolean;\n}\n\nconst NewsCard = forwardRef<\n HTMLDivElement,\n NewsCardProps & {\n className?: string;\n }\n>(\n (\n {\n tags,\n onTagClick,\n publishDate,\n title,\n text,\n image,\n link,\n isInverted,\n action,\n customTag,\n className,\n hasBg,\n },\n ref\n ) => {\n const { globals } = useLibTheme();\n\n let publishedAt = '';\n if (publishDate) {\n const formatter = new StatusFormatter(\n publishDate.getTime(),\n '',\n globals.sections.newsDateFormat(publishDate),\n globals.sections.newsTimeFormat(publishDate),\n globals.sections.newsLocaleKey\n );\n publishedAt = formatter.getFormattedDate();\n }\n\n const handleTagClick = (tag: TagProps) =>\n onTagClick\n ? (ev?: React.SyntheticEvent<HTMLAnchorElement>) => {\n ev?.preventDefault();\n onTagClick(tag);\n }\n : undefined;\n\n const filteredTags = useMemo(() => {\n return tags?.filter((tag) => tag.name);\n }, [tags]);\n\n return (\n <View ref={ref} className={className}>\n {image ? (\n <ImageLink {...link} ariaLabel={title}>\n <StyledImage\n {...image}\n coverSpace\n isInverted={isInverted}\n />\n </ImageLink>\n ) : (\n <BorderPlaceholder hasBg={hasBg} />\n )}\n <Head data-sheet=\"head\">\n {isValidArray(filteredTags, false) && (\n <Tags>\n {filteredTags.map((tag, i) => {\n if (customTag) {\n return customTag({\n key: i,\n name: tag.name || '',\n isInverted: isInverted,\n isActive: false,\n link: tag.link,\n clickHandler: handleTagClick(tag),\n });\n } else {\n return (\n <Tag\n key={i}\n isInverted={isInverted}\n name={tag.name}\n link={tag.link}\n onClick={handleTagClick(tag)}\n />\n );\n }\n })}\n </Tags>\n )}\n {publishedAt && (\n <PublishDate\n size=\"small\"\n renderAs=\"div\"\n isInverted={isInverted}\n >\n {publishedAt}\n </PublishDate>\n )}\n </Head>\n <Main>\n {title && (\n <TitleLink\n {...link}\n ariaLabel={title}\n isInverted={isInverted}\n dataSheet=\"title\"\n >\n {title}\n </TitleLink>\n )}\n {text && (\n <Text\n isInverted={isInverted}\n type=\"copy\"\n innerHTML={text}\n data-sheet=\"text\"\n size=\"medium\"\n />\n )}\n </Main>\n {action && <Action>{action(isInverted)}</Action>}\n </View>\n );\n }\n);\n\nNewsCard.displayName = 'NewsCard';\n\nexport default NewsCard;\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport styled, { DefaultTheme } from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\n\nimport NewsCard, { NewsCardProps } from 'components/blocks/NewsCard';\nimport { mq, spacings } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Tag, { TagProps } from 'components/blocks/Tag';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport { useObserverSupport } from 'utils/useObserverSupport';\nimport Copy from 'components/typography/Copy';\nimport { useScrollTo } from 'utils/useScrollTo';\nimport Pointer from 'components/buttons/Pointer';\nimport { isValidArray } from 'utils/arrays';\nimport { deleteUrlParam, getUrlParams, setUrlParam } from 'utils/urlParams';\nimport Filter from 'components/base/icons/Filter';\nimport useUpdateEffect from 'utils/useUpdateEffect';\nimport useMounted from 'utils/useMounted';\n\nconst TagContainer = styled.div`\n margin-top: -${spacings.nudge}px;\n margin-left: -${spacings.nudge}px;\n\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n\n &:not(:only-child) {\n margin-bottom: ${spacings.nudge * 6}px;\n }\n`;\n\nconst TagWrapper = styled.div`\n padding-top: ${spacings.nudge}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst News = styled.ul`\n list-style: none;\n margin: 0;\n margin-top: -${spacings.nudge * 6}px;\n margin-left: -${spacings.spacer}px;\n padding: 0;\n\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n justify-content: flex-start;\n\n flex-wrap: wrap;\n`;\n\nconst NewsItem = styled.li`\n padding-top: ${spacings.nudge * 6}px;\n padding-left: ${spacings.spacer}px;\n flex: 1 0 100%;\n\n @media ${mq.medium} {\n flex: 1 0 50%;\n max-width: 50%;\n }\n\n @media ${mq.large} {\n flex: 1 0 33.33%;\n max-width: 33.33%;\n }\n`;\n\nconst ListFooter = styled.div`\n margin-top: ${spacings.nudge * 6}px;\n text-align: center;\n\n @media ${mq.medium} {\n text-align: left;\n }\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 2 ? 'block' : 'none'};\n`;\n\nconst FilterIcon = styled(Copy)`\n display: flex;\n flex-direction: row;\n align-items: center;\n\n padding: ${spacings.nudge / 2}px ${spacings.nudge}px 0 0;\n\n & > * + * {\n margin-left: ${spacings.nudge}px;\n }\n`;\n\nexport const getNewsFilterParams = (\n url: string,\n theme: DefaultTheme,\n tags: string[] = []\n) => {\n if (!url) return '';\n if (!isValidArray(tags, false)) return url;\n\n const filterName = theme.globals.sections.newsFilterName;\n if (!filterName) return url;\n\n try {\n const validUrl = new URL(url);\n const newParams = new URLSearchParams(validUrl.search);\n newParams.set(filterName, encodeURIComponent(tags.join(',')));\n\n return `${url}?${newParams.toString()}`;\n } catch (err) {\n return `${url}?${filterName}=${encodeURIComponent(tags.join(','))}`;\n }\n};\n\ntype NewsOverviewMq = 'small' | 'semilarge' | 'large';\n\nexport type NewsItem = Omit<\n NewsCardProps,\n 'customTag' | 'isInverted' | 'onTagClick'\n>;\n\nconst NewsOverview: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of news item settings */\n news?: NewsItem[];\n\n /** Tags for news filtering */\n tags?: string[];\n\n /** Initial data. If not defined the component tries to collect this from URL params */\n initial?: {\n activeTags?: string[];\n visibleRows?: number;\n };\n\n /** Text for load more toggle. Only visible if browser doesn't support IntersectionObserver. */\n showMoreText?: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /**\n * Callback function to handle tag click outside of component\n * If no callback is defined filtering is controlled on client\n * */\n onTagClick?: (tag: TagProps, insideList?: boolean) => void;\n\n /** Function to inject custom tag node */\n customTag?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n isActive?: boolean;\n clickHandler?: (ev?: React.SyntheticEvent<HTMLElement>) => void;\n }) => React.ReactNode;\n}> = ({\n anchorId,\n news,\n tags,\n initial,\n showMoreText,\n bgMode,\n\n onTagClick,\n customTag,\n}) => {\n const { colors, globals } = useLibTheme();\n const filterName = globals.sections.newsFilterName;\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const [selectedTags, setSelectedTags] = useState<string[]>(\n initial?.activeTags || []\n );\n\n const mqs: NewsOverviewMq[] = ['small', 'semilarge', 'large'];\n const currentMq = useMediaQuery(mqs) as NewsOverviewMq | undefined;\n const [itemsPerRow, setItemsPerRow] = useState(3);\n const [visibleRows, setVisibleRows] = useState(initial?.visibleRows || 3);\n const isMounted = useMounted();\n\n const targetRef = useRef<HTMLDivElement>(null);\n const observerSupported = useObserverSupport();\n\n const newsCount = news?.length || 0;\n\n const setNewPos = useScrollTo(800);\n const { sheetRefs: cardRefs, triggerCalculation } =\n useEqualSheetHeight<HTMLDivElement>({\n listLength: Math.min(visibleRows * itemsPerRow, newsCount),\n identifiers: [\n '[data-sheet=\"head\"]',\n '[data-sheet=\"title\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 3,\n xlarge: 3,\n },\n });\n\n const getFilters = useCallback(() => {\n const tags: string[] = [];\n\n const filters = getUrlParams()[filterName];\n if (filters) {\n const tagsFilter = filters?.split(',');\n if (isValidArray(tagsFilter, false)) {\n tags.push(...tagsFilter);\n }\n }\n return tags;\n }, [filterName]);\n\n useEffect(() => {\n // if initial data is defined exit hook\n if (initial) return;\n\n // if no initial data provied try to find needed params in URL\n const paramTags = getFilters();\n const paramRows = parseInt(getUrlParams()['rows']);\n\n setVisibleRows(paramRows || 3);\n\n if (isValidArray(paramTags, false)) {\n setSelectedTags(paramTags);\n }\n\n // trigger equal sheet height recalculation\n triggerCalculation();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getFilters, initial]);\n\n useEffect(() => {\n if (!initial || isMounted) return;\n\n // set inital data into URL\n setUrlParam('rows', initial?.visibleRows || 3);\n\n if (isValidArray(initial?.activeTags, false)) {\n setUrlParam(filterName, initial?.activeTags?.join(','));\n } else {\n deleteUrlParam(filterName);\n }\n }, [filterName, initial, isMounted]);\n\n useUpdateEffect(() => {\n setUrlParam('rows', visibleRows);\n }, [visibleRows]);\n\n useUpdateEffect(() => {\n if (onTagClick || !isValidArray(selectedTags)) return;\n\n // set filters to URL params\n if (selectedTags.length > 0) {\n setUrlParam(filterName, selectedTags.join(','));\n } else {\n deleteUrlParam(filterName);\n }\n }, [selectedTags]);\n\n useEffect(() => {\n switch (currentMq) {\n case 'large':\n setItemsPerRow(3);\n break;\n\n case 'semilarge':\n setItemsPerRow(2);\n break;\n\n case 'small':\n setItemsPerRow(1);\n if (visibleRows < 3) setVisibleRows(3);\n break;\n\n default:\n setItemsPerRow(1);\n }\n }, [currentMq, visibleRows]);\n\n const handleTagClick = (tag: TagProps, enableToggling = true) => {\n setSelectedTags((prev) => {\n const prevCopy = [...prev];\n const itemIndex = tag.name ? prev.indexOf(tag.name) : -1;\n\n if (itemIndex === -1 && tag.name) {\n return [...prevCopy, tag.name];\n }\n if (enableToggling) {\n prevCopy.splice(itemIndex, 1);\n return prevCopy;\n }\n return prev;\n });\n // trigger equal sheet height recalculation\n triggerCalculation();\n setVisibleRows(3);\n };\n\n const filteredNews = useMemo(() => {\n const tagFilterFn = (item: NewsItem) => {\n if (!isValidArray(selectedTags, false)) return true;\n if (!item.tags) return false;\n\n let hasTags = false;\n for (let i = 0; i < item.tags.length; i++) {\n if (selectedTags.indexOf(item.tags[i].name || '') !== -1) {\n hasTags = true;\n break;\n }\n }\n return hasTags;\n };\n\n let filtered = isValidArray(news) ? [...news] : [];\n\n // adding filter\n filtered = filtered?.filter(tagFilterFn);\n\n return filtered;\n }, [news, selectedTags]);\n\n const visibleNews: NewsItem[] = useMemo(() => {\n return (\n filteredNews?.filter((_, i) => i < visibleRows * itemsPerRow) || []\n );\n }, [filteredNews, itemsPerRow, visibleRows]);\n\n useEffect(() => {\n // cancel if intersection observers are not supported\n if (!observerSupported) return;\n\n const element = targetRef.current;\n let observer: IntersectionObserver;\n\n if (element) {\n const options = {\n rootMargin: '0px 0px 100px 0px',\n threshold: 0,\n };\n\n observer = new IntersectionObserver((entries) => {\n const entry = entries[0];\n if (entry?.isIntersecting) {\n // on bottom of the wrapper load more news\n if (\n visibleRows <\n Math.ceil(filteredNews.length / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }\n }, options);\n observer.observe(element);\n }\n\n return () => {\n if (observer) observer.disconnect();\n };\n }, [\n itemsPerRow,\n newsCount,\n visibleRows,\n observerSupported,\n filteredNews.length,\n ]);\n\n const filteredTags = useMemo(() => {\n return tags?.filter((tag) => tag);\n }, [tags]);\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {isValidArray(filteredTags, false) && (\n <TagContainer>\n <FilterIcon\n size=\"small\"\n type=\"copy\"\n isInverted={isInverted}\n >\n <Filter />\n <span>Filter</span>\n </FilterIcon>\n {filteredTags.map((tag, i) => (\n <TagWrapper key={i}>\n {customTag ? (\n customTag({\n key: i,\n name: tag,\n isInverted: isInverted,\n isActive:\n selectedTags.indexOf(tag) !== -1,\n clickHandler: (ev) => {\n ev?.preventDefault();\n if (!onTagClick) {\n handleTagClick({ name: tag });\n } else onTagClick({ name: tag });\n },\n })\n ) : (\n <Tag\n isInverted={isInverted}\n onClick={(ev) => {\n ev?.preventDefault();\n if (!onTagClick) {\n handleTagClick({ name: tag });\n } else\n onTagClick(\n { name: tag },\n false\n );\n }}\n isActive={\n selectedTags.indexOf(tag) !== -1\n }\n >\n {tag}\n </Tag>\n )}\n </TagWrapper>\n ))}\n </TagContainer>\n )}\n <News>\n {visibleNews.map((item, i) => (\n <NewsItem key={`${i}_news_${item.title}`}>\n <NewsCard\n hasBg={hasBg || isInverted}\n ref={cardRefs[i]}\n {...item}\n tags={item.tags?.map((tag) => ({\n name: tag.name,\n }))}\n isInverted={isInverted}\n onTagClick={(tag) => {\n // scroll back to top\n setNewPos(0);\n if (!onTagClick) {\n // if no callback is defined handle filtering on client side inside the component\n handleTagClick(\n { name: tag.name },\n false\n );\n } else {\n onTagClick({ name: tag.name }, true);\n }\n }}\n customTag={customTag}\n />\n </NewsItem>\n ))}\n </News>\n <div ref={targetRef} />\n {!observerSupported && (\n <ListFooter>\n {news && news.length > 0 && (\n <Copy\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n >\n <ShowMore\n itemCount={news.length}\n onClick={(ev) => {\n ev.preventDefault();\n if (\n visibleRows <\n Math.ceil(\n filteredNews.length /\n itemsPerRow\n )\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows <\n filteredNews.length / itemsPerRow && (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMoreText ||\n 'mehr anzeigen'}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n </Copy>\n )}\n </ListFooter>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const NewsOverviewComponent = NewsOverview;\nexport default withLibTheme(NewsOverview);\n","import React from 'react';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport NewsCard, { NewsCardProps } from 'components/blocks/NewsCard';\nimport { useEffect, useState } from 'react';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Grid from 'components/base/Grid';\nimport { LinkProps } from 'components/typography/Link';\nimport { getNewsFilterParams } from './NewsOverview';\n\ntype NewsFooterMq = 'small' | 'semilarge';\n\nexport type NewsItem = Omit<\n NewsCardProps,\n 'isInverted' | 'onTagClick' | 'customTag'\n>;\n\nconst NewsFooter: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of news item settings */\n news: NewsItem[];\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Function to inject custom tag node */\n customTag?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n isActive?: boolean;\n link?: LinkProps;\n }) => React.ReactNode;\n}> = ({ anchorId, news, bgMode, customTag }) => {\n const { colors, theme } = useLibTheme();\n const newsCount = news?.length || 0;\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const mqs: NewsFooterMq[] = ['small', 'semilarge'];\n const currentMq = useMediaQuery(mqs) as NewsFooterMq | undefined;\n const [itemsPerRow, setItemsPerRow] = useState(2);\n const [visibleRows, setVisibleRows] = useState(1);\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight<HTMLDivElement>({\n listLength: Math.min(visibleRows * itemsPerRow, newsCount),\n identifiers: [\n '[data-sheet=\"head\"]',\n '[data-sheet=\"title\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 2,\n xlarge: 2,\n },\n });\n\n useEffect(() => {\n switch (currentMq) {\n case 'semilarge':\n setItemsPerRow(2);\n break;\n\n case 'small':\n setItemsPerRow(1);\n if (visibleRows < 3) setVisibleRows(3);\n break;\n\n default:\n setItemsPerRow(1);\n }\n }, [currentMq, visibleRows]);\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace clampWidth=\"small\">\n <Grid.Row>\n {news\n ?.filter((_, i) => i < visibleRows * itemsPerRow)\n .map((item, i) => (\n <Grid.Col\n medium={{ span: 6 / 12 }}\n key={`${i}_news_${item.title}`}\n >\n <NewsCard\n key={i}\n ref={cardRefs[i]}\n {...item}\n tags={item.tags?.map((tag) => {\n let tagHref: string | undefined =\n undefined;\n\n if (tag.name && tag.link?.href) {\n tagHref = getNewsFilterParams(\n tag.link.href,\n theme,\n [tag.name]\n );\n }\n\n return {\n name: tag.name,\n link: tag.link?.href\n ? {\n ...tag.link,\n href: tagHref,\n }\n : undefined,\n };\n })}\n isInverted={isInverted}\n customTag={customTag}\n />\n </Grid.Col>\n ))}\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const NewsFooterComponent = NewsFooter;\nexport default withLibTheme(NewsFooter);\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport { getGlobals as global } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Grid from 'components/base/Grid';\n\nconst StyledImage = styled(Image)`\n width: 100%;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n overflow: hidden;\n\n picture > img {\n width: 100%;\n height: 100%;\n }\n`;\n\ntype ImageType = Omit<ImageProps, 'coverSpace'> & { isFull?: boolean };\n\nconst NewsImages: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** List of gallery images */\n images?: ImageType[];\n\n /** Image style */\n isFull?: boolean;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, images, bgMode }) => {\n const { colors } = useLibTheme();\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n <Grid.Row>\n {images\n ?.filter((img) => img.small)\n ?.map((img, i) => (\n <Grid.Col\n key={i}\n semilarge={{\n span: img.isFull ? 12 / 12 : 6 / 12,\n }}\n >\n <StyledImage\n {...img}\n coverSpace\n isInverted={isInverted}\n />\n </Grid.Col>\n ))}\n </Grid.Row>\n {/* {images && (imageStyle === 'half' || images.length >= 2) ? (\n <Grid.Row>\n {images.map((img, i) => {\n return (\n <Grid.Col medium={{ span: 6 / 12 }} key={i}>\n <div>\n <StyledImage\n {...img}\n coverSpace\n isInverted={isInverted}\n />\n </div>\n </Grid.Col>\n );\n })}\n </Grid.Row>\n ) : (\n images && (\n <div>\n {images.map((img, i) => {\n return (\n <StyledImage\n key={i}\n {...img}\n coverSpace\n isInverted={isInverted}\n />\n );\n })}\n </div>\n )\n )} */}\n </Wrapper>\n </Section>\n );\n};\n\nexport const NewsImagesComponent = NewsImages;\nexport default withLibTheme(NewsImages);\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Title from 'components/blocks/Title';\nimport Copy from 'components/typography/Copy';\nimport Tag, { TagProps } from 'components/blocks/Tag';\nimport { mq, spacings } from 'utils/styles';\nimport StatusFormatter from 'utils/statusFormatter';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { LinkProps } from 'components/typography/Link';\nimport { getNewsFilterParams } from './NewsOverview';\n\nconst Content = styled.div`\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst IntroHead = styled(Copy)`\n display: flex;\n\n flex-direction: column;\n align-items: flex-start;\n justify-content: space-between;\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n\n @media ${mq.medium} {\n flex-direction: row;\n align-items: center;\n\n & > * + * {\n margin-top: 0;\n margin-left: ${spacings.nudge * 2}px;\n }\n }\n`;\n\nconst Tags = styled.div`\n flex: 1 1 80%;\n\n display: flex;\n flex-wrap: wrap;\n margin-top: -${spacings.nudge}px;\n margin-left: -${spacings.nudge}px;\n`;\n\nconst TagWrapper = styled.span`\n display: inline-block;\n padding-top: ${spacings.nudge}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst MetaBlock = styled.div`\n flex: 1 0 auto;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n`;\n\nconst StyledTitle = styled(Title)<{ clampTitle?: boolean }>`\n max-width: ${({ clampTitle }) =>\n clampTitle && (13 / 28) * spacings.wrapperSmall + 'px'};\n`;\n\nconst ContentBlock = styled(Copy)<{\n clampText?: boolean;\n isCentered?: boolean;\n}>`\n display: block;\n margin: ${({ isCentered }) => isCentered && '0 auto'};\n max-width: ${({ clampText }) =>\n clampText && (19 / 28) * spacings.wrapper + 'px'};\n\n :not(:first-child) {\n padding-top: ${spacings.spacer}px;\n }\n`;\n\nconst NewsIntro: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of news tags */\n tags?: TagProps[];\n\n /** News article's meta informations */\n meta?: { date?: Date; author?: string };\n\n /** Title of news article */\n title?: string;\n\n /** Main image of news article */\n image?: Omit<ImageProps, 'coverSpace'>;\n\n /** Text of news article (richtext) */\n text?: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Function to inject custom tag node */\n customTag?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n isActive?: boolean;\n link?: LinkProps;\n }) => React.ReactNode;\n}> = ({ anchorId, tags, meta, title, text, image, bgMode, customTag }) => {\n const { globals, colors, theme } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n let publishedAt = '';\n if (meta?.date) {\n const formatter = new StatusFormatter(\n meta.date.getTime(),\n '',\n globals.sections.newsDateFormat(meta.date),\n globals.sections.newsTimeFormat(meta.date),\n globals.sections.newsLocaleKey\n );\n publishedAt = formatter.getFormattedDate();\n }\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n <Content>\n <IntroHead isInverted={isInverted}>\n <Tags>\n {tags?.map((tag, i) => {\n let tagLink: LinkProps | undefined = undefined;\n\n if (tag.name && tag.link?.href) {\n tagLink = {\n ...tag.link,\n href: getNewsFilterParams(\n tag.link.href,\n theme,\n [tag.name]\n ),\n };\n }\n\n return (\n <TagWrapper key={`headtag-${i}`}>\n {customTag ? (\n customTag({\n key: `headtag-${i}`,\n name: tag.name || '',\n isInverted: isInverted,\n isActive: false,\n link: tagLink,\n })\n ) : (\n <Tag\n link={tagLink}\n isInverted={isInverted}\n >\n {tag.name}\n </Tag>\n )}\n </TagWrapper>\n );\n })}\n </Tags>\n {(publishedAt || meta?.author) && (\n <MetaBlock>\n {meta?.author && <div>{meta?.author}</div>}\n {publishedAt && <div>{publishedAt}</div>}\n </MetaBlock>\n )}\n </IntroHead>\n <div>\n <StyledTitle\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n />\n {text && (\n <ContentBlock\n isInverted={isInverted}\n type=\"copy-b\"\n innerHTML={text}\n />\n )}\n </div>\n {image?.small && (\n <Image\n {...image}\n coverSpace\n allowEdgeRadius\n isInverted={isInverted}\n />\n )}\n </Content>\n </Wrapper>\n </Section>\n );\n};\n\nexport const NewsIntroComponent = NewsIntro;\nexport default withLibTheme(NewsIntro);\n","import React, { useMemo } from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\n\nimport NewsCard, { NewsCardProps } from 'components/blocks/NewsCard';\nimport { mq, spacings } from 'utils/styles';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { LinkProps } from 'components/typography/Link';\nimport { getNewsFilterParams } from './NewsOverview';\n\nconst News = styled.ul`\n list-style: none;\n margin: 0;\n margin-top: -${spacings.nudge * 6}px;\n margin-left: -${spacings.spacer}px;\n padding: 0;\n\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n justify-content: flex-start;\n\n flex-wrap: wrap;\n`;\n\nconst NewsItem = styled.li`\n padding-top: ${spacings.nudge * 6}px;\n padding-left: ${spacings.spacer}px;\n flex: 1 0 100%;\n max-width: 100%;\n\n @media ${mq.medium} {\n flex: 1 0 50%;\n max-width: 50%;\n }\n\n @media ${mq.large} {\n flex: 1 0 33.33%;\n max-width: 33.33%;\n }\n`;\n\nexport type NewsItem = Omit<\n NewsCardProps,\n 'isInverted' | 'onTagClick' | 'customTag'\n>;\n\nconst NewsList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Show a short version of three or a expanded version of six news items */\n mode?: 'short' | 'expanded';\n\n /** Array of news card settings */\n news?: NewsItem[];\n\n /** Sections background */\n bgMode?: 'full' | 'inverted';\n\n /** Function to inject custom tag node */\n customTag?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n isActive?: boolean;\n link?: LinkProps;\n }) => React.ReactNode;\n}> = ({ anchorId, mode = 'short', news, bgMode, customTag }) => {\n const { colors, theme } = useLibTheme();\n\n const items = useMemo<NewsCardProps[]>(() => {\n if (!news) return [];\n if (mode === 'expanded') return news.slice(0, 6);\n else return news.slice(0, 3);\n }, [news, mode]);\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight<HTMLDivElement>({\n listLength: items.length,\n identifiers: [\n '[data-sheet=\"head\"]',\n '[data-sheet=\"title\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: 1,\n medium: 2,\n semilarge: 2,\n large: 3,\n xlarge: 3,\n },\n });\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <News>\n {items?.map((item, i) => (\n <NewsItem key={i}>\n <NewsCard\n key={i}\n ref={cardRefs[i]}\n {...item}\n isInverted={isInverted}\n tags={item.tags?.map((tag) => {\n let tagHref: string | undefined = undefined;\n\n if (tag.name && tag.link?.href) {\n tagHref = getNewsFilterParams(\n tag.link.href,\n theme,\n [tag.name]\n );\n }\n\n return {\n name: tag.name,\n link: tag.link?.href\n ? {\n ...tag.link,\n href: tagHref,\n }\n : undefined,\n };\n })}\n customTag={customTag}\n />\n </NewsItem>\n ))}\n </News>\n </Wrapper>\n </Section>\n );\n};\n\nexport const NewsListComponent = NewsList;\nexport default withLibTheme(NewsList);\n","import React from 'react';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport TableBlock, { TableProps } from 'components/blocks/TableBlock';\nimport styled from 'styled-components';\nimport { spacings } from 'utils/styles';\n\nconst TableWrapper = styled(Wrapper)`\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst NewsTable: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Table rows and columns */\n tableItems: TableProps[];\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, bgMode, tableItems }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full' || isInverted;\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <TableWrapper clampWidth=\"small\">\n {tableItems.map((item, i) => {\n return (\n <TableBlock\n {...item}\n key={i}\n hasBack={hasBg}\n isInverted={isInverted}\n />\n );\n })}\n </TableWrapper>\n </Section>\n );\n};\n\nexport const NewsTableComponent = NewsTable;\nexport default withLibTheme(NewsTable);\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Copy from 'components/typography/Copy';\nimport Wrapper from 'components/base/Wrapper';\nimport { spacings } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\n\nconst ContentBlock = styled(Copy)<{\n clampText?: boolean;\n isCentered?: boolean;\n}>`\n display: block;\n margin: ${({ isCentered }) => isCentered && '0 auto'};\n max-width: ${({ clampText }) =>\n clampText && (19 / 28) * spacings.wrapperSmall + 'px'};\n\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n`;\n\nconst NewsText: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Main text (RichText) */\n text: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, text, bgMode }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n {text && (\n <ContentBlock\n isInverted={isInverted}\n type=\"copy\"\n innerHTML={text}\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const NewsTextComponent = NewsText;\nexport default withLibTheme(NewsText);\n","import React, { FC, useState } from 'react';\nimport styled from 'styled-components';\n\nimport { ImageProps } from 'components/blocks/Image';\nimport {\n mq,\n getColors as color,\n getGlobals as global,\n spacings,\n} from 'utils/styles';\nimport Play from 'components/base/icons/Play';\nimport {\n CookieConsentData,\n selectors,\n} from 'utils/cookie-consent/useCookieConsent';\nimport { Cookie, getCookie } from 'utils/cookie-consent/cookie';\nimport Copy from 'components/typography/Copy';\nimport ButtonGhost from 'components/buttons/ButtonGhost';\nimport { useLibTheme } from 'utils/LibThemeProvider';\n\nconst View = styled.div<{\n bgImage?: ImageProps;\n isActive?: boolean;\n onClick?: () => void;\n}>`\n text-align: center;\n\n cursor: ${({ onClick }) => onClick && 'pointer'};\n position: relative;\n\n padding-bottom: 56.25%;\n\n background-image: url('${({ bgImage }) => (bgImage ? bgImage.small : '')}');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n overflow: hidden;\n\n @media ${mq.medium} {\n text-align: left;\n\n background-image: ${({ bgImage }) =>\n bgImage?.medium && `url(\"${bgImage.medium}\")`};\n }\n\n @media ${mq.semilarge} {\n background-image: ${({ bgImage }) =>\n bgImage?.semilarge && `url(\"${bgImage.semilarge}\")`};\n }\n\n @media ${mq.large} {\n background-image: ${({ bgImage }) =>\n bgImage?.large && `url(\"${bgImage.large}\")`};\n }\n\n @media ${mq.xlarge} {\n background-image: ${({ bgImage }) =>\n bgImage?.xlarge && `url(\"${bgImage.xlarge}\")`};\n }\n\n &:before {\n content: ${({ isActive, bgImage }) => !isActive && bgImage && '\"\"'};\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background-color: ${({ theme }) => color(theme).elementBg.medium};\n opacity: ${({ bgImage }) => (bgImage ? '0.3' : '0')};\n\n pointer-events: none;\n }\n\n &:after {\n content: ${({ isActive, bgImage }) => !isActive && bgImage && '\"\"'};\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n pointer-events: none;\n\n background: linear-gradient(\n 358.19deg,\n rgba(29, 34, 35, 0.52) 12.37%,\n rgba(29, 34, 35, 0) 59.02%\n );\n }\n`;\n\nconst VideoControls = styled.button`\n display: block;\n border: none;\n background: none;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n color: ${({ theme }) => color(theme).elementBg.light};\n z-index: 1;\n padding: 0;\n\n cursor: pointer;\n\n & > * {\n opacity: 0.8;\n transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;\n height: 80px;\n width: 80px;\n\n color: ${({ theme }) => color(theme).elementBg.dark};\n }\n\n ${View}:hover > & > * {\n transform: scale(1.05);\n opacity: 1;\n }\n\n ${View}:active > & > * {\n transform: scale(0.95);\n opacity: 1;\n }\n\n &:focus {\n outline: 2px solid ${({ theme }) => color(theme).primary.default};\n border-radius: 50%;\n opacity: 1;\n\n & > * {\n color: ${({ theme }) => color(theme).primary.default};\n }\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n box-shadow: none;\n }\n`;\n\nconst ConsentOverlay = styled.div<{ isVisible?: boolean }>`\n display: ${({ isVisible }) => (isVisible ? 'flex' : 'none')};\n justify-content: center;\n align-items: center;\n\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n background-color: rgba(0, 0, 0, 0.6);\n pointer-events: ${({ isVisible }) => (isVisible ? 'all' : 'none')};\n`;\n\nconst ConsentContent = styled.div`\n max-width: 330px;\n text-align: center;\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst ConsentText = styled(Copy)``;\n\nconst Iframe = styled.iframe`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n\n border: none;\n`;\n\nexport interface VideoCardProps {\n bgImage: ImageProps;\n embedId: string;\n playIcon?: React.ReactNode;\n consentText?: string;\n consentAction?: (props: {\n handleClick?: () => void;\n consentProps: Record<string, string>;\n }) => React.ReactNode;\n}\n\nconst VideoCard: FC<VideoCardProps & { className?: string }> = ({\n bgImage,\n embedId,\n playIcon,\n consentText = 'Für die Wiedergabe von Videos muss der Nutzung von Cookies & Daten zugestimmt werden.',\n consentAction,\n className,\n}) => {\n const { globals } = useLibTheme();\n const [isActive, setIsActive] = useState(false);\n const [showConsent, setShowConsent] = useState(false);\n\n const handlePlayClick = () => {\n const cookie = getCookie(\n globals.cookie.name\n ) as Cookie<CookieConsentData>;\n\n const isAccepted =\n globals.cookie.videoCookieTypeRestrictions.reduce<boolean>(\n (acc, current) => {\n if (!acc) return acc;\n if (!cookie || !cookie?.data.types) return false;\n\n // set acc to false if type is not defined or set to false\n acc = !!cookie?.data?.types?.[current];\n return acc;\n },\n true\n );\n\n if (isAccepted) {\n setIsActive(true);\n setShowConsent(false);\n } else {\n setShowConsent(true);\n }\n };\n\n const handleConsentActionClick = () => {\n setShowConsent(false);\n };\n\n return (\n <View\n onClick={!showConsent ? handlePlayClick : undefined}\n bgImage={isActive ? undefined : bgImage}\n isActive={isActive}\n className={className}\n >\n {!isActive && !showConsent && (\n <VideoControls>\n {playIcon || <Play iconColor=\"#000\" />}\n </VideoControls>\n )}\n {isActive && (\n <Iframe\n id=\"ytplayer\"\n src={`https://www.youtube.com/embed/${embedId}?autoplay=1`}\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n />\n )}\n <ConsentOverlay isVisible={showConsent}>\n <ConsentContent>\n {consentText && (\n <ConsentText isInverted>{consentText}</ConsentText>\n )}\n {consentAction ? (\n consentAction({\n handleClick: handleConsentActionClick,\n consentProps: {\n [selectors.buttons.attribute]: '',\n },\n })\n ) : (\n <ButtonGhost.View\n as=\"button\"\n isInverted\n onClick={handleConsentActionClick}\n className={selectors.buttons.class}\n >\n <ButtonGhost.Label>\n Zustimmung ändern\n </ButtonGhost.Label>\n </ButtonGhost.View>\n )}\n </ConsentContent>\n </ConsentOverlay>\n </View>\n );\n};\n\nexport default VideoCard;\n","import React from 'react';\n\nimport { ImageProps } from 'components/blocks/Image';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Wrapper from 'components/base/Wrapper';\nimport VideoCard from 'components/blocks/VideoCard';\n\nconst NewsVideo: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Placeholder image */\n bgImage?: ImageProps;\n\n /** Embed video ID. E.g. from Youtube */\n embedId?: string;\n\n /** Custom play icon */\n playIcon?: React.ReactNode;\n\n /** Text for cookie consent overlay */\n consentText?: string;\n\n /** Function to inject custom action on cookie consent overlay */\n consentAction?: (props: {\n handleClick?: () => void;\n consentProps: Record<string, string>;\n }) => React.ReactNode;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({\n anchorId,\n bgImage,\n embedId,\n playIcon,\n consentText,\n consentAction,\n bgMode,\n}) => {\n const { colors } = useLibTheme();\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace clampWidth=\"small\">\n {embedId && bgImage && (\n <VideoCard\n bgImage={bgImage}\n embedId={embedId}\n playIcon={playIcon}\n consentText={consentText}\n consentAction={consentAction}\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const NewsVideoComponent = NewsVideo;\nexport default withLibTheme(NewsVideo);\n","import Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Callout from 'components/typography/Callout';\nimport Heading from 'components/typography/Heading';\nimport React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport { withLibTheme } from 'utils/LibThemeProvider';\n\nconst View = styled.div`\n text-align: center;\n\n & > * {\n margin: 0 auto;\n }\n\n @media ${mq.semilarge} {\n text-align: left;\n\n & > * {\n margin: 0;\n }\n }\n`;\n\nconst Icon = styled.img`\n display: block;\n max-width: 140px;\n max-height: 140px;\n\n margin-bottom: ${spacings.nudge * 2}px;\n`;\n\nconst NumberContainer = styled.div<{ height: number }>`\n max-width: max-content;\n min-height: 90px;\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n\n @media ${mq.semilarge} {\n min-height: 100px;\n }\n\n /* margin-bottom: ${spacings.nudge * 2}px; */\n\n @media ${mq.large} {\n min-height: 120px;\n }\n`;\n\nconst Number = styled(Callout)<{ isInverted?: boolean; stringLength: number }>`\n max-height: 140px;\n ${({ stringLength }) =>\n stringLength <= 6\n ? withRange([72, 120], 'font-size')\n : stringLength >= 10\n ? withRange([33, 42], 'font-size')\n : withRange([52, 72], 'font-size')}\n\n color: ${({ isInverted, theme }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n`;\n\nconst Label = styled(Heading)`\n max-width: 80%;\n`;\n\nconst IconBlock: React.FC<{\n icon?: { src: string; alt?: string };\n number?: string;\n label?: string;\n isInverted?: boolean;\n}> = ({ icon, label, number, isInverted }) => {\n const theme = useContext(ThemeContext);\n\n const stringLength = number ? number.length : 0;\n\n return (\n <View>\n {icon && <Icon src={icon.src} alt={icon.alt} />}\n <NumberContainer height={0}>\n <Number\n renderAs=\"div\"\n stringLength={stringLength}\n isInverted={isInverted}\n >\n {number}\n </Number>\n </NumberContainer>\n <Label\n size=\"super\"\n textColor={\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default\n }\n >\n {label}\n </Label>\n </View>\n );\n};\n\nconst ContentContainer = styled.div`\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n justify-content: space-between;\n flex-wrap: wrap;\n\n margin: -${spacings.spacer}px;\n margin-top: -${spacings.spacer * 2}px;\n\n @media ${mq.semilarge} {\n margin-top: -${spacings.spacer}px;\n }\n\n & > * {\n padding: ${spacings.spacer}px;\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.semilarge} {\n padding-top: ${spacings.spacer}px;\n }\n\n flex-basis: 100%;\n\n @media ${mq.semilarge} {\n flex: 0 0 50%;\n }\n\n @media ${mq.large} {\n flex: 0 1 33.33%;\n }\n }\n`;\n\nconst NumberList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n items?: {\n icon?: { src: string; alt?: string };\n number?: string;\n label?: string;\n }[];\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, items, bgMode }) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? color(theme).sectionBg.dark\n : hasBg\n ? color(theme).sectionBg.medium\n : color(theme).sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <ContentContainer>\n {items?.map((item, i) => {\n return (\n <IconBlock\n {...item}\n key={i}\n isInverted={isInverted}\n />\n );\n })}\n </ContentContainer>\n </Wrapper>\n </Section>\n );\n};\n\nexport const NumberListComponent = NumberList;\nexport default withLibTheme(NumberList);\n","import React, { FC, useEffect, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport { spacings } from 'utils/styles';\n\nconst View = styled.section`\n position: relative;\n width: 100vw;\n z-index: -1;\n`;\n\nconst Parallax = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n margin-left: 0;\n width: 100%;\n`;\n\nconst Content = styled.div<{\n contentWidth?: number;\n hAlign?: 'left' | 'center' | 'right';\n}>`\n margin-left: ${({ hAlign }) =>\n (hAlign === 'right' || hAlign === 'center') && 'auto'};\n margin-right: ${({ hAlign }) =>\n (hAlign === 'left' || hAlign === 'center') && 'auto'};\n\n width: ${({ contentWidth }) =>\n contentWidth\n ? contentWidth === -1\n ? 'auto'\n : contentWidth * 100 + '%'\n : undefined};\n\n max-width: ${spacings.wrapperLarge}px;\n overflow: hidden;\n\n & > * {\n width: ${({ contentWidth }) => contentWidth !== -1 && '100%'};\n }\n`;\n\nconst StyledImage = styled(Image)<{\n coverSpace?: boolean;\n hAlign?: 'left' | 'center' | 'right';\n}>`\n max-width: ${({ coverSpace }) => !coverSpace && 'none'};\n float: ${({ hAlign }) =>\n hAlign === 'left' || hAlign === 'right' ? hAlign : undefined};\n ${({ coverSpace, hAlign }) =>\n !coverSpace &&\n hAlign === 'center' &&\n css`\n transform: translateX(-50%);\n margin-left: 50%;\n `}\n`;\n\nexport type ParallaxWidth = '1/4' | 'half' | '3/4' | 'full' | 'auto';\n\nconst ParallaxBackground: FC<{\n image?: ImageProps;\n hAlign?: 'left' | 'center' | 'right';\n contentWidth?: ParallaxWidth | number;\n moveRatio?: number;\n direction?: 'down' | 'up';\n className?: string;\n}> = ({\n image,\n hAlign = 'left',\n contentWidth = 1,\n moveRatio = 0.2,\n direction = 'up',\n className,\n}) => {\n const [isLoaded, setIsLoaded] = useState<boolean>(false);\n const [yTransform, setYTransform] = useState<number>(0);\n // const cRef = useRef<HTMLDivElement>(null);\n const [cRef, setContainerRef] = useState<HTMLElement | null>(null);\n const parallaxRef = useRef<HTMLDivElement>(null);\n\n let width = 1;\n if (typeof contentWidth === 'string') {\n switch (contentWidth) {\n case '1/4': {\n width = 0.25;\n break;\n }\n\n case 'half': {\n width = 0.5;\n break;\n }\n\n case '3/4': {\n width = 0.75;\n break;\n }\n\n case 'auto': {\n width = -1;\n break;\n }\n\n default:\n case 'full': {\n width = 1;\n break;\n }\n }\n } else if (!isNaN(contentWidth)) {\n width = contentWidth;\n }\n\n useEffect(() => {\n setIsLoaded(true);\n }, []);\n\n useEffect(() => {\n const prevEl = cRef?.previousElementSibling;\n if (prevEl) {\n const bgIdent = (prevEl as HTMLElement).dataset.bgIdent;\n const stackIdent = (prevEl as HTMLElement).dataset.stackIdent;\n\n if (bgIdent) {\n // set data background from previous element\n cRef?.setAttribute('data-bg-ident', bgIdent);\n }\n\n if (stackIdent) {\n // set data stack flag from previous element\n cRef?.setAttribute('data-stack-ident', stackIdent);\n }\n }\n }, [cRef]);\n\n useEffect(() => {\n const handleScroll = () => {\n if (!cRef) return;\n\n const containerPos = cRef.getBoundingClientRect().top;\n const ratio = containerPos * moveRatio;\n const offset = ratio * (direction === 'up' ? 1 : -1);\n\n setYTransform(offset);\n };\n\n handleScroll();\n window.addEventListener('scroll', handleScroll);\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n };\n }, [cRef, direction, moveRatio]);\n\n return (\n <>\n {isLoaded && (\n <View ref={setContainerRef} data-bg-ident=\"transparent\">\n <Parallax\n ref={parallaxRef}\n style={{\n transform: `translate3d(0px, ${yTransform}px, 0px)`,\n }}\n className={className}\n >\n <Content hAlign={hAlign} contentWidth={width}>\n {image && (\n <StyledImage\n hAlign={hAlign}\n coverSpace={width !== -1}\n {...image}\n />\n )}\n </Content>\n </Parallax>\n </View>\n )}\n </>\n );\n};\n\nexport default ParallaxBackground;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper, { wrapperWhitespace } from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport { spacings, getGlobals as global } from 'utils/styles';\nimport IntroBlock from 'components/blocks/IntroBlock';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport { withLibTheme } from 'utils/LibThemeProvider';\n\nconst Container = styled.figure<{\n hasContent?: boolean;\n verticallyCentered?: boolean;\n}>`\n position: relative;\n width: 100%;\n max-height: 550px;\n padding: 0;\n margin: 0;\n\n &:after {\n content: ${({ hasContent }) => hasContent && '\"\"'};\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: ${({ theme, verticallyCentered }) =>\n verticallyCentered\n ? global(theme).sections.imageTextGradientCentered\n : global(theme).sections.imageTextGradient};\n pointer-events: none;\n z-index: 0;\n }\n`;\n\nconst StyledImage = styled(Image)`\n img {\n height: 550px;\n }\n`;\n\nconst Intro = styled(IntroBlock)<{\n verticallyCentered?: boolean;\n horizontallyCentered?: boolean;\n}>`\n position: absolute;\n bottom: ${({ verticallyCentered }) => !verticallyCentered && '0'};\n top: ${({ verticallyCentered }) => verticallyCentered && '50%'};\n left: 50%;\n right: 0;\n max-height: 100%;\n max-width: ${spacings.wrapper}px;\n\n padding: ${wrapperWhitespace + spacings.nudge * 2}px;\n z-index: 1;\n\n transform: ${({ verticallyCentered }) =>\n verticallyCentered ? 'translate(-50%, -50%)' : 'translateX(-50%)'};\n`;\n\nconst Poster: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Clamp width of poster image to content wrapper or large wrapper */\n width?: 'full' | 'content';\n\n /** The poster image settings */\n image: Omit<ImageProps, 'coverSpace' | 'ratios'>;\n\n /** Main title text */\n title?: string;\n\n /** Main title HTML tag type (h2, h3, h4...) */\n titleAs?: HeadlineTag;\n\n /** Superior title that stands above main title */\n superTitle?: string;\n\n /** Superior title HTML tag type (h3, h4 ...) */\n superTitleAs?: HeadlineTag;\n\n /** Text underneath the title (richtext) */\n text?: string;\n\n /** Function to inject custom primary button */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Function to inject custom secondary button */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Align text and actions vertically */\n verticallyCentered?: boolean;\n\n /** Align text and actions horizontally */\n horizontallyCentered?: boolean;\n}> = ({\n anchorId,\n width = 'content',\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n image,\n verticallyCentered,\n horizontallyCentered,\n}) => {\n const isCentered = verticallyCentered && horizontallyCentered;\n\n return (\n <Section anchorId={anchorId} bgColor=\"image\" bgMode=\"full\">\n <Wrapper clampWidth={width === 'content' ? 'normal' : 'large'}>\n <Container\n hasContent={!!title || !!text}\n verticallyCentered={verticallyCentered}\n >\n <StyledImage {...image} coverSpace ratios={undefined} />\n {title && (\n <Intro\n verticallyCentered={verticallyCentered}\n horizontallyCentered={horizontallyCentered}\n renderAs=\"figcaption\"\n colorMode=\"onImage\"\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n clampTitle\n maxTitleLines={3}\n clampText\n maxTextLines={4}\n isCentered={horizontallyCentered || isCentered}\n />\n )}\n </Container>\n </Wrapper>\n </Section>\n );\n};\n\nexport const PosterComponent = Poster;\nexport default withLibTheme(Poster);\n","import React from 'react';\nimport styled from 'styled-components';\nimport { getColors as color, mq, spacings } from 'utils/styles';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\n\nconst ItemList = styled.ul`\n margin: 0;\n padding: 0;\n list-style: none;\n\n & > * + * {\n margin-top: ${spacings.nudge}px;\n }\n`;\n\nconst ItemBlock = styled.li<{ hasBg?: boolean }>`\n max-width: 100%;\n padding: ${spacings.nudge * 2}px;\n\n background: ${({ theme, hasBg }) =>\n hasBg ? color(theme).elementBg.light : color(theme).elementBg.medium};\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n\n @media ${mq.semilarge} {\n padding: ${spacings.nudge * 3}px;\n }\n`;\n\nconst ListHead = styled.div`\n display: flex;\n justify-content: space-between;\n\n & > * + * {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Title = styled(Copy)`\n max-width: 880px;\n`;\n\nconst Price = styled(Copy)`\n white-space: nowrap;\n`;\n\nconst Description = styled(Copy)`\n max-width: 880px;\n`;\n\nexport interface PriceItems {\n /** Title of the price item */\n title?: string;\n /** Description text of price item (richtext) */\n text?: string;\n /** The price value (Currency not included) */\n price?: string;\n}\n\nexport const PriceBlock: React.FC<PriceItems & { hasBg?: boolean }> = ({\n text,\n price,\n hasBg = false,\n title,\n}) => {\n return (\n <ItemBlock hasBg={hasBg}>\n <ListHead>\n {title && <Title type=\"copy-b\">{title}</Title>}\n {price && <Price type=\"copy-b\">{price}</Price>}\n </ListHead>\n {text && <Description type=\"copy\" innerHTML={text} />}\n </ItemBlock>\n );\n};\n\nconst PriceList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array with price items */\n items?: PriceItems[];\n\n /** Section background */\n bgMode?: 'inverted' | 'full';\n}> = ({ anchorId, bgMode, items }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBack = isInverted || bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode === 'full'\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <ItemList>\n {items?.map((item, i) => (\n <PriceBlock key={i} {...item} hasBg={hasBack} />\n ))}\n </ItemList>\n </Wrapper>\n </Section>\n );\n};\n\nexport const PriceListComponent = PriceList;\nexport default withLibTheme(PriceList);\n","import {\n spacings,\n getColors as color,\n getGlobals as global,\n} from 'utils/styles';\nimport React, { forwardRef } from 'react';\nimport styled from 'styled-components';\nimport Copy from 'components/typography/Copy';\nimport Actions from './Actions';\nimport Callout from 'components/typography/Callout';\n\nconst View = styled.div<{\n isInverted?: boolean;\n isCentered?: boolean;\n hasBg?: boolean;\n isHighlighted?: boolean;\n}>`\n padding: ${spacings.spacer}px;\n\n border: 1px solid transparent;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n\n background: ${({ theme, hasBg, isInverted, isHighlighted }) =>\n isInverted\n ? isHighlighted\n ? color(theme).primary.inverted\n : color(theme).elementBg.medium\n : isHighlighted\n ? color(theme).primary.default\n : hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n display: block;\n margin-top: auto;\n padding-top: ${spacings.spacer}px;\n text-align: center;\n`;\n\nexport interface PriceTagProps {\n title?: string;\n superTitle?: string;\n text?: string;\n action?: (props: {\n isInverted?: boolean;\n isHighlighted?: boolean;\n }) => React.ReactNode;\n isInverted?: boolean;\n isCentered?: boolean;\n hasBackground?: boolean;\n isHighlighted?: boolean;\n}\n\nconst PriceTag = forwardRef<\n HTMLDivElement,\n PriceTagProps & { className?: string }\n>(\n (\n {\n superTitle,\n title,\n text,\n action,\n isInverted,\n isCentered,\n isHighlighted,\n hasBackground,\n className,\n },\n ref\n ) => {\n const inverted = isHighlighted ? !isInverted : false;\n\n return (\n <View\n ref={ref}\n isInverted={isInverted}\n isCentered={isCentered}\n isHighlighted={isHighlighted}\n hasBg={hasBackground}\n className={className}\n >\n {superTitle && (\n <Copy\n type=\"copy-b\"\n size=\"big\"\n isInverted={inverted}\n innerHTML={superTitle}\n data-sheet=\"superTitle\"\n />\n )}\n {title && (\n <Callout\n renderAs=\"div\"\n size=\"big\"\n isInverted={inverted}\n innerHTML={title}\n data-sheet=\"title\"\n />\n )}\n {text && (\n <Copy\n size=\"medium\"\n isInverted={inverted}\n innerHTML={text}\n data-sheet=\"desc\"\n />\n )}\n <StyledActions\n mode=\"cover\"\n primary={\n action &&\n action({\n isInverted: inverted,\n isHighlighted: isHighlighted,\n })\n }\n />\n </View>\n );\n }\n);\n\nPriceTag.displayName = 'PriceTag';\n\nexport default PriceTag;\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport PriceTag, { PriceTagProps } from 'components/blocks/PriceTag';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport { gridSettings } from 'components/base/Grid';\nimport { mq } from 'utils/styles';\n\nconst Tag = styled(PriceTag)`\n min-height: 500px;\n`;\n\nconst Items = styled.div`\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n\n margin-top: -${gridSettings.gutter}px;\n margin-left: -${gridSettings.gutter}px;\n\n & > * {\n flex: 1 1 25%;\n min-width: 286px;\n max-width: 320px;\n margin-top: ${gridSettings.gutter}px;\n margin-left: ${gridSettings.gutter}px;\n }\n\n @media ${mq.large} {\n & > * {\n max-width: 286px;\n }\n }\n`;\n\nconst PriceTable: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n /** Array of PriceTag card items */\n items: Array<Omit<PriceTagProps, 'isInverted'>>;\n /** Center text inside card items */\n isCentered?: boolean;\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, items, isCentered, bgMode }) => {\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n const priceTagCount = items?.length || 0;\n\n const { colors } = useLibTheme();\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight<HTMLDivElement>({\n listLength: priceTagCount,\n identifiers: [\n '[data-sheet=\"superTitle\"]',\n '[data-sheet=\"title\"]',\n '[data-sheet=\"desc\"]',\n ],\n responsive: {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 3,\n xlarge: 3,\n },\n });\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper addWhitespace>\n <Items>\n {items?.map((item, i) => (\n <Tag\n key={i}\n ref={cardRefs[i]}\n {...item}\n isInverted={isInverted}\n isCentered={isCentered}\n hasBackground={hasBg}\n />\n ))}\n </Items>\n </Wrapper>\n </Section>\n );\n};\n\nexport const PriceTableComponent = PriceTable;\nexport default withLibTheme(PriceTable);\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings } from 'utils/styles';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Callout from 'components/typography/Callout';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Copy from 'components/typography/Copy';\n\nconst Content = styled.figure`\n margin: 0;\n padding: 0;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n max-width: 960px;\n margin: 0 auto;\n }\n`;\n\nconst Text = styled(Callout)`\n text-align: center;\n margin-left: 0;\n margin-right: 0;\n padding: 0;\n`;\n\nconst Source = styled(Copy)`\n text-align: center;\n margin-left: 0;\n margin-right: 0;\n padding: 0;\n`;\n\nconst Quote: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Text of the blockquote (richtext) */\n text?: string;\n\n /** Source of the quote e.g. author (richtext) */\n source?: string;\n\n /** URL for additional cite informations */\n citeUrl?: string;\n\n /** Section backgrounds */\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, bgMode, text, source, citeUrl }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode === 'full'\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <Content>\n {text && (\n <Text\n size=\"small\"\n renderAs=\"blockquote\"\n isInverted={isInverted}\n innerHTML={text}\n {...{ cite: citeUrl }}\n />\n )}\n {source && (\n <Source\n isInverted={isInverted}\n renderAs=\"figcaption\"\n innerHTML={source}\n />\n )}\n </Content>\n </Wrapper>\n </Section>\n );\n};\n\nexport const QuoteComponent = Quote;\nexport default withLibTheme(Quote);\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Wrapper from 'components/base/Wrapper';\nimport { getColors } from 'utils/styles';\nimport { withLibTheme } from 'utils/LibThemeProvider';\n\nconst ImageWrapper = styled(Wrapper)<{ hAlign?: 'left' | 'center' | 'right' }>`\n display: flex;\n justify-content: ${({ hAlign }) => {\n switch (hAlign) {\n case 'center':\n return 'center';\n case 'right':\n return 'flex-end';\n default:\n return 'flex-start';\n }\n }};\n`;\n\nconst SimpleImage: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Image settings */\n image?: ImageProps;\n\n /** Horizontal alignment of the image */\n hAlign?: 'left' | 'center' | 'right';\n\n /** Allow reduced section spacing to next section */\n isStackable?: boolean;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, image, hAlign = 'left', bgMode, isStackable }) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n isStackable={isStackable}\n bgColor={\n isInverted\n ? getColors(theme).sectionBg.dark\n : hasBg\n ? getColors(theme).sectionBg.medium\n : getColors(theme).sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <ImageWrapper hAlign={hAlign}>\n {image && <Image {...image} />}\n </ImageWrapper>\n </Section>\n );\n};\n\nexport const SimpleImageComponent = SimpleImage;\nexport default withLibTheme(SimpleImage);\n","import React from 'react';\nimport styled from 'styled-components';\nimport {\n getColors as color,\n mq,\n spacings,\n getGlobals as global,\n} from 'utils/styles';\n\nimport Instagram from 'components/base/icons/socials/Instagram';\nimport Heading from 'components/typography/Heading';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport { gridSettings } from 'components/base/Grid';\nimport Image, { ImageProps } from 'components/blocks/Image';\n\nconst Cards = styled.ul`\n display: flex;\n flex-wrap: wrap;\n margin: 0;\n padding: 0;\n list-style: none;\n\n margin-top: -${spacings.spacer}px;\n margin-left: -${spacings.spacer}px;\n\n & > * {\n flex: 1 1 100%;\n margin-top: ${spacings.spacer}px;\n margin-left: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n & > * {\n flex: 1 1 calc(50% - ${gridSettings.gutter}px);\n max-width: calc(50% - ${gridSettings.gutter}px);\n }\n }\n\n @media ${mq.large} {\n & > * {\n flex: 1 1 calc(${(1 / 3) * 100}% - ${gridSettings.gutter}px);\n max-width: calc(${(1 / 3) * 100}% - ${gridSettings.gutter}px);\n }\n }\n`;\n\nconst Item = styled.li`\n display: block;\n position: relative;\n padding: 0;\n`;\n\nconst Card = styled(Link)<{ isInverted?: boolean }>`\n position: relative;\n display: block;\n text-decoration: none;\n color: '#fff';\n outline-color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n overflow: hidden;\n\n &:before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).secondary.inverted\n : color(theme).secondary.default};\n\n opacity: 0;\n pointer-events: none;\n z-index: 1;\n transition: opacity 0.2s ease-in-out;\n }\n\n &:hover {\n &:before {\n opacity: 1;\n pointer-events: all;\n }\n }\n\n &:focus {\n &:before {\n opacity: 1;\n pointer-events: all;\n }\n }\n`;\n\nconst StyledImage = styled(Image)`\n display: block;\n height: 100%;\n z-index: 0;\n`;\n\nconst TextContainer = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n width: 100%;\n transform: translate(-50%, -50%);\n text-align: center;\n\n padding: ${spacings.nudge * 2}px;\n\n opacity: 0;\n pointer-events: none;\n z-index: 2;\n transition: opacity 0.2s ease-in-out;\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n\n ${Card}:hover & {\n opacity: 1;\n pointer-events: all;\n }\n\n ${Card}:focus & {\n opacity: 1;\n pointer-events: all;\n }\n`;\n\nconst FollowUs = styled(Heading)`\n text-transform: uppercase;\n`;\n\nconst InstagramIcon = styled.div`\n position: absolute;\n left: 20px;\n bottom: 20px;\n color: ${({ theme }) => color(theme).text.inverted};\n z-index: 2;\n\n & > * {\n fill: #fff;\n\n ${Card}:hover & {\n color: ${({ theme }) => color(theme).text.inverted};\n }\n }\n`;\n\nconst SocialWall: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array with item settings */\n items?: Array<{\n link?: LinkProps;\n image?: Omit<ImageProps, 'coverSpace' | 'ratio'>;\n }>;\n\n /** Text for main social media follow call */\n followUs?: string;\n\n /** Text for e.g. social media hashtag */\n hashTag?: string;\n\n /** Function to inject custom social icon on bottom left corner */\n socialIcon?: React.ReactNode;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, items, hashTag, followUs, socialIcon, bgMode }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n addSeperation\n >\n <Wrapper addWhitespace>\n <Cards>\n {items?.map((item, i) => (\n <Item key={i}>\n <Card\n isExternal\n {...item.link}\n isInverted={isInverted}\n ariaLabel={item?.image?.alt}\n >\n {item.image && (\n <StyledImage\n {...item.image}\n coverSpace\n ratios={{\n small: { w: 1, h: 1 },\n }}\n isInverted={isInverted}\n />\n )}\n <TextContainer>\n <FollowUs size=\"super\" isInverted>\n {followUs\n ? followUs\n : 'Follow Us On Instagram'}\n </FollowUs>\n {hashTag && (\n <Heading size=\"heading-2\" isInverted>\n {hashTag}\n </Heading>\n )}\n </TextContainer>\n <InstagramIcon>\n {socialIcon || <Instagram />}\n </InstagramIcon>\n </Card>\n </Item>\n ))}\n </Cards>\n </Wrapper>\n </Section>\n );\n};\n\nexport const SocialWallComponent = SocialWall;\nexport default withLibTheme(SocialWall);\n","import React from 'react';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport TableBlock, { TableProps } from 'components/blocks/TableBlock';\nimport styled from 'styled-components';\nimport { spacings } from 'utils/styles';\n\nconst TableWrapper = styled(Wrapper)`\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst Table: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Table rows and columns */\n tableItems: TableProps[];\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, bgMode, tableItems }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full' || isInverted;\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <TableWrapper>\n {tableItems.map((item, i) => {\n return (\n <TableBlock\n key={i}\n {...item}\n isInverted={isInverted}\n hasBack={hasBg}\n />\n );\n })}\n </TableWrapper>\n </Section>\n );\n};\n\nexport const TableComponent = Table;\nexport default withLibTheme(Table);\n","import React, { FC, useRef, useState } from 'react';\nimport styled from 'styled-components';\n\nimport Grid from 'components/base/Grid';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Copy from 'components/typography/Copy';\nimport Wrapper from 'components/base/Wrapper';\nimport Section, { BgMode } from 'components/base/Section';\nimport {\n mq,\n spacings,\n getGlobals as global,\n getFonts as font,\n} from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport IntroBlock from 'components/blocks/IntroBlock';\nimport VideoBlock, { VideoAspectRatios } from 'components/blocks/VideoBlock';\nimport { isValidArray } from 'utils/arrays';\nimport { useObserverSupport } from 'utils/useObserverSupport';\nimport useUpdateEffect from 'utils/useUpdateEffect';\n\nconst Figure = styled.figure`\n display: flex;\n flex-direction: column;\n position: relative;\n height: 100%;\n width: 100%;\n margin: 0;\n padding: 0;\n\n & > * + * {\n margin-top: ${spacings.nudge}px;\n }\n\n @media ${mq.semilarge} {\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n }\n`;\n\nconst StyledImage = styled(Image)`\n position: relative;\n width: 100%;\n height: 100%;\n\n @media ${mq.semilarge} {\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n overflow: hidden;\n }\n`;\n\nconst Video = styled(VideoBlock)<{\n ratios?: VideoAspectRatios;\n isVisible?: boolean;\n}>`\n display: ${({ isVisible }) => (isVisible ? 'block' : 'none')};\n width: 100%;\n height: 100%;\n`;\n\nconst Description = styled(Copy)<{\n isInverted?: boolean;\n isSplitted?: boolean;\n isMirrored?: boolean;\n}>`\n display: block;\n\n @media ${mq.semilarge} {\n padding-left: ${spacings.nudge * 2}px;\n padding-right: ${spacings.nudge * 2}px;\n margin-left: ${({ isMirrored }) => isMirrored && 'auto'};\n margin-right: ${({ isMirrored }) => !isMirrored && 'auto'};\n max-width: ${({ isSplitted }) => isSplitted && '81.5%'};\n\n color: ${({ theme, isInverted, isSplitted }) =>\n isInverted && !isSplitted\n ? font(theme).copy.small.colorInverted\n : font(theme).copy.small.color};\n }\n\n @media ${mq.xlarge} {\n max-width: ${({ isSplitted }) => isSplitted && '69.5%'};\n }\n`;\n\nconst StyledActions = styled(Actions)`\n &:not(:first-child) {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst Teaser: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Switch text and image columns */\n isMirrored?: boolean;\n\n /** Superior title that stands above main title */\n superTitle?: string;\n\n /** Superior title HTML tag type (h3, h4 ...) */\n superTitleAs?: HeadlineTag;\n\n /** Main title text */\n title?: string;\n\n /** Main title HTML tag type (h2, h3, h4...) */\n titleAs?: HeadlineTag;\n\n /** Images for different screen sizes */\n image?: Omit<ImageProps, 'coverSpace'>;\n\n /**\n * Use video instead of an image. Until video is loaded images defined in the image prop are used.\n * Multiple video urls can be used to loaded different file formats\n */\n video?: {\n urls: string[];\n aspectRatios?: VideoAspectRatios;\n };\n\n /** Image or video description text (richtext) */\n description?: string;\n\n /** Main richtext */\n text?: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted' | 'splitted' | 'inverted-splitted';\n\n /** Function to inject custom primary button */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Function to inject custom secondary button */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n anchorId,\n isMirrored = false,\n bgMode,\n superTitle,\n superTitleAs,\n title,\n titleAs,\n image,\n video,\n description,\n text,\n primaryAction,\n secondaryAction,\n}) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted' || bgMode === 'inverted-splitted';\n const isSplitted = bgMode === 'splitted' || bgMode === 'inverted-splitted';\n const hasVideo = isValidArray(video?.urls, false);\n\n const viewRef = useRef<HTMLDivElement | null>(null);\n const [isLoaded, setLoaded] = useState(!image?.small || false);\n const [isVideoActive, setVideoActive] = useState<boolean>(false);\n const isObserverSupported = useObserverSupport();\n\n useUpdateEffect(() => {\n if (!viewRef.current || !hasVideo) return;\n if (!isObserverSupported) {\n setVideoActive(true);\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries, observer) => {\n const [entry] = entries;\n\n if (entry.isIntersecting) {\n observer.unobserve(entry.target);\n setVideoActive(true);\n }\n },\n {\n rootMargin: '200px 0px 200px 0px',\n }\n );\n\n const viewEl = viewRef.current;\n observer.observe(viewEl);\n\n return () => {\n if (viewEl) observer.unobserve(viewEl);\n };\n }, [isObserverSupported]);\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToTeaserBgMode(bgMode, false, isMirrored)}\n >\n <Wrapper addWhitespace clampWidth=\"normal\">\n <Grid.Row valign=\"center\">\n <Grid.Col\n semilarge={{\n span: 6 / 12,\n move: (isMirrored ? 6 : 0) / 12,\n }}\n xlarge={{\n span: 7 / 12,\n move: (isMirrored ? 5 : 0) / 12,\n }}\n >\n {(image?.small || hasVideo) && (\n <Figure ref={viewRef}>\n {image?.small && (!video || !isLoaded) && (\n <StyledImage\n {...image}\n isInverted={isInverted}\n coverSpace\n />\n )}\n {hasVideo && (\n <Video\n urls={\n isVideoActive\n ? video?.urls\n : undefined\n }\n muted\n autoPlay\n loop\n onCanPlayThrough={() => setLoaded(true)}\n ratios={video?.aspectRatios}\n isVisible={isLoaded}\n isInverted={isInverted}\n />\n )}\n {description && (\n <Description\n size=\"small\"\n renderAs=\"figcaption\"\n isInverted={isInverted}\n isSplitted={isSplitted}\n isMirrored={isMirrored}\n innerHTML={description}\n />\n )}\n </Figure>\n )}\n </Grid.Col>\n\n <Grid.Col\n semilarge={{\n span: 6 / 12,\n move: (isMirrored ? -6 : 0) / 12,\n }}\n xlarge={{\n span: 5 / 12,\n move: (isMirrored ? -7 : 0) / 12,\n }}\n >\n <IntroBlock\n titleHyphens\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={\n primaryAction && primaryAction(isInverted)\n }\n secondary={\n secondaryAction &&\n secondaryAction(isInverted)\n }\n />\n )}\n </Grid.Col>\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const mapToTeaserBgMode = (\n mode?: 'full' | 'splitted' | 'inverted' | 'inverted-splitted',\n preventSplit = false,\n isMirrored = false\n): BgMode | undefined => {\n switch (mode) {\n case 'full':\n return 'full';\n case 'inverted':\n return 'inverted';\n case 'splitted': {\n if (!preventSplit)\n return isMirrored ? 'larger-left' : 'larger-right';\n else return undefined;\n }\n case 'inverted-splitted': {\n if (!preventSplit)\n return isMirrored ? 'larger-left' : 'larger-right';\n else return undefined;\n }\n\n default:\n return undefined;\n }\n};\n\nexport const TeaserComponent = Teaser;\nexport default withLibTheme(Teaser);\n","import React, { FC, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Grid, { getGridWidth } from 'components/base/Grid';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Wrapper, { wrapperWhitespace } from 'components/base/Wrapper';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { mq, spacings, withRange, getGlobals as global } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport IntroBlock from 'components/blocks/IntroBlock';\nimport VideoBlock, { VideoAspectRatios } from 'components/blocks/VideoBlock';\nimport { isValidArray } from 'utils/arrays';\nimport { useObserverSupport } from 'utils/useObserverSupport';\nimport useUpdateEffect from 'utils/useUpdateEffect';\n\n/**\n * calculate single grid col from relative content wrapper\n * (grid width = wrapper width without paddings)\n * */\nconst getGridColOfContent = () => {\n return css`\n ${getGridWidth({\n cols: 1,\n gridWidth: `${spacings.wrapper - wrapperWhitespace * 2}px `,\n })}\n `;\n};\n\nconst WideVideo = styled(VideoBlock)<{\n isMirrored?: boolean;\n isVisible?: boolean;\n}>`\n display: ${({ isVisible }) => (isVisible ? 'block' : 'none')};\n position: relative;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n\n min-height: 400px;\n object-fit: cover;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n\n @media ${mq.semilarge} {\n position: absolute;\n /** \n calculate width of 6 grid cols (grid width = viewport width without wrapper paddings)\n and add left or right wrapper padding afterwards\n */\n width: calc(\n ${getGridWidth({\n cols: 6,\n gridWidth: `100% - ${wrapperWhitespace * 2}px `,\n })} + ${wrapperWhitespace}px\n );\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '0')};\n right: ${({ isMirrored }) => (isMirrored ? '0' : 'auto')};\n }\n\n @media ${mq.xlarge} {\n /** \n calculate width of 1 grid cols\n and add left or right wrapper padding afterwards. Then add this to 50% of current\n viewport width.\n */\n width: calc(50% + ${getGridColOfContent()} + ${wrapperWhitespace}px);\n }\n\n @media ${mq.xxlarge} {\n /** \n calculate width of 1 grid cols\n and add left or right wrapper padding afterwards. Then add this to 50% of large wrapper width.\n */\n width: calc(\n ${spacings.wrapperLarge / 2}px + ${getGridColOfContent()} +\n ${wrapperWhitespace}px\n );\n\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '50%')};\n right: ${({ isMirrored }) => (isMirrored ? '50%' : 'auto')};\n\n ${({ isMirrored }) =>\n css`\n transform: translateX(\n calc(\n ${isMirrored ? '100% - ' : '-100% + '}\n (${getGridColOfContent()} + ${wrapperWhitespace}px)\n )\n );\n `};\n }\n`;\n\nconst WideImage = styled(Image)<{ isMirrored?: boolean }>`\n position: relative;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n\n height: 100%;\n min-height: 400px;\n\n img {\n height: 100%;\n }\n\n @media ${mq.semilarge} {\n position: absolute;\n /** \n calculate width of 6 grid cols (grid width = viewport width without wrapper paddings)\n and add left or right wrapper padding afterwards\n */\n width: calc(\n ${getGridWidth({\n cols: 6,\n gridWidth: `100% - ${wrapperWhitespace * 2}px `,\n })} + ${wrapperWhitespace}px\n );\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '0')};\n right: ${({ isMirrored }) => (isMirrored ? '0' : 'auto')};\n }\n\n @media ${mq.xlarge} {\n /** \n calculate width of 1 grid cols\n and add left or right wrapper padding afterwards. Then add this to 50% of current\n viewport width.\n */\n width: calc(50% + ${getGridColOfContent()} + ${wrapperWhitespace}px);\n }\n\n @media ${mq.xxlarge} {\n /** \n calculate width of 1 grid cols\n and add left or right wrapper padding afterwards. Then add this to 50% of large wrapper width.\n */\n width: calc(\n ${spacings.wrapperLarge / 2}px + ${getGridColOfContent()} +\n ${wrapperWhitespace}px\n );\n\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '50%')};\n right: ${({ isMirrored }) => (isMirrored ? '50%' : 'auto')};\n\n ${({ isMirrored }) =>\n css`\n transform: translateX(\n calc(\n ${isMirrored ? '100% - ' : '-100% + '}\n (${getGridColOfContent()} + ${wrapperWhitespace}px)\n )\n );\n `};\n }\n`;\n\nconst Content = styled.div`\n ${({ theme }) =>\n withRange(\n global(theme).sections.seperation.padding.default,\n 'padding-bottom'\n )}\n\n @media ${mq.semilarge} {\n ${({ theme }) =>\n withRange(\n global(theme).sections.seperation.padding.default,\n 'padding-top'\n )}\n }\n`;\n\nconst StyledActions = styled(Actions)`\n &:not(:first-child) {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst TeaserWide: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Switch text and image columns */\n isMirrored?: boolean;\n\n /** Superior title that stands above main title */\n superTitle?: string;\n\n /** Superior title HTML tag type (h3, h4 ...) */\n superTitleAs?: HeadlineTag;\n\n /** Main title text */\n title?: string;\n\n /** Main title HTML tag type (h2, h3, h4...) */\n titleAs?: HeadlineTag;\n\n /** Images for different screen sizes */\n image?: Omit<ImageProps, 'coverSpace'>;\n\n /**\n * Use video instead of an image. Until video is loaded images defined in the image prop are used.\n * Multiple video urls can be used to loaded different file formats\n */\n video?: {\n urls: string[];\n aspectRatios?: VideoAspectRatios;\n };\n\n /** Main richtext */\n text?: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Function to inject custom primary button */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Function to inject custom secondary button */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n anchorId,\n isMirrored = false,\n superTitle,\n superTitleAs,\n title,\n titleAs,\n image,\n video,\n text,\n primaryAction,\n secondaryAction,\n bgMode,\n}) => {\n const { colors } = useLibTheme();\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n const hasVideo = isValidArray(video?.urls, false);\n\n const viewRef = useRef<HTMLDivElement | null>(null);\n const [isLoaded, setLoaded] = useState(!image?.small || false);\n const [isVideoActive, setVideoActive] = useState<boolean>(false);\n const isObserverSupported = useObserverSupport();\n\n useUpdateEffect(() => {\n if (!viewRef.current || !hasVideo) return;\n if (!isObserverSupported) {\n setVideoActive(true);\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries, observer) => {\n const [entry] = entries;\n\n if (entry.isIntersecting) {\n observer.unobserve(entry.target);\n setVideoActive(true);\n }\n },\n {\n rootMargin: '200px 0px 200px 0px',\n }\n );\n\n const viewEl = viewRef.current;\n observer.observe(viewEl);\n\n return () => {\n if (viewEl) observer.unobserve(viewEl);\n };\n }, [isObserverSupported]);\n\n return (\n <Section\n ref={viewRef}\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n {image?.small && (!video || !isLoaded) && (\n <WideImage\n coverSpace\n {...image}\n isMirrored={isMirrored}\n isInverted={isInverted}\n />\n )}\n {hasVideo && (\n <WideVideo\n urls={isVideoActive ? video?.urls : undefined}\n muted\n autoPlay\n loop\n onCanPlayThrough={() => setLoaded(true)}\n isVisible={isLoaded}\n isInverted={isInverted}\n isMirrored={isMirrored}\n ratios={video?.aspectRatios}\n />\n )}\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <Grid.Row valign=\"center\">\n <Grid.Col\n semilarge={{\n span: 6 / 12,\n move: (isMirrored ? 6 : 0) / 12,\n }}\n xlarge={{\n span: 7 / 12,\n move: (isMirrored ? 5 : 0) / 12,\n }}\n ></Grid.Col>\n <Grid.Col\n semilarge={{\n span: 6 / 12,\n move: (isMirrored ? -6 : 0) / 12,\n }}\n xlarge={{\n span: 5 / 12,\n move: (isMirrored ? -7 : 0) / 12,\n }}\n >\n <Content>\n <IntroBlock\n titleHyphens\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={\n primaryAction &&\n primaryAction(isInverted)\n }\n secondary={\n secondaryAction &&\n secondaryAction(isInverted)\n }\n />\n )}\n </Content>\n </Grid.Col>\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const TeaserWideComponent = TeaserWide;\nexport default withLibTheme(TeaserWide);\n","import Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\nimport React, {\n createRef,\n MutableRefObject,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport { useObserverSupport } from 'utils/useObserverSupport';\nimport { withLibTheme } from 'utils/LibThemeProvider';\n\nconst TimelineBlock = styled.div<{\n isSwitched?: boolean;\n isActive?: boolean;\n isInverted?: boolean;\n}>`\n position: relative;\n\n @media ${mq.large} {\n text-align: ${({ isSwitched }) => (isSwitched ? 'left' : 'right')};\n }\n\n &:after {\n content: '';\n width: 10px;\n height: 10px;\n\n box-sizing: content-box;\n border: 2px solid\n ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).elementBg.light\n : color(theme).elementBg.dark};\n border-radius: 50%;\n\n background: ${({ theme, isActive, isInverted }) =>\n isActive\n ? isInverted\n ? color(theme).elementBg.light\n : color(theme).elementBg.dark\n : isInverted\n ? color(theme).elementBg.dark\n : color(theme).elementBg.light};\n\n position: absolute;\n top: 16px;\n left: 0px;\n\n transition: all 0.2s ease-in-out;\n\n @media ${mq.large} {\n left: ${({ isSwitched }) => (!isSwitched ? '50%' : 'auto')};\n right: ${({ isSwitched }) => isSwitched && '50%'};\n transform: translateX(\n ${({ isSwitched }) => (isSwitched ? '50%' : '-50%')}\n );\n }\n }\n\n &:before {\n content: '';\n display: block;\n position: absolute;\n width: 2px;\n min-height: 160px;\n height: 100%;\n background: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).elementBg.light\n : color(theme).elementBg.dark};\n left: 5px;\n\n @media ${mq.large} {\n left: 50%;\n transform: translateX(-50%);\n }\n }\n\n &:first-child {\n padding-top: 0;\n\n &:before {\n top: 16px;\n }\n }\n`;\n\nconst TimelineText = styled.div<{\n isSwitched?: boolean;\n}>`\n position: relative;\n padding-left: ${spacings.nudge * 3 + 2}px;\n padding-bottom: ${spacings.spacer}px;\n\n @media ${mq.large} {\n max-width: 50%;\n\n margin-left: ${({ isSwitched }) => isSwitched && '50%'};\n margin-right: ${({ isSwitched }) => !isSwitched && '50%'};\n\n padding: ${({ isSwitched }) =>\n isSwitched\n ? `${spacings.spacer}px 0 ${spacings.spacer * 1.75}px ${\n spacings.spacer\n }px`\n : `${spacings.spacer}px ${spacings.spacer}px ${\n spacings.spacer * 1.75\n }px 0`};\n }\n\n &:first-child {\n padding-top: 0;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n`;\n\nconst ItemTitle = styled(Heading)``;\n\nconst ItemTextBlock = styled(Copy)``;\n\nconst Timeline: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n items?: { label?: string; title?: string; text?: string }[];\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, bgMode, items }) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const [targetRefs, setTargetRefs] = useState<\n MutableRefObject<HTMLDivElement>[]\n >([]);\n const observerSupported = useObserverSupport();\n const observerRef = useRef<IntersectionObserver | null>(null);\n\n const [activeItem, setActiveItem] = useState<number>(0);\n\n useEffect(() => {\n if (observerSupported && targetRefs && targetRefs.length > 0) {\n const options = {\n rootMargin: '-50% 0% -50% 0%',\n threshold: 0,\n };\n\n observerRef.current = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n const index = targetRefs?.findIndex(\n (t) => t.current === entry.target\n );\n setActiveItem(index);\n }\n });\n }, options);\n\n for (let i = 0; i < targetRefs.length; i++) {\n observerRef.current.observe(targetRefs[i].current);\n }\n }\n\n return () => {\n observerRef.current?.disconnect();\n };\n }, [targetRefs, observerSupported]);\n\n useEffect(() => {\n setTargetRefs(() =>\n Array(items?.length)\n .fill(null)\n .map((_, i) => targetRefs[i] || createRef())\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [items?.length]);\n\n return (\n <Section\n anchorId={anchorId}\n bgColor={\n isInverted\n ? color(theme).sectionBg.dark\n : hasBg\n ? color(theme).sectionBg.medium\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n addSeperation\n >\n <Wrapper addWhitespace>\n {items &&\n items.map((item, i) => {\n return (\n <TimelineBlock\n ref={targetRefs[i]}\n isActive={activeItem === i}\n isSwitched={i % 2 === 0}\n isInverted={isInverted}\n key={i}\n >\n <TimelineText isSwitched={i % 2 === 0}>\n <ItemTitle\n size=\"heading-2\"\n textColor={\n isInverted\n ? color(theme).text.inverted\n : color(theme).text.default\n }\n >\n {item.label}\n </ItemTitle>\n\n <ItemTextBlock\n type=\"copy-b\"\n size=\"big\"\n isInverted={isInverted}\n >\n {item.title}\n </ItemTextBlock>\n <ItemTextBlock\n innerHTML={item.text}\n isInverted={isInverted}\n />\n </TimelineText>\n </TimelineBlock>\n );\n })}\n </Wrapper>\n </Section>\n );\n};\n\nexport const TimelineComponent = Timeline;\nexport default withLibTheme(Timeline);\n","import React from 'react';\nimport Section, { mapToBgMode } from 'components/base/Section';\n\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Wrapper from 'components/base/Wrapper';\nimport { ImageProps } from 'components/blocks/Image';\n\nimport VideoCard from 'components/blocks/VideoCard';\n\nconst Video: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n bgImage: Omit<ImageProps, 'ratios' | 'coverSpace'>;\n embedId: string;\n\n consentText?: string;\n consentAction?: (props: {\n handleClick?: () => void;\n consentProps: Record<string, string>;\n }) => React.ReactNode;\n\n playIcon?: React.ReactNode;\n bgMode?: 'full' | 'inverted' | 'splitted';\n}> = ({\n anchorId,\n bgMode,\n bgImage,\n embedId,\n playIcon,\n consentText,\n consentAction,\n}) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n addSeperation\n >\n <Wrapper addWhitespace>\n <VideoCard\n bgImage={bgImage}\n embedId={embedId}\n playIcon={playIcon}\n consentText={consentText}\n consentAction={consentAction}\n />\n </Wrapper>\n </Section>\n );\n};\n\nexport const VideoComponent = Video;\nexport default withLibTheme(Video);\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\n\nimport { getColors as color, getGlobals as global, mq } from 'utils/styles';\nimport Play from 'components/base/icons/Play';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Wrapper from 'components/base/Wrapper';\nimport VideoBlock from 'components/blocks/VideoBlock';\nimport { ImageProps } from 'components/blocks/Image';\nimport { isValidArray } from 'utils/arrays';\n\nconst VideoContainer = styled.div<{ isInverted?: boolean }>`\n position: relative;\n cursor: pointer;\n`;\n\nconst Overlay = styled.div<{ bgImage?: ImageProps; isInverted?: boolean }>`\n position: relative;\n padding-top: ${`calc(100% / (16 / 9))`};\n background: ${({ theme, isInverted }) =>\n isInverted\n ? global(theme).sections.imagePlaceholderBg.inverted\n : global(theme).sections.imagePlaceholderBg.default};\n\n background-image: ${({ bgImage }) =>\n bgImage?.small && `url(\"${bgImage.small}\")`};\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n overflow: hidden;\n\n @media ${mq.medium} {\n text-align: left;\n\n background-image: ${({ bgImage }) =>\n bgImage?.medium && `url(\"${bgImage.medium}\")`};\n }\n\n @media ${mq.semilarge} {\n background-image: ${({ bgImage }) =>\n bgImage?.semilarge && `url(\"${bgImage.semilarge}\")`};\n }\n\n @media ${mq.large} {\n background-image: ${({ bgImage }) =>\n bgImage?.large && `url(\"${bgImage.large}\")`};\n }\n\n @media ${mq.xlarge} {\n background-image: ${({ bgImage }) =>\n bgImage?.xlarge && `url(\"${bgImage.xlarge}\")`};\n }\n\n &:after {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n pointer-events: none;\n\n background: linear-gradient(\n 358.19deg,\n rgba(29, 34, 35, 0.52) 12.37%,\n rgba(29, 34, 35, 0) 59.02%\n );\n }\n`;\n\nconst VideoControls = styled.button`\n display: block;\n border: none;\n background: none;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n color: ${({ theme }) => color(theme).elementBg.light};\n z-index: 1;\n padding: 0;\n\n cursor: pointer;\n\n & > * {\n opacity: 0.8;\n transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;\n height: 80px;\n width: 80px;\n\n color: ${({ theme }) => color(theme).elementBg.dark};\n }\n\n ${Overlay}:hover > & > * {\n transform: scale(1.05);\n opacity: 1;\n }\n\n ${Overlay}:active > & > * {\n transform: scale(0.95);\n opacity: 1;\n }\n\n &:focus {\n outline: 2px solid ${({ theme }) => color(theme).primary.default};\n border-radius: 50%;\n opacity: 1;\n\n & > * {\n color: ${({ theme }) => color(theme).primary.default};\n }\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n box-shadow: none;\n }\n`;\n\nconst Video = styled(VideoBlock)<{ isVisible?: boolean }>`\n opacity: ${({ isVisible }) => (isVisible ? 1 : 0)};\n pointer-events: ${({ isVisible }) => (isVisible ? 'all' : 'none')};\n`;\n\nconst RawVideo: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** URL to video sources */\n videoUrls?: string[];\n\n /** Placeholder image */\n placeholderImg?: Omit<ImageProps, 'ratios' | 'coverSpace'>;\n\n /** Enable autoplay without user interaction */\n autoplay?: boolean;\n\n /** Playing video in loop */\n loop?: boolean;\n\n /** Section background */\n bgMode?: 'full' | 'inverted' | 'splitted';\n\n /** Video play icon */\n playIcon?: React.ReactNode;\n}> = ({\n anchorId,\n bgMode,\n videoUrls,\n placeholderImg,\n playIcon,\n autoplay,\n loop,\n}) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const [isStarted, setIsStarted] = useState<boolean>(autoplay || false);\n\n return (\n <Section\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n addSeperation\n >\n <Wrapper addWhitespace>\n <VideoContainer\n onClick={() => {\n if (isValidArray(videoUrls, false)) {\n setIsStarted(true);\n }\n }}\n >\n {isStarted && (\n <Video\n isVisible={isStarted || !placeholderImg?.small}\n controls={!autoplay}\n autoPlay\n loop={loop}\n muted={autoplay}\n ratios={{ small: 16 / 9 }}\n urls={videoUrls}\n isInverted={isInverted}\n />\n )}\n {!isStarted && (\n <Overlay\n bgImage={placeholderImg}\n isInverted={isInverted}\n >\n <VideoControls>\n {playIcon || <Play iconColor=\"#000\" />}\n </VideoControls>\n </Overlay>\n )}\n </VideoContainer>\n </Wrapper>\n </Section>\n );\n};\n\nexport const RawVideoComponent = RawVideo;\nexport default withLibTheme(RawVideo);\n","import ClockFilled from 'components/base/icons/ClockFilled';\nimport LocationPin from 'components/base/icons/LocationPin';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport { isValidArray } from 'utils/arrays';\nimport { StructuredEmploymentType } from 'utils/structuredData';\nimport { getColors as color, getGlobals, mq, spacings } from 'utils/styles';\n\nconst View = styled.div<{\n isInverted?: boolean;\n hasBg?: boolean;\n clickable?: boolean;\n}>`\n position: relative;\n color: ${({ theme }) => color(theme).primary.default};\n background: ${({ theme, hasBg, isInverted }) =>\n isInverted\n ? color(theme).elementBg.medium\n : hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n\n padding: ${spacings.spacer}px;\n\n border-radius: ${({ theme }) => getGlobals(theme).sections.edgeRadius};\n\n ${({ clickable, isInverted }) =>\n clickable &&\n css`\n transition: all 0.2s ease-in-out;\n cursor: pointer;\n\n &:hover {\n box-shadow: 0px 2px 6px\n ${isInverted\n ? 'rgba(255, 255, 255, 0.7)'\n : 'rgba(0, 0, 0, 0.35)'};\n\n color: ${({ theme }) => color(theme).primary.hover};\n }\n\n &:focus {\n box-shadow: 0px 2px 6px\n ${isInverted\n ? 'rgba(255, 255, 255, 0.7)'\n : 'rgba(0, 0, 0, 0.3)'};\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n box-shadow: none;\n }\n\n &:active {\n box-shadow: 0px 2px 6px\n ${isInverted\n ? 'rgba(255, 255, 255, 0.7)'\n : 'rgba(0, 0, 0, 0.3)'};\n }\n `}\n\n @media ${mq.medium} {\n min-height: 440px;\n\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: flex-start;\n }\n`;\n\nconst JobInfos = styled(Copy)`\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 4}px;\n }\n\n color: ${({ theme }) => color(theme).primary.default};\n\n ${View}:hover & {\n color: ${({ theme }) => color(theme).primary.hover};\n }\n`;\n\nconst Info = styled.div`\n display: -ms-grid;\n display: grid;\n\n -ms-grid-columns: min-content 1fr;\n grid-template-columns: min-content 1fr;\n -ms-grid-rows: min-content 1fr;\n grid-auto-rows: min-content 1fr;\n\n & + & {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Icon = styled.div`\n display: flex;\n align-items: center;\n\n & > * {\n height: 32px;\n width: 32px;\n }\n`;\n\nconst MainLabel = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst ViewLink = styled(Link)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n && {\n margin: 0;\n }\n`;\n\nexport interface JobLocation {\n name?: string;\n description?: string;\n streetAddress?: string;\n addressLocality?: string;\n addressRegion?: string;\n postalCode?: string;\n addressCountry?: string;\n}\n\nexport interface JobCardProps {\n /** Invert text and background color */\n isInverted?: boolean;\n\n /** For use on light backgrounds */\n hasBackground?: boolean;\n\n /** Job card title (richtext) */\n jobTitle: string;\n\n /** The employment type (important for structured data) */\n employmentTypes?: Array<{\n name: string;\n type: StructuredEmploymentType;\n }>;\n\n /** Injection function for job time model icon */\n modelIcon?: () => React.ReactNode;\n\n /** List of job locations */\n locations?: JobLocation[];\n\n /** Total amount all locations */\n totalLocations?: number;\n\n /** Label to show if all location selected */\n allLocationsLabel?: string;\n\n /** Injection function for job location icon */\n locationIcon?: () => React.ReactNode;\n\n /** Job card link */\n link?: LinkProps;\n}\n\nconst JobCard = React.forwardRef<\n HTMLDivElement,\n JobCardProps & {\n className?: string;\n }\n>(\n (\n {\n isInverted,\n hasBackground,\n jobTitle,\n employmentTypes,\n locations,\n totalLocations,\n allLocationsLabel,\n modelIcon,\n locationIcon,\n className,\n link,\n },\n ref\n ) => {\n const hasEmploymentType = isValidArray(employmentTypes, false);\n const validLocations = locations?.filter((loc) => loc.name);\n const hasLocations = isValidArray(validLocations, false);\n\n let locationText = '';\n\n if (hasLocations) {\n if (\n totalLocations !== undefined &&\n validLocations.length >= totalLocations &&\n allLocationsLabel\n ) {\n locationText = allLocationsLabel;\n } else {\n locationText = validLocations\n .map((loc) => loc.name)\n ?.join(', ');\n }\n }\n\n return (\n <View\n ref={ref}\n isInverted={isInverted}\n hasBg={hasBackground}\n className={className}\n clickable={!!link}\n >\n <Heading\n textColor=\"inherit\"\n size=\"heading-2\"\n data-sheet=\"title\"\n innerHTML={jobTitle}\n hyphens\n />\n {(hasEmploymentType || hasLocations) && (\n <JobInfos type=\"copy-b\" data-sheet=\"info\">\n {hasEmploymentType && (\n <Info>\n <Icon>\n {modelIcon ? modelIcon() : <ClockFilled />}\n </Icon>\n <MainLabel>\n {employmentTypes\n ?.filter((type) => type.name)\n .map((type) => type.name)\n ?.join(', ')}\n </MainLabel>\n </Info>\n )}\n {hasLocations && (\n <Info>\n <Icon>\n {locationIcon ? (\n locationIcon()\n ) : (\n <LocationPin />\n )}\n </Icon>\n <MainLabel>{locationText}</MainLabel>\n </Info>\n )}\n </JobInfos>\n )}\n {link && (\n <ViewLink\n {...link}\n ariaLabel={link?.href ? jobTitle : undefined}\n />\n )}\n </View>\n );\n }\n);\n\nJobCard.displayName = 'JobCard';\n\nexport default JobCard;\n","export const escapeRegExp = (value: string) => {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n};\n","import React, { useCallback, useEffect } from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport JobCard, { JobCardProps } from 'components/blocks/JobCard';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport { mq, spacings } from 'utils/styles';\nimport FilterField from 'components/fields/FilterField';\nimport { isValidArray } from 'utils/arrays';\nimport useUpdateEffect from 'utils/useUpdateEffect';\nimport { escapeRegExp } from 'utils/escape';\nimport { deleteUrlParam, getUrlParams, setUrlParam } from 'utils/urlParams';\nimport useMounted from 'utils/useMounted';\n\nconst List = styled.ul`\n display: flex;\n flex-wrap: wrap;\n list-style: none;\n margin: 0;\n padding: 0;\n\n margin-top: -${spacings.nudge * 2}px;\n margin-left: -${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n margin-top: -${spacings.spacer}px;\n margin-left: -${spacings.spacer}px;\n }\n`;\n\nconst Item = styled.li`\n flex: 0 1 100%;\n max-width: 100%;\n margin: 0;\n\n padding-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n flex: 0 1 50%;\n max-width: 50%;\n\n padding-top: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n }\n\n @media ${mq.large} {\n flex: 0 1 33.33%;\n max-width: 33.33%;\n }\n`;\n\nconst Filter = styled(FilterField)`\n margin-top: ${spacings.nudge}px;\n margin-bottom: ${spacings.nudge * 5}px;\n\n min-width: 50%;\n`;\n\nexport interface CardProps extends JobCardProps {\n id: string;\n}\n\nexport type JobItem = Omit<\n CardProps,\n | 'isInverted'\n | 'hasBackground'\n | 'modelIcon'\n | 'locationIcon'\n | 'totalLocations'\n | 'allLocationsLabel'\n>;\n\nconst jobExactTitleFilter = (filterQuery: string) => (value: JobItem) => {\n const regex = new RegExp(filterQuery);\n return regex.test(value.jobTitle);\n};\n\nconst jobSoftTitleFilter = (filterQuery: string) => (value: JobItem) => {\n const preparedQuery = filterQuery.toLowerCase().replace(/\\s/g, '');\n const perparedJobTitle = value.jobTitle.toLowerCase().replace(/\\s/g, '');\n\n const regex = new RegExp(preparedQuery);\n return regex.test(perparedJobTitle);\n};\n\nconst jobLocationNameFilter = (filterQuery: string) => (value: JobItem) => {\n if (!isValidArray(value.locations, false)) return false;\n\n const preparedQuery = filterQuery.toLowerCase().replace(/\\s/g, '');\n const regex = new RegExp(preparedQuery);\n\n const result = value.locations.find((location) => {\n const preparedName = location.name?.toLowerCase().replace(/\\s/g, '');\n\n return regex.test(preparedName || '');\n });\n\n return !!result;\n};\n\nconst jobTypesFilter = (filterQuery: string) => (value: JobItem) => {\n if (!isValidArray(value?.employmentTypes, false)) return false;\n\n const preparedQuery = filterQuery.toLowerCase().replace(/\\s/g, '');\n const regex = new RegExp(preparedQuery);\n\n return !!value.employmentTypes.find((type) => {\n if (!type.name) return false;\n const preparedText = type.name.toLowerCase().replace(/\\s/g, '');\n return regex.test(preparedText);\n });\n};\n\nconst removeMatchIntersections = (array: FilterMatch[], item?: JobItem[]) => {\n if (!item) return [];\n return item?.filter(\n (m) => !array.find((prioItem) => prioItem.item.id === m.id)\n );\n};\n\ninterface FilterMatch {\n item: JobItem;\n priority: number;\n}\n\nconst filterJobs = (filterQuery: string, jobs: JobItem[]) => {\n const prioList: FilterMatch[] = [];\n if (\n !isValidArray(\n jobs?.filter((job) => job.jobTitle !== undefined),\n false\n )\n ) {\n return prioList;\n }\n\n // PRIO 1 Filter: Exact name\n const exactNameMatches = jobs?.filter(jobExactTitleFilter(filterQuery));\n if (isValidArray(exactNameMatches, false)) {\n prioList.push(\n ...exactNameMatches.map((match) => ({\n item: match,\n priority: 1,\n }))\n );\n }\n\n // PRIO 2 Filter: Name\n const nameMatches = removeMatchIntersections(\n prioList,\n jobs?.filter(jobSoftTitleFilter(filterQuery))\n );\n if (isValidArray(nameMatches, false)) {\n prioList.push(\n ...nameMatches.map((match) => ({\n item: match,\n priority: 2,\n }))\n );\n }\n\n // PRIO 3 Filter: Location\n const locationNameMatches = removeMatchIntersections(\n prioList,\n jobs?.filter(jobLocationNameFilter(filterQuery))\n );\n if (isValidArray(locationNameMatches, false)) {\n prioList.push(\n ...locationNameMatches.map((match) => ({\n item: match,\n priority: 3,\n }))\n );\n }\n\n // PRIO 4 Filter: Job Type\n const typeMatches = removeMatchIntersections(\n prioList,\n jobs?.filter(jobTypesFilter(filterQuery))\n );\n\n if (isValidArray(typeMatches, false)) {\n prioList.push(\n ...typeMatches.map((match) => ({\n item: match,\n priority: 4,\n }))\n );\n }\n\n return prioList;\n};\n\nconst JobList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of job item settings */\n jobs?: JobItem[];\n\n /** Total amount all locations */\n totalJobLocations?: number;\n\n /** Label to show if all location selected */\n allJobLocationsLabel?: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Injection function for job time model icon */\n modelIcon?: () => React.ReactNode;\n\n /** Injection function for job location icon */\n locationIcon?: () => React.ReactNode;\n\n /** Initial filter query on component render */\n initialFilterQuery?: string;\n\n /** Filter placeholder */\n filterPlaceholder?: string;\n\n /** Show filter input field */\n hasFilter?: boolean;\n\n /** Injection function for filter submit icon */\n filterSubmitIcon?: (isInverted?: boolean) => React.ReactNode;\n\n /** Injection function for filter reset icon */\n filterClearIcon?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n anchorId,\n jobs,\n bgMode,\n modelIcon,\n locationIcon,\n totalJobLocations,\n allJobLocationsLabel,\n initialFilterQuery,\n filterPlaceholder,\n hasFilter,\n filterSubmitIcon,\n filterClearIcon,\n}) => {\n const { colors, globals } = useLibTheme();\n const filterName = globals.sections.jobFilterName;\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const jobCount = jobs?.length || 0;\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight<HTMLDivElement>({\n listLength: jobCount,\n identifiers: ['[data-sheet=\"title\"]', '[data-sheet=\"info\"]'],\n responsive: {\n small: 1,\n semilarge: 2,\n large: 3,\n },\n });\n\n const [filterQuery, setFilterQuery] = React.useState<string>(\n initialFilterQuery || ''\n );\n const isMounted = useMounted();\n\n const jobMatches: FilterMatch[] = React.useMemo(() => {\n const queryParts =\n filterQuery !== undefined\n ? filterQuery.split(' ').map((part) => part.trim())\n : [''];\n const searchMatches: Array<{\n match: FilterMatch;\n intersections: number;\n }> = [];\n\n // tracking matches of each query part\n for (const part of queryParts) {\n const matches = filterJobs(escapeRegExp(part), jobs || []);\n\n for (const match of matches) {\n const intersectionIndex = searchMatches.findIndex(\n (sItem) => sItem.match.item.id === match.item.id\n );\n\n if (intersectionIndex !== -1) {\n searchMatches[intersectionIndex].intersections += 1;\n } else {\n searchMatches.push({\n match,\n intersections: 1,\n });\n }\n }\n }\n\n // filter search matches by intersections so only matches with results for all search parts are shown\n return searchMatches\n .filter((m) => m.intersections >= queryParts.length)\n .map<FilterMatch>((m) => ({\n ...m.match,\n }));\n }, [filterQuery, jobs]);\n\n const getFilter = useCallback(() => {\n return getUrlParams()[filterName];\n }, [filterName]);\n\n useEffect(() => {\n const urlFilter = getFilter();\n\n if (\n urlFilter !== undefined &&\n urlFilter !== null &&\n typeof urlFilter === 'string'\n ) {\n setFilterQuery(urlFilter);\n }\n }, [getFilter]);\n\n useEffect(() => {\n if (isMounted) return;\n\n // set inital data into URL\n if (filterQuery) {\n setUrlParam(filterName, filterQuery);\n } else {\n deleteUrlParam(filterName);\n }\n }, [filterName, filterQuery, isMounted]);\n\n useUpdateEffect(() => {\n // set filters to URL params\n if (filterQuery) {\n setUrlParam(filterName, filterQuery);\n } else {\n deleteUrlParam(filterName);\n }\n }, [filterQuery]);\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {hasFilter && (\n <Filter\n placeholder={filterPlaceholder || 'Suche'}\n value={filterQuery}\n initialValue={initialFilterQuery}\n onSubmit={setFilterQuery}\n isInverted={isInverted}\n submitIcon={filterSubmitIcon}\n clearIcon={filterClearIcon}\n />\n )}\n <List>\n {jobMatches\n ?.sort((a, b) => a.priority - b.priority)\n .map((match, i) => (\n <Item key={i}>\n <JobCard\n ref={cardRefs[i]}\n {...match.item}\n isInverted={isInverted}\n hasBackground={hasBg}\n modelIcon={modelIcon}\n locationIcon={locationIcon}\n totalLocations={totalJobLocations}\n allLocationsLabel={allJobLocationsLabel}\n />\n </Item>\n ))}\n </List>\n </Wrapper>\n </Section>\n );\n};\n\nexport const JobListComponent = JobList;\nexport default withLibTheme(JobList);\n","import ClockFilled from 'components/base/icons/ClockFilled';\nimport LocationPin from 'components/base/icons/LocationPin';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\nimport { JobCardProps } from 'components/blocks/JobCard';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\nimport React from 'react';\nimport styled from 'styled-components';\nimport { isValidArray } from 'utils/arrays';\nimport { concat } from 'utils/concat';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { generateJob, StructuredEmploymentType } from 'utils/structuredData';\nimport { spacings } from 'utils/styles';\n\nconst ArticleHead = styled.div`\n & + * {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst JobInfos = styled(Copy)`\n &:not(:first-child) {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst Info = styled.div`\n display: -ms-grid;\n display: grid;\n\n -ms-grid-columns: min-content 1fr;\n grid-template-columns: min-content 1fr;\n -ms-grid-rows: min-content 1fr;\n grid-auto-rows: min-content 1fr;\n\n & + & {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Icon = styled.span`\n display: flex;\n align-items: center;\n\n & > * {\n height: 32px;\n width: 32px;\n }\n`;\n\nconst MainLabel = styled.span`\n display: flex;\n align-items: center;\n`;\n\nconst Text = styled(Copy)`\n & + & {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n margin-top: ${spacings.spacer}px;\n`;\n\nexport interface OrganizationData {\n name?: string;\n url?: string;\n logo?: string;\n telephone?: string;\n email?: string;\n address?: {\n streetAddress?: string;\n addressLocality?: string;\n postalCode?: string;\n addressCountry?: string;\n };\n}\n\nexport type JobArticleProps = Omit<\n JobCardProps,\n 'isInverted' | 'hasBackground' | 'link'\n> & {\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Abstract text which summarizes the job */\n abstract?: string;\n\n /** Text that describes the job (richtext) */\n description?: string;\n\n /** The hiring organization (important for structured data) */\n organization?: OrganizationData;\n\n /** The date of posting the job tender (important for structured data) */\n datePosted?: Date;\n\n /** Function to inject primary action */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Function to inject secondary action */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n};\n\nconst JobArticle: React.FC<JobArticleProps> = ({\n anchorId,\n bgMode,\n jobTitle,\n employmentTypes,\n locations,\n totalLocations,\n allLocationsLabel,\n modelIcon,\n locationIcon,\n abstract,\n description,\n organization,\n datePosted,\n primaryAction,\n secondaryAction,\n}) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasEmploymentType = isValidArray(employmentTypes, false);\n const validLocations = locations?.filter((loc) => loc.name);\n const hasLocations = isValidArray(validLocations, false);\n\n let locationText = '';\n\n if (hasLocations) {\n if (\n totalLocations !== undefined &&\n validLocations.length >= totalLocations\n ) {\n locationText = allLocationsLabel || '';\n } else {\n locationText = validLocations.map((loc) => loc.name)?.join(', ');\n }\n }\n\n const jsonLd = {\n jobTitle, // title\n locations, // jobLocation\n jobDesc: concat([abstract, description], ' - '), // description\n organization: organization, // hiringOrganization\n directApply: primaryAction || secondaryAction ? true : false, // directApply\n employmentTypes:\n (employmentTypes\n ?.filter((el) => el.type)\n .map((el) => el.type) as StructuredEmploymentType[]) || [],\n datePosted, // datePosted\n };\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n {generateJob(jsonLd)}\n <Wrapper clampWidth=\"small\" addWhitespace>\n <ArticleHead>\n <Heading\n size=\"heading-2\"\n innerHTML={jobTitle}\n isInverted={isInverted}\n />\n {(hasEmploymentType || hasLocations) && (\n <JobInfos\n type=\"copy-b\"\n data-sheet=\"info\"\n isInverted={isInverted}\n >\n {hasEmploymentType && (\n <Info>\n <Icon>\n {modelIcon ? (\n modelIcon()\n ) : (\n <ClockFilled />\n )}\n </Icon>\n <MainLabel>\n {employmentTypes\n ?.filter((type) => type.name)\n .map((type) => type.name)\n ?.join(', ')}\n </MainLabel>\n </Info>\n )}\n\n {hasLocations && (\n <Info>\n <Icon>\n {locationIcon ? (\n locationIcon()\n ) : (\n <LocationPin />\n )}\n </Icon>\n <MainLabel>{locationText}</MainLabel>\n </Info>\n )}\n </JobInfos>\n )}\n </ArticleHead>\n {abstract && (\n <Text type=\"copy-b\" isInverted={isInverted}>\n {abstract}\n </Text>\n )}\n {description && (\n <Text innerHTML={description} isInverted={isInverted} />\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const JobArticleComponent = JobArticle;\nexport default withLibTheme(JobArticle);\n","import React, { useMemo } from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\nimport { spacings } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Grid from 'components/base/Grid';\nimport InfoList, { InfoGroup } from 'components/blocks/InfoList';\nimport POIFacts from 'components/blocks/POIFacts';\nimport { isValidArray } from 'utils/arrays';\n\nconst StyledImage = styled(Image)`\n &:not(:last-child) {\n margin-bottom: ${spacings.spacer}px;\n }\n`;\n\nconst Facts = styled(POIFacts)`\n max-width: 880px;\n`;\n\nconst PoiTitle = styled(Heading)`\n max-width: 880px;\n\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2; /* number of lines to show */\n line-clamp: 2;\n -webkit-box-orient: vertical;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst PoiText = styled(Copy)`\n max-width: 880px;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst PointOfInterestDetail: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** POI image */\n image?: Omit<ImageProps, 'coverSpace'>;\n\n /** POI title */\n title?: string;\n\n /** POI intro text */\n intro?: string;\n\n /** POI text (richtext) */\n text?: string;\n\n /** Array of POI facts */\n facts?: string[];\n\n /** Additional POI infos */\n infos?: InfoGroup[];\n\n /** Section background */\n bgMode?: 'inverted' | 'full';\n\n /** Function to inject custom feature node */\n customFact?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n }) => React.ReactNode;\n}> = ({\n anchorId,\n image,\n title,\n intro,\n text,\n facts,\n infos,\n bgMode,\n customFact,\n}) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n const hasInfos = useMemo(() => {\n return isValidArray(\n infos?.filter((info) => isValidArray(info.items, false)),\n false\n );\n }, [infos]);\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {image?.small && (\n <StyledImage\n {...image}\n coverSpace\n allowEdgeRadius\n isInverted={isInverted}\n />\n )}\n <Grid.Row\n gutter={spacings.nudge * 5}\n semilarge={{ gutter: spacings.spacer }}\n >\n <Grid.Col semilarge={{ span: hasInfos ? 5.7 / 8 : 1 }}>\n {title && (\n <PoiTitle size=\"heading-2\" isInverted={isInverted}>\n {title}\n </PoiTitle>\n )}\n {isValidArray(facts, false) && (\n <Facts\n isInverted={isInverted}\n facts={facts}\n customFact={customFact}\n />\n )}\n {intro && (\n <PoiText\n size=\"medium\"\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n />\n )}\n {text && (\n <PoiText\n size=\"medium\"\n isInverted={isInverted}\n innerHTML={text}\n />\n )}\n </Grid.Col>\n {hasInfos && (\n <Grid.Col semilarge={{ span: 2.3 / 8 }}>\n <InfoList isInverted={isInverted} items={infos} />\n </Grid.Col>\n )}\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const PointOfInterestDetailComponent = PointOfInterestDetail;\nexport default withLibTheme(PointOfInterestDetail);\n","import Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { Info } from 'components/blocks/InfoList';\nimport POICard, { POICardProps } from 'components/blocks/POICard';\nimport FilterField from 'components/fields/FilterField';\nimport useUpdateEffect from 'utils/useUpdateEffect';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { isValidArray } from 'utils/arrays';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { mq, spacings } from 'utils/styles';\nimport { escapeRegExp } from 'utils/escape';\nimport useMounted from 'utils/useMounted';\nimport { deleteUrlParam, getUrlParams, setUrlParam } from 'utils/urlParams';\n\nconst Content = styled.div`\n & > * + * {\n margin-top: ${spacings.nudge * 5}px;\n }\n\n @media ${mq.large} {\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst Filter = styled(FilterField)`\n // margin to show prevent section overflow outline\n margin-top: 2px;\n\n &:not(:last-child) {\n margin-bottom: ${spacings.nudge * 5}px;\n }\n`;\n\nconst poiExactNameFilter =\n (filterQuery: string) => (value: PointOfInterestOverviewItem) => {\n const regex = new RegExp(filterQuery);\n return regex.test(value.name);\n };\n\nconst poiSoftNameFilter =\n (filterQuery: string) => (value: PointOfInterestOverviewItem) => {\n const preparedQuery = filterQuery.toLowerCase().replace(/\\s/g, '');\n const preparedName = value.name.toLowerCase().replace(/\\s/g, '');\n\n const regex = new RegExp(preparedQuery);\n return regex.test(preparedName);\n };\n\nconst poiFactFilter =\n (filterQuery: string) => (value: PointOfInterestOverviewItem) => {\n if (!isValidArray(value.facts, false)) return false;\n\n const preparedQuery = filterQuery.toLowerCase().replace(/\\s/g, '');\n const regex = new RegExp(preparedQuery);\n\n const result = value.facts.find((fact) => {\n const preparedFact = fact.toLowerCase().replace(/\\s/g, '');\n return regex.test(preparedFact);\n });\n\n return !!result;\n };\n\nconst poiInfoFilter =\n (filterQuery: string) => (value: PointOfInterestOverviewItem) => {\n if (!isValidArray(value?.infos, false)) return false;\n\n const preparedQuery = filterQuery.toLowerCase().replace(/\\s/g, '');\n const regex = new RegExp(preparedQuery);\n\n return !!value.infos.find((info) => {\n if (!info.text) return false;\n const preparedText = info.text.toLowerCase().replace(/\\s/g, '');\n return regex.test(preparedText);\n });\n };\n\nconst poiDescriptionFilter =\n (filterQuery: string) => (value: PointOfInterestOverviewItem) => {\n if (!value.shortDescription) return false;\n\n const preparedQuery = filterQuery.toLowerCase().replace(/\\s/g, '');\n const preparedDesc = value.shortDescription\n .toLowerCase()\n .replace(/\\s/g, '');\n\n const regex = new RegExp(preparedQuery);\n return regex.test(preparedDesc);\n };\n\nconst removeMatchIntersections = (\n array: FilterMatch[],\n item?: PointOfInterestOverviewItem[]\n) => {\n if (!item) return [];\n return item?.filter(\n (m) => !array.find((prioItem) => prioItem.item.id === m.id)\n );\n};\n\nconst filterPois = (\n filterQuery: string,\n pois: PointOfInterestOverviewItem[]\n) => {\n const prioList: FilterMatch[] = [];\n if (\n !isValidArray(\n pois?.filter((poi) => poi.id !== undefined),\n false\n )\n ) {\n return prioList;\n }\n\n // PRIO 1 Filter: Exact name\n const exactNameMatches = pois?.filter(poiExactNameFilter(filterQuery));\n if (isValidArray(exactNameMatches, false)) {\n prioList.push(\n ...exactNameMatches.map((match) => ({\n item: match,\n priority: 1,\n }))\n );\n }\n\n // PRIO 2 Filter: Name\n const nameMatches = removeMatchIntersections(\n prioList,\n pois?.filter(poiSoftNameFilter(filterQuery))\n );\n\n if (isValidArray(nameMatches, false)) {\n prioList.push(\n ...nameMatches.map((match) => ({\n item: match,\n priority: 2,\n }))\n );\n }\n\n // PRIO 3 Filter: Facts\n const factMatches = removeMatchIntersections(\n prioList,\n pois?.filter(poiFactFilter(filterQuery))\n );\n\n if (isValidArray(factMatches, false)) {\n prioList.push(\n ...factMatches.map((match) => ({\n item: match,\n priority: 3,\n }))\n );\n }\n\n // PRIO 4 Filter: Description\n const infoMatches = removeMatchIntersections(\n prioList,\n pois?.filter(poiInfoFilter(filterQuery))\n );\n\n if (isValidArray(infoMatches, false)) {\n prioList.push(\n ...infoMatches.map((match) => ({\n item: match,\n priority: 4,\n }))\n );\n }\n\n // PRIO 5 Filter: Description\n const descMatches = removeMatchIntersections(\n prioList,\n pois?.filter(poiDescriptionFilter(filterQuery))\n );\n\n if (isValidArray(descMatches, false)) {\n prioList.push(\n ...descMatches.map((match) => ({\n item: match,\n priority: 5,\n }))\n );\n }\n\n return prioList;\n};\n\ninterface CardProps extends POICardProps {\n id: string;\n infos?: Array<Info & { allowFiltering?: boolean }>;\n}\n\nexport type PointOfInterestOverviewItem = Omit<CardProps, 'isInverted'>;\n\ninterface FilterMatch {\n item: PointOfInterestOverviewItem;\n priority: number;\n}\n\nconst PointOfInterestOverview: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of POI card settings */\n pois?: PointOfInterestOverviewItem[];\n\n /** Enable/Disable filtering */\n enableFiltering?: boolean;\n\n /** Initial filter query on component render */\n initialFilterQuery?: string;\n\n /** Placeholder for filter input */\n filterPlaceholder?: string;\n\n /** Injection function for filter submit icon */\n filterSubmitIcon?: (isInverted?: boolean) => React.ReactNode;\n\n /** Injection function for filter reset icon */\n filterClearIcon?: (isInverted?: boolean) => React.ReactNode;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({\n anchorId,\n bgMode,\n pois,\n enableFiltering,\n initialFilterQuery,\n filterPlaceholder = 'Filter',\n filterSubmitIcon,\n filterClearIcon,\n}) => {\n const { colors, globals } = useLibTheme();\n const filterName = globals.sections.poiFilterName;\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const [filterQuery, setFilterQuery] = useState<string>(\n initialFilterQuery || ''\n );\n const isMounted = useMounted();\n\n const poiMatches: FilterMatch[] = React.useMemo(() => {\n const queryParts = filterQuery.split(' ').map((part) => part.trim());\n const searchMatches: Array<{\n match: FilterMatch;\n intersections: number;\n }> = [];\n\n // tracking matches of each query part\n for (const part of queryParts) {\n const matches = filterPois(escapeRegExp(part), pois || []);\n\n for (const match of matches) {\n const intersectionIndex = searchMatches.findIndex(\n (sItem) => sItem.match.item.id === match.item.id\n );\n\n if (intersectionIndex !== -1) {\n searchMatches[intersectionIndex].intersections += 1;\n } else {\n searchMatches.push({\n match,\n intersections: 1,\n });\n }\n }\n }\n\n // filter search matches by intersections so only matches with results for all search parts are shown\n return searchMatches\n .filter((m) => m.intersections >= queryParts.length)\n .map<FilterMatch>((m) => ({\n ...m.match,\n }));\n }, [filterQuery, pois]);\n\n const getFilter = useCallback(() => {\n return getUrlParams()[filterName];\n }, [filterName]);\n\n useEffect(() => {\n const urlFilter = getFilter();\n\n if (\n urlFilter !== undefined &&\n urlFilter !== null &&\n typeof urlFilter === 'string'\n ) {\n setFilterQuery(urlFilter);\n }\n }, [getFilter]);\n\n useEffect(() => {\n if (isMounted) return;\n\n // set inital data into URL\n if (filterQuery) {\n setUrlParam(filterName, filterQuery);\n } else {\n deleteUrlParam(filterName);\n }\n }, [filterName, filterQuery, isMounted]);\n\n useUpdateEffect(() => {\n // set filters to URL params\n if (filterQuery) {\n setUrlParam(filterName, filterQuery);\n } else {\n deleteUrlParam(filterName);\n }\n }, [filterQuery]);\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {enableFiltering && (\n <Filter\n value={filterQuery}\n initialValue={initialFilterQuery}\n placeholder={filterPlaceholder}\n onSubmit={setFilterQuery}\n submitIcon={filterSubmitIcon}\n clearIcon={filterClearIcon}\n isInverted={isInverted}\n />\n )}\n <Content>\n {poiMatches\n ?.sort((a, b) => a.priority - b.priority)\n ?.map((poi, i) => (\n <POICard\n key={i}\n {...poi.item}\n isInverted={isInverted}\n />\n ))}\n </Content>\n </Wrapper>\n </Section>\n );\n};\n\nexport const PointOfInterestOverviewComponent = PointOfInterestOverview;\nexport default withLibTheme(PointOfInterestOverview);\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport useLeafletMap, { LeafletMapMarker } from 'utils/useLeafletMap';\nimport { mq, withRange, getColors as color, spacings } from 'utils/styles';\nimport {\n generateNavbarIdent as genIdent,\n getFullNavbarHeights as getNavHeight,\n} from '../navigation/Navigation';\nimport { getSVGDataImg as getSVGData } from 'utils/dataURI';\nimport LocationPin from 'components/base/icons/LocationPin';\nimport Copy from 'components/typography/Copy';\nimport { isValidArray } from 'utils/arrays';\nimport POIFacts from 'components/blocks/POIFacts';\nimport InfoList, { Info } from 'components/blocks/InfoList';\nimport useGeolocation from 'utils/useGeolocation';\nimport CurrentLocation from 'components/base/icons/CurrentLocation';\nimport Cross from 'components/base/icons/Cross';\nimport MyLocation from 'components/base/icons/MyLocation';\n\nconst genHeightStyles = () => css`\n // Doing some crazy shit to calculate curent navbar height in CSS\n ${({ theme }) => {\n // navbar main only\n const mainIdent = genIdent({\n pageFlow: 'beforeContent',\n hasMain: true,\n });\n\n // navbar main and top\n const mainTopIdent = genIdent({\n pageFlow: 'beforeContent',\n hasMain: true,\n hasTop: true,\n });\n\n // navbar main and bottom\n const mainBottomIdent = genIdent({\n pageFlow: 'beforeContent',\n hasMain: true,\n hasBottom: true,\n });\n\n // full navbar with all bars\n const fullIdent = genIdent({\n pageFlow: 'beforeContent',\n hasTop: true,\n hasMain: true,\n hasBottom: true,\n });\n\n const navMainHeight = getNavHeight(theme, mainIdent).large;\n const navMainTopHeight = getNavHeight(theme, mainTopIdent).large;\n const navMainBottomHeight = getNavHeight(theme, mainBottomIdent).large;\n const navFullHeight = getNavHeight(theme, fullIdent).large;\n\n const mapToSelector = (idents: string[]) => {\n return idents.map((id) => `[data-navbar-ident*='${id}']`).join('');\n };\n\n const refHeight = '100vh';\n\n return css`\n ${Map} {\n height: ${refHeight};\n }\n\n // with main navbar element\n header${mapToSelector(mainIdent.split('-'))} ~ & {\n ${Map} {\n height: calc(${refHeight} - ${navMainHeight[0]}px);\n }\n }\n\n // with main and top navbar elements\n header${mapToSelector(mainTopIdent.split('-'))} ~ & {\n ${Map} {\n height: calc(${refHeight} - ${navMainTopHeight[0]}px);\n }\n }\n\n // with main and bottom navbar elements\n header${mapToSelector(mainBottomIdent.split('-'))} ~ & {\n ${Map} {\n height: calc(${refHeight} - ${navMainBottomHeight[0]}px);\n }\n }\n\n // with all navbar elements\n header${mapToSelector(fullIdent.split('-'))} ~ & {\n ${Map} {\n height: calc(${refHeight} - ${navFullHeight[0]}px);\n }\n }\n\n @media ${mq.semilarge} {\n // with main navbar element\n header${mapToSelector(mainIdent.split('-'))} ~ & {\n ${Map} {\n height: calc(${refHeight} - ${navMainHeight[1]}px);\n }\n }\n\n // with main and top navbar elements\n header${mapToSelector(mainTopIdent.split('-'))} ~ & {\n ${Map} {\n height: calc(${refHeight} - ${navMainTopHeight[1]}px);\n }\n }\n\n // with main and bottom navbar elements\n header${mapToSelector(mainBottomIdent.split('-'))} ~ & {\n ${Map} {\n height: calc(\n ${refHeight} - ${navMainBottomHeight[1]}px\n );\n }\n }\n\n // with all navbar elements\n header${mapToSelector(fullIdent.split('-'))} ~ & {\n ${Map} {\n height: calc(${refHeight} - ${navFullHeight[1]}px);\n }\n }\n }\n `;\n }}\n`;\n\nconst PoiMapSection = styled(Section)<{ isLarge?: boolean }>`\n position: relative;\n ${({ isLarge }) => isLarge && genHeightStyles()}\n\n header + & {\n ${withRange([0], 'padding-top')}\n ${withRange([0], 'margin-top')}\n }\n`;\n\nconst MapContainer = styled.div`\n position: relative;\n`;\n\nconst Map = styled.div<{ isLarge?: boolean }>`\n min-height: 360px;\n height: 360px;\n max-height: 1300px;\n z-index: 0;\n\n @media ${mq.medium} {\n height: 600px;\n min-height: 600px;\n }\n`;\n\nconst RequestGeolocationBtn = styled.button`\n position: absolute;\n top: ${spacings.nudge * 2}px;\n left: ${spacings.nudge * 2}px;\n\n background-color: transparent;\n border: none;\n padding: ${spacings.nudge}px;\n cursor: pointer;\n\n transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n opacity: 0.6;\n }\n }\n\n &:focus {\n outline: 2px solid ${({ theme }) => color(theme).primary.default};\n transform: scale(1.012);\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n & > * {\n width: 30px;\n height: 30px;\n }\n`;\n\nconst CardStage = styled.div`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 10;\n\n display: flex;\n align-items: flex-end;\n justify-content: flex-end;\n\n pointer-events: all;\n background-color: rgba(255, 255, 255, 0.8);\n\n @media ${mq.medium} {\n position: absolute;\n background-color: transparent;\n padding: ${spacings.nudge * 2}px;\n padding-bottom: ${spacings.nudge * 3}px;\n\n pointer-events: none;\n }\n`;\n\nconst MapCardView = styled.div`\n max-height: 100%;\n width: 100%;\n padding: ${spacings.nudge * 2}px;\n overflow: auto;\n\n background: ${({ theme }) => color(theme).elementBg.light};\n box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.3);\n pointer-events: all;\n border-radius: 8px;\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.medium} {\n max-width: 400px;\n }\n`;\n\nconst MapCardHeader = styled.header`\n display: flex;\n align-items: center;\n`;\n\nconst CloseBtn = styled.button`\n display: inline-block;\n border: none;\n background-color: transparent;\n cursor: pointer;\n margin-left: auto;\n padding: ${spacings.nudge}px;\n\n transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n opacity: 0.6;\n }\n }\n\n &:focus {\n outline: 2px solid ${({ theme }) => color(theme).primary.default};\n transform: scale(1.012);\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst MapCard: FC<{\n name?: string;\n facts?: string[];\n description?: string;\n infos?: Info[];\n\n action?: React.ReactNode;\n onClose?: () => void;\n customFact?: (props: { key: React.Key; name: string }) => React.ReactNode;\n customClose?: React.ReactNode;\n\n className?: string;\n}> = ({\n name,\n facts,\n description,\n infos,\n action,\n customFact,\n customClose,\n onClose,\n className,\n}) => {\n const { colors } = useLibTheme();\n\n return (\n <MapCardView className={className}>\n <MapCardHeader>\n {name && (\n <Copy type=\"copy-b\" size=\"big\">\n {name}\n </Copy>\n )}\n <CloseBtn onClick={onClose}>\n {customClose || <Cross iconColor={colors.text.default} />}\n </CloseBtn>\n </MapCardHeader>\n {isValidArray(facts, false) && (\n <POIFacts facts={facts} customFact={customFact} />\n )}\n {description && (\n <Copy type=\"copy\" size=\"small\" innerHTML={description} />\n )}\n {isValidArray(infos, false) && (\n <InfoList\n items={[\n {\n items: infos,\n },\n ]}\n />\n )}\n {action && action}\n </MapCardView>\n );\n};\n\nexport interface LocationIcon {\n url: string;\n size: [number, number];\n anchor: [number, number];\n\n sizeActive: [number, number];\n anchorActive: [number, number];\n}\n\nexport interface MapPOI {\n /** Unique ID */\n id: string;\n\n /** Latitude and Longitude of item position */\n position: [number, number];\n\n /** Marker icon settings */\n icon?: LocationIcon;\n\n /** POI name */\n name?: string;\n\n /** POI short description text */\n description?: string;\n\n /** Array of POI facts */\n facts?: string[];\n\n /** Array of additional POI informations */\n infos?: Info[];\n\n /** Function to inject custom action node */\n action?: React.ReactNode;\n}\n\nconst PointOfInterestMap: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Size mode */\n size?: 'default' | 'large';\n\n /** Array of POI card settings */\n pois?: MapPOI[];\n\n /** Use geolocation for own position */\n showOwnPosition?: boolean;\n\n /** Map tile provider */\n provider?: string;\n\n /** Map attribution text (richtext) */\n attribution?: string;\n\n /** Initial center of the map */\n center?: [number, number];\n\n /** Initial map zoom */\n zoom?: number;\n\n /** Min map zoom */\n minZoom?: number;\n\n /** Max map zoom */\n maxZoom?: number;\n\n /** Zoom if map jumps to location */\n flyToZoom?: number;\n\n /** Initial location */\n initialPointOfInterest?: string;\n\n /** Show all markers on first load */\n allMarkersOnInit?: boolean;\n\n /** Restrict map to bounds of markers area */\n restrictToMarkersArea?: boolean;\n\n /** Map container padding for show all markers */\n fitBoundsPadding?: [number, number];\n\n /** Function to inject custom fact node into MapCard */\n customFact?: (props: { key: React.Key; name: string }) => React.ReactNode;\n\n /** Custom current position marker */\n currentPosMarker?: LocationIcon;\n\n /** Custom card close icon */\n customCardClose?: React.ReactNode;\n\n /** Custom icon for my location request button */\n customLocationRequest?: React.ReactNode;\n}> = ({\n anchorId,\n size,\n pois,\n initialPointOfInterest = '',\n provider,\n attribution,\n center = [51.505, -0.09],\n zoom = 5,\n fitBoundsPadding,\n allMarkersOnInit = false,\n restrictToMarkersArea = true,\n showOwnPosition,\n flyToZoom,\n customFact,\n currentPosMarker,\n customCardClose,\n customLocationRequest,\n}) => {\n const isLarge = size === 'large';\n const { colors } = useLibTheme();\n\n const [activePoiId, setActivePoiId] = useState<string>(\n initialPointOfInterest || ''\n );\n const [isDirty, setIsDirty] = useState<boolean>(false);\n const activePOI = useMemo(() => {\n return pois?.find((poi) => poi.id === activePoiId);\n }, [activePoiId, pois]);\n\n const {\n isSupported: isGeolocationSupported,\n location,\n reset: resetGeolocation,\n // error,\n } = useGeolocation(true, false);\n\n const mapMarkers = useMemo(() => {\n const defaultMarker: LocationIcon = {\n size: [28, 28],\n anchor: [14, 28],\n sizeActive: [70, 70],\n anchorActive: [35, 70],\n url: getSVGData(<LocationPin />),\n };\n\n // marker of own position\n const defaultPosMarker: LocationIcon = {\n size: [24, 24],\n anchor: [12, 12],\n sizeActive: [24, 24],\n anchorActive: [12, 12],\n url: getSVGData(<CurrentLocation iconColor=\"#5383EC\" />),\n };\n\n const markers: LeafletMapMarker[] =\n pois\n ?.filter((poi) => poi.id !== undefined)\n ?.map(({ id, position, icon }) => ({\n id,\n position,\n icon: icon || defaultMarker,\n isInteractive: true,\n })) || [];\n\n if (\n isGeolocationSupported &&\n location?.coords.latitude &&\n location?.coords.longitude\n ) {\n markers.push({\n id: 'my-current-position-123456789',\n position: [location.coords.latitude, location.coords.longitude],\n icon: currentPosMarker || defaultPosMarker,\n });\n }\n\n return markers;\n }, [\n currentPosMarker,\n isGeolocationSupported,\n location?.coords.latitude,\n location?.coords.longitude,\n pois,\n ]);\n\n const {\n isLoaded,\n setContainer: setMapContainer,\n flyToActive,\n showAllMarkers,\n flyToPosition,\n getCurrentZoom,\n } = useLeafletMap({\n url: provider,\n attribution,\n center,\n zoom,\n activeMarkerId: activePoiId,\n markers: mapMarkers,\n fitBoundsPadding,\n restrictToMarkersArea,\n showZoomControls: true,\n zoomControlPosition: 'bottomleft',\n onMarkerClick: (markerId) => {\n setActivePoiId((prev) => {\n if (prev === markerId) {\n return '';\n }\n return markerId;\n });\n },\n });\n\n useEffect(() => {\n if (isLoaded && !isDirty) {\n if (allMarkersOnInit) showAllMarkers();\n } else {\n const currentZoom = getCurrentZoom();\n let zoom = flyToZoom;\n if (flyToZoom !== undefined && currentZoom > flyToZoom) {\n zoom = currentZoom;\n }\n\n flyToActive(zoom);\n }\n }, [\n activePoiId,\n allMarkersOnInit,\n flyToActive,\n flyToZoom,\n getCurrentZoom,\n initialPointOfInterest,\n isDirty,\n isLoaded,\n showAllMarkers,\n ]);\n\n useEffect(() => {\n if (!isDirty && activePoiId !== initialPointOfInterest) {\n setIsDirty(true);\n }\n }, [activePoiId, initialPointOfInterest, isDirty]);\n\n const handleLocationRequest = async () => {\n if (location?.coords?.latitude && location?.coords?.longitude) {\n const currentZoom = getCurrentZoom();\n let zoom = flyToZoom;\n if (flyToZoom !== undefined && currentZoom > flyToZoom) {\n zoom = currentZoom;\n }\n\n flyToPosition(\n [location.coords.latitude, location.coords.longitude],\n zoom\n );\n } else {\n try {\n const position = await resetGeolocation();\n if (position) showAllMarkers();\n } catch (err) {\n // console.log(err);\n }\n }\n };\n\n return (\n <PoiMapSection\n anchorId={anchorId}\n bgColor=\"image\"\n bgMode=\"full\"\n isLarge={isLarge}\n >\n <Wrapper clampWidth={isLarge ? 'large' : 'normal'}>\n <MapContainer>\n <Map ref={setMapContainer} isLarge={size === 'large'} />\n {showOwnPosition && (\n <RequestGeolocationBtn onClick={handleLocationRequest}>\n {customLocationRequest || (\n <MyLocation iconColor={colors.text.default} />\n )}\n </RequestGeolocationBtn>\n )}\n {activePOI && activePOI.name && (\n <CardStage\n onClick={(ev) => {\n if (ev.target !== ev.currentTarget) return;\n setActivePoiId('');\n }}\n >\n <MapCard\n {...activePOI}\n onClose={() => setActivePoiId('')}\n customFact={customFact}\n customClose={customCardClose}\n />\n </CardStage>\n )}\n </MapContainer>\n </Wrapper>\n </PoiMapSection>\n );\n};\n\nexport const PointOfInterestMapComponent = PointOfInterestMap;\nexport default withLibTheme(PointOfInterestMap);\n","import React, { FC, useMemo } from 'react';\nimport styled from 'styled-components';\n\nimport Bdot from 'components/blocks/Bdot';\nimport { copyStyle } from 'components/typography/Copy';\nimport Link from 'components/typography/Link';\n\nimport { spacings, getColors as color, mq } from 'utils/styles';\nimport { BottomLink } from '../Footer';\n\nconst View = styled.div`\n border-top: 1px solid ${({ theme }) => color(theme).elementBg.medium};\n padding: ${spacings.nudge * 2}px 0;\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n\n & > * + * {\n margin-top: 0;\n margin-left: ${spacings.nudge * 2}px;\n }\n }\n`;\n\nconst LinkListView = styled.ul`\n padding: 0;\n margin: 0;\n list-style: none;\n\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n align-items: center;\n\n margin-left: -${spacings.nudge}px;\n`;\n\nconst BottomLinkItem = styled.li`\n display: flex;\n align-items: center;\n\n padding-left: ${spacings.nudge}px;\n`;\n\nconst StyledLink = styled(Link)<{ isInverted?: boolean }>`\n display: block;\n text-decoration: none;\n\n ${copyStyle('copy', 'small')}\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).text.inverted : color(theme).text.default};\n`;\n\nconst LinkList: FC<{\n isInverted?: boolean;\n links?: BottomLink[];\n brandIcon?: (isInverted?: boolean) => React.ReactNode | null;\n className?: string;\n}> = ({ isInverted, links, brandIcon, className }) => {\n const brand = useMemo(\n () => brandIcon?.(isInverted),\n [brandIcon, isInverted]\n );\n\n return (\n <LinkListView className={className}>\n {links?.map((item, i) => (\n <BottomLinkItem key={i}>\n <StyledLink {...item.link} isInverted={isInverted}>\n {item.label}\n </StyledLink>\n </BottomLinkItem>\n ))}\n {brand !== null && (\n <BottomLinkItem>{brand || <Bdot />}</BottomLinkItem>\n )}\n </LinkListView>\n );\n};\n\nconst FooterBottomGrid: FC<{\n className?: string;\n children?: React.ReactNode;\n}> = ({ className, children }) => {\n return <View className={className}>{children}</View>;\n};\n\nexport default {\n View: FooterBottomGrid,\n LinkList: LinkList,\n};\n","import React, { FC } from 'react';\n\nimport LanguageSwitcher, { Language } from 'components/blocks/LanguageSwitcher';\nimport FooterBottomGrid from '../skeletons/FooterBottomGrid';\nimport { BottomLink } from '../Footer';\nimport * as Icons from 'icons';\nimport { isValidArray } from 'utils/arrays';\nimport styled from 'styled-components';\nimport { spacings } from 'utils/styles';\n\nconst LeftWrapper = styled.div`\n display: flex;\n flex-wrap: wrap;\n margin-left: -${spacings.spacer}px;\n\n & > * {\n padding-left: ${spacings.spacer}px;\n }\n`;\n\nconst FooterBottomBar: FC<{\n isInverted?: boolean;\n languages?: Language[];\n linksLeft?: BottomLink[];\n linksRight?: BottomLink[];\n brandIcon?: (isInverted?: boolean) => React.ReactNode;\n languageIcon?: (isInverted?: boolean) => React.ReactNode;\n className?: string;\n}> = ({\n isInverted,\n languages,\n linksLeft,\n linksRight,\n brandIcon,\n languageIcon,\n className,\n}) => {\n return (\n <FooterBottomGrid.View className={className}>\n <LeftWrapper>\n {languages && (\n <LanguageSwitcher\n isInverted={isInverted}\n langs={languages}\n languageIcon={\n languageIcon\n ? languageIcon\n : () => <Icons.Language />\n }\n textSize=\"small\"\n />\n )}\n {isValidArray(linksLeft, false) && (\n <FooterBottomGrid.LinkList\n links={linksLeft}\n isInverted={isInverted}\n brandIcon={() => null}\n />\n )}\n </LeftWrapper>\n {isValidArray(linksRight) && (\n <FooterBottomGrid.LinkList\n links={linksRight}\n isInverted={isInverted}\n brandIcon={brandIcon}\n />\n )}\n </FooterBottomGrid.View>\n );\n};\n\nexport default FooterBottomBar;\n","import Grid from 'components/base/Grid';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { Language } from 'components/blocks/LanguageSwitcher';\nimport Copy, { copyStyle } from 'components/typography/Copy';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport React, { useMemo } from 'react';\nimport styled from 'styled-components';\nimport { useLibTheme } from 'utils/LibThemeProvider';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport { withLibTheme } from 'utils/LibThemeProvider';\nimport FooterBottomBar from './partials/FooterBottomBar';\nimport { isValidArray } from 'utils/arrays';\n\nconst FooterSection = styled(Section)`\n ${withRange([0], 'padding-bottom')}\n ${withRange([0], 'margin-bottom')}\n`;\n\nconst MainView = styled.div`\n & > * {\n margin-bottom: ${spacings.nudge * 2}px;\n }\n`;\n\nconst ColTitle = styled(Copy)`\n margin-bottom: ${spacings.nudge * 2}px;\n`;\n\nconst StyledLink = styled(Link)<{ isInverted?: boolean }>`\n display: inline-block;\n text-decoration: none;\n\n ${copyStyle('copy', 'medium')}\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).text.inverted : color(theme).text.default};\n`;\n\nconst LinkList = styled.ul`\n padding: 0;\n margin: 0;\n list-style: none;\n`;\n\nconst LinkItem = styled.li`\n & + & {\n margin-top: ${spacings.nudge}px;\n }\n`;\n\nconst CustomCol = styled.div`\n & > * + * {\n margin-top: ${spacings.nudge * 5}px;\n }\n\n @media ${mq.semilarge} {\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n }\n`;\n\nconst FootNote = styled(Copy)`\n margin-top: ${spacings.nudge * 5}px;\n\n @media ${mq.semilarge} {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nexport interface SiteLinkGroup {\n title?: string;\n links?: Array<{ label?: string; link?: LinkProps }>;\n}\n\nexport interface FooterState {\n isInverted?: boolean;\n siteLinks?: SiteLinkGroup[];\n bottomLinksLeft?: BottomLink[];\n bottomLinksRight?: BottomLink[];\n languages?: Language[];\n}\n\nexport interface BottomLink {\n label?: string;\n link?: LinkProps;\n}\n\nconst Footer: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Array of sitelink groups */\n siteLinks?: SiteLinkGroup[];\n\n /** Function to inject custom footer column content */\n customColumn?: (props: FooterState) => React.ReactNode;\n\n /** Footnote text of main section (richtext) */\n footNote?: string;\n\n /** Link list in left bottom bar */\n bottomLinksLeft?: BottomLink[];\n\n /** Link list in right bottom bar */\n bottomLinksRight?: BottomLink[];\n\n /** Language toggler settings */\n languages?: Language[];\n\n /** Inject function to suppress bottom bar or define a custom definition */\n bottomBar?: ((props: FooterState) => React.ReactNode | null) | null;\n}> = ({\n bgMode,\n siteLinks,\n customColumn,\n footNote,\n bottomBar,\n bottomLinksLeft,\n bottomLinksRight,\n languages,\n}) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n\n const customCol = useMemo(() => {\n return customColumn\n ? customColumn({\n isInverted,\n siteLinks,\n languages,\n bottomLinksLeft,\n bottomLinksRight,\n })\n : undefined;\n }, [\n bottomLinksLeft,\n bottomLinksRight,\n customColumn,\n isInverted,\n languages,\n siteLinks,\n ]);\n\n const bottom = useMemo(() => {\n return bottomBar\n ? bottomBar({\n isInverted,\n siteLinks,\n languages,\n bottomLinksLeft,\n bottomLinksRight,\n })\n : undefined;\n }, [\n bottomBar,\n bottomLinksLeft,\n bottomLinksRight,\n isInverted,\n languages,\n siteLinks,\n ]);\n\n const hasBottomBar = useMemo(() => {\n if (bottomBar === null) return false;\n if (bottom) return true;\n if (bottom === null) return false;\n\n return (\n isValidArray(languages, false) ||\n isValidArray(bottomLinksLeft, false) ||\n isValidArray(bottomLinksRight, false)\n );\n }, [bottom, bottomBar, bottomLinksLeft, bottomLinksRight, languages]);\n\n return (\n <FooterSection\n addSeperation\n renderAs=\"footer\"\n clampSolidBg={false}\n bgMode={mapToBgMode(bgMode, true)}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n >\n <Wrapper addWhitespace>\n <MainView>\n <Grid.Row\n gutter={spacings.nudge * 5}\n medium={{ gutter: spacings.spacer }}\n >\n {siteLinks?.map(({ title, links }, i) => {\n return (\n <Grid.Col\n key={i}\n medium={{ span: 6 / 12 }}\n semilarge={{ span: 4 / 12 }}\n large={{ span: 3 / 12 }}\n valign=\"top\"\n >\n <ColTitle\n type=\"copy-b\"\n isInverted={isInverted}\n >\n {title}\n </ColTitle>\n <LinkList>\n {links?.map(({ link, label }, ii) => (\n <LinkItem key={ii}>\n <StyledLink\n {...link}\n isInverted={isInverted}\n >\n {label}\n </StyledLink>\n </LinkItem>\n ))}\n </LinkList>\n </Grid.Col>\n );\n })}\n {customCol && (\n <Grid.Col\n large={{ span: 3 / 12 }}\n toRight\n valign=\"top\"\n >\n <CustomCol>{customCol}</CustomCol>\n </Grid.Col>\n )}\n </Grid.Row>\n {footNote && (\n <FootNote\n size=\"small\"\n isInverted={isInverted}\n innerHTML={footNote}\n />\n )}\n </MainView>\n {bottom ? (\n bottom\n ) : hasBottomBar ? (\n <FooterBottomBar\n isInverted={isInverted}\n linksLeft={bottomLinksLeft}\n linksRight={bottomLinksRight}\n languages={languages}\n />\n ) : null}\n </Wrapper>\n </FooterSection>\n );\n};\n\nexport const FooterComponent = Footer;\nexport default withLibTheme(Footer);\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { spacings } from 'utils/styles';\n\nimport Copy from 'components/typography/Copy';\n\nconst View = styled.div`\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n`;\n\nconst FooterArticle: FC<{\n isInverted?: boolean;\n title?: string;\n text?: string;\n action?: (props: { isInverted?: boolean }) => React.ReactNode;\n className?: string;\n}> = ({ isInverted, title, text, action, className }) => {\n return (\n <View className={className}>\n {title && (\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {title}\n </Copy>\n )}\n {text && (\n <Copy size=\"small\" isInverted={isInverted} innerHTML={text} />\n )}\n {action && action({ isInverted })}\n </View>\n );\n};\n\nexport default FooterArticle;\n","import SocialList, { SocialItem } from 'components/blocks/SocialList';\nimport React, { FC } from 'react';\nimport FooterArticle from '../skeletons/FooterArticle';\n\nconst FooterColumn: FC<{\n isInverted?: boolean;\n title?: string;\n text?: string;\n action?: (props: { isInverted?: boolean }) => React.ReactNode;\n socialTitle?: string;\n socials?: SocialItem[];\n}> = ({ isInverted, title, text, action, socialTitle, socials }) => {\n return (\n <React.Fragment>\n {(title || text || action) && (\n <FooterArticle\n isInverted={isInverted}\n title={title}\n text={text}\n action={action}\n />\n )}\n {socials && socials.length > 0 && (\n <SocialList\n isInverted={isInverted}\n title={socialTitle}\n items={socials}\n />\n )}\n </React.Fragment>\n );\n};\n\nexport default FooterColumn;\n"],"names":["distinct","value","index","array","indexOf","AccordionContainer","styled","div","withConfig","displayName","componentId","templateObject_1","__makeTemplateObject","spacings","nudge","View","details","templateObject_2","AccordionHead","summary","templateObject_3","_a","isInverted","hasBg","theme","color","getColors","elementBg","light","medium","mq","lightHover","mediumHover","Column","Copy","templateObject_4","AccordionText","templateObject_5","spacer","semilarge","gridSettings","gutter","AccordionBlock","label","text","aside","isSelected","onClick","itemIcon","className","colors","useLibTheme","React","createElement","open","onToggle","renderAs","size","type","Minus","iconColor","default","Plus","hasAside","innerHTML","Accordion$1","withLibTheme","anchorId","items","bgMode","_b","useState","currentItems","setCurrentItems","Section","addSeperation","bgColor","sectionBg","dark","mapToBgMode","JsonLd","item","mainEntity","map","name","acceptedAnswer","generateFAQ","Wrapper","addWhitespace","Grid","Row","Col","i","key","concat","prev","copy","__spreadArray","push","splice","primary","inverted","global","sections","edgeRadius","invertedHover","hover","Icon","MainLabel","Content","Title","ViewLink","Link","templateObject_6","Alert","title","date","description","link","customIcon","formattedDate","StatusFormatter","getTime","getFormattedDate","Info","textColor","__assign","ariaLabel","href","undefined","List","ul","ListItem","li","large","itemsPerRow","AlertList$1","alertCount","length","alertRefs","useEqualSheetHeight","listLength","identifiers","responsive","small","xlarge","ref","StyledTitle","ContentText","StyledActions","Actions","Article$1","titleAs","_c","titleSize","superTitle","superTitleAs","intro","asideText","halfAside","primaryAction","secondaryAction","hasContent","clampWidth","colorMode","valign","span","secondary","ContactView","Avatar","img","getGlobals","imagePlaceholderBg","Description","StyledIntro","IntroBlock","hasDecorator","StyledContactBox","avatar","src","alt","getGridWidth","cols","NewsletterWrapper","templateObject_7","Badge","templateObject_8","CallToAction$1","contact","badge","hasNewsletter","newsFormMain","useContext","ThemeContext","isCentered","SolidView","cardColor","hasLink","css","ImageView","imageTextGradient","StyledImage","Image","hasIcon","TextContainer","templateObject_9","Footer","SubLabel","templateObject_11","templateObject_12","CardLink","templateObject_13","Card","subLabel","image","decorator","CardView","defaultCardColor","coverSpace","ratios","w","h","templateObject_14","CardItem","templateObject_15","isEqual","threeCols","CardList$1","maxThreeCols","clamp","num","min","max","Math","Images","BackgroundImg","ForegroundContainer","hasTransition","hasAnim","initalValue","ForegroundImg","ForegroundOverlay","ImageLabel","ForegroundLabel","BackgroundLabel","ControlContainer","templateObject_10","Control","ComparisonSlider$1","initialValue","foregroundImg","backgroundImg","foregroundLabel","backgroundLabel","overlayColor","labelColor","dragControl","enableControlAnim","isIE","useIE","_d","slideValue","setSlideValue","_e","isHolding","setIsHolding","_f","isDragging","setIsDragging","_g","interacted","setInteracted","_h","sideOffset","setSideOffset","controlRef","useRef","useEffect","current","offsetWidth","handleInitalLoad","observer","IntersectionObserver","entries","isIntersecting","unobserve","target","rootMargin","threshold","observe","window","removeEventListener","document","readyState","addEventListener","setCurrentPos","clientX","relativeClientX","getBoundingClientRect","x","width","percentage","ev","currentTarget","onMouseMove","onMouseDown","onMouseUp","onMouseLeave","onTouchMove","touches","onTouchStart","onTouchEnd","style","left","ArrowLeftRight","clickable","IntroContainer","clampTitle","wrapper","ExternalIconHolder","withRange","PromotionCard","forwardRef","externalLinkIcon","icon","linkObj","isExternal","externalIconString","ReactDOMServer","renderToString","External","isMain","CrossPromotion$1","main","isMirrored","card","FieldSet","fieldset","Fields","fieldValidator","config","__awaiter","inputType","error","isRequired","errorMsg","test","areaValidator","selectValidator","selectedItem","datepickerValidator","single","singleSelect","singleDateError","multiDateError","locationValidator","position","fieldGroupValidator","groupType","selectValues","uploadValidator","files","StyledSection","Form","form","FieldContainer","FormFooter","Status","ActionContainer","DynamicForm$1","fields","onSubmit","submitAction","definitions","subjectLine","targetEmails","submitReponse","setSubmitResponse","initalData","initialOption","initialDates","group","initalArray_1","forEach","field","initialChecked","every","useFormik","initialValues","values","helpers","valuesAndMails","setSubmitting","response","sent","resetForm","isError","validateOnBlur","validateOnChange","validate","errors","error_1","error_2","error_3","error_4","error_5","error_6","error_7","handleSubmit","handleChange","handleBlur","setFieldTouched","validateField","submitForm","setValues","isSubmitting","touched","dirty","latestValuesRef","setField","useCallback","props","shouldValidate","fieldKeys","Object","keys","noValidate","isTouched","setTouched","Textfield","enableMemo","placeholder","onChange","onBlur","infoMessage","info","errorMessage","renderField","area","Textarea","renderAreaField","datepicker","dates","start","end","DatepickerCmp","onDataChange","minDate","maxDate","deleteAction","handleReset","ButtonGhost","Button","nextCtrlUrl","prevCtrlUrl","renderDatepickerField","location","locationData","mappedData","LocationField","initialMapCenter","zoom","customLocationControl","customToggle","customResetControl","toggleLabel","trackLocationLabel","renderLocationField","checkbox","groupData","FieldWrapper","Head","ci","Checkbox","cIndex","Messages","renderCheckboxGroupField","radio","fi","RadioButton","e","renderRadioGroupField","select","SelectDropdown","dropdownItems","filter","selectedOption","indicator","renderSelectField","upload","FileUploadCmp","uploadLabel","addBtnLabel","acceptedFormats","onUploadFiles","customUploadIcon","customDeleteIcon","renderUploadField","message","copyInverted","as","Label","generateTextField","NewsletterForm$1","customField","action","method","formRef","initialData","submit","generationProps","isDisabled","SVG","svg","Filter","ariaHidden","height","viewBox","fill","xmlns","d","TagContainer","TagWrapper","Events","FilterIcon","EventItem","ListFooter","ShowMore","itemCount","EventOverview$1","tags","events","initial","showMoreText","onTagClick","customTag","globals","filterName","eventFilterName","activeTags","selectedTags","setSelectedTags","visibleRows","setVisibleRows","targetRef","observerSupported","useObserverSupport","isMounted","useMounted","eventCount","setNewPos","useScrollTo","getFilters","filters","getUrlParams","tagsFilter","split","isValidArray","apply","paramTags","setUrlParam","join","deleteUrlParam","useUpdateEffect","handleTagClick","tag","enableToggling","prevCopy","itemIndex","filteredEvents","useMemo","filtered","hasTags","visibleEvents","_","element","entry","ceil","disconnect","filteredTags","isActive","clickHandler","preventDefault","Tag","timespan","eventDateFormat","eventTimeFormat","eventLocaleKey","getFormattedTimespan","eventTimespanFormat","duration","address","EventBlock","Pointer","EventList$1","event","tagHref","url","validUrl","URL","newParams","URLSearchParams","search","set","encodeURIComponent","toString","err","getEventFilterParams","EventTitle","Heading","EventDateTime","EventAddress","EventText","EventDetail$1","infos","hasInfos","publishedAt","formatter","allowEdgeRadius","abstract","InfoList","ImageContainer","SubTitle","Text","Fact","subTitle","showPlaceholder","FactFill","FactGrid$1","columns","facts","factCount","cardRefs","fact","FactsContainer","FactItem","hasBack","hasText","ContentBlock","FactList$1","TitleLink","copyStyle","font","getFonts","big","colorInverted","ArticleContent","Action","Feature","features","featureCount","isHalf","halign","feature","Gallery$1","images","isFull","genHeightStyles","mainIdent","genIdent","pageFlow","hasMain","mainTopIdent","hasTop","mainBottomIdent","hasBottom","fullIdent","navMainHeight","getNavHeight","getFullNavbarHeights","navMainTopHeight","navMainBottomHeight","navFullHeight","mapToSelector","idents","id","refHeight","StyledPoster","HeaderSection","HeaderSectionSmall","videoUrl","focus","kenBurnsZoom","kenBurnsZoomPoint","kenBurnsInterval","onImageChange","children","HeaderVideo","placeholderImg","HeaderKenBurns","zoomPoint","interval","HeaderPoster","bgImage","wrapperLarge","Overlay","textOnImage","bgValue","ContentMobile","Header$1","focusPoint","customImgOverlay","overlay","Fragment","ItemContainer","Items","isVisible","Item","ItemLink","IconList$1","toggle","showLessText","enableToggle","showMore","setShowMore","handleToggleClick","ratio","isToggled","additionalProps","IndexLink","LinkLabel","IconWrapper","IndexList$1","scrollToOffset","setTargetPos","useMediaQueries","topOffset","setTopOffset","handleLinkClick","getAttribute","getElementById","top","scrollY","hash","history","pushState","header","querySelector","navbarIdent","getNavbarState","navbarHeights","ArrowDown","isStackable","clampAbstract","clampText","MapSection","MapContainer","gridWidth","wrapperWhitespace","xxlarge","CardWrapper","CardContainer","seperation","padding","InfoCardView","CardHeader","ContactList","ContactListLink","AddressContainer","CompanyInfo","companyName","street","postalCode","city","country","Desc","LocationInfoCard","addressIcon","addressIconContent","LocationPin","phoneIconContent","telephone","Phone","mailIconContent","email","Mail","Controls","FylToCtrlContainer","button","Map$2","provider","attribution","center","flyToZoom","initialLocation","locations","allMarkersOnInit","fitBoundsPadding","flyToControl","controlNext","controlPrev","activeLocationId","setActiveLocationId","isDirty","setIsDirty","activeLocation","find","l","defaultMarker","anchor","sizeActive","anchorActive","getSVGData","getSVGDataImg","useLeafletMap","activeMarkerId","markers","isInteractive","onMarkerClick","isLoaded","setMapContainer","setContainer","flyToActive","showAllMarkers","goToNext","currentIndex","findIndex","newIndex","goToPrevious","geo","latitude","longitude","streetAddress","addressLocality","addressRegion","addressCountry","generateLocalBusiness","stopPropagation","move","Icons","ArrowRightGhost","TitleIcon","NavBlock","customTitleIcon","NavList$1","Seperator","isTop","AuthorContainer","Author","StyledCopy","NewsAuthorCard$1","author","ImageLink","BorderPlaceholder","Tags","PublishDate","Main","NewsCard","publishDate","newsDateFormat","newsTimeFormat","newsLocaleKey","dataSheet","News","NewsItem","getNewsFilterParams","newsFilterName","NewsOverview$1","news","currentMq","useMediaQuery","setItemsPerRow","newsCount","sheetRefs","triggerCalculation","paramRows","parseInt","filteredNews","visibleNews","NewsImages$1","IntroHead","MetaBlock","wrapperSmall","NewsIntro$1","meta","tagLink","NewsList$1","mode","slice","TableWrapper","NewsTable$1","tableItems","TableBlock","NewsText$1","VideoControls","ConsentOverlay","ConsentContent","ConsentText","Iframe","iframe","VideoCard","embedId","playIcon","consentText","consentAction","setIsActive","showConsent","setShowConsent","handleConsentActionClick","cookie","getCookie","isAccepted","videoCookieTypeRestrictions","reduce","acc","data","types","Play","allow","handleClick","consentProps","selectors","buttons","attribute","class","NumberContainer","Number","Callout","stringLength","IconBlock","number","ContentContainer","NumberList$1","section","Parallax","hAlign","contentWidth","Container","figure","verticallyCentered","imageTextGradientCentered","Intro","Poster$1","horizontallyCentered","maxTitleLines","maxTextLines","ItemList","ItemBlock","ListHead","Price","PriceBlock","price","PriceList$1","isHighlighted","PriceTag","hasBackground","PriceTable$1","priceTagCount","Source","Quote$1","source","citeUrl","cite","ImageWrapper","SimpleImage$1","Cards","FollowUs","InstagramIcon","SocialWall$1","hashTag","followUs","socialIcon","Instagram","Table$1","Figure","Video","VideoBlock","isSplitted","mapToTeaserBgMode","preventSplit","Teaser$1","video","hasVideo","urls","viewRef","setLoaded","isVideoActive","setVideoActive","isObserverSupported","viewEl","muted","autoPlay","loop","onCanPlayThrough","aspectRatios","titleHyphens","getGridColOfContent","WideVideo","WideImage","TeaserWide$1","TimelineBlock","isSwitched","TimelineText","ItemTitle","ItemTextBlock","Timeline$1","targetRefs","setTargetRefs","observerRef","activeItem","setActiveItem","t","Array","createRef","VideoContainer","RawVideo$1","videoUrls","autoplay","isStarted","setIsStarted","controls","JobInfos","JobCard","jobTitle","employmentTypes","totalLocations","allLocationsLabel","modelIcon","locationIcon","hasEmploymentType","validLocations","loc","hasLocations","locationText","hyphens","ClockFilled","escapeRegExp","replace","FilterField","removeMatchIntersections","m","prioItem","filterJobs","filterQuery","jobs","prioList","job","exactNameMatches","RegExp","jobExactTitleFilter","match","priority","nameMatches","preparedQuery","toLowerCase","perparedJobTitle","jobSoftTitleFilter","locationNameMatches","regex","preparedName","jobLocationNameFilter","typeMatches","preparedText","jobTypesFilter","JobList$1","totalJobLocations","allJobLocationsLabel","initialFilterQuery","filterPlaceholder","hasFilter","filterSubmitIcon","filterClearIcon","jobFilterName","jobCount","setFilterQuery","jobMatches","queryParts","part","trim","searchMatches","queryParts_1","_i","intersectionIndex","sItem","intersections","matches_1","getFilter","urlFilter","submitIcon","clearIcon","sort","a","b","ArticleHead","JobArticle$1","organization","datePosted","jsonLd","jobDesc","directApply","el","toISOString","employmentType","hiringOrganization","logo","jobLocation","generateJob","Facts","POIFacts","PoiTitle","PoiText","PointOfInterestDetail$1","customFact","filterPois","pois","poi","poiExactNameFilter","poiSoftNameFilter","factMatches","preparedFact","poiFactFilter","infoMatches","poiInfoFilter","descMatches","shortDescription","preparedDesc","poiDescriptionFilter","PointOfInterestOverview$1","enableFiltering","poiFilterName","poiMatches","POICard","PoiMapSection","isLarge","Map","RequestGeolocationBtn","CardStage","MapCardView","MapCardHeader","CloseBtn","MapCard","customClose","onClose","Cross","PointOfInterestMap$1","initialPointOfInterest","restrictToMarkersArea","showOwnPosition","currentPosMarker","customCardClose","customLocationRequest","activePoiId","setActivePoiId","activePOI","_j","useGeolocation","isGeolocationSupported","isSupported","resetGeolocation","mapMarkers","defaultPosMarker","CurrentLocation","coords","_k","showZoomControls","zoomControlPosition","markerId","flyToPosition","getCurrentZoom","currentZoom","zoom_1","zoom_2","MyLocation","LinkListView","BottomLinkItem","StyledLink","FooterBottomGrid$1","LinkList","links","brandIcon","brand","Bdot","LeftWrapper","FooterBottomBar","languages","linksLeft","linksRight","languageIcon","FooterBottomGrid","LanguageSwitcher","langs","LanguageIcon","textSize","FooterSection","MainView","ColTitle","LinkItem","CustomCol","FootNote","Footer$1","siteLinks","customColumn","footNote","bottomBar","bottomLinksLeft","bottomLinksRight","customCol","bottom","hasBottomBar","clampSolidBg","ii","toRight","FooterArticle","socialTitle","socials","SocialList","moveRatio","direction","setIsLoaded","yTransform","setYTransform","cRef","setContainerRef","parallaxRef","isNaN","prevEl","previousElementSibling","bgIdent","dataset","stackIdent","setAttribute","handleScroll","containerPos","transform"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sections.js","sources":["../src/utils/filters.ts","../src/components/sections/Accordion.tsx","../src/utils/structuredData.tsx","../src/components/blocks/Alert.tsx","../src/components/sections/AlertList.tsx","../src/components/sections/Article.tsx","../src/components/sections/CallToAction.tsx","../src/components/sections/CardList.tsx","../src/components/sections/ComparisonSlider.tsx","../src/components/blocks/PromotionCard.tsx","../src/components/sections/CrossPromotion.tsx","../src/components/sections/form/renderer/fieldGroupRenderer.tsx","../src/components/sections/form/validators/fieldValidator.ts","../src/components/sections/form/validators/areaValidator.ts","../src/components/sections/form/validators/selectValidator.ts","../src/components/sections/form/validators/datepickerValidator.ts","../src/components/sections/form/validators/locationValidator.ts","../src/components/sections/form/validators/fieldGroupValidator.ts","../src/components/sections/form/validators/uploadValidator.ts","../src/components/sections/form/DynamicForm.tsx","../src/components/sections/form/renderer/fieldRenderer.tsx","../src/components/sections/form/renderer/areaRenderer.tsx","../src/components/sections/form/renderer/datepickerRenderer.tsx","../src/components/sections/form/renderer/locationRenderer.tsx","../src/components/sections/form/renderer/selectRenderer.tsx","../src/components/sections/form/renderer/uploadRenderer.tsx","../src/components/sections/NewsletterForm.tsx","../src/components/sections/events/EventOverview.tsx","../src/components/sections/events/EventList.tsx","../src/components/sections/events/EventDetail.tsx","../src/components/blocks/Fact.tsx","../src/components/sections/FactGrid.tsx","../src/components/sections/FactList.tsx","../src/components/blocks/Feature.tsx","../src/components/sections/FeatureList.tsx","../src/components/sections/Gallery.tsx","../src/components/sections/header/Header.tsx","../src/components/sections/IconList.tsx","../src/components/sections/IndexList.tsx","../src/components/sections/Intro.tsx","../src/components/sections/Map.tsx","../src/components/blocks/NavBlock.tsx","../src/components/sections/NavList.tsx","../src/components/sections/NumberList.tsx","../src/components/sections/ParallaxBackground.tsx","../src/components/sections/Poster.tsx","../src/components/sections/PriceList.tsx","../src/components/blocks/PriceTag.tsx","../src/components/sections/PriceTable.tsx","../src/components/sections/Quote.tsx","../src/components/sections/SimpleImage.tsx","../src/components/sections/SocialWall.tsx","../src/components/sections/Table.tsx","../src/components/sections/Teaser.tsx","../src/components/sections/TeaserWide.tsx","../src/components/sections/Timeline.tsx","../src/components/sections/Video.tsx","../src/components/sections/RawVideo.tsx","../src/components/blocks/JobCard.tsx","../src/utils/escape.ts","../src/components/sections/jobs/JobList.tsx","../src/components/sections/jobs/JobArticle.tsx","../src/components/sections/pois/PointOfInterestDetail.tsx","../src/components/sections/pois/PointOfInterestOverview.tsx","../src/components/sections/pois/PointOfInterestMap.tsx"],"sourcesContent":["export const distinct = <T>(value: T, index: number, array: T[]) => {\n return array.indexOf(value) === index;\n};\n","import Plus from 'components/base/icons/Plus';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport React from 'react';\nimport styled from 'styled-components';\nimport { spacings, getColors as color, mq } from 'utils/styles';\nimport Minus from 'components/base/icons/Minus';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { generateFAQ } from 'utils/structuredData';\nimport Grid, { gridSettings } from 'components/base/Grid';\n\nconst AccordionContainer = styled.div`\n margin: 0;\n padding: 0;\n\n & > * + * {\n margin-top: ${spacings.nudge}px;\n }\n`;\n\nconst View = styled.details``;\n\nconst AccordionHead = styled.summary<{\n isInverted?: boolean;\n hasBg?: boolean;\n}>`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n\n padding: ${spacings.nudge * 2}px;\n margin: 0;\n border: none;\n outline: none;\n background: none;\n user-select: none;\n list-style: none;\n\n background: ${({ isInverted, hasBg, theme }) =>\n isInverted || hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n\n cursor: pointer;\n transition: background 0.2s ease-in-out;\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 3}px;\n }\n\n &::-webkit-details-marker {\n display: none;\n }\n\n &::marker {\n display: none;\n }\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n background: ${({ theme, isInverted, hasBg }) =>\n isInverted || hasBg\n ? color(theme).elementBg.lightHover\n : color(theme).elementBg.mediumHover};\n }\n }\n\n &:focus {\n background: ${({ theme, isInverted, hasBg }) =>\n isInverted || hasBg\n ? color(theme).elementBg.lightHover\n : color(theme).elementBg.mediumHover};\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n }\n`;\n\nconst Column = styled(Copy)`\n flex: 1 1 0;\n`;\n\nconst AccordionText = styled.div<{\n isInverted?: boolean;\n hasBg?: boolean;\n hasAside?: boolean;\n}>`\n display: flex;\n flex-direction: column;\n padding: ${spacings.nudge * 2}px;\n margin-top: 2px;\n background: ${({ isInverted, hasBg, theme }) =>\n isInverted || hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n\n & > * {\n max-width: 880px;\n }\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n flex-direction: row;\n\n & > * + * {\n margin-top: 0px;\n margin-left: ${gridSettings.gutter}px;\n }\n }\n`;\n\ninterface AccordionItem {\n label?: string;\n text?: string;\n aside?: string;\n}\n\nconst AccordionBlock: React.FC<\n AccordionItem & {\n isSelected?: boolean;\n onClick?: () => void;\n isInverted?: boolean;\n hasBg?: boolean;\n itemIcon?: (props: { isSelected: boolean }) => React.ReactNode;\n className?: string;\n }\n> = ({\n label,\n text,\n aside,\n isSelected,\n onClick,\n hasBg,\n isInverted,\n itemIcon,\n className,\n}) => {\n const { colors } = useLibTheme();\n\n return (\n <View open={isSelected} onToggle={onClick} className={className}>\n <AccordionHead isInverted={isInverted} hasBg={hasBg}>\n <Copy renderAs=\"span\" size=\"big\" type=\"copy-b\">\n {label}\n </Copy>\n <span>\n {itemIcon ? (\n itemIcon({ isSelected: isSelected || false })\n ) : isSelected ? (\n <Minus iconColor={colors.text.default} />\n ) : (\n <Plus iconColor={colors.text.default} />\n )}\n </span>\n </AccordionHead>\n <AccordionText\n isInverted={isInverted}\n hasBg={hasBg}\n hasAside={!!aside}\n >\n {text && <Column type=\"copy\" innerHTML={text} />}\n {aside && <Column type=\"copy\" innerHTML={aside} />}\n </AccordionText>\n </View>\n );\n};\n\nconst Accordion: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of accordion items */\n items?: AccordionItem[];\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Function to inject custom item state icon */\n itemIcon?: (props: { isSelected: boolean }) => React.ReactNode;\n}> = ({ anchorId, items, bgMode, itemIcon }) => {\n const [currentItems, setCurrentItems] = React.useState<number[]>([]);\n\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n {items && generateFAQ(items)}\n <Wrapper addWhitespace>\n <Grid.Row gutter={0}>\n <Grid.Col>\n <AccordionContainer aria-label=\"Accordion Control Group Buttons\">\n {items?.map(({ label, text, aside }, i) => {\n const isSelected =\n currentItems.indexOf(i) !== -1;\n return (\n <AccordionBlock\n key={`${label}_${i}`}\n isSelected={isSelected}\n label={label}\n text={text}\n aside={aside}\n onClick={() => {\n setCurrentItems((prev) => {\n const copy = [...prev];\n const index = copy.indexOf(i);\n if (index === -1) {\n copy.push(i);\n } else {\n copy.splice(index, 1);\n }\n return copy;\n });\n }}\n isInverted={isInverted}\n hasBg={hasBg}\n itemIcon={itemIcon}\n />\n );\n })}\n </AccordionContainer>\n </Grid.Col>\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const AccordionComponent = Accordion;\nexport default withLibTheme(Accordion);\n","import React from 'react';\nimport { JsonLd } from 'react-schemaorg';\nimport { MapLocation } from 'components/sections/Map';\nimport { FAQPage, JobPosting, LocalBusiness, Place } from 'schema-dts';\nimport { OrganizationData } from 'components/sections/jobs/JobArticle';\nimport { distinct } from './filters';\nimport { JobLocation } from 'components/blocks/JobCard';\n\nexport const generateLocalBusiness = (locations: MapLocation[]) => {\n return locations?.map(\n ({ position, address, contact, companyName, image }, i) => {\n if (!companyName) return '';\n return (\n <JsonLd<LocalBusiness>\n key={i}\n item={{\n '@context': 'https://schema.org',\n '@type': 'LocalBusiness',\n name: companyName,\n\n geo: {\n '@type': 'GeoCoordinates',\n name: 'Coordinates',\n latitude: position[0],\n longitude: position[1],\n },\n\n address: {\n '@type': 'PostalAddress',\n streetAddress: address?.street,\n addressLocality: address?.city,\n addressRegion: address?.city,\n postalCode: address?.postalCode,\n addressCountry: address?.country,\n },\n\n image: image || [],\n\n telephone: `${contact?.telephone?.label}`,\n\n email: `${contact?.email?.label}`,\n }}\n />\n );\n }\n );\n};\n\nexport const generateFAQ = (\n items: {\n label?: string;\n text?: string;\n aside?: string;\n hasColumns?: boolean;\n }[]\n) => {\n return (\n <JsonLd<FAQPage>\n item={{\n '@context': 'https://schema.org',\n '@type': 'FAQPage',\n mainEntity: items.map(({ label, text }) => {\n return {\n '@type': 'Question',\n name: label,\n acceptedAnswer: {\n '@type': 'Answer',\n text: text,\n },\n };\n }),\n }}\n />\n );\n};\n\nexport type StructuredEmploymentType =\n | 'FULL_TIME'\n | 'PART_TIME'\n | 'CONTRACTOR'\n | 'TEMPORARY'\n | 'INTERN'\n | 'VOLUNTEER'\n | 'PER_DIEM'\n | 'OTHER';\n\nexport const generateJob = ({\n jobTitle,\n jobDesc,\n organization,\n directApply,\n locations,\n employmentTypes,\n datePosted,\n}: {\n jobTitle: string;\n jobDesc?: string;\n organization?: OrganizationData;\n directApply?: boolean;\n locations?: JobLocation[];\n employmentTypes?: StructuredEmploymentType[];\n datePosted?: Date;\n}) => {\n return (\n <JsonLd<JobPosting>\n item={{\n '@context': 'https://schema.org',\n '@type': 'JobPosting',\n title: jobTitle,\n description: jobDesc,\n datePosted: datePosted?.toISOString(),\n employmentType: employmentTypes?.filter(distinct),\n hiringOrganization: {\n '@type': 'Organization',\n name: organization?.name,\n url: organization?.url\n ? encodeURIComponent(organization?.url)\n : '',\n logo: organization?.logo,\n telephone: organization?.telephone,\n email: organization?.email,\n address: organization?.address?.streetAddress\n ? {\n '@type': 'PostalAddress',\n streetAddress:\n organization?.address?.streetAddress,\n addressLocality:\n organization?.address?.addressLocality,\n postalCode: organization?.address?.postalCode,\n addressCountry:\n organization?.address?.addressCountry,\n }\n : undefined,\n },\n jobLocation: locations?.map<Place>((loc) => ({\n '@type': 'Place',\n address: {\n '@type': 'PostalAddress',\n addressLocality: loc.addressLocality || loc.name,\n streetAddress: loc.streetAddress,\n addressRegion: loc.addressRegion,\n postalCode: loc.postalCode,\n addressCountry: loc.addressCountry,\n },\n })),\n directApply: directApply,\n }}\n />\n );\n};\n","import Copy from 'components/typography/Copy';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport React from 'react';\nimport styled from 'styled-components';\nimport {\n getColors as color,\n getGlobals as global,\n spacings,\n} from 'utils/styles';\nimport StatusFormatter from '../../utils/statusFormatter';\nimport Info from '../base/icons/Info';\n\nconst View = styled.div<{ isInverted?: boolean }>`\n display: -ms-grid;\n display: grid;\n\n -ms-grid-columns: min-content 1fr;\n grid-template-columns: min-content 1fr;\n -ms-grid-rows: min-content 1fr;\n grid-auto-rows: min-content 1fr;\n\n text-decoration: none;\n\n position: relative;\n border: 2px solid\n ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n\n color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n\n padding: ${spacings.nudge * 3}px;\n\n text-align: left;\n width: 100%;\n cursor: pointer;\n\n transition: color ease-in-out 0.2s, border 0.2s ease-in-out;\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n border: 2px solid\n ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.invertedHover\n : color(theme).primary.hover};\n color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.invertedHover\n : color(theme).primary.hover};\n }\n }\n`;\n\nconst Icon = styled.div`\n display: flex;\n align-items: center;\n\n & > * {\n height: 48px;\n width: 48px;\n }\n`;\n\nconst MainLabel = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst Content = styled.div`\n margin-top: ${spacings.nudge}px;\n\n & > * + * {\n margin-top: ${spacings.nudge}px;\n }\n`;\n\nconst Title = styled(Copy)`\n display: inline-block;\n`;\n\nconst ViewLink = styled(Link)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n && {\n margin: 0;\n }\n\n &:focus-within {\n outline: dotted 2px\n ${({ isInverted, theme }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n outline-offset: 4px;\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n box-shadow: none;\n }\n`;\n\nexport interface AlertProps {\n /** Invert colors for use on dark backgrounds */\n isInverted?: boolean;\n\n /** Alert title text */\n title?: string;\n\n /** Alert date */\n date?: Date;\n\n /** Additional description text (richtext) */\n description?: string;\n\n /** Alert link that covers hole element */\n link?: LinkProps;\n\n /** Function to inject custom alert icon */\n customIcon?: (props: { isInverted?: boolean }) => React.ReactNode;\n}\n\nconst Alert: React.FC<AlertProps & { className?: string }> = ({\n isInverted,\n title,\n date,\n description,\n link,\n customIcon,\n className,\n}) => {\n let formattedDate = '';\n if (date) {\n const formatter = new StatusFormatter(\n date.getTime(),\n '',\n 'dd. MMMM yyyy',\n 'hh:mm',\n 'de'\n );\n formattedDate = formatter.getFormattedDate();\n }\n\n return (\n <View isInverted={isInverted} data-sheet=\"alert\" className={className}>\n <Icon>{customIcon ? customIcon({ isInverted }) : <Info />}</Icon>\n <MainLabel>\n {title && (\n <Title textColor=\"inherit\" size=\"medium\" type=\"copy-b\">\n {title}\n </Title>\n )}\n </MainLabel>\n <span />\n <Content>\n {description && (\n <Copy\n isInverted={isInverted}\n size=\"small\"\n innerHTML={description}\n />\n )}\n {date && (\n <Copy size=\"small\" isInverted={isInverted}>\n {formattedDate}\n </Copy>\n )}\n </Content>\n {link && (\n <ViewLink\n {...link}\n ariaLabel={link?.href ? title : undefined}\n />\n )}\n </View>\n );\n};\n\nexport default Alert;\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Alert, { AlertProps } from '../blocks/Alert';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\n\nconst List = styled.ul`\n margin-top: -${spacings.nudge * 2}px;\n margin-left: -${spacings.nudge * 2}px;\n padding: 0;\n list-style: none;\n\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n justify-content: center;\n flex-wrap: wrap;\n\n @media ${mq.medium} {\n margin-top: -${spacings.spacer}px;\n margin-left: -${spacings.spacer}px;\n }\n`;\n\nconst ListItem = styled.li<{ itemsPerRow: number }>`\n padding-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge * 2}px;\n flex: 1 1 100%;\n\n @media ${mq.medium} {\n flex: 0 1 50%;\n max-width: 50%;\n\n padding-top: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n }\n\n @media ${mq.large} {\n flex: 0 1 ${({ itemsPerRow }) => (1 / itemsPerRow) * 100}%;\n max-width: 600px;\n\n padding-top: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n }\n`;\n\nconst AlertList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of alert items */\n items?: Pick<AlertProps, 'title' | 'date' | 'description' | 'link'>[];\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Function to inject custom alert icon */\n customIcon?: (props: { isInverted?: boolean }) => React.ReactNode;\n}> = ({ anchorId, items, bgMode, customIcon }) => {\n const { colors } = useLibTheme();\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n const alertCount = items?.length || 0;\n const itemsPerRow = alertCount % 3 === 1 || alertCount === 2 ? 2 : 3;\n\n const { sheetRefs: alertRefs } = useEqualSheetHeight<HTMLLIElement>({\n listLength: alertCount,\n identifiers: ['[data-sheet=\"alert\"]'],\n responsive: {\n small: 1,\n medium: 2,\n semilarge: 2,\n large: itemsPerRow,\n xlarge: itemsPerRow,\n },\n });\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <List>\n {items?.map((item, i) => (\n <ListItem\n key={i}\n itemsPerRow={itemsPerRow}\n ref={alertRefs[i]}\n >\n <Alert\n {...item}\n isInverted={isInverted}\n customIcon={customIcon}\n />\n </ListItem>\n ))}\n </List>\n </Wrapper>\n </Section>\n );\n};\n\nexport const AlertListComponent = AlertList;\nexport default withLibTheme(AlertList);\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Title, { TitleSize } from 'components/blocks/Title';\nimport Copy from 'components/typography/Copy';\nimport Wrapper from 'components/base/Wrapper';\nimport { spacings, mq } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Grid from 'components/base/Grid';\n\nconst StyledTitle = styled(Title)`\n &:not(:last-child) {\n margin-bottom: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n max-width: 880px;\n }\n`;\n\nconst ContentText = styled(Copy)`\n text-align: left;\n`;\n\nconst StyledActions = styled(Actions)`\n margin-top: ${spacings.spacer}px;\n`;\n\nconst Article: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n /** Main title text */\n title?: string;\n /** Main title HTML tag type (h2, h3, h4...) */\n titleAs?: HeadlineTag;\n /** Main title size */\n titleSize?: TitleSize;\n /** Superior title that stands above main title */\n superTitle?: string;\n /** Superior title HTML tag type (h3, h4 ...) */\n superTitleAs?: HeadlineTag;\n /** Bold intro text underneath the title (limited richtext capabilites) */\n intro?: string;\n /** Main article richtext */\n text?: string;\n /** Additional article richtext in a second column */\n asideText?: string;\n /** Controls width of left text column (8/12 or 6/12) */\n halfAside?: boolean;\n\n /** Section background */\n bgMode?: 'full' | 'splitted' | 'inverted';\n\n /** Function to inject custom primary button */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n /** Function to inject custom secondary button */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n anchorId,\n title,\n titleAs = 'h2',\n titleSize = 'heading-2',\n superTitle,\n superTitleAs,\n intro,\n text,\n asideText,\n halfAside,\n bgMode,\n primaryAction,\n secondaryAction,\n}) => {\n const { colors } = useLibTheme();\n\n const isInverted = bgMode === 'inverted';\n const hasContent = intro || text || asideText;\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {(title || superTitle) && (\n <StyledTitle\n title={title}\n titleAs={titleAs}\n titleSize={titleSize}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n )}\n {hasContent && (\n <Grid.Row valign=\"top\">\n <Grid.Col\n semilarge={{ span: halfAside ? 6 / 12 : 8 / 12 }}\n >\n {intro && (\n <ContentText\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n />\n )}\n {text && (\n <ContentText\n type=\"copy\"\n isInverted={isInverted}\n innerHTML={text}\n />\n )}\n </Grid.Col>\n {asideText && (\n <Grid.Col\n semilarge={{\n span: halfAside ? 6 / 12 : 4 / 12,\n }}\n >\n <ContentText\n type=\"copy\"\n isInverted={isInverted}\n innerHTML={asideText}\n />\n </Grid.Col>\n )}\n </Grid.Row>\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const ArticleComponent = Article;\nexport default withLibTheme(Article);\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n getColors as color,\n getGlobals as global,\n mq,\n spacings,\n} from 'utils/styles';\nimport Copy from 'components/typography/Copy';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport IntroBlock from 'components/blocks/IntroBlock';\nimport Actions from 'components/blocks/Actions';\nimport { withLibTheme } from 'utils/LibThemeProvider';\nimport { gridSettings, getGridWidth } from 'components/base/Grid';\n\nconst ContactView = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n margin: 0 auto;\n width: 100%;\n\n text-align: left;\n hyphens: auto;\n overflow-wrap: break-word;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n flex-direction: row;\n\n & > * + * {\n margin-top: 0px;\n margin-left: ${gridSettings.gutter}px;\n }\n }\n`;\n\nconst Avatar = styled.img<{ isInverted?: boolean }>`\n align-self: center;\n display: block;\n border: solid 1px transparent;\n border-radius: 50%;\n width: 180px;\n height: 180px;\n\n background: ${({ theme, isInverted }) =>\n isInverted\n ? global(theme).sections.imagePlaceholderBg.inverted\n : global(theme).sections.imagePlaceholderBg.default};\n\n @media ${mq.semilarge} {\n display: block;\n width: 190px;\n height: 190px;\n }\n`;\n\nconst Description = styled(Copy)`\n text-align: center;\n\n .icon-label {\n flex-direction: column;\n }\n\n .icon-label > * + * {\n margin-left: 0;\n margin-top: ${spacings.nudge * 2}px;\n }\n\n & > * {\n justify-content: center;\n }\n\n @media ${mq.semilarge} {\n text-align: left;\n\n & > * {\n justify-content: left;\n }\n\n .icon-label {\n flex-direction: row;\n }\n\n .icon-label > * + * {\n margin-left: ${spacings.nudge * 2}px;\n margin-top: 0;\n }\n }\n`;\n\nexport interface ContactBoxProps {\n isInverted?: boolean;\n description?: string;\n avatar?: { src: string; alt: string };\n}\n\nconst ContactBox: FC<ContactBoxProps & { className?: string }> = ({\n isInverted,\n description,\n avatar,\n className,\n}) => {\n return (\n <ContactView className={className}>\n <Avatar\n src={avatar?.src}\n alt={avatar?.alt}\n isInverted={isInverted}\n />\n {description && (\n <Description\n type=\"copy\"\n isInverted={isInverted}\n innerHTML={description}\n />\n )}\n </ContactView>\n );\n};\n\nconst StyledIntro = styled(IntroBlock)<{ hasDecorator?: boolean }>`\n max-width: 880px;\n margin-right: auto;\n margin-left: auto;\n\n @media ${mq.xlarge} {\n & > *:first-child {\n min-height: ${({ hasDecorator }) => hasDecorator && '110px'};\n }\n }\n`;\n\nconst StyledContactBox = styled(ContactBox)`\n margin-top: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n max-width: ${getGridWidth({ cols: 8 })};\n margin-right: auto;\n margin-left: auto;\n }\n\n @media ${mq.large} {\n max-width: ${getGridWidth({ cols: 6 })};\n }\n`;\n\nconst StyledActions = styled(Actions)`\n margin-top: ${spacings.spacer}px;\n\n @media ${mq.medium} {\n display: block;\n text-align: center;\n }\n`;\n\nconst NewsletterWrapper = styled.div`\n width: 100%;\n margin: 0 auto;\n margin-top: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n max-width: 400px;\n }\n`;\n\nconst Badge = styled.div`\n display: none;\n position: relative;\n height: 241px;\n width: 241px;\n margin-left: auto;\n margin-bottom: -135px;\n z-index: 3;\n\n @media ${mq.xlarge} {\n display: block;\n margin-right: ${1440 * (1 / 28) + 'px'};\n }\n`;\n\nexport const CallToAction: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n /** Main title text */\n title?: string;\n /** Main title HTML tag type (h2, h3, h4...) */\n titleAs?: HeadlineTag;\n /** Superior title that stands above main title */\n superTitle?: string;\n /** Superior title HTML tag type (h3, h4 ...) */\n superTitleAs?: HeadlineTag;\n /** Bold text underneath the title (limited richtext capabilites) */\n text?: string;\n /** Props for contact area */\n contact?: ContactBoxProps;\n /** Show Newsletter defined by inject function newsFormMain. Only visible if React node is defined! */\n hasNewsletter?: boolean;\n /** Badge decorator visible only on large screens */\n badge?: React.ReactNode;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Function to inject custom primary button */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n /** Function to inject custom secondary button */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n /** Function to inject newsletter form */\n newsFormMain?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n anchorId,\n title,\n titleAs = 'h2',\n superTitle,\n superTitleAs,\n text,\n contact,\n badge,\n primaryAction,\n secondaryAction,\n hasNewsletter,\n newsFormMain,\n bgMode,\n}) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? color(theme).sectionBg.dark\n : color(theme).sectionBg.medium\n }\n bgMode={bgMode ? mapToBgMode(bgMode, true) : 'full'}\n >\n <Wrapper addWhitespace clampWidth=\"normal\">\n {badge && <Badge>{badge}</Badge>}\n {title && (\n <StyledIntro\n isCentered\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n hasDecorator={!!badge}\n text={text}\n />\n )}\n\n {contact && (\n <StyledContactBox\n isInverted={isInverted}\n description={contact.description}\n avatar={contact.avatar}\n />\n )}\n {newsFormMain && hasNewsletter && (\n <NewsletterWrapper>\n {newsFormMain(isInverted)}\n </NewsletterWrapper>\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const CallToActionComponent = CallToAction;\nexport default withLibTheme(CallToAction);\n","import Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Copy from 'components/typography/Copy';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport {\n spacings,\n getColors as color,\n mq,\n getGlobals as global,\n} from 'utils/styles';\n\nconst View = styled.div<{\n isInverted?: boolean;\n cardColor?: string;\n hasLink?: boolean;\n}>`\n display: flex;\n flex-direction: column;\n justify-content: center;\n position: relative;\n color: ${({ theme }) => color(theme).text.inverted};\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n min-height: 110px;\n\n overflow: hidden;\n\n @media ${mq.medium} {\n display: block;\n padding-top: 85%;\n }\n`;\n\nconst SolidView = styled(View)`\n background-color: ${({ theme, isInverted, cardColor }) =>\n cardColor\n ? cardColor\n : isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n\n transition: background-color 0.2s ease-in-out, box-shadow 0.2s ease-in-out;\n\n ${({ hasLink }) =>\n hasLink &&\n css`\n cursor: pointer;\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n box-shadow: 0 2px 24px 0 rgba(0, 0, 0, 0.35);\n }\n }\n `}\n`;\n\nconst ImageView = styled(View)`\n transition: box-shadow 0.2s ease-in-out;\n\n ${({ hasLink }) =>\n hasLink &&\n css`\n @media (hover: hover) and (pointer: fine) {\n cursor: pointer;\n\n img {\n -webkit-backface-visibility: hidden;\n -ms-transform: translateZ(0); /* IE 9 */\n -webkit-transform: translateZ(\n 0\n ); /* Chrome, Safari, Opera */\n transform: translateZ(0);\n transform-origin: center;\n transition: transform 0.2s ease-in-out;\n }\n\n &:hover {\n box-shadow: 0 2px 24px 0 rgba(0, 0, 0, 0.35);\n\n img {\n transform: scale(1.03);\n }\n }\n }\n `}\n\n &:after {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: ${({ theme }) => global(theme).sections.imageTextGradient};\n pointer-events: none;\n }\n\n @media ${mq.medium} {\n padding-top: 0;\n }\n`;\n\nconst StyledImage = styled(Image)`\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n\n display: block;\n width: 100%;\n height: 100%;\n\n object-fit: cover;\n object-position: center;\n\n @media ${mq.medium} {\n position: relative;\n }\n`;\n\nconst Content = styled.div<{ hasIcon?: boolean }>`\n z-index: 1;\n\n padding: ${spacings.nudge * 3}px;\n\n display: flex;\n flex-direction: row;\n align-items: center;\n\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: hidden;\n\n display: flex;\n flex-direction: ${({ hasIcon }) => (hasIcon ? 'column' : 'row')};\n justify-content: space-between;\n align-items: ${({ hasIcon }) => (hasIcon ? 'flex-start' : 'flex-end')};\n\n & > * + * {\n margin-left: 0;\n }\n }\n`;\n\nconst TextContainer = styled.div`\n width: 100%;\n overflow: hidden;\n\n & > * + * {\n margin-top: ${spacings.nudge / 2}px;\n }\n`;\n\nconst Title = styled(Copy)`\n display: inline-block;\n max-width: 100%;\n\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n text-overflow: ellipsis;\n overflow: hidden;\n`;\n\nconst Footer = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n & > * + * {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst SubLabel = styled(Copy)`\n display: inline-block;\n\n display: -webkit-box;\n -webkit-line-clamp: 1;\n -webkit-box-orient: vertical;\n overflow: hidden;\n`;\n\nconst Icon = styled.div`\n height: 100%;\n max-height: 60px;\n min-height: 40px;\n min-width: 40px;\n\n * {\n height: 100%;\n }\n\n svg,\n img {\n width: 100%;\n }\n\n @media ${mq.medium} {\n svg,\n img {\n width: auto;\n }\n }\n`;\n\nconst CardLink = styled(Link)<{ isInverted?: boolean }>`\n z-index: 1;\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n outline-color: ${({ theme }) => color(theme).primary.default};\n\n &:focus {\n border: 2px dotted ${({ theme }) => color(theme).primary.invertedHover};\n outline-offset: 4px;\n\n color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.invertedHover\n : color(theme).primary.hover};\n }\n`;\n\nexport interface CardProps {\n isInverted?: boolean;\n title?: string;\n subLabel?: string;\n image?: ImageProps;\n link?: LinkProps;\n decorator?: (props: { isInverted?: boolean }) => React.ReactNode;\n cardColor?: string;\n customIcon?: (props: { isInverted?: boolean }) => React.ReactNode;\n}\n\nconst Card: React.FC<\n Omit<CardProps, 'coverSpace' | 'ratios'> & {\n className?: string;\n }\n> = ({\n isInverted,\n title,\n subLabel,\n image,\n link,\n decorator,\n cardColor,\n customIcon,\n}) => {\n const { colors } = useLibTheme();\n const CardView = image && image.small ? ImageView : SolidView;\n const defaultCardColor = isInverted\n ? colors.primary.inverted\n : colors.primary.default;\n\n return (\n <CardView\n isInverted={isInverted}\n cardColor={cardColor || defaultCardColor}\n hasLink={!!link?.href}\n >\n {image?.small && (\n <StyledImage\n {...image}\n coverSpace\n isInverted={isInverted}\n ratios={{\n small: { w: 352, h: 108 },\n medium: { w: 286, h: 244 },\n }}\n />\n )}\n <Content hasIcon={!!customIcon}>\n {customIcon ? <Icon>{customIcon({})}</Icon> : ''}\n <TextContainer>\n {title && (\n <Title size=\"big\" type=\"copy\" isInverted>\n {title}\n </Title>\n )}\n {subLabel && (\n <Footer>\n <SubLabel type=\"copy-b\" size=\"big\" isInverted>\n {subLabel}\n </SubLabel>\n {decorator ? decorator({ isInverted }) : undefined}\n </Footer>\n )}\n </TextContainer>\n </Content>\n {link?.href && (\n <CardLink\n isInverted={isInverted}\n {...link}\n ariaLabel={title || undefined}\n />\n )}\n </CardView>\n );\n};\n\nconst List = styled.ul`\n padding: 0;\n margin-top: -${spacings.nudge * 2}px;\n margin-left: -${spacings.nudge * 2}px;\n list-style: none;\n\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n justify-content: center;\n flex-wrap: wrap;\n\n @media ${mq.medium} {\n margin-top: -${spacings.spacer}px;\n margin-left: -${spacings.spacer}px;\n }\n`;\n\nconst CardItem = styled.li<{ isEqual?: boolean; threeCols?: boolean }>`\n padding-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge * 2}px;\n\n width: 100%;\n\n @media ${mq.medium} {\n flex: 0 0 50%;\n max-width: 370px;\n padding-top: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n flex: 0 0 33.33%;\n }\n\n @media (min-width: 75em) {\n flex: ${({ isEqual, threeCols }) =>\n threeCols ? '0 0 33.33%' : isEqual && '0 0 25%'};\n }\n`;\n\nconst CardList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array with card item settings */\n items?: Omit<CardProps, 'decorator' | 'isInverted'>[];\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Function to inject custom decoration icon */\n decorator?: (props: { isInverted?: boolean }) => React.ReactNode;\n\n /** Force maximal three items per row */\n maxThreeCols?: boolean;\n}> = ({ anchorId, items, bgMode, decorator, maxThreeCols }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n addSeperation\n >\n <Wrapper addWhitespace>\n <List>\n {items?.map((item, i) => (\n <CardItem\n key={i}\n isEqual={items.length % 2 === 0}\n threeCols={maxThreeCols}\n >\n <Card\n {...item}\n isInverted={isInverted}\n decorator={decorator}\n />\n </CardItem>\n ))}\n </List>\n </Wrapper>\n </Section>\n );\n};\n\nexport const CardListComponent = CardList;\nexport default withLibTheme(CardList);\n","import React, { FC, useEffect, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport { getColors as color, spacings } from 'utils/styles';\nimport ArrowLeftRight from 'components/base/icons/ArrowLeftRight';\nimport Copy from 'components/typography/Copy';\nimport useIE from 'utils/useIE';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\n\nconst clamp = (num: number, min: number, max: number) => {\n return Math.min(Math.max(num, min), max);\n};\n\nconst Images = styled.div`\n position: relative;\n cursor: col-resize;\n & > * {\n pointer-events: none;\n user-select: none;\n }\n`;\n\nconst BackgroundImg = styled(Image)`\n position: relative;\n display: block;\n width: 100%;\n`;\n\nconst ForegroundContainer = styled.div<{\n hasTransition?: boolean;\n initalValue?: number;\n hasAnim?: boolean;\n}>`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 50%;\n overflow: hidden;\n transition: width ${({ hasTransition }) => (hasTransition ? 0.1 : 0)}s\n ease-in-out;\n ${({ hasAnim, initalValue }) =>\n hasAnim &&\n css`\n animation-name: ForegroundAnim;\n animation-duration: 5s;\n animation-iteration-count: 1;\n animation-play-state: ${hasAnim && 'running'};\n animation-timing-function: ease-in-out;\n @keyframes ForegroundAnim {\n 0% {\n width: ${initalValue\n ? clamp(initalValue * 100, 0, 100) + '%'\n : '50%'};\n }\n 33% {\n width: ${initalValue\n ? clamp(initalValue * 100 + 10, 0, 100) + '%'\n : '60%'};\n }\n 66% {\n width: ${initalValue\n ? clamp(initalValue * 100 - 10, 0, 100) + '%'\n : '40%'};\n }\n 100% {\n width: ${initalValue ? initalValue * 100 + '%' : '50%'};\n }\n }\n `}\n`;\n\nconst ForegroundImg = styled(Image)`\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n max-width: none;\n object-fit: cover;\n\n img {\n height: auto;\n width: auto;\n }\n`;\n\nconst ForegroundOverlay = styled.div<{ color: string }>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: ${({ color }) => color};\n`;\n\nconst ImageLabel = styled(Copy)<{ bgColor?: string }>`\n height: ${spacings.spacer}px;\n padding: ${spacings.nudge}px ${spacings.spacer}px ${spacings.spacer}px\n ${spacings.spacer}px;\n background: ${({ bgColor }) => bgColor && bgColor};\n`;\n\nconst ForegroundLabel = styled(ImageLabel)`\n position: absolute;\n bottom: ${spacings.spacer}px;\n left: ${spacings.spacer}px;\n pointer-events: none;\n white-space: nowrap;\n`;\n\nconst BackgroundLabel = styled(ImageLabel)`\n position: absolute;\n bottom: ${spacings.spacer}px;\n right: ${spacings.spacer}px;\n pointer-events: none;\n white-space: nowrap;\n`;\n\nconst ControlContainer = styled.div<{\n hasTransition?: boolean;\n hasAnim?: boolean;\n initalValue?: number;\n}>`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n transition: left ${({ hasTransition }) => (hasTransition ? 0.1 : 0)}s\n ease-in-out;\n ${({ hasAnim, initalValue }) =>\n hasAnim &&\n css`\n animation-name: ControlAnim;\n animation-duration: 5s;\n animation-iteration-count: 1;\n animation-play-state: ${hasAnim && 'running'};\n animation-timing-function: ease-in-out;\n @keyframes ControlAnim {\n 0% {\n left: ${initalValue\n ? clamp(initalValue * 100, 0, 100) + '%'\n : '50%'};\n }\n 33% {\n left: ${initalValue\n ? clamp(initalValue * 100 + 10, 0, 100) + '%'\n : '60%'};\n }\n 66% {\n left: ${initalValue\n ? clamp(initalValue * 100 - 10, 0, 100) + '%'\n : '40%'};\n }\n 100% {\n left: ${initalValue ? initalValue * 100 + '%' : '50%'};\n }\n }\n `}\n`;\n\nconst Control = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n height: 54px;\n width: 54px;\n border: solid 2px ${({ theme }) => color(theme).elementBg.light};\n border-radius: 50%;\n background-color: ${({ theme }) => color(theme).elementBg.medium};\n`;\n\nconst ComparisonSlider: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n bgMode?: 'full' | 'inverted' | 'splitted';\n initialValue?: number;\n foregroundImg?: ImageProps;\n backgroundImg?: ImageProps;\n foregroundLabel?: string;\n backgroundLabel?: string;\n overlayColor?: string;\n labelColor?: string;\n dragControl?: React.ReactNode;\n enableControlAnim?: boolean;\n}> = ({\n anchorId,\n bgMode,\n initialValue,\n foregroundImg,\n backgroundImg,\n foregroundLabel,\n backgroundLabel,\n overlayColor = 'rgba(0, 0 , 0, 0.2)',\n labelColor = 'rgba(0, 0 , 0, 0.3)',\n dragControl,\n enableControlAnim,\n}) => {\n const isIE = useIE(true);\n const [slideValue, setSlideValue] = useState<number>(\n initialValue ? Math.min(Math.max(initialValue, 0), 1) : 0.5\n );\n const [isHolding, setIsHolding] = useState<boolean>(false);\n const [isDragging, setIsDragging] = useState<boolean>(false);\n const [interacted, setInteracted] = useState<boolean>(true);\n const [sideOffset, setSideOffset] = useState<number>(0);\n const controlRef = useRef<HTMLDivElement | null>(null);\n const { colors } = useLibTheme();\n\n useEffect(() => {\n if (controlRef.current) {\n setSideOffset(controlRef.current.offsetWidth / 2);\n }\n }, []);\n\n useEffect(() => {\n const handleInitalLoad = () => {\n const options = {\n rootMargin: '0px',\n threshold: 1.0,\n };\n\n const observer = new IntersectionObserver((entries, observer) => {\n if (enableControlAnim && entries[0]?.isIntersecting) {\n // if control is first fully visible\n observer.unobserve(entries[0]?.target);\n setInteracted(false);\n }\n }, options);\n if (controlRef.current) observer.observe(controlRef.current);\n window.removeEventListener('load', handleInitalLoad);\n };\n\n // wait unitl user has scrolled once\n if (!isIE) {\n if (document.readyState === 'complete') handleInitalLoad();\n else window.addEventListener('load', handleInitalLoad);\n }\n\n return () => {\n window.removeEventListener('load', handleInitalLoad);\n };\n }, [enableControlAnim, isIE]);\n\n const setCurrentPos = (target: EventTarget & Element, clientX: number) => {\n if (target && clientX) {\n const relativeClientX = clientX - target.getBoundingClientRect().x;\n\n // check side offset\n if (\n relativeClientX >= sideOffset &&\n relativeClientX <=\n target.getBoundingClientRect().width - sideOffset\n ) {\n let percentage =\n relativeClientX / target.getBoundingClientRect().width;\n percentage = Math.min(Math.max(percentage, 0), 1);\n\n setSlideValue(percentage);\n }\n }\n };\n\n const handleClick = (ev: React.MouseEvent) => {\n const target = ev.currentTarget;\n if (target && ev.clientX) {\n setCurrentPos(target, ev.clientX);\n setInteracted(true);\n }\n };\n\n const handleMouseMove = (ev: React.MouseEvent) => {\n const target = ev.currentTarget;\n if (target && ev.clientX && isHolding) {\n setIsDragging(true);\n setInteracted(true);\n if (isDragging) setCurrentPos(target, ev.clientX);\n }\n };\n\n const handleTouchMove = (ev: React.TouchEvent<HTMLDivElement>) => {\n const target = ev.currentTarget;\n if (target && ev.touches[0]?.clientX) {\n setInteracted(true);\n setCurrentPos(target, ev.touches[0]?.clientX);\n }\n };\n\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper>\n {backgroundImg && foregroundImg && (\n <Images\n onClick={handleClick}\n onMouseMove={handleMouseMove}\n onMouseDown={() => {\n setIsDragging(false);\n setIsHolding(true);\n }}\n onMouseUp={() => {\n setIsDragging(false);\n setIsHolding(false);\n }}\n onMouseLeave={() => {\n setIsHolding(false);\n setIsDragging(false);\n }}\n onTouchMove={handleTouchMove}\n onTouchStart={() => setIsHolding(true)}\n onTouchEnd={() => setIsHolding(false)}\n >\n <BackgroundImg {...backgroundImg} />\n {backgroundLabel && (\n <BackgroundLabel\n textColor={colors.text.inverted}\n bgColor={labelColor}\n >\n {backgroundLabel}\n </BackgroundLabel>\n )}\n <ForegroundContainer\n hasTransition={!isHolding}\n hasAnim={!interacted}\n initalValue={initialValue}\n style={{ width: slideValue * 100 + '%' }}\n >\n <ForegroundImg {...foregroundImg} />\n {foregroundLabel && (\n <ForegroundLabel\n textColor={colors.text.inverted}\n bgColor={labelColor}\n >\n {foregroundLabel}\n </ForegroundLabel>\n )}\n <ForegroundOverlay color={overlayColor} />\n </ForegroundContainer>\n <ControlContainer\n ref={controlRef}\n hasTransition={!isHolding}\n hasAnim={!interacted}\n initalValue={initialValue}\n style={{ left: slideValue * 100 + '%' }}\n >\n {dragControl ? (\n dragControl\n ) : (\n <Control>\n <ArrowLeftRight\n iconColor={colors.elementBg.light}\n />\n </Control>\n )}\n </ControlContainer>\n </Images>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const ComparisonSliderComponent = ComparisonSlider;\nexport default withLibTheme(ComparisonSlider);\n","import React, { forwardRef } from 'react';\nimport ReactDOMServer from 'react-dom/server';\nimport styled, { css } from 'styled-components';\n\nimport {\n spacings,\n getGlobals as global,\n mq,\n withRange,\n getColors as color,\n} from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport Title from 'components/blocks/Title';\nimport External from 'components/base/icons/External';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst View = styled(Link)<{\n clickable?: boolean;\n}>`\n display: block;\n position: relative;\n width: 100%;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n overflow: hidden;\n outline: none;\n\n &:after {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: ${({ theme }) => global(theme).sections.imageTextGradient};\n pointer-events: none;\n }\n\n ${({ clickable, theme, isInverted }) =>\n clickable &&\n css`\n transition: box-shadow 0.2s ease-in-out;\n cursor: pointer;\n\n &:hover {\n box-shadow: 0 2px 24px 0 rgba(0, 0, 0, 0.35);\n }\n\n &:focus {\n box-shadow: 0 2px 24px 0 rgba(0, 0, 0, 0.35);\n outline: solid 2px\n ${isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n outline-offset: 4px;\n\n color: ${isInverted\n ? color(theme).primary.invertedHover\n : color(theme).primary.hover};\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n box-shadow: none;\n }\n `}\n`;\n\nconst StyledImage = styled(Image)`\n width: 100%;\n height: 100%;\n min-height: 300px;\n\n img {\n height: 100%;\n }\n`;\n\nconst IntroContainer = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: auto;\n z-index: 1;\n\n padding: ${spacings.spacer}px ${spacings.nudge * 3}px;\n\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n display: block;\n flex: 1 0 0px;\n }\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 5}px ${spacings.spacer}px;\n }\n`;\n\nconst StyledTitle = styled(Title)<{ clampTitle?: boolean }>`\n max-width: ${({ clampTitle }) =>\n clampTitle && (13 / 28) * spacings.wrapper + 'px'};\n`;\n\nconst ExternalIconHolder = styled.span`\n margin-left: ${spacings.nudge * 2}px;\n\n & > * {\n display: inline-block;\n }\n`;\n\nconst Icon = styled.div`\n ${withRange([60, 100], 'height')};\n ${withRange([60, 100], 'width')};\n\n position: absolute;\n top: ${spacings.nudge * 3}px;\n left: ${spacings.nudge * 3}px;\n\n & > * {\n ${withRange([60, 100], 'height')};\n ${withRange([60, 100], 'width')};\n }\n\n color: ${({ theme }) => color(theme).text.inverted};\n`;\n\nexport interface PromotionCardProps {\n /** Setup Card for dark backgrounds */\n isInverted?: boolean;\n /** Card image settings */\n image: ImageProps;\n /** Card title */\n title?: string;\n /** Card title HTML tag type (h2, h3, h4...) */\n titleAs?: HeadlineTag;\n /** Superior card title that stands above main title */\n superTitle?: string;\n /** Superior card title HTML tag type (h3, h4 ...) */\n superTitleAs?: HeadlineTag;\n /** Href path */\n href?: string;\n /** Advanced href options */\n link?: LinkProps;\n /** Inject custom icon that indicates an external link */\n externalLinkIcon?: React.ReactNode;\n\n /** Function to inject icon in top left corner */\n icon?: (props: { isInverted?: boolean }) => React.ReactNode;\n}\n\nconst PromotionCard = forwardRef<\n HTMLAnchorElement,\n PromotionCardProps & { className?: string }\n>(\n (\n {\n isInverted,\n image,\n title,\n titleAs,\n superTitle,\n superTitleAs,\n href,\n link,\n externalLinkIcon,\n icon,\n className,\n },\n ref\n ) => {\n // fallback for older versions\n let linkObj = link;\n if (href && !link) {\n linkObj = {\n href: href,\n isExternal: false,\n };\n }\n\n const externalIconString = ReactDOMServer.renderToString(\n <ExternalIconHolder>\n {externalLinkIcon || <External />}\n </ExternalIconHolder>\n );\n\n return (\n <View\n ref={ref}\n clickable={!!href || !!link}\n {...linkObj}\n className={className}\n >\n <StyledImage {...image} isInverted={isInverted} coverSpace />\n {icon && <Icon>{icon({ isInverted })}</Icon>}\n {title && (\n <IntroContainer>\n <StyledTitle\n colorMode=\"onImage\"\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n title={\n linkObj?.isExternal\n ? title + externalIconString\n : title\n }\n titleAs={titleAs || 'div'}\n clampTitle\n />\n </IntroContainer>\n )}\n </View>\n );\n }\n);\n\nPromotionCard.displayName = 'PromotionCard';\n\nexport default PromotionCard;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport Grid, { gridSettings } from 'components/base/Grid';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\n\nimport PromotionCard, {\n PromotionCardProps,\n} from 'components/blocks/PromotionCard';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\n\nconst Card = styled(PromotionCard)<{ isMain?: boolean }>`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n\n height: ${({ isMain }) => isMain && '100%'};\n\n flex: 1 0 auto;\n\n & + & {\n margin-top: ${gridSettings.gutter}px;\n }\n`;\n\nconst CrossPromotion: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Promotion card settings in main grid column (default: on right side). The size prop controls the width. */\n main?: Array<\n Omit<PromotionCardProps, 'externalLinkIcon' | 'isInverted'> & {\n size?: 'full' | 'half';\n }\n >;\n\n /** Promotion card settings in second grid column (default: on left side). The size prop controls the width. */\n aside?: Array<\n Omit<PromotionCardProps, 'externalLinkIcon' | 'isInverted'> & {\n size?: 'full' | 'half';\n }\n >;\n\n /** Section background */\n bgMode?: 'full' | 'inverted' | 'splitted';\n\n /** Switching order of main and aside columns */\n isMirrored?: boolean;\n\n /** Inject custom icon that indicates an external link */\n externalLinkIcon?: React.ReactNode;\n}> = ({ anchorId, main, aside, bgMode, isMirrored, externalLinkIcon }) => {\n const { colors } = useLibTheme();\n\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, false, isMirrored)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {aside ? (\n isMirrored ? (\n <Grid.Row>\n <Grid.Col semilarge={{ span: 6 / 12 }}>\n {main &&\n main.map((card, i) => (\n <Card\n key={i}\n isMain\n {...card}\n externalLinkIcon={externalLinkIcon}\n isInverted={isInverted}\n />\n ))}\n </Grid.Col>\n <Grid.Col semilarge={{ span: 6 / 12 }}>\n {aside.map((card, i) => (\n <Card\n key={i}\n {...card}\n externalLinkIcon={externalLinkIcon}\n isInverted={isInverted}\n />\n ))}\n </Grid.Col>\n </Grid.Row>\n ) : (\n <Grid.Row>\n <Grid.Col semilarge={{ span: 6 / 12 }}>\n {aside.map((card, i) => (\n <Card\n key={i}\n {...card}\n externalLinkIcon={externalLinkIcon}\n isInverted={isInverted}\n />\n ))}\n </Grid.Col>\n <Grid.Col semilarge={{ span: 6 / 12 }}>\n {main &&\n main.map((card, i) => (\n <Card\n key={i}\n isMain\n {...card}\n externalLinkIcon={externalLinkIcon}\n isInverted={isInverted}\n />\n ))}\n </Grid.Col>\n </Grid.Row>\n )\n ) : (\n main && (\n <Grid.Row>\n {main.map((card, i) => (\n <Grid.Col\n semilarge={{\n span:\n (card.size === 'half' ? 6 : 12) /\n 12,\n }}\n key={i}\n >\n <Card\n key={i}\n {...card}\n externalLinkIcon={externalLinkIcon}\n isInverted={isInverted}\n />\n </Grid.Col>\n ))}\n </Grid.Row>\n )\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const CrossPromotionComponent = CrossPromotion;\nexport default withLibTheme(CrossPromotion);\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport RadioButton from 'components/fields/Radio';\nimport { FieldGenerationProps, FieldGroup } from '../DynamicForm';\nimport FieldWrapper from 'components/fields/FormField';\nimport { spacings } from 'utils/styles';\nimport Checkbox from 'components/fields/Checkbox';\n\nconst FieldSet = styled.fieldset`\n display: block;\n border: none;\n background: none;\n outline: none;\n padding: 0;\n margin-left: 0;\n margin-right: 0;\n text-align: left;\n`;\n\nconst Fields = styled.div`\n & > * + * {\n margin-top: ${spacings.nudge}px;\n }\n`;\n\nexport const renderRadioGroupField = ({\n key,\n field,\n value,\n error,\n isTouched,\n isInverted,\n info,\n setField,\n}: FieldGenerationProps<FieldGroup>) => {\n const group = field;\n const groupData = value as string;\n\n return (\n <FieldSet key={key}>\n {key && (\n <FieldWrapper.Head\n isInverted={isInverted}\n label={key}\n isRequired={field.isRequired}\n />\n )}\n <Fields>\n {group?.fields?.map((field, fi) => (\n <RadioButton\n key={fi}\n enableMemo\n name={key}\n value={field.text}\n label={field.text}\n isInverted={isInverted}\n isSelected={\n field.text ? groupData === field.text : false\n }\n onChange={(e) => {\n if (field.text) {\n setField({\n key,\n value: e.currentTarget.value,\n });\n }\n }}\n />\n ))}\n </Fields>\n {isTouched && error && (\n <FieldWrapper.Messages\n errorMessage={error}\n infoMessage={info}\n />\n )}\n </FieldSet>\n );\n};\n\nexport const renderCheckboxGroupField = ({\n field,\n key,\n isInverted,\n value,\n isTouched,\n error,\n info,\n setTouched,\n validateField,\n setField,\n}: FieldGenerationProps<FieldGroup>) => {\n const group = field;\n const groupData = value as string[];\n\n return (\n <FieldSet key={key}>\n {key && (\n <FieldWrapper.Head\n isInverted={isInverted}\n label={key}\n isRequired={field.isRequired}\n />\n )}\n\n <Fields>\n {group?.fields?.map((field, ci) => (\n <Checkbox\n key={ci}\n enableMemo\n isInverted={isInverted}\n onChange={(ev) => {\n const value = ev.currentTarget.value;\n\n // add key to form data array if not exists. Otherwise remove it\n if (value) {\n const cIndex = groupData.indexOf(value);\n if (cIndex === -1) {\n groupData.push(value);\n } else {\n groupData.splice(cIndex, 1);\n }\n // set formik values\n setField({\n key,\n value: groupData,\n });\n setTouched(key, true);\n validateField(key);\n }\n }}\n isSelected={\n field.text\n ? groupData.indexOf(field.text) !== -1\n : false\n }\n name={key}\n value={field.text}\n label={field.text}\n />\n ))}\n </Fields>\n {isTouched && error && (\n <FieldWrapper.Messages\n errorMessage={error}\n infoMessage={info}\n />\n )}\n </FieldSet>\n );\n};\n","import { Field } from '../DynamicForm';\n\nconst fieldValidator = async (key: string, value: string, config: Field) => {\n const inputType = config.inputType;\n let error = '';\n\n if (config.isRequired && !value) {\n error = config.errorMsg || 'Required field';\n }\n\n switch (inputType) {\n case 'email':\n if (\n value &&\n !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(value)\n ) {\n error = config.errorMsg || 'Invalid Mail format';\n }\n break;\n case 'tel':\n if (value && /[A-Z]/gi.test(value)) {\n error = config.errorMsg || 'Ungültige Telefonnummer';\n }\n break;\n case 'number':\n if (value && !/^[+]?\\d+([.]\\d+)?$/gm.test(value as string)) {\n error = config.errorMsg || 'Zahlenformat ungültig';\n }\n break;\n }\n\n return error;\n};\n\nexport default fieldValidator;\n","import { Area } from '../DynamicForm';\n\nconst areaValidator = async (key: string, value: string, config: Area) => {\n let error = '';\n\n if (config.isRequired && !value) {\n error = config.errorMsg || 'Required field';\n }\n\n return error;\n};\n\nexport default areaValidator;\n","import { Select } from '../DynamicForm';\n\nconst selectValidator = async (\n key: string,\n selectedItem: string,\n config: Select\n) => {\n let error = '';\n\n if (config.isRequired && !selectedItem) {\n error = config.errorMsg || 'Required field';\n }\n\n return error;\n};\n\nexport default selectValidator;\n","import { Datepicker } from '../DynamicForm';\n\nconst datepickerValidator = async (\n key: string,\n value: [Date | null, Date | null],\n config: Datepicker\n) => {\n let error = '';\n const single = config.singleSelect;\n\n if (config.isRequired && !value) {\n error = single\n ? config.singleDateError || 'Please submit date!'\n : config.multiDateError || 'Please submit start- and enddate!';\n } else if (config.isRequired && single && !value[0]) {\n error = config.singleDateError || 'Please submit date!';\n } else if (config.isRequired && !single && (!value[0] || !value[1])) {\n error = config.multiDateError || 'Please submit start- and enddate!';\n }\n\n return error;\n};\n\nexport default datepickerValidator;\n","import { LocationData } from 'components/fields/LocationField';\nimport { Location } from '../DynamicForm';\n\nconst locationValidator = async (\n key: string,\n value: LocationData,\n config: Location\n) => {\n let error = '';\n\n if (\n config.isRequired &&\n !value.description &&\n !value.position?.[0] &&\n !value.position?.[1]\n ) {\n error = config.errorMsg || 'Please submit location info!';\n }\n\n return error;\n};\n\nexport default locationValidator;\n","import { FieldGroup } from '../DynamicForm';\n\nconst fieldGroupValidator = async (\n key: string,\n value: Array<string> | string,\n config: FieldGroup\n) => {\n const type = config.groupType;\n let error = '';\n\n if (type === 'Checkbox') {\n const selectValues = value as string[];\n if (config.isRequired && (!selectValues || selectValues?.length < 1)) {\n error = config.errorMsg || 'Please select at least one item!';\n }\n } else if (type === 'Radio') {\n if (config.isRequired && !value) {\n error = config.errorMsg || 'Selection required';\n }\n }\n return error;\n};\n\nexport default fieldGroupValidator;\n","import { FileUpload } from '../DynamicForm';\n\nconst uploadValidator = async (\n key: string,\n files: Array<File>,\n config: FileUpload\n) => {\n let error = '';\n\n if (config.isRequired && (!files || files?.length < 1)) {\n error = config.errorMsg || 'Please submit at least one file!';\n }\n\n return error;\n};\n\nexport default uploadValidator;\n","import React, { FC, useCallback, useEffect, useRef, useState } from 'react';\nimport styled, { DefaultTheme } from 'styled-components';\n\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { Field, FormikErrors, useFormik } from 'formik';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\nimport Button from 'components/buttons/Button';\n\nimport { LocationData } from 'components/fields/LocationField';\n\n/** Field Renderer */\nimport renderLocationField from './renderer/locationRenderer';\nimport renderDatepickerField from './renderer/datepickerRenderer';\nimport {\n renderCheckboxGroupField,\n renderRadioGroupField,\n} from './renderer/fieldGroupRenderer';\nimport renderAreaField from './renderer/areaRenderer';\nimport renderField from './renderer/fieldRenderer';\nimport renderSelectField from './renderer/selectRenderer';\nimport renderUploadField from './renderer/uploadRenderer';\nimport fieldValidator from './validators/fieldValidator';\nimport areaValidator from './validators/areaValidator';\nimport selectValidator from './validators/selectValidator';\nimport datepickerValidator from './validators/datepickerValidator';\nimport locationValidator from './validators/locationValidator';\nimport fieldGroupValidator from './validators/fieldGroupValidator';\nimport uploadValidator from './validators/uploadValidator';\nimport Copy from 'components/typography/Copy';\n\nconst StyledSection = styled(Section)`\n overflow: visible;\n`;\n\nconst Form = styled.form`\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n @media ${mq.semilarge} {\n flex-direction: row;\n }\n`;\n\nconst FieldContainer = styled.div`\n flex: 1 1 0;\n text-align: center;\n\n & + & {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n max-width: 610px;\n }\n`;\n\nconst FormFooter = styled.div`\n margin-top: ${spacings.spacer}px;\n`;\n\nconst Status = styled(Copy)`\n text-align: left;\n margin: 0 auto;\n\n @media ${mq.semilarge} {\n max-width: 610px;\n }\n`;\n\nconst ActionContainer = styled.div`\n width: 100%;\n margin: 0 auto;\n margin-top: ${spacings.spacer * 1.5}px;\n text-align: right;\n\n @media ${mq.semilarge} {\n max-width: 610px;\n }\n`;\n\nexport interface FormStructure {\n [key: string]:\n | Field\n | Area\n | Select\n | Datepicker\n | Location\n | FieldGroup\n | FileUpload;\n}\n\nexport interface FormField {\n isRequired?: boolean;\n}\n\nexport interface Field extends FormField {\n type: 'Field';\n inputType?: 'text' | 'number' | 'email' | 'password' | 'tel';\n initialValue?: string;\n placeholder?: string;\n info?: string;\n validate?: (key: string, value: string, config: Field) => Promise<string>;\n errorMsg?: string;\n}\n\nexport interface Area extends FormField {\n type: 'Area';\n initialValue?: string;\n placeholder?: string;\n info?: string;\n validate?: (key: string, value: string, config: Area) => Promise<string>;\n errorMsg?: string;\n}\n\nexport interface Select extends FormField {\n type: 'Select';\n initialOption?: string;\n placeholder?: string;\n dropdownItems: {\n label?: string;\n value?: Record<string, string>;\n }[];\n info?: string;\n validate?: (\n key: string,\n selectedItem: string,\n config: Select\n ) => Promise<string>;\n indicator?: (props: {\n isOpen: boolean;\n isDisabled?: boolean;\n }) => React.ReactNode;\n errorMsg?: string;\n}\n\nexport interface Datepicker extends FormField {\n type: 'Datepicker';\n initialDates?: [Date, Date];\n placeholder?: string;\n minDate?: Date;\n maxDate?: Date;\n singleSelect?: boolean;\n info?: string;\n customIcon?: (props: {\n isInverted?: boolean;\n singleSelect?: boolean;\n }) => React.ReactNode;\n\n singleDateError?: string;\n multiDateError?: string;\n nextCtrlUrl?: React.ReactNode;\n prevCtrlUrl?: React.ReactNode;\n validate?: (\n key: string,\n value: [Date | null, Date | null],\n config: Datepicker\n ) => Promise<string>;\n deleteAction?: (\n handleClick?: (\n e: React.SyntheticEvent<HTMLButtonElement, Event>\n ) => void\n ) => React.ReactNode;\n submitAction?: (\n handleClick?: (\n e: React.SyntheticEvent<HTMLButtonElement, Event>\n ) => void\n ) => React.ReactNode;\n}\n\nexport interface Location extends FormField {\n type: 'Location';\n zoom?: number;\n initialMapCenter?: [number, number];\n placeholder?: string;\n info?: string;\n errorMsg?: string;\n customToggle?: (props: {\n isInverted?: boolean;\n viewState?: 'desc' | 'map';\n handleClick?: () => void;\n }) => React.ReactNode;\n customLocationControl?: (props: {\n isInverted?: boolean;\n handleClick?: () => void;\n }) => React.ReactNode;\n customResetControl?: (props: {\n isInverted?: boolean;\n handleClick?: () => void;\n }) => React.ReactNode;\n validate?: (\n key: string,\n value: LocationData,\n config: Location\n ) => Promise<string>;\n toggleLabel?: string;\n trackLocationLabel?: string;\n}\n\nexport interface FieldGroup extends FormField {\n type: 'FieldGroup';\n groupType: 'Radio' | 'Checkbox';\n fields: Array<{ initialChecked?: boolean; text?: string }>;\n validate?: (\n key: string,\n value: Array<string> | string,\n config: FieldGroup\n ) => Promise<string>;\n errorMsg?: string;\n infoMsg?: string;\n}\n\nexport interface FileUpload extends FormField {\n type: 'Upload';\n addBtnLabel?: string;\n removeBtnLabel?: string;\n info?: string;\n acceptedFormats?: string;\n customUploadIcon?: (isInverted?: boolean) => React.ReactNode;\n customDeleteIcon?: (isInverted?: boolean) => React.ReactNode;\n validate?: (\n key: string,\n value: Array<File>,\n config: FileUpload\n ) => Promise<string>;\n errorMsg?: string;\n}\n\nexport interface FormData {\n [key: string]: FormDataTypes | string;\n}\n\nexport type FormDataTypes =\n | string\n | boolean\n | Record<string, string>\n | Array<string>\n | [Date | null, Date | null]\n | Array<File>\n | LocationData;\n\ntype FieldTypes =\n | Field\n | Area\n | Select\n | Datepicker\n | Location\n | FieldGroup\n | FileUpload;\n\nexport interface FieldGenerationProps<T extends FieldTypes> {\n field: T;\n value: FormDataTypes;\n error: string;\n info?: string;\n isTouched: boolean;\n key: string;\n isInverted: boolean;\n hasBg: boolean;\n theme: DefaultTheme;\n setField: (props: {\n key: string;\n value: any;\n shouldValidate?: boolean;\n }) => Promise<void | FormikErrors<FormData>>;\n validateField: (\n name: string\n ) => Promise<string | undefined> | Promise<void>;\n setTouched: (\n field: string,\n touched?: boolean | undefined,\n shouldValidate?: boolean | undefined\n ) => Promise<void> | Promise<FormikErrors<FormData>>;\n handleChange: {\n (e: React.ChangeEvent<any>): void;\n <T_1 = string | React.ChangeEvent<any>>(\n field: T_1\n ): T_1 extends React.ChangeEvent<any>\n ? void\n : (e: string | React.ChangeEvent<any>) => void;\n };\n handleBlur: {\n (e: React.FocusEvent<any>): void;\n <T = any>(fieldOrEvent: T): T extends string ? (e: any) => void : void;\n };\n validateOnBlur?: boolean;\n validateOnChange?: boolean;\n}\n\nexport type FormValues = FormData & {\n targetEmails: string[];\n subjectLine: string;\n};\n\nexport interface SubmitResponse {\n message?: string;\n isError?: boolean;\n}\n\nconst DynamicForm: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Field definitions */\n fields?: FormStructure;\n\n /** Callback on form submit */\n onSubmit?: (values: FormValues) => Promise<SubmitResponse>;\n\n /** Function to inject custom submit button */\n submitAction?: (props: {\n isInverted?: boolean;\n handleSubmit?: () => Promise<any>;\n isSubmitting?: boolean;\n }) => React.ReactNode;\n\n /** List of target emails */\n targetEmails?: string[];\n\n /** E-Mail subject */\n subjectLine?: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Functions to inject custom field components (React nodes) */\n definitions?: {\n field?: (props: FieldGenerationProps<Field>) => React.ReactNode;\n area?: (props: FieldGenerationProps<Area>) => React.ReactNode;\n select?: (props: FieldGenerationProps<Select>) => React.ReactNode;\n datepicker?: (\n props: FieldGenerationProps<Datepicker>\n ) => React.ReactNode;\n location?: (props: FieldGenerationProps<Location>) => React.ReactNode;\n checkbox?: (props: FieldGenerationProps<FieldGroup>) => React.ReactNode;\n radio?: (props: FieldGenerationProps<FieldGroup>) => React.ReactNode;\n upload?: (props: FieldGenerationProps<FileUpload>) => React.ReactNode;\n };\n}> = ({\n anchorId,\n fields,\n onSubmit,\n submitAction,\n definitions,\n subjectLine,\n targetEmails,\n bgMode,\n}) => {\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full' || isInverted;\n\n const [submitReponse, setSubmitResponse] = useState<SubmitResponse>();\n\n // generate initial data and setup yup validation definition\n const initalData: FormData = {};\n\n for (const key in fields) {\n switch (fields[key].type) {\n case 'Field':\n initalData[key] = (fields[key] as Field).initialValue || '';\n break;\n case 'Area':\n initalData[key] = (fields[key] as Area).initialValue || '';\n break;\n case 'Select':\n initalData[key] = (fields[key] as Select).initialOption || '';\n break;\n case 'Datepicker':\n initalData[key] = (fields[key] as Datepicker).initialDates || [\n null,\n null,\n ];\n break;\n case 'Location': {\n initalData[key] = {\n description: '',\n position: [0, 0],\n };\n break;\n }\n case 'Upload':\n initalData[key] = [];\n break;\n case 'FieldGroup': {\n const group = fields[key] as FieldGroup;\n const type = (fields[key] as FieldGroup).groupType;\n if (type === 'Checkbox') {\n const initalArray: string[] = [];\n group.fields.forEach((field) => {\n if (field.initialChecked && field.text)\n initalArray.push(field.text);\n });\n initalData[key] = initalArray;\n } else if (type === 'Radio') {\n initalData[key] = '';\n group.fields.every((field) => {\n if (field.initialChecked && field.text) {\n initalData[key] = field.text;\n return false;\n }\n return true;\n });\n }\n break;\n }\n }\n }\n\n const validation = async (values: FormData) => {\n const errors: Partial<FormData> = {};\n\n // search for errors and set them\n for (const key in fields) {\n switch (fields[key].type) {\n case 'Field': {\n const config = fields[key] as Field;\n const value = values[key] as string;\n\n // custom validation\n if (config.validate) {\n const error = await config.validate(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n // default\n const error = await fieldValidator(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n case 'Area': {\n const config = fields[key] as Area;\n const value = values[key] as string;\n\n // custom validation\n if (config.validate) {\n const error = await config.validate(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n // default\n const error = await areaValidator(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n case 'Select': {\n const config = fields[key] as Select;\n const value = values[key] as string;\n\n // custom validation\n if (config.validate) {\n const error = await config.validate(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n // default\n const error = await selectValidator(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n case 'Datepicker': {\n const config = fields[key] as Datepicker;\n const value = values[key] as [Date | null, Date | null];\n\n // custom validation\n if (config.validate) {\n const error = await config.validate(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n // default\n const error = await datepickerValidator(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n case 'Location': {\n const config = fields[key] as Location;\n const value = values[key] as LocationData;\n\n // custom validation\n if (config.validate) {\n const error = await config.validate(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n // default\n const error = await locationValidator(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n case 'FieldGroup': {\n const config = fields[key] as FieldGroup;\n const value = values[key] as Array<string> | string;\n\n // custom validation\n if (config.validate) {\n const error = await config.validate(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n // default\n const error = await fieldGroupValidator(key, value, config);\n if (error) errors[key] = error;\n break;\n }\n\n case 'Upload': {\n const config = fields[key] as FileUpload;\n const files = values[key] as File[];\n\n // custom validation\n if (config.validate) {\n const error = await config.validate(key, files, config);\n if (error) errors[key] = error;\n break;\n }\n\n // default\n const error = await uploadValidator(key, files, config);\n if (error) errors[key] = error;\n break;\n }\n }\n }\n\n return errors;\n };\n\n // formik hook\n const {\n handleSubmit,\n handleChange,\n handleBlur,\n setFieldTouched,\n setSubmitting,\n validateField,\n submitForm,\n setValues,\n isSubmitting,\n touched,\n values,\n errors,\n dirty,\n validateOnBlur,\n validateOnChange,\n } = useFormik<FormData>({\n initialValues: {\n ...initalData,\n } as FormData,\n\n onSubmit: async (values, helpers) => {\n const valuesAndMails = {\n ...values,\n targetEmails: targetEmails || [],\n subjectLine: subjectLine || '',\n };\n\n if (!onSubmit) {\n setSubmitting(false);\n return;\n }\n\n const response = await onSubmit(valuesAndMails);\n helpers.resetForm({ values });\n setSubmitResponse(response);\n\n if (response.isError) {\n setSubmitting(false);\n }\n },\n validateOnBlur: true,\n validateOnChange: true,\n validate: validation,\n });\n\n // save last react state\n const latestValuesRef = useRef<FormData>({ ...initalData } as FormData);\n const { theme } = useLibTheme();\n\n // rewrite setFieldValue to prevent loadash feature of Formik: https://github.com/jaredpalmer/formik/issues/2262\n const setField = useCallback(\n (props: {\n key: string;\n value: any;\n prevValues: FormData;\n shouldValidate?: boolean;\n }) => {\n return setValues(\n { ...latestValuesRef.current, [props.key]: props.value },\n props.shouldValidate\n );\n },\n [setValues]\n );\n\n const fieldKeys = fields && Object.keys(fields);\n\n useEffect(() => {\n latestValuesRef.current = { ...values };\n }, [values]);\n\n return (\n <StyledSection\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? color(theme).sectionBg.dark\n : bgMode\n ? color(theme).sectionBg.medium\n : color(theme).sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <Form noValidate onSubmit={handleSubmit}>\n <FieldContainer>\n {fields &&\n fieldKeys?.map((label, i) => {\n const props = {\n index: i,\n field: fields[label],\n key: label,\n value: values[label],\n error: errors[label],\n isTouched: touched[label] || false,\n isInverted: isInverted,\n hasBg: hasBg,\n setField: setField,\n setTouched: setFieldTouched,\n validateField: validateField,\n handleChange: handleChange,\n handleBlur: handleBlur,\n validateOnBlur,\n validateOnChange,\n theme: theme,\n } as FieldGenerationProps<any>;\n\n switch (fields[label].type) {\n case 'Field': {\n if (definitions?.field) {\n return definitions.field(props);\n } else {\n return renderField(props);\n }\n }\n\n case 'Area': {\n if (definitions?.area) {\n return definitions.area(props);\n } else {\n return renderAreaField(props);\n }\n }\n\n case 'Datepicker': {\n if (definitions?.datepicker) {\n return definitions.datepicker(\n props\n );\n } else {\n return renderDatepickerField(props);\n }\n }\n\n case 'Location': {\n if (definitions?.location) {\n return definitions.location(props);\n } else {\n return renderLocationField(props);\n }\n }\n\n case 'FieldGroup': {\n if (\n (fields[label] as FieldGroup)\n .groupType === 'Checkbox'\n ) {\n if (definitions?.checkbox) {\n return definitions.checkbox(\n props\n );\n } else {\n return renderCheckboxGroupField(\n props\n );\n }\n } else {\n if (definitions?.radio) {\n return definitions.radio(props);\n } else {\n return renderRadioGroupField(\n props\n );\n }\n }\n }\n\n case 'Select': {\n if (definitions?.select) {\n return definitions.select(props);\n } else {\n return renderSelectField(props);\n }\n }\n\n case 'Upload': {\n if (definitions?.upload) {\n return definitions.upload(props);\n } else {\n return renderUploadField(props);\n }\n }\n default:\n return null;\n }\n })}\n </FieldContainer>\n </Form>\n {(fields || submitReponse?.message) && (\n <FormFooter>\n {submitReponse?.message && !dirty && (\n <Status\n textColor={\n submitReponse?.isError\n ? color(theme).error\n : isInverted\n ? color(theme).text.copyInverted\n : color(theme).text.copy\n }\n >\n {submitReponse.message || ''}\n </Status>\n )}\n {fields && (\n <ActionContainer>\n <Actions\n primary={\n submitAction ? (\n submitAction({\n isInverted,\n isSubmitting,\n handleSubmit: submitForm,\n })\n ) : (\n <Button.View\n as=\"button\"\n onClick={submitForm}\n {...{\n type: 'submit',\n }}\n >\n <Button.Label>\n Send mail\n </Button.Label>\n </Button.View>\n )\n }\n />\n </ActionContainer>\n )}\n </FormFooter>\n )}\n </Wrapper>\n </StyledSection>\n );\n};\n\nexport const DynamicFormComponent = DynamicForm;\nexport default withLibTheme(DynamicForm);\n","import React from 'react';\n\nimport Textfield from 'components/fields/Textfield';\nimport { Field, FieldGenerationProps } from '../DynamicForm';\n\nconst renderField = ({\n field,\n key,\n value,\n error,\n isTouched,\n handleChange,\n handleBlur,\n isInverted,\n}: FieldGenerationProps<Field>) => (\n <Textfield\n key={key}\n enableMemo\n label={`${key}${field.isRequired ? ' *' : ''}`}\n placeholder={field.placeholder}\n name={`['${key}']`}\n type={field.inputType}\n isInverted={isInverted}\n value={value as string}\n onChange={handleChange}\n onBlur={handleBlur}\n infoMessage={field.info}\n errorMessage={error && isTouched ? error : undefined}\n />\n);\n\nexport default renderField;\n","import React from 'react';\n\nimport Textarea from 'components/fields/Textarea';\nimport { Area, FieldGenerationProps } from '../DynamicForm';\n\nconst renderAreaField = ({\n field,\n key,\n value,\n error,\n isTouched,\n isInverted,\n handleChange,\n handleBlur,\n}: FieldGenerationProps<Area>) => (\n <Textarea\n key={key}\n enableMemo\n label={`${key}${field.isRequired ? ' *' : ''}`}\n placeholder={field.placeholder}\n name={`['${key}']`}\n value={value as string}\n isInverted={isInverted}\n onChange={handleChange}\n onBlur={handleBlur}\n infoMessage={field.info}\n errorMessage={error && isTouched ? error : undefined}\n />\n);\n\nexport default renderAreaField;\n","import React from 'react';\nimport DatepickerCmp from 'components/fields/Datepicker';\nimport { Datepicker, FieldGenerationProps } from '../DynamicForm';\nimport ButtonGhost from 'components/buttons/ButtonGhost';\nimport Button from 'components/buttons/Button';\n\nconst renderDatepickerField = ({\n key,\n field,\n value,\n error,\n isTouched,\n isInverted,\n setField,\n setTouched,\n validateField,\n}: FieldGenerationProps<Datepicker>) => {\n const dates = value as [Date | null, Date | null];\n\n const handleSubmit = async (start?: Date | null, end?: Date | null) => {\n await setTouched(key, true);\n await setField({\n key,\n value: [start || null, end || null],\n });\n validateField(key);\n };\n\n return (\n <DatepickerCmp\n key={key}\n enableMemo\n onSubmit={handleSubmit}\n onDataChange={handleSubmit}\n values={[dates?.[0] as Date, dates?.[1] as Date]}\n label={`${key}${field.isRequired ? ' *' : ''}`}\n placeholder={field.placeholder}\n singleSelect={field.singleSelect}\n infoMessage={field.info}\n errorMessage={error && isTouched ? error : undefined}\n name={key}\n customIcon={field?.customIcon}\n isInverted={isInverted}\n minDate={field.minDate}\n maxDate={field.maxDate}\n deleteAction={(handleReset) =>\n field?.deleteAction ? (\n field.deleteAction(handleReset)\n ) : (\n <ButtonGhost.View onClick={handleReset}>\n delete\n </ButtonGhost.View>\n )\n }\n submitAction={(handleSubmit) =>\n field?.submitAction ? (\n field.submitAction(handleSubmit)\n ) : (\n <Button.View onClick={handleSubmit}>submit</Button.View>\n )\n }\n nextCtrlUrl={field.nextCtrlUrl}\n prevCtrlUrl={field.prevCtrlUrl}\n />\n );\n};\n\nexport default renderDatepickerField;\n","import React from 'react';\n\nimport LocationField, { LocationData } from 'components/fields/LocationField';\nimport { FieldGenerationProps } from '../DynamicForm';\nimport { Location } from '../DynamicForm';\n\nconst renderLocationField = ({\n key,\n field,\n value,\n error,\n isTouched,\n isInverted,\n setField,\n}: FieldGenerationProps<Location>) => {\n const locationData = value as LocationData;\n const mappedData = {\n ...locationData,\n position:\n !locationData?.position?.[0] && !locationData?.position?.[1]\n ? undefined\n : locationData.position,\n };\n\n const handleChange = (location: LocationData) => {\n setField({\n key,\n value: { ...location },\n shouldValidate: true,\n });\n };\n\n return (\n <LocationField\n key={key}\n enableMemo\n name={`['${key}']`}\n label={`${key}${field.isRequired ? ' *' : ''}`}\n placeholder={field.placeholder}\n initialMapCenter={field.initialMapCenter}\n zoom={field.zoom}\n isInverted={isInverted}\n infoMessage={field.info}\n errorMessage={error && isTouched ? error : undefined}\n value={mappedData}\n onChange={handleChange}\n customLocationControl={field.customLocationControl}\n customToggle={field.customToggle}\n customResetControl={field.customResetControl}\n toggleLabel={field.toggleLabel}\n trackLocationLabel={field.trackLocationLabel}\n />\n );\n};\n\nexport default renderLocationField;\n","import React from 'react';\n\nimport SelectDropdown from 'components/fields/SelectDropdown';\nimport { Select, FieldGenerationProps } from '../DynamicForm';\n\nconst renderSelectField = ({\n field,\n key,\n value,\n error,\n isTouched,\n isInverted,\n setField,\n setTouched,\n validateField,\n validateOnChange,\n validateOnBlur,\n}: FieldGenerationProps<Select>) => {\n const selectedItem = value as string;\n\n return (\n <SelectDropdown\n key={key}\n enableMemo\n label={`${key}${field.isRequired ? ' *' : ''}`}\n name={key}\n placeholder={field.placeholder}\n errorMessage={error && isTouched ? error : undefined}\n items={field.dropdownItems\n ?.filter((item) => item.label)\n ?.map((item) => ({\n label: item.label || '',\n value: item.value || {},\n }))}\n selectedItem={selectedItem}\n onChange={async (selectedOption) => {\n setField({ key, value: selectedOption });\n await setTouched(key, true);\n if (validateOnChange) validateField(key);\n }}\n onBlur={() => setTouched(key, true, validateOnBlur)}\n indicator={field.indicator}\n isInverted={isInverted}\n />\n );\n};\n\nexport default renderSelectField;\n","import FileUploadCmp from 'components/fields/FileUpload';\nimport React from 'react';\n\nimport { FileUpload, FieldGenerationProps } from '../DynamicForm';\n\nconst renderUploadField = ({\n field,\n key,\n error,\n isTouched,\n isInverted,\n setField,\n}: FieldGenerationProps<FileUpload>) => (\n <FileUploadCmp\n key={key}\n enableMemo\n label={`${key}${field.isRequired ? ' *' : ''}`}\n name={key}\n infoMessage={field.info}\n uploadLabel={field.addBtnLabel}\n errorMessage={error && isTouched ? error : undefined}\n acceptedFormats={field.acceptedFormats}\n onUploadFiles={(files) => {\n setField({ key, value: files });\n }}\n customUploadIcon={field.customUploadIcon}\n customDeleteIcon={field.customDeleteIcon}\n isInverted={isInverted}\n />\n);\n\nexport default renderUploadField;\n","import React, { FC, useCallback, useRef } from 'react';\nimport styled, { DefaultTheme } from 'styled-components';\n\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport Textfield from 'components/fields/Textfield';\nimport { FormikErrors, useFormik } from 'formik';\nimport Actions from 'components/blocks/Actions';\nimport Button from 'components/buttons/Button';\n\nconst Form = styled.form`\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n @media ${mq.semilarge} {\n flex-direction: row;\n }\n`;\n\nconst FieldContainer = styled.div`\n flex: 1 1 0;\n text-align: center;\n\n & + & {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n max-width: 590px;\n\n & + & {\n margin-top: 0;\n }\n\n &:first-child {\n padding-right: ${spacings.nudge * 3}px;\n }\n\n &:last-child {\n padding-left: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst ActionContainer = styled.div`\n width: 100%;\n max-width: 590px;\n\n margin: 0 auto;\n margin-top: ${spacings.spacer * 2}px;\n\n text-align: center;\n`;\n\nexport interface FieldGenerationProps {\n field: NewsletterField;\n value: string;\n error: string;\n info?: string;\n isTouched: boolean;\n key: string;\n isInverted: boolean;\n theme: DefaultTheme;\n setField: (\n field: string,\n value: any,\n shouldValidate?: boolean | undefined\n ) => Promise<void> | Promise<FormikErrors<FormData>>;\n validateField: (\n name: string\n ) => Promise<string | undefined> | Promise<void>;\n setTouched: (\n field: string,\n touched?: boolean | undefined,\n shouldValidate?: boolean | undefined\n ) => Promise<void> | Promise<FormikErrors<FormData>>;\n handleChange: {\n (e: React.ChangeEvent<any>): void;\n <T_1 = string | React.ChangeEvent<any>>(\n field: T_1\n ): T_1 extends React.ChangeEvent<any>\n ? void\n : (e: string | React.ChangeEvent<any>) => void;\n };\n handleBlur: {\n (e: React.FocusEvent<any>): void;\n <T = any>(fieldOrEvent: T): T extends string ? (e: any) => void : void;\n };\n validateOnBlur?: boolean;\n validateOnChange?: boolean;\n}\n\nexport interface NewsletterFormStructure {\n [key: string]: NewsletterField;\n}\n\nexport interface FormData {\n [key: string]: string;\n}\n\nexport interface NewsletterField {\n inputType?: 'text' | 'number' | 'email' | 'password' | 'tel';\n isRequired?: boolean;\n label?: string;\n errorMsg?: string;\n initialValue?: string;\n placeholder?: string;\n info?: string;\n validate?: (\n key: string,\n value: string,\n config: NewsletterField\n ) => Promise<string>;\n}\n\nconst NewsletterForm: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Structure to define fields of newsletter form */\n fields?: NewsletterFormStructure;\n\n /** Function to inject custom field definition */\n customField?: (props: FieldGenerationProps) => React.ReactNode;\n\n /** HTML form element action */\n action?: string;\n\n /** HTML form element method */\n method?: string;\n\n /** Form submission callback */\n onSubmit?: (values: FormData, element: HTMLFormElement) => Promise<void>;\n\n /** Function to inject custom submit button */\n submitAction?: (props: {\n isInverted?: boolean;\n handleSubmit?: () => Promise<any>;\n isDisabled?: boolean;\n }) => React.ReactNode;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({\n anchorId,\n bgMode,\n fields,\n customField,\n action,\n method,\n submitAction,\n onSubmit,\n}) => {\n const { theme } = useLibTheme();\n const formRef = useRef<HTMLFormElement>(null);\n const isInverted = bgMode === 'inverted';\n\n // generate initial data and setup yup validation definition\n const initialData: FormData = {};\n\n for (const key in fields) {\n initialData[key] = fields[key].initialValue || '';\n }\n\n const validation = async (values: FormData) => {\n const errors: Partial<FormData> = {};\n\n // search for errors and set them\n for (const key in fields) {\n const config = fields[key];\n const inputType = config.inputType;\n\n // default\n if (fields[key].isRequired && !values[key]) {\n errors[key] = fields[key].errorMsg || 'Required field';\n }\n\n // custom validation\n if (config.validate) {\n const error = await config.validate(\n key,\n values[key] as string,\n config\n );\n if (error) errors[key] = error;\n break;\n }\n\n switch (inputType) {\n case 'email':\n if (\n values[key] &&\n !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(\n values[key] as string\n )\n ) {\n errors[key] =\n fields[key].errorMsg || 'Invalid Mail format';\n }\n break;\n case 'tel':\n if (values[key] && /[A-Z]/gi.test(values[key] as string)) {\n errors[key] =\n fields[key].errorMsg || 'Ungültige Telefonnummer';\n }\n break;\n case 'number':\n if (\n values[key] &&\n !/^[+]?\\d+([.]\\d+)?$/gm.test(values[key] as string)\n ) {\n errors[key] =\n fields[key].errorMsg || 'Zahlenformat ungültig';\n }\n break;\n }\n }\n\n return errors;\n };\n\n // formik hook\n const {\n handleSubmit,\n handleChange,\n handleBlur,\n setFieldTouched,\n setSubmitting,\n validateField,\n submitForm,\n setValues,\n isSubmitting,\n touched,\n values,\n errors,\n dirty,\n validateOnBlur,\n validateOnChange,\n } = useFormik<FormData>({\n initialValues: {\n ...initialData,\n } as FormData,\n\n onSubmit: async (values) => {\n if (!formRef.current) return;\n\n if (action && method) {\n formRef.current.submit();\n } else {\n onSubmit && (await onSubmit(values, formRef.current));\n }\n\n setSubmitting(false);\n },\n validateOnBlur: true,\n validateOnChange: true,\n validate: validation,\n });\n\n // rewrite setFieldValue to prevent loadash feature of Formik: https://github.com/jaredpalmer/formik/issues/2262\n const setField = useCallback(\n async (key: string, value: any, shouldValidate?: boolean) => {\n return setValues({ ...values, [key]: value }, shouldValidate);\n },\n [setValues, values]\n );\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? color(theme).sectionBg.dark\n : bgMode\n ? color(theme).sectionBg.medium\n : color(theme).sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <Form\n ref={formRef}\n action={action}\n method={method}\n onSubmit={handleSubmit}\n >\n <FieldContainer>\n {fields &&\n Object.keys(fields).map((key, i) => {\n const generationProps = {\n index: i,\n field: fields[key],\n key: key,\n value: values[key],\n error: errors[key],\n isTouched: touched[key] || false,\n isInverted: isInverted,\n setField: setField,\n setTouched: setFieldTouched,\n validateField: validateField,\n handleChange: handleChange,\n handleBlur: handleBlur,\n validateOnBlur,\n validateOnChange,\n theme: theme,\n } as FieldGenerationProps;\n\n return customField\n ? customField(generationProps)\n : generateTextField(generationProps);\n })}\n </FieldContainer>\n </Form>\n {fields && (\n <ActionContainer>\n <Actions\n primary={\n submitAction ? (\n submitAction({\n isInverted,\n isDisabled: isSubmitting || !dirty,\n handleSubmit: submitForm,\n })\n ) : (\n <Button.View\n as=\"button\"\n onClick={submitForm}\n isDisabled={isSubmitting || !dirty}\n {...{\n type: 'submit',\n }}\n >\n <Button.Label>send</Button.Label>\n </Button.View>\n )\n }\n />\n </ActionContainer>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nconst generateTextField = ({\n key,\n field,\n isInverted,\n value,\n handleChange,\n handleBlur,\n error,\n isTouched,\n}: FieldGenerationProps) => (\n <Textfield\n key={key}\n label={`${field.label || key}${field.isRequired ? '*' : ''}`}\n placeholder={field.placeholder}\n name={`${key}`}\n isInverted={isInverted}\n value={value as string}\n onChange={handleChange}\n onBlur={handleBlur}\n infoMessage={field.info}\n errorMessage={error && isTouched ? error : undefined}\n />\n);\n\nexport const NewsletterFormComponent = NewsletterForm;\nexport default withLibTheme(NewsletterForm);\n","import Filter from 'components/base/icons/Filter';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport EventBlock, { EventProps } from 'components/blocks/EventBlock';\nimport Tag, { TagProps } from 'components/blocks/Tag';\nimport Pointer from 'components/buttons/Pointer';\nimport Copy from 'components/typography/Copy';\nimport React, { useCallback, useEffect, useMemo } from 'react';\nimport styled, { DefaultTheme } from 'styled-components';\nimport { isValidArray } from 'utils/arrays';\nimport { concat } from 'utils/concat';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport StatusFormatter from 'utils/statusFormatter';\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport { deleteUrlParam, getUrlParams, setUrlParam } from 'utils/urlParams';\nimport useMounted from 'utils/useMounted';\nimport { useObserverSupport } from 'utils/useObserverSupport';\nimport { useScrollTo } from 'utils/useScrollTo';\nimport useUpdateEffect from 'utils/useUpdateEffect';\n\nconst TagContainer = styled.div`\n margin-top: -${spacings.nudge}px;\n margin-left: -${spacings.nudge}px;\n\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n\n &:not(:only-child) {\n margin-bottom: ${spacings.nudge * 6}px;\n }\n`;\n\nconst TagWrapper = styled.div`\n padding-top: ${spacings.nudge}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst Events = styled.ul<{ hasBg?: boolean }>`\n list-style-type: none;\n margin: 0;\n padding: 0;\n\n & > * + * {\n border-top: 1px solid\n ${({ theme, hasBg }) =>\n hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n\n & > *:first-of-type {\n border-top: 1px solid\n ${({ theme, hasBg }) =>\n hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n\n & > *:last-of-type {\n border-bottom: 1px solid\n ${({ theme, hasBg }) =>\n hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n`;\n\nconst FilterIcon = styled(Copy)`\n display: flex;\n flex-direction: row;\n align-items: center;\n\n padding: ${spacings.nudge / 2}px ${spacings.nudge}px 0 0;\n\n & > * + * {\n margin-left: ${spacings.nudge}px;\n }\n`;\n\nconst EventItem = styled.li`\n padding: ${spacings.nudge * 3}px 0;\n`;\n\nconst ListFooter = styled.div`\n margin-top: ${spacings.nudge * 6}px;\n text-align: center;\n\n @media ${mq.medium} {\n text-align: left;\n }\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 2 ? 'block' : 'none'};\n`;\n\nexport const getEventFilterParams = (\n url: string,\n theme: DefaultTheme,\n tags: string[] = []\n) => {\n if (!url || !theme) return '';\n if (!isValidArray(tags, false)) return url;\n\n const filterName = theme.globals.sections.eventFilterName;\n if (!filterName) return url;\n\n try {\n const validUrl = new URL(url);\n const newParams = new URLSearchParams(validUrl.search);\n newParams.set(filterName, encodeURIComponent(tags.join(',')));\n\n return `${url}?${newParams.toString()}`;\n } catch (err) {\n return `${url}?${filterName}=${encodeURIComponent(tags.join(','))}`;\n }\n};\n\nexport type EventItem = Omit<\n EventProps,\n 'customTag' | 'isInverted' | 'onTagClick' | 'text'\n> & { address?: string };\n\nconst EventOverview: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of event item settings */\n events?: EventItem[];\n\n /** Tags for events filtering */\n tags?: string[];\n\n /** Initial data. If not defined the component tries to collect this from URL params */\n initial?: {\n activeTags?: string[];\n visibleRows?: number;\n };\n\n /** Text for load more toggle. Only visible if browser doesn't support IntersectionObserver. */\n showMoreText?: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /**\n * Callback function to handle tag click outside of component\n * If no callback is defined filtering is controlled on client\n * */\n onTagClick?: (tag: TagProps, insideList?: boolean) => void;\n\n /** Function to inject custom tag node */\n customTag?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n isActive?: boolean;\n clickHandler?: (ev?: React.SyntheticEvent<HTMLElement>) => void;\n }) => React.ReactNode;\n}> = ({\n tags,\n events,\n bgMode,\n anchorId,\n initial,\n showMoreText,\n onTagClick,\n customTag,\n}) => {\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const { colors, globals } = useLibTheme();\n const filterName = globals.sections.eventFilterName;\n\n const [selectedTags, setSelectedTags] = React.useState<string[]>(\n initial?.activeTags || []\n );\n const [itemsPerRow] = React.useState(1);\n const [visibleRows, setVisibleRows] = React.useState(\n initial?.visibleRows || 3\n );\n\n const targetRef = React.useRef<HTMLDivElement>(null);\n const observerSupported = useObserverSupport();\n const isMounted = useMounted();\n\n const eventCount = events?.length || 0;\n const setNewPos = useScrollTo(800);\n\n const getFilters = useCallback(() => {\n const tags: string[] = [];\n\n const filters = getUrlParams()[filterName];\n if (filters) {\n const tagsFilter = filters?.split(',');\n if (isValidArray(tagsFilter, false)) {\n tags.push(...tagsFilter);\n }\n }\n return tags;\n }, [filterName]);\n\n useEffect(() => {\n // if initial data is defined exit hook\n if (initial) return;\n\n // if no initial data provied try to find needed params in URL\n const paramTags = getFilters();\n\n if (isValidArray(paramTags, false)) {\n setSelectedTags(paramTags);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getFilters, initial]);\n\n useEffect(() => {\n if (!initial || isMounted) return;\n\n // set inital data into URL\n setUrlParam('rows', initial?.visibleRows || 3);\n\n if (isValidArray(initial?.activeTags, false)) {\n setUrlParam(filterName, initial?.activeTags?.join(','));\n } else {\n deleteUrlParam(filterName);\n }\n }, [filterName, initial, isMounted]);\n\n useUpdateEffect(() => {\n setUrlParam('rows', visibleRows);\n }, [visibleRows]);\n\n useUpdateEffect(() => {\n if (onTagClick || !isValidArray(selectedTags)) return;\n\n // set filters to URL params\n if (selectedTags.length > 0) {\n setUrlParam(filterName, selectedTags.join(','));\n } else {\n deleteUrlParam(filterName);\n }\n }, [selectedTags]);\n\n const handleTagClick = (tag: TagProps, enableToggling = true) => {\n setSelectedTags((prev) => {\n const prevCopy = [...prev];\n const itemIndex = tag.name ? prev.indexOf(tag.name) : -1;\n\n if (itemIndex === -1 && tag.name) {\n return [...prevCopy, tag.name];\n }\n if (enableToggling) {\n prevCopy.splice(itemIndex, 1);\n return prevCopy;\n }\n return prev;\n });\n setVisibleRows(3);\n };\n\n const filteredEvents = useMemo(() => {\n const tagFilterFn = (item: EventItem) => {\n if (!isValidArray(selectedTags, false)) return true;\n if (!item.tags) return false;\n\n let hasTags = false;\n for (let i = 0; i < item.tags.length; i++) {\n if (selectedTags.indexOf(item.tags[i].name || '') !== -1) {\n hasTags = true;\n break;\n }\n }\n return hasTags;\n };\n\n let filtered = isValidArray(events) ? [...events] : [];\n\n // adding filter\n filtered = filtered?.filter(tagFilterFn);\n\n return filtered;\n }, [events, selectedTags]);\n\n const visibleEvents = useMemo(() => {\n return (\n filteredEvents?.filter((_, i) => i < visibleRows * itemsPerRow) ||\n []\n );\n }, [filteredEvents, itemsPerRow, visibleRows]);\n\n useEffect(() => {\n // cancel if intersection observers are not supported\n if (!observerSupported) return;\n\n const element = targetRef.current;\n let observer: IntersectionObserver;\n\n if (element) {\n const options = {\n rootMargin: '0px 0px 100px 0px',\n threshold: 0,\n };\n\n observer = new IntersectionObserver((entries) => {\n const entry = entries[0];\n if (entry?.isIntersecting) {\n // on bottom of the wrapper load more events\n if (\n visibleRows <\n Math.ceil(filteredEvents.length / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }\n }, options);\n observer.observe(element);\n }\n\n return () => {\n if (observer) observer.disconnect();\n };\n }, [\n itemsPerRow,\n eventCount,\n visibleRows,\n observerSupported,\n filteredEvents.length,\n ]);\n\n const filteredTags = useMemo(() => {\n return tags?.filter((tag) => tag);\n }, [tags]);\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {isValidArray(filteredTags, false) && (\n <TagContainer>\n <FilterIcon\n size=\"small\"\n type=\"copy\"\n isInverted={isInverted}\n >\n <Filter />\n <span>Filter</span>\n </FilterIcon>\n {filteredTags.map((tag, i) => (\n <TagWrapper key={i}>\n {customTag ? (\n customTag({\n key: i,\n name: tag,\n isInverted: isInverted,\n isActive:\n selectedTags.indexOf(tag) !== -1,\n clickHandler: (ev) => {\n ev?.preventDefault();\n if (!onTagClick) {\n handleTagClick({ name: tag });\n } else onTagClick({ name: tag });\n },\n })\n ) : (\n <Tag\n isInverted={isInverted}\n onClick={(ev) => {\n ev?.preventDefault();\n if (!onTagClick) {\n handleTagClick({ name: tag });\n } else\n onTagClick(\n { name: tag },\n false\n );\n }}\n isActive={\n selectedTags.indexOf(tag) !== -1\n }\n >\n {tag}\n </Tag>\n )}\n </TagWrapper>\n ))}\n </TagContainer>\n )}\n <Events hasBg={hasBg}>\n {visibleEvents.map((item, i) => {\n let timespan = '';\n\n if (item.date) {\n const formatter = new StatusFormatter(\n item.date.getTime(),\n '',\n globals.sections.eventDateFormat(item.date),\n globals.sections.eventTimeFormat(item.date),\n globals.sections.eventLocaleKey\n );\n\n timespan = formatter.getFormattedTimespan(\n globals.sections.eventTimespanFormat(\n item.date,\n item.duration\n ),\n item.duration\n );\n }\n\n const text = concat([timespan, item.address], ' | ');\n\n return (\n <EventItem key={`${i}_event_${item.title}`}>\n <EventBlock\n {...item}\n text={text}\n tags={item.tags?.map((tag) => ({\n name: tag.name,\n }))}\n isInverted={isInverted}\n onTagClick={(tag) => {\n // scroll back to top\n setNewPos(0);\n if (!onTagClick) {\n // if no callback is defined handle filtering on client side inside the component\n handleTagClick(\n { name: tag.name },\n false\n );\n } else {\n onTagClick(\n { name: tag.name },\n true\n );\n }\n }}\n customTag={customTag}\n />\n </EventItem>\n );\n })}\n </Events>\n <div ref={targetRef} />\n {!observerSupported && (\n <ListFooter>\n {events && events.length > 0 && (\n <Copy\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n >\n <ShowMore\n itemCount={events.length}\n onClick={(ev) => {\n ev.preventDefault();\n if (\n visibleRows <\n Math.ceil(\n filteredEvents.length /\n itemsPerRow\n )\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows <\n filteredEvents.length / itemsPerRow && (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMoreText ||\n 'mehr anzeigen'}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n </Copy>\n )}\n </ListFooter>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const EventOverviewComponent = EventOverview;\nexport default withLibTheme(EventOverview);\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport EventBlock, { EventProps } from 'components/blocks/EventBlock';\nimport { getColors as color, spacings } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { LinkProps } from 'components/typography/Link';\nimport StatusFormatter from 'utils/statusFormatter';\nimport { concat } from 'utils/concat';\nimport { getEventFilterParams } from './EventOverview';\n\nconst List = styled.ul<{ hasBg?: boolean }>`\n list-style: none;\n margin: 0;\n padding: 0;\n\n & > * + * {\n border-top: 1px solid\n ${({ theme, hasBg }) =>\n hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n\n & > *:first-of-type {\n border-top: 1px solid\n ${({ theme, hasBg }) =>\n hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n\n & > *:last-of-type {\n border-bottom: 1px solid\n ${({ theme, hasBg }) =>\n hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n`;\n\nconst ListItem = styled.li`\n padding: ${spacings.nudge * 3}px 0;\n`;\n\nexport type EventItem = Omit<\n EventProps,\n 'customTag' | 'isInverted' | 'onTagClick' | 'text'\n> & { address?: string };\n\nconst EventList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of event item settings */\n events?: EventItem[];\n\n /** Section background */\n bgMode?: 'inverted' | 'full';\n\n /** Function to inject custom tag node */\n customTag?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n isActive?: boolean;\n link?: LinkProps;\n }) => React.ReactNode;\n}> = ({ anchorId, events, bgMode, customTag }) => {\n const { colors, globals, theme } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <List hasBg={hasBg}>\n {events?.map((event, i) => {\n let timespan = '';\n\n if (event.date) {\n const formatter = new StatusFormatter(\n event.date.getTime(),\n '',\n globals.sections.eventDateFormat(event.date),\n globals.sections.eventTimeFormat(event.date),\n globals.sections.eventLocaleKey\n );\n\n timespan = formatter.getFormattedTimespan(\n globals.sections.eventTimespanFormat(\n event.date,\n event.duration\n ),\n event.duration\n );\n }\n\n const text = concat([timespan, event.address], ' | ');\n\n return (\n <ListItem key={i}>\n <EventBlock\n {...event}\n tags={event.tags?.map((tag) => {\n let tagHref: string | undefined =\n undefined;\n\n if (tag.name && tag.link?.href) {\n tagHref = getEventFilterParams(\n tag.link.href,\n theme,\n [tag.name]\n );\n }\n\n return {\n name: tag.name,\n link: tag.link?.href\n ? {\n ...tag.link,\n href: tagHref,\n }\n : undefined,\n };\n })}\n isInverted={isInverted}\n text={text}\n customTag={customTag}\n />\n </ListItem>\n );\n })}\n </List>\n </Wrapper>\n </Section>\n );\n};\n\nexport const EventListComponent = EventList;\nexport default withLibTheme(EventList);\n","import React, { useMemo } from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { EventProps } from 'components/blocks/EventBlock';\nimport Image from 'components/blocks/Image';\nimport Tag from 'components/blocks/Tag';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\nimport { LinkProps } from 'components/typography/Link';\nimport { mq, spacings } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Grid from 'components/base/Grid';\nimport StatusFormatter from 'utils/statusFormatter';\nimport InfoList from 'components/blocks/InfoList';\nimport { isValidArray } from 'utils/arrays';\n\nconst StyledImage = styled(Image)`\n &:not(:last-child) {\n margin-bottom: ${spacings.spacer}px;\n }\n`;\n\nconst TagContainer = styled.div`\n max-width: 880px;\n margin-top: -${spacings.nudge}px;\n margin-left: -${spacings.nudge}px;\n\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n`;\n\nconst TagWrapper = styled.div`\n padding-top: ${spacings.nudge}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst EventTitle = styled(Heading)`\n max-width: 880px;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2; /* number of lines to show */\n line-clamp: 2;\n -webkit-box-orient: vertical;\n }\n`;\n\nconst EventDateTime = styled(Copy)`\n max-width: 880px;\n /* overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; */\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst EventAddress = styled(Copy)`\n max-width: 880px;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n ${EventDateTime} + & {\n margin-top: ${spacings.nudge}px;\n }\n\n @media ${mq.semilarge} {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n`;\n\nconst EventText = styled(Copy)`\n max-width: 880px;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nexport type DetailEventProps = Omit<\n EventProps,\n 'customTag' | 'isInverted' | 'onTagClick' | 'link'\n>;\n\nexport interface EventInfoGroup {\n title?: string;\n items: EventInfo[];\n}\n\nexport interface EventInfo {\n /** icon injection function */\n icon?: (isInverted?: boolean) => React.ReactNode;\n /** Event info text (richtText) */\n text?: string;\n}\n\nconst EventDetail: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of event item settings */\n event: DetailEventProps & { address?: string; abstract?: string };\n\n /** Additional event infos */\n infos?: EventInfoGroup[];\n\n /** Section background */\n bgMode?: 'inverted' | 'full';\n\n /** Function to inject custom tag node */\n customTag?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n isActive?: boolean;\n link?: LinkProps;\n }) => React.ReactNode;\n}> = ({ anchorId, event, infos, bgMode, customTag }) => {\n const { colors, globals } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n const hasInfos = useMemo(() => {\n return isValidArray(\n infos?.filter((info) => isValidArray(info.items, false)),\n false\n );\n }, [infos]);\n\n let publishedAt = '';\n let timespan = '';\n\n if (event?.date) {\n const formatter = new StatusFormatter(\n event.date.getTime(),\n '',\n globals.sections.eventDateFormat(event.date),\n globals.sections.eventTimeFormat(event.date),\n globals.sections.eventLocaleKey\n );\n publishedAt = formatter.getFormattedDate();\n\n timespan = formatter.getFormattedTimespan(\n globals.sections.eventTimespanFormat(event.date, event.duration),\n event.duration\n );\n }\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {event.image?.small && (\n <StyledImage\n {...event.image}\n coverSpace\n allowEdgeRadius\n isInverted={isInverted}\n />\n )}\n <Grid.Row\n gutter={spacings.nudge * 5}\n semilarge={{ gutter: spacings.spacer }}\n >\n <Grid.Col semilarge={{ span: hasInfos ? 5.7 / 8 : 1 }}>\n {event.tags && (\n <TagContainer>\n {event.tags.map((tag, i) => (\n <TagWrapper key={'tag_' + i}>\n {customTag ? (\n customTag({\n key: `headtag-${i}`,\n name: tag.name || '',\n isInverted: isInverted,\n isActive: false,\n link: tag.link,\n })\n ) : (\n <Tag\n link={tag.link}\n isInverted={isInverted}\n >\n {tag.name}\n </Tag>\n )}\n </TagWrapper>\n ))}\n </TagContainer>\n )}\n {event.title && (\n <EventTitle\n size=\"heading-2\"\n isInverted={isInverted}\n >\n {event.title}\n </EventTitle>\n )}\n {publishedAt && (\n <EventDateTime size=\"big\" type=\"copy-b\">\n {publishedAt || ''}\n {publishedAt && timespan ? ' | ' : ''}\n {timespan}\n </EventDateTime>\n )}\n {event.address && (\n <EventAddress\n size=\"big\"\n type=\"copy\"\n innerHTML={event.address}\n />\n )}\n {event.abstract && (\n <EventText\n size=\"medium\"\n type=\"copy-b\"\n isInverted={isInverted}\n >\n {event.abstract}\n </EventText>\n )}\n {event.text && (\n <EventText\n size=\"medium\"\n isInverted={isInverted}\n innerHTML={event.text}\n />\n )}\n </Grid.Col>\n {hasInfos && (\n <Grid.Col semilarge={{ span: 2.3 / 8 }}>\n <InfoList isInverted={isInverted} items={infos} />\n </Grid.Col>\n )}\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const EventDetailComponent = EventDetail;\nexport default withLibTheme(EventDetail);\n","import React, { forwardRef } from 'react';\nimport styled from 'styled-components';\n\nimport { spacings, getGlobals as global } from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Copy from 'components/typography/Copy';\n\nconst View = styled.div``;\n\nconst ImageContainer = styled.div<{ isCentered?: boolean }>`\n display: flex;\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n margin-bottom: ${spacings.nudge * 3}px;\n max-width: 100%;\n`;\n\nconst StyledImage = styled(Image)`\n overflow: hidden;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n`;\n\nconst Content = styled.div<{ isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst Title = styled(Copy)``;\n\nconst SubTitle = styled(Copy)``;\n\nconst Text = styled(Copy)`\n ${SubTitle} + & {\n margin-top: ${spacings.nudge}px;\n }\n`;\n\nexport interface FactProps {\n isInverted?: boolean;\n isCentered?: boolean;\n title?: string;\n subTitle?: string;\n text?: string;\n image?: ImageProps;\n}\n\nconst Fact = forwardRef<\n HTMLDivElement,\n FactProps & {\n className?: string;\n }\n>(\n (\n {\n isInverted = false,\n isCentered = false,\n title,\n subTitle,\n text,\n image,\n className,\n },\n ref\n ) => {\n return (\n <View ref={ref} className={className}>\n {image?.small && (\n <ImageContainer isCentered={isCentered}>\n <StyledImage\n isInverted={isInverted}\n small={image.small}\n medium={image.medium}\n semilarge={image.semilarge}\n large={image.large}\n xlarge={image.xlarge}\n alt={image.alt}\n coverSpace={image.coverSpace}\n ratios={image.ratios}\n showPlaceholder={image.showPlaceholder}\n />\n </ImageContainer>\n )}\n <Content isCentered={isCentered}>\n {title && (\n <Title\n type=\"copy-b\"\n size=\"big\"\n isInverted={isInverted}\n data-sheet=\"title\"\n >\n {title}\n </Title>\n )}\n {subTitle && (\n <SubTitle\n type=\"copy-b\"\n isInverted={isInverted}\n data-sheet=\"subtitle\"\n >\n {subTitle}\n </SubTitle>\n )}\n {text && (\n <Text\n type=\"copy\"\n isInverted={isInverted}\n data-sheet=\"text\"\n innerHTML={text}\n />\n )}\n </Content>\n </View>\n );\n }\n);\n\nFact.displayName = 'Fact';\n\nexport default Fact;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { mq } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Fact, { FactProps } from 'components/blocks/Fact';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport Grid from 'components/base/Grid';\n\nconst FactFill = styled.div`\n display: none;\n\n @media ${mq.large} {\n display: block;\n }\n`;\n\nconst FactGrid: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Controls amount columns on large screens */\n columns?: 3 | 4 | 6;\n\n /** Array with fact card data */\n facts?: Array<Omit<FactProps, 'isInverted' | 'isCentered'>>;\n\n /** Section background */\n bgMode?: 'full' | 'inverted' | 'splitted';\n\n /** Center text inside fact card items */\n isCentered?: boolean;\n}> = ({ anchorId, columns = 3, facts, bgMode, isCentered }) => {\n const { colors } = useLibTheme();\n const factCount = facts?.length || 0;\n\n const isInverted = bgMode === 'inverted';\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight<HTMLDivElement>({\n listLength: factCount,\n identifiers: ['[data-sheet=\"title\"]', '[data-sheet=\"subtitle\"]'],\n responsive: {\n small: 1,\n medium: columns < 3 ? columns : 3,\n semilarge: columns < 4 ? columns : 4,\n large: columns,\n xlarge: columns,\n },\n });\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <Grid.Row>\n {facts &&\n facts.map((fact, i) => {\n if (\n fact?.title ||\n fact?.subTitle ||\n fact?.image ||\n fact?.text\n ) {\n return (\n <Grid.Col\n key={i}\n medium={{ span: 4 / 12 }}\n semilarge={\n columns > 3\n ? { span: 3 / 12 }\n : { span: 4 / 12 }\n }\n large={{ span: 12 / columns / 12 }}\n >\n <Fact\n key={i}\n ref={cardRefs[i]}\n {...fact}\n isCentered={isCentered}\n isInverted={isInverted}\n />\n </Grid.Col>\n );\n } else {\n return (\n <Grid.Col\n key={i}\n medium={{ span: 4 / 12 }}\n semilarge={\n columns > 3\n ? { span: 3 / 12 }\n : { span: 4 / 12 }\n }\n large={{ span: 12 / columns / 12 }}\n >\n <FactFill ref={cardRefs[i]} key={i} />\n </Grid.Col>\n );\n }\n })}\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const FactGridComponent = FactGrid;\nexport default withLibTheme(FactGrid);\n","import React from 'react';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport styled from 'styled-components';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { spacings, getColors as color, mq } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\n\nconst FactsContainer = styled.ul`\n padding: 0;\n margin: 0;\n\n list-style-type: none;\n\n & > * + * {\n margin-top: ${spacings.nudge}px;\n }\n`;\n\nconst FactItem = styled.li<{ hasText?: boolean; hasBack?: boolean }>`\n padding: ${spacings.nudge * 2}px;\n\n background: ${({ theme, hasBack }) =>\n hasBack ? color(theme).elementBg.light : color(theme).elementBg.medium};\n\n display: flex;\n flex-direction: row;\n align-items: ${({ hasText }) => (hasText ? 'flex-start' : 'center')};\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 3}px;\n }\n`;\n\nconst Icon = styled.img`\n margin-right: ${spacings.nudge * 3}px;\n display: block;\n max-width: ${spacings.nudge * 5}px;\n\n @media ${mq.medium} {\n margin-right: ${spacings.spacer}px;\n }\n`;\n\nconst ContentBlock = styled.div`\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Description = styled(Copy)`\n max-width: 880px;\n`;\n\nconst FactList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array with fact item data */\n facts?: Array<{\n label?: string;\n text?: string;\n }>;\n\n /** Icon for each fact item */\n icon?: { src: string; alt?: string };\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, facts, icon, bgMode }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBack = isInverted || bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode === 'full'\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {facts && (\n <FactsContainer>\n {facts.map(({ label, text }, i) => {\n return (\n <FactItem\n key={i}\n hasText={!!text}\n hasBack={hasBack}\n >\n {icon && (\n <Icon\n src={icon.src}\n alt={icon.alt || ''}\n />\n )}\n <ContentBlock>\n {label && (\n <Copy type=\"copy-b\">{label}</Copy>\n )}\n {text && (\n <Description\n type=\"copy\"\n innerHTML={text}\n />\n )}\n </ContentBlock>\n </FactItem>\n );\n })}\n </FactsContainer>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const FactListComponent = FactList;\nexport default withLibTheme(FactList);\n","import React, { forwardRef } from 'react';\nimport styled, { css } from 'styled-components';\nimport {\n mq,\n spacings,\n getGlobals as global,\n getFonts as font,\n} from 'utils/styles';\n\nimport Copy, { copyStyle } from 'components/typography/Copy';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Link, { LinkProps } from 'components/typography/Link';\n\nconst View = styled.div<{ isCentered?: boolean }>`\n min-width: 270px;\n padding-bottom: ${spacings.nudge}px;\n text-align: ${({ isCentered }) => isCentered && 'center'};\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst TitleLink = styled(Link)<{ href?: string }>`\n display: inline-block;\n ${copyStyle('copy-b', 'big')}\n\n color: ${({ theme, isInverted }) =>\n isInverted\n ? font(theme)['copy-b'].big.colorInverted\n : font(theme)['copy-b'].big.color};\n text-decoration: none;\n\n ${({ href, isInverted, theme }) =>\n !href &&\n css`\n &:hover {\n color: ${isInverted\n ? font(theme)['copy-b'].big.colorInverted\n : font(theme)['copy-b'].big.color};\n }\n `}\n`;\n\nconst ImageContainer = styled(Link)<{ isCentered?: boolean }>`\n display: flex;\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n width: 100%;\n`;\n\nconst StyledImage = styled(Image)`\n overflow: hidden;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n`;\n\nconst ArticleContent = styled.div<{ isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n\n @media ${mq.medium} {\n & > * {\n max-width: 95%;\n margin-right: ${({ isCentered }) => isCentered && 'auto'};\n margin-left: ${({ isCentered }) => isCentered && 'auto'};\n }\n }\n`;\n\nconst Action = styled.div`\n max-width: 100%;\n`;\n\nexport interface FeatureProps {\n /** Invert color and background for darker themes */\n isInverted?: boolean;\n\n /** Center all texts */\n isCentered?: boolean;\n\n /** Image on item's top */\n image?: ImageProps;\n\n /** Item title text underneath the image */\n title?: string;\n\n /** Small item description text (richtext) */\n description?: string;\n\n /** Item intro text (partial richtext cause it's always bold) */\n intro?: string;\n\n /** Item's main text (richtext) */\n text?: string;\n\n /** Item link settings */\n link?: LinkProps;\n\n /** Function to inject custom primary button */\n action?: (isInverted?: boolean) => React.ReactNode;\n}\n\nconst Feature = forwardRef<\n HTMLDivElement,\n FeatureProps & {\n className?: string;\n }\n>(\n (\n {\n title,\n description,\n intro,\n text,\n link,\n image,\n isInverted = false,\n isCentered = false,\n action,\n className,\n },\n ref\n ) => {\n return (\n <View ref={ref} isCentered={isCentered} className={className}>\n {image?.small && (\n <ImageContainer {...link} isCentered={isCentered}>\n <StyledImage\n small={image.small}\n medium={image.medium}\n semilarge={image.semilarge}\n large={image.large}\n xlarge={image.xlarge}\n alt={image.alt}\n ratios={image.ratios}\n coverSpace={\n image.coverSpace === undefined\n ? true\n : image.coverSpace\n }\n isInverted={isInverted}\n />\n </ImageContainer>\n )}\n <TitleLink\n {...link}\n isInverted={isInverted}\n ariaLabel={title}\n data-sheet=\"title\"\n >\n {title}\n </TitleLink>\n <Copy\n size=\"small\"\n isInverted={isInverted}\n data-sheet=\"desc\"\n innerHTML={description}\n />\n <ArticleContent isCentered={isCentered}>\n <Copy\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n data-sheet=\"intro\"\n />\n <Copy\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n innerHTML={text}\n data-sheet=\"text\"\n />\n </ArticleContent>\n {action && <Action>{action(isInverted)}</Action>}\n </View>\n );\n }\n);\n\nFeature.displayName = 'Feature';\n\nexport default Feature;\n","import React, { useMemo } from 'react';\n\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Feature, { FeatureProps } from 'components/blocks/Feature';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport Grid from 'components/base/Grid';\n\nconst FeatureList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Center texts in every feature item */\n isCentered?: boolean;\n\n /** Array with feature item content */\n features?: FeatureProps[];\n\n /** If not defined the component falls back to legacy logic: Uneven items = max 3 per row, even items = max 2 per row */\n columns?: 2 | 3;\n\n /** Section background */\n bgMode?: 'full' | 'splitted' | 'inverted';\n}> = ({ anchorId, features, bgMode, isCentered = false, columns }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const featureCount = features?.length || 0;\n\n const isHalf = useMemo(() => {\n if (columns) {\n return columns === 2;\n }\n\n // legacy logic\n return features && features.length % 2 === 0;\n }, [features, columns]);\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight<HTMLDivElement>({\n listLength: featureCount,\n identifiers: [\n '[data-sheet=\"title\"]',\n '[data-sheet=\"desc\"]',\n '[data-sheet=\"intro\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: isHalf ? 2 : 3,\n xlarge: isHalf ? 2 : 3,\n },\n });\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper addWhitespace clampWidth=\"normal\">\n <Grid.Row\n halign={isHalf || featureCount <= 2 ? 'center' : 'left'}\n >\n {features?.map((feature, i) => (\n <Grid.Col\n semilarge={{ span: 6 / 12 }}\n large={{\n span: isHalf ? 5 / 12 : 4 / 12,\n }}\n key={i}\n >\n <Feature\n ref={cardRefs[i]}\n {...feature}\n isCentered={isCentered}\n isInverted={isInverted}\n />\n </Grid.Col>\n ))}\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const FeatureListComponent = FeatureList;\nexport default withLibTheme(FeatureList);\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport { getGlobals as global } from 'utils/styles';\nimport Grid from 'components/base/Grid';\n\nconst StyledImage = styled(Image)`\n width: 100%;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n overflow: hidden;\n\n picture > img {\n width: 100%;\n height: 100%;\n }\n`;\n\ntype ImageType = Omit<ImageProps, 'coverSpace'> & { isFull?: boolean };\n\nconst Gallery: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of image settings */\n images?: Array<ImageType>;\n\n /** Section background */\n bgMode?: 'full' | 'splitted' | 'inverted';\n}> = ({ anchorId, bgMode, images }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper addWhitespace>\n <Grid.Row>\n {images?.map((img, i) => (\n <Grid.Col\n key={i}\n semilarge={{\n span: img.isFull ? 12 / 12 : 6 / 12,\n }}\n >\n <StyledImage\n {...img}\n coverSpace\n isInverted={isInverted}\n />\n </Grid.Col>\n ))}\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const GalleryComponent = Gallery;\nexport default withLibTheme(Gallery);\n","import React, { FC } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { CalloutTag } from 'components/typography/Callout';\nimport { mq, spacings, withRange } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport HeaderKenBurns from './HeaderKenBurns';\nimport HeaderPoster from './HeaderPoster';\nimport Actions from 'components/blocks/Actions';\nimport HeaderVideo from './HeaderVideo';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { ImageProps } from 'components/blocks/Image';\nimport {\n generateNavbarIdent as genIdent,\n getFullNavbarHeights as getNavHeight,\n} from '../navigation/Navigation';\n\nconst Poster: FC<{\n isInverted?: boolean;\n videoUrl?: string;\n images?: Omit<ImageProps, 'ratios' | 'coverSpace'>[];\n focus?: HeaderFocus;\n kenBurnsZoom?: number;\n kenBurnsZoomPoint?: [number, number];\n kenBurnsInterval?: number;\n onImageChange?: (image?: Omit<ImageProps, 'ratios' | 'coverSpace'>) => void;\n className?: string;\n children?: React.ReactNode;\n}> = ({\n isInverted,\n videoUrl,\n images,\n focus,\n kenBurnsZoom,\n kenBurnsZoomPoint,\n kenBurnsInterval,\n onImageChange,\n className,\n children,\n}) => {\n switch (true) {\n case !!videoUrl: {\n return (\n <HeaderVideo\n isInverted={isInverted}\n videoUrl={videoUrl}\n focus={focus}\n placeholderImg={images?.[0]}\n className={className}\n >\n {children}\n </HeaderVideo>\n );\n }\n\n case images && images.length > 1: {\n return (\n <HeaderKenBurns\n images={images || []}\n zoom={kenBurnsZoom}\n zoomPoint={kenBurnsZoomPoint}\n interval={kenBurnsInterval}\n onImageChange={onImageChange}\n className={className}\n >\n {children}\n </HeaderKenBurns>\n );\n }\n\n // single image\n case images && images.length === 1: {\n return (\n <HeaderPoster\n isInverted={isInverted}\n bgImage={images?.[0]}\n focus={focus}\n className={className}\n >\n {children}\n </HeaderPoster>\n );\n }\n\n default: {\n return <div>{children}</div>;\n }\n }\n};\n\nconst genHeightStyles = (isFull: boolean) => css`\n // Doing some crazy shit to calculate curent navbar height in CSS\n ${({ theme }) => {\n // navbar main only\n const mainIdent = genIdent({\n pageFlow: 'beforeContent',\n hasMain: true,\n });\n\n // navbar main and top\n const mainTopIdent = genIdent({\n pageFlow: 'beforeContent',\n hasMain: true,\n hasTop: true,\n });\n\n // navbar main and bottom\n const mainBottomIdent = genIdent({\n pageFlow: 'beforeContent',\n hasMain: true,\n hasBottom: true,\n });\n\n // full navbar with all bars\n const fullIdent = genIdent({\n pageFlow: 'beforeContent',\n hasTop: true,\n hasMain: true,\n hasBottom: true,\n });\n\n const navMainHeight = getNavHeight(theme, mainIdent).large;\n const navMainTopHeight = getNavHeight(theme, mainTopIdent).large;\n const navMainBottomHeight = getNavHeight(theme, mainBottomIdent).large;\n const navFullHeight = getNavHeight(theme, fullIdent).large;\n\n const mapToSelector = (idents: string[]) => {\n return idents.map((id) => `[data-navbar-ident*='${id}']`).join('');\n };\n\n const refHeight = isFull ? '100vh' : '80vh';\n\n return css`\n & > ${StyledPoster} {\n min-height: 500px;\n height: ${refHeight};\n }\n\n // with main navbar element\n header${mapToSelector(mainIdent.split('-'))} + & {\n & > ${StyledPoster} {\n height: calc(${refHeight} - ${navMainHeight[0]}px);\n }\n }\n\n // with main and top navbar elements\n header${mapToSelector(mainTopIdent.split('-'))} + & {\n & > ${StyledPoster} {\n height: calc(${refHeight} - ${navMainTopHeight[0]}px);\n }\n }\n\n // with main and bottom navbar elements\n header${mapToSelector(mainBottomIdent.split('-'))} + & {\n & > ${StyledPoster} {\n height: calc(${refHeight} - ${navMainBottomHeight[0]}px);\n }\n }\n\n // with all navbar elements\n header${mapToSelector(fullIdent.split('-'))} + & {\n & > ${StyledPoster} {\n height: calc(${refHeight} - ${navFullHeight[0]}px);\n }\n }\n\n @media ${mq.semilarge} {\n // with main navbar element\n header${mapToSelector(mainIdent.split('-'))} + & {\n & > ${StyledPoster} {\n height: calc(${refHeight} - ${navMainHeight[1]}px);\n }\n }\n\n // with main and top navbar elements\n header${mapToSelector(mainTopIdent.split('-'))} + & {\n & > ${StyledPoster} {\n height: calc(${refHeight} - ${navMainTopHeight[1]}px);\n }\n }\n\n // with main and bottom navbar elements\n header${mapToSelector(mainBottomIdent.split('-'))} + & {\n & > ${StyledPoster} {\n height: calc(\n ${refHeight} - ${navMainBottomHeight[1]}px\n );\n }\n }\n\n // with all navbar elements\n header${mapToSelector(fullIdent.split('-'))} + & {\n & > ${StyledPoster} {\n height: calc(${refHeight} - ${navFullHeight[1]}px);\n }\n }\n }\n `;\n }}\n`;\n\nconst HeaderSection = styled(Section)`\n position: relative;\n ${genHeightStyles(true)}\n\n header + & {\n ${withRange([0], 'padding-top')}\n ${withRange([0], 'margin-top')}\n }\n`;\n\nconst HeaderSectionSmall = styled(Section)`\n position: relative;\n ${genHeightStyles(false)}\n\n header + & {\n ${withRange([0], 'padding-top')}\n ${withRange([0], 'margin-top')}\n }\n`;\n\nconst StyledPoster = styled(Poster)`\n position: relative;\n height: 100vh;\n max-height: 1300px;\n max-width: ${spacings.wrapperLarge}px;\n margin: 0 auto;\n`;\n\nconst Overlay = styled.div<{ bgValue?: string; textOnImage?: boolean }>`\n display: ${({ textOnImage }) => (textOnImage ? 'block' : 'none')};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: ${({ bgValue }) => bgValue && bgValue};\n z-index: 2;\n\n @media ${mq.medium} {\n display: block;\n }\n`;\n\nconst Content = styled.div<{ isCentered?: boolean; textOnImage?: boolean }>`\n display: none;\n max-width: ${spacings.wrapper}px;\n margin: 0 auto;\n\n ${({ textOnImage, isCentered }) =>\n textOnImage &&\n css`\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: ${isCentered && 'center'};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: ${spacings.spacer}px;\n z-index: 2;\n\n & > * {\n margin-top: ${spacings.spacer}px;\n max-width: 880px;\n }\n `}\n\n @media ${mq.medium} {\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: ${({ isCentered }) => isCentered && 'center'};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: ${spacings.spacer * 2}px;\n z-index: 2;\n\n & > * {\n margin-top: ${spacings.spacer}px;\n max-width: 880px;\n }\n }\n`;\n\nconst ContentMobile = styled.div`\n padding: ${spacings.spacer}px ${spacings.nudge * 2}px;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n display: none;\n }\n`;\n\nconst Title = styled(Heading)<{ isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n\n @media ${mq.medium} {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 3; /* number of lines to show */\n line-clamp: 3;\n -webkit-box-orient: vertical;\n }\n`;\n\nconst Text = styled(Copy)<{ isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 4; /* number of lines to show */\n line-clamp: 4;\n -webkit-box-orient: vertical;\n`;\n\nconst StyledActions = styled(Actions)<{ isCentered?: boolean }>`\n @media ${mq.medium} {\n display: block;\n text-align: ${({ isCentered }) => isCentered && 'center'};\n }\n`;\n\nexport type HeaderSize = 'full' | 'small';\nexport type HeaderImage = Omit<ImageProps, 'ratios' | 'coverSpace'> & {\n zoomPoint?: [number, number];\n zoom?: number;\n};\nexport type HeaderFocus = [\n 'left' | 'center' | 'right',\n 'top' | 'center' | 'bottom'\n];\n\nconst Header: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Header image height size (full=100vh, small=80vh) */\n size?: HeaderSize;\n\n /** Focus point of header image / video */\n focusPoint?: HeaderFocus;\n\n /** Center content */\n isCentered?: boolean;\n\n /** Header title on image */\n title?: string;\n\n /** Header title HTML tag type (h2, h3, h4...) */\n titleAs?: CalloutTag;\n\n /** Header text on image */\n text?: string;\n\n /** Force text on image on all screen widths */\n textOnImage?: boolean;\n\n /** Function to inject custom primary button */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Function to inject custom secondary button */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Array of image settings */\n images?: HeaderImage[];\n\n /** CSS value of custom image overlay to help seperate the text from the background */\n customImgOverlay?: string;\n\n /** URL to header video. First image in images array can be used as fallback */\n videoUrl?: string;\n\n /** Ken burns effect zoom */\n kenBurnsZoom?: number;\n\n /** Global zoom point for all images with ken burns effect. x and y values in the range from 0 - 1 */\n kenBurnsZoomPoint?: [number, number];\n\n /** Time between each image in ken burns mode */\n kenBurnsInterval?: number;\n\n /** Callback called on image change */\n onImageChange?: (image?: Omit<ImageProps, 'ratios' | 'coverSpace'>) => void;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({\n anchorId,\n size = 'full',\n focusPoint = ['center', 'center'],\n isCentered,\n title,\n titleAs,\n text,\n primaryAction,\n secondaryAction,\n videoUrl,\n images,\n customImgOverlay,\n kenBurnsZoom = 1.08,\n kenBurnsZoomPoint = [0.5, 0.5],\n kenBurnsInterval = 10000,\n onImageChange,\n bgMode,\n textOnImage,\n}) => {\n const { globals, colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasContent = title || text || primaryAction || secondaryAction;\n\n const overlay = hasContent\n ? customImgOverlay || globals.sections.imageTextGradient\n : undefined;\n\n const Section = size === 'full' ? HeaderSection : HeaderSectionSmall;\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <StyledPoster\n isInverted={isInverted}\n images={images}\n videoUrl={videoUrl}\n kenBurnsInterval={kenBurnsInterval}\n kenBurnsZoom={kenBurnsZoom}\n kenBurnsZoomPoint={kenBurnsZoomPoint}\n onImageChange={onImageChange}\n focus={focusPoint}\n >\n {hasContent && (\n <React.Fragment>\n <Overlay bgValue={overlay} textOnImage={textOnImage} />\n <Content\n isCentered={isCentered}\n textOnImage={textOnImage}\n >\n {title && (\n <Title\n isInverted\n size=\"heading-1\"\n isCentered={isCentered}\n renderAs={titleAs}\n innerHTML={title}\n />\n )}\n {text && (\n <Text\n isInverted\n isCentered={isCentered}\n type=\"copy-b\"\n size=\"big\"\n innerHTML={text}\n />\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n isCentered={isCentered}\n primary={\n primaryAction && primaryAction(true)\n }\n secondary={\n secondaryAction && secondaryAction(true)\n }\n />\n )}\n </Content>\n </React.Fragment>\n )}\n </StyledPoster>\n {hasContent && !textOnImage && (\n <ContentMobile>\n {title && (\n <Title\n size=\"heading-1\"\n isCentered={isCentered}\n renderAs={titleAs}\n innerHTML={title}\n isInverted={isInverted}\n />\n )}\n {text && (\n <Text\n type=\"copy-b\"\n size=\"big\"\n isCentered={isCentered}\n innerHTML={text}\n isInverted={isInverted}\n />\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n isCentered={isCentered}\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </ContentMobile>\n )}\n </Section>\n );\n};\n\nexport const HeaderComponent = Header;\nexport default withLibTheme(Header);\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\n\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { mq, spacings, getColors as color } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\nimport Pointer from 'components/buttons/Pointer';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport Image from 'components/blocks/Image';\n\nconst StyledSection = styled(Section)<{ isCentered?: boolean }>`\n margin: 0 auto;\n\n @media ${mq.semilarge} {\n margin: ${({ isCentered }) => (isCentered ? '0 auto' : '0')};\n\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n }\n`;\n\nconst ItemContainer = styled.div<{ isCentered?: boolean }>`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n text-align: center;\n\n &:not(:last-child) {\n margin-bottom: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n }\n`;\n\nconst Items = styled.ul<{ isVisible?: boolean; isCentered?: boolean }>`\n display: ${({ isVisible }) => (isVisible ? 'flex' : 'block')};\n align-items: center;\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n\n flex-wrap: wrap;\n padding: 0;\n margin: 0;\n margin-top: -${spacings.nudge * 2}px;\n margin-left: -${spacings.nudge * 2}px;\n\n list-style: none;\n\n @media ${mq.medium} {\n margin-top: -${spacings.spacer}px;\n margin-left: -${spacings.spacer}px;\n\n & > * {\n flex: 0 1 auto;\n }\n }\n`;\n\nconst Item = styled.li<{\n isVisible?: boolean;\n index: number;\n}>`\n padding-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge * 2}px;\n\n display: ${({ index, isVisible }) =>\n isVisible || index < 6 ? 'block' : 'none'};\n\n & > img {\n width: 100%;\n }\n\n @media ${mq.medium} {\n padding-top: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n\n & > img {\n width: auto;\n }\n }\n\n @media ${mq.semilarge} {\n display: ${({ index, isVisible }) =>\n isVisible || index < 8 ? 'block' : 'none'};\n }\n\n @media ${mq.large} {\n display: ${({ index, isVisible }) =>\n isVisible || index < 10 ? 'block' : 'none'};\n }\n`;\n\nconst ItemLink = styled(Link)<{ isInverted?: boolean }>`\n display: block;\n outline-color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n`;\n\nconst ShowMore = styled.div<{ itemCount?: number; isCentered?: boolean }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 6 ? 'block' : 'none'};\n\n background: none;\n border: none;\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n\n @media ${mq.semilarge} {\n display: ${({ itemCount }) =>\n itemCount && itemCount > 8 ? 'block' : 'none'};\n }\n\n @media ${mq.large} {\n display: ${({ itemCount }) =>\n itemCount && itemCount > 10 ? 'block' : 'none'};\n }\n`;\n\nconst StyledActions = styled(Actions)<{ isCentered?: boolean }>`\n margin-top: ${spacings.spacer}px;\n\n @media ${mq.medium} {\n display: block;\n text-align: ${({ isCentered }) => isCentered && 'center'};\n }\n`;\n\nexport interface IconListItem {\n src: string;\n alt?: string;\n link?: LinkProps;\n ratio?: { h: number; w: number };\n showPlaceholder?: boolean;\n}\n\nconst IconList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array with icon items data */\n items?: Array<IconListItem>;\n\n /** Function to inject custom primary button */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Function to inject custom secondary button */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Function to inject custom toggle button */\n toggle?: (props: {\n isInverted?: boolean;\n isToggled?: boolean;\n showLessText?: string;\n showMoreText?: string;\n clickHandler?: (ev?: React.SyntheticEvent<HTMLButtonElement>) => void;\n additionalProps?: Record<string, any>;\n }) => React.ReactNode;\n\n /** Custom text for toggle button in folded state */\n showMoreText?: string;\n\n /** Custom text for toggle button in expanded state */\n showLessText?: string;\n\n /** Center all icons and texts */\n isCentered?: boolean;\n\n /** Enable toggle feature */\n enableToggle?: boolean;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({\n anchorId,\n items,\n isCentered = false,\n primaryAction,\n secondaryAction,\n toggle,\n showLessText = 'show less',\n showMoreText = 'show more',\n enableToggle,\n bgMode,\n}) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const [showMore, setShowMore] = useState<boolean>(!enableToggle);\n\n const handleToggleClick = () => {\n setShowMore((prev) => !prev);\n };\n\n return (\n <StyledSection\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n isCentered={isCentered}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <ItemContainer isCentered={isCentered}>\n <Items\n isVisible={!showMore ? true : showMore === true}\n isCentered={isCentered}\n >\n {items?.map(\n ({ src, link, alt, ratio, showPlaceholder }, i) => (\n <Item isVisible={showMore} index={i} key={i}>\n <ItemLink\n {...link}\n isInverted={isInverted}\n ariaLabel={alt}\n >\n <Image\n data-img-loaded={false}\n isInverted={isInverted}\n small={src}\n alt={alt}\n ratios={\n ratio\n ? { small: ratio }\n : undefined\n }\n showPlaceholder={showPlaceholder}\n />\n </ItemLink>\n </Item>\n )\n )}\n </Items>\n </ItemContainer>\n {enableToggle && (\n <ShowMore\n isCentered={isCentered}\n itemCount={items?.length || 0}\n >\n {toggle ? (\n toggle({\n isInverted,\n showLessText,\n showMoreText,\n isToggled: showMore,\n clickHandler: handleToggleClick,\n additionalProps: { 'aria-pressed': showMore },\n })\n ) : (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n aria-pressed={showMore}\n onClick={() => handleToggleClick()}\n >\n <Pointer.Label>\n {showMore ? showLessText : showMoreText}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n )}\n\n {(primaryAction || secondaryAction) && (\n <StyledActions\n isCentered={isCentered}\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </StyledSection>\n );\n};\n\nexport const IconListComponent = IconList;\nexport default withLibTheme(IconList);\n","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { copyStyle } from 'components/typography/Copy';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { getColors as color, spacings } from 'utils/styles';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport ArrowDown from 'components/base/icons/ArrowDown';\nimport { useScrollTo } from 'utils/useScrollTo';\nimport { getFullNavbarHeights, getNavbarState } from './navigation/Navigation';\nimport { useMediaQueries } from 'utils/useMediaQuery';\n\nconst List = styled.ul<{ hasBg?: boolean; isInverted?: boolean }>`\n margin: 0;\n padding: 0;\n list-style: none;\n\n max-width: 880px;\n\n & > li + li {\n border-top: 1px solid\n ${({ theme, hasBg, isInverted }) =>\n hasBg && !isInverted\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n\n & > li:first-child {\n border-top: 1px solid\n ${({ theme, hasBg, isInverted }) =>\n hasBg && !isInverted\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n\n & > li:last-child {\n border-bottom: 1px solid\n ${({ theme, hasBg, isInverted }) =>\n hasBg && !isInverted\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n }\n`;\n\nconst ListItem = styled.li``;\n\nconst IndexLink = styled(Link)<{ isInverted?: boolean }>`\n display: inline-flex;\n align-items: center;\n max-width: 100%;\n padding: ${spacings.nudge}px 0;\n\n ${copyStyle('copy', 'big')}\n`;\n\nconst LinkLabel = styled.span`\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst IconWrapper = styled.span`\n display: inline-block;\n\n margin-left: ${spacings.nudge * 2}px;\n`;\n\nexport interface IndexItem {\n label?: string;\n link?: LinkProps;\n}\n\nconst IndexList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of index item settings */\n items?: IndexItem[];\n\n /** Section background */\n bgMode?: 'inverted' | 'full';\n\n /** Function to inject custom icon decorator */\n customIcon?: (props: { isInverted?: boolean }) => React.ReactNode;\n\n /** Top offset for scroll to clicked item. Default: auto */\n scrollToOffset?: number;\n}> = ({ anchorId, items, bgMode, customIcon, scrollToOffset }) => {\n const { colors, theme } = useLibTheme();\n const setTargetPos = useScrollTo(500);\n const { semilarge } = useMediaQueries();\n\n const [topOffset, setTopOffset] = useState<number>(0);\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const handleLinkClick = (ev: React.SyntheticEvent<HTMLAnchorElement>) => {\n if (!ev?.currentTarget) return;\n\n ev.preventDefault();\n const href = ev.currentTarget.getAttribute('href') as string;\n\n if (!href) return;\n\n const target = document.getElementById(href.split('#')?.[1] || href);\n if (target) {\n setTargetPos(\n target.getBoundingClientRect().top +\n window.scrollY -\n (scrollToOffset || topOffset)\n );\n }\n\n if (window) {\n const url = new URL(window.location as any);\n url.hash = href.split('#')[1];\n window.history.pushState({}, '', url as any);\n }\n };\n\n useEffect(() => {\n if (scrollToOffset) return;\n\n // if header is defined get navbar height and generate top offset\n const header = document.querySelector('header[data-navbar-ident]');\n const navbarIdent = header?.getAttribute('data-navbar-ident');\n if (!navbarIdent) return;\n\n const { isStickable } = getNavbarState(navbarIdent);\n if (!isStickable) return;\n\n // calculate offset from navbar height\n const navbarHeights = getFullNavbarHeights(theme, navbarIdent);\n\n if (semilarge) setTopOffset(navbarHeights.small[1] + spacings.spacer);\n else setTopOffset(navbarHeights.small[0] + spacings.spacer);\n }, [theme, semilarge, scrollToOffset]);\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <List hasBg={hasBg} isInverted={isInverted}>\n {items?.map((item, i) => (\n <ListItem key={i}>\n <IndexLink\n {...item.link}\n isInverted={isInverted}\n onClick={handleLinkClick}\n >\n <LinkLabel>{item.label}</LinkLabel>\n <IconWrapper>\n {customIcon ? (\n customIcon({ isInverted })\n ) : (\n <ArrowDown />\n )}\n </IconWrapper>\n </IndexLink>\n </ListItem>\n ))}\n </List>\n </Wrapper>\n </Section>\n );\n};\n\nexport const IndexListComponent = IndexList;\nexport default withLibTheme(IndexList);\n","import React from 'react';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport IntroBlock from 'components/blocks/IntroBlock';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { ImageProps } from 'components/blocks/Image';\nimport { TitleSize } from 'components/blocks/Title';\n\nconst Intro: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Main title text */\n title?: string;\n\n /** Main title HTML tag type (h2, h3, h4...) */\n titleAs?: HeadlineTag;\n\n /** Main title style */\n titleSize?: TitleSize;\n\n /** Superior title that stands above main title */\n superTitle?: string;\n\n /** Superior title HTML tag type (h3, h4 ...) */\n superTitleAs?: HeadlineTag;\n\n /** Intro text under headline (richtext) */\n abstract?: string;\n\n /** Main text (richtext) */\n text?: string;\n\n /** Images for different screen sizes. coverSpace defaults to true */\n image?: ImageProps;\n\n /** Function to inject custom primary button */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Function to inject custom secondary button */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Center text and actions */\n isCentered?: boolean;\n\n /** Allow reduced section spacing to next section */\n isStackable?: boolean;\n\n /** Clamp title to a width of max 8 grid cols. */\n clampTitle?: boolean;\n\n /** Section background */\n bgMode?: 'inverted' | 'full' | 'splitted';\n className?: string;\n}> = ({\n anchorId,\n title,\n titleAs,\n titleSize = 'heading-2',\n superTitle,\n superTitleAs,\n abstract,\n text,\n primaryAction,\n secondaryAction,\n isCentered = false,\n isStackable = false,\n bgMode,\n image,\n}) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n\n // set default ratio settings\n if (image && !image?.ratios) {\n image.ratios = {\n small: { h: 1, w: 1 },\n };\n }\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n isStackable={isStackable}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <IntroBlock\n title={title}\n titleAs={titleAs}\n titleSize={titleSize}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n abstract={abstract}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n isCentered={isCentered}\n image={image}\n clampTitle\n clampAbstract\n clampText\n />\n </Wrapper>\n </Section>\n );\n};\n\nexport const IntroComponent = Intro;\nexport default withLibTheme(Intro);\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n mq,\n spacings,\n getColors as color,\n getFonts as font,\n getGlobals as global,\n withRange,\n} from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Grid, { getGridWidth, gridSettings } from 'components/base/Grid';\nimport Wrapper, { wrapperWhitespace } from 'components/base/Wrapper';\n\nimport IntroBlock from 'components/blocks/IntroBlock';\n\nimport Copy, { copyStyle } from 'components/typography/Copy';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nimport Phone from 'components/base/icons/Phone';\nimport Mail from 'components/base/icons/Mail';\n\nimport { generateLocalBusiness } from 'utils/structuredData';\nimport Link from 'components/typography/Link';\nimport LocationPin from 'components/base/icons/LocationPin';\nimport Control from 'components/buttons/Control';\nimport * as Icons from 'icons';\nimport { getSVGDataImg as getSVGData } from 'utils/dataURI';\nimport useLeafletMap from 'utils/useLeafletMap';\nimport { isValidArray } from 'utils/arrays';\n\ninterface Address {\n street: string;\n postalCode: string;\n city?: string;\n country: string;\n}\n\nconst MapSection = styled(Section)`\n position: relative;\n min-height: 500px;\n z-index: 0;\n`;\n\nconst MapContainer = styled.div<{ isMirrored?: boolean }>`\n position: relative;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n z-index: 0;\n\n height: 100%;\n min-height: 230px;\n\n @media ${mq.semilarge} {\n position: absolute;\n /** \n calculate width of 6 grid cols (grid width = viewport width without wrapper paddings)\n and add left or right wrapper padding afterwards\n */\n width: calc(\n ${getGridWidth({\n cols: 6,\n gridWidth: `100% - ${wrapperWhitespace * 2}px `,\n })} + ${wrapperWhitespace}px\n );\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '0')};\n right: ${({ isMirrored }) => (isMirrored ? '0' : 'auto')};\n }\n\n @media ${mq.xlarge} {\n width: calc(50% - ${gridSettings.gutter}px ${wrapperWhitespace}px);\n }\n\n @media ${mq.xxlarge} {\n width: calc(\n ${spacings.wrapperLarge / 2}px - ${gridSettings.gutter}px +\n ${wrapperWhitespace}px\n );\n\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '50%')};\n right: ${({ isMirrored }) => (isMirrored ? '50%' : 'auto')};\n\n ${({ isMirrored }) =>\n css`\n transform: translateX(\n calc(\n ${isMirrored\n ? `(100% + ${gridSettings.gutter}px) - `\n : `(-100% - ${gridSettings.gutter}px) + `}\n (${wrapperWhitespace}px)\n )\n );\n `};\n }\n`;\n\nconst CardWrapper = styled(Wrapper)`\n pointer-events: none;\n`;\n\nconst CardContainer = styled.div<{ isMirrored?: boolean }>`\n display: flex;\n flex-direction: row;\n position: relative;\n width: 100%;\n pointer-events: all;\n\n ${({ theme }) =>\n withRange(\n global(theme).sections.seperation.padding.default,\n 'padding-bottom'\n )}\n\n @media ${mq.semilarge} {\n ${({ theme }) =>\n withRange(\n global(theme).sections.seperation.padding.default,\n 'padding-top'\n )}\n }\n`;\n\nconst InfoCardView = styled.div`\n min-height: 100px;\n pointer-events: all;\n\n flex: 1 0 80%;\n max-width: 80%;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst CardHeader = styled.div`\n display: flex;\n`;\n\nconst ContactList = styled.ul<{ isInverted?: boolean }>`\n padding: 0;\n list-style-type: none;\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).text.inverted : color(theme).text.default};\n\n li {\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0;\n margin: 0;\n }\n\n li + li {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n span:first-child {\n flex: 0 0 30px;\n max-width: 30px;\n\n & > * {\n max-width: 100%;\n }\n }\n`;\n\nconst ContactListLink = styled(Link)`\n display: block;\n\n ${copyStyle('copy-b', 'big')}\n color: ${({ theme, isInverted }) =>\n isInverted\n ? font(theme)['copy-b'].big.colorInverted\n : font(theme)['copy-b'].big.color};\n\n * + & {\n margin-left: ${spacings.nudge * 1.5}px;\n }\n`;\n\nconst AddressContainer = styled.div<{ hasIcon?: boolean }>`\n display: -ms-grid;\n display: grid;\n\n ${({ hasIcon }) => css`\n -ms-grid-columns: ${hasIcon ? 'min-content' : ''} 1fr;\n grid-template-columns: ${hasIcon ? 'min-content' : ''} 1fr;\n -ms-grid-rows: ${hasIcon ? 'min-content' : ''} 1fr;\n grid-auto-rows: ${hasIcon ? 'min-content' : ''} 1fr;\n `}\n\n & > * + * {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst CompanyInfo: FC<{\n isInverted?: boolean;\n companyName: string;\n address?: Address;\n customIcon?: (isInverted?: boolean) => React.ReactNode;\n}> = ({ isInverted, companyName, address, customIcon }) => {\n return (\n <AddressContainer hasIcon={!!customIcon}>\n {customIcon && <span> {customIcon()} </span>}\n <div>\n <Copy type=\"copy-b\" size=\"big\" isInverted={isInverted}>\n {companyName}\n </Copy>\n {address && (\n <Copy type=\"copy-b\" size=\"big\" isInverted={isInverted}>\n <div>{address.street}</div>\n <div>{`${address.postalCode} ${address.city}`}</div>\n <div>{address.country}</div>\n </Copy>\n )}\n </div>\n </AddressContainer>\n );\n};\n\nconst Desc = styled(Copy)`\n @media ${mq.semilarge} {\n margin-top: ${spacings.spacer * 2.5}px;\n }\n`;\n\nconst LocationInfoCard: FC<\n MapLocation & {\n isInverted?: boolean;\n }\n> = ({\n isInverted,\n title,\n titleAs,\n superTitle,\n superTitleAs,\n companyName,\n address,\n addressIcon,\n contact,\n description,\n}) => {\n const { colors } = useLibTheme();\n\n const addressIconContent = addressIcon ? (\n addressIcon({ isInverted })\n ) : (\n <LocationPin\n iconColor={isInverted ? colors.text.inverted : colors.text.default}\n />\n );\n\n const phoneIconContent = contact?.telephone?.icon ? (\n contact.telephone.icon({\n isInverted,\n })\n ) : (\n <Phone />\n );\n\n const mailIconContent = contact?.email?.icon ? (\n contact.email.icon({ isInverted })\n ) : (\n <Mail />\n );\n\n return (\n <InfoCardView>\n <CardHeader>\n <IntroBlock\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n />\n </CardHeader>\n {companyName && (\n <CompanyInfo\n companyName={companyName || ''}\n address={address}\n customIcon={\n addressIconContent\n ? () => addressIconContent\n : undefined\n }\n isInverted={isInverted}\n />\n )}\n {contact && (\n <ContactList isInverted={isInverted}>\n {contact?.telephone?.label && (\n <li>\n {phoneIconContent && (\n <span>{phoneIconContent}</span>\n )}\n <ContactListLink\n isInverted={isInverted}\n href={`tel:${\n contact.telephone.link ||\n contact.telephone.label\n }`}\n >\n {contact.telephone?.label}\n </ContactListLink>\n </li>\n )}\n {contact?.email?.label && (\n <li>\n {mailIconContent && <span>{mailIconContent}</span>}\n <ContactListLink\n isInverted={isInverted}\n href={`mailto:${\n contact?.email.link || contact.email.label\n }`}\n >\n {contact?.email.label}\n </ContactListLink>\n </li>\n )}\n </ContactList>\n )}\n\n <Desc isInverted={isInverted} innerHTML={description} />\n </InfoCardView>\n );\n};\n\nconst Controls = styled.div`\n flex: 1 0 20%;\n max-width: 20%;\n display: flex;\n flex-direction: column;\n align-self: flex-start;\n margin-left: auto;\n text-align: right;\n\n & > * + * {\n margin-top: ${spacings.nudge}px;\n }\n`;\n\nconst FylToCtrlContainer = styled.button`\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1000;\n background: none;\n border: none;\n margin: 0;\n padding: 0;\n\n margin-top: ${spacings.spacer}px;\n margin-right: ${spacings.spacer}px;\n color: ${({ theme }) => color(theme).elementBg.dark};\n\n cursor: pointer;\n`;\n\nexport interface LocationIcon {\n url: string;\n size: [number, number];\n anchor: [number, number];\n\n sizeActive: [number, number];\n anchorActive: [number, number];\n}\n\nexport interface MapLocation {\n id: string;\n position: [number, number];\n icon?: LocationIcon;\n\n title?: string; // Rich Text\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n\n companyName?: string;\n address?: Address;\n addressIcon?: (props: { isInverted?: boolean }) => React.ReactNode;\n contact?: {\n telephone?: {\n link?: string;\n label?: string;\n icon?: (props: { isInverted?: boolean }) => React.ReactNode;\n };\n email?: {\n link?: string;\n label?: string;\n icon?: (props: { isInverted?: boolean }) => React.ReactNode;\n };\n };\n image?: string[];\n description?: string;\n}\n\nconst Map: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Switch horizontal order of map and location info text */\n isMirrored?: boolean;\n\n /** Map tile provider */\n provider?: string;\n\n /** Map attribution text (richtext) */\n attribution?: string;\n\n /** Initial center of the map */\n center?: [number, number];\n\n /** Initial map zoom */\n zoom?: number;\n\n /** Zoom if map jumps to location */\n flyToZoom?: number;\n\n /** Initial location */\n initialLocation?: string;\n\n /** Array of location settings */\n locations?: Array<MapLocation>;\n\n /** Show all markers on first load */\n allMarkersOnInit?: boolean;\n\n /** Map container padding for show all markers */\n fitBoundsPadding?: [number, number];\n\n /** Icon element for flight to the current active location */\n flyToControl?: React.ReactNode;\n\n /** Injection function to replace default control button */\n controlNext?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n clickHandler?: (ev: React.SyntheticEvent<HTMLButtonElement>) => void;\n }) => React.ReactNode;\n\n /** Injection function to replace default control button */\n controlPrev?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n clickHandler?: (ev: React.SyntheticEvent<HTMLButtonElement>) => void;\n }) => React.ReactNode;\n}> = ({\n anchorId,\n bgMode,\n isMirrored = false,\n provider,\n attribution,\n center = [51.505, -0.09],\n zoom = 5,\n flyToZoom,\n initialLocation,\n locations,\n allMarkersOnInit = false,\n fitBoundsPadding,\n flyToControl,\n controlNext,\n controlPrev,\n}) => {\n const { colors } = useLibTheme();\n\n const [activeLocationId, setActiveLocationId] = useState<string>(\n initialLocation || ''\n );\n const [isDirty, setIsDirty] = useState<boolean>(false);\n const activeLocation = useMemo(\n () => locations?.find((l) => l.id === activeLocationId),\n [activeLocationId, locations]\n );\n\n const hasBg = bgMode === 'full';\n const isInverted = bgMode === 'inverted';\n\n const defaultMarker: LocationIcon = {\n size: [28, 28],\n anchor: [14, 28],\n sizeActive: [70, 70],\n anchorActive: [35, 70],\n url: getSVGData(<LocationPin />),\n };\n const {\n isLoaded,\n setContainer: setMapContainer,\n flyToActive,\n showAllMarkers,\n } = useLeafletMap({\n url: provider,\n attribution,\n center,\n zoom,\n activeMarkerId: activeLocationId,\n markers: locations?.map(({ id, position, icon }) => ({\n id,\n position,\n icon: icon || defaultMarker,\n isInteractive: true,\n })),\n fitBoundsPadding,\n onMarkerClick: setActiveLocationId,\n });\n\n const goToNext = () => {\n setActiveLocationId((prev) => {\n if (!locations) return prev;\n const currentIndex = locations.findIndex(\n (l) => l.id === activeLocationId\n );\n if (currentIndex === -1) return prev;\n\n // get new index\n const newIndex = (currentIndex + 1) % locations.length;\n return locations[newIndex].id;\n });\n };\n\n const goToPrevious = () => {\n setActiveLocationId((prev) => {\n if (!locations) return prev;\n const currentIndex = locations.findIndex(\n (l) => l.id === activeLocationId\n );\n if (currentIndex === -1) return prev;\n\n // get new index\n const newIndex =\n currentIndex - 1 < 0 ? locations.length - 1 : currentIndex - 1;\n return locations[newIndex].id;\n });\n };\n\n useEffect(() => {\n if (isLoaded && !isDirty) {\n if (allMarkersOnInit) showAllMarkers();\n } else {\n flyToActive(flyToZoom);\n }\n }, [\n activeLocationId,\n allMarkersOnInit,\n flyToActive,\n flyToZoom,\n initialLocation,\n isDirty,\n isLoaded,\n showAllMarkers,\n ]);\n\n useEffect(() => {\n if (!isDirty && activeLocationId !== initialLocation) setIsDirty(true);\n }, [activeLocationId, initialLocation, isDirty]);\n\n return (\n <MapSection\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n {locations && generateLocalBusiness(locations)}\n <MapContainer ref={setMapContainer} isMirrored={isMirrored}>\n {flyToControl && (\n <FylToCtrlContainer\n onClick={(ev) => {\n ev.stopPropagation();\n flyToActive(flyToZoom);\n }}\n >\n {flyToControl}\n </FylToCtrlContainer>\n )}\n </MapContainer>\n\n <CardWrapper addWhitespace clampWidth=\"normal\">\n <Grid.Row>\n <Grid.Col\n semilarge={{\n span: 6 / 12,\n move: (isMirrored ? 6 : 0) / 12,\n }}\n ></Grid.Col>\n <Grid.Col\n semilarge={{\n span: 6 / 12,\n move: (isMirrored ? -6 : 0) / 12,\n }}\n >\n <CardContainer isMirrored={isMirrored}>\n {isValidArray(locations, false) && (\n <React.Fragment>\n {activeLocation && (\n <LocationInfoCard\n {...activeLocation}\n isInverted={isInverted}\n />\n )}\n {locations.length > 1 && (\n <Controls>\n {controlNext ? (\n controlNext({\n isInverted,\n isActive: true,\n clickHandler: goToNext,\n name: 'control_next_head',\n })\n ) : (\n <Control\n isInverted={isInverted}\n isDisabled={false}\n onClick={goToNext}\n >\n <Icons.ArrowRightGhost />\n </Control>\n )}\n {controlPrev ? (\n controlPrev({\n isInverted,\n isActive: true,\n clickHandler: goToPrevious,\n name: 'control_prev_head',\n })\n ) : (\n <Control\n isInverted={isInverted}\n isDisabled={false}\n onClick={goToPrevious}\n >\n <Icons.ArrowLeftGhost />\n </Control>\n )}\n </Controls>\n )}\n </React.Fragment>\n )}\n </CardContainer>\n </Grid.Col>\n </Grid.Row>\n </CardWrapper>\n </MapSection>\n );\n};\n\nexport const MapComponent = Map;\nexport default withLibTheme(Map);\n","import Copy from 'components/typography/Copy';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport React from 'react';\nimport styled from 'styled-components';\nimport { getColors as color, mq, spacings } from 'utils/styles';\n\nconst View = styled(Link)<{ isInverted?: boolean; hasIcon?: boolean }>`\n display: -ms-grid;\n display: grid;\n\n -ms-grid-columns: ${({ hasIcon }) => (hasIcon ? 'min-content 1fr' : '1fr')};\n grid-template-columns: ${({ hasIcon }) =>\n hasIcon ? 'min-content 1fr' : '1fr'};\n -ms-grid-rows: min-content 1fr;\n grid-auto-rows: min-content 1fr;\n\n cursor: pointer;\n text-decoration: none;\n color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n\n outline-color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n\n transition: all ease-in-out 0.2s;\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.invertedHover\n : color(theme).primary.hover};\n }\n }\n`;\n\nconst MainLabel = styled.div<{ hasIcon?: boolean }>`\n display: flex;\n align-items: center;\n margin-left: ${({ hasIcon }) => hasIcon && `${spacings.nudge * 3}px`};\n`;\n\nconst Text = styled(Copy)<{ hasIcon?: boolean }>`\n margin-top: ${({ hasIcon }) =>\n hasIcon ? spacings.nudge : spacings.nudge * 2}px;\n margin-left: ${({ hasIcon }) => hasIcon && `${spacings.nudge * 3}px`};\n`;\n\nconst Icon = styled.div`\n display: flex;\n align-items: center;\n\n & > * {\n height: 48px;\n width: 48px;\n }\n`;\n\nconst Title = styled(Copy)`\n display: inline-block;\n`;\n\nconst TitleIcon = styled.span`\n display: inline-block;\n margin-left: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n margin-left: ${spacings.nudge * 3}px;\n }\n`;\n\nexport interface NavBlockProps {\n /** Invert colors for use on dark backgrounds */\n isInverted?: boolean;\n\n /** Navigation title */\n title?: string;\n\n /** Navigation text (richtext) */\n text?: string;\n\n /** Link settings */\n link?: LinkProps;\n\n /** Function to inject custom icon node */\n customIcon?: (props: { isInverted?: boolean }) => React.ReactNode;\n\n /** Function to inject custom title icon decorator node */\n customTitleIcon?: (props: { isInverted?: boolean }) => React.ReactNode;\n\n className?: string;\n}\n\nconst NavBlock: React.FC<NavBlockProps> = ({\n isInverted = false,\n title,\n text,\n link,\n customIcon,\n customTitleIcon,\n className,\n}) => {\n return (\n <View\n {...link}\n isInverted={isInverted}\n hasIcon={!!customIcon}\n className={className}\n >\n {customIcon ? <Icon>{customIcon({})}</Icon> : ''}\n <MainLabel hasIcon={!!customIcon}>\n {title && (\n <Title textColor=\"inherit\" size=\"medium\" type=\"copy-b\">\n {title}\n {title && customTitleIcon && (\n <TitleIcon>\n {customTitleIcon({ isInverted })}\n </TitleIcon>\n )}\n </Title>\n )}\n </MainLabel>\n {text && (\n <>\n <span />\n <Text\n size=\"small\"\n isInverted={isInverted}\n innerHTML={text}\n hasIcon={!!customIcon}\n />\n </>\n )}\n </View>\n );\n};\n\nexport default NavBlock;\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport NavBlock, { NavBlockProps } from 'components/blocks/NavBlock';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { mq, spacings } from 'utils/styles';\n\nconst List = styled.ul`\n margin: 0;\n margin-top: -${spacings.spacer}px;\n margin-left: -${spacings.spacer}px;\n padding: 0;\n list-style: none;\n\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n flex-wrap: wrap;\n\n @media ${mq.medium} {\n margin-top: -${spacings.spacer * 2}px;\n }\n`;\n\nconst ListItem = styled.li`\n padding-top: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n flex: 1 0 100%;\n\n @media ${mq.medium} {\n flex: 0 0 50%;\n max-width: 50%;\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.large} {\n flex: 0 0 33.33%;\n max-width: 33.33%;\n }\n\n // print version\n @media print {\n flex: 0 0 50%;\n max-width: 50%;\n padding-top: ${spacings.spacer * 2}px;\n }\n`;\n\nexport type NavItem = Omit<\n NavBlockProps,\n 'isInverted' | 'customTitleIcon' | 'className'\n>;\n\nconst NavList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of navigation item settings */\n items?: NavItem[];\n\n /** Section backgrounds */\n bgMode?: 'full' | 'inverted';\n\n /** Function to inject custom title decorator icon */\n customTitleIcon?: (props: { isInverted?: boolean }) => React.ReactNode;\n}> = ({ anchorId, items, bgMode, customTitleIcon }) => {\n const { colors } = useLibTheme();\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <List>\n {items?.map((item, i) => (\n <ListItem key={i}>\n <NavBlock\n {...item}\n isInverted={isInverted}\n customTitleIcon={customTitleIcon}\n />\n </ListItem>\n ))}\n </List>\n </Wrapper>\n </Section>\n );\n};\n\nexport const NavListComponent = NavList;\nexport default withLibTheme(NavList);\n","import Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Callout from 'components/typography/Callout';\nimport Heading from 'components/typography/Heading';\nimport React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport { withLibTheme } from 'utils/LibThemeProvider';\n\nconst View = styled.div`\n text-align: center;\n\n & > * {\n margin: 0 auto;\n }\n\n @media ${mq.semilarge} {\n text-align: left;\n\n & > * {\n margin: 0;\n }\n }\n`;\n\nconst Icon = styled.img`\n display: block;\n max-width: 140px;\n max-height: 140px;\n\n margin-bottom: ${spacings.nudge * 2}px;\n`;\n\nconst NumberContainer = styled.div<{ height: number }>`\n max-width: max-content;\n min-height: 90px;\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n\n @media ${mq.semilarge} {\n min-height: 100px;\n }\n\n /* margin-bottom: ${spacings.nudge * 2}px; */\n\n @media ${mq.large} {\n min-height: 120px;\n }\n`;\n\nconst Number = styled(Callout)<{ isInverted?: boolean; stringLength: number }>`\n max-height: 140px;\n ${({ stringLength }) =>\n stringLength <= 6\n ? withRange([72, 120], 'font-size')\n : stringLength >= 10\n ? withRange([33, 42], 'font-size')\n : withRange([52, 72], 'font-size')}\n\n color: ${({ isInverted, theme }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n`;\n\nconst Label = styled(Heading)`\n max-width: 80%;\n`;\n\nconst IconBlock: React.FC<{\n icon?: { src: string; alt?: string };\n number?: string;\n label?: string;\n isInverted?: boolean;\n}> = ({ icon, label, number, isInverted }) => {\n const theme = useContext(ThemeContext);\n\n const stringLength = number ? number.length : 0;\n\n return (\n <View>\n {icon && <Icon src={icon.src} alt={icon.alt} />}\n <NumberContainer height={0}>\n <Number\n renderAs=\"div\"\n stringLength={stringLength}\n isInverted={isInverted}\n >\n {number}\n </Number>\n </NumberContainer>\n <Label\n size=\"super\"\n textColor={\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default\n }\n >\n {label}\n </Label>\n </View>\n );\n};\n\nconst ContentContainer = styled.div`\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n justify-content: space-between;\n flex-wrap: wrap;\n\n margin: -${spacings.spacer}px;\n margin-top: -${spacings.spacer * 2}px;\n\n @media ${mq.semilarge} {\n margin-top: -${spacings.spacer}px;\n }\n\n & > * {\n padding: ${spacings.spacer}px;\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.semilarge} {\n padding-top: ${spacings.spacer}px;\n }\n\n flex-basis: 100%;\n\n @media ${mq.semilarge} {\n flex: 0 0 50%;\n }\n\n @media ${mq.large} {\n flex: 0 1 33.33%;\n }\n }\n`;\n\nconst NumberList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n items?: {\n icon?: { src: string; alt?: string };\n number?: string;\n label?: string;\n }[];\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, items, bgMode }) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? color(theme).sectionBg.dark\n : hasBg\n ? color(theme).sectionBg.medium\n : color(theme).sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <ContentContainer>\n {items?.map((item, i) => {\n return (\n <IconBlock\n {...item}\n key={i}\n isInverted={isInverted}\n />\n );\n })}\n </ContentContainer>\n </Wrapper>\n </Section>\n );\n};\n\nexport const NumberListComponent = NumberList;\nexport default withLibTheme(NumberList);\n","import React, { FC, useEffect, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport { spacings } from 'utils/styles';\n\nconst View = styled.section`\n position: relative;\n width: 100vw;\n z-index: -1;\n`;\n\nconst Parallax = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n margin-left: 0;\n width: 100%;\n`;\n\nconst Content = styled.div<{\n contentWidth?: number;\n hAlign?: 'left' | 'center' | 'right';\n}>`\n margin-left: ${({ hAlign }) =>\n (hAlign === 'right' || hAlign === 'center') && 'auto'};\n margin-right: ${({ hAlign }) =>\n (hAlign === 'left' || hAlign === 'center') && 'auto'};\n\n width: ${({ contentWidth }) =>\n contentWidth\n ? contentWidth === -1\n ? 'auto'\n : contentWidth * 100 + '%'\n : undefined};\n\n max-width: ${spacings.wrapperLarge}px;\n overflow: hidden;\n\n & > * {\n width: ${({ contentWidth }) => contentWidth !== -1 && '100%'};\n }\n`;\n\nconst StyledImage = styled(Image)<{\n coverSpace?: boolean;\n hAlign?: 'left' | 'center' | 'right';\n}>`\n max-width: ${({ coverSpace }) => !coverSpace && 'none'};\n float: ${({ hAlign }) =>\n hAlign === 'left' || hAlign === 'right' ? hAlign : undefined};\n ${({ coverSpace, hAlign }) =>\n !coverSpace &&\n hAlign === 'center' &&\n css`\n transform: translateX(-50%);\n margin-left: 50%;\n `}\n`;\n\nexport type ParallaxWidth = '1/4' | 'half' | '3/4' | 'full' | 'auto';\n\nconst ParallaxBackground: FC<{\n image?: ImageProps;\n hAlign?: 'left' | 'center' | 'right';\n contentWidth?: ParallaxWidth | number;\n moveRatio?: number;\n direction?: 'down' | 'up';\n className?: string;\n}> = ({\n image,\n hAlign = 'left',\n contentWidth = 1,\n moveRatio = 0.2,\n direction = 'up',\n className,\n}) => {\n const [isLoaded, setIsLoaded] = useState<boolean>(false);\n const [yTransform, setYTransform] = useState<number>(0);\n // const cRef = useRef<HTMLDivElement>(null);\n const [cRef, setContainerRef] = useState<HTMLElement | null>(null);\n const parallaxRef = useRef<HTMLDivElement>(null);\n\n let width = 1;\n if (typeof contentWidth === 'string') {\n switch (contentWidth) {\n case '1/4': {\n width = 0.25;\n break;\n }\n\n case 'half': {\n width = 0.5;\n break;\n }\n\n case '3/4': {\n width = 0.75;\n break;\n }\n\n case 'auto': {\n width = -1;\n break;\n }\n\n default:\n case 'full': {\n width = 1;\n break;\n }\n }\n } else if (!isNaN(contentWidth)) {\n width = contentWidth;\n }\n\n useEffect(() => {\n setIsLoaded(true);\n }, []);\n\n useEffect(() => {\n const prevEl = cRef?.previousElementSibling;\n if (prevEl) {\n const bgIdent = (prevEl as HTMLElement).dataset.bgIdent;\n const stackIdent = (prevEl as HTMLElement).dataset.stackIdent;\n\n if (bgIdent) {\n // set data background from previous element\n cRef?.setAttribute('data-bg-ident', bgIdent);\n }\n\n if (stackIdent) {\n // set data stack flag from previous element\n cRef?.setAttribute('data-stack-ident', stackIdent);\n }\n }\n }, [cRef]);\n\n useEffect(() => {\n const handleScroll = () => {\n if (!cRef) return;\n\n const containerPos = cRef.getBoundingClientRect().top;\n const ratio = containerPos * moveRatio;\n const offset = ratio * (direction === 'up' ? 1 : -1);\n\n setYTransform(offset);\n };\n\n handleScroll();\n window.addEventListener('scroll', handleScroll);\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n };\n }, [cRef, direction, moveRatio]);\n\n return (\n <>\n {isLoaded && (\n <View ref={setContainerRef} data-bg-ident=\"transparent\">\n <Parallax\n ref={parallaxRef}\n style={{\n transform: `translate3d(0px, ${yTransform}px, 0px)`,\n }}\n className={className}\n >\n <Content hAlign={hAlign} contentWidth={width}>\n {image && (\n <StyledImage\n hAlign={hAlign}\n coverSpace={width !== -1}\n {...image}\n />\n )}\n </Content>\n </Parallax>\n </View>\n )}\n </>\n );\n};\n\nexport default ParallaxBackground;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper, { wrapperWhitespace } from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport { spacings, getGlobals as global } from 'utils/styles';\nimport IntroBlock from 'components/blocks/IntroBlock';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport { withLibTheme } from 'utils/LibThemeProvider';\n\nconst Container = styled.figure<{\n hasContent?: boolean;\n verticallyCentered?: boolean;\n}>`\n position: relative;\n width: 100%;\n max-height: 550px;\n padding: 0;\n margin: 0;\n\n &:after {\n content: ${({ hasContent }) => hasContent && '\"\"'};\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: ${({ theme, verticallyCentered }) =>\n verticallyCentered\n ? global(theme).sections.imageTextGradientCentered\n : global(theme).sections.imageTextGradient};\n pointer-events: none;\n z-index: 0;\n }\n`;\n\nconst StyledImage = styled(Image)`\n img {\n height: 550px;\n }\n`;\n\nconst Intro = styled(IntroBlock)<{\n verticallyCentered?: boolean;\n horizontallyCentered?: boolean;\n}>`\n position: absolute;\n bottom: ${({ verticallyCentered }) => !verticallyCentered && '0'};\n top: ${({ verticallyCentered }) => verticallyCentered && '50%'};\n left: 50%;\n right: 0;\n max-height: 100%;\n max-width: ${spacings.wrapper}px;\n\n padding: ${wrapperWhitespace + spacings.nudge * 2}px;\n z-index: 1;\n\n transform: ${({ verticallyCentered }) =>\n verticallyCentered ? 'translate(-50%, -50%)' : 'translateX(-50%)'};\n`;\n\nconst Poster: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Clamp width of poster image to content wrapper or large wrapper */\n width?: 'full' | 'content';\n\n /** The poster image settings */\n image: Omit<ImageProps, 'coverSpace' | 'ratios'>;\n\n /** Main title text */\n title?: string;\n\n /** Main title HTML tag type (h2, h3, h4...) */\n titleAs?: HeadlineTag;\n\n /** Superior title that stands above main title */\n superTitle?: string;\n\n /** Superior title HTML tag type (h3, h4 ...) */\n superTitleAs?: HeadlineTag;\n\n /** Text underneath the title (richtext) */\n text?: string;\n\n /** Function to inject custom primary button */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Function to inject custom secondary button */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Align text and actions vertically */\n verticallyCentered?: boolean;\n\n /** Align text and actions horizontally */\n horizontallyCentered?: boolean;\n}> = ({\n anchorId,\n width = 'content',\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n image,\n verticallyCentered,\n horizontallyCentered,\n}) => {\n const isCentered = verticallyCentered && horizontallyCentered;\n\n return (\n <Section anchorId={anchorId} bgColor=\"image\" bgMode=\"full\">\n <Wrapper clampWidth={width === 'content' ? 'normal' : 'large'}>\n <Container\n hasContent={!!title || !!text}\n verticallyCentered={verticallyCentered}\n >\n <StyledImage {...image} coverSpace ratios={undefined} />\n {title && (\n <Intro\n verticallyCentered={verticallyCentered}\n horizontallyCentered={horizontallyCentered}\n renderAs=\"figcaption\"\n colorMode=\"onImage\"\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n clampTitle\n maxTitleLines={3}\n clampText\n maxTextLines={4}\n isCentered={horizontallyCentered || isCentered}\n />\n )}\n </Container>\n </Wrapper>\n </Section>\n );\n};\n\nexport const PosterComponent = Poster;\nexport default withLibTheme(Poster);\n","import React from 'react';\nimport styled from 'styled-components';\nimport { getColors as color, mq, spacings } from 'utils/styles';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\n\nconst ItemList = styled.ul`\n margin: 0;\n padding: 0;\n list-style: none;\n\n & > * + * {\n margin-top: ${spacings.nudge}px;\n }\n`;\n\nconst ItemBlock = styled.li<{ hasBg?: boolean }>`\n max-width: 100%;\n padding: ${spacings.nudge * 2}px;\n\n background: ${({ theme, hasBg }) =>\n hasBg ? color(theme).elementBg.light : color(theme).elementBg.medium};\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n\n @media ${mq.semilarge} {\n padding: ${spacings.nudge * 3}px;\n }\n`;\n\nconst ListHead = styled.div`\n display: flex;\n justify-content: space-between;\n\n & > * + * {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Title = styled(Copy)`\n max-width: 880px;\n`;\n\nconst Price = styled(Copy)`\n white-space: nowrap;\n`;\n\nconst Description = styled(Copy)`\n max-width: 880px;\n`;\n\nexport interface PriceItems {\n /** Title of the price item */\n title?: string;\n /** Description text of price item (richtext) */\n text?: string;\n /** The price value (Currency not included) */\n price?: string;\n}\n\nexport const PriceBlock: React.FC<PriceItems & { hasBg?: boolean }> = ({\n text,\n price,\n hasBg = false,\n title,\n}) => {\n return (\n <ItemBlock hasBg={hasBg}>\n <ListHead>\n {title && <Title type=\"copy-b\">{title}</Title>}\n {price && <Price type=\"copy-b\">{price}</Price>}\n </ListHead>\n {text && <Description type=\"copy\" innerHTML={text} />}\n </ItemBlock>\n );\n};\n\nconst PriceList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array with price items */\n items?: PriceItems[];\n\n /** Section background */\n bgMode?: 'inverted' | 'full';\n}> = ({ anchorId, bgMode, items }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBack = isInverted || bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode === 'full'\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <ItemList>\n {items?.map((item, i) => (\n <PriceBlock key={i} {...item} hasBg={hasBack} />\n ))}\n </ItemList>\n </Wrapper>\n </Section>\n );\n};\n\nexport const PriceListComponent = PriceList;\nexport default withLibTheme(PriceList);\n","import {\n spacings,\n getColors as color,\n getGlobals as global,\n} from 'utils/styles';\nimport React, { forwardRef } from 'react';\nimport styled from 'styled-components';\nimport Copy from 'components/typography/Copy';\nimport Actions from './Actions';\nimport Callout from 'components/typography/Callout';\n\nconst View = styled.div<{\n isInverted?: boolean;\n isCentered?: boolean;\n hasBg?: boolean;\n isHighlighted?: boolean;\n}>`\n padding: ${spacings.spacer}px;\n\n border: 1px solid transparent;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n\n background: ${({ theme, hasBg, isInverted, isHighlighted }) =>\n isInverted\n ? isHighlighted\n ? color(theme).primary.inverted\n : color(theme).elementBg.medium\n : isHighlighted\n ? color(theme).primary.default\n : hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n display: block;\n margin-top: auto;\n padding-top: ${spacings.spacer}px;\n text-align: center;\n`;\n\nexport interface PriceTagProps {\n title?: string;\n superTitle?: string;\n text?: string;\n action?: (props: {\n isInverted?: boolean;\n isHighlighted?: boolean;\n }) => React.ReactNode;\n isInverted?: boolean;\n isCentered?: boolean;\n hasBackground?: boolean;\n isHighlighted?: boolean;\n}\n\nconst PriceTag = forwardRef<\n HTMLDivElement,\n PriceTagProps & { className?: string }\n>(\n (\n {\n superTitle,\n title,\n text,\n action,\n isInverted,\n isCentered,\n isHighlighted,\n hasBackground,\n className,\n },\n ref\n ) => {\n const inverted = isHighlighted ? !isInverted : false;\n\n return (\n <View\n ref={ref}\n isInverted={isInverted}\n isCentered={isCentered}\n isHighlighted={isHighlighted}\n hasBg={hasBackground}\n className={className}\n >\n {superTitle && (\n <Copy\n type=\"copy-b\"\n size=\"big\"\n isInverted={inverted}\n innerHTML={superTitle}\n data-sheet=\"superTitle\"\n />\n )}\n {title && (\n <Callout\n renderAs=\"div\"\n size=\"big\"\n isInverted={inverted}\n innerHTML={title}\n data-sheet=\"title\"\n />\n )}\n {text && (\n <Copy\n size=\"medium\"\n isInverted={inverted}\n innerHTML={text}\n data-sheet=\"desc\"\n />\n )}\n <StyledActions\n mode=\"cover\"\n primary={\n action &&\n action({\n isInverted: inverted,\n isHighlighted: isHighlighted,\n })\n }\n />\n </View>\n );\n }\n);\n\nPriceTag.displayName = 'PriceTag';\n\nexport default PriceTag;\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport PriceTag, { PriceTagProps } from 'components/blocks/PriceTag';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport { gridSettings } from 'components/base/Grid';\nimport { mq } from 'utils/styles';\n\nconst Tag = styled(PriceTag)`\n min-height: 500px;\n`;\n\nconst Items = styled.div`\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n\n margin-top: -${gridSettings.gutter}px;\n margin-left: -${gridSettings.gutter}px;\n\n & > * {\n flex: 1 1 25%;\n min-width: 286px;\n max-width: 320px;\n margin-top: ${gridSettings.gutter}px;\n margin-left: ${gridSettings.gutter}px;\n }\n\n @media ${mq.large} {\n & > * {\n max-width: 286px;\n }\n }\n`;\n\nconst PriceTable: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n /** Array of PriceTag card items */\n items: Array<Omit<PriceTagProps, 'isInverted'>>;\n /** Center text inside card items */\n isCentered?: boolean;\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, items, isCentered, bgMode }) => {\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n const priceTagCount = items?.length || 0;\n\n const { colors } = useLibTheme();\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight<HTMLDivElement>({\n listLength: priceTagCount,\n identifiers: [\n '[data-sheet=\"superTitle\"]',\n '[data-sheet=\"title\"]',\n '[data-sheet=\"desc\"]',\n ],\n responsive: {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 3,\n xlarge: 3,\n },\n });\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper addWhitespace>\n <Items>\n {items?.map((item, i) => (\n <Tag\n key={i}\n ref={cardRefs[i]}\n {...item}\n isInverted={isInverted}\n isCentered={isCentered}\n hasBackground={hasBg}\n />\n ))}\n </Items>\n </Wrapper>\n </Section>\n );\n};\n\nexport const PriceTableComponent = PriceTable;\nexport default withLibTheme(PriceTable);\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings } from 'utils/styles';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Callout from 'components/typography/Callout';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Copy from 'components/typography/Copy';\n\nconst Content = styled.figure`\n margin: 0;\n padding: 0;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n max-width: 960px;\n margin: 0 auto;\n }\n`;\n\nconst Text = styled(Callout)`\n text-align: center;\n margin-left: 0;\n margin-right: 0;\n padding: 0;\n`;\n\nconst Source = styled(Copy)`\n text-align: center;\n margin-left: 0;\n margin-right: 0;\n padding: 0;\n`;\n\nconst Quote: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Text of the blockquote (richtext) */\n text?: string;\n\n /** Source of the quote e.g. author (richtext) */\n source?: string;\n\n /** URL for additional cite informations */\n citeUrl?: string;\n\n /** Section backgrounds */\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, bgMode, text, source, citeUrl }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode === 'full'\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <Content>\n {text && (\n <Text\n size=\"small\"\n renderAs=\"blockquote\"\n isInverted={isInverted}\n innerHTML={text}\n {...{ cite: citeUrl }}\n />\n )}\n {source && (\n <Source\n isInverted={isInverted}\n renderAs=\"figcaption\"\n innerHTML={source}\n />\n )}\n </Content>\n </Wrapper>\n </Section>\n );\n};\n\nexport const QuoteComponent = Quote;\nexport default withLibTheme(Quote);\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Wrapper from 'components/base/Wrapper';\nimport { getColors } from 'utils/styles';\nimport { withLibTheme } from 'utils/LibThemeProvider';\n\nconst ImageWrapper = styled(Wrapper)<{ hAlign?: 'left' | 'center' | 'right' }>`\n display: flex;\n justify-content: ${({ hAlign }) => {\n switch (hAlign) {\n case 'center':\n return 'center';\n case 'right':\n return 'flex-end';\n default:\n return 'flex-start';\n }\n }};\n`;\n\nconst SimpleImage: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Image settings */\n image?: ImageProps;\n\n /** Horizontal alignment of the image */\n hAlign?: 'left' | 'center' | 'right';\n\n /** Allow reduced section spacing to next section */\n isStackable?: boolean;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, image, hAlign = 'left', bgMode, isStackable }) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n isStackable={isStackable}\n bgColor={\n isInverted\n ? getColors(theme).sectionBg.dark\n : hasBg\n ? getColors(theme).sectionBg.medium\n : getColors(theme).sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <ImageWrapper hAlign={hAlign}>\n {image && <Image {...image} />}\n </ImageWrapper>\n </Section>\n );\n};\n\nexport const SimpleImageComponent = SimpleImage;\nexport default withLibTheme(SimpleImage);\n","import React from 'react';\nimport styled from 'styled-components';\nimport {\n getColors as color,\n mq,\n spacings,\n getGlobals as global,\n} from 'utils/styles';\n\nimport Instagram from 'components/base/icons/socials/Instagram';\nimport Heading from 'components/typography/Heading';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport { gridSettings } from 'components/base/Grid';\nimport Image, { ImageProps } from 'components/blocks/Image';\n\nconst Cards = styled.ul`\n display: flex;\n flex-wrap: wrap;\n margin: 0;\n padding: 0;\n list-style: none;\n\n margin-top: -${spacings.spacer}px;\n margin-left: -${spacings.spacer}px;\n\n & > * {\n flex: 1 1 100%;\n margin-top: ${spacings.spacer}px;\n margin-left: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n & > * {\n flex: 1 1 calc(50% - ${gridSettings.gutter}px);\n max-width: calc(50% - ${gridSettings.gutter}px);\n }\n }\n\n @media ${mq.large} {\n & > * {\n flex: 1 1 calc(${(1 / 3) * 100}% - ${gridSettings.gutter}px);\n max-width: calc(${(1 / 3) * 100}% - ${gridSettings.gutter}px);\n }\n }\n`;\n\nconst Item = styled.li`\n display: block;\n position: relative;\n padding: 0;\n`;\n\nconst Card = styled(Link)<{ isInverted?: boolean }>`\n position: relative;\n display: block;\n text-decoration: none;\n color: '#fff';\n outline-color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n overflow: hidden;\n\n &:before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).secondary.inverted\n : color(theme).secondary.default};\n\n opacity: 0;\n pointer-events: none;\n z-index: 1;\n transition: opacity 0.2s ease-in-out;\n }\n\n &:hover {\n &:before {\n opacity: 1;\n pointer-events: all;\n }\n }\n\n &:focus {\n &:before {\n opacity: 1;\n pointer-events: all;\n }\n }\n`;\n\nconst StyledImage = styled(Image)`\n display: block;\n height: 100%;\n z-index: 0;\n`;\n\nconst TextContainer = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n width: 100%;\n transform: translate(-50%, -50%);\n text-align: center;\n\n padding: ${spacings.nudge * 2}px;\n\n opacity: 0;\n pointer-events: none;\n z-index: 2;\n transition: opacity 0.2s ease-in-out;\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n\n ${Card}:hover & {\n opacity: 1;\n pointer-events: all;\n }\n\n ${Card}:focus & {\n opacity: 1;\n pointer-events: all;\n }\n`;\n\nconst FollowUs = styled(Heading)`\n text-transform: uppercase;\n`;\n\nconst InstagramIcon = styled.div`\n position: absolute;\n left: 20px;\n bottom: 20px;\n color: ${({ theme }) => color(theme).text.inverted};\n z-index: 2;\n\n & > * {\n fill: #fff;\n\n ${Card}:hover & {\n color: ${({ theme }) => color(theme).text.inverted};\n }\n }\n`;\n\nconst SocialWall: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array with item settings */\n items?: Array<{\n link?: LinkProps;\n image?: Omit<ImageProps, 'coverSpace' | 'ratio'>;\n }>;\n\n /** Text for main social media follow call */\n followUs?: string;\n\n /** Text for e.g. social media hashtag */\n hashTag?: string;\n\n /** Function to inject custom social icon on bottom left corner */\n socialIcon?: React.ReactNode;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, items, hashTag, followUs, socialIcon, bgMode }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n addSeperation\n >\n <Wrapper addWhitespace>\n <Cards>\n {items?.map((item, i) => (\n <Item key={i}>\n <Card\n isExternal\n {...item.link}\n isInverted={isInverted}\n ariaLabel={item?.image?.alt}\n >\n {item.image && (\n <StyledImage\n {...item.image}\n coverSpace\n ratios={{\n small: { w: 1, h: 1 },\n }}\n isInverted={isInverted}\n />\n )}\n <TextContainer>\n <FollowUs size=\"super\" isInverted>\n {followUs\n ? followUs\n : 'Follow Us On Instagram'}\n </FollowUs>\n {hashTag && (\n <Heading size=\"heading-2\" isInverted>\n {hashTag}\n </Heading>\n )}\n </TextContainer>\n <InstagramIcon>\n {socialIcon || <Instagram />}\n </InstagramIcon>\n </Card>\n </Item>\n ))}\n </Cards>\n </Wrapper>\n </Section>\n );\n};\n\nexport const SocialWallComponent = SocialWall;\nexport default withLibTheme(SocialWall);\n","import React from 'react';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport TableBlock, { TableProps } from 'components/blocks/TableBlock';\nimport styled from 'styled-components';\nimport { spacings } from 'utils/styles';\n\nconst TableWrapper = styled(Wrapper)`\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst Table: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Table rows and columns */\n tableItems: TableProps[];\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, bgMode, tableItems }) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full' || isInverted;\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <TableWrapper>\n {tableItems.map((item, i) => {\n return (\n <TableBlock\n key={i}\n {...item}\n isInverted={isInverted}\n hasBack={hasBg}\n />\n );\n })}\n </TableWrapper>\n </Section>\n );\n};\n\nexport const TableComponent = Table;\nexport default withLibTheme(Table);\n","import React, { FC, useRef, useState } from 'react';\nimport styled from 'styled-components';\n\nimport Grid from 'components/base/Grid';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Copy from 'components/typography/Copy';\nimport Wrapper from 'components/base/Wrapper';\nimport Section, { BgMode } from 'components/base/Section';\nimport {\n mq,\n spacings,\n getGlobals as global,\n getFonts as font,\n} from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport IntroBlock from 'components/blocks/IntroBlock';\nimport VideoBlock, { VideoAspectRatios } from 'components/blocks/VideoBlock';\nimport { isValidArray } from 'utils/arrays';\nimport { useObserverSupport } from 'utils/useObserverSupport';\nimport useUpdateEffect from 'utils/useUpdateEffect';\n\nconst Figure = styled.figure`\n display: flex;\n flex-direction: column;\n position: relative;\n height: 100%;\n width: 100%;\n margin: 0;\n padding: 0;\n\n & > * + * {\n margin-top: ${spacings.nudge}px;\n }\n\n @media ${mq.semilarge} {\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n }\n`;\n\nconst StyledImage = styled(Image)`\n position: relative;\n width: 100%;\n height: 100%;\n\n @media ${mq.semilarge} {\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n overflow: hidden;\n }\n`;\n\nconst Video = styled(VideoBlock)<{\n ratios?: VideoAspectRatios;\n isVisible?: boolean;\n}>`\n display: ${({ isVisible }) => (isVisible ? 'block' : 'none')};\n width: 100%;\n height: 100%;\n`;\n\nconst Description = styled(Copy)<{\n isInverted?: boolean;\n isSplitted?: boolean;\n isMirrored?: boolean;\n}>`\n display: block;\n\n @media ${mq.semilarge} {\n padding-left: ${spacings.nudge * 2}px;\n padding-right: ${spacings.nudge * 2}px;\n margin-left: ${({ isMirrored }) => isMirrored && 'auto'};\n margin-right: ${({ isMirrored }) => !isMirrored && 'auto'};\n max-width: ${({ isSplitted }) => isSplitted && '81.5%'};\n\n color: ${({ theme, isInverted, isSplitted }) =>\n isInverted && !isSplitted\n ? font(theme).copy.small.colorInverted\n : font(theme).copy.small.color};\n }\n\n @media ${mq.xlarge} {\n max-width: ${({ isSplitted }) => isSplitted && '69.5%'};\n }\n`;\n\nconst StyledActions = styled(Actions)`\n &:not(:first-child) {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst Teaser: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Switch text and image columns */\n isMirrored?: boolean;\n\n /** Superior title that stands above main title */\n superTitle?: string;\n\n /** Superior title HTML tag type (h3, h4 ...) */\n superTitleAs?: HeadlineTag;\n\n /** Main title text */\n title?: string;\n\n /** Main title HTML tag type (h2, h3, h4...) */\n titleAs?: HeadlineTag;\n\n /** Images for different screen sizes */\n image?: Omit<ImageProps, 'coverSpace'>;\n\n /**\n * Use video instead of an image. Until video is loaded images defined in the image prop are used.\n * Multiple video urls can be used to loaded different file formats\n */\n video?: {\n urls: string[];\n aspectRatios?: VideoAspectRatios;\n };\n\n /** Image or video description text (richtext) */\n description?: string;\n\n /** Main richtext */\n text?: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted' | 'splitted' | 'inverted-splitted';\n\n /** Function to inject custom primary button */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Function to inject custom secondary button */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n anchorId,\n isMirrored = false,\n bgMode,\n superTitle,\n superTitleAs,\n title,\n titleAs,\n image,\n video,\n description,\n text,\n primaryAction,\n secondaryAction,\n}) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted' || bgMode === 'inverted-splitted';\n const isSplitted = bgMode === 'splitted' || bgMode === 'inverted-splitted';\n const hasVideo = isValidArray(video?.urls, false);\n\n const viewRef = useRef<HTMLDivElement | null>(null);\n const [isLoaded, setLoaded] = useState(!image?.small || false);\n const [isVideoActive, setVideoActive] = useState<boolean>(false);\n const isObserverSupported = useObserverSupport();\n\n useUpdateEffect(() => {\n if (!viewRef.current || !hasVideo) return;\n if (!isObserverSupported) {\n setVideoActive(true);\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries, observer) => {\n const [entry] = entries;\n\n if (entry.isIntersecting) {\n observer.unobserve(entry.target);\n setVideoActive(true);\n }\n },\n {\n rootMargin: '200px 0px 200px 0px',\n }\n );\n\n const viewEl = viewRef.current;\n observer.observe(viewEl);\n\n return () => {\n if (viewEl) observer.unobserve(viewEl);\n };\n }, [isObserverSupported]);\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToTeaserBgMode(bgMode, false, isMirrored)}\n >\n <Wrapper addWhitespace clampWidth=\"normal\">\n <Grid.Row valign=\"center\">\n <Grid.Col\n semilarge={{\n span: 6 / 12,\n move: (isMirrored ? 6 : 0) / 12,\n }}\n xlarge={{\n span: 7 / 12,\n move: (isMirrored ? 5 : 0) / 12,\n }}\n >\n {(image?.small || hasVideo) && (\n <Figure ref={viewRef}>\n {image?.small && (!video || !isLoaded) && (\n <StyledImage\n {...image}\n isInverted={isInverted}\n coverSpace\n />\n )}\n {hasVideo && (\n <Video\n urls={\n isVideoActive\n ? video?.urls\n : undefined\n }\n muted\n autoPlay\n loop\n onCanPlayThrough={() => setLoaded(true)}\n ratios={video?.aspectRatios}\n isVisible={isLoaded}\n isInverted={isInverted}\n />\n )}\n {description && (\n <Description\n size=\"small\"\n renderAs=\"figcaption\"\n isInverted={isInverted}\n isSplitted={isSplitted}\n isMirrored={isMirrored}\n innerHTML={description}\n />\n )}\n </Figure>\n )}\n </Grid.Col>\n\n <Grid.Col\n semilarge={{\n span: 6 / 12,\n move: (isMirrored ? -6 : 0) / 12,\n }}\n xlarge={{\n span: 5 / 12,\n move: (isMirrored ? -7 : 0) / 12,\n }}\n >\n <IntroBlock\n titleHyphens\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={\n primaryAction && primaryAction(isInverted)\n }\n secondary={\n secondaryAction &&\n secondaryAction(isInverted)\n }\n />\n )}\n </Grid.Col>\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const mapToTeaserBgMode = (\n mode?: 'full' | 'splitted' | 'inverted' | 'inverted-splitted',\n preventSplit = false,\n isMirrored = false\n): BgMode | undefined => {\n switch (mode) {\n case 'full':\n return 'full';\n case 'inverted':\n return 'inverted';\n case 'splitted': {\n if (!preventSplit)\n return isMirrored ? 'larger-left' : 'larger-right';\n else return undefined;\n }\n case 'inverted-splitted': {\n if (!preventSplit)\n return isMirrored ? 'larger-left' : 'larger-right';\n else return undefined;\n }\n\n default:\n return undefined;\n }\n};\n\nexport const TeaserComponent = Teaser;\nexport default withLibTheme(Teaser);\n","import React, { FC, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Grid, { getGridWidth } from 'components/base/Grid';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Wrapper, { wrapperWhitespace } from 'components/base/Wrapper';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { mq, spacings, withRange, getGlobals as global } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport IntroBlock from 'components/blocks/IntroBlock';\nimport VideoBlock, { VideoAspectRatios } from 'components/blocks/VideoBlock';\nimport { isValidArray } from 'utils/arrays';\nimport { useObserverSupport } from 'utils/useObserverSupport';\nimport useUpdateEffect from 'utils/useUpdateEffect';\n\n/**\n * calculate single grid col from relative content wrapper\n * (grid width = wrapper width without paddings)\n * */\nconst getGridColOfContent = () => {\n return css`\n ${getGridWidth({\n cols: 1,\n gridWidth: `${spacings.wrapper - wrapperWhitespace * 2}px `,\n })}\n `;\n};\n\nconst WideVideo = styled(VideoBlock)<{\n isMirrored?: boolean;\n isVisible?: boolean;\n}>`\n display: ${({ isVisible }) => (isVisible ? 'block' : 'none')};\n position: relative;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n\n min-height: 400px;\n object-fit: cover;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n\n @media ${mq.semilarge} {\n position: absolute;\n /** \n calculate width of 6 grid cols (grid width = viewport width without wrapper paddings)\n and add left or right wrapper padding afterwards\n */\n width: calc(\n ${getGridWidth({\n cols: 6,\n gridWidth: `100% - ${wrapperWhitespace * 2}px `,\n })} + ${wrapperWhitespace}px\n );\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '0')};\n right: ${({ isMirrored }) => (isMirrored ? '0' : 'auto')};\n }\n\n @media ${mq.xlarge} {\n /** \n calculate width of 1 grid cols\n and add left or right wrapper padding afterwards. Then add this to 50% of current\n viewport width.\n */\n width: calc(50% + ${getGridColOfContent()} + ${wrapperWhitespace}px);\n }\n\n @media ${mq.xxlarge} {\n /** \n calculate width of 1 grid cols\n and add left or right wrapper padding afterwards. Then add this to 50% of large wrapper width.\n */\n width: calc(\n ${spacings.wrapperLarge / 2}px + ${getGridColOfContent()} +\n ${wrapperWhitespace}px\n );\n\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '50%')};\n right: ${({ isMirrored }) => (isMirrored ? '50%' : 'auto')};\n\n ${({ isMirrored }) =>\n css`\n transform: translateX(\n calc(\n ${isMirrored ? '100% - ' : '-100% + '}\n (${getGridColOfContent()} + ${wrapperWhitespace}px)\n )\n );\n `};\n }\n`;\n\nconst WideImage = styled(Image)<{ isMirrored?: boolean }>`\n position: relative;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n\n height: 100%;\n min-height: 400px;\n\n img {\n height: 100%;\n }\n\n @media ${mq.semilarge} {\n position: absolute;\n /** \n calculate width of 6 grid cols (grid width = viewport width without wrapper paddings)\n and add left or right wrapper padding afterwards\n */\n width: calc(\n ${getGridWidth({\n cols: 6,\n gridWidth: `100% - ${wrapperWhitespace * 2}px `,\n })} + ${wrapperWhitespace}px\n );\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '0')};\n right: ${({ isMirrored }) => (isMirrored ? '0' : 'auto')};\n }\n\n @media ${mq.xlarge} {\n /** \n calculate width of 1 grid cols\n and add left or right wrapper padding afterwards. Then add this to 50% of current\n viewport width.\n */\n width: calc(50% + ${getGridColOfContent()} + ${wrapperWhitespace}px);\n }\n\n @media ${mq.xxlarge} {\n /** \n calculate width of 1 grid cols\n and add left or right wrapper padding afterwards. Then add this to 50% of large wrapper width.\n */\n width: calc(\n ${spacings.wrapperLarge / 2}px + ${getGridColOfContent()} +\n ${wrapperWhitespace}px\n );\n\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '50%')};\n right: ${({ isMirrored }) => (isMirrored ? '50%' : 'auto')};\n\n ${({ isMirrored }) =>\n css`\n transform: translateX(\n calc(\n ${isMirrored ? '100% - ' : '-100% + '}\n (${getGridColOfContent()} + ${wrapperWhitespace}px)\n )\n );\n `};\n }\n`;\n\nconst Content = styled.div`\n ${({ theme }) =>\n withRange(\n global(theme).sections.seperation.padding.default,\n 'padding-bottom'\n )}\n\n @media ${mq.semilarge} {\n ${({ theme }) =>\n withRange(\n global(theme).sections.seperation.padding.default,\n 'padding-top'\n )}\n }\n`;\n\nconst StyledActions = styled(Actions)`\n &:not(:first-child) {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst TeaserWide: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Switch text and image columns */\n isMirrored?: boolean;\n\n /** Superior title that stands above main title */\n superTitle?: string;\n\n /** Superior title HTML tag type (h3, h4 ...) */\n superTitleAs?: HeadlineTag;\n\n /** Main title text */\n title?: string;\n\n /** Main title HTML tag type (h2, h3, h4...) */\n titleAs?: HeadlineTag;\n\n /** Images for different screen sizes */\n image?: Omit<ImageProps, 'coverSpace'>;\n\n /**\n * Use video instead of an image. Until video is loaded images defined in the image prop are used.\n * Multiple video urls can be used to loaded different file formats\n */\n video?: {\n urls: string[];\n aspectRatios?: VideoAspectRatios;\n };\n\n /** Main richtext */\n text?: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Function to inject custom primary button */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Function to inject custom secondary button */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n anchorId,\n isMirrored = false,\n superTitle,\n superTitleAs,\n title,\n titleAs,\n image,\n video,\n text,\n primaryAction,\n secondaryAction,\n bgMode,\n}) => {\n const { colors } = useLibTheme();\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n const hasVideo = isValidArray(video?.urls, false);\n\n const viewRef = useRef<HTMLDivElement | null>(null);\n const [isLoaded, setLoaded] = useState(!image?.small || false);\n const [isVideoActive, setVideoActive] = useState<boolean>(false);\n const isObserverSupported = useObserverSupport();\n\n useUpdateEffect(() => {\n if (!viewRef.current || !hasVideo) return;\n if (!isObserverSupported) {\n setVideoActive(true);\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries, observer) => {\n const [entry] = entries;\n\n if (entry.isIntersecting) {\n observer.unobserve(entry.target);\n setVideoActive(true);\n }\n },\n {\n rootMargin: '200px 0px 200px 0px',\n }\n );\n\n const viewEl = viewRef.current;\n observer.observe(viewEl);\n\n return () => {\n if (viewEl) observer.unobserve(viewEl);\n };\n }, [isObserverSupported]);\n\n return (\n <Section\n ref={viewRef}\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n {image?.small && (!video || !isLoaded) && (\n <WideImage\n coverSpace\n {...image}\n isMirrored={isMirrored}\n isInverted={isInverted}\n />\n )}\n {hasVideo && (\n <WideVideo\n urls={isVideoActive ? video?.urls : undefined}\n muted\n autoPlay\n loop\n onCanPlayThrough={() => setLoaded(true)}\n isVisible={isLoaded}\n isInverted={isInverted}\n isMirrored={isMirrored}\n ratios={video?.aspectRatios}\n />\n )}\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <Grid.Row valign=\"center\">\n <Grid.Col\n semilarge={{\n span: 6 / 12,\n move: (isMirrored ? 6 : 0) / 12,\n }}\n xlarge={{\n span: 7 / 12,\n move: (isMirrored ? 5 : 0) / 12,\n }}\n ></Grid.Col>\n <Grid.Col\n semilarge={{\n span: 6 / 12,\n move: (isMirrored ? -6 : 0) / 12,\n }}\n xlarge={{\n span: 5 / 12,\n move: (isMirrored ? -7 : 0) / 12,\n }}\n >\n <Content>\n <IntroBlock\n titleHyphens\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={\n primaryAction &&\n primaryAction(isInverted)\n }\n secondary={\n secondaryAction &&\n secondaryAction(isInverted)\n }\n />\n )}\n </Content>\n </Grid.Col>\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const TeaserWideComponent = TeaserWide;\nexport default withLibTheme(TeaserWide);\n","import Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\nimport React, {\n createRef,\n MutableRefObject,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport { useObserverSupport } from 'utils/useObserverSupport';\nimport { withLibTheme } from 'utils/LibThemeProvider';\n\nconst TimelineBlock = styled.div<{\n isSwitched?: boolean;\n isActive?: boolean;\n isInverted?: boolean;\n}>`\n position: relative;\n\n @media ${mq.large} {\n text-align: ${({ isSwitched }) => (isSwitched ? 'left' : 'right')};\n }\n\n &:after {\n content: '';\n width: 10px;\n height: 10px;\n\n box-sizing: content-box;\n border: 2px solid\n ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).elementBg.light\n : color(theme).elementBg.dark};\n border-radius: 50%;\n\n background: ${({ theme, isActive, isInverted }) =>\n isActive\n ? isInverted\n ? color(theme).elementBg.light\n : color(theme).elementBg.dark\n : isInverted\n ? color(theme).elementBg.dark\n : color(theme).elementBg.light};\n\n position: absolute;\n top: 16px;\n left: 0px;\n\n transition: all 0.2s ease-in-out;\n\n @media ${mq.large} {\n left: ${({ isSwitched }) => (!isSwitched ? '50%' : 'auto')};\n right: ${({ isSwitched }) => isSwitched && '50%'};\n transform: translateX(\n ${({ isSwitched }) => (isSwitched ? '50%' : '-50%')}\n );\n }\n }\n\n &:before {\n content: '';\n display: block;\n position: absolute;\n width: 2px;\n min-height: 160px;\n height: 100%;\n background: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).elementBg.light\n : color(theme).elementBg.dark};\n left: 5px;\n\n @media ${mq.large} {\n left: 50%;\n transform: translateX(-50%);\n }\n }\n\n &:first-child {\n padding-top: 0;\n\n &:before {\n top: 16px;\n }\n }\n`;\n\nconst TimelineText = styled.div<{\n isSwitched?: boolean;\n}>`\n position: relative;\n padding-left: ${spacings.nudge * 3 + 2}px;\n padding-bottom: ${spacings.spacer}px;\n\n @media ${mq.large} {\n max-width: 50%;\n\n margin-left: ${({ isSwitched }) => isSwitched && '50%'};\n margin-right: ${({ isSwitched }) => !isSwitched && '50%'};\n\n padding: ${({ isSwitched }) =>\n isSwitched\n ? `${spacings.spacer}px 0 ${spacings.spacer * 1.75}px ${\n spacings.spacer\n }px`\n : `${spacings.spacer}px ${spacings.spacer}px ${\n spacings.spacer * 1.75\n }px 0`};\n }\n\n &:first-child {\n padding-top: 0;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n`;\n\nconst ItemTitle = styled(Heading)``;\n\nconst ItemTextBlock = styled(Copy)``;\n\nconst Timeline: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n items?: { label?: string; title?: string; text?: string }[];\n bgMode?: 'full' | 'inverted';\n}> = ({ anchorId, bgMode, items }) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const [targetRefs, setTargetRefs] = useState<\n MutableRefObject<HTMLDivElement>[]\n >([]);\n const observerSupported = useObserverSupport();\n const observerRef = useRef<IntersectionObserver | null>(null);\n\n const [activeItem, setActiveItem] = useState<number>(0);\n\n useEffect(() => {\n if (observerSupported && targetRefs && targetRefs.length > 0) {\n const options = {\n rootMargin: '-50% 0% -50% 0%',\n threshold: 0,\n };\n\n observerRef.current = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n const index = targetRefs?.findIndex(\n (t) => t.current === entry.target\n );\n setActiveItem(index);\n }\n });\n }, options);\n\n for (let i = 0; i < targetRefs.length; i++) {\n observerRef.current.observe(targetRefs[i].current);\n }\n }\n\n return () => {\n observerRef.current?.disconnect();\n };\n }, [targetRefs, observerSupported]);\n\n useEffect(() => {\n setTargetRefs(() =>\n Array(items?.length)\n .fill(null)\n .map((_, i) => targetRefs[i] || createRef())\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [items?.length]);\n\n return (\n <Section\n anchorId={anchorId}\n bgColor={\n isInverted\n ? color(theme).sectionBg.dark\n : hasBg\n ? color(theme).sectionBg.medium\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n addSeperation\n >\n <Wrapper addWhitespace>\n {items &&\n items.map((item, i) => {\n return (\n <TimelineBlock\n ref={targetRefs[i]}\n isActive={activeItem === i}\n isSwitched={i % 2 === 0}\n isInverted={isInverted}\n key={i}\n >\n <TimelineText isSwitched={i % 2 === 0}>\n <ItemTitle\n size=\"heading-2\"\n textColor={\n isInverted\n ? color(theme).text.inverted\n : color(theme).text.default\n }\n >\n {item.label}\n </ItemTitle>\n\n <ItemTextBlock\n type=\"copy-b\"\n size=\"big\"\n isInverted={isInverted}\n >\n {item.title}\n </ItemTextBlock>\n <ItemTextBlock\n innerHTML={item.text}\n isInverted={isInverted}\n />\n </TimelineText>\n </TimelineBlock>\n );\n })}\n </Wrapper>\n </Section>\n );\n};\n\nexport const TimelineComponent = Timeline;\nexport default withLibTheme(Timeline);\n","import React from 'react';\nimport Section, { mapToBgMode } from 'components/base/Section';\n\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Wrapper from 'components/base/Wrapper';\nimport { ImageProps } from 'components/blocks/Image';\n\nimport VideoCard from 'components/blocks/VideoCard';\n\nconst Video: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n bgImage: Omit<ImageProps, 'ratios' | 'coverSpace'>;\n embedId: string;\n\n consentText?: string;\n consentAction?: (props: {\n handleClick?: () => void;\n consentProps: Record<string, string>;\n }) => React.ReactNode;\n\n playIcon?: React.ReactNode;\n bgMode?: 'full' | 'inverted' | 'splitted';\n}> = ({\n anchorId,\n bgMode,\n bgImage,\n embedId,\n playIcon,\n consentText,\n consentAction,\n}) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n addSeperation\n >\n <Wrapper addWhitespace>\n <VideoCard\n bgImage={bgImage}\n embedId={embedId}\n playIcon={playIcon}\n consentText={consentText}\n consentAction={consentAction}\n />\n </Wrapper>\n </Section>\n );\n};\n\nexport const VideoComponent = Video;\nexport default withLibTheme(Video);\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\n\nimport { getColors as color, getGlobals as global, mq } from 'utils/styles';\nimport Play from 'components/base/icons/Play';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Wrapper from 'components/base/Wrapper';\nimport VideoBlock from 'components/blocks/VideoBlock';\nimport { ImageProps } from 'components/blocks/Image';\nimport { isValidArray } from 'utils/arrays';\n\nconst VideoContainer = styled.div<{ isInverted?: boolean }>`\n position: relative;\n cursor: pointer;\n`;\n\nconst Overlay = styled.div<{ bgImage?: ImageProps; isInverted?: boolean }>`\n position: relative;\n padding-top: ${`calc(100% / (16 / 9))`};\n background: ${({ theme, isInverted }) =>\n isInverted\n ? global(theme).sections.imagePlaceholderBg.inverted\n : global(theme).sections.imagePlaceholderBg.default};\n\n background-image: ${({ bgImage }) =>\n bgImage?.small && `url(\"${bgImage.small}\")`};\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n overflow: hidden;\n\n @media ${mq.medium} {\n text-align: left;\n\n background-image: ${({ bgImage }) =>\n bgImage?.medium && `url(\"${bgImage.medium}\")`};\n }\n\n @media ${mq.semilarge} {\n background-image: ${({ bgImage }) =>\n bgImage?.semilarge && `url(\"${bgImage.semilarge}\")`};\n }\n\n @media ${mq.large} {\n background-image: ${({ bgImage }) =>\n bgImage?.large && `url(\"${bgImage.large}\")`};\n }\n\n @media ${mq.xlarge} {\n background-image: ${({ bgImage }) =>\n bgImage?.xlarge && `url(\"${bgImage.xlarge}\")`};\n }\n\n &:after {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n pointer-events: none;\n\n background: linear-gradient(\n 358.19deg,\n rgba(29, 34, 35, 0.52) 12.37%,\n rgba(29, 34, 35, 0) 59.02%\n );\n }\n`;\n\nconst VideoControls = styled.button`\n display: block;\n border: none;\n background: none;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n color: ${({ theme }) => color(theme).elementBg.light};\n z-index: 1;\n padding: 0;\n\n cursor: pointer;\n\n & > * {\n opacity: 0.8;\n transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;\n height: 80px;\n width: 80px;\n\n color: ${({ theme }) => color(theme).elementBg.dark};\n }\n\n ${Overlay}:hover > & > * {\n transform: scale(1.05);\n opacity: 1;\n }\n\n ${Overlay}:active > & > * {\n transform: scale(0.95);\n opacity: 1;\n }\n\n &:focus {\n outline: 2px solid ${({ theme }) => color(theme).primary.default};\n border-radius: 50%;\n opacity: 1;\n\n & > * {\n color: ${({ theme }) => color(theme).primary.default};\n }\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n box-shadow: none;\n }\n`;\n\nconst Video = styled(VideoBlock)<{ isVisible?: boolean }>`\n opacity: ${({ isVisible }) => (isVisible ? 1 : 0)};\n pointer-events: ${({ isVisible }) => (isVisible ? 'all' : 'none')};\n`;\n\nconst RawVideo: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** URL to video sources */\n videoUrls?: string[];\n\n /** Placeholder image */\n placeholderImg?: Omit<ImageProps, 'ratios' | 'coverSpace'>;\n\n /** Enable autoplay without user interaction */\n autoplay?: boolean;\n\n /** Playing video in loop */\n loop?: boolean;\n\n /** Section background */\n bgMode?: 'full' | 'inverted' | 'splitted';\n\n /** Video play icon */\n playIcon?: React.ReactNode;\n}> = ({\n anchorId,\n bgMode,\n videoUrls,\n placeholderImg,\n playIcon,\n autoplay,\n loop,\n}) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const [isStarted, setIsStarted] = useState<boolean>(autoplay || false);\n\n return (\n <Section\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode)}\n addSeperation\n >\n <Wrapper addWhitespace>\n <VideoContainer\n onClick={() => {\n if (isValidArray(videoUrls, false)) {\n setIsStarted(true);\n }\n }}\n >\n {isStarted && (\n <Video\n isVisible={isStarted || !placeholderImg?.small}\n controls={!autoplay}\n autoPlay\n loop={loop}\n muted={autoplay}\n ratios={{ small: 16 / 9 }}\n urls={videoUrls}\n isInverted={isInverted}\n />\n )}\n {!isStarted && (\n <Overlay\n bgImage={placeholderImg}\n isInverted={isInverted}\n >\n <VideoControls>\n {playIcon || <Play iconColor=\"#000\" />}\n </VideoControls>\n </Overlay>\n )}\n </VideoContainer>\n </Wrapper>\n </Section>\n );\n};\n\nexport const RawVideoComponent = RawVideo;\nexport default withLibTheme(RawVideo);\n","import ClockFilled from 'components/base/icons/ClockFilled';\nimport LocationPin from 'components/base/icons/LocationPin';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport { isValidArray } from 'utils/arrays';\nimport { StructuredEmploymentType } from 'utils/structuredData';\nimport { getColors as color, getGlobals, mq, spacings } from 'utils/styles';\n\nconst View = styled.div<{\n isInverted?: boolean;\n hasBg?: boolean;\n clickable?: boolean;\n}>`\n position: relative;\n color: ${({ theme }) => color(theme).primary.default};\n background: ${({ theme, hasBg, isInverted }) =>\n isInverted\n ? color(theme).elementBg.medium\n : hasBg\n ? color(theme).elementBg.light\n : color(theme).elementBg.medium};\n\n padding: ${spacings.spacer}px;\n\n border-radius: ${({ theme }) => getGlobals(theme).sections.edgeRadius};\n\n ${({ clickable, isInverted }) =>\n clickable &&\n css`\n transition: all 0.2s ease-in-out;\n cursor: pointer;\n\n &:hover {\n box-shadow: 0px 2px 6px\n ${isInverted\n ? 'rgba(255, 255, 255, 0.7)'\n : 'rgba(0, 0, 0, 0.35)'};\n\n color: ${({ theme }) => color(theme).primary.hover};\n }\n\n &:focus {\n box-shadow: 0px 2px 6px\n ${isInverted\n ? 'rgba(255, 255, 255, 0.7)'\n : 'rgba(0, 0, 0, 0.3)'};\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n box-shadow: none;\n }\n\n &:active {\n box-shadow: 0px 2px 6px\n ${isInverted\n ? 'rgba(255, 255, 255, 0.7)'\n : 'rgba(0, 0, 0, 0.3)'};\n }\n `}\n\n @media ${mq.medium} {\n min-height: 440px;\n\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: flex-start;\n }\n`;\n\nconst JobInfos = styled(Copy)`\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 4}px;\n }\n\n color: ${({ theme }) => color(theme).primary.default};\n\n ${View}:hover & {\n color: ${({ theme }) => color(theme).primary.hover};\n }\n`;\n\nconst Info = styled.div`\n display: -ms-grid;\n display: grid;\n\n -ms-grid-columns: min-content 1fr;\n grid-template-columns: min-content 1fr;\n -ms-grid-rows: min-content 1fr;\n grid-auto-rows: min-content 1fr;\n\n & + & {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Icon = styled.div`\n display: flex;\n align-items: center;\n\n & > * {\n height: 32px;\n width: 32px;\n }\n`;\n\nconst MainLabel = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst ViewLink = styled(Link)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n && {\n margin: 0;\n }\n`;\n\nexport interface JobLocation {\n name?: string;\n description?: string;\n streetAddress?: string;\n addressLocality?: string;\n addressRegion?: string;\n postalCode?: string;\n addressCountry?: string;\n}\n\nexport interface JobCardProps {\n /** Invert text and background color */\n isInverted?: boolean;\n\n /** For use on light backgrounds */\n hasBackground?: boolean;\n\n /** Job card title (richtext) */\n jobTitle: string;\n\n /** The employment type (important for structured data) */\n employmentTypes?: Array<{\n name: string;\n type: StructuredEmploymentType;\n }>;\n\n /** Injection function for job time model icon */\n modelIcon?: () => React.ReactNode;\n\n /** List of job locations */\n locations?: JobLocation[];\n\n /** Total amount all locations */\n totalLocations?: number;\n\n /** Label to show if all location selected */\n allLocationsLabel?: string;\n\n /** Injection function for job location icon */\n locationIcon?: () => React.ReactNode;\n\n /** Job card link */\n link?: LinkProps;\n}\n\nconst JobCard = React.forwardRef<\n HTMLDivElement,\n JobCardProps & {\n className?: string;\n }\n>(\n (\n {\n isInverted,\n hasBackground,\n jobTitle,\n employmentTypes,\n locations,\n totalLocations,\n allLocationsLabel,\n modelIcon,\n locationIcon,\n className,\n link,\n },\n ref\n ) => {\n const hasEmploymentType = isValidArray(employmentTypes, false);\n const validLocations = locations?.filter((loc) => loc.name);\n const hasLocations = isValidArray(validLocations, false);\n\n let locationText = '';\n\n if (hasLocations) {\n if (\n totalLocations !== undefined &&\n validLocations.length >= totalLocations &&\n allLocationsLabel\n ) {\n locationText = allLocationsLabel;\n } else {\n locationText = validLocations\n .map((loc) => loc.name)\n ?.join(', ');\n }\n }\n\n return (\n <View\n ref={ref}\n isInverted={isInverted}\n hasBg={hasBackground}\n className={className}\n clickable={!!link}\n >\n <Heading\n textColor=\"inherit\"\n size=\"heading-2\"\n data-sheet=\"title\"\n innerHTML={jobTitle}\n hyphens\n />\n {(hasEmploymentType || hasLocations) && (\n <JobInfos type=\"copy-b\" data-sheet=\"info\">\n {hasEmploymentType && (\n <Info>\n <Icon>\n {modelIcon ? modelIcon() : <ClockFilled />}\n </Icon>\n <MainLabel>\n {employmentTypes\n ?.filter((type) => type.name)\n .map((type) => type.name)\n ?.join(', ')}\n </MainLabel>\n </Info>\n )}\n {hasLocations && (\n <Info>\n <Icon>\n {locationIcon ? (\n locationIcon()\n ) : (\n <LocationPin />\n )}\n </Icon>\n <MainLabel>{locationText}</MainLabel>\n </Info>\n )}\n </JobInfos>\n )}\n {link && (\n <ViewLink\n {...link}\n ariaLabel={link?.href ? jobTitle : undefined}\n />\n )}\n </View>\n );\n }\n);\n\nJobCard.displayName = 'JobCard';\n\nexport default JobCard;\n","export const escapeRegExp = (value: string) => {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n};\n","import React, { useCallback, useEffect } from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport JobCard, { JobCardProps } from 'components/blocks/JobCard';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport { mq, spacings } from 'utils/styles';\nimport FilterField from 'components/fields/FilterField';\nimport { isValidArray } from 'utils/arrays';\nimport useUpdateEffect from 'utils/useUpdateEffect';\nimport { escapeRegExp } from 'utils/escape';\nimport { deleteUrlParam, getUrlParams, setUrlParam } from 'utils/urlParams';\nimport useMounted from 'utils/useMounted';\n\nconst List = styled.ul`\n display: flex;\n flex-wrap: wrap;\n list-style: none;\n margin: 0;\n padding: 0;\n\n margin-top: -${spacings.nudge * 2}px;\n margin-left: -${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n margin-top: -${spacings.spacer}px;\n margin-left: -${spacings.spacer}px;\n }\n`;\n\nconst Item = styled.li`\n flex: 0 1 100%;\n max-width: 100%;\n margin: 0;\n\n padding-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n flex: 0 1 50%;\n max-width: 50%;\n\n padding-top: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n }\n\n @media ${mq.large} {\n flex: 0 1 33.33%;\n max-width: 33.33%;\n }\n`;\n\nconst Filter = styled(FilterField)`\n margin-top: ${spacings.nudge}px;\n margin-bottom: ${spacings.nudge * 5}px;\n\n min-width: 50%;\n`;\n\nexport interface CardProps extends JobCardProps {\n id: string;\n}\n\nexport type JobItem = Omit<\n CardProps,\n | 'isInverted'\n | 'hasBackground'\n | 'modelIcon'\n | 'locationIcon'\n | 'totalLocations'\n | 'allLocationsLabel'\n>;\n\nconst jobExactTitleFilter = (filterQuery: string) => (value: JobItem) => {\n const regex = new RegExp(filterQuery);\n return regex.test(value.jobTitle);\n};\n\nconst jobSoftTitleFilter = (filterQuery: string) => (value: JobItem) => {\n const preparedQuery = filterQuery.toLowerCase().replace(/\\s/g, '');\n const perparedJobTitle = value.jobTitle.toLowerCase().replace(/\\s/g, '');\n\n const regex = new RegExp(preparedQuery);\n return regex.test(perparedJobTitle);\n};\n\nconst jobLocationNameFilter = (filterQuery: string) => (value: JobItem) => {\n if (!isValidArray(value.locations, false)) return false;\n\n const preparedQuery = filterQuery.toLowerCase().replace(/\\s/g, '');\n const regex = new RegExp(preparedQuery);\n\n const result = value.locations.find((location) => {\n const preparedName = location.name?.toLowerCase().replace(/\\s/g, '');\n\n return regex.test(preparedName || '');\n });\n\n return !!result;\n};\n\nconst jobTypesFilter = (filterQuery: string) => (value: JobItem) => {\n if (!isValidArray(value?.employmentTypes, false)) return false;\n\n const preparedQuery = filterQuery.toLowerCase().replace(/\\s/g, '');\n const regex = new RegExp(preparedQuery);\n\n return !!value.employmentTypes.find((type) => {\n if (!type.name) return false;\n const preparedText = type.name.toLowerCase().replace(/\\s/g, '');\n return regex.test(preparedText);\n });\n};\n\nconst removeMatchIntersections = (array: FilterMatch[], item?: JobItem[]) => {\n if (!item) return [];\n return item?.filter(\n (m) => !array.find((prioItem) => prioItem.item.id === m.id)\n );\n};\n\ninterface FilterMatch {\n item: JobItem;\n priority: number;\n}\n\nconst filterJobs = (filterQuery: string, jobs: JobItem[]) => {\n const prioList: FilterMatch[] = [];\n if (\n !isValidArray(\n jobs?.filter((job) => job.jobTitle !== undefined),\n false\n )\n ) {\n return prioList;\n }\n\n // PRIO 1 Filter: Exact name\n const exactNameMatches = jobs?.filter(jobExactTitleFilter(filterQuery));\n if (isValidArray(exactNameMatches, false)) {\n prioList.push(\n ...exactNameMatches.map((match) => ({\n item: match,\n priority: 1,\n }))\n );\n }\n\n // PRIO 2 Filter: Name\n const nameMatches = removeMatchIntersections(\n prioList,\n jobs?.filter(jobSoftTitleFilter(filterQuery))\n );\n if (isValidArray(nameMatches, false)) {\n prioList.push(\n ...nameMatches.map((match) => ({\n item: match,\n priority: 2,\n }))\n );\n }\n\n // PRIO 3 Filter: Location\n const locationNameMatches = removeMatchIntersections(\n prioList,\n jobs?.filter(jobLocationNameFilter(filterQuery))\n );\n if (isValidArray(locationNameMatches, false)) {\n prioList.push(\n ...locationNameMatches.map((match) => ({\n item: match,\n priority: 3,\n }))\n );\n }\n\n // PRIO 4 Filter: Job Type\n const typeMatches = removeMatchIntersections(\n prioList,\n jobs?.filter(jobTypesFilter(filterQuery))\n );\n\n if (isValidArray(typeMatches, false)) {\n prioList.push(\n ...typeMatches.map((match) => ({\n item: match,\n priority: 4,\n }))\n );\n }\n\n return prioList;\n};\n\nconst JobList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of job item settings */\n jobs?: JobItem[];\n\n /** Total amount all locations */\n totalJobLocations?: number;\n\n /** Label to show if all location selected */\n allJobLocationsLabel?: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /** Injection function for job time model icon */\n modelIcon?: () => React.ReactNode;\n\n /** Injection function for job location icon */\n locationIcon?: () => React.ReactNode;\n\n /** Initial filter query on component render */\n initialFilterQuery?: string;\n\n /** Filter placeholder */\n filterPlaceholder?: string;\n\n /** Show filter input field */\n hasFilter?: boolean;\n\n /** Injection function for filter submit icon */\n filterSubmitIcon?: (isInverted?: boolean) => React.ReactNode;\n\n /** Injection function for filter reset icon */\n filterClearIcon?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n anchorId,\n jobs,\n bgMode,\n modelIcon,\n locationIcon,\n totalJobLocations,\n allJobLocationsLabel,\n initialFilterQuery,\n filterPlaceholder,\n hasFilter,\n filterSubmitIcon,\n filterClearIcon,\n}) => {\n const { colors, globals } = useLibTheme();\n const filterName = globals.sections.jobFilterName;\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const jobCount = jobs?.length || 0;\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight<HTMLDivElement>({\n listLength: jobCount,\n identifiers: ['[data-sheet=\"title\"]', '[data-sheet=\"info\"]'],\n responsive: {\n small: 1,\n semilarge: 2,\n large: 3,\n },\n });\n\n const [filterQuery, setFilterQuery] = React.useState<string>(\n initialFilterQuery || ''\n );\n const isMounted = useMounted();\n\n const jobMatches: FilterMatch[] = React.useMemo(() => {\n const queryParts =\n filterQuery !== undefined\n ? filterQuery.split(' ').map((part) => part.trim())\n : [''];\n const searchMatches: Array<{\n match: FilterMatch;\n intersections: number;\n }> = [];\n\n // tracking matches of each query part\n for (const part of queryParts) {\n const matches = filterJobs(escapeRegExp(part), jobs || []);\n\n for (const match of matches) {\n const intersectionIndex = searchMatches.findIndex(\n (sItem) => sItem.match.item.id === match.item.id\n );\n\n if (intersectionIndex !== -1) {\n searchMatches[intersectionIndex].intersections += 1;\n } else {\n searchMatches.push({\n match,\n intersections: 1,\n });\n }\n }\n }\n\n // filter search matches by intersections so only matches with results for all search parts are shown\n return searchMatches\n .filter((m) => m.intersections >= queryParts.length)\n .map<FilterMatch>((m) => ({\n ...m.match,\n }));\n }, [filterQuery, jobs]);\n\n const getFilter = useCallback(() => {\n return getUrlParams()[filterName];\n }, [filterName]);\n\n useEffect(() => {\n const urlFilter = getFilter();\n\n if (\n urlFilter !== undefined &&\n urlFilter !== null &&\n typeof urlFilter === 'string'\n ) {\n setFilterQuery(urlFilter);\n }\n }, [getFilter]);\n\n useEffect(() => {\n if (isMounted) return;\n\n // set inital data into URL\n if (filterQuery) {\n setUrlParam(filterName, filterQuery);\n } else {\n deleteUrlParam(filterName);\n }\n }, [filterName, filterQuery, isMounted]);\n\n useUpdateEffect(() => {\n // set filters to URL params\n if (filterQuery) {\n setUrlParam(filterName, filterQuery);\n } else {\n deleteUrlParam(filterName);\n }\n }, [filterQuery]);\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {hasFilter && (\n <Filter\n placeholder={filterPlaceholder || 'Suche'}\n value={filterQuery}\n initialValue={initialFilterQuery}\n onSubmit={setFilterQuery}\n isInverted={isInverted}\n submitIcon={filterSubmitIcon}\n clearIcon={filterClearIcon}\n />\n )}\n <List>\n {jobMatches\n ?.sort((a, b) => a.priority - b.priority)\n .map((match, i) => (\n <Item key={i}>\n <JobCard\n ref={cardRefs[i]}\n {...match.item}\n isInverted={isInverted}\n hasBackground={hasBg}\n modelIcon={modelIcon}\n locationIcon={locationIcon}\n totalLocations={totalJobLocations}\n allLocationsLabel={allJobLocationsLabel}\n />\n </Item>\n ))}\n </List>\n </Wrapper>\n </Section>\n );\n};\n\nexport const JobListComponent = JobList;\nexport default withLibTheme(JobList);\n","import ClockFilled from 'components/base/icons/ClockFilled';\nimport LocationPin from 'components/base/icons/LocationPin';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\nimport { JobCardProps } from 'components/blocks/JobCard';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\nimport React from 'react';\nimport styled from 'styled-components';\nimport { isValidArray } from 'utils/arrays';\nimport { concat } from 'utils/concat';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { generateJob, StructuredEmploymentType } from 'utils/structuredData';\nimport { spacings } from 'utils/styles';\n\nconst ArticleHead = styled.div`\n & + * {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst JobInfos = styled(Copy)`\n &:not(:first-child) {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst Info = styled.div`\n display: -ms-grid;\n display: grid;\n\n -ms-grid-columns: min-content 1fr;\n grid-template-columns: min-content 1fr;\n -ms-grid-rows: min-content 1fr;\n grid-auto-rows: min-content 1fr;\n\n & + & {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Icon = styled.span`\n display: flex;\n align-items: center;\n\n & > * {\n height: 32px;\n width: 32px;\n }\n`;\n\nconst MainLabel = styled.span`\n display: flex;\n align-items: center;\n`;\n\nconst Text = styled(Copy)`\n & + & {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n margin-top: ${spacings.spacer}px;\n`;\n\nexport interface OrganizationData {\n name?: string;\n url?: string;\n logo?: string;\n telephone?: string;\n email?: string;\n address?: {\n streetAddress?: string;\n addressLocality?: string;\n postalCode?: string;\n addressCountry?: string;\n };\n}\n\nexport type JobArticleProps = Omit<\n JobCardProps,\n 'isInverted' | 'hasBackground' | 'link'\n> & {\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Abstract text which summarizes the job */\n abstract?: string;\n\n /** Text that describes the job (richtext) */\n description?: string;\n\n /** The hiring organization (important for structured data) */\n organization?: OrganizationData;\n\n /** The date of posting the job tender (important for structured data) */\n datePosted?: Date;\n\n /** Function to inject primary action */\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Function to inject secondary action */\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n};\n\nconst JobArticle: React.FC<JobArticleProps> = ({\n anchorId,\n bgMode,\n jobTitle,\n employmentTypes,\n locations,\n totalLocations,\n allLocationsLabel,\n modelIcon,\n locationIcon,\n abstract,\n description,\n organization,\n datePosted,\n primaryAction,\n secondaryAction,\n}) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasEmploymentType = isValidArray(employmentTypes, false);\n const validLocations = locations?.filter((loc) => loc.name);\n const hasLocations = isValidArray(validLocations, false);\n\n let locationText = '';\n\n if (hasLocations) {\n if (\n totalLocations !== undefined &&\n validLocations.length >= totalLocations\n ) {\n locationText = allLocationsLabel || '';\n } else {\n locationText = validLocations.map((loc) => loc.name)?.join(', ');\n }\n }\n\n const jsonLd = {\n jobTitle, // title\n locations, // jobLocation\n jobDesc: concat([abstract, description], ' - '), // description\n organization: organization, // hiringOrganization\n directApply: primaryAction || secondaryAction ? true : false, // directApply\n employmentTypes:\n (employmentTypes\n ?.filter((el) => el.type)\n .map((el) => el.type) as StructuredEmploymentType[]) || [],\n datePosted, // datePosted\n };\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n {generateJob(jsonLd)}\n <Wrapper clampWidth=\"small\" addWhitespace>\n <ArticleHead>\n <Heading\n size=\"heading-2\"\n innerHTML={jobTitle}\n isInverted={isInverted}\n />\n {(hasEmploymentType || hasLocations) && (\n <JobInfos\n type=\"copy-b\"\n data-sheet=\"info\"\n isInverted={isInverted}\n >\n {hasEmploymentType && (\n <Info>\n <Icon>\n {modelIcon ? (\n modelIcon()\n ) : (\n <ClockFilled />\n )}\n </Icon>\n <MainLabel>\n {employmentTypes\n ?.filter((type) => type.name)\n .map((type) => type.name)\n ?.join(', ')}\n </MainLabel>\n </Info>\n )}\n\n {hasLocations && (\n <Info>\n <Icon>\n {locationIcon ? (\n locationIcon()\n ) : (\n <LocationPin />\n )}\n </Icon>\n <MainLabel>{locationText}</MainLabel>\n </Info>\n )}\n </JobInfos>\n )}\n </ArticleHead>\n {abstract && (\n <Text type=\"copy-b\" isInverted={isInverted}>\n {abstract}\n </Text>\n )}\n {description && (\n <Text innerHTML={description} isInverted={isInverted} />\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const JobArticleComponent = JobArticle;\nexport default withLibTheme(JobArticle);\n","import React, { useMemo } from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\nimport { spacings } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Grid from 'components/base/Grid';\nimport InfoList, { InfoGroup } from 'components/blocks/InfoList';\nimport POIFacts from 'components/blocks/POIFacts';\nimport { isValidArray } from 'utils/arrays';\n\nconst StyledImage = styled(Image)`\n &:not(:last-child) {\n margin-bottom: ${spacings.spacer}px;\n }\n`;\n\nconst Facts = styled(POIFacts)`\n max-width: 880px;\n`;\n\nconst PoiTitle = styled(Heading)`\n max-width: 880px;\n\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2; /* number of lines to show */\n line-clamp: 2;\n -webkit-box-orient: vertical;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst PoiText = styled(Copy)`\n max-width: 880px;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst PointOfInterestDetail: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** POI image */\n image?: Omit<ImageProps, 'coverSpace'>;\n\n /** POI title */\n title?: string;\n\n /** POI intro text */\n intro?: string;\n\n /** POI text (richtext) */\n text?: string;\n\n /** Array of POI facts */\n facts?: string[];\n\n /** Additional POI infos */\n infos?: InfoGroup[];\n\n /** Section background */\n bgMode?: 'inverted' | 'full';\n\n /** Function to inject custom feature node */\n customFact?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n }) => React.ReactNode;\n}> = ({\n anchorId,\n image,\n title,\n intro,\n text,\n facts,\n infos,\n bgMode,\n customFact,\n}) => {\n const { colors } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n const hasInfos = useMemo(() => {\n return isValidArray(\n infos?.filter((info) => isValidArray(info.items, false)),\n false\n );\n }, [infos]);\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {image?.small && (\n <StyledImage\n {...image}\n coverSpace\n allowEdgeRadius\n isInverted={isInverted}\n />\n )}\n <Grid.Row\n gutter={spacings.nudge * 5}\n semilarge={{ gutter: spacings.spacer }}\n >\n <Grid.Col semilarge={{ span: hasInfos ? 5.7 / 8 : 1 }}>\n {title && (\n <PoiTitle size=\"heading-2\" isInverted={isInverted}>\n {title}\n </PoiTitle>\n )}\n {isValidArray(facts, false) && (\n <Facts\n isInverted={isInverted}\n facts={facts}\n customFact={customFact}\n />\n )}\n {intro && (\n <PoiText\n size=\"medium\"\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n />\n )}\n {text && (\n <PoiText\n size=\"medium\"\n isInverted={isInverted}\n innerHTML={text}\n />\n )}\n </Grid.Col>\n {hasInfos && (\n <Grid.Col semilarge={{ span: 2.3 / 8 }}>\n <InfoList isInverted={isInverted} items={infos} />\n </Grid.Col>\n )}\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const PointOfInterestDetailComponent = PointOfInterestDetail;\nexport default withLibTheme(PointOfInterestDetail);\n","import Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { Info } from 'components/blocks/InfoList';\nimport POICard, { POICardProps } from 'components/blocks/POICard';\nimport FilterField from 'components/fields/FilterField';\nimport useUpdateEffect from 'utils/useUpdateEffect';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { isValidArray } from 'utils/arrays';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { mq, spacings } from 'utils/styles';\nimport { escapeRegExp } from 'utils/escape';\nimport useMounted from 'utils/useMounted';\nimport { deleteUrlParam, getUrlParams, setUrlParam } from 'utils/urlParams';\n\nconst Content = styled.div`\n & > * + * {\n margin-top: ${spacings.nudge * 5}px;\n }\n\n @media ${mq.large} {\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst Filter = styled(FilterField)`\n // margin to show prevent section overflow outline\n margin-top: 2px;\n\n &:not(:last-child) {\n margin-bottom: ${spacings.nudge * 5}px;\n }\n`;\n\nconst poiExactNameFilter =\n (filterQuery: string) => (value: PointOfInterestOverviewItem) => {\n const regex = new RegExp(filterQuery);\n return regex.test(value.name);\n };\n\nconst poiSoftNameFilter =\n (filterQuery: string) => (value: PointOfInterestOverviewItem) => {\n const preparedQuery = filterQuery.toLowerCase().replace(/\\s/g, '');\n const preparedName = value.name.toLowerCase().replace(/\\s/g, '');\n\n const regex = new RegExp(preparedQuery);\n return regex.test(preparedName);\n };\n\nconst poiFactFilter =\n (filterQuery: string) => (value: PointOfInterestOverviewItem) => {\n if (!isValidArray(value.facts, false)) return false;\n\n const preparedQuery = filterQuery.toLowerCase().replace(/\\s/g, '');\n const regex = new RegExp(preparedQuery);\n\n const result = value.facts.find((fact) => {\n const preparedFact = fact.toLowerCase().replace(/\\s/g, '');\n return regex.test(preparedFact);\n });\n\n return !!result;\n };\n\nconst poiInfoFilter =\n (filterQuery: string) => (value: PointOfInterestOverviewItem) => {\n if (!isValidArray(value?.infos, false)) return false;\n\n const preparedQuery = filterQuery.toLowerCase().replace(/\\s/g, '');\n const regex = new RegExp(preparedQuery);\n\n return !!value.infos.find((info) => {\n if (!info.text) return false;\n const preparedText = info.text.toLowerCase().replace(/\\s/g, '');\n return regex.test(preparedText);\n });\n };\n\nconst poiDescriptionFilter =\n (filterQuery: string) => (value: PointOfInterestOverviewItem) => {\n if (!value.shortDescription) return false;\n\n const preparedQuery = filterQuery.toLowerCase().replace(/\\s/g, '');\n const preparedDesc = value.shortDescription\n .toLowerCase()\n .replace(/\\s/g, '');\n\n const regex = new RegExp(preparedQuery);\n return regex.test(preparedDesc);\n };\n\nconst removeMatchIntersections = (\n array: FilterMatch[],\n item?: PointOfInterestOverviewItem[]\n) => {\n if (!item) return [];\n return item?.filter(\n (m) => !array.find((prioItem) => prioItem.item.id === m.id)\n );\n};\n\nconst filterPois = (\n filterQuery: string,\n pois: PointOfInterestOverviewItem[]\n) => {\n const prioList: FilterMatch[] = [];\n if (\n !isValidArray(\n pois?.filter((poi) => poi.id !== undefined),\n false\n )\n ) {\n return prioList;\n }\n\n // PRIO 1 Filter: Exact name\n const exactNameMatches = pois?.filter(poiExactNameFilter(filterQuery));\n if (isValidArray(exactNameMatches, false)) {\n prioList.push(\n ...exactNameMatches.map((match) => ({\n item: match,\n priority: 1,\n }))\n );\n }\n\n // PRIO 2 Filter: Name\n const nameMatches = removeMatchIntersections(\n prioList,\n pois?.filter(poiSoftNameFilter(filterQuery))\n );\n\n if (isValidArray(nameMatches, false)) {\n prioList.push(\n ...nameMatches.map((match) => ({\n item: match,\n priority: 2,\n }))\n );\n }\n\n // PRIO 3 Filter: Facts\n const factMatches = removeMatchIntersections(\n prioList,\n pois?.filter(poiFactFilter(filterQuery))\n );\n\n if (isValidArray(factMatches, false)) {\n prioList.push(\n ...factMatches.map((match) => ({\n item: match,\n priority: 3,\n }))\n );\n }\n\n // PRIO 4 Filter: Description\n const infoMatches = removeMatchIntersections(\n prioList,\n pois?.filter(poiInfoFilter(filterQuery))\n );\n\n if (isValidArray(infoMatches, false)) {\n prioList.push(\n ...infoMatches.map((match) => ({\n item: match,\n priority: 4,\n }))\n );\n }\n\n // PRIO 5 Filter: Description\n const descMatches = removeMatchIntersections(\n prioList,\n pois?.filter(poiDescriptionFilter(filterQuery))\n );\n\n if (isValidArray(descMatches, false)) {\n prioList.push(\n ...descMatches.map((match) => ({\n item: match,\n priority: 5,\n }))\n );\n }\n\n return prioList;\n};\n\ninterface CardProps extends POICardProps {\n id: string;\n infos?: Array<Info & { allowFiltering?: boolean }>;\n}\n\nexport type PointOfInterestOverviewItem = Omit<CardProps, 'isInverted'>;\n\ninterface FilterMatch {\n item: PointOfInterestOverviewItem;\n priority: number;\n}\n\nconst PointOfInterestOverview: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of POI card settings */\n pois?: PointOfInterestOverviewItem[];\n\n /** Enable/Disable filtering */\n enableFiltering?: boolean;\n\n /** Initial filter query on component render */\n initialFilterQuery?: string;\n\n /** Placeholder for filter input */\n filterPlaceholder?: string;\n\n /** Injection function for filter submit icon */\n filterSubmitIcon?: (isInverted?: boolean) => React.ReactNode;\n\n /** Injection function for filter reset icon */\n filterClearIcon?: (isInverted?: boolean) => React.ReactNode;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n}> = ({\n anchorId,\n bgMode,\n pois,\n enableFiltering,\n initialFilterQuery,\n filterPlaceholder = 'Filter',\n filterSubmitIcon,\n filterClearIcon,\n}) => {\n const { colors, globals } = useLibTheme();\n const filterName = globals.sections.poiFilterName;\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const [filterQuery, setFilterQuery] = useState<string>(\n initialFilterQuery || ''\n );\n const isMounted = useMounted();\n\n const poiMatches: FilterMatch[] = React.useMemo(() => {\n const queryParts = filterQuery.split(' ').map((part) => part.trim());\n const searchMatches: Array<{\n match: FilterMatch;\n intersections: number;\n }> = [];\n\n // tracking matches of each query part\n for (const part of queryParts) {\n const matches = filterPois(escapeRegExp(part), pois || []);\n\n for (const match of matches) {\n const intersectionIndex = searchMatches.findIndex(\n (sItem) => sItem.match.item.id === match.item.id\n );\n\n if (intersectionIndex !== -1) {\n searchMatches[intersectionIndex].intersections += 1;\n } else {\n searchMatches.push({\n match,\n intersections: 1,\n });\n }\n }\n }\n\n // filter search matches by intersections so only matches with results for all search parts are shown\n return searchMatches\n .filter((m) => m.intersections >= queryParts.length)\n .map<FilterMatch>((m) => ({\n ...m.match,\n }));\n }, [filterQuery, pois]);\n\n const getFilter = useCallback(() => {\n return getUrlParams()[filterName];\n }, [filterName]);\n\n useEffect(() => {\n const urlFilter = getFilter();\n\n if (\n urlFilter !== undefined &&\n urlFilter !== null &&\n typeof urlFilter === 'string'\n ) {\n setFilterQuery(urlFilter);\n }\n }, [getFilter]);\n\n useEffect(() => {\n if (isMounted) return;\n\n // set inital data into URL\n if (filterQuery) {\n setUrlParam(filterName, filterQuery);\n } else {\n deleteUrlParam(filterName);\n }\n }, [filterName, filterQuery, isMounted]);\n\n useUpdateEffect(() => {\n // set filters to URL params\n if (filterQuery) {\n setUrlParam(filterName, filterQuery);\n } else {\n deleteUrlParam(filterName);\n }\n }, [filterQuery]);\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {enableFiltering && (\n <Filter\n value={filterQuery}\n initialValue={initialFilterQuery}\n placeholder={filterPlaceholder}\n onSubmit={setFilterQuery}\n submitIcon={filterSubmitIcon}\n clearIcon={filterClearIcon}\n isInverted={isInverted}\n />\n )}\n <Content>\n {poiMatches\n ?.sort((a, b) => a.priority - b.priority)\n ?.map((poi, i) => (\n <POICard\n key={i}\n {...poi.item}\n isInverted={isInverted}\n />\n ))}\n </Content>\n </Wrapper>\n </Section>\n );\n};\n\nexport const PointOfInterestOverviewComponent = PointOfInterestOverview;\nexport default withLibTheme(PointOfInterestOverview);\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport useLeafletMap, { LeafletMapMarker } from 'utils/useLeafletMap';\nimport { mq, withRange, getColors as color, spacings } from 'utils/styles';\nimport {\n generateNavbarIdent as genIdent,\n getFullNavbarHeights as getNavHeight,\n} from '../navigation/Navigation';\nimport { getSVGDataImg as getSVGData } from 'utils/dataURI';\nimport LocationPin from 'components/base/icons/LocationPin';\nimport Copy from 'components/typography/Copy';\nimport { isValidArray } from 'utils/arrays';\nimport POIFacts from 'components/blocks/POIFacts';\nimport InfoList, { Info } from 'components/blocks/InfoList';\nimport useGeolocation from 'utils/useGeolocation';\nimport CurrentLocation from 'components/base/icons/CurrentLocation';\nimport Cross from 'components/base/icons/Cross';\nimport MyLocation from 'components/base/icons/MyLocation';\n\nconst genHeightStyles = () => css`\n // Doing some crazy shit to calculate curent navbar height in CSS\n ${({ theme }) => {\n // navbar main only\n const mainIdent = genIdent({\n pageFlow: 'beforeContent',\n hasMain: true,\n });\n\n // navbar main and top\n const mainTopIdent = genIdent({\n pageFlow: 'beforeContent',\n hasMain: true,\n hasTop: true,\n });\n\n // navbar main and bottom\n const mainBottomIdent = genIdent({\n pageFlow: 'beforeContent',\n hasMain: true,\n hasBottom: true,\n });\n\n // full navbar with all bars\n const fullIdent = genIdent({\n pageFlow: 'beforeContent',\n hasTop: true,\n hasMain: true,\n hasBottom: true,\n });\n\n const navMainHeight = getNavHeight(theme, mainIdent).large;\n const navMainTopHeight = getNavHeight(theme, mainTopIdent).large;\n const navMainBottomHeight = getNavHeight(theme, mainBottomIdent).large;\n const navFullHeight = getNavHeight(theme, fullIdent).large;\n\n const mapToSelector = (idents: string[]) => {\n return idents.map((id) => `[data-navbar-ident*='${id}']`).join('');\n };\n\n const refHeight = '100vh';\n\n return css`\n ${Map} {\n height: ${refHeight};\n }\n\n // with main navbar element\n header${mapToSelector(mainIdent.split('-'))} ~ & {\n ${Map} {\n height: calc(${refHeight} - ${navMainHeight[0]}px);\n }\n }\n\n // with main and top navbar elements\n header${mapToSelector(mainTopIdent.split('-'))} ~ & {\n ${Map} {\n height: calc(${refHeight} - ${navMainTopHeight[0]}px);\n }\n }\n\n // with main and bottom navbar elements\n header${mapToSelector(mainBottomIdent.split('-'))} ~ & {\n ${Map} {\n height: calc(${refHeight} - ${navMainBottomHeight[0]}px);\n }\n }\n\n // with all navbar elements\n header${mapToSelector(fullIdent.split('-'))} ~ & {\n ${Map} {\n height: calc(${refHeight} - ${navFullHeight[0]}px);\n }\n }\n\n @media ${mq.semilarge} {\n // with main navbar element\n header${mapToSelector(mainIdent.split('-'))} ~ & {\n ${Map} {\n height: calc(${refHeight} - ${navMainHeight[1]}px);\n }\n }\n\n // with main and top navbar elements\n header${mapToSelector(mainTopIdent.split('-'))} ~ & {\n ${Map} {\n height: calc(${refHeight} - ${navMainTopHeight[1]}px);\n }\n }\n\n // with main and bottom navbar elements\n header${mapToSelector(mainBottomIdent.split('-'))} ~ & {\n ${Map} {\n height: calc(\n ${refHeight} - ${navMainBottomHeight[1]}px\n );\n }\n }\n\n // with all navbar elements\n header${mapToSelector(fullIdent.split('-'))} ~ & {\n ${Map} {\n height: calc(${refHeight} - ${navFullHeight[1]}px);\n }\n }\n }\n `;\n }}\n`;\n\nconst PoiMapSection = styled(Section)<{ isLarge?: boolean }>`\n position: relative;\n ${({ isLarge }) => isLarge && genHeightStyles()}\n\n header + & {\n ${withRange([0], 'padding-top')}\n ${withRange([0], 'margin-top')}\n }\n`;\n\nconst MapContainer = styled.div`\n position: relative;\n`;\n\nconst Map = styled.div<{ isLarge?: boolean }>`\n min-height: 360px;\n height: 360px;\n max-height: 1300px;\n z-index: 0;\n\n @media ${mq.medium} {\n height: 600px;\n min-height: 600px;\n }\n`;\n\nconst RequestGeolocationBtn = styled.button`\n position: absolute;\n top: ${spacings.nudge * 2}px;\n left: ${spacings.nudge * 2}px;\n\n background-color: transparent;\n border: none;\n padding: ${spacings.nudge}px;\n cursor: pointer;\n\n transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n opacity: 0.6;\n }\n }\n\n &:focus {\n outline: 2px solid ${({ theme }) => color(theme).primary.default};\n transform: scale(1.012);\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n & > * {\n width: 30px;\n height: 30px;\n }\n`;\n\nconst CardStage = styled.div`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 10;\n\n display: flex;\n align-items: flex-end;\n justify-content: flex-end;\n\n pointer-events: all;\n background-color: rgba(255, 255, 255, 0.8);\n\n @media ${mq.medium} {\n position: absolute;\n background-color: transparent;\n padding: ${spacings.nudge * 2}px;\n padding-bottom: ${spacings.nudge * 3}px;\n\n pointer-events: none;\n }\n`;\n\nconst MapCardView = styled.div`\n max-height: 100%;\n width: 100%;\n padding: ${spacings.nudge * 2}px;\n overflow: auto;\n\n background: ${({ theme }) => color(theme).elementBg.light};\n box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.3);\n pointer-events: all;\n border-radius: 8px;\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.medium} {\n max-width: 400px;\n }\n`;\n\nconst MapCardHeader = styled.header`\n display: flex;\n align-items: center;\n`;\n\nconst CloseBtn = styled.button`\n display: inline-block;\n border: none;\n background-color: transparent;\n cursor: pointer;\n margin-left: auto;\n padding: ${spacings.nudge}px;\n\n transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n opacity: 0.6;\n }\n }\n\n &:focus {\n outline: 2px solid ${({ theme }) => color(theme).primary.default};\n transform: scale(1.012);\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst MapCard: FC<{\n name?: string;\n facts?: string[];\n description?: string;\n infos?: Info[];\n\n action?: React.ReactNode;\n onClose?: () => void;\n customFact?: (props: { key: React.Key; name: string }) => React.ReactNode;\n customClose?: React.ReactNode;\n\n className?: string;\n}> = ({\n name,\n facts,\n description,\n infos,\n action,\n customFact,\n customClose,\n onClose,\n className,\n}) => {\n const { colors } = useLibTheme();\n\n return (\n <MapCardView className={className}>\n <MapCardHeader>\n {name && (\n <Copy type=\"copy-b\" size=\"big\">\n {name}\n </Copy>\n )}\n <CloseBtn onClick={onClose}>\n {customClose || <Cross iconColor={colors.text.default} />}\n </CloseBtn>\n </MapCardHeader>\n {isValidArray(facts, false) && (\n <POIFacts facts={facts} customFact={customFact} />\n )}\n {description && (\n <Copy type=\"copy\" size=\"small\" innerHTML={description} />\n )}\n {isValidArray(infos, false) && (\n <InfoList\n items={[\n {\n items: infos,\n },\n ]}\n />\n )}\n {action && action}\n </MapCardView>\n );\n};\n\nexport interface LocationIcon {\n url: string;\n size: [number, number];\n anchor: [number, number];\n\n sizeActive: [number, number];\n anchorActive: [number, number];\n}\n\nexport interface MapPOI {\n /** Unique ID */\n id: string;\n\n /** Latitude and Longitude of item position */\n position: [number, number];\n\n /** Marker icon settings */\n icon?: LocationIcon;\n\n /** POI name */\n name?: string;\n\n /** POI short description text */\n description?: string;\n\n /** Array of POI facts */\n facts?: string[];\n\n /** Array of additional POI informations */\n infos?: Info[];\n\n /** Function to inject custom action node */\n action?: React.ReactNode;\n}\n\nconst PointOfInterestMap: FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Size mode */\n size?: 'default' | 'large';\n\n /** Array of POI card settings */\n pois?: MapPOI[];\n\n /** Use geolocation for own position */\n showOwnPosition?: boolean;\n\n /** Map tile provider */\n provider?: string;\n\n /** Map attribution text (richtext) */\n attribution?: string;\n\n /** Initial center of the map */\n center?: [number, number];\n\n /** Initial map zoom */\n zoom?: number;\n\n /** Min map zoom */\n minZoom?: number;\n\n /** Max map zoom */\n maxZoom?: number;\n\n /** Zoom if map jumps to location */\n flyToZoom?: number;\n\n /** Initial location */\n initialPointOfInterest?: string;\n\n /** Show all markers on first load */\n allMarkersOnInit?: boolean;\n\n /** Restrict map to bounds of markers area */\n restrictToMarkersArea?: boolean;\n\n /** Map container padding for show all markers */\n fitBoundsPadding?: [number, number];\n\n /** Function to inject custom fact node into MapCard */\n customFact?: (props: { key: React.Key; name: string }) => React.ReactNode;\n\n /** Custom current position marker */\n currentPosMarker?: LocationIcon;\n\n /** Custom card close icon */\n customCardClose?: React.ReactNode;\n\n /** Custom icon for my location request button */\n customLocationRequest?: React.ReactNode;\n}> = ({\n anchorId,\n size,\n pois,\n initialPointOfInterest = '',\n provider,\n attribution,\n center = [51.505, -0.09],\n zoom = 5,\n fitBoundsPadding,\n allMarkersOnInit = false,\n restrictToMarkersArea = true,\n showOwnPosition,\n flyToZoom,\n customFact,\n currentPosMarker,\n customCardClose,\n customLocationRequest,\n}) => {\n const isLarge = size === 'large';\n const { colors } = useLibTheme();\n\n const [activePoiId, setActivePoiId] = useState<string>(\n initialPointOfInterest || ''\n );\n const [isDirty, setIsDirty] = useState<boolean>(false);\n const activePOI = useMemo(() => {\n return pois?.find((poi) => poi.id === activePoiId);\n }, [activePoiId, pois]);\n\n const {\n isSupported: isGeolocationSupported,\n location,\n reset: resetGeolocation,\n // error,\n } = useGeolocation(true, false);\n\n const mapMarkers = useMemo(() => {\n const defaultMarker: LocationIcon = {\n size: [28, 28],\n anchor: [14, 28],\n sizeActive: [70, 70],\n anchorActive: [35, 70],\n url: getSVGData(<LocationPin />),\n };\n\n // marker of own position\n const defaultPosMarker: LocationIcon = {\n size: [24, 24],\n anchor: [12, 12],\n sizeActive: [24, 24],\n anchorActive: [12, 12],\n url: getSVGData(<CurrentLocation iconColor=\"#5383EC\" />),\n };\n\n const markers: LeafletMapMarker[] =\n pois\n ?.filter((poi) => poi.id !== undefined)\n ?.map(({ id, position, icon }) => ({\n id,\n position,\n icon: icon || defaultMarker,\n isInteractive: true,\n })) || [];\n\n if (\n isGeolocationSupported &&\n location?.coords.latitude &&\n location?.coords.longitude\n ) {\n markers.push({\n id: 'my-current-position-123456789',\n position: [location.coords.latitude, location.coords.longitude],\n icon: currentPosMarker || defaultPosMarker,\n });\n }\n\n return markers;\n }, [\n currentPosMarker,\n isGeolocationSupported,\n location?.coords.latitude,\n location?.coords.longitude,\n pois,\n ]);\n\n const {\n isLoaded,\n setContainer: setMapContainer,\n flyToActive,\n showAllMarkers,\n flyToPosition,\n getCurrentZoom,\n } = useLeafletMap({\n url: provider,\n attribution,\n center,\n zoom,\n activeMarkerId: activePoiId,\n markers: mapMarkers,\n fitBoundsPadding,\n restrictToMarkersArea,\n showZoomControls: true,\n zoomControlPosition: 'bottomleft',\n onMarkerClick: (markerId) => {\n setActivePoiId((prev) => {\n if (prev === markerId) {\n return '';\n }\n return markerId;\n });\n },\n });\n\n useEffect(() => {\n if (isLoaded && !isDirty) {\n if (allMarkersOnInit) showAllMarkers();\n } else {\n const currentZoom = getCurrentZoom();\n let zoom = flyToZoom;\n if (flyToZoom !== undefined && currentZoom > flyToZoom) {\n zoom = currentZoom;\n }\n\n flyToActive(zoom);\n }\n }, [\n activePoiId,\n allMarkersOnInit,\n flyToActive,\n flyToZoom,\n getCurrentZoom,\n initialPointOfInterest,\n isDirty,\n isLoaded,\n showAllMarkers,\n ]);\n\n useEffect(() => {\n if (!isDirty && activePoiId !== initialPointOfInterest) {\n setIsDirty(true);\n }\n }, [activePoiId, initialPointOfInterest, isDirty]);\n\n const handleLocationRequest = async () => {\n if (location?.coords?.latitude && location?.coords?.longitude) {\n const currentZoom = getCurrentZoom();\n let zoom = flyToZoom;\n if (flyToZoom !== undefined && currentZoom > flyToZoom) {\n zoom = currentZoom;\n }\n\n flyToPosition(\n [location.coords.latitude, location.coords.longitude],\n zoom\n );\n } else {\n try {\n const position = await resetGeolocation();\n if (position) showAllMarkers();\n } catch (err) {\n // console.log(err);\n }\n }\n };\n\n return (\n <PoiMapSection\n anchorId={anchorId}\n bgColor=\"image\"\n bgMode=\"full\"\n isLarge={isLarge}\n >\n <Wrapper clampWidth={isLarge ? 'large' : 'normal'}>\n <MapContainer>\n <Map ref={setMapContainer} isLarge={size === 'large'} />\n {showOwnPosition && (\n <RequestGeolocationBtn onClick={handleLocationRequest}>\n {customLocationRequest || (\n <MyLocation iconColor={colors.text.default} />\n )}\n </RequestGeolocationBtn>\n )}\n {activePOI && activePOI.name && (\n <CardStage\n onClick={(ev) => {\n if (ev.target !== ev.currentTarget) return;\n setActivePoiId('');\n }}\n >\n <MapCard\n {...activePOI}\n onClose={() => setActivePoiId('')}\n customFact={customFact}\n customClose={customCardClose}\n />\n </CardStage>\n )}\n </MapContainer>\n </Wrapper>\n </PoiMapSection>\n );\n};\n\nexport const PointOfInterestMapComponent = PointOfInterestMap;\nexport default withLibTheme(PointOfInterestMap);\n"],"names":["distinct","value","index","array","indexOf","AccordionContainer","styled","div","withConfig","displayName","componentId","templateObject_1","__makeTemplateObject","spacings","nudge","View","details","templateObject_2","AccordionHead","summary","templateObject_3","_a","isInverted","hasBg","theme","color","getColors","elementBg","light","medium","mq","lightHover","mediumHover","Column","Copy","templateObject_4","AccordionText","templateObject_5","spacer","semilarge","gridSettings","gutter","AccordionBlock","label","text","aside","isSelected","onClick","itemIcon","className","colors","useLibTheme","React","createElement","open","onToggle","renderAs","size","type","Minus","iconColor","default","Plus","hasAside","innerHTML","Accordion$1","withLibTheme","anchorId","items","bgMode","_b","useState","currentItems","setCurrentItems","Section","addSeperation","bgColor","sectionBg","dark","mapToBgMode","JsonLd","item","mainEntity","map","name","acceptedAnswer","generateFAQ","Wrapper","addWhitespace","Grid","Row","Col","i","key","concat","prev","copy","__spreadArray","push","splice","primary","inverted","global","sections","edgeRadius","invertedHover","hover","Icon","MainLabel","Content","Title","ViewLink","Link","templateObject_6","Alert","title","date","description","link","customIcon","formattedDate","StatusFormatter","getTime","getFormattedDate","Info","textColor","__assign","ariaLabel","href","undefined","List","ul","ListItem","li","large","itemsPerRow","AlertList$1","alertCount","length","alertRefs","useEqualSheetHeight","listLength","identifiers","responsive","small","xlarge","ref","StyledTitle","ContentText","StyledActions","Actions","Article$1","titleAs","_c","titleSize","superTitle","superTitleAs","intro","asideText","halfAside","primaryAction","secondaryAction","hasContent","clampWidth","colorMode","valign","span","secondary","ContactView","Avatar","img","getGlobals","imagePlaceholderBg","Description","StyledIntro","IntroBlock","hasDecorator","StyledContactBox","avatar","src","alt","getGridWidth","cols","NewsletterWrapper","templateObject_7","Badge","templateObject_8","CallToAction$1","contact","badge","hasNewsletter","newsFormMain","useContext","ThemeContext","isCentered","SolidView","cardColor","hasLink","css","ImageView","imageTextGradient","StyledImage","Image","hasIcon","TextContainer","templateObject_9","Footer","SubLabel","templateObject_11","templateObject_12","CardLink","templateObject_13","Card","subLabel","image","decorator","CardView","defaultCardColor","coverSpace","ratios","w","h","templateObject_14","CardItem","templateObject_15","isEqual","threeCols","CardList$1","maxThreeCols","clamp","num","min","max","Math","Images","BackgroundImg","ForegroundContainer","hasTransition","hasAnim","initalValue","ForegroundImg","ForegroundOverlay","ImageLabel","ForegroundLabel","BackgroundLabel","ControlContainer","templateObject_10","Control","ComparisonSlider$1","initialValue","foregroundImg","backgroundImg","foregroundLabel","backgroundLabel","overlayColor","labelColor","dragControl","enableControlAnim","isIE","useIE","_d","slideValue","setSlideValue","_e","isHolding","setIsHolding","_f","isDragging","setIsDragging","_g","interacted","setInteracted","_h","sideOffset","setSideOffset","controlRef","useRef","useEffect","current","offsetWidth","handleInitalLoad","observer","IntersectionObserver","entries","isIntersecting","unobserve","target","rootMargin","threshold","observe","window","removeEventListener","document","readyState","addEventListener","setCurrentPos","clientX","relativeClientX","getBoundingClientRect","x","width","percentage","ev","currentTarget","onMouseMove","onMouseDown","onMouseUp","onMouseLeave","onTouchMove","touches","onTouchStart","onTouchEnd","style","left","ArrowLeftRight","clickable","IntroContainer","clampTitle","wrapper","ExternalIconHolder","withRange","PromotionCard","forwardRef","externalLinkIcon","icon","linkObj","isExternal","externalIconString","ReactDOMServer","renderToString","External","isMain","CrossPromotion$1","main","isMirrored","card","FieldSet","fieldset","Fields","fieldValidator","config","__awaiter","inputType","error","isRequired","errorMsg","test","areaValidator","selectValidator","selectedItem","datepickerValidator","single","singleSelect","singleDateError","multiDateError","locationValidator","position","fieldGroupValidator","groupType","selectValues","uploadValidator","files","StyledSection","Form","form","FieldContainer","FormFooter","Status","ActionContainer","DynamicForm$1","fields","onSubmit","submitAction","definitions","subjectLine","targetEmails","submitReponse","setSubmitResponse","initalData","initialOption","initialDates","group","initalArray_1","forEach","field","initialChecked","every","useFormik","initialValues","values","helpers","valuesAndMails","setSubmitting","response","sent","resetForm","isError","validateOnBlur","validateOnChange","validate","errors","error_1","error_2","error_3","error_4","error_5","error_6","error_7","handleSubmit","handleChange","handleBlur","setFieldTouched","validateField","submitForm","setValues","isSubmitting","touched","dirty","latestValuesRef","setField","useCallback","props","shouldValidate","fieldKeys","Object","keys","noValidate","isTouched","setTouched","Textfield","enableMemo","placeholder","onChange","onBlur","infoMessage","info","errorMessage","renderField","area","Textarea","renderAreaField","datepicker","dates","start","end","DatepickerCmp","onDataChange","minDate","maxDate","deleteAction","handleReset","ButtonGhost","Button","nextCtrlUrl","prevCtrlUrl","renderDatepickerField","location","locationData","mappedData","LocationField","initialMapCenter","zoom","customLocationControl","customToggle","customResetControl","toggleLabel","trackLocationLabel","renderLocationField","checkbox","groupData","FieldWrapper","Head","ci","Checkbox","cIndex","Messages","renderCheckboxGroupField","radio","fi","RadioButton","e","renderRadioGroupField","select","SelectDropdown","dropdownItems","filter","selectedOption","indicator","renderSelectField","upload","FileUploadCmp","uploadLabel","addBtnLabel","acceptedFormats","onUploadFiles","customUploadIcon","customDeleteIcon","renderUploadField","message","copyInverted","as","Label","generateTextField","NewsletterForm$1","customField","action","method","formRef","initialData","submit","generationProps","isDisabled","TagContainer","TagWrapper","Events","FilterIcon","EventItem","ListFooter","ShowMore","itemCount","EventOverview$1","tags","events","initial","showMoreText","onTagClick","customTag","globals","filterName","eventFilterName","activeTags","selectedTags","setSelectedTags","visibleRows","setVisibleRows","targetRef","observerSupported","useObserverSupport","isMounted","useMounted","eventCount","setNewPos","useScrollTo","getFilters","filters","getUrlParams","tagsFilter","split","isValidArray","apply","paramTags","setUrlParam","join","deleteUrlParam","useUpdateEffect","handleTagClick","tag","enableToggling","prevCopy","itemIndex","filteredEvents","useMemo","filtered","hasTags","visibleEvents","_","element","entry","ceil","disconnect","filteredTags","Filter","isActive","clickHandler","preventDefault","Tag","timespan","eventDateFormat","eventTimeFormat","eventLocaleKey","getFormattedTimespan","eventTimespanFormat","duration","address","EventBlock","Pointer","EventList$1","event","tagHref","url","validUrl","URL","newParams","URLSearchParams","search","set","encodeURIComponent","toString","err","getEventFilterParams","EventTitle","Heading","EventDateTime","EventAddress","EventText","EventDetail$1","infos","hasInfos","publishedAt","formatter","allowEdgeRadius","abstract","InfoList","ImageContainer","SubTitle","Text","Fact","subTitle","showPlaceholder","FactFill","FactGrid$1","columns","facts","factCount","cardRefs","fact","FactsContainer","FactItem","hasBack","hasText","ContentBlock","FactList$1","TitleLink","copyStyle","font","getFonts","big","colorInverted","ArticleContent","Action","Feature","features","featureCount","isHalf","halign","feature","Gallery$1","images","isFull","genHeightStyles","mainIdent","genIdent","pageFlow","hasMain","mainTopIdent","hasTop","mainBottomIdent","hasBottom","fullIdent","navMainHeight","getNavHeight","getFullNavbarHeights","navMainTopHeight","navMainBottomHeight","navFullHeight","mapToSelector","idents","id","refHeight","StyledPoster","HeaderSection","HeaderSectionSmall","videoUrl","focus","kenBurnsZoom","kenBurnsZoomPoint","kenBurnsInterval","onImageChange","children","HeaderVideo","placeholderImg","HeaderKenBurns","zoomPoint","interval","HeaderPoster","bgImage","wrapperLarge","Overlay","textOnImage","bgValue","ContentMobile","Header$1","focusPoint","customImgOverlay","overlay","Fragment","ItemContainer","Items","isVisible","Item","ItemLink","IconList$1","toggle","showLessText","enableToggle","showMore","setShowMore","handleToggleClick","ratio","isToggled","additionalProps","IndexLink","LinkLabel","IconWrapper","IndexList$1","scrollToOffset","setTargetPos","useMediaQueries","topOffset","setTopOffset","handleLinkClick","getAttribute","getElementById","top","scrollY","hash","history","pushState","header","querySelector","navbarIdent","getNavbarState","navbarHeights","ArrowDown","isStackable","clampAbstract","clampText","MapSection","MapContainer","gridWidth","wrapperWhitespace","xxlarge","CardWrapper","CardContainer","seperation","padding","InfoCardView","CardHeader","ContactList","ContactListLink","AddressContainer","CompanyInfo","companyName","street","postalCode","city","country","Desc","LocationInfoCard","addressIcon","addressIconContent","LocationPin","phoneIconContent","telephone","Phone","mailIconContent","email","Mail","Controls","FylToCtrlContainer","button","Map$2","provider","attribution","center","flyToZoom","initialLocation","locations","allMarkersOnInit","fitBoundsPadding","flyToControl","controlNext","controlPrev","activeLocationId","setActiveLocationId","isDirty","setIsDirty","activeLocation","find","l","defaultMarker","anchor","sizeActive","anchorActive","getSVGData","getSVGDataImg","useLeafletMap","activeMarkerId","markers","isInteractive","onMarkerClick","isLoaded","setMapContainer","setContainer","flyToActive","showAllMarkers","goToNext","currentIndex","findIndex","newIndex","goToPrevious","geo","latitude","longitude","streetAddress","addressLocality","addressRegion","addressCountry","generateLocalBusiness","stopPropagation","move","Icons","ArrowRightGhost","TitleIcon","NavBlock","customTitleIcon","NavList$1","NumberContainer","Number","Callout","stringLength","IconBlock","number","height","ContentContainer","NumberList$1","section","Parallax","hAlign","contentWidth","Container","figure","verticallyCentered","imageTextGradientCentered","Intro","Poster$1","horizontallyCentered","maxTitleLines","maxTextLines","ItemList","ItemBlock","ListHead","Price","PriceBlock","price","PriceList$1","isHighlighted","PriceTag","hasBackground","mode","PriceTable$1","priceTagCount","Source","Quote$1","source","citeUrl","cite","ImageWrapper","SimpleImage$1","Cards","FollowUs","InstagramIcon","SocialWall$1","hashTag","followUs","socialIcon","Instagram","TableWrapper","Table$1","tableItems","TableBlock","Figure","Video","VideoBlock","isSplitted","mapToTeaserBgMode","preventSplit","Teaser$1","video","hasVideo","urls","viewRef","setLoaded","isVideoActive","setVideoActive","isObserverSupported","viewEl","muted","autoPlay","loop","onCanPlayThrough","aspectRatios","titleHyphens","getGridColOfContent","WideVideo","WideImage","TeaserWide$1","TimelineBlock","isSwitched","TimelineText","ItemTitle","ItemTextBlock","Timeline$1","targetRefs","setTargetRefs","observerRef","activeItem","setActiveItem","t","Array","fill","createRef","embedId","playIcon","consentText","consentAction","VideoCard","VideoContainer","VideoControls","RawVideo$1","videoUrls","autoplay","isStarted","setIsStarted","controls","Play","JobInfos","JobCard","jobTitle","employmentTypes","totalLocations","allLocationsLabel","modelIcon","locationIcon","hasEmploymentType","validLocations","loc","hasLocations","locationText","hyphens","ClockFilled","escapeRegExp","replace","FilterField","removeMatchIntersections","m","prioItem","filterJobs","filterQuery","jobs","prioList","job","exactNameMatches","RegExp","jobExactTitleFilter","match","priority","nameMatches","preparedQuery","toLowerCase","perparedJobTitle","jobSoftTitleFilter","locationNameMatches","regex","preparedName","jobLocationNameFilter","typeMatches","preparedText","jobTypesFilter","JobList$1","totalJobLocations","allJobLocationsLabel","initialFilterQuery","filterPlaceholder","hasFilter","filterSubmitIcon","filterClearIcon","jobFilterName","jobCount","setFilterQuery","jobMatches","queryParts","part","trim","searchMatches","queryParts_1","_i","intersectionIndex","sItem","intersections","matches_1","getFilter","urlFilter","submitIcon","clearIcon","sort","a","b","ArticleHead","JobArticle$1","organization","datePosted","jsonLd","jobDesc","directApply","el","toISOString","employmentType","hiringOrganization","logo","jobLocation","generateJob","Facts","POIFacts","PoiTitle","PoiText","PointOfInterestDetail$1","customFact","filterPois","pois","poi","poiExactNameFilter","poiSoftNameFilter","factMatches","preparedFact","poiFactFilter","infoMatches","poiInfoFilter","descMatches","shortDescription","preparedDesc","poiDescriptionFilter","PointOfInterestOverview$1","enableFiltering","poiFilterName","poiMatches","POICard","PoiMapSection","isLarge","Map","RequestGeolocationBtn","CardStage","MapCardView","MapCardHeader","CloseBtn","MapCard","customClose","onClose","Cross","PointOfInterestMap$1","initialPointOfInterest","restrictToMarkersArea","showOwnPosition","currentPosMarker","customCardClose","customLocationRequest","activePoiId","setActivePoiId","activePOI","_j","useGeolocation","isGeolocationSupported","isSupported","resetGeolocation","mapMarkers","defaultPosMarker","CurrentLocation","coords","_k","showZoomControls","zoomControlPosition","markerId","flyToPosition","getCurrentZoom","currentZoom","zoom_1","zoom_2","MyLocation","moveRatio","direction","setIsLoaded","yTransform","setYTransform","cRef","setContainerRef","parallaxRef","isNaN","prevEl","previousElementSibling","bgIdent","dataset","stackIdent","setAttribute","handleScroll","containerPos","transform"],"mappings":"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"}
|