@blateral/b.kit 1.4.1 → 1.5.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/lib/components/base/icons/AngleDown.d.ts +7 -0
- package/lib/components/base/icons/AngleDown.d.ts.map +1 -0
- package/lib/components/base/icons/AngleUp.d.ts +7 -0
- package/lib/components/base/icons/AngleUp.d.ts.map +1 -0
- package/lib/components/buttons/Button.d.ts +2 -1
- package/lib/components/buttons/Button.d.ts.map +1 -1
- package/lib/components/buttons/ButtonGhost.d.ts +2 -1
- package/lib/components/buttons/ButtonGhost.d.ts.map +1 -1
- package/lib/components/fields/Checkbox.d.ts +1 -1
- package/lib/components/fields/Checkbox.d.ts.map +1 -1
- package/lib/components/fields/Datepicker.d.ts +26 -0
- package/lib/components/fields/Datepicker.d.ts.map +1 -0
- package/lib/components/fields/FileUpload.d.ts +12 -0
- package/lib/components/fields/FileUpload.d.ts.map +1 -0
- package/lib/components/fields/Radio.d.ts +14 -0
- package/lib/components/fields/Radio.d.ts.map +1 -0
- package/lib/components/fields/SelectDropdown.d.ts +24 -0
- package/lib/components/fields/SelectDropdown.d.ts.map +1 -0
- package/lib/components/fields/Textarea.d.ts.map +1 -1
- package/lib/components/fields/Textfield.d.ts +1 -1
- package/lib/components/fields/Textfield.d.ts.map +1 -1
- package/lib/components/sections/DynamicForm.d.ts +94 -0
- package/lib/components/sections/DynamicForm.d.ts.map +1 -0
- package/lib/components/sections/NumberList.d.ts.map +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.es.js +2 -2
- package/lib/index.es.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/utils/styles.d.ts +1 -0
- package/lib/utils/styles.d.ts.map +1 -1
- package/package.json +8 -6
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/useScroll.ts","../src/utils/styles.ts","../src/utils/useMediaQuery.ts","../src/utils/useEqualSheetHeight.ts","../src/utils/cookie-consent/cookie.ts","../src/utils/useIE.ts","../src/utils/useScrollTo.ts","../src/utils/usePoster.ts","../src/utils/hexRgbConverter.ts","../src/utils/backgroundImage.ts","../src/utils/LibThemeProvider.tsx","../src/components/base/Section.tsx","../src/components/base/Wrapper.tsx","../src/components/typography/Heading.tsx","../src/components/blocks/Title.tsx","../src/components/typography/Copy.tsx","../src/components/blocks/Actions.tsx","../src/components/blocks/IntroBlock.tsx","../src/components/blocks/Image.tsx","../src/components/sections/Gallery.tsx","../src/components/base/Grid.tsx","../src/components/sections/Teaser.tsx","../src/components/sections/TeaserWide.tsx","../src/components/buttons/Pointer.tsx","../src/components/blocks/Slider.tsx","../src/components/sections/IconList.tsx","../src/components/sections/Article.tsx","../src/components/blocks/Feature.tsx","../src/components/sections/FeatureList.tsx","../src/components/blocks/PromotionCard.tsx","../src/components/sections/CrossPromotion.tsx","../src/components/sections/Poster.tsx","../src/components/base/icons/Play.tsx","../src/components/blocks/VideoCard.tsx","../src/components/sections/CallToAction.tsx","../src/components/sections/FactList.tsx","../src/components/blocks/Fact.tsx","../src/components/sections/FactGrid.tsx","../src/components/sections/Table.tsx","../src/components/base/icons/ArrowLeftGhost.tsx","../src/components/base/icons/ArrowRightGhost.tsx","../src/components/blocks/LeafletMap.tsx","../src/components/sections/Map.tsx","../src/components/fields/Textfield.tsx","../src/components/fields/Textarea.tsx","../src/components/base/icons/Check.tsx","../src/components/fields/Checkbox.tsx","../src/components/sections/Form.tsx","../src/components/base/icons/Plus.tsx","../src/components/base/icons/Minus.tsx","../src/components/sections/Accordion.tsx","../src/components/base/icons/ArrowLeftRight.tsx","../src/components/sections/ComparisonSlider.tsx","../src/components/sections/carousel/CarouselBase.tsx","../src/components/sections/carousel/ImageCarousel.tsx","../src/components/sections/carousel/FeatureCarousel.tsx","../src/components/typography/Link.tsx","../src/components/blocks/Bdot.tsx","../src/components/blocks/SocialList.tsx","../src/components/sections/Footer.tsx","../src/components/sections/header/HeaderKenBurns.tsx","../src/components/sections/header/HeaderPoster.tsx","../src/components/typography/Callout.tsx","../src/components/sections/header/HeaderVideo.tsx","../src/components/sections/header/Header.tsx","../src/components/sections/news/NewsAuthorCard.tsx","../src/components/blocks/Tag.tsx","../src/utils/statusFormatter.ts","../src/components/blocks/NewsCard.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/sections/news/NewsVideo.tsx","../src/utils/useObserverSupport.ts","../src/components/sections/news/NewsOverview.tsx","../src/components/buttons/QuicknavButton.tsx","../src/components/sections/Quicknav.tsx","../src/components/sections/Timeline.tsx","../src/components/sections/SocialNav.tsx","../src/components/sections/NumberList.tsx","../src/components/buttons/Button.tsx","../src/components/buttons/ButtonGhost.tsx","../src/components/fields/CompactForm.tsx","../src/components/fields/SearchInput.tsx","../src/utils/cookie-consent/mutations.ts","../src/components/blocks/CookieConsent.tsx","../src/components/base/icons/Cross.tsx","../src/components/sections/navigation/menu/Flyout.tsx","../src/components/sections/navigation/menu/Menu.tsx","../src/components/base/icons/MenuBurger.tsx","../src/components/sections/navigation/TopBar.tsx","../src/components/base/icons/ArrowRight.tsx","../src/components/base/icons/CrossSmall.tsx","../src/components/base/icons/Magnifier.tsx","../src/components/base/icons/FlyTo.tsx","../src/components/base/icons/Star.tsx","../src/components/base/icons/StarGhost.tsx","../src/components/base/icons/Mail.tsx","../src/components/base/icons/Phone.tsx","../src/components/base/icons/Route.tsx","../src/components/base/icons/socials/Facebook.tsx","../src/components/base/icons/socials/LinkedIn.tsx","../src/components/base/icons/socials/Twitter.tsx","../src/components/base/icons/socials/Xing.tsx","../src/components/base/icons/socials/Instagram.tsx","../src/components/base/icons/socials/Youtube.tsx","../src/components/sections/Intro.tsx","../src/components/sections/navigation/Navigation.tsx","../src/components/sections/carousel/PromotionCarousel.tsx","../src/components/sections/Video.tsx","../src/components/sections/carousel/VideoCarousel.tsx","../src/utils/useImgPreload.ts","../src/utils/useInterval.ts","../src/utils/useItemHeight.ts","../src/utils/useTouch.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { useEffect, useRef, useState } from 'react';\n\nexport enum ScrollDirection {\n UP,\n DOWN,\n}\n\nexport const useScroll = ({\n initialTopOffset = 0,\n onLeftOffset,\n onEnterOffset,\n}: {\n initialTopOffset?: number;\n onLeftOffset?: () => void;\n onEnterOffset?: () => void;\n}) => {\n const [topOffset, setTopOffset] = useState<number>(initialTopOffset);\n const [isTop, setIsTop] = useState<boolean>(true);\n const [isInOffset, setIsInOffset] = useState<boolean>(true);\n const [scrollDirection, setScrollDirection] = useState<ScrollDirection>(\n ScrollDirection.DOWN\n );\n const lastScrollPos = useRef<number>(0);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const handleScroll = () => {\n setIsTop(window.pageYOffset <= 1);\n setIsInOffset(window.pageYOffset <= 1 + topOffset);\n\n if (lastScrollPos.current) {\n // check if top offset is left\n if (\n window.pageYOffset > 1 + topOffset &&\n lastScrollPos.current <= 1 + topOffset\n ) {\n onLeftOffset && onLeftOffset();\n }\n\n // check if top offset was joined\n if (\n window.pageYOffset <= 1 + topOffset &&\n lastScrollPos.current > 1 + topOffset\n ) {\n onEnterOffset && onEnterOffset();\n }\n\n setScrollDirection((prev) => {\n if (window.pageYOffset <= 1) return ScrollDirection.DOWN;\n return window.pageYOffset > lastScrollPos.current\n ? ScrollDirection.DOWN\n : window.pageYOffset < lastScrollPos.current\n ? ScrollDirection.UP\n : prev;\n });\n }\n lastScrollPos.current = window.pageYOffset;\n };\n\n handleScroll();\n window.addEventListener('scroll', handleScroll);\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n };\n }, [\n lastScrollPos,\n onLeftOffset,\n onEnterOffset,\n scrollDirection,\n topOffset,\n ]);\n\n return {\n isTop,\n isInOffset,\n scrollDirection,\n setTopOffset,\n topOffset,\n };\n};\n","import { css, DefaultTheme } from 'styled-components';\n\nexport type MediaQueryType =\n | 'small'\n | 'medium'\n | 'semilarge'\n | 'large'\n | 'xlarge'\n | 'xxlarge'\n | 'xxxLarge';\n\nexport const mq: { [key in Exclude<MediaQueryType, 'small'>]: string } = {\n medium: '(min-width: 40em)', // 640 px\n semilarge: '(min-width: 52em)', // 832 px\n large: '(min-width: 64em)', // 1024 px\n xlarge: '(min-width: 90em)', // 1440 px\n xxlarge: '(min-width: 105em)', // 1680 px\n xxxLarge: '(min-width: 150em)', // 2400 px\n};\n\nexport const spacings = {\n nudge: 5,\n spacer: 20,\n wrapperSmall: 1000,\n wrapper: 1440,\n wrapperLarge: 2400,\n};\n\n/***** Range Helper *****/\nexport const getSizeByRange = (range: [number, number]): string =>\n `calc(${range[0]}px + (${range[1]} - ${range[0]}) * ((100vw - 300px) / (${spacings.wrapperLarge} - 320)));`;\n\nexport const withRange = (\n range: [number, number],\n property: string\n): string => {\n if (!property) return '';\n\n return `\n ${property}: ${range[0]}px;\n ${property}: ${getSizeByRange(range)};\n\n @media ${mq.xxlarge} {\n ${property}: ${range[1]}px;\n }\n `;\n};\n\n/**\n * Generate css attributes to style text color with plain color or gradient\n * @param fallbackColor\n * @param gradient\n */\nexport const styleTextColor = (fallbackColor?: string, gradient?: string) => {\n if (gradient) {\n return css`\n color: ${fallbackColor};\n\n @supports (-webkit-text-stroke: thin) {\n padding-top: 2px;\n background: ${gradient};\n background-clip: text;\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n `;\n } else {\n return css`\n color: ${fallbackColor};\n `;\n }\n};\n\n/***** Color Types *****/\ninterface ColorOptions {\n light: string;\n medium: string;\n dark: string;\n}\n\nexport type ColorOptionsType = keyof ColorOptions;\n\nexport interface Colors {\n dark: string;\n light: string;\n mono: ColorOptions;\n primary: ColorOptions;\n secondary: ColorOptions;\n tertiary: ColorOptions;\n}\n\nexport type ColorType = keyof Colors;\n\n/***** Font Types *****/\nexport interface FontProps {\n family: string;\n weight?: string;\n style?: string;\n lineHeight?: string;\n letterSpacing?: string;\n size: [number, number];\n textTransform?: string;\n color?: string;\n colorInverted?: string;\n colorGradient?: string;\n colorGradientInverted?: string;\n}\n\nexport type FontPropsType = keyof FontProps;\n\nexport interface FontOptions {\n small: FontProps;\n medium: FontProps;\n big: FontProps;\n}\n\nexport type FontOptionType = keyof FontOptions;\n\nexport interface Fonts {\n copy: FontOptions;\n 'copy-i': FontOptions;\n 'copy-b': FontOptions;\n super: FontProps;\n 'heading-1': FontProps;\n 'heading-2': FontProps;\n 'heading-3': FontProps;\n 'heading-4': FontProps;\n label: FontOptions;\n callout: FontOptions;\n}\n\nexport type FontType = keyof Fonts;\n\n/**\n * Base font styles for all font types\n */\nexport type FontBase = FontProps;\n\n/***** Colors *****/\nconst defaultColors: Colors = {\n dark: '#000000',\n light: '#ffffff',\n mono: {\n light: '#F0F0F0',\n medium: '#C8C8C8',\n dark: '#A5A5A5',\n },\n primary: {\n light: '#DD8AA3',\n medium: '#98012E',\n dark: '#59011B',\n },\n secondary: {\n light: '#5A7384',\n medium: '#35444E',\n dark: '#222A30',\n },\n tertiary: {\n light: '#F2F5FA',\n medium: '#C9CED7',\n dark: '#A8ABB4',\n },\n};\n\n/***** Fonts *****/\nconst copyBase: FontProps = {\n family: 'Roboto',\n weight: '400',\n style: 'normal',\n lineHeight: '1.53',\n letterSpacing: '0',\n size: [10, 13],\n textTransform: '',\n color: defaultColors.dark,\n colorInverted: defaultColors.light,\n};\n\nconst headingBase: FontProps = {\n family: 'Roboto',\n weight: '700',\n style: 'normal',\n lineHeight: '1.1',\n letterSpacing: '0',\n size: [38, 40],\n color: defaultColors.dark,\n colorInverted: defaultColors.light,\n};\n\nconst defaultFonts: Fonts = {\n copy: {\n small: {\n ...copyBase,\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n 'copy-i': {\n small: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n 'copy-b': {\n small: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n super: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.43',\n size: [14, 16],\n },\n 'heading-1': headingBase,\n 'heading-2': {\n ...headingBase,\n size: [32, 35],\n lineHeight: '1.14',\n },\n 'heading-3': {\n ...headingBase,\n size: [19, 22],\n lineHeight: '1.14',\n },\n 'heading-4': {\n ...headingBase,\n size: [16, 19],\n lineHeight: '1.5',\n },\n label: {\n small: {\n ...copyBase,\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n callout: {\n small: {\n ...headingBase,\n lineHeight: '1.14',\n size: [33, 35],\n },\n medium: {\n ...headingBase,\n lineHeight: '1.18',\n size: [50, 55],\n },\n big: {\n ...headingBase,\n lineHeight: '1.18',\n size: [60, 62],\n },\n },\n};\n\n/***** Global Settings *****/\nexport interface GlobalSettings {\n sections: {\n /** Radius of image and card edges */\n edgeRadius: string | null;\n /** Customnize gradient for all text on image background gradients */\n imageTextGradient: string;\n /** Date and Time Formats for all news sections */\n newsDateFormat: string;\n newsTimeFormat: string;\n newsLocaleKey: 'de' | 'en';\n };\n}\n\nconst defaultGlobalSettings: GlobalSettings = {\n sections: {\n edgeRadius: null,\n imageTextGradient: `\n linear-gradient(\n 0deg,\n rgba(0, 0, 0, 0.6) 0%,\n rgba(0, 0, 0, 0.4) 30%,\n rgba(0, 0, 0, 0.1) 60%,\n rgba(0, 0, 0, 0) 100%\n );\n `,\n newsDateFormat: 'dd/mm/yy',\n newsTimeFormat: 'hh:mm',\n newsLocaleKey: 'en',\n },\n};\n\n/***** Theme Helper *****/\nexport const getBaseTheme = () => {\n return {\n colors: { ...defaultColors },\n fonts: { types: { ...defaultFonts } },\n globalSettings: { ...defaultGlobalSettings },\n } as DefaultTheme;\n};\n\nexport const getTheme = (theme?: DefaultTheme) => {\n return (\n (theme && theme.colors && theme.fonts && theme.globalSettings) ||\n getBaseTheme()\n );\n};\n\nexport const getColors = (theme?: DefaultTheme) => {\n return theme && theme.colors ? theme.colors : getBaseTheme().colors;\n};\n\nexport const getFonts = (theme?: DefaultTheme) => {\n return theme && theme.fonts?.types\n ? theme.fonts.types\n : getBaseTheme().fonts.types;\n};\n\nexport const getGlobalSettings = (theme?: DefaultTheme) => {\n return theme && theme.globalSettings\n ? theme.globalSettings\n : getBaseTheme().globalSettings;\n};\n","import { useEffect, useState } from 'react';\nimport { MediaQueryType, mq } from './styles';\n\nexport const isBrowser =\n typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\n// *****************\n// useBreakpoint\n// *****************\nconst checkMq = (cmq: MediaQueryType, checkMqs: MediaQueryType[]) => {\n return (\n isBrowser &&\n (checkMqs.length <= 0 || checkMqs.indexOf(cmq) > -1) &&\n (cmq !== 'small' ? window.matchMedia(mq[cmq]).matches : true)\n );\n};\n\nexport const getMediaQuery = (checkMqs: MediaQueryType[]): MediaQueryType => {\n if (checkMq('xxxLarge', checkMqs)) {\n return 'xxxLarge';\n } else if (checkMq('xxlarge', checkMqs)) {\n return 'xxlarge';\n } else if (checkMq('xlarge', checkMqs)) {\n return 'xlarge';\n } else if (checkMq('large', checkMqs)) {\n return 'large';\n } else if (checkMq('semilarge', checkMqs)) {\n return 'semilarge';\n } else if (checkMq('medium', checkMqs)) {\n return 'medium';\n } else {\n return 'small';\n }\n};\n\nexport const useMediaQuery = (mqs?: MediaQueryType[]) => {\n const checkMqs = mqs || [];\n const [mediaQuery, setMediaQuery] = useState<MediaQueryType | undefined>();\n\n useEffect(() => {\n const handleResize = () => {\n const newMediaQuery = getMediaQuery(checkMqs);\n\n if (newMediaQuery !== mediaQuery) {\n setMediaQuery(newMediaQuery);\n }\n };\n\n window.addEventListener('resize', handleResize);\n setMediaQuery(getMediaQuery(checkMqs));\n\n return () => window.removeEventListener('resize', handleResize);\n }, [checkMqs, mediaQuery]);\n\n return mediaQuery;\n};\n","import { useEffect, useState, MutableRefObject, createRef } from 'react';\nimport { useMediaQuery } from './useMediaQuery';\n\ninterface ItemsPerRow {\n small?: number;\n medium?: number;\n semilarge?: number;\n large?: number;\n xlarge?: number;\n}\n\ntype Mq = keyof ItemsPerRow;\n\n// ********************\n// useEqualSheetHeight\n// ********************\n\nexport const useEqualSheetHeight = (props: {\n listLength: number;\n identifiers: string[];\n responsive?: ItemsPerRow;\n}) => {\n const defaultResponsive = {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 3,\n xlarge: 3,\n ...props.responsive,\n };\n const mqs: Mq[] = ['small', 'medium', 'semilarge', 'large', 'xlarge'];\n const currentMq = useMediaQuery(mqs) as Mq | undefined;\n const itemsPerRow = currentMq\n ? defaultResponsive[currentMq]\n : defaultResponsive.small;\n\n const [sheetRefs, setSheetRefs] = useState<\n MutableRefObject<HTMLDivElement>[]\n >([]);\n\n const makeRows = (\n result: Array<number>[],\n _: number,\n index: number,\n arr: number[]\n ) => {\n // make new row after 3 items\n if (index % itemsPerRow === 0)\n result.push(arr.slice(index, index + itemsPerRow) as Array<number>);\n return result;\n };\n\n const setHeights = (\n heights: (number | null)[],\n selector: string,\n refs: MutableRefObject<HTMLDivElement>[]\n ) => {\n const x = heights.reduce(makeRows, []);\n\n x.forEach((rowHeights, y) => {\n const highest = rowHeights.slice().sort((vA, vB) => {\n if (vA && vB) {\n if (vA > vB) return -1;\n return 1;\n } else return 0;\n })[0];\n\n // set height of all items in row to the highest value\n if (rowHeights.length > 1 && highest) {\n for (let x = 0; x < rowHeights.length; x++) {\n const index = x + y * itemsPerRow;\n const el = refs[index].current.querySelector(selector);\n\n if (el) {\n el.setAttribute('style', `height: ${highest}px`);\n }\n }\n }\n });\n };\n\n const resize = (refs: MutableRefObject<HTMLDivElement>[]) => () => {\n const identifierSizes = new Map<string, Array<number | null>>();\n\n // create identifier map\n for (let i = 0; i < props.identifiers.length; i++) {\n identifierSizes.set(props.identifiers[i], []);\n }\n\n // set height values\n refs.filter((ref) => ref.current).forEach(({ current }) => {\n // get height for each element\n props.identifiers.forEach((id) => {\n const element = current.querySelector(id);\n element?.removeAttribute('style');\n\n const prevHeights = identifierSizes.get(id);\n if (prevHeights)\n identifierSizes.set(id, [\n ...prevHeights,\n element ? element.scrollHeight : null,\n ]);\n });\n });\n\n // set heights for each identifier\n identifierSizes.forEach((value, key) => {\n setHeights(value, key, refs);\n });\n };\n\n useEffect(() => {\n const resizeHandler = resize(sheetRefs);\n resizeHandler();\n\n window.addEventListener('resize', resizeHandler);\n\n return () => {\n window.removeEventListener('resize', resizeHandler);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sheetRefs, currentMq]);\n\n const triggerCalculation = () => {\n setSheetRefs(() =>\n Array(props.listLength)\n .fill(null)\n .map((_, i) => sheetRefs[i] || createRef())\n );\n };\n\n useEffect(() => {\n setSheetRefs(() =>\n Array(props.listLength)\n .fill(null)\n .map((_, i) => sheetRefs[i] || createRef())\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.listLength]);\n\n return {\n sheetRefs,\n triggerCalculation,\n };\n};\n","export interface Cookie<T> {\n name: string;\n data: T;\n}\n\nexport const setCookie = <T>({\n name,\n data,\n days = -1,\n path = '/',\n}: {\n name: string;\n data: T;\n days?: number;\n path?: string;\n}) => {\n let cookieString = `${name}=`;\n\n // set cookie value\n let valueString = '';\n const dataKeys = Object.keys(data);\n for (let i = 0; i < dataKeys.length; i++) {\n valueString += `${dataKeys[i]}:${data[dataKeys[i]]}|`;\n }\n\n cookieString += encodeURIComponent(\n valueString.substr(0, valueString.length - 1)\n );\n\n // specify path\n cookieString += `; path=${path};`;\n\n // check if cookie should have lifetime\n if (days >= 0) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n cookieString += ` expires=${date.toUTCString()};`;\n }\n document.cookie = cookieString;\n};\n\nexport const getCookie = <T>(name: string): Cookie<T> | undefined => {\n let cookie = undefined;\n\n // get cookie value\n const b = document.cookie.match('(^|;)\\\\s*' + name + '\\\\s*=\\\\s*([^;]+)');\n let cookieValue = b ? b.pop() : '';\n cookieValue = cookieValue ? decodeURIComponent(cookieValue) : '';\n\n if (cookieValue) {\n const valueArray = cookieValue.split('|').map((el) => {\n const keyValueArray = el.split(':');\n return {\n key: keyValueArray[0],\n value: keyValueArray[1],\n };\n });\n\n const cookieData: { [k: string]: any } = {};\n for (let i = 0; i < valueArray.length; i++) {\n const value: any = valueArray[i].value;\n\n // checking for right types\n if (!isNaN(Number(value)))\n cookieData[valueArray[i].key] = Number(value) as number;\n else if (isBoolean(value))\n cookieData[valueArray[i].key] = stringToBoolean(\n value\n ) as boolean;\n else cookieData[valueArray[i].key] = value as string;\n }\n\n cookie = {\n name: name,\n data: cookieData as T,\n } as Cookie<T>;\n }\n return cookie;\n};\n\nexport const deleteCookie = (name: string) => {\n setCookie<any>({ name, data: {} });\n};\n\nconst stringToBoolean = (value: string | number | boolean) => {\n return [true, 'true', 'True', 'TRUE', '1', 1].indexOf(value) > -1;\n};\n\nconst isBoolean = (value: string | number | boolean) => {\n return value === 'true' || value === 'false';\n};\n\nconst isNaN = (value: number) => {\n if (Number.isNaN !== undefined) return Number.isNaN(value);\n else return value !== value;\n};\n","import { useState, useEffect } from 'react';\n\nconst useIE = (initialValue?: boolean) => {\n const [isIE, setIE] = useState(initialValue || false);\n\n useEffect(() => {\n setIE((document.body.style as any).msTouchAction !== undefined);\n }, []);\n return isIE;\n};\n\nexport default useIE;\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useScrollTo = (fallbackScrollDuration: number) => {\n const startTime = useRef<number>(-1);\n const firstPos = useRef<number>(0);\n const [targetPos, setTargetPos] = useState<number | undefined>(undefined);\n\n const outQuad = (n: number) => {\n return n * (2 - n);\n };\n\n useEffect(() => {\n if (targetPos === undefined) return;\n if ('scrollBehavior' in document.documentElement.style) {\n window.scroll({\n top: targetPos,\n left: 0,\n behavior: 'smooth',\n });\n setTargetPos(undefined);\n } else {\n const animate = (timestamp: number) => {\n if (startTime.current === -1) {\n startTime.current = timestamp || new Date().getTime();\n }\n\n const elapsed = timestamp - startTime.current;\n const progress = elapsed / fallbackScrollDuration;\n const easeProgress = +outQuad(progress).toFixed(2);\n\n const newPos =\n targetPos === 0\n ? firstPos.current - firstPos.current * easeProgress\n : firstPos.current + targetPos * easeProgress;\n\n // scroll to new position\n window.scrollTo(0, newPos);\n\n if (\n (targetPos > 0 && newPos >= firstPos.current + targetPos) ||\n (targetPos < 0 && newPos <= firstPos.current + targetPos) ||\n (targetPos === 0 && newPos <= 0)\n ) {\n cancelAnimationFrame(startTime.current);\n startTime.current = -1;\n setTargetPos(undefined);\n } else {\n window.requestAnimationFrame(animate);\n }\n };\n\n cancelAnimationFrame(startTime.current);\n startTime.current = -1;\n firstPos.current =\n window.pageYOffset || document.documentElement.scrollTop;\n window.requestAnimationFrame(animate);\n }\n }, [targetPos, fallbackScrollDuration]);\n\n return setTargetPos;\n};\n","import { useEffect, useState } from 'react';\nimport { isBrowser, useMediaQuery } from './useMediaQuery';\n\n// *****************\n// usePoster\n// *****************\n\ninterface PosterImage {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n}\n\nexport const canUseWebP = () => {\n if (!isBrowser) return false;\n\n const elem = document.createElement('canvas');\n\n if (!(elem.getContext && elem.getContext('2d'))) {\n // was able or not to get WebP representation\n return elem.toDataURL('image/webp').indexOf('data:image/webp') == 0;\n }\n\n // very old browser like IE 8, canvas not supported\n return false;\n};\n\nexport type PosterMq = 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge';\n\nexport const usePoster = (\n posterImage: PosterImage & {\n webp?: PosterImage;\n },\n mqs?: PosterMq[]\n) => {\n const [currentImage, setCurrentImage] = useState<string | undefined>();\n\n const workingImage =\n posterImage.webp && canUseWebP() ? posterImage.webp : posterImage;\n const currentMq = useMediaQuery(\n mqs || ['small', 'medium', 'semilarge', 'large', 'xlarge']\n ) as PosterMq | undefined;\n\n useEffect(() => {\n if (\n currentMq &&\n workingImage[currentMq] &&\n workingImage[currentMq] !== currentImage\n ) {\n setCurrentImage(workingImage[currentMq]);\n }\n }, [currentImage, currentMq, workingImage]);\n\n return currentImage;\n};\n","// converting 6 character hex color code to rgba string\nexport const hexToRgba = (hex: string, alpha = 1) => {\n const rgb = hex.match(/\\w\\w/g)?.map((x) => parseInt(x, 16));\n return rgb && `rgba(${rgb[0]},${rgb[1]},${rgb[2]},${alpha})`;\n};\n","export const getBgImage = (\n bgImage: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n },\n mq?: 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge'\n): string => {\n switch (mq) {\n default:\n case 'small':\n return bgImage.small;\n\n case 'medium':\n return (\n bgImage.medium ||\n bgImage.semilarge ||\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.small\n );\n\n case 'semilarge':\n return (\n bgImage.semilarge ||\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.medium ||\n bgImage.small\n );\n\n case 'large':\n return (\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.semilarge ||\n bgImage.medium ||\n bgImage.small\n );\n\n case 'xlarge':\n return (\n bgImage.xlarge ||\n bgImage.large ||\n bgImage.semilarge ||\n bgImage.medium ||\n bgImage.small\n );\n }\n};\n","import React, { FC } from 'react';\nimport { DefaultTheme, ThemeProvider } from 'styled-components';\n\nimport { FontBase, getBaseTheme } from 'utils/styles';\n\ntype RecursivePartial<T> = {\n [P in keyof T]?: RecursivePartial<T[P]>;\n};\n\nexport type Theme = RecursivePartial<DefaultTheme>;\n\n/**\n * Assigning font base key values to theme. Searches for each font base object key inside target theme object and replacing the values\n * @param target Combined result object\n * @param source FontBase object with properties that should by overritten.\n */\nconst assignFontBase = (\n target: DefaultTheme,\n source?: RecursivePartial<FontBase>\n) => {\n if (!source) return target;\n // deep iterate through target and search matching key\n const assign = (target: any, key: string, value: string) => {\n Object.keys(target).forEach((tKey) => {\n // check if target value is an object and no array\n if (\n target[tKey] &&\n typeof target[tKey] === 'object' &&\n !Array.isArray(target[tKey])\n ) {\n target[tKey] = assign(target[tKey], key, value);\n } else if (key === tKey) {\n target[tKey] = value;\n }\n });\n return target;\n };\n\n // search each base key and replace values\n Object.keys(source).forEach((sKey) => {\n if (source[sKey])\n target.fonts.types = assign(target.fonts.types, sKey, source[sKey]);\n });\n return target;\n};\n\n/**\n * Comnbining Theme objects\n * @param target Result theme object\n * @param source Theme object that should be assigned to target\n */\nconst assignTo = (target: DefaultTheme, source: Theme) => {\n const output = { ...target };\n\n Object.keys(source).forEach((key) => {\n const sourceVal = source[key];\n const targetVal = target[key];\n output[key] =\n targetVal &&\n sourceVal &&\n typeof targetVal === 'object' &&\n typeof sourceVal === 'object'\n ? assignTo(targetVal, sourceVal)\n : sourceVal;\n });\n return output;\n};\n\nexport const LibThemeProvider: FC<{\n theme: Theme;\n}> = ({ theme, children }) => {\n const combinedBaseTheme = assignFontBase(getBaseTheme(), theme.fonts?.base);\n const combinedTheme = assignTo(combinedBaseTheme, theme);\n return <ThemeProvider theme={combinedTheme}>{children}</ThemeProvider>;\n};\n","import * as React from 'react';\nimport styled, { css } from 'styled-components';\nimport { mq, spacings, withRange } from 'utils/styles';\n\nexport type BgMode = 'full' | 'larger-left' | 'larger-right' | 'inverted';\n\nconst getBackground = (mode: BgMode, bgColor: string) => {\n let bgValue = undefined;\n\n switch (mode) {\n case 'full':\n bgValue = bgColor;\n break;\n\n case 'inverted':\n bgValue = bgColor;\n break;\n\n case 'larger-left':\n bgValue = `linear-gradient(to left, transparent 40%, ${bgColor} 40%)`;\n break;\n\n case 'larger-right':\n bgValue = `linear-gradient(to right, transparent 40%, ${bgColor} 40%)`;\n break;\n }\n return bgValue;\n};\n\nconst View = styled.section<{\n as?: SectionType;\n bgIdent: string;\n isStackable?: boolean;\n addSeperation?: boolean;\n}>`\n position: relative;\n overflow: ${({ as }) => (as === 'div' ? 'visible' : 'hidden')};\n\n // section paddings\n ${({ addSeperation, isStackable, bgIdent }) =>\n addSeperation &&\n css`\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4],\n 'padding-top'\n )}\n ${withRange(\n [\n isStackable ? spacings.spacer : spacings.spacer * 2,\n isStackable ? spacings.spacer : spacings.spacer * 4,\n ],\n 'padding-bottom'\n )}\n &[data-stack-ident='true'] + & {\n ${withRange([spacings.spacer, spacings.spacer], 'padding-top')};\n }\n &[data-bg-ident='${bgIdent}'] + &[data-bg-ident='${bgIdent}'] {\n ${withRange([0, 0], 'padding-top')}\n }\n `}\n\n // section margins\n ${({ addSeperation, isStackable, bgIdent }) =>\n addSeperation &&\n css`\n *:not([data-bg-ident='transparent'])\n + &[data-bg-ident='larger-left'] {\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4],\n 'margin-top'\n )};\n }\n *:not([data-bg-ident='transparent'])\n + &[data-bg-ident='larger-right'] {\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4],\n 'margin-top'\n )};\n }\n &[data-bg-ident='larger-left']\n + &:not([data-bg-ident='transparent']) {\n ${withRange(\n [\n isStackable ? spacings.spacer : spacings.spacer * 2,\n isStackable ? spacings.spacer : spacings.spacer * 4,\n ],\n 'margin-top'\n )};\n }\n &[data-bg-ident='larger-right']\n + &:not([data-bg-ident='transparent']) {\n ${withRange(\n [\n isStackable ? spacings.spacer : spacings.spacer * 2,\n isStackable ? spacings.spacer : spacings.spacer * 4,\n ],\n 'margin-top'\n )};\n }\n &[data-bg-ident='${bgIdent}'] + &[data-bg-ident='${bgIdent}'] {\n ${withRange([0, 0], 'margin-top')}\n }\n `}\n`;\n\nconst Back = styled.div<{\n bgColor?: string;\n bgMode?: BgMode;\n}>`\n display: ${({ bgColor, bgMode }) => (bgColor && bgMode ? 'block' : 'none')};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n max-width: ${({ bgMode }) =>\n (bgMode === 'full' || bgMode === 'inverted'\n ? spacings.wrapperLarge\n : spacings.wrapper) + 'px'};\n background: ${({ bgColor }) => bgColor || undefined};\n margin: 0 auto;\n\n @media ${mq.semilarge} {\n background: ${({ bgColor, bgMode }) =>\n bgColor && bgMode ? getBackground(bgMode, bgColor) : undefined};\n }\n\n @media ${mq.xlarge} {\n :before {\n content: ${({ bgMode }) =>\n bgMode === 'larger-left' ? `\"\"` : undefined};\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: ${(spacings.wrapperLarge - spacings.wrapper) / 2}px;\n background-color: ${({ bgColor }) => bgColor && bgColor};\n transform: translateX(-100%);\n }\n :after {\n content: ${({ bgMode }) =>\n bgMode === 'larger-right' ? `\"\"` : undefined};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: ${(spacings.wrapperLarge - spacings.wrapper) / 2}px;\n background-color: ${({ bgColor }) => bgColor && bgColor};\n transform: translateX(100%);\n }\n }\n`;\n\nexport type SectionType = 'header' | 'footer' | 'div';\n\nconst Section: React.FC<{\n renderAs?: SectionType;\n bgColor?: string;\n bgMode?: BgMode;\n addSeperation?: boolean;\n isStackable?: boolean;\n className?: string;\n}> = ({\n renderAs,\n bgColor,\n bgMode,\n addSeperation = false,\n isStackable = false,\n className,\n children,\n}) => {\n switch (bgMode) {\n case 'larger-left':\n bgMode = 'larger-left';\n break;\n case 'larger-right':\n bgMode = 'larger-right';\n break;\n case 'inverted':\n bgMode = 'inverted';\n break;\n case 'full':\n bgMode = 'full';\n break;\n default:\n bgMode = undefined;\n }\n\n return (\n <View\n as={renderAs}\n data-bg-ident={bgColor && bgMode ? bgMode : 'transparent'}\n bgIdent={bgColor && bgMode ? bgMode : 'transparent'}\n addSeperation={\n !renderAs || (renderAs && renderAs !== 'div')\n ? addSeperation\n : false\n }\n isStackable={isStackable}\n data-stack-ident={isStackable ? 'true' : 'false'}\n className={className}\n >\n {bgColor && bgMode && <Back bgColor={bgColor} bgMode={bgMode} />}\n {children}\n </View>\n );\n};\n\nexport default Section;\n\nexport const mapToBgMode = (\n mode?: 'full' | 'splitted' | 'inverted',\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\n default:\n return undefined;\n }\n};\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings } from 'utils/styles';\n\nexport type ClampWidthType = 'small' | 'normal' | 'large';\n\nconst View = styled.div<{\n clampWidth?: ClampWidthType;\n addWhitespace?: boolean;\n}>`\n position: relative;\n width: 100%;\n max-width: ${({ clampWidth }) =>\n clampWidth === 'large'\n ? spacings.wrapperLarge\n : clampWidth === 'small'\n ? spacings.wrapperSmall\n : spacings.wrapper}px;\n margin-left: auto;\n margin-right: auto;\n padding: 0\n ${({ addWhitespace }) => (addWhitespace ? spacings.nudge * 2 : 0)}px;\n\n @media ${mq.medium} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n\n @media ${mq.semilarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * 100 : 0}%;\n padding-left: ${({ addWhitespace }) =>\n addWhitespace\n ? `\n max(\n ${spacings.spacer}px,\n ${(1 / 28) * 100}%\n );\n `\n : 0};\n\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * spacings.wrapper : 0}px;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n`;\n\nconst Wrapper: React.FC<{\n addWhitespace?: boolean;\n clampWidth?: ClampWidthType;\n className?: string;\n}> = ({\n addWhitespace = false,\n clampWidth = 'normal',\n className,\n children,\n}) => {\n return (\n <View\n className={className}\n addWhitespace={addWhitespace}\n clampWidth={clampWidth}\n >\n {children}\n </View>\n );\n};\n\nexport default Wrapper;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n styleTextColor,\n FontType,\n getFonts as font,\n mq,\n withRange,\n} from 'utils/styles';\n\ntype HeadingType = Exclude<\n FontType,\n 'copy' | 'copy-i' | 'copy-b' | 'label' | 'callout'\n>;\n\n// Styles\nconst BaseStyles = styled.h1<{\n hyphens?: boolean;\n hasShadow?: boolean;\n textColor?: string;\n textGradient?: string;\n type: HeadingType;\n}>`\n display: inline-block;\n margin: 0;\n padding: 0;\n ${({ textColor, textGradient }) => styleTextColor(textColor, textGradient)}\n\n hyphens: auto;\n /* overflow-wrap: break-word; */\n\n ${(props: { hyphens?: boolean }) =>\n !props.hyphens &&\n css`\n @media ${mq.large} {\n hyphens: none;\n }\n `}\n\n text-shadow: ${({ hasShadow }) =>\n hasShadow && '1px 2px 8px rgba(0, 0, 0, 0.25)'};\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin: 0;\n padding: 0;\n border: 0;\n outline: 0;\n font-weight: inherit;\n font-style: inherit;\n font-size: 100%;\n font-family: inherit;\n vertical-align: baseline;\n }\n`;\n\nconst View = styled(BaseStyles)`\n font-family: ${({ type, theme }) => font(theme)[type].family};\n font-weight: ${({ type, theme }) => font(theme)[type].weight};\n font-style: ${({ type, theme }) => font(theme)[type].style};\n ${({ type, theme }) => withRange(font(theme)[type].size, 'font-size')}\n line-height: ${({ type, theme }) => font(theme)[type].lineHeight};\n letter-spacing: ${({ type, theme }) => font(theme)[type].letterSpacing};\n text-transform: ${({ type, theme }) => font(theme)[type].textTransform};\n`;\n\nexport type HeadlineTag =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'span'\n | 'div';\n\nconst Heading: React.FC<{\n as?: HeadlineTag;\n isInverted?: boolean;\n size?: HeadingType;\n textColor?: string;\n textGradient?: string;\n hyphens?: boolean;\n hasShadow?: boolean;\n innerHTML?: string;\n\n className?: string;\n}> = ({\n as,\n isInverted,\n className,\n size = 'heading-2',\n textColor,\n textGradient,\n hyphens = false,\n hasShadow = false,\n innerHTML,\n children,\n ...rest\n}) => {\n const theme = React.useContext(ThemeContext);\n let tag: HeadlineTag = 'h2';\n\n switch (size) {\n default:\n case 'heading-1':\n tag = 'h1';\n break;\n case 'heading-2':\n tag = 'h2';\n break;\n case 'heading-3':\n tag = 'h3';\n break;\n case 'heading-4':\n tag = 'h4';\n break;\n case 'super':\n tag = 'div';\n break;\n }\n\n // get font settings from global context\n const fontSettings = font(theme)?.[size];\n\n return (\n <View\n as={as || tag}\n type={size}\n textColor={\n textColor ||\n (isInverted ? fontSettings.colorInverted : fontSettings.color)\n }\n textGradient={\n textGradient ||\n (!textColor\n ? isInverted\n ? fontSettings.colorGradientInverted\n : fontSettings.colorGradient\n : undefined)\n }\n hyphens={hyphens}\n hasShadow={hasShadow}\n dangerouslySetInnerHTML={\n innerHTML && !children ? { __html: innerHTML } : undefined\n }\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n};\n\nHeading.defaultProps = {\n as: 'h2',\n size: 'heading-2',\n};\n\nexport default Heading;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport Heading, { HeadlineTag } from 'components/typography/Heading';\nimport { spacings, withRange } from 'utils/styles';\n\nconst View = styled.div<{ isCentered?: boolean }>`\n display: block;\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n margin: ${({ isCentered }) => isCentered && '0 auto'};\n\n & > * + * {\n ${withRange([spacings.nudge * 2, spacings.nudge * 3], 'padding-top')};\n }\n`;\n\nconst Title: FC<{\n colorMode?: 'default' | 'inverted' | 'onImage';\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n title?: string;\n titleAs?: HeadlineTag;\n isCentered?: boolean;\n className?: string;\n}> = ({\n colorMode = 'default',\n superTitle,\n superTitleAs,\n title,\n titleAs,\n isCentered = false,\n className,\n}) => {\n return (\n <View isCentered={isCentered} className={className}>\n {superTitle && (\n <div>\n <Heading\n as={superTitleAs || 'h2'}\n size=\"super\"\n textColor={colorMode === 'onImage' ? '#fff' : undefined}\n isInverted={colorMode === 'inverted'}\n innerHTML={superTitle}\n />\n </div>\n )}\n {title && (\n <div>\n <Heading\n as={titleAs || 'h3'}\n size=\"heading-2\"\n textColor={colorMode === 'onImage' ? '#fff' : undefined}\n isInverted={colorMode === 'inverted'}\n innerHTML={title}\n />\n </div>\n )}\n </View>\n );\n};\n\nexport default Title;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n FontType,\n mq,\n spacings,\n withRange,\n FontOptionType,\n getFonts as font,\n styleTextColor,\n} from 'utils/styles';\n\ntype CopyType = Exclude<\n FontType,\n | 'heading-1'\n | 'heading-2'\n | 'heading-3'\n | 'heading-4'\n | 'callout'\n | 'super'\n | 'label'\n>;\n\nconst BaseStyles = styled.div<{\n textColor?: string;\n textGradient?: string;\n columns?: boolean;\n type: CopyType;\n size: FontOptionType;\n}>`\n hyphens: auto;\n ${({ textColor, textGradient }) => styleTextColor(textColor, textGradient)}\n\n @media ${mq.medium} {\n hyphens: none;\n }\n\n a:not([class]) {\n color: currentColor;\n transition: color 0.25s;\n\n &:hover {\n opacity: 0.75;\n }\n }\n\n *:first-child {\n margin-top: 0;\n }\n\n // *:last-child {\n // margin-bottom: 0;\n // }\n\n :not(li) > ul,\n :not(li) > ol {\n display: inline-block;\n padding-left: 0;\n }\n\n li > ul,\n li > ol {\n padding-left: 0;\n }\n\n ul,\n ol li {\n list-style-position: outside;\n margin-left: 1.1em;\n }\n\n ${({ columns }) =>\n columns &&\n css`\n columns: 350px 2;\n column-gap: ${spacings.spacer}px;\n\n li {\n break-inside: avoid;\n }\n\n blockquote {\n break-inside: avoid;\n }\n `};\n`;\n\nconst View = styled(BaseStyles)`\n font-family: ${({ type, size, theme }) => font(theme)[type][size].family};\n font-weight: ${({ type, size, theme }) => font(theme)[type][size].weight};\n font-style: ${({ type, size, theme }) => font(theme)[type][size].style};\n ${({ type, size, theme }) =>\n withRange(font(theme)[type][size].size, 'font-size')}\n line-height: ${({ type, size, theme }) =>\n font(theme)[type][size].lineHeight};\n letter-spacing: ${({ type, size, theme }) =>\n font(theme)[type][size].letterSpacing};\n text-transform: ${({ type, size, theme }) =>\n font(theme)[type][size].textTransform};\n`;\n\nconst Copy: React.FC<{\n isInverted?: boolean;\n textColor?: string;\n textGradient?: string;\n type?: CopyType;\n size?: FontOptionType;\n columns?: boolean;\n innerHTML?: string;\n className?: string;\n}> = ({\n isInverted,\n type = 'copy',\n size = 'medium',\n textColor,\n textGradient,\n columns = false,\n innerHTML,\n className,\n children,\n ...rest\n}) => {\n const theme = React.useContext(ThemeContext);\n const fontSettings = font(theme)?.[type]?.[size];\n\n return (\n <View\n type={type}\n size={size}\n textColor={\n textColor ||\n (isInverted ? fontSettings.colorInverted : fontSettings.color)\n }\n textGradient={\n textGradient ||\n (!textColor\n ? isInverted\n ? fontSettings.colorGradientInverted\n : fontSettings.colorGradient\n : undefined)\n }\n columns={columns}\n dangerouslySetInnerHTML={\n innerHTML && !children ? { __html: innerHTML } : undefined\n }\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n};\n\nCopy.defaultProps = { type: 'copy', size: 'medium' };\n\nexport default Copy;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings } from 'utils/styles';\n\nconst View = styled.div<{ isCentered?: boolean; isMirrored?: boolean }>`\n display: inline-flex;\n flex-wrap: wrap;\n flex-direction: ${({ isMirrored }) =>\n isMirrored ? 'column-reverse' : 'column'};\n\n justify-content: ${({ isMirrored, isCentered }) =>\n isCentered ? 'center' : isMirrored ? 'flex-end' : 'flex-start'};\n\n margin-top: -${spacings.spacer * 0.5}px;\n margin-left: -${spacings.spacer}px;\n width: calc(100% + ${spacings.spacer}px);\n\n & > * {\n flex: 1 0 auto;\n margin-top: ${spacings.spacer * 0.5}px;\n margin-left: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n flex-direction: ${({ isMirrored }) =>\n isMirrored ? 'row-reverse' : 'row'};\n align-items: stretch;\n width: auto;\n }\n`;\n\nconst Actions: FC<{\n isCentered?: boolean;\n isMirrored?: boolean;\n primary?: React.ReactNode;\n secondary?: React.ReactNode;\n className?: string;\n}> = ({\n isCentered = false,\n isMirrored = false,\n primary,\n secondary,\n className,\n}) => {\n return (\n <View\n isCentered={isCentered}\n isMirrored={isMirrored}\n className={className}\n >\n {primary && primary}\n {secondary && secondary}\n </View>\n );\n};\n\nexport default Actions;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { spacings, mq, withRange } from 'utils/styles';\n\nimport Title from 'components/blocks/Title';\nimport Copy from 'components/typography/Copy';\nimport Actions from 'components/blocks/Actions';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst View = styled.div<{ isCentered?: boolean }>`\n width: 100%;\n text-align: ${({ isCentered }) => isCentered && 'center'};\n`;\n\nconst StyledTitle = styled(Title)<{ clampTitle?: boolean }>`\n max-width: ${({ clampTitle }) =>\n clampTitle && (13 / 28) * spacings.wrapper + '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.nudge * 5}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')}\n\n @media ${mq.semilarge} {\n align-items: flex-start;\n\n & > * {\n max-width: ${(19 / 28) * spacings.wrapper + 'px'};\n }\n }\n`;\n\nconst IntroBlock: React.FC<{\n colorMode?: 'default' | 'inverted' | 'onImage';\n title: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isCentered?: boolean;\n clampTitle?: boolean;\n clampText?: boolean;\n className?: string;\n}> = ({\n colorMode = 'default',\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isCentered = false,\n clampTitle = true,\n clampText = true,\n className,\n}) => {\n return (\n <View isCentered={isCentered} className={className}>\n <StyledTitle\n colorMode={colorMode}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n isCentered={isCentered}\n clampTitle={clampTitle}\n />\n {text && (\n <ContentBlock\n type=\"copy-b\"\n textColor={colorMode === 'onImage' ? '#fff' : undefined}\n isInverted={colorMode === 'inverted'}\n isCentered={isCentered}\n clampText={clampText}\n innerHTML={text}\n />\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={\n primaryAction &&\n primaryAction(\n colorMode === 'inverted' || colorMode === 'onImage'\n )\n }\n secondary={\n secondaryAction &&\n secondaryAction(\n colorMode === 'inverted' || colorMode === 'onImage'\n )\n }\n />\n )}\n </View>\n );\n};\n\nexport default IntroBlock;\n","import * as React from 'react';\nimport styled, { css } from 'styled-components';\nimport { mq } from 'utils/styles';\n\nexport interface ImageProps {\n alt?: string;\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n coverSpace?: boolean;\n}\n\nconst Img = styled.img<{ coverSpace?: boolean }>`\n max-width: 100%;\n display: block;\n align-self: flex-start;\n ${({ coverSpace }) =>\n coverSpace &&\n css`\n width: 100%;\n object-fit: cover;\n object-position: center;\n `}\n`;\n\nconst Picture = styled.picture<{ coverSpace?: boolean }>`\n ${({ coverSpace }) =>\n coverSpace &&\n `\n display: flex;\n height: 100%;\n width: 100%;\n`}\n`;\n\nconst Image: React.FC<\n { className?: string; onClick?: () => void } & ImageProps\n> = ({\n className,\n small,\n medium,\n semilarge,\n large,\n xlarge,\n alt,\n coverSpace,\n onClick,\n}) => {\n return (\n <Picture coverSpace={coverSpace} onClick={onClick}>\n {xlarge && <source srcSet={xlarge} media={mq.xlarge} />}\n {large && <source srcSet={large} media={mq.large} />}\n {semilarge && <source srcSet={semilarge} media={mq.semilarge} />}\n {medium && <source srcSet={medium} media={mq.medium} />}\n <Img\n srcSet={small}\n alt={alt || ''}\n coverSpace={coverSpace}\n loading=\"lazy\"\n className={className}\n />\n </Picture>\n );\n};\n\nexport default Image;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } 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 {\n getColors as color,\n getGlobalSettings as global,\n mq,\n spacings,\n} from 'utils/styles';\n\nconst ImgContainer = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n width: 100%;\n\n @media ${mq.semilarge} {\n margin-left: ${spacings.spacer * -1}px;\n width: calc(100% + ${spacings.spacer}px);\n }\n`;\n\nconst ImgWrapper = styled.div<{ isFull?: boolean }>`\n flex: 0 100%;\n padding-top: ${spacings.nudge * 2}px;\n\n picture > img {\n width: 100%;\n }\n\n @media ${mq.semilarge} {\n flex: 0 ${({ isFull }) => (isFull ? 100 : 50)}%;\n padding-left: ${spacings.spacer}px;\n padding-top: ${spacings.spacer}px;\n\n /* &:last-child:nth-child(odd) {\n flex: 0 100%;\n } */\n }\n`;\n\nconst StyledImage = styled(Image)`\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n overflow: hidden;\n`;\n\ntype ImageType = ImageProps & { isFull?: boolean };\n\nconst Gallery: FC<{\n bgMode?: 'full' | 'inverted';\n images?: Array<ImageType>;\n className?: string;\n}> = ({ bgMode, images, className }) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n\n const isNextImgFull = (images: ImageType[], currentIndex: number) => {\n const newIndex = ++currentIndex;\n if (images && images[newIndex]) return images[newIndex]?.isFull;\n else return false;\n };\n\n // map images to fill always full width\n images = images?.map((img, i, array) => {\n if (!img.isFull) {\n img.isFull =\n (i % 2 === 0 && isNextImgFull(array, i)) || array.length === 1;\n }\n return img;\n });\n\n return (\n <Section\n addSeperation\n bgMode={mapToBgMode(bgMode, true)}\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode === 'full'\n ? color(theme).mono.light\n : 'transparent'\n }\n className={className}\n >\n <Wrapper\n addWhitespace={global(theme).sections.edgeRadius ? true : false}\n >\n <ImgContainer>\n {images &&\n images.map((img, i) => (\n <ImgWrapper key={i} isFull={img.isFull}>\n <StyledImage {...img} />\n </ImgWrapper>\n ))}\n </ImgContainer>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Gallery;\n","import * as React from 'react';\nimport styled, { css } from 'styled-components';\nimport { spacings, mq } from 'utils/styles';\n\nexport interface ColPropsSettings {\n /** Normalisierte Werte zwischen 0 und 1: z.B. 12 von 28 Spalten (12 / 28) */\n span?: number;\n /** Normalisierte Werte zwischen -1 und 1: z.B. -12 von 28 Spalten (-12 / 28) */\n move?: number;\n valign?: VerticalAlign;\n}\n\ntype VerticalAlign = 'top' | 'center' | 'bottom';\n\ninterface ColProps extends ColPropsSettings {\n medium?: ColPropsSettings;\n semilarge?: ColPropsSettings;\n large?: ColPropsSettings;\n xlarge?: ColPropsSettings;\n}\n\nconst gridSettings = {\n cols: 28,\n gutter: spacings.spacer,\n};\n\nconst getWidth = (props: ColProps) => {\n const mediumSpan = props.medium ? props.medium.span : 1;\n const semilargeSpan = props.semilarge ? props.semilarge.span : 1;\n const largeSpan = props.large ? props.large.span : 1;\n const xlargeSpan = props.xlarge ? props.xlarge.span : 1;\n\n return css`\n width: ${(props.span || 1) * 100}%;\n\n ${(props: ColProps) => {\n return props.medium\n ? css`\n @media ${mq.medium} {\n width: ${(mediumSpan || 1) * 100}%;\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.semilarge\n ? css`\n @media ${mq.semilarge} {\n width: ${(semilargeSpan || 1) * 100}%;\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.large\n ? css`\n @media ${mq.large} {\n width: ${(largeSpan || 1) * 100}%;\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.xlarge\n ? css`\n @media ${mq.xlarge} {\n width: ${(xlargeSpan || 1) * 100}%;\n }\n `\n : '';\n }}\n `;\n};\n\nconst getLeftRight = (props: ColProps) => {\n const mediumMove = props.medium ? props.medium.move : 0;\n const semilargeMove = props.semilarge ? props.semilarge.move : 0;\n const largeMove = props.large ? props.large.move : 0;\n const xlargeMove = props.xlarge ? props.xlarge.move : 0;\n\n return css`\n left: ${props.move && props.move > 0 ? props.move * 100 + '%' : 'auto'};\n right: ${props.move && props.move < 0\n ? props.move * -100 + '%'\n : 'auto'};\n\n ${(props: ColProps) => {\n return props.medium\n ? css`\n @media ${mq.medium} {\n left: ${mediumMove && mediumMove > 0\n ? mediumMove * 100 + '%'\n : 'auto'};\n right: ${mediumMove && mediumMove < 0\n ? mediumMove * -100 + '%'\n : 'auto'};\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.semilarge\n ? css`\n @media ${mq.semilarge} {\n left: ${semilargeMove && semilargeMove > 0\n ? semilargeMove * 100 + '%'\n : 'auto'};\n right: ${semilargeMove && semilargeMove < 0\n ? semilargeMove * -100 + '%'\n : 'auto'};\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.large\n ? css`\n @media ${mq.large} {\n left: ${largeMove && largeMove > 0\n ? largeMove * 100 + '%'\n : 'auto'};\n right: ${largeMove && largeMove < 0\n ? largeMove * -100 + '%'\n : 'auto'};\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.xlarge\n ? css`\n @media ${mq.xlarge} {\n left: ${xlargeMove && xlargeMove > 0\n ? xlargeMove * 100 + '%'\n : 'auto'};\n right: ${xlargeMove && xlargeMove < 0\n ? xlargeMove * -100 + '%'\n : 'auto'};\n }\n `\n : '';\n }}\n `;\n};\n\nconst StyledCol = styled.div<GridProps & ColProps>`\n ${getWidth};\n ${getLeftRight};\n padding-top: ${({ gutter }) => gutter || 0}px;\n padding-left: ${({ gutter }) => gutter || 0}px;\n display: block;\n position: relative;\n\n align-self: ${({ valign }) => {\n switch (valign) {\n case 'top':\n return 'flex-start';\n case 'center':\n return 'center';\n case 'bottom':\n return 'flex-end';\n default:\n return undefined;\n }\n }};\n`;\n\nconst Col: React.FC<ColProps> = (props) => {\n return <React.Fragment>{props.children}</React.Fragment>;\n};\n\ninterface GridProps {\n gutter?: number;\n valign?: VerticalAlign;\n}\n\nconst StyledGrid = styled.div<GridProps>`\n margin-top: -${({ gutter }) => gutter || 0}px;\n margin-left: -${({ gutter }) => gutter || 0}px;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n\n align-items: ${({ valign }) => {\n switch (valign) {\n case 'top':\n return 'flex-start';\n case 'center':\n return 'center';\n case 'bottom':\n return 'flex-end';\n default:\n return undefined;\n }\n }};\n`;\n\nconst Grid: React.FC<GridProps> = ({ gutter, valign, children }) => {\n return (\n <StyledGrid gutter={gutter} valign={valign}>\n {React.Children.map(children, (comp: any) => {\n return <StyledCol {...comp.props} gutter={gutter} />;\n })}\n </StyledGrid>\n );\n};\n\nGrid.defaultProps = {\n gutter: gridSettings.gutter,\n};\n\nexport default {\n Row: Grid,\n Col,\n};\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } 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 Title from 'components/blocks/Title';\nimport Wrapper from 'components/base/Wrapper';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport {\n mq,\n spacings,\n withRange,\n getColors as color,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\n\nconst ImgWrapper = styled.div<{ isMirrored?: boolean }>`\n display: flex;\n flex-direction: column;\n position: relative;\n height: 100%;\n width: 100%;\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 ImgDescDesktop = styled(Copy)`\n display: none;\n\n @media ${mq.semilarge} {\n display: block;\n padding: ${spacings.spacer}px ${spacings.spacer * 2}px;\n }\n`;\n\nconst ImgDescMobile = styled(Copy)`\n display: block;\n padding: ${spacings.spacer}px 0;\n padding-left: ${spacings.nudge * 2}px;\n\n @media ${mq.semilarge} {\n display: none;\n }\n`;\n\nconst InfoWrapper = styled.div<{ isMirrored?: boolean }>`\n padding-left: ${spacings.nudge * 2}px;\n padding-right: ${spacings.nudge * 2}px;\n padding-top: ${spacings.nudge}px;\n padding-bottom: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n ${withRange([spacings.spacer * 3, spacings.spacer * 4], 'padding-top')}\n\n padding-right: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n ${withRange([spacings.spacer * 3, spacings.spacer * 4], 'padding-top')}\n\n padding-right: ${({ isMirrored }) =>\n isMirrored ? spacings.spacer * 1.5 + 'px' : (1 / 28) * 100 + '%'};\n padding-bottom: ${spacings.nudge * 6}px;\n padding-left: ${({ isMirrored }) =>\n !isMirrored ? spacings.spacer * 1.5 + 'px' : (1 / 28) * 100 + '%'};\n }\n\n @media ${mq.xlarge} {\n padding-right: ${({ isMirrored }) =>\n isMirrored ? spacings.spacer * 1.5 : (1 / 28) * spacings.wrapper}px;\n padding-left: ${({ isMirrored }) =>\n !isMirrored\n ? spacings.spacer * 1.5\n : (1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst StyledTitle = styled(Title)`\n & + * {\n margin-top: ${spacings.nudge * 6}px;\n }\n`;\n\nconst ContentBlock = styled(Copy)`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n`;\n\nconst SubTextBlock = styled(ContentBlock)`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.semilarge} {\n & > * {\n max-width: 300px;\n }\n }\n`;\n\nconst Teaser: FC<{\n isMirrored?: boolean;\n bgMode?: 'full' | 'inverted' | 'splitted';\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n title?: string;\n titleAs?: HeadlineTag;\n image?: Omit<ImageProps, 'coverSpace'> & { description?: string };\n intro?: string;\n text?: string;\n subText?: string;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n isMirrored = false,\n bgMode,\n superTitle,\n superTitleAs,\n title,\n titleAs,\n image,\n intro,\n text,\n subText,\n primaryAction,\n secondaryAction,\n}) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, false, isMirrored)}\n >\n <Wrapper clampWidth=\"normal\">\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? 14 : 0) / 28,\n }}\n >\n <ImgWrapper isMirrored={isMirrored}>\n {image && <StyledImage coverSpace {...image} />}\n {image?.description && (\n <ImgDescMobile\n size=\"small\"\n isInverted={isInverted}\n innerHTML={image.description}\n />\n )}\n </ImgWrapper>\n </Grid.Col>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? -14 : 0) / 28,\n }}\n >\n <InfoWrapper isMirrored={isMirrored}>\n <StyledTitle\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n />\n {intro && (\n <ContentBlock\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n />\n )}\n {text && (\n <ContentBlock\n isInverted={isInverted}\n innerHTML={text}\n />\n )}\n {subText && (\n <SubTextBlock\n isInverted={isInverted}\n type=\"copy-i\"\n innerHTML={subText}\n />\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 </InfoWrapper>\n </Grid.Col>\n </Grid.Row>\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: (bgMode === 'splitted' ? 11.2 : 14) / 28,\n move:\n (isMirrored\n ? bgMode === 'splitted'\n ? 16.8\n : 14\n : 0) / 28,\n }}\n >\n {image?.description && (\n <ImgDescDesktop\n size=\"small\"\n isInverted={isInverted}\n innerHTML={image.description}\n />\n )}\n </Grid.Col>\n <Grid.Col\n semilarge={{\n span: (bgMode === 'splitted' ? 16.8 : 14) / 28,\n move:\n (isMirrored\n ? bgMode === 'splitted'\n ? -11.2\n : -14\n : 0) / 28,\n }}\n />\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Teaser;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } 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 Title from 'components/blocks/Title';\nimport Wrapper from 'components/base/Wrapper';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\n\nconst WideImage = styled(Image)<{ isMirrored?: boolean }>`\n position: relative;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n\n @media ${mq.semilarge} {\n position: absolute;\n width: 50%;\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '50%')};\n right: ${({ isMirrored }) => (isMirrored ? '50%' : 'auto')};\n\n transform: translateX(\n ${({ isMirrored }) => (isMirrored ? '100%' : '-100%')}\n );\n }\n\n @media ${mq.xlarge} {\n max-width: ${spacings.wrapperLarge / 2}px;\n }\n`;\n\nconst InfoWrapper = styled.div<{ isMirrored?: boolean }>`\n padding-left: ${spacings.nudge * 2}px;\n padding-right: ${spacings.nudge * 2}px;\n padding-top: ${spacings.nudge}px;\n padding-bottom: ${spacings.nudge * 2}px;\n\n @media ${mq.semilarge} {\n ${withRange([spacings.spacer * 3, spacings.spacer * 4], 'padding-top')}\n\n padding-right: ${({ isMirrored }) =>\n isMirrored ? spacings.spacer * 1.5 : (1 / 28) * spacings.wrapper}px;\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4],\n 'padding-bottom'\n )}\n padding-left: ${({ isMirrored }) =>\n !isMirrored\n ? spacings.spacer * 1.5\n : (1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst StyledTitle = styled(Title)`\n & + * {\n margin-top: ${spacings.nudge * 6}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.semilarge} {\n & > * {\n max-width: 300px;\n }\n }\n`;\n\nconst ContentBlock = styled(Copy)`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n`;\n\nconst SubTextBlock = styled(ContentBlock)`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst TeaserWide: FC<{\n isMirrored?: boolean;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n title?: string;\n titleAs?: HeadlineTag;\n image?: Omit<ImageProps, 'coverSpace'> & { description?: string };\n intro?: string;\n text?: string;\n subText?: string;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n bgMode?: 'full' | 'inverted';\n}> = ({\n isMirrored = false,\n superTitle,\n superTitleAs,\n title,\n titleAs,\n image,\n intro,\n text,\n subText,\n primaryAction,\n secondaryAction,\n bgMode,\n}) => {\n const theme = useContext(ThemeContext);\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n {image && (\n <WideImage coverSpace {...image} isMirrored={isMirrored} />\n )}\n <Wrapper clampWidth=\"normal\">\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? 14 : 0) / 28,\n }}\n ></Grid.Col>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? -14 : 0) / 28,\n }}\n >\n <InfoWrapper isMirrored={isMirrored}>\n <StyledTitle\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n />\n {intro && (\n <ContentBlock\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n />\n )}\n {text && (\n <ContentBlock\n isInverted={isInverted}\n innerHTML={text}\n />\n )}\n {subText && (\n <SubTextBlock\n isInverted={isInverted}\n type=\"copy-i\"\n innerHTML={subText}\n />\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 </InfoWrapper>\n </Grid.Col>\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport default TeaserWide;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.a<{\n inverted?: boolean;\n disable?: boolean;\n textDecoration?: 'none' | 'underline';\n}>`\n padding: 0.2em;\n\n display: inline-block;\n display: inline-flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: ${({ theme }) => font(theme).copy.medium.weight};\n text-align: center;\n text-decoration: ${({ textDecoration }) =>\n textDecoration ? textDecoration : 'underline'};\n line-height: 1;\n letter-spacing: ${({ theme }) => font(theme).copy.medium.letterSpacing};\n\n perspective: 1000;\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-perspective: 1000;\n -moz-osx-font-smoothing: grayscale;\n will-change: auto;\n\n outline: none;\n border: none;\n cursor: pointer;\n\n pointer-events: ${({ disable }) => (disable ? 'none' : 'all')};\n\n background: none;\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.light\n : inverted\n ? color(theme).light\n : color(theme).dark};\n\n & > * {\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.light\n : inverted\n ? color(theme).light\n : color(theme).dark};\n }\n\n & > :not(:last-child) {\n padding-right: ${spacings.nudge}px;\n }\n\n &:hover {\n opacity: 0.6;\n }\n\n /* &:focus {\n text-decoration: underline;\n }\n\n &:active {\n text-decoration: underline;\n } */\n`;\n\ninterface Props {\n isInverted?: boolean;\n isDisabled?: boolean;\n onClick?: () => void;\n textDecoration?: 'none' | 'underline';\n className?: string;\n}\n\nexport type BtnProps = Props & {\n as?: 'button';\n};\n\nexport type LinkProps = Props & {\n as?: 'a';\n href?: string;\n isExternal?: boolean;\n};\n\nconst Pointer: React.FC<BtnProps | LinkProps> = React.forwardRef(\n (\n {\n as,\n isInverted,\n isDisabled,\n onClick,\n className,\n textDecoration,\n children,\n ...rest\n },\n ref\n ) => {\n if (as === 'button') {\n return (\n <View\n textDecoration={textDecoration}\n ref={ref}\n as={as as any}\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n } else {\n return (\n <View\n textDecoration={textDecoration}\n ref={ref}\n as={as as any}\n href={(rest as LinkProps).href}\n data-disabled={isDisabled}\n target={\n (rest as LinkProps).isExternal ? '_blank' : undefined\n }\n rel={\n (rest as LinkProps).isExternal\n ? 'noopener noreferrer'\n : undefined\n }\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n }\n }\n);\n\nPointer.displayName = 'Button';\n\nconst Icon = styled.div<{ iconColor?: string }>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n width: 35px;\n height: 35px;\n\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).primary.medium};\n\n transition: transform 0.2s ease-in-out;\n\n ${View}[data-disabled='true'] > & {\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).mono.light};\n }\n\n ${View}:hover > & {\n transform: translateX(3px);\n }\n`;\n\nconst Label = styled.span`\n display: inline-block;\n`;\n\nexport default { View: Pointer, Label: Label, Icon: Icon };\n","import React, { FC, useContext, useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport SlickSlider, { Settings } from 'react-slick';\nimport { withRange } from 'utils/styles';\n\n// Slider context\ninterface SliderContextState {\n setSlider?: React.Dispatch<\n React.SetStateAction<SlickSlider | null | undefined>\n >;\n setSlideCount?: React.Dispatch<React.SetStateAction<number>>;\n steps: number;\n currentStep: number;\n slideSpacing?: { min: number; max: number };\n cursorPaths?: {\n prev?: string;\n next?: string;\n };\n clickSideOffset: number;\n fullHeight?: boolean;\n sameHeight?: boolean;\n slickSettings: Settings;\n goToStep: (step: number) => void;\n nextStep: () => void;\n previousStep: () => void;\n isOnFirstStep: () => boolean;\n isOnLastStep: () => boolean;\n}\n\nexport const SliderContext = React.createContext<SliderContextState>({\n steps: 0,\n currentStep: 0,\n slickSettings: {},\n clickSideOffset: 0.2,\n goToStep: () => '',\n nextStep: () => '',\n previousStep: () => '',\n isOnFirstStep: () => {\n return false;\n },\n isOnLastStep: () => {\n return false;\n },\n});\n\nexport type SlickSliderSettings = Pick<\n Settings,\n | 'responsive'\n | 'draggable'\n | 'speed'\n | 'slidesToShow'\n | 'slidesToScroll'\n | 'variableWidth'\n | 'autoplay'\n | 'autoplaySpeed'\n | 'fade'\n | 'swipe'\n | 'infinite' // not fully working yet\n>;\n\nconst Slider: FC<\n SlickSliderSettings & {\n initialStep?: number;\n slideSpacing?: { min: number; max: number }; // max image size 64x64\n cursorPaths?: {\n prev?: string;\n next?: string;\n };\n clickSideOffset?: number;\n sameHeight?: boolean;\n fullHeight?: boolean;\n beforeChange?: (props: {\n currentStep: number;\n nextStep: number;\n }) => void;\n afterChange?: (currentStep: number) => void;\n onInit?: (steps: number) => void;\n }\n> = ({\n initialStep = 0,\n slideSpacing,\n cursorPaths,\n clickSideOffset = 0.2,\n fullHeight,\n sameHeight,\n beforeChange,\n afterChange,\n onInit,\n children,\n ...rest\n}) => {\n const [slideCount, setSlideCount] = useState<number>(0);\n const [sliderRef, setSliderRef] = useState<SlickSlider | null>();\n const [currentStep, setCurrentStep] = useState<number>(initialStep);\n const [visibleSlides, setVisibleSlides] = useState<number | null>();\n const [steps, setSteps] = useState<number>(0);\n\n const goToStep = (step: number) => {\n if (sliderRef) {\n const intNum = Math.floor(step);\n if (intNum >= 0 && intNum < steps) {\n sliderRef.slickGoTo(intNum);\n }\n }\n };\n\n const nextStep = () => {\n if (sliderRef) {\n let prev = currentStep;\n if (slickSettings.infinite) sliderRef.slickGoTo(++prev);\n else sliderRef.slickGoTo(prev >= slideCount - 1 ? prev : ++prev);\n }\n };\n\n const previousStep = () => {\n if (sliderRef) {\n let prev = currentStep;\n if (slickSettings.infinite) sliderRef.slickGoTo(--prev);\n sliderRef.slickGoTo(prev <= 0 ? prev : --prev);\n }\n };\n\n const isOnFirstStep = (): boolean => {\n return slickSettings.infinite ? false : currentStep === 0;\n };\n\n const isOnLastStep = (): boolean => {\n return slickSettings.infinite ? false : currentStep >= steps - 1;\n };\n\n // slick settings\n const slickSettings: Settings = {\n className: 'slider variable-width',\n dots: false,\n arrows: false,\n infinite: false,\n speed: 500,\n slidesToScroll: 1,\n slidesToShow: 1,\n variableWidth: true,\n fade: false,\n swipe: true,\n beforeChange: (current: number, next: number) => {\n beforeChange &&\n beforeChange({ currentStep: current, nextStep: next });\n setCurrentStep(next);\n },\n afterChange: afterChange,\n ...rest,\n };\n\n // calc slidesToShow on each window resize\n useEffect(() => {\n const handleResize = () => {\n if (sliderRef && slickSettings.responsive) {\n const settings = slickSettings.responsive;\n const cBreakpoint: number | null = (sliderRef.state as any)\n .breakpoint;\n\n for (let i = 0; i < settings.length; i++) {\n if (settings[i].breakpoint === cBreakpoint) {\n const { slidesToShow } = settings[i]\n .settings as Settings;\n\n if (slidesToShow) setVisibleSlides(slidesToShow);\n break;\n }\n }\n }\n };\n\n // calc visible slides\n if (sliderRef && slickSettings.slidesToShow) {\n setVisibleSlides(slickSettings.slidesToShow);\n handleResize();\n window.addEventListener('resize', handleResize);\n }\n\n return () => {\n if (sliderRef) window.removeEventListener('resize', handleResize);\n };\n }, [slickSettings.responsive, slickSettings.slidesToShow, sliderRef]);\n\n useEffect(() => {\n // calc steps\n if (visibleSlides) {\n const itemsPerSlide = Math.floor(visibleSlides);\n\n let slides = 0;\n for (let i = 0; i < slideCount; i++) {\n if (i + itemsPerSlide > slideCount) {\n break;\n } else slides += 1;\n }\n setSteps(slides);\n }\n }, [slideCount, visibleSlides]);\n\n useEffect(() => {\n if (steps && steps > 0) {\n onInit && onInit(steps);\n }\n }, [onInit, steps]);\n\n return (\n <SliderContext.Provider\n value={{\n setSlider: setSliderRef,\n setSlideCount: setSlideCount,\n steps: steps,\n currentStep: currentStep,\n slideSpacing: slideSpacing,\n cursorPaths: cursorPaths,\n clickSideOffset: clickSideOffset,\n fullHeight: fullHeight,\n sameHeight: sameHeight,\n slickSettings: slickSettings,\n goToStep: goToStep,\n nextStep: nextStep,\n previousStep: previousStep,\n isOnFirstStep: isOnFirstStep,\n isOnLastStep: isOnLastStep,\n }}\n >\n {children}\n </SliderContext.Provider>\n );\n};\n\nconst SlidesView = styled.div<{\n cursorPath?: string;\n sameHeight?: boolean;\n fullHeight?: boolean;\n}>`\n position: relative;\n width: 100%;\n overflow: hidden;\n\n cursor: ${({ cursorPath }) =>\n cursorPath ? `url(\"${cursorPath}\") 64 64, auto` : 'default'};\n\n ${({ fullHeight }) =>\n fullHeight &&\n css`\n .slick-list {\n height: 100%;\n }\n `}\n\n .slick-track {\n display: flex;\n height: ${({ fullHeight }) => (fullHeight ? '100%' : 'auto')};\n ${({ sameHeight, fullHeight }) =>\n (sameHeight || fullHeight) &&\n css`\n .slick-slide {\n height: auto;\n > div {\n height: 100%;\n > div {\n height: 100%;\n }\n }\n }\n `}\n }\n`;\n\nconst StyledSlider = styled(SlickSlider)<{\n leftMargin?: { min: number; max: number };\n}>`\n ${({ leftMargin }) =>\n leftMargin &&\n withRange([leftMargin.min * -1, leftMargin.max * -1], 'margin-left')};\n`;\n\nenum CursorState {\n PREV,\n NEXT,\n}\n\nconst Slides: FC<{\n className?: string;\n}> = ({ children, className }) => {\n const context = useContext(SliderContext);\n const [cursor, setCursor] = useState<CursorState | null>();\n const [viewRef, setViewRef] = useState<HTMLDivElement | null>();\n const [mousePos, setMousePos] = useState<number>(0);\n\n // cursor control\n const getCursorPath = () => {\n switch (cursor) {\n case CursorState.NEXT:\n return context.cursorPaths?.next;\n case CursorState.PREV:\n return context.cursorPaths?.prev;\n default:\n return undefined;\n }\n };\n\n const handleClick = (ev: React.MouseEvent) => {\n if (context.clickSideOffset <= 0) return;\n ev.stopPropagation();\n if (!viewRef) return;\n\n // check for other UI elements\n const target = ev.target as HTMLElement;\n const isSlideControl = target.classList.contains('slider-control');\n const isAnchor =\n target instanceof HTMLAnchorElement ||\n target.parentElement instanceof HTMLAnchorElement;\n\n if (ev.button !== 0 || isSlideControl || isAnchor) return;\n\n // check if step is first or last\n if (context.isOnFirstStep()) {\n context.nextStep();\n return;\n } else if (context.isOnLastStep()) {\n context.previousStep();\n return;\n }\n\n // check orientation with client x position\n const rect = viewRef.getBoundingClientRect();\n const relMouseX = mousePos - rect.left;\n if (relMouseX >= rect.width - rect.width * context.clickSideOffset) {\n context.nextStep();\n } else if (relMouseX < rect.width * context.clickSideOffset) {\n context.previousStep();\n }\n };\n\n useEffect(() => {\n if (!context.cursorPaths) return;\n if (!viewRef) return;\n const rect = viewRef.getBoundingClientRect();\n const relMouseX = mousePos - rect.left;\n\n if (relMouseX >= rect.width / 2) {\n if (context.isOnLastStep()) setCursor(CursorState.PREV);\n else setCursor(CursorState.NEXT);\n } else {\n if (context.isOnFirstStep()) setCursor(CursorState.NEXT);\n else setCursor(CursorState.PREV);\n }\n }, [context, mousePos, viewRef]);\n\n useEffect(() => {\n if (children && context.setSlideCount)\n context.setSlideCount(React.Children.count(children));\n }, [children, context]);\n\n return (\n <SliderContext.Consumer>\n {(values) => (\n <SlidesView\n ref={setViewRef}\n cursorPath={getCursorPath()}\n onMouseMove={(ev) => setMousePos(ev.clientX)}\n fullHeight={context.fullHeight}\n sameHeight={context.sameHeight}\n onClick={handleClick}\n className={className}\n >\n <StyledSlider\n ref={context.setSlider}\n leftMargin={values.slideSpacing}\n {...values.slickSettings}\n >\n {children}\n </StyledSlider>\n </SlidesView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nconst SlideView = styled.div<{ spacing?: { min: number; max: number } }>`\n width: 100%;\n outline: none;\n\n ${({ spacing }) =>\n spacing && withRange([spacing.min, spacing.max], 'padding-left')};\n`;\n\nconst Slide: FC<{\n className?: string;\n}> = ({ children, className }) => {\n return (\n <SliderContext.Consumer>\n {(value) => (\n <SlideView className={className} spacing={value.slideSpacing}>\n {children}\n </SlideView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nconst ControlView = styled.button``;\n\nconst Control: FC<{\n type: 'next' | 'prev';\n onClick?: (ev: React.SyntheticEvent<HTMLButtonElement>) => void;\n className?: string;\n children?: (isActive?: boolean) => React.ReactNode;\n}> = ({ type, onClick, children, className }) => {\n return (\n <SliderContext.Consumer>\n {(values) => {\n if (values.steps > 1) {\n return (\n <ControlView\n className={className + ' slider-control'}\n onClick={(ev) => {\n type === 'next'\n ? values.nextStep()\n : values.previousStep();\n\n onClick && onClick(ev);\n }}\n disabled={\n type === 'next'\n ? values.isOnLastStep()\n : values.isOnFirstStep()\n }\n >\n {children &&\n children(\n type === 'next'\n ? !values.isOnLastStep()\n : !values.isOnFirstStep()\n )}\n </ControlView>\n );\n } else return null;\n }}\n </SliderContext.Consumer>\n );\n};\n\nconst StatusView = styled.div``;\n\nconst Status: FC<{\n seperator?: string;\n className?: string;\n}> = ({ seperator = '/', className }) => {\n return (\n <SliderContext.Consumer>\n {(values) => (\n <StatusView className={className + ' slider-control'}>\n {`${values.currentStep + 1}${seperator}${values.steps}`}\n </StatusView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nconst DotView = styled.button``;\n\ninterface DotProps {\n step: number;\n disabled?: boolean;\n onClick?: (ev: React.SyntheticEvent<HTMLButtonElement>) => void;\n}\n\nconst Dot: FC<\n DotProps & {\n className?: string;\n }\n> = ({ step, disabled, onClick, className, children }) => {\n return (\n <SliderContext.Consumer>\n {(values) => (\n <DotView\n disabled={\n disabled !== undefined\n ? disabled\n : step === values.currentStep\n }\n onClick={(ev) => {\n values.goToStep(step);\n onClick && onClick(ev);\n }}\n className={className + ' slider-control'}\n >\n {children}\n </DotView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nconst DotGroupView = styled.div``;\n\nconst DotGroup: FC<{\n children?: (\n key: number,\n isActive?: boolean,\n onClick?: (ev: React.SyntheticEvent<HTMLElement>) => void\n ) => React.ReactNode;\n className?: string;\n}> = ({ className, children }) => {\n const context = useContext(SliderContext);\n const [stepsArray, setStepsArray] = useState<number[]>();\n\n useEffect(() => {\n const steps = Array<number>(context.steps);\n for (let i = 0; i < steps.length; i++) {\n steps[i] = i;\n }\n setStepsArray(steps);\n }, [context.steps]);\n\n return (\n <SliderContext.Consumer>\n {(values) => (\n <DotGroupView className={className + ' slider-control'}>\n {stepsArray &&\n stepsArray.length > 1 &&\n stepsArray?.map((step, i) => {\n return (\n children &&\n children(i, i === values.currentStep, () =>\n values.goToStep(i)\n )\n );\n })}\n </DotGroupView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nexport default {\n Provider: Slider,\n Slides: Slides,\n Slide: Slide,\n Control: Control,\n Status: Status,\n Dot: Dot,\n DotGroup: DotGroup,\n};\n","import React, { useContext, useState } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\nimport Pointer from 'components/buttons/Pointer';\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 ListContainer = styled.div`\n text-align: center;\n &:not(:first-child) {\n ${withRange([spacings.spacer, spacings.spacer * 1.75], 'margin-top')}\n }\n\n &:not(:last-child) {\n ${withRange([spacings.spacer, spacings.spacer * 1.75], 'margin-bottom')}\n }\n`;\n\nconst ItemContainer = styled.div<{ isCentered?: boolean }>`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n margin-bottom: ${spacings.spacer * 1.75}px;\n\n text-align: center;\n\n @media ${mq.semilarge} {\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n }\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 6 ? 'block' : 'none'};\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 Items = styled.div<{ isVisible?: boolean; isCentered?: boolean }>`\n display: ${({ isVisible }) => (isVisible ? 'flex' : 'none')};\n align-items: center;\n justify-content: center;\n\n flex-wrap: wrap;\n margin-left: -20px;\n\n @media ${mq.medium} {\n align-items: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n }\n`;\n\nconst ActionsWrapper = styled.div<{ isCentered?: boolean }>`\n position: relative;\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.medium} {\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n }\n`;\n\nconst StyledActions = styled(Actions)`\n @media ${mq.medium} {\n max-width: 600px;\n }\n`;\n\nconst Item = styled.img<{ isVisible?: boolean; index: number }>`\n display: block;\n\n padding-left: 20px;\n padding-top: 20px;\n\n display: ${({ index, isVisible }) =>\n isVisible || index < 6 ? 'block' : 'none'};\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 ListFooter = styled(Copy)<{ isCentered?: boolean }>`\n text-align: center;\n\n @media ${mq.medium} {\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n }\n`;\n\nconst IconList: React.FC<{\n items: { src: string; alt?: string }[];\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n showMoreText?: string;\n showLessText?: string;\n isCentered?: boolean;\n bgMode?: 'full' | 'inverted';\n}> = ({\n items,\n isCentered = false,\n primaryAction,\n secondaryAction,\n showLessText = 'weniger anzeigen',\n showMoreText = 'weitere anzeigen',\n bgMode,\n}) => {\n const [showMore, setShowMore] = useState(false);\n const isInverted = bgMode === 'inverted';\n const theme = useContext(ThemeContext);\n\n return (\n <StyledSection\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode === 'full'\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n isCentered={isCentered}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <ListContainer>\n <Copy type=\"copy\" size=\"medium\" isInverted={isInverted}>\n <ItemContainer isCentered={isCentered}>\n <Items\n isVisible={!showMore ? true : showMore === true}\n isCentered={isCentered}\n >\n {items.map(({ src, alt }, i) => {\n return (\n <Item\n isVisible={showMore}\n index={i}\n key={i}\n src={src}\n alt={alt}\n />\n );\n })}\n </Items>\n </ItemContainer>\n <ListFooter\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n isCentered={isCentered}\n >\n <ShowMore\n itemCount={items.length}\n onClick={() => setShowMore((prev) => !prev)}\n >\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMore ? showLessText : showMoreText}\n </Pointer.Label>\n </Pointer.View>\n </ShowMore>\n </ListFooter>\n </Copy>\n </ListContainer>\n\n {(primaryAction || secondaryAction) && (\n <ActionsWrapper isCentered={isCentered}>\n <StyledActions\n isCentered={isCentered}\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n </ActionsWrapper>\n )}\n </Wrapper>\n </StyledSection>\n );\n};\n\nexport default IconList;\n","import * as React from 'react';\nimport styled, { ThemeContext, css } from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Title from 'components/blocks/Title';\nimport Copy from 'components/typography/Copy';\nimport Wrapper from 'components/base/Wrapper';\nimport { spacings, mq, getColors as color } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst StyledTitle = styled(Title)`\n @media ${mq.semilarge} {\n max-width: 50%;\n }\n`;\n\nconst Content = styled.div<{ withAsideText?: boolean }>`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n\n ${({ withAsideText }) =>\n withAsideText &&\n css`\n @media ${mq.semilarge} {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n\n & > * + * {\n margin-left: ${spacings.spacer * 3}px;\n }\n }\n `}\n`;\n\nconst ContentBlock = styled.div<{ isAside?: boolean }>`\n & + & {\n padding-top: ${({ isAside }) => (isAside ? spacings.spacer : '0')}px;\n }\n\n flex: ${({ isAside }) => (isAside ? '1 0 30%' : '1 0 60%')};\n\n @media ${mq.semilarge} {\n max-width: ${({ isAside }) => (isAside ? '100%' : '60%')};\n\n & + & {\n padding-top: 0;\n }\n }\n`;\n\nconst ContentText = styled(Copy)`\n text-align: left;\n`;\n\nconst StyledActions = styled(Actions)`\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.semilarge} {\n max-width: 50%;\n }\n`;\n\nconst Article: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n intro?: string;\n text?: string;\n asideText?: string;\n\n bgMode?: 'full' | 'splitted' | 'inverted';\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n intro,\n text,\n asideText,\n bgMode,\n primaryAction,\n secondaryAction,\n}) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <StyledTitle\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n <Content withAsideText={asideText ? true : false}>\n <ContentBlock>\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 </ContentBlock>\n\n {asideText && (\n <ContentBlock isAside>\n <ContentText\n type=\"copy\"\n isInverted={isInverted}\n innerHTML={asideText}\n />\n </ContentBlock>\n )}\n </Content>\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 default Article;\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\n\nimport Copy from 'components/typography/Copy';\nimport Image, { ImageProps as Props } from 'components/blocks/Image';\nimport Actions from './Actions';\n\nconst View = styled.div`\n min-width: 270px;\n padding-bottom: ${spacings.nudge}px;\n`;\n\nconst ImageContainer = styled.div<{ isCentered?: boolean }>`\n display: flex;\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n padding-bottom: ${spacings.spacer * 2}px;\n`;\n\nconst StyledImage = styled(Image)`\n // width: 100%;\n\n overflow: hidden;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n`;\n\nconst Content = styled.div<{ addWhitespace?: boolean; isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n padding: 0\n ${({ addWhitespace }) => addWhitespace && spacings.nudge * 2 + 'px'};\n\n & + & {\n ${withRange(\n [spacings.spacer * 1.5, spacings.spacer * 2],\n 'padding-top'\n )}\n }\n`;\n\nconst ArticleContent = styled(Content)<{ isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n\n @media ${mq.medium} {\n max-width: 95%;\n }\n`;\n\nconst ContentBlock = styled(Copy)`\n & + & {\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'padding-top')}\n }\n`;\n\nconst Desc = styled.div`\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'padding-top')}\n`;\n\nconst StyledActions = styled(Actions)<{ addWhitespace?: boolean }>`\n padding: 0\n ${({ addWhitespace }) => addWhitespace && spacings.nudge * 2 + 'px'};\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')}\n\n @media ${mq.medium} {\n width: 100%;\n\n & > * {\n max-width: 50%;\n min-width: 0 !important;\n flex: 1;\n }\n }\n`;\n\nexport interface FeatureProps {\n isInverted?: boolean;\n isCentered?: boolean;\n title?: string;\n description?: string;\n intro?: string;\n text?: string;\n image?: Props;\n\n addWhitespace?: boolean;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}\n\nconst Feature: React.FC<\n FeatureProps & {\n className?: string;\n }\n> = ({\n title,\n description,\n intro,\n text,\n image,\n addWhitespace = false,\n isInverted = false,\n isCentered = false,\n primaryAction,\n secondaryAction,\n className,\n}) => {\n return (\n <View className={className}>\n {image && (\n <ImageContainer 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 coverSpace={image.coverSpace}\n />\n </ImageContainer>\n )}\n <Content addWhitespace={addWhitespace} isCentered={isCentered}>\n <ContentBlock\n type=\"copy-b\"\n size=\"big\"\n isInverted={isInverted}\n data-sheet=\"title\"\n >\n {title}\n </ContentBlock>\n {description && (\n <ContentBlock\n size=\"small\"\n isInverted={isInverted}\n data-sheet=\"desc\"\n >\n <Desc\n dangerouslySetInnerHTML={{ __html: description }}\n />\n </ContentBlock>\n )}\n </Content>\n <ArticleContent\n addWhitespace={addWhitespace}\n isCentered={isCentered}\n >\n {intro && (\n <ContentBlock\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n data-sheet=\"intro\"\n />\n )}\n {text && (\n <ContentBlock\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n innerHTML={text}\n data-sheet=\"text\"\n />\n )}\n </ArticleContent>\n {(primaryAction || secondaryAction) && (\n <StyledActions\n isCentered={isCentered}\n addWhitespace={addWhitespace}\n primary={primaryAction && primaryAction(isInverted)}\n secondary={secondaryAction && secondaryAction(isInverted)}\n />\n )}\n </View>\n );\n};\n\nexport default Feature;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings, mq } from 'utils/styles';\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';\n\nconst ContentContainer = styled.div<{ isHalf?: boolean }>`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: ${({ isHalf }) => (isHalf ? 'center' : 'flex-start')};\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n\n @media ${mq.large} {\n padding-right: ${({ isHalf }) => isHalf && '7%'};\n padding-left: ${({ isHalf }) => isHalf && '7%'};\n\n & > * {\n flex: ${({ isHalf }) => (isHalf ? '1 0 50%' : '1 0 33.33%')};\n max-width: ${({ isHalf }) => (isHalf ? '50%' : '33.33%')};\n }\n }\n`;\n\nconst FeatureList: React.FC<{\n isCentered?: boolean;\n features?: FeatureProps[];\n bgMode?: 'full' | 'splitted' | 'inverted';\n}> = ({ features, bgMode, isCentered = false }) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const featureCount = features?.length || 0;\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\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: featureCount % 2 === 0 ? 2 : 3,\n xlarge: featureCount % 2 === 0 ? 2 : 3,\n },\n });\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper addWhitespace clampWidth=\"normal\">\n {features && (\n <ContentContainer\n isHalf={features.length % 2 === 0 ? true : false}\n >\n {features &&\n features.map((feature, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <Feature\n isCentered={isCentered}\n isInverted={isInverted}\n addWhitespace\n {...feature}\n />\n </div>\n );\n })}\n </ContentContainer>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default FeatureList;\n","import React, { FC } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport IntroBlock from './IntroBlock';\n\nconst View = styled.div<{\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\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 }) =>\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`;\n\nconst StyledImage = styled(Image)`\n width: 100%;\n height: 100%;\n min-height: 300px;\n`;\n\nconst LinkHelper = styled.a`\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\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-left: ${spacings.spacer}px;\n padding-right: ${spacings.spacer}px;\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')};\n ${withRange([spacings.spacer, spacings.spacer * 4], 'padding-bottom')};\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.semilarge} {\n padding-left: calc(${1 / 28} * 100vw);\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nexport interface PromotionCardProps {\n image: ImageProps;\n title?: string;\n superTitle?: string;\n text?: string;\n href?: string;\n primaryAction?: React.ReactNode;\n secondaryAction?: React.ReactNode;\n onClick?: () => void;\n}\n\nconst PromotionCard: FC<PromotionCardProps> = ({\n image,\n title,\n superTitle,\n text,\n href,\n primaryAction,\n secondaryAction,\n onClick,\n}) => {\n return (\n <View onClick={onClick} clickable={onClick || href ? true : false}>\n <StyledImage {...image} coverSpace />\n {title && (\n <IntroContainer>\n <LinkHelper href={href} />\n <IntroBlock\n colorMode=\"onImage\"\n title={title}\n superTitle={superTitle}\n text={text}\n secondaryAction={() => secondaryAction}\n primaryAction={() => primaryAction}\n clampText={text !== undefined}\n />\n </IntroContainer>\n )}\n </View>\n );\n};\n\nexport default PromotionCard;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n getColors as color,\n getGlobalSettings as global,\n spacings,\n mq,\n} from 'utils/styles';\n\nimport Grid 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';\n\nconst FlexGrid = styled.div`\n @media ${mq.semilarge} {\n display: flex;\n flex-direction: row;\n margin-left: -${spacings.spacer}px;\n }\n`;\n\nconst FlexGridCol = styled.div`\n display: flex;\n flex-direction: column;\n\n @media ${mq.semilarge} {\n flex: 1 0 50%;\n max-width: 50%;\n padding-left: ${spacings.spacer}px;\n }\n\n & + & {\n margin-top: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n margin-top: 0;\n }\n }\n`;\n\nconst PosterContainer = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n\n flex: 1 0 auto;\n\n & + & {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst CrossPromotion: React.FC<{\n main?: Array<PromotionCardProps & { size?: 'full' | 'half' }>;\n aside?: Array<PromotionCardProps & { size?: 'full' | 'half' }>;\n\n bgMode?: 'full' | 'inverted' | 'splitted';\n isMirrored?: boolean;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({ main, aside, bgMode, isMirrored }) => {\n const theme = React.useContext(ThemeContext);\n\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, false, isMirrored)}\n >\n <Wrapper\n clampWidth=\"normal\"\n addWhitespace={global(theme).sections.edgeRadius ? true : false}\n >\n <Grid.Row>\n <Grid.Col>\n {aside ? (\n isMirrored ? (\n <FlexGrid>\n <FlexGridCol>\n {main &&\n main.map((card, i) => (\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n ))}\n </FlexGridCol>\n\n <FlexGridCol>\n {aside.map((card, i) => (\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n ))}\n </FlexGridCol>\n </FlexGrid>\n ) : (\n <FlexGrid>\n <FlexGridCol>\n {aside.map((card, i) => (\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n ))}\n </FlexGridCol>\n <FlexGridCol>\n {main &&\n main.map((card, i) => (\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n ))}\n </FlexGridCol>\n </FlexGrid>\n )\n ) : (\n <Grid.Row>\n {main &&\n main.map((card, i) => (\n <Grid.Col\n semilarge={{\n span:\n (card.size === 'half'\n ? 14\n : 28) / 28,\n }}\n key={i}\n >\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n </Grid.Col>\n ))}\n </Grid.Row>\n )}\n </Grid.Col>\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport default CrossPromotion;\n","import React, { FC } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport IntroBlock from 'components/blocks/IntroBlock';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst PosterContainer = styled.div<{\n hasContent?: boolean;\n hasWrapper?: boolean;\n}>`\n position: relative;\n width: 100%;\n max-height: 500px;\n border-radius: ${({ theme, hasWrapper }) =>\n hasWrapper && global(theme).sections.edgeRadius};\n overflow: hidden;\n\n @media ${mq.medium} {\n max-height: 900px;\n }\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 }) => global(theme).sections.imageTextGradient};\n pointer-events: none;\n }\n\n ${({ onClick }) =>\n onClick &&\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`;\n\nconst StyledImage = styled(Image)`\n width: 100%;\n min-height: 500px;\n`;\n\nconst IntroContainer = styled(Wrapper)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: auto;\n z-index: 1;\n\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')};\n ${withRange([spacings.spacer, spacings.spacer * 4], 'padding-bottom')};\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\nconst Poster: FC<{\n image: ImageProps;\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n hasWrapper?: boolean;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n image,\n hasWrapper,\n}) => {\n return (\n <Section bgColor=\"undefined\" bgMode=\"full\">\n <Wrapper\n addWhitespace={hasWrapper}\n clampWidth={hasWrapper ? 'normal' : 'large'}\n >\n <PosterContainer\n hasWrapper={hasWrapper}\n hasContent={title !== undefined}\n >\n <StyledImage {...image} coverSpace />\n {title && (\n <IntroContainer addWhitespace>\n <IntroBlock\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 clampText={text !== undefined}\n />\n </IntroContainer>\n )}\n </PosterContainer>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Poster;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Play: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"67\"\n height=\"67\"\n viewBox=\"0 0 67 67\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M26.5625 48.2812l20-15-20-15v30zM33.2812 0c9.1668 0 17.0052 3.25518 23.5157 9.76562 6.5104 6.51048 9.7656 14.34888 9.7656 23.51558 0 9.1668-3.2552 17.0052-9.7656 23.5157-6.5105 6.5104-14.3489 9.7656-23.5157 9.7656-9.1667 0-17.0051-3.2552-23.51558-9.7656C3.25518 50.2864 0 42.448 0 33.2812c0-9.1667 3.25518-17.0051 9.76562-23.51558C16.2761 3.25518 24.1145 0 33.2812 0z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Play;\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 getGlobalSettings as global,\n} from 'utils/styles';\nimport Play from 'components/base/icons/Play';\n\nconst View = styled.div<{ bgImage?: ImageProps; isActive?: boolean }>`\n text-align: center;\n\n cursor: 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).mono.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.div`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n color: ${({ theme }) => color(theme).light};\n\n & > * {\n opacity: 0.8;\n transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;\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\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.ReactChild;\n}\n\nconst VideoCard: FC<VideoCardProps & { className?: string }> = ({\n bgImage,\n embedId,\n playIcon,\n className,\n}) => {\n const [isActive, setIsActive] = useState(false);\n\n return (\n <View\n onClick={() => setIsActive(true)}\n bgImage={isActive ? undefined : bgImage}\n isActive={isActive}\n className={className}\n >\n {!isActive && <VideoControls>{playIcon || <Play />}</VideoControls>}\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 </View>\n );\n};\n\nexport default VideoCard;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\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 Grid from 'components/base/Grid';\n\nconst ContactView = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n margin: 0 auto;\n width: 100%;\n\n text-align: left;\n hyphens: auto;\n overflow-wrap: break-word;\n\n @media ${mq.medium} {\n flex-direction: row;\n }\n`;\n\nconst Avatar = styled.img`\n height: 196px;\n width: 196px;\n border: solid 1px transparent;\n border-radius: 50%;\n padding: ${spacings.nudge}px;\n\n @media ${mq.medium} {\n margin-right: ${spacings.nudge * 6}px;\n }\n`;\n\nconst Info = styled.div`\n display: flex;\n flex-direction: column;\n align-self: flex-start;\n align-content: center;\n text-align: center;\n width: 100%;\n\n padding: ${spacings.spacer}px;\n\n & > *:not(:last-child) {\n margin-bottom: ${spacings.spacer * 1.5}px;\n }\n\n @media ${mq.medium} {\n align-content: flex-start;\n text-align: left;\n width: auto;\n }\n`;\n\nconst Address = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: ${spacings.nudge}px;\n\n & + & {\n margin-top: ${spacings.nudge}px;\n }\n\n & > *:not(:first-child) {\n margin-left: 0;\n }\n\n @media ${mq.medium} {\n justify-content: flex-start;\n flex-direction: row;\n padding: ${spacings.nudge}px ${spacings.nudge}px ${spacings.nudge}px 0;\n\n & > *:not(:first-child) {\n margin-left: ${spacings.spacer}px;\n }\n }\n`;\n\nconst Decorator = styled.div<{ isInverted?: boolean }>`\n flex: 1;\n width: 25px;\n margin-bottom: ${spacings.nudge * 1.5}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted\n ? font(theme)['copy-b'].big.colorInverted\n : font(theme)['copy-b'].big.color};\n\n @media ${mq.medium} {\n margin-bottom: 0;\n }\n`;\n\nconst AddressLabel = styled(Copy)`\n flex: 0 100%;\n text-align: center;\n\n a {\n color: ${({ textColor }) => textColor && textColor};\n text-decoration: none;\n }\n\n p {\n margin: 0;\n }\n\n a:hover {\n text-decoration: underline;\n }\n\n @media ${mq.medium} {\n text-align: left;\n }\n`;\n\nexport interface ContactBoxProps {\n isInverted?: boolean;\n name?: string;\n description?: string;\n addresses?: { decorator?: React.ReactNode; label: string }[];\n avatar?: { src: string; alt: string };\n}\n\nconst ContactBox: FC<ContactBoxProps & { className?: string }> = ({\n isInverted,\n name,\n description,\n addresses,\n avatar,\n className,\n}) => {\n return (\n <ContactView className={className}>\n {avatar && <Avatar src={avatar?.src} alt={avatar?.alt} />}\n <Info>\n {name && (\n <div>\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {name}\n </Copy>\n {description && (\n <Copy\n type=\"copy\"\n isInverted={isInverted}\n innerHTML={description}\n />\n )}\n </div>\n )}\n <div>\n {addresses &&\n addresses.map((address, i) => (\n <Address key={i}>\n <Decorator isInverted={isInverted}>\n {address.decorator}\n </Decorator>\n <AddressLabel\n type=\"copy-b\"\n size=\"big\"\n isInverted={isInverted}\n innerHTML={address.label}\n />\n </Address>\n ))}\n </div>\n </Info>\n </ContactView>\n );\n};\n\nconst StyledIntro = styled(IntroBlock)`\n @media ${mq.semilarge} {\n & > *:first-child {\n min-height: 110px;\n }\n }\n`;\n\nconst Content = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n max-width: ${(17 / 28) * spacings.wrapper}px;\n margin: 0 auto;\n\n & > * + * {\n ${withRange([spacings.spacer * 1, spacings.spacer * 1.5], 'margin-top')}\n }\n`;\n\nconst StyledContactBox = styled(ContactBox)`\n margin-top: ${spacings.spacer * 2.5}px;\n`;\n\nconst StyledActions = styled(Actions)`\n @media ${mq.semilarge} {\n & > * {\n max-width: 300px;\n }\n }\n`;\n\nconst NewsletterWrapper = styled.div`\n width: 100%;\n margin-top: ${spacings.spacer * 2.5}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: -110px;\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 title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n contact?: ContactBoxProps;\n\n column?: {\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n contact?: ContactBoxProps;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n };\n\n badge?: React.ReactNode;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n newsForm?: (isInverted?: boolean) => React.ReactNode;\n bgMode?: 'full' | 'inverted';\n}> = ({\n title,\n titleAs = 'h1',\n superTitle,\n superTitleAs,\n text,\n contact,\n badge,\n primaryAction,\n secondaryAction,\n newsForm,\n bgMode,\n column,\n}) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n return (\n <Section\n addSeperation\n bgColor={isInverted ? color(theme).dark : color(theme).mono.light}\n bgMode={bgMode ? mapToBgMode(bgMode, true) : 'full'}\n >\n <Wrapper addWhitespace clampWidth=\"normal\">\n {badge && <Badge>{badge}</Badge>}\n <Grid.Row gutter={!column ? 0 : spacings.spacer * 4}>\n <Grid.Col large={{ span: column ? 1 / 2 : 28 / 28 }}>\n <Content>\n {title && (\n <StyledIntro\n isCentered={!column}\n colorMode={\n isInverted ? 'inverted' : 'default'\n }\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n />\n )}\n {contact && (\n <StyledContactBox\n isInverted={isInverted}\n name={contact.name}\n description={contact.description}\n addresses={contact.addresses}\n avatar={contact.avatar}\n />\n )}\n {newsForm && (\n <NewsletterWrapper>\n {newsForm(isInverted)}\n </NewsletterWrapper>\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n isCentered\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.Col large={{ span: 1 / 2 }}>\n {column && (\n <Content>\n {column.title && (\n <StyledIntro\n colorMode={\n isInverted ? 'inverted' : 'default'\n }\n title={column.title}\n titleAs={column.titleAs}\n superTitle={column.superTitle}\n superTitleAs={column.superTitleAs}\n text={column.text}\n />\n )}\n {column.contact && (\n <StyledContactBox\n isInverted={isInverted}\n name={column.contact.name}\n description={column.contact.description}\n addresses={column.contact.addresses}\n avatar={column.contact.avatar}\n />\n )}\n {newsForm && (\n <NewsletterWrapper>\n {newsForm(isInverted)}\n </NewsletterWrapper>\n )}\n {(column.primaryAction ||\n column.secondaryAction) && (\n <StyledActions\n primary={\n column.primaryAction &&\n column.primaryAction(isInverted)\n }\n secondary={\n column.secondaryAction &&\n column.secondaryAction(isInverted)\n }\n />\n )}\n </Content>\n )}\n </Grid.Col>\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport default CallToAction;\n","import * as React from 'react';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors, spacings } 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\nconst FactsItem = styled.li<{ hasText?: boolean }>`\n padding: ${spacings.spacer}px ${spacings.nudge * 2}px;\n\n background: #fff;\n\n cursor: pointer;\n\n display: flex;\n flex-direction: row;\n align-items: ${({ hasText }) => (hasText ? 'flex-start' : 'center')};\n\n & + & {\n margin-top: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Icon = styled.img`\n margin-right: ${spacings.spacer}px;\n display: block;\n width: 100%;\n max-width: ${spacings.spacer * 2}px;\n`;\n\nconst ContentBlock = styled.div`\n max-width: 80%;\n`;\n\nconst Text = styled(Copy)`\n margin-top: ${spacings.spacer}px;\n`;\n\nconst FactList: React.FC<{\n facts?: {\n label?: string;\n text?: string;\n icon?: { src: string; alt?: string };\n }[];\n\n bgMode?: 'full' | 'inverted';\n}> = ({ facts, bgMode }) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? getColors(theme).dark\n : bgMode === 'full'\n ? getColors(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {facts && (\n <FactsContainer>\n {facts.map(({ label, text, icon }, i) => {\n return (\n <FactsItem key={i} hasText={!!text}>\n {icon && (\n <Icon src={icon.src} alt={icon.alt} />\n )}\n <ContentBlock>\n <Copy type=\"copy-b\">{label}</Copy>\n {text && (\n <Text\n type=\"copy\"\n innerHTML={text}\n />\n )}\n </ContentBlock>\n </FactsItem>\n );\n })}\n </FactsContainer>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default FactList;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { spacings, withRange, getGlobalSettings 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 padding-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\nconst Title = styled(Copy)`\n * + & {\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'margin-top')}\n }\n`;\n\nconst ContentBlock = styled(Copy)`\n * + & {\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'margin-top')}\n }\n`;\n\nconst Text = styled(Copy)`\n margin-top: ${spacings.nudge}px;\n\n ${Title} + & {\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'margin-top')}\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: FC<\n FactProps & {\n className?: string;\n }\n> = ({\n isInverted = false,\n isCentered = false,\n title,\n subTitle,\n text,\n image,\n className,\n}) => {\n return (\n <View className={className}>\n {image && (\n <ImageContainer 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 coverSpace={image.coverSpace}\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 <ContentBlock\n type=\"copy-b\"\n isInverted={isInverted}\n data-sheet=\"subtitle\"\n >\n {subTitle}\n </ContentBlock>\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\nexport default Fact;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, mq, spacings } from 'utils/styles';\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';\n\nconst ContentContainer = styled.div<{ columns?: number }>`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.medium} {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n\n @supports (display: grid) {\n display: -ms-grid;\n display: grid;\n -ms-grid-columns: ${({ columns }) =>\n columns &&\n new Array(columns < 3 ? columns : 3).fill('').map(() => {\n return '1fr ';\n })};\n grid-template-columns: repeat(\n ${({ columns }) => columns && (columns < 3 ? columns : 3)},\n 1fr\n );\n }\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n flex: 0 0\n ${({ columns }) =>\n columns && (1 / (columns < 3 ? columns : 3)) * 100 + '%'};\n max-width: ${({ columns }) =>\n columns && (1 / (columns < 3 ? columns : 3)) * 100 + '%'};\n padding-left: 20px;\n padding-top: 40px;\n\n @supports (display: grid) {\n max-width: 370px;\n }\n }\n }\n\n @media ${mq.semilarge} {\n & > * {\n flex: 0 0\n ${({ columns }) =>\n columns && (1 / (columns < 4 ? columns : 4)) * 100 + '%'};\n max-width: ${({ columns }) =>\n columns && (1 / (columns < 4 ? columns : 4)) * 100 + '%'};\n }\n\n @supports (display: grid) {\n -ms-grid-columns: ${({ columns }) =>\n columns &&\n new Array(columns < 4 ? columns : 4).fill('').map(() => {\n return '1fr ';\n })};\n grid-template-columns: repeat(\n ${({ columns }) => columns && (columns < 4 ? columns : 4)},\n 1fr\n );\n\n & > * {\n max-width: 370px;\n }\n }\n }\n\n @media ${mq.large} {\n & > * {\n flex: 0 0 ${({ columns }) => columns && (1 / columns) * 100 + '%'};\n max-width: ${({ columns }) => columns && (1 / columns) * 100 + '%'};\n }\n\n @supports (display: grid) {\n -ms-grid-columns: ${({ columns }) =>\n columns &&\n new Array(columns).fill('').map(() => {\n return '1fr ';\n })};\n grid-template-columns: repeat(${({ columns }) => columns}, 1fr);\n\n & > * {\n max-width: 370px;\n }\n }\n }\n`;\n\nconst FactFill = styled.div`\n display: none;\n\n @media ${mq.large} {\n display: block;\n }\n`;\n\nconst FactGrid: FC<{\n columns?: 3 | 4 | 6;\n\n facts?: Array<Omit<FactProps, 'isInverted' | 'isCentered'>>;\n\n bgMode?: 'full' | 'inverted' | 'splitted';\n isCentered?: boolean;\n}> = ({ columns = 3, facts, bgMode, isCentered }) => {\n const theme = useContext(ThemeContext);\n const factCount = facts?.length || 0;\n\n const isInverted = bgMode === 'inverted';\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\n listLength: factCount,\n identifiers: [\n '[data-sheet=\"title\"]',\n '[data-sheet=\"subtitle\"]',\n '[data-sheet=\"text\"]',\n ],\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 bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {facts && (\n <ContentContainer columns={columns}>\n {facts.map((fact, i) => {\n if (\n fact?.title ||\n fact?.subTitle ||\n fact?.image ||\n fact?.text\n ) {\n return (\n <div key={i} ref={cardRefs[i]}>\n <Fact\n key={i}\n {...fact}\n isCentered={isCentered}\n isInverted={isInverted}\n />\n </div>\n );\n } else {\n return <FactFill ref={cardRefs[i]} key={i} />;\n }\n })}\n </ContentContainer>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default FactGrid;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, withRange, spacings, mq } from 'utils/styles';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport { hexToRgba } from 'utils/hexRgbConverter';\n\nconst TableContainer = styled.div`\n overflow-x: scroll;\n overflow-y: hidden;\n white-space: nowrap;\n`;\n\nconst TableBody = styled.table`\n width: 100%;\n max-width: 100%;\n margin-top: ${spacings.nudge * 2}px;\n\n border-collapse: separate;\n border-spacing: 0 ${spacings.nudge}px;\n\n padding: 0 ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n padding-left: ${spacings.spacer}px;\n padding-right: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n padding-left: ${(1 / 28) * 100}%;\n padding-left: ${`\n max(\n ${spacings.spacer}px,\n ${(1 / 28) * 100}%\n );\n `};\n padding-right: ${spacings.spacer}px;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n padding-right: ${spacings.spacer}px;\n }\n`;\n\nconst TableHead = styled.th<{ isInverted?: boolean; hasBack?: boolean }>`\n text-align: left;\n color: ${({ theme }) => color(theme).dark};\n background-color: ${({ theme, hasBack, isInverted }) =>\n hasBack && !isInverted ? color(theme).light : color(theme).mono.light};\n\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 2}px\n ${spacings.nudge * 3.5}px ${spacings.spacer * 2}px;\n min-width: 60px;\n box-sizing: content-box;\n\n :last-child {\n padding-right: ${spacings.spacer * 2.5}px;\n }\n`;\n\nconst TableData = styled.td<{ isInverted?: boolean; hasBack?: boolean }>`\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 2}px\n ${spacings.nudge * 3.5}px ${spacings.spacer * 2}px;\n min-width: 60px;\n box-sizing: content-box;\n\n background-color: ${({ isInverted, hasBack, theme }) =>\n hexToRgba(\n hasBack && !isInverted\n ? color(theme).light\n : color(theme).mono.light,\n isInverted ? 0.2 : 0.4\n )};\n\n :last-child {\n padding-right: ${spacings.spacer * 2.5}px;\n }\n`;\n\nexport interface TableProps {\n tableTitle?: string;\n rowTitle?: string[];\n row: {\n cols: string[];\n }[];\n isInverted?: boolean;\n hasBack?: boolean;\n}\n\nconst TableBlock: React.FC<TableProps> = ({\n row,\n tableTitle,\n rowTitle,\n isInverted = false,\n hasBack = false,\n}) => {\n return (\n <div>\n {tableTitle && (\n <Wrapper addWhitespace>\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {tableTitle}\n </Copy>\n </Wrapper>\n )}\n <TableContainer>\n <TableBody>\n {rowTitle && (\n <thead>\n <tr>\n {rowTitle.map((item, ii) => {\n return (\n <TableHead\n key={ii}\n isInverted={isInverted}\n hasBack={hasBack}\n >\n <Copy type=\"copy-b\">{item}</Copy>\n </TableHead>\n );\n })}\n </tr>\n </thead>\n )}\n <tbody>\n {row.map(({ cols }, i) => (\n <tr key={i}>\n {cols.map((itemText, ii) => {\n return (\n <TableData\n key={ii}\n isInverted={isInverted}\n hasBack={hasBack}\n >\n <Copy isInverted={isInverted}>\n {itemText}\n </Copy>\n </TableData>\n );\n })}\n </tr>\n ))}\n </tbody>\n </TableBody>\n </TableContainer>\n </div>\n );\n};\n\nconst TableWrapper = styled.div<{ withSeperation?: boolean }>`\n ${({ withSeperation }) =>\n withSeperation &&\n withRange([spacings.spacer, spacings.spacer * 4], 'padding-top')};\n\n & + & {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n }\n`;\n\nconst Table: React.FC<{\n tableItems: TableProps[];\n bgMode?: 'full' | 'inverted';\n}> = ({ bgMode, tableItems }) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper>\n {tableItems.map((item, i) => {\n return (\n <TableWrapper key={i}>\n <TableBlock\n {...item}\n isInverted={isInverted}\n hasBack={hasBg}\n />\n </TableWrapper>\n );\n })}\n </Wrapper>\n </Section>\n );\n};\n\nexport default Table;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowLeftGhost: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"58\"\n height=\"58\"\n viewBox=\"0 0 58 58\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g fill=\"none\">\n <path\n d=\"M29.00009 1.0086C13.55287 1.0086 1.009 13.5526 1.009 28.99998c0 15.44738 12.54387 27.99138 27.99109 27.99138s27.99109-12.544 27.99109-27.99138S44.44731 1.0086 29.00009 1.0086zm0 1.93044c14.4048 0 26.06067 11.656 26.06067 26.06094S43.40488 55.06092 29.00009 55.06092 2.93942 43.40492 2.93942 28.99998 14.5953 2.93904 29.00009 2.93904z\"\n fill={iconColor}\n />\n <g transform=\"matrix(.96521 0 0 .96522 1.009 1.0086)\">\n <g>\n <path\n d=\"M38.73 28.38H23.634l4.7893-4.9143c.2082-.2315.3123-.4986.3123-.8013s-.1041-.5698-.3123-.8013c-.2256-.2136-.4859-.3205-.7809-.3205s-.5553.1069-.7808.3205l-6.6633 6.8374c-.0521.0713-.1041.1336-.1562.187-.052.0534-.0781.1068-.0781.1602-.052.1247-.0781.2671-.0781.4274 0 .1602.0261.3205.0781.4807.0521.0713.0911.1336.1172.187.026.0534.065.1068.1171.1602l6.6633 6.8374c.1041.1247.2169.2137.3383.2671.1215.0534.269.0801.4425.0801.1562 0 .295-.0267.4165-.0801.1214-.0534.2429-.1424.3644-.2671.2082-.2314.3123-.4985.3123-.8012s-.1041-.5698-.3123-.8013l-4.7893-4.8876H38.73c.3471 0 .6204-.1024.8199-.3072.1996-.2048.2993-.4852.2993-.8413 0-.3383-.0997-.6099-.2993-.8146-.1995-.2048-.4728-.3072-.8199-.3072z\"\n fill={iconColor}\n />\n <path d=\"M27.643 21.043c-.41579 0-.8205.1686-1.125.45703l-.00781.00781-6.6953 6.8691-.01953.0293c-.04046.05536-.07885.09952-.11133.1328-.10781.11073-.21275.28915-.2168.5-.03865.14284-.08203.28464-.08203.43556 0 .2145.03644.43009.10352.63672l.02539.07422.04687.0664c.04037.05525.06313.09664.07031.11133.05464.11173.128.20605.20898.28906l6.6641 6.8379-.02539-.0293c.14297.17127.3152.31443.51953.4043.20176.08868.41973.12306.64453.12306.21318 0 .42348-.03791.6172-.12305.19627-.08634.3667-.21614.52147-.375l.00782-.00781.00586-.00782c.28073-.312.4414-.71743.4414-1.1348s-.16074-.82466-.4414-1.1367l-.00782-.00781-3.9648-4.0449h13.908c.44544 0 .8771-.15036 1.1777-.45898.30073-.30856.44141-.74003.44141-1.1895 0-.43654-.14557-.86067-.4414-1.1641-.30064-.30862-.7323-.45703-1.1777-.45703h-13.912l3.9707-4.0723.00585-.00781c.28066-.31206.44141-.71938.44141-1.1367 0-.41733-.16075-.8227-.4414-1.1348l-.01368-.01563-.01367-.01367c-.30455-.28835-.70921-.45703-1.125-.45703zm0 1c.16555 0 .27932.05066.41602.17383.12311.14291.17773.26708.17773.44726 0 .18807-.0498.31586-.18555.4668l-5.6016 5.75h16.281c.24876 0 .36257.05527.46094.15625.10337.10601.1582.22478.1582.46484 0 .26277-.05973.39115-.1582.49219-.09837.10098-.21218.15625-.46094.15625h-16.287l5.6074 5.7227c.13574.15094.18555.27873.18555.4668 0 .18481-.05129.31156-.18164.45898-.08255.08228-.15298.13091-.19727.15039-.0493.02166-.11562.03906-.21484.03906-.1222 0-.20094-.02093-.24219-.03906-.03846-.01692-.08907-.05077-.1543-.12891l-.01367-.01562-6.6758-6.8496v-.00196c-.02285-.02341-.0281-.03487-.0254-.0293h-.00195c-.0264-.05402-.06298-.10381-.0957-.1543-.0299-.10164-.04883-.1992-.04883-.29491 0-.10603.01819-.17962.04102-.23438l.02734-.06641c.03584-.03994.0698-.08138.10352-.125l.00586-.00586 6.6426-6.8164c.1465-.13877.2633-.18359.4375-.18359z\" />\n </g>\n </g>\n </g>\n </SVG>\n);\n\nexport default ArrowLeftGhost;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowRightGhost: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"58\"\n height=\"58\"\n viewBox=\"0 0 58 58\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g fill=\"none\">\n <path\n d=\"M29.00009 1.0086C13.55287 1.0086 1.009 13.5526 1.009 28.99998c0 15.44738 12.54387 27.99138 27.99109 27.99138s27.99109-12.544 27.99109-27.99138S44.44731 1.0086 29.00009 1.0086zm0 1.93044c14.4048 0 26.06067 11.656 26.06067 26.06094S43.40488 55.06092 29.00009 55.06092 2.93942 43.40492 2.93942 28.99998 14.5953 2.93904 29.00009 2.93904z\"\n fill={iconColor}\n />\n <g transform=\"matrix(.96521 0 0 .96522 1.009 1.0086)\">\n <g>\n <path\n d=\"M21.005 30.65h15.096l-4.7893 4.9143c-.2082.2315-.3123.4986-.3123.8013s.1041.5698.3123.8013c.2256.2136.4859.3205.7809.3205s.5553-.1069.7808-.3205l6.6633-6.8374c.0521-.0713.1041-.1336.1562-.187.052-.0534.0781-.1068.0781-.1602.052-.1247.0781-.2671.0781-.4274 0-.1602-.0261-.3205-.0781-.4807-.0521-.0713-.0911-.1336-.1172-.187-.026-.0534-.065-.1068-.1171-.1602l-6.6633-6.8374c-.1041-.1247-.2169-.2137-.3383-.2671-.1215-.0534-.269-.0801-.4425-.0801-.1562 0-.295.0267-.4165.0801-.1214.0534-.2429.1424-.3644.2671-.2082.2314-.3123.4985-.3123.8012s.1041.5698.3123.8013l4.7893 4.8876H21.005c-.3471 0-.6204.1024-.8199.3072-.1996.2048-.2993.4852-.2993.8413 0 .3383.0997.6099.2993.8146.1995.2048.4728.3072.8199.3072z\"\n fill={iconColor}\n />\n <path d=\"M27.643 21.043c-.41579 0-.8205.1686-1.125.45703l-.00781.00781-6.6953 6.8691-.01953.0293c-.04046.05536-.07885.09952-.11133.1328-.10781.11073-.21275.28915-.2168.5-.03865.14284-.08203.28464-.08203.43556 0 .2145.03644.43009.10352.63672l.02539.07422.04687.0664c.04037.05525.06313.09664.07031.11133.05464.11173.128.20605.20898.28906l6.6641 6.8379-.02539-.0293c.14297.17127.3152.31443.51953.4043.20176.08868.41973.12306.64453.12306.21318 0 .42348-.03791.6172-.12305.19627-.08634.3667-.21614.52147-.375l.00782-.00781.00586-.00782c.28073-.312.4414-.71743.4414-1.1348s-.16074-.82466-.4414-1.1367l-.00782-.00781-3.9648-4.0449h13.908c.44544 0 .8771-.15036 1.1777-.45898.30073-.30856.44141-.74003.44141-1.1895 0-.43654-.14557-.86067-.4414-1.1641-.30064-.30862-.7323-.45703-1.1777-.45703h-13.912l3.9707-4.0723.00585-.00781c.28066-.31206.44141-.71938.44141-1.1367 0-.41733-.16075-.8227-.4414-1.1348l-.01368-.01563-.01367-.01367c-.30455-.28835-.70921-.45703-1.125-.45703zm0 1c.16555 0 .27932.05066.41602.17383.12311.14291.17773.26708.17773.44726 0 .18807-.0498.31586-.18555.4668l-5.6016 5.75h16.281c.24876 0 .36257.05527.46094.15625.10337.10601.1582.22478.1582.46484 0 .26277-.05973.39115-.1582.49219-.09837.10098-.21218.15625-.46094.15625h-16.287l5.6074 5.7227c.13574.15094.18555.27873.18555.4668 0 .18481-.05129.31156-.18164.45898-.08255.08228-.15298.13091-.19727.15039-.0493.02166-.11562.03906-.21484.03906-.1222 0-.20094-.02093-.24219-.03906-.03846-.01692-.08907-.05077-.1543-.12891l-.01367-.01562-6.6758-6.8496v-.00196c-.02285-.02341-.0281-.03487-.0254-.0293h-.00195c-.0264-.05402-.06298-.10381-.0957-.1543-.0299-.10164-.04883-.1992-.04883-.29491 0-.10603.01819-.17962.04102-.23438l.02734-.06641c.03584-.03994.0698-.08138.10352-.125l.00586-.00586 6.6426-6.8164c.1465-.13877.2633-.18359.4375-.18359z\" />\n </g>\n </g>\n </g>\n </SVG>\n);\n\nexport default ArrowRightGhost;\n","import { FeatureGroup, Map, Marker, MarkerOptions } from 'leaflet';\nimport React, { FC, useEffect, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { spacings, getColors as color } from 'utils/styles';\n\nconst MapContainer = styled.div`\n position: relative;\n z-index: 0;\n`;\n\nconst FylToCtrlContainer = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1000;\n\n margin-top: ${spacings.spacer}px;\n margin-right: ${spacings.spacer}px;\n color: ${({ theme }) => color(theme).dark};\n\n cursor: pointer;\n`;\n\nexport interface LeafletMapMarker {\n id: string;\n position: [number, number];\n icon?: {\n url: string;\n size: [number, number];\n anchor: [number, number];\n\n sizeActive: [number, number];\n anchorActive: [number, number];\n };\n popup?: {\n text: string;\n };\n}\n\nconst LeafletMap: FC<{\n containerRef?: React.MutableRefObject<HTMLDivElement | null>;\n onReady?: (props: {\n goTo: (position?: [number, number], zoom?: number) => void;\n showAll: () => void;\n }) => void;\n url?: string;\n attribution?: string;\n activeMarkerId?: string;\n markers?: Array<LeafletMapMarker>;\n center: [number, number];\n zoom?: number;\n touchZoom?: boolean;\n scrollWheelZoom?: boolean;\n onlyScrollOnFocus?: boolean;\n fitBoundsPadding?: [number, number];\n onMarkerClick?: (markerId: string) => void;\n onFlyToClick?: (goTo: (zoom?: number) => void) => void;\n flyToControl?: React.ReactNode;\n onActiveMarkerChanged?: (props: {\n markerId: string;\n goTo: (zoom?: number) => void;\n }) => void;\n className?: string;\n}> = ({\n containerRef,\n onReady,\n url = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n attribution = '© <a href=\"http://osm.org/copyright\">OpenStreetMap</a> contributors',\n activeMarkerId,\n markers,\n center,\n zoom = 2.5,\n touchZoom = false,\n scrollWheelZoom = false,\n onlyScrollOnFocus = true,\n fitBoundsPadding = [20, 20], // 0 = TopLeft, 1 = BottomRight\n onMarkerClick,\n onFlyToClick,\n flyToControl,\n onActiveMarkerChanged,\n className,\n}) => {\n const cRef = useRef<HTMLDivElement | null>(null);\n const prevMarkerId = useRef<string | null>(null);\n\n // leaflet ref\n const [L, setLeaflet] = useState<any>(null);\n const [map, setMap] = useState<Map | null>(null);\n const [markersLayer, setMarkersLayer] = useState<FeatureGroup<any> | null>(\n null\n );\n const [isLoaded, setLoaded] = useState<boolean>(false);\n\n useEffect(() => {\n const initLeaflet = async (cElement: HTMLDivElement) => {\n const leaflet = await import('leaflet');\n if (leaflet) {\n // set leaflet state\n setLeaflet(leaflet);\n\n // setup map\n const map = leaflet.map(cElement, {\n center: center,\n zoom: zoom,\n touchZoom: touchZoom,\n scrollWheelZoom: scrollWheelZoom,\n });\n\n // activate map scrolling on focus\n map.once('focus', () => {\n if (onlyScrollOnFocus) map.scrollWheelZoom.enable();\n });\n\n // deactivate map scrolling on focus is lost\n map.once('blur', () => {\n if (onlyScrollOnFocus) map.scrollWheelZoom.disable();\n });\n\n // set map state\n setMap(map);\n\n // add map layer from map provider\n leaflet\n .tileLayer(url, {\n attribution: attribution,\n })\n .addTo(map);\n\n // setup layer for markers\n const markersLayer = new leaflet.FeatureGroup();\n markersLayer.addTo(map);\n setMarkersLayer(markersLayer);\n }\n };\n\n // load leaflet\n const mapContainerRef = containerRef || cRef;\n if (!isLoaded && mapContainerRef?.current)\n initLeaflet(mapContainerRef.current);\n }, [\n attribution,\n center,\n containerRef,\n isLoaded,\n onlyScrollOnFocus,\n scrollWheelZoom,\n touchZoom,\n url,\n zoom,\n ]);\n\n // setup markers\n useEffect(() => {\n /**\n * Adjust zoom to show all markers\n */\n const showAllMarkers = () => {\n if (map && markersLayer) {\n map.fitBounds(markersLayer.getBounds(), {\n padding: L.point(fitBoundsPadding),\n });\n }\n };\n\n /**\n * Pan and zoom to marker position on map\n * @param position\n * @param zoom\n */\n const flyToPosition = (position?: [number, number], zoom?: number) => {\n if (position) map?.flyTo(position, zoom);\n else flyToActive(zoom);\n };\n\n /**\n * Pan and zoom to active marker position on map\n * @param zoom\n */\n const flyToActive = (zoom?: number) => {\n const marker = markers?.find((m) => m.id === activeMarkerId);\n if (marker) map?.flyTo(marker.position, zoom);\n };\n\n // setup markers\n if (markersLayer) {\n markersLayer.clearLayers();\n\n markers?.forEach(({ position, icon, id }) => {\n if (!icon?.url || !icon?.size || !position) return;\n const isActive = id === activeMarkerId;\n\n const markerIcon = L.icon({\n iconUrl: icon.url,\n\n iconSize: isActive ? icon.sizeActive : icon.size, // size of the icon\n // shadowSize: [50, 64], // size of the shadow\n iconAnchor: isActive ? icon.anchorActive : icon?.anchor, // point of the icon which will correspond to marker's location\n // shadowAnchor: [4, 62], // the same for the shadow\n // popupAnchor: [0, -16], // point from which the popup should open relative to the iconAnchor\n });\n\n const marker: Marker = L.marker(position, {\n icon: markerIcon,\n riseOnHover: true,\n } as MarkerOptions).addTo(map);\n\n marker.on('click', () => {\n onMarkerClick && onMarkerClick(id);\n });\n\n // add marker to markers layer\n markersLayer.addLayer(marker);\n\n if (L && map && markersLayer) {\n if (!isLoaded) {\n // on first load\n onReady &&\n onReady({\n goTo: flyToPosition,\n showAll: showAllMarkers,\n });\n setLoaded(true);\n if (activeMarkerId)\n prevMarkerId.current = activeMarkerId;\n } else {\n // check if active marker changed\n if (\n activeMarkerId &&\n activeMarkerId !== prevMarkerId?.current\n ) {\n prevMarkerId.current = activeMarkerId;\n activeMarkerId &&\n onActiveMarkerChanged &&\n onActiveMarkerChanged({\n markerId: activeMarkerId,\n goTo: flyToActive,\n });\n }\n }\n }\n });\n }\n }, [\n L,\n fitBoundsPadding,\n isLoaded,\n map,\n markers,\n markersLayer,\n onMarkerClick,\n activeMarkerId,\n onActiveMarkerChanged,\n onReady,\n ]);\n\n return (\n <MapContainer ref={cRef} className={className}>\n {flyToControl && (\n <FylToCtrlContainer\n onClick={(ev) => {\n ev.stopPropagation();\n if (map && onFlyToClick) {\n onFlyToClick((zoom) => {\n // fly to active marker\n const marker = markers?.find(\n (m) => m.id === activeMarkerId\n );\n if (marker) {\n map.flyTo(marker.position, zoom);\n }\n });\n }\n }}\n >\n {flyToControl}\n </FylToCtrlContainer>\n )}\n </MapContainer>\n );\n};\n\nexport default LeafletMap;\n","import Grid from 'components/base/Grid';\nimport ArrowLeftGhost from 'components/base/icons/ArrowLeftGhost';\nimport ArrowRightGhost from 'components/base/icons/ArrowRightGhost';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\nimport IntroBlock from 'components/blocks/IntroBlock';\nimport LeafletMap from 'components/blocks/LeafletMap';\nimport Slider, { SliderContext } from 'components/blocks/Slider';\nimport Copy from 'components/typography/Copy';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport React, { FC, useContext, useState } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { mq, spacings, getColors as color, withRange } from 'utils/styles';\n\nconst StyledSection = styled(Section)`\n position: relative;\n min-height: 500px;\n z-index: 0;\n`;\n\nconst MapContainer = styled(LeafletMap)<{ isMirrored?: boolean }>`\n position: relative;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n min-height: 500px;\n\n @media ${mq.semilarge} {\n position: absolute;\n width: 50%;\n height: 100%;\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '50%')};\n right: ${({ isMirrored }) => (isMirrored ? '50%' : 'auto')};\n\n transform: translateX(\n ${({ isMirrored }) => (isMirrored ? '100%' : '-100%')}\n );\n }\n\n @media ${mq.xlarge} {\n max-width: ${spacings.wrapperLarge / 2}px;\n }\n`;\n\nconst CardWrapper = styled(Wrapper)`\n pointer-events: none;\n`;\n\nconst SliderWrapper = styled.div<{ isMirrored?: boolean }>`\n display: flex;\n flex-direction: column;\n position: relative;\n width: 100%;\n pointer-events: all;\n\n padding: ${spacings.nudge * 3}px ${spacings.nudge * 3}px\n ${spacings.spacer * 2}px ${spacings.nudge * 3}px;\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 3}px ${spacings.spacer}px\n ${spacings.spacer * 2}px ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n flex-direction: row;\n ${withRange([spacings.spacer * 3, spacings.spacer * 5], 'padding-top')};\n ${withRange(\n [spacings.spacer * 3, spacings.spacer * 5],\n 'padding-bottom'\n )};\n ${({ isMirrored }) =>\n isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-right'\n )\n : `padding-right: ${spacings.spacer}px`};\n ${({ isMirrored }) =>\n !isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-left'\n )\n : `padding-left: ${(1 / 28) * 100}vw`};\n }\n\n @media ${mq.xlarge} {\n ${({ isMirrored }) =>\n !isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-left'\n )\n : `padding-left: ${(1 / 28) * spacings.wrapper}px`};\n }\n\n .slick-slide div {\n outline: none;\n }\n\n .slick-initialized .slick-slide.slick-active {\n z-index: 1;\n }\n`;\n\nconst InfoCardView = styled.div`\n min-height: 100px;\n pointer-events: all;\n\n & > * + * {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')}\n }\n`;\n\nconst CardHeader = styled.div`\n display: flex;\n`;\n\nconst StyledActions = styled(Actions)`\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n padding-bottom: ${spacings.nudge}px;\n\n @media ${mq.medium} {\n & > * {\n max-width: calc(50% - ${spacings.spacer}px);\n }\n }\n`;\n\nconst ContactList = styled.ul<{ isInverted?: boolean }>`\n padding: 0;\n list-style-type: none;\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n\n a {\n color: inherit;\n }\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 ContactListLabel = styled(Copy)`\n margin-left: ${spacings.nudge * 2.5}px;\n\n * {\n margin: 0;\n padding: 0;\n }\n`;\n\nconst LocationInfoCard: FC<{\n isInverted?: boolean;\n location: MapLocation;\n}> = ({ isInverted, location }) => {\n return (\n <InfoCardView>\n {location.meta?.title && (\n <CardHeader>\n <IntroBlock\n colorMode={isInverted ? 'inverted' : 'default'}\n title={location.meta.title}\n titleAs={location.meta.titleAs}\n superTitle={location.meta?.superTitle}\n superTitleAs={location.meta?.superTitleAs}\n />\n </CardHeader>\n )}\n {location.meta?.contact && location.meta.contact.length > 0 && (\n <ContactList isInverted={isInverted}>\n {location.meta?.contact\n ?.filter((c) => c.label)\n .map((contact, i) => (\n <li key={i}>\n <span>{contact.icon}</span>\n <ContactListLabel\n isInverted={isInverted}\n innerHTML={contact.label}\n />\n </li>\n ))}\n </ContactList>\n )}\n {(location?.meta?.primaryAction ||\n location?.meta?.secondaryAction) && (\n <StyledActions\n primary={\n location?.meta?.primaryAction &&\n location.meta.primaryAction(isInverted)\n }\n secondary={\n location?.meta?.secondaryAction &&\n location.meta.secondaryAction(isInverted)\n }\n />\n )}\n </InfoCardView>\n );\n};\n\nconst Controls = styled.div`\n display: flex;\n flex-direction: row;\n align-self: center;\n text-align: center;\n\n @media ${mq.semilarge} {\n flex-direction: column;\n align-self: flex-start;\n margin-left: auto;\n text-align: right;\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst StyledDotGroup = styled(Slider.DotGroup)`\n display: flex;\n flex-direction: row;\n padding-top: ${spacings.spacer * 1.5}px;\n padding-left: ${spacings.spacer * 1.5}px;\n padding-right: ${spacings.spacer * 1.5}px;\n\n @media ${mq.semilarge} {\n display: none;\n padding: 0;\n }\n`;\n\nconst DotWrapper = styled.button`\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n\n padding: ${spacings.nudge * 2}px;\n margin: -${spacings.nudge * 2}px;\n\n & + & {\n margin-left: ${spacings.nudge * 1.5}px;\n }\n`;\n\nconst Dot = styled.div<{ isActive?: boolean; isInverted?: boolean }>`\n height: 14px;\n width: 14px;\n border: solid 1px\n ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 14px;\n\n transition: background-color 0.2s ease-in-out;\n\n background-color: ${({ isActive, isInverted, theme }) =>\n isActive\n ? isInverted\n ? color(theme).light\n : color(theme).dark\n : 'transparent'};\n`;\n\nconst StyledControl = styled(Slider.Control)<{ isInverted?: boolean }>`\n display: none;\n border: none;\n outline: none;\n background: none;\n padding: 0 ${spacings.nudge * 3}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n transition: color 0.2s ease-in-out, transform 0.2s ease-in-out;\n\n &:enabled {\n cursor: pointer;\n }\n\n &:enabled:hover {\n transform: scale(1.05);\n }\n\n &:enabled:active {\n transform: scale(0.95);\n }\n\n &:disabled {\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).mono.dark : color(theme).mono.medium};\n }\n\n @media ${mq.semilarge} {\n display: block;\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 MapLocation {\n id: string;\n position: [number, number];\n icon?: LocationIcon;\n meta?: {\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n contact?: Array<{ icon?: React.ReactNode; label?: string }>;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n };\n}\n\nconst Map: FC<{\n bgMode?: 'full' | 'inverted';\n isMirrored?: boolean;\n provider?: string;\n attribution?: string;\n center?: [number, number];\n zoom?: number;\n flyToZoom?: number;\n initialLocation?: string;\n locations?: Array<MapLocation>;\n /** Show all markers on first load */\n allMarkersOnInit?: boolean;\n /** Map container padding for show all markers */\n fitBoundsPadding?: [number, number];\n flyToControl?: React.ReactNode;\n controlNext?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n controlPrev?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n dot?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n index?: number;\n }) => React.ReactNode;\n}> = ({\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 dot,\n}) => {\n const theme = useContext(ThemeContext);\n const [activeLocation, setActiveLocation] = useState<string>(\n initialLocation || ''\n );\n\n const isInverted = bgMode === 'inverted';\n\n return (\n <StyledSection\n bgColor={isInverted ? color(theme).dark : color(theme).mono.light}\n bgMode={bgMode === 'inverted' ? mapToBgMode(bgMode) : 'full'}\n >\n <Slider.Provider\n fade={true}\n swipe={false}\n slidesToShow={1}\n variableWidth={false}\n sameHeight={true}\n clickSideOffset={0}\n responsive={[\n {\n breakpoint: 832,\n settings: {\n fade: false,\n swipe: true,\n },\n },\n ]}\n beforeChange={({ nextStep }) => {\n if (locations && locations[nextStep]) {\n setActiveLocation(locations[nextStep].id);\n }\n }}\n >\n <SliderContext.Consumer>\n {({ goToStep }) => (\n <MapContainer\n url={provider}\n attribution={attribution}\n onReady={({ showAll, goTo }) => {\n if (allMarkersOnInit) showAll();\n else goTo();\n }}\n center={center}\n zoom={zoom}\n isMirrored={isMirrored}\n activeMarkerId={activeLocation}\n onMarkerClick={(markerId) => {\n setActiveLocation(markerId);\n\n // move slider to step\n const locIndex = locations?.findIndex(\n (loc) => loc.id === markerId\n );\n\n if (locIndex !== undefined && locIndex !== -1)\n goToStep(locIndex);\n }}\n flyToControl={flyToControl}\n onFlyToClick={(goTo) => {\n // pan and zoom to active location\n goTo(flyToZoom);\n }}\n fitBoundsPadding={fitBoundsPadding}\n markers={locations?.map(\n ({ id, position, icon }) => {\n return {\n id,\n position,\n icon,\n };\n }\n )}\n onActiveMarkerChanged={({ goTo }) => goTo()}\n />\n )}\n </SliderContext.Consumer>\n\n <CardWrapper clampWidth=\"normal\">\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? 14 : 0) / 28,\n }}\n ></Grid.Col>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? -14 : 0) / 28,\n }}\n >\n <SliderWrapper isMirrored={isMirrored}>\n {locations && locations.length > 1 && (\n <>\n <Slider.Slides>\n {locations?.map((location, i) => (\n <LocationInfoCard\n key={i}\n isInverted={isInverted}\n location={location}\n />\n ))}\n </Slider.Slides>\n <Controls>\n <StyledControl\n type=\"next\"\n isInverted={isInverted}\n >\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name:\n 'control_next_head',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n <StyledControl\n type=\"prev\"\n isInverted={isInverted}\n >\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name:\n 'control_prev_head',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n <StyledDotGroup>\n {(i, isActive, onClick) => (\n <DotWrapper\n key={i}\n onClick={onClick}\n >\n {dot ? (\n dot({\n isInverted,\n isActive,\n index: i,\n })\n ) : (\n <Dot\n isActive={\n isActive\n }\n isInverted={\n isInverted\n }\n />\n )}\n </DotWrapper>\n )}\n </StyledDotGroup>\n </Controls>\n </>\n )}\n {locations && locations.length === 1 && (\n <LocationInfoCard\n isInverted={isInverted}\n location={locations[0]}\n />\n )}\n </SliderWrapper>\n </Grid.Col>\n </Grid.Row>\n </CardWrapper>\n </Slider.Provider>\n </StyledSection>\n );\n};\n\nexport default Map;\n","import Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors as color, spacings } from 'utils/styles';\n\nconst View = styled.div``;\n\nconst FieldHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: top;\n justify-content: space-between;\n padding-bottom: ${spacings.nudge * 3}px;\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n`;\n\nconst Field = styled.input<{\n isInverted?: boolean;\n hasError?: boolean;\n isDisabled?: boolean;\n hasBack?: boolean;\n}>`\n display: block;\n outline: none;\n width: 100%;\n min-height: 60px;\n box-shadow: none;\n border: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n padding: ${spacings.nudge * 2}px ${spacings.spacer}px;\n border: ${({ hasError }) =>\n hasError ? '2px solid #ff0000' : '2px solid transparent'};\n background-color: ${({ isInverted, hasBack, theme }) =>\n isInverted || !hasBack ? color(theme).light : color(theme).mono.light};\n\n font-weight: inherit;\n font-family: inherit;\n font-size: inherit;\n color: ${({ hasError }) => (hasError ? '#ff0000' : 'inherit')};\n\n pointer-events: ${({ isDisabled }) => isDisabled && 'none'};\n\n &:active {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n &:focus {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n ::placeholder {\n color: ${({ theme }) => color(theme).secondary.light};\n }\n`;\n\nconst InfoMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst ErrorMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nexport type FormProps = {\n label?: string;\n errorMessage?: string;\n infoMessage?: string;\n\n value?: string;\n name?: string;\n placeholder?: string;\n isRequired?: boolean;\n isDisabled?: boolean;\n};\n\nconst Textfield: React.FC<\n FormProps & {\n type?: 'text' | 'email' | 'tel';\n isInverted?: boolean;\n lightBg?: boolean;\n onChange?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n }\n> = ({\n lightBg,\n type = 'text',\n label,\n errorMessage,\n infoMessage,\n placeholder,\n value,\n name,\n isInverted,\n isDisabled,\n isRequired,\n onChange,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <View>\n <FieldHead>\n {label && (\n <Copy\n isInverted={isInverted}\n textColor={\n isDisabled ? color(theme).mono.dark : undefined\n }\n >\n {`${label}${isRequired ? ' *' : ''}`}\n </Copy>\n )}\n </FieldHead>\n <Copy textColor={color(theme).secondary.dark} type=\"copy-b\">\n <Field\n hasBack={!lightBg}\n placeholder={placeholder}\n hasError={!!errorMessage}\n type={type}\n isInverted={isInverted}\n isDisabled={isDisabled}\n name={name}\n value={value}\n required={isRequired}\n onChange={onChange}\n />\n </Copy>\n {infoMessage && (\n <InfoMessage textColor={color(theme).mono.dark} size=\"small\">\n {infoMessage}\n </InfoMessage>\n )}\n {errorMessage && (\n <ErrorMessage textColor=\"#ff0000\" size=\"small\" type=\"copy-i\">\n {errorMessage\n ? errorMessage\n : 'Bitte geben Sie einen gültigen Text ein'}\n </ErrorMessage>\n )}\n </View>\n );\n};\n\nexport default Textfield;\n","import Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport { FormProps } from './Textfield';\n\nconst FieldHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: top;\n justify-content: space-between;\n padding-bottom: ${spacings.nudge * 3}px;\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n`;\n\nconst Area = styled.textarea<{\n isInverted?: boolean;\n hasError?: boolean;\n isDisabled?: boolean;\n hasBack?: boolean;\n}>`\n display: block;\n outline: none;\n width: 100%;\n min-height: 60px;\n box-shadow: none;\n border: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n resize: none;\n width: 100%;\n min-height: 120px;\n\n @media ${mq.semilarge} {\n min-height: 185px;\n }\n\n padding: ${spacings.nudge * 2}px ${spacings.spacer}px;\n\n /* border: ${({ isInverted, theme }) =>\n isInverted\n ? '2px solid transparent'\n : `2px solid ${color(theme).mono.medium}`}; */\n border: ${({ hasError }) =>\n hasError ? '2px solid #ff0000' : '2px solid transparent'};\n background-color: ${({ isInverted, hasBack, theme }) =>\n isInverted || !hasBack ? color(theme).light : color(theme).mono.light};\n\n font-weight: inherit;\n font-family: inherit;\n font-size: inherit;\n color: ${({ hasError }) => (hasError ? '#ff0000' : 'inherit')};\n\n pointer-events: ${({ isDisabled }) => isDisabled && 'none'};\n\n &:active {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n &:focus {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n ::placeholder {\n color: ${({ theme }) => color(theme).secondary.light};\n }\n`;\n\nconst InfoMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n`;\n\nconst ErrorMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n`;\n\nconst Textarea: React.FC<\n FormProps & {\n isInverted?: boolean;\n lightBg?: boolean;\n onChange?: (ev: React.SyntheticEvent<HTMLTextAreaElement>) => void;\n }\n> = ({\n lightBg,\n label,\n errorMessage,\n infoMessage,\n placeholder,\n value,\n name,\n isInverted,\n isDisabled,\n isRequired,\n onChange,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <div>\n <FieldHead>\n {label && (\n <Copy\n isInverted={isInverted}\n textColor={\n isDisabled ? color(theme).mono.dark : undefined\n }\n >\n {`${label}${isRequired ? ' *' : ''}`}\n </Copy>\n )}\n </FieldHead>\n <Copy type=\"copy-b\">\n <Area\n value={value}\n name={name}\n placeholder={placeholder}\n hasError={!!errorMessage}\n isDisabled={isDisabled}\n isInverted={isInverted}\n required={isRequired}\n hasBack={!lightBg}\n onChange={onChange}\n />\n </Copy>\n {infoMessage && (\n <InfoMessage textColor={color(theme).mono.dark} size=\"small\">\n {infoMessage}\n </InfoMessage>\n )}\n {errorMessage && (\n <ErrorMessage textColor=\"#ff0000\" size=\"small\" type=\"copy-i\">\n {errorMessage\n ? errorMessage\n : 'Bitte geben Sie einen gültigen Text ein'}\n </ErrorMessage>\n )}\n </div>\n );\n};\n\nexport default Textarea;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Check: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"12\"\n height=\"9\"\n viewBox=\"0 0 12 9\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M10.833 1.162A.512.512 0 0010.444 1a.512.512 0 00-.388.162L4.333 6.708 1.944 4.392a.512.512 0 00-.388-.161.512.512 0 00-.39.161A.482.482 0 001 4.77c0 .162.056.27.167.377l2.777 2.692c.056.054.112.108.167.108.056.054.167.054.222.054.111 0 .167 0 .223-.054.055 0 .11-.054.166-.108l6.111-5.923A.482.482 0 0011 1.538a.482.482 0 00-.167-.376z\"\n fill=\"#fff\"\n stroke=\"#fff\"\n />\n </SVG>\n);\n\nexport default Check;\n","import Check from 'components/base/icons/Check';\nimport Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors, spacings } from 'utils/styles';\n\nconst View = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n\n & > * + * {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Label = styled(Copy)`\n display: flex;\n\n & > * {\n margin: 0;\n }\n`;\n\nconst CheckboxContainer = styled.div<{ isDisabled?: boolean }>`\n cursor: ${({ isDisabled }) => (isDisabled ? 'default' : 'pointer')};\n pointer-events: ${({ isDisabled }) => (isDisabled ? 'none' : 'all')};\n`;\n\nconst Original = styled.input`\n position: absolute;\n left: -9999px;\n opacity: 0;\n`;\n\nconst Box = styled.span<{ isSelected?: boolean; isInverted?: boolean }>`\n width: 20px;\n min-width: 20px;\n height: 20px;\n display: block;\n position: relative;\n\n border: 2px solid\n ${({ isInverted, theme }) =>\n isInverted ? '#fff' : getColors(theme).mono.medium};\n\n background-color: ${({ isSelected, theme }) =>\n isSelected ? getColors(theme).primary.medium : '#fff'};\n`;\n\nconst StyledCheck = styled(Check)`\n width: 80%;\n height: 80%;\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n`;\n\nconst Checkbox: React.FC<{\n label?: string;\n\n onChange?: (e: React.SyntheticEvent<HTMLInputElement>) => void;\n onClick?: () => void;\n\n name?: string;\n value?: string;\n\n isDisabled?: boolean;\n isSelected?: boolean;\n isInverted?: boolean;\n isRequired?: boolean;\n}> = ({\n label,\n isDisabled,\n isSelected,\n isInverted,\n onChange,\n onClick,\n name,\n value,\n isRequired,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <View>\n <CheckboxContainer isDisabled={isDisabled} onClick={onClick}>\n <Box isSelected={isSelected} isInverted={isInverted}>\n {isSelected && <StyledCheck />}\n </Box>\n <Original\n type=\"checkbox\"\n name={name}\n value={value}\n disabled\n checked={isSelected}\n required={isRequired}\n onChange={onChange}\n />\n </CheckboxContainer>\n {label && (\n <Label\n size=\"small\"\n type=\"copy-b\"\n isInverted={isInverted}\n textColor={\n isDisabled ? getColors(theme).mono.dark : undefined\n }\n innerHTML={`${label}${isRequired ? '<span> *</span>' : ''}`}\n />\n )}\n </View>\n );\n};\n\nexport default Checkbox;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { spacings, mq, getColors as color } from 'utils/styles';\nimport Textfield, { FormProps } from 'components/fields/Textfield';\nimport Textarea from 'components/fields/Textarea';\nimport Checkbox from 'components/fields/Checkbox';\nimport Wrapper from 'components/base/Wrapper';\nimport { Field, Formik } from 'formik';\nimport { FormEvent } from 'react';\nimport Actions from 'components/blocks/Actions';\n\nconst FieldsContainer = styled.div`\n padding-bottom: 30px;\n max-width: 1150px;\n\n & > * > * + * {\n padding-top: 30px;\n }\n\n @media ${mq.medium} {\n display: flex;\n flex-direction: row;\n align-items: top;\n }\n`;\n\nconst FlexContainer = styled.div`\n flex: 0 1 50%;\n width: 100%;\n max-width: 650px;\n\n & + & {\n padding-top: 30px;\n }\n\n @media ${mq.medium} {\n & + & {\n padding-top: 0;\n margin-left: 30px;\n }\n }\n`;\n\nconst ActionWrapper = styled(Actions)`\n margin-top: ${spacings.spacer * 3}px;\n`;\n\nexport interface FormData {\n name?: string;\n surname?: string;\n mail?: string;\n phone?: string;\n area?: string;\n check?: boolean;\n}\n\nexport type FormFieldProps = Omit<FormProps, 'value' | 'name' | 'errorMessage'>;\nexport type FormDataErrors = { [key in keyof FormData]: string };\n\nconst Form: React.FC<{\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n submitAction?: (props: {\n isInverted?: boolean;\n additionalProps: { type: 'submit'; as: 'button' | 'a' };\n isDisabled?: boolean;\n }) => React.ReactNode;\n onSubmit?: (data: FormData) => void;\n validation?: (values: FormData, errors: FormDataErrors) => FormDataErrors;\n yupValidationSchema?: any;\n\n bgMode?: 'full' | 'inverted';\n\n formFields: {\n name?: FormFieldProps;\n surname?: FormFieldProps;\n mail?: FormFieldProps;\n phone?: FormFieldProps;\n area?: FormFieldProps;\n };\n\n checkbox?: {\n label?: string;\n name?: string;\n value?: string;\n isDisabled?: boolean;\n };\n}> = ({\n submitAction,\n onSubmit,\n formFields,\n checkbox,\n yupValidationSchema,\n validation,\n bgMode,\n}) => {\n const theme = React.useContext(ThemeContext);\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const isEmpty = (obj: any) => {\n return (\n obj && Object.keys(obj).length === 0 && obj.constructor === Object\n );\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <Formik\n initialValues={\n {\n name: '',\n surname: '',\n phone: '',\n area: '',\n mail: '',\n check: false,\n } as FormData\n }\n validate={(values) => {\n let errors: FormDataErrors = {};\n if (validation)\n errors = validation(\n values,\n errors\n ) as FormDataErrors;\n return errors;\n }}\n validationSchema={yupValidationSchema}\n onSubmit={async (values) => {\n onSubmit && onSubmit(values);\n }}\n >\n {({\n handleSubmit,\n setFieldValue,\n values,\n errors,\n isValid,\n dirty,\n }) => (\n <form\n onSubmit={(e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n handleSubmit(e);\n }}\n >\n <FieldsContainer>\n <FlexContainer>\n {formFields.name && (\n <Field\n label={\n formFields.name?.label ||\n 'Vorname'\n }\n placeholder={\n formFields.name?.placeholder\n }\n infoMessage={\n formFields.name?.infoMessage\n }\n as={Textfield}\n name=\"name\"\n isRequired={\n formFields.name?.isRequired\n }\n errorMessage={errors.name}\n isInverted={isInverted}\n lightBg={hasBg}\n />\n )}\n {formFields.surname && (\n <Field\n label={\n formFields.surname?.label ||\n 'Nachname'\n }\n placeholder={\n formFields.surname?.placeholder\n }\n infoMessage={\n formFields.surname?.infoMessage\n }\n as={Textfield}\n name=\"surname\"\n isRequired={\n formFields.surname?.isRequired\n }\n errorMessage={errors.surname}\n isInverted={isInverted}\n lightBg={hasBg}\n />\n )}\n {formFields.mail && (\n <Field\n type=\"email\"\n label={\n formFields.mail?.label ||\n 'E-Mail'\n }\n placeholder={\n formFields.mail?.placeholder\n }\n infoMessage={\n formFields.mail?.infoMessage\n }\n as={Textfield}\n name=\"mail\"\n isRequired={\n formFields.mail?.isRequired\n }\n errorMessage={errors.mail}\n isInverted={isInverted}\n lightBg={hasBg}\n />\n )}\n {formFields.phone && (\n <Field\n type=\"tel\"\n label={\n formFields.phone?.label ||\n 'Telefon'\n }\n placeholder={\n formFields.phone?.placeholder\n }\n infoMessage={\n formFields.phone?.infoMessage\n }\n as={Textfield}\n name=\"phone\"\n isRequired={\n formFields.phone?.isRequired\n }\n errorMessage={errors.phone}\n isInverted={isInverted}\n lightBg={hasBg}\n />\n )}\n </FlexContainer>\n {formFields.area && (\n <FlexContainer>\n <Field\n label={\n formFields.area?.label ||\n 'Textfeld'\n }\n placeholder={\n formFields.area?.placeholder\n }\n infoMessage={\n formFields.area?.infoMessage\n }\n name=\"area\"\n as={Textarea}\n isRequired={\n formFields.area?.isRequired\n }\n errorMessage={errors.area}\n isInverted={isInverted}\n lightBg={hasBg}\n />\n </FlexContainer>\n )}\n </FieldsContainer>\n {checkbox && (\n <Field\n onClick={() => {\n setFieldValue('check', !values.check);\n }}\n value={values.check}\n isSelected={values.check}\n isDisabled={checkbox.isDisabled}\n name=\"check\"\n as={Checkbox}\n label={\n checkbox.label ||\n 'Ich habe die Datenschutzbestimmungen zu Kenntnis genommen und aktzeptiere.'\n }\n isInverted={isInverted}\n isRequired\n />\n )}\n {submitAction && (\n <ActionWrapper\n primary={\n submitAction &&\n submitAction({\n isInverted,\n isDisabled:\n !dirty ||\n !isValid ||\n !isEmpty(errors),\n additionalProps: {\n type: 'submit',\n as: 'button',\n },\n })\n }\n />\n )}\n </form>\n )}\n </Formik>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Form;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Plus: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path d=\"M14 8H8v6H6V8H0V6h6V0h2v6h6v2z\" fill={iconColor} />\n </SVG>\n);\n\nexport default Plus;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Minus: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"14\"\n height=\"2\"\n viewBox=\"0 0 14 2\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path d=\"M14 2H0V0h14v2z\" fill={iconColor} />\n </SVG>\n);\n\nexport default Minus;\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 * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { spacings, getColors as color } from 'utils/styles';\nimport Minus from 'components/base/icons/Minus';\n\nconst AccordionBlock = styled.ul<{\n isInverted?: boolean;\n hasBg?: boolean;\n borderColor?: string;\n}>`\n margin: 0;\n padding: 0;\n list-style: none;\n\n background: ${({ isInverted, hasBg, theme }) =>\n isInverted || hasBg ? color(theme).light : color(theme).mono.light};\n\n border-bottom: 10px solid\n ${({ borderColor, isInverted, theme, hasBg }) =>\n borderColor\n ? borderColor\n : isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : color(theme).light};\n\n &:last-child {\n border-bottom: none;\n }\n`;\n\nconst AccordionItems = styled.li`\n cursor: pointer;\n`;\n\nconst AccordionHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n\n padding: ${spacings.spacer}px;\n`;\n\nconst IconContainer = styled.div`\n will-change: transform;\n transition: all ease-in-out 0.2s;\n\n ${AccordionHead}:hover & {\n transform: scale(1.2);\n }\n`;\n\nconst AccordionText = styled(Copy)<{\n isVisible?: boolean;\n inverted?: boolean;\n hasBg?: boolean;\n borderColor?: string;\n}>`\n display: ${({ isVisible }) => (isVisible ? 'block' : 'none')};\n\n border-top: 2px solid\n ${({ borderColor, inverted, theme, hasBg }) =>\n borderColor\n ? borderColor\n : inverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : color(theme).light};\n\n padding: ${spacings.spacer}px;\n`;\n\nconst Accordion: React.FC<{\n items: { label?: string; text?: string; hasColumns?: boolean }[];\n borderColor?: string;\n\n bgMode?: 'full' | 'inverted';\n}> = ({ items, borderColor, bgMode }) => {\n const [currentItems, setCurrentItems] = React.useState<number[]>([]);\n\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {items &&\n items.map(({ label, text, hasColumns }, i) => {\n const isSelected = currentItems.indexOf(i) !== -1;\n return (\n <AccordionBlock\n key={i}\n borderColor={borderColor}\n isInverted={isInverted}\n hasBg={hasBg}\n >\n <AccordionItems>\n <AccordionHead\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 >\n <Copy size=\"big\" type=\"copy-b\">\n {label}\n </Copy>\n <IconContainer>\n {isSelected ? (\n <Minus\n iconColor={\n color(theme).dark\n }\n />\n ) : (\n <Plus\n iconColor={\n color(theme).dark\n }\n />\n )}\n </IconContainer>\n </AccordionHead>\n <AccordionText\n borderColor={borderColor}\n inverted={isInverted}\n hasBg={hasBg}\n isVisible={isSelected}\n type=\"copy\"\n innerHTML={text}\n columns={hasColumns}\n />\n </AccordionItems>\n </AccordionBlock>\n );\n })}\n </Wrapper>\n </Section>\n );\n};\n\nexport default Accordion;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowLeftRight: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"36\"\n height=\"17\"\n viewBox=\"0 0 36 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.06818 7.42108H32.7534l-6.3638-5.86523c-.3753-.34588-.3753-.71337 0-1.10248.1641-.17293.3635-.2594.598-.2594.2346 0 .4457.08647.6333.2594l7.8808 7.29576c.1642.12971.2463.31345.2463.55124 0 .21617-.0821.39991-.2463.55123l-7.8808 7.2309c-.1642.1729-.3694.2594-.6157.2594-.2462 0-.4515-.0864-.6156-.2594-.3753-.3459-.3753-.7133 0-1.1025l6.3663-5.86748H3.0657L9.43204 14.98c.37527.3459.37527.7134 0 1.1025-.16419.1729-.36355.2594-.5981.2594-.23455 0-.44564-.0865-.63328-.2594L.31986 8.78675c-.1642-.1297-.24628-.31344-.24628-.55123 0-.21617.08209-.39992.24627-.55124L8.20066.45338c.16419-.17294.36942-.25941.61569-.25941.24628 0 .4515.08647.61569.2594.37528.34588.37528.71337 0 1.10248L3.06818 7.42108z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default ArrowLeftRight;\n","import React, { FC, useContext, useEffect, useRef, useState } from 'react';\nimport styled, { css, ThemeContext } 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';\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 & > * {\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\n transition: width ${({ hasTransition }) => (hasTransition ? 0.1 : 0)}s\n ease-in-out;\n\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\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\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 * 1.5}px;\n padding: ${spacings.nudge}px ${spacings.spacer}px ${spacings.nudge * 2}px\n ${spacings.spacer}px;\n background: ${({ bgColor }) => bgColor && bgColor};\n`;\n\nconst ForegroundLabel = styled(ImageLabel)`\n position: absolute;\n bottom: ${spacings.spacer * 1.5}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 * 1.5}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\n transition: left ${({ hasTransition }) => (hasTransition ? 0.1 : 0)}s\n ease-in-out;\n\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\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).light};\n border-radius: 50%;\n background-color: ${({ theme }) => color(theme).primary.medium};\n`;\n\nconst ComparisonSlider: FC<{\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 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 theme = useContext(ThemeContext);\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 bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\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={color(theme).light}\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={color(theme).light}\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={color(theme).light}\n />\n </Control>\n )}\n </ControlContainer>\n </Images>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default ComparisonSlider;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings, getColors as color, withRange } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport ArrowLeftGhost from 'components/base/icons/ArrowLeftGhost';\nimport ArrowRightGhost from 'components/base/icons/ArrowRightGhost';\nimport Slider from 'components/blocks/Slider';\nimport { ResponsiveObject } from 'react-slick';\n// import IntroBlock from 'components/blocks/IntroBlock';\n// import { HeadlineTag } from 'components/typography/Heading';\n\nconst View = styled(Wrapper)`\n position: relative;\n width: 100%;\n overflow: hidden;\n\n @media ${mq.xlarge} {\n padding: 0;\n }\n`;\n\nconst Head = styled(Wrapper)`\n display: flex;\n flex-direction: row;\n`;\n\n// const IntroContainer = styled.div`\n// flex: 1;\n// ${withRange([spacings.spacer * 2, spacings.spacer * 3], 'padding-bottom')}\n// `;\n\nconst TopControls = styled.div`\n display: none;\n text-align: right;\n max-width: ${spacings.wrapper}px;\n margin-left: auto;\n ${withRange(\n [spacings.spacer * 0.5, spacings.spacer * 1.5],\n 'margin-bottom'\n )};\n\n @media ${mq.semilarge} {\n display: flex;\n flex-direction: row;\n align-self: flex-end;\n }\n`;\n\nconst StyledControl = styled(Slider.Control)<{ isInverted?: boolean }>`\n border: none;\n outline: none;\n background: none;\n padding: 0 ${spacings.nudge * 3}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n transition: color 0.2s ease-in-out, transform 0.2s ease-in-out;\n\n &:enabled {\n cursor: pointer;\n }\n\n &:enabled:hover {\n transform: scale(1.05);\n }\n\n &:enabled:active {\n transform: scale(0.95);\n }\n\n &:disabled {\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).mono.dark : color(theme).mono.medium};\n }\n`;\n\nconst StyledSlides = styled(Slider.Slides)`\n margin-bottom: ${spacings.spacer}px;\n\n @media ${mq.xlarge} {\n margin-left: auto;\n width: 100%;\n max-width: ${spacings.wrapperLarge -\n (spacings.wrapperLarge - spacings.wrapper) / 2}px;\n }\n`;\n\nconst Footer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n`;\n\nconst CtrlWrapper = styled.div`\n display: block;\n\n @media ${mq.semilarge} {\n display: none;\n }\n`;\n\nconst CtrlWrapperLeft = styled(CtrlWrapper)`\n flex: 1;\n text-align: left;\n`;\n\nconst CtrlWrapperRight = styled(CtrlWrapper)`\n flex: 1;\n text-align: right;\n`;\n\nconst StyledDotGroup = styled(Slider.DotGroup)`\n display: inline-block;\n align-self: center;\n padding: ${spacings.nudge * 2}px 0;\n`;\n\nconst DotWrapper = styled.button`\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n\n padding: ${spacings.nudge * 2}px;\n margin: -${spacings.nudge * 2}px;\n\n & + & {\n margin-left: ${spacings.nudge * 1.5}px;\n }\n`;\n\nconst Dot = styled.div<{ isActive?: boolean; isInverted?: boolean }>`\n height: 14px;\n width: 14px;\n border: solid 1px\n ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 14px;\n\n transition: background-color 0.2s ease-in-out;\n\n background-color: ${({ isActive, isInverted, theme }) =>\n isActive\n ? isInverted\n ? color(theme).light\n : color(theme).dark\n : 'transparent'};\n`;\n\nexport interface CarouselProps {\n spacing?: 'normal' | 'large';\n variableWidths?: boolean;\n isInverted?: boolean;\n controlNext?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n controlPrev?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n dot?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n index?: number;\n }) => React.ReactNode;\n beforeChange?: (props: { currentStep: number; nextStep: number }) => void;\n afterChange?: (currentStep: number) => void;\n onInit?: (steps: number) => void;\n responsive?: ResponsiveObject[];\n slidesToShow?: number;\n}\n\nconst CarouselBase: FC<CarouselProps & { className?: string }> = ({\n spacing,\n variableWidths,\n isInverted,\n controlNext,\n controlPrev,\n dot,\n beforeChange,\n afterChange,\n onInit,\n slidesToShow,\n responsive,\n children,\n className,\n}) => {\n return (\n <View clampWidth=\"large\" className={className}>\n <Slider.Provider\n variableWidth={variableWidths}\n sameHeight={variableWidths}\n slideSpacing={\n spacing === 'large'\n ? { min: 30, max: 60 }\n : { min: 20, max: 30 }\n }\n slidesToShow={slidesToShow}\n responsive={responsive}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n >\n <Head clampWidth=\"normal\" addWhitespace>\n {React.Children.count(children) > 1 && (\n <TopControls>\n <StyledControl type=\"prev\" isInverted={isInverted}>\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name: 'control_prev_head',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n <StyledControl type=\"next\" isInverted={isInverted}>\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name: 'control_next_head',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n </TopControls>\n )}\n </Head>\n\n <StyledSlides>\n {React.Children.map(children, (child, i) => (\n <Slider.Slide key={i}>{child}</Slider.Slide>\n ))}\n </StyledSlides>\n {React.Children.count(children) > 1 && (\n <Footer>\n <CtrlWrapperLeft>\n <StyledControl type=\"prev\" isInverted={isInverted}>\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name: 'control_prev_footer',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n </CtrlWrapperLeft>\n <StyledDotGroup>\n {(i, isActive, onClick) => (\n <DotWrapper key={i} onClick={onClick}>\n {dot ? (\n dot({ isInverted, isActive, index: i })\n ) : (\n <Dot\n isActive={isActive}\n isInverted={isInverted}\n />\n )}\n </DotWrapper>\n )}\n </StyledDotGroup>\n <CtrlWrapperRight>\n <StyledControl type=\"next\" isInverted={isInverted}>\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name: 'control_next_footer',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n </CtrlWrapperRight>\n </Footer>\n )}\n </Slider.Provider>\n </View>\n );\n};\n\nexport default CarouselBase;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, getGlobalSettings as global } from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\n\nconst ImageCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'isInverted'> & {\n bgMode?: 'full' | 'splitted' | 'inverted';\n images?: ImageProps[];\n }\n> = ({\n bgMode,\n spacing = 'normal',\n images,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const imageCount = images?.length || 0;\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <CarouselBase\n variableWidths\n spacing={spacing}\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={imageCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 832,\n settings: {\n slidesToShow: imageCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: imageCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {images &&\n images.map((img, i) => <FullWidthImg key={i} {...img} />)}\n </CarouselBase>\n </Section>\n );\n};\n\nconst FullWidthImg = styled(Image)`\n width: 100%;\n overflow: hidden;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n`;\n\nexport default ImageCarousel;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings, mq } from 'utils/styles';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport Feature, { FeatureProps } from 'components/blocks/Feature';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\n\nconst StyledWrapper = styled.div`\n padding-left: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n padding-left: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n padding-left: ${(1 / 28) * 100}%;\n\n padding-left: ${`\n max(\n ${spacings.spacer}px,\n ${(1 / 28) * 100}%\n );\n `};\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst FeatureCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing' | 'isInverted'> & {\n bgMode?: 'full' | 'splitted' | 'inverted';\n features?: FeatureProps[];\n }\n> = ({\n bgMode,\n features,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const featureCount = features?.length || 0;\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\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: featureCount,\n medium: featureCount,\n semilarge: featureCount,\n large: featureCount,\n xlarge: featureCount,\n },\n });\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <StyledWrapper>\n <CarouselBase\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={featureCount > 1 ? 3 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: featureCount > 1 ? 3 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: featureCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: featureCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {features &&\n features.map((feature, i) => (\n <div key={i} ref={cardRefs[i]}>\n <Feature\n key={i}\n addWhitespace\n isInverted={isInverted}\n {...feature}\n />\n </div>\n ))}\n </CarouselBase>\n </StyledWrapper>\n </Section>\n );\n};\n\nexport default FeatureCarousel;\n","/* eslint-disable react/jsx-no-target-blank */\nimport React, { FC } from 'react';\n\nexport interface LinkProps {\n isExternal?: boolean;\n href?: string;\n}\n\nconst Link: FC<\n LinkProps & {\n className?: string;\n }\n> = ({ isExternal = false, href, children, className }) => {\n return (\n <a\n href={href}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n className={className}\n >\n {children}\n </a>\n );\n};\n\nexport default Link;\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport Link from 'components/typography/Link';\n\nconst bdotColor = '#1fc2f4';\n\nconst Dot = styled(Link)`\n width: 11px;\n height: 11px;\n\n display: inline-block;\n vertical-align: middle;\n border-radius: 50%;\n\n background: ${bdotColor};\n color: ${bdotColor};\n text-decoration: none;\n\n span {\n visibility: hidden;\n font-size: 0;\n color: transparent;\n }\n`;\n\nconst Bdot: React.FC<{ className?: string }> = ({ className }) => {\n return (\n <Dot className={className} href=\"https://blateral.com\" isExternal>\n <span>b.lateral - creative agency</span>\n </Dot>\n );\n};\n\nexport default Bdot;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings } from 'utils/styles';\nimport Link from 'components/typography/Link';\n\nconst View = styled.div`\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n // padding: ${spacings.nudge * 2}px 0;\n // overflow: hidden;\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n`;\n\nconst IconItemView = styled.div`\n transition: all ease-in-out 0.2s;\n\n &:hover {\n transform: scale(1.1);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst StyledLink = styled(Link)<{ textColor?: string }>`\n display: block;\n padding: ${spacings.nudge * 2}px ${spacings.nudge * 1.5}px;\n margin: -${spacings.nudge * 2}px -${spacings.nudge * 1.5}px;\n color: ${({ theme, textColor }) => textColor || color(theme).dark};\n`;\n\nconst SocialList: FC<{\n isInverted?: boolean;\n items?: { href: string; icon: React.ReactNode }[];\n className?: string;\n}> = ({ isInverted = false, items, className }) => {\n const theme = React.useContext(ThemeContext);\n\n return (\n <View className={className}>\n {items &&\n items.map((item, i) => (\n <IconItemView key={i}>\n <StyledLink\n isExternal\n href={item.href}\n textColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {item.icon}\n </StyledLink>\n </IconItemView>\n ))}\n </View>\n );\n};\n\nexport default SocialList;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport Bdot from 'components/blocks/Bdot';\nimport SocialList from 'components/blocks/SocialList';\n\nconst MainView = styled(Wrapper)<{ isInverted?: boolean }>`\n background-color: ${({ theme, isInverted }) =>\n isInverted && color(theme).dark};\n`;\n\nconst StyledLink = styled(Link)`\n display: inline-block;\n padding: ${spacings.nudge * 0.5}px 0;\n color: inherit;\n text-decoration: underline;\n`;\n\n/**** MAIN FOOTER CONTENT ****/\nconst Content = styled.div<{ isInverted?: boolean }>`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n margin-left: -${spacings.spacer}px;\n margin-right: -${spacings.spacer}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n\n & > * {\n flex: 1;\n }\n\n & > *:last-child {\n flex: 1 1 100%;\n }\n\n @media ${mq.medium} {\n flex-direction: row;\n flex-wrap: wrap;\n padding-top: ${spacings.spacer}px;\n padding-bottom: ${spacings.spacer}px;\n\n & > *:last-child {\n max-width: 600px;\n }\n }\n\n @media ${mq.large} {\n & > *:last-child {\n flex: 1;\n max-width: 100%;\n }\n }\n`;\n\nconst ContentBlock = styled.div<{\n direction?: 'row' | 'column';\n topSpace?: string;\n hAlign?: 'left' | 'center' | 'right';\n}>`\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n\n padding: ${spacings.spacer}px;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n flex-direction: ${({ direction }) => direction || 'column'};\n align-items: flex-start;\n padding-top: ${({ topSpace }) => topSpace && topSpace};\n text-align: left;\n min-width: 330px;\n }\n\n @media ${mq.large} {\n align-items: ${({ hAlign }) =>\n hAlign === 'right'\n ? 'flex-end'\n : hAlign === 'center'\n ? 'center'\n : 'flex-start'};\n text-align: ${({ hAlign }) => hAlign && hAlign};\n }\n`;\n\nconst LogoLink = styled(Link)`\n display: inline-block;\n color: inherit;\n`;\n\nconst ContactData = styled(Copy)`\n text-align: center;\n\n p {\n margin: 0;\n padding: 0;\n }\n\n @media ${mq.medium} {\n text-align: left;\n margin-top: auto;\n padding: ${spacings.nudge * 2}px 0;\n }\n`;\n\nconst SiteLinksView = styled.div`\n flex: 50%;\n display: flex;\n flex-direction: column;\n text-align: center;\n\n margin: 0;\n\n & + & {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n\n @media ${mq.medium} {\n padding: 0 ${spacings.nudge * 3}px;\n text-align: left;\n\n & + & {\n padding-top: 0;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst SiteLink = styled(StyledLink)`\n font-weight: ${({ theme }) => font(theme)['copy-b'].medium.weight};\n font-family: ${({ theme }) => font(theme)['copy-b'].medium.family};\n ${({ theme }) => withRange(font(theme)['copy-b'].medium.size, 'font-size')}\n line-height: ${({ theme }) => font(theme)['copy-b'].medium.lineHeight};\n`;\n\nconst LinkWrapper = styled(Copy)<{ isActive?: boolean; isInverted?: boolean }>`\n display: inline-block;\n position: relative;\n padding-bottom: 3px;\n\n &:before {\n content: ${({ isActive }) => (isActive ? `\"\"` : undefined)};\n position: absolute;\n left: -12px;\n top: 50%;\n height: 4px;\n width: 4px;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 4px;\n\n transform: translateY(-100%);\n }\n\n &:after {\n content: '';\n position: absolute;\n left: 0;\n bottom: 0;\n right: 0;\n height: 1px;\n background-color: ${({ theme }) => color(theme).primary.medium};\n margin-top: ${spacings.nudge * 10}px;\n opacity: 0;\n\n transition: opacity 0.2s ease-in-out;\n\n ${SiteLink}:hover > & {\n opacity: 1;\n }\n }\n`;\n\n/**** BOTTOM FOOTER CONTENT ****/\nconst BottomWrapper = styled(Wrapper)`\n background-color: ${({ theme }) => color(theme).mono.light};\n`;\n\nconst BottomView = styled(Wrapper)`\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 100%;\n min-height: 41px;\n\n padding-top: ${spacings.nudge * 1.5}px;\n padding-bottom: ${spacings.nudge * 1.5}px;\n\n color: ${({ theme }) => color(theme).dark};\n\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n justify-content: flex-end;\n }\n`;\n\n/**** FOOTER SECTION ****/\nconst Footer: FC<{\n isInverted?: boolean;\n logo?: {\n img?: string;\n link?: string;\n };\n columnTopSpace?: string;\n contactData?: string;\n siteLinks?: Array<LinkProps & { label?: string; isActive?: boolean }>;\n newsTitle?: string;\n newsText?: string;\n newsForm?: (isInverted?: boolean) => React.ReactNode;\n socials?: Array<{ icon: React.ReactNode; href: string }>;\n bottomLinks?: { href: string; label?: string; isExternal?: boolean }[];\n brandIcon?: React.ReactNode;\n}> = ({\n isInverted = false,\n logo,\n columnTopSpace,\n contactData,\n siteLinks,\n newsTitle,\n newsText,\n newsForm,\n socials,\n bottomLinks,\n brandIcon,\n}) => {\n // setup siteLinks columns\n const siteLinksColLeft =\n siteLinks && siteLinks.length > 6\n ? siteLinks?.slice(0, Math.ceil(siteLinks.length / 2))\n : siteLinks;\n const siteLinksColRight =\n siteLinks && siteLinks.length > 6\n ? siteLinks?.slice(Math.ceil(siteLinks.length / 2))\n : undefined;\n\n return (\n <Section renderAs=\"footer\" bgMode=\"full\" bgColor=\"transparent\">\n <MainView clampWidth=\"large\" isInverted={isInverted}>\n <Wrapper addWhitespace>\n <Content isInverted={isInverted}>\n <ContentBlock>\n {logo?.img && (\n <LogoLink href={logo?.link}>\n <img src={logo?.img} />\n </LogoLink>\n )}\n {contactData && (\n <ContactData\n size=\"small\"\n isInverted={isInverted}\n innerHTML={contactData}\n />\n )}\n </ContentBlock>\n <ContentBlock\n direction=\"row\"\n topSpace={logo && columnTopSpace}\n >\n {siteLinksColLeft && (\n <SiteLinksView>\n {siteLinksColLeft.map((link, i) => (\n <SiteLink key={i} href={link.href}>\n <LinkWrapper\n type=\"copy\"\n isActive={link.isActive}\n isInverted={isInverted}\n >\n {link.label || link.href}\n </LinkWrapper>\n </SiteLink>\n ))}\n </SiteLinksView>\n )}\n {siteLinksColRight && (\n <SiteLinksView>\n {siteLinksColRight.map((link, i) => (\n <SiteLink key={i} href={link.href}>\n <LinkWrapper\n type=\"copy\"\n isActive={link.isActive}\n isInverted={isInverted}\n >\n {link.label || link.href}\n </LinkWrapper>\n </SiteLink>\n ))}\n </SiteLinksView>\n )}\n </ContentBlock>\n <ContentBlock\n topSpace={logo && columnTopSpace}\n hAlign={\n !newsTitle && !newsText && !newsForm\n ? 'right'\n : 'left'\n }\n >\n {newsTitle && (\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {newsTitle}\n </Copy>\n )}\n {newsText && (\n <Copy\n size=\"small\"\n isInverted={isInverted}\n innerHTML={newsText}\n />\n )}\n {newsForm && newsForm(isInverted)}\n {socials && (\n <SocialList\n isInverted={isInverted}\n items={socials.map((item) => {\n return {\n href: item.href,\n icon: item.icon,\n };\n })}\n />\n )}\n </ContentBlock>\n </Content>\n </Wrapper>\n </MainView>\n\n {bottomLinks && (\n <BottomWrapper clampWidth=\"large\">\n <BottomView addWhitespace>\n {bottomLinks.map((link, i) => {\n if (link.href) {\n return (\n <StyledLink\n key={i}\n isExternal={link.isExternal}\n href={link.href}\n >\n <Copy size=\"small\">\n {link.label || link.href}\n </Copy>\n </StyledLink>\n );\n } else return null;\n })}\n {brandIcon ? brandIcon : <Bdot />}\n </BottomView>\n </BottomWrapper>\n )}\n </Section>\n );\n};\n\nexport default Footer;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { getBgImage } from 'utils/backgroundImage';\nimport { canUseWebP } from 'utils/usePoster';\nimport { FC, useEffect, useRef, useState } from 'react';\n\nexport interface HeaderKenBurnsImageProps {\n small: string;\n medium: string;\n large: string;\n xlarge: string;\n webp?: {\n small: string;\n medium: string;\n large: string;\n xlarge: string;\n };\n}\n\nconst AnimationContainer = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n overflow: hidden;\n`;\n\nconst PosterImage = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n`;\n\nconst AnimationImage = styled.img<{ scale?: number; opacity?: number }>`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n\n object-fit: cover;\n object-position: center;\n\n transition-property: opacity, transform;\n transition-duration: ${({ scale }) => `2s, ${scale === 1 ? '0s' : '13s'}`};\n transition-delay: ${({ scale }) =>\n `${scale === 1 ? '1s' : '0s'}, ${scale === 1 ? '3s' : '0s'}`};\n\n opacity: ${({ opacity }) => opacity && opacity};\n transform: scale(${({ scale }) => scale || 1})\n rotate(${({ scale }) => (scale !== 1 ? 0.04 : 0)}deg);\n\n will-change: transform, opacity;\n`;\n\nconst AnimationImages: FC<{\n zoom?: number;\n images: { id: number | string; image: string }[];\n onChange?: (imgId: number) => void;\n}> = ({ zoom = 1.08, images, onChange }) => {\n const intervalRef = useRef<number | null>();\n const [activeImg, setActiveImg] = useState<number>(-1);\n\n useEffect(() => {\n const changeImage = () => {\n setActiveImg((prev) => {\n return (prev + 1) % images.length;\n });\n };\n\n // changeImage();\n window.setTimeout(changeImage, 200);\n if (intervalRef.current) window.clearInterval(intervalRef.current);\n intervalRef.current = window.setInterval(changeImage, 10000);\n\n return () => {\n if (intervalRef.current) window.clearInterval(intervalRef.current);\n };\n }, [images]);\n\n useEffect(() => {\n if (activeImg !== -1) onChange && onChange(activeImg);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeImg]);\n\n return (\n <>\n {images.map((img, i) => (\n <AnimationImage\n key={i}\n style={{\n // backgroundImage: `url(${img.image})`,\n zIndex: i === activeImg ? 1 : 0,\n }}\n src={img.image}\n scale={i === activeImg ? zoom : 1}\n opacity={i === activeImg ? 1 : 0}\n alt=\"\"\n />\n ))}\n </>\n );\n};\n\nconst preloadImages = (imageUrls: string[]) => {\n const images = imageUrls.map((src, i) => {\n return new Promise((res) => {\n const img = new Image();\n img.src = src;\n img.onload = () => res({ url: src, i });\n });\n });\n\n return images;\n};\n\ntype KenBurnsMq = 'small' | 'medium' | 'large' | 'xlarge';\n\nconst HeaderKenBurns: React.FC<{\n images: HeaderKenBurnsImageProps[];\n onImageChange?: (currentImg: HeaderKenBurnsImageProps) => void;\n className?: string;\n}> = ({ images, onImageChange, className, children }) => {\n const mqs: KenBurnsMq[] = ['small', 'medium', 'large', 'xlarge'];\n const currentMq = useMediaQuery(mqs) as KenBurnsMq | undefined;\n\n const [loadedImages, setLoadedImages] = React.useState<{\n [key: string]: { id: number | string; image: string }[];\n }>({\n small: [],\n medium: [],\n large: [],\n xlarge: [],\n });\n\n React.useEffect(() => {\n if (currentMq) {\n const loadedForMq = loadedImages[currentMq];\n const useWebp = canUseWebP();\n\n if (loadedForMq.length < images.length && images.length >= 2) {\n const requestedImages = images.map((img) =>\n img.webp && useWebp ? img.webp[currentMq] : img[currentMq]\n );\n\n const resolve = async (items: any) => {\n for (const item of items) {\n const x = await item;\n\n setLoadedImages((prev) => {\n // check if image id already exists in array\n if (!prev[currentMq].find((e) => e.id === x.i)) {\n return {\n ...prev,\n [currentMq]: [\n ...prev[currentMq],\n {\n id: x.i,\n image: x.url,\n },\n ],\n };\n } else return prev;\n });\n }\n };\n\n resolve(preloadImages(requestedImages));\n }\n }\n }, [currentMq, images, loadedImages]);\n\n return (\n <AnimationContainer className={className}>\n {currentMq && loadedImages[currentMq].length >= images.length ? (\n <AnimationImages\n images={loadedImages[currentMq]}\n onChange={(id) =>\n images[id] && onImageChange && onImageChange(images[id])\n }\n />\n ) : (\n <PosterImage\n style={{\n backgroundImage: `url(${getBgImage(\n images[0],\n currentMq\n )})`,\n }}\n />\n )}\n {children}\n </AnimationContainer>\n );\n};\n\nexport default HeaderKenBurns;\n","import Image from 'components/blocks/Image';\nimport * as React from 'react';\nimport styled from 'styled-components';\n\ninterface HeaderPosterImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst PosterView = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n`;\n\nconst BackgroundImg = styled(Image)`\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n object-position: center;\n`;\n\nconst HeaderPoster: React.FC<{\n bgImage: HeaderPosterImageProps;\n className?: string;\n}> = ({ bgImage, className, children }) => {\n return (\n <PosterView className={className}>\n <BackgroundImg {...bgImage} alt=\"\" />\n {children}\n </PosterView>\n );\n};\n\nexport default HeaderPoster;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n FontOptionType,\n getFonts as font,\n mq,\n styleTextColor,\n withRange,\n} from 'utils/styles';\n\n// Styles\nconst BaseStyles = styled.h1<{\n size: FontOptionType;\n hyphens?: boolean;\n hasShadow?: boolean;\n textColor?: string;\n textGradient?: string;\n}>`\n margin: 0;\n padding: 0;\n ${({ textColor, textGradient }) => styleTextColor(textColor, textGradient)}\n\n hyphens: auto;\n /* -webkit-hyphens: auto; */\n /* overflow-wrap: break-word; */\n\n ${(props: { hyphens?: boolean }) =>\n !props.hyphens &&\n css`\n @media ${mq.large} {\n hyphens: none;\n }\n `}\n\n text-shadow: ${({ hasShadow }) =>\n hasShadow && '1px 2px 8px rgba(0, 0, 0, 0.25)'};\n`;\n\nconst View = styled(BaseStyles)`\n font-family: ${({ theme, size }) => font(theme).callout[size].family};\n font-weight: ${({ theme, size }) => font(theme).callout[size].weight};\n font-style: ${({ theme, size }) => font(theme).callout[size].style};\n ${({ theme, size }) =>\n withRange(font(theme).callout[size].size, 'font-size')}\n line-height: ${({ theme, size }) => font(theme).callout[size].lineHeight};\n letter-spacing: ${({ theme, size }) =>\n font(theme).callout[size].letterSpacing};\n text-transform: ${({ theme, size }) =>\n font(theme).callout[size].textTransform};\n`;\n\nexport type CalloutTag =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'span'\n | 'div';\n\nconst Callout: React.FC<{\n isInverted?: boolean;\n as?: CalloutTag;\n size?: FontOptionType;\n textColor?: string;\n textGradient?: string;\n hyphens?: boolean;\n hasShadow?: boolean;\n innerHTML?: string;\n\n className?: string;\n}> = ({\n isInverted,\n as = 'h2',\n className,\n size = 'medium',\n textColor,\n textGradient,\n hyphens = false,\n hasShadow = false,\n innerHTML,\n children,\n}) => {\n const theme = React.useContext(ThemeContext);\n const fontSettings = font(theme)?.callout?.[size];\n\n return (\n <View\n as={as}\n size={size}\n textColor={\n textColor ||\n (isInverted ? fontSettings.colorInverted : fontSettings.color)\n }\n textGradient={\n textGradient ||\n (!textColor\n ? isInverted\n ? fontSettings.colorGradientInverted\n : fontSettings.colorGradient\n : undefined)\n }\n hyphens={hyphens}\n hasShadow={hasShadow}\n dangerouslySetInnerHTML={\n innerHTML && !children ? { __html: innerHTML } : undefined\n }\n className={className}\n >\n {children}\n </View>\n );\n};\n\nexport default Callout;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { useState, useEffect } from 'react';\nimport Image from 'components/blocks/Image';\nimport { useMediaQuery } from 'utils/useMediaQuery';\n\ninterface HeaderVideoImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst PosterView = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n min-height: 200px;\n display: block;\n flex: 1 0 0px;\n }\n`;\n\nconst PlaceholderImg = styled(Image)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n z-index: 0;\n`;\n\nconst AutoplayVideo = styled.video<{ isVisible?: boolean }>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n object-position: center;\n opacity: ${({ isVisible }) => (isVisible ? 1 : 0)};\n pointer-events: none;\n z-index: 1;\n\n transition: opacity 0.3s ease-in-out;\n`;\n\ntype HeaderVideoMq = 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge';\n\nconst HeaderVideo: React.FC<{\n placeholderImg?: HeaderVideoImageProps;\n videoUrl?: string;\n className?: string;\n}> = ({ placeholderImg, videoUrl, className, children }) => {\n const [isLoaded, setLoaded] = useState<boolean>(false);\n const currentMq = useMediaQuery([\n 'small',\n 'medium',\n 'semilarge',\n 'large',\n 'xlarge',\n ]) as HeaderVideoMq | undefined;\n\n const isMobile = currentMq === undefined || currentMq === 'small';\n\n useEffect(() => {\n if (isMobile) setLoaded(false);\n }, [isMobile]);\n\n return (\n <PosterView className={className}>\n {placeholderImg?.small && !isLoaded && (\n <PlaceholderImg coverSpace {...placeholderImg} />\n )}\n {videoUrl && !isMobile && (\n <AutoplayVideo\n isVisible={isLoaded}\n src={videoUrl}\n muted\n autoPlay\n loop\n onCanPlayThrough={() => setLoaded(true)}\n />\n )}\n {children}\n </PosterView>\n );\n};\n\nexport default HeaderVideo;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { CalloutTag } from 'components/typography/Callout';\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Grid from 'components/base/Grid';\nimport Wrapper from 'components/base/Wrapper';\nimport HeaderKenBurns, { HeaderKenBurnsImageProps } from './HeaderKenBurns';\nimport HeaderPoster from './HeaderPoster';\nimport Actions from 'components/blocks/Actions';\nimport Callout from 'components/typography/Callout';\nimport HeaderVideo from './HeaderVideo';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\n\ninterface HeaderImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst View = styled.header`\n position: relative;\n`;\n\nconst HeaderWrapper = styled(Wrapper)`\n display: flex;\n flex-direction: column;\n height: 100%;\n`;\n\nconst PosterContent = styled.div`\n position: relative;\n display: none;\n width: 100%;\n margin: auto;\n z-index: 3;\n text-align: center;\n padding: 0 ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n display: block;\n max-width: none;\n margin-left: 0;\n text-align: left;\n padding-left: ${(1 / 28) * 100}%;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst PosterContentMobile = styled(PosterContent)`\n display: block;\n padding-top: ${spacings.spacer * 2}px;\n ${withRange([spacings.spacer * 2, spacings.spacer * 4], 'padding-bottom')}\n\n @media ${mq.semilarge} {\n display: none;\n }\n`;\n\nconst Badge = styled.div<{ showOnMobile?: boolean }>`\n display: ${({ showOnMobile }) => (showOnMobile ? 'block' : 'none')};\n position: relative;\n height: 234px;\n width: 234px;\n margin-left: auto;\n margin-right: ${spacings.spacer}px;\n margin-top: -173px;\n z-index: 3;\n\n @media ${mq.semilarge} {\n display: block;\n margin-right: ${spacings.spacer * 4}px;\n }\n\n @media ${mq.xlarge} {\n width: 392px;\n height: 392px;\n margin-left: 0;\n margin-top: -300px;\n\n right: -50%;\n transform: translate(\n ${spacings.wrapper / 2 - (392 + spacings.spacer * 3)}px\n );\n }\n`;\n\nconst Poster: FC<{\n videoUrl?: string;\n images?: HeaderImageProps[];\n className?: string;\n}> = ({ videoUrl, images, className, children }) => {\n if (!videoUrl) {\n if (!images || images.length === 0) return <div>{children}</div>;\n else if (images.length === 1)\n return (\n <HeaderPoster bgImage={images[0]} className={className}>\n {children}\n </HeaderPoster>\n );\n else\n return (\n <HeaderKenBurns\n images={images.map((img) => {\n return {\n ...img,\n } as HeaderKenBurnsImageProps;\n })}\n className={className}\n >\n {children}\n </HeaderKenBurns>\n );\n } else {\n return (\n <HeaderVideo\n videoUrl={videoUrl}\n placeholderImg={images?.[0]}\n className={className}\n >\n {children}\n </HeaderVideo>\n );\n }\n};\n\nconst StyledPoster = styled(Poster)<{ gradient?: string; size?: number }>`\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-end;\n height: ${({ size }) => (size ? size * 100 + 'vh' : '100vh')};\n max-height: 1100px;\n\n ${withRange([spacings.spacer * 7, spacings.spacer * 8], 'padding-top')};\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4.5],\n 'padding-bottom'\n )};\n\n &:after {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-image: ${({ gradient }) => gradient || undefined};\n pointer-events: none;\n z-index: 2;\n }\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n min-height: 1px; // before: 200px\n display: block;\n flex: 1 0 0px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')};\n\n @media ${mq.semilarge} {\n max-width: 600px;\n }\n`;\n\nconst IntroBlock = styled.div<{ noTitle?: boolean }>`\n margin-top: ${({ noTitle }) => noTitle && spacings.spacer}px;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst Header: FC<{\n size?: 'full' | 'small';\n /** Optional explicit height scale value: 100vh * [0...1] */\n sizeScale?: number;\n title?: string;\n titleAs?: CalloutTag;\n\n intro?: {\n text?: string;\n title?: string;\n };\n\n primaryCta?: (isInverted?: boolean) => React.ReactNode;\n secondaryCta?: (isInverted?: boolean) => React.ReactNode;\n videoUrl?: string;\n images?: HeaderImageProps[];\n withTopGradient?: boolean;\n customTopGradient?: string;\n customBottomGradient?: string;\n badge?: {\n content: React.ReactNode;\n showOnMobile?: boolean;\n };\n}> = ({\n size = 'full',\n sizeScale,\n title,\n titleAs,\n intro,\n primaryCta,\n secondaryCta,\n videoUrl,\n images,\n withTopGradient = true,\n customTopGradient,\n customBottomGradient,\n badge,\n}) => {\n const theme = useContext(ThemeContext);\n const topGradient = withTopGradient\n ? customTopGradient ||\n 'linear-gradient(179deg,rgba(0,0,0,.4) 0%,rgba(0,0,0,0) 40%)'\n : undefined;\n\n const bottomGradient =\n title || primaryCta || secondaryCta\n ? customBottomGradient || global(theme).sections.imageTextGradient\n : undefined;\n\n const gradient = `${bottomGradient ? bottomGradient + ', ' : ''}${\n topGradient || ''\n }`;\n return (\n <View>\n <HeaderWrapper clampWidth=\"large\">\n <StyledPoster\n videoUrl={videoUrl}\n images={images}\n gradient={withTopGradient ? gradient : undefined}\n size={\n sizeScale === undefined\n ? size === 'small'\n ? 0.8\n : 1\n : sizeScale\n }\n >\n <Wrapper>\n <PosterContent>\n <Grid.Row gutter={0}>\n <Grid.Col\n span={26 / 28}\n large={{ span: 20 / 28 }}\n xlarge={{ span: 15 / 28 }}\n >\n {!intro?.title && title && (\n <Callout\n hyphens\n size=\"medium\"\n as={titleAs}\n hasShadow\n textColor=\"#fff\"\n innerHTML={title}\n />\n )}\n {/** #TODO: Title und Intro Logik zusammen mit Markus abklären (siehe auch b.kit-prismic slice)*/}\n {intro && intro.title && (\n <IntroBlock\n noTitle={!intro.title && !!title}\n >\n {intro.title && (\n <Heading\n as=\"h1\"\n size=\"heading-1\"\n hasShadow\n textColor=\"#fff\"\n hyphens\n >\n {intro.title}\n </Heading>\n )}\n {intro.text && (\n <Copy textColor=\"#fff\">\n {intro.text}\n </Copy>\n )}\n </IntroBlock>\n )}\n {(primaryCta || secondaryCta) && (\n <StyledActions\n primary={\n primaryCta && primaryCta(true)\n }\n secondary={\n secondaryCta &&\n secondaryCta(true)\n }\n />\n )}\n </Grid.Col>\n </Grid.Row>\n </PosterContent>\n </Wrapper>\n </StyledPoster>\n {badge && badge.content && (\n <Badge showOnMobile={badge.showOnMobile}>\n {badge.content}\n </Badge>\n )}\n </HeaderWrapper>\n {(title || primaryCta || secondaryCta) && (\n <PosterContentMobile>\n <Wrapper addWhitespace>\n {title && (\n <Callout\n hyphens\n size=\"small\"\n as={titleAs}\n isInverted={false}\n innerHTML={title}\n />\n )}\n {(primaryCta || secondaryCta) && (\n <StyledActions\n primary={primaryCta && primaryCta(false)}\n secondary={secondaryCta && secondaryCta(false)}\n />\n )}\n </Wrapper>\n </PosterContentMobile>\n )}\n </View>\n );\n};\n\nexport default Header;\n","import * as React from 'react';\nimport styled, { ThemeContext } 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';\n\nconst Seperator = styled.div<{ isInverted?: boolean }>`\n border-bottom: solid 1px\n ${({ isInverted, theme }) =>\n isInverted ? color(theme).light : color(theme).dark};\n`;\n\nconst ContentFlex = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n\n margin: ${spacings.spacer * 2}px 0;\n\n @media ${mq.medium} {\n flex-direction: row;\n justify-content: flex-start;\n text-align: left;\n }\n`;\n\nconst Avatar = styled.img`\n border-radius: 50%; ;\n`;\n\nconst Author = styled.div`\n margin-top: ${spacings.spacer}px;\n\n @media ${mq.medium} {\n margin-left: 0;\n margin-left: ${spacings.spacer}px;\n }\n`;\n\nconst StyledCopy = styled(Copy)`\n text-transform: uppercase;\n margin-bottom: ${spacings.nudge * 2}px;\n`;\n\nconst NewsAuthorCard: React.FC<{\n label?: string;\n author?: string;\n avatar?: { src: string; alt?: string };\n\n bgMode?: 'full' | 'inverted';\n}> = ({ label, author, avatar, bgMode }) => {\n const theme = React.useContext(ThemeContext);\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n {author && (\n <>\n <Seperator isInverted={isInverted} />\n <ContentFlex>\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 </ContentFlex>\n </>\n )}\n <Seperator isInverted={isInverted} />\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsAuthorCard;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { spacings, getColors as color } from 'utils/styles';\nimport Copy from 'components/typography/Copy';\n\nconst View = styled(Copy)<{\n isInverted?: boolean;\n isActive?: boolean;\n onClick?: () => void;\n}>`\n display: inline-block;\n border: 1px solid\n ${({ isInverted, theme }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 15px;\n\n padding: 3px ${spacings.nudge * 2}px;\n user-select: none;\n\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-align: center;\n background: ${({ isActive, isInverted, theme }) =>\n isActive && (isInverted ? color(theme).light : color(theme).dark)};\n color: ${({ isActive, isInverted, theme }) =>\n isActive && (isInverted ? color(theme).dark : color(theme).light)};\n cursor: ${({ onClick }) => (onClick ? 'pointer' : 'default')};\n\n transition: background 0.1s ease-in-out, color 0.1s ease-in-out;\n\n &:hover {\n background: ${({ theme, isInverted, onClick }) =>\n onClick && (isInverted ? color(theme).light : color(theme).dark)};\n color: ${({ theme, isInverted, onClick }) =>\n onClick && (isInverted ? color(theme).dark : color(theme).light)};\n }\n`;\n\nconst Tag: FC<{\n isInverted?: boolean;\n isActive?: boolean;\n onClick?: () => void;\n className?: string;\n}> = ({ isInverted, isActive, onClick, className, children }) => {\n return (\n <View\n isInverted={isInverted}\n isActive={isActive}\n onClick={onClick}\n className={className}\n >\n {children}\n </View>\n );\n};\n\nexport default Tag;\n","interface DateReplacementHolder {\n [key: string]: () => string;\n}\n\nexport default class StatusFormatter {\n private timestamp: number;\n private input: string;\n private dateFormat: string;\n private timeFormat: string;\n\n private localeKey: string;\n private date: Date;\n\n constructor(\n timestamp: number,\n input: string,\n dateFormat: string,\n timeFormat: string,\n localeKey?: string\n ) {\n this.timestamp = timestamp;\n this.input = input;\n this.dateFormat = dateFormat;\n this.timeFormat = timeFormat;\n\n this.localeKey = localeKey ? localeKey : 'de';\n this.date = new Date(this.timestamp);\n }\n\n private dateReplacements: DateReplacementHolder = {\n dddd: () => {\n return weekDays[this.localeKey].long[this.date.getDay()];\n },\n DDDD: () => {\n return weekDays[this.localeKey].long[this.date.getDay()];\n },\n ddd: () => {\n return weekDays[this.localeKey].short[this.date.getDay()];\n },\n DDD: () => {\n return weekDays[this.localeKey].short[this.date.getDay()];\n },\n dd: () => {\n return this.getDay();\n },\n DD: () => {\n return this.getDay();\n },\n MMMM: () => {\n return monthNames[this.localeKey].long[this.date.getMonth()];\n },\n mmmm: () => {\n return monthNames[this.localeKey].long[this.date.getMonth()];\n },\n MMM: () => {\n return monthNames[this.localeKey].short[this.date.getMonth()];\n },\n mmm: () => {\n return monthNames[this.localeKey].short[this.date.getMonth()];\n },\n mm: () => {\n return this.getMonth();\n },\n MM: () => {\n return this.getMonth();\n },\n yyyy: () => {\n return this.getYear();\n },\n YYYY: () => {\n return this.getYear();\n },\n yy: () => {\n return this.getYear().substr(-2);\n },\n YY: () => {\n return this.getYear().substr(-2);\n },\n };\n\n private timeReplacements: DateReplacementHolder = {\n hh: () => {\n return this.getHours();\n },\n HH: () => {\n return this.getHours();\n },\n hs: () => {\n return this.getHours12h();\n },\n HS: () => {\n return this.getHours12h();\n },\n mm: () => {\n return this.getMinutes();\n },\n MM: () => {\n return this.getMinutes();\n },\n ss: () => {\n return this.getSeconds();\n },\n SS: () => {\n return this.getSeconds();\n },\n ap: () => {\n const hours = this.date.getHours();\n return hours >= 12 ? 'pm' : 'am';\n },\n AP: () => {\n const hours = this.date.getHours();\n return hours >= 12 ? 'PM' : 'AM';\n },\n };\n\n public setDate(timestamp: number) {\n this.date = new Date(timestamp);\n }\n\n public setLocale(localeKey: string) {\n this.localeKey = localeKey;\n }\n\n public getFormattedStatus() {\n const placeholders: {\n [key: string]: any;\n } = {\n '%DATE%': this.getFormattedDate(),\n '%TIME%': this.getFormattedTime(),\n };\n\n const formattedInput = this.input.replace(/%\\w+%/g, (foundString) => {\n return placeholders[foundString] || foundString;\n });\n return formattedInput;\n }\n\n public getFormattedDate() {\n // replace placeholders with values from dateReplacements object\n const dataKeys = Object.keys(this.dateReplacements);\n let formattedDate = this.dateFormat;\n for (let i = 0; i < dataKeys.length; i++) {\n formattedDate = formattedDate.replace(\n new RegExp(dataKeys[i], 'g'),\n (foundString) => {\n return this.dateReplacements[foundString].call(this);\n }\n );\n }\n return formattedDate;\n }\n\n public getFormattedTime() {\n // replace placeholders with values from timeReplacements object\n const dataKeys = Object.keys(this.timeReplacements);\n let formattedTime = this.timeFormat;\n for (let i = 0; i < dataKeys.length; i++) {\n formattedTime = formattedTime.replace(\n new RegExp(dataKeys[i], 'g'),\n (foundString) => {\n return this.timeReplacements[foundString].call(this);\n }\n );\n }\n return formattedTime;\n }\n\n private getDoubleDigitString(value: number) {\n return value < 10 ? '0' + value.toString() : value.toString();\n }\n\n private getDay() {\n return this.getDoubleDigitString(this.date.getDate());\n }\n\n private getMonth() {\n return this.getDoubleDigitString(this.date.getMonth() + 1);\n }\n\n private getYear() {\n return this.date.getFullYear().toString();\n }\n\n private getHours() {\n return this.getDoubleDigitString(this.date.getHours());\n }\n\n private getHours12h() {\n let hours = this.date.getHours();\n hours = hours % 12;\n hours = hours === 0 ? 12 : hours;\n return this.getDoubleDigitString(hours);\n }\n\n private getMinutes() {\n return this.getDoubleDigitString(this.date.getMinutes());\n }\n\n private getSeconds() {\n return this.getDoubleDigitString(this.date.getSeconds());\n }\n}\n\ninterface WeekDays {\n [key: string]: {\n long: string[];\n short: string[];\n };\n}\n\ninterface MonthNames {\n [key: string]: {\n long: string[];\n short: string[];\n };\n}\n\nconst weekDays: WeekDays = {\n de: {\n long: [\n 'Montag',\n 'Dienstag',\n 'Mittwoch',\n 'Donnerstag',\n 'Freitag',\n 'Samstag',\n 'Sonntag',\n ],\n short: ['Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.', 'So.'],\n },\n en: {\n long: [\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n 'Sunday',\n ],\n short: ['Mon.', 'Tue.', 'Wed.', 'Thu.', 'Fri.', 'Sat.', 'Sun.'],\n },\n};\n\nconst monthNames: MonthNames = {\n de: {\n long: [\n 'Januar',\n 'Februar',\n 'März',\n 'April',\n 'Mai',\n 'Juni',\n 'Juli',\n 'August',\n 'September',\n 'Oktober',\n 'November',\n 'Dezember',\n ],\n short: [\n 'Jan.',\n 'Febr.',\n 'März',\n 'Apr.',\n 'Mai',\n 'Juni',\n 'Juli',\n 'Aug.',\n 'Sept.',\n 'Okt.',\n 'Nov.',\n 'Dez',\n ],\n },\n en: {\n long: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n short: [\n 'Jan.',\n 'Feb.',\n 'Mar.',\n 'Apr.',\n 'May',\n 'June',\n 'July',\n 'Aug.',\n 'Sept.',\n 'Oct.',\n 'Nov.',\n 'Dec.',\n ],\n },\n};\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Copy from 'components/typography/Copy';\nimport Actions from 'components/blocks/Actions';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Tag from 'components/blocks/Tag';\nimport StatusFormatter from 'utils/statusFormatter';\nimport Link, { LinkProps } from 'components/typography/Link';\n\nconst View = styled.div`\n position: relative;\n text-decoration: none;\n padding-bottom: ${spacings.spacer}px;\n`;\n\nconst ImageLink = styled(Link)`\n width: 100%;\n`;\n\nconst StyledImage = styled(Image)`\n overflow: hidden;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n`;\n\nconst TitleLink = styled(Link)`\n text-decoration: none;\n`;\n\nconst Head = styled(Copy)`\n display: flex;\n\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n\n margin-top: ${spacings.spacer * 2}px;\n margin-bottom: ${spacings.spacer * 1.5}px;\n\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n`;\n\nconst Main = styled.div`\n max-width: 95%;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')}\n\n @media ${mq.medium} {\n width: 100%;\n\n & > * {\n max-width: 50%;\n min-width: 0 !important;\n flex: 1;\n }\n }\n`;\n\nexport interface NewsCardProps {\n isInverted?: boolean;\n tag?: string;\n onTagClick?: (name: string) => void;\n publishDate?: Date;\n title?: string;\n text?: string;\n image?: Omit<ImageProps, 'coverSpace'>;\n link?: LinkProps;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}\n\nconst NewsCard: React.FC<\n NewsCardProps & {\n className?: string;\n }\n> = ({\n tag,\n onTagClick,\n publishDate,\n title,\n text,\n image,\n link,\n isInverted,\n primaryAction,\n secondaryAction,\n className,\n}) => {\n const theme = useContext(ThemeContext);\n\n let publishedAt = '';\n if (publishDate) {\n const formatter = new StatusFormatter(\n publishDate.getTime(),\n '',\n global(theme).sections.newsDateFormat,\n global(theme).sections.newsTimeFormat,\n global(theme).sections.newsLocaleKey\n );\n publishedAt = formatter.getFormattedDate();\n }\n\n // settings max text length to 300 chars\n if (text && text.length > 300) {\n text = text.slice(0, 301) + '...';\n }\n\n return (\n <View className={className}>\n {image && (\n <ImageLink {...link}>\n <StyledImage coverSpace {...image} />\n </ImageLink>\n )}\n <Head isInverted={isInverted} data-sheet=\"head\">\n {tag && (\n <Tag\n isInverted={isInverted}\n onClick={onTagClick ? () => onTagClick(tag) : undefined}\n >\n {tag}\n </Tag>\n )}\n {publishedAt && <div>{publishedAt}</div>}\n </Head>\n <Main>\n {title && (\n <TitleLink {...link}>\n <Copy\n isInverted={isInverted}\n size=\"big\"\n type=\"copy-b\"\n data-sheet=\"title\"\n >\n {title}\n </Copy>\n </TitleLink>\n )}\n {text && (\n <Copy\n isInverted={isInverted}\n type=\"copy\"\n innerHTML={text}\n data-sheet=\"text\"\n />\n )}\n </Main>\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={secondaryAction && secondaryAction(isInverted)}\n />\n )}\n </View>\n );\n};\n\nexport default NewsCard;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport Copy from 'components/typography/Copy';\nimport NewsCard, { NewsCardProps } from 'components/blocks/NewsCard';\nimport { useContext, useEffect, useState } from 'react';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport Pointer from 'components/buttons/Pointer';\n\nconst ContentFlex = styled.div`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: 'flex-start';\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n`;\n\nconst Actions = styled.div`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n text-align: left;\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 2 ? 'block' : 'none'};\n`;\n\ntype NewsFooterMq = 'small' | 'semilarge';\n\nconst NewsFooter: React.FC<{\n news: NewsCardProps[];\n onTagClick?: (tag: string) => void;\n\n bgMode?: 'full' | 'inverted';\n showMoreText?: string;\n}> = ({ news, onTagClick, bgMode, showMoreText }) => {\n const newsCount = news?.length || 0;\n const theme = useContext(ThemeContext);\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({\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 bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace clampWidth=\"small\">\n <ContentFlex>\n {news &&\n news\n .filter((_, i) => i < visibleRows * itemsPerRow)\n .map((item, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <NewsCard\n isInverted={isInverted}\n onTagClick={onTagClick}\n {...item}\n />\n </div>\n );\n })}\n </ContentFlex>\n {news && news.length > 0 && (\n <Actions>\n <Copy isInverted={isInverted}>\n <ShowMore\n itemCount={news.length}\n onClick={(ev) => {\n ev.preventDefault();\n if (\n visibleRows <\n Math.ceil(newsCount / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows < newsCount / itemsPerRow && (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMoreText || 'mehr anzeigen'}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n </Copy>\n </Actions>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsFooter;\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n getColors as color,\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\n\nconst Content = styled.div`\n & > * + * {\n margin-top: ${spacings.spacer * 2}px;\n }\n`;\n\nconst ImageFlex = styled.div`\n margin: -${spacings.spacer}px;\n\n @media ${mq.medium} {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n\n & > * {\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n`;\n\nconst Img = styled.div<{ isSingleHalf?: boolean }>`\n padding: ${spacings.spacer}px;\n width: 100%;\n\n @media ${mq.semilarge} {\n width: ${({ isSingleHalf }) => isSingleHalf && '50%'};\n }\n`;\n\nconst StyledImage = styled(Image)`\n overflow: hidden;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n`;\n\nconst NewsImages: React.FC<{\n images?: Omit<ImageProps, 'coverSpace'>[];\n imageStyle?: 'full' | 'half';\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n bgMode?: 'full' | 'inverted';\n}> = ({\n images,\n imageStyle = 'full',\n primaryAction,\n secondaryAction,\n bgMode,\n}) => {\n const theme = useContext(ThemeContext);\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n <Content>\n {images && (imageStyle === 'half' || images.length >= 2) ? (\n <ImageFlex>\n {images.map((img, i) => {\n return (\n <Img\n key={i}\n isSingleHalf={images.length >= 1}\n >\n <StyledImage coverSpace {...img} />\n </Img>\n );\n })}\n </ImageFlex>\n ) : (\n images && (\n <div>\n {images.map((img, i) => {\n return (\n <StyledImage\n coverSpace\n {...img}\n key={i}\n />\n );\n })}\n </div>\n )\n )}\n </Content>\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 default NewsImages;\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } 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 from 'components/blocks/Tag';\nimport {\n getColors as color,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport StatusFormatter from 'utils/statusFormatter';\n\nconst Content = styled.div`\n & > * + * {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n }\n`;\n\nconst IntroHead = styled(Copy)`\n display: flex;\n\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n`;\n\nconst HeadTag = styled(Tag)`\n flex: 0 1 auto;\n margin-right: ${spacings.nudge * 2}px;\n`;\n\nconst MetaBlock = styled.div`\n flex: 1 1 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.spacer}px;\n }\n\n & > * + * {\n margin-left: ${spacings.spacer}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.nudge * 5}px;\n }\n`;\n\nconst NewsIntro: React.FC<{\n tags?: string[];\n onTagClick?: (name: string) => void;\n meta?: { date?: Date; author?: string };\n title?: string;\n text?: string;\n image?: ImageProps;\n\n bgMode?: 'full' | 'inverted';\n}> = ({ tags, onTagClick, meta, title, text, image, bgMode }) => {\n const theme = useContext(ThemeContext);\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 global(theme).sections.newsDateFormat,\n global(theme).sections.newsTimeFormat,\n global(theme).sections.newsLocaleKey\n );\n publishedAt = formatter.getFormattedDate();\n }\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n <Content>\n <IntroHead isInverted={isInverted}>\n {tags &&\n tags.map((tag, index) => {\n return (\n <HeadTag\n key={`headtag-${index}`}\n isInverted={isInverted}\n onClick={\n onTagClick\n ? () => onTagClick(tag)\n : undefined\n }\n >\n {tag}\n </HeadTag>\n );\n })}\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 <div>\n <Image coverSpace {...image} />\n </div>\n )}\n </Content>\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsIntro;\n","import * as React from 'react';\nimport styled, { ThemeContext } 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 { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport Copy from 'components/typography/Copy';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport { useContext, useEffect, useState } from 'react';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport Pointer from 'components/buttons/Pointer';\n\nconst News = styled.div`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: 'flex-start';\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n\n @media ${mq.large} {\n & > * {\n flex: 1 0 33.33%;\n max-width: 33.33%;\n }\n }\n`;\n\nconst ListFooter = styled.div`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\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\ntype NewsListMq = 'small' | 'semilarge' | 'large';\n\nconst NewsList: React.FC<{\n news?: NewsCardProps[];\n onTagClick?: (tag: string) => void;\n bgMode?: 'full' | 'inverted';\n showMoreText?: string;\n}> = ({\n news,\n onTagClick,\n bgMode,\n\n showMoreText,\n}) => {\n const theme = useContext(ThemeContext);\n const mqs: NewsListMq[] = ['small', 'semilarge', 'large'];\n const currentMq = useMediaQuery(mqs) as NewsListMq | undefined;\n const [itemsPerRow, setItemsPerRow] = useState(3);\n const [visibleRows, setVisibleRows] = useState(1);\n\n const newsCount = news?.length || 0;\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\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 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 return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace clampWidth=\"normal\">\n <News>\n {news &&\n news\n .filter((_, i) => i < visibleRows * itemsPerRow)\n .map((item, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <NewsCard\n onTagClick={onTagClick}\n isInverted={isInverted}\n {...item}\n />\n </div>\n );\n })}\n </News>\n <ListFooter>\n {news && news.length > 0 && (\n <Copy type=\"copy\" size=\"medium\" isInverted={isInverted}>\n <ShowMore\n itemCount={news.length}\n onClick={(ev) => {\n ev.preventDefault();\n if (\n visibleRows <\n Math.ceil(newsCount / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows < newsCount / itemsPerRow && (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMoreText || 'mehr anzeigen'}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n </Copy>\n )}\n </ListFooter>\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsList;\n","import Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\nimport Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { hexToRgba } from 'utils/hexRgbConverter';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\n\nconst TableContainer = styled.div`\n overflow-x: scroll;\n overflow-y: hidden;\n white-space: nowrap;\n`;\n\nconst TableBody = styled.table`\n width: 100%;\n max-width: 100%;\n margin-top: ${spacings.nudge * 2}px;\n\n border-collapse: separate;\n border-spacing: 0 ${spacings.nudge}px;\n\n @media ${mq.medium} {\n padding: 0;\n }\n`;\n\nconst TableHead = styled.th<{ hasBack?: boolean; isInverted?: boolean }>`\n text-align: left;\n color: ${({ theme }) => color(theme).dark};\n background-color: ${({ theme, hasBack, isInverted }) =>\n hasBack && !isInverted ? color(theme).light : color(theme).mono.light};\n\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 2}px\n ${spacings.nudge * 3.5}px ${spacings.spacer * 2}px;\n min-width: 60px;\n box-sizing: content-box;\n\n :last-child {\n padding-right: ${spacings.spacer * 2.5}px;\n }\n`;\n\nconst TableData = styled.td<{ isInverted?: boolean; hasBack?: boolean }>`\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 2}px\n ${spacings.nudge * 3.5}px ${spacings.spacer * 2}px;\n min-width: 60px;\n box-sizing: content-box;\n\n background-color: ${({ isInverted, hasBack, theme }) =>\n hexToRgba(\n hasBack && !isInverted\n ? color(theme).light\n : color(theme).mono.light,\n isInverted ? 0.2 : 0.4\n )};\n\n :last-child {\n padding-right: ${spacings.spacer * 2.5}px;\n }\n`;\n\nexport interface TableProps {\n tableTitle?: string;\n rowTitle?: string[];\n row: {\n cols: string[];\n }[];\n isInverted?: boolean;\n hasBack?: boolean;\n}\n\nconst TableBlock: React.FC<TableProps> = ({\n row,\n tableTitle,\n rowTitle,\n isInverted = false,\n hasBack = false,\n}) => {\n return (\n <div>\n {tableTitle && (\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {tableTitle}\n </Copy>\n )}\n <TableContainer>\n <TableBody>\n {rowTitle && (\n <thead>\n <tr>\n {rowTitle.map((item, ii) => {\n return (\n <TableHead\n hasBack={hasBack}\n isInverted={isInverted}\n key={ii}\n >\n <Copy type=\"copy-b\">{item}</Copy>\n </TableHead>\n );\n })}\n </tr>\n </thead>\n )}\n <tbody>\n {row.map(({ cols }, i) => (\n <tr key={i}>\n {cols.map((itemText, ii) => {\n return (\n <TableData\n key={ii}\n isInverted={isInverted}\n hasBack={hasBack}\n >\n <Copy isInverted={isInverted}>\n {itemText}\n </Copy>\n </TableData>\n );\n })}\n </tr>\n ))}\n </tbody>\n </TableBody>\n </TableContainer>\n </div>\n );\n};\n\nconst TableWrapper = styled.div<{ withSeperation?: boolean }>`\n ${({ withSeperation }) =>\n withSeperation &&\n withRange([spacings.spacer, spacings.spacer * 4], 'padding-top')};\n\n & + & {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n`;\n\nconst NewsTable: React.FC<{\n tableItems: TableProps[];\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n bgMode?: 'full' | 'inverted';\n}> = ({ bgMode, tableItems, primaryAction, secondaryAction }) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace clampWidth=\"small\">\n {tableItems.map((item, i) => {\n return (\n <TableWrapper key={i}>\n <TableBlock\n {...item}\n hasBack={hasBg}\n isInverted={isInverted}\n />\n </TableWrapper>\n );\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 default NewsTable;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Actions from 'components/blocks/Actions';\nimport Copy from 'components/typography/Copy';\nimport Wrapper from 'components/base/Wrapper';\nimport { getColors as color, spacings, withRange } from 'utils/styles';\nimport { useContext } from 'react';\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 StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n`;\n\nconst NewsText: React.FC<{\n text: string;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n bgMode?: 'full' | 'inverted';\n}> = ({ text, primaryAction, secondaryAction, bgMode }) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\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 {(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 default NewsText;\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { ImageProps } from 'components/blocks/Image';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { getColors as color, spacings, withRange } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport VideoCard from 'components/blocks/VideoCard';\nimport Actions from 'components/blocks/Actions';\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n`;\n\nconst NewsVideo: React.FC<{\n bgImage?: ImageProps;\n embedId?: string;\n playIcon?: React.ReactChild;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n bgMode?: 'full' | 'inverted';\n}> = ({\n bgImage,\n embedId,\n playIcon,\n primaryAction,\n secondaryAction,\n bgMode,\n}) => {\n const theme = useContext(ThemeContext);\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace clampWidth=\"small\">\n <div>\n {embedId && bgImage && (\n <VideoCard\n bgImage={bgImage}\n embedId={embedId}\n playIcon={playIcon}\n />\n )}\n </div>\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 default NewsVideo;\n","import { useEffect, useState } from 'react';\n\nexport const useObserverSupport = (inital?: boolean) => {\n const [observerSupported, setObserverSupport] = useState(inital || false);\n\n useEffect(() => {\n if (\n !('IntersectionObserver' in window) ||\n !('IntersectionObserverEntry' in window) ||\n !('intersectionRatio' in window.IntersectionObserverEntry.prototype)\n ) {\n setObserverSupport(false);\n } else {\n setObserverSupport(true);\n }\n }, []);\n\n return observerSupported;\n};\n","import React, { useContext, useEffect, useRef, useState } from 'react';\nimport styled, { ThemeContext } 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 { getColors, mq, spacings, withRange } from 'utils/styles';\nimport Tag 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';\n\nconst TagContainer = styled.div`\n margin: -${spacings.nudge}px;\n ${withRange([spacings.spacer * 1.5, spacings.spacer * 3], 'margin-bottom')};\n\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n`;\n\nconst TagWrapper = styled.div`\n padding: ${spacings.nudge}px;\n`;\n\nconst List = styled.div`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: 'flex-start';\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n\n @media ${mq.large} {\n & > * {\n flex: 1 0 33.33%;\n max-width: 33.33%;\n }\n }\n`;\n\nconst ListFooter = styled.div`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\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\ntype NewsOverviewMq = 'small' | 'semilarge' | 'large';\n\nconst NewsOverview: React.FC<{\n news: NewsCardProps[];\n activeTag?: string;\n tags?: string[];\n queryParams?: Record<string, any>;\n onTagClick?: (tag: string, insideList?: boolean) => void;\n showMoreText?: string;\n\n bgMode?: 'full' | 'inverted';\n}> = ({\n news,\n activeTag,\n tags,\n queryParams,\n onTagClick,\n showMoreText,\n\n bgMode,\n}) => {\n const theme = useContext(ThemeContext);\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n activeTag = queryParams?.selected\n ? decodeURI(queryParams.selected)\n : activeTag;\n const [selectedTag, setSelectedTag] = useState<string | undefined>(\n activeTag || undefined\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(3);\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 } = useEqualSheetHeight({\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 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 useEffect(() => {\n setSelectedTag(activeTag);\n }, [activeTag]);\n\n useEffect(() => {\n // if new tag is selected reset list rows to three visible item rows\n setVisibleRows(3);\n triggerCalculation();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedTag]);\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 (visibleRows < Math.ceil(newsCount / itemsPerRow)) {\n setVisibleRows((prev) => prev + 1);\n }\n }\n }, options);\n observer.observe(element);\n }\n\n return () => {\n if (observer) observer.disconnect();\n };\n }, [itemsPerRow, newsCount, visibleRows, observerSupported]);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? getColors(theme).dark\n : hasBg\n ? getColors(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {tags && (\n <TagContainer>\n {tags.sort().map((tag, i) => {\n return (\n <TagWrapper key={'tag_' + i}>\n <Tag\n isInverted={isInverted}\n onClick={() => {\n if (!onTagClick) {\n // if no callback is defined handle filtering on client side inside the component\n setSelectedTag(\n selectedTag === tag\n ? undefined\n : tag\n );\n } else onTagClick(tag, false);\n }}\n isActive={selectedTag === tag}\n >\n {tag}\n </Tag>\n </TagWrapper>\n );\n })}\n </TagContainer>\n )}\n <List>\n {news &&\n news\n .filter((item) =>\n selectedTag ? item.tag === selectedTag : true\n )\n .filter((_, i) => i < visibleRows * itemsPerRow)\n .map((item, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <NewsCard\n isInverted={isInverted}\n onTagClick={(name) => {\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 setSelectedTag(\n selectedTag === name\n ? undefined\n : name\n );\n } else {\n onTagClick(name, true);\n }\n }}\n {...item}\n />\n </div>\n );\n })}\n </List>\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(newsCount / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows < newsCount / 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 default NewsOverview;\n","import Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { css } from 'styled-components';\nimport { spacings, getColors as color } from 'utils/styles';\n\nconst View = styled.a<{\n isDisabled?: boolean;\n isActive?: boolean;\n isInverted?: boolean;\n}>`\n display: block;\n text-decoration: none;\n color: ${({ isInverted, theme }) =>\n isInverted ? color(theme).light : 'inherit'};\n max-width: min-content;\n\n text-align: center;\n\n /* padding: ${spacings.nudge * 5}px ${spacings.nudge * 3}px; */\n\n pointer-events: ${({ isDisabled }) => (isDisabled ? 'none' : 'all')};\n\n ${({ isActive, isDisabled, theme }) =>\n !isDisabled &&\n isActive &&\n css`\n color: ${color(theme).primary.light};\n\n & > * {\n font-weight: 700;\n }\n `}\n\n &:hover {\n color: ${({ theme }) => color(theme).primary.light};\n }\n\n &:focus {\n & > * {\n font-weight: 700;\n }\n }\n\n &:active {\n & > * {\n font-weight: 700;\n }\n }\n\n & > * {\n opacity: ${({ isDisabled }) => (isDisabled ? '0.3' : '1')};\n }\n`;\n\nconst QuicknavButton: React.FC<{\n link?: string;\n label?: string;\n isDisabled?: boolean;\n isActive?: boolean;\n isInverted?: boolean;\n}> = ({ link, label, isDisabled, isActive, isInverted }) => {\n return (\n <View\n href={link}\n isActive={isActive}\n isDisabled={isDisabled}\n isInverted={isInverted}\n >\n <Copy textColor=\"inherit\" type=\"copy\">\n {label}\n </Copy>\n </View>\n );\n};\n\nexport default QuicknavButton;\n","import { spacings, getColors as color, mq } from 'utils/styles';\nimport QuicknavButton from 'components/buttons/QuicknavButton';\nimport * as React from 'react';\nimport styled from 'styled-components';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\n\nconst StyledSection = styled(Section)`\n padding-top: 55px;\n`;\n\nconst NavList = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n position: relative;\n\n margin-left: -${spacings.spacer}px;\n padding-right: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n margin-left: -${spacings.nudge * 3}px;\n }\n\n overflow-x: scroll;\n overflow-y: hidden;\n white-space: nowrap;\n\n ::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst NavItem = styled.li`\n display: inline-block;\n position: relative;\n\n cursor: pointer;\n`;\n\nconst NavItemContainer = styled.div`\n display: inline-block;\n padding: ${spacings.nudge * 3}px;\n`;\n\nconst Test = styled.div`\n width: 100%;\n height: 1px;\n\n background: rgba(0, 0, 0, 0.1);\n`;\n\nconst Slider = styled.div<{ isActive?: boolean }>`\n /* display: ${({ isActive }) => (isActive ? 'block' : 'block')}; */\n height: 4px;\n position: absolute;\n bottom: 0;\n background-color: ${({ theme }) => color(theme).primary.light};\n`;\n\nconst Quicknav: React.FC<{\n navItems: { label: string; link?: string }[];\n activeNavItem?: string;\n onNavClick?: (index: number, label: string) => void;\n className?: string;\n}> = ({ navItems, activeNavItem, onNavClick, className }) => {\n const [isActiveItem, setIsActiveItem] = React.useState<number>(\n activeNavItem\n ? navItems?.findIndex(\n (item) =>\n item.label === activeNavItem ||\n item.link?.indexOf(activeNavItem) !== -1\n )\n : -1\n );\n\n const [pos, setPos] = React.useState(0);\n const [width, setWidth] = React.useState(0);\n const parentRef = React.useRef(null);\n\n const itemRef = React.useRef<any>();\n\n React.useEffect(() => {\n setIsActiveItem(\n navItems.findIndex(\n (item) =>\n item.label === activeNavItem ||\n (activeNavItem && item.link?.indexOf(activeNavItem) !== -1)\n )\n );\n }, [activeNavItem, navItems]);\n\n React.useEffect(() => {\n const element = document.querySelector(\n `[data-index=tabnav-${isActiveItem}]`\n );\n\n const parent = parentRef.current;\n\n if (element && parent) {\n const Box = element.getBoundingClientRect();\n const ParentBox = (parent as Element).getBoundingClientRect();\n\n setWidth(Box.width - spacings.spacer * 1.5);\n setPos(\n Box.left -\n ParentBox.left +\n (parent as HTMLElement).scrollLeft +\n spacings.nudge * 3\n );\n }\n }, [isActiveItem]);\n\n React.useEffect(() => {\n if (itemRef && itemRef.current && isActiveItem) {\n itemRef.current.scrollIntoView();\n }\n }, [isActiveItem]);\n\n return (\n <StyledSection addSeperation className={className}>\n <Wrapper addWhitespace>\n <NavList ref={parentRef}>\n {navItems.map((item, i) => {\n return (\n <NavItem\n ref={itemRef}\n data-index={`tabnav-${i}`}\n key={i}\n onClick={() => {\n if (!onNavClick) {\n setIsActiveItem(i);\n } else {\n onNavClick(i, item.label);\n }\n }}\n >\n <NavItemContainer>\n <QuicknavButton\n label={item.label}\n link={item.link}\n isActive={isActiveItem === i}\n />\n </NavItemContainer>\n </NavItem>\n );\n })}\n <div\n style={{\n paddingTop: '35px',\n }}\n >\n <Slider\n style={{\n transform: `translateX(${pos}px)`,\n transition: `.2s ease-in-out`,\n width: `${width}px`,\n }}\n />\n </div>\n </NavList>\n </Wrapper>\n <Test />\n </StyledSection>\n );\n};\n\nexport default Quicknav;\n","import Section 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';\n\nconst TimelineBlock = styled.div<{ isSwitched?: boolean; isActive?: boolean }>`\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 ${({ theme }) => color(theme).dark};\n border-radius: 50%;\n\n background: ${({ theme, isActive }) =>\n isActive ? color(theme).dark : color(theme).light};\n\n position: absolute;\n top: 0;\n left: 0px;\n\n transition: all 0.2s ease-in-out;\n\n @media ${mq.large} {\n top: 0;\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 }) => color(theme).dark};\n left: 5px;\n\n @media ${mq.large} {\n left: 50%;\n transform: translateX(-50%);\n }\n }\n`;\n\nconst TimelineText = styled.div<{ isSwitched?: boolean }>`\n position: relative;\n padding: ${spacings.spacer}px;\n padding-bottom: ${spacings.spacer * 2}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 * 2}px 0 ${spacings.spacer * 2}px ${\n spacings.spacer * 1.5\n }px`\n : `${spacings.spacer * 2}px ${spacings.spacer * 1.5}px ${\n spacings.spacer * 2\n }px 0`};\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Timeline: React.FC<{\n items?: { label?: string; title?: string; text?: string }[];\n}> = ({ items }) => {\n const theme = useContext(ThemeContext);\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: '-30% 0% -70% 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 addSeperation>\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 key={i}\n >\n <TimelineText isSwitched={i % 2 === 0}>\n <div>\n <Heading\n size=\"heading-1\"\n textColor={\n color(theme).secondary.dark\n }\n >\n {item.label}\n </Heading>\n </div>\n <div>\n <Heading size=\"heading-3\">\n {item.title}\n </Heading>\n </div>\n <Copy innerHTML={item.text} />\n </TimelineText>\n </TimelineBlock>\n );\n })}\n </Wrapper>\n </Section>\n );\n};\n\nexport default Timeline;\n","import { getColors as color, spacings, withRange } from 'utils/styles';\nimport React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport Wrapper from 'components/base/Wrapper';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Link from 'components/typography/Link';\n\nconst Socials = styled.div<{ isInverted?: boolean }>`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n\n margin: -${spacings.nudge}px;\n\n color: ${({ isInverted, theme }) =>\n isInverted ? color(theme).light : color(theme).dark};\n`;\n\nconst StyledWrapper = styled(Wrapper)`\n padding-left: ${spacings.spacer * 2}px;\n padding-right: ${spacings.spacer * 2}px;\n`;\n\nconst Social = styled(Link)`\n color: inherit;\n padding: ${spacings.nudge}px;\n\n transition: color 0.2s ease-in-out;\n\n &:hover {\n color: ${({ theme }) => color(theme).mono.dark};\n }\n\n & > * {\n ${withRange([29, 64], 'height')}\n ${withRange([29, 64], 'width')}\n }\n`;\n\nconst SocialNav: FC<{\n socials: Array<{\n href: string;\n icon: React.ReactNode;\n }>;\n bgMode?: 'full' | 'inverted';\n}> = ({ socials, bgMode }) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n addSeperation\n >\n <StyledWrapper addWhitespace>\n <Socials isInverted={isInverted}>\n {socials?.map((social, i) => (\n <Social key={i} href={social?.href} isExternal>\n {social?.icon}\n </Social>\n ))}\n </Socials>\n </StyledWrapper>\n </Section>\n );\n};\n\nexport default SocialNav;\n","import Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\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';\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.div<{ 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 ? color(theme).light : color(theme).primary.dark};\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 stringLength={stringLength} isInverted={isInverted}>\n {number}\n </Number>\n </NumberContainer>\n <Label\n size=\"super\"\n textColor={\n isInverted\n ? color(theme).light\n : color(theme).secondary.dark\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\nexport interface NumberListProps {\n items?: {\n icon?: { src: string; alt?: string };\n number?: string;\n label?: string;\n }[];\n bgMode?: 'full' | 'inverted';\n}\n\nconst NumberList: React.FC<NumberListProps> = ({ 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 bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\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 default NumberList;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.a<{ inverted?: boolean; disable?: boolean }>`\n min-height: 3em;\n height: 3.65em;\n min-width: 210px;\n padding: 0.1em 1.2em;\n\n display: inline-block;\n display: inline-flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: ${({ theme }) => font(theme).copy.medium.weight};\n text-align: center;\n text-decoration: none;\n line-height: 1;\n letter-spacing: ${({ theme }) => font(theme).copy.medium.letterSpacing};\n\n perspective: 1000;\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-perspective: 1000;\n -moz-osx-font-smoothing: grayscale;\n will-change: auto;\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n\n pointer-events: ${({ disable }) => (disable ? 'none' : 'all')};\n\n // will-change: transform;\n\n background-color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).light\n : inverted\n ? color(theme).dark\n : color(theme).light};\n text-align: left;\n\n transition: all ease-in-out 0.2s;\n\n & > * {\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).light\n : inverted\n ? color(theme).dark\n : color(theme).light};\n }\n\n & > :not(:last-child) {\n padding-right: ${spacings.nudge}px;\n }\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n box-shadow: 0px 8px 16px\n ${({ inverted }) =>\n inverted\n ? 'rgba(255, 255, 255, 0.25)'\n : 'rgba(0, 0, 0, 0.25)'};\n }\n\n &:focus {\n box-shadow: 0px 2px 6px\n ${({ inverted }) =>\n inverted\n ? 'rgba(255, 255, 255, 0.25)'\n : 'rgba(0, 0, 0, 0.3)'};\n }\n\n &:active {\n box-shadow: 0px 2px 6px\n ${({ inverted }) =>\n inverted\n ? 'rgba(255, 255, 255, 0.25)'\n : 'rgba(0, 0, 0, 0.3)'};\n }\n }\n`;\n\ninterface Props {\n isInverted?: boolean;\n isDisabled?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nexport type BtnProps = Props & {\n as?: 'button';\n};\n\nexport type LinkProps = Props & {\n as?: 'a';\n href?: string;\n isExternal?: boolean;\n};\n\nconst Button: React.FC<BtnProps | LinkProps> = React.forwardRef(\n (\n { as, isInverted, isDisabled, onClick, className, children, ...rest },\n ref\n ) => {\n if (as === 'button') {\n return (\n <View\n ref={ref}\n as={as as any}\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n } else {\n return (\n <View\n ref={ref}\n as={as as any}\n href={(rest as LinkProps).href}\n target={\n (rest as LinkProps).isExternal ? '_blank' : undefined\n }\n rel={\n (rest as LinkProps).isExternal\n ? 'noopener noreferrer'\n : undefined\n }\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n }\n }\n);\n\nButton.displayName = 'Button';\n\nconst Icon = styled.div<{ iconColor?: string }>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n width: 35px;\n height: 35px;\n\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).primary.medium};\n\n transition: transform 0.2s ease-in-out;\n\n ${View}:hover > & {\n transform: translateX(3px);\n }\n`;\n\nconst Label = styled.span`\n display: inline-block;\n`;\n\nexport default { View: Button, Label: Label, Icon: Icon };\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.a<{ inverted?: boolean; disable?: boolean }>`\n min-height: 3em;\n height: 3.65em;\n min-width: 210px;\n padding: 0.1em 1.2em;\n\n display: inline-block;\n display: inline-flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: ${({ theme }) => font(theme).copy.medium.weight};\n text-align: center;\n text-decoration: none;\n line-height: 1;\n letter-spacing: ${({ theme }) => font(theme).copy.medium.letterSpacing};\n\n perspective: 1000;\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-perspective: 1000;\n -moz-osx-font-smoothing: grayscale;\n will-change: auto;\n\n outline: none;\n box-shadow: none;\n border: solid 1px\n ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n user-select: none;\n cursor: pointer;\n\n pointer-events: ${({ disable }) => (disable ? 'none' : 'all')};\n\n // will-change: transform;\n\n background-color: transparent;\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n text-align: center;\n\n transition: all ease-in-out 0.2s;\n\n & > * {\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n }\n\n & > :not(:last-child) {\n padding-right: ${spacings.nudge}px;\n }\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n box-shadow: 0px 8px 16px\n ${({ inverted }) =>\n inverted\n ? 'rgba(255, 255, 255, 0.25)'\n : 'rgba(0, 0, 0, 0.25)'};\n }\n\n &:focus {\n box-shadow: 0px 2px 6px\n ${({ inverted }) =>\n inverted\n ? 'rgba(255, 255, 255, 0.25)'\n : 'rgba(0, 0, 0, 0.3)'};\n }\n\n &:active {\n box-shadow: 0px 2px 6px\n ${({ inverted }) =>\n inverted\n ? 'rgba(255, 255, 255, 0.25)'\n : 'rgba(0, 0, 0, 0.3)'};\n }\n }\n`;\n\ninterface Props {\n isInverted?: boolean;\n isDisabled?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nexport type BtnProps = Props & {\n as?: 'button';\n};\n\nexport type LinkProps = Props & {\n as?: 'a';\n href?: string;\n isExternal?: boolean;\n};\n\nconst ButtonGhost: React.FC<BtnProps | LinkProps> = React.forwardRef(\n (\n { as, isInverted, isDisabled, onClick, className, children, ...rest },\n ref\n ) => {\n if (as === 'button') {\n return (\n <View\n ref={ref}\n as={as as any}\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n } else {\n return (\n <View\n ref={ref}\n as={as as any}\n href={(rest as LinkProps).href}\n target={\n (rest as LinkProps).isExternal ? '_blank' : undefined\n }\n rel={\n (rest as LinkProps).isExternal\n ? 'noopener noreferrer'\n : undefined\n }\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n }\n }\n);\n\nButtonGhost.displayName = 'Button Ghost';\n\nconst Icon = styled.div<{ iconColor?: string }>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n width: 35px;\n height: 35px;\n\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).primary.medium};\n\n transition: transform 0.2s ease-in-out;\n\n ${View}:hover > & {\n transform: translateX(3px);\n }\n`;\n\nconst Label = styled.span`\n display: inline-block;\n`;\n\nexport default { View: ButtonGhost, Label: Label, Icon: Icon };\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.form`\n width: 100%;\n display: flex;\n flex-direction: column;\n\n color: ${({ theme }) => color(theme).mono.dark};\n\n @media ${mq.medium} {\n flex-direction: row;\n }\n`;\n\nconst InputField = styled.input<{ backColor?: string }>`\n display: block;\n width: 100%;\n height: 100%;\n max-height: 49px;\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 3.5}px;\n color: inherit;\n\n background-color: ${({ backColor }) => backColor && backColor};\n box-shadow: none;\n border: none;\n border-right: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n font-family: ${({ theme }) => font(theme).copy.small.family};\n font-weight: ${({ theme }) => font(theme).copy.small.weight};\n ${({ theme }) => withRange(font(theme).copy.small.size, 'font-size')}\n line-height: ${({ theme }) => font(theme).copy.small.lineHeight};\n\n &::placeholder {\n color: inherit;\n }\n`;\n\nconst SubmitBtn = styled.button<{ isInverted?: boolean }>`\n display: inline-flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 49px;\n\n margin-top: ${spacings.spacer * 0.5}px;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).dark : color(theme).light};\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n transition: all ease-in-out 0.2s;\n\n @media ${mq.medium} {\n width: 100px;\n margin-top: 0;\n }\n\n &:hover {\n transform: scale(1.05);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst CompactForm: FC<{\n isInverted?: boolean;\n value?: string;\n placeholder?: string;\n method?: string;\n action?: string;\n buttonIcon?: React.ReactNode;\n onSubmit?: (ev: React.SyntheticEvent<HTMLFormElement>) => void;\n onClick?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onFocus?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onBlur?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n backgroundStyle?: 'white' | 'grey';\n className?: string;\n}> = ({\n isInverted = false,\n value,\n placeholder,\n method,\n action,\n buttonIcon,\n onSubmit,\n onClick,\n onBlur,\n onFocus,\n backgroundStyle = 'grey',\n className,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <View\n onSubmit={onSubmit}\n method={method}\n action={action}\n className={className}\n >\n <InputField\n placeholder={placeholder}\n value={value}\n onClick={onClick}\n onBlur={onBlur}\n onFocus={onFocus}\n backColor={\n backgroundStyle === 'grey' || isInverted\n ? color(theme).mono.light\n : color(theme).light\n }\n />\n {buttonIcon && (\n <SubmitBtn isInverted={isInverted}>{buttonIcon}</SubmitBtn>\n )}\n </View>\n );\n};\n\nexport default CompactForm;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.div<{ isInverted?: boolean }>`\n position: relative;\n width: 100%;\n display: flex;\n flex-direction: row;\n\n color: ${({ theme }) => color(theme).dark};\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).mono.light};\n`;\n\nconst InputField = styled.input<{\n hasLeftIcon?: boolean;\n hasRightIcon?: boolean;\n}>`\n display: block;\n width: 100%;\n height: 100%;\n padding: ${spacings.nudge * 3}px ${spacings.nudge * 3.5}px;\n padding-left: ${({ hasLeftIcon }) =>\n hasLeftIcon && spacings.spacer * 2.5 + 'px'};\n padding-right: ${({ hasRightIcon }) =>\n hasRightIcon && spacings.spacer * 2.5 + 'px'};\n color: inherit;\n\n background-color: transparent;\n box-shadow: none;\n border: none;\n border-right: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n font-family: ${({ theme }) => font(theme).copy.small.family};\n font-weight: 400;\n ${({ theme }) => withRange(font(theme).copy.small.size, 'font-size')}\n line-height: 1.25;\n\n &::placeholder {\n color: inherit;\n }\n`;\n\nconst ControlBtn = styled.button<{ isInverted?: boolean }>`\n display: inline-flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 53px;\n\n margin: -2px;\n background-color: transparent;\n color: ${({ theme }) => color(theme).dark};\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n /* transition: all ease-in-out 0.2s; */\n\n &:hover {\n transform: scale(1.02);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst SubmitBtn = styled(ControlBtn)`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n`;\n\nconst ClearBtn = styled(ControlBtn)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n`;\n\nconst SearchInput: FC<{\n isInverted?: boolean;\n value?: string;\n placeholder?: string;\n submitIcon?: React.ReactNode;\n clearIcon?: React.ReactNode;\n onSubmit?: () => void;\n onClear?: () => void;\n onClick?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onBlur?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onFocus?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n className?: string;\n}> = ({\n isInverted = false,\n value,\n placeholder,\n submitIcon,\n clearIcon,\n onSubmit,\n onClick,\n onClear,\n onBlur,\n onFocus,\n className,\n}) => {\n const handleKeyDown = (ev: React.KeyboardEvent<HTMLInputElement>) => {\n if (ev.keyCode === 13) {\n onSubmit && onSubmit();\n ev.preventDefault();\n }\n };\n\n return (\n <View isInverted={isInverted} className={className}>\n {submitIcon && (\n <SubmitBtn\n isInverted={isInverted}\n onClick={() => onSubmit && onSubmit()}\n >\n {submitIcon}\n </SubmitBtn>\n )}\n <InputField\n hasLeftIcon={submitIcon !== undefined}\n hasRightIcon={clearIcon !== undefined}\n placeholder={placeholder}\n value={value}\n onClick={onClick}\n onBlur={onBlur}\n onFocus={onFocus}\n onKeyDown={handleKeyDown}\n />\n {clearIcon && (\n <ClearBtn\n isInverted={isInverted}\n onClick={() => onClear && onClear()}\n >\n {clearIcon}\n </ClearBtn>\n )}\n </View>\n );\n};\n\nexport default SearchInput;\n","import { CookieConsentData } from 'components/blocks/CookieConsent';\nimport { Cookie } from './cookie';\nimport StatusFormatter from '../statusFormatter';\n\nexport const isUrlInWhitelist = (\n urlString: string,\n whitelist: string[] = []\n) => {\n let isInWhiteList = false;\n for (let i = 0; i < whitelist.length; i++) {\n if (urlString.indexOf(whitelist[i]) > -1) {\n isInWhiteList = true;\n break;\n }\n }\n return isInWhiteList;\n};\n\nexport const bindConsentButtons = (callback: () => void) => {\n const allConsentButtons = document.querySelectorAll(\n '[data-consent-button], .cookie-consent-button'\n );\n\n for (let i = 0, len = allConsentButtons.length; i < len; i++) {\n allConsentButtons[i].addEventListener('click', callback);\n }\n};\n\nexport const activateTrackingScripts = () => {\n const scriptElements = document.querySelectorAll(\n \"script[type='text/consent_banner_script'], script[type='text/cookie-consent-script']\"\n );\n\n let i = scriptElements.length;\n while (i--) {\n // create new script element to call it\n const newScriptElement = document.createElement('script');\n newScriptElement.type = 'text/javascript';\n newScriptElement.innerHTML = scriptElements[i].innerHTML;\n\n // append / activate script\n document.body.appendChild(newScriptElement);\n\n // delete old helper element\n if (scriptElements[i].parentNode) {\n // eslint-disable-next-line no-unused-expressions\n scriptElements[i].parentNode?.removeChild(scriptElements[i]);\n }\n }\n};\n\nexport const updateConsentStatusElements = ({\n cookie,\n status,\n dateFormat,\n timeFormat,\n localeKey = 'en',\n}: {\n cookie: Cookie<CookieConsentData>;\n status: string;\n dateFormat: string;\n timeFormat: string;\n localeKey: 'de' | 'en';\n}) => {\n const allConsentStatusElements = document.querySelectorAll(\n '[data-consent-status], .cookie-consent-status'\n );\n\n // render status inside defined dom elements without react\n const formatter = new StatusFormatter(\n cookie?.data.updatedAt,\n status,\n dateFormat,\n timeFormat,\n localeKey\n );\n\n for (let i = 0, len = allConsentStatusElements.length; i < len; i++) {\n allConsentStatusElements[i].innerHTML = formatter.getFormattedStatus();\n }\n};\n","import Actions from 'components/blocks/Actions';\nimport Copy from 'components/typography/Copy';\nimport React, { FC, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { Cookie, getCookie, setCookie } from 'utils/cookie-consent/cookie';\nimport {\n activateTrackingScripts,\n bindConsentButtons,\n isUrlInWhitelist,\n updateConsentStatusElements,\n} from 'utils/cookie-consent/mutations';\nimport { getColors as color, mq, spacings } from 'utils/styles';\n\nconst Stage = styled.div<{ zIndex?: number; bgOpacity?: number }>`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: rgba(0, 0, 0, ${({ bgOpacity }) => bgOpacity || 0.4});\n z-index: ${({ zIndex }) => zIndex || 1000};\n`;\n\nconst View = styled.div`\n box-sizing: border-box;\n max-width: 850px;\n width: 100vw;\n max-height: 100vh;\n padding: ${spacings.spacer}px ${spacings.spacer * 1.5}px;\n position: fixed;\n bottom: 0;\n left: 50%;\n transform: translate(-50%, 0);\n text-align: center;\n\n background-color: ${({ theme }) => color(theme).light};\n box-shadow: 0 2px 44px rgba(0, 0, 0, 0.3);\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n bottom: ${spacings.spacer * 1.5}px;\n }\n\n @media ${mq.medium} {\n padding: ${spacings.spacer * 2}px;\n }\n`;\n\nexport interface CookieConfig {\n cookieName?: string;\n\n /** URL's that should be excluded from consent */\n urlWhitelist?: string[];\n consentAcceptStatusMsg?: string;\n consentDeclineStatusMsg?: string;\n noCookieStatusMsg?: string;\n dateFormat?: string;\n timeFormat?: string;\n lifetime?: number;\n localeKey?: 'de' | 'en';\n zIndex?: number;\n overlayOpacity?: number;\n}\n\ntype RenderProps = {\n handleAccept: () => void;\n handleDecline: () => void;\n additionalDeclineProps: {\n ['data-gtm']: string;\n };\n additionalAcceptProps: {\n ['data-gtm']: string;\n };\n};\n\nexport interface CookieConsentData {\n consent: boolean;\n updatedAt: number;\n}\n\nexport const CookieConsent: FC<\n CookieConfig & {\n className?: string;\n children?: (props: RenderProps) => React.ReactElement;\n }\n> = ({\n cookieName = 'cookie-consent',\n urlWhitelist,\n consentAcceptStatusMsg = 'Akzeptiert am %DATE% um %TIME% Uhr',\n consentDeclineStatusMsg = 'Abgelehnt am %DATE% um %TIME% Uhr',\n noCookieStatusMsg = '-',\n dateFormat = 'dd.mm.yy',\n timeFormat = 'hh:mm',\n lifetime = 365,\n localeKey = 'de',\n zIndex,\n overlayOpacity = 0.4,\n className,\n children,\n}) => {\n const [isVisible, setIsVisible] = useState(false);\n\n useEffect(() => {\n bindConsentButtons(() => setIsVisible(true));\n\n const cookie = getCookie(cookieName) as Cookie<CookieConsentData>;\n const containsWhitelist = isUrlInWhitelist(\n window.location.pathname,\n urlWhitelist\n );\n if (!containsWhitelist) setIsVisible(!cookie);\n if (cookie && cookie.data.consent) {\n activateTrackingScripts();\n }\n }, [cookieName, urlWhitelist]);\n\n useEffect(() => {\n const cookie = getCookie(cookieName) as Cookie<CookieConsentData>;\n\n const str = !cookie\n ? noCookieStatusMsg\n : cookie.data.consent\n ? consentAcceptStatusMsg\n : consentDeclineStatusMsg;\n\n updateConsentStatusElements({\n cookie,\n status: str,\n dateFormat,\n timeFormat,\n localeKey,\n });\n }, [\n consentAcceptStatusMsg,\n consentDeclineStatusMsg,\n cookieName,\n dateFormat,\n isVisible,\n localeKey,\n noCookieStatusMsg,\n timeFormat,\n ]);\n\n if (!isVisible) return null;\n return (\n <Stage zIndex={zIndex} bgOpacity={overlayOpacity}>\n <View className={className}>\n {children &&\n children({\n handleDecline: () => {\n console.log('decline');\n setCookie<CookieConsentData>({\n name: cookieName,\n data: {\n consent: false,\n updatedAt: new Date().getTime(),\n },\n days: lifetime,\n });\n setIsVisible(false);\n },\n handleAccept: () => {\n console.log('accept');\n setCookie<CookieConsentData>({\n name: cookieName,\n data: {\n consent: true,\n updatedAt: new Date().getTime(),\n },\n days: lifetime,\n });\n setIsVisible(false);\n activateTrackingScripts();\n },\n additionalAcceptProps: {\n ['data-gtm']: 'button-cookie-consent-accept',\n },\n additionalDeclineProps: {\n ['data-gtm']: 'button-cookie-consent-decline',\n },\n })}\n </View>\n </Stage>\n );\n};\n\n/** Example Cookie icon */\nexport const CookieIcon = styled.img`\n display: block;\n margin: 0 auto;\n`;\n\n/** Example Cookie title */\nconst TitleView = styled(Copy)`\n max-width: 670px;\n margin-left: auto;\n margin-right: auto;\n`;\n\nexport const CookieTitle: FC<{\n innerHTML?: string;\n className?: string;\n}> = ({ innerHTML, className, children }) => {\n return (\n <TitleView\n size=\"big\"\n type=\"copy-b\"\n innerHTML={innerHTML}\n className={className}\n >\n {children}\n </TitleView>\n );\n};\n\n/** Example Cookie title */\nconst TextView = styled(Copy)`\n max-width: 670px;\n margin-left: auto;\n margin-right: auto;\n`;\n\nexport const CookieText: FC<{\n innerHTML?: string;\n className?: string;\n}> = ({ innerHTML, className, children }) => {\n return (\n <TextView innerHTML={innerHTML} className={className}>\n {children}\n </TextView>\n );\n};\n\n/** Example Cookie actions */\nexport const CookieActions = styled(Actions)`\n max-width: 670px;\n margin-top: ${spacings.spacer * 1.5}px;\n`;\n\nexport default CookieConsent;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Cross: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"35\"\n height=\"35\"\n viewBox=\"0 0 35 35\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M35 2.77995L32.2201 0 17.5 14.7201 2.77995 0 0 2.77995 14.7201 17.5 0 32.2201 2.77995 35 17.5 20.2799 32.2201 35 35 32.2201 20.2799 17.5 35 2.77995z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Cross;\n","import React, { FC, useContext } from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\n\nimport Wrapper from 'components/base/Wrapper';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\nimport Cross from 'components/base/icons/Cross';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { LogoProps } from '../Navigation';\n\nconst View = styled.div<{\n isOpen?: boolean;\n isMirrored?: boolean;\n isLarge?: boolean;\n}>`\n position: absolute;\n top: 0;\n left: ${({ isMirrored }) => !isMirrored && 0};\n right: ${({ isMirrored }) => isMirrored && 0};\n height: 100vh;\n width: 100%;\n overflow: hidden;\n pointer-events: none;\n\n ${({ isMirrored, isOpen, isLarge }) =>\n isLarge\n ? css`\n @keyframes showNav {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n display: ${isOpen ? 'block' : 'none'};\n animation: showNav 0.2s ease-in-out both;\n `\n : isMirrored && !isLarge\n ? css`\n transform: translate(${isOpen ? '0%' : '100%'});\n `\n : css`\n transform: translate(${isOpen ? '0%' : '-100%'});\n `}\n\n transition: transform 0.2s cubic-bezier(0.71, 0, 0.29, 1);\n will-change: transform;\n`;\n\nconst StyledWrapper = styled(Wrapper)`\n height: 100%;\n`;\n\nconst Stage = styled.div<{\n isOpen?: boolean;\n isLarge?: boolean;\n isInverted?: boolean;\n isMirrored?: boolean;\n}>`\n height: 100%;\n width: 100%;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).dark : color(theme).light};\n pointer-events: all;\n\n @media ${mq.semilarge} {\n width: ${({ isLarge }) => !isLarge && '40vw'};\n max-width: ${({ isLarge }) => (isLarge ? undefined : '500px')};\n }\n\n ${({ isMirrored, isInverted, isLarge }) =>\n isMirrored\n ? css`\n margin-left: auto;\n margin-right: 0;\n\n &:before {\n content: ${!isLarge && `\"\"`};\n position: absolute;\n top: 0;\n right: 1px;\n bottom: 0;\n width: 40vw;\n z-index: -1;\n\n transform: translateX(100%);\n\n background-color: ${({ theme }) =>\n isInverted ? color(theme).dark : color(theme).light};\n }\n `\n : css`\n &:after {\n content: ${!isLarge && `\"\"`};\n position: absolute;\n top: 0;\n left: 1px;\n bottom: 0;\n width: 40vw;\n\n transform: translateX(-100%);\n\n background-color: ${({ theme }) =>\n isInverted ? color(theme).dark : color(theme).light};\n }\n `}\n`;\n\nconst Header = styled.div`\n display: flex;\n max-width: ${spacings.wrapper}px;\n\n padding-top: ${spacings.spacer}px;\n padding-bottom: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 7}px 0 ${spacings.nudge * 3}px 0;\n }\n`;\n\nconst Content = styled.div<{ isLarge?: boolean }>`\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n max-width: ${spacings.wrapper}px;\n margin: 0 auto;\n\n padding-left: ${spacings.spacer}px;\n padding-bottom: ${spacings.nudge * 3}px;\n\n @media ${mq.semilarge} {\n padding-left: ${(1 / 28) * 100}%;\n padding-left: max(${spacings.spacer}px, ${(1 / 28) * 100}vw);\n padding-right: ${({ isLarge }) => isLarge && spacings.spacer + 'px'};\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst HeaderCol = styled.div`\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n position: relative;\n color: ${({ theme }) => color(theme).light};\n\n transition: padding-top 0.2s ease-in-out;\n`;\n\nconst LeftCol = styled(HeaderCol)<{ isMirrored?: boolean; isLarge?: boolean }>`\n flex: 1;\n justify-content: flex-start;\n align-self: flex-start;\n text-align: left;\n\n padding-right: ${({ isMirrored }) => isMirrored && spacings.spacer}px;\n\n ${withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n\n @media ${mq.semilarge} {\n display: ${({ isMirrored, isLarge }) =>\n isMirrored && isLarge && 'none'};\n }\n`;\n\nconst CenterCol = styled(HeaderCol)`\n padding: 0 ${spacings.nudge * 2}px;\n text-align: center;\n`;\n\nconst RightCol = styled(HeaderCol)`\n flex: 1;\n justify-content: flex-end;\n text-align: right;\n\n ${withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n\n & > * {\n min-width: auto;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n }\n`;\n\nconst ToggleContainer = styled.div<{\n iconColor?: string;\n isMirrored?: boolean;\n}>`\n cursor: pointer;\n padding: ${spacings.nudge * 2}px;\n /* padding-right: ${({ isMirrored }) => isMirrored && spacings.spacer}px; */\n margin: -${spacings.nudge * 2}px;\n\n color: ${({ iconColor }) => iconColor && iconColor};\n`;\n\nconst StyledMenuClose = styled(Cross)<{ isMirrored?: boolean }>`\n margin-top: ${spacings.nudge}px;\n`;\n\nconst SearchContainer = styled.div<{ isLarge?: boolean; isMirrored?: boolean }>`\n display: ${({ isLarge, isMirrored }) =>\n isMirrored && isLarge ? 'contents' : 'flex'};\n justify-content: center;\n width: 100%;\n padding-left: ${({ isMirrored }) => !isMirrored && spacings.spacer}px;\n padding-right: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n & > * {\n max-width: ${({ isLarge }) => isLarge && '355px'};\n }\n }\n`;\n\nconst LogoLink = styled(Link)`\n display: flex;\n justify-content: center;\n position: relative;\n\n color: ${({ theme }) => color(theme).light};\n transition: height 0.2s ease-in-out, width 0.2s ease-in-out;\n will-change: height, width;\n\n & > * {\n max-height: 100%;\n height: 100%;\n }\n`;\n\nconst ScrollArea = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n height: 100%;\n overflow-y: auto;\n\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')};\n margin-left: -${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n padding-bottom: ${spacings.spacer * 4.5}px;\n\n & > * {\n flex: 1 1 auto;\n flex-shrink: 0;\n }\n`;\n\nconst MirroredLargeContainerDesktop = styled(HeaderCol)`\n display: none;\n\n @media ${mq.semilarge} {\n display: flex;\n\n justify-content: flex-end;\n padding-left: ${spacings.spacer}px;\n\n ${withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n }\n`;\n\ntype FlyoutMq = 'semilarge' | 'large';\n\nconst Flyout: FC<{\n isOpen?: boolean;\n isLarge?: boolean;\n isInverted?: boolean;\n isMirrored?: boolean;\n toggleIcon?: (isInverted?: boolean) => React.ReactNode;\n logo?: LogoProps;\n primaryAction?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n secondaryAction?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n search?: (isInverted?: boolean) => React.ReactNode;\n onCloseClick?: () => void;\n className?: string;\n}> = ({\n isOpen = false,\n isLarge = false,\n isInverted = false,\n isMirrored = false,\n toggleIcon,\n logo,\n primaryAction,\n secondaryAction,\n search,\n onCloseClick,\n className,\n children,\n}) => {\n const theme = useContext(ThemeContext);\n const mqs: FlyoutMq[] = ['semilarge', 'large'];\n const currentMq = useMediaQuery(mqs) as FlyoutMq | undefined;\n\n return (\n <View\n isOpen={isOpen}\n className={className}\n isMirrored={isMirrored}\n isLarge={isLarge}\n >\n <StyledWrapper clampWidth={isLarge ? 'large' : 'normal'}>\n <Stage\n isOpen={isOpen}\n isLarge={isLarge}\n isInverted={isInverted}\n isMirrored={isMirrored}\n >\n <Content isLarge={isLarge}>\n <Header>\n {isMirrored && !isLarge ? (\n <LeftCol isMirrored>\n {search && (\n <SearchContainer isMirrored>\n {search(isInverted)}\n </SearchContainer>\n )}\n <ToggleContainer\n onClick={onCloseClick}\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {toggleIcon ? (\n toggleIcon(isInverted)\n ) : (\n <StyledMenuClose\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n )}\n </ToggleContainer>\n </LeftCol>\n ) : isMirrored && isLarge ? (\n <LeftCol isMirrored isLarge>\n {search && (\n <SearchContainer isMirrored>\n {search(isInverted)}\n </SearchContainer>\n )}\n <ToggleContainer\n onClick={onCloseClick}\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {toggleIcon ? (\n toggleIcon(isInverted)\n ) : (\n <StyledMenuClose\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n )}\n </ToggleContainer>\n </LeftCol>\n ) : (\n <LeftCol>\n <ToggleContainer\n onClick={onCloseClick}\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {toggleIcon ? (\n toggleIcon(isInverted)\n ) : (\n <StyledMenuClose\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n )}\n </ToggleContainer>\n {search && (\n <SearchContainer isLarge={isLarge}>\n {search(isInverted)}\n </SearchContainer>\n )}\n </LeftCol>\n )}\n\n {isLarge &&\n (currentMq === 'semilarge' ||\n currentMq === 'large') && (\n <>\n <CenterCol>\n {logo && (\n <LogoLink href={logo.link}>\n {logo.icon &&\n logo.icon({\n isInverted: isInverted,\n name: 'menu_logo',\n size:\n currentMq !==\n 'large'\n ? 'small'\n : 'full',\n })}\n </LogoLink>\n )}\n </CenterCol>\n <RightCol>\n {search && isMirrored && isLarge && (\n <SearchContainer\n isMirrored\n isLarge\n >\n {search(isInverted)}\n </SearchContainer>\n )}\n {secondaryAction &&\n secondaryAction({\n isInverted,\n name: 'menu_secondaryCta',\n size:\n currentMq === 'large'\n ? 'desktop'\n : 'mobile',\n })}\n {primaryAction &&\n primaryAction({\n isInverted,\n name: 'menu_primaryCta',\n size:\n currentMq === 'large'\n ? 'desktop'\n : 'mobile',\n })}\n {isMirrored && isLarge && (\n <MirroredLargeContainerDesktop>\n <ToggleContainer\n onClick={onCloseClick}\n iconColor={\n isInverted\n ? color(theme)\n .light\n : color(theme)\n .dark\n }\n >\n {toggleIcon ? (\n toggleIcon(\n isInverted\n )\n ) : (\n <StyledMenuClose\n iconColor={\n isInverted\n ? color(\n theme\n )\n .light\n : color(\n theme\n ).dark\n }\n />\n )}\n </ToggleContainer>\n </MirroredLargeContainerDesktop>\n )}\n </RightCol>\n </>\n )}\n </Header>\n <ScrollArea>{children}</ScrollArea>\n </Content>\n </Stage>\n </StyledWrapper>\n </View>\n );\n};\n\nexport interface NavGroup {\n id: string;\n name?: string;\n isSmall?: boolean;\n items?: NavItem[];\n}\n\nexport interface NavItem {\n id?: string;\n label?: string;\n link?: LinkProps;\n onClick?: (id?: string, fullId?: string) => void;\n}\n\nconst NavListView = styled.ul<{ isLarge?: boolean }>`\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n\n list-style: none;\n padding: 0;\n margin: 0;\n\n & > * {\n ${withRange([spacings.nudge * 3, spacings.spacer], 'margin-top')};\n }\n\n @media ${mq.medium} {\n flex-direction: ${({ isLarge }) => (isLarge ? 'row' : 'column')};\n\n & > * {\n flex: ${({ isLarge }) => (isLarge ? '1 0 260px' : '1')};\n }\n }\n`;\n\nconst Nav = styled.nav<{ isInverted?: boolean }>`\n display: block;\n width: calc(100% + ${spacings.spacer}px);\n margin-left: -${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n`;\n\nconst Group = styled.li`\n flex: 1 1 auto;\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: 300;\n line-height: ${({ theme }) => font(theme).copy.medium.lineHeight};\n\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-right')};\n\n hyphens: auto;\n overflow-wrap: break-word;\n\n &:not(:last-child) {\n ${withRange([spacings.nudge * 3, spacings.spacer], 'margin-bottom')};\n }\n`;\n\nconst GroupLabel = styled.label`\n display: block;\n height: 30px;\n padding-bottom: ${spacings.nudge * 2}px;\n`;\n\nconst GroupLabelSpacer = styled.label`\n display: none;\n height: 30px;\n\n @media ${mq.medium} {\n display: block;\n }\n`;\n\nconst ItemContainer = styled.ul`\n list-style: none;\n margin: 0;\n padding: 0;\n color: inherit;\n`;\n\nconst NavItem = styled.li<{ isSmall?: boolean }>`\n position: relative;\n margin: 0;\n padding-bottom: ${spacings.nudge}px;\n\n font-family: ${({ theme }) => font(theme)['heading-3'].family};\n ${({ theme, isSmall }) =>\n withRange(\n isSmall\n ? font(theme)['heading-4'].size\n : font(theme)['heading-3'].size,\n 'font-size'\n )}\n font-weight: 700;\n line-height: ${({ theme, isSmall }) =>\n isSmall\n ? font(theme)['heading-4'].lineHeight\n : font(theme)['heading-3'].lineHeight};\n\n color: inherit;\n hyphens: auto;\n overflow-wrap: break-word;\n cursor: pointer;\n user-select: none;\n\n & + & {\n padding-top: ${spacings.nudge}px;\n }\n\n & > li {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n`;\n\nconst ItemLink = styled(Link)`\n display: inline-block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n`;\n\nconst ItemLabel = styled.label<{ isActive?: boolean; isInverted?: boolean }>`\n display: inline-block;\n position: relative;\n border-bottom: solid 2px transparent;\n pointer-events: none;\n\n transition: border 0.2s ease-in-out;\n\n ${ItemLink}:hover + & {\n border-bottom: solid 2px ${({ theme }) => color(theme).primary.medium};\n }\n\n &:before {\n content: ${({ isActive }) => (isActive ? `\"\"` : undefined)};\n position: absolute;\n left: -13px;\n top: 50%;\n height: 6px;\n width: 6px;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 4px;\n\n transform: translateY(-50%);\n }\n`;\n\nconst NavList: FC<{\n isInverted?: boolean;\n activeNavItem?: string;\n navGroups?: NavGroup[];\n isLarge?: boolean;\n className?: string;\n}> = ({\n isInverted = false,\n activeNavItem,\n navGroups,\n isLarge = false,\n className,\n}) => {\n const [activeGroup, activeItem] = activeNavItem\n ? activeNavItem?.split('.')\n : [];\n\n return (\n <Nav isInverted={isInverted}>\n <NavListView isLarge={isLarge} className={className}>\n {navGroups &&\n navGroups.map((group, i) => (\n <Group key={i}>\n {group.name ? (\n <GroupLabel>{group.name}</GroupLabel>\n ) : (\n isLarge && <GroupLabelSpacer />\n )}\n <ItemContainer>\n {group.items &&\n group.items\n .filter((item) => {\n return item.label && item.link;\n })\n .map((item, itemIndex) => (\n <NavItem\n key={itemIndex}\n isSmall={group.isSmall}\n onClick={() =>\n item.onClick &&\n item.onClick(\n item.id,\n group.id + '.' + item.id\n )\n }\n >\n <ItemLink {...item.link} />\n <ItemLabel\n isActive={\n activeGroup ===\n group.id &&\n activeItem === item.id\n }\n isInverted={isInverted}\n >\n {item.label}\n </ItemLabel>\n </NavItem>\n ))}\n </ItemContainer>\n </Group>\n ))}\n </NavListView>\n </Nav>\n );\n};\n\nexport default {\n View: Flyout,\n NavList: NavList,\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { mq, spacings } from 'utils/styles';\nimport Flyout, { NavGroup } from './Flyout';\nimport SocialList from 'components/blocks/SocialList';\nimport { LogoProps } from '../Navigation';\n\nconst View = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n width: 100%;\n z-index: 10;\n`;\n\nconst Backdrop = styled.div<{\n isVisible?: boolean;\n opacity?: number;\n}>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100vh;\n background-color: rgba(\n 0,\n 0,\n 0,\n ${({ isVisible, opacity }) => (isVisible ? opacity : 0)}\n );\n\n pointer-events: ${({ isVisible }) => !isVisible && 'none'};\n transition: background-color 0.2s ease-in-out;\n`;\n\nconst SocialContainer = styled.div<{ isLarge?: boolean }>`\n display: flex;\n justify-content: flex-start;\n padding-top: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n justify-content: ${({ isLarge }) =>\n isLarge ? 'flex-end' : 'flex-start'};\n }\n\n @media ${mq.xlarge} {\n padding-right: ${({ isLarge }) => isLarge && spacings.spacer}px;\n }\n`;\ninterface MenuProps {\n isOpen?: boolean;\n size?: 'small' | 'full';\n isInverted?: boolean;\n isMirrored?: boolean;\n backdropOpacity?: number;\n toggleIcon?: (isInverted?: boolean) => React.ReactNode;\n logo?: LogoProps;\n primaryAction?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n secondaryAction?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n search?: (isInverted?: boolean) => React.ReactNode;\n activeNavItem?: string;\n navItems?: NavGroup[];\n socials?: Array<{ icon: React.ReactNode; href: string }>;\n onCloseClick?: () => void;\n}\n\nconst Menu: FC<MenuProps> = ({\n isOpen = false,\n size = 'small',\n isInverted = false,\n isMirrored = false,\n backdropOpacity = 0.4,\n toggleIcon,\n logo,\n primaryAction,\n secondaryAction,\n search,\n activeNavItem,\n navItems,\n socials,\n onCloseClick,\n}) => {\n return (\n <View>\n <Backdrop\n isVisible={isOpen}\n opacity={backdropOpacity}\n onClick={onCloseClick}\n />\n <Flyout.View\n isOpen={isOpen}\n isMirrored={isMirrored}\n isLarge={size === 'full'}\n isInverted={isInverted}\n onCloseClick={onCloseClick}\n toggleIcon={toggleIcon}\n logo={logo}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n search={search}\n >\n {navItems && (\n <Flyout.NavList\n activeNavItem={activeNavItem}\n navGroups={navItems}\n isLarge={size === 'full'}\n isInverted={isInverted}\n />\n )}\n {socials && (\n <SocialContainer isLarge={size === 'full'}>\n <SocialList\n isInverted={isInverted}\n items={socials.map((item) => {\n return {\n href: item.href,\n icon: item.icon,\n };\n })}\n />\n </SocialContainer>\n )}\n </Flyout.View>\n </View>\n );\n};\n\nexport default Menu;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst MenuBurger: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"31\"\n height=\"37\"\n viewBox=\"0 0 31 37\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fill={iconColor}\n d=\"M3.89556 33.59887c.05495.10804.10504.22107.15029.33926.04848.11472.09534.23122.14059.34932a11.78855 11.78855 0 01.1406-.35946c.04847-.1181.10018-.23122.15513-.33917l2.0749-4.0556c.02587-.05064.05172-.09113.07758-.12147.02909-.03035.0598-.05234.0921-.06587.03557-.01343.07435-.02189.11637-.02527s.0921-.00507.15028-.00507h.98413v7.32121H6.8286V31.9078c0-.08775.00162-.18396.00485-.28853a11.4408 11.4408 0 01.02423-.31897L4.73916 35.452c-.04848.09452-.1115.16874-.18907.22277-.07757.05064-.16806.0759-.2715.0759h-.17936c-.10343 0-.19392-.02526-.2715-.0759-.07755-.05403-.14059-.12825-.18906-.22277l-2.1476-4.16692c.01292.11143.021.22107.02423.32912.00647.10457.0097.20247.0097.2936v4.72895H.37607v-7.32121h.98413c.05817 0 .10827.00169.15028.00507s.07918.01184.11151.02527c.03555.01353.06787.03552.09696.06587s.05655.07083.08241.12147zM14.68715 29.31574v1.08346H11.5796v2.03034h2.44823v1.04805h-2.44823v2.07082h3.10754v1.08854h-4.42137v-7.32121zM17.37336 29.31574c.05815 0 .10665.00338.14539.01014.03883.00339.07279.01353.10186.03035.0323.01353.06304.03542.09211.06586.02908.02696.06138.06408.097.11133l3.6796 4.896a6.80536 6.80536 0 01-.02917-.34424c-.00322-.11481-.00478-.22107-.00478-.31897v-4.45047h1.14893v7.32121h-.67384c-.10343 0-.1891-.01691-.25692-.05064-.0679-.03373-.13416-.09452-.19875-.18227l-3.66508-4.8757c.00966.10795.0161.216.01932.32404.00654.10457.00976.20078.00976.28853v4.49604h-1.14903v-7.32121zM27.71523 35.53797c.25213 0 .47675-.04388.67385-.13163.20041-.08775.36843-.21103.50416-.36962.13904-.15869.24403-.351.31516-.57725.07436-.22614.11153-.47925.11153-.75942v-4.38461h1.30408v4.3846c0 .43549-.06791.83883-.20364 1.21013-.1325.36792-.32482.6869-.57686.95691-.25213.26664-.55753.47587-.91631.6278-.35869.14854-.76274.22276-1.21197.22276s-.85329-.07422-1.21197-.22276c-.35878-.15193-.66418-.36116-.91632-.6278-.2488-.27002-.44113-.58899-.57685-.9569-.1325-.37131-.19876-.77465-.19876-1.21013v-4.38461h1.30408v4.37954c0 .28016.03551.53337.10664.75952.07436.22614.17935.42015.31507.58222.13582.1586.30219.28187.49938.36962.20042.08775.4266.13163.67873.13163z\"\n />\n <path\n fill={iconColor}\n d=\"M.37597 1.2769h30.24794M7.25006 11.0904H30.6239M.37597 20.90398h30.24794M.37597.28198v1.98984h30.24794V.28198zm6.874 9.8132V12.085H30.6238v-1.98984zm-6.874 9.81319v1.98984h30.24794v-1.98984z\"\n />\n </SVG>\n);\n\nexport default MenuBurger;\n","import MenuBurger from 'components/base/icons/MenuBurger';\nimport Wrapper from 'components/base/Wrapper';\nimport Link from 'components/typography/Link';\nimport React, { FC, useContext, useEffect, useRef, useState } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { spacings, getColors as color, mq, withRange } from 'utils/styles';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { ScrollDirection, useScroll } from 'utils/useScroll';\nimport { LogoProps } from './Navigation';\n\nconst TopWhitespace = styled.div<{ height?: number; showLarge?: boolean }>`\n width: 100%;\n height: ${({ height, showLarge }) =>\n height ? height + (showLarge ? 25 : 10) + 'px' : '140px'};\n\n @media ${mq.large} {\n height: ${({ height, showLarge }) =>\n height ? height + (showLarge ? 50 : 30) + 'px' : '140px'};\n }\n`;\n\nconst View = styled.div<{\n isVisible?: boolean;\n isLarge?: boolean;\n isTop?: boolean;\n isOpen?: boolean;\n isInverted?: boolean;\n animated?: boolean;\n allowOffset?: boolean;\n isBackVisible?: boolean;\n showLarge?: boolean;\n}>`\n display: flex;\n align-items: ${({ showLarge }) => !showLarge && 'center'};\n position: ${({ isLarge }) => (isLarge ? 'absolute' : 'fixed')};\n top: 0;\n left: 0;\n right: 0;\n width: 100%;\n z-index: 10;\n max-width: ${spacings.wrapperLarge}px;\n min-height: ${({ isLarge, showLarge }) =>\n showLarge && isLarge ? '111px' : '95px'};\n padding: ${({ showLarge, isOpen }) =>\n !showLarge && isOpen ? spacings.nudge : spacings.spacer}px\n 0 ${spacings.nudge}px 0;\n margin: 0 auto;\n overflow: hidden;\n\n background-color: ${({\n theme,\n isInverted,\n isLarge,\n isBackVisible,\n allowOffset,\n }) =>\n isBackVisible\n ? isInverted\n ? (!isLarge || !allowOffset) &&\n `rgba(0, 0, 0, ${!isLarge ? 0.3 : 0})`\n : (!isLarge || !allowOffset) && color(theme).light\n : 'transparent'};\n\n box-shadow: 0px 4px 4px\n ${({ isInverted, isLarge, isOpen, isBackVisible }) =>\n isInverted || !isBackVisible\n ? `transparent`\n : isOpen && !isLarge\n ? `rgba(0, 0, 0, 0.13)`\n : 'transparent'};\n\n opacity: ${({ isVisible }) => (isVisible ? 1 : 0)};\n pointer-events: ${({ isVisible }) => (isVisible ? 'all' : 'none')};\n\n transform: translate(0, ${({ isOpen }) => (!isOpen ? '-100%' : '0')});\n\n transition: ${({ animated }) =>\n animated ? 'transform 0.3s cubic-bezier(.71,0,.29,1),' : ''}\n height 0.2s ease-in-out,\n background-color 0.3s ease-in-out, padding 0.2s ease-in-out,\n box-shadow 0.2s ease-in-out, opacity 0.2s ease-in-out;\n will-change: transform, background-color, padding, height, box-shadow,\n opacity;\n\n @media ${mq.semilarge} {\n padding: ${({ showLarge, isOpen }) =>\n !showLarge && isOpen\n ? spacings.nudge * 3\n : spacings.nudge * 7}px\n 0 ${spacings.nudge * 3}px 0;\n }\n\n @media ${mq.large} {\n min-height: ${({ isLarge, showLarge }) =>\n isLarge && showLarge ? '136px' : '115px'};\n }\n`;\n\nconst Content = styled(Wrapper)`\n position: relative;\n display: flex;\n flex-direction: row;\n width: 100%;\n height: 100%;\n\n padding: 0 ${({ addWhitespace }) => (addWhitespace ? spacings.spacer : 0)}px;\n\n @media ${mq.semilarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * 100 : 0}%;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * spacings.wrapper : 0}px;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n`;\n\nconst Column = styled.div<{\n isTop?: boolean;\n}>`\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n position: relative;\n color: ${({ theme }) => color(theme).light};\n\n transition: padding-top 0.2s ease-in-out;\n`;\n\nconst LeftCol = styled(Column)`\n flex: 1;\n justify-content: flex-start;\n align-self: ${({ isTop }) => (isTop ? 'flex-start' : 'center')};\n text-align: left;\n\n ${({ isTop }) =>\n isTop &&\n withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n`;\n\nconst CenterCol = styled(Column)`\n display: flex;\n align-self: ${({ isTop }) => (isTop ? 'flex-start' : 'center')};\n padding: 0 ${spacings.nudge * 2}px;\n text-align: center;\n`;\n\nconst RightCol = styled(Column)`\n flex: 1;\n justify-content: flex-end;\n align-self: ${({ isTop }) => (isTop ? 'flex-start' : 'center')};\n text-align: right;\n\n ${({ isTop }) =>\n isTop &&\n withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n\n & > * {\n min-width: auto;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n }\n`;\n\nconst ToggleContainer = styled.div<{\n iconColor?: string;\n isMirrored?: boolean;\n}>`\n cursor: pointer;\n padding: ${spacings.nudge * 2}px;\n margin: ${({ isMirrored }) => !isMirrored && -spacings.nudge * 2}px;\n\n color: ${({ iconColor }) => iconColor && iconColor};\n`;\n\nconst StyledMenuBurger = styled(MenuBurger)`\n margin-top: ${spacings.nudge}px;\n`;\n\nconst LogoLink = styled(Link)<{ logoHeight?: number; isAnimated?: boolean }>`\n display: flex;\n justify-content: center;\n position: relative;\n height: ${({ logoHeight }) => logoHeight && logoHeight + 'px'};\n width: auto;\n\n color: ${({ theme }) => color(theme).light};\n transition: ${({ isAnimated }) =>\n isAnimated && 'height 0.2s ease-in-out, width 0.2s ease-in-out'};\n will-change: height, width;\n\n & > * {\n max-height: 100%;\n height: 100%;\n }\n`;\n\nconst clampValue = (num: number, min: number, max: number) => {\n return Math.min(Math.max(num, min), max);\n};\n\ntype TopBarMq = 'semilarge' | 'large';\n\nconst TopBar: FC<{\n isVisible?: boolean;\n isBackVisible?: boolean;\n isInverted?: boolean;\n isMirrored?: boolean;\n allowTopOverlow?: boolean;\n isLargeOnPageTop?: boolean;\n onToggleClick?: () => void;\n toggleIcon?: (isInverted?: boolean) => React.ReactNode;\n logo?: LogoProps;\n primaryAction?: (props: {\n isInverted?: boolean;\n size?: 'mobile' | 'desktop';\n name?: string;\n }) => React.ReactNode;\n secondaryAction?: (props: {\n isInverted?: boolean;\n size?: 'mobile' | 'desktop';\n name?: string;\n }) => React.ReactNode;\n className?: string;\n}> = ({\n isVisible = true,\n isInverted = false,\n isMirrored = false,\n isBackVisible = true,\n allowTopOverlow = true,\n isLargeOnPageTop = true,\n onToggleClick,\n toggleIcon,\n logo,\n primaryAction,\n secondaryAction,\n className,\n}) => {\n const theme = useContext(ThemeContext);\n const viewRef = useRef<HTMLDivElement | null>(null);\n const [isOpen, setIsOpen] = useState(true);\n const [isLarge, setIsLarge] = useState<boolean>(isLargeOnPageTop);\n const [isAnimated, setIsAnimated] = useState(false);\n const defaultLogoScale: Pick<\n LogoProps,\n 'pageTopScale' | 'scrolledScale'\n > = {\n pageTopScale: {\n mobile: 1,\n desktop: 1,\n ...logo?.pageTopScale,\n },\n scrolledScale: {\n mobile: 0.6,\n desktop: 0.6,\n ...logo?.scrolledScale,\n },\n };\n\n const mqs: TopBarMq[] = ['semilarge', 'large'];\n const currentMq = useMediaQuery(mqs) as TopBarMq | undefined;\n\n const { isTop, isInOffset, scrollDirection, setTopOffset } = useScroll({});\n\n useEffect(() => {\n setIsAnimated(true);\n }, []);\n\n useEffect(() => {\n if (!isInOffset) {\n if (scrollDirection === ScrollDirection.UP) {\n setIsOpen(true);\n setIsAnimated(true);\n } else if (scrollDirection === ScrollDirection.DOWN) {\n setIsOpen(false);\n }\n }\n }, [isInOffset, scrollDirection]);\n\n useEffect(() => {\n if (!isInOffset && !isTop) {\n setIsLarge((prev) => {\n if (prev) setIsAnimated(false);\n return false;\n });\n }\n }, [isInOffset, isLarge, isTop]);\n\n useEffect(() => {\n if (isTop) setIsLarge(true);\n }, [isLargeOnPageTop, isTop]);\n\n // check if top bar is inverted\n const isBarInverted =\n (isLarge && allowTopOverlow) || isInverted || !isBackVisible;\n\n // get scale factor of topbar logo\n let logoScale = 1;\n // get scale for current media query\n const scalePageTop =\n defaultLogoScale.pageTopScale?.[\n currentMq === 'large' ? 'desktop' : 'mobile'\n ];\n const scaleScrolled =\n defaultLogoScale.scrolledScale?.[\n currentMq === 'large' ? 'desktop' : 'mobile'\n ];\n\n const scale = (isLargeOnPageTop ? isLarge : false)\n ? scalePageTop\n : scaleScrolled;\n if (scale !== undefined) logoScale = scale;\n\n // calc logo height\n const logoHeight = clampValue(115 * logoScale, 20, 300);\n const logoTopHeight =\n scalePageTop && scaleScrolled\n ? clampValue(\n 115 * (isLargeOnPageTop ? scalePageTop : scaleScrolled),\n 20,\n 300\n )\n : 60;\n const topSpace = clampValue(logoTopHeight, 86, 300);\n\n // calculate top scroll offset\n useEffect(() => {\n if (currentMq === 'large') {\n setTopOffset(topSpace + (isLarge ? 25 : 10));\n } else {\n setTopOffset(topSpace + (isLarge ? 50 : 30));\n }\n }, [setTopOffset, currentMq, isLarge, topSpace]);\n\n return (\n <>\n {!allowTopOverlow && (\n <TopWhitespace showLarge={isLargeOnPageTop} height={topSpace} />\n )}\n <View\n ref={viewRef}\n isInverted={isInverted}\n isVisible={isVisible}\n isBackVisible={isBackVisible}\n isOpen={isOpen}\n isLarge={isLarge}\n animated={isAnimated}\n allowOffset={allowTopOverlow}\n showLarge={isLargeOnPageTop ? isLarge : false}\n className={className}\n >\n <Content clampWidth=\"normal\" addWhitespace>\n {!isMirrored && (\n <LeftCol isTop={isLargeOnPageTop ? isLarge : false}>\n <ToggleContainer\n onClick={onToggleClick}\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {toggleIcon ? (\n toggleIcon(isBarInverted)\n ) : (\n <StyledMenuBurger\n iconColor={\n isBarInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n )}\n </ToggleContainer>\n </LeftCol>\n )}\n <CenterCol isTop={isLargeOnPageTop ? isLarge : false}>\n {logo && (\n <LogoLink\n href={logo.link}\n logoHeight={logoHeight}\n isAnimated={isAnimated}\n >\n {logo.icon &&\n logo.icon({\n isInverted: isBarInverted,\n name: 'topbar_logo',\n size:\n currentMq !== 'large' ||\n !(isLargeOnPageTop\n ? isLarge\n : false)\n ? 'small'\n : 'full',\n })}\n </LogoLink>\n )}\n </CenterCol>\n <RightCol isTop={isLargeOnPageTop ? isLarge : false}>\n {secondaryAction &&\n secondaryAction({\n isInverted: isBarInverted,\n name: 'topbar_secondaryCta',\n size:\n currentMq === 'large'\n ? 'desktop'\n : 'mobile',\n })}\n {primaryAction &&\n primaryAction({\n isInverted: isBarInverted,\n name: 'topbar_primaryCta',\n size:\n currentMq === 'large'\n ? 'desktop'\n : 'mobile',\n })}\n {isMirrored && (\n <ToggleContainer\n onClick={onToggleClick}\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n isMirrored\n >\n {toggleIcon ? (\n toggleIcon(isBarInverted)\n ) : (\n <StyledMenuBurger\n iconColor={\n isBarInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n )}\n </ToggleContainer>\n )}\n </RightCol>\n </Content>\n </View>\n </>\n );\n};\n\nexport default TopBar;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowRight: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"18\"\n height=\"13\"\n viewBox=\"0 0 18 13\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M1.85397 7.42546H14.5657L10.533 11.4322c-.1753.1887-.263.4064-.263.6532 0 .2468.0877.4646.263.6533.1899.1742.4091.2613.6575.2613.2484 0 .4676-.0871.6575-.2613l5.6107-5.57454c.0438-.05807.0876-.10888.1315-.15243.0438-.04356.0657-.08711.0657-.13066.0439-.10162.0658-.21775.0658-.34841 0-.13065-.0219-.2613-.0658-.39196-.0438-.05806-.0767-.10887-.0986-.15242-.0219-.04356-.0548-.08711-.0986-.13066L11.848.28308c-.0877-.10162-.1826-.1742-.2849-.21775C11.4608.02178 11.3366 0 11.1905 0c-.1315 0-.2484.02178-.3507.06533s-.2045.11613-.3068.21775c-.1753.18873-.263.40648-.263.65327s.0877.46454.263.65327l4.0327 3.98492H1.85397c-.29223 0-.52235.08347-.69038.25042s-.25204.39559-.25204.68593c0 .27582.08401.49721.25204.66415.16803.16695.39815.25042.69038.25042z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default ArrowRight;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst CrossSmall: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 35 35\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M35 2.77995L32.2201 0 17.5 14.7201 2.77995 0 0 2.77995 14.7201 17.5 0 32.2201 2.77995 35 17.5 20.2799 32.2201 35 35 32.2201 20.2799 17.5 35 2.77995z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default CrossSmall;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Magnifier: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M19.6955 18.267l-4.4964-4.4965c.5464-.687.9836-1.491 1.3114-2.4122.3279-.9211.4918-1.88132.4918-2.88055 0-1.17096-.2263-2.27165-.6791-3.3021-.4372-1.03045-1.0422-1.92818-1.815-2.69321-.7728-.76504-1.6745-1.37393-2.7049-1.8267C10.7728.21858 9.67214 0 8.50117 0S6.22951.21858 5.19906.65574c-1.03045.45277-1.93208 1.06166-2.70492 1.8267-.77283.76503-1.37782 1.66276-1.81498 2.69321C.22638 6.2061 0 7.30679 0 8.47775c0 1.18658.22638 2.29505.67916 3.32555.43716 1.0304 1.04215 1.9282 1.81498 2.6932.77284.765 1.67447 1.3739 2.70492 1.8267 1.03045.4371 2.13114.6557 3.30211.6557.99922 0 1.94383-.1639 2.83373-.4918.8899-.3278 1.7096-.765 2.459-1.3115l4.4965 4.4965c.1093.1093.2303.1874.363.2342.1327.0469.2459.0703.3396.0703s.2068-.0234.3396-.0703c.1327-.0468.2537-.1249.3629-.2342.203-.2029.3045-.4371.3045-.7025 0-.2655-.1015-.4996-.3045-.7026zM2.01405 8.47775c0-.88993.16393-1.73301.4918-2.52927.34349-.78065.80796-1.4676 1.39345-2.06089.58548-.59329 1.27634-1.05386 2.0726-1.38173.78064-.34349 1.62372-.51523 2.52927-.51523.90555 0 1.74863.17174 2.52923.51523.7963.32787 1.4872.78844 2.0726 1.38173.5855.59329 1.05 1.28024 1.3935 2.06089.3279.79626.4918 1.63934.4918 2.52927 0 .90555-.1639 1.74865-.4918 2.52925-.3279.7807-.7963 1.4754-1.4052 2.0843-.5933.5933-1.2802 1.0578-2.0609 1.3935-.7806.3357-1.62368.5035-2.52923.5035-.90555 0-1.74863-.1717-2.52927-.5152-.79626-.3435-1.48712-.808-2.0726-1.3935-.58549-.5855-1.04996-1.2763-1.39345-2.0726-.32787-.7806-.4918-1.6237-.4918-2.52925z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Magnifier;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst FlyTo: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"52\"\n height=\"52\"\n viewBox=\"0 0 52 52\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M26 31.8229c1.5347 0 2.8889-.5868 4.0625-1.7604S31.8229 27.5347 31.8229 26s-.5868-2.8889-1.7604-4.0625S27.5347 20.1771 26 20.1771s-2.8889.5868-4.0625 1.7604S20.1771 24.4653 20.1771 26s.5868 2.8889 1.7604 4.0625S24.4653 31.8229 26 31.8229zm0-17.3333c3.1597 0 5.868 1.1284 8.125 3.3854 2.257 2.257 3.3854 4.9653 3.3854 8.125s-1.1284 5.868-3.3854 8.125c-2.257 2.257-4.9653 3.3854-8.125 3.3854s-5.868-1.1284-8.125-3.3854c-2.257-2.257-3.3854-4.9653-3.3854-8.125s1.1284-5.868 3.3854-8.125c2.257-2.257 4.9653-3.3854 8.125-3.3854zm20.1771 31.6875V34.6667H52v11.5104c0 1.5347-.5868 2.8889-1.7604 4.0625S47.7118 52 46.1771 52H34.6667v-5.8229h11.5104zm0-46.1771c1.5347 0 2.8889.5868 4.0625 1.76042C51.4132 2.93403 52 4.28819 52 5.82292V17.3333h-5.8229V5.82292H34.6667V0h11.5104zM5.82292 5.82292V17.3333H0V5.82292c0-1.53473.5868-2.88889 1.76042-4.0625C2.93403.5868 4.28819 0 5.82292 0H17.3333v5.82292H5.82292zm0 28.84378v11.5104H17.3333V52H5.82292c-1.53473 0-2.88889-.5868-4.0625-1.7604C.5868 49.066 0 47.7118 0 46.1771V34.6667h5.82292z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default FlyTo;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Star: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"34\"\n height=\"32\"\n viewBox=\"0 0 34 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M33.9231 12.1154l-11.8504-1.5523L16.9615 0l-5.1111 10.5631L0 12.1154l8.70793 7.9128L6.47416 31.5l10.48734-5.6412L27.4489 31.5l-2.2338-11.4718 8.708-7.9128z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Star;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst StarGhost: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"33\"\n height=\"31\"\n viewBox=\"0 0 33 31\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M32.0408 11.6671c-.0682-.2762-.2045-.4948-.409-.6559-.2045-.161-.4544-.2876-.7498-.3797l-9.3041-1.31165L17.3518.79391C17.1474.26463 16.7157 0 16.0568 0c-.6589 0-1.0906.26464-1.2951.79391l-4.2261 8.38787-9.16781 1.44972c-.29537 0-.55098.1036-.76683.3107-.21584.2071-.39193.4487-.52825.7249-.09089.2991-.09657.5868-.01704.8629.07952.2762.22152.4833.42601.6214l6.71398 6.6274-1.60181 9.4234c-.06816.2992-.04544.5811.06816.8457.11361.2646.28401.4775.51122.6386.20449.1381.44873.2301.73274.2761.28401.0461.5737 0 .86907-.138l8.28176-4.4183 8.2817 4.4183h.7498c.1363 0 .2783-.0288.426-.0863.1477-.0576.2897-.1324.426-.2244.2272-.1381.3976-.3394.5112-.6041.1136-.2646.1363-.5465.0682-.8457l-1.6019-9.4234 6.714-6.6274c.2045-.1611.3465-.3682.426-.6213.0796-.2532.0739-.4948-.017-.7249zm-9.7472 6.4894c-.1363.2301-.2386.4544-.3067.6731-.0682.2186-.1023.4314-.1023.6385l1.1588 7.2488-6.4073-3.4173c-.2272-.138-.4487-.2071-.6645-.2071-.2159 0-.4261.0691-.6305.2071l-6.4073 3.4173 1.2951-7.2488c0-.2071-.0341-.4199-.1023-.6385-.0681-.2187-.17037-.443-.30669-.6731l-5.2485-5.0051 7.12299-1.0356c.2272 0 .443-.0863.6475-.2589.2045-.1726.3749-.3279.5112-.466l3.2037-6.62742 3.2036 6.48942c.0681.2071.2045.3797.409.5177.2044.1381.4544.2071.7497.2071l7.123 1.0356-5.2485 5.1432z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default StarGhost;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Mail: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"25\"\n height=\"25\"\n viewBox=\"0 0 25 25\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fill={iconColor}\n d=\"M22.3988 2.6786c.61982 0 1.16669.24181 1.64061.72545.47402.48363.71098 1.0417.71098 1.6741v14.844c0 .6324-.23696 1.1905-.71098 1.6741-.47392.4836-1.0208.7255-1.64061.7255H2.60173c-.61979 0-1.16669-.2419-1.64061-.7255s-.71094-1.0417-.71094-1.6741v-14.844c0-.63244.23698-1.1905.71094-1.6741.47396-.48363 1.0208-.72545 1.64061-.72545zm-.27349 5.0781V5.3571l-9.62495 6.529-9.62504-6.529v2.3996l9.62504 6.529z\"\n />\n </SVG>\n);\n\nexport default Mail;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Phone: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"25\"\n height=\"25\"\n viewBox=\"0 0 25 25\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fill={iconColor}\n d=\"M23.92962 18.18155c1.4269 1.42053 1.4269 2.98303 0 4.6876-.57072.66283-1.12955 1.16-1.6765 1.49142-.54693.33151-.99875.52086-1.35545.56825-.3567.04729-.86797.07098-1.53382.07098-1.85494 0-4.06648-.94696-6.63472-2.84087-2.04518-1.46783-3.90002-3.05402-5.56462-4.75858-2.1402-2.22543-4.01882-4.75858-5.63596-7.59946C.10175 7.14937-.3263 4.97133.24443 3.26676c.28537-.89961.9512-1.68086 1.99752-2.3438l.07134-.07102c.8561-.56818 1.61704-.85227 2.28288-.85227.90366 0 1.71216.42613 2.42556 1.27837l.07134.07103C8.18695 2.7695 8.94791 3.88222 9.37595 4.6871c.7134 1.46782.68962 2.7225-.07134 3.76424-.57072.75758-.85608 1.30206-.85608 1.63348 0 .14206.30914.56825.92742 1.27847l.07134.07098c1.14144 1.27848 1.75972 1.965 1.85484 2.05968.04756 0 .09512.02369.14268.07108.04756.04729.09512.09467.14278.14196l.14268.14207c.9512.94705 1.64082 1.60988 2.06886 1.98869l.07134.07098c.42804.3788.7134.56825.85608.56825.2378 0 .92742-.3551 2.06886-1.06542.33292-.23674.73718-.35511 1.21288-.35511.85608 0 1.89052.3551 3.1033 1.06542 1.21278.71022 2.15209 1.39675 2.81793 2.05958z\"\n />\n </SVG>\n);\n\nexport default Phone;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Route: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"29\"\n height=\"30\"\n viewBox=\"0 0 29 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M28.629 13.5725L15.4275.371C15.1802.12367 14.871 0 14.5 0s-.6802.12367-.9275.371L.371 13.5725c-.24733.2679-.371.5823-.371.943 0 .3607.12367.6647.371.912L13.5725 28.629c.2473.2679.5565.4019.9275.4019s.6802-.134.9275-.4019L28.629 15.4275c.2473-.2473.371-.5513.371-.912s-.1237-.6751-.371-.943zm-11.5011 4.2356V14.5h-6.5853v3.9574H7.91471v-5.2559c0-.371.12882-.6853.38646-.943.25765-.2576.56166-.3864.91205-.3864h7.91468V8.56397l4.6376 4.63753-4.6376 4.6066z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Route;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Facebook: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M26.6012 0H3.32515C1.48872 0 0 1.48872 0 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H14.9832v.0053h4.9877v-.0053h6.6303c1.8364 0 3.3252-1.4888 3.3252-3.3252V3.32515C29.9264 1.48872 28.4376 0 26.6012 0zm-6.6303 29.9264V18.2937h4.9877V13.306h-4.9877V9.98081c0-.91821.7444-1.66257 1.6626-1.66257h3.3251V3.33051h-4.1564c-3.2138 0-5.819 2.60526-5.819 5.81902V13.306H11.658v4.9877h3.3252v11.6327h4.9877z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Facebook;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst LinkedIn: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M29.9752 3.32515C29.9752 1.48872 28.4865 0 26.65 0H3.37398C1.53755 0 .04883 1.48872.04883 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H26.65c1.8365 0 3.3252-1.4888 3.3252-3.3252V3.32515zM25.7835 16.9523v8.8116h-4.6386v-8.1965c0-1.2855-1.0421-2.3276-2.3276-2.3276-1.2802 0-2.311 1.0475-2.311 2.3276v8.1965h-4.6386V11.8482h4.6386v1.8454c.7981-1.2968 2.444-2.1613 3.8572-2.1613 2.9934 0 5.42 2.4266 5.42 5.42zM6.487 9.24675c1.54261 0 2.79313-1.25053 2.79313-2.79313 0-1.54619-1.24693-2.80975-2.79313-2.80975-1.55178 0-2.80975 1.25797-2.80975 2.80975 0 1.5462 1.26356 2.79313 2.80975 2.79313zM8.77571 11.855v13.9157H4.17037V11.855h4.60534z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default LinkedIn;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Twitter: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M26.6735 0H3.39742C1.56099 0 .07227 1.48872.07227 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H26.6735c1.8364 0 3.3251-1.4888 3.3251-3.3252V3.32515C29.9986 1.48872 28.5099 0 26.6735 0zm.0131 8.17421c-.4157.88117-1.3467 1.6792-2.1448 2.34419-.1163 7.6811-5.0209 12.9349-12.3529 13.2674-3.02588.133-5.20385-.8313-7.11582-2.045 2.22785.3492 4.98772-.532 6.48402-1.7956-2.19457-.2327-3.47475-1.3466-4.08991-3.1256.63178.0998 1.29681.0665 1.89534-.0499-1.97847-.665-3.39166-1.8953-3.45816-4.4557.54865.266 1.13055.4988 1.89534.5487-1.4797-.8479-2.56037-3.9237-1.31344-5.95204 2.1946 2.41073 4.83813 4.37254 9.17743 4.63854-1.0973-4.65517 5.0708-7.18228 7.6478-4.07327 1.0973-.19951 1.9785-.59853 2.843-1.06405-.3491 1.06405-1.0308 1.84546-1.862 2.44399.8978-.11638 1.7124-.33252 2.3941-.68166z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Twitter;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Xing: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.04732 0C1.38475 0 .05469 1.33006.05469 2.99264V26.9337c0 1.6626 1.33006 2.9927 2.99263 2.9927H26.9884c1.6626 0 2.9926-1.3301 2.9926-2.9927V2.99264C29.981 1.33006 28.651 0 26.9884 0H3.04732zM21.782 3.33051h3.3917c.1995 0 .3657.06651.4323.21614.0997.14963.0997.33251 0 .5154L18.1742 17.2296l4.7384 8.6454c.0997.1829.0997.3658 0 .5154-.0831.133-.2328.2162-.4157.2162h-3.375c-.5154 0-.7814-.3492-.931-.6484l-4.7716-8.7452c.2327-.4156 7.4649-13.23408 7.4649-13.23408.1829-.33252.3991-.64841.8978-.64841zM10.1943 7.91799H6.85251c-.21613 0-.38239.08313-.46552.21614-.09975.18288-.0665.33251.01663.5154l2.2611 3.94027-3.55791 6.3012c-.0665.1829-.0665.3824 0 .5154.08313.1496.23276.2327.43227.2327h3.3584c.5154 0 .74816-.3325.93104-.6484 0 0 3.47478-6.1681 3.62438-6.4009L11.142 8.5664c-.1663-.31589-.4323-.64841-.9477-.64841z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Xing;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Instagram: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M25.6051 4.3945C22.67541 1.46476 19.1403 0 14.99951 0S7.32378 1.46486 4.39391 4.3945C1.46424 7.3242-.00061 10.85933-.00061 14.99987s1.46485 7.67574 4.39454 10.60538c2.92969 2.92972 6.4648 4.39458 10.6056 4.39458s7.67572-1.46486 10.60558-4.39458c2.9297-2.92964 4.39454-6.46476 4.39454-10.60538S28.5348 7.32413 25.6051 4.39449zm-1.23745 14.4139c0 1.56243-.53708 2.8808-1.61126 3.955-1.07426 1.0742-2.3926 1.61136-3.95511 1.61136h-7.61715c-1.52343 0-2.81252-.52735-3.8672-1.58204-1.05467-1.0547-1.6211-2.34374-1.69917-3.86715v-7.85156c.03906-1.5234.60546-2.81245 1.69917-3.86715 1.09376-1.05469 2.38277-1.58204 3.8672-1.58204h7.61715c1.56251 0 2.88085.5371 3.95511 1.61136 1.07418 1.0742 1.61126 2.39257 1.61126 3.9551zM18.81568 7.49976h-7.61714c-1.01568 0-1.88477.36132-2.60744 1.084-.72265.72268-1.08401 1.59176-1.08401 2.60742v7.6172c0 1.01558.36133 1.88474 1.084 2.60742.72268.72258 1.59177 1.08392 2.60745 1.08392h7.61714c1.01568 0 1.88477-.36134 2.60744-1.08392.72267-.72268 1.08392-1.59184 1.08392-2.60742v-7.6172c0-.97655-.37108-1.83591-1.11326-2.5781-.74217-.7422-1.6015-1.11332-2.5781-1.11332zm-.12235 11.19256c-.9766.97655-2.12885 1.46477-3.45703 1.46477-1.32809 0-2.48043-.48822-3.45702-1.46477-.9765-.97663-1.46485-2.1289-1.46485-3.45707 0-1.32808.48834-2.48043 1.46485-3.45698.97659-.97663 2.12893-1.46485 3.45702-1.46485 1.32818 0 2.48044.48822 3.45703 1.46485.9766.97655 1.46485 2.1289 1.46485 3.45698 0 1.32817-.48825 2.48044-1.46485 3.45707zm2.05094-7.79465c-.23442.23436-.50783.35154-.82034.35154s-.58592-.11718-.82034-.35154c-.23433-.23444-.3515-.50783-.3515-.82033s.11717-.58598.3515-.82034c.23442-.23435.50784-.35153.82034-.35153s.58592.11718.82034.35153c.23434.23436.3515.50783.3515.82034s-.11716.5859-.3515.82033zm-3.39449 2.22734c-.58592-.58598-1.289-.87897-2.10935-.87897s-1.52343.293-2.10935.87897c-.58592.5859-.87892 1.28905-.87892 2.1093 0 .82033.293 1.5235.87892 2.10938.58592.58598 1.28901.87889 2.10935.87889s1.52343-.2929 2.10935-.87889c.58601-.58589.87893-1.28905.87893-2.10938 0-.82025-.29292-1.5234-.87893-2.1093z\"\n clipRule=\"evenodd\"\n fillRule=\"evenodd\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Instagram;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Youtube: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"43\"\n height=\"30\"\n viewBox=\"0 0 43 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M17.19523 20.52408l11.27986-5.95252-11.27986-6.02397zM21.49983 0c2.61017 0 5.13098.03571 7.56251.10715 2.43154.07142 4.21437.14682 5.34859.22619l1.70128.09523c.01554 0 .14756.0119.39616.03572.2486.0238.42723.04762.53599.07142.10876.02382.29134.05953.54766.10715.25641.04762.4778.11111.66424.19048s.40397.18253.65257.30952c.2486.12698.48937.28174.72243.46428s.4583.39286.67583.63095c.09322.09524.21366.24206.36122.44047.14765.19841.3729.6627.67591 1.39282.30293.73016.50878 1.5317.61754 2.40476.1243 1.0159.22138 2.0992.29135 3.25.06987 1.15082.11262 2.05163.12816 2.70235v4.19049c.01553 2.30161-.1243 4.60314-.4195 6.90476-.10877.87298-.30294 1.66266-.58261 2.36903s-.52827 1.19444-.74579 1.46428l-.32628.40476c-.21752.23806-.44277.44838-.67583.63097-.23306.1825-.47384.3333-.72243.45233s-.46612.21823-.65257.29767c-.18644.07935-.40783.14282-.66424.1904-.25632.04766-.44276.08339-.55925.10718-.11657.02378-.2952.04766-.53608.07145-.24078.02379-.36894.03573-.38448.03573-3.89976.30152-8.77055.45233-14.61202.45233-3.21612-.03177-6.00888-.0833-8.37826-.15476s-3.92688-.13097-4.67267-.17854l-1.14195-.09524-.83899-.09525c-.55932-.07935-.9827-.1587-1.2701-.23815-.28744-.07935-.68362-.24596-1.18856-.49991-.50495-.25404-.94382-.57944-1.31671-.97621-.09323-.09524-.21363-.2421-.36123-.44049-.1476-.19838-.37288-.66266-.67585-1.39282s-.50883-1.53178-.6176-2.40476c-.1243-1.01589-.2214-2.0992-.2913-3.25-.06992-1.15081-.11264-2.05162-.12818-2.70234V13.3809c-.01554-2.30162.12429-4.60315.4195-6.90477.10876-.87302.30296-1.66266.58263-2.36903.27966-.70635.52825-1.19444.74576-1.46427l.32628-.40477c.21752-.23809.4428-.4484.67585-.63094s.47387-.33731.72246-.46429c.24859-.12699.4661-.23016.65255-.30952.18644-.07937.40784-.14286.6642-.19048.25635-.04762.4389-.08333.54767-.10714.10876-.02381.28743-.04762.53602-.07143.24858-.02381.38065-.03571.39619-.03571 3.89976-.28572 8.77046-.42857 14.61202-.42857z\"\n clipRule=\"evenodd\"\n fillRule=\"evenodd\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Youtube;\n","import 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 React, { useContext } from 'react';\nimport { ThemeContext } from 'styled-components';\nimport { getColors as color } from 'utils/styles';\n\nconst Intro: React.FC<{\n title: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isCentered?: boolean;\n isStackable?: boolean;\n clampTitle?: boolean;\n clampText?: boolean;\n bgMode?: 'inverted' | 'full' | 'splitted';\n className?: string;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isCentered = false,\n isStackable = false,\n clampTitle = true,\n clampText = true,\n bgMode,\n}) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n addSeperation\n isStackable={isStackable}\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <IntroBlock\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n isCentered={isCentered}\n clampTitle={clampTitle}\n clampText={clampText}\n />\n </Wrapper>\n </Section>\n );\n};\n\nexport default Intro;\n","import React, { FC, useEffect, useState } from 'react';\nimport { NavGroup } from './menu/Flyout';\nimport Menu from './menu/Menu';\n\nimport TopBar from './TopBar';\n\nexport interface LogoProps {\n icon?: (props: {\n isInverted?: boolean;\n size?: 'full' | 'small';\n name?: string;\n }) => React.ReactNode;\n link?: string;\n pageTopScale?: {\n // icon scale factor\n mobile?: number;\n desktop?: number;\n };\n /** Logo scale if is shown from scroll up */\n scrolledScale?: {\n /** Default is 0.6 */\n mobile?: number;\n desktop?: number;\n };\n}\n\nexport interface NavProps {\n isLargeMenu?: boolean;\n isMenuInverted?: boolean;\n isTopbarInverted?: boolean;\n isMirrored?: boolean;\n activeNavItem?: string;\n navItems?: NavGroup[];\n backdropOpacity?: number;\n socials?: Array<{ icon: React.ReactNode; href: string }>;\n logo?: LogoProps;\n /** Allow overflow of topbar over content if page is on top */\n allowTopbarOverflow?: boolean;\n /** Hide topbar background if menu overlay is open */\n hideTopbarBackUnderMenu?: boolean;\n isTopbarLargeOnPageTop?: boolean;\n primaryCta?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n secondaryCta?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n search?: (isInverted?: boolean) => React.ReactNode;\n openMenuIcon?: (isInverted?: boolean) => React.ReactNode;\n closeMenuIcon?: (isInverted?: boolean) => React.ReactNode;\n}\n\nconst Navigation: FC<NavProps> = ({\n isMenuInverted,\n isLargeMenu,\n activeNavItem,\n navItems,\n socials,\n search,\n logo,\n backdropOpacity,\n primaryCta,\n secondaryCta,\n isTopbarInverted,\n allowTopbarOverflow,\n hideTopbarBackUnderMenu,\n isTopbarLargeOnPageTop,\n openMenuIcon,\n closeMenuIcon,\n isMirrored,\n}) => {\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n\n const sharedProps = {\n logo: logo,\n primaryAction: primaryCta,\n secondaryAction: secondaryCta,\n };\n\n useEffect(() => {\n document.body.style.overflow = isMenuOpen ? 'hidden' : 'visible';\n }, [isMenuOpen]);\n\n return (\n <>\n <TopBar\n isMirrored={isMirrored}\n isBackVisible={hideTopbarBackUnderMenu ? !isMenuOpen : true}\n isInverted={isTopbarInverted}\n allowTopOverlow={allowTopbarOverflow}\n isLargeOnPageTop={isTopbarLargeOnPageTop}\n toggleIcon={openMenuIcon}\n onToggleClick={() => setIsMenuOpen(true)}\n {...sharedProps}\n />\n <Menu\n isMirrored={isMirrored}\n isOpen={isMenuOpen}\n backdropOpacity={backdropOpacity}\n size={isLargeMenu ? 'full' : 'small'}\n isInverted={isMenuInverted}\n activeNavItem={activeNavItem}\n navItems={navItems}\n socials={socials}\n search={search}\n onCloseClick={() => setIsMenuOpen(false)}\n toggleIcon={closeMenuIcon}\n {...sharedProps}\n />\n </>\n );\n};\n\nexport default Navigation;\n","import React, { FC } from 'react';\nimport { ThemeContext } from 'styled-components';\n\nimport { getColors as color } from 'utils/styles';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport PromotionCard, {\n PromotionCardProps,\n} from 'components/blocks/PromotionCard';\n\nexport type PromotionCarouselItem = Omit<\n PromotionCardProps,\n 'text' | 'superTitle' | 'text' | 'primaryAction' | 'secondaryAction'\n>;\n\nconst PromotionCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing' | 'isInverted'> & {\n bgMode?: 'full' | 'splitted' | 'inverted';\n promotions?: PromotionCarouselItem[];\n }\n> = ({\n bgMode,\n promotions,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const promotionCount = promotions?.length || 0;\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <CarouselBase\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={promotionCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: promotionCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: promotionCount > 1 ? 1.15 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: promotionCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {promotions &&\n promotions.map((promotion, i) => (\n <PromotionCard key={i} {...promotion} />\n ))}\n </CarouselBase>\n </Section>\n );\n};\n\nexport default PromotionCarousel;\n","import React, { useContext } from 'react';\nimport { ThemeContext } from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { getColors as color, getGlobalSettings as global } from 'utils/styles';\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 bgImage: ImageProps;\n embedId: string;\n playIcon?: React.ReactChild;\n bgMode?: 'full' | 'inverted';\n}> = ({ bgMode, bgImage, embedId, playIcon }) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode === 'full'\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n addSeperation\n >\n <Wrapper\n addWhitespace={global(theme).sections.edgeRadius ? true : false}\n >\n <VideoCard\n bgImage={bgImage}\n embedId={embedId}\n playIcon={playIcon}\n />\n </Wrapper>\n </Section>\n );\n};\n\nexport default Video;\n","import React, { FC } from 'react';\nimport { ThemeContext } from 'styled-components';\n\nimport { getColors as color } from 'utils/styles';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport VideoCard, { VideoCardProps } from 'components/blocks/VideoCard';\n\nconst VideoCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing' | 'isInverted'> & {\n bgMode?: 'full' | 'splitted' | 'inverted';\n videos?: VideoCardProps[];\n }\n> = ({\n bgMode,\n videos,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const videoCount = videos?.length || 0;\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <CarouselBase\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={videoCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: videoCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: videoCount > 1 ? 1.15 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: videoCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {videos &&\n videos.map((video, i) => <VideoCard key={i} {...video} />)}\n </CarouselBase>\n </Section>\n );\n};\n\nexport default VideoCarousel;\n","import { ImageProps } from 'components/blocks/Image';\nimport { useEffect, useState } from 'react';\nimport { MediaQueryType } from './styles';\nimport { useMediaQuery } from './useMediaQuery';\n\nexport const useImgPreload = (\n imageUrls: ImageProps[],\n mqs: MediaQueryType[] = ['semilarge', 'large']\n) => {\n const [isReady, setReady] = useState(false);\n const [isLoaded, setLoaded] = useState(false);\n const currentMq = useMediaQuery(mqs as MediaQueryType[]);\n const [loadedImages, setLoadedImages] = useState<{\n [key: string]: { id: number | string; image: string }[];\n }>({\n small: [],\n medium: [],\n semilarge: [],\n large: [],\n xlarge: [],\n xxlarge: [],\n xxxLarge: [],\n });\n\n const preloadImages = (imageUrls: (string | undefined)[]) => {\n const images = (imageUrls.filter((img) => img) as string[]).map(\n (src, i) => {\n return new Promise((res) => {\n const img = new window.Image();\n img.src = src;\n img.onload = () => res({ url: src, i });\n });\n }\n );\n\n return images;\n };\n\n useEffect(() => {\n if (isReady && loadedImages && currentMq) {\n const loadedForMq = loadedImages[currentMq];\n\n if (loadedForMq.length < imageUrls.length && imageUrls.length > 0) {\n const requestedImages = imageUrls.map((img) => img[currentMq]);\n\n const resolve = async (items: any) => {\n for (const item of items) {\n const x = await item;\n\n setLoadedImages((prev) => {\n // check if image id already exists in array\n if (!prev[currentMq].find((e) => e.id === x.i)) {\n return {\n ...prev,\n [currentMq]: [\n ...prev[currentMq],\n {\n id: x.i,\n image: x.url,\n },\n ],\n };\n } else return prev;\n });\n }\n };\n\n resolve(preloadImages(requestedImages));\n }\n }\n }, [currentMq, imageUrls, isReady, loadedImages]);\n\n useEffect(() => {\n if (loadedImages && currentMq) {\n const imgCount = imageUrls.filter((img) => img[currentMq]).length;\n setLoaded(loadedImages[currentMq].length >= imgCount);\n }\n }, [currentMq, imageUrls, loadedImages]);\n\n return {\n loadedImages: currentMq && loadedImages[currentMq],\n isLoaded,\n setReady,\n };\n};\n","import { useEffect, useRef } from 'react';\n\nexport default function useInterval(callback: any, delay?: number) {\n const savedCallback: any = useRef();\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n if (delay !== null) {\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}\n","import { useEffect, useState } from 'react';\n\nexport const useItemHeight = () => {\n const [element, setElement] = useState<HTMLElement | null>(null);\n const [height, setHeight] = useState<number>(0);\n\n useEffect(() => {\n const calcHeight = () => {\n if (element) setHeight(element.offsetHeight);\n };\n\n if (element) {\n calcHeight();\n window.addEventListener('resize', calcHeight);\n }\n\n return () => {\n window.removeEventListener('resize', calcHeight);\n };\n }, [element]);\n\n return {\n setElement,\n height,\n };\n};\n","import { useState, useEffect } from 'react';\n\nconst useTouch = () => {\n const [canTouch, setCanTouch] = useState(false);\n\n useEffect(() => {\n setCanTouch(\n 'ontouchstart' in window ||\n navigator.maxTouchPoints > 0 ||\n navigator.msMaxTouchPoints > 0\n );\n }, []);\n return canTouch;\n};\n\nexport default useTouch;\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","Symbol","iterator","v","op","TypeError","pop","push","__spreadArray","to","from","il","j","__makeTemplateObject","cooked","raw","defineProperty","ScrollDirection","mq","medium","semilarge","large","xlarge","xxlarge","xxxLarge","spacings","nudge","spacer","wrapperSmall","wrapper","wrapperLarge","withRange","range","property","getSizeByRange","styleTextColor","fallbackColor","gradient","css","defaultColors","dark","light","mono","primary","secondary","tertiary","copyBase","family","weight","style","lineHeight","letterSpacing","size","textTransform","color","colorInverted","headingBase","defaultFonts","copy","small","big","copy-i","copy-b","super","heading-1","heading-2","heading-3","heading-4","callout","defaultGlobalSettings","sections","edgeRadius","imageTextGradient","newsDateFormat","newsTimeFormat","newsLocaleKey","getBaseTheme","colors","fonts","types","globalSettings","getColors","theme","getFonts","getGlobalSettings","isBrowser","window","document","checkMq","cmq","checkMqs","matchMedia","matches","getMediaQuery","useMediaQuery","mqs","_a","useState","mediaQuery","setMediaQuery","useEffect","handleResize","newMediaQuery","addEventListener","removeEventListener","useEqualSheetHeight","props","defaultResponsive","responsive","currentMq","itemsPerRow","sheetRefs","setSheetRefs","makeRows","index","arr","slice","resize","refs","identifierSizes","Map","identifiers","set","filter","ref","current","forEach","id","element","querySelector","removeAttribute","prevHeights","get","scrollHeight","key","heights","selector","reduce","rowHeights","highest","sort","vA","vB","x_1","el","setAttribute","setHeights","resizeHandler","Array","listLength","fill","map","createRef","triggerCalculation","setCookie","name","data","_b","days","_c","path","cookieString","valueString","dataKeys","keys","encodeURIComponent","substr","date","Date","setTime","getTime","toUTCString","cookie","getCookie","undefined","b","match","cookieValue","decodeURIComponent","valueArray","split","keyValueArray","cookieData","isNaN","Number","isBoolean","stringToBoolean","useIE","initialValue","isIE","setIE","msTouchAction","useScroll","initialTopOffset","onLeftOffset","onEnterOffset","topOffset","setTopOffset","_d","isTop","setIsTop","_e","isInOffset","setIsInOffset","_f","DOWN","scrollDirection","setScrollDirection","lastScrollPos","useRef","handleScroll","pageYOffset","prev","UP","useScrollTo","fallbackScrollDuration","startTime","firstPos","targetPos","setTargetPos","documentElement","scroll","top","left","behavior","animate_1","timestamp","elapsed","easeProgress","toFixed","newPos","scrollTo","cancelAnimationFrame","requestAnimationFrame","scrollTop","canUseWebP","elem","createElement","getContext","toDataURL","hexToRgba","hex","alpha","rgb","x","parseInt","getBgImage","bgImage","assignTo","target","source","output","sourceVal","targetVal","View","styled","section","addSeperation","isStackable","bgIdent","Back","div","bgColor","bgMode","mode","bgValue","getBackground","Section","renderAs","className","children","React.createElement","as","mapToBgMode","preventSplit","isMirrored","clampWidth","Wrapper","addWhitespace","BaseStyles","h1","textColor","textGradient","hyphens","type","font","Heading","isInverted","hasShadow","innerHTML","rest","React.useContext","ThemeContext","tag","fontSettings","colorGradientInverted","colorGradient","dangerouslySetInnerHTML","__html","defaultProps","Title","colorMode","superTitle","superTitleAs","title","titleAs","isCentered","React","Copy","columns","Actions","StyledTitle","ContentBlock","StyledActions","IntroBlock","text","primaryAction","secondaryAction","clampTitle","clampText","Img","img","Picture","picture","Image","alt","coverSpace","onClick","srcSet","media","loading","ImgContainer","ImgWrapper","StyledImage","global","gridSettings","cols","gutter","StyledCol","mediumSpan","span","semilargeSpan","largeSpan","xlargeSpan","mediumMove","move","semilargeMove","largeMove","xlargeMove","StyledGrid","Grid","valign","React.Children","comp","Row","Col","React.Fragment","ImgDescDesktop","ImgDescMobile","InfoWrapper","SubTextBlock","WideImage","a","textDecoration","inverted","Pointer","React.forwardRef","isDisabled","disable","href","isExternal","rel","displayName","CursorState","Icon","Label","StyledSection","ListContainer","ItemContainer","ShowMore","itemCount","Items","ActionsWrapper","Item","ListFooter","Content","ContentText","ImageContainer","ArticleContent","Desc","Feature","description","intro","image","ContentContainer","LinkHelper","IntroContainer","PromotionCard","clickable","FlexGrid","FlexGridCol","PosterContainer","SVG","svg","Play","iconColor","width","height","viewBox","xmlns","d","isActive","VideoControls","Iframe","iframe","VideoCard","embedId","playIcon","setIsActive","src","allow","ContactView","Avatar","Info","Address","Decorator","AddressLabel","StyledIntro","StyledContactBox","addresses","avatar","address","decorator","NewsletterWrapper","Badge","FactsContainer","ul","FactsItem","li","Text","Fact","subTitle","FactFill","TableContainer","TableBody","table","TableHead","th","hasBack","TableData","td","TableBlock","row","tableTitle","rowTitle","item","ii","itemText","TableWrapper","ArrowLeftGhost","transform","ArrowRightGhost","MapContainer","FylToCtrlContainer","SliderContext","createContext","steps","currentStep","slickSettings","clickSideOffset","goToStep","nextStep","previousStep","isOnFirstStep","isOnLastStep","SlidesView","cursorPath","sameHeight","fullHeight","StyledSlider","SlickSlider","leftMargin","min","max","SlideView","spacing","ControlView","button","DotGroupView","initialStep","slideSpacing","cursorPaths","beforeChange","afterChange","onInit","slideCount","setSlideCount","sliderRef","setSliderRef","setCurrentStep","_g","visibleSlides","setVisibleSlides","_h","setSteps","dots","arrows","infinite","speed","slidesToScroll","slidesToShow","variableWidth","fade","swipe","settings","cBreakpoint","state","breakpoint","itemsPerSlide","Math","floor","slides","Provider","setSlider","intNum","slickGoTo","context","useContext","cursor","setCursor","viewRef","setViewRef","mousePos","setMousePos","getCursorPath","NEXT","PREV","handleClick","ev","stopPropagation","isSlideControl","classList","contains","isAnchor","HTMLAnchorElement","parentElement","rect","getBoundingClientRect","relMouseX","Children","count","Consumer","values","onMouseMove","clientX","disabled","stepsArray","setStepsArray","containerRef","onReady","url","attribution","activeMarkerId","markers","center","zoom","touchZoom","scrollWheelZoom","onlyScrollOnFocus","fitBoundsPadding","onMarkerClick","onFlyToClick","flyToControl","onActiveMarkerChanged","cRef","prevMarkerId","_j","L","setLeaflet","_k","setMap","_l","markersLayer","setMarkersLayer","_m","isLoaded","setLoaded","cElement","mapContainerRef","leaflet","map_1","once","enable","tileLayer","addTo","markersLayer_1","FeatureGroup","showAllMarkers","fitBounds","getBounds","padding","point","flyToPosition","position","flyTo","flyToActive","marker","find","m","clearLayers","icon","markerIcon","iconUrl","iconSize","sizeActive","iconAnchor","anchorActive","anchor","riseOnHover","on","addLayer","markerId","goTo","showAll","CardWrapper","SliderWrapper","InfoCardView","CardHeader","ContactList","ContactListLabel","LocationInfoCard","location","meta","contact","c","Controls","StyledDotGroup","Slider","DotWrapper","Dot","StyledControl","FieldHead","Field","input","InfoMessage","ErrorMessage","Textfield","lightBg","errorMessage","infoMessage","placeholder","isRequired","onChange","hasError","required","Area","textarea","Textarea","CheckboxContainer","Original","Box","isSelected","StyledCheck","stroke","Checkbox","checked","FieldsContainer","FlexContainer","ActionWrapper","Plus","Minus","AccordionBlock","hasBg","borderColor","AccordionItems","AccordionHead","IconContainer","AccordionText","ArrowLeftRight","fillRule","clipRule","clamp","num","Images","BackgroundImg","ForegroundContainer","hasAnim","initalValue","ForegroundImg","ForegroundOverlay","ImageLabel","ForegroundLabel","BackgroundLabel","ControlContainer","Control","Head","TopControls","StyledSlides","Footer","CtrlWrapper","CtrlWrapperLeft","CtrlWrapperRight","CarouselBase","variableWidths","controlNext","controlPrev","dot","child","FullWidthImg","StyledWrapper","Link","Bdot","IconItemView","StyledLink","SocialList","items","MainView","topSpace","hAlign","LogoLink","ContactData","SiteLinksView","SiteLink","LinkWrapper","BottomWrapper","BottomView","AnimationContainer","PosterImage","AnimationImage","scale","opacity","AnimationImages","images","intervalRef","activeImg","setActiveImg","changeImage","setTimeout","clearInterval","setInterval","zIndex","HeaderKenBurns","onImageChange","React.useState","loadedImages","setLoadedImages","React.useEffect","loadedForMq","useWebp_1","requestedImages","webp","res","onload","items_1","_i","backgroundImage","PosterView","HeaderPoster","Callout","PlaceholderImg","AutoplayVideo","video","HeaderVideo","placeholderImg","videoUrl","isMobile","isVisible","muted","autoPlay","loop","onCanPlayThrough","header","HeaderWrapper","PosterContent","PosterContentMobile","StyledPoster","Seperator","ContentFlex","Author","StyledCopy","Tag","dateFormat","timeFormat","localeKey","dddd","weekDays","_this","long","getDay","DDDD","ddd","short","DDD","dd","DD","MMMM","monthNames","getMonth","mmmm","MMM","mmm","mm","MM","yyyy","getYear","YYYY","yy","YY","hh","getHours","HH","hs","getHours12h","HS","getMinutes","ss","getSeconds","SS","ap","AP","StatusFormatter","placeholders","%DATE%","getFormattedDate","%TIME%","getFormattedTime","replace","foundString","dateReplacements","formattedDate","RegExp","timeReplacements","formattedTime","toString","getDoubleDigitString","getDate","getFullYear","hours","de","en","ImageLink","TitleLink","Main","NewsCard","onTagClick","publishDate","link","publishedAt","ImageFlex","IntroHead","HeadTag","MetaBlock","News","useObserverSupport","inital","observerSupported","setObserverSupport","IntersectionObserverEntry","TagContainer","TagWrapper","List","QuicknavButton","NavList","NavItem","NavItemContainer","Test","TimelineBlock","TimelineText","Socials","Social","NumberContainer","stringLength","IconBlock","number","Button","ButtonGhost","form","InputField","backColor","SubmitBtn","ControlBtn","ClearBtn","activateTrackingScripts","scriptElements","querySelectorAll","newScriptElement","appendChild","parentNode","removeChild","Stage","CookieIcon","TitleView","TextView","CookieActions","Cross","isOpen","isLarge","Header","HeaderCol","LeftCol","CenterCol","RightCol","ToggleContainer","StyledMenuClose","SearchContainer","ScrollArea","MirroredLargeContainerDesktop","NavListView","Nav","nav","Group","GroupLabel","GroupLabelSpacer","isSmall","ItemLink","ItemLabel","toggleIcon","logo","search","onCloseClick","activeNavItem","navGroups","activeGroup","activeItem","group","itemIndex","Backdrop","SocialContainer","Menu","backdropOpacity","navItems","socials","Flyout","MenuBurger","TopWhitespace","showLarge","isBackVisible","allowOffset","Column","StyledMenuBurger","logoHeight","clampValue","TopBar","allowTopOverlow","isLargeOnPageTop","onToggleClick","setIsOpen","setIsLarge","isAnimated","setIsAnimated","defaultLogoScale","pageTopScale","mobile","desktop","scrolledScale","_o","isBarInverted","logoScale","scalePageTop","scaleScrolled","logoTopHeight","animated","currentItems","setCurrentItems","hasColumns","splice","asideText","withAsideText","isAside","badge","newsForm","column","method","action","buttonIcon","onSubmit","onBlur","onFocus","backgroundStyle","foregroundImg","backgroundImg","foregroundLabel","backgroundLabel","overlayColor","labelColor","dragControl","enableControlAnim","slideValue","setSlideValue","isHolding","setIsHolding","isDragging","setIsDragging","interacted","setInteracted","sideOffset","setSideOffset","controlRef","offsetWidth","handleInitalLoad","observer","IntersectionObserver","entries","isIntersecting","unobserve","rootMargin","threshold","observe","readyState","setCurrentPos","relativeClientX","percentage","currentTarget","onMouseDown","onMouseUp","onMouseLeave","onTouchMove","touches","onTouchStart","onTouchEnd","hasTransition","cookieName","urlWhitelist","consentAcceptStatusMsg","consentDeclineStatusMsg","noCookieStatusMsg","lifetime","overlayOpacity","setIsVisible","callback","allConsentButtons","len","bindConsentButtons","urlString","whitelist","isInWhiteList","isUrlInWhitelist","pathname","consent","status","allConsentStatusElements","formatter","updatedAt","getFormattedStatus","updateConsentStatusElements","bgOpacity","handleDecline","console","log","handleAccept","additionalAcceptProps","additionalDeclineProps","main","aside","card","facts","factCount","cardRefs","fact","hasText","features","featureCount","feature","isHalf","columnTopSpace","contactData","siteLinks","newsTitle","newsText","bottomLinks","brandIcon","siteLinksColLeft","ceil","siteLinksColRight","direction","submitAction","formFields","checkbox","yupValidationSchema","validation","Formik","initialValues","surname","phone","area","mail","check","validate","errors","validationSchema","obj","handleSubmit","setFieldValue","isValid","dirty","preventDefault","constructor","additionalProps","array","isFull","currentIndex","newIndex","isNextImgFull","sizeScale","primaryCta","secondaryCta","withTopGradient","customTopGradient","customBottomGradient","topGradient","bottomGradient","noTitle","content","showOnMobile","showLessText","showMoreText","showMore","setShowMore","imageCount","combinedBaseTheme","tKey","isArray","sKey","assignFontBase","base","combinedTheme","ThemeProvider","provider","flyToZoom","initialLocation","locations","allMarkersOnInit","activeLocation","setActiveLocation","locIndex","findIndex","loc","isMenuInverted","isLargeMenu","isTopbarInverted","allowTopbarOverflow","hideTopbarBackUnderMenu","isTopbarLargeOnPageTop","openMenuIcon","closeMenuIcon","isMenuOpen","setIsMenuOpen","sharedProps","overflow","author","news","newsCount","setItemsPerRow","visibleRows","setVisibleRows","imageStyle","isSingleHalf","tags","activeTag","queryParams","selected","decodeURI","selectedTag","setSelectedTag","targetRef","setNewPos","entry","disconnect","tableItems","hasWrapper","hasContent","promotions","promotionCount","promotion","onNavClick","isActiveItem","setIsActiveItem","pos","setPos","setWidth","parentRef","React.useRef","itemRef","parent","ParentBox","scrollLeft","scrollIntoView","paddingTop","transition","submitIcon","clearIcon","onClear","hasLeftIcon","hasRightIcon","onKeyDown","keyCode","social","subText","targetRefs","setTargetRefs","observerRef","setActiveItem","isSwitched","videos","videoCount","imageUrls","isReady","setReady","preloadImages","imgCount","delay","savedCallback","id_1","setElement","setHeight","calcHeight","offsetHeight","posterImage","currentImage","setCurrentImage","workingImage","canTouch","setCanTouch","navigator","maxTouchPoints","msMaxTouchPoints"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/useScroll.ts","../src/utils/styles.ts","../src/utils/useMediaQuery.ts","../src/utils/useEqualSheetHeight.ts","../src/utils/cookie-consent/cookie.ts","../src/utils/useIE.ts","../src/utils/useScrollTo.ts","../src/utils/usePoster.ts","../src/utils/hexRgbConverter.ts","../src/utils/backgroundImage.ts","../src/utils/LibThemeProvider.tsx","../src/components/base/Section.tsx","../src/components/base/Wrapper.tsx","../src/components/typography/Heading.tsx","../src/components/blocks/Title.tsx","../src/components/typography/Copy.tsx","../src/components/blocks/Actions.tsx","../src/components/blocks/IntroBlock.tsx","../src/components/blocks/Image.tsx","../src/components/sections/Gallery.tsx","../src/components/base/Grid.tsx","../src/components/sections/Teaser.tsx","../src/components/sections/TeaserWide.tsx","../src/components/buttons/Pointer.tsx","../src/components/blocks/Slider.tsx","../src/components/sections/IconList.tsx","../src/components/sections/Article.tsx","../src/components/blocks/Feature.tsx","../src/components/sections/FeatureList.tsx","../src/components/blocks/PromotionCard.tsx","../src/components/sections/CrossPromotion.tsx","../src/components/sections/Poster.tsx","../src/components/base/icons/Play.tsx","../src/components/blocks/VideoCard.tsx","../src/components/sections/CallToAction.tsx","../src/components/sections/FactList.tsx","../src/components/blocks/Fact.tsx","../src/components/sections/FactGrid.tsx","../src/components/sections/Table.tsx","../src/components/base/icons/ArrowLeftGhost.tsx","../src/components/base/icons/ArrowRightGhost.tsx","../src/components/blocks/LeafletMap.tsx","../src/components/sections/Map.tsx","../src/components/fields/Textfield.tsx","../src/components/fields/Textarea.tsx","../src/components/base/icons/Check.tsx","../src/components/fields/Checkbox.tsx","../src/components/sections/Form.tsx","../src/components/base/icons/Plus.tsx","../src/components/base/icons/Minus.tsx","../src/components/sections/Accordion.tsx","../src/components/base/icons/ArrowLeftRight.tsx","../src/components/sections/ComparisonSlider.tsx","../src/components/sections/carousel/CarouselBase.tsx","../src/components/sections/carousel/ImageCarousel.tsx","../src/components/sections/carousel/FeatureCarousel.tsx","../src/components/typography/Link.tsx","../src/components/blocks/Bdot.tsx","../src/components/blocks/SocialList.tsx","../src/components/sections/Footer.tsx","../src/components/sections/header/HeaderKenBurns.tsx","../src/components/sections/header/HeaderPoster.tsx","../src/components/typography/Callout.tsx","../src/components/sections/header/HeaderVideo.tsx","../src/components/sections/header/Header.tsx","../src/components/sections/news/NewsAuthorCard.tsx","../src/components/blocks/Tag.tsx","../src/utils/statusFormatter.ts","../src/components/blocks/NewsCard.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/sections/news/NewsVideo.tsx","../src/utils/useObserverSupport.ts","../src/components/sections/news/NewsOverview.tsx","../src/components/buttons/QuicknavButton.tsx","../src/components/sections/Quicknav.tsx","../src/components/sections/Timeline.tsx","../src/components/sections/SocialNav.tsx","../src/components/sections/NumberList.tsx","../src/components/buttons/Button.tsx","../node_modules/date-fns/esm/_lib/toInteger/index.js","../node_modules/date-fns/esm/_lib/requiredArgs/index.js","../node_modules/date-fns/esm/toDate/index.js","../node_modules/date-fns/esm/addMilliseconds/index.js","../node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","../node_modules/date-fns/esm/isValid/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","../node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","../node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","../node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","../node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","../node_modules/date-fns/esm/locale/en-US/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","../node_modules/date-fns/esm/subMilliseconds/index.js","../node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","../node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","../node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","../node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","../node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","../node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","../node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","../node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","../node_modules/date-fns/esm/_lib/format/formatters/index.js","../node_modules/date-fns/esm/_lib/getUTCWeek/index.js","../node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","../node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","../node_modules/date-fns/esm/_lib/format/longFormatters/index.js","../node_modules/date-fns/esm/_lib/protectedTokens/index.js","../node_modules/date-fns/esm/format/index.js","../node_modules/date-fns/esm/locale/de/_lib/formatDistance/index.js","../node_modules/date-fns/esm/locale/de/_lib/formatLong/index.js","../node_modules/date-fns/esm/locale/de/_lib/formatRelative/index.js","../node_modules/date-fns/esm/locale/de/index.js","../node_modules/date-fns/esm/locale/de/_lib/localize/index.js","../node_modules/date-fns/esm/locale/de/_lib/match/index.js","../src/components/buttons/ButtonGhost.tsx","../src/components/base/icons/AngleDown.tsx","../src/components/base/icons/AngleUp.tsx","../src/components/fields/Datepicker.tsx","../node_modules/date-fns/esm/isBefore/index.js","../src/components/fields/Radio.tsx","../src/components/fields/SelectDropdown.tsx","../src/components/fields/FileUpload.tsx","../src/components/sections/DynamicForm.tsx","../src/components/fields/CompactForm.tsx","../src/components/fields/SearchInput.tsx","../src/utils/cookie-consent/mutations.ts","../src/components/blocks/CookieConsent.tsx","../src/components/base/icons/Cross.tsx","../src/components/sections/navigation/menu/Flyout.tsx","../src/components/sections/navigation/menu/Menu.tsx","../src/components/base/icons/MenuBurger.tsx","../src/components/sections/navigation/TopBar.tsx","../src/components/base/icons/ArrowRight.tsx","../src/components/base/icons/CrossSmall.tsx","../src/components/base/icons/Magnifier.tsx","../src/components/base/icons/FlyTo.tsx","../src/components/base/icons/Star.tsx","../src/components/base/icons/StarGhost.tsx","../src/components/base/icons/Mail.tsx","../src/components/base/icons/Phone.tsx","../src/components/base/icons/Route.tsx","../src/components/base/icons/socials/Facebook.tsx","../src/components/base/icons/socials/LinkedIn.tsx","../src/components/base/icons/socials/Twitter.tsx","../src/components/base/icons/socials/Xing.tsx","../src/components/base/icons/socials/Instagram.tsx","../src/components/base/icons/socials/Youtube.tsx","../src/components/sections/Intro.tsx","../src/components/sections/navigation/Navigation.tsx","../src/components/sections/carousel/PromotionCarousel.tsx","../src/components/sections/Video.tsx","../src/components/sections/carousel/VideoCarousel.tsx","../src/utils/useImgPreload.ts","../src/utils/useInterval.ts","../src/utils/useItemHeight.ts","../src/utils/useTouch.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { useEffect, useRef, useState } from 'react';\n\nexport enum ScrollDirection {\n UP,\n DOWN,\n}\n\nexport const useScroll = ({\n initialTopOffset = 0,\n onLeftOffset,\n onEnterOffset,\n}: {\n initialTopOffset?: number;\n onLeftOffset?: () => void;\n onEnterOffset?: () => void;\n}) => {\n const [topOffset, setTopOffset] = useState<number>(initialTopOffset);\n const [isTop, setIsTop] = useState<boolean>(true);\n const [isInOffset, setIsInOffset] = useState<boolean>(true);\n const [scrollDirection, setScrollDirection] = useState<ScrollDirection>(\n ScrollDirection.DOWN\n );\n const lastScrollPos = useRef<number>(0);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const handleScroll = () => {\n setIsTop(window.pageYOffset <= 1);\n setIsInOffset(window.pageYOffset <= 1 + topOffset);\n\n if (lastScrollPos.current) {\n // check if top offset is left\n if (\n window.pageYOffset > 1 + topOffset &&\n lastScrollPos.current <= 1 + topOffset\n ) {\n onLeftOffset && onLeftOffset();\n }\n\n // check if top offset was joined\n if (\n window.pageYOffset <= 1 + topOffset &&\n lastScrollPos.current > 1 + topOffset\n ) {\n onEnterOffset && onEnterOffset();\n }\n\n setScrollDirection((prev) => {\n if (window.pageYOffset <= 1) return ScrollDirection.DOWN;\n return window.pageYOffset > lastScrollPos.current\n ? ScrollDirection.DOWN\n : window.pageYOffset < lastScrollPos.current\n ? ScrollDirection.UP\n : prev;\n });\n }\n lastScrollPos.current = window.pageYOffset;\n };\n\n handleScroll();\n window.addEventListener('scroll', handleScroll);\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n };\n }, [\n lastScrollPos,\n onLeftOffset,\n onEnterOffset,\n scrollDirection,\n topOffset,\n ]);\n\n return {\n isTop,\n isInOffset,\n scrollDirection,\n setTopOffset,\n topOffset,\n };\n};\n","import { css, DefaultTheme } from 'styled-components';\n\nexport type MediaQueryType =\n | 'small'\n | 'medium'\n | 'semilarge'\n | 'large'\n | 'xlarge'\n | 'xxlarge'\n | 'xxxLarge';\n\nexport const mq: { [key in Exclude<MediaQueryType, 'small'>]: string } = {\n medium: '(min-width: 40em)', // 640 px\n semilarge: '(min-width: 52em)', // 832 px\n large: '(min-width: 64em)', // 1024 px\n xlarge: '(min-width: 90em)', // 1440 px\n xxlarge: '(min-width: 105em)', // 1680 px\n xxxLarge: '(min-width: 150em)', // 2400 px\n};\n\nexport const spacings = {\n nudge: 5,\n spacer: 20,\n wrapperSmall: 1000,\n wrapper: 1440,\n wrapperLarge: 2400,\n};\n\n/***** Range Helper *****/\nexport const getSizeByRange = (range: [number, number]): string =>\n `calc(${range[0]}px + (${range[1]} - ${range[0]}) * ((100vw - 300px) / (${spacings.wrapperLarge} - 320)));`;\n\nexport const withRange = (\n range: [number, number],\n property: string\n): string => {\n if (!property) return '';\n\n return `\n ${property}: ${range[0]}px;\n ${property}: ${getSizeByRange(range)};\n\n @media ${mq.xxlarge} {\n ${property}: ${range[1]}px;\n }\n `;\n};\n\n/**\n * Generate css attributes to style text color with plain color or gradient\n * @param fallbackColor\n * @param gradient\n */\nexport const styleTextColor = (fallbackColor?: string, gradient?: string) => {\n if (gradient) {\n return css`\n color: ${fallbackColor};\n\n @supports (-webkit-text-stroke: thin) {\n padding-top: 2px;\n background: ${gradient};\n background-clip: text;\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n `;\n } else {\n return css`\n color: ${fallbackColor};\n `;\n }\n};\n\n/***** Color Types *****/\ninterface ColorOptions {\n light: string;\n medium: string;\n dark: string;\n}\n\nexport type ColorOptionsType = keyof ColorOptions;\n\nexport interface Colors {\n dark: string;\n light: string;\n mono: ColorOptions;\n primary: ColorOptions;\n secondary: ColorOptions;\n tertiary: ColorOptions;\n error: string;\n}\n\nexport type ColorType = keyof Colors;\n\n/***** Font Types *****/\nexport interface FontProps {\n family: string;\n weight?: string;\n style?: string;\n lineHeight?: string;\n letterSpacing?: string;\n size: [number, number];\n textTransform?: string;\n color?: string;\n colorInverted?: string;\n colorGradient?: string;\n colorGradientInverted?: string;\n}\n\nexport type FontPropsType = keyof FontProps;\n\nexport interface FontOptions {\n small: FontProps;\n medium: FontProps;\n big: FontProps;\n}\n\nexport type FontOptionType = keyof FontOptions;\n\nexport interface Fonts {\n copy: FontOptions;\n 'copy-i': FontOptions;\n 'copy-b': FontOptions;\n super: FontProps;\n 'heading-1': FontProps;\n 'heading-2': FontProps;\n 'heading-3': FontProps;\n 'heading-4': FontProps;\n label: FontOptions;\n callout: FontOptions;\n}\n\nexport type FontType = keyof Fonts;\n\n/**\n * Base font styles for all font types\n */\nexport type FontBase = FontProps;\n\n/***** Colors *****/\nconst defaultColors: Colors = {\n dark: '#000000',\n light: '#ffffff',\n mono: {\n light: '#F0F0F0',\n medium: '#C8C8C8',\n dark: '#A5A5A5',\n },\n primary: {\n light: '#DD8AA3',\n medium: '#98012E',\n dark: '#59011B',\n },\n secondary: {\n light: '#5A7384',\n medium: '#35444E',\n dark: '#222A30',\n },\n tertiary: {\n light: '#F2F5FA',\n medium: '#C9CED7',\n dark: '#A8ABB4',\n },\n error: '#ff0000',\n};\n\n/***** Fonts *****/\nconst copyBase: FontProps = {\n family: 'Roboto',\n weight: '400',\n style: 'normal',\n lineHeight: '1.53',\n letterSpacing: '0',\n size: [10, 13],\n textTransform: '',\n color: defaultColors.dark,\n colorInverted: defaultColors.light,\n};\n\nconst headingBase: FontProps = {\n family: 'Roboto',\n weight: '700',\n style: 'normal',\n lineHeight: '1.1',\n letterSpacing: '0',\n size: [38, 40],\n color: defaultColors.dark,\n colorInverted: defaultColors.light,\n};\n\nconst defaultFonts: Fonts = {\n copy: {\n small: {\n ...copyBase,\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n 'copy-i': {\n small: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n 'copy-b': {\n small: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n super: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.43',\n size: [14, 16],\n },\n 'heading-1': headingBase,\n 'heading-2': {\n ...headingBase,\n size: [32, 35],\n lineHeight: '1.14',\n },\n 'heading-3': {\n ...headingBase,\n size: [19, 22],\n lineHeight: '1.14',\n },\n 'heading-4': {\n ...headingBase,\n size: [16, 19],\n lineHeight: '1.5',\n },\n label: {\n small: {\n ...copyBase,\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n callout: {\n small: {\n ...headingBase,\n lineHeight: '1.14',\n size: [33, 35],\n },\n medium: {\n ...headingBase,\n lineHeight: '1.18',\n size: [50, 55],\n },\n big: {\n ...headingBase,\n lineHeight: '1.18',\n size: [60, 62],\n },\n },\n};\n\n/***** Global Settings *****/\nexport interface GlobalSettings {\n sections: {\n /** Radius of image and card edges */\n edgeRadius: string | null;\n /** Customnize gradient for all text on image background gradients */\n imageTextGradient: string;\n /** Date and Time Formats for all news sections */\n newsDateFormat: string;\n newsTimeFormat: string;\n newsLocaleKey: 'de' | 'en';\n };\n}\n\nconst defaultGlobalSettings: GlobalSettings = {\n sections: {\n edgeRadius: null,\n imageTextGradient: `\n linear-gradient(\n 0deg,\n rgba(0, 0, 0, 0.6) 0%,\n rgba(0, 0, 0, 0.4) 30%,\n rgba(0, 0, 0, 0.1) 60%,\n rgba(0, 0, 0, 0) 100%\n );\n `,\n newsDateFormat: 'dd/mm/yy',\n newsTimeFormat: 'hh:mm',\n newsLocaleKey: 'en',\n },\n};\n\n/***** Theme Helper *****/\nexport const getBaseTheme = () => {\n return {\n colors: { ...defaultColors },\n fonts: { types: { ...defaultFonts } },\n globalSettings: { ...defaultGlobalSettings },\n } as DefaultTheme;\n};\n\nexport const getTheme = (theme?: DefaultTheme) => {\n return (\n (theme && theme.colors && theme.fonts && theme.globalSettings) ||\n getBaseTheme()\n );\n};\n\nexport const getColors = (theme?: DefaultTheme) => {\n return theme && theme.colors ? theme.colors : getBaseTheme().colors;\n};\n\nexport const getFonts = (theme?: DefaultTheme) => {\n return theme && theme.fonts?.types\n ? theme.fonts.types\n : getBaseTheme().fonts.types;\n};\n\nexport const getGlobalSettings = (theme?: DefaultTheme) => {\n return theme && theme.globalSettings\n ? theme.globalSettings\n : getBaseTheme().globalSettings;\n};\n","import { useEffect, useState } from 'react';\nimport { MediaQueryType, mq } from './styles';\n\nexport const isBrowser =\n typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\n// *****************\n// useBreakpoint\n// *****************\nconst checkMq = (cmq: MediaQueryType, checkMqs: MediaQueryType[]) => {\n return (\n isBrowser &&\n (checkMqs.length <= 0 || checkMqs.indexOf(cmq) > -1) &&\n (cmq !== 'small' ? window.matchMedia(mq[cmq]).matches : true)\n );\n};\n\nexport const getMediaQuery = (checkMqs: MediaQueryType[]): MediaQueryType => {\n if (checkMq('xxxLarge', checkMqs)) {\n return 'xxxLarge';\n } else if (checkMq('xxlarge', checkMqs)) {\n return 'xxlarge';\n } else if (checkMq('xlarge', checkMqs)) {\n return 'xlarge';\n } else if (checkMq('large', checkMqs)) {\n return 'large';\n } else if (checkMq('semilarge', checkMqs)) {\n return 'semilarge';\n } else if (checkMq('medium', checkMqs)) {\n return 'medium';\n } else {\n return 'small';\n }\n};\n\nexport const useMediaQuery = (mqs?: MediaQueryType[]) => {\n const checkMqs = mqs || [];\n const [mediaQuery, setMediaQuery] = useState<MediaQueryType | undefined>();\n\n useEffect(() => {\n const handleResize = () => {\n const newMediaQuery = getMediaQuery(checkMqs);\n\n if (newMediaQuery !== mediaQuery) {\n setMediaQuery(newMediaQuery);\n }\n };\n\n window.addEventListener('resize', handleResize);\n setMediaQuery(getMediaQuery(checkMqs));\n\n return () => window.removeEventListener('resize', handleResize);\n }, [checkMqs, mediaQuery]);\n\n return mediaQuery;\n};\n","import { useEffect, useState, MutableRefObject, createRef } from 'react';\nimport { useMediaQuery } from './useMediaQuery';\n\ninterface ItemsPerRow {\n small?: number;\n medium?: number;\n semilarge?: number;\n large?: number;\n xlarge?: number;\n}\n\ntype Mq = keyof ItemsPerRow;\n\n// ********************\n// useEqualSheetHeight\n// ********************\n\nexport const useEqualSheetHeight = (props: {\n listLength: number;\n identifiers: string[];\n responsive?: ItemsPerRow;\n}) => {\n const defaultResponsive = {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 3,\n xlarge: 3,\n ...props.responsive,\n };\n const mqs: Mq[] = ['small', 'medium', 'semilarge', 'large', 'xlarge'];\n const currentMq = useMediaQuery(mqs) as Mq | undefined;\n const itemsPerRow = currentMq\n ? defaultResponsive[currentMq]\n : defaultResponsive.small;\n\n const [sheetRefs, setSheetRefs] = useState<\n MutableRefObject<HTMLDivElement>[]\n >([]);\n\n const makeRows = (\n result: Array<number>[],\n _: number,\n index: number,\n arr: number[]\n ) => {\n // make new row after 3 items\n if (index % itemsPerRow === 0)\n result.push(arr.slice(index, index + itemsPerRow) as Array<number>);\n return result;\n };\n\n const setHeights = (\n heights: (number | null)[],\n selector: string,\n refs: MutableRefObject<HTMLDivElement>[]\n ) => {\n const x = heights.reduce(makeRows, []);\n\n x.forEach((rowHeights, y) => {\n const highest = rowHeights.slice().sort((vA, vB) => {\n if (vA && vB) {\n if (vA > vB) return -1;\n return 1;\n } else return 0;\n })[0];\n\n // set height of all items in row to the highest value\n if (rowHeights.length > 1 && highest) {\n for (let x = 0; x < rowHeights.length; x++) {\n const index = x + y * itemsPerRow;\n const el = refs[index].current.querySelector(selector);\n\n if (el) {\n el.setAttribute('style', `height: ${highest}px`);\n }\n }\n }\n });\n };\n\n const resize = (refs: MutableRefObject<HTMLDivElement>[]) => () => {\n const identifierSizes = new Map<string, Array<number | null>>();\n\n // create identifier map\n for (let i = 0; i < props.identifiers.length; i++) {\n identifierSizes.set(props.identifiers[i], []);\n }\n\n // set height values\n refs.filter((ref) => ref.current).forEach(({ current }) => {\n // get height for each element\n props.identifiers.forEach((id) => {\n const element = current.querySelector(id);\n element?.removeAttribute('style');\n\n const prevHeights = identifierSizes.get(id);\n if (prevHeights)\n identifierSizes.set(id, [\n ...prevHeights,\n element ? element.scrollHeight : null,\n ]);\n });\n });\n\n // set heights for each identifier\n identifierSizes.forEach((value, key) => {\n setHeights(value, key, refs);\n });\n };\n\n useEffect(() => {\n const resizeHandler = resize(sheetRefs);\n resizeHandler();\n\n window.addEventListener('resize', resizeHandler);\n\n return () => {\n window.removeEventListener('resize', resizeHandler);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sheetRefs, currentMq]);\n\n const triggerCalculation = () => {\n setSheetRefs(() =>\n Array(props.listLength)\n .fill(null)\n .map((_, i) => sheetRefs[i] || createRef())\n );\n };\n\n useEffect(() => {\n setSheetRefs(() =>\n Array(props.listLength)\n .fill(null)\n .map((_, i) => sheetRefs[i] || createRef())\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.listLength]);\n\n return {\n sheetRefs,\n triggerCalculation,\n };\n};\n","export interface Cookie<T> {\n name: string;\n data: T;\n}\n\nexport const setCookie = <T>({\n name,\n data,\n days = -1,\n path = '/',\n}: {\n name: string;\n data: T;\n days?: number;\n path?: string;\n}) => {\n let cookieString = `${name}=`;\n\n // set cookie value\n let valueString = '';\n const dataKeys = Object.keys(data);\n for (let i = 0; i < dataKeys.length; i++) {\n valueString += `${dataKeys[i]}:${data[dataKeys[i]]}|`;\n }\n\n cookieString += encodeURIComponent(\n valueString.substr(0, valueString.length - 1)\n );\n\n // specify path\n cookieString += `; path=${path};`;\n\n // check if cookie should have lifetime\n if (days >= 0) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n cookieString += ` expires=${date.toUTCString()};`;\n }\n document.cookie = cookieString;\n};\n\nexport const getCookie = <T>(name: string): Cookie<T> | undefined => {\n let cookie = undefined;\n\n // get cookie value\n const b = document.cookie.match('(^|;)\\\\s*' + name + '\\\\s*=\\\\s*([^;]+)');\n let cookieValue = b ? b.pop() : '';\n cookieValue = cookieValue ? decodeURIComponent(cookieValue) : '';\n\n if (cookieValue) {\n const valueArray = cookieValue.split('|').map((el) => {\n const keyValueArray = el.split(':');\n return {\n key: keyValueArray[0],\n value: keyValueArray[1],\n };\n });\n\n const cookieData: { [k: string]: any } = {};\n for (let i = 0; i < valueArray.length; i++) {\n const value: any = valueArray[i].value;\n\n // checking for right types\n if (!isNaN(Number(value)))\n cookieData[valueArray[i].key] = Number(value) as number;\n else if (isBoolean(value))\n cookieData[valueArray[i].key] = stringToBoolean(\n value\n ) as boolean;\n else cookieData[valueArray[i].key] = value as string;\n }\n\n cookie = {\n name: name,\n data: cookieData as T,\n } as Cookie<T>;\n }\n return cookie;\n};\n\nexport const deleteCookie = (name: string) => {\n setCookie<any>({ name, data: {} });\n};\n\nconst stringToBoolean = (value: string | number | boolean) => {\n return [true, 'true', 'True', 'TRUE', '1', 1].indexOf(value) > -1;\n};\n\nconst isBoolean = (value: string | number | boolean) => {\n return value === 'true' || value === 'false';\n};\n\nconst isNaN = (value: number) => {\n if (Number.isNaN !== undefined) return Number.isNaN(value);\n else return value !== value;\n};\n","import { useState, useEffect } from 'react';\n\nconst useIE = (initialValue?: boolean) => {\n const [isIE, setIE] = useState(initialValue || false);\n\n useEffect(() => {\n setIE((document.body.style as any).msTouchAction !== undefined);\n }, []);\n return isIE;\n};\n\nexport default useIE;\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useScrollTo = (fallbackScrollDuration: number) => {\n const startTime = useRef<number>(-1);\n const firstPos = useRef<number>(0);\n const [targetPos, setTargetPos] = useState<number | undefined>(undefined);\n\n const outQuad = (n: number) => {\n return n * (2 - n);\n };\n\n useEffect(() => {\n if (targetPos === undefined) return;\n if ('scrollBehavior' in document.documentElement.style) {\n window.scroll({\n top: targetPos,\n left: 0,\n behavior: 'smooth',\n });\n setTargetPos(undefined);\n } else {\n const animate = (timestamp: number) => {\n if (startTime.current === -1) {\n startTime.current = timestamp || new Date().getTime();\n }\n\n const elapsed = timestamp - startTime.current;\n const progress = elapsed / fallbackScrollDuration;\n const easeProgress = +outQuad(progress).toFixed(2);\n\n const newPos =\n targetPos === 0\n ? firstPos.current - firstPos.current * easeProgress\n : firstPos.current + targetPos * easeProgress;\n\n // scroll to new position\n window.scrollTo(0, newPos);\n\n if (\n (targetPos > 0 && newPos >= firstPos.current + targetPos) ||\n (targetPos < 0 && newPos <= firstPos.current + targetPos) ||\n (targetPos === 0 && newPos <= 0)\n ) {\n cancelAnimationFrame(startTime.current);\n startTime.current = -1;\n setTargetPos(undefined);\n } else {\n window.requestAnimationFrame(animate);\n }\n };\n\n cancelAnimationFrame(startTime.current);\n startTime.current = -1;\n firstPos.current =\n window.pageYOffset || document.documentElement.scrollTop;\n window.requestAnimationFrame(animate);\n }\n }, [targetPos, fallbackScrollDuration]);\n\n return setTargetPos;\n};\n","import { useEffect, useState } from 'react';\nimport { isBrowser, useMediaQuery } from './useMediaQuery';\n\n// *****************\n// usePoster\n// *****************\n\ninterface PosterImage {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n}\n\nexport const canUseWebP = () => {\n if (!isBrowser) return false;\n\n const elem = document.createElement('canvas');\n\n if (!(elem.getContext && elem.getContext('2d'))) {\n // was able or not to get WebP representation\n return elem.toDataURL('image/webp').indexOf('data:image/webp') == 0;\n }\n\n // very old browser like IE 8, canvas not supported\n return false;\n};\n\nexport type PosterMq = 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge';\n\nexport const usePoster = (\n posterImage: PosterImage & {\n webp?: PosterImage;\n },\n mqs?: PosterMq[]\n) => {\n const [currentImage, setCurrentImage] = useState<string | undefined>();\n\n const workingImage =\n posterImage.webp && canUseWebP() ? posterImage.webp : posterImage;\n const currentMq = useMediaQuery(\n mqs || ['small', 'medium', 'semilarge', 'large', 'xlarge']\n ) as PosterMq | undefined;\n\n useEffect(() => {\n if (\n currentMq &&\n workingImage[currentMq] &&\n workingImage[currentMq] !== currentImage\n ) {\n setCurrentImage(workingImage[currentMq]);\n }\n }, [currentImage, currentMq, workingImage]);\n\n return currentImage;\n};\n","// converting 6 character hex color code to rgba string\nexport const hexToRgba = (hex: string, alpha = 1) => {\n const rgb = hex.match(/\\w\\w/g)?.map((x) => parseInt(x, 16));\n return rgb && `rgba(${rgb[0]},${rgb[1]},${rgb[2]},${alpha})`;\n};\n","export const getBgImage = (\n bgImage: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n },\n mq?: 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge'\n): string => {\n switch (mq) {\n default:\n case 'small':\n return bgImage.small;\n\n case 'medium':\n return (\n bgImage.medium ||\n bgImage.semilarge ||\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.small\n );\n\n case 'semilarge':\n return (\n bgImage.semilarge ||\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.medium ||\n bgImage.small\n );\n\n case 'large':\n return (\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.semilarge ||\n bgImage.medium ||\n bgImage.small\n );\n\n case 'xlarge':\n return (\n bgImage.xlarge ||\n bgImage.large ||\n bgImage.semilarge ||\n bgImage.medium ||\n bgImage.small\n );\n }\n};\n","import React, { FC } from 'react';\nimport { DefaultTheme, ThemeProvider } from 'styled-components';\n\nimport { FontBase, getBaseTheme } from 'utils/styles';\n\ntype RecursivePartial<T> = {\n [P in keyof T]?: RecursivePartial<T[P]>;\n};\n\nexport type Theme = RecursivePartial<DefaultTheme>;\n\n/**\n * Assigning font base key values to theme. Searches for each font base object key inside target theme object and replacing the values\n * @param target Combined result object\n * @param source FontBase object with properties that should by overritten.\n */\nconst assignFontBase = (\n target: DefaultTheme,\n source?: RecursivePartial<FontBase>\n) => {\n if (!source) return target;\n // deep iterate through target and search matching key\n const assign = (target: any, key: string, value: string) => {\n Object.keys(target).forEach((tKey) => {\n // check if target value is an object and no array\n if (\n target[tKey] &&\n typeof target[tKey] === 'object' &&\n !Array.isArray(target[tKey])\n ) {\n target[tKey] = assign(target[tKey], key, value);\n } else if (key === tKey) {\n target[tKey] = value;\n }\n });\n return target;\n };\n\n // search each base key and replace values\n Object.keys(source).forEach((sKey) => {\n if (source[sKey])\n target.fonts.types = assign(target.fonts.types, sKey, source[sKey]);\n });\n return target;\n};\n\n/**\n * Comnbining Theme objects\n * @param target Result theme object\n * @param source Theme object that should be assigned to target\n */\nconst assignTo = (target: DefaultTheme, source: Theme) => {\n const output = { ...target };\n\n Object.keys(source).forEach((key) => {\n const sourceVal = source[key];\n const targetVal = target[key];\n output[key] =\n targetVal &&\n sourceVal &&\n typeof targetVal === 'object' &&\n typeof sourceVal === 'object'\n ? assignTo(targetVal, sourceVal)\n : sourceVal;\n });\n return output;\n};\n\nexport const LibThemeProvider: FC<{\n theme: Theme;\n}> = ({ theme, children }) => {\n const combinedBaseTheme = assignFontBase(getBaseTheme(), theme.fonts?.base);\n const combinedTheme = assignTo(combinedBaseTheme, theme);\n return <ThemeProvider theme={combinedTheme}>{children}</ThemeProvider>;\n};\n","import * as React from 'react';\nimport styled, { css } from 'styled-components';\nimport { mq, spacings, withRange } from 'utils/styles';\n\nexport type BgMode = 'full' | 'larger-left' | 'larger-right' | 'inverted';\n\nconst getBackground = (mode: BgMode, bgColor: string) => {\n let bgValue = undefined;\n\n switch (mode) {\n case 'full':\n bgValue = bgColor;\n break;\n\n case 'inverted':\n bgValue = bgColor;\n break;\n\n case 'larger-left':\n bgValue = `linear-gradient(to left, transparent 40%, ${bgColor} 40%)`;\n break;\n\n case 'larger-right':\n bgValue = `linear-gradient(to right, transparent 40%, ${bgColor} 40%)`;\n break;\n }\n return bgValue;\n};\n\nconst View = styled.section<{\n as?: SectionType;\n bgIdent: string;\n isStackable?: boolean;\n addSeperation?: boolean;\n}>`\n position: relative;\n overflow: ${({ as }) => (as === 'div' ? 'visible' : 'hidden')};\n\n // section paddings\n ${({ addSeperation, isStackable, bgIdent }) =>\n addSeperation &&\n css`\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4],\n 'padding-top'\n )}\n ${withRange(\n [\n isStackable ? spacings.spacer : spacings.spacer * 2,\n isStackable ? spacings.spacer : spacings.spacer * 4,\n ],\n 'padding-bottom'\n )}\n &[data-stack-ident='true'] + & {\n ${withRange([spacings.spacer, spacings.spacer], 'padding-top')};\n }\n &[data-bg-ident='${bgIdent}'] + &[data-bg-ident='${bgIdent}'] {\n ${withRange([0, 0], 'padding-top')}\n }\n `}\n\n // section margins\n ${({ addSeperation, isStackable, bgIdent }) =>\n addSeperation &&\n css`\n *:not([data-bg-ident='transparent'])\n + &[data-bg-ident='larger-left'] {\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4],\n 'margin-top'\n )};\n }\n *:not([data-bg-ident='transparent'])\n + &[data-bg-ident='larger-right'] {\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4],\n 'margin-top'\n )};\n }\n &[data-bg-ident='larger-left']\n + &:not([data-bg-ident='transparent']) {\n ${withRange(\n [\n isStackable ? spacings.spacer : spacings.spacer * 2,\n isStackable ? spacings.spacer : spacings.spacer * 4,\n ],\n 'margin-top'\n )};\n }\n &[data-bg-ident='larger-right']\n + &:not([data-bg-ident='transparent']) {\n ${withRange(\n [\n isStackable ? spacings.spacer : spacings.spacer * 2,\n isStackable ? spacings.spacer : spacings.spacer * 4,\n ],\n 'margin-top'\n )};\n }\n &[data-bg-ident='${bgIdent}'] + &[data-bg-ident='${bgIdent}'] {\n ${withRange([0, 0], 'margin-top')}\n }\n `}\n`;\n\nconst Back = styled.div<{\n bgColor?: string;\n bgMode?: BgMode;\n}>`\n display: ${({ bgColor, bgMode }) => (bgColor && bgMode ? 'block' : 'none')};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n max-width: ${({ bgMode }) =>\n (bgMode === 'full' || bgMode === 'inverted'\n ? spacings.wrapperLarge\n : spacings.wrapper) + 'px'};\n background: ${({ bgColor }) => bgColor || undefined};\n margin: 0 auto;\n\n @media ${mq.semilarge} {\n background: ${({ bgColor, bgMode }) =>\n bgColor && bgMode ? getBackground(bgMode, bgColor) : undefined};\n }\n\n @media ${mq.xlarge} {\n :before {\n content: ${({ bgMode }) =>\n bgMode === 'larger-left' ? `\"\"` : undefined};\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: ${(spacings.wrapperLarge - spacings.wrapper) / 2}px;\n background-color: ${({ bgColor }) => bgColor && bgColor};\n transform: translateX(-100%);\n }\n :after {\n content: ${({ bgMode }) =>\n bgMode === 'larger-right' ? `\"\"` : undefined};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: ${(spacings.wrapperLarge - spacings.wrapper) / 2}px;\n background-color: ${({ bgColor }) => bgColor && bgColor};\n transform: translateX(100%);\n }\n }\n`;\n\nexport type SectionType = 'header' | 'footer' | 'div';\n\nconst Section: React.FC<{\n renderAs?: SectionType;\n bgColor?: string;\n bgMode?: BgMode;\n addSeperation?: boolean;\n isStackable?: boolean;\n className?: string;\n}> = ({\n renderAs,\n bgColor,\n bgMode,\n addSeperation = false,\n isStackable = false,\n className,\n children,\n}) => {\n switch (bgMode) {\n case 'larger-left':\n bgMode = 'larger-left';\n break;\n case 'larger-right':\n bgMode = 'larger-right';\n break;\n case 'inverted':\n bgMode = 'inverted';\n break;\n case 'full':\n bgMode = 'full';\n break;\n default:\n bgMode = undefined;\n }\n\n return (\n <View\n as={renderAs}\n data-bg-ident={bgColor && bgMode ? bgMode : 'transparent'}\n bgIdent={bgColor && bgMode ? bgMode : 'transparent'}\n addSeperation={\n !renderAs || (renderAs && renderAs !== 'div')\n ? addSeperation\n : false\n }\n isStackable={isStackable}\n data-stack-ident={isStackable ? 'true' : 'false'}\n className={className}\n >\n {bgColor && bgMode && <Back bgColor={bgColor} bgMode={bgMode} />}\n {children}\n </View>\n );\n};\n\nexport default Section;\n\nexport const mapToBgMode = (\n mode?: 'full' | 'splitted' | 'inverted',\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\n default:\n return undefined;\n }\n};\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings } from 'utils/styles';\n\nexport type ClampWidthType = 'small' | 'normal' | 'large';\n\nconst View = styled.div<{\n clampWidth?: ClampWidthType;\n addWhitespace?: boolean;\n}>`\n position: relative;\n width: 100%;\n max-width: ${({ clampWidth }) =>\n clampWidth === 'large'\n ? spacings.wrapperLarge\n : clampWidth === 'small'\n ? spacings.wrapperSmall\n : spacings.wrapper}px;\n margin-left: auto;\n margin-right: auto;\n padding: 0\n ${({ addWhitespace }) => (addWhitespace ? spacings.nudge * 2 : 0)}px;\n\n @media ${mq.medium} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n\n @media ${mq.semilarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * 100 : 0}%;\n padding-left: ${({ addWhitespace }) =>\n addWhitespace\n ? `\n max(\n ${spacings.spacer}px,\n ${(1 / 28) * 100}%\n );\n `\n : 0};\n\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * spacings.wrapper : 0}px;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n`;\n\nconst Wrapper: React.FC<{\n addWhitespace?: boolean;\n clampWidth?: ClampWidthType;\n className?: string;\n}> = ({\n addWhitespace = false,\n clampWidth = 'normal',\n className,\n children,\n}) => {\n return (\n <View\n className={className}\n addWhitespace={addWhitespace}\n clampWidth={clampWidth}\n >\n {children}\n </View>\n );\n};\n\nexport default Wrapper;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n styleTextColor,\n FontType,\n getFonts as font,\n mq,\n withRange,\n} from 'utils/styles';\n\ntype HeadingType = Exclude<\n FontType,\n 'copy' | 'copy-i' | 'copy-b' | 'label' | 'callout'\n>;\n\n// Styles\nconst BaseStyles = styled.h1<{\n hyphens?: boolean;\n hasShadow?: boolean;\n textColor?: string;\n textGradient?: string;\n type: HeadingType;\n}>`\n display: inline-block;\n margin: 0;\n padding: 0;\n ${({ textColor, textGradient }) => styleTextColor(textColor, textGradient)}\n\n hyphens: auto;\n /* overflow-wrap: break-word; */\n\n ${(props: { hyphens?: boolean }) =>\n !props.hyphens &&\n css`\n @media ${mq.large} {\n hyphens: none;\n }\n `}\n\n text-shadow: ${({ hasShadow }) =>\n hasShadow && '1px 2px 8px rgba(0, 0, 0, 0.25)'};\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin: 0;\n padding: 0;\n border: 0;\n outline: 0;\n font-weight: inherit;\n font-style: inherit;\n font-size: 100%;\n font-family: inherit;\n vertical-align: baseline;\n }\n`;\n\nconst View = styled(BaseStyles)`\n font-family: ${({ type, theme }) => font(theme)[type].family};\n font-weight: ${({ type, theme }) => font(theme)[type].weight};\n font-style: ${({ type, theme }) => font(theme)[type].style};\n ${({ type, theme }) => withRange(font(theme)[type].size, 'font-size')}\n line-height: ${({ type, theme }) => font(theme)[type].lineHeight};\n letter-spacing: ${({ type, theme }) => font(theme)[type].letterSpacing};\n text-transform: ${({ type, theme }) => font(theme)[type].textTransform};\n`;\n\nexport type HeadlineTag =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'span'\n | 'div';\n\nconst Heading: React.FC<{\n as?: HeadlineTag;\n isInverted?: boolean;\n size?: HeadingType;\n textColor?: string;\n textGradient?: string;\n hyphens?: boolean;\n hasShadow?: boolean;\n innerHTML?: string;\n\n className?: string;\n}> = ({\n as,\n isInverted,\n className,\n size = 'heading-2',\n textColor,\n textGradient,\n hyphens = false,\n hasShadow = false,\n innerHTML,\n children,\n ...rest\n}) => {\n const theme = React.useContext(ThemeContext);\n let tag: HeadlineTag = 'h2';\n\n switch (size) {\n default:\n case 'heading-1':\n tag = 'h1';\n break;\n case 'heading-2':\n tag = 'h2';\n break;\n case 'heading-3':\n tag = 'h3';\n break;\n case 'heading-4':\n tag = 'h4';\n break;\n case 'super':\n tag = 'div';\n break;\n }\n\n // get font settings from global context\n const fontSettings = font(theme)?.[size];\n\n return (\n <View\n as={as || tag}\n type={size}\n textColor={\n textColor ||\n (isInverted ? fontSettings.colorInverted : fontSettings.color)\n }\n textGradient={\n textGradient ||\n (!textColor\n ? isInverted\n ? fontSettings.colorGradientInverted\n : fontSettings.colorGradient\n : undefined)\n }\n hyphens={hyphens}\n hasShadow={hasShadow}\n dangerouslySetInnerHTML={\n innerHTML && !children ? { __html: innerHTML } : undefined\n }\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n};\n\nHeading.defaultProps = {\n as: 'h2',\n size: 'heading-2',\n};\n\nexport default Heading;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport Heading, { HeadlineTag } from 'components/typography/Heading';\nimport { spacings, withRange } from 'utils/styles';\n\nconst View = styled.div<{ isCentered?: boolean }>`\n display: block;\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n margin: ${({ isCentered }) => isCentered && '0 auto'};\n\n & > * + * {\n ${withRange([spacings.nudge * 2, spacings.nudge * 3], 'padding-top')};\n }\n`;\n\nconst Title: FC<{\n colorMode?: 'default' | 'inverted' | 'onImage';\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n title?: string;\n titleAs?: HeadlineTag;\n isCentered?: boolean;\n className?: string;\n}> = ({\n colorMode = 'default',\n superTitle,\n superTitleAs,\n title,\n titleAs,\n isCentered = false,\n className,\n}) => {\n return (\n <View isCentered={isCentered} className={className}>\n {superTitle && (\n <div>\n <Heading\n as={superTitleAs || 'h2'}\n size=\"super\"\n textColor={colorMode === 'onImage' ? '#fff' : undefined}\n isInverted={colorMode === 'inverted'}\n innerHTML={superTitle}\n />\n </div>\n )}\n {title && (\n <div>\n <Heading\n as={titleAs || 'h3'}\n size=\"heading-2\"\n textColor={colorMode === 'onImage' ? '#fff' : undefined}\n isInverted={colorMode === 'inverted'}\n innerHTML={title}\n />\n </div>\n )}\n </View>\n );\n};\n\nexport default Title;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n FontType,\n mq,\n spacings,\n withRange,\n FontOptionType,\n getFonts as font,\n styleTextColor,\n} from 'utils/styles';\n\ntype CopyType = Exclude<\n FontType,\n | 'heading-1'\n | 'heading-2'\n | 'heading-3'\n | 'heading-4'\n | 'callout'\n | 'super'\n | 'label'\n>;\n\nconst BaseStyles = styled.div<{\n textColor?: string;\n textGradient?: string;\n columns?: boolean;\n type: CopyType;\n size: FontOptionType;\n}>`\n hyphens: auto;\n ${({ textColor, textGradient }) => styleTextColor(textColor, textGradient)}\n\n @media ${mq.medium} {\n hyphens: none;\n }\n\n a:not([class]) {\n color: currentColor;\n transition: color 0.25s;\n\n &:hover {\n opacity: 0.75;\n }\n }\n\n *:first-child {\n margin-top: 0;\n }\n\n // *:last-child {\n // margin-bottom: 0;\n // }\n\n :not(li) > ul,\n :not(li) > ol {\n display: inline-block;\n padding-left: 0;\n }\n\n li > ul,\n li > ol {\n padding-left: 0;\n }\n\n ul,\n ol li {\n list-style-position: outside;\n margin-left: 1.1em;\n }\n\n ${({ columns }) =>\n columns &&\n css`\n columns: 350px 2;\n column-gap: ${spacings.spacer}px;\n\n li {\n break-inside: avoid;\n }\n\n blockquote {\n break-inside: avoid;\n }\n `};\n`;\n\nconst View = styled(BaseStyles)`\n font-family: ${({ type, size, theme }) => font(theme)[type][size].family};\n font-weight: ${({ type, size, theme }) => font(theme)[type][size].weight};\n font-style: ${({ type, size, theme }) => font(theme)[type][size].style};\n ${({ type, size, theme }) =>\n withRange(font(theme)[type][size].size, 'font-size')}\n line-height: ${({ type, size, theme }) =>\n font(theme)[type][size].lineHeight};\n letter-spacing: ${({ type, size, theme }) =>\n font(theme)[type][size].letterSpacing};\n text-transform: ${({ type, size, theme }) =>\n font(theme)[type][size].textTransform};\n`;\n\nconst Copy: React.FC<{\n isInverted?: boolean;\n textColor?: string;\n textGradient?: string;\n type?: CopyType;\n size?: FontOptionType;\n columns?: boolean;\n innerHTML?: string;\n className?: string;\n}> = ({\n isInverted,\n type = 'copy',\n size = 'medium',\n textColor,\n textGradient,\n columns = false,\n innerHTML,\n className,\n children,\n ...rest\n}) => {\n const theme = React.useContext(ThemeContext);\n const fontSettings = font(theme)?.[type]?.[size];\n\n return (\n <View\n type={type}\n size={size}\n textColor={\n textColor ||\n (isInverted ? fontSettings.colorInverted : fontSettings.color)\n }\n textGradient={\n textGradient ||\n (!textColor\n ? isInverted\n ? fontSettings.colorGradientInverted\n : fontSettings.colorGradient\n : undefined)\n }\n columns={columns}\n dangerouslySetInnerHTML={\n innerHTML && !children ? { __html: innerHTML } : undefined\n }\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n};\n\nCopy.defaultProps = { type: 'copy', size: 'medium' };\n\nexport default Copy;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings } from 'utils/styles';\n\nconst View = styled.div<{ isCentered?: boolean; isMirrored?: boolean }>`\n display: inline-flex;\n flex-wrap: wrap;\n flex-direction: ${({ isMirrored }) =>\n isMirrored ? 'column-reverse' : 'column'};\n\n justify-content: ${({ isMirrored, isCentered }) =>\n isCentered ? 'center' : isMirrored ? 'flex-end' : 'flex-start'};\n\n margin-top: -${spacings.spacer * 0.5}px;\n margin-left: -${spacings.spacer}px;\n width: calc(100% + ${spacings.spacer}px);\n\n & > * {\n flex: 1 0 auto;\n margin-top: ${spacings.spacer * 0.5}px;\n margin-left: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n flex-direction: ${({ isMirrored }) =>\n isMirrored ? 'row-reverse' : 'row'};\n align-items: stretch;\n width: auto;\n }\n`;\n\nconst Actions: FC<{\n isCentered?: boolean;\n isMirrored?: boolean;\n primary?: React.ReactNode;\n secondary?: React.ReactNode;\n className?: string;\n}> = ({\n isCentered = false,\n isMirrored = false,\n primary,\n secondary,\n className,\n}) => {\n return (\n <View\n isCentered={isCentered}\n isMirrored={isMirrored}\n className={className}\n >\n {primary && primary}\n {secondary && secondary}\n </View>\n );\n};\n\nexport default Actions;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { spacings, mq, withRange } from 'utils/styles';\n\nimport Title from 'components/blocks/Title';\nimport Copy from 'components/typography/Copy';\nimport Actions from 'components/blocks/Actions';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst View = styled.div<{ isCentered?: boolean }>`\n width: 100%;\n text-align: ${({ isCentered }) => isCentered && 'center'};\n`;\n\nconst StyledTitle = styled(Title)<{ clampTitle?: boolean }>`\n max-width: ${({ clampTitle }) =>\n clampTitle && (13 / 28) * spacings.wrapper + '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.nudge * 5}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')}\n\n @media ${mq.semilarge} {\n align-items: flex-start;\n\n & > * {\n max-width: ${(19 / 28) * spacings.wrapper + 'px'};\n }\n }\n`;\n\nconst IntroBlock: React.FC<{\n colorMode?: 'default' | 'inverted' | 'onImage';\n title: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isCentered?: boolean;\n clampTitle?: boolean;\n clampText?: boolean;\n className?: string;\n}> = ({\n colorMode = 'default',\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isCentered = false,\n clampTitle = true,\n clampText = true,\n className,\n}) => {\n return (\n <View isCentered={isCentered} className={className}>\n <StyledTitle\n colorMode={colorMode}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n isCentered={isCentered}\n clampTitle={clampTitle}\n />\n {text && (\n <ContentBlock\n type=\"copy-b\"\n textColor={colorMode === 'onImage' ? '#fff' : undefined}\n isInverted={colorMode === 'inverted'}\n isCentered={isCentered}\n clampText={clampText}\n innerHTML={text}\n />\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={\n primaryAction &&\n primaryAction(\n colorMode === 'inverted' || colorMode === 'onImage'\n )\n }\n secondary={\n secondaryAction &&\n secondaryAction(\n colorMode === 'inverted' || colorMode === 'onImage'\n )\n }\n />\n )}\n </View>\n );\n};\n\nexport default IntroBlock;\n","import * as React from 'react';\nimport styled, { css } from 'styled-components';\nimport { mq } from 'utils/styles';\n\nexport interface ImageProps {\n alt?: string;\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n coverSpace?: boolean;\n}\n\nconst Img = styled.img<{ coverSpace?: boolean }>`\n max-width: 100%;\n display: block;\n align-self: flex-start;\n ${({ coverSpace }) =>\n coverSpace &&\n css`\n width: 100%;\n object-fit: cover;\n object-position: center;\n `}\n`;\n\nconst Picture = styled.picture<{ coverSpace?: boolean }>`\n ${({ coverSpace }) =>\n coverSpace &&\n `\n display: flex;\n height: 100%;\n width: 100%;\n`}\n`;\n\nconst Image: React.FC<\n { className?: string; onClick?: () => void } & ImageProps\n> = ({\n className,\n small,\n medium,\n semilarge,\n large,\n xlarge,\n alt,\n coverSpace,\n onClick,\n}) => {\n return (\n <Picture coverSpace={coverSpace} onClick={onClick}>\n {xlarge && <source srcSet={xlarge} media={mq.xlarge} />}\n {large && <source srcSet={large} media={mq.large} />}\n {semilarge && <source srcSet={semilarge} media={mq.semilarge} />}\n {medium && <source srcSet={medium} media={mq.medium} />}\n <Img\n srcSet={small}\n alt={alt || ''}\n coverSpace={coverSpace}\n loading=\"lazy\"\n className={className}\n />\n </Picture>\n );\n};\n\nexport default Image;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } 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 {\n getColors as color,\n getGlobalSettings as global,\n mq,\n spacings,\n} from 'utils/styles';\n\nconst ImgContainer = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n width: 100%;\n\n @media ${mq.semilarge} {\n margin-left: ${spacings.spacer * -1}px;\n width: calc(100% + ${spacings.spacer}px);\n }\n`;\n\nconst ImgWrapper = styled.div<{ isFull?: boolean }>`\n flex: 0 100%;\n padding-top: ${spacings.nudge * 2}px;\n\n picture > img {\n width: 100%;\n }\n\n @media ${mq.semilarge} {\n flex: 0 ${({ isFull }) => (isFull ? 100 : 50)}%;\n padding-left: ${spacings.spacer}px;\n padding-top: ${spacings.spacer}px;\n\n /* &:last-child:nth-child(odd) {\n flex: 0 100%;\n } */\n }\n`;\n\nconst StyledImage = styled(Image)`\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n overflow: hidden;\n`;\n\ntype ImageType = ImageProps & { isFull?: boolean };\n\nconst Gallery: FC<{\n bgMode?: 'full' | 'inverted';\n images?: Array<ImageType>;\n className?: string;\n}> = ({ bgMode, images, className }) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n\n const isNextImgFull = (images: ImageType[], currentIndex: number) => {\n const newIndex = ++currentIndex;\n if (images && images[newIndex]) return images[newIndex]?.isFull;\n else return false;\n };\n\n // map images to fill always full width\n images = images?.map((img, i, array) => {\n if (!img.isFull) {\n img.isFull =\n (i % 2 === 0 && isNextImgFull(array, i)) || array.length === 1;\n }\n return img;\n });\n\n return (\n <Section\n addSeperation\n bgMode={mapToBgMode(bgMode, true)}\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode === 'full'\n ? color(theme).mono.light\n : 'transparent'\n }\n className={className}\n >\n <Wrapper\n addWhitespace={global(theme).sections.edgeRadius ? true : false}\n >\n <ImgContainer>\n {images &&\n images.map((img, i) => (\n <ImgWrapper key={i} isFull={img.isFull}>\n <StyledImage {...img} />\n </ImgWrapper>\n ))}\n </ImgContainer>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Gallery;\n","import * as React from 'react';\nimport styled, { css } from 'styled-components';\nimport { spacings, mq } from 'utils/styles';\n\nexport interface ColPropsSettings {\n /** Normalisierte Werte zwischen 0 und 1: z.B. 12 von 28 Spalten (12 / 28) */\n span?: number;\n /** Normalisierte Werte zwischen -1 und 1: z.B. -12 von 28 Spalten (-12 / 28) */\n move?: number;\n valign?: VerticalAlign;\n}\n\ntype VerticalAlign = 'top' | 'center' | 'bottom';\n\ninterface ColProps extends ColPropsSettings {\n medium?: ColPropsSettings;\n semilarge?: ColPropsSettings;\n large?: ColPropsSettings;\n xlarge?: ColPropsSettings;\n}\n\nconst gridSettings = {\n cols: 28,\n gutter: spacings.spacer,\n};\n\nconst getWidth = (props: ColProps) => {\n const mediumSpan = props.medium ? props.medium.span : 1;\n const semilargeSpan = props.semilarge ? props.semilarge.span : 1;\n const largeSpan = props.large ? props.large.span : 1;\n const xlargeSpan = props.xlarge ? props.xlarge.span : 1;\n\n return css`\n width: ${(props.span || 1) * 100}%;\n\n ${(props: ColProps) => {\n return props.medium\n ? css`\n @media ${mq.medium} {\n width: ${(mediumSpan || 1) * 100}%;\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.semilarge\n ? css`\n @media ${mq.semilarge} {\n width: ${(semilargeSpan || 1) * 100}%;\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.large\n ? css`\n @media ${mq.large} {\n width: ${(largeSpan || 1) * 100}%;\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.xlarge\n ? css`\n @media ${mq.xlarge} {\n width: ${(xlargeSpan || 1) * 100}%;\n }\n `\n : '';\n }}\n `;\n};\n\nconst getLeftRight = (props: ColProps) => {\n const mediumMove = props.medium ? props.medium.move : 0;\n const semilargeMove = props.semilarge ? props.semilarge.move : 0;\n const largeMove = props.large ? props.large.move : 0;\n const xlargeMove = props.xlarge ? props.xlarge.move : 0;\n\n return css`\n left: ${props.move && props.move > 0 ? props.move * 100 + '%' : 'auto'};\n right: ${props.move && props.move < 0\n ? props.move * -100 + '%'\n : 'auto'};\n\n ${(props: ColProps) => {\n return props.medium\n ? css`\n @media ${mq.medium} {\n left: ${mediumMove && mediumMove > 0\n ? mediumMove * 100 + '%'\n : 'auto'};\n right: ${mediumMove && mediumMove < 0\n ? mediumMove * -100 + '%'\n : 'auto'};\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.semilarge\n ? css`\n @media ${mq.semilarge} {\n left: ${semilargeMove && semilargeMove > 0\n ? semilargeMove * 100 + '%'\n : 'auto'};\n right: ${semilargeMove && semilargeMove < 0\n ? semilargeMove * -100 + '%'\n : 'auto'};\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.large\n ? css`\n @media ${mq.large} {\n left: ${largeMove && largeMove > 0\n ? largeMove * 100 + '%'\n : 'auto'};\n right: ${largeMove && largeMove < 0\n ? largeMove * -100 + '%'\n : 'auto'};\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.xlarge\n ? css`\n @media ${mq.xlarge} {\n left: ${xlargeMove && xlargeMove > 0\n ? xlargeMove * 100 + '%'\n : 'auto'};\n right: ${xlargeMove && xlargeMove < 0\n ? xlargeMove * -100 + '%'\n : 'auto'};\n }\n `\n : '';\n }}\n `;\n};\n\nconst StyledCol = styled.div<GridProps & ColProps>`\n ${getWidth};\n ${getLeftRight};\n padding-top: ${({ gutter }) => gutter || 0}px;\n padding-left: ${({ gutter }) => gutter || 0}px;\n display: block;\n position: relative;\n\n align-self: ${({ valign }) => {\n switch (valign) {\n case 'top':\n return 'flex-start';\n case 'center':\n return 'center';\n case 'bottom':\n return 'flex-end';\n default:\n return undefined;\n }\n }};\n`;\n\nconst Col: React.FC<ColProps> = (props) => {\n return <React.Fragment>{props.children}</React.Fragment>;\n};\n\ninterface GridProps {\n gutter?: number;\n valign?: VerticalAlign;\n}\n\nconst StyledGrid = styled.div<GridProps>`\n margin-top: -${({ gutter }) => gutter || 0}px;\n margin-left: -${({ gutter }) => gutter || 0}px;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n\n align-items: ${({ valign }) => {\n switch (valign) {\n case 'top':\n return 'flex-start';\n case 'center':\n return 'center';\n case 'bottom':\n return 'flex-end';\n default:\n return undefined;\n }\n }};\n`;\n\nconst Grid: React.FC<GridProps> = ({ gutter, valign, children }) => {\n return (\n <StyledGrid gutter={gutter} valign={valign}>\n {React.Children.map(children, (comp: any) => {\n return <StyledCol {...comp.props} gutter={gutter} />;\n })}\n </StyledGrid>\n );\n};\n\nGrid.defaultProps = {\n gutter: gridSettings.gutter,\n};\n\nexport default {\n Row: Grid,\n Col,\n};\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } 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 Title from 'components/blocks/Title';\nimport Wrapper from 'components/base/Wrapper';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport {\n mq,\n spacings,\n withRange,\n getColors as color,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\n\nconst ImgWrapper = styled.div<{ isMirrored?: boolean }>`\n display: flex;\n flex-direction: column;\n position: relative;\n height: 100%;\n width: 100%;\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 ImgDescDesktop = styled(Copy)`\n display: none;\n\n @media ${mq.semilarge} {\n display: block;\n padding: ${spacings.spacer}px ${spacings.spacer * 2}px;\n }\n`;\n\nconst ImgDescMobile = styled(Copy)`\n display: block;\n padding: ${spacings.spacer}px 0;\n padding-left: ${spacings.nudge * 2}px;\n\n @media ${mq.semilarge} {\n display: none;\n }\n`;\n\nconst InfoWrapper = styled.div<{ isMirrored?: boolean }>`\n padding-left: ${spacings.nudge * 2}px;\n padding-right: ${spacings.nudge * 2}px;\n padding-top: ${spacings.nudge}px;\n padding-bottom: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n ${withRange([spacings.spacer * 3, spacings.spacer * 4], 'padding-top')}\n\n padding-right: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n ${withRange([spacings.spacer * 3, spacings.spacer * 4], 'padding-top')}\n\n padding-right: ${({ isMirrored }) =>\n isMirrored ? spacings.spacer * 1.5 + 'px' : (1 / 28) * 100 + '%'};\n padding-bottom: ${spacings.nudge * 6}px;\n padding-left: ${({ isMirrored }) =>\n !isMirrored ? spacings.spacer * 1.5 + 'px' : (1 / 28) * 100 + '%'};\n }\n\n @media ${mq.xlarge} {\n padding-right: ${({ isMirrored }) =>\n isMirrored ? spacings.spacer * 1.5 : (1 / 28) * spacings.wrapper}px;\n padding-left: ${({ isMirrored }) =>\n !isMirrored\n ? spacings.spacer * 1.5\n : (1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst StyledTitle = styled(Title)`\n & + * {\n margin-top: ${spacings.nudge * 6}px;\n }\n`;\n\nconst ContentBlock = styled(Copy)`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n`;\n\nconst SubTextBlock = styled(ContentBlock)`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.semilarge} {\n & > * {\n max-width: 300px;\n }\n }\n`;\n\nconst Teaser: FC<{\n isMirrored?: boolean;\n bgMode?: 'full' | 'inverted' | 'splitted';\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n title?: string;\n titleAs?: HeadlineTag;\n image?: Omit<ImageProps, 'coverSpace'> & { description?: string };\n intro?: string;\n text?: string;\n subText?: string;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n isMirrored = false,\n bgMode,\n superTitle,\n superTitleAs,\n title,\n titleAs,\n image,\n intro,\n text,\n subText,\n primaryAction,\n secondaryAction,\n}) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, false, isMirrored)}\n >\n <Wrapper clampWidth=\"normal\">\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? 14 : 0) / 28,\n }}\n >\n <ImgWrapper isMirrored={isMirrored}>\n {image && <StyledImage coverSpace {...image} />}\n {image?.description && (\n <ImgDescMobile\n size=\"small\"\n isInverted={isInverted}\n innerHTML={image.description}\n />\n )}\n </ImgWrapper>\n </Grid.Col>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? -14 : 0) / 28,\n }}\n >\n <InfoWrapper isMirrored={isMirrored}>\n <StyledTitle\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n />\n {intro && (\n <ContentBlock\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n />\n )}\n {text && (\n <ContentBlock\n isInverted={isInverted}\n innerHTML={text}\n />\n )}\n {subText && (\n <SubTextBlock\n isInverted={isInverted}\n type=\"copy-i\"\n innerHTML={subText}\n />\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 </InfoWrapper>\n </Grid.Col>\n </Grid.Row>\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: (bgMode === 'splitted' ? 11.2 : 14) / 28,\n move:\n (isMirrored\n ? bgMode === 'splitted'\n ? 16.8\n : 14\n : 0) / 28,\n }}\n >\n {image?.description && (\n <ImgDescDesktop\n size=\"small\"\n isInverted={isInverted}\n innerHTML={image.description}\n />\n )}\n </Grid.Col>\n <Grid.Col\n semilarge={{\n span: (bgMode === 'splitted' ? 16.8 : 14) / 28,\n move:\n (isMirrored\n ? bgMode === 'splitted'\n ? -11.2\n : -14\n : 0) / 28,\n }}\n />\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Teaser;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } 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 Title from 'components/blocks/Title';\nimport Wrapper from 'components/base/Wrapper';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\n\nconst WideImage = styled(Image)<{ isMirrored?: boolean }>`\n position: relative;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n\n @media ${mq.semilarge} {\n position: absolute;\n width: 50%;\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '50%')};\n right: ${({ isMirrored }) => (isMirrored ? '50%' : 'auto')};\n\n transform: translateX(\n ${({ isMirrored }) => (isMirrored ? '100%' : '-100%')}\n );\n }\n\n @media ${mq.xlarge} {\n max-width: ${spacings.wrapperLarge / 2}px;\n }\n`;\n\nconst InfoWrapper = styled.div<{ isMirrored?: boolean }>`\n padding-left: ${spacings.nudge * 2}px;\n padding-right: ${spacings.nudge * 2}px;\n padding-top: ${spacings.nudge}px;\n padding-bottom: ${spacings.nudge * 2}px;\n\n @media ${mq.semilarge} {\n ${withRange([spacings.spacer * 3, spacings.spacer * 4], 'padding-top')}\n\n padding-right: ${({ isMirrored }) =>\n isMirrored ? spacings.spacer * 1.5 : (1 / 28) * spacings.wrapper}px;\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4],\n 'padding-bottom'\n )}\n padding-left: ${({ isMirrored }) =>\n !isMirrored\n ? spacings.spacer * 1.5\n : (1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst StyledTitle = styled(Title)`\n & + * {\n margin-top: ${spacings.nudge * 6}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.semilarge} {\n & > * {\n max-width: 300px;\n }\n }\n`;\n\nconst ContentBlock = styled(Copy)`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n`;\n\nconst SubTextBlock = styled(ContentBlock)`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst TeaserWide: FC<{\n isMirrored?: boolean;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n title?: string;\n titleAs?: HeadlineTag;\n image?: Omit<ImageProps, 'coverSpace'> & { description?: string };\n intro?: string;\n text?: string;\n subText?: string;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n bgMode?: 'full' | 'inverted';\n}> = ({\n isMirrored = false,\n superTitle,\n superTitleAs,\n title,\n titleAs,\n image,\n intro,\n text,\n subText,\n primaryAction,\n secondaryAction,\n bgMode,\n}) => {\n const theme = useContext(ThemeContext);\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n {image && (\n <WideImage coverSpace {...image} isMirrored={isMirrored} />\n )}\n <Wrapper clampWidth=\"normal\">\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? 14 : 0) / 28,\n }}\n ></Grid.Col>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? -14 : 0) / 28,\n }}\n >\n <InfoWrapper isMirrored={isMirrored}>\n <StyledTitle\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n />\n {intro && (\n <ContentBlock\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n />\n )}\n {text && (\n <ContentBlock\n isInverted={isInverted}\n innerHTML={text}\n />\n )}\n {subText && (\n <SubTextBlock\n isInverted={isInverted}\n type=\"copy-i\"\n innerHTML={subText}\n />\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 </InfoWrapper>\n </Grid.Col>\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport default TeaserWide;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.a<{\n inverted?: boolean;\n disable?: boolean;\n textDecoration?: 'none' | 'underline';\n}>`\n padding: 0.2em;\n\n display: inline-block;\n display: inline-flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: ${({ theme }) => font(theme).copy.medium.weight};\n text-align: center;\n text-decoration: ${({ textDecoration }) =>\n textDecoration ? textDecoration : 'underline'};\n line-height: 1;\n letter-spacing: ${({ theme }) => font(theme).copy.medium.letterSpacing};\n\n perspective: 1000;\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-perspective: 1000;\n -moz-osx-font-smoothing: grayscale;\n will-change: auto;\n\n outline: none;\n border: none;\n cursor: pointer;\n\n pointer-events: ${({ disable }) => (disable ? 'none' : 'all')};\n\n background: none;\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.light\n : inverted\n ? color(theme).light\n : color(theme).dark};\n\n & > * {\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.light\n : inverted\n ? color(theme).light\n : color(theme).dark};\n }\n\n & > :not(:last-child) {\n padding-right: ${spacings.nudge}px;\n }\n\n &:hover {\n opacity: 0.6;\n }\n\n /* &:focus {\n text-decoration: underline;\n }\n\n &:active {\n text-decoration: underline;\n } */\n`;\n\ninterface Props {\n isInverted?: boolean;\n isDisabled?: boolean;\n onClick?: () => void;\n textDecoration?: 'none' | 'underline';\n className?: string;\n}\n\nexport type BtnProps = Props & {\n as?: 'button';\n};\n\nexport type LinkProps = Props & {\n as?: 'a';\n href?: string;\n isExternal?: boolean;\n};\n\nconst Pointer: React.FC<BtnProps | LinkProps> = React.forwardRef(\n (\n {\n as,\n isInverted,\n isDisabled,\n onClick,\n className,\n textDecoration,\n children,\n ...rest\n },\n ref\n ) => {\n if (as === 'button') {\n return (\n <View\n textDecoration={textDecoration}\n ref={ref}\n as={as as any}\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n } else {\n return (\n <View\n textDecoration={textDecoration}\n ref={ref}\n as={as as any}\n href={(rest as LinkProps).href}\n data-disabled={isDisabled}\n target={\n (rest as LinkProps).isExternal ? '_blank' : undefined\n }\n rel={\n (rest as LinkProps).isExternal\n ? 'noopener noreferrer'\n : undefined\n }\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n }\n }\n);\n\nPointer.displayName = 'Button';\n\nconst Icon = styled.div<{ iconColor?: string }>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n width: 35px;\n height: 35px;\n\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).primary.medium};\n\n transition: transform 0.2s ease-in-out;\n\n ${View}[data-disabled='true'] > & {\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).mono.light};\n }\n\n ${View}:hover > & {\n transform: translateX(3px);\n }\n`;\n\nconst Label = styled.span`\n display: inline-block;\n`;\n\nexport default { View: Pointer, Label: Label, Icon: Icon };\n","import React, { FC, useContext, useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport SlickSlider, { Settings } from 'react-slick';\nimport { withRange } from 'utils/styles';\n\n// Slider context\ninterface SliderContextState {\n setSlider?: React.Dispatch<\n React.SetStateAction<SlickSlider | null | undefined>\n >;\n setSlideCount?: React.Dispatch<React.SetStateAction<number>>;\n steps: number;\n currentStep: number;\n slideSpacing?: { min: number; max: number };\n cursorPaths?: {\n prev?: string;\n next?: string;\n };\n clickSideOffset: number;\n fullHeight?: boolean;\n sameHeight?: boolean;\n slickSettings: Settings;\n goToStep: (step: number) => void;\n nextStep: () => void;\n previousStep: () => void;\n isOnFirstStep: () => boolean;\n isOnLastStep: () => boolean;\n}\n\nexport const SliderContext = React.createContext<SliderContextState>({\n steps: 0,\n currentStep: 0,\n slickSettings: {},\n clickSideOffset: 0.2,\n goToStep: () => '',\n nextStep: () => '',\n previousStep: () => '',\n isOnFirstStep: () => {\n return false;\n },\n isOnLastStep: () => {\n return false;\n },\n});\n\nexport type SlickSliderSettings = Pick<\n Settings,\n | 'responsive'\n | 'draggable'\n | 'speed'\n | 'slidesToShow'\n | 'slidesToScroll'\n | 'variableWidth'\n | 'autoplay'\n | 'autoplaySpeed'\n | 'fade'\n | 'swipe'\n | 'infinite' // not fully working yet\n>;\n\nconst Slider: FC<\n SlickSliderSettings & {\n initialStep?: number;\n slideSpacing?: { min: number; max: number }; // max image size 64x64\n cursorPaths?: {\n prev?: string;\n next?: string;\n };\n clickSideOffset?: number;\n sameHeight?: boolean;\n fullHeight?: boolean;\n beforeChange?: (props: {\n currentStep: number;\n nextStep: number;\n }) => void;\n afterChange?: (currentStep: number) => void;\n onInit?: (steps: number) => void;\n }\n> = ({\n initialStep = 0,\n slideSpacing,\n cursorPaths,\n clickSideOffset = 0.2,\n fullHeight,\n sameHeight,\n beforeChange,\n afterChange,\n onInit,\n children,\n ...rest\n}) => {\n const [slideCount, setSlideCount] = useState<number>(0);\n const [sliderRef, setSliderRef] = useState<SlickSlider | null>();\n const [currentStep, setCurrentStep] = useState<number>(initialStep);\n const [visibleSlides, setVisibleSlides] = useState<number | null>();\n const [steps, setSteps] = useState<number>(0);\n\n const goToStep = (step: number) => {\n if (sliderRef) {\n const intNum = Math.floor(step);\n if (intNum >= 0 && intNum < steps) {\n sliderRef.slickGoTo(intNum);\n }\n }\n };\n\n const nextStep = () => {\n if (sliderRef) {\n let prev = currentStep;\n if (slickSettings.infinite) sliderRef.slickGoTo(++prev);\n else sliderRef.slickGoTo(prev >= slideCount - 1 ? prev : ++prev);\n }\n };\n\n const previousStep = () => {\n if (sliderRef) {\n let prev = currentStep;\n if (slickSettings.infinite) sliderRef.slickGoTo(--prev);\n sliderRef.slickGoTo(prev <= 0 ? prev : --prev);\n }\n };\n\n const isOnFirstStep = (): boolean => {\n return slickSettings.infinite ? false : currentStep === 0;\n };\n\n const isOnLastStep = (): boolean => {\n return slickSettings.infinite ? false : currentStep >= steps - 1;\n };\n\n // slick settings\n const slickSettings: Settings = {\n className: 'slider variable-width',\n dots: false,\n arrows: false,\n infinite: false,\n speed: 500,\n slidesToScroll: 1,\n slidesToShow: 1,\n variableWidth: true,\n fade: false,\n swipe: true,\n beforeChange: (current: number, next: number) => {\n beforeChange &&\n beforeChange({ currentStep: current, nextStep: next });\n setCurrentStep(next);\n },\n afterChange: afterChange,\n ...rest,\n };\n\n // calc slidesToShow on each window resize\n useEffect(() => {\n const handleResize = () => {\n if (sliderRef && slickSettings.responsive) {\n const settings = slickSettings.responsive;\n const cBreakpoint: number | null = (sliderRef.state as any)\n .breakpoint;\n\n for (let i = 0; i < settings.length; i++) {\n if (settings[i].breakpoint === cBreakpoint) {\n const { slidesToShow } = settings[i]\n .settings as Settings;\n\n if (slidesToShow) setVisibleSlides(slidesToShow);\n break;\n }\n }\n }\n };\n\n // calc visible slides\n if (sliderRef && slickSettings.slidesToShow) {\n setVisibleSlides(slickSettings.slidesToShow);\n handleResize();\n window.addEventListener('resize', handleResize);\n }\n\n return () => {\n if (sliderRef) window.removeEventListener('resize', handleResize);\n };\n }, [slickSettings.responsive, slickSettings.slidesToShow, sliderRef]);\n\n useEffect(() => {\n // calc steps\n if (visibleSlides) {\n const itemsPerSlide = Math.floor(visibleSlides);\n\n let slides = 0;\n for (let i = 0; i < slideCount; i++) {\n if (i + itemsPerSlide > slideCount) {\n break;\n } else slides += 1;\n }\n setSteps(slides);\n }\n }, [slideCount, visibleSlides]);\n\n useEffect(() => {\n if (steps && steps > 0) {\n onInit && onInit(steps);\n }\n }, [onInit, steps]);\n\n return (\n <SliderContext.Provider\n value={{\n setSlider: setSliderRef,\n setSlideCount: setSlideCount,\n steps: steps,\n currentStep: currentStep,\n slideSpacing: slideSpacing,\n cursorPaths: cursorPaths,\n clickSideOffset: clickSideOffset,\n fullHeight: fullHeight,\n sameHeight: sameHeight,\n slickSettings: slickSettings,\n goToStep: goToStep,\n nextStep: nextStep,\n previousStep: previousStep,\n isOnFirstStep: isOnFirstStep,\n isOnLastStep: isOnLastStep,\n }}\n >\n {children}\n </SliderContext.Provider>\n );\n};\n\nconst SlidesView = styled.div<{\n cursorPath?: string;\n sameHeight?: boolean;\n fullHeight?: boolean;\n}>`\n position: relative;\n width: 100%;\n overflow: hidden;\n\n cursor: ${({ cursorPath }) =>\n cursorPath ? `url(\"${cursorPath}\") 64 64, auto` : 'default'};\n\n ${({ fullHeight }) =>\n fullHeight &&\n css`\n .slick-list {\n height: 100%;\n }\n `}\n\n .slick-track {\n display: flex;\n height: ${({ fullHeight }) => (fullHeight ? '100%' : 'auto')};\n ${({ sameHeight, fullHeight }) =>\n (sameHeight || fullHeight) &&\n css`\n .slick-slide {\n height: auto;\n > div {\n height: 100%;\n > div {\n height: 100%;\n }\n }\n }\n `}\n }\n`;\n\nconst StyledSlider = styled(SlickSlider)<{\n leftMargin?: { min: number; max: number };\n}>`\n ${({ leftMargin }) =>\n leftMargin &&\n withRange([leftMargin.min * -1, leftMargin.max * -1], 'margin-left')};\n`;\n\nenum CursorState {\n PREV,\n NEXT,\n}\n\nconst Slides: FC<{\n className?: string;\n}> = ({ children, className }) => {\n const context = useContext(SliderContext);\n const [cursor, setCursor] = useState<CursorState | null>();\n const [viewRef, setViewRef] = useState<HTMLDivElement | null>();\n const [mousePos, setMousePos] = useState<number>(0);\n\n // cursor control\n const getCursorPath = () => {\n switch (cursor) {\n case CursorState.NEXT:\n return context.cursorPaths?.next;\n case CursorState.PREV:\n return context.cursorPaths?.prev;\n default:\n return undefined;\n }\n };\n\n const handleClick = (ev: React.MouseEvent) => {\n if (context.clickSideOffset <= 0) return;\n ev.stopPropagation();\n if (!viewRef) return;\n\n // check for other UI elements\n const target = ev.target as HTMLElement;\n const isSlideControl = target.classList.contains('slider-control');\n const isAnchor =\n target instanceof HTMLAnchorElement ||\n target.parentElement instanceof HTMLAnchorElement;\n\n if (ev.button !== 0 || isSlideControl || isAnchor) return;\n\n // check if step is first or last\n if (context.isOnFirstStep()) {\n context.nextStep();\n return;\n } else if (context.isOnLastStep()) {\n context.previousStep();\n return;\n }\n\n // check orientation with client x position\n const rect = viewRef.getBoundingClientRect();\n const relMouseX = mousePos - rect.left;\n if (relMouseX >= rect.width - rect.width * context.clickSideOffset) {\n context.nextStep();\n } else if (relMouseX < rect.width * context.clickSideOffset) {\n context.previousStep();\n }\n };\n\n useEffect(() => {\n if (!context.cursorPaths) return;\n if (!viewRef) return;\n const rect = viewRef.getBoundingClientRect();\n const relMouseX = mousePos - rect.left;\n\n if (relMouseX >= rect.width / 2) {\n if (context.isOnLastStep()) setCursor(CursorState.PREV);\n else setCursor(CursorState.NEXT);\n } else {\n if (context.isOnFirstStep()) setCursor(CursorState.NEXT);\n else setCursor(CursorState.PREV);\n }\n }, [context, mousePos, viewRef]);\n\n useEffect(() => {\n if (children && context.setSlideCount)\n context.setSlideCount(React.Children.count(children));\n }, [children, context]);\n\n return (\n <SliderContext.Consumer>\n {(values) => (\n <SlidesView\n ref={setViewRef}\n cursorPath={getCursorPath()}\n onMouseMove={(ev) => setMousePos(ev.clientX)}\n fullHeight={context.fullHeight}\n sameHeight={context.sameHeight}\n onClick={handleClick}\n className={className}\n >\n <StyledSlider\n ref={context.setSlider}\n leftMargin={values.slideSpacing}\n {...values.slickSettings}\n >\n {children}\n </StyledSlider>\n </SlidesView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nconst SlideView = styled.div<{ spacing?: { min: number; max: number } }>`\n width: 100%;\n outline: none;\n\n ${({ spacing }) =>\n spacing && withRange([spacing.min, spacing.max], 'padding-left')};\n`;\n\nconst Slide: FC<{\n className?: string;\n}> = ({ children, className }) => {\n return (\n <SliderContext.Consumer>\n {(value) => (\n <SlideView className={className} spacing={value.slideSpacing}>\n {children}\n </SlideView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nconst ControlView = styled.button``;\n\nconst Control: FC<{\n type: 'next' | 'prev';\n onClick?: (ev: React.SyntheticEvent<HTMLButtonElement>) => void;\n className?: string;\n children?: (isActive?: boolean) => React.ReactNode;\n}> = ({ type, onClick, children, className }) => {\n return (\n <SliderContext.Consumer>\n {(values) => {\n if (values.steps > 1) {\n return (\n <ControlView\n className={className + ' slider-control'}\n onClick={(ev) => {\n type === 'next'\n ? values.nextStep()\n : values.previousStep();\n\n onClick && onClick(ev);\n }}\n disabled={\n type === 'next'\n ? values.isOnLastStep()\n : values.isOnFirstStep()\n }\n >\n {children &&\n children(\n type === 'next'\n ? !values.isOnLastStep()\n : !values.isOnFirstStep()\n )}\n </ControlView>\n );\n } else return null;\n }}\n </SliderContext.Consumer>\n );\n};\n\nconst StatusView = styled.div``;\n\nconst Status: FC<{\n seperator?: string;\n className?: string;\n}> = ({ seperator = '/', className }) => {\n return (\n <SliderContext.Consumer>\n {(values) => (\n <StatusView className={className + ' slider-control'}>\n {`${values.currentStep + 1}${seperator}${values.steps}`}\n </StatusView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nconst DotView = styled.button``;\n\ninterface DotProps {\n step: number;\n disabled?: boolean;\n onClick?: (ev: React.SyntheticEvent<HTMLButtonElement>) => void;\n}\n\nconst Dot: FC<\n DotProps & {\n className?: string;\n }\n> = ({ step, disabled, onClick, className, children }) => {\n return (\n <SliderContext.Consumer>\n {(values) => (\n <DotView\n disabled={\n disabled !== undefined\n ? disabled\n : step === values.currentStep\n }\n onClick={(ev) => {\n values.goToStep(step);\n onClick && onClick(ev);\n }}\n className={className + ' slider-control'}\n >\n {children}\n </DotView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nconst DotGroupView = styled.div``;\n\nconst DotGroup: FC<{\n children?: (\n key: number,\n isActive?: boolean,\n onClick?: (ev: React.SyntheticEvent<HTMLElement>) => void\n ) => React.ReactNode;\n className?: string;\n}> = ({ className, children }) => {\n const context = useContext(SliderContext);\n const [stepsArray, setStepsArray] = useState<number[]>();\n\n useEffect(() => {\n const steps = Array<number>(context.steps);\n for (let i = 0; i < steps.length; i++) {\n steps[i] = i;\n }\n setStepsArray(steps);\n }, [context.steps]);\n\n return (\n <SliderContext.Consumer>\n {(values) => (\n <DotGroupView className={className + ' slider-control'}>\n {stepsArray &&\n stepsArray.length > 1 &&\n stepsArray?.map((step, i) => {\n return (\n children &&\n children(i, i === values.currentStep, () =>\n values.goToStep(i)\n )\n );\n })}\n </DotGroupView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nexport default {\n Provider: Slider,\n Slides: Slides,\n Slide: Slide,\n Control: Control,\n Status: Status,\n Dot: Dot,\n DotGroup: DotGroup,\n};\n","import React, { useContext, useState } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\nimport Pointer from 'components/buttons/Pointer';\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 ListContainer = styled.div`\n text-align: center;\n &:not(:first-child) {\n ${withRange([spacings.spacer, spacings.spacer * 1.75], 'margin-top')}\n }\n\n &:not(:last-child) {\n ${withRange([spacings.spacer, spacings.spacer * 1.75], 'margin-bottom')}\n }\n`;\n\nconst ItemContainer = styled.div<{ isCentered?: boolean }>`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n margin-bottom: ${spacings.spacer * 1.75}px;\n\n text-align: center;\n\n @media ${mq.semilarge} {\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n }\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 6 ? 'block' : 'none'};\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 Items = styled.div<{ isVisible?: boolean; isCentered?: boolean }>`\n display: ${({ isVisible }) => (isVisible ? 'flex' : 'none')};\n align-items: center;\n justify-content: center;\n\n flex-wrap: wrap;\n margin-left: -20px;\n\n @media ${mq.medium} {\n align-items: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n }\n`;\n\nconst ActionsWrapper = styled.div<{ isCentered?: boolean }>`\n position: relative;\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.medium} {\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n }\n`;\n\nconst StyledActions = styled(Actions)`\n @media ${mq.medium} {\n max-width: 600px;\n }\n`;\n\nconst Item = styled.img<{ isVisible?: boolean; index: number }>`\n display: block;\n\n padding-left: 20px;\n padding-top: 20px;\n\n display: ${({ index, isVisible }) =>\n isVisible || index < 6 ? 'block' : 'none'};\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 ListFooter = styled(Copy)<{ isCentered?: boolean }>`\n text-align: center;\n\n @media ${mq.medium} {\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n }\n`;\n\nconst IconList: React.FC<{\n items: { src: string; alt?: string }[];\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n showMoreText?: string;\n showLessText?: string;\n isCentered?: boolean;\n bgMode?: 'full' | 'inverted';\n}> = ({\n items,\n isCentered = false,\n primaryAction,\n secondaryAction,\n showLessText = 'weniger anzeigen',\n showMoreText = 'weitere anzeigen',\n bgMode,\n}) => {\n const [showMore, setShowMore] = useState(false);\n const isInverted = bgMode === 'inverted';\n const theme = useContext(ThemeContext);\n\n return (\n <StyledSection\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode === 'full'\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n isCentered={isCentered}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <ListContainer>\n <Copy type=\"copy\" size=\"medium\" isInverted={isInverted}>\n <ItemContainer isCentered={isCentered}>\n <Items\n isVisible={!showMore ? true : showMore === true}\n isCentered={isCentered}\n >\n {items.map(({ src, alt }, i) => {\n return (\n <Item\n isVisible={showMore}\n index={i}\n key={i}\n src={src}\n alt={alt}\n />\n );\n })}\n </Items>\n </ItemContainer>\n <ListFooter\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n isCentered={isCentered}\n >\n <ShowMore\n itemCount={items.length}\n onClick={() => setShowMore((prev) => !prev)}\n >\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMore ? showLessText : showMoreText}\n </Pointer.Label>\n </Pointer.View>\n </ShowMore>\n </ListFooter>\n </Copy>\n </ListContainer>\n\n {(primaryAction || secondaryAction) && (\n <ActionsWrapper isCentered={isCentered}>\n <StyledActions\n isCentered={isCentered}\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n </ActionsWrapper>\n )}\n </Wrapper>\n </StyledSection>\n );\n};\n\nexport default IconList;\n","import * as React from 'react';\nimport styled, { ThemeContext, css } from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Title from 'components/blocks/Title';\nimport Copy from 'components/typography/Copy';\nimport Wrapper from 'components/base/Wrapper';\nimport { spacings, mq, getColors as color } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst StyledTitle = styled(Title)`\n @media ${mq.semilarge} {\n max-width: 50%;\n }\n`;\n\nconst Content = styled.div<{ withAsideText?: boolean }>`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n\n ${({ withAsideText }) =>\n withAsideText &&\n css`\n @media ${mq.semilarge} {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n\n & > * + * {\n margin-left: ${spacings.spacer * 3}px;\n }\n }\n `}\n`;\n\nconst ContentBlock = styled.div<{ isAside?: boolean }>`\n & + & {\n padding-top: ${({ isAside }) => (isAside ? spacings.spacer : '0')}px;\n }\n\n flex: ${({ isAside }) => (isAside ? '1 0 30%' : '1 0 60%')};\n\n @media ${mq.semilarge} {\n max-width: ${({ isAside }) => (isAside ? '100%' : '60%')};\n\n & + & {\n padding-top: 0;\n }\n }\n`;\n\nconst ContentText = styled(Copy)`\n text-align: left;\n`;\n\nconst StyledActions = styled(Actions)`\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.semilarge} {\n max-width: 50%;\n }\n`;\n\nconst Article: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n intro?: string;\n text?: string;\n asideText?: string;\n\n bgMode?: 'full' | 'splitted' | 'inverted';\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n intro,\n text,\n asideText,\n bgMode,\n primaryAction,\n secondaryAction,\n}) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <StyledTitle\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n <Content withAsideText={asideText ? true : false}>\n <ContentBlock>\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 </ContentBlock>\n\n {asideText && (\n <ContentBlock isAside>\n <ContentText\n type=\"copy\"\n isInverted={isInverted}\n innerHTML={asideText}\n />\n </ContentBlock>\n )}\n </Content>\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 default Article;\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\n\nimport Copy from 'components/typography/Copy';\nimport Image, { ImageProps as Props } from 'components/blocks/Image';\nimport Actions from './Actions';\n\nconst View = styled.div`\n min-width: 270px;\n padding-bottom: ${spacings.nudge}px;\n`;\n\nconst ImageContainer = styled.div<{ isCentered?: boolean }>`\n display: flex;\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n padding-bottom: ${spacings.spacer * 2}px;\n`;\n\nconst StyledImage = styled(Image)`\n // width: 100%;\n\n overflow: hidden;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n`;\n\nconst Content = styled.div<{ addWhitespace?: boolean; isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n padding: 0\n ${({ addWhitespace }) => addWhitespace && spacings.nudge * 2 + 'px'};\n\n & + & {\n ${withRange(\n [spacings.spacer * 1.5, spacings.spacer * 2],\n 'padding-top'\n )}\n }\n`;\n\nconst ArticleContent = styled(Content)<{ isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n\n @media ${mq.medium} {\n max-width: 95%;\n }\n`;\n\nconst ContentBlock = styled(Copy)`\n & + & {\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'padding-top')}\n }\n`;\n\nconst Desc = styled.div`\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'padding-top')}\n`;\n\nconst StyledActions = styled(Actions)<{ addWhitespace?: boolean }>`\n padding: 0\n ${({ addWhitespace }) => addWhitespace && spacings.nudge * 2 + 'px'};\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')}\n\n @media ${mq.medium} {\n width: 100%;\n\n & > * {\n max-width: 50%;\n min-width: 0 !important;\n flex: 1;\n }\n }\n`;\n\nexport interface FeatureProps {\n isInverted?: boolean;\n isCentered?: boolean;\n title?: string;\n description?: string;\n intro?: string;\n text?: string;\n image?: Props;\n\n addWhitespace?: boolean;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}\n\nconst Feature: React.FC<\n FeatureProps & {\n className?: string;\n }\n> = ({\n title,\n description,\n intro,\n text,\n image,\n addWhitespace = false,\n isInverted = false,\n isCentered = false,\n primaryAction,\n secondaryAction,\n className,\n}) => {\n return (\n <View className={className}>\n {image && (\n <ImageContainer 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 coverSpace={image.coverSpace}\n />\n </ImageContainer>\n )}\n <Content addWhitespace={addWhitespace} isCentered={isCentered}>\n <ContentBlock\n type=\"copy-b\"\n size=\"big\"\n isInverted={isInverted}\n data-sheet=\"title\"\n >\n {title}\n </ContentBlock>\n {description && (\n <ContentBlock\n size=\"small\"\n isInverted={isInverted}\n data-sheet=\"desc\"\n >\n <Desc\n dangerouslySetInnerHTML={{ __html: description }}\n />\n </ContentBlock>\n )}\n </Content>\n <ArticleContent\n addWhitespace={addWhitespace}\n isCentered={isCentered}\n >\n {intro && (\n <ContentBlock\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n data-sheet=\"intro\"\n />\n )}\n {text && (\n <ContentBlock\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n innerHTML={text}\n data-sheet=\"text\"\n />\n )}\n </ArticleContent>\n {(primaryAction || secondaryAction) && (\n <StyledActions\n isCentered={isCentered}\n addWhitespace={addWhitespace}\n primary={primaryAction && primaryAction(isInverted)}\n secondary={secondaryAction && secondaryAction(isInverted)}\n />\n )}\n </View>\n );\n};\n\nexport default Feature;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings, mq } from 'utils/styles';\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';\n\nconst ContentContainer = styled.div<{ isHalf?: boolean }>`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: ${({ isHalf }) => (isHalf ? 'center' : 'flex-start')};\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n\n @media ${mq.large} {\n padding-right: ${({ isHalf }) => isHalf && '7%'};\n padding-left: ${({ isHalf }) => isHalf && '7%'};\n\n & > * {\n flex: ${({ isHalf }) => (isHalf ? '1 0 50%' : '1 0 33.33%')};\n max-width: ${({ isHalf }) => (isHalf ? '50%' : '33.33%')};\n }\n }\n`;\n\nconst FeatureList: React.FC<{\n isCentered?: boolean;\n features?: FeatureProps[];\n bgMode?: 'full' | 'splitted' | 'inverted';\n}> = ({ features, bgMode, isCentered = false }) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const featureCount = features?.length || 0;\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\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: featureCount % 2 === 0 ? 2 : 3,\n xlarge: featureCount % 2 === 0 ? 2 : 3,\n },\n });\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper addWhitespace clampWidth=\"normal\">\n {features && (\n <ContentContainer\n isHalf={features.length % 2 === 0 ? true : false}\n >\n {features &&\n features.map((feature, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <Feature\n isCentered={isCentered}\n isInverted={isInverted}\n addWhitespace\n {...feature}\n />\n </div>\n );\n })}\n </ContentContainer>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default FeatureList;\n","import React, { FC } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport IntroBlock from './IntroBlock';\n\nconst View = styled.div<{\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\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 }) =>\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`;\n\nconst StyledImage = styled(Image)`\n width: 100%;\n height: 100%;\n min-height: 300px;\n`;\n\nconst LinkHelper = styled.a`\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\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-left: ${spacings.spacer}px;\n padding-right: ${spacings.spacer}px;\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')};\n ${withRange([spacings.spacer, spacings.spacer * 4], 'padding-bottom')};\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.semilarge} {\n padding-left: calc(${1 / 28} * 100vw);\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nexport interface PromotionCardProps {\n image: ImageProps;\n title?: string;\n superTitle?: string;\n text?: string;\n href?: string;\n primaryAction?: React.ReactNode;\n secondaryAction?: React.ReactNode;\n onClick?: () => void;\n}\n\nconst PromotionCard: FC<PromotionCardProps> = ({\n image,\n title,\n superTitle,\n text,\n href,\n primaryAction,\n secondaryAction,\n onClick,\n}) => {\n return (\n <View onClick={onClick} clickable={onClick || href ? true : false}>\n <StyledImage {...image} coverSpace />\n {title && (\n <IntroContainer>\n <LinkHelper href={href} />\n <IntroBlock\n colorMode=\"onImage\"\n title={title}\n superTitle={superTitle}\n text={text}\n secondaryAction={() => secondaryAction}\n primaryAction={() => primaryAction}\n clampText={text !== undefined}\n />\n </IntroContainer>\n )}\n </View>\n );\n};\n\nexport default PromotionCard;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n getColors as color,\n getGlobalSettings as global,\n spacings,\n mq,\n} from 'utils/styles';\n\nimport Grid 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';\n\nconst FlexGrid = styled.div`\n @media ${mq.semilarge} {\n display: flex;\n flex-direction: row;\n margin-left: -${spacings.spacer}px;\n }\n`;\n\nconst FlexGridCol = styled.div`\n display: flex;\n flex-direction: column;\n\n @media ${mq.semilarge} {\n flex: 1 0 50%;\n max-width: 50%;\n padding-left: ${spacings.spacer}px;\n }\n\n & + & {\n margin-top: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n margin-top: 0;\n }\n }\n`;\n\nconst PosterContainer = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n\n flex: 1 0 auto;\n\n & + & {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst CrossPromotion: React.FC<{\n main?: Array<PromotionCardProps & { size?: 'full' | 'half' }>;\n aside?: Array<PromotionCardProps & { size?: 'full' | 'half' }>;\n\n bgMode?: 'full' | 'inverted' | 'splitted';\n isMirrored?: boolean;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({ main, aside, bgMode, isMirrored }) => {\n const theme = React.useContext(ThemeContext);\n\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, false, isMirrored)}\n >\n <Wrapper\n clampWidth=\"normal\"\n addWhitespace={global(theme).sections.edgeRadius ? true : false}\n >\n <Grid.Row>\n <Grid.Col>\n {aside ? (\n isMirrored ? (\n <FlexGrid>\n <FlexGridCol>\n {main &&\n main.map((card, i) => (\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n ))}\n </FlexGridCol>\n\n <FlexGridCol>\n {aside.map((card, i) => (\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n ))}\n </FlexGridCol>\n </FlexGrid>\n ) : (\n <FlexGrid>\n <FlexGridCol>\n {aside.map((card, i) => (\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n ))}\n </FlexGridCol>\n <FlexGridCol>\n {main &&\n main.map((card, i) => (\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n ))}\n </FlexGridCol>\n </FlexGrid>\n )\n ) : (\n <Grid.Row>\n {main &&\n main.map((card, i) => (\n <Grid.Col\n semilarge={{\n span:\n (card.size === 'half'\n ? 14\n : 28) / 28,\n }}\n key={i}\n >\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n </Grid.Col>\n ))}\n </Grid.Row>\n )}\n </Grid.Col>\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport default CrossPromotion;\n","import React, { FC } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport IntroBlock from 'components/blocks/IntroBlock';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst PosterContainer = styled.div<{\n hasContent?: boolean;\n hasWrapper?: boolean;\n}>`\n position: relative;\n width: 100%;\n max-height: 500px;\n border-radius: ${({ theme, hasWrapper }) =>\n hasWrapper && global(theme).sections.edgeRadius};\n overflow: hidden;\n\n @media ${mq.medium} {\n max-height: 900px;\n }\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 }) => global(theme).sections.imageTextGradient};\n pointer-events: none;\n }\n\n ${({ onClick }) =>\n onClick &&\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`;\n\nconst StyledImage = styled(Image)`\n width: 100%;\n min-height: 500px;\n`;\n\nconst IntroContainer = styled(Wrapper)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: auto;\n z-index: 1;\n\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')};\n ${withRange([spacings.spacer, spacings.spacer * 4], 'padding-bottom')};\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\nconst Poster: FC<{\n image: ImageProps;\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n hasWrapper?: boolean;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n image,\n hasWrapper,\n}) => {\n return (\n <Section bgColor=\"undefined\" bgMode=\"full\">\n <Wrapper\n addWhitespace={hasWrapper}\n clampWidth={hasWrapper ? 'normal' : 'large'}\n >\n <PosterContainer\n hasWrapper={hasWrapper}\n hasContent={title !== undefined}\n >\n <StyledImage {...image} coverSpace />\n {title && (\n <IntroContainer addWhitespace>\n <IntroBlock\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 clampText={text !== undefined}\n />\n </IntroContainer>\n )}\n </PosterContainer>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Poster;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Play: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"67\"\n height=\"67\"\n viewBox=\"0 0 67 67\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M26.5625 48.2812l20-15-20-15v30zM33.2812 0c9.1668 0 17.0052 3.25518 23.5157 9.76562 6.5104 6.51048 9.7656 14.34888 9.7656 23.51558 0 9.1668-3.2552 17.0052-9.7656 23.5157-6.5105 6.5104-14.3489 9.7656-23.5157 9.7656-9.1667 0-17.0051-3.2552-23.51558-9.7656C3.25518 50.2864 0 42.448 0 33.2812c0-9.1667 3.25518-17.0051 9.76562-23.51558C16.2761 3.25518 24.1145 0 33.2812 0z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Play;\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 getGlobalSettings as global,\n} from 'utils/styles';\nimport Play from 'components/base/icons/Play';\n\nconst View = styled.div<{ bgImage?: ImageProps; isActive?: boolean }>`\n text-align: center;\n\n cursor: 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).mono.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.div`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n color: ${({ theme }) => color(theme).light};\n\n & > * {\n opacity: 0.8;\n transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;\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\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.ReactChild;\n}\n\nconst VideoCard: FC<VideoCardProps & { className?: string }> = ({\n bgImage,\n embedId,\n playIcon,\n className,\n}) => {\n const [isActive, setIsActive] = useState(false);\n\n return (\n <View\n onClick={() => setIsActive(true)}\n bgImage={isActive ? undefined : bgImage}\n isActive={isActive}\n className={className}\n >\n {!isActive && <VideoControls>{playIcon || <Play />}</VideoControls>}\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 </View>\n );\n};\n\nexport default VideoCard;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\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 Grid from 'components/base/Grid';\n\nconst ContactView = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n margin: 0 auto;\n width: 100%;\n\n text-align: left;\n hyphens: auto;\n overflow-wrap: break-word;\n\n @media ${mq.medium} {\n flex-direction: row;\n }\n`;\n\nconst Avatar = styled.img`\n height: 196px;\n width: 196px;\n border: solid 1px transparent;\n border-radius: 50%;\n padding: ${spacings.nudge}px;\n\n @media ${mq.medium} {\n margin-right: ${spacings.nudge * 6}px;\n }\n`;\n\nconst Info = styled.div`\n display: flex;\n flex-direction: column;\n align-self: flex-start;\n align-content: center;\n text-align: center;\n width: 100%;\n\n padding: ${spacings.spacer}px;\n\n & > *:not(:last-child) {\n margin-bottom: ${spacings.spacer * 1.5}px;\n }\n\n @media ${mq.medium} {\n align-content: flex-start;\n text-align: left;\n width: auto;\n }\n`;\n\nconst Address = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: ${spacings.nudge}px;\n\n & + & {\n margin-top: ${spacings.nudge}px;\n }\n\n & > *:not(:first-child) {\n margin-left: 0;\n }\n\n @media ${mq.medium} {\n justify-content: flex-start;\n flex-direction: row;\n padding: ${spacings.nudge}px ${spacings.nudge}px ${spacings.nudge}px 0;\n\n & > *:not(:first-child) {\n margin-left: ${spacings.spacer}px;\n }\n }\n`;\n\nconst Decorator = styled.div<{ isInverted?: boolean }>`\n flex: 1;\n width: 25px;\n margin-bottom: ${spacings.nudge * 1.5}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted\n ? font(theme)['copy-b'].big.colorInverted\n : font(theme)['copy-b'].big.color};\n\n @media ${mq.medium} {\n margin-bottom: 0;\n }\n`;\n\nconst AddressLabel = styled(Copy)`\n flex: 0 100%;\n text-align: center;\n\n a {\n color: ${({ textColor }) => textColor && textColor};\n text-decoration: none;\n }\n\n p {\n margin: 0;\n }\n\n a:hover {\n text-decoration: underline;\n }\n\n @media ${mq.medium} {\n text-align: left;\n }\n`;\n\nexport interface ContactBoxProps {\n isInverted?: boolean;\n name?: string;\n description?: string;\n addresses?: { decorator?: React.ReactNode; label: string }[];\n avatar?: { src: string; alt: string };\n}\n\nconst ContactBox: FC<ContactBoxProps & { className?: string }> = ({\n isInverted,\n name,\n description,\n addresses,\n avatar,\n className,\n}) => {\n return (\n <ContactView className={className}>\n {avatar && <Avatar src={avatar?.src} alt={avatar?.alt} />}\n <Info>\n {name && (\n <div>\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {name}\n </Copy>\n {description && (\n <Copy\n type=\"copy\"\n isInverted={isInverted}\n innerHTML={description}\n />\n )}\n </div>\n )}\n <div>\n {addresses &&\n addresses.map((address, i) => (\n <Address key={i}>\n <Decorator isInverted={isInverted}>\n {address.decorator}\n </Decorator>\n <AddressLabel\n type=\"copy-b\"\n size=\"big\"\n isInverted={isInverted}\n innerHTML={address.label}\n />\n </Address>\n ))}\n </div>\n </Info>\n </ContactView>\n );\n};\n\nconst StyledIntro = styled(IntroBlock)`\n @media ${mq.semilarge} {\n & > *:first-child {\n min-height: 110px;\n }\n }\n`;\n\nconst Content = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n max-width: ${(17 / 28) * spacings.wrapper}px;\n margin: 0 auto;\n\n & > * + * {\n ${withRange([spacings.spacer * 1, spacings.spacer * 1.5], 'margin-top')}\n }\n`;\n\nconst StyledContactBox = styled(ContactBox)`\n margin-top: ${spacings.spacer * 2.5}px;\n`;\n\nconst StyledActions = styled(Actions)`\n @media ${mq.semilarge} {\n & > * {\n max-width: 300px;\n }\n }\n`;\n\nconst NewsletterWrapper = styled.div`\n width: 100%;\n margin-top: ${spacings.spacer * 2.5}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: -110px;\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 title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n contact?: ContactBoxProps;\n\n column?: {\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n contact?: ContactBoxProps;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n };\n\n badge?: React.ReactNode;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n newsForm?: (isInverted?: boolean) => React.ReactNode;\n bgMode?: 'full' | 'inverted';\n}> = ({\n title,\n titleAs = 'h1',\n superTitle,\n superTitleAs,\n text,\n contact,\n badge,\n primaryAction,\n secondaryAction,\n newsForm,\n bgMode,\n column,\n}) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n return (\n <Section\n addSeperation\n bgColor={isInverted ? color(theme).dark : color(theme).mono.light}\n bgMode={bgMode ? mapToBgMode(bgMode, true) : 'full'}\n >\n <Wrapper addWhitespace clampWidth=\"normal\">\n {badge && <Badge>{badge}</Badge>}\n <Grid.Row gutter={!column ? 0 : spacings.spacer * 4}>\n <Grid.Col large={{ span: column ? 1 / 2 : 28 / 28 }}>\n <Content>\n {title && (\n <StyledIntro\n isCentered={!column}\n colorMode={\n isInverted ? 'inverted' : 'default'\n }\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n />\n )}\n {contact && (\n <StyledContactBox\n isInverted={isInverted}\n name={contact.name}\n description={contact.description}\n addresses={contact.addresses}\n avatar={contact.avatar}\n />\n )}\n {newsForm && (\n <NewsletterWrapper>\n {newsForm(isInverted)}\n </NewsletterWrapper>\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n isCentered\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.Col large={{ span: 1 / 2 }}>\n {column && (\n <Content>\n {column.title && (\n <StyledIntro\n colorMode={\n isInverted ? 'inverted' : 'default'\n }\n title={column.title}\n titleAs={column.titleAs}\n superTitle={column.superTitle}\n superTitleAs={column.superTitleAs}\n text={column.text}\n />\n )}\n {column.contact && (\n <StyledContactBox\n isInverted={isInverted}\n name={column.contact.name}\n description={column.contact.description}\n addresses={column.contact.addresses}\n avatar={column.contact.avatar}\n />\n )}\n {newsForm && (\n <NewsletterWrapper>\n {newsForm(isInverted)}\n </NewsletterWrapper>\n )}\n {(column.primaryAction ||\n column.secondaryAction) && (\n <StyledActions\n primary={\n column.primaryAction &&\n column.primaryAction(isInverted)\n }\n secondary={\n column.secondaryAction &&\n column.secondaryAction(isInverted)\n }\n />\n )}\n </Content>\n )}\n </Grid.Col>\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport default CallToAction;\n","import * as React from 'react';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors, spacings } 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\nconst FactsItem = styled.li<{ hasText?: boolean }>`\n padding: ${spacings.spacer}px ${spacings.nudge * 2}px;\n\n background: #fff;\n\n cursor: pointer;\n\n display: flex;\n flex-direction: row;\n align-items: ${({ hasText }) => (hasText ? 'flex-start' : 'center')};\n\n & + & {\n margin-top: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Icon = styled.img`\n margin-right: ${spacings.spacer}px;\n display: block;\n width: 100%;\n max-width: ${spacings.spacer * 2}px;\n`;\n\nconst ContentBlock = styled.div`\n max-width: 80%;\n`;\n\nconst Text = styled(Copy)`\n margin-top: ${spacings.spacer}px;\n`;\n\nconst FactList: React.FC<{\n facts?: {\n label?: string;\n text?: string;\n icon?: { src: string; alt?: string };\n }[];\n\n bgMode?: 'full' | 'inverted';\n}> = ({ facts, bgMode }) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? getColors(theme).dark\n : bgMode === 'full'\n ? getColors(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {facts && (\n <FactsContainer>\n {facts.map(({ label, text, icon }, i) => {\n return (\n <FactsItem key={i} hasText={!!text}>\n {icon && (\n <Icon src={icon.src} alt={icon.alt} />\n )}\n <ContentBlock>\n <Copy type=\"copy-b\">{label}</Copy>\n {text && (\n <Text\n type=\"copy\"\n innerHTML={text}\n />\n )}\n </ContentBlock>\n </FactsItem>\n );\n })}\n </FactsContainer>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default FactList;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { spacings, withRange, getGlobalSettings 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 padding-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\nconst Title = styled(Copy)`\n * + & {\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'margin-top')}\n }\n`;\n\nconst ContentBlock = styled(Copy)`\n * + & {\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'margin-top')}\n }\n`;\n\nconst Text = styled(Copy)`\n margin-top: ${spacings.nudge}px;\n\n ${Title} + & {\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'margin-top')}\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: FC<\n FactProps & {\n className?: string;\n }\n> = ({\n isInverted = false,\n isCentered = false,\n title,\n subTitle,\n text,\n image,\n className,\n}) => {\n return (\n <View className={className}>\n {image && (\n <ImageContainer 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 coverSpace={image.coverSpace}\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 <ContentBlock\n type=\"copy-b\"\n isInverted={isInverted}\n data-sheet=\"subtitle\"\n >\n {subTitle}\n </ContentBlock>\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\nexport default Fact;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, mq, spacings } from 'utils/styles';\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';\n\nconst ContentContainer = styled.div<{ columns?: number }>`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.medium} {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n\n @supports (display: grid) {\n display: -ms-grid;\n display: grid;\n -ms-grid-columns: ${({ columns }) =>\n columns &&\n new Array(columns < 3 ? columns : 3).fill('').map(() => {\n return '1fr ';\n })};\n grid-template-columns: repeat(\n ${({ columns }) => columns && (columns < 3 ? columns : 3)},\n 1fr\n );\n }\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n flex: 0 0\n ${({ columns }) =>\n columns && (1 / (columns < 3 ? columns : 3)) * 100 + '%'};\n max-width: ${({ columns }) =>\n columns && (1 / (columns < 3 ? columns : 3)) * 100 + '%'};\n padding-left: 20px;\n padding-top: 40px;\n\n @supports (display: grid) {\n max-width: 370px;\n }\n }\n }\n\n @media ${mq.semilarge} {\n & > * {\n flex: 0 0\n ${({ columns }) =>\n columns && (1 / (columns < 4 ? columns : 4)) * 100 + '%'};\n max-width: ${({ columns }) =>\n columns && (1 / (columns < 4 ? columns : 4)) * 100 + '%'};\n }\n\n @supports (display: grid) {\n -ms-grid-columns: ${({ columns }) =>\n columns &&\n new Array(columns < 4 ? columns : 4).fill('').map(() => {\n return '1fr ';\n })};\n grid-template-columns: repeat(\n ${({ columns }) => columns && (columns < 4 ? columns : 4)},\n 1fr\n );\n\n & > * {\n max-width: 370px;\n }\n }\n }\n\n @media ${mq.large} {\n & > * {\n flex: 0 0 ${({ columns }) => columns && (1 / columns) * 100 + '%'};\n max-width: ${({ columns }) => columns && (1 / columns) * 100 + '%'};\n }\n\n @supports (display: grid) {\n -ms-grid-columns: ${({ columns }) =>\n columns &&\n new Array(columns).fill('').map(() => {\n return '1fr ';\n })};\n grid-template-columns: repeat(${({ columns }) => columns}, 1fr);\n\n & > * {\n max-width: 370px;\n }\n }\n }\n`;\n\nconst FactFill = styled.div`\n display: none;\n\n @media ${mq.large} {\n display: block;\n }\n`;\n\nconst FactGrid: FC<{\n columns?: 3 | 4 | 6;\n\n facts?: Array<Omit<FactProps, 'isInverted' | 'isCentered'>>;\n\n bgMode?: 'full' | 'inverted' | 'splitted';\n isCentered?: boolean;\n}> = ({ columns = 3, facts, bgMode, isCentered }) => {\n const theme = useContext(ThemeContext);\n const factCount = facts?.length || 0;\n\n const isInverted = bgMode === 'inverted';\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\n listLength: factCount,\n identifiers: [\n '[data-sheet=\"title\"]',\n '[data-sheet=\"subtitle\"]',\n '[data-sheet=\"text\"]',\n ],\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 bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {facts && (\n <ContentContainer columns={columns}>\n {facts.map((fact, i) => {\n if (\n fact?.title ||\n fact?.subTitle ||\n fact?.image ||\n fact?.text\n ) {\n return (\n <div key={i} ref={cardRefs[i]}>\n <Fact\n key={i}\n {...fact}\n isCentered={isCentered}\n isInverted={isInverted}\n />\n </div>\n );\n } else {\n return <FactFill ref={cardRefs[i]} key={i} />;\n }\n })}\n </ContentContainer>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default FactGrid;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, withRange, spacings, mq } from 'utils/styles';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport { hexToRgba } from 'utils/hexRgbConverter';\n\nconst TableContainer = styled.div`\n overflow-x: scroll;\n overflow-y: hidden;\n white-space: nowrap;\n`;\n\nconst TableBody = styled.table`\n width: 100%;\n max-width: 100%;\n margin-top: ${spacings.nudge * 2}px;\n\n border-collapse: separate;\n border-spacing: 0 ${spacings.nudge}px;\n\n padding: 0 ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n padding-left: ${spacings.spacer}px;\n padding-right: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n padding-left: ${(1 / 28) * 100}%;\n padding-left: ${`\n max(\n ${spacings.spacer}px,\n ${(1 / 28) * 100}%\n );\n `};\n padding-right: ${spacings.spacer}px;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n padding-right: ${spacings.spacer}px;\n }\n`;\n\nconst TableHead = styled.th<{ isInverted?: boolean; hasBack?: boolean }>`\n text-align: left;\n color: ${({ theme }) => color(theme).dark};\n background-color: ${({ theme, hasBack, isInverted }) =>\n hasBack && !isInverted ? color(theme).light : color(theme).mono.light};\n\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 2}px\n ${spacings.nudge * 3.5}px ${spacings.spacer * 2}px;\n min-width: 60px;\n box-sizing: content-box;\n\n :last-child {\n padding-right: ${spacings.spacer * 2.5}px;\n }\n`;\n\nconst TableData = styled.td<{ isInverted?: boolean; hasBack?: boolean }>`\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 2}px\n ${spacings.nudge * 3.5}px ${spacings.spacer * 2}px;\n min-width: 60px;\n box-sizing: content-box;\n\n background-color: ${({ isInverted, hasBack, theme }) =>\n hexToRgba(\n hasBack && !isInverted\n ? color(theme).light\n : color(theme).mono.light,\n isInverted ? 0.2 : 0.4\n )};\n\n :last-child {\n padding-right: ${spacings.spacer * 2.5}px;\n }\n`;\n\nexport interface TableProps {\n tableTitle?: string;\n rowTitle?: string[];\n row: {\n cols: string[];\n }[];\n isInverted?: boolean;\n hasBack?: boolean;\n}\n\nconst TableBlock: React.FC<TableProps> = ({\n row,\n tableTitle,\n rowTitle,\n isInverted = false,\n hasBack = false,\n}) => {\n return (\n <div>\n {tableTitle && (\n <Wrapper addWhitespace>\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {tableTitle}\n </Copy>\n </Wrapper>\n )}\n <TableContainer>\n <TableBody>\n {rowTitle && (\n <thead>\n <tr>\n {rowTitle.map((item, ii) => {\n return (\n <TableHead\n key={ii}\n isInverted={isInverted}\n hasBack={hasBack}\n >\n <Copy type=\"copy-b\">{item}</Copy>\n </TableHead>\n );\n })}\n </tr>\n </thead>\n )}\n <tbody>\n {row.map(({ cols }, i) => (\n <tr key={i}>\n {cols.map((itemText, ii) => {\n return (\n <TableData\n key={ii}\n isInverted={isInverted}\n hasBack={hasBack}\n >\n <Copy isInverted={isInverted}>\n {itemText}\n </Copy>\n </TableData>\n );\n })}\n </tr>\n ))}\n </tbody>\n </TableBody>\n </TableContainer>\n </div>\n );\n};\n\nconst TableWrapper = styled.div<{ withSeperation?: boolean }>`\n ${({ withSeperation }) =>\n withSeperation &&\n withRange([spacings.spacer, spacings.spacer * 4], 'padding-top')};\n\n & + & {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n }\n`;\n\nconst Table: React.FC<{\n tableItems: TableProps[];\n bgMode?: 'full' | 'inverted';\n}> = ({ bgMode, tableItems }) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper>\n {tableItems.map((item, i) => {\n return (\n <TableWrapper key={i}>\n <TableBlock\n {...item}\n isInverted={isInverted}\n hasBack={hasBg}\n />\n </TableWrapper>\n );\n })}\n </Wrapper>\n </Section>\n );\n};\n\nexport default Table;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowLeftGhost: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"58\"\n height=\"58\"\n viewBox=\"0 0 58 58\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g fill=\"none\">\n <path\n d=\"M29.00009 1.0086C13.55287 1.0086 1.009 13.5526 1.009 28.99998c0 15.44738 12.54387 27.99138 27.99109 27.99138s27.99109-12.544 27.99109-27.99138S44.44731 1.0086 29.00009 1.0086zm0 1.93044c14.4048 0 26.06067 11.656 26.06067 26.06094S43.40488 55.06092 29.00009 55.06092 2.93942 43.40492 2.93942 28.99998 14.5953 2.93904 29.00009 2.93904z\"\n fill={iconColor}\n />\n <g transform=\"matrix(.96521 0 0 .96522 1.009 1.0086)\">\n <g>\n <path\n d=\"M38.73 28.38H23.634l4.7893-4.9143c.2082-.2315.3123-.4986.3123-.8013s-.1041-.5698-.3123-.8013c-.2256-.2136-.4859-.3205-.7809-.3205s-.5553.1069-.7808.3205l-6.6633 6.8374c-.0521.0713-.1041.1336-.1562.187-.052.0534-.0781.1068-.0781.1602-.052.1247-.0781.2671-.0781.4274 0 .1602.0261.3205.0781.4807.0521.0713.0911.1336.1172.187.026.0534.065.1068.1171.1602l6.6633 6.8374c.1041.1247.2169.2137.3383.2671.1215.0534.269.0801.4425.0801.1562 0 .295-.0267.4165-.0801.1214-.0534.2429-.1424.3644-.2671.2082-.2314.3123-.4985.3123-.8012s-.1041-.5698-.3123-.8013l-4.7893-4.8876H38.73c.3471 0 .6204-.1024.8199-.3072.1996-.2048.2993-.4852.2993-.8413 0-.3383-.0997-.6099-.2993-.8146-.1995-.2048-.4728-.3072-.8199-.3072z\"\n fill={iconColor}\n />\n <path d=\"M27.643 21.043c-.41579 0-.8205.1686-1.125.45703l-.00781.00781-6.6953 6.8691-.01953.0293c-.04046.05536-.07885.09952-.11133.1328-.10781.11073-.21275.28915-.2168.5-.03865.14284-.08203.28464-.08203.43556 0 .2145.03644.43009.10352.63672l.02539.07422.04687.0664c.04037.05525.06313.09664.07031.11133.05464.11173.128.20605.20898.28906l6.6641 6.8379-.02539-.0293c.14297.17127.3152.31443.51953.4043.20176.08868.41973.12306.64453.12306.21318 0 .42348-.03791.6172-.12305.19627-.08634.3667-.21614.52147-.375l.00782-.00781.00586-.00782c.28073-.312.4414-.71743.4414-1.1348s-.16074-.82466-.4414-1.1367l-.00782-.00781-3.9648-4.0449h13.908c.44544 0 .8771-.15036 1.1777-.45898.30073-.30856.44141-.74003.44141-1.1895 0-.43654-.14557-.86067-.4414-1.1641-.30064-.30862-.7323-.45703-1.1777-.45703h-13.912l3.9707-4.0723.00585-.00781c.28066-.31206.44141-.71938.44141-1.1367 0-.41733-.16075-.8227-.4414-1.1348l-.01368-.01563-.01367-.01367c-.30455-.28835-.70921-.45703-1.125-.45703zm0 1c.16555 0 .27932.05066.41602.17383.12311.14291.17773.26708.17773.44726 0 .18807-.0498.31586-.18555.4668l-5.6016 5.75h16.281c.24876 0 .36257.05527.46094.15625.10337.10601.1582.22478.1582.46484 0 .26277-.05973.39115-.1582.49219-.09837.10098-.21218.15625-.46094.15625h-16.287l5.6074 5.7227c.13574.15094.18555.27873.18555.4668 0 .18481-.05129.31156-.18164.45898-.08255.08228-.15298.13091-.19727.15039-.0493.02166-.11562.03906-.21484.03906-.1222 0-.20094-.02093-.24219-.03906-.03846-.01692-.08907-.05077-.1543-.12891l-.01367-.01562-6.6758-6.8496v-.00196c-.02285-.02341-.0281-.03487-.0254-.0293h-.00195c-.0264-.05402-.06298-.10381-.0957-.1543-.0299-.10164-.04883-.1992-.04883-.29491 0-.10603.01819-.17962.04102-.23438l.02734-.06641c.03584-.03994.0698-.08138.10352-.125l.00586-.00586 6.6426-6.8164c.1465-.13877.2633-.18359.4375-.18359z\" />\n </g>\n </g>\n </g>\n </SVG>\n);\n\nexport default ArrowLeftGhost;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowRightGhost: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"58\"\n height=\"58\"\n viewBox=\"0 0 58 58\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g fill=\"none\">\n <path\n d=\"M29.00009 1.0086C13.55287 1.0086 1.009 13.5526 1.009 28.99998c0 15.44738 12.54387 27.99138 27.99109 27.99138s27.99109-12.544 27.99109-27.99138S44.44731 1.0086 29.00009 1.0086zm0 1.93044c14.4048 0 26.06067 11.656 26.06067 26.06094S43.40488 55.06092 29.00009 55.06092 2.93942 43.40492 2.93942 28.99998 14.5953 2.93904 29.00009 2.93904z\"\n fill={iconColor}\n />\n <g transform=\"matrix(.96521 0 0 .96522 1.009 1.0086)\">\n <g>\n <path\n d=\"M21.005 30.65h15.096l-4.7893 4.9143c-.2082.2315-.3123.4986-.3123.8013s.1041.5698.3123.8013c.2256.2136.4859.3205.7809.3205s.5553-.1069.7808-.3205l6.6633-6.8374c.0521-.0713.1041-.1336.1562-.187.052-.0534.0781-.1068.0781-.1602.052-.1247.0781-.2671.0781-.4274 0-.1602-.0261-.3205-.0781-.4807-.0521-.0713-.0911-.1336-.1172-.187-.026-.0534-.065-.1068-.1171-.1602l-6.6633-6.8374c-.1041-.1247-.2169-.2137-.3383-.2671-.1215-.0534-.269-.0801-.4425-.0801-.1562 0-.295.0267-.4165.0801-.1214.0534-.2429.1424-.3644.2671-.2082.2314-.3123.4985-.3123.8012s.1041.5698.3123.8013l4.7893 4.8876H21.005c-.3471 0-.6204.1024-.8199.3072-.1996.2048-.2993.4852-.2993.8413 0 .3383.0997.6099.2993.8146.1995.2048.4728.3072.8199.3072z\"\n fill={iconColor}\n />\n <path d=\"M27.643 21.043c-.41579 0-.8205.1686-1.125.45703l-.00781.00781-6.6953 6.8691-.01953.0293c-.04046.05536-.07885.09952-.11133.1328-.10781.11073-.21275.28915-.2168.5-.03865.14284-.08203.28464-.08203.43556 0 .2145.03644.43009.10352.63672l.02539.07422.04687.0664c.04037.05525.06313.09664.07031.11133.05464.11173.128.20605.20898.28906l6.6641 6.8379-.02539-.0293c.14297.17127.3152.31443.51953.4043.20176.08868.41973.12306.64453.12306.21318 0 .42348-.03791.6172-.12305.19627-.08634.3667-.21614.52147-.375l.00782-.00781.00586-.00782c.28073-.312.4414-.71743.4414-1.1348s-.16074-.82466-.4414-1.1367l-.00782-.00781-3.9648-4.0449h13.908c.44544 0 .8771-.15036 1.1777-.45898.30073-.30856.44141-.74003.44141-1.1895 0-.43654-.14557-.86067-.4414-1.1641-.30064-.30862-.7323-.45703-1.1777-.45703h-13.912l3.9707-4.0723.00585-.00781c.28066-.31206.44141-.71938.44141-1.1367 0-.41733-.16075-.8227-.4414-1.1348l-.01368-.01563-.01367-.01367c-.30455-.28835-.70921-.45703-1.125-.45703zm0 1c.16555 0 .27932.05066.41602.17383.12311.14291.17773.26708.17773.44726 0 .18807-.0498.31586-.18555.4668l-5.6016 5.75h16.281c.24876 0 .36257.05527.46094.15625.10337.10601.1582.22478.1582.46484 0 .26277-.05973.39115-.1582.49219-.09837.10098-.21218.15625-.46094.15625h-16.287l5.6074 5.7227c.13574.15094.18555.27873.18555.4668 0 .18481-.05129.31156-.18164.45898-.08255.08228-.15298.13091-.19727.15039-.0493.02166-.11562.03906-.21484.03906-.1222 0-.20094-.02093-.24219-.03906-.03846-.01692-.08907-.05077-.1543-.12891l-.01367-.01562-6.6758-6.8496v-.00196c-.02285-.02341-.0281-.03487-.0254-.0293h-.00195c-.0264-.05402-.06298-.10381-.0957-.1543-.0299-.10164-.04883-.1992-.04883-.29491 0-.10603.01819-.17962.04102-.23438l.02734-.06641c.03584-.03994.0698-.08138.10352-.125l.00586-.00586 6.6426-6.8164c.1465-.13877.2633-.18359.4375-.18359z\" />\n </g>\n </g>\n </g>\n </SVG>\n);\n\nexport default ArrowRightGhost;\n","import { FeatureGroup, Map, Marker, MarkerOptions } from 'leaflet';\nimport React, { FC, useEffect, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { spacings, getColors as color } from 'utils/styles';\n\nconst MapContainer = styled.div`\n position: relative;\n z-index: 0;\n`;\n\nconst FylToCtrlContainer = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1000;\n\n margin-top: ${spacings.spacer}px;\n margin-right: ${spacings.spacer}px;\n color: ${({ theme }) => color(theme).dark};\n\n cursor: pointer;\n`;\n\nexport interface LeafletMapMarker {\n id: string;\n position: [number, number];\n icon?: {\n url: string;\n size: [number, number];\n anchor: [number, number];\n\n sizeActive: [number, number];\n anchorActive: [number, number];\n };\n popup?: {\n text: string;\n };\n}\n\nconst LeafletMap: FC<{\n containerRef?: React.MutableRefObject<HTMLDivElement | null>;\n onReady?: (props: {\n goTo: (position?: [number, number], zoom?: number) => void;\n showAll: () => void;\n }) => void;\n url?: string;\n attribution?: string;\n activeMarkerId?: string;\n markers?: Array<LeafletMapMarker>;\n center: [number, number];\n zoom?: number;\n touchZoom?: boolean;\n scrollWheelZoom?: boolean;\n onlyScrollOnFocus?: boolean;\n fitBoundsPadding?: [number, number];\n onMarkerClick?: (markerId: string) => void;\n onFlyToClick?: (goTo: (zoom?: number) => void) => void;\n flyToControl?: React.ReactNode;\n onActiveMarkerChanged?: (props: {\n markerId: string;\n goTo: (zoom?: number) => void;\n }) => void;\n className?: string;\n}> = ({\n containerRef,\n onReady,\n url = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n attribution = '© <a href=\"http://osm.org/copyright\">OpenStreetMap</a> contributors',\n activeMarkerId,\n markers,\n center,\n zoom = 2.5,\n touchZoom = false,\n scrollWheelZoom = false,\n onlyScrollOnFocus = true,\n fitBoundsPadding = [20, 20], // 0 = TopLeft, 1 = BottomRight\n onMarkerClick,\n onFlyToClick,\n flyToControl,\n onActiveMarkerChanged,\n className,\n}) => {\n const cRef = useRef<HTMLDivElement | null>(null);\n const prevMarkerId = useRef<string | null>(null);\n\n // leaflet ref\n const [L, setLeaflet] = useState<any>(null);\n const [map, setMap] = useState<Map | null>(null);\n const [markersLayer, setMarkersLayer] = useState<FeatureGroup<any> | null>(\n null\n );\n const [isLoaded, setLoaded] = useState<boolean>(false);\n\n useEffect(() => {\n const initLeaflet = async (cElement: HTMLDivElement) => {\n const leaflet = await import('leaflet');\n if (leaflet) {\n // set leaflet state\n setLeaflet(leaflet);\n\n // setup map\n const map = leaflet.map(cElement, {\n center: center,\n zoom: zoom,\n touchZoom: touchZoom,\n scrollWheelZoom: scrollWheelZoom,\n });\n\n // activate map scrolling on focus\n map.once('focus', () => {\n if (onlyScrollOnFocus) map.scrollWheelZoom.enable();\n });\n\n // deactivate map scrolling on focus is lost\n map.once('blur', () => {\n if (onlyScrollOnFocus) map.scrollWheelZoom.disable();\n });\n\n // set map state\n setMap(map);\n\n // add map layer from map provider\n leaflet\n .tileLayer(url, {\n attribution: attribution,\n })\n .addTo(map);\n\n // setup layer for markers\n const markersLayer = new leaflet.FeatureGroup();\n markersLayer.addTo(map);\n setMarkersLayer(markersLayer);\n }\n };\n\n // load leaflet\n const mapContainerRef = containerRef || cRef;\n if (!isLoaded && mapContainerRef?.current)\n initLeaflet(mapContainerRef.current);\n }, [\n attribution,\n center,\n containerRef,\n isLoaded,\n onlyScrollOnFocus,\n scrollWheelZoom,\n touchZoom,\n url,\n zoom,\n ]);\n\n // setup markers\n useEffect(() => {\n /**\n * Adjust zoom to show all markers\n */\n const showAllMarkers = () => {\n if (map && markersLayer) {\n map.fitBounds(markersLayer.getBounds(), {\n padding: L.point(fitBoundsPadding),\n });\n }\n };\n\n /**\n * Pan and zoom to marker position on map\n * @param position\n * @param zoom\n */\n const flyToPosition = (position?: [number, number], zoom?: number) => {\n if (position) map?.flyTo(position, zoom);\n else flyToActive(zoom);\n };\n\n /**\n * Pan and zoom to active marker position on map\n * @param zoom\n */\n const flyToActive = (zoom?: number) => {\n const marker = markers?.find((m) => m.id === activeMarkerId);\n if (marker) map?.flyTo(marker.position, zoom);\n };\n\n // setup markers\n if (markersLayer) {\n markersLayer.clearLayers();\n\n markers?.forEach(({ position, icon, id }) => {\n if (!icon?.url || !icon?.size || !position) return;\n const isActive = id === activeMarkerId;\n\n const markerIcon = L.icon({\n iconUrl: icon.url,\n\n iconSize: isActive ? icon.sizeActive : icon.size, // size of the icon\n // shadowSize: [50, 64], // size of the shadow\n iconAnchor: isActive ? icon.anchorActive : icon?.anchor, // point of the icon which will correspond to marker's location\n // shadowAnchor: [4, 62], // the same for the shadow\n // popupAnchor: [0, -16], // point from which the popup should open relative to the iconAnchor\n });\n\n const marker: Marker = L.marker(position, {\n icon: markerIcon,\n riseOnHover: true,\n } as MarkerOptions).addTo(map);\n\n marker.on('click', () => {\n onMarkerClick && onMarkerClick(id);\n });\n\n // add marker to markers layer\n markersLayer.addLayer(marker);\n\n if (L && map && markersLayer) {\n if (!isLoaded) {\n // on first load\n onReady &&\n onReady({\n goTo: flyToPosition,\n showAll: showAllMarkers,\n });\n setLoaded(true);\n if (activeMarkerId)\n prevMarkerId.current = activeMarkerId;\n } else {\n // check if active marker changed\n if (\n activeMarkerId &&\n activeMarkerId !== prevMarkerId?.current\n ) {\n prevMarkerId.current = activeMarkerId;\n activeMarkerId &&\n onActiveMarkerChanged &&\n onActiveMarkerChanged({\n markerId: activeMarkerId,\n goTo: flyToActive,\n });\n }\n }\n }\n });\n }\n }, [\n L,\n fitBoundsPadding,\n isLoaded,\n map,\n markers,\n markersLayer,\n onMarkerClick,\n activeMarkerId,\n onActiveMarkerChanged,\n onReady,\n ]);\n\n return (\n <MapContainer ref={cRef} className={className}>\n {flyToControl && (\n <FylToCtrlContainer\n onClick={(ev) => {\n ev.stopPropagation();\n if (map && onFlyToClick) {\n onFlyToClick((zoom) => {\n // fly to active marker\n const marker = markers?.find(\n (m) => m.id === activeMarkerId\n );\n if (marker) {\n map.flyTo(marker.position, zoom);\n }\n });\n }\n }}\n >\n {flyToControl}\n </FylToCtrlContainer>\n )}\n </MapContainer>\n );\n};\n\nexport default LeafletMap;\n","import Grid from 'components/base/Grid';\nimport ArrowLeftGhost from 'components/base/icons/ArrowLeftGhost';\nimport ArrowRightGhost from 'components/base/icons/ArrowRightGhost';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\nimport IntroBlock from 'components/blocks/IntroBlock';\nimport LeafletMap from 'components/blocks/LeafletMap';\nimport Slider, { SliderContext } from 'components/blocks/Slider';\nimport Copy from 'components/typography/Copy';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport React, { FC, useContext, useState } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { mq, spacings, getColors as color, withRange } from 'utils/styles';\n\nconst StyledSection = styled(Section)`\n position: relative;\n min-height: 500px;\n z-index: 0;\n`;\n\nconst MapContainer = styled(LeafletMap)<{ isMirrored?: boolean }>`\n position: relative;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n min-height: 500px;\n\n @media ${mq.semilarge} {\n position: absolute;\n width: 50%;\n height: 100%;\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '50%')};\n right: ${({ isMirrored }) => (isMirrored ? '50%' : 'auto')};\n\n transform: translateX(\n ${({ isMirrored }) => (isMirrored ? '100%' : '-100%')}\n );\n }\n\n @media ${mq.xlarge} {\n max-width: ${spacings.wrapperLarge / 2}px;\n }\n`;\n\nconst CardWrapper = styled(Wrapper)`\n pointer-events: none;\n`;\n\nconst SliderWrapper = styled.div<{ isMirrored?: boolean }>`\n display: flex;\n flex-direction: column;\n position: relative;\n width: 100%;\n pointer-events: all;\n\n padding: ${spacings.nudge * 3}px ${spacings.nudge * 3}px\n ${spacings.spacer * 2}px ${spacings.nudge * 3}px;\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 3}px ${spacings.spacer}px\n ${spacings.spacer * 2}px ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n flex-direction: row;\n ${withRange([spacings.spacer * 3, spacings.spacer * 5], 'padding-top')};\n ${withRange(\n [spacings.spacer * 3, spacings.spacer * 5],\n 'padding-bottom'\n )};\n ${({ isMirrored }) =>\n isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-right'\n )\n : `padding-right: ${spacings.spacer}px`};\n ${({ isMirrored }) =>\n !isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-left'\n )\n : `padding-left: ${(1 / 28) * 100}vw`};\n }\n\n @media ${mq.xlarge} {\n ${({ isMirrored }) =>\n !isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-left'\n )\n : `padding-left: ${(1 / 28) * spacings.wrapper}px`};\n }\n\n .slick-slide div {\n outline: none;\n }\n\n .slick-initialized .slick-slide.slick-active {\n z-index: 1;\n }\n`;\n\nconst InfoCardView = styled.div`\n min-height: 100px;\n pointer-events: all;\n\n & > * + * {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')}\n }\n`;\n\nconst CardHeader = styled.div`\n display: flex;\n`;\n\nconst StyledActions = styled(Actions)`\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n padding-bottom: ${spacings.nudge}px;\n\n @media ${mq.medium} {\n & > * {\n max-width: calc(50% - ${spacings.spacer}px);\n }\n }\n`;\n\nconst ContactList = styled.ul<{ isInverted?: boolean }>`\n padding: 0;\n list-style-type: none;\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n\n a {\n color: inherit;\n }\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 ContactListLabel = styled(Copy)`\n margin-left: ${spacings.nudge * 2.5}px;\n\n * {\n margin: 0;\n padding: 0;\n }\n`;\n\nconst LocationInfoCard: FC<{\n isInverted?: boolean;\n location: MapLocation;\n}> = ({ isInverted, location }) => {\n return (\n <InfoCardView>\n {location.meta?.title && (\n <CardHeader>\n <IntroBlock\n colorMode={isInverted ? 'inverted' : 'default'}\n title={location.meta.title}\n titleAs={location.meta.titleAs}\n superTitle={location.meta?.superTitle}\n superTitleAs={location.meta?.superTitleAs}\n />\n </CardHeader>\n )}\n {location.meta?.contact && location.meta.contact.length > 0 && (\n <ContactList isInverted={isInverted}>\n {location.meta?.contact\n ?.filter((c) => c.label)\n .map((contact, i) => (\n <li key={i}>\n <span>{contact.icon}</span>\n <ContactListLabel\n isInverted={isInverted}\n innerHTML={contact.label}\n />\n </li>\n ))}\n </ContactList>\n )}\n {(location?.meta?.primaryAction ||\n location?.meta?.secondaryAction) && (\n <StyledActions\n primary={\n location?.meta?.primaryAction &&\n location.meta.primaryAction(isInverted)\n }\n secondary={\n location?.meta?.secondaryAction &&\n location.meta.secondaryAction(isInverted)\n }\n />\n )}\n </InfoCardView>\n );\n};\n\nconst Controls = styled.div`\n display: flex;\n flex-direction: row;\n align-self: center;\n text-align: center;\n\n @media ${mq.semilarge} {\n flex-direction: column;\n align-self: flex-start;\n margin-left: auto;\n text-align: right;\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst StyledDotGroup = styled(Slider.DotGroup)`\n display: flex;\n flex-direction: row;\n padding-top: ${spacings.spacer * 1.5}px;\n padding-left: ${spacings.spacer * 1.5}px;\n padding-right: ${spacings.spacer * 1.5}px;\n\n @media ${mq.semilarge} {\n display: none;\n padding: 0;\n }\n`;\n\nconst DotWrapper = styled.button`\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n\n padding: ${spacings.nudge * 2}px;\n margin: -${spacings.nudge * 2}px;\n\n & + & {\n margin-left: ${spacings.nudge * 1.5}px;\n }\n`;\n\nconst Dot = styled.div<{ isActive?: boolean; isInverted?: boolean }>`\n height: 14px;\n width: 14px;\n border: solid 1px\n ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 14px;\n\n transition: background-color 0.2s ease-in-out;\n\n background-color: ${({ isActive, isInverted, theme }) =>\n isActive\n ? isInverted\n ? color(theme).light\n : color(theme).dark\n : 'transparent'};\n`;\n\nconst StyledControl = styled(Slider.Control)<{ isInverted?: boolean }>`\n display: none;\n border: none;\n outline: none;\n background: none;\n padding: 0 ${spacings.nudge * 3}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n transition: color 0.2s ease-in-out, transform 0.2s ease-in-out;\n\n &:enabled {\n cursor: pointer;\n }\n\n &:enabled:hover {\n transform: scale(1.05);\n }\n\n &:enabled:active {\n transform: scale(0.95);\n }\n\n &:disabled {\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).mono.dark : color(theme).mono.medium};\n }\n\n @media ${mq.semilarge} {\n display: block;\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 MapLocation {\n id: string;\n position: [number, number];\n icon?: LocationIcon;\n meta?: {\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n contact?: Array<{ icon?: React.ReactNode; label?: string }>;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n };\n}\n\nconst Map: FC<{\n bgMode?: 'full' | 'inverted';\n isMirrored?: boolean;\n provider?: string;\n attribution?: string;\n center?: [number, number];\n zoom?: number;\n flyToZoom?: number;\n initialLocation?: string;\n locations?: Array<MapLocation>;\n /** Show all markers on first load */\n allMarkersOnInit?: boolean;\n /** Map container padding for show all markers */\n fitBoundsPadding?: [number, number];\n flyToControl?: React.ReactNode;\n controlNext?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n controlPrev?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n dot?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n index?: number;\n }) => React.ReactNode;\n}> = ({\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 dot,\n}) => {\n const theme = useContext(ThemeContext);\n const [activeLocation, setActiveLocation] = useState<string>(\n initialLocation || ''\n );\n\n const isInverted = bgMode === 'inverted';\n\n return (\n <StyledSection\n bgColor={isInverted ? color(theme).dark : color(theme).mono.light}\n bgMode={bgMode === 'inverted' ? mapToBgMode(bgMode) : 'full'}\n >\n <Slider.Provider\n fade={true}\n swipe={false}\n slidesToShow={1}\n variableWidth={false}\n sameHeight={true}\n clickSideOffset={0}\n responsive={[\n {\n breakpoint: 832,\n settings: {\n fade: false,\n swipe: true,\n },\n },\n ]}\n beforeChange={({ nextStep }) => {\n if (locations && locations[nextStep]) {\n setActiveLocation(locations[nextStep].id);\n }\n }}\n >\n <SliderContext.Consumer>\n {({ goToStep }) => (\n <MapContainer\n url={provider}\n attribution={attribution}\n onReady={({ showAll, goTo }) => {\n if (allMarkersOnInit) showAll();\n else goTo();\n }}\n center={center}\n zoom={zoom}\n isMirrored={isMirrored}\n activeMarkerId={activeLocation}\n onMarkerClick={(markerId) => {\n setActiveLocation(markerId);\n\n // move slider to step\n const locIndex = locations?.findIndex(\n (loc) => loc.id === markerId\n );\n\n if (locIndex !== undefined && locIndex !== -1)\n goToStep(locIndex);\n }}\n flyToControl={flyToControl}\n onFlyToClick={(goTo) => {\n // pan and zoom to active location\n goTo(flyToZoom);\n }}\n fitBoundsPadding={fitBoundsPadding}\n markers={locations?.map(\n ({ id, position, icon }) => {\n return {\n id,\n position,\n icon,\n };\n }\n )}\n onActiveMarkerChanged={({ goTo }) => goTo()}\n />\n )}\n </SliderContext.Consumer>\n\n <CardWrapper clampWidth=\"normal\">\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? 14 : 0) / 28,\n }}\n ></Grid.Col>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? -14 : 0) / 28,\n }}\n >\n <SliderWrapper isMirrored={isMirrored}>\n {locations && locations.length > 1 && (\n <>\n <Slider.Slides>\n {locations?.map((location, i) => (\n <LocationInfoCard\n key={i}\n isInverted={isInverted}\n location={location}\n />\n ))}\n </Slider.Slides>\n <Controls>\n <StyledControl\n type=\"next\"\n isInverted={isInverted}\n >\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name:\n 'control_next_head',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n <StyledControl\n type=\"prev\"\n isInverted={isInverted}\n >\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name:\n 'control_prev_head',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n <StyledDotGroup>\n {(i, isActive, onClick) => (\n <DotWrapper\n key={i}\n onClick={onClick}\n >\n {dot ? (\n dot({\n isInverted,\n isActive,\n index: i,\n })\n ) : (\n <Dot\n isActive={\n isActive\n }\n isInverted={\n isInverted\n }\n />\n )}\n </DotWrapper>\n )}\n </StyledDotGroup>\n </Controls>\n </>\n )}\n {locations && locations.length === 1 && (\n <LocationInfoCard\n isInverted={isInverted}\n location={locations[0]}\n />\n )}\n </SliderWrapper>\n </Grid.Col>\n </Grid.Row>\n </CardWrapper>\n </Slider.Provider>\n </StyledSection>\n );\n};\n\nexport default Map;\n","import Copy from 'components/typography/Copy';\nimport React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors as color, spacings } from 'utils/styles';\n\nconst View = styled.div`\n text-align: left;\n`;\n\nconst FieldHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: top;\n justify-content: space-between;\n padding-bottom: ${spacings.nudge * 3}px;\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n`;\n\nconst Field = styled.input<{\n isInverted?: boolean;\n hasError?: boolean;\n isDisabled?: boolean;\n hasBack?: boolean;\n}>`\n display: block;\n outline: none;\n width: 100%;\n min-height: 60px;\n box-shadow: none;\n border: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n padding: ${spacings.nudge * 2}px ${spacings.spacer}px;\n border: ${({ hasError, theme }) =>\n hasError ? `2px solid ${color(theme).error}` : '2px solid transparent'};\n background-color: ${({ isInverted, hasBack, theme }) =>\n isInverted || !hasBack ? color(theme).light : color(theme).mono.light};\n\n font-weight: inherit;\n font-family: inherit;\n font-size: inherit;\n color: ${({ hasError, theme }) =>\n hasError ? color(theme).error : 'inherit'};\n\n pointer-events: ${({ isDisabled }) => isDisabled && 'none'};\n\n &:active {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n &:focus {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n ::placeholder {\n color: ${({ theme }) => color(theme).secondary.light};\n }\n`;\n\nconst InfoMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst ErrorMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nexport type FormProps = {\n label?: string;\n errorMessage?: string;\n infoMessage?: string;\n\n value?: string;\n name?: string;\n placeholder?: string;\n isRequired?: boolean;\n isDisabled?: boolean;\n};\n\nconst Textfield: React.FC<\n FormProps & {\n type?: 'text' | 'email' | 'tel';\n isInverted?: boolean;\n lightBg?: boolean;\n onChange?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n }\n> = ({\n lightBg,\n type = 'text',\n label,\n errorMessage,\n infoMessage,\n placeholder,\n value,\n name,\n isInverted,\n isDisabled,\n isRequired,\n onChange,\n}) => {\n const theme = useContext(ThemeContext);\n return (\n <View>\n <FieldHead>\n {label && (\n <Copy\n isInverted={isInverted}\n textColor={\n isDisabled ? color(theme).mono.dark : undefined\n }\n size=\"medium\"\n type=\"copy-b\"\n >\n {`${label}${isRequired ? ' *' : ''}`}\n </Copy>\n )}\n </FieldHead>\n <Copy textColor={color(theme).secondary.dark} type=\"copy-b\">\n <Field\n hasBack={!lightBg}\n placeholder={placeholder}\n hasError={!!errorMessage}\n type={type}\n isInverted={isInverted}\n isDisabled={isDisabled}\n name={name}\n value={value}\n required={isRequired}\n onChange={onChange}\n />\n </Copy>\n {infoMessage && (\n <InfoMessage textColor={color(theme).mono.dark} size=\"small\">\n {infoMessage}\n </InfoMessage>\n )}\n {errorMessage && (\n <ErrorMessage\n textColor={color(theme).error}\n size=\"small\"\n type=\"copy-i\"\n >\n {errorMessage\n ? errorMessage\n : 'Bitte geben Sie einen gültigen Text ein'}\n </ErrorMessage>\n )}\n </View>\n );\n};\n\nexport default Textfield;\n","import Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport { FormProps } from './Textfield';\n\nconst View = styled.div`\n text-align: left;\n`;\n\nconst FieldHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: top;\n justify-content: space-between;\n padding-bottom: ${spacings.nudge * 3}px;\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n`;\n\nconst Area = styled.textarea<{\n isInverted?: boolean;\n hasError?: boolean;\n isDisabled?: boolean;\n hasBack?: boolean;\n}>`\n display: block;\n outline: none;\n width: 100%;\n min-height: 60px;\n box-shadow: none;\n border: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n resize: none;\n width: 100%;\n min-height: 120px;\n\n @media ${mq.semilarge} {\n min-height: 185px;\n }\n\n padding: ${spacings.nudge * 3}px ${spacings.spacer}px;\n\n border: ${({ hasError, theme }) =>\n hasError ? `2px solid ${color(theme).error}` : '2px solid transparent'};\n background-color: ${({ isInverted, hasBack, theme }) =>\n isInverted || !hasBack ? color(theme).light : color(theme).mono.light};\n\n font-weight: inherit;\n font-family: inherit;\n font-size: inherit;\n color: ${({ hasError, theme }) =>\n hasError ? color(theme).error : 'inherit'};\n\n pointer-events: ${({ isDisabled }) => isDisabled && 'none'};\n\n &:active {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n &:focus {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n ::placeholder {\n color: ${({ theme }) => color(theme).secondary.light};\n }\n`;\n\nconst InfoMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n`;\n\nconst ErrorMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n`;\n\nconst Textarea: React.FC<\n FormProps & {\n isInverted?: boolean;\n lightBg?: boolean;\n onChange?: (ev: React.SyntheticEvent<HTMLTextAreaElement>) => void;\n }\n> = ({\n lightBg,\n label,\n errorMessage,\n infoMessage,\n placeholder,\n value,\n name,\n isInverted,\n isDisabled,\n isRequired,\n onChange,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <View>\n <FieldHead>\n {label && (\n <Copy\n isInverted={isInverted}\n textColor={\n isDisabled ? color(theme).mono.dark : undefined\n }\n size=\"medium\"\n type=\"copy-b\"\n >\n {`${label}${isRequired ? ' *' : ''}`}\n </Copy>\n )}\n </FieldHead>\n <Copy type=\"copy-b\">\n <Area\n value={value}\n name={name}\n placeholder={placeholder}\n hasError={!!errorMessage}\n isDisabled={isDisabled}\n isInverted={isInverted}\n required={isRequired}\n hasBack={!lightBg}\n onChange={onChange}\n />\n </Copy>\n {infoMessage && (\n <InfoMessage textColor={color(theme).mono.dark} size=\"small\">\n {infoMessage}\n </InfoMessage>\n )}\n {errorMessage && (\n <ErrorMessage\n textColor={color(theme).error}\n size=\"small\"\n type=\"copy-i\"\n >\n {errorMessage\n ? errorMessage\n : 'Bitte geben Sie einen gültigen Text ein'}\n </ErrorMessage>\n )}\n </View>\n );\n};\n\nexport default Textarea;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Check: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"12\"\n height=\"9\"\n viewBox=\"0 0 12 9\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M10.833 1.162A.512.512 0 0010.444 1a.512.512 0 00-.388.162L4.333 6.708 1.944 4.392a.512.512 0 00-.388-.161.512.512 0 00-.39.161A.482.482 0 001 4.77c0 .162.056.27.167.377l2.777 2.692c.056.054.112.108.167.108.056.054.167.054.222.054.111 0 .167 0 .223-.054.055 0 .11-.054.166-.108l6.111-5.923A.482.482 0 0011 1.538a.482.482 0 00-.167-.376z\"\n fill=\"#fff\"\n stroke=\"#fff\"\n />\n </SVG>\n);\n\nexport default Check;\n","import Check from 'components/base/icons/Check';\nimport Copy from 'components/typography/Copy';\nimport React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors as color, spacings } from 'utils/styles';\n\nconst View = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n\n & > * + * {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Label = styled(Copy)`\n padding-top: 2px;\n\n & > * {\n margin: 0;\n }\n`;\n\nconst CheckboxContainer = styled.div<{ isDisabled?: boolean }>`\n cursor: ${({ isDisabled }) => (isDisabled ? 'default' : 'pointer')};\n pointer-events: ${({ isDisabled }) => (isDisabled ? 'none' : 'all')};\n`;\n\nconst Original = styled.input`\n position: absolute;\n left: -9999px;\n opacity: 0;\n`;\n\nconst Box = styled.span<{\n isSelected?: boolean;\n isInverted?: boolean;\n}>`\n width: 20px;\n min-width: 20px;\n height: 20px;\n display: block;\n position: relative;\n\n border: 2px solid\n ${({ isInverted, theme, isSelected }) =>\n isSelected\n ? color(theme).primary.medium\n : isInverted\n ? color(theme).light\n : color(theme).mono.medium};\n\n background-color: ${({ isSelected, theme }) =>\n isSelected ? color(theme).primary.medium : color(theme).light};\n`;\n\nconst StyledCheck = styled(Check)`\n width: 80%;\n height: 80%;\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n`;\n\nconst Checkbox: React.FC<{\n label?: string;\n\n onChange?: (e: React.SyntheticEvent<HTMLInputElement>) => void;\n onClick?: () => void;\n\n name?: string;\n value?: string;\n\n isDisabled?: boolean;\n isSelected?: boolean;\n isInverted?: boolean;\n isRequired?: boolean;\n}> = ({\n label,\n isDisabled,\n isSelected,\n isInverted,\n onChange,\n onClick,\n name,\n value,\n isRequired,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <View>\n <CheckboxContainer isDisabled={isDisabled} onClick={onClick}>\n <Box isSelected={isSelected} isInverted={isInverted}>\n {isSelected && <StyledCheck />}\n </Box>\n <Original\n type=\"checkbox\"\n name={`${name}[]`}\n value={value}\n checked={isSelected}\n required={isRequired}\n onChange={onChange}\n />\n </CheckboxContainer>\n {label && (\n <Label\n size=\"small\"\n type=\"copy-b\"\n isInverted={isInverted}\n textColor={isDisabled ? color(theme).mono.dark : undefined}\n innerHTML={`${label}${isRequired ? '<span> *</span>' : ''}`}\n />\n )}\n </View>\n );\n};\n\nexport default Checkbox;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { spacings, mq, getColors as color } from 'utils/styles';\nimport Textfield, { FormProps } from 'components/fields/Textfield';\nimport Textarea from 'components/fields/Textarea';\nimport Checkbox from 'components/fields/Checkbox';\nimport Wrapper from 'components/base/Wrapper';\nimport { Field, Formik } from 'formik';\nimport { FormEvent } from 'react';\nimport Actions from 'components/blocks/Actions';\n\nconst FieldsContainer = styled.div`\n padding-bottom: 30px;\n max-width: 1150px;\n\n & > * > * + * {\n padding-top: 30px;\n }\n\n @media ${mq.medium} {\n display: flex;\n flex-direction: row;\n align-items: top;\n }\n`;\n\nconst FlexContainer = styled.div`\n flex: 0 1 50%;\n width: 100%;\n max-width: 650px;\n\n & + & {\n padding-top: 30px;\n }\n\n @media ${mq.medium} {\n & + & {\n padding-top: 0;\n margin-left: 30px;\n }\n }\n`;\n\nconst ActionWrapper = styled(Actions)`\n margin-top: ${spacings.spacer * 3}px;\n`;\n\nexport interface FormData {\n name?: string;\n surname?: string;\n mail?: string;\n phone?: string;\n area?: string;\n check?: boolean;\n}\n\nexport type FormFieldProps = Omit<FormProps, 'value' | 'name' | 'errorMessage'>;\nexport type FormDataErrors = { [key in keyof FormData]: string };\n\nconst Form: React.FC<{\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n submitAction?: (props: {\n isInverted?: boolean;\n additionalProps: { type: 'submit'; as: 'button' | 'a' };\n isDisabled?: boolean;\n }) => React.ReactNode;\n onSubmit?: (data: FormData) => void;\n validation?: (values: FormData, errors: FormDataErrors) => FormDataErrors;\n yupValidationSchema?: any;\n\n bgMode?: 'full' | 'inverted';\n\n formFields: {\n name?: FormFieldProps;\n surname?: FormFieldProps;\n mail?: FormFieldProps;\n phone?: FormFieldProps;\n area?: FormFieldProps;\n };\n\n checkbox?: {\n label?: string;\n name?: string;\n value?: string;\n isDisabled?: boolean;\n };\n}> = ({\n submitAction,\n onSubmit,\n formFields,\n checkbox,\n yupValidationSchema,\n validation,\n bgMode,\n}) => {\n const theme = React.useContext(ThemeContext);\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const isEmpty = (obj: any) => {\n return (\n obj && Object.keys(obj).length === 0 && obj.constructor === Object\n );\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <Formik\n initialValues={\n {\n name: '',\n surname: '',\n phone: '',\n area: '',\n mail: '',\n check: false,\n } as FormData\n }\n validate={(values) => {\n let errors: FormDataErrors = {};\n if (validation)\n errors = validation(\n values,\n errors\n ) as FormDataErrors;\n return errors;\n }}\n validationSchema={yupValidationSchema}\n onSubmit={async (values) => {\n onSubmit && onSubmit(values);\n }}\n >\n {({\n handleSubmit,\n setFieldValue,\n values,\n errors,\n isValid,\n dirty,\n }) => (\n <form\n onSubmit={(e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n handleSubmit(e);\n }}\n >\n <FieldsContainer>\n <FlexContainer>\n {formFields.name && (\n <Field\n label={\n formFields.name?.label ||\n 'Vorname'\n }\n placeholder={\n formFields.name?.placeholder\n }\n infoMessage={\n formFields.name?.infoMessage\n }\n as={Textfield}\n name=\"name\"\n isRequired={\n formFields.name?.isRequired\n }\n errorMessage={errors.name}\n isInverted={isInverted}\n lightBg={hasBg}\n />\n )}\n {formFields.surname && (\n <Field\n label={\n formFields.surname?.label ||\n 'Nachname'\n }\n placeholder={\n formFields.surname?.placeholder\n }\n infoMessage={\n formFields.surname?.infoMessage\n }\n as={Textfield}\n name=\"surname\"\n isRequired={\n formFields.surname?.isRequired\n }\n errorMessage={errors.surname}\n isInverted={isInverted}\n lightBg={hasBg}\n />\n )}\n {formFields.mail && (\n <Field\n type=\"email\"\n label={\n formFields.mail?.label ||\n 'E-Mail'\n }\n placeholder={\n formFields.mail?.placeholder\n }\n infoMessage={\n formFields.mail?.infoMessage\n }\n as={Textfield}\n name=\"mail\"\n isRequired={\n formFields.mail?.isRequired\n }\n errorMessage={errors.mail}\n isInverted={isInverted}\n lightBg={hasBg}\n />\n )}\n {formFields.phone && (\n <Field\n type=\"tel\"\n label={\n formFields.phone?.label ||\n 'Telefon'\n }\n placeholder={\n formFields.phone?.placeholder\n }\n infoMessage={\n formFields.phone?.infoMessage\n }\n as={Textfield}\n name=\"phone\"\n isRequired={\n formFields.phone?.isRequired\n }\n errorMessage={errors.phone}\n isInverted={isInverted}\n lightBg={hasBg}\n />\n )}\n </FlexContainer>\n {formFields.area && (\n <FlexContainer>\n <Field\n label={\n formFields.area?.label ||\n 'Textfeld'\n }\n placeholder={\n formFields.area?.placeholder\n }\n infoMessage={\n formFields.area?.infoMessage\n }\n name=\"area\"\n as={Textarea}\n isRequired={\n formFields.area?.isRequired\n }\n errorMessage={errors.area}\n isInverted={isInverted}\n lightBg={hasBg}\n />\n </FlexContainer>\n )}\n </FieldsContainer>\n {checkbox && (\n <Field\n onClick={() => {\n setFieldValue('check', !values.check);\n }}\n value={values.check}\n isSelected={values.check}\n isDisabled={checkbox.isDisabled}\n name=\"check\"\n as={Checkbox}\n label={\n checkbox.label ||\n 'Ich habe die Datenschutzbestimmungen zu Kenntnis genommen und aktzeptiere.'\n }\n isInverted={isInverted}\n isRequired\n />\n )}\n {submitAction && (\n <ActionWrapper\n primary={\n submitAction &&\n submitAction({\n isInverted,\n isDisabled:\n !dirty ||\n !isValid ||\n !isEmpty(errors),\n additionalProps: {\n type: 'submit',\n as: 'button',\n },\n })\n }\n />\n )}\n </form>\n )}\n </Formik>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Form;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Plus: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path d=\"M14 8H8v6H6V8H0V6h6V0h2v6h6v2z\" fill={iconColor} />\n </SVG>\n);\n\nexport default Plus;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Minus: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"14\"\n height=\"2\"\n viewBox=\"0 0 14 2\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path d=\"M14 2H0V0h14v2z\" fill={iconColor} />\n </SVG>\n);\n\nexport default Minus;\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 * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { spacings, getColors as color } from 'utils/styles';\nimport Minus from 'components/base/icons/Minus';\n\nconst AccordionBlock = styled.ul<{\n isInverted?: boolean;\n hasBg?: boolean;\n borderColor?: string;\n}>`\n margin: 0;\n padding: 0;\n list-style: none;\n\n background: ${({ isInverted, hasBg, theme }) =>\n isInverted || hasBg ? color(theme).light : color(theme).mono.light};\n\n border-bottom: 10px solid\n ${({ borderColor, isInverted, theme, hasBg }) =>\n borderColor\n ? borderColor\n : isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : color(theme).light};\n\n &:last-child {\n border-bottom: none;\n }\n`;\n\nconst AccordionItems = styled.li`\n cursor: pointer;\n`;\n\nconst AccordionHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n\n padding: ${spacings.spacer}px;\n`;\n\nconst IconContainer = styled.div`\n will-change: transform;\n transition: all ease-in-out 0.2s;\n\n ${AccordionHead}:hover & {\n transform: scale(1.2);\n }\n`;\n\nconst AccordionText = styled(Copy)<{\n isVisible?: boolean;\n inverted?: boolean;\n hasBg?: boolean;\n borderColor?: string;\n}>`\n display: ${({ isVisible }) => (isVisible ? 'block' : 'none')};\n\n border-top: 2px solid\n ${({ borderColor, inverted, theme, hasBg }) =>\n borderColor\n ? borderColor\n : inverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : color(theme).light};\n\n padding: ${spacings.spacer}px;\n`;\n\nconst Accordion: React.FC<{\n items: { label?: string; text?: string; hasColumns?: boolean }[];\n borderColor?: string;\n\n bgMode?: 'full' | 'inverted';\n}> = ({ items, borderColor, bgMode }) => {\n const [currentItems, setCurrentItems] = React.useState<number[]>([]);\n\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {items &&\n items.map(({ label, text, hasColumns }, i) => {\n const isSelected = currentItems.indexOf(i) !== -1;\n return (\n <AccordionBlock\n key={i}\n borderColor={borderColor}\n isInverted={isInverted}\n hasBg={hasBg}\n >\n <AccordionItems>\n <AccordionHead\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 >\n <Copy size=\"big\" type=\"copy-b\">\n {label}\n </Copy>\n <IconContainer>\n {isSelected ? (\n <Minus\n iconColor={\n color(theme).dark\n }\n />\n ) : (\n <Plus\n iconColor={\n color(theme).dark\n }\n />\n )}\n </IconContainer>\n </AccordionHead>\n <AccordionText\n borderColor={borderColor}\n inverted={isInverted}\n hasBg={hasBg}\n isVisible={isSelected}\n type=\"copy\"\n innerHTML={text}\n columns={hasColumns}\n />\n </AccordionItems>\n </AccordionBlock>\n );\n })}\n </Wrapper>\n </Section>\n );\n};\n\nexport default Accordion;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowLeftRight: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"36\"\n height=\"17\"\n viewBox=\"0 0 36 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.06818 7.42108H32.7534l-6.3638-5.86523c-.3753-.34588-.3753-.71337 0-1.10248.1641-.17293.3635-.2594.598-.2594.2346 0 .4457.08647.6333.2594l7.8808 7.29576c.1642.12971.2463.31345.2463.55124 0 .21617-.0821.39991-.2463.55123l-7.8808 7.2309c-.1642.1729-.3694.2594-.6157.2594-.2462 0-.4515-.0864-.6156-.2594-.3753-.3459-.3753-.7133 0-1.1025l6.3663-5.86748H3.0657L9.43204 14.98c.37527.3459.37527.7134 0 1.1025-.16419.1729-.36355.2594-.5981.2594-.23455 0-.44564-.0865-.63328-.2594L.31986 8.78675c-.1642-.1297-.24628-.31344-.24628-.55123 0-.21617.08209-.39992.24627-.55124L8.20066.45338c.16419-.17294.36942-.25941.61569-.25941.24628 0 .4515.08647.61569.2594.37528.34588.37528.71337 0 1.10248L3.06818 7.42108z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default ArrowLeftRight;\n","import React, { FC, useContext, useEffect, useRef, useState } from 'react';\nimport styled, { css, ThemeContext } 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';\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 & > * {\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\n transition: width ${({ hasTransition }) => (hasTransition ? 0.1 : 0)}s\n ease-in-out;\n\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\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\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 * 1.5}px;\n padding: ${spacings.nudge}px ${spacings.spacer}px ${spacings.nudge * 2}px\n ${spacings.spacer}px;\n background: ${({ bgColor }) => bgColor && bgColor};\n`;\n\nconst ForegroundLabel = styled(ImageLabel)`\n position: absolute;\n bottom: ${spacings.spacer * 1.5}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 * 1.5}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\n transition: left ${({ hasTransition }) => (hasTransition ? 0.1 : 0)}s\n ease-in-out;\n\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\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).light};\n border-radius: 50%;\n background-color: ${({ theme }) => color(theme).primary.medium};\n`;\n\nconst ComparisonSlider: FC<{\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 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 theme = useContext(ThemeContext);\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 bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\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={color(theme).light}\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={color(theme).light}\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={color(theme).light}\n />\n </Control>\n )}\n </ControlContainer>\n </Images>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default ComparisonSlider;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings, getColors as color, withRange } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport ArrowLeftGhost from 'components/base/icons/ArrowLeftGhost';\nimport ArrowRightGhost from 'components/base/icons/ArrowRightGhost';\nimport Slider from 'components/blocks/Slider';\nimport { ResponsiveObject } from 'react-slick';\n// import IntroBlock from 'components/blocks/IntroBlock';\n// import { HeadlineTag } from 'components/typography/Heading';\n\nconst View = styled(Wrapper)`\n position: relative;\n width: 100%;\n overflow: hidden;\n\n @media ${mq.xlarge} {\n padding: 0;\n }\n`;\n\nconst Head = styled(Wrapper)`\n display: flex;\n flex-direction: row;\n`;\n\n// const IntroContainer = styled.div`\n// flex: 1;\n// ${withRange([spacings.spacer * 2, spacings.spacer * 3], 'padding-bottom')}\n// `;\n\nconst TopControls = styled.div`\n display: none;\n text-align: right;\n max-width: ${spacings.wrapper}px;\n margin-left: auto;\n ${withRange(\n [spacings.spacer * 0.5, spacings.spacer * 1.5],\n 'margin-bottom'\n )};\n\n @media ${mq.semilarge} {\n display: flex;\n flex-direction: row;\n align-self: flex-end;\n }\n`;\n\nconst StyledControl = styled(Slider.Control)<{ isInverted?: boolean }>`\n border: none;\n outline: none;\n background: none;\n padding: 0 ${spacings.nudge * 3}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n transition: color 0.2s ease-in-out, transform 0.2s ease-in-out;\n\n &:enabled {\n cursor: pointer;\n }\n\n &:enabled:hover {\n transform: scale(1.05);\n }\n\n &:enabled:active {\n transform: scale(0.95);\n }\n\n &:disabled {\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).mono.dark : color(theme).mono.medium};\n }\n`;\n\nconst StyledSlides = styled(Slider.Slides)`\n margin-bottom: ${spacings.spacer}px;\n\n @media ${mq.xlarge} {\n margin-left: auto;\n width: 100%;\n max-width: ${spacings.wrapperLarge -\n (spacings.wrapperLarge - spacings.wrapper) / 2}px;\n }\n`;\n\nconst Footer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n`;\n\nconst CtrlWrapper = styled.div`\n display: block;\n\n @media ${mq.semilarge} {\n display: none;\n }\n`;\n\nconst CtrlWrapperLeft = styled(CtrlWrapper)`\n flex: 1;\n text-align: left;\n`;\n\nconst CtrlWrapperRight = styled(CtrlWrapper)`\n flex: 1;\n text-align: right;\n`;\n\nconst StyledDotGroup = styled(Slider.DotGroup)`\n display: inline-block;\n align-self: center;\n padding: ${spacings.nudge * 2}px 0;\n`;\n\nconst DotWrapper = styled.button`\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n\n padding: ${spacings.nudge * 2}px;\n margin: -${spacings.nudge * 2}px;\n\n & + & {\n margin-left: ${spacings.nudge * 1.5}px;\n }\n`;\n\nconst Dot = styled.div<{ isActive?: boolean; isInverted?: boolean }>`\n height: 14px;\n width: 14px;\n border: solid 1px\n ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 14px;\n\n transition: background-color 0.2s ease-in-out;\n\n background-color: ${({ isActive, isInverted, theme }) =>\n isActive\n ? isInverted\n ? color(theme).light\n : color(theme).dark\n : 'transparent'};\n`;\n\nexport interface CarouselProps {\n spacing?: 'normal' | 'large';\n variableWidths?: boolean;\n isInverted?: boolean;\n controlNext?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n controlPrev?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n dot?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n index?: number;\n }) => React.ReactNode;\n beforeChange?: (props: { currentStep: number; nextStep: number }) => void;\n afterChange?: (currentStep: number) => void;\n onInit?: (steps: number) => void;\n responsive?: ResponsiveObject[];\n slidesToShow?: number;\n}\n\nconst CarouselBase: FC<CarouselProps & { className?: string }> = ({\n spacing,\n variableWidths,\n isInverted,\n controlNext,\n controlPrev,\n dot,\n beforeChange,\n afterChange,\n onInit,\n slidesToShow,\n responsive,\n children,\n className,\n}) => {\n return (\n <View clampWidth=\"large\" className={className}>\n <Slider.Provider\n variableWidth={variableWidths}\n sameHeight={variableWidths}\n slideSpacing={\n spacing === 'large'\n ? { min: 30, max: 60 }\n : { min: 20, max: 30 }\n }\n slidesToShow={slidesToShow}\n responsive={responsive}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n >\n <Head clampWidth=\"normal\" addWhitespace>\n {React.Children.count(children) > 1 && (\n <TopControls>\n <StyledControl type=\"prev\" isInverted={isInverted}>\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name: 'control_prev_head',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n <StyledControl type=\"next\" isInverted={isInverted}>\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name: 'control_next_head',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n </TopControls>\n )}\n </Head>\n\n <StyledSlides>\n {React.Children.map(children, (child, i) => (\n <Slider.Slide key={i}>{child}</Slider.Slide>\n ))}\n </StyledSlides>\n {React.Children.count(children) > 1 && (\n <Footer>\n <CtrlWrapperLeft>\n <StyledControl type=\"prev\" isInverted={isInverted}>\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name: 'control_prev_footer',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n </CtrlWrapperLeft>\n <StyledDotGroup>\n {(i, isActive, onClick) => (\n <DotWrapper key={i} onClick={onClick}>\n {dot ? (\n dot({ isInverted, isActive, index: i })\n ) : (\n <Dot\n isActive={isActive}\n isInverted={isInverted}\n />\n )}\n </DotWrapper>\n )}\n </StyledDotGroup>\n <CtrlWrapperRight>\n <StyledControl type=\"next\" isInverted={isInverted}>\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name: 'control_next_footer',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n </CtrlWrapperRight>\n </Footer>\n )}\n </Slider.Provider>\n </View>\n );\n};\n\nexport default CarouselBase;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, getGlobalSettings as global } from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\n\nconst ImageCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'isInverted'> & {\n bgMode?: 'full' | 'splitted' | 'inverted';\n images?: ImageProps[];\n }\n> = ({\n bgMode,\n spacing = 'normal',\n images,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const imageCount = images?.length || 0;\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <CarouselBase\n variableWidths\n spacing={spacing}\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={imageCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 832,\n settings: {\n slidesToShow: imageCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: imageCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {images &&\n images.map((img, i) => <FullWidthImg key={i} {...img} />)}\n </CarouselBase>\n </Section>\n );\n};\n\nconst FullWidthImg = styled(Image)`\n width: 100%;\n overflow: hidden;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n`;\n\nexport default ImageCarousel;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings, mq } from 'utils/styles';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport Feature, { FeatureProps } from 'components/blocks/Feature';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\n\nconst StyledWrapper = styled.div`\n padding-left: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n padding-left: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n padding-left: ${(1 / 28) * 100}%;\n\n padding-left: ${`\n max(\n ${spacings.spacer}px,\n ${(1 / 28) * 100}%\n );\n `};\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst FeatureCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing' | 'isInverted'> & {\n bgMode?: 'full' | 'splitted' | 'inverted';\n features?: FeatureProps[];\n }\n> = ({\n bgMode,\n features,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const featureCount = features?.length || 0;\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\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: featureCount,\n medium: featureCount,\n semilarge: featureCount,\n large: featureCount,\n xlarge: featureCount,\n },\n });\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <StyledWrapper>\n <CarouselBase\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={featureCount > 1 ? 3 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: featureCount > 1 ? 3 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: featureCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: featureCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {features &&\n features.map((feature, i) => (\n <div key={i} ref={cardRefs[i]}>\n <Feature\n key={i}\n addWhitespace\n isInverted={isInverted}\n {...feature}\n />\n </div>\n ))}\n </CarouselBase>\n </StyledWrapper>\n </Section>\n );\n};\n\nexport default FeatureCarousel;\n","/* eslint-disable react/jsx-no-target-blank */\nimport React, { FC } from 'react';\n\nexport interface LinkProps {\n isExternal?: boolean;\n href?: string;\n}\n\nconst Link: FC<\n LinkProps & {\n className?: string;\n }\n> = ({ isExternal = false, href, children, className }) => {\n return (\n <a\n href={href}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n className={className}\n >\n {children}\n </a>\n );\n};\n\nexport default Link;\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport Link from 'components/typography/Link';\n\nconst bdotColor = '#1fc2f4';\n\nconst Dot = styled(Link)`\n width: 11px;\n height: 11px;\n\n display: inline-block;\n vertical-align: middle;\n border-radius: 50%;\n\n background: ${bdotColor};\n color: ${bdotColor};\n text-decoration: none;\n\n span {\n visibility: hidden;\n font-size: 0;\n color: transparent;\n }\n`;\n\nconst Bdot: React.FC<{ className?: string }> = ({ className }) => {\n return (\n <Dot className={className} href=\"https://blateral.com\" isExternal>\n <span>b.lateral - creative agency</span>\n </Dot>\n );\n};\n\nexport default Bdot;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings } from 'utils/styles';\nimport Link from 'components/typography/Link';\n\nconst View = styled.div`\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n // padding: ${spacings.nudge * 2}px 0;\n // overflow: hidden;\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n`;\n\nconst IconItemView = styled.div`\n transition: all ease-in-out 0.2s;\n\n &:hover {\n transform: scale(1.1);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst StyledLink = styled(Link)<{ textColor?: string }>`\n display: block;\n padding: ${spacings.nudge * 2}px ${spacings.nudge * 1.5}px;\n margin: -${spacings.nudge * 2}px -${spacings.nudge * 1.5}px;\n color: ${({ theme, textColor }) => textColor || color(theme).dark};\n`;\n\nconst SocialList: FC<{\n isInverted?: boolean;\n items?: { href: string; icon: React.ReactNode }[];\n className?: string;\n}> = ({ isInverted = false, items, className }) => {\n const theme = React.useContext(ThemeContext);\n\n return (\n <View className={className}>\n {items &&\n items.map((item, i) => (\n <IconItemView key={i}>\n <StyledLink\n isExternal\n href={item.href}\n textColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {item.icon}\n </StyledLink>\n </IconItemView>\n ))}\n </View>\n );\n};\n\nexport default SocialList;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport Bdot from 'components/blocks/Bdot';\nimport SocialList from 'components/blocks/SocialList';\n\nconst MainView = styled(Wrapper)<{ isInverted?: boolean }>`\n background-color: ${({ theme, isInverted }) =>\n isInverted && color(theme).dark};\n`;\n\nconst StyledLink = styled(Link)`\n display: inline-block;\n padding: ${spacings.nudge * 0.5}px 0;\n color: inherit;\n text-decoration: underline;\n`;\n\n/**** MAIN FOOTER CONTENT ****/\nconst Content = styled.div<{ isInverted?: boolean }>`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n margin-left: -${spacings.spacer}px;\n margin-right: -${spacings.spacer}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n\n & > * {\n flex: 1;\n }\n\n & > *:last-child {\n flex: 1 1 100%;\n }\n\n @media ${mq.medium} {\n flex-direction: row;\n flex-wrap: wrap;\n padding-top: ${spacings.spacer}px;\n padding-bottom: ${spacings.spacer}px;\n\n & > *:last-child {\n max-width: 600px;\n }\n }\n\n @media ${mq.large} {\n & > *:last-child {\n flex: 1;\n max-width: 100%;\n }\n }\n`;\n\nconst ContentBlock = styled.div<{\n direction?: 'row' | 'column';\n topSpace?: string;\n hAlign?: 'left' | 'center' | 'right';\n}>`\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n\n padding: ${spacings.spacer}px;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n flex-direction: ${({ direction }) => direction || 'column'};\n align-items: flex-start;\n padding-top: ${({ topSpace }) => topSpace && topSpace};\n text-align: left;\n min-width: 330px;\n }\n\n @media ${mq.large} {\n align-items: ${({ hAlign }) =>\n hAlign === 'right'\n ? 'flex-end'\n : hAlign === 'center'\n ? 'center'\n : 'flex-start'};\n text-align: ${({ hAlign }) => hAlign && hAlign};\n }\n`;\n\nconst LogoLink = styled(Link)`\n display: inline-block;\n color: inherit;\n`;\n\nconst ContactData = styled(Copy)`\n text-align: center;\n\n p {\n margin: 0;\n padding: 0;\n }\n\n @media ${mq.medium} {\n text-align: left;\n margin-top: auto;\n padding: ${spacings.nudge * 2}px 0;\n }\n`;\n\nconst SiteLinksView = styled.div`\n flex: 50%;\n display: flex;\n flex-direction: column;\n text-align: center;\n\n margin: 0;\n\n & + & {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n\n @media ${mq.medium} {\n padding: 0 ${spacings.nudge * 3}px;\n text-align: left;\n\n & + & {\n padding-top: 0;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst SiteLink = styled(StyledLink)`\n font-weight: ${({ theme }) => font(theme)['copy-b'].medium.weight};\n font-family: ${({ theme }) => font(theme)['copy-b'].medium.family};\n ${({ theme }) => withRange(font(theme)['copy-b'].medium.size, 'font-size')}\n line-height: ${({ theme }) => font(theme)['copy-b'].medium.lineHeight};\n`;\n\nconst LinkWrapper = styled(Copy)<{ isActive?: boolean; isInverted?: boolean }>`\n display: inline-block;\n position: relative;\n padding-bottom: 3px;\n\n &:before {\n content: ${({ isActive }) => (isActive ? `\"\"` : undefined)};\n position: absolute;\n left: -12px;\n top: 50%;\n height: 4px;\n width: 4px;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 4px;\n\n transform: translateY(-100%);\n }\n\n &:after {\n content: '';\n position: absolute;\n left: 0;\n bottom: 0;\n right: 0;\n height: 1px;\n background-color: ${({ theme }) => color(theme).primary.medium};\n margin-top: ${spacings.nudge * 10}px;\n opacity: 0;\n\n transition: opacity 0.2s ease-in-out;\n\n ${SiteLink}:hover > & {\n opacity: 1;\n }\n }\n`;\n\n/**** BOTTOM FOOTER CONTENT ****/\nconst BottomWrapper = styled(Wrapper)`\n background-color: ${({ theme }) => color(theme).mono.light};\n`;\n\nconst BottomView = styled(Wrapper)`\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 100%;\n min-height: 41px;\n\n padding-top: ${spacings.nudge * 1.5}px;\n padding-bottom: ${spacings.nudge * 1.5}px;\n\n color: ${({ theme }) => color(theme).dark};\n\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n justify-content: flex-end;\n }\n`;\n\n/**** FOOTER SECTION ****/\nconst Footer: FC<{\n isInverted?: boolean;\n logo?: {\n img?: string;\n link?: string;\n };\n columnTopSpace?: string;\n contactData?: string;\n siteLinks?: Array<LinkProps & { label?: string; isActive?: boolean }>;\n newsTitle?: string;\n newsText?: string;\n newsForm?: (isInverted?: boolean) => React.ReactNode;\n socials?: Array<{ icon: React.ReactNode; href: string }>;\n bottomLinks?: { href: string; label?: string; isExternal?: boolean }[];\n brandIcon?: React.ReactNode;\n}> = ({\n isInverted = false,\n logo,\n columnTopSpace,\n contactData,\n siteLinks,\n newsTitle,\n newsText,\n newsForm,\n socials,\n bottomLinks,\n brandIcon,\n}) => {\n // setup siteLinks columns\n const siteLinksColLeft =\n siteLinks && siteLinks.length > 6\n ? siteLinks?.slice(0, Math.ceil(siteLinks.length / 2))\n : siteLinks;\n const siteLinksColRight =\n siteLinks && siteLinks.length > 6\n ? siteLinks?.slice(Math.ceil(siteLinks.length / 2))\n : undefined;\n\n return (\n <Section renderAs=\"footer\" bgMode=\"full\" bgColor=\"transparent\">\n <MainView clampWidth=\"large\" isInverted={isInverted}>\n <Wrapper addWhitespace>\n <Content isInverted={isInverted}>\n <ContentBlock>\n {logo?.img && (\n <LogoLink href={logo?.link}>\n <img src={logo?.img} />\n </LogoLink>\n )}\n {contactData && (\n <ContactData\n size=\"small\"\n isInverted={isInverted}\n innerHTML={contactData}\n />\n )}\n </ContentBlock>\n <ContentBlock\n direction=\"row\"\n topSpace={logo && columnTopSpace}\n >\n {siteLinksColLeft && (\n <SiteLinksView>\n {siteLinksColLeft.map((link, i) => (\n <SiteLink key={i} href={link.href}>\n <LinkWrapper\n type=\"copy\"\n isActive={link.isActive}\n isInverted={isInverted}\n >\n {link.label || link.href}\n </LinkWrapper>\n </SiteLink>\n ))}\n </SiteLinksView>\n )}\n {siteLinksColRight && (\n <SiteLinksView>\n {siteLinksColRight.map((link, i) => (\n <SiteLink key={i} href={link.href}>\n <LinkWrapper\n type=\"copy\"\n isActive={link.isActive}\n isInverted={isInverted}\n >\n {link.label || link.href}\n </LinkWrapper>\n </SiteLink>\n ))}\n </SiteLinksView>\n )}\n </ContentBlock>\n <ContentBlock\n topSpace={logo && columnTopSpace}\n hAlign={\n !newsTitle && !newsText && !newsForm\n ? 'right'\n : 'left'\n }\n >\n {newsTitle && (\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {newsTitle}\n </Copy>\n )}\n {newsText && (\n <Copy\n size=\"small\"\n isInverted={isInverted}\n innerHTML={newsText}\n />\n )}\n {newsForm && newsForm(isInverted)}\n {socials && (\n <SocialList\n isInverted={isInverted}\n items={socials.map((item) => {\n return {\n href: item.href,\n icon: item.icon,\n };\n })}\n />\n )}\n </ContentBlock>\n </Content>\n </Wrapper>\n </MainView>\n\n {bottomLinks && (\n <BottomWrapper clampWidth=\"large\">\n <BottomView addWhitespace>\n {bottomLinks.map((link, i) => {\n if (link.href) {\n return (\n <StyledLink\n key={i}\n isExternal={link.isExternal}\n href={link.href}\n >\n <Copy size=\"small\">\n {link.label || link.href}\n </Copy>\n </StyledLink>\n );\n } else return null;\n })}\n {brandIcon ? brandIcon : <Bdot />}\n </BottomView>\n </BottomWrapper>\n )}\n </Section>\n );\n};\n\nexport default Footer;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { getBgImage } from 'utils/backgroundImage';\nimport { canUseWebP } from 'utils/usePoster';\nimport { FC, useEffect, useRef, useState } from 'react';\n\nexport interface HeaderKenBurnsImageProps {\n small: string;\n medium: string;\n large: string;\n xlarge: string;\n webp?: {\n small: string;\n medium: string;\n large: string;\n xlarge: string;\n };\n}\n\nconst AnimationContainer = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n overflow: hidden;\n`;\n\nconst PosterImage = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n`;\n\nconst AnimationImage = styled.img<{ scale?: number; opacity?: number }>`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n\n object-fit: cover;\n object-position: center;\n\n transition-property: opacity, transform;\n transition-duration: ${({ scale }) => `2s, ${scale === 1 ? '0s' : '13s'}`};\n transition-delay: ${({ scale }) =>\n `${scale === 1 ? '1s' : '0s'}, ${scale === 1 ? '3s' : '0s'}`};\n\n opacity: ${({ opacity }) => opacity && opacity};\n transform: scale(${({ scale }) => scale || 1})\n rotate(${({ scale }) => (scale !== 1 ? 0.04 : 0)}deg);\n\n will-change: transform, opacity;\n`;\n\nconst AnimationImages: FC<{\n zoom?: number;\n images: { id: number | string; image: string }[];\n onChange?: (imgId: number) => void;\n}> = ({ zoom = 1.08, images, onChange }) => {\n const intervalRef = useRef<number | null>();\n const [activeImg, setActiveImg] = useState<number>(-1);\n\n useEffect(() => {\n const changeImage = () => {\n setActiveImg((prev) => {\n return (prev + 1) % images.length;\n });\n };\n\n // changeImage();\n window.setTimeout(changeImage, 200);\n if (intervalRef.current) window.clearInterval(intervalRef.current);\n intervalRef.current = window.setInterval(changeImage, 10000);\n\n return () => {\n if (intervalRef.current) window.clearInterval(intervalRef.current);\n };\n }, [images]);\n\n useEffect(() => {\n if (activeImg !== -1) onChange && onChange(activeImg);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeImg]);\n\n return (\n <>\n {images.map((img, i) => (\n <AnimationImage\n key={i}\n style={{\n // backgroundImage: `url(${img.image})`,\n zIndex: i === activeImg ? 1 : 0,\n }}\n src={img.image}\n scale={i === activeImg ? zoom : 1}\n opacity={i === activeImg ? 1 : 0}\n alt=\"\"\n />\n ))}\n </>\n );\n};\n\nconst preloadImages = (imageUrls: string[]) => {\n const images = imageUrls.map((src, i) => {\n return new Promise((res) => {\n const img = new Image();\n img.src = src;\n img.onload = () => res({ url: src, i });\n });\n });\n\n return images;\n};\n\ntype KenBurnsMq = 'small' | 'medium' | 'large' | 'xlarge';\n\nconst HeaderKenBurns: React.FC<{\n images: HeaderKenBurnsImageProps[];\n onImageChange?: (currentImg: HeaderKenBurnsImageProps) => void;\n className?: string;\n}> = ({ images, onImageChange, className, children }) => {\n const mqs: KenBurnsMq[] = ['small', 'medium', 'large', 'xlarge'];\n const currentMq = useMediaQuery(mqs) as KenBurnsMq | undefined;\n\n const [loadedImages, setLoadedImages] = React.useState<{\n [key: string]: { id: number | string; image: string }[];\n }>({\n small: [],\n medium: [],\n large: [],\n xlarge: [],\n });\n\n React.useEffect(() => {\n if (currentMq) {\n const loadedForMq = loadedImages[currentMq];\n const useWebp = canUseWebP();\n\n if (loadedForMq.length < images.length && images.length >= 2) {\n const requestedImages = images.map((img) =>\n img.webp && useWebp ? img.webp[currentMq] : img[currentMq]\n );\n\n const resolve = async (items: any) => {\n for (const item of items) {\n const x = await item;\n\n setLoadedImages((prev) => {\n // check if image id already exists in array\n if (!prev[currentMq].find((e) => e.id === x.i)) {\n return {\n ...prev,\n [currentMq]: [\n ...prev[currentMq],\n {\n id: x.i,\n image: x.url,\n },\n ],\n };\n } else return prev;\n });\n }\n };\n\n resolve(preloadImages(requestedImages));\n }\n }\n }, [currentMq, images, loadedImages]);\n\n return (\n <AnimationContainer className={className}>\n {currentMq && loadedImages[currentMq].length >= images.length ? (\n <AnimationImages\n images={loadedImages[currentMq]}\n onChange={(id) =>\n images[id] && onImageChange && onImageChange(images[id])\n }\n />\n ) : (\n <PosterImage\n style={{\n backgroundImage: `url(${getBgImage(\n images[0],\n currentMq\n )})`,\n }}\n />\n )}\n {children}\n </AnimationContainer>\n );\n};\n\nexport default HeaderKenBurns;\n","import Image from 'components/blocks/Image';\nimport * as React from 'react';\nimport styled from 'styled-components';\n\ninterface HeaderPosterImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst PosterView = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n`;\n\nconst BackgroundImg = styled(Image)`\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n object-position: center;\n`;\n\nconst HeaderPoster: React.FC<{\n bgImage: HeaderPosterImageProps;\n className?: string;\n}> = ({ bgImage, className, children }) => {\n return (\n <PosterView className={className}>\n <BackgroundImg {...bgImage} alt=\"\" />\n {children}\n </PosterView>\n );\n};\n\nexport default HeaderPoster;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n FontOptionType,\n getFonts as font,\n mq,\n styleTextColor,\n withRange,\n} from 'utils/styles';\n\n// Styles\nconst BaseStyles = styled.h1<{\n size: FontOptionType;\n hyphens?: boolean;\n hasShadow?: boolean;\n textColor?: string;\n textGradient?: string;\n}>`\n margin: 0;\n padding: 0;\n ${({ textColor, textGradient }) => styleTextColor(textColor, textGradient)}\n\n hyphens: auto;\n /* -webkit-hyphens: auto; */\n /* overflow-wrap: break-word; */\n\n ${(props: { hyphens?: boolean }) =>\n !props.hyphens &&\n css`\n @media ${mq.large} {\n hyphens: none;\n }\n `}\n\n text-shadow: ${({ hasShadow }) =>\n hasShadow && '1px 2px 8px rgba(0, 0, 0, 0.25)'};\n`;\n\nconst View = styled(BaseStyles)`\n font-family: ${({ theme, size }) => font(theme).callout[size].family};\n font-weight: ${({ theme, size }) => font(theme).callout[size].weight};\n font-style: ${({ theme, size }) => font(theme).callout[size].style};\n ${({ theme, size }) =>\n withRange(font(theme).callout[size].size, 'font-size')}\n line-height: ${({ theme, size }) => font(theme).callout[size].lineHeight};\n letter-spacing: ${({ theme, size }) =>\n font(theme).callout[size].letterSpacing};\n text-transform: ${({ theme, size }) =>\n font(theme).callout[size].textTransform};\n`;\n\nexport type CalloutTag =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'span'\n | 'div';\n\nconst Callout: React.FC<{\n isInverted?: boolean;\n as?: CalloutTag;\n size?: FontOptionType;\n textColor?: string;\n textGradient?: string;\n hyphens?: boolean;\n hasShadow?: boolean;\n innerHTML?: string;\n\n className?: string;\n}> = ({\n isInverted,\n as = 'h2',\n className,\n size = 'medium',\n textColor,\n textGradient,\n hyphens = false,\n hasShadow = false,\n innerHTML,\n children,\n}) => {\n const theme = React.useContext(ThemeContext);\n const fontSettings = font(theme)?.callout?.[size];\n\n return (\n <View\n as={as}\n size={size}\n textColor={\n textColor ||\n (isInverted ? fontSettings.colorInverted : fontSettings.color)\n }\n textGradient={\n textGradient ||\n (!textColor\n ? isInverted\n ? fontSettings.colorGradientInverted\n : fontSettings.colorGradient\n : undefined)\n }\n hyphens={hyphens}\n hasShadow={hasShadow}\n dangerouslySetInnerHTML={\n innerHTML && !children ? { __html: innerHTML } : undefined\n }\n className={className}\n >\n {children}\n </View>\n );\n};\n\nexport default Callout;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { useState, useEffect } from 'react';\nimport Image from 'components/blocks/Image';\nimport { useMediaQuery } from 'utils/useMediaQuery';\n\ninterface HeaderVideoImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst PosterView = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n min-height: 200px;\n display: block;\n flex: 1 0 0px;\n }\n`;\n\nconst PlaceholderImg = styled(Image)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n z-index: 0;\n`;\n\nconst AutoplayVideo = styled.video<{ isVisible?: boolean }>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n object-position: center;\n opacity: ${({ isVisible }) => (isVisible ? 1 : 0)};\n pointer-events: none;\n z-index: 1;\n\n transition: opacity 0.3s ease-in-out;\n`;\n\ntype HeaderVideoMq = 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge';\n\nconst HeaderVideo: React.FC<{\n placeholderImg?: HeaderVideoImageProps;\n videoUrl?: string;\n className?: string;\n}> = ({ placeholderImg, videoUrl, className, children }) => {\n const [isLoaded, setLoaded] = useState<boolean>(false);\n const currentMq = useMediaQuery([\n 'small',\n 'medium',\n 'semilarge',\n 'large',\n 'xlarge',\n ]) as HeaderVideoMq | undefined;\n\n const isMobile = currentMq === undefined || currentMq === 'small';\n\n useEffect(() => {\n if (isMobile) setLoaded(false);\n }, [isMobile]);\n\n return (\n <PosterView className={className}>\n {placeholderImg?.small && !isLoaded && (\n <PlaceholderImg coverSpace {...placeholderImg} />\n )}\n {videoUrl && !isMobile && (\n <AutoplayVideo\n isVisible={isLoaded}\n src={videoUrl}\n muted\n autoPlay\n loop\n onCanPlayThrough={() => setLoaded(true)}\n />\n )}\n {children}\n </PosterView>\n );\n};\n\nexport default HeaderVideo;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { CalloutTag } from 'components/typography/Callout';\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Grid from 'components/base/Grid';\nimport Wrapper from 'components/base/Wrapper';\nimport HeaderKenBurns, { HeaderKenBurnsImageProps } from './HeaderKenBurns';\nimport HeaderPoster from './HeaderPoster';\nimport Actions from 'components/blocks/Actions';\nimport Callout from 'components/typography/Callout';\nimport HeaderVideo from './HeaderVideo';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\n\ninterface HeaderImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst View = styled.header`\n position: relative;\n`;\n\nconst HeaderWrapper = styled(Wrapper)`\n display: flex;\n flex-direction: column;\n height: 100%;\n`;\n\nconst PosterContent = styled.div`\n position: relative;\n display: none;\n width: 100%;\n margin: auto;\n z-index: 3;\n text-align: center;\n padding: 0 ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n display: block;\n max-width: none;\n margin-left: 0;\n text-align: left;\n padding-left: ${(1 / 28) * 100}%;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst PosterContentMobile = styled(PosterContent)`\n display: block;\n padding-top: ${spacings.spacer * 2}px;\n ${withRange([spacings.spacer * 2, spacings.spacer * 4], 'padding-bottom')}\n\n @media ${mq.semilarge} {\n display: none;\n }\n`;\n\nconst Badge = styled.div<{ showOnMobile?: boolean }>`\n display: ${({ showOnMobile }) => (showOnMobile ? 'block' : 'none')};\n position: relative;\n height: 234px;\n width: 234px;\n margin-left: auto;\n margin-right: ${spacings.spacer}px;\n margin-top: -173px;\n z-index: 3;\n\n @media ${mq.semilarge} {\n display: block;\n margin-right: ${spacings.spacer * 4}px;\n }\n\n @media ${mq.xlarge} {\n width: 392px;\n height: 392px;\n margin-left: 0;\n margin-top: -300px;\n\n right: -50%;\n transform: translate(\n ${spacings.wrapper / 2 - (392 + spacings.spacer * 3)}px\n );\n }\n`;\n\nconst Poster: FC<{\n videoUrl?: string;\n images?: HeaderImageProps[];\n className?: string;\n}> = ({ videoUrl, images, className, children }) => {\n if (!videoUrl) {\n if (!images || images.length === 0) return <div>{children}</div>;\n else if (images.length === 1)\n return (\n <HeaderPoster bgImage={images[0]} className={className}>\n {children}\n </HeaderPoster>\n );\n else\n return (\n <HeaderKenBurns\n images={images.map((img) => {\n return {\n ...img,\n } as HeaderKenBurnsImageProps;\n })}\n className={className}\n >\n {children}\n </HeaderKenBurns>\n );\n } else {\n return (\n <HeaderVideo\n videoUrl={videoUrl}\n placeholderImg={images?.[0]}\n className={className}\n >\n {children}\n </HeaderVideo>\n );\n }\n};\n\nconst StyledPoster = styled(Poster)<{ gradient?: string; size?: number }>`\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-end;\n height: ${({ size }) => (size ? size * 100 + 'vh' : '100vh')};\n max-height: 1100px;\n\n ${withRange([spacings.spacer * 7, spacings.spacer * 8], 'padding-top')};\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4.5],\n 'padding-bottom'\n )};\n\n &:after {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-image: ${({ gradient }) => gradient || undefined};\n pointer-events: none;\n z-index: 2;\n }\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n min-height: 1px; // before: 200px\n display: block;\n flex: 1 0 0px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')};\n\n @media ${mq.semilarge} {\n max-width: 600px;\n }\n`;\n\nconst IntroBlock = styled.div<{ noTitle?: boolean }>`\n margin-top: ${({ noTitle }) => noTitle && spacings.spacer}px;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst Header: FC<{\n size?: 'full' | 'small';\n /** Optional explicit height scale value: 100vh * [0...1] */\n sizeScale?: number;\n title?: string;\n titleAs?: CalloutTag;\n\n intro?: {\n text?: string;\n title?: string;\n };\n\n primaryCta?: (isInverted?: boolean) => React.ReactNode;\n secondaryCta?: (isInverted?: boolean) => React.ReactNode;\n videoUrl?: string;\n images?: HeaderImageProps[];\n withTopGradient?: boolean;\n customTopGradient?: string;\n customBottomGradient?: string;\n badge?: {\n content: React.ReactNode;\n showOnMobile?: boolean;\n };\n}> = ({\n size = 'full',\n sizeScale,\n title,\n titleAs,\n intro,\n primaryCta,\n secondaryCta,\n videoUrl,\n images,\n withTopGradient = true,\n customTopGradient,\n customBottomGradient,\n badge,\n}) => {\n const theme = useContext(ThemeContext);\n const topGradient = withTopGradient\n ? customTopGradient ||\n 'linear-gradient(179deg,rgba(0,0,0,.4) 0%,rgba(0,0,0,0) 40%)'\n : undefined;\n\n const bottomGradient =\n title || primaryCta || secondaryCta\n ? customBottomGradient || global(theme).sections.imageTextGradient\n : undefined;\n\n const gradient = `${bottomGradient ? bottomGradient + ', ' : ''}${\n topGradient || ''\n }`;\n return (\n <View>\n <HeaderWrapper clampWidth=\"large\">\n <StyledPoster\n videoUrl={videoUrl}\n images={images}\n gradient={withTopGradient ? gradient : undefined}\n size={\n sizeScale === undefined\n ? size === 'small'\n ? 0.8\n : 1\n : sizeScale\n }\n >\n <Wrapper>\n <PosterContent>\n <Grid.Row gutter={0}>\n <Grid.Col\n span={26 / 28}\n large={{ span: 20 / 28 }}\n xlarge={{ span: 15 / 28 }}\n >\n {!intro?.title && title && (\n <Callout\n hyphens\n size=\"medium\"\n as={titleAs}\n hasShadow\n textColor=\"#fff\"\n innerHTML={title}\n />\n )}\n {/** #TODO: Title und Intro Logik zusammen mit Markus abklären (siehe auch b.kit-prismic slice)*/}\n {intro && intro.title && (\n <IntroBlock\n noTitle={!intro.title && !!title}\n >\n {intro.title && (\n <Heading\n as=\"h1\"\n size=\"heading-1\"\n hasShadow\n textColor=\"#fff\"\n hyphens\n >\n {intro.title}\n </Heading>\n )}\n {intro.text && (\n <Copy textColor=\"#fff\">\n {intro.text}\n </Copy>\n )}\n </IntroBlock>\n )}\n {(primaryCta || secondaryCta) && (\n <StyledActions\n primary={\n primaryCta && primaryCta(true)\n }\n secondary={\n secondaryCta &&\n secondaryCta(true)\n }\n />\n )}\n </Grid.Col>\n </Grid.Row>\n </PosterContent>\n </Wrapper>\n </StyledPoster>\n {badge && badge.content && (\n <Badge showOnMobile={badge.showOnMobile}>\n {badge.content}\n </Badge>\n )}\n </HeaderWrapper>\n {(title || primaryCta || secondaryCta) && (\n <PosterContentMobile>\n <Wrapper addWhitespace>\n {title && (\n <Callout\n hyphens\n size=\"small\"\n as={titleAs}\n isInverted={false}\n innerHTML={title}\n />\n )}\n {(primaryCta || secondaryCta) && (\n <StyledActions\n primary={primaryCta && primaryCta(false)}\n secondary={secondaryCta && secondaryCta(false)}\n />\n )}\n </Wrapper>\n </PosterContentMobile>\n )}\n </View>\n );\n};\n\nexport default Header;\n","import * as React from 'react';\nimport styled, { ThemeContext } 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';\n\nconst Seperator = styled.div<{ isInverted?: boolean }>`\n border-bottom: solid 1px\n ${({ isInverted, theme }) =>\n isInverted ? color(theme).light : color(theme).dark};\n`;\n\nconst ContentFlex = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n\n margin: ${spacings.spacer * 2}px 0;\n\n @media ${mq.medium} {\n flex-direction: row;\n justify-content: flex-start;\n text-align: left;\n }\n`;\n\nconst Avatar = styled.img`\n border-radius: 50%; ;\n`;\n\nconst Author = styled.div`\n margin-top: ${spacings.spacer}px;\n\n @media ${mq.medium} {\n margin-left: 0;\n margin-left: ${spacings.spacer}px;\n }\n`;\n\nconst StyledCopy = styled(Copy)`\n text-transform: uppercase;\n margin-bottom: ${spacings.nudge * 2}px;\n`;\n\nconst NewsAuthorCard: React.FC<{\n label?: string;\n author?: string;\n avatar?: { src: string; alt?: string };\n\n bgMode?: 'full' | 'inverted';\n}> = ({ label, author, avatar, bgMode }) => {\n const theme = React.useContext(ThemeContext);\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n {author && (\n <>\n <Seperator isInverted={isInverted} />\n <ContentFlex>\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 </ContentFlex>\n </>\n )}\n <Seperator isInverted={isInverted} />\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsAuthorCard;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { spacings, getColors as color } from 'utils/styles';\nimport Copy from 'components/typography/Copy';\n\nconst View = styled(Copy)<{\n isInverted?: boolean;\n isActive?: boolean;\n onClick?: () => void;\n}>`\n display: inline-block;\n border: 1px solid\n ${({ isInverted, theme }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 15px;\n\n padding: 3px ${spacings.nudge * 2}px;\n user-select: none;\n\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-align: center;\n background: ${({ isActive, isInverted, theme }) =>\n isActive && (isInverted ? color(theme).light : color(theme).dark)};\n color: ${({ isActive, isInverted, theme }) =>\n isActive && (isInverted ? color(theme).dark : color(theme).light)};\n cursor: ${({ onClick }) => (onClick ? 'pointer' : 'default')};\n\n transition: background 0.1s ease-in-out, color 0.1s ease-in-out;\n\n &:hover {\n background: ${({ theme, isInverted, onClick }) =>\n onClick && (isInverted ? color(theme).light : color(theme).dark)};\n color: ${({ theme, isInverted, onClick }) =>\n onClick && (isInverted ? color(theme).dark : color(theme).light)};\n }\n`;\n\nconst Tag: FC<{\n isInverted?: boolean;\n isActive?: boolean;\n onClick?: () => void;\n className?: string;\n}> = ({ isInverted, isActive, onClick, className, children }) => {\n return (\n <View\n isInverted={isInverted}\n isActive={isActive}\n onClick={onClick}\n className={className}\n >\n {children}\n </View>\n );\n};\n\nexport default Tag;\n","interface DateReplacementHolder {\n [key: string]: () => string;\n}\n\nexport default class StatusFormatter {\n private timestamp: number;\n private input: string;\n private dateFormat: string;\n private timeFormat: string;\n\n private localeKey: string;\n private date: Date;\n\n constructor(\n timestamp: number,\n input: string,\n dateFormat: string,\n timeFormat: string,\n localeKey?: string\n ) {\n this.timestamp = timestamp;\n this.input = input;\n this.dateFormat = dateFormat;\n this.timeFormat = timeFormat;\n\n this.localeKey = localeKey ? localeKey : 'de';\n this.date = new Date(this.timestamp);\n }\n\n private dateReplacements: DateReplacementHolder = {\n dddd: () => {\n return weekDays[this.localeKey].long[this.date.getDay()];\n },\n DDDD: () => {\n return weekDays[this.localeKey].long[this.date.getDay()];\n },\n ddd: () => {\n return weekDays[this.localeKey].short[this.date.getDay()];\n },\n DDD: () => {\n return weekDays[this.localeKey].short[this.date.getDay()];\n },\n dd: () => {\n return this.getDay();\n },\n DD: () => {\n return this.getDay();\n },\n MMMM: () => {\n return monthNames[this.localeKey].long[this.date.getMonth()];\n },\n mmmm: () => {\n return monthNames[this.localeKey].long[this.date.getMonth()];\n },\n MMM: () => {\n return monthNames[this.localeKey].short[this.date.getMonth()];\n },\n mmm: () => {\n return monthNames[this.localeKey].short[this.date.getMonth()];\n },\n mm: () => {\n return this.getMonth();\n },\n MM: () => {\n return this.getMonth();\n },\n yyyy: () => {\n return this.getYear();\n },\n YYYY: () => {\n return this.getYear();\n },\n yy: () => {\n return this.getYear().substr(-2);\n },\n YY: () => {\n return this.getYear().substr(-2);\n },\n };\n\n private timeReplacements: DateReplacementHolder = {\n hh: () => {\n return this.getHours();\n },\n HH: () => {\n return this.getHours();\n },\n hs: () => {\n return this.getHours12h();\n },\n HS: () => {\n return this.getHours12h();\n },\n mm: () => {\n return this.getMinutes();\n },\n MM: () => {\n return this.getMinutes();\n },\n ss: () => {\n return this.getSeconds();\n },\n SS: () => {\n return this.getSeconds();\n },\n ap: () => {\n const hours = this.date.getHours();\n return hours >= 12 ? 'pm' : 'am';\n },\n AP: () => {\n const hours = this.date.getHours();\n return hours >= 12 ? 'PM' : 'AM';\n },\n };\n\n public setDate(timestamp: number) {\n this.date = new Date(timestamp);\n }\n\n public setLocale(localeKey: string) {\n this.localeKey = localeKey;\n }\n\n public getFormattedStatus() {\n const placeholders: {\n [key: string]: any;\n } = {\n '%DATE%': this.getFormattedDate(),\n '%TIME%': this.getFormattedTime(),\n };\n\n const formattedInput = this.input.replace(/%\\w+%/g, (foundString) => {\n return placeholders[foundString] || foundString;\n });\n return formattedInput;\n }\n\n public getFormattedDate() {\n // replace placeholders with values from dateReplacements object\n const dataKeys = Object.keys(this.dateReplacements);\n let formattedDate = this.dateFormat;\n for (let i = 0; i < dataKeys.length; i++) {\n formattedDate = formattedDate.replace(\n new RegExp(dataKeys[i], 'g'),\n (foundString) => {\n return this.dateReplacements[foundString].call(this);\n }\n );\n }\n return formattedDate;\n }\n\n public getFormattedTime() {\n // replace placeholders with values from timeReplacements object\n const dataKeys = Object.keys(this.timeReplacements);\n let formattedTime = this.timeFormat;\n for (let i = 0; i < dataKeys.length; i++) {\n formattedTime = formattedTime.replace(\n new RegExp(dataKeys[i], 'g'),\n (foundString) => {\n return this.timeReplacements[foundString].call(this);\n }\n );\n }\n return formattedTime;\n }\n\n private getDoubleDigitString(value: number) {\n return value < 10 ? '0' + value.toString() : value.toString();\n }\n\n private getDay() {\n return this.getDoubleDigitString(this.date.getDate());\n }\n\n private getMonth() {\n return this.getDoubleDigitString(this.date.getMonth() + 1);\n }\n\n private getYear() {\n return this.date.getFullYear().toString();\n }\n\n private getHours() {\n return this.getDoubleDigitString(this.date.getHours());\n }\n\n private getHours12h() {\n let hours = this.date.getHours();\n hours = hours % 12;\n hours = hours === 0 ? 12 : hours;\n return this.getDoubleDigitString(hours);\n }\n\n private getMinutes() {\n return this.getDoubleDigitString(this.date.getMinutes());\n }\n\n private getSeconds() {\n return this.getDoubleDigitString(this.date.getSeconds());\n }\n}\n\ninterface WeekDays {\n [key: string]: {\n long: string[];\n short: string[];\n };\n}\n\ninterface MonthNames {\n [key: string]: {\n long: string[];\n short: string[];\n };\n}\n\nconst weekDays: WeekDays = {\n de: {\n long: [\n 'Montag',\n 'Dienstag',\n 'Mittwoch',\n 'Donnerstag',\n 'Freitag',\n 'Samstag',\n 'Sonntag',\n ],\n short: ['Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.', 'So.'],\n },\n en: {\n long: [\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n 'Sunday',\n ],\n short: ['Mon.', 'Tue.', 'Wed.', 'Thu.', 'Fri.', 'Sat.', 'Sun.'],\n },\n};\n\nconst monthNames: MonthNames = {\n de: {\n long: [\n 'Januar',\n 'Februar',\n 'März',\n 'April',\n 'Mai',\n 'Juni',\n 'Juli',\n 'August',\n 'September',\n 'Oktober',\n 'November',\n 'Dezember',\n ],\n short: [\n 'Jan.',\n 'Febr.',\n 'März',\n 'Apr.',\n 'Mai',\n 'Juni',\n 'Juli',\n 'Aug.',\n 'Sept.',\n 'Okt.',\n 'Nov.',\n 'Dez',\n ],\n },\n en: {\n long: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n short: [\n 'Jan.',\n 'Feb.',\n 'Mar.',\n 'Apr.',\n 'May',\n 'June',\n 'July',\n 'Aug.',\n 'Sept.',\n 'Oct.',\n 'Nov.',\n 'Dec.',\n ],\n },\n};\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Copy from 'components/typography/Copy';\nimport Actions from 'components/blocks/Actions';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Tag from 'components/blocks/Tag';\nimport StatusFormatter from 'utils/statusFormatter';\nimport Link, { LinkProps } from 'components/typography/Link';\n\nconst View = styled.div`\n position: relative;\n text-decoration: none;\n padding-bottom: ${spacings.spacer}px;\n`;\n\nconst ImageLink = styled(Link)`\n width: 100%;\n`;\n\nconst StyledImage = styled(Image)`\n overflow: hidden;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n`;\n\nconst TitleLink = styled(Link)`\n text-decoration: none;\n`;\n\nconst Head = styled(Copy)`\n display: flex;\n\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n\n margin-top: ${spacings.spacer * 2}px;\n margin-bottom: ${spacings.spacer * 1.5}px;\n\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n`;\n\nconst Main = styled.div`\n max-width: 95%;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')}\n\n @media ${mq.medium} {\n width: 100%;\n\n & > * {\n max-width: 50%;\n min-width: 0 !important;\n flex: 1;\n }\n }\n`;\n\nexport interface NewsCardProps {\n isInverted?: boolean;\n tag?: string;\n onTagClick?: (name: string) => void;\n publishDate?: Date;\n title?: string;\n text?: string;\n image?: Omit<ImageProps, 'coverSpace'>;\n link?: LinkProps;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}\n\nconst NewsCard: React.FC<\n NewsCardProps & {\n className?: string;\n }\n> = ({\n tag,\n onTagClick,\n publishDate,\n title,\n text,\n image,\n link,\n isInverted,\n primaryAction,\n secondaryAction,\n className,\n}) => {\n const theme = useContext(ThemeContext);\n\n let publishedAt = '';\n if (publishDate) {\n const formatter = new StatusFormatter(\n publishDate.getTime(),\n '',\n global(theme).sections.newsDateFormat,\n global(theme).sections.newsTimeFormat,\n global(theme).sections.newsLocaleKey\n );\n publishedAt = formatter.getFormattedDate();\n }\n\n // settings max text length to 300 chars\n if (text && text.length > 300) {\n text = text.slice(0, 301) + '...';\n }\n\n return (\n <View className={className}>\n {image && (\n <ImageLink {...link}>\n <StyledImage coverSpace {...image} />\n </ImageLink>\n )}\n <Head isInverted={isInverted} data-sheet=\"head\">\n {tag && (\n <Tag\n isInverted={isInverted}\n onClick={onTagClick ? () => onTagClick(tag) : undefined}\n >\n {tag}\n </Tag>\n )}\n {publishedAt && <div>{publishedAt}</div>}\n </Head>\n <Main>\n {title && (\n <TitleLink {...link}>\n <Copy\n isInverted={isInverted}\n size=\"big\"\n type=\"copy-b\"\n data-sheet=\"title\"\n >\n {title}\n </Copy>\n </TitleLink>\n )}\n {text && (\n <Copy\n isInverted={isInverted}\n type=\"copy\"\n innerHTML={text}\n data-sheet=\"text\"\n />\n )}\n </Main>\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={secondaryAction && secondaryAction(isInverted)}\n />\n )}\n </View>\n );\n};\n\nexport default NewsCard;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport Copy from 'components/typography/Copy';\nimport NewsCard, { NewsCardProps } from 'components/blocks/NewsCard';\nimport { useContext, useEffect, useState } from 'react';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport Pointer from 'components/buttons/Pointer';\n\nconst ContentFlex = styled.div`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: 'flex-start';\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n`;\n\nconst Actions = styled.div`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n text-align: left;\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 2 ? 'block' : 'none'};\n`;\n\ntype NewsFooterMq = 'small' | 'semilarge';\n\nconst NewsFooter: React.FC<{\n news: NewsCardProps[];\n onTagClick?: (tag: string) => void;\n\n bgMode?: 'full' | 'inverted';\n showMoreText?: string;\n}> = ({ news, onTagClick, bgMode, showMoreText }) => {\n const newsCount = news?.length || 0;\n const theme = useContext(ThemeContext);\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({\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 bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace clampWidth=\"small\">\n <ContentFlex>\n {news &&\n news\n .filter((_, i) => i < visibleRows * itemsPerRow)\n .map((item, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <NewsCard\n isInverted={isInverted}\n onTagClick={onTagClick}\n {...item}\n />\n </div>\n );\n })}\n </ContentFlex>\n {news && news.length > 0 && (\n <Actions>\n <Copy isInverted={isInverted}>\n <ShowMore\n itemCount={news.length}\n onClick={(ev) => {\n ev.preventDefault();\n if (\n visibleRows <\n Math.ceil(newsCount / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows < newsCount / itemsPerRow && (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMoreText || 'mehr anzeigen'}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n </Copy>\n </Actions>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsFooter;\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n getColors as color,\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\n\nconst Content = styled.div`\n & > * + * {\n margin-top: ${spacings.spacer * 2}px;\n }\n`;\n\nconst ImageFlex = styled.div`\n margin: -${spacings.spacer}px;\n\n @media ${mq.medium} {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n\n & > * {\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n`;\n\nconst Img = styled.div<{ isSingleHalf?: boolean }>`\n padding: ${spacings.spacer}px;\n width: 100%;\n\n @media ${mq.semilarge} {\n width: ${({ isSingleHalf }) => isSingleHalf && '50%'};\n }\n`;\n\nconst StyledImage = styled(Image)`\n overflow: hidden;\n border-radius: ${({ theme }) => global(theme).sections.edgeRadius};\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n`;\n\nconst NewsImages: React.FC<{\n images?: Omit<ImageProps, 'coverSpace'>[];\n imageStyle?: 'full' | 'half';\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n bgMode?: 'full' | 'inverted';\n}> = ({\n images,\n imageStyle = 'full',\n primaryAction,\n secondaryAction,\n bgMode,\n}) => {\n const theme = useContext(ThemeContext);\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n <Content>\n {images && (imageStyle === 'half' || images.length >= 2) ? (\n <ImageFlex>\n {images.map((img, i) => {\n return (\n <Img\n key={i}\n isSingleHalf={images.length >= 1}\n >\n <StyledImage coverSpace {...img} />\n </Img>\n );\n })}\n </ImageFlex>\n ) : (\n images && (\n <div>\n {images.map((img, i) => {\n return (\n <StyledImage\n coverSpace\n {...img}\n key={i}\n />\n );\n })}\n </div>\n )\n )}\n </Content>\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 default NewsImages;\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } 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 from 'components/blocks/Tag';\nimport {\n getColors as color,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport StatusFormatter from 'utils/statusFormatter';\n\nconst Content = styled.div`\n & > * + * {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n }\n`;\n\nconst IntroHead = styled(Copy)`\n display: flex;\n\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n`;\n\nconst HeadTag = styled(Tag)`\n flex: 0 1 auto;\n margin-right: ${spacings.nudge * 2}px;\n`;\n\nconst MetaBlock = styled.div`\n flex: 1 1 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.spacer}px;\n }\n\n & > * + * {\n margin-left: ${spacings.spacer}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.nudge * 5}px;\n }\n`;\n\nconst NewsIntro: React.FC<{\n tags?: string[];\n onTagClick?: (name: string) => void;\n meta?: { date?: Date; author?: string };\n title?: string;\n text?: string;\n image?: ImageProps;\n\n bgMode?: 'full' | 'inverted';\n}> = ({ tags, onTagClick, meta, title, text, image, bgMode }) => {\n const theme = useContext(ThemeContext);\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 global(theme).sections.newsDateFormat,\n global(theme).sections.newsTimeFormat,\n global(theme).sections.newsLocaleKey\n );\n publishedAt = formatter.getFormattedDate();\n }\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n <Content>\n <IntroHead isInverted={isInverted}>\n {tags &&\n tags.map((tag, index) => {\n return (\n <HeadTag\n key={`headtag-${index}`}\n isInverted={isInverted}\n onClick={\n onTagClick\n ? () => onTagClick(tag)\n : undefined\n }\n >\n {tag}\n </HeadTag>\n );\n })}\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 <div>\n <Image coverSpace {...image} />\n </div>\n )}\n </Content>\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsIntro;\n","import * as React from 'react';\nimport styled, { ThemeContext } 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 { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport Copy from 'components/typography/Copy';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport { useContext, useEffect, useState } from 'react';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport Pointer from 'components/buttons/Pointer';\n\nconst News = styled.div`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: 'flex-start';\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n\n @media ${mq.large} {\n & > * {\n flex: 1 0 33.33%;\n max-width: 33.33%;\n }\n }\n`;\n\nconst ListFooter = styled.div`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\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\ntype NewsListMq = 'small' | 'semilarge' | 'large';\n\nconst NewsList: React.FC<{\n news?: NewsCardProps[];\n onTagClick?: (tag: string) => void;\n bgMode?: 'full' | 'inverted';\n showMoreText?: string;\n}> = ({\n news,\n onTagClick,\n bgMode,\n\n showMoreText,\n}) => {\n const theme = useContext(ThemeContext);\n const mqs: NewsListMq[] = ['small', 'semilarge', 'large'];\n const currentMq = useMediaQuery(mqs) as NewsListMq | undefined;\n const [itemsPerRow, setItemsPerRow] = useState(3);\n const [visibleRows, setVisibleRows] = useState(1);\n\n const newsCount = news?.length || 0;\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\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 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 return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace clampWidth=\"normal\">\n <News>\n {news &&\n news\n .filter((_, i) => i < visibleRows * itemsPerRow)\n .map((item, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <NewsCard\n onTagClick={onTagClick}\n isInverted={isInverted}\n {...item}\n />\n </div>\n );\n })}\n </News>\n <ListFooter>\n {news && news.length > 0 && (\n <Copy type=\"copy\" size=\"medium\" isInverted={isInverted}>\n <ShowMore\n itemCount={news.length}\n onClick={(ev) => {\n ev.preventDefault();\n if (\n visibleRows <\n Math.ceil(newsCount / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows < newsCount / itemsPerRow && (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMoreText || 'mehr anzeigen'}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n </Copy>\n )}\n </ListFooter>\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsList;\n","import Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\nimport Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { hexToRgba } from 'utils/hexRgbConverter';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\n\nconst TableContainer = styled.div`\n overflow-x: scroll;\n overflow-y: hidden;\n white-space: nowrap;\n`;\n\nconst TableBody = styled.table`\n width: 100%;\n max-width: 100%;\n margin-top: ${spacings.nudge * 2}px;\n\n border-collapse: separate;\n border-spacing: 0 ${spacings.nudge}px;\n\n @media ${mq.medium} {\n padding: 0;\n }\n`;\n\nconst TableHead = styled.th<{ hasBack?: boolean; isInverted?: boolean }>`\n text-align: left;\n color: ${({ theme }) => color(theme).dark};\n background-color: ${({ theme, hasBack, isInverted }) =>\n hasBack && !isInverted ? color(theme).light : color(theme).mono.light};\n\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 2}px\n ${spacings.nudge * 3.5}px ${spacings.spacer * 2}px;\n min-width: 60px;\n box-sizing: content-box;\n\n :last-child {\n padding-right: ${spacings.spacer * 2.5}px;\n }\n`;\n\nconst TableData = styled.td<{ isInverted?: boolean; hasBack?: boolean }>`\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 2}px\n ${spacings.nudge * 3.5}px ${spacings.spacer * 2}px;\n min-width: 60px;\n box-sizing: content-box;\n\n background-color: ${({ isInverted, hasBack, theme }) =>\n hexToRgba(\n hasBack && !isInverted\n ? color(theme).light\n : color(theme).mono.light,\n isInverted ? 0.2 : 0.4\n )};\n\n :last-child {\n padding-right: ${spacings.spacer * 2.5}px;\n }\n`;\n\nexport interface TableProps {\n tableTitle?: string;\n rowTitle?: string[];\n row: {\n cols: string[];\n }[];\n isInverted?: boolean;\n hasBack?: boolean;\n}\n\nconst TableBlock: React.FC<TableProps> = ({\n row,\n tableTitle,\n rowTitle,\n isInverted = false,\n hasBack = false,\n}) => {\n return (\n <div>\n {tableTitle && (\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {tableTitle}\n </Copy>\n )}\n <TableContainer>\n <TableBody>\n {rowTitle && (\n <thead>\n <tr>\n {rowTitle.map((item, ii) => {\n return (\n <TableHead\n hasBack={hasBack}\n isInverted={isInverted}\n key={ii}\n >\n <Copy type=\"copy-b\">{item}</Copy>\n </TableHead>\n );\n })}\n </tr>\n </thead>\n )}\n <tbody>\n {row.map(({ cols }, i) => (\n <tr key={i}>\n {cols.map((itemText, ii) => {\n return (\n <TableData\n key={ii}\n isInverted={isInverted}\n hasBack={hasBack}\n >\n <Copy isInverted={isInverted}>\n {itemText}\n </Copy>\n </TableData>\n );\n })}\n </tr>\n ))}\n </tbody>\n </TableBody>\n </TableContainer>\n </div>\n );\n};\n\nconst TableWrapper = styled.div<{ withSeperation?: boolean }>`\n ${({ withSeperation }) =>\n withSeperation &&\n withRange([spacings.spacer, spacings.spacer * 4], 'padding-top')};\n\n & + & {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n`;\n\nconst NewsTable: React.FC<{\n tableItems: TableProps[];\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n bgMode?: 'full' | 'inverted';\n}> = ({ bgMode, tableItems, primaryAction, secondaryAction }) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace clampWidth=\"small\">\n {tableItems.map((item, i) => {\n return (\n <TableWrapper key={i}>\n <TableBlock\n {...item}\n hasBack={hasBg}\n isInverted={isInverted}\n />\n </TableWrapper>\n );\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 default NewsTable;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Actions from 'components/blocks/Actions';\nimport Copy from 'components/typography/Copy';\nimport Wrapper from 'components/base/Wrapper';\nimport { getColors as color, spacings, withRange } from 'utils/styles';\nimport { useContext } from 'react';\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 StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n`;\n\nconst NewsText: React.FC<{\n text: string;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n bgMode?: 'full' | 'inverted';\n}> = ({ text, primaryAction, secondaryAction, bgMode }) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\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 {(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 default NewsText;\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { ImageProps } from 'components/blocks/Image';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { getColors as color, spacings, withRange } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport VideoCard from 'components/blocks/VideoCard';\nimport Actions from 'components/blocks/Actions';\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n`;\n\nconst NewsVideo: React.FC<{\n bgImage?: ImageProps;\n embedId?: string;\n playIcon?: React.ReactChild;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n bgMode?: 'full' | 'inverted';\n}> = ({\n bgImage,\n embedId,\n playIcon,\n primaryAction,\n secondaryAction,\n bgMode,\n}) => {\n const theme = useContext(ThemeContext);\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace clampWidth=\"small\">\n <div>\n {embedId && bgImage && (\n <VideoCard\n bgImage={bgImage}\n embedId={embedId}\n playIcon={playIcon}\n />\n )}\n </div>\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 default NewsVideo;\n","import { useEffect, useState } from 'react';\n\nexport const useObserverSupport = (inital?: boolean) => {\n const [observerSupported, setObserverSupport] = useState(inital || false);\n\n useEffect(() => {\n if (\n !('IntersectionObserver' in window) ||\n !('IntersectionObserverEntry' in window) ||\n !('intersectionRatio' in window.IntersectionObserverEntry.prototype)\n ) {\n setObserverSupport(false);\n } else {\n setObserverSupport(true);\n }\n }, []);\n\n return observerSupported;\n};\n","import React, { useContext, useEffect, useRef, useState } from 'react';\nimport styled, { ThemeContext } 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 { getColors, mq, spacings, withRange } from 'utils/styles';\nimport Tag 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';\n\nconst TagContainer = styled.div`\n margin: -${spacings.nudge}px;\n ${withRange([spacings.spacer * 1.5, spacings.spacer * 3], 'margin-bottom')};\n\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n`;\n\nconst TagWrapper = styled.div`\n padding: ${spacings.nudge}px;\n`;\n\nconst List = styled.div`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: 'flex-start';\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n\n @media ${mq.large} {\n & > * {\n flex: 1 0 33.33%;\n max-width: 33.33%;\n }\n }\n`;\n\nconst ListFooter = styled.div`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\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\ntype NewsOverviewMq = 'small' | 'semilarge' | 'large';\n\nconst NewsOverview: React.FC<{\n news: NewsCardProps[];\n activeTag?: string;\n tags?: string[];\n queryParams?: Record<string, any>;\n onTagClick?: (tag: string, insideList?: boolean) => void;\n showMoreText?: string;\n\n bgMode?: 'full' | 'inverted';\n}> = ({\n news,\n activeTag,\n tags,\n queryParams,\n onTagClick,\n showMoreText,\n\n bgMode,\n}) => {\n const theme = useContext(ThemeContext);\n\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n activeTag = queryParams?.selected\n ? decodeURI(queryParams.selected)\n : activeTag;\n const [selectedTag, setSelectedTag] = useState<string | undefined>(\n activeTag || undefined\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(3);\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 } = useEqualSheetHeight({\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 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 useEffect(() => {\n setSelectedTag(activeTag);\n }, [activeTag]);\n\n useEffect(() => {\n // if new tag is selected reset list rows to three visible item rows\n setVisibleRows(3);\n triggerCalculation();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedTag]);\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 (visibleRows < Math.ceil(newsCount / itemsPerRow)) {\n setVisibleRows((prev) => prev + 1);\n }\n }\n }, options);\n observer.observe(element);\n }\n\n return () => {\n if (observer) observer.disconnect();\n };\n }, [itemsPerRow, newsCount, visibleRows, observerSupported]);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? getColors(theme).dark\n : hasBg\n ? getColors(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {tags && (\n <TagContainer>\n {tags.sort().map((tag, i) => {\n return (\n <TagWrapper key={'tag_' + i}>\n <Tag\n isInverted={isInverted}\n onClick={() => {\n if (!onTagClick) {\n // if no callback is defined handle filtering on client side inside the component\n setSelectedTag(\n selectedTag === tag\n ? undefined\n : tag\n );\n } else onTagClick(tag, false);\n }}\n isActive={selectedTag === tag}\n >\n {tag}\n </Tag>\n </TagWrapper>\n );\n })}\n </TagContainer>\n )}\n <List>\n {news &&\n news\n .filter((item) =>\n selectedTag ? item.tag === selectedTag : true\n )\n .filter((_, i) => i < visibleRows * itemsPerRow)\n .map((item, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <NewsCard\n isInverted={isInverted}\n onTagClick={(name) => {\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 setSelectedTag(\n selectedTag === name\n ? undefined\n : name\n );\n } else {\n onTagClick(name, true);\n }\n }}\n {...item}\n />\n </div>\n );\n })}\n </List>\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(newsCount / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows < newsCount / 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 default NewsOverview;\n","import Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { css } from 'styled-components';\nimport { spacings, getColors as color } from 'utils/styles';\n\nconst View = styled.a<{\n isDisabled?: boolean;\n isActive?: boolean;\n isInverted?: boolean;\n}>`\n display: block;\n text-decoration: none;\n color: ${({ isInverted, theme }) =>\n isInverted ? color(theme).light : 'inherit'};\n max-width: min-content;\n\n text-align: center;\n\n /* padding: ${spacings.nudge * 5}px ${spacings.nudge * 3}px; */\n\n pointer-events: ${({ isDisabled }) => (isDisabled ? 'none' : 'all')};\n\n ${({ isActive, isDisabled, theme }) =>\n !isDisabled &&\n isActive &&\n css`\n color: ${color(theme).primary.light};\n\n & > * {\n font-weight: 700;\n }\n `}\n\n &:hover {\n color: ${({ theme }) => color(theme).primary.light};\n }\n\n &:focus {\n & > * {\n font-weight: 700;\n }\n }\n\n &:active {\n & > * {\n font-weight: 700;\n }\n }\n\n & > * {\n opacity: ${({ isDisabled }) => (isDisabled ? '0.3' : '1')};\n }\n`;\n\nconst QuicknavButton: React.FC<{\n link?: string;\n label?: string;\n isDisabled?: boolean;\n isActive?: boolean;\n isInverted?: boolean;\n}> = ({ link, label, isDisabled, isActive, isInverted }) => {\n return (\n <View\n href={link}\n isActive={isActive}\n isDisabled={isDisabled}\n isInverted={isInverted}\n >\n <Copy textColor=\"inherit\" type=\"copy\">\n {label}\n </Copy>\n </View>\n );\n};\n\nexport default QuicknavButton;\n","import { spacings, getColors as color, mq } from 'utils/styles';\nimport QuicknavButton from 'components/buttons/QuicknavButton';\nimport * as React from 'react';\nimport styled from 'styled-components';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\n\nconst StyledSection = styled(Section)`\n padding-top: 55px;\n`;\n\nconst NavList = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n position: relative;\n\n margin-left: -${spacings.spacer}px;\n padding-right: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n margin-left: -${spacings.nudge * 3}px;\n }\n\n overflow-x: scroll;\n overflow-y: hidden;\n white-space: nowrap;\n\n ::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst NavItem = styled.li`\n display: inline-block;\n position: relative;\n\n cursor: pointer;\n`;\n\nconst NavItemContainer = styled.div`\n display: inline-block;\n padding: ${spacings.nudge * 3}px;\n`;\n\nconst Test = styled.div`\n width: 100%;\n height: 1px;\n\n background: rgba(0, 0, 0, 0.1);\n`;\n\nconst Slider = styled.div<{ isActive?: boolean }>`\n /* display: ${({ isActive }) => (isActive ? 'block' : 'block')}; */\n height: 4px;\n position: absolute;\n bottom: 0;\n background-color: ${({ theme }) => color(theme).primary.light};\n`;\n\nconst Quicknav: React.FC<{\n navItems: { label: string; link?: string }[];\n activeNavItem?: string;\n onNavClick?: (index: number, label: string) => void;\n className?: string;\n}> = ({ navItems, activeNavItem, onNavClick, className }) => {\n const [isActiveItem, setIsActiveItem] = React.useState<number>(\n activeNavItem\n ? navItems?.findIndex(\n (item) =>\n item.label === activeNavItem ||\n item.link?.indexOf(activeNavItem) !== -1\n )\n : -1\n );\n\n const [pos, setPos] = React.useState(0);\n const [width, setWidth] = React.useState(0);\n const parentRef = React.useRef(null);\n\n const itemRef = React.useRef<any>();\n\n React.useEffect(() => {\n setIsActiveItem(\n navItems.findIndex(\n (item) =>\n item.label === activeNavItem ||\n (activeNavItem && item.link?.indexOf(activeNavItem) !== -1)\n )\n );\n }, [activeNavItem, navItems]);\n\n React.useEffect(() => {\n const element = document.querySelector(\n `[data-index=tabnav-${isActiveItem}]`\n );\n\n const parent = parentRef.current;\n\n if (element && parent) {\n const Box = element.getBoundingClientRect();\n const ParentBox = (parent as Element).getBoundingClientRect();\n\n setWidth(Box.width - spacings.spacer * 1.5);\n setPos(\n Box.left -\n ParentBox.left +\n (parent as HTMLElement).scrollLeft +\n spacings.nudge * 3\n );\n }\n }, [isActiveItem]);\n\n React.useEffect(() => {\n if (itemRef && itemRef.current && isActiveItem) {\n itemRef.current.scrollIntoView();\n }\n }, [isActiveItem]);\n\n return (\n <StyledSection addSeperation className={className}>\n <Wrapper addWhitespace>\n <NavList ref={parentRef}>\n {navItems.map((item, i) => {\n return (\n <NavItem\n ref={itemRef}\n data-index={`tabnav-${i}`}\n key={i}\n onClick={() => {\n if (!onNavClick) {\n setIsActiveItem(i);\n } else {\n onNavClick(i, item.label);\n }\n }}\n >\n <NavItemContainer>\n <QuicknavButton\n label={item.label}\n link={item.link}\n isActive={isActiveItem === i}\n />\n </NavItemContainer>\n </NavItem>\n );\n })}\n <div\n style={{\n paddingTop: '35px',\n }}\n >\n <Slider\n style={{\n transform: `translateX(${pos}px)`,\n transition: `.2s ease-in-out`,\n width: `${width}px`,\n }}\n />\n </div>\n </NavList>\n </Wrapper>\n <Test />\n </StyledSection>\n );\n};\n\nexport default Quicknav;\n","import Section 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';\n\nconst TimelineBlock = styled.div<{ isSwitched?: boolean; isActive?: boolean }>`\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 ${({ theme }) => color(theme).dark};\n border-radius: 50%;\n\n background: ${({ theme, isActive }) =>\n isActive ? color(theme).dark : color(theme).light};\n\n position: absolute;\n top: 0;\n left: 0px;\n\n transition: all 0.2s ease-in-out;\n\n @media ${mq.large} {\n top: 0;\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 }) => color(theme).dark};\n left: 5px;\n\n @media ${mq.large} {\n left: 50%;\n transform: translateX(-50%);\n }\n }\n`;\n\nconst TimelineText = styled.div<{ isSwitched?: boolean }>`\n position: relative;\n padding: ${spacings.spacer}px;\n padding-bottom: ${spacings.spacer * 2}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 * 2}px 0 ${spacings.spacer * 2}px ${\n spacings.spacer * 1.5\n }px`\n : `${spacings.spacer * 2}px ${spacings.spacer * 1.5}px ${\n spacings.spacer * 2\n }px 0`};\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Timeline: React.FC<{\n items?: { label?: string; title?: string; text?: string }[];\n}> = ({ items }) => {\n const theme = useContext(ThemeContext);\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: '-30% 0% -70% 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 addSeperation>\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 key={i}\n >\n <TimelineText isSwitched={i % 2 === 0}>\n <div>\n <Heading\n size=\"heading-1\"\n textColor={\n color(theme).secondary.dark\n }\n >\n {item.label}\n </Heading>\n </div>\n <div>\n <Heading size=\"heading-3\">\n {item.title}\n </Heading>\n </div>\n <Copy innerHTML={item.text} />\n </TimelineText>\n </TimelineBlock>\n );\n })}\n </Wrapper>\n </Section>\n );\n};\n\nexport default Timeline;\n","import { getColors as color, spacings, withRange } from 'utils/styles';\nimport React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport Wrapper from 'components/base/Wrapper';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Link from 'components/typography/Link';\n\nconst Socials = styled.div<{ isInverted?: boolean }>`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n\n margin: -${spacings.nudge}px;\n\n color: ${({ isInverted, theme }) =>\n isInverted ? color(theme).light : color(theme).dark};\n`;\n\nconst StyledWrapper = styled(Wrapper)`\n padding-left: ${spacings.spacer * 2}px;\n padding-right: ${spacings.spacer * 2}px;\n`;\n\nconst Social = styled(Link)`\n color: inherit;\n padding: ${spacings.nudge}px;\n\n transition: color 0.2s ease-in-out;\n\n &:hover {\n color: ${({ theme }) => color(theme).mono.dark};\n }\n\n & > * {\n ${withRange([29, 64], 'height')}\n ${withRange([29, 64], 'width')}\n }\n`;\n\nconst SocialNav: FC<{\n socials: Array<{\n href: string;\n icon: React.ReactNode;\n }>;\n bgMode?: 'full' | 'inverted';\n}> = ({ socials, bgMode }) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n addSeperation\n >\n <StyledWrapper addWhitespace>\n <Socials isInverted={isInverted}>\n {socials?.map((social, i) => (\n <Social key={i} href={social?.href} isExternal>\n {social?.icon}\n </Social>\n ))}\n </Socials>\n </StyledWrapper>\n </Section>\n );\n};\n\nexport default SocialNav;\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';\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 ? color(theme).light : color(theme).primary.dark};\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 as=\"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).light\n : color(theme).secondary.dark\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\nexport interface NumberListProps {\n items?: {\n icon?: { src: string; alt?: string };\n number?: string;\n label?: string;\n }[];\n bgMode?: 'full' | 'inverted';\n}\n\nconst NumberList: React.FC<NumberListProps> = ({ 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 bgColor={\n isInverted\n ? color(theme).dark\n : hasBg\n ? color(theme).mono.light\n : 'transparent'\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 default NumberList;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.a<{ inverted?: boolean; disable?: boolean }>`\n min-height: 3em;\n height: 3.65em;\n min-width: 210px;\n padding: 0.1em 1.2em;\n\n display: inline-block;\n display: inline-flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: ${({ theme }) => font(theme).copy.medium.weight};\n text-align: center;\n text-decoration: none;\n line-height: 1;\n letter-spacing: ${({ theme }) => font(theme).copy.medium.letterSpacing};\n\n perspective: 1000;\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-perspective: 1000;\n -moz-osx-font-smoothing: grayscale;\n will-change: auto;\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n\n pointer-events: ${({ disable }) => (disable ? 'none' : 'all')};\n\n // will-change: transform;\n\n background-color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).light\n : inverted\n ? color(theme).dark\n : color(theme).light};\n text-align: left;\n\n transition: all ease-in-out 0.2s;\n\n & > * {\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).light\n : inverted\n ? color(theme).dark\n : color(theme).light};\n }\n\n & > :not(:last-child) {\n padding-right: ${spacings.nudge}px;\n }\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n box-shadow: 0px 8px 16px\n ${({ inverted }) =>\n inverted\n ? 'rgba(255, 255, 255, 0.25)'\n : 'rgba(0, 0, 0, 0.25)'};\n }\n\n &:focus {\n box-shadow: 0px 2px 6px\n ${({ inverted }) =>\n inverted\n ? 'rgba(255, 255, 255, 0.25)'\n : 'rgba(0, 0, 0, 0.3)'};\n }\n\n &:active {\n box-shadow: 0px 2px 6px\n ${({ inverted }) =>\n inverted\n ? 'rgba(255, 255, 255, 0.25)'\n : 'rgba(0, 0, 0, 0.3)'};\n }\n }\n`;\n\ninterface Props {\n isInverted?: boolean;\n isDisabled?: boolean;\n className?: string;\n}\n\nexport type BtnProps = Props & {\n as?: 'button';\n onClick?: (ev: React.SyntheticEvent<HTMLButtonElement>) => void;\n};\n\nexport type LinkProps = Props & {\n as?: 'a';\n href?: string;\n onClick?: (ev: React.SyntheticEvent<HTMLAnchorElement>) => void;\n isExternal?: boolean;\n};\n\nconst Button: React.FC<BtnProps | LinkProps> = React.forwardRef(\n (\n { as, isInverted, isDisabled, onClick, className, children, ...rest },\n ref\n ) => {\n if (as === 'button') {\n return (\n <View\n ref={ref}\n as={as as any}\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n } else {\n return (\n <View\n ref={ref}\n as={as as any}\n href={(rest as LinkProps).href}\n target={\n (rest as LinkProps).isExternal ? '_blank' : undefined\n }\n rel={\n (rest as LinkProps).isExternal\n ? 'noopener noreferrer'\n : undefined\n }\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n }\n }\n);\n\nButton.displayName = 'Button';\n\nconst Icon = styled.div<{ iconColor?: string }>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n width: 35px;\n height: 35px;\n\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).primary.medium};\n\n transition: transform 0.2s ease-in-out;\n\n ${View}:hover > & {\n transform: translateX(3px);\n }\n`;\n\nconst Label = styled.span`\n display: inline-block;\n`;\n\nexport default { View: Button, Label: Label, Icon: Icon };\n","export default function toInteger(dirtyNumber) {\n if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n return NaN;\n }\n\n var number = Number(dirtyNumber);\n\n if (isNaN(number)) {\n return number;\n }\n\n return number < 0 ? Math.ceil(number) : Math.floor(number);\n}","export default function requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\n\nexport default function toDate(argument) {\n requiredArgs(1, arguments);\n var argStr = Object.prototype.toString.call(argument); // Clone the date\n\n if (argument instanceof Date || typeof argument === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule\"); // eslint-disable-next-line no-console\n\n console.warn(new Error().stack);\n }\n\n return new Date(NaN);\n }\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\n\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var timestamp = toDate(dirtyDate).getTime();\n var amount = toInteger(dirtyAmount);\n return new Date(timestamp + amount);\n}","/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds(date) {\n var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n utcDate.setUTCFullYear(date.getFullYear());\n return date.getTime() - utcDate.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now `isValid` doesn't throw an exception\n * if the first argument is not an instance of Date.\n * Instead, argument is converted beforehand using `toDate`.\n *\n * Examples:\n *\n * | `isValid` argument | Before v2.0.0 | v2.0.0 onward |\n * |---------------------------|---------------|---------------|\n * | `new Date()` | `true` | `true` |\n * | `new Date('2016-01-01')` | `true` | `true` |\n * | `new Date('')` | `false` | `false` |\n * | `new Date(1488370835081)` | `true` | `true` |\n * | `new Date(NaN)` | `false` | `false` |\n * | `'2016-01-01'` | `TypeError` | `false` |\n * | `''` | `TypeError` | `false` |\n * | `1488370835081` | `TypeError` | `true` |\n * | `NaN` | `TypeError` | `false` |\n *\n * We introduce this change to make *date-fns* consistent with ECMAScript behavior\n * that try to coerce arguments to the expected type\n * (which is also the case with other *date-fns* functions).\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * var result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * var result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * var result = isValid(new Date(''))\n * //=> false\n */\n\nexport default function isValid(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n return !isNaN(date);\n}","var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n halfAMinute: 'half a minute',\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n aboutXWeeks: {\n one: 'about 1 week',\n other: 'about {{count}} weeks'\n },\n xWeeks: {\n one: '1 week',\n other: '{{count}} weeks'\n },\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n};\nexport default function formatDistance(token, count, options) {\n options = options || {};\n var result;\n\n if (typeof formatDistanceLocale[token] === 'string') {\n result = formatDistanceLocale[token];\n } else if (count === 1) {\n result = formatDistanceLocale[token].one;\n } else {\n result = formatDistanceLocale[token].other.replace('{{count}}', count);\n }\n\n if (options.addSuffix) {\n if (options.comparison > 0) {\n return 'in ' + result;\n } else {\n return result + ' ago';\n }\n }\n\n return result;\n}","export default function buildFormatLongFn(args) {\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // TODO: Remove String()\n var width = options.width ? String(options.width) : args.defaultWidth;\n var format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, MMMM do, y',\n long: 'MMMM do, y',\n medium: 'MMM d, y',\n short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n full: 'h:mm:ss a zzzz',\n long: 'h:mm:ss a z',\n medium: 'h:mm:ss a',\n short: 'h:mm a'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nexport default formatLong;","var formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: 'P'\n};\nexport default function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n}","export default function buildLocalizeFn(args) {\n return function (dirtyIndex, dirtyOptions) {\n var options = dirtyOptions || {};\n var context = options.context ? String(options.context) : 'standalone';\n var valuesArray;\n\n if (context === 'formatting' && args.formattingValues) {\n var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n var width = options.width ? String(options.width) : defaultWidth;\n valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n var _defaultWidth = args.defaultWidth;\n\n var _width = options.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[_width] || args.values[_defaultWidth];\n }\n\n var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challange you to try to remove it!\n\n return valuesArray[index];\n };\n}","export default function buildMatchPatternFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n var matchedString = matchResult[0];\n var parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}","export default function buildMatchFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = options.width;\n var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n var matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n\n var matchedString = matchResult[0];\n var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n }) : findKey(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n });\n var value;\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}\n\nfunction findKey(object, predicate) {\n for (var key in object) {\n if (object.hasOwnProperty(key) && predicate(object[key])) {\n return key;\n }\n }\n\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (var key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n\n return undefined;\n}","import buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function (value) {\n return parseInt(value, 10);\n }\n }),\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function (index) {\n return index + 1;\n }\n }),\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n};\nexport default match;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\n\nvar locale = {\n code: 'en-US',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0\n /* Sunday */\n ,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['B', 'A'],\n abbreviated: ['BC', 'AD'],\n wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n}; // Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\n\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n }\n};\n\nfunction ordinalNumber(dirtyNumber, _dirtyOptions) {\n var number = Number(dirtyNumber); // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`:\n //\n // var options = dirtyOptions || {}\n // var unit = String(options.unit)\n //\n // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'\n\n var rem100 = number % 100;\n\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st';\n\n case 2:\n return number + 'nd';\n\n case 3:\n return number + 'rd';\n }\n }\n\n return number + 'th';\n}\n\nvar localize = {\n ordinalNumber: ordinalNumber,\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function (quarter) {\n return Number(quarter) - 1;\n }\n }),\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n};\nexport default localize;","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\n\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMilliseconds(dirtyDate, -amount);\n}","export default function addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : '';\n var output = Math.abs(number).toString();\n\n while (output.length < targetLength) {\n output = '0' + output;\n }\n\n return sign + output;\n}","import addLeadingZeros from \"../../addLeadingZeros/index.js\";\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nvar formatters = {\n // Year\n y: function (date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);\n },\n // Month\n M: function (date, token) {\n var month = date.getUTCMonth();\n return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n // Day of the month\n d: function (date, token) {\n return addLeadingZeros(date.getUTCDate(), token.length);\n },\n // AM or PM\n a: function (date, token) {\n var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return dayPeriodEnumValue.toUpperCase();\n\n case 'aaa':\n return dayPeriodEnumValue;\n\n case 'aaaaa':\n return dayPeriodEnumValue[0];\n\n case 'aaaa':\n default:\n return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';\n }\n },\n // Hour [1-12]\n h: function (date, token) {\n return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);\n },\n // Hour [0-23]\n H: function (date, token) {\n return addLeadingZeros(date.getUTCHours(), token.length);\n },\n // Minute\n m: function (date, token) {\n return addLeadingZeros(date.getUTCMinutes(), token.length);\n },\n // Second\n s: function (date, token) {\n return addLeadingZeros(date.getUTCSeconds(), token.length);\n },\n // Fraction of second\n S: function (date, token) {\n var numberOfDigits = token.length;\n var milliseconds = date.getUTCMilliseconds();\n var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));\n return addLeadingZeros(fractionalSeconds, token.length);\n }\n};\nexport default formatters;","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var fourthOfJanuaryOfNextYear = new Date(0);\n fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear);\n var fourthOfJanuaryOfThisYear = new Date(0);\n fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","import getUTCISOWeekYear from \"../getUTCISOWeekYear/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var year = getUTCISOWeekYear(dirtyDate);\n var fourthOfJanuary = new Date(0);\n fourthOfJanuary.setUTCFullYear(year, 0, 4);\n fourthOfJanuary.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCISOWeek(fourthOfJanuary);\n return date;\n}","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeek(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeekYear(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate, dirtyOptions);\n var year = date.getUTCFullYear();\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var firstWeekOfNextYear = new Date(0);\n firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, dirtyOptions);\n var firstWeekOfThisYear = new Date(0);\n firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, dirtyOptions);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","import toInteger from \"../toInteger/index.js\";\nimport getUTCWeekYear from \"../getUTCWeekYear/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeekYear(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate);\n var year = getUTCWeekYear(dirtyDate, dirtyOptions);\n var firstWeek = new Date(0);\n firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCWeek(firstWeek, dirtyOptions);\n return date;\n}","import lightFormatters from \"../lightFormatters/index.js\";\nimport getUTCDayOfYear from \"../../../_lib/getUTCDayOfYear/index.js\";\nimport getUTCISOWeek from \"../../../_lib/getUTCISOWeek/index.js\";\nimport getUTCISOWeekYear from \"../../../_lib/getUTCISOWeekYear/index.js\";\nimport getUTCWeek from \"../../../_lib/getUTCWeek/index.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport addLeadingZeros from \"../../addLeadingZeros/index.js\";\nvar dayPeriodEnum = {\n am: 'am',\n pm: 'pm',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n};\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n // Era\n G: function (date, token, localize) {\n var era = date.getUTCFullYear() > 0 ? 1 : 0;\n\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return localize.era(era, {\n width: 'abbreviated'\n });\n // A, B\n\n case 'GGGGG':\n return localize.era(era, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return localize.era(era, {\n width: 'wide'\n });\n }\n },\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === 'yo') {\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, {\n unit: 'year'\n });\n }\n\n return lightFormatters.y(date, token);\n },\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n var signedWeekYear = getUTCWeekYear(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; // Two digit year\n\n if (token === 'YY') {\n var twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n } // Ordinal number\n\n\n if (token === 'Yo') {\n return localize.ordinalNumber(weekYear, {\n unit: 'year'\n });\n } // Padding\n\n\n return addLeadingZeros(weekYear, token.length);\n },\n // ISO week-numbering year\n R: function (date, token) {\n var isoWeekYear = getUTCISOWeekYear(date); // Padding\n\n return addLeadingZeros(isoWeekYear, token.length);\n },\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n var year = date.getUTCFullYear();\n return addLeadingZeros(year, token.length);\n },\n // Quarter\n Q: function (date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'QQ':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone quarter\n q: function (date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'qq':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Month\n M: function (date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n case 'M':\n case 'MM':\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return localize.month(month, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone month\n L: function (date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return String(month + 1);\n // 01, 02, ..., 12\n\n case 'LL':\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return localize.month(month, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Local week of year\n w: function (date, token, localize, options) {\n var week = getUTCWeek(date, options);\n\n if (token === 'wo') {\n return localize.ordinalNumber(week, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(week, token.length);\n },\n // ISO week of year\n I: function (date, token, localize) {\n var isoWeek = getUTCISOWeek(date);\n\n if (token === 'Io') {\n return localize.ordinalNumber(isoWeek, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n // Day of the month\n d: function (date, token, localize) {\n if (token === 'do') {\n return localize.ordinalNumber(date.getUTCDate(), {\n unit: 'date'\n });\n }\n\n return lightFormatters.d(date, token);\n },\n // Day of year\n D: function (date, token, localize) {\n var dayOfYear = getUTCDayOfYear(date);\n\n if (token === 'Do') {\n return localize.ordinalNumber(dayOfYear, {\n unit: 'dayOfYear'\n });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n // Day of week\n E: function (date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Local day of week\n e: function (date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case 'e':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'ee':\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n\n case 'eo':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'eee':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (same as in `e`)\n case 'c':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'cc':\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n\n case 'co':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'ccc':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // ISO day of week\n i: function (date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n\n switch (token) {\n // 2\n case 'i':\n return String(isoDayOfWeek);\n // 02\n\n case 'ii':\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n\n case 'io':\n return localize.ordinalNumber(isoDayOfWeek, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'iiiii':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'iiiiii':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'iiii':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM or PM\n a: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'aaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'aaaaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n }\n\n switch (token) {\n case 'b':\n case 'bb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'bbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'bbbbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === 'ho') {\n var hours = date.getUTCHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return lightFormatters.h(date, token);\n },\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === 'Ho') {\n return localize.ordinalNumber(date.getUTCHours(), {\n unit: 'hour'\n });\n }\n\n return lightFormatters.H(date, token);\n },\n // Hour [0-11]\n K: function (date, token, localize) {\n var hours = date.getUTCHours() % 12;\n\n if (token === 'Ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Hour [1-24]\n k: function (date, token, localize) {\n var hours = date.getUTCHours();\n if (hours === 0) hours = 24;\n\n if (token === 'ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Minute\n m: function (date, token, localize) {\n if (token === 'mo') {\n return localize.ordinalNumber(date.getUTCMinutes(), {\n unit: 'minute'\n });\n }\n\n return lightFormatters.m(date, token);\n },\n // Second\n s: function (date, token, localize) {\n if (token === 'so') {\n return localize.ordinalNumber(date.getUTCSeconds(), {\n unit: 'second'\n });\n }\n\n return lightFormatters.s(date, token);\n },\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return 'Z';\n }\n\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n\n case 'XXXX':\n case 'XX':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n\n case 'xxxx':\n case 'xx':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (GMT)\n O: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (specific non-location)\n z: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'zzzz':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Seconds timestamp\n t: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = Math.floor(originalDate.getTime() / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n // Milliseconds timestamp\n T: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = originalDate.getTime();\n return addLeadingZeros(timestamp, token.length);\n }\n};\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = Math.floor(absOffset / 60);\n var minutes = absOffset % 60;\n\n if (minutes === 0) {\n return sign + String(hours);\n }\n\n var delimiter = dirtyDelimiter || '';\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+';\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n\n return formatTimezone(offset, dirtyDelimiter);\n}\n\nfunction formatTimezone(offset, dirtyDelimiter) {\n var delimiter = dirtyDelimiter || '';\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);\n var minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n\nexport default formatters;","import toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport startOfUTCWeekYear from \"../startOfUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeek(dirtyDate, options) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport startOfUTCISOWeekYear from \"../startOfUTCISOWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCDayOfYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var timestamp = date.getTime();\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n var startOfYearTimestamp = date.getTime();\n var difference = timestamp - startOfYearTimestamp;\n return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;\n}","function dateLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'P':\n return formatLong.date({\n width: 'short'\n });\n\n case 'PP':\n return formatLong.date({\n width: 'medium'\n });\n\n case 'PPP':\n return formatLong.date({\n width: 'long'\n });\n\n case 'PPPP':\n default:\n return formatLong.date({\n width: 'full'\n });\n }\n}\n\nfunction timeLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'p':\n return formatLong.time({\n width: 'short'\n });\n\n case 'pp':\n return formatLong.time({\n width: 'medium'\n });\n\n case 'ppp':\n return formatLong.time({\n width: 'long'\n });\n\n case 'pppp':\n default:\n return formatLong.time({\n width: 'full'\n });\n }\n}\n\nfunction dateTimeLongFormatter(pattern, formatLong) {\n var matchResult = pattern.match(/(P+)(p+)?/);\n var datePattern = matchResult[1];\n var timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n var dateTimeFormat;\n\n switch (datePattern) {\n case 'P':\n dateTimeFormat = formatLong.dateTime({\n width: 'short'\n });\n break;\n\n case 'PP':\n dateTimeFormat = formatLong.dateTime({\n width: 'medium'\n });\n break;\n\n case 'PPP':\n dateTimeFormat = formatLong.dateTime({\n width: 'long'\n });\n break;\n\n case 'PPPP':\n default:\n dateTimeFormat = formatLong.dateTime({\n width: 'full'\n });\n break;\n }\n\n return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n}\n\nvar longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter\n};\nexport default longFormatters;","var protectedDayOfYearTokens = ['D', 'DD'];\nvar protectedWeekYearTokens = ['YY', 'YYYY'];\nexport function isProtectedDayOfYearToken(token) {\n return protectedDayOfYearTokens.indexOf(token) !== -1;\n}\nexport function isProtectedWeekYearToken(token) {\n return protectedWeekYearTokens.indexOf(token) !== -1;\n}\nexport function throwProtectedError(token, format, input) {\n if (token === 'YYYY') {\n throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'YY') {\n throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'D') {\n throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'DD') {\n throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n }\n}","import isValid from \"../isValid/index.js\";\nimport defaultLocale from \"../locale/en-US/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport formatters from \"../_lib/format/formatters/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 9. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The second argument is now required for the sake of explicitness.\n *\n * ```javascript\n * // Before v2.0.0\n * format(new Date(2016, 0, 1))\n *\n * // v2.0.0 onward\n * format(new Date(2016, 0, 1), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n * ```\n *\n * - New format string API for `format` function\n * which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table).\n * See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.\n *\n * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://git.io/fxCyr\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://git.io/fxCyr\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * var result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nexport default function format(dirtyDate, dirtyFormatStr, dirtyOptions) {\n requiredArgs(2, arguments);\n var formatStr = String(dirtyFormatStr);\n var options = dirtyOptions || {};\n var locale = options.locale || defaultLocale;\n var localeFirstWeekContainsDate = locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var localeWeekStartsOn = locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n if (!locale.localize) {\n throw new RangeError('locale must contain localize property');\n }\n\n if (!locale.formatLong) {\n throw new RangeError('locale must contain formatLong property');\n }\n\n var originalDate = toDate(dirtyDate);\n\n if (!isValid(originalDate)) {\n throw new RangeError('Invalid time value');\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n\n\n var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);\n var utcDate = subMilliseconds(originalDate, timezoneOffset);\n var formatterOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale,\n _originalDate: originalDate\n };\n var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong, formatterOptions);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp).map(function (substring) {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return \"'\";\n }\n\n var firstCharacter = substring[0];\n\n if (firstCharacter === \"'\") {\n return cleanEscapedString(substring);\n }\n\n var formatter = formatters[firstCharacter];\n\n if (formatter) {\n if (!options.useAdditionalWeekYearTokens && isProtectedWeekYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, dirtyDate);\n }\n\n if (!options.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, dirtyDate);\n }\n\n return formatter(utcDate, substring, locale.localize, formatterOptions);\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n }\n\n return substring;\n }).join('');\n return result;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}","var formatDistanceLocale = {\n lessThanXSeconds: {\n standalone: {\n one: 'weniger als eine Sekunde',\n other: 'weniger als {{count}} Sekunden'\n },\n withPreposition: {\n one: 'weniger als einer Sekunde',\n other: 'weniger als {{count}} Sekunden'\n }\n },\n xSeconds: {\n standalone: {\n one: 'eine Sekunde',\n other: '{{count}} Sekunden'\n },\n withPreposition: {\n one: 'einer Sekunde',\n other: '{{count}} Sekunden'\n }\n },\n halfAMinute: {\n standalone: 'eine halbe Minute',\n withPreposition: 'einer halben Minute'\n },\n lessThanXMinutes: {\n standalone: {\n one: 'weniger als eine Minute',\n other: 'weniger als {{count}} Minuten'\n },\n withPreposition: {\n one: 'weniger als einer Minute',\n other: 'weniger als {{count}} Minuten'\n }\n },\n xMinutes: {\n standalone: {\n one: 'eine Minute',\n other: '{{count}} Minuten'\n },\n withPreposition: {\n one: 'einer Minute',\n other: '{{count}} Minuten'\n }\n },\n aboutXHours: {\n standalone: {\n one: 'etwa eine Stunde',\n other: 'etwa {{count}} Stunden'\n },\n withPreposition: {\n one: 'etwa einer Stunde',\n other: 'etwa {{count}} Stunden'\n }\n },\n xHours: {\n standalone: {\n one: 'eine Stunde',\n other: '{{count}} Stunden'\n },\n withPreposition: {\n one: 'einer Stunde',\n other: '{{count}} Stunden'\n }\n },\n xDays: {\n standalone: {\n one: 'ein Tag',\n other: '{{count}} Tage'\n },\n withPreposition: {\n one: 'einem Tag',\n other: '{{count}} Tagen'\n }\n },\n aboutXWeeks: {\n standalone: {\n one: 'etwa ein Woche',\n other: 'etwa {{count}} Wochen'\n },\n withPreposition: {\n one: 'etwa einem Woche',\n other: 'etwa {{count}} Wochen'\n }\n },\n xWeeks: {\n standalone: {\n one: 'ein Woche',\n other: '{{count}} Wochen'\n },\n withPreposition: {\n one: 'einem Woche',\n other: '{{count}} Wochen'\n }\n },\n aboutXMonths: {\n standalone: {\n one: 'etwa ein Monat',\n other: 'etwa {{count}} Monate'\n },\n withPreposition: {\n one: 'etwa einem Monat',\n other: 'etwa {{count}} Monaten'\n }\n },\n xMonths: {\n standalone: {\n one: 'ein Monat',\n other: '{{count}} Monate'\n },\n withPreposition: {\n one: 'einem Monat',\n other: '{{count}} Monaten'\n }\n },\n aboutXYears: {\n standalone: {\n one: 'etwa ein Jahr',\n other: 'etwa {{count}} Jahre'\n },\n withPreposition: {\n one: 'etwa einem Jahr',\n other: 'etwa {{count}} Jahren'\n }\n },\n xYears: {\n standalone: {\n one: 'ein Jahr',\n other: '{{count}} Jahre'\n },\n withPreposition: {\n one: 'einem Jahr',\n other: '{{count}} Jahren'\n }\n },\n overXYears: {\n standalone: {\n one: 'mehr als ein Jahr',\n other: 'mehr als {{count}} Jahre'\n },\n withPreposition: {\n one: 'mehr als einem Jahr',\n other: 'mehr als {{count}} Jahren'\n }\n },\n almostXYears: {\n standalone: {\n one: 'fast ein Jahr',\n other: 'fast {{count}} Jahre'\n },\n withPreposition: {\n one: 'fast einem Jahr',\n other: 'fast {{count}} Jahren'\n }\n }\n};\n\nvar formatDistance = function (token, count, options) {\n options = options || {};\n var usageGroup = options.addSuffix ? formatDistanceLocale[token].withPreposition : formatDistanceLocale[token].standalone;\n var result;\n\n if (typeof usageGroup === 'string') {\n result = usageGroup;\n } else if (count === 1) {\n result = usageGroup.one;\n } else {\n result = usageGroup.other.replace('{{count}}', String(count));\n }\n\n if (options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'in ' + result;\n } else {\n return 'vor ' + result;\n }\n }\n\n return result;\n};\n\nexport default formatDistance;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\n// DIN 5008: https://de.wikipedia.org/wiki/Datumsformat#DIN_5008\nvar dateFormats = {\n full: 'EEEE, do MMMM y',\n // Montag, 7. Januar 2018\n long: 'do MMMM y',\n // 7. Januar 2018\n medium: 'do MMM y',\n // 7. Jan. 2018\n short: 'dd.MM.y' // 07.01.2018\n\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'um' {{time}}\",\n long: \"{{date}} 'um' {{time}}\",\n medium: '{{date}} {{time}}',\n short: '{{date}} {{time}}'\n};\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nexport default formatLong;","var formatRelativeLocale = {\n lastWeek: \"'letzten' eeee 'um' p\",\n yesterday: \"'gestern um' p\",\n today: \"'heute um' p\",\n tomorrow: \"'morgen um' p\",\n nextWeek: \"eeee 'um' p\",\n other: 'P'\n};\n\nvar formatRelative = function (token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n\n/**\n * @type {Locale}\n * @category Locales\n * @summary German locale.\n * @language German\n * @iso-639-2 deu\n * @author Thomas Eilmsteiner [@DeMuu]{@link https://github.com/DeMuu}\n * @author Asia [@asia-t]{@link https://github.com/asia-t}\n * @author Van Vuong Ngo [@vanvuongngo]{@link https://github.com/vanvuongngo}\n * @author RomanErnst [@pex]{@link https://github.com/pex}\n * @author Philipp Keck [@Philipp91]{@link https://github.com/Philipp91}\n */\nvar locale = {\n code: 'de',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['v.Chr.', 'n.Chr.'],\n abbreviated: ['v.Chr.', 'n.Chr.'],\n wide: ['vor Christus', 'nach Christus']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1. Quartal', '2. Quartal', '3. Quartal', '4. Quartal']\n}; // Note: in German, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\n\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan.', 'Feb.', 'März', 'Apr.', 'Mai', 'Juni', 'Juli', 'Aug.', 'Sep.', 'Okt.', 'Nov.', 'Dez.'],\n wide: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']\n};\nvar dayValues = {\n narrow: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],\n short: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],\n abbreviated: ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'],\n wide: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']\n}; // https://www.unicode.org/cldr/charts/32/summary/de.html#1881\n\nvar dayPeriodValues = {\n narrow: {\n am: 'vm.',\n pm: 'nm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachm.',\n evening: 'Abend',\n night: 'Nacht'\n },\n abbreviated: {\n am: 'vorm.',\n pm: 'nachm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachmittag',\n evening: 'Abend',\n night: 'Nacht'\n },\n wide: {\n am: 'vormittags',\n pm: 'nachmittags',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'Morgen',\n afternoon: 'Nachmittag',\n evening: 'Abend',\n night: 'Nacht'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'vm.',\n pm: 'nm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachm.',\n evening: 'abends',\n night: 'nachts'\n },\n abbreviated: {\n am: 'vorm.',\n pm: 'nachm.',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachmittags',\n evening: 'abends',\n night: 'nachts'\n },\n wide: {\n am: 'vormittags',\n pm: 'nachmittags',\n midnight: 'Mitternacht',\n noon: 'Mittag',\n morning: 'morgens',\n afternoon: 'nachmittags',\n evening: 'abends',\n night: 'nachts'\n }\n};\n\nvar ordinalNumber = function (dirtyNumber, _dirtyOptions) {\n var number = Number(dirtyNumber);\n return number + '.';\n};\n\nvar localize = {\n ordinalNumber: ordinalNumber,\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function (quarter) {\n return quarter - 1;\n }\n }),\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n};\nexport default localize;","import buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nimport buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(\\.)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n abbreviated: /^(v\\.? ?Chr\\.?|n\\.? ?Chr\\.?)/i,\n wide: /^(vor Christus|vor unserer Zeitrechnung|nach Christus|unserer Zeitrechnung)/i\n};\nvar parseEraPatterns = {\n any: [/^v/i, /^n/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](\\.)? Quartal/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mär|apr|mai|jun|jul|aug|sep|okt|nov|dez)/i,\n wide: /^(januar|februar|märz|april|mai|juni|juli|august|september|oktober|november|dezember)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mär/i, /^ap/i, /^mai/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smdmf]/i,\n short: /^(so|mo|di|mi|do|fr|sa)/i,\n abbreviated: /^(son?|mon?|die?|mit?|don?|fre?|sam?)\\.?/i,\n wide: /^(sonntag|montag|dienstag|mittwoch|donnerstag|freitag|samstag)/i\n};\nvar parseDayPatterns = {\n any: [/^so/i, /^mo/i, /^di/i, /^mi/i, /^do/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(vm\\.?|nm\\.?|Mitternacht|Mittag|morgens|nachm\\.?|abends|nachts)/i,\n abbreviated: /^(vorm\\.?|nachm\\.?|Mitternacht|Mittag|morgens|nachm\\.?|abends|nachts)/i,\n wide: /^(vormittags|nachmittags|Mitternacht|Mittag|morgens|nachmittags|abends|nachts)/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^v/i,\n pm: /^n/i,\n midnight: /^Mitte/i,\n noon: /^Mitta/i,\n morning: /morgens/i,\n afternoon: /nachmittags/i,\n // will never be matched. Afternoon is matched by `pm`\n evening: /abends/i,\n night: /nachts/i // will never be matched. Night is matched by `pm`\n\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function (value) {\n return parseInt(value);\n }\n }),\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function (index) {\n return index + 1;\n }\n }),\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n};\nexport default match;","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.a<{ inverted?: boolean; disable?: boolean }>`\n min-height: 3em;\n height: 3.65em;\n min-width: 210px;\n padding: 0.1em 1.2em;\n\n display: inline-block;\n display: inline-flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: ${({ theme }) => font(theme).copy.medium.weight};\n text-align: center;\n text-decoration: none;\n line-height: 1;\n letter-spacing: ${({ theme }) => font(theme).copy.medium.letterSpacing};\n\n perspective: 1000;\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-perspective: 1000;\n -moz-osx-font-smoothing: grayscale;\n will-change: auto;\n\n outline: none;\n box-shadow: none;\n border: solid 1px\n ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n user-select: none;\n cursor: pointer;\n\n pointer-events: ${({ disable }) => (disable ? 'none' : 'all')};\n\n // will-change: transform;\n\n background-color: transparent;\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n text-align: center;\n\n transition: all ease-in-out 0.2s;\n\n & > * {\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n }\n\n & > :not(:last-child) {\n padding-right: ${spacings.nudge}px;\n }\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n box-shadow: 0px 8px 16px\n ${({ inverted }) =>\n inverted\n ? 'rgba(255, 255, 255, 0.25)'\n : 'rgba(0, 0, 0, 0.25)'};\n }\n\n &:focus {\n box-shadow: 0px 2px 6px\n ${({ inverted }) =>\n inverted\n ? 'rgba(255, 255, 255, 0.25)'\n : 'rgba(0, 0, 0, 0.3)'};\n }\n\n &:active {\n box-shadow: 0px 2px 6px\n ${({ inverted }) =>\n inverted\n ? 'rgba(255, 255, 255, 0.25)'\n : 'rgba(0, 0, 0, 0.3)'};\n }\n }\n`;\n\ninterface Props {\n isInverted?: boolean;\n isDisabled?: boolean;\n className?: string;\n}\n\nexport type BtnProps = Props & {\n as?: 'button';\n onClick?: (ev: React.SyntheticEvent<HTMLButtonElement>) => void;\n};\n\nexport type LinkProps = Props & {\n as?: 'a';\n href?: string;\n onClick?: (ev: React.SyntheticEvent<HTMLAnchorElement>) => void;\n isExternal?: boolean;\n};\n\nconst ButtonGhost: React.FC<BtnProps | LinkProps> = React.forwardRef(\n (\n { as, isInverted, isDisabled, onClick, className, children, ...rest },\n ref\n ) => {\n if (as === 'button') {\n return (\n <View\n ref={ref}\n as={as as any}\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n } else {\n return (\n <View\n ref={ref}\n as={as as any}\n href={(rest as LinkProps).href}\n target={\n (rest as LinkProps).isExternal ? '_blank' : undefined\n }\n rel={\n (rest as LinkProps).isExternal\n ? 'noopener noreferrer'\n : undefined\n }\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n }\n }\n);\n\nButtonGhost.displayName = 'Button Ghost';\n\nconst Icon = styled.div<{ iconColor?: string }>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n width: 35px;\n height: 35px;\n\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).primary.medium};\n\n transition: transform 0.2s ease-in-out;\n\n ${View}:hover > & {\n transform: translateX(3px);\n }\n`;\n\nconst Label = styled.span`\n display: inline-block;\n`;\n\nexport default { View: ButtonGhost, Label: Label, Icon: Icon };\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst AngleDown: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"18\"\n height=\"10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 18 10\"\n className={className}\n >\n <path\n d=\"M.461.519C.787.193 1.156.02 1.567 0c.412-.019.82.154 1.222.518l5.746 5.516L14.28.519c.402-.364.81-.537 1.221-.518.412.02.78.192 1.106.518.307.325.455.723.446 1.192-.01.47-.158.857-.446 1.164-.153.153-.598.584-1.336 1.293-.737.708-1.518 1.46-2.341 2.255-.824.795-1.57 1.508-2.241 2.14l-1.006.949a1.68 1.68 0 01-.531.359 1.554 1.554 0 01-1.236 0 1.681 1.681 0 01-.531-.36s-.336-.315-1.006-.948c-.67-.632-1.417-1.345-2.241-2.14-.824-.795-1.604-1.547-2.342-2.255C1.06 3.458.615 3.028.461 2.875.174 2.568.021 2.18.001 1.71c-.019-.47.135-.867.46-1.192z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default AngleDown;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst AngleUp: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"18\"\n height=\"10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 18 10\"\n className={className}\n >\n <path\n d=\"M16.593 9.481c-.325.326-.694.498-1.106.518-.412.019-.819-.154-1.22-.518L8.52 3.965 2.774 9.48c-.403.364-.81.537-1.222.518-.411-.02-.78-.192-1.106-.518A1.624 1.624 0 01.001 8.29c.01-.47.158-.857.445-1.164.154-.153.599-.584 1.336-1.293.738-.708 1.518-1.46 2.342-2.255.824-.795 1.57-1.508 2.241-2.14L7.371.488c.153-.153.33-.273.531-.359a1.554 1.554 0 011.236 0c.2.086.378.206.531.36l1.006.948c.67.632 1.417 1.345 2.24 2.14.824.795 1.605 1.547 2.342 2.255.738.71 1.183 1.14 1.336 1.293.288.307.44.695.46 1.164.02.47-.134.867-.46 1.192z\"\n fill={iconColor}\n fillOpacity=\".94\"\n />\n </SVG>\n);\n\nexport default AngleUp;\n","import React, {\n useState,\n useEffect,\n useContext,\n useRef,\n forwardRef,\n useCallback,\n} from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\n\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport { format, isBefore, isValid } from 'date-fns';\nimport de from 'date-fns/locale/de';\n\nimport ButtonGhost from 'components/buttons/ButtonGhost';\nimport Button from 'components/buttons/Button';\n\nimport Copy from 'components/typography/Copy';\n\nimport AngleDown from 'components/base/icons/AngleDown';\nimport AngleUp from 'components/base/icons/AngleUp';\nimport ReactDatePicker from 'react-datepicker';\nimport { hexToRgba } from 'utils/hexRgbConverter';\n\nconst PickerView = styled.div<{ prevUrl?: string; nextUrl?: string }>`\n position: relative;\n width: 100%;\n text-align: left;\n\n .react-datepicker-popper {\n right: ${spacings.spacer * 2}px;\n z-index: 2 !important;\n width: 100%;\n }\n\n @media ${mq.medium} {\n .react-datepicker-popper {\n right: auto;\n width: auto;\n }\n }\n\n .react-datepicker {\n font-family: 'Roboto', sans-serif;\n border: 1px solid ${({ theme }) => color(theme).primary.medium} !important;\n border-radius: 0 !important;\n padding: ${spacings.spacer}px;\n width: 100%;\n }\n\n .react-datepicker-wrapper {\n width: 100% !important;\n }\n\n .react-datepicker__header {\n border: none !important;\n background-color: ${({ theme }) => color(theme).light} !important;\n }\n\n /* Month */\n .react-datepicker__month-container {\n width: 100%;\n }\n\n @media ${mq.medium} {\n .react-datepicker__month-container {\n width: auto;\n }\n }\n\n .react-datepicker__month {\n margin-left: ${spacings.spacer}px;\n margin-right: ${spacings.spacer}px;\n }\n\n .react-datepicker__current-month {\n font-family: 'Roboto', sans-serif;\n font-weight: 600;\n font-size: 17px;\n line-height: 1.3;\n text-transform: uppercase;\n background-color: ${({ theme }) => color(theme).primary.medium};\n padding: 10px 15px;\n color: ${({ theme }) => color(theme).light} !important;\n width: max-content;\n margin: 0 auto;\n }\n\n /* Day styles */\n\n .react-datepicker__day-names {\n display: flex;\n font-size: 11px;\n line-height: 1.25;\n background: ${({ theme }) => color(theme).light};\n }\n\n @media ${mq.medium} {\n .react-datepicker__day-names {\n display: block;\n }\n }\n\n .react-datepicker__day-name {\n flex: 1 0 auto;\n }\n\n .react-datepicker__week {\n display: flex;\n margin: -2px !important;\n }\n\n @media ${mq.medium} {\n .react-datepicker__week {\n display: block;\n }\n }\n\n .react-datepicker__day {\n flex: 1 0 auto;\n background-color: ${({ theme }) => color(theme).mono.light};\n border-radius: 0 !important;\n font-weight: 600;\n\n outline: none !important;\n\n margin: 2px !important;\n }\n\n @media ${mq.medium} {\n .react-datepicker__day:hover {\n background-color: ${({ theme }) =>\n hexToRgba(color(theme).primary.medium, 0.25)} !important;\n border-radius: 0 !important;\n }\n }\n\n .react-datepicker__day--outside-month {\n color: ${({ theme }) => color(theme).mono.medium} !important;\n cursor: default;\n }\n\n .react-datepicker__day--selected {\n background-color: ${({ theme }) =>\n color(theme).primary.medium} !important;\n border-radius: 0 !important;\n color: ${({ theme }) => color(theme).light};\n }\n\n .react-datepicker__day--today {\n border: 1px solid ${({ theme }) => color(theme).primary.medium} !important;\n border-radius: 0 !important;\n color: ${({ theme }) => color(theme).light};\n }\n\n /* Triangle Styles */\n\n .react-datepicker__triangle:before {\n border-bottom-color: ${({ theme }) =>\n color(theme).primary.medium} !important;\n }\n\n .react-datepicker__triangle:after {\n border-bottom-color: ${({ theme }) => color(theme).light} !important;\n }\n\n /* Day Ranges */\n\n .react-datepicker__day--in-range {\n background-color: ${({ theme }) =>\n hexToRgba(color(theme).primary.medium, 0.7)} !important;\n }\n\n @media ${mq.medium} {\n .react-datepicker__day--in-range:hover {\n background-color: ${({ theme }) =>\n hexToRgba(color(theme).primary.medium, 0.25)} !important;\n }\n }\n\n .react-datepicker__day--range-start {\n background-color: ${({ theme }) =>\n color(theme).primary.medium} !important;\n }\n\n @media ${mq.medium} {\n .react-datepicker__day--range-start:hover {\n background-color: ${({ theme }) =>\n hexToRgba(color(theme).primary.medium, 0.25)} !important;\n }\n }\n\n .react-datepicker__day--range-end {\n background-color: ${({ theme }) =>\n color(theme).primary.medium} !important;\n }\n\n @media ${mq.medium} {\n .react-datepicker__day--range-end:hover {\n background-color: ${({ theme }) =>\n hexToRgba(color(theme).primary.medium, 0.25)} !important;\n }\n }\n\n .react-datepicker__day--in-selecting-range {\n background-color: ${({ theme }) =>\n hexToRgba(color(theme).primary.medium, 0.7)} !important;\n }\n\n /* Next-/Prev-Arrow */\n\n .react-datepicker__close-icon {\n display: none !important;\n }\n\n .react-datepicker__navigation--next {\n ${({ nextUrl }) =>\n nextUrl &&\n css`\n background: url(${nextUrl}) no-repeat !important;\n width: 19px;\n height: 19px;\n border: none;\n right: 1em !important;\n `};\n }\n\n .react-datepicker__navigation--previous {\n ${({ prevUrl }) =>\n prevUrl &&\n css`\n background: url(${prevUrl}) no-repeat !important;\n width: 19px;\n height: 19px;\n border: none;\n left: 2em !important;\n `};\n }\n\n .react-datepicker__navigation-icon--next {\n display: none !important;\n }\n\n .react-datepicker__navigation-icon--previous {\n display: none !important;\n }\n\n .react-datepicker__navigation {\n top: 2.8em !important;\n }\n`;\n\nconst View = styled.div`\n width: 100%;\n`;\n\nconst FieldHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n padding-bottom: ${spacings.nudge * 3}px;\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n`;\n\nconst Icon = styled.img`\n height: 100%;\n max-height: 25px;\n max-width: 30px;\n`;\n\nconst DatepickerButton = styled.div<{\n hasError?: boolean;\n isActive?: boolean;\n hasBg?: boolean;\n}>`\n background: ${({ theme, hasBg }) =>\n hasBg ? color(theme).mono.light : color(theme).light};\n border: ${({ hasError, theme }) =>\n hasError ? `2px solid ${color(theme).error}` : '2px solid transparent'};\n outline: none;\n padding: ${spacings.spacer}px ${spacings.nudge * 3}px;\n width: 100%;\n max-height: 60px;\n pointer-events: ${({ isActive }) => (isActive ? 'none' : 'all')};\n\n position: relative;\n\n &:focus {\n border: 1px solid ${({ theme }) => color(theme).primary.medium};\n }\n\n &:active {\n border: 1px solid ${({ theme }) => color(theme).primary.medium};\n }\n\n ${({ isActive }) =>\n isActive &&\n css`\n border: 1px solid ${({ theme }) => color(theme).primary.medium};\n `}\n\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n`;\n\nconst DatepickerButtonMain = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n`;\n\nconst DatepickerFoot = styled.div`\n display: block;\n\n margin-top: ${spacings.spacer * 14}px;\n`;\n\nconst FootFlex = styled.div`\n clear: both;\n display: flex;\n flex-direction: column;\n\n & > * + * {\n margin-top: ${spacings.spacer * 0.5}px;\n }\n\n @media ${mq.medium} {\n align-items: center;\n flex-direction: row;\n\n & > * + * {\n margin-top: 0;\n margin-left: ${spacings.spacer * 0.5}px;\n }\n }\n`;\n\nconst InfoMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst ErrorMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst ButtonLabel = styled(Button.Label)`\n font-size: 12px;\n`;\nconst ButtonGhostLabel = styled(ButtonGhost.Label)`\n font-size: 12px;\n`;\n\ninterface PickerBtnProps {\n isFocused?: boolean;\n label?: string;\n name?: string;\n altText?: string;\n errorMessage?: string;\n startDate?: Date | null | undefined;\n endDate?: Date | null | undefined;\n icon?: { src: string; alt?: string };\n setFocused: React.Dispatch<React.SetStateAction<boolean>>;\n onClick?: (ev: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;\n hasBg?: boolean;\n isInverted?: boolean;\n}\n\nconst PickerButton = forwardRef<HTMLDivElement, PickerBtnProps>(\n (\n {\n isFocused,\n label,\n name,\n altText,\n errorMessage,\n startDate,\n endDate,\n icon,\n isInverted,\n hasBg,\n setFocused,\n onClick,\n },\n ref\n ) => {\n const theme = useContext(ThemeContext);\n\n return (\n <View>\n <FieldHead>\n {label && (\n <Copy size=\"medium\" type=\"copy-b\">\n {label}\n </Copy>\n )}\n </FieldHead>\n <DatepickerButton\n ref={ref}\n onClick={(e) => {\n setFocused && setFocused(true);\n onClick && onClick(e);\n }}\n isActive={isFocused}\n hasBg={hasBg && !isInverted}\n hasError={!!errorMessage}\n className=\"myPickerButton\"\n >\n <DatepickerButtonMain>\n {icon && <Icon src={icon.src} alt={icon.alt} />}\n\n <Copy size=\"small\" type=\"copy-b\">\n {startDate\n ? `${format(startDate, 'dd.MM.yyyy')}${\n endDate\n ? ` – ${format(\n endDate,\n 'dd.MM.yyyy'\n )}`\n : ''\n }`\n : altText}\n </Copy>\n </DatepickerButtonMain>\n {isFocused ? (\n <AngleUp iconColor={color(theme).dark} />\n ) : (\n <AngleDown iconColor={color(theme).dark} />\n )}\n </DatepickerButton>\n {name && (\n <>\n <input\n type=\"hidden\"\n name={`${name}[\"start\"]`}\n value={startDate?.toString()}\n />\n <input\n type=\"hidden\"\n name={`${name}[\"end\"]`}\n value={endDate?.toString()}\n />\n </>\n )}\n </View>\n );\n }\n);\nPickerButton.displayName = 'PickerButton';\n\nconst Datepicker: React.FC<{\n label?: string;\n name?: string;\n icon?: { src: string; alt?: string };\n placeholder?: string;\n errorMessage?: string;\n infoMessage?: string;\n\n values?: [Date, Date];\n minDate?: Date;\n maxDate?: Date;\n onDataChange?: (startDate: Date | null, endDate: Date | null) => void;\n onSubmit?: (startDate?: Date | null, endDate?: Date | null) => void;\n deleteAction?: (\n handleClick: (e: React.SyntheticEvent<HTMLButtonElement, Event>) => void\n ) => React.ReactNode;\n submitAction?: (\n handleClick?: (\n e: React.SyntheticEvent<HTMLButtonElement, Event>\n ) => void\n ) => React.ReactNode;\n nextCtrlUrl?: string;\n prevCtrlUrl?: string;\n\n singleSelect?: boolean;\n hasBg?: boolean;\n isInverted?: boolean;\n}> = ({\n label,\n name,\n icon,\n placeholder,\n singleSelect = false,\n values,\n minDate = new Date(),\n maxDate,\n errorMessage,\n infoMessage,\n isInverted,\n hasBg,\n onDataChange,\n onSubmit,\n deleteAction,\n submitAction,\n nextCtrlUrl,\n prevCtrlUrl,\n}) => {\n const theme = useContext(ThemeContext);\n const pickerRef = useRef<ReactDatePicker | undefined>(null);\n const pickerBtnRef = useRef<HTMLDivElement | null>(null);\n const [isSmall, setIsSmall] = useState<boolean>(false);\n\n const [startDate, setStartDate] = useState<Date | null>();\n const [endDate, setEndDate] = useState<Date | null>();\n\n const [focused, setFocused] = useState<boolean>();\n\n useEffect(() => {\n const x = async () => {\n const { registerLocale } = await import('react-datepicker');\n registerLocale('de', de);\n };\n\n if (!singleSelect) setIsSmall(!window.matchMedia(mq.medium).matches);\n\n x();\n }, [singleSelect]);\n\n useEffect(() => {\n if (values) {\n if (values[0] && isValid(values[0])) {\n setStartDate(values[0]);\n }\n\n if (values[1] && isValid(values[1])) {\n setEndDate(values[1]);\n }\n }\n }, [values]);\n\n useEffect(() => {\n const handleResize = () => {\n const shouldBeSmall = !window.matchMedia(mq.medium).matches;\n\n if (shouldBeSmall !== isSmall) {\n setIsSmall(shouldBeSmall);\n }\n };\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, [isSmall]);\n\n useEffect(() => {\n if (pickerRef.current && focused !== undefined) {\n pickerRef.current?.setOpen(focused);\n }\n }, [focused]);\n\n const handleReset = useCallback(\n (ev: React.SyntheticEvent<HTMLButtonElement, Event>) => {\n ev.preventDefault();\n setStartDate(undefined);\n setEndDate(undefined);\n new Date();\n },\n []\n );\n\n const handleSubmit = useCallback(\n (ev: React.SyntheticEvent<HTMLButtonElement, Event>) => {\n ev.preventDefault();\n setFocused(false);\n onSubmit && onSubmit(startDate, endDate);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [endDate, startDate]\n );\n\n return (\n <PickerView nextUrl={nextCtrlUrl} prevUrl={prevCtrlUrl}>\n <ReactDatePicker\n locale=\"de\"\n ref={pickerRef as any}\n dateFormat=\"dd.MM.yyyy\"\n onChange={(date) => {\n if (date) {\n if (singleSelect) {\n setStartDate(date as Date);\n setFocused(false);\n onDataChange && onDataChange(date as Date, null);\n } else if (startDate) {\n if (endDate) {\n setStartDate(date as Date);\n setEndDate(null);\n onDataChange &&\n onDataChange(date as Date, null);\n } else if (isBefore(date as Date, startDate)) {\n setEndDate(startDate);\n setStartDate(date as Date);\n onDataChange &&\n onDataChange(date as Date, startDate);\n } else {\n setEndDate(date as Date);\n onDataChange &&\n onDataChange(startDate, date as Date);\n }\n } else {\n setStartDate(date as Date);\n onDataChange &&\n onDataChange(date as Date, endDate || null);\n }\n } else {\n setStartDate(undefined);\n onDataChange && onDataChange(null, null);\n }\n }}\n selected={startDate}\n startDate={startDate}\n endDate={endDate}\n monthsShown={isSmall ? 1 : 2}\n shouldCloseOnSelect={singleSelect}\n customInput={\n <PickerButton\n ref={pickerBtnRef}\n label={label}\n name={name}\n altText={placeholder}\n startDate={startDate}\n endDate={endDate}\n errorMessage={errorMessage}\n icon={icon}\n isFocused={focused}\n setFocused={setFocused}\n isInverted={isInverted}\n hasBg={hasBg}\n />\n }\n showPopperArrow\n minDate={minDate}\n maxDate={maxDate}\n disabledKeyboardNavigation\n isClearable\n onClickOutside={(ev) => {\n ev.stopPropagation();\n setFocused(false);\n onSubmit && onSubmit(startDate, endDate);\n }}\n >\n <DatepickerFoot>\n <FootFlex>\n {/* <ButtonGhost.View\n as=\"button\"\n onClick={(ev) => {\n ev.preventDefault();\n setStartDate(undefined);\n setEndDate(undefined);\n new Date();\n }}\n >\n <ButtonGhostLabel>Löschen</ButtonGhostLabel>\n </ButtonGhost.View> */}\n {deleteAction ? (\n deleteAction(handleReset)\n ) : (\n <ButtonGhost.View as=\"button\" onClick={handleReset}>\n <ButtonGhostLabel>Delete</ButtonGhostLabel>\n </ButtonGhost.View>\n )}\n {submitAction ? (\n submitAction(handleSubmit)\n ) : (\n <Button.View as=\"button\" onClick={handleSubmit}>\n <ButtonLabel>Submit</ButtonLabel>\n </Button.View>\n )}\n </FootFlex>\n </DatepickerFoot>\n </ReactDatePicker>\n {infoMessage && (\n <InfoMessage textColor={color(theme).mono.dark} size=\"small\">\n {infoMessage}\n </InfoMessage>\n )}\n {errorMessage && (\n <ErrorMessage\n textColor={color(theme).error}\n size=\"small\"\n type=\"copy-i\"\n >\n {errorMessage\n ? errorMessage\n : 'Bitte geben Sie einen gültigen Text ein'}\n </ErrorMessage>\n )}\n </PickerView>\n );\n};\n\nexport default Datepicker;\n","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * var result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\n\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() < dateToCompare.getTime();\n}","import Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport { getColors as color, spacings } from '../../utils/styles';\n\nconst View = styled.label`\n display: flex;\n flex-direction: row;\n align-items: center;\n\n & > * + * {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst RadioContainer = styled.div<{ isDisabled?: boolean }>`\n cursor: ${({ isDisabled }) => (isDisabled ? 'default' : 'pointer')};\n pointer-events: ${({ isDisabled }) => (isDisabled ? 'none' : 'all')};\n`;\n\nconst Original = styled.input`\n position: absolute;\n left: -9999px;\n opacity: 0;\n`;\n\nconst StyledRadioButton = styled.span<{\n isSelected?: boolean;\n hasBg?: boolean;\n}>`\n background-color: ${({ theme, hasBg }) =>\n hasBg ? color(theme).mono.light : color(theme).light};\n border-radius: 50%;\n\n position: relative;\n\n width: 20px;\n height: 20px;\n display: block;\n\n ${({ isSelected, theme }) =>\n isSelected\n ? css`\n background-color: ${color(theme).primary.medium};\n\n &:before {\n content: '';\n position: absolute;\n display: block;\n height: 8px;\n width: 8px;\n background-color: ${color(theme).light};\n border-radius: 50%;\n top: 50%;\n left: 50%;\n\n transform: translate(-50%, -50%);\n }\n `\n : 'none'}\n`;\n\nconst Label = styled(Copy)`\n padding-top: 2px;\n\n & > * {\n margin: 0;\n }\n`;\n\nconst RadioButton: React.FC<{\n isSelected?: boolean;\n isDisabled?: boolean;\n isInverted?: boolean;\n onChange?: (e: React.SyntheticEvent<HTMLInputElement>) => void;\n name?: string;\n id?: string;\n value?: string;\n label?: string;\n hasBg?: boolean;\n}> = ({\n isDisabled,\n isSelected,\n isInverted,\n onChange,\n label,\n id,\n name,\n value,\n hasBg,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <View>\n <RadioContainer isDisabled={isDisabled}>\n <StyledRadioButton\n isSelected={isSelected}\n hasBg={hasBg && !isInverted}\n />\n <Original\n type=\"radio\"\n name={name}\n id={id}\n value={value}\n checked={isSelected}\n onChange={onChange}\n />\n </RadioContainer>\n {label && (\n <Label\n size=\"small\"\n type=\"copy-b\"\n textColor={\n isDisabled\n ? color(theme).mono.medium\n : isInverted\n ? color(theme).light\n : color(theme).dark\n }\n innerHTML={label}\n isInverted={isInverted}\n />\n )}\n </View>\n );\n};\nexport default RadioButton;\n","import AngleDown from 'components/base/icons/AngleDown';\nimport AngleUp from 'components/base/icons/AngleUp';\nimport Copy from 'components/typography/Copy';\nimport React, { useEffect } from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport { getColors as color, spacings } from 'utils/styles';\n\nconst View = styled.div`\n position: relative;\n text-align: left;\n`;\n\nconst FieldHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n padding-bottom: ${spacings.nudge * 3}px;\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n`;\n\nconst Select = styled.div<{\n hasError?: boolean;\n isActive?: boolean;\n hasBg?: boolean;\n}>`\n border: ${({ hasError, theme }) =>\n hasError ? `2px solid ${color(theme).error}` : '2px solid transparent'};\n background: ${({ theme, hasBg }) =>\n hasBg ? color(theme).mono.light : color(theme).light};\n outline: none;\n padding: ${spacings.spacer}px;\n width: 100%;\n max-height: 60px;\n\n position: relative;\n\n &:focus {\n border: 1px solid ${({ theme }) => color(theme).primary.medium};\n }\n\n &:active {\n border: 1px solid ${({ theme }) => color(theme).primary.medium};\n }\n\n ${({ isActive }) =>\n isActive &&\n css`\n border: 1px solid ${({ theme }) => color(theme).primary.medium};\n `}\n\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n`;\n\nconst SelectMain = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n user-select: none;\n\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n`;\n\nconst Icon = styled.img`\n height: 100%;\n max-height: 25px;\n max-width: 30px;\n`;\n\nconst Label = styled(Copy)`\n padding-top: 2px;\n`;\n\nconst Flyout = styled.ul<{ isVisible?: boolean }>`\n list-style: none;\n padding: 0;\n margin: 0;\n\n position: absolute;\n width: 100%;\n z-index: 2;\n\n display: ${({ isVisible }) => (isVisible ? 'block' : 'none')};\n background: ${({ theme }) => color(theme).light};\n border: 1px solid ${({ theme }) => color(theme).primary.medium};\n\n max-height: 300px;\n overflow-y: scroll;\n\n ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 14px;\n }\n\n ::-webkit-scrollbar-thumb {\n border-radius: 8px;\n background-color: ${({ theme }) => color(theme).mono.medium};\n border: 4px solid rgba(0, 0, 0, 0);\n background-clip: padding-box;\n }\n`;\n\nconst ItemStyle = styled.li`\n padding: ${spacings.spacer}px ${spacings.nudge * 3}px;\n width: 100%;\n cursor: pointer;\n position: relative;\n`;\n\nconst Item = styled(Copy)<{ isActive?: boolean }>`\n z-index: 1;\n\n ${ItemStyle}:hover & {\n &:before {\n content: '';\n background: ${({ theme }) => color(theme).primary.medium};\n opacity: 0.25;\n display: block;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n }\n }\n\n ${({ isActive }) =>\n isActive &&\n css`\n &:hover {\n color: ${({ theme }) => color(theme).dark};\n }\n\n &:before {\n content: '';\n background-color: ${({ theme }) => color(theme).primary.medium};\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n\n z-index: 0;\n }\n `}\n`;\n\nconst Text = styled.span`\n position: relative;\n z-index: 1;\n`;\n\nconst ErrorMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst FocusContainer = styled.div`\n outline: none;\n position: relative;\n`;\n\nconst SelectDropdown: React.FC<{\n icon?: { src: string; alt?: string };\n label?: string;\n placeholder?: string;\n name?: string;\n value?: string;\n items: {\n value?: string;\n label?: string;\n }[];\n\n isDisabled?: boolean;\n errorMessage?: string;\n isRequired?: boolean;\n isInverted?: boolean;\n hasBg?: boolean;\n\n onChange?: (value: string) => void;\n onBlur?: () => void;\n}> = ({\n label,\n items,\n name,\n value,\n placeholder,\n isDisabled,\n isInverted,\n hasBg,\n errorMessage,\n isRequired,\n icon,\n onChange,\n onBlur,\n}) => {\n const theme = React.useContext(ThemeContext);\n const initialItemIndex = items?.findIndex((item) => item.value === value);\n const [isOpen, setIsOpen] = React.useState(false);\n const [selectedItem, setSelectedItem] = React.useState<\n | {\n value?: string;\n id: number;\n label?: string;\n }\n | undefined\n >(\n initialItemIndex !== -1\n ? { ...items[initialItemIndex], id: initialItemIndex }\n : undefined\n );\n\n useEffect(() => {\n if (onChange && selectedItem) {\n onChange(selectedItem.value || '');\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedItem]);\n\n return (\n <View>\n <FieldHead>\n <Copy\n textColor={\n isDisabled ? color(theme).mono.medium : undefined\n }\n size=\"medium\"\n type=\"copy-b\"\n >\n {label}\n {label && label !== ' ' && isRequired && '*'}\n </Copy>\n </FieldHead>\n <FocusContainer\n tabIndex={0}\n onBlur={() => {\n setIsOpen(false);\n onBlur && onBlur();\n }}\n >\n <Select\n onClick={() => {\n isOpen ? setIsOpen(false) : setIsOpen(true);\n }}\n isActive={isOpen}\n hasBg={hasBg && !isInverted}\n hasError={!!errorMessage}\n >\n <SelectMain>\n {icon?.src && (\n <Icon src={icon.src} alt={icon.alt || ''} />\n )}\n {(placeholder || selectedItem?.label) && (\n <Label\n textColor={\n isDisabled\n ? color(theme).mono.medium\n : color(theme).dark\n }\n size=\"medium\"\n type=\"copy-b\"\n >\n {selectedItem?.label || placeholder}\n </Label>\n )}\n </SelectMain>\n {isOpen ? (\n <AngleUp\n iconColor={\n isDisabled\n ? color(theme).mono.medium\n : color(theme).dark\n }\n />\n ) : (\n <AngleDown\n iconColor={\n isDisabled\n ? color(theme).mono.medium\n : color(theme).dark\n }\n />\n )}\n </Select>\n <Flyout isVisible={isOpen}>\n {items.map((item, i) => {\n return (\n <ItemStyle\n key={i}\n onClick={() => {\n setIsOpen(false);\n setSelectedItem({\n ...item,\n id: i,\n });\n }}\n >\n <Item\n isActive={i === selectedItem?.id}\n size=\"small\"\n textColor={\n i === selectedItem?.id\n ? color(theme).light\n : color(theme).dark\n }\n >\n <Text>{item.label}</Text>\n </Item>\n </ItemStyle>\n );\n })}\n </Flyout>\n </FocusContainer>\n {selectedItem && (\n <input type=\"hidden\" name={name} value={selectedItem.value} />\n )}\n {errorMessage && (\n <ErrorMessage\n textColor={color(theme).error}\n size=\"small\"\n type=\"copy-i\"\n >\n {errorMessage\n ? errorMessage\n : 'Bitte geben Sie einen gültigen Text ein'}\n </ErrorMessage>\n )}\n </View>\n );\n};\n\nexport default SelectDropdown;\n","import Copy from 'components/typography/Copy';\nimport React, { FC, useEffect, useContext, useState, useRef } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { hexToRgba } from 'utils/hexRgbConverter';\nimport { getColors as color, spacings } from 'utils/styles';\nimport { FormProps } from './Textfield';\n\nconst View = styled.div`\n text-align: left;\n`;\n\nconst Label = styled(Copy)``;\n\nconst FieldHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: top;\n justify-content: space-between;\n padding-bottom: ${spacings.nudge * 3}px;\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n`;\n\nconst FieldWrapper = styled.div<{ hasError?: boolean; hasBg?: boolean }>`\n border: ${({ hasError, theme }) =>\n hasError ? `2px solid ${color(theme).error}` : '2px solid transparent'};\n background: ${({ theme, hasBg }) =>\n hasBg ? color(theme).mono.light : color(theme).light};\n padding: ${spacings.nudge * 3}px;\n\n &:focus-within {\n border: ${({ hasError, theme }) =>\n hasError\n ? `2px solid ${color(theme).error}`\n : '2px solid transparent'};\n }\n\n & > * {\n flex: 1 1 auto;\n }\n`;\n\nconst FieldMain = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n`;\n\nconst Original = styled.input`\n display: none;\n`;\n\nconst InputView = styled.div<{ isDisabled?: boolean }>`\n display: block;\n border: 1px solid\n ${({ isDisabled, theme }) =>\n isDisabled ? color(theme).mono.medium : 'rgba(56, 56, 56, 0.94)'};\n cursor: pointer;\n outline: none;\n width: 100%;\n max-height: 60px;\n max-width: max-content;\n box-shadow: none;\n outline: none;\n -webkit-appearance: none;\n\n padding: ${spacings.nudge}px ${spacings.nudge * 3}px;\n\n font-weight: inherit;\n font-family: inherit;\n font-size: inherit;\n\n pointer-events: ${({ isDisabled }) => isDisabled && 'none'};\n\n transition: all 0.2s ease-in-out;\n\n &:hover {\n border: 1px solid transparent;\n background: ${({ theme }) =>\n hexToRgba(color(theme).primary.medium, 0.25)};\n }\n\n &:active {\n color: ${({ theme }) => color(theme).dark};\n\n &::placeholder {\n color: ${({ theme }) => color(theme).dark};\n }\n }\n\n &:focus {\n color: ${({ theme }) => color(theme).dark};\n\n &::placeholder {\n color: ${({ theme }) => color(theme).dark};\n }\n }\n`;\n\nconst File = styled.div`\n margin-top: ${spacings.nudge * 2}px;\n margin-left: ${spacings.nudge * 3}px;\n\n display: flex;\n flex-direction: row;\n align-items: center;\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n`;\n\nconst Delete = styled.div`\n cursor: pointer;\n\n &:hover {\n & > * {\n text-decoration: underline;\n }\n }\n`;\n\nconst FileLabel = styled(Copy)``;\n\nconst InfoMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst ErrorMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\ninterface Preview {\n type: string;\n url: string | null;\n isUploading?: boolean;\n}\n\nconst readFileAsync = (file: File) =>\n new Promise<Preview>((resolve) => {\n resolve({\n type: file.type,\n url: file.name,\n isUploading: true,\n });\n\n const reader = new FileReader();\n\n reader.onload = () => {\n resolve({\n type: file.type,\n url: file.name,\n isUploading: true,\n });\n };\n reader.readAsDataURL(file);\n });\n\nconst FileUpload: FC<\n Omit<FormProps, 'value' | 'placeholder'> & {\n onUploadFiles?: (files: File[]) => void;\n isInverted?: boolean;\n hasBg?: boolean;\n addBtnLabel?: string;\n removeBtnLabel?: string;\n acceptedFormats?: string;\n }\n> = ({\n onUploadFiles,\n label,\n isDisabled,\n isRequired,\n errorMessage,\n infoMessage,\n isInverted,\n hasBg,\n addBtnLabel,\n removeBtnLabel,\n acceptedFormats,\n}) => {\n const theme = useContext(ThemeContext);\n const [selectedFiles, setSelectedFiles] = useState<File[]>([]);\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n\n const [previews, setPreviews] = useState<Preview[]>([]);\n\n useEffect(() => {\n if (selectedFiles) {\n onUploadFiles && onUploadFiles(selectedFiles);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedFiles]);\n\n return (\n <View>\n <FieldHead>\n {label && (\n <Label\n textColor={\n isDisabled ? color(theme).mono.medium : undefined\n }\n size=\"medium\"\n type=\"copy-b\"\n >\n {label}\n {isRequired && '*'}\n </Label>\n )}\n </FieldHead>\n <FieldWrapper\n hasError={!!errorMessage}\n hasBg={hasBg && !isInverted}\n >\n <FieldMain>\n <InputView\n onClick={(event: any) => {\n event.preventDefault();\n fileInputRef.current?.click();\n }}\n isDisabled={isDisabled}\n >\n <Copy\n textColor={\n isDisabled\n ? color(theme).mono.medium\n : undefined\n }\n size=\"medium\"\n type=\"copy-b\"\n >\n {addBtnLabel || 'Select file'}\n </Copy>\n </InputView>\n {previews.length > 0 && (\n <Delete\n onClick={() => {\n if (fileInputRef && fileInputRef.current) {\n fileInputRef.current.value = '';\n setSelectedFiles([]);\n setPreviews([]);\n }\n }}\n >\n <Copy\n textColor={\n isDisabled\n ? color(theme).mono.medium\n : undefined\n }\n size=\"medium\"\n type=\"copy-b\"\n >\n {removeBtnLabel || 'Clear selection'}\n </Copy>\n </Delete>\n )}\n </FieldMain>\n\n <Original\n onChange={(e) => {\n if (e.currentTarget.files) {\n const files = Array.from(e.currentTarget.files);\n\n const promises = files.map((file) => {\n return readFileAsync(file);\n });\n\n Promise.all(promises).then((p) => {\n setPreviews((prev) => [...prev, ...p]);\n });\n\n setSelectedFiles((prev) => [...prev, ...files]);\n }\n }}\n type=\"file\"\n ref={fileInputRef}\n multiple\n required={isRequired}\n disabled={isDisabled}\n accept={acceptedFormats}\n />\n {previews.map((file, i) => {\n const fileName = (file.url && file.url.split('/')) || [];\n return (\n <File key={i}>\n <FileLabel>{fileName}</FileLabel>\n </File>\n );\n })}\n </FieldWrapper>\n {infoMessage && (\n <InfoMessage textColor={color(theme).mono.dark} size=\"small\">\n {infoMessage}\n </InfoMessage>\n )}\n {errorMessage && (\n <ErrorMessage\n textColor={color(theme).error}\n size=\"small\"\n type=\"copy-i\"\n >\n {errorMessage\n ? errorMessage\n : 'Bitte geben Sie einen gültigen Text ein'}\n </ErrorMessage>\n )}\n </View>\n );\n};\n\nexport default FileUpload;\n","import React, { FC, useContext } from 'react';\nimport styled, { DefaultTheme, ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings } from 'utils/styles';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { Field, FormikErrors, FormikTouched, useFormik } from 'formik';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\nimport Button from 'components/buttons/Button';\nimport Datepicker from 'components/fields/Datepicker';\nimport Checkbox from 'components/fields/Checkbox';\nimport RadioButton from 'components/fields/Radio';\nimport Textarea from 'components/fields/Textarea';\nimport Textfield from 'components/fields/Textfield';\nimport SelectDropdown from 'components/fields/SelectDropdown';\nimport Copy from 'components/typography/Copy';\nimport FileUpload from 'components/fields/FileUpload';\n\nconst StyledSection = styled(Section)`\n overflow: visible;\n`;\n\nconst FieldContainer = styled.div`\n max-width: 590px;\n margin: 0 auto;\n text-align: center;\n\n & > * + * {\n margin-top: ${spacings.spacer * 1.5}px;\n }\n`;\n\nexport interface FormStructure {\n [key: string]: Field | Area | Select | Datepicker | FieldGroup | 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 initalValue?: string;\n placeholder?: string;\n info?: string;\n icon?: { src: string; alt?: string };\n validate?: (value: string, config: Field) => Promise<string>;\n errorMsg?: string;\n}\n\nexport interface Area extends FormField {\n type: 'Area';\n initalValue?: string;\n placeholder?: string;\n info?: string;\n validate?: (value: string, config: Area) => Promise<string>;\n errorMsg?: string;\n}\n\nexport interface Select extends FormField {\n type: 'Select';\n initalValue?: string;\n placeholder?: string;\n dropdownItems: {\n value?: string;\n label?: string;\n }[];\n info?: string;\n icon?: { src: string; alt?: string };\n validate?: (value: string, config: Select) => Promise<string>;\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 icon?: { src: string; alt?: string };\n info?: string;\n\n singleDateError?: string;\n mutliDateError?: string;\n nextCtrlUrl?: string;\n prevCtrlUrl?: string;\n validate?: (\n value: [Date | null, Date | null],\n config: Datepicker\n ) => Promise<string>;\n deleteAction?: (\n handleClick: (e: React.SyntheticEvent<HTMLButtonElement, Event>) => void\n ) => React.ReactNode;\n submitAction?: (\n handleClick?: (\n e: React.SyntheticEvent<HTMLButtonElement, Event>\n ) => void\n ) => React.ReactNode;\n}\n\nexport interface FieldGroup extends FormField {\n type: 'FieldGroup';\n groupType: 'Radio' | 'Checkbox';\n fields: Array<{ initialChecked?: boolean; text?: string }>;\n validate?: (\n value: Array<string> | string,\n config: FieldGroup\n ) => Promise<string>;\n errorMsg?: string;\n}\n\nexport interface FileUpload extends FormField {\n type: 'Upload';\n addBtnLabel?: string;\n removeBtnLabel?: string;\n info?: string;\n acceptedFormats?: string;\n validate?: (value: Array<File>, config: FileUpload) => Promise<string>;\n errorMsg?: string;\n}\n\nexport interface FormData {\n [key: string]:\n | string\n | boolean\n | Array<string>\n | [Date | null, Date | null]\n | Array<File>;\n}\n\ntype FieldTypes = Field | Area | Select | Datepicker | FieldGroup | FileUpload;\n\ninterface FieldGenerationProps<T extends FieldTypes> {\n index: number;\n field: T;\n formikValues: FormData;\n formikErrors: FormikErrors<FormData>;\n formikTouches: FormikTouched<FormData>;\n key: string;\n isInverted: boolean;\n hasBg: 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}\n\nconst DynamicForm: FC<{\n fields?: FormStructure;\n submitLabel?: string;\n onSubmit?: (values: FormData) => Promise<void>;\n\n bgMode?: 'full' | 'inverted';\n}> = ({\n fields,\n submitLabel = 'senden',\n onSubmit,\n\n bgMode,\n}) => {\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\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).initalValue || '';\n break;\n case 'Area':\n initalData[key] = (fields[key] as Area).initalValue || '';\n break;\n case 'Select':\n initalData[key] = (fields[key] as Select).initalValue || '';\n break;\n case 'Datepicker':\n initalData[key] = (fields[key] as Datepicker).initialDates || [\n null,\n null,\n ];\n break;\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 inputType = config.inputType;\n\n // custom validation\n if (config.validate) {\n errors[key] = await config.validate(\n values[key] as string,\n config\n );\n break;\n }\n\n // default\n if (fields[key].isRequired && !values[key]) {\n errors[key] =\n (fields[key] as Field).errorMsg || 'Required field';\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] as Field).errorMsg ||\n 'Invalid Mail format';\n }\n break;\n case 'tel':\n // validator = validator.matches(\n // /^\\+(?:[0-9]⋅?){6,14}[0-9]$/,\n // 'Format der Telefonnummer ungültig'\n // );\n break;\n case 'number':\n if (\n values[key] &&\n !/^[+]?\\d+([.]\\d+)?$/gm.test(\n values[key] as string\n )\n ) {\n errors[key] = 'Zahlenformat ungültig';\n }\n break;\n }\n break;\n }\n case 'Area': {\n const config = fields[key] as Area;\n\n // custom validation\n if (config.validate) {\n errors[key] = await config.validate(\n values[key] as string,\n config\n );\n break;\n }\n\n // default\n if (config.isRequired && !values[key]) {\n errors[key] =\n (fields[key] as Area).errorMsg || 'Required field';\n }\n break;\n }\n case 'Select': {\n const config = fields[key] as Select;\n\n // custom validation\n if (config.validate) {\n errors[key] = await config.validate(\n values[key] as string,\n config\n );\n break;\n }\n\n // default\n if (config.isRequired && !values[key]) {\n errors[key] =\n (fields[key] as Select).errorMsg ||\n 'Required field';\n }\n break;\n }\n case 'Datepicker': {\n const config = fields[key] as Datepicker;\n const single = config.singleSelect;\n const value = values[key] as [Date | null, Date | null];\n\n // custom validation\n if (config.validate) {\n errors[key] = await config.validate(\n values[key] as [Date | null, Date | null],\n config\n );\n break;\n }\n\n // default\n if (config.isRequired && !values[key]) {\n errors[key] = single\n ? (fields[key] as Datepicker).singleDateError ||\n 'Please submit date!'\n : (fields[key] as Datepicker).mutliDateError ||\n 'Please submit start- and enddate!';\n break;\n }\n\n if (single && !value[0]) {\n errors[key] =\n (fields[key] as Datepicker).singleDateError ||\n 'Please submit date!';\n } else if (!single && (!value[0] || !value[1])) {\n errors[key] =\n (fields[key] as Datepicker).mutliDateError ||\n 'Please submit start- and enddate!';\n }\n break;\n }\n case 'FieldGroup': {\n const config = fields[key] as FieldGroup;\n const type = config.groupType;\n\n // custom validation\n if (config.validate) {\n errors[key] = await config.validate(\n values[key] as Array<string> | string,\n config\n );\n break;\n }\n\n // default\n if (type === 'Checkbox') {\n const selectValues = values[key] as string[];\n if (\n config.isRequired &&\n (!selectValues || selectValues?.length < 1)\n ) {\n errors[key] =\n (fields[key] as FieldGroup).errorMsg ||\n 'Please select at least one item!';\n }\n break;\n }\n if (type === 'Radio') {\n const value = values[key] as string;\n if (config.isRequired && !value) {\n errors[key] =\n (fields[key] as FieldGroup).errorMsg ||\n 'Selection required';\n }\n }\n break;\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 errors[key] = await config.validate(\n values[key] as Array<File>,\n config\n );\n break;\n }\n\n // default\n if (config.isRequired && (!files || files?.length < 1)) {\n errors[key] =\n (fields[key] as Field).errorMsg ||\n 'Please submit at least one file!';\n }\n break;\n }\n }\n }\n\n return errors;\n };\n\n // formik hook\n const {\n handleSubmit,\n handleChange,\n handleBlur,\n setFieldValue,\n setFieldTouched,\n setSubmitting,\n validateField,\n isSubmitting,\n touched,\n values,\n errors,\n dirty,\n } = useFormik<FormData>({\n initialValues: {\n ...initalData,\n } as FormData,\n\n onSubmit: async (values) => {\n onSubmit && (await onSubmit(values));\n setSubmitting(false);\n },\n validateOnBlur: true,\n validateOnChange: true,\n // validationSchema: schema,\n validate: validation,\n });\n\n const theme = useContext(ThemeContext);\n\n return (\n <StyledSection\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <form noValidate onSubmit={handleSubmit}>\n <FieldContainer>\n {fields &&\n Object.keys(fields)?.map((label, i) => {\n const generationProps = {\n index: i,\n field: fields[label],\n key: label,\n formikValues: values,\n formikErrors: errors,\n formikTouches: touched,\n isInverted: isInverted,\n hasBg: hasBg,\n setField: setFieldValue,\n setTouched: setFieldTouched,\n validateField: validateField,\n handleChange: handleChange,\n handleBlur: handleBlur,\n theme: theme,\n } as FieldGenerationProps<any>;\n\n switch (fields[label].type) {\n case 'Field':\n return generateField(generationProps);\n case 'Area':\n return generateArea(generationProps);\n case 'Datepicker':\n return generateDatepicker(\n generationProps\n );\n case 'FieldGroup': {\n if (\n (fields[label] as FieldGroup)\n .groupType === 'Checkbox'\n ) {\n return generateCheckboxGroup(\n generationProps\n );\n } else {\n return generateRadioGroup(\n generationProps\n );\n }\n }\n case 'Select':\n return generateSelect(generationProps);\n case 'Upload':\n return generateUpload(generationProps);\n default:\n return null;\n }\n })}\n {fields && submitLabel && (\n <Actions\n isCentered\n primary={\n <Button.View\n as=\"button\"\n isDisabled={isSubmitting || !dirty}\n {...{\n type: 'submit',\n }}\n >\n <Button.Label>\n {submitLabel}\n </Button.Label>\n </Button.View>\n }\n />\n )}\n </FieldContainer>\n </form>\n </Wrapper>\n </StyledSection>\n );\n};\n\nconst FieldHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: top;\n justify-content: space-between;\n padding-bottom: ${spacings.nudge * 3}px;\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n`;\n\nexport default DynamicForm;\n\nconst Fields = styled.div`\n & > * + * {\n margin-top: ${spacings.nudge * 1.5}px;\n }\n`;\n\nconst ErrorMessage = styled(Copy)`\n text-align: left;\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst generateCheckboxGroup = ({\n index,\n field,\n key,\n isInverted,\n formikValues,\n formikTouches,\n formikErrors,\n setTouched,\n validateField,\n setField,\n theme,\n}: FieldGenerationProps<FieldGroup>) => {\n const group = field;\n const groupData = formikValues[key] as string[];\n\n return (\n <div key={index}>\n <FieldHead>\n {key && (\n <Copy type=\"copy-b\" size=\"medium\">\n {`${key}${field.isRequired ? '*' : ''}`}\n </Copy>\n )}\n </FieldHead>\n <Fields>\n {group?.fields?.map((field, ci) => (\n <Checkbox\n key={ci}\n isInverted={isInverted}\n onClick={() => {\n // add key to form data array if not exists. Otherwise remove it\n if (field.text) {\n const cIndex = groupData.indexOf(field.text);\n if (cIndex === -1) {\n groupData.push(field.text);\n } else {\n groupData.splice(cIndex, 1);\n }\n // set formik values\n setField(key, groupData);\n setTouched(key, true);\n validateField(key);\n }\n }}\n onChange={() => ''}\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 {formikErrors[key] && formikTouches[key] && (\n <ErrorMessage textColor={color(theme).error} size=\"small\">\n {formikErrors[key]}\n </ErrorMessage>\n )}\n </div>\n );\n};\n\nconst generateRadioGroup = ({\n index,\n field,\n key,\n formikValues,\n formikErrors,\n formikTouches,\n isInverted,\n hasBg,\n setField,\n theme,\n}: FieldGenerationProps<FieldGroup>) => {\n const group = field;\n const groupData = formikValues[key] as string;\n\n return (\n <div key={index}>\n <FieldHead>\n {key && (\n <Copy type=\"copy-b\" size=\"medium\" isInverted={isInverted}>\n {`${key}${field.isRequired ? '*' : ''}`}\n </Copy>\n )}\n </FieldHead>\n <Fields>\n {group?.fields?.map((field, fi) => (\n <RadioButton\n key={fi}\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(key, e.currentTarget.value);\n }\n }}\n hasBg={!hasBg}\n />\n ))}\n </Fields>\n {formikErrors[key] && formikTouches[key] && (\n <ErrorMessage textColor={color(theme).error} size=\"small\">\n {formikErrors[key]}\n </ErrorMessage>\n )}\n </div>\n );\n};\n\nconst generateDatepicker = ({\n index,\n field,\n key,\n formikValues,\n formikErrors,\n formikTouches,\n isInverted,\n hasBg,\n setField,\n setTouched,\n validateField,\n}: FieldGenerationProps<Datepicker>) => {\n const dates = formikValues[key] as [Date | null, Date | null];\n\n return (\n <Datepicker\n key={index}\n onSubmit={async (start?: Date, end?: Date) => {\n await setField(key, [start, end]);\n await setTouched(key, true);\n validateField(key);\n }}\n values={[dates?.[0] as Date, dates?.[1] as Date]}\n label={`${key}${field.isRequired ? '*' : ''}`}\n placeholder={field.placeholder}\n icon={field.icon}\n singleSelect={field.singleSelect}\n infoMessage={field.info}\n errorMessage={\n formikErrors[key] && formikTouches[key]\n ? formikErrors[key]\n : undefined\n }\n name={key}\n isInverted={isInverted}\n hasBg={!hasBg}\n deleteAction={field.deleteAction}\n submitAction={field.submitAction}\n nextCtrlUrl={field.nextCtrlUrl}\n prevCtrlUrl={field.prevCtrlUrl}\n />\n );\n};\n\nconst generateArea = ({\n index,\n field,\n key,\n formikValues,\n formikErrors,\n formikTouches,\n isInverted,\n hasBg,\n handleChange,\n}: FieldGenerationProps<Area>) => (\n <Textarea\n key={index}\n label={`${key}${field.isRequired ? '*' : ''}`}\n placeholder={field.placeholder}\n name={key}\n value={formikValues[key] as string}\n isInverted={isInverted}\n onChange={handleChange}\n infoMessage={field.info}\n errorMessage={\n formikErrors[key] && formikTouches[key]\n ? formikErrors[key]\n : undefined\n }\n lightBg={hasBg}\n />\n);\n\nconst generateUpload = ({\n index,\n field,\n key,\n formikErrors,\n formikTouches,\n isInverted,\n hasBg,\n setField,\n}: FieldGenerationProps<FileUpload>) => (\n <FileUpload\n key={index}\n label={`${key}${field.isRequired ? '*' : ''}`}\n name={key}\n infoMessage={field.info}\n addBtnLabel={field.addBtnLabel}\n removeBtnLabel={field.removeBtnLabel}\n errorMessage={\n formikErrors[key] && formikTouches[key]\n ? formikErrors[key]\n : undefined\n }\n acceptedFormats={field.acceptedFormats}\n onUploadFiles={(files) => {\n setField(key, files);\n }}\n hasBg={!hasBg}\n isInverted={isInverted}\n />\n);\n\nconst generateField = ({\n index,\n field,\n key,\n formikValues,\n formikErrors,\n formikTouches,\n handleChange,\n isInverted,\n hasBg,\n}: FieldGenerationProps<Field>) => (\n <Textfield\n key={index}\n label={`${key}${field.isRequired ? '*' : ''}`}\n placeholder={field.placeholder}\n name={key}\n isInverted={isInverted}\n value={formikValues[key] as string}\n onChange={handleChange}\n infoMessage={field.info}\n errorMessage={\n formikErrors[key] && formikTouches[key]\n ? formikErrors[key]\n : undefined\n }\n lightBg={hasBg}\n />\n);\n\nconst generateSelect = ({\n index,\n field,\n key,\n formikValues,\n formikErrors,\n formikTouches,\n isInverted,\n hasBg,\n setField,\n setTouched,\n}: FieldGenerationProps<Select>) => (\n <SelectDropdown\n key={index}\n label={`${key}${field.isRequired ? '*' : ''}`}\n name={key}\n placeholder={field.placeholder}\n errorMessage={\n formikErrors[key] && formikTouches[key]\n ? formikErrors[key]\n : undefined\n }\n items={field.dropdownItems || []}\n value={formikValues[key] as string}\n onChange={(value) => {\n setField(key, value);\n setTouched(key, true);\n }}\n onBlur={() => setTouched(key, true, true)}\n icon={field.icon}\n isInverted={isInverted}\n hasBg={!hasBg}\n />\n);\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.form`\n width: 100%;\n display: flex;\n flex-direction: column;\n\n color: ${({ theme }) => color(theme).mono.dark};\n\n @media ${mq.medium} {\n flex-direction: row;\n }\n`;\n\nconst InputField = styled.input<{ backColor?: string }>`\n display: block;\n width: 100%;\n height: 100%;\n max-height: 49px;\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 3.5}px;\n color: inherit;\n\n background-color: ${({ backColor }) => backColor && backColor};\n box-shadow: none;\n border: none;\n border-right: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n font-family: ${({ theme }) => font(theme).copy.small.family};\n font-weight: ${({ theme }) => font(theme).copy.small.weight};\n ${({ theme }) => withRange(font(theme).copy.small.size, 'font-size')}\n line-height: ${({ theme }) => font(theme).copy.small.lineHeight};\n\n &::placeholder {\n color: inherit;\n }\n`;\n\nconst SubmitBtn = styled.button<{ isInverted?: boolean }>`\n display: inline-flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 49px;\n\n margin-top: ${spacings.spacer * 0.5}px;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).dark : color(theme).light};\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n transition: all ease-in-out 0.2s;\n\n @media ${mq.medium} {\n width: 100px;\n margin-top: 0;\n }\n\n &:hover {\n transform: scale(1.05);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst CompactForm: FC<{\n isInverted?: boolean;\n value?: string;\n placeholder?: string;\n method?: string;\n action?: string;\n buttonIcon?: React.ReactNode;\n onSubmit?: (ev: React.SyntheticEvent<HTMLFormElement>) => void;\n onClick?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onFocus?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onBlur?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n backgroundStyle?: 'white' | 'grey';\n className?: string;\n}> = ({\n isInverted = false,\n value,\n placeholder,\n method,\n action,\n buttonIcon,\n onSubmit,\n onClick,\n onBlur,\n onFocus,\n backgroundStyle = 'grey',\n className,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <View\n onSubmit={onSubmit}\n method={method}\n action={action}\n className={className}\n >\n <InputField\n placeholder={placeholder}\n value={value}\n onClick={onClick}\n onBlur={onBlur}\n onFocus={onFocus}\n backColor={\n backgroundStyle === 'grey' || isInverted\n ? color(theme).mono.light\n : color(theme).light\n }\n />\n {buttonIcon && (\n <SubmitBtn isInverted={isInverted}>{buttonIcon}</SubmitBtn>\n )}\n </View>\n );\n};\n\nexport default CompactForm;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.div<{ isInverted?: boolean }>`\n position: relative;\n width: 100%;\n display: flex;\n flex-direction: row;\n\n color: ${({ theme }) => color(theme).dark};\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).mono.light};\n`;\n\nconst InputField = styled.input<{\n hasLeftIcon?: boolean;\n hasRightIcon?: boolean;\n}>`\n display: block;\n width: 100%;\n height: 100%;\n padding: ${spacings.nudge * 3}px ${spacings.nudge * 3.5}px;\n padding-left: ${({ hasLeftIcon }) =>\n hasLeftIcon && spacings.spacer * 2.5 + 'px'};\n padding-right: ${({ hasRightIcon }) =>\n hasRightIcon && spacings.spacer * 2.5 + 'px'};\n color: inherit;\n\n background-color: transparent;\n box-shadow: none;\n border: none;\n border-right: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n font-family: ${({ theme }) => font(theme).copy.small.family};\n font-weight: 400;\n ${({ theme }) => withRange(font(theme).copy.small.size, 'font-size')}\n line-height: 1.25;\n\n &::placeholder {\n color: inherit;\n }\n`;\n\nconst ControlBtn = styled.button<{ isInverted?: boolean }>`\n display: inline-flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 53px;\n\n margin: -2px;\n background-color: transparent;\n color: ${({ theme }) => color(theme).dark};\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n /* transition: all ease-in-out 0.2s; */\n\n &:hover {\n transform: scale(1.02);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst SubmitBtn = styled(ControlBtn)`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n`;\n\nconst ClearBtn = styled(ControlBtn)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n`;\n\nconst SearchInput: FC<{\n isInverted?: boolean;\n value?: string;\n placeholder?: string;\n submitIcon?: React.ReactNode;\n clearIcon?: React.ReactNode;\n onSubmit?: () => void;\n onClear?: () => void;\n onClick?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onBlur?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onFocus?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n className?: string;\n}> = ({\n isInverted = false,\n value,\n placeholder,\n submitIcon,\n clearIcon,\n onSubmit,\n onClick,\n onClear,\n onBlur,\n onFocus,\n className,\n}) => {\n const handleKeyDown = (ev: React.KeyboardEvent<HTMLInputElement>) => {\n if (ev.keyCode === 13) {\n onSubmit && onSubmit();\n ev.preventDefault();\n }\n };\n\n return (\n <View isInverted={isInverted} className={className}>\n {submitIcon && (\n <SubmitBtn\n isInverted={isInverted}\n onClick={() => onSubmit && onSubmit()}\n >\n {submitIcon}\n </SubmitBtn>\n )}\n <InputField\n hasLeftIcon={submitIcon !== undefined}\n hasRightIcon={clearIcon !== undefined}\n placeholder={placeholder}\n value={value}\n onClick={onClick}\n onBlur={onBlur}\n onFocus={onFocus}\n onKeyDown={handleKeyDown}\n />\n {clearIcon && (\n <ClearBtn\n isInverted={isInverted}\n onClick={() => onClear && onClear()}\n >\n {clearIcon}\n </ClearBtn>\n )}\n </View>\n );\n};\n\nexport default SearchInput;\n","import { CookieConsentData } from 'components/blocks/CookieConsent';\nimport { Cookie } from './cookie';\nimport StatusFormatter from '../statusFormatter';\n\nexport const isUrlInWhitelist = (\n urlString: string,\n whitelist: string[] = []\n) => {\n let isInWhiteList = false;\n for (let i = 0; i < whitelist.length; i++) {\n if (urlString.indexOf(whitelist[i]) > -1) {\n isInWhiteList = true;\n break;\n }\n }\n return isInWhiteList;\n};\n\nexport const bindConsentButtons = (callback: () => void) => {\n const allConsentButtons = document.querySelectorAll(\n '[data-consent-button], .cookie-consent-button'\n );\n\n for (let i = 0, len = allConsentButtons.length; i < len; i++) {\n allConsentButtons[i].addEventListener('click', callback);\n }\n};\n\nexport const activateTrackingScripts = () => {\n const scriptElements = document.querySelectorAll(\n \"script[type='text/consent_banner_script'], script[type='text/cookie-consent-script']\"\n );\n\n let i = scriptElements.length;\n while (i--) {\n // create new script element to call it\n const newScriptElement = document.createElement('script');\n newScriptElement.type = 'text/javascript';\n newScriptElement.innerHTML = scriptElements[i].innerHTML;\n\n // append / activate script\n document.body.appendChild(newScriptElement);\n\n // delete old helper element\n if (scriptElements[i].parentNode) {\n // eslint-disable-next-line no-unused-expressions\n scriptElements[i].parentNode?.removeChild(scriptElements[i]);\n }\n }\n};\n\nexport const updateConsentStatusElements = ({\n cookie,\n status,\n dateFormat,\n timeFormat,\n localeKey = 'en',\n}: {\n cookie: Cookie<CookieConsentData>;\n status: string;\n dateFormat: string;\n timeFormat: string;\n localeKey: 'de' | 'en';\n}) => {\n const allConsentStatusElements = document.querySelectorAll(\n '[data-consent-status], .cookie-consent-status'\n );\n\n // render status inside defined dom elements without react\n const formatter = new StatusFormatter(\n cookie?.data.updatedAt,\n status,\n dateFormat,\n timeFormat,\n localeKey\n );\n\n for (let i = 0, len = allConsentStatusElements.length; i < len; i++) {\n allConsentStatusElements[i].innerHTML = formatter.getFormattedStatus();\n }\n};\n","import Actions from 'components/blocks/Actions';\nimport Copy from 'components/typography/Copy';\nimport React, { FC, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { Cookie, getCookie, setCookie } from 'utils/cookie-consent/cookie';\nimport {\n activateTrackingScripts,\n bindConsentButtons,\n isUrlInWhitelist,\n updateConsentStatusElements,\n} from 'utils/cookie-consent/mutations';\nimport { getColors as color, mq, spacings } from 'utils/styles';\n\nconst Stage = styled.div<{ zIndex?: number; bgOpacity?: number }>`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: rgba(0, 0, 0, ${({ bgOpacity }) => bgOpacity || 0.4});\n z-index: ${({ zIndex }) => zIndex || 1000};\n`;\n\nconst View = styled.div`\n box-sizing: border-box;\n max-width: 850px;\n width: 100vw;\n max-height: 100vh;\n padding: ${spacings.spacer}px ${spacings.spacer * 1.5}px;\n position: fixed;\n bottom: 0;\n left: 50%;\n transform: translate(-50%, 0);\n text-align: center;\n\n background-color: ${({ theme }) => color(theme).light};\n box-shadow: 0 2px 44px rgba(0, 0, 0, 0.3);\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n bottom: ${spacings.spacer * 1.5}px;\n }\n\n @media ${mq.medium} {\n padding: ${spacings.spacer * 2}px;\n }\n`;\n\nexport interface CookieConfig {\n cookieName?: string;\n\n /** URL's that should be excluded from consent */\n urlWhitelist?: string[];\n consentAcceptStatusMsg?: string;\n consentDeclineStatusMsg?: string;\n noCookieStatusMsg?: string;\n dateFormat?: string;\n timeFormat?: string;\n lifetime?: number;\n localeKey?: 'de' | 'en';\n zIndex?: number;\n overlayOpacity?: number;\n}\n\ntype RenderProps = {\n handleAccept: () => void;\n handleDecline: () => void;\n additionalDeclineProps: {\n ['data-gtm']: string;\n };\n additionalAcceptProps: {\n ['data-gtm']: string;\n };\n};\n\nexport interface CookieConsentData {\n consent: boolean;\n updatedAt: number;\n}\n\nexport const CookieConsent: FC<\n CookieConfig & {\n className?: string;\n children?: (props: RenderProps) => React.ReactElement;\n }\n> = ({\n cookieName = 'cookie-consent',\n urlWhitelist,\n consentAcceptStatusMsg = 'Akzeptiert am %DATE% um %TIME% Uhr',\n consentDeclineStatusMsg = 'Abgelehnt am %DATE% um %TIME% Uhr',\n noCookieStatusMsg = '-',\n dateFormat = 'dd.mm.yy',\n timeFormat = 'hh:mm',\n lifetime = 365,\n localeKey = 'de',\n zIndex,\n overlayOpacity = 0.4,\n className,\n children,\n}) => {\n const [isVisible, setIsVisible] = useState(false);\n\n useEffect(() => {\n bindConsentButtons(() => setIsVisible(true));\n\n const cookie = getCookie(cookieName) as Cookie<CookieConsentData>;\n const containsWhitelist = isUrlInWhitelist(\n window.location.pathname,\n urlWhitelist\n );\n if (!containsWhitelist) setIsVisible(!cookie);\n if (cookie && cookie.data.consent) {\n activateTrackingScripts();\n }\n }, [cookieName, urlWhitelist]);\n\n useEffect(() => {\n const cookie = getCookie(cookieName) as Cookie<CookieConsentData>;\n\n const str = !cookie\n ? noCookieStatusMsg\n : cookie.data.consent\n ? consentAcceptStatusMsg\n : consentDeclineStatusMsg;\n\n updateConsentStatusElements({\n cookie,\n status: str,\n dateFormat,\n timeFormat,\n localeKey,\n });\n }, [\n consentAcceptStatusMsg,\n consentDeclineStatusMsg,\n cookieName,\n dateFormat,\n isVisible,\n localeKey,\n noCookieStatusMsg,\n timeFormat,\n ]);\n\n if (!isVisible) return null;\n return (\n <Stage zIndex={zIndex} bgOpacity={overlayOpacity}>\n <View className={className}>\n {children &&\n children({\n handleDecline: () => {\n console.log('decline');\n setCookie<CookieConsentData>({\n name: cookieName,\n data: {\n consent: false,\n updatedAt: new Date().getTime(),\n },\n days: lifetime,\n });\n setIsVisible(false);\n },\n handleAccept: () => {\n console.log('accept');\n setCookie<CookieConsentData>({\n name: cookieName,\n data: {\n consent: true,\n updatedAt: new Date().getTime(),\n },\n days: lifetime,\n });\n setIsVisible(false);\n activateTrackingScripts();\n },\n additionalAcceptProps: {\n ['data-gtm']: 'button-cookie-consent-accept',\n },\n additionalDeclineProps: {\n ['data-gtm']: 'button-cookie-consent-decline',\n },\n })}\n </View>\n </Stage>\n );\n};\n\n/** Example Cookie icon */\nexport const CookieIcon = styled.img`\n display: block;\n margin: 0 auto;\n`;\n\n/** Example Cookie title */\nconst TitleView = styled(Copy)`\n max-width: 670px;\n margin-left: auto;\n margin-right: auto;\n`;\n\nexport const CookieTitle: FC<{\n innerHTML?: string;\n className?: string;\n}> = ({ innerHTML, className, children }) => {\n return (\n <TitleView\n size=\"big\"\n type=\"copy-b\"\n innerHTML={innerHTML}\n className={className}\n >\n {children}\n </TitleView>\n );\n};\n\n/** Example Cookie title */\nconst TextView = styled(Copy)`\n max-width: 670px;\n margin-left: auto;\n margin-right: auto;\n`;\n\nexport const CookieText: FC<{\n innerHTML?: string;\n className?: string;\n}> = ({ innerHTML, className, children }) => {\n return (\n <TextView innerHTML={innerHTML} className={className}>\n {children}\n </TextView>\n );\n};\n\n/** Example Cookie actions */\nexport const CookieActions = styled(Actions)`\n max-width: 670px;\n margin-top: ${spacings.spacer * 1.5}px;\n`;\n\nexport default CookieConsent;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Cross: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"35\"\n height=\"35\"\n viewBox=\"0 0 35 35\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M35 2.77995L32.2201 0 17.5 14.7201 2.77995 0 0 2.77995 14.7201 17.5 0 32.2201 2.77995 35 17.5 20.2799 32.2201 35 35 32.2201 20.2799 17.5 35 2.77995z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Cross;\n","import React, { FC, useContext } from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\n\nimport Wrapper from 'components/base/Wrapper';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\nimport Cross from 'components/base/icons/Cross';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { LogoProps } from '../Navigation';\n\nconst View = styled.div<{\n isOpen?: boolean;\n isMirrored?: boolean;\n isLarge?: boolean;\n}>`\n position: absolute;\n top: 0;\n left: ${({ isMirrored }) => !isMirrored && 0};\n right: ${({ isMirrored }) => isMirrored && 0};\n height: 100vh;\n width: 100%;\n overflow: hidden;\n pointer-events: none;\n\n ${({ isMirrored, isOpen, isLarge }) =>\n isLarge\n ? css`\n @keyframes showNav {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n display: ${isOpen ? 'block' : 'none'};\n animation: showNav 0.2s ease-in-out both;\n `\n : isMirrored && !isLarge\n ? css`\n transform: translate(${isOpen ? '0%' : '100%'});\n `\n : css`\n transform: translate(${isOpen ? '0%' : '-100%'});\n `}\n\n transition: transform 0.2s cubic-bezier(0.71, 0, 0.29, 1);\n will-change: transform;\n`;\n\nconst StyledWrapper = styled(Wrapper)`\n height: 100%;\n`;\n\nconst Stage = styled.div<{\n isOpen?: boolean;\n isLarge?: boolean;\n isInverted?: boolean;\n isMirrored?: boolean;\n}>`\n height: 100%;\n width: 100%;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).dark : color(theme).light};\n pointer-events: all;\n\n @media ${mq.semilarge} {\n width: ${({ isLarge }) => !isLarge && '40vw'};\n max-width: ${({ isLarge }) => (isLarge ? undefined : '500px')};\n }\n\n ${({ isMirrored, isInverted, isLarge }) =>\n isMirrored\n ? css`\n margin-left: auto;\n margin-right: 0;\n\n &:before {\n content: ${!isLarge && `\"\"`};\n position: absolute;\n top: 0;\n right: 1px;\n bottom: 0;\n width: 40vw;\n z-index: -1;\n\n transform: translateX(100%);\n\n background-color: ${({ theme }) =>\n isInverted ? color(theme).dark : color(theme).light};\n }\n `\n : css`\n &:after {\n content: ${!isLarge && `\"\"`};\n position: absolute;\n top: 0;\n left: 1px;\n bottom: 0;\n width: 40vw;\n\n transform: translateX(-100%);\n\n background-color: ${({ theme }) =>\n isInverted ? color(theme).dark : color(theme).light};\n }\n `}\n`;\n\nconst Header = styled.div`\n display: flex;\n max-width: ${spacings.wrapper}px;\n\n padding-top: ${spacings.spacer}px;\n padding-bottom: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 7}px 0 ${spacings.nudge * 3}px 0;\n }\n`;\n\nconst Content = styled.div<{ isLarge?: boolean }>`\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n max-width: ${spacings.wrapper}px;\n margin: 0 auto;\n\n padding-left: ${spacings.spacer}px;\n padding-bottom: ${spacings.nudge * 3}px;\n\n @media ${mq.semilarge} {\n padding-left: ${(1 / 28) * 100}%;\n padding-left: max(${spacings.spacer}px, ${(1 / 28) * 100}vw);\n padding-right: ${({ isLarge }) => isLarge && spacings.spacer + 'px'};\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst HeaderCol = styled.div`\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n position: relative;\n color: ${({ theme }) => color(theme).light};\n\n transition: padding-top 0.2s ease-in-out;\n`;\n\nconst LeftCol = styled(HeaderCol)<{ isMirrored?: boolean; isLarge?: boolean }>`\n flex: 1;\n justify-content: flex-start;\n align-self: flex-start;\n text-align: left;\n\n padding-right: ${({ isMirrored }) => isMirrored && spacings.spacer}px;\n\n ${withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n\n @media ${mq.semilarge} {\n display: ${({ isMirrored, isLarge }) =>\n isMirrored && isLarge && 'none'};\n }\n`;\n\nconst CenterCol = styled(HeaderCol)`\n padding: 0 ${spacings.nudge * 2}px;\n text-align: center;\n`;\n\nconst RightCol = styled(HeaderCol)`\n flex: 1;\n justify-content: flex-end;\n text-align: right;\n\n ${withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n\n & > * {\n min-width: auto;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n }\n`;\n\nconst ToggleContainer = styled.div<{\n iconColor?: string;\n isMirrored?: boolean;\n}>`\n cursor: pointer;\n padding: ${spacings.nudge * 2}px;\n /* padding-right: ${({ isMirrored }) => isMirrored && spacings.spacer}px; */\n margin: -${spacings.nudge * 2}px;\n\n color: ${({ iconColor }) => iconColor && iconColor};\n`;\n\nconst StyledMenuClose = styled(Cross)<{ isMirrored?: boolean }>`\n margin-top: ${spacings.nudge}px;\n`;\n\nconst SearchContainer = styled.div<{ isLarge?: boolean; isMirrored?: boolean }>`\n display: ${({ isLarge, isMirrored }) =>\n isMirrored && isLarge ? 'contents' : 'flex'};\n justify-content: center;\n width: 100%;\n padding-left: ${({ isMirrored }) => !isMirrored && spacings.spacer}px;\n padding-right: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n & > * {\n max-width: ${({ isLarge }) => isLarge && '355px'};\n }\n }\n`;\n\nconst LogoLink = styled(Link)`\n display: flex;\n justify-content: center;\n position: relative;\n\n color: ${({ theme }) => color(theme).light};\n transition: height 0.2s ease-in-out, width 0.2s ease-in-out;\n will-change: height, width;\n\n & > * {\n max-height: 100%;\n height: 100%;\n }\n`;\n\nconst ScrollArea = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n height: 100%;\n overflow-y: auto;\n\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')};\n margin-left: -${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n padding-bottom: ${spacings.spacer * 4.5}px;\n\n & > * {\n flex: 1 1 auto;\n flex-shrink: 0;\n }\n`;\n\nconst MirroredLargeContainerDesktop = styled(HeaderCol)`\n display: none;\n\n @media ${mq.semilarge} {\n display: flex;\n\n justify-content: flex-end;\n padding-left: ${spacings.spacer}px;\n\n ${withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n }\n`;\n\ntype FlyoutMq = 'semilarge' | 'large';\n\nconst Flyout: FC<{\n isOpen?: boolean;\n isLarge?: boolean;\n isInverted?: boolean;\n isMirrored?: boolean;\n toggleIcon?: (isInverted?: boolean) => React.ReactNode;\n logo?: LogoProps;\n primaryAction?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n secondaryAction?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n search?: (isInverted?: boolean) => React.ReactNode;\n onCloseClick?: () => void;\n className?: string;\n}> = ({\n isOpen = false,\n isLarge = false,\n isInverted = false,\n isMirrored = false,\n toggleIcon,\n logo,\n primaryAction,\n secondaryAction,\n search,\n onCloseClick,\n className,\n children,\n}) => {\n const theme = useContext(ThemeContext);\n const mqs: FlyoutMq[] = ['semilarge', 'large'];\n const currentMq = useMediaQuery(mqs) as FlyoutMq | undefined;\n\n return (\n <View\n isOpen={isOpen}\n className={className}\n isMirrored={isMirrored}\n isLarge={isLarge}\n >\n <StyledWrapper clampWidth={isLarge ? 'large' : 'normal'}>\n <Stage\n isOpen={isOpen}\n isLarge={isLarge}\n isInverted={isInverted}\n isMirrored={isMirrored}\n >\n <Content isLarge={isLarge}>\n <Header>\n {isMirrored && !isLarge ? (\n <LeftCol isMirrored>\n {search && (\n <SearchContainer isMirrored>\n {search(isInverted)}\n </SearchContainer>\n )}\n <ToggleContainer\n onClick={onCloseClick}\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {toggleIcon ? (\n toggleIcon(isInverted)\n ) : (\n <StyledMenuClose\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n )}\n </ToggleContainer>\n </LeftCol>\n ) : isMirrored && isLarge ? (\n <LeftCol isMirrored isLarge>\n {search && (\n <SearchContainer isMirrored>\n {search(isInverted)}\n </SearchContainer>\n )}\n <ToggleContainer\n onClick={onCloseClick}\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {toggleIcon ? (\n toggleIcon(isInverted)\n ) : (\n <StyledMenuClose\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n )}\n </ToggleContainer>\n </LeftCol>\n ) : (\n <LeftCol>\n <ToggleContainer\n onClick={onCloseClick}\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {toggleIcon ? (\n toggleIcon(isInverted)\n ) : (\n <StyledMenuClose\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n )}\n </ToggleContainer>\n {search && (\n <SearchContainer isLarge={isLarge}>\n {search(isInverted)}\n </SearchContainer>\n )}\n </LeftCol>\n )}\n\n {isLarge &&\n (currentMq === 'semilarge' ||\n currentMq === 'large') && (\n <>\n <CenterCol>\n {logo && (\n <LogoLink href={logo.link}>\n {logo.icon &&\n logo.icon({\n isInverted: isInverted,\n name: 'menu_logo',\n size:\n currentMq !==\n 'large'\n ? 'small'\n : 'full',\n })}\n </LogoLink>\n )}\n </CenterCol>\n <RightCol>\n {search && isMirrored && isLarge && (\n <SearchContainer\n isMirrored\n isLarge\n >\n {search(isInverted)}\n </SearchContainer>\n )}\n {secondaryAction &&\n secondaryAction({\n isInverted,\n name: 'menu_secondaryCta',\n size:\n currentMq === 'large'\n ? 'desktop'\n : 'mobile',\n })}\n {primaryAction &&\n primaryAction({\n isInverted,\n name: 'menu_primaryCta',\n size:\n currentMq === 'large'\n ? 'desktop'\n : 'mobile',\n })}\n {isMirrored && isLarge && (\n <MirroredLargeContainerDesktop>\n <ToggleContainer\n onClick={onCloseClick}\n iconColor={\n isInverted\n ? color(theme)\n .light\n : color(theme)\n .dark\n }\n >\n {toggleIcon ? (\n toggleIcon(\n isInverted\n )\n ) : (\n <StyledMenuClose\n iconColor={\n isInverted\n ? color(\n theme\n )\n .light\n : color(\n theme\n ).dark\n }\n />\n )}\n </ToggleContainer>\n </MirroredLargeContainerDesktop>\n )}\n </RightCol>\n </>\n )}\n </Header>\n <ScrollArea>{children}</ScrollArea>\n </Content>\n </Stage>\n </StyledWrapper>\n </View>\n );\n};\n\nexport interface NavGroup {\n id: string;\n name?: string;\n isSmall?: boolean;\n items?: NavItem[];\n}\n\nexport interface NavItem {\n id?: string;\n label?: string;\n link?: LinkProps;\n onClick?: (id?: string, fullId?: string) => void;\n}\n\nconst NavListView = styled.ul<{ isLarge?: boolean }>`\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n\n list-style: none;\n padding: 0;\n margin: 0;\n\n & > * {\n ${withRange([spacings.nudge * 3, spacings.spacer], 'margin-top')};\n }\n\n @media ${mq.medium} {\n flex-direction: ${({ isLarge }) => (isLarge ? 'row' : 'column')};\n\n & > * {\n flex: ${({ isLarge }) => (isLarge ? '1 0 260px' : '1')};\n }\n }\n`;\n\nconst Nav = styled.nav<{ isInverted?: boolean }>`\n display: block;\n width: calc(100% + ${spacings.spacer}px);\n margin-left: -${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n`;\n\nconst Group = styled.li`\n flex: 1 1 auto;\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: 300;\n line-height: ${({ theme }) => font(theme).copy.medium.lineHeight};\n\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-right')};\n\n hyphens: auto;\n overflow-wrap: break-word;\n\n &:not(:last-child) {\n ${withRange([spacings.nudge * 3, spacings.spacer], 'margin-bottom')};\n }\n`;\n\nconst GroupLabel = styled.label`\n display: block;\n height: 30px;\n padding-bottom: ${spacings.nudge * 2}px;\n`;\n\nconst GroupLabelSpacer = styled.label`\n display: none;\n height: 30px;\n\n @media ${mq.medium} {\n display: block;\n }\n`;\n\nconst ItemContainer = styled.ul`\n list-style: none;\n margin: 0;\n padding: 0;\n color: inherit;\n`;\n\nconst NavItem = styled.li<{ isSmall?: boolean }>`\n position: relative;\n margin: 0;\n padding-bottom: ${spacings.nudge}px;\n\n font-family: ${({ theme }) => font(theme)['heading-3'].family};\n ${({ theme, isSmall }) =>\n withRange(\n isSmall\n ? font(theme)['heading-4'].size\n : font(theme)['heading-3'].size,\n 'font-size'\n )}\n font-weight: 700;\n line-height: ${({ theme, isSmall }) =>\n isSmall\n ? font(theme)['heading-4'].lineHeight\n : font(theme)['heading-3'].lineHeight};\n\n color: inherit;\n hyphens: auto;\n overflow-wrap: break-word;\n cursor: pointer;\n user-select: none;\n\n & + & {\n padding-top: ${spacings.nudge}px;\n }\n\n & > li {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n`;\n\nconst ItemLink = styled(Link)`\n display: inline-block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n`;\n\nconst ItemLabel = styled.label<{ isActive?: boolean; isInverted?: boolean }>`\n display: inline-block;\n position: relative;\n border-bottom: solid 2px transparent;\n pointer-events: none;\n\n transition: border 0.2s ease-in-out;\n\n ${ItemLink}:hover + & {\n border-bottom: solid 2px ${({ theme }) => color(theme).primary.medium};\n }\n\n &:before {\n content: ${({ isActive }) => (isActive ? `\"\"` : undefined)};\n position: absolute;\n left: -13px;\n top: 50%;\n height: 6px;\n width: 6px;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 4px;\n\n transform: translateY(-50%);\n }\n`;\n\nconst NavList: FC<{\n isInverted?: boolean;\n activeNavItem?: string;\n navGroups?: NavGroup[];\n isLarge?: boolean;\n className?: string;\n}> = ({\n isInverted = false,\n activeNavItem,\n navGroups,\n isLarge = false,\n className,\n}) => {\n const [activeGroup, activeItem] = activeNavItem\n ? activeNavItem?.split('.')\n : [];\n\n return (\n <Nav isInverted={isInverted}>\n <NavListView isLarge={isLarge} className={className}>\n {navGroups &&\n navGroups.map((group, i) => (\n <Group key={i}>\n {group.name ? (\n <GroupLabel>{group.name}</GroupLabel>\n ) : (\n isLarge && <GroupLabelSpacer />\n )}\n <ItemContainer>\n {group.items &&\n group.items\n .filter((item) => {\n return item.label && item.link;\n })\n .map((item, itemIndex) => (\n <NavItem\n key={itemIndex}\n isSmall={group.isSmall}\n onClick={() =>\n item.onClick &&\n item.onClick(\n item.id,\n group.id + '.' + item.id\n )\n }\n >\n <ItemLink {...item.link} />\n <ItemLabel\n isActive={\n activeGroup ===\n group.id &&\n activeItem === item.id\n }\n isInverted={isInverted}\n >\n {item.label}\n </ItemLabel>\n </NavItem>\n ))}\n </ItemContainer>\n </Group>\n ))}\n </NavListView>\n </Nav>\n );\n};\n\nexport default {\n View: Flyout,\n NavList: NavList,\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { mq, spacings } from 'utils/styles';\nimport Flyout, { NavGroup } from './Flyout';\nimport SocialList from 'components/blocks/SocialList';\nimport { LogoProps } from '../Navigation';\n\nconst View = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n width: 100%;\n z-index: 10;\n`;\n\nconst Backdrop = styled.div<{\n isVisible?: boolean;\n opacity?: number;\n}>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100vh;\n background-color: rgba(\n 0,\n 0,\n 0,\n ${({ isVisible, opacity }) => (isVisible ? opacity : 0)}\n );\n\n pointer-events: ${({ isVisible }) => !isVisible && 'none'};\n transition: background-color 0.2s ease-in-out;\n`;\n\nconst SocialContainer = styled.div<{ isLarge?: boolean }>`\n display: flex;\n justify-content: flex-start;\n padding-top: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n justify-content: ${({ isLarge }) =>\n isLarge ? 'flex-end' : 'flex-start'};\n }\n\n @media ${mq.xlarge} {\n padding-right: ${({ isLarge }) => isLarge && spacings.spacer}px;\n }\n`;\ninterface MenuProps {\n isOpen?: boolean;\n size?: 'small' | 'full';\n isInverted?: boolean;\n isMirrored?: boolean;\n backdropOpacity?: number;\n toggleIcon?: (isInverted?: boolean) => React.ReactNode;\n logo?: LogoProps;\n primaryAction?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n secondaryAction?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n search?: (isInverted?: boolean) => React.ReactNode;\n activeNavItem?: string;\n navItems?: NavGroup[];\n socials?: Array<{ icon: React.ReactNode; href: string }>;\n onCloseClick?: () => void;\n}\n\nconst Menu: FC<MenuProps> = ({\n isOpen = false,\n size = 'small',\n isInverted = false,\n isMirrored = false,\n backdropOpacity = 0.4,\n toggleIcon,\n logo,\n primaryAction,\n secondaryAction,\n search,\n activeNavItem,\n navItems,\n socials,\n onCloseClick,\n}) => {\n return (\n <View>\n <Backdrop\n isVisible={isOpen}\n opacity={backdropOpacity}\n onClick={onCloseClick}\n />\n <Flyout.View\n isOpen={isOpen}\n isMirrored={isMirrored}\n isLarge={size === 'full'}\n isInverted={isInverted}\n onCloseClick={onCloseClick}\n toggleIcon={toggleIcon}\n logo={logo}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n search={search}\n >\n {navItems && (\n <Flyout.NavList\n activeNavItem={activeNavItem}\n navGroups={navItems}\n isLarge={size === 'full'}\n isInverted={isInverted}\n />\n )}\n {socials && (\n <SocialContainer isLarge={size === 'full'}>\n <SocialList\n isInverted={isInverted}\n items={socials.map((item) => {\n return {\n href: item.href,\n icon: item.icon,\n };\n })}\n />\n </SocialContainer>\n )}\n </Flyout.View>\n </View>\n );\n};\n\nexport default Menu;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst MenuBurger: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"31\"\n height=\"37\"\n viewBox=\"0 0 31 37\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fill={iconColor}\n d=\"M3.89556 33.59887c.05495.10804.10504.22107.15029.33926.04848.11472.09534.23122.14059.34932a11.78855 11.78855 0 01.1406-.35946c.04847-.1181.10018-.23122.15513-.33917l2.0749-4.0556c.02587-.05064.05172-.09113.07758-.12147.02909-.03035.0598-.05234.0921-.06587.03557-.01343.07435-.02189.11637-.02527s.0921-.00507.15028-.00507h.98413v7.32121H6.8286V31.9078c0-.08775.00162-.18396.00485-.28853a11.4408 11.4408 0 01.02423-.31897L4.73916 35.452c-.04848.09452-.1115.16874-.18907.22277-.07757.05064-.16806.0759-.2715.0759h-.17936c-.10343 0-.19392-.02526-.2715-.0759-.07755-.05403-.14059-.12825-.18906-.22277l-2.1476-4.16692c.01292.11143.021.22107.02423.32912.00647.10457.0097.20247.0097.2936v4.72895H.37607v-7.32121h.98413c.05817 0 .10827.00169.15028.00507s.07918.01184.11151.02527c.03555.01353.06787.03552.09696.06587s.05655.07083.08241.12147zM14.68715 29.31574v1.08346H11.5796v2.03034h2.44823v1.04805h-2.44823v2.07082h3.10754v1.08854h-4.42137v-7.32121zM17.37336 29.31574c.05815 0 .10665.00338.14539.01014.03883.00339.07279.01353.10186.03035.0323.01353.06304.03542.09211.06586.02908.02696.06138.06408.097.11133l3.6796 4.896a6.80536 6.80536 0 01-.02917-.34424c-.00322-.11481-.00478-.22107-.00478-.31897v-4.45047h1.14893v7.32121h-.67384c-.10343 0-.1891-.01691-.25692-.05064-.0679-.03373-.13416-.09452-.19875-.18227l-3.66508-4.8757c.00966.10795.0161.216.01932.32404.00654.10457.00976.20078.00976.28853v4.49604h-1.14903v-7.32121zM27.71523 35.53797c.25213 0 .47675-.04388.67385-.13163.20041-.08775.36843-.21103.50416-.36962.13904-.15869.24403-.351.31516-.57725.07436-.22614.11153-.47925.11153-.75942v-4.38461h1.30408v4.3846c0 .43549-.06791.83883-.20364 1.21013-.1325.36792-.32482.6869-.57686.95691-.25213.26664-.55753.47587-.91631.6278-.35869.14854-.76274.22276-1.21197.22276s-.85329-.07422-1.21197-.22276c-.35878-.15193-.66418-.36116-.91632-.6278-.2488-.27002-.44113-.58899-.57685-.9569-.1325-.37131-.19876-.77465-.19876-1.21013v-4.38461h1.30408v4.37954c0 .28016.03551.53337.10664.75952.07436.22614.17935.42015.31507.58222.13582.1586.30219.28187.49938.36962.20042.08775.4266.13163.67873.13163z\"\n />\n <path\n fill={iconColor}\n d=\"M.37597 1.2769h30.24794M7.25006 11.0904H30.6239M.37597 20.90398h30.24794M.37597.28198v1.98984h30.24794V.28198zm6.874 9.8132V12.085H30.6238v-1.98984zm-6.874 9.81319v1.98984h30.24794v-1.98984z\"\n />\n </SVG>\n);\n\nexport default MenuBurger;\n","import MenuBurger from 'components/base/icons/MenuBurger';\nimport Wrapper from 'components/base/Wrapper';\nimport Link from 'components/typography/Link';\nimport React, { FC, useContext, useEffect, useRef, useState } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { spacings, getColors as color, mq, withRange } from 'utils/styles';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { ScrollDirection, useScroll } from 'utils/useScroll';\nimport { LogoProps } from './Navigation';\n\nconst TopWhitespace = styled.div<{ height?: number; showLarge?: boolean }>`\n width: 100%;\n height: ${({ height, showLarge }) =>\n height ? height + (showLarge ? 25 : 10) + 'px' : '140px'};\n\n @media ${mq.large} {\n height: ${({ height, showLarge }) =>\n height ? height + (showLarge ? 50 : 30) + 'px' : '140px'};\n }\n`;\n\nconst View = styled.div<{\n isVisible?: boolean;\n isLarge?: boolean;\n isTop?: boolean;\n isOpen?: boolean;\n isInverted?: boolean;\n animated?: boolean;\n allowOffset?: boolean;\n isBackVisible?: boolean;\n showLarge?: boolean;\n}>`\n display: flex;\n align-items: ${({ showLarge }) => !showLarge && 'center'};\n position: ${({ isLarge }) => (isLarge ? 'absolute' : 'fixed')};\n top: 0;\n left: 0;\n right: 0;\n width: 100%;\n z-index: 10;\n max-width: ${spacings.wrapperLarge}px;\n min-height: ${({ isLarge, showLarge }) =>\n showLarge && isLarge ? '111px' : '95px'};\n padding: ${({ showLarge, isOpen }) =>\n !showLarge && isOpen ? spacings.nudge : spacings.spacer}px\n 0 ${spacings.nudge}px 0;\n margin: 0 auto;\n overflow: hidden;\n\n background-color: ${({\n theme,\n isInverted,\n isLarge,\n isBackVisible,\n allowOffset,\n }) =>\n isBackVisible\n ? isInverted\n ? (!isLarge || !allowOffset) &&\n `rgba(0, 0, 0, ${!isLarge ? 0.3 : 0})`\n : (!isLarge || !allowOffset) && color(theme).light\n : 'transparent'};\n\n box-shadow: 0px 4px 4px\n ${({ isInverted, isLarge, isOpen, isBackVisible }) =>\n isInverted || !isBackVisible\n ? `transparent`\n : isOpen && !isLarge\n ? `rgba(0, 0, 0, 0.13)`\n : 'transparent'};\n\n opacity: ${({ isVisible }) => (isVisible ? 1 : 0)};\n pointer-events: ${({ isVisible }) => (isVisible ? 'all' : 'none')};\n\n transform: translate(0, ${({ isOpen }) => (!isOpen ? '-100%' : '0')});\n\n transition: ${({ animated }) =>\n animated ? 'transform 0.3s cubic-bezier(.71,0,.29,1),' : ''}\n height 0.2s ease-in-out,\n background-color 0.3s ease-in-out, padding 0.2s ease-in-out,\n box-shadow 0.2s ease-in-out, opacity 0.2s ease-in-out;\n will-change: transform, background-color, padding, height, box-shadow,\n opacity;\n\n @media ${mq.semilarge} {\n padding: ${({ showLarge, isOpen }) =>\n !showLarge && isOpen\n ? spacings.nudge * 3\n : spacings.nudge * 7}px\n 0 ${spacings.nudge * 3}px 0;\n }\n\n @media ${mq.large} {\n min-height: ${({ isLarge, showLarge }) =>\n isLarge && showLarge ? '136px' : '115px'};\n }\n`;\n\nconst Content = styled(Wrapper)`\n position: relative;\n display: flex;\n flex-direction: row;\n width: 100%;\n height: 100%;\n\n padding: 0 ${({ addWhitespace }) => (addWhitespace ? spacings.spacer : 0)}px;\n\n @media ${mq.semilarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * 100 : 0}%;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * spacings.wrapper : 0}px;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n`;\n\nconst Column = styled.div<{\n isTop?: boolean;\n}>`\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n position: relative;\n color: ${({ theme }) => color(theme).light};\n\n transition: padding-top 0.2s ease-in-out;\n`;\n\nconst LeftCol = styled(Column)`\n flex: 1;\n justify-content: flex-start;\n align-self: ${({ isTop }) => (isTop ? 'flex-start' : 'center')};\n text-align: left;\n\n ${({ isTop }) =>\n isTop &&\n withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n`;\n\nconst CenterCol = styled(Column)`\n display: flex;\n align-self: ${({ isTop }) => (isTop ? 'flex-start' : 'center')};\n padding: 0 ${spacings.nudge * 2}px;\n text-align: center;\n`;\n\nconst RightCol = styled(Column)`\n flex: 1;\n justify-content: flex-end;\n align-self: ${({ isTop }) => (isTop ? 'flex-start' : 'center')};\n text-align: right;\n\n ${({ isTop }) =>\n isTop &&\n withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n\n & > * {\n min-width: auto;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n }\n`;\n\nconst ToggleContainer = styled.div<{\n iconColor?: string;\n isMirrored?: boolean;\n}>`\n cursor: pointer;\n padding: ${spacings.nudge * 2}px;\n margin: ${({ isMirrored }) => !isMirrored && -spacings.nudge * 2}px;\n\n color: ${({ iconColor }) => iconColor && iconColor};\n`;\n\nconst StyledMenuBurger = styled(MenuBurger)`\n margin-top: ${spacings.nudge}px;\n`;\n\nconst LogoLink = styled(Link)<{ logoHeight?: number; isAnimated?: boolean }>`\n display: flex;\n justify-content: center;\n position: relative;\n height: ${({ logoHeight }) => logoHeight && logoHeight + 'px'};\n width: auto;\n\n color: ${({ theme }) => color(theme).light};\n transition: ${({ isAnimated }) =>\n isAnimated && 'height 0.2s ease-in-out, width 0.2s ease-in-out'};\n will-change: height, width;\n\n & > * {\n max-height: 100%;\n height: 100%;\n }\n`;\n\nconst clampValue = (num: number, min: number, max: number) => {\n return Math.min(Math.max(num, min), max);\n};\n\ntype TopBarMq = 'semilarge' | 'large';\n\nconst TopBar: FC<{\n isVisible?: boolean;\n isBackVisible?: boolean;\n isInverted?: boolean;\n isMirrored?: boolean;\n allowTopOverlow?: boolean;\n isLargeOnPageTop?: boolean;\n onToggleClick?: () => void;\n toggleIcon?: (isInverted?: boolean) => React.ReactNode;\n logo?: LogoProps;\n primaryAction?: (props: {\n isInverted?: boolean;\n size?: 'mobile' | 'desktop';\n name?: string;\n }) => React.ReactNode;\n secondaryAction?: (props: {\n isInverted?: boolean;\n size?: 'mobile' | 'desktop';\n name?: string;\n }) => React.ReactNode;\n className?: string;\n}> = ({\n isVisible = true,\n isInverted = false,\n isMirrored = false,\n isBackVisible = true,\n allowTopOverlow = true,\n isLargeOnPageTop = true,\n onToggleClick,\n toggleIcon,\n logo,\n primaryAction,\n secondaryAction,\n className,\n}) => {\n const theme = useContext(ThemeContext);\n const viewRef = useRef<HTMLDivElement | null>(null);\n const [isOpen, setIsOpen] = useState(true);\n const [isLarge, setIsLarge] = useState<boolean>(isLargeOnPageTop);\n const [isAnimated, setIsAnimated] = useState(false);\n const defaultLogoScale: Pick<\n LogoProps,\n 'pageTopScale' | 'scrolledScale'\n > = {\n pageTopScale: {\n mobile: 1,\n desktop: 1,\n ...logo?.pageTopScale,\n },\n scrolledScale: {\n mobile: 0.6,\n desktop: 0.6,\n ...logo?.scrolledScale,\n },\n };\n\n const mqs: TopBarMq[] = ['semilarge', 'large'];\n const currentMq = useMediaQuery(mqs) as TopBarMq | undefined;\n\n const { isTop, isInOffset, scrollDirection, setTopOffset } = useScroll({});\n\n useEffect(() => {\n setIsAnimated(true);\n }, []);\n\n useEffect(() => {\n if (!isInOffset) {\n if (scrollDirection === ScrollDirection.UP) {\n setIsOpen(true);\n setIsAnimated(true);\n } else if (scrollDirection === ScrollDirection.DOWN) {\n setIsOpen(false);\n }\n }\n }, [isInOffset, scrollDirection]);\n\n useEffect(() => {\n if (!isInOffset && !isTop) {\n setIsLarge((prev) => {\n if (prev) setIsAnimated(false);\n return false;\n });\n }\n }, [isInOffset, isLarge, isTop]);\n\n useEffect(() => {\n if (isTop) setIsLarge(true);\n }, [isLargeOnPageTop, isTop]);\n\n // check if top bar is inverted\n const isBarInverted =\n (isLarge && allowTopOverlow) || isInverted || !isBackVisible;\n\n // get scale factor of topbar logo\n let logoScale = 1;\n // get scale for current media query\n const scalePageTop =\n defaultLogoScale.pageTopScale?.[\n currentMq === 'large' ? 'desktop' : 'mobile'\n ];\n const scaleScrolled =\n defaultLogoScale.scrolledScale?.[\n currentMq === 'large' ? 'desktop' : 'mobile'\n ];\n\n const scale = (isLargeOnPageTop ? isLarge : false)\n ? scalePageTop\n : scaleScrolled;\n if (scale !== undefined) logoScale = scale;\n\n // calc logo height\n const logoHeight = clampValue(115 * logoScale, 20, 300);\n const logoTopHeight =\n scalePageTop && scaleScrolled\n ? clampValue(\n 115 * (isLargeOnPageTop ? scalePageTop : scaleScrolled),\n 20,\n 300\n )\n : 60;\n const topSpace = clampValue(logoTopHeight, 86, 300);\n\n // calculate top scroll offset\n useEffect(() => {\n if (currentMq === 'large') {\n setTopOffset(topSpace + (isLarge ? 25 : 10));\n } else {\n setTopOffset(topSpace + (isLarge ? 50 : 30));\n }\n }, [setTopOffset, currentMq, isLarge, topSpace]);\n\n return (\n <>\n {!allowTopOverlow && (\n <TopWhitespace showLarge={isLargeOnPageTop} height={topSpace} />\n )}\n <View\n ref={viewRef}\n isInverted={isInverted}\n isVisible={isVisible}\n isBackVisible={isBackVisible}\n isOpen={isOpen}\n isLarge={isLarge}\n animated={isAnimated}\n allowOffset={allowTopOverlow}\n showLarge={isLargeOnPageTop ? isLarge : false}\n className={className}\n >\n <Content clampWidth=\"normal\" addWhitespace>\n {!isMirrored && (\n <LeftCol isTop={isLargeOnPageTop ? isLarge : false}>\n <ToggleContainer\n onClick={onToggleClick}\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {toggleIcon ? (\n toggleIcon(isBarInverted)\n ) : (\n <StyledMenuBurger\n iconColor={\n isBarInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n )}\n </ToggleContainer>\n </LeftCol>\n )}\n <CenterCol isTop={isLargeOnPageTop ? isLarge : false}>\n {logo && (\n <LogoLink\n href={logo.link}\n logoHeight={logoHeight}\n isAnimated={isAnimated}\n >\n {logo.icon &&\n logo.icon({\n isInverted: isBarInverted,\n name: 'topbar_logo',\n size:\n currentMq !== 'large' ||\n !(isLargeOnPageTop\n ? isLarge\n : false)\n ? 'small'\n : 'full',\n })}\n </LogoLink>\n )}\n </CenterCol>\n <RightCol isTop={isLargeOnPageTop ? isLarge : false}>\n {secondaryAction &&\n secondaryAction({\n isInverted: isBarInverted,\n name: 'topbar_secondaryCta',\n size:\n currentMq === 'large'\n ? 'desktop'\n : 'mobile',\n })}\n {primaryAction &&\n primaryAction({\n isInverted: isBarInverted,\n name: 'topbar_primaryCta',\n size:\n currentMq === 'large'\n ? 'desktop'\n : 'mobile',\n })}\n {isMirrored && (\n <ToggleContainer\n onClick={onToggleClick}\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n isMirrored\n >\n {toggleIcon ? (\n toggleIcon(isBarInverted)\n ) : (\n <StyledMenuBurger\n iconColor={\n isBarInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n )}\n </ToggleContainer>\n )}\n </RightCol>\n </Content>\n </View>\n </>\n );\n};\n\nexport default TopBar;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowRight: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"18\"\n height=\"13\"\n viewBox=\"0 0 18 13\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M1.85397 7.42546H14.5657L10.533 11.4322c-.1753.1887-.263.4064-.263.6532 0 .2468.0877.4646.263.6533.1899.1742.4091.2613.6575.2613.2484 0 .4676-.0871.6575-.2613l5.6107-5.57454c.0438-.05807.0876-.10888.1315-.15243.0438-.04356.0657-.08711.0657-.13066.0439-.10162.0658-.21775.0658-.34841 0-.13065-.0219-.2613-.0658-.39196-.0438-.05806-.0767-.10887-.0986-.15242-.0219-.04356-.0548-.08711-.0986-.13066L11.848.28308c-.0877-.10162-.1826-.1742-.2849-.21775C11.4608.02178 11.3366 0 11.1905 0c-.1315 0-.2484.02178-.3507.06533s-.2045.11613-.3068.21775c-.1753.18873-.263.40648-.263.65327s.0877.46454.263.65327l4.0327 3.98492H1.85397c-.29223 0-.52235.08347-.69038.25042s-.25204.39559-.25204.68593c0 .27582.08401.49721.25204.66415.16803.16695.39815.25042.69038.25042z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default ArrowRight;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst CrossSmall: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 35 35\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M35 2.77995L32.2201 0 17.5 14.7201 2.77995 0 0 2.77995 14.7201 17.5 0 32.2201 2.77995 35 17.5 20.2799 32.2201 35 35 32.2201 20.2799 17.5 35 2.77995z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default CrossSmall;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Magnifier: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M19.6955 18.267l-4.4964-4.4965c.5464-.687.9836-1.491 1.3114-2.4122.3279-.9211.4918-1.88132.4918-2.88055 0-1.17096-.2263-2.27165-.6791-3.3021-.4372-1.03045-1.0422-1.92818-1.815-2.69321-.7728-.76504-1.6745-1.37393-2.7049-1.8267C10.7728.21858 9.67214 0 8.50117 0S6.22951.21858 5.19906.65574c-1.03045.45277-1.93208 1.06166-2.70492 1.8267-.77283.76503-1.37782 1.66276-1.81498 2.69321C.22638 6.2061 0 7.30679 0 8.47775c0 1.18658.22638 2.29505.67916 3.32555.43716 1.0304 1.04215 1.9282 1.81498 2.6932.77284.765 1.67447 1.3739 2.70492 1.8267 1.03045.4371 2.13114.6557 3.30211.6557.99922 0 1.94383-.1639 2.83373-.4918.8899-.3278 1.7096-.765 2.459-1.3115l4.4965 4.4965c.1093.1093.2303.1874.363.2342.1327.0469.2459.0703.3396.0703s.2068-.0234.3396-.0703c.1327-.0468.2537-.1249.3629-.2342.203-.2029.3045-.4371.3045-.7025 0-.2655-.1015-.4996-.3045-.7026zM2.01405 8.47775c0-.88993.16393-1.73301.4918-2.52927.34349-.78065.80796-1.4676 1.39345-2.06089.58548-.59329 1.27634-1.05386 2.0726-1.38173.78064-.34349 1.62372-.51523 2.52927-.51523.90555 0 1.74863.17174 2.52923.51523.7963.32787 1.4872.78844 2.0726 1.38173.5855.59329 1.05 1.28024 1.3935 2.06089.3279.79626.4918 1.63934.4918 2.52927 0 .90555-.1639 1.74865-.4918 2.52925-.3279.7807-.7963 1.4754-1.4052 2.0843-.5933.5933-1.2802 1.0578-2.0609 1.3935-.7806.3357-1.62368.5035-2.52923.5035-.90555 0-1.74863-.1717-2.52927-.5152-.79626-.3435-1.48712-.808-2.0726-1.3935-.58549-.5855-1.04996-1.2763-1.39345-2.0726-.32787-.7806-.4918-1.6237-.4918-2.52925z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Magnifier;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst FlyTo: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"52\"\n height=\"52\"\n viewBox=\"0 0 52 52\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M26 31.8229c1.5347 0 2.8889-.5868 4.0625-1.7604S31.8229 27.5347 31.8229 26s-.5868-2.8889-1.7604-4.0625S27.5347 20.1771 26 20.1771s-2.8889.5868-4.0625 1.7604S20.1771 24.4653 20.1771 26s.5868 2.8889 1.7604 4.0625S24.4653 31.8229 26 31.8229zm0-17.3333c3.1597 0 5.868 1.1284 8.125 3.3854 2.257 2.257 3.3854 4.9653 3.3854 8.125s-1.1284 5.868-3.3854 8.125c-2.257 2.257-4.9653 3.3854-8.125 3.3854s-5.868-1.1284-8.125-3.3854c-2.257-2.257-3.3854-4.9653-3.3854-8.125s1.1284-5.868 3.3854-8.125c2.257-2.257 4.9653-3.3854 8.125-3.3854zm20.1771 31.6875V34.6667H52v11.5104c0 1.5347-.5868 2.8889-1.7604 4.0625S47.7118 52 46.1771 52H34.6667v-5.8229h11.5104zm0-46.1771c1.5347 0 2.8889.5868 4.0625 1.76042C51.4132 2.93403 52 4.28819 52 5.82292V17.3333h-5.8229V5.82292H34.6667V0h11.5104zM5.82292 5.82292V17.3333H0V5.82292c0-1.53473.5868-2.88889 1.76042-4.0625C2.93403.5868 4.28819 0 5.82292 0H17.3333v5.82292H5.82292zm0 28.84378v11.5104H17.3333V52H5.82292c-1.53473 0-2.88889-.5868-4.0625-1.7604C.5868 49.066 0 47.7118 0 46.1771V34.6667h5.82292z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default FlyTo;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Star: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"34\"\n height=\"32\"\n viewBox=\"0 0 34 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M33.9231 12.1154l-11.8504-1.5523L16.9615 0l-5.1111 10.5631L0 12.1154l8.70793 7.9128L6.47416 31.5l10.48734-5.6412L27.4489 31.5l-2.2338-11.4718 8.708-7.9128z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Star;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst StarGhost: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"33\"\n height=\"31\"\n viewBox=\"0 0 33 31\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M32.0408 11.6671c-.0682-.2762-.2045-.4948-.409-.6559-.2045-.161-.4544-.2876-.7498-.3797l-9.3041-1.31165L17.3518.79391C17.1474.26463 16.7157 0 16.0568 0c-.6589 0-1.0906.26464-1.2951.79391l-4.2261 8.38787-9.16781 1.44972c-.29537 0-.55098.1036-.76683.3107-.21584.2071-.39193.4487-.52825.7249-.09089.2991-.09657.5868-.01704.8629.07952.2762.22152.4833.42601.6214l6.71398 6.6274-1.60181 9.4234c-.06816.2992-.04544.5811.06816.8457.11361.2646.28401.4775.51122.6386.20449.1381.44873.2301.73274.2761.28401.0461.5737 0 .86907-.138l8.28176-4.4183 8.2817 4.4183h.7498c.1363 0 .2783-.0288.426-.0863.1477-.0576.2897-.1324.426-.2244.2272-.1381.3976-.3394.5112-.6041.1136-.2646.1363-.5465.0682-.8457l-1.6019-9.4234 6.714-6.6274c.2045-.1611.3465-.3682.426-.6213.0796-.2532.0739-.4948-.017-.7249zm-9.7472 6.4894c-.1363.2301-.2386.4544-.3067.6731-.0682.2186-.1023.4314-.1023.6385l1.1588 7.2488-6.4073-3.4173c-.2272-.138-.4487-.2071-.6645-.2071-.2159 0-.4261.0691-.6305.2071l-6.4073 3.4173 1.2951-7.2488c0-.2071-.0341-.4199-.1023-.6385-.0681-.2187-.17037-.443-.30669-.6731l-5.2485-5.0051 7.12299-1.0356c.2272 0 .443-.0863.6475-.2589.2045-.1726.3749-.3279.5112-.466l3.2037-6.62742 3.2036 6.48942c.0681.2071.2045.3797.409.5177.2044.1381.4544.2071.7497.2071l7.123 1.0356-5.2485 5.1432z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default StarGhost;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Mail: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"25\"\n height=\"25\"\n viewBox=\"0 0 25 25\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fill={iconColor}\n d=\"M22.3988 2.6786c.61982 0 1.16669.24181 1.64061.72545.47402.48363.71098 1.0417.71098 1.6741v14.844c0 .6324-.23696 1.1905-.71098 1.6741-.47392.4836-1.0208.7255-1.64061.7255H2.60173c-.61979 0-1.16669-.2419-1.64061-.7255s-.71094-1.0417-.71094-1.6741v-14.844c0-.63244.23698-1.1905.71094-1.6741.47396-.48363 1.0208-.72545 1.64061-.72545zm-.27349 5.0781V5.3571l-9.62495 6.529-9.62504-6.529v2.3996l9.62504 6.529z\"\n />\n </SVG>\n);\n\nexport default Mail;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Phone: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"25\"\n height=\"25\"\n viewBox=\"0 0 25 25\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fill={iconColor}\n d=\"M23.92962 18.18155c1.4269 1.42053 1.4269 2.98303 0 4.6876-.57072.66283-1.12955 1.16-1.6765 1.49142-.54693.33151-.99875.52086-1.35545.56825-.3567.04729-.86797.07098-1.53382.07098-1.85494 0-4.06648-.94696-6.63472-2.84087-2.04518-1.46783-3.90002-3.05402-5.56462-4.75858-2.1402-2.22543-4.01882-4.75858-5.63596-7.59946C.10175 7.14937-.3263 4.97133.24443 3.26676c.28537-.89961.9512-1.68086 1.99752-2.3438l.07134-.07102c.8561-.56818 1.61704-.85227 2.28288-.85227.90366 0 1.71216.42613 2.42556 1.27837l.07134.07103C8.18695 2.7695 8.94791 3.88222 9.37595 4.6871c.7134 1.46782.68962 2.7225-.07134 3.76424-.57072.75758-.85608 1.30206-.85608 1.63348 0 .14206.30914.56825.92742 1.27847l.07134.07098c1.14144 1.27848 1.75972 1.965 1.85484 2.05968.04756 0 .09512.02369.14268.07108.04756.04729.09512.09467.14278.14196l.14268.14207c.9512.94705 1.64082 1.60988 2.06886 1.98869l.07134.07098c.42804.3788.7134.56825.85608.56825.2378 0 .92742-.3551 2.06886-1.06542.33292-.23674.73718-.35511 1.21288-.35511.85608 0 1.89052.3551 3.1033 1.06542 1.21278.71022 2.15209 1.39675 2.81793 2.05958z\"\n />\n </SVG>\n);\n\nexport default Phone;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Route: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"29\"\n height=\"30\"\n viewBox=\"0 0 29 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M28.629 13.5725L15.4275.371C15.1802.12367 14.871 0 14.5 0s-.6802.12367-.9275.371L.371 13.5725c-.24733.2679-.371.5823-.371.943 0 .3607.12367.6647.371.912L13.5725 28.629c.2473.2679.5565.4019.9275.4019s.6802-.134.9275-.4019L28.629 15.4275c.2473-.2473.371-.5513.371-.912s-.1237-.6751-.371-.943zm-11.5011 4.2356V14.5h-6.5853v3.9574H7.91471v-5.2559c0-.371.12882-.6853.38646-.943.25765-.2576.56166-.3864.91205-.3864h7.91468V8.56397l4.6376 4.63753-4.6376 4.6066z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Route;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Facebook: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M26.6012 0H3.32515C1.48872 0 0 1.48872 0 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H14.9832v.0053h4.9877v-.0053h6.6303c1.8364 0 3.3252-1.4888 3.3252-3.3252V3.32515C29.9264 1.48872 28.4376 0 26.6012 0zm-6.6303 29.9264V18.2937h4.9877V13.306h-4.9877V9.98081c0-.91821.7444-1.66257 1.6626-1.66257h3.3251V3.33051h-4.1564c-3.2138 0-5.819 2.60526-5.819 5.81902V13.306H11.658v4.9877h3.3252v11.6327h4.9877z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Facebook;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst LinkedIn: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M29.9752 3.32515C29.9752 1.48872 28.4865 0 26.65 0H3.37398C1.53755 0 .04883 1.48872.04883 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H26.65c1.8365 0 3.3252-1.4888 3.3252-3.3252V3.32515zM25.7835 16.9523v8.8116h-4.6386v-8.1965c0-1.2855-1.0421-2.3276-2.3276-2.3276-1.2802 0-2.311 1.0475-2.311 2.3276v8.1965h-4.6386V11.8482h4.6386v1.8454c.7981-1.2968 2.444-2.1613 3.8572-2.1613 2.9934 0 5.42 2.4266 5.42 5.42zM6.487 9.24675c1.54261 0 2.79313-1.25053 2.79313-2.79313 0-1.54619-1.24693-2.80975-2.79313-2.80975-1.55178 0-2.80975 1.25797-2.80975 2.80975 0 1.5462 1.26356 2.79313 2.80975 2.79313zM8.77571 11.855v13.9157H4.17037V11.855h4.60534z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default LinkedIn;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Twitter: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M26.6735 0H3.39742C1.56099 0 .07227 1.48872.07227 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H26.6735c1.8364 0 3.3251-1.4888 3.3251-3.3252V3.32515C29.9986 1.48872 28.5099 0 26.6735 0zm.0131 8.17421c-.4157.88117-1.3467 1.6792-2.1448 2.34419-.1163 7.6811-5.0209 12.9349-12.3529 13.2674-3.02588.133-5.20385-.8313-7.11582-2.045 2.22785.3492 4.98772-.532 6.48402-1.7956-2.19457-.2327-3.47475-1.3466-4.08991-3.1256.63178.0998 1.29681.0665 1.89534-.0499-1.97847-.665-3.39166-1.8953-3.45816-4.4557.54865.266 1.13055.4988 1.89534.5487-1.4797-.8479-2.56037-3.9237-1.31344-5.95204 2.1946 2.41073 4.83813 4.37254 9.17743 4.63854-1.0973-4.65517 5.0708-7.18228 7.6478-4.07327 1.0973-.19951 1.9785-.59853 2.843-1.06405-.3491 1.06405-1.0308 1.84546-1.862 2.44399.8978-.11638 1.7124-.33252 2.3941-.68166z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Twitter;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Xing: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.04732 0C1.38475 0 .05469 1.33006.05469 2.99264V26.9337c0 1.6626 1.33006 2.9927 2.99263 2.9927H26.9884c1.6626 0 2.9926-1.3301 2.9926-2.9927V2.99264C29.981 1.33006 28.651 0 26.9884 0H3.04732zM21.782 3.33051h3.3917c.1995 0 .3657.06651.4323.21614.0997.14963.0997.33251 0 .5154L18.1742 17.2296l4.7384 8.6454c.0997.1829.0997.3658 0 .5154-.0831.133-.2328.2162-.4157.2162h-3.375c-.5154 0-.7814-.3492-.931-.6484l-4.7716-8.7452c.2327-.4156 7.4649-13.23408 7.4649-13.23408.1829-.33252.3991-.64841.8978-.64841zM10.1943 7.91799H6.85251c-.21613 0-.38239.08313-.46552.21614-.09975.18288-.0665.33251.01663.5154l2.2611 3.94027-3.55791 6.3012c-.0665.1829-.0665.3824 0 .5154.08313.1496.23276.2327.43227.2327h3.3584c.5154 0 .74816-.3325.93104-.6484 0 0 3.47478-6.1681 3.62438-6.4009L11.142 8.5664c-.1663-.31589-.4323-.64841-.9477-.64841z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Xing;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Instagram: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M25.6051 4.3945C22.67541 1.46476 19.1403 0 14.99951 0S7.32378 1.46486 4.39391 4.3945C1.46424 7.3242-.00061 10.85933-.00061 14.99987s1.46485 7.67574 4.39454 10.60538c2.92969 2.92972 6.4648 4.39458 10.6056 4.39458s7.67572-1.46486 10.60558-4.39458c2.9297-2.92964 4.39454-6.46476 4.39454-10.60538S28.5348 7.32413 25.6051 4.39449zm-1.23745 14.4139c0 1.56243-.53708 2.8808-1.61126 3.955-1.07426 1.0742-2.3926 1.61136-3.95511 1.61136h-7.61715c-1.52343 0-2.81252-.52735-3.8672-1.58204-1.05467-1.0547-1.6211-2.34374-1.69917-3.86715v-7.85156c.03906-1.5234.60546-2.81245 1.69917-3.86715 1.09376-1.05469 2.38277-1.58204 3.8672-1.58204h7.61715c1.56251 0 2.88085.5371 3.95511 1.61136 1.07418 1.0742 1.61126 2.39257 1.61126 3.9551zM18.81568 7.49976h-7.61714c-1.01568 0-1.88477.36132-2.60744 1.084-.72265.72268-1.08401 1.59176-1.08401 2.60742v7.6172c0 1.01558.36133 1.88474 1.084 2.60742.72268.72258 1.59177 1.08392 2.60745 1.08392h7.61714c1.01568 0 1.88477-.36134 2.60744-1.08392.72267-.72268 1.08392-1.59184 1.08392-2.60742v-7.6172c0-.97655-.37108-1.83591-1.11326-2.5781-.74217-.7422-1.6015-1.11332-2.5781-1.11332zm-.12235 11.19256c-.9766.97655-2.12885 1.46477-3.45703 1.46477-1.32809 0-2.48043-.48822-3.45702-1.46477-.9765-.97663-1.46485-2.1289-1.46485-3.45707 0-1.32808.48834-2.48043 1.46485-3.45698.97659-.97663 2.12893-1.46485 3.45702-1.46485 1.32818 0 2.48044.48822 3.45703 1.46485.9766.97655 1.46485 2.1289 1.46485 3.45698 0 1.32817-.48825 2.48044-1.46485 3.45707zm2.05094-7.79465c-.23442.23436-.50783.35154-.82034.35154s-.58592-.11718-.82034-.35154c-.23433-.23444-.3515-.50783-.3515-.82033s.11717-.58598.3515-.82034c.23442-.23435.50784-.35153.82034-.35153s.58592.11718.82034.35153c.23434.23436.3515.50783.3515.82034s-.11716.5859-.3515.82033zm-3.39449 2.22734c-.58592-.58598-1.289-.87897-2.10935-.87897s-1.52343.293-2.10935.87897c-.58592.5859-.87892 1.28905-.87892 2.1093 0 .82033.293 1.5235.87892 2.10938.58592.58598 1.28901.87889 2.10935.87889s1.52343-.2929 2.10935-.87889c.58601-.58589.87893-1.28905.87893-2.10938 0-.82025-.29292-1.5234-.87893-2.1093z\"\n clipRule=\"evenodd\"\n fillRule=\"evenodd\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Instagram;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Youtube: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"43\"\n height=\"30\"\n viewBox=\"0 0 43 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M17.19523 20.52408l11.27986-5.95252-11.27986-6.02397zM21.49983 0c2.61017 0 5.13098.03571 7.56251.10715 2.43154.07142 4.21437.14682 5.34859.22619l1.70128.09523c.01554 0 .14756.0119.39616.03572.2486.0238.42723.04762.53599.07142.10876.02382.29134.05953.54766.10715.25641.04762.4778.11111.66424.19048s.40397.18253.65257.30952c.2486.12698.48937.28174.72243.46428s.4583.39286.67583.63095c.09322.09524.21366.24206.36122.44047.14765.19841.3729.6627.67591 1.39282.30293.73016.50878 1.5317.61754 2.40476.1243 1.0159.22138 2.0992.29135 3.25.06987 1.15082.11262 2.05163.12816 2.70235v4.19049c.01553 2.30161-.1243 4.60314-.4195 6.90476-.10877.87298-.30294 1.66266-.58261 2.36903s-.52827 1.19444-.74579 1.46428l-.32628.40476c-.21752.23806-.44277.44838-.67583.63097-.23306.1825-.47384.3333-.72243.45233s-.46612.21823-.65257.29767c-.18644.07935-.40783.14282-.66424.1904-.25632.04766-.44276.08339-.55925.10718-.11657.02378-.2952.04766-.53608.07145-.24078.02379-.36894.03573-.38448.03573-3.89976.30152-8.77055.45233-14.61202.45233-3.21612-.03177-6.00888-.0833-8.37826-.15476s-3.92688-.13097-4.67267-.17854l-1.14195-.09524-.83899-.09525c-.55932-.07935-.9827-.1587-1.2701-.23815-.28744-.07935-.68362-.24596-1.18856-.49991-.50495-.25404-.94382-.57944-1.31671-.97621-.09323-.09524-.21363-.2421-.36123-.44049-.1476-.19838-.37288-.66266-.67585-1.39282s-.50883-1.53178-.6176-2.40476c-.1243-1.01589-.2214-2.0992-.2913-3.25-.06992-1.15081-.11264-2.05162-.12818-2.70234V13.3809c-.01554-2.30162.12429-4.60315.4195-6.90477.10876-.87302.30296-1.66266.58263-2.36903.27966-.70635.52825-1.19444.74576-1.46427l.32628-.40477c.21752-.23809.4428-.4484.67585-.63094s.47387-.33731.72246-.46429c.24859-.12699.4661-.23016.65255-.30952.18644-.07937.40784-.14286.6642-.19048.25635-.04762.4389-.08333.54767-.10714.10876-.02381.28743-.04762.53602-.07143.24858-.02381.38065-.03571.39619-.03571 3.89976-.28572 8.77046-.42857 14.61202-.42857z\"\n clipRule=\"evenodd\"\n fillRule=\"evenodd\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Youtube;\n","import 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 React, { useContext } from 'react';\nimport { ThemeContext } from 'styled-components';\nimport { getColors as color } from 'utils/styles';\n\nconst Intro: React.FC<{\n title: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isCentered?: boolean;\n isStackable?: boolean;\n clampTitle?: boolean;\n clampText?: boolean;\n bgMode?: 'inverted' | 'full' | 'splitted';\n className?: string;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isCentered = false,\n isStackable = false,\n clampTitle = true,\n clampText = true,\n bgMode,\n}) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n addSeperation\n isStackable={isStackable}\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <IntroBlock\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n isCentered={isCentered}\n clampTitle={clampTitle}\n clampText={clampText}\n />\n </Wrapper>\n </Section>\n );\n};\n\nexport default Intro;\n","import React, { FC, useEffect, useState } from 'react';\nimport { NavGroup } from './menu/Flyout';\nimport Menu from './menu/Menu';\n\nimport TopBar from './TopBar';\n\nexport interface LogoProps {\n icon?: (props: {\n isInverted?: boolean;\n size?: 'full' | 'small';\n name?: string;\n }) => React.ReactNode;\n link?: string;\n pageTopScale?: {\n // icon scale factor\n mobile?: number;\n desktop?: number;\n };\n /** Logo scale if is shown from scroll up */\n scrolledScale?: {\n /** Default is 0.6 */\n mobile?: number;\n desktop?: number;\n };\n}\n\nexport interface NavProps {\n isLargeMenu?: boolean;\n isMenuInverted?: boolean;\n isTopbarInverted?: boolean;\n isMirrored?: boolean;\n activeNavItem?: string;\n navItems?: NavGroup[];\n backdropOpacity?: number;\n socials?: Array<{ icon: React.ReactNode; href: string }>;\n logo?: LogoProps;\n /** Allow overflow of topbar over content if page is on top */\n allowTopbarOverflow?: boolean;\n /** Hide topbar background if menu overlay is open */\n hideTopbarBackUnderMenu?: boolean;\n isTopbarLargeOnPageTop?: boolean;\n primaryCta?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n secondaryCta?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n search?: (isInverted?: boolean) => React.ReactNode;\n openMenuIcon?: (isInverted?: boolean) => React.ReactNode;\n closeMenuIcon?: (isInverted?: boolean) => React.ReactNode;\n}\n\nconst Navigation: FC<NavProps> = ({\n isMenuInverted,\n isLargeMenu,\n activeNavItem,\n navItems,\n socials,\n search,\n logo,\n backdropOpacity,\n primaryCta,\n secondaryCta,\n isTopbarInverted,\n allowTopbarOverflow,\n hideTopbarBackUnderMenu,\n isTopbarLargeOnPageTop,\n openMenuIcon,\n closeMenuIcon,\n isMirrored,\n}) => {\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n\n const sharedProps = {\n logo: logo,\n primaryAction: primaryCta,\n secondaryAction: secondaryCta,\n };\n\n useEffect(() => {\n document.body.style.overflow = isMenuOpen ? 'hidden' : 'visible';\n }, [isMenuOpen]);\n\n return (\n <>\n <TopBar\n isMirrored={isMirrored}\n isBackVisible={hideTopbarBackUnderMenu ? !isMenuOpen : true}\n isInverted={isTopbarInverted}\n allowTopOverlow={allowTopbarOverflow}\n isLargeOnPageTop={isTopbarLargeOnPageTop}\n toggleIcon={openMenuIcon}\n onToggleClick={() => setIsMenuOpen(true)}\n {...sharedProps}\n />\n <Menu\n isMirrored={isMirrored}\n isOpen={isMenuOpen}\n backdropOpacity={backdropOpacity}\n size={isLargeMenu ? 'full' : 'small'}\n isInverted={isMenuInverted}\n activeNavItem={activeNavItem}\n navItems={navItems}\n socials={socials}\n search={search}\n onCloseClick={() => setIsMenuOpen(false)}\n toggleIcon={closeMenuIcon}\n {...sharedProps}\n />\n </>\n );\n};\n\nexport default Navigation;\n","import React, { FC } from 'react';\nimport { ThemeContext } from 'styled-components';\n\nimport { getColors as color } from 'utils/styles';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport PromotionCard, {\n PromotionCardProps,\n} from 'components/blocks/PromotionCard';\n\nexport type PromotionCarouselItem = Omit<\n PromotionCardProps,\n 'text' | 'superTitle' | 'text' | 'primaryAction' | 'secondaryAction'\n>;\n\nconst PromotionCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing' | 'isInverted'> & {\n bgMode?: 'full' | 'splitted' | 'inverted';\n promotions?: PromotionCarouselItem[];\n }\n> = ({\n bgMode,\n promotions,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const promotionCount = promotions?.length || 0;\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <CarouselBase\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={promotionCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: promotionCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: promotionCount > 1 ? 1.15 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: promotionCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {promotions &&\n promotions.map((promotion, i) => (\n <PromotionCard key={i} {...promotion} />\n ))}\n </CarouselBase>\n </Section>\n );\n};\n\nexport default PromotionCarousel;\n","import React, { useContext } from 'react';\nimport { ThemeContext } from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { getColors as color, getGlobalSettings as global } from 'utils/styles';\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 bgImage: ImageProps;\n embedId: string;\n playIcon?: React.ReactChild;\n bgMode?: 'full' | 'inverted';\n}> = ({ bgMode, bgImage, embedId, playIcon }) => {\n const theme = useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n\n return (\n <Section\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode === 'full'\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n addSeperation\n >\n <Wrapper\n addWhitespace={global(theme).sections.edgeRadius ? true : false}\n >\n <VideoCard\n bgImage={bgImage}\n embedId={embedId}\n playIcon={playIcon}\n />\n </Wrapper>\n </Section>\n );\n};\n\nexport default Video;\n","import React, { FC } from 'react';\nimport { ThemeContext } from 'styled-components';\n\nimport { getColors as color } from 'utils/styles';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport VideoCard, { VideoCardProps } from 'components/blocks/VideoCard';\n\nconst VideoCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing' | 'isInverted'> & {\n bgMode?: 'full' | 'splitted' | 'inverted';\n videos?: VideoCardProps[];\n }\n> = ({\n bgMode,\n videos,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const isInverted = bgMode === 'inverted';\n const videoCount = videos?.length || 0;\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode)}\n >\n <CarouselBase\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={videoCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: videoCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: videoCount > 1 ? 1.15 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: videoCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {videos &&\n videos.map((video, i) => <VideoCard key={i} {...video} />)}\n </CarouselBase>\n </Section>\n );\n};\n\nexport default VideoCarousel;\n","import { ImageProps } from 'components/blocks/Image';\nimport { useEffect, useState } from 'react';\nimport { MediaQueryType } from './styles';\nimport { useMediaQuery } from './useMediaQuery';\n\nexport const useImgPreload = (\n imageUrls: ImageProps[],\n mqs: MediaQueryType[] = ['semilarge', 'large']\n) => {\n const [isReady, setReady] = useState(false);\n const [isLoaded, setLoaded] = useState(false);\n const currentMq = useMediaQuery(mqs as MediaQueryType[]);\n const [loadedImages, setLoadedImages] = useState<{\n [key: string]: { id: number | string; image: string }[];\n }>({\n small: [],\n medium: [],\n semilarge: [],\n large: [],\n xlarge: [],\n xxlarge: [],\n xxxLarge: [],\n });\n\n const preloadImages = (imageUrls: (string | undefined)[]) => {\n const images = (imageUrls.filter((img) => img) as string[]).map(\n (src, i) => {\n return new Promise((res) => {\n const img = new window.Image();\n img.src = src;\n img.onload = () => res({ url: src, i });\n });\n }\n );\n\n return images;\n };\n\n useEffect(() => {\n if (isReady && loadedImages && currentMq) {\n const loadedForMq = loadedImages[currentMq];\n\n if (loadedForMq.length < imageUrls.length && imageUrls.length > 0) {\n const requestedImages = imageUrls.map((img) => img[currentMq]);\n\n const resolve = async (items: any) => {\n for (const item of items) {\n const x = await item;\n\n setLoadedImages((prev) => {\n // check if image id already exists in array\n if (!prev[currentMq].find((e) => e.id === x.i)) {\n return {\n ...prev,\n [currentMq]: [\n ...prev[currentMq],\n {\n id: x.i,\n image: x.url,\n },\n ],\n };\n } else return prev;\n });\n }\n };\n\n resolve(preloadImages(requestedImages));\n }\n }\n }, [currentMq, imageUrls, isReady, loadedImages]);\n\n useEffect(() => {\n if (loadedImages && currentMq) {\n const imgCount = imageUrls.filter((img) => img[currentMq]).length;\n setLoaded(loadedImages[currentMq].length >= imgCount);\n }\n }, [currentMq, imageUrls, loadedImages]);\n\n return {\n loadedImages: currentMq && loadedImages[currentMq],\n isLoaded,\n setReady,\n };\n};\n","import { useEffect, useRef } from 'react';\n\nexport default function useInterval(callback: any, delay?: number) {\n const savedCallback: any = useRef();\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n if (delay !== null) {\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}\n","import { useEffect, useState } from 'react';\n\nexport const useItemHeight = () => {\n const [element, setElement] = useState<HTMLElement | null>(null);\n const [height, setHeight] = useState<number>(0);\n\n useEffect(() => {\n const calcHeight = () => {\n if (element) setHeight(element.offsetHeight);\n };\n\n if (element) {\n calcHeight();\n window.addEventListener('resize', calcHeight);\n }\n\n return () => {\n window.removeEventListener('resize', calcHeight);\n };\n }, [element]);\n\n return {\n setElement,\n height,\n };\n};\n","import { useState, useEffect } from 'react';\n\nconst useTouch = () => {\n const [canTouch, setCanTouch] = useState(false);\n\n useEffect(() => {\n setCanTouch(\n 'ontouchstart' in window ||\n navigator.maxTouchPoints > 0 ||\n navigator.msMaxTouchPoints > 0\n );\n }, []);\n return canTouch;\n};\n\nexport default useTouch;\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","Symbol","iterator","v","op","TypeError","pop","push","__spreadArray","to","from","il","j","__makeTemplateObject","cooked","raw","defineProperty","ScrollDirection","mq","medium","semilarge","large","xlarge","xxlarge","xxxLarge","spacings","nudge","spacer","wrapperSmall","wrapper","wrapperLarge","withRange","range","property","getSizeByRange","styleTextColor","fallbackColor","gradient","css","defaultColors","dark","light","mono","primary","secondary","tertiary","error","copyBase","family","weight","style","lineHeight","letterSpacing","size","textTransform","color","colorInverted","headingBase","defaultFonts","copy","small","big","copy-i","copy-b","super","heading-1","heading-2","heading-3","heading-4","callout","defaultGlobalSettings","sections","edgeRadius","imageTextGradient","newsDateFormat","newsTimeFormat","newsLocaleKey","getBaseTheme","colors","fonts","types","globalSettings","getColors","theme","getFonts","getGlobalSettings","isBrowser","window","document","checkMq","cmq","checkMqs","matchMedia","matches","getMediaQuery","useMediaQuery","mqs","_a","useState","mediaQuery","setMediaQuery","useEffect","handleResize","newMediaQuery","addEventListener","removeEventListener","useEqualSheetHeight","props","defaultResponsive","responsive","currentMq","itemsPerRow","sheetRefs","setSheetRefs","makeRows","index","arr","slice","resize","refs","identifierSizes","Map","identifiers","set","filter","ref","current","forEach","id","element","querySelector","removeAttribute","prevHeights","get","scrollHeight","key","heights","selector","reduce","rowHeights","highest","sort","vA","vB","x_1","el","setAttribute","setHeights","resizeHandler","Array","listLength","fill","map","createRef","triggerCalculation","setCookie","name","data","_b","days","_c","path","cookieString","valueString","dataKeys","keys","encodeURIComponent","substr","date","Date","setTime","getTime","toUTCString","cookie","getCookie","undefined","b","match","cookieValue","decodeURIComponent","valueArray","split","keyValueArray","cookieData","isNaN","Number","isBoolean","stringToBoolean","useIE","initialValue","isIE","setIE","msTouchAction","useScroll","initialTopOffset","onLeftOffset","onEnterOffset","topOffset","setTopOffset","_d","isTop","setIsTop","_e","isInOffset","setIsInOffset","_f","DOWN","scrollDirection","setScrollDirection","lastScrollPos","useRef","handleScroll","pageYOffset","prev","UP","useScrollTo","fallbackScrollDuration","startTime","firstPos","targetPos","setTargetPos","documentElement","scroll","top","left","behavior","animate_1","timestamp","elapsed","easeProgress","toFixed","newPos","scrollTo","cancelAnimationFrame","requestAnimationFrame","scrollTop","canUseWebP","elem","createElement","getContext","toDataURL","hexToRgba","hex","alpha","rgb","x","parseInt","getBgImage","bgImage","assignTo","target","source","output","sourceVal","targetVal","View","styled","section","addSeperation","isStackable","bgIdent","Back","div","bgColor","bgMode","mode","bgValue","getBackground","Section","renderAs","className","children","React.createElement","as","mapToBgMode","preventSplit","isMirrored","clampWidth","Wrapper","addWhitespace","BaseStyles","h1","textColor","textGradient","hyphens","type","font","Heading","isInverted","hasShadow","innerHTML","rest","React.useContext","ThemeContext","tag","fontSettings","colorGradientInverted","colorGradient","dangerouslySetInnerHTML","__html","defaultProps","Title","colorMode","superTitle","superTitleAs","title","titleAs","isCentered","React","Copy","columns","Actions","StyledTitle","ContentBlock","StyledActions","IntroBlock","text","primaryAction","secondaryAction","clampTitle","clampText","Img","img","Picture","picture","Image","alt","coverSpace","onClick","srcSet","media","loading","ImgContainer","ImgWrapper","StyledImage","global","gridSettings","cols","gutter","StyledCol","mediumSpan","span","semilargeSpan","largeSpan","xlargeSpan","mediumMove","move","semilargeMove","largeMove","xlargeMove","StyledGrid","Grid","valign","React.Children","comp","Row","Col","React.Fragment","ImgDescDesktop","ImgDescMobile","InfoWrapper","SubTextBlock","WideImage","a","textDecoration","inverted","Pointer","React.forwardRef","isDisabled","disable","href","isExternal","rel","displayName","CursorState","Icon","Label","StyledSection","ListContainer","ItemContainer","ShowMore","itemCount","Items","ActionsWrapper","Item","ListFooter","Content","ContentText","ImageContainer","ArticleContent","Desc","Feature","description","intro","image","ContentContainer","LinkHelper","IntroContainer","PromotionCard","clickable","FlexGrid","FlexGridCol","PosterContainer","SVG","svg","Play","iconColor","width","height","viewBox","xmlns","d","isActive","VideoControls","Iframe","iframe","VideoCard","embedId","playIcon","setIsActive","src","allow","ContactView","Avatar","Info","Address","Decorator","AddressLabel","StyledIntro","StyledContactBox","addresses","avatar","address","decorator","NewsletterWrapper","Badge","FactsContainer","ul","FactsItem","li","Text","Fact","subTitle","FactFill","TableContainer","TableBody","table","TableHead","th","hasBack","TableData","td","TableBlock","row","tableTitle","rowTitle","item","ii","itemText","TableWrapper","ArrowLeftGhost","transform","ArrowRightGhost","MapContainer","FylToCtrlContainer","SliderContext","createContext","steps","currentStep","slickSettings","clickSideOffset","goToStep","nextStep","previousStep","isOnFirstStep","isOnLastStep","SlidesView","cursorPath","sameHeight","fullHeight","StyledSlider","SlickSlider","leftMargin","min","max","SlideView","spacing","ControlView","button","DotGroupView","initialStep","slideSpacing","cursorPaths","beforeChange","afterChange","onInit","slideCount","setSlideCount","sliderRef","setSliderRef","setCurrentStep","_g","visibleSlides","setVisibleSlides","_h","setSteps","dots","arrows","infinite","speed","slidesToScroll","slidesToShow","variableWidth","fade","swipe","settings","cBreakpoint","state","breakpoint","itemsPerSlide","Math","floor","slides","Provider","setSlider","intNum","slickGoTo","context","useContext","cursor","setCursor","viewRef","setViewRef","mousePos","setMousePos","getCursorPath","NEXT","PREV","handleClick","ev","stopPropagation","isSlideControl","classList","contains","isAnchor","HTMLAnchorElement","parentElement","rect","getBoundingClientRect","relMouseX","Children","count","Consumer","values","onMouseMove","clientX","disabled","stepsArray","setStepsArray","containerRef","onReady","url","attribution","activeMarkerId","markers","center","zoom","touchZoom","scrollWheelZoom","onlyScrollOnFocus","fitBoundsPadding","onMarkerClick","onFlyToClick","flyToControl","onActiveMarkerChanged","cRef","prevMarkerId","_j","L","setLeaflet","_k","setMap","_l","markersLayer","setMarkersLayer","_m","isLoaded","setLoaded","cElement","mapContainerRef","leaflet","map_1","once","enable","tileLayer","addTo","markersLayer_1","FeatureGroup","showAllMarkers","fitBounds","getBounds","padding","point","flyToPosition","position","flyTo","flyToActive","marker","find","m","clearLayers","icon","markerIcon","iconUrl","iconSize","sizeActive","iconAnchor","anchorActive","anchor","riseOnHover","on","addLayer","markerId","goTo","showAll","CardWrapper","SliderWrapper","InfoCardView","CardHeader","ContactList","ContactListLabel","LocationInfoCard","location","meta","contact","c","Controls","StyledDotGroup","Slider","DotWrapper","Dot","StyledControl","FieldHead","Field","input","hasError","InfoMessage","ErrorMessage","Textfield","lightBg","errorMessage","infoMessage","placeholder","isRequired","onChange","required","Area","textarea","Textarea","CheckboxContainer","Original","Box","isSelected","StyledCheck","stroke","Checkbox","checked","FieldsContainer","FlexContainer","ActionWrapper","Plus","Minus","AccordionBlock","hasBg","borderColor","AccordionItems","AccordionHead","IconContainer","AccordionText","ArrowLeftRight","fillRule","clipRule","clamp","num","Images","BackgroundImg","ForegroundContainer","hasAnim","initalValue","ForegroundImg","ForegroundOverlay","ImageLabel","ForegroundLabel","BackgroundLabel","ControlContainer","Control","Head","TopControls","StyledSlides","Footer","CtrlWrapper","CtrlWrapperLeft","CtrlWrapperRight","CarouselBase","variableWidths","controlNext","controlPrev","dot","child","FullWidthImg","StyledWrapper","Link","Bdot","IconItemView","StyledLink","SocialList","items","MainView","topSpace","hAlign","LogoLink","ContactData","SiteLinksView","SiteLink","LinkWrapper","BottomWrapper","BottomView","AnimationContainer","PosterImage","AnimationImage","scale","opacity","AnimationImages","images","intervalRef","activeImg","setActiveImg","changeImage","setTimeout","clearInterval","setInterval","zIndex","HeaderKenBurns","onImageChange","React.useState","loadedImages","setLoadedImages","React.useEffect","loadedForMq","useWebp_1","requestedImages","webp","res","onload","items_1","_i","backgroundImage","PosterView","HeaderPoster","Callout","PlaceholderImg","AutoplayVideo","video","HeaderVideo","placeholderImg","videoUrl","isMobile","isVisible","muted","autoPlay","loop","onCanPlayThrough","header","HeaderWrapper","PosterContent","PosterContentMobile","StyledPoster","Seperator","ContentFlex","Author","StyledCopy","Tag","dateFormat","timeFormat","localeKey","dddd","weekDays","_this","long","getDay","DDDD","ddd","short","DDD","dd","DD","MMMM","monthNames","getMonth","mmmm","MMM","mmm","mm","MM","yyyy","getYear","YYYY","yy","YY","hh","getHours","HH","hs","getHours12h","HS","getMinutes","ss","getSeconds","SS","ap","AP","StatusFormatter","placeholders","%DATE%","getFormattedDate","%TIME%","getFormattedTime","replace","foundString","dateReplacements","formattedDate","RegExp","timeReplacements","formattedTime","toString","getDoubleDigitString","getDate","getFullYear","hours","de","en","ImageLink","TitleLink","Main","NewsCard","onTagClick","publishDate","link","publishedAt","ImageFlex","IntroHead","HeadTag","MetaBlock","News","useObserverSupport","inital","observerSupported","setObserverSupport","IntersectionObserverEntry","TagContainer","TagWrapper","List","QuicknavButton","NavList","NavItem","NavItemContainer","Test","TimelineBlock","TimelineText","Socials","Social","NumberContainer","stringLength","IconBlock","number","Button","toInteger","dirtyNumber","NaN","ceil","requiredArgs","args","toDate","argument","argStr","console","warn","Error","stack","addMilliseconds","dirtyDate","dirtyAmount","amount","getTimezoneOffsetInMilliseconds","utcDate","UTC","getMilliseconds","setUTCFullYear","isValid","formatDistanceLocale","lessThanXSeconds","one","other","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","buildFormatLongFn","options","String","defaultWidth","format","formats","formatLong","full","time","dateTime","formatRelativeLocale","lastWeek","yesterday","today","tomorrow","nextWeek","buildLocalizeFn","dirtyIndex","dirtyOptions","valuesArray","formattingValues","defaultFormattingWidth","_defaultWidth","_width","argumentCallback","buildMatchPatternFn","string","matchResult","matchPattern","matchedString","parseResult","parsePattern","valueCallback","buildMatchFn","matchPatterns","defaultMatchWidth","parsePatterns","defaultParseWidth","isArray","findIndex","pattern","test","findKey","object","predicate","array","locale","code","formatDistance","token","addSuffix","comparison","formatRelative","_date","_baseDate","_options","localize","ordinalNumber","_dirtyOptions","rem100","era","narrow","abbreviated","wide","quarter","month","day","dayPeriod","am","pm","midnight","noon","morning","afternoon","evening","night","any","weekStartsOn","firstWeekContainsDate","subMilliseconds","addLeadingZeros","targetLength","sign","abs","formatters","signedYear","getUTCFullYear","year","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","numberOfDigits","milliseconds","getUTCMilliseconds","pow","startOfUTCISOWeek","getUTCDay","diff","setUTCDate","setUTCHours","getUTCISOWeekYear","fourthOfJanuaryOfNextYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","startOfUTCISOWeekYear","fourthOfJanuary","startOfUTCWeek","localeWeekStartsOn","defaultWeekStartsOn","RangeError","getUTCWeekYear","localeFirstWeekContainsDate","defaultFirstWeekContainsDate","firstWeekOfNextYear","firstWeekOfThisYear","startOfUTCWeekYear","firstWeek","dayPeriodEnum","G","unit","lightFormatters","Y","signedWeekYear","weekYear","R","u","Q","q","M","w","week","round","getUTCWeek","I","isoWeek","getUTCISOWeek","D","dayOfYear","setUTCMonth","startOfYearTimestamp","difference","getUTCDayOfYear","E","dayOfWeek","localDayOfWeek","isoDayOfWeek","dayPeriodEnumValue","toLowerCase","B","h","H","K","k","S","X","_localize","timezoneOffset","_originalDate","getTimezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","O","formatTimezoneShort","z","originalDate","T","offset","dirtyDelimiter","absOffset","minutes","delimiter","dateLongFormatter","timeLongFormatter","longFormatters","dateTimeFormat","datePattern","timePattern","protectedDayOfYearTokens","protectedWeekYearTokens","isProtectedDayOfYearToken","isProtectedWeekYearToken","throwProtectedError","concat","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","unescapedLatinCharacterRegExp","dirtyFormatStr","formatStr","defaultLocale","formatterOptions","substring","firstCharacter","longFormatter","join","cleanEscapedString","formatter","useAdditionalWeekYearTokens","useAdditionalDayOfYearTokens","standalone","withPreposition","usageGroup","ButtonGhost","AngleDown","AngleUp","fillOpacity","PickerView","nextUrl","prevUrl","DatepickerButton","DatepickerButtonMain","DatepickerFoot","FootFlex","ButtonLabel","ButtonGhostLabel","PickerButton","forwardRef","isFocused","altText","startDate","endDate","setFocused","Datepicker","singleSelect","minDate","maxDate","onDataChange","onSubmit","deleteAction","submitAction","nextCtrlUrl","prevCtrlUrl","pickerRef","pickerBtnRef","isSmall","setIsSmall","setStartDate","setEndDate","focused","registerLocale","shouldBeSmall","setOpen","handleReset","useCallback","preventDefault","handleSubmit","ReactDatePicker","dirtyDateToCompare","dateToCompare","isBefore","selected","monthsShown","shouldCloseOnSelect","customInput","showPopperArrow","disabledKeyboardNavigation","isClearable","onClickOutside","RadioContainer","StyledRadioButton","RadioButton","Select","SelectMain","Flyout","ItemStyle","FocusContainer","SelectDropdown","onBlur","initialItemIndex","isOpen","setIsOpen","selectedItem","setSelectedItem","tabIndex","FieldWrapper","FieldMain","InputView","File","Delete","FileLabel","FileUpload","onUploadFiles","addBtnLabel","removeBtnLabel","acceptedFormats","selectedFiles","setSelectedFiles","fileInputRef","previews","setPreviews","event","click","currentTarget","files","files_1","promises","file","isUploading","reader","FileReader","readAsDataURL","readFileAsync","all","multiple","accept","fileName","FieldContainer","Fields","generateCheckboxGroup","field","formikValues","formikTouches","formikErrors","setTouched","validateField","setField","group","groupData","fields","ci","cIndex","splice","generateRadioGroup","fi","generateDatepicker","dates","start","end","info","generateArea","handleChange","generateUpload","generateField","generateSelect","dropdownItems","form","InputField","backColor","SubmitBtn","ControlBtn","ClearBtn","activateTrackingScripts","scriptElements","querySelectorAll","newScriptElement","appendChild","parentNode","removeChild","Stage","CookieIcon","TitleView","TextView","CookieActions","Cross","isLarge","Header","HeaderCol","LeftCol","CenterCol","RightCol","ToggleContainer","StyledMenuClose","SearchContainer","ScrollArea","MirroredLargeContainerDesktop","NavListView","Nav","nav","Group","GroupLabel","GroupLabelSpacer","ItemLink","ItemLabel","toggleIcon","logo","search","onCloseClick","activeNavItem","navGroups","activeGroup","activeItem","itemIndex","Backdrop","SocialContainer","Menu","backdropOpacity","navItems","socials","MenuBurger","TopWhitespace","showLarge","isBackVisible","allowOffset","Column","StyledMenuBurger","logoHeight","clampValue","TopBar","allowTopOverlow","isLargeOnPageTop","onToggleClick","setIsLarge","isAnimated","setIsAnimated","defaultLogoScale","pageTopScale","mobile","desktop","scrolledScale","_o","isBarInverted","logoScale","scalePageTop","scaleScrolled","logoTopHeight","animated","currentItems","setCurrentItems","hasColumns","asideText","withAsideText","isAside","badge","newsForm","column","method","action","buttonIcon","onFocus","backgroundStyle","foregroundImg","backgroundImg","foregroundLabel","backgroundLabel","overlayColor","labelColor","dragControl","enableControlAnim","slideValue","setSlideValue","isHolding","setIsHolding","isDragging","setIsDragging","interacted","setInteracted","sideOffset","setSideOffset","controlRef","offsetWidth","handleInitalLoad","observer","IntersectionObserver","entries","isIntersecting","unobserve","rootMargin","threshold","observe","readyState","setCurrentPos","relativeClientX","percentage","onMouseDown","onMouseUp","onMouseLeave","onTouchMove","touches","onTouchStart","onTouchEnd","hasTransition","cookieName","urlWhitelist","consentAcceptStatusMsg","consentDeclineStatusMsg","noCookieStatusMsg","lifetime","overlayOpacity","setIsVisible","callback","allConsentButtons","len","bindConsentButtons","urlString","whitelist","isInWhiteList","isUrlInWhitelist","pathname","consent","status","allConsentStatusElements","updatedAt","getFormattedStatus","updateConsentStatusElements","bgOpacity","handleDecline","log","handleAccept","additionalAcceptProps","additionalDeclineProps","main","aside","card","submitLabel","initalData","initialDates","groupType","initalArray_1","initialChecked","every","useFormik","initialValues","setSubmitting","validateOnBlur","validateOnChange","validate","errors","config","inputType","_r","errorMsg","single","singleDateError","mutliDateError","selectValues","_p","_q","handleBlur","setFieldValue","setFieldTouched","isSubmitting","touched","dirty","noValidate","generationProps","facts","factCount","cardRefs","fact","hasText","features","featureCount","feature","isHalf","columnTopSpace","contactData","siteLinks","newsTitle","newsText","bottomLinks","brandIcon","siteLinksColLeft","siteLinksColRight","direction","formFields","checkbox","yupValidationSchema","validation","Formik","surname","phone","area","mail","check","validationSchema","obj","constructor","additionalProps","isFull","currentIndex","newIndex","isNextImgFull","sizeScale","primaryCta","secondaryCta","withTopGradient","customTopGradient","customBottomGradient","topGradient","bottomGradient","noTitle","content","showOnMobile","showLessText","showMoreText","showMore","setShowMore","imageCount","combinedBaseTheme","tKey","sKey","assignFontBase","base","combinedTheme","ThemeProvider","provider","flyToZoom","initialLocation","locations","allMarkersOnInit","activeLocation","setActiveLocation","locIndex","loc","isMenuInverted","isLargeMenu","isTopbarInverted","allowTopbarOverflow","hideTopbarBackUnderMenu","isTopbarLargeOnPageTop","openMenuIcon","closeMenuIcon","isMenuOpen","setIsMenuOpen","sharedProps","overflow","author","news","newsCount","setItemsPerRow","visibleRows","setVisibleRows","imageStyle","isSingleHalf","tags","activeTag","queryParams","decodeURI","selectedTag","setSelectedTag","targetRef","setNewPos","entry","disconnect","tableItems","hasWrapper","hasContent","promotions","promotionCount","promotion","onNavClick","isActiveItem","setIsActiveItem","pos","setPos","setWidth","parentRef","React.useRef","itemRef","parent","ParentBox","scrollLeft","scrollIntoView","paddingTop","transition","submitIcon","clearIcon","onClear","hasLeftIcon","hasRightIcon","onKeyDown","keyCode","social","subText","targetRefs","setTargetRefs","observerRef","setActiveItem","isSwitched","videos","videoCount","imageUrls","isReady","setReady","preloadImages","imgCount","delay","savedCallback","id_1","setElement","setHeight","calcHeight","offsetHeight","posterImage","currentImage","setCurrentImage","workingImage","canTouch","setCanTouch","navigator","maxTouchPoints","msMaxTouchPoints"],"mappings":"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"}
|