{"version":3,"sources":["webpack:///./src/Frontend/app/components/wrapper-link/wrapper-link.tsx","webpack:///./src/Frontend/app/components/full-width-image-text-cta/full-width-image-text-cta.tsx","webpack:///./src/Frontend/app/views/full-width-image-text-cta/full-width-image-text-cta-view.tsx","webpack:///./node_modules/classnames/index.js","webpack:///./src/Frontend/app/components/icons/icon.tsx","webpack:///./src/Frontend/app/components/anchor/anchor.tsx","webpack:///./src/Frontend/app/components/content-section/content-section.tsx","webpack:///./src/Frontend/app/components/cta-button/cta-button.tsx","webpack:///./src/Frontend/app/components/arrow-link/arrow-link.tsx","webpack:///./src/Frontend/app/utils/image-utils.ts","webpack:///./src/Frontend/app/components/responsive-image/responsive-image.tsx","webpack:///./src/Frontend/app/components/title/title.tsx"],"names":["linkClassName","href","target","props","className","children","imageSrc","imageAltText","isTitleH1","title","richText","ctaLink","ctaUrl","ctaTarget","showCtaAsLink","useCtaAsImageLink","overlayDisabled","extendStylingForNextModuleOverlap","hasContent","baseClass","componentClasses","undefined","defaultSize","srcSetSizes","sizes","alt","srcUrl","dangerouslySetInnerHTML","__html","link","isLarge","render","this","contextModel","hasOwn","hasOwnProperty","classNames","classes","i","arguments","length","arg","argType","push","Array","isArray","inner","apply","key","call","join","module","exports","default","spriteUrl","viewBox","iconId","preserveAspectRatio","onClick","xmlnsXlink","xlinkHref","id","type","anchorId","hasNoMarginTop","hasNoMarginBottom","isInverted","isSecondary","getQueryParamDelimiter","url","indexOf","hasExistingQueryParam","generateSrcSet","map","srcSetSize","parameterDelimiter","srcSetSizeHighDensity","Math","round","generateColumnImageProps","maxColumns","isFullWidth","gridMaxWidthFactor","ResponsiveImage","ref","src","srcSet","loading","linkHref","linkTarget","titleHtml"],"mappings":"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","file":"23.fe4e3db09f0dffa7442d.js","sourcesContent":["import * as React from \"react\";\r\n\r\nexport interface WrapperLinkProps {\r\n linkClassName?: string;\r\n href: string | undefined;\r\n target?: string;\r\n}\r\n\r\nconst WrapperLink: React.FC<WrapperLinkProps> = ({ linkClassName, href, target, ...props }) => {\r\n if (href) {\r\n return (\r\n <a className={linkClassName} href={href} target={target}>\r\n {props.children}\r\n </a>\r\n );\r\n }\r\n\r\n return <>{props.children}</>;\r\n};\r\n\r\nexport default WrapperLink;\r\n","import * as React from \"react\";\r\nimport CtaButton from \"../cta-button/cta-button\";\r\nimport classNames from \"classnames\";\r\nimport Title from \"~/components/title/title\";\r\nimport ResponsiveImage from \"../responsive-image/responsive-image\";\r\nimport WrapperLink from \"../wrapper-link/wrapper-link\";\r\nimport { ImageTextCtaReusableProps } from \"../image-text-cta/image-text-cta\";\r\nimport ArrowLink from \"../arrow-link/arrow-link\";\r\nimport ContentSection from \"../content-section/content-section\";\r\n\r\nexport interface FullWidthImageTextCtaProps extends ImageTextCtaReusableProps {\r\n isTitleH1?: boolean;\r\n overlayDisabled?: boolean;\r\n extendStylingForNextModuleOverlap?: boolean;\r\n anchorId?: string;\r\n}\r\n\r\nconst FullWidthImageTextCta = ({\r\n imageSrc,\r\n imageAltText,\r\n isTitleH1,\r\n title,\r\n richText,\r\n ctaLink,\r\n ctaUrl,\r\n ctaTarget,\r\n showCtaAsLink,\r\n useCtaAsImageLink,\r\n overlayDisabled,\r\n extendStylingForNextModuleOverlap,\r\n ...props\r\n}: FullWidthImageTextCtaProps) => {\r\n const hasContent = title || richText || (ctaLink && !useCtaAsImageLink);\r\n const baseClass = \"full-width-image-text-cta\";\r\n const componentClasses = classNames(baseClass, {\r\n [`${baseClass}--is-next-module-overlapping`]: extendStylingForNextModuleOverlap,\r\n [`${baseClass}--is-overlay-disabled`]: overlayDisabled,\r\n [`${baseClass}--has-no-content`]: !hasContent\r\n });\r\n\r\n return (\r\n <ContentSection className={componentClasses} {...props}>\r\n <WrapperLink\r\n linkClassName={`${baseClass}-wrapper-link`}\r\n href={useCtaAsImageLink ? ctaUrl : undefined}\r\n target={ctaTarget}\r\n >\r\n <div className={`${baseClass}__inner horizontal-align-center text-align-center`}>\r\n {imageSrc && (\r\n <ResponsiveImage\r\n className={`${baseClass}__image`}\r\n defaultSize={1366}\r\n srcSetSizes={[320, 375, 480, 640, 768, 1024, 1280, 1366]}\r\n sizes=\"(max-width: 1365px) 100vw, 1366px\"\r\n alt={imageAltText}\r\n srcUrl={imageSrc}\r\n />\r\n )}\r\n\r\n {hasContent && (\r\n <div className={`${baseClass}__content-wrapper`}>\r\n {title && <Title title={title} isTitleH1={isTitleH1} />}\r\n {richText && (\r\n <div\r\n className={`${baseClass}__rich-text content-rich-text`}\r\n dangerouslySetInnerHTML={{ __html: richText }}\r\n />\r\n )}\r\n {ctaLink && !useCtaAsImageLink && (\r\n <>\r\n {showCtaAsLink ? (\r\n <ArrowLink className={`${baseClass}__link`} link={ctaLink} />\r\n ) : (\r\n <CtaButton\r\n className={`${baseClass}__btn theme-bg-white theme-color-black`}\r\n link={ctaLink}\r\n isLarge\r\n />\r\n )}\r\n </>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </WrapperLink>\r\n </ContentSection>\r\n );\r\n};\r\n\r\nexport default FullWidthImageTextCta;\r\n","import * as React from \"react\";\r\nimport FullWidthImageTextCta, {\r\n FullWidthImageTextCtaProps\r\n} from \"~/components/full-width-image-text-cta/full-width-image-text-cta\";\r\n\r\nexport interface IFullWidthImageTextCtaViewProps {\r\n contextModel: FullWidthImageTextCtaProps;\r\n}\r\n\r\nclass FullWidthImageTextCtaView extends React.PureComponent<IFullWidthImageTextCtaViewProps> {\r\n public render() {\r\n return <FullWidthImageTextCta {...this.props.contextModel} />;\r\n }\r\n}\r\n\r\nexport default FullWidthImageTextCtaView;\r\n","/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import * as React from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nexport type TIconNames =\r\n | \"24_expand\"\r\n | \"24_play\"\r\n | \"24_star\"\r\n | \"24_trash\"\r\n | \"32_add-user\"\r\n | \"32_basket\"\r\n | \"32_checkmark-circle\"\r\n | \"32_checkmark\"\r\n | \"32_error\"\r\n | \"32_information\"\r\n | \"32_katalog\"\r\n | \"32_search\"\r\n | \"32_truck-in-motion\"\r\n | \"32_user\"\r\n | \"32_warning\"\r\n | \"icon_16_arrow-down\"\r\n | \"icon_16_arrow-left\"\r\n | \"icon_16_arrow-right-bold\"\r\n | \"icon_16_arrow-right\"\r\n | \"icon_16_arrow-up\"\r\n | \"icon_28_close\"\r\n | \"icon_32_thumbs-up\"\r\n | \"icon_80x41_quotation-mark-gyldendal-dk\"\r\n | \"icon_80x48_quotation-mark\"\r\n | \"icon_checkbox-black\"\r\n | \"icon_checkmark-black\"\r\n | \"icon_download\"\r\n | \"icon_herringbone-narrow\"\r\n | \"icon_herringbone-wide\"\r\n | \"icon_placeholder-email\"\r\n | \"icon_placeholder-lock\"\r\n | \"icon_placeholder-phone-small\"\r\n | \"icon_placeholder-vip-white\"\r\n | \"icon_placeholder_basket\"\r\n | \"icon_placeholder_checkmark\"\r\n | \"icon_placeholder_eye-closed\"\r\n | \"icon_placeholder_eye\"\r\n | \"icon_placeholder_facebook\"\r\n | \"icon_placeholder_filtering\"\r\n | \"icon_placeholder_hamburger\"\r\n | \"icon_placeholder_instagram\"\r\n | \"icon_placeholder_phone\"\r\n | \"icon_placeholder_user\"\r\n | \"icon_read\"\r\n | \"icon_listen\";\r\n\r\nexport interface IIconProps {\r\n iconId: TIconNames;\r\n spriteUrl?: string;\r\n viewBox?: string;\r\n className?: string;\r\n onClick?: () => void;\r\n}\r\n\r\nconst Icon: React.FC<IIconProps> = props => {\r\n const spriteUrl = props.spriteUrl || \"\";\r\n const viewBox = props.viewBox || \"0 0 32 32\";\r\n\r\n return (\r\n <svg\r\n viewBox={viewBox}\r\n className={classNames(props.className, \"icon\", `icon-${props.iconId}`)}\r\n preserveAspectRatio=\"xMidYMid\"\r\n onClick={() => props.onClick && props.onClick()}\r\n >\r\n <use xmlnsXlink=\"http://www.w3.org/1999/xlink\" xlinkHref={`${spriteUrl}#${props.iconId}`} />\r\n </svg>\r\n );\r\n};\r\n\r\nexport default Icon;\r\n","import * as React from \"react\";\r\n\r\nexport interface AnchorProps {\r\n id?: string;\r\n}\r\n\r\nconst Anchor = ({ id }: AnchorProps) => {\r\n return <div className=\"anchor\" id={id} />;\r\n};\r\n\r\nexport default Anchor;\r\n","import classNames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport Anchor from \"../anchor/anchor\";\r\n\r\nexport interface ContentSectionProps {\r\n className?: string;\r\n type?: \"default\" | \"full\";\r\n anchorId?: string;\r\n hasNoMarginTop?: boolean;\r\n hasNoMarginBottom?: boolean;\r\n}\r\n\r\nconst ContentSection: React.FC<ContentSectionProps> = ({\r\n className,\r\n type = \"default\",\r\n anchorId,\r\n hasNoMarginTop,\r\n hasNoMarginBottom,\r\n ...props\r\n}) => {\r\n const baseClass = \"content-section\";\r\n const componentClasses = classNames(baseClass, className, {\r\n [`${baseClass}--full`]: type === \"full\",\r\n \"anchor-wrapper\": !!anchorId,\r\n \"content-no-margin-top\": hasNoMarginTop,\r\n \"content-no-margin-bottom\": hasNoMarginBottom\r\n });\r\n return (\r\n <section className={componentClasses}>\r\n {anchorId && <Anchor id={anchorId} />}\r\n {props.children}\r\n </section>\r\n );\r\n};\r\n\r\nexport default ContentSection;\r\n","import * as React from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nexport interface ICtaButtonProps {\r\n className?: string;\r\n isLarge?: boolean;\r\n isInverted?: boolean;\r\n isSecondary?: boolean;\r\n link: string;\r\n onClick?(): void;\r\n}\r\n\r\nconst CtaButton = ({ className, isLarge, isInverted, isSecondary, link, onClick }: ICtaButtonProps) => {\r\n const baseClass = \"cta-button\";\r\n const componentClasses = classNames(className, baseClass, {\r\n [`${baseClass}--large`]: isLarge,\r\n [`${baseClass}--inverted`]: isInverted,\r\n [`${baseClass}--secondary`]: isSecondary\r\n });\r\n\r\n return <div onClick={onClick} className={componentClasses} dangerouslySetInnerHTML={{ __html: link }} />;\r\n};\r\n\r\nexport default CtaButton;\r\n","import * as React from \"react\";\r\nimport classNames from \"classnames\";\r\nimport Icon from \"../icons/icon\";\r\n\r\nexport interface IArrowLinkProps {\r\n className?: string;\r\n link: string;\r\n}\r\n\r\nconst ArrowLink = ({ className, link }: IArrowLinkProps) => {\r\n const baseClass = \"arrow-link\";\r\n const componentClasses = classNames(baseClass, className);\r\n\r\n return (\r\n <div className={componentClasses}>\r\n <Icon iconId=\"icon_16_arrow-right-bold\" />\r\n <span dangerouslySetInnerHTML={{ __html: link }} />\r\n </div>\r\n );\r\n};\r\n\r\nexport default ArrowLink;\r\n","const hasExistingQueryParam = (url: string) => url.indexOf(\"?\") !== -1;\r\n\r\nexport const getQueryParamDelimiter = (url: string) => (hasExistingQueryParam(url) ? \"&\" : \"?\");\r\n\r\nexport const generateSrcSet = (srcSetSizes: number[], srcUrl: string) => {\r\n const generateSrcSetString = (srcSetSize: number) => {\r\n const parameterDelimiter = getQueryParamDelimiter(srcUrl);\r\n const srcSetSizeHighDensity = Math.round(srcSetSize * 1.5);\r\n\r\n return `\r\n ${srcUrl}${parameterDelimiter}w=${srcSetSize} ${srcSetSize}w,\r\n ${srcUrl}${parameterDelimiter}w=${srcSetSizeHighDensity} ${srcSetSizeHighDensity}w\r\n `;\r\n };\r\n\r\n return srcSetSizes.map(generateSrcSetString).join(\", \");\r\n};\r\n\r\nexport const generateColumnImageProps = (maxColumns: number, isFullWidth?: boolean) => {\r\n // The sizes are column-widths and are not considering padding\r\n const gridMaxWidthFactor = isFullWidth ? 1 : 0.75;\r\n const gridMaxWidth = 1366 * gridMaxWidthFactor;\r\n const defaultSize = gridMaxWidth / maxColumns;\r\n let sizes;\r\n\r\n switch (maxColumns) {\r\n case 5:\r\n sizes = `(max-width: 479px) 100vw, \r\n (max-width: 639px) 75vw,\r\n (max-width: 767px) 50vw,\r\n (max-width: 1023px) ${100 / 3}vw,\r\n (max-width: 1099px) ${(100 / 3) * gridMaxWidthFactor}vw,\r\n (max-width: 1279px) ${(100 / 4) * gridMaxWidthFactor}vw,\r\n ${defaultSize}px`;\r\n case 4:\r\n sizes = `(max-width: 479px) 100vw, \r\n (max-width: 639px) 75vw,\r\n (max-width: 767px) 50vw,\r\n (max-width: 1023px) ${100 / 3}vw,\r\n (max-width: 1099px) ${(100 / 3) * gridMaxWidthFactor}vw,\r\n (max-width: 1279px) ${(100 / 4) * gridMaxWidthFactor}vw,\r\n ${defaultSize}px`;\r\n case 3:\r\n sizes = `(max-width: 479px) 100vw,\r\n (max-width: 639px) 75vw,\r\n (max-width: 767px) 50vw,\r\n (max-width: 1023px) ${100 / 3}vw,\r\n (max-width: 1279px) ${(100 / 3) * gridMaxWidthFactor}vw,\r\n ${defaultSize}px`;\r\n case 2:\r\n sizes = `(max-width: 479px) 100vw,\r\n (max-width: 639px) 75vw,\r\n (max-width: 1023px) ${100 / 2}vw,\r\n (max-width: 1279px) ${(100 / 2) * gridMaxWidthFactor}vw, \r\n ${defaultSize}px`;\r\n case 1:\r\n sizes = `(max-width: 479px) 100vw,\r\n (max-width: 1023px) ${100 * 0.75}vw,\r\n (max-width: 1279px) ${100 * 0.75 * gridMaxWidthFactor}vw,\r\n ${defaultSize * 0.75}px`;\r\n }\r\n\r\n return {\r\n // The sizes are column-widths and are not considering padding\r\n defaultSize: defaultSize,\r\n srcSetSizes: [205, 257, 274, 342, 456, 513, 683, 769, 1025],\r\n sizes: sizes\r\n };\r\n};\r\n","import * as React from \"react\";\r\nimport { generateSrcSet, getQueryParamDelimiter } from \"~/utils/image-utils\";\r\n\r\nexport interface IResponsiveImageProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, \"src\"> {\r\n className?: string;\r\n srcUrl: string;\r\n defaultSize: number;\r\n srcSetSizes?: number[];\r\n sizes?: string;\r\n ref?: React.Ref<HTMLImageElement>;\r\n}\r\n\r\nconst ResponsiveImage: React.FC<IResponsiveImageProps> = React.forwardRef(\r\n ({ srcUrl, defaultSize, srcSetSizes, ...props }, ref: React.Ref<HTMLImageElement>) => {\r\n const src = `${srcUrl}${getQueryParamDelimiter(srcUrl)}w=${defaultSize}`;\r\n const srcSet = srcSetSizes ? generateSrcSet(srcSetSizes, srcUrl) : \"\";\r\n\r\n return <img ref={ref} src={src} srcSet={srcSet} {...props} loading=\"lazy\" />;\r\n }\r\n);\r\n\r\nexport default ResponsiveImage;\r\n","import * as React from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nexport interface ITitleProps {\r\n title: string;\r\n isTitleH1?: boolean;\r\n linkHref?: string;\r\n linkTarget?: string;\r\n className?: string;\r\n}\r\n\r\nconst Title = ({ title, isTitleH1, className, linkHref, linkTarget }: ITitleProps) => {\r\n const baseClass = \"title\";\r\n const componentClasses = classNames(baseClass, className, \"h2-style\");\r\n const titleHtml = linkHref ? (\r\n <a className=\"reset-a\" href={linkHref} target={linkTarget}>\r\n {title}\r\n </a>\r\n ) : (\r\n title\r\n );\r\n\r\n return isTitleH1 ? (\r\n <h1 className={componentClasses}>{titleHtml}</h1>\r\n ) : (\r\n <h2 className={componentClasses}>{titleHtml}</h2>\r\n );\r\n};\r\n\r\nexport default Title;\r\n"],"sourceRoot":""}