{"version":3,"sources":["webpack:///./src/Frontend/app/components/image-text-cta-list-tile/image-text-cta-list-tile.tsx","webpack:///./src/Frontend/app/components/content-slider/content-slider.tsx","webpack:///./src/Frontend/app/views/content-slider/content-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/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/utils/breakpoint-utils.ts","webpack:///./src/Frontend/app/components/swiper/swiper-button.tsx","webpack:///./src/Frontend/app/components/swiper/slider-swiper.tsx"],"names":["LinkOrFragment","props","href","className","linkClassName","target","children","imageSrc","imageAltText","title","richText","ctaLink","ctaUrl","ctaTarget","showCtaAsLink","useCtaAsImageLink","bgColor","textColor","showCtaAsLinkColor","defaultSize","srcSetSizes","sizes","useColumns","compact","baseClass","rootClasses","arrowLinkClasses","titleClasses","contentClasses","hasContent","srcUrl","alt","dangerouslySetInnerHTML","__html","link","isLarge","swiperBreakpoints","rat","rabbit","dog","lion","horse","swiperSettings","slidesToShow","swipeToSlide","lazyLoad","initialSlide","responsive","map","breakpoint","index","settings","x","Math","pow","columnImageProps","imageTileTextCtaList","viewMoreLink","headerTitle","headerLink","type","tile","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","anchorId","hasNoMarginTop","hasNoMarginBottom","componentClasses","isInverted","isSecondary","getQueryParamDelimiter","url","indexOf","hasExistingQueryParam","generateSrcSet","srcSetSize","parameterDelimiter","srcSetSizeHighDensity","round","generateColumnImageProps","maxColumns","isFullWidth","gridMaxWidthFactor","ResponsiveImage","ref","src","srcSet","loading","breakpoints","cat","wolf","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":"15.04ee30130f10c4e80a8e.js","sourcesContent":["import classNames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { ThemeColorType } from \"~/types/theme-color\";\r\nimport { ImageTextCtaReusableProps } from \"~/components/image-text-cta/image-text-cta\";\r\nimport ArrowLink from \"../arrow-link/arrow-link\";\r\nimport CtaButton from \"../cta-button/cta-button\";\r\nimport ResponsiveImage from \"../responsive-image/responsive-image\";\r\n\r\nexport interface ImageTextCtaListTileProps extends ImageTextCtaReusableProps {\r\n bgColor?: ThemeColorType;\r\n textColor?: ThemeColorType;\r\n showCtaAsLinkColor?: ThemeColorType; // Can be converted to ctaTextColor later, if Gyldendal want cta-colors to be configurable\r\n defaultSize?: number;\r\n srcSetSizes?: number[];\r\n sizes?: string;\r\n useColumns?: boolean;\r\n compact?: boolean;\r\n}\r\n\r\nconst LinkOrFragment = (props: {\r\n children: React.ReactNode;\r\n href: ImageTextCtaListTileProps[\"ctaUrl\"];\r\n target: ImageTextCtaListTileProps[\"ctaUrl\"];\r\n linkClassName?: string;\r\n}) => {\r\n return props.href ? (\r\n \r\n {props.children}\r\n \r\n ) : (\r\n <>{props.children}\r\n );\r\n};\r\n\r\nconst ImageTextCtaListTile = ({\r\n imageSrc,\r\n imageAltText,\r\n title,\r\n richText,\r\n ctaLink,\r\n ctaUrl,\r\n ctaTarget,\r\n showCtaAsLink,\r\n useCtaAsImageLink,\r\n bgColor,\r\n textColor,\r\n showCtaAsLinkColor,\r\n defaultSize,\r\n srcSetSizes,\r\n sizes,\r\n useColumns,\r\n compact\r\n}: ImageTextCtaListTileProps) => {\r\n const baseClass = \"image-text-cta-list-tile\";\r\n\r\n const rootClasses = classNames(baseClass, {\r\n \"config-column\": useColumns ?? true,\r\n [`${baseClass}__compact`]: compact\r\n });\r\n const arrowLinkClasses = classNames(`${baseClass}__link`, {\r\n [`theme-color-${showCtaAsLinkColor}`]: !!showCtaAsLinkColor\r\n });\r\n const titleClasses = classNames(`${baseClass}__title h3-style`, {\r\n [`theme-color-${textColor}`]: !!textColor\r\n });\r\n const contentClasses = classNames(`${baseClass}__content-wrapper`, {\r\n [`theme-bg-${bgColor}`]: !!bgColor,\r\n [`theme-color-${textColor}`]: !!textColor\r\n });\r\n const hasContent = title || richText || (ctaLink && showCtaAsLink);\r\n\r\n return (\r\n
\r\n {imageSrc && defaultSize && (\r\n
\r\n \r\n \r\n \r\n
\r\n )}\r\n\r\n {hasContent && (\r\n
\r\n {title && (\r\n

\r\n \r\n {title}\r\n \r\n

\r\n )}\r\n {richText && (\r\n \r\n )}\r\n {ctaLink && !useCtaAsImageLink && (\r\n <>\r\n {showCtaAsLink ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n )}\r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default ImageTextCtaListTile;\r\n","import * as React from \"react\";\r\nimport { breakpoints } from \"~/utils/breakpoint-utils\";\r\nimport { ResponsiveObject, Settings } from \"react-slick\";\r\nimport { ThemeColorType } from \"~/types/theme-color\";\r\nimport ImageTextCtaListTile, {\r\n ImageTextCtaListTileProps\r\n} from \"../image-text-cta-list-tile/image-text-cta-list-tile\";\r\nimport SliderSwiper from \"../swiper/slider-swiper\";\r\nimport { generateColumnImageProps } from \"~/utils/image-utils\";\r\nimport ArrowLink from \"../arrow-link/arrow-link\";\r\nimport ContentSection from \"../content-section/content-section\";\r\n\r\nexport interface IContentSliderProps {\r\n title?: string;\r\n imageTileTextCtaList?: Array;\r\n hasNoMarginTop?: boolean;\r\n hasNoMarginBottom?: boolean;\r\n bgColor?: ThemeColorType;\r\n textColor?: ThemeColorType;\r\n showCtaAsLinkColor?: ThemeColorType;\r\n viewMoreLink?: string;\r\n}\r\n\r\nconst swiperBreakpoints = [\r\n breakpoints.rat,\r\n breakpoints.rabbit,\r\n breakpoints.dog,\r\n breakpoints.lion,\r\n breakpoints.horse\r\n];\r\n\r\n// TODO: Replace this with the old config object\r\nconst fittedSymmetricalSigmodialFunction = (x: number) => {\r\n // figures out the slides to show given a breakpoint using a symmetrical sigmodial function\r\n const a = 1.1196611;\r\n const b = 1.969953;\r\n return 9.540517 + (a - 9.540517) / (1 + Math.pow(x / 5.212277, b));\r\n};\r\n\r\nconst swiperResponsiveBreakpoints = swiperBreakpoints.map(\r\n (breakpoint, index): ResponsiveObject => {\r\n return {\r\n breakpoint: breakpoint,\r\n settings: {\r\n slidesToShow: fittedSymmetricalSigmodialFunction(index)\r\n }\r\n };\r\n }\r\n);\r\n\r\nconst swiperSettings: Settings = {\r\n slidesToShow: 4.3,\r\n swipeToSlide: true,\r\n lazyLoad: \"progressive\",\r\n initialSlide: 0,\r\n responsive: swiperResponsiveBreakpoints\r\n};\r\n\r\nconst columnImageProps = generateColumnImageProps(5, true);\r\n\r\nconst ContentSlider: React.FC = ({\r\n title,\r\n imageTileTextCtaList,\r\n bgColor,\r\n textColor,\r\n showCtaAsLinkColor,\r\n viewMoreLink,\r\n ...props\r\n}: IContentSliderProps) => {\r\n const baseClass = \"content-slider\";\r\n\r\n const headerTitle = title && (\r\n

\r\n );\r\n const headerLink = viewMoreLink && ;\r\n\r\n return (\r\n \r\n
\r\n {headerTitle && (\r\n
\r\n {headerTitle} {headerLink}\r\n
\r\n )}\r\n\r\n
\r\n {imageTileTextCtaList && (\r\n \r\n {imageTileTextCtaList?.map((tile, index) => (\r\n \r\n ))}\r\n \r\n )}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ContentSlider;\r\n","import * as React from \"react\";\r\nimport ContentSlider, { IContentSliderProps } from \"~/components/content-slider/content-slider\";\r\n\r\nexport interface IContentSliderViewProps {\r\n contextModel: IContentSliderProps;\r\n}\r\n\r\nclass ContentSliderView extends React.PureComponent {\r\n public render() {\r\n return ;\r\n }\r\n}\r\n\r\nexport default ContentSliderView;\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_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 = props => {\r\n const spriteUrl = props.spriteUrl || \"\";\r\n const viewBox = props.viewBox || \"0 0 32 32\";\r\n\r\n return (\r\n props.onClick && props.onClick()}\r\n >\r\n \r\n \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
;\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 = ({\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
\r\n {anchorId && }\r\n {props.children}\r\n
\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
;\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
\r\n \r\n \r\n
\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, \"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;\r\n}\r\n\r\nconst ResponsiveImage: React.FC = React.forwardRef(\r\n ({ srcUrl, defaultSize, srcSetSizes, ...props }, ref: React.Ref) => {\r\n const src = `${srcUrl}${getQueryParamDelimiter(srcUrl)}w=${defaultSize}`;\r\n const srcSet = srcSetSizes ? generateSrcSet(srcSetSizes, srcUrl) : \"\";\r\n\r\n return ;\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 = ({ 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 \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 = props => {\r\n const buttonBaseClass = \"custom-slick-arrow\";\r\n const buttonClasses = classNames(buttonBaseClass, props.buttonClassName);\r\n\r\n return (\r\n
\r\n }\r\n prevArrow={}\r\n draggable\r\n infinite={false}\r\n speed={300}\r\n {...props.settings}\r\n >\r\n {props.children}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default SliderSwiper;\r\n"],"sourceRoot":""}