{"version":3,"file":"client.6f396e9253ae013837fe.js","mappings":"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","sources":["webpack://B2C-Marketsites-redesign/webpack/runtime/chunk loaded","webpack://B2C-Marketsites-redesign/webpack/runtime/create fake namespace object","webpack://B2C-Marketsites-redesign/webpack/runtime/load script","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/minus-sign.svg","webpack://B2C-Marketsites-redesign/./source/app.components-exposed.js","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/instagram.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/mail.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/plus-sign.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/chevron-up.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/facebook.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/arrow-right.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/check.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/menu-close.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/play-filled.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/arrow-down.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/play.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/phone.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/star-empty.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/share.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/star-full.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/difficulty-level.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/copy.svg","webpack://B2C-Marketsites-redesign/./source/components/icon/icon.jsx","webpack://B2C-Marketsites-redesign/./source/components/models/button-base/button-base.jsx","webpack://B2C-Marketsites-redesign/./source/components/models/aria-attributes/aria-attributes.js","webpack://B2C-Marketsites-redesign/./source/components/action-button/action-button.jsx","webpack://B2C-Marketsites-redesign/./source/js/image-resizer.js","webpack://B2C-Marketsites-redesign/./source/js/dom-image-utils.js","webpack://B2C-Marketsites-redesign/./source/components/image/image.jsx","webpack://B2C-Marketsites-redesign/./source/components/article-teaser/article-teaser-sizes.js","webpack://B2C-Marketsites-redesign/./source/components/article-teaser/article-teaser.jsx","webpack://B2C-Marketsites-redesign/./source/components/poor-text/poor-text.jsx","webpack://B2C-Marketsites-redesign/./source/components/article-teasers-block/article-teasers-block.jsx","webpack://B2C-Marketsites-redesign/./source/components/button/button.jsx","webpack://B2C-Marketsites-redesign/./source/hooks/use-toggle.js","webpack://B2C-Marketsites-redesign/./source/components/loading-indicator/loading-indicator.jsx","webpack://B2C-Marketsites-redesign/./source/components/embedded-video-block/embedded-video-block.jsx","webpack://B2C-Marketsites-redesign/./source/components/error-message/error-message.jsx","webpack://B2C-Marketsites-redesign/./source/components/filter-heading/filter-heading.jsx","webpack://B2C-Marketsites-redesign/./source/components/logo/logo.jsx","webpack://B2C-Marketsites-redesign/./source/components/models/link-base/link-base.jsx","webpack://B2C-Marketsites-redesign/./source/components/link/link.jsx","webpack://B2C-Marketsites-redesign/./source/components/link-button/link-button.jsx","webpack://B2C-Marketsites-redesign/./source/components/origin-matters/origin-matters.jsx","webpack://B2C-Marketsites-redesign/./source/js/breakpoints.js","webpack://B2C-Marketsites-redesign/./source/hooks/use-breakpoints.js","webpack://B2C-Marketsites-redesign/./source/components/footer-banner/footer-banner.jsx","webpack://B2C-Marketsites-redesign/./source/components/icon-button/icon-button.jsx","webpack://B2C-Marketsites-redesign/./source/components/social-link/social-link.jsx","webpack://B2C-Marketsites-redesign/./source/components/rich-text/rich-text.jsx","webpack://B2C-Marketsites-redesign/./source/components/footer/footer.jsx","webpack://B2C-Marketsites-redesign/./source/components/page-heading/page-heading.jsx","webpack://B2C-Marketsites-redesign/./source/js/calc-utils.js","webpack://B2C-Marketsites-redesign/./source/components/parallax-hero-background/parallax-hero-background.jsx","webpack://B2C-Marketsites-redesign/./source/js/stylesheet-utils.js","webpack://B2C-Marketsites-redesign/./source/hooks/use-animation-step-switcher.js","webpack://B2C-Marketsites-redesign/./source/components/front-page-hero/front-page-hero.jsx","webpack://B2C-Marketsites-redesign/./source/components/models/menu-link/menu-link.jsx","webpack://B2C-Marketsites-redesign/./source/components/main-menu/main-menu.jsx","webpack://B2C-Marketsites-redesign/./source/components/secondary-menu/secondary-menu.jsx","webpack://B2C-Marketsites-redesign/./source/components/models/search-form-lang/search-form-lang.jsx","webpack://B2C-Marketsites-redesign/./source/js/id-helper.js","webpack://B2C-Marketsites-redesign/./source/components/search-form/search-form.jsx","webpack://B2C-Marketsites-redesign/./source/components/quick-search/quick-search.jsx","webpack://B2C-Marketsites-redesign/./source/hooks/use-event.js","webpack://B2C-Marketsites-redesign/./source/hooks/use-escape.js","webpack://B2C-Marketsites-redesign/./source/hooks/use-click-outside.js","webpack://B2C-Marketsites-redesign/./source/components/header/header.jsx","webpack://B2C-Marketsites-redesign/./source/js/string-helper.js","webpack://B2C-Marketsites-redesign/./source/components/how-to-buy-block/how-to-buy-block.jsx","webpack://B2C-Marketsites-redesign/./source/components/how-to-page-hero/how-to-page-hero.jsx","webpack://B2C-Marketsites-redesign/./source/components/how-to-step-block/how-to-step-block.jsx","webpack://B2C-Marketsites-redesign/./source/components/icon-label/icon-label.jsx","webpack://B2C-Marketsites-redesign/./source/components/image-block/image-block.jsx","webpack://B2C-Marketsites-redesign/./source/components/image-collage-block/image-collage-block.jsx","webpack://B2C-Marketsites-redesign/./source/components/image-with-text-and-bg-color-block/image-with-text-and-bg-color-block.jsx","webpack://B2C-Marketsites-redesign/./source/js/pluralOrSingularText.js","webpack://B2C-Marketsites-redesign/./source/components/ingredients/ingredient-name.jsx","webpack://B2C-Marketsites-redesign/./source/components/ingredients/ingredient-unit.jsx","webpack://B2C-Marketsites-redesign/./source/components/ingredients/ingredient-amount.jsx","webpack://B2C-Marketsites-redesign/./source/components/ingredients/print-orders.js","webpack://B2C-Marketsites-redesign/./source/components/ingredients/ingredient.jsx","webpack://B2C-Marketsites-redesign/./source/components/ingredients/ingredients.jsx","webpack://B2C-Marketsites-redesign/./source/js/fullCopy.js","webpack://B2C-Marketsites-redesign/./source/components/parallax-text/parallax-text.jsx","webpack://B2C-Marketsites-redesign/./source/components/long-article-page-hero/long-article-page-hero.jsx","webpack://B2C-Marketsites-redesign/./source/components/models/filter-item/filter-item.jsx","webpack://B2C-Marketsites-redesign/./source/components/models/filter/filter.jsx","webpack://B2C-Marketsites-redesign/./source/components/models/pager-lang/pager-lang.jsx","webpack://B2C-Marketsites-redesign/./source/components/models/rate-recipe-result/rate-recipe-result.jsx","webpack://B2C-Marketsites-redesign/./source/components/recipe-details/recipe-details.jsx","webpack://B2C-Marketsites-redesign/./source/components/recipe-teaser/recipe-teaser-orientations.js","webpack://B2C-Marketsites-redesign/./source/components/recipe-teaser/recipe-teaser.jsx","webpack://B2C-Marketsites-redesign/./source/components/models/recipe-overview-results/recipe-overview-results.jsx","webpack://B2C-Marketsites-redesign/./source/components/react-component/react-component.jsx","webpack://B2C-Marketsites-redesign/./source/components/toggle-button/toggle-button.jsx","webpack://B2C-Marketsites-redesign/./source/components/toggle-filter/toggle-filter.jsx","webpack://B2C-Marketsites-redesign/./source/components/models/search-results/search-results.jsx","webpack://B2C-Marketsites-redesign/./source/components/story-teaser/story-teaser-sizes.js","webpack://B2C-Marketsites-redesign/./source/components/story-teaser/story-teaser-orientations.js","webpack://B2C-Marketsites-redesign/./source/components/story-teaser/story-teaser.jsx","webpack://B2C-Marketsites-redesign/./source/components/models/stories-overview-results/stories-overview-results.jsx","webpack://B2C-Marketsites-redesign/./source/components/no-results/no-results.jsx","webpack://B2C-Marketsites-redesign/./source/components/not-found-page/not-found-page.jsx","webpack://B2C-Marketsites-redesign/./source/hooks/use-did-update-effect.js","webpack://B2C-Marketsites-redesign/./source/components/pager/pager.jsx","webpack://B2C-Marketsites-redesign/./source/components/parallax-bg-image/parallax-bg-image.jsx","webpack://B2C-Marketsites-redesign/./source/components/preparation-block/preparation-block.jsx","webpack://B2C-Marketsites-redesign/./source/components/quote-block/quote-block.jsx","webpack://B2C-Marketsites-redesign/./source/components/quote-with-background-block/quote-with-background-block.jsx","webpack://B2C-Marketsites-redesign/./source/js/messenger.js","webpack://B2C-Marketsites-redesign/./source/js/api-helper.js","webpack://B2C-Marketsites-redesign/./source/components/rate-recipe/rate-recipe-item.jsx","webpack://B2C-Marketsites-redesign/./source/js/recipe-message-bus.js","webpack://B2C-Marketsites-redesign/./source/components/rate-recipe/rate-recipe.jsx","webpack://B2C-Marketsites-redesign/./source/js/custom-dropdown-utils.js","webpack://B2C-Marketsites-redesign/./source/components/recipe-filter/recipe-filter.jsx","webpack://B2C-Marketsites-redesign/./source/components/recipe-filters/recipe-filters.jsx","webpack://B2C-Marketsites-redesign/./source/components/simple-page-hero/simple-page-hero.jsx","webpack://B2C-Marketsites-redesign/./source/js/form-helper.js","webpack://B2C-Marketsites-redesign/./source/components/recipe-list/recipe-list.jsx","webpack://B2C-Marketsites-redesign/./source/components/recipe-page-hero/recipe-page-hero.jsx","webpack://B2C-Marketsites-redesign/./source/components/recipe-teasers-block/recipe-teasers-block-slider-nav-button.jsx","webpack://B2C-Marketsites-redesign/./source/components/recipe-teasers-block/recipe-teasers-block.jsx","webpack://B2C-Marketsites-redesign/./source/components/rich-text-block/rich-text-block.jsx","webpack://B2C-Marketsites-redesign/./source/components/search-page/search-page.jsx","webpack://B2C-Marketsites-redesign/./source/components/search-teaser/search-teaser.jsx","webpack://B2C-Marketsites-redesign/./source/components/share-recipe/share-recipe.jsx","webpack://B2C-Marketsites-redesign/./source/components/share-and-rate-recipe-panel/share-and-rate-recipe-panel.jsx","webpack://B2C-Marketsites-redesign/./source/components/short-article-page-hero/short-article-page-hero.jsx","webpack://B2C-Marketsites-redesign/./source/components/skip-to-main/skip-to-main.jsx","webpack://B2C-Marketsites-redesign/./source/components/species-quick-overview-block/species-quick-overview-block-specie.jsx","webpack://B2C-Marketsites-redesign/./source/hooks/use-scroll-direction.js","webpack://B2C-Marketsites-redesign/./source/components/species-quick-overview-block/species-quick-overview-block.jsx","webpack://B2C-Marketsites-redesign/./source/components/specimen-page-hero/specimen-page-hero-fact.jsx","webpack://B2C-Marketsites-redesign/./source/components/specimen-page-hero/specimen-page-hero.jsx","webpack://B2C-Marketsites-redesign/./source/components/specimen-search-teaser/specimen-search-teaser.jsx","webpack://B2C-Marketsites-redesign/./source/components/specimen-teaser-block/specimen-teaser-block.jsx","webpack://B2C-Marketsites-redesign/./source/components/stories-overview-list/stories-overview-list.jsx","webpack://B2C-Marketsites-redesign/./source/components/story-teasers-block/story-teasers-block.jsx","webpack://B2C-Marketsites-redesign/./source/components/text-with-background-block/text-with-background-block.jsx","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/linkedin.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/arrow-left.svg","webpack://B2C-Marketsites-redesign/./source/constants/parallax.js","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/menu.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/icons.js","webpack://B2C-Marketsites-redesign/./source/js/polyfills/class-list.js","webpack://B2C-Marketsites-redesign/./source/js/input-detection.js","webpack://B2C-Marketsites-redesign/./source/js/input-detection-loader.js","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/search.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/arrow-up.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/cooking-time.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/chevron-down.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/rating.svg","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/ sync \\.svg$","webpack://B2C-Marketsites-redesign/./source/assets/inline-icons/twitter.svg","webpack://B2C-Marketsites-redesign/webpack/bootstrap","webpack://B2C-Marketsites-redesign/webpack/runtime/compat get default export","webpack://B2C-Marketsites-redesign/webpack/runtime/define property getters","webpack://B2C-Marketsites-redesign/webpack/runtime/ensure chunk","webpack://B2C-Marketsites-redesign/webpack/runtime/get javascript chunk filename","webpack://B2C-Marketsites-redesign/webpack/runtime/get mini-css chunk filename","webpack://B2C-Marketsites-redesign/webpack/runtime/global","webpack://B2C-Marketsites-redesign/webpack/runtime/hasOwnProperty shorthand","webpack://B2C-Marketsites-redesign/webpack/runtime/make namespace object","webpack://B2C-Marketsites-redesign/webpack/runtime/node module decorator","webpack://B2C-Marketsites-redesign/webpack/runtime/publicPath","webpack://B2C-Marketsites-redesign/webpack/runtime/jsonp chunk loading","webpack://B2C-Marketsites-redesign/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"B2C-Marketsites-redesign:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var React = require('react');\n\nfunction MinusSign (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M20 2H0V0h20z\"}));\n}\n\nMinusSign.defaultProps = {\"width\":\"20\",\"height\":\"2\",\"fill\":\"none\"};\n\nmodule.exports = MinusSign;\n\nMinusSign.default = MinusSign;\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!../node_modules/babel-loader/lib/index.js!./app.components.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../node_modules/expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"AppComponents\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"AppComponents\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","var React = require('react');\n\nfunction Instagram (props) {\n    return React.createElement(\"svg\",props,[React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M21.954 6.563a1.534 1.534 0 1 0 0 3.071c.845 0 1.535-.69 1.535-1.536 0-.845-.69-1.535-1.535-1.535m-6.839 1.973a6.47 6.47 0 0 0-6.46 6.46c0 3.56 2.9 6.46 6.46 6.46s6.46-2.9 6.46-6.46-2.9-6.46-6.46-6.46m0 10.599a4.14 4.14 0 0 1-4.14-4.139 4.14 4.14 0 0 1 4.14-4.139 4.14 4.14 0 0 1 4.139 4.14 4.14 4.14 0 0 1-4.14 4.138\",\"key\":0}),React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M20.24 28.118H9.76c-4.347 0-7.885-3.538-7.885-7.885V9.753c.007-4.34 3.545-7.878 7.892-7.878h10.48c4.347 0 7.885 3.538 7.885 7.885v10.48c0 4.347-3.538 7.885-7.884 7.885zM9.767 4.345A5.42 5.42 0 0 0 4.352 9.76v10.48a5.42 5.42 0 0 0 5.415 5.415h10.48a5.42 5.42 0 0 0 5.415-5.415V9.76a5.42 5.42 0 0 0-5.414-5.415z\",\"key\":1})]);\n}\n\nInstagram.defaultProps = {\"fill\":\"none\",\"viewBox\":\"0 0 30 30\"};\n\nmodule.exports = Instagram;\n\nInstagram.default = Instagram;\n","var React = require('react');\n\nfunction Mail (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"stroke\":\"#00004F\",\"strokeWidth\":\"2\",\"d\":\"M1.334 1h21.333M1.334 1v16h21.333V1M1.334 1 12 9.889 22.667 1\"}));\n}\n\nMail.defaultProps = {\"width\":\"24\",\"height\":\"18\",\"fill\":\"none\"};\n\nmodule.exports = Mail;\n\nMail.default = Mail;\n","var React = require('react');\n\nfunction PlusSign (props) {\n    return React.createElement(\"svg\",props,[React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M11 0v20H9V0z\",\"key\":0}),React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M20 11H0V9h20z\",\"key\":1})]);\n}\n\nPlusSign.defaultProps = {\"width\":\"20\",\"height\":\"20\",\"fill\":\"none\"};\n\nmodule.exports = PlusSign;\n\nPlusSign.default = PlusSign;\n","var React = require('react');\n\nfunction ChevronUp (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"stroke\":\"currentColor\",\"strokeWidth\":\"2.5\",\"d\":\"m15 9.5-7-7-7 7\"}));\n}\n\nChevronUp.defaultProps = {\"width\":\"16\",\"height\":\"11\",\"fill\":\"none\"};\n\nmodule.exports = ChevronUp;\n\nChevronUp.default = ChevronUp;\n","var React = require('react');\n\nfunction Facebook (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"m12.766 15.64.679-4.749H9.192V7.805c0-1.299.596-2.567 2.5-2.567h1.933V1.194S11.865.875 10.19.875c-3.505 0-5.798 2.278-5.798 6.396v3.62H.5v4.749h3.892v11.485h4.793V15.64z\"}));\n}\n\nFacebook.defaultProps = {\"fill\":\"none\",\"viewBox\":\"0 0 14 28\"};\n\nmodule.exports = Facebook;\n\nFacebook.default = Facebook;\n","var React = require('react');\n\nfunction ArrowRight (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"m18.233 0-3.42 3.375L27.35 15.75H0v4.5h27.349L14.814 32.625 18.233 36l18.232-18z\"}));\n}\n\nArrowRight.defaultProps = {\"fill\":\"none\",\"viewBox\":\"0 0 37 36\"};\n\nmodule.exports = ArrowRight;\n\nArrowRight.default = ArrowRight;\n","var React = require('react');\n\nfunction Check (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"stroke\":\"currentColor\",\"strokeWidth\":\"2.5\",\"d\":\"M19 1.5 7.045 14.545 1 8.5\"}));\n}\n\nCheck.defaultProps = {\"width\":\"20\",\"height\":\"17\",\"fill\":\"none\"};\n\nmodule.exports = Check;\n\nCheck.default = Check;\n","var React = require('react');\n\nfunction MenuClose (props) {\n    return React.createElement(\"svg\",props,[React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M16.057 2.136 1.915 16.278.501 14.864 14.643.722z\",\"key\":0}),React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M14.642 16.278.5 2.136 1.914.722l14.142 14.142z\",\"key\":1})]);\n}\n\nMenuClose.defaultProps = {\"width\":\"17\",\"height\":\"17\",\"fill\":\"none\"};\n\nmodule.exports = MenuClose;\n\nMenuClose.default = MenuClose;\n","var React = require('react');\n\nfunction PlayFilled (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"#fff\",\"fillRule\":\"evenodd\",\"d\":\"M1.066 23.662a2.26 2.26 0 0 0 2.196.1l19.49-9.746A2.24 2.24 0 0 0 24 12c0-.86-.478-1.63-1.248-2.016L3.258.237a2.25 2.25 0 0 0-2.192.102A2.24 2.24 0 0 0 0 2.255v19.491a2.24 2.24 0 0 0 1.066 1.916\",\"clipRule\":\"evenodd\"}));\n}\n\nPlayFilled.defaultProps = {\"width\":\"24\",\"height\":\"24\",\"fill\":\"none\"};\n\nmodule.exports = PlayFilled;\n\nPlayFilled.default = PlayFilled;\n","var React = require('react');\n\nfunction ArrowDown (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"#fff\",\"d\":\"m0 8 1.5-1.5L7 12V0h2v12l5.5-5.5L16 8l-8 8z\"}));\n}\n\nArrowDown.defaultProps = {\"width\":\"16\",\"height\":\"16\",\"fill\":\"none\"};\n\nmodule.exports = ArrowDown;\n\nArrowDown.default = ArrowDown;\n","var React = require('react');\n\nfunction Play (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"#fff\",\"fillRule\":\"evenodd\",\"d\":\"m3 3 18 9-18 9zM1.066 23.662a2.26 2.26 0 0 0 2.196.1l19.49-9.746A2.24 2.24 0 0 0 24 12c0-.86-.478-1.63-1.248-2.016L3.258.237a2.25 2.25 0 0 0-2.192.102A2.24 2.24 0 0 0 0 2.255v19.491a2.24 2.24 0 0 0 1.066 1.916\",\"clipRule\":\"evenodd\"}));\n}\n\nPlay.defaultProps = {\"width\":\"24\",\"height\":\"24\",\"fill\":\"none\"};\n\nmodule.exports = Play;\n\nPlay.default = Play;\n","var React = require('react');\n\nfunction Phone (props) {\n    return React.createElement(\"svg\",props,[React.createElement(\"path\",{\"stroke\":\"#00004F\",\"strokeWidth\":\"2\",\"d\":\"M1.333 1.333h14.222v21.333H1.333z\",\"key\":0}),React.createElement(\"rect\",{\"width\":\"3.556\",\"height\":\"3.556\",\"x\":\"6.667\",\"y\":\"15.556\",\"fill\":\"#00004F\",\"rx\":\"1.778\",\"key\":1})]);\n}\n\nPhone.defaultProps = {\"width\":\"17\",\"height\":\"24\",\"fill\":\"none\"};\n\nmodule.exports = Phone;\n\nPhone.default = Phone;\n","var React = require('react');\n\nfunction StarEmpty (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"stroke\":\"#fff\",\"strokeWidth\":\"2\",\"d\":\"m10.696 10.253.522-.077.231-.474L15 2.416l3.551 7.286.232.474.522.077 7.965 1.172-5.772 5.697-.37.365.086.514 1.36 8.027-7.104-3.781-.47-.25-.47.25-7.104 3.781 1.36-8.027.087-.514-.37-.365-5.773-5.697z\"}));\n}\n\nStarEmpty.defaultProps = {\"width\":\"30\",\"height\":\"28\",\"fill\":\"none\"};\n\nmodule.exports = StarEmpty;\n\nStarEmpty.default = StarEmpty;\n","var React = require('react');\n\nfunction Share (props) {\n    return React.createElement(\"svg\",props,[React.createElement(\"path\",{\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"d\":\"M1 12v11.5h20V12\",\"key\":0}),React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M11.7 1.988v14.52H9.885V1.987z\",\"key\":1}),React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M11.004.5 18 7.496 16.717 8.78 9.72 1.784z\",\"key\":2}),React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M11.7 2.363 5.283 8.78 4 7.497l6.417-6.417z\",\"key\":3})]);\n}\n\nShare.defaultProps = {\"width\":\"22\",\"height\":\"25\",\"fill\":\"none\"};\n\nmodule.exports = Share;\n\nShare.default = Share;\n","var React = require('react');\n\nfunction StarFull (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"#FFAE9C\",\"d\":\"m15 .133-4.45 9.13L.6 10.727l7.2 7.106-1.7 10.034 8.9-4.738 8.9 4.738-1.7-10.034 7.2-7.106-9.95-1.464z\"}));\n}\n\nStarFull.defaultProps = {\"width\":\"30\",\"height\":\"28\",\"fill\":\"none\"};\n\nmodule.exports = StarFull;\n\nStarFull.default = StarFull;\n","var React = require('react');\n\nfunction DifficultyLevel (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M18 3c-2.297 0-4.477.494-6.451 1.367A11.94 11.94 0 0 0 6 3C2.686 3 0 5.684 0 9c0 2.903 1.718 5.324 4 5.879v5.12C4 20.55 4.45 21 5 21h14c.55 0 1-.45 1-1v-5.81c2.39-1.038 4-2.972 4-5.191 0-3.316-2.685-6-6-6m-2 10H9v2h7c.691 0 1.359-.073 2-.197V19H6v-5.691l-1.528-.373C3.062 12.592 2 10.9 2 8.999c0-2.205 1.794-4 4-4 1.149 0 2.264.204 3.317.574a16 16 0 0 0-2.63 2.114L8.1 9.1A13.9 13.9 0 0 1 18 4.999c2.207 0 4 1.795 4 4 0 2.17-2.747 4-6 4\"}));\n}\n\nDifficultyLevel.defaultProps = {\"width\":\"24\",\"height\":\"24\",\"fill\":\"none\"};\n\nmodule.exports = DifficultyLevel;\n\nDifficultyLevel.default = DifficultyLevel;\n","var React = require('react');\n\nfunction Copy (props) {\n    return React.createElement(\"svg\",props,[React.createElement(\"path\",{\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"d\":\"M5 5h14v18H5z\",\"key\":0}),React.createElement(\"path\",{\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"d\":\"M1 20V1h15\",\"key\":1})]);\n}\n\nCopy.defaultProps = {\"width\":\"20\",\"height\":\"24\",\"fill\":\"none\"};\n\nmodule.exports = Copy;\n\nCopy.default = Copy;\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\n// NOTE: When running tests, importing SVGs directly will make the application crash, so all icons are exported as noops instead.\r\nconst icons = require(\r\n  process.env.NODE_ENV === 'test'\r\n    ? '../../assets/inline-icons/icons-noop.js'\r\n    : '../../assets/inline-icons/icons.js'\r\n).default;\r\n\r\nconst Icon = ({ className, name, style, useFill }) =>\r\n  icons[name]\r\n    ? React.createElement(icons[name], {\r\n        className: cn('icon', className, { '-use-fill-color': useFill }),\r\n        focusable: 'false',\r\n        style,\r\n      })\r\n    : null;\r\n\r\nIcon.propTypes = {\r\n  className: PropTypes.string,\r\n  name: PropTypes.oneOf(Object.keys(icons)).isRequired,\r\n  style: PropTypes.shape({}),\r\n  useFill: PropTypes.bool,\r\n};\r\n\r\nIcon.viewModelMeta = 'ignore';\r\n\r\nexport default Icon;\r\n","import PropTypes from 'prop-types';\r\n\r\nconst ButtonBase = {};\r\n\r\nButtonBase.propTypes = {\r\n  url: PropTypes.string,\r\n  text: PropTypes.string,\r\n  tabindex: PropTypes.number,\r\n  openInNewTab: PropTypes.bool,\r\n  onClick: PropTypes.func,\r\n};\r\n\r\nexport default ButtonBase;\r\n","import PropTypes from 'prop-types';\r\n\r\nexport default {\r\n  'aria-label': PropTypes.string,\r\n  'aria-haspopup': PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\r\n  'aria-controls': PropTypes.string,\r\n  'aria-expanded': PropTypes.bool,\r\n};\r\n","/* eslint-disable react/prop-types */\r\n// TODO: remove view-models/no-unused-meta and eslint-disable react/prop-types rule when this issue https://github.com/asbjornh/view-models/issues/18 is resolved\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Icon from 'components/icon';\r\nimport cn from 'classnames';\r\nimport ButtonBase from 'components/models/button-base';\r\nimport ariaAttributesModel from 'components/models/aria-attributes/aria-attributes';\r\n\r\nconst ActionButton = ({\r\n  onClick = () => {},\r\n  className,\r\n  openInNewTab = false,\r\n  url,\r\n  iconName,\r\n  tabindex,\r\n  isActive,\r\n  isDisabled = false,\r\n  ariaAttributes = {},\r\n  text,\r\n}) => {\r\n  const RootTag = url ? 'a' : 'button';\r\n  return (\r\n    <RootTag\r\n      {...ariaAttributes}\r\n      href={url}\r\n      className={cn('action-button', className, {\r\n        'action-button_active': isActive,\r\n      })}\r\n      target={openInNewTab ? '_blank' : null}\r\n      rel={openInNewTab ? 'nofollow noopener' : null}\r\n      tabIndex={tabindex}\r\n      onClick={onClick}\r\n      disabled={isDisabled ? isDisabled : null}\r\n      {...ariaAttributes}\r\n    >\r\n      <Icon name={iconName} className=\"action-button__icon\" />\r\n      <span className=\"action-button__text\">{text}</span>\r\n    </RootTag>\r\n  );\r\n};\r\n\r\nActionButton.viewModelMeta = 'ignore';\r\n\r\nActionButton.propTypes = Object.assign({}, ButtonBase.propTypes, {\r\n  text: PropTypes.string,\r\n  icon: PropTypes.string,\r\n  onClick: PropTypes.func,\r\n  className: PropTypes.string,\r\n  ariaAttributes: PropTypes.exact(ariaAttributesModel),\r\n});\r\n\r\nexport default ActionButton;\r\n","import replaceQueryParameters from '@creuna/utils/replace-query-parameters';\r\nimport CryptoJs from 'crypto-js';\r\n\r\nconst resizeQueryHashSalt = '{DB2BF126-5117-49B4-AB02-949E94E711BD}';\r\n\r\nconst transforms = {\r\n  downFit: 'downFit',\r\n  downFill: 'downFill',\r\n};\r\n\r\nconst skipForResizeExtensions = ['svg'];\r\n\r\nconst queryParameters = {\r\n  width: undefined,\r\n  height: undefined,\r\n  transform: undefined,\r\n  center: undefined,\r\n};\r\n\r\nfunction checkImageCanBeResized(url) {\r\n  if (!url) return false;\r\n  var extension = url.split(/#|\\?/)[0].split('.').pop().trim();\r\n  extension = extension.toLowerCase();\r\n  if (skipForResizeExtensions.some(item => item === extension)) {\r\n    return false;\r\n  }\r\n  return true;\r\n}\r\n\r\nfunction buildResizeUrl(url, width, height, transform, centerX, centerY) {\r\n  if (!checkImageCanBeResized(url)) {\r\n    return url;\r\n  }\r\n\r\n  var resizeUrl = replaceQueryParameters(\r\n    url,\r\n    Object.assign({}, queryParameters, {\r\n      width: width > 0 ? width : undefined,\r\n      height: height > 0 ? height : undefined,\r\n      transform: transform,\r\n      center:\r\n        transform !== transforms.downFit\r\n          ? serializeCenter(centerX, centerY)\r\n          : undefined,\r\n    })\r\n  );\r\n\r\n  const resizeQuery = resizeUrl.split(/#|\\?/)[1];\r\n  if (resizeQuery) {\r\n    var queryHash = CryptoJs.MD5(\r\n      resizeQuery.replace('%2C', '%2c') + resizeQueryHashSalt\r\n    );\r\n    resizeUrl = replaceQueryParameters(resizeUrl, { hash: queryHash });\r\n  }\r\n\r\n  return resizeUrl;\r\n}\r\n\r\nfunction calcImageWidth(containerWidth, resolution) {\r\n  resolution = resolution > 0 ? resolution : 1;\r\n  return (\r\n    Math.ceil((containerWidth * (window.devicePixelRatio || 1)) / resolution) *\r\n    resolution\r\n  );\r\n}\r\n\r\nfunction calcImageHeight(containerHeight, resolution) {\r\n  resolution = resolution > 0 ? resolution : 1;\r\n  return (\r\n    Math.ceil((containerHeight * (window.devicePixelRatio || 1)) / resolution) *\r\n    resolution\r\n  );\r\n}\r\n\r\nfunction serializeCenter(x, y) {\r\n  if (x > 0 || y > 0) {\r\n    return `${x / 100},${y / 100}`;\r\n  }\r\n  return undefined;\r\n}\r\n\r\nexport default {\r\n  buildResizeUrl,\r\n  checkImageCanBeResized,\r\n  calcImageWidth,\r\n  calcImageHeight,\r\n  Transforms: transforms,\r\n};\r\n","export function createHtmlImage() {\r\n  var image = typeof Image !== 'undefined' ? new Image() : {};\r\n  return image;\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport debounce from 'lodash/debounce';\r\nimport imageResizer from 'js/image-resizer';\r\nimport cn from 'classnames';\r\nimport { createHtmlImage } from 'js/dom-image-utils';\r\n\r\nconst FirstLoadSizeMultiplier = 0.05; // First time we preload smaller image in order to reduce wait time.\r\n\r\n/**\r\n * Image\r\n *\r\n * Key notes:\r\n * - automatically responsive by default (size is automatically calculated from container size)\r\n * - default transform is 'fill'\r\n * - width or height can be fixed (useful for fluid images), in this case default transform is 'fit'\r\n * - when both width and height are defined it becomes unresponsive.\r\n * - can be rendered as fluid or ordinary image\r\n * - resolution it is kind of steps for automatic size calculation, for example if resolution is 100, horizontal image width could be 100,200,300...1200... and height is calculated according to aspect ratio and vise versa for vertical image\r\n * - default resolutions for images with size > 100 is 100 for < 100 is 10\r\n * - device pixel ratio is taken into account for calculating image size\r\n *\r\n * Transforms:\r\n * 'fill' - image is cropped according to container proportions to fill it completely.\r\n * 'fit' - image is resized with saving original proportions to fit container by width or height.\r\n */\r\nclass Image extends React.Component {\r\n  static transforms = {\r\n    fill: 'fill',\r\n    fit: 'fit',\r\n  };\r\n\r\n  static propTypes = {\r\n    className: PropTypes.string,\r\n    src: PropTypes.string.isRequired,\r\n    alt: PropTypes.string,\r\n    transform: PropTypes.oneOf(Object.values(Image.transforms)),\r\n    fluid: PropTypes.bool,\r\n    focusPoint: PropTypes.shape({\r\n      x: PropTypes.number.isRequired,\r\n      y: PropTypes.number.isRequired,\r\n    }),\r\n    width: PropTypes.number,\r\n    height: PropTypes.number,\r\n    resolution: PropTypes.number,\r\n  };\r\n\r\n  static viewModelMeta = {\r\n    className: 'ignore',\r\n    transform: 'ignore',\r\n    fluid: 'ignore',\r\n    width: 'ignore',\r\n    height: 'ignore',\r\n    resolution: 'ignore',\r\n  };\r\n\r\n  canBeResized = imageResizer.checkImageCanBeResized(this.props.src);\r\n  autoTransform = this.constructor.transforms.fill;\r\n  autoCalcWidthOnly = false;\r\n  autoCalcHeightOnly = false;\r\n\r\n  defaultSrc = !this.canBeResized\r\n    ? this.props.src\r\n    : this.props.width > 0 && this.props.height > 0\r\n      ? imageResizer.buildResizeUrl(\r\n          this.props.src,\r\n          this.props.width,\r\n          this.props.height,\r\n          this.props.transform ||\r\n            this.autoTransform === this.constructor.transforms.fill\r\n            ? imageResizer.Transforms.downFill\r\n            : imageResizer.Transforms.downFit\r\n        )\r\n      : undefined;\r\n\r\n  state = {\r\n    src: this.defaultSrc,\r\n    width: 0,\r\n    height: 0,\r\n    ratio: 0,\r\n    containerOffsetWidth: 0,\r\n    containerOffsetHeight: 0,\r\n  };\r\n\r\n  preloadImage = createHtmlImage();\r\n  firstPreloadImage = createHtmlImage();\r\n\r\n  handleResize = () => {\r\n    if (\r\n      !this.container ||\r\n      (this.container.offsetWidth === 0 && this.container.offsetHeight === 0)\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    if (this.container.offsetWidth === 0 || this.container.offsetHeight === 0) {\r\n      this.autoTransform = Image.transforms.fit;\r\n      this.autoCalcWidthOnly = this.container.offsetWidth > 0;\r\n      this.autoCalcHeightOnly = this.container.offsetHeight > 0;\r\n    }\r\n\r\n    const skipByWidth =\r\n      this.props.width > 0\r\n        ? this.state.width === this.props.width\r\n        : this.container.offsetWidth === this.state.containerOffsetWidth;\r\n\r\n    const skipByHeight =\r\n      this.props.height > 0\r\n        ? this.state.height === this.props.height\r\n        : this.container.offsetHeight === this.state.containerOffsetHeight;\r\n\r\n    if (skipByWidth && skipByHeight) {\r\n      return;\r\n    }\r\n\r\n    const resolutionByWidth =\r\n      !(this.props.width > 0) &&\r\n      this.container.offsetWidth > this.container.offsetHeight;\r\n\r\n    let resolution = this.props.resolution;\r\n    if (!(resolution > 0)) {\r\n      var resolutionSize = resolutionByWidth\r\n        ? this.container.offsetWidth\r\n        : this.container.offsetHeight;\r\n\r\n      resolution = resolutionSize > 100 ? 100 : 10;\r\n    }\r\n\r\n    const widthResolution = resolutionByWidth ? resolution : 1;\r\n    const heightResolution = resolutionByWidth ? 1 : resolution;\r\n\r\n    let newWidth =\r\n      this.props.width > 0\r\n        ? this.props.width\r\n        : this.autoCalcHeightOnly\r\n          ? 0\r\n          : imageResizer.calcImageWidth(\r\n              this.container.offsetWidth,\r\n              widthResolution\r\n            );\r\n\r\n    let newHeight =\r\n      this.props.height > 0\r\n        ? this.props.height\r\n        : this.autoCalcWidthOnly\r\n          ? 0\r\n          : imageResizer.calcImageHeight(\r\n              this.container.offsetHeight,\r\n              heightResolution\r\n            );\r\n\r\n    if (resolutionByWidth) {\r\n      if (!this.autoCalcWidthOnly && !this.props.height > 0) {\r\n        newHeight = Math.ceil(\r\n          newWidth / (this.container.offsetWidth / this.container.offsetHeight)\r\n        );\r\n      }\r\n    } else {\r\n      if (!this.autoCalcHeightOnly && !this.props.width > 0) {\r\n        newWidth = Math.ceil(\r\n          newHeight / (this.container.offsetHeight / this.container.offsetWidth)\r\n        );\r\n      }\r\n    }\r\n\r\n    const newRatio =\r\n      this.container.offsetHeight > 0\r\n        ? Math.ceil(this.container.offsetWidth / this.container.offsetHeight)\r\n        : 1;\r\n\r\n    this.setState(previousState => {\r\n      if (\r\n        previousState.width >= newWidth &&\r\n        previousState.height >= newHeight &&\r\n        previousState.ratio === newRatio\r\n      ) {\r\n        return {\r\n          containerOffsetWidth: this.container.offsetWidth,\r\n          containerOffsetHeight: this.container.offsetHeight,\r\n        };\r\n      }\r\n\r\n      const newSrc = imageResizer.buildResizeUrl(\r\n        this.props.src,\r\n        newWidth,\r\n        newHeight,\r\n        (this.props.transform || this.autoTransform) === Image.transforms.fill\r\n          ? imageResizer.Transforms.downFill\r\n          : imageResizer.Transforms.downFit,\r\n        this.props.focusPoint ? this.props.focusPoint.x : null,\r\n        this.props.focusPoint ? this.props.focusPoint.y : null\r\n      );\r\n\r\n      if (!this.firstPreloadImage.src && !this.state.src) {\r\n        var firstLoadWidth = Math.ceil(newWidth * FirstLoadSizeMultiplier);\r\n        var firstLoadHeight = Math.ceil(newHeight * FirstLoadSizeMultiplier);\r\n        if (firstLoadWidth > 0 && firstLoadHeight > 0) {\r\n          const firstLoadSrc = imageResizer.buildResizeUrl(\r\n            this.props.src,\r\n            firstLoadWidth,\r\n            firstLoadHeight,\r\n            (this.props.transform || this.autoTransform) ===\r\n              Image.transforms.fill\r\n              ? imageResizer.Transforms.downFill\r\n              : imageResizer.Transforms.downFit,\r\n            this.props.focusPoint ? this.props.focusPoint.x : null,\r\n            this.props.focusPoint ? this.props.focusPoint.y : null\r\n          );\r\n          this.firstPreloadImage.src = firstLoadSrc;\r\n        }\r\n      }\r\n\r\n      if (newSrc !== this.state.src) {\r\n        this.preloadImage.src = newSrc;\r\n      }\r\n\r\n      return {\r\n        width: newWidth,\r\n        height: newHeight,\r\n        ratio: newRatio,\r\n        containerOffsetWidth: this.container.offsetWidth,\r\n        containerOffsetHeight: this.container.offsetHeight,\r\n      };\r\n    });\r\n  };\r\n\r\n  debouncedHandleResize = debounce(this.handleResize, 300);\r\n\r\n  onFirstSrcPreloaded() {\r\n    if (!this.state.src) {\r\n      this.setState({ src: this.firstPreloadImage.src });\r\n    }\r\n  }\r\n\r\n  onSrcPreloaded() {\r\n    this.setState({ src: this.preloadImage.src });\r\n  }\r\n\r\n  checkElementIsHidden(element) {\r\n    return !element.offsetParent;\r\n  }\r\n\r\n  isHidden() {\r\n    return this.checkElementIsHidden(this.container);\r\n  }\r\n\r\n  getHiddenRoot() {\r\n    if (!this.checkElementIsHidden(this.container)) {\r\n      return null;\r\n    }\r\n\r\n    var parent = this.container.parentElement;\r\n    while (parent && this.checkElementIsHidden(parent.parentElement)) {\r\n      parent = parent.parentElement;\r\n    }\r\n\r\n    return parent;\r\n  }\r\n\r\n  onObservedChange() {\r\n    if (!this.isHidden()) {\r\n      this.debouncedHandleResize();\r\n    }\r\n  }\r\n\r\n  componentDidMount() {\r\n    const self = this;\r\n    this.firstPreloadImage.onload = () => {\r\n      self.onFirstSrcPreloaded();\r\n    };\r\n    this.preloadImage.onload = () => {\r\n      self.onSrcPreloaded();\r\n    };\r\n    if (this.canBeResized) {\r\n      this.handleResize();\r\n      this.debouncedHandleResize();\r\n      window.addEventListener('resize', this.debouncedHandleResize);\r\n    }\r\n\r\n    this.observer = this.canBeResized\r\n      ? new MutationObserver(() => this.onObservedChange.call(this))\r\n      : null;\r\n\r\n    if (this.observer && this.isHidden()) {\r\n      this.observer.observe(this.getHiddenRoot(), {\r\n        attributes: true,\r\n      });\r\n    }\r\n    this.setState({ componentDidMount: true });\r\n  }\r\n\r\n  getSnapshotBeforeUpdate(prevProps) {\r\n    if (\r\n      this.props.width !== prevProps.width ||\r\n      this.props.height !== prevProps.height\r\n    ) {\r\n      this.handleResize();\r\n    }\r\n    return null;\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    if (this.canBeResized) {\r\n      window.removeEventListener('resize', this.debouncedHandleResize);\r\n    }\r\n    if (this.observer) {\r\n      this.observer.disconnect();\r\n    }\r\n  }\r\n\r\n  componentDidUpdate() {\r\n    if (this.canBeResized) this.debouncedHandleResize();\r\n  }\r\n\r\n  render() {\r\n    return (\r\n      <React.Fragment>\r\n        {!this.props.fluid ? (\r\n          <span\r\n            className={cn('image', this.props.className)}\r\n            ref={c => (this.container = c)}\r\n          >\r\n            {this.state.src && (\r\n              <img\r\n                className=\"image__img\"\r\n                src={this.state.src}\r\n                alt={this.props.alt ? this.props.alt : ''}\r\n              />\r\n            )}\r\n          </span>\r\n        ) : (\r\n          <span\r\n            className={cn('image image_fluid', this.props.className)}\r\n            style={{\r\n              backgroundImage: this.state.src\r\n                ? `url(${this.state.src})`\r\n                : undefined,\r\n              backgroundPosition: this.props.focusPoint\r\n                ? `${this.props.focusPoint.x}% ${this.props.focusPoint.y}%`\r\n                : null,\r\n            }}\r\n            ref={c => (this.container = c)}\r\n          >\r\n            {this.state.src && (\r\n              <img\r\n                className=\"image__img\"\r\n                src={this.state.src}\r\n                alt={this.props.alt ? this.props.alt : ''}\r\n              />\r\n            )}\r\n          </span>\r\n        )}\r\n      </React.Fragment>\r\n    );\r\n  }\r\n}\r\n\r\nexport default Image;\r\n","export default {\r\n  small: 'small',\r\n  medium: 'medium',\r\n  large: 'large',\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Image from 'components/image';\r\nimport cn from 'classnames';\r\nimport Icon from 'components/icon';\r\nimport articleTeaserSizes from './article-teaser-sizes';\r\n\r\nconst ArticleTeaser = ({\r\n  image,\r\n  heading,\r\n  url,\r\n  size = articleTeaserSizes.small,\r\n  headingTagLevel = 2,\r\n}) => {\r\n  const HeadingTag = `h${headingTagLevel}`;\r\n  return (\r\n    <a\r\n      className={cn('article-teaser', `article-teaser_size_${size}`)}\r\n      href={url}\r\n    >\r\n      {image && (\r\n        <div className=\"article-teaser__image-holder\">\r\n          <Image\r\n            {...image}\r\n            className={cn(\r\n              'article-teaser__image',\r\n              `image_size_article-teaser-${size}`\r\n            )}\r\n          />\r\n        </div>\r\n      )}\r\n      <div className=\"article-teaser__content\">\r\n        {heading && (\r\n          <HeadingTag className=\"article-teaser__heading\">\r\n            <span className=\"article-teaser__heading-text\">{heading}</span>\r\n          </HeadingTag>\r\n        )}\r\n        <Icon name=\"arrow-right\" className=\"article-teaser__icon\" />\r\n      </div>\r\n    </a>\r\n  );\r\n};\r\n\r\nArticleTeaser.viewModelMeta = {\r\n  size: 'ignore',\r\n  headingTagLevel: 'ignore',\r\n};\r\n\r\nArticleTeaser.propTypes = {\r\n  image: PropTypes.exact(Image.propTypes),\r\n  heading: PropTypes.string,\r\n  url: PropTypes.string,\r\n  size: PropTypes.oneOf(Object.values(articleTeaserSizes)),\r\n  headingTagLevel: PropTypes.oneOf([2, 3]),\r\n};\r\n\r\nexport default ArticleTeaser;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nconst PoorText = ({ text, className }) => {\r\n  return !text ? null : (\r\n    <div\r\n      className={cn('poor-text', className)}\r\n      dangerouslySetInnerHTML={{ __html: text }}\r\n    />\r\n  );\r\n};\r\n\r\nPoorText.propTypes = {\r\n  text: PropTypes.string,\r\n  className: PropTypes.string,\r\n};\r\n\r\nPoorText.viewModelMeta = 'ignore';\r\n\r\nexport default PoorText;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport ArticleTeaser from 'components/article-teaser';\r\nimport PoorText from 'components/poor-text';\r\nimport cn from 'classnames';\r\nimport ArticleTeaserSizes from 'components/article-teaser/article-teaser-sizes';\r\n\r\nconst ArticleTeasersBlock = ({ heading, introHtml, articles }) => {\r\n  const calcItemSize = articleIndex => {\r\n    const numberOfArticles = articles.length;\r\n\r\n    if (numberOfArticles === 6 || numberOfArticles === 3) {\r\n      return ArticleTeaserSizes.small;\r\n    }\r\n    if (numberOfArticles === 5) {\r\n      if (articleIndex < 2) {\r\n        return ArticleTeaserSizes.medium;\r\n      }\r\n      return ArticleTeaserSizes.small;\r\n    }\r\n    if (numberOfArticles === 2 || numberOfArticles === 4) {\r\n      return ArticleTeaserSizes.medium;\r\n    }\r\n    if (numberOfArticles === 1) {\r\n      return ArticleTeaserSizes.large;\r\n    }\r\n    //Number of articles restricted to max 6 items for now, return default size just in case we have more\r\n    return ArticleTeaserSizes.small;\r\n  };\r\n\r\n  return (\r\n    <div className=\"article-teasers-block\">\r\n      {heading && <h2 className=\"article-teasers-block__heading\">{heading}</h2>}\r\n      {introHtml && (\r\n        <PoorText\r\n          text={introHtml}\r\n          className=\"article-teasers-block__intro poor-text_in-article-teasers-block\"\r\n        />\r\n      )}\r\n      {articles && (\r\n        <ul className=\"article-teasers-block__items\">\r\n          {articles.map((article, index) => {\r\n            const itemSIze = calcItemSize(index);\r\n\r\n            return (\r\n              <li\r\n                key={index}\r\n                className={cn('article-teasers-block__item', {\r\n                  'article-teasers-block__item_width_half':\r\n                    itemSIze === ArticleTeaserSizes.medium,\r\n                  'article-teasers-block__item_width_full':\r\n                    itemSIze === ArticleTeaserSizes.large,\r\n                })}\r\n              >\r\n                <ArticleTeaser\r\n                  {...article}\r\n                  size={itemSIze}\r\n                  headingTagLevel={heading ? 3 : 2}\r\n                />\r\n              </li>\r\n            );\r\n          })}\r\n        </ul>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nArticleTeasersBlock.propTypes = {\r\n  heading: PropTypes.string,\r\n  introHtml: PropTypes.string,\r\n  articles: PropTypes.arrayOf(PropTypes.exact(ArticleTeaser.propTypes)),\r\n};\r\n\r\nexport default ArticleTeasersBlock;\r\n","/* eslint-disable react/jsx-no-target-blank */\r\n/* eslint-disable view-models/no-unused-meta */\r\n/* eslint-disable react/prop-types */\r\n// TODO: remove view-models/no-unused-meta and eslint-disable react/prop-types rule when this issue https://github.com/asbjornh/view-models/issues/18 is resolved\r\nimport React from 'react';\r\nimport ButtonBase from 'components/models/button-base';\r\nimport Icon from 'components/icon';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\nimport ariaAttributesModel from 'components/models/aria-attributes/aria-attributes';\r\n\r\nconst themes = {\r\n  dark: 'dark',\r\n  light: 'light',\r\n};\r\n\r\nconst Button = ({\r\n  className,\r\n  openInNewTab = false,\r\n  url,\r\n  text,\r\n  iconName,\r\n  tabindex,\r\n  theme,\r\n  onClick,\r\n  ariaAttributes = {},\r\n}) => {\r\n  const RootTag = url ? 'a' : 'button';\r\n  return (\r\n    <RootTag\r\n      href={url}\r\n      className={cn('button', {\r\n        [className]: className,\r\n        'button_theme-light': theme === themes.light,\r\n      })}\r\n      target={openInNewTab ? '_blank' : null}\r\n      rel={openInNewTab ? 'nofollow noopener' : null}\r\n      tabIndex={tabindex}\r\n      onClick={onClick}\r\n      {...ariaAttributes}\r\n    >\r\n      <span\r\n        className={cn('button__text', {\r\n          'button__text_theme-light': theme === themes.light,\r\n        })}\r\n      >\r\n        {text}\r\n      </span>\r\n      {iconName && <Icon name={iconName} className=\"button__icon\" />}\r\n    </RootTag>\r\n  );\r\n};\r\n\r\nButton.viewModelMeta = 'ignore';\r\n\r\nButton.propTypes = Object.assign({}, ButtonBase.propTypes, {\r\n  className: PropTypes.string,\r\n  iconName: PropTypes.string,\r\n  theme: PropTypes.oneOf(Object.values(themes)),\r\n  ariaAttributes: PropTypes.exact(ariaAttributesModel),\r\n});\r\n\r\nexport default Button;\r\n","import React, { useCallback } from 'react';\r\n\r\nexport default function useToggle(initiallyActive) {\r\n  const [isActive, setIsActive] = React.useState(initiallyActive);\r\n  const toggle = useCallback(() => setIsActive(isActive => !isActive), []);\r\n  const activate = useCallback(() => setIsActive(true), []);\r\n  const deactivate = useCallback(() => setIsActive(false), []);\r\n\r\n  return { isActive, toggle, deactivate, activate };\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\n\r\nexport const themes = {\r\n  dark: 'dark',\r\n  light: 'light',\r\n};\r\n\r\nconst LoadingIndicator = ({ className, theme = themes.dark }) => {\r\n  return (\r\n    <div\r\n      className={cn('loading-indicator', className, {\r\n        [`loading-indicator_${theme}`]: theme,\r\n      })}\r\n    >\r\n      <div className=\"loading-indicator__icon\">\r\n        <div></div>\r\n        <div></div>\r\n        <div></div>\r\n        <div></div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nLoadingIndicator.viewModelMeta = 'ignore';\r\n\r\nLoadingIndicator.propTypes = {\r\n  className: PropTypes.string,\r\n  theme: PropTypes.oneOf(Object.values(themes)),\r\n};\r\n\r\nexport default LoadingIndicator;\r\n","import React, { useState, Fragment } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport useToggle from '../../hooks/use-toggle';\r\nimport Image from 'components/image';\r\nimport Icon from 'components/icon';\r\nimport LoadingIndicator, {\r\n  themes as LoadingIndicatorThemes,\r\n} from 'components/loading-indicator/loading-indicator';\r\nimport ReactPlayer from 'react-player';\r\nimport cn from 'classnames';\r\n\r\nconst EmbeddedVideoBlock = ({ caption, previewImage, videoUrl, lang }) => {\r\n  const [playing, setPlaying] = useState(false);\r\n  const [isLoading, setIsLoading] = useState(false);\r\n  const { isActive, activate, deactivate } = useToggle(false);\r\n\r\n  const onPlayBtnClick = () => {\r\n    setIsLoading(true);\r\n    activate();\r\n  };\r\n\r\n  const onPlayerStart = () => {\r\n    setPlaying(true);\r\n    setIsLoading(false);\r\n  };\r\n\r\n  const onPlayerError = () => {\r\n    setPlaying(false);\r\n    setIsLoading(false);\r\n    deactivate();\r\n  };\r\n\r\n  return (\r\n    <div className=\"embedded-video-block\">\r\n      <div className=\"embedded-video-block__container\">\r\n        <figure className=\"embedded-video-block__figure\">\r\n          <div className=\"embedded-video-block__video-holder\">\r\n            {previewImage && (\r\n              <Image\r\n                className={cn(\r\n                  'embedded-video-block__image image_size_embedded-video-block',\r\n                  {\r\n                    'embedded-video-block__image_hidden': playing,\r\n                  }\r\n                )}\r\n                {...previewImage}\r\n              />\r\n            )}\r\n            {!playing && (\r\n              <div className=\"embedded-video-block__play-btn-holder\">\r\n                <button\r\n                  className=\"embedded-video-block__play-btn\"\r\n                  onClick={onPlayBtnClick}\r\n                  aria-label={lang.playVideoButtonAriaLabel}\r\n                >\r\n                  {isLoading ? (\r\n                    <LoadingIndicator\r\n                      theme={LoadingIndicatorThemes.light}\r\n                      className=\"embedded-video-block__loading\"\r\n                    />\r\n                  ) : (\r\n                    <Fragment>\r\n                      <Icon\r\n                        name=\"play\"\r\n                        className=\"embedded-video-block__play-btn-icon\"\r\n                      />\r\n                      <Icon\r\n                        name=\"play-filled\"\r\n                        className=\"embedded-video-block__play-btn-icon embedded-video-block__play-btn-icon_filled\"\r\n                      />\r\n                    </Fragment>\r\n                  )}\r\n                </button>\r\n                <div className=\"embedded-video-block__play-btn-outline\"></div>\r\n              </div>\r\n            )}\r\n            {isActive && (\r\n              <ReactPlayer\r\n                playing={true}\r\n                url={videoUrl}\r\n                controls={true}\r\n                onStart={onPlayerStart}\r\n                onError={onPlayerError}\r\n              />\r\n            )}\r\n          </div>\r\n          {caption && (\r\n            <figcaption className=\"embedded-video-block__caption\">\r\n              {caption}\r\n            </figcaption>\r\n          )}\r\n        </figure>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nEmbeddedVideoBlock.propTypes = {\r\n  caption: PropTypes.string,\r\n  previewImage: PropTypes.exact(Image.propTypes),\r\n  videoUrl: PropTypes.string.isRequired,\r\n  lang: PropTypes.shape({\r\n    playVideoButtonAriaLabel: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nexport default EmbeddedVideoBlock;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst ErrorMessage = ({ text }) => {\r\n  return <div className=\"error-message\">{text}</div>;\r\n};\r\n\r\nErrorMessage.propTypes = {\r\n  text: PropTypes.string,\r\n};\r\n\r\nErrorMessage.viewModelMeta = 'ignore';\r\n\r\nexport default ErrorMessage;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\n\r\nconst FilterHeading = ({ asLabelFor, text, className }) => {\r\n  const TagName = asLabelFor ? 'label' : 'strong';\r\n\r\n  return text ? (\r\n    <TagName className={cn('filter-heading', className)} htmlFor={asLabelFor}>\r\n      {text}\r\n    </TagName>\r\n  ) : null;\r\n};\r\n\r\nFilterHeading.viewModelMeta = 'ignore';\r\n\r\nFilterHeading.propTypes = {\r\n  className: PropTypes.string,\r\n  text: PropTypes.string,\r\n  asLabelFor: PropTypes.string,\r\n};\r\n\r\nexport default FilterHeading;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\nimport Image from 'components/image';\r\n\r\nconst Logo = ({ className, url, image, imageClass }) => {\r\n  const RootTag = url ? 'a' : 'div';\r\n\r\n  const rootTagProps = {\r\n    ...(url && {\r\n      href: url,\r\n    }),\r\n    className: cn('logo', className),\r\n  };\r\n\r\n  return (\r\n    <RootTag {...rootTagProps}>\r\n      {image && <Image {...image} className={cn('logo__image', imageClass)} />}\r\n    </RootTag>\r\n  );\r\n};\r\n\r\nLogo.propTypes = {\r\n  className: PropTypes.string,\r\n  imageClass: PropTypes.string,\r\n  url: PropTypes.string,\r\n  image: PropTypes.exact(Image.propTypes),\r\n};\r\n\r\nLogo.viewModelMeta = {\r\n  className: 'ignore',\r\n  imageClass: 'ignore',\r\n};\r\n\r\nexport default Logo;\r\n","import PropTypes from 'prop-types';\r\n\r\nconst LinkBase = {};\r\n\r\nLinkBase.propTypes = {\r\n  url: PropTypes.string,\r\n  text: PropTypes.string,\r\n  openInNewTab: PropTypes.bool,\r\n};\r\n\r\nexport default LinkBase;\r\n","/* eslint-disable react/jsx-no-target-blank */\r\n/* eslint-disable view-models/no-unused-meta */\r\n/* eslint-disable react/prop-types */\r\n// TODO: remove view-models/no-unused-meta and eslint-disable react/prop-types rule when this issue https://github.com/asbjornh/view-models/issues/18 is resolved\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport LinkBase from 'components/models/link-base';\r\nimport cn from 'classnames';\r\n\r\nconst Link = ({\r\n  className,\r\n  openInNewTab = false,\r\n  url,\r\n  text,\r\n  tabindex,\r\n  onFocus = () => {},\r\n  onBlur = () => {},\r\n}) => (\r\n  <a\r\n    href={url}\r\n    className={cn('link', {\r\n      [className]: className,\r\n    })}\r\n    target={openInNewTab ? '_blank' : null}\r\n    rel={openInNewTab ? 'nofollow noopener noreferrer' : null}\r\n    tabIndex={tabindex}\r\n    onFocus={onFocus}\r\n    onBlur={onBlur}\r\n  >\r\n    {text}\r\n  </a>\r\n);\r\n\r\nLink.viewModelMeta = {\r\n  className: 'ignore',\r\n  tabindex: 'ignore',\r\n  onFocus: 'ignore',\r\n  onBlur: 'ignore',\r\n};\r\n\r\nLink.propTypes = Object.assign({}, LinkBase.propTypes, {\r\n  className: PropTypes.string,\r\n  tabindex: PropTypes.number,\r\n  onFocus: PropTypes.func,\r\n  onBlur: PropTypes.func,\r\n});\r\n\r\nexport default Link;\r\n","/* eslint-disable react/prop-types */\r\n// TODO: remove view-models/no-unused-meta and eslint-disable react/prop-types rule when this issue https://github.com/asbjornh/view-models/issues/18 is resolved\r\nimport React, { forwardRef } from 'react';\r\nimport ButtonBase from 'components/models/button-base';\r\nimport Icon from 'components/icon';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\nimport ariaAttributesModel from 'components/models/aria-attributes/aria-attributes';\r\n\r\nexport const themes = {\r\n  dark: 'dark',\r\n  light: 'light',\r\n};\r\n\r\nexport const sizes = {\r\n  normal: 'normal',\r\n  small: 'small',\r\n};\r\n\r\nexport const arrowDirections = {\r\n  right: 'right',\r\n  left: 'left',\r\n};\r\n\r\nconst LinkButton = forwardRef(\r\n  (\r\n    {\r\n      className,\r\n      openInNewTab = false,\r\n      url,\r\n      text,\r\n      tabindex,\r\n      isActive,\r\n      theme,\r\n      onClick,\r\n      size = sizes.normal,\r\n      arrowDirection = arrowDirections.right,\r\n      reverseIconDirectionOnHover,\r\n      ariaAttributes = {},\r\n    },\r\n    ref\r\n  ) => {\r\n    const RootTag = url ? 'a' : 'button';\r\n    const leftDirection = arrowDirection === arrowDirections.left;\r\n    return (\r\n      <RootTag\r\n        ref={ref}\r\n        href={url}\r\n        className={cn('link-button', {\r\n          [className]: className,\r\n          'link-button_active': isActive,\r\n          'link-button_theme-light': theme === themes.light,\r\n          'link-button_arrow-position-left': leftDirection,\r\n          'link-button_reversed-arrow-direction-on-hover':\r\n            reverseIconDirectionOnHover,\r\n          'link-button_small': size === sizes.small,\r\n        })}\r\n        target={openInNewTab ? '_blank' : null}\r\n        rel={openInNewTab ? 'nofollow noopener' : null}\r\n        tabIndex={tabindex}\r\n        onClick={onClick}\r\n        {...ariaAttributes}\r\n      >\r\n        {((reverseIconDirectionOnHover && !leftDirection) || leftDirection) && (\r\n          <Icon\r\n            name={leftDirection ? 'arrow-left' : 'arrow-right'}\r\n            className=\"link-button__arrow link-button__arrow_prefix\"\r\n          />\r\n        )}\r\n        <span\r\n          className={cn('link-button__text', {\r\n            'link-button__text_theme-light': theme === themes.light,\r\n          })}\r\n        >\r\n          {text}\r\n        </span>\r\n        {((reverseIconDirectionOnHover && leftDirection) || !leftDirection) && (\r\n          <Icon\r\n            name={leftDirection ? 'arrow-left' : 'arrow-right'}\r\n            className=\"link-button__arrow link-button__arrow_suffix\"\r\n          />\r\n        )}\r\n      </RootTag>\r\n    );\r\n  }\r\n);\r\n\r\nLinkButton.viewModelMeta = 'ignore';\r\n\r\nLinkButton.propTypes = Object.assign({}, ButtonBase.propTypes, {\r\n  className: PropTypes.string,\r\n  theme: PropTypes.oneOf(Object.values(themes)),\r\n  size: PropTypes.oneOf(Object.values(sizes)),\r\n  arrowDirection: PropTypes.oneOf(Object.values(arrowDirections)),\r\n  isActive: PropTypes.bool,\r\n  reverseIconDirectionOnHover: PropTypes.bool,\r\n  ariaAttributes: PropTypes.exact(ariaAttributesModel),\r\n});\r\n\r\nexport default LinkButton;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\n\r\nexport const linePositions = {\r\n  right: 'right',\r\n  left: 'left',\r\n};\r\n\r\nconst OriginMatters = ({\r\n  className,\r\n  text,\r\n  linePosition = 'left',\r\n  calculatedLineOffset,\r\n}) => {\r\n  return (\r\n    <div\r\n      className={cn('origin-matters', className, {\r\n        [`origin-matters_line-position_${linePosition}`]: linePosition,\r\n      })}\r\n    >\r\n      <div\r\n        className=\"origin-matters__line\"\r\n        style={{\r\n          ...(linePosition === linePositions.left\r\n            ? { left: calculatedLineOffset }\r\n            : { right: calculatedLineOffset }),\r\n        }}\r\n      ></div>\r\n      <span className=\"origin-matters__text\">{text}</span>\r\n    </div>\r\n  );\r\n};\r\n\r\nOriginMatters.viewModelMeta = 'ignore';\r\n\r\nOriginMatters.propTypes = {\r\n  className: PropTypes.string,\r\n  text: PropTypes.string,\r\n  calculatedLineOffset: PropTypes.number,\r\n  linePosition: PropTypes.oneOf(Object.values(linePositions)),\r\n};\r\n\r\nexport default OriginMatters;\r\n","import isRunningOnClient from '@creuna/utils/is-running-on-client';\r\n\r\nfunction minWidth(size) {\r\n  return function () {\r\n    return isRunningOnClient\r\n      ? window.matchMedia(`(min-width: ${size}px)`).matches\r\n      : null;\r\n  };\r\n}\r\n\r\nconst breakpoints = {\r\n  s: 0,\r\n  m: 768,\r\n  l: 1024,\r\n  ipadPro: 1025,\r\n  xl: 1800,\r\n};\r\n\r\nexport default {\r\n  s: minWidth(breakpoints.s),\r\n  m: minWidth(breakpoints.m),\r\n  l: minWidth(breakpoints.l),\r\n  ipadPro: minWidth(breakpoints.ipadPro),\r\n  xl: minWidth(breakpoints.xl),\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport breakpoints from 'js/breakpoints';\r\n\r\nexport default function useBreakpoints(\r\n  initiallyDesktop,\r\n  initiallyTablet,\r\n  initiallyMobile,\r\n  initiallyDesktopLargerThanIpad,\r\n  initiallyDesktopExtraLarge\r\n) {\r\n  const [state, setState] = React.useState({\r\n    isDesktop: initiallyDesktop,\r\n    isTablet: initiallyTablet,\r\n    isMobile: initiallyMobile,\r\n    isDesktopLargerThanIpad: initiallyDesktopLargerThanIpad,\r\n    isDesktopExtraLarge: initiallyDesktopExtraLarge,\r\n    brekpointsStarted: false,\r\n  });\r\n\r\n  const onResize = () => {\r\n    setState({\r\n      isDesktop: breakpoints.l(),\r\n      isTablet: breakpoints.m() && !breakpoints.l(),\r\n      isMobile: breakpoints.s() && !breakpoints.m(),\r\n      isDesktopLargerThanIpad: breakpoints.ipadPro(),\r\n      isDesktopExtraLarge: breakpoints.xl(),\r\n      brekpointsStarted: true,\r\n    });\r\n  };\r\n\r\n  useEffect(() => {\r\n    onResize();\r\n    window.addEventListener('resize', onResize);\r\n    return () => window.removeEventListener('resize', onResize);\r\n  }, []);\r\n\r\n  return state;\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Image from 'components/image';\r\nimport Link from 'components/link';\r\nimport LinkButton, {\r\n  sizes as linkButtonSizes,\r\n  themes as LinkButtonThemes,\r\n} from 'components/link-button';\r\nimport PoorText from 'components/poor-text';\r\nimport OriginMatters, {\r\n  linePositions as OriginMattersLinePositions,\r\n} from 'components/origin-matters';\r\nimport imageResizer from 'js/image-resizer';\r\nimport useBreakpoints from 'hooks/use-breakpoints';\r\n\r\nconst FooterBanner = ({ heading, introHtml, backgroundImage, lang, link }) => {\r\n  const { isMobile } = useBreakpoints(true);\r\n  const [imageWidth, setImageWidth] = useState(0);\r\n\r\n  useEffect(() => {\r\n    setImageWidth(\r\n      isMobile ? imageResizer.calcImageWidth(window.innerWidth, 100) : 1320\r\n    );\r\n  }, [isMobile]);\r\n\r\n  return (\r\n    <div className=\"footer-banner\">\r\n      {backgroundImage && (\r\n        <div className=\"footer-banner__image-holder\">\r\n          <Image\r\n            {...backgroundImage}\r\n            fluid={true}\r\n            width={imageWidth}\r\n            height={isMobile ? null : 565}\r\n            className=\"image_size_footer-banner\"\r\n          />\r\n        </div>\r\n      )}\r\n      <div className=\"footer-banner__color-container\">\r\n        <div className=\"footer-banner__container\">\r\n          <div className=\"footer-banner__content\">\r\n            <div className=\"footer-banner__column\">\r\n              {heading && <h2 className=\"footer-banner__heading\">{heading}</h2>}\r\n              {introHtml && (\r\n                <PoorText\r\n                  text={introHtml}\r\n                  className=\"poor-text_in-footer-banner footer-banner__text\"\r\n                />\r\n              )}\r\n              {link && (\r\n                <LinkButton\r\n                  {...link}\r\n                  theme={LinkButtonThemes.light}\r\n                  size={linkButtonSizes.small}\r\n                />\r\n              )}\r\n            </div>\r\n            <div className=\"footer-banner__column\">\r\n              <OriginMatters\r\n                text={lang.originMattersLabel}\r\n                linePosition={OriginMattersLinePositions.right}\r\n                className=\"footer-banner__slogan\"\r\n              />\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nFooterBanner.propTypes = {\r\n  heading: PropTypes.string,\r\n  introHtml: PropTypes.string,\r\n  backgroundImage: PropTypes.exact(Image.propTypes),\r\n  lang: PropTypes.shape({\r\n    originMattersLabel: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n  link: PropTypes.exact(Link.propTypes),\r\n};\r\n\r\nexport default FooterBanner;\r\n","/* eslint-disable react/jsx-no-target-blank */\r\n/* eslint-disable view-models/no-unused-meta */\r\n/* eslint-disable react/prop-types */\r\n// TODO: remove view-models/no-unused-meta and eslint-disable react/prop-types rule when this issue https://github.com/asbjornh/view-models/issues/18 is resolved\r\nimport React from 'react';\r\nimport ButtonBase from 'components/models/button-base';\r\nimport Icon from 'components/icon';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\nimport ariaAttributesModel from 'components/models/aria-attributes/aria-attributes';\r\n\r\nconst IconButton = ({\r\n  className,\r\n  openInNewTab = false,\r\n  url,\r\n  iconName,\r\n  tabindex,\r\n  isActive,\r\n  onClick,\r\n  isDisabled = false,\r\n  ariaAttributes = {},\r\n}) => {\r\n  const RootTag = url ? 'a' : 'button';\r\n  return (\r\n    <RootTag\r\n      href={url}\r\n      className={cn('icon-button', {\r\n        [className]: className,\r\n        'icon-button_active': isActive,\r\n      })}\r\n      target={openInNewTab ? '_blank' : null}\r\n      rel={openInNewTab ? 'nofollow noopener' : null}\r\n      tabIndex={tabindex}\r\n      onClick={onClick}\r\n      disabled={isDisabled ? isDisabled : null}\r\n      {...ariaAttributes}\r\n    >\r\n      <Icon name={iconName} className=\"icon-button__icon\" />\r\n    </RootTag>\r\n  );\r\n};\r\n\r\nIconButton.viewModelMeta = 'ignore';\r\n\r\nIconButton.propTypes = Object.assign({}, ButtonBase.propTypes, {\r\n  iconName: PropTypes.string,\r\n  className: PropTypes.string,\r\n  isActive: PropTypes.bool,\r\n  ariaAttributes: PropTypes.exact(ariaAttributesModel),\r\n});\r\n\r\nexport default IconButton;\r\n","/* eslint-disable react/prop-types */\r\n// TODO: remove eslint-disable react/prop-types rule when this issue https://github.com/asbjornh/view-models/issues/18 is resolved\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Link from 'components/link';\r\nimport IconButton from 'components/icon-button';\r\n\r\nconst icons = {\r\n  facebook: 'facebook',\r\n  twitter: 'twitter',\r\n  instagram: 'instagram',\r\n  linkedin: 'linkedin',\r\n};\r\n\r\nconst SocialLink = ({ icon, ...rest }) => {\r\n  return <IconButton {...rest} iconName={icon} />;\r\n};\r\n\r\nSocialLink.propTypes = Object.assign({}, Link.propTypes, {\r\n  icon: PropTypes.oneOf(Object.values(icons)).isRequired,\r\n});\r\n\r\nexport default SocialLink;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport cn from 'classnames';\r\n\r\nconst RichText = ({ text, className }) => {\r\n  return !text ? null : (\r\n    <div\r\n      className={cn('rich-text', className)}\r\n      dangerouslySetInnerHTML={{ __html: text }}\r\n    />\r\n  );\r\n};\r\n\r\nRichText.propTypes = {\r\n  text: PropTypes.string,\r\n  className: PropTypes.string,\r\n};\r\n\r\nRichText.viewModelMeta = 'ignore';\r\n\r\nexport default RichText;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Logo from 'components/logo';\r\nimport FooterBanner from 'components/footer-banner';\r\nimport Link from 'components/link';\r\nimport SocialLink from 'components/social-link';\r\nimport RichText from 'components/rich-text';\r\n\r\nconst Footer = ({\r\n  banner,\r\n  heading,\r\n  logo,\r\n  column1,\r\n  column2,\r\n  socialLinks,\r\n  privacy,\r\n}) => {\r\n  return (\r\n    <div className=\"footer\">\r\n      {banner && <FooterBanner {...banner} />}\r\n      <div className=\"footer__background\" role=\"presentation\"></div>\r\n      <div className=\"footer__container\">\r\n        {heading && <strong className=\"footer__heading\">{heading}</strong>}\r\n        <div className=\"footer__columns\">\r\n          {column1 && (\r\n            <div className=\"footer__column\">\r\n              {column1.heading && (\r\n                <strong className=\"footer__column-heading\">\r\n                  {column1.heading}\r\n                </strong>\r\n              )}\r\n              {column1.textHtml && (\r\n                <RichText\r\n                  text={column1.textHtml}\r\n                  className=\"rich-text_in-footer-column\"\r\n                />\r\n              )}\r\n            </div>\r\n          )}\r\n          {column2 && (\r\n            <div className=\"footer__column\">\r\n              {column2.heading && (\r\n                <strong className=\"footer__column-heading\">\r\n                  {column2.heading}\r\n                </strong>\r\n              )}\r\n              {column2.textHtml && (\r\n                <RichText\r\n                  text={column2.textHtml}\r\n                  className=\"rich-text_in-footer-column\"\r\n                />\r\n              )}\r\n            </div>\r\n          )}\r\n          {socialLinks && (\r\n            <div className=\"footer__column\">\r\n              {socialLinks.heading && (\r\n                <strong className=\"footer__column-heading\">\r\n                  {socialLinks.heading}\r\n                </strong>\r\n              )}\r\n              <ul className=\"footer__socials-list\">\r\n                {socialLinks.links &&\r\n                  socialLinks.links.map((item, i) => (\r\n                    <li key={i} className=\"footer__socials-item\">\r\n                      <SocialLink\r\n                        {...item}\r\n                        ariaAttributes={{\r\n                          'aria-label': item.text,\r\n                        }}\r\n                      />\r\n                    </li>\r\n                  ))}\r\n              </ul>\r\n            </div>\r\n          )}\r\n          {privacy && (\r\n            <div className=\"footer__column\">\r\n              {privacy.heading && (\r\n                <strong className=\"footer__column-heading\">\r\n                  {privacy.heading}\r\n                </strong>\r\n              )}\r\n              <ul className=\"footer__privacy\">\r\n                {privacy.links &&\r\n                  privacy.links.map((item, i) => (\r\n                    <li key={i} className=\"footer__privacy-item\">\r\n                      <Link {...item} className=\"footer__privacy-link\" />\r\n                    </li>\r\n                  ))}\r\n              </ul>\r\n            </div>\r\n          )}\r\n        </div>\r\n        {logo && logo.url && (\r\n          <div className=\"footer__logo-holder\">\r\n            <Logo\r\n              {...logo}\r\n              className=\"footer__logo\"\r\n              imageClass=\"image_size_footer-logo\"\r\n            />\r\n          </div>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nFooter.propTypes = {\r\n  heading: PropTypes.string,\r\n  banner: PropTypes.exact(FooterBanner.propTypes),\r\n  logo: PropTypes.exact(Logo.propTypes),\r\n  column1: PropTypes.shape({\r\n    heading: PropTypes.string,\r\n    textHtml: PropTypes.string,\r\n  }),\r\n  column2: PropTypes.shape({\r\n    heading: PropTypes.string,\r\n    textHtml: PropTypes.string,\r\n  }),\r\n  socialLinks: PropTypes.shape({\r\n    heading: PropTypes.string,\r\n    links: PropTypes.arrayOf(PropTypes.shape(SocialLink.propTypes)),\r\n  }),\r\n  privacy: PropTypes.shape({\r\n    heading: PropTypes.string,\r\n    links: PropTypes.arrayOf(PropTypes.shape(Link.propTypes)),\r\n  }),\r\n};\r\n\r\nexport default Footer;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\nconst sizes = {\r\n  normal: 'normal',\r\n  small: 'small',\r\n};\r\n// NOTE: Could be rendered on BE side as static html.\r\nconst PageHeading = ({ text, className, size }) => {\r\n  return (\r\n    <h1\r\n      className={cn('page-heading', className, {\r\n        'page-heading_small': size === sizes.small,\r\n      })}\r\n    >\r\n      {text}\r\n    </h1>\r\n  );\r\n};\r\n\r\nPageHeading.propTypes = {\r\n  text: PropTypes.string,\r\n  className: PropTypes.string,\r\n  size: PropTypes.oneOf(Object.values(sizes)),\r\n};\r\n\r\nPageHeading.viewModelMeta = 'ignore';\r\n\r\nexport default PageHeading;\r\n","export const calculateInterpolatedValue = (\r\n  abstractUnit,\r\n  maxValue,\r\n  maxAbstractUnit,\r\n  minValue\r\n) => {\r\n  const safeMinValue = minValue ?? 0;\r\n  const minAbstractUnit = 1;\r\n\r\n  const interpolatedValue =\r\n    safeMinValue +\r\n    ((abstractUnit - minAbstractUnit) * (maxValue - safeMinValue)) /\r\n      (maxAbstractUnit - minAbstractUnit);\r\n  return interpolatedValue;\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Parallax } from 'react-parallax';\r\nimport { calculateInterpolatedValue } from 'js/calc-utils';\r\nimport useBreakpoints from 'hooks/use-breakpoints';\r\nimport cn from 'classnames';\r\n\r\nconst ParallaxHeroBackground = ({\r\n  backgroundColor,\r\n  useParallaxOnMobile = true,\r\n  className,\r\n}) => {\r\n  const { isMobile } = useBreakpoints(true);\r\n\r\n  return (\r\n    <Parallax\r\n      style={{\r\n        position: 'absolute',\r\n        overflow: 'visible',\r\n      }}\r\n      className=\"parallax-hero-background\"\r\n      strength={200}\r\n      renderLayer={percentage => {\r\n        const maxPercentage = 1.3;\r\n        const maxBorderWidth = isMobile ? 35 : 60;\r\n        let boxShadowWidth = 0;\r\n\r\n        if ((isMobile && useParallaxOnMobile) || !isMobile) {\r\n          if (percentage > maxPercentage) {\r\n            boxShadowWidth = maxBorderWidth;\r\n          } else {\r\n            boxShadowWidth = calculateInterpolatedValue(\r\n              percentage,\r\n              maxBorderWidth,\r\n              maxPercentage\r\n            );\r\n          }\r\n        }\r\n\r\n        return (\r\n          <div\r\n            role=\"presentation\"\r\n            style={{\r\n              backgroundColor: backgroundColor,\r\n              boxShadow: `0 0 0 ${boxShadowWidth}px ${backgroundColor}`,\r\n            }}\r\n            className={cn('parallax-hero-background__inner', className)}\r\n          ></div>\r\n        );\r\n      }}\r\n    ></Parallax>\r\n  );\r\n};\r\n\r\nParallaxHeroBackground.propTypes = {\r\n  backgroundColor: PropTypes.string.isRequired,\r\n  useParallaxOnMobile: PropTypes.bool,\r\n  className: PropTypes.string,\r\n};\r\n\r\nParallaxHeroBackground.viewModelMeta = 'ignore';\r\n\r\nexport default ParallaxHeroBackground;\r\n","import isRunningOnClient from '@creuna/utils/is-running-on-client';\r\n\r\nexport const getNumericCssPropertyValue = propName => {\r\n  if (!isRunningOnClient) return 0;\r\n\r\n  return parseInt(\r\n    getComputedStyle(document.documentElement).getPropertyValue(propName)\r\n  );\r\n};\r\n","import { useState, useEffect } from 'react';\r\nimport { getNumericCssPropertyValue } from 'js/stylesheet-utils';\r\n\r\nexport const ANIMATION_STEPS = {\r\n  oneLayerHero: [\r\n    '--page-hero-bg-fade-animation-duration',\r\n    '--page-hero-content-fade-animation-duration',\r\n  ],\r\n  twoLayersHero: [\r\n    '--page-hero-bg-fade-animation-duration',\r\n    '--page-hero-content-fade-animation-duration',\r\n  ],\r\n  expandingLayerHero: [\r\n    '--page-hero-bg-appearance-duration',\r\n    '--page-hero-bg-expansion-duration',\r\n  ],\r\n};\r\n\r\nconst useAnimationStepSwitcher = animationSteps => {\r\n  const [animationCurrentStep, setAnimationCurrentStep] = useState(0);\r\n\r\n  useEffect(() => {\r\n    setAnimationCurrentStep(1);\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    const animationStepName = animationSteps[animationCurrentStep - 1];\r\n\r\n    if (animationStepName) {\r\n      // Avoid infinite render issue, check if step does exist\r\n      setTimeout(() => {\r\n        setAnimationCurrentStep(animationCurrentStep + 1);\r\n      }, getNumericCssPropertyValue(animationStepName));\r\n    }\r\n  }, [animationCurrentStep]);\r\n\r\n  return animationCurrentStep;\r\n};\r\n\r\nexport default useAnimationStepSwitcher;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Image from 'components/image';\r\nimport PoorText from 'components/poor-text';\r\nimport PageHeading from 'components/page-heading';\r\nimport ParallaxHeroBackground from 'components/parallax-hero-background';\r\nimport OriginMatters, {\r\n  linePositions as OriginMattersLinePositions,\r\n} from 'components/origin-matters';\r\nimport useAnimationStepSwitcher, {\r\n  ANIMATION_STEPS,\r\n} from 'hooks/use-animation-step-switcher';\r\nimport useBreakpoints from 'hooks/use-breakpoints';\r\nimport { calculateInterpolatedValue } from 'js/calc-utils';\r\nimport { Parallax } from 'react-parallax';\r\nimport cn from 'classnames';\r\n\r\nconst FrontPageHero = ({ heading, introHtml, image, lang }) => {\r\n  const { isMobile } = useBreakpoints(true);\r\n  const animationCurrentStep = useAnimationStepSwitcher(\r\n    ANIMATION_STEPS.twoLayersHero\r\n  );\r\n\r\n  return (\r\n    <div className=\"front-page-hero\">\r\n      <ParallaxHeroBackground\r\n        backgroundColor=\"#EEE4DD\"\r\n        className={cn('front-page-hero__background', {\r\n          'front-page-hero__background_visible': animationCurrentStep > 0,\r\n        })}\r\n      />\r\n      <div\r\n        className={cn('front-page-hero__container', {\r\n          'front-page-hero__container_tall': animationCurrentStep > 2,\r\n        })}\r\n      >\r\n        <div\r\n          className={cn('front-page-hero__content', {\r\n            'front-page-hero__content_visible': animationCurrentStep > 1,\r\n          })}\r\n        >\r\n          {heading && (\r\n            <PageHeading text={heading} className=\"front-page-hero__heading\" />\r\n          )}\r\n          <div className=\"front-page-hero__text-holder\">\r\n            {introHtml && (\r\n              <PoorText\r\n                text={introHtml}\r\n                className=\"front-page-hero__intro poor-text_in-front-page-hero\"\r\n              />\r\n            )}\r\n            <Parallax\r\n              style={{\r\n                overflow: 'visible',\r\n              }}\r\n              renderLayer={percentage => {\r\n                const maxPercentage = 0.65;\r\n                const maxLineOffset = 999;\r\n                let calculatedLineOffset = 0;\r\n\r\n                if (percentage > maxPercentage) {\r\n                  calculatedLineOffset = maxLineOffset;\r\n                } else {\r\n                  calculatedLineOffset = calculateInterpolatedValue(\r\n                    percentage,\r\n                    maxLineOffset,\r\n                    maxPercentage\r\n                  );\r\n                }\r\n\r\n                return (\r\n                  <OriginMatters\r\n                    text={lang.originMattersLabel}\r\n                    linePosition={OriginMattersLinePositions.left}\r\n                    className=\"front-page-hero__slogan\"\r\n                    calculatedLineOffset={maxLineOffset - calculatedLineOffset}\r\n                  />\r\n                );\r\n              }}\r\n            />\r\n          </div>\r\n        </div>\r\n        <div className=\"front-page-hero__image-holder\">\r\n          {image && (\r\n            <Parallax\r\n              style={{\r\n                overflow: 'visible',\r\n              }}\r\n              renderLayer={percentage => {\r\n                const maxPercentage = 1.3;\r\n                const maxImageColPadding = 60;\r\n                let imageColPadding = 0;\r\n\r\n                if (percentage > maxPercentage) {\r\n                  imageColPadding = maxImageColPadding;\r\n                } else {\r\n                  imageColPadding = calculateInterpolatedValue(\r\n                    percentage,\r\n                    maxImageColPadding,\r\n                    maxPercentage\r\n                  );\r\n                }\r\n\r\n                return (\r\n                  <div\r\n                    style={{\r\n                      paddingLeft: isMobile\r\n                        ? 0\r\n                        : maxImageColPadding - imageColPadding,\r\n                    }}\r\n                  >\r\n                    <div\r\n                      className={cn('front-page-hero__image-holder-overlay', {\r\n                        'front-page-hero__image-holder-overlay_visible':\r\n                          animationCurrentStep > 0,\r\n                        'front-page-hero__image-holder-overlay_tight':\r\n                          animationCurrentStep <= 2,\r\n                      })}\r\n                    >\r\n                      <div className=\"front-page-hero__image-centered-overlay\">\r\n                        <Image\r\n                          {...image}\r\n                          className=\"front-page-hero__image image_size_front-page-hero\"\r\n                        />\r\n                      </div>\r\n                    </div>\r\n                  </div>\r\n                );\r\n              }}\r\n            />\r\n          )}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nFrontPageHero.propTypes = {\r\n  heading: PropTypes.string,\r\n  introHtml: PropTypes.string,\r\n  image: PropTypes.exact(Image.propTypes),\r\n  lang: PropTypes.shape({\r\n    originMattersLabel: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nexport default FrontPageHero;\r\n","import PropTypes from 'prop-types';\r\nimport Link from 'components/link';\r\n\r\nconst MenuLink = {};\r\n\r\nMenuLink.propTypes = Object.assign({}, Link.propTypes, {\r\n  isActive: PropTypes.bool,\r\n});\r\n\r\nexport default MenuLink;\r\n","import React from 'react';\r\nimport MenuLink from 'components/models/menu-link';\r\nimport LinkButton, { themes as LinkButtonThemes } from 'components/link-button';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\n\r\nconst MainMenu = ({ links, className }) => {\r\n  return links && links.length > 0 ? (\r\n    <ul className={cn('main-menu', className)}>\r\n      {links.map((link, index) => (\r\n        <li key={index} className=\"main-menu__item\">\r\n          <LinkButton\r\n            {...link}\r\n            theme={LinkButtonThemes.light}\r\n            reverseIconDirectionOnHover\r\n            className={cn('main-menu__link', {\r\n              'main-menu__link_active': link.isActive,\r\n            })}\r\n          />\r\n        </li>\r\n      ))}\r\n    </ul>\r\n  ) : null;\r\n};\r\n\r\nMainMenu.viewModelMeta = {\r\n  className: 'ignore',\r\n};\r\n\r\nMainMenu.propTypes = {\r\n  className: PropTypes.string,\r\n  links: PropTypes.arrayOf(PropTypes.exact(MenuLink.propTypes)).isRequired,\r\n};\r\n\r\nexport default MainMenu;\r\n","import React from 'react';\r\nimport Link from 'components/link';\r\nimport MenuLink from 'components/models/menu-link';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\n\r\nconst SecondaryMenu = ({ links, className }) => {\r\n  return links && links.length > 0 ? (\r\n    <ul className={cn('secondary-menu', className)}>\r\n      {links.map((link, index) => (\r\n        <li key={index} className=\"secondary-menu__item\">\r\n          <Link\r\n            {...link}\r\n            className={cn('secondary-menu__link', {\r\n              'secondary-menu__link_active': link.isActive,\r\n            })}\r\n          />\r\n        </li>\r\n      ))}\r\n    </ul>\r\n  ) : null;\r\n};\r\n\r\nSecondaryMenu.viewModelMeta = {\r\n  className: 'ignore',\r\n};\r\n\r\nSecondaryMenu.propTypes = {\r\n  className: PropTypes.string,\r\n  links: PropTypes.arrayOf(PropTypes.exact(MenuLink.propTypes)).isRequired,\r\n};\r\n\r\nexport default SecondaryMenu;\r\n","import PropTypes from 'prop-types';\r\n\r\nconst SearchFormLang = {};\r\n\r\nSearchFormLang.propTypes = {\r\n  searchLabel: PropTypes.string.isRequired,\r\n  searchInputAriaLabel: PropTypes.string.isRequired,\r\n  searchFormAriaLabel: PropTypes.string.isRequired,\r\n  searchBtnAriaLabel: PropTypes.string.isRequired,\r\n  searchHint: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default SearchFormLang;\r\n","const prefixesDictionary = {};\r\n\r\nconst generateUniqueId = prefix => {\r\n  if (!prefixesDictionary[prefix]) {\r\n    prefixesDictionary[prefix] = 1;\r\n  } else {\r\n    prefixesDictionary[prefix] += 1;\r\n  }\r\n  return `${prefix}-${prefixesDictionary[prefix]}`;\r\n};\r\n\r\nexport default {\r\n  generateUniqueId,\r\n};\r\n","import React, {\r\n  useEffect,\r\n  useState,\r\n  useMemo,\r\n  useRef,\r\n  forwardRef,\r\n  useImperativeHandle,\r\n} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport FilterHeading from 'components/filter-heading';\r\nimport Icon from 'components/icon/icon';\r\nimport cn from 'classnames';\r\nimport idHelper from 'js/id-helper';\r\nimport SearchFormLang from 'components/models/search-form-lang/search-form-lang';\r\n\r\nexport const themes = {\r\n  dark: 'dark',\r\n  light: 'light',\r\n};\r\n\r\nexport const sizes = {\r\n  large: 'large',\r\n  normal: 'normal',\r\n};\r\n\r\nconst SearchForm = forwardRef(\r\n  (\r\n    {\r\n      size = sizes.normal,\r\n      theme = themes.dark,\r\n      query,\r\n      className,\r\n      lang,\r\n      searchPageUrl,\r\n      displayTopLabel = true,\r\n      onSearch,\r\n    },\r\n    ref\r\n  ) => {\r\n    const [value, setValue] = useState(query || '');\r\n    const [isFocused, setIsFocused] = useState(false);\r\n    const uniqueSearchFormId = useMemo(\r\n      () => idHelper.generateUniqueId('search-form'),\r\n      []\r\n    );\r\n    const searchInput = useRef(null);\r\n\r\n    useEffect(() => {\r\n      setValue(query || '');\r\n    }, [query]);\r\n\r\n    const isFilled = value && value.trim().length;\r\n\r\n    const onInputChange = e => {\r\n      const val = e.target.value;\r\n      setValue(val);\r\n    };\r\n\r\n    const onInputFocus = () => {\r\n      setIsFocused(true);\r\n    };\r\n\r\n    const onInputBlur = () => {\r\n      setIsFocused(false);\r\n    };\r\n\r\n    const onFormSubmit = e => {\r\n      if (onSearch) {\r\n        e.preventDefault();\r\n        onSearch(value);\r\n      }\r\n    };\r\n\r\n    useImperativeHandle(ref, () => ({\r\n      clearInput() {\r\n        setValue('');\r\n      },\r\n      focusInput() {\r\n        if (searchInput && searchInput.current) {\r\n          searchInput.current.focus();\r\n        }\r\n      },\r\n    }));\r\n\r\n    return (\r\n      <form\r\n        className={cn('search-form', {\r\n          [className]: className,\r\n          'search-form_active': isFilled,\r\n          'search-form_focused': isFocused,\r\n        })}\r\n        action={searchPageUrl}\r\n        method=\"get\"\r\n        onSubmit={onFormSubmit}\r\n        role=\"search\"\r\n        aria-label={lang.searchFormAriaLabel}\r\n      >\r\n        {displayTopLabel && (\r\n          <FilterHeading\r\n            asLabelFor={uniqueSearchFormId}\r\n            text={lang.searchLabel}\r\n            className=\"search-form__label\"\r\n          />\r\n        )}\r\n        <div className=\"search-form__container\">\r\n          <input\r\n            id={displayTopLabel ? uniqueSearchFormId : null}\r\n            ref={searchInput}\r\n            value={value}\r\n            placeholder={lang.searchHint}\r\n            aria-label={lang.searchInputAriaLabel}\r\n            className={cn('search-form__input', {\r\n              [`search-form__input_size_${size}`]: size,\r\n              [`search-form__input_theme_${theme}`]: theme,\r\n            })}\r\n            name=\"q\"\r\n            onChange={onInputChange}\r\n            onFocus={onInputFocus}\r\n            onBlur={onInputBlur}\r\n          />\r\n          <span className=\"search-form__prefix-label\">{lang.searchLabel}:</span>\r\n          <button\r\n            className=\"search-form__btn\"\r\n            aria-label={lang.searchBtnAriaLabel}\r\n          >\r\n            <Icon\r\n              name=\"search\"\r\n              className={cn('search-form__icon', {\r\n                [`search-form__icon_theme_${theme}`]: theme,\r\n              })}\r\n            />\r\n          </button>\r\n        </div>\r\n      </form>\r\n    );\r\n  }\r\n);\r\n\r\nSearchForm.viewModelMeta = 'ignore';\r\n\r\nSearchForm.propTypes = {\r\n  className: PropTypes.string,\r\n  query: PropTypes.string,\r\n  searchPageUrl: PropTypes.string,\r\n  size: PropTypes.oneOf(Object.values(sizes)),\r\n  theme: PropTypes.oneOf(Object.values(themes)),\r\n  lang: PropTypes.shape(SearchFormLang.propTypes).isRequired,\r\n  displayTopLabel: PropTypes.bool,\r\n  onSearch: PropTypes.func,\r\n};\r\n\r\nexport default SearchForm;\r\n","/* eslint-disable react/no-multi-comp */\r\nimport React, { useEffect, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport SearchFormLang from 'components/models/search-form-lang/search-form-lang';\r\nimport SearchForm, {\r\n  sizes as searchFormSizes,\r\n  themes as searchFormThemes,\r\n} from 'components/search-form/search-form';\r\nimport Icon from 'components/icon';\r\nimport cn from 'classnames';\r\n\r\nconst quickSearchFormId = 'quick-search-form';\r\n\r\nconst QuickSearch = ({\r\n  className,\r\n  searchPageUrl,\r\n  lang,\r\n  isSearchExpanded,\r\n  onSearchExpand,\r\n}) => {\r\n  const searchFormRef = useRef(null);\r\n\r\n  useEffect(() => {\r\n    if (searchFormRef && searchFormRef.current) {\r\n      !isSearchExpanded && searchFormRef.current.clearInput();\r\n    }\r\n  }, [isSearchExpanded, searchFormRef]);\r\n\r\n  const expandSearch = () => {\r\n    onSearchExpand();\r\n\r\n    setTimeout(() => {\r\n      if (searchFormRef && searchFormRef.current) {\r\n        searchFormRef.current.focusInput();\r\n      }\r\n    }, 200);\r\n  };\r\n\r\n  return (\r\n    <div className={cn('quick-search', className)}>\r\n      <button\r\n        className={cn('quick-search__btn', {\r\n          'quick-search__btn_hidden': isSearchExpanded,\r\n        })}\r\n        onClick={expandSearch}\r\n        aria-expanded={isSearchExpanded}\r\n        aria-controls={quickSearchFormId}\r\n      >\r\n        <span className=\"quick-search__btn-text\">{lang.searchLabel}</span>\r\n        <Icon\r\n          className=\"quick-search__icon\"\r\n          name=\"search\"\r\n          useFill\r\n          style={{ color: '#fff' }}\r\n        />\r\n      </button>\r\n      <div\r\n        className={cn('quick-search__holder', {\r\n          'quick-search__holder_expanded': isSearchExpanded,\r\n        })}\r\n        aria-hidden={!isSearchExpanded}\r\n        id={quickSearchFormId}\r\n      >\r\n        <SearchForm\r\n          ref={searchFormRef}\r\n          displayTopLabel={false}\r\n          lang={lang}\r\n          searchPageUrl={searchPageUrl}\r\n          size={searchFormSizes.small}\r\n          theme={searchFormThemes.light}\r\n          className=\"quick-search__search-form\"\r\n        />\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nQuickSearch.viewModelMeta = {\r\n  className: 'ignore',\r\n  onSearchExpand: 'ignore',\r\n  isSearchExpanded: 'ignore',\r\n};\r\n\r\nQuickSearch.propTypes = {\r\n  className: PropTypes.string,\r\n  searchPageUrl: PropTypes.string,\r\n  isSearchExpanded: PropTypes.bool,\r\n  lang: PropTypes.shape(SearchFormLang.propTypes).isRequired,\r\n  onSearchExpand: PropTypes.func,\r\n};\r\n\r\nexport default QuickSearch;\r\n","import React from 'react';\r\n\r\n/** Attaches an event listener for `eventName` to `window`. */\r\nexport default function useEvent(\r\n  eventName = '',\r\n  eventHandler = () => {},\r\n  dependencies = []\r\n) {\r\n  React.useEffect(() => {\r\n    window.addEventListener(eventName, eventHandler);\r\n    return () => window.removeEventListener(eventName, eventHandler);\r\n  }, dependencies);\r\n}\r\n","import useEvent from './use-event';\r\n\r\nconst isEscape = event =>\r\n  event && (event.key === 'Escape' || event.which === 27);\r\n\r\n/** Fires `callback` when the escape key is pressed */\r\nexport default function useEscape(callback) {\r\n  useEvent('keydown', e => {\r\n    if (isEscape(e)) {\r\n      callback();\r\n    }\r\n  });\r\n}\r\n","import useEvent from './use-event';\r\n\r\n/** Executes the provided callback when a click event occurs outside of the provided ref */\r\nconst useClickOutside = (ref, callback = () => {}) => {\r\n  useEvent('click', e => {\r\n    if (\r\n      ref.current &&\r\n      e.target !== ref.current &&\r\n      !ref.current.contains(e.target)\r\n    ) {\r\n      callback();\r\n    }\r\n  });\r\n};\r\n\r\nexport default useClickOutside;\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Logo from 'components/logo';\r\nimport MainMenu from 'components/main-menu';\r\nimport Button from 'components/button';\r\nimport SecondaryMenu from 'components/secondary-menu';\r\nimport QuickSearch from 'components/quick-search';\r\nimport useToggle from 'hooks/use-toggle';\r\nimport useEscape from 'hooks/use-escape';\r\nimport useClickOutside from 'hooks/use-click-outside';\r\nimport { getNumericCssPropertyValue } from 'js/stylesheet-utils';\r\nimport cn from 'classnames';\r\nimport FocusTrap from 'focus-trap-react';\r\n\r\nconst headerMenuId = 'header-menu';\r\nconst bodyActiveClass = 'header-menu-is-opened';\r\n\r\nconst Header = ({ logo, mainMenu, quickSearch, secondaryMenu, lang }) => {\r\n  const [isAnimated, setIsAnimated] = useState(false);\r\n\r\n  useEffect(() => {\r\n    const headerAnimationTimeout = getNumericCssPropertyValue(\r\n      '--header-animation-timeout'\r\n    );\r\n\r\n    setTimeout(() => {\r\n      setIsAnimated(true);\r\n    }, headerAnimationTimeout);\r\n  }, []);\r\n\r\n  const {\r\n    isActive: isMenuActive,\r\n    toggle: toggleMenu,\r\n    deactivate: deactivateMenu,\r\n  } = useToggle(false);\r\n  const {\r\n    isActive: isSearchExpanded,\r\n    activate: activateSearch,\r\n    deactivate: deactivateSearch,\r\n  } = useToggle(false);\r\n\r\n  const headerRef = useRef(null);\r\n\r\n  const closeHeader = () => {\r\n    deactivateMenu();\r\n    deactivateSearch();\r\n  };\r\n\r\n  useEscape(closeHeader);\r\n  useClickOutside(headerRef, closeHeader);\r\n\r\n  React.useEffect(() => {\r\n    if (isMenuActive) {\r\n      activateSearch();\r\n      document.body.classList.add(bodyActiveClass);\r\n    } else {\r\n      deactivateSearch();\r\n      document.body.classList.remove(bodyActiveClass);\r\n    }\r\n  }, [isMenuActive]);\r\n\r\n  return (\r\n    <FocusTrap\r\n      active={isMenuActive}\r\n      focusTrapOptions={{\r\n        clickOutsideDeactivates: true,\r\n      }}\r\n    >\r\n      <div\r\n        className={cn('header', {\r\n          'header_menu-opened': isMenuActive,\r\n          'header_search-expanded': isSearchExpanded,\r\n          header_animated: isAnimated,\r\n        })}\r\n        ref={headerRef}\r\n      >\r\n        <div className=\"header__top-container\">\r\n          {logo && logo.url && (\r\n            <Logo\r\n              {...logo}\r\n              className=\"header__logo\"\r\n              imageClass=\"image_size_header-logo\"\r\n            />\r\n          )}\r\n          {quickSearch && (\r\n            <QuickSearch\r\n              {...quickSearch}\r\n              className=\"header__quick-search\"\r\n              isSearchExpanded={isSearchExpanded}\r\n              onSearchExpand={activateSearch}\r\n            />\r\n          )}\r\n          {(mainMenu || secondaryMenu) && (\r\n            <Button\r\n              onClick={toggleMenu}\r\n              className=\"header__menu-button\"\r\n              text={isMenuActive ? lang.closeMenuLabel : lang.menuLabel}\r\n              theme=\"light\"\r\n              iconName={isMenuActive ? 'menu-close' : 'menu'}\r\n              ariaAttributes={{\r\n                'aria-label': isMenuActive\r\n                  ? lang.closeMenuLabel\r\n                  : lang.menuLabel,\r\n                'aria-haspopup': true,\r\n                'aria-controls': headerMenuId,\r\n              }}\r\n            />\r\n          )}\r\n        </div>\r\n        <div\r\n          className={cn('header__menu', {\r\n            header__menu_opened: isMenuActive,\r\n          })}\r\n          id={headerMenuId}\r\n          role=\"dialog\"\r\n          aria-hidden={!isMenuActive}\r\n          aria-label={lang.menuLabel}\r\n        >\r\n          <div className=\"header__menu-container\">\r\n            <nav className=\"header__menu-wrapper\">\r\n              {mainMenu && (\r\n                <MainMenu {...mainMenu} className=\"header__main-menu\" />\r\n              )}\r\n              {secondaryMenu && (\r\n                <SecondaryMenu\r\n                  {...secondaryMenu}\r\n                  className=\"header__secondary-menu\"\r\n                />\r\n              )}\r\n            </nav>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </FocusTrap>\r\n  );\r\n};\r\n\r\nHeader.propTypes = {\r\n  logo: PropTypes.exact(Logo.propTypes),\r\n  quickSearch: PropTypes.exact(QuickSearch.propTypes),\r\n  mainMenu: PropTypes.exact(MainMenu.propTypes),\r\n  secondaryMenu: PropTypes.exact(SecondaryMenu.propTypes),\r\n  lang: PropTypes.shape({\r\n    menuLabel: PropTypes.string.isRequired,\r\n    closeMenuLabel: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nexport default Header;\r\n","function format(string, ...args) {\r\n  return string.replace(/{(\\d+)}/g, function (match, number) {\r\n    return typeof args[number] !== 'undefined' ? args[number] : '';\r\n  });\r\n}\r\n\r\nexport default {\r\n  format,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Logo from 'components/logo';\r\nimport Image from 'components/image';\r\nimport stringHelper from 'js/string-helper';\r\nimport cn from 'classnames';\r\n\r\nconst HowToBuyBlock = ({ specimenName, image, howToBuyLogo, lang }) => (\r\n  <div className=\"how-to-buy-block\">\r\n    <div className=\"how-to-buy-block__container\">\r\n      <div className=\"how-to-buy-block__image-container\">\r\n        <div\r\n          className={cn('how-to-buy-block__image-holder', {\r\n            'how-to-buy-block__image-holder_no-image': !image,\r\n          })}\r\n        >\r\n          {image && (\r\n            <Image {...image} className=\"image_size_how-to-buy-block\" />\r\n          )}\r\n        </div>\r\n        {howToBuyLogo && (\r\n          <Logo\r\n            {...howToBuyLogo}\r\n            className=\"how-to-buy-block__logo\"\r\n            imageClass=\"image_size_how-to-buy-block-logo\"\r\n          />\r\n        )}\r\n      </div>\r\n      <div className=\"how-to-buy-block__content\">\r\n        <h2 className=\"how-to-buy-block__heading\">{lang.howToBuyHeading}</h2>\r\n        <p className=\"how-to-buy-block__text\">\r\n          {stringHelper.format(lang.howToBuyText, specimenName)}\r\n        </p>\r\n      </div>\r\n    </div>\r\n  </div>\r\n);\r\n\r\nHowToBuyBlock.propTypes = {\r\n  specimenName: PropTypes.string,\r\n  image: PropTypes.exact(Image.propTypes),\r\n  howToBuyLogo: PropTypes.exact(Logo.propTypes),\r\n  lang: PropTypes.shape({\r\n    howToBuyText: PropTypes.string.isRequired,\r\n    howToBuyHeading: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nexport default HowToBuyBlock;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport PageHeading from 'components/page-heading';\r\nimport PoorText from 'components/poor-text';\r\nimport ParallaxHeroBackground from 'components/parallax-hero-background';\r\nimport Link from 'components/link';\r\nimport LinkButton, {\r\n  sizes as linkButtonSizes,\r\n  arrowDirections as linkButtonArrowDirections,\r\n} from 'components/link-button';\r\nimport useAnimationStepSwitcher, {\r\n  ANIMATION_STEPS,\r\n} from 'hooks/use-animation-step-switcher';\r\nimport cn from 'classnames';\r\n\r\nconst HowToPageHero = ({ lang, heading, introHtml, allGuidesLink }) => {\r\n  const animationCurrentStep = useAnimationStepSwitcher(\r\n    ANIMATION_STEPS.oneLayerHero\r\n  );\r\n\r\n  return (\r\n    <div className=\"how-to-page-hero\">\r\n      <ParallaxHeroBackground\r\n        backgroundColor=\"#FFAE9C\"\r\n        className={cn('how-to-page-hero__background', {\r\n          'how-to-page-hero__background_visible': animationCurrentStep > 0,\r\n        })}\r\n      />\r\n      <div\r\n        className={cn('how-to-page-hero__container', {\r\n          'how-to-page-hero__container_visible': animationCurrentStep > 1,\r\n          'how-to-page-hero__container_tall': animationCurrentStep > 2,\r\n        })}\r\n      >\r\n        <div className=\"how-to-page-hero__content\">\r\n          {allGuidesLink && (\r\n            <LinkButton\r\n              className=\"how-to-page-hero__all-guides-link\"\r\n              size={linkButtonSizes.small}\r\n              arrowDirection={linkButtonArrowDirections.left}\r\n              {...allGuidesLink}\r\n            />\r\n          )}\r\n          <strong className=\"how-to-page-hero__label\">{lang.label}</strong>\r\n          {heading && (\r\n            <PageHeading text={heading} className=\"how-to-page-hero__heading\" />\r\n          )}\r\n          {introHtml && (\r\n            <PoorText\r\n              text={introHtml}\r\n              className=\"poor-text_in_how-to-page-hero\"\r\n            />\r\n          )}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nHowToPageHero.propTypes = {\r\n  lang: PropTypes.shape({\r\n    label: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n  heading: PropTypes.string,\r\n  introHtml: PropTypes.string,\r\n  allGuidesLink: PropTypes.exact(Link.propTypes),\r\n};\r\n\r\nexport default HowToPageHero;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport PoorText from 'components/poor-text';\r\nimport Image from 'components/image';\r\n\r\nconst HowToStepBlock = ({ stepLabel, heading, textHtml, image }) => (\r\n  <div className=\"how-to-step-block\">\r\n    <div className=\"how-to-step-block__image-container\">\r\n      <Image {...image} className=\"image_size_how-to-step-block\" />\r\n    </div>\r\n    <div className=\"how-to-step-block__text-container\">\r\n      <div className=\"how-to-step-block__number\">{stepLabel}</div>\r\n      <strong className=\"how-to-step-block__heading\">{heading}</strong>\r\n      <PoorText text={textHtml} className=\"how-to-step-block__description\" />\r\n    </div>\r\n  </div>\r\n);\r\n\r\nHowToStepBlock.propTypes = {\r\n  stepLabel: PropTypes.string,\r\n  heading: PropTypes.string,\r\n  textHtml: PropTypes.string,\r\n  image: PropTypes.exact(Image.propTypes),\r\n};\r\n\r\nexport default HowToStepBlock;\r\n","import React from 'react';\r\nimport Icon from 'components/icon';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\n\r\nexport const sizes = {\r\n  normal: 'normal',\r\n  small: 'small',\r\n};\r\n\r\nconst IconLabel = ({\r\n  className,\r\n  icon,\r\n  size = sizes.normal,\r\n  text,\r\n  iconAriaLabel,\r\n  tabIndex,\r\n}) => {\r\n  return (\r\n    <div\r\n      className={cn('icon-label', className, {\r\n        'icon-label_small': size === sizes.small,\r\n      })}\r\n      tabIndex={tabIndex}\r\n    >\r\n      <Icon name={icon} className=\"icon-label__icon\" />\r\n      {iconAriaLabel && (\r\n        <span className=\"icon-label__text icon-label__text_hidden\">\r\n          {iconAriaLabel}\r\n        </span>\r\n      )}\r\n      <span className=\"icon-label__text\">{text}</span>\r\n    </div>\r\n  );\r\n};\r\n\r\nIconLabel.viewModelMeta = 'ignore';\r\n\r\nIconLabel.propTypes = {\r\n  className: PropTypes.string,\r\n  iconAriaLabel: PropTypes.string,\r\n  tabIndex: PropTypes.number,\r\n  icon: PropTypes.string,\r\n  size: PropTypes.oneOf(Object.values(sizes)),\r\n  text: PropTypes.string,\r\n};\r\n\r\nexport default IconLabel;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Image from 'components/image';\r\nimport cn from 'classnames';\r\n\r\nconst positions = {\r\n  right: 'right',\r\n  left: 'left',\r\n  center: 'center',\r\n};\r\n\r\nconst ImageBlock = ({ image, caption, position }) => {\r\n  return image ? (\r\n    <div\r\n      className={cn('image-block', {\r\n        [`image-block_position_${position}`]: position,\r\n      })}\r\n    >\r\n      <figure className=\"image-block__container\">\r\n        <Image\r\n          {...image}\r\n          className={cn('image-block__image', {\r\n            [`image_size_image-block-${position}`]: position,\r\n          })}\r\n        />\r\n        {caption && (\r\n          <figcaption className=\"image-block__caption\">{caption}</figcaption>\r\n        )}\r\n      </figure>\r\n    </div>\r\n  ) : null;\r\n};\r\n\r\nImageBlock.propTypes = {\r\n  image: PropTypes.exact(Image.propTypes).isRequired,\r\n  caption: PropTypes.string,\r\n  position: PropTypes.oneOf(Object.values(positions)).isRequired,\r\n};\r\n\r\nexport default ImageBlock;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Image from 'components/image';\r\nimport cn from 'classnames';\r\n\r\nconst ImageCollageBlock = ({\r\n  leftTopImage,\r\n  leftBottomImage,\r\n  rightTopImage,\r\n  rightBottomImage,\r\n}) => {\r\n  return (\r\n    <div className=\"image-collage-block\">\r\n      <div className=\"image-collage-block__container\">\r\n        <div className=\"image-collage-block__col image-collage-block__col_left\">\r\n          {leftTopImage && (\r\n            <Image\r\n              {...leftTopImage}\r\n              className=\"image-collage-block__image image_size_collage-left-top\"\r\n            />\r\n          )}\r\n          {leftBottomImage && (\r\n            <Image\r\n              {...leftBottomImage}\r\n              className=\"image-collage-block__image image_size_collage-left-bottom\"\r\n            />\r\n          )}\r\n        </div>\r\n        <div\r\n          className={cn(\r\n            'image-collage-block__col image-collage-block__col_right',\r\n            {\r\n              'image-collage-block__col_right_reversed':\r\n                !leftTopImage ||\r\n                !leftBottomImage ||\r\n                !rightTopImage ||\r\n                !rightBottomImage,\r\n            }\r\n          )}\r\n        >\r\n          {rightTopImage && (\r\n            <Image\r\n              {...rightTopImage}\r\n              className=\"image-collage-block__image image_size_collage-right-top\"\r\n            />\r\n          )}\r\n          {rightBottomImage && (\r\n            <Image\r\n              {...rightBottomImage}\r\n              className=\"image-collage-block__image image_size_collage-right-bottom\"\r\n            />\r\n          )}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nImageCollageBlock.propTypes = {\r\n  leftTopImage: PropTypes.exact(Image.propTypes),\r\n  leftBottomImage: PropTypes.exact(Image.propTypes),\r\n  rightTopImage: PropTypes.exact(Image.propTypes),\r\n  rightBottomImage: PropTypes.exact(Image.propTypes),\r\n};\r\n\r\nexport default ImageCollageBlock;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Image from 'components/image';\r\nimport RichText from 'components/rich-text';\r\nimport cn from 'classnames';\r\n\r\nconst imagePositions = {\r\n  right: 'right',\r\n  left: 'left',\r\n};\r\n\r\nconst ImageWithTextAndBgColorBlock = ({\r\n  heading,\r\n  textHtml,\r\n  backgroundColor,\r\n  image,\r\n  imagePosition,\r\n  imageCaption,\r\n}) => {\r\n  return (\r\n    <div\r\n      className={cn('block_no-gap image-with-text-and-bg-color-block', {\r\n        [`image-with-text-and-bg-color-block_image-position_${imagePosition}`]:\r\n          imagePosition,\r\n      })}\r\n      style={{ backgroundColor: backgroundColor }}\r\n    >\r\n      <div className=\"image-with-text-and-bg-color-block__container\">\r\n        <div className=\"image-with-text-and-bg-color-block__text-container\">\r\n          {heading && (\r\n            <h2 className=\"image-with-text-and-bg-color-block__heading\">\r\n              {heading}\r\n            </h2>\r\n          )}\r\n          <RichText\r\n            text={textHtml}\r\n            className=\"rich-text_in-image-with-text-and-bg-color-block\"\r\n          />\r\n        </div>\r\n        {image && (\r\n          <figure className=\"image-with-text-and-bg-color-block__image-container\">\r\n            <Image\r\n              {...image}\r\n              className=\"image_size_image-with-text-and-bg-color-block\"\r\n            />\r\n            {imageCaption && (\r\n              <figcaption className=\"image-with-text-and-bg-color-block__image-caption\">\r\n                {imageCaption}\r\n              </figcaption>\r\n            )}\r\n          </figure>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\nImageWithTextAndBgColorBlock.propTypes = {\r\n  heading: PropTypes.string,\r\n  textHtml: PropTypes.string,\r\n  backgroundColor: PropTypes.string,\r\n  image: PropTypes.exact(Image.propTypes),\r\n  imageCaption: PropTypes.string,\r\n  imagePosition: PropTypes.oneOf(Object.values(imagePositions)).isRequired,\r\n};\r\n\r\nexport default ImageWithTextAndBgColorBlock;\r\n","function pluralOrSingularText(amount, plural, singular) {\r\n  let text = null;\r\n\r\n  if (amount || amount === 0) {\r\n    if (amount <= 1 || amount === 0) {\r\n      singular ? (text = singular) : null;\r\n    } else {\r\n      plural ? (text = plural) : null;\r\n    }\r\n  }\r\n\r\n  return text;\r\n}\r\n\r\nexport default pluralOrSingularText;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport pluralOrSingularText from 'js/pluralOrSingularText.js';\r\n\r\nconst IngredientName = ({ amount, plural, singular }) => {\r\n  let name = pluralOrSingularText(amount, plural, singular);\r\n\r\n  return name && <span className=\"ingredients__section-item-name\">{name}</span>;\r\n};\r\n\r\nIngredientName.propTypes = {\r\n  amount: PropTypes.number,\r\n  plural: PropTypes.string,\r\n  singular: PropTypes.string,\r\n};\r\n\r\nIngredientName.viewModelMeta = 'ignore';\r\n\r\nexport default IngredientName;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport pluralOrSingularText from 'js/pluralOrSingularText.js';\r\n\r\nconst IngredientUnit = ({ amount, plural, singular }) => {\r\n  let unitText = pluralOrSingularText(amount, plural, singular);\r\n\r\n  return (\r\n    unitText && (\r\n      <span className=\"ingredients__section-item-unit\">{unitText}</span>\r\n    )\r\n  );\r\n};\r\n\r\nIngredientUnit.propTypes = {\r\n  amount: PropTypes.number,\r\n  plural: PropTypes.string,\r\n  singular: PropTypes.string,\r\n};\r\n\r\nIngredientUnit.viewModelMeta = 'ignore';\r\n\r\nexport default IngredientUnit;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst IngredientAmount = ({ number }) => {\r\n  return number && number !== 0 ? (\r\n    <span className=\"ingredients__section-item-amount\">{number}</span>\r\n  ) : null;\r\n};\r\n\r\nIngredientAmount.propTypes = {\r\n  number: PropTypes.number,\r\n};\r\n\r\nIngredientAmount.viewModelMeta = 'ignore';\r\n\r\nexport default IngredientAmount;\r\n","export default { aui: 'aui', iau: 'iau', iua: 'iua' };\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport IngredientName from './ingredient-name';\r\nimport IngredientUnit from './ingredient-unit';\r\nimport IngredientAmount from './ingredient-amount';\r\nimport printOrders from './print-orders';\r\n\r\nconst Ingredient = ({ amount, printOrder, unit, name }) => {\r\n  return (\r\n    <React.Fragment>\r\n      {printOrder && (\r\n        <span className=\"ingredients__section-item-content\">\r\n          {printOrder === printOrders.aui && (\r\n            <React.Fragment>\r\n              <IngredientAmount number={amount} />\r\n              {unit && <IngredientUnit {...unit} amount={amount} />}\r\n              {name && <IngredientName {...name} amount={amount} />}\r\n            </React.Fragment>\r\n          )}\r\n          {printOrder === printOrders.iau && (\r\n            <React.Fragment>\r\n              {name && <IngredientName {...name} amount={amount} />}\r\n              <IngredientAmount number={amount} />\r\n              {unit && <IngredientUnit {...unit} amount={amount} />}\r\n            </React.Fragment>\r\n          )}\r\n          {printOrder === printOrders.iua && (\r\n            <React.Fragment>\r\n              {name && <IngredientName {...name} amount={amount} />}\r\n              {unit && <IngredientUnit {...unit} amount={amount} />}\r\n              <IngredientAmount number={amount} />\r\n            </React.Fragment>\r\n          )}\r\n        </span>\r\n      )}\r\n    </React.Fragment>\r\n  );\r\n};\r\n\r\nIngredient.propTypes = {\r\n  printOrder: PropTypes.oneOf(Object.values(printOrders)),\r\n  amount: PropTypes.number,\r\n  unit: PropTypes.shape({\r\n    plural: PropTypes.string,\r\n    singular: PropTypes.string,\r\n  }),\r\n  name: PropTypes.shape({\r\n    plural: PropTypes.string,\r\n    singular: PropTypes.string,\r\n  }),\r\n};\r\n\r\nIngredient.viewModelMeta = 'ignore';\r\n\r\nexport default Ingredient;\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Ingredient from './ingredient';\r\nimport fullCopy from 'js/fullCopy.js';\r\nimport IconButton from 'components/icon-button';\r\n\r\nconst Ingredients = ({\r\n  lang = {\r\n    increaseNumberOfServingsAriaLabel: 'Høyere antall porsjoner',\r\n    decreaseNumberOfServingsAriaLabel: 'Lavere antall porsjoner',\r\n  },\r\n  sections,\r\n  servingsDefaultNumber,\r\n}) => {\r\n  const servingNumber = servingsDefaultNumber || 1;\r\n  const [currentSections, setCurrentSections] = useState([]);\r\n\r\n  const [currentServings, setCurrentServings] = useState(servingNumber);\r\n\r\n  const handleKeyDown = e => {\r\n    if (e.key === '-' || e.key === '.') {\r\n      e.preventDefault();\r\n    }\r\n  };\r\n\r\n  const handlePaste = e => {\r\n    e.preventDefault();\r\n    const pastedText = (e.clipboardData || window.clipboardData).getData(\r\n      'text'\r\n    );\r\n    const sanitizedText = pastedText.replace(/[-.]/g, '');\r\n    const updatedText =\r\n      e.target.value.slice(0, e.target.selectionStart) +\r\n      sanitizedText +\r\n      e.target.value.slice(e.target.selectionEnd);\r\n    setCurrentServings(parseInt(updatedText));\r\n  };\r\n\r\n  const handleServingsInputChange = v => {\r\n    setCurrentServings(parseInt(v));\r\n  };\r\n\r\n  const increaseServings = () => {\r\n    setCurrentServings(currentServings + 1);\r\n  };\r\n\r\n  const decreaseServings = () => {\r\n    setCurrentServings(\r\n      currentServings > 1 ? currentServings - 1 : currentServings\r\n    );\r\n  };\r\n\r\n  const calcAmount = (amount, ratio) => {\r\n    const str = (amount * ratio).toFixed(2);\r\n    const endingZeroes = /(\\.0*$)/;\r\n    const tmpSrt = str.replace(endingZeroes, '');\r\n    return parseFloat(tmpSrt);\r\n  };\r\n\r\n  const updateSections = () => {\r\n    const newSections = fullCopy(sections);\r\n    const servings = currentServings > 1 ? currentServings : 1;\r\n    const ratio = servings / servingNumber;\r\n\r\n    newSections.forEach(section => {\r\n      section.ingredients.forEach(ingredient => {\r\n        ingredient.amount = calcAmount(ingredient.amount, ratio);\r\n      });\r\n    });\r\n\r\n    setCurrentSections(newSections);\r\n  };\r\n\r\n  React.useEffect(() => {\r\n    updateSections();\r\n  }, []);\r\n\r\n  React.useEffect(() => {\r\n    updateSections();\r\n  }, [currentServings]);\r\n\r\n  return (\r\n    <section className=\"ingredients\">\r\n      <div className=\"ingredients__servings\">\r\n        <div className=\"ingredients__servings-panel\">\r\n          <label\r\n            className=\"ingredients__servings-label\"\r\n            htmlFor=\"servingsCount\"\r\n          >\r\n            {lang.servingsLabel}\r\n          </label>\r\n          <input\r\n            className=\"ingredients__servings-count\"\r\n            id=\"servingsCount\"\r\n            type=\"number\"\r\n            min=\"1\"\r\n            value={isNaN(currentServings) ? '' : currentServings}\r\n            onChange={e => handleServingsInputChange(e.target.value)}\r\n            onKeyDown={handleKeyDown}\r\n            onPaste={handlePaste}\r\n          />\r\n          <div className=\"ingredients__servings-buttons\">\r\n            <IconButton\r\n              iconName=\"arrow-up\"\r\n              className=\"ingredients__servings-button ingredients__servings-button_plus\"\r\n              tabIndex=\"0\"\r\n              onClick={increaseServings}\r\n              ariaAttributes={{\r\n                'aria-label': lang.increaseNumberOfServingsAriaLabel,\r\n              }}\r\n            />\r\n            <IconButton\r\n              iconName=\"arrow-down\"\r\n              className=\"ingredients__servings-button ingredients__servings-button_minus\"\r\n              tabIndex=\"0\"\r\n              onClick={decreaseServings}\r\n              ariaAttributes={{\r\n                'aria-label': lang.decreaseNumberOfServingsAriaLabel,\r\n              }}\r\n            />\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <h2 className=\"ingredients__heading\">{lang.ingredientsHeading}</h2>\r\n      {currentSections && (\r\n        <div aria-live=\"polite\" aria-atomic=\"true\">\r\n          {currentSections.map((section, sectionIndex) => (\r\n            <div className=\"ingredients__section\" key={section + sectionIndex}>\r\n              {section.heading && (\r\n                <h3 className=\"ingredients__section-heading\">\r\n                  {section.heading}\r\n                </h3>\r\n              )}\r\n              {section.ingredients &&\r\n                section.ingredients.map((ingredient, ingredientIndex) => {\r\n                  const showIngredient =\r\n                    ingredient.amount !== null &&\r\n                    ingredient.amount !== undefined;\r\n                  return showIngredient ? (\r\n                    <div\r\n                      itemProp=\"ingredients\"\r\n                      key={'ingredient' + ingredientIndex}\r\n                      className=\"ingredients__section-item\"\r\n                    >\r\n                      <Ingredient {...ingredient} />\r\n                    </div>\r\n                  ) : null;\r\n                })}\r\n            </div>\r\n          ))}\r\n        </div>\r\n      )}\r\n    </section>\r\n  );\r\n};\r\n\r\nIngredients.propTypes = {\r\n  lang: PropTypes.shape({\r\n    ingredientsHeading: PropTypes.string.isRequired,\r\n    servingsLabel: PropTypes.string.isRequired,\r\n    increaseNumberOfServingsAriaLabel: PropTypes.string.isRequired,\r\n    decreaseNumberOfServingsAriaLabel: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n  servingsDefaultNumber: PropTypes.number,\r\n  sections: PropTypes.arrayOf(\r\n    PropTypes.shape({\r\n      heading: PropTypes.string,\r\n      ingredients: PropTypes.arrayOf(\r\n        PropTypes.shape({\r\n          printOrder: PropTypes.oneOf(['aui', 'iau', 'iua']).isRequired, //Should be the same as print-orders.js object\r\n          amount: PropTypes.number.isRequired,\r\n          unit: PropTypes.shape({\r\n            plural: PropTypes.string,\r\n            singular: PropTypes.string,\r\n          }),\r\n          name: PropTypes.shape({\r\n            plural: PropTypes.string,\r\n            singular: PropTypes.string,\r\n          }),\r\n        })\r\n      ),\r\n    })\r\n  ),\r\n};\r\n\r\nIngredients.viewModelMeta = {\r\n  sections: [{ ingredients: [{ amount: 'double' }] }],\r\n};\r\n\r\nexport default Ingredients;\r\n","function fullcopy(data) {\r\n  let copy = JSON.parse(JSON.stringify(data));\r\n\r\n  return copy;\r\n}\r\n\r\nexport default fullcopy;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ANIMATION_PERCENTAGE } from '../../constants/parallax';\r\nimport cn from 'classnames';\r\n\r\nconst ParallaxText = ({\r\n  text,\r\n  textBackgroundColor = '#00004F',\r\n  textColor = '#FFFFFF',\r\n  percentage,\r\n  textAnimationPercentage = ANIMATION_PERCENTAGE.text,\r\n  className,\r\n}) => {\r\n  return text ? (\r\n    <div\r\n      className={cn('parallax-text', className)}\r\n      style={{\r\n        color: textColor,\r\n        transition:\r\n          percentage <= textAnimationPercentage\r\n            ? 'left 500ms ease-out 350ms'\r\n            : 'left 500ms ease-in 0ms',\r\n        position: 'relative',\r\n        bottom: 0,\r\n        left: percentage > textAnimationPercentage ? '0%' : '-100%',\r\n      }}\r\n    >\r\n      <span\r\n        className=\"parallax-text__container\"\r\n        style={{\r\n          transition:\r\n            percentage > textAnimationPercentage\r\n              ? 'background-position 350ms ease-in 700ms'\r\n              : 'background-position 350ms ease-out 0s',\r\n          backgroundSize: '100% 200%',\r\n          backgroundPosition:\r\n            percentage > textAnimationPercentage && '100% 100%',\r\n          backgroundImage: `linear-gradient(${textColor}, ${textColor} 50%, ${textBackgroundColor} 50%, ${textBackgroundColor})`,\r\n        }}\r\n      >\r\n        {text}\r\n      </span>\r\n    </div>\r\n  ) : null;\r\n};\r\n\r\nParallaxText.viewModelMeta = 'ignore';\r\n\r\nParallaxText.propTypes = {\r\n  text: PropTypes.string,\r\n  textBackgroundColor: PropTypes.string,\r\n  textColor: PropTypes.string,\r\n  percentage: PropTypes.number.isRequired,\r\n  textAnimationPercentage: PropTypes.number,\r\n  className: PropTypes.string,\r\n};\r\n\r\nexport default ParallaxText;\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Image from 'components/image';\r\nimport Link from 'components/link';\r\nimport LinkButton, {\r\n  sizes as linkButtonSizes,\r\n  arrowDirections as linkButtonArrowDirections,\r\n} from 'components/link-button';\r\nimport PageHeading from 'components/page-heading';\r\nimport PoorText from 'components/poor-text';\r\nimport ParallaxText from 'components/parallax-text';\r\nimport imageResizer from 'js/image-resizer';\r\nimport useBreakpoints from 'hooks/use-breakpoints';\r\nimport useAnimationStepSwitcher, {\r\n  ANIMATION_STEPS,\r\n} from 'hooks/use-animation-step-switcher';\r\nimport { Parallax } from 'react-parallax';\r\nimport { getNumericCssPropertyValue } from 'js/stylesheet-utils';\r\nimport cn from 'classnames';\r\n\r\nconst SCROLL_ANIMATION_PERCENTAGE = 1.1;\r\n\r\nconst LongArticlePageHero = ({\r\n  heading,\r\n  introHtml,\r\n  image,\r\n  allStoriesLink,\r\n  backgroundColor,\r\n}) => {\r\n  const animationCurrentStep = useAnimationStepSwitcher(\r\n    ANIMATION_STEPS.expandingLayerHero\r\n  );\r\n  const { isMobile, isTablet, isDesktopExtraLarge, isDesktopLargerThanIpad } =\r\n    useBreakpoints(true);\r\n  const [imageHeight, setImageHeight] = useState(0);\r\n  const [imageWidth, setImageWidth] = useState(0);\r\n  const heroRef = useRef();\r\n\r\n  useEffect(() => {\r\n    const pageHeroMaxHeight = getNumericCssPropertyValue(\r\n      '--page-hero-expanding-layer-max-height'\r\n    );\r\n\r\n    setImageHeight(isDesktopLargerThanIpad ? pageHeroMaxHeight : 600);\r\n  }, [isDesktopLargerThanIpad]);\r\n\r\n  useEffect(() => {\r\n    setImageWidth(\r\n      isDesktopExtraLarge\r\n        ? 1800\r\n        : imageResizer.calcImageWidth(window.innerWidth, 100)\r\n    );\r\n  }, [isDesktopExtraLarge]);\r\n\r\n  return (\r\n    <Parallax\r\n      renderLayer={percentage => {\r\n        return (\r\n          <div\r\n            className={cn('long-article-page-hero', {\r\n              'long-article-page-hero_tight': animationCurrentStep <= 2,\r\n              'long-article-page-hero_focused':\r\n                animationCurrentStep > 2 &&\r\n                percentage > SCROLL_ANIMATION_PERCENTAGE,\r\n            })}\r\n            ref={heroRef}\r\n          >\r\n            {image && (\r\n              <div\r\n                className={cn('long-article-page-hero__image-holder', {\r\n                  'long-article-page-hero__image-holder_visible':\r\n                    animationCurrentStep > 0,\r\n                  'animated-content animated-content_delayed-appearance':\r\n                    animationCurrentStep > 0 && (isMobile || isTablet),\r\n                })}\r\n              >\r\n                <div className=\"long-article-page-hero__image-centered-overlay\">\r\n                  <Image\r\n                    {...image}\r\n                    fluid={true}\r\n                    width={imageWidth}\r\n                    height={imageHeight}\r\n                    className=\"long-article-page-hero__image image_size_long-article-page-hero\"\r\n                  />\r\n                </div>\r\n              </div>\r\n            )}\r\n            <div className=\"long-article-page-hero__container\">\r\n              <div className=\"long-article-page-hero__content-wrapper\">\r\n                <div\r\n                  className={cn('long-article-page-hero__content', {\r\n                    'long-article-page-hero__content_visible':\r\n                      animationCurrentStep > 0,\r\n                    'long-article-page-hero__content_tall':\r\n                      animationCurrentStep > 2,\r\n\r\n                    'long-article-page-hero__content_hidden-by-scroll':\r\n                      percentage > SCROLL_ANIMATION_PERCENTAGE,\r\n                  })}\r\n                >\r\n                  <div\r\n                    role=\"presentation\"\r\n                    style={{\r\n                      backgroundColor: backgroundColor,\r\n                    }}\r\n                    className={cn('long-article-page-hero__background', {\r\n                      'long-article-page-hero__background_visible':\r\n                        animationCurrentStep > 0,\r\n                    })}\r\n                  ></div>\r\n                  <div\r\n                    className={cn(\r\n                      'long-article-page-hero__content-fade-section',\r\n                      {\r\n                        'long-article-page-hero__content-fade-section_visible':\r\n                          animationCurrentStep > 1,\r\n                      }\r\n                    )}\r\n                  >\r\n                    {allStoriesLink && (\r\n                      <LinkButton\r\n                        className=\"long-article-page-hero__all-stories-link\"\r\n                        size={linkButtonSizes.small}\r\n                        arrowDirection={linkButtonArrowDirections.left}\r\n                        {...allStoriesLink}\r\n                      />\r\n                    )}\r\n                    {heading && (\r\n                      <PageHeading\r\n                        text={heading}\r\n                        className=\"long-article-page-hero__heading\"\r\n                      />\r\n                    )}\r\n                    {introHtml && (\r\n                      <PoorText\r\n                        text={introHtml}\r\n                        className=\"long-article-page-hero__intro poor-text_in-long-article-page-hero\"\r\n                      />\r\n                    )}\r\n                  </div>\r\n                </div>\r\n              </div>\r\n              <div\r\n                className={cn(\r\n                  'long-article-page-hero__text-animation-container',\r\n                  {\r\n                    'long-article-page-hero__text-animation-container_visible':\r\n                      percentage > SCROLL_ANIMATION_PERCENTAGE,\r\n                  }\r\n                )}\r\n              >\r\n                <ParallaxText\r\n                  text={heading}\r\n                  percentage={percentage}\r\n                  textAnimationPercentage={1}\r\n                  textColor={backgroundColor}\r\n                  className=\"long-article-page-hero__animated-heading\"\r\n                />\r\n              </div>\r\n            </div>\r\n          </div>\r\n        );\r\n      }}\r\n    />\r\n  );\r\n};\r\n\r\nLongArticlePageHero.propTypes = {\r\n  heading: PropTypes.string,\r\n  introHtml: PropTypes.string,\r\n  image: PropTypes.exact(Image.propTypes),\r\n  allStoriesLink: PropTypes.exact(Link.propTypes),\r\n  backgroundColor: PropTypes.string,\r\n};\r\n\r\nexport default LongArticlePageHero;\r\n","import PropTypes from 'prop-types';\r\n\r\nconst FilterItem = {};\r\n\r\nFilterItem.propTypes = {\r\n  text: PropTypes.string.isRequired,\r\n  value: PropTypes.string.isRequired,\r\n  selected: PropTypes.bool,\r\n};\r\n\r\nexport default FilterItem;\r\n","import PropTypes from 'prop-types';\r\nimport FilterItem from '../filter-item/filter-item';\r\n\r\nconst Filter = {};\r\n\r\nFilter.propTypes = {\r\n  heading: PropTypes.string,\r\n  allItemsLabel: PropTypes.string,\r\n  items: PropTypes.arrayOf(PropTypes.exact(FilterItem.propTypes)),\r\n  name: PropTypes.string,\r\n};\r\n\r\nexport default Filter;\r\n","import PropTypes from 'prop-types';\r\n\r\nconst PagerLang = {};\r\n\r\nPagerLang.propTypes = {\r\n  nextLabel: PropTypes.string.isRequired,\r\n  prevLabel: PropTypes.string.isRequired,\r\n  pageLabel: PropTypes.string.isRequired,\r\n  jumpBackwardAriaLabel: PropTypes.string.isRequired,\r\n  jumpForwardAriaLabel: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default PagerLang;\r\n","import PropTypes from 'prop-types';\r\n\r\nconst RateRecipeResult = {};\r\n\r\nRateRecipeResult.propTypes = {\r\n  rating: PropTypes.string,\r\n  ratingValue: PropTypes.int,\r\n  confirmation: PropTypes.string,\r\n};\r\n\r\nexport default RateRecipeResult;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\nimport IconLabel from 'components/icon-label';\r\n\r\nexport const sizes = {\r\n  normal: 'normal',\r\n  small: 'small',\r\n};\r\n\r\nconst RecipeDetails = ({\r\n  className,\r\n  rating,\r\n  size,\r\n  cookingTime,\r\n  difficultyLevel,\r\n  cookingTimeIconAriaLabel,\r\n  difficultyLevelIconAriaLabel,\r\n  ratingIconAriaLabel,\r\n  useFocusableDetails = false,\r\n}) => {\r\n  const commonIconLabelProps = {\r\n    className: 'recipe-details__item',\r\n    size: size,\r\n    ...(useFocusableDetails && { tabIndex: 0 }),\r\n  };\r\n\r\n  return (\r\n    <div\r\n      className={cn('recipe-details', className, {\r\n        'recipe-details_small': size === sizes.small,\r\n      })}\r\n    >\r\n      {cookingTime && (\r\n        <IconLabel\r\n          icon=\"cooking-time\"\r\n          iconAriaLabel={cookingTimeIconAriaLabel}\r\n          text={cookingTime}\r\n          {...commonIconLabelProps}\r\n        />\r\n      )}\r\n      {difficultyLevel && (\r\n        <IconLabel\r\n          icon=\"difficulty-level\"\r\n          iconAriaLabel={difficultyLevelIconAriaLabel}\r\n          text={difficultyLevel}\r\n          {...commonIconLabelProps}\r\n        />\r\n      )}\r\n      {rating && (\r\n        <IconLabel\r\n          icon=\"rating\"\r\n          iconAriaLabel={ratingIconAriaLabel}\r\n          text={rating}\r\n          {...commonIconLabelProps}\r\n        />\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nRecipeDetails.viewModelMeta = 'ignore';\r\n\r\nRecipeDetails.propTypes = {\r\n  className: PropTypes.string,\r\n  size: PropTypes.oneOf(Object.values(sizes)),\r\n  rating: PropTypes.string,\r\n  cookingTime: PropTypes.string,\r\n  difficultyLevel: PropTypes.string,\r\n  cookingTimeIconAriaLabel: PropTypes.string,\r\n  difficultyLevelIconAriaLabel: PropTypes.string,\r\n  ratingIconAriaLabel: PropTypes.string,\r\n  useFocusableDetails: PropTypes.bool,\r\n};\r\n\r\nexport default RecipeDetails;\r\n","export default {\r\n  horizontal: 'horizontal',\r\n  vertical: 'vertical',\r\n};\r\n","import React, { forwardRef, useRef, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\nimport Image from 'components/image';\r\nimport RecipeDetails, {\r\n  sizes as recipeDetailsSizes,\r\n} from 'components/recipe-details';\r\nimport orientations from './recipe-teaser-orientations';\r\nimport idHelper from 'js/id-helper';\r\n\r\nconst RecipeTeaser = forwardRef(\r\n  (\r\n    {\r\n      heading,\r\n      url,\r\n      image,\r\n      className,\r\n      rating,\r\n      cookingTime,\r\n      difficultyLevel,\r\n      tabindex,\r\n      ariaRoledescription,\r\n      orientation = orientations.vertical,\r\n      headingTagLevel = 3,\r\n      cookingTimeIconAriaLabel,\r\n      difficultyLevelIconAriaLabel,\r\n      ratingIconAriaLabel,\r\n    },\r\n    ref\r\n  ) => {\r\n    const imageHolderRef = useRef(null);\r\n    const isHorizontalOrientation = orientation === orientations.horizontal;\r\n    const HeadingTag = `h${headingTagLevel}`;\r\n\r\n    const uniqueRecipeTeaserHeadingId = useMemo(\r\n      () => idHelper.generateUniqueId('recipe-teaser-heading'),\r\n      []\r\n    );\r\n\r\n    return (\r\n      <a\r\n        ref={ref}\r\n        href={url}\r\n        className={cn('recipe-teaser', {\r\n          [className]: className,\r\n          'recipe-teaser_horizontal': isHorizontalOrientation,\r\n        })}\r\n        tabIndex={tabindex ? tabindex : null}\r\n        aria-labelledby={uniqueRecipeTeaserHeadingId}\r\n        aria-roledescription={ariaRoledescription ? ariaRoledescription : null}\r\n      >\r\n        <div\r\n          className={cn('recipe-teaser__image-holder', {\r\n            'recipe-teaser__image-holder_no-image': !image,\r\n          })}\r\n          ref={imageHolderRef}\r\n        >\r\n          {image && (\r\n            <Image\r\n              {...image}\r\n              fluid={isHorizontalOrientation}\r\n              className=\"recipe-teaser__image image_size_recipe-teaser\"\r\n            />\r\n          )}\r\n        </div>\r\n\r\n        <div className=\"recipe-teaser__content\">\r\n          {heading && (\r\n            <HeadingTag\r\n              className=\"recipe-teaser__heading\"\r\n              id={uniqueRecipeTeaserHeadingId}\r\n            >\r\n              {heading}\r\n            </HeadingTag>\r\n          )}\r\n          <RecipeDetails\r\n            size={recipeDetailsSizes.small}\r\n            className=\"recipe-teaser__details\"\r\n            cookingTime={cookingTime}\r\n            difficultyLevel={difficultyLevel}\r\n            rating={rating}\r\n            cookingTimeIconAriaLabel={cookingTimeIconAriaLabel}\r\n            difficultyLevelIconAriaLabel={difficultyLevelIconAriaLabel}\r\n            ratingIconAriaLabel={ratingIconAriaLabel}\r\n          />\r\n        </div>\r\n      </a>\r\n    );\r\n  }\r\n);\r\n\r\nRecipeTeaser.propTypes = {\r\n  id: PropTypes.string,\r\n  className: PropTypes.string,\r\n  heading: PropTypes.string,\r\n  image: PropTypes.exact(Image.propTypes),\r\n  url: PropTypes.string,\r\n  rating: PropTypes.string,\r\n  cookingTime: PropTypes.string,\r\n  difficultyLevel: PropTypes.string,\r\n  tabindex: PropTypes.number,\r\n  ariaRoledescription: PropTypes.string,\r\n  orientation: PropTypes.oneOf(Object.values(orientations)),\r\n  headingTagLevel: PropTypes.number,\r\n  cookingTimeIconAriaLabel: PropTypes.string,\r\n  difficultyLevelIconAriaLabel: PropTypes.string,\r\n  ratingIconAriaLabel: PropTypes.string,\r\n};\r\n\r\nRecipeTeaser.viewModelMeta = {\r\n  className: 'ignore',\r\n  tabindex: 'ignore',\r\n  ariaRoledescription: 'ignore',\r\n  orientation: 'ignore',\r\n  headingTagLevel: 'ignore',\r\n};\r\n\r\nexport default RecipeTeaser;\r\n","import PropTypes from 'prop-types';\r\nimport RecipeTeaser from 'components/recipe-teaser/recipe-teaser';\r\nimport Filter from 'components/models/filter/filter';\r\n\r\nconst RecipeOverviewResults = {};\r\n\r\nRecipeOverviewResults.propTypes = {\r\n  items: PropTypes.arrayOf(RecipeTeaser.propTypes),\r\n  filters: PropTypes.arrayOf(PropTypes.exact(Filter.propTypes)),\r\n  totalCount: PropTypes.number.isRequired,\r\n  pager: PropTypes.shape({\r\n    page: PropTypes.number,\r\n    totalPages: PropTypes.number,\r\n  }),\r\n};\r\n\r\nexport default RecipeOverviewResults;\r\n","import PropTypes from 'prop-types';\r\n\r\nconst ReactComponent = {};\r\n\r\n// Empty propTypes needed in order for ReactComponent.cs to be generated.\r\nReactComponent.propTypes = {\r\n  componentName: PropTypes.string.isRequired,\r\n};\r\n\r\nReactComponent.viewModelMeta = 'ignore'; // Not generated automatically, defained on BE instead.\r\n\r\n// 'ReactComponent' is used as the base class in all generated .cs-files (configurerd in CSharpWebpackPlugin options in webpack.config.js)\r\nexport default ReactComponent;\r\n","/* eslint-disable react/prop-types */\r\n// TODO: remove view-models/no-unused-meta and eslint-disable react/prop-types rule when this issue https://github.com/asbjornh/view-models/issues/18 is resolved\r\nimport React from 'react';\r\nimport ButtonBase from 'components/models/button-base';\r\nimport Icon from 'components/icon';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\nimport ariaAttributesModel from 'components/models/aria-attributes/aria-attributes';\r\n\r\nexport const themes = {\r\n  dark: 'dark',\r\n  light: 'light',\r\n};\r\n\r\nexport const iconPositions = {\r\n  right: 'right',\r\n  left: 'left',\r\n};\r\n\r\nconst ToggleButton = ({\r\n  className,\r\n  text,\r\n  tabindex,\r\n  isActive,\r\n  theme,\r\n  onClick,\r\n  iconName,\r\n  activeIconName,\r\n  iconPosition = iconPositions.right,\r\n  ariaAttributes = {},\r\n}) => {\r\n  const leftIconPosition = iconPosition === iconPositions.left;\r\n  return (\r\n    <button\r\n      className={cn('toggle-button', {\r\n        [className]: className,\r\n        'toggle-button_active': isActive,\r\n        'toggle-button_theme-light': theme === themes.light,\r\n        'toggle-button_icon-position-left': leftIconPosition,\r\n      })}\r\n      tabIndex={tabindex}\r\n      onClick={onClick}\r\n      {...ariaAttributes}\r\n    >\r\n      {leftIconPosition && (\r\n        <Icon\r\n          name={isActive ? activeIconName : iconName}\r\n          className=\"toggle-button__icon toggle-button__icon_prefix\"\r\n        />\r\n      )}\r\n      <span\r\n        className={cn('toggle-button__text', {\r\n          'toggle-button__text_theme-light': theme === themes.light,\r\n        })}\r\n      >\r\n        {text}\r\n      </span>\r\n      {!leftIconPosition && iconName && (\r\n        <Icon\r\n          name={isActive ? activeIconName : iconName}\r\n          className=\"toggle-button__icon toggle-button__icon_suffix\"\r\n        />\r\n      )}\r\n    </button>\r\n  );\r\n};\r\n\r\nToggleButton.viewModelMeta = 'ignore';\r\n\r\nToggleButton.propTypes = Object.assign({}, ButtonBase.propTypes, {\r\n  className: PropTypes.string,\r\n  iconName: PropTypes.string,\r\n  theme: PropTypes.oneOf(Object.values(themes)),\r\n  iconPosition: PropTypes.oneOf(Object.values(iconPositions)),\r\n  isActive: PropTypes.bool,\r\n  ariaAttributes: PropTypes.exact(ariaAttributesModel),\r\n});\r\n\r\nexport default ToggleButton;\r\n","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport FilterItem from 'components/models/filter-item/filter-item';\r\nimport ToggleButton from 'components/toggle-button/toggle-button';\r\nimport cn from 'classnames';\r\n\r\nconst ToggleFilter = ({\r\n  name,\r\n  items,\r\n  isDisabled,\r\n  // eslint-disable-next-line no-unused-vars\r\n  onChange = ({ name, items }) => {},\r\n}) => {\r\n  const [filterItems, setFilterItems] = useState(items);\r\n\r\n  useEffect(() => {\r\n    setFilterItems(items);\r\n  }, [items]);\r\n\r\n  const onFilterClick = clickedItem => {\r\n    const updatedItems = filterItems.map(item => ({\r\n      ...item,\r\n      selected:\r\n        item.value === clickedItem.value ? !item.selected : item.selected,\r\n    }));\r\n\r\n    setFilterItems(updatedItems);\r\n    onChange({ name: name, items: updatedItems });\r\n  };\r\n\r\n  return filterItems && filterItems.length > 0 ? (\r\n    <ul\r\n      className={cn('toggle-filter', {\r\n        'toggle-filter_disabled': isDisabled,\r\n      })}\r\n    >\r\n      {filterItems.map(item => (\r\n        <li\r\n          key={item.value}\r\n          className={cn('toggle-filter__item', {\r\n            'toggle-filter__item_selected': item.selected,\r\n          })}\r\n        >\r\n          <ToggleButton\r\n            isActive={item.selected}\r\n            text={item.text}\r\n            onClick={() => onFilterClick(item)}\r\n          />\r\n        </li>\r\n      ))}\r\n    </ul>\r\n  ) : null;\r\n};\r\n\r\nToggleFilter.propTypes = {\r\n  name: PropTypes.string,\r\n  items: PropTypes.arrayOf(PropTypes.exact(FilterItem.propTypes)),\r\n  onChange: PropTypes.func,\r\n  isDisabled: PropTypes.bool,\r\n};\r\n\r\nToggleFilter.viewModelMeta = {\r\n  onChange: 'ignore',\r\n  isDisabled: 'ignore',\r\n};\r\n\r\nexport default ToggleFilter;\r\n","import PropTypes from 'prop-types';\r\nimport ReactComponent from 'components/react-component/react-component';\r\nimport ToggleFilter from 'components/toggle-filter/toggle-filter';\r\n\r\nconst SearchResults = {};\r\n\r\nSearchResults.propTypes = {\r\n  pageTypeFilter: PropTypes.exact(ToggleFilter.propTypes),\r\n  totalCount: PropTypes.number.isRequired,\r\n  hits: PropTypes.arrayOf(PropTypes.shape(ReactComponent.propTypes)),\r\n  pager: PropTypes.shape({\r\n    page: PropTypes.number,\r\n    totalPages: PropTypes.number,\r\n  }),\r\n};\r\n\r\nexport default SearchResults;\r\n","export default {\r\n  medium: 'medium',\r\n  large: 'large',\r\n  small: 'small',\r\n};\r\n","export default {\r\n  horizontal: 'horizontal',\r\n  vertical: 'vertical',\r\n};\r\n","import React from 'react';\r\nimport Image from 'components/image';\r\nimport Icon from 'components/icon';\r\nimport PropTypes from 'prop-types';\r\nimport storyTeaserSizes from './story-teaser-sizes';\r\nimport storyTeaserOrientations from './story-teaser-orientations';\r\nimport cn from 'classnames';\r\n\r\nconst StoryTeaser = ({\r\n  url,\r\n  heading,\r\n  image,\r\n  backgroundColor,\r\n  categoryLabel,\r\n  className,\r\n  size = storyTeaserSizes.large,\r\n  orientation = storyTeaserOrientations.vertical,\r\n  headingTagLevel = 2,\r\n}) => {\r\n  const isHorizontalOrientation =\r\n    orientation === storyTeaserOrientations.horizontal;\r\n  const HeadingTag = `h${headingTagLevel}`;\r\n  return (\r\n    <a\r\n      className={cn(`story-teaser story-teaser_size_${size}`, {\r\n        [className]: className,\r\n        'story-teaser_horizontal': isHorizontalOrientation,\r\n      })}\r\n      href={url}\r\n    >\r\n      <div className=\"story-teaser__container\">\r\n        <div\r\n          className={cn('story-teaser__image-holder', {\r\n            'story-teaser__image-holder_no-image': !image,\r\n          })}\r\n        >\r\n          {image && (\r\n            <Image\r\n              {...image}\r\n              fluid={isHorizontalOrientation}\r\n              className={`story-teaser__image image_size_story-teaser-${size}`}\r\n            />\r\n          )}\r\n        </div>\r\n        <div\r\n          className=\"story-teaser__content\"\r\n          style={{ backgroundColor: backgroundColor }}\r\n        >\r\n          <div className=\"story-teaser__content-inner\">\r\n            {categoryLabel && (\r\n              <span className=\"story-teaser__category\">{categoryLabel}</span>\r\n            )}\r\n            {heading && (\r\n              <HeadingTag className=\"story-teaser__heading\">\r\n                <span className=\"story-teaser__heading-text\">{heading}</span>\r\n              </HeadingTag>\r\n            )}\r\n            <Icon name=\"arrow-right\" className=\"story-teaser__icon\" />\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </a>\r\n  );\r\n};\r\n\r\nStoryTeaser.propTypes = {\r\n  id: PropTypes.string,\r\n  url: PropTypes.string,\r\n  heading: PropTypes.string,\r\n  image: PropTypes.exact(Image.propTypes),\r\n  backgroundColor: PropTypes.string,\r\n  categoryLabel: PropTypes.string,\r\n  className: PropTypes.string,\r\n  size: PropTypes.oneOf(Object.values(storyTeaserSizes)),\r\n  orientation: PropTypes.oneOf(Object.values(storyTeaserOrientations)),\r\n  headingTagLevel: PropTypes.oneOf([2, 3]),\r\n};\r\n\r\nStoryTeaser.viewModelMeta = {\r\n  size: 'ignore',\r\n  className: 'ignore',\r\n  orientation: 'ignore',\r\n  headingTagLevel: 'ignore',\r\n};\r\n\r\nexport default StoryTeaser;\r\n","import PropTypes from 'prop-types';\r\nimport StoryTeaser from 'components/story-teaser/story-teaser';\r\n\r\nconst StoriesOverviewResults = {};\r\n\r\nStoriesOverviewResults.propTypes = {\r\n  items: PropTypes.arrayOf(StoryTeaser.propTypes),\r\n  pager: PropTypes.shape({\r\n    page: PropTypes.number,\r\n    totalPages: PropTypes.number,\r\n  }),\r\n};\r\n\r\nexport default StoriesOverviewResults;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst NoResults = ({ heading, text }) => {\r\n  return (\r\n    <div className=\"no-results\">\r\n      {heading && <h2 className=\"no-results__heading\">{heading}</h2>}\r\n      {text && <p className=\"no-results__text\">{text}</p>}\r\n    </div>\r\n  );\r\n};\r\n\r\nNoResults.propTypes = {\r\n  heading: PropTypes.string,\r\n  text: PropTypes.string,\r\n};\r\n\r\nNoResults.viewModelMeta = 'ignore';\r\n\r\nexport default NoResults;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Button from 'components/button';\r\nimport RichText from 'components/rich-text';\r\n\r\nconst NotFoundPage = ({\r\n  heading,\r\n  textHtml,\r\n  homePageButtonText,\r\n  homePageUrl,\r\n}) => {\r\n  return (\r\n    <div className=\"not-found-page\">\r\n      <div className=\"not-found-page__background\" role=\"presentation\"></div>\r\n      <div className=\"not-found-page__container\">\r\n        <div className=\"not-found-page__content\">\r\n          {heading && <h1 className=\"not-found-page__heading\">{heading}</h1>}\r\n          {textHtml && (\r\n            <RichText\r\n              text={textHtml}\r\n              className=\"not-found-page__text rich-text_in-not-found-page\"\r\n            />\r\n          )}\r\n          {homePageButtonText && homePageUrl && (\r\n            <div className=\"not-found-page__btn-holder\">\r\n              <Button\r\n                text={homePageButtonText}\r\n                url={homePageUrl}\r\n                className=\"not-found-page__btn\"\r\n              />\r\n            </div>\r\n          )}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nNotFoundPage.propTypes = {\r\n  heading: PropTypes.string,\r\n  textHtml: PropTypes.string,\r\n  homePageButtonText: PropTypes.string,\r\n  homePageUrl: PropTypes.string,\r\n};\r\n\r\nexport default NotFoundPage;\r\n","import { useRef, useEffect } from 'react';\r\n\r\nexport default function useDidUpdateEffect(fn, inputs) {\r\n  const didMountRef = useRef(false);\r\n\r\n  useEffect(() => {\r\n    if (didMountRef.current) fn();\r\n    else didMountRef.current = true;\r\n  }, inputs);\r\n}\r\n","import React, { useRef, useState, useEffect, useMemo } from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport cn from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport useDidUpdateEffect from 'hooks/use-did-update-effect';\r\nimport stringHelper from 'js/string-helper';\r\nimport PagerLang from 'components/models/pager-lang/pager-lang';\r\n\r\nconst Pager = ({\r\n  totalPages,\r\n  page,\r\n  pageRangeDisplayed = 2,\r\n  className,\r\n  lang = {\r\n    prevLabel: 'Prev',\r\n    pageLabel: '{0} of {1}',\r\n    nextLabel: 'Next',\r\n    jumpBackwardAriaLabel: 'Jump backward',\r\n    jumpForwardAriaLabel: 'Jump forward',\r\n  },\r\n  onPageChange,\r\n}) => {\r\n  const pagerSelectRef = useRef(null);\r\n  const pagerWrapperRef = useRef(null);\r\n  const pagerRef = useRef(null);\r\n  const [currentPage, setCurrentPage] = useState(page);\r\n\r\n  useDidUpdateEffect(() => {\r\n    if (currentPage !== page) {\r\n      onPageChange(currentPage);\r\n    }\r\n  }, [currentPage]);\r\n\r\n  useDidUpdateEffect(() => {\r\n    setCurrentPage(page);\r\n  }, [page]);\r\n\r\n  const pagerSelectOptions = useMemo(() => {\r\n    return Array.from({ length: totalPages }, (_, i) => i + 1);\r\n  }, [totalPages]);\r\n\r\n  useEffect(() => {\r\n    if (pagerWrapperRef?.current && pagerSelectRef?.current && totalPages) {\r\n      const firstPagerItem = pagerWrapperRef.current.querySelector('ul > li');\r\n      firstPagerItem.parentNode.insertBefore(\r\n        pagerSelectRef.current,\r\n        firstPagerItem.nextSibling\r\n      );\r\n    }\r\n  }, [pagerSelectRef, pagerWrapperRef, totalPages]);\r\n\r\n  const onMobileSelectorChange = e => {\r\n    const newPage = +e.target.value;\r\n    setCurrentPage(newPage);\r\n\r\n    if (pagerRef && pagerRef.current) {\r\n      pagerRef.current.handlePageChange(newPage - 1);\r\n    }\r\n  };\r\n\r\n  const onPagerPageChange = ({ selected }) => {\r\n    setCurrentPage(selected + 1);\r\n  };\r\n\r\n  return totalPages > 1 ? (\r\n    <div\r\n      className={cn('pager', {\r\n        [className]: className,\r\n      })}\r\n    >\r\n      {pagerSelectOptions && pagerSelectOptions.length > 0 && (\r\n        <li ref={pagerSelectRef}>\r\n          <select\r\n            className=\"pager__mobile-selector\"\r\n            value={currentPage}\r\n            onChange={onMobileSelectorChange}\r\n          >\r\n            {pagerSelectOptions.map(option => (\r\n              <option key={option} value={option}>\r\n                {stringHelper.format(lang.pageLabel, option, totalPages)}\r\n              </option>\r\n            ))}\r\n          </select>\r\n        </li>\r\n      )}\r\n      <div className=\"pager__wrapper\" ref={pagerWrapperRef}>\r\n        <ReactPaginate\r\n          ref={pagerRef}\r\n          pageCount={totalPages}\r\n          forcePage={currentPage - 1}\r\n          previousLabel={lang.prevLabel}\r\n          nextLabel={lang.nextLabel}\r\n          ariaLabelBuilder={pageIndex =>\r\n            stringHelper.format(lang.pageLabel, pageIndex, totalPages)\r\n          }\r\n          breakAriaLabels={{\r\n            forward: lang.jumpBackwardAriaLabel,\r\n            backward: lang.jumpForwardAriaLabel,\r\n          }}\r\n          hrefAllControls={true}\r\n          breakClassName=\"pager__break\"\r\n          disableInitialCallback={true}\r\n          pageRangeDisplayed={pageRangeDisplayed}\r\n          marginPagesDisplayed={1}\r\n          containerClassName=\"pager__list\"\r\n          pageClassName=\"pager__item\"\r\n          pageLinkClassName=\"pager__link\"\r\n          previousClassName=\"pager__prev\"\r\n          nextClassName=\"pager__next\"\r\n          onPageChange={onPagerPageChange}\r\n        />\r\n      </div>\r\n    </div>\r\n  ) : null;\r\n};\r\n\r\nPager.viewModelMeta = 'ignore';\r\n\r\nPager.propTypes = {\r\n  className: PropTypes.string,\r\n  pageRangeDisplayed: PropTypes.number,\r\n  page: PropTypes.number,\r\n  totalPages: PropTypes.number,\r\n  lang: PropTypes.shape(PagerLang.propTypes).isRequired,\r\n  onPageChange: PropTypes.func,\r\n};\r\n\r\nexport default Pager;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Image from 'components/image';\r\nimport { Parallax } from 'react-parallax';\r\n\r\nconst ParallaxBgImage = ({ imageClassName, backgroundImage }) => {\r\n  return (\r\n    <Parallax\r\n      className=\"parallax-bg-image__scroll-container\"\r\n      style={{\r\n        overflow: 'visible',\r\n        position: 'absolute',\r\n      }}\r\n      renderLayer={percentage => (\r\n        <>\r\n          <div\r\n            className=\"parallax-bg-image__image-container\"\r\n            style={{\r\n              top: `-${\r\n                percentage > 0\r\n                  ? percentage <= 1.5\r\n                    ? percentage * 26.66\r\n                    : 40\r\n                  : 0\r\n              }%`,\r\n            }}\r\n          >\r\n            {backgroundImage && (\r\n              <Image\r\n                {...backgroundImage}\r\n                fluid={true} //handled by css\r\n                className={imageClassName}\r\n              />\r\n            )}\r\n          </div>\r\n        </>\r\n      )}\r\n    ></Parallax>\r\n  );\r\n};\r\n\r\nParallaxBgImage.viewModelMeta = 'ignore';\r\n\r\nParallaxBgImage.propTypes = {\r\n  imageClassName: PropTypes.string,\r\n  backgroundImage: PropTypes.exact(Image.propTypes),\r\n};\r\n\r\nexport default ParallaxBgImage;\r\n","import React from 'react';\r\nimport Image from 'components/image';\r\nimport Icon from 'components/icon';\r\nimport Link from 'components/link';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\n\r\nconst PreparationBlock = ({ link, heading, image }) => {\r\n  const LinkHeadingTag = `h${heading ? 3 : 2}`;\r\n  return (\r\n    <div className=\"preparation-block\">\r\n      <div className=\"preparation-block__container\">\r\n        {heading && <h2 className=\"preparation-block__heading\">{heading}</h2>}\r\n        <a\r\n          href={link.url}\r\n          className=\"preparation-block__link\"\r\n          target={link.openInNewTab ? '_blank' : null}\r\n          rel={link.openInNewTab ? 'nofollow noopener noreferrer' : null}\r\n        >\r\n          <div className=\"preparation-block__wrapper\">\r\n            <div\r\n              className={cn('preparation-block__image-holder', {\r\n                'preparation-block__image-holder_no-image': !image,\r\n              })}\r\n            >\r\n              {image && (\r\n                <Image\r\n                  {...image}\r\n                  //fluid={isHorizontalOrientation}\r\n                  className=\"preparation-block__image image_size_preparation-block\"\r\n                />\r\n              )}\r\n            </div>\r\n            <div className=\"preparation-block__content\">\r\n              {link.text && (\r\n                <LinkHeadingTag className=\"preparation-block__link-heading\">\r\n                  <span className=\"preparation-block__link-heading-text\">\r\n                    {link.text}\r\n                  </span>\r\n                </LinkHeadingTag>\r\n              )}\r\n              <Icon name=\"arrow-right\" className=\"preparation-block__icon\" />\r\n            </div>\r\n          </div>\r\n        </a>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nPreparationBlock.propTypes = {\r\n  link: PropTypes.exact(Link.propTypes).isRequired,\r\n  heading: PropTypes.string,\r\n  image: PropTypes.exact(Image.propTypes),\r\n};\r\n\r\nexport default PreparationBlock;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst QuoteBlock = ({ text, author, authorTitle }) => {\r\n  return text ? (\r\n    <figure className=\"quote-block\">\r\n      <blockquote className=\"quote-block__text\">\r\n        <span className=\"quote-block__top-line\" role=\"presentation\"></span>\r\n        {text}\r\n      </blockquote>\r\n      {(author || authorTitle) && (\r\n        <figcaption className=\"quote-block__caption\">\r\n          {author && <div className=\"quote-block__author\">{author}</div>}\r\n          {authorTitle && (\r\n            <div className=\"quote-block__title\">{authorTitle}</div>\r\n          )}\r\n        </figcaption>\r\n      )}\r\n    </figure>\r\n  ) : null;\r\n};\r\n\r\nQuoteBlock.propTypes = {\r\n  text: PropTypes.string,\r\n  author: PropTypes.string,\r\n  authorTitle: PropTypes.string,\r\n};\r\n\r\nexport default QuoteBlock;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Image from 'components/image';\r\nimport ParallaxBgImage from 'components/parallax-bg-image/parallax-bg-image';\r\nimport ParallaxText from 'components/parallax-text/parallax-text';\r\nimport { Parallax } from 'react-parallax';\r\nimport { ANIMATION_PERCENTAGE } from '../../constants/parallax';\r\n\r\nconst QuoteWithBackgroundBlock = ({\r\n  text,\r\n  author,\r\n  authorTitle,\r\n  quoteBackgroundColor,\r\n  textColor,\r\n  backgroundImage,\r\n}) => {\r\n  const textAnimationPercentage = ANIMATION_PERCENTAGE.text;\r\n  return (\r\n    <div className=\"block_no-gap quote-with-background-block\">\r\n      <ParallaxBgImage\r\n        imageClassName=\"image_size_quote-with-background-block\"\r\n        backgroundImage={backgroundImage}\r\n      />\r\n\r\n      {text && (\r\n        <div className=\"quote-with-background-block__container\">\r\n          <div className=\"quote-with-background-block__inner\">\r\n            <Parallax\r\n              className=\"quote-with-background-block__text-animation-container\"\r\n              renderLayer={percentage => (\r\n                <>\r\n                  <figure className=\"quote-with-background-block__quote\">\r\n                    <blockquote\r\n                      className=\"quote-with-background-block__text\"\r\n                      style={{ color: textColor }}\r\n                    >\r\n                      {text && (\r\n                        <ParallaxText\r\n                          text={text}\r\n                          percentage={percentage}\r\n                          textBackgroundColor={quoteBackgroundColor}\r\n                          textColor={textColor}\r\n                          textAnimationPercentage={textAnimationPercentage}\r\n                        />\r\n                      )}\r\n                    </blockquote>\r\n\r\n                    {(author || authorTitle) && (\r\n                      <figcaption\r\n                        className=\"quote-with-background-block__caption\"\r\n                        style={{\r\n                          color: textColor,\r\n                          transition:\r\n                            percentage <= textAnimationPercentage\r\n                              ? 'left 500ms ease-out 350ms, background-position 350ms ease-in 700ms'\r\n                              : 'left 500ms ease-in 0ms, background-position 350ms ease-in 700ms',\r\n                          position: 'relative',\r\n                          bottom: 0,\r\n                          left:\r\n                            percentage > textAnimationPercentage\r\n                              ? '0%'\r\n                              : '-100%',\r\n\r\n                          backgroundSize: '100% 200%',\r\n                          backgroundPosition:\r\n                            percentage > textAnimationPercentage && '100% 100%',\r\n                          backgroundImage: `linear-gradient(${textColor}, ${textColor} 50%, ${quoteBackgroundColor} 50%, ${quoteBackgroundColor})`,\r\n                        }}\r\n                      >\r\n                        {author && (\r\n                          <div className=\"quote-with-background-block__author\">\r\n                            {author}\r\n                          </div>\r\n                        )}\r\n                        {authorTitle && (\r\n                          <div className=\"quote-with-background-block__title\">\r\n                            {authorTitle}\r\n                          </div>\r\n                        )}\r\n                      </figcaption>\r\n                    )}\r\n                  </figure>\r\n                </>\r\n              )}\r\n            ></Parallax>\r\n          </div>\r\n        </div>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\nQuoteWithBackgroundBlock.propTypes = {\r\n  text: PropTypes.string,\r\n  author: PropTypes.string,\r\n  authorTitle: PropTypes.string,\r\n  quoteBackgroundColor: PropTypes.string,\r\n  textColor: PropTypes.string,\r\n  backgroundImage: PropTypes.exact(Image.propTypes),\r\n};\r\n\r\nexport default QuoteWithBackgroundBlock;\r\n","import PubSub from 'pubsub-js';\r\n\r\nconst errorMessageTopic = 'error-message';\r\nconst messageTopic = 'message';\r\n\r\nfunction onTopic(topic, func) {\r\n  if (typeof func !== 'function') {\r\n    return;\r\n  }\r\n\r\n  return PubSub.subscribe(topic, (topic, { message }) => {\r\n    func({ message });\r\n  });\r\n}\r\n\r\nfunction send(topic, { message }) {\r\n  PubSub.publish(topic, { message });\r\n}\r\n\r\nconst onErrorMessage = func => onTopic(errorMessageTopic, func);\r\n\r\nconst onMessage = func => onTopic(messageTopic, func);\r\n\r\nconst sendErrorMessage = ({ message }) => send(errorMessageTopic, { message });\r\n\r\nconst sendMessage = ({ message }) => send(messageTopic, { message });\r\n\r\nexport default {\r\n  onErrorMessage,\r\n  onMessage,\r\n  sendErrorMessage,\r\n  sendMessage,\r\n};\r\n","//import analytics from './analytics';\r\nimport getData from '@creuna/utils/get-data';\r\nimport messenger from './messenger';\r\n\r\nconst defaultFetchOptions = {\r\n  headers: {\r\n    Accept: 'application/json',\r\n    'Content-Type': 'application/json',\r\n  },\r\n  credentials: 'include',\r\n};\r\n\r\nfunction parseResponse(response) {\r\n  return response.json().then(json => ({ json, response }));\r\n}\r\n\r\nfunction handleUserMessages({ json, response }) {\r\n  if (json.messageToUser) {\r\n    if (json.success) {\r\n      messenger.sendMessage({ message: json.messageToUser });\r\n    } else {\r\n      messenger.sendErrorMessage({ message: json.messageToUser });\r\n    }\r\n  }\r\n\r\n  return { json, response };\r\n}\r\n\r\n/*function handleAnalytics({ json, response }) {\r\n  if (json.analytics) {\r\n    analytics.send(json.analytics);\r\n  }\r\n\r\n  return { json, response };\r\n}*/\r\n\r\nfunction handleNotOk({ json, response }) {\r\n  // NOTE: `response.ok` is true when the returned status is in the inclusive range 200-299.\r\n  if (!response.ok && !json.messageToUser) {\r\n    const error = new Error(response.statusText);\r\n\r\n    error.name = `${response.status} on ${response.url}`;\r\n\r\n    throw error;\r\n  }\r\n\r\n  return { json, response };\r\n}\r\n\r\nfunction handleResponse({ json }) {\r\n  return json.payload || json;\r\n}\r\n\r\nfunction handleFetchError(error) {\r\n  messenger.sendErrorMessage({\r\n    message:\r\n      getData('generic-error-message') ||\r\n      'Noe gikk galt. Vennligst prøv igjen senere.',\r\n  });\r\n\r\n  return Promise.reject(error);\r\n}\r\n\r\nfunction request(url, options) {\r\n  return (\r\n    fetch(url, options)\r\n      .then(parseResponse)\r\n      .then(handleUserMessages)\r\n      //.then(handleAnalytics)\r\n      .then(handleNotOk)\r\n      .then(handleResponse)\r\n      .catch(handleFetchError)\r\n  );\r\n}\r\n\r\nfunction post(endpoint, data) {\r\n  return request(\r\n    endpoint,\r\n    Object.assign({}, defaultFetchOptions, {\r\n      body: data,\r\n      method: 'post',\r\n    })\r\n  );\r\n}\r\n\r\nfunction get(endpoint) {\r\n  return request(endpoint, defaultFetchOptions);\r\n}\r\n\r\nfunction execute(endpoint, data) {\r\n  if (endpoint.indexOf('/static-site/api') !== -1) {\r\n    return new Promise(resolve => {\r\n      setTimeout(() => {\r\n        resolve(request(endpoint, defaultFetchOptions));\r\n      }, 1000);\r\n    });\r\n  }\r\n\r\n  return post(endpoint, JSON.stringify(data));\r\n}\r\n\r\nexport default {\r\n  execute,\r\n  get,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\nimport Icon from 'components/icon';\r\n\r\nconst RateRecipeItem = ({\r\n  className,\r\n  isActive,\r\n  value,\r\n  hint,\r\n  onMouseEnter = () => {},\r\n  onMouseLeave = () => {},\r\n  onClick = () => {},\r\n  onFocus = () => {},\r\n  onBlur = () => {},\r\n  isDisabled = false,\r\n}) => {\r\n  return (\r\n    <button\r\n      className={cn('rate-recipe__item', className, {\r\n        'rate-recipe__item_active': isActive,\r\n      })}\r\n      onFocus={onFocus}\r\n      onBlur={onBlur}\r\n      onMouseEnter={onMouseEnter}\r\n      onClick={onClick}\r\n      onMouseLeave={onMouseLeave}\r\n      disabled={isDisabled}\r\n      aria-label={hint}\r\n      value={value}\r\n    >\r\n      <Icon\r\n        className=\"rate-recipe__item-icon rate-recipe__item-icon_empty\"\r\n        name=\"star-empty\"\r\n      />\r\n      <Icon\r\n        name=\"star-full\"\r\n        className=\"rate-recipe__item-icon rate-recipe__item-icon_full\"\r\n      />\r\n    </button>\r\n  );\r\n};\r\n\r\nRateRecipeItem.viewModelMeta = {\r\n  className: 'ignore',\r\n  isActive: 'ignore',\r\n  isDisabled: 'ignore',\r\n  onFocus: 'ignore',\r\n  onMouseLeave: 'ignore',\r\n  onBlur: 'ignore',\r\n};\r\n\r\nRateRecipeItem.propTypes = {\r\n  className: PropTypes.string,\r\n  isActive: PropTypes.bool,\r\n  value: PropTypes.number,\r\n  hint: PropTypes.string.isRequired,\r\n  onMouseEnter: PropTypes.func,\r\n  onClick: PropTypes.func,\r\n  onFocus: PropTypes.func,\r\n  onMouseLeave: PropTypes.func,\r\n  onBlur: PropTypes.func,\r\n  isDisabled: PropTypes.bool,\r\n};\r\n\r\nexport default RateRecipeItem;\r\n","import PubSub from 'pubsub-js';\r\n\r\nconst ratingTopic = 'NEWRATING';\r\n\r\nconst recipeMessageBus = {\r\n  subscribeToNewRating: callback => PubSub.subscribe(ratingTopic, callback),\r\n  publishNewRating: newRating => PubSub.publish(ratingTopic, newRating),\r\n  unsubscribeFromNewRating: token => PubSub.unsubscribe(token),\r\n};\r\n\r\nexport default recipeMessageBus;\r\n","import React, { useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Cookies from 'js-cookie';\r\nimport apiHelper from 'js/api-helper';\r\nimport RateRecipeItem from './rate-recipe-item';\r\nimport recipeMessageBus from 'js/recipe-message-bus';\r\n\r\nconst COOKIE_DATA_NAME = 'marketSitesRecipesRating';\r\n\r\nconst RateRecipe = ({ recipeId, currentRating, submitUrl, items, lang }) => {\r\n  const [isRatedByUser, setIsRatedByUser] = useState(false);\r\n  const [showError, setShowError] = useState(false);\r\n  const [cookiesData, setCookiesData] = useState({});\r\n  const [selectedItem, setSelectedItem] = useState({});\r\n  const [isHintShown, setIsHintShown] = useState(false);\r\n  const [rateConfirmation, setRateConfirmation] = useState(null);\r\n  const [isTemporaryDisabled, setIsTemporaryDisabled] = useState(false);\r\n\r\n  const setSelectedItemByValue = value => {\r\n    const newSelectedItem = items.find(i => i.value === value);\r\n    setSelectedItem(\r\n      value && value !== 0 && newSelectedItem ? newSelectedItem : {}\r\n    );\r\n  };\r\n\r\n  const isItemActive = (itemRating, currentRating) => {\r\n    return itemRating <= currentRating;\r\n  };\r\n\r\n  const onItemsMouseLeave = () => {\r\n    if (!isRatedByUser) {\r\n      setSelectedItemByValue(currentRating);\r\n      setIsHintShown(false);\r\n    }\r\n  };\r\n\r\n  const onItemClick = () => {\r\n    setIsRatedByUser(true);\r\n    setIsHintShown(false);\r\n    apiHelper\r\n      .execute(submitUrl, {\r\n        rateValue: selectedItem.value,\r\n      })\r\n      .then(response => {\r\n        if (response.rating && response.ratingValue) {\r\n          setRateConfirmation(response.confirmation);\r\n\r\n          const newRecipeId = recipeId;\r\n          const currentCookieData = cookiesData;\r\n          const addCookieData = { [newRecipeId]: selectedItem.value };\r\n          const newCookieData = { ...currentCookieData, ...addCookieData };\r\n\r\n          Cookies.set(COOKIE_DATA_NAME, JSON.stringify(newCookieData), {\r\n            expires: 365,\r\n          });\r\n\r\n          setCookiesData(newCookieData);\r\n          setShowError(false);\r\n          recipeMessageBus.publishNewRating(response.rating);\r\n        } else {\r\n          setShowError(true);\r\n          setIsRatedByUser(false);\r\n          setIsTemporaryDisabled(true);\r\n        }\r\n      })\r\n      .catch(() => {\r\n        setIsRatedByUser(false);\r\n        setShowError(true);\r\n        setIsTemporaryDisabled(true);\r\n      });\r\n  };\r\n\r\n  useEffect(() => {\r\n    const recipeCookiesString = Cookies.get(COOKIE_DATA_NAME);\r\n    if (recipeCookiesString) {\r\n      const recipeCookies = JSON.parse(recipeCookiesString);\r\n      setCookiesData(recipeCookies);\r\n      if (recipeCookies[recipeId]) {\r\n        setRateConfirmation(lang.youHaveAlreadyRatedMessage);\r\n      }\r\n    }\r\n    setSelectedItemByValue(currentRating);\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    if (cookiesData && cookiesData[recipeId]) {\r\n      setIsRatedByUser(true);\r\n    } else {\r\n      setIsRatedByUser(false);\r\n    }\r\n  }, [cookiesData]);\r\n\r\n  useEffect(() => {\r\n    if (isTemporaryDisabled) {\r\n      setTimeout(() => {\r\n        setIsTemporaryDisabled(false);\r\n      }, 5000);\r\n    }\r\n  }, [isTemporaryDisabled]);\r\n  return (\r\n    <div className=\"rate-recipe\">\r\n      <strong className=\"rate-recipe__heading\">\r\n        {lang.rateThisRecipeLabel}\r\n      </strong>\r\n      <div className=\"rate-recipe__content\">\r\n        {items && (\r\n          <ul\r\n            className=\"rate-recipe__items\"\r\n            onMouseLeave={() => onItemsMouseLeave()}\r\n          >\r\n            {items.map((item, index) => {\r\n              return (\r\n                <li key={index} className=\"rate-recipe__item-container\">\r\n                  <RateRecipeItem\r\n                    {...item}\r\n                    isActive={isItemActive(item.value, selectedItem.value)}\r\n                    onMouseEnter={() => {\r\n                      setSelectedItemByValue(item.value);\r\n                      setIsHintShown(true);\r\n                      setShowError(false);\r\n                    }}\r\n                    onFocus={() => {\r\n                      setSelectedItemByValue(item.value);\r\n                      setIsHintShown(true);\r\n                      setShowError(false);\r\n                    }}\r\n                    onBlur={() => setIsHintShown(false)}\r\n                    onMouseLeave={() => setIsHintShown(false)}\r\n                    onClick={onItemClick}\r\n                    isDisabled={isRatedByUser || isTemporaryDisabled}\r\n                  />\r\n                </li>\r\n              );\r\n            })}\r\n          </ul>\r\n        )}\r\n\r\n        <div className=\"rate-recipe__notifications\" role=\"status\">\r\n          {selectedItem && selectedItem.hint && isHintShown && !showError && (\r\n            <div className=\"rate-recipe__hint\">{selectedItem.hint}</div>\r\n          )}\r\n          {rateConfirmation && !showError && (\r\n            <div className=\"rate-recipe__confirmation\">{rateConfirmation}</div>\r\n          )}\r\n          {showError && (\r\n            <div className=\"rate-recipe__error-text\">{lang.errorText}</div>\r\n          )}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nRateRecipe.propTypes = {\r\n  recipeId: PropTypes.string.isRequired,\r\n  currentRating: PropTypes.number.isRequired,\r\n  submitUrl: PropTypes.string.isRequired,\r\n  items: PropTypes.arrayOf(PropTypes.exact(RateRecipeItem.propTypes)),\r\n  lang: PropTypes.shape({\r\n    rateThisRecipeLabel: PropTypes.string.isRequired,\r\n    errorText: PropTypes.string.isRequired,\r\n    youHaveAlreadyRatedMessage: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nexport default RateRecipe;\r\n","export const adjustSelectWidthBasedOnSelectedOption = select => {\r\n  if (!select) return;\r\n\r\n  let style = window.getComputedStyle(select);\r\n  let { fontWeight, fontSize, fontFamily, paddingRight } = style;\r\n\r\n  let text = select.querySelector('option:checked').innerText;\r\n\r\n  // Create hidden element to get the width of the selected option\r\n  const span = document.createElement('span');\r\n  span.innerHTML = text;\r\n  span.style.fontSize = fontSize;\r\n  span.style.fontWeight = fontWeight;\r\n  span.style.fontFamily = fontFamily;\r\n  span.style.paddingRight = paddingRight;\r\n  span.style.visibility = 'hidden';\r\n\r\n  const currentHiddenEl = select.parentNode.querySelector('span');\r\n\r\n  if (currentHiddenEl) {\r\n    currentHiddenEl.replaceWith(span);\r\n  } else {\r\n    select.parentNode.appendChild(span);\r\n  }\r\n};\r\n\r\nexport const calculateDropdownPanelPosition = dropdownPanel => {\r\n  dropdownPanel.style.left = '0';\r\n  dropdownPanel.style.right = '';\r\n\r\n  const windowWidth = window.innerWidth;\r\n  const elementRect = dropdownPanel.getBoundingClientRect();\r\n  const elementLeft = elementRect.left;\r\n  const elementWidth = elementRect.width;\r\n\r\n  if (elementLeft + elementWidth + 20 > windowWidth) {\r\n    dropdownPanel.style.right = '0';\r\n    dropdownPanel.style.left = '';\r\n  } else {\r\n    dropdownPanel.style.right = '';\r\n    dropdownPanel.style.left = '0';\r\n  }\r\n};\r\n","/* eslint-disable react/prop-types */\r\n// TODO: remove view-models/no-unused-meta and eslint-disable react/prop-types rule when this issue https://github.com/asbjornh/view-models/issues/18 is resolved\r\nimport React, { useEffect, useMemo, useState, useRef } from 'react';\r\nimport Filter from 'components/models/filter';\r\nimport ToggleButton from 'components/toggle-button/toggle-button';\r\nimport cn from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport debounce from 'lodash/debounce';\r\nimport idHelper from 'js/id-helper';\r\nimport useClickOutside from 'hooks/use-click-outside';\r\nimport useEscape from 'hooks/use-escape';\r\nimport {\r\n  adjustSelectWidthBasedOnSelectedOption,\r\n  calculateDropdownPanelPosition,\r\n} from 'js/custom-dropdown-utils';\r\n\r\nconst KEY_NAMES = {\r\n  ARROW_UP: 'ArrowUp',\r\n  ARROW_DOWN: 'ArrowDown',\r\n  TAB: 'Tab',\r\n};\r\n\r\nconst RecipeFilter = ({\r\n  heading,\r\n  allItemsLabel,\r\n  items,\r\n  name,\r\n  // eslint-disable-next-line no-unused-vars\r\n  onChange = ({ name, items }) => {},\r\n}) => {\r\n  const [currentItems, setCurrentItems] = useState(items);\r\n  const [isActive, setIsActive] = useState(false);\r\n  const [allItem, setAllItem] = useState(\r\n    allItemsLabel ? { text: allItemsLabel, value: 'all', selected: true } : null\r\n  );\r\n  const [focusedButtonIndex, setFocusedButtonIndex] = useState(0);\r\n  const recipePanelRef = useRef(null);\r\n  const recipeFilterRef = useRef(null);\r\n  const mobileSelectorRef = useRef(null);\r\n  const focusedButtonIndexRef = useRef(focusedButtonIndex);\r\n\r\n  const closeFilter = () => setIsActive(false);\r\n\r\n  useEscape(closeFilter);\r\n  useClickOutside(recipeFilterRef, closeFilter);\r\n\r\n  const uniqueRecipeFilterPanelId = useMemo(\r\n    () => idHelper.generateUniqueId('recipe-filter-panel'),\r\n    []\r\n  );\r\n\r\n  const filterPanelColumnCount = useMemo(() => {\r\n    let columnCount = 1;\r\n    const itemCount = currentItems?.length;\r\n\r\n    switch (true) {\r\n      case itemCount > 23:\r\n        columnCount = 4;\r\n        break;\r\n      case itemCount > 15:\r\n        columnCount = 3;\r\n        break;\r\n      case itemCount > 7:\r\n        columnCount = 2;\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n\r\n    return columnCount;\r\n  }, [currentItems?.length]);\r\n\r\n  const handleKeyDown = e => {\r\n    const focusedButtonIndexRefCurrent = focusedButtonIndexRef.current;\r\n\r\n    if (e.key === KEY_NAMES.ARROW_UP || e.key === KEY_NAMES.ARROW_DOWN) {\r\n      e.preventDefault();\r\n    }\r\n    if (isActive) {\r\n      if (e.key === KEY_NAMES.ARROW_UP && focusedButtonIndexRefCurrent > 0) {\r\n        setFocusedButtonIndex(focusedButtonIndexRefCurrent - 1);\r\n      } else if (\r\n        e.key === KEY_NAMES.ARROW_DOWN &&\r\n        focusedButtonIndexRefCurrent < currentItems.length\r\n      ) {\r\n        setFocusedButtonIndex(focusedButtonIndexRefCurrent + 1);\r\n      } else if (e.key === KEY_NAMES.TAB) {\r\n        setIsActive(false);\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    const filterItems = recipePanelRef.current.querySelectorAll(\r\n      '.recipe-filter__option'\r\n    );\r\n\r\n    if (focusedButtonIndexRef && focusedButtonIndexRef.current !== undefined) {\r\n      focusedButtonIndexRef.current = focusedButtonIndex;\r\n\r\n      if (filterItems && filterItems.length > 0) {\r\n        filterItems[focusedButtonIndex].focus();\r\n      }\r\n    }\r\n  }, [focusedButtonIndex, focusedButtonIndexRef]);\r\n\r\n  useEffect(() => {\r\n    const filterItems = recipePanelRef.current.querySelectorAll(\r\n      '.recipe-filter__option'\r\n    );\r\n\r\n    if (isActive) {\r\n      document.addEventListener('keydown', handleKeyDown);\r\n\r\n      if (filterItems && filterItems.length > 0) {\r\n        filterItems[0].focus();\r\n      }\r\n    } else {\r\n      document.removeEventListener('keydown', handleKeyDown);\r\n      setFocusedButtonIndex(0);\r\n    }\r\n\r\n    return () => {\r\n      // Clean up the event listener when the component unmounts\r\n      document.removeEventListener('keydown', handleKeyDown);\r\n    };\r\n  }, [isActive]);\r\n\r\n  useEffect(() => {\r\n    if (isActive && filterPanelColumnCount < 4) {\r\n      calculateDropdownPanelPosition(recipePanelRef?.current);\r\n    }\r\n  }, [isActive, filterPanelColumnCount]);\r\n\r\n  const handleWindowResize = debounce(() => {\r\n    if (filterPanelColumnCount < 4) {\r\n      calculateDropdownPanelPosition(recipePanelRef?.current);\r\n    }\r\n  }, 200);\r\n\r\n  useEffect(() => {\r\n    window.addEventListener('resize', handleWindowResize);\r\n\r\n    return () => {\r\n      window.removeEventListener('resize', handleWindowResize);\r\n    };\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    setCurrentItems(items);\r\n  }, [items]);\r\n\r\n  useEffect(() => {\r\n    if (mobileSelectorRef?.current) {\r\n      adjustSelectWidthBasedOnSelectedOption(mobileSelectorRef.current);\r\n    }\r\n  }, [mobileSelectorRef]);\r\n\r\n  useEffect(() => {\r\n    setAllItem(allItem =>\r\n      allItem\r\n        ? {\r\n            ...allItem,\r\n            selected: !currentItems.some(item => item.selected),\r\n          }\r\n        : null\r\n    );\r\n    if (currentItems !== items && currentItems.length > 0) {\r\n      onChange({ name: name, items: currentItems });\r\n    }\r\n  }, [currentItems]);\r\n\r\n  const updateItem = targetItem => {\r\n    closeFilter();\r\n    setCurrentItems(currentItems =>\r\n      currentItems.map(item => ({\r\n        ...item,\r\n        selected: targetItem === item ? !item.selected : false,\r\n      }))\r\n    );\r\n  };\r\n\r\n  const updateAllItems = () => {\r\n    closeFilter();\r\n    setCurrentItems(currentItems =>\r\n      currentItems.map(item => ({ ...item, selected: false }))\r\n    );\r\n  };\r\n\r\n  const getToggleButtonText = () => {\r\n    let buttonText = allItemsLabel;\r\n    const matchedFilterItem = currentItems\r\n      ? currentItems.find(item => item.selected)\r\n      : null;\r\n\r\n    if (currentItems && currentItems.length > 0 && matchedFilterItem) {\r\n      buttonText = matchedFilterItem.text;\r\n    }\r\n    return buttonText;\r\n  };\r\n\r\n  const onMobileSelectorChange = e => {\r\n    adjustSelectWidthBasedOnSelectedOption(mobileSelectorRef?.current);\r\n    updateItem(currentItems.find(item => item.value === e.target.value));\r\n  };\r\n\r\n  return (\r\n    <div\r\n      className={cn(\r\n        `recipe-filter ${\r\n          filterPanelColumnCount > 1\r\n            ? `recipe-filter_${filterPanelColumnCount}-columns`\r\n            : ''\r\n        }`\r\n      )}\r\n      ref={recipeFilterRef}\r\n    >\r\n      {heading && <span className=\"recipe-filter__heading\">{heading}</span>}\r\n      {currentItems && currentItems.length > 0 && (\r\n        <div className=\"recipe-filter__mobile-selector-holder\">\r\n          <select\r\n            className=\"recipe-filter__mobile-selector\"\r\n            value={currentItems.find(item => item.selected)?.value}\r\n            onChange={onMobileSelectorChange}\r\n            ref={mobileSelectorRef}\r\n          >\r\n            {currentItems.length > 0 && allItem && (\r\n              <option value={allItem.value}>{allItem.text}</option>\r\n            )}\r\n            {currentItems.map(option => (\r\n              <option key={option.value} value={option.value}>\r\n                {option.text}\r\n              </option>\r\n            ))}\r\n          </select>\r\n        </div>\r\n      )}\r\n      <ToggleButton\r\n        text={getToggleButtonText()}\r\n        onClick={() => setIsActive(!isActive)}\r\n        isActive={isActive}\r\n        iconName=\"chevron-down\"\r\n        activeIconName=\"chevron-up\"\r\n        className=\"recipe-filter__desktop-selector\"\r\n        ariaAttributes={{\r\n          'aria-expanded': isActive,\r\n          'aria-controls': uniqueRecipeFilterPanelId,\r\n        }}\r\n      />\r\n      <div\r\n        className={cn('recipe-filter__panel', {\r\n          'recipe-filter__panel_opened': isActive,\r\n        })}\r\n        ref={recipePanelRef}\r\n        id={uniqueRecipeFilterPanelId}\r\n        {...{ 'aria-hidden': !isActive }}\r\n      >\r\n        {currentItems.length > 0 && allItem && (\r\n          <button\r\n            className={cn('recipe-filter__option', {\r\n              ['recipe-filter__option_selected']: allItem.selected,\r\n            })}\r\n            key={allItem.value}\r\n            onClick={() => updateAllItems(allItem.selected)}\r\n          >\r\n            {allItem.text}\r\n          </button>\r\n        )}\r\n        {currentItems.map(item => {\r\n          return (\r\n            <button\r\n              className={cn('recipe-filter__option', {\r\n                ['recipe-filter__option_selected']: item.selected,\r\n              })}\r\n              key={item.value}\r\n              onClick={() => updateItem(item)}\r\n            >\r\n              {item.text}\r\n            </button>\r\n          );\r\n        })}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nRecipeFilter.propTypes = Object.assign({}, Filter.propTypes, {\r\n  onChange: PropTypes.func,\r\n});\r\n\r\nRecipeFilter.viewModelMeta = 'ignore';\r\n\r\nexport default RecipeFilter;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport RecipeFilter from 'components/recipe-filter';\r\nimport FilterHeading from 'components/filter-heading';\r\n\r\nimport cn from 'classnames';\r\n\r\nconst RecipeFilters = ({\r\n  heading,\r\n  filters,\r\n  className,\r\n  id,\r\n  onFilterChange = () => {},\r\n}) => {\r\n  return filters && filters.length > 0 ? (\r\n    <div\r\n      className={cn('recipe-filters', {\r\n        [className]: className,\r\n      })}\r\n      id={id}\r\n    >\r\n      {heading && (\r\n        <FilterHeading\r\n          text={heading}\r\n          tagName=\"strong\"\r\n          className=\"recipe-filters__heading\"\r\n        />\r\n      )}\r\n      <div className=\"recipe-filters__list\">\r\n        {filters.map((filter, index) => {\r\n          return (\r\n            <div className=\"recipe-filters__item\" key={index}>\r\n              <RecipeFilter {...filter} onChange={onFilterChange} />\r\n            </div>\r\n          );\r\n        })}\r\n      </div>\r\n    </div>\r\n  ) : null;\r\n};\r\n\r\nRecipeFilters.propTypes = {\r\n  heading: PropTypes.string,\r\n  className: PropTypes.string,\r\n  id: PropTypes.string,\r\n  filters: PropTypes.arrayOf(PropTypes.exact(RecipeFilter.propTypes)),\r\n  onFilterChange: PropTypes.func,\r\n};\r\n\r\nRecipeFilters.viewModelMeta = 'ignore';\r\n\r\nexport default RecipeFilters;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport PageHeading from 'components/page-heading';\r\nimport PoorText from 'components/poor-text';\r\nimport ParallaxHeroBackground from 'components/parallax-hero-background';\r\nimport useAnimationStepSwitcher, {\r\n  ANIMATION_STEPS,\r\n} from 'hooks/use-animation-step-switcher';\r\nimport cn from 'classnames';\r\n\r\nconst SimplePageHero = ({ heading, backgroundColor, introHtml, children }) => {\r\n  const animationCurrentStep = useAnimationStepSwitcher(\r\n    ANIMATION_STEPS.oneLayerHero\r\n  );\r\n\r\n  return (\r\n    <div className=\"simple-page-hero\">\r\n      <ParallaxHeroBackground\r\n        backgroundColor={backgroundColor}\r\n        className={cn('simple-page-hero__background', {\r\n          'simple-page-hero__background_visible': animationCurrentStep > 0,\r\n        })}\r\n      />\r\n      <div\r\n        className={cn('simple-page-hero__container', {\r\n          'simple-page-hero__container_visible': animationCurrentStep > 1,\r\n          'simple-page-hero__container_tall': animationCurrentStep > 2,\r\n        })}\r\n      >\r\n        {heading && (\r\n          <PageHeading text={heading} className=\"simple-page-hero__heading\" />\r\n        )}\r\n        {introHtml && (\r\n          <PoorText\r\n            text={introHtml}\r\n            className=\"simple-page-hero__intro poor-text_in-simple-page-hero\"\r\n          />\r\n        )}\r\n        {children && (\r\n          <div className=\"simple-page-hero__content\">{children}</div>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nSimplePageHero.propTypes = {\r\n  heading: PropTypes.string,\r\n  introHtml: PropTypes.string,\r\n  backgroundColor: PropTypes.string,\r\n  children: PropTypes.oneOfType([\r\n    PropTypes.node,\r\n    PropTypes.arrayOf(PropTypes.node),\r\n  ]),\r\n};\r\n\r\nSimplePageHero.viewModelMeta = { children: 'ignore' };\r\n\r\nexport default SimplePageHero;\r\n","import fromQueryString from '@creuna/utils/from-query-string';\r\nimport replaceQueryParameters from '@creuna/utils/replace-query-parameters';\r\n\r\nconst _inQueryStringArrayDelimiter = '~';\r\n\r\nconst _getUndefinedIfEmpty = value => {\r\n  return !value || value === '' || value.length === 0 ? undefined : value;\r\n};\r\n\r\nconst _queryValueAsArray = value => {\r\n  value = value || [];\r\n  return Array.isArray(value) ? value : value.split(',');\r\n};\r\n\r\nconst createQuery = () => {\r\n  return new Object();\r\n};\r\n\r\nconst setQueryValue = (query, name, value) => {\r\n  query[name] = _getUndefinedIfEmpty(value);\r\n};\r\n\r\nconst setToQueryTextInputValue = (query, textInput, currentValue = null) => {\r\n  if (!textInput) {\r\n    return;\r\n  }\r\n  setQueryValue(query, textInput.name, currentValue ?? textInput.value);\r\n};\r\n\r\nconst updateFilterFromQuery = (query, fieldName, filterItems) => {\r\n  var queryValues = _queryValueAsArray(query[fieldName]);\r\n  filterItems.forEach(item => {\r\n    item.selected = queryValues.includes(item.value);\r\n  });\r\n};\r\n\r\nconst updateQueryFromFilter = (query, fieldName, filterItems) => {\r\n  var filterValues = filterItems.map(x => x.value);\r\n  var filterSelectedValues = filterItems\r\n    .filter(x => x.selected)\r\n    .map(x => x.value);\r\n  var queryValues = _queryValueAsArray(query[fieldName]);\r\n  var newValues = [\r\n    ...new Set([...queryValues, ...filterSelectedValues]),\r\n  ].filter(x => !filterValues.includes(x) || filterSelectedValues.includes(x));\r\n\r\n  setQueryValue(query, fieldName, newValues);\r\n};\r\n\r\nconst updatePageQueryString = query => {\r\n  query = { ...query };\r\n  for (var key in query) {\r\n    var value = query[key];\r\n    if (Array.isArray(value))\r\n      query[key] = value.join(_inQueryStringArrayDelimiter);\r\n  }\r\n  var newUrl = replaceQueryParameters(window.location.toString(), query);\r\n  window.history.replaceState({}, document.title, newUrl);\r\n};\r\n\r\nconst fillQueryFromPageQueryString = query => {\r\n  var parsedQuery = fromQueryString(window.location.search.replace(/\\+/g, ' '));\r\n  for (var key in parsedQuery) {\r\n    var value = parsedQuery[key];\r\n    if (value.includes(_inQueryStringArrayDelimiter))\r\n      parsedQuery[key] = value.split(_inQueryStringArrayDelimiter);\r\n  }\r\n  Object.assign(query, parsedQuery);\r\n};\r\n\r\nexport default {\r\n  createQuery,\r\n  setQueryValue,\r\n  updateFilterFromQuery,\r\n  updateQueryFromFilter,\r\n  setToQueryTextInputValue,\r\n  updatePageQueryString,\r\n  fillQueryFromPageQueryString,\r\n};\r\n","import React, { useState, useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport SimplePageHero from 'components/simple-page-hero/simple-page-hero';\r\nimport RecipeTeaser from 'components/recipe-teaser/recipe-teaser';\r\nimport RecipeFilters from 'components/recipe-filters/recipe-filters';\r\nimport ToggleButton from 'components/toggle-button/toggle-button';\r\nimport ErrorMessage from 'components/error-message/error-message';\r\nimport NoResults from 'components/no-results/no-results';\r\nimport Pager from 'components/pager/pager';\r\nimport SearchForm, {\r\n  sizes as searchFormSizes,\r\n} from 'components/search-form/search-form';\r\nimport LoadingIndicator from 'components/loading-indicator/loading-indicator';\r\nimport apiHelper from 'js/api-helper';\r\nimport formHelper from 'js/form-helper';\r\nimport idHelper from 'js/id-helper';\r\nimport stringHelper from 'js/string-helper';\r\nimport useDidUpdateEffect from 'hooks/use-did-update-effect';\r\nimport useBreakpoints from 'hooks/use-breakpoints';\r\nimport recipeTeaserOrientations from 'components/recipe-teaser/recipe-teaser-orientations';\r\nimport PagerLang from 'components/models/pager-lang/pager-lang';\r\nimport SearchFormLang from 'components/models/search-form-lang/search-form-lang';\r\n\r\nconst searchQueryParamName = 'q';\r\nconst pageNumberQueryParamName = 'page';\r\nconst skipFiltersQueryParamName = 'skipFilters';\r\n\r\nconst RecipeList = ({ heading, loadItemsEndpoint, lang }) => {\r\n  const [results, setResults] = useState(null);\r\n  const [query, setQuery] = useState(formHelper.createQuery());\r\n  const [showError, setShowError] = useState(false);\r\n  const [isLoading, setIsLoading] = useState(false);\r\n  const [filtersOpenedOnMobile, setFiltersOpenedOnMobile] = useState(false);\r\n\r\n  const { isMobile } = useBreakpoints(true);\r\n\r\n  const uniqueRecipeFiltersPanelId = useMemo(\r\n    () => idHelper.generateUniqueId('recipe-filters-panel'),\r\n    []\r\n  );\r\n\r\n  const initLoadedFilter = filter => {\r\n    formHelper.updateFilterFromQuery(query, filter.name, filter.items);\r\n  };\r\n\r\n  const loadItems = () => {\r\n    const requestQuery = { ...query };\r\n\r\n    if (results?.filters && results?.pager && query.page !== 1) {\r\n      requestQuery[skipFiltersQueryParamName] = true;\r\n    }\r\n\r\n    setShowError(false);\r\n    setIsLoading(true);\r\n    apiHelper\r\n      .execute(loadItemsEndpoint, requestQuery)\r\n      .then(results => {\r\n        if (results) {\r\n          if (results.filters) {\r\n            results.filters.forEach(initLoadedFilter);\r\n          }\r\n\r\n          const { filters: responseFilters, ...restResponseResults } = results;\r\n\r\n          setResults(prevResults => ({\r\n            ...prevResults,\r\n            ...restResponseResults,\r\n            ...(responseFilters && {\r\n              filters: responseFilters,\r\n            }),\r\n          }));\r\n        }\r\n      })\r\n      .catch(() => {\r\n        setShowError(true);\r\n        setResults(null);\r\n      })\r\n      .finally(() => {\r\n        setIsLoading(false);\r\n      });\r\n  };\r\n\r\n  // eslint-disable-next-line no-unused-vars\r\n  const updateQuery = (updateFunc = q => {}) => {\r\n    setQuery(q => {\r\n      q = Object.assign({}, q);\r\n      updateFunc(q);\r\n      return q;\r\n    });\r\n  };\r\n\r\n  const init = () => {\r\n    updateQuery(q => formHelper.fillQueryFromPageQueryString(q));\r\n  };\r\n\r\n  useDidUpdateEffect(() => {\r\n    formHelper.updatePageQueryString(query);\r\n    loadItems();\r\n  }, [query]);\r\n\r\n  useDidUpdateEffect(() => {\r\n    window.scrollTo({ top: 0, behavior: 'smooth' });\r\n  }, [results?.pager?.page]);\r\n\r\n  useEffect(() => {\r\n    init();\r\n  }, []);\r\n\r\n  const onFilterChange = e => {\r\n    updateQuery(q => {\r\n      q[pageNumberQueryParamName] = 1;\r\n\r\n      return formHelper.updateQueryFromFilter(q, e.name, e.items);\r\n    });\r\n  };\r\n\r\n  const onSearch = val => {\r\n    updateQuery(q => {\r\n      q[pageNumberQueryParamName] = 1;\r\n\r\n      return formHelper.setToQueryTextInputValue(q, {\r\n        name: searchQueryParamName,\r\n        value: val,\r\n      });\r\n    });\r\n  };\r\n\r\n  const onPageChange = page => {\r\n    updateQuery(q => (q[pageNumberQueryParamName] = page));\r\n  };\r\n\r\n  return (\r\n    <div className=\"recipe-list\">\r\n      <SimplePageHero heading={heading} backgroundColor=\"#EEE4DD\">\r\n        <div className=\"recipe-list__settings-panel\">\r\n          <div className=\"recipe-list__search-form-holder\">\r\n            <SearchForm\r\n              lang={lang.searchForm}\r\n              query={query[searchQueryParamName]}\r\n              size={searchFormSizes.large}\r\n              className=\"recipe-list__search-form search-form_in-recipe-list\"\r\n              onSearch={onSearch}\r\n            />\r\n            {results && !isLoading && (\r\n              <p\r\n                className=\"recipe-list__hits-text\"\r\n                role=\"region\"\r\n                aria-live=\"polite\"\r\n              >\r\n                {query.q\r\n                  ? stringHelper.format(\r\n                      lang.searchHitsText,\r\n                      query.q,\r\n                      results.totalCount\r\n                    )\r\n                  : lang.emptySearchTermText}\r\n              </p>\r\n            )}\r\n          </div>\r\n          {results?.filters && (\r\n            <div className=\"recipe-list__filters\">\r\n              <ToggleButton\r\n                text={\r\n                  filtersOpenedOnMobile\r\n                    ? lang.hideFilterOptionsLabel\r\n                    : lang.showFilterOptionsLabel\r\n                }\r\n                className=\"recipe-list__filters-toggle-btn\"\r\n                onClick={() => setFiltersOpenedOnMobile(!filtersOpenedOnMobile)}\r\n                iconName={filtersOpenedOnMobile ? 'minus-sign' : 'plus-sign'}\r\n                iconPosition=\"left\"\r\n                ariaAttributes={{\r\n                  'aria-expanded': filtersOpenedOnMobile,\r\n                  'aria-controls': uniqueRecipeFiltersPanelId,\r\n                }}\r\n              />\r\n              <RecipeFilters\r\n                id={uniqueRecipeFiltersPanelId}\r\n                heading={lang.filterLabel}\r\n                filters={results.filters}\r\n                onFilterChange={onFilterChange}\r\n                className={`recipe-list__filters-panel ${\r\n                  filtersOpenedOnMobile\r\n                    ? 'recipe-list__filters-panel_visible'\r\n                    : ''\r\n                }`}\r\n              />\r\n            </div>\r\n          )}\r\n        </div>\r\n      </SimplePageHero>\r\n      <div className=\"recipe-list__results-container animated-content animated-content_delayed-appearance\">\r\n        {results?.items && results.items.length > 0 ? (\r\n          <ul className=\"recipe-list__teasers\">\r\n            {results.items.map(recipe => (\r\n              <li key={recipe.id} className=\"recipe-list__teaser-item\">\r\n                <RecipeTeaser\r\n                  {...recipe}\r\n                  orientation={\r\n                    isMobile\r\n                      ? recipeTeaserOrientations.horizontal\r\n                      : recipeTeaserOrientations.vertical\r\n                  }\r\n                  className=\"recipe-list__teaser\"\r\n                  headingTagLevel={2}\r\n                  cookingTimeIconAriaLabel={lang.cookingTimeIconAriaLabel}\r\n                  difficultyLevelIconAriaLabel={\r\n                    lang.difficultyLevelIconAriaLabel\r\n                  }\r\n                  ratingIconAriaLabel={lang.ratingIconAriaLabel}\r\n                />\r\n              </li>\r\n            ))}\r\n          </ul>\r\n        ) : null}\r\n        {results?.items && results.items.length === 0 && (\r\n          <NoResults\r\n            heading={lang.noListResultsHeading}\r\n            text={lang.noListResultsText}\r\n          />\r\n        )}\r\n        {showError && <ErrorMessage text={lang.errorMessage} />}\r\n        {results?.pager && (\r\n          <Pager\r\n            {...results?.pager}\r\n            page={+query?.page || 1}\r\n            className=\"recipe-list__pager\"\r\n            lang={lang.pager}\r\n            onPageChange={onPageChange}\r\n          />\r\n        )}\r\n        {isLoading && <LoadingIndicator />}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nRecipeList.propTypes = {\r\n  heading: PropTypes.string,\r\n  loadItemsEndpoint: PropTypes.string.isRequired,\r\n  lang: PropTypes.shape({\r\n    errorMessage: PropTypes.string.isRequired,\r\n    filterLabel: PropTypes.string.isRequired,\r\n    showFilterOptionsLabel: PropTypes.string.isRequired,\r\n    hideFilterOptionsLabel: PropTypes.string.isRequired,\r\n    noListResultsHeading: PropTypes.string.isRequired,\r\n    noListResultsText: PropTypes.string.isRequired,\r\n    searchHitsText: PropTypes.string.isRequired,\r\n    emptySearchTermText: PropTypes.string.isRequired,\r\n    pager: PropTypes.shape(PagerLang.propTypes).isRequired,\r\n    searchForm: PropTypes.shape(SearchFormLang.propTypes).isRequired,\r\n    cookingTimeIconAriaLabel: PropTypes.string.isRequired,\r\n    difficultyLevelIconAriaLabel: PropTypes.string.isRequired,\r\n    ratingIconAriaLabel: PropTypes.string.isRequired,\r\n  }),\r\n};\r\n\r\nexport default RecipeList;\r\n","import React, { useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Image from 'components/image';\r\nimport PoorText from 'components/poor-text';\r\nimport Link from 'components/link';\r\nimport PageHeading from 'components/page-heading';\r\nimport LinkButton, {\r\n  sizes as linkButtonSizes,\r\n  arrowDirections as linkButtonArrowDirections,\r\n} from 'components/link-button/link-button';\r\nimport RecipeDetails from 'components/recipe-details';\r\nimport recipeMessageBus from 'js/recipe-message-bus';\r\nimport ParallaxHeroBackground from 'components/parallax-hero-background';\r\nimport useAnimationStepSwitcher, {\r\n  ANIMATION_STEPS,\r\n} from 'hooks/use-animation-step-switcher';\r\nimport cn from 'classnames';\r\nimport { calculateInterpolatedValue } from 'js/calc-utils';\r\nimport { Parallax } from 'react-parallax';\r\nimport useBreakpoints from 'hooks/use-breakpoints';\r\n\r\nconst RecipePageHero = ({\r\n  heading,\r\n  introHtml,\r\n  allRecipesLink,\r\n  image,\r\n  rating,\r\n  cookingTime,\r\n  difficultyLevel,\r\n  lang = {\r\n    cookingTimeIconAriaLabel: 'Cooking time',\r\n    difficultyLevelIconAriaLabel: 'Difficulty level',\r\n    ratingIconAriaLabel: 'Rating',\r\n  },\r\n}) => {\r\n  const { isMobile } = useBreakpoints(true);\r\n  const animationCurrentStep = useAnimationStepSwitcher(\r\n    ANIMATION_STEPS.twoLayersHero\r\n  );\r\n\r\n  const [currentRating, setCurrentRating] = useState(rating);\r\n  useEffect(() => {\r\n    const token = recipeMessageBus.subscribeToNewRating((msg, data) => {\r\n      setCurrentRating(data);\r\n    });\r\n\r\n    return () => {\r\n      recipeMessageBus.unsubscribeFromNewRating(token);\r\n    };\r\n  }, []);\r\n\r\n  return (\r\n    <div className=\"recipe-page-hero\">\r\n      <ParallaxHeroBackground\r\n        backgroundColor=\"#FFAE9C\"\r\n        useParallaxOnMobile={false}\r\n        className={cn('recipe-page-hero__background', {\r\n          'recipe-page-hero__background_visible': animationCurrentStep > 0,\r\n        })}\r\n      />\r\n      <div\r\n        className={cn('recipe-page-hero__container', {\r\n          'recipe-page-hero__container_tall': animationCurrentStep > 2,\r\n        })}\r\n      >\r\n        <div className=\"recipe-page-hero__image-holder\">\r\n          <Parallax\r\n            style={{\r\n              overflow: 'visible',\r\n            }}\r\n            renderLayer={percentage => {\r\n              const maxPercentage = 1.3;\r\n              const maxImageColPadding = 60;\r\n              let imageColPadding = 0;\r\n\r\n              if (percentage > maxPercentage) {\r\n                imageColPadding = maxImageColPadding;\r\n              } else {\r\n                imageColPadding = calculateInterpolatedValue(\r\n                  percentage,\r\n                  maxImageColPadding,\r\n                  maxPercentage\r\n                );\r\n              }\r\n\r\n              return (\r\n                <div\r\n                  style={{\r\n                    paddingRight: isMobile\r\n                      ? 0\r\n                      : maxImageColPadding - imageColPadding,\r\n                  }}\r\n                >\r\n                  <div\r\n                    className={cn('recipe-page-hero__image-holder-overlay', {\r\n                      'recipe-page-hero__image-holder-overlay_visible':\r\n                        animationCurrentStep > 0,\r\n                      'recipe-page-hero__image-holder-overlay_tight':\r\n                        animationCurrentStep <= 2,\r\n                    })}\r\n                  >\r\n                    <div className=\"recipe-page-hero__image-centered-overlay\">\r\n                      <Image\r\n                        {...image}\r\n                        className=\"recipe-page-hero__image image_size_recipe-page-hero\"\r\n                      />\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n              );\r\n            }}\r\n          />\r\n        </div>\r\n        <div\r\n          className={cn('recipe-page-hero__content', {\r\n            'recipe-page-hero__content_visible': animationCurrentStep > 1,\r\n          })}\r\n        >\r\n          {allRecipesLink && (\r\n            <LinkButton\r\n              className=\"recipe-page-hero__all-recipes-link\"\r\n              size={linkButtonSizes.small}\r\n              arrowDirection={linkButtonArrowDirections.left}\r\n              {...allRecipesLink}\r\n            />\r\n          )}\r\n          {heading && <PageHeading size=\"small\" text={heading} />}\r\n          {introHtml && (\r\n            <PoorText\r\n              text={introHtml}\r\n              className=\"recipe-page-hero__intro poor-text_in-recipe-page-hero\"\r\n            />\r\n          )}\r\n          <RecipeDetails\r\n            className=\"recipe-page-hero__details\"\r\n            cookingTime={cookingTime}\r\n            difficultyLevel={difficultyLevel}\r\n            rating={currentRating}\r\n            cookingTimeIconAriaLabel={lang.cookingTimeIconAriaLabel}\r\n            difficultyLevelIconAriaLabel={lang.difficultyLevelIconAriaLabel}\r\n            ratingIconAriaLabel={lang.ratingIconAriaLabel}\r\n            useFocusableDetails={true}\r\n          />\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nRecipePageHero.propTypes = {\r\n  heading: PropTypes.string,\r\n  introHtml: PropTypes.string,\r\n  image: PropTypes.exact(Image.propTypes),\r\n  allRecipesLink: PropTypes.exact(Link.propTypes),\r\n  rating: PropTypes.string,\r\n  cookingTime: PropTypes.string,\r\n  difficultyLevel: PropTypes.string,\r\n  lang: PropTypes.shape({\r\n    cookingTimeIconAriaLabel: PropTypes.string.isRequired,\r\n    difficultyLevelIconAriaLabel: PropTypes.string.isRequired,\r\n    ratingIconAriaLabel: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nexport default RecipePageHero;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport IconButton from 'components/icon-button';\r\nimport cn from 'classnames';\r\n\r\nexport const arrowDirections = {\r\n  right: 'right',\r\n  left: 'left',\r\n};\r\n\r\nconst RecipeTeasersBlockSliderNavButton = ({\r\n  onClick,\r\n  text,\r\n  isDisabled,\r\n  arrowDirection,\r\n}) => {\r\n  return (\r\n    <IconButton\r\n      iconName={\r\n        arrowDirection === arrowDirections.left ? 'arrow-left' : 'arrow-right'\r\n      }\r\n      onClick={onClick}\r\n      isDisabled={isDisabled}\r\n      className={cn('recipe-teasers-block__slider-nav-button', {\r\n        'recipe-teasers-block__slider-nav-button_prev':\r\n          arrowDirection === arrowDirections.left,\r\n        'recipe-teasers-block__slider-nav-button_next':\r\n          arrowDirection === arrowDirections.right,\r\n        'recipe-teasers-block__slider-nav-button_disabled': isDisabled,\r\n      })}\r\n      ariaAttributes={{\r\n        'aria-label': text,\r\n      }}\r\n    />\r\n  );\r\n};\r\n\r\nRecipeTeasersBlockSliderNavButton.viewModelMeta = 'ignore';\r\n\r\nRecipeTeasersBlockSliderNavButton.propTypes = {\r\n  onClick: PropTypes.func,\r\n  text: PropTypes.string,\r\n  isDisabled: PropTypes.bool,\r\n  arrowDirection: PropTypes.oneOf(Object.values(arrowDirections)),\r\n};\r\n\r\nexport default RecipeTeasersBlockSliderNavButton;\r\n","import React, { useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Link from 'components/link';\r\nimport LinkButton, {\r\n  sizes as linkButtonSizes,\r\n  arrowDirections as linkButtonArrowDirections,\r\n} from 'components/link-button';\r\nimport RecipeTeaser from 'components/recipe-teaser/recipe-teaser';\r\nimport useBreakpoints from 'hooks/use-breakpoints';\r\nimport Slider from 'react-slick';\r\nimport RecipeTeasersBlockSliderNavButton, {\r\n  arrowDirections as sliderArrowDirections,\r\n} from './recipe-teasers-block-slider-nav-button';\r\nimport useDidUpdateEffect from 'hooks/use-did-update-effect';\r\nimport cn from 'classnames';\r\nimport { Parallax } from 'react-parallax';\r\n\r\nconst RecipeTeasersBlock = ({\r\n  className,\r\n  heading,\r\n  showAllLink,\r\n  recipes,\r\n  lang,\r\n}) => {\r\n  const { isDesktopLargerThanIpad } = useBreakpoints(true);\r\n  const [currentSlideIndex, setCurrentSlideIndex] = React.useState(0);\r\n  const [isMounted, setIsMounted] = React.useState(false);\r\n\r\n  const slidesLength = recipes.length - 1;\r\n\r\n  const sliderRef = useRef(null);\r\n  const sliderStepsRef = useRef([]);\r\n\r\n  const onSlideChange = currentSlideIndex => {\r\n    setCurrentSlideIndex(currentSlideIndex);\r\n  };\r\n\r\n  const sliderSettings = {\r\n    customPaging: function (i) {\r\n      return (\r\n        <button\r\n          aria-label={i}\r\n          className={cn('recipe-teasers-block__slider-paging-button', {\r\n            'recipe-teasers-block__slider-paging-button_active':\r\n              i === currentSlideIndex,\r\n          })}\r\n        ></button>\r\n      );\r\n    },\r\n    dotsClass: 'recipe-teasers-block__slider-paging',\r\n    dots: true,\r\n    infinite: false,\r\n    speed: 500,\r\n    slidesToShow: 1,\r\n    slidesToScroll: 1,\r\n    nextArrow: (\r\n      <RecipeTeasersBlockSliderNavButton\r\n        text={lang.nextButtonText}\r\n        isDisabled={currentSlideIndex === slidesLength}\r\n        arrowDirection={sliderArrowDirections.right}\r\n      />\r\n    ),\r\n    prevArrow: (\r\n      <RecipeTeasersBlockSliderNavButton\r\n        text={lang.prevButtonText}\r\n        isDisabled={currentSlideIndex === 0}\r\n        arrowDirection={sliderArrowDirections.left}\r\n      />\r\n    ),\r\n    afterChange: onSlideChange,\r\n  };\r\n\r\n  useEffect(() => {\r\n    sliderStepsRef.current = sliderStepsRef.current.slice(0, recipes.length);\r\n  }, [recipes]);\r\n\r\n  useDidUpdateEffect(() => {\r\n    if (sliderStepsRef?.current) {\r\n      const currentSlideNode = sliderStepsRef?.current[currentSlideIndex];\r\n\r\n      if (currentSlideNode) {\r\n        currentSlideNode.focus();\r\n      }\r\n    }\r\n  }, [currentSlideIndex, sliderStepsRef]);\r\n\r\n  useEffect(() => {\r\n    setIsMounted(true);\r\n  }, []);\r\n\r\n  return (\r\n    <div\r\n      className={cn('recipe-teasers-block', className)}\r\n      aria-roledescription={\r\n        isDesktopLargerThanIpad ? null : lang.carouselAriaRoleDescription\r\n      }\r\n    >\r\n      {heading && <h2 className=\"recipe-teasers-block__heading\">{heading}</h2>}\r\n      {recipes && (\r\n        <>\r\n          {(!isMounted || isDesktopLargerThanIpad) && (\r\n            <ul className=\"recipe-teasers-block__items\">\r\n              {recipes.map((recipe, index) => {\r\n                let translateY = 0;\r\n\r\n                switch (index) {\r\n                  case 0:\r\n                    translateY = -40;\r\n                    break;\r\n                  case 1:\r\n                    translateY = 70;\r\n                    break;\r\n                  case 2:\r\n                    translateY = -60;\r\n                    break;\r\n                  case 3:\r\n                    translateY = 10;\r\n                    break;\r\n                }\r\n                return (\r\n                  <li className=\"recipe-teasers-block__item\" key={index}>\r\n                    <Parallax\r\n                      style={{\r\n                        overflow: 'visible',\r\n                      }}\r\n                      renderLayer={percentage => (\r\n                        <div\r\n                          style={{\r\n                            transition:\r\n                              percentage < 0.35\r\n                                ? 'transform 150ms'\r\n                                : 'transform 30ms',\r\n                            transform: `translateY(${\r\n                              percentage >= 0.3\r\n                                ? percentage <= 1\r\n                                  ? percentage * translateY\r\n                                  : translateY\r\n                                : 0\r\n                            }px)`,\r\n                          }}\r\n                        >\r\n                          <RecipeTeaser\r\n                            {...recipe}\r\n                            className=\"recipe-teasers-block__tesaer\"\r\n                            cookingTimeIconAriaLabel={\r\n                              lang.cookingTimeIconAriaLabel\r\n                            }\r\n                            difficultyLevelIconAriaLabel={\r\n                              lang.difficultyLevelIconAriaLabel\r\n                            }\r\n                            ratingIconAriaLabel={lang.ratingIconAriaLabel}\r\n                          />\r\n                        </div>\r\n                      )}\r\n                    ></Parallax>\r\n                  </li>\r\n                );\r\n              })}\r\n            </ul>\r\n          )}\r\n\r\n          {(!isMounted || !isDesktopLargerThanIpad) && (\r\n            <Slider\r\n              ref={sliderRef}\r\n              {...sliderSettings}\r\n              className=\"recipe-teasers-block__slider\"\r\n            >\r\n              {recipes.map((recipe, index) => {\r\n                return (\r\n                  <RecipeTeaser\r\n                    key={index}\r\n                    {...recipe}\r\n                    className=\"recipe-teasers-block__tesaer\"\r\n                    tabindex={index === currentSlideIndex ? null : -1}\r\n                    ariaRoledescription={lang.teaserAriaRoleDescription}\r\n                    ref={el => (sliderStepsRef.current[index] = el)}\r\n                    cookingTimeIconAriaLabel={lang.cookingTimeIconAriaLabel}\r\n                    difficultyLevelIconAriaLabel={\r\n                      lang.difficultyLevelIconAriaLabel\r\n                    }\r\n                    ratingIconAriaLabel={lang.ratingIconAriaLabel}\r\n                  />\r\n                );\r\n              })}\r\n            </Slider>\r\n          )}\r\n        </>\r\n      )}\r\n      {showAllLink && (\r\n        <LinkButton\r\n          className=\"recipe-teasers-block__all-species-link\"\r\n          size={linkButtonSizes.small}\r\n          arrowDirection={linkButtonArrowDirections.right}\r\n          {...showAllLink}\r\n        />\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nRecipeTeasersBlock.propTypes = {\r\n  className: PropTypes.string,\r\n  lang: PropTypes.shape({\r\n    nextButtonText: PropTypes.string.isRequired,\r\n    prevButtonText: PropTypes.string.isRequired,\r\n    carouselAriaLabel: PropTypes.string.isRequired,\r\n    carouselAriaRoleDescription: PropTypes.string.isRequired,\r\n    teaserAriaRoleDescription: PropTypes.string.isRequired,\r\n    cookingTimeIconAriaLabel: PropTypes.string.isRequired,\r\n    difficultyLevelIconAriaLabel: PropTypes.string.isRequired,\r\n    ratingIconAriaLabel: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n  heading: PropTypes.string,\r\n  showAllLink: PropTypes.exact(Link.propTypes),\r\n  recipes: PropTypes.arrayOf(PropTypes.exact(RecipeTeaser.propTypes)),\r\n};\r\n\r\nRecipeTeasersBlock.viewModelMeta = {\r\n  className: 'ignore',\r\n};\r\n\r\nexport default RecipeTeasersBlock;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport RichText from 'components/rich-text';\r\n\r\nconst RichTextBlock = ({ textHtml }) => {\r\n  return (\r\n    <div className=\"rich-text-block\">\r\n      <RichText text={textHtml} />\r\n    </div>\r\n  );\r\n};\r\n\r\nRichTextBlock.propTypes = {\r\n  textHtml: PropTypes.string,\r\n};\r\n\r\nexport default RichTextBlock;\r\n","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport SimplePageHero from 'components/simple-page-hero/simple-page-hero';\r\nimport ToggleFilter from 'components/toggle-filter/toggle-filter';\r\nimport ErrorMessage from 'components/error-message/error-message';\r\nimport NoResults from 'components/no-results/no-results';\r\nimport Pager from 'components/pager/pager';\r\nimport SearchForm, {\r\n  sizes as searchFormSizes,\r\n} from 'components/search-form/search-form';\r\nimport LoadingIndicator from 'components/loading-indicator/loading-indicator';\r\nimport apiHelper from 'js/api-helper';\r\nimport formHelper from 'js/form-helper';\r\nimport stringHelper from 'js/string-helper';\r\nimport useDidUpdateEffect from 'hooks/use-did-update-effect';\r\nimport useBreakpoints from 'hooks/use-breakpoints';\r\nimport recipeTeaserOrientations from 'components/recipe-teaser/recipe-teaser-orientations';\r\nimport PagerLang from 'components/models/pager-lang/pager-lang';\r\nimport SearchFormLang from 'components/models/search-form-lang/search-form-lang';\r\n\r\nimport * as Components from '../../app.components';\r\n\r\nconst searchQueryParamName = 'q';\r\nconst pageNumberQueryParamName = 'page';\r\n\r\nconst SearchPage = ({ heading, searchEndpoint, lang }) => {\r\n  const [results, setResults] = useState(null);\r\n  const [query, setQuery] = useState(formHelper.createQuery());\r\n  const [showError, setShowError] = useState(false);\r\n  const [isLoading, setIsLoading] = useState(false);\r\n\r\n  const { isMobile } = useBreakpoints(true);\r\n\r\n  // eslint-disable-next-line no-unused-vars\r\n  const updateQuery = (updateFunc = q => {}) => {\r\n    setQuery(q => {\r\n      q = Object.assign({}, q);\r\n      updateFunc(q);\r\n      return q;\r\n    });\r\n  };\r\n\r\n  const loadItems = () => {\r\n    setShowError(false);\r\n    setIsLoading(true);\r\n    apiHelper\r\n      .execute(searchEndpoint, query)\r\n      .then(results => {\r\n        formHelper.updateFilterFromQuery(\r\n          query,\r\n          results?.pageTypeFilter?.name,\r\n          results?.pageTypeFilter?.items\r\n        );\r\n        setResults(results);\r\n      })\r\n      .catch(() => {\r\n        setShowError(true);\r\n        setResults(null);\r\n      })\r\n      .finally(() => {\r\n        setIsLoading(false);\r\n      });\r\n  };\r\n\r\n  const init = () => {\r\n    updateQuery(q => formHelper.fillQueryFromPageQueryString(q));\r\n  };\r\n\r\n  useDidUpdateEffect(() => {\r\n    formHelper.updatePageQueryString(query);\r\n    loadItems();\r\n  }, [query]);\r\n\r\n  useDidUpdateEffect(() => {\r\n    window.scrollTo({ top: 0, behavior: 'smooth' });\r\n  }, [results?.pager?.page]);\r\n\r\n  useEffect(() => {\r\n    init();\r\n  }, []);\r\n\r\n  const onSearch = val => {\r\n    updateQuery(q => {\r\n      q[pageNumberQueryParamName] = 1;\r\n\r\n      return formHelper.setToQueryTextInputValue(q, {\r\n        name: searchQueryParamName,\r\n        value: val,\r\n      });\r\n    });\r\n  };\r\n\r\n  const onPageTypeFilterChange = e => {\r\n    updateQuery(q => {\r\n      q[pageNumberQueryParamName] = 1;\r\n\r\n      return formHelper.updateQueryFromFilter(q, e.name, e.items);\r\n    });\r\n  };\r\n\r\n  const onPageChange = page => {\r\n    updateQuery(q => (q[pageNumberQueryParamName] = page));\r\n  };\r\n\r\n  return (\r\n    <div className=\"search-page\">\r\n      <SimplePageHero heading={heading} backgroundColor=\"#BDD5DE\">\r\n        <div className=\"search-page__settings-panel\">\r\n          <div className=\"search-page__search-form-holder\">\r\n            <SearchForm\r\n              displayTopLabel={false}\r\n              lang={lang.searchForm}\r\n              query={query[searchQueryParamName]}\r\n              size={searchFormSizes.large}\r\n              className=\"search-page__search-form search-form_in-search-page\"\r\n              onSearch={onSearch}\r\n            />\r\n            {results && !isLoading && (\r\n              <p\r\n                className=\"search-page__hits-text\"\r\n                role=\"region\"\r\n                aria-live=\"polite\"\r\n              >\r\n                {query.q\r\n                  ? stringHelper.format(\r\n                      lang.searchHitsText,\r\n                      query.q,\r\n                      results.totalCount\r\n                    )\r\n                  : lang.emptySearchTermText}\r\n              </p>\r\n            )}\r\n          </div>\r\n\r\n          {results?.pageTypeFilter && (\r\n            <div className=\"search-page__filter\">\r\n              <ToggleFilter\r\n                {...results.pageTypeFilter}\r\n                isDisabled={isLoading}\r\n                onChange={onPageTypeFilterChange}\r\n              />\r\n            </div>\r\n          )}\r\n        </div>\r\n      </SimplePageHero>\r\n      <div className=\"search-page__results-container animated-content animated-content_delayed-appearance\">\r\n        {results?.hits && results.hits.length > 0 ? (\r\n          <ul className=\"search-page__teasers\">\r\n            {results.hits.map(item => {\r\n              const Block = Components[item.componentName];\r\n              if (!Block) {\r\n                // eslint-disable-next-line no-console\r\n                console.error(\r\n                  `Components.${item.componentName} is not defined`\r\n                );\r\n                return null;\r\n              }\r\n              return (\r\n                <li key={item.id} className=\"search-page__teaser-item\">\r\n                  <Block\r\n                    {...item}\r\n                    className=\"search-page__teaser\"\r\n                    // orientation and headingTagLevel properties handled only by the RecipeTeaser component, it does not affect other teasers\r\n                    headingTagLevel={2}\r\n                    orientation={\r\n                      isMobile\r\n                        ? recipeTeaserOrientations.horizontal\r\n                        : recipeTeaserOrientations.vertical\r\n                    }\r\n                  />\r\n                </li>\r\n              );\r\n            })}\r\n          </ul>\r\n        ) : null}\r\n        {results?.hits && results.hits.length === 0 && (\r\n          <NoResults\r\n            heading={lang.noResultsHeading}\r\n            text={lang.noResultsText}\r\n          />\r\n        )}\r\n        {showError && <ErrorMessage text={lang.errorMessage} />}\r\n        {results?.pager && (\r\n          <Pager\r\n            {...results?.pager}\r\n            page={+query?.page || 1}\r\n            className=\"search-page__pager\"\r\n            lang={lang.pager}\r\n            onPageChange={onPageChange}\r\n          />\r\n        )}\r\n        {isLoading && <LoadingIndicator />}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nSearchPage.propTypes = {\r\n  heading: PropTypes.string,\r\n  searchEndpoint: PropTypes.string.isRequired,\r\n  lang: PropTypes.shape({\r\n    errorMessage: PropTypes.string.isRequired,\r\n    noResultsHeading: PropTypes.string.isRequired,\r\n    noResultsText: PropTypes.string.isRequired,\r\n    searchHitsText: PropTypes.string.isRequired,\r\n    emptySearchTermText: PropTypes.string.isRequired,\r\n    pager: PropTypes.shape(PagerLang.propTypes).isRequired,\r\n    searchForm: PropTypes.shape(SearchFormLang.propTypes).isRequired,\r\n  }),\r\n};\r\n\r\nexport default SearchPage;\r\n","import React from 'react';\r\nimport Image from 'components/image';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\nimport useBreakpoints from 'hooks/use-breakpoints';\r\n\r\nconst SearchTeaser = ({\r\n  url,\r\n  heading,\r\n  image,\r\n  backgroundColor,\r\n  categoryLabel,\r\n  className,\r\n}) => {\r\n  const { isMobile } = useBreakpoints(true);\r\n\r\n  return (\r\n    <a\r\n      href={url}\r\n      className={cn('search-teaser', {\r\n        [className]: className,\r\n      })}\r\n    >\r\n      <div\r\n        className=\"search-teaser__background\"\r\n        role=\"presentation\"\r\n        style={{ backgroundColor: backgroundColor }}\r\n      ></div>\r\n      <div className=\"search-teaser__container\">\r\n        <div className=\"search-teaser__image-aligner\">\r\n          <div\r\n            className={cn('search-teaser__image-holder', {\r\n              'search-teaser__image-holder_no-image': !image,\r\n            })}\r\n          >\r\n            {image && (\r\n              <Image\r\n                {...image}\r\n                fluid={isMobile}\r\n                className=\"search-teaser__image image_size_search-teaser\"\r\n              />\r\n            )}\r\n          </div>\r\n        </div>\r\n        <div className=\"search-teaser__content\">\r\n          {categoryLabel && (\r\n            <span className=\"search-teaser__category\">{categoryLabel}</span>\r\n          )}\r\n          {heading && (\r\n            <h2 className=\"search-teaser__heading\">\r\n              <span className=\"search-teaser__heading-text\">{heading}</span>\r\n            </h2>\r\n          )}\r\n        </div>\r\n      </div>\r\n    </a>\r\n  );\r\n};\r\n\r\nSearchTeaser.propTypes = {\r\n  id: PropTypes.string,\r\n  url: PropTypes.string,\r\n  heading: PropTypes.string,\r\n  className: PropTypes.string,\r\n  image: PropTypes.exact(Image.propTypes),\r\n  backgroundColor: PropTypes.string,\r\n  categoryLabel: PropTypes.string,\r\n};\r\n\r\nSearchTeaser.viewModelMeta = {\r\n  className: 'ignore',\r\n};\r\n\r\nexport default SearchTeaser;\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport ActionButton from 'components/action-button';\r\nimport cn from 'classnames';\r\nimport Icon from 'components/icon';\r\n\r\nconst ShareRecipe = ({ heading, lang }) => {\r\n  const [showUrlCopiedConfirmation, setShowUrlCopiedConfirmation] =\r\n    useState(false);\r\n  const [isNativeShareSupported, setIsNativeShareSupported] = useState(false);\r\n\r\n  const onCopyUrlButtonClick = () => {\r\n    const currentPageURL = window.location.href;\r\n\r\n    try {\r\n      navigator.clipboard.writeText(currentPageURL);\r\n      setShowUrlCopiedConfirmation(true);\r\n      setTimeout(() => {\r\n        setShowUrlCopiedConfirmation(false);\r\n      }, 10000);\r\n    } catch (error) {\r\n      // eslint-disable-next-line no-console\r\n      console.error('Failed to copy URL:', error);\r\n    }\r\n  };\r\n\r\n  const onShareButtonClick = () => {\r\n    if (navigator.share) {\r\n      try {\r\n        navigator.share({\r\n          title: document.title,\r\n          url: window.location.href,\r\n        });\r\n      } catch (error) {\r\n        // eslint-disable-next-line no-console\r\n        console.error('Error sharing:', error);\r\n      }\r\n    }\r\n  };\r\n  React.useEffect(() => {\r\n    if (navigator.share) {\r\n      setIsNativeShareSupported(true);\r\n    }\r\n  }, []);\r\n\r\n  return (\r\n    <div className=\"share-recipe\">\r\n      {heading && <h2 className=\"share-recipe__heading\">{heading}</h2>}\r\n      <div className=\"share-recipe__buttons\">\r\n        {isNativeShareSupported && (\r\n          <ActionButton\r\n            onClick={onShareButtonClick}\r\n            text={lang.shareButtonText}\r\n            iconName=\"share\"\r\n            className=\"share-recipe__button share-recipe__button_share\"\r\n          />\r\n        )}\r\n        <div className=\"share-recipe__copy-button-container\">\r\n          <ActionButton\r\n            onClick={onCopyUrlButtonClick}\r\n            text={lang.copyUrlButtonText}\r\n            iconName=\"copy\"\r\n            className=\"share-recipe__button share-recipe__button_copy\"\r\n          />\r\n          <div\r\n            role=\"status\"\r\n            className={cn('share-recipe__copy-confirmation', {\r\n              'share-recipe__copy-confirmation_active':\r\n                showUrlCopiedConfirmation,\r\n            })}\r\n          >\r\n            <div className=\"share-recipe__copy-confirmation-content\">\r\n              {showUrlCopiedConfirmation && (\r\n                <>\r\n                  <strong className=\"share-recipe__copy-confirmation-heading\">\r\n                    <Icon\r\n                      name=\"check\"\r\n                      className=\"share-recipe__copy-confirmation-icon\"\r\n                    />\r\n                    <span className=\"share-recipe__copy-confirmation-heading-text\">\r\n                      {lang.copyUrlConfirmationHeading}\r\n                    </span>\r\n                  </strong>\r\n                  <div className=\"share-recipe__copy-confirmation-text\">\r\n                    {lang.copyUrlConfirmationText}\r\n                  </div>\r\n                </>\r\n              )}\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nShareRecipe.propTypes = {\r\n  heading: PropTypes.string,\r\n  lang: PropTypes.shape({\r\n    copyUrlButtonText: PropTypes.string.isRequired,\r\n    shareButtonText: PropTypes.string.isRequired,\r\n    copyUrlConfirmationHeading: PropTypes.string.isRequired,\r\n    copyUrlConfirmationText: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nexport default ShareRecipe;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport ShareRecipe from 'components/share-recipe';\r\nimport RateRecipe from 'components/rate-recipe';\r\nimport cn from 'classnames';\r\n\r\nconst ShareAndRateRecipePanel = ({ shareRecipe, rateRecipe, className }) => {\r\n  return (\r\n    <div className={cn('share-and-rate-recipe-panel', className)}>\r\n      {shareRecipe && <ShareRecipe {...shareRecipe} />}\r\n      {rateRecipe && <RateRecipe {...rateRecipe} />}\r\n    </div>\r\n  );\r\n};\r\n\r\nShareAndRateRecipePanel.viewModelMeta = {\r\n  className: 'ignore',\r\n};\r\n\r\nShareAndRateRecipePanel.propTypes = {\r\n  shareRecipe: PropTypes.exact(ShareRecipe.propTypes),\r\n  rateRecipe: PropTypes.exact(RateRecipe.propTypes),\r\n  className: PropTypes.string,\r\n};\r\n\r\nexport default ShareAndRateRecipePanel;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Image from 'components/image';\r\nimport Link from 'components/link';\r\nimport LinkButton, {\r\n  sizes as linkButtonSizes,\r\n  arrowDirections as linkButtonArrowDirections,\r\n} from 'components/link-button';\r\nimport PageHeading from 'components/page-heading';\r\nimport ParallaxHeroBackground from 'components/parallax-hero-background';\r\nimport PoorText from 'components/poor-text';\r\nimport useAnimationStepSwitcher, {\r\n  ANIMATION_STEPS,\r\n} from 'hooks/use-animation-step-switcher';\r\n\r\nimport cn from 'classnames';\r\n\r\nconst ShortArticlePageHero = ({\r\n  heading,\r\n  introHtml,\r\n  image,\r\n  imageCaption,\r\n  allStoriesLink,\r\n  backgroundColor,\r\n}) => {\r\n  const animationCurrentStep = useAnimationStepSwitcher(\r\n    ANIMATION_STEPS.oneLayerHero\r\n  );\r\n\r\n  return (\r\n    <div className=\"short-article-page-hero\">\r\n      <ParallaxHeroBackground\r\n        backgroundColor={backgroundColor}\r\n        className={cn('short-article-page-hero__background', {\r\n          'short-article-page-hero__background_visible':\r\n            animationCurrentStep > 0,\r\n        })}\r\n      />\r\n      <div\r\n        className={cn('short-article-page-hero__container', {\r\n          'short-article-page-hero__container_visible':\r\n            animationCurrentStep > 1,\r\n          'short-article-page-hero__container_tall': animationCurrentStep > 2,\r\n        })}\r\n      >\r\n        <div className=\"short-article-page-hero__content\">\r\n          {allStoriesLink && (\r\n            <LinkButton\r\n              className=\"short-article-page-hero__all-species-link\"\r\n              size={linkButtonSizes.small}\r\n              arrowDirection={linkButtonArrowDirections.left}\r\n              {...allStoriesLink}\r\n            />\r\n          )}\r\n          {heading && (\r\n            <PageHeading\r\n              text={heading}\r\n              className=\"short-article-page-hero__heading\"\r\n            />\r\n          )}\r\n          <div className=\"short-article-page-hero__text-holder\">\r\n            {introHtml && (\r\n              <PoorText\r\n                text={introHtml}\r\n                className=\"short-article-page-hero__intro poor-text_in-short-article-page-hero\"\r\n              />\r\n            )}\r\n          </div>\r\n        </div>\r\n        {image && (\r\n          <figure className=\"short-article-page-hero__image-holder\">\r\n            <Image {...image} className=\"image_size_short-article-page-hero\" />\r\n            {imageCaption && (\r\n              <figcaption className=\"short-article-page-hero__image-caption\">\r\n                {imageCaption}\r\n              </figcaption>\r\n            )}\r\n          </figure>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nShortArticlePageHero.propTypes = {\r\n  heading: PropTypes.string,\r\n  introHtml: PropTypes.string,\r\n  image: PropTypes.exact(Image.propTypes),\r\n  imageCaption: PropTypes.string,\r\n  allStoriesLink: PropTypes.exact(Link.propTypes),\r\n  backgroundColor: PropTypes.string,\r\n};\r\n\r\nexport default ShortArticlePageHero;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst SkipToMain = ({ text }) => (\r\n  <a className=\"skip-to-main\" href=\"#main-content\">\r\n    {text}\r\n  </a>\r\n);\r\n\r\nSkipToMain.propTypes = {\r\n  text: PropTypes.string,\r\n};\r\n\r\nexport default SkipToMain;\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Link from 'components/link';\r\nimport Image from 'components/image';\r\nimport cn from 'classnames';\r\nimport useBreakpoints from 'hooks/use-breakpoints';\r\nimport useScrollDirection, {\r\n  SCROLL_DIRECTIONS,\r\n} from 'hooks/use-scroll-direction';\r\nimport LinkButton from 'components/link-button';\r\n\r\nconst SpeciesQuickOverviewBlockSpecie = ({\r\n  link,\r\n  image,\r\n  bgColor,\r\n  index,\r\n  stayActiveOnScrollOrResize,\r\n  setContainerBgColor,\r\n  onSpecieActive,\r\n}) => {\r\n  const { isDesktopLargerThanIpad } = useBreakpoints(true);\r\n  const [isActive, setActive] = useState(false);\r\n  const [randomMobileImageAlign, setRandomMobileImageAlign] = useState(false);\r\n  const specieLinkRef = useRef();\r\n  const specieRef = useRef();\r\n  const isDesktopRef = useRef(true);\r\n  const scrollDirection = useScrollDirection();\r\n  const scrollDirectionRef = useRef(scrollDirection);\r\n  const stayActiveOnScrollOrResizeRef = useRef(stayActiveOnScrollOrResize);\r\n\r\n  const updateIsActive = isActive => {\r\n    setActive(image && isActive);\r\n  };\r\n\r\n  const onSpecieLinkMouseEnter = () => {\r\n    if (isDesktopRef?.current) {\r\n      updateIsActive(true);\r\n    }\r\n  };\r\n\r\n  const onSpecieLinkMouseLeave = () => {\r\n    if (isDesktopRef?.current) {\r\n      updateIsActive(false);\r\n    }\r\n  };\r\n\r\n  const onSpecieLinkFocus = () => {\r\n    if (isDesktopRef?.current) {\r\n      updateIsActive(true);\r\n    }\r\n  };\r\n\r\n  const onSpecieLinkBlur = () => {\r\n    if (isDesktopRef?.current) {\r\n      updateIsActive(false);\r\n    }\r\n  };\r\n\r\n  const isItemInViewportCenter = item => {\r\n    const { top, bottom } = item.getBoundingClientRect();\r\n    const windowHeight = window.innerHeight;\r\n    const viewportVerticalCenterPosition =\r\n      windowHeight /\r\n      (scrollDirectionRef?.current === SCROLL_DIRECTIONS.UP ? 3 : 1.4);\r\n\r\n    return (\r\n      top <= viewportVerticalCenterPosition &&\r\n      bottom >= viewportVerticalCenterPosition\r\n    );\r\n  };\r\n\r\n  const onWindowResizeOrScroll = () => {\r\n    if (\r\n      isDesktopRef?.current !== undefined &&\r\n      !isDesktopRef?.current &&\r\n      specieRef?.current\r\n    ) {\r\n      if (\r\n        stayActiveOnScrollOrResizeRef?.current !== undefined &&\r\n        stayActiveOnScrollOrResizeRef?.current\r\n      ) {\r\n        updateIsActive(true);\r\n      } else {\r\n        updateIsActive(isItemInViewportCenter(specieRef?.current));\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    updateIsActive(false);\r\n    isDesktopRef.current = isDesktopLargerThanIpad;\r\n  }, [isDesktopLargerThanIpad]);\r\n\r\n  useEffect(() => {\r\n    scrollDirectionRef.current = scrollDirection;\r\n  }, [scrollDirection]);\r\n\r\n  useEffect(() => {\r\n    stayActiveOnScrollOrResizeRef.current = stayActiveOnScrollOrResize;\r\n  }, [stayActiveOnScrollOrResize]);\r\n\r\n  useEffect(() => {\r\n    const specieLink = specieLinkRef.current;\r\n\r\n    if (specieLink) {\r\n      specieLink.addEventListener('mouseenter', onSpecieLinkMouseEnter);\r\n      specieLink.addEventListener('mouseleave', onSpecieLinkMouseLeave);\r\n      specieLink.addEventListener('focus', onSpecieLinkFocus);\r\n      specieLink.addEventListener('blur', onSpecieLinkBlur);\r\n    }\r\n\r\n    window.addEventListener('scroll', onWindowResizeOrScroll);\r\n    window.addEventListener('resize', onWindowResizeOrScroll);\r\n\r\n    return () => {\r\n      window.removeEventListener('scroll', onWindowResizeOrScroll);\r\n      window.removeEventListener('resize', onWindowResizeOrScroll);\r\n\r\n      if (specieLink) {\r\n        specieLink.removeEventListener('mouseenter', onSpecieLinkMouseEnter);\r\n        specieLink.removeEventListener('mouseleave', onSpecieLinkMouseLeave);\r\n        specieLink.removeEventListener('focus', onSpecieLinkFocus);\r\n        specieLink.removeEventListener('blur', onSpecieLinkBlur);\r\n      }\r\n    };\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    const mobileImageAlign = [\r\n      'left',\r\n      'left-with-padding',\r\n      'right',\r\n      'right-with-padding',\r\n      'center',\r\n    ];\r\n    const randomIndex = Math.floor(Math.random() * mobileImageAlign.length);\r\n    setRandomMobileImageAlign(mobileImageAlign[randomIndex]);\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    if (image && isActive) {\r\n      setTimeout(() => {\r\n        setContainerBgColor(bgColor);\r\n      }, 1);\r\n      onSpecieActive(index);\r\n    } else {\r\n      setContainerBgColor(null);\r\n    }\r\n  }, [isActive]);\r\n\r\n  return (\r\n    <div className=\"species-quick-overview-block__specie\" ref={specieRef}>\r\n      {image && (\r\n        <div\r\n          className={cn('species-quick-overview-block__specie-image-holder', {\r\n            'species-quick-overview-block__specie-image-holder_mobile-active':\r\n              !isDesktopLargerThanIpad && isActive,\r\n          })}\r\n          aria-hidden={isDesktopLargerThanIpad && !isActive}\r\n        >\r\n          <div\r\n            className={cn(\r\n              'species-quick-overview-block__specie-image-wrapper',\r\n              {\r\n                [`species-quick-overview-block__specie-image-wrapper_mobile-align_${randomMobileImageAlign}`]:\r\n                  randomMobileImageAlign && !isDesktopLargerThanIpad,\r\n                'species-quick-overview-block__specie-image-wrapper_desktop-active':\r\n                  isDesktopLargerThanIpad && isActive,\r\n              }\r\n            )}\r\n          >\r\n            <Image\r\n              {...image}\r\n              className=\"species-quick-overview-block__specie-image image_size_species-quick-overview-block\"\r\n            />\r\n          </div>\r\n        </div>\r\n      )}\r\n      <LinkButton\r\n        ref={specieLinkRef}\r\n        {...link}\r\n        isActive={!isDesktopLargerThanIpad && isActive}\r\n        className=\"species-quick-overview-block__specie-link\"\r\n      />\r\n    </div>\r\n  );\r\n};\r\n\r\nSpeciesQuickOverviewBlockSpecie.viewModelMeta = {\r\n  setContainerBgColor: 'ignore',\r\n  onSpecieActive: 'ignore',\r\n  index: 'ignore',\r\n  stayActiveOnScrollOrResize: 'ignore',\r\n};\r\n\r\nSpeciesQuickOverviewBlockSpecie.propTypes = {\r\n  link: PropTypes.exact(Link.propTypes),\r\n  image: PropTypes.exact(Image.propTypes),\r\n  bgColor: PropTypes.string.isRequired,\r\n  stayActiveOnScrollOrResize: PropTypes.bool,\r\n  index: PropTypes.number,\r\n  setContainerBgColor: PropTypes.func,\r\n  onSpecieActive: PropTypes.func,\r\n};\r\n\r\nexport default SpeciesQuickOverviewBlockSpecie;\r\n","import { useState, useEffect } from 'react';\r\n\r\nexport const SCROLL_DIRECTIONS = {\r\n  UP: 'up',\r\n  DOWN: 'down',\r\n};\r\n\r\nconst useScrollDirection = () => {\r\n  const [scrollDirection, setScrollDirection] = useState(null);\r\n\r\n  useEffect(() => {\r\n    let prevScrollY = window.scrollY;\r\n\r\n    const handleScroll = () => {\r\n      const currentScrollY = window.scrollY;\r\n\r\n      if (currentScrollY > prevScrollY) {\r\n        setScrollDirection(SCROLL_DIRECTIONS.DOWN);\r\n      } else if (currentScrollY < prevScrollY) {\r\n        setScrollDirection(SCROLL_DIRECTIONS.UP);\r\n      }\r\n\r\n      prevScrollY = currentScrollY;\r\n    };\r\n\r\n    window.addEventListener('scroll', handleScroll);\r\n\r\n    return () => {\r\n      window.removeEventListener('scroll', handleScroll);\r\n    };\r\n  }, []);\r\n\r\n  return scrollDirection;\r\n};\r\n\r\nexport default useScrollDirection;\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport PoorText from 'components/poor-text';\r\nimport SpeciesQuickOverviewBlockSpecie from './species-quick-overview-block-specie';\r\nimport Link from 'components/link';\r\nimport LinkButton from 'components/link-button';\r\n\r\nconst SpeciesQuickOverviewBlock = ({\r\n  heading,\r\n  introHtml,\r\n  species,\r\n  remainingLinks,\r\n  exploreAllLink,\r\n}) => {\r\n  const [containerBgColor, setContainerBgColor] = useState(null);\r\n  const [lastActiveSpecieIndex, setLastActiveSpecieIndex] = useState(null);\r\n\r\n  return (\r\n    <div\r\n      className=\"species-quick-overview-block\"\r\n      style={{\r\n        backgroundColor: containerBgColor,\r\n      }}\r\n    >\r\n      <div className=\"species-quick-overview-block__container\">\r\n        <div className=\"species-quick-overview-block__text-content\">\r\n          {heading && (\r\n            <h2 className=\"species-quick-overview-block__heading\">{heading}</h2>\r\n          )}\r\n          {introHtml && (\r\n            <PoorText\r\n              text={introHtml}\r\n              className=\"species-quick-overview-block__intro poor-text_in-species-quick-overview-block\"\r\n            />\r\n          )}\r\n        </div>\r\n        <div className=\"species-quick-overview-block__links-container\">\r\n          {species && (\r\n            <div className=\"species-quick-overview-block__species\">\r\n              <ul className=\"species-quick-overview-block__species-list\">\r\n                {species.map((specie, index) => {\r\n                  return (\r\n                    <li\r\n                      key={index}\r\n                      className=\"species-quick-overview-block__species-list-item\"\r\n                    >\r\n                      <SpeciesQuickOverviewBlockSpecie\r\n                        {...specie}\r\n                        setContainerBgColor={setContainerBgColor}\r\n                        index={index}\r\n                        stayActiveOnScrollOrResize={\r\n                          (index === 0 || index === species.length - 1) &&\r\n                          index === lastActiveSpecieIndex\r\n                        }\r\n                        onSpecieActive={setLastActiveSpecieIndex}\r\n                      />\r\n                    </li>\r\n                  );\r\n                })}\r\n              </ul>\r\n              {exploreAllLink && (\r\n                <LinkButton\r\n                  className=\"species-quick-overview-block__explore-all-link link-button_in-species-quick-overview-block\"\r\n                  {...exploreAllLink}\r\n                />\r\n              )}\r\n            </div>\r\n          )}\r\n          {remainingLinks && (\r\n            <ul className=\"species-quick-overview-block__remaining-links-list\">\r\n              {remainingLinks.map((link, index) => {\r\n                return (\r\n                  <li\r\n                    key={index}\r\n                    className=\"species-quick-overview-block__remaining-links-list-item\"\r\n                  >\r\n                    <Link\r\n                      {...link}\r\n                      className=\"species-quick-overview-block__remaining-link\"\r\n                    />\r\n                  </li>\r\n                );\r\n              })}\r\n            </ul>\r\n          )}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nSpeciesQuickOverviewBlock.propTypes = {\r\n  heading: PropTypes.string,\r\n  introHtml: PropTypes.string,\r\n  species: PropTypes.arrayOf(\r\n    PropTypes.exact(SpeciesQuickOverviewBlockSpecie.propTypes)\r\n  ),\r\n  remainingLinks: PropTypes.arrayOf(PropTypes.exact(Link.propTypes)),\r\n  exploreAllLink: PropTypes.exact(Link.propTypes),\r\n};\r\n\r\nexport default SpeciesQuickOverviewBlock;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport PoorText from 'components/poor-text';\r\n\r\nconst SpecimenPageHeroFact = ({ heading, textHtml }) => (\r\n  <div className=\"specimen-page-hero-fact\">\r\n    {heading && (\r\n      <strong className=\"specimen-page-hero-fact__heading\">{heading}</strong>\r\n    )}\r\n    {textHtml && <PoorText text={textHtml} />}\r\n  </div>\r\n);\r\n\r\nSpecimenPageHeroFact.viewModelMeta = 'ignore';\r\n\r\nSpecimenPageHeroFact.propTypes = {\r\n  heading: PropTypes.string,\r\n  textHtml: PropTypes.string,\r\n};\r\n\r\nexport default SpecimenPageHeroFact;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Image from 'components/image';\r\nimport Link from 'components/link';\r\nimport LinkButton, {\r\n  sizes as linkButtonSizes,\r\n  arrowDirections as linkButtonArrowDirections,\r\n} from 'components/link-button';\r\nimport PageHeading from 'components/page-heading';\r\nimport PoorText from 'components/poor-text';\r\nimport ParallaxHeroBackground from 'components/parallax-hero-background';\r\nimport useAnimationStepSwitcher, {\r\n  ANIMATION_STEPS,\r\n} from 'hooks/use-animation-step-switcher';\r\nimport useBreakpoints from 'hooks/use-breakpoints';\r\nimport SpecimenPageHeroFact from './specimen-page-hero-fact';\r\nimport { calculateInterpolatedValue } from 'js/calc-utils';\r\nimport { Parallax } from 'react-parallax';\r\nimport cn from 'classnames';\r\n\r\nconst SpecimenPageHero = ({\r\n  heading,\r\n  introHtml,\r\n  image,\r\n  allSpeciesLink,\r\n  backgroundColor,\r\n  nutritionalInformationHtml,\r\n  catchRangeHtml,\r\n  seasonHtml,\r\n  lang,\r\n}) => {\r\n  const { isMobile } = useBreakpoints(true);\r\n  const animationCurrentStep = useAnimationStepSwitcher(\r\n    ANIMATION_STEPS.twoLayersHero\r\n  );\r\n\r\n  return (\r\n    <div className=\"specimen-page-hero\">\r\n      <ParallaxHeroBackground\r\n        backgroundColor={backgroundColor}\r\n        useParallaxOnMobile={false}\r\n        className={cn('specimen-page-hero__background', {\r\n          'specimen-page-hero__background_visible': animationCurrentStep > 0,\r\n        })}\r\n      />\r\n      <div\r\n        className={cn('specimen-page-hero__container', {\r\n          'specimen-page-hero__container_tall': animationCurrentStep > 2,\r\n        })}\r\n      >\r\n        <div\r\n          className={cn('specimen-page-hero__content', {\r\n            'specimen-page-hero__content_visible': animationCurrentStep > 1,\r\n          })}\r\n        >\r\n          {allSpeciesLink && (\r\n            <LinkButton\r\n              className=\"specimen-page-hero__all-species-link\"\r\n              size={linkButtonSizes.small}\r\n              arrowDirection={linkButtonArrowDirections.left}\r\n              {...allSpeciesLink}\r\n            />\r\n          )}\r\n          {heading && (\r\n            <PageHeading\r\n              text={heading}\r\n              className=\"specimen-page-hero__heading\"\r\n            />\r\n          )}\r\n          <div className=\"specimen-page-hero__text-holder\">\r\n            {introHtml && (\r\n              <PoorText\r\n                text={introHtml}\r\n                className=\"specimen-page-hero__intro poor-text_in-specimen-page-hero\"\r\n              />\r\n            )}\r\n          </div>\r\n        </div>\r\n        <div className=\"specimen-page-hero__image-holder\">\r\n          <Parallax\r\n            style={{\r\n              overflow: 'visible',\r\n            }}\r\n            renderLayer={percentage => {\r\n              const maxPercentage = 1.3;\r\n              const maxImageColPadding = 60;\r\n              let imageColPadding = 0;\r\n\r\n              if (percentage > maxPercentage) {\r\n                imageColPadding = maxImageColPadding;\r\n              } else {\r\n                imageColPadding = calculateInterpolatedValue(\r\n                  percentage,\r\n                  maxImageColPadding,\r\n                  maxPercentage\r\n                );\r\n              }\r\n\r\n              return (\r\n                <div\r\n                  style={{\r\n                    paddingLeft: isMobile\r\n                      ? 0\r\n                      : maxImageColPadding - imageColPadding,\r\n                  }}\r\n                >\r\n                  <div\r\n                    className={cn('specimen-page-hero__image-holder-overlay', {\r\n                      'specimen-page-hero__image-holder-overlay_visible':\r\n                        animationCurrentStep > 0,\r\n                      'specimen-page-hero__image-holder-overlay_tight':\r\n                        animationCurrentStep <= 2,\r\n                    })}\r\n                  >\r\n                    <div className=\"specimen-page-hero__image-centered-overlay\">\r\n                      <div className=\"specimen-page-hero__image-centered-overlay\">\r\n                        <Image\r\n                          {...image}\r\n                          className=\"specimen-page-hero__image image_size_specimen-page-hero\"\r\n                        />\r\n                      </div>\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n              );\r\n            }}\r\n          />\r\n        </div>\r\n        <div\r\n          className={cn('specimen-page-hero__facts', {\r\n            'specimen-page-hero__facts_visible': animationCurrentStep > 1,\r\n          })}\r\n        >\r\n          {nutritionalInformationHtml && (\r\n            <SpecimenPageHeroFact\r\n              heading={lang.nutritionalInformationLabel}\r\n              textHtml={nutritionalInformationHtml}\r\n            />\r\n          )}\r\n          {catchRangeHtml && (\r\n            <SpecimenPageHeroFact\r\n              heading={lang.catchRangeLabel}\r\n              textHtml={catchRangeHtml}\r\n            />\r\n          )}\r\n          {seasonHtml && (\r\n            <SpecimenPageHeroFact\r\n              heading={lang.seasonLabel}\r\n              textHtml={seasonHtml}\r\n            />\r\n          )}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nSpecimenPageHero.propTypes = {\r\n  heading: PropTypes.string,\r\n  introHtml: PropTypes.string,\r\n  image: PropTypes.exact(Image.propTypes),\r\n  allSpeciesLink: PropTypes.exact(Link.propTypes),\r\n  backgroundColor: PropTypes.string,\r\n  nutritionalInformationHtml: PropTypes.string,\r\n  catchRangeHtml: PropTypes.string,\r\n  seasonHtml: PropTypes.string,\r\n  lang: PropTypes.shape({\r\n    nutritionalInformationLabel: PropTypes.string.isRequired,\r\n    catchRangeLabel: PropTypes.string.isRequired,\r\n    seasonLabel: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n};\r\n\r\nexport default SpecimenPageHero;\r\n","import React from 'react';\r\nimport Image from 'components/image';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\nimport useBreakpoints from 'hooks/use-breakpoints';\r\n\r\nconst SpecimenSearchTeaser = ({\r\n  url,\r\n  heading,\r\n  image,\r\n  categoryLabel,\r\n  className,\r\n}) => {\r\n  const { isMobile } = useBreakpoints(true);\r\n\r\n  return (\r\n    <a\r\n      href={url}\r\n      className={cn('specimen-search-teaser', {\r\n        [className]: className,\r\n      })}\r\n    >\r\n      <div\r\n        className=\"specimen-search-teaser__background\"\r\n        role=\"presentation\"\r\n      ></div>\r\n      <div className=\"specimen-search-teaser__container\">\r\n        <div className=\"specimen-search-teaser__image-aligner\">\r\n          <div\r\n            className={cn('specimen-search-teaser__image-holder', {\r\n              'specimen-search-teaser__image-holder_no-image': !image,\r\n            })}\r\n          >\r\n            {image && (\r\n              <Image\r\n                {...image}\r\n                fluid={isMobile}\r\n                className=\"specimen-search-teaser__image image_size_specimen-search-teaser\"\r\n              />\r\n            )}\r\n          </div>\r\n        </div>\r\n        <div className=\"specimen-search-teaser__content\">\r\n          {categoryLabel && (\r\n            <span className=\"specimen-search-teaser__category\">\r\n              {categoryLabel}\r\n            </span>\r\n          )}\r\n          {heading && (\r\n            <h2 className=\"specimen-search-teaser__heading\">\r\n              <span className=\"specimen-search-teaser__heading-text\">\r\n                {heading}\r\n              </span>\r\n            </h2>\r\n          )}\r\n        </div>\r\n      </div>\r\n    </a>\r\n  );\r\n};\r\n\r\nSpecimenSearchTeaser.propTypes = {\r\n  id: PropTypes.string,\r\n  url: PropTypes.string,\r\n  heading: PropTypes.string,\r\n  className: PropTypes.string,\r\n  image: PropTypes.exact(Image.propTypes),\r\n  categoryLabel: PropTypes.string,\r\n};\r\n\r\nSpecimenSearchTeaser.viewModelMeta = {\r\n  className: 'ignore',\r\n};\r\n\r\nexport default SpecimenSearchTeaser;\r\n","import React from 'react';\r\nimport Image from 'components/image';\r\nimport Logo from 'components/logo';\r\nimport Link from 'components/link';\r\nimport Button from 'components/button';\r\nimport PoorText from 'components/poor-text';\r\nimport OriginMatters from 'components/origin-matters';\r\nimport stringHelper from 'js/string-helper';\r\nimport PropTypes from 'prop-types';\r\nimport cn from 'classnames';\r\n\r\nconst SpecimenTeaserBlock = ({\r\n  className,\r\n  heading,\r\n  image,\r\n  nutritionalInformationHtml,\r\n  seasonHtml,\r\n  howToBuyLogo,\r\n  lang,\r\n  learnMoreLink,\r\n}) => {\r\n  return (\r\n    <div className={cn('specimen-teaser-block', className)}>\r\n      <div className=\"specimen-teaser-block__container\">\r\n        <div className=\"specimen-teaser-block__image-holder\">\r\n          {image && (\r\n            <Image\r\n              {...image}\r\n              className=\"specimen-teaser-block__image image_size_specimen-teaser-block\"\r\n            />\r\n          )}\r\n          <OriginMatters\r\n            text={lang.originMattersLabel}\r\n            className=\"specimen-teaser-block__slogan\"\r\n          />\r\n        </div>\r\n        <div className=\"specimen-teaser-block__content\">\r\n          <span className=\"specimen-teaser-block__category\">\r\n            {lang.seafoodUsedInRecipeLabel}\r\n          </span>\r\n          {heading && (\r\n            <h2 className=\"specimen-teaser-block__heading\">{heading}</h2>\r\n          )}\r\n          <div className=\"specimen-teaser-block__facts\">\r\n            {nutritionalInformationHtml && (\r\n              <div className=\"specimen-teaser-block__fact\">\r\n                <strong className=\"specimen-teaser-block__fact-heading\">\r\n                  {lang.nutritionalInformationLabel}\r\n                </strong>\r\n                {nutritionalInformationHtml && (\r\n                  <PoorText text={nutritionalInformationHtml} />\r\n                )}\r\n              </div>\r\n            )}\r\n            {seasonHtml && (\r\n              <div className=\"specimen-teaser-block__fact\">\r\n                <strong className=\"specimen-teaser-block__fact-heading\">\r\n                  {lang.seasonLabel}\r\n                </strong>\r\n                {seasonHtml && <PoorText text={seasonHtml} />}\r\n              </div>\r\n            )}\r\n            <div className=\"specimen-teaser-block__fact\">\r\n              <strong className=\"specimen-teaser-block__fact-heading\">\r\n                {stringHelper.format(lang.howToBuyLabel, heading)}\r\n              </strong>\r\n              <div className=\"specimen-teaser-block__fact-logo-content\">\r\n                {howToBuyLogo && (\r\n                  <Logo\r\n                    {...howToBuyLogo}\r\n                    className=\"specimen-teaser-block__logo\"\r\n                    imageClass=\"image_size_specimen-teaser-block-logo\"\r\n                  />\r\n                )}\r\n                <p>{lang.howToBuyText}</p>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          {learnMoreLink && (\r\n            <div className=\"specimen-teaser-block__button-holder\">\r\n              <Button\r\n                className=\"specimen-teaser-block__button\"\r\n                {...learnMoreLink}\r\n              />\r\n            </div>\r\n          )}\r\n          <OriginMatters\r\n            text={lang.originMattersLabel}\r\n            className=\"specimen-teaser-block__slogan specimen-teaser-block__slogan_mobile\"\r\n          />\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nSpecimenTeaserBlock.propTypes = {\r\n  className: PropTypes.string,\r\n  heading: PropTypes.string,\r\n  image: PropTypes.exact(Image.propTypes),\r\n  nutritionalInformationHtml: PropTypes.string,\r\n  seasonHtml: PropTypes.string,\r\n  howToBuyLogo: PropTypes.exact(Logo.propTypes),\r\n  lang: PropTypes.shape({\r\n    nutritionalInformationLabel: PropTypes.string.isRequired,\r\n    seasonLabel: PropTypes.string.isRequired,\r\n    originMattersLabel: PropTypes.string.isRequired,\r\n    seafoodUsedInRecipeLabel: PropTypes.string.isRequired,\r\n    howToBuyText: PropTypes.string.isRequired,\r\n    howToBuyLabel: PropTypes.string.isRequired,\r\n  }).isRequired,\r\n  learnMoreLink: PropTypes.exact(Link.propTypes),\r\n};\r\n\r\nSpecimenTeaserBlock.viewModelMeta = {\r\n  className: 'ignore',\r\n};\r\n\r\nexport default SpecimenTeaserBlock;\r\n","import React, { useState, useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport apiHelper from 'js/api-helper';\r\nimport formHelper from 'js/form-helper';\r\nimport useDidUpdateEffect from 'hooks/use-did-update-effect';\r\nimport useBreakpoints from 'hooks/use-breakpoints';\r\nimport PagerLang from 'components/models/pager-lang/pager-lang';\r\nimport ErrorMessage from 'components/error-message/error-message';\r\nimport StoryTeaser from 'components/story-teaser/story-teaser';\r\nimport storyTeaserSizes from 'components/story-teaser/story-teaser-sizes';\r\nimport NoResults from 'components/no-results/no-results';\r\nimport LoadingIndicator from 'components/loading-indicator/loading-indicator';\r\nimport Pager from 'components/pager/pager';\r\nimport storyTeaserOrientations from 'components/story-teaser/story-teaser-orientations';\r\nimport cn from 'classnames';\r\n\r\nconst pageNumberQueryParamName = 'page';\r\n\r\nconst getTeaserSize = (colCount, teasersCount) => {\r\n  if (colCount > 1 && teasersCount === 1) {\r\n    return storyTeaserSizes.medium;\r\n  } else if (colCount > 1 && teasersCount > 1) {\r\n    return storyTeaserSizes.small;\r\n  }\r\n\r\n  return storyTeaserSizes.large;\r\n};\r\n\r\nconst StoriesOverviewList = ({ loadItemsEndpoint, lang }) => {\r\n  const [results, setResults] = useState(null);\r\n  const [query, setQuery] = useState(formHelper.createQuery());\r\n  const [showError, setShowError] = useState(false);\r\n  const [isLoading, setIsLoading] = useState(false);\r\n\r\n  const { isMobile } = useBreakpoints(true);\r\n\r\n  // eslint-disable-next-line no-unused-vars\r\n  const updateQuery = (updateFunc = q => {}) => {\r\n    setQuery(q => {\r\n      q = Object.assign({}, q);\r\n      updateFunc(q);\r\n      return q;\r\n    });\r\n  };\r\n\r\n  const loadItems = () => {\r\n    setShowError(false);\r\n    setIsLoading(true);\r\n    apiHelper\r\n      .execute(loadItemsEndpoint, query)\r\n      .then(results => {\r\n        setResults(results);\r\n      })\r\n      .catch(() => {\r\n        setShowError(true);\r\n      })\r\n      .finally(() => {\r\n        setIsLoading(false);\r\n      });\r\n  };\r\n\r\n  const init = () => {\r\n    updateQuery(q => formHelper.fillQueryFromPageQueryString(q));\r\n  };\r\n\r\n  useDidUpdateEffect(() => {\r\n    formHelper.updatePageQueryString(query);\r\n    loadItems();\r\n  }, [query]);\r\n\r\n  useDidUpdateEffect(() => {\r\n    window.scrollTo({ top: 0, behavior: 'smooth' });\r\n  }, [results?.pager?.page]);\r\n\r\n  useEffect(() => {\r\n    init();\r\n  }, []);\r\n\r\n  const teaserRows = useMemo(() => {\r\n    const output = [];\r\n    let index = 0;\r\n    const source = results?.items;\r\n\r\n    if (source && source.length > 0) {\r\n      output.push([[source[index]]]);\r\n      index++;\r\n\r\n      while (index < source.length) {\r\n        let pattern = [];\r\n        const remainingItemsCount = source.length - index;\r\n\r\n        if (remainingItemsCount < 3) {\r\n          source[index] && pattern.push([source[index]]);\r\n          source[index + 1] && pattern.push([source[index + 1]]);\r\n        } else {\r\n          if (index % 2 !== 0) {\r\n            source[index] && pattern.push([source[index]]);\r\n            source[index + 1] && pattern.push([source[index + 1]]);\r\n            source[index + 2] && pattern[1].push(source[index + 2]);\r\n          } else {\r\n            source[index] && pattern.push([source[index]]);\r\n            source[index + 1] && pattern[0].push(source[index + 1]);\r\n            source[index + 2] && pattern.push([source[index + 2]]);\r\n          }\r\n        }\r\n\r\n        output.push(pattern);\r\n        index += 3;\r\n      }\r\n    }\r\n\r\n    return output;\r\n  }, [results?.items]);\r\n\r\n  const onPageChange = page => {\r\n    updateQuery(q => (q[pageNumberQueryParamName] = page));\r\n  };\r\n\r\n  return (\r\n    <div className=\"stories-overview-list\">\r\n      <div className=\"stories-overview-list__results-container\">\r\n        {teaserRows && teaserRows.length > 0 ? (\r\n          <div className=\"stories-overview-list__rows\">\r\n            {teaserRows.map((row, rowIndex) => (\r\n              <div className=\"stories-overview-list__row\" key={rowIndex}>\r\n                {row &&\r\n                  row.map((col, colIndex) => {\r\n                    return (\r\n                      <div\r\n                        className={cn('stories-overview-list__col', {\r\n                          'stories-overview-list__col_fullwidth':\r\n                            row.length === 1,\r\n                          'stories-overview-list__col_mobile-stretched':\r\n                            row.length === 2 && col.length === 2,\r\n                        })}\r\n                        key={colIndex}\r\n                      >\r\n                        {col &&\r\n                          col.map(teaser => {\r\n                            return (\r\n                              <div\r\n                                className={cn(\r\n                                  'stories-overview-list__teaser-item'\r\n                                )}\r\n                                key={teaser.id}\r\n                              >\r\n                                <StoryTeaser\r\n                                  {...teaser}\r\n                                  size={getTeaserSize(row.length, col.length)}\r\n                                  orientation={\r\n                                    isMobile && col.length > 1\r\n                                      ? storyTeaserOrientations.horizontal\r\n                                      : storyTeaserOrientations.vertical\r\n                                  }\r\n                                  className=\"stories-overview-list__teaser\"\r\n                                />\r\n                              </div>\r\n                            );\r\n                          })}\r\n                      </div>\r\n                    );\r\n                  })}\r\n              </div>\r\n            ))}\r\n          </div>\r\n        ) : null}\r\n        {results?.items && results.items.length === 0 && (\r\n          <NoResults\r\n            heading={lang.noListResultsHeading}\r\n            text={lang.noListResultsText}\r\n          />\r\n        )}\r\n        {showError && <ErrorMessage text={lang.errorMessage} />}\r\n        {results?.pager && (\r\n          <Pager\r\n            {...results?.pager}\r\n            page={+query?.page || 1}\r\n            className=\"stories-overview-list__pager\"\r\n            lang={lang.pager}\r\n            onPageChange={onPageChange}\r\n          />\r\n        )}\r\n        {isLoading && <LoadingIndicator />}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nStoriesOverviewList.propTypes = {\r\n  loadItemsEndpoint: PropTypes.string.isRequired,\r\n  lang: PropTypes.shape({\r\n    errorMessage: PropTypes.string.isRequired,\r\n    noListResultsHeading: PropTypes.string.isRequired,\r\n    noListResultsText: PropTypes.string.isRequired,\r\n    pager: PropTypes.shape(PagerLang.propTypes).isRequired,\r\n  }),\r\n};\r\n\r\nexport default StoriesOverviewList;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Link from 'components/link';\r\nimport StoryTeaser from 'components/story-teaser/story-teaser';\r\nimport LinkButton, {\r\n  sizes as linkButtonSizes,\r\n  arrowDirections as linkButtonArrowDirections,\r\n} from 'components/link-button';\r\nimport storyTeaserSizes from 'components/story-teaser/story-teaser-sizes';\r\nimport cn from 'classnames';\r\n\r\nconst StoryTeasersBlock = ({ heading, story1, story2, showMoreLink }) => {\r\n  const storySize =\r\n    story1 && story2 ? storyTeaserSizes.medium : storyTeaserSizes.large;\r\n\r\n  const storyHeadingTagLevel = heading ? 3 : 2;\r\n\r\n  return (\r\n    <div className=\"story-teasers-block\">\r\n      <div\r\n        className={cn('story-teasers-block__container', {\r\n          'story-teasers-block__container_2teasers': story1 && story2,\r\n        })}\r\n      >\r\n        {heading && <h2 className=\"story-teasers-block__heading\">{heading}</h2>}\r\n        <div className=\"story-teasers-block__teasers-wrapper\">\r\n          {story1 && (\r\n            <StoryTeaser\r\n              {...story1}\r\n              size={storySize}\r\n              headingTagLevel={storyHeadingTagLevel}\r\n            />\r\n          )}\r\n          {story2 && (\r\n            <StoryTeaser\r\n              {...story2}\r\n              size={storySize}\r\n              headingTagLevel={storyHeadingTagLevel}\r\n            />\r\n          )}\r\n        </div>\r\n        {showMoreLink && (\r\n          <LinkButton\r\n            className=\"story-teasers-block__show-more-link\"\r\n            size={linkButtonSizes.small}\r\n            arrowDirection={linkButtonArrowDirections.right}\r\n            {...showMoreLink}\r\n          />\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nStoryTeasersBlock.propTypes = {\r\n  heading: PropTypes.string,\r\n  story1: PropTypes.exact(StoryTeaser.propTypes),\r\n  story2: PropTypes.exact(StoryTeaser.propTypes),\r\n  showMoreLink: PropTypes.exact(Link.propTypes),\r\n};\r\n\r\nexport default StoryTeasersBlock;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Image from 'components/image';\r\nimport { Parallax } from 'react-parallax';\r\nimport ParallaxBgImage from 'components/parallax-bg-image/parallax-bg-image';\r\nimport ParallaxText from 'components/parallax-text/parallax-text';\r\n\r\nconst TextWithBackgroundBlock = ({\r\n  text,\r\n  textBackgroundColor,\r\n  textColor,\r\n  backgroundImage,\r\n}) => {\r\n  return (\r\n    <div className=\"block_no-gap text-with-background-block\">\r\n      <ParallaxBgImage\r\n        imageClassName=\"image_size_text-with-background-block\"\r\n        backgroundImage={backgroundImage}\r\n      />\r\n      <div className=\"text-with-background-block__container\">\r\n        <div className=\"text-with-background-block__inner\">\r\n          <Parallax\r\n            className=\"text-with-background-block__text-animation-container\"\r\n            renderLayer={percentage => (\r\n              <>\r\n                {text && (\r\n                  <ParallaxText\r\n                    text={text}\r\n                    percentage={percentage}\r\n                    textBackgroundColor={textBackgroundColor}\r\n                    textColor={textColor}\r\n                  />\r\n                )}\r\n              </>\r\n            )}\r\n          ></Parallax>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\nTextWithBackgroundBlock.propTypes = {\r\n  text: PropTypes.string,\r\n  textBackgroundColor: PropTypes.string,\r\n  textColor: PropTypes.string,\r\n  backgroundImage: PropTypes.exact(Image.propTypes),\r\n};\r\n\r\nexport default TextWithBackgroundBlock;\r\n","var React = require('react');\n\nfunction Linkedin (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.06 2.06 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065m1.782 13.019H3.555V9h3.564zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0z\"}));\n}\n\nLinkedin.defaultProps = {\"fill\":\"none\",\"aria-labelledby\":\"simpleicons-linkedin-icon\",\"viewBox\":\"0 0 24 24\"};\n\nmodule.exports = Linkedin;\n\nLinkedin.default = Linkedin;\n","var React = require('react');\n\nfunction ArrowLeft (props) {\n    return React.createElement(\"svg\",props,[React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M2.97 12.61h29v3.6h-29z\",\"key\":0}),React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M-.008 13.998 13.993-.003l2.546 2.545L2.538 16.543z\",\"key\":1}),React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"m1.218 15.172 2.546-2.546 12.799 12.799-2.546 2.545z\",\"key\":2})]);\n}\n\nArrowLeft.defaultProps = {\"viewBox\":\"0 0 31.97 27.97\"};\n\nmodule.exports = ArrowLeft;\n\nArrowLeft.default = ArrowLeft;\n","const ANIMATION_PERCENTAGE = {\r\n  text: 0.4,\r\n};\r\n\r\nmodule.exports.default = module.exports.ANIMATION_PERCENTAGE =\r\n  ANIMATION_PERCENTAGE;\r\n","var React = require('react');\n\nfunction Menu (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M20.5 14H.5v-2h20zm0-6H.5V6h20zm0-6H.5V0h20z\"}));\n}\n\nMenu.defaultProps = {\"width\":\"21\",\"height\":\"14\",\"fill\":\"none\"};\n\nmodule.exports = Menu;\n\nMenu.default = Menu;\n","const req = require.context('./', true, /\\.svg$/);\r\n\r\nexport default req.keys().reduce((icons, filename) => {\r\n  const id = filename.replace('./', '').replace('.svg', '');\r\n  return { ...icons, [id]: req(filename) };\r\n}, {});\r\n","/*\r\n * Minimal classList shim for IE 9\r\n * By Devon Govett\r\n * MIT LICENSE\r\n */\r\n\r\n// NOTE: https://gist.github.com/devongovett/1381839\r\n\r\nfunction activate() {\r\n  if (\r\n    !('classList' in document.documentElement) &&\r\n    Object.defineProperty &&\r\n    typeof HTMLElement !== 'undefined'\r\n  ) {\r\n    Object.defineProperty(HTMLElement.prototype, 'classList', {\r\n      get: function () {\r\n        var self = this;\r\n        function update(fn) {\r\n          return function (value) {\r\n            var classes = self.className.split(/\\s+/),\r\n              index = classes.indexOf(value);\r\n\r\n            fn(classes, index, value);\r\n            self.className = classes.join(' ');\r\n          };\r\n        }\r\n\r\n        var ret = {\r\n          add: update(function (classes, index, value) {\r\n            ~index || classes.push(value);\r\n          }),\r\n\r\n          remove: update(function (classes, index) {\r\n            ~index && classes.splice(index, 1);\r\n          }),\r\n\r\n          toggle: update(function (classes, index, value) {\r\n            ~index ? classes.splice(index, 1) : classes.push(value);\r\n          }),\r\n\r\n          contains: function (value) {\r\n            return !!~self.className.split(/\\s+/).indexOf(value);\r\n          },\r\n\r\n          item: function (i) {\r\n            return self.className.split(/\\s+/)[i] || null;\r\n          },\r\n        };\r\n\r\n        Object.defineProperty(ret, 'length', {\r\n          get: function () {\r\n            return self.className.split(/\\s+/).length;\r\n          },\r\n        });\r\n\r\n        return ret;\r\n      },\r\n    });\r\n  }\r\n}\r\n\r\nexport default {\r\n  activate,\r\n};\r\n","import classListPolyfill from './polyfills/class-list';\r\n\r\n/* NOTE: https://www.html5rocks.com/en/mobile/touchandmouse/\r\n  First, you have to be careful when designing more advanced touch interactions:\r\n  when the user uses a mouse it will respond via a click event, but when the user\r\n  touches the screen both touch and click events will occur.\r\n\r\n  For a single click the order of events is:\r\n\r\n  1. touchstart\r\n  2. touchmove\r\n  3. touchend\r\n  4. mouseover\r\n  5. mousemove\r\n  6. mousedown\r\n  7. mouseup\r\n  8. click\r\n*/\r\n\r\nfunction activate() {\r\n  let touchEndHappened = false;\r\n\r\n  classListPolyfill.activate();\r\n\r\n  const onMouseDown = () => {\r\n    if (touchEndHappened) {\r\n      return;\r\n    }\r\n\r\n    document.documentElement.classList.add('mouse-user');\r\n    document.documentElement.classList.add('no-touchevents');\r\n    document.documentElement.classList.remove('touchevents');\r\n  };\r\n\r\n  const onTouchEnd = () => {\r\n    touchEndHappened = true;\r\n    setTimeout(() => {\r\n      touchEndHappened = false;\r\n    }, 100);\r\n  };\r\n\r\n  const onTouchStart = () => {\r\n    document.documentElement.classList.add('mouse-user');\r\n    document.documentElement.classList.add('touchevents');\r\n    document.documentElement.classList.remove('no-touchevents');\r\n  };\r\n\r\n  document.addEventListener('touchstart', onTouchStart);\r\n  document.addEventListener('touchend', onTouchEnd);\r\n  document.addEventListener('mousedown', onMouseDown);\r\n\r\n  const keyCodeWhiteList = [9, 33, 34, 35, 36, 37, 38, 39, 40];\r\n\r\n  document.addEventListener('keydown', e => {\r\n    if (keyCodeWhiteList.indexOf(e.which) !== -1) {\r\n      document.documentElement.classList.remove('mouse-user');\r\n    }\r\n  });\r\n}\r\n\r\nexport default {\r\n  activate,\r\n};\r\n","import inputDetection from './input-detection';\r\n\r\ninputDetection.activate();\r\n","var React = require('react');\n\nfunction Search (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M17.932 16.274a10.05 10.05 0 0 0 2.16-6.22C20.091 4.522 15.58 0 10.031 0S0 4.52 0 10.055C0 15.589 4.51 20.11 10.032 20.11c2.214 0 4.428-.768 6.205-2.165L22.277 24 24 22.274zm-7.9 1.452c-4.182 0-7.6-3.425-7.6-7.616 0-4.192 3.418-7.617 7.6-7.617s7.599 3.425 7.599 7.617c0 4.191-3.417 7.616-7.599 7.616\"}));\n}\n\nSearch.defaultProps = {\"width\":\"24\",\"height\":\"24\",\"fill\":\"none\"};\n\nmodule.exports = Search;\n\nSearch.default = Search;\n","var React = require('react');\n\nfunction ArrowUp (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"#fff\",\"d\":\"m0 8 1.5 1.5L7 4v12h2V4l5.5 5.5L16 8 8 0z\"}));\n}\n\nArrowUp.defaultProps = {\"width\":\"16\",\"height\":\"16\",\"fill\":\"none\"};\n\nmodule.exports = ArrowUp;\n\nArrowUp.default = ArrowUp;\n","var React = require('react');\n\nfunction CookingTime (props) {\n    return React.createElement(\"svg\",props,[React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M12 0C5.383 0 0 5.383 0 12s5.383 12 12 12 12-5.383 12-12S18.617 0 12 0m0 21.601c-5.294 0-9.601-4.307-9.601-9.601S6.706 2.399 12 2.399 21.601 6.706 21.601 12 17.294 21.601 12 21.601\",\"key\":0}),React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M13.2 4.238h-2.4v8.421l.85.542 6.068 3.87 1.29-2.024-5.809-3.703z\",\"key\":1})]);\n}\n\nCookingTime.defaultProps = {\"width\":\"24\",\"height\":\"24\",\"fill\":\"none\"};\n\nmodule.exports = CookingTime;\n\nCookingTime.default = CookingTime;\n","var React = require('react');\n\nfunction ChevronDown (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"stroke\":\"currentColor\",\"strokeWidth\":\"2.5\",\"d\":\"m1 1.5 7 7 7-7\"}));\n}\n\nChevronDown.defaultProps = {\"width\":\"16\",\"height\":\"11\",\"fill\":\"none\"};\n\nmodule.exports = ChevronDown;\n\nChevronDown.default = ChevronDown;\n","var React = require('react');\n\nfunction Rating (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"m12 5.467 1.566 3.212.555 1.14 1.244.183 3.5.515-2.534 2.5-.899.888.213 1.254.598 3.53-3.131-1.667L12 16.43l-1.112.592-3.131 1.666.598-3.53.212-1.253-.9-.888-2.532-2.5 3.5-.515 1.243-.182.556-1.141zM12 0 8.292 7.608 0 8.828l6 5.922-1.416 8.361L12 19.163l7.416 3.948L18 14.751l6-5.923-8.291-1.22z\"}));\n}\n\nRating.defaultProps = {\"width\":\"24\",\"height\":\"24\",\"fill\":\"none\"};\n\nmodule.exports = Rating;\n\nRating.default = Rating;\n","var map = {\n\t\"./arrow-down.svg\": 3210,\n\t\"./arrow-left.svg\": 5409,\n\t\"./arrow-right.svg\": 2748,\n\t\"./arrow-up.svg\": 8345,\n\t\"./check.svg\": 2782,\n\t\"./chevron-down.svg\": 9404,\n\t\"./chevron-up.svg\": 1639,\n\t\"./cooking-time.svg\": 8908,\n\t\"./copy.svg\": 4317,\n\t\"./difficulty-level.svg\": 4028,\n\t\"./facebook.svg\": 1874,\n\t\"./instagram.svg\": 1446,\n\t\"./linkedin.svg\": 5272,\n\t\"./mail.svg\": 1515,\n\t\"./menu-close.svg\": 2924,\n\t\"./menu.svg\": 5775,\n\t\"./minus-sign.svg\": 232,\n\t\"./phone.svg\": 3790,\n\t\"./play-filled.svg\": 2977,\n\t\"./play.svg\": 3324,\n\t\"./plus-sign.svg\": 1616,\n\t\"./rating.svg\": 9417,\n\t\"./search.svg\": 7286,\n\t\"./share.svg\": 3907,\n\t\"./star-empty.svg\": 3818,\n\t\"./star-full.svg\": 3964,\n\t\"./twitter.svg\": 9887\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 9477;","var React = require('react');\n\nfunction Twitter (props) {\n    return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M27.009 3.434c-.83.405-1.753.648-2.656.811.427-.078 1.056-.903 1.306-1.243.385-.51.703-1.093.88-1.722.024-.045.042-.11 0-.15-.055-.026-.098-.013-.14.013a13 13 0 0 1-3.146 1.29c-.091.025-.158 0-.22-.06-.09-.11-.176-.216-.274-.3a5.6 5.6 0 0 0-1.527-1.002 5.05 5.05 0 0 0-2.338-.406 5.2 5.2 0 0 0-2.217.674 5.9 5.9 0 0 0-1.79 1.564 6 6 0 0 0-1.068 2.298c-.183.805-.17 1.603-.055 2.421.018.138 0 .15-.11.138-4.33-.687-7.908-2.343-10.82-5.897-.129-.157-.196-.157-.3.013-1.27 2.042-.653 5.327.935 6.944.213.216.427.432.665.628-.085.02-1.142-.104-2.088-.628-.128-.085-.19-.04-.202.118-.012.222 0 .425.037.66.244 2.076 1.582 3.993 3.42 4.74.22.098.458.183.696.228-.415.099-.85.17-2.046.066-.146-.033-.208.052-.146.203.897 2.63 2.845 3.416 4.298 3.861.196.04.391.04.587.085-.013.02-.025.02-.037.04-.482.791-2.156 1.374-2.937 1.668-1.417.53-2.962.773-4.458.616-.238-.04-.293-.033-.354 0-.067.046-.006.104.067.17.305.216.61.406.928.589.953.543 1.942.968 2.98 1.276 5.362 1.584 11.395.419 15.419-3.861 3.157-3.364 4.268-8.005 4.268-12.651 0-.184.202-.282.318-.38.824-.661 1.484-1.453 2.1-2.337.141-.196.141-.373.141-.445V3.44c0-.072 0-.052-.11 0z\"}));\n}\n\nTwitter.defaultProps = {\"fill\":\"none\",\"viewBox\":\"0 0 28 24\"};\n\nmodule.exports = Twitter;\n\nTwitter.default = Twitter;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + {\"42\":\"reactPlayerTwitch\",\"173\":\"reactPlayerVimeo\",\"328\":\"reactPlayerDailyMotion\",\"340\":\"reactPlayerWistia\",\"353\":\"reactPlayerPreview\",\"392\":\"reactPlayerVidyard\",\"446\":\"reactPlayerYouTube\",\"458\":\"reactPlayerFilePlayer\",\"463\":\"reactPlayerKaltura\",\"570\":\"reactPlayerMixcloud\",\"627\":\"reactPlayerStreamable\",\"723\":\"reactPlayerMux\",\"887\":\"reactPlayerFacebook\",\"979\":\"reactPlayerSoundCloud\"}[chunkId] + \".\" + {\"42\":\"ba6a2fec2eac15742673\",\"173\":\"9fb68df4d5e2fd556316\",\"328\":\"ff2c9ca3051233a86aa2\",\"340\":\"9af379b604f13b17e6bb\",\"353\":\"7c1ae86495a02a3e24a8\",\"392\":\"bf92bba78efcf1698669\",\"446\":\"24da1538b6bdf3ad891f\",\"458\":\"fcaf8545b3eae0cb09b3\",\"463\":\"99f2ee73385b6e2908d2\",\"570\":\"c21d1037940e84fdc018\",\"627\":\"be55c1986ed3bc15183a\",\"723\":\"355d371c9d1a626c5aae\",\"887\":\"ed8159fb20ec7b14ca32\",\"979\":\"4c39fa97381a0cee3374\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/Marketsites/Frontend/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t818: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = globalThis[\"webpackChunkB2C_Marketsites_redesign\"] = globalThis[\"webpackChunkB2C_Marketsites_redesign\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\n__webpack_require__.O(undefined, [121], () => (__webpack_require__(8624)))\n__webpack_require__.O(undefined, [121], () => (__webpack_require__(6472)))\n__webpack_require__.O(undefined, [121], () => (__webpack_require__(5348)))\n__webpack_require__.O(undefined, [121], () => (__webpack_require__(1038)))\nvar __webpack_exports__ = __webpack_require__.O(undefined, [121], () => (__webpack_require__(273)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","React","MinusSign","props","createElement","defaultProps","module","exports","default","___EXPOSE_LOADER_IMPORT___","___EXPOSE_LOADER_GLOBAL_THIS___","Instagram","Mail","PlusSign","ChevronUp","Facebook","ArrowRight","Check","MenuClose","PlayFilled","ArrowDown","Play","Phone","StarEmpty","Share","StarFull","DifficultyLevel","Copy","icons","require","Icon","_ref","className","name","style","useFill","cn","focusable","propTypes","PropTypes","Object","keys","isRequired","ButtonBase","url","text","tabindex","openInNewTab","onClick","ActionButton","iconName","isActive","isDisabled","ariaAttributes","RootTag","_extends","href","target","rel","tabIndex","disabled","assign","icon","ariaAttributesModel","transforms","downFit","downFill","skipForResizeExtensions","queryParameters","width","undefined","height","transform","center","checkImageCanBeResized","extension","split","pop","trim","toLowerCase","some","item","serializeCenter","x","y","concat","buildResizeUrl","centerX","centerY","resizeUrl","replaceQueryParameters","resizeQuery","queryHash","CryptoJs","replace","hash","calcImageWidth","containerWidth","resolution","Math","ceil","window","devicePixelRatio","calcImageHeight","containerHeight","Transforms","createHtmlImage","Image","constructor","arguments","_defineProperty","imageResizer","this","src","fill","canBeResized","autoTransform","defaultSrc","ratio","containerOffsetWidth","containerOffsetHeight","container","offsetWidth","offsetHeight","fit","autoCalcWidthOnly","autoCalcHeightOnly","skipByWidth","state","skipByHeight","resolutionByWidth","widthResolution","heightResolution","newWidth","newHeight","newRatio","setState","previousState","newSrc","focusPoint","firstPreloadImage","firstLoadWidth","firstLoadHeight","firstLoadSrc","preloadImage","debounce","handleResize","onFirstSrcPreloaded","onSrcPreloaded","checkElementIsHidden","element","offsetParent","isHidden","getHiddenRoot","parent","parentElement","onObservedChange","debouncedHandleResize","componentDidMount","self","onload","addEventListener","observer","MutationObserver","call","observe","attributes","getSnapshotBeforeUpdate","prevProps","componentWillUnmount","removeEventListener","disconnect","componentDidUpdate","render","fluid","backgroundImage","backgroundPosition","ref","c","alt","_Image","values","small","medium","large","ArticleTeaser","image","heading","size","articleTeaserSizes","headingTagLevel","HeadingTag","PoorText","dangerouslySetInnerHTML","__html","ArticleTeasersBlock","introHtml","articles","map","article","index","itemSIze","articleIndex","numberOfArticles","length","ArticleTeaserSizes","calcItemSize","key","themes","dark","light","Button","theme","useToggle","initiallyActive","setIsActive","toggle","useCallback","activate","deactivate","LoadingIndicator","EmbeddedVideoBlock","caption","previewImage","videoUrl","lang","playing","setPlaying","useState","isLoading","setIsLoading","onPlayBtnClick","playVideoButtonAriaLabel","LoadingIndicatorThemes","Fragment","ReactPlayer","controls","onStart","onPlayerStart","onError","onPlayerError","ErrorMessage","FilterHeading","asLabelFor","TagName","htmlFor","Logo","imageClass","rootTagProps","_objectSpread","LinkBase","Link","onFocus","onBlur","sizes","normal","arrowDirections","right","left","LinkButton","forwardRef","arrowDirection","reverseIconDirectionOnHover","leftDirection","linePositions","OriginMatters","linePosition","calculatedLineOffset","minWidth","isRunningOnClient","matchMedia","matches","s","m","l","ipadPro","xl","useBreakpoints","initiallyDesktop","initiallyTablet","initiallyMobile","initiallyDesktopLargerThanIpad","initiallyDesktopExtraLarge","isDesktop","isTablet","isMobile","isDesktopLargerThanIpad","isDesktopExtraLarge","brekpointsStarted","onResize","breakpoints","useEffect","FooterBanner","link","imageWidth","setImageWidth","innerWidth","LinkButtonThemes","linkButtonSizes","originMattersLabel","OriginMattersLinePositions","IconButton","SocialLink","rest","_objectWithoutProperties","_excluded","facebook","twitter","instagram","linkedin","RichText","Footer","banner","logo","column1","column2","socialLinks","privacy","role","textHtml","links","i","PageHeading","calculateInterpolatedValue","abstractUnit","maxValue","maxAbstractUnit","minValue","safeMinValue","ParallaxHeroBackground","backgroundColor","useParallaxOnMobile","Parallax","position","overflow","strength","renderLayer","percentage","maxBorderWidth","boxShadowWidth","boxShadow","getNumericCssPropertyValue","propName","parseInt","getComputedStyle","document","documentElement","getPropertyValue","ANIMATION_STEPS","animationSteps","animationCurrentStep","setAnimationCurrentStep","animationStepName","setTimeout","FrontPageHero","useAnimationStepSwitcher","imageColPadding","paddingLeft","MenuLink","MainMenu","SecondaryMenu","SearchFormLang","searchLabel","searchInputAriaLabel","searchFormAriaLabel","searchBtnAriaLabel","searchHint","prefixesDictionary","prefix","SearchForm","query","searchPageUrl","displayTopLabel","onSearch","value","setValue","isFocused","setIsFocused","uniqueSearchFormId","useMemo","idHelper","searchInput","useRef","isFilled","useImperativeHandle","clearInput","focusInput","current","focus","action","method","onSubmit","e","preventDefault","id","placeholder","onChange","val","onInputFocus","onInputBlur","quickSearchFormId","QuickSearch","isSearchExpanded","onSearchExpand","searchFormRef","expandSearch","color","searchFormSizes","searchFormThemes","useEvent","eventName","eventHandler","dependencies","useEscape","callback","event","which","contains","headerMenuId","bodyActiveClass","Header","mainMenu","quickSearch","secondaryMenu","isAnimated","setIsAnimated","headerAnimationTimeout","isMenuActive","toggleMenu","deactivateMenu","activateSearch","deactivateSearch","headerRef","closeHeader","useClickOutside","body","classList","add","remove","FocusTrap","active","focusTrapOptions","clickOutsideDeactivates","header_animated","closeMenuLabel","menuLabel","header__menu_opened","string","_len","args","Array","_key","match","number","HowToBuyBlock","specimenName","howToBuyLogo","howToBuyHeading","stringHelper","howToBuyText","HowToPageHero","allGuidesLink","linkButtonArrowDirections","label","HowToStepBlock","stepLabel","IconLabel","iconAriaLabel","ImageBlock","ImageCollageBlock","leftTopImage","leftBottomImage","rightTopImage","rightBottomImage","ImageWithTextAndBgColorBlock","imagePosition","imageCaption","amount","plural","singular","IngredientName","pluralOrSingularText","IngredientUnit","unitText","IngredientAmount","aui","iau","iua","Ingredient","printOrder","unit","printOrders","Ingredients","increaseNumberOfServingsAriaLabel","decreaseNumberOfServingsAriaLabel","sections","servingsDefaultNumber","servingNumber","currentSections","setCurrentSections","currentServings","setCurrentServings","updateSections","newSections","data","JSON","parse","stringify","forEach","section","ingredients","ingredient","calcAmount","tmpSrt","toFixed","parseFloat","servingsLabel","type","min","isNaN","handleServingsInputChange","v","onKeyDown","onPaste","sanitizedText","clipboardData","getData","updatedText","slice","selectionStart","selectionEnd","increaseServings","decreaseServings","ingredientsHeading","sectionIndex","ingredientIndex","itemProp","ParallaxText","textBackgroundColor","textColor","textAnimationPercentage","ANIMATION_PERCENTAGE","transition","bottom","backgroundSize","LongArticlePageHero","allStoriesLink","imageHeight","setImageHeight","heroRef","pageHeroMaxHeight","FilterItem","selected","Filter","allItemsLabel","items","PagerLang","nextLabel","prevLabel","pageLabel","jumpBackwardAriaLabel","jumpForwardAriaLabel","RateRecipeResult","rating","ratingValue","confirmation","RecipeDetails","cookingTime","difficultyLevel","cookingTimeIconAriaLabel","difficultyLevelIconAriaLabel","ratingIconAriaLabel","useFocusableDetails","commonIconLabelProps","horizontal","vertical","RecipeTeaser","ariaRoledescription","orientation","orientations","imageHolderRef","isHorizontalOrientation","uniqueRecipeTeaserHeadingId","recipeDetailsSizes","RecipeOverviewResults","filters","totalCount","pager","page","totalPages","ReactComponent","componentName","iconPositions","ToggleButton","activeIconName","iconPosition","leftIconPosition","ToggleFilter","_ref2","filterItems","setFilterItems","clickedItem","updatedItems","onFilterClick","SearchResults","pageTypeFilter","hits","StoryTeaser","categoryLabel","storyTeaserSizes","storyTeaserOrientations","StoriesOverviewResults","NoResults","NotFoundPage","homePageButtonText","homePageUrl","useDidUpdateEffect","fn","inputs","didMountRef","Pager","pageRangeDisplayed","onPageChange","pagerSelectRef","pagerWrapperRef","pagerRef","currentPage","setCurrentPage","pagerSelectOptions","from","_","firstPagerItem","querySelector","parentNode","insertBefore","nextSibling","newPage","handlePageChange","option","ReactPaginate","pageCount","forcePage","previousLabel","ariaLabelBuilder","pageIndex","breakAriaLabels","forward","backward","hrefAllControls","breakClassName","disableInitialCallback","marginPagesDisplayed","containerClassName","pageClassName","pageLinkClassName","previousClassName","nextClassName","ParallaxBgImage","imageClassName","top","PreparationBlock","LinkHeadingTag","QuoteBlock","author","authorTitle","QuoteWithBackgroundBlock","quoteBackgroundColor","send","topic","message","PubSub","_ref3","defaultFetchOptions","headers","Accept","credentials","parseResponse","response","json","then","handleUserMessages","messageToUser","success","_ref4","messenger","handleNotOk","ok","error","Error","statusText","status","handleResponse","payload","handleFetchError","Promise","reject","request","options","fetch","catch","endpoint","indexOf","resolve","post","RateRecipeItem","hint","onMouseEnter","onMouseLeave","ratingTopic","newRating","token","COOKIE_DATA_NAME","RateRecipe","recipeId","currentRating","submitUrl","isRatedByUser","setIsRatedByUser","showError","setShowError","cookiesData","setCookiesData","selectedItem","setSelectedItem","isHintShown","setIsHintShown","rateConfirmation","setRateConfirmation","isTemporaryDisabled","setIsTemporaryDisabled","setSelectedItemByValue","newSelectedItem","find","isItemActive","itemRating","onItemClick","apiHelper","rateValue","newRecipeId","currentCookieData","addCookieData","newCookieData","Cookies","set","expires","recipeMessageBus","recipeCookiesString","get","recipeCookies","youHaveAlreadyRatedMessage","rateThisRecipeLabel","errorText","adjustSelectWidthBasedOnSelectedOption","select","fontWeight","fontSize","fontFamily","paddingRight","innerText","span","innerHTML","visibility","currentHiddenEl","replaceWith","appendChild","calculateDropdownPanelPosition","dropdownPanel","windowWidth","elementRect","getBoundingClientRect","KEY_NAMES","RecipeFilter","_currentItems$find","currentItems","setCurrentItems","allItem","setAllItem","focusedButtonIndex","setFocusedButtonIndex","recipePanelRef","recipeFilterRef","mobileSelectorRef","focusedButtonIndexRef","closeFilter","uniqueRecipeFilterPanelId","filterPanelColumnCount","columnCount","itemCount","handleKeyDown","focusedButtonIndexRefCurrent","querySelectorAll","handleWindowResize","updateItem","targetItem","getToggleButtonText","buttonText","matchedFilterItem","RecipeFilters","onFilterChange","tagName","filter","SimplePageHero","children","_queryValueAsArray","isArray","setQueryValue","_getUndefinedIfEmpty","createQuery","updateFilterFromQuery","fieldName","queryValues","includes","updateQueryFromFilter","filterValues","filterSelectedValues","newValues","Set","textInput","currentValue","join","newUrl","location","toString","history","replaceState","title","parsedQuery","fromQueryString","search","pageNumberQueryParamName","RecipeList","_results$pager","loadItemsEndpoint","results","setResults","setQuery","formHelper","filtersOpenedOnMobile","setFiltersOpenedOnMobile","uniqueRecipeFiltersPanelId","initLoadedFilter","updateQuery","updateFunc","q","loadItems","requestQuery","responseFilters","restResponseResults","prevResults","finally","scrollTo","behavior","searchForm","searchHitsText","emptySearchTermText","hideFilterOptionsLabel","showFilterOptionsLabel","filterLabel","recipe","recipeTeaserOrientations","noListResultsHeading","noListResultsText","errorMessage","RecipePageHero","allRecipesLink","setCurrentRating","msg","RecipeTeasersBlockSliderNavButton","RecipeTeasersBlock","showAllLink","recipes","currentSlideIndex","setCurrentSlideIndex","isMounted","setIsMounted","slidesLength","sliderRef","sliderStepsRef","sliderSettings","customPaging","dotsClass","dots","infinite","speed","slidesToShow","slidesToScroll","nextArrow","nextButtonText","sliderArrowDirections","prevArrow","prevButtonText","afterChange","currentSlideNode","carouselAriaRoleDescription","translateY","Slider","teaserAriaRoleDescription","el","carouselAriaLabel","RichTextBlock","SearchPage","searchEndpoint","_results$pageTypeFilt","_results$pageTypeFilt2","Block","Components","console","noResultsHeading","noResultsText","SearchTeaser","ShareRecipe","showUrlCopiedConfirmation","setShowUrlCopiedConfirmation","isNativeShareSupported","setIsNativeShareSupported","navigator","share","onShareButtonClick","shareButtonText","onCopyUrlButtonClick","currentPageURL","clipboard","writeText","copyUrlButtonText","copyUrlConfirmationHeading","copyUrlConfirmationText","ShareAndRateRecipePanel","shareRecipe","rateRecipe","ShortArticlePageHero","SkipToMain","SpeciesQuickOverviewBlockSpecie","bgColor","stayActiveOnScrollOrResize","setContainerBgColor","onSpecieActive","setActive","randomMobileImageAlign","setRandomMobileImageAlign","specieLinkRef","specieRef","isDesktopRef","scrollDirection","useScrollDirection","setScrollDirection","prevScrollY","scrollY","handleScroll","currentScrollY","scrollDirectionRef","stayActiveOnScrollOrResizeRef","updateIsActive","onSpecieLinkMouseEnter","onSpecieLinkMouseLeave","onSpecieLinkFocus","onSpecieLinkBlur","onWindowResizeOrScroll","viewportVerticalCenterPosition","innerHeight","isItemInViewportCenter","specieLink","mobileImageAlign","randomIndex","floor","random","SpeciesQuickOverviewBlock","species","remainingLinks","exploreAllLink","containerBgColor","lastActiveSpecieIndex","setLastActiveSpecieIndex","specie","SpecimenPageHeroFact","SpecimenPageHero","allSpeciesLink","nutritionalInformationHtml","catchRangeHtml","seasonHtml","nutritionalInformationLabel","catchRangeLabel","seasonLabel","SpecimenSearchTeaser","SpecimenTeaserBlock","learnMoreLink","seafoodUsedInRecipeLabel","howToBuyLabel","StoriesOverviewList","teaserRows","output","source","push","pattern","row","rowIndex","col","colIndex","teaser","colCount","teasersCount","getTeaserSize","StoryTeasersBlock","story1","story2","showMoreLink","storySize","storyHeadingTagLevel","TextWithBackgroundBlock","Linkedin","ArrowLeft","Menu","req","reduce","filename","defineProperty","HTMLElement","prototype","update","classes","ret","splice","touchEndHappened","classListPolyfill","onTouchStart","onTouchEnd","onMouseDown","keyCodeWhiteList","inputDetection","Search","ArrowUp","CookingTime","ChevronDown","Rating","webpackContext","webpackContextResolve","__webpack_require__","o","code","Twitter","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","O","result","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","every","r","n","getter","__esModule","d","a","getPrototypeOf","obj","t","mode","ns","create","def","getOwnPropertyNames","definition","enumerable","f","chunkId","all","promises","u","miniCssF","g","globalThis","Function","prop","hasOwnProperty","done","script","needAttach","scripts","getElementsByTagName","getAttribute","charset","timeout","nc","setAttribute","onScriptComplete","prev","onerror","clearTimeout","doneFns","removeChild","bind","head","Symbol","toStringTag","nmd","paths","p","installedChunks","installedChunkData","promise","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}