{"version":3,"sources":["webpack:///./Scripts/Hooks/useWindowSize.js","webpack:///./Styles/Fondprodukter/variables/_foundation.scss","webpack:///./Scripts/Hooks/useIsMobile.js","webpack:///./Scripts/Components/KeenSliderWrapper.js","webpack:///./Scripts/Components/ImageSliderOverlay.js","webpack:///./Scripts/Components/ProductImageSlideshow.js","webpack:///./Scripts/Hooks/useParseCssList.js"],"names":["useWindowSize","initialWidth","window","innerWidth","initialHeight","innerHeight","useState","size","setSize","useLayoutEffect","updateSize","addEventListener","removeEventListener","module","exports","breakpoints","useParseCssList","FoundationVariables","mediumBreakpoint","medium","replace","useIsMobile","windowWidth","React","isMobile","setIsMobile","useEffect","KeenSliderWrapper","props","useKeenSlider","options","sliderRef","slider","onInit","ref","className","children","ImageSliderOverlay","images","initialIndex","onClose","onPrev","onNext","isOpen","setSlider","currentSlide","setCurrentSlide","keenSliderOptions","loop","initial","slideChanged","s","details","relativeSlide","resize","document","querySelector","classList","add","remove","node","body","onClick","sliderObject","imageSrc","i","key","src","prev","next","length","ProductImageSlideshow","activeImageIndex","setActiveImageIndex","isImageOverlayOpen","setIsImageOverlayOpen","loadedImages","setLoadedImages","openCurrentImage","loaded","image","alt","width","height","_","moveToSlideRelative","join","viewBox","xmlns","d","img","original","cssList","splitted","split","result","str"],"mappings":"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","file":"5.089c45f36dd5aff1f471.js","sourcesContent":["import { useState, useLayoutEffect } from 'react';\r\n\r\nexport default function useWindowSize() {\r\n var initialWidth = window && window.innerWidth ? window.innerWidth : 0\r\n var initialHeight = window && window.innerHeight ? window.innerHeight : 0\r\n const [size, setSize] = useState([initialWidth, initialHeight]);\r\n useLayoutEffect(() => {\r\n function updateSize() {\r\n setSize([window.innerWidth, window.innerHeight]);\r\n }\r\n window.addEventListener('resize', updateSize);\r\n updateSize();\r\n return () => window.removeEventListener('resize', updateSize);\r\n }, []);\r\n return size;\r\n}","// extracted by mini-css-extract-plugin\nmodule.exports = {\"breakpoints\":\"(small: 0, medium: 768px, medium-large: 1080px, large: 1440px, xlarge: 1920px)\"};","import useWindowSize from \"./useWindowSize\"\r\nimport FoundationVariables from \"../../Styles/Fondprodukter/variables/_foundation.scss\"\r\nimport useParseCssList from \"./useParseCssList\"\r\nimport React from \"react\";\r\n\r\nconst breakpoints = useParseCssList(FoundationVariables.breakpoints);\r\nconst mediumBreakpoint = parseInt(breakpoints.medium.replace(\"px\", \"\"))\r\n\r\nexport default function useIsMobile() {\r\n const [windowWidth] = useWindowSize()\r\n const [isMobile, setIsMobile] = React.useState(windowWidth <= mediumBreakpoint-1)\r\n React.useEffect(() => {\r\n setIsMobile(windowWidth <= mediumBreakpoint-1)\r\n }, [windowWidth])\r\n return isMobile\r\n}","import React from \"react\"\r\nimport { useKeenSlider } from \"keen-slider/react\"\r\n\r\nexport function KeenSliderWrapper(props) {\r\n const [sliderRef, slider] = useKeenSlider(props.options)\r\n React.useEffect(() => {\r\n if(slider && props.onInit)\r\n props.onInit(slider)\r\n }, [slider])\r\n\r\n return
\r\n {props.children}\r\n
\r\n}","import React from \"react\"\r\nimport { Portal } from 'react-portal';\r\nimport { KeenSliderWrapper } from \"./KeenSliderWrapper\";\r\n\r\nconst ImageSliderOverlay = props => {\r\n const { images, initialIndex, onClose, onPrev, onNext, isOpen } = props\r\n\r\n const [slider, setSlider] = React.useState()\r\n const [currentSlide, setCurrentSlide] = React.useState(initialIndex)\r\n\r\n const keenSliderOptions = {\r\n loop: true,\r\n initial: initialIndex,\r\n slideChanged: s => setCurrentSlide(s.details().relativeSlide),\r\n className: \"image-slider-overlay keen-slider\"\r\n }\r\n\r\n React.useEffect(() => {\r\n if(slider && isOpen)\r\n slider.resize()\r\n }, [isOpen, slider])\r\n\r\n const handleNextClick = () => {\r\n if(onNext)\r\n onNext()\r\n slider.next()\r\n }\r\n\r\n const handlePrevClick = () => {\r\n if(onPrev)\r\n onPrev()\r\n slider.prev()\r\n }\r\n\r\n const sliderInitialized = sliderObject => {\r\n if(!slider) {\r\n setSlider(sliderObject)\r\n }\r\n }\r\n \r\n const cleanUp = () => {\r\n document.querySelector(\"body\").classList.remove(\"no-scroll\", \"no-scroll--overlay\")\r\n setSlider(null)\r\n setCurrentSlide(null)\r\n }\r\n\r\n React.useEffect(() => {\r\n if(!isOpen) {\r\n cleanUp()\r\n }else{ \r\n document.querySelector(\"body\").classList.add(\"no-scroll\", \"no-scroll--overlay\")\r\n }\r\n }, [isOpen])\r\n\r\n // Portal renders the component at the end of the body\r\n return isOpen && \r\n
\r\n
\r\n \r\n \r\n {images.map((imageSrc, i) => \r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n \r\n
{currentSlide+1}/{images.length}
\r\n
\r\n
\r\n
\r\n}\r\n\r\nexport default ImageSliderOverlay;","import React from \"react\"\r\nimport { useKeenSlider } from \"keen-slider/react\"\r\nimport(/* webpackPrefetch: true */ \"keen-slider/keen-slider.min.css\")\r\nimport Lightbox from \"react-images\"\r\nimport useIsMobile from \"../Hooks/useIsMobile\"\r\nimport ImageSliderOverlay from \"./ImageSliderOverlay\"\r\n\r\nconst ProductImageSlideshow = props => {\r\n const { images } = props\r\n const [activeImageIndex, setActiveImageIndex] = React.useState(0)\r\n const [isImageOverlayOpen, setIsImageOverlayOpen] = React.useState(false)\r\n const [loadedImages, setLoadedImages] = React.useState([true, true]) // image 1 and 2 always loaded\r\n\r\n const [sliderRef, slider] = useKeenSlider({\r\n loop: true,\r\n slideChanged: (s) => setActiveImageIndex(s.details().relativeSlide),\r\n })\r\n \r\n const openCurrentImage = () => {\r\n if(activeImageIndex == null)\r\n return\r\n setIsImageOverlayOpen(true)\r\n }\r\n\r\n // Lazy load, load current + next image\r\n React.useEffect(() => {\r\n const loaded = [...loadedImages]\r\n if(!loaded[activeImageIndex]) {\r\n loaded[activeImageIndex] = true\r\n }\r\n\r\n if(images.length-1 >= activeImageIndex+1 && !loaded[activeImageIndex+1])\r\n loaded[activeImageIndex+1] = true\r\n\r\n setLoadedImages(loaded)\r\n }, [activeImageIndex])\r\n\r\n return <>\r\n
\r\n {images.map((image, i) =>
\r\n {image.alt}\r\n
\r\n )}\r\n
\r\n {slider && images.length > 1 && \r\n <>\r\n \r\n \r\n \r\n }\r\n
\r\n {images.length > 1 && images.map((_, i) =>\r\n
{ slider.moveToSlideRelative(i) }}\r\n className={[\"product-images__bullet\", i == activeImageIndex ? \"product-images__bullet--active\" : \"\"].join(\" \")}>\r\n \r\n \r\n \r\n
\r\n )}\r\n
\r\n img.original)}\r\n onClose={() => setIsImageOverlayOpen(false)}\r\n initialIndex={activeImageIndex}\r\n isOpen={isImageOverlayOpen}\r\n />\r\n \r\n}\r\n\r\nexport default ProductImageSlideshow","export default function useParseCssList(cssList) {\r\n var splitted = cssList.replace(\"(\", \"\").replace(\")\", \"\").split(\",\")\r\n var result = {}\r\n splitted.map(str => {\r\n var split = str.split(\":\")\r\n result[split[0].trim()] = split[1].trim()\r\n })\r\n return result\r\n}"],"sourceRoot":""}