@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.
Files changed (33) hide show
  1. package/lib/components/base/icons/AngleDown.d.ts +7 -0
  2. package/lib/components/base/icons/AngleDown.d.ts.map +1 -0
  3. package/lib/components/base/icons/AngleUp.d.ts +7 -0
  4. package/lib/components/base/icons/AngleUp.d.ts.map +1 -0
  5. package/lib/components/buttons/Button.d.ts +2 -1
  6. package/lib/components/buttons/Button.d.ts.map +1 -1
  7. package/lib/components/buttons/ButtonGhost.d.ts +2 -1
  8. package/lib/components/buttons/ButtonGhost.d.ts.map +1 -1
  9. package/lib/components/fields/Checkbox.d.ts +1 -1
  10. package/lib/components/fields/Checkbox.d.ts.map +1 -1
  11. package/lib/components/fields/Datepicker.d.ts +26 -0
  12. package/lib/components/fields/Datepicker.d.ts.map +1 -0
  13. package/lib/components/fields/FileUpload.d.ts +12 -0
  14. package/lib/components/fields/FileUpload.d.ts.map +1 -0
  15. package/lib/components/fields/Radio.d.ts +14 -0
  16. package/lib/components/fields/Radio.d.ts.map +1 -0
  17. package/lib/components/fields/SelectDropdown.d.ts +24 -0
  18. package/lib/components/fields/SelectDropdown.d.ts.map +1 -0
  19. package/lib/components/fields/Textarea.d.ts.map +1 -1
  20. package/lib/components/fields/Textfield.d.ts +1 -1
  21. package/lib/components/fields/Textfield.d.ts.map +1 -1
  22. package/lib/components/sections/DynamicForm.d.ts +94 -0
  23. package/lib/components/sections/DynamicForm.d.ts.map +1 -0
  24. package/lib/components/sections/NumberList.d.ts.map +1 -1
  25. package/lib/index.d.ts +2 -1
  26. package/lib/index.d.ts.map +1 -1
  27. package/lib/index.es.js +2 -2
  28. package/lib/index.es.js.map +1 -1
  29. package/lib/index.js +1 -1
  30. package/lib/index.js.map +1 -1
  31. package/lib/utils/styles.d.ts +1 -0
  32. package/lib/utils/styles.d.ts.map +1 -1
  33. package/package.json +8 -6
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.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/useItemHeight.ts","../src/utils/useScrollTo.ts","../src/utils/usePoster.ts","../src/utils/useInterval.ts","../src/utils/useTouch.ts","../src/utils/useImgPreload.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/sections/Intro.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/Video.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/sections/carousel/PromotionCarousel.tsx","../src/components/sections/carousel/VideoCarousel.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/sections/navigation/Navigation.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"],"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, 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 { 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","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 { 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","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","// 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 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 * 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, { 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, 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 = '&copy; <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","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, { 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","/* 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 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 * 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"],"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","deleteCookie","useIE","initialValue","isIE","setIE","msTouchAction","useItemHeight","setElement","height","setHeight","calcHeight","offsetHeight","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","usePoster","posterImage","currentImage","setCurrentImage","workingImage","webp","useInterval","callback","delay","savedCallback","id_1","setInterval","clearInterval","useTouch","canTouch","setCanTouch","navigator","maxTouchPoints","msMaxTouchPoints","useImgPreload","imageUrls","isReady","setReady","isLoaded","setLoaded","loadedImages","setLoadedImages","items","requestedImages","img","src","res","Image","onload","url","preloadImages","item","x","find","image","items_1","_i","imgCount","hexToRgba","hex","alpha","rgb","parseInt","getBgImage","bgImage","assignTo","target","source","output","sourceVal","targetVal","LibThemeProvider","children","combinedBaseTheme","tKey","isArray","sKey","assignFontBase","base","combinedTheme","React","ThemeProvider","View","styled","section","addSeperation","isStackable","bgIdent","Back","div","bgColor","bgMode","mode","bgValue","getBackground","Section","renderAs","className","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","Copy","columns","Actions","StyledTitle","ContentBlock","StyledActions","IntroBlock","text","primaryAction","secondaryAction","clampTitle","clampText","Intro","useContext","Img","Picture","picture","alt","coverSpace","onClick","srcSet","media","loading","ImgContainer","ImgWrapper","StyledImage","global","Gallery","images","array","isFull","currentIndex","newIndex","isNextImgFull","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","Teaser","intro","subText","description","WideImage","TeaserWide","hasBg","a","textDecoration","inverted","Pointer","React.forwardRef","isDisabled","disable","href","isExternal","rel","displayName","CursorState","Icon","Label","StyledSection","ListContainer","ItemContainer","ShowMore","itemCount","Items","ActionsWrapper","Item","ListFooter","IconList","showLessText","showMoreText","showMore","setShowMore","isVisible","Content","ContentText","Article","asideText","withAsideText","isAside","ImageContainer","ArticleContent","Desc","Feature","ContentContainer","FeatureList","features","featureCount","cardRefs","isHalf","feature","LinkHelper","IntroContainer","PromotionCard","clickable","FlexGrid","FlexGridCol","PosterContainer","CrossPromotion","main","aside","card","Poster","hasWrapper","hasContent","SVG","svg","Play","iconColor","width","viewBox","xmlns","d","isActive","VideoControls","Iframe","iframe","VideoCard","embedId","playIcon","setIsActive","allow","Video","ContactView","Avatar","Info","Address","Decorator","AddressLabel","StyledIntro","StyledContactBox","addresses","avatar","address","decorator","NewsletterWrapper","Badge","CallToAction","contact","badge","newsForm","column","FactsContainer","ul","FactsItem","li","Text","FactList","facts","icon","hasText","Fact","subTitle","FactFill","FactGrid","factCount","fact","TableContainer","TableBody","table","TableHead","th","hasBack","TableData","td","TableBlock","row","tableTitle","rowTitle","ii","itemText","TableWrapper","Table","tableItems","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","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","attribution","activeMarkerId","markers","center","zoom","touchZoom","scrollWheelZoom","onlyScrollOnFocus","fitBoundsPadding","onMarkerClick","onFlyToClick","flyToControl","onActiveMarkerChanged","cRef","prevMarkerId","_j","L","setLeaflet","_k","setMap","_l","markersLayer","setMarkersLayer","_m","cElement","mapContainerRef","import","leaflet","map_1","once","enable","tileLayer","addTo","markersLayer_1","FeatureGroup","showAllMarkers","fitBounds","getBounds","padding","point","flyToPosition","position","flyTo","flyToActive","marker","m","clearLayers","markerIcon","iconUrl","iconSize","sizeActive","iconAnchor","anchorActive","anchor","riseOnHover","on","addLayer","markerId","goTo","showAll","CardWrapper","SliderWrapper","InfoCardView","CardHeader","ContactList","ContactListLabel","LocationInfoCard","location","meta","c","Controls","StyledDotGroup","Slider","DotWrapper","Dot","StyledControl","provider","flyToZoom","initialLocation","locations","allMarkersOnInit","controlNext","controlPrev","dot","activeLocation","setActiveLocation","locIndex","findIndex","loc","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","Form","submitAction","onSubmit","formFields","checkbox","yupValidationSchema","validation","Formik","initialValues","surname","phone","area","mail","check","validate","errors","validationSchema","obj","handleSubmit","setFieldValue","isValid","dirty","preventDefault","constructor","additionalProps","Plus","Minus","AccordionBlock","borderColor","AccordionItems","AccordionHead","IconContainer","AccordionText","Accordion","React.useState","currentItems","setCurrentItems","hasColumns","splice","ArrowLeftRight","fillRule","clipRule","clamp","num","Images","BackgroundImg","ForegroundContainer","hasAnim","initalValue","ForegroundImg","ForegroundOverlay","ImageLabel","ForegroundLabel","BackgroundLabel","ControlContainer","Control","ComparisonSlider","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","Head","TopControls","StyledSlides","Footer","CtrlWrapper","CtrlWrapperLeft","CtrlWrapperRight","CarouselBase","variableWidths","child","ImageCarousel","imageCount","FullWidthImg","StyledWrapper","FeatureCarousel","PromotionCarousel","promotions","promotionCount","promotion","VideoCarousel","videos","videoCount","video","Link","Bdot","IconItemView","StyledLink","SocialList","MainView","topSpace","hAlign","LogoLink","ContactData","SiteLinksView","SiteLink","LinkWrapper","BottomWrapper","BottomView","logo","columnTopSpace","contactData","siteLinks","newsTitle","newsText","socials","bottomLinks","brandIcon","siteLinksColLeft","ceil","siteLinksColRight","link","direction","AnimationContainer","PosterImage","AnimationImage","scale","opacity","AnimationImages","intervalRef","activeImg","setActiveImg","changeImage","setTimeout","zIndex","HeaderKenBurns","onImageChange","React.useEffect","loadedForMq","useWebp_1","backgroundImage","PosterView","HeaderPoster","Callout","PlaceholderImg","AutoplayVideo","HeaderVideo","placeholderImg","videoUrl","isMobile","muted","autoPlay","loop","onCanPlayThrough","header","HeaderWrapper","PosterContent","PosterContentMobile","StyledPoster","Header","sizeScale","primaryCta","secondaryCta","withTopGradient","customTopGradient","customBottomGradient","topGradient","bottomGradient","noTitle","content","showOnMobile","Seperator","ContentFlex","Author","StyledCopy","NewsAuthorCard","author","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","publishedAt","NewsFooter","news","newsCount","setItemsPerRow","visibleRows","setVisibleRows","ImageFlex","NewsImages","imageStyle","isSingleHalf","IntroHead","HeadTag","MetaBlock","NewsIntro","tags","News","NewsList","NewsTable","NewsText","NewsVideo","useObserverSupport","inital","observerSupported","setObserverSupport","IntersectionObserverEntry","TagContainer","TagWrapper","List","NewsOverview","activeTag","queryParams","selected","decodeURI","selectedTag","setSelectedTag","targetRef","setNewPos","entry","disconnect","QuicknavButton","NavList","NavItem","NavItemContainer","Test","Quicknav","navItems","activeNavItem","onNavClick","isActiveItem","setIsActiveItem","pos","setPos","setWidth","parentRef","React.useRef","itemRef","parent","ParentBox","scrollLeft","scrollIntoView","paddingTop","transition","TimelineBlock","TimelineText","Timeline","targetRefs","setTargetRefs","observerRef","activeItem","setActiveItem","isSwitched","Socials","Social","SocialNav","social","NumberContainer","stringLength","IconBlock","number","NumberList","Button","ButtonGhost","form","InputField","backColor","SubmitBtn","CompactForm","method","action","buttonIcon","onBlur","onFocus","backgroundStyle","ControlBtn","ClearBtn","SearchInput","submitIcon","clearIcon","onClear","hasLeftIcon","hasRightIcon","onKeyDown","keyCode","activateTrackingScripts","scriptElements","querySelectorAll","newScriptElement","appendChild","parentNode","removeChild","Stage","CookieConsent","cookieName","urlWhitelist","consentAcceptStatusMsg","consentDeclineStatusMsg","noCookieStatusMsg","lifetime","overlayOpacity","_o","setIsVisible","allConsentButtons","len","bindConsentButtons","urlString","whitelist","isInWhiteList","isUrlInWhitelist","pathname","consent","status","allConsentStatusElements","formatter","updatedAt","getFormattedStatus","updateConsentStatusElements","bgOpacity","handleDecline","console","log","handleAccept","additionalAcceptProps","additionalDeclineProps","CookieIcon","TitleView","CookieTitle","TextView","CookieText","CookieActions","Cross","isOpen","isLarge","HeaderCol","LeftCol","CenterCol","RightCol","ToggleContainer","StyledMenuClose","SearchContainer","ScrollArea","MirroredLargeContainerDesktop","NavListView","Nav","nav","Group","GroupLabel","GroupLabelSpacer","isSmall","ItemLink","ItemLabel","toggleIcon","search","onCloseClick","navGroups","activeGroup","group","itemIndex","Backdrop","SocialContainer","Menu","backdropOpacity","Flyout","MenuBurger","TopWhitespace","showLarge","isBackVisible","allowOffset","Column","StyledMenuBurger","logoHeight","clampValue","TopBar","allowTopOverlow","isLargeOnPageTop","onToggleClick","setIsOpen","setIsLarge","isAnimated","setIsAnimated","defaultLogoScale","pageTopScale","mobile","desktop","scrolledScale","isBarInverted","logoScale","scalePageTop","scaleScrolled","logoTopHeight","animated","Navigation","isMenuInverted","isLargeMenu","isTopbarInverted","allowTopbarOverflow","hideTopbarBackUnderMenu","isTopbarLargeOnPageTop","openMenuIcon","closeMenuIcon","isMenuOpen","setIsMenuOpen","sharedProps","overflow","ArrowRight","CrossSmall","Magnifier","FlyTo","Star","StarGhost","Mail","Phone","Route","Facebook","LinkedIn","Twitter","Xing","Instagram","Youtube"],"mappings":"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GACd13B,gBAAC8oB,QACIxnB,IAAeo2B,EACZ13B,gBAAC43B,IAAQt2B,eACJw3B,GACG94B,gBAACi4B,IAAgB32B,eACZw3B,EAAO52B,IAGhBlC,gBAAC+3B,IACGtzB,QAASs0B,EACTvtB,UACItJ,EACMpS,EAAM4B,GAAOzC,MACba,EAAM4B,GAAO1C,MAGtB6pC,EACGA,EAAW32B,GAEXlC,gBAACg4B,IACGxsB,UACItJ,EACMpS,EAAM4B,GAAOzC,MACba,EAAM4B,GAAO1C,SAMvCsS,GAAco2B,EACd13B,gBAAC43B,IAAQt2B,cAAWo2B,YACfoB,GACG94B,gBAACi4B,IAAgB32B,eACZw3B,EAAO52B,IAGhBlC,gBAAC+3B,IACGtzB,QAASs0B,EACTvtB,UACItJ,EACMpS,EAAM4B,GAAOzC,MACba,EAAM4B,GAAO1C,MAGtB6pC,EACGA,EAAW32B,GAEXlC,gBAACg4B,IACGxsB,UACItJ,EACMpS,EAAM4B,GAAOzC,MACba,EAAM4B,GAAO1C,SAOvCgR,gBAAC43B,QACG53B,gBAAC+3B,IACGtzB,QAASs0B,EACTvtB,UACItJ,EACMpS,EAAM4B,GAAOzC,MACba,EAAM4B,GAAO1C,MAGtB6pC,EACGA,EAAW32B,GAEXlC,gBAACg4B,IACGxsB,UACItJ,EACMpS,EAAM4B,GAAOzC,MACba,EAAM4B,GAAO1C,QAKlC8pC,GACG94B,gBAACi4B,IAAgBP,QAASA,GACrBoB,EAAO52B,KAMvBw1B,IACkB,cAAdrkC,GACiB,UAAdA,IACA2M,gCACIA,gBAAC63B,QACIjS,GACG5lB,gBAACqlB,IAASrd,KAAM4d,EAAKY,MAChBZ,EAAK3X,MACF2X,EAAK3X,KAAK,CACN/L,WAAYA,EACZ/L,KAAM,YACNvG,KAEI,UADAyD,EAEM,QACA,WAK9B2M,gBAAC83B,QACIgB,GAAUx3B,GAAco2B,GACrB13B,gBAACi4B,IACG32B,cACAo2B,YAECoB,EAAO52B,IAGf6B,GACGA,EAAgB,CACZ7B,aACA/L,KAAM,oBACNvG,KACkB,UAAdyD,EACM,UACA,WAEjByQ,GACGA,EAAc,CACV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"}
1
+ {"version":3,"file":"index.es.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/useItemHeight.ts","../src/utils/useScrollTo.ts","../src/utils/usePoster.ts","../src/utils/useInterval.ts","../src/utils/useTouch.ts","../src/utils/useImgPreload.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/sections/Intro.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/Video.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/sections/carousel/PromotionCarousel.tsx","../src/components/sections/carousel/VideoCarousel.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/sections/navigation/Navigation.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"],"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, 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 { 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","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 { 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","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","// 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 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 * 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, { 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, 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 = '&copy; <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","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, { 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","/* 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 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 * 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"],"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","deleteCookie","useIE","initialValue","isIE","setIE","msTouchAction","useItemHeight","setElement","height","setHeight","calcHeight","offsetHeight","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","usePoster","posterImage","currentImage","setCurrentImage","workingImage","webp","useInterval","callback","delay","savedCallback","id_1","setInterval","clearInterval","useTouch","canTouch","setCanTouch","navigator","maxTouchPoints","msMaxTouchPoints","useImgPreload","imageUrls","isReady","setReady","isLoaded","setLoaded","loadedImages","setLoadedImages","items","requestedImages","img","src","res","Image","onload","url","preloadImages","item","x","find","image","items_1","_i","imgCount","hexToRgba","hex","alpha","rgb","parseInt","getBgImage","bgImage","assignTo","target","source","output","sourceVal","targetVal","LibThemeProvider","children","combinedBaseTheme","tKey","isArray","sKey","assignFontBase","base","combinedTheme","React","ThemeProvider","View","styled","section","addSeperation","isStackable","bgIdent","Back","div","bgColor","bgMode","mode","bgValue","getBackground","Section","renderAs","className","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","Copy","columns","Actions","StyledTitle","ContentBlock","StyledActions","IntroBlock","text","primaryAction","secondaryAction","clampTitle","clampText","Intro","useContext","Img","Picture","picture","alt","coverSpace","onClick","srcSet","media","loading","ImgContainer","ImgWrapper","StyledImage","global","Gallery","images","array","isFull","currentIndex","newIndex","isNextImgFull","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","Teaser","intro","subText","description","WideImage","TeaserWide","hasBg","a","textDecoration","inverted","Pointer","React.forwardRef","isDisabled","disable","href","isExternal","rel","displayName","CursorState","Icon","Label","StyledSection","ListContainer","ItemContainer","ShowMore","itemCount","Items","ActionsWrapper","Item","ListFooter","IconList","showLessText","showMoreText","showMore","setShowMore","isVisible","Content","ContentText","Article","asideText","withAsideText","isAside","ImageContainer","ArticleContent","Desc","Feature","ContentContainer","FeatureList","features","featureCount","cardRefs","isHalf","feature","LinkHelper","IntroContainer","PromotionCard","clickable","FlexGrid","FlexGridCol","PosterContainer","CrossPromotion","main","aside","card","Poster","hasWrapper","hasContent","SVG","svg","Play","iconColor","width","viewBox","xmlns","d","isActive","VideoControls","Iframe","iframe","VideoCard","embedId","playIcon","setIsActive","allow","Video","ContactView","Avatar","Info","Address","Decorator","AddressLabel","StyledIntro","StyledContactBox","addresses","avatar","address","decorator","NewsletterWrapper","Badge","CallToAction","contact","badge","newsForm","column","FactsContainer","ul","FactsItem","li","Text","FactList","facts","icon","hasText","Fact","subTitle","FactFill","FactGrid","factCount","fact","TableContainer","TableBody","table","TableHead","th","hasBack","TableData","td","TableBlock","row","tableTitle","rowTitle","ii","itemText","TableWrapper","Table","tableItems","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","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","attribution","activeMarkerId","markers","center","zoom","touchZoom","scrollWheelZoom","onlyScrollOnFocus","fitBoundsPadding","onMarkerClick","onFlyToClick","flyToControl","onActiveMarkerChanged","cRef","prevMarkerId","_j","L","setLeaflet","_k","setMap","_l","markersLayer","setMarkersLayer","_m","cElement","mapContainerRef","import","leaflet","map_1","once","enable","tileLayer","addTo","markersLayer_1","FeatureGroup","showAllMarkers","fitBounds","getBounds","padding","point","flyToPosition","position","flyTo","flyToActive","marker","m","clearLayers","markerIcon","iconUrl","iconSize","sizeActive","iconAnchor","anchorActive","anchor","riseOnHover","on","addLayer","markerId","goTo","showAll","CardWrapper","SliderWrapper","InfoCardView","CardHeader","ContactList","ContactListLabel","LocationInfoCard","location","meta","c","Controls","StyledDotGroup","Slider","DotWrapper","Dot","StyledControl","provider","flyToZoom","initialLocation","locations","allMarkersOnInit","controlNext","controlPrev","dot","activeLocation","setActiveLocation","locIndex","findIndex","loc","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","Form","submitAction","onSubmit","formFields","checkbox","yupValidationSchema","validation","Formik","initialValues","surname","phone","area","mail","check","validate","errors","validationSchema","obj","handleSubmit","setFieldValue","isValid","dirty","preventDefault","constructor","additionalProps","Plus","Minus","AccordionBlock","borderColor","AccordionItems","AccordionHead","IconContainer","AccordionText","Accordion","React.useState","currentItems","setCurrentItems","hasColumns","splice","ArrowLeftRight","fillRule","clipRule","clamp","num","Images","BackgroundImg","ForegroundContainer","hasAnim","initalValue","ForegroundImg","ForegroundOverlay","ImageLabel","ForegroundLabel","BackgroundLabel","ControlContainer","Control","ComparisonSlider","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","Head","TopControls","StyledSlides","Footer","CtrlWrapper","CtrlWrapperLeft","CtrlWrapperRight","CarouselBase","variableWidths","child","ImageCarousel","imageCount","FullWidthImg","StyledWrapper","FeatureCarousel","PromotionCarousel","promotions","promotionCount","promotion","VideoCarousel","videos","videoCount","video","Link","Bdot","IconItemView","StyledLink","SocialList","MainView","topSpace","hAlign","LogoLink","ContactData","SiteLinksView","SiteLink","LinkWrapper","BottomWrapper","BottomView","logo","columnTopSpace","contactData","siteLinks","newsTitle","newsText","socials","bottomLinks","brandIcon","siteLinksColLeft","ceil","siteLinksColRight","link","direction","AnimationContainer","PosterImage","AnimationImage","scale","opacity","AnimationImages","intervalRef","activeImg","setActiveImg","changeImage","setTimeout","zIndex","HeaderKenBurns","onImageChange","React.useEffect","loadedForMq","useWebp_1","backgroundImage","PosterView","HeaderPoster","Callout","PlaceholderImg","AutoplayVideo","HeaderVideo","placeholderImg","videoUrl","isMobile","muted","autoPlay","loop","onCanPlayThrough","header","HeaderWrapper","PosterContent","PosterContentMobile","StyledPoster","Header","sizeScale","primaryCta","secondaryCta","withTopGradient","customTopGradient","customBottomGradient","topGradient","bottomGradient","noTitle","content","showOnMobile","Seperator","ContentFlex","Author","StyledCopy","NewsAuthorCard","author","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","publishedAt","NewsFooter","news","newsCount","setItemsPerRow","visibleRows","setVisibleRows","ImageFlex","NewsImages","imageStyle","isSingleHalf","IntroHead","HeadTag","MetaBlock","NewsIntro","tags","News","NewsList","NewsTable","NewsText","NewsVideo","useObserverSupport","inital","observerSupported","setObserverSupport","IntersectionObserverEntry","TagContainer","TagWrapper","List","NewsOverview","activeTag","queryParams","selected","decodeURI","selectedTag","setSelectedTag","targetRef","setNewPos","entry","disconnect","QuicknavButton","NavList","NavItem","NavItemContainer","Test","Quicknav","navItems","activeNavItem","onNavClick","isActiveItem","setIsActiveItem","pos","setPos","setWidth","parentRef","React.useRef","itemRef","parent","ParentBox","scrollLeft","scrollIntoView","paddingTop","transition","TimelineBlock","TimelineText","Timeline","targetRefs","setTargetRefs","observerRef","activeItem","setActiveItem","isSwitched","Socials","Social","SocialNav","social","NumberContainer","stringLength","IconBlock","number","NumberList","Button","toInteger","dirtyNumber","NaN","requiredArgs","args","toDate","argument","argStr","console","warn","Error","stack","addMilliseconds","dirtyDate","dirtyAmount","amount","getTimezoneOffsetInMilliseconds","utcDate","UTC","getMilliseconds","setUTCFullYear","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","pattern","test","findKey","object","predicate","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","deleteAction","nextCtrlUrl","prevCtrlUrl","pickerRef","pickerBtnRef","isSmall","setIsSmall","setStartDate","setEndDate","focused","registerLocale","shouldBeSmall","setOpen","handleReset","useCallback","ReactDatePicker","dirtyDateToCompare","dateToCompare","isBefore","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","files","files_1","promises","file","isUploading","reader","FileReader","readAsDataURL","readFileAsync","all","multiple","accept","fileName","FieldContainer","DynamicForm","fields","submitLabel","initalData","initialDates","group","groupType","initalArray_1","field","initialChecked","every","useFormik","setSubmitting","validateOnBlur","validateOnChange","config","inputType","_r","errorMsg","single","singleDateError","mutliDateError","_o","selectValues","_p","_q","handleChange","handleBlur","setFieldTouched","validateField","isSubmitting","touched","noValidate","generationProps","formikValues","formikErrors","formikTouches","setField","setTouched","generateField","generateArea","generateDatepicker","generateCheckboxGroup","generateRadioGroup","generateSelect","generateUpload","Fields","groupData","ci","cIndex","fi","dates","start","end","info","dropdownItems","form","InputField","backColor","SubmitBtn","CompactForm","method","action","buttonIcon","onFocus","backgroundStyle","ControlBtn","ClearBtn","SearchInput","submitIcon","clearIcon","onClear","hasLeftIcon","hasRightIcon","onKeyDown","keyCode","activateTrackingScripts","scriptElements","querySelectorAll","newScriptElement","appendChild","parentNode","removeChild","Stage","CookieConsent","cookieName","urlWhitelist","consentAcceptStatusMsg","consentDeclineStatusMsg","noCookieStatusMsg","lifetime","overlayOpacity","setIsVisible","allConsentButtons","len","bindConsentButtons","urlString","whitelist","isInWhiteList","isUrlInWhitelist","pathname","consent","status","allConsentStatusElements","updatedAt","getFormattedStatus","updateConsentStatusElements","bgOpacity","handleDecline","log","handleAccept","additionalAcceptProps","additionalDeclineProps","CookieIcon","TitleView","CookieTitle","TextView","CookieText","CookieActions","Cross","isLarge","HeaderCol","LeftCol","CenterCol","RightCol","ToggleContainer","StyledMenuClose","SearchContainer","ScrollArea","MirroredLargeContainerDesktop","NavListView","Nav","nav","Group","GroupLabel","GroupLabelSpacer","ItemLink","ItemLabel","toggleIcon","search","onCloseClick","navGroups","activeGroup","itemIndex","Backdrop","SocialContainer","Menu","backdropOpacity","MenuBurger","TopWhitespace","showLarge","isBackVisible","allowOffset","Column","StyledMenuBurger","logoHeight","clampValue","TopBar","allowTopOverlow","isLargeOnPageTop","onToggleClick","setIsLarge","isAnimated","setIsAnimated","defaultLogoScale","pageTopScale","mobile","desktop","scrolledScale","isBarInverted","logoScale","scalePageTop","scaleScrolled","logoTopHeight","animated","Navigation","isMenuInverted","isLargeMenu","isTopbarInverted","allowTopbarOverflow","hideTopbarBackUnderMenu","isTopbarLargeOnPageTop","openMenuIcon","closeMenuIcon","isMenuOpen","setIsMenuOpen","sharedProps","overflow","ArrowRight","CrossSmall","Magnifier","FlyTo","Star","StarGhost","Mail","Phone","Route","Facebook","LinkedIn","Twitter","Xing","Instagram","Youtube"],"mappings":"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"}