{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/js/utils/device.js","webpack:///./node_modules/pug-runtime/index.js","webpack:///./src/js/services/translations/translations.js","webpack:///./src/js/services/translations/getTranslations.js","webpack:///./src/js/views/menu/_subMenu.pug","webpack:///./src/js/views/menu/menuButtons/_menuVrModeButton.pug","webpack:///./src/js/views/menu/menuButtons/_menuShareButton.pug","webpack:///./src/js/views/menu/menuButtons/_menuRateApartmentButton.pug","webpack:///./src/js/views/menu/menuButtons/_menuGyroscopeButton.pug","webpack:///./src/js/views/menu/menuButtons/_menuFullscreenButton.pug","webpack:///./src/js/views/menu/menuButtons/_menuAutoRotateButton.pug","webpack:///./src/js/views/menu/menuButtons/_menuScreenShotshotButton.pug","webpack:///./src/js/views/menu/menuButtons/_menuMultiStyleButton.pug","webpack:///./src/js/views/menu/menuButtons/_menuDollhouseButton.pug","webpack:///./src/js/views/menu/menuButtons/_menuMinimapButton.pug","webpack:///./src/js/views/menu/subMenuButtons/_shareButton.pug","webpack:///./src/js/views/menu/subMenuButtons/_vrModeButton.pug","webpack:///./src/js/views/menu/subMenuButtons/_gyroscopeButton.pug","webpack:///./src/js/views/menu/subMenuButtons/_autoRotateButton.pug","webpack:///./src/js/views/menu/subMenuButtons/_fullscreenButton.pug","webpack:///./src/js/views/menu/subMenuButtons/_rateApartmentButton.pug","webpack:///./src/js/views/menu/subMenuButtons/_screenshotButton.pug","webpack:///./src/js/views/menu/subMenuButtons/_minimapButton.pug","webpack:///./src/js/views/menu/subMenuButtons/_dollhouseButton.pug","webpack:///./src/js/views/menu/subMenuButtons/_multiStyleButton.pug","webpack:///./node_modules/aframe-event-set-component/index.js","webpack:///./src/js/aframe-components/look-at.js","webpack:///./src/js/aframe-components/room-status.js","webpack:///./src/js/aframe-components/hide-minimap-off-click.js","webpack:///./node_modules/micromodal/dist/micromodal.es.js","webpack:///./src/js/aframe-components/utils/webgl-detector.js","webpack:///./src/js/utils/localStorageAvailable.js","webpack:///./src/js/aframe-components/loading-screen-handler.js","webpack:///./src/js/aframe-components/guide.js","webpack:///./src/js/aframe-components/utils/device.js","webpack:///./src/js/aframe-components/fuse-cursor-loader-animation.js","webpack:///./src/js/aframe-components/custom-vr-mode-ui.js","webpack:///./src/js/aframe-components/chrome-drag-fix.js","webpack:///./src/js/aframe-components/shopping-list.js","webpack:///./src/js/aframe-components/on-enter-vr.js","webpack:///./src/js/aframe-components/fuse-cursor-loader.js","webpack:///./src/js/aframe-components/utils/deviceOrientation.js","webpack:///./src/js/aframe-components/shared/constants.js","webpack:///./src/js/components/menu/menu.js","webpack:///./src/js/components/menu/buttonsConfig.js","webpack:///./src/js/components/menu/createMenuConfigBasedOnFeatureDecisions.js","webpack:///./src/js/components/menu/turntableDollhouse.js","webpack:///./src/js/components/menu/dollhouse.js","webpack:///./src/js/aframe-components/scene-menu.js","webpack:///./src/js/aframe-components/has-hover.js","webpack:///./src/js/aframe-components/utils/keyCodeToCode.js","webpack:///./src/js/aframe-components/utils/bind.js","webpack:///./src/js/aframe-components/detect-idle-user.js","webpack:///./src/js/aframe-components/exit-fullscreen-exit-vr.js","webpack:///./src/js/aframe-components/cubemap-sky.js","webpack:///./src/js/aframe-components/animate-until-loaded.js","webpack:///./src/js/aframe-components/set-image.js","webpack:///./src/js/aframe-components/set-link.js","webpack:///./src/js/aframe-components/minimap-resizer.js","webpack:///./src/js/aframe-components/utils/linkFactory.js","webpack:///./src/js/aframe-components/link-manager.js","webpack:///./src/js/aframe-components/canvas-resizer.js","webpack:///./src/js/aframe-components/minimap-hotspots.js","webpack:///./src/js/aframe-components/minimap-hotspots-animation.js","webpack:///./src/js/aframe-components/minimap-radar.js","webpack:///./src/js/aframe-components/hide-minimap.js","webpack:///./src/js/aframe-components/camera-angle-listener.js","webpack:///./src/js/aframe-components/auto-rotate.js","webpack:///./src/js/aframe-components/blur-animation.js","webpack:///./src/js/aframe-components/3destate-arrow-controls.js","webpack:///./src/js/aframe-components/3destate-look-controls.js","webpack:///./src/js/aframe-components/utils/getSwipeParams.js","webpack:///./src/js/aframe-components/camera-fov-on-slide.js","webpack:///./src/js/aframe-components/error-screen.js","webpack:///./src/js/aframe-components/show-ios-navigation-bar.js","webpack:///./src/js/aframe-components/address-bar-overlay.js","webpack:///./src/js/aframe-components/ios-gyroscope-guide.js","webpack:///./src/js/aframe-components/google-analytics/timer.js","webpack:///./src/js/aframe-components/google-analytics/google-analytics.js","webpack:///./src/js/aframe-components/track-room-change.js","webpack:///./src/js/aframe-components/cubemap-preloader.js","webpack:///./src/js/components/modals/share-modal.js","webpack:///./src/js/components/modals/rate-apartment-modal.js","webpack:///./src/js/aframe-components/init-modals.js","webpack:///./src/js/aframe-components/capture-screenshot.js","webpack:///./src/js/aframe-components/error-handler.js","webpack:///./src/js/Components.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","isIOS","test","window","navigator","platform","isMobile","userAgent","vendor","opera","substr","isTablet","isMobileVR","isIPad","isIpadNewOs","document","isDesktop","isVRCompatible","isGyroscopeSupported","Promise","resolve","isMobileDevice","isHeadset","listenerDetached","checkGyroscope","event","this","removeEventListener","rotationRate","alpha","beta","gamma","addEventListener","setTimeout","pug_has_own_property","pug_classes","val","escaping","Array","isArray","className","classString","padding","escapeEnabled","length","pug_escape","pug_classes_array","pug_classes_object","pug_style","out","style","pug_attr","escaped","terse","type","toJSON","JSON","stringify","indexOf","replace","merge","pug_merge","a","b","arguments","attrs","valA","concat","valB","classes","attr","obj","pug_match_html","_html","html","regexResult","exec","lastIndex","escape","result","index","charCodeAt","substring","rethrow","pug_rethrow","err","filename","lineno","str","Error","message","context","lines","start","end","readFileSync","encoding","split","Math","max","min","ex","slice","map","line","curr","join","path","e","translations","en","language","floor","poweredBy","visit","cookies","floor_plan","multi_styles","dollhouse","share","rate","vr_mode","auto_rotate","gyroscope","fullscreen","screenshot","guide_decoroom","guide_sub_decoroom","guide_title2","guide_title","move_keyboard","move_finger","next_room","loading","disclaimer","error_no_webgl","error_context_lost","something_wrong","webgl_link","share_to_social_title","share_to_social_description","share_to_social_description_span","rate_apartment_title","rate_apartment_description","rate_apartment_thankyou_title","rate_apartment_thankyou_description","shoppingList","designer","all","more","generatePDF","downloadPDF","generatingList","summaryPrice","allSelect","gyroscope_guides","ios13","gyroscope_usage","permission_button","toggle_gyroscope","cancel_permission","not_supported","roomsTitle","livingRoom","bedroom","bathroom","moveStraight","childrenRoom","kitchen","stairs","toilet","bathroom2","exterior","exterior2","dressingRoom","pantry","retailSpace","boilerRoom","homeOffice","pool","washingRoom","winterGarden","entresol","attic","library","gameRoom","homeTheater","playRoom","workShop","livingRoomWithAKitchenette","habitableAttic","utilityRoom","service","diningRoom","pl","es","fr","loaderAnimation","de","it","he","bg","getTranslation","browserLang","userLanguage","getLangParam","URLSearchParams","location","search","includes","require","locals","pug_html","pug","pug_interp","locals_for_with","undefined","styleParser","AFRAME","utils","registerComponent","schema","default","parse","multiple","init","eventHandler","eventName","update","oldData","updateEventListener","remove","pause","play","target","targetEl","data","el","_event","id","_target","sceneEl","querySelector","handler","propName","entity","setComponentProperty","isNaN","_delay","parseFloat","vec3","debug","coordinates","warn","isCoordinates","isCoordinate","target3D","vector","THREE","Vector3","self","object3D","keys","lookAt","x","y","z","hasLoaded","beginTracking","tick","parent","worldToLocal","getWorldPosition","getObject3D","subVectors","position","add","rooms","minimap","hideMinimap","minimapButton","minimapImage","fovSlider","innerMaps","querySelectorAll","styleSelector","getAttribute","status","classList","contains","toggle","href","maxWidth","minimizeImage","innerWidth","forEach","bottom","maxHeight","innerMap","opacity","display","onToggleMiniMapArrowSet","styleContainer","offsetWidth","configurable","writable","iterator","from","toString","constructor","TypeError","targetModal","triggers","onShow","onClose","openTrigger","u","f","closeTrigger","h","v","openClass","g","disableScroll","disableFocus","w","awaitCloseAnimation","E","k","awaitOpenAnimation","M","A","debugMode","C","modal","getElementById","config","registerTriggers","apply","onClick","onKeydown","filter","Boolean","showModal","activeElement","setAttribute","scrollBehaviour","addEventListeners","setFocusToFirstNode","removeEventListeners","focus","closeModal","assign","overflow","hasAttribute","parentNode","preventDefault","stopPropagation","keyCode","retainFocus","getFocusableNodes","offsetParent","shiftKey","console","attributes","push","show","close","closeModalById","MicroModal","Detector","webgl","canvas","createElement","WebGLRenderingContext","getContext","OESTextureFloatLinearSupport","getSupportedExtensions","localStorageAvailable","storageSupport","localStorage","maxSize","minimapLoaded","alert","hideLoader","loader","timeSetTimeout","getItem","transitionDuration","emit","guideAlwaysDisplay","pageVisited","setGuideVisibilityOncePerDomain","setDecoroomGuideOncePerDomain","filterMainContent","hideGuide","body","showGuide","device","guideMainWrapper","delayGuideShow","clearTimeout","guideMain","guideDecoroomContainer","isNewIpadOs","selector","setItem","checkHeadsetConnected","reject","showLoading","hideLoading","loaderRings","cursor","ring","removeAttribute","dependencies","enabled","getUrlParameter","insideLoader","enterVREl","orientationModalEl","bindMethods","updateEnterVRInterface","toggleOrientationModalIfNeeded","onEnterVRButtonClick","onModalClick","exitVR","enterVR","then","vrMenuButton","vrSubMenuButton","vrButton","catch","error","exit","innerHTML","appendChild","createOrientationModal","uiElement","removeChild","toggleEnterVRButtonIfNeeded","menuBottom","menuTop","is","isLandscape","kioskMode","timeout","shoppingListCloseButton","shoppingListContainer","leftBottomInterface","productsSelect","productsSelectText","productsDropDown","productShowMore","styleSelectorControllerWrapper","styleSelectorWrapper","stylesAvailable","productsSummaryPrice","productsDownloadListButton","initialStyle","currentStyle","fetchAllProductsData","chooseOption","innerText","dataset","showOptions","productsPriceSummary","price","ga","hitType","eventCategory","eventAction","eventLabel","renderProducts","_productsDropDown$chi","children","item","addFunctionality","productsOptions","option","getProductsPdf","hideShoppingList","left","onToggleStyleArrowSet","scrollToList","_window","_window$tourProductsD","tourProductsData","currentElementPosition","shoppingListHeight","shoppingPos","getBoundingClientRect","currentElementPos","height","scrollTo","top","behavior","fetchPdfLoader","flag","productsDownloadListButtonSpinner","productsDownloadListButtonText","generateButton","downloadButton","async","setApi","fetch","res","json","fileUrl","currentUrlSplit","pathname","group","identifier","extension","pop","identifierWithoutExtension","fetchProductData","productId","productRequest","shoppingListContainerLoader","shoppingSingleProductContainer","shoppingListHeadTitle","shoppingListHeadCategory","shoppingListHeadPriceSpan","shoppingListHeadPrice","shoppingListHeadImage","shoppingListBodyDesignerLogoWrapper","shoppingListBodyDesignerLogo","shoppingListBodyProductDescription","lang","loadingEffect","currentProduct","currentLogo","currentDescription","headers","response","_data$description","_data$supplier","_data$supplier2","_data$supplier5","src","thumbnailUrl","description","listener","supplier","redirectUrl","_data$supplier3","_data$supplier4","logoBackground","category","displayName","onload","_data$supplier6","_data$supplier7","unit","logoUrl","alt","onerror","_data$supplier8","_data$supplier9","printFetchedData","productName","productsList","productsContainer","products","child","find","room","product","productContainer","productImage","image","productInfo","productInfoTitle","productInfoCategory","productInfoPrice","productInfoPriceQtyType","unitType","productInfoPriceQty","quantity","productShowMoreIcon","productShowMoreText","svgIcon","createElementNS","updateCurrentProduct","printProducts","tourProducts","_window2","_window2$tourProducts","getAllProducts","prod","pd","allPrice","allProducts","getWholePrice","getRoomProducts","roomsProduct","allProductsPrice","storeyNumber","roomNumber","roomType","toFixed","allDisplayName","contentHtml","mappedContentHtml","unshift","scene","addGazeCursor","removeGazeCursor","camera","objects","far","fuse","primitive","radiusInner","radiusOuter","color","shader","rayOrigin","addCursorLoader","getDeviceOrientationAngle","angle","screen","orientation","CustomEvents","Durations","BLINK_ANIMATION_FAST","BLINK_ANIMATION","BLINK_ANIMATION_MOBILE","$","appendHTML","wrapper","toggleSubMenu","miniMapButton","dollhouseButton","multiStyleButton","menuButton","menuContent","logo","subMenuWrapper","some","toMatchItem","match","innerHeight","Menu","menuHTML","menu","buttons","button","getMarkup","menuWrapper","wrapperSelector","subMenu","subMenuWrapperHTML","getWrapperMarkup","subMenuButtonsHTML","toggleSelector","trans","isExterior","standaloneSelector","getStandaloneMarkup","mainRateApartmentButton","submenuSelector","getSubmenuMarkup","rateApartmentButton","componentContext","showRateApartmentModal","isButtonEnabled","featureDecisions","apartmentScore","enforceStandaloneVersion","defaultOrder","mainShareButton","shareButton","showShareModal","shareToSocial","mainScreenshotButton","screenshotButton","captureScreenshot","mainVrButton","vrModeEnabled","mainGyroscopeButton","gyroscopeButton","toggleGyroscopeInput","gyroscopeEnabled","mainFullscreenButton","fullscreenButton","toggleFullscreenMode","fullscreenEnabled","mainAutoRotateButton","autoRotateButton","toggleAutoRotate","autoRotateEnabled","mainDollhouseButton","toggleDollhouseVisibility","dollHouse","turntableDollHouse","mainMinimapButton","toggleMapVisibility","mainMultiStyleButton","toggleStyleChange","multiStyles","compareByDefaultOrder","buttonA","buttonB","createStandaloneButton","createSubMenuButton","attachComponentContextToOnClickHandlers","getMenuButtonsBasedOnFeatureDecisions","enabledMenuButtons","sort","shouldCreateSubMenu","standaloneButtons","createEnforcedStandaloneButtons","submenuButtons","createSubMenuButtons","getSubMenuWrapper","dollhouseResources","startingFloor","sceneElement","floorTranslate","_dollhouseResources$","_dollhouseResources$2","_dollhouseResources$3","hidden","dollhouseContainer","upperFloorButton","lowerFloorButton","zeroFloorImage","firstFloorImage","secondFloorImage","fovSliderWrapper","upperMapButton","currentFloor","currentMiniMapFloor","state","count","renderCount","lastChild","transform","incCountUp","incCountDown","closeOnEscape","which","zeroFloorUrl","firstFloorUrl","secondFloorUrl","url","featureLoader","miniMaps","dollHouses","interiorDesigner","defaultStylesGroup","defaultStyleGroup","menuConfig","createMenuConfigBasedOnFeatureDecisions","mapContainer","mapImage","isIpad","supportsFullscreen","requestFullscreen","webkitRequestFullscreen","mozRequestFullScreen","onOrientationChange","timerIfPageVisited","closeMapWithKey","guideHidden","action","_floor0$clientWidth","_floor1$clientWidth","_floor2$clientWidth","floorPlanContainer","lowerMapButton","floor0","floor1","floor2","getAllStyles","img","styleContainerDimensions","availableStylesWidth","getRealWidth","offSetCalculation","width","startX","scrollLeft","mouseDown","startDragging","pageX","offsetLeft","stopDragging","pointerEvents","scroll","imagesWidth","clientWidth","setProportions","_floor0$clientWidth2","_floor1$clientWidth2","_floor2$clientWidth2","currentActive","clientHeight","shoppingOffset","styleOffset","delay","guideWrapper","guideDecoroom","styleItems","dHfloor0","dHfloor1","dHfloor2","styleChangeButton","isTTDHavailable","_floor0$clientWidth3","_floor1$clientWidth3","_floor2$clientWidth3","sendEventOnToggleStyleChange","currentShoppingProduct","getPlaceholder","isFirefox","iframe","currentTarget","currentIndex","Number","zIndex","deliveryStyleLogo","tags","disableAllTags","tag","enableAllTags","showLabel","oldStyle","sendEventOnStyleChange","miniMapRenderStyles","dollHouseRenderStyles","getLang","srcLengthWihtoutStyle","convertedSrc","cameraRig","cameraEl","minimize","currentMaxHeight","_splitPath$","_splitPath$1$slice","_splitPath$2","modalElement","closeButton","backgroundImageBtn","setStylesOnElement","element","styles","fadeClose","iframeWrapper","removeIframe","right","margin","background","transition","border","splitPath","flat","testing","allowfullscreen","webkitallowfullscreen","mozallowfullscreen","frameborder","styleMaxWidth","turntableDollhouse","A_HIDDEN","hideMinimapButton","floorButtons","floorplanSpots","radars","btn","spot","radar","clearHide","enterFullscreenMode","navigationUI","exitFullscreenMode","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","exitFullscreen","webkitExitFullscreen","mozCancelFullScreen","hmdEnabled","prevStyle","currStyle","KEYCODE_TO_CODE","38","37","40","39","87","65","83","68","fn","ctx","prependedArgs","args","KEYS","values","setup","resetTimerOnCameraMove","resetTimer","startTimer","onKeyboardEvent","cameraMoves","timeoutID","code","removeCursor","cubemapData","lastClickedRoom","smartModelDomains","balconyStartView","cubemapLoader","CubeTextureLoader","firstBalcony","cameraId","isBalconyViewEnabled","loadCubemap","tour","loadingAnimation","temporaryDomainList","parentUrl","referrer","domainIsAvailableName","_event$data","_event$data2","_event$data3","_event$data4","origin","log","parentCall","exteriorsArray","tourRotationY","interiorArray","setCubemap","getUrlsByName","onCubemapLoadingError","actionType","urls","cubemap","load","sRGBEncoding","minFilter","LinearFilter","magFilter","texture","oldCubemap","dispose","cubeMapFilesArray","files","link","on","handleClick","setupLoader","cubemapSky","linkLoader","roomStatus","active","reversedInnerMap","reverse","dataStartingFloor","handleMinimapAnimation","handleToggleHideMinimap","isSafari","isAndroid","countRatio","convertedToInteger","debugRatio","idx","table","divided","imageFloor","node","Image","foorplanImages","floorplan","tempButtonMinimap","handlerCounterImageRatio","mapButton","fovSliderContainer","sceneMenu","sceneMenuButton","hide","hideElement","onLoadedRemoveAnimation","onLoadedAddIndex","currentImage","floorplanContainer","floorsNumber","setInterval","counter","refreshMapHeight","LinkSizes","getLinkSize","LinkFactory","createLink","_window$tour","linkLocation","targetCameraId","targetCameraRoomType","targetCameraStoreyNumber","icon","loaderBackground","linkSize","linkRadiusBasedOnDevice","linkAnimationSizeBasedOnDevice","linkAnimationDurBasedOnDevice","radius","clickSource","destinationRoomType","destinationRoomFloor","side","to","dur","dir","loop","easing","flatShading","thetaLength","createTag","tagLocation","findClass","specificClass","convertToId","styleSelectorMaxWidth","getComputedStyle","spheres","clientType","destroyAllLinks","createProperLinks","changeRadarPosition","changeActiveHotspot","links","linkLocations","linkData","_spheres","_spheres$productsLoca","productsLocations","createTags","removeScaleAnimation","getHoveredRoomType","getRoomType","exteriorTitle","insertAdjacentHTML","LivingRoom","Bedroom","Bathroom","Other","KidsRoom","Kitchen","Stairs","Toilet","Bathroom2","Exterior","DressingRoom","BoilerRoom","HomeOffice","Pantry","WashingRoom","RetailSpace","Pool","WinterGarden","Entresol","Attic","Library","GameRoom","HomeTheater","PlayRoom","WorkShop","LivingRoomWithAKitchenette","HabitableAttic","UtilityRoom","Service","DiningRoom","toLowerCase","setRoomType","showRoomTitle","activeInnerMap","targetHighlight","newActive","coords","findTopLeft","elTop","elLeft","rHeight","rWidth","hotspots","showSpotsOnMinimap","addClickHandlers","addLoadedRoomHandlers","availableFloorplanImages","floorplanImage","minimapHTML","loaderHTML","createRadialLoader","activeClass","parentElement","changeActiveSphere","sphere","radialLoaders","hotspot","drawRadar","getFov","startPoint","gradient","createLinearGradient","addColorStop","fillStyle","strokeStyle","beginPath","arc","PI","lineTo","closePath","fill","stroke","loaderHidden","setupFadeAnimation","startAnimation","endAnimation","delayGetProperDimensions","removeTransition","clearInterval","degToRad","radToDeg","radarOffset","radarEl","cameraRigEl","getCombinedRotation","webkitTransform","mozTransform","msTransform","oTransform","getCameraRotation","rotation","getCameraRigRotation","ANIMATION_NAMES","ANIMATION_EVENTS","duration","menuButtons","floorPlanBlur","addActiveIconClass","setupAnimations","removeActiveIconClass","removeAnimations","getAnimationConfig","applyLoopAnimation","animationConfig","autoRotateMenuButton","autoRotateSubMenuButton","PI_2","acceleration","adEnabled","adInverted","adAxis","oneOf","wsAxis","wsEnabled","wsInverted","velocity","time","delta","updateVelocity","updateRotation","onKeyDown","onKeyUp","adSign","wsSign","abs","KeyA","ArrowLeft","KeyD","ArrowRight","KeyW","ArrowUp","KeyS","ArrowDown","lookControlsComponent","components","pitchObject","yawObject","poseMatrix","pointerLockEnabled","reverseMouseDrag","reverseTouchDrag","touchEnabled","vAxis","hAxis","modulatorX","modulatorY","allowedTime","mobileAllowedTime","deltaYaw","previousHMDPosition","hmdQuaternion","Quaternion","hmdEuler","Euler","magicWindowAbsoluteEuler","magicWindowDeltaEuler","Vector2","savedRotation","savedPosition","magicWindowObject","Object3D","deltaRotation","savedPose","pointerLocked","setupMouseControls","setupMagicWindowControls","_y","onEnterVR","magicWindowControls","DeviceOrientationControls","DeviceOrientationEvent","requestPermission","permissionGranted","updateGrabCursor","set","exitPointerLock","updateOrientation","onMouseDown","onMouseMove","onMouseUp","onTouchStart","onTouchMove","onTouchEnd","onExitVR","onPointerLockChange","onPointerLockError","onGyroscopeOn","onGyroscopeOff","updateLastSwipePos","resetVelocity","canvasEl","Matrix4","pose","hasWebXR","renderer","xr","getCameraPose","elements","matrix","decompose","scale","updateMagicWindowOrientation","setFromQuaternion","quaternion","previousMagicWindowYaw","direction","movementX","movementY","previousMouseEvent","mozMovementX","mozMovementY","screenX","screenY","evt","showGrabbingCursor","requestPointerLock","mozRequestPointerLock","mouseSwipe","pageY","lastMouseSwipe","mouseSwipeStartedTime","Date","getTime","hideGrabbingCursor","distX","distY","velX","velY","modX","modY","maxVel","touches","touchStart","touchStarted","swipeStart","changedTouches","swipeStartedTime","deltaX","deltaY","screenSize","touchObj","swipeParams","threshold","modulator","mobileModulator","saveCameraPose","matrixAutoUpdate","updateMatrix","restoreCameraPose","pointerLockElement","mozPointerLockElement","enableGrabCursor","disableGrabCursor","copy","hasSavedPose","rangeSlider","rangeBullet","wrapperSlider","bulletPosition","calculatedFovValue","fov","waitOnLoad","errorToDisplay","errorScreen","showNavigationBar","overlay","isAddressBarVisible","documentElement","DeviceMotionEvent","sessionStorage","reload","guideContainer","permissionButton","Timer","isRunning","startTime","overallTime","_getTimeElapsedSinceLastStart","now","stop","reset","featureEvents","sendOnce","EventDetails","RoomTypeToRoomName","visitedRooms","featureTimingEvents","startEvent","stopEvent","timingVar","timer","menuItemClassName","isOn","orientationTimer","renderStyle","setupGoogleAnalytics","pageView","addFeatureEventListeners","sendEvent","addFeatureTimingEventListeners","sendTimingEvent","addOrientationTrackingEventListeners","handleInitialAssetsLoaded","sendRoomChangeEvent","beforeUnload","alreadyRun","params","ensureOnce","eventType","page","title","_document$querySelect","timingCategory","timingValue","performance","loadingTime","round","detail","numberOfRooms","numberOfVisitedRooms","nonInteraction","eventValue","handleHotspotClick","_this$el$sceneEl$getA","currentLocation","currentLocationText","sceneMenuTop","domainIsAvailable","destinationRoomTypeIsExterior","cubemaps","cube","getExteriorTarget","postMessage","imageLoader","ImageLoader","defaultStyle","preloadCubemaps","setRoomStatusAsLoaded","firstRoom","FIRST_ROOM_NAME","remainingRooms","cubeMapArray","getRemainingRooms","resolvedCount","loadRemainingRooms","roomCount","loadedRoomsCount","handleErrors","removeQueryFromLink","socials","label","ShareModal","mediaList","copyLink","media","open","social","socialMediaWrapper","linkToCopy","textToSelect","modalContainer","showSelect","range","createRange","selection","getSelection","selectNodeContents","removeAllRanges","addRange","selectElementText","clipboard","writeText","RateApartmentModal","rateInput","score","addClassToModal","disableInputs","input","triggerThankYouPage","setScoreLocalStorage","storeRate","disabled","checked","checkSubMenuButton","checkMenuButton","capture","addContextLostListener","oldOnError","handleError","gl","isContextLost"],"mappings":"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","file":"Components.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\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\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 33);\n","export const isIOS = () => {\n return /iPad|iPhone|iPod/.test(window.navigator.platform);\n};\n\nconst isTablet = () => {\n const userAgent = window.navigator.userAgent;\n return /ipad|Nexus (7|9)|xoom|sch-i800|playbook|tablet|kindle/i.test(userAgent);\n};\n\nconst isR7 = () => {\n return /R7 Build/.test(window.navigator.userAgent);\n};\n\nexport const isMobile = () => {\n const userAgent = window.navigator.userAgent || window.navigator.vendor || window.opera;\n // eslint-disable-next-line no-useless-escape\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(userAgent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(userAgent.substr(0, 4))) {\n return true;\n }\n\n if (isIOS() || isTablet() || isR7()) {\n return true;\n }\n\n if (isMobileVR()) {\n return false;\n }\n};\n\nexport const isIPad = () => {\n return /ipad/i.test(window.navigator.userAgent);\n};\n\nexport const isIpadNewOs = () => {\n return /Macintosh/.test(navigator.userAgent) && 'ontouchend' in document;\n};\n\nexport const isDesktop = () => !isMobile();\n\nconst isOculusBrowser = () => {\n return /(OculusBrowser)/i.test(window.navigator.userAgent);\n};\n\nexport const isMobileVR = () => {\n return isOculusBrowser() || /(Mobile VR)/i.test(window.navigator.userAgent);\n};\n\nexport const isValidForCardboard = () => {\n return isMobile() && !isIPad();\n};\n\nexport const isVRCompatible = () => {\n return isValidForCardboard() || isMobileVR();\n};\n\nexport const isGyroscopeSupported = () => new Promise(resolve => {\n const isMobileDevice = isMobile();\n const isHeadset = isMobileVR();\n let listenerDetached = false;\n\n /**\n * Oculus Go has a gyroscope, but does not emit devicemotion events.\n */\n if (isHeadset) {\n resolve(true);\n\n return;\n }\n\n if (!isMobileDevice) {\n resolve(false);\n\n return;\n }\n\n function checkGyroscope (event) {\n this.removeEventListener('devicemotion', checkGyroscope, true);\n listenerDetached = true;\n\n if (\n !event.rotationRate ||\n typeof event.rotationRate.alpha !== 'number' ||\n typeof event.rotationRate.beta !== 'number' ||\n typeof event.rotationRate.gamma !== 'number'\n ) {\n resolve(false);\n\n return;\n }\n\n resolve(true);\n }\n\n window.addEventListener('devicemotion', checkGyroscope, true);\n\n setTimeout(() => {\n if (!listenerDetached) {\n window.removeEventListener('devicemotion', checkGyroscope, true);\n resolve(false);\n }\n }, 1000);\n});\n","'use strict';\n\nvar pug_has_own_property = Object.prototype.hasOwnProperty;\n\n/**\n * Merge two attribute objects giving precedence\n * to values in object `b`. Classes are special-cased\n * allowing for arrays and merging/joining appropriately\n * resulting in a string.\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object} a\n * @api private\n */\n\nexports.merge = pug_merge;\nfunction pug_merge(a, b) {\n if (arguments.length === 1) {\n var attrs = a[0];\n for (var i = 1; i < a.length; i++) {\n attrs = pug_merge(attrs, a[i]);\n }\n return attrs;\n }\n\n for (var key in b) {\n if (key === 'class') {\n var valA = a[key] || [];\n a[key] = (Array.isArray(valA) ? valA : [valA]).concat(b[key] || []);\n } else if (key === 'style') {\n var valA = pug_style(a[key]);\n valA = valA && valA[valA.length - 1] !== ';' ? valA + ';' : valA;\n var valB = pug_style(b[key]);\n valB = valB && valB[valB.length - 1] !== ';' ? valB + ';' : valB;\n a[key] = valA + valB;\n } else {\n a[key] = b[key];\n }\n }\n\n return a;\n}\n\n/**\n * Process array, object, or string as a string of classes delimited by a space.\n *\n * If `val` is an array, all members of it and its subarrays are counted as\n * classes. If `escaping` is an array, then whether or not the item in `val` is\n * escaped depends on the corresponding item in `escaping`. If `escaping` is\n * not an array, no escaping is done.\n *\n * If `val` is an object, all the keys whose value is truthy are counted as\n * classes. No escaping is done.\n *\n * If `val` is a string, it is counted as a class. No escaping is done.\n *\n * @param {(Array.|Object.|string)} val\n * @param {?Array.} escaping\n * @return {String}\n */\nexports.classes = pug_classes;\nfunction pug_classes_array(val, escaping) {\n var classString = '',\n className,\n padding = '',\n escapeEnabled = Array.isArray(escaping);\n for (var i = 0; i < val.length; i++) {\n className = pug_classes(val[i]);\n if (!className) continue;\n escapeEnabled && escaping[i] && (className = pug_escape(className));\n classString = classString + padding + className;\n padding = ' ';\n }\n return classString;\n}\nfunction pug_classes_object(val) {\n var classString = '',\n padding = '';\n for (var key in val) {\n if (key && val[key] && pug_has_own_property.call(val, key)) {\n classString = classString + padding + key;\n padding = ' ';\n }\n }\n return classString;\n}\nfunction pug_classes(val, escaping) {\n if (Array.isArray(val)) {\n return pug_classes_array(val, escaping);\n } else if (val && typeof val === 'object') {\n return pug_classes_object(val);\n } else {\n return val || '';\n }\n}\n\n/**\n * Convert object or string to a string of CSS styles delimited by a semicolon.\n *\n * @param {(Object.|string)} val\n * @return {String}\n */\n\nexports.style = pug_style;\nfunction pug_style(val) {\n if (!val) return '';\n if (typeof val === 'object') {\n var out = '';\n for (var style in val) {\n /* istanbul ignore else */\n if (pug_has_own_property.call(val, style)) {\n out = out + style + ':' + val[style] + ';';\n }\n }\n return out;\n } else {\n return val + '';\n }\n}\n\n/**\n * Render the given attribute.\n *\n * @param {String} key\n * @param {String} val\n * @param {Boolean} escaped\n * @param {Boolean} terse\n * @return {String}\n */\nexports.attr = pug_attr;\nfunction pug_attr(key, val, escaped, terse) {\n if (\n val === false ||\n val == null ||\n (!val && (key === 'class' || key === 'style'))\n ) {\n return '';\n }\n if (val === true) {\n return ' ' + (terse ? key : key + '=\"' + key + '\"');\n }\n var type = typeof val;\n if (\n (type === 'object' || type === 'function') &&\n typeof val.toJSON === 'function'\n ) {\n val = val.toJSON();\n }\n if (typeof val !== 'string') {\n val = JSON.stringify(val);\n if (!escaped && val.indexOf('\"') !== -1) {\n return ' ' + key + \"='\" + val.replace(/'/g, ''') + \"'\";\n }\n }\n if (escaped) val = pug_escape(val);\n return ' ' + key + '=\"' + val + '\"';\n}\n\n/**\n * Render the given attributes object.\n *\n * @param {Object} obj\n * @param {Object} terse whether to use HTML5 terse boolean attributes\n * @return {String}\n */\nexports.attrs = pug_attrs;\nfunction pug_attrs(obj, terse) {\n var attrs = '';\n\n for (var key in obj) {\n if (pug_has_own_property.call(obj, key)) {\n var val = obj[key];\n\n if ('class' === key) {\n val = pug_classes(val);\n attrs = pug_attr(key, val, false, terse) + attrs;\n continue;\n }\n if ('style' === key) {\n val = pug_style(val);\n }\n attrs += pug_attr(key, val, false, terse);\n }\n }\n\n return attrs;\n}\n\n/**\n * Escape the given string of `html`.\n *\n * @param {String} html\n * @return {String}\n * @api private\n */\n\nvar pug_match_html = /[\"&<>]/;\nexports.escape = pug_escape;\nfunction pug_escape(_html) {\n var html = '' + _html;\n var regexResult = pug_match_html.exec(html);\n if (!regexResult) return _html;\n\n var result = '';\n var i, lastIndex, escape;\n for (i = regexResult.index, lastIndex = 0; i < html.length; i++) {\n switch (html.charCodeAt(i)) {\n case 34:\n escape = '"';\n break;\n case 38:\n escape = '&';\n break;\n case 60:\n escape = '<';\n break;\n case 62:\n escape = '>';\n break;\n default:\n continue;\n }\n if (lastIndex !== i) result += html.substring(lastIndex, i);\n lastIndex = i + 1;\n result += escape;\n }\n if (lastIndex !== i) return result + html.substring(lastIndex, i);\n else return result;\n}\n\n/**\n * Re-throw the given `err` in context to the\n * the pug in `filename` at the given `lineno`.\n *\n * @param {Error} err\n * @param {String} filename\n * @param {String} lineno\n * @param {String} str original source\n * @api private\n */\n\nexports.rethrow = pug_rethrow;\nfunction pug_rethrow(err, filename, lineno, str) {\n if (!(err instanceof Error)) throw err;\n if ((typeof window != 'undefined' || !filename) && !str) {\n err.message += ' on line ' + lineno;\n throw err;\n }\n var context, lines, start, end;\n try {\n str = str || require('fs').readFileSync(filename, {encoding: 'utf8'});\n context = 3;\n lines = str.split('\\n');\n start = Math.max(lineno - context, 0);\n end = Math.min(lines.length, lineno + context);\n } catch (ex) {\n err.message +=\n ' - could not read from ' + filename + ' (' + ex.message + ')';\n pug_rethrow(err, null, lineno);\n return;\n }\n\n // Error context\n context = lines\n .slice(start, end)\n .map(function(line, i) {\n var curr = i + start + 1;\n return (curr == lineno ? ' > ' : ' ') + curr + '| ' + line;\n })\n .join('\\n');\n\n // Alter exception message\n err.path = filename;\n try {\n err.message =\n (filename || 'Pug') +\n ':' +\n lineno +\n '\\n' +\n context +\n '\\n\\n' +\n err.message;\n } catch (e) {}\n throw err;\n}\n","export const translations = {\n en: {\n language: 'en',\n floor: 'FLOOR',\n poweredBy: 'Created by',\n visit: 'visit our website',\n cookies: 'The application uses cookies. Cookies are used only to keep the application running, analyzing the way the application is used and its individual functionalities and to adjust the application to user preferences and the further development of its functionality, we do not track traffic or profile individual user behavior on the Internet.',\n floor_plan: 'FLOOR PLAN',\n multi_styles: 'CHOOSE STYLE',\n dollhouse: 'DOLLHOUSE',\n share: 'SHARE',\n rate: 'RATE',\n vr_mode: 'VR MODE',\n auto_rotate: 'AUTO-ROTATE',\n gyroscope: 'GYROSCOPE',\n fullscreen: 'FULLSCREEN',\n screenshot: 'SCREENSHOT',\n guide_decoroom: 'Presented apartment design has been created in cooperation with Warsaw based Decoroom Sp. z o.o. and is a proposal of possible arrangement and turnkey finishing of your apartment by Decoroom.',\n guide_sub_decoroom: 'For more information, see ',\n guide_title2: 'The presented tour is a visualization',\n guide_title: 'How to use the tour?',\n move_keyboard: 'Look around the apartment by using mouse or keyboard arrows',\n move_finger: 'Look around the apartment by sliding your finger on the screen or turning device',\n next_room: 'To see the next room, click on the white icon',\n loading: 'Loading',\n disclaimer: 'The information contained on the site and site itself does not constitute an offer for the purposes of the Civil Code',\n error_no_webgl: 'Your device doesn\\'t seem to support WebGL. Find out how to get it ',\n error_context_lost: 'Please try again by refreshing your browser',\n something_wrong: 'Something went wrong',\n webgl_link: 'here',\n share_to_social_title: 'Share apartment tour',\n share_to_social_description: 'Share your apartment tour with friends on social media or ',\n share_to_social_description_span: 'copy link',\n rate_apartment_title: 'How do you like this apartment?',\n rate_apartment_description: 'Share your opinion about the apartment by rating it on a scale of 1 to 5',\n rate_apartment_thankyou_title: 'Thank you!',\n rate_apartment_thankyou_description: 'Your opinion means a lot to us',\n shoppingList: {\n designer: 'INTERIOR DESIGN BY',\n all: 'All',\n more: 'More',\n generatePDF: 'Generate product list (PDF)',\n downloadPDF: 'Download product list (PDF)',\n generatingList: 'Generating list',\n summaryPrice: 'Furnishing total price',\n allSelect: 'All (0)',\n },\n gyroscope_guides: {\n ios13: {\n gyroscope_usage: 'To use the virtual reality, please click the button below:',\n permission_button: 'GYROSCOPE',\n toggle_gyroscope: 'You can turn the gyroscope on and off at any time by clicking the gyroscope button on the bottom of the screen.',\n cancel_permission: 'You recently canceled gyroscope access, if you want to change that, close and reopen the browser',\n not_supported: 'Your iPhone has a damaged gyroscope or is not supported by the application',\n },\n },\n roomsTitle: {\n livingRoom: 'LIVING ROOM',\n bedroom: 'BEDROOM',\n bathroom: 'BATHROOM',\n moveStraight: 'GO STRAIGHT',\n childrenRoom: 'ROOM',\n kitchen: 'KITCHEN',\n stairs: 'STAIRS',\n toilet: 'TOILET',\n bathroom2: 'BATHROOM',\n exterior: 'GO OUTSIDE',\n exterior2: 'GO FURTHER',\n dressingRoom: 'DRESSING ROOM',\n pantry: 'PANTRY',\n retailSpace: 'RETAIL SPACE',\n boilerRoom: 'BOILER ROOM',\n homeOffice: 'HOME OFFICE',\n pool: 'POOL',\n washingRoom: 'WASHING ROOM',\n winterGarden: 'WINTER GARDEN',\n entresol: 'ENTRESOL',\n attic: 'ATTIC',\n library: 'LIBRARY',\n gameRoom: 'GAME ROOM',\n homeTheater: 'HOME THEATER',\n playRoom: 'PLAY ROOM',\n workShop: 'WORK SHOP',\n livingRoomWithAKitchenette: 'LIVING ROOM WITH A KITCHENETTE',\n habitableAttic: 'HABITABLE ATTIC',\n utilityRoom: 'UTILITY ROOM',\n service: 'SERVICE',\n diningRoom: 'DINING ROOM',\n },\n },\n pl: {\n language: 'pl',\n floor: 'POZIOM',\n poweredBy: 'Stworzone przez',\n visit: 'odwiedź stronę',\n cookies: 'Aplikacja stosuje pliki cookies. Pliki cookies stosowane są wyłącznie w celu dostarczania i utrzymywania aplikacji w ruchu, analizy sposobu wykorzystania aplikacji i jej poszczególnych funkcjonalności oraz w celu dostosowywania aplikacji do preferencji użytkowników oraz dalszego rozwoju jej funkcjonalności, nie śledzimy ruchu ani nie profilujemy zachowań poszczególnych użytkowników w Internecie.',\n floor_plan: 'PLAN',\n multi_styles: 'WYBIERZ STYL',\n dollhouse: 'DOLLHOUSE',\n share: 'UDOSTĘPNIJ',\n rate: 'OCEŃ',\n vr_mode: 'TRYB VR',\n auto_rotate: 'AUTOOBRÓT',\n gyroscope: 'ŻYROSKOP',\n fullscreen: 'PEŁNY EKRAN',\n screenshot: 'ZRZUT EKRANU',\n guide_decoroom: 'Prezentowany projekt lokalu powstał we współpracy z Decoroom sp. z o.o. z siedzibą w Warszawie i stanowi propozycję możliwości aranżacji i wykończenia pod klucz Twego mieszkania przez Decoroom. ',\n guide_sub_decoroom: 'Więcej informacji znajdziesz na ',\n guide_title2: 'Prezentowana wycieczka jest wizualizacją',\n guide_title: 'Jak korzystać z wycieczki?',\n move_keyboard: 'Poruszaj się za pomocą myszki lub strzałek na klawiaturze',\n move_finger: 'Poruszaj się przesuwając palcem po ekranie lub obracając urządzenie',\n next_room: 'Aby przejść do kolejnego pomieszczenia, kliknij w jego ikonę',\n loading: 'Trwa ładowanie',\n disclaimer: 'Przedstawiona aranżacja lokalu jest przykładowa, a widoki zewnętrzne mogą różnić się od rzeczywistych. Wizualizacje w tym zakresie mają charakter poglądowy oraz informacyjny i nie stanowią oferty w rozumieniu Kodeksu Cywilnego.',\n something_wrong: 'Coś poszło nie tak',\n error_no_webgl: 'Twoje urządzenie nie wspiera WebGL. Dowiedz się więcej',\n webgl_link: 'tutaj',\n error_context_lost: 'Spróbuj ponownie odświeżając przeglądarkę',\n share_to_social_title: 'Udostępnij wycieczkę',\n share_to_social_description: 'Podziel się wycieczką ze znajomymi w mediach społecznościowych lub ',\n share_to_social_description_span: 'skopiuj link',\n rate_apartment_title: 'Jak podoba Ci się to mieszkanie?',\n rate_apartment_description: 'Podziel się swoją opinią na temat mieszkania oceniając je w skali od 1 do 5',\n rate_apartment_thankyou_title: 'Dziękujemy!',\n rate_apartment_thankyou_description: 'Twoja opinia dużo dla nas znaczy',\n shoppingList: {\n designer: 'PROJEKT WNĘTRZA',\n all: 'Wszystkie',\n more: 'Więcej',\n generatePDF: 'Wygeneruj listę produktów (PDF)',\n downloadPDF: 'Pobierz listę produktów (PDF)',\n generatingList: 'Trwa generowanie listy',\n summaryPrice: 'Łączna cena wyposażenia',\n allSelect: 'Wszystkie (0)',\n },\n gyroscope_guides: {\n ios13: {\n gyroscope_usage: 'Aby skorzystać z funkcji wirtualnej rzeczywistości, kliknij przycisk poniżej:',\n permission_button: 'ŻYROSKOP',\n toggle_gyroscope: 'Możesz włączyć i wyłączyć żyroskop w każdym momencie, klikając na przycisk żyroskopu na dole ekranu.',\n cancel_permission: 'Anulowałeś dostęp do żyroskopu, jeśli chcesz zmienić swoją decyzję, zamknij i otwórz ponownie przeglądarkę',\n not_supported: 'Twój iPhone ma uszkodzony żyroskop lub nie jest wspierany przez aplikację',\n },\n },\n roomsTitle: {\n livingRoom: 'POKÓJ DZIENNY',\n bedroom: 'SYPIALNIA',\n bathroom: 'ŁAZIENKA',\n moveStraight: 'PRZEJDŹ DO PUNKTU',\n childrenRoom: 'POKÓJ',\n kitchen: 'KUCHNIA',\n stairs: 'SCHODY',\n toilet: 'TOALETA',\n bathroom2: 'ŁAZIENKA',\n exterior: 'PRZEJDŹ NA ZEWNĄTRZ',\n exterior2: 'PRZEJDŹ DALEJ',\n dressingRoom: 'GARDEROBA',\n pantry: 'SPIŻARNIA',\n retailSpace: 'LOKAL USŁUGOWY',\n boilerRoom: 'KOTŁOWNIA',\n homeOffice: 'GABINET',\n pool: 'BASEN',\n washingRoom: 'PRALNIA',\n winterGarden: 'OGRÓD ZIMOWY',\n entresol: 'ANTRESOLA',\n attic: 'PODDASZE',\n library: 'BIBLIOTEKA',\n gameRoom: 'POKÓJ DO GIER',\n homeTheater: 'KINO DOMOWE',\n playRoom: 'POKÓJ DLA DZIECI/BAWIALNIA',\n workShop: 'WARSZTAT',\n livingRoomWithAKitchenette: 'SALON Z ANEKSEM KUCHENNYM',\n habitableAttic: 'PODDASZE UŻYTKOWE',\n utilityRoom: 'POMIESZCZENIE GOSPODARCZE',\n service: 'LOKAL USŁUGOWY',\n diningRoom: 'JADALNIA',\n },\n },\n es: {\n language: 'es',\n floor: 'PISO',\n poweredBy: 'Creado por',\n visit: 'Visite nuestra página',\n cookies: 'The application uses cookies. Cookies are used only to keep the application running, analyzing the way the application is used and its individual functionalities and to adjust the application to user preferences and the further development of its functionality, we do not track traffic or profile individual user behavior on the Internet.',\n floor_plan: 'Plano del departamento',\n multi_styles: 'Escoja estilo',\n dollhouse: 'Casa de muñecas',\n share: 'Compartir',\n rate: 'Evalúa el departamento',\n vr_mode: 'Modo Realidad Virtual',\n auto_rotate: 'Auto-rotar',\n gyroscope: 'Giroscopio',\n fullscreen: 'Pantalla completa',\n screenshot: 'Captura de pantalla',\n guide_decoroom: 'El diseño del departamento mostrado ha sido creado en cooperación con la empresa basada en Varsovia, Decoroom Sp z.o.o. y es una propuesta posible de un acomodo y acabados llave en mano de su departamento por Decoroom.',\n guide_sub_decoroom: 'Obtenga más información en ',\n guide_title2: 'El presente recorrido es una visualización',\n guide_title: '¿Cómo usar el recorrido?',\n move_keyboard: 'Da una vista al departamento usando el ratón o las flechas del teclado',\n move_finger: 'Da una vista al departamento desplazando tus dedos en la pantalla o girando el dispositivo',\n next_room: 'Para ver la siguiente habitación, presiona en el ícono blanco',\n loading: 'Cargando',\n disclaimer: 'La información contenida en este sitio y el sitio por si mismo, no constituye una oferta para efectos del código civil',\n something_wrong: 'Algo salió mal',\n error_no_webgl: 'Su dispositivo parece no soportar WebGL. Averigua como obtenerlo.',\n webgl_link: 'aquí',\n error_context_lost: 'Por favir intenta de nuevo refrescando la página de su navegador',\n share_to_social_title: 'Comparte el recorrido del departamento',\n share_to_social_description: 'Comparte el recorrido del departamento con amigos en redes sociales o, ',\n share_to_social_description_span: 'Copia el vínculo',\n rate_apartment_title: 'Qué tanto te gusta este departamento?',\n rate_apartment_description: 'Comparte tu opinión acerca del departamento calificándolo en escala de 1 a 5',\n rate_apartment_thankyou_title: 'Gracias !',\n rate_apartment_thankyou_description: 'Su opinión es muy importante para nosotros,',\n shoppingList: {\n designer: 'DISEÑO INTERIOR POR',\n all: 'Todos',\n more: 'Más',\n generatePDF: 'Genera lista de productos (PDF)',\n downloadPDF: 'Descarga lista de productos (PDF)',\n generatingList: 'Generando lista',\n summaryPrice: 'Precio total de amueblado',\n allSelect: 'Todos (0)',\n },\n gyroscope_guides: {\n ios13: {\n gyroscope_usage: 'Para usar la función de realidad virtual ve a',\n permission_button: 'GIROSCOPIO',\n toggle_gyroscope: 'Puedes prender y apagar el giroscopio en cualquir momento presionando el botón de giroscopio en el fondo de la pantanalla.',\n cancel_permission: 'Recientemente cancelaste el acceso al giroscopio, si quiertes cambiarlo, cierra y abre el navegador.',\n not_supported: 'Tu Iphone tiene un giroscopio dañado o no es soportado por la aplicación',\n },\n },\n roomsTitle: {\n livingRoom: 'SALA',\n bedroom: 'HABITACIÓN',\n bathroom: 'BAÑO',\n moveStraight: 'VE DERECHO',\n childrenRoom: 'CUARTO',\n kitchen: 'COCINA',\n stairs: 'ESCALERAS',\n toilet: 'INODORO',\n bathroom2: 'BAÑO',\n exterior: 'VE AFUERA',\n exterior2: 'IR MÁS ALLÁ',\n dressingRoom: 'VESTIDOR',\n pantry: 'DESPENSA',\n retailSpace: 'ESPACIO DE VENTA AL PORMENOR',\n boilerRoom: 'CUARTO DE CALENTADOR',\n homeOffice: 'OFICINA EN CASA',\n pool: 'PISCINA',\n washingRoom: 'CUARTO DE LAVADO',\n winterGarden: 'JARDÍN DE INVIERNO',\n entresol: 'ENTRESUELO',\n attic: 'ÁTICO',\n library: 'BIBLIOTECA',\n gameRoom: 'SALA DE JUEGOS',\n homeTheater: 'HOME THEATER',\n playRoom: 'SALA DE JUEGOS',\n workShop: 'TALLER',\n livingRoomWithAKitchenette: 'SALÓN CON KITCHENETTE',\n habitableAttic: 'ÁTICO HABITABLE',\n utilityRoom: 'CUARTO DE SERVICIO',\n service: 'SERVICIO',\n diningRoom: 'COMEDOR',\n },\n },\n fr: {\n loaderAnimation: 'Loading...',\n language: 'fr',\n floor: 'Niveau',\n poweredBy: 'Réalisé par',\n visit: 'visiter la page',\n cookies: 'The application uses cookies. Cookies are used only to keep the application running, analyzing the way the application is used and its individual functionalities and to adjust the application to user preferences and the further development of its functionality, we do not track traffic or profile individual user behavior on the Internet.',\n floor_plan: 'PLAN DE L\\'APPARTEMENT',\n multi_styles: 'Choisir le style de l\\'ambiance',\n dollhouse: 'DOLLHOUSE',\n share: 'VISUALISER',\n rate: 'EVALUER L\\'APPARTEMENT',\n vr_mode: 'MODE VR',\n auto_rotate: 'ROTATION AUTOMATIQUE',\n gyroscope: 'GYROSCOPE',\n fullscreen: 'PLEIN ÉCRAN',\n screenshot: 'CAPTURE D\\'ÉCRAN',\n guide_decoroom: '\"La conception du local présenté a été réalisée en coordination avec l\\'Atelier Decoroom S.a.r.l de Varsovie. \\n' +\n 'Elle représente l’une des possibilités des arrangements décoratifs internes et de finitions de votre futur logement pouvant être réalisés par Decoroom. \\n' +\n '\"',\n guide_sub_decoroom: 'Pour plus d\\'informations, voir ',\n guide_title2: 'Travelling proposé ici est une visualisation ',\n guide_title: 'Comment exploiter la visite virtuelle',\n move_keyboard: 'Se déplacer à l\\'aide d\\'une souris',\n move_finger: 'Se déplacer au toucher sur l\\'écran',\n next_room: 'Pour se déplacer vers une autre pièce, clicker sur son îcone',\n loading: 'Chargement',\n disclaimer: 'Les ambiances décortives ainsi que les visuels internes sont présentés ici à titre indicatif, à caractère non contractuel',\n error_no_webgl: 'Votre équipement ne supporte pas WebGl. A en savoir plus clicker',\n error_context_lost: 'Réessayer à nouveau en actualisant la page',\n something_wrong: 'Une erreur s\\'est produite',\n webgl_link: 'ici',\n share_to_social_title: 'Partager la visite virtuelle',\n share_to_social_description: 'partager la visite virtuelle sur des réseaux sociaux ',\n share_to_social_description_span: 'copier le lien',\n rate_apartment_title: 'Comment trouvez vous cet appartement ?',\n rate_apartment_description: 'Partager votre opinion en attribuant la note de 1 - 5',\n rate_apartment_thankyou_title: 'Merci!',\n rate_apartment_thankyou_description: 'Votre avis compte nous est précieux',\n shoppingList: {\n designer: 'Design interne',\n all: 'Toutes, Tous',\n more: 'Plus',\n generatePDF: 'Génerer une liste de produits (PDF)',\n downloadPDF: 'Télécharger la liste de produits (PDF)',\n generatingList: 'Edition de la liste en cours',\n summaryPrice: 'Coût total des équipements ',\n allSelect: 'Toutes, Tous',\n },\n gyroscope_guides: {\n ios13: {\n gyroscope_usage: 'Afin de bénéficier de la fonction de la réalité virtuelle, clicker ici',\n permission_button: 'GYROSCOPE',\n toggle_gyroscope: 'Activer et désactiver le gyroscope à tout moment en clickant sur le bouton situé en bas de l\\'écran',\n cancel_permission: 'Après avoir annulé l\\'accès au gyroscope, si modification de choix , fermer et rouvrir à nouveau la visionneuse',\n not_supported: 'Le gyroscope de votre Iphone est hors service ou l\\'application installée ne peut pas le supporter',\n },\n },\n roomsTitle: {\n livingRoom: 'LE SÉJOUR',\n bedroom: 'CHAMBRE À COUCHER',\n bathroom: 'SALLE DE BAIN',\n moveStraight: 'AVANCER TOUT DROIT',\n childrenRoom: 'CHAMBRE',\n kitchen: 'CUISINE',\n stairs: 'ESCALIER',\n toilet: 'TOILETTES',\n bathroom2: 'SALLE DE BAIN',\n exterior: 'SORTIR',\n exterior2: 'PASSER À L\\'ÉTAPE SUIVANTE',\n dressingRoom: 'LE VESTIAIRE',\n pantry: 'CELLIER',\n retailSpace: 'CELLULE COMMERCIALE',\n boilerRoom: 'CHAUFFERIE',\n homeOffice: 'BUREAU',\n pool: 'PISCINE',\n washingRoom: 'LAVERIE',\n winterGarden: 'JARDIN D\\'HIVER',\n entresol: 'Entresol',\n attic: 'GRENIER',\n library: 'BIBLIOTHÈQUE',\n gameRoom: 'SALLE DE JEUX',\n homeTheater: 'HOME CINÉMA',\n playRoom: 'SALLE DE JEUX',\n workShop: 'ATELIER',\n livingRoomWithAKitchenette: 'SALON ABEC KITCHENETTE',\n habitableAttic: 'GRENIER HABITABLE',\n utilityRoom: 'LOCAL TECHNIQUE',\n service: 'SERVICE',\n diningRoom: 'SALLE À MANGER',\n },\n },\n de: {\n language: 'de',\n floor: 'STOCKWERK',\n poweredBy: 'Erstellt von',\n visit: 'Besuchen Sie die Website',\n cookies: 'The application uses cookies. Cookies are used only to keep the application running, analyzing the way the application is used and its individual functionalities and to adjust the application to user preferences and the further development of its functionality, we do not track traffic or profile individual user behavior on the Internet.',\n floor_plan: 'WOHNUNGSPLAN',\n multi_styles: 'WÄHLEN SIE EINEN STIL AUS',\n dollhouse: 'PUPPENHAUS',\n share: 'TEILEN',\n rate: 'BEWERTEN SIE DIE WOHNUNG',\n vr_mode: 'VR-MODUS',\n auto_rotate: 'AUTOMATISCH DREHEN',\n gyroscope: 'GYROSKOP',\n fullscreen: 'VOLLBILD',\n screenshot: 'BILDSCHIRMFOTO',\n guide_decoroom: 'Das präsentierte Raumdesign wurde in Zusammenarbeit mit Decoroom sp. z o.o. mit Sitz in Warschau erstellt und ist ein Vorschlag über die mögliche Innenraumgestaltung und Fertigstellung Ihrer schlüsselwertigen Wohnung durch Decoroom.',\n guide_sub_decoroom: 'Weitere Informationen finden Sie unter ',\n guide_title: 'Bedienungsanleitung?',\n guide_title2: 'Der dargestellte Rundgang ist eine Visualisierung',\n move_keyboard: 'Bewegen Sie sich mit der Maus oder den Tastaturpfeilen',\n move_finger: 'Schauen Sie sich in der Wohnung um, indem Sie Ihren Finger über den Bildschirm schieben oder das Gerät drehen',\n next_room: 'Um zum nächsten Raum zu gelangen, klicken Sie auf das entsprechende Symbol',\n loading: 'Ladevorgang ',\n disclaimer: 'Die hier gezeigte Anordnung der Räume ist beispielhaft und die Außenansichten können von den tatsächlichen abweichen. Die Visualisierungen dienen der Veranschaulichung und Information und stellen kein Angebot im Sinne des Gesetzes dar.',\n error_no_webgl: 'Etwas ist schief gelaufen.',\n error_context_lost: 'Ihr Gerät unterstützt WebGL nicht. Finde mehr heraus',\n something_wrong: 'Bitte versuchen Sie es erneut, indem Sie Ihren Browser aktualisieren',\n webgl_link: 'Hier',\n share_to_social_title: 'Rundgang teilen',\n share_to_social_description: 'Teilen Sie den Rundgang mit Ihren Freunden in den sozialen Medien oder, ',\n share_to_social_description_span: 'kopieren Sie den link',\n rate_apartment_title: 'Wie gefällt Ihnen diese Wohnung?',\n rate_apartment_description: 'Bewerten Sie die Wohnung, indem Sie sie auf einer Skala von 1 bis 5 bewerten',\n rate_apartment_thankyou_title: 'Vielen Dank!',\n rate_apartment_thankyou_description: 'Ihre Meinung bedeutet uns sehr viel',\n shoppingList: {\n designer: 'Entwurf der Innenraumgestalltung',\n all: 'Alle',\n more: 'Mehr',\n generatePDF: 'Produktliste erstellen (PDF)',\n downloadPDF: 'Produktliste herunterladen (PDF)',\n generatingList: 'Die Liste wird erstellt',\n summaryPrice: 'Gesamtpreis der Ausstattung',\n allSelect: 'Alle (0)',\n },\n gyroscope_guides: {\n ios13: {\n gyroscope_usage: 'Klicken Sie auf die Schaltfläche unten, um die Virtual-Reality-Funktion zu verwenden',\n permission_button: 'GYROSKOP',\n toggle_gyroscope: 'Sie können das Gyroskop jederzeit ein- und ausschalten, indem Sie auf die Kreiselschaltfläche am unteren Bildschirmrand klicken.',\n cancel_permission: 'Sie haben den Zugriff auf den Gyroskop abgebrochen. Wenn Sie Ihre Entscheidung ändern möchten, schließen Sie den Browser und öffnen ihn erneut.',\n not_supported: 'Ihr iPhone hat ein beschädigtes Gyroskop oder wird von der Anwendung nicht unterstützt.',\n },\n },\n roomsTitle: {\n livingRoom: 'WOHNZIMMER',\n bedroom: 'SCHLAFZIMMER',\n bathroom: 'BADEZIMMER',\n moveStraight: 'GEHE ZUM PUNKT',\n childrenRoom: 'ZIMMER',\n kitchen: 'KÜCHE',\n stairs: 'TREPPE',\n toilet: 'TOILETTE',\n bathroom2: 'BADEZIMMER',\n exterior: 'GEHE NACH DRAUßEN',\n exterior2: 'WEITER',\n dressingRoom: 'KLEIDERSCHRANK',\n pantry: 'VORRATSRAUM',\n retailSpace: 'GESCHÄFTSFLÄCHE',\n boilerRoom: 'HEIZRAUM',\n homeOffice: 'BÜRO',\n pool: 'SCHWIMMBAD',\n washingRoom: 'WASCHKÜCHE',\n winterGarden: 'WINTERGARTEN',\n entresol: 'ZWISCHENGESCHOSS',\n attic: 'DACHBODEN',\n library: 'BIBLIOTHEK',\n gameRoom: 'SPIELZIMMER',\n homeTheater: 'HEIMKINO',\n playRoom: 'SPIELZIMMER',\n workShop: 'WERKSTATT',\n livingRoomWithAKitchenette: 'WOHNZIMMER MIT KÜCHENZEILE',\n habitableAttic: 'BEWOHNBARER DACHBODEN',\n utilityRoom: 'WIRTSCHAFTSRAUM',\n service: 'DIENSTLEISTUNG',\n diningRoom: 'ESSZIMMER',\n },\n },\n it: {\n language: 'it',\n floor: 'LIVELLO',\n poweredBy: 'Powered by',\n visit: 'Visita il nostro sito',\n cookies: '\"L\\'applicazione utilizza i cookie. I cookie vengono utilizzati solo per mantenere l\\'applicazione in esecuzione\\'\\n' +\n 'g, analizzare il modo in cui viene utilizzata l\\'applicazione e le sue singole funzionalità e regolare l\\'app\\n' +\n 'in base alle preferenze dell\\'utente e all\\'ulteriore sviluppo delle sue funzionalità, non tracciamo il traffico\\n' +\n 'c o profilare il comportamento dei singoli utenti su Internet.\"',\n floor_plan: 'PIANO TOPO',\n multi_styles: 'SELEZIONA STILE',\n dollhouse: 'DOLLHOUSE',\n share: 'CONDIVIDI',\n rate: 'VALUTA APPARTAMENTO',\n vr_mode: 'VR MODE',\n auto_rotate: 'AUTO ROTAZIONE',\n gyroscope: 'GIRISCOPIO',\n fullscreen: 'FULLSCREEN',\n screenshot: 'SCREENSHOT',\n guide_decoroom: 'La disposizione presentata dei locali è stata creata in collaborazione con lo studio d\\'architettura ed è un esempio di finitura chiavi in ​​mano che puoi utilizzare per organizzare il tuo appartamento',\n guide_sub_decoroom: 'Per maggiori informazioni, vedi ',\n guide_title2: 'Il tour è in visualizzazione',\n guide_title: 'Come usare il tour?',\n move_keyboard: 'Naviga appartamento usando mouse',\n move_finger: 'Naviga appartamento con il dito sullo schermo',\n next_room: 'Per vedere la prossima stanza, clicca sull\\'icona bianca',\n loading: 'Caricamento',\n disclaimer: 'Le informazioni contenute nel sito non costituiscono un\\'offerta ufficiale',\n something_wrong: 'Qualcosa è andato storto',\n error_no_webgl: 'Il tuo dispositivo non supporta WebGL',\n webgl_link: 'qua',\n error_context_lost: 'Prova ancora, effettua refresh del browser',\n share_to_social_title: 'Condividi tour appartamento',\n share_to_social_description: 'Condividi tour appartamento con amici o sui social o ',\n share_to_social_description_span: 'copia link',\n rate_apartment_title: 'Ti piace l\\'appartamento?',\n rate_apartment_description: 'Condividi la tua opinione sull\\'appartamento da una scala da 1 a 5',\n rate_apartment_thankyou_title: 'Grazie!',\n rate_apartment_thankyou_description: 'La tua opinione per noi è importante',\n shoppingList: {\n designer: 'INTERIOR DESIGN',\n all: 'All',\n more: 'More',\n generatePDF: 'Generate a list of products (PDF)',\n downloadPDF: 'Download product list (PDF)',\n generatingList: 'Generating list',\n summaryPrice: 'The total price of the equipment',\n allSelect: 'All (0)',\n },\n gyroscope_guides: {\n ios13: {\n gyroscope_usage: 'Per utilizzare la realtà virtuale, clicca sul bottone sottostante',\n permission_button: 'GIROSCOPIO',\n toggle_gyroscope: 'Puoi attivare o disattivare il giroscopio in ogni momento cliccando sul bottone relativo',\n cancel_permission: 'Hai disattivato l\\'accesso al giroscopio',\n not_supported: 'Il tuo telefono è danneggiato oppure non supporta l\\'applicazione giroscopio',\n },\n },\n roomsTitle: {\n livingRoom: 'SOGGIORNO',\n bedroom: 'CAMERA DA LETTO',\n bathroom: 'BAGNO',\n moveStraight: 'VAI AVANTI',\n childrenRoom: 'STANZA',\n kitchen: 'CUCINA',\n stairs: 'SCALE',\n toilet: 'BAGNO',\n bathroom2: 'BAGNO',\n exterior: 'ESCI',\n exterior2: 'AVANTI',\n dressingRoom: 'GUARDAROBA',\n pantry: 'DISPENSA',\n retailSpace: 'POSIZIONE DI SERVIZIO',\n boilerRoom: 'CALDAIA',\n homeOffice: 'UFFICIO',\n pool: 'PISCINA',\n washingRoom: 'LAVANDERIA',\n winterGarden: 'GIARDINO D\\'INVERNO',\n entresol: 'ENTRESOL',\n attic: 'SOFFITTA',\n library: 'BIBLIOTECA',\n gameRoom: 'SALA GIOCHI',\n homeTheater: 'HOME THEATER',\n playRoom: 'SALA GIOCHI',\n workShop: 'OFFICINA',\n livingRoomWithAKitchenette: 'SOGGIORNO CON ANGOLO COTTURA',\n habitableAttic: 'SOFFITTA ABITABILE',\n utilityRoom: 'LOCALE TECNICO',\n service: 'SERVIZIO',\n diningRoom: 'SALA DA PRANZO',\n },\n },\n he: {\n language: 'he',\n floor: 'קומה',\n poweredBy: 'נוצר ע\"י',\n visit: 'בקרו באתר',\n cookies: 'אתר זה משתמש בקבצי cookie, שייכים לנו או לצדדים שלישיים, לצורכי ביצועים ומציגים שמפרסמים להעדפות הגלישה שלך וזה עשוי לעניין אותך. כדי להבין יותר אודות האופן בו אנו משתמשים בקובצי cookie או לשנות את העדפות העוגיות שלך, לחץ על \"הגדרות קובצי Cookie\". תוכל לשנות הגדרות אלה בכל עת על ידי ביקור במדיניות העוגיות שלנו ובעקבות ההוראות שהיא מכילה. בלחיצה על \"קבל את כל העוגיות\" אתה מסכים לאחסון העוגיות במכשיר שלך.',\n floor_plan: 'תוכנית קומה',\n multi_styles: 'בחר עיצוב',\n dollhouse: 'מודל להמחשה',\n share: 'שתף',\n rate: 'דרג דירה',\n vr_mode: 'הפעל VR',\n auto_rotate: 'סיבוב אוטומטי',\n gyroscope: 'ג\\'ירוסקופ',\n fullscreen: 'מסך מלא',\n screenshot: 'צילום מסך',\n guide_decoroom: 'עיצוב הדירות המוצגות נוצר בשיתוף פעולה עם Decoroom Sp. z o.o. והיא מהווה הצעה לעיצוב אפשרי וגימור של הדירה שלך על ידי Decoroom.',\n guide_sub_decoroom: 'למידע נוסף, ראה ',\n guide_title2: 'הסיור המוצג הוא הדמיה',\n guide_title: 'כיצד להשתמש בסיור הווירטואלי',\n move_keyboard: 'הבט סביב ע\"י שימוש בעכבר או חיצי המקלדת',\n move_finger: 'הבט סביב ע\"י מעבר עם האצבע על המסך או היפוך מסך ',\n next_room: 'כדי לראות את החדר הבא לחץ על כפתור הלבן',\n loading: 'טוען,',\n disclaimer: 'המידע הכלול באתר ובאתר עצמו אינו מהווה הצעה להקוד האזרחי',\n something_wrong: 'המכשיר שלך אינו תומך בWebGL, גלה איך לבצע עדכון',\n error_no_webgl: 'אנא רענן את הדפדפן',\n webgl_link: 'כאן,',\n error_context_lost: 'משהו השתבש',\n share_to_social_title: 'שתף את הסיור הווירטואלי',\n share_to_social_description: 'שתף את הסיור הווירטואלי עם חברים ברשת החברתית ',\n share_to_social_description_span: 'העתק קישור,',\n rate_apartment_title: 'מה דעתך על הדירה הזו?',\n rate_apartment_description: 'נשמח לדירוג הדירה ולשמוע מה דעתך',\n rate_apartment_thankyou_title: 'תודה רבה!',\n rate_apartment_thankyou_description: 'דעתך חשובה לנו,',\n shoppingList: {\n designer: 'עיצוב פנים ע\"י',\n all: 'הכל',\n more: 'הצג עוד',\n generatePDF: 'צור רשימת מוצרים (PDF)',\n downloadPDF: 'הורד את רשימת המוצרים (PDF)',\n generatingList: 'יוצר רשימה',\n summaryPrice: 'ריהוט מחיר כולל',\n allSelect: 'הכל',\n },\n gyroscope_guides: {\n ios13: {\n gyroscope_usage: 'כדי להשתמש בסיור הווירטואלי לך ל',\n permission_button: 'ג\\'ירוסקופ',\n toggle_gyroscope: 'אתה יכול להפעיל ולכבות את הג\\'ירוסקופ בכל עת על ידי לחיצה על כפתור הג\\'ירוסקופ בתחתית המסך,',\n cancel_permission: 'לאחרונה ביטלת את הגישה לג\\'ירוסקופ, אם אתה רוצה לשנות את זה, סגור ופתח מחדש את הדפדפן,',\n not_supported: 'למכשיר שלך יש ג\\'ירוסקופ פגום או שהוא לא נתמך על ידי האפליקציה,',\n },\n },\n roomsTitle: {\n livingRoom: 'סלון',\n bedroom: 'חדר שינה',\n bathroom: 'חדר מקלחת',\n moveStraight: 'המשך ישר',\n childrenRoom: 'חדר',\n kitchen: 'מטבח',\n stairs: 'מדרגות',\n toilet: 'שירותים',\n bathroom2: 'מקלחת',\n exterior: 'מעבר לבחוץ',\n exterior2: 'המשך',\n dressingRoom: 'חדר הלבשה',\n pantry: 'מזוה',\n retailSpace: 'שטח קמעונאי',\n boilerRoom: 'חדר דוד',\n homeOffice: 'משרד בייתי',\n pool: 'בריכה',\n washingRoom: 'חדר כביסה',\n winterGarden: 'גן חורף',\n entresol: 'אנטרסול',\n attic: 'עליית גג',\n library: 'ספרייה',\n gameRoom: 'חדר משחקים',\n homeTheater: 'קולנוע ביתי',\n playRoom: 'חדר משחקים',\n workShop: 'סדנה',\n livingRoomWithAKitchenette: 'סלון עם מטבחון',\n habitableAttic: 'עליית גג שמשמשת למגורים',\n utilityRoom: 'חדר שירות',\n service: 'שירות',\n diningRoom: 'פינת אוכל',\n },\n },\n bg: {\n language: 'bg',\n floor: 'Етаж',\n poweredBy: 'Създадено от',\n visit: 'Посетете страницата ни',\n cookies: 'Приложението използва бисквитки\". \"Бисквитките\" се използват само за поддържане на работата на приложението, за анализиране на начина на използване на приложението и неговите индивидуални функционалности. \"Бисквитките\" не се използват за проследяване на трафика както и за профилирането на индивидуалното поведение на потребителите в интернет.',\n floor_plan: 'План етаж',\n multi_styles: 'Изберете дизайн',\n dollhouse: '3D Модел',\n share: 'Споделете',\n rate: 'Оценете апартамента',\n vr_mode: 'VR mode',\n auto_rotate: 'Автоматично въртене',\n gyroscope: 'Жироскоп',\n fullscreen: 'Цял екран',\n screenshot: 'Снимка на екрана',\n guide_decoroom: 'Интериорният дизайн е създаден съвместно с Decoroom Sp. Варшава и е идеен проект за възможно обзавеждане и довършване на апартамента. Дизайнът е представен с илюстративна цел.',\n guide_sub_decoroom: 'За повече информация вж ',\n guide_title2: 'Виртуалната разходка е с представтиелна цел',\n guide_title: 'Как да използвате виртиуалната разходка?',\n move_keyboard: 'Разгледайта апартамента като използвате мишката или стрелките на клавиатурата',\n move_finger: 'Разгледайта апартамента като преплъзвате пръста си по екрана на устройството, което използвате',\n next_room: 'Кликнете на бялата икона, за да разгледате следващата стая',\n loading: 'Зареждане',\n disclaimer: 'Информацията, съдържаща се в сайта и самият сайт не представляват оферта по закона за гражданаското право',\n error_no_webgl: 'Устройството ви не поддържа WebGL. Научете повече за това как може да го свалите.',\n error_context_lost: 'Натиснете Refresh на вашия браузер и опитайте отново.',\n something_wrong: 'Възникна грешка.',\n webgl_link: 'тук',\n share_to_social_title: 'Споделете разходката на апартамента',\n share_to_social_description: 'Споделете разходката на апартамента с ваши приятели в социалните мрежи ',\n share_to_social_description_span: 'копирайте линка',\n rate_apartment_title: 'Може ли да оцените до каква степен ви харесва този апартамент?',\n rate_apartment_description: 'Споделете вашето мнение за апартамента като изберете рейтинг от 1 до 5.',\n rate_apartment_thankyou_title: 'Благодарим ви!',\n rate_apartment_thankyou_description: 'Вашето мнение е от огромно значение за нас.',\n shoppingList: {\n designer: 'ИНТЕРИОРЕН ДИЗАЙН ОТ',\n all: 'всичко',\n more: 'Повече',\n generatePDF: '',\n downloadPDF: 'Още Изтеглете списък с продукти (PDF)',\n generatingList: 'Генериране на списък',\n summaryPrice: 'Обзавеждане обща цена',\n allSelect: 'всичко (0)',\n },\n gyroscope_guides: {\n ios13: {\n gyroscope_usage: 'За да използвате функцията за виртуална реалност, кликнете на бутона отдолу',\n permission_button: 'Жироскоп',\n toggle_gyroscope: 'Може да активирате или деактивирате жироскопа по всяко време като кликнете на бутона за жироскоп най-отдолу на екрана.',\n cancel_permission: 'Отменихте функцията на жироскопа, ако искате да направите промяна затворете и отворите отново браузера.',\n not_supported: 'Жироскопът на вашия iPhone не работи или не се поддържа от апликацията.',\n },\n },\n roomsTitle: {\n livingRoom: 'Дневна',\n bedroom: 'Спалня',\n bathroom: 'Баня',\n moveStraight: 'Напред',\n childrenRoom: 'Детска стая ',\n kitchen: 'Кухня',\n stairs: 'Стълби',\n toilet: 'Тоалетна',\n bathroom2: 'Баня',\n exterior: 'Излизане навън',\n exterior2: 'Продълже напред',\n dressingRoom: 'Дрешник',\n pantry: 'Килер',\n retailSpace: 'Услуги',\n boilerRoom: 'Помещение за бойлер',\n homeOffice: 'Офис кабинет',\n pool: 'Басейн',\n washingRoom: 'Помещение за пералня',\n winterGarden: 'Зимна градина',\n entresol: 'Антре',\n attic: 'Мансарда',\n library: 'Библиотека',\n gameRoom: 'Стая за игри',\n homeTheater: 'Домашно кино',\n playRoom: 'Стая за игри',\n workShop: 'Уъркшоп',\n livingRoomWithAKitchenette: 'Дневна с кухня',\n habitableAttic: 'Обитаема мансарда',\n utilityRoom: 'Помощне помещение',\n service: 'Услуги',\n diningRoom: 'Трапезария',\n },\n },\n};\n","import { translations } from './translations';\n\nexport const getTranslation = () => {\n const browserLang = (navigator.language || navigator.userLanguage || '').slice(0, 2) || '';\n const availableLanguages = ['pl', 'en', 'de', 'fr', 'it', 'he', 'es', 'bg'];\n\n const searchParams = new URLSearchParams(window.location.search);\n const getLangParam = searchParams.get('lang');\n\n if (availableLanguages.includes(getLangParam)) {\n return translations[getLangParam];\n }\n return translations[browserLang] || translations.en;\n};\n","var pug = require(\"!../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"scene-menu scene-menu--desktop\\\"\\u003E\\u003Cul class=\\\"animation-swipe-down sub-menu--wrapper\\\"\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"scene-menu__button\\\"\\u003E\\u003Cdiv class=\\\"scene-menu__button--stripes\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"menu-button scene-menu__vr-mode-button\\\" data-el=\\\"vr-mode-button\\\"\\u003E\\u003Cdiv class=\\\"menu-button--icon scene-menu__vr-mode-button--icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"menu-button scene-menu__share-button\\\" data-el=\\\"share-button\\\"\\u003E\\u003Cdiv class=\\\"menu-button--icon scene-menu__share-button--icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"menu-button scene-menu__rate-apartment-button\\\" data-el=\\\"rate-apartment-button\\\"\\u003E\\u003Cdiv class=\\\"menu-button--icon scene-menu__rate-apartment-button--icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"menu-button scene-menu__gyroscope-button\\\" data-el=\\\"gyroscope-button\\\"\\u003E\\u003Cdiv class=\\\"menu-button--icon scene-menu__gyroscope-button--icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"menu-button scene-menu__fullscreen-button\\\" data-el=\\\"fullscreen\\\"\\u003E\\u003Cdiv class=\\\"menu-button--icon scene-menu__fullscreen-button--icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"menu-button scene-menu__auto-rotate-button\\\" data-el=\\\"auto-rotate\\\"\\u003E\\u003Cdiv class=\\\"menu-button--icon scene-menu__auto-rotate-button--icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"menu-button scene-menu__screenshot-button\\\" data-el=\\\"screenshot\\\"\\u003E\\u003Cdiv class=\\\"menu-button--icon scene-menu__screenshot-button--icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"menu-button scene-menu__multi-style-button pulse-animation\\\" data-el=\\\"multi-style-button\\\"\\u003E\\u003Cdiv class=\\\"menu-button--icon scene-menu__multi-style-button--icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"menu-button scene-menu__dollhouse-button\\\" data-el=\\\"dollhouse\\\"\\u003E\\u003Cdiv class=\\\"menu-button--icon scene-menu__dollhouse-button--icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"menu-button scene-menu__map-button\\\" data-el=\\\"map-button\\\"\\u003E\\u003Cdiv class=\\\"menu-button--icon scene-menu__map-button--icon\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;\n var locals_for_with = (locals || {});\n \n (function (share) {\n pug_html = pug_html + \"\\u003Cli class=\\\"scene-menu--item scene-menu--item__share\\\" data-el=\\\"share\\\"\\u003E\\u003Cdiv class=\\\"item__image\\\"\\u003E\\u003Cdiv class=\\\"image image__share\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"item__text\\\"\\u003E\" + (pug.escape(null == (pug_interp = share) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\";\n }.call(this, \"share\" in locals_for_with ?\n locals_for_with.share :\n typeof share !== 'undefined' ? share : undefined));\n ;;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;\n var locals_for_with = (locals || {});\n \n (function (vr_mode) {\n pug_html = pug_html + \"\\u003Cli class=\\\"scene-menu--item scene-menu--item__vr-mode\\\" data-el=\\\"vr-mode\\\"\\u003E\\u003Cdiv class=\\\"item__image\\\"\\u003E\\u003Cdiv class=\\\"image image__vr-mode\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"item__text\\\"\\u003E\" + (pug.escape(null == (pug_interp = vr_mode) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\";\n }.call(this, \"vr_mode\" in locals_for_with ?\n locals_for_with.vr_mode :\n typeof vr_mode !== 'undefined' ? vr_mode : undefined));\n ;;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;\n var locals_for_with = (locals || {});\n \n (function (gyroscope) {\n pug_html = pug_html + \"\\u003Cli class=\\\"scene-menu--item scene-menu--item__gyroscope\\\" data-el=\\\"gyroscope\\\"\\u003E\\u003Cdiv class=\\\"item__image\\\"\\u003E\\u003Cdiv class=\\\"image image__gyroscope\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"item__text\\\"\\u003E\" + (pug.escape(null == (pug_interp = gyroscope) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\";\n }.call(this, \"gyroscope\" in locals_for_with ?\n locals_for_with.gyroscope :\n typeof gyroscope !== 'undefined' ? gyroscope : undefined));\n ;;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;\n var locals_for_with = (locals || {});\n \n (function (auto_rotate) {\n pug_html = pug_html + \"\\u003Cli class=\\\"scene-menu--item scene-menu--item__auto-rotate on\\\" data-el=\\\"auto-rotate\\\"\\u003E\\u003Cdiv class=\\\"item__image\\\"\\u003E\\u003Cdiv class=\\\"image image__auto-rotate\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"item__text\\\"\\u003E\" + (pug.escape(null == (pug_interp = auto_rotate) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\";\n }.call(this, \"auto_rotate\" in locals_for_with ?\n locals_for_with.auto_rotate :\n typeof auto_rotate !== 'undefined' ? auto_rotate : undefined));\n ;;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;\n var locals_for_with = (locals || {});\n \n (function (fullscreen) {\n pug_html = pug_html + \"\\u003Cli class=\\\"scene-menu--item scene-menu--item__fullscreen\\\" data-el=\\\"fullscreen\\\"\\u003E\\u003Cdiv class=\\\"item__image\\\"\\u003E\\u003Cdiv class=\\\"image image__fullscreen\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"item__text\\\"\\u003E\" + (pug.escape(null == (pug_interp = fullscreen) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\";\n }.call(this, \"fullscreen\" in locals_for_with ?\n locals_for_with.fullscreen :\n typeof fullscreen !== 'undefined' ? fullscreen : undefined));\n ;;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;\n var locals_for_with = (locals || {});\n \n (function (rate) {\n pug_html = pug_html + \"\\u003Cli class=\\\"scene-menu--item scene-menu--item__rate-apartment\\\" data-el=\\\"rate-apartment\\\"\\u003E\\u003Cdiv class=\\\"item__image\\\"\\u003E\\u003Cdiv class=\\\"image image__rate-apartment\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"item__text\\\"\\u003E\" + (pug.escape(null == (pug_interp = rate) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\";\n }.call(this, \"rate\" in locals_for_with ?\n locals_for_with.rate :\n typeof rate !== 'undefined' ? rate : undefined));\n ;;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;\n var locals_for_with = (locals || {});\n \n (function (screenshot) {\n pug_html = pug_html + \"\\u003Cli class=\\\"scene-menu--item scene-menu--item__screenshot\\\" data-el=\\\"screenshot\\\"\\u003E\\u003Cdiv class=\\\"item__image\\\"\\u003E\\u003Cdiv class=\\\"image image__screenshot\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"item__text\\\"\\u003E\" + (pug.escape(null == (pug_interp = screenshot) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\";\n }.call(this, \"screenshot\" in locals_for_with ?\n locals_for_with.screenshot :\n typeof screenshot !== 'undefined' ? screenshot : undefined));\n ;;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;\n var locals_for_with = (locals || {});\n \n (function (floor_plan) {\n pug_html = pug_html + \"\\u003Cli class=\\\"scene-menu--item scene-menu--item__floor-plan\\\" data-el=\\\"map-button\\\"\\u003E\\u003Cdiv class=\\\"item__image\\\"\\u003E\\u003Cdiv class=\\\"image image__floor-plan\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"item__text\\\"\\u003E\" + (pug.escape(null == (pug_interp = floor_plan) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\";\n }.call(this, \"floor_plan\" in locals_for_with ?\n locals_for_with.floor_plan :\n typeof floor_plan !== 'undefined' ? floor_plan : undefined));\n ;;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;\n var locals_for_with = (locals || {});\n \n (function (dollhouse) {\n pug_html = pug_html + \"\\u003Cli class=\\\"scene-menu--item scene-menu--item__dollhouse\\\" data-el=\\\"dollhouse\\\"\\u003E\\u003Cdiv class=\\\"item__image\\\"\\u003E\\u003Cdiv class=\\\"image image__dollhouse\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"item__text\\\"\\u003E\" + (pug.escape(null == (pug_interp = dollhouse) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\";\n }.call(this, \"dollhouse\" in locals_for_with ?\n locals_for_with.dollhouse :\n typeof dollhouse !== 'undefined' ? dollhouse : undefined));\n ;;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;\n var locals_for_with = (locals || {});\n \n (function (multi_styles) {\n pug_html = pug_html + \"\\u003Cli class=\\\"scene-menu--item scene-menu--item__multi-styles\\\" data-el=\\\"multi-style-button\\\"\\u003E\\u003Cdiv class=\\\"item__image\\\"\\u003E\\u003Cdiv class=\\\"image image__multi-styles\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"item__text\\\"\\u003E\" + (pug.escape(null == (pug_interp = multi_styles) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\";\n }.call(this, \"multi_styles\" in locals_for_with ?\n locals_for_with.multi_styles :\n typeof multi_styles !== 'undefined' ? multi_styles : undefined));\n ;;return pug_html;};\nmodule.exports = template;","/* global AFRAME */\nvar styleParser = AFRAME.utils.styleParser;\n\nif (typeof AFRAME === 'undefined') {\n throw new Error('Component attempted to register before AFRAME was available.');\n}\n\nAFRAME.registerComponent('event-set', {\n schema: {\n default: '',\n parse: function (value) {\n return styleParser.parse(value);\n }\n },\n\n multiple: true,\n\n init: function () {\n this.eventHandler = null;\n this.eventName = null;\n },\n\n update: function (oldData) {\n this.removeEventListener();\n this.updateEventListener();\n this.addEventListener();\n },\n\n remove: function () {\n this.removeEventListener();\n },\n\n pause: function () {\n this.removeEventListener();\n },\n\n play: function () {\n this.addEventListener();\n },\n\n /**\n * Update source-of-truth event listener registry.\n * Does not actually attach event listeners yet.\n */\n updateEventListener: function () {\n var data = this.data;\n var el = this.el;\n var event;\n var target;\n var targetEl;\n\n // Set event listener using `_event`.\n event = data._event || this.id;\n target = data._target;\n\n // Decide the target to `setAttribute` on.\n targetEl = target ? el.sceneEl.querySelector(target) : el;\n\n this.eventName = event;\n\n const handler = () => {\n var propName;\n // Set attributes.\n for (propName in data) {\n if (propName === '_event' || propName === '_target') { continue; }\n AFRAME.utils.entity.setComponentProperty.call(this, targetEl, propName,\n data[propName]);\n }\n };\n\n if (!isNaN(data._delay)) {\n // Delay.\n this.eventHandler = () => { setTimeout(handler, parseFloat(data._delay)); };\n } else {\n this.eventHandler = handler;\n }\n },\n\n addEventListener: function () {\n this.el.addEventListener(this.eventName, this.eventHandler);\n },\n\n removeEventListener: function () {\n this.el.removeEventListener(this.eventName, this.eventHandler);\n }\n});\n","/**\n * Look-at component.\n *\n * Modifies rotation to either track another entity OR do a one-time turn towards a position\n * vector.\n *\n * If tracking an object via setting the component value via a selector, look-at will register\n * a behavior to the scene to update rotation on every tick.\n */\nvar debug = AFRAME.utils.debug;\nvar coordinates = AFRAME.utils.coordinates;\nvar warn = debug('components:look-at:warn');\nvar isCoordinates = coordinates.isCoordinates || coordinates.isCoordinate;\n// delete AFRAME.components['look-at'];\nAFRAME.registerComponent('look-at', {\n schema: {\n default: '',\n\n parse: function (value) {\n // A static position to look at.\n if (isCoordinates(value) || typeof value === 'object') {\n return coordinates.parse(value);\n }\n // A selector to a target entity.\n return value;\n },\n\n stringify: function (data) {\n if (typeof data === 'object') {\n return coordinates.stringify(data);\n }\n return data;\n },\n },\n\n init: function () {\n this.target3D = null;\n this.vector = new THREE.Vector3();\n },\n\n /**\n * If tracking an object, this will be called on every tick.\n * If looking at a position vector, this will only be called once (until further updates).\n */\n update: function () {\n var self = this;\n var target = self.data;\n var object3D = self.el.object3D;\n var targetEl;\n\n // No longer looking at anything (i.e., look-at=\"\").\n if (!target || (typeof target === 'object' && !Object.keys(target).length)) {\n return self.remove();\n }\n\n // Look at a position.\n if (typeof target === 'object') {\n return object3D.lookAt(new THREE.Vector3(target.x, target.y, target.z));\n }\n\n // Assume target is a string.\n // Query for the element, grab its object3D, then register a behavior on the scene to\n // track the target on every tick.\n targetEl = self.el.sceneEl.querySelector(target);\n if (!targetEl) {\n warn('\"' + target + '\" does not point to a valid entity to look-at');\n return;\n }\n if (!targetEl.hasLoaded) {\n return targetEl.addEventListener('loaded', function () {\n self.beginTracking(targetEl);\n });\n }\n return self.beginTracking(targetEl);\n },\n\n tick: (function () {\n var vec3 = new THREE.Vector3();\n\n return function (t) {\n // Track target object position. Depends on parent object keeping global transforms up\n // to state with updateMatrixWorld(). In practice, this is handled by the renderer.\n var target3D = this.target3D;\n var object3D = this.el.object3D;\n var vector = this.vector;\n\n if (target3D) {\n object3D.parent.worldToLocal(target3D.getWorldPosition(vec3));\n if (this.el.getObject3D('camera')) {\n // Flip the vector to -z, looking away from target for camera entities. When using\n // lookat from THREE camera objects, this is applied for you, but since the camera is\n // nested into a Object3D, we need to apply this manually.\n vector.subVectors(object3D.position, vec3).add(object3D.position);\n } else {\n vector = vec3;\n }\n object3D.lookAt(vector);\n }\n };\n })(),\n\n beginTracking: function (targetEl) {\n this.target3D = targetEl.object3D;\n },\n});\n","AFRAME.registerComponent('room-status', {\n /*\n Dummy component for holding loading status of rooms.\n Using setAttribute on other component would force running its update\n function.\n */\n schema: {\n rooms: {\n parse: function (str) {\n return JSON.parse(str);\n },\n stringify: function (obj) {\n return JSON.stringify(obj);\n },\n },\n },\n});\n","AFRAME.registerComponent('hide-minimap-off-click', {\n /*\n * On mobile, component hides minimap when minimap image or blurred background is clicked.\n */\n init: function () {\n const minimap = document.querySelector('.floor-plan-container');\n this.hideMinimap = this.hideMinimap.bind(this);\n minimap.addEventListener('click', this.hideMinimap);\n },\n hideMinimap: function (e) {\n const minimapButton = document.querySelector('.scene-menu__map-button');\n const minimap = document.querySelector('.floor-plan-container');\n const minimapImage = document.querySelector('.floor-plan-image');\n const fovSlider = document.querySelector('.fov-slider-wrapper');\n const innerMaps = document.querySelectorAll('.innerMap');\n const styleSelector = document.querySelector('.style-selector-wrapper');\n const loaderStatus = this.el.sceneEl.getAttribute('loading-screen-handler').status;\n const MINIMIZE = 'minimize';\n const BLUR = 'blur';\n const HIDDEN = 'a-hidden';\n\n if (loaderStatus !== 'loader-hidden' || (e.target !== minimapImage && e.target !== minimap)) { return; }\n if (e.target.classList.contains('blur')) {\n minimap.classList.remove(BLUR);\n minimap.classList.add(MINIMIZE);\n fovSlider.classList.remove(HIDDEN);\n minimapButton.classList.toggle('on');\n if (styleSelector && !window.location.href.includes('isExterior')) {\n styleSelector.style.maxWidth = `calc(100vw - (${window.minimizeImage.maxWidth}px + 120px))`;\n if (innerWidth < 800 && styleSelector.classList.contains('active')) {\n innerMaps.forEach((map) => {\n map.style.bottom = `calc(100% - (${window.minimizeImage.maxHeight}px + 20px))`;\n });\n }\n }\n innerMaps.forEach((innerMap) => innerMap.classList.remove('transition'));\n\n if (window.location.href.includes('isExterior=')) {\n minimap.style.opacity = '0';\n setTimeout(() => {\n minimap.style.display = 'none';\n }, 300);\n }\n }\n\n if (styleSelector) {\n const onToggleMiniMapArrowSet = () => {\n const styleContainer = document.querySelector('.style-selector-container');\n const stylesAvailable = document.querySelectorAll('.style-selector-wrapper .style-item');\n const availableStylesWidth = (stylesAvailable.length * 100);\n\n if (availableStylesWidth > styleContainer.offsetWidth + 10) {\n styleSelector.classList.add('right-arrow-visible');\n } else {\n styleSelector.classList.remove('right-arrow-visible');\n }\n };\n\n onToggleMiniMapArrowSet();\n }\n },\n});\n","function e(e,t){for(var o=0;oe.length)&&(t=e.length);for(var o=0,n=new Array(t);o0&&this.registerTriggers.apply(this,t(a)),this.onClick=this.onClick.bind(this),this.onKeydown=this.onKeydown.bind(this)}var i,a,r;return i=o,(a=[{key:\"registerTriggers\",value:function(){for(var e=this,t=arguments.length,o=new Array(t),n=0;n0&&void 0!==arguments[0]?arguments[0]:null;if(this.activeElement=document.activeElement,this.modal.setAttribute(\"aria-hidden\",\"false\"),this.modal.classList.add(this.config.openClass),this.scrollBehaviour(\"disable\"),this.addEventListeners(),this.config.awaitOpenAnimation){var o=function t(){e.modal.removeEventListener(\"animationend\",t,!1),e.setFocusToFirstNode()};this.modal.addEventListener(\"animationend\",o,!1)}else this.setFocusToFirstNode();this.config.onShow(this.modal,this.activeElement,t)}},{key:\"closeModal\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=this.modal;if(this.modal.setAttribute(\"aria-hidden\",\"true\"),this.removeEventListeners(),this.scrollBehaviour(\"enable\"),this.activeElement&&this.activeElement.focus&&this.activeElement.focus(),this.config.onClose(this.modal,this.activeElement,e),this.config.awaitCloseAnimation){var o=this.config.openClass;this.modal.addEventListener(\"animationend\",(function e(){t.classList.remove(o),t.removeEventListener(\"animationend\",e,!1)}),!1)}else t.classList.remove(this.config.openClass)}},{key:\"closeModalById\",value:function(e){this.modal=document.getElementById(e),this.modal&&this.closeModal()}},{key:\"scrollBehaviour\",value:function(e){if(this.config.disableScroll){var t=document.querySelector(\"body\");switch(e){case\"enable\":Object.assign(t.style,{overflow:\"\"});break;case\"disable\":Object.assign(t.style,{overflow:\"hidden\"})}}}},{key:\"addEventListeners\",value:function(){this.modal.addEventListener(\"touchstart\",this.onClick),this.modal.addEventListener(\"click\",this.onClick),document.addEventListener(\"keydown\",this.onKeydown)}},{key:\"removeEventListeners\",value:function(){this.modal.removeEventListener(\"touchstart\",this.onClick),this.modal.removeEventListener(\"click\",this.onClick),document.removeEventListener(\"keydown\",this.onKeydown)}},{key:\"onClick\",value:function(e){(e.target.hasAttribute(this.config.closeTrigger)||e.target.parentNode.hasAttribute(this.config.closeTrigger))&&(e.preventDefault(),e.stopPropagation(),this.closeModal(e))}},{key:\"onKeydown\",value:function(e){27===e.keyCode&&this.closeModal(e),9===e.keyCode&&this.retainFocus(e)}},{key:\"getFocusableNodes\",value:function(){var e=this.modal.querySelectorAll(n);return Array.apply(void 0,t(e))}},{key:\"setFocusToFirstNode\",value:function(){var e=this;if(!this.config.disableFocus){var t=this.getFocusableNodes();if(0!==t.length){var o=t.filter((function(t){return!t.hasAttribute(e.config.closeTrigger)}));o.length>0&&o[0].focus(),0===o.length&&t[0].focus()}}}},{key:\"retainFocus\",value:function(e){var t=this.getFocusableNodes();if(0!==t.length)if(t=t.filter((function(e){return null!==e.offsetParent})),this.modal.contains(document.activeElement)){var o=t.indexOf(document.activeElement);e.shiftKey&&0===o&&(t[t.length-1].focus(),e.preventDefault()),!e.shiftKey&&t.length>0&&o===t.length-1&&(t[0].focus(),e.preventDefault())}else t[0].focus()}}])&&e(i.prototype,a),r&&e(i,r),o}(),a=null,r=function(e){if(!document.getElementById(e))return console.warn(\"MicroModal: ❗Seems like you have missed %c'\".concat(e,\"'\"),\"background-color: #f8f9fa;color: #50596c;font-weight: bold;\",\"ID somewhere in your code. Refer example below to resolve it.\"),console.warn(\"%cExample:\",\"background-color: #f8f9fa;color: #50596c;font-weight: bold;\",'
')),!1},s=function(e,t){if(function(e){e.length<=0&&(console.warn(\"MicroModal: ❗Please specify at least one %c'micromodal-trigger'\",\"background-color: #f8f9fa;color: #50596c;font-weight: bold;\",\"data attribute.\"),console.warn(\"%cExample:\",\"background-color: #f8f9fa;color: #50596c;font-weight: bold;\",''))}(e),!t)return!0;for(var o in t)r(o);return!0},{init:function(e){var o=Object.assign({},{openTrigger:\"data-micromodal-trigger\"},e),n=t(document.querySelectorAll(\"[\".concat(o.openTrigger,\"]\"))),r=function(e,t){var o=[];return e.forEach((function(e){var n=e.attributes[t].value;void 0===o[n]&&(o[n]=[]),o[n].push(e)})),o}(n,o.openTrigger);if(!0!==o.debugMode||!1!==s(n,r))for(var l in r){var c=r[l];o.targetModal=l,o.triggers=t(c),a=new i(o)}},show:function(e,t){var o=t||{};o.targetModal=e,!0===o.debugMode&&!1===r(e)||(a&&a.removeEventListeners(),(a=new i(o)).showModal())},close:function(e){e?a.closeModalById(e):a.closeModal()}});\"undefined\"!=typeof window&&(window.MicroModal=l);export default l;\n","var Detector = {\n webgl: (function () {\n try {\n const canvas = document.createElement('canvas'); return !!(window.WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')));\n } catch (e) {\n return false;\n }\n })(),\n OESTextureFloatLinearSupport: (function () {\n try {\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n return context.getSupportedExtensions().includes('OES_texture_float_linear');\n } catch (e) {\n return false;\n }\n })(),\n};\n\nexport default Detector;\n","export const localStorageAvailable = () => {\n let storageSupport = false;\n\n if (window.location.href.includes('isExterior')) {\n return false;\n }\n\n try {\n storageSupport = (window.localStorage && true);\n } catch (e) {\n storageSupport = false;\n }\n\n return storageSupport;\n};\n","import Detector from './utils/webgl-detector';\nimport { localStorageAvailable } from '../utils/localStorageAvailable';\nexport default AFRAME.registerComponent('loading-screen-handler', {\n schema: {\n maxSize: { type: 'number', default: 0.8 },\n status: { type: 'string', default: 'loading' },\n minimapLoaded: { type: 'boolean', default: false },\n },\n init: function () {\n if (!Detector.webgl) {\n alert('Twoje urządzenie lub przeglądarka nie wspiera WebGL.');\n }\n },\n update: function () {\n const data = this.data;\n if (data.status === 'minimum-loaded' && Detector.webgl && data.minimapLoaded) {\n setTimeout(() => this.hideLoader(), 1000);\n } else if (data.status === 'error') {\n console.warn('Coś poszło nie tak. Sprawdź swoje połączenie internetowe i spróbuj ponownie.');\n }\n },\n hideLoader: function () {\n const el = this.el;\n const data = this.data;\n const loader = document.querySelector('.loader-wrapper');\n const loaderAnimation = document.querySelector('.loader-animation-wrapper');\n const pageVisited = localStorageAvailable() && JSON.parse(localStorage.getItem('visited'));\n const timeSetTimeout = !pageVisited ? 2000 : 800;\n\n loaderAnimation.style.display = 'none';\n loader.style.opacity = '0';\n loader.style.transitionDuration = `${timeSetTimeout}ms`;\n el.emit('loader-hiding');\n setTimeout(() => {\n loader.style.display = 'none';\n data.status = 'loader-hidden';\n el.emit('loader-hidden');\n }, timeSetTimeout);\n },\n});\n","import { localStorageAvailable } from '../utils/localStorageAvailable';\n\nexport default AFRAME.registerComponent('guide', {\n schema: {\n guideAlwaysDisplay: { default: true },\n },\n\n init: function () {\n const el = this.el;\n const sceneEl = el.sceneEl;\n let pageVisited;\n\n if (localStorageAvailable()) {\n pageVisited = JSON.parse(localStorage.getItem('visited'));\n this.setGuideVisibilityOncePerDomain();\n this.setDecoroomGuideOncePerDomain();\n } else {\n pageVisited = false;\n }\n\n this.filterMainContent();\n\n if (pageVisited) {\n this.hideGuide();\n setTimeout(() => {\n document.body.classList.add('guide-hidden');\n }, 2000);\n } else {\n sceneEl.addEventListener('loader-hiding', () => this.showGuide());\n }\n },\n showGuide: function () {\n const isMobile = AFRAME.utils.device.isMobile();\n const event = isMobile ? 'touchstart' : 'click';\n const guideMainWrapper = document.querySelector('.guide');\n if (guideMainWrapper) {\n guideMainWrapper.classList.remove('a-hidden');\n }\n const delayGuideShow = setTimeout(() => {\n guideMainWrapper.style.opacity = '1';\n clearTimeout(delayGuideShow);\n }, 200);\n\n guideMainWrapper.addEventListener(event, () => {\n this.hideGuide();\n document.body.classList.add('guide-hidden');\n });\n },\n hideGuide: function () {\n const el = this.el;\n const guideMainWrapper = document.querySelector('.guide');\n const guideMain = document.querySelector('.guide-main');\n const guideDecoroomContainer = document.querySelector('.guide-decoroom-container');\n\n guideMain.style.opacity = '0';\n if (guideDecoroomContainer) guideDecoroomContainer.classList.add('opacity-0');\n\n setTimeout(() => {\n guideMainWrapper.classList.add('a-hidden');\n guideMain.style.display = 'none';\n el.emit('guide-hidden');\n if (guideDecoroomContainer) guideDecoroomContainer.classList.remove('a-hidden');\n }, 660);\n },\n filterMainContent: function () {\n const isMobile = AFRAME.utils.device.isMobile();\n const isNewIpadOs = /Macintosh/.test(navigator.userAgent) && 'ontouchend' in document;\n const selector = (isMobile || isNewIpadOs) ? '.guide-main-desktop' : '.guide-main-mobile';\n const elementsToHide = document.querySelectorAll(selector);\n elementsToHide.forEach(el => {\n el.style.display = 'none';\n });\n },\n setGuideVisibilityOncePerDomain: function () {\n const { guideAlwaysDisplay } = this.data;\n\n if (!guideAlwaysDisplay) {\n localStorage.setItem('visited', 'true');\n } else {\n localStorage.setItem('visited', 'false');\n }\n },\n setDecoroomGuideOncePerDomain: function () {\n const { guideAlwaysDisplay } = this.data;\n const guideDecoroomContainer = document.querySelector('.guide-decoroom-container');\n\n if (!guideAlwaysDisplay && guideDecoroomContainer) {\n localStorage.setItem('seenDecoroomStyle', 'true');\n } else {\n localStorage.setItem('seenDecoroomStyle', 'false');\n }\n },\n});\n","const isMobile = AFRAME.utils.device.isMobile;\n\nexport const isIPad = () => {\n return /ipad/i.test(window.navigator.userAgent);\n};\n\nexport const isIpadNewOs = () => {\n return /Macintosh/.test(navigator.userAgent) && 'ontouchend' in document;\n};\n\nexport const isDesktop = () => !AFRAME.utils.device.isMobile() && !AFRAME.utils.device.checkHeadsetConnected();\n\n/**\n * Check for a stand-alone vr device\n */\nexport const isMobileVR = () => {\n return AFRAME.utils.device.isMobileVR();\n};\n\nexport const isValidForCardboard = () => {\n return isMobile() && !isIPad();\n};\n\nexport const isVRCompatible = () => {\n return isValidForCardboard() || isMobileVR();\n};\n\nexport const isGyroscopeSupported = () => new Promise((resolve, reject) => {\n const isMobile = AFRAME.utils.device.isMobile();\n const isHeadset = isMobileVR();\n let listenerDetached = false;\n\n /**\n * Oculus Go has a gyroscope, but does not emit devicemotion events.\n */\n if (isHeadset) {\n resolve();\n\n return;\n }\n\n function checkGyroscope (event) {\n this.removeEventListener('devicemotion', checkGyroscope, true);\n listenerDetached = true;\n\n if (!isMobile ||\n !event.rotationRate ||\n typeof event.rotationRate.alpha !== 'number' ||\n typeof event.rotationRate.beta !== 'number' ||\n typeof event.rotationRate.gamma !== 'number'\n ) {\n reject(new Error('Gyroscope is not supported'));\n\n return;\n }\n\n resolve();\n }\n\n window.addEventListener('devicemotion', checkGyroscope, true);\n\n setTimeout(() => {\n if (!listenerDetached) {\n window.removeEventListener('devicemotion', checkGyroscope, true);\n reject(new Error('Gyroscope is not supported'));\n }\n }, 1000);\n});\n","import { isVRCompatible } from './utils/device';\n\nexport default AFRAME.registerComponent('fuse-cursor-loader-animation', {\n init: function () {\n if (!isVRCompatible()) return;\n const el = this.el;\n el.addEventListener('mouseenter', this.showLoading);\n el.addEventListener('mouseleave', this.hideLoading);\n },\n showLoading: function () {\n const loaderRings = document.querySelectorAll('.loader-ring');\n const cursor = document.getElementById('cursor');\n cursor.setAttribute('rotation', '0 0 0');\n cursor.setAttribute('animation', 'property: rotation; to: 0 0 360; loop: true; dur: 3500; easing: linear');\n loaderRings.forEach(ring => ring.setAttribute('visible', true));\n },\n hideLoading: function () {\n const cursor = document.getElementById('cursor');\n cursor.removeAttribute('animation');\n const loaderRings = document.querySelectorAll('.loader-ring');\n loaderRings.forEach(ring => ring.setAttribute('visible', false));\n },\n});\n","import { isGyroscopeSupported } from '../utils/device';\n\nvar utils = AFRAME.utils;\nvar bind = utils.bind;\n\nvar HIDDEN_CLASS = 'a-hidden';\nvar ORIENTATION_MODAL_CLASS = 'a-orientation-modal';\n\nexport default AFRAME.registerComponent('custom-vr-mode-ui', {\n dependencies: ['canvas'],\n\n schema: {\n enabled: { default: true },\n },\n init: function () {\n var self = this;\n var sceneEl = this.el;\n\n if (utils.getUrlParameter('ui') === 'false') {\n return;\n }\n\n this.insideLoader = false;\n this.enterVREl = null;\n this.orientationModalEl = null;\n this.bindMethods();\n\n // Hide/show VR UI when entering/exiting VR mode.\n sceneEl.addEventListener('enter-vr', this.updateEnterVRInterface);\n sceneEl.addEventListener('exit-vr', this.updateEnterVRInterface);\n\n window.addEventListener('message', function (event) {\n if (event.data.type === 'loaderReady') {\n self.insideLoader = true;\n self.remove();\n }\n });\n\n // Modal that tells the user to change orientation if in portrait.\n window.addEventListener('orientationchange', this.toggleOrientationModalIfNeeded);\n },\n\n bindMethods: function () {\n this.onEnterVRButtonClick = bind(this.onEnterVRButtonClick, this);\n this.onModalClick = bind(this.onModalClick, this);\n this.toggleOrientationModalIfNeeded = bind(this.toggleOrientationModalIfNeeded, this);\n this.updateEnterVRInterface = bind(this.updateEnterVRInterface, this);\n },\n\n /**\n * Exit VR when modal clicked.\n */\n onModalClick: function () {\n this.el.exitVR();\n },\n\n /**\n * Enter VR when modal clicked.\n */\n onEnterVRButtonClick: function () {\n this.el.enterVR();\n },\n\n update: function () {\n var sceneEl = this.el;\n\n if (!this.data.enabled || this.insideLoader || utils.getUrlParameter('ui') === 'false') {\n return this.remove();\n }\n if (this.enterVREl || this.orientationModalEl) {\n return;\n }\n\n // Add UI if enabled and not already present.\n this.enterVREl = createEnterVRButton(this.onEnterVRButtonClick);\n this.orientationModalEl = createOrientationModal(this.onModalClick);\n sceneEl.appendChild(this.orientationModalEl);\n\n this.updateEnterVRInterface();\n },\n\n remove: function () {\n [this.enterVREl, this.orientationModalEl].forEach(function (uiElement) {\n if (uiElement) {\n uiElement.parentNode.removeChild(uiElement);\n }\n });\n },\n\n updateEnterVRInterface: function () {\n this.toggleEnterVRButtonIfNeeded();\n this.toggleOrientationModalIfNeeded();\n },\n\n toggleEnterVRButtonIfNeeded: function () {\n const sceneEl = this.el;\n\n const menuBottom = document.querySelector('.scene-menu__bottom');\n const menuTop = document.querySelector('.scene-menu__top');\n if (sceneEl.is('vr-mode')) {\n menuBottom.classList.add(HIDDEN_CLASS);\n menuTop.classList.add(HIDDEN_CLASS);\n } else {\n menuBottom.classList.remove(HIDDEN_CLASS);\n menuTop.classList.remove(HIDDEN_CLASS);\n }\n },\n\n toggleOrientationModalIfNeeded: function () {\n var sceneEl = this.el;\n var orientationModalEl = this.orientationModalEl;\n if (!orientationModalEl || !sceneEl.isMobile) {\n return;\n }\n if (!utils.device.isLandscape() && sceneEl.is('vr-mode')) {\n // Show if in VR mode on portrait.\n orientationModalEl.classList.remove(HIDDEN_CLASS);\n } else {\n orientationModalEl.classList.add(HIDDEN_CLASS);\n }\n },\n});\n\n/**\n * Create a button that when clicked will enter into stereo-rendering mode for VR.\n *\n * Structure:
\n *\n * @param {function} onClick - click event handler\n * @returns {Element} Wrapper
.\n */\n\nfunction createEnterVRButton (onClick) {\n isGyroscopeSupported()\n .then(() => {\n var vrMenuButton = document.querySelector('.scene-menu__vr-mode-button');\n var vrSubMenuButton = document.querySelector('.scene-menu--item__vr-mode');\n var vrButton = !vrMenuButton ? vrSubMenuButton : vrMenuButton;\n\n if (vrButton == null) {\n return;\n }\n\n vrButton.addEventListener('click', function () {\n onClick();\n });\n\n return vrButton;\n })\n .catch(console.error);\n}\n\n/**\n * Creates a modal dialog to request the user to switch to landscape orientation.\n *\n * @param {function} onClick - click event handler\n * @returns {Element} Wrapper
.\n */\nfunction createOrientationModal (onClick) {\n var modal = document.createElement('div');\n modal.className = ORIENTATION_MODAL_CLASS;\n modal.classList.add(HIDDEN_CLASS);\n modal.setAttribute('aframe-injected', '');\n\n var exit = document.createElement('button');\n exit.setAttribute('aframe-injected', '');\n exit.innerHTML = 'Exit VR';\n\n // Exit VR on close.\n exit.addEventListener('click', onClick);\n\n modal.appendChild(exit);\n\n return modal;\n}\n","export default AFRAME.registerComponent('chrome-drag-fix', {\n init: function () {\n if (window.kioskMode) {\n return;\n }\n\n const canvas = document.querySelector('.a-canvas');\n canvas.addEventListener('mousedown', (e) => e.preventDefault());\n },\n});\n","import { getTranslation } from '../services/translations/getTranslations';\n\nlet timeout = null;\n\nexport default AFRAME.registerComponent('shopping-list', {\n init: function () {\n const shoppingListCloseButton = document.querySelector('.shopping-list-container__close-button');\n const shoppingListContainer = document.querySelector('.shopping-list-container');\n const leftBottomInterface = document.querySelector('.scene-menu__bottom');\n const productsSelect = document.querySelector('.products-select-button');\n const productsSelectText = document.querySelector('.products-select-button-text');\n const productsDropDown = document.querySelector('.products-drop-down');\n const productShowMore = document.querySelector('.product-container__product-info-show-more');\n const styleSelectorControllerWrapper = document.querySelector('.style-selector-controlLer-wrapper');\n const styleSelectorWrapper = document.querySelector('.style-selector-wrapper');\n const stylesAvailable = document.querySelectorAll('.style-selector-wrapper .style-item');\n const styleContainer = document.querySelector('.style-selector-container');\n const productsSummaryPrice = document.querySelector('.products-price-summary__price');\n const productsDownloadListButton = document.querySelector('.products-generate-pdf-button');\n\n if (!shoppingListContainer) return;\n\n const initialStyle = window.currentStyle.name;\n fetchAllProductsData(initialStyle);\n\n const addFunctionality = () => {\n const productsOptions = document.querySelector('.products-drop-down').children;\n\n if (productsOptions.length === 0) return;\n Array.from(productsOptions).forEach((option) => {\n option.removeEventListener('click', chooseOption);\n option.addEventListener('click', chooseOption);\n });\n };\n\n const chooseOption = (e) => {\n if (productsSelectText.innerText === e.target.dataset.name) return showOptions();\n const productsPriceSummary = document.querySelector('.products-price-summary');\n\n if (e.target.dataset.price <= 0 || !e.target.dataset.price) {\n productsPriceSummary.style.display = 'none';\n } else {\n productsSummaryPrice.innerText = `${e.target.dataset.price} zł`;\n productsPriceSummary.style.display = null;\n }\n\n ga('app3dEstate.send', {\n hitType: 'event',\n eventCategory: 'Shopping List',\n eventAction: 'click',\n eventLabel: `Selected from list: ${e.target.dataset.name}`,\n });\n\n productsSelectText.innerText = e.target.dataset.name;\n renderProducts(e.target.dataset.type, e.target.dataset.name);\n showOptions();\n };\n\n const showOptions = () => {\n if (productsDropDown?.children?.length <= 0) return;\n productsDropDown.classList.toggle('active');\n\n ga('app3dEstate.send', {\n hitType: 'event',\n eventCategory: 'Shopping List',\n eventAction: 'click',\n eventLabel: 'Show available rooms with other products',\n });\n\n if (productsDropDown.classList.contains('active')) {\n const dropDownItems = Array.from(productsDropDown.children);\n\n dropDownItems.forEach((item) => {\n if (item.dataset.name === productsSelectText.innerText) {\n item.classList.add('matched');\n } else {\n item.classList.remove('matched');\n }\n });\n }\n\n addFunctionality();\n };\n\n const hideShoppingList = () => {\n shoppingListContainer.classList.remove('active');\n shoppingListContainer.setAttribute('data-product-id', '');\n leftBottomInterface.style.left = '10px';\n\n const productsDropDown = document.querySelector('.products-drop-down');\n productsDropDown.classList.remove('active');\n\n if (styleContainer) {\n styleSelectorControllerWrapper.style.left = '80px';\n styleSelectorWrapper.classList.remove('product-list-opened');\n\n if (window.innerWidth > 800) {\n styleSelectorWrapper.style.maxWidth = styleSelectorWrapper.dataset.maxWidth;\n }\n }\n\n const onToggleStyleArrowSet = () => {\n if (!styleContainer) return;\n const availableStylesWidth = (stylesAvailable.length * 100);\n\n if (availableStylesWidth > styleContainer.offsetWidth + 10) {\n styleSelectorWrapper.classList.add('right-arrow-visible');\n } else {\n setTimeout(() => {\n styleSelectorWrapper.classList.remove('right-arrow-visible');\n }, 100);\n }\n };\n\n onToggleStyleArrowSet();\n };\n\n const scrollToList = () => {\n if (!window?.tourProductsData?.all) return;\n if (productsSelectText.innerText !== `Wszystkie (${window.tourProductsData.all.length})`) {\n productsSelectText.innerText = `Wszystkie (${window.tourProductsData.all.length})`;\n renderProducts('all');\n }\n\n const currentElementPosition = document.querySelector('.products-list');\n const shoppingListHeight = document.querySelector('.shopping-list-container.active');\n const shoppingListContainer = document.querySelector('.shopping-list-container__single-product');\n const shoppingPos = shoppingListHeight.getBoundingClientRect();\n const currentElementPos = currentElementPosition.getBoundingClientRect();\n const selectOffset = 90;\n\n if (shoppingPos.height < (currentElementPos.height + 100)) {\n shoppingListContainer.scrollTo({\n top: currentElementPos.top - selectOffset,\n behavior: 'smooth',\n });\n }\n };\n\n productsDownloadListButton.addEventListener('click', getProductsPdf);\n shoppingListCloseButton.addEventListener('click', hideShoppingList);\n productsSelect.addEventListener(('click'), showOptions);\n productShowMore.addEventListener('click', scrollToList);\n },\n});\n\nexport const fetchPdfLoader = (flag) => {\n const productsDownloadListButtonSpinner = document.querySelector('.products-generate-pdf-button__spinner .spinner');\n const productsDownloadListButtonText = document.querySelector('.products-generate-pdf-button__text');\n const generateButton = document.querySelector('.products-generate-pdf-button');\n const downloadButton = document.querySelector('.products-download-pdf-button');\n const translations = getTranslation();\n\n if (flag) {\n productsDownloadListButtonSpinner.classList.remove('hide');\n productsDownloadListButtonText.innerText = translations.shoppingList.generatingList;\n generateButton.classList.add('loading');\n return;\n }\n productsDownloadListButtonSpinner.classList.add('hide');\n productsDownloadListButtonText.innerText = 'Pobierz listę produktów (PDF) ';\n generateButton.classList.add('hide');\n generateButton.classList.remove('loading');\n downloadButton.classList.add('show');\n};\n\nexport const getProductsPdf = async () => {\n let setApi = 'https://api.3destate.pl';\n const tagsTest2 = 'lista-zakupowa2/1';\n const localhostTesting = 'https://api-staging.3destate.pl/api';\n const localhostProduction = 'https://api.3destate.pl/api';\n\n ga('app3dEstate.send', {\n hitType: 'event',\n eventCategory: 'Shopping List',\n eventAction: 'click',\n eventLabel: `Download PDF with shopping list from ${window.location.href}`,\n });\n\n fetchPdfLoader(true);\n const downloadButton = document.querySelector('.products-download-pdf-button');\n if (window.location.href.includes('0.0.0.0') ||\n window.location.href.includes('192.168.0.164')) {\n setApi = localhostTesting;\n\n return fetch(`${setApi}/Tours/${tagsTest2}/products/export`)\n .then(async (res) => {\n const data = await res.json();\n fetchPdfLoader(false);\n downloadButton.href = data.fileUrl;\n })\n .catch((error) => {\n console.error(error);\n fetchPdfLoader(false);\n });\n } else {\n setApi = localhostProduction;\n if (window.location.href.includes('tours-staging')) {\n setApi = localhostTesting;\n }\n }\n\n const currentUrlSplit = window.location.pathname.split('/').filter(Boolean);\n const group = currentUrlSplit[0];\n const identifier = currentUrlSplit[1];\n const extension = identifier.split('.').pop();\n\n if (extension === '3d' || extension === identifier) {\n const identifierWithoutExtension = identifier.substr(0, identifier.length - 3);\n\n await fetch(`${setApi}/Tours/${group}/${identifierWithoutExtension}/products/export`)\n .then(async (res) => {\n const data = await res.json();\n fetchPdfLoader(false);\n downloadButton.href = data.fileUrl;\n })\n .catch((error) => {\n console.error(error);\n fetchPdfLoader(false);\n });\n }\n};\n\nexport const fetchProductData = async (productId, productRequest = false, currentStyle) => {\n let setApi = 'https://api.3destate.pl';\n const localhostTesting = 'https://api-staging.3destate.pl/api/Products/';\n const localhostProduction = 'https://api.3destate.pl/api/Products/';\n if (window.location.href.includes('0.0.0.0') ||\n window.location.href.includes('192.168.0.164') ||\n window.location.href.includes('tours-staging')) {\n setApi = localhostTesting;\n } else {\n setApi = localhostProduction;\n }\n\n const shoppingListContainerLoader = document.querySelector('.shopping-list-container .loader');\n const shoppingListContainer = document.querySelector('.shopping-list-container');\n const shoppingSingleProductContainer = document.querySelector('.shopping-list-container__single-product');\n const shoppingListHeadTitle = document.querySelector('.shopping-list-container__single-product .product-container__product-info-title');\n const shoppingListHeadCategory = document.querySelector('.shopping-list-container__single-product .product-container__product-info-category');\n const shoppingListHeadPriceSpan = document.querySelector('.product-container__product-info-price__quantity-type');\n const shoppingListHeadPrice = document.querySelector('.shopping-list-container__single-product .product-container__product-info-price--text');\n const shoppingListHeadImage = document.querySelector('.shopping-list-container__single-product .product-container__product-image img');\n const shoppingListBodyDesignerLogoWrapper = document.querySelector('.shopping-list-container__single-product .shopping-list-container__body .supplier-logo');\n const shoppingListBodyDesignerLogo = document.querySelector('.shopping-list-container__single-product .shopping-list-container__body .supplier-logo img');\n const shoppingListBodyProductDescription = document.querySelector('.shopping-list-container__single-product .shopping-list-container__body .product-info--text');\n const id = productRequest ? productId : shoppingListContainer.dataset.productId;\n const style = window.currentStyle.name;\n const lang = getTranslation().language;\n\n const loadingEffect = (loader) => {\n const currentProduct = document.querySelector('.shopping-list-container__header');\n const currentLogo = document.querySelector('.supplier-logo');\n const currentDescription = document.querySelector('.product-info');\n\n if (loader) {\n currentProduct.classList.add('loading');\n currentLogo.classList.add('loading');\n currentDescription.classList.add('loading');\n } else {\n currentProduct.classList.remove('loading');\n currentLogo.classList.remove('loading');\n currentDescription.classList.remove('loading');\n }\n };\n\n if (shoppingSingleProductContainer.dataset.productId === productId && currentStyle === style) {\n shoppingSingleProductContainer.classList.remove('hide');\n return shoppingListContainerLoader.classList.add('hide');\n }\n shoppingSingleProductContainer.setAttribute('data-product-id', productId);\n\n const printFetchedData = (data) => {\n shoppingListContainerLoader.classList.add('hide');\n shoppingSingleProductContainer.classList.remove('hide');\n\n shoppingListHeadImage.src = `${data.thumbnailUrl}__220x220.png`;\n\n const dataDescriptionLength = data.description?.length;\n\n if (dataDescriptionLength > 120) {\n shoppingListBodyProductDescription.classList.add('interaction');\n if (shoppingListBodyProductDescription.classList.contains('show')) {\n shoppingListBodyProductDescription.classList.remove('show');\n }\n\n if (!shoppingListBodyProductDescription.dataset.listener) {\n shoppingListBodyProductDescription.setAttribute('data-listener', true);\n shoppingListBodyProductDescription.addEventListener(('click'), (e) => {\n e.target.classList.toggle('show');\n });\n }\n } else {\n shoppingListBodyProductDescription.classList.remove('interaction');\n }\n\n shoppingListBodyDesignerLogoWrapper.href = data.supplier?.redirectUrl || null;\n\n if (data.supplier?.redirectUrl) {\n shoppingListBodyDesignerLogoWrapper.addEventListener('click', () => {\n ga('app3dEstate.send', {\n hitType: 'event',\n eventCategory: 'Shopping List',\n eventAction: 'click',\n eventLabel: `Opened supplier (${data?.supplier?.name}) page - ${data.supplier?.redirectUrl}`,\n });\n });\n }\n\n if (data.supplier?.logoBackground) {\n shoppingListBodyDesignerLogoWrapper.classList.add('dark-bg');\n } else {\n shoppingListBodyDesignerLogoWrapper.classList.remove('dark-bg');\n }\n\n ga('app3dEstate.send', {\n hitType: 'event',\n eventCategory: 'Shopping List',\n eventAction: 'click',\n eventLabel: `Clicked product for more details: ${data.category} / ${data.displayName}`,\n });\n\n shoppingListHeadImage.onload = () => {\n shoppingListHeadTitle.innerText = data.displayName || 'Brak nazwy';\n shoppingListHeadCategory.innerText = data.category || 'Brak kategorii';\n shoppingListHeadPrice.innerText = data.price ? `${data.price} zł/` : '';\n shoppingListHeadPriceSpan.innerHTML = data.price ? (data.unit === 'SquareMeter' ? 'm2' : 'szt') : '';\n shoppingListBodyDesignerLogo.src = data.supplier?.logoUrl || 'Brak obrazka';\n shoppingListBodyDesignerLogo.alt = data.supplier?.name || 'Brak obrazka';\n shoppingListBodyProductDescription.innerText = data.description || 'Brak opisu';\n loadingEffect(false);\n };\n\n shoppingListHeadImage.onerror = () => {\n shoppingListHeadImage.alt = 'Brak obrazka';\n shoppingListHeadTitle.innerText = data.displayName || 'Brak nazwy';\n shoppingListHeadCategory.innerText = data.category || 'Brak kategorii';\n shoppingListHeadPrice.innerText = data.price ? `${data.price} zł/` : '';\n shoppingListHeadPriceSpan.innerHTML = data.price ? (data.unit === 'SquareMeter' ? 'm2' : 'szt') : '';\n shoppingListBodyDesignerLogo.src = data.supplier?.logoUrl || 'Brak obrazka';\n shoppingListBodyDesignerLogo.alt = data.supplier?.name || 'Brak obrazka';\n shoppingListBodyProductDescription.innerText = data.description || 'Brak opisu';\n loadingEffect(false);\n };\n };\n\n if (timeout) window.clearTimeout(timeout);\n\n loadingEffect(true);\n\n fetch(`${setApi}${id}${currentStyle ? `?style=${currentStyle}` : ''}`, {\n headers: {\n 'Accept-Language': lang,\n },\n })\n .then(async (response) => {\n const data = await response.json();\n\n timeout = window.setTimeout(() => {\n printFetchedData(data);\n }, 100);\n })\n .catch((err) => {\n timeout = window.setTimeout(() => {\n shoppingListContainerLoader.classList.add('hide');\n shoppingSingleProductContainer.classList.remove('hide');\n loadingEffect(false);\n }, 100);\n console.error(err);\n });\n};\n\nexport const renderProducts = (type, productName) => {\n const productsList = document.querySelector('.products-list');\n const productsContainer = document.querySelectorAll('.products-list .product-container');\n const translations = getTranslation();\n let products = [];\n\n if (productsContainer?.length > 0) {\n productsContainer.forEach((child) => productsList.removeChild(child));\n }\n\n if (type === 'rooms') {\n products = window.tourProductsData[type].find((room) => room.displayName === productName).products || [];\n } else {\n products = window.tourProductsData[type];\n }\n\n products.forEach((product) => {\n const productContainer = document.createElement('div');\n productContainer.classList.add('product-container');\n\n const productImage = document.createElement('div');\n productImage.classList.add('product-container__product-image');\n const image = document.createElement('img');\n image.src = `${product.thumbnailUrl}__220x220.png`;\n image.alt = product.displayName;\n\n const productInfo = document.createElement('div');\n productInfo.classList.add('product-container__product-info');\n\n const productInfoTitle = document.createElement('div');\n productInfoTitle.classList.add('product-container__product-info-title');\n productInfoTitle.innerText = product.name;\n\n const productInfoCategory = document.createElement('div');\n productInfoCategory.classList.add('product-container__product-info-category');\n productInfoCategory.innerText = product.category;\n\n const productInfoPrice = document.createElement('div');\n productInfoPrice.classList.add('product-container__product-info-price');\n productInfoPrice.innerText = product.price ? `${product.price} zł/` : '';\n const productInfoPriceQtyType = document.createElement('span');\n productInfoPriceQtyType.classList.add('product-container__product-info-price__quantity-type');\n productInfoPriceQtyType.innerHTML = product.price ? (product.unitType === 'Piece' ? 'szt' : 'm2') : '';\n const productInfoPriceQty = document.createElement('span');\n productInfoPriceQty.classList.add('product-container__product-info-price__quantity');\n productInfoPriceQty.innerText = (product.quantity && product.price) ? `x${product.quantity}` : '';\n\n const productShowMore = document.createElement('div');\n productShowMore.classList.add('product-container__product-info-show-more');\n const productShowMoreIcon = document.createElement('div');\n productShowMoreIcon.classList.add('product-container__product-info-show-more__icon');\n const productShowMoreText = document.createElement('div');\n productShowMoreText.classList.add('product-container__product-info-show-more__text');\n productShowMoreText.innerText = translations.shoppingList.more;\n const svgIcon = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgIcon.setAttribute('width', '16');\n svgIcon.setAttribute('height', '12');\n svgIcon.setAttribute('viewBox', '0 0 16 12');\n svgIcon.setAttribute('fill', 'none');\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n path.setAttribute('d', 'M10.1 11.3L9.40001 10.6L13.475 6.50001H0.600006V5.50001H13.475L9.40001 1.40001L10.1 0.700012L15.4 6.00001L10.1 11.3Z');\n path.setAttribute('fill', '#34A2AF');\n\n const updateCurrentProduct = () => {\n const shoppingListContainer = document.querySelector('.shopping-list-container__single-product');\n const currentStyle = window.currentStyle.name;\n fetchProductData(product.id, true, currentStyle);\n\n shoppingListContainer.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n };\n\n productShowMore.addEventListener('click', updateCurrentProduct);\n\n svgIcon.appendChild(path);\n productShowMoreIcon.appendChild(svgIcon);\n productShowMore.appendChild(productShowMoreIcon);\n productShowMore.appendChild(productShowMoreText);\n\n productInfoPrice.appendChild(productInfoPriceQtyType);\n productInfoPrice.appendChild(productInfoPriceQty);\n\n productInfo.appendChild(productInfoTitle);\n productInfo.appendChild(productInfoCategory);\n productInfo.appendChild(productInfoPrice);\n productInfo.appendChild(productShowMore);\n\n productImage.appendChild(image);\n productContainer.appendChild(productImage);\n productContainer.appendChild(productInfo);\n\n productsList.appendChild(productContainer);\n });\n};\n\nexport const fetchAllProductsData = async (style) => {\n const setApi = 'https://api.3destate.pl';\n const localhostTesting = 'https://api-staging.3destate.pl/api/Tours/Process/4adbcc62-83c6-4764-9c57-f7876256bd6f/products';\n const productsDropDown = document.querySelector('.products-drop-down');\n const productsSelectText = document.querySelector('.products-select-button-text');\n const productsSummaryPrice = document.querySelector('.products-price-summary__price');\n const lang = getTranslation().language;\n const translations = getTranslation();\n\n const printProducts = (tourProducts) => {\n const getAllProducts = () => {\n const products = [];\n\n tourProducts.forEach((floor) => {\n floor.rooms.forEach((room) => {\n room.products.forEach((product) => {\n const duplicate = products.find((prod) => prod.id === product.id);\n if (duplicate) {\n products.forEach((pd) => {\n if (pd.id === product.id) {\n pd.quantity = pd.quantity + product.quantity;\n }\n });\n } else {\n products.push(product);\n }\n });\n });\n });\n\n return products;\n };\n\n const getRoomProducts = () => {\n const roomsProduct = [];\n\n tourProducts.forEach((floor) => {\n floor.rooms.forEach((room) => {\n let allProductsPrice = 0;\n const displayName = `P${floor.storeyNumber}: ${room.roomNumber}. ${room.displayName || room.roomType || 'Brak nazwy'} (${room.products.length})`;\n room.products.forEach((product) => (allProductsPrice += (product.price * (product.quantity || 1))));\n\n roomsProduct.push({\n displayName,\n products: room.products,\n allProductsPrice: allProductsPrice.toFixed(2),\n });\n });\n });\n\n return roomsProduct;\n };\n\n const getWholePrice = (allProducts) => {\n let price = 0;\n\n if (allProducts.length > 0) {\n allProducts.forEach((product) => (price += (product.price * (product.quantity))));\n }\n\n return price;\n };\n\n window.tourProductsData = {\n all: getAllProducts(),\n allPrice: getWholePrice(getAllProducts()),\n rooms: getRoomProducts(),\n };\n\n if (window?.tourProductsData?.allPrice <= 0) {\n const productsPriceSummary = document.querySelector('.products-price-summary');\n productsPriceSummary.style.display = 'none';\n }\n\n const allDisplayName = `${translations.shoppingList.all} (${window.tourProductsData.all.length})`;\n const allPrice = window.tourProductsData.allPrice;\n productsSelectText.innerText = allDisplayName;\n productsSummaryPrice.innerText = `${allPrice} zł`;\n const contentHtml = `
${allDisplayName}
`;\n const mappedContentHtml = window.tourProductsData.rooms.map(room => (\n `
${room.displayName}
`\n ));\n mappedContentHtml.unshift(contentHtml);\n productsDropDown.innerHTML = mappedContentHtml.join('');\n\n renderProducts('all');\n };\n\n if (window.location.href.includes('0.0.0.0') || window.location.href.includes('192.168.0.164')) {\n fetch(`${localhostTesting}${style ? `?style=${style}` : ''}`, {\n headers: {\n 'Accept-Language': lang,\n },\n })\n .then(async (response) => {\n const data = await response.json();\n const { tourProducts } = data;\n printProducts(tourProducts);\n })\n .catch((err) => console.error(err));\n } else {\n const currentUrlSplit = window.location.pathname.split('/').filter(Boolean);\n const group = currentUrlSplit[0];\n const identifier = currentUrlSplit[1];\n const extension = identifier.split('.').pop();\n\n if (extension === '3d' || extension === identifier) {\n const identifierWithoutExtension = identifier.substr(0, identifier.length - 3);\n\n fetch(`${setApi}/api/Tours/${group}/${identifierWithoutExtension}/products${style ? `?style=${style}` : ''}`, {\n headers: {\n 'Accept-Language': lang,\n },\n })\n .then(async (response) => {\n const data = await response.json();\n const { tourProducts } = data;\n printProducts(tourProducts);\n })\n .catch((err) => console.error(err));\n }\n }\n};\n","import { isVRCompatible } from './utils/device';\n\nexport default AFRAME.registerComponent('on-enter-vr', {\n /* Listens for scene entering VR mode */\n init: function () {\n if (!isVRCompatible()) return;\n const scene = this.el.sceneEl;\n scene.addEventListener('enter-vr', this.addGazeCursor);\n scene.addEventListener('exit-vr', this.removeGazeCursor);\n },\n addGazeCursor: function () {\n const camera = document.getElementById('camera');\n camera.removeAttribute('raycaster');\n camera.removeAttribute('cursor');\n const cursor = document.createElement('a-entity');\n cursor.setAttribute('fuse-cursor-loader-animation', {});\n cursor.setAttribute('id', 'cursor');\n cursor.setAttribute('position', '0 0 -2');\n cursor.setAttribute('raycaster', { objects: '.clickable', far: 5000 });\n cursor.setAttribute('cursor', { fuse: true });\n cursor.setAttribute('geometry', { primitive: 'ring', radiusInner: 0.01, radiusOuter: 0.02 });\n cursor.setAttribute('material', { color: '#898989', shader: 'flat' });\n camera.appendChild(cursor);\n },\n removeGazeCursor: function () {\n const camera = document.getElementById('camera');\n const cursor = document.getElementById('cursor');\n if (cursor && cursor.parentNode) {\n cursor.parentNode.removeChild(cursor);\n }\n camera.setAttribute('raycaster', { objects: '.clickable', far: 5000 });\n camera.setAttribute('cursor', { rayOrigin: 'mouse', fuse: false });\n },\n});\n","import { isVRCompatible } from './utils/device';\n\nexport default AFRAME.registerComponent('fuse-cursor-loader', {\n /* Creates fuse cursor loader while enterin fullscreen/vr */\n init: function () {\n if (!isVRCompatible()) return;\n const scene = this.el.sceneEl;\n scene.addEventListener('enter-vr', this.addCursorLoader);\n },\n addCursorLoader: function () {\n const cursor = document.getElementById('cursor');\n for (let i = 6; i >= 1; i--) {\n const ring = document.createElement('a-ring');\n ring.setAttribute('visible', false);\n ring.setAttribute('class', 'loader-ring');\n ring.setAttribute('radius-inner', 0.04);\n ring.setAttribute('radius-outer', 0.05);\n ring.setAttribute('theta-length', 40);\n ring.setAttribute('rotation', `0 0 ${i * 60}`);\n ring.setAttribute('material', 'color', '#898989');\n cursor.appendChild(ring);\n }\n },\n});\n","export const getDeviceOrientationAngle = () => {\n let angle = 0;\n\n if (window.screen && window.screen.orientation) {\n angle = window.screen.orientation.angle;\n } else if (window.orientation) {\n angle = window.orientation === -90 ? 270 : window.orientation;\n }\n\n return angle;\n};\n\nexport const getDeviceOrientationType = () => (window.screen.mozOrientation || (window.screen.orientation || {}).type);\n\nexport const isLandscape = () => {\n return [90, 270].includes(getDeviceOrientationAngle());\n};\n\nexport const isPortrait = () => {\n return [0, 180].includes(getDeviceOrientationAngle());\n};\n","\nexport const CustomEvents = {\n ENTER_VR: 'enter-vr',\n EXIT_VR: 'exit-vr',\n MINIMAP_SHOW: 'minimap-show',\n MINIMAP_HIDE: 'minimap-hide',\n DOLLHOUSE_SHOW: 'dollhouse-show',\n DOLLHOUSE_HIDE: 'dollhouse-hide',\n AUTO_ROTATE_ON: 'auto-rotate-on',\n AUTO_ROTATE_OFF: 'auto-rotate-off',\n MINIMUM_LOADED: 'minimum-loaded',\n SYSTEM_GYROSCOPE_ON: 'system:gyroscope-on',\n SYSTEM_GYROSCOPE_OFF: 'system:gyroscope-off',\n GYROSCOPE_ON: 'gyroscope-on',\n GYROSCOPE_OFF: 'gyroscope-off',\n ENTER_FULLSCREEN: 'enter-fullscreen',\n EXIT_FULLSCREEN: 'exit-fullscreen',\n ARROWS_USED: 'arrows-used',\n ROOM_CHANGE: 'room-change',\n CLICKED_AND_LOADED: 'clicked-and-loaded',\n OPEN_RATE_MODAL: 'rate-modal-open',\n OPEN_SHARE_MODAL: 'share-modal-open',\n SHARE_TO_FACEBOOK: 'share-to-facebook',\n SHARE_TO_TWITTER: 'share-to-twitter',\n SHARE_TO_LINKEDIN: 'share-to-linkedin',\n SHARE_TO_PINTEREST: 'share-to-pinterest',\n STYLE_CHANGE: 'style-change',\n};\n\nexport const FIRST_ROOM_NAME = '1';\n\nexport const Durations = {\n BLINK_ANIMATION_FAST: 50,\n BLINK_ANIMATION: 300,\n BLINK_ANIMATION_MOBILE: 600,\n};\n\nexport const MENU_ITEM_ACTIVE_CLASS = 'scene-menu--item__active';\nexport const TOGGLE_CLASS_ON = 'on';\n","const $ = selector => document.querySelector(selector);\n\nconst appendHTML = (wrapper, html) => {\n wrapper.innerHTML += html;\n};\n\nconst detectMobile = () => {\n const toMatch = [\n /Android/i,\n /webOS/i,\n /iPhone/i,\n /BlackBerry/i,\n /Windows Phone/i,\n ];\n\n return toMatch.some((toMatchItem) => {\n return navigator.userAgent.match(toMatchItem);\n });\n};\n\nconst toggleSubMenu = () => {\n // TODO un-hardcode\n const miniMapButton = $('.scene-menu__map-button');\n const dollhouseButton = $('.scene-menu__dollhouse-button');\n const multiStyleButton = $('.scene-menu__multi-style-button');\n const menuButton = $('.scene-menu__button');\n const menuContent = $('.scene-menu--desktop');\n const logo = $('.scene-menu__top');\n const subMenuWrapper = $('.sub-menu--wrapper');\n menuButton.classList.toggle('active');\n menuContent.classList.toggle('active');\n miniMapButton.classList.toggle('smooth-hidden');\n\n if (dollhouseButton) {\n dollhouseButton.classList.toggle('smooth-hidden');\n }\n\n if (multiStyleButton) {\n multiStyleButton.classList.toggle('smooth-hidden');\n }\n\n if (detectMobile() && innerHeight <= 300) {\n logo.classList.toggle('smooth-hidden');\n menuContent.addEventListener('touchstart', () => {\n subMenuWrapper.classList.remove('animation-swipe-down');\n });\n menuContent.addEventListener('touchend', () => {\n setTimeout(() => {\n subMenuWrapper.classList.add('animation-swipe-down');\n }, 5000);\n });\n } else {\n logo.classList.remove('smooth-hidden');\n }\n\n const clickAwayContainer = $('.overlay');\n clickAwayContainer.classList.toggle('d-none');\n};\n\nconst Menu = {\n init: (config) => {\n // init menu\n const menuHTML = config.menu.buttons.map(button => button.getMarkup()).join('');\n const menuWrapper = $(config.menu.wrapperSelector);\n appendHTML(menuWrapper, menuHTML);\n\n if (config.subMenu.buttons.length) {\n // init sub-menu\n const subMenuWrapperHTML = config.subMenu.getWrapperMarkup();\n appendHTML(menuWrapper, subMenuWrapperHTML);\n const subMenuWrapper = $(config.subMenu.wrapperSelector);\n\n const subMenuButtonsHTML = config.subMenu.buttons.map(button => button.getMarkup()).join('');\n appendHTML(subMenuWrapper, subMenuButtonsHTML);\n\n // add toggle event listener\n const subMenuToggleButton = $(config.subMenu.toggleSelector);\n subMenuToggleButton.addEventListener('click', toggleSubMenu);\n\n // add sub-menu event listeners\n config.subMenu.buttons.forEach(button => $(button.selector).addEventListener('click', () => {\n button.onClick();\n toggleSubMenu();\n }));\n }\n\n // add menu event listeners\n config.menu.buttons.forEach(button => $(button.selector).addEventListener('click', button.onClick));\n\n // click-away to close menu\n const clickAwayContainer = $('.overlay');\n clickAwayContainer.addEventListener('click', () => {\n toggleSubMenu();\n });\n },\n};\n\nexport default Menu;\n","import mainVrButton from '../../views/menu/menuButtons/_menuVrModeButton.pug';\nimport mainShareButton from '../../views/menu/menuButtons/_menuShareButton.pug';\nimport mainRateApartmentButton from '../../views/menu/menuButtons/_menuRateApartmentButton.pug';\nimport mainGyroscopeButton from '../../views/menu/menuButtons/_menuGyroscopeButton.pug';\nimport mainFullscreenButton from '../../views/menu/menuButtons/_menuFullscreenButton.pug';\nimport mainAutoRotateButton from '../../views/menu/menuButtons/_menuAutoRotateButton.pug';\nimport mainScreenshotButton from '../../views/menu/menuButtons/_menuScreenShotshotButton.pug';\n\nimport mainMultiStyleButton from '../../views/menu/menuButtons/_menuMultiStyleButton.pug';\nimport mainDollhouseButton from '../../views/menu/menuButtons/_menuDollhouseButton.pug';\nimport mainMinimapButton from '../../views/menu/menuButtons/_menuMinimapButton.pug';\n\nimport shareButton from '../../views/menu/subMenuButtons/_shareButton.pug';\nimport vrButton from '../../views/menu/subMenuButtons/_vrModeButton.pug';\nimport gyroscopeButton from '../../views/menu/subMenuButtons/_gyroscopeButton.pug';\nimport autoRotateButton from '../../views/menu/subMenuButtons/_autoRotateButton.pug';\nimport fullscreenButton from '../../views/menu/subMenuButtons/_fullscreenButton.pug';\nimport rateApartmentButton from '../../views/menu/subMenuButtons/_rateApartmentButton.pug';\nimport screenshotButton from '../../views/menu/subMenuButtons/_screenshotButton.pug';\nimport minimapButton from '../../views/menu/subMenuButtons/_minimapButton.pug';\nimport dollhouseButton from '../../views/menu/subMenuButtons/_dollhouseButton.pug';\nimport multiStyleButton from '../../views/menu/subMenuButtons/_multiStyleButton.pug';\n\nimport { getTranslation } from '../../services/translations/getTranslations';\nimport { isIpadNewOs, isMobile } from '../../utils/device';\n\nconst trans = getTranslation();\nconst isExterior = window.location.href.includes('isExterior');\n\nexport default [\n /* rate apartment */\n {\n standaloneSelector: '.scene-menu__rate-apartment-button',\n getStandaloneMarkup: mainRateApartmentButton,\n submenuSelector: '.scene-menu--item__rate-apartment',\n getSubmenuMarkup: () => rateApartmentButton(trans),\n onClick: componentContext => componentContext.showRateApartmentModal(),\n isButtonEnabled: featureDecisions => !isExterior && featureDecisions.apartmentScore,\n enforceStandaloneVersion: false,\n defaultOrder: 1,\n },\n /* social media share */\n {\n standaloneSelector: '.scene-menu__share-button',\n getStandaloneMarkup: mainShareButton,\n submenuSelector: '.scene-menu--item__share',\n getSubmenuMarkup: () => shareButton(trans),\n onClick: componentContext => componentContext.showShareModal(),\n isButtonEnabled: featureDecisions => !isExterior && featureDecisions.shareToSocial,\n enforceStandaloneVersion: false,\n defaultOrder: 2,\n },\n /* capture screenshot */\n {\n standaloneSelector: '.scene-menu__screenshot-button',\n getStandaloneMarkup: mainScreenshotButton,\n submenuSelector: '.scene-menu--item__screenshot',\n getSubmenuMarkup: () => screenshotButton(trans),\n onClick: () => null,\n isButtonEnabled: featureDecisions => (isMobile() || isIpadNewOs()) ? null : featureDecisions.captureScreenshot,\n enforceStandaloneVersion: isExterior,\n defaultOrder: 3,\n },\n /* vr mode */\n {\n standaloneSelector: '.scene-menu__vr-mode-button',\n getStandaloneMarkup: mainVrButton,\n submenuSelector: '.scene-menu--item__vr-mode',\n getSubmenuMarkup: () => vrButton(trans),\n onClick: () => null,\n isButtonEnabled: featureDecisions => !isExterior && featureDecisions.vrModeEnabled,\n enforceStandaloneVersion: false,\n defaultOrder: 4,\n },\n /* gyroscope */\n {\n standaloneSelector: '.scene-menu__gyroscope-button',\n getStandaloneMarkup: mainGyroscopeButton,\n submenuSelector: '.scene-menu--item__gyroscope',\n getSubmenuMarkup: () => gyroscopeButton(trans),\n onClick: componentContext => componentContext.toggleGyroscopeInput(),\n isButtonEnabled: featureDecisions => featureDecisions.gyroscopeEnabled,\n enforceStandaloneVersion: false,\n defaultOrder: 5,\n },\n /* fullscreen */\n {\n standaloneSelector: '.scene-menu__fullscreen-button',\n getStandaloneMarkup: mainFullscreenButton,\n submenuSelector: '.scene-menu--item__fullscreen',\n getSubmenuMarkup: () => fullscreenButton(trans),\n onClick: componentContext => componentContext.toggleFullscreenMode(),\n isButtonEnabled: featureDecisions => featureDecisions.fullscreenEnabled,\n enforceStandaloneVersion: false,\n defaultOrder: 6,\n },\n /* auto-rotate */\n {\n standaloneSelector: '.scene-menu__auto-rotate-button',\n getStandaloneMarkup: mainAutoRotateButton,\n submenuSelector: '.scene-menu--item__auto-rotate',\n getSubmenuMarkup: () => autoRotateButton(trans),\n onClick: componentContext => componentContext.toggleAutoRotate(),\n isButtonEnabled: featureDecisions => !isExterior && featureDecisions.autoRotateEnabled,\n enforceStandaloneVersion: false,\n defaultOrder: 7,\n },\n /* dollhouse */\n {\n standaloneSelector: '.scene-menu__dollhouse-button',\n getStandaloneMarkup: mainDollhouseButton,\n submenuSelector: '.scene-menu--item__dollhouse',\n getSubmenuMarkup: () => dollhouseButton(trans),\n onClick: componentContext => componentContext.toggleDollhouseVisibility(),\n isButtonEnabled: featureDecisions => !isExterior && (featureDecisions.dollHouse || featureDecisions.turntableDollHouse),\n enforceStandaloneVersion: true,\n defaultOrder: 9,\n },\n /* minimap */\n {\n standaloneSelector: '.scene-menu__map-button',\n getStandaloneMarkup: mainMinimapButton,\n submenuSelector: '.scene-menu--item__floor-plan',\n getSubmenuMarkup: () => minimapButton(trans),\n onClick: componentContext => componentContext.toggleMapVisibility(),\n isButtonEnabled: () => true,\n enforceStandaloneVersion: true,\n defaultOrder: 999,\n },\n /* mutli-styli-selector */\n {\n standaloneSelector: '.scene-menu__multi-style-button',\n getStandaloneMarkup: mainMultiStyleButton,\n submenuSelector: '.scene-menu--item__multi-styles',\n getSubmenuMarkup: () => multiStyleButton(trans),\n onClick: componentContext => componentContext.toggleStyleChange(),\n isButtonEnabled: featureDecisions => featureDecisions.multiStyles,\n enforceStandaloneVersion: true,\n defaultOrder: 8,\n },\n];\n","import getSubMenuWrapper from '../../views/menu/_subMenu.pug';\nimport buttons from './buttonsConfig';\n\nconst minButtonsCountForSubMenu = 4;\n\nconst compareByDefaultOrder = (buttonA, buttonB) => {\n return buttonA.defaultOrder > buttonB.defaultOrder ? 1 : -1;\n};\n\nconst createStandaloneButton = button => ({\n selector: button.standaloneSelector,\n getMarkup: button.getStandaloneMarkup,\n onClick: button.onClick,\n});\n\nconst createStandaloneButtons = buttons => buttons.map(createStandaloneButton);\n\nconst createEnforcedStandaloneButtons = buttons => buttons.filter(button => button.enforceStandaloneVersion)\n .map(createStandaloneButton);\n\nconst createSubMenuButton = button => ({\n selector: button.submenuSelector,\n getMarkup: button.getSubmenuMarkup,\n onClick: button.onClick,\n});\n\nconst createSubMenuButtons = buttons => buttons.map(createSubMenuButton);\n\n// TODO: Remove after menu is refactored to use events\nconst attachComponentContextToOnClickHandlers = (buttons, componentContext) =>\n buttons.map(button => ({\n ...button,\n onClick: () => button.onClick(componentContext),\n }));\n\nconst getMenuButtonsBasedOnFeatureDecisions = (featureDecisions, componentContext) => {\n const enabledMenuButtons = buttons.filter(button => button.isButtonEnabled(featureDecisions))\n .sort(compareByDefaultOrder);\n const enabledMenuButtonsCount = enabledMenuButtons.length;\n const shouldCreateSubMenu = enabledMenuButtonsCount >= minButtonsCountForSubMenu;\n const shouldCreateStandaloneButtons = !shouldCreateSubMenu;\n\n const standaloneButtons = shouldCreateStandaloneButtons\n ? createStandaloneButtons(enabledMenuButtons) : createEnforcedStandaloneButtons(enabledMenuButtons);\n\n const submenuButtons = shouldCreateSubMenu ? createSubMenuButtons(enabledMenuButtons) : [];\n\n return {\n menu: {\n wrapperSelector: '.scene-menu__bottom',\n buttons: attachComponentContextToOnClickHandlers(standaloneButtons, componentContext),\n },\n subMenu: {\n wrapperSelector: '.sub-menu--wrapper',\n toggleSelector: '.scene-menu__button',\n getWrapperMarkup: getSubMenuWrapper,\n buttons: attachComponentContextToOnClickHandlers(submenuButtons, componentContext),\n },\n };\n};\n\nexport default getMenuButtonsBasedOnFeatureDecisions;\n","import { CustomEvents, TOGGLE_CLASS_ON } from '../../aframe-components/shared/constants';\n\nexport const turntableDollhouse = (sceneElement) => {\n const dollhouseButton = document.querySelector('.scene-menu__dollhouse-button');\n let modalElement = document.createElement('div');\n let iframe = document.createElement('iframe');\n let closeButton = document.createElement('div');\n const backgroundImageBtn = document.createElement('div');\n const fovSliderWrapper = document.querySelector('.fov-slider-wrapper');\n const innerMaps = document.querySelectorAll('.innerMap');\n const multiStyleButton = document.querySelector('.scene-menu__multi-style-button');\n const styleSelector = document.querySelector('.style-selector-wrapper');\n const zIndex = 5;\n\n if (styleSelector) {\n styleSelector.style.maxWidth = 'calc(100vw - 80px)';\n\n if (!dollhouseButton.classList.contains('on')) {\n multiStyleButton?.classList.toggle('absolute-top');\n }\n\n const onToggleMiniMapArrowSet = () => {\n const styleContainer = document.querySelector('.style-selector-container');\n const stylesAvailable = document.querySelectorAll('.style-selector-wrapper .style-item');\n const availableStylesWidth = (stylesAvailable.length * 100);\n\n if (availableStylesWidth > styleContainer.offsetWidth + 10) {\n styleSelector.classList.add('right-arrow-visible');\n } else {\n styleSelector.classList.remove('right-arrow-visible');\n }\n };\n\n onToggleMiniMapArrowSet();\n }\n\n modalElement.classList.add('iframe-wrapper');\n closeButton.classList.add('close-button');\n iframe.classList.add('iframe');\n dollhouseButton.classList.toggle(TOGGLE_CLASS_ON);\n dollhouseButton.classList.toggle('a-hidden');\n sceneElement.emit(CustomEvents.DOLLHOUSE_SHOW);\n\n const setStylesOnElement = (element, styles) => {\n Object.assign(element.style, styles);\n };\n\n const fadeClose = () => {\n const iframeWrapper = document.querySelector('.iframe-wrapper');\n const iframe = document.querySelector('.iframe');\n const closeButton = document.querySelector('.close-button');\n iframeWrapper.style.opacity = '0';\n\n const removeIframe = setTimeout(() => {\n iframeWrapper.removeChild(iframe);\n iframeWrapper.removeChild(closeButton);\n document.body.removeChild(iframeWrapper);\n clearTimeout(removeIframe);\n }, 300);\n };\n\n const modalElementStyles = {\n display: 'block',\n position: 'fixed',\n top: '0',\n left: '0',\n bottom: '0',\n right: '0',\n zIndex: zIndex + 1,\n margin: 'auto',\n height: '100%',\n width: ' 100%',\n background: 'rgba(255, 255, 255, 0.8)',\n opacity: '1',\n transition: 'opacity 250ms ease-in-out',\n };\n const iframeStyles = {\n width: '100%',\n height: '100%',\n border: '0',\n };\n\n setStylesOnElement(modalElement, modalElementStyles);\n setStylesOnElement(iframe, iframeStyles);\n\n const getUrl = window.location.pathname;\n const splitPath = getUrl.split('/').filter(Boolean);\n // temporary hard code testowa-ttdh\n const group = splitPath[0] ?? 'przelacznik-stylow-2'; // get groupName\n const flat = splitPath[1]?.slice(0, -3) ?? '11_5xa_3st_3'; // get flatName and deleted .3d from flatName\n const testing = window.location.href.includes('tours-staging') || window.location.href.includes(':8181');\n const getLang = document.querySelector('.scene-menu__bottom').getAttribute('id');\n\n iframe.border = 0;\n iframe.src = `https://${testing ? '360-staging' : '360'}.3destate.pl/${group}/${flat}?isTour=true${styleSelector ? `&style=${window.currentStyle.name}` : ''}${styleSelector ? `&group=${window.currentStyle.group}` : ''}${getLang ? `&lang=${getLang}` : ''}`;\n iframe.width = '100%';\n iframe.height = '100%';\n iframe.allowfullscreen = true;\n iframe.webkitallowfullscreen = true;\n iframe.mozallowfullscreen = true;\n iframe.frameborder = 0;\n iframe.setAttribute('allowFullScreen', 'yes');\n iframe.setAttribute('webkitAllowFullScreen', 'yes');\n iframe.setAttribute('mozAllowFullScreen', 'yes');\n\n if (dollhouseButton.classList.contains('on')) {\n document.body.appendChild(modalElement);\n modalElement.appendChild(iframe);\n modalElement.appendChild(closeButton);\n closeButton.appendChild(backgroundImageBtn);\n\n const shoppingListContainer = document.querySelector('.shopping-list-container');\n\n const hideShoppingList = () => {\n const shoppingListContainer = document.querySelector('.shopping-list-container');\n const leftBottomInterface = document.querySelector('.scene-menu__bottom');\n const styleSelectorControllerWrapper = document.querySelector('.style-selector-controlLer-wrapper');\n const styleSelectorWrapper = document.querySelector('.style-selector-wrapper');\n\n shoppingListContainer.classList.remove('active');\n leftBottomInterface.style.left = '10px';\n styleSelectorControllerWrapper.style.left = '80px';\n styleSelectorWrapper.classList.remove('product-list-opened');\n\n if (window.innerWidth > 800) {\n const styleMaxWidth = styleSelectorWrapper.dataset.maxWidth;\n styleSelectorWrapper.style.maxWidth = styleMaxWidth;\n }\n };\n\n if (shoppingListContainer && shoppingListContainer.classList.contains('active')) {\n hideShoppingList();\n }\n } else {\n fadeClose();\n }\n\n const closeOnEscape = function (event) {\n if (event.which === 27) {\n dollhouseButton.classList.remove(TOGGLE_CLASS_ON);\n close(event);\n }\n };\n\n const close = function (event) {\n const minimap = document.querySelector('.floor-plan-container');\n const stylesAvailable = document.querySelectorAll('.style-selector-wrapper .style-item');\n minimap.classList.remove('a-hidden');\n fovSliderWrapper.classList.remove('a-hidden');\n innerMaps.forEach((innerMap) => innerMap.classList.remove('transition'));\n dollhouseButton.classList.toggle('a-hidden');\n multiStyleButton?.classList.toggle('absolute-top');\n\n sceneElement.emit(CustomEvents.DOLLHOUSE_HIDE);\n\n if (styleSelector) {\n if ((window.innerWidth <= 800 && styleSelector.classList.contains('active')) && stylesAvailable.length > 1 && minimap.classList.contains('minimize')) {\n innerMaps.forEach((map) => {\n map.style.bottom = `calc(100% - (${window.minimizeImage.maxHeight}px + 20px))`;\n });\n fovSliderWrapper.style.bottom = 'calc(100% - 210px)';\n } else {\n innerMaps.forEach((map) => {\n map.style.bottom = '';\n });\n fovSliderWrapper.style.bottom = '';\n }\n\n if (window.innerWidth > 800 && window.innerWidth < 1000) {\n styleSelector.style.maxWidth = `calc(100vw - (${window.minimizeImage.maxWidth}px + 140px))`;\n } else {\n styleSelector.style.maxWidth = `calc(100vw - (${window.minimizeImage.maxWidth}px + 120px))`;\n }\n\n const onToggleMiniMapArrowSet = () => {\n const styleContainer = document.querySelector('.style-selector-container');\n const stylesAvailable = document.querySelectorAll('.style-selector-wrapper .style-item');\n const availableStylesWidth = (stylesAvailable.length * 100);\n\n if (availableStylesWidth > styleContainer.offsetWidth + 10) {\n styleSelector.classList.add('right-arrow-visible');\n } else {\n styleSelector.classList.remove('right-arrow-visible');\n }\n };\n\n onToggleMiniMapArrowSet();\n }\n\n event.stopPropagation();\n event.preventDefault();\n // track('modal', 'close');\n fadeClose();\n dollhouseButton.classList.remove(TOGGLE_CLASS_ON);\n\n document.removeEventListener('keydown', closeOnEscape);\n closeButton.removeEventListener('click', close);\n\n iframe = null;\n closeButton = null;\n modalElement = null;\n };\n\n document.addEventListener('keydown', closeOnEscape);\n closeButton.addEventListener('click', close);\n};\n","import { CustomEvents, TOGGLE_CLASS_ON } from '../../aframe-components/shared/constants';\n\nexport const dollhouse = (data, dollhouseResources, startingFloor, sceneElement, floorTranslate) => {\n const isMobile = AFRAME.utils.device.isMobile();\n const dollhouseButton = document.querySelector('.scene-menu__dollhouse-button');\n const hidden = dollhouseButton.className.split(' ').includes('on');\n const dollhouseContainer = document.querySelector('.dollhouse-container');\n const upperFloorButton = document.querySelector('.next-floor-btn');\n const lowerFloorButton = document.querySelector('.previous-floor-btn');\n const zeroFloorImage = document.querySelector('.dollhouse-view.floor-0');\n const firstFloorImage = document.querySelector('.dollhouse-view.floor-1');\n const secondFloorImage = document.querySelector('.dollhouse-view.floor-2');\n const fovSliderWrapper = document.querySelector('.fov-slider-wrapper');\n const innerMaps = document.querySelectorAll('.innerMap');\n const upperMapButton = document.querySelector('.upper-floor-button');\n const styleSelector = document.querySelector('.style-selector-wrapper');\n const stylesAvailable = document.querySelectorAll('.style-selector-wrapper .style-item');\n\n if (!dollhouseResources) {\n return;\n }\n\n if (hidden) {\n sceneElement.emit(CustomEvents.DOLLHOUSE_SHOW);\n }\n\n if (!upperMapButton) {\n window.floor = {\n currentFloor: startingFloor,\n startingFloor: startingFloor,\n currentMiniMapFloor: startingFloor,\n };\n }\n\n const state = {\n count: window.floor.currentMiniMapFloor,\n };\n\n const counter = (count) => {\n if (count === 0 && lowerFloorButton) {\n lowerFloorButton.style.display = 'none';\n } else if (count > 0 && lowerFloorButton) {\n lowerFloorButton.style.display = null;\n }\n\n if (count === (dollhouseResources.length - 1) && upperFloorButton) {\n upperFloorButton.style.display = 'none';\n } else if (count < (dollhouseResources.length - 1) && upperFloorButton) {\n upperFloorButton.style.display = null;\n }\n\n if (lowerFloorButton) {\n upperFloorButton.lastChild.innerHTML = `${floorTranslate} ${count + 1}`;\n lowerFloorButton.lastChild.innerHTML = `${floorTranslate} ${count - 1}`;\n }\n\n firstFloorImage?.addEventListener('load', () => {\n upperFloorButton.classList.remove('is-loading');\n lowerFloorButton.classList.remove('is-loading');\n });\n\n secondFloorImage?.addEventListener('load', () => {\n upperFloorButton.classList.remove('is-loading');\n });\n\n if (count === 0) {\n if (zeroFloorImage) {\n zeroFloorImage.style.transform = 'translateY(0) scale(1)';\n zeroFloorImage.style.opacity = '1';\n }\n\n if (firstFloorImage) {\n firstFloorImage.style.transform = 'translateY(-100%) scale(0)';\n firstFloorImage.style.opacity = '0';\n }\n\n if (secondFloorImage) {\n secondFloorImage.style.transform = 'translateY(-100%) scale(0)';\n secondFloorImage.style.opacity = '0';\n }\n }\n\n if (count === 1) {\n if (zeroFloorImage) {\n zeroFloorImage.style.transform = 'translateY(100%) scale(0)';\n zeroFloorImage.style.opacity = '0';\n }\n\n if (firstFloorImage) {\n firstFloorImage.style.transform = 'translateY(0) scale(1)';\n firstFloorImage.style.opacity = '1';\n }\n\n if (secondFloorImage) {\n secondFloorImage.style.transform = 'translateY(-100%) scale(0)';\n secondFloorImage.style.opacity = '0';\n }\n }\n\n if (count === 2) {\n if (firstFloorImage) {\n firstFloorImage.style.transform = 'translateY(100%) scale(0)';\n firstFloorImage.style.opacity = '0';\n }\n\n if (zeroFloorImage) {\n zeroFloorImage.style.transform = 'translateY(100%) scale(0)';\n zeroFloorImage.style.opacity = '0';\n }\n\n if (secondFloorImage) {\n secondFloorImage.style.transform = 'translateY(0) scale(1)';\n secondFloorImage.style.opacity = '1';\n }\n }\n };\n\n function renderCount () {\n counter(state.count);\n }\n\n function incCountUp () {\n if (state.count < (dollhouseResources.length - 1)) {\n state.count = state.count + 1;\n window.floor.currentMiniMapFloor = state.count;\n }\n renderCount();\n }\n\n function incCountDown () {\n if (state.count > 0) {\n state.count = state.count - 1;\n window.floor.currentMiniMapFloor = state.count;\n }\n renderCount();\n }\n\n const closeOnEscape = function (event) {\n if (event.which === 27) {\n dollhouseButton.classList.remove(TOGGLE_CLASS_ON);\n close(event);\n }\n };\n\n function close () {\n const minimap = document.querySelector('.floor-plan-container');\n minimap.classList.remove('a-hidden');\n fovSliderWrapper.classList.remove('a-hidden');\n innerMaps.forEach((innerMap) => innerMap.classList.remove('transition'));\n sceneElement.emit(CustomEvents.DOLLHOUSE_HIDE);\n dollhouseButton.classList.remove('on');\n dollhouseContainer.style.opacity = '0';\n setTimeout(() => {\n dollhouseContainer.classList.add('a-hidden');\n }, 250);\n\n document.removeEventListener('keydown', closeOnEscape);\n\n if (lowerFloorButton) {\n upperFloorButton?.removeEventListener('click', incCountUp);\n lowerFloorButton.removeEventListener('click', incCountDown);\n\n firstFloorImage?.removeEventListener('load', () => {\n upperFloorButton.classList.remove('is-loading');\n lowerFloorButton.classList.remove('is-loading');\n });\n\n secondFloorImage?.removeEventListener('load', () => {\n upperFloorButton.classList.remove('is-loading');\n });\n }\n }\n\n renderCount();\n\n if (lowerFloorButton) {\n upperFloorButton.addEventListener('click', incCountUp);\n lowerFloorButton.addEventListener('click', incCountDown);\n }\n\n const zeroFloorUrl = dollhouseResources[0]?.find((el, index) => index === 0);\n const firstFloorUrl = dollhouseResources[1]?.find((el, index) => index === 0);\n const secondFloorUrl = dollhouseResources[2]?.find((el, index) => index === 0);\n\n if (startingFloor <= 0) {\n if (firstFloorImage) {\n firstFloorImage.setAttribute('src', firstFloorUrl.url);\n }\n if (secondFloorImage) {\n secondFloorImage.setAttribute('src', secondFloorUrl.url);\n }\n } else if (startingFloor === 1) {\n if (zeroFloorImage) {\n zeroFloorImage.setAttribute('src', zeroFloorUrl.url);\n }\n if (secondFloorImage) {\n secondFloorImage.setAttribute('src', secondFloorUrl.url);\n }\n } else if (startingFloor === 2) {\n if (zeroFloorImage) {\n zeroFloorImage.setAttribute('src', zeroFloorUrl.url);\n }\n if (firstFloorImage) {\n firstFloorImage.setAttribute('src', firstFloorUrl.url);\n }\n }\n\n document.addEventListener('keydown', closeOnEscape);\n\n if ((hidden && !isMobile) || (hidden && isMobile)) {\n close();\n\n if (styleSelector) {\n styleSelector.style.maxWidth = `calc(100vw - (${window.minimizeImage.maxWidth}px + 120px))`;\n if (innerWidth < 800 && styleSelector.classList.contains('active') && stylesAvailable.length > 1) {\n innerMaps.forEach((map) => {\n map.style.bottom = `calc(100% - (${window.minimizeImage.maxHeight}px + 20px))`;\n });\n // fovSlider.style.bottom = 'calc(100% - 210px)';\n }\n }\n } else {\n dollhouseButton.classList.add('on');\n dollhouseContainer.classList.remove('a-hidden');\n setTimeout(() => {\n dollhouseContainer.style.opacity = '1';\n }, 50);\n\n if (lowerFloorButton) {\n if (window.innerWidth < 1200 &&\n (styleSelector?.classList.contains('active') && (!hidden && stylesAvailable.length > 3))) {\n lowerFloorButton.style.bottom = '110px';\n } else {\n lowerFloorButton.style.bottom = '';\n }\n }\n\n if (styleSelector) {\n styleSelector.style.maxWidth = 'calc(100vw - 110px)';\n innerMaps.forEach((map) => {\n map.style.bottom = '';\n });\n }\n }\n};\n","import { isLandscape } from './utils/deviceOrientation';\nimport { CustomEvents, TOGGLE_CLASS_ON } from './shared/constants';\nimport MicroModal from 'micromodal';\n\nimport Menu, { createMenuConfigBasedOnFeatureDecisions } from '../components/menu';\nimport { turntableDollhouse } from '../components/menu/turntableDollhouse';\nimport { dollhouse } from '../components/menu/dollhouse';\nimport { isIOS, isMobile } from '../utils/device';\nimport { fetchAllProductsData, fetchProductData } from './shopping-list';\nimport { localStorageAvailable } from '../utils/localStorageAvailable';\n\nexport default AFRAME.registerComponent('scene-menu', {\n schema: {\n featureDecisions: {\n parse: JSON.parse,\n stringify: JSON.stringify,\n },\n featureLoader: {\n parse: JSON.parse,\n stringify: JSON.stringify,\n },\n dollhouseResources: {\n parse: JSON.parse,\n stringify: JSON.stringify,\n },\n startingFloor: {\n parse: JSON.parse,\n stringify: JSON.stringify,\n },\n miniMaps: {\n parse: JSON.parse,\n stringify: JSON.stringify,\n },\n dollHouses: {\n parse: JSON.parse,\n stringify: JSON.stringify,\n },\n interiorDesigner: {\n type: 'string',\n },\n defaultStylesGroup: {\n type: 'string',\n },\n floorTranslate: {\n type: 'string',\n },\n },\n init: function () {\n const featureLoader = this.data.featureLoader;\n const featureDecisions = this.data.featureDecisions;\n const defaultStyleGroup = this.data.defaultStylesGroup;\n const menuConfig = createMenuConfigBasedOnFeatureDecisions({ ...featureDecisions, ...featureLoader }, this);\n const mapContainer = document.querySelector('.floor-plan-container');\n const mapImage = document.querySelectorAll('.floor-plan-image');\n const isIpad = /ipad/i.test(window.navigator.userAgent) || (/Macintosh/.test(navigator.userAgent) && 'ontouchend' in document);\n const isMobile = AFRAME.utils.device.isMobile();\n const canvas = document.querySelector('.a-canvas');\n const supportsFullscreen = typeof canvas.requestFullscreen !== 'undefined' ||\n typeof canvas.webkitRequestFullscreen !== 'undefined' ||\n typeof canvas.mozRequestFullScreen !== 'undefined';\n if (isMobile && supportsFullscreen && window.screen.orientation) {\n window.screen.orientation.addEventListener('change', this.onOrientationChange.bind(this));\n }\n\n const timerIfPageVisited = (localStorageAvailable() && JSON.parse(localStorage.getItem('visited'))) ? 2000 : 300;\n\n // TODO fix this temporary solution for bad resized images\n if (isIOS() || isIpad) {\n window.addEventListener('orientationchange', () => {\n if (mapContainer.classList.contains('blur')) {\n this.toggleMapVisibility();\n }\n });\n }\n\n this.closeMapWithKey();\n\n Menu.init(menuConfig);\n\n mapImage.forEach((image) => {\n image.addEventListener('click', () => {\n if (mapContainer.classList.contains('minimize')) {\n this.toggleMapVisibility();\n }\n });\n });\n\n if (window.location.href.includes('isExterior')) {\n window.addEventListener('message', (event) => {\n const guideHidden = document.body.classList.contains('guide-hidden');\n if (event.data.action && guideHidden) this.toggleMapVisibility();\n });\n\n if (featureLoader.multiStyles) {\n this.el.sceneEl.addEventListener('guide-hidden', () => this.toggleStyleChange());\n }\n }\n\n if (featureLoader.multiStyles && !window.location.href.includes('isExterior')) {\n const stylesAvailable = document.querySelectorAll('.style-selector-wrapper .style-item');\n const floorPlanContainer = document.querySelector('.floor-plan-container');\n const dollhouse = document.querySelector('.dollhouse-container');\n const styleSelector = document.querySelector('.style-selector-wrapper');\n const lowerMapButton = document.querySelector('.lower-floor-button');\n const lowerFloorButton = document.querySelector('.previous-floor-btn');\n const fovSliderWrapper = document.querySelector('.fov-slider-wrapper');\n const innerMaps = document.querySelectorAll('.innerMap');\n const floor0 = document.querySelector('.innerMap.floor-0 img');\n const floor1 = document.querySelector('.innerMap.floor-1 img');\n const floor2 = document.querySelector('.innerMap.floor-2 img');\n const getAllStyles = document.querySelectorAll('.style-selector-wrapper .style-item img');\n\n getAllStyles?.forEach(img => {\n if (img.src.includes('null')) {\n img.src = 'https://tour-viewer.azureedge.net/dist/assets/images/thumbnail/default_thumbnail_324.jpg';\n }\n });\n\n styleSelector.addEventListener('scroll', (e) => {\n const styleContainer = document.querySelector('.style-selector-container');\n const shoppingListContainer = document.querySelector('.shopping-list-container');\n const styleContainerDimensions = styleContainer.getBoundingClientRect();\n const availableStylesWidth = (stylesAvailable.length * 100);\n const getRealWidth = (shoppingListContainer && shoppingListContainer.classList.contains('active'))\n ? (availableStylesWidth + styleContainerDimensions.x) - 450\n : (availableStylesWidth + styleContainerDimensions.x) - 90;\n const offSetCalculation = (shoppingListContainer && shoppingListContainer.classList.contains('active'))\n ? 440\n : 80;\n\n if (styleContainerDimensions.x < offSetCalculation) {\n styleSelector.classList.add('left-arrow-visible');\n } else {\n styleSelector.classList.remove('left-arrow-visible');\n }\n\n if (getRealWidth === styleContainerDimensions.width) {\n styleSelector.classList.remove('right-arrow-visible');\n } else {\n styleSelector.classList.add('right-arrow-visible');\n }\n });\n\n let mouseDown = false;\n let startX, scrollLeft;\n\n const startDragging = function (e) {\n mouseDown = true;\n startX = e.pageX - styleSelector.offsetLeft;\n scrollLeft = styleSelector.scrollLeft;\n };\n\n const stopDragging = function (event) {\n mouseDown = false;\n\n styleSelector.style.cursor = null;\n stylesAvailable.forEach((style) => {\n style.style.pointerEvents = null;\n });\n };\n\n styleSelector.addEventListener('mousemove', (e) => {\n e.preventDefault();\n if (!mouseDown) return;\n const x = e.pageX - styleSelector.offsetLeft;\n const scroll = x - startX;\n styleSelector.scrollLeft = scrollLeft - scroll;\n\n if ((startX - 25 > x) || (startX + 25 < x)) {\n styleSelector.style.cursor = 'grabbing';\n\n stylesAvailable.forEach((style) => {\n style.style.pointerEvents = 'none';\n });\n }\n });\n\n styleSelector.addEventListener('mousedown', startDragging, false);\n styleSelector.addEventListener('mouseup', stopDragging, false);\n styleSelector.addEventListener('mouseleave', stopDragging, false);\n\n const imagesWidth = [(floor0?.clientWidth ?? 0), (floor1?.clientWidth ?? 0), (floor2?.clientWidth ?? 0)];\n const maxWidth = Math.max(...imagesWidth);\n window.minimizeImage = {\n ...window.minimizeImage,\n maxWidth,\n };\n\n this.el.sceneEl.addEventListener('guide-hidden', () => {\n if (styleSelector && !styleSelector.classList.contains('active')) {\n const timeout = setTimeout(() => {\n if (styleSelector.classList.contains('active')) {\n clearTimeout(timeout);\n } else {\n this.toggleStyleChange();\n }\n }, timerIfPageVisited);\n }\n\n if (defaultStyleGroup === 'Decoroom' && localStorageAvailable()) {\n localStorage.setItem('seenDecoroomStyle', 'true');\n }\n });\n\n const setProportions = () => {\n const currentActive = document.querySelector('.current.current__active');\n const imagesWidth = [(floor0?.clientWidth ?? 0), (floor1?.clientWidth ?? 0), (floor2?.clientWidth ?? 0)];\n window.minimizeImage.maxWidth = Math.max(...imagesWidth);\n window.minimizeImage.maxHeight = currentActive?.clientHeight;\n\n if ((window.innerWidth <= 800 && styleSelector.classList.contains('active')) && stylesAvailable.length > 1 && floorPlanContainer.classList.contains('minimize')) {\n innerMaps.forEach((map) => {\n map.style.bottom = `calc(100% - (${currentActive.clientHeight}px + 20px))`;\n });\n fovSliderWrapper.style.bottom = 'calc(100% - 210px)';\n } else {\n innerMaps.forEach((map) => {\n map.style.bottom = '';\n });\n fovSliderWrapper.style.bottom = '';\n }\n\n if (window.innerWidth > 800) {\n if (floorPlanContainer.classList.contains('blur') && !dollhouse?.classList.contains('a-hidden')) {\n const shoppingListContainer = document.querySelector('.shopping-list-container');\n let styleOffset;\n\n if (shoppingListContainer.classList.contains('active')) {\n styleOffset = 360 + 80;\n } else {\n styleOffset = 80;\n }\n\n styleSelector.style.maxWidth = `calc(100vw - ${styleOffset}px)`;\n } else if (window.innerWidth > 800 && window.innerWidth < 1025) {\n const shoppingListContainer = document.querySelector('.shopping-list-container');\n let shoppingOffset = '140px';\n\n if (shoppingListContainer && shoppingListContainer.classList.contains('active')) {\n shoppingOffset = `${460 - window.minimizeImage.maxWidth}px`;\n }\n styleSelector.style.maxWidth = `calc(100vw - (${window.minimizeImage.maxWidth}px + ${shoppingOffset}))`;\n } else {\n styleSelector.style.maxWidth = `calc(100vw - (${window.minimizeImage.maxWidth}px + 120px))`;\n }\n }\n\n if (lowerMapButton) {\n if (window.innerWidth < 1200 &&\n (styleSelector.classList.contains('active') && floorPlanContainer.classList.contains('blur'))) {\n lowerMapButton.style.bottom = '110px';\n } else {\n lowerMapButton.style.bottom = '';\n }\n }\n\n if (lowerFloorButton) {\n if (window.innerWidth < 1200 &&\n (styleSelector.classList.contains('active') && !dollhouse.classList.contains('a-hidden'))) {\n lowerFloorButton.style.bottom = '110px';\n } else {\n lowerFloorButton.style.bottom = '';\n }\n }\n\n if ((stylesAvailable.length * 100) > (styleSelector.offsetWidth + 10)) {\n styleSelector.classList.add('right-arrow-visible');\n } else {\n styleSelector.classList.remove('right-arrow-visible');\n }\n };\n\n if (styleSelector) {\n let timeout = false;\n const delay = 250;\n window.addEventListener('resize', () => {\n clearTimeout(timeout);\n timeout = setTimeout(setProportions, delay);\n });\n }\n }\n },\n toggleStyleChange: function () {\n const sceneEl = this.el.sceneEl;\n const {\n miniMaps,\n dollHouses,\n } = this.data;\n const guideWrapper = document.querySelector('.guide-wrapper');\n const guideDecoroom = document.querySelector('.guide-decoroom-container');\n const styleSelector = document.querySelector('.style-selector-wrapper');\n const currentActive = document.querySelector('.current.current__active');\n const styleItems = document.querySelectorAll('.style-item');\n const floorPlanContainer = document.querySelector('.floor-plan-container');\n const fovSliderWrapper = document.querySelector('.fov-slider-wrapper');\n const floor0 = document.querySelector('.innerMap.floor-0 img');\n const floor1 = document.querySelector('.innerMap.floor-1 img');\n const floor2 = document.querySelector('.innerMap.floor-2 img');\n const dHfloor0 = document.querySelector('.dollhouse-view.floor-0');\n const dHfloor1 = document.querySelector('.dollhouse-view.floor-1');\n const dHfloor2 = document.querySelector('.dollhouse-view.floor-2');\n const innerMaps = document.querySelectorAll('.minimize .innerMap');\n const lowerMapButton = document.querySelector('.lower-floor-button');\n const stylesAvailable = document.querySelectorAll('.style-selector-wrapper .style-item');\n const ANIMATION = 'pulse-animation';\n const styleChangeButton = document.querySelector('.scene-menu__multi-style-button');\n const isTTDHavailable = document.querySelector('.iframe');\n const isExterior = window.location.href.includes('isExterior');\n const lowerFloorButton = document.querySelector('.previous-floor-btn');\n const dollhouse = document.querySelector('.dollhouse-container');\n const interiorDesigner = this.data.interiorDesigner;\n\n if ((floorPlanContainer.classList.contains('minimize') && !isTTDHavailable && !isExterior) || dollhouse?.classList.contains('a-hidden')) {\n const imagesWidth = [(floor0?.clientWidth ?? 0), (floor1?.clientWidth ?? 0), (floor2?.clientWidth ?? 0)];\n window.minimizeImage.maxWidth = Math.max(...imagesWidth);\n window.minimizeImage = {\n ...window.minimizeImage,\n maxHeight: currentActive?.clientHeight,\n };\n }\n\n if (styleSelector.classList.contains('active')) {\n styleChangeButton.classList.remove(ANIMATION);\n this.sendEventOnToggleStyleChange('OFF');\n } else {\n this.sendEventOnToggleStyleChange('ON');\n }\n\n if ((window.innerWidth <= 800 && !styleSelector.classList.contains('active')) && stylesAvailable.length > 1 && floorPlanContainer.classList.contains('minimize') && !isExterior) {\n innerMaps.forEach((map) => {\n map.style.bottom = `calc(100% - (${window.minimizeImage.maxHeight}px + 20px))`;\n });\n fovSliderWrapper.style.bottom = 'calc(100% - 210px)';\n } else {\n innerMaps.forEach((map) => {\n map.style.bottom = '';\n });\n fovSliderWrapper.style.bottom = '';\n }\n\n if (window.innerWidth > 800 && !isExterior) {\n if ((floorPlanContainer.classList.contains('blur') && !dollhouse?.classList.contains('a-hidden')) || isTTDHavailable) {\n const shoppingListContainer = document.querySelector('.shopping-list-container');\n let styleOffset;\n\n if (shoppingListContainer.classList.contains('active')) {\n styleOffset = 360 + 80;\n } else {\n styleOffset = 80;\n }\n\n styleSelector.style.maxWidth = `calc(100vw - ${styleOffset}px)`;\n } else if (window.innerWidth > 800 && window.innerWidth < 1000) {\n const shoppingListContainer = document.querySelector('.shopping-list-container');\n let shoppingOffset = '140px';\n\n if (shoppingListContainer && shoppingListContainer.classList.contains('active')) {\n shoppingOffset = `${460 - window.minimizeImage.maxWidth}px`;\n }\n styleSelector.style.maxWidth = `calc(100vw - (${window.minimizeImage.maxWidth}px + ${shoppingOffset}))`;\n } else {\n styleSelector.style.maxWidth = `calc(100vw - (${window.minimizeImage.maxWidth}px + 120px))`;\n }\n fovSliderWrapper.classList.toggle('opacity-0');\n }\n\n if (window.innerWidth <= 425 && styleSelector.classList.contains('active') && !isExterior) {\n innerMaps.forEach((map) => {\n map.classList.add('styles-wrapper-closed');\n });\n fovSliderWrapper.classList.add('styles-wrapper-closed');\n } else if (window.innerWidth <= 425 && !styleSelector.classList.contains('active')) {\n innerMaps.forEach((map) => {\n map.classList.remove('styles-wrapper-closed');\n });\n fovSliderWrapper.classList.remove('styles-wrapper-closed');\n }\n if (isExterior && !floorPlanContainer.classList.contains('blur')) {\n fovSliderWrapper.classList.toggle('a-hidden');\n }\n styleSelector.classList.toggle('active');\n styleSelector.classList.toggle('opacity-0');\n\n if (lowerMapButton) {\n if (window.innerWidth < 1200 && window.innerWidth > 769 &&\n (styleSelector.classList.contains('active') && floorPlanContainer.classList.contains('blur'))) {\n lowerMapButton.style.bottom = '190px';\n } else if (window.innerWidth < 769 &&\n (styleSelector.classList.contains('active') && floorPlanContainer.classList.contains('blur'))) {\n lowerMapButton.style.bottom = '130px';\n } else {\n lowerMapButton.style.bottom = '';\n }\n }\n\n if (lowerFloorButton) {\n if (window.innerWidth < 1200 &&\n (styleSelector.classList.contains('active') && !dollhouse.classList.contains('a-hidden'))) {\n lowerFloorButton.style.bottom = '110px';\n } else {\n lowerFloorButton.style.bottom = '';\n }\n }\n\n styleItems.forEach((item) => {\n item.addEventListener('click', (e) => {\n const currentShoppingProduct = document.querySelector('.shopping-list-container__single-product');\n const getPlaceholder = document.querySelector('.placeholder-screen');\n const isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;\n const iframe = document.querySelector('.iframe');\n const {\n index,\n style,\n group,\n designer,\n } = e.currentTarget.dataset;\n const currentIndex = Number(index);\n\n if (window.currentStyle.index === currentIndex) return;\n\n if (isMobile()) {\n sceneEl.style.filter = 'blur(14px)';\n } else if (!isMobile() && !isFirefox) {\n sceneEl.style.filter = 'blur(28px)';\n } else if (!isMobile() && isFirefox) {\n getPlaceholder.style.zIndex = '996';\n getPlaceholder.style.opacity = '1';\n }\n\n if (window.currentStyle.index !== currentIndex) {\n const deliveryStyleLogo = document.querySelector('.scene-menu__top__decoroom-wrapper');\n\n styleItems.forEach((item) => item.classList.remove('active'));\n e.currentTarget.classList.add('active');\n\n if (currentShoppingProduct) {\n const tags = document.querySelectorAll('.clickable.product');\n const shoppingListContainer = document.querySelector('.shopping-list-container');\n\n const disableAllTags = () => {\n tags.forEach((tag) => {\n tag.setAttribute('visible', false);\n });\n\n const hideShoppingList = () => {\n const leftBottomInterface = document.querySelector('.scene-menu__bottom');\n const styleSelectorControllerWrapper = document.querySelector('.style-selector-controlLer-wrapper');\n const styleSelectorWrapper = document.querySelector('.style-selector-wrapper');\n\n shoppingListContainer.classList.remove('active');\n shoppingListContainer.setAttribute('data-product-id', '');\n leftBottomInterface.style.left = '10px';\n styleSelectorControllerWrapper.style.left = '80px';\n styleSelectorWrapper.classList.remove('product-list-opened');\n\n if (window.innerWidth > 800) {\n styleSelectorWrapper.style.maxWidth = styleSelectorWrapper.dataset.maxWidth;\n }\n };\n\n if (shoppingListContainer && shoppingListContainer.classList.contains('active')) {\n hideShoppingList();\n }\n };\n\n const enableAllTags = () => {\n tags.forEach((tag) => {\n const showLabel = tag.getAttribute('data-label');\n tag.setAttribute('visible', showLabel);\n });\n };\n\n if (style !== 'Decoroom2') {\n disableAllTags();\n } else {\n enableAllTags();\n const productId = currentShoppingProduct.dataset.productId;\n const oldStyle = style;\n\n fetchAllProductsData(oldStyle);\n\n if (productId) fetchProductData(productId, true, oldStyle);\n }\n }\n\n this.sendEventOnStyleChange(window.currentStyle.name, style);\n window.currentStyle.index = currentIndex;\n window.currentStyle.name = style;\n window.currentStyle.group = group;\n sceneEl.emit(CustomEvents.STYLE_CHANGE);\n\n if (deliveryStyleLogo && interiorDesigner) {\n if (designer === interiorDesigner) {\n if (localStorageAvailable()) {\n const alreadySeenStyle = JSON.parse(localStorage.getItem('seenDecoroomStyle'));\n\n if (!alreadySeenStyle) {\n guideWrapper.classList.remove('a-hidden');\n setTimeout(() => {\n guideDecoroom.classList.remove('opacity-0');\n }, 50);\n localStorage.setItem('seenDecoroomStyle', 'true');\n }\n }\n\n deliveryStyleLogo.classList.add('active');\n } else {\n deliveryStyleLogo.classList.remove('active');\n }\n }\n\n if (floor0) {\n floor0.src = miniMaps[0].miniMapRenderStyles[currentIndex].url;\n }\n if (dHfloor0) {\n dHfloor0.src = dollHouses[0].dollHouseRenderStyles[currentIndex].url;\n }\n\n if (floor1) {\n floor1.src = miniMaps[1].miniMapRenderStyles[currentIndex].url;\n }\n if (dHfloor1) {\n dHfloor1.src = dollHouses[1].dollHouseRenderStyles[currentIndex].url;\n }\n\n if (floor2) {\n floor2.src = miniMaps[2].miniMapRenderStyles[currentIndex].url;\n }\n if (dHfloor2) {\n dHfloor2.src = dollHouses[2].dollHouseRenderStyles[currentIndex].url;\n }\n\n if (iframe && styleSelector) {\n const getLang = document.querySelector('.scene-menu__bottom').getAttribute('id');\n\n const srcLengthWihtoutStyle = iframe.src.indexOf('&style=');\n const convertedSrc = iframe.src.substr(0, srcLengthWihtoutStyle);\n iframe.src = `${convertedSrc}&style=${window.currentStyle.name}${getLang ? `&lang=${getLang}` : ''}`;\n }\n }\n });\n });\n\n const onToggleStyleArrowSet = () => {\n const styleContainer = document.querySelector('.style-selector-container');\n if (!styleContainer) return;\n\n const availableStylesWidth = (stylesAvailable.length * 100);\n\n if (availableStylesWidth > styleContainer.offsetWidth + 10) {\n styleSelector.classList.add('right-arrow-visible');\n }\n };\n\n onToggleStyleArrowSet();\n },\n toggleDollhouseVisibility: function () {\n const minimapButton = document.querySelector('.scene-menu__map-button');\n const {\n featureLoader,\n dollhouseResources,\n startingFloor,\n floorTranslate,\n } = this.data;\n const styleSelector = document.querySelector('.style-selector-wrapper');\n const sceneElement = this.el.sceneEl;\n const MINIMIZE_CLASS = 'minimize';\n const cameraRig = document.getElementById('camera-rig');\n const cameraEl = document.getElementById('camera');\n const minimap = document.querySelector('.floor-plan-container');\n const minimize = minimap.className.split(' ').includes(MINIMIZE_CLASS);\n const fovSliderWrapper = document.querySelector('.fov-slider-wrapper');\n\n fovSliderWrapper.classList.add('a-hidden');\n\n if (!minimize) {\n minimap.classList.toggle('a-hidden');\n minimap.classList.remove('blur');\n minimap.classList.add('minimize');\n minimapButton.classList.remove('on');\n } else {\n minimap.classList.toggle('a-hidden');\n // hide styleSelector when ttdh/dh is turned on\n if (styleSelector?.classList.contains('active')) {\n const currentMaxHeight = window.minimizeImage.maxHeight;\n this.toggleStyleChange();\n window.minimizeImage.maxHeight = currentMaxHeight;\n }\n }\n\n if (cameraEl && isMobile()) {\n sceneElement.emit(CustomEvents.GYROSCOPE_OFF);\n } else {\n sceneElement.emit(CustomEvents.AUTO_ROTATE_OFF);\n cameraRig.setAttribute('auto-rotate', {\n enabled: false,\n mode: 'off',\n });\n }\n\n if (featureLoader.turntableDollHouse) {\n turntableDollhouse(sceneElement);\n } else {\n dollhouse(featureLoader, dollhouseResources, startingFloor, sceneElement, floorTranslate);\n }\n },\n toggleMapVisibility: function () {\n const sceneEl = this.el.sceneEl;\n const minimapButton = document.querySelector('.scene-menu__map-button');\n const mapContainer = document.querySelector('.floor-plan-container');\n const iframeWrapper = document.querySelector('.iframe-wrapper');\n const iframe = document.querySelector('.iframe');\n const closeButton = document.querySelector('.close-button');\n const styleSelector = document.querySelector('.style-selector-wrapper');\n const A_HIDDEN = 'a-hidden';\n const stylesAvailable = document.querySelectorAll('.style-selector-wrapper .style-item');\n const hidden = mapContainer.className.split(' ').includes(A_HIDDEN);\n const dollhouse = document.querySelector('.dollhouse-container');\n const dollhouseButton = document.querySelector('.scene-menu__dollhouse-button');\n const upperMapButton = document.querySelector('.upper-floor-button');\n const lowerMapButton = document.querySelector('.lower-floor-button');\n const hideMinimapButton = document.querySelector('.hide-minimap-button');\n const cameraRig = document.getElementById('camera-rig');\n const fovSlider = document.querySelector('.fov-slider-wrapper');\n const innerMaps = document.querySelectorAll('.innerMap');\n const isExterior = window.location.href.includes('isExterior');\n const multiStyleButton = document.querySelector('.scene-menu__multi-style-button');\n const shoppingListContainer = document.querySelector('.shopping-list-container');\n const leftBottomInterface = document.querySelector('.scene-menu__bottom');\n const styleSelectorControllerWrapper = document.querySelector('.style-selector-controlLer-wrapper');\n\n cameraRig.setAttribute('auto-rotate', {\n enabled: false,\n mode: 'off',\n });\n\n if (mapContainer.classList.contains(A_HIDDEN)) {\n mapContainer.classList.remove(A_HIDDEN);\n mapContainer.style.opacity = '1';\n }\n\n if (hidden && dollhouse) {\n fovSlider.classList.add(A_HIDDEN);\n if (!dollhouse.classList.contains(A_HIDDEN)) {\n dollhouse.classList.add(A_HIDDEN);\n dollhouseButton.classList.remove('on');\n fovSlider.classList.remove(A_HIDDEN);\n }\n }\n\n if (mapContainer.classList.contains('minimize')) {\n sceneEl.emit(CustomEvents.MINIMAP_SHOW);\n\n if (shoppingListContainer && shoppingListContainer.classList.contains('active')) {\n const productsDropDown = document.querySelector('.products-drop-down');\n\n shoppingListContainer.setAttribute('data-product-id', '');\n shoppingListContainer.classList.remove('active');\n leftBottomInterface.style.left = '10px';\n if (styleSelector) {\n styleSelectorControllerWrapper.style.left = '80px';\n styleSelector.classList.remove('product-list-opened');\n }\n productsDropDown.classList.remove('active');\n }\n\n if (styleSelector && !isExterior) {\n // hide styleSelector when minimap is turned on\n if (styleSelector.classList.contains('active') && !iframeWrapper) {\n this.toggleStyleChange();\n }\n\n const shoppingListContainer = document.querySelector('.shopping-list-container');\n let styleOffset;\n\n if (shoppingListContainer && shoppingListContainer.classList.contains('active')) {\n styleOffset = 360 + 80;\n } else {\n styleOffset = 80;\n }\n\n styleSelector.style.maxWidth = `calc(100vw - ${styleOffset}px)`;\n innerMaps.forEach((map) => {\n map.style.bottom = '';\n });\n }\n } else {\n sceneEl.emit(CustomEvents.MINIMAP_HIDE);\n if (styleSelector && !isExterior) {\n styleSelector.style.maxWidth = `calc(100vw - (${window.minimizeImage.maxWidth}px + 120px))`;\n if (innerWidth < 800 && styleSelector.classList.contains('active') && stylesAvailable.length > 1) {\n innerMaps.forEach((map) => {\n map.style.bottom = `calc(100% - (${window.minimizeImage.maxHeight}px + 20px))`;\n });\n fovSlider.style.bottom = 'calc(100% - 210px)';\n }\n }\n }\n\n if (hideMinimapButton?.classList.contains('on')) {\n const floorButtons = document.querySelectorAll('.floor-btn');\n const floorplanSpots = document.querySelectorAll('.floor-plan-spot');\n const radars = document.querySelectorAll('#floor-plan-spot-radar');\n\n innerMaps.forEach((innerMap) => innerMap.classList.toggle('minimap-hide'));\n floorButtons.forEach((btn) => btn.classList.toggle('minimap-hide'));\n floorplanSpots.forEach((spot) => spot.classList.toggle(A_HIDDEN));\n radars.forEach((radar) => radar.classList.toggle(A_HIDDEN));\n return hideMinimapButton.classList.toggle('on');\n }\n\n if ((upperMapButton && lowerMapButton)) {\n if (window.innerWidth < 1200 &&\n (styleSelector?.classList.contains('active') && !mapContainer.classList.contains('blur')) && stylesAvailable.length > 1) {\n lowerMapButton.style.bottom = '110px';\n } else {\n lowerMapButton.style.bottom = '';\n }\n upperMapButton.classList.add('temporary-hide');\n lowerMapButton.classList.add('temporary-hide');\n hideMinimapButton.classList.add('temporary-hide');\n const clearHide = setTimeout(() => {\n upperMapButton.classList.remove('temporary-hide');\n lowerMapButton.classList.remove('temporary-hide');\n hideMinimapButton.classList.remove('temporary-hide');\n clearTimeout(clearHide);\n }, 500);\n }\n\n // remove(aka hide) when open map on opened dollhouse\n if (iframeWrapper && hidden) {\n iframeWrapper.style.opacity = '0';\n\n const removeIframe = setTimeout(() => {\n iframeWrapper.removeChild(iframe);\n iframeWrapper.removeChild(closeButton);\n document.body.removeChild(iframeWrapper);\n clearTimeout(removeIframe);\n }, 200);\n multiStyleButton?.classList.toggle('absolute-top');\n dollhouseButton.classList.remove(TOGGLE_CLASS_ON);\n dollhouseButton.classList.remove(A_HIDDEN);\n fovSlider.classList.toggle(A_HIDDEN);\n }\n\n if (mapContainer.classList.contains('is-exterior')) {\n if (mapContainer.classList.contains('blur')) {\n mapContainer.classList.toggle('blur');\n mapContainer.classList.toggle('minimize');\n mapContainer.style.display = 'block';\n mapContainer.style.opacity = '0';\n setTimeout(() => {\n mapContainer.style.display = 'none';\n }, 300);\n } else {\n mapContainer.style.display = 'block';\n mapContainer.style.opacity = '0';\n mapContainer.classList.toggle('minimize');\n mapContainer.classList.toggle('blur');\n\n setTimeout(() => {\n mapContainer.style.opacity = '1';\n }, 10);\n }\n } else {\n mapContainer.classList.toggle('minimize');\n mapContainer.classList.toggle('blur');\n }\n\n if (isExterior && !styleSelector?.classList.contains('active')) {\n fovSlider.classList.toggle(A_HIDDEN);\n } else if (!isExterior) {\n fovSlider.classList.toggle(A_HIDDEN);\n }\n minimapButton.classList.toggle('on');\n\n if (mapContainer.classList.contains('blur')) {\n setTimeout(() => {\n innerMaps.forEach((innerMap) => innerMap.classList.add('transition'));\n }, 100);\n } else {\n innerMaps.forEach((innerMap) => innerMap.classList.remove('transition'));\n }\n\n const onToggleMiniMapArrowSet = () => {\n const styleContainer = document.querySelector('.style-selector-container');\n if (!styleContainer) return;\n const availableStylesWidth = (stylesAvailable.length * 100);\n\n if (availableStylesWidth > styleContainer.offsetWidth + 10) {\n styleSelector.classList.add('right-arrow-visible');\n } else {\n styleSelector.classList.remove('right-arrow-visible');\n }\n };\n\n onToggleMiniMapArrowSet();\n },\n enterFullscreenMode: function () {\n const sceneEl = this.el.sceneEl;\n const element = document.querySelector('body');\n const options = { navigationUI: 'hide' };\n const requestFullscreen =\n element.requestFullscreen ||\n element.webkitRequestFullscreen ||\n element.mozRequestFullScreen;\n requestFullscreen.apply(element, [options]);\n\n sceneEl.emit(CustomEvents.ENTER_FULLSCREEN);\n },\n exitFullscreenMode: function () {\n const sceneEl = this.el.sceneEl;\n\n if (!document.fullscreenElement && !document.webkitFullscreenElement && !document.mozFullScreenElement) {\n return;\n }\n\n if (typeof document.exitFullscreen !== 'undefined') {\n document.exitFullscreen();\n } else if (typeof document.webkitExitFullscreen !== 'undefined') {\n document.webkitExitFullscreen();\n } else if (typeof document.mozCancelFullScreen !== 'undefined') {\n document.mozCancelFullScreen();\n }\n sceneEl.emit(CustomEvents.EXIT_FULLSCREEN);\n },\n onOrientationChange: function () {\n const sceneEl = this.el.sceneEl;\n\n if (sceneEl.is('vr-mode')) {\n return;\n }\n\n if (isLandscape()) {\n this.enterFullscreenMode();\n } else {\n this.exitFullscreenMode();\n /* Workaround to let user show the address bar */\n sceneEl.emit('show-overlay');\n }\n },\n toggleFullscreenMode: function () {\n if ((typeof document.fullscreenElement !== 'undefined' && !document.fullscreenElement) ||\n (typeof document.webkitFullscreenElement !== 'undefined' && !document.webkitFullscreenElement)\n ) {\n this.enterFullscreenMode();\n } else {\n this.exitFullscreenMode();\n }\n },\n toggleAutoRotate: function () {\n const sceneEl = this.el.sceneEl;\n const cameraRig = document.getElementById('camera-rig');\n if (cameraRig) {\n const enabled = cameraRig.getAttribute('auto-rotate').enabled;\n if (!enabled) {\n sceneEl.emit(CustomEvents.AUTO_ROTATE_ON);\n cameraRig.setAttribute('auto-rotate', {\n enabled: true,\n mode: 'on',\n });\n } else {\n sceneEl.emit(CustomEvents.AUTO_ROTATE_OFF);\n cameraRig.setAttribute('auto-rotate', {\n enabled: false,\n mode: 'off',\n });\n }\n }\n },\n toggleGyroscopeInput: function () {\n const sceneEl = this.el.sceneEl;\n const cameraEl = document.getElementById('camera');\n if (cameraEl) {\n const enabled = cameraEl.getAttribute('3destate-look-controls').hmdEnabled;\n const eventName = enabled ? CustomEvents.GYROSCOPE_OFF : CustomEvents.GYROSCOPE_ON;\n sceneEl.emit(eventName);\n }\n },\n closeMapWithKey: function () {\n document.addEventListener('keyup', (e) => {\n if (e.key === 'Escape') {\n const minimap = document.querySelector('.floor-plan-container');\n if (minimap.classList.contains('blur')) {\n this.toggleMapVisibility();\n }\n }\n });\n },\n showShareModal: function () {\n const sceneEl = this.el.sceneEl;\n sceneEl.emit(CustomEvents.OPEN_SHARE_MODAL);\n\n MicroModal.show('share-to-social', {\n awaitCloseAnimation: true,\n });\n },\n showRateApartmentModal: function () {\n const sceneEl = this.el.sceneEl;\n sceneEl.emit(CustomEvents.OPEN_RATE_MODAL);\n\n MicroModal.show('rate-apartment-modal', {\n awaitCloseAnimation: true,\n });\n },\n sendEventOnStyleChange: function (prevStyle, currStyle) {\n ga('app3dEstate.send', {\n hitType: 'event',\n eventCategory: 'Style change',\n eventAction: 'click',\n eventLabel: `Changed style from ${prevStyle} to ${currStyle}`,\n });\n },\n sendEventOnToggleStyleChange: function (mode) {\n ga('app3dEstate.send', {\n hitType: 'event',\n eventCategory: 'Style change',\n eventAction: 'click',\n eventLabel: `Turn ${mode} styles`,\n });\n },\n});\n","export default AFRAME.registerComponent('has-hover', {\n /* This component prevents hover animation on Mobile\n It's incorrectly applied to desktop for now */\n init: function () {\n const isMobile = AFRAME.utils.device.isMobile();\n if (!isMobile) {\n document.body.classList.add('has-hover');\n }\n },\n});\n","const KEYCODE_TO_CODE = {\n 38: 'ArrowUp',\n 37: 'ArrowLeft',\n 40: 'ArrowDown',\n 39: 'ArrowRight',\n 87: 'KeyW',\n 65: 'KeyA',\n 83: 'KeyS',\n 68: 'KeyD',\n};\nexport default KEYCODE_TO_CODE;\n","/**\n * Faster version of Function.prototype.bind\n * @param {Function} fn - Function to wrap.\n * @param {Object} ctx - What to bind as context.\n * @param {...*} arguments - Arguments to pass through.\n */\nexport default function bind (fn, ctx/* , arg1, arg2 */) {\n return (function (prependedArgs) {\n return function bound () {\n // Concat the bound function arguments with those passed to original bind\n var args = prependedArgs.concat(Array.prototype.slice.call(arguments, 0));\n return fn.apply(ctx, args);\n };\n })(Array.prototype.slice.call(arguments, 2));\n}\n","import KEYCODE_TO_CODE from './utils/keyCodeToCode';\nimport bind from './utils/bind';\n\nconst KEYS = Object.values(KEYCODE_TO_CODE);\n\nexport default AFRAME.registerComponent('detect-idle-user', {\n /* Component detects if user is idle (is moving in the scene by dragging).\n Another component will rotate the camera, so it can't use camera rotation\n to detect if user is idle. */\n schema: {\n timeout: { type: 'number', default: 45000 },\n },\n init: function () {\n const isMobile = AFRAME.utils.device.isMobile();\n const isIpadNewOs = /Macintosh/.test(navigator.userAgent) && 'ontouchend' in document;\n\n this.bindMethods();\n\n /* start idle countdown after loading screen is hidden */\n if (!isMobile && !isIpadNewOs && !window.location.href.includes('isExterior')) {\n this.el.sceneEl.addEventListener('guide-hidden', () => this.setup());\n }\n },\n bindMethods () {\n this.addEventListeners = bind(this.addEventListeners, this);\n this.resetTimerOnCameraMove = bind(this.resetTimerOnCameraMove, this);\n this.resetTimer = bind(this.resetTimer, this);\n this.startTimer = bind(this.startTimer, this);\n this.onKeyboardEvent = bind(this.onKeyboardEvent, this);\n },\n setup: function () {\n this.startTimer();\n this.cameraMoves = false;\n this.addEventListeners();\n },\n addEventListeners: function () {\n window.addEventListener('mousedown', () => { this.cameraMoves = true; });\n window.addEventListener('mouseup', () => { this.cameraMoves = false; });\n window.addEventListener('keydown', (event) => this.onKeyboardEvent(event, true));\n window.addEventListener('keyup', (event) => this.onKeyboardEvent(event, false));\n window.addEventListener('mousemove', this.resetTimerOnCameraMove);\n window.addEventListener('keydown', this.resetTimerOnCameraMove);\n },\n startTimer: function () {\n const cameraRig = document.getElementById('camera-rig');\n const data = this.data;\n this.timeoutID = setTimeout(() => {\n if (cameraRig) {\n cameraRig.setAttribute('auto-rotate', { enabled: true, mode: 'on' });\n }\n }, data.timeout);\n },\n resetTimer: function () {\n const cameraRig = document.getElementById('camera-rig');\n if (cameraRig) {\n cameraRig.setAttribute('auto-rotate', { enabled: false, mode: 'off' });\n }\n window.clearTimeout(this.timeoutID);\n this.startTimer();\n },\n resetTimerOnCameraMove: function () {\n if (this.cameraMoves) {\n this.resetTimer();\n }\n },\n onKeyboardEvent: function (event, cameraMoves) {\n const code = event.code || KEYCODE_TO_CODE[event.keyCode];\n\n if (KEYS.includes(code)) {\n this.cameraMoves = cameraMoves;\n }\n },\n});\n","export default AFRAME.registerComponent('exit-fullscreen-exit-vr', {\n init: function () {\n const isMobile = AFRAME.utils.device.isMobile();\n if (!isMobile) return;\n document.addEventListener('exit-vr', this.removeCursor);\n },\n removeCursor: function () {\n const camera = document.getElementById('camera');\n const cursor = document.getElementById('cursor');\n if (camera && cursor) {\n camera.removeChild(cursor);\n camera.setAttribute('raycaster', { objects: '.clickable' });\n camera.setAttribute('cursor', { rayOrigin: 'mouse', fuse: false });\n }\n },\n});\n","import {\n CustomEvents,\n FIRST_ROOM_NAME,\n} from './shared/constants';\nimport Detector from './utils/webgl-detector';\nimport { isMobile } from '../utils/device';\n\nexport default AFRAME.registerComponent('cubemap-sky', {\n schema: {\n src: { type: 'string' },\n cubemapData: {\n parse: JSON.parse,\n stringify: JSON.stringify,\n },\n lastClickedRoom: {\n type: 'string',\n },\n smartModelDomains: { type: 'array' },\n balconyStartView: { type: 'number' },\n },\n init: function () {\n const sceneEl = this.el.sceneEl;\n const data = this.data;\n\n sceneEl.style.transition = 'filter 200ms ease-in-out';\n\n this.cubemapLoader = new THREE.CubeTextureLoader();\n this.bindMethods();\n\n if (window.location.href.includes('isExterior=true')) {\n const firstBalcony = [];\n data.cubemapData.forEach(({ cameraId, isBalconyViewEnabled }) => {\n if (isBalconyViewEnabled && cameraId === Number(data.src)) {\n return firstBalcony.unshift(cameraId);\n }\n\n if (isBalconyViewEnabled) {\n return firstBalcony.push(cameraId);\n }\n });\n\n sceneEl.addEventListener(CustomEvents.MINIMUM_LOADED, () => this.loadCubemap(firstBalcony[0]));\n window.tour = { isExterior: true };\n } else {\n sceneEl.addEventListener(CustomEvents.MINIMUM_LOADED, () => this.loadCubemap(FIRST_ROOM_NAME));\n window.tour = { isExterior: false };\n }\n },\n update: function (oldData) {\n const sceneEl = this.el.sceneEl;\n const data = this.data;\n\n const cameraRig = document.getElementById('camera-rig');\n\n sceneEl.addEventListener(CustomEvents.STYLE_CHANGE, () => {\n this.loadCubemap(data.src);\n this.loadingAnimation(true);\n });\n\n if (oldData.src && data.src !== oldData.src) {\n this.loadCubemap(data.src);\n this.loadingAnimation(true);\n }\n\n const temporaryDomainList = ['franciszkanskiepoludnie', 'lokum-porto', 'lokum-verde', 'mieszkajwmiescie', 'nowy-tarchomin', '3destate.app', 'localhost', ...data.smartModelDomains];\n\n const parentUrl = (window.location !== window.parent.location)\n ? document.referrer\n : document.location.href;\n let domainIsAvailableName;\n\n temporaryDomainList.forEach((el) => {\n if (parentUrl.includes(el) || el === 'victoriadom.pl' || el === 'allmyhomes.com') {\n domainIsAvailableName = el;\n }\n });\n\n // Temporary added to listen changes from exterior and react\n window.addEventListener('message', (event) => {\n if (!event.origin.includes(domainIsAvailableName)) {\n return;\n }\n console.log('event.data - cubemap', event.data);\n\n if (event.data?.parentCall && event.data?.isExterior) {\n const exteriorsArray = [];\n const result = data.balconyStartView - window.tourRotationY;\n\n data.cubemapData.map(({ cameraId, isBalconyViewEnabled }) => {\n if (isBalconyViewEnabled && cameraId === data.src) {\n return exteriorsArray.unshift(cameraId);\n }\n\n if (isBalconyViewEnabled) {\n return exteriorsArray.push(cameraId);\n }\n });\n\n this.loadCubemap(exteriorsArray[0]);\n data.src = `${exteriorsArray[0]}`;\n window.tour = { isExterior: true };\n setTimeout(() => {\n cameraRig.setAttribute('rotation', `0 ${result} 0`);\n }, 100);\n } else if (event.data?.parentCall && !event.data?.isExterior) {\n const interiorArray = [];\n data.cubemapData.map(({ cameraId, isBalconyViewEnabled }) => {\n if (!isBalconyViewEnabled) {\n return interiorArray.push(cameraId);\n }\n });\n\n this.loadCubemap(interiorArray[0]);\n data.src = `${interiorArray[0]}`;\n window.tour = { isExterior: false };\n }\n }, false);\n },\n bindMethods: function () {\n this.loadCubemap = this.loadCubemap.bind(this);\n this.setCubemap = this.setCubemap.bind(this);\n this.getUrlsByName = this.getUrlsByName.bind(this);\n this.onCubemapLoadingError = this.onCubemapLoadingError.bind(this);\n this.loadingAnimation = this.loadingAnimation.bind(this);\n },\n loadingAnimation: function (actionType) {\n const loaderAnimation = document.querySelector('.loader-animation-placeholder-wrapper');\n\n if (actionType) {\n loaderAnimation.style.zIndex = '99999999999';\n loaderAnimation.style.transition = 'opacity 200ms ease-in-out 2s';\n loaderAnimation.style.display = 'flex';\n setTimeout(() => {\n loaderAnimation.style.opacity = '1';\n }, 50);\n } else {\n loaderAnimation.style.transition = 'none';\n loaderAnimation.style.display = 'none';\n loaderAnimation.style.opacity = '0';\n loaderAnimation.style.zIndex = '-100';\n }\n },\n loadCubemap: function (name) {\n const urls = this.getUrlsByName(name);\n\n const cubemap = this.cubemapLoader.load(urls, this.setCubemap, null, this.onCubemapLoadingError);\n cubemap.encoding = THREE.sRGBEncoding;\n\n if (!Detector.OESTextureFloatLinearSupport) {\n cubemap.minFilter = THREE.LinearFilter;\n cubemap.magFilter = THREE.LinearFilter;\n }\n },\n setCubemap: function (texture) {\n const scene = this.el.sceneEl.object3D;\n const oldCubemap = scene.background;\n const sceneEl = this.el.sceneEl;\n const getPlaceholder = document.querySelector('.placeholder-screen');\n const isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;\n\n if (oldCubemap) {\n oldCubemap.dispose();\n }\n scene.background = texture;\n\n const delay = setTimeout(() => {\n if (!isMobile() && isFirefox) {\n getPlaceholder.style.opacity = '0';\n getPlaceholder.style.zIndex = '-1';\n } else {\n sceneEl.style.filter = 'blur(0px)';\n }\n this.loadingAnimation(false);\n clearTimeout(delay);\n }, 200);\n },\n getUrlsByName: function (name) {\n const data = this.data;\n return data.cubemapData[name - 1]\n .cubeMapFilesArray[window.currentStyle.index].files\n .map(link => `${link}`);\n },\n onCubemapLoadingError: function () {\n const sceneEl = this.el.sceneEl;\n sceneEl.setAttribute('loading-screen-handler', { status: 'error' });\n },\n});\n","import { CustomEvents } from './shared/constants';\n\nAFRAME.registerComponent('animate-until-loaded', {\n /*\n Component fires clicked-and-loaded event instead of regular click - only when target\n room is loaded. It ignores previosly clicked rooms, so the user can change his mind\n and use the tour freely.\n */\n schema: {\n on: { type: 'string' },\n room: { type: 'string' },\n },\n init: function () {\n const el = this.el;\n const data = this.data;\n\n this.handleClick = this.handleClick.bind(this);\n this.setupLoader();\n el.addEventListener(data.on, this.handleClick);\n },\n setupLoader: function () {\n /* Show loading if room isn't loaded yet */\n\n const data = this.data;\n const cubemapSky = document.getElementById('cubemap-sky');\n const roomStatus = cubemapSky\n .getAttribute('room-status')\n .rooms[data.room].status;\n if (roomStatus !== 'loaded') {\n const linkLoader = document.querySelector(`.link-loader-${data.room}`);\n if (linkLoader) {\n linkLoader.setAttribute('visible', true);\n }\n }\n\n /* Hide loader when room is loaded */\n\n cubemapSky.addEventListener(`room-${data.room}-loaded`, function onRoomLoad () {\n const linkLoader = document.querySelector(`.link-loader-${data.room}`);\n if (linkLoader) {\n linkLoader.setAttribute('visible', false);\n }\n });\n },\n handleClick: function () {\n const el = this.el;\n const data = this.data;\n const cubemapSky = document.getElementById('cubemap-sky');\n const roomStatus = cubemapSky\n .getAttribute('room-status')\n .rooms[data.room].status;\n\n cubemapSky.setAttribute('cubemap-sky', { lastClickedRoom: data.room });\n\n if (roomStatus === 'loaded') {\n el.emit(CustomEvents.CLICKED_AND_LOADED);\n } else {\n cubemapSky.addEventListener(`room-${data.room}-loaded`, onRoomLoad);\n }\n\n function onRoomLoad () {\n const lastClickedRoom = cubemapSky.getAttribute('cubemap-sky').lastClickedRoom;\n if (lastClickedRoom === data.room) {\n el.emit(CustomEvents.CLICKED_AND_LOADED);\n }\n }\n },\n});\n","import { Durations } from './shared/constants';\nimport { isMobile } from '../utils/device';\n\nexport default AFRAME.registerComponent('set-image', {\n schema: {\n on: { type: 'string' },\n target: { type: 'selector' },\n src: { type: 'string' },\n },\n init: function () {\n const data = this.data;\n const el = this.el;\n el.addEventListener(data.on, function () {\n if (isMobile()) {\n Durations.BLINK_ANIMATION = 200;\n }\n\n setTimeout(\n () => data.target.setAttribute('cubemap-sky', { src: data.src }),\n Durations.BLINK_ANIMATION,\n );\n });\n },\n});\n","export default AFRAME.registerComponent('set-link', {\n schema: {\n on: { type: 'string' },\n target: { type: 'selector' },\n src: { type: 'string' },\n },\n init: function () {\n const el = this.el;\n const data = this.data;\n const cubemapSky = document.getElementById('cubemap-sky');\n const { cubemapData, smartModelDomains } = cubemapSky.getAttribute('cubemap-sky');\n const temporaryDomainList = ['franciszkanskiepoludnie', 'lokum-porto', 'lokum-verde', 'mieszkajwmiescie', 'nowy-tarchomin', '3destate.app', 'localhost', ...smartModelDomains];\n const parentUrl = (window.location !== window.parent.location)\n ? document.referrer\n : document.location.href;\n let domainIsAvailableName;\n\n temporaryDomainList.forEach((el) => {\n if (parentUrl.includes(el) || el === 'victoriadom.pl' || el === 'allmyhomes.com') {\n domainIsAvailableName = el;\n }\n });\n // Temporary added to listen changes from exterior and react\n window.addEventListener('message', (event) => {\n if (!event.origin.includes(domainIsAvailableName)) { return; }\n // IS EXTERIOR and CLICKED from PARENT DOMAIN\n if (cubemapData && (event.data?.parentCall && event.data?.isExterior)) {\n const exteriorsArray = [];\n cubemapData.map(({ isBalconyViewEnabled, cameraId }) => {\n if (isBalconyViewEnabled) {\n return exteriorsArray.push(cameraId);\n }\n });\n data.target.setAttribute('link-manager', { active: exteriorsArray[0] });\n // IS NOT EXTERIOR and CLICKED from PARENT DOMAIN\n } else if (cubemapData && (event.data?.parentCall && !event.data?.isExterior)) {\n const exteriorsArray = [];\n cubemapData.map(({ isBalconyViewEnabled, cameraId }) => {\n if (!isBalconyViewEnabled) {\n return exteriorsArray.push(cameraId);\n }\n });\n data.target.setAttribute('link-manager', { active: exteriorsArray[0] });\n }\n }, false);\n\n el.addEventListener(data.on, function () {\n /* fire only if needed! */\n if (data.src === data.target.getAttribute('link-manager').active) return;\n /* above just temporary fix */\n data.target.setAttribute('link-manager', { active: data.src });\n });\n },\n});\n","export default AFRAME.registerComponent('minimap-resizer', {\n /* Resizes minimap elements */\n schema: {\n src: {\n parse: JSON.parse,\n stringify: JSON.stringify,\n },\n loading: { type: 'boolean', default: true },\n startingFloor: { type: 'number', default: 0 },\n floorTranslate: { type: 'string' },\n },\n init: function () {\n const { src, startingFloor } = this.data;\n const sceneEl = this.el.sceneEl;\n const mapContainer = document.querySelector('.floor-plan-container');\n const innerMap = document.querySelectorAll('.innerMap');\n const reversedInnerMap = Array.from(innerMap).reverse();\n const dataStartingFloor = startingFloor <= 0 ? 0 : startingFloor;\n\n if (JSON.stringify(startingFloor)) {\n window.floor = {\n currentFloor: startingFloor,\n startingFloor,\n currentMiniMapFloor: startingFloor,\n };\n }\n\n this.handleMinimapAnimation = this.handleMinimapAnimation.bind(this);\n this.handleToggleHideMinimap = this.handleToggleHideMinimap.bind(this);\n sceneEl.addEventListener('loader-hiding', this.handleMinimapAnimation);\n const isSafari = /apple/i.test(navigator.vendor);\n const isAndroid = /(android)/i.test(navigator.userAgent);\n\n const countRatio = (height, width) => {\n const divideHeightThroughWidth = height / width;\n const convertedToInteger = divideHeightThroughWidth.toFixed(2) * 100;\n let result = '_';\n\n if (convertedToInteger >= 15 && convertedToInteger <= 20) {\n result = 'ultra-wide__impossible-seriously';\n } else if (convertedToInteger > 20 && convertedToInteger <= 25) {\n result = 'ultra-wide__impossible';\n } else if (convertedToInteger > 25 && convertedToInteger <= 35) {\n result = 'ultra-wide__crazy-sick';\n } else if (convertedToInteger > 35 && convertedToInteger <= 47) {\n result = 'ultra-wide__sick';\n } else if (convertedToInteger > 47 && convertedToInteger <= 60) {\n result = 'ultra-wide';\n } else if (convertedToInteger > 60 && convertedToInteger <= 70) {\n result = 'ultra-wide__lite';\n } else if (convertedToInteger > 70 && convertedToInteger <= 85) {\n result = 'ultra-wide__extra-lite';\n } else if (convertedToInteger > 95 && convertedToInteger <= 110) {\n result = 'square-like';\n } else if (convertedToInteger > 170 && convertedToInteger <= 230) {\n result = 'tall';\n }\n\n return result;\n };\n\n const debugRatio = (width, height, idx) => {\n console.table({\n width,\n height,\n divided: (Number((height / width).toFixed(2))),\n status: countRatio(height, width),\n link: window.location.href,\n imageFloor: idx,\n });\n };\n\n reversedInnerMap.forEach((node, index) => {\n this.img = new Image();\n this.img.src = src[index][window.currentStyle.index].url;\n this.img.classList.add('floor-plan-image');\n this.img.classList.add(`floor-plan-image__floor-${index}`);\n if (isSafari) {\n this.img.classList.add('is-safari');\n }\n if (isAndroid) {\n this.img.classList.add('is-android');\n }\n this.img.setAttribute('alt', 'Minimapa');\n this.img.classList.add('opacity-0');\n reversedInnerMap[index].appendChild(this.img);\n\n if (index === dataStartingFloor) {\n this.img.onload = function () {\n debugRatio(this.width, this.height, index);\n node.classList.add(countRatio(this.height, this.width));\n\n mapContainer.classList.remove('blur');\n sceneEl.setAttribute('loading-screen-handler', { minimapLoaded: true });\n sceneEl.emit('minimap-loaded');\n\n const foorplanImages = document.querySelectorAll('.floor-plan-image');\n const floorplanSpots = document.querySelectorAll('.floor-plan-spot');\n const radars = document.querySelectorAll('#floor-plan-spot-radar');\n const loaderRings = document.querySelectorAll('.loader-ring');\n foorplanImages.forEach((floorplan) => floorplan.classList.remove('opacity-0'));\n floorplanSpots.forEach((spot) => spot.classList.toggle('a-hidden'));\n loaderRings.forEach((ring) => ring.classList.remove('a-hidden'));\n radars.forEach((radar) => radar.classList.remove('opacity-0'));\n };\n }\n\n if (index !== dataStartingFloor) {\n this.img.onload = function () {\n debugRatio(this.width, this.height, index);\n node.classList.add(countRatio(this.height, this.width));\n };\n }\n });\n\n if (src.length > 1) {\n this.tempButtonMinimap();\n }\n\n const hideMinimapButton = document.querySelector('.hide-minimap-button');\n hideMinimapButton?.addEventListener('click', this.handleToggleHideMinimap);\n },\n handlerCounterImageRatio: function (height, width) {\n const divideHeightThroughWidth = height / width;\n const convertedToInteger = divideHeightThroughWidth.toFixed(2) * 100;\n let result = 384;\n\n switch (true) {\n case (convertedToInteger >= 15 && convertedToInteger <= 20):\n result = 100;\n break;\n case (convertedToInteger > 20 && convertedToInteger <= 25):\n result = 120;\n break;\n case (convertedToInteger > 25 && convertedToInteger <= 35):\n result = 140;\n break;\n case (convertedToInteger > 35 && convertedToInteger <= 47):\n result = 160;\n break;\n case (convertedToInteger > 47 && convertedToInteger <= 60):\n result = 240;\n break;\n case (convertedToInteger > 60 && convertedToInteger <= 70):\n result = 280;\n break;\n case (convertedToInteger > 70 && convertedToInteger <= 85):\n result = 300;\n break;\n case (convertedToInteger > 95 && convertedToInteger <= 110):\n result = 320;\n break;\n }\n return result;\n },\n\n handleMinimapAnimation: function () {\n const mapContainer = document.querySelector('.floor-plan-container');\n const mapButton = document.querySelector('.scene-menu__map-button');\n const fovSliderContainer = document.querySelector('.fov-slider-wrapper');\n const isExterior = window.location.href.includes('isExterior=');\n const sceneMenu = document.querySelector('.scene-menu--desktop');\n const sceneMenuButton = document.querySelector('.scene-menu__button');\n\n if (isExterior) {\n fovSliderContainer.classList.remove('a-hidden');\n fovSliderContainer.classList.add('initial-animation');\n\n sceneMenu?.classList.add('a-hidden');\n sceneMenuButton?.classList.add('a-hidden');\n mapContainer.classList.add('floor-plan-container__transition');\n\n const hide = setTimeout(() => {\n mapContainer.style.opacity = '0';\n mapContainer.classList.add('scale-down');\n clearTimeout(hide);\n }, 150);\n\n const hideElement = setTimeout(() => {\n mapContainer.classList.remove('floor-plan-container__transition');\n mapContainer.classList.add('minimize');\n mapContainer.classList.remove('scale-down');\n clearTimeout(hideElement);\n }, 800);\n\n const onLoadedRemoveAnimation = setTimeout(() => {\n fovSliderContainer.classList.remove('initial-animation');\n clearTimeout(onLoadedRemoveAnimation);\n }, 200);\n const onLoadedAddIndex = setTimeout(() => {\n mapContainer.style.zIndex = '996';\n clearTimeout(onLoadedAddIndex);\n }, 1500);\n }\n\n if (!mapButton || isExterior) return;\n\n fovSliderContainer.classList.remove('a-hidden');\n fovSliderContainer.classList.add('initial-animation');\n mapContainer.classList.add('minimize');\n const onLoadedRemoveAnimation = setTimeout(() => {\n fovSliderContainer.classList.remove('initial-animation');\n clearTimeout(onLoadedRemoveAnimation);\n }, 200);\n const onLoadedAddIndex = setTimeout(() => {\n mapContainer.style.zIndex = '996';\n clearTimeout(onLoadedAddIndex);\n }, 1500);\n\n const currentImage = document.querySelector(`.floor-plan-image__floor-${this.data.startingFloor}`);\n const upperMapButton = document.querySelector('.upper-floor-button');\n if (currentImage && upperMapButton) {\n upperMapButton.style.bottom = `${this.handlerCounterImageRatio(currentImage.height, currentImage.width) + 70}px`;\n }\n },\n handleToggleHideMinimap: function () {\n const hideMinimapButton = document.querySelector('.hide-minimap-button');\n const innerMaps = document.querySelectorAll('.innerMap');\n const floorButtons = document.querySelectorAll('.floor-btn');\n const floorplanSpots = document.querySelectorAll('.floor-plan-spot');\n const radars = document.querySelectorAll('#floor-plan-spot-radar');\n\n hideMinimapButton.classList.toggle('on');\n\n innerMaps.forEach((innerMap) => innerMap.classList.toggle('minimap-hide'));\n floorButtons.forEach((btn) => btn.classList.toggle('minimap-hide'));\n floorplanSpots.forEach((spot) => spot.classList.toggle('a-hidden'));\n radars.forEach((radar) => radar.classList.toggle('a-hidden'));\n },\n tempButtonMinimap: function () {\n const isExterior = window.location.href.includes('isExterior');\n const floorplanContainer = document.querySelector('.floor-plan-container');\n const upperMapButton = document.querySelector('.upper-floor-button');\n const lowerMapButton = document.querySelector('.lower-floor-button');\n const floor0 = document.querySelector('.innerMap.floor-0');\n const floor1 = document.querySelector('.innerMap.floor-1');\n const floor2 = document.querySelector('.innerMap.floor-2');\n const floorsNumber = this.data.src.length;\n\n const state = {\n count: this.data.startingFloor,\n };\n\n if (floor1) {\n setInterval(() => {\n if (state.count === window.floor.currentMiniMapFloor) {\n if (window.innerWidth <= 1024 && !floorplanContainer.classList.contains('blur')) {\n window.floor.currentMiniMapFloor = window.floor.currentFloor;\n } else if (isExterior && !floorplanContainer.classList.contains('blur')) {\n window.floor.currentMiniMapFloor = window.floor.currentFloor;\n }\n } else {\n idleRender();\n }\n }, 100);\n }\n\n const refreshMapHeight = () => {\n const innerMaps = document.querySelectorAll('.innerMap');\n const styleSelector = document.querySelector('.style-selector-wrapper');\n const stylesAvailable = document.querySelectorAll('.style-selector-wrapper .style-item');\n\n if (styleSelector) {\n if (innerWidth < 800 && styleSelector.classList.contains('active') && stylesAvailable.length > 1) {\n innerMaps.forEach((map) => {\n map.style.bottom = `calc(100% - (${window.minimizeImage.maxHeight}px + 20px))`;\n });\n }\n }\n };\n\n const counter = (count) => {\n const currentImage = document.querySelector(`.floor-plan-image__floor-${count}`);\n const floor = this.data.floorTranslate;\n\n if (count === 0) {\n floor0.classList.remove('mid-bottom');\n floor0.classList.add('current');\n upperMapButton.style.bottom = `${this.handlerCounterImageRatio(currentImage.height, currentImage.width) + 70}px`;\n\n floor1.classList.add('mid-top');\n floor1.classList.remove('current');\n\n floor2?.classList.add('mid-top');\n\n lowerMapButton.classList.add('disabled');\n upperMapButton.classList.remove('disabled');\n } else if (count === 1) {\n floor0.classList.remove('current');\n floor0.classList.add('mid-bottom');\n\n floor1.classList.remove('mid-top');\n floor1.classList.remove('mid-bottom');\n floor1.classList.add('current');\n upperMapButton.style.bottom = `${this.handlerCounterImageRatio(currentImage.height, currentImage.width) + 70}px`;\n\n floor2?.classList.remove('current');\n floor2?.classList.add('mid-top');\n\n lowerMapButton.classList.remove('disabled');\n\n if (floor2) {\n upperMapButton.classList.remove('disabled');\n } else {\n upperMapButton.classList.add('disabled');\n }\n } else if (count === 2) {\n floor1.classList.remove('current');\n floor1.classList.remove('mid-top');\n floor1.classList.add('mid-bottom');\n\n floor2?.classList.remove('mid-top');\n floor2?.classList.add('current');\n upperMapButton.style.bottom = `${this.handlerCounterImageRatio(currentImage.height, currentImage.width) + 70}px`;\n\n floor0.classList.remove('current');\n floor0.classList.add('mid-bottom');\n\n upperMapButton.classList.add('disabled');\n lowerMapButton.classList.remove('disabled');\n }\n\n if (lowerMapButton) {\n upperMapButton.lastChild.innerHTML = `${floor} ${(count + 1) < (floorsNumber - 1) ? count + 1 : (floorsNumber - 1)}`;\n lowerMapButton.lastChild.innerHTML = `${floor} ${(count - 1) > 0 ? count - 1 : 0}`;\n }\n };\n\n function renderCount () {\n counter(state.count);\n }\n\n function incCountUp () {\n if (state.count < 2) {\n state.count = state.count + 1;\n window.floor.currentMiniMapFloor = state.count;\n }\n renderCount();\n }\n\n function incCountDown () {\n if (state.count > 0) {\n state.count = state.count - 1;\n window.floor.currentMiniMapFloor = state.count;\n }\n renderCount();\n }\n\n function idleRender () {\n state.count = window.floor.currentMiniMapFloor;\n counter(window.floor.currentMiniMapFloor);\n refreshMapHeight();\n }\n\n renderCount();\n\n upperMapButton.addEventListener('click', incCountUp);\n lowerMapButton.addEventListener('click', incCountDown);\n },\n});\n","import { CustomEvents } from '../shared/constants';\nimport { isIPad, isDesktop } from '../utils/device';\nimport { fetchProductData } from '../shopping-list';\n\nconst LinkSizes = {\n MOBILE: 28.5,\n IPAD: 22,\n DESKTOP: 17,\n};\n\nconst getLinkSize = () => {\n if (isIPad()) {\n return LinkSizes.IPAD;\n }\n\n if (AFRAME.utils.device.isMobile()) {\n return LinkSizes.MOBILE;\n }\n\n return LinkSizes.DESKTOP;\n};\n\nconst LinkFactory = {\n createLink (roomType, id) {\n const isExterior = window.tour?.isExterior;\n const {\n linkLocation,\n targetCameraId,\n targetCameraRoomType,\n targetCameraStoreyNumber = '0',\n } = roomType;\n const icon = (targetCameraRoomType === 'Exterior' || isExterior) ? `#icon-${targetCameraRoomType}-color` : `#icon-${targetCameraRoomType}`;\n const wrapper = document.createElement('a-entity');\n const el = document.createElement('a-entity');\n const loaderBackground = document.createElement('a-entity');\n const loader = document.createElement('a-entity');\n const wrapperSize = 29;\n const wrapperDistance = 15;\n const linkSize = (targetCameraRoomType === 'Exterior' || isExterior) ? (getLinkSize() * 1.4) : getLinkSize();\n const loaderDist = 10;\n const loaderThickness = 6;\n const linkRadiusBasedOnDevice = linkSize - (isDesktop() ? 0 : 3);\n const linkAnimationSizeBasedOnDevice = linkSize + (isDesktop() ? 6 : 4);\n const linkAnimationDurBasedOnDevice = isDesktop() ? 1200 : 1250;\n\n /* wrapper for increased hitbox */\n wrapper.setAttribute('class', `clickable link link-sphere-${id} link-to-${targetCameraId}`);\n wrapper.setAttribute('position', `${linkLocation.x} ${1.6} ${linkLocation.z - wrapperDistance}`);\n wrapper.setAttribute('geometry', {\n primitive: 'circle',\n radius: wrapperSize,\n });\n wrapper.setAttribute('material', { opacity: 0 });\n wrapper.setAttribute('animate-until-loaded', `on: click; room: ${targetCameraId}`);\n wrapper.setAttribute('minimap-hotspots-animation', `on: ${CustomEvents.CLICKED_AND_LOADED}; target: #${targetCameraId}`);\n wrapper.setAttribute('set-image', `on: ${CustomEvents.CLICKED_AND_LOADED}; target: #cubemap-sky; src: ${targetCameraId}`);\n wrapper.setAttribute('set-link', `on: ${CustomEvents.CLICKED_AND_LOADED}; target: #link-manager; src: ${targetCameraId}`);\n wrapper.setAttribute('hide-minimap', `on: ${CustomEvents.CLICKED_AND_LOADED}; target: .floor-plan-container`);\n wrapper.setAttribute('track-room-change', {\n clickSource: 'hotspot',\n destinationRoomType: targetCameraRoomType,\n destinationRoomFloor: targetCameraStoreyNumber,\n id: targetCameraId,\n });\n wrapper.setAttribute('look-at', '#camera');\n el.setAttribute('position', `0 0 ${wrapperDistance}`);\n el.setAttribute('geometry', {\n primitive: 'circle',\n radius: linkRadiusBasedOnDevice,\n });\n el.setAttribute('material', {\n src: icon,\n side: 'double',\n shader: 'flat',\n });\n el.setAttribute('animation', {\n property: 'geometry.radius',\n to: linkAnimationSizeBasedOnDevice,\n dur: linkAnimationDurBasedOnDevice,\n dir: 'alternate',\n loop: true,\n easing: 'linear',\n });\n loaderBackground.setAttribute('visible', false);\n loaderBackground.setAttribute('position', '0 0 15');\n loaderBackground.setAttribute('geometry', {\n primitive: 'circle',\n radius: `${linkSize + 2}`,\n });\n loaderBackground.setAttribute('material', {\n shader: 'flat',\n side: 'front',\n flatShading: true,\n color: '#f5f5f5',\n });\n loaderBackground.setAttribute('class', `link-loader link-loader-${targetCameraId}`);\n loader.setAttribute('position', `0 0 ${loaderDist}`);\n loader.setAttribute('geometry', {\n primitive: 'ring',\n radiusInner: `${linkSize - loaderThickness}`,\n radiusOuter: `${linkSize + 2}`,\n thetaLength: '120',\n });\n loader.setAttribute('material', {\n shader: 'flat',\n side: 'front',\n flatShading: true,\n color: '#b2b2b2',\n });\n loader.setAttribute('animation', {\n property: 'rotation',\n dur: 1000,\n to: '0 0 -360',\n easing: 'linear',\n loop: true,\n });\n\n loaderBackground.appendChild(loader);\n el.appendChild(loaderBackground);\n wrapper.appendChild(el);\n\n return wrapper;\n },\n createTag (tagLocation, id) {\n const {\n linkLocation,\n productId,\n showLabel,\n } = tagLocation;\n const icon = '#icon-Tag';\n // const iconActive = '#icon-TagActive';\n const wrapper = document.createElement('a-entity');\n const el = document.createElement('a-entity');\n const wrapperSize = 15;\n\n /* wrapper for increased hitbox */\n wrapper.setAttribute('class', `clickable product product-id-${productId}`);\n wrapper.setAttribute('position', `${linkLocation.x} ${linkLocation.y} ${linkLocation.z}`);\n wrapper.setAttribute('geometry', {\n primitive: 'circle',\n radius: wrapperSize,\n });\n wrapper.setAttribute('material', { opacity: 0 });\n wrapper.setAttribute('look-at', '#camera');\n\n wrapper.setAttribute('data-label', showLabel);\n\n // const isStaging = window.location.href.includes('tours-staging') || window.location.href.includes('0.0.0.0');\n\n if (!showLabel || window.currentStyle.name !== 'Decoroom2') {\n wrapper.setAttribute('visible', 'false');\n } else {\n wrapper.setAttribute('visible', 'true');\n }\n\n // if (isStaging) {\n // wrapper.setAttribute('visible', showLabel);\n // }\n\n el.setAttribute('position', '0 0 0');\n el.setAttribute('geometry', {\n primitive: 'circle',\n radius: wrapperSize,\n });\n el.setAttribute('material', {\n src: icon,\n side: 'double',\n shader: 'flat',\n });\n\n wrapper.addEventListener('click', e => {\n const shoppingListContainer = document.querySelector('.shopping-list-container');\n const shoppingListContainerLoader = document.querySelector('.shopping-list-container .loader');\n const shoppingSingleProductContainer = document.querySelector('.shopping-list-container__single-product');\n const styleSelectorControllerWrapper = document.querySelector('.style-selector-controlLer-wrapper');\n const styleSelectorWrapper = document.querySelector('.style-selector-wrapper');\n const leftBottomInterface = document.querySelector('.scene-menu__bottom');\n const productsDropDown = document.querySelector('.products-drop-down');\n const stylesAvailable = document.querySelectorAll('.style-selector-wrapper .style-item');\n const styleContainer = document.querySelector('.style-selector-container');\n\n shoppingSingleProductContainer.scrollTo({ top: 0 });\n\n if (!shoppingListContainer) return null;\n const PRODUCT_ID = 'product-id-';\n\n const getClasses = Array.from(e.target.classList);\n const findClass = getClasses.find(specificClass => specificClass.includes(PRODUCT_ID));\n const convertToId = findClass?.replace(PRODUCT_ID, '');\n\n if (shoppingListContainer.dataset.productId === convertToId || !shoppingListContainer.dataset.productId) {\n shoppingListContainer.classList.toggle('active');\n\n if (shoppingListContainer.classList.contains('active')) {\n if (window.innerWidth <= 620) {\n leftBottomInterface.style.left = '620px';\n leftBottomInterface.style.transition = 'left 300ms ease';\n if (styleContainer) {\n styleSelectorControllerWrapper.style.left = '700px';\n }\n } else {\n leftBottomInterface.style.left = '370px';\n leftBottomInterface.style.transition = 'left 300ms ease';\n if (styleContainer) {\n styleSelectorControllerWrapper.style.left = '440px';\n }\n }\n\n if (styleContainer) {\n if (!window.tourProductsData) {\n window.tourProductsData = { styleSelectorMaxWidth: 0 };\n }\n window.tourProductsData.styleSelectorMaxWidth = getComputedStyle(styleSelectorWrapper).maxWidth;\n styleSelectorWrapper.classList.add('product-list-opened');\n styleSelectorWrapper.style.maxWidth = 'calc(100vw - 460px)';\n styleSelectorWrapper.setAttribute('data-max-width', window.tourProductsData.styleSelectorMaxWidth);\n }\n } else {\n leftBottomInterface.style.left = '10px';\n if (styleContainer) {\n styleSelectorControllerWrapper.style.left = '80px';\n styleSelectorWrapper.classList.remove('product-list-opened');\n styleSelectorWrapper.style.maxWidth = window.tourProductsData.styleSelectorMaxWidth;\n }\n productsDropDown.classList.remove('active');\n }\n }\n\n const onToggleStyleArrowSet = () => {\n if (!styleContainer) return;\n const availableStylesWidth = (stylesAvailable.length * 100);\n\n if (availableStylesWidth > styleContainer.offsetWidth) {\n styleSelectorWrapper.classList.add('right-arrow-visible');\n } else {\n setTimeout(() => {\n styleSelectorWrapper.classList.remove('right-arrow-visible');\n }, 100);\n }\n };\n\n onToggleStyleArrowSet();\n\n // CLEAR DATA\n shoppingListContainer.setAttribute('data-product-id', '');\n\n if (!shoppingListContainer.classList.contains('active')) return;\n // SET DATA\n shoppingSingleProductContainer.classList.add('hide');\n shoppingListContainerLoader.classList.remove('hide');\n shoppingListContainer.setAttribute('data-product-id', convertToId);\n const currentStyle = window.currentStyle.name;\n return fetchProductData(convertToId, false, currentStyle);\n });\n\n wrapper.appendChild(el);\n\n return wrapper;\n },\n};\n\nexport default LinkFactory;\n","import LinkFactory from './utils/linkFactory';\nimport { Durations } from './shared/constants';\nimport { isIpadNewOs, isMobile } from '../utils/device';\nimport { getTranslation } from '../services/translations/getTranslations';\n\nexport default AFRAME.registerComponent('link-manager', {\n /* handles clicking hotspots on minimap and/or links */\n schema: {\n cubemapData: {\n parse: JSON.parse,\n stringify: JSON.stringify,\n },\n active: { type: 'string' },\n spheres: {\n parse: JSON.parse,\n stringify: JSON.stringify,\n },\n clientType: { type: 'string' },\n },\n init: function () {\n this.sceneEl = document.querySelector('a-scene');\n },\n update: function () {\n if (isMobile()) {\n Durations.BLINK_ANIMATION = Durations.BLINK_ANIMATION_MOBILE;\n }\n // hide radar while BLINK animation on Link change\n const radars = document.querySelectorAll('#floor-plan-spot-radar');\n radars.forEach((radar) => {\n radar.style.opacity = '0';\n });\n setTimeout(() => {\n this.destroyAllLinks();\n }, Durations.BLINK_ANIMATION_FAST);\n setTimeout(() => {\n this.createProperLinks();\n }, Durations.BLINK_ANIMATION);\n setTimeout(() => {\n radars.forEach((radar) => {\n radar.style.opacity = '1';\n });\n this.changeRadarPosition();\n }, Durations.BLINK_ANIMATION);\n this.changeActiveHotspot();\n },\n destroyAllLinks: function () {\n const links = document.querySelectorAll('.link');\n const products = document.querySelectorAll('.product');\n\n if (!links[0]) return;\n links.forEach(link => {\n link.parentNode.removeChild(link);\n });\n\n if (!products[0]) return;\n products.forEach(product => {\n product.parentNode.removeChild(product);\n });\n },\n createProperLinks: function () {\n const {\n active,\n spheres,\n clientType,\n } = this.data;\n const sceneEl = this.sceneEl;\n\n spheres[active - 1].linkLocations.forEach((linkData) => {\n if (linkData.targetCameraRoomType === 'Exterior') {\n if (spheres[linkData.targetCameraId - 1].isBalconyViewEnabled) {\n createLink(linkData, active);\n }\n } else {\n createLink(linkData, active);\n }\n });\n\n const shoppingListContainer = document.querySelector('.shopping-list-container');\n\n if (shoppingListContainer) {\n spheres[active - 1]?.productsLocations?.forEach((linkData) => {\n if (!linkData?.productId) return;\n createTags(linkData);\n });\n }\n\n function createLink (linkData, id) {\n const link = LinkFactory.createLink(linkData, id);\n\n if (document.body.className.split(' ').includes('has-hover')) {\n link.addEventListener('mouseenter', applyScaleAnimation);\n link.addEventListener('mouseleave', removeScaleAnimation);\n link.addEventListener('mousedown', removeScaleAnimation);\n }\n sceneEl.appendChild(link);\n\n function showRoomTitle () {\n const getRoomType = link.getAttribute('track-room-change').destinationRoomType;\n const body = document.querySelector('body');\n const { roomsTitle } = getTranslation();\n const {\n livingRoom,\n bedroom,\n bathroom,\n moveStraight,\n childrenRoom,\n kitchen,\n stairs,\n toilet,\n bathroom2,\n exterior,\n exterior2,\n dressingRoom,\n boilerRoom,\n homeOffice,\n pantry,\n washingRoom,\n retailSpace,\n pool,\n winterGarden,\n entresol,\n attic,\n library,\n gameRoom,\n homeTheater,\n playRoom,\n workShop,\n livingRoomWithAKitchenette,\n habitableAttic,\n utilityRoom,\n service,\n diningRoom,\n } = roomsTitle;\n const exteriorTitle = window?.tour?.isExterior ? exterior2 : exterior;\n\n function setRoomType (type) {\n const rooms = {\n LivingRoom: livingRoom,\n Bedroom: bedroom,\n Bathroom: bathroom,\n Other: moveStraight,\n KidsRoom: childrenRoom,\n Kitchen: kitchen,\n Stairs: stairs,\n Toilet: toilet,\n Bathroom2: bathroom2,\n Exterior: exteriorTitle,\n DressingRoom: dressingRoom,\n BoilerRoom: boilerRoom,\n HomeOffice: homeOffice,\n Pantry: pantry,\n WashingRoom: washingRoom,\n RetailSpace: retailSpace,\n Pool: pool,\n WinterGarden: winterGarden,\n Entresol: entresol,\n Attic: attic,\n Library: library,\n GameRoom: gameRoom,\n HomeTheater: homeTheater,\n PlayRoom: playRoom,\n WorkShop: workShop,\n LivingRoomWithAKitchenette: livingRoomWithAKitchenette,\n HabitableAttic: habitableAttic,\n UtilityRoom: utilityRoom,\n Service: service,\n DiningRoom: diningRoom,\n };\n return `
${rooms[type]}
`;\n }\n\n body.insertAdjacentHTML('afterbegin', setRoomType((getRoomType)));\n const getHoveredRoomType = document.querySelector('.room-type');\n setTimeout(() => {\n getHoveredRoomType.style.opacity = '1';\n }, 100);\n }\n\n function applyScaleAnimation () {\n if (!isIpadNewOs()) {\n showRoomTitle();\n }\n if (this.getAttribute('animation__descale')) {\n this.removeAttribute('animation__descale');\n }\n this.setAttribute('animation__scale', {\n property: 'scale',\n to: '1.8 1.8 1',\n dur: 500,\n dir: 'normal',\n loop: false,\n easing: 'linear',\n });\n }\n\n function removeScaleAnimation () {\n const getHoveredRoomType = document.querySelector('.room-type');\n if (this.getAttribute('animation__scale')) {\n if (getHoveredRoomType !== null) {\n getHoveredRoomType.style.opacity = '0';\n setTimeout(() => {\n getHoveredRoomType.remove();\n }, 250);\n }\n this.removeAttribute('animation__scale');\n }\n this.setAttribute('animation__descale', {\n property: 'scale',\n from: '1.8 1.8 1',\n to: '1 1 1',\n dur: 500,\n dir: 'normal',\n loop: false,\n easing: 'linear',\n });\n }\n }\n\n function createTags (linkData, id) {\n const link = LinkFactory.createTag(linkData, id);\n\n if (document.body.className.split(' ').includes('has-hover')) {\n link.addEventListener('mouseenter', applyScaleAnimation);\n link.addEventListener('mouseleave', removeScaleAnimation);\n }\n sceneEl.appendChild(link);\n\n function applyScaleAnimation () {\n if (this.getAttribute('animation__descale')) {\n this.removeAttribute('animation__descale');\n }\n this.setAttribute('animation__scale', {\n property: 'scale',\n from: '1 1 1',\n to: '1.4 1.4 1',\n dur: false,\n });\n }\n\n function removeScaleAnimation () {\n if (this.getAttribute('animation__scale')) {\n this.removeAttribute('animation__scale');\n }\n this.setAttribute('animation__descale', {\n property: 'scale',\n from: '1.4 1.4 1',\n to: '1 1 1',\n dur: false,\n });\n }\n }\n },\n changeActiveHotspot: function () {\n const active = document.querySelector('.floor-plan-spot.floor-plan-spot__active');\n const activeInnerMap = document.querySelector('.current__active');\n const targetHighlight = document.querySelector('.starting-point-highlight');\n\n if (!active) return;\n active.classList.remove('floor-plan-spot__active');\n activeInnerMap.classList.remove('current__active');\n const newActive = document.getElementById(`${this.data.active}`);\n const innerMap = document.querySelector(`.innerMap.floor-${this.data.cubemapData[Number(this.data.active - 1)].storeyNumber <= 0 ? 0 : this.data.cubemapData[Number(this.data.active - 1)].storeyNumber}`);\n\n if (newActive) {\n innerMap.classList.add('current__active');\n newActive.classList.add('floor-plan-spot__active');\n }\n\n if (targetHighlight) {\n setTimeout(() => {\n targetHighlight.style.opacity = '0';\n }, 3500);\n setTimeout(() => {\n targetHighlight.classList.remove('starting-point-highlight');\n }, 4000);\n }\n },\n changeRadarPosition: function () {\n const radars = document.querySelectorAll('#floor-plan-spot-radar');\n const coords = this.findTopLeft('.floor-plan-spot.floor-plan-spot__active');\n\n radars.forEach((radar) => {\n radar.style.top = coords.top;\n radar.style.left = coords.left;\n });\n },\n findTopLeft: function (element) {\n const el = document.querySelector(element);\n\n if (!el) return;\n const radar = document.getElementById('floor-plan-spot-radar');\n const [elTop, elLeft] = [el.style.top, el.style.left];\n const [rHeight, rWidth] = [radar.height, radar.width];\n const hotspotSize = 22;\n const borderSize = '7px';\n const offset = '18px';\n const top = `calc(${elTop} - ${rHeight / 2}px + ${hotspotSize / 2}px + ${borderSize} - ${offset})`;\n const left = `calc(${elLeft} - ${rWidth / 2}px + ${hotspotSize / 2}px + ${borderSize} - ${offset})`;\n return {\n top,\n left,\n };\n },\n});\n","export default AFRAME.registerComponent('canvas-resizer', {\n /* Resizes minimap elements */\n init: function () {\n if (window.screen.width >= 1450) {\n const radarsDimensions = document.querySelectorAll('#floor-plan-spot-radar');\n radarsDimensions.forEach((canvas) => {\n canvas.width = 130;\n canvas.height = 130;\n });\n }\n },\n});\n","export default AFRAME.registerComponent('minimap-hotspots', {\n /* Draws spots on minimap */\n schema: {\n hotspots: {\n parse: function (str) {\n return JSON.parse(str);\n },\n stringify: function (obj) {\n return JSON.stringify(obj);\n },\n },\n spheres: {\n parse: JSON.parse,\n stringify: JSON.stringify,\n },\n },\n init: function () {\n this.showSpotsOnMinimap();\n this.addClickHandlers();\n this.addLoadedRoomHandlers();\n },\n showSpotsOnMinimap: function () {\n const availableFloorplanImages = Array.from(document.querySelectorAll('.floor-plan-image')).reverse();\n const { hotspots, spheres } = this.data;\n availableFloorplanImages.forEach((floorplanImage, index) => {\n const minimapHTML = hotspots[index].map(({ targetCameraId, location }) => {\n const top = (1 - location.y) * 100;\n const left = location.x * 100;\n const loaderHTML = this.createRadialLoader(targetCameraId, top, left);\n const activeClass = targetCameraId === 1 ? 'floor-plan-spot__active' : '';\n const testClass = activeClass === 'floor-plan-spot__active' ? '
' : '';\n const html = `
${testClass}
`;\n\n if (spheres[targetCameraId - 1].roomType === 'Exterior') {\n if (spheres[targetCameraId - 1].isBalconyViewEnabled) {\n return html + loaderHTML;\n }\n return null;\n } else {\n return html + loaderHTML;\n }\n });\n floorplanImage.parentElement.innerHTML += minimapHTML.join('');\n });\n },\n createRadialLoader: function (id, top, left) {\n return `
`;\n },\n addClickHandlers: function () {\n const self = this;\n const spots = document.querySelectorAll('.floor-plan-spot');\n spots.forEach(spot => spot.addEventListener('click', changeActiveSphere));\n\n function changeActiveSphere () {\n this.classList.add('pulse-once');\n const active = this.dataset.sphere;\n const loaderStatus = self.el.sceneEl.getAttribute('loading-screen-handler').status;\n if (loaderStatus !== 'loader-hidden') return;\n const link = document.querySelector(`#hotspot-link-to-${active}`);\n link.emit('click');\n }\n },\n addLoadedRoomHandlers: function () {\n const cubemapSky = document.getElementById('cubemap-sky');\n const radialLoaders = document.querySelectorAll('.loader-ring');\n const pulseClass = 'pulse-once';\n radialLoaders.forEach(loader => {\n const roomNumber = loader.dataset.room;\n cubemapSky.addEventListener(`room-${roomNumber}-loaded`, function () {\n loader.style.display = 'none';\n const hotspot = document.getElementById(`${roomNumber}`);\n hotspot.classList.add(pulseClass);\n hotspot.addEventListener('animationend', () => hotspot.classList.remove(pulseClass));\n });\n });\n },\n});\n","export default AFRAME.registerComponent('minimap-hotspots-animation', {\n schema: {\n on: { type: 'string' },\n target: { type: 'selector' },\n },\n init: function () {\n const el = this.el;\n const data = this.data;\n\n const PULSE_CLASS = 'pulse-once';\n const minimap = document.querySelector('.floor-plan-container');\n el.addEventListener(data.on, function () {\n if (minimap && minimap.className.split(' ').includes('minimize')) {\n data.target.classList.add(PULSE_CLASS);\n }\n });\n },\n});\n","export default AFRAME.registerComponent('minimap-radar', {\n init: function () {\n this.drawRadar();\n },\n drawRadar: function () {\n const radars = document.querySelectorAll('#floor-plan-spot-radar');\n radars.forEach((radar) => {\n const getFov = radar.getAttribute('fov');\n const radius = (radar.width / 2) - 10;\n const startPoint = (radar.width / 2);\n const ctx = radar.getContext('2d');\n const gradient = ctx.createLinearGradient(100, 0, radar.width - 100, 0);\n gradient.addColorStop(0, 'rgba(250, 250, 250, 0.3)');\n gradient.addColorStop(1, 'rgba(250, 250, 250, 0.65)');\n ctx.fillStyle = gradient;\n ctx.strokeStyle = 'rgba(41, 41, 41, 0.15)';\n ctx.beginPath();\n ctx.arc(startPoint, startPoint, radius, 0, (Math.PI * 2 / 360) * getFov);\n ctx.lineTo(startPoint, startPoint);\n ctx.closePath();\n ctx.fill();\n ctx.stroke();\n });\n },\n});\n","const HIDDEN_CLASS = 'minimize';\n\nexport default AFRAME.registerComponent('hide-minimap', {\n /*\n * Hides minimap and applies opacity transition when hotspot is clicked.\n */\n schema: {\n on: { type: 'string' },\n target: { type: 'selector' },\n },\n init: function () {\n const data = this.data;\n this.minimap = data.target;\n\n this.addEventListeners();\n },\n addEventListeners: function () {\n const el = this.el;\n const data = this.data;\n\n el.addEventListener(data.on, () => this.hideMinimap());\n },\n hideMinimap: function () {\n const el = this.el;\n const data = this.data;\n const minimap = data.target;\n const loaderStatus = el.sceneEl.getAttribute('loading-screen-handler').status;\n const loaderHidden = loaderStatus === 'loader-hidden';\n const minimapVisible = !minimap.className.split(' ').includes(HIDDEN_CLASS);\n\n if (minimapVisible && loaderHidden) {\n this.setupFadeAnimation();\n }\n },\n setupFadeAnimation: function () {\n this.startAnimation();\n setTimeout(() => this.endAnimation(), 600);\n },\n startAnimation: function () {},\n endAnimation: function () {\n const minimapButton = document.querySelector('.scene-menu__map-button');\n const minimap = this.minimap;\n const innerMaps = document.querySelectorAll('.innerMap');\n const fovSlider = document.querySelector('.fov-slider-wrapper');\n const styleSelector = document.querySelector('.style-selector-wrapper');\n const stylesAvailable = document.querySelectorAll('.style-selector-wrapper .style-item');\n\n if (window.location.href.includes('isExterior=')) {\n minimap.style.opacity = '0';\n setTimeout(() => {\n minimap.classList.add(HIDDEN_CLASS);\n minimap.classList.remove('blur');\n minimap.style.display = 'none';\n innerMaps.forEach((innerMap) => innerMap.classList.remove('transition'));\n minimapButton.classList.toggle('on');\n if (styleSelector && !styleSelector.classList.contains('active')) {\n fovSlider.classList.toggle('a-hidden');\n }\n if (!styleSelector) {\n fovSlider.classList.toggle('a-hidden');\n }\n }, 300);\n } else {\n setTimeout(() => {\n minimap.classList.add(HIDDEN_CLASS);\n minimap.classList.remove('blur');\n innerMaps.forEach((innerMap) => innerMap.classList.remove('transition'));\n minimapButton.classList.toggle('on');\n fovSlider.classList.toggle('a-hidden');\n\n if (styleSelector) {\n const currentActive = document.querySelector('.current.current__active');\n\n if ((window.innerWidth <= 800 && styleSelector.classList.contains('active')) && stylesAvailable.length > 1 && minimap.classList.contains('minimize')) {\n innerMaps.forEach((map) => {\n map.style.bottom = `calc(100% - (${window.minimizeImage.maxHeight}px + 20px))`;\n });\n const delayGetProperDimensions = setTimeout(() => {\n window.minimizeImage = { ...window.minimizeImage, maxHeight: currentActive.clientHeight };\n innerMaps.forEach((map) => {\n map.style.transition = 'bottom 300ms ease-in-out';\n map.style.bottom = `calc(100% - (${window.minimizeImage.maxHeight}px + 20px))`;\n });\n const removeTransition = setTimeout(() => {\n innerMaps.forEach((map) => {\n map.style.transition = '';\n });\n clearInterval(removeTransition);\n }, 350);\n clearInterval(delayGetProperDimensions);\n }, 300);\n fovSlider.style.bottom = 'calc(100% - 210px)';\n } else {\n innerMaps.forEach((map) => {\n map.style.bottom = '';\n });\n fovSlider.style.bottom = '';\n }\n\n if (window.innerWidth > 800 && window.innerWidth < 1000) {\n styleSelector.style.maxWidth = `calc(100vw - (${window.minimizeImage.maxWidth}px + 140px))`;\n } else {\n styleSelector.style.maxWidth = `calc(100vw - (${window.minimizeImage.maxWidth}px + 120px))`;\n }\n\n const onToggleMiniMapArrowSet = () => {\n const styleContainer = document.querySelector('.style-selector-container');\n const stylesAvailable = document.querySelectorAll('.style-selector-wrapper .style-item');\n const availableStylesWidth = (stylesAvailable.length * 100);\n\n if (availableStylesWidth > styleContainer.offsetWidth + 10) {\n styleSelector.classList.add('right-arrow-visible');\n } else {\n styleSelector.classList.remove('right-arrow-visible');\n }\n };\n\n onToggleMiniMapArrowSet();\n }\n }, 300);\n }\n },\n});\n","const degToRad = THREE.Math.degToRad;\nconst radToDeg = THREE.Math.radToDeg;\n\n// Offset needed to make the radar point up by default\nconst radarOffset = degToRad(123);\n\nexport default AFRAME.registerComponent('camera-angle-listener', {\n /* Listens for camera's angle to set minimap's radar angle properly */\n schema: {\n radarEl: { type: 'selector' },\n },\n init: function () {\n this.cameraEl = this.el.sceneEl.camera.el;\n this.cameraRigEl = document.getElementById('camera-rig');\n this.radarOffset = radarOffset;\n },\n tick: function () {\n const radars = document.querySelectorAll('#floor-plan-spot-radar');\n\n if (!radars[0]) {\n return;\n }\n\n const angle = radToDeg(this.getCombinedRotation());\n radars.forEach((radar) => {\n radar.style.webkitTransform = `rotate(${angle}deg)`;\n radar.style.mozTransform = `rotate(${angle}deg)`;\n radar.style.msTransform = `rotate(${angle}deg)`;\n radar.style.oTransform = `rotate(${angle}deg)`;\n radar.style.transform = `rotate(${angle}deg)`;\n });\n },\n getCameraRotation: function () {\n return this.cameraEl.object3D.rotation.y;\n },\n getCameraRigRotation: function () {\n const cameraRigEl = this.cameraRigEl;\n\n if (!cameraRigEl) {\n return 0;\n }\n\n return cameraRigEl.object3D.rotation.y;\n },\n getCombinedRotation: function () {\n const cameraRotation = this.getCameraRotation();\n const cameraRigRotation = this.getCameraRigRotation();\n\n return -(cameraRotation + cameraRigRotation) + this.radarOffset;\n },\n});\n","import { isDesktop, isIpadNewOs } from './utils/device';\n\nconst autoRotateActiveClass = 'on';\nconst ANIMATION_NAMES = {\n autoAlign: 'animation__auto-align',\n loop: 'animation__loop',\n};\nconst ANIMATION_EVENTS = {\n complete: 'animationcomplete',\n};\n\nexport default AFRAME.registerComponent('auto-rotate', {\n schema: {\n enabled: { type: 'boolean', default: false },\n mode: { type: 'string', default: 'off' },\n duration: { type: 'string', default: '100000' },\n dependencies: ['scene-menu'],\n },\n init: function () {\n if (isIpadNewOs() || window.location.href.includes('isExterior')) {\n this.el.setAttribute('auto-rotate', { enabled: false, mode: 'off' });\n } else if (isDesktop()) {\n this.el.setAttribute('auto-rotate', { enabled: true, mode: 'on' });\n }\n\n const menuButtons = document.querySelector('.scene-menu__bottom');\n const floorPlanBlur = document.querySelector('blur');\n const dollhouse = document.querySelector('dollhouse-container');\n const iframe = document.querySelector('iframe');\n\n menuButtons.addEventListener('mousemove', (event) => { event.stopPropagation(); });\n if (floorPlanBlur) {\n floorPlanBlur.addEventListener('mousemove', (event) => { event.stopPropagation(); });\n }\n if (dollhouse) {\n dollhouse.addEventListener('mousemove', (event) => { event.stopPropagation(); });\n }\n if (iframe) {\n iframe.addEventListener('mousemove', (event) => { event.stopPropagation(); });\n }\n },\n update: function () {\n const { data } = this;\n if (data.mode === 'off' || !data.enabled) {\n this.removeActiveIconClass();\n this.removeAnimations();\n } else if (data.mode === 'on' && data.enabled) {\n this.addActiveIconClass();\n this.setupAnimations();\n }\n },\n /**\n * Setup two different animations. First (autoAlign) will run only once and align\n * entity horizontally (X-axis). Second (loop) will run after first one completes and will\n * run indefinitely, rotating over Y-axis, as entity is already aligned to X-axis.\n */\n setupAnimations: function () {\n const { el } = this;\n const self = this;\n\n el.setAttribute(ANIMATION_NAMES.autoAlign, this.getAnimationConfig());\n el.addEventListener(ANIMATION_EVENTS.complete, function applyLoopAnimation () {\n this.removeEventListener(ANIMATION_EVENTS.complete, applyLoopAnimation);\n const animationConfig = self.getAnimationConfig();\n el.setAttribute(ANIMATION_NAMES.loop, {\n ...animationConfig,\n loop: true,\n });\n });\n },\n getAnimationConfig: function () {\n const { duration: dur } = this.data;\n const { x, y, z } = this.el.getAttribute('rotation');\n return {\n property: 'rotation',\n from: `${x} ${y} ${z}`,\n to: `0 ${y - 360} 0`,\n dur,\n easing: 'linear',\n };\n },\n removeAnimations: function () {\n const { el } = this;\n el.removeAttribute(ANIMATION_NAMES.autoAlign);\n el.removeAttribute(ANIMATION_NAMES.loop);\n },\n addActiveIconClass: function () {\n const autoRotateMenuButton = document.querySelector('.scene-menu__auto-rotate-button');\n const autoRotateSubMenuButton = document.querySelector('.scene-menu--item__auto-rotate');\n\n if (autoRotateMenuButton) {\n autoRotateMenuButton.classList.add(autoRotateActiveClass);\n } else if (autoRotateSubMenuButton) {\n autoRotateSubMenuButton.classList.add(autoRotateActiveClass);\n }\n },\n removeActiveIconClass: function () {\n const autoRotateMenuButton = document.querySelector('.scene-menu__auto-rotate-button');\n const autoRotateSubMenuButton = document.querySelector('.scene-menu--item__auto-rotate');\n\n if (autoRotateMenuButton) {\n autoRotateMenuButton.classList.remove(autoRotateActiveClass);\n } else if (autoRotateSubMenuButton) {\n autoRotateSubMenuButton.classList.remove(autoRotateActiveClass);\n }\n },\n});\n","import { CustomEvents } from './shared/constants';\nimport { isMobile } from '../utils/device';\n\nexport default AFRAME.registerComponent('blur-animation', {\n init: function () {\n const el = this.el;\n const sceneEl = el.sceneEl;\n const getPlaceholder = document.querySelector('.placeholder-screen');\n const isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;\n\n if (isMobile()) {\n sceneEl.style.transition = 'filter 150ms ease-in-out';\n } else {\n sceneEl.style.transition = 'filter 300ms ease-in-out';\n }\n // TODO Change movement animation + unification of the anim for all browsers!!\n sceneEl.addEventListener(CustomEvents.ROOM_CHANGE, () => {\n if (isMobile()) {\n sceneEl.style.filter = 'blur(14px)';\n } else if (!isMobile() && !isFirefox) {\n sceneEl.style.filter = 'blur(28px)';\n } else if (!isMobile() && isFirefox) {\n getPlaceholder.style.zIndex = '996';\n getPlaceholder.style.opacity = '1';\n }\n });\n },\n});\n","import bind from './utils/bind';\nimport KEYCODE_TO_CODE from './utils/keyCodeToCode';\nimport { CustomEvents } from './shared/constants';\n\nconst PI_2 = Math.PI / 2;\nconst CLAMP_VELOCITY = 0.00001;\nconst MAX_DELTA = 0.2;\nconst KEYS = [\n 'KeyW', 'KeyA', 'KeyS', 'KeyD',\n 'ArrowUp', 'ArrowLeft', 'ArrowRight', 'ArrowDown',\n];\n\nexport default AFRAME.registerComponent('3destate-arrow-controls', {\n // TODO: Find a solution which doesn't require the '3destate-look-controls' dependency\n dependencies: ['position', 'rotation', '3destate-look-controls'],\n\n schema: {\n acceleration: { default: 0.1 },\n adEnabled: { default: true },\n adInverted: { default: true },\n easing: { default: 2 },\n adAxis: { default: 'y', oneOf: ['x', 'y', 'z'] },\n wsAxis: { default: 'x', oneOf: ['x', 'y', 'z'] },\n wsEnabled: { default: true },\n wsInverted: { default: true },\n },\n init () {\n /* keep track of keys pressed */\n this.keys = {};\n\n this.velocity = new THREE.Vector3();\n\n this.bindMethods();\n this.addEventListeners();\n },\n tick (time, d) {\n const delta = d / 1000;\n this.updateVelocity(delta);\n this.updateRotation();\n },\n bindMethods () {\n this.addEventListeners = bind(this.addEventListeners, this);\n this.onKeyDown = bind(this.onKeyDown, this);\n this.onKeyUp = bind(this.onKeyUp, this);\n this.updateVelocity = bind(this.updateVelocity, this);\n this.updateRotation = bind(this.updateRotation, this);\n },\n addEventListeners () {\n window.addEventListener('keydown', this.onKeyDown);\n window.addEventListener('keyup', this.onKeyUp);\n },\n onKeyDown (event) {\n const sceneEl = this.el.sceneEl;\n const code = event.code || KEYCODE_TO_CODE[event.keyCode];\n if (KEYS.indexOf(code) !== -1) {\n sceneEl.emit(CustomEvents.ARROWS_USED);\n this.keys[code] = true;\n }\n },\n onKeyUp (event) {\n const code = event.code || KEYCODE_TO_CODE[event.keyCode];\n delete this.keys[code];\n },\n updateVelocity (delta) {\n let adSign;\n let wsSign;\n const { data, keys, velocity } = this;\n const { adAxis, wsAxis, acceleration } = data;\n\n // If FPS too low, reset velocity.\n if (delta > MAX_DELTA) {\n velocity[adAxis] = 0;\n velocity[wsAxis] = 0;\n return;\n }\n\n // Decay velocity.\n if (velocity[adAxis] !== 0) {\n velocity[adAxis] -= velocity[adAxis] * data.easing * delta;\n }\n if (velocity[wsAxis] !== 0) {\n velocity[wsAxis] -= velocity[wsAxis] * data.easing * delta;\n }\n\n // Clamp velocity easing.\n if (Math.abs(velocity[adAxis]) < CLAMP_VELOCITY) { velocity[adAxis] = 0; }\n if (Math.abs(velocity[wsAxis]) < CLAMP_VELOCITY) { velocity[wsAxis] = 0; }\n\n // Update velocity using keys pressed.\n if (data.adEnabled) {\n adSign = data.adInverted ? -1 : 1;\n if (keys.KeyA || keys.ArrowLeft) { velocity[adAxis] -= adSign * acceleration * delta; }\n if (keys.KeyD || keys.ArrowRight) { velocity[adAxis] += adSign * acceleration * delta; }\n }\n if (data.wsEnabled) {\n wsSign = data.wsInverted ? -1 : 1;\n if (keys.KeyW || keys.ArrowUp) { velocity[wsAxis] -= wsSign * acceleration * delta; }\n if (keys.KeyS || keys.ArrowDown) { velocity[wsAxis] += wsSign * acceleration * delta; }\n }\n },\n updateRotation () {\n const { el, velocity } = this;\n const object3D = el.object3D;\n const lookControlsComponent = this.el.components['3destate-look-controls'];\n\n if (!lookControlsComponent) {\n object3D.rotation.x = Math.max(-PI_2, Math.min(object3D.rotation.x + velocity.x, PI_2));\n object3D.rotation.y += velocity.y;\n object3D.rotation.z = 0;\n\n return;\n }\n\n const { pitchObject, yawObject } = lookControlsComponent;\n\n pitchObject.rotation.x = Math.max(-PI_2, Math.min(pitchObject.rotation.x + velocity.x, PI_2));\n yawObject.rotation.y += velocity.y;\n },\n});\n","import bind from './utils/bind';\nimport getSwipeParams from './utils/getSwipeParams';\nimport { CustomEvents } from './shared/constants';\n\n// To avoid recalculation at every mouse movement tick\nconst PI_2 = Math.PI / 2;\nconst CLAMP_VELOCITY = 0.00001;\nconst MAX_DELTA = 0.2;\n\n/**\n * Based on https://github.com/aframevr/aframe/blob/master/src/components/look-controls.js\n * commit: d3b9a30aeb812f91fd83a941c2f54dc0bfc24385\n */\nexport default AFRAME.registerComponent('3destate-look-controls', {\n dependencies: ['position', 'rotation'],\n\n schema: {\n enabled: { default: true },\n hmdEnabled: { default: false },\n pointerLockEnabled: { default: false },\n reverseMouseDrag: { default: true },\n reverseTouchDrag: { default: true },\n touchEnabled: { default: true },\n vAxis: {\n default: 'y',\n oneOf: ['x', 'y', 'z'],\n },\n hAxis: {\n default: 'x',\n oneOf: ['x', 'y', 'z'],\n },\n easing: { default: 2 },\n modulatorX: { default: 500 }, // larger number == slower movement on desktop move's main axis\n modulatorY: { default: 20000 }, // larger number == slower movement on desktop move's secondary axis\n allowedTime: { default: 30 }, // allowed time to perform mouse swipe\n mobileAllowedTime: { default: 300 }, // allowed time to perform swipe on mobile\n },\n\n init: function () {\n this.deltaYaw = 0;\n this.previousHMDPosition = new THREE.Vector3();\n this.hmdQuaternion = new THREE.Quaternion();\n this.hmdEuler = new THREE.Euler();\n this.magicWindowAbsoluteEuler = new THREE.Euler();\n this.magicWindowDeltaEuler = new THREE.Euler();\n this.position = new THREE.Vector3();\n this.velocity = new THREE.Vector2();\n // To save / restore camera pose\n this.savedRotation = new THREE.Vector3();\n this.savedPosition = new THREE.Vector3();\n this.magicWindowObject = new THREE.Object3D();\n this.rotation = {};\n this.deltaRotation = {};\n this.savedPose = null;\n this.pointerLocked = false;\n this.setupMouseControls();\n this.bindMethods();\n\n this.setupMagicWindowControls();\n\n setInterval(() => {\n window.tourRotationY = Math.floor(this.yawObject.rotation._y * (180 / Math.PI));\n }, 500);\n\n this.savedPose = {\n position: new THREE.Vector3(),\n rotation: new THREE.Euler(),\n };\n\n // Call enter VR handler if the scene has entered VR before the event listeners attached.\n if (this.el.sceneEl.is('vr-mode')) {\n this.onEnterVR();\n }\n },\n\n setupMagicWindowControls: function () {\n var magicWindowControls;\n\n // Only on mobile devices and only enabled if DeviceOrientation permission has been granted.\n if (AFRAME.utils.device.isMobile()) {\n magicWindowControls = this.magicWindowControls = new THREE.DeviceOrientationControls(this.magicWindowObject);\n if (typeof DeviceOrientationEvent !== 'undefined' && DeviceOrientationEvent.requestPermission) {\n magicWindowControls.enabled = false;\n if (this.el.sceneEl.components['device-orientation-permission-ui'].permissionGranted) {\n magicWindowControls.enabled = true;\n } else {\n this.el.sceneEl.addEventListener('deviceorientationpermissiongranted', function () {\n magicWindowControls.enabled = true;\n });\n }\n }\n }\n },\n\n update: function (oldData) {\n var data = this.data;\n\n // Disable grab cursor classes if no longer enabled.\n if (data.enabled !== oldData.enabled) {\n this.updateGrabCursor(data.enabled);\n }\n\n // Reset pitch and yaw if disabling HMD.\n if (oldData && !data.hmdEnabled && !oldData.hmdEnabled) {\n this.pitchObject.rotation.set(0, 0, 0);\n this.yawObject.rotation.set(0, 0, 0);\n }\n\n if (oldData && !data.pointerLockEnabled !== oldData.pointerLockEnabled) {\n this.removeEventListeners();\n this.addEventListeners();\n if (this.pointerLocked) {\n this.exitPointerLock();\n }\n }\n },\n\n tick: function (t, d) {\n var data = this.data;\n var delta = d / 1000;\n if (!data.enabled) {\n return;\n }\n this.updateVelocity(delta);\n this.updateOrientation();\n },\n\n play: function () {\n this.addEventListeners();\n },\n\n pause: function () {\n this.removeEventListeners();\n if (this.pointerLocked) {\n this.exitPointerLock();\n }\n },\n\n remove: function () {\n this.removeEventListeners();\n if (this.pointerLocked) {\n this.exitPointerLock();\n }\n },\n\n bindMethods: function () {\n this.onMouseDown = bind(this.onMouseDown, this);\n this.onMouseMove = bind(this.onMouseMove, this);\n this.onMouseUp = bind(this.onMouseUp, this);\n this.onTouchStart = bind(this.onTouchStart, this);\n this.onTouchMove = bind(this.onTouchMove, this);\n this.onTouchEnd = bind(this.onTouchEnd, this);\n this.onEnterVR = bind(this.onEnterVR, this);\n this.onExitVR = bind(this.onExitVR, this);\n this.onPointerLockChange = bind(this.onPointerLockChange, this);\n this.onPointerLockError = bind(this.onPointerLockError, this);\n this.onGyroscopeOn = bind(this.onGyroscopeOn, this);\n this.onGyroscopeOff = bind(this.onGyroscopeOff, this);\n this.updateLastSwipePos = bind(this.updateLastSwipePos, this);\n this.updateVelocity = bind(this.updateVelocity, this);\n this.resetVelocity = bind(this.resetVelocity, this);\n },\n\n /**\n * Set up states and Object3Ds needed to store rotation data.\n */\n setupMouseControls: function () {\n this.mouseDown = false;\n this.pitchObject = new THREE.Object3D();\n this.yawObject = new THREE.Object3D();\n this.yawObject.position.y = 10;\n this.yawObject.add(this.pitchObject);\n },\n\n /**\n * Add mouse and touch event listeners to canvas.\n */\n addEventListeners: function () {\n var sceneEl = this.el.sceneEl;\n var canvasEl = sceneEl.canvas;\n\n // Wait for canvas to load.\n if (!canvasEl) {\n sceneEl.addEventListener('render-target-loaded', bind(this.addEventListeners, this));\n return;\n }\n\n // Mouse events.\n canvasEl.addEventListener('mousedown', this.onMouseDown, false);\n window.addEventListener('mousemove', this.onMouseMove, false);\n window.addEventListener('mousemove', this.updateLastSwipePos, false);\n window.addEventListener('mouseup', this.onMouseUp, false);\n\n // Touch events.\n canvasEl.addEventListener('touchstart', this.onTouchStart);\n window.addEventListener('touchmove', this.onTouchMove);\n window.addEventListener('touchend', this.onTouchEnd);\n\n // sceneEl events.\n sceneEl.addEventListener(CustomEvents.ENTER_VR, this.onEnterVR);\n sceneEl.addEventListener(CustomEvents.EXIT_VR, this.onExitVR);\n sceneEl.addEventListener(CustomEvents.SYSTEM_GYROSCOPE_ON, this.onGyroscopeOn);\n sceneEl.addEventListener(CustomEvents.SYSTEM_GYROSCOPE_OFF, this.onGyroscopeOff);\n sceneEl.addEventListener(CustomEvents.GYROSCOPE_ON, this.onGyroscopeOn);\n sceneEl.addEventListener(CustomEvents.GYROSCOPE_OFF, this.onGyroscopeOff);\n\n // Pointer Lock events.\n if (this.data.pointerLockEnabled) {\n document.addEventListener('pointerlockchange', this.onPointerLockChange, false);\n document.addEventListener('mozpointerlockchange', this.onPointerLockChange, false);\n document.addEventListener('pointerlockerror', this.onPointerLockError, false);\n }\n },\n\n /**\n * Remove mouse and touch event listeners from canvas.\n */\n removeEventListeners: function () {\n var sceneEl = this.el.sceneEl;\n var canvasEl = sceneEl && sceneEl.canvas;\n\n if (!canvasEl) {\n return;\n }\n\n // Mouse events.\n canvasEl.removeEventListener('mousedown', this.onMouseDown);\n window.removeEventListener('mousemove', this.onMouseMove);\n window.removeEventListener('mouseup', this.onMouseUp);\n\n // Touch events.\n canvasEl.removeEventListener('touchstart', this.onTouchStart);\n window.removeEventListener('touchmove', this.onTouchMove);\n window.removeEventListener('touchend', this.onTouchEnd);\n\n // sceneEl events.\n sceneEl.removeEventListener('enter-vr', this.onEnterVR);\n sceneEl.removeEventListener('exit-vr', this.onExitVR);\n sceneEl.removeEventListener('gyroscope-on', this.onGyroscopeOn);\n sceneEl.removeEventListener('gyroscope-off', this.onGyroscopeOff);\n\n // Pointer Lock events.\n document.removeEventListener('pointerlockchange', this.onPointerLockChange, false);\n document.removeEventListener('mozpointerlockchange', this.onPointerLockChange, false);\n document.removeEventListener('pointerlockerror', this.onPointerLockError, false);\n },\n\n /**\n * Update orientation for mobile, mouse drag, and headset.\n * Mouse-drag only enabled if HMD is not active.\n */\n updateOrientation: (function () {\n var poseMatrix = new THREE.Matrix4();\n\n return function () {\n var data = this.data;\n var hmdEnabled = data.hmdEnabled;\n var object3D = this.el.object3D;\n var pitchObject = this.pitchObject;\n var yawObject = this.yawObject;\n var pose, rotation;\n var sceneEl = this.el.sceneEl;\n var velocity = this.velocity;\n var vAxis = data.vAxis;\n var hAxis = data.hAxis;\n\n // In VR mode, THREE is in charge of updating the camera pose.\n if (sceneEl.is('vr-mode') && sceneEl.checkHeadsetConnected()) {\n // With WebXR THREE applies headset pose to the object3D matrixWorld internally.\n // Reflect values back on position, rotation, scale for getAttribute to return the expected values.\n if (sceneEl.hasWebXR) {\n pose = sceneEl.renderer.xr.getCameraPose();\n if (pose) {\n poseMatrix.elements = pose.transform.matrix;\n poseMatrix.decompose(object3D.position, object3D.rotation, object3D.scale);\n }\n }\n return;\n }\n\n this.updateMagicWindowOrientation();\n\n // Update pitch and yaw with velocity\n pitchObject.rotation.x += velocity[hAxis];\n yawObject.rotation.y += velocity[vAxis];\n\n rotation = {\n x: pitchObject.rotation.x,\n y: yawObject.rotation.y,\n };\n\n if (hmdEnabled) {\n rotation.x += this.magicWindowDeltaEuler.x;\n rotation.y += this.magicWindowDeltaEuler.y;\n }\n\n // On mobile, do camera rotation with touch events and sensors.\n object3D.rotation.x = Math.max(-PI_2 / 1.1, Math.min(rotation.x, PI_2 / 1.1));\n object3D.rotation.y = rotation.y;\n // z-axis is blocked\n };\n })(),\n\n updateMagicWindowOrientation: function () {\n var magicWindowAbsoluteEuler = this.magicWindowAbsoluteEuler;\n var magicWindowDeltaEuler = this.magicWindowDeltaEuler;\n // Calculate magic window HMD quaternion.\n if (this.magicWindowControls && this.magicWindowControls.enabled) {\n this.magicWindowControls.update();\n magicWindowAbsoluteEuler.setFromQuaternion(this.magicWindowObject.quaternion, 'YXZ');\n if (!this.previousMagicWindowYaw && magicWindowAbsoluteEuler.y !== 0) {\n this.previousMagicWindowYaw = magicWindowAbsoluteEuler.y;\n }\n if (this.previousMagicWindowYaw) {\n magicWindowDeltaEuler.x = magicWindowAbsoluteEuler.x;\n magicWindowDeltaEuler.y += magicWindowAbsoluteEuler.y - this.previousMagicWindowYaw;\n magicWindowDeltaEuler.z = magicWindowAbsoluteEuler.z;\n this.previousMagicWindowYaw = magicWindowAbsoluteEuler.y;\n }\n }\n },\n\n /**\n * Translate mouse drag into rotation.\n *\n * Dragging up and down rotates the camera around the X-axis (yaw).\n * Dragging left and right rotates the camera around the Y-axis (pitch).\n */\n onMouseMove: function (event) {\n var direction;\n var movementX;\n var movementY;\n var pitchObject = this.pitchObject;\n var previousMouseEvent = this.previousMouseEvent;\n var yawObject = this.yawObject;\n\n // Not dragging or not enabled.\n if (!this.data.enabled || (!this.mouseDown && !this.pointerLocked)) {\n return;\n }\n\n // Calculate delta.\n if (this.pointerLocked) {\n movementX = event.movementX || event.mozMovementX || 0;\n movementY = event.movementY || event.mozMovementY || 0;\n } else {\n movementX = event.screenX - previousMouseEvent.screenX;\n movementY = event.screenY - previousMouseEvent.screenY;\n }\n this.previousMouseEvent = event;\n\n // Calculate rotation.\n direction = this.data.reverseMouseDrag ? 1 : -1;\n yawObject.rotation.y += movementX * 0.002 * direction;\n pitchObject.rotation.x += movementY * 0.002 * direction;\n pitchObject.rotation.x = Math.max(-PI_2, Math.min(PI_2, pitchObject.rotation.x));\n },\n\n /**\n * Register mouse down to detect mouse drag.\n */\n onMouseDown: function (evt) {\n var sceneEl = this.el.sceneEl;\n if (!this.data.enabled || (sceneEl.is('vr-mode') && sceneEl.checkHeadsetConnected())) {\n return;\n }\n // Handle only primary button.\n if (evt.button !== 0) {\n return;\n }\n\n var canvasEl = sceneEl && sceneEl.canvas;\n\n this.mouseDown = true;\n this.previousMouseEvent = evt;\n this.showGrabbingCursor();\n\n if (this.data.pointerLockEnabled && !this.pointerLocked) {\n if (canvasEl.requestPointerLock) {\n canvasEl.requestPointerLock();\n } else if (canvasEl.mozRequestPointerLock) {\n canvasEl.mozRequestPointerLock();\n }\n }\n\n this.mouseSwipe = {\n x: evt.pageX,\n y: evt.pageY,\n };\n this.lastMouseSwipe = null;\n this.mouseSwipeStartedTime = new Date().getTime();\n },\n\n /*\n * Function to get last position before mouseup event to determine velocity and direction\n */\n updateLastSwipePos: function (evt) {\n if (this.mouseDown) {\n this.lastMouseSwipe = {\n x: this.mouseSwipe.x,\n y: this.mouseSwipe.y,\n };\n this.mouseSwipeStartedTime = new Date().getTime();\n this.mouseSwipe = {\n x: evt.pageX,\n y: evt.pageY,\n };\n }\n },\n\n /**\n * Shows grabbing cursor on scene\n */\n showGrabbingCursor: function () {\n this.el.sceneEl.canvas.style.cursor = 'grabbing';\n },\n\n /**\n * Hides grabbing cursor on scene\n */\n hideGrabbingCursor: function () {\n this.el.sceneEl.canvas.style.cursor = '';\n },\n\n /**\n * Register mouse up to detect release of mouse drag.\n */\n onMouseUp: function (evt) {\n var data = this.data;\n var vAxis = data.vAxis;\n var hAxis = data.hAxis;\n var velocity = this.velocity;\n var distX, distY, elapsedTime, velX, velY, modX, modY;\n var maxVel = 0.03;\n this.mouseDown = false;\n this.hideGrabbingCursor();\n\n /*\n * Check this.mouseSwipeStart, because onMouseDown and onMouseUp are bound to different DOM nodes\n * and it might be undefined while guide is visible.\n */\n if (this.mouseSwipe && this.lastMouseSwipe && evt.pageX && evt.pageY) {\n distX = evt.pageX - this.lastMouseSwipe.x;\n distY = evt.pageY - this.lastMouseSwipe.y;\n // Move's main axis will have lower modulator and this results in greater velocity\n if (Math.abs(distX) / Math.abs(distY) >= 4) {\n modX = data.modulatorX;\n modY = data.modulatorY;\n } else if (Math.abs(distY) / Math.abs(distX) >= 4) {\n modX = data.modulatorY;\n modY = data.modulatorX;\n } else {\n // move doesn't have main axis\n modX = data.modulatorX;\n modY = data.modulatorX;\n }\n elapsedTime = new Date().getTime() - this.mouseSwipeStartedTime;\n if (elapsedTime < data.allowedTime) {\n // Detected swipe, apply velocity\n velX = distX / modX;\n velY = distY / modY;\n velocity[vAxis] = distX >= 0 ? Math.min(velX, maxVel) : Math.max(velX, (maxVel * -1));\n velocity[hAxis] = distY >= 0 ? Math.min(velY, maxVel) : Math.max(velY, (maxVel * -1));\n }\n }\n },\n\n /**\n * Register touch down to detect touch drag.\n */\n onTouchStart: function (evt) {\n if (evt.touches.length !== 1 ||\n !this.data.touchEnabled ||\n this.el.sceneEl.is('vr-mode')) {\n return;\n }\n this.touchStart = {\n x: evt.touches[0].pageX,\n y: evt.touches[0].pageY,\n };\n this.touchStarted = true;\n\n this.swipeStart = {\n x: evt.changedTouches[0].pageX,\n y: evt.changedTouches[0].pageY,\n };\n this.swipeStartedTime = new Date().getTime();\n\n this.resetVelocity();\n },\n\n /**\n * Translate touch move to X-axis and Y-axis rotation.\n */\n onTouchMove: function (evt) {\n var direction;\n var canvas = this.el.sceneEl.canvas;\n var deltaX, deltaY;\n var yawObject = this.yawObject;\n var pitchObject = this.pitchObject;\n var hmdEuler = this.hmdEuler;\n var hmdEnabled = this.data.hmdEnabled;\n\n if (!this.touchStarted || !this.data.touchEnabled) {\n return;\n }\n\n deltaX = 2 * Math.PI * (evt.touches[0].pageY - this.touchStart.y) / canvas.clientHeight;\n deltaY = 2 * Math.PI * (evt.touches[0].pageX - this.touchStart.x) / canvas.clientWidth;\n\n direction = this.data.reverseTouchDrag ? 1 : -1;\n\n pitchObject.rotation.x += deltaX * 0.5 * direction;\n yawObject.rotation.y += deltaY * 0.5 * direction;\n\n // Limit pitchObject rotation to be between -PI-2 and PI_2\n // If hmd is enabled, take into account hmd position\n if (hmdEnabled) {\n pitchObject.rotation.x = Math.max(-PI_2 - hmdEuler.x, Math.min(PI_2 - hmdEuler.x, pitchObject.rotation.x));\n } else {\n pitchObject.rotation.x = Math.max(-PI_2, Math.min(PI_2, pitchObject.rotation.x));\n }\n\n this.touchStart = {\n x: evt.touches[0].pageX,\n y: evt.touches[0].pageY,\n };\n },\n\n /**\n * Register touch end to detect release of touch drag.\n */\n onTouchEnd: function (evt) {\n var data = this.data;\n var vAxis = data.vAxis;\n var hAxis = data.hAxis;\n var velocity = this.velocity;\n var touchObj = evt.changedTouches[0];\n var distX, distY, elapsedTime;\n var swipeParams = getSwipeParams(); // adjust sensitivity for different screen sizes\n var threshold = swipeParams.threshold; // required min distance traveled to be considered swipe\n var mobileModulator = swipeParams.modulator; // larger number == slower movement on mobile\n /*\n * Check this.swipeStart, because onTouchStart and onTouchEnd are bound to different DOM nodes\n * and it might be undefined while guide is visible.\n */\n if (this.swipeStart) {\n distX = touchObj.pageX - this.swipeStart.x;\n distY = touchObj.pageY - this.swipeStart.y;\n elapsedTime = new Date().getTime() - this.swipeStartedTime;\n if (\n elapsedTime < data.mobileAllowedTime &&\n (Math.abs(distX) >= threshold ||\n Math.abs(distY) >= threshold)\n ) {\n // Detected swipe, apply velocity\n velocity[vAxis] = distX / mobileModulator;\n velocity[hAxis] = distY / mobileModulator;\n }\n }\n this.touchStarted = false;\n },\n\n /**\n * Save pose.\n */\n onEnterVR: function () {\n var sceneEl = this.el.sceneEl;\n if (!sceneEl.checkHeadsetConnected()) {\n return;\n }\n this.saveCameraPose();\n this.el.object3D.position.set(0, 0, 0);\n this.el.object3D.rotation.set(0, 0, 0);\n if (sceneEl.hasWebXR) {\n this.el.object3D.matrixAutoUpdate = false;\n this.el.object3D.updateMatrix();\n }\n },\n\n /**\n * Restore the pose.\n */\n onExitVR: function () {\n if (!this.el.sceneEl.checkHeadsetConnected()) {\n return;\n }\n this.restoreCameraPose();\n this.previousHMDPosition.set(0, 0, 0);\n this.el.object3D.matrixAutoUpdate = true;\n },\n\n /**\n * Update Pointer Lock state.\n */\n onPointerLockChange: function () {\n this.pointerLocked = !!(document.pointerLockElement || document.mozPointerLockElement);\n },\n\n /**\n * Recover from Pointer Lock error.\n */\n onPointerLockError: function () {\n this.pointerLocked = false;\n },\n\n // Exits pointer-locked mode.\n exitPointerLock: function () {\n document.exitPointerLock();\n this.pointerLocked = false;\n },\n\n /**\n * Toggle the feature of showing/hiding the grab cursor.\n */\n updateGrabCursor: function (enabled) {\n var sceneEl = this.el.sceneEl;\n\n function enableGrabCursor () {\n sceneEl.canvas.classList.add('a-grab-cursor');\n }\n\n function disableGrabCursor () {\n sceneEl.canvas.classList.remove('a-grab-cursor');\n }\n\n if (!sceneEl.canvas) {\n if (enabled) {\n sceneEl.addEventListener('render-target-loaded', enableGrabCursor);\n } else {\n sceneEl.addEventListener('render-target-loaded', disableGrabCursor);\n }\n return;\n }\n\n if (enabled) {\n enableGrabCursor();\n return;\n }\n disableGrabCursor();\n },\n\n /**\n * Save camera pose before entering VR to restore later if exiting.\n */\n saveCameraPose: function () {\n var el = this.el;\n\n this.savedPose.position.copy(el.object3D.position);\n this.savedPose.rotation.copy(el.object3D.rotation);\n this.hasSavedPose = true;\n },\n\n /**\n * Reset camera pose to before entering VR.\n */\n restoreCameraPose: function () {\n var el = this.el;\n var savedPose = this.savedPose;\n\n if (!this.hasSavedPose) {\n return;\n }\n\n // Reset camera orientation.\n el.object3D.position.copy(savedPose.position);\n el.object3D.rotation.copy(savedPose.rotation);\n this.hasSavedPose = false;\n },\n\n onGyroscopeOn: function () {\n var pitchObject = this.pitchObject;\n\n // Reset pitch object\n pitchObject.rotation.set(0, 0, 0);\n\n this.resetVelocity();\n\n this.el.setAttribute('3destate-look-controls', { hmdEnabled: true });\n },\n onGyroscopeOff: function () {\n var el = this.el;\n\n // Update pitchObject\n this.pitchObject.rotation.x = 0;\n\n this.resetVelocity();\n\n el.setAttribute('3destate-look-controls', { hmdEnabled: false });\n },\n updateVelocity: function (delta) {\n var data = this.data;\n var velocity = this.velocity;\n var vAxis = data.vAxis;\n var hAxis = data.hAxis;\n\n // If FPS too low, reset velocity.\n if (delta > MAX_DELTA) {\n this.resetVelocity();\n return;\n }\n\n // Decay velocity.\n if (velocity[vAxis] !== 0) {\n velocity[vAxis] -= velocity[vAxis] * data.easing * delta;\n }\n if (velocity[hAxis] !== 0) {\n velocity[hAxis] -= velocity[hAxis] * data.easing * delta;\n }\n\n // Clamp velocity easing.\n if (Math.abs(velocity[vAxis]) < CLAMP_VELOCITY) {\n velocity[vAxis] = 0;\n }\n if (Math.abs(velocity[hAxis]) < CLAMP_VELOCITY) {\n velocity[hAxis] = 0;\n }\n },\n resetVelocity: function () {\n this.velocity.set(0, 0);\n },\n});\n","/*\n * Calculates params for swipe - less sensitivity for larger screens\n */\nexport default function getSwipeParams () {\n var screenSize = window.screen.width;\n return {\n threshold: Math.max(40, Math.min(screenSize / 9, 90)),\n modulator: Math.max(1400, Math.min(screenSize * 3.8, 2200)),\n };\n}\n","export default AFRAME.registerComponent('camera-fov-on-slide', {\n init: function () {\n const rangeSlider = document.getElementById('rs-range-line');\n const rangeBullet = document.getElementById('rs-bullet');\n const camera = document.getElementById('camera');\n const wrapperSlider = document.querySelector('.class-visible-on-start');\n\n rangeSlider.addEventListener('input', showSliderValue, false);\n\n function showSliderValue () {\n if ((rangeSlider.value * 2) < 2) {\n rangeBullet.innerHTML = 'MIN';\n } else if ((rangeSlider.value * 2) > 98) {\n rangeBullet.innerHTML = 'MAX';\n } else {\n rangeBullet.innerHTML = (rangeSlider.value * 2) + '%';\n }\n\n const bulletPosition = (rangeSlider.value / rangeSlider.max);\n rangeBullet.style.left = (bulletPosition * 90) + '%';\n const fovValue = (bulletPosition * 50);\n const calculatedFovValue = (115 - fovValue);\n camera.setAttribute('camera', { fov: calculatedFovValue });\n }\n\n const waitOnLoad = setInterval(() => {\n if (document.body.classList.contains('guide-hidden')) {\n setTimeout(() => {\n clearInterval(waitOnLoad);\n wrapperSlider.classList.remove('class-visible-on-start');\n }, 500);\n }\n }, 1000);\n },\n});\n","/*\n * Presentational component; takes in error message to show on error-screen.\n */\nexport default AFRAME.registerComponent('error-screen', {\n schema: {\n errorToDisplay: {\n type: 'selector',\n },\n },\n update: function () {\n const data = this.data;\n const errorToDisplay = data.errorToDisplay;\n if (!errorToDisplay) return;\n\n const errorScreen = document.querySelector('.error-screen_wrapper');\n const loaderAnimation = document.querySelector('.loader-animation-wrapper');\n\n errorToDisplay.style.display = 'block';\n loaderAnimation.style.display = 'none';\n errorScreen.style.display = 'flex';\n },\n});\n","import { isPortrait } from './utils/deviceOrientation';\n\nconst WINDOW_FOCUSED_MIN_TIME = 400;\n\nexport default AFRAME.registerComponent('show-ios-navigation-bar', {\n init: function () {\n const isIOS = AFRAME.utils.device.isIOS();\n if (!isIOS) {\n return;\n }\n\n window.addEventListener('orientationchange', () => {\n setTimeout(\n this.showNavigationBar,\n WINDOW_FOCUSED_MIN_TIME,\n );\n });\n },\n showNavigationBar: function () {\n if (isPortrait()) {\n window.scrollTo(0, 1);\n }\n },\n});\n","/* Workaround to let user show the address bar */\nexport default AFRAME.registerComponent('address-bar-overlay', {\n init: function () {\n const isIOS = AFRAME.utils.device.isIOS();\n const isMobile = AFRAME.utils.device.isMobile();\n const overlay = document.querySelector('.address-bar-overlay');\n\n if (!isMobile || isIOS || !overlay) {\n return;\n }\n\n this.bindMethods();\n this.addEventListeners();\n },\n bindMethods: function () {\n this.addEventListeners = this.addEventListeners.bind(this);\n this.show = this.show.bind(this);\n this.hide = this.hide.bind(this);\n this.isAddressBarVisible = this.isAddressBarVisible.bind(this);\n },\n addEventListeners: function () {\n const sceneEl = this.el.sceneEl;\n const overlay = document.querySelector('.address-bar-overlay');\n\n sceneEl.addEventListener('show-overlay', this.show);\n overlay.addEventListener('touchend', this.hide);\n },\n show: function () {\n const overlay = document.querySelector('.address-bar-overlay');\n\n overlay.classList.remove('a-hidden');\n },\n hide: function () {\n const overlay = document.querySelector('.address-bar-overlay');\n\n if (this.isAddressBarVisible()) {\n overlay.classList.add('a-hidden');\n }\n },\n isAddressBarVisible: function () {\n return window.innerHeight - document.documentElement.clientHeight === 0;\n },\n});\n","import { isGyroscopeSupported } from './utils/device';\nimport { getTranslation } from '../services/translations/getTranslations';\n\nexport default AFRAME.registerComponent('ios-gyroscope-guide', {\n init: function () {\n const isMobile = AFRAME.utils.device.isMobile();\n const isIOS = AFRAME.utils.device.isIOS();\n const isExterior = window.location.href.includes('isExterior');\n if (!isIOS || !isMobile || isExterior) {\n return;\n }\n\n this.bindMethods();\n this.addEventListeners();\n },\n bindMethods: function () {\n this.addEventListeners = this.addEventListeners.bind(this);\n this.show = this.show.bind(this);\n this.hide = this.hide.bind(this);\n },\n addEventListeners: function () {\n // eslint-disable-next-line camelcase\n const { gyroscope_guides } = getTranslation();\n // iOS13GyroscopeGuide\n if (typeof (DeviceMotionEvent) !== 'undefined' && typeof (DeviceMotionEvent.requestPermission) === 'function') {\n const gyroscopeButton = document.querySelector('.gyroscope-permission');\n const gyroscopeSupportViaLocalStorage = sessionStorage.getItem('gyroscopeCheck');\n\n if (gyroscopeSupportViaLocalStorage !== 'ON') {\n this.el.sceneEl.addEventListener('guide-hidden', () => isGyroscopeSupported().catch(this.show));\n }\n gyroscopeButton.addEventListener('click', () => {\n DeviceMotionEvent.requestPermission()\n .then(response => {\n // Adding ON/OFF option for gyroscope in localstorage is must have with iOS 13.4.X+\n // it doesnt see gyroscope/vr when clicked allowed for permissions to use...\n if (response === 'granted') {\n sessionStorage.setItem('gyroscopeCheck', 'ON');\n window.location.reload();\n } else {\n sessionStorage.setItem('gyroscopeCheck', 'OFF');\n alert(gyroscope_guides.ios13.cancel_permission);\n }\n })\n .catch(err => {\n console.error(err);\n alert(gyroscope_guides.ios13.not_supported);\n });\n });\n }\n },\n show: function () {\n const guideWrapper = document.querySelector('.ios-gyroscope-guide-wrapper');\n const guideContainer = document.querySelector('.ios-gyroscope-guide-wrapper__main');\n const permissionButton = document.querySelector('.permission_button');\n\n if (!guideWrapper || !guideContainer) {\n return;\n }\n\n guideWrapper.classList.remove('a-hidden');\n setTimeout(() => {\n guideContainer.classList.remove('opacity-0');\n }, 100);\n guideWrapper.addEventListener('touchstart', (e) => {\n if (e.target.classList.contains('ios-gyroscope-guide-wrapper')) {\n this.hide();\n }\n });\n\n permissionButton.addEventListeners('touchstart', (e) => {\n if (e.target.classList.contains('ios-gyroscope-guide-wrapper')) {\n this.hide();\n }\n });\n },\n hide: function () {\n const guideWrapper = document.querySelector('.ios-gyroscope-guide-wrapper');\n const guideContainer = document.querySelector('.ios-gyroscope-guide-wrapper__main');\n\n guideContainer.classList.add('opacity-0');\n setTimeout(() => {\n guideWrapper.classList.add('a-hidden');\n }, 500);\n },\n});\n","class Timer {\n constructor () {\n this.isRunning = false;\n this.startTime = 0;\n this.overallTime = 0;\n }\n\n _getTimeElapsedSinceLastStart () {\n if (!this.startTime) {\n return 0;\n }\n\n return Date.now() - this.startTime;\n }\n\n start () {\n if (this.isRunning) {\n return console.error('Timer is already running');\n }\n\n this.isRunning = true;\n\n this.startTime = Date.now();\n }\n\n stop () {\n if (!this.isRunning) {\n return console.error('Timer is already stopped');\n }\n\n this.isRunning = false;\n\n this.overallTime = this.overallTime + this._getTimeElapsedSinceLastStart();\n }\n\n reset () {\n this.overallTime = 0;\n\n if (this.isRunning) {\n this.startTime = Date.now();\n return;\n }\n\n this.startTime = 0;\n }\n\n getTime () {\n if (!this.startTime) {\n return 0;\n }\n\n if (this.isRunning) {\n return this.overallTime + this._getTimeElapsedSinceLastStart();\n }\n\n return this.overallTime;\n }\n}\n\nexport default Timer;\n","import { CustomEvents, FIRST_ROOM_NAME, MENU_ITEM_ACTIVE_CLASS } from '../shared/constants';\nimport { isLandscape } from '../utils/deviceOrientation';\nimport Timer from './timer';\n\nconst featureEvents = [\n {\n name: CustomEvents.ENTER_VR,\n },\n {\n name: CustomEvents.EXIT_VR,\n },\n {\n name: CustomEvents.MINIMAP_SHOW,\n },\n {\n name: CustomEvents.MINIMAP_HIDE,\n },\n {\n name: CustomEvents.DOLLHOUSE_SHOW,\n },\n {\n name: CustomEvents.DOLLHOUSE_HIDE,\n },\n {\n name: CustomEvents.AUTO_ROTATE_ON,\n },\n {\n name: CustomEvents.AUTO_ROTATE_OFF,\n },\n {\n name: CustomEvents.GYROSCOPE_ON,\n },\n {\n name: CustomEvents.GYROSCOPE_OFF,\n },\n {\n name: CustomEvents.ENTER_FULLSCREEN,\n },\n {\n name: CustomEvents.EXIT_FULLSCREEN,\n },\n {\n name: CustomEvents.OPEN_RATE_MODAL,\n },\n {\n name: CustomEvents.OPEN_SHARE_MODAL,\n },\n {\n name: CustomEvents.SHARE_TO_FACEBOOK,\n },\n {\n name: CustomEvents.SHARE_TO_TWITTER,\n },\n {\n name: CustomEvents.SHARE_TO_LINKEDIN,\n },\n {\n name: CustomEvents.SHARE_TO_PINTEREST,\n },\n {\n name: CustomEvents.STYLE_CHANGE,\n },\n {\n name: CustomEvents.ARROWS_USED,\n sendOnce: true,\n },\n];\n\nconst EventDetails = {\n [CustomEvents.ENTER_VR]: {\n eventLabel: 'User entered VR Mode',\n },\n [CustomEvents.EXIT_VR]: {\n eventLabel: 'User exited VR Mode',\n },\n [CustomEvents.MINIMAP_SHOW]: {\n eventLabel: 'User shown minimap',\n },\n [CustomEvents.MINIMAP_HIDE]: {\n eventLabel: 'User hide minimap',\n },\n [CustomEvents.DOLLHOUSE_SHOW]: {\n eventLabel: 'User shown dollhouse',\n },\n [CustomEvents.DOLLHOUSE_HIDE]: {\n eventLabel: 'User hide dollhouse',\n },\n [CustomEvents.AUTO_ROTATE_ON]: {\n eventLabel: 'User turned auto rotate on',\n },\n [CustomEvents.AUTO_ROTATE_OFF]: {\n eventLabel: 'User turned auto rotate off',\n },\n [CustomEvents.GYROSCOPE_ON]: {\n eventLabel: 'User turned gyro on',\n },\n [CustomEvents.GYROSCOPE_OFF]: {\n eventLabel: 'User turned gyro off',\n },\n [CustomEvents.ENTER_FULLSCREEN]: {\n eventLabel: 'User entered fullscreen mode',\n },\n [CustomEvents.EXIT_FULLSCREEN]: {\n eventLabel: 'User exited fullscreen mode',\n },\n [CustomEvents.OPEN_RATE_MODAL]: {\n eventLabel: 'User opened rate modal',\n },\n [CustomEvents.OPEN_SHARE_MODAL]: {\n eventLabel: 'User opened share modal',\n },\n [CustomEvents.SHARE_TO_FACEBOOK]: {\n eventLabel: 'User shared to facebook',\n },\n [CustomEvents.SHARE_TO_TWITTER]: {\n eventLabel: 'User shared to twitter',\n },\n [CustomEvents.SHARE_TO_LINKEDIN]: {\n eventLabel: 'User shared to linkedin',\n },\n [CustomEvents.SHARE_TO_PINTEREST]: {\n eventLabel: 'User shared to pinterest',\n },\n [CustomEvents.ARROWS_USED]: {\n eventLabel: 'User used arrows',\n },\n [CustomEvents.STYLE_CHANGE]: {\n eventLabel: 'User toggle style',\n },\n};\n\nconst getEventDetails = eventType => EventDetails[eventType];\n\nconst ensureOnce = fn => {\n let alreadyRun = false;\n return (...params) => {\n if (alreadyRun) {\n return;\n }\n\n fn(...params);\n alreadyRun = true;\n };\n};\n\nconst RoomTypeToRoomName = {\n LivingRoom: 'living-room',\n Bedroom: 'bedroom',\n Bathroom: 'bathroom',\n Other: 'other',\n KidsRoom: 'kids-room',\n Kitchen: 'kitchen',\n Stairs: 'stairs',\n Toilet: 'toilet',\n Bathroom2: 'bathroom2',\n Exterior: 'exterior',\n DressingRoom: 'dressing-room',\n BoilerRoom: 'boiler-room',\n HomeOffice: 'home-office',\n Pantry: 'pantry',\n WashingRoom: 'washing-room',\n RetailSpace: 'retail-space',\n Pool: 'pool',\n WinterGarden: 'winter-garden',\n Entresol: 'entresol',\n Attic: 'attic',\n Library: 'library',\n GameRoom: 'game-room',\n HomeTheater: 'home-theater',\n PlayRoom: 'play-room',\n WorkShop: 'work-shop',\n LivingRoomWithAKitchenette: 'living-room-with-a-kitchenette',\n HabitableAttic: 'habitable-attic',\n UtilityRoom: 'utility-room',\n Service: 'service',\n DiningRoom: 'dining-room',\n};\n\nconst visitedRooms = {\n [FIRST_ROOM_NAME]: true,\n};\n\nconst featureTimingEventIsSupported = (className) =>\n document.querySelector(`.scene-menu--item__${className}`)?.classList.contains(MENU_ITEM_ACTIVE_CLASS);\n\nconst featureTimingEvents = [\n {\n startEvent: CustomEvents.ENTER_VR,\n stopEvent: CustomEvents.EXIT_VR,\n timingVar: 'Time in VR Mode',\n timer: new Timer(),\n menuItemClassName: 'vr-mode',\n },\n {\n startEvent: [CustomEvents.GYROSCOPE_ON, CustomEvents.SYSTEM_GYROSCOPE_ON],\n stopEvent: CustomEvents.GYROSCOPE_OFF,\n timingVar: 'Gyroscope usage',\n timer: new Timer(),\n menuItemClassName: 'gyroscope',\n },\n {\n startEvent: CustomEvents.AUTO_ROTATE_ON,\n stopEvent: CustomEvents.AUTO_ROTATE_OFF,\n timingVar: 'Auto-rotate usage',\n timer: new Timer(),\n menuItemClassName: 'auto-rotate',\n isOn: () => document.getElementById('camera-rig').getAttribute('auto-rotate').enabled,\n },\n {\n startEvent: CustomEvents.ENTER_FULLSCREEN,\n stopEvent: CustomEvents.EXIT_FULLSCREEN,\n timingVar: 'Fullscreen usage',\n timer: new Timer(),\n menuItemClassName: 'fullscreen',\n },\n];\n\nconst orientationTimer = new Timer();\n\nexport default AFRAME.registerComponent('google-analytics', {\n schema: {\n renderStyle: { default: 'default' },\n },\n init: function () {\n this.bindMethods();\n this.setupGoogleAnalytics();\n this.pageView();\n },\n bindMethods: function () {\n this.setupGoogleAnalytics = this.setupGoogleAnalytics.bind(this);\n this.addFeatureEventListeners = this.addFeatureEventListeners.bind(this);\n this.sendEvent = this.sendEvent.bind(this);\n this.addFeatureTimingEventListeners = this.addFeatureTimingEventListeners.bind(this);\n this.sendTimingEvent = this.sendTimingEvent.bind(this);\n this.addOrientationTrackingEventListeners = this.addOrientationTrackingEventListeners.bind(this);\n this.handleInitialAssetsLoaded = this.handleInitialAssetsLoaded.bind(this);\n this.sendRoomChangeEvent = this.sendRoomChangeEvent.bind(this);\n this.beforeUnload = this.beforeUnload.bind(this);\n },\n setupGoogleAnalytics: function () {\n const sceneEl = this.el.sceneEl;\n const cubemapSky = document.getElementById('cubemap-sky');\n\n this.addFeatureEventListeners();\n this.addFeatureTimingEventListeners();\n this.addOrientationTrackingEventListeners();\n sceneEl.addEventListener(CustomEvents.ROOM_CHANGE, this.sendRoomChangeEvent);\n cubemapSky.addEventListener(CustomEvents.MINIMUM_LOADED, this.handleInitialAssetsLoaded);\n window.addEventListener('beforeunload', this.beforeUnload);\n },\n addFeatureEventListeners: function () {\n const sceneEl = this.el.sceneEl;\n featureEvents.forEach(({ name: eventName, sendOnce }) => {\n sceneEl.addEventListener(eventName, sendOnce ? ensureOnce(this.sendEvent) : this.sendEvent);\n });\n },\n sendEvent: function (event) {\n ga('app3dEstate.send', {\n hitType: 'event',\n eventCategory: 'Features',\n eventAction: event.type,\n ...getEventDetails(event.type),\n });\n },\n pageView: function () {\n ga('app3dEstate.send', {\n hitType: 'pageview',\n page: window.location.href,\n title: '3D_estate tour visit',\n });\n },\n addFeatureTimingEventListeners: function () {\n const sceneEl = this.el.sceneEl;\n featureTimingEvents.forEach(({ startEvent, stopEvent, timer, isOn }) => {\n if (isOn && isOn()) {\n timer.start();\n }\n\n if (Array.isArray(startEvent)) {\n startEvent.forEach(event => sceneEl.addEventListener(event, () => timer.start()));\n } else {\n sceneEl.addEventListener(startEvent, () => timer.start());\n }\n\n sceneEl.addEventListener(stopEvent, () => timer.stop());\n });\n },\n addOrientationTrackingEventListeners: function () {\n if (AFRAME.utils.device.isMobile() && isLandscape()) {\n orientationTimer.start();\n }\n\n window.addEventListener('orientationchange', () => {\n if (isLandscape()) {\n return orientationTimer.start();\n }\n\n orientationTimer.stop();\n });\n },\n sendTimingEvent: function ({ startEvent, timingVar, timer, menuItemClassName }) {\n if (!featureTimingEventIsSupported(menuItemClassName) ||\n (startEvent === CustomEvents.ENTER_VR && timer.getTime() === 0)\n ) {\n return;\n }\n\n ga('app3dEstate.send', {\n hitType: 'timing',\n timingCategory: 'Features',\n timingVar,\n timingValue: timer.getTime(),\n });\n },\n handleInitialAssetsLoaded: function () {\n if (window.performance && window.performance.now) {\n const loadingTime = Math.round(performance.now());\n ga('app3dEstate.send', {\n hitType: 'timing',\n timingCategory: 'Loading',\n timingVar: 'Initial loading time',\n timingValue: loadingTime,\n });\n }\n },\n sendRoomChangeEvent: function (event) {\n const { clickSource, destinationRoomType, id } = event.detail;\n\n visitedRooms[id] = true;\n\n ga('app3dEstate.send', {\n hitType: 'event',\n eventCategory: 'Movement',\n eventAction: `${CustomEvents.ROOM_CHANGE}-${clickSource}`,\n eventLabel: RoomTypeToRoomName[destinationRoomType],\n });\n },\n beforeUnload: function () {\n const cubemapSky = document.getElementById('cubemap-sky');\n const numberOfRooms = cubemapSky.getAttribute('cubemap-sky').cubemapData.length;\n const numberOfVisitedRooms = Object.keys(visitedRooms).length;\n\n ga('app3dEstate.send', {\n hitType: 'event',\n eventCategory: 'Spheres',\n eventAction: 'closed-visited-tour',\n eventLabel: `Visited ${numberOfVisitedRooms}/${numberOfRooms} (${Math.round(numberOfVisitedRooms / numberOfRooms * 100)}%)`,\n nonInteraction: true,\n });\n\n ga('app3dEstate.send', {\n hitType: 'event',\n eventCategory: 'Spheres',\n eventAction: numberOfRooms,\n eventLabel: numberOfVisitedRooms,\n eventValue: Math.round(numberOfVisitedRooms / numberOfRooms * 100),\n nonInteraction: true,\n });\n\n featureTimingEvents.forEach(this.sendTimingEvent);\n\n if (AFRAME.utils.device.isMobile()) {\n this.sendTimingEvent({\n timingVar: 'Time in Landscape mode',\n timer: orientationTimer,\n });\n }\n },\n});\n","import { CustomEvents } from './shared/constants';\nimport { getTranslation } from '../services/translations/getTranslations';\n\nexport default AFRAME.registerComponent('track-room-change', {\n schema: {\n id: { type: 'string' },\n clickSource: { type: 'string' },\n destinationRoomType: { type: 'string' },\n destinationRoomFloor: { type: 'string' },\n },\n init: function () {\n const el = this.el;\n this.bindMethods();\n el.addEventListener(CustomEvents.CLICKED_AND_LOADED, this.handleHotspotClick);\n },\n bindMethods: function () {\n this.handleHotspotClick = this.handleHotspotClick.bind(this);\n },\n handleHotspotClick: function () {\n const {\n clickSource,\n destinationRoomType,\n id,\n destinationRoomFloor,\n } = this.data;\n const currentLocation = document.querySelector('.current-location');\n const currentLocationText = document.querySelector('.current-location__text');\n const sceneMenuTop = document.querySelector('.scene-menu__top');\n const poweredBy = document.querySelector('.powered-by');\n const shoppingListContainer = document.querySelector('.shopping-list-container');\n const leftBottomInterface = document.querySelector('.scene-menu__bottom');\n const styleSelectorControllerWrapper = document.querySelector('.style-selector-controlLer-wrapper');\n const styleSelectorWrapper = document.querySelector('.style-selector-wrapper');\n const stylesAvailable = document.querySelectorAll('.style-selector-wrapper .style-item');\n const styleContainer = document.querySelector('.style-selector-container');\n\n if (shoppingListContainer && shoppingListContainer.classList.contains('active')) {\n shoppingListContainer.classList.remove('active');\n shoppingListContainer.setAttribute('data-product-id', '');\n leftBottomInterface.style.left = '10px';\n\n if (styleContainer) {\n styleSelectorControllerWrapper.style.left = '80px';\n styleSelectorWrapper.classList.remove('product-list-opened');\n }\n\n const productsDropDown = document.querySelector('.products-drop-down');\n productsDropDown.classList.remove('active');\n\n if (window.innerWidth > 800 && styleContainer) {\n styleSelectorWrapper.style.maxWidth = styleSelectorWrapper.dataset.maxWidth;\n }\n\n const onToggleStyleArrowSet = () => {\n if (!styleContainer) return;\n const availableStylesWidth = (stylesAvailable.length * 100);\n\n if (availableStylesWidth > styleContainer.offsetWidth + 10) {\n styleSelectorWrapper.classList.add('right-arrow-visible');\n } else {\n styleSelectorWrapper.classList.remove('right-arrow-visible');\n }\n };\n\n onToggleStyleArrowSet();\n }\n\n if (currentLocation && currentLocationText) {\n const { roomsTitle } = getTranslation();\n const {\n livingRoom,\n bedroom,\n bathroom,\n moveStraight,\n childrenRoom,\n kitchen,\n stairs,\n toilet,\n bathroom2,\n exterior,\n exterior2,\n dressingRoom,\n boilerRoom,\n homeOffice,\n pantry,\n washingRoom,\n retailSpace,\n pool,\n winterGarden,\n entresol,\n attic,\n library,\n gameRoom,\n homeTheater,\n playRoom,\n workShop,\n livingRoomWithAKitchenette,\n habitableAttic,\n utilityRoom,\n service,\n diningRoom,\n } = roomsTitle;\n const exteriorTitle = window?.tour?.isExterior ? exterior2 : exterior;\n\n const setRoomType = (type) => {\n if (type === 'Other') {\n sceneMenuTop?.classList.add('hide-other');\n poweredBy?.classList.add('hide-other');\n } else {\n sceneMenuTop?.classList.remove('hide-other');\n poweredBy?.classList.remove('hide-other');\n }\n\n const rooms = {\n LivingRoom: livingRoom,\n Bedroom: bedroom,\n Bathroom: bathroom,\n Other: moveStraight,\n KidsRoom: childrenRoom,\n Kitchen: kitchen,\n Stairs: stairs,\n Toilet: toilet,\n Bathroom2: bathroom2,\n Exterior: exteriorTitle,\n DressingRoom: dressingRoom,\n BoilerRoom: boilerRoom,\n HomeOffice: homeOffice,\n Pantry: pantry,\n WashingRoom: washingRoom,\n RetailSpace: retailSpace,\n Pool: pool,\n WinterGarden: winterGarden,\n Entresol: entresol,\n Attic: attic,\n Library: library,\n GameRoom: gameRoom,\n HomeTheater: homeTheater,\n PlayRoom: playRoom,\n WorkShop: workShop,\n LivingRoomWithAKitchenette: livingRoomWithAKitchenette,\n HabitableAttic: habitableAttic,\n UtilityRoom: utilityRoom,\n Service: service,\n DiningRoom: diningRoom,\n };\n\n return rooms[type];\n };\n\n currentLocationText.innerText = setRoomType(destinationRoomType);\n }\n\n const cubemapSky = document.getElementById('cubemap-sky');\n const { smartModelDomains } = cubemapSky.getAttribute('cubemap-sky');\n const temporaryDomainList = ['franciszkanskiepoludnie', 'lokum-porto', 'lokum-verde', 'mieszkajwmiescie', 'nowy-tarchomin', '3destate.app', 'localhost', ...smartModelDomains];\n const parentUrl = (window.location !== window.parent.location)\n ? document.referrer\n : document.location.href;\n let domainIsAvailable = false;\n\n temporaryDomainList.forEach((el) => {\n if (parentUrl.includes(el) || el === 'victoriadom.pl' || el === 'allmyhomes.com') {\n domainIsAvailable = true;\n }\n });\n\n const isExteriorEvenIfTargetIsNot = this.el.sceneEl.getAttribute('cubemap-preloader')?.cubemapData;\n const getExteriorTarget = (cubemaps) => {\n if (cubemaps) {\n const target = cubemaps.find((cube) => {\n if (cube.cameraId === Number(id)) {\n return cube;\n }\n });\n\n return target.roomType === 'Exterior';\n }\n return false;\n };\n const destinationRoomTypeIsExterior = getExteriorTarget(isExteriorEvenIfTargetIsNot);\n\n if (domainIsAvailable) {\n if (clickSource && (destinationRoomType === 'Exterior' || destinationRoomTypeIsExterior)) {\n parent.window.postMessage({\n isExterior: true,\n parentCall: false,\n }, '*');\n console.log('set postMessage to { isExterior: true, parentCall: false }');\n } else {\n parent.window.postMessage({\n isExterior: false,\n parentCall: false,\n }, '*');\n console.log('set postMessage to { isExterior: false, parentCall: false }');\n }\n }\n\n if (clickSource && (destinationRoomType === 'Exterior' || destinationRoomTypeIsExterior)) {\n window.tour = { isExterior: true };\n } else {\n window.tour = { isExterior: false };\n }\n\n const sceneEl = this.el.sceneEl;\n sceneEl.emit(CustomEvents.ROOM_CHANGE, {\n id,\n clickSource,\n destinationRoomType,\n destinationRoomFloor,\n });\n\n window.floor.currentMiniMapFloor = Number(destinationRoomFloor);\n window.floor.currentFloor = Number(destinationRoomFloor);\n },\n});\n","import {\n CustomEvents,\n FIRST_ROOM_NAME,\n} from './shared/constants';\n\nconst imageLoader = new THREE.ImageLoader();\nconst IMAGES_PER_ROOM_COUNT = 6;\n\nconst getRemainingRooms = (cubemapData) => {\n const cubeMapArray = [];\n cubemapData.map(({ cameraId, cubeMapFilesArray }) => {\n if (cameraId.toString() !== FIRST_ROOM_NAME) {\n return cubeMapArray.push({ cameraId, cubeMapFilesArray });\n }\n });\n cubeMapArray.filter((el) => el !== undefined);\n return cubeMapArray;\n};\n\nexport default AFRAME.registerComponent('cubemap-preloader', {\n schema: {\n cubemapData: {\n parse: JSON.parse,\n stringify: JSON.stringify,\n },\n defaultStyle: { default: 'string' },\n },\n init: function () {\n this.bindMethods();\n this.preloadCubemaps();\n },\n bindMethods: function () {\n this.preloadCubemaps = this.preloadCubemaps.bind(this);\n this.setRoomStatusAsLoaded = this.setRoomStatusAsLoaded.bind(this);\n },\n preloadCubemaps: function () {\n const { defaultStyle, cubemapData } = this.data;\n const sceneEl = this.el.sceneEl;\n const cubemapSky = document.getElementById('cubemap-sky');\n const self = this;\n\n const firstRoom = cubemapData[FIRST_ROOM_NAME - 1];\n const remainingRooms = getRemainingRooms(cubemapData);\n\n const loadFirstRoom = new Promise((resolve, reject) => {\n let resolvedCount = 0;\n\n firstRoom.cubeMapFilesArray.forEach(({ style, files, group }) => {\n const fullStyleName = `${group}-${style}`;\n\n if (defaultStyle === fullStyleName) {\n files.forEach((links) => {\n imageLoader.load(`${links}`, function onLoad () {\n resolvedCount++;\n if (resolvedCount === IMAGES_PER_ROOM_COUNT) {\n self.setRoomStatusAsLoaded(FIRST_ROOM_NAME);\n cubemapSky.emit(CustomEvents.MINIMUM_LOADED);\n sceneEl.setAttribute('loading-screen-handler', { status: 'minimum-loaded' });\n resolve();\n }\n }, null, function onError () {\n reject(new Error('Loading first room failed'));\n });\n });\n }\n });\n });\n\n const loadRemainingRooms = () => new Promise((resolve, reject) => {\n const roomCount = remainingRooms.length;\n let loadedRoomsCount = 0;\n remainingRooms.forEach(({ cameraId, cubeMapFilesArray }) => {\n let resolvedCount = 0;\n cubeMapFilesArray.forEach(({ style, files, group }) => {\n const fullStyleName = `${group}-${style}`;\n\n if (defaultStyle === fullStyleName) {\n files.forEach(link => {\n imageLoader.load(`${link}`, function onLoad () {\n resolvedCount++;\n if (resolvedCount === IMAGES_PER_ROOM_COUNT) {\n self.setRoomStatusAsLoaded(cameraId);\n loadedRoomsCount++;\n if (loadedRoomsCount === roomCount) {\n resolve();\n }\n }\n }, null, function onError () {\n reject(new Error('Loading remaining rooms failed'));\n });\n });\n }\n });\n });\n });\n\n const handleErrors = () => sceneEl.setAttribute('loading-screen-handler', { status: 'error' });\n\n loadFirstRoom\n .then(loadRemainingRooms)\n .catch(handleErrors);\n },\n setRoomStatusAsLoaded: function (name) {\n const cubemapSky = document.getElementById('cubemap-sky');\n const rooms = cubemapSky.getAttribute('room-status').rooms;\n cubemapSky.emit(`room-${name}-loaded`);\n cubemapSky.setAttribute('room-status', {\n rooms: JSON.stringify({\n ...rooms,\n [name]: {\n status: 'loaded',\n },\n }),\n });\n },\n});\n","import MicroModal from 'micromodal';\n\nconst removeQueryFromLink = (link) => {\n if (link) {\n return link.origin + link.pathname;\n }\n};\n\nconst socials = [\n {\n name: 'facebook',\n url: `https://www.facebook.com/sharer/sharer.php?u=${removeQueryFromLink(window.location)}`,\n label: 'User shared to facebook',\n },\n {\n name: 'linkedin',\n url: `https://www.linkedin.com/shareArticle?mini=true&url=${removeQueryFromLink(window.location)}&title=Perfect apartment`,\n label: 'User shared to linkedin',\n },\n {\n name: 'pinterest',\n url: `http://pinterest.com/pin/create/button/?url=${removeQueryFromLink(window.location)}&description=Perfect apartment`,\n label: 'User shared to pinterest',\n },\n {\n name: 'twitter',\n url: `https://twitter.com/intent/tweet?url=${removeQueryFromLink(window.location)}&text=Perfect apartment to see!`,\n label: 'User shared to twitter',\n },\n];\n\nconst ShareModal = {\n init: function () {\n const mediaList = document.querySelectorAll('.social');\n const isAndroid = /(android)/i.test(navigator.userAgent);\n const copyLink = document.querySelector('.copy-link');\n\n mediaList.forEach((media, index) => {\n media.addEventListener('click', (event) => {\n if (isAndroid) {\n setTimeout(() => {\n window.open(`${socials[index].url}`, `${socials[index].name}`);\n }, 400);\n } else {\n window.open(\n `${socials[index].url}`,\n `${socials[index].name}`,\n `${socials[index].name === 'linkedin' ? 'width=720,height=650' : 'width=600,height=400'}`);\n }\n this.sendEvent(event, socials[index]);\n\n setTimeout(() => {\n MicroModal.close('share-to-social');\n }, 1000);\n });\n });\n\n copyLink.addEventListener('click', () => this.copyLink());\n\n this.bindMethods();\n },\n bindMethods: function () {\n this.sendEvent = this.sendEvent.bind(this);\n this.copyLink = this.copyLink.bind(this);\n },\n sendEvent: function (event, social) {\n ga('app3dEstate.send', {\n hitType: 'event',\n eventCategory: 'Share-to-social-button',\n eventAction: event.type ? event.type : event,\n eventLabel: `${social.label ? social.label : social}, url:${removeQueryFromLink(window.location)}`,\n });\n },\n\n copyLink: function () {\n const socialMediaWrapper = document.querySelector('.social-media-wrapper');\n const linkToCopy = document.querySelector('.link-to-copy');\n const textToSelect = document.querySelector('.link-to-copy p');\n const modalContainer = document.querySelector('[aria-labelledby=\"share-to-social-modal-title\"]');\n\n const selectElementText = (el) => {\n const range = document.createRange();\n const selection = window.getSelection();\n range.selectNodeContents(el);\n selection.removeAllRanges();\n selection.addRange(range);\n };\n const showSelect = (error) => {\n modalContainer.style.height = '290px';\n linkToCopy.classList.add('show');\n selectElementText(textToSelect);\n setTimeout(() => {\n modalContainer.style.height = '226px';\n linkToCopy.classList.remove('show');\n }, 10000);\n if (error) {\n console.error(error);\n }\n };\n const showCopied = () => {\n socialMediaWrapper.classList.add('copied');\n setTimeout(() => {\n MicroModal.close('share-to-social');\n socialMediaWrapper.classList.remove('copied');\n }, 1500);\n };\n\n this.sendEvent('click', 'User copied');\n\n if (!window.location.href.includes('isExterior')) {\n navigator.clipboard.writeText(removeQueryFromLink(window.location))\n .then(() => showCopied())\n .catch((error) => showSelect(error));\n } else {\n showSelect();\n }\n },\n};\n\nexport default ShareModal;\n","import bind from '../../aframe-components/utils/bind';\nimport { localStorageAvailable } from '../../utils/localStorageAvailable';\n\nconst RateApartmentModal = {\n init: function () {\n const rateInput = document.querySelectorAll('.rate input');\n const score = localStorageAvailable() && JSON.parse(localStorage.getItem('rated'));\n\n if (score) {\n this.addClassToModal();\n this.disableInputs(score[0]);\n }\n\n this.bindMethods();\n\n rateInput.forEach((input) => {\n input.addEventListener('click', () => this.triggerThankYouPage(input));\n });\n },\n bindMethods () {\n this.triggerThankYouPage = bind(this.triggerThankYouPage, this);\n },\n triggerThankYouPage: function (input) {\n this.addClassToModal();\n this.setScoreLocalStorage(input);\n this.disableInputs();\n this.sendEvent(input);\n },\n setScoreLocalStorage: function (input) {\n const storeRate = [];\n storeRate.push(input.value);\n\n if (localStorageAvailable()) {\n localStorage.setItem('rated', JSON.stringify(storeRate));\n }\n },\n disableInputs: function (score) {\n const rateStar = document.querySelectorAll('.rate input');\n\n rateStar.forEach((input) => {\n input.disabled = true;\n input.classList.remove('hover');\n\n if (input.value === score) {\n input.checked = true;\n }\n });\n },\n addClassToModal: function () {\n const thankYouPage = document.querySelector('.modal__content-wrapper--thankyou');\n const mainPage = document.querySelector('.modal__content-wrapper--main');\n const contentWrapper = [thankYouPage, mainPage];\n\n contentWrapper.forEach((el) => {\n el.classList.add('rated');\n });\n },\n sendEvent: function (score) {\n ga('app3dEstate.send', {\n hitType: 'event',\n eventCategory: 'Rate-apartment-score',\n eventAction: 'Choosing a rating',\n eventLabel: `This ${window.location.href} apartment received \"${score.value}\" score`,\n });\n },\n};\n\nexport default RateApartmentModal;\n","import ShareModal from '../components/modals/share-modal';\nimport RateApartmentModal from '../components/modals/rate-apartment-modal';\n\nexport default AFRAME.registerComponent('init-modals', {\n init: function () {\n ShareModal.init();\n RateApartmentModal.init();\n },\n});\n","export default AFRAME.registerComponent('capture-screenshot', {\n schema: {\n enabled: { default: false },\n },\n init: function () {\n const checkSubMenuButton = document.querySelector('.scene-menu--item__screenshot');\n const checkMenuButton = document.querySelector('.scene-menu__screenshot-button');\n\n const button = checkSubMenuButton === null ? checkMenuButton : checkSubMenuButton;\n\n if (!button || !this.data.enabled) {\n return;\n }\n\n this.onClick = this.onClick.bind(this);\n button.addEventListener('click', this.onClick);\n },\n onClick: function () {\n const isExterior = window.location.href.includes('isExterior');\n const checkMenuButton = document.querySelector('.scene-menu__screenshot-button');\n const links = document.querySelectorAll('.link');\n\n if (isExterior) {\n checkMenuButton.classList.toggle('on');\n }\n\n links.forEach(link => {\n link.setAttribute('visible', 'false');\n });\n\n this.el.sceneEl.setAttribute('screenshot', {\n width: window.innerWidth,\n height: window.innerHeight,\n });\n this.el.sceneEl.components.screenshot.capture('perspective');\n\n links.forEach(link => {\n link.setAttribute('visible', 'true');\n });\n },\n});\n","/*\n * Component decides which errors should be passed to error-screen.\n */\nimport Detector from './utils/webgl-detector';\nexport default AFRAME.registerComponent('error-handler', {\n init: function () {\n this.addContextLostListener();\n /* Listen for errors, don't override existing Sentry's window.onerror */\n const oldOnError = window.onerror;\n const self = this;\n window.onerror = function () {\n if (oldOnError) oldOnError.apply(this, arguments);\n self.handleError();\n };\n },\n /*\n * Passes appropriate message to error-screen.\n */\n handleError: function () {\n const sceneEl = this.el.sceneEl;\n const canvas = document.querySelector('.a-canvas');\n const gl = canvas.getContext('webgl');\n let errorToDisplay;\n if (Detector.webgl && gl.isContextLost()) {\n errorToDisplay = '.error-context-lost';\n } else if (!Detector.webgl) {\n errorToDisplay = '.error-no-webgl';\n } else {\n return;\n }\n sceneEl.setAttribute('error-screen', { errorToDisplay });\n },\n /*\n * Throws error if webgl context is lost.\n */\n addContextLostListener: function () {\n var canvas = document.querySelector('.a-canvas');\n canvas.addEventListener('webglcontextlost', function (event) {\n throw new Error('3D Estate: WebGL context lost.');\n }, false);\n },\n});\n","import 'aframe-event-set-component';\n\nimport '../styles/main.scss';\n\nimport MicroModal from 'micromodal';\n\nimport './aframe-components/loading-screen-handler';\nimport './aframe-components/guide';\nimport './aframe-components/look-at';\nimport './aframe-components/fuse-cursor-loader-animation';\nimport './aframe-components/custom-vr-mode-ui';\nimport './aframe-components/chrome-drag-fix';\nimport './aframe-components/shopping-list';\nimport './aframe-components/on-enter-vr';\nimport './aframe-components/fuse-cursor-loader';\nimport './aframe-components/scene-menu';\nimport './aframe-components/has-hover';\nimport './aframe-components/detect-idle-user';\nimport './aframe-components/exit-fullscreen-exit-vr';\nimport './aframe-components/cubemap-sky';\nimport './aframe-components/room-status';\nimport './aframe-components/animate-until-loaded';\nimport './aframe-components/set-image';\nimport './aframe-components/set-link';\nimport './aframe-components/minimap-resizer';\nimport './aframe-components/link-manager';\nimport './aframe-components/canvas-resizer';\nimport './aframe-components/minimap-hotspots';\nimport './aframe-components/minimap-hotspots-animation';\nimport './aframe-components/minimap-radar';\nimport './aframe-components/hide-minimap';\nimport './aframe-components/hide-minimap-off-click';\nimport './aframe-components/camera-angle-listener';\nimport './aframe-components/auto-rotate';\nimport './aframe-components/blur-animation';\nimport './aframe-components/3destate-arrow-controls';\nimport './aframe-components/3destate-look-controls';\nimport './aframe-components/camera-fov-on-slide';\nimport './aframe-components/error-screen';\nimport './aframe-components/show-ios-navigation-bar';\nimport './aframe-components/address-bar-overlay';\nimport './aframe-components/ios-gyroscope-guide';\nimport './aframe-components/google-analytics/google-analytics';\nimport './aframe-components/track-room-change';\nimport './aframe-components/cubemap-preloader';\nimport './aframe-components/init-modals';\nimport './aframe-components/capture-screenshot';\n\nimport './aframe-components/error-handler'; // eslint-disable-line\n\nMicroModal.init();\n"],"sourceRoot":""}