@blateral/b.kit 1.5.13 → 1.5.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"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] =\n useState<FeatureGroup<any> | null>(null);\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 touchZoom\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: '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: '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 { hexToRgba } from 'utils/hexRgbConverter';\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 }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\n }\n\n &:focus {\n border: ${({ theme }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\n }\n\n &::placeholder {\n color: ${({ theme }) => hexToRgba(color(theme).dark, 0.4)};\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 onBlur?: (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 onBlur,\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 type=\"copy\">\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 onBlur={onBlur}\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 { hexToRgba } from 'utils/hexRgbConverter';\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 }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\n }\n\n &:focus {\n border: ${({ theme }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\n }\n\n &::placeholder {\n color: ${({ theme }) => hexToRgba(color(theme).dark, 0.4)};\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 onBlur?: (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 onBlur,\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\">\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 onBlur={onBlur}\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 ul {\n list-style-type: disc;\n }\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';\nimport { HeaderFocus } from './Header';\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)<{ focus?: HeaderFocus }>`\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: ${({ focus }) =>\n `${focus?.[0] || 'center'} ${focus?.[1] || 'center'}`};\n`;\n\nconst HeaderPoster: React.FC<{\n bgImage: HeaderPosterImageProps;\n className?: string;\n focus?: HeaderFocus;\n}> = ({ bgImage, className, children, focus }) => {\n return (\n <PosterView className={className}>\n <BackgroundImg {...bgImage} alt=\"\" focus={focus} />\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';\nimport { HeaderFocus } from './Header';\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)<{ focus?: HeaderFocus }>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n z-index: 0;\n\n object-position: ${({ focus }) =>\n `${focus?.[0] || 'center'} ${focus?.[1] || 'center'}`};\n`;\n\nconst AutoplayVideo = styled.video<{\n isVisible?: boolean;\n focus?: HeaderFocus;\n}>`\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: ${({ focus }) =>\n `${focus?.[0] || 'center'} ${focus?.[1] || '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 focus?: HeaderFocus;\n}> = ({ placeholderImg, videoUrl, className, children, focus }) => {\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} focus={focus} />\n )}\n {videoUrl && !isMobile && (\n <AutoplayVideo\n isVisible={isLoaded}\n src={videoUrl}\n muted\n autoPlay\n loop\n onCanPlayThrough={() => setLoaded(true)}\n focus={focus}\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: ${spacings.spacer}px;\n ${withRange([spacings.spacer * 2, spacings.spacer * 3], '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 focus?: HeaderFocus;\n}> = ({ videoUrl, images, className, focus, children }) => {\n if (!videoUrl) {\n if (!images || images.length === 0) return <div>{children}</div>;\n else if (images.length === 1)\n return (\n <HeaderPoster\n focus={focus}\n bgImage={images[0]}\n className={className}\n >\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 focus={focus}\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 @media ${mq.semilarge} {\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\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\nexport type HeaderFocus = [\n 'left' | 'center' | 'right',\n 'top' | 'center' | 'bottom'\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 focusPoint?: HeaderFocus;\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 focusPoint = ['center', 'center'],\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 || intro?.title || intro?.text || 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 focus={focusPoint}\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 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 innerHTML={intro.title}\n />\n )}\n {intro.text && (\n <Copy\n textColor=\"#fff\"\n innerHTML={intro.text}\n />\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 <PosterContentMobile>\n <Wrapper>\n {!intro?.title && title && (\n <Callout\n size=\"medium\"\n as={titleAs}\n textColor=\"#000\"\n innerHTML={title}\n />\n )}\n {intro && intro.title && (\n <IntroBlock noTitle={!intro.title && !!title}>\n {intro.title && (\n <Heading\n as=\"h1\"\n size=\"heading-1\"\n textColor=\"#000\"\n innerHTML={intro.title}\n />\n )}\n {intro.text && (\n <Copy textColor=\"#000\" innerHTML={intro.text} />\n )}\n </IntroBlock>\n )}\n {(primaryCta || secondaryCta) && (\n <StyledActions\n primary={primaryCta && primaryCta(true)}\n secondary={secondaryCta && secondaryCta(true)}\n />\n )}\n </Wrapper>\n </PosterContentMobile>\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 }) => hexToRgba(color(theme).dark, 0.2)} !important;\n border-radius: 0 !important;\n padding: ${spacings.spacer}px;\n width: 100%;\n\n box-shadow: 0px 3px 9px rgba(0, 0, 0, 0.15);\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 }) => hexToRgba(color(theme).dark, 0.6)} !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 hexToRgba(color(theme).dark, 0.2)} !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: ${({ theme }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\n }\n\n &:active {\n border: ${({ theme }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\n }\n\n ${({ isActive }) =>\n isActive &&\n css`\n border: ${({ theme }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\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\n isInverted={isInverted}\n size=\"medium\"\n type=\"copy-b\"\n >\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 type=\"copy\">\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 { hexToRgba } from 'utils/hexRgbConverter';\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 height: 60px;\n max-height: 60px;\n\n position: relative;\n\n &:active {\n border: ${({ theme }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\n }\n\n &:focus {\n border: ${({ theme }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\n }\n\n ${({ isActive, theme }) =>\n isActive &&\n css`\n border: 2px solid ${hexToRgba(color(theme).dark, 0.2)}};\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: 2px solid ${({ theme }) => hexToRgba(color(theme).dark, 0.2)};\n border-top: none;\n\n max-height: 300px;\n overflow-y: scroll;\n scrollbar-width: none;\n\n ::-webkit-scrollbar {\n display: none;\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 }) => hexToRgba(color(theme).dark, 0.4)};\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 }) =>\n hexToRgba(color(theme).dark, 0.4)};\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 isInverted={isInverted}\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\"\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 { 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 }) => color(theme).dark};\n\n & > * {\n color: ${({ theme }) => color(theme).light};\n }\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 & > * {\n color: ${({ theme }) => color(theme).error};\n }\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 isInverted={isInverted}\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, mq, spacings } from 'utils/styles';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { Field, FormikErrors, useFormik } from 'formik';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\nimport Button from 'components/buttons/Button';\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 Form = styled.form`\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n @media ${mq.semilarge} {\n flex-direction: row;\n }\n`;\n\nconst FieldContainer = styled.div`\n flex: 1 1 0;\n text-align: center;\n\n & + & {\n margin-top: ${spacings.spacer * 1.5}px;\n }\n\n & > * + * {\n margin-top: ${spacings.spacer * 1.5}px;\n }\n\n @media ${mq.semilarge} {\n max-width: 590px;\n\n & + & {\n margin-top: 0;\n }\n\n &:first-child {\n padding-right: ${spacings.nudge * 3}px;\n }\n\n &:last-child {\n padding-left: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst ActionContainer = styled.div<{ hasCols?: boolean }>`\n width: 100%;\n max-width: calc(590px * 2 + ${spacings.nudge * 2}px);\n\n margin: 0 auto;\n margin-top: ${spacings.spacer * 2}px;\n\n text-align: ${({ hasCols }) => (hasCols ? 'left' : 'center')};\n`;\n\nexport interface FormStructure {\n [key: string]: Field | Area | Select | Datepicker | FieldGroup | FileUpload;\n}\n\nexport interface FormField {\n isRequired?: boolean;\n column?: 'left' | 'right';\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]: FormDataTypes;\n}\n\nexport type FormDataTypes =\n | string\n | boolean\n | Array<string>\n | [Date | null, Date | null]\n | Array<File>;\n\ntype FieldTypes = Field | Area | Select | Datepicker | FieldGroup | FileUpload;\n\nexport interface FieldGenerationProps<T extends FieldTypes> {\n field: T;\n value: FormDataTypes;\n error: string;\n isTouched: boolean;\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 onSubmit?: (values: FormData) => Promise<void>;\n submitAction?: (props: {\n isInverted?: boolean;\n handleSubmit?: () => Promise<any>;\n isDisabled?: boolean;\n }) => React.ReactNode;\n\n bgMode?: 'full' | 'inverted';\n definitions?: {\n field?: (props: FieldGenerationProps<Field>) => React.ReactNode;\n area?: (props: FieldGenerationProps<Area>) => React.ReactNode;\n select?: (props: FieldGenerationProps<Select>) => React.ReactNode;\n datepicker?: (\n props: FieldGenerationProps<Datepicker>\n ) => React.ReactNode;\n checkbox?: (props: FieldGenerationProps<FieldGroup>) => React.ReactNode;\n radio?: (props: FieldGenerationProps<FieldGroup>) => React.ReactNode;\n upload?: (props: FieldGenerationProps<FieldGroup>) => React.ReactNode;\n };\n}> = ({\n fields,\n onSubmit,\n submitAction,\n definitions,\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 submitForm,\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 const leftColumn =\n fields &&\n Object.keys(fields).filter(\n (l) => !fields[l].column || fields[l].column === 'left'\n );\n\n const rightColumn =\n fields &&\n Object.keys(fields).filter((l) => fields[l].column === 'right');\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 leftColumn?.map((label, i) => {\n const generationProps = {\n index: i,\n field: fields[label],\n key: label,\n value: values[label],\n error: errors[label],\n isTouched: touched[label] || false,\n isInverted: isInverted,\n hasBg: hasBg,\n setField: 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 definitions?.field\n ? definitions.field(generationProps)\n : generateField(generationProps);\n case 'Area':\n return definitions?.area\n ? definitions.area(generationProps)\n : generateArea(generationProps);\n case 'Datepicker':\n return definitions?.datepicker\n ? definitions.datepicker(\n generationProps\n )\n : generateDatepicker(\n generationProps\n );\n case 'FieldGroup': {\n if (\n (fields[label] as FieldGroup)\n .groupType === 'Checkbox'\n ) {\n return definitions?.checkbox\n ? definitions.checkbox(\n generationProps\n )\n : generateCheckboxGroup(\n generationProps\n );\n } else {\n return definitions?.radio\n ? definitions.radio(\n generationProps\n )\n : generateRadioGroup(\n generationProps\n );\n }\n }\n case 'Select':\n return definitions?.select\n ? definitions.select(\n generationProps\n )\n : generateSelect(generationProps);\n case 'Upload':\n return definitions?.upload\n ? definitions.upload(\n generationProps\n )\n : generateUpload(generationProps);\n default:\n return null;\n }\n })}\n </FieldContainer>\n {rightColumn && rightColumn.length > 0 && (\n <FieldContainer>\n {fields &&\n rightColumn?.map((label, i) => {\n const generationProps = {\n index: i,\n field: fields[label],\n key: label,\n value: values[label],\n error: errors[label],\n isTouched: touched[label] || false,\n isInverted: isInverted,\n hasBg: hasBg,\n setField: 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 definitions?.field\n ? definitions.field(\n generationProps\n )\n : generateField(\n generationProps\n );\n case 'Area':\n return definitions?.area\n ? definitions.area(\n generationProps\n )\n : generateArea(generationProps);\n case 'Datepicker':\n return definitions?.datepicker\n ? definitions.datepicker(\n generationProps\n )\n : generateDatepicker(\n generationProps\n );\n case 'FieldGroup': {\n if (\n (fields[label] as FieldGroup)\n .groupType === 'Checkbox'\n ) {\n return definitions?.checkbox\n ? definitions.checkbox(\n generationProps\n )\n : generateCheckboxGroup(\n generationProps\n );\n } else {\n return definitions?.radio\n ? definitions.radio(\n generationProps\n )\n : generateRadioGroup(\n generationProps\n );\n }\n }\n case 'Select':\n return definitions?.select\n ? definitions.select(\n generationProps\n )\n : generateSelect(\n generationProps\n );\n case 'Upload':\n return definitions?.upload\n ? definitions.upload(\n generationProps\n )\n : generateUpload(\n generationProps\n );\n default:\n return null;\n }\n })}\n </FieldContainer>\n )}\n </Form>\n {fields && (\n <ActionContainer\n hasCols={rightColumn && rightColumn.length > 0}\n >\n <Actions\n isCentered\n primary={\n submitAction ? (\n submitAction({\n isInverted,\n isDisabled: isSubmitting || !dirty,\n handleSubmit: submitForm,\n })\n ) : (\n <Button.View\n as=\"button\"\n onClick={submitForm}\n isDisabled={isSubmitting || !dirty}\n {...{\n type: 'submit',\n }}\n >\n <Button.Label>send</Button.Label>\n </Button.View>\n )\n }\n />\n </ActionContainer>\n )}\n </Wrapper>\n </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 field,\n key,\n isInverted,\n value,\n isTouched,\n error,\n setTouched,\n validateField,\n setField,\n theme,\n}: FieldGenerationProps<FieldGroup>) => {\n const group = field;\n const groupData = value as string[];\n\n return (\n <div key={key}>\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 {error && isTouched && (\n <ErrorMessage textColor={color(theme).error} size=\"small\">\n {error}\n </ErrorMessage>\n )}\n </div>\n );\n};\n\nconst generateRadioGroup = ({\n field,\n key,\n value,\n error,\n isTouched,\n isInverted,\n hasBg,\n setField,\n theme,\n}: FieldGenerationProps<FieldGroup>) => {\n const group = field;\n const groupData = value as string;\n\n return (\n <div key={key}>\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 {error && isTouched && (\n <ErrorMessage textColor={color(theme).error} size=\"small\">\n {error}\n </ErrorMessage>\n )}\n </div>\n );\n};\n\nconst generateDatepicker = ({\n field,\n key,\n value,\n error,\n isTouched,\n isInverted,\n hasBg,\n setField,\n setTouched,\n validateField,\n}: FieldGenerationProps<Datepicker>) => {\n const dates = value as [Date | null, Date | null];\n\n return (\n <Datepicker\n key={key}\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={error && isTouched ? error : undefined}\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 field,\n key,\n value,\n error,\n isTouched,\n isInverted,\n hasBg,\n handleChange,\n handleBlur,\n}: FieldGenerationProps<Area>) => (\n <Textarea\n key={key}\n label={`${key}${field.isRequired ? '*' : ''}`}\n placeholder={field.placeholder}\n name={key}\n value={value as string}\n isInverted={isInverted}\n onChange={handleChange}\n onBlur={handleBlur}\n infoMessage={field.info}\n errorMessage={error && isTouched ? error : undefined}\n lightBg={hasBg}\n />\n);\n\nconst generateUpload = ({\n field,\n key,\n error,\n isTouched,\n isInverted,\n hasBg,\n setField,\n}: FieldGenerationProps<FileUpload>) => (\n <FileUpload\n key={key}\n label={`${key}${field.isRequired ? '*' : ''}`}\n name={key}\n infoMessage={field.info}\n addBtnLabel={field.addBtnLabel}\n removeBtnLabel={field.removeBtnLabel}\n errorMessage={error && isTouched ? error : undefined}\n acceptedFormats={field.acceptedFormats}\n onUploadFiles={(files) => {\n setField(key, files);\n }}\n hasBg={!hasBg}\n isInverted={isInverted}\n />\n);\n\nconst generateField = ({\n field,\n key,\n value,\n error,\n isTouched,\n handleChange,\n handleBlur,\n isInverted,\n hasBg,\n}: FieldGenerationProps<Field>) => (\n <Textfield\n key={key}\n label={`${key}${field.isRequired ? '*' : ''}`}\n placeholder={field.placeholder}\n name={key}\n isInverted={isInverted}\n value={value as string}\n onChange={handleChange}\n onBlur={handleBlur}\n infoMessage={field.info}\n errorMessage={error && isTouched ? error : undefined}\n lightBg={hasBg}\n />\n);\n\nconst generateSelect = ({\n field,\n key,\n value,\n error,\n isTouched,\n isInverted,\n hasBg,\n setField,\n setTouched,\n}: FieldGenerationProps<Select>) => (\n <SelectDropdown\n key={key}\n label={`${key}${field.isRequired ? '*' : ''}`}\n name={key}\n placeholder={field.placeholder}\n errorMessage={error && isTouched ? error : undefined}\n items={field.dropdownItems || []}\n value={value 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';\nimport { hexToRgba } from 'utils/hexRgbConverter';\n\nconst View = styled.div<{\n isOpen?: boolean;\n isMirrored?: boolean;\n isLarge?: boolean;\n bgBlur?: string;\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 @supports ((-webkit-backdrop-filter: none) or (backdrop-filter: none)) {\n backdrop-filter: ${({ bgBlur }) => bgBlur && `blur(${bgBlur})`};\n }\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 opacity?: number;\n}>`\n height: 100%;\n width: 100%;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).dark : color(theme).light};\n\n @supports ((-webkit-backdrop-filter: none) or (backdrop-filter: none)) {\n background-color: ${({ theme, isInverted, opacity }) =>\n isInverted\n ? hexToRgba(color(theme).dark, opacity || 1)\n : hexToRgba(color(theme).light, opacity || 1)};\n }\n\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\nexport interface FlyoutBackgroundSettings {\n opacity?: number;\n blur?: string;\n}\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 background?: FlyoutBackgroundSettings;\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 background,\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 bgBlur={background?.blur}\n >\n <StyledWrapper clampWidth={isLarge ? 'large' : 'normal'}>\n <Stage\n isOpen={isOpen}\n isLarge={isLarge}\n isInverted={isInverted}\n isMirrored={isMirrored}\n opacity={background?.opacity}\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, { FlyoutBackgroundSettings, 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 background?: FlyoutBackgroundSettings;\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 background,\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 background={background}\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 { FlyoutBackgroundSettings, 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 background?: FlyoutBackgroundSettings;\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 background,\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 background={background}\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","onBlur","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","focus","HeaderPoster","Callout","PlaceholderImg","AutoplayVideo","HeaderVideo","placeholderImg","videoUrl","isMobile","muted","autoPlay","loop","onCanPlayThrough","header","HeaderWrapper","PosterContent","PosterContentMobile","StyledPoster","Header","sizeScale","primaryCta","secondaryCta","withTopGradient","customTopGradient","customBottomGradient","focusPoint","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","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","form","FieldContainer","ActionContainer","DynamicForm","fields","definitions","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","submitForm","isSubmitting","touched","leftColumn","l","rightColumn","noValidate","generationProps","isTouched","setField","setTouched","generateField","generateArea","datepicker","generateDatepicker","generateCheckboxGroup","radio","generateRadioGroup","select","generateSelect","upload","generateUpload","hasCols","Fields","groupData","ci","cIndex","fi","dates","start","end","info","dropdownItems","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","bgBlur","isLarge","HeaderCol","LeftCol","CenterCol","RightCol","ToggleContainer","StyledMenuClose","SearchContainer","ScrollArea","MirroredLargeContainerDesktop","NavListView","Nav","nav","Group","GroupLabel","GroupLabelSpacer","ItemLink","ItemLabel","toggleIcon","background","search","onCloseClick","blur","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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"}
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] =\n useState<FeatureGroup<any> | null>(null);\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 touchZoom\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: '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: '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 { hexToRgba } from 'utils/hexRgbConverter';\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 }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\n }\n\n &:focus {\n border: ${({ theme }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\n }\n\n &::placeholder {\n color: ${({ theme }) => hexToRgba(color(theme).dark, 0.4)};\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 onBlur?: (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 onBlur,\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 type=\"copy\">\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 onBlur={onBlur}\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 { hexToRgba } from 'utils/hexRgbConverter';\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 }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\n }\n\n &:focus {\n border: ${({ theme }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\n }\n\n &::placeholder {\n color: ${({ theme }) => hexToRgba(color(theme).dark, 0.4)};\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 onBlur?: (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 onBlur,\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\">\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 onBlur={onBlur}\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 ul {\n list-style-type: disc;\n }\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';\nimport { HeaderFocus } from './Header';\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)<{ focus?: HeaderFocus }>`\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: ${({ focus }) =>\n `${focus?.[0] || 'center'} ${focus?.[1] || 'center'}`};\n`;\n\nconst HeaderPoster: React.FC<{\n bgImage: HeaderPosterImageProps;\n className?: string;\n focus?: HeaderFocus;\n}> = ({ bgImage, className, children, focus }) => {\n return (\n <PosterView className={className}>\n <BackgroundImg {...bgImage} alt=\"\" focus={focus} />\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';\nimport { HeaderFocus } from './Header';\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)<{ focus?: HeaderFocus }>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n z-index: 0;\n\n object-position: ${({ focus }) =>\n `${focus?.[0] || 'center'} ${focus?.[1] || 'center'}`};\n`;\n\nconst AutoplayVideo = styled.video<{\n isVisible?: boolean;\n focus?: HeaderFocus;\n}>`\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: ${({ focus }) =>\n `${focus?.[0] || 'center'} ${focus?.[1] || '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 focus?: HeaderFocus;\n}> = ({ placeholderImg, videoUrl, className, children, focus }) => {\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} focus={focus} />\n )}\n {videoUrl && !isMobile && (\n <AutoplayVideo\n isVisible={isLoaded}\n src={videoUrl}\n muted\n autoPlay\n loop\n onCanPlayThrough={() => setLoaded(true)}\n focus={focus}\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: ${spacings.spacer}px;\n ${withRange([spacings.spacer * 2, spacings.spacer * 3], '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 focus?: HeaderFocus;\n}> = ({ videoUrl, images, className, focus, children }) => {\n if (!videoUrl) {\n if (!images || images.length === 0) return <div>{children}</div>;\n else if (images.length === 1)\n return (\n <HeaderPoster\n focus={focus}\n bgImage={images[0]}\n className={className}\n >\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 focus={focus}\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 @media ${mq.semilarge} {\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\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\nexport type HeaderFocus = [\n 'left' | 'center' | 'right',\n 'top' | 'center' | 'bottom'\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 focusPoint?: HeaderFocus;\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 focusPoint = ['center', 'center'],\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 || intro?.title || intro?.text || 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 focus={focusPoint}\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 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 innerHTML={intro.title}\n />\n )}\n {intro.text && (\n <Copy\n textColor=\"#fff\"\n innerHTML={intro.text}\n />\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 <PosterContentMobile>\n <Wrapper>\n {!intro?.title && title && (\n <Callout\n size=\"medium\"\n as={titleAs}\n textColor=\"#000\"\n innerHTML={title}\n />\n )}\n {intro && intro.title && (\n <IntroBlock noTitle={!intro.title && !!title}>\n {intro.title && (\n <Heading\n as=\"h1\"\n size=\"heading-1\"\n textColor=\"#000\"\n innerHTML={intro.title}\n />\n )}\n {intro.text && (\n <Copy textColor=\"#000\" innerHTML={intro.text} />\n )}\n </IntroBlock>\n )}\n {(primaryCta || secondaryCta) && (\n <StyledActions\n primary={primaryCta && primaryCta(true)}\n secondary={secondaryCta && secondaryCta(true)}\n />\n )}\n </Wrapper>\n </PosterContentMobile>\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 }) => hexToRgba(color(theme).dark, 0.2)} !important;\n border-radius: 0 !important;\n padding: ${spacings.spacer}px;\n width: 100%;\n\n box-shadow: 0px 3px 9px rgba(0, 0, 0, 0.15);\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 }) => hexToRgba(color(theme).dark, 0.6)} !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 hexToRgba(color(theme).dark, 0.2)} !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: ${({ theme }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\n }\n\n &:active {\n border: ${({ theme }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\n }\n\n ${({ isActive }) =>\n isActive &&\n css`\n border: ${({ theme }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\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\n isInverted={isInverted}\n size=\"medium\"\n type=\"copy-b\"\n >\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 type=\"copy\">\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 { hexToRgba } from 'utils/hexRgbConverter';\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 height: 60px;\n max-height: 60px;\n\n position: relative;\n\n &:active {\n border: ${({ theme }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\n }\n\n &:focus {\n border: ${({ theme }) =>\n `2px solid ${hexToRgba(color(theme).dark, 0.2)}`};\n }\n\n ${({ isActive, theme }) =>\n isActive &&\n css`\n border: 2px solid ${hexToRgba(color(theme).dark, 0.2)}};\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: 2px solid ${({ theme }) => hexToRgba(color(theme).dark, 0.2)};\n border-top: none;\n\n max-height: 300px;\n overflow-y: scroll;\n scrollbar-width: none;\n\n ::-webkit-scrollbar {\n display: none;\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 }) => hexToRgba(color(theme).dark, 0.4)};\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 }) =>\n hexToRgba(color(theme).dark, 0.4)};\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 isInverted={isInverted}\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\"\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 { 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 }) => color(theme).dark};\n\n & > * {\n color: ${({ theme }) => color(theme).light};\n }\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 & > * {\n color: ${({ theme }) => color(theme).error};\n }\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 isInverted={isInverted}\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, mq, spacings } from 'utils/styles';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport { Field, FormikErrors, useFormik } from 'formik';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\nimport Button from 'components/buttons/Button';\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 Form = styled.form`\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n @media ${mq.semilarge} {\n flex-direction: row;\n }\n`;\n\nconst FieldContainer = styled.div`\n flex: 1 1 0;\n text-align: center;\n\n & + & {\n margin-top: ${spacings.spacer * 1.5}px;\n }\n\n & > * + * {\n margin-top: ${spacings.spacer * 1.5}px;\n }\n\n @media ${mq.semilarge} {\n max-width: 590px;\n\n & + & {\n margin-top: 0;\n }\n\n &:first-child {\n padding-right: ${spacings.nudge * 3}px;\n }\n\n &:last-child {\n padding-left: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst ActionContainer = styled.div<{ hasCols?: boolean }>`\n width: 100%;\n max-width: calc(590px * 2 + ${spacings.nudge * 2}px);\n\n margin: 0 auto;\n margin-top: ${spacings.spacer * 2}px;\n\n text-align: ${({ hasCols }) => (hasCols ? 'left' : 'center')};\n`;\n\nexport interface FormStructure {\n [key: string]: Field | Area | Select | Datepicker | FieldGroup | FileUpload;\n}\n\nexport interface FormField {\n isRequired?: boolean;\n column?: 'left' | 'right';\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]: FormDataTypes;\n}\n\nexport type FormDataTypes =\n | string\n | boolean\n | Array<string>\n | [Date | null, Date | null]\n | Array<File>;\n\ntype FieldTypes = Field | Area | Select | Datepicker | FieldGroup | FileUpload;\n\nexport interface FieldGenerationProps<T extends FieldTypes> {\n field: T;\n value: FormDataTypes;\n error: string;\n isTouched: boolean;\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 onSubmit?: (values: FormData) => Promise<void>;\n submitAction?: (props: {\n isInverted?: boolean;\n handleSubmit?: () => Promise<any>;\n isDisabled?: boolean;\n }) => React.ReactNode;\n\n bgMode?: 'full' | 'inverted';\n definitions?: {\n field?: (props: FieldGenerationProps<Field>) => React.ReactNode;\n area?: (props: FieldGenerationProps<Area>) => React.ReactNode;\n select?: (props: FieldGenerationProps<Select>) => React.ReactNode;\n datepicker?: (\n props: FieldGenerationProps<Datepicker>\n ) => React.ReactNode;\n checkbox?: (props: FieldGenerationProps<FieldGroup>) => React.ReactNode;\n radio?: (props: FieldGenerationProps<FieldGroup>) => React.ReactNode;\n upload?: (props: FieldGenerationProps<FieldGroup>) => React.ReactNode;\n };\n}> = ({\n fields,\n onSubmit,\n submitAction,\n definitions,\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 submitForm,\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 const leftColumn =\n fields &&\n Object.keys(fields).filter(\n (l) => !fields[l].column || fields[l].column === 'left'\n );\n\n const rightColumn =\n fields &&\n Object.keys(fields).filter((l) => fields[l].column === 'right');\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 leftColumn?.map((label, i) => {\n const generationProps = {\n index: i,\n field: fields[label],\n key: label,\n value: values[label],\n error: errors[label],\n isTouched: touched[label] || false,\n isInverted: isInverted,\n hasBg: hasBg,\n setField: 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 definitions?.field\n ? definitions.field(generationProps)\n : generateField(generationProps);\n case 'Area':\n return definitions?.area\n ? definitions.area(generationProps)\n : generateArea(generationProps);\n case 'Datepicker':\n return definitions?.datepicker\n ? definitions.datepicker(\n generationProps\n )\n : generateDatepicker(\n generationProps\n );\n case 'FieldGroup': {\n if (\n (fields[label] as FieldGroup)\n .groupType === 'Checkbox'\n ) {\n return definitions?.checkbox\n ? definitions.checkbox(\n generationProps\n )\n : generateCheckboxGroup(\n generationProps\n );\n } else {\n return definitions?.radio\n ? definitions.radio(\n generationProps\n )\n : generateRadioGroup(\n generationProps\n );\n }\n }\n case 'Select':\n return definitions?.select\n ? definitions.select(\n generationProps\n )\n : generateSelect(generationProps);\n case 'Upload':\n return definitions?.upload\n ? definitions.upload(\n generationProps\n )\n : generateUpload(generationProps);\n default:\n return null;\n }\n })}\n </FieldContainer>\n {rightColumn && rightColumn.length > 0 && (\n <FieldContainer>\n {fields &&\n rightColumn?.map((label, i) => {\n const generationProps = {\n index: i,\n field: fields[label],\n key: label,\n value: values[label],\n error: errors[label],\n isTouched: touched[label] || false,\n isInverted: isInverted,\n hasBg: hasBg,\n setField: 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 definitions?.field\n ? definitions.field(\n generationProps\n )\n : generateField(\n generationProps\n );\n case 'Area':\n return definitions?.area\n ? definitions.area(\n generationProps\n )\n : generateArea(generationProps);\n case 'Datepicker':\n return definitions?.datepicker\n ? definitions.datepicker(\n generationProps\n )\n : generateDatepicker(\n generationProps\n );\n case 'FieldGroup': {\n if (\n (fields[label] as FieldGroup)\n .groupType === 'Checkbox'\n ) {\n return definitions?.checkbox\n ? definitions.checkbox(\n generationProps\n )\n : generateCheckboxGroup(\n generationProps\n );\n } else {\n return definitions?.radio\n ? definitions.radio(\n generationProps\n )\n : generateRadioGroup(\n generationProps\n );\n }\n }\n case 'Select':\n return definitions?.select\n ? definitions.select(\n generationProps\n )\n : generateSelect(\n generationProps\n );\n case 'Upload':\n return definitions?.upload\n ? definitions.upload(\n generationProps\n )\n : generateUpload(\n generationProps\n );\n default:\n return null;\n }\n })}\n </FieldContainer>\n )}\n </Form>\n {fields && (\n <ActionContainer\n hasCols={rightColumn && rightColumn.length > 0}\n >\n <Actions\n isCentered\n primary={\n submitAction ? (\n submitAction({\n isInverted,\n isDisabled: isSubmitting || !dirty,\n handleSubmit: submitForm,\n })\n ) : (\n <Button.View\n as=\"button\"\n onClick={submitForm}\n isDisabled={isSubmitting || !dirty}\n {...{\n type: 'submit',\n }}\n >\n <Button.Label>send</Button.Label>\n </Button.View>\n )\n }\n />\n </ActionContainer>\n )}\n </Wrapper>\n </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 field,\n key,\n isInverted,\n value,\n isTouched,\n error,\n setTouched,\n validateField,\n setField,\n theme,\n}: FieldGenerationProps<FieldGroup>) => {\n const group = field;\n const groupData = value as string[];\n\n return (\n <div key={key}>\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 {error && isTouched && (\n <ErrorMessage textColor={color(theme).error} size=\"small\">\n {error}\n </ErrorMessage>\n )}\n </div>\n );\n};\n\nconst generateRadioGroup = ({\n field,\n key,\n value,\n error,\n isTouched,\n isInverted,\n hasBg,\n setField,\n theme,\n}: FieldGenerationProps<FieldGroup>) => {\n const group = field;\n const groupData = value as string;\n\n return (\n <div key={key}>\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 {error && isTouched && (\n <ErrorMessage textColor={color(theme).error} size=\"small\">\n {error}\n </ErrorMessage>\n )}\n </div>\n );\n};\n\nconst generateDatepicker = ({\n field,\n key,\n value,\n error,\n isTouched,\n isInverted,\n hasBg,\n setField,\n setTouched,\n validateField,\n}: FieldGenerationProps<Datepicker>) => {\n const dates = value as [Date | null, Date | null];\n\n return (\n <Datepicker\n key={key}\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={error && isTouched ? error : undefined}\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 field,\n key,\n value,\n error,\n isTouched,\n isInverted,\n hasBg,\n handleChange,\n handleBlur,\n}: FieldGenerationProps<Area>) => (\n <Textarea\n key={key}\n label={`${key}${field.isRequired ? '*' : ''}`}\n placeholder={field.placeholder}\n name={key}\n value={value as string}\n isInverted={isInverted}\n onChange={handleChange}\n onBlur={handleBlur}\n infoMessage={field.info}\n errorMessage={error && isTouched ? error : undefined}\n lightBg={hasBg}\n />\n);\n\nconst generateUpload = ({\n field,\n key,\n error,\n isTouched,\n isInverted,\n hasBg,\n setField,\n}: FieldGenerationProps<FileUpload>) => (\n <FileUpload\n key={key}\n label={`${key}${field.isRequired ? '*' : ''}`}\n name={key}\n infoMessage={field.info}\n addBtnLabel={field.addBtnLabel}\n removeBtnLabel={field.removeBtnLabel}\n errorMessage={error && isTouched ? error : undefined}\n acceptedFormats={field.acceptedFormats}\n onUploadFiles={(files) => {\n setField(key, files);\n }}\n hasBg={!hasBg}\n isInverted={isInverted}\n />\n);\n\nconst generateField = ({\n field,\n key,\n value,\n error,\n isTouched,\n handleChange,\n handleBlur,\n isInverted,\n hasBg,\n}: FieldGenerationProps<Field>) => (\n <Textfield\n key={key}\n label={`${key}${field.isRequired ? '*' : ''}`}\n placeholder={field.placeholder}\n name={key}\n isInverted={isInverted}\n value={value as string}\n onChange={handleChange}\n onBlur={handleBlur}\n infoMessage={field.info}\n errorMessage={error && isTouched ? error : undefined}\n lightBg={hasBg}\n />\n);\n\nconst generateSelect = ({\n field,\n key,\n value,\n error,\n isTouched,\n isInverted,\n hasBg,\n setField,\n setTouched,\n}: FieldGenerationProps<Select>) => (\n <SelectDropdown\n key={key}\n label={`${key}${field.isRequired ? '*' : ''}`}\n name={key}\n placeholder={field.placeholder}\n errorMessage={error && isTouched ? error : undefined}\n items={field.dropdownItems || []}\n value={value 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 onClose?: () => void;\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 onClose,\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 onClose && onClose();\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 onClose && onClose();\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';\nimport { hexToRgba } from 'utils/hexRgbConverter';\n\nconst View = styled.div<{\n isOpen?: boolean;\n isMirrored?: boolean;\n isLarge?: boolean;\n bgBlur?: string;\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 @supports ((-webkit-backdrop-filter: none) or (backdrop-filter: none)) {\n backdrop-filter: ${({ bgBlur }) => bgBlur && `blur(${bgBlur})`};\n }\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 opacity?: number;\n}>`\n height: 100%;\n width: 100%;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).dark : color(theme).light};\n\n @supports ((-webkit-backdrop-filter: none) or (backdrop-filter: none)) {\n background-color: ${({ theme, isInverted, opacity }) =>\n isInverted\n ? hexToRgba(color(theme).dark, opacity || 1)\n : hexToRgba(color(theme).light, opacity || 1)};\n }\n\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\nexport interface FlyoutBackgroundSettings {\n opacity?: number;\n blur?: string;\n}\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 background?: FlyoutBackgroundSettings;\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 background,\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 bgBlur={background?.blur}\n >\n <StyledWrapper clampWidth={isLarge ? 'large' : 'normal'}>\n <Stage\n isOpen={isOpen}\n isLarge={isLarge}\n isInverted={isInverted}\n isMirrored={isMirrored}\n opacity={background?.opacity}\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, { FlyoutBackgroundSettings, 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 background?: FlyoutBackgroundSettings;\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 background,\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 background={background}\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 { FlyoutBackgroundSettings, 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 background?: FlyoutBackgroundSettings;\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 background,\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 background={background}\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","onBlur","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","focus","HeaderPoster","Callout","PlaceholderImg","AutoplayVideo","HeaderVideo","placeholderImg","videoUrl","isMobile","muted","autoPlay","loop","onCanPlayThrough","header","HeaderWrapper","PosterContent","PosterContentMobile","StyledPoster","Header","sizeScale","primaryCta","secondaryCta","withTopGradient","customTopGradient","customBottomGradient","focusPoint","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","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","form","FieldContainer","ActionContainer","DynamicForm","fields","definitions","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","submitForm","isSubmitting","touched","leftColumn","l","rightColumn","noValidate","generationProps","isTouched","setField","setTouched","generateField","generateArea","datepicker","generateDatepicker","generateCheckboxGroup","radio","generateRadioGroup","select","generateSelect","upload","generateUpload","hasCols","Fields","groupData","ci","cIndex","fi","dates","start","end","info","dropdownItems","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","onClose","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","bgBlur","isLarge","HeaderCol","LeftCol","CenterCol","RightCol","ToggleContainer","StyledMenuClose","SearchContainer","ScrollArea","MirroredLargeContainerDesktop","NavListView","Nav","nav","Group","GroupLabel","GroupLabelSpacer","ItemLink","ItemLabel","toggleIcon","background","search","onCloseClick","blur","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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"}