{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue","webpack:///./src/components/AspectRatio.vue","webpack:///./src/components/AspectRatio.vue?213c","webpack:///./src/components/LoadingScreen.vue","webpack:///./src/components/LoadingScreen.vue?49d1","webpack:///./src/App.vue?ae2f","webpack:///./src/views/SceneView.vue","webpack:///./src/components/Scene.vue","webpack:///./src/config.js","webpack:///./src/helpers/assetHelper.js","webpack:///./src/components/PreloadedImage.vue","webpack:///./src/components/PreloadedImage.vue?e4a2","webpack:///./src/components/Scene.vue?213f","webpack:///./src/components/SceneComponentRenderer.vue","webpack:///./src/components/scene-components/HotspotButton.vue","webpack:///./src/store/index.js","webpack:///./src/helpers/navigationHelper.js","webpack:///./src/components/scene-components/HotspotButton.vue?0cca","webpack:///./src/components/scene-components/BackgroundVideo.vue","webpack:///./src/components/Popup.vue","webpack:///./src/helpers/eventBus.js","webpack:///./src/components/Popup.vue?7ebb","webpack:///./src/components/BasicVideo.vue","webpack:///./src/components/BasicVideo.vue?d17c","webpack:///./src/components/scene-components/BackgroundVideo.vue?8e39","webpack:///./src/components/scene-components/Logo.vue","webpack:///./src/components/scene-components/Logo.vue?5c82","webpack:///./src/components/SceneComponentRenderer.vue?b721","webpack:///./src/components/ContentComponentRenderer.vue","webpack:///./src/components/content-components/ContentPopup.vue","webpack:///./src/components/Button.vue","webpack:///./src/components/Button.vue?d032","webpack:///./src/components/Slider.vue","webpack:///./src/components/Slider.vue?9c19","webpack:///./src/components/content-components/ContentPopup.vue?b155","webpack:///./src/components/content-components/IframeInPopup.vue","webpack:///./src/components/content-components/IframeInPopup.vue?e6d5","webpack:///./src/components/ContentComponentRenderer.vue?48a5","webpack:///./src/views/ProductsView.vue","webpack:///./src/components/BasicImage.vue","webpack:///./src/components/BasicImage.vue?063a","webpack:///./src/components/ProductSpecsPopup.vue","webpack:///./src/components/ModelViewer.vue","webpack:///./src/components/ModelViewer.vue?4ba8","webpack:///./src/components/ProductSpecsPopup.vue?c132","webpack:///./src/views/ProductsView.vue?c9c0","webpack:///./src/views/MeetingViewConfiguration.vue","webpack:///./src/views/MeetingViewConfiguration.vue?ec38","webpack:///./src/views/SingleProductView.vue","webpack:///./src/views/SingleProductView.vue?fa4c","webpack:///./src/components/MainNavigation.vue","webpack:///./src/helpers/fullscreenHelper.js","webpack:///./src/components/MainNavigation.vue?0613","webpack:///./src/views/SceneView.vue?c964","webpack:///./src/router/index.js","webpack:///./src/main.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","isLoading","class","ref","data-scale","scale","props","this","updateFrameSize","addEventListener","methods","appFrame","$refs","aspectRatioOptions","centerVertically","centerHorizontically","windowResolution","width","innerWidth","height","innerHeight","appResolution","offsetWidth","offsetHeight","windowAspectRatio","appAspectRatio","windowAspectRatioIsTallerThanApp","heightDifference","style","transform","widthDifference","appClientRect","getBoundingClientRect","appResolutionScaled","appOffset","x","y","transformOrigin","left","top","margin","__exports__","components","AspectRatio","LoadingScreen","computed","$store","state","dispatch","render","afterTransition","sceneContent","sceneData","transitionZoomTransformOrigin","transitionType","id","background-image","backgroundImage","background-video","backgroundVideo","sceneComponents","contentComponentData","src","mediaUrl","muted","autoplay","loop","playsinline","webkit-playsinline","type","config","manifestPath","tempMediaPath","umbracoMediaPath","location","hostname","loadedImages","preloadImage","url","useDecodeCanvas","Promise","resolve","reject","image","Image","decodeCanvas","document","createElement","dectodeCtx","getContext","drawImage","preloadImages","imageUrls","imageLoadingPromises","forEach","imageUrl","preloadPromise","catch","all","then","getPreloadedImage","loadedImage","console","error","getUmbracoMediaItemSrc","umbracoMedia","String","imageElement","canvas","ctx","PreloadedImage","sceneComponent","nsAlias","positionX","positionY","title","target-id","sceneContentReference","external-url","externalURL","has-transition","has-pulse","transition-delay-ms","hotspotDelaysByIndex","pulse-interval-ms","pulseIntervalMs","icon","hideIfOffline","hideIfNotInMeeting","hideIfInMeeting","direction","flipDirection","positionCss","videoFrameCss","videoPreviewFile","videoFile","videoLink","css","appear","hideIfConfiguredToDoSo","transitionDelayMs","targetId","onClick","externalUrl","href","target","createStore","manifestWasLoaded","scenes","contentComponents","products","productCategories","meeting","sceneTransitionEffect","measuringUnit","mutations","setLoadingState","payload","setMeasuringUnit","setSceneTransitionEffect","attatchSortedManifestData","sortedManifest","actions","loadManifest","context","commit","fetchManifestPromise","fetch","method","cache","credentials","headers","response","json","manifestData","sortManifest","delayPromise","setTimeout","imageUrlsToPreload","scene","imageSrc","product","productImage","productIcon","productScaleOutlineImage","specPopupScaleImage","preloadImagesPromise","expoRoot","custom","Children","node","recursivelySortScenes","childNode","slug","productName","categories","parentScene","arrayOfScenes","arrayOfContentComponents","parentId","path","contentComponent","getCurrentSceneContent","currentPath","router","currentRoute","getSceneContentByPath","store","indexOf","getSceneContentByID","getProductBySlug","getPathByID","goToPath","query","goToPathByID","goToParentScene","pathToGoTo","closeComponentIfOpen","getBreadcrumbs","breadCrumbs","params","productSlug","preventClick","reverse","Number","targetPath","hasTransition","Boolean","hasPulse","isOffline","isElectron","validMeetingCode","meetingCode","isInMeeting","$route","videoIsOpen","videoMediaFile","controls","$emit","eventBus","mitt","emit","videoType","videoEmbedCodeFromURL","getMediaSrc","active","watch","html5Video","play","pause","link","isVimeo","isYoutube","iframeMarkup","match","exec","vimeoVideoId","youtubeVideoId","split","ampersandPosition","substring","mediaItem","Popup","BasicVideo","goToHomePage","HotspotButton","BackgroundVideo","Logo","Array","initialDelayMs","delayOffsetMs","component","tabs","closeContentComponent","customStyle","iframeSrc","source","tab","currentTabIndex","slides","style-variant","openVideo","heading","subHeading","text","callToActionLinks","router-link","getPathById","goToTab","popupVideoData","routerLink","to","styleVariant","currentSlideIndex","slide","previewImage","previewVideoFile","prevSlide","nextSlide","slideIndex","Button","Slider","emits","videoData","tabIndex","frameborder","allowTransparency","ContentPopup","IframeInPopup","category","isShowcase","categoryName","description","goBack","canScrollUpProducts","scrollUpProducts","canScrollDownProducts","scrollDownProducts","productsInCategory","scenePath","mediaSlidesFilteredByCategory","openImage","productImageSpaceBelowInPixels","openSpecsPopup","hideScaleChart","productScaleOutlineImageOffsetX","specsPopupIsOpen","closeSpecsPopup","popupData","ImageSrc","showModelViewerUI","specPopupBox1Heading","specPopupBox1Text","specPopupBox2Heading","specPopupBox2Text","isMeetingRoom","getDownloadLink","download1File","download1Url","download2File","download2Url","download1Text","download1Icon","download2Text","download2Icon","qrCode1","qrCode2","qrCode1Title","qrCode2Title","showQR","showQrBig","specPopupBox3Heading","specPopupBox3Text","specPopupBox4Heading","specPopupBox4Text","show3DModel","modelLoaded","unit","scaleWidthCentimeters","scaleWidthInches","scaleHeightCentimeters","scaleHeightInches","setUnit","product3DModel","distance","initialModelDistanceAsNumber","onModelLoad","handleWheel","handleDrag","modelHasBeenDragged","resetModelView","model","radomeHidden","viewerShowRadome","viewerHideRadome","omv","latestPointerDownState","initializeIframe","events","onResetModel","on","removeEventListener","handlePointerDown","handlePointerUp","handlePointerMove","off","iframe","onload","contentWindow","modelSource","replace","modelUrl","hotspots","initialize","dynamicHotspotListing","debugMode","cameraClearcolor","cameraMinZoomMultiplier","cameraMaxZoomMultiplier","hotspotScale","orbitMouseSensitivity","orbitIdleTimer","externalContent","pivot","setActiveCameraPosition","e","iframeWrap","innerHTML","appendChild","ModelViewer","omvRef","meetingRoom","querySelector","parseFloat","initialModelDistance","isNaN","toggle","downloadFile","downloadUrl","resetMaterials","materialGroups","materialGroup","changeMaterial","matGrp","resetMaterialsForModel","materialGroupName","materialName","changeMaterialForMaterialGroup","unsubscribe","subscribe","mutation","ProductSpecsPopup","BasicImage","categoryId","scrollHeight","scrollTop","scrollPageHeight","isScrolling","productsFound","sort","a","b","scaleValue","mediaSlides","limitToTheseCategories","categoryMatches","redirectToFirstProductIfNeeded","categoryScroll","doScrollAreaCalculations","clientHeight","clearTimeout","snapScrollToNearestProduct","productElements","querySelectorAll","scrollPos","productClosestToScrollTop","productElement","item","isClosestToScrollTop","distanceToScrollTop","Math","abs","offsetTop","position","element","scrollProducts","getScrollProducts","productToScrollTo","scrollProduct","scrollTo","behavior","route","productToRedirectTo","$router","imageData","accept","placeholder","loading","loggedIn","editor","auth","getProductList","draggable","setMovingElement","createMeeting","meetingTemplate","media","mediaContent","lastIndexOf","toggleFullscreenPDF","mediaIsFullscreen","pdfnavigatePage","mediaPDFCurrentPage","productAreas","productArea","productId","drop","$event","allowDrop","productImageScaleForMeetingRoom","placeholderImg","includes","GetPreloadedImage","selectedProduct","backgroundAreas","backgroundArea","meetingCreated","copyRoomLink","goToRoom","AttendMeetingInvalid","loginAttend","noIcon","loginCreate","meetingTemplateA","backgroundColor","borderStroke","perspective","skewY","skewX","rotateY","rotateX","zIndex","productPosition","meetingTemplateB","img","mediaPDFPageLength","movingElement","accessToken","currentRoomCode","ApiKey","roomcode","roomCode","newRoomLink","navigator","clipboard","writeText","open","event","blob","reader","FileReader","readAsBinaryString","self","onloadend","count","forward","mediaPDF","mediaPDFFull","log","clone","cloneNode","placeHolder","parentNode","removeChild","clone2","placeHolder2","files","myHeaders","Headers","append","formdata","FormData","JSON","stringify","body","redirect","dataResponse","parse","roomId","alert","code","raw","requestOptions","accessExpiry","codeValue","checkRe","validInput","status","preventDefault","script","isHidden","isHiddenBecauseOfShowroom","breadcrumbs","breadcrumb","toggleFullscreen","toggleFullScreen","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","cancelFullScreen","mozCancelFullScreen","webkitCancelFullScreen","documentElement","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","Element","ALLOW_KEYBOARD_INPUT","onHide","onUnHide","onHideBecauseOfShowroom","onUnHideBecauseOfShowroom","Scene","SceneComponentRenderer","ContentComponentRenderer","MainNavigation","from","next","dynamicallyCreateChildRoutesIfNeeded","updateTitleAndMetaDesc","fullPath","metaDescription","metaTag","setAttribute","routeName","childRouteName","routeAlreadyExists","hasRoute","addRoute","ProductsView","SingleProductView","routes","SceneView","createRouter","history","createWebHashHistory","createApp","App","use","mount"],"mappings":"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","file":"js/app.bb8ca98d.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","<template>\r\n  <AspectRatio>\r\n    \r\n    <transition name=\"fade\" mode=\"out-in\">\r\n      <LoadingScreen v-if=\"isLoading\"></LoadingScreen>\r\n    </transition>\r\n\r\n    <router-view></router-view>\r\n\r\n  </AspectRatio>\r\n</template>\r\n\r\n\r\n<script>\r\nimport './scss/main.scss';\r\nimport AspectRatio from '@/components/AspectRatio';\r\nimport LoadingScreen from '@/components/LoadingScreen';\r\n\r\nexport default {\r\n  name: 'App',\r\n  components:\r\n  {\r\n    AspectRatio: AspectRatio,\r\n    LoadingScreen: LoadingScreen\r\n  },\r\n  data()\r\n  {\r\n    return {}\r\n  },\r\n  computed: \r\n  {\r\n    isLoading()\r\n    {\r\n      return this.$store.state.isLoading;\r\n    }\r\n  },\r\n  created()\r\n  {\r\n    // NOTE: Tell our Vuex store to load the content\r\n    // TODO: Maybe rename to initialload? Since it might load a lot more than just the manifest...\r\n    this.$store.dispatch('loadManifest');\r\n  }\r\n}\r\n</script>","<template>\r\n  <div class=\"aspect-ratio\" ref=\"appFrame\" :data-scale=\"scale\">\r\n    <slot></slot>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n    name: 'AspectRatio', // TODO: Find a better name... AppFrame?\r\n    props: {},\r\n    data: ()=>{\r\n        return {\r\n            scale: 1\r\n        }\r\n    },\r\n    mounted()\r\n    {\r\n        this.updateFrameSize();\r\n        window.addEventListener('resize', this.updateFrameSize);\r\n    },\r\n    methods:\r\n    {\r\n        updateFrameSize()\r\n        {\r\n            var appFrame = this.$refs.appFrame;\r\n\r\n            // NOTE: Scaling handler. uses css transform: scale on the #app id to scale the entire scene.\r\n            // The math to determine how much scale to apply to the scene. \r\n            // It will make the app as big as it can be while maintaining its aspect ratio. The app will be centered.\r\n\r\n            // NOTE: Default settings\r\n            var aspectRatioOptions = {\r\n                centerVertically: true,\r\n                centerHorizontically: true\r\n            };\r\n\r\n            var windowResolution = {\r\n                width: window.innerWidth,\r\n                height: window.innerHeight\r\n            };\r\n\r\n            var appResolution = {\r\n                width: appFrame.offsetWidth,\r\n                height: appFrame.offsetHeight\r\n            }\r\n\r\n            var windowAspectRatio = windowResolution.width / windowResolution.height;\r\n            var appAspectRatio =  appResolution.width / appResolution.height;\r\n\r\n            var windowAspectRatioIsTallerThanApp = (windowAspectRatio > appAspectRatio);\r\n\r\n            if (windowAspectRatioIsTallerThanApp)\r\n            {\r\n                // NOTE: Window is taller than app\r\n                // NOTE: Resize app based on height\r\n                var heightDifference = windowResolution.height / appResolution.height;\r\n                appFrame.style.transform = (\"scale(\" + heightDifference + \")\");     \r\n                this.scale = heightDifference;\r\n            }\r\n            else\r\n            {\r\n                // NOTE: Window is wider than app\r\n                // NOTE: Resize app based on width\r\n                var widthDifference = windowResolution.width / appResolution.width;\r\n                appFrame.style.transform = (\"scale(\" + widthDifference + \")\");\r\n                this.scale = widthDifference;\r\n            }\r\n\r\n            \r\n            // NOTE: Center the app container on both axis\r\n\r\n            var appClientRect = appFrame.getBoundingClientRect();\r\n            var appResolutionScaled = {\r\n                width: appClientRect.width,\r\n                height: appClientRect.height\r\n            }\r\n\r\n            var appOffset = {\r\n                x: 0,\r\n                y: 0\r\n            };\r\n\r\n            if (aspectRatioOptions.centerHorizontically && (appResolutionScaled.width < windowResolution.width))\r\n            {\r\n                appOffset.x = (windowResolution.width - appResolutionScaled.width) / 2;\r\n            }\r\n\r\n            if (aspectRatioOptions.centerVertically && (appResolutionScaled.height < windowResolution.height))\r\n            {\r\n                appOffset.y = (windowResolution.height - appResolutionScaled.height) / 2;\r\n            }\r\n\r\n            appFrame.style.transformOrigin = 'top left';\r\n            appFrame.style.left = appOffset.x+'px';\r\n            appFrame.style.top = appOffset.y+'px';\r\n            appFrame.style.margin = '0';\r\n        }\r\n    }\r\n}\r\n</script>\r\n","import { render } from \"./AspectRatio.vue?vue&type=template&id=7968ec34\"\nimport script from \"./AspectRatio.vue?vue&type=script&lang=js\"\nexport * from \"./AspectRatio.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\r\n    <div class=\"loading-screen\">\r\n        LOADING\r\n    </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n    name: 'LoadingScreen',\r\n    props: {},\r\n    data()\r\n    {\r\n        return {}\r\n    },\r\n    created()\r\n    {\r\n        // console.log('this.isLoading', this.isLoading);\r\n        // console.log('this.showroom', this.showroom);\r\n    },\r\n    methods:\r\n    {}\r\n}\r\n</script>\r\n","import { render } from \"./LoadingScreen.vue?vue&type=template&id=8cfb5ac6\"\nimport script from \"./LoadingScreen.vue?vue&type=script&lang=js\"\nexport * from \"./LoadingScreen.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./App.vue?vue&type=template&id=afcac366\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\r\n\r\n  <MainNavigation/>\r\n\r\n  <transition name=\"fade\" mode=\"out-in\" @after-leave=\"afterTransition\">\r\n    <Scene\r\n      :style=\"'transform-origin: '+transitionZoomTransformOrigin\"\r\n      :class=\"[{'scene--transition-effect-fade': (transitionType === 'fade')}, {'scene--transition-effect-zoom': (transitionType === 'zoomAndFade')}]\"\r\n      v-if=\"sceneContent.sceneData\"\r\n      :key=\"sceneContent.sceneData.id\"\r\n      :background-image=\"sceneContent.sceneData.data.backgroundImage\"\r\n      :background-video=\"sceneContent.sceneData.data.backgroundVideo\">\r\n\r\n      <!-- NOTE: Child views are rendered here if any -->\r\n      <router-view></router-view>\r\n\r\n      <SceneComponentRenderer v-if=\"sceneContent.sceneData.sceneComponents\" :sceneComponents=\"sceneContent.sceneData.sceneComponents\"/>\r\n    </Scene>\r\n  </transition>\r\n\r\n  <ContentComponentRenderer v-if=\"sceneContent.contentComponentData\" :contentComponentData=\"sceneContent.contentComponentData\"/>\r\n\r\n</template>\r\n\r\n<script>\r\n// @ is an alias to /src\r\nimport Scene from '@/components/Scene';\r\nimport SceneComponentRenderer from '@/components/SceneComponentRenderer';\r\nimport ContentComponentRenderer from '@/components/ContentComponentRenderer';\r\nimport {getSceneContentByPath} from '@/helpers/navigationHelper';\r\nimport ProductsView from '@/views/ProductsView';\r\nimport MeetingView from '@/views/MeetingViewConfiguration';\r\nimport SingleProductView from '@/views/SingleProductView';\r\nimport MainNavigation from '@/components/MainNavigation';\r\n\r\nexport default {\r\n  name: 'SceneView',\r\n  components: {\r\n    Scene: Scene,\r\n    SceneComponentRenderer: SceneComponentRenderer,\r\n    ContentComponentRenderer: ContentComponentRenderer,\r\n    MainNavigation: MainNavigation\r\n  },\r\n  data()\r\n  {\r\n    return {\r\n      sceneContent: {},\r\n      transitionType: null,\r\n      transitionZoomTransformOrigin: '50% 50%',\r\n    }\r\n  },\r\n  beforeRouteUpdate(to, from, next)\r\n  {\r\n    // NOTE: Get scene data on update\r\n    this.sceneContent = getSceneContentByPath(to.path);\r\n\r\n    if (this.dynamicallyCreateChildRoutesIfNeeded(this.sceneContent.sceneData))\r\n    {\r\n      // NOTE: If new route was created, ensure that it is loaded\r\n      next({path: to.path, query: this.$route.query});\r\n      return;\r\n    }\r\n\r\n    // NOTE: Cancel transition if next route is a content component, by setting the default.\r\n    if (this.sceneContent.contentComponentData)\r\n    {\r\n      this.$store.commit('setSceneTransitionEffect', {type: 'fade'});\r\n    }\r\n\r\n    this.updateTitleAndMetaDesc(this.sceneContent, to);\r\n\r\n    next();\r\n  },\r\n  created()\r\n  {\r\n    // NOTE: Get initial scene data\r\n    this.unsubscribe = this.$store.subscribe((mutation, state) =>\r\n    {\r\n      // NOTE: React to the manifest being ready for use\r\n      if (mutation.type === 'attatchSortedManifestData')\r\n      {\r\n        this.sceneContent = getSceneContentByPath(this.$route.path);\r\n\r\n        if (this.dynamicallyCreateChildRoutesIfNeeded(this.sceneContent.sceneData))\r\n        {\r\n          // NOTE: If new route was created, ensure that it is loaded\r\n          this.$router.replace({path: this.$route.fullPath, query: this.$route.query});\r\n        }\r\n      }\r\n\r\n      // NOTE: React to transitions\r\n      else if (mutation.type === 'setSceneTransitionEffect')\r\n      {\r\n        this.transitionType = state.sceneTransitionEffect.type;\r\n        if (state.sceneTransitionEffect.type === 'zoomAndFade')\r\n        {\r\n          this.transitionZoomTransformOrigin = state.sceneTransitionEffect.transformOrigin;\r\n        }\r\n      }\r\n\r\n      this.updateTitleAndMetaDesc(this.sceneContent, this.$route);\r\n    })\r\n  },\r\n  methods: {\r\n    getProductBySlug(slug)\r\n    {\r\n      var result = null;\r\n\r\n      let products = this.$store.state.products;\r\n\r\n      products.forEach((product)=>\r\n      {\r\n        if (product.slug === slug)\r\n        {\r\n          result = product;\r\n        }\r\n      });\r\n      \r\n      return result;\r\n    },\r\n    updateTitleAndMetaDesc(sceneContent, route)\r\n    {\r\n      let title = 'Intellian World';\r\n      let metaDescription = '';\r\n\r\n      if (sceneContent.contentComponentData)\r\n      {\r\n        title = (sceneContent.contentComponentData.data.title) ? sceneContent.contentComponentData.data.title : '';\r\n        metaDescription = (sceneContent.contentComponentData.data.metaDescription) ? sceneContent.contentComponentData.data.metaDescription : '';\r\n      }\r\n      else if (sceneContent.sceneData)\r\n      {\r\n        title = (sceneContent.sceneData.data.title) ? sceneContent.sceneData.data.title : '';\r\n        metaDescription = (sceneContent.sceneData.data.metaDescription) ? sceneContent.sceneData.data.metaDescription : '';\r\n\r\n        // NOTE: Check for product\r\n        if (sceneContent.sceneData.type === \"productsScene\")\r\n        {\r\n          let productSlug = route.params.productSlug;\r\n          let product = this.getProductBySlug(productSlug);\r\n\r\n          if (product)\r\n          {\r\n            title = title + \" - \" +product.data.title;\r\n            metaDescription = (product.data.metaDescription) ? product.data.metaDescription : '';\r\n          }\r\n        }\r\n      }\r\n\r\n      // NOTE: Update DOM\r\n      document.title = title;\r\n      let metaTag = document.querySelector('#metaDescription');\r\n      if (metaTag)\r\n      {\r\n        metaTag.setAttribute(\"content\", metaDescription);\r\n      }\r\n    },\r\n    afterTransition()\r\n    {\r\n      // NOTE: Reset transition effect\r\n      this.$store.commit('setSceneTransitionEffect', {type: 'fade'});\r\n    },\r\n    dynamicallyCreateChildRoutesIfNeeded(sceneData)\r\n    {\r\n      // NOTE: Create child routes for products scene type\r\n      if (sceneData.type === \"productsScene\")\r\n      {\r\n        let routeName = 'products-' + sceneData.id;\r\n        let childRouteName = 'product-' + sceneData.id;\r\n\r\n        let routeAlreadyExists = this.$router.hasRoute(routeName);\r\n        if (!routeAlreadyExists)\r\n        {\r\n          // NOTE: Add products scene as child to scenes\r\n          this.$router.addRoute('scenes', {\r\n            name: routeName,\r\n            path: sceneData.path + ':pathMatch(.*)*',\r\n            component: ProductsView,\r\n            props: {scenePath: sceneData.path, categoryId: sceneData.data.category}\r\n          });\r\n          \r\n          // NOTE: Add single product scene as child to products scene\r\n          this.$router.addRoute(routeName, {\r\n            name: childRouteName,\r\n            path: ':productSlug/',\r\n            component: SingleProductView,\r\n            props: {scenePath: sceneData.path, categoryId: sceneData.data.category}\r\n          });\r\n\r\n          return true;\r\n        }\r\n      }\r\n      else if (sceneData.type === \"meetingScene\")\r\n      {\r\n        let routeName = 'meeting';\r\n\r\n        let routeAlreadyExists = this.$router.hasRoute(routeName);\r\n        if (!routeAlreadyExists)\r\n        {\r\n          // NOTE: Add products scene as child to scenes\r\n          this.$router.addRoute('scenes', {\r\n            name: routeName,\r\n            path: sceneData.path + ':pathMatch(.*)*',\r\n            component: MeetingView,\r\n            props: {scenePath: sceneData.path}\r\n          });\r\n          \r\n          return true;\r\n        }\r\n      }\r\n\r\n      return false;\r\n    },\r\n  },\r\n  unmounted()\r\n  {\r\n    this.unsubscribe();\r\n  }\r\n}\r\n</script>","<template>\r\n    <div class=\"scene\">\r\n\r\n        <PreloadedImage v-if=\"backgroundImage\" class=\"scene__background-image\" :src=\"mediaUrl(backgroundImage)\"/>\r\n\r\n        <video \r\n          v-if=\"backgroundVideo\"\r\n          :src=\"mediaUrl(backgroundVideo)\"\r\n          class=\"scene__background-video\"\r\n          muted\r\n          autoplay\r\n          loop\r\n          playsinline\r\n          webkit-playsinline\r\n          type=\"video/mp4\"\r\n          @contextmenu.prevent=\"\"></video>\r\n\r\n        <div class=\"scene__contents\">\r\n              <slot></slot>\r\n        </div>\r\n\r\n    </div>\r\n</template>\r\n\r\n\r\n<script>\r\nimport { getUmbracoMediaItemSrc } from '@/helpers/assetHelper';\r\nimport PreloadedImage from '@/components/PreloadedImage'\r\n\r\nexport default {\r\n  name: 'Scene',\r\n  components: {\r\n    PreloadedImage\r\n  },\r\n  props: {\r\n      backgroundImage: Object,\r\n      backgroundVideo: Object\r\n  },\r\n  methods:\r\n  {\r\n    mediaUrl(image)\r\n    {\r\n      return getUmbracoMediaItemSrc(image);\r\n    }\r\n  }\r\n}\r\n</script>\r\n","var config = {\r\n   manifestPath: 'assets/json/en/manifest.json',\r\n   tempMediaPath: 'https://intellianeventumbraco.azurewebsites.net/output/event/',\r\n   umbracoMediaPath: '',\r\n}\r\n \r\nif (window.location.hostname === \"localhost\" )\r\n{\r\n   config.tempMediaPath = '';\r\n   config.manifestPath = 'https://intellianeventumbraco.azurewebsites.net/output/event/assets/json/en/manifest.json';\r\n   config.umbracoMediaPath = 'https://intellianeventumbraco.azurewebsites.net';\r\n}\r\n \r\n// TODO: Add list of smaller assets to preload here. Like SVG icons and the logo. For preloading\r\n\r\nexport default config;","import config from '@/config';\r\n\r\nvar loadedImages = []; // NOTE: Contains images identifiable by URL {url: String, type: String, image: Canvas or Image element}\r\n\r\nfunction preloadImage(url, useDecodeCanvas)\r\n{\r\n    return new Promise((resolve, reject) => {\r\n\r\n        const image = new Image();\r\n        image.addEventListener('error', ()=>{\r\n            reject();\r\n        });\r\n        image.addEventListener('load', () => {\r\n            if (useDecodeCanvas)\r\n            {\r\n                // NOTE: Creates a canvas and renders the image onto that, and returns the canvas instead of Image.\r\n                // This ensures that we decode and retain the decoded image.\r\n                // Do not use if loading a lot of images. It can quickly use up a lot of memory, but shaves off a few milliseconds when rendering.\r\n\r\n                var decodeCanvas = document.createElement('canvas');\r\n                var dectodeCtx = decodeCanvas.getContext('2d');\r\n                decodeCanvas.width = image.width;\r\n                decodeCanvas.height = image.height;\r\n                dectodeCtx.drawImage(image, 0, 0);\r\n\r\n                loadedImages.push({\r\n                    url: url,\r\n                    type: 'decodedCanvas',\r\n                    image: decodeCanvas\r\n                });\r\n                resolve(decodeCanvas);\r\n            }\r\n            else \r\n            {\r\n                loadedImages.push({\r\n                    url: url,\r\n                    type: 'image',\r\n                    image: image\r\n                });\r\n                resolve(image);\r\n            }\r\n        });\r\n        image.src = url;\r\n    });\r\n}\r\n\r\nfunction preloadImages(imageUrls, useDecodeCanvas)\r\n{\r\n    var imageLoadingPromises = [];\r\n\r\n    imageUrls.forEach((imageUrl)=>{\r\n        var preloadPromise = preloadImage(imageUrl, useDecodeCanvas)\r\n            .catch(()=>{\r\n                // console.log('Failed to load ', imageUrl);\r\n            });\r\n        imageLoadingPromises.push(preloadPromise);\r\n    });\r\n\r\n    return Promise.all(imageLoadingPromises)\r\n        .then(()=>{\r\n            // console.log(\"IMAGES PRELOADED\", loadedImages);\r\n        })\r\n}\r\n\r\nfunction getPreloadedImage(url)\r\n{\r\n    var result = null;\r\n\r\n    loadedImages.forEach((loadedImage)=>{\r\n        if (url === loadedImage.url)\r\n        {\r\n            result = loadedImage.image;\r\n        }\r\n    })\r\n\r\n    if (!result)\r\n    {\r\n        console.error('Unable to find preloaded image', url);\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nfunction getUmbracoMediaItemSrc(umbracoMedia)\r\n{\r\n    if(umbracoMedia){\r\n        var url = config.umbracoMediaPath + umbracoMedia.src;\r\n        if(url){\r\n            return url;\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\nexport {\r\n    preloadImage,\r\n    preloadImages,\r\n    getPreloadedImage,\r\n    getUmbracoMediaItemSrc\r\n};\r\n","<template>\r\n    <canvas ref=\"canvas\">\r\n    </canvas>\r\n</template>\r\n\r\n<script>\r\nimport { getPreloadedImage } from '@/helpers/assetHelper';\r\n\r\nexport default {\r\n  name: 'PreloadedImage',\r\n  components: {},\r\n  props: {\r\n      src: String\r\n  },\r\n  data()\r\n  {\r\n    return {}\r\n  },\r\n  mounted()\r\n  {\r\n    var imageElement = getPreloadedImage(this.src);\r\n\r\n    if (imageElement)\r\n    {\r\n        this.$refs.canvas.width = imageElement.width;\r\n        this.$refs.canvas.height = imageElement.height;\r\n        this.ctx = this.$refs.canvas.getContext('2d');\r\n    \r\n        this.ctx.drawImage(imageElement, 0, 0);\r\n    }\r\n\r\n  }\r\n}\r\n</script>\r\n","import { render } from \"./PreloadedImage.vue?vue&type=template&id=3d376ae5\"\nimport script from \"./PreloadedImage.vue?vue&type=script&lang=js\"\nexport * from \"./PreloadedImage.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Scene.vue?vue&type=template&id=b57b7aa2\"\nimport script from \"./Scene.vue?vue&type=script&lang=js\"\nexport * from \"./Scene.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\r\n\r\n    <!-- NOTE: We manually map data to vue components here -->\r\n\r\n    <template v-for=\"(sceneComponent, i) in sceneComponents\" :key=\"i\">\r\n\r\n      <HotspotButton v-if=\"sceneComponent.nsAlias === 'hotspotButton'\" :key=\"i\"\r\n        :x=\"sceneComponent.positionX\"\r\n        :y=\"sceneComponent.positionY\"\r\n        :title=\"sceneComponent.title\"\r\n        :target-id=\"sceneComponent.sceneContentReference\"\r\n        :external-url=\"sceneComponent.externalURL\"\r\n        :has-transition=\"true\"\r\n        :has-pulse=\"true\"\r\n        :transition-delay-ms=\"hotspotDelaysByIndex[i]\"\r\n        :pulse-interval-ms=\"hotspotDelaysByIndex[i] + pulseIntervalMs\"\r\n        :icon=\"sceneComponent.icon\"\r\n        :hideIfOffline=\"sceneComponent.hideIfOffline\"\r\n        :hideIfNotInMeeting=\"sceneComponent.hideIfNotInMeeting\"\r\n        :hideIfInMeeting=\"sceneComponent.hideIfInMeeting\"\r\n        :direction=\"(sceneComponent.flipDirection) ? 'right' : 'left'\"\r\n      />\r\n\r\n      <BackgroundVideo v-if=\"sceneComponent.nsAlias === 'backgroundVideo'\" :key=\"i\"\r\n        :positionCss=\"sceneComponent.positionCss\"\r\n        :videoFrameCss=\"sceneComponent.videoFrameCss\"\r\n        :videoPreviewFile=\"sceneComponent.videoPreviewFile\"\r\n        :videoFile=\"sceneComponent.videoFile\"\r\n        :videoLink=\"sceneComponent.videoLink\"\r\n      />\r\n\r\n      <Logo v-if=\"sceneComponent.nsAlias === 'logo'\" key=\"i\"\r\n        :css=\"sceneComponent.css\"\r\n        :style=\"sceneComponent.style\"\r\n      />\r\n\r\n    </template>\r\n\r\n</template>\r\n\r\n<script>\r\nimport HotspotButton from '@/components/scene-components/HotspotButton';\r\nimport BackgroundVideo from '@/components/scene-components/BackgroundVideo';\r\nimport Logo from '@/components/scene-components/Logo';\r\n\r\nexport default {\r\n  name: 'SceneComponentRenderer',\r\n  components: {\r\n    HotspotButton,\r\n    BackgroundVideo,\r\n    Logo\r\n  },\r\n  props: {\r\n      sceneComponents: Array\r\n  },\r\n  data()\r\n  {\r\n    return {\r\n      initialDelayMs: 400,\r\n      delayOffsetMs: 200,\r\n      pulseIntervalMs: 15000,\r\n      hotspotDelaysByIndex: []\r\n    }\r\n  },\r\n  created()\r\n  {\r\n    // NOTE: Populate hotspotIndexes array with data to use to calculate delay time...\r\n    var i = 0;\r\n    this.sceneComponents.forEach((component, j)=>{\r\n      if (component.nsAlias === 'hotspotButton')\r\n      {\r\n        this.hotspotDelaysByIndex[j] = this.initialDelayMs + (i * this.delayOffsetMs);\r\n        i++;\r\n      }\r\n    });\r\n  }\r\n}\r\n</script>\r\n","<template>\r\n  <transition name=\"fade\" appear>\r\n    <div class=\"hotspot-button\" v-if=\"!hideIfConfiguredToDoSo\"\r\n    :class=\"[\r\n        {'_hotspot-button--has-transition': hasTransition},\r\n        {'hotspot-button--has-pulse': hasPulse},\r\n        'hotspot-button--icon-'+icon,\r\n        'hotspot-button--direction-'+direction,\r\n    ]\"\r\n    :style=\"['left:'+x+'px;top:'+y+'px;', '_transition-delay: '+transitionDelayMs+'ms']\">\r\n      <div\r\n        v-if=\"this.targetId\"\r\n        class=\"hotspot-button__inner\"\r\n        @click=\"onClick\">\r\n        <div class=\"hotspot-button__icon\" :style=\"['animation-duration: '+pulseIntervalMs+'ms', 'animation-delay: '+pulseIntervalMs+'ms']\"></div>\r\n        <div class=\"hotspot-button__title\">{{title}}</div>\r\n      </div>\r\n      <a\r\n        v-else-if=\"this.externalUrl\"\r\n        class=\"hotspot-button__inner\"\r\n        :href=\"this.externalUrl\"\r\n        target=\"_blank\">\r\n        <div class=\"hotspot-button__icon\" :style=\"['animation-duration: '+pulseIntervalMs+'ms', 'animation-delay: '+pulseIntervalMs+'ms']\"></div>\r\n        <div class=\"hotspot-button__title\">{{title}}</div>\r\n      </a>\r\n    </div>\r\n  </transition>\r\n</template>\r\n\r\n<script>\r\nimport {goToPathByID} from '@/helpers/navigationHelper';\r\n\r\n\r\nexport default {\r\n  name: 'HotspotButton',\r\n  props:\r\n  {\r\n      title: String,\r\n      x: Number,\r\n      y: Number,\r\n      targetPath: String,\r\n      targetId: Number,\r\n      externalUrl: String,\r\n      hasTransition: Boolean,\r\n      transitionDelayMs: Number,\r\n      hasPulse: Boolean,\r\n      pulseIntervalMs: Number,\r\n      icon: String,\r\n      direction: String,\r\n      hideIfOffline: Boolean,\r\n      hideIfNotInMeeting: Boolean,\r\n      hideIfInMeeting: Boolean\r\n  },\r\n  computed:\r\n  {\r\n    hideIfConfiguredToDoSo()\r\n    {\r\n      // NOTE: hideIfOffline\r\n      /* global isElectron */\r\n      var isOffline = (typeof(isElectron) !== \"undefined\" && isElectron);\r\n      if (this.hideIfOffline && isOffline)\r\n      {\r\n        return true;\r\n      }\r\n\r\n      // NOTE: Find out if we are in a meeting\r\n      var validMeetingCode = this.$store.state.meeting.meetingCode;\r\n      var isInMeeting = (this.$route.query.meeting === validMeetingCode);\r\n\r\n      // NOTE: hideIfNotInMeeting\r\n      if (this.hideIfNotInMeeting && !isInMeeting)\r\n      {\r\n        return true;\r\n      }\r\n\r\n      // NOTE: hideIfInMeeting\r\n      if (this.hideIfInMeeting && isInMeeting)\r\n      {\r\n        return true;\r\n      }\r\n\r\n      return false;\r\n    },\r\n  },\r\n  methods:\r\n  {\r\n    onClick()\r\n    {\r\n      if (this.targetId)\r\n      {\r\n          var transformOrigin = (this.x / 1920)*100+'% ' + (this.y / 1080)*100+'%';\r\n          this.$store.commit('setSceneTransitionEffect', {type: 'zoomAndFade', transformOrigin: transformOrigin});\r\n\r\n          goToPathByID(this.targetId);\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n","import { createStore } from 'vuex'\r\nimport config from '@/config';\r\nimport { preloadImages, getUmbracoMediaItemSrc } from '@/helpers/assetHelper';\r\n\r\nexport default createStore({\r\n\r\n  state:\r\n  {\r\n    manifestWasLoaded: false,\r\n    isLoading: false,\r\n    scenes: [],\r\n    contentComponents: [],\r\n    products: [],\r\n    productCategories: [],\r\n    meeting: {},\r\n    sceneTransitionEffect: {type: 'none'},\r\n    measuringUnit: 'metric' // metric/imperial\r\n  },\r\n  \r\n  mutations:\r\n  {\r\n    setLoadingState(state, payload)\r\n    {\r\n      state.isLoading = payload;\r\n    },\r\n\r\n    setMeasuringUnit(state, payload)\r\n    {\r\n      state.measuringUnit = payload;\r\n    },\r\n\r\n    setSceneTransitionEffect(state, payload)\r\n    {\r\n      state.sceneTransitionEffect = {\r\n        type: payload.type,\r\n        transformOrigin: payload.transformOrigin\r\n      }\r\n    },\r\n\r\n    attatchSortedManifestData (state, payload)\r\n    {\r\n      var sortedManifest = payload;\r\n\r\n      state.scenes = sortedManifest.scenes;\r\n      state.contentComponents = sortedManifest.contentComponents;\r\n      state.products = sortedManifest.products;\r\n      state.productCategories = sortedManifest.productCategories;\r\n      state.meeting = sortedManifest.meeting;\r\n    }\r\n  },\r\n\r\n  actions:\r\n  {\r\n    loadManifest(context)\r\n    {\r\n      context.commit('setLoadingState', true);\r\n\r\n      var manifestPath = config.manifestPath;\r\n\r\n      var fetchManifestPromise = fetch(manifestPath, {\r\n        method: 'GET',\r\n        mode: 'cors',\r\n        cache: 'no-store',\r\n        credentials: 'same-origin',\r\n        headers: {\r\n            // 'Content-Type': 'application/json'\r\n        },\r\n      })\r\n      .then(\r\n        (response) => {\r\n            return response.json();\r\n        }\r\n      )\r\n\r\n\r\n      fetchManifestPromise.then(\r\n        (data) => {\r\n          var manifestData = data;\r\n          var sortedManifest = sortManifest(manifestData);\r\n\r\n          // NOTE: Add a minimum delay to ensure the loading screen dosen't \"flash\" awkwardly on screen when loading happens instantly.\r\n          var delayPromise = new Promise((resolve/*, reject*/)=>{\r\n            setTimeout(() => {\r\n                resolve();\r\n            }, 500);\r\n          });\r\n\r\n          // NOTE: Preload images here\r\n          var imageUrlsToPreload = [];\r\n          sortedManifest.scenes.forEach((scene)=>{\r\n            if (scene.data && scene.data.backgroundImage)\r\n            {\r\n              var imageSrc = getUmbracoMediaItemSrc(scene.data.backgroundImage);\r\n              imageUrlsToPreload.push(imageSrc);\r\n            }\r\n          });\r\n          sortedManifest.products.forEach((product)=>{\r\n            if (product.data.productImage)\r\n            {\r\n              imageUrlsToPreload.push(getUmbracoMediaItemSrc(product.data.productImage));\r\n            }\r\n            if (product.data.productIcon)\r\n            {\r\n              imageUrlsToPreload.push(getUmbracoMediaItemSrc(product.data.productIcon));\r\n            }\r\n            if (product.data.productScaleOutlineImage)\r\n            {\r\n              imageUrlsToPreload.push(getUmbracoMediaItemSrc(product.data.productScaleOutlineImage));\r\n            }\r\n            if (product.data.specPopupScaleImage)\r\n            {\r\n              imageUrlsToPreload.push(getUmbracoMediaItemSrc(product.data.specPopupScaleImage));\r\n            }\r\n          })\r\n\r\n          var preloadImagesPromise = preloadImages(imageUrlsToPreload, true);\r\n          Promise.all([preloadImagesPromise, delayPromise])\r\n            .then(()=>{\r\n              context.commit('attatchSortedManifestData', sortedManifest);\r\n              context.commit('setLoadingState', false);\r\n            });\r\n\r\n        });\r\n    }\r\n  }\r\n\r\n});\r\n\r\n// NOTE: Iterate the manifest data and map it to a more convenient structure\r\nfunction sortManifest(manifestData)\r\n{\r\n  var sortedManifest = {\r\n    scenes: [],\r\n    contentComponents: [],\r\n    products: [],\r\n    productCategories: [],\r\n    meeting: {}\r\n  };\r\n\r\n  var expoRoot = null;\r\n  if (manifestData.custom && manifestData.custom.length > 0 && manifestData.custom[0].type === 'expoSite')\r\n  {\r\n    expoRoot = manifestData.custom[0];\r\n  }\r\n  else\r\n  {\r\n    // TODO: Throw an error\r\n  }\r\n  \r\n  expoRoot.Children.forEach((node)=>{\r\n\r\n    // NOTE: Get scenes\r\n    if (node.type === 'sceneRoot')\r\n    {\r\n      var scenes = []\r\n      var contentComponents = [];\r\n      recursivelySortScenes(node, null, scenes, contentComponents);\r\n\r\n      sortedManifest.scenes = scenes;\r\n      sortedManifest.contentComponents = contentComponents;\r\n    }\r\n\r\n    else if (node.type === 'meeting')\r\n    {\r\n      sortedManifest.meeting = node.data;\r\n    }\r\n\r\n    // NOTE: Get products\r\n    else if (node.type === 'products')\r\n    {\r\n      var products = [];\r\n\r\n      if (node.Children)\r\n      {\r\n        node.Children.forEach((childNode)=>{\r\n\r\n          if (childNode.type === 'product')\r\n          {\r\n            products.push({\r\n              id: childNode.id,\r\n              slug: childNode.data.slug,\r\n              name: childNode.data.productName,\r\n              categories: childNode.data.categories,\r\n              data: childNode.data // NOTE: Just add all remaining data here\r\n            });\r\n          }\r\n          else if (childNode.type === 'productCategories')\r\n          {\r\n            sortedManifest.productCategories = childNode.Children;\r\n          }\r\n\r\n        });\r\n      }\r\n\r\n      sortedManifest.products = products;\r\n    }\r\n\r\n  });\r\n\r\n  return sortedManifest;\r\n}\r\n\r\nfunction recursivelySortScenes(node, parentScene, arrayOfScenes, arrayOfContentComponents)\r\n{  \r\n  var scene = {\r\n    id: node.id,\r\n    parentId: (parentScene ? parentScene.id : null),\r\n    slug: node.data.slug,\r\n    path: (parentScene ? (parentScene.path + node.data.slug + '/') : '/'),\r\n    title: node.data.title,\r\n    type: node.type,\r\n    sceneComponents: node.data.sceneComponents,\r\n    data: node.data // NOTE: Just add all remaining data here\r\n  };\r\n  arrayOfScenes.push(scene);\r\n\r\n  if (node.Children)\r\n  {\r\n    node.Children.forEach((childNode)=>{\r\n      if (childNode.type == \"scene\" || childNode.type == \"productsScene\" || childNode.type == \"meetingScene\")\r\n      {\r\n        recursivelySortScenes(childNode, scene, arrayOfScenes, arrayOfContentComponents);\r\n      }\r\n      // NOTE: Assume everything else is a content component\r\n      else\r\n      {\r\n        var contentComponent = {\r\n          id: childNode.id,\r\n          scene: scene,\r\n          slug: childNode.data.slug,\r\n          path: scene.path + childNode.data.slug + '/',\r\n          type: childNode.type,\r\n          data: childNode.data // NOTE: Just add all remaining data here\r\n        }\r\n        arrayOfContentComponents.push(contentComponent);\r\n      }\r\n    });\r\n  }\r\n\r\n  return arrayOfScenes;\r\n}","import store from '@/store';\r\nimport router from '@/router';\r\n\r\n// NOTE: Handy functions for doing navigation related stuff\r\n\r\n// NOTE: Functions for getting content\r\n\r\nfunction getCurrentSceneContent()\r\n{\r\n    var currentPath = router.currentRoute.value.path;\r\n    return getSceneContentByPath(currentPath);\r\n}\r\n\r\n// function getCurrentParentSceneContent() {}\r\n\r\nfunction getSceneContentByPath(path)\r\n{\r\n    var result = {\r\n        sceneData: null,\r\n        contentComponentData: null,\r\n    };\r\n\r\n    // NOTE: Look for matching path in content components\r\n    store.state.contentComponents.forEach((contentComponent)=>{\r\n        if (path === contentComponent.path)\r\n        {\r\n            result.contentComponentData = contentComponent;\r\n\r\n            // NOTE: If we locate a matching content component. Update scene path to make sure we get the scene the content compnent is attached to\r\n            path = contentComponent.scene.path;\r\n        }\r\n    });\r\n\r\n    // NOTE: Look for matching path in scenes\r\n    store.state.scenes.forEach((scene)=>{\r\n        if (\r\n            (path === scene.path) || // NOTE: Match if path is identical\r\n            (scene.type === 'productsScene' && path.indexOf(scene.path) == 0) // NOTE: Match if current path start with scene path\r\n        )\r\n        {\r\n            result.sceneData = scene;\r\n        }\r\n    });\r\n\r\n    return result;\r\n}\r\n\r\nfunction getSceneContentByID(id)\r\n{\r\n    var result = {\r\n        sceneData: null,\r\n        contentComponentData: null,\r\n    };\r\n\r\n    // NOTE: Used for getting scene data if ID matches a content component rather than a scene\r\n    var path = null;\r\n\r\n    // NOTE: Look for matching path in content components\r\n    store.state.contentComponents.forEach((contentComponent)=>{\r\n        if (id === contentComponent.id)\r\n        {\r\n            result.contentComponentData = contentComponent;\r\n\r\n            // NOTE: If we locate a matching content component. Update scene path to make sure we get the scene the content compnent is attached to\r\n            path = contentComponent.scene.path;\r\n        }\r\n    });\r\n\r\n    // NOTE: Look for matching path in scenes\r\n    store.state.scenes.forEach((scene)=>{\r\n        if (id === scene.id)\r\n        {\r\n            result.sceneData = scene;\r\n        }\r\n        else if (path === scene.path)\r\n        {\r\n            result.sceneData = scene;\r\n        }\r\n    });\r\n\r\n    return result;\r\n}\r\n\r\nfunction getProductBySlug(slug)\r\n{\r\n    var result = null;\r\n\r\n    store.state.products.forEach((product)=>{\r\n        if (product.slug === slug)\r\n        {\r\n            result = product;\r\n        }\r\n    });\r\n\r\n    return result;\r\n}\r\n\r\nfunction getPathByID(id)\r\n{\r\n    var result = null;\r\n\r\n    var sceneContent = getSceneContentByID(id);\r\n    if (sceneContent.contentComponentData)\r\n    {\r\n        result = sceneContent.contentComponentData.path;\r\n    }\r\n    else if (sceneContent.sceneData)\r\n    {\r\n        result = sceneContent.sceneData.path;\r\n    }\r\n    else\r\n    {\r\n        console.error('Invalid path');\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\n\r\n// NOTE: Functions for going places\r\n\r\nfunction goToPath(path)\r\n{\r\n    router.push({path: path, query: router.currentRoute.value.query});\r\n}\r\n\r\nfunction goToPathByID(id)\r\n{\r\n    var path = getPathByID(id);\r\n    if (path)\r\n    {\r\n        goToPath(path);\r\n    }\r\n}\r\n\r\nfunction goToParentScene()\r\n{\r\n    var pathToGoTo = null;\r\n    var sceneContent = getCurrentSceneContent();\r\n    if (sceneContent.sceneData && sceneContent.sceneData.parentId)\r\n    {\r\n        pathToGoTo = sceneContent.sceneData.parentId;\r\n    }\r\n\r\n    // NOTE: Handle special cases\r\n    /*\r\n    if (sceneContent.sceneData && sceneContent.sceneData.type === 'productsScene')\r\n    {\r\n        if (router.currentRoute.value.params.productSlug)\r\n        {\r\n            pathToGoTo = sceneContent.sceneData.id;\r\n        }\r\n    }\r\n    */\r\n\r\n    if (pathToGoTo)\r\n    {\r\n        goToPathByID(pathToGoTo);\r\n    }\r\n}\r\n\r\nfunction closeComponentIfOpen()\r\n{\r\n    var sceneContent = getCurrentSceneContent();\r\n    goToPath(sceneContent.sceneData.path);\r\n}\r\n\r\n// NOTE: Misc\r\n\r\nfunction getBreadcrumbs()\r\n{\r\n    var breadCrumbs = [];\r\n\r\n    var sceneContent = getCurrentSceneContent();\r\n\r\n    // NOTE: Build breadcrumbs for special cases (parameterized scenes)\r\n    if (sceneContent.sceneData && sceneContent.sceneData.type === 'productsScene')\r\n    {\r\n        if (router.currentRoute.value.params.productSlug)\r\n        {\r\n            var product = getProductBySlug(router.currentRoute.value.params.productSlug);\r\n            if (product)\r\n            {\r\n                breadCrumbs.push({\r\n                    id: 'product',\r\n                    title: product.name,\r\n                    path: null\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    // NOTE: Build breadcrumbs from scene hierachy\r\n    while (sceneContent && sceneContent.sceneData)\r\n    {\r\n        breadCrumbs.push({\r\n            preventClick: (sceneContent.sceneData.type === 'productsScene'),\r\n            id: sceneContent.sceneData.id,\r\n            title: sceneContent.sceneData.title,\r\n            path: sceneContent.sceneData.path\r\n        });\r\n\r\n        if (sceneContent.sceneData.parentId)\r\n        {\r\n            sceneContent = getSceneContentByID(sceneContent.sceneData.parentId);\r\n        }\r\n        else {\r\n            sceneContent = null;\r\n        }\r\n    }\r\n\r\n    breadCrumbs.reverse();\r\n\r\n    return breadCrumbs;\r\n}\r\n\r\nexport {\r\n    getCurrentSceneContent,\r\n    getSceneContentByPath,\r\n    getSceneContentByID,\r\n    getProductBySlug,\r\n    getPathByID,\r\n    goToPath,\r\n    goToPathByID,\r\n    goToParentScene,\r\n    closeComponentIfOpen,\r\n    getBreadcrumbs\r\n};\r\n","import { render } from \"./HotspotButton.vue?vue&type=template&id=396110a2\"\nimport script from \"./HotspotButton.vue?vue&type=script&lang=js\"\nexport * from \"./HotspotButton.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\r\n\r\n    <div class=\"background-video\">\r\n\r\n      <div class=\"background-video__preview\" :style=\"positionCss\" @click=\"videoIsOpen = true\">\r\n\r\n        <div class=\"background-video__frame\" :style=\"videoFrameCss\">\r\n          <video v-if=\"videoPreviewFile\" :src=\"mediaUrl(videoPreviewFile)\"\r\n            muted \r\n            autoplay \r\n            loop \r\n            playsinline>\r\n          </video>\r\n        </div>\r\n\r\n        <div class=\"background-video__toggle-btn\"></div>\r\n\r\n      </div>\r\n\r\n      <Popup type=\"video\" v-if=\"videoIsOpen\" @close=\"videoIsOpen = false\">\r\n        <BasicVideo\r\n          :videoMediaFile=\"videoFile\"\r\n          :videoLink=\"videoLink\"\r\n          :controls=\"true\"\r\n          :loop=\"false\"\r\n          :autoplay=\"true\"\r\n          :muted=\"false\"/>\r\n      </Popup>\r\n\r\n    </div>\r\n\r\n</template>\r\n\r\n<script>\r\nimport { getUmbracoMediaItemSrc } from '@/helpers/assetHelper';\r\nimport Popup from '@/components/Popup';\r\nimport BasicVideo from '@/components/BasicVideo';\r\n\r\nexport default {\r\n  name: 'HotspotButton',\r\n  components: {Popup, BasicVideo},\r\n  props:\r\n  {\r\n      videoPreviewFile: Object,\r\n      videoFile: Object,\r\n      videoLink: String,\r\n      positionCss: String,\r\n      videoFrameCss: String\r\n  },\r\n  data()\r\n  {\r\n    return {\r\n      videoIsOpen: false\r\n    }\r\n  },\r\n  methods:\r\n  {\r\n    mediaUrl(image)\r\n    {\r\n      return getUmbracoMediaItemSrc(image);\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n    <div class=\"popup\" :class=\"'popup--style-'+type\">\r\n        <div class=\"popup__window\">\r\n            <slot></slot>\r\n            <div class=\"popup__close-btn\" @click=\"$emit('close')\"></div>\r\n        </div>\r\n        <div class=\"popup__overlay\" @click=\"$emit('close')\"></div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\nimport eventBus from '@/helpers/eventBus';\r\n\r\nexport default {\r\n  name: 'Popup',\r\n  props: {\r\n      type: String\r\n  },\r\n  created()\r\n  {\r\n    eventBus.emit('mainNavigation.hide');\r\n  },\r\n  unmounted()\r\n  {\r\n    eventBus.emit('mainNavigation.unHide');\r\n  }\r\n}\r\n</script>","import mitt from 'mitt'\r\n\r\nvar eventBus = mitt();\r\n\r\nexport default eventBus;","import { render } from \"./Popup.vue?vue&type=template&id=57fb61e0\"\nimport script from \"./Popup.vue?vue&type=script&lang=js\"\nexport * from \"./Popup.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\r\n  <div class=\"basic-video\">\r\n\r\n    <div\r\n        v-if=\"videoType === 'iframe'\"\r\n        class=\"basic-video__iframe-wrapper\"\r\n        v-html=\"videoEmbedCodeFromURL\">\r\n    </div>\r\n    <div\r\n        v-if=\"videoType === 'html5'\"\r\n        class=\"basic-video__html5-wrapper\">\r\n        <video\r\n            ref=\"html5Video\"\r\n            :src=\"getMediaSrc(videoMediaFile)\"\r\n            :controls=\"controls\"\r\n            :muted=\"muted\"\r\n            :autoplay=\"autoplay\"\r\n            :loop=\"loop\"\r\n            playsinline>\r\n        </video>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport { getUmbracoMediaItemSrc } from '@/helpers/assetHelper';\r\n\r\nexport default {\r\n    name: 'BasicVideo',\r\n    props: {\r\n        videoMediaFile: Object,\r\n        videoLink: String,\r\n        controls: Boolean,\r\n        autoplay: Boolean,\r\n        loop: Boolean,\r\n        muted: Boolean,\r\n        active: Boolean\r\n    },\r\n    data() {\r\n        return {}\r\n    },\r\n    watch: {\r\n        active(value)\r\n        {\r\n            if (this.videoType === 'html5')\r\n            {\r\n                if (value)\r\n                {\r\n                    // NOTE: Start the video\r\n                    this.$refs.html5Video.play();\r\n                }\r\n                else\r\n                {\r\n                    // NOTE: Stop the video\r\n                    this.$refs.html5Video.pause();\r\n                    // this.$refs.html5Video.currentTime = 0; // NOTE: Enable this if the video should reset when interrupted.\r\n                }\r\n            }\r\n            else\r\n            {\r\n                // NOTE: Starting/stopping video currently not implemented for external videos. (youtube, vimeo)\r\n            }\r\n        }\r\n    },\r\n    computed:\r\n    {\r\n        videoType()\r\n        {\r\n            if (this.videoMediaFile)\r\n            {\r\n                return 'html5';\r\n            }\r\n            else if (this.videoLink)\r\n            {\r\n                return 'iframe'\r\n            }\r\n\r\n            return false;\r\n        },\r\n        videoEmbedCodeFromURL()\r\n        {\r\n            var link = this.videoLink;\r\n\r\n            var isVimeo = this.videoLink.indexOf('vimeo') !== -1;\r\n            var isYoutube = this.videoLink.indexOf('youtube') !== -1;\r\n            var iframeMarkup = null;\r\n\r\n            if (isVimeo)\r\n            {\r\n                // NOTE: Generate vimeo embed markup\r\n                var match = /vimeo.*\\/(\\d+)/i.exec(link);\r\n                var vimeoVideoId = null;\r\n\r\n                if (match)\r\n                {\r\n                    vimeoVideoId = match[1];\r\n                }\r\n\r\n                if (vimeoVideoId)\r\n                {\r\n                    iframeMarkup = `<iframe \r\n                        src=\"https://player.vimeo.com/video/`+vimeoVideoId+`?autoplay=1\"\r\n                        frameborder=\"0\"\r\n                        allow=\"autoplay\"\r\n                        allowfullscreen=\"allowfullscreen\"\r\n                        mozallowfullscreen=\"mozallowfullscreen\" \r\n                        msallowfullscreen=\"msallowfullscreen\" \r\n                        oallowfullscreen=\"oallowfullscreen\" \r\n                        webkitallowfullscreen=\"webkitallowfullscreen\"\r\n                    ></iframe>`;\r\n\r\n                    return iframeMarkup;\r\n                }\r\n            }\r\n            else if (isYoutube)\r\n            {\r\n                // NOTE: Generate youtube embed markup\r\n                var youtubeVideoId = link.split('v=')[1];\r\n                var ampersandPosition = youtubeVideoId.indexOf('&');\r\n                if (ampersandPosition != -1)\r\n                {\r\n                    youtubeVideoId = youtubeVideoId.substring(0, ampersandPosition);\r\n                }\r\n\r\n                iframeMarkup = `<iframe \r\n                    src=\"https://www.youtube.com/embed/`+youtubeVideoId+`?modestbranding=1&showinfo=0&autoplay=1&autohide=1&rel=0\"\r\n                    frameborder=\"0\"\r\n                    allow=\"autoplay\"\r\n                    allowfullscreen=\"allowfullscreen\"\r\n                    mozallowfullscreen=\"mozallowfullscreen\" \r\n                    msallowfullscreen=\"msallowfullscreen\" \r\n                    oallowfullscreen=\"oallowfullscreen\" \r\n                    webkitallowfullscreen=\"webkitallowfullscreen\"\r\n                ></iframe>`;\r\n\r\n                return iframeMarkup;\r\n            }\r\n\r\n            return '';\r\n        },\r\n    },\r\n    mounted()\r\n    {\r\n        // NOTE: Start playing if active initially\r\n        if (this.videoType === 'html5' && this.active)\r\n        {\r\n            this.$refs.html5Video.play();    \r\n        }\r\n    },\r\n    methods: {\r\n        getMediaSrc(mediaItem) {\r\n            return getUmbracoMediaItemSrc(mediaItem);\r\n        }\r\n    }\r\n}\r\n</script>","import { render } from \"./BasicVideo.vue?vue&type=template&id=12ceb2b1\"\nimport script from \"./BasicVideo.vue?vue&type=script&lang=js\"\nexport * from \"./BasicVideo.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./BackgroundVideo.vue?vue&type=template&id=e8776934\"\nimport script from \"./BackgroundVideo.vue?vue&type=script&lang=js\"\nexport * from \"./BackgroundVideo.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\r\n    <div class=\"logo\" :style=\"css\" :class=\"'logo--style-'+style\" @click=\"goToHomePage\"></div>\r\n</template>\r\n\r\n<script>\r\nimport {goToPath} from '@/helpers/navigationHelper';\r\n\r\nexport default {\r\n  name: 'Logo',\r\n  props:\r\n  {\r\n      css: String,\r\n      style: String\r\n  },\r\n  methods:\r\n  {\r\n    goToHomePage()\r\n    {\r\n      goToPath('/');\r\n    }\r\n  }\r\n}\r\n</script>","import { render } from \"./Logo.vue?vue&type=template&id=10b772f6\"\nimport script from \"./Logo.vue?vue&type=script&lang=js\"\nexport * from \"./Logo.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./SceneComponentRenderer.vue?vue&type=template&id=a9cf9e2c\"\nimport script from \"./SceneComponentRenderer.vue?vue&type=script&lang=js\"\nexport * from \"./SceneComponentRenderer.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\r\n\r\n    <!-- NOTE: We manually map data to vue components here -->\r\n\r\n    <ContentPopup v-if=\"contentComponentData.type === 'contentPopup'\" :tabs=\"contentComponentData.data.tabs\" @close=\"closeContentComponent\"/>\r\n\r\n    <IframeInPopup v-if=\"contentComponentData.type === 'iframeInPopup'\" :customStyle=\"contentComponentData.data.customStyle\" :iframeSrc=\"contentComponentData.data.source\" @close=\"closeContentComponent\"/>\r\n\r\n</template>\r\n\r\n<script>\r\nimport ContentPopup from '@/components/content-components/ContentPopup';\r\nimport IframeInPopup from '@/components/content-components/IframeInPopup';\r\nimport {closeComponentIfOpen} from '@/helpers/navigationHelper';\r\n\r\nexport default {\r\n  name: 'ContentComponentRenderer',\r\n  components: {\r\n    ContentPopup,\r\n    IframeInPopup\r\n  },\r\n  props: {\r\n      contentComponentData: Object\r\n  },\r\n  created()\r\n  {\r\n  },\r\n  methods:\r\n  {\r\n    closeContentComponent()\r\n    {\r\n      closeComponentIfOpen();\r\n    }\r\n  }\r\n}\r\n</script>\r\n","<template>\r\n  <Popup type=\"content\" @close=\"$emit('close')\">\r\n      <div class=\"content-popup\">\r\n\r\n        <div class=\"content-popup__tabs\">\r\n\r\n          <div class=\"content-popup__tab\"\r\n            v-for=\"(tab,i) in tabs\" :key=\"i\"\r\n            :class=\"{'content-popup__tab--selected': i === currentTabIndex}\">\r\n            <div class=\"content-poup__slideshow\">\r\n              <Slider v-if=\"tab.slides\" :slides=\"tab.slides\" style-variant=\"default\" @openVideo=\"openVideo\"/>\r\n            </div>\r\n            <div class=\"content-popup__text-content\">\r\n              <div class=\"content-popup__heading\">{{tab.heading}}</div>\r\n              <div class=\"content-popup__sub-heading\" v-html=\"tab.subHeading\"></div>\r\n              <div class=\"content-popup__rich-text\" v-html=\"tab.text\"></div>\r\n              <div class=\"content-popup__call-to-action\">\r\n\r\n                <template v-for=\"(link, j) in tab.callToActionLinks\" :key=\"j\">\r\n\r\n                  <Button v-if=\"link.sceneContentReference\" class=\"content-popup__button\" :router-link=\"getPathById(link.sceneContentReference)\">{{link.text}}</Button>\r\n\r\n                  <Button v-else-if=\"link.externalURL\" class=\"content-popup__button\" :href=\"link.externalURL\">{{link.text}}</Button>\r\n\r\n                </template>\r\n\r\n              </div>\r\n\r\n            </div>\r\n          </div>\r\n\r\n        </div>\r\n\r\n        <div class=\"content-popup__tab-navigation\" v-if=\"tabs && tabs.length > 1\">\r\n          <div v-for=\"(tab,i) in tabs\" :key=\"i\"\r\n            class=\"content-popup__tab-navigation-dot\"\r\n            :class=\"{'content-popup__tab-navigation-dot--selected': i === currentTabIndex}\"\r\n            @click=\"goToTab(i)\">\r\n          </div>\r\n        </div>\r\n        \r\n      </div>\r\n  </Popup>\r\n\r\n  <Popup type=\"video\" v-if=\"popupVideoData\" @close=\"popupVideoData = null\">\r\n    <BasicVideo\r\n      :videoMediaFile=\"popupVideoData.videoMediaFile\"\r\n      :videoLink=\"popupVideoData.videoLink\"\r\n      :controls=\"true\"\r\n      :loop=\"false\"\r\n      :autoplay=\"true\"\r\n      :muted=\"false\"/>\r\n  </Popup>\r\n\r\n</template>\r\n\r\n<script>\r\nimport {getPathByID} from '@/helpers/navigationHelper';\r\nimport Popup from '@/components/Popup';\r\nimport Button from '@/components/Button';\r\nimport Slider from '@/components/Slider';\r\nimport BasicVideo from '@/components/BasicVideo';\r\n\r\nexport default {\r\n  name: 'ContentPopup',\r\n  components: {Popup, Button, Slider, BasicVideo},\r\n  emits: [\"close\"],\r\n  props: {\r\n    tabs: Array\r\n  },\r\n  data()\r\n  {\r\n    return {\r\n      currentTabIndex: 0,\r\n      popupVideoData: null\r\n    }\r\n  },\r\n  created()\r\n  {\r\n  },\r\n  methods:\r\n  {\r\n    openVideo(videoData)\r\n    {\r\n      this.popupVideoData = videoData;\r\n    },\r\n    goToTab(tabIndex)\r\n    {\r\n      this.currentTabIndex = tabIndex;\r\n    },\r\n    getPathById(targetId)\r\n    {\r\n      return getPathByID(targetId);\r\n    }\r\n  }\r\n}\r\n</script>\r\n","<template>\r\n\r\n    <router-link v-if=\"routerLink\" class=\"button\" :to=\"{path: routerLink, query: $route.query}\">\r\n        <div class=\"button__title\">\r\n            <slot></slot>\r\n        </div>\r\n        <div class=\"button__icon\"></div>\r\n    </router-link>\r\n\r\n    <a v-else-if=\"href\" class=\"button\" :href=\"href\" target=\"_blank\">\r\n        <div class=\"button__title\">\r\n            <slot></slot>\r\n        </div>\r\n        <div class=\"button__icon\"></div>\r\n    </a>\r\n\r\n    <div v-else class=\"button\">\r\n        <div class=\"button__title\">\r\n            <slot></slot>\r\n        </div>\r\n        <div class=\"button__icon\"></div>\r\n    </div>\r\n\r\n</template>\r\n\r\n<script>\r\n\r\nexport default {\r\n  name: 'Button',\r\n  props: {\r\n    href: String,\r\n    routerLink: String\r\n  }\r\n}\r\n</script>","import { render } from \"./Button.vue?vue&type=template&id=cbfd8822\"\nimport script from \"./Button.vue?vue&type=script&lang=js\"\nexport * from \"./Button.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\r\n  <div class=\"slider\" :class=\"'slider--'+styleVariant\">\r\n    <div class=\"slider__wrap\">\r\n      <div class=\"slider__slides\" :style=\"'transform: translateX(-'+ currentSlideIndex*100 +'%)'\">\r\n        <div class =\"slider__slide\" :class=\"{'slider__slide--current': (currentSlideIndex === i)}\" v-for=\"(slide,i) in slides\" :key=\"i\">\r\n\r\n          <div class=\"slider__slide-inner\">\r\n\r\n            <template v-if=\"slide.image\">\r\n              <div class=\"slider__image-preview\" @click=\"$emit('open-image', {ImageSrc : slide.image})\">\r\n                <img :src=\"mediaUrl(slide.image)\"/>\r\n              </div>\r\n            </template>\r\n\r\n          <template v-if=\"(slide.previewImage || slide.previewVideoFile || slide.videoFile || slide.videoLink)\">\r\n            \r\n            <div class=\"slider__video-preview\" :class=\"{'slider__video-preview--fullscreen-icon-instead-of-arrow': slide.videoFile}\">\r\n\r\n              <img v-if=\"slide.previewImage\" :src=\"mediaUrl(slide.previewImage)\" @click=\"$emit('open-video', {videoMediaFile: slide.videoFile, videoLink: slide.videoLink})\"/>\r\n\r\n              <BasicVideo v-if=\"(slide.videoFile)\"\r\n                :videoMediaFile=\"slide.videoFile\"\r\n                :loop=\"true\"\r\n                :autoplay=\"false\"\r\n                :muted=\"true\"\r\n                :active=\"(currentSlideIndex === i)\"\r\n                @click=\"$emit('open-video', {videoMediaFile: slide.videoFile, videoLink: slide.videoLink})\"/>\r\n\r\n            </div>\r\n\r\n          </template>\r\n\r\n          </div>\r\n\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div class=\"slider__navigation\" v-if=\"slides.length > 1\">\r\n      <div\r\n        class=\"slider__arrow slider__arrow--left\"\r\n        :class=\"{'slider__arrow--disabled': currentSlideIndex <= 0}\"\r\n        @click=\"prevSlide\"></div>\r\n      <div \r\n        class=\"slider__arrow slider__arrow--right\"\r\n        :class=\"{'slider__arrow--disabled': currentSlideIndex+1 >= slides.length}\"\r\n        @click=\"nextSlide\"></div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport { getUmbracoMediaItemSrc } from '@/helpers/assetHelper';\r\nimport BasicVideo from '@/components/BasicVideo';\r\n\r\nexport default {\r\n  name: 'Slider',\r\n  components: {BasicVideo},\r\n  props: {\r\n    slides: Object,\r\n    styleVariant: String\r\n  },\r\n  data()\r\n\t{\r\n\t\treturn {\r\n\t\t\tcurrentSlideIndex: 0\r\n\t\t}\r\n\t},\r\n  methods:\r\n  {\r\n    goToSlide(slideIndex)\r\n    {\r\n      this.currentSlideIndex = slideIndex;\r\n    },\r\n    prevSlide()\r\n\t\t{\r\n\t\t\tif (this.currentSlideIndex > 0)\r\n\t\t\t{\r\n\t\t\t\tthis.currentSlideIndex--;\r\n\t\t\t}\r\n\t\t},\r\n\t\tnextSlide()\r\n\t\t{\r\n\t\t\tif (this.currentSlideIndex+1 < this.slides.length)\r\n\t\t\t{\r\n\t\t\t\tthis.currentSlideIndex++;\r\n\t\t\t}\r\n\t\t},\r\n    mediaUrl(image)\r\n    {\r\n      return getUmbracoMediaItemSrc(image);\r\n    }\r\n  }\r\n}\r\n</script>","import { render } from \"./Slider.vue?vue&type=template&id=8a20717a\"\nimport script from \"./Slider.vue?vue&type=script&lang=js\"\nexport * from \"./Slider.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./ContentPopup.vue?vue&type=template&id=6ebe4760\"\nimport script from \"./ContentPopup.vue?vue&type=script&lang=js\"\nexport * from \"./ContentPopup.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\r\n  <Popup type=\"content\" @close=\"$emit('close')\">\r\n    <div class=\"iframe-in-popup\">\r\n        <iframe :src=\"iframeSrc\" width=\"100%\" height=\"500\" type=\"text/html\" frameborder=\"0\" allowTransparency=\"true\" :style=\"customStyle\"></iframe>\r\n    </div>\r\n  </Popup>\r\n</template>\r\n\r\n<script>\r\nimport Popup from '@/components/Popup';\r\n\r\nexport default {\r\n  name: 'IframeInPopup',\r\n  components: {Popup},\r\n  props: {\r\n    iframeSrc: String,\r\n    customStyle: String\r\n  },\r\n  data()\r\n  {\r\n    return {}\r\n  },\r\n  created()\r\n  {},\r\n  methods:\r\n  {\r\n  }\r\n}\r\n</script>\r\n","import { render } from \"./IframeInPopup.vue?vue&type=template&id=0eedf238\"\nimport script from \"./IframeInPopup.vue?vue&type=script&lang=js\"\nexport * from \"./IframeInPopup.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./ContentComponentRenderer.vue?vue&type=template&id=5b3c67fd\"\nimport script from \"./ContentComponentRenderer.vue?vue&type=script&lang=js\"\nexport * from \"./ContentComponentRenderer.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\r\n\r\n  <div class=\"category-menu\" :class=\"{'category-menu--is-showcase': category.data.isShowcase}\">\r\n\r\n    <div class=\"category-menu__category-info\" v-if=\"category\">\r\n      <div class=\"category-menu__category-title\">{{category.data.categoryName}}</div>\r\n      <div class=\"category-menu__category-description\" v-html=\"category.data.description\"></div>\r\n\r\n      <Button v-if=\"category.data.isShowcase\" @click=\"goBack\" class=\"button--flipped\">Back to Atrium</Button>\r\n\r\n    </div>\r\n\r\n    <div class=\"category-menu__products\" v-if=\"!category.data.isShowcase\">\r\n\r\n      <div class=\"category-menu__products-arrow category-menu__products-arrow--up\" :class=\"{'category-menu__products-arrow--disabled': !canScrollUpProducts}\" @click=\"scrollUpProducts()\"></div>\r\n      <div class=\"category-menu__products-arrow category-menu__products-arrow--down\" :class=\"{'category-menu__products-arrow--disabled': !canScrollDownProducts}\" @click=\"scrollDownProducts()\"></div>\r\n\r\n      <div class=\"category-menu__products-scroll\" ref=\"categoryScroll\">\r\n\r\n        <div class=\"category-menu__products-scroll-inner\">\r\n\r\n          <template v-for=\"(product,i) in productsInCategory\" :key=\"i\">\r\n            <div class=\"category-menu__product\">\r\n              <router-link :to=\"{path: scenePath + product.slug + '/', query: $route.query}\" class=\"category-menu__product-link\">\r\n                <PreloadedImage v-if=\"product.data.productIcon\" class=\"category-menu__product-image\" :src=\"mediaUrl(product.data.productIcon)\"/>\r\n                <div class=\"category-menu__product-title\"><span>{{product.name}}</span></div>\r\n              </router-link>\r\n            </div>\r\n          </template>\r\n\r\n        </div>\r\n\r\n      </div>\r\n\r\n    </div>\r\n\r\n  </div>\r\n\r\n  <div v-if=\"!category.data.isShowcase\" class=\"hotspot-button hotspot-button--icon-arrow hotspot-button--direction-left\" style=\"left: 376px; top: 695px;\" @click=\"goBack\">\r\n    <div class=\"hotspot-button__inner\">\r\n      <div class=\"hotspot-button__icon\" style=\"animation-duration: 16000ms; animation-delay: 16000ms;\"></div>\r\n      <div class=\"hotspot-button__title\">Product Showroom</div>\r\n    </div>\r\n  </div>\r\n\r\n  <div class=\"category-media\" v-if=\"product && mediaSlidesFilteredByCategory\" :key=\"product.id\">\r\n    <Slider v-if=\"mediaSlidesFilteredByCategory\" :slides=\"mediaSlidesFilteredByCategory\" style-variant=\"default\" @openVideo=\"openVideo\" @openImage=\"openImage\"/>\r\n  </div>\r\n\r\n  <template v-if=\"product\">\r\n\r\n    <div class=\"product-display\" :key=\"product.id\">\r\n      <PreloadedImage v-if=\"product.data.productImage\" class=\"product-display__image\" :src=\"mediaUrl(product.data.productImage)\" :style=\"{bottom: -product.data.productImageSpaceBelowInPixels+'px'}\"/>\r\n    </div>\r\n\r\n    <div class=\"product-info\" :key=\"product.id\">\r\n      <div class=\"product-info__name\">{{product.name}}</div>\r\n      <div class=\"product-info__description\" v-html=\"product.data.description\"></div>\r\n\r\n      <Button @click=\"openSpecsPopup\" class=\"button--flipped product-info__button button--icon-plus\">Specifications</Button>\r\n\r\n    </div>\r\n\r\n    <div class=\"scale-chart-small\" :key=\"product.id\" v-if=\"product.data.productScaleOutlineImage && !product.data.hideScaleChart\">\r\n      <div class=\"scale-chart-small__product\" :style=\"{left: product.data.productScaleOutlineImageOffsetX+'px'}\">\r\n        <PreloadedImage v-if=\"product.data.productScaleOutlineImage\" class=\"scale-chart-small__image\" :src=\"mediaUrl(product.data.productScaleOutlineImage)\"/>\r\n      </div>\r\n    </div>\r\n\r\n  </template>\r\n\r\n  <ProductSpecsPopup v-if=\"specsPopupIsOpen\" :product=\"product\" @close=\"closeSpecsPopup\"/>\r\n\r\n  <Popup type=\"video\" v-if=\"popupData.data && popupData.type\" @close=\"popupData = { type : null, data : null}\">\r\n    <BasicVideo\r\n      v-if=\"popupData.type == 'video'\"\r\n      :videoMediaFile=\"popupData.data.videoMediaFile\"\r\n      :videoLink=\"popupData.data.videoLink\"\r\n      :controls=\"true\"\r\n      :loop=\"false\"\r\n      :autoplay=\"true\"\r\n      :muted=\"false\"/>\r\n    <BasicImage \r\n      v-if=\"popupData.type == 'image'\"\r\n      :ImageSrc=\"popupData.data.ImageSrc\" />\r\n  </Popup>\r\n\r\n</template>\r\n\r\n<script>\r\nimport eventBus from '@/helpers/eventBus';\r\nimport Slider from '@/components/Slider';\r\nimport Popup from '@/components/Popup';\r\nimport BasicVideo from '@/components/BasicVideo';\r\nimport BasicImage from '@/components/BasicImage';\r\nimport Button from '@/components/Button';\r\nimport {goToParentScene} from '@/helpers/navigationHelper';\r\nimport PreloadedImage from '@/components/PreloadedImage';\r\nimport { getUmbracoMediaItemSrc } from '@/helpers/assetHelper';\r\nimport ProductSpecsPopup from '@/components/ProductSpecsPopup';\r\n\r\nexport default {\r\n  name: 'ProductsView',\r\n  components: {Slider, /*ModelViewer,*/ Popup, BasicVideo, Button, PreloadedImage, ProductSpecsPopup, BasicImage},\r\n  props: {\r\n    scenePath: String,\r\n    categoryId: Number\r\n  },\r\n  data()\r\n  {\r\n    return {\r\n        products: [],\r\n        productCategories: [],\r\n        popupData: { type : null, data : null},\r\n        \r\n        specsPopupIsOpen: false,\r\n\r\n        scrollHeight: 0,\r\n        scrollTop: 0,\r\n        scrollPageHeight: 0,\r\n        isScrolling: false,\r\n    }\r\n  },\r\n  computed:\r\n  {\r\n    canScrollUpProducts()\r\n    {\r\n      return (this.scrollTop > 0);\r\n    },\r\n    canScrollDownProducts()\r\n    {\r\n      return (this.scrollTop + this.scrollPageHeight < this.scrollHeight /*Note padding*/ - 250);\r\n    },\r\n    productsInCategory()\r\n    {\r\n      var productsFound = [];\r\n\r\n      this.products.forEach((product)=>{\r\n\r\n        if (product.categories && product.categories.indexOf(this.categoryId) !== -1)\r\n        {\r\n          productsFound.push(product);\r\n        }\r\n\r\n      });\r\n\r\n      // NOTE: Sort by size. Large to small\r\n      productsFound.sort((a, b)=>{\r\n        if (a.data.scaleValue > b.data.scaleValue)\r\n        {\r\n          return -1;\r\n        }\r\n        if (a.data.scaleValue < b.data.scaleValue)\r\n        {\r\n          return 1;\r\n        }\r\n        // a must be equal to b\r\n        return 0;\r\n      });      \r\n\r\n      return productsFound;\r\n    },\r\n    product()\r\n    {\r\n      var result = null;\r\n\r\n      if (this.$route.params.productSlug)\r\n      {\r\n        this.products.forEach((product)=>\r\n        {\r\n          if (product.slug === this.$route.params.productSlug)\r\n          {\r\n            result = product;\r\n          }\r\n        });\r\n      }\r\n\r\n      return result;\r\n    },\r\n    category()\r\n    {\r\n      var result = null;\r\n\r\n      this.productCategories.forEach((category)=>{\r\n        if (category.id === this.categoryId)\r\n        {\r\n          result = category;\r\n        }\r\n      });\r\n\r\n      return result;\r\n\r\n    },\r\n    mediaSlidesFilteredByCategory()\r\n    {\r\n      var result = [];\r\n      \r\n      if (this.product && this.product.data && this.product.data.mediaSlides && this.product.data.mediaSlides.length)\r\n      {\r\n        this.product.data.mediaSlides.forEach((slide)=>{\r\n\r\n          // NOTE: Only push slide if matching category (Or if no category is defined)\r\n          if (slide.limitToTheseCategories && slide.limitToTheseCategories.length)\r\n          {\r\n            var categoryMatches = false;\r\n            slide.limitToTheseCategories.forEach((categoryId)=>{\r\n              if (this.categoryId === categoryId)\r\n              {\r\n                categoryMatches = true;\r\n              }\r\n            });\r\n            if (categoryMatches)\r\n            {\r\n              result.push(slide);\r\n            }\r\n          }\r\n          else\r\n          {\r\n            result.push(slide);\r\n          }\r\n        });\r\n      }\r\n\r\n      return result\r\n    }\r\n  },\r\n  created()\r\n  {\r\n    this.products = this.$store.state.products;\r\n    this.productCategories =  this.$store.state.productCategories;\r\n\r\n    this.redirectToFirstProductIfNeeded(this.$route);\r\n\r\n    eventBus.emit('mainNavigation.hideBecauseOfShowroom');\r\n  },\r\n  mounted()\r\n  {\r\n    if (this.$refs.categoryScroll)\r\n    {\r\n      this.doScrollAreaCalculations = ()=>{\r\n        this.scrollHeight = this.$refs.categoryScroll.scrollHeight;\r\n        this.scrollTop = this.$refs.categoryScroll.scrollTop;\r\n        this.scrollPageHeight = this.$refs.categoryScroll.clientHeight;\r\n\r\n        window.clearTimeout(this.isScrolling);\r\n        this.isScrolling = setTimeout(()=>{\r\n          this.snapScrollToNearestProduct();\r\n        }, 66);\r\n      }\r\n      this.doScrollAreaCalculations(); // NOTE: Grab initial sizes\r\n\r\n      this.$refs.categoryScroll.addEventListener('scroll', this.doScrollAreaCalculations);\r\n    }\r\n  },\r\n  unmounted()\r\n  {    \r\n    eventBus.emit('mainNavigation.unHideBecauseOfShowroom');\r\n\r\n    if (this.$refs.categoryScroll)\r\n    {\r\n      this.$refs.categoryScroll.removeEventListener('scroll', this.doScrollAreaCalculations);\r\n      if (this.isScrolling)\r\n      {\r\n        window.clearTimeout(this.isScrolling);\r\n      }\r\n    }\r\n  },\r\n  watch: {\r\n\t\t$route(to) {\r\n      this.redirectToFirstProductIfNeeded(to);\r\n\t\t}\r\n\t},\r\n  methods: \r\n  {\r\n    getScrollProducts()\r\n    {\r\n      var result = [];\r\n\r\n      var productElements = this.$refs.categoryScroll.querySelectorAll('.category-menu__product');\r\n\r\n      var scrollPos = this.$refs.categoryScroll.scrollTop;\r\n      var productClosestToScrollTop = false;\r\n\r\n      productElements.forEach((productElement)=>\r\n      {\r\n        var item = {\r\n          isClosestToScrollTop: false,\r\n          distanceToScrollTop: Math.abs(scrollPos - productElement.offsetTop),\r\n          position: productElement.offsetTop,\r\n          element: productElement,\r\n        }\r\n\r\n        result.push(item);\r\n\r\n        if (!productClosestToScrollTop || item.distanceToScrollTop < productClosestToScrollTop.distanceToScrollTop)\r\n        {\r\n          productClosestToScrollTop = item;\r\n        }\r\n\r\n      });\r\n\r\n      if (productClosestToScrollTop)\r\n      {\r\n        productClosestToScrollTop.isClosestToScrollTop = true;\r\n      }\r\n\r\n      return result;\r\n    },\r\n    scrollUpProducts()\r\n    {\r\n      var scrollProducts = this.getScrollProducts();\r\n\r\n      var productToScrollTo = null;\r\n      scrollProducts.forEach((scrollProduct, i)=>{\r\n        if (scrollProduct.isClosestToScrollTop)\r\n        {\r\n          if (i > 0)\r\n          {\r\n            productToScrollTo = scrollProducts[i-1];\r\n          }\r\n        }\r\n      });\r\n\r\n      this.$refs.categoryScroll.scrollTo({\r\n        top: productToScrollTo.position - 22,\r\n        left: 0,\r\n        behavior: 'smooth'\r\n      });\r\n    },\r\n    scrollDownProducts()\r\n    {\r\n      var scrollProducts = this.getScrollProducts();\r\n\r\n      var productToScrollTo = null;\r\n      scrollProducts.forEach((scrollProduct, i)=>{\r\n        if (scrollProduct.isClosestToScrollTop)\r\n        {\r\n          if (scrollProducts.length >= i)\r\n          {\r\n            productToScrollTo = scrollProducts[i+1];\r\n          }\r\n        }\r\n      });\r\n\r\n      this.$refs.categoryScroll.scrollTo({\r\n        top: productToScrollTo.position - 22,\r\n        left: 0,\r\n        behavior: 'smooth'\r\n      });\r\n    },\r\n    snapScrollToNearestProduct()\r\n    {\r\n      // NOTE: Snap to top visible product.... but we HAVE to make sure the lst ones can be viewed too... allow scrolling way down?\r\n      var scrollProducts = this.getScrollProducts();\r\n\r\n      scrollProducts.forEach((scrollProduct)=>{\r\n        if (scrollProduct.isClosestToScrollTop)\r\n        {\r\n          this.$refs.categoryScroll.scrollTo({\r\n            top: scrollProduct.position - 22,\r\n            left: 0,\r\n            behavior: 'smooth'\r\n          });\r\n        }\r\n      });\r\n    },\r\n    mediaUrl(image)\r\n    {\r\n      return getUmbracoMediaItemSrc(image);\r\n    },\r\n    redirectToFirstProductIfNeeded(route)\r\n    {\r\n      // NOTE: Redirect to first product in category if not already on a product route...\r\n      if (!route.params.productSlug)\r\n      {\r\n        var productToRedirectTo = null;\r\n\r\n        if (this.productsInCategory.length)\r\n        {\r\n           productToRedirectTo = this.productsInCategory[0];\r\n        }\r\n\r\n        if (productToRedirectTo)\r\n        {\r\n          this.$router.replace({path: this.scenePath + productToRedirectTo.slug+'/', query: this.$route.query});\r\n        }\r\n      }\r\n    },\r\n    openVideo(videoData)\r\n    {\r\n      this.popupData.type = 'video';\r\n      this.popupData.data = videoData;\r\n    },\r\n    openImage(imageData)\r\n    {\r\n      this.popupData.type = 'image';\r\n      this.popupData.data = imageData;\r\n    },\r\n    openSpecsPopup()\r\n    {\r\n      this.specsPopupIsOpen = true;\r\n    },\r\n    closeSpecsPopup()\r\n    {\r\n      this.specsPopupIsOpen = false;\r\n    },\r\n    goBack()\r\n    {\r\n      goToParentScene();\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n    <div class=\"basic-image\">\r\n        <img style=\"width: 100%; height: 100%;\" :src=\"getMediaSrc(ImageSrc)\" />\r\n    </div>\r\n  </template>\r\n  \r\n  <script>\r\n  import { getUmbracoMediaItemSrc } from '@/helpers/assetHelper';\r\n  \r\n  export default {\r\n      name: 'BasicImage',\r\n      props: {\r\n          ImageSrc: String\r\n      },\r\n      data() {\r\n          return {}\r\n      },\r\n      watch: {\r\n      },\r\n      computed:\r\n      {\r\n      },\r\n      methods: {\r\n          getMediaSrc(mediaItem) {\r\n              return getUmbracoMediaItemSrc(mediaItem);\r\n          }\r\n      }\r\n  }\r\n  </script>","import { render } from \"./BasicImage.vue?vue&type=template&id=06fb31f5\"\nimport script from \"./BasicImage.vue?vue&type=script&lang=js\"\nexport * from \"./BasicImage.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\r\n\r\n  <Popup type=\"content\" @close=\"$emit('close')\" :key=\"product.id\">\r\n    <div class=\"product-specs\" :class=\"{'product-specs--full-model-view-mode': showModelViewerUI}\">\r\n      <div class=\"product-specs__header\">\r\n        <div class=\"product-specs__name\">{{product.name}}</div>\r\n        <div class=\"product-specs__sub-heading\">Specifications</div>\r\n      </div>\r\n      <div class=\"product-specs__box product-specs__box--1\">\r\n        <div class=\"product-specs__box-heading\">{{product.data.specPopupBox1Heading}}</div>\r\n        <div v-html=\"product.data.specPopupBox1Text\"></div>\r\n      </div>\r\n      <div class=\"product-specs__box product-specs__box--2\">\r\n        <div class=\"product-specs__box-heading\">{{product.data.specPopupBox2Heading}}</div>\r\n        <div v-html=\"product.data.specPopupBox2Text\"></div>\r\n      </div>\r\n      <div class=\"product-specs__box product-specs__box--downloads\" v-if=\"(!isOffline || !isMeetingRoom) && (getDownloadLink(product.data.download1File, product.data.download1Url) || getDownloadLink(product.data.download2File, product.data.download2Url))\">\r\n        <div class=\"product-specs__box-heading\">Downloads</div>\r\n        <div class=\"download-links\">\r\n\r\n          <a v-if=\"product.data.download1Text && getDownloadLink(product.data.download1File, product.data.download1Url)\" class=\"download-links__link\" :class=\"'download-links__link--'+product.data.download1Icon\" target=\"_blank\" :href=\"getDownloadLink(product.data.download1File, product.data.download1Url)\">\r\n            <span>{{product.data.download1Text}}</span>\r\n          </a>\r\n\r\n          <a v-if=\"product.data.download2Text && getDownloadLink(product.data.download2File, product.data.download2Url)\" class=\"download-links__link\" :class=\"'download-links__link--'+product.data.download2Icon\" target=\"_blank\" :href=\"getDownloadLink(product.data.download2File, product.data.download2Url)\">\r\n            <span>{{product.data.download2Text}}</span>\r\n          </a>\r\n\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"product-specs__box product-specs__box--qrCodes\" v-if=\"(product.data.qrCode1 || product.data.qrCode2) && (isOffline || isMeetingRoom)\">\r\n        <div v-if=\"product.data.qrCode1\">\r\n          <p>{{product.data.qrCode1Title}}</p>\r\n          <img :src=\"mediaUrl(product.data.qrCode1)\">\r\n        </div>\r\n        <div v-if=\"product.data.qrCode2\">\r\n          <p>{{product.data.qrCode2Title}}</p>\r\n          <img :src=\"mediaUrl(product.data.qrCode2)\">\r\n        </div>\r\n        <div class=\"product-specs__box--qrZoom\" @click=\"showQR(true)\"></div>\r\n      </div>\r\n      \r\n      <div class=\"product--qrBig\" v-if=\"product.data.qrCode1 && showQrBig || product.data.qrCode2 && showQrBig \">\r\n        <div class=\"qrImageContainer\">\r\n          <div class=\"qrImage\" v-if=\"product.data.qrCode1\" :class=\"[!product.data.qrCode2 ? 'singleBlock' : '']\" >\r\n            <p>{{product.data.qrCode1Title}}</p>\r\n            <img :src=\"mediaUrl(product.data.qrCode1)\">\r\n          </div>\r\n          <div class=\"qrImage\" v-if=\"product.data.qrCode2\" :class=\"[!product.data.qrCode1 ? 'singleBlock' : '']\">\r\n            <p>{{product.data.qrCode2Title}}</p>\r\n            <img :src=\"mediaUrl(product.data.qrCode2)\">\r\n          </div>\r\n          <div class=\"qrClose\" @click=\"showQR(false)\"></div>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"product-specs__box product-specs__box--3\">\r\n        <div class=\"product-specs__box-heading\">{{product.data.specPopupBox3Heading}}</div>\r\n        <div v-html=\"product.data.specPopupBox3Text\"></div>\r\n      </div>\r\n\r\n      <div class=\"product-specs__box product-specs__box--4\">\r\n        <div class=\"product-specs__box-heading\">{{product.data.specPopupBox4Heading}}</div>\r\n        <div v-html=\"product.data.specPopupBox4Text\"></div>\r\n      </div>\r\n\r\n      <div class=\"product-specs__scale\">\r\n\r\n        <div class=\"product-specs__scale-img-frame\"\r\n        :class=\"[{'product-specs__scale-img-frame--loading-3d': product.data.show3DModel && !modelLoaded}, {'product-specs__scale-img-frame--loaded': product.data.show3DModel && modelLoaded}]\"\r\n        :style=\"{bottom: -product.data.productImageSpaceBelowInPixels+'px'}\">\r\n          <PreloadedImage v-if=\"product.data.specPopupScaleImage\" class=\"product-specs__scale-image\" :src=\"mediaUrl(product.data.specPopupScaleImage)\"/>\r\n        </div>\r\n\r\n        <div class=\"product-specs__scale-unit product-specs__scale-unit--width\">\r\n          <span v-if=\" unit === 'metric'\">{{product.data.scaleWidthCentimeters}} cm</span>\r\n          <span v-if=\" unit === 'imperial'\">{{product.data.scaleWidthInches}} inches</span>\r\n        </div>\r\n        <div class=\"product-specs__scale-unit product-specs__scale-unit--height\">\r\n          <span  v-if=\" unit === 'metric'\">{{product.data.scaleHeightCentimeters}} cm</span>\r\n          <span  v-if=\" unit === 'imperial'\">{{product.data.scaleHeightInches}} inches</span>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"product-specs__scale-unit-toggle toggle-button\">\r\n        <div class=\"toggle-button__value\" :class=\"{'toggle-button__value--selected': unit === 'metric' }\" @click=\"setUnit('metric')\">Metric</div>\r\n        <div class=\"toggle-button__value\" :class=\"{'toggle-button__value--selected': unit === 'imperial' }\" @click=\"setUnit('imperial')\">Imperial</div>\r\n      </div>\r\n\r\n      <div class=\"product-specs__3d-view\" v-if=\"product.data.show3DModel && product.data.product3DModel\">\r\n\r\n        <ModelViewer :src=\"product3DModel\" :distance=\"initialModelDistanceAsNumber\" @loaded=\"onModelLoad\" @onWheel=\"handleWheel\" @onDrag=\"handleDrag\"/>\r\n\r\n      </div>\r\n\r\n      <div class=\"product-specs__3d-loading\" v-if=\"product.data.show3DModel && !modelLoaded\"></div>\r\n\r\n      <div class=\"product-specs__3d-instructions\" v-if=\"product.data.show3DModel && modelLoaded && !modelHasBeenDragged\">\r\n        <span>Use mouse</span>\r\n        <span></span>\r\n        <span></span>\r\n      </div>\r\n\r\n      <div class=\"product-specs__3d-viewer-header\">\r\n        <div class=\"product-specs__name product-specs__name--small\">{{product.name}}</div>\r\n        <Button class=\"button--icon-plus button--flipped button--inline\" @click=\"resetModelView\">Show specifications</Button>\r\n      </div>\r\n\r\n      <div class=\"product-specs__3d-controls\" v-if=\"modelLoaded && model\">\r\n        \r\n        <div class=\"product-specs__3d-controls-title\">Radome</div>\r\n\r\n        <div class=\"toggle-button\">\r\n          <div class=\"toggle-button__value\" :class=\"{'toggle-button__value--selected': !radomeHidden}\" @click=\"viewerShowRadome\">On</div>\r\n          <div class=\"toggle-button__value\" :class=\"{'toggle-button__value--selected': radomeHidden}\" @click=\"viewerHideRadome\">Off</div>\r\n        </div>\r\n\r\n      </div>\r\n\r\n    </div>\r\n\r\n  </Popup>\r\n\r\n</template>\r\n\r\n<script>\r\nimport Popup from '@/components/Popup';\r\nimport PreloadedImage from '@/components/PreloadedImage';\r\nimport ModelViewer from '@/components/ModelViewer';\r\nimport Button from '@/components/Button';\r\nimport eventBus from '@/helpers/eventBus';\r\nimport { getUmbracoMediaItemSrc } from '@/helpers/assetHelper';\r\n\r\nexport default {\r\n  name: 'ProductSpecsPopup',\r\n  components: {Popup, PreloadedImage, ModelViewer, Button},\r\n  props: {\r\n    product: Object\r\n  },\r\n  data()\r\n  {\r\n    return {\r\n      unit: this.$store.state.measuringUnit,\r\n\r\n      // Model Viewer\r\n      modelLoaded: false,\r\n      model: null,\r\n      omvRef: {omv: null},\r\n      modelHasBeenDragged: false,\r\n      showModelViewerUI: false,\r\n      radomeHidden: false,\r\n      showQrBig: false\r\n    };\r\n  },\r\n  computed:\r\n  {\r\n    isMeetingRoom(){\r\n      let meetingRoom = document.querySelector(\".meeting-room\");\r\n      if(meetingRoom){\r\n        return true;\r\n      }else{\r\n        return false;\r\n      }\r\n    },\r\n    isOffline()\r\n    {\r\n      /* global isElectron */\r\n      return (typeof(isElectron) !== \"undefined\" && isElectron);\r\n    },\r\n    initialModelDistanceAsNumber()\r\n    {\r\n      var result = parseFloat(this.product.data.initialModelDistance);\r\n      if (isNaN(result))\r\n      {\r\n        result = 0;\r\n      }\r\n      return result;\r\n    },\r\n    product3DModel()\r\n    {\r\n      if (!this.product.data.product3DModel)\r\n      {\r\n        return;\r\n      }\r\n      return getUmbracoMediaItemSrc(this.product.data.product3DModel);\r\n    },\r\n  },\r\n  methods:\r\n  {\r\n    showQR(toggle){\r\n      this.showQrBig = toggle;\r\n    },\r\n    setUnit(unit)\r\n    {\r\n      this.$store.commit('setMeasuringUnit', unit);\r\n    },\r\n    getDownloadLink(downloadFile, downloadUrl)\r\n    {\r\n      var result = '';\r\n      if (downloadUrl) \r\n      {\r\n        result = downloadUrl;\r\n      }  \r\n      if (downloadFile)\r\n      {\r\n        result = getUmbracoMediaItemSrc(downloadFile)\r\n      }\r\n  \r\n      return result;\r\n    },\r\n    mediaUrl(image)\r\n    {\r\n      return getUmbracoMediaItemSrc(image);\r\n    },\r\n    viewerShowRadome()\r\n    {\r\n      this.radomeHidden = false;\r\n      this.resetMaterials();\r\n    },\r\n    viewerHideRadome()\r\n    {\r\n      this.radomeHidden = true;\r\n      this.model.materialGroups.forEach((materialGroup)=>{\r\n        this.changeMaterial(materialGroup.matGrp);\r\n      });\r\n    },\r\n    handleWheel()\r\n    {\r\n      this.showModelViewerUI = true;\r\n    },\r\n    handleDrag()\r\n    {\r\n      this.modelHasBeenDragged = true;\r\n      this.showModelViewerUI = true;\r\n    },\r\n    resetModelView()\r\n    {\r\n      // this.modelHasBeenDragged = false;\r\n      this.showModelViewerUI = false;\r\n      this.radomeHidden = false;\r\n\r\n      // NOTE: Reset model \r\n      this.modelLoaded = false;\r\n      eventBus.emit('modelViewer.resetModel');\r\n    },\r\n    onModelLoad(model, omv)\r\n    {\r\n      this.modelLoaded = true;\r\n      this.model = model;\r\n      this.omvRef.omv = omv;\r\n    },\r\n    resetMaterials()\r\n    {\r\n      if (!this.omvRef.omv) return;\r\n      this.omvRef.omv.resetMaterialsForModel();\r\n    },\r\n    changeMaterial(materialGroupName)\r\n    {\r\n      if (!this.omvRef.omv) return;\r\n      var materialName = 'Hidden';\r\n      this.omvRef.omv.changeMaterialForMaterialGroup(materialName, materialGroupName);\r\n    },\r\n  },\r\n  created()\r\n  {\r\n    this.modelLoaded = false;\r\n    this.modelHasBeenDragged = false;\r\n    this.showModelViewerUI = false;\r\n    this.radomeHidden = false;\r\n\r\n    this.unsubscribe = this.$store.subscribe((mutation, state) =>\r\n    {\r\n      if (mutation.type === 'setMeasuringUnit')\r\n      {\r\n        this.unit = state.measuringUnit;\r\n      }\r\n    });\r\n  },\r\n  unmounted()\r\n  {\r\n    this.unsubscribe();\r\n  }\r\n}\r\n</script>","<template>\r\n    <div\r\n    class=\"model-viewer\"\r\n    :class=\"{'model-viewer--is-loading': isLoading}\"\r\n    ref=\"iframeWrap\">\r\n    </div>\r\n</template>\r\n\r\n<script>\r\nimport eventBus from '@/helpers/eventBus';\r\n\r\nexport default {\r\n  name: 'ModelViewer',\r\n  props: {\r\n      src: String,\r\n      distance: Number\r\n  },\r\n  data() {\r\n      return {\r\n          isLoading: true,\r\n          omv: null,\r\n          latestPointerDownState: false,\r\n      }\r\n  },\r\n  mounted()\r\n  {\r\n    this.initializeIframe();\r\n\r\n    this.events = {\r\n        onResetModel: ()=>{\r\n            this.initializeIframe();\r\n        },\r\n    }\r\n\r\n    eventBus.on('modelViewer.resetModel', this.events.onResetModel);\r\n  },\r\n  beforeUnmount()\r\n  {\r\n    if (this.omv && this.omv.window)\r\n    {\r\n        this.omv.window.removeEventListener('pointerdown', this.handlePointerDown);\r\n        this.omv.window.removeEventListener('pointerup', this.handlePointerUp);\r\n        this.omv.window.removeEventListener('pointermove', this.handlePointerMove);\r\n        this.omv.window.removeEventListener('wheel', this.handleWheel);\r\n    }\r\n\r\n    eventBus.off('modelViewer.resetModel', this.events.onResetModel);\r\n  },\r\n  methods:\r\n  {\r\n    handlePointerDown()\r\n    {\r\n        this.latestPointerDownState = true;\r\n    },\r\n    handlePointerUp()\r\n    {\r\n        this.latestPointerDownState = false;\r\n    },\r\n    handlePointerMove()\r\n    { \r\n        if (this.latestPointerDownState)\r\n        {\r\n            this.$emit('on-drag');\r\n        }\r\n    },\r\n    handleWheel()\r\n    {\r\n        this.$emit('on-wheel');\r\n    },\r\n    initializeIframe()\r\n    {\r\n        this.isLoading = true;\r\n\r\n        var iframe = document.createElement('iframe');\r\n\r\n        iframe.onload = ()=>{\r\n\r\n            window.omv = iframe.contentWindow;\r\n\r\n            var modelSource = this.src;\r\n\r\n            // NOTE: Hack to make sure model is found in offline viewer verson\r\n            modelSource = modelSource.replace(\"./media/\", \"../media/\");\r\n\r\n            var config = [\r\n                {\r\n                    modelUrl: modelSource,\r\n                    hotspots: []\r\n                }\r\n            ];\r\n\r\n            window.omv.initialize(window, config, {\r\n                dynamicHotspotListing: false,\r\n                debugMode: false, // NOTE: Use this to see fps + yaw,pitch\r\n                cameraClearcolor: \"FFFFFFFF\",\r\n                cameraMinZoomMultiplier: 0.6,\r\n                cameraMaxZoomMultiplier: 2.5,\r\n                hotspotScale: 1,\r\n                orbitMouseSensitivity: 0.2,\r\n                orbitIdleTimer: 0,\r\n                externalContent: [\r\n                    { \"type\": \"script\", \"url\": \"./omv-engine/js/pe-bloom.js\", \"name\": \"pe-bloom.js\", \"applyTo\": \"camera\", \"scriptName\": \"bloom\", \"scriptAttributes\": { \"bloomIntensity\": 0.3, \"bloomThreshold\": 0.25, \"blurAmount\": 3 } }, \r\n                    { \"type\": \"script\", \"url\": \"./omv-engine/js/pe-brightnessContrast.js\", \"name\": \"pe-brightnessContrast.js\", \"applyTo\": \"camera\", \"scriptName\": \"brightnessContrast\", \"scriptAttributes\": { \"brightness\": 0/*-0.078*/, \"contrast\": 0.172 } }, \r\n                    { \"type\": \"script\", \"url\": \"./omv-engine/js/pe-huesaturation.js\", \"name\": \"pe-huesaturation.js\", \"applyTo\": \"camera\", \"scriptName\": \"hueSaturation\", \"scriptAttributes\": { \"hue\": 0, \"saturation\": -0.101 } }\r\n                ]\r\n            })\r\n            .then(model => {\r\n\r\n                this.omv = window.omv;\r\n\r\n                this.omv.window.addEventListener('pointerdown', this.handlePointerDown);\r\n                this.omv.window.addEventListener('pointerup', this.handlePointerUp);\r\n                this.omv.window.addEventListener('pointermove', this.handlePointerMove);\r\n                this.omv.window.addEventListener('wheel', this.handleWheel);\r\n\r\n                // NOTE: Set initial model position and wait a bit before setting isLoading to false (which makes the model visible)\r\n                \r\n                // NOTE: This dosen't seem to be intuitive enough for CMS use...\r\n                var pivot = null; //{x:0, y:0, z: 0};\r\n\r\n                var distance = this.distance; // NOTE: 0 defaults to automatically getting a good distance it seems...\r\n\r\n                this.omv.setActiveCameraPosition(0.001 /*note: yaw*/, 0.001 /*note pitch*/, pivot, distance, null, 0.001 /*note movementtime*/);\r\n\r\n                setTimeout(()=>{\r\n                    this.isLoading = false;\r\n                    this.$emit('loaded', model, window.omv);\r\n                }, 250);\r\n\r\n\r\n            })\r\n            .catch(e => {\r\n                console.error(e);\r\n            });\r\n        }\r\n\r\n        iframe.src = './playcanvas-and-omv/omv-display.html';\r\n\r\n        this.$refs.iframeWrap.innerHTML = '';\r\n        this.$refs.iframeWrap.appendChild(iframe);\r\n\r\n        }\r\n    }\r\n}\r\n</script>","import { render } from \"./ModelViewer.vue?vue&type=template&id=15280e72\"\nimport script from \"./ModelViewer.vue?vue&type=script&lang=js\"\nexport * from \"./ModelViewer.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./ProductSpecsPopup.vue?vue&type=template&id=18ec178a\"\nimport script from \"./ProductSpecsPopup.vue?vue&type=script&lang=js\"\nexport * from \"./ProductSpecsPopup.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./ProductsView.vue?vue&type=template&id=ca1a4dd4\"\nimport script from \"./ProductsView.vue?vue&type=script&lang=js\"\nexport * from \"./ProductsView.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\r\n\r\n  <div class=\"meeting-room\">\r\n\r\n    <template v-if=\"loading\">\r\n      <div class=\"meetingLoading\">\r\n        <div class=\"meetingSignInBackdrop\">\r\n        </div>\r\n        <div class=\"loadingSpinner\"></div>\r\n      </div>  \r\n    </template>\r\n\r\n    <template v-if=\"loggedIn\">\r\n      <div v-if=\"editor && auth\" class=\"productEdits\">\r\n        <!-- <div class=\"productSelectLayout\">\r\n          <h3>1. Select layout</h3>\r\n          <select @change=\"setMeetingLayout($event)\">\r\n            <option value=\"1\">Scene A</option>\r\n            <option value=\"2\">Scene B</option>\r\n          </select>\r\n        </div> -->\r\n        <div class=\"productUploadFile\">\r\n          <h3>1. Upload a file</h3>\r\n          <input class=\"productFileInput\" type=\"file\" accept=\"application/pdf,video/mp4\">\r\n          <p>Max file size: 25MB</p>\r\n        </div>\r\n        <div class=\"productList\">\r\n          <div class=\"productStepInfo\">\r\n            <h3>2. Select products</h3>\r\n            <p>Drag and drop products to the podiums.</p>\r\n          </div>\r\n          <div class=\"productListItems\">\r\n            <div class=\"productDragItem\" draggable=\"true\" v-for=\"product in getProductList()\" @dragstart=\"setMovingElement(product)\" v-bind:key=\"product\">\r\n              <PreloadedImage v-if=\"mediaUrl(product.data.productImage)\"  :src=\"mediaUrl(product.data.productImage)\" :style=\"`width: 46px; height: 46px; padding-bottom: 2px`\"/>\r\n              <p>{{product.name}}</p>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <Button @click=\"createMeeting()\" class=\"button--icon productEdit_Button\">Finalize room</Button>\r\n      </div>\r\n\r\n      <div class=\"media\" v-if=\"meetingTemplate.media && !editor\" :style=\"`\r\n          overflow:hidden;\r\n          position: `+meetingTemplate.media.style.position+`;\r\n          left: `+meetingTemplate.media.style.left+`px;\r\n          top: `+meetingTemplate.media.style.top+`px;\r\n          width: `+meetingTemplate.media.style.width+`px;\r\n          height: `+meetingTemplate.media.style.height+`px;\r\n          background-color: `+meetingTemplate.media.style.backgroundColor+`;\r\n          transform: perspective(`+meetingTemplate.media.style.transform.perspective+`px) skewX(`+meetingTemplate.media.style.transform.skewX+`deg) skewY(`+meetingTemplate.media.style.transform.skewY+`deg) rotateX(`+meetingTemplate.media.style.transform.rotateX+`deg) rotateY(`+meetingTemplate.media.style.transform.rotateY+`deg);\r\n          border: `+meetingTemplate.media.style.border+`;`\">\r\n          <div v-if=\"!editor && meetingTemplate.media.mediaContent[0] && meetingTemplate.media.mediaContent[0].substring(meetingTemplate.media.mediaContent[0].lastIndexOf('.')+1, meetingTemplate.media.mediaContent[0].length) == 'pdf'\" @click=\"toggleFullscreenPDF()\" class=\"fullscreenPDFBtn\" style=\"background-image: url('img/video-fullscreen-btn.3cbfe037.svg');\"></div>\r\n          <div class=\"mediaPDFContainerOverlay_1\" v-if=\"!meetingTemplate.media.mediaContent[0]\"></div>\r\n          <object v-if=\"!editor && meetingTemplate.media.mediaContent[0] && meetingTemplate.media.mediaContent[0].substring(meetingTemplate.media.mediaContent[0].lastIndexOf('.')+1, meetingTemplate.media.mediaContent[0].length) == 'pdf'\" class=\"mediaPDFContainer\" :data=\"`https://intellianeventgateway-staging.azurewebsites.net/uploads/`+meetingTemplate.media.mediaContent[0] + `?#page=1&view=FitH&scrollbar=0&toolbar=0&navpanes=0`\" type=\"application/pdf\" style=\"width: calc(100% + 18px); height: 100%;\"></object>\r\n          <video v-if=\"!editor && meetingTemplate.media.mediaContent[0] && meetingTemplate.media.mediaContent[0].substring(meetingTemplate.media.mediaContent[0].lastIndexOf('.')+1, meetingTemplate.media.mediaContent[0].length) == 'mp4'\" type=\"video/mp4\" controls style=\"width: 100%; height: 100%;\">\r\n            <source :src=\"`https://intellianeventgateway-staging.azurewebsites.net/uploads/`+meetingTemplate.media.mediaContent[0]\" type=\"video/mp4\" />\r\n          </video>\r\n      </div>\r\n      <div class=\"mediaFullscreen\" v-if=\"meetingTemplate.media && meetingTemplate.media.mediaContent[0] && mediaIsFullscreen\">\r\n        <div class=\"meetingSignInBackdrop\">\r\n        </div>\r\n            <div class=\"mediaFullscreenContentPrevPage\" @click=\"pdfnavigatePage(false)\"></div>\r\n            <div class=\"mediaFullscreenContentNextPage\" @click=\"pdfnavigatePage(true)\"></div>\r\n        <div class=\"mediaFullscreenContent\">\r\n            <div class=\"popup__close-btn\" @click=\"toggleFullscreenPDF()\"></div>\r\n            <div class=\"mediaPDFContainerOverlay_2\"></div>\r\n            <object class=\"mediaPDFContainerFull\" :data=\"`https://intellianeventgateway-staging.azurewebsites.net/uploads/`+meetingTemplate.media.mediaContent[0] +`?#page=`+this.mediaPDFCurrentPage+`&view=Fit&scrollbar=0&toolbar=0&navpanes=0`\" type=\"application/pdf\" style=\"width: calc(100% + 18px); height: 100%;\"></object>\r\n        </div>\r\n      </div>\r\n\r\n\r\n      <div v-for=\"productArea in meetingTemplate.productAreas\" v-bind:key=\"productArea\" class=\"productArea\" :style=\"`\r\n        position: absolute;\r\n        z-index: `+productArea.position.zIndex+`; \r\n        top: `+productArea.position.top+`px; \r\n        left: `+productArea.position.left+`px; \r\n        width: `+productArea.position.width+`px; \r\n        height: `+productArea.position.height+`px; \r\n        background-size: cover;` + [!productArea.productId ? 'background-image: url('+ productArea.placeholderImg + ')' : '']\">\r\n\r\n        <div @drop=\"drop($event, productArea)\" @dragover=\"allowDrop($event)\" class=\"productPlacementSpot\" v-if=\"!productArea.productId && editor\" :style=\"`\r\n        position: absolute;\r\n        width: 100px;\r\n        height: 40px;\r\n        top: `+productArea.productPosition.top+`px; \r\n        left: `+productArea.productPosition.left+`px;\r\n        transform: translateX(-50%) translateY(-40px);\r\n        `\">\r\n          <svg style=\"display: block; margin: auto;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\">\r\n            <g id=\"Group_272\" data-name=\"Group 272\" transform=\"translate(-808 -868)\">\r\n              <g id=\"Rectangle_186\" data-name=\"Rectangle 186\" transform=\"translate(808 868)\" fill=\"rgba(255,255,255,0.8)\" stroke=\"#279ad0\" stroke-linejoin=\"round\" stroke-width=\"1\" stroke-dasharray=\"4\">\r\n                <rect width=\"40\" height=\"40\" rx=\"20\" stroke=\"none\"/>\r\n                <rect x=\"0.5\" y=\"0.5\" width=\"39\" height=\"39\" rx=\"19.5\" fill=\"none\"/>\r\n              </g>\r\n              <g id=\"Group_267\" data-name=\"Group 267\" transform=\"translate(804.723 871.353)\">\r\n                <line id=\"Line_34\" data-name=\"Line 34\" x2=\"18.445\" y2=\"0.002\" transform=\"translate(14.055 16.646)\" fill=\"none\" stroke=\"#279ace\" stroke-width=\"1\"/>\r\n                <line id=\"Line_35\" data-name=\"Line 35\" x2=\"18.445\" y2=\"0.002\" transform=\"translate(23.278 7.424) rotate(90)\" fill=\"none\" stroke=\"#279ace\" stroke-width=\"1\"/>\r\n              </g>\r\n            </g>\r\n          </svg>\r\n\r\n        </div>\r\n        <div class=\"product\" v-if=\"productArea.productId\" :style=\"`\r\n          position: absolute; \r\n          pointer-events: none;\r\n          top: `+productArea.productPosition.top+`px; \r\n          left: `+productArea.productPosition.left+`px;`\r\n          \">\r\n\r\n          <PreloadedImage \r\n          :src=\"mediaUrl(product(productArea.productId).data.productImage)\"\r\n          :style=\"`transform: translateX(-50%) scale(`+product(productArea.productId).data.productImageScaleForMeetingRoom+`) translateY(`+product(productArea.productId).data.productImageSpaceBelowInPixels+`px);\r\n          transform-origin: bottom center; position: absolute; bottom: 0;`\"\r\n          />\r\n          <Button v-if=\"editor && productArea.placeholderImg.includes('tree')\" \r\n          :style=\"`pointer-events: all;`+ `transform: translateX(-50%) translateY(-`+ ( (20 + 40) + (GetPreloadedImage(mediaUrl(product(productArea.productId).data.productImage)).height * product(productArea.productId).data.productImageScaleForMeetingRoom)) +`px);\r\n          transform-origin: bottom center; position: absolute; top: `+product(productArea.productId).data.productImageSpaceBelowInPixels * product(productArea.productId).data.productImageScaleForMeetingRoom+`px;`\" \r\n          @click=\"productArea.productId = null\" class=\"meeting-room__product-button button--icon-cross\">{{product(productArea.productId).name}}</Button>\r\n\r\n          <Button v-if=\"!editor && productArea.placeholderImg.includes('tree')\" \r\n          :style=\"`pointer-events: all;`+ `transform: translateX(-50%) translateY(-`+ ( (20 + 40) + (GetPreloadedImage(mediaUrl(product(productArea.productId).data.productImage)).height * product(productArea.productId).data.productImageScaleForMeetingRoom)) +`px);\r\n          transform-origin: bottom center; position: absolute; top: `+product(productArea.productId).data.productImageSpaceBelowInPixels * product(productArea.productId).data.productImageScaleForMeetingRoom+`px;`\" \r\n          @click=\"selectedProduct = product(productArea.productId)\" class=\"meeting-room__product-button button--icon-plus\">{{product(productArea.productId).name}}</Button>\r\n\r\n          <Button v-if=\"editor && !productArea.placeholderImg.includes('tree')\" :style=\"`pointer-events: all;`\" @click=\"productArea.productId = null\" class=\"meeting-room__product-button button--icon-cross\">{{product(productArea.productId).name}}</Button>\r\n          <Button v-if=\"!editor && !productArea.placeholderImg.includes('tree')\" :style=\"`pointer-events: all;`\" @click=\"selectedProduct = product(productArea.productId)\" class=\"meeting-room__product-button button--icon-plus\">{{product(productArea.productId).name}}</Button>\r\n        </div>\r\n        \r\n      </div>\r\n\r\n      <div v-for=\"backgroundArea in meetingTemplate.backgroundAreas\" v-bind:key=\"backgroundArea\" class=\"backgroundArea\" :style=\"`\r\n        position: absolute;\r\n        pointer-events: none;\r\n        z-index: `+backgroundArea.position.zIndex+`; \r\n        top: `+backgroundArea.position.top+`px; \r\n        left: `+backgroundArea.position.left+`px; \r\n        width: `+backgroundArea.position.width+`px; \r\n        height: `+backgroundArea.position.height+`px; \r\n        background-size: contain; \r\n        background-image: url(`+ backgroundArea.img + `)`\">\r\n      </div>\r\n\r\n      <div v-if=\"meetingCreated\">\r\n        <div class=\"meetingSignInBackdrop\">\r\n          <div class=\"meetingCodeContainer\">\r\n            <div class=\"popup__close-btn\" @click=\"goBack()\"></div>\r\n            <h2>YOUR ROOM IS READY</h2>\r\n            <p>Your curation is now ready to be shared.<br>The guest access code to enter the room is:</p>\r\n            <input :value=\"meetingCreated\" class=\"meetingSignIn_CodeInput\" type=\"text\">\r\n            <button class=\"meetingSignIn_Button\" @click=\"copyRoomLink()\">Copy link</button>\r\n            <button class=\"meetingSignIn_Button\" @click=\"goToRoom()\">Go to room</button>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </template>\r\n\r\n    <template v-if=\"!loggedIn\">\r\n      <div class=\"meetingSignInBackdrop\">\r\n      </div>  \r\n        <template v-if=\"!editor\">\r\n          <div class=\"meetingSignIn\">\r\n          <div class=\"popup__close-btn\" @click=\"goBack()\"></div>\r\n            <h2>VIEW CURATED PRODUCTS</h2>\r\n            <p>This room is used to showcase a curated range of products.<br>Please enter the access code to enter the room.</p>\r\n            <input class=\"meetingSignIn_CodeInput meetingCodeInput\" type=\"text\" placeholder=\"Enter code here\">\r\n            <span class=\"meetingSignInError\">{{AttendMeetingInvalid}}</span>\r\n            <button @click=\"loginAttend()\" class=\"meetingSignIn_Button\" noIcon=\"true\">Enter the room</button>\r\n            <p style=\"float:left;\" @click=\"editor = true; AttendMeetingInvalid = ''\">Partner <b>login</b></p>\r\n            <p style=\"float:right;margin: 0px 79px 47px 0px; font-size: 14px;cursor: pointer;\"><a style=\"text-decoration: none; color: inherit;\" href=\"https://intellian.force.com/partner/PP_PartnerLogin\" target=\"_blank\">Partner <b>request login ></b></a></p>\r\n          </div>\r\n        </template>\r\n        <template v-if=\"editor\">\r\n          <div class=\"meetingSignIn\">\r\n            <div class=\"popup__close-btn\" @click=\"goBack()\"></div>\r\n            <h2>CURATE PRODUCTS</h2>\r\n            <p>Enter your Intellian World<br>Partner ID to continue.</p>\r\n            <input class=\"meetingSignIn_CodeInput\" type=\"password\" placeholder=\"Secure ID\">\r\n            <span class=\"meetingSignInError\">{{AttendMeetingInvalid}}</span>\r\n            <button @click=\"loginCreate()\" class=\"meetingSignIn_Button\">Begin curation</button>\r\n            <div style=\"width: 100%; text-align: center; font-size: 14px; cursor:pointer;\" @click=\"editor = false; AttendMeetingInvalid = ''\">Go <b>back</b></div>\r\n          </div>\r\n        </template>\r\n        <div class=\"media\" v-if=\"meetingTemplate.media\" :style=\"`\r\n          overflow:hidden;\r\n          position: `+meetingTemplate.media.style.position+`;\r\n          left: `+meetingTemplate.media.style.left+`px;\r\n          top: `+meetingTemplate.media.style.top+`px;\r\n          width: `+meetingTemplate.media.style.width+`px;\r\n          height: `+meetingTemplate.media.style.height+`px;\r\n          background-color: `+meetingTemplate.media.style.backgroundColor+`;\r\n          transform: perspective(`+meetingTemplate.media.style.transform.perspective+`px) skewX(`+meetingTemplate.media.style.transform.skewX+`deg) skewY(`+meetingTemplate.media.style.transform.skewY+`deg) rotateX(`+meetingTemplate.media.style.transform.rotateX+`deg) rotateY(`+meetingTemplate.media.style.transform.rotateY+`deg);\r\n          border: `+meetingTemplate.media.style.border+`;`\">\r\n          <div class=\"mediaPDFContainerOverlay_1\"></div>\r\n      </div>\r\n    </template>\r\n\r\n  </div>\r\n\r\n  <ProductSpecsPopup v-if=\"selectedProduct\" :product=\"selectedProduct\" @close=\"selectedProduct = null\"/>\r\n\r\n  <Popup type=\"video\" v-if=\"popupVideoData\" @close=\"popupVideoData = null\">\r\n    <BasicVideo\r\n      :videoMediaFile=\"popupVideoData.videoMediaFile\"\r\n      :videoLink=\"popupVideoData.videoLink\"\r\n      :controls=\"true\"\r\n      :loop=\"false\"\r\n      :autoplay=\"true\"\r\n      :muted=\"false\"/>\r\n  </Popup>\r\n\r\n\r\n</template>\r\n\r\n<script>\r\nimport {goToParentScene} from '@/helpers/navigationHelper';\r\nimport { getUmbracoMediaItemSrc, getPreloadedImage } from '@/helpers/assetHelper';\r\nimport Popup from '@/components/Popup';\r\nimport BasicVideo from '@/components/BasicVideo';\r\nimport PreloadedImage from '@/components/PreloadedImage';\r\nimport Button from '@/components/Button';\r\nimport ProductSpecsPopup from '@/components/ProductSpecsPopup';\r\nimport eventBus from '@/helpers/eventBus';\r\n\r\nexport default {\r\n  name: 'MeetingView',\r\n  components: { Popup, BasicVideo, PreloadedImage, Button, ProductSpecsPopup},\r\n  props: {\r\n    scenePath: String\r\n  },\r\n  data()\r\n  {\r\n    return {\r\n      selectedProduct: null,\r\n      popupVideoData: null,\r\n      meetingTemplateA: {\r\n        media : {\r\n          mediaContent : [],\r\n          style : {\r\n            position: \"absolute\",\r\n            left: 71,\r\n            top: 184,\r\n            width: 517,\r\n            height: 281,\r\n            backgroundColor : \"#000\",\r\n            borderStroke: 3,\r\n            transform : {\r\n              perspective : 507,\r\n              skewY : 5.2,\r\n              skewX : 0,\r\n              rotateY :  14.2,\r\n              rotateX :  0\r\n            }\r\n          }\r\n        },\r\n        productAreas : [\r\n          {\r\n            position : {\r\n              zIndex: 11,\r\n              top: 577,\r\n              left: 319,\r\n              width: 573,\r\n              height: 345\r\n            },\r\n            placeholderImg : \"img/plant.1f2ccc8c.png\",\r\n            productPosition : {\r\n              top: 250,\r\n              left: 280\r\n            },\r\n            productId : null\r\n          },\r\n          {\r\n            position : {\r\n              zIndex: 10,\r\n              top: 114,\r\n              left: 760,\r\n              width: 528.75,\r\n              height: 702\r\n            },\r\n            placeholderImg : \"img/tree.94897c71.png\",\r\n            productPosition : {\r\n              top: 650,\r\n              left: 280\r\n            },\r\n            productId : null\r\n          },\r\n          {\r\n            position : {\r\n              zIndex: 11,\r\n              top: 745,\r\n              left: 1309,\r\n              width: 369,\r\n              height: 124.5\r\n            },\r\n            placeholderImg : \"img/table.e10626a9.png\",\r\n            productPosition : {\r\n              top: 85,\r\n              left: 200\r\n            },\r\n            productId : null\r\n          },\r\n          {\r\n            position : {\r\n              zIndex: 12,\r\n              top: 681,\r\n              left: 715,\r\n              width: 0,\r\n              height: 0\r\n            },\r\n            placeholderImg : \"\",\r\n            productPosition : {\r\n              top: 200,\r\n              left: 170\r\n            },\r\n            productId : null\r\n          },\r\n          {\r\n            position : {\r\n              zIndex: 12,\r\n              top: 681,\r\n              left: 1105,\r\n              width: 0,\r\n              height: 0\r\n            },\r\n            placeholderImg : \"\",\r\n            productPosition : {\r\n              top: 185,\r\n              left: 175\r\n            },\r\n            productId : null\r\n          }\r\n        ],\r\n        backgroundAreas : []\r\n      },\r\n      meetingTemplateB: {\r\n        media : {\r\n          mediaContent : [],\r\n          style : {\r\n            position: \"absolute\",\r\n            left: 71,\r\n            top: 184,\r\n            width: 517,\r\n            height: 281,\r\n            backgroundColor : \"#000\",\r\n            borderStroke: 3,\r\n            transform : {\r\n              perspective : 507,\r\n              skewY : 5.2,\r\n              skewX : 0,\r\n              rotateY :  14.2,\r\n              rotateX :  0\r\n            }\r\n          }\r\n        },\r\n        productAreas : [\r\n          {\r\n            position : {\r\n              zIndex: 11,\r\n              top: 577,\r\n              left: 319,\r\n              width: 573,\r\n              height: 345\r\n            },\r\n            placeholderImg : \"img/plant.1f2ccc8c.png\",\r\n            productPosition : {\r\n              top: 250,\r\n              left: 280\r\n            },\r\n            productId : null\r\n          },\r\n          {\r\n            position : {\r\n              zIndex: 10,\r\n              top: 114,\r\n              left: 760,\r\n              width: 528.75,\r\n              height: 702\r\n            },\r\n            placeholderImg : \"img/tree.94897c71.png\",\r\n            productPosition : {\r\n              top: 650,\r\n              left: 280\r\n            },\r\n            productId : null\r\n          },\r\n          {\r\n            position : {\r\n              zIndex: 11,\r\n              top: 745,\r\n              left: 1309,\r\n              width: 369,\r\n              height: 124.5\r\n            },\r\n            placeholderImg : \"img/table.e10626a9.png\",\r\n            productPosition : {\r\n              top: 85,\r\n              left: 200\r\n            },\r\n            productId : null\r\n          },\r\n          {\r\n            position : {\r\n              zIndex: 12,\r\n              top: 681,\r\n              left: 715,\r\n              width: 0,\r\n              height: 0\r\n            },\r\n            placeholderImg : \"\",\r\n            productPosition : {\r\n              top: 200,\r\n              left: 170\r\n            },\r\n            productId : null\r\n          },\r\n          {\r\n            position : {\r\n              zIndex: 12,\r\n              top: 681,\r\n              left: 1105,\r\n              width: 0,\r\n              height: 0\r\n            },\r\n            placeholderImg : \"\",\r\n            productPosition : {\r\n              top: 185,\r\n              left: 175\r\n            },\r\n            productId : null\r\n          },\r\n          {\r\n            position : {\r\n              zIndex: 12,\r\n              top: 710,\r\n              left: 915,\r\n              width: 0,\r\n              height: 0\r\n            },\r\n            placeholderImg : \"\",\r\n            productPosition : {\r\n              top: 185,\r\n              left: 175\r\n            },\r\n            productId : null\r\n          }\r\n        ],\r\n        backgroundAreas : [\r\n          {\r\n            position : {\r\n              zIndex: 9,\r\n              top: 756,\r\n              left: 331,\r\n              width: 1248,\r\n              height: 320\r\n            },\r\n            img : \"\"\r\n          }\r\n        ]\r\n      },\r\n      meetingTemplate: {\r\n        media : {\r\n          mediaContent : [],\r\n          style : {\r\n            position: \"absolute\",\r\n            left: 71,\r\n            top: 184,\r\n            width: 517,\r\n            height: 281,\r\n            backgroundColor : \"#000\",\r\n            borderStroke: 3,\r\n            transform : {\r\n              perspective : 507,\r\n              skewY : 5.2,\r\n              skewX : 0,\r\n              rotateY :  14.2,\r\n              rotateX :  0\r\n            }\r\n          }\r\n        },\r\n        productAreas : [\r\n          {\r\n            position : {\r\n              zIndex: 11,\r\n              top: 627,\r\n              left: 319,\r\n              width: 573,\r\n              height: 345\r\n            },\r\n            placeholderImg : \"img/plant.1f2ccc8c.png\",\r\n            productPosition : {\r\n              top: 220,\r\n              left: 280\r\n            },\r\n            productId : null,\r\n          },\r\n          {\r\n            position : {\r\n              zIndex: 10,\r\n              top: 138,\r\n              left: 773,\r\n              width: 528.75,\r\n              height: 702\r\n            },\r\n            placeholderImg : \"img/tree.94897c71.png\",\r\n            productPosition : {\r\n              top: 650,\r\n              left: 280\r\n            },\r\n            productId : null\r\n          },\r\n          {\r\n            position : {\r\n              zIndex: 11,\r\n              top: 745,\r\n              left: 1309,\r\n              width: 369,\r\n              height: 124.5\r\n            },\r\n            placeholderImg : \"img/table.e10626a9.png\",\r\n            productPosition : {\r\n              top: 85,\r\n              left: 200\r\n            },\r\n            productId : null\r\n          },\r\n          {\r\n            position : {\r\n              zIndex: 12,\r\n              top: 681,\r\n              left: 715,\r\n              width: 0,\r\n              height: 0\r\n            },\r\n            placeholderImg : \"\",\r\n            productPosition : {\r\n              top: 200,\r\n              left: 170\r\n            },\r\n            productId : null\r\n          },\r\n          {\r\n            position : {\r\n              zIndex: 12,\r\n              top: 681,\r\n              left: 1105,\r\n              width: 0,\r\n              height: 0\r\n            },\r\n            placeholderImg : \"\",\r\n            productPosition : {\r\n              top: 185,\r\n              left: 175\r\n            },\r\n            productId : null\r\n          },\r\n          {\r\n            position : {\r\n              zIndex: 12,\r\n              top: 710,\r\n              left: 915,\r\n              width: 0,\r\n              height: 0\r\n            },\r\n            placeholderImg : \"\",\r\n            productPosition : {\r\n              top: 185,\r\n              left: 175\r\n            },\r\n            productId : null\r\n          }\r\n        ],\r\n        backgroundAreas : [\r\n        ]\r\n      },\r\n      mediaIsFullscreen: false,\r\n      mediaPDFCurrentPage: 1,\r\n      mediaPDFPageLength: null,\r\n      movingElement: null,\r\n      editor: false,\r\n      auth: false,\r\n      loggedIn: false,\r\n      accessToken: null,\r\n      meetingCreated: null,\r\n      AttendMeetingInvalid: \"\",\r\n      currentRoomCode: null,\r\n      ApiKey: \"55JuMTj7XStFje2EKqjgR8X4jJ8Wh8du\",\r\n      loading: false\r\n    }\r\n  },\r\n  computed:\r\n  {\r\n    isInMeeting()\r\n    {\r\n      var validMeetingCode = this.$store.state.meeting.meetingCode;\r\n      var isInMeeting = (this.$route.query.meeting === validMeetingCode);\r\n\r\n      return isInMeeting;\r\n    },\r\n    meeting()\r\n    {\r\n      if (this.isInMeeting)\r\n      {\r\n        return this.$store.state.meeting;\r\n      }\r\n\r\n      return false;\r\n    }\r\n  },\r\n  created()\r\n  {    \r\n    eventBus.emit('mainNavigation.hide');\r\n  },\r\n  mounted()\r\n  {\r\n    let roomcode = this.$route.query.roomCode\r\n    if(roomcode){\r\n      document.querySelector(\".meetingCodeInput\").value = roomcode;\r\n    }\r\n  },\r\n  unmounted()\r\n  {\r\n    \r\n  },\r\n  methods:\r\n  {\r\n    copyRoomLink(){\r\n      let newRoomLink = String(window.location).split(\"?\")[0] + \"?roomCode=\" + this.meetingCreated;\r\n      if (navigator && navigator.clipboard && navigator.clipboard.writeText){\r\n        navigator.clipboard.writeText(newRoomLink);\r\n      }\r\n    },\r\n    goToRoom(){\r\n\r\n      let newRoomLink = String(window.location).split(\"?\")[0] + \"?roomCode=\" + this.meetingCreated;\r\n      if(newRoomLink){\r\n        window.open(newRoomLink, '_blank');\r\n      }\r\n    },\r\n    setMeetingLayout(event){\r\n      switch (event.target.value) {\r\n        case \"1\":\r\n          this.meetingTemplate = this.meetingTemplateA;\r\n          break;\r\n      \r\n        case \"2\":\r\n          this.meetingTemplate = this.meetingTemplateB;\r\n          break;\r\n\r\n        default:\r\n          break;\r\n      }\r\n    },\r\n    async toggleFullscreenPDF() {\r\n      if(!this.mediaPDFPageLength){\r\n        let blob = await fetch(`https://intellianeventgateway-staging.azurewebsites.net/uploads/`+this.meetingTemplate.media.mediaContent[0]).then(r => r.blob());\r\n        var reader = new FileReader();\r\n        reader.readAsBinaryString(blob);\r\n        var self = this;\r\n        reader.onloadend = function(){\r\n            var count = reader.result.match(/\\/Type[\\s]*\\/Page[^s]/g).length;\r\n            self.mediaPDFPageLength = count;\r\n        }\r\n      }\r\n      if(this.mediaIsFullscreen){\r\n        this.mediaIsFullscreen = false;\r\n        eventBus.emit('mainNavigation.unHide');\r\n      }else{\r\n        this.mediaIsFullscreen = true;\r\n        eventBus.emit('mainNavigation.hide');\r\n      }\r\n    },\r\n    pdfnavigatePage(forward) {\r\n      var mediaPDF = document.querySelector(\".mediaPDFContainer\");\r\n      var mediaPDFFull = document.querySelector(\".mediaPDFContainerFull\");\r\n      console.log(\"---PDF NAVIGATE---\");\r\n      console.log(\"Length: \", this.mediaPDFPageLength);\r\n      console.log(\"Current Page: \", this.mediaPDFCurrentPage);\r\n      if(forward){\r\n\r\n        if(this.mediaPDFPageLength > this.mediaPDFCurrentPage){\r\n          console.log(\"Next Page: \", (this.mediaPDFCurrentPage + 1));\r\n          mediaPDFFull.data = mediaPDFFull.data.replace(\"page=\"+ this.mediaPDFCurrentPage, \"page=\" + (this.mediaPDFCurrentPage + 1));\r\n          mediaPDF.data = mediaPDF.data.replace(\"page=\"+ this.mediaPDFCurrentPage, \"page=\" + (this.mediaPDFCurrentPage + 1));\r\n          this.mediaPDFCurrentPage = this.mediaPDFCurrentPage + 1;\r\n        }\r\n      }else{\r\n        if(this.mediaPDFCurrentPage != 1){\r\n          console.log(\"Next Page: \", (this.mediaPDFCurrentPage - 1));\r\n          mediaPDFFull.data = mediaPDFFull.data.replace(\"page=\"+ this.mediaPDFCurrentPage, \"page=\" + (this.mediaPDFCurrentPage - 1));\r\n          mediaPDF.data = mediaPDF.data.replace(\"page=\"+ this.mediaPDFCurrentPage, \"page=\" + (this.mediaPDFCurrentPage - 1));\r\n          this.mediaPDFCurrentPage = this.mediaPDFCurrentPage - 1;\r\n        }\r\n      }\r\n      document.querySelector(\".mediaPDFContainerOverlay_2\").style.backgroundColor = \"rgba(0,0,0,1)\";\r\n      setTimeout(() => {\r\n        document.querySelector(\".mediaPDFContainerOverlay_2\").style.backgroundColor = \"rgba(0,0,0,0)\";\r\n      }, 1000);\r\n      setTimeout(() => {\r\n        var clone = mediaPDFFull.cloneNode(true); \r\n        var placeHolder = mediaPDFFull.parentNode; \r\n        placeHolder.removeChild(mediaPDFFull); \r\n        placeHolder.appendChild(clone); \r\n\r\n        var clone2 = mediaPDF.cloneNode(true); \r\n        var placeHolder2 = mediaPDF.parentNode; \r\n        placeHolder2.removeChild(mediaPDF); \r\n        placeHolder2.appendChild(clone2); \r\n      }, 100);\r\n    },\r\n    createMeeting(){\r\n      this.loading = true;\r\n      var media = document.querySelector(\".productFileInput\").files[0];\r\n\r\n      var myHeaders = new Headers();\r\n      myHeaders.append(\"ApiKey\", this.ApiKey);\r\n      myHeaders.append(\"Authorization\", \"Bearer \" + this.accessToken);\r\n      var formdata = new FormData();\r\n      formdata.append(\"data\", JSON.stringify(this.meetingTemplate));\r\n      if(media){\r\n        formdata.append(\"media\", media, media.name);\r\n      }\r\n      fetch(\"https://intellianeventgateway-staging.azurewebsites.net/api/v1/showroom/rooms\", {\r\n        method: 'POST',\r\n        headers: myHeaders,\r\n        body: formdata,\r\n        redirect: 'follow'\r\n      }).then(response => response.text()).then(result => {\r\n        var dataResponse = JSON.parse(result);\r\n        //dataResponse.roomId\r\n        this.meetingCreated = dataResponse.roomId;\r\n        this.loading = false;\r\n\r\n      }).catch(error => {\r\n          alert(\"File size exceeds 25MB limit\", error)\r\n          this.loading = false;\r\n        });\r\n    },\r\n    loginCreate(){\r\n\r\n      this.loading = true;\r\n      let code = document.querySelector(\".meetingSignIn_CodeInput\").value;\r\n      var myHeaders = new Headers();\r\n      myHeaders.append(\"ApiKey\", this.ApiKey);\r\n      myHeaders.append(\"Content-Type\", \"application/json\");\r\n\r\n      var raw = JSON.stringify({\r\n        \"password\": code\r\n      });\r\n\r\n      var requestOptions = {\r\n        method: 'POST',\r\n        headers: myHeaders,\r\n        body: raw,\r\n        redirect: 'follow'\r\n      };\r\n\r\n      fetch(\"https://intellianeventgateway-staging.azurewebsites.net/api/v1/showroom/login\", requestOptions)\r\n        .then(response => response.text())\r\n        .then(result => {\r\n          result = JSON.parse(result);\r\n          if(result.accessToken && result.accessExpiry){\r\n            this.loggedIn = true;\r\n            this.accessToken = result.accessToken;\r\n            this.auth = true;\r\n            eventBus.emit('mainNavigation.unHide');\r\n            this.AttendMeetingInvalid = \" \";\r\n          }else{\r\n            this.AttendMeetingInvalid = \"The code is invalid, try again.\";\r\n          }\r\n          this.loading = false;\r\n        }).catch(error => {\r\n            this.AttendMeetingInvalid = \"The code is invalid, try again.\";\r\n            console.log('error', error)\r\n            console.log(this.AttendMeetingInvalid);\r\n            this.loading = false;\r\n        });\r\n\r\n      \r\n    },\r\n    loginAttend(){\r\n      this.loading = true;\r\n      let codeValue = document.querySelector(\".meetingCodeInput\").value;\r\n      let checkRe = /^[A-z0-9]*/g;\r\n      let validInput = checkRe.exec(codeValue);\r\n      if(validInput[0]){\r\n        var myHeaders = new Headers();\r\n        myHeaders.append(\"ApiKey\", this.ApiKey);\r\n        fetch(\"https://intellianeventgateway-staging.azurewebsites.net/api/v1/showroom/rooms/\" + validInput[0], {\r\n          method: 'GET',\r\n          headers: myHeaders,\r\n          redirect: 'follow'\r\n        }).then(response => {\r\n          \r\n          if(response.status != 200){\r\n            this.AttendMeetingInvalid = \"The code is invalid, try again.\";\r\n            this.loading = false;\r\n            return\r\n          }else{\r\n            this.loading = false;\r\n            return response.text();\r\n          }\r\n        }).then(result => {\r\n            this.meetingTemplate = JSON.parse(result);\r\n            this.loggedIn = true;\r\n            eventBus.emit('mainNavigation.unHide');\r\n            this.AttendMeetingInvalid = \" \";\r\n            this.loading = false;\r\n        }).catch(error => console.log('error', error));\r\n        }else{\r\n        this.AttendMeetingInvalid = \"The code is invalid, try again.\";\r\n        this.loading = false;\r\n      }\r\n    },\r\n    setMovingElement(product){\r\n      this.movingElement = product.id;\r\n    },\r\n    allowDrop(event) {\r\n        event.preventDefault();\r\n    },\r\n    drop(event, productArea) {\r\n        event.preventDefault();\r\n        productArea.productId = this.movingElement;\r\n    },\r\n    getProductList(){\r\n      return this.$store.state.products;\r\n    },\r\n    product(productId){\r\n      var result = null;\r\n\r\n      this.$store.state.products.forEach((product)=>\r\n      {\r\n        if (product.id === productId) result = product;\r\n      });\r\n      return result;\r\n    },\r\n    mediaUrl(image){\r\n      return getUmbracoMediaItemSrc(image);\r\n    },\r\n    goBack(){\r\n      eventBus.emit('mainNavigation.unHide');\r\n      goToParentScene();\r\n    },\r\n    openVideo(videoData){\r\n      this.popupVideoData = videoData;\r\n    },\r\n    GetPreloadedImage(url){\r\n      return getPreloadedImage(url);\r\n    }\r\n  }\r\n}\r\n</script>","import { render } from \"./MeetingViewConfiguration.vue?vue&type=template&id=c079582c\"\nimport script from \"./MeetingViewConfiguration.vue?vue&type=script&lang=js\"\nexport * from \"./MeetingViewConfiguration.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\r\n    <div>Single product child template. Never used.</div>\r\n</template>","import { render } from \"./SingleProductView.vue?vue&type=template&id=86dad50c\"\nconst script = {}\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\r\n    <div class=\"main-navigation\" :class=\"{'main-navigation--disabled': (isHidden || isHiddenBecauseOfShowroom)}\">\r\n        <!-- TODO: Use router link here! -->\r\n        <div \r\n            class=\"main-navigation__back-btn\" \r\n            :class=\"{'main-navigation__back-btn--is-active': (breadcrumbs.length > 1)}\"\r\n            @click=\"goBack\">Back</div>\r\n        <div class=\"main-navigation__breadcrumbs\">\r\n            <!-- TODO: Use router link here! -->\r\n            <transition-group name=\"fade\">\r\n              <div\r\n                  v-for=\"breadcrumb in breadcrumbs\"\r\n                  :key=\"breadcrumb.id\"\r\n                  class=\"main-navigation__breadcrumb\"\r\n                  :class=\"{'main-navigation__breadcrumb--disable': (breadcrumb.preventClick)}\"\r\n                  @click=\"goToPathByID(breadcrumb.id)\">\r\n                  <span>{{breadcrumb.title}}</span>\r\n              </div>\r\n            </transition-group>\r\n        </div>\r\n        <div class=\"main-navigation__title\">Intellian World</div>\r\n        <div class=\"main-navigation__button main-navigation__button--fullscreen\" @click=\"toggleFullscreen\"></div>\r\n    </div>\r\n</template>\r\n\r\n\r\n<script>\r\nimport {goToParentScene, goToPathByID, getBreadcrumbs} from '@/helpers/navigationHelper';\r\nimport toggleFullscreen from '@/helpers/fullscreenHelper';\r\nimport eventBus from '@/helpers/eventBus';\r\n\r\nexport default {\r\n  name: 'MainNavigation',\r\n  data()\r\n  {\r\n    return {\r\n      isHidden: false,\r\n      isHiddenBecauseOfShowroom: false,\r\n    }\r\n  },\r\n  computed:\r\n  {\r\n    isLoading()\r\n    {\r\n      return this.$store.state.isLoading;\r\n    },\r\n    breadcrumbs()\r\n    {\r\n      return getBreadcrumbs();\r\n    }\r\n  },\r\n  methods:\r\n  {\r\n    goBack()\r\n    {\r\n      goToParentScene();\r\n    },\r\n    goToPathByID(id)\r\n    {\r\n        goToPathByID(id);\r\n    },\r\n    toggleFullscreen()\r\n    {\r\n        toggleFullscreen();\r\n    }\r\n  },\r\n  created()\r\n  {\r\n    this.events = {\r\n      onHide: ()=>{\r\n        this.isHidden = true;\r\n      },\r\n      onUnHide: ()=>{\r\n        this.isHidden = false;\r\n      },\r\n      onHideBecauseOfShowroom: ()=>{\r\n        this.isHiddenBecauseOfShowroom = true;\r\n      },\r\n      onUnHideBecauseOfShowroom: ()=>{\r\n        this.isHiddenBecauseOfShowroom = false;\r\n      }\r\n    }\r\n\r\n    eventBus.on('mainNavigation.hide', this.events.onHide);\r\n    eventBus.on('mainNavigation.unHide', this.events.onUnHide);\r\n    eventBus.on('mainNavigation.hideBecauseOfShowroom', this.events.onHideBecauseOfShowroom);\r\n    eventBus.on('mainNavigation.unHideBecauseOfShowroom', this.events.onUnHideBecauseOfShowroom);\r\n  },\r\n  unmounted()\r\n  {\r\n    eventBus.off('mainNavigation.hide', this.events.onHide);\r\n    eventBus.off('mainNavigation.unHide', this.events.onUnHide);\r\n    eventBus.off('mainNavigation.hideBecauseOfShowroom', this.events.onHideBecauseOfShowroom);\r\n    eventBus.off('mainNavigation.unHideBecauseOfShowroom', this.events.onUnHideBecauseOfShowroom);\r\n  }\r\n}\r\n</script>","export default function toggleFullScreen()\r\n{\r\n    // NOTE: Source https://stackoverflow.com/questions/19440344/html5-fullscreen-browser-toggle-button\r\n    if (!document.fullscreenElement &&    // alternative standard method\r\n     !document.mozFullScreenElement && !document.webkitFullscreenElement) {  // current working methods\r\n      if (document.documentElement.requestFullscreen) {\r\n        document.documentElement.requestFullscreen();\r\n      } else if (document.documentElement.mozRequestFullScreen) {\r\n        document.documentElement.mozRequestFullScreen();\r\n      } else if (document.documentElement.webkitRequestFullscreen) {\r\n        document.documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\r\n      }\r\n    } else {\r\n       if (document.cancelFullScreen) {\r\n          document.cancelFullScreen();\r\n       } else if (document.mozCancelFullScreen) {\r\n          document.mozCancelFullScreen();\r\n       } else if (document.webkitCancelFullScreen) {\r\n         document.webkitCancelFullScreen();\r\n       }\r\n    }\r\n}","import { render } from \"./MainNavigation.vue?vue&type=template&id=8b06ecf8\"\nimport script from \"./MainNavigation.vue?vue&type=script&lang=js\"\nexport * from \"./MainNavigation.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./SceneView.vue?vue&type=template&id=9039b6a2\"\nimport script from \"./SceneView.vue?vue&type=script&lang=js\"\nexport * from \"./SceneView.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\Repositories\\\\intellian-world-expo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createRouter, createWebHashHistory } from 'vue-router'\r\nimport SceneView from '../views/SceneView.vue'\r\n\r\nconst routes = [\r\n  // TODO: Add configurator route here\r\n  {\r\n    name: \"scenes\",\r\n    path: \"/:pathMatch(.*)*\",\r\n    component: SceneView\r\n  },\r\n]\r\n\r\nconst router = createRouter({\r\n  history: createWebHashHistory(),\r\n  routes\r\n});\r\n\r\nexport default router;","import { createApp } from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport store from './store'\r\n\r\ncreateApp(App).use(store).use(router).mount('#app')\r\n"],"sourceRoot":""}