{"version":3,"sources":["webpack:///./src/Frontend/app/components/title-link-top/title-link-top.tsx","webpack:///./src/Frontend/app/components/image-text-list/image-text-list-item/image-text-list-item.tsx","webpack:///./src/Frontend/app/components/image-text-list/image-text-list.tsx","webpack:///./src/Frontend/app/views/image-text-list/image-text-list-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/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/types/theme-color.ts"],"names":["className","title","viewMoreLink","baseClass","componentClasses","headerTitle","dangerouslySetInnerHTML","__html","headerLink","link","imageSrc","imageAltText","linkUrl","linkTarget","textColor","WHITE","bgColor","BRAND_3","defaultSize","srcSetSizes","sizes","rootClasses","linkClasses","href","target","alt","srcUrl","items","maxColumns","isFullWidth","props","someItemHasImage","some","item","listClasses","columnImageProps","map","index","key","render","this","contextModel","hasOwn","hasOwnProperty","classNames","classes","i","arguments","length","arg","argType","push","Array","isArray","inner","apply","call","join","module","exports","default","spriteUrl","viewBox","iconId","preserveAspectRatio","onClick","xmlnsXlink","xlinkHref","id","type","anchorId","hasNoMarginTop","hasNoMarginBottom","children","getQueryParamDelimiter","url","indexOf","hasExistingQueryParam","generateSrcSet","srcSetSize","parameterDelimiter","srcSetSizeHighDensity","Math","round","generateColumnImageProps","gridMaxWidthFactor","ResponsiveImage","ref","src","srcSet","loading","ThemeColorType"],"mappings":"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","file":"27.19c8fc0d1ca68747620e.js","sourcesContent":["import * as React from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nimport ArrowLink from \"../arrow-link/arrow-link\";\r\n\r\nexport interface ITitleLinkTopProps {\r\n className?: string;\r\n title?: string;\r\n viewMoreLink?: string;\r\n}\r\n\r\nconst TitleLinkTop = ({ className, title, viewMoreLink }: ITitleLinkTopProps) => {\r\n const baseClass = \"title-link-top\";\r\n const componentClasses = classNames(baseClass, className);\r\n\r\n const headerTitle = title && (\r\n <h2 className={`${baseClass}__title h2-style`} dangerouslySetInnerHTML={{ __html: title }} />\r\n );\r\n const headerLink = viewMoreLink && <ArrowLink className={`${baseClass}__link`} link={viewMoreLink} />;\r\n\r\n return (\r\n <div className={componentClasses}>\r\n {(headerTitle || headerLink) && (\r\n <div className={`${baseClass}__inner`}>\r\n {headerTitle}\r\n {headerLink}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default TitleLinkTop;\r\n","import * as React from \"react\";\r\nimport classNames from \"classnames\";\r\nimport ResponsiveImage from \"~/components/responsive-image/responsive-image\";\r\nimport { ThemeColorType } from \"~/types/theme-color\";\r\n\r\nexport interface ImageTextListItemProps {\r\n title?: string;\r\n imageSrc?: string;\r\n imageAltText?: string;\r\n linkUrl?: string;\r\n linkTarget?: string;\r\n textColor?: ThemeColorType;\r\n bgColor?: ThemeColorType;\r\n defaultSize?: number;\r\n srcSetSizes?: number[];\r\n sizes?: string;\r\n}\r\n\r\nconst ImageTextListItem = ({\r\n imageSrc,\r\n imageAltText,\r\n linkUrl,\r\n linkTarget,\r\n title,\r\n textColor = ThemeColorType.WHITE,\r\n bgColor = ThemeColorType.BRAND_3,\r\n defaultSize,\r\n srcSetSizes,\r\n sizes\r\n}: ImageTextListItemProps) => {\r\n const baseClass = \"image-text-list-item\";\r\n const rootClasses = classNames(baseClass, \"config-column\");\r\n const linkClasses = classNames(`${baseClass}__link`, {\r\n [`theme-color-${textColor}`]: textColor,\r\n [`theme-bg-${bgColor}`]: !imageSrc && !!bgColor\r\n });\r\n\r\n return (\r\n <div className={rootClasses}>\r\n <a className={linkClasses} href={linkUrl} target={linkTarget}>\r\n {imageSrc && defaultSize && (\r\n <div className={`${baseClass}__image-container`}>\r\n <ResponsiveImage\r\n alt={imageAltText}\r\n srcUrl={imageSrc}\r\n defaultSize={defaultSize}\r\n srcSetSizes={srcSetSizes}\r\n sizes={sizes}\r\n />\r\n </div>\r\n )}\r\n\r\n {title && (\r\n <h3\r\n className={`${baseClass}__title h3-style`}\r\n dangerouslySetInnerHTML={{ __html: title }}\r\n />\r\n )}\r\n </a>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ImageTextListItem;\r\n","import classNames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { ThemeColorType } from \"~/types/theme-color\";\r\nimport { generateColumnImageProps } from \"~/utils/image-utils\";\r\nimport ContentSection from \"../content-section/content-section\";\r\nimport TitleLinkTop from \"../title-link-top/title-link-top\";\r\nimport ImageTextListItem, { ImageTextListItemProps } from \"./image-text-list-item/image-text-list-item\";\r\n\r\nexport interface ImageTextListProps {\r\n title?: string;\r\n viewMoreLink?: string;\r\n items?: ImageTextListItemProps[];\r\n maxColumns?: number;\r\n isFullWidth?: boolean;\r\n textColor?: ThemeColorType;\r\n bgColor?: ThemeColorType;\r\n anchorId?: string;\r\n hasNoMarginTop?: boolean;\r\n hasNoMarginBottom?: boolean;\r\n}\r\n\r\nconst ImageTextList: React.FC<ImageTextListProps> = ({\r\n title,\r\n viewMoreLink,\r\n items,\r\n maxColumns = 4,\r\n isFullWidth = true,\r\n textColor,\r\n bgColor,\r\n ...props\r\n}) => {\r\n const baseClass = \"image-text-list\";\r\n const someItemHasImage = items?.some(item => !!item.imageSrc);\r\n const componentClasses = classNames(baseClass, {\r\n [`${baseClass}--full-width`]: isFullWidth,\r\n [`${baseClass}--contains-image`]: someItemHasImage\r\n });\r\n const listClasses = classNames(\r\n `${baseClass}__items`,\r\n `config-columns config-columns--columns-${maxColumns}`\r\n );\r\n const columnImageProps = generateColumnImageProps(maxColumns, isFullWidth);\r\n\r\n return (\r\n <ContentSection {...props} className={componentClasses}>\r\n <TitleLinkTop title={title} viewMoreLink={viewMoreLink} />\r\n <div className={listClasses}>\r\n {items?.map((item, index) => {\r\n return (\r\n <ImageTextListItem\r\n key={index}\r\n {...item}\r\n {...columnImageProps}\r\n textColor={item.textColor || textColor}\r\n bgColor={item.bgColor || bgColor}\r\n />\r\n );\r\n })}\r\n </div>\r\n </ContentSection>\r\n );\r\n};\r\n\r\nexport default ImageTextList;\r\n","import * as React from \"react\";\r\nimport ImageTextList, { ImageTextListProps } from \"~/components/image-text-list/image-text-list\";\r\n\r\nexport interface ImageTextListViewProps {\r\n contextModel: ImageTextListProps;\r\n}\r\n\r\nclass ImageTextListView extends React.Component<ImageTextListViewProps> {\r\n public render() {\r\n return <ImageTextList {...this.props.contextModel} />;\r\n }\r\n}\r\n\r\nexport default ImageTextListView;\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\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","export enum ThemeColorType {\r\n BLACK = \"black\",\r\n WHITE = \"white\",\r\n GRAY = \"gray\",\r\n GRAY_LIGHT = \"gray-light\",\r\n BRAND_CTA = \"brand-cta\",\r\n BRAND_1 = \"brand-1\",\r\n BRAND_2 = \"brand-2\",\r\n BRAND_3 = \"brand-3\",\r\n BRAND_4 = \"brand-4\",\r\n BRAND_5 = \"brand-5\"\r\n}\r\n"],"sourceRoot":""}