{"version":3,"sources":["webpack:///./src/Frontend/app/components/author-tile/author-tile.tsx","webpack:///./src/Frontend/app/components/author-slider/author-slider.tsx","webpack:///./src/Frontend/app/views/author-slider/author-slider-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/utils/breakpoint-utils.ts","webpack:///./src/Frontend/app/components/swiper/swiper-button.tsx","webpack:///./src/Frontend/app/components/swiper/slider-swiper.tsx","webpack:///./src/Frontend/app/components/author-image/author-image.tsx"],"names":["name","imageUrl","authorCtaLinkText","authorPageUrl","className","baseClass","href","link","title","viewMoreLink","authors","enableThemeBackground","props","headerTitle","dangerouslySetInnerHTML","__html","headerLink","swiperSettings","slidesToShow","swipeToSlide","lazyLoad","initialSlide","responsive","breakpoint","rat","settings","rabbit","dog","wolf","lion","componentClasses","length","map","author","index","key","render","this","contextModel","hasOwn","hasOwnProperty","classNames","classes","i","arguments","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","srcSetSizes","srcUrl","srcSetSize","parameterDelimiter","srcSetSizeHighDensity","Math","round","generateColumnImageProps","maxColumns","isFullWidth","sizes","gridMaxWidthFactor","defaultSize","ResponsiveImage","ref","src","srcSet","loading","breakpoints","cat","horse","rhino","elephant","mediaQueries","Object","keys","reduce","queryStrings","currentMediaQueries","handleMediaMatch","isMatching","forEach","mediaQuery","matchMedia","matches","addListener","event","direction","tabIndex","buttonClasses","buttonClassName","nextArrow","prevArrow","draggable","infinite","speed"],"mappings":"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","file":"14.9036dbc44fc549ad3bd6.js","sourcesContent":["import * as React from \"react\";\r\nimport ArrowLink from \"../arrow-link/arrow-link\";\r\nimport { IAuthor } from \"../../types/author\";\r\nimport { AuthorGalleryProps } from \"../author-gallery/author-gallery\";\r\nimport AuthorImage from \"../author-image/author-image\";\r\nimport classNames from \"classnames\";\r\n\r\nexport interface AuthorTileProps extends IAuthor, Pick<AuthorGalleryProps, \"authorCtaLinkText\"> {\r\n    className?: string;\r\n}\r\n\r\nconst AuthorTile: React.FC<AuthorTileProps> = ({\r\n    name,\r\n    imageUrl,\r\n    authorCtaLinkText,\r\n    authorPageUrl,\r\n    className\r\n}) => {\r\n    const baseClass = \"author-tile\";\r\n\r\n    return (\r\n        <div className={classNames(baseClass, className)}>\r\n            <div className={`${baseClass}__inner`}>\r\n                <div className={`${baseClass}__image-wrapper`}>\r\n                    <a href={authorPageUrl}>\r\n                        <AuthorImage className={`${baseClass}__image`} imageUrl={imageUrl} />\r\n                    </a>\r\n                </div>\r\n                {name && (\r\n                    <div className={`${baseClass}__name`}>\r\n                        <a className=\"reset-a\" href={authorPageUrl}>\r\n                            {name}\r\n                        </a>\r\n                    </div>\r\n                )}\r\n\r\n                {authorPageUrl && authorCtaLinkText && (\r\n                    <div className={`${baseClass}__cta`}>\r\n                        <ArrowLink link={`<a href=\"${authorPageUrl}\">${authorCtaLinkText}</a>`} />\r\n                    </div>\r\n                )}\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default AuthorTile;\r\n","import * as React from \"react\";\r\nimport SliderSwiper from \"~/components/swiper/slider-swiper\";\r\nimport { breakpoints } from \"~/utils/breakpoint-utils\";\r\nimport { Settings } from \"react-slick\";\r\nimport ArrowLink from \"../arrow-link/arrow-link\";\r\nimport { IAuthor } from \"~/types/author\";\r\nimport AuthorTile from \"../author-tile/author-tile\";\r\nimport classNames from \"classnames\";\r\nimport ContentSection from \"../content-section/content-section\";\r\n\r\nexport interface AuthorSliderProps {\r\n    title?: string;\r\n    viewMoreLink?: string;\r\n    authors: IAuthor[];\r\n    authorCtaLinkText: string;\r\n    enableThemeBackground?: boolean;\r\n    anchorId?: string;\r\n}\r\n\r\nconst AuthorSlider: React.SFC<AuthorSliderProps> = ({\r\n    title,\r\n    viewMoreLink,\r\n    authors,\r\n    authorCtaLinkText,\r\n    enableThemeBackground,\r\n    ...props\r\n}) => {\r\n    const headerTitle = title && (\r\n        <h2 className=\"author-slider__title\" dangerouslySetInnerHTML={{ __html: title }} />\r\n    );\r\n    const headerLink = viewMoreLink && <ArrowLink className=\"author-slider__link\" link={viewMoreLink} />;\r\n\r\n    const swiperSettings: Settings = {\r\n        slidesToShow: 5.3,\r\n        swipeToSlide: true,\r\n        lazyLoad: \"ondemand\",\r\n        initialSlide: 0,\r\n        responsive: [\r\n            {\r\n                breakpoint: breakpoints.rat,\r\n                settings: {\r\n                    slidesToShow: 1.2\r\n                }\r\n            },\r\n            {\r\n                breakpoint: breakpoints.rabbit,\r\n                settings: {\r\n                    slidesToShow: 1.5\r\n                }\r\n            },\r\n            {\r\n                breakpoint: breakpoints.dog,\r\n                settings: {\r\n                    slidesToShow: 2.3\r\n                }\r\n            },\r\n            {\r\n                breakpoint: breakpoints.wolf,\r\n                settings: {\r\n                    slidesToShow: 3.3\r\n                }\r\n            },\r\n            {\r\n                breakpoint: breakpoints.lion,\r\n                settings: {\r\n                    slidesToShow: 4.3\r\n                }\r\n            }\r\n        ]\r\n    };\r\n\r\n    const baseClass = \"author-slider\";\r\n    const componentClasses = classNames(baseClass, {\r\n        [`${baseClass}--theme-background`]: enableThemeBackground\r\n    });\r\n\r\n    return (\r\n        <ContentSection className={componentClasses} {...props}>\r\n            {(headerTitle || headerLink) && (\r\n                <div className={`${baseClass}__header`}>\r\n                    {headerTitle}\r\n                    {headerLink}\r\n                </div>\r\n            )}\r\n            {authors.length > 0 && (\r\n                <SliderSwiper settings={swiperSettings}>\r\n                    {authors.map((author, index) => (\r\n                        <AuthorTile {...author} authorCtaLinkText={authorCtaLinkText} key={index} />\r\n                    ))}\r\n                </SliderSwiper>\r\n            )}\r\n        </ContentSection>\r\n    );\r\n};\r\n\r\nexport default AuthorSlider;\r\n","import * as React from \"react\";\r\nimport AuthorSlider, { AuthorSliderProps } from \"~/components/author-slider/author-slider\";\r\n\r\nexport interface AuthorSliderViewProps {\r\n    contextModel: AuthorSliderProps;\r\n}\r\n\r\nclass AuthorSliderView extends React.PureComponent<AuthorSliderViewProps> {\r\n    public render() {\r\n        return <AuthorSlider {...this.props.contextModel} />;\r\n    }\r\n}\r\n\r\nexport default AuthorSliderView;\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","interface IBreakpoints {\r\n    [key: string]: number;\r\n}\r\n\r\ninterface IMediaQueryStrings {\r\n    [key: string]: string;\r\n}\r\n\r\nexport type IMatchingQueries = { [key in Breakpoints]?: boolean };\r\n\r\nexport type Breakpoints =\r\n    | \"ratMin\"\r\n    | \"ratMax\"\r\n    | \"rabbitMin\"\r\n    | \"rabbitMax\"\r\n    | \"catMin\"\r\n    | \"catMax\"\r\n    | \"dogMin\"\r\n    | \"dogMax\"\r\n    | \"wolfMin\"\r\n    | \"wolfMax\"\r\n    | \"lionMin\"\r\n    | \"horseMin\"\r\n    | \"horseMax\"\r\n    | \"rhinoMin\"\r\n    | \"rhinoMax\"\r\n    | \"elephantMin\"\r\n    | \"elephantMax\";\r\n\r\nexport const breakpoints: IBreakpoints = {\r\n    rat: 360,\r\n    rabbit: 480,\r\n    cat: 640,\r\n    dog: 768,\r\n    wolf: 1024,\r\n    lion: 1100,\r\n    horse: 1400,\r\n    rhino: 1520,\r\n    elephant: 1670\r\n};\r\n\r\nconst mediaQueries: IMediaQueryStrings = Object.keys(breakpoints).reduce(\r\n    (queryStrings: IMediaQueryStrings, key) => {\r\n        queryStrings[`${key}Min`] = `(min-width: ${breakpoints[key]}px)`;\r\n        queryStrings[`${key}Max`] = `(max-width: ${breakpoints[key] - 1}px)`;\r\n        return queryStrings;\r\n    },\r\n    {}\r\n);\r\n\r\nconst setupMediaQueryListeners = () => {\r\n    Object.keys(mediaQueries).forEach((key: string) => {\r\n        const mediaQuery = matchMedia(mediaQueries[key]);\r\n\r\n        handleMediaMatch(mediaQuery.matches, key as Breakpoints); // Initial values\r\n        mediaQuery.addListener(event => handleMediaMatch(event.matches, key as Breakpoints));\r\n    });\r\n};\r\n\r\nconst currentMediaQueries: IMatchingQueries = {};\r\nconst handleMediaMatch = (isMatching: boolean, key: Breakpoints) => (currentMediaQueries[key] = isMatching);\r\n\r\nif (!__SERVER__) {\r\n    setupMediaQueryListeners();\r\n}\r\n\r\nexport { currentMediaQueries };\r\n","import * as React from \"react\";\r\nimport Icon, { TIconNames } from \"~/components/icons/icon\";\r\nimport classNames from \"classnames\";\r\n\r\ninterface ISwiperButtonProps {\r\n    className?: string;\r\n    direction: \"LEFT\" | \"RIGHT\";\r\n    onClick?: () => void;\r\n}\r\n\r\nconst SwiperButton: React.SFC<ISwiperButtonProps> = ({ className, direction, onClick }) => {\r\n    const baseClass = \"swiper-button\";\r\n    const classes = classNames(baseClass, className, {\r\n        [`${baseClass}--right`]: direction === \"RIGHT\",\r\n        [`${baseClass}--left`]: direction === \"LEFT\"\r\n    });\r\n    const iconId: TIconNames = direction === \"RIGHT\" ? \"icon_16_arrow-right\" : \"icon_16_arrow-left\";\r\n\r\n    return (\r\n        <button tabIndex={0} className={classes} onClick={onClick}>\r\n            <Icon className=\"swiper-button__icon\" iconId={iconId} />\r\n        </button>\r\n    );\r\n};\r\n\r\nexport default SwiperButton;\r\n","import * as React from \"react\";\r\nimport Slider, { Settings } from \"react-slick\";\r\nimport SwiperButton from \"~/components/swiper/swiper-button\";\r\nimport classNames from \"classnames\";\r\n\r\ninterface ISliderSwiperProps {\r\n    settings: Settings;\r\n    className?: string;\r\n    buttonClassName?: string;\r\n}\r\n\r\nconst SliderSwiper: React.FC<ISliderSwiperProps> = props => {\r\n    const buttonBaseClass = \"custom-slick-arrow\";\r\n    const buttonClasses = classNames(buttonBaseClass, props.buttonClassName);\r\n\r\n    return (\r\n        <div className=\"slider-swiper slider-swiper--hasPaddingBottom\">\r\n            <Slider\r\n                nextArrow={<SwiperButton className={buttonClasses} direction=\"RIGHT\" />}\r\n                prevArrow={<SwiperButton className={buttonClasses} direction=\"LEFT\" />}\r\n                draggable\r\n                infinite={false}\r\n                speed={300}\r\n                {...props.settings}\r\n            >\r\n                {props.children}\r\n            </Slider>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default SliderSwiper;\r\n","import * as React from \"react\";\r\nimport { IAuthor } from \"~/types/author\";\r\nimport classNames from \"classnames\";\r\nimport ResponsiveImage from \"../responsive-image/responsive-image\";\r\n\r\nexport interface IAuthorImageProps extends Pick<IAuthor, \"imageUrl\"> {\r\n    className?: string;\r\n}\r\n\r\nconst AuthorImage = ({ imageUrl, className }: IAuthorImageProps) => {\r\n    const baseClass = \"author-image\";\r\n    const dummyImageUrl = \"/dist/styles/assets/gfx/author/fallback-author-foto.jpg\";\r\n\r\n    return (\r\n        <div className={classNames(baseClass, className)}>\r\n            <ResponsiveImage\r\n                srcUrl={imageUrl || dummyImageUrl}\r\n                defaultSize={300}\r\n                srcSetSizes={[300]}\r\n                sizes=\"300px\"\r\n            />\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default AuthorImage;\r\n"],"sourceRoot":""}