{"version":3,"sources":["api/httpClient.js","utils/md5.js","api/appProvider.js","components/atoms/AtIcon/index.jsx","components/atoms/AtButton/index.jsx","components/higher-order-components/Fade.jsx","components/atoms/AtSpinner/index.jsx","components/pages/Login/index.jsx","utils/arrayUtils.js","components/pages/EntryPage/defaultflags.js","reducers/designdetails.reducer.js","reducers/designstree.reducer.js","components/symbol-defs.svg","reducers/colors.reducer.js","reducers/mainui.reducer.js","components/molecules/AtDialog/index.jsx","components/atoms/CircularButton/index.jsx","components/molecules/Thumbnail/index.jsx","components/pages/DesignBrowser/LazyThumbnail.jsx","components/molecules/ThumbList/index.jsx","components/molecules/CameraButton/index.jsx","components/templates/SidePanel/index.jsx","components/organisms/OptionsSidePanel/index.jsx","utils/OrbitControls.js","components/IllustrationView/cameracontrols/camera-controls.js","components/IllustrationView/threeviewhelper.js","tilecanvasnew.js","components/IllustrationView/cameracontrols/event-dispatcher.js","components/IllustrationView/photographicviewhelper.js","utils/blur.js","utils/colorutils.js","components/IllustrationView/roomviewhelper.js","components/atoms/InputCanvas.jsx","components/DayNightSlider/Day.svg","components/DayNightSlider/Night.svg","components/DayNightSlider/Cloudy.svg","hooks/index.js","components/DayNightSlider/index.jsx","components/IllustrationView/roomconfig.reducer.js","components/molecules/BlurCircle/index.jsx","components/IllustrationView/IllustrationOptions.jsx","components/IllustrationView/FloorSelectionDialog.jsx","components/IllustrationView/ViewpointDialog.jsx","components/atoms/CircularColorSVG/Mixply4.jsx","components/atoms/CircularColorSVG/Mixply3.jsx","components/atoms/CircularColorSVG/Mixply2.jsx","components/atoms/CircularColorSVG/Mixply1.jsx","components/atoms/CircularColorSVG/index.jsx","strings.js","components/molecules/AreaSwatch/index.jsx","components/molecules/AreaSwatch/NestedAreaSwatch.jsx","components/organisms/ColorSelectionBox/ColorPreview.jsx","components/organisms/ColorSelectionBox/SwatchBox.jsx","components/organisms/ColorSelectionBox/SimilarColors.jsx","components/organisms/ColorSelectionBox/index.jsx","components/IllustrationView/ColorSelection.jsx","components/IllustrationView/index.jsx","components/CatalogView/index.jsx","components/CatalogView/pdfcreator.jsx","components/InteractivePerspectiveView/closeupviewhelper.js","components/InteractivePerspectiveView/CloseupView.jsx","configMatcher.js","components/organisms/VpsStage/tutorial0.svg","components/organisms/VpsStage/tutorial1.svg","components/organisms/VpsStage/tutorial2.svg","components/organisms/VpsStage/tutorial3.svg","components/organisms/VpsStage/Tutorial.jsx","components/organisms/CameraOptions/index.jsx","components/organisms/VpsStage/icon-mmc.svg","UploadPreview/RoomViewNew/threeviewhelper.js","UploadPreview/RoomViewNew/roomviewhelper.js","UploadPreview/InputCanvas.jsx","UploadPreview/RoomViewNew/index.jsx","UploadPreview/App.js","components/atoms/AtDropdown/index.jsx","components/organisms/UploadPlatform/aws-utils.js","api/filemanagerapi.js","components/organisms/AlertWarning/index.jsx","components/organisms/UploadPlatform/index.jsx","components/organisms/VpsStage/index.jsx","components/organisms/DesignList/index.jsx","components/pages/VpsLanding/logo-small.svg","components/pages/VpsLanding/index.jsx","components/MMC/index.js","components/pages/VPS/icon-active.svg","components/pages/VPS/icon-daynight.svg","components/pages/VPS/icon-multishot.svg","components/pages/VPS/icon-mystic.svg","components/pages/VPS/icon-hd.svg","components/pages/VPS/icon-4k.svg","components/pages/VPS/icon-galaincha.svg","components/pages/VPS/index.jsx","components/pages/VpsHome/index.jsx","reducers/visualizations.reducer.js","reducers/myroom.reducer.js","components/pages/ErrorPage/index.jsx","components/pages/EntryPage/index.jsx","index.js","utils/canvasutils.js","utils/utils.js"],"names":["HttpClient","post","url","data","config","axios","get","MD5","string","RotateLeft","lValue","iShiftBits","AddUnsigned","lX","lY","lX4","lY4","lX8","lY8","lResult","FF","a","b","c","d","x","s","ac","y","z","F","GG","G","HH","H","II","I","WordToHex","lCount","WordToHexValue","WordToHexValue_temp","toString","substr","length","k","AA","BB","CC","DD","lWordCount","lMessageLength","lNumberOfWords_temp1","lNumberOfWords","lWordArray","Array","lBytePosition","lByteCount","charCodeAt","ConvertToWordArray","replace","utftext","n","String","fromCharCode","Utf8Encode","toLowerCase","domain","assetsDomain","floorsFromServer","provider","keyScopes","master","design","room","multiKey","ctf","jpeg","defaultKey","activeKey","key","scope","Object","values","previousKey","cacheLocation","getCacheLocationFromUrl","split","processPath","path","map","encodeURIComponent","ss","slice","join","postHttpClient","then","response","postWithRetry","Promise","resolve","reject","numtries","fetchData","catch","err","getApiKey","sessionStorage","getItem","includes","fetchDesignTiles","file","zoom","tiles","props","hash","FormData","append","AppProvider","JSON","stringify","fetchVisualizationTiles","hasText","variable","getRenderedDesign","designDetails","fullpath","logoUrl","Width","Height","canvasWidth","canvasHeight","canvas","createCanvas","xTotal","Math","floor","yTotal","tilepoints","push","name","convertTilePointToName","context","getContext","fetchDesignCallback","basePath","tileImagesLoaded","forEach","tilePoint","index","img","document","createElement","setAttribute","filename","src","image","onload","drawSingleTileInCanvas","readImage","logoImage","width","height","startx","starty","globalAlpha","drawImage","drawWaterMarkIfNeeded","window","InterfaceElements","IsJpeg","item","tilepoint","isStripedDesignMode","isEcatMode","keys","setActiveKey","val","previous","fetchApiKey","username","password","res","Key","setItem","fetchDesignList","params","folder","code","fetchColorList","fetchRoomList","fetchRoomDetails","fetchRenderedDesignOrRoom","backColor","view","at","Design","View","publishDesign","title","desc","CatalogCache","isAuthenticated","fetchInterfaceElements","interfaceElements","TextureOptions","LogoUrl","CustomizeCssUrl","link","getElementsByTagName","appendChild","CustomizeJsUrl","makeid","flags","autoLogin","relogin","getJsonFromUrl","page","jpegpage","getPageName","forcelogin","parse","resolvedata","keyType","sessionApiKey","keyfromsession","changeColorCombination","numColors","colorTab","calculatePriceOfRug","fetchCustomFieldOrdersheet","fetchOrderSheet","customFields","materialNames","watermark","mode","customFieldsToString","propsid","decodeURIComponent","downloadCatalog","href","click","sendOrdersheetEmail","email","phone","note","setCustomEmail","customerEmailBody","customerEmailSubject","customerEmailFromAddress","companyEmailBody","companyEmailSubject","companyEmailFromAddress","getColorAt","eCatalogDetails","catalogId","InitDesign","designPath","extArr","getCatalogThumb","id","fetchCatalog","catalogName","Value","getColorTexturePreviewImage","color","colorIndex","collectionName","colorCode","substring","fetchList","listType","getCustomConstructions","Num","parseInt","uploadMyRoom","roomImage","uploadMyRoomMask","maskUrl","roomId","getRoomMask","status","getProcessedRoomMask","floorpoints","notfloorpoints","carpetpoints","responseType","saveAsRoom","fetchTileDetails","tileTransparency1","tileTransparency2","tileTransparency4","colorTileData1","colorTileData2","colorTileData4","tilePaths","ColorTiles1X","ColorTiles2X","ColorTiles4X","TileTransparency1X","TileTransparency2X","TileTransparency4X","promises","readJSON","isIrregular","all","tileDataArray","transparencyData","fetchPileTiles","fetchSilkSheenTiles","getDesignThumbnails","designs","fullpaths","thumbList","childFile","find","Name","add","Props","Thumb","getRoomThumbnails","rooms","FullPath","label","uuid","v4","getStripedDesign","saveOnServer","readTextureImages","textures","textureImages","textureUrl","clearCache","files","console","warn","getInstanceUrl","openFileManager","localStorage","location","pathname","filter","pop","urlStr","origin","open","mapColors","saveFileLocally","URL","createObjectURL","farr","download","downloadPdf","catalogProps","rendereddesign","renderedroom","fields","customFieldsString","field","concat","fieldName","fieldValue","sendSignIn","type","userEmail","AtIcon","icon","size","className","otherprops","style","xlinkHref","AtButton","intent","children","onClick","tertiary","disabled","minimal","text","active","small","tooltip","tooltipProps","otherProps","renderButton","classNames","btnClassNames","onDoubleClick","e","stopPropagation","content","defaultProps","Fade","show","useState","render","setRender","useEffect","animation","onAnimationEnd","AtSpinner","AtSpinnerOverlay","ReactDelayRender","delay","setUserName","setPassword","isError","setIsError","isSigningIn","setisSigningIn","alt","margin","onSubmit","event","preventDefault","search","onChange","target","value","autoFocus","onFocus","select","marginBottom","getPathOffile","fileFullPath","sp","getParentFolder","pathArray","parentFolder","isSimilarFile","filePath","arrangeIntoTree","folders","defaultItemPath","setActiveItem","filterRugshared","arr","isValid","defaultItem","charAt","reduce","elem","pass","fail","notSimilarFiles","similarFiles","isExpanded","childNodes","hasCaret","similarItems","rootFiles","openNode","pathsArray","tree","currentLevel","part","existingPath","array","t","findWhere","fp","designsInFolder","valueOf","isSelected","newPart","filesInNode","showThumbnails","level","thumbsLength","ftree","findItemNested","flatfileList","itemId","nestingKey","updateElementOfTree","ids","iter","isArray","updateNode","node","updateSimilarFilesOfNode","fileNode","updateSingleFileProp","newid","expandTreeNode","colorNumberModes","CurrencyFormat","None","US","EU","flaginCurrentMode","isAdmin","flag","flagStatus","defaultFlags","colorSeparatedTexture","showColorPercentage","hasOrderSheet","defaultQualityIndex","defaultStandardSize","defaultUnit","hasRugshare","hasHoverZoom","hasArp","showCopyright","hasVps","showAddToCart","showSaveImage","applyColorPaletteinSameFolder","applyColorPaletteinVariations","hasMasterCarving","designThumbsAsBg","fullPageThumb","showAllDesignsButton","showWarningInfoInFooter","designBrowser","showCurrentOpenFolder","rugshare","socialMediaShareDescription","shareCustomizedDesign","colorCustomizationTools","showColorCustomizationTools","showMapColors","addShuffleColors","addColorPercentToggle","addAutocolor","colorSelectionBox","showColorName","showSimilarColors","showColorFilter","showCarving","customColorOptions","collectionFilter","swatchSize","colorPaletteLabels","colorLabelInfo","labelTemplate","labels","colorLabelFilter","visualizations","defaultView","designViews","myRoomEnabled","showIcebreakerinMyroom","designView","minZoom","maxZoom","defaultZoom","wallToWallLockAxis","hasDesignWaterMark","dpi","designDetailSection","isCollapsible","showDesignPathInTitle","showSizeSelection","showDesignDimensions","showAddToFavoriteText","designVariations","appendDesignName","sayOriginal","colorAreaSwatch","hasMixply","colorNumberMode","showRedoButton","shape","mixPlyOptions","ply","sameColorLock","exclusiveMatArr","language","langOptions","strings","ordersheet","showRugSizeInOrderForm","currencyFormat","NONE","populateRugSize","changeableUnits","strInPrice","autoPopulateFields","roundOffToFtOrCm","roundOffToNearestHalf","addedCustomFields","StateContext","React","createContext","DispatchContext","designDetailActions","designDetailState","loading","designName","currentDesignPath","selectedColor","customizationFlag","history","undoHistory","totalKnots","tileDetails","updateDesignTiles","updateNormapTiles","yarnIndex","custoScout","designPoint","containerPoint","carvingColorsIndex","designDetailReducer","state","action","details","normalizeUnit","payload","designColorsPalette","DesignColors","removeItem","ParentFolder","OrderProperties","QualityIndex","Knots","colorNumbers","updateColorNumbers","generateHash","getCarvingColorNumbers","setTileDetails","changeDesignColor","changeColorPalette","his","undoDesignColor","changeColorMaterial","changeColorPile","changeColorScheme","toggleCarving","mixPly","changeYarnColor","changeYarnMaterial","colorDetail","colorMaterial","Texture","Color","ColorName","AssociatedMat","Material","YarnDetails","yarn","origDesignColors","log","material","materialName","MaterialName","updatedDesignTiles","plyNumber","firstColor","yarnDetailArr","i","element","Carving","firstColorCarving","designColor","tilesToUpdate","pileHeight","PileHeight","colorPalette","PhysicalWidth","PhysicalHeight","Unit","defUnit","from","to","Number","convert","toFixed","round","designColors","temp","result","cnt","indices","j","des","carvingColorNumbers","checkPartialCarving","partialCarving","DesignDetailStateProvider","useReducer","dispatch","Provider","useDesignDetailState","useContext","undefined","Error","useDispatchDesignDetail","designListActions","initialDesignListState","activeNode","selectedFolder","flatFileList","activeSchemeIndex","schemes","favorites","designListReducer","nodeToExpand","prev","next","aParent","fileInNode","prevFolder","nextFolder","findPrevNext","DesignListStateProvider","useDesignListState","useDispatchDesignList","_extends","assign","arguments","source","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","viewBox","fill","strokeLinejoin","strokeLinecap","strokeWidth","fillRule","fillOpacity","stroke","clipRule","_ref","svgRef","position","overflow","ref","ForwardRef","forwardRef","colorListActions","colorListState","collections","filteredCollection","collectionIndex","showColorSelectionBox","activeColor","isSearching","colorTextures","colorListReducer","findColor","searchColor","obj","coll","ind","ColorRows","findIndex","colorObj","keyword","filteredRows","colorRow","ColorListStateProvider","useDispatchColorList","UiStateContext","UiDispatchContext","pageViews","mainUiActions","initialUiState","showRugShare","showOrderSheet","showCustoScout","showLoadingOverlay","loadingOverlayPercent","showLeftSidebar","showRightSidebar","mouseHoveredOnUi","showFavoritesDialog","showVrBtn","showVrDialog","showQuickLinkDialog","isBusy","showRenameDialog","toastProps","isIdle","pageView","showConfirmationDialog","mainUiReducer","left","right","UiStateProvider","initPage","uiState","useUiState","useUiDispatch","AtDialog","onClose","isOpen","overlayClassName","portalContainerId","canOutsideClickClose","Classes","OVERLAY_SCROLL_CONTAINER","hasBackdrop","lazy","portalContainer","getElementById","CircularButton","Thumbnail","thumb","thumbnailName","onRemoveClicked","onThumbnailClick","onEditClick","hasRemove","hasEdit","imageRotated","infoThumbs","aspect","showTitle","thumbType","isHovering","setIsHovering","isloading","setIsloading","thumbImg","useRef","setScrollTo","effectActive","Image","current","backgroundImage","error","getBgImage","IsAdmin","onMouseEnter","onMouseLeave","backgroundSize","rotated","infoTitles","LazyThumbnail","useInView","triggerOnce","threshold","inView","thumbs","ThumbList","activeId","lazyDesignThumbnail","CameraButton","clipped","nopointer","cameraactive","SidePanel","side","OptionsSidePanel","header","options","activeIndex","Fragment","option","OrbitControls","object","domElement","enabled","Vector3","minDistance","maxDistance","Infinity","minPolarAngle","maxPolarAngle","PI","minAzimuthAngle","maxAzimuthAngle","enableDamping","dampingFactor","enableZoom","zoomSpeed","enableRotate","rotateSpeed","enablePan","panSpeed","screenSpacePanning","keyPanSpeed","autoRotate","autoRotateSpeed","enableKeys","LEFT","UP","RIGHT","BOTTOM","mouseButtons","MOUSE","ROTATE","MIDDLE","DOLLY","PAN","touches","ONE","TOUCH","TWO","DOLLY_PAN","target0","clone","position0","zoom0","setPolarAngle","setAzimuthalAngle","panOrbit","getPolarAngle","spherical","phi","getAzimuthalAngle","theta","saveState","copy","reset","updateProjectionMatrix","dispatchEvent","changeEvent","update","STATE","offset","quat","Quaternion","setFromUnitVectors","up","quatInverse","inverse","lastPosition","lastQuaternion","sub","applyQuaternion","setFromVector3","rotateLeft","sphericalDelta","max","min","makeSafe","radius","scale","addScaledVector","panOffset","setFromSpherical","lookAt","multiplyScalar","set","zoomChanged","distanceToSquared","EPS","dot","quaternion","dispose","removeEventListener","onContextMenu","onMouseDown","onMouseWheel","onTouchStart","onTouchEnd","onTouchMove","onMouseMove","onMouseUp","onKeyDown","startEvent","endEvent","TOUCH_ROTATE","TOUCH_PAN","TOUCH_DOLLY_PAN","TOUCH_DOLLY_ROTATE","Spherical","rotateStart","Vector2","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","getZoomScale","pow","angle","rotateUp","panLeft","v","distance","objectMatrix","setFromMatrixColumn","panUp","crossVectors","pan","deltaX","deltaY","isPerspectiveCamera","targetDistance","tan","fov","clientHeight","matrix","isOrthographicCamera","clientWidth","top","bottom","dollyIn","dollyScale","dollyOut","handleMouseDownRotate","clientX","clientY","handleMouseDownPan","handleTouchStartRotate","pageX","pageY","handleTouchStartPan","handleTouchStartDolly","dx","dy","sqrt","handleTouchMoveRotate","subVectors","handleTouchMovePan","handleTouchMoveDolly","focus","button","ctrlKey","metaKey","shiftKey","handleMouseDownDolly","addEventListener","handleMouseMoveRotate","handleMouseMoveDolly","handleMouseMovePan","handleMouseWheel","needsUpdate","keyCode","handleKeyDown","handleTouchStartDollyPan","DOLLY_ROTATE","handleTouchStartDollyRotate","handleTouchMoveDollyPan","handleTouchMoveDollyRotate","tabIndex","create","EventDispatcher","constructor","MapControls","THREE","_AXIS_Y","_v2","_v3A","_v3B","_v3C","_v4","_xColumn","_yColumn","_sphericalA","_sphericalB","ResourceTracker","resources","Set","resourceslocal","resource","track","geometry","uniforms","uniformValue","tracklocal","delete","allresources","count","parent","remove","clear","ThreeViewHelper","scene","textureLoader","fbxLoader","FBXLoader","raycaster","carpetLoaded","objectLoaded","objects3d","resTracker","bind","shot","dims","surfaceName","resolution","roomType","baseUrl","disposelocal","innerWidth","innerHeight","w","h","sceneConfig","objProps","visibility","renderer","preserveDrawingBuffer","alpha","antialias","setPixelRatio","setSize","camConfig","camera","perspectiveCamera","orbit","addOrbitControl","directionalLight","ambientLight","floorObjectKey","carpet","setupCarpet","getObjectByName","promiseArr","setupFloor","bounds","modelUrl","fbxUrl","makeUrl","load","objKey","objConf","rotation","fromArray","convertArrIntoRad","transparent","visible","setup","computeBoundingBox","setFromObject","setupRoomBounds","object3d","tarObj","removeLights","carpetMesh","fact","flagged","targetObject","setCarpetScale","setupLights","smallBoxHalfSize","getSize","clampingBox","rot","IsIrregular","KLRatio","wid","convertUnit","hgt","sceneUnit","unit","availableSizes","change3dObjectScalePhysical","selectedSize","transformData","designCanvas","normapCanvas","designTexture","CanvasTexture","normalTexture","anisotropy","capabilities","getMaxAnisotropy","normalMap","roughness","metalness","floorOption","floorCanvas","texture","wrapS","wrapT","repeat","intersect","raycastMouseOnCarpet","objPos","point","subClamped","clamp","convMouseCord","mouseX","mouseY","mouse","setFromCamera","intersectObject","vec","toArray","convertArrintoDeg","rotationInDegrees","axis","rotationFlag","scaleFactor","transform","attach","offsetY","offsetTop","offsetX","offsetLeft","objsToRemove","removeCount","resolveFunc","pos","projScreenMat","multiply","projectionMatrix","matrixWorldInverse","multiplyVector3","getRendererOffset","box","boundingBox","widthheight","plane","mat","m","vertices","vertex","applyMatrix4","matrixWorld","createVector","enable","lockVertical","lockHorizontal","shotConfig","carpetSize","vertex1","vertex2","v1","v2","xDist","abs","yDist","calculateCarpetSize","radX","radY","carpetRadius","carpetCenter","dist1","distbetween2Vertices","radYY","radYX","vertex3","vertex4","dist2","radXX","radXY","areaOfellipse","canvasCenter","near","far","control","calculateDistance","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","cancelAnimationFrame","mozCancelAnimationFrame","pointA","pointB","ia","ja","ib","jb","TileCanvas","setRenderingCanvas","tilePoints","designTilesToUpdate","normapTilesToUpdate","roughTilesToUpdate","canvasBack","canvasNorm","canvasRough","canvasVis","tileSize","maxArea","renderBounds","canvasSize","desTilesUpdated","normapTilesUpdated","ratio","designWidth","designHeight","newdesignWidth","trunc","resizeRatio","dw","dh","xOff","yOff","tilesWidth","tilesHeight","p1","p2","point1","point2","xOffPoint","yOffPoint","visTilesToUpdate","fetchNonce","fetchNonce1","fetchNonce2","fetchNonce3","fetchNonce4","fetchNonce5","latesttiles","onComplete","ctx","backTextureMaterialIndex","newDesignColors","newYarnDetails","yarnDetails","pivot","tileVec","tile","dist","sort","designTileNamesinVp","designApiProps","baseDesignPath","drawTilesIterateFunc","mime","X","Y","endX","endY","drawNormap","drawRoughMap","tileTransparency","localNonce","ctxnorm","ctxrough","getStartEndPoints","startX","startY","endpointX","endpointY","designTilesinVp","designTilesNotinVp","normapTilesinVp","normapTilesNotinVp","roughmapTilesinVp","roughmapTilesNotinVp","designtilescomplete","normaptilescomplete","roughmaptilescomplete","checkComplete","globalCompositeOperation","drawNormalMaps","baseNormapPath","drawRoughMaps","baseRoughmapPath","fillStyle","fillRect","ctxVis","visTilesinVP","apiProps","convertNameToTilePoint","tilesinVp","tileNamesVp","tilesNotInVp","mergeArraysWithoutDuplicate","onUpdate","issamecolornumber","uniquetilesinvp","ctxNorm","baseNormalPath","errorArr","tileName","onerror","drawFinish","drawSingleTileInDesignCanvas","destTileSizeX","destTileSizeY","errorCount","errorLoadCount","finishError","_listeners","listener","listeners","listenerArray","splice","l","PI_2","CameraControls","_camera","_yAxisUpSpace","_yAxisUpSpaceInverse","_state","_boundary","Box3","boundaryFriction","_boundaryEnclosesCamera","draggingDampingFactor","azimuthRotateSpeed","polarRotateSpeed","dollySpeed","truckSpeed","dollyToCursor","verticalDragToForward","_domElement","_viewport","_target","_targetEnd","_spherical","_sphericalEnd","_target0","_position0","_zoom0","_dollyControlAmount","_dollyControlCoord","_hasUpdated","ignoreDOMEventListeners","_removeAllEventListeners","elementRect","dragStart","extractClientCoordFromEvent","out","isTouchEvent","prevState","startDragging","delta","deltaYFactor","navigator","platform","wheelDelta","deltaMode","_getClientRect","dollyInternal","dragging","passive","endDragging","originalEvent","rotate","truckInternal","fovInRad","DEG2RAD","truckX","pedestalY","truck","forward","prevRadius","dolly","libs","Vector4","azimuthAngle","polarAngle","enableTransition","rotateTo","dollyTo","updateMatrix","_encloseToBoundary","box3OrObject","paddingLeft","paddingRight","paddingBottom","paddingTop","isBox3","boundingWidth","boundingHeight","boundingDepth","getDistanceToFit","boundingBoxCenter","getCenter","cx","cy","cz","moveTo","_sanitizeSphericals","positionX","positionY","positionZ","targetX","targetY","targetZ","positionAX","positionAY","positionAZ","targetAX","targetAY","targetAZ","positionBX","positionBY","positionBZ","targetBX","targetBY","targetBZ","positionA","targetA","targetB","lerp","positionB","deltaTheta","deltaPhi","deltaRadius","setLookAt","getPosition","box3","clampPoint","viewportOrX","depth","boundingRectAspect","isVector3","currentDampingFactor","lerpRatio","exp","deltaTarget","direction","normalize","negate","planeX","cross","lengthSq","planeY","worldToScreen","cursor","updated","infinityToMaxNumber","json","maxNumberToInfinity","friction","offsetLength2","newTarget","deltaClampedTarget","deltaClampedTargetLength2","offsetFactor","rect","getBoundingClientRect","speed","boundaryEnclosesCamera","TouchEvent","isFinite","MAX_VALUE","install","ResourceTrackerPh","PhotographicView","hasBackSurface","ambientIntensity","materialBack","clearScene","orbitControl","intensity","changedIntensity","surfaces","setupObjects","objectsLoaded","objectFbx","objectConfig","preset","defaultTexture","defaultScale","texWidth","texHeight","rx","ry","canv","alphaTest","fbxPathArr","back","front","objectBack","backDesignCanvas","surfaceUnit","doubleSide","fitWidth","textureRotation","designTextureBack","require","toXY","fromXY","createBlurMatrix","srcCanvas","srcCtx","src_w","src_h","srcData","getImageData","blurMatrix","totR","totG","totB","totA","ix","iy","createBlurImage","depthImage","centerAt","dontBlur","maxRadius","nodeName","depthCanvas","depthCtx","dstCanvas","dstCtx","t0","performance","now","t1","min1","max1","dstData","depthData","gs","factor","mul","boxw","boxh","ria","rib","ric","rid","getBlurData","putImageData","t2","calculateColorDelta","color1","color2","r1","R","g1","b1","B","r2","g2","b2","r","g","compare","sortingKey","sortingOrder","item1","item2","hexToRGB","hex","exec","tileCanvas","roomTypes","defaultRoomType","argument","rgbFromHex","rgb","patchRgb","RoomViewHelper","roomAssets","currentState","light","currentAssets","dimension","dimensionPixels","bgImage","maskImage","bgPatchImage","bgPatchShadowImage","shadowImage","highlightImage","canvasArray","carpetURL","fbxLoaded","threeView","phview","realTimeDynamicRendering","savedRoomState","currentActiveColors","bgCanvas","threeCanvas","maskCanvas","shadowCanvas","transitionCanvas","effectCanvas","container","inputCanvas","objCanvasContainer","clearAllCanvases","clearCanvas","roomData","local","buildRoomAssets","normalizeDirNames","illustrationDims","containerDims","devicePixelRatio","resizeKeepingAspect","commons","CommonAssets","defaultview","assets","updateRoomAssets","roomElements","lights","views","getShotAssets","init","bgUrl","background","bgDimUrl","backgrounddim","bgPatchUrl","backgroundpatch","bgPatchGreyUrl","backgroundpatchgrey","bgPatchGreyDimUrl","backgroundpatchgreydim","bgPatchShadowUrl","backgroundpatchshadow","bgPatchShadowDimUrl","backgroundpatchshadowdim","mask","shadowUrl","shadow","shadowDimUrl","shadowdim","highlightUrl","highlight","glowUrl","glow","blurmapUrl","blurmap","depthImageUrl","depthimage","objects","readImageFromPCorWeb","saveLocal","objectmask","objectshadow","patchgrey","patchshadow","dominantColorHex","retainActiveColors","lightIntensity","bgCtx","tempBgCanvas","setCanvasDimensions","hasDimmer","bgCtxDrawCanvas","combineDimImage","imagedim","annotationCanvas","patchCanvas","patchCtx","patchData","selectedColorCode","sel","annotationColor","patchGreyCanvas","patchGreyCtx","patchGreyCtxCanvas","patchGreyShadowCanvas","changeShot","scene1","scenes","setupSceneObjects","setup3dObject","changeFloorVisibility","floorImage","setFloorTexture","customUrl","physicalWidth","physicalHeight","newWidth","newHeight","setCarpetTexture","updateGizmo","setObjectTexture","designScale","globalCarpetScale","commonTileProps","setCarpetVisibility","drawCanvasTiles","every","updateMap","resolvethis","frontrendered","backrendered","drawCanvasBackTiles","colorTileData","setTimeout","designTilesUpdated","updateVisTiles","shad","setAssets","updateShadowAssetFromSize","updateShadow","tmpCanvas","transitionctx","order","objectcanvas","tempCanvas","tCtx","tiltShiftFilter","canvasDims","centerCoord","blurImgData","toBlob","blob","setCarpetPositon","setCarpetRotation","makeBlur","indexindiv","refCtx","isobjectinscene","mystic","shadowCtx","intersectsGizmo","findGizmoIntersection","moved","mousedown","shadowCleared","intersectsCarpet","mouseDownTouchStart","hoveredAtGizmo","difference","rotateCarpet","mouseTouchMove","getObjectConfig","imgData","ingizmo","gizmoCoordinates","getGizmoCordinates","radiusX","radiusY","colorStr","strokeStyle","lineWidth","shadowOffsetX","shadowColor","shadowOffsetY","clearRect","beginPath","ellipse","lineTo","newDims","windowsize","setCanvasDimensionsStyle","resizeRenderer","objectlength","renderCanvas","renderCtx","downloadImageData","blurMap","blurCanvas","blurredCanvas","blurCtx","blurredCtx","imageData","blurData","blurredData","widthPix","heightPix","relativeSavePath","newUrl","onStart","onMove","onEnd","zIndex","pointerEvent","trackMouseDown","remapCoord","mouseDown","setMouseDown","handleMouseDown","getlocation","handleMouseMove","handleMouseUp","nativeEvent","targetTouches","xabs","yabs","pointerEvents","onMouseOut","useWindowSize","isClient","windowSize","setWindowSize","handleResize","sliderData","DayNightSlider","handledayState","hasNightSlider","handleNightOpacity","defaultNightOpacity","currentlightindex","setcurrentlightindex","setsliderVal","lightArr","setlightArr","knob","sliderSize","setsliderSize","reminpx","parseFloat","getComputedStyle","documentElement","fontSize","handleChangeLight","display","hideLabelValue","knobColor","progressColorFrom","progressColorTo","progressSize","trackColor","trackSize","dataIndex","knobSize","roomConfigState","activeshot","activelight","activeview","activedata","teleportpoints","lightswitchpoints","objectstate","roomelements","roomname","roomtype","hasShadow","mouseControls","floorOptions","floors","activeFloor","carpetOptions","showViewpointDialog","customDesignUrl","physicalWidCms","physicalHGtCms","roomConfigActions","roomConfigReducer","precalc","setRoomElements","initRoomState","changeLight","changeLightIntensity","clearActiveColor","setActiveColor","toggleMystic","changeLightSwitch","setFloorOptions","setShowColorBox","unsortedobjects","sortedobjects","entries","el","newstate","pointerinputcanvas","shots","hasLights","activeData","teleportPoints","lightsources","lightSources","alllightswitchpoints","lightSwitchPoints","lightobject","objectval","formattedObj","zindex","lightSwitch","thumbUrl","calculateView","newmysticval","newobjectstate","newlightswitchval","thisobjectstate","newview","lightobjectstatus","lightsource","objectviewdataarr","objectViews","objectviewconfig","thisistheview","lightsourceobj","roomConfigReducerHandlers","RoomConfigStateProvider","useRoomConfigState","useDispatchRoomConfig","IllustrationOptions","dispatchRoomConfig","showMenu","setShowMenu","isMultishot","hasIlluOptions","hasOptions","dismissMenu","setCarpetOption","carpetOption","handleRotation","newRotation","newCarpetOptions","renderActiveOption","rotationOptions","surface1","handleReset","FloorSelectionDialog","handleClose","handleThumbClick","alignItems","ViewpointDialog","handleChangeShot","enforceFocus","usePortal","shotKey","shotProps","getSVGofShape","yarns","handleClick","strokeColor","xmlns","getCircleSVG","getSquareSVG","Mixply4","Mixply3","Mixply2","Mixply1","isRGBsimilarToGray","colorHex","hexToRgb","isSimilar","colorVal","CircularColorSVG","renderView","defaultStrings","en","copyrightText","tagline","original","showAllDesigns","searchDesigns","visualization","illustrationViews","photorealistic","searchVisualizations","colorsAndCons","colorCustomization","mixedColors","mixedTextures","infotext","basicMaterialTitle","mixedConstructionsTitle","similarColors","sortingBySequence","sortingByName","sortingByColor","sortingBySharpness","sortingByBrightness","searchColorByName","ascending","descending","selectColor","favorite","emptyFavText1","emptyFavText2","addToFavorite","saveAsFavorite","dialogText","designExistsTxt","placeOrder","orderSheet","quality","totalArea","standardSizes","requestQuote","saveOrdersheet","orderEmail","yourName","yourEmailAddress","yourPhoneNumber","notes","sendEmail","orderUnits","ft","cm","emailMessages","sending","sent","incompleteInfo","invalidEmail","tools","quicklinkTitle","quicklinkText","undo","redo","autoRecolor","addToCart","carving","shuffleColors","hideColorPercentage","saveAsImage","publishOnline","quickShare","fileManager","downloadCTF","clearCacheThisDesign","clearCacheAllDesign","clearCacheTexture","clearCacheColor","clearCacheOther","stripedDesign","saveAndReplaceOnserver","saveAndCopyOnServer","designSaveSuccess","designSaveFail","save","cancel","close","renameDesign","found","noDesignFound","firstLine","secondLine","noVisualizationFound","deepZoom","perspective","deepZoomRx","myRoom","uploadImage","takephoto","openCam","capture","saveRoomText","fr","fit","LocalizedStrings","initializeStrings","customStrings","newObj","overwriteMerge","destinationArray","sourceArray","deepmerge","arrayMerge","setContent","hextoLum","space","hsl","getMaterialName","DefaultTextureNames","AdditionalTextureNames","custTexIndex","CustomTextureIndices","CustomTextureNames","NestedAreaSwatch","onColorSelectionClose","onColorSelectionOpen","onColorPieClick","colorNumber","popoverPosition","showPile","showColorSelection","showColorPercent","dispatchDesignDetails","casFlags","showPlyDropdown","colorPercentShown","DefaultTextureVisible","CustomPileheightIndices","CustomPileheightNames","DefaultPileheightNames","DefaultPileheightValues","DefaultPileheightVisible","handleMaterialChange","colorTitle","shouldShowDropDown","materials","allMaterialOptionsHidden","isAExclusiveMat","exclusiveMaterials","matOption","isExclusive","isExclusiveWithinArr","designColorMaterial","showThisMat","materialDropdown","textureName","origColorMaterial","associatedYarnMaterial","checkExclusiveMaterial","onColorSwatchClick","boundary","onOpened","captureDismiss","opacity","plyOption","pileHeightText","textOverflow","wordBreak","closest","curr","getPileheightText","currentYarn","shouldShowDropdown","borderRadius","backgroundColor","handleyarnMaterialChange","ColorPreview","colorName","renderTexturedPreview","canvasRef","useMount","overlayTextureinCanvas","SwatchBox","handleHover","swatchSpace","disabledSwatch","hover","setHover","isInVP","bounding","parentElement","isInViewPort","scrollIntoView","block","inline","isMobileDevice","onMouseOver","SimilarColors","colorList","setSimilarColors","deltaArr","SwatchContainer","styled","div","colorRows","getSortingOrders","colorString","ColorSelectionBox","selectColorOnClick","selectionColor","useColorListState","dispatchDesignDetail","setSortingOrder","sortingOptions","setSortingKey","colorCollection","setColorCollection","hoveredBox","setHoveredBox","CsbFlags","selectedCustomColor","setSelectedCustomColor","selectedCustomColorOption","setSelectedCustomColorOption","NumRows","colorRowsSorted","sortagain","sortingOrders","handleColorSwatchClick","LabelTemplateFlipo","isCurrentFolderLabel","colorCollectionName","currentFolderLabels","labelFilter","colorListName","labelIndeces","maxHeight","selectedyarn","placeholder","onInput","float","checked","alignIndicator","Position","BOTTOM_LEFT","collection","showThis","folderName","getFolderName","collectionsToshow","filtermap","showThisCollection","customColorOption","selectedCustomDb","selectCustomColorOption","BOTTOM_RIGHT","shown","templateName","renderLabelTemplate","disableAlpha","presetColors","onChangeComplete","tex","yi","previewMaterial","showColorLabelInfo","ColorSelection","removeTransState","getPosition1","renderSelectionBox","roomViewHelper","designRendered","designRendering","getDominantColor","smartKnot","smartIndex","domC","IllustrationView","handleAvailableSizesChange","handleRendering","filterData","changeActiveFloor","resetTrigger","supported","roomName","Files","config1","inputoncarpet","setinputoncarpet","shotReady","setshotReady","transition","settransition","dimensions","setdimensions","showWand","setshowWand","inputmoved","setinputmoved","drawOnEffectsTrigger","setdrawOnEffectsTrigger","renderfromsavedstate","setrenderfromsavedstate","setcolorSelectionPos","showEffectCanvas","setshowEffectCanvas","roomconfigstate","containerRef","bgCanvasRef","threeCanvasRef","maskCanvasRef","shadowCanvasRef","transitionCanvasRef","inputCanvasRef","objCanvasContainerRef","inputCanvasContainerRef","effectCanvasRef","carpetRotation","carpetPosition","prevRoomDetails","usePrevious","canvasConfig","initCanvas","unmountClearUp","sizeContainers","change3dObjectScale","handleShotReady","updateCarpetRotation","makeTransitionCanvas","run","updateCarpetPosition","renderFloor","updateFloor","setRoomConfigState","roomState","getSmartObject","objectEntries","smartObjs","entry","smart","la","renderFloorInRoom","defaultFloor","loadRoom","temproomconfigstate","newroom","clearAll","initConfig","fromlocal","resetOnDesignChange","initShot","renderScene","smartObject","smartObj","selectColorCode","updateBackground","updateMask","updatethreeCanvas","availSizes","designinroomformat","renderDesignFromCustomUrl","physicalHgtCms","renderDesign","updateAllObjectsInScene","handleBackgroundActives","tileData","updateTiles","applyEffects","drawOnEffects","initEffectCanvas","applyPresetOnCanvas","presetsMapping","tiltShift","resize","isinitialized","preinitShot","renderSavedRoomState","objectname","objectPosition","selectColorAnnotation","newshot","updateCameraShot","newlightname","changeView","roomview","sceneobjectstate","fromEntries","sortedobjectsarr","updateObjects","elems","getElementsByClassName","classList","objectindex","downloadRendered3dIllinIllView","downloadName","objCanvas","rh","col","downloadRendering","int","getSortedKeys","resolutionx","resolutiony","hoveredObjInd","p1each","some","isidle","pointer","inputoncarpettmp","handleInputStart","category","mouseDownTouchMove","handleinputMove","opt","mouseDownTouchEnd","handleInputEnd","transitioncanvas__renderfromsavedstate","shotkey","lightsourcekey","mysticsource","handleLightSwitch","makePDf","callback","o","jsPDF","orientation","format","html","doc","internal","getNumberOfPages","deletePage","mockHtml","mockHtml1","mockHtml_FoldedView","mockHtml_PerspectiveView","mockHtml_BedroomModern","mockHtml_FoldedBack","mockHtml_ActBody","mockHtml_artgallery","mockHtml_BabyFeet","mockHtml_BookWorm","mockHtml_Bodypaint","areaComponentref","catalogRoomView","CatalogView","catalogPropsState","setcatalogPropsState","renderedDesign","setrenderedDesign","renderedRoom","setrenderedRoom","colorSelectionPos","setselectedHtml","showTransition","setshowTransition","offsetWidth","offsetHeight","effectcanvas","designcanvas","roomcanvas","blobToFile","theBlob","fileName","File","lastModified","Date","getTime","renderHtml","innerHTML","insertAdjacentHTML","catalogPropsTemp","resolveThis","component","designfile","renderRoomArea","roomfile","renderLogo","getIllustration","roomImgBlob","roomimg","onCanvasClick","logo","cssText","logosrc","downloadRenderedCatalog_old","drawImg","designimg","crossOrigin","elementW","elementH","elementL","elementT","font","fontFamily","textAlign","fillText","resetDimensions","onRoomColorSwatchClick","downloadRenderedCatalog","wd","ht","before","after","ResourceTrackerCs","CloseupViewHelper","Scene","Raycaster","lightsInScene","WebGLRenderer","shadowMap","lastKnownIntersectionPoint","flipY","shot1","Shot_1","updateCamera","addCameraControl","castShadow","receiveShadow","updateFloorTexture","width1","height1","floorTexture","carpetObjectName","carpetMeshName","object3dBack","objectGroup","carpetObject","cast","receive","frontConf","shouldrenderDesignBack","lightsConfig","shadowCamSize","sources","lightConf","shadowRadius","lightColor","DirectionalLight","PointLight","HemisphereLight","AmbientLight","fronttilesDrawn","backtilesDrawn","drawBack","setTexture","dynamicScaling","roughmapCanvas","minFilter","carpetConfig","pnt","dwRenderer","windowWidth","windowHeight","shotId","sphericalInit","clock","Clock","cameraControls","setTarget","bb","start","end","setBoundary","counter","anim","getDelta","PerspectiveCamera","viewHelper","initialFloorOptions","CloseupView","setDefaultFloor","setShowViewpointDialog","activeShot","setActiveShot","prevRoomData","prevHash","perspectiveCanvasRef","cleanup","loadCustomDesign","loadView","getInstance","canvas1","downloadRenderedCloseupIll","newCanvas","resetView","config2Point1","imgdata","mappedConfig","version","canvases","overwriteFbx","adjustObjects","hideObjects","clipPath","filterUnits","colorInterpolationFilters","floodOpacity","in","stdDeviation","in2","tutorialTexts","Tutorial","setactiveIndex","setisViewing","settimeout","startTimeout","CameraOptions","filterOptions","activeFilterIndex","onFilterSelect","blurOptions","activeBlurIndex","onBlurSelect","onShot","seePreview","setseePreview","logourl","setCarpet","getCarpetPositions","originalBg","originalMat","dataurl","toDataURL","animate","createName","info","screen","patchImage","patchShadow","glowImage","physicalWidthCms","physicalHeightCms","designImagePath","designImage","makeMask","renderInCanvas","deg","maskImg","tCanvas","shCtx","tmpCtx","maskData","cancelable","Container","Canvas","RoomViewNew","designImageProps","onRendered","onRoomLoaded","onInteracted","Dir","prevDesignImagePath","isDownloading","setIsDownloading","changeDimensions","renderFromJpg","downloadRendered3dIllNQ","downloadRendered3dIllHQ","renderedCanvas","defaultRoomdata","App","onRendering","showLoaderonInit","setRoomData","setDesignImageProps","isLoading","setIsLoading","setbgImage","showTutorial","setshowTutorial","showRoomView","setshowRoomView","jsonUrl","query","preload","fullBgUrl","accept","postMessage","AtDropdown","dropdownItems","defaultItemIndex","setValue","cat","REGION","fileApiUrl","S3Client","region","credentials","fromCognitoIdentityPool","client","CognitoIdentityClient","identityPoolId","addFolder","uploadFile","forceUnit","newWid","newLgt","moveFile","oldfile","newpath","changeDesignDims","AlertWarning","message","units","unitFactor","pileunits","maxCarpetDims","inches","cms","hasTransparentPixel","isTransparent","countPixels","colorCounts","colorSeparated","rgba","num","estimateRugPhotoDims","physicalW","physicalH","UploadPlatform","editDesign","eFile","seteFile","uploadedDesign","setuploadedDesign","showUnsupportedDisclaimer","setshowUnsupportedDisclaimer","showPngToJpegDisclaimer","setshowPngToJpegDisclaimer","showJpegDisclaimer","setshowJpegDisclaimer","draggingFile","setdraggingFile","alertMessage","setalertMessage","token","settoken","useToken","setuseToken","msg","tokenMsg","settokenMsg","progressPercent","setprogressPercent","kl","ph","punit","customDesignDetails","setcustomDesignDetails","useDebounce","debouncedDesignDetails","previewRendering","setpreviewRendering","designUploadSuccess","setdesignUploadSuccess","designFinalUploading","setdesignFinalUploading","inputRef","validImageTypes","validcarpetTypes","resetdesign","isJPEG","unsupportedDesign","IRREGULAR","uploadedPath","iframeEl","contentWindow","resetPreviewDesign","triggerInput","checkTempJpegUpload","albumPhotosKey","tryUpload","uploadedImage","fileType","fileExt","getExtension","fileNameIndex","uploadedImageNameLabel","getFilenameWithoutExt","uploadName","checkname","usedFileNames","newuploadedImage","loadImage","translate","isJpeg","uploadToTemp","uploadcanvas","ctxdata","isRunner","RUNNER","onInputChange","dataTransfer","changeDesignDetails","func","args","timeout","onPaymentSuccess","isCTFX","isFileChanged","getUploadedFile","handlePreviewRendering","useCallback","onDesignEdit","newHgt","finish","updatedDesign","actions","textDecoration","htmlFor","fundingSource","FUNDING","PAYPAL","createOrder","purchase_units","amount","layout","onApprove","orderData","flexDirection","justifyContent","onDragEnter","onDragOver","onDrop","onDragExit","onDragLeave","viewTypes","filters","assetspath","filterName","blursDef","firstload","VpsStage","selectedView","handleCollapsePanel","showIllustrationModal","setshowMMC","showMMC","prevIllustration","nextIllustration","disableIllustrations","changeDesignType","dispatchDesignList","activeCameraFilter","setactiveCameraFilter","activeCameraBlur","setactiveCameraBlur","roomdata","isRendering","setIsRendering","disableCamera","setdisableCamera","illviewRoomData","setillviewRoomData","catalogviewRoomData","setcatalogviewRoomData","closeviewRoomData","setCloseviewRoomData","currentRenderingView","setcurrentRenderingView","showFilterPanel","setshowFilterPanel","showunsupportedDesignAlert","setshowunsupportedDesignAlert","showDesignPopOver","setshowDesignPopOver","showUploadRugDialog","setshowUploadRugDialog","showRugColors","setshowRugColors","hideActive","sethideActive","triggerHideActive","settriggerHideActive","blur","setblurData","blurs","setblurs","settiltShiftFilter","setresetTrigger","nextDesigns","setnextDesigns","customUploadFolder","setcustomUploadFolder","seteditDesign","setfloorOptions","mainRef","useToggle","fullscreenstatus","togglefullscreen","isFullScreen","useFullscreen","useIdle","floorArr","returnObj","eachFloor","diffuse","floorOptionsTemp","isSupported","setLoading","RegExp","trim","dir","irregular","runner","tim","clearTimeout","enter","downloadIllustration","downloadRendered3dIll","handleDesignPopOverClose","handleUploadPlatformClose","handleSetNextDesigns","elevation","popoverClassName","colorobj","idle","onRelease","vertical","inactive","isFullscreen","floorName","matchesName","hidden","setNextDesigns","restrictJPEG","restrictDesigns","jpegExtensions","memo","handleThumbnailClick","customTree","setcustomTree","stateTree","setstateTree","uploadedFile","setuploadedFile","initDesignPath","initialData","getFolderTree","folderPath","defaultFilePath","defaultFileKeyType","passPath","initialList","Type","items","updatedTree","folderTree","findinItems","defItemWithThumb","StartupFolder","returned","currentKey","mapNodeFullPath","mergeNodes","aMapped","bMapped","bIndex","merged","customMerge","treeArray","flatfileListMerged","keyEntries","startupDefault","internalCustomFolderPath","uploadedNodeTemp","fileNames","mergedTree","yourDesignsNode","openNodeAfterMerge","useDebouncedCallback","debouncedThumbnailClick","findActive","nodes","filteredNodes","nodeIndex","fileIndex","increment","renderNodes","treeNodes","nodeItems","DesignCategory","thumbnailType","lastNode","thumblistArr","setthumblistArr","thumbListTemp","restriction","isirregular","isrunner","checkRestriction","staticAssetsPath","ismobileAndTabletCheck","sampleBaseUrl","samples","VpsLanding","onLoaded","begin","setbegin","loadingPercent","setloadingPercent","signedIn","setsignedIn","showMobileWarning","setshowMobileWarning","activeSampleNode","setactiveSampleNode","prevactiveSampleNode","setprevactiveSampleNode","sampleIndex","setsampleIndex","setshowSampleLoadSpinner","loadedSamples","setloadedSamples","useGoogleLogout","clientId","cookiePolicy","signOut","loaded","script","script1","script2","async","body","interval","beginHandler","postUsageLog","formdata","handleSuccessGoogle","responsePayload","tokens","atob","decodeJwtResponse","credential","detail","authorization","id_token","user","firstName","lastName","once","images","data-client_id","process","data-context","data-ux_mode","data-callback","data-auto-prompt","class","data-type","data-shape","data-size","data-logo_alignment","appId","autoLoad","onFailure","cssClass","data-color","data-logo-size","data-border-radius","data-border","newSampleIndex","onLoad","onSampleImageLoad","MMC","colorData","gridDisplayLevel","setgridDisplayLevel","selectedGridColor","setselectedGridColor","colorGridInfo","setcolorGridInfo","setcounter","setdesignColors","selectedDesignColor","setselectedDesignColor","showColorCirclesWrapper","imageUrl","webkitURL","getGrid","counterarg","handleColorMatch","newColor","handleColorClick","centers","eachCenter","marginLeft","patternContentUnits","vpsfirstload","mapInfoThumbs","roomFeatures","arrInfo","selectedViewInd","setselectedViewInd","scenesData","setscenesData","setshowIllustrationModal","currentCatIllustration","setcurrentCatIllustration","allRooms","setallRooms","setselectedView","mmcActiveColor","setmmcActiveColor","nextIllustrations","setnextIllustrations","disableIllsforIrregular","setdisableIllsforIrregular","disableCarpetInMaking","setdisableCarpetInMaking","vpsHome","handleFetchRooms","currentSceneIndex","currentSceneData","isCurrent","nextCategory","nextIndex","prevCategory","prevIndex","roomswithoutthumbs","filteredRooms","isonlinedemo","test","tempAllRooms","roomPathArr","roomCategory","dirArr","infos","roomorder","roomorderentries","orderedRooms","itemObj","filteringArr","findElementIndex","findElement","eachitem","roomIndex","roomCatData","tempObj","eachObj","showName","story","refs","acc","createRef","behavior","itemIndex","VpsHome","initDesignColors","setisReady","dispatchUiState","designListState","dispatchColorListState","dispathcDesignDetails","toggleFullscreen","refHome","colors","texArr","p","darr","designlist","similarDesigns","getSimilarDesigns","thum","thumbnail","latest","fav","fallback","handleReady","visViewModes","ROOM_VIEW","MY_ROOM","DESIGN_VIEW_DEEPZOOM","DESIGN_VIEW_DEEPZOOM_RX","DESIGN_VIEW_PERSPECTIVE","DESIGN_VIEW_PHOTOGRAPHIC","visualizationState","viewMode","DESIGN_VIEW","illustrations","visualizationReducer","selPrevIll","selNextIll","VisualizationStateProvider","initState","initialMyroomState","controlMode","showWalkthrough","savedRooms","myroomReducer","MyroomStateProvider","ErrorTem","buttonText","onButtonClick","ErrorPage","errorType","errorTypes","INTERFACE_ERROR","INVALID_LINK","NO_CONNECTION","PageTorender","processRoomPath","initpatharr","processDesignPath","EntryPage","initRoomPath","initdesignFolder","setInitialData","initializeData","initData","getFromSessionStorage","str","decodeColorsFromString","setLanguage","InitView","Colors","Login","root","ReactDOM","basename","isReady","applyEdgeFilter","designCtx","designfilterCtx","designfilterData","designfilterData2","designfilterData3","designfilterData4","applyBWMask","maskCtx","tempCtx","applyMask","imgUrl","readUrls","bnwToTransparency","bnwUrl","resizeCanvas","downloadBlob","anchor","msSaveOrOpenBlob","dataURItoBlob","canvasToBlobPromise","msToBlob","dataURI","byteString","mimeString","ab","ArrayBuffer","Uint8Array","Blob","dataURLtoBlobURL","arrDeg","arrRad","fitType","containerwidth","containerheight","imagewidth","imageheight","wdif","hdif","fixed","converted","lastIndexOf","characters","charactersLength","random","leftFillNum","targetLength","padStart","jointArray","arrays","uniqueArray","vector","project","userAgent","check","vendor","opera","safelyParseJSON","Pako","inflate","parsed","ANICENT_BROWSER","rng","seedrandom","can"],"mappings":"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","file":"static/js/main.2a4500d1.chunk.js","sourcesContent":["import axios from \"axios\";\r\n// const access_token = \"xxyyzz\"\r\n// axios.defaults.headers.common['Authorization'] = `Bearer ${access_token}`\r\n\r\n//Create a Http Client using Axios. Further modifications in this layer can be done later like Authorization.\r\n\r\nconst post = (url = \"\", data = \"\", config = {}) => {\r\n return axios.post(url, data, config);\r\n};\r\n\r\nconst get = url => {\r\n return axios(url);\r\n};\r\n\r\nconst HttpClient = {\r\n post,\r\n get,\r\n};\r\n\r\nexport default HttpClient;\r\n","export const MD5 = function (string) {\r\n\r\n function RotateLeft(lValue, iShiftBits) {\r\n return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));\r\n }\r\n\r\n function AddUnsigned(lX, lY) {\r\n var lX4, lY4, lX8, lY8, lResult;\r\n lX8 = (lX & 0x80000000);\r\n lY8 = (lY & 0x80000000);\r\n lX4 = (lX & 0x40000000);\r\n lY4 = (lY & 0x40000000);\r\n lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);\r\n if (lX4 & lY4) {\r\n return (lResult ^ 0x80000000 ^ lX8 ^ lY8);\r\n }\r\n if (lX4 | lY4) {\r\n if (lResult & 0x40000000) {\r\n return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);\r\n } else {\r\n return (lResult ^ 0x40000000 ^ lX8 ^ lY8);\r\n }\r\n } else {\r\n return (lResult ^ lX8 ^ lY8);\r\n }\r\n }\r\n\r\n function F(x, y, z) { return (x & y) | ((~x) & z); }\r\n function G(x, y, z) { return (x & z) | (y & (~z)); }\r\n function H(x, y, z) { return (x ^ y ^ z); }\r\n function I(x, y, z) { return (y ^ (x | (~z))); }\r\n\r\n function FF(a, b, c, d, x, s, ac) {\r\n a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));\r\n return AddUnsigned(RotateLeft(a, s), b);\r\n };\r\n\r\n function GG(a, b, c, d, x, s, ac) {\r\n a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));\r\n return AddUnsigned(RotateLeft(a, s), b);\r\n };\r\n\r\n function HH(a, b, c, d, x, s, ac) {\r\n a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));\r\n return AddUnsigned(RotateLeft(a, s), b);\r\n };\r\n\r\n function II(a, b, c, d, x, s, ac) {\r\n a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));\r\n return AddUnsigned(RotateLeft(a, s), b);\r\n };\r\n\r\n function ConvertToWordArray(string) {\r\n var lWordCount;\r\n var lMessageLength = string.length;\r\n var lNumberOfWords_temp1 = lMessageLength + 8;\r\n var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;\r\n var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;\r\n var lWordArray = Array(lNumberOfWords - 1);\r\n var lBytePosition = 0;\r\n var lByteCount = 0;\r\n while (lByteCount < lMessageLength) {\r\n lWordCount = (lByteCount - (lByteCount % 4)) / 4;\r\n lBytePosition = (lByteCount % 4) * 8;\r\n lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));\r\n lByteCount++;\r\n }\r\n lWordCount = (lByteCount - (lByteCount % 4)) / 4;\r\n lBytePosition = (lByteCount % 4) * 8;\r\n lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);\r\n lWordArray[lNumberOfWords - 2] = lMessageLength << 3;\r\n lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;\r\n return lWordArray;\r\n };\r\n\r\n function WordToHex(lValue) {\r\n var WordToHexValue = \"\", WordToHexValue_temp = \"\", lByte, lCount;\r\n for (lCount = 0; lCount <= 3; lCount++) {\r\n lByte = (lValue >>> (lCount * 8)) & 255;\r\n WordToHexValue_temp = \"0\" + lByte.toString(16);\r\n WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);\r\n }\r\n return WordToHexValue;\r\n };\r\n\r\n function Utf8Encode(string) {\r\n string = string.replace(/\\r\\n/g, \"\\n\");\r\n var utftext = \"\";\r\n\r\n for (var n = 0; n < string.length; n++) {\r\n\r\n var c = string.charCodeAt(n);\r\n\r\n if (c < 128) {\r\n utftext += String.fromCharCode(c);\r\n }\r\n else if ((c > 127) && (c < 2048)) {\r\n utftext += String.fromCharCode((c >> 6) | 192);\r\n utftext += String.fromCharCode((c & 63) | 128);\r\n }\r\n else {\r\n utftext += String.fromCharCode((c >> 12) | 224);\r\n utftext += String.fromCharCode(((c >> 6) & 63) | 128);\r\n utftext += String.fromCharCode((c & 63) | 128);\r\n }\r\n\r\n }\r\n\r\n return utftext;\r\n };\r\n\r\n var x = [];\r\n var k, AA, BB, CC, DD, a, b, c, d;\r\n var S11 = 7, S12 = 12, S13 = 17, S14 = 22;\r\n var S21 = 5, S22 = 9, S23 = 14, S24 = 20;\r\n var S31 = 4, S32 = 11, S33 = 16, S34 = 23;\r\n var S41 = 6, S42 = 10, S43 = 15, S44 = 21;\r\n\r\n string = Utf8Encode(string);\r\n\r\n x = ConvertToWordArray(string);\r\n\r\n a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;\r\n\r\n for (k = 0; k < x.length; k += 16) {\r\n AA = a; BB = b; CC = c; DD = d;\r\n a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);\r\n d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);\r\n c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB);\r\n b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);\r\n a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);\r\n d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);\r\n c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613);\r\n b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501);\r\n a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8);\r\n d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);\r\n c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);\r\n b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);\r\n a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122);\r\n d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193);\r\n c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E);\r\n b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821);\r\n a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);\r\n d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340);\r\n c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);\r\n b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);\r\n a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);\r\n d = GG(d, a, b, c, x[k + 10], S22, 0x2441453);\r\n c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);\r\n b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);\r\n a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);\r\n d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);\r\n c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);\r\n b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);\r\n a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);\r\n d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);\r\n c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);\r\n b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);\r\n a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);\r\n d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681);\r\n c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);\r\n b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);\r\n a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);\r\n d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);\r\n c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);\r\n b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);\r\n a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);\r\n d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);\r\n c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);\r\n b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05);\r\n a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);\r\n d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);\r\n c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);\r\n b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);\r\n a = II(a, b, c, d, x[k + 0], S41, 0xF4292244);\r\n d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97);\r\n c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);\r\n b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039);\r\n a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3);\r\n d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);\r\n c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);\r\n b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1);\r\n a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);\r\n d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);\r\n c = II(c, d, a, b, x[k + 6], S43, 0xA3014314);\r\n b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);\r\n a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82);\r\n d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);\r\n c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);\r\n b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391);\r\n a = AddUnsigned(a, AA);\r\n b = AddUnsigned(b, BB);\r\n c = AddUnsigned(c, CC);\r\n d = AddUnsigned(d, DD);\r\n }\r\n\r\n var temp = WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d);\r\n\r\n return temp.toLowerCase();\r\n}","import uuid from \"uuid\";\r\nimport HttpClient from \"./httpClient\";\r\nimport {\r\n readJSON,\r\n convertTilePointToName,\r\n readImage,\r\n makeid,\r\n getJsonFromUrl\r\n} from \"../utils/utils\";\r\nimport { createCanvas } from \"../utils/canvasutils\";\r\nimport { MD5 } from \"../utils/md5\";\r\n// import { decode } from \"base64-arraybuffer\"\r\n// import pako from \"pako\";\r\n\r\n// export const domain = \"http://localhost:61960\";\r\nexport const build = \"v3\";\r\nexport const domain = `https://${build}.explorug.com`;\r\nexport const assetsDomain =\r\n build === \"v3\" ? \"https://assets.explorug.com/\" : `${domain}/Assets`;\r\n// `${domain}/Assets`;\r\nconst myroomServerUrl = \"https://www.myownrug.com/segment_image\";\r\n\r\nlet floorsFromServer = null;\r\n\r\nlet provider = \"appproviderv3.aspx\";\r\nconst API_KEY = \"apikey\";\r\nconst JPEG_API_KEY = \"jpegapikey\";\r\n\r\nconst keyScopes = {\r\n master: \"master\",\r\n design: \"design\",\r\n room: \"room\"\r\n}\r\nconst multiKey = {\r\n ctf: API_KEY,\r\n jpeg: JPEG_API_KEY\r\n};\r\nconst defaultKey = multiKey.ctf\r\nlet activeKey = { key: defaultKey, scope: Object.values(keyScopes) };\r\nlet previousKey = null;\r\n\r\nconst setActiveKey = (val, scope, previous = false) => {\r\n if (previous) {\r\n val = previousKey.key;\r\n scope = previousKey.scope;\r\n }\r\n if (Object.values(multiKey).includes(val)) {\r\n previousKey = activeKey;\r\n activeKey = { key: val, scope: scope || Object.values(keyScopes) };\r\n if (activeKey.key === multiKey.jpeg) {\r\n window.InterfaceElements.IsJpeg = true;\r\n }\r\n else {\r\n window.InterfaceElements.IsJpeg = false;\r\n }\r\n }\r\n}\r\n\r\n\r\nlet cacheLocation = \"\";\r\nconst getCacheLocationFromUrl = url => url.split(\"/\")[2];\r\nconst processPath = path => {\r\n const s = path.split(\"/\").map(encodeURIComponent);\r\n if (s[1] === \"Assets\") {\r\n const ss = s.slice(2);\r\n return `${assetsDomain}/${ss.join(\"/\")}`;\r\n } else {\r\n return `${domain}${path}`;\r\n }\r\n};\r\n\r\nconst postHttpClient = (data, config) =>\r\n HttpClient.post(`${domain}/${provider}`, data, config).then(response => response.data);\r\nconst getPageName = () => {\r\n let page;\r\n let relogin = true;\r\n page = getJsonFromUrl().page;\r\n if (!page) {\r\n page = sessionStorage.getItem(\"page\");\r\n relogin = true;\r\n }\r\n return { page: \"photostudio\", jpegpage: \"photostudiojpg\", relogin };\r\n};\r\n// const getPageName = () => {\r\n// let page;\r\n// let relogin = true;\r\n// page = getJsonFromUrl().page;\r\n// if (!page) {\r\n// page = sessionStorage.getItem(\"page\");\r\n// relogin = sessionStorage.getItem(\"relogin\");\r\n// }\r\n// return { page, relogin };\r\n// };\r\n\r\nconst postWithRetry = data => {\r\n return new Promise((resolve, reject) => {\r\n let numtries = 0;\r\n const fetchData = () => {\r\n postHttpClient(data)\r\n .then(resolve)\r\n .catch(err => {\r\n numtries++;\r\n if (numtries <= 5) fetchData();\r\n else reject(err);\r\n });\r\n };\r\n fetchData();\r\n });\r\n};\r\nconst getApiKey = (scope) => sessionStorage.getItem(\r\n scope ?\r\n (activeKey.scope.includes(scope) ? activeKey.key : defaultKey)\r\n : activeKey.key\r\n);\r\n\r\nconst fetchApiKey = ({ username, password }) => {\r\n let data = new FormData();\r\n data.append(\"action\", \"login\");\r\n data.append(\"username\", username);\r\n data.append(\"password\", password);\r\n return new Promise((resolve, reject) => {\r\n postWithRetry(data)\r\n .then(res => {\r\n const key = res.Key;\r\n if (!key) reject(\"INVALUD CREDENTIALS\");\r\n else {\r\n sessionStorage.setItem(API_KEY, key);\r\n sessionStorage.setItem(\"relogin\", false);\r\n resolve(key);\r\n }\r\n })\r\n .catch(reject);\r\n });\r\n};\r\nconst autoLogin = params => {\r\n const { page, jpegpage, relogin } = getPageName();\r\n const { forcelogin } = getJsonFromUrl();\r\n return new Promise(async (resolve, reject) => {\r\n if (forcelogin) {\r\n reject(\"NO_LOGIN_PAGE\");\r\n return;\r\n }\r\n if (JSON.parse(relogin) && page && page !== \"undefined\") {\r\n let resolvedata = null;\r\n if (!params?.keyType || (params.keyType === multiKey.ctf)) {\r\n const sessionApiKey = sessionStorage.getItem(API_KEY);\r\n if (params.keyfromsession && sessionApiKey) {\r\n resolvedata = { Key: sessionApiKey };\r\n }\r\n else {\r\n await HttpClient.post(`${domain}/login/app${page}.aspx`).then(response => {\r\n if (!response.data) {\r\n reject(\"INVALID_CREDENTIALS\");\r\n return;\r\n }\r\n sessionStorage.setItem(\"relogin\", false);\r\n sessionStorage.setItem(API_KEY, response.data.Key);\r\n resolvedata = response.data;\r\n return;\r\n }).catch(reject)\r\n }\r\n }\r\n if (!params?.keyType || (params.keyType === multiKey.jpeg)) {\r\n if (jpegpage) {\r\n const sessionApiKey = sessionStorage.getItem(JPEG_API_KEY);\r\n if (params.keyfromsession && sessionApiKey) {\r\n resolvedata = { Key: sessionApiKey };\r\n }\r\n else {\r\n await HttpClient.post(`${domain}/login/app${jpegpage}.aspx`).then(response => {\r\n if (!response.data) {\r\n return;\r\n }\r\n sessionStorage.setItem(\"relogin\", false);\r\n sessionStorage.setItem(JPEG_API_KEY, response.data.Key);\r\n return;\r\n }).catch(reject)\r\n }\r\n }\r\n }\r\n\r\n resolve(resolvedata);\r\n } else {\r\n const key = sessionStorage.getItem(API_KEY);\r\n if (key) resolve(key);\r\n else reject(\"NO_LOGIN_PAGE\");\r\n return;\r\n }\r\n });\r\n};\r\nconst fetchInterfaceElements = () => {\r\n let data = new FormData();\r\n data.append(\"action\", \"interfaceelements\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n return postHttpClient(data).then(interfaceElements => {\r\n const { InterfaceElements, TextureOptions } = interfaceElements;\r\n\r\n window.InterfaceElements = InterfaceElements;\r\n window.TextureOptions = TextureOptions;\r\n\r\n const { LogoUrl } = InterfaceElements;\r\n cacheLocation = getCacheLocationFromUrl(LogoUrl);\r\n if (InterfaceElements.CustomizeCssUrl && InterfaceElements.CustomizeCssUrl !== \"\") {\r\n var link = document.createElement(\"link\");\r\n link.setAttribute(\"rel\", \"stylesheet\");\r\n link.setAttribute(\"type\", \"text/css\");\r\n link.setAttribute(\"href\", `${domain}${InterfaceElements.CustomizeCssUrl}`);\r\n document.getElementsByTagName(\"head\")[0].appendChild(link);\r\n }\r\n if (!InterfaceElements.CustomizeJsUrl || InterfaceElements.CustomizeJsUrl === \"\") {\r\n return { ...interfaceElements, flags: {} };\r\n }\r\n return HttpClient.get(`${domain}${InterfaceElements.CustomizeJsUrl}?t=${makeid(8)}`)\r\n .then(flags => {\r\n return { ...interfaceElements, flags: flags.data };\r\n })\r\n .catch(err => {\r\n return { ...interfaceElements, flags: {} };\r\n });\r\n });\r\n // return postHttpClient(data)\r\n};\r\nconst isAuthenticated = () => {\r\n if (sessionStorage.getItem(API_KEY)) return true;\r\n else return false;\r\n};\r\nconst fetchDesignList = params => {\r\n let data = new FormData();\r\n data.append(\"action\", \"designlist\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.design));\r\n if (params.folder) {\r\n data.append(\"folder\", params.folder);\r\n }\r\n return new Promise((resolve, reject) => {\r\n let numtries = 0;\r\n post();\r\n function post() {\r\n postHttpClient(data)\r\n .then(resolve)\r\n .catch(err => {\r\n if (err.code === \"ECONNABORTED\" && numtries < 5) {\r\n numtries++;\r\n post();\r\n } else {\r\n reject(err);\r\n }\r\n });\r\n }\r\n });\r\n};\r\nconst fetchColorList = params => {\r\n let data = new FormData();\r\n data.append(\"action\", \"colorlist\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n return postHttpClient(data);\r\n};\r\nconst fetchRoomList = params => {\r\n let data = new FormData();\r\n data.append(\"action\", \"roomlist\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.room));\r\n return postHttpClient(data);\r\n};\r\nconst fetchDesignTiles = ({ file, zoom = 2, tiles, props, hash }) => {\r\n let data = new FormData();\r\n data.append(\"action\", \"designtiles\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.design));\r\n data.append(\"file\", file);\r\n data.append(\"zoom\", zoom);\r\n data.append(\"tiles\", JSON.stringify(tiles));\r\n if (props) data.append(\"props\", JSON.stringify(props));\r\n\r\n return postHttpClient(data).then(processPath);\r\n};\r\n\r\nconst fetchPileTiles = ({ file, zoom = 2, tiles, props, hash }) => {\r\n let data = new FormData();\r\n data.append(\"action\", \"piletiles\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.design));\r\n data.append(\"file\", file);\r\n data.append(\"zoom\", zoom);\r\n data.append(\"tiles\", JSON.stringify(tiles));\r\n if (props) data.append(\"props\", JSON.stringify(props));\r\n return postHttpClient(data).then(processPath);\r\n};\r\n\r\nconst fetchSilkSheenTiles = ({ file, zoom = 2, tiles, props, hash }) => {\r\n let data = new FormData();\r\n data.append(\"action\", \"silksheentiles\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.design));\r\n data.append(\"file\", file);\r\n data.append(\"zoom\", zoom);\r\n data.append(\"tiles\", JSON.stringify(tiles));\r\n if (props) data.append(\"props\", JSON.stringify(props));\r\n return postHttpClient(data).then(processPath);\r\n};\r\nconst fetchVisualizationTiles = ({ file, zoom, tiles, props }) => {\r\n let data = new FormData();\r\n data.append(\"action\", \"visualizationtiles\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.design));\r\n data.append(\"file\", file);\r\n data.append(\"zoom\", zoom);\r\n data.append(\"tiles\", JSON.stringify(tiles));\r\n if (props) data.append(\"props\", JSON.stringify(props));\r\n return postHttpClient(data).then(processPath);\r\n};\r\nconst fetchTileDetails = ({ file, backColor = \"\" }) => {\r\n let data = new FormData();\r\n data.append(\"action\", \"tiledetails\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.design));\r\n data.append(\"file\", file);\r\n data.append(\"backcolor\", backColor);\r\n if (window.InterfaceElements.IsJpeg) {\r\n return Promise.resolve({\r\n tileTransparency1: [],\r\n tileTransparency2: [],\r\n tileTransparency4: [],\r\n colorTileData1: [],\r\n colorTileData2: [],\r\n colorTileData4: []\r\n });\r\n }\r\n return postHttpClient(data).then(tilePaths => {\r\n const {\r\n ColorTiles1X,\r\n ColorTiles2X,\r\n ColorTiles4X,\r\n TileTransparency1X,\r\n TileTransparency2X,\r\n TileTransparency4X\r\n } = tilePaths;\r\n // const arr = decode(\"H4sIAAAAAAAEAO3RsXEFIQxFUUpXaSpFJRASMNiBx/67QuiyQ+h96Ung6uvr3bt37969+3cb4A3cwAW85NzBK7iCS+6j5N7ADVzBS+4dvIEbuIKX3Dt4AzdwBS+5D/AGbuAKLrn/PG/tHbyCG7iCl9wHeAOv4AYu4CX3Ad7AK7iBK3jJfYB38Apu4AouuX+eH3sHb+AV3MAFvOQ+wDt4A6/gBi7gJfcB3sEbeAU3cAUX8JJ7B2/gFdzAFVzAS+4DvIM38Apu4Aou4CX3Ad7BG3gFN3A9dAEvufs83n0e7z6Pd5/Hu8/j3X/fu/++d88PfcrjfMrjfMrjfMrj3MAVXA594rvPee4+57n7nOfuc55nbuAKLuAzP/Ig382DfDcP8j3yIN/NDVzB5dADvnqU7+pRvice5bt6lO/qdugKLoce8cXDvBcP8z3wMO/Fw7wP3MAVXA495H2P8388zrvvcf6Px3n33cD10OXQY/7zRf5tX+T/80X+bV/k33YD10OXQ1/wrq/O8+ur8+z66jy7vjrPrhu4Hroc+oo3fXm+8g1Ue2ogACAAAA==\")\r\n // const arr1 = new Uint8Array(arr)\r\n // console.log(arr1)\r\n // console.log(arr)\r\n // var output = pako.inflate(arr1);\r\n // console.log(output)\r\n // const op = toBits(output)\r\n // console.log(op)\r\n let promises = [\r\n readJSON(`${domain}${ColorTiles1X}`),\r\n readJSON(`${domain}${ColorTiles2X}`),\r\n readJSON(`${domain}${ColorTiles4X}`)\r\n ];\r\n const isIrregular = TileTransparency1X && TileTransparency1X !== \"\";\r\n if (isIrregular) {\r\n promises.push(\r\n readJSON(`${domain}${TileTransparency1X}`),\r\n readJSON(`${domain}${TileTransparency2X}`),\r\n readJSON(`${domain}${TileTransparency4X}`)\r\n );\r\n }\r\n return Promise.all(promises).then(tileDataArray => {\r\n let transparencyData = {\r\n tileTransparency1: [],\r\n tileTransparency2: [],\r\n tileTransparency4: []\r\n };\r\n if (isIrregular) {\r\n transparencyData = {\r\n tileTransparency1: tileDataArray[3],\r\n tileTransparency2: tileDataArray[4],\r\n tileTransparency4: tileDataArray[5]\r\n };\r\n }\r\n return {\r\n colorTileData1: tileDataArray[0],\r\n colorTileData2: tileDataArray[1],\r\n colorTileData4: tileDataArray[2],\r\n ...transparencyData\r\n };\r\n });\r\n });\r\n};\r\nconst fetchRoomDetails = ({ file }) => {\r\n let data = new FormData();\r\n data.append(\"action\", \"3droomdetails\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.room));\r\n data.append(\"file\", file);\r\n return postHttpClient(data);\r\n};\r\nconst fetchRenderedDesignOrRoom = ({ backColor = \"#00000000\", file, props, view = \"\", at }) => {\r\n let data = new FormData();\r\n data.append(\"action\", \"rendering\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.design));\r\n data.append(\"file\", file);\r\n data.append(\"view\", view);\r\n data.append(\"backcolor\", backColor);\r\n data.append(\"props\", JSON.stringify(props));\r\n if (at) data.append(\"at\", at);\r\n return postWithRetry(data).then(data => {\r\n return { ...data, Design: `${domain}${data.Design}`, View: `${domain}${data.View}` };\r\n });\r\n};\r\n\r\nconst changeColorCombination = ({ numColors, colorTab }) => {\r\n let data = new FormData();\r\n data.append(\"action\", \"colorcombination\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n data.append(\"numcolors\", numColors);\r\n data.append(\"tab\", colorTab);\r\n return postHttpClient(data);\r\n};\r\nconst publishDesign = ({ file, props, view = \"\", title, desc }) => {\r\n var data = new FormData();\r\n data.append(\"action\", \"publishdesign\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n data.append(\"file\", file);\r\n data.append(\"view\", view);\r\n if (hasText(title)) data.append(\"title\", title);\r\n if (hasText(desc)) data.append(\"desc\", desc);\r\n if (props) data.append(\"props\", JSON.stringify(props));\r\n return postHttpClient(data).then(data => {\r\n return { ...data, CatalogCache: `${domain}/${data.CatalogCache}` };\r\n });\r\n};\r\nconst eCatalogDetails = ({ catalogId }) => {\r\n var data = new FormData();\r\n data.append(\"action\", \"ecatalogdetails\");\r\n data.append(\"catalogid\", catalogId);\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n return postHttpClient(data).then(data => {\r\n const d = { ...data };\r\n let InitDesign;\r\n const { InitDesign: designPath } = d;\r\n const extArr = designPath.split(\".\");\r\n const ext = extArr[extArr.length - 1];\r\n if (ext !== \"ctf\") InitDesign = designPath + \".ctf\";\r\n else InitDesign = designPath;\r\n\r\n return { ...data, InitDesign: \"Designs/\" + InitDesign };\r\n });\r\n};\r\nconst calculatePriceOfRug = ({ props, file }) => {\r\n var data = new FormData();\r\n data.append(\"action\", \"price\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n data.append(\"file\", file);\r\n data.append(\"props\", JSON.stringify(props));\r\n return postHttpClient(data);\r\n};\r\nconst fetchCustomFieldOrdersheet = () => {\r\n var data = new FormData();\r\n data.append(\"action\", \"customfields\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n return postHttpClient(data);\r\n};\r\nconst fetchOrderSheet = ({ file, props, customFields, materialNames = \"\", watermark, mode }) => {\r\n const data = new FormData();\r\n data.append(\"action\", \"ordersheet\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n data.append(\"file\", file);\r\n data.append(\"props\", JSON.stringify(props));\r\n data.append(\"view\", \"\");\r\n data.append(\"customfields\", customFieldsToString(customFields));\r\n data.append(\"materialnames\", JSON.stringify(materialNames));\r\n data.append(\"materialsilk\", \"\");\r\n if (watermark) data.append(\"watermark\", watermark);\r\n if (mode) data.append(\"mode\", mode);\r\n return postHttpClient(data).then(data => mode !== \"postback\" ? data : ({ ...data, propsid: decodeURIComponent(data.propsid) }));\r\n};\r\n\r\nconst downloadCatalog = ({ file }) => {\r\n const url = `${domain}/${provider}?action=downloadfile&key=${getApiKey(AppProvider.keyScopes.master)}&file=${file}`;\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n link.click();\r\n};\r\nconst saveFileLocally = ({ file, props }) => {\r\n const data = new FormData();\r\n data.append(\"action\", \"savefilelocally\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n data.append(\"file\", file);\r\n if (props) data.append(\"props\", JSON.stringify(props));\r\n HttpClient.post(`${domain}/${provider}`, data, {\r\n responseType: \"blob\"\r\n }).then(response => {\r\n let url = URL.createObjectURL(response.data);\r\n const link = document.createElement(\"a\");\r\n\r\n link.href = url;\r\n const farr = file.split(\"/\").filter(item => item && item !== \"\");\r\n link.download = farr[farr.length - 1];\r\n link.click();\r\n });\r\n};\r\nconst sendOrdersheetEmail = ({\r\n file,\r\n props,\r\n name,\r\n email,\r\n phone,\r\n note,\r\n customFields = [],\r\n view = \"\",\r\n setCustomEmail,\r\n customerEmailBody,\r\n customerEmailSubject,\r\n customerEmailFromAddress,\r\n companyEmailBody,\r\n companyEmailSubject,\r\n companyEmailFromAddress\r\n}) => {\r\n const data = new FormData();\r\n data.append(\"action\", \"ordersheet\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n data.append(\"file\", file);\r\n data.append(\"props\", JSON.stringify(props));\r\n data.append(\"view\", view);\r\n data.append(\"customfields\", customFieldsToString(customFields));\r\n\r\n data.append(\"mode\", \"email\"); // mode=postback for posting back to iframe\r\n data.append(\"name\", name);\r\n data.append(\"email\", email);\r\n data.append(\"phone\", phone);\r\n data.append(\"note\", note);\r\n //add template\r\n if (setCustomEmail) {\r\n if (hasText(companyEmailBody)) data.append(\"EmailBodyTemplate\", companyEmailBody);\r\n if (hasText(companyEmailFromAddress)) data.append(\"EmailFromAddress\", companyEmailFromAddress);\r\n if (hasText(companyEmailSubject)) data.append(\"EmailSubject\", companyEmailSubject);\r\n if (hasText(customerEmailBody)) data.append(\"CustomerEmailBodyTemplate\", customerEmailBody);\r\n if (hasText(customerEmailFromAddress))\r\n data.append(\"CustomerEmailFromAddress\", customerEmailFromAddress);\r\n if (hasText(customerEmailSubject)) data.append(\"customerEmailSubject\", customerEmailSubject);\r\n }\r\n return postHttpClient(data);\r\n};\r\nconst hasText = variable => {\r\n if (variable && variable !== \"\") {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n};\r\nconst getColorAt = ({ file, x, y, Width, Height }) => {\r\n const data = new FormData();\r\n data.append(\"action\", \"colorat\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.design));\r\n data.append(\"file\", file);\r\n data.append(\"x\", x);\r\n data.append(\"y\", y);\r\n data.append(\"width\", Width);\r\n data.append(\"height\", Height);\r\n return postHttpClient(data);\r\n};\r\nconst getCatalogThumb = id => {\r\n return `${domain}/templates/catalogtemplates/${id}.thumb.jpg`;\r\n};\r\nconst getColorTexturePreviewImage = ({ color, colorIndex = 0, collectionName = \"\" }) => {\r\n // return value in css background format\r\n if (colorIndex > 3) colorIndex = 0;\r\n const colorCode = color.substring(1);\r\n const url = `${domain}/Assets/${cacheLocation}/colors/${colorCode}-${collectionName}-${colorIndex}.jpg`;\r\n if (cacheLocation !== \"\") return `url(${url})`;\r\n else return color;\r\n};\r\nconst fetchCatalog = ({ file, props, catalogName, view = \"\" }) => {\r\n const data = new FormData();\r\n data.append(\"action\", \"ordersheet\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n data.append(\"file\", file);\r\n data.append(\"props\", JSON.stringify(props));\r\n data.append(\"catalogname\", catalogName);\r\n data.append(\"view\", view);\r\n return postHttpClient(data).then(data => data.Value);\r\n};\r\nconst DESIGN = \"design\";\r\nconst ROOM = \"room\";\r\nconst fetchList = (listType = DESIGN, folder) => {\r\n if (listType === DESIGN) return AppProvider.fetchDesignList({ folder });\r\n else if (listType === ROOM) return AppProvider.fetchRoomList({});\r\n};\r\nconst getCustomConstructions = () => {\r\n const data = new FormData();\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n data.append(\"action\", \"customconstructions\");\r\n return postHttpClient(data).then(data => {\r\n if (data) return data.map(item => ({ ...item, Num: parseInt(item.Num) }));\r\n else return [];\r\n });\r\n\r\n // data ? data.map(item => ({ ...item, Num: parseInt(item.Num) })) : [])\r\n};\r\n\r\nconst uploadMyRoom = roomImage => {\r\n const data = new FormData();\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n data.append(\"action\", \"uploadmyroom\");\r\n data.append(\"myroom\", roomImage);\r\n return postHttpClient(data);\r\n};\r\nconst uploadMyRoomMask = ({ maskUrl, roomId }) => {\r\n const data = new FormData();\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n data.append(\"action\", \"uploadmyroommask\");\r\n data.append(\"myroommask\", maskUrl);\r\n data.append(\"roomid\", roomId);\r\n return postHttpClient(data);\r\n};\r\nconst getRoomMask = image => {\r\n const data = new FormData();\r\n data.append(\"image\", image);\r\n return new Promise((resolve, reject) => {\r\n return HttpClient.post(myroomServerUrl, data)\r\n .then(response => {\r\n if (response.status === 201) resolve(response.data);\r\n else reject(response.data);\r\n })\r\n .catch(reject);\r\n });\r\n};\r\n\r\nconst getProcessedRoomMask = ({\r\n roomId,\r\n file,\r\n props,\r\n floorpoints,\r\n notfloorpoints,\r\n carpetpoints\r\n}) => {\r\n const data = new FormData();\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n data.append(\"action\", \"processmyroom\");\r\n data.append(\"mode\", \"mask\");\r\n data.append(\"roomid\", roomId);\r\n data.append(\"file\", file);\r\n data.append(\"props\", JSON.stringify(props));\r\n\r\n data.append(\"floorpoints\", JSON.stringify(floorpoints));\r\n data.append(\"notfloorpoints\", JSON.stringify(notfloorpoints));\r\n data.append(\"carpetpoints\", JSON.stringify(carpetpoints));\r\n\r\n return postHttpClient(data, { responseType: \"blob\" });\r\n};\r\n\r\nconst saveAsRoom = ({ mode, roomId, file, props, floorpoints, notfloorpoints, carpetpoints }) => {\r\n const data = new FormData();\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n data.append(\"action\", \"processmyroom\");\r\n data.append(\"mode\", mode);\r\n data.append(\"roomid\", roomId);\r\n data.append(\"file\", file);\r\n data.append(\"props\", JSON.stringify(props));\r\n\r\n data.append(\"floorpoints\", JSON.stringify(floorpoints));\r\n data.append(\"notfloorpoints\", JSON.stringify(notfloorpoints));\r\n data.append(\"carpetpoints\", JSON.stringify(carpetpoints));\r\n\r\n return postHttpClient(data);\r\n};\r\n\r\nconst getDesignThumbnails = ({ designs }) => {\r\n const fullpaths = designs.map(item => item.fullpath);\r\n\r\n let data = new FormData();\r\n data.append(\"action\", \"designthumbs\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.design));\r\n data.append(\"files\", JSON.stringify(fullpaths));\r\n return postWithRetry(data).then(thumbList => {\r\n return designs.map(childFile => {\r\n const item = thumbList.find(item => item.Name === childFile.fullpath);\r\n let add = {};\r\n if (item) {\r\n const hash = MD5(JSON.stringify(item.Props));\r\n const path = processPath(item.Thumb);\r\n add = { Thumb: `${path}?t=${hash}`, Props: item.Props };\r\n cacheLocation = getCacheLocationFromUrl(item.Thumb);\r\n }\r\n return { ...childFile, ...add };\r\n });\r\n });\r\n};\r\nconst getRoomThumbnails = ({ rooms }) => {\r\n const fullpaths = rooms.map(item => item.FullPath);\r\n let data = new FormData();\r\n data.append(\"action\", \"roomthumbs\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.room));\r\n data.append(\"files\", JSON.stringify(fullpaths));\r\n return postWithRetry(data).then(thumbList => {\r\n return rooms.map(room => {\r\n //console.log(thumbList.map(item => item.Name), childFile.FullPath)\r\n const item = thumbList.find(item => item.Name === room.FullPath);\r\n let add = { label: room.Name };\r\n if (item) add = { ...add, Thumb: `${AppProvider.domain}${item.Thumb}`, id: uuid.v4() };\r\n return { ...room, ...add };\r\n });\r\n });\r\n};\r\nconst getRenderedDesign = async ({ designDetails, fullpath, hash, zoom = 1, logoUrl }) => {\r\n const tileSize = 256;\r\n return new Promise((resolve, reject) => {\r\n const { Width, Height } = designDetails;\r\n const canvasWidth = Width * zoom;\r\n const canvasHeight = canvasWidth / (Width / Height);\r\n const canvas = createCanvas(canvasWidth, canvasHeight);\r\n\r\n let xTotal = Math.floor((canvasWidth - 1) / 256) + 1;\r\n let yTotal = Math.floor((canvasHeight - 1) / 256) + 1;\r\n let tilepoints = [];\r\n for (let x = 0; x < xTotal; x++) {\r\n for (let y = 0; y < yTotal; y++) {\r\n tilepoints.push({ x, y, z: zoom, name: convertTilePointToName(x, y) });\r\n }\r\n }\r\n const context = canvas.getContext(\"2d\");\r\n\r\n const fetchDesignCallback = (basePath) => {\r\n let tileImagesLoaded = 0;\r\n tilepoints.forEach((tilePoint, index) => {\r\n const img = document.createElement(\"img\");\r\n img.setAttribute(\"crossOrigin\", \"Anonymous\");\r\n const { name } = tilePoint;\r\n let filename = `${basePath}/${name}.rendered.jpg`;\r\n if (hash && hash !== \"\") {\r\n filename = `${filename}?t=${hash}`;\r\n }\r\n img.src = filename;\r\n tilePoint.image = img;\r\n img.onload = () => {\r\n drawSingleTileInCanvas(index);\r\n\r\n if (tileImagesLoaded + 1 === tilepoints.length) {\r\n\r\n drawWaterMarkIfNeeded();\r\n }\r\n tileImagesLoaded++;\r\n };\r\n });\r\n }\r\n\r\n if (window.InterfaceElements.IsJpeg) {\r\n fetchDesignTiles({\r\n file: fullpath,\r\n zoom: 1,\r\n props: designDetails,\r\n tiles: tilepoints.map(item => item.name)\r\n }).then(fetchDesignCallback);\r\n }\r\n else {\r\n fetchVisualizationTiles({\r\n file: fullpath,\r\n zoom,\r\n props: designDetails,\r\n tiles: tilepoints.map(item => item.name)\r\n }).then(fetchDesignCallback);\r\n }\r\n\r\n const drawSingleTileInCanvas = (index) => {\r\n const tilepoint = tilepoints[index];\r\n context.drawImage(tilepoint.image, tilepoint.x * tileSize, tilepoint.y * tileSize);\r\n }\r\n function drawWaterMarkIfNeeded() {\r\n if (!logoUrl) {\r\n resolve(canvas);\r\n return;\r\n }\r\n readImage(logoUrl).then(logoImage => {\r\n const width = 100 * zoom;\r\n const height = (logoImage.height * width) / logoImage.width;\r\n\r\n const startx = canvasWidth - (width + 15);\r\n const starty = canvasHeight - (height + 15);\r\n context.globalAlpha = 0.5;\r\n context.drawImage(logoImage, startx, starty, width, height);\r\n resolve(canvas);\r\n });\r\n }\r\n });\r\n};\r\nconst readTextureImages = textures => {\r\n // const url = `${domain}/Assets/${cacheLocation}/colors/${colorCode}-${collectionName}-${colorIndex}.jpg`;\r\n const textureImages = textures.map(\r\n item => `${domain}/Assets/${cacheLocation}/textures/${item}.jpg`\r\n );\r\n let promises = [];\r\n textureImages.forEach((textureUrl, index) => {\r\n promises.push(readImage(textureUrl).then(image => ({ image, index: textures[index] })));\r\n });\r\n return Promise.all(promises);\r\n};\r\nconst getStripedDesign = () => {\r\n let data = new FormData();\r\n data.append(\"action\", \"getstripedesign\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n return postHttpClient(data).then(data => `Designs/${data}`);\r\n};\r\nconst saveOnServer = ({ file, name, props }) => {\r\n let data = new FormData();\r\n data.append(\"action\", \"saveonserver\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n data.append(\"file\", file);\r\n if (name) {\r\n data.append(\"name\", name);\r\n data.append(\"copy\", true);\r\n }\r\n data.append(\"props\", JSON.stringify(props));\r\n return postHttpClient(data).then(data => `Designs/${data}`);\r\n};\r\nconst clearCache = ({ mode, files }) => {\r\n if (!mode) console.warn(\"CLEAR CACHE MODE NOT SPECIFIED\");\r\n let data = new FormData();\r\n data.append(\"action\", \"clearcache\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.design));\r\n data.append(\"mode\", mode);\r\n if (files) data.append(\"files\", JSON.stringify(files));\r\n return postHttpClient(data);\r\n};\r\nconst isStripedDesignMode = sessionStorage.getItem(\"mode\") === \"stripedesign\";\r\nconst isEcatMode = sessionStorage.getItem(\"mode\") === \"ecat\";\r\n\r\nconst getInstanceUrl = ({ file, props, view = \"\" }) => {\r\n var data = new FormData();\r\n data.append(\"action\", \"instanceurl\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n data.append(\"file\", file);\r\n data.append(\"view\", view);\r\n data.append(\"props\", JSON.stringify(props));\r\n return postHttpClient(data);\r\n};\r\nconst openFileManager = () => {\r\n window.localStorage.setItem(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n const x = window.location.pathname.split(\"/\").filter(item => item !== \"\");\r\n x.pop();\r\n const urlArr = [window.location.origin, ...x, \"filemanager/index.html\"];\r\n const urlStr = urlArr.join(\"/\");\r\n window.open(urlStr);\r\n};\r\nconst mapColors = ({ props, colorTab }) => {\r\n var data = new FormData();\r\n data.append(\"action\", \"mapcolors\");\r\n data.append(\"key\", getApiKey(AppProvider.keyScopes.master));\r\n data.append(\"tab\", colorTab);\r\n data.append(\"props\", JSON.stringify(props));\r\n return postHttpClient(data);\r\n};\r\n\r\nconst downloadPdf = ({ url, catalogProps, rendereddesign, renderedroom }) => {\r\n var data = new FormData();\r\n data.append(\"action\", \"renderedcatalog\");\r\n data.append(\"template\", 'vps-catalog1');\r\n data.append(\"catalogprops\", JSON.stringify(catalogProps));\r\n data.append(\"rendereddesign\", rendereddesign);\r\n data.append(\"renderedroom\", renderedroom);\r\n return HttpClient.post(url, data).then(response => response.data);\r\n}\r\n\r\nconst AppProvider = {\r\n keys: multiKey,\r\n keyScopes,\r\n activeKey,\r\n setActiveKey,\r\n getApiKey,\r\n fetchApiKey,\r\n fetchDesignList,\r\n fetchColorList,\r\n fetchRoomList,\r\n fetchRoomDetails,\r\n fetchRenderedDesignOrRoom,\r\n publishDesign,\r\n isAuthenticated,\r\n fetchInterfaceElements,\r\n domain,\r\n assetsDomain,\r\n autoLogin,\r\n changeColorCombination,\r\n calculatePriceOfRug,\r\n fetchCustomFieldOrdersheet,\r\n fetchOrderSheet,\r\n downloadCatalog,\r\n sendOrdersheetEmail,\r\n getColorAt,\r\n eCatalogDetails,\r\n getCatalogThumb,\r\n fetchCatalog,\r\n getColorTexturePreviewImage,\r\n fetchList,\r\n getCustomConstructions,\r\n uploadMyRoom,\r\n uploadMyRoomMask,\r\n getRoomMask,\r\n getProcessedRoomMask,\r\n saveAsRoom,\r\n fetchTileDetails,\r\n fetchDesignTiles,\r\n fetchPileTiles,\r\n fetchSilkSheenTiles,\r\n getDesignThumbnails,\r\n getRoomThumbnails,\r\n fetchVisualizationTiles,\r\n getStripedDesign,\r\n getRenderedDesign,\r\n saveOnServer,\r\n isStripedDesignMode,\r\n readTextureImages,\r\n isEcatMode,\r\n clearCache,\r\n getInstanceUrl,\r\n openFileManager,\r\n mapColors,\r\n saveFileLocally,\r\n downloadPdf\r\n};\r\nexport default AppProvider;\r\nconst customFieldsToString = fields => {\r\n let customFieldsString = \"\";\r\n fields.forEach(field => {\r\n customFieldsString = customFieldsString.concat(`${field.fieldName}|${field.fieldValue}|`);\r\n });\r\n return customFieldsString;\r\n};\r\n\r\nexport const getFloor = () => {\r\n const floorDomain = \"https://v3.explorug.com/modules/vpsassets/apps/getjpeglist/default.aspx?folder=onlinevps/floors\";\r\n const floorAssetsDomain = \"https://cdn.virtualrugstudio.com/\";\r\n const floorRelPath = \"OnlineVPS/Floors/\";\r\n return new Promise((resolve, reject) => {\r\n if (!floorsFromServer) {\r\n HttpClient.post(floorDomain).then(response => {\r\n let floorArr = [];\r\n floorArr = response.data.map((eachFloor, index) => {\r\n let config = JSON.parse(eachFloor.config);\r\n let obj = { ...config, path: `${floorAssetsDomain}${floorRelPath}${eachFloor.diffuse}`, thumb: `${floorAssetsDomain}${floorRelPath}${eachFloor.diffuse.replace('.jpg', '.thumb.jpg')}` };\r\n return obj;\r\n })\r\n const returnObj = {\r\n show: false,\r\n floors: floorArr,\r\n activeFloor: floorArr[0]\r\n }\r\n floorsFromServer = returnObj;\r\n resolve(returnObj)\r\n });\r\n }\r\n else {\r\n resolve(floorsFromServer)\r\n }\r\n\r\n })\r\n}\r\n\r\nexport const sendSignIn = ({ type, email, name }) => {\r\n window.userEmail = email;\r\n const url = `https://ramrodesigns.com/virtual-exibition/Social_Media_SignIn.php?sm=${type}&ema=${email}&usr=${name}`\r\n HttpClient.post(url, {})\r\n .then(response => {\r\n\r\n });\r\n}\r\n\r\n// const partial = function (len, x, _end) {\r\n// if (len === 32) { return x; }\r\n// return (_end ? x | 0 : x << (32 - len)) + len * 0x10000000000;\r\n// }\r\n// const toBits = function (bytes) {\r\n// var out = [], i, tmp = 0;\r\n// for (i = 0; i < bytes.length; i++) {\r\n// tmp = tmp << 8 | bytes[i];\r\n// if ((i & 3) === 3) {\r\n// out.push(tmp);\r\n// tmp = 0;\r\n// }\r\n// }\r\n// if (i & 3) {\r\n// out.push(partial(8 * (i & 3), tmp));\r\n// }\r\n// return out;\r\n// }\r\n\r\n//colorhex-tabName-materialIndex\r\n//tabname==null?\"\"\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nconst AtIcon = props => {\r\n const { icon, size = 1.5, className = \"\", color = \"\", ...otherprops } = props;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n// export const CollapseIcon = props => {\r\n// const { isOpen } = props;\r\n// return (\r\n// \r\n// );\r\n// };\r\nAtIcon.propTypes = {\r\n icon: PropTypes.string,\r\n size: PropTypes.number,\r\n className: PropTypes.string,\r\n color: PropTypes.string\r\n};\r\nexport default AtIcon;\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { H6, Tooltip } from \"@blueprintjs/core\";\r\nimport AtIcon from \"../AtIcon\";\r\nimport classNames from \"classnames\";\r\n\r\nconst AtButton = props => {\r\n const {\r\n intent,\r\n icon,\r\n children,\r\n className,\r\n onClick,\r\n tertiary,\r\n disabled,\r\n minimal,\r\n text,\r\n active,\r\n small,\r\n tooltip,\r\n tooltipProps,\r\n ...otherProps\r\n } = props;\r\n const btnClassNames = () =>\r\n classNames(\r\n \"at-button\",\r\n {\r\n [`at-intent-${intent}`]: intent,\r\n \"at-minimal\": minimal,\r\n \"at-disabled\": disabled,\r\n icon: icon,\r\n \"at-tertiary\": tertiary,\r\n \"at-active\": active,\r\n \"at-small\": small\r\n },\r\n className\r\n );\r\n\r\n const renderButton = (\r\n {\r\n e.stopPropagation();\r\n }}\r\n >\r\n {icon && }\r\n {text &&
{text}
}\r\n {children}\r\n \r\n );\r\n return tooltip ? (\r\n \r\n {renderButton}\r\n \r\n ) : (\r\n renderButton\r\n );\r\n};\r\n\r\nAtButton.propTypes = {\r\n intent: PropTypes.oneOf([\"primary\", \"secondary\", \"tertiary\", \"ghost\", \"danger\"]),\r\n size: PropTypes.oneOf([\"small\", \"medium\", \"large\"]),\r\n className: PropTypes.string,\r\n tertiary: PropTypes.bool,\r\n active: PropTypes.bool,\r\n text: PropTypes.string\r\n};\r\nAtButton.defaultProps = {\r\n size: \"medium\",\r\n className: \"\",\r\n tertiary: false,\r\n active: false\r\n};\r\nexport default AtButton;\r\n","import React, { useEffect, useState } from \"react\";\r\n\r\nconst Fade = ({ show, children, className }) => {\r\n const [render, setRender] = useState(show);\r\n\r\n useEffect(() => {\r\n if (show) setRender(true);\r\n }, [show]);\r\n\r\n const onAnimationEnd = () => {\r\n if (!show) setRender(false);\r\n };\r\n\r\n return (\r\n render && (\r\n \r\n {children}\r\n \r\n )\r\n );\r\n};\r\n\r\nexport default Fade;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst AtSpinner = props => {\r\n const { className, size = \"lg\" } = props;\r\n return
;\r\n};\r\nconst AtSpinnerOverlay = props => {\r\n const { show } = props;\r\n const [render, setRender] = useState(show);\r\n\r\n useEffect(() => {\r\n if (show) setRender(true);\r\n }, [show]);\r\n\r\n const onAnimationEnd = () => {\r\n if (!show) setRender(false);\r\n };\r\n\r\n return (\r\n render && (\r\n \r\n {show && }\r\n \r\n )\r\n );\r\n};\r\nAtSpinner.propTypes = {\r\n className: PropTypes.string\r\n};\r\nAtSpinner.defaultProps = {\r\n className: \"\"\r\n};\r\n// const DebouncedAtSpinnerOverlay = debounceRender(AtSpinnerOverlay, 1000);\r\n\r\nexport { AtSpinner, AtSpinnerOverlay };\r\n","import React, { useState } from \"react\";\r\nimport { InputGroup, H3, FormGroup, Card, H6, H4 } from \"@blueprintjs/core\";\r\nimport AppProvider from \"../../../api/appProvider\";\r\nimport AtButton from \"../../atoms/AtButton\";\r\nimport ReactDelayRender from \"react-delay-render\";\r\nimport Fade from \"../../higher-order-components/Fade\";\r\nimport { AtSpinner } from \"../../atoms/AtSpinner\";\r\n\r\nconst LoginPage = props => {\r\n const [username, setUserName] = useState(\"\");\r\n const [password, setPassword] = useState(\"\");\r\n const [isError, setIsError] = useState(false);\r\n const [isSigningIn, setisSigningIn] = useState(false);\r\n // function validateForm() {\r\n // return username.length > 0 && password.length > 0;\r\n // }​\r\n function handleSubmit(event) {\r\n event.preventDefault();\r\n setisSigningIn(true);\r\n\r\n AppProvider.fetchApiKey({ username, password })\r\n .then(key => {\r\n if (!key) {\r\n setIsError(true);\r\n setisSigningIn(false);\r\n } else {\r\n //replace forcelogin param if present and reload\r\n // window.history.replaceState &&\r\n // window.history.replaceState(\r\n // null,\r\n // \"\",\r\n // window.location.pathname +\r\n // window.location.search.replace(/[?&]forcelogin+/, \"\").replace(/^&/, \"?\")\r\n // );\r\n window.location.href =\r\n window.location.pathname +\r\n window.location.search.replace(/[?&]forcelogin+/, \"\").replace(/^&/, \"?\");\r\n // window.location.reload();\r\n }\r\n })\r\n .catch(err => {\r\n setIsError(true);\r\n setisSigningIn(false);\r\n });\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n

A refreshed experience

\r\n

\r\n exploRUG now provides a better experience for your clients.\r\n
\r\n Besides the look and the features, this update also has significant performance\r\n improvements.\r\n

\r\n \r\n window.open(\r\n \"https://alternativetechnology.zendesk.com/hc/en-us/articles/900001316283-exploRUG-v3-Walkthrough\"\r\n )\r\n }\r\n />\r\n
\r\n
\r\n
\r\n
\r\n \r\n

\r\n Sign in to your explorug\r\n

\r\n
\r\n \r\n setUserName(e.target.value)}\r\n autoFocus\r\n onFocus={e => e.target.select()}\r\n />\r\n \r\n \r\n setPassword(e.target.value)}\r\n onFocus={e => e.target.select()}\r\n />\r\n \r\n \r\n
\r\n Please recheck your username and password\r\n
\r\n
\r\n \r\n \r\n
\r\n {isSigningIn ? \"Signing in\" : \"Sign in\"}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\nexport default ReactDelayRender({ delay: 0 })(LoginPage);\r\n","import uuid from \"uuid\";\r\n// import testTree from \"./testtree.json\";\r\n\r\nexport const getPathOffile = (fileFullPath) => {\r\n const sp = fileFullPath.split(\"/\");\r\n sp.pop();\r\n return \"/\" + sp.join(\"/\");\r\n}\r\nconst getParentFolder = fullpath => {\r\n const pathArray = fullpath.split(\"/\").filter(a => a !== null && a !== \"\");\r\n return { parentFolder: pathArray[pathArray.length - 2], path: pathArray.slice(0, pathArray.length - 2).join(\"/\") };\r\n}\r\nconst isSimilarFile = (filePath, file) => {\r\n const { parentFolder, path } = getParentFolder(filePath);\r\n return file.label === parentFolder.substr(1) && getPathOffile(file.fullpath) === `/${path}`;\r\n}\r\nconst partitionArray = (array, isValid) =>\r\n array.reduce(([pass, fail], elem) => {\r\n return isValid(elem) ? [[...pass, elem], fail] : [pass, [...fail, elem]];\r\n }, [[], []]);\r\n\r\n//defaultitempath can be folder path or file path\r\nexport function arrangeIntoTree({ files, folders, defaultItemPath, setActiveItem = true }) {\r\n\r\n //ignore RUGshared folder\r\n const filterRugshared = arr => arr.filter(item => !item.FullPath.split(\"/\").includes(\"RUGShared\"));\r\n files = filterRugshared(files);\r\n folders = filterRugshared(folders);\r\n\r\n // ignore files whose parents have \".\"\" as first char\r\n const [notSimilarFiles, similarFiles] = partitionArray(files, item => getParentFolder(item.FullPath).parentFolder.charAt(0) !== \".\");\r\n\r\n // ignore folders starting with . as first char\r\n folders = folders.filter(item => item.Name.charAt(0) !== \".\")\r\n\r\n files = notSimilarFiles.map(item => {\r\n return {\r\n id: uuid.v4(),\r\n label: item.Name,\r\n fullpath: item.FullPath,\r\n path: getPathOffile(item.FullPath),\r\n isExpanded: false,\r\n childNodes: [],\r\n hasCaret: false,\r\n type: \"file\",\r\n similarItems: similarFiles.filter(s => isSimilarFile(s.FullPath, { fullpath: item.FullPath, label: item.Name })).map(item => {\r\n return {\r\n label: item.Name,\r\n fullpath: item.FullPath,\r\n path: getPathOffile(item.FullPath),\r\n }\r\n })\r\n };\r\n });\r\n let defaultItem;\r\n if (defaultItemPath)\r\n defaultItem = files.find(item => item.fullpath.toLowerCase() === defaultItemPath.toLowerCase());\r\n if (!defaultItem) {\r\n const rootFiles = files.filter(file => file.path === \"/Designs\")\r\n if (!rootFiles.length)\r\n defaultItem = files[0]\r\n else\r\n defaultItem = rootFiles[0]\r\n files = [...rootFiles, ...files.slice(0, files.length - rootFiles.length)]\r\n }\r\n let pathsArray = folders.map(path => path.FullPath.split(\"/\"));\r\n let openNode;\r\n\r\n //eta bata recursively tree banauna suru hunxa\r\n let tree = [];\r\n pathsArray.forEach(path => {\r\n let currentLevel = tree;\r\n let fullpath = \"\";\r\n path.forEach((part, index) => {\r\n let existingPath = findWhere(currentLevel, \"label\", part);\r\n if (fullpath === \"\") {\r\n fullpath = part;\r\n } else {\r\n fullpath = fullpath + \"/\" + part;\r\n }\r\n if (existingPath) {\r\n currentLevel = existingPath.childNodes;\r\n } else {\r\n const fp = `/${fullpath}`;\r\n const designsInFolder = files.filter(item => item.path === fp)\r\n const isExpanded = defaultItem && defaultItem.path.split(\"/\").includes(part.valueOf());\r\n const isSelected = setActiveItem && defaultItem && defaultItem.path === fp;\r\n let newPart = {\r\n id: uuid.v4(),\r\n label: part.valueOf(),\r\n fullpath: fp,\r\n isExpanded,\r\n isSelected,\r\n childNodes: [],\r\n hasCaret: true,\r\n type: \"folder\",\r\n filesInNode: designsInFolder,\r\n showThumbnails: designsInFolder.find(item => item.id === defaultItem.id),\r\n level: index,\r\n thumbsLength: 0\r\n };\r\n if (defaultItem && defaultItem.path === fp) {\r\n openNode = newPart;\r\n }\r\n currentLevel.push(newPart);\r\n currentLevel = newPart.childNodes;\r\n }\r\n });\r\n });\r\n if (defaultItemPath) {\r\n if (defaultItemPath.charAt(0) !== \"/\")\r\n defaultItemPath = `/${defaultItemPath}`\r\n //will return true if folder with same fullpath is found\r\n const ftree = findItemNested(tree, defaultItemPath, \"fullpath\");\r\n if (ftree) {\r\n ftree.isExpanded = true;\r\n ftree.isSelected = true;\r\n ftree.showThumbnails = true;\r\n tree = [ftree]\r\n defaultItem = ftree.filesInNode[0]\r\n openNode = ftree\r\n }\r\n }\r\n\r\n return { tree, defaultItem, openNode, flatfileList: files };\r\n}\r\n\r\nfunction findWhere(array, key, value) {\r\n let t = 0;\r\n while (t < array.length && array[t][key] !== value) {\r\n t++;\r\n }\r\n if (t < array.length) {\r\n return array[t];\r\n } else {\r\n return false;\r\n }\r\n}\r\nexport const findItemNested = (arr, itemId, key = \"id\", nestingKey = \"childNodes\") => {\r\n return arr.reduce((a, item) => {\r\n if (a) return a;\r\n if (item[key].toLowerCase() === itemId.toLowerCase()) return item;\r\n if (item[nestingKey])\r\n return findItemNested(item[nestingKey], itemId, key, nestingKey);\r\n return a\r\n }, null);\r\n}\r\n\r\n// export const findItemNested = (arr, itemId, key = \"id\", nestingKey = \"childNodes\") => {\r\n// // console.log(arr)\r\n// return arr.reduce((a, item) => {\r\n// if (a) return a;\r\n// if (item[key] === itemId) return item;\r\n// if (item[nestingKey])\r\n// return findItemNested(item[nestingKey], itemId, key, nestingKey);\r\n// return a\r\n// }, null);\r\n// }\r\nexport const updateElementOfTree = (array, ids, key, value) => {\r\n const arr = [...array]\r\n arr.forEach(function iter(a) {\r\n if (ids.includes(a.id)) {\r\n a[key] = value;\r\n }\r\n Array.isArray(a.childNodes) && a.childNodes.forEach(iter);\r\n });\r\n return arr;\r\n};\r\nexport const updateNode = (array, node) => {\r\n const arr = [...array]\r\n arr.forEach(function iter(a) {\r\n if (node.id === a.id) {\r\n a.filesInNode = node.filesInNode;\r\n }\r\n Array.isArray(a.childNodes) && a.childNodes.forEach(iter);\r\n });\r\n return arr\r\n};\r\nexport const updateSimilarFilesOfNode = (array, node) => {\r\n const arr = [...array]\r\n arr.forEach(function iter(a) {\r\n a.filesInNode.forEach(fileNode => {\r\n if (node.id === fileNode.id) {\r\n fileNode.similarItems = node.similarItems;\r\n }\r\n })\r\n Array.isArray(a.childNodes) && a.childNodes.forEach(iter);\r\n });\r\n return arr\r\n}\r\nexport const updateSingleFileProp = (array, node, newid) => {\r\n const arr = [...array]\r\n arr.forEach(function iter(a) {\r\n a.filesInNode.forEach(fileNode => {\r\n if (node.id === fileNode.id) {\r\n fileNode.Thumb = node.Thumb;\r\n fileNode.Props = node.Props;\r\n if(newid){\r\n fileNode.id = newid;\r\n\r\n }\r\n }\r\n })\r\n Array.isArray(a.childNodes) && a.childNodes.forEach(iter);\r\n });\r\n return arr\r\n}\r\nexport const searchFiles = (arr, searchKey) => {\r\n let result = [];\r\n arr.forEach(function iter(a) {\r\n a.filesInNode.forEach(fileNode => {\r\n if (fileNode.label.toLowerCase().indexOf(searchKey.toLowerCase()) !== -1) result.push({ ...fileNode, parent: a })\r\n })\r\n Array.isArray(a.childNodes) && a.childNodes.forEach(iter);\r\n });\r\n return result;\r\n}\r\nexport const expandTreeNode = (arr, node) => {\r\n arr.forEach(function iter(a, index) {\r\n a.isSelected = a.fullpath === node.fullpath;\r\n if (a.level >= node.level) {\r\n a.isExpanded = false;\r\n }\r\n a.showThumbnails = false;\r\n if (node.id === a.id) {\r\n a.isExpanded = true;\r\n a.showThumbnails = true;\r\n }\r\n Array.isArray(a.childNodes) && a.childNodes.forEach(iter);\r\n });\r\n return arr\r\n}\r\nexport const expandTreeNodeByPath = (arr, path) => {\r\n arr.forEach(function iter(a, index) {\r\n const isEqual = a.fullpath === path\r\n a.isSelected = isEqual\r\n a.isExpanded = isEqual\r\n a.showThumbnails = isEqual\r\n // if (a.level >= node.level) {\r\n // a.isExpanded = false;\r\n // }\r\n // a.showThumbnails = false;\r\n // if (node.id === a.id) {\r\n // a.isExpanded = true;\r\n // a.showThumbnails = true;\r\n // }\r\n Array.isArray(a.childNodes) && a.childNodes.forEach(iter);\r\n });\r\n return arr\r\n}\r\nexport const updateEveryElementOfTree = (array, key, value) => {\r\n const arr = [...array]\r\n arr.forEach(function iter(a, index) {\r\n a[key] = value;\r\n Array.isArray(a.childNodes) && a.childNodes.forEach(iter);\r\n });\r\n return arr\r\n};\r\nexport const findPrevNext = (array, node) => {\r\n const arr = [...array]\r\n let prev, next;\r\n arr.forEach(function iter(a, index, aParent) {\r\n a.filesInNode.forEach((fileInNode, i) => {\r\n if (node.id === fileInNode.id) {\r\n prev = a.filesInNode[i - 1]\r\n next = a.filesInNode[i + 1]\r\n if (i === 0) {// current node is the first item\r\n if (index === 0) {\r\n prev = node\r\n } else {\r\n const prevFolder = aParent.childNodes[index - 1];\r\n prev = prevFolder.filesInNode[prevFolder.filesInNode.length - 1] //last item of previous folder\r\n\r\n }\r\n }\r\n if (i >= a.filesInNode.length - 1) {//current node is the last item\r\n if (index >= aParent.childNodes.length - 1) {\r\n next = node\r\n } else {\r\n const nextFolder = aParent.childNodes[index + 1];\r\n // const nextFolder = a[index + 1];\r\n next = nextFolder.filesInNode[0]//first item of next folder\r\n\r\n }\r\n }\r\n }\r\n })\r\n Array.isArray(a.childNodes) && a.childNodes.forEach((x, i) => iter(x, i, a));\r\n });\r\n return { prev, next }\r\n}\r\nexport const getSimilarDesigns = (designlist, design) => {\r\n const files = designlist.filter(item => item.Type === \"file\")\r\n const similarFiles = files.filter(s => isSimilarFile(s.FullPath, design)).map(item => {\r\n return {\r\n label: item.Name,\r\n fullpath: item.FullPath,\r\n path: getPathOffile(item.FullPath),\r\n }\r\n })\r\n return similarFiles\r\n}","export const colorNumberModes = {\r\n NONE: 0,\r\n NUMERIC: 1,\r\n ALPHA: 2\r\n};\r\nexport const CurrencyFormat = {\r\n None: 0,\r\n US: 1,\r\n EU: 2\r\n};\r\nexport const mode = {\r\n None: 0,\r\n Both: 1, //Both admin and the multiple account\r\n OnlyAdmin: 2\r\n};\r\nexport const flaginCurrentMode = (isAdmin, flag) => {\r\n let flagStatus = false;\r\n if (isAdmin && flag !== mode.None) {\r\n flagStatus = true;\r\n } else if (!isAdmin && flag == mode.Both) {\r\n flagStatus = true;\r\n }\r\n return flagStatus;\r\n};\r\nexport const defaultFlags = {\r\n colorSeparatedTexture: true, //individual texture for individual colors\r\n showColorPercentage: true, //show percentage of color in color swatch\r\n hasOrderSheet: true, //if false order sheet will not be shown\r\n defaultQualityIndex: 0, //index for rug quality\r\n defaultStandardSize: 0,\r\n defaultUnit: null, //default unit for rug (ft or cm).\r\n hasRugshare: false,\r\n hasHoverZoom: false, //zoom design/illustration on hover\r\n hasArp: false, //augmented rug presentation\r\n showCopyright: true, //show copyright text?\r\n hasVps: true,\r\n showAddToCart: false,\r\n showSaveImage: true, // download image feature\r\n applyColorPaletteinSameFolder: false, //color and material changes in a design is applied to other same folder designs (example in dalyn rugs)\r\n applyColorPaletteinVariations: false, //color and material changes in a design is applied to other same designs variations (example in dalyn rugs)\r\n hasMasterCarving: mode.Both,\r\n designThumbsAsBg: mode.None,\r\n fullPageThumb: mode.None, //true for showing as default screen, \"SET\" for loading from button null/false for hiding\r\n showAllDesignsButton: mode.None,\r\n showWarningInfoInFooter: false, //show warning text in footer when colors from different palette are selected (eg: flipo)\r\n designBrowser: {\r\n showCurrentOpenFolder: false\r\n },\r\n rugshare: {\r\n socialMediaShareDescription: \"\",\r\n shareCustomizedDesign: false\r\n },\r\n colorCustomizationTools: {\r\n showColorCustomizationTools: false, //for multiple accounts\r\n showMapColors: false, //mapcolors is shown in admin by default. Showmapcolors == true for multiple accounts\r\n addShuffleColors: false,\r\n addColorPercentToggle: false,\r\n addAutocolor: false\r\n },\r\n colorSelectionBox: {\r\n showColorName: false,\r\n showSimilarColors: true,\r\n showColorFilter: true,\r\n showCarving: mode.None, // individual carving\r\n customColorOptions: [], //to choose from color wheel,\r\n collectionFilter: [], // show color collection and width in ordersheet according to folder. Has folder, collection, width list\r\n swatchSize: 2,\r\n colorPaletteLabels: {\r\n colorLabelInfo: \"\", // appears inside dialog box\r\n labelTemplate: \"\",\r\n labels: [],\r\n colorLabelFilter: []\r\n }\r\n },\r\n visualizations: {\r\n defaultView: \"DESIGN_VIEW_DEEPZOOM\", //DESIGN_VIEW_DEEPZOOM or ROOM_VIEW\r\n designViews: [\"DESIGN_VIEW_DEEPZOOM\"],\r\n myRoomEnabled: true,\r\n showIcebreakerinMyroom: true\r\n },\r\n designView: {\r\n minZoom: 0.75,\r\n maxZoom: 3,\r\n defaultZoom: 2,\r\n wallToWallLockAxis: null, //null, x, y\r\n hasDesignWaterMark: false,\r\n dpi: 1\r\n },\r\n designDetailSection: {\r\n isCollapsible: false,\r\n showDesignPathInTitle: false,\r\n showSizeSelection: true,\r\n showDesignDimensions: true,\r\n showAddToFavoriteText: false\r\n },\r\n designVariations: {\r\n appendDesignName: true, //appends design name to variation name if true\r\n sayOriginal: true\r\n },\r\n colorAreaSwatch: {\r\n hasMixply: mode.None, // allow mixply in multiple accounts\r\n showColorPercentage: true, //show percentage of color in color swatch\r\n colorNumberMode: colorNumberModes.NONE,\r\n showRedoButton: false,\r\n shape: \"CIRCLE\", //\"RECTANGLE_H\", \"SQUARE\", \"RECTANGLE_V\",\r\n // mixPlyOptions: [\r\n // { ply: 1, text: \"Single Color\" },\r\n // { ply: 2, text: \"2-Ply\" },\r\n // { ply: 3, text: \"3-Ply\" },\r\n // { ply: 4, text: \"4-Ply\" }\r\n // ]\r\n mixPlyOptions: [\r\n { ply: 1, text: \"Single Color\" },\r\n { ply: 3, text: \"Mix Ply\" }\r\n ],\r\n sameColorLock: false,\r\n exclusiveMatArr: [] // [0, 1] if mat 0 and 1 are exclusive. [[0,1],2] if 0,1 can appear together but not with 2.\r\n },\r\n language: {\r\n langOptions: [], //languages to allow switching //{ val: \"en\", text: \"EN\" } format\r\n strings: {} //strings to overwrite\r\n },\r\n ordersheet: {\r\n showRugSizeInOrderForm: true,\r\n currencyFormat: CurrencyFormat.NONE,\r\n populateRugSize: true, // width and height is left blank when it's false\r\n changeableUnits: true, // unit is always set to defaultUnit when it's false\r\n strInPrice: \"SILK\", //String to show instead of price eg: in hollyhunt, silk % (100% SILK) is shown instead of price ($100)\r\n autoPopulateFields: [], //[\"Shape\"] list name of ordersheet field you need to populate dynamically and add condition in getCustomFieldValue() function in ordersheet/index file\r\n roundOffToFtOrCm: false,\r\n roundOffToNearestHalf: false,\r\n addedCustomFields: []\r\n },\r\n email: {\r\n setCustomEmail: false,\r\n customerEmailBody: null,\r\n customerEmailSubject: null, //'test customer email subject',\r\n customerEmailFromAddress: null,\r\n companyEmailBody: null, //test company email body',\r\n companyEmailSubject: null, //'test company email subject',\r\n companyEmailFromAddress: null\r\n }\r\n};\r\n","import convert from \"convert-units\";\r\nimport { colorNumberModes } from \"../components/pages/EntryPage/defaultflags\";\r\nimport React from \"react\";\r\nimport { MD5 } from \"../utils/md5\";\r\nimport { getPathOffile } from \"../utils/arrayUtils\";\r\n\r\nconst StateContext = React.createContext();\r\nconst DispatchContext = React.createContext();\r\n\r\nconst SET_DETAILS = \"SET_DETAILS\";\r\nconst SET_TILE_DETAILS = \"SET_TILE_DETAILS\";\r\nconst SET_DETAILS_ONLY = \"SET_DETAILS_ONLY\";\r\nconst SELECT_DESIGN_COLOR = \"SELECT_DESIGN_COLOR\";\r\nconst CHANGE_COLOR = \"CHANGE_COLOR\";\r\nconst SET_DESIGN_PATH = \"SET_DESIGN_PATH\";\r\nconst CHANGE_TEXTURE = \"CHANGE_DESIGN_TEXTURE\";\r\nconst CHANGE_COLOR_TEXTURE = \"CHANGE_DESIGN_COLOR_TEXTURE\";\r\nconst CHANGE_COLOR_PALETTE = \"CHANGE_COLOR_PALETTE\";\r\nconst UNDO_COLOR_SELECTION = \"UNDO_COLOR_SELECTION\";\r\nconst REDO_COLOR_SELECTION = \"REDO_COLOR_SELECTION\";\r\nconst RESET_COLOR_SELECTION = \"RESET_COLOR_SELECTION\";\r\nconst SET_ORDER_PROPERTIES = \"SET_ORDER_PROPERTIES\";\r\nconst CHANGE_PILE = \"CHANGE_PILE\";\r\nconst CHANGE_COLOR_SCHEME = \"CHANGE_COLOR_SCHEME\";\r\nconst SET_LOADING = \"SET_LOADING\";\r\nconst SET_CUSTOMIZATION_FLAG = \"SET_CUSTOMIZATION_FLAG\";\r\nconst TOGGLE_COLOR_CARVING = \"TOGGLE_COLOR_CARVING\";\r\nconst MIX_PLY = \"MIX_PLY\";\r\nconst CHANGE_YARN_COLOR = \"CHANGE_YARN_COLOR\";\r\nconst SELECT_YARN = \"SELECT_YARN\";\r\nconst CHANGE_YARN_MATERIAL = \"CHANGE_YARN_MATERIAL\";\r\nconst SET_CUSTOSCOUT_COORDS = \"SET_CUSTOSCOUT_COORDS\";\r\nconst TOOGLE_CUSTOSCOUT = \"TOOGLE_CUSTOSCOUT\";\r\nconst SET_AVAIL_SIZES = \"SET_AVAIL_SIZES\";\r\nconst SELECT_ILLU_SIZE = \"SELECT_ILLU_SIZE\";\r\n\r\nconst designDetailActions = {\r\n SET_DETAILS,\r\n SET_DETAILS_ONLY,\r\n CHANGE_COLOR,\r\n SELECT_DESIGN_COLOR,\r\n SET_DESIGN_PATH,\r\n CHANGE_TEXTURE,\r\n CHANGE_COLOR_PALETTE,\r\n UNDO_COLOR_SELECTION,\r\n REDO_COLOR_SELECTION,\r\n RESET_COLOR_SELECTION,\r\n SET_ORDER_PROPERTIES,\r\n CHANGE_PILE,\r\n CHANGE_COLOR_TEXTURE,\r\n CHANGE_COLOR_SCHEME,\r\n SET_LOADING,\r\n SET_TILE_DETAILS,\r\n SET_CUSTOMIZATION_FLAG,\r\n TOGGLE_COLOR_CARVING,\r\n MIX_PLY,\r\n CHANGE_YARN_COLOR,\r\n CHANGE_YARN_MATERIAL,\r\n SELECT_YARN,\r\n SET_CUSTOSCOUT_COORDS,\r\n TOOGLE_CUSTOSCOUT,\r\n SET_AVAIL_SIZES,\r\n SELECT_ILLU_SIZE,\r\n};\r\nconst designDetailState = {\r\n loading: true,\r\n designDetails: {},\r\n designName: null,\r\n currentDesignPath: null,\r\n fullpath: null,\r\n selectedColor: -1,\r\n customizationFlag: false,\r\n history: [],\r\n undoHistory: [],\r\n totalKnots: null,\r\n tileDetails: null,\r\n hash: null,\r\n updateDesignTiles: null,\r\n updateNormapTiles: null,\r\n yarnIndex: -1,\r\n custoScout: {\r\n show: false,\r\n designPoint: null,\r\n containerPoint: null\r\n },\r\n carvingColorsIndex: []\r\n};\r\nconst designDetailReducer = (state, action) => {\r\n // console.log(action.type, action.payload)\r\n switch (action.type) {\r\n case SET_DETAILS:\r\n const details = normalizeUnit({\r\n ...action.payload.designDetails,\r\n defaultUnit: window.flags.defaultUnit\r\n });\r\n let designColorsPalette = action.payload.designDetails.DesignColors || [];\r\n if (window.flags.applyColorPaletteinVariations) {\r\n window.sessionStorage.removeItem(\"ParentFolder\");\r\n window.sessionStorage.removeItem(\"DesignColors\");\r\n }\r\n //if session storage ma xa vane designdetains.DesignColors && getPathOffile (state.fullpath)=== (session ko path)\r\n if (window.flags.applyColorPaletteinSameFolder && state.fullpath) {\r\n const ParentFolder = window.sessionStorage.getItem(\"ParentFolder\");\r\n const DesignColors = window.sessionStorage.getItem(\"DesignColors\");\r\n if (getPathOffile(state.fullpath) === ParentFolder && DesignColors) {\r\n designColorsPalette = JSON.parse(DesignColors);\r\n }\r\n }\r\n const designDetails = {\r\n ...action.payload.designDetails,\r\n ...details,\r\n OrderProperties: {\r\n QualityIndex: window.flags.defaultQualityIndex\r\n },\r\n DesignColors: designColorsPalette\r\n };\r\n return {\r\n ...state,\r\n designDetails,\r\n history: [],\r\n totalKnots: designDetails.DesignColors.map(c => c.Knots).reduce((a, b) => a + b, 0),\r\n colorNumbers: updateColorNumbers(designDetails.DesignColors),\r\n selectedColor: -1,\r\n currentDesignPath: action.payload.customizationFlag ? null : \"\",\r\n fullpath: action.payload.fullpath,\r\n designName: action.payload.label,\r\n updateDesignTiles: null,\r\n updateNormapTiles: null,\r\n customizationFlag: action.payload.customizationFlag,\r\n hash: action.payload.hash\r\n ? action.payload.hash\r\n : generateHash(designDetails, action.payload.fullpath),\r\n carvingColorsIndex: getCarvingColorNumbers(designDetails.DesignColors)\r\n };\r\n case SET_TILE_DETAILS:\r\n return setTileDetails(state, action.payload);\r\n case SELECT_DESIGN_COLOR:\r\n return { ...state, selectedColor: action.payload };\r\n case CHANGE_COLOR:\r\n return changeDesignColor(state, action.payload);\r\n case CHANGE_COLOR_PALETTE:\r\n return changeColorPalette(state, action.payload);\r\n\r\n case UNDO_COLOR_SELECTION:\r\n if (!state.history.length) return state;\r\n return undoDesignColor(state);\r\n case REDO_COLOR_SELECTION:\r\n return state;\r\n case RESET_COLOR_SELECTION:\r\n if (!state.history.length) return state;\r\n return {\r\n ...state,\r\n designDetails: state.history[0].designDetails,\r\n updateDesignTiles: null,\r\n updateNormapTiles: null,\r\n hash: state.history[0].hash,\r\n history: []\r\n };\r\n case SET_DESIGN_PATH:\r\n return { ...state, currentDesignPath: action.payload };\r\n case CHANGE_TEXTURE:\r\n return {\r\n ...state\r\n };\r\n case CHANGE_COLOR_TEXTURE:\r\n return changeColorMaterial(state, action.payload);\r\n case CHANGE_PILE:\r\n return changeColorPile(state, action.payload);\r\n case CHANGE_COLOR_SCHEME:\r\n return changeColorScheme(state, action.payload);\r\n case SET_LOADING:\r\n if (state.loading === action.payload) return state;\r\n return { ...state, loading: action.payload };\r\n case SET_CUSTOMIZATION_FLAG:\r\n return { ...state, customizationFlag: action.payload };\r\n case TOGGLE_COLOR_CARVING:\r\n return toggleCarving(state, action.payload);\r\n case MIX_PLY:\r\n return mixPly(state, action.payload);\r\n case CHANGE_YARN_COLOR:\r\n return changeYarnColor(state, action.payload);\r\n case CHANGE_YARN_MATERIAL:\r\n return changeYarnMaterial(state, action.payload);\r\n case SELECT_YARN:\r\n return {\r\n ...state,\r\n yarnIndex: action.payload.yarnIndex,\r\n selectedColor: action.payload.colorIndex\r\n };\r\n case SET_CUSTOSCOUT_COORDS:\r\n return {\r\n ...state,\r\n custoScout: {\r\n ...state.custoScout,\r\n designPoint: action.payload.designPoint,\r\n containerPoint: action.payload.containerPoint\r\n }\r\n };\r\n case TOOGLE_CUSTOSCOUT:\r\n return {\r\n ...state,\r\n custoScout: {\r\n ...state.custoScout,\r\n show: action.payload\r\n }\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst changeDesignColor = (state, payload) => {\r\n const { designDetails, selectedColor, updateDesignTiles, updateNormapTiles, hash } = state;\r\n const colorDetail = payload;\r\n const d = JSON.parse(JSON.stringify({ ...designDetails }));\r\n const colorMaterial = parseInt(colorDetail.Texture);\r\n d.DesignColors[selectedColor].Color = colorDetail.Color;\r\n d.DesignColors[selectedColor].ColorName = colorDetail.ColorName;\r\n d.DesignColors[selectedColor].AssociatedMat = colorDetail.Texture;\r\n if (colorMaterial !== -1) {\r\n d.DesignColors[selectedColor].Material = colorMaterial;\r\n d.DesignColors[selectedColor].YarnDetails.forEach(yarn => {\r\n yarn.Material = colorMaterial;\r\n });\r\n }\r\n d.DesignColors[selectedColor].YarnDetails[0].Color = colorDetail.Color;\r\n d.DesignColors[selectedColor].YarnDetails[0].ColorName = colorDetail.ColorName;\r\n d.DesignColors[selectedColor].YarnDetails[0].AssociatedMat = colorDetail.Texture;\r\n\r\n //set in session storage\r\n if (window.flags.applyColorPaletteinSameFolder || window.flags.applyColorPaletteinVariations) {\r\n const DesignColors = d.DesignColors;\r\n const ParentFolder = getPathOffile(state.fullpath);\r\n window.sessionStorage.setItem(\"ParentFolder\", ParentFolder);\r\n window.sessionStorage.setItem(\"DesignColors\", JSON.stringify(DesignColors));\r\n }\r\n if (window.flags.colorAreaSwatch.sameColorLock) {\r\n const origDesignColors = state.history.length\r\n ? state.history[0].designDetails.DesignColors\r\n : designDetails.DesignColors;\r\n origDesignColors.forEach((color, index) => {\r\n if (index === selectedColor) return;\r\n if (color.YarnDetails[0].Color === origDesignColors[selectedColor].YarnDetails[0].Color) {\r\n console.log(\r\n \"changeDesignColor -> \",\r\n color.YarnDetails[0].Color,\r\n origDesignColors[selectedColor].YarnDetails[0].Color\r\n );\r\n d.DesignColors[index].Color = colorDetail.Color;\r\n d.DesignColors[index].ColorName = colorDetail.ColorName;\r\n d.DesignColors[index].YarnDetails[0].Color = colorDetail.Color;\r\n d.DesignColors[index].YarnDetails[0].ColorName = colorDetail.ColorName;\r\n d.DesignColors[index].YarnDetails[0].AssociatedMat = colorDetail.Texture;\r\n\r\n if (colorMaterial !== -1) {\r\n d.DesignColors[index].Material = colorMaterial;\r\n d.DesignColors[index].YarnDetails.forEach(yarn => {\r\n yarn.Material = colorMaterial;\r\n });\r\n }\r\n }\r\n });\r\n }\r\n return {\r\n ...state,\r\n designDetails: d,\r\n history: [...state.history, { designDetails, updateDesignTiles, updateNormapTiles, hash }],\r\n customizationFlag: true,\r\n updateDesignTiles: { colorIndex: selectedColor },\r\n updateNormapTiles: null,\r\n hash: generateHash(d)\r\n };\r\n};\r\n\r\nconst changeColorMaterial = (state, { material, materialName, colorIndex }) => {\r\n const { designDetails, updateDesignTiles, updateNormapTiles, hash } = state;\r\n const d = JSON.parse(JSON.stringify({ ...designDetails }));\r\n d.DesignColors[colorIndex].Material = material;\r\n d.DesignColors[colorIndex].materialName = materialName;\r\n d.DesignColors[colorIndex].YarnDetails.forEach(yarn => {\r\n yarn.Material = material;\r\n yarn.MaterialName = materialName;\r\n });\r\n // d.DesignColors[colorIndex].YarnDetails[0].Material = material;\r\n\r\n if (window.flags.applyColorPaletteinSameFolder || window.flags.applyColorPaletteinVariations) {\r\n const DesignColors = d.DesignColors;\r\n const ParentFolder = getPathOffile(state.fullpath);\r\n window.sessionStorage.setItem(\"ParentFolder\", ParentFolder);\r\n window.sessionStorage.setItem(\"DesignColors\", JSON.stringify(DesignColors));\r\n }\r\n return {\r\n ...state,\r\n history: [...state.history, { designDetails, updateDesignTiles, updateNormapTiles, hash }],\r\n designDetails: d,\r\n selectedColor: colorIndex,\r\n customizationFlag: true,\r\n updateDesignTiles: { colorIndex },\r\n updateNormapTiles: null,\r\n hash: generateHash(d)\r\n };\r\n};\r\nconst changeYarnColor = (state, payload) => {\r\n const { designDetails, yarnIndex, selectedColor, updateDesignTiles } = state;\r\n const { Color, ColorName } = payload;\r\n\r\n const d = JSON.parse(JSON.stringify({ ...designDetails }));\r\n d.DesignColors[selectedColor].YarnDetails[yarnIndex] = {\r\n ...d.DesignColors[selectedColor].YarnDetails[yarnIndex],\r\n Color,\r\n ColorName\r\n };\r\n\r\n if (window.flags.applyColorPaletteinSameFolder || window.flags.applyColorPaletteinVariations) {\r\n const DesignColors = d.DesignColors;\r\n const ParentFolder = getPathOffile(state.fullpath);\r\n window.sessionStorage.setItem(\"ParentFolder\", ParentFolder);\r\n window.sessionStorage.setItem(\"DesignColors\", JSON.stringify(DesignColors));\r\n }\r\n const updatedDesignTiles = { colorIndex: selectedColor };\r\n return {\r\n ...state,\r\n designDetails: d,\r\n updateDesignTiles: updatedDesignTiles,\r\n updateNormapTiles: null,\r\n history: [...state.history, { designDetails, updateDesignTiles }],\r\n customizationFlag: true,\r\n hash: generateHash(d)\r\n };\r\n};\r\nconst changeYarnMaterial = (state, payload) => {\r\n const { designDetails, yarnIndex, selectedColor, updateNormapTiles, hash } = state;\r\n const { material, materialName, colorIndex } = payload;\r\n\r\n const d = JSON.parse(JSON.stringify({ ...designDetails }));\r\n d.DesignColors[selectedColor].YarnDetails[yarnIndex] = {\r\n ...d.DesignColors[selectedColor].YarnDetails[yarnIndex],\r\n Material: material\r\n };\r\n\r\n if (window.flags.applyColorPaletteinSameFolder || window.flags.applyColorPaletteinVariations) {\r\n const DesignColors = d.DesignColors;\r\n const ParentFolder = getPathOffile(state.fullpath);\r\n window.sessionStorage.setItem(\"ParentFolder\", ParentFolder);\r\n window.sessionStorage.setItem(\"DesignColors\", JSON.stringify(DesignColors));\r\n }\r\n const updateDesignTiles = { colorIndex: selectedColor };\r\n return {\r\n ...state,\r\n designDetails: d,\r\n updateDesignTiles,\r\n updateNormapTiles: null,\r\n history: [...state.history, { designDetails, updateDesignTiles, updateNormapTiles, hash }],\r\n customizationFlag: true,\r\n hash: generateHash(d)\r\n };\r\n};\r\nconst mixPly = (state, payload) => {\r\n const { designDetails } = state;\r\n const { colorIndex, plyNumber } = payload;\r\n const d = JSON.parse(JSON.stringify({ ...designDetails }));\r\n const { YarnDetails } = d.DesignColors[colorIndex];\r\n const { Color: firstColor } = YarnDetails[0];\r\n let updateDesignTiles = null;\r\n let yarnDetailArr = Array(plyNumber);\r\n\r\n for (let i = 0; i < plyNumber; i++) {\r\n //Check if all colors are same, if same no need to render\r\n if (YarnDetails[i] && YarnDetails[i].Color !== firstColor) {\r\n updateDesignTiles = true;\r\n }\r\n yarnDetailArr[i] = YarnDetails[i] ? YarnDetails[i] : YarnDetails[0];\r\n }\r\n\r\n if (plyNumber === 1) {\r\n //check if all the mix ply contains color 1, if yes dont render\r\n for (let i = 0; i < YarnDetails.length; i++) {\r\n if (YarnDetails && YarnDetails[i].Color !== firstColor) {\r\n updateDesignTiles = true;\r\n }\r\n }\r\n }\r\n d.DesignColors[colorIndex].YarnDetails = yarnDetailArr;\r\n if (updateDesignTiles) {\r\n updateDesignTiles = { colorIndex, YarnDetails };\r\n const hash = generateHash(d);\r\n return { ...state, designDetails: d, customizationFlag: true, updateDesignTiles, hash };\r\n }\r\n\r\n if (window.flags.applyColorPaletteinSameFolder || window.flags.applyColorPaletteinVariations) {\r\n const DesignColors = d.DesignColors;\r\n const ParentFolder = getPathOffile(state.fullpath);\r\n window.sessionStorage.setItem(\"ParentFolder\", ParentFolder);\r\n window.sessionStorage.setItem(\"DesignColors\", JSON.stringify(DesignColors));\r\n }\r\n return { ...state, designDetails: d, customizationFlag: true };\r\n};\r\nconst toggleCarving = (state, payload) => {\r\n const { designDetails, selectedColor, updateDesignTiles, updateNormapTiles, hash } = state;\r\n const d = JSON.parse(JSON.stringify({ ...designDetails }));\r\n\r\n if (payload && payload.length > 0) {\r\n payload.forEach(element => {\r\n d.DesignColors[element].Carving = !d.DesignColors[element].Carving;\r\n });\r\n } else if (payload && payload.length === 0) {\r\n let firstColorCarving = d.DesignColors[0].Carving;\r\n d.DesignColors.forEach((designColor, i) => {\r\n designColor.Carving = !firstColorCarving;\r\n });\r\n } else {\r\n d.DesignColors[selectedColor].Carving = !d.DesignColors[selectedColor].Carving;\r\n }\r\n let tilesToUpdate = payload ? null : { colorIndex: selectedColor };\r\n\r\n return {\r\n ...state,\r\n designDetails: d,\r\n customizationFlag: true,\r\n updateDesignTiles: null,\r\n updateNormapTiles: tilesToUpdate,\r\n history: [...state.history, { designDetails, updateDesignTiles, updateNormapTiles, hash }],\r\n hash: generateHash(d)\r\n };\r\n};\r\nconst changeColorPile = (state, { colorIndex, pileHeight }) => {\r\n const { designDetails, updateDesignTiles, updateNormapTiles, hash } = state;\r\n const d = JSON.parse(JSON.stringify({ ...state.designDetails }));\r\n d.DesignColors[colorIndex].PileHeight = pileHeight;\r\n const colorNumbers = updateColorNumbers(d.DesignColors);\r\n return {\r\n ...state,\r\n designDetails: d,\r\n customizationFlag: true,\r\n colorNumbers: colorNumbers,\r\n selectedColor: colorIndex,\r\n updateDesignTiles: null,\r\n updateNormapTiles: { colorIndex },\r\n hash: generateHash(d),\r\n history: [...state.history, { designDetails, updateDesignTiles, updateNormapTiles, hash }]\r\n };\r\n};\r\nconst changeColorScheme = (state, payload) => {\r\n const { fullpath, designName } = payload;\r\n const details = normalizeUnit({\r\n ...payload.designDetails,\r\n defaultUnit: window.flags.defaultUnit\r\n });\r\n let designColorsPalette = payload.designDetails.DesignColors || [];\r\n if (window.flags.applyColorPaletteinVariations) {\r\n const DesignColors = window.sessionStorage.getItem(\"DesignColors\");\r\n\r\n if (DesignColors) {\r\n designColorsPalette = JSON.parse(DesignColors);\r\n }\r\n }\r\n const designDetails = {\r\n ...payload.designDetails,\r\n ...details,\r\n OrderProperties: {\r\n QualityIndex: window.flags.defaultQualityIndex\r\n },\r\n DesignColors: designColorsPalette\r\n };\r\n return {\r\n ...state,\r\n history: [],\r\n designDetails,\r\n hash: generateHash(designDetails, fullpath),\r\n updateDesignTiles: null,\r\n updateNormapTiles: null,\r\n designName: designName,\r\n currentDesignPath: \"\",\r\n totalKnots: designColorsPalette.map(c => c.Knots).reduce((a, b) => a + b, 0),\r\n colorNumbers: updateColorNumbers(designColorsPalette),\r\n fullpath,\r\n selectedColor: -1,\r\n customizationFlag: true\r\n };\r\n};\r\nconst changeColorPalette = (state, colorPalette) => {\r\n const { designDetails, updateDesignTiles, updateNormapTiles, hash } = state;\r\n const d = JSON.parse(JSON.stringify({ ...designDetails }));\r\n colorPalette.forEach((item, index) => {\r\n if (d.DesignColors[index] && d.DesignColors[index].YarnDetails.length === 1) {\r\n d.DesignColors[index].Color = item.Value;\r\n d.DesignColors[index].ColorName = item.Name;\r\n d.DesignColors[index].YarnDetails[0].Color = item.Value;\r\n d.DesignColors[index].YarnDetails[0].ColorName = item.Name;\r\n }\r\n });\r\n return {\r\n ...state,\r\n customizationFlag: true,\r\n history: [...state.history, { designDetails, updateDesignTiles, updateNormapTiles, hash }],\r\n designDetails: d,\r\n updateDesignTiles: { colorIndex: -1 },\r\n updateNormapTiles: null,\r\n hash: generateHash(d)\r\n };\r\n};\r\nconst convertUnit = (from, to, valueArr) => {\r\n return valueArr.map(val =>\r\n Number(\r\n convert(val)\r\n .from(from)\r\n .to(to)\r\n .toFixed(2)\r\n )\r\n );\r\n};\r\nconst normalizeUnit = ({ PhysicalWidth, PhysicalHeight, defaultUnit, Unit }) => {\r\n let width = PhysicalWidth,\r\n height = PhysicalHeight,\r\n defUnit = defaultUnit;\r\n if (!defaultUnit) {\r\n if (Unit === \"in\") defUnit = \"ft\";\r\n else defUnit = Unit;\r\n }\r\n [width, height] = convertUnit(Unit, defUnit, [PhysicalWidth, PhysicalHeight]);\r\n if (\r\n defUnit === \"cm\" ||\r\n window.flags.ordersheet.roundOffToFtOrCm ||\r\n window.flags.ordersheet.roundOffToNearestHalf\r\n ) {\r\n width = window.flags.ordersheet.roundOffToNearestHalf\r\n ? Math.round(width * 2) / 2\r\n : Math.round(width);\r\n height = window.flags.ordersheet.roundOffToNearestHalf\r\n ? Math.round(height * 2) / 2\r\n : Math.round(height);\r\n }\r\n return { PhysicalWidth: width, PhysicalHeight: height, Unit: defUnit };\r\n};\r\nconst updateColorNumbers = designColors => {\r\n const { colorNumberMode } = window.flags.colorAreaSwatch;\r\n var map = {};\r\n var result = [];\r\n var cnt = 1;\r\n var element, temp;\r\n designColors.forEach((designColor, i) => {\r\n element = designColor.ColorName + \"-\" + designColor.PileHeight;\r\n if (!map[element]) {\r\n map[element] = [cnt++];\r\n }\r\n map[element].push(i);\r\n });\r\n for (element in map) {\r\n var indices = map[element];\r\n if (colorNumberMode === colorNumberModes.ALPHA) temp = String.fromCharCode(64 + indices[0]);\r\n else temp = indices[0];\r\n if (indices.length === 2) {\r\n result[indices[1]] = temp;\r\n } else {\r\n for (var j = 1; j < indices.length; ++j) {\r\n result[indices[j]] = temp + String.fromCharCode(96 + j);\r\n }\r\n }\r\n }\r\n return result;\r\n};\r\n\r\nfunction undoDesignColor(state) {\r\n const his = [...state.history];\r\n if (!his.length) return state;\r\n const { designDetails, updateDesignTiles, updateNormapTiles, hash } = his.pop();\r\n return { ...state, updateNormapTiles, designDetails, updateDesignTiles, hash, history: his };\r\n}\r\n\r\nconst setTileDetails = (state, payload) => {\r\n // const { props1x, props2x, props4x } = payload;\r\n return {\r\n ...state,\r\n tileDetails: payload\r\n };\r\n};\r\nexport const generateHash = (details, fullpath = \"\") => {\r\n const des = JSON.stringify(details);\r\n // const key = sessionStorage.getItem(\"apikey\")\r\n return MD5(des + fullpath);\r\n};\r\nconst getCarvingColorNumbers = designColors => {\r\n let carvingColorNumbers = [];\r\n if (designColors && designColors.length > 0) {\r\n if (checkPartialCarving(designColors)) {\r\n designColors.forEach((designColor, i) => {\r\n if (designColor.Carving) {\r\n carvingColorNumbers.push(i);\r\n }\r\n });\r\n } else {\r\n }\r\n }\r\n return carvingColorNumbers;\r\n};\r\nconst checkPartialCarving = designColors => {\r\n let partialCarving = false;\r\n let firstColorCarving = designColors[0].Carving;\r\n designColors.forEach((designColor, i) => {\r\n if (firstColorCarving !== designColor.Carving) {\r\n partialCarving = true;\r\n }\r\n });\r\n return partialCarving;\r\n};\r\nfunction DesignDetailStateProvider({ children }) {\r\n const [state, dispatch] = React.useReducer(designDetailReducer, designDetailState);\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\nfunction useDesignDetailState() {\r\n const context = React.useContext(StateContext);\r\n if (context === undefined) {\r\n throw new Error(\"useCountState must be used within a CountProvider\");\r\n }\r\n return context;\r\n}\r\nfunction useDispatchDesignDetail() {\r\n const context = React.useContext(DispatchContext);\r\n if (context === undefined) {\r\n throw new Error(\"useCountDispatch must be used within a CountProvider\");\r\n }\r\n return context;\r\n}\r\nexport {\r\n DesignDetailStateProvider,\r\n useDesignDetailState,\r\n useDispatchDesignDetail,\r\n designDetailActions\r\n};\r\n","import React from \"react\";\r\nimport {\r\n updateElementOfTree,\r\n updateNode,\r\n expandTreeNode,\r\n findItemNested,\r\n findPrevNext,\r\n updateSimilarFilesOfNode,\r\n updateSingleFileProp,\r\n} from \"../utils/arrayUtils\";\r\nimport { generateHash } from \"./designdetails.reducer\";\r\n\r\nconst StateContext = React.createContext();\r\nconst DispatchContext = React.createContext();\r\n\r\nconst SET_TREE = \"SET_TREE\";\r\nconst UPDATE_CHILD_NODES = \"UPDATE_CHILD_NODES\";\r\nconst UPDATE_NODE = \"UPDATE_NODE\";\r\nconst EXPAND_NODE = \"EXPAND_NODE\";\r\nconst COLLAPSE_NODE = \"COLLAPSE_NODE\";\r\nconst SET_ACTIVE_NODE = \"SET_ACTIVE_NODE\";\r\nconst SET_ACTIVE_SCHEME = \"SET_ACTIVE_SCHEME\";\r\nconst SET_SCHEMES = \"SET_SCHEMES\";\r\nconst EXPAND_NODE_BY_PATH = \"EXPAND_NODE_BY_PATH\";\r\nconst SELECT_PREV_DESIGN = \"SELECT_PREV_DESIGN\";\r\nconst SELECT_NEXT_DESIGN = \"SELECT_NEXT_DESIGN\";\r\nconst SET_FAVORITES = \"SET_FAVORITES\";\r\nconst ADD_FAVORITE = \"ADD_FAVORITE\";\r\nconst UPDATE_SIMILAR_DESIGNS = \"UPDATE_SIMILAR_DESIGNS\";\r\nconst UPDATE_SINGLE_FILE_PROP = \"UPDATE_SINGLE_FILE_PROP\"\r\nconst designListActions = {\r\n SET_TREE,\r\n UPDATE_CHILD_NODES,\r\n UPDATE_NODE,\r\n EXPAND_NODE,\r\n COLLAPSE_NODE,\r\n SET_ACTIVE_NODE,\r\n SET_ACTIVE_SCHEME,\r\n EXPAND_NODE_BY_PATH,\r\n SELECT_PREV_DESIGN,\r\n SELECT_NEXT_DESIGN,\r\n SET_SCHEMES,\r\n SET_FAVORITES,\r\n ADD_FAVORITE,\r\n UPDATE_SIMILAR_DESIGNS,\r\n UPDATE_SINGLE_FILE_PROP\r\n};\r\nconst initialDesignListState = {\r\n loading: true,\r\n tree: null,\r\n activeNode: { id: \"0\" },\r\n selectedFolder: null,\r\n flatFileList: [],\r\n activeSchemeIndex: -1,\r\n schemes: [],\r\n favorites: []\r\n};\r\nconst designListReducer = (state, action) => {\r\n console.log(action.type);\r\n switch (action.type) {\r\n case SET_TREE:\r\n return {\r\n ...state, tree: [...action.payload.tree],\r\n loading: false,\r\n selectedFolder: action.payload.openNode,\r\n flatFileList: [...action.payload.flatfileList]\r\n };\r\n case EXPAND_NODE:\r\n return {\r\n ...state, tree: expandTreeNode([...state.tree], action.payload),\r\n selectedFolder: action.payload\r\n };\r\n case COLLAPSE_NODE:\r\n return {\r\n ...state, tree:\r\n updateElementOfTree(state.tree, [action.payload.id], \"isExpanded\", false)\r\n };\r\n case UPDATE_CHILD_NODES:\r\n return {\r\n ...state, tree:\r\n updateElementOfTree(state.tree, [action.payload.id], \"childNodes\", action.payload.childNodes)\r\n };\r\n case UPDATE_NODE:\r\n return {\r\n ...state, tree:\r\n updateNode(state.tree, action.payload)\r\n };\r\n case SET_ACTIVE_NODE:\r\n return {\r\n ...state, activeNode: action.payload,\r\n activeSchemeIndex: -1\r\n };\r\n case SET_SCHEMES:\r\n return { ...state, schemes: action.payload }\r\n case SET_ACTIVE_SCHEME:\r\n return { ...state, activeSchemeIndex: action.payload }\r\n case UPDATE_SIMILAR_DESIGNS:\r\n return { ...state, tree: updateSimilarFilesOfNode(state.tree, action.payload) }\r\n case EXPAND_NODE_BY_PATH:\r\n const nodeToExpand = findItemNested([...state.tree], action.payload, \"fullpath\");\r\n if (!nodeToExpand) return { ...state }\r\n return { ...state, tree: expandTreeNode([...state.tree], nodeToExpand) };\r\n case UPDATE_SINGLE_FILE_PROP:\r\n return { ...state, tree: updateSingleFileProp(state.tree, action.payload, generateHash(action.payload.Props, action.payload.fullpath)) }\r\n\r\n case SELECT_PREV_DESIGN:\r\n findPrevNext(state.tree, state.activeNode)\r\n // let ind = state.flatFileList.findIndex(item => item.id === state.activeNode.id)\r\n // if (ind < 0 || ind === 0)\r\n // return state\r\n // return {\r\n // ...state, activeNode: state.flatFileList[ind - 1],\r\n // activeSchemeIndex: -1\r\n // }\r\n return state\r\n case SELECT_NEXT_DESIGN:\r\n return state\r\n // let indN = state.flatFileList.findIndex(item => item.id === state.activeNode.id)\r\n // const lastIndex = state.flatFileList.length - 1\r\n // if (indN < 0 || indN >= lastIndex)\r\n // return state\r\n // return {\r\n // ...state, activeNode: state.flatFileList[indN + 1],\r\n // activeSchemeIndex: -1\r\n // }\r\n case SET_FAVORITES:\r\n return { ...state, favorites: action.payload }\r\n case ADD_FAVORITE:\r\n return { ...state, favorites: [...state.favorites, action.payload] }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nfunction DesignListStateProvider({ children }) {\r\n const [state, dispatch] = React.useReducer(designListReducer, initialDesignListState)\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n )\r\n}\r\nfunction useDesignListState() {\r\n const context = React.useContext(StateContext)\r\n if (context === undefined) {\r\n throw new Error('useCountState must be used within a CountProvider')\r\n }\r\n return context\r\n}\r\nfunction useDispatchDesignList() {\r\n const context = React.useContext(DispatchContext)\r\n if (context === undefined) {\r\n throw new Error('useCountDispatch must be used within a CountProvider')\r\n }\r\n return context\r\n}\r\nexport { DesignListStateProvider, useDesignListState, useDispatchDesignList, designListActions }\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-augmented-rug\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.333 5.333c.736 0 1.333.597 1.333 1.333v.8a1.333 1.333 0 01-2.666 0v-.8c0-.736.597-1.333 1.333-1.333zm0 7.2c.736 0 1.333.597 1.333 1.333v.8a1.333 1.333 0 01-2.666 0v-.8c0-.736.597-1.333 1.333-1.333zM6.667 5.333C7.403 5.333 8 5.93 8 6.666v.8a1.333 1.333 0 01-2.666 0v-.8c0-.736.597-1.333 1.333-1.333zm0 7.2c.736 0 1.333.597 1.333 1.333v.8a1.333 1.333 0 01-2.666 0v-.8c0-.736.597-1.333 1.333-1.333zM12 8c.736 0 1.333.597 1.333 1.333v1.333a1.333 1.333 0 01-2.666 0V9.333C10.667 8.597 11.264 8 12 8zM18.667 5.333c.736 0 1.333.597 1.333 1.333v1.333a1.333 1.333 0 01-2.666 0V6.666c0-.736.597-1.333 1.333-1.333zM26.667 20c0 .479-.257.921-.673 1.158l-9.333 5.325a1.33 1.33 0 01-1.321 0l-9.333-5.325a1.333 1.333 0 010-2.316l9.333-5.325a1.33 1.33 0 011.321 0l9.333 5.325c.416.237.673.679.673 1.158zM16 16.21L9.357 20 16 23.79 22.643 20 16 16.21z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-no-music\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.579 26.668a1.334 1.334 0 01-2.195-1.515L24.541 6.085A1.334 1.334 0 0126.736 7.6l-1.403 2.033v11.7c0 .088-.009.174-.025.258a3.333 3.333 0 11-2.641-2.857v-5.235l-9.087 13.17zM6.667 22c0 1.464.944 2.707 2.256 3.155l4.411-6.441V9.333h6.424l1.826-2.667H12c-.736 0-1.333.597-1.333 1.333v10.733a3.333 3.333 0 00-4 3.266z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-panel-to-the-left\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26 15.333H12.856a1.333 1.333 0 000 2.666H26a1.333 1.333 0 000-2.666z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.913 15.724a1.333 1.333 0 000 1.886l4 4a1.333 1.333 0 101.886-1.886l-3.057-3.057 3.057-3.057a1.333 1.333 0 10-1.886-1.886l-4 4zM7.333 10c.736 0 1.333.597 1.333 1.333V22A1.333 1.333 0 016 22V11.333C6 10.597 6.597 10 7.333 10z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-panel-to-the-right\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.886 15.303H26.03a1.333 1.333 0 010 2.666H12.886a1.333 1.333 0 010-2.666z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26.973 15.694a1.333 1.333 0 010 1.886l-4 4a1.333 1.333 0 11-1.886-1.886l3.057-3.057-3.057-3.057a1.333 1.333 0 111.886-1.886l4 4zM7.303 9.97c.736 0 1.333.597 1.333 1.333V21.97a1.333 1.333 0 01-2.666 0V11.303c0-.736.597-1.333 1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-broken-heart\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.98 9.097a1.334 1.334 0 01.72 1.743l-1.417 3.412 2.55 2.04c.4.32.581.842.466 1.341l-1.526 6.609a1.334 1.334 0 01-2.598-.6l1.337-5.792-2.678-2.143a1.333 1.333 0 01-.398-1.553l1.802-4.338a1.334 1.334 0 011.743-.72z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.522 8.59c1.217-1.23 2.871-1.923 4.598-1.923s3.381.693 4.598 1.923c1.217 1.229 1.899 2.893 1.899 4.625s-.681 3.396-1.899 4.625l-8.296 8.379a1.333 1.333 0 01-1.894 0L7.232 17.84a6.583 6.583 0 010-9.25 6.46 6.46 0 019.196 0l.047.048.047-.048zm4.598.743a3.805 3.805 0 00-2.703 1.132l-.995 1.005a1.333 1.333 0 01-1.894 0l-.995-1.005a3.794 3.794 0 00-5.406 0 3.917 3.917 0 000 5.498l7.348 7.422 7.348-7.422c.72-.727 1.127-1.715 1.127-2.749s-.407-2.022-1.127-2.749a3.806 3.806 0 00-2.703-1.133z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-enter-fullscreen\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.298 11.058l6.013-6.013a1.333 1.333 0 111.886 1.886l-6.013 6.013a1.333 1.333 0 11-1.886-1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26.253 4.654c.736 0 1.333.597 1.333 1.333v6.159a1.333 1.333 0 01-2.666 0V7.32h-4.826a1.333 1.333 0 010-2.666h6.159zM12.959 21.55l-6.013 6.013a1.333 1.333 0 11-1.886-1.886l6.013-6.013a1.333 1.333 0 111.886 1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.003 27.954a1.333 1.333 0 01-1.333-1.333v-6.159a1.333 1.333 0 012.666 0v4.826h4.826a1.333 1.333 0 010 2.666H6.003zM12.959 11.058L6.946 5.045A1.333 1.333 0 105.06 6.931l6.013 6.013a1.333 1.333 0 101.886-1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.003 4.654c-.736 0-1.333.597-1.333 1.333v6.159a1.333 1.333 0 002.666 0V7.32h4.826a1.333 1.333 0 000-2.666H6.003zM19.298 21.55l6.013 6.013a1.333 1.333 0 101.886-1.886l-6.013-6.013a1.333 1.333 0 10-1.886 1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26.253 27.954c.736 0 1.333-.597 1.333-1.333v-6.159a1.333 1.333 0 00-2.666 0v4.826h-4.826a1.333 1.333 0 000 2.666h6.159z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-exit-fullscreen\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27.46 6.662l-6.151 6.151a1.333 1.333 0 11-1.886-1.886l6.151-6.151a1.333 1.333 0 111.886 1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.366 13.204a1.333 1.333 0 01-1.333-1.333V5.57a1.333 1.333 0 012.666 0v4.967h4.967a1.333 1.333 0 010 2.666h-6.301zM4.796 25.945l6.151-6.151a1.333 1.333 0 111.886 1.886l-6.151 6.151a1.333 1.333 0 11-1.886-1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.89 19.404c.736 0 1.333.597 1.333 1.333v6.301a1.333 1.333 0 01-2.666 0v-4.967H5.59a1.333 1.333 0 010-2.666h6.301zM4.796 6.662l6.151 6.151a1.333 1.333 0 101.886-1.886L6.682 4.776a1.333 1.333 0 10-1.886 1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.89 13.204c.736 0 1.333-.597 1.333-1.333V5.57a1.333 1.333 0 00-2.666 0v4.967H5.59a1.333 1.333 0 000 2.666h6.301zM27.46 25.945l-6.151-6.151a1.333 1.333 0 10-1.886 1.886l6.151 6.151a1.333 1.333 0 101.886-1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.366 19.404c-.736 0-1.333.597-1.333 1.333v6.301a1.333 1.333 0 002.666 0v-4.967h4.967a1.333 1.333 0 000-2.666h-6.301z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-heart\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.522 8.59c1.217-1.23 2.871-1.923 4.598-1.923s3.381.693 4.598 1.923c1.217 1.229 1.899 2.893 1.899 4.625s-.681 3.396-1.899 4.625l-8.296 8.379a1.333 1.333 0 01-1.894 0L7.232 17.84a6.583 6.583 0 010-9.25 6.46 6.46 0 019.196 0l.047.048.047-.048zm4.598.743a3.805 3.805 0 00-2.703 1.132l-.995 1.005a1.333 1.333 0 01-1.894 0l-.995-1.005a3.794 3.794 0 00-5.406 0 3.917 3.917 0 000 5.498l7.348 7.422 7.348-7.422c.72-.727 1.127-1.715 1.127-2.749s-.407-2.022-1.127-2.749a3.806 3.806 0 00-2.703-1.133z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-heart-full-of-love\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"var(--color1, #e15454)\",\n d: \"M25.022 8.317a5.603 5.603 0 00-7.94 0L16 9.402l-1.082-1.085c-2.193-2.2-5.747-2.2-7.94 0s-2.193 5.766 0 7.966L16 25.334l9.022-9.051a5.642 5.642 0 000-7.966z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-share\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.222 7.556a4.89 4.89 0 119.778 0 4.89 4.89 0 01-9.778 0zm4.889-2.223a2.222 2.222 0 100 4.444 2.222 2.222 0 000-4.444zM4 15.852a4.89 4.89 0 119.778 0 4.89 4.89 0 01-9.778 0zm4.889-2.222a2.222 2.222 0 100 4.444 2.222 2.222 0 000-4.444zM18.222 24.148a4.89 4.89 0 119.778 0 4.89 4.89 0 01-9.778 0zm4.889-2.222a2.222 2.222 0 100 4.444 2.222 2.222 0 000-4.444z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.807 16.97a1.334 1.334 0 011.823-.481l8.095 4.717a1.334 1.334 0 01-1.342 2.304l-8.095-4.717a1.334 1.334 0 01-.481-1.823zM21.193 8.673a1.334 1.334 0 01-.479 1.824l-8.083 4.717a1.334 1.334 0 01-1.344-2.304l8.083-4.717a1.334 1.334 0 011.824.48z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-music\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.667 6.667C11.403 6.667 12 7.264 12 8v13.333a1.333 1.333 0 01-2.666 0V8c0-.736.597-1.333 1.333-1.333zM22.667 6.667C23.403 6.667 24 7.264 24 8v13.333a1.333 1.333 0 01-2.666 0V8c0-.736.597-1.333 1.333-1.333z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.667 25.333a3.333 3.333 0 100-6.665 3.333 3.333 0 000 6.665zM20.667 25.333a3.333 3.333 0 100-6.665 3.333 3.333 0 000 6.665zM9.333 8c0-.736.597-1.333 1.333-1.333h12a1.333 1.333 0 010 2.666h-12A1.333 1.333 0 019.333 8z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-landscape\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8 22.667a1.333 1.333 0 01-1.333-1.333V10.667c0-.736.597-1.333 1.333-1.333h16c.736 0 1.333.597 1.333 1.333v10.667c0 .736-.597 1.333-1.333 1.333H8zM9.333 20h13.333v-8H9.333v8z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-portrait\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.333 8c0-.736.597-1.333 1.333-1.333h10.667c.736 0 1.333.597 1.333 1.333v16c0 .736-.597 1.333-1.333 1.333H10.666A1.333 1.333 0 019.333 24V8zM12 9.333v13.333h8V9.333h-8z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-email\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"var(--color2, #ff9e24)\",\n d: \"M28 8.582v14.875c-.163 1.03-.434 1.528-1.237 2.275L16.006 16l10.741-9.759c.818.721 1.115 1.216 1.253 2.341zM4.011 8.582v14.875c.163 1.03.434 1.528 1.237 2.275L16.005 16 5.264 6.241c-.818.721-1.115 1.216-1.253 2.341z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"var(--color3, #ffb14d)\",\n d: \"M25.003 26.4H6.931c-1.03-.163-1.528-.434-2.275-1.238L16 13.815l11.344 11.331c-.721.818-1.216 1.115-2.341 1.253z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"var(--color4, #ffe9e1)\",\n d: \"M25.003 5.6H6.931c-1.03.163-1.528.434-2.275 1.237L16 18.184 27.344 6.853c-.721-.818-1.216-1.115-2.341-1.253z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-facebook\",\n viewBox: \"0 0 33 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"var(--color5, #1877f2)\",\n d: \"M22.094 17.365l.615-4.035h-3.86v-2.623c0-1.11.558-2.19 2.273-2.19h1.744V5.088S21.293 4.8 19.778 4.8c-3.174 0-5.232 1.945-5.232 5.447v3.084h-3.545v4.035h3.545v9.835h4.318v-9.835h3.231z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-linkedin\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"var(--color6, #2867b2)\",\n d: \"M27.2 18.198V26.4h-4.691v-7.648c0-1.926-.677-3.238-2.376-3.238-.529.003-1.044.173-1.475.485s-.755.752-.928 1.258a3.211 3.211 0 00-.158 1.151v7.991h-4.691s.066-12.956 0-14.3h4.691V14.175v-.05c.427-.746 1.047-1.36 1.793-1.776s1.59-.617 2.44-.582c3.086 0 5.396 2.042 5.396 6.431zM5.6 26.4h4.686V12.1H5.6v14.3zm4.828-19.148c-.001.484-.144.956-.41 1.357s-.643.714-1.084.898a2.386 2.386 0 01-2.629-.534 2.474 2.474 0 01-.521-2.666c.183-.447.492-.828.889-1.097a2.388 2.388 0 013.05.307 2.458 2.458 0 01.705 1.733z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-pinterest\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"var(--color7, #e60023)\",\n d: \"M17.934 21.747c-1.549-.119-2.2-.89-3.41-1.628-.667 3.526-1.479 6.906-3.894 8.68-.742-5.333 1.076-9.336 1.947-13.563-1.452-2.474.177-7.449 3.227-6.222 3.764 1.508-3.27 9.19 1.463 10.15 4.942.998 6.959-8.648 3.894-11.783-4.426-4.535-12.907-.103-11.831 6.38.253 1.584 1.877 2.067.645 4.259-2.829-.635-3.678-2.892-3.565-5.892.172-4.92 4.378-8.365 8.605-8.843 5.335-.602 10.341 1.98 11.03 7.053.78 5.713-2.409 11.897-8.11 11.452v-.043z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-skype\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"var(--color8, #00aff0)\",\n d: \"M27.894 18.137l-.022.136-.044-.258c.024.04.044.082.066.123.132-.721.201-1.459.201-2.197a12.04 12.04 0 00-.951-4.717 12.071 12.071 0 00-2.591-3.852 12.027 12.027 0 00-8.547-3.548c-.769 0-1.539.072-2.289.217l-.006.001c.042.022.085.042.126.065l-.254-.04.128-.026a7.152 7.152 0 00-3.356-.841c-1.912 0-3.709.746-5.06 2.101s-2.096 3.156-2.096 5.073c0 1.22.313 2.418.9 3.478l.021-.132.044.254c-.023-.04-.043-.081-.065-.122a12.249 12.249 0 00-.182 2.088c0 1.636.319 3.223.951 4.717a12.066 12.066 0 002.589 3.851 12.026 12.026 0 003.843 2.596c1.49.633 3.073.954 4.705.954.71 0 1.422-.065 2.117-.189-.041-.023-.082-.043-.123-.067l.258.046-.135.022a7.14 7.14 0 003.521.93 7.093 7.093 0 005.059-2.101 7.131 7.131 0 002.096-5.072 7.19 7.19 0 00-.906-3.49zm-11.839 5.225c-4.295 0-6.216-2.116-6.216-3.703 0-.814.599-1.384 1.425-1.384 1.838 0 1.362 2.645 4.791 2.645 1.755 0 2.725-.955 2.725-1.933 0-.588-.29-1.24-1.445-1.526l-3.82-.956c-3.076-.773-3.635-2.44-3.635-4.007 0-3.254 3.056-4.475 5.926-4.475 2.644 0 5.76 1.465 5.76 3.417 0 .836-.722 1.323-1.548 1.323-1.569 0-1.28-2.176-4.439-2.176-1.568 0-2.436.712-2.436 1.73 0 1.016 1.238 1.341 2.313 1.587l2.827.629c3.097.692 3.882 2.504 3.882 4.211 0 2.644-2.025 4.618-6.111 4.618zm1.946 4.441c.041.024.083.045.123.067.045-.008.09-.013.135-.022l-.258-.046zm9.871-9.53l.022-.136c-.022-.041-.042-.082-.066-.123l.044.258zM4.122 13.72c-.009.044-.014.088-.021.132.023.041.043.082.065.122l-.044-.254zm9.717-9.614c-.041-.023-.084-.043-.126-.065l-.128.026.254.04z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-twitter\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"var(--color9, #1da1f2)\",\n d: \"M11.745 27.2c9.294 0 14.377-7.695 14.377-14.369 0-.219 0-.436-.015-.653a10.27 10.27 0 002.521-2.614c-.922.408-1.9.676-2.902.794a5.066 5.066 0 002.221-2.793 10.135 10.135 0 01-3.209 1.226 5.06 5.06 0 00-8.291 1.376 5.05 5.05 0 00-.32 3.23A14.355 14.355 0 015.713 8.121a5.05 5.05 0 001.565 6.741 5.022 5.022 0 01-2.293-.632v.064a5.056 5.056 0 004.054 4.95 5.057 5.057 0 01-2.282.087 5.063 5.063 0 004.721 3.507A10.147 10.147 0 014 24.931a14.31 14.31 0 007.745 2.264z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-viber\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"var(--color10, #665cac)\",\n d: \"M25.46 5.687c-.635-.582-3.196-2.442-8.9-2.469 0 0-6.73-.406-10.011 2.603-1.826 1.826-2.469 4.498-2.534 7.813-.069 3.315-.157 9.521 5.83 11.205h.004l-.004 2.569s-.038 1.041.647 1.252c.827.256 1.313-.532 2.106-1.386a67.305 67.305 0 001.485-1.681c4.092.345 7.243-.444 7.599-.559.827-.268 5.505-.869 6.263-7.074.785-6.397-.383-10.447-2.484-12.273zm.693 11.814c-.643 5.183-4.437 5.512-5.134 5.735-.299.096-3.062.785-6.538.555 0 0-2.592 3.124-3.399 3.939-.126.126-.276.18-.375.153-.138-.034-.176-.199-.176-.44.004-.345.023-4.268.023-4.268-.004 0-.004 0 0 0-5.061-1.405-4.766-6.692-4.709-9.459s.578-5.034 2.121-6.558c2.775-2.511 8.491-2.136 8.491-2.136 4.827.023 7.139 1.474 7.675 1.96 1.776 1.527 2.683 5.176 2.021 10.52z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"var(--color10, #665cac)\",\n d: \"M16.655 11.481a.322.322 0 01.339-.305c.666.035 1.221.236 1.616.644.393.406.586.974.619 1.657a.323.323 0 01-.645.031c-.028-.584-.188-.981-.438-1.239-.248-.256-.628-.419-1.186-.449a.322.322 0 01-.305-.339z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"var(--color10, #665cac)\",\n d: \"M16.162 9.745a.323.323 0 01.345-.299c1.358.096 2.449.563 3.243 1.428.79.86 1.162 1.927 1.134 3.181a.323.323 0 01-.645-.015c.025-1.105-.299-2.005-.964-2.73-.66-.72-1.584-1.134-2.813-1.221a.323.323 0 01-.299-.345z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"var(--color10, #665cac)\",\n d: \"M15.594 8.089a.323.323 0 01.325-.321c1.873.012 3.459.638 4.729 1.875 1.28 1.251 1.915 2.948 1.931 5.063a.323.323 0 01-.645.005c-.015-1.981-.605-3.5-1.736-4.606-1.142-1.113-2.565-1.681-4.282-1.692a.323.323 0 01-.321-.325zM17.043 17.815s.456.038.697-.264l.475-.597c.23-.299.785-.486 1.328-.184.302.172.846.505 1.183.754.36.264 1.099.88 1.099.88.352.295.433.731.195 1.191 0 .004-.004.008-.004.008a4.928 4.928 0 01-.992 1.221l-.008.008c-.341.283-.678.448-1.007.486-.038.008-.088.012-.145.008-.145 0-.287-.019-.429-.065l-.012-.015c-.509-.142-1.355-.502-2.768-1.279a16.254 16.254 0 01-2.324-1.535 12.274 12.274 0 01-1.045-.926l-.034-.034-.034-.034-.034-.034-.034-.034a12.274 12.274 0 01-.926-1.045 16.484 16.484 0 01-1.535-2.324c-.777-1.413-1.137-2.259-1.279-2.768l-.015-.012a1.264 1.264 0 01-.065-.429.537.537 0 01.008-.145c.038-.329.203-.666.486-1.007l.008-.008a4.891 4.891 0 011.221-.991c.004 0 .008-.004.008-.004.459-.237.896-.157 1.191.195.004.004.616.739.88 1.099.249.341.586.88.754 1.183.302.544.115 1.099-.184 1.328l-.597.475c-.302.245-.264.697-.264.697s.888 3.357 4.203 4.203z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-whatsapp\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"var(--color11, #25d366)\",\n d: \"M23.933 7.383A11.603 11.603 0 0015.718 4C9.313 4 4.106 9.174 4.1 15.526a11.5 11.5 0 001.548 5.766l-1.649 5.976 6.16-1.603a11.689 11.689 0 005.553 1.404h.006c6.399 0 11.612-5.174 11.618-11.532 0-3.079-1.209-5.976-3.403-8.154zm-8.215 17.74a9.68 9.68 0 01-4.918-1.338l-.351-.21-3.654.951.975-3.538-.228-.365a9.49 9.49 0 01-1.476-5.097c0-5.285 4.333-9.58 9.657-9.58a9.65 9.65 0 016.828 2.808 9.5 9.5 0 012.824 6.778c-.006 5.29-4.338 9.591-9.657 9.591zm5.296-7.181c-.29-.144-1.715-.84-1.983-.94-.267-.094-.462-.144-.652.144-.195.287-.752.94-.919 1.128-.167.194-.34.216-.629.072s-1.225-.448-2.334-1.432c-.863-.763-1.442-1.708-1.615-1.996-.167-.288-.017-.442.128-.586.128-.127.29-.337.434-.503s.195-.288.29-.481c.095-.194.05-.359-.022-.503s-.652-1.564-.897-2.139c-.234-.564-.473-.486-.652-.492-.167-.011-.362-.011-.557-.011s-.507.072-.774.359-1.014.984-1.014 2.405 1.041 2.786 1.186 2.98c.145.193 2.044 3.101 4.957 4.351.691.298 1.231.475 1.654.608.696.221 1.325.188 1.827.116.557-.083 1.715-.697 1.96-1.371.239-.674.239-1.249.167-1.371s-.267-.193-.557-.337z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-bot\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M8 8h16v16H8V8z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M13.333 18.667h5.333V24h-5.333v-5.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-left\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M8 8h16v16H8V8z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M8 13.333h5.333v5.333H8v-5.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-right\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M8 8h16v16H8V8z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M18.667 13.333H24v5.333h-5.333v-5.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-top\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M8 8h16v16H8V8z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M13.333 8h5.333v5.333h-5.333V8z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-bot-left\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M8 8h16v16H8V8z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M8 18.667h5.333V24H8v-5.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-bot-right\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M8 8h16v16H8V8z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M18.667 18.667H24V24h-5.333v-5.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-top-left\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M8 8h16v16H8V8z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M8 8h5.333v5.333H8V8z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-top-right\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M8 8h16v16H8V8z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M18.667 8H24v5.333h-5.333V8z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-Large\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.333 26.667h21.333V24H5.333v2.667zm0-5.334h21.333v-16H5.333v16z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-Medium\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.333 14.667h9.333V5.334H5.333v9.333zm0 12h9.333v-9.333H5.333v9.333zm12 0h9.333v-9.333h-9.333v9.333zm0-12h9.333V5.334h-9.333v9.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-Small\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.333 10.667h5.333V5.334H5.333v5.333zm8 16h5.333v-5.333h-5.333v5.333zm-8 0h5.333v-5.333H5.333v5.333zm0-8h5.333v-5.333H5.333v5.333zm8 0h5.333v-5.333h-5.333v5.333zm8.001-13.334v5.333h5.333V5.333h-5.333zm-8.001 5.334h5.333V5.334h-5.333v5.333zm8.001 8h5.333v-5.333h-5.333v5.333zm0 8h5.333v-5.333h-5.333v5.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-sort-ascending\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M6.667 24H24M6.667 17.333h8M6.667 10.667h4M21.333 9.333v7.811M17.333 13.333l4-4 4 4\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-sort-automatic\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M6.667 24H24M6.667 17.333h8M6.667 10.667H20\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-triangle-left\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M14 16l4 4v-8l-4 4z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-triangle-right\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n strokeWidth: 2.667,\n d: \"M18 16l-4-4v8l4-4z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-add-file\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.333 7.467C5.333 5.442 7.09 4 9 4h9.333c.333 0 .654.125.9.349l7 6.4c.276.253.434.61.434.984v12.8C26.667 26.558 24.91 28 23 28H9c-1.91 0-3.667-1.442-3.667-3.467V7.466zM9 6.667c-.667 0-1 .468-1 .8v17.067c0 .332.333.8 1 .8h14c.667 0 1-.468 1-.8V12.322l-6.184-5.654H9z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.333 4c.736 0 1.333.597 1.333 1.333v5.333h5.667a1.333 1.333 0 010 2.666h-7A1.333 1.333 0 0117 11.999V5.332c0-.736.597-1.333 1.333-1.333zM15.5 13.333c.736 0 1.333.597 1.333 1.333v7a1.333 1.333 0 01-2.666 0v-7c0-.736.597-1.333 1.333-1.333z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.667 18.167c0-.736.597-1.333 1.333-1.333h7a1.333 1.333 0 010 2.666h-7a1.333 1.333 0 01-1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-android\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.533 13.587v6.433c0 .856-.672 1.539-1.528 1.539-.85 0-1.672-.689-1.672-1.539v-6.433c0-.839.822-1.528 1.672-1.528.839 0 1.528.689 1.528 1.528zm.6 8.722c0 .911.733 1.645 1.644 1.645h1.106l.017 3.394c0 2.05 3.067 2.033 3.067 0v-3.394h2.067v3.394c0 2.039 3.083 2.044 3.083 0v-3.394h1.122c.9 0 1.633-.733 1.633-1.645v-9.967H9.133v9.967zm13.778-10.505H9.072c0-2.378 1.422-4.444 3.533-5.522l-1.061-1.961c-.156-.272.239-.444.372-.211l1.078 1.978a7.506 7.506 0 016.017 0l1.072-1.972c.139-.239.528-.061.372.211l-1.061 1.956c2.095 1.078 3.517 3.144 3.517 5.522zm-9.483-3.083a.582.582 0 00-.583-.583c-.317 0-.567.267-.567.583s.256.583.567.583a.583.583 0 00.583-.583zm6.3 0a.58.58 0 00-.567-.583.583.583 0 100 1.166.58.58 0 00.567-.583zm5.266 3.338c-.839 0-1.528.672-1.528 1.528v6.433c0 .856.689 1.539 1.528 1.539.856 0 1.672-.689 1.672-1.539v-6.433c0-.855-.822-1.528-1.672-1.528z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-apple\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.039 16.261c-.011-2.039.911-3.578 2.778-4.711-1.044-1.494-2.622-2.317-4.706-2.478-1.972-.156-4.128 1.15-4.917 1.15-.833 0-2.744-1.094-4.244-1.094-3.1.05-6.394 2.472-6.394 7.4 0 1.456.267 2.959.8 4.511.711 2.039 3.278 7.039 5.956 6.955 1.4-.033 2.389-.994 4.211-.994 1.767 0 2.683.994 4.244.994 2.7-.039 5.022-4.583 5.7-6.628-3.622-1.706-3.428-5-3.428-5.106zm-3.145-9.122c1.517-1.8 1.378-3.439 1.333-4.028-1.339.078-2.889.911-3.772 1.939-.972 1.1-1.545 2.461-1.422 3.994 1.45.111 2.772-.633 3.861-1.906z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-app-store\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.996 10.189l.391-.675a.88.88 0 011.523.877l-3.763 6.516h2.723c.882 0 1.376 1.037.994 1.755H9.885c-.486 0-.877-.391-.877-.877s.391-.877.877-.877h2.237l2.864-4.963-.895-1.553a.88.88 0 011.523-.877l.383.675zm-3.385 9.377l-.843 1.462a.88.88 0 01-1.523-.877l.628-1.084c.705-.219 1.282-.052 1.738.499zm7.264-2.654h2.284c.486 0 .877.391.877.877s-.391.877-.877.877H20.89l.856 1.484a.88.88 0 01-1.523.877c-1.441-2.499-2.525-4.37-3.243-5.617-.735-1.269-.211-2.542.31-2.972.576.989 1.437 2.482 2.585 4.473zM16 5.333C10.108 5.333 5.333 10.107 5.333 16S10.107 26.667 16 26.667 26.667 21.893 26.667 16 21.893 5.333 16 5.333zM25.29 16c0 5.105-4.133 9.29-9.29 9.29-5.105 0-9.29-4.133-9.29-9.29 0-5.105 4.133-9.29 9.29-9.29 5.105 0 9.29 4.133 9.29 9.29z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-ascending\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.609 8.391a1.333 1.333 0 010 1.886L10.276 23.61a1.333 1.333 0 11-1.886-1.886L21.723 8.391a1.333 1.333 0 011.886 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.172 7.838c0-.736-.597-1.333-1.333-1.333h-5.657a1.333 1.333 0 000 2.666h4.324v4.323a1.333 1.333 0 002.666 0V7.837z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-attachment\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.407 23.217l10.097-10.086a5.725 5.725 0 10-8.097-8.097L6.321 15.12a7.922 7.922 0 0011.203 11.203L27.61 16.237a1.333 1.333 0 10-1.886-1.886L15.638 24.437a5.256 5.256 0 01-7.432-7.432L18.292 6.919a3.058 3.058 0 014.326 0zm8.211-16.298a3.058 3.058 0 010 4.326z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-at-the-rate\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.4 16a5.6 5.6 0 1111.2 0 5.6 5.6 0 01-11.2 0zm5.6-2.933a2.933 2.933 0 100 5.866 2.933 2.933 0 000-5.866z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.24 10.689A12 12 0 0128 16v1.067a4.533 4.533 0 01-9.066 0V16a1.333 1.333 0 012.666 0v1.067a1.867 1.867 0 003.734 0V16a9.334 9.334 0 10-3.659 7.41 1.332 1.332 0 111.621 2.117A12 12 0 015.24 10.687z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-auto-brightness\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.939 16a6.06 6.06 0 1112.122 0 6.06 6.06 0 01-12.122 0zM16 12.606a3.395 3.395 0 10.001 6.79 3.395 3.395 0 00-.001-6.79zM16 5.333c.736 0 1.333.597 1.333 1.333v1.333a1.333 1.333 0 01-2.666 0V6.666c0-.736.597-1.333 1.333-1.333zM16 22.909c.736 0 1.333.597 1.333 1.333v1.333a1.333 1.333 0 01-2.666 0v-1.333c0-.736.597-1.333 1.333-1.333zM5.333 16c0-.736.597-1.333 1.333-1.333h1.333a1.333 1.333 0 010 2.666H6.666A1.333 1.333 0 015.333 16zM22.909 16c0-.736.597-1.333 1.333-1.333h1.333a1.333 1.333 0 010 2.666h-1.333A1.333 1.333 0 0122.909 16zM23.664 8.407a1.333 1.333 0 010 1.886l-.943.943a1.333 1.333 0 11-1.886-1.886l.943-.943a1.333 1.333 0 011.886 0zM11.236 20.835a1.333 1.333 0 010 1.886l-.943.943a1.333 1.333 0 11-1.886-1.886l.943-.943a1.333 1.333 0 011.886 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.579 8.407a1.333 1.333 0 011.886 0l.943.943a1.333 1.333 0 11-1.886 1.886l-.943-.943a1.333 1.333 0 010-1.886zM21.007 20.835a1.333 1.333 0 011.886 0l.943.943a1.333 1.333 0 11-1.886 1.886l-.943-.943a1.333 1.333 0 010-1.886z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-avatar\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 25.333a6.667 6.667 0 016.667-6.667h10.667a6.667 6.667 0 016.667 6.667V28a1.333 1.333 0 01-2.666 0v-2.667a4 4 0 00-4-4H10.668a4 4 0 00-4 4V28a1.333 1.333 0 01-2.666 0v-2.667zM9.333 9.333a6.667 6.667 0 1113.334 0 6.667 6.667 0 01-13.334 0zm6.667-4a4 4 0 100 8 4 4 0 000-8z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-brush\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.943 7.057a1.333 1.333 0 010 1.886l-6.667 6.667a1.333 1.333 0 11-1.886-1.886l6.667-6.667a1.333 1.333 0 011.886 0zM13.172 17.337c-.892-.052-1.687.461-1.864 1.347l-.014.062a13.452 13.452 0 00-.315 1.761c-.046.356-.096.747-.179 1.109a5.057 5.057 0 01-.165.57c1.256-.085 2.16-.254 2.799-.553.449-.211.718-.466.896-.792.191-.35.336-.889.336-1.751 0-.686-.219-1.084-.453-1.318-.249-.25-.614-.41-1.042-.435zm2.927-1.451c.787.787 1.234 1.889 1.234 3.203 0 1.138-.188 2.161-.664 3.03-.489.893-1.22 1.513-2.104 1.927-1.647.772-3.954.876-6.566.876-.55 0-1.043-.338-1.243-.85s-.064-1.095.342-1.466c.855-.784 1.009-1.184 1.101-1.585.051-.225.081-.455.126-.795l.04-.307c.065-.485.155-1.071.333-1.792.502-2.424 2.696-3.567 4.629-3.453.989.058 1.999.44 2.771 1.211z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-cart\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.121 25.818a3.515 3.515 0 117.03 0 3.515 3.515 0 01-7.03 0zm3.515-.848a.848.848 0 100 1.696.848.848 0 000-1.696zM21.212 25.818a3.515 3.515 0 117.03 0 3.515 3.515 0 01-7.03 0zm3.515-.848a.849.849 0 100 1.697.849.849 0 000-1.697zM2.667 4c0-.736.597-1.333 1.333-1.333h2.457a3.515 3.515 0 013.48 3.058l.316 2.397H28a1.333 1.333 0 011.307 1.595l-1.832 9.151a3.516 3.516 0 01-3.501 2.83H12.459A3.516 3.516 0 018.95 18.64zm0 0c0 .736.597 1.333 1.333 1.333h2.453zm7.938 6.788l.99 7.503a.85.85 0 00.849.739h11.568a.848.848 0 00.848-.683l1.514-7.56H10.605z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-carving\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.951 7.804a2 2 0 10-.001 3.999 2 2 0 00.001-3.999zm-4.667 2a4.667 4.667 0 119.334 0 4.667 4.667 0 01-9.334 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.161 12.035a1.333 1.333 0 011.828-.46l17.037 10.299c.627.379.826 1.2.443 1.833s-1.201.839-1.828.46L7.604 13.868a1.334 1.334 0 01-.443-1.833zM9.918 20.197a2 2 0 10-.001 3.999 2 2 0 00.001-3.999zm-4.666 2a4.667 4.667 0 119.334 0 4.667 4.667 0 01-9.334 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.161 19.965a1.333 1.333 0 001.828.46l17.037-10.299c.627-.379.826-1.2.443-1.833s-1.201-.839-1.828-.46L7.604 18.132a1.334 1.334 0 00-.443 1.833z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-checked\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.165 11.057a1.333 1.333 0 010 1.886l-8.508 8.508a1.334 1.334 0 01-1.886 0L8.39 17.07a1.333 1.333 0 111.886-1.886l3.438 3.438 7.565-7.565a1.333 1.333 0 011.886 0z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-checked-circle\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.417 7.939a8.826 8.826 0 105.233 8.066v-.944a1.333 1.333 0 012.666 0v.945a11.494 11.494 0 01-21.133 6.249A11.491 11.491 0 0121.501 5.503a1.333 1.333 0 11-1.086 2.436z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M28.943 5.92a1.333 1.333 0 010 1.886L17.768 18.981a1.334 1.334 0 01-1.886 0l-3.048-3.048a1.333 1.333 0 111.886-1.886l2.105 2.105L27.057 5.92a1.333 1.333 0 011.886 0z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-checked-square\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M28.943 5.457a1.333 1.333 0 010 1.886L17.21 19.076a1.333 1.333 0 01-1.886 0l-3.2-3.2a1.333 1.333 0 111.886-1.886l2.257 2.257L27.058 5.456a1.333 1.333 0 011.886 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.8 7.733a.8.8 0 00-.8.8v14.933a.8.8 0 00.8.8h14.933a.8.8 0 00.8-.8v-7.467a1.333 1.333 0 012.666 0v7.467a3.467 3.467 0 01-3.467 3.467H8.799a3.467 3.467 0 01-3.467-3.467V8.533a3.467 3.467 0 013.467-3.467h11.733a1.333 1.333 0 010 2.666H8.799z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-chevron-down\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.057 20.943a1.333 1.333 0 001.886 0l6.667-6.667a1.333 1.333 0 10-1.886-1.886L16 18.114l-5.724-5.724a1.333 1.333 0 10-1.886 1.886l6.667 6.667z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-chevron-left\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.057 15.057a1.333 1.333 0 000 1.886l6.667 6.667a1.333 1.333 0 101.886-1.886L13.886 16l5.724-5.724a1.333 1.333 0 10-1.886-1.886l-6.667 6.667z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-chevron-left-circle\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.057 15.057a1.333 1.333 0 000 1.886l6.667 6.667a1.333 1.333 0 101.886-1.886L13.886 16l5.724-5.724a1.333 1.333 0 10-1.886-1.886l-6.667 6.667z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1.333 16C1.333 7.9 7.899 1.333 16 1.333S30.667 7.899 30.667 16c0 8.1-6.567 14.667-14.667 14.667S1.333 24.1 1.333 16zM16 4C9.373 4 4 9.373 4 16s5.373 12 12 12 12-5.373 12-12S22.627 4 16 4z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-chevron-right\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.943 15.057a1.333 1.333 0 010 1.886l-6.667 6.667a1.333 1.333 0 11-1.886-1.886L18.114 16l-5.724-5.724a1.333 1.333 0 111.886-1.886l6.667 6.667z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-chevron-up\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.057 11.057a1.333 1.333 0 011.886 0l6.667 6.667a1.333 1.333 0 11-1.886 1.886L16 13.886l-5.724 5.724a1.333 1.333 0 11-1.886-1.886l6.667-6.667z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-close\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.353 10.358a1.333 1.333 0 011.886 0l9.428 9.428a1.333 1.333 0 11-1.886 1.886l-9.428-9.428a1.333 1.333 0 010-1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.677 10.326a1.333 1.333 0 00-1.886 0l-9.428 9.428a1.333 1.333 0 101.886 1.886l9.428-9.428a1.333 1.333 0 000-1.886z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-close-circle\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.639 11.655a1.333 1.333 0 011.886 0l6.6 6.6a1.333 1.333 0 11-1.886 1.886l-6.6-6.6a1.333 1.333 0 010-1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.391 11.63a1.333 1.333 0 00-1.886 0l-6.6 6.6a1.333 1.333 0 101.886 1.886l6.6-6.6a1.333 1.333 0 000-1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 6.866a9.333 9.333 0 100 18.666 9.333 9.333 0 000-18.666zM4 16.199c0-6.627 5.373-12 12-12s12 5.373 12 12-5.373 12-12 12-12-5.373-12-12z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-close-circle-1\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1.333 16C1.333 7.9 7.899 1.333 16 1.333S30.667 7.899 30.667 16c0 8.1-6.567 14.667-14.667 14.667S1.333 24.1 1.333 16zM16 4C9.373 4 4 9.373 4 16s5.373 12 12 12 12-5.373 12-12S22.627 4 16 4z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.353 10.358a1.333 1.333 0 011.886 0l9.428 9.428a1.333 1.333 0 11-1.886 1.886l-9.428-9.428a1.333 1.333 0 010-1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.677 10.326a1.333 1.333 0 00-1.886 0l-9.428 9.428a1.333 1.333 0 101.886 1.886l9.428-9.428a1.333 1.333 0 000-1.886z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-collapse\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.065 8.82l-5.523 5.523a1.333 1.333 0 11-1.886-1.886l5.523-5.523a1.333 1.333 0 111.886 1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.6 14.734a1.333 1.333 0 01-1.333-1.333V7.744a1.333 1.333 0 012.666 0v4.324h4.324a1.333 1.333 0 010 2.666H18.6zM7.191 23.274l5.523-5.523a1.333 1.333 0 111.886 1.886L9.077 25.16a1.333 1.333 0 11-1.886-1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.657 17.361c.736 0 1.333.597 1.333 1.333v5.657a1.333 1.333 0 01-2.666 0v-4.323H8a1.333 1.333 0 010-2.666h5.657z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-color-palette\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.667 20a2 2 0 10.001-3.999A2 2 0 0012.667 20zm4.666-2a4.667 4.667 0 11-9.334 0 4.667 4.667 0 019.334 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.58 27.502c-1.672.721-3.706.814-6.121.28-4.617-1.02-6.955-5.823-6.955-11.885 0-8.147 7.045-13.23 12.829-13.23 3.208 0 6.851 1.409 9.521 3.642 2.672 2.235 4.621 5.533 3.781 9.314-.386 1.737-1.119 2.959-2.113 3.84-.96.85-2.077 1.297-3.038 1.641l-.497.176c-1.761.619-2.995 1.053-3.794 2.651-.772 1.545-1.922 2.843-3.612 3.572zm-1.056-2.449c.984-.425 1.723-1.194 2.284-2.316 1.305-2.611 3.566-3.385 5.264-3.966.178-.061.35-.12.514-.179.917-.328 1.616-.638 2.169-1.127.519-.459.997-1.158 1.277-2.421.544-2.446-.646-4.815-2.888-6.69-2.245-1.877-5.294-3.021-7.81-3.021-4.515 0-10.162 4.084-10.162 10.563 0 5.639 2.125 8.677 4.864 9.282 2.061.455 3.487.308 4.489-.125z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.333 10.673v-.006a1.333 1.333 0 012.666 0v.006a1.333 1.333 0 01-2.666 0zM13.333 9.34v-.006a1.333 1.333 0 012.666 0v.006a1.333 1.333 0 01-2.666 0zM17.333 9.34v-.006a1.333 1.333 0 012.666 0v.006a1.333 1.333 0 01-2.666 0zM21.333 12.006V12a1.333 1.333 0 012.666 0v.006a1.333 1.333 0 01-2.666 0z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-context-menu-horizontal\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 19.467a3.467 3.467 0 110-6.933 3.467 3.467 0 010 6.933zM15.2 16a.8.8 0 101.6 0 .8.8 0 00-1.6 0zM7.467 19.467a3.467 3.467 0 110-6.933 3.467 3.467 0 010 6.933zM6.667 16a.8.8 0 101.6 0 .8.8 0 00-1.6 0zM24.533 19.467a3.467 3.467 0 110-6.933 3.467 3.467 0 010 6.933zm-.8-3.467a.8.8 0 101.6 0 .8.8 0 00-1.6 0z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-context-menu-vertical\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.533 16a3.467 3.467 0 116.933 0 3.467 3.467 0 01-6.933 0zM16 15.2a.8.8 0 100 1.6.8.8 0 000-1.6zM12.533 7.467a3.467 3.467 0 116.933 0 3.467 3.467 0 01-6.933 0zm3.467-.8a.8.8 0 100 1.6.8.8 0 000-1.6zM12.533 24.533a3.467 3.467 0 116.933 0 3.467 3.467 0 01-6.933 0zm3.467-.8a.8.8 0 100 1.6.8.8 0 000-1.6z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-copy\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 14.667c-.736 0-1.333.597-1.333 1.333v6.667C8.667 23.403 9.264 24 10 24h6.667c.736 0 1.333-.597 1.333-1.333V19.2a1.333 1.333 0 012.666 0v3.467a4 4 0 01-4 4H9.999a4 4 0 01-4-4V16a4 4 0 014-4h2.133a1.333 1.333 0 010 2.666H9.999z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.333 8C14.597 8 14 8.597 14 9.333V16c0 .736.597 1.333 1.333 1.333H22a1.33 1.33 0 001.333-1.331V9.333C23.333 8.597 22.736 8 22 8h-6.667zm-4 1.333a4 4 0 014-4H22a4 4 0 014 3.999v6.669a3.998 3.998 0 01-4 3.998h-6.667a4 4 0 01-4-4V9.332z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-copyright\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 6.667a9.333 9.333 0 100 18.666 9.333 9.333 0 100-18.666zM4 16C4 9.373 9.373 4 16 4s12 5.373 12 12-5.373 12-12 12S4 22.627 4 16z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.9 13.333c-1.386 0-2.567 1.162-2.567 2.667s1.181 2.667 2.567 2.667c.701 0 1.34-.291 1.809-.775a1.333 1.333 0 011.915 1.855 5.172 5.172 0 01-3.724 1.586c-2.922 0-5.233-2.42-5.233-5.333s2.311-5.333 5.233-5.333c1.461 0 2.779.612 3.723 1.585a1.333 1.333 0 01-1.914 1.856 2.506 2.506 0 00-1.808-.774z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-credit-card\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.667 10.667a4 4 0 014-4h18.667a4 4 0 014 4v10.667a4 4 0 01-4 4H6.667a4 4 0 01-4-4V10.667zm4-1.334c-.736 0-1.333.597-1.333 1.333v10.667c0 .736.597 1.333 1.333 1.333h18.667c.736 0 1.333-.597 1.333-1.333V10.666c0-.736-.597-1.333-1.333-1.333H6.667z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.667 14c0-.736.597-1.333 1.333-1.333h24a1.333 1.333 0 010 2.666H4A1.333 1.333 0 012.667 14z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-crown\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.823 9.435a1.334 1.334 0 011.453.289l4.391 4.391 4.391-4.391a1.333 1.333 0 011.886 0l4.391 4.391 4.391-4.391a1.334 1.334 0 012.276.943v10.667c0 .736-.597 1.333-1.333 1.333H5.336a1.333 1.333 0 01-1.333-1.333V10.667c0-.539.325-1.025.823-1.232zm1.844 4.451V20h18.667v-6.114l-3.057 3.057a1.333 1.333 0 01-1.886 0L16 12.552l-4.391 4.391a1.333 1.333 0 01-1.886 0l-3.057-3.057z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-decrease-height\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.667 6.667v13.144a1.333 1.333 0 002.666 0V6.667a1.333 1.333 0 00-2.666 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.057 20.753a1.333 1.333 0 001.886 0l4-4a1.333 1.333 0 10-1.886-1.886L16 17.924l-3.057-3.057a1.333 1.333 0 10-1.886 1.886l4 4zM9.333 25.333c0-.736.597-1.333 1.333-1.333h10.667a1.333 1.333 0 010 2.666H10.666a1.333 1.333 0 01-1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-delete\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.333 10.933c0-.736.597-1.333 1.333-1.333h18.667a1.333 1.333 0 010 2.666H6.666a1.333 1.333 0 01-1.333-1.333z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.926 8c-.374 0-.741.323-.741.8v2.133a1.333 1.333 0 01-2.666 0V8.8c0-1.879 1.49-3.467 3.407-3.467h4.148c1.917 0 3.407 1.588 3.407 3.467v2.133a1.333 1.333 0 01-2.666 0V8.8c0-.477-.367-.8-.741-.8h-4.148zm-4.84 2.074c.736 0 1.333.597 1.333 1.333v12.185c0 .054.022.138.127.231a.78.78 0 00.515.177h9.877a.78.78 0 00.515-.177c.105-.093.127-.177.127-.231V11.407a1.333 1.333 0 012.666 0v12.185c0 1.851-1.645 3.074-3.309 3.074H11.06c-1.664 0-3.309-1.223-3.309-3.074V11.407c0-.736.597-1.333 1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-descending\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.609 23.609a1.333 1.333 0 000-1.886L10.276 8.39a1.333 1.333 0 10-1.886 1.886l13.333 13.333a1.333 1.333 0 001.886 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.172 24.162c0 .736-.597 1.333-1.333 1.333h-5.657a1.333 1.333 0 010-2.666h4.324v-4.323a1.333 1.333 0 012.666 0v5.657z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-disabled\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.333 16c0-5.891 4.776-10.667 10.667-10.667S26.667 10.109 26.667 16 21.891 26.667 16 26.667 5.333 21.891 5.333 16zM16 8a8 8 0 100 16 8 8 0 000-16z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.459 8.459a1.333 1.333 0 011.886 0l13.197 13.197a1.333 1.333 0 11-1.886 1.886L8.459 10.345a1.333 1.333 0 010-1.886z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-dislike\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.873 27.215c.216.478.691.785 1.215.785 2.512 0 4.585-2.01 4.585-4.533v-2.933h4.795a3.516 3.516 0 002.666-1.184 3.443 3.443 0 00.826-2.806l-1.496-9.6c-.266-1.72-1.767-2.959-3.492-2.944H7.5C5.587 4 3.999 5.532 3.999 7.467v7.467c0 1.935 1.588 3.467 3.501 3.467h2.391l3.981 8.815zM12.086 6.667h10.907a.824.824 0 01.835.683l1.496 9.6a.777.777 0 01-.189.634.85.85 0 01-.646.283H18.339c-.736 0-1.333.597-1.333 1.333v4.267a1.87 1.87 0 01-1.131 1.703l-3.789-8.391V6.666zm-2.667 9.066H7.501a.817.817 0 01-.834-.8V7.466c0-.422.353-.8.834-.8h1.918v9.067z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-dollar\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.667 12a4 4 0 014-4h5.667a1.333 1.333 0 010 2.666h-5.667c-.736 0-1.333.597-1.333 1.333v1.333c0 .736.597 1.333 1.333 1.333h4a4 4 0 014 4v1.333a4 4 0 01-4 4H12a1.333 1.333 0 010-2.666h6.667c.736 0 1.333-.597 1.333-1.333v-1.333c0-.736-.597-1.333-1.333-1.333h-4a4 4 0 01-4-4V12z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 4c.736 0 1.333.597 1.333 1.333v4a1.333 1.333 0 01-2.666 0v-4C14.667 4.597 15.264 4 16 4zM16 21.333c.736 0 1.333.597 1.333 1.333v4a1.333 1.333 0 01-2.666 0v-4c0-.736.597-1.333 1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-double-chevron-camera\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.441 7.134a1.335 1.335 0 011.014-.467h5.091c.39 0 .76.171 1.014.467l2.335 2.733h1.742c1.942 0 3.03 1.853 3.03 3.467v8.533c0 1.614-1.088 3.467-3.03 3.467H8.364c-1.942 0-3.03-1.853-3.03-3.467v-8.533c0-1.614 1.088-3.467 3.03-3.467h1.742l2.335-2.733zm1.628 2.199l-2.335 2.733a1.335 1.335 0 01-1.014.467H8.363c-.003 0-.013 0-.035.012a.43.43 0 00-.122.11 1.105 1.105 0 00-.207.678v8.533c0 .309.101.545.207.678a.415.415 0 00.122.11c.022.012.031.012.034.012h15.273c.003 0 .012 0 .035-.012a.415.415 0 00.122-.11c.106-.133.207-.369.207-.678v-8.533c0-.309-.101-.545-.207-.678a.43.43 0 00-.122-.11c-.022-.012-.031-.012-.034-.012h-2.357c-.39 0-.76-.171-1.014-.467L17.93 9.333h-3.862z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 17.333a4 4 0 118 0 4 4 0 01-8 0zM16 16a1.333 1.333 0 100 2.667A1.333 1.333 0 0016 16z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-double-chevron-down\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 18.061c.356 0 .697-.142.948-.395l6-6.061a1.333 1.333 0 00-1.896-1.877L16 14.832l-5.052-5.104a1.333 1.333 0 10-1.895 1.877l6 6.061c.251.253.592.395.948.395z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 25.333c.356 0 .697-.142.948-.395l6-6.061A1.333 1.333 0 0021.052 17L16 22.103 10.948 17a1.333 1.333 0 10-1.895 1.877l6 6.061c.251.253.592.395.948.395z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-double-chevron-left\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.939 16c0 .356.142.697.395.948l6.061 6a1.334 1.334 0 001.876-1.896L17.168 16l5.103-5.052a1.333 1.333 0 10-1.876-1.895l-6.061 6a1.335 1.335 0 00-.395.948z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.667 16c0 .356.142.697.395.948l6.061 6A1.333 1.333 0 0015 21.052L9.896 16 15 10.948a1.333 1.333 0 10-1.877-1.895l-6.061 6a1.335 1.335 0 00-.395.948z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-double-chevron-right\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.727 16c0-.356-.142-.697-.395-.948l-6.061-6a1.334 1.334 0 00-1.877 1.895l5.104 5.052-5.104 5.052a1.333 1.333 0 101.877 1.896l6.061-6c.253-.251.395-.592.395-.948z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26 16c0-.356-.142-.697-.395-.948l-6.061-6a1.334 1.334 0 00-1.877 1.895l5.103 5.052-5.103 5.052a1.333 1.333 0 101.877 1.896l6.061-6c.253-.251.395-.592.395-.948z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-double-chevron-up\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.114 15.003a1.334 1.334 0 011.772 0l6 5.333a1.333 1.333 0 01-1.771 1.993l-5.114-4.546-5.114 4.546a1.333 1.333 0 11-1.771-1.993l6-5.333z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.114 7.003a1.334 1.334 0 011.772 0l6 5.333a1.333 1.333 0 01-1.771 1.993l-5.114-4.546-5.114 4.546a1.333 1.333 0 11-1.771-1.993l6-5.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-double-chevron-up-circle\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 6.866a9.333 9.333 0 100 18.666 9.333 9.333 0 000-18.666zM4 16.199c0-6.627 5.373-12 12-12s12 5.373 12 12-5.373 12-12 12-12-5.373-12-12z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.114 16.337a1.334 1.334 0 011.772 0l4 3.556a1.333 1.333 0 01-1.771 1.993l-3.114-2.768-3.114 2.768a1.333 1.333 0 11-1.771-1.993l4-3.556zM15.114 9.67a1.334 1.334 0 011.772 0l4 3.556a1.333 1.333 0 01-1.771 1.993l-3.114-2.768-3.114 2.768a1.333 1.333 0 11-1.771-1.993l4-3.556z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-download\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.667 6.606V19.75a1.333 1.333 0 002.666 0V6.606a1.333 1.333 0 00-2.666 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.057 20.693a1.333 1.333 0 001.886 0l4-4a1.333 1.333 0 10-1.886-1.886L16 17.864l-3.057-3.057a1.333 1.333 0 10-1.886 1.886l4 4z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8 17.333c.736 0 1.333.597 1.333 1.333v5.333h13.333v-5.333a1.333 1.333 0 012.666 0v6.667c0 .736-.597 1.333-1.333 1.333h-16a1.333 1.333 0 01-1.333-1.333v-6.667c0-.736.597-1.333 1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-drop-pin\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 5.926a8 8 0 00-8 8c0 3.094 2.021 6.139 4.301 8.546A30.236 30.236 0 0016 25.765a30.118 30.118 0 003.699-3.293C21.979 20.065 24 17.02 24 13.926a8 8 0 00-8-8zm0 21.481l-.74 1.109-.001-.001-.002-.002-.032-.022-.088-.06a29.991 29.991 0 01-1.425-1.067 32.999 32.999 0 01-3.346-3.059c-2.386-2.519-5.032-6.214-5.032-10.38 0-5.891 4.776-10.667 10.667-10.667s10.667 4.776 10.667 10.667c0 4.166-2.646 7.861-5.032 10.38a32.892 32.892 0 01-4.453 3.901 17.1 17.1 0 01-.318.225l-.088.06-.036.024-.74-1.109zm0 0l.74 1.109a1.331 1.331 0 01-1.479 0l.74-1.109z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.556 13.926a4.444 4.444 0 118.888 0 4.444 4.444 0 01-8.888 0zM16 12.148a1.778 1.778 0 100 3.556 1.778 1.778 0 000-3.556z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-edit\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.057 5.724a1.333 1.333 0 011.886 0l5.333 5.333a1.333 1.333 0 010 1.886L12.943 26.276c-.25.25-.589.391-.943.391H6.667a1.333 1.333 0 01-1.333-1.333v-5.333c0-.354.14-.693.391-.943L19.058 5.725zM8 20.552V24h3.448l12-12L20 8.552l-12 12z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-email1\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.467 9.333c-.437 0-.8.363-.8.8v12.8c0 .437.363.8.8.8h17.067c.437 0 .8-.363.8-.8v-12.8c0-.437-.363-.8-.8-.8H7.467zm-3.467.8a3.473 3.473 0 013.467-3.467h17.067a3.473 3.473 0 013.467 3.467v12.8a3.473 3.473 0 01-3.467 3.467H7.467A3.473 3.473 0 014 22.933v-12.8z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.241 9.369a1.334 1.334 0 011.857-.328L16 15.972l9.902-6.931a1.333 1.333 0 111.529 2.185l-10.667 7.467a1.334 1.334 0 01-1.529 0L4.568 11.226a1.334 1.334 0 01-.328-1.857z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-erase-mark\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.427 8.162a1.333 1.333 0 00-1.886 0l-10.38 10.38a1.333 1.333 0 000 1.886l2.845 2.845a1.333 1.333 0 001.886 0l10.38-10.38a1.333 1.333 0 000-1.886l-2.845-2.845zm-3.771-1.886a4 4 0 015.657 0l2.845 2.845a4 4 0 010 5.657l-10.38 10.38a4 4 0 01-5.657 0l-2.845-2.845a4 4 0 010-5.657l10.38-10.38z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.212 14.654l4.583 4.583a1.333 1.333 0 11-1.886 1.886l-4.583-4.583a1.333 1.333 0 111.886-1.886z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-euro\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20 6.667a9.333 9.333 0 100 18.666 1.333 1.333 0 010 2.666c-6.627 0-12-5.373-12-12s5.373-12 12-12a1.333 1.333 0 010 2.666z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.333 13.333c0-.736.597-1.333 1.333-1.333h12a1.333 1.333 0 010 2.666h-12a1.333 1.333 0 01-1.333-1.333zM5.333 18.667c0-.736.597-1.333 1.333-1.333h12a1.333 1.333 0 010 2.666h-12a1.333 1.333 0 01-1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-exclamation\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 6.866a9.333 9.333 0 100 18.666 9.333 9.333 0 000-18.666zM4 16.199c0-6.627 5.373-12 12-12s12 5.373 12 12-5.373 12-12 12-12-5.373-12-12z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.667 20.006V20a1.333 1.333 0 012.666 0v.006a1.333 1.333 0 01-2.666 0zM16 9.333c.736 0 1.333.597 1.333 1.333v5.333a1.333 1.333 0 01-2.666 0v-5.333c0-.736.597-1.333 1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-expand\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.629 12.485l5.523-5.523a1.333 1.333 0 111.886 1.886l-5.523 5.523a1.333 1.333 0 11-1.886-1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.095 6.572c.736 0 1.333.597 1.333 1.333v5.657a1.333 1.333 0 01-2.666 0V9.238h-4.324a1.333 1.333 0 010-2.666h5.657zM14.627 19.609l-5.523 5.523a1.333 1.333 0 11-1.886-1.886l5.523-5.523a1.333 1.333 0 111.886 1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.162 25.523a1.333 1.333 0 01-1.333-1.333v-5.657a1.333 1.333 0 012.666 0v4.323h4.324a1.333 1.333 0 010 2.666H8.162z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-external-link\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.858 12.742l5.523-5.523a1.333 1.333 0 111.886 1.886l-5.523 5.523a1.333 1.333 0 11-1.886-1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.323 6.828c.736 0 1.333.597 1.333 1.333v5.657a1.333 1.333 0 01-2.666 0V9.494h-4.323a1.333 1.333 0 010-2.666h5.657zM10.667 12c-.736 0-1.333.597-1.333 1.333v8c0 .736.597 1.333 1.333 1.333h8c.736 0 1.333-.597 1.333-1.333v-2.667a1.333 1.333 0 012.666 0v2.667a4 4 0 01-4 4h-8a4 4 0 01-4-4v-8a4 4 0 014-4h2.667a1.333 1.333 0 010 2.666h-2.667z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-eye-dropper\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.804 4.702c.691.11 1.302.47 1.83.998s.888 1.139.998 1.83c.11.688-.052 1.303-.29 1.797-.384.797-1.086 1.486-1.51 1.902l-.145.143-1.897 1.897.95.95a1.333 1.333 0 010 1.886l-2.839 2.839a1.333 1.333 0 01-1.886 0l-6.625-6.625a1.333 1.333 0 010-1.886l2.839-2.839a1.334 1.334 0 011.886 0l.95.95 1.897-1.897.143-.144c.416-.424 1.105-1.126 1.902-1.51.494-.238 1.109-.4 1.797-.29zm-4.796 6.669a1.333 1.333 0 01-1.886 0l-.95-.95-.954.954 4.74 4.74.954-.954-.95-.95a1.334 1.334 0 010-1.886l2.839-2.839.181-.18c.19-.188.361-.357.528-.544.214-.24.352-.434.428-.591.07-.145.062-.205.059-.22-.002-.013-.022-.136-.25-.365s-.351-.248-.365-.25c-.015-.002-.075-.011-.22.059-.157.076-.352.214-.591.428-.187.167-.357.339-.544.528l-.18.181-2.839 2.839z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.609 12.057a1.333 1.333 0 010 1.886l-6 6c-.334.334-.627 1.107-.79 2.246-.071.497-.109.998-.13 1.459a20.494 20.494 0 001.811-.137c.621-.078 1.198-.189 1.674-.342.496-.16.765-.327.882-.444l5.333-5.333a1.333 1.333 0 111.886 1.886l-5.333 5.333c-.55.55-1.281.882-1.951 1.097-.691.222-1.447.36-2.159.449-1.416.177-2.816.177-3.486.177h-.013A1.334 1.334 0 015.999 25v-.018c0-.667 0-1.91.18-3.171.171-1.195.545-2.755 1.544-3.754l6-6a1.333 1.333 0 011.886 0z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-filter\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.799 6.087A1.333 1.333 0 018 5.334h16a1.334 1.334 0 011.045 2.163l-5.652 7.118-.187 7.022c-.009.354-.159.69-.417.933l-3.949 3.733a1.334 1.334 0 01-2.249-.969V14.599L6.956 7.496A1.333 1.333 0 016.8 6.087zM10.76 8l4.208 5.305c.187.236.289.528.289.829v8.105l1.297-1.227.184-6.914a1.33 1.33 0 01.289-.793l4.212-5.304H10.76z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-flip-horizontal\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 5.333c.736 0 1.333.597 1.333 1.333v.622a1.333 1.333 0 01-2.666 0v-.622c0-.736.597-1.333 1.333-1.333zm0 5.6c.736 0 1.333.597 1.333 1.333v1.244a1.333 1.333 0 01-2.666 0v-1.244c0-.736.597-1.333 1.333-1.333zm0 6.223c.736 0 1.333.597 1.333 1.333v1.244a1.333 1.333 0 01-2.666 0v-1.244c0-.736.597-1.333 1.333-1.333zm0 6.222c.736 0 1.333.597 1.333 1.333v.622a1.333 1.333 0 01-2.666 0v-.622c0-.736.597-1.333 1.333-1.333zM6.156 10.768A1.334 1.334 0 005.333 12v8a1.335 1.335 0 002.276.943l4-4a1.333 1.333 0 000-1.886l-4-4a1.334 1.334 0 00-1.453-.289zM8.781 16L8 16.781v-1.562l.781.781zM25.844 10.768a1.334 1.334 0 00-1.453.289l-4 4a1.333 1.333 0 000 1.886l4 4A1.334 1.334 0 0026.667 20v-8c0-.539-.325-1.025-.823-1.232zM24 15.219v1.562L23.219 16l.781-.781z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-flip-vertical\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26.667 16c0 .736-.597 1.333-1.333 1.333h-.622a1.333 1.333 0 010-2.666h.622c.736 0 1.333.597 1.333 1.333zm-5.6 0c0 .736-.597 1.333-1.333 1.333H18.49a1.333 1.333 0 010-2.666h1.244c.736 0 1.333.597 1.333 1.333zm-6.223 0c0 .736-.597 1.333-1.333 1.333h-1.244a1.333 1.333 0 010-2.666h1.244c.736 0 1.333.597 1.333 1.333zm-6.222 0c0 .736-.597 1.333-1.333 1.333h-.622a1.333 1.333 0 010-2.666h.622c.736 0 1.333.597 1.333 1.333zM21.232 6.156A1.334 1.334 0 0020 5.333h-8a1.335 1.335 0 00-.943 2.276l4 4a1.333 1.333 0 001.886 0l4-4c.381-.381.495-.955.289-1.453zM16 8.781L15.219 8h1.562L16 8.781zM21.232 25.844a1.334 1.334 0 00-.289-1.453l-4-4a1.333 1.333 0 00-1.886 0l-4 4A1.334 1.334 0 0012 26.667h8c.539 0 1.025-.325 1.232-.823zM16.781 24h-1.562l.781-.781.781.781z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-folder-closed\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.467 8c-.477 0-.8.367-.8.741v14.518c0 .374.323.741.8.741h17.067c.477 0 .8-.367.8-.741V11.852c0-.374-.323-.741-.8-.741h-9.6c-.44 0-.851-.217-1.1-.579L12.098 8H7.467zM4 8.741c0-1.917 1.588-3.407 3.467-3.407H12.8c.44 0 .851.217 1.1.579l1.736 2.532h8.898c1.879 0 3.467 1.49 3.467 3.407v11.407c0 1.917-1.588 3.407-3.467 3.407H7.467C5.588 26.666 4 25.176 4 23.259V8.741z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-folder-open\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.133 8h4.631l1.736 2.532c.249.363.66.579 1.1.579h9.6c.477 0 .8.367.8.741v2.815H9.243c-.568 0-1.073.359-1.259.896l-2.65 7.627V8.741c0-.374.323-.741.8-.741zm20.534 6.667h2.667a1.332 1.332 0 011.23 1.847l-3.892 9.333c-.207.497-.693.82-1.231.82H6c-.071 0-.142-.006-.211-.017-1.725-.169-3.122-1.592-3.122-3.391V8.741c0-1.917 1.588-3.407 3.467-3.407h5.333c.44 0 .851.217 1.1.579l1.736 2.532h8.898c1.879 0 3.467 1.49 3.467 3.407v2.815zM24.553 24l2.78-6.667H10.192L7.875 24h16.678z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-full-star\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 5.333l3.296 6.677 7.371 1.077-5.333 5.195 1.259 7.339-6.592-3.467-6.592 3.467 1.259-7.339-5.333-5.195 7.371-1.077 3.296-6.677z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-half-star\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.408 25.621L16 22.154V5.333l-3.296 6.677-7.371 1.077 5.333 5.195-1.259 7.339z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-hamburger-menu\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.333 14.667c0-.736.597-1.333 1.333-1.333h18.667a1.333 1.333 0 010 2.666H6.666a1.333 1.333 0 01-1.333-1.333zM5.333 6.667c0-.736.597-1.333 1.333-1.333h18.667a1.333 1.333 0 010 2.666H6.666a1.333 1.333 0 01-1.333-1.333zM5.333 22.667c0-.736.597-1.333 1.333-1.333h18.667a1.333 1.333 0 010 2.666H6.666a1.333 1.333 0 01-1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-home\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.175 4.452a1.334 1.334 0 011.65 0l9.333 7.35c.321.253.508.639.508 1.048V24.4c0 1.881-1.51 3.433-3.407 3.433H8.741c-1.897 0-3.407-1.553-3.407-3.433V12.85c0-.409.187-.795.508-1.048l9.333-7.35zM8 13.497V24.4c0 .439.347.767.741.767h14.518A.754.754 0 0024 24.4V13.497l-8-6.3-8 6.3z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.167 15.87c0-.736.597-1.333 1.333-1.333h7c.736 0 1.333.597 1.333 1.333v9.333a1.333 1.333 0 01-2.666 0v-8h-4.333v8a1.333 1.333 0 01-2.666 0V15.87z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-image\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.333 12a.667.667 0 100 1.334.667.667 0 000-1.334zM16 12.667a3.333 3.333 0 116.665 0 3.333 3.333 0 01-6.665 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 8a4 4 0 014-4h16a4 4 0 014 4v16a4 4 0 01-4 4H8a4 4 0 01-4-4V8zm4-1.333c-.736 0-1.333.597-1.333 1.333v16c0 .736.597 1.333 1.333 1.333h16c.736 0 1.333-.597 1.333-1.333V8c0-.736-.597-1.333-1.333-1.333H8z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.943 13.724a1.333 1.333 0 00-1.886 0L4.39 20.391a1.333 1.333 0 101.886 1.886L12 16.553 23.057 27.61a1.333 1.333 0 101.886-1.886l-12-12z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-increase-height\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.667 19.75V6.606a1.333 1.333 0 012.666 0V19.75a1.333 1.333 0 01-2.666 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.057 5.663a1.333 1.333 0 011.886 0l4 4a1.333 1.333 0 11-1.886 1.886L16 8.492l-3.057 3.057a1.333 1.333 0 11-1.886-1.886l4-4zM9.333 25.333c0-.736.597-1.333 1.333-1.333h10.667a1.333 1.333 0 010 2.666H10.666a1.333 1.333 0 01-1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-info-circle\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 6.866a9.333 9.333 0 100 18.666 9.333 9.333 0 000-18.666zM4 16.199c0-6.627 5.373-12 12-12s12 5.373 12 12-5.373 12-12 12-12-5.373-12-12z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 14.667c.736 0 1.333.597 1.333 1.333v5.333a1.333 1.333 0 01-2.666 0V16c0-.736.597-1.333 1.333-1.333zM16 9.333c.736 0 1.333.597 1.333 1.333v1.333a1.333 1.333 0 01-2.666 0v-1.333c0-.736.597-1.333 1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-information\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 7.333c-.24 0-.667.262-.667.889v12.889c0 1.264.294 2.123.755 2.652.432.496 1.186.903 2.578.903h9.333c.239 0 .667-.262.667-.889V8.221c0-.627-.427-.889-.667-.889h-12zm-3.333.889c0-1.828 1.364-3.556 3.333-3.556h12c1.97 0 3.333 1.728 3.333 3.556v15.555c0 1.828-1.364 3.556-3.333 3.556h-9.333c-1.941 0-3.521-.593-4.589-1.819-1.039-1.193-1.411-2.779-1.411-4.403V8.222z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 12c0-.736.597-1.333 1.333-1.333h5.333a1.333 1.333 0 010 2.666h-5.333A1.333 1.333 0 0112 12zM12 16c0-.736.597-1.333 1.333-1.333h5.333a1.333 1.333 0 010 2.666h-5.333A1.333 1.333 0 0112 16z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-label\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 5.333C4 4.597 4.597 4 5.333 4h11.128c.354 0 .693.14.943.391l9.561 9.561a3.559 3.559 0 010 5.018l-7.981 7.981a3.56 3.56 0 01-5.036.001L4.39 17.405a1.334 1.334 0 01-.391-.943V5.334zm2.667 1.334v9.241l9.169 9.158a.895.895 0 001.262 0l7.976-7.976.001-.001a.891.891 0 000-1.256l-.001-.001-9.165-9.165H6.667z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-lightning-bolt\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.471 4.073c.595.205.966.797.89 1.422l-.855 7.039h5.161a1.335 1.335 0 011.143 2.021l-7.704 12.8a1.332 1.332 0 01-2.466-.849l.855-7.039H9.334a1.335 1.335 0 01-1.143-2.021l7.704-12.8a1.332 1.332 0 011.576-.573zM11.692 16.8H16a1.331 1.331 0 011.324 1.494l-.284 2.336 3.268-5.43H16a1.335 1.335 0 01-1.324-1.494l.284-2.336-3.268 5.43z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-like\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.873 4.785A1.333 1.333 0 0115.088 4c2.512 0 4.585 2.01 4.585 4.533v2.933h4.795a3.516 3.516 0 012.666 1.184c.678.767.982 1.793.826 2.806l-1.496 9.6c-.266 1.72-1.767 2.959-3.492 2.944H7.5c-1.913 0-3.501-1.532-3.501-3.467v-7.467c0-1.935 1.588-3.467 3.501-3.467h2.391l3.981-8.815zm-1.787 20.548h10.907a.824.824 0 00.835-.683l1.496-9.6a.777.777 0 00-.189-.634.85.85 0 00-.646-.283H18.339a1.333 1.333 0 01-1.333-1.333V8.533a1.87 1.87 0 00-1.131-1.703l-3.789 8.391v10.113zm-2.667-9.066H7.501a.817.817 0 00-.834.8v7.467c0 .422.353.8.834.8h1.918v-9.067z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-linked\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.619 25.381a5.332 5.332 0 010-7.542l1.886-1.886a5.332 5.332 0 117.542 7.542l-1.886 1.886a5.332 5.332 0 01-7.542 0zm1.886-5.657a2.667 2.667 0 003.771 3.771l1.886-1.886a2.667 2.667 0 00-3.771-3.771l-1.886 1.886z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.953 16.047a5.332 5.332 0 010-7.542l1.886-1.886a5.332 5.332 0 117.542 7.542l-1.886 1.886a5.332 5.332 0 01-7.542 0zm1.885-5.656a2.667 2.667 0 003.771 3.771l1.886-1.886a2.667 2.667 0 00-3.771-3.771l-1.886 1.886z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-locked\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.667 17.339a4 4 0 014-4h10.667a4 4 0 014 4v4.741a4 4 0 01-4 4H10.667a4 4 0 01-4-4v-4.741zm4-1.334c-.736 0-1.333.597-1.333 1.333v4.741c0 .736.597 1.333 1.333 1.333h10.667c.736 0 1.333-.597 1.333-1.333v-4.741c0-.736-.597-1.333-1.333-1.333H10.667z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.943 9.155c-.537.663-.795 1.621-.795 2.702v1.481a1.333 1.333 0 01-2.666 0v-1.481c0-1.443.335-3.08 1.39-4.382C11.968 6.123 13.678 5.333 16 5.333c2.141 0 3.717.839 4.711 2.193.944 1.286 1.261 2.892 1.263 4.319L22 13.31a1.333 1.333 0 01-1.125 1.341h-.001l-.003.001-.012.002-.049.006a1.337 1.337 0 01-1.445-.99c-.029-.111-.038-.202-.042-.238-.008-.093-.007-.215-.007-.271V13.141a48.93 48.93 0 00-.01-1.26v-.024c0-1.094-.249-2.078-.745-2.753-.448-.61-1.193-1.105-2.562-1.105-1.678 0-2.56.542-3.057 1.155zm9.04 4.107v-.006z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-magic-wand\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.154 5.652c.441.27.685.771.628 1.285l-.352 3.148 2.303 1.95a1.334 1.334 0 01-.536 2.311l-3.048.769-1.226 2.995a1.334 1.334 0 01-2.394.153l-1.493-2.635-3.026-.136a1.332 1.332 0 01-.949-2.203l2.114-2.45-.696-3.066a1.333 1.333 0 011.816-1.525l2.782 1.169 2.647-1.74a1.334 1.334 0 011.43-.023zm-2.338 3.811l-.867.57a1.333 1.333 0 01-1.249.115l-1.047-.44.271 1.194a1.33 1.33 0 01-.291 1.166l-.76.881 1.019.046c.458.021.874.276 1.1.675l.503.888.441-1.077c.16-.392.497-.684.908-.788l1.187-.299-.867-.734a1.331 1.331 0 01-.463-1.166l.115-1.031z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.391 14.391a1.333 1.333 0 011.886 0l8.667 8.667a1.333 1.333 0 11-1.886 1.886l-8.667-8.667a1.333 1.333 0 010-1.886z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-mark-floor\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.342 13.507a1.33 1.33 0 011.291-.013l4.591 2.48 5.631.806a1.333 1.333 0 01.741 2.275l-4.515 4.393a1.304 1.304 0 01-.105.092l-6.152 4.842a1.332 1.332 0 01-1.697-.04l-5.57-4.822a.878.878 0 01-.046-.04l-5.05-4.372a1.335 1.335 0 01.69-2.329l5.842-.805 4.349-2.466zm-4.133 5.128l-2.776.382 2.173 1.881 2.58-1.299-1.977-.965zm4.988 2.434l-3.411 1.717 3.255 2.818 3.617-2.847-3.461-1.689zm5.697-.187l1.899-1.847-2.767-.396-1.836.924 2.704 1.319zm-3.977-3.664l-1.902-1.027-1.728.98 1.891.923 1.739-.875z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-mark-furniture\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.667 13.335a1.333 1.333 0 01-2.666-.001h1.333l-1.333-.001v-.039l.002-.079a9.606 9.606 0 01.12-1.141 9.551 9.551 0 01.852-2.669c.496-.992 1.26-2.024 2.432-2.805 1.18-.787 2.694-1.266 4.594-1.266s3.414.479 4.594 1.266c1.172.781 1.936 1.813 2.432 2.805.493.986.733 1.956.852 2.669a9.647 9.647 0 01.12 1.141l.002.079v.039l-1.333.001h1.333a1.333 1.333 0 01-2.666.005v-.003l-.001-.033a7.118 7.118 0 00-.085-.792 6.883 6.883 0 00-.606-1.915c-.338-.675-.823-1.31-1.526-1.778C18.422 8.355 17.436 8 16.002 8s-2.42.355-3.115.818c-.703.469-1.189 1.103-1.526 1.779a6.879 6.879 0 00-.607 1.915 6.756 6.756 0 00-.085.792l-.001.032zm0 0v0zm10.666.001z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.207 15.495c-.609-.868-1.63-1.056-2.448-.55-.255.158-.503.46-.707.97-.203.509-.325 1.13-.385 1.772a12.421 12.421 0 000 2.215l.013.137.003.031.001.004-1.323.165-1.323.164V20.4l-.001-.005-.002-.016-.006-.053a14.545 14.545 0 01-.077-1.42c-.004-.434.01-.938.06-1.467.074-.785.232-1.681.564-2.512.331-.829.876-1.689 1.78-2.249 2.058-1.273 4.639-.701 6.034 1.286.927 1.321.655 2.697.125 3.733-.499.975-1.326 1.871-1.931 2.526l-.003.003c-.631.683-.98 1.581-1.165 2.38a7.366 7.366 0 00-.176 1.242l-.002.061v.009-.004.004a1.333 1.333 0 01-1.225 1.324l.318 1.033a1.333 1.333 0 11-2.549.785l-.558-1.814h-8.209l-.558 1.814a1.333 1.333 0 11-2.549-.785l.318-1.033a1.331 1.331 0 01-1.222-1.426v-.002l.001-.021.005-.098a7.99 7.99 0 00-.094-1.59c-.075-.451-.192-.842-.346-1.126-.149-.274-.285-.367-.385-.402-1.584-.571-2.653-1.613-3.036-2.95-.373-1.301-.022-2.63.701-3.661 1.395-1.987 3.976-2.559 6.034-1.286.904.559 1.448 1.42 1.78 2.249.332.831.49 1.727.564 2.512.05.53.063 1.033.06 1.467h5.664zm-14.65 4.579v-.004l.003-.031.013-.137a12.421 12.421 0 000-2.215c-.06-.643-.182-1.264-.385-1.772-.204-.511-.451-.813-.707-.97-.818-.506-1.839-.318-2.448.55-.356.507-.429 1.014-.32 1.395.099.344.417.83 1.378 1.177.894.323 1.467.984 1.822 1.637.35.644.533 1.356.634 1.963.053.32.086.629.107.912h11.049c.031-.179.068-.372.115-.574.24-1.038.738-2.435 1.804-3.589.656-.71 1.215-1.34 1.518-1.933.273-.533.218-.771.066-.987zm12.349 3.838l1.333.001c0 .001 0 0 0 0l-1.333-.001zm-12.349-3.838l1.323.165zm9.804 1.498h-8.482a1.332 1.332 0 01-1.323-1.498zm0 0c.382 0 .746-.164.999-.451zm1-.451c.253-.286.371-.668.324-1.047zm-10.805-1.046z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.333 13.333a1.333 1.333 0 11-2.667 0 1.333 1.333 0 012.667 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 14.667A1.333 1.333 0 1016 12a1.333 1.333 0 000 2.667z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-mark-tool\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 9.333A1.333 1.333 0 1016 12a1.333 1.333 0 000-2.667zm-4 1.334a4 4 0 118 0 4 4 0 01-8 0zM20.242 16.93a1.333 1.333 0 011.674-.868c.187.059.37.121.548.185a1.333 1.333 0 11-.903 2.509 12.506 12.506 0 00-.451-.152 1.333 1.333 0 01-.868-1.674zm-8.545.028a1.333 1.333 0 01-.858 1.679c-.153.049-.301.101-.444.153a1.333 1.333 0 11-.915-2.505c.176-.064.356-.126.539-.185a1.333 1.333 0 011.679.858zm13.165 1.753a1.333 1.333 0 011.667.882 3.084 3.084 0 01-.004 1.843 1.334 1.334 0 01-2.547-.789.429.429 0 00.003-.269 1.332 1.332 0 01.882-1.666zm-17.727.007c.704.216 1.099.962.883 1.666a.41.41 0 00.004.263 1.334 1.334 0 01-2.547.789 3.15 3.15 0 01-.142-.932c0-.311.047-.613.136-.903a1.333 1.333 0 011.666-.883zm1.704 4.457a1.333 1.333 0 011.7-.815c.293.103.607.199.94.287a1.334 1.334 0 01-.679 2.579 15.443 15.443 0 01-1.147-.35 1.334 1.334 0 01-.815-1.701zm14.322 0a1.333 1.333 0 01-.815 1.701 14.42 14.42 0 01-1.147.35 1.334 1.334 0 01-.679-2.579c.332-.087.646-.184.94-.287a1.333 1.333 0 011.701.815zm-9.04 1.309a1.334 1.334 0 011.366-1.3 21.682 21.682 0 001.026 0 1.334 1.334 0 01.066 2.666 22.248 22.248 0 01-1.158 0 1.334 1.334 0 01-1.3-1.366z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 13.333c.736 0 1.333.597 1.333 1.333v5.333a1.333 1.333 0 01-2.666 0v-5.333c0-.736.597-1.333 1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-master-card\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.219 21.863c0 .252-.17.433-.415.433-.252 0-.415-.193-.415-.433s.163-.433.415-.433c.244 0 .415.193.415.433zm-11.512-.433c-.263 0-.415.193-.415.433s.152.433.415.433c.241 0 .404-.181.404-.433-.004-.241-.163-.433-.404-.433zm4.352-.011c-.2 0-.322.13-.352.322h.707c-.033-.211-.163-.322-.356-.322zm3.993.011c-.252 0-.404.193-.404.433s.152.433.404.433.415-.181.415-.433c0-.241-.163-.433-.415-.433zm3.922.966c0 .011.011.019.011.041 0 .011-.011.019-.011.041-.011.011-.011.019-.019.03-.011.011-.019.018-.041.018-.011.011-.019.011-.041.011-.011 0-.019 0-.041-.011-.011 0-.019-.011-.03-.018-.011-.011-.019-.019-.019-.03-.011-.019-.011-.03-.011-.041 0-.019 0-.03.011-.041 0-.019.011-.03.019-.041.011-.011.019-.011.03-.019.019-.011.03-.011.041-.011.018 0 .03 0 .041.011.019.011.03.011.041.019s.007.022.019.041zm-.081.052c.019 0 .019-.011.03-.011.011-.011.011-.019.011-.03s0-.019-.011-.03c-.011 0-.019-.011-.041-.011h-.059v.13h.03v-.052h.011l.041.052h.03l-.041-.048zm2.774-12.781v13.037c0 .981-.796 1.778-1.778 1.778H7.111a1.779 1.779 0 01-1.778-1.778V9.667c0-.981.796-1.778 1.778-1.778h17.778c.981 0 1.778.796 1.778 1.778zm-18.963 5.17c0 2.833 2.3 5.13 5.13 5.13a5.163 5.163 0 002.833-.856c-2.7-2.196-2.681-6.341 0-8.537a5.127 5.127 0 00-7.963 4.263zM16 18.867c2.611-2.037 2.6-6.007 0-8.056-2.6 2.048-2.611 6.022 0 8.056zm-5.27 2.826c0-.322-.211-.533-.544-.544a.53.53 0 00-.474.241c-.089-.152-.241-.241-.452-.241a.472.472 0 00-.393.2v-.163h-.304v1.359h.304c0-.7-.093-1.119.333-1.119.378 0 .304.378.304 1.119h.293c0-.678-.093-1.119.333-1.119.378 0 .304.37.304 1.119h.304v-.852h-.007zm1.663-.508H12.1v.163a.535.535 0 00-.433-.2c-.381 0-.674.304-.674.715 0 .415.293.715.674.715.193 0 .333-.07.433-.2v.17h.293v-1.363zm1.5.948c0-.556-.848-.304-.848-.563 0-.211.441-.178.685-.041l.122-.241c-.348-.226-1.119-.222-1.119.304 0 .53.848.307.848.556 0 .233-.5.215-.767.03l-.13.233c.415.281 1.207.222 1.207-.278zm1.311.345l-.081-.252c-.141.078-.452.163-.452-.152v-.615h.485v-.274h-.485v-.415h-.304v.415h-.281v.27h.281v.619c0 .652.641.533.837.404zm.492-.497h1.019c0-.6-.274-.837-.644-.837-.393 0-.674.293-.674.715 0 .759.837.885 1.252.526l-.141-.222c-.289.237-.726.215-.811-.181zm2.189-.796c-.17-.074-.43-.067-.563.163v-.163h-.304v1.359h.304v-.767c0-.43.352-.374.474-.311l.089-.281zm.393.678c0-.422.43-.559.767-.311l.141-.241c-.43-.337-1.211-.152-1.211.556 0 .733.83.881 1.211.556l-.141-.241c-.341.241-.767.096-.767-.319zm2.47-.678h-.304v.163c-.307-.407-1.107-.178-1.107.515 0 .711.83.915 1.107.515v.17h.304v-1.363zm1.248 0c-.089-.044-.407-.107-.563.163v-.163h-.293v1.359h.293v-.767c0-.407.333-.381.474-.311l.089-.281zm1.493-.552h-.293v.715c-.304-.404-1.107-.189-1.107.515 0 .719.833.911 1.107.515v.17h.293v-1.915zm.281-2.781v.17h.03v-.17h.07v-.03h-.17v.03h.07zm.245 4.585c0-.019 0-.041-.011-.059-.011-.011-.019-.03-.03-.041s-.03-.019-.041-.03c-.019 0-.041-.011-.059-.011-.011 0-.03.011-.052.011a.155.155 0 00-.041.03c-.019.011-.03.03-.03.041-.011.019-.011.041-.011.059 0 .011 0 .03.011.052 0 .011.011.03.03.041a.131.131 0 00.041.03c.019.011.041.011.052.011.018 0 .041 0 .059-.011.011-.011.03-.018.041-.03s.018-.03.03-.041c.011-.022.011-.041.011-.052zm.118-4.618h-.052l-.059.13-.059-.13h-.052v.2h.03v-.152l.059.13h.041l.052-.13v.152h.041v-.2zm.163-2.982c0-2.822-2.3-5.122-5.13-5.122a5.163 5.163 0 00-2.833.856c2.67 2.196 2.711 6.352 0 8.537a5.126 5.126 0 007.963-4.271z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-message\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.589 6.667a8.6 8.6 0 00-3.899.923l-.005.003a8.74 8.74 0 00-4.833 7.815v.003a8.6 8.6 0 00.923 3.899c.16.317.187.685.075 1.023l-1.409 4.226 4.226-1.409a1.337 1.337 0 011.023.075 8.588 8.588 0 003.899.923h.003a8.74 8.74 0 007.815-4.833l.003-.005a8.588 8.588 0 00.923-3.899l1.333-.004h-1.333v-.555a8.717 8.717 0 00-8.186-8.186h-.558zM28 15.406a11.269 11.269 0 01-1.209 5.104 11.406 11.406 0 01-10.197 6.305h-.001l-.001-1.333.003 1.333h-.001a11.264 11.264 0 01-4.592-.966l.508-.169-.422-1.265-.601 1.19c.17.086.342.167.515.244l-6.248 2.083a1.332 1.332 0 01-1.686-1.686l2.083-6.248c.077.173.158.345.244.515l1.19-.601-1.265-.422-.169.508a11.261 11.261 0 01-.966-4.592zM11.49 5.209A11.269 11.269 0 0116.594 4h.591l.073.002a11.383 11.383 0 0110.739 10.739l.002.073v.591z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-minus\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24 15.985c0-.736-.597-1.333-1.333-1.333H9.334a1.333 1.333 0 000 2.666h13.333c.736 0 1.333-.597 1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-moon\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.679 6.012a1.334 1.334 0 00.089 1.447 5.941 5.941 0 01-8.31 8.31 1.334 1.334 0 00-2.12 1.195 10.687 10.687 0 0021.322-.655A10.687 10.687 0 0016.962 5.34a1.334 1.334 0 00-1.284.673zm3.602 2.657a8.022 8.022 0 01-3.055 15.327 8.021 8.021 0 01-7.557-4.715A8.61 8.61 0 0019.28 8.67z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-move\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.667 26.667V5.334a1.333 1.333 0 012.666 0v21.333a1.333 1.333 0 01-2.666 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.057 4.391a1.333 1.333 0 011.886 0l2.667 2.667a1.333 1.333 0 11-1.886 1.886L16 7.22l-1.724 1.724a1.333 1.333 0 11-1.886-1.886l2.667-2.667zM15.057 27.609a1.333 1.333 0 001.886 0l2.667-2.667a1.333 1.333 0 10-1.886-1.886L16 24.78l-1.724-1.724a1.333 1.333 0 10-1.886 1.886l2.667 2.667zM26.667 17.333H5.334a1.333 1.333 0 010-2.666h21.333a1.333 1.333 0 010 2.666z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.391 16.943a1.333 1.333 0 010-1.886l2.667-2.667a1.333 1.333 0 111.886 1.886L7.22 16l1.724 1.724a1.333 1.333 0 11-1.886 1.886l-2.667-2.667zM27.609 16.943a1.333 1.333 0 000-1.886l-2.667-2.667a1.333 1.333 0 10-1.886 1.886L24.78 16l-1.724 1.724a1.333 1.333 0 101.886 1.886l2.667-2.667z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-move-camera-down\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.04 21.333C11.838 22.497 13.366 24 16 24s4.162-1.503 4.96-2.667c-.798-1.164-2.326-2.667-4.96-2.667s-4.162 1.503-4.96 2.667zm-2.572-.921C9.366 18.886 11.641 16 16 16s6.634 2.885 7.532 4.412a1.802 1.802 0 010 1.843c-.898 1.526-3.173 4.412-7.532 4.412s-6.634-2.885-7.532-4.412a1.802 1.802 0 010-1.843z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.667 21.34v-.006a1.333 1.333 0 012.666 0v.006a1.333 1.333 0 01-2.666 0zM14.667 6.606v6.477a1.333 1.333 0 002.666 0V6.606a1.333 1.333 0 00-2.666 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.057 14.026a1.333 1.333 0 001.886 0l4-4a1.333 1.333 0 10-1.886-1.886L16 11.197 12.943 8.14a1.333 1.333 0 10-1.886 1.886l4 4z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-move-camera-up\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.04 21.333C11.838 22.497 13.366 24 16 24s4.162-1.503 4.96-2.667c-.798-1.164-2.326-2.667-4.96-2.667s-4.162 1.503-4.96 2.667zm-2.572-.921C9.366 18.886 11.641 16 16 16s6.634 2.885 7.532 4.412a1.802 1.802 0 010 1.843c-.898 1.526-3.173 4.412-7.532 4.412s-6.634-2.885-7.532-4.412a1.802 1.802 0 010-1.843z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.667 21.34v-.006a1.333 1.333 0 012.666 0v.006a1.333 1.333 0 01-2.666 0zM14.667 13.083V6.606a1.333 1.333 0 012.666 0v6.477a1.333 1.333 0 01-2.666 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.057 5.663a1.333 1.333 0 011.886 0l4 4a1.333 1.333 0 11-1.886 1.886L16 8.492l-3.057 3.057a1.333 1.333 0 11-1.886-1.886l4-4z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-multishot\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 12c-.736 0-1.333.597-1.333 1.333v5.333c0 .736.597 1.333 1.333 1.333h8c.736 0 1.333-.597 1.333-1.333v-.119a1.333 1.333 0 012.666 0v.119a4 4 0 01-4 4h-8a4 4 0 01-4-4v-5.333a4 4 0 014-4h.444a1.333 1.333 0 010 2.666h-.444z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8 16c-.736 0-1.333.597-1.333 1.333v5.333c0 .736.597 1.333 1.333 1.333h8c.736 0 1.333-.597 1.333-1.333v-.119a1.333 1.333 0 012.666 0v.119a4 4 0 01-4 4h-8a4 4 0 01-4-4v-5.333a4 4 0 014-4h.444a1.333 1.333 0 010 2.666h-.444z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 8c-.736 0-1.333.597-1.333 1.333v5.333c0 .736.597 1.333 1.333 1.333h8c.737 0 1.333-.597 1.333-1.333V9.332c0-.736-.597-1.333-1.333-1.333h-8zm-4 1.333a4 4 0 014-4h8a4 4 0 014 4v5.334a3.999 3.999 0 01-4 3.999h-8a4 4 0 01-4-4V9.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-notification-off\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.439 27.821c.61.413 1.439.253 1.852-.357L24.624 4.81a1.334 1.334 0 00-2.208-1.495L7.083 25.969a1.332 1.332 0 00.357 1.851z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.65 22.669H5.333a1.333 1.333 0 010-2.666A1.867 1.867 0 007.2 18.136v-5.333a8.8 8.8 0 018.8-8.8c1.032 0 2.023.178 2.944.504l-1.568 2.317a6.133 6.133 0 00-7.508 5.978v5.115l-3.216 4.752zm3.221 0h16.796v-2.667a1.867 1.867 0 01-1.867-1.867v-5.333a8.789 8.789 0 00-3.497-7.024l-1.498 2.213a6.123 6.123 0 012.328 4.811v5.333c0 .665.143 1.297.401 1.867H11.675L9.87 22.669zm4.284 1.6a1.333 1.333 0 00-1.153 2.003 3.467 3.467 0 005.998 0 1.335 1.335 0 00-1.153-2.003h-3.691z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-notification-on\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 6.669a6.133 6.133 0 016.133 6.133v5.333c0 .665.143 1.297.401 1.867H9.465a4.509 4.509 0 00.401-1.867v-5.333a6.133 6.133 0 016.133-6.133zm10.667 13.333a1.867 1.867 0 01-1.867-1.867v-5.333a8.8 8.8 0 00-17.6 0v5.333a1.867 1.867 0 01-1.867 1.867 1.333 1.333 0 000 2.666h21.333v-2.667zm-13.668 4.934a1.334 1.334 0 011.155-.668h3.691a1.333 1.333 0 011.153 2.003 3.467 3.467 0 01-5.998 0 1.335 1.335 0 01-.002-1.335z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-options\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 6.667A2.667 2.667 0 016.667 4H12a2.667 2.667 0 012.667 2.667V12A2.667 2.667 0 0112 14.667H6.667A2.667 2.667 0 014 12V6.667zm8 0H6.667V12H12V6.667zM17.333 6.667A2.667 2.667 0 0120 4h5.333A2.667 2.667 0 0128 6.667V12a2.667 2.667 0 01-2.667 2.667H20A2.667 2.667 0 0117.333 12V6.667zm8 0H20V12h5.333V6.667zM4 20a2.667 2.667 0 012.667-2.667H12A2.667 2.667 0 0114.667 20v5.333A2.667 2.667 0 0112 28H6.667A2.667 2.667 0 014 25.333V20zm8 0H6.667v5.333H12V20zM17.333 20A2.667 2.667 0 0120 17.333h5.333A2.667 2.667 0 0128 20v5.333A2.667 2.667 0 0125.333 28H20a2.667 2.667 0 01-2.667-2.667V20zm8 0H20v5.333h5.333V20z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-paste\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 10c-.467 0-.667.327-.667.519v12.963c0 .192.2.519.667.519h12c.467 0 .667-.327.667-.519V10.519c0-.192-.2-.519-.667-.519h-2a1.333 1.333 0 010-2.666h2c1.742 0 3.333 1.331 3.333 3.185v12.963c0 1.854-1.591 3.185-3.333 3.185H10c-1.742 0-3.333-1.331-3.333-3.185V10.519c0-1.854 1.591-3.185 3.333-3.185h2A1.333 1.333 0 0112 10h-2z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.667 8a2.667 2.667 0 012.667-2.667h5.333A2.667 2.667 0 0121.334 8v1.333A2.667 2.667 0 0118.667 12h-5.333a2.667 2.667 0 01-2.667-2.667V8zm8 0h-5.333v1.333h5.333V8z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-paypal\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.233 16.23a.794.794 0 01-.815.796c-.341 0-.593-.193-.593-.555 0-.452.352-.815.804-.815.344 0 .604.211.604.574zm-3.918-1.797h-.174c-.056 0-.111.037-.119.1l-.159.989.304-.011c.407 0 .722-.055.796-.526.085-.496-.23-.552-.648-.552zm10.518 0h-.167c-.067 0-.111.037-.119.1l-.156.989.296-.011c.481 0 .815-.111.815-.667-.004-.393-.356-.411-.67-.411zm7.834-4.803v13.037c0 .981-.796 1.778-1.778 1.778H7.111a1.779 1.779 0 01-1.778-1.778V9.63c0-.981.796-1.778 1.778-1.778h17.778c.981 0 1.778.796 1.778 1.778zm-16.582 5.014c0-.778-.6-1.037-1.285-1.037H7.319a.196.196 0 00-.193.174l-.607 3.781c-.011.074.044.148.119.148h.704c.1 0 .193-.107.204-.211l.167-.985c.037-.267.489-.174.667-.174 1.059 0 1.707-.63 1.707-1.696zm3.119.326H12.5c-.141 0-.148.204-.156.304-.215-.315-.526-.37-.878-.37-.907 0-1.6.796-1.6 1.674 0 .722.452 1.193 1.174 1.193.333 0 .748-.181.981-.441a.968.968 0 00-.037.23c0 .085.037.148.119.148h.637c.1 0 .185-.107.204-.211l.378-2.381c.011-.07-.044-.144-.119-.144zm1.5 3.626l2.359-3.43c.019-.019.019-.037.019-.063 0-.063-.056-.13-.119-.13h-.711a.21.21 0 00-.167.093l-.981 1.444-.407-1.389a.226.226 0 00-.204-.148H13.8c-.063 0-.119.067-.119.13 0 .044.722 2.104.785 2.3-.1.141-.759 1.059-.759 1.17 0 .067.055.118.118.118h.711a.22.22 0 00.167-.096zm5.9-3.952c0-.778-.6-1.037-1.285-1.037h-1.47c-.1 0-.193.074-.204.174l-.6 3.778c-.007.074.048.148.119.148h.759c.074 0 .13-.056.148-.119l.167-1.074c.037-.267.489-.174.667-.174 1.052 0 1.7-.63 1.7-1.696zm3.118.326h-.704c-.141 0-.148.204-.159.304-.204-.315-.518-.37-.878-.37-.907 0-1.6.796-1.6 1.674 0 .722.452 1.193 1.174 1.193.344 0 .759-.181.981-.441-.011.056-.037.174-.037.23 0 .085.037.148.119.148h.641c.1 0 .185-.107.204-.211l.378-2.381c.011-.07-.045-.144-.119-.144zm1.759-1.233c0-.074-.056-.13-.119-.13h-.685c-.055 0-.111.044-.119.1l-.6 3.852-.011.019c0 .067.056.13.13.13h.611c.093 0 .185-.107.193-.211l.6-3.748v-.011zm-3.333 1.919a.8.8 0 00-.804.815c0 .359.259.555.6.555a.79.79 0 00.804-.796c.004-.363-.256-.574-.6-.574z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-paypal-mini\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.519 18.815c-.194 1.067-.967 6.04-1.195 7.446-.017.1-.056.139-.167.139H6.012a.675.675 0 01-.672-.772L8.596 4.962a1.128 1.128 0 011.111-.939c8.463 0 9.174-.206 11.336.633 3.34 1.295 3.645 4.418 2.445 7.796-1.195 3.479-4.029 4.973-7.785 5.018-2.412.039-3.862-.389-4.184 1.345zm13.653-7.997c-.1-.072-.139-.1-.167.072-.111.633-.283 1.25-.489 1.867-2.217 6.324-8.363 5.774-11.364 5.774-.339 0-.561.183-.606.522-1.256 7.802-1.506 9.43-1.506 9.43-.056.395.194.717.589.717h3.529c.478 0 .872-.35.967-.828.039-.3-.061.339.8-5.073.256-1.222.795-1.095 1.628-1.095 3.945 0 7.024-1.6 7.941-6.24.361-1.934.256-3.968-1.323-5.146z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-plus\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.971 8c.736 0 1.333.597 1.333 1.333v13.333a1.333 1.333 0 01-2.666 0V9.333c0-.736.597-1.333 1.333-1.333z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24 15.985c0-.736-.597-1.333-1.333-1.333H9.334a1.333 1.333 0 000 2.666h13.333c.736 0 1.333-.597 1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-plus-circle\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 9.333c.736 0 1.333.597 1.333 1.333v10.667a1.333 1.333 0 01-2.666 0V10.666c0-.736.597-1.333 1.333-1.333z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.667 16c0-.736-.597-1.333-1.333-1.333H10.667a1.333 1.333 0 000 2.666h10.667c.736 0 1.333-.597 1.333-1.333z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 6.866a9.333 9.333 0 100 18.666 9.333 9.333 0 000-18.666zM4 16.199c0-6.627 5.373-12 12-12s12 5.373 12 12-5.373 12-12 12-12-5.373-12-12z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-plus-circle-1\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.129 9.902c.736 0 1.333.597 1.333 1.333v9.333a1.333 1.333 0 01-2.666 0v-9.333c0-.736.597-1.333 1.333-1.333z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.335 16.073c0-.736-.597-1.333-1.333-1.333h-9.333a1.333 1.333 0 000 2.666h9.333c.736 0 1.333-.597 1.333-1.333z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.6 9.599c-3.645-3.645-9.554-3.645-13.199 0s-3.645 9.554 0 13.199c3.645 3.645 9.554 3.645 13.199 0s3.645-9.554 0-13.199zM7.515 7.714c4.686-4.686 12.284-4.686 16.971 0s4.686 12.284 0 16.971c-4.686 4.686-12.284 4.686-16.971 0s-4.686-12.284 0-16.971z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-pound\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.485 7.264c.994-1.081 2.507-1.931 4.515-1.931 3.896 0 5.987 2.71 6.571 4.171a1.333 1.333 0 11-2.476.99c-.304-.761-1.591-2.495-4.095-2.495-1.192 0-2.013.484-2.552 1.069-.585.636-.781 1.325-.781 1.597 0 1.185.142 1.692.332 2.199.047.125.102.261.163.412.22.542.519 1.28.799 2.4.528 2.11.575 3.571-.005 5.17-.27.744-.661 1.479-1.12 2.277l-.094.162a12.145 12.145 0 011.792-.186c1.582-.039 3.147.277 5.221.968.572.191.93.063 1.185-.103a1.709 1.709 0 00.49-.49l.033-.053.011-.019a1.332 1.332 0 112.385 1.193 4.356 4.356 0 01-1.466 1.605c-.856.557-2.054.873-3.482.397-1.926-.642-3.162-.86-4.313-.832-1.177.029-2.36.314-4.233.849a1.332 1.332 0 01-1.524-1.943c.338-.592.649-1.121.93-1.596l.118-.2c.234-.397.444-.751.633-1.081.445-.775.738-1.343.925-1.858.333-.917.38-1.79-.076-3.614-.23-.921-.443-1.447-.655-1.971-.072-.179-.144-.357-.217-.551-.31-.827-.502-1.653-.502-3.135 0-1.061.537-2.372 1.485-3.403z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.667 16c0-.736.597-1.333 1.333-1.333h9.333a1.333 1.333 0 010 2.666H8A1.333 1.333 0 016.667 16z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-print\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.267 5.333C8.267 4.597 8.864 4 9.6 4h12.8c.736 0 1.333.597 1.333 1.333V12.8a1.333 1.333 0 01-2.666 0V6.667H10.934V12.8a1.333 1.333 0 01-2.666 0V5.333z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.467 14.133a.8.8 0 00-.8.8v5.333a.8.8 0 00.8.8H9.6a1.333 1.333 0 010 2.666H7.467A3.467 3.467 0 014 20.265v-5.333a3.467 3.467 0 013.467-3.467h17.067a3.467 3.467 0 013.467 3.467v5.333a3.467 3.467 0 01-3.467 3.467h-2.133a1.333 1.333 0 010-2.666h2.133a.8.8 0 00.8-.8v-5.333a.8.8 0 00-.8-.8H7.467z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.267 18.133c0-.736.597-1.333 1.333-1.333h12.8c.736 0 1.333.597 1.333 1.333v8.533c0 .736-.597 1.333-1.333 1.333H9.6a1.333 1.333 0 01-1.333-1.333v-8.533zm2.666 1.334v5.867h10.133v-5.867H10.933z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-qr-code\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 5.333C4 4.597 4.597 4 5.333 4h8c.736 0 1.333.597 1.333 1.333v8c0 .736-.597 1.333-1.333 1.333h-8A1.333 1.333 0 014 13.333v-8zm2.667 1.334V12H12V6.667H6.667zM17.333 5.333c0-.736.597-1.333 1.333-1.333h8c.736 0 1.333.597 1.333 1.333v8c0 .736-.597 1.333-1.333 1.333h-8a1.333 1.333 0 01-1.333-1.333v-8zM20 6.667V12h5.333V6.667H20zM22.667 24c0-.736.597-1.333 1.333-1.333h2.667c.736 0 1.333.597 1.333 1.333v2.667c0 .736-.597 1.333-1.333 1.333H24a1.333 1.333 0 01-1.333-1.333V24zM4 18.667c0-.736.597-1.333 1.333-1.333h8c.736 0 1.333.597 1.333 1.333v8c0 .736-.597 1.333-1.333 1.333h-8A1.333 1.333 0 014 26.667v-8zM6.667 20v5.333H12V20H6.667zM18.667 24v.006a1.333 1.333 0 002.666 0V24a1.333 1.333 0 00-2.666 0zM22.667 20v.006a1.333 1.333 0 002.666 0V20a1.333 1.333 0 00-2.666 0zM18.667 20v.006a1.333 1.333 0 002.666 0V20a1.333 1.333 0 00-2.666 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8 9.333v.006a1.333 1.333 0 002.666 0v-.006a1.333 1.333 0 00-2.666 0zM21.333 9.333v.006a1.333 1.333 0 002.666 0v-.006a1.333 1.333 0 00-2.666 0zM8 22.667v.006a1.333 1.333 0 002.666 0v-.006a1.333 1.333 0 00-2.666 0z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-question\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.334 12.645v-.017a1.333 1.333 0 01-2.666 0c0-.532.193-1.073.419-1.517a5.918 5.918 0 011.022-1.414C12.981 8.801 14.307 8 16.002 8c1.298 0 2.588.453 3.573 1.225.989.776 1.761 1.956 1.761 3.402 0 1.505-.499 2.575-1.295 3.324-.6.565-1.35.899-1.785 1.092l-.186.084a1.286 1.286 0 01-.169.066c-.253.079-.4.165-.479.223a.481.481 0 00-.098.09 1.333 1.333 0 01-2.655-.173h1.333c-1.333 0-1.333-.001-1.333-.002v-.034l.002-.044c.002-.031.004-.067.009-.107.009-.079.024-.176.051-.285a2.58 2.58 0 01.335-.774c.366-.575.989-1.089 1.947-1.408l.249-.115c.432-.198.707-.324.952-.554.205-.193.455-.534.455-1.382 0-.437-.229-.903-.739-1.304a3.203 3.203 0 00-1.927-.657c-.805 0-1.48.375-1.982.891a3.2 3.2 0 00-.556.763c-.109.214-.125.324-.128.324zM14.667 22.668v-.006a1.333 1.333 0 012.666 0v.006a1.333 1.333 0 01-2.666 0z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-question-circle\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1.333 16C1.333 7.9 7.899 1.333 16 1.333S30.667 7.899 30.667 16c0 8.1-6.567 14.667-14.667 14.667S1.333 24.1 1.333 16zM16 4C9.373 4 4 9.373 4 16s5.373 12 12 12 12-5.373 12-12S22.627 4 16 4z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.464 11.496c-.591.684-.774 1.402-.774 1.598a1.333 1.333 0 01-2.666 0c0-.966.507-2.282 1.423-3.342.968-1.12 2.482-2.06 4.56-2.06 1.986 0 3.431.718 4.409 1.711a5.886 5.886 0 011.549 2.917c.38 1.899-.204 3.337-1.116 4.35-.825.916-1.886 1.446-2.459 1.732l-.043.022a2.098 2.098 0 00-.795.71c-.09.135-.149.258-.183.352a.642.642 0 00-.029.098 1.334 1.334 0 01-2.666-.026c0-.646.285-1.339.66-1.902a4.766 4.766 0 011.821-1.616c.602-.301 1.25-.639 1.712-1.153.396-.44.684-1.037.483-2.043a3.227 3.227 0 00-.834-1.569c-.468-.475-1.224-.915-2.508-.915-1.193 0-2.004.514-2.543 1.137zM14.673 22.981v-.006a1.333 1.333 0 012.666 0v.006a1.333 1.333 0 01-2.666 0z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-redo\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.333 16c0-.354-.141-.693-.391-.943L18.275 8.39a1.334 1.334 0 00-2.276.943v13.333a1.335 1.335 0 002.276.943l6.667-6.667c.25-.25.391-.589.391-.943zm-6.666 3.448v-6.895l3.448 3.448-3.448 3.448z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 16c0-.354-.141-.693-.391-.943L8.942 8.39a1.334 1.334 0 00-2.276.943v13.333a1.335 1.335 0 002.276.943l6.667-6.667c.25-.25.391-.589.391-.943zm-6.667 3.448v-6.895l3.448 3.448-3.448 3.448z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-reset\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 10c-.736 0-1.333.597-1.333 1.333V16h-1.333a1.333 1.333 0 000 2.666h2.667c.736 0 1.333-.597 1.333-1.333v-6c0-.736-.597-1.333-1.333-1.333zM22.083 8.366a1.333 1.333 0 011.885.05c2.052 2.165 2.699 5.048 2.699 7.071 0 6.106-4.709 11.179-10.667 11.179A1.333 1.333 0 0116 24c4.352 0 8-3.743 8-8.513 0-1.564-.52-3.709-1.968-5.237a1.333 1.333 0 01.05-1.885z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.164 5.366c.276-.021.555-.032.836-.032A1.333 1.333 0 0116 8c-.212 0-.422.008-.63.024a1.334 1.334 0 01-.207-2.659zm-4.212 2.67c.479.56.413 1.401-.147 1.88-.319.273-.616.57-.889.889a1.333 1.333 0 11-2.027-1.733c.363-.424.758-.82 1.183-1.183a1.333 1.333 0 011.88.147zm-4.154 5.902a1.334 1.334 0 011.226 1.433 8.211 8.211 0 000 1.26 1.334 1.334 0 01-2.659.207 11.021 11.021 0 010-1.672 1.333 1.333 0 011.433-1.226zm1.238 7.11a1.333 1.333 0 011.88.147c.273.319.57.616.889.889a1.333 1.333 0 11-1.733 2.027c-.424-.363-.82-.758-1.183-1.183a1.333 1.333 0 01.147-1.88zm5.902 4.154a1.334 1.334 0 011.433-1.226c.208.016.418.024.63.024a1.333 1.333 0 010 2.666c-.281 0-.56-.011-.836-.032a1.333 1.333 0 01-1.226-1.433zM20.504 8.571a1.333 1.333 0 011.317-1.349l4.176-.051a1.333 1.333 0 11.032 2.667l-2.843.035.035 2.843a1.333 1.333 0 11-2.666.032l-.051-4.176z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-rotate-45-cw\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.656 16.06c.558.173.939.689.939 1.274v4.915a1.334 1.334 0 010 2.616v.47a1.333 1.333 0 01-2.666 0v-.444H12a1.334 1.334 0 01-1.101-2.087l4.262-6.222c.33-.482.936-.693 1.494-.52zm-1.727 6.162v-.583l-.399.583h.399z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.667 17.333c0-.736.597-1.333 1.333-1.333h3a1.333 1.333 0 010 2.666h-1.667v1.333H22a3.333 3.333 0 110 6.666h-2a1.333 1.333 0 010-2.666h2a.667.667 0 000-1.334h-2a1.333 1.333 0 01-1.333-1.333v-4zM16 10.799a6.667 6.667 0 00-6.667 6.667 1.333 1.333 0 01-2.666 0A9.333 9.333 0 0116 8.133a1.333 1.333 0 010 2.666z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.699 10.16a1.334 1.334 0 00-.201-1.875l-2.941-2.372a1.334 1.334 0 00-1.674 2.076l1.903 1.535-1.535 1.903a1.334 1.334 0 002.076 1.674l2.372-2.941zM24 13.34v-.006a1.333 1.333 0 012.666 0v.006a1.333 1.333 0 01-2.666 0z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-rotate-ccw\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 10.799a6.667 6.667 0 016.667 6.667 1.333 1.333 0 002.666 0A9.333 9.333 0 0016 8.133a1.333 1.333 0 000 2.666z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.3 10.16a1.334 1.334 0 01.201-1.875l2.941-2.372a1.334 1.334 0 011.674 2.076l-1.903 1.535 1.535 1.903a1.334 1.334 0 01-2.076 1.674L12.3 10.16zM24 16.132c-.736 0-1.333.597-1.333 1.333 0 .177-.007.352-.02.525a1.334 1.334 0 002.659.207 9.35 9.35 0 00.028-.732c0-.736-.597-1.333-1.333-1.333zm-16 0c-.736 0-1.333.597-1.333 1.333 0 .246.01.49.028.732a1.333 1.333 0 102.659-.207 7.003 7.003 0 01-.02-.525c0-.736-.597-1.333-1.333-1.333zm1.05 5.516a1.333 1.333 0 00-.147 1.88c.317.371.663.717 1.035 1.035a1.333 1.333 0 101.733-2.027 6.647 6.647 0 01-.741-.741 1.333 1.333 0 00-1.88-.147zm13.9 0a1.333 1.333 0 00-1.88.147 6.733 6.733 0 01-.741.741 1.334 1.334 0 001.733 2.027 9.366 9.366 0 001.035-1.035 1.334 1.334 0 00-.147-1.88zm-4.992 3.69a1.333 1.333 0 00-1.433-1.226 7.003 7.003 0 01-1.05 0 1.334 1.334 0 00-.207 2.659 9.35 9.35 0 001.464 0 1.333 1.333 0 001.226-1.433z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-rotate-cw\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 10.667a6.667 6.667 0 00-6.667 6.667 1.333 1.333 0 01-2.666 0A9.333 9.333 0 0116 8.001a1.333 1.333 0 010 2.666z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.699 10.028a1.334 1.334 0 00-.201-1.875l-2.941-2.372a1.334 1.334 0 00-1.674 2.076l1.903 1.535-1.535 1.903a1.334 1.334 0 002.076 1.674l2.372-2.941zM8 16c.736 0 1.333.597 1.333 1.333 0 .177.007.352.02.525a1.334 1.334 0 01-2.659.207 9.35 9.35 0 01-.028-.732c0-.736.597-1.333 1.333-1.333zm16 0c.736 0 1.333.597 1.333 1.333 0 .246-.01.49-.028.732a1.334 1.334 0 01-2.659-.207c.013-.173.02-.348.02-.525 0-.736.597-1.333 1.333-1.333zm-1.05 5.515c.56.479.626 1.32.147 1.88a9.453 9.453 0 01-1.035 1.035 1.334 1.334 0 01-1.733-2.027c.266-.227.513-.475.741-.741a1.334 1.334 0 011.88-.147zm-13.9 0a1.334 1.334 0 011.88.147c.227.266.475.513.741.741a1.333 1.333 0 11-1.733 2.027 9.453 9.453 0 01-1.035-1.035 1.333 1.333 0 01.147-1.88zm4.992 3.691a1.333 1.333 0 011.433-1.226 7.003 7.003 0 001.05 0 1.334 1.334 0 01.207 2.659 9.35 9.35 0 01-1.464 0 1.334 1.334 0 01-1.226-1.433z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-rupee\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.667 6.667c0-.736.597-1.333 1.333-1.333h6.667c1.851 0 3.238.953 4.109 2.26C19.621 8.862 20 10.469 20 12c0 1.423-.206 3.045-.99 4.353-.849 1.416-2.292 2.314-4.343 2.314h-3.118l7.996 6.997a1.333 1.333 0 11-1.756 2.006L7.122 18.337A1.332 1.332 0 018 16.001h6.667c1.148 0 1.706-.435 2.057-1.019.416-.693.61-1.737.61-2.981 0-1.136-.288-2.195-.776-2.927-.462-.693-1.074-1.073-1.891-1.073H8a1.333 1.333 0 01-1.333-1.333z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.667 6.667c0-.736.597-1.333 1.333-1.333h14.667a1.333 1.333 0 010 2.666H8a1.333 1.333 0 01-1.333-1.333zM6.667 12c0-.736.597-1.333 1.333-1.333h14.667a1.333 1.333 0 010 2.666H8A1.333 1.333 0 016.667 12z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-save\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8 24V8h12.229L24 11.771V24H8zm16 2.667A2.667 2.667 0 0026.667 24V11.771c0-.707-.281-1.386-.781-1.886l-3.771-3.771c-.5-.5-1.178-.781-1.886-.781H8A2.667 2.667 0 005.333 8v16A2.667 2.667 0 008 26.667h16z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.667 5.333c.736 0 1.333.597 1.333 1.333v4h5.333v-4a1.333 1.333 0 012.666 0v5.333c0 .736-.597 1.333-1.333 1.333h-8a1.333 1.333 0 01-1.333-1.333V6.666c0-.736.597-1.333 1.333-1.333zM10.667 26.667c.736 0 1.333-.597 1.333-1.333v-5.333h8v5.333a1.333 1.333 0 002.666 0v-6.667c0-.736-.597-1.333-1.333-1.333H10.666c-.736 0-1.333.597-1.333 1.333v6.667c0 .736.597 1.333 1.333 1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-search\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.441 14.59c0-5.646 4.577-10.222 10.222-10.222S24.885 8.945 24.885 14.59c0 5.646-4.577 10.222-10.222 10.222S4.441 20.235 4.441 14.59zm10.222-7.556a7.556 7.556 0 100 15.112 7.556 7.556 0 000-15.112z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.002 19.928a1.333 1.333 0 011.886 0l6.163 6.163a1.333 1.333 0 11-1.886 1.886l-6.163-6.163a1.333 1.333 0 010-1.886z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-settings\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.394 16a4.606 4.606 0 119.212 0 4.606 4.606 0 01-9.212 0zM16 14.061a1.939 1.939 0 100 3.878 1.939 1.939 0 000-3.878z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 5.333a.849.849 0 00-.849.848v.191a3.131 3.131 0 01-1.899 2.867 1.333 1.333 0 01-.326.093 3.134 3.134 0 01-3.204-.725l-.011-.01-.065-.066a.852.852 0 00-1.201 0l-.001.001a.85.85 0 000 1.2l.076.076a3.133 3.133 0 01.643 3.418 3.13 3.13 0 01-2.853 2.011h-.129a.848.848 0 000 1.697h.191a3.133 3.133 0 012.865 1.893 3.135 3.135 0 01-.63 3.45l-.01.01-.066.065a.852.852 0 000 1.201l.001.001a.85.85 0 001.2 0l.076-.076a3.133 3.133 0 013.418-.643 3.132 3.132 0 012.011 2.853v.129a.849.849 0 101.697 0v-.191a3.133 3.133 0 011.893-2.865 3.135 3.135 0 013.45.629l.01.01.065.066a.852.852 0 001.201 0l.001-.001a.85.85 0 000-1.2l-.076-.076a3.133 3.133 0 01-.629-3.45 3.133 3.133 0 012.865-1.892h.103a.849.849 0 100-1.698h-.191a3.131 3.131 0 01-2.867-1.899 1.333 1.333 0 01-.093-.326 3.134 3.134 0 01.725-3.204l.01-.011.066-.065a.852.852 0 000-1.201l-.001-.001a.85.85 0 00-1.2 0l-.076.076a3.135 3.135 0 01-3.45.63 3.133 3.133 0 01-1.892-2.865v-.104a.848.848 0 00-.849-.848zm-3.515.849a3.515 3.515 0 017.03 0v.095a.465.465 0 00.283.425l.013.006a.466.466 0 00.511-.09l.058-.058a3.515 3.515 0 016.004 2.486c0 .933-.371 1.827-1.03 2.486l-.059.059a.466.466 0 00-.09.511c.03.068.054.139.073.211a.468.468 0 00.358.172h.182a3.515 3.515 0 010 7.03h-.095a.465.465 0 00-.425.283l-.006.013a.466.466 0 00.09.511l.058.058a3.515 3.515 0 010 4.974l-.942-.943.943.942a3.515 3.515 0 01-4.974 0l-.058-.058a.466.466 0 00-.511-.09l-.013.006a.468.468 0 00-.283.425v.182a3.515 3.515 0 01-7.03 0v-.077a.469.469 0 00-.305-.417 1.28 1.28 0 01-.078-.032.466.466 0 00-.511.09l-.058.058a3.515 3.515 0 01-6.004-2.486c0-.933.371-1.828 1.031-2.487l.058-.058a.466.466 0 00.09-.511l-.006-.013a.468.468 0 00-.425-.283h-.182a3.515 3.515 0 010-7.03h.078a.469.469 0 00.417-.305c.01-.026.02-.052.032-.078a.466.466 0 00-.09-.511l-.058-.058a3.515 3.515 0 114.972-4.972l.058.058a.466.466 0 00.511.09c.068-.03.139-.055.211-.073a.466.466 0 00.172-.358v-.182z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-shuffle\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 6.667c0-.736.597-1.333 1.333-1.333H24c.736 0 1.333.597 1.333 1.333v6.667a1.333 1.333 0 01-2.666 0V8.001h-5.333a1.333 1.333 0 01-1.333-1.333z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.943 5.724a1.333 1.333 0 010 1.886L6.276 26.277a1.333 1.333 0 11-1.886-1.886L23.057 5.724a1.333 1.333 0 011.886 0zM24 18.667c.736 0 1.333.597 1.333 1.333v6.667c0 .736-.597 1.333-1.333 1.333h-6.667a1.333 1.333 0 010-2.666h5.333v-5.333c0-.736.597-1.333 1.333-1.333z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.469 18.9a1.333 1.333 0 011.886 0l6.588 6.588a1.333 1.333 0 11-1.886 1.886l-6.588-6.588a1.333 1.333 0 010-1.886zM4.391 6.822a1.333 1.333 0 011.886 0l5.49 5.49a1.333 1.333 0 11-1.886 1.886l-5.49-5.49a1.333 1.333 0 010-1.886z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-skype1\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.562 18.089a9.774 9.774 0 00-11.64-11.64 5.29 5.29 0 00-3.253-1.115 5.338 5.338 0 00-5.335 5.335c0 1.224.414 2.348 1.11 3.248a9.774 9.774 0 0011.64 11.64 5.314 5.314 0 003.248 1.11 5.339 5.339 0 005.335-5.335 5.259 5.259 0 00-1.105-3.244zm-9.269 4.358c-3.125 0-5.739-1.391-5.739-3.096 0-.762.429-1.457 1.405-1.457 1.486 0 1.624 2.139 4.196 2.139 1.224 0 2.015-.543 2.015-1.253 0-.891-.762-1.029-2-1.334-2.977-.734-5.611-1.048-5.611-4.153 0-2.82 2.791-3.863 5.196-3.863 2.624 0 5.277 1.043 5.277 2.639 0 .805-.543 1.515-1.443 1.515-1.348 0-1.391-1.596-3.572-1.596-1.224 0-2 .333-2 1.072 0 .943.991 1.038 3.291 1.572 1.972.443 4.32 1.276 4.32 3.696 0 2.815-2.72 4.12-5.335 4.12z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-sort-descending\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.333 8c0-.736.597-1.333 1.333-1.333h17.333a1.333 1.333 0 010 2.666H6.666A1.333 1.333 0 015.333 8zM5.333 14.667c0-.736.597-1.333 1.333-1.333h8a1.333 1.333 0 010 2.666h-8a1.333 1.333 0 01-1.333-1.333zM5.333 21.333c0-.736.597-1.333 1.333-1.333h4a1.333 1.333 0 010 2.666h-4a1.333 1.333 0 01-1.333-1.333zM22.667 16v7.811a1.333 1.333 0 01-2.666 0V16a1.333 1.333 0 012.666 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.276 24.753a1.333 1.333 0 01-1.886 0l-4-4a1.333 1.333 0 111.886-1.886l3.057 3.057 3.057-3.057a1.333 1.333 0 111.886 1.886l-4 4z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-target\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 16C4 9.373 9.373 4 16 4s12 5.373 12 12-5.373 12-12 12S4 22.627 4 16zm12-9.333a9.333 9.333 0 100 18.666 9.333 9.333 0 100-18.666z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.067 16c0-.736.597-1.333 1.333-1.333h4.267a1.333 1.333 0 010 2.666H22.4A1.333 1.333 0 0121.067 16zM4 16c0-.736.597-1.333 1.333-1.333H9.6a1.333 1.333 0 010 2.666H5.333A1.333 1.333 0 014 16zM16 4c.736 0 1.333.597 1.333 1.333V9.6a1.333 1.333 0 01-2.666 0V5.333C14.667 4.597 15.264 4 16 4zM16 21.067c.736 0 1.333.597 1.333 1.333v4.267a1.333 1.333 0 01-2.666 0V22.4c0-.736.597-1.333 1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-toggle-off\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 16a8 8 0 018-8h8a8 8 0 010 16h-8a8 8 0 01-8-8zm8-5.333a5.333 5.333 0 100 10.666h8a5.333 5.333 0 000-10.666h-8z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.879 16c0-2.337 1.922-4.19 4.242-4.19s4.242 1.854 4.242 4.19c0 2.337-1.922 4.191-4.242 4.191S7.879 18.337 7.879 16zm4.242-1.524c-.893 0-1.576.705-1.576 1.524s.683 1.524 1.576 1.524 1.576-.705 1.576-1.524-.683-1.524-1.576-1.524z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-toggle-on\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 16a8 8 0 018-8h8a8 8 0 010 16h-8a8 8 0 01-8-8zm8-5.333a5.333 5.333 0 100 10.666h8a5.333 5.333 0 000-10.666h-8z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.654 16c0-2.337 1.922-4.19 4.242-4.19s4.243 1.854 4.243 4.19c0 2.337-1.922 4.191-4.243 4.191S15.654 18.337 15.654 16zm4.242-1.524c-.893 0-1.576.705-1.576 1.524s.683 1.524 1.576 1.524 1.576-.705 1.576-1.524-.683-1.524-1.576-1.524z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-tools\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.839 5.94c.084.434-.054.882-.366 1.195L21.278 9.33l.322.967.967.322 2.195-2.195a1.332 1.332 0 012.231.601 9.27 9.27 0 00.159.324l.148.296c.212.433.483 1.031.662 1.736.372 1.466.327 3.356-1.198 5.211-1.554 1.89-3.505 2.239-5.091 2.07-.848-.09-1.677-.351-2.249-.563l-7.176 7.176c-.896.896-1.903 1.528-3.065 1.488-1.139-.039-2.016-.716-2.675-1.375-.652-.652-1.332-1.527-1.289-2.686.041-1.109.736-2.047 1.573-2.885l7.167-7.167c-.25-.663-.548-1.596-.675-2.606-.201-1.589-.014-3.7 1.811-5.153 1.714-1.365 3.593-1.38 5.05-1.052 1.127.253 2.186.773 2.677 1.014.106.052.185.091.234.112.407.174.7.539.784.973zm-4.279.503c-.966-.217-1.927-.162-2.804.537-.767.61-.976 1.552-.827 2.732.145 1.147.599 2.206.81 2.696l.015.035a1.332 1.332 0 01-.283 1.468l-7.794 7.794c-.75.75-.792 1.059-.794 1.098 0 .003-.004.04.053.144.068.124.203.303.457.557.531.531.788.592.882.595.071.002.397-.018 1.087-.709l7.794-7.794a1.332 1.332 0 011.364-.322c.174.058.354.13.545.208.513.207 1.109.446 1.888.529.933.099 1.902-.082 2.75-1.112.876-1.066.883-2.034.673-2.862a4.475 4.475 0 00-.105-.352l-1.403 1.403a1.332 1.332 0 01-1.364.322l-2.381-.794a1.332 1.332 0 01-.843-.843l-.794-2.381a1.332 1.332 0 01.322-1.364l1.401-1.401a6.292 6.292 0 00-.651-.184z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-triangle-down\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 18l4-4h-8l4 4z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.943 18.943a1.333 1.333 0 01-1.886 0l-4-4A1.334 1.334 0 0112 12.667h8a1.335 1.335 0 01.943 2.276l-4 4zm-.162-3.61h-1.562l.781.781.781-.781z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-triangle-top\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 14l-4 4h8l-4-4z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.057 13.057a1.333 1.333 0 011.886 0l4 4A1.334 1.334 0 0120 19.333h-8a1.335 1.335 0 01-.943-2.276l4-4zm.162 3.61h1.562L16 15.886l-.781.781z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-twitter1\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.474 12.318c.013.19.013.379.013.569 0 5.78-4.399 12.44-12.44 12.44a12.35 12.35 0 01-6.714-1.963c.352.041.69.054 1.056.054 2.044 0 3.926-.69 5.428-1.868a4.381 4.381 0 01-4.088-3.032c.271.041.541.068.826.068.393 0 .785-.054 1.151-.149A4.373 4.373 0 016.2 14.146v-.054a4.401 4.401 0 001.976.555 4.368 4.368 0 01-1.949-3.641c0-.812.217-1.557.596-2.206a12.426 12.426 0 009.015 4.575 4.912 4.912 0 01-.108-1.002 4.37 4.37 0 014.372-4.372c1.259 0 2.396.528 3.195 1.381a8.615 8.615 0 002.775-1.056 4.359 4.359 0 01-1.922 2.409 8.754 8.754 0 002.518-.677 9.399 9.399 0 01-2.193 2.261z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-unchecked-circle\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 16C4 9.373 9.373 4 16 4s12 5.373 12 12-5.373 12-12 12S4 22.627 4 16zm12-9.333a9.333 9.333 0 100 18.666 9.333 9.333 0 100-18.666z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-unchecked-square\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.333 9.333a4 4 0 014-4h13.333a4 4 0 014 4v13.333a4 4 0 01-4 4H9.333a4 4 0 01-4-4V9.333zm4-1.333C8.597 8 8 8.597 8 9.333v13.333c0 .736.597 1.333 1.333 1.333h13.333c.736 0 1.333-.597 1.333-1.333V9.333c0-.736-.597-1.333-1.333-1.333H9.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-undo\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.667 16c0-.354.14-.693.391-.943l6.667-6.667a1.334 1.334 0 012.276.943v13.333a1.335 1.335 0 01-2.276.943l-6.667-6.667a1.334 1.334 0 01-.391-.943zm6.666 3.448v-6.895l-3.448 3.448 3.448 3.448z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 16c0-.354.141-.693.391-.943l6.667-6.667a1.334 1.334 0 012.276.943v13.333a1.335 1.335 0 01-2.276.943l-6.667-6.667a1.334 1.334 0 01-.391-.943zm6.667 3.448v-6.895l-3.448 3.448 3.448 3.448z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-unlocked\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.667 17.339a4 4 0 014-4h10.667a4 4 0 014 4v4.741a4 4 0 01-4 4H10.667a4 4 0 01-4-4v-4.741zm4-1.334c-.736 0-1.333.597-1.333 1.333v4.741c0 .736.597 1.333 1.333 1.333h10.667c.736 0 1.333-.597 1.333-1.333v-4.741c0-.736-.597-1.333-1.333-1.333H10.667z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.775 11.086a3.852 3.852 0 00-7.627.77v1.483a1.333 1.333 0 01-2.666 0v-1.481z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-upload\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.667 19.75V6.606a1.333 1.333 0 012.666 0V19.75a1.333 1.333 0 01-2.666 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.057 5.663a1.333 1.333 0 011.886 0l4 4a1.333 1.333 0 11-1.886 1.886L16 8.492l-3.057 3.057a1.333 1.333 0 11-1.886-1.886l4-4zM8 17.333c.736 0 1.333.597 1.333 1.333v5.333h13.333v-5.333a1.333 1.333 0 012.666 0v6.667c0 .736-.597 1.333-1.333 1.333h-16a1.333 1.333 0 01-1.333-1.333v-6.667c0-.736.597-1.333 1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-video\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 16C4 9.373 9.373 4 16 4s12 5.373 12 12-5.373 12-12 12S4 22.627 4 16zm12-9.333a9.333 9.333 0 100 18.666 9.333 9.333 0 100-18.666z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.238 10.558c.434-.232.96-.207 1.369.066l6.4 4.267a1.333 1.333 0 010 2.218l-6.4 4.267a1.333 1.333 0 01-2.073-1.11v-8.533c0-.492.271-.944.704-1.176zm1.962 3.667v3.551l2.663-1.775-2.663-1.775z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-viewing-height\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 14.667a1.333 1.333 0 100 2.667 1.333 1.333 0 000-2.667zM20 16a4 4 0 11-8 0 4 4 0 018 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.245 16c.985 1.955 3.347 5.333 7.755 5.333s6.771-3.379 7.755-5.333c-.985-1.955-3.347-5.333-7.755-5.333S9.229 14.046 8.245 16zm-2.555-.845C6.658 13.098 9.692 8 16 8s9.342 5.098 10.31 7.155a1.97 1.97 0 010 1.69C25.342 18.902 22.308 24 16 24s-9.342-5.098-10.31-7.155a1.97 1.97 0 010-1.69z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-visa-card\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.744 15.381s.281 1.378.345 1.667h-1.237l.593-1.611c-.007.011.122-.337.196-.552l.104.496zm3.923-5.603v13.037c0 .981-.796 1.778-1.778 1.778H7.111a1.779 1.779 0 01-1.778-1.778V9.778C5.333 8.797 6.129 8 7.111 8h17.778c.981 0 1.778.796 1.778 1.778zm-15.686 9.303l2.341-5.748h-1.574l-1.456 3.926-.159-.796-.519-2.644c-.085-.367-.348-.47-.674-.485H6.544l-.026.115a5.893 5.893 0 011.563.633l1.326 5h1.574zm3.497.008l.933-5.756h-1.489l-.93 5.756h1.485zm5.181-1.882c.007-.656-.393-1.156-1.248-1.567-.522-.263-.841-.441-.841-.711.007-.244.27-.496.855-.496.485-.011.841.104 1.107.219l.133.063.204-1.244a3.696 3.696 0 00-1.333-.244c-1.47 0-2.504.785-2.511 1.904-.011.826.741 1.285 1.304 1.563.574.282.77.467.77.715-.007.385-.467.563-.893.563-.593 0-.911-.093-1.396-.307l-.196-.093-.207 1.293c.348.159.993.3 1.659.307 1.563.004 2.581-.77 2.593-1.963zm5.23 1.882l-1.2-5.756h-1.152c-.356 0-.626.104-.778.478l-2.211 5.278h1.563l.311-.863h1.911c.044.204.178.863.178.863h1.378z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-vr-glasses\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.667 10.667c-.736 0-1.333.597-1.333 1.333v9.333c0 .736.597 1.333 1.333 1.333h4.425c.46 0 .888-.237 1.131-.628l.383-.614c1.566-2.512 5.223-2.512 6.789 0l.383.614c.243.391.671.628 1.131.628h4.425c.736 0 1.333-.597 1.333-1.333V12c0-.736-.597-1.333-1.333-1.333H6.667zm-4 1.333a4 4 0 014-4h18.667a4 4 0 014 4v9.333a4 4 0 01-4 4h-4.425a3.998 3.998 0 01-3.394-1.884l-.383-.614a1.334 1.334 0 00-2.263 0l-.383.614a4 4 0 01-3.395 1.884H6.666a4 4 0 01-4-4V12z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.667 14.667a1.333 1.333 0 100 2.667 1.333 1.333 0 000-2.667zm-4 1.333a4 4 0 118 0 4 4 0 01-8 0zM21.333 14.667a1.333 1.333 0 100 2.667 1.333 1.333 0 000-2.667zm-4 1.333a4 4 0 118 0 4 4 0 01-8 0z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-whatsapp1\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.471 8.433a10.49 10.49 0 00-7.476-3.1c-5.829 0-10.571 4.743-10.571 10.571 0 1.862.486 3.681 1.41 5.286l-1.5 5.476 5.605-1.471a10.538 10.538 0 005.052 1.286h.005c5.824 0 10.671-4.743 10.671-10.571 0-2.824-1.2-5.476-3.195-7.476zM15.995 24.7a8.769 8.769 0 01-4.476-1.224l-.319-.19-3.324.871.886-3.243-.21-.333a8.756 8.756 0 01-1.343-4.676c0-4.843 3.943-8.786 8.79-8.786 2.348 0 4.552.914 6.209 2.576s2.676 3.867 2.671 6.214c0 4.848-4.043 8.791-8.886 8.791zm4.819-6.581c-.262-.133-1.562-.771-1.805-.857-.243-.09-.419-.133-.595.133s-.681.857-.838 1.038c-.152.176-.309.2-.571.067-1.552-.776-2.571-1.386-3.595-3.143-.271-.467.271-.433.776-1.443.086-.176.043-.329-.024-.462s-.595-1.433-.814-1.962c-.214-.514-.433-.443-.595-.452-.152-.01-.329-.01-.505-.01s-.462.067-.705.329c-.243.267-.924.905-.924 2.205s.948 2.557 1.076 2.733c.133.176 1.862 2.843 4.514 3.991 1.676.724 2.333.786 3.171.662.51-.076 1.562-.638 1.781-1.257s.219-1.148.152-1.257c-.062-.119-.238-.186-.5-.314z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-wifi-off\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.187 5.575a1.333 1.333 0 00-1.821.488l-10 17.321a1.333 1.333 0 102.309 1.333l10-17.321a1.333 1.333 0 00-.488-1.821z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.795 9.361a17.442 17.442 0 00-13.343 4.271 1.334 1.334 0 001.763 2.001 14.766 14.766 0 0110.092-3.694l1.488-2.578zm1.393 2.921l1.388-2.405a17.408 17.408 0 016.972 3.755 1.334 1.334 0 01-1.763 2.001 14.74 14.74 0 00-6.597-3.351zm-4.28 2.079a12.388 12.388 0 00-6.819 2.826 1.334 1.334 0 001.707 2.049 9.742 9.742 0 013.349-1.822l1.763-3.053zm1.564 2.625l1.462-2.532a12.394 12.394 0 016.058 2.733 1.334 1.334 0 01-1.707 2.049 9.73 9.73 0 00-5.813-2.25zm-3.501 6.063l2.102-3.641a7.384 7.384 0 015.208 1.305 1.334 1.334 0 01-1.544 2.174 4.715 4.715 0 00-5.462 0 1.314 1.314 0 01-.302.161z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-wifi-on\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.285 19.236a9.758 9.758 0 00-12.489 0 1.334 1.334 0 01-1.707-2.049 12.423 12.423 0 0115.902 0 1.334 1.334 0 01-1.707 2.049z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.785 15.633a14.798 14.798 0 00-19.57 0 1.333 1.333 0 11-1.763-2.001c6.6-5.818 16.497-5.818 23.097 0a1.334 1.334 0 01-1.763 2.001zM18.736 22.888a4.715 4.715 0 00-5.462 0 1.332 1.332 0 11-1.544-2.174 7.382 7.382 0 018.551 0 1.334 1.334 0 01-1.544 2.174z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-windows\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.333 8.271l8.743-1.205v8.448H5.333V8.271zm0 15.458l8.743 1.205v-8.343H5.333v7.138zm9.705 1.333l11.629 1.605V16.591H15.038v8.471zm0-18.124v8.576h11.629V5.333L15.038 6.938z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-yen\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.071 7.044a1.333 1.333 0 011.885.027L16 14.322l7.044-7.251a1.333 1.333 0 011.912 1.858l-7.623 7.847V28a1.333 1.333 0 01-2.666 0V16.776L7.044 8.929a1.333 1.333 0 01.027-1.885z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8 16c0-.736.597-1.333 1.333-1.333h13.333a1.333 1.333 0 010 2.666H9.333A1.333 1.333 0 018 16zM8 21.333C8 20.597 8.597 20 9.333 20h13.333a1.333 1.333 0 010 2.666H9.333A1.333 1.333 0 018 21.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-zoom-in\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 14.815C4 8.842 8.842 4 14.815 4S25.63 8.842 25.63 14.815 20.788 25.63 14.815 25.63 4 20.788 4 14.815zm10.815-8.148a8.148 8.148 0 100 16.296 8.148 8.148 0 000-16.296z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.568 20.568a1.333 1.333 0 011.886 0l5.156 5.156a1.333 1.333 0 11-1.886 1.886l-5.156-5.156a1.333 1.333 0 010-1.886zM14.815 9.926c.736 0 1.333.597 1.333 1.333v7.111a1.333 1.333 0 01-2.666 0v-7.111c0-.736.597-1.333 1.333-1.333z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.926 14.815c0-.736.597-1.333 1.333-1.333h7.111a1.333 1.333 0 010 2.666h-7.111a1.333 1.333 0 01-1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-zoom-out\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 14.815C4 8.842 8.842 4 14.815 4S25.63 8.842 25.63 14.815 20.788 25.63 14.815 25.63 4 20.788 4 14.815zm10.815-8.148a8.148 8.148 0 100 16.296 8.148 8.148 0 000-16.296z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.568 20.568a1.333 1.333 0 011.886 0l5.156 5.156a1.333 1.333 0 11-1.886 1.886l-5.156-5.156a1.333 1.333 0 010-1.886zM9.926 14.815c0-.736.597-1.333 1.333-1.333h7.111a1.333 1.333 0 010 2.666h-7.111a1.333 1.333 0 01-1.333-1.333z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-jpg\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.664 12.144C6.38786 12.144 6.164 12.3679 6.164 12.644V13.108C6.164 13.3841 6.38786 13.608 6.664 13.608H8.708V18.012C8.708 18.732 8.276 19.056 7.748 19.056C7.32966 19.056 7.03016 18.8447 6.84949 18.4467C6.73453 18.1934 6.48125 18.0079 6.20834 18.0617L5.47826 18.2057C5.21218 18.2582 5.03227 18.515 5.11097 18.7745C5.45628 19.9134 6.31029 20.652 7.772 20.652C9.5 20.652 10.532 19.632 10.532 18.096V12.644C10.532 12.3679 10.3081 12.144 10.032 12.144H6.664Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.1511 20.52C13.4273 20.52 13.6511 20.2961 13.6511 20.02V17.996C13.6511 17.7199 13.875 17.496 14.1511 17.496H15.7871C17.3471 17.496 18.3311 16.404 18.3311 14.82C18.3311 13.236 17.3471 12.144 15.7871 12.144H12.3271C12.051 12.144 11.8271 12.3679 11.8271 12.644V20.02C11.8271 20.2961 12.051 20.52 12.3271 20.52H13.1511ZM13.6511 13.728H15.5711C16.1111 13.728 16.4471 14.016 16.4471 14.556V15.084C16.4471 15.624 16.1111 15.912 15.5711 15.912H13.6511V13.728Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.5181 20.02C24.5181 20.2961 24.742 20.52 25.0181 20.52H25.5541C25.8303 20.52 26.0541 20.2961 26.0541 20.02V16.352C26.0541 16.0759 25.8303 15.852 25.5541 15.852H22.7541V17.376H23.8941C24.1261 17.376 24.3141 17.564 24.3141 17.796C24.3141 18.612 23.5821 19.044 22.6701 19.044C21.5421 19.044 20.8101 18.396 20.8101 17.004V15.66C20.8101 14.268 21.5421 13.62 22.6701 13.62C23.3697 13.62 23.8331 13.8935 24.1318 14.2884C24.3162 14.5322 24.6488 14.6594 24.9141 14.5074L25.4926 14.1762C25.7209 14.0455 25.812 13.7577 25.6702 13.5362C25.0195 12.5205 23.9915 12 22.6701 12C20.4021 12 18.8781 13.548 18.8781 16.368C18.8781 19.176 20.3901 20.664 22.3101 20.664C23.5563 20.664 24.3212 20.0419 24.4539 19.2156C24.4565 19.1998 24.47 19.188 24.486 19.188C24.5037 19.188 24.5181 19.2024 24.5181 19.2201V20.02Z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-google\",\n viewBox: \"0 0 18 18\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.64 9.2c0-.637-.057-1.251-.164-1.84H9v3.481h4.844c-.209 1.125-.843 2.078-1.796 2.717v2.258h2.908c1.702-1.567 2.684-3.874 2.684-6.615z\",\n fillRule: \"evenodd\",\n fillOpacity: 1,\n fill: \"#4285f4\",\n stroke: \"none\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.003 18c2.43 0 4.467-.806 5.956-2.18L12.05 13.56c-.806.54-1.836.86-3.047.86-2.344 0-4.328-1.584-5.036-3.711H.96v2.332C2.44 15.983 5.485 18 9.003 18z\",\n fillRule: \"evenodd\",\n fillOpacity: 1,\n fill: \"#34a853\",\n stroke: \"none\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.964 10.712c-.18-.54-.282-1.117-.282-1.71 0-.593.102-1.17.282-1.71V4.96H.957C.347 6.175 0 7.55 0 9.002c0 1.452.348 2.827.957 4.042l3.007-2.332z\",\n fillRule: \"evenodd\",\n fillOpacity: 1,\n fill: \"#fbbc05\",\n stroke: \"none\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.003 3.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C13.464.891 11.428 0 9.002 0 5.485 0 2.44 2.017.96 4.958L3.967 7.29c.708-2.127 2.692-3.71 5.036-3.71z\",\n fillRule: \"evenodd\",\n fillOpacity: 1,\n fill: \"#ea4335\",\n stroke: \"none\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-day\",\n viewBox: \"0 0 35 35\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17 24.364a6.976 6.976 0 1 0 0-13.952 6.976 6.976 0 0 0 0 13.952Zm8.976-6.976a8.976 8.976 0 1 1-17.952 0 8.976 8.976 0 0 1 17.952 0ZM17.61 2a1 1 0 0 1 1 1v2.683a1 1 0 1 1-2 0V3a1 1 0 0 1 1-1Zm0 26.537a1 1 0 0 1 1 1v2.682a1 1 0 1 1-2 0v-2.682a1 1 0 0 1 1-1ZM28.433 5.829a1 1 0 0 1 0 1.414L26.536 9.14a1 1 0 1 1-1.415-1.414L27.02 5.83a1 1 0 0 1 1.414 0Zm-22.866 0a1 1 0 0 0 0 1.414L7.465 9.14a1 1 0 0 0 1.414-1.414L6.982 5.83a1 1 0 0 0-1.415 0Zm22.75 11.22a1 1 0 0 1 1-1H32a1 1 0 1 1 0 2h-2.683a1 1 0 0 1-1-1ZM1 17.049a1 1 0 0 0 1 1h2.683a1 1 0 1 0 0-2H2a1 1 0 0 0-1 1Zm24.363 7.511a1 1 0 0 1 1.414 0l1.897 1.898a1 1 0 0 1-1.414 1.414l-1.897-1.897a1 1 0 0 1 0-1.414ZM5.325 27.872a1 1 0 0 0 1.414 0l1.897-1.897a1 1 0 1 0-1.414-1.414l-1.897 1.897a1 1 0 0 0 0 1.414Z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-cloudy\",\n viewBox: \"0 0 35 35\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"m21.774 12.176-1.003-.26-.24.927.905.313.338-.98Zm1.81 3.266-1.008-.241-.314 1.31 1.347-.032-.025-1.037Zm2.465 1.155-.814.642.464.59.705-.257-.355-.975Zm3.767.134-.424.946.171.077.187.012.066-1.035Zm-2.762 11.07.174 1.022-.174-1.022Zm-18.914.035.18-1.02-.18 1.02Zm-5.1-3.661.905-.508-.036-.064-.045-.058-.823.63Zm-.988-3.356 1.034.083.006-.074-.005-.074-1.035.065Zm2.445-3.912.327.984 1.015-.338-.37-1.004-.972.358Zm7.49-5.732-.582.857 1.711 1.164-.092-2.068-1.036.047Zm10.79 1.26a5.91 5.91 0 0 0 .189-1.482h-2.073c0 .333-.043.656-.122.963l2.007.52Zm1.919 2.365a3.82 3.82 0 0 0-2.584-3.605l-.676 1.96a1.747 1.747 0 0 1 1.187 1.645h2.073Zm-.104.883a3.79 3.79 0 0 0 .104-.883h-2.073c0 .14-.017.273-.047.4l2.016.483Zm-.933-1.278h-.1l.05 2.074.05-.001v-2.073Zm3.205 1.551a4.071 4.071 0 0 0-3.205-1.551v2.073a2 2 0 0 1 1.576.76l1.629-1.282Zm.903-.697a6.05 6.05 0 0 0-2.072.364l.709 1.949a3.978 3.978 0 0 1 1.363-.24V15.26Zm2.472.526a6.04 6.04 0 0 0-2.472-.526v2.074c.582 0 1.132.123 1.625.344l.847-1.892Zm-.49 1.98a2.553 2.553 0 0 1 2.387 2.548h2.074a4.626 4.626 0 0 0-4.328-4.616l-.132 2.069Zm2.387 2.548c0 3.19-2.191 5.943-5.256 6.466l.348 2.044c4.14-.706 6.982-4.39 6.982-8.51h-2.074ZM26.88 26.78c-7.27 1.24-12.463 1.112-18.56.036l-.36 2.042c6.328 1.117 11.76 1.247 19.268-.034l-.348-2.044Zm-18.56.036c-1.905-.336-3.463-1.525-4.375-3.148l-1.808 1.016c1.195 2.125 3.262 3.722 5.823 4.174l.36-2.042ZM1 21.212a5.89 5.89 0 0 0 1.218 3.593l1.646-1.26a3.821 3.821 0 0 1-.79-2.333H1Zm.019-.475a5.962 5.962 0 0 0-.019.475h2.073c0-.104.005-.208.013-.31l-2.067-.165Zm2.068.017a6.93 6.93 0 0 1-.014-.434H1a9 9 0 0 0 .018.564l2.069-.13Zm-.014-.434c0-1.13.733-2.09 1.751-2.43l-.654-1.967A4.635 4.635 0 0 0 1 20.32h2.073Zm.09-5.092c0 .713.127 1.4.36 2.037l1.947-.716a3.82 3.82 0 0 1-.234-1.321H3.162Zm6.01-5.953c-3.308 0-6.01 2.654-6.01 5.953h2.073c0-2.132 1.75-3.88 3.936-3.88V9.275Zm3.398 1.042a6.028 6.028 0 0 0-3.399-1.042v2.073c.832 0 1.6.253 2.233.684l1.166-1.715Zm-1.625.636c0 .09.002.18.006.268l2.072-.093a3.924 3.924 0 0 1-.004-.175h-2.074ZM16.956 5c-3.308 0-6.01 2.654-6.01 5.953h2.074c0-2.132 1.75-3.88 3.936-3.88V5Zm6.01 5.953c0-3.3-2.702-5.953-6.01-5.953v2.073c2.186 0 3.937 1.748 3.937 3.88h2.073Z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-night\",\n viewBox: \"0 0 35 35\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"m6.013 23.039.775-.522-.775.522Zm.594-.664.331-.874-.331.874ZM22.522 6.603l-.877.323.877-.323Zm-.18 4.256c0 6.284-5.092 11.377-11.373 11.377v1.87c7.314 0 13.243-5.931 13.243-13.247h-1.87Zm-.697-3.933c.45 1.224.698 2.549.698 3.933h1.87c0-1.608-.288-3.151-.814-4.58l-1.754.647Zm1.017-.14a11.364 11.364 0 0 1 4.94 9.382h1.869c0-4.535-2.28-8.537-5.75-10.923l-1.06 1.54Zm4.94 9.382c0 6.284-5.093 11.377-11.375 11.377v1.87c7.315 0 13.244-5.931 13.244-13.247H27.6ZM16.226 27.545a11.36 11.36 0 0 1-9.439-5.028l-1.55 1.044a13.23 13.23 0 0 0 10.99 5.853v-1.87Zm-5.258-5.309c-1.421 0-2.78-.26-4.03-.735l-.664 1.748c1.46.554 3.043.857 4.694.857v-1.87Zm-4.181.28a.515.515 0 0 1-.044.62.432.432 0 0 1-.469.113l.663-1.748a1.437 1.437 0 0 0-1.573.373 1.354 1.354 0 0 0-.128 1.687l1.551-1.044ZM23.399 6.28a.432.432 0 0 1-.118.468.515.515 0 0 1-.62.038l1.06-1.54a1.354 1.354 0 0 0-1.689.11 1.44 1.44 0 0 0-.387 1.57l1.754-.646Z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-pdf\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.758 17.525v2.127a.879.879 0 1 1-1.758 0V13a1 1 0 0 1 1-1h2.328c.64 0 1.203.117 1.688.352a2.58 2.58 0 0 1 1.125 1.002c.261.43.392.92.392 1.47 0 .836-.287 1.496-.861 1.98-.57.481-1.361.721-2.373.721H6.758Zm0-1.423h1.57c.465 0 .818-.11 1.06-.329.247-.218.37-.53.37-.937 0-.418-.123-.756-.37-1.014-.245-.257-.585-.39-1.019-.398H6.758v2.678Zm6.988 4.429a1 1 0 0 1-1-1V13a1 1 0 0 1 1-1h1.625c.75 0 1.42.17 2.01.51a3.505 3.505 0 0 1 1.389 1.441c.332.621.498 1.328.498 2.121v.393c0 .793-.165 1.498-.493 2.115a3.484 3.484 0 0 1-1.377 1.436c-.593.34-1.263.511-2.01.515h-1.642Zm.758-7.107v5.695h.85c.687 0 1.212-.224 1.576-.674.363-.449.549-1.091.556-1.927v-.452c0-.867-.18-1.523-.539-1.968-.36-.45-.884-.674-1.576-.674h-.867Zm11.18 2.912a.709.709 0 0 1-.71.709H22.31v2.607a.879.879 0 1 1-1.758 0V13a1 1 0 0 1 1-1h3.843a.712.712 0 1 1 0 1.424H22.31v2.203h2.666a.71.71 0 0 1 .709.709Z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-interactive\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.5294 7.11765C15.8235 6.96078 16.1765 6.96078 16.4706 7.11765L23.9706 11.1176C24.2965 11.2914 24.5 11.6307 24.5 12V20C24.5 20.3693 24.2965 20.7086 23.9706 20.8824L16.4706 24.8824C16.1765 25.0392 15.8235 25.0392 15.5294 24.8824L8.02941 20.8824C7.70355 20.7086 7.5 20.3693 7.5 20V12C7.5 11.6307 7.70355 11.2914 8.02941 11.1176L15.5294 7.11765ZM9.5 13.6667V19.4L15 22.3333V16.6L9.5 13.6667ZM17 16.6V22.3333L22.5 19.4V13.6667L17 16.6ZM21.375 12L16 14.8667L10.625 12L16 9.13333L21.375 12Z\"\n})), /*#__PURE__*/React.createElement(\"symbol\", {\n id: \"icon-camera-filled\",\n viewBox: \"0 0 32 32\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M29.946 24.186c0 1.75-1.128 3.167-2.52 3.167H4.757c-1.39 0-2.519-1.418-2.519-3.167V11.52c0-1.75 1.128-3.167 2.52-3.167h3.498l4.058-4.75h7.557l4.058 4.75h3.499c1.39 0 2.519 1.418 2.519 3.167v12.666Zm-19.791-6.729a5.937 5.937 0 1 1 11.875 0 5.937 5.937 0 0 1-11.875 0Zm5.938-1.98a1.98 1.98 0 1 0 0 3.96 1.98 1.98 0 0 0 0-3.96Z\",\n fill: \"#fff\"\n})));\n\nvar SvgSymbolDefs = function SvgSymbolDefs(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n \"aria-hidden\": \"true\",\n style: {\n position: \"absolute\",\n width: 0,\n height: 0\n },\n overflow: \"hidden\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgSymbolDefs, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/symbol-defs.f662f006.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\r\nconst StateContext = React.createContext();\r\nconst DispatchContext = React.createContext();\r\n\r\n\r\nconst SET_COLORS = \"SET_COLORS\";\r\nconst SELECT_COLOR = \"SELECT_COLOR\";\r\nconst SELECT_COLLECTION = \"SELECT_COLLECTION\";\r\nconst SET_ACTIVE_COLOR = \"SET_ACTIVE_COLOR\";\r\nconst SEARCH_COLOR = \"SEARCH_COLOR\";\r\nconst SET_COLOR_TEXTURES = \"SET_COLOR_TEXTURES\";\r\nconst colorListActions = {\r\n SET_COLORS,\r\n SELECT_COLOR,\r\n SELECT_COLLECTION,\r\n SET_ACTIVE_COLOR,\r\n SEARCH_COLOR,\r\n SET_COLOR_TEXTURES\r\n};\r\nconst defColIndex = 0;\r\nconst colorListState = {\r\n loading: true,\r\n collections: null,\r\n filteredCollection: null,\r\n collectionIndex: defColIndex,\r\n showColorSelectionBox: false,\r\n activeColor: null,\r\n isSearching: false,\r\n colorTextures: null\r\n};\r\n\r\nconst colorListReducer = (state, action) => {\r\n switch (action.type) {\r\n case SET_COLORS:\r\n return { ...state, collections: action.payload, filteredCollection: action.payload[defColIndex], loading: false }\r\n case SELECT_COLLECTION:\r\n return { ...state, collectionIndex: action.payload, filteredCollection: state.collections[action.payload] };\r\n case SELECT_COLOR:\r\n if (!state.collections) return state;\r\n return findColor(state, action.payload)\r\n case SET_ACTIVE_COLOR:\r\n return { ...state, activeColor: action.payload }\r\n case SEARCH_COLOR:\r\n return searchColor(state, action.payload)\r\n case SET_COLOR_TEXTURES:\r\n return { ...state, colorTextures: action.payload }\r\n default:\r\n return state;\r\n }\r\n};\r\nconst findColor = (state, payload) => {\r\n let collectionIndex = 0;\r\n let activeColor = null;\r\n const array = [...state.collections]\r\n const obj = payload;\r\n array.forEach((coll, index) => {\r\n const ind = coll.ColorRows.findIndex(colorObj => {\r\n\r\n return obj.Color === colorObj.Color && obj.ColorName === colorObj.ColorName;\r\n })\r\n if (ind !== -1) {\r\n collectionIndex = index;\r\n activeColor = coll.ColorRows[ind]\r\n }\r\n })\r\n return { ...state, filteredCollection: state.collections[collectionIndex], collectionIndex, showColorSelectionBox: true, activeColor }\r\n}\r\nconst searchColor = (state, payload) => {\r\n const { collections, collectionIndex } = state\r\n const { ColorRows } = collections[collectionIndex]\r\n const keyword = payload;\r\n const filteredRows = ColorRows.filter(colorRow =>\r\n colorRow.ColorName.toLowerCase().indexOf(keyword.toLowerCase()) !== -1\r\n )\r\n return {\r\n ...state, filteredCollection: {\r\n ...state.filteredCollection, ColorRows: filteredRows\r\n }, isSearching: true\r\n }\r\n}\r\nfunction ColorListStateProvider({ children }) {\r\n const [state, dispatch] = React.useReducer(colorListReducer, colorListState)\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n )\r\n}\r\nfunction useColorListState() {\r\n const context = React.useContext(StateContext)\r\n if (context === undefined) {\r\n throw new Error('useCountState must be used within a CountProvider')\r\n }\r\n return context\r\n}\r\nfunction useDispatchColorList() {\r\n const context = React.useContext(DispatchContext)\r\n if (context === undefined) {\r\n throw new Error('useCountDispatch must be used within a CountProvider')\r\n }\r\n return context\r\n}\r\nexport { ColorListStateProvider, useColorListState, useDispatchColorList, colorListActions }\r\n","import React from \"react\";\r\n\r\nconst UiStateContext = React.createContext();\r\nconst UiDispatchContext = React.createContext();\r\n\r\nconst SET_SHOW_CUST_SCOUT = \"SET_SHOW_CUSTOMIZATION_SCOUT\";\r\nconst SET_SHOW_LOAD_OVERLAY = \"SET_SHOW_LOAD_OVERLAY\";\r\nconst SET_LOADING_OVERLAY_PERCENT = \"SET_LOADING_OVERLAY_PERCENT\";\r\nconst SET_SHOW_SIDEBAR = \"SET_SHOW_SIDEBAR\";\r\nconst SET_SHOW_RUGSHARE = \"SET_SHOW_RUGSHARE\";\r\nconst SET_SHOW_ORDERSHEET = \"SET_SHOW_ORDERSHEET\";\r\nconst SETMOUSE_HOVERED_ONUI = \"SETMOUSE_HOVERED_ONUI\";\r\nconst SET_SHOW_FAV_DIALOG = \"SET_SHOW_FAV_DIALOG\";\r\nconst SET_SHOW_VR_BTN = \"SET_SHOW_VR_BTN\";\r\nconst SET_SHOW_VR_DIALOG = \"SET_SHOW_VR_DIALOG\";\r\nconst SET_SHOW_QUICKLINK_DIALOG = \"SET_SHOW_QUICKLINK_DIALOG\";\r\nconst SET_ISBUSY = \"SET_ISBUSY\";\r\nconst SET_SHOW_RENAME_DIALOG = \"SET_SHOW_RENAME_DIALOG\";\r\nconst SET_TOAST_PROPS = \"SET_TOAST_PROPS\";\r\nconst SET_IS_IDLE = \"SET_IS_IDLE\";\r\nconst SET_PAGE_VIEW = \"SET_PAGE_VIEW\";\r\nconst SET_CONFIRMATION_DIALOG = \"SET_CONFIRMATION_DIALOG\";\r\nexport const pageViews = {\r\n HOME: \"HOMEPAGE\",\r\n FULL_PAGE_THUMB: \"FULL_PAGE_THUMB\",\r\n VPS: \"VPS\",\r\n};\r\nconst mainUiActions = {\r\n SET_SHOW_CUST_SCOUT,\r\n SET_SHOW_LOAD_OVERLAY,\r\n SET_LOADING_OVERLAY_PERCENT,\r\n SET_SHOW_SIDEBAR,\r\n SET_SHOW_RUGSHARE,\r\n SET_SHOW_ORDERSHEET,\r\n SETMOUSE_HOVERED_ONUI,\r\n SET_SHOW_FAV_DIALOG,\r\n SET_SHOW_VR_BTN,\r\n SET_SHOW_VR_DIALOG,\r\n SET_SHOW_QUICKLINK_DIALOG,\r\n SET_ISBUSY,\r\n SET_SHOW_RENAME_DIALOG,\r\n SET_TOAST_PROPS,\r\n SET_IS_IDLE,\r\n SET_PAGE_VIEW,\r\n SET_CONFIRMATION_DIALOG\r\n};\r\nconst initialUiState = {\r\n showRugShare: false,\r\n showOrderSheet: false,\r\n showCustoScout: false,\r\n showLoadingOverlay: true,\r\n loadingOverlayPercent: 0,\r\n showLeftSidebar: false,\r\n showRightSidebar: false,\r\n mouseHoveredOnUi: false,\r\n showFavoritesDialog: false,\r\n showVrBtn: false,\r\n showVrDialog: false,\r\n showQuickLinkDialog: false,\r\n isBusy: false,\r\n showRenameDialog: false,\r\n toastProps: null,\r\n isIdle: false,\r\n pageView: pageViews.VPS,\r\n showConfirmationDialog: false\r\n};\r\nconst mainUiReducer = (state, action) => {\r\n const { type, payload } = action;\r\n // console.log(type)\r\n switch (type) {\r\n case SET_SHOW_CUST_SCOUT:\r\n return { ...state, showCustoScout: payload };\r\n case SET_SHOW_LOAD_OVERLAY:\r\n return { ...state, showLoadingOverlay: payload };\r\n case SET_LOADING_OVERLAY_PERCENT:\r\n return { ...state, loadingOverlayPercent: payload };\r\n case SET_SHOW_SIDEBAR:\r\n return {\r\n ...state,\r\n showLeftSidebar: payload.left === undefined ? state.showLeftSidebar : payload.left,\r\n showRightSidebar: payload.right === undefined ? state.showRightSidebar : payload.right\r\n };\r\n case SET_SHOW_RUGSHARE:\r\n return { ...state, showRugShare: payload };\r\n case SET_SHOW_ORDERSHEET:\r\n return { ...state, showOrderSheet: payload };\r\n case SETMOUSE_HOVERED_ONUI:\r\n return { ...state, mouseHoveredOnUi: payload };\r\n case SET_SHOW_FAV_DIALOG:\r\n return { ...state, showFavoritesDialog: payload };\r\n case SET_SHOW_VR_BTN:\r\n return { ...state, showVrBtn: payload };\r\n case SET_SHOW_VR_DIALOG:\r\n return { ...state, showVrDialog: payload };\r\n case SET_SHOW_QUICKLINK_DIALOG:\r\n return { ...state, showQuickLinkDialog: payload };\r\n case SET_ISBUSY:\r\n return { ...state, isBusy: payload };\r\n case SET_SHOW_RENAME_DIALOG:\r\n return { ...state, showRenameDialog: payload };\r\n case SET_TOAST_PROPS:\r\n return { ...state, toastProps: payload };\r\n case SET_IS_IDLE:\r\n return { ...state, isIdle: payload };\r\n case SET_PAGE_VIEW:\r\n return { ...state, pageView: payload };\r\n case SET_CONFIRMATION_DIALOG:\r\n return { ...state, showConfirmationDialog: payload };\r\n default:\r\n return state;\r\n }\r\n};\r\nfunction UiStateProvider({ children, initPage }) {\r\n let uiState = initialUiState;\r\n switch (initPage) {\r\n case true:\r\n uiState.pageView = pageViews.FULL_PAGE_THUMB;\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n const [state, dispatch] = React.useReducer(mainUiReducer, uiState);\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\nfunction useUiState() {\r\n const context = React.useContext(UiStateContext);\r\n if (context === undefined) {\r\n throw new Error(\"useCountState must be used within a CountProvider\");\r\n }\r\n return context;\r\n}\r\nfunction useUiDispatch() {\r\n const context = React.useContext(UiDispatchContext);\r\n if (context === undefined) {\r\n throw new Error(\"useCountDispatch must be used within a CountProvider\");\r\n }\r\n return context;\r\n}\r\nexport { UiStateProvider, useUiState, useUiDispatch, mainUiActions };\r\n","import React from \"react\";\r\nimport { Overlay, Classes } from \"@blueprintjs/core\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst AtDialog = props => {\r\n const { onClose, isOpen, className, overlayClassName = \"\", portalContainerId, size, canOutsideClickClose = true } = props;\r\n return (\r\n \r\n
\r\n
\r\n {/* {this.maybeRenderHeader()} */}\r\n {props.children}\r\n
\r\n
\r\n \r\n );\r\n};\r\nAtDialog.propTypes = {\r\n onClose: PropTypes.func,\r\n isOpen: PropTypes.bool,\r\n className: PropTypes.string,\r\n size: PropTypes.oneOf([\"lg\", \"md\", \"sm\", \"xs\"])\r\n};\r\nAtDialog.defaultProps = {\r\n size: \"md\",\r\n className: \"\",\r\n isOpen: false\r\n};\r\nexport default AtDialog;\r\n","import React from \"react\";\r\nimport AtIcon from \"../AtIcon\";\r\n\r\nconst CircularButton = props => {\r\n const { icon, onClick, className = \"\", size = \"medium\", children } = props;\r\n return (\r\n
\r\n {icon && }\r\n {children}\r\n
\r\n );\r\n};\r\n\r\nexport default CircularButton;\r\n","import React, { useState, useRef, useEffect } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport CircularButton from \"../../atoms/CircularButton\";\r\nimport { flaginCurrentMode } from \"../../pages/EntryPage/defaultflags\";\r\nimport classNames from \"classnames\";\r\nimport { Tooltip } from \"@blueprintjs/core\";\r\nimport AtButton from \"../../atoms/AtButton\";\r\nconst Thumbnail = props => {\r\n const {\r\n className = \"\",\r\n thumb,\r\n thumbnailName,\r\n onRemoveClicked,\r\n onThumbnailClick,\r\n onEditClick,\r\n hasRemove,\r\n hasEdit,\r\n imageRotated,\r\n infoThumbs,\r\n aspect = \"portrait\",\r\n showTitle = true,\r\n active,\r\n thumbType\r\n } = props;\r\n const [isHovering, setIsHovering] = useState(false);\r\n const [isloading, setIsloading] = useState(true);\r\n const thumbImg = useRef(null);\r\n const [scrollTo, setScrollTo] = useState(true);\r\n const ref = useRef(null);\r\n\r\n useEffect(() => {\r\n let effectActive = true;\r\n\r\n setIsloading(true);\r\n if (!thumb.Thumb) return;\r\n const image = new Image();\r\n image.src = thumb.Thumb;\r\n image.onload = () => {\r\n if (!effectActive) return;\r\n try {\r\n if (thumbImg?.current) {\r\n thumbImg.current.src = image.src;\r\n thumbImg.current.backgroundImage = image.src;\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n setIsloading(false);\r\n };\r\n return () => { effectActive = false }\r\n }, [thumb.Thumb]);\r\n\r\n\r\n const rendername = name =>\r\n name &&\r\n name.split(\"~\").map((item, i) => {\r\n return

{item}

;\r\n });\r\n\r\n const getBgImage = () => {\r\n if (\r\n !flaginCurrentMode(window.InterfaceElements.IsAdmin, window.flags.designThumbsAsBg) ||\r\n thumbType === \"ROOM_THUMBS\"\r\n )\r\n return \"none\";\r\n const thumbSrc = thumbImg.current !== null ? \"url(\" + thumbImg.current.src + \")\" : \"none\";\r\n return thumbSrc;\r\n };\r\n return (\r\n setIsHovering(true)}\r\n onMouseLeave={() => setIsHovering(false)}\r\n className={`thumb-item ${active ? \"active\" : \"\"} ${className}`}\r\n onClick={e => {\r\n if (className === \"disabled\") return;\r\n setScrollTo(false);\r\n if (onThumbnailClick) onThumbnailClick(e);\r\n }}\r\n ref={ref}\r\n >\r\n \r\n \r\n \r\n {thumb.infoThumbs && thumb.infoThumbs.length > 0 && (\r\n
\r\n {thumb.infoThumbs.map((item, index) => {\r\n return (\r\n <>\r\n {\r\n thumb.infoTitles?.length ?\r\n \r\n
{ }} key={index}>\r\n {typeof item === \"string\" ? {item} : item}\r\n
\r\n
\r\n :\r\n
{ }} key={index}>\r\n {typeof item === \"string\" ? {item} : item}\r\n
\r\n }\r\n \r\n\r\n );\r\n })}\r\n
\r\n )}\r\n \r\n
\r\n\r\n {\r\n hasEdit && (\r\n {\r\n e.stopPropagation();\r\n if (onEditClick) onEditClick(e);\r\n }}\r\n />\r\n )\r\n }\r\n\r\n {\r\n hasRemove && isHovering && (\r\n {\r\n e.stopPropagation();\r\n if (onRemoveClicked) onRemoveClicked(e);\r\n }}\r\n />\r\n )\r\n }\r\n\r\n {\r\n showTitle && (\r\n \r\n {rendername(thumbnailName ? thumbnailName : thumb.label)}\r\n \r\n )\r\n }\r\n \r\n );\r\n};\r\n\r\nThumbnail.propTypes = {\r\n className: PropTypes.string,\r\n thumb: PropTypes.object,\r\n hasRemove: PropTypes.bool,\r\n onRemoveClicked: PropTypes.func,\r\n onThumbnailClick: PropTypes.func,\r\n thumbnailType: PropTypes.oneOf([\"portrait\", \"landscape\"]),\r\n showTitle: PropTypes.bool\r\n};\r\nexport default Thumbnail;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useInView } from \"react-intersection-observer\";\r\nimport AppProvider from \"../../../api/appProvider\";\r\nimport Thumbnail from \"../../molecules/Thumbnail\";\r\nimport { useDispatchDesignList, designListActions } from \"../../../reducers/designstree.reducer\";\r\n\r\nconst LazyThumbnail = props => {\r\n const { node, ...otherProps } = props;\r\n const dispatch = useDispatchDesignList();\r\n const [ref, inView, entry] = useInView({\r\n triggerOnce: true,\r\n threshold: 0.3\r\n });\r\n useEffect(() => {\r\n if (inView === true && !node.Thumb) {\r\n AppProvider.getDesignThumbnails({ designs: [node] }).then(thumbs => {\r\n dispatch({\r\n type: designListActions.UPDATE_SINGLE_FILE_PROP,\r\n payload: { ...node, Thumb: thumbs[0].Thumb, Props: thumbs[0].Props }\r\n });\r\n });\r\n }\r\n }, [inView]);\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default LazyThumbnail;\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport Thumbnail from \"../Thumbnail\";\r\nimport LazyThumbnail from \"../../pages/DesignBrowser/LazyThumbnail\";\r\nimport { useMount } from \"react-use\";\r\n\r\nconst ThumbList = props => {\r\n const {\r\n thumbList,\r\n activeId,\r\n onThumbnailClick,\r\n onEditClick,\r\n onRemoveClicked,\r\n className = \"\",\r\n lazyDesignThumbnail = false\r\n } = props;\r\n\r\n return (\r\n
\r\n {thumbList.map((thumb, index) =>\r\n lazyDesignThumbnail ? (\r\n onRemoveClicked && onRemoveClicked(thumb, index)}\r\n onThumbnailClick={() => {\r\n if (!onThumbnailClick) return;\r\n onThumbnailClick(thumb, index, thumbList[index - 1], thumbList[index + 1]);\r\n }}\r\n active={thumb.id === activeId}\r\n />\r\n ) : (\r\n onRemoveClicked && onRemoveClicked(thumb, index)}\r\n onEditClick={() => onEditClick && onEditClick(thumb, index)}\r\n onThumbnailClick={() => {\r\n if (!onThumbnailClick) return;\r\n onThumbnailClick(thumb, index, thumbList[index - 1], thumbList[index + 1]);\r\n }}\r\n active={thumb.id === activeId}\r\n />\r\n )\r\n )}\r\n
\r\n );\r\n};\r\n\r\nThumbList.propTypes = {\r\n thumbList: PropTypes.array.isRequired,\r\n activeId: PropTypes.string,\r\n onThumbnailClick: PropTypes.func\r\n};\r\n\r\nexport default ThumbList;\r\n","import React from \"react\";\r\nimport classNames from \"classnames\";\r\nimport AtIcon from \"../../atoms/AtIcon\";\r\nimport AtButton from \"../../atoms/AtButton\";\r\nconst CameraButton1 = props => {\r\n const { onClick, className = \"\", size = \"medium\", clipped = false, disabled, nopointer } = props;\r\n return (\r\n {\r\n if (!nopointer && !disabled && onClick) onClick(e);\r\n }}\r\n >\r\n
\r\n \r\n );\r\n};\r\n\r\nconst CameraButton2 = props => {\r\n const { onClick, className = \"\", size = \"medium\", clipped = false, disabled, nopointer } = props;\r\n return (\r\n {\r\n if (!nopointer && !disabled && onClick) onClick(e);\r\n }}\r\n >\r\n
\r\n \r\n );\r\n};\r\n\r\nconst CameraButton = props => {\r\n const {\r\n onClick,\r\n onClose,\r\n className = \"\",\r\n size = \"medium\",\r\n clipped = false,\r\n disabled,\r\n nopointer,\r\n cameraactive\r\n } = props;\r\n return (\r\n <>\r\n {!cameraactive && (\r\n {\r\n if (!nopointer && !disabled && onClick) onClick(e);\r\n }}\r\n >\r\n \r\n \r\n )}\r\n {cameraactive && }\r\n \r\n );\r\n};\r\n\r\nexport default CameraButton;\r\n","import React from \"react\";\r\nimport { useUiState } from \"../../../reducers/mainui.reducer\";\r\nimport classNames from \"classnames\";\r\n\r\nconst SidePanel = props => {\r\n const { side = \"left\", show = true, isIdle = false, children, className, ...otherprops } = props;\r\n const uiState = useUiState();\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default SidePanel;\r\n","import React, { useEffect } from \"react\";\r\nimport SidePanel from \"./../../templates/SidePanel\";\r\nimport Thumbnail from \"./../../molecules/Thumbnail\";\r\nimport AtIcon from \"./../../atoms/AtIcon\";\r\nimport { H5 } from \"@blueprintjs/core\";\r\n\r\nconst OptionsSidePanel = props => {\r\n const {\r\n side = \"right\",\r\n show = true,\r\n header,\r\n options,\r\n activeIndex = -1,\r\n onClick,\r\n onClose,\r\n className,\r\n children\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n {onClose && }\r\n {header &&
{header}
}\r\n
\r\n {options.map((option, index) => {\r\n return (\r\n onClick(e, index)}\r\n aspect=\"landscape\"\r\n active={activeIndex === index}\r\n />\r\n );\r\n })}\r\n
\r\n {children}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default OptionsSidePanel;\r\n","// import { OrbitControls } from \"three/examples/jsm/controls/OrbitControls\"\r\n// export class CustomOrbitControls extends OrbitControls {\r\n// setPolarAngle(angle) {\r\n// // super.rotateUp(angle);\r\n// };\r\n// setAzimuthalAngle(angle) {\r\n// // super.rotateLeft(angle);\r\n// };\r\n// panOrbit(x, y) {\r\n// // super.pan(x, y);\r\n// };\r\n// pan(){\r\n\r\n// }\r\n// rotateLeft(){\r\n\r\n// }\r\n// rotateUp(){}\r\n// }\r\n\r\n/**\r\n * @author qiao / https://github.com/qiao\r\n * @author mrdoob / http://mrdoob.com\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n * @author erich666 / http://erichaines.com\r\n * @author ScieCode / http://github.com/sciecode\r\n */\r\n\r\nimport {\r\n EventDispatcher,\r\n MOUSE,\r\n Quaternion,\r\n Spherical,\r\n TOUCH,\r\n Vector2,\r\n Vector3\r\n} from \"three\";\r\n\r\n// This set of controls performs orbiting, dollying (zooming), and panning.\r\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\r\n//\r\n// Orbit - left mouse / touch: one-finger move\r\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\r\n// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\r\n\r\nvar OrbitControls = function (object, domElement) {\r\n\r\n if (domElement === undefined) console.warn('THREE.OrbitControls: The second parameter \"domElement\" is now mandatory.');\r\n if (domElement === document) console.error('THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.');\r\n\r\n this.object = object;\r\n this.domElement = domElement;\r\n\r\n // Set to false to disable this control\r\n this.enabled = true;\r\n\r\n // \"target\" sets the location of focus, where the object orbits around\r\n this.target = new Vector3();\r\n\r\n // How far you can dolly in and out ( PerspectiveCamera only )\r\n this.minDistance = 0;\r\n this.maxDistance = Infinity;\r\n\r\n // How far you can zoom in and out ( OrthographicCamera only )\r\n this.minZoom = 0;\r\n this.maxZoom = Infinity;\r\n\r\n // How far you can orbit vertically, upper and lower limits.\r\n // Range is 0 to Math.PI radians.\r\n this.minPolarAngle = 0; // radians\r\n this.maxPolarAngle = Math.PI; // radians\r\n\r\n // How far you can orbit horizontally, upper and lower limits.\r\n // If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\r\n this.minAzimuthAngle = - Infinity; // radians\r\n this.maxAzimuthAngle = Infinity; // radians\r\n\r\n // Set to true to enable damping (inertia)\r\n // If damping is enabled, you must call controls.update() in your animation loop\r\n this.enableDamping = false;\r\n this.dampingFactor = 0.05;\r\n\r\n // This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\r\n // Set to false to disable zooming\r\n this.enableZoom = true;\r\n this.zoomSpeed = 1.0;\r\n\r\n // Set to false to disable rotating\r\n this.enableRotate = true;\r\n this.rotateSpeed = 1.0;\r\n\r\n // Set to false to disable panning\r\n this.enablePan = true;\r\n this.panSpeed = 1.0;\r\n this.screenSpacePanning = false; // if true, pan in screen-space\r\n this.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\r\n\r\n // Set to true to automatically rotate around the target\r\n // If auto-rotate is enabled, you must call controls.update() in your animation loop\r\n this.autoRotate = false;\r\n this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\r\n\r\n // Set to false to disable use of the keys\r\n this.enableKeys = true;\r\n\r\n // The four arrow keys\r\n this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\r\n\r\n // Mouse buttons\r\n this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\r\n\r\n // Touch fingers\r\n this.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };\r\n\r\n // for reset\r\n this.target0 = this.target.clone();\r\n this.position0 = this.object.position.clone();\r\n this.zoom0 = this.object.zoom;\r\n\r\n //\r\n // public methods\r\n //\r\n this.setPolarAngle = function () { }\r\n this.setAzimuthalAngle = function () {\r\n\r\n }\r\n this.panOrbit = function () {\r\n\r\n }\r\n this.getPolarAngle = function () {\r\n\r\n return spherical.phi;\r\n\r\n };\r\n\r\n this.getAzimuthalAngle = function () {\r\n\r\n return spherical.theta;\r\n\r\n };\r\n\r\n this.saveState = function () {\r\n\r\n scope.target0.copy(scope.target);\r\n scope.position0.copy(scope.object.position);\r\n scope.zoom0 = scope.object.zoom;\r\n\r\n };\r\n\r\n this.reset = function () {\r\n\r\n scope.target.copy(scope.target0);\r\n scope.object.position.copy(scope.position0);\r\n scope.object.zoom = scope.zoom0;\r\n\r\n scope.object.updateProjectionMatrix();\r\n scope.dispatchEvent(changeEvent);\r\n\r\n scope.update();\r\n\r\n state = STATE.NONE;\r\n\r\n };\r\n\r\n // this method is exposed, but perhaps it would be better if we can make it private...\r\n this.update = function () {\r\n\r\n var offset = new Vector3();\r\n\r\n // so camera.up is the orbit axis\r\n var quat = new Quaternion().setFromUnitVectors(object.up, new Vector3(0, 1, 0));\r\n var quatInverse = quat.clone().inverse();\r\n\r\n var lastPosition = new Vector3();\r\n var lastQuaternion = new Quaternion();\r\n\r\n return function update() {\r\n\r\n var position = scope.object.position;\r\n\r\n offset.copy(position).sub(scope.target);\r\n\r\n // rotate offset to \"y-axis-is-up\" space\r\n offset.applyQuaternion(quat);\r\n\r\n // angle from z-axis around y-axis\r\n spherical.setFromVector3(offset);\r\n\r\n if (scope.autoRotate && state === STATE.NONE) {\r\n\r\n rotateLeft(getAutoRotationAngle());\r\n\r\n }\r\n\r\n if (scope.enableDamping) {\r\n\r\n spherical.theta += sphericalDelta.theta * scope.dampingFactor;\r\n spherical.phi += sphericalDelta.phi * scope.dampingFactor;\r\n\r\n } else {\r\n\r\n spherical.theta += sphericalDelta.theta;\r\n spherical.phi += sphericalDelta.phi;\r\n\r\n }\r\n\r\n // restrict theta to be between desired limits\r\n spherical.theta = Math.max(scope.minAzimuthAngle, Math.min(scope.maxAzimuthAngle, spherical.theta));\r\n\r\n // restrict phi to be between desired limits\r\n spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));\r\n\r\n spherical.makeSafe();\r\n\r\n\r\n spherical.radius *= scale;\r\n\r\n // restrict radius to be between desired limits\r\n spherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius));\r\n\r\n // move target to panned location\r\n\r\n if (scope.enableDamping === true) {\r\n\r\n scope.target.addScaledVector(panOffset, scope.dampingFactor);\r\n\r\n } else {\r\n\r\n scope.target.add(panOffset);\r\n\r\n }\r\n\r\n offset.setFromSpherical(spherical);\r\n\r\n // rotate offset back to \"camera-up-vector-is-up\" space\r\n offset.applyQuaternion(quatInverse);\r\n\r\n position.copy(scope.target).add(offset);\r\n\r\n scope.object.lookAt(scope.target);\r\n\r\n if (scope.enableDamping === true) {\r\n\r\n sphericalDelta.theta *= (1 - scope.dampingFactor);\r\n sphericalDelta.phi *= (1 - scope.dampingFactor);\r\n\r\n panOffset.multiplyScalar(1 - scope.dampingFactor);\r\n\r\n } else {\r\n\r\n sphericalDelta.set(0, 0, 0);\r\n\r\n panOffset.set(0, 0, 0);\r\n\r\n }\r\n\r\n scale = 1;\r\n\r\n // update condition is:\r\n // min(camera displacement, camera rotation in radians)^2 > EPS\r\n // using small-angle approximation cos(x/2) = 1 - x^2 / 8\r\n\r\n if (zoomChanged ||\r\n lastPosition.distanceToSquared(scope.object.position) > EPS ||\r\n 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {\r\n\r\n scope.dispatchEvent(changeEvent);\r\n\r\n lastPosition.copy(scope.object.position);\r\n lastQuaternion.copy(scope.object.quaternion);\r\n zoomChanged = false;\r\n\r\n return true;\r\n\r\n }\r\n\r\n return false;\r\n\r\n };\r\n\r\n }();\r\n\r\n this.dispose = function () {\r\n\r\n scope.domElement.removeEventListener('contextmenu', onContextMenu, false);\r\n scope.domElement.removeEventListener('mousedown', onMouseDown, false);\r\n scope.domElement.removeEventListener('wheel', onMouseWheel, false);\r\n\r\n scope.domElement.removeEventListener('touchstart', onTouchStart, false);\r\n scope.domElement.removeEventListener('touchend', onTouchEnd, false);\r\n scope.domElement.removeEventListener('touchmove', onTouchMove, false);\r\n\r\n document.removeEventListener('mousemove', onMouseMove, false);\r\n document.removeEventListener('mouseup', onMouseUp, false);\r\n\r\n scope.domElement.removeEventListener('keydown', onKeyDown, false);\r\n\r\n //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\r\n\r\n };\r\n\r\n //\r\n // internals\r\n //\r\n\r\n var scope = this;\r\n\r\n var changeEvent = { type: 'change' };\r\n var startEvent = { type: 'start' };\r\n var endEvent = { type: 'end' };\r\n\r\n var STATE = {\r\n NONE: - 1,\r\n ROTATE: 0,\r\n DOLLY: 1,\r\n PAN: 2,\r\n TOUCH_ROTATE: 3,\r\n TOUCH_PAN: 4,\r\n TOUCH_DOLLY_PAN: 5,\r\n TOUCH_DOLLY_ROTATE: 6\r\n };\r\n\r\n var state = STATE.NONE;\r\n\r\n var EPS = 0.000001;\r\n\r\n // current position in spherical coordinates\r\n var spherical = new Spherical();\r\n var sphericalDelta = new Spherical();\r\n\r\n var scale = 1;\r\n var panOffset = new Vector3();\r\n var zoomChanged = false;\r\n\r\n var rotateStart = new Vector2();\r\n var rotateEnd = new Vector2();\r\n var rotateDelta = new Vector2();\r\n\r\n var panStart = new Vector2();\r\n var panEnd = new Vector2();\r\n var panDelta = new Vector2();\r\n\r\n var dollyStart = new Vector2();\r\n var dollyEnd = new Vector2();\r\n var dollyDelta = new Vector2();\r\n\r\n function getAutoRotationAngle() {\r\n\r\n return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\r\n\r\n }\r\n\r\n function getZoomScale() {\r\n\r\n return Math.pow(0.95, scope.zoomSpeed);\r\n\r\n }\r\n\r\n function rotateLeft(angle) {\r\n\r\n sphericalDelta.theta -= angle;\r\n\r\n }\r\n this.rotateLeft = rotateLeft;\r\n\r\n function rotateUp(angle) {\r\n\r\n sphericalDelta.phi -= angle;\r\n\r\n }\r\n this.rotateUp = rotateUp;\r\n var panLeft = function () {\r\n\r\n var v = new Vector3();\r\n\r\n return function panLeft(distance, objectMatrix) {\r\n\r\n v.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix\r\n v.multiplyScalar(- distance);\r\n\r\n panOffset.add(v);\r\n\r\n };\r\n\r\n }();\r\n var panUp = function () {\r\n\r\n var v = new Vector3();\r\n\r\n return function panUp(distance, objectMatrix) {\r\n\r\n if (scope.screenSpacePanning === true) {\r\n\r\n v.setFromMatrixColumn(objectMatrix, 1);\r\n\r\n } else {\r\n\r\n v.setFromMatrixColumn(objectMatrix, 0);\r\n v.crossVectors(scope.object.up, v);\r\n\r\n }\r\n\r\n v.multiplyScalar(distance);\r\n\r\n panOffset.add(v);\r\n\r\n };\r\n\r\n }();\r\n\r\n // deltaX and deltaY are in pixels; right and down are positive\r\n var pan = function () {\r\n\r\n var offset = new Vector3();\r\n\r\n return function pan(deltaX, deltaY) {\r\n\r\n var element = scope.domElement;\r\n\r\n if (scope.object.isPerspectiveCamera) {\r\n\r\n // perspective\r\n var position = scope.object.position;\r\n offset.copy(position).sub(scope.target);\r\n var targetDistance = offset.length();\r\n\r\n // half of the fov is center to top of screen\r\n targetDistance *= Math.tan((scope.object.fov / 2) * Math.PI / 180.0);\r\n\r\n // we use only clientHeight here so aspect ratio does not distort speed\r\n panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix);\r\n panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix);\r\n\r\n } else if (scope.object.isOrthographicCamera) {\r\n\r\n // orthographic\r\n panLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix);\r\n panUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix);\r\n\r\n } else {\r\n\r\n // camera neither orthographic nor perspective\r\n console.warn('WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.');\r\n scope.enablePan = false;\r\n\r\n }\r\n\r\n };\r\n\r\n }();\r\n this.pan = pan\r\n\r\n function dollyIn(dollyScale) {\r\n\r\n if (scope.object.isPerspectiveCamera) {\r\n\r\n scale /= dollyScale;\r\n\r\n } else if (scope.object.isOrthographicCamera) {\r\n\r\n scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale));\r\n scope.object.updateProjectionMatrix();\r\n zoomChanged = true;\r\n\r\n } else {\r\n\r\n console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.');\r\n scope.enableZoom = false;\r\n\r\n }\r\n\r\n }\r\n\r\n function dollyOut(dollyScale) {\r\n\r\n if (scope.object.isPerspectiveCamera) {\r\n\r\n scale *= dollyScale;\r\n\r\n } else if (scope.object.isOrthographicCamera) {\r\n\r\n scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale));\r\n scope.object.updateProjectionMatrix();\r\n zoomChanged = true;\r\n\r\n } else {\r\n\r\n console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.');\r\n scope.enableZoom = false;\r\n\r\n }\r\n\r\n }\r\n\r\n //\r\n // event callbacks - update the object state\r\n //\r\n\r\n function handleMouseDownRotate(event) {\r\n\r\n rotateStart.set(event.clientX, event.clientY);\r\n\r\n }\r\n\r\n function handleMouseDownDolly(event) {\r\n\r\n dollyStart.set(event.clientX, event.clientY);\r\n\r\n }\r\n\r\n function handleMouseDownPan(event) {\r\n\r\n panStart.set(event.clientX, event.clientY);\r\n\r\n }\r\n\r\n function handleMouseMoveRotate(event) {\r\n\r\n rotateEnd.set(event.clientX, event.clientY);\r\n\r\n rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);\r\n\r\n var element = scope.domElement;\r\n\r\n rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, height\r\n\r\n rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight);\r\n\r\n rotateStart.copy(rotateEnd);\r\n\r\n scope.update();\r\n\r\n }\r\n\r\n function handleMouseMoveDolly(event) {\r\n\r\n dollyEnd.set(event.clientX, event.clientY);\r\n\r\n dollyDelta.subVectors(dollyEnd, dollyStart);\r\n\r\n if (dollyDelta.y > 0) {\r\n\r\n dollyIn(getZoomScale());\r\n\r\n } else if (dollyDelta.y < 0) {\r\n\r\n dollyOut(getZoomScale());\r\n\r\n }\r\n\r\n dollyStart.copy(dollyEnd);\r\n\r\n scope.update();\r\n\r\n }\r\n\r\n function handleMouseMovePan(event) {\r\n\r\n panEnd.set(event.clientX, event.clientY);\r\n\r\n panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);\r\n\r\n pan(panDelta.x, panDelta.y);\r\n\r\n panStart.copy(panEnd);\r\n\r\n scope.update();\r\n\r\n }\r\n\r\n function handleMouseUp( /*event*/) {\r\n\r\n // no-op\r\n\r\n }\r\n\r\n function handleMouseWheel(event) {\r\n\r\n if (event.deltaY < 0) {\r\n\r\n dollyOut(getZoomScale());\r\n\r\n } else if (event.deltaY > 0) {\r\n\r\n dollyIn(getZoomScale());\r\n\r\n }\r\n\r\n scope.update();\r\n\r\n }\r\n\r\n function handleKeyDown(event) {\r\n\r\n var needsUpdate = false;\r\n\r\n switch (event.keyCode) {\r\n\r\n case scope.keys.UP:\r\n pan(0, scope.keyPanSpeed);\r\n needsUpdate = true;\r\n break;\r\n\r\n case scope.keys.BOTTOM:\r\n pan(0, - scope.keyPanSpeed);\r\n needsUpdate = true;\r\n break;\r\n\r\n case scope.keys.LEFT:\r\n pan(scope.keyPanSpeed, 0);\r\n needsUpdate = true;\r\n break;\r\n\r\n case scope.keys.RIGHT:\r\n pan(- scope.keyPanSpeed, 0);\r\n needsUpdate = true;\r\n break;\r\n\r\n }\r\n\r\n if (needsUpdate) {\r\n\r\n // prevent the browser from scrolling on cursor keys\r\n event.preventDefault();\r\n\r\n scope.update();\r\n\r\n }\r\n\r\n\r\n }\r\n\r\n function handleTouchStartRotate(event) {\r\n\r\n if (event.touches.length == 1) {\r\n\r\n rotateStart.set(event.touches[0].pageX, event.touches[0].pageY);\r\n\r\n } else {\r\n\r\n var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX);\r\n var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY);\r\n\r\n rotateStart.set(x, y);\r\n\r\n }\r\n\r\n }\r\n\r\n function handleTouchStartPan(event) {\r\n\r\n if (event.touches.length == 1) {\r\n\r\n panStart.set(event.touches[0].pageX, event.touches[0].pageY);\r\n\r\n } else {\r\n\r\n var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX);\r\n var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY);\r\n\r\n panStart.set(x, y);\r\n\r\n }\r\n\r\n }\r\n\r\n function handleTouchStartDolly(event) {\r\n\r\n var dx = event.touches[0].pageX - event.touches[1].pageX;\r\n var dy = event.touches[0].pageY - event.touches[1].pageY;\r\n\r\n var distance = Math.sqrt(dx * dx + dy * dy);\r\n\r\n dollyStart.set(0, distance);\r\n\r\n }\r\n\r\n function handleTouchStartDollyPan(event) {\r\n\r\n if (scope.enableZoom) handleTouchStartDolly(event);\r\n\r\n if (scope.enablePan) handleTouchStartPan(event);\r\n\r\n }\r\n\r\n function handleTouchStartDollyRotate(event) {\r\n\r\n if (scope.enableZoom) handleTouchStartDolly(event);\r\n\r\n if (scope.enableRotate) handleTouchStartRotate(event);\r\n\r\n }\r\n\r\n function handleTouchMoveRotate(event) {\r\n\r\n if (event.touches.length == 1) {\r\n\r\n rotateEnd.set(event.touches[0].pageX, event.touches[0].pageY);\r\n\r\n } else {\r\n\r\n var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX);\r\n var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY);\r\n\r\n rotateEnd.set(x, y);\r\n\r\n }\r\n\r\n rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);\r\n\r\n var element = scope.domElement;\r\n\r\n rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, height\r\n\r\n rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight);\r\n\r\n rotateStart.copy(rotateEnd);\r\n\r\n }\r\n\r\n function handleTouchMovePan(event) {\r\n\r\n if (event.touches.length == 1) {\r\n\r\n panEnd.set(event.touches[0].pageX, event.touches[0].pageY);\r\n\r\n } else {\r\n\r\n var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX);\r\n var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY);\r\n\r\n panEnd.set(x, y);\r\n\r\n }\r\n\r\n panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);\r\n\r\n pan(panDelta.x, panDelta.y);\r\n\r\n panStart.copy(panEnd);\r\n\r\n }\r\n\r\n function handleTouchMoveDolly(event) {\r\n\r\n var dx = event.touches[0].pageX - event.touches[1].pageX;\r\n var dy = event.touches[0].pageY - event.touches[1].pageY;\r\n\r\n var distance = Math.sqrt(dx * dx + dy * dy);\r\n\r\n dollyEnd.set(0, distance);\r\n\r\n dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed));\r\n\r\n dollyIn(dollyDelta.y);\r\n\r\n dollyStart.copy(dollyEnd);\r\n\r\n }\r\n\r\n function handleTouchMoveDollyPan(event) {\r\n\r\n if (scope.enableZoom) handleTouchMoveDolly(event);\r\n\r\n if (scope.enablePan) handleTouchMovePan(event);\r\n\r\n }\r\n\r\n function handleTouchMoveDollyRotate(event) {\r\n\r\n if (scope.enableZoom) handleTouchMoveDolly(event);\r\n\r\n if (scope.enableRotate) handleTouchMoveRotate(event);\r\n\r\n }\r\n\r\n function handleTouchEnd( /*event*/) {\r\n\r\n // no-op\r\n\r\n }\r\n\r\n //\r\n // event handlers - FSM: listen for events and reset state\r\n //\r\n\r\n function onMouseDown(event) {\r\n\r\n if (scope.enabled === false) return;\r\n\r\n // Prevent the browser from scrolling.\r\n\r\n event.preventDefault();\r\n\r\n // Manually set the focus since calling preventDefault above\r\n // prevents the browser from setting it automatically.\r\n\r\n scope.domElement.focus ? scope.domElement.focus() : window.focus();\r\n\r\n switch (event.button) {\r\n\r\n case 0:\r\n\r\n switch (scope.mouseButtons.LEFT) {\r\n\r\n case MOUSE.ROTATE:\r\n\r\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\r\n\r\n if (scope.enablePan === false) return;\r\n\r\n handleMouseDownPan(event);\r\n\r\n state = STATE.PAN;\r\n\r\n } else {\r\n\r\n if (scope.enableRotate === false) return;\r\n\r\n handleMouseDownRotate(event);\r\n\r\n state = STATE.ROTATE;\r\n\r\n }\r\n\r\n break;\r\n\r\n case MOUSE.PAN:\r\n\r\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\r\n\r\n if (scope.enableRotate === false) return;\r\n\r\n handleMouseDownRotate(event);\r\n\r\n state = STATE.ROTATE;\r\n\r\n } else {\r\n\r\n if (scope.enablePan === false) return;\r\n\r\n handleMouseDownPan(event);\r\n\r\n state = STATE.PAN;\r\n\r\n }\r\n\r\n break;\r\n\r\n default:\r\n\r\n state = STATE.NONE;\r\n\r\n }\r\n\r\n break;\r\n\r\n\r\n case 1:\r\n\r\n switch (scope.mouseButtons.MIDDLE) {\r\n\r\n case MOUSE.DOLLY:\r\n\r\n if (scope.enableZoom === false) return;\r\n\r\n handleMouseDownDolly(event);\r\n\r\n state = STATE.DOLLY;\r\n\r\n break;\r\n\r\n\r\n default:\r\n\r\n state = STATE.NONE;\r\n\r\n }\r\n\r\n break;\r\n\r\n case 2:\r\n\r\n switch (scope.mouseButtons.RIGHT) {\r\n\r\n case MOUSE.ROTATE:\r\n\r\n if (scope.enableRotate === false) return;\r\n\r\n handleMouseDownRotate(event);\r\n\r\n state = STATE.ROTATE;\r\n\r\n break;\r\n\r\n case MOUSE.PAN:\r\n\r\n if (scope.enablePan === false) return;\r\n\r\n handleMouseDownPan(event);\r\n\r\n state = STATE.PAN;\r\n\r\n break;\r\n\r\n default:\r\n\r\n state = STATE.NONE;\r\n\r\n }\r\n\r\n break;\r\n\r\n }\r\n\r\n if (state !== STATE.NONE) {\r\n\r\n document.addEventListener('mousemove', onMouseMove, false);\r\n document.addEventListener('mouseup', onMouseUp, false);\r\n\r\n scope.dispatchEvent(startEvent);\r\n\r\n }\r\n\r\n }\r\n\r\n function onMouseMove(event) {\r\n\r\n if (scope.enabled === false) return;\r\n\r\n event.preventDefault();\r\n\r\n switch (state) {\r\n\r\n case STATE.ROTATE:\r\n\r\n if (scope.enableRotate === false) return;\r\n\r\n handleMouseMoveRotate(event);\r\n\r\n break;\r\n\r\n case STATE.DOLLY:\r\n\r\n if (scope.enableZoom === false) return;\r\n\r\n handleMouseMoveDolly(event);\r\n\r\n break;\r\n\r\n case STATE.PAN:\r\n\r\n if (scope.enablePan === false) return;\r\n\r\n handleMouseMovePan(event);\r\n\r\n break;\r\n\r\n }\r\n\r\n }\r\n\r\n function onMouseUp(event) {\r\n\r\n if (scope.enabled === false) return;\r\n\r\n handleMouseUp(event);\r\n\r\n document.removeEventListener('mousemove', onMouseMove, false);\r\n document.removeEventListener('mouseup', onMouseUp, false);\r\n\r\n scope.dispatchEvent(endEvent);\r\n\r\n state = STATE.NONE;\r\n\r\n }\r\n\r\n function onMouseWheel(event) {\r\n\r\n if (scope.enabled === false || scope.enableZoom === false || (state !== STATE.NONE && state !== STATE.ROTATE)) return;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n scope.dispatchEvent(startEvent);\r\n\r\n handleMouseWheel(event);\r\n\r\n scope.dispatchEvent(endEvent);\r\n\r\n }\r\n\r\n function onKeyDown(event) {\r\n\r\n if (scope.enabled === false || scope.enableKeys === false || scope.enablePan === false) return;\r\n\r\n handleKeyDown(event);\r\n\r\n }\r\n\r\n function onTouchStart(event) {\r\n\r\n if (scope.enabled === false) return;\r\n\r\n event.preventDefault();\r\n\r\n switch (event.touches.length) {\r\n\r\n case 1:\r\n\r\n switch (scope.touches.ONE) {\r\n\r\n case TOUCH.ROTATE:\r\n\r\n if (scope.enableRotate === false) return;\r\n\r\n handleTouchStartRotate(event);\r\n\r\n state = STATE.TOUCH_ROTATE;\r\n\r\n break;\r\n\r\n case TOUCH.PAN:\r\n\r\n if (scope.enablePan === false) return;\r\n\r\n handleTouchStartPan(event);\r\n\r\n state = STATE.TOUCH_PAN;\r\n\r\n break;\r\n\r\n default:\r\n\r\n state = STATE.NONE;\r\n\r\n }\r\n\r\n break;\r\n\r\n case 2:\r\n\r\n switch (scope.touches.TWO) {\r\n\r\n case TOUCH.DOLLY_PAN:\r\n\r\n if (scope.enableZoom === false && scope.enablePan === false) return;\r\n\r\n handleTouchStartDollyPan(event);\r\n\r\n state = STATE.TOUCH_DOLLY_PAN;\r\n\r\n break;\r\n\r\n case TOUCH.DOLLY_ROTATE:\r\n\r\n if (scope.enableZoom === false && scope.enableRotate === false) return;\r\n\r\n handleTouchStartDollyRotate(event);\r\n\r\n state = STATE.TOUCH_DOLLY_ROTATE;\r\n\r\n break;\r\n\r\n default:\r\n\r\n state = STATE.NONE;\r\n\r\n }\r\n\r\n break;\r\n\r\n default:\r\n\r\n state = STATE.NONE;\r\n\r\n }\r\n\r\n if (state !== STATE.NONE) {\r\n\r\n scope.dispatchEvent(startEvent);\r\n\r\n }\r\n\r\n }\r\n\r\n function onTouchMove(event) {\r\n\r\n if (scope.enabled === false) return;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (state) {\r\n\r\n case STATE.TOUCH_ROTATE:\r\n\r\n if (scope.enableRotate === false) return;\r\n\r\n handleTouchMoveRotate(event);\r\n\r\n scope.update();\r\n\r\n break;\r\n\r\n case STATE.TOUCH_PAN:\r\n\r\n if (scope.enablePan === false) return;\r\n\r\n handleTouchMovePan(event);\r\n\r\n scope.update();\r\n\r\n break;\r\n\r\n case STATE.TOUCH_DOLLY_PAN:\r\n\r\n if (scope.enableZoom === false && scope.enablePan === false) return;\r\n\r\n handleTouchMoveDollyPan(event);\r\n\r\n scope.update();\r\n\r\n break;\r\n\r\n case STATE.TOUCH_DOLLY_ROTATE:\r\n\r\n if (scope.enableZoom === false && scope.enableRotate === false) return;\r\n\r\n handleTouchMoveDollyRotate(event);\r\n\r\n scope.update();\r\n\r\n break;\r\n\r\n default:\r\n\r\n state = STATE.NONE;\r\n\r\n }\r\n\r\n }\r\n\r\n function onTouchEnd(event) {\r\n\r\n if (scope.enabled === false) return;\r\n\r\n handleTouchEnd(event);\r\n\r\n scope.dispatchEvent(endEvent);\r\n\r\n state = STATE.NONE;\r\n\r\n }\r\n\r\n function onContextMenu(event) {\r\n\r\n if (scope.enabled === false) return;\r\n\r\n event.preventDefault();\r\n\r\n }\r\n\r\n //\r\n\r\n scope.domElement.addEventListener('contextmenu', onContextMenu, false);\r\n\r\n scope.domElement.addEventListener('mousedown', onMouseDown, false);\r\n scope.domElement.addEventListener('wheel', onMouseWheel, false);\r\n\r\n scope.domElement.addEventListener('touchstart', onTouchStart, false);\r\n scope.domElement.addEventListener('touchend', onTouchEnd, false);\r\n scope.domElement.addEventListener('touchmove', onTouchMove, false);\r\n\r\n scope.domElement.addEventListener('keydown', onKeyDown, false);\r\n\r\n // make sure element can receive keys.\r\n\r\n if (scope.domElement.tabIndex === - 1) {\r\n\r\n scope.domElement.tabIndex = 0;\r\n\r\n }\r\n\r\n // force an update at start\r\n\r\n this.update();\r\n\r\n};\r\n\r\nOrbitControls.prototype = Object.create(EventDispatcher.prototype);\r\nOrbitControls.prototype.constructor = OrbitControls;\r\n\r\n\r\n// This set of controls performs orbiting, dollying (zooming), and panning.\r\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\r\n// This is very similar to OrbitControls, another set of touch behavior\r\n//\r\n// Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate\r\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\r\n// Pan - left mouse, or arrow keys / touch: one-finger move\r\n\r\nvar MapControls = function (object, domElement) {\r\n\r\n OrbitControls.call(this, object, domElement);\r\n\r\n this.mouseButtons.LEFT = MOUSE.PAN;\r\n this.mouseButtons.RIGHT = MOUSE.ROTATE;\r\n\r\n this.touches.ONE = TOUCH.PAN;\r\n this.touches.TWO = TOUCH.DOLLY_ROTATE;\r\n\r\n};\r\n\r\nMapControls.prototype = Object.create(EventDispatcher.prototype);\r\nMapControls.prototype.constructor = MapControls;\r\n\r\nexport { OrbitControls, MapControls };\r\n","import { EventDispatcher } from './event-dispatcher';\r\n\r\nlet THREE;\r\nlet _AXIS_Y;\r\nlet _v2;\r\nlet _v3A;\r\nlet _v3B;\r\nlet _v3C;\r\nlet _v4;\r\nlet _xColumn;\r\nlet _yColumn;\r\nlet _sphericalA;\r\nlet _sphericalB;\r\nconst EPSILON = 0.001;\r\nconst PI_2 = Math.PI * 2;\r\nconst STATE = {\r\n\tNONE: - 1,\r\n\tROTATE: 0,\r\n\tDOLLY: 1,\r\n\tTRUCK: 2,\r\n\tTOUCH_ROTATE: 3,\r\n\tTOUCH_DOLLY_TRUCK: 4,\r\n\tTOUCH_TRUCK: 5,\r\n};\r\n\r\nexport default class CameraControls extends EventDispatcher {\r\n\r\n\tstatic install(libs) {\r\n\r\n\t\tTHREE = libs.THREE;\r\n\t\t_AXIS_Y = new THREE.Vector3(0, 1, 0);\r\n\t\t_v2 = new THREE.Vector2();\r\n\t\t_v3A = new THREE.Vector3();\r\n\t\t_v3B = new THREE.Vector3();\r\n\t\t_v3C = new THREE.Vector3();\r\n\t\t_v4 = new THREE.Vector4();\r\n\t\t_xColumn = new THREE.Vector3();\r\n\t\t_yColumn = new THREE.Vector3();\r\n\t\t_sphericalA = new THREE.Spherical();\r\n\t\t_sphericalB = new THREE.Spherical();\r\n\r\n\t}\r\n\r\n\tconstructor(camera, domElement, options = {}) {\r\n\r\n\t\tsuper();\r\n\r\n\t\tthis._camera = camera;\r\n\t\tthis._yAxisUpSpace = new THREE.Quaternion().setFromUnitVectors(this._camera.up, _AXIS_Y);\r\n\t\tthis._yAxisUpSpaceInverse = this._yAxisUpSpace.clone().inverse();\r\n\t\tthis._state = STATE.NONE;\r\n\t\tthis.enabled = true;\r\n\r\n\t\tif (this._camera.isPerspectiveCamera) {\r\n\r\n\t\t\t// How far you can dolly in and out ( PerspectiveCamera only )\r\n\t\t\tthis.minDistance = 0;\r\n\t\t\tthis.maxDistance = Infinity;\r\n\r\n\t\t} else if (this._camera.isOrthographicCamera) {\r\n\r\n\t\t\t// How far you can zoom in and out ( OrthographicCamera only )\r\n\t\t\tthis.minZoom = 0;\r\n\t\t\tthis.maxZoom = Infinity;\r\n\r\n\t\t}\r\n\r\n\t\tthis.minPolarAngle = 0; // radians\r\n\t\tthis.maxPolarAngle = Math.PI; // radians\r\n\t\tthis.minAzimuthAngle = - Infinity; // radians\r\n\t\tthis.maxAzimuthAngle = Infinity; // radians\r\n\r\n\t\t// Target cannot move outside of this box\r\n\t\tthis._boundary = new THREE.Box3(\r\n\t\t\tnew THREE.Vector3(- Infinity, - Infinity, - Infinity),\r\n\t\t\tnew THREE.Vector3(Infinity, Infinity, Infinity)\r\n\t\t);\r\n\t\tthis.boundaryFriction = 0.0;\r\n\t\tthis._boundaryEnclosesCamera = false;\r\n\r\n\t\tthis.dampingFactor = 0.05;\r\n\t\tthis.draggingDampingFactor = 0.25;\r\n\t\tthis.azimuthRotateSpeed = 1.0;\r\n\t\tthis.polarRotateSpeed = 1.0;\r\n\t\tthis.dollySpeed = 1.0;\r\n\t\tthis.truckSpeed = 2.0;\r\n\t\tthis.dollyToCursor = false;\r\n\t\tthis.verticalDragToForward = false;\r\n\r\n\t\tthis._domElement = domElement;\r\n\t\tthis._viewport = null;\r\n\r\n\t\t// the location of focus, where the object orbits around\r\n\t\tthis._target = new THREE.Vector3();\r\n\t\tthis._targetEnd = new THREE.Vector3();\r\n\r\n\t\t// rotation\r\n\t\tthis._spherical = new THREE.Spherical().setFromVector3(this._camera.position.applyQuaternion(this._yAxisUpSpace));\r\n\t\tthis._sphericalEnd = this._spherical.clone();\r\n\r\n\t\t// reset\r\n\t\tthis._target0 = this._target.clone();\r\n\t\tthis._position0 = this._camera.position.clone();\r\n\t\tthis._zoom0 = this._camera.zoom;\r\n\r\n\t\tthis._dollyControlAmount = 0;\r\n\t\tthis._dollyControlCoord = new THREE.Vector2();\r\n\t\tthis._hasUpdated = true;\r\n\t\tthis.update(0);\r\n\r\n\t\tif (!this._domElement || options.ignoreDOMEventListeners) {\r\n\r\n\t\t\tthis._removeAllEventListeners = () => { };\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconst scope = this;\r\n\t\t\tconst dragStart = new THREE.Vector2();\r\n\t\t\tconst dollyStart = new THREE.Vector2();\r\n\t\t\tlet elementRect;\r\n\r\n\t\t\tthis._domElement.addEventListener('mousedown', onMouseDown);\r\n\t\t\tthis._domElement.addEventListener('touchstart', onTouchStart);\r\n\t\t\tthis._domElement.addEventListener('wheel', onMouseWheel);\r\n\t\t\tthis._domElement.addEventListener('contextmenu', onContextMenu);\r\n\r\n\t\t\tthis._removeAllEventListeners = () => {\r\n\r\n\t\t\t\tscope._domElement.removeEventListener('mousedown', onMouseDown);\r\n\t\t\t\tscope._domElement.removeEventListener('touchstart', onTouchStart);\r\n\t\t\t\tscope._domElement.removeEventListener('wheel', onMouseWheel);\r\n\t\t\t\tscope._domElement.removeEventListener('contextmenu', onContextMenu);\r\n\t\t\t\tdocument.removeEventListener('mousemove', dragging);\r\n\t\t\t\tdocument.removeEventListener('touchmove', dragging);\r\n\t\t\t\tdocument.removeEventListener('mouseup', endDragging);\r\n\t\t\t\tdocument.removeEventListener('touchend', endDragging);\r\n\r\n\t\t\t};\r\n\r\n\t\t\tfunction extractClientCoordFromEvent(event, out) {\r\n\r\n\t\t\t\tout.set(0, 0);\r\n\r\n\t\t\t\tif (isTouchEvent(event)) {\r\n\r\n\t\t\t\t\tfor (let i = 0; i < event.touches.length; i++) {\r\n\r\n\t\t\t\t\t\tout.x += event.touches[i].clientX;\r\n\t\t\t\t\t\tout.y += event.touches[i].clientY;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tout.x /= event.touches.length;\r\n\t\t\t\t\tout.y /= event.touches.length;\r\n\t\t\t\t\treturn out;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tout.set(event.clientX, event.clientY);\r\n\t\t\t\t\treturn out;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction onMouseDown(event) {\r\n\r\n\t\t\t\tif (!scope.enabled) return;\r\n\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\tconst prevState = scope._state;\r\n\r\n\t\t\t\tswitch (event.button) {\r\n\t\t\t\t\tcase THREE.MOUSE.LEFT:\r\n\t\t\t\t\t\tscope._state = STATE.TRUCK;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase THREE.MOUSE.MIDDLE:\r\n\t\t\t\t\t\tscope._state = STATE.DOLLY;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase THREE.MOUSE.RIGHT:\r\n\t\t\t\t\t\tscope._state = STATE.ROTATE;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (prevState !== scope._state) {\r\n\r\n\t\t\t\t\tstartDragging(event);\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction onTouchStart(event) {\r\n\r\n\t\t\t\tif (!scope.enabled) return;\r\n\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\tconst prevState = scope._state;\r\n\r\n\t\t\t\tswitch (event.touches.length) {\r\n\r\n\t\t\t\t\tcase 1:\t// one-fingered touch: rotate\r\n\r\n\t\t\t\t\t\tscope._state = STATE.TOUCH_TRUCK;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 2:\t// two-fingered touch: dolly\r\n\r\n\t\t\t\t\t\tscope._state = STATE.TOUCH_ROTATE;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 3: // three-fingered touch: truck\r\n\r\n\t\t\t\t\t\tscope._state = STATE.TOUCH_DOLLY_TRUCK;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (prevState !== scope._state) {\r\n\r\n\t\t\t\t\tstartDragging(event);\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction onMouseWheel(event) {\r\n\r\n\t\t\t\tif (!scope.enabled) return;\r\n\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t// Ref: https://github.com/cedricpinson/osgjs/blob/00e5a7e9d9206c06fdde0436e1d62ab7cb5ce853/sources/osgViewer/input/source/InputSourceMouse.js#L89-L103\r\n\t\t\t\tconst mouseDeltaFactor = 120;\r\n\t\t\t\tconst deltaYFactor = navigator.platform.indexOf('Mac') === 0 ? - 1 : - 3;\r\n\r\n\t\t\t\tlet delta;\r\n\r\n\t\t\t\tif (event.wheelDelta !== undefined) {\r\n\r\n\t\t\t\t\tdelta = event.wheelDelta / mouseDeltaFactor;\r\n\r\n\t\t\t\t} else if (event.deltaMode === 1) {\r\n\r\n\t\t\t\t\tdelta = event.deltaY / deltaYFactor;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tdelta = event.deltaY / (10 * deltaYFactor);\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet x, y;\r\n\r\n\t\t\t\tif (scope.dollyToCursor) {\r\n\r\n\t\t\t\t\telementRect = scope._getClientRect(_v4);\r\n\t\t\t\t\tx = (event.clientX - elementRect.x) / elementRect.z * 2 - 1;\r\n\t\t\t\t\ty = (event.clientY - elementRect.y) / elementRect.w * - 2 + 1;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdollyInternal(- delta, x, y);\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction onContextMenu(event) {\r\n\r\n\t\t\t\tif (!scope.enabled) return;\r\n\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction startDragging(event) {\r\n\r\n\t\t\t\tif (!scope.enabled) return;\r\n\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\textractClientCoordFromEvent(event, _v2);\r\n\r\n\t\t\t\telementRect = scope._getClientRect(_v4);\r\n\t\t\t\tdragStart.copy(_v2);\r\n\r\n\t\t\t\tif (scope._state === STATE.TOUCH_DOLLY_TRUCK) {\r\n\r\n\t\t\t\t\t// 2 finger pinch\r\n\t\t\t\t\tconst dx = _v2.x - event.touches[1].clientX;\r\n\t\t\t\t\tconst dy = _v2.y - event.touches[1].clientY;\r\n\t\t\t\t\tconst distance = Math.sqrt(dx * dx + dy * dy);\r\n\r\n\t\t\t\t\tdollyStart.set(0, distance);\r\n\r\n\t\t\t\t\t// center coords of 2 finger truck\r\n\t\t\t\t\tconst x = (event.touches[0].clientX + event.touches[1].clientX) * 0.5;\r\n\t\t\t\t\tconst y = (event.touches[0].clientY + event.touches[1].clientY) * 0.5;\r\n\r\n\t\t\t\t\tdragStart.set(x, y);\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdocument.addEventListener('mousemove', dragging, { passive: false });\r\n\t\t\t\tdocument.addEventListener('touchmove', dragging, { passive: false });\r\n\t\t\t\tdocument.addEventListener('mouseup', endDragging);\r\n\t\t\t\tdocument.addEventListener('touchend', endDragging);\r\n\r\n\t\t\t\tscope.dispatchEvent({\r\n\t\t\t\t\ttype: 'controlstart',\r\n\t\t\t\t\toriginalEvent: event,\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction dragging(event) {\r\n\r\n\t\t\t\tif (!scope.enabled) return;\r\n\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\textractClientCoordFromEvent(event, _v2);\r\n\r\n\t\t\t\tconst deltaX = dragStart.x - _v2.x;\r\n\t\t\t\tconst deltaY = dragStart.y - _v2.y;\r\n\r\n\t\t\t\tdragStart.copy(_v2);\r\n\r\n\t\t\t\tswitch (scope._state) {\r\n\r\n\t\t\t\t\tcase STATE.ROTATE:\r\n\t\t\t\t\tcase STATE.TOUCH_ROTATE:\r\n\t\t\t\t\t\tconst theta = PI_2 * scope.azimuthRotateSpeed * deltaX / elementRect.z;\r\n\t\t\t\t\t\tconst phi = PI_2 * scope.polarRotateSpeed * deltaY / elementRect.w;\r\n\t\t\t\t\t\tscope.rotate(theta, phi, true);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase STATE.DOLLY:\r\n\t\t\t\t\t\t// not implemented\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase STATE.TOUCH_DOLLY_TRUCK:\r\n\r\n\t\t\t\t\t\tconst dx = _v2.x - event.touches[1].clientX;\r\n\t\t\t\t\t\tconst dy = _v2.y - event.touches[1].clientY;\r\n\t\t\t\t\t\tconst distance = Math.sqrt(dx * dx + dy * dy);\r\n\t\t\t\t\t\tconst dollyDelta = dollyStart.y - distance;\r\n\r\n\t\t\t\t\t\tconst touchDollyFactor = 8;\r\n\r\n\t\t\t\t\t\tconst dollyX = scope.dollyToCursor ? (dragStart.x - elementRect.x) / elementRect.z * 2 - 1 : 0;\r\n\t\t\t\t\t\tconst dollyY = scope.dollyToCursor ? (dragStart.y - elementRect.y) / elementRect.w * - 2 + 1 : 0;\r\n\t\t\t\t\t\tdollyInternal(dollyDelta / touchDollyFactor, dollyX, dollyY);\r\n\r\n\t\t\t\t\t\tdollyStart.set(0, distance);\r\n\t\t\t\t\t\ttruckInternal(deltaX, deltaY);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase STATE.TRUCK:\r\n\t\t\t\t\tcase STATE.TOUCH_TRUCK:\r\n\r\n\t\t\t\t\t\ttruckInternal(deltaX, deltaY);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tscope.dispatchEvent({\r\n\t\t\t\t\ttype: 'control',\r\n\t\t\t\t\toriginalEvent: event,\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction endDragging(event) {\r\n\r\n\t\t\t\tif (!scope.enabled) return;\r\n\r\n\t\t\t\tscope._state = STATE.NONE;\r\n\r\n\t\t\t\tdocument.removeEventListener('mousemove', dragging, { passive: false });\r\n\t\t\t\tdocument.removeEventListener('touchmove', dragging, { passive: false });\r\n\t\t\t\tdocument.removeEventListener('mouseup', endDragging);\r\n\t\t\t\tdocument.removeEventListener('touchend', endDragging);\r\n\r\n\t\t\t\tscope.dispatchEvent({\r\n\t\t\t\t\ttype: 'controlend',\r\n\t\t\t\t\toriginalEvent: event,\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction truckInternal(deltaX, deltaY) {\r\n\r\n\t\t\t\tif (scope._camera.isPerspectiveCamera) {\r\n\r\n\t\t\t\t\tconst offset = _v3A.copy(scope._camera.position).sub(scope._target);\r\n\t\t\t\t\t// half of the fov is center to top of screen\r\n\t\t\t\t\tconst fovInRad = scope._camera.fov * THREE.Math.DEG2RAD;\r\n\t\t\t\t\tconst targetDistance = offset.length() * Math.tan((fovInRad / 2));\r\n\t\t\t\t\tconst truckX = (scope.truckSpeed * deltaX * targetDistance / elementRect.w);\r\n\t\t\t\t\tconst pedestalY = (scope.truckSpeed * deltaY * targetDistance / elementRect.w);\r\n\t\t\t\t\tif (scope.verticalDragToForward) {\r\n\r\n\t\t\t\t\t\tscope.truck(truckX, 0, true);\r\n\t\t\t\t\t\tscope.forward(- pedestalY, true);\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tscope.truck(truckX, pedestalY, true);\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if (scope._camera.isOrthographicCamera) {\r\n\r\n\t\t\t\t\t// orthographic\r\n\t\t\t\t\tconst truckX = deltaX * (scope._camera.right - scope._camera.left) / scope._camera.zoom / elementRect.z;\r\n\t\t\t\t\tconst pedestalY = deltaY * (scope._camera.top - scope._camera.bottom) / scope._camera.zoom / elementRect.w;\r\n\t\t\t\t\tscope.truck(truckX, pedestalY, true);\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction dollyInternal(delta, x, y) {\r\n\r\n\t\t\t\tconst dollyScale = Math.pow(0.95, - delta * scope.dollySpeed);\r\n\r\n\t\t\t\tif (scope._camera.isPerspectiveCamera) {\r\n\r\n\t\t\t\t\tconst distance = scope._sphericalEnd.radius * dollyScale - scope._sphericalEnd.radius;\r\n\t\t\t\t\tconst prevRadius = scope._sphericalEnd.radius;\r\n\r\n\t\t\t\t\tscope.dolly(distance);\r\n\r\n\t\t\t\t\tif (scope.dollyToCursor) {\r\n\r\n\t\t\t\t\t\tscope._dollyControlAmount += scope._sphericalEnd.radius - prevRadius;\r\n\t\t\t\t\t\tscope._dollyControlCoord.set(x, y);\r\n\r\n\t\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\t} else if (scope._camera.isOrthographicCamera) {\r\n\r\n\t\t\t\t\tscope._camera.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope._camera.zoom * dollyScale));\r\n\t\t\t\t\tscope._camera.updateProjectionMatrix();\r\n\t\t\t\t\tscope._hasUpdated = true;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// wrong. phi should be map to polar, but backward compatibility.\r\n\tset phiSpeed(speed) {\r\n\r\n\t\tconsole.warn('phiSpeed was renamed. use azimuthRotateSpeed instead');\r\n\t\tthis.azimuthRotateSpeed = speed;\r\n\r\n\t}\r\n\r\n\t// wrong. theta should be map to azimuth, but backward compatibility.\r\n\tset thetaSpeed(speed) {\r\n\r\n\t\tconsole.warn('thetaSpeed was renamed. use polarRotateSpeed instead');\r\n\t\tthis.polarRotateSpeed = speed;\r\n\r\n\t}\r\n\r\n\tget boundaryEnclosesCamera() {\r\n\r\n\t\treturn this._boundaryEnclosesCamera;\r\n\r\n\t}\r\n\r\n\tset boundaryEnclosesCamera(boundaryEnclosesCamera) {\r\n\r\n\t\tthis._boundaryEnclosesCamera = boundaryEnclosesCamera;\r\n\t\tthis._hasUpdated = true;\r\n\r\n\t}\r\n\r\n\t// azimuthAngle in radian\r\n\t// polarAngle in radian\r\n\trotate(azimuthAngle, polarAngle, enableTransition) {\r\n\r\n\t\tthis.rotateTo(\r\n\t\t\tthis._sphericalEnd.theta + azimuthAngle,\r\n\t\t\tthis._sphericalEnd.phi + polarAngle,\r\n\t\t\tenableTransition\r\n\t\t);\r\n\r\n\t}\r\n\r\n\t// azimuthAngle in radian\r\n\t// polarAngle in radian\r\n\trotateTo(azimuthAngle, polarAngle, enableTransition) {\r\n\r\n\t\tconst theta = Math.max(this.minAzimuthAngle, Math.min(this.maxAzimuthAngle, azimuthAngle));\r\n\t\tconst phi = Math.max(this.minPolarAngle, Math.min(this.maxPolarAngle, polarAngle));\r\n\r\n\t\tthis._sphericalEnd.theta = theta;\r\n\t\tthis._sphericalEnd.phi = phi;\r\n\t\tthis._sphericalEnd.makeSafe();\r\n\r\n\t\tif (!enableTransition) {\r\n\r\n\t\t\tthis._spherical.theta = this._sphericalEnd.theta;\r\n\t\t\tthis._spherical.phi = this._sphericalEnd.phi;\r\n\r\n\t\t}\r\n\r\n\t\tthis._hasUpdated = true;\r\n\r\n\t}\r\n\r\n\tdolly(distance, enableTransition) {\r\n\r\n\t\tif (this._camera.isOrthographicCamera) {\r\n\r\n\t\t\tconsole.warn('dolly is not available for OrthographicCamera');\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tthis.dollyTo(this._sphericalEnd.radius + distance, enableTransition);\r\n\r\n\t}\r\n\r\n\tdollyTo(distance, enableTransition) {\r\n\r\n\t\tif (this._camera.isOrthographicCamera) {\r\n\r\n\t\t\tconsole.warn('dolly is not available for OrthographicCamera');\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tthis._sphericalEnd.radius = THREE.Math.clamp(\r\n\t\t\tdistance,\r\n\t\t\tthis.minDistance,\r\n\t\t\tthis.maxDistance\r\n\t\t);\r\n\r\n\t\tif (!enableTransition) {\r\n\r\n\t\t\tthis._spherical.radius = this._sphericalEnd.radius;\r\n\r\n\t\t}\r\n\r\n\t\tthis._hasUpdated = true;\r\n\r\n\t}\r\n\r\n\tpan(x, y, enableTransition) {\r\n\r\n\t\tconsole.log('`pan` has been renamed to `truck`');\r\n\t\tthis.truck(x, y, enableTransition);\r\n\r\n\t}\r\n\r\n\ttruck(x, y, enableTransition) {\r\n\r\n\t\tthis._camera.updateMatrix();\r\n\r\n\t\t_xColumn.setFromMatrixColumn(this._camera.matrix, 0);\r\n\t\t_yColumn.setFromMatrixColumn(this._camera.matrix, 1);\r\n\t\t_xColumn.multiplyScalar(x);\r\n\t\t_yColumn.multiplyScalar(- y);\r\n\r\n\t\tconst offset = _v3A.copy(_xColumn).add(_yColumn);\r\n\t\tthis._encloseToBoundary(this._targetEnd, offset, this.boundaryFriction);\r\n\r\n\t\tif (!enableTransition) {\r\n\r\n\t\t\tthis._target.copy(this._targetEnd);\r\n\r\n\t\t}\r\n\r\n\t\tthis._hasUpdated = true;\r\n\r\n\t}\r\n\r\n\tforward(distance, enableTransition) {\r\n\r\n\t\t_v3A.setFromMatrixColumn(this._camera.matrix, 0);\r\n\t\t_v3A.crossVectors(this._camera.up, _v3A);\r\n\t\t_v3A.multiplyScalar(distance);\r\n\r\n\t\tthis._encloseToBoundary(this._targetEnd, _v3A, this.boundaryFriction);\r\n\r\n\t\tif (!enableTransition) {\r\n\r\n\t\t\tthis._target.copy(this._targetEnd);\r\n\r\n\t\t}\r\n\r\n\t\tthis._hasUpdated = true;\r\n\r\n\t}\r\n\r\n\tmoveTo(x, y, z, enableTransition) {\r\n\r\n\t\tthis._targetEnd.set(x, y, z);\r\n\r\n\t\tif (!enableTransition) {\r\n\r\n\t\t\tthis._target.copy(this._targetEnd);\r\n\r\n\t\t}\r\n\r\n\t\tthis._hasUpdated = true;\r\n\r\n\t}\r\n\r\n\tfitTo(box3OrObject, enableTransition, options = {}) {\r\n\r\n\t\tif (this._camera.isOrthographicCamera) {\r\n\r\n\t\t\tconsole.warn('fitTo is not supported for OrthographicCamera');\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tconst paddingLeft = options.paddingLeft || 0;\r\n\t\tconst paddingRight = options.paddingRight || 0;\r\n\t\tconst paddingBottom = options.paddingBottom || 0;\r\n\t\tconst paddingTop = options.paddingTop || 0;\r\n\r\n\t\tconst boundingBox = box3OrObject.isBox3 ? box3OrObject.clone() : new THREE.Box3().setFromObject(box3OrObject);\r\n\t\tconst size = boundingBox.getSize(_v3A);\r\n\t\tconst boundingWidth = size.x + paddingLeft + paddingRight;\r\n\t\tconst boundingHeight = size.y + paddingTop + paddingBottom;\r\n\t\tconst boundingDepth = size.z;\r\n\r\n\t\tconst distance = this.getDistanceToFit(boundingWidth, boundingHeight, boundingDepth);\r\n\t\tthis.dollyTo(distance, enableTransition);\r\n\r\n\t\tconst boundingBoxCenter = boundingBox.getCenter(_v3A);\r\n\t\tconst cx = boundingBoxCenter.x - (paddingLeft * 0.5 - paddingRight * 0.5);\r\n\t\tconst cy = boundingBoxCenter.y + (paddingTop * 0.5 - paddingBottom * 0.5);\r\n\t\tconst cz = boundingBoxCenter.z;\r\n\t\tthis.moveTo(cx, cy, cz, enableTransition);\r\n\r\n\t\tthis._sanitizeSphericals();\r\n\t\tthis.rotateTo(0, 90 * THREE.Math.DEG2RAD, enableTransition);\r\n\r\n\t}\r\n\r\n\tsetLookAt(\r\n\t\tpositionX, positionY, positionZ,\r\n\t\ttargetX, targetY, targetZ,\r\n\t\tenableTransition\r\n\t) {\r\n\r\n\t\tconst position = _v3A.set(positionX, positionY, positionZ);\r\n\t\tconst target = _v3B.set(targetX, targetY, targetZ);\r\n\r\n\t\tthis._targetEnd.copy(target);\r\n\t\tthis._sphericalEnd.setFromVector3(position.sub(target));\r\n\t\tthis._sanitizeSphericals();\r\n\r\n\t\tif (!enableTransition) {\r\n\r\n\t\t\tthis._target.copy(this._targetEnd);\r\n\t\t\tthis._spherical.copy(this._sphericalEnd);\r\n\t\t}\r\n\t\tthis._hasUpdated = true;\r\n\r\n\t}\r\n\r\n\tlerpLookAt(\r\n\t\tpositionAX, positionAY, positionAZ,\r\n\t\ttargetAX, targetAY, targetAZ,\r\n\t\tpositionBX, positionBY, positionBZ,\r\n\t\ttargetBX, targetBY, targetBZ,\r\n\t\tt, enableTransition\r\n\t) {\r\n\r\n\t\tconst positionA = _v3A.set(positionAX, positionAY, positionAZ);\r\n\t\tconst targetA = _v3B.set(targetAX, targetAY, targetAZ);\r\n\t\t_sphericalA.setFromVector3(positionA.sub(targetA).applyQuaternion(this._yAxisUpSpace));\r\n\r\n\t\tconst targetB = _v3A.set(targetBX, targetBY, targetBZ);\r\n\t\tthis._targetEnd.copy(targetA).lerp(targetB, t); // tricky\r\n\r\n\t\tconst positionB = _v3B.set(positionBX, positionBY, positionBZ);\r\n\t\t_sphericalB.setFromVector3(positionB.sub(targetB).applyQuaternion(this._yAxisUpSpace));\r\n\r\n\t\tconst deltaTheta = _sphericalB.theta - _sphericalA.theta;\r\n\t\tconst deltaPhi = _sphericalB.phi - _sphericalA.phi;\r\n\t\tconst deltaRadius = _sphericalB.radius - _sphericalA.radius;\r\n\r\n\t\tthis._sphericalEnd.set(\r\n\t\t\t_sphericalA.radius + deltaRadius * t,\r\n\t\t\t_sphericalA.phi + deltaPhi * t,\r\n\t\t\t_sphericalA.theta + deltaTheta * t\r\n\t\t);\r\n\r\n\t\tthis._sanitizeSphericals();\r\n\r\n\t\tif (!enableTransition) {\r\n\r\n\t\t\tthis._target.copy(this._targetEnd);\r\n\t\t\tthis._spherical.copy(this._sphericalEnd);\r\n\r\n\t\t}\r\n\r\n\t\tthis._hasUpdated = true;\r\n\r\n\t}\r\n\r\n\tsetPosition(positionX, positionY, positionZ, enableTransition) {\r\n\r\n\t\tthis.setLookAt(\r\n\t\t\tpositionX, positionY, positionZ,\r\n\t\t\tthis._targetEnd.x, this._targetEnd.y, this._targetEnd.z,\r\n\t\t\tenableTransition\r\n\t\t);\r\n\r\n\t}\r\n\r\n\tsetTarget(targetX, targetY, targetZ, enableTransition) {\r\n\r\n\t\tconst pos = this.getPosition(_v3A);\r\n\t\tthis.setLookAt(\r\n\t\t\tpos.x, pos.y, pos.z,\r\n\t\t\ttargetX, targetY, targetZ,\r\n\t\t\tenableTransition\r\n\t\t);\r\n\r\n\t}\r\n\r\n\tsetBoundary(box3) {\r\n\r\n\t\tif (!box3) {\r\n\r\n\t\t\tthis._boundary.min.set(- Infinity, - Infinity, - Infinity);\r\n\t\t\tthis._boundary.max.set(Infinity, Infinity, Infinity);\r\n\t\t\tthis._hasUpdated = true;\r\n\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tthis._boundary.copy(box3);\r\n\t\tthis._boundary.clampPoint(this._targetEnd, this._targetEnd);\r\n\t\tthis._hasUpdated = true;\r\n\r\n\t}\r\n\r\n\tsetViewport(viewportOrX, y, width, height) {\r\n\r\n\t\tif (viewportOrX === null) { // null\r\n\r\n\t\t\tthis._viewport = null;\r\n\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tthis._viewport = this._viewport || new THREE.Vector4();\r\n\r\n\t\tif (typeof viewportOrX === 'number') { // number\r\n\r\n\t\t\tthis._viewport.set(viewportOrX, y, width, height);\r\n\r\n\t\t} else { // Vector4\r\n\r\n\t\t\tthis._viewport.copy(viewportOrX);\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tgetDistanceToFit(width, height, depth) {\r\n\r\n\t\tconst camera = this._camera;\r\n\t\tconst boundingRectAspect = width / height;\r\n\t\tconst fov = camera.fov * THREE.Math.DEG2RAD;\r\n\t\tconst aspect = camera.aspect;\r\n\r\n\t\tconst heightToFit = boundingRectAspect < aspect ? height : width / aspect;\r\n\t\treturn heightToFit * 0.5 / Math.tan(fov * 0.5) + depth * 0.5;\r\n\r\n\t}\r\n\r\n\tgetTarget(out) {\r\n\r\n\t\tconst _out = !!out && out.isVector3 ? out : new THREE.Vector3();\r\n\t\treturn _out.copy(this._targetEnd);\r\n\r\n\t}\r\n\r\n\tgetPosition(out) {\r\n\r\n\t\tconst _out = !!out && out.isVector3 ? out : new THREE.Vector3();\r\n\t\treturn _out.setFromSpherical(this._sphericalEnd).applyQuaternion(this._yAxisUpSpaceInverse).add(this._targetEnd);\r\n\r\n\t}\r\n\r\n\treset(enableTransition) {\r\n\r\n\t\tthis.setLookAt(\r\n\t\t\tthis._position0.x, this._position0.y, this._position0.z,\r\n\t\t\tthis._target0.x, this._target0.y, this._target0.z,\r\n\t\t\tenableTransition\r\n\t\t);\r\n\r\n\t}\r\n\r\n\tsaveState() {\r\n\r\n\t\tthis._target0.copy(this._target);\r\n\t\tthis._position0.copy(this._camera.position);\r\n\t\tthis._zoom0 = this._camera.zoom;\r\n\r\n\t}\r\n\r\n\tupdateCameraUp() {\r\n\r\n\t\tthis._yAxisUpSpace.setFromUnitVectors(this._camera.up, _AXIS_Y);\r\n\t\tthis._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).inverse();\r\n\r\n\t}\r\n\r\n\tupdate(delta) {\r\n\r\n\t\tconst currentDampingFactor = this._state === STATE.NONE ? this.dampingFactor : this.draggingDampingFactor;\r\n\t\tconst lerpRatio = 1.0 - Math.exp(- currentDampingFactor * delta / 0.016);\r\n\r\n\t\tconst deltaTheta = this._sphericalEnd.theta - this._spherical.theta;\r\n\t\tconst deltaPhi = this._sphericalEnd.phi - this._spherical.phi;\r\n\t\tconst deltaRadius = this._sphericalEnd.radius - this._spherical.radius;\r\n\t\tconst deltaTarget = _v3A.subVectors(this._targetEnd, this._target);\r\n\r\n\t\tif (\r\n\t\t\tMath.abs(deltaTheta) > EPSILON ||\r\n\t\t\tMath.abs(deltaPhi) > EPSILON ||\r\n\t\t\tMath.abs(deltaRadius) > EPSILON ||\r\n\t\t\tMath.abs(deltaTarget.x) > EPSILON ||\r\n\t\t\tMath.abs(deltaTarget.y) > EPSILON ||\r\n\t\t\tMath.abs(deltaTarget.z) > EPSILON\r\n\t\t) {\r\n\r\n\t\t\tthis._spherical.set(\r\n\t\t\t\tthis._spherical.radius + deltaRadius * lerpRatio,\r\n\t\t\t\tthis._spherical.phi + deltaPhi * lerpRatio,\r\n\t\t\t\tthis._spherical.theta + deltaTheta * lerpRatio\r\n\t\t\t);\r\n\r\n\t\t\tthis._target.add(deltaTarget.multiplyScalar(lerpRatio));\r\n\r\n\t\t\tthis._hasUpdated = true;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis._spherical.copy(this._sphericalEnd);\r\n\t\t\tthis._target.copy(this._targetEnd);\r\n\r\n\t\t}\r\n\r\n\t\tif (this._dollyControlAmount !== 0) {\r\n\r\n\t\t\tif (this._camera.isPerspectiveCamera) {\r\n\r\n\t\t\t\tconst direction = _v3A.copy(_v3A.setFromSpherical(this._sphericalEnd).applyQuaternion(this._yAxisUpSpaceInverse)).normalize().negate();\r\n\t\t\t\tconst planeX = _v3B.copy(direction).cross(_v3C.copy(this._camera.up)).normalize();\r\n\t\t\t\tif (planeX.lengthSq() === 0) planeX.x = 1.0;\r\n\t\t\t\tconst planeY = _v3C.crossVectors(planeX, direction);\r\n\t\t\t\tconst worldToScreen = this._sphericalEnd.radius * Math.tan(this._camera.fov * THREE.Math.DEG2RAD * 0.5);\r\n\t\t\t\tconst prevRadius = this._sphericalEnd.radius - this._dollyControlAmount;\r\n\t\t\t\tconst lerpRatio = (prevRadius - this._sphericalEnd.radius) / this._sphericalEnd.radius;\r\n\t\t\t\tconst cursor = _v3A.copy(this._targetEnd)\r\n\t\t\t\t\t.add(planeX.multiplyScalar(this._dollyControlCoord.x * worldToScreen * this._camera.aspect))\r\n\t\t\t\t\t.add(planeY.multiplyScalar(this._dollyControlCoord.y * worldToScreen));\r\n\t\t\t\tthis._targetEnd.lerp(cursor, lerpRatio);\r\n\t\t\t\tthis._target.copy(this._targetEnd);\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis._dollyControlAmount = 0;\r\n\r\n\t\t}\r\n\r\n\t\tthis._spherical.makeSafe();\r\n\t\tthis._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target);\r\n\t\tthis._camera.lookAt(this._target);\r\n\r\n\t\tif (this._boundaryEnclosesCamera) {\r\n\r\n\t\t\tthis._encloseToBoundary(\r\n\t\t\t\tthis._camera.position.copy(this._target),\r\n\t\t\t\t_v3A.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),\r\n\t\t\t\t1.0\r\n\t\t\t);\r\n\r\n\t\t}\r\n\r\n\t\tconst updated = this._hasUpdated;\r\n\t\tthis._hasUpdated = false;\r\n\r\n\t\tif (updated) this.dispatchEvent({ type: 'update' });\r\n\t\treturn updated;\r\n\r\n\t}\r\n\r\n\ttoJSON() {\r\n\r\n\t\treturn JSON.stringify({\r\n\t\t\tenabled: this.enabled,\r\n\r\n\t\t\tminDistance: this.minDistance,\r\n\t\t\tmaxDistance: infinityToMaxNumber(this.maxDistance),\r\n\t\t\tminPolarAngle: this.minPolarAngle,\r\n\t\t\tmaxPolarAngle: infinityToMaxNumber(this.maxPolarAngle),\r\n\t\t\tminAzimuthAngle: infinityToMaxNumber(this.minAzimuthAngle),\r\n\t\t\tmaxAzimuthAngle: infinityToMaxNumber(this.maxAzimuthAngle),\r\n\t\t\tdampingFactor: this.dampingFactor,\r\n\t\t\tdraggingDampingFactor: this.draggingDampingFactor,\r\n\t\t\tdollySpeed: this.dollySpeed,\r\n\t\t\ttruckSpeed: this.truckSpeed,\r\n\t\t\tdollyToCursor: this.dollyToCursor,\r\n\t\t\tverticalDragToForward: this.verticalDragToForward,\r\n\r\n\t\t\ttarget: this._targetEnd.toArray(),\r\n\t\t\tposition: this._camera.position.toArray(),\r\n\r\n\t\t\ttarget0: this._target0.toArray(),\r\n\t\t\tposition0: this._position0.toArray(),\r\n\t\t});\r\n\r\n\t}\r\n\r\n\tfromJSON(json, enableTransition) {\r\n\r\n\t\tconst obj = JSON.parse(json);\r\n\t\tconst position = new THREE.Vector3().fromArray(obj.position);\r\n\r\n\t\tthis.enabled = obj.enabled;\r\n\r\n\t\tthis.minDistance = obj.minDistance;\r\n\t\tthis.maxDistance = maxNumberToInfinity(obj.maxDistance);\r\n\t\tthis.minPolarAngle = obj.minPolarAngle;\r\n\t\tthis.maxPolarAngle = maxNumberToInfinity(obj.maxPolarAngle);\r\n\t\tthis.minAzimuthAngle = maxNumberToInfinity(obj.minAzimuthAngle);\r\n\t\tthis.maxAzimuthAngle = maxNumberToInfinity(obj.maxAzimuthAngle);\r\n\t\tthis.dampingFactor = obj.dampingFactor;\r\n\t\tthis.draggingDampingFactor = obj.draggingDampingFactor;\r\n\t\tthis.dollySpeed = obj.dollySpeed;\r\n\t\tthis.truckSpeed = obj.truckSpeed;\r\n\t\tthis.dollyToCursor = obj.dollyToCursor;\r\n\t\tthis.verticalDragToForward = obj.verticalDragToForward;\r\n\r\n\t\tthis._target0.fromArray(obj.target0);\r\n\t\tthis._position0.fromArray(obj.position0);\r\n\r\n\t\tthis._targetEnd.fromArray(obj.target);\r\n\t\tthis._sphericalEnd.setFromVector3(position.sub(this._target0).applyQuaternion(this._yAxisUpSpace));\r\n\r\n\t\tif (!enableTransition) {\r\n\r\n\t\t\tthis._target.copy(this._targetEnd);\r\n\t\t\tthis._spherical.copy(this._sphericalEnd);\r\n\r\n\t\t}\r\n\r\n\t\tthis._hasUpdated = true;\r\n\r\n\t}\r\n\r\n\tdispose() {\r\n\r\n\t\tthis._removeAllEventListeners();\r\n\r\n\t}\r\n\r\n\t_encloseToBoundary(position, offset, friction) {\r\n\r\n\t\tconst offsetLength2 = offset.lengthSq();\r\n\r\n\t\tif (offsetLength2 === 0.0) { // sanity check\r\n\r\n\t\t\treturn position;\r\n\r\n\t\t}\r\n\r\n\t\t// See: https://twitter.com/FMS_Cat/status/1106508958640988161\r\n\r\n\t\tconst newTarget = _v3B.copy(offset).add(position); // target\r\n\t\tconst clampedTarget = this._boundary.clampPoint(newTarget, _v3C); // clamped target\r\n\t\tconst deltaClampedTarget = clampedTarget.sub(newTarget); // newTarget -> clampedTarget\r\n\t\tconst deltaClampedTargetLength2 = deltaClampedTarget.lengthSq(); // squared length of deltaClampedTarget\r\n\r\n\t\tif (deltaClampedTargetLength2 === 0.0) { // when the position doesn't have to be clamped\r\n\r\n\t\t\treturn position.add(offset);\r\n\r\n\t\t} else if (deltaClampedTargetLength2 === offsetLength2) { // when the position is completely stuck\r\n\r\n\t\t\treturn position;\r\n\r\n\t\t} else if (friction === 0.0) {\r\n\r\n\t\t\treturn position.add(offset).add(deltaClampedTarget);\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconst offsetFactor = 1.0 + friction * deltaClampedTargetLength2 / offset.dot(deltaClampedTarget);\r\n\r\n\t\t\treturn position\r\n\t\t\t\t.add(_v3B.copy(offset).multiplyScalar(offsetFactor))\r\n\t\t\t\t.add(deltaClampedTarget.multiplyScalar(1.0 - friction));\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t_sanitizeSphericals() {\r\n\r\n\t\tthis._sphericalEnd.theta = this._sphericalEnd.theta % (PI_2);\r\n\t\tthis._spherical.theta += PI_2 * Math.round(\r\n\t\t\t(this._sphericalEnd.theta - this._spherical.theta) / (PI_2)\r\n\t\t);\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Get its client rect and package into given `THREE.Vector4` .\r\n\t */\r\n\t_getClientRect(target) {\r\n\r\n\t\tconst rect = this._domElement.getBoundingClientRect();\r\n\r\n\t\ttarget.x = rect.left;\r\n\t\ttarget.y = rect.top;\r\n\r\n\t\tif (this._viewport) {\r\n\r\n\t\t\ttarget.x += this._viewport.x;\r\n\t\t\ttarget.y += rect.height - this._viewport.w - this._viewport.y;\r\n\t\t\ttarget.z = this._viewport.z;\r\n\t\t\ttarget.w = this._viewport.w;\r\n\r\n\t\t} else {\r\n\r\n\t\t\ttarget.z = rect.width;\r\n\t\t\ttarget.w = rect.height;\r\n\r\n\t\t}\r\n\r\n\t\treturn target;\r\n\r\n\t}\r\n\r\n}\r\n\r\nfunction isTouchEvent(event) {\r\n\r\n\treturn 'TouchEvent' in window && event instanceof TouchEvent;\r\n\r\n}\r\n\r\nfunction infinityToMaxNumber(value) {\r\n\r\n\tif (isFinite(value)) return value;\r\n\r\n\tif (value < 0) return - Number.MAX_VALUE;\r\n\r\n\treturn Number.MAX_VALUE;\r\n\r\n}\r\n\r\nfunction maxNumberToInfinity(value) {\r\n\r\n\tif (Math.abs(value) < Number.MAX_VALUE) return value;\r\n\r\n\treturn value * Infinity;\r\n\r\n}\r\n","import * as THREE from \"three\";\r\nimport { OrbitControls } from \"../../utils/OrbitControls\";\r\nimport { FBXLoader } from \"three/examples/jsm/loaders/FBXLoader\";\r\nimport {\r\n convertArrIntoRad,\r\n convertArrintoDeg,\r\n convertUnit,\r\n areaOfellipse,\r\n createVector,\r\n readImage\r\n} from \"../../utils/utils\";\r\nimport { CanvasTexture } from \"three\";\r\nimport { createCanvas } from \"../../utils/canvasutils\";\r\nimport { makeUrl } from \"../../utils/utils\";\r\n\r\nclass ResourceTracker {\r\n constructor() {\r\n this.resources = new Set();\r\n this.resourceslocal = new Set();\r\n }\r\n track(resource) {\r\n if (!resource) {\r\n return resource;\r\n }\r\n // handle children and when material is an array of materials or\r\n // uniform is array of textures\r\n if (Array.isArray(resource)) {\r\n resource.forEach(resource => this.track(resource));\r\n return resource;\r\n }\r\n\r\n if (resource.dispose || resource instanceof THREE.Object3D) {\r\n this.resources.add(resource);\r\n }\r\n if (resource instanceof THREE.Object3D) {\r\n this.track(resource.geometry);\r\n this.track(resource.material);\r\n this.track(resource.children);\r\n } else if (resource instanceof THREE.Material) {\r\n // We have to check if there are any textures on the material\r\n for (const value of Object.values(resource)) {\r\n if (value instanceof THREE.Texture) {\r\n this.track(value);\r\n }\r\n }\r\n // We also have to check if any uniforms reference textures or arrays of textures\r\n if (resource.uniforms) {\r\n for (const value of Object.values(resource.uniforms)) {\r\n if (value) {\r\n const uniformValue = value.value;\r\n if (uniformValue instanceof THREE.Texture ||\r\n Array.isArray(uniformValue)) {\r\n this.track(uniformValue);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return resource;\r\n }\r\n tracklocal(resource) {\r\n if (!resource) {\r\n return resource;\r\n }\r\n // handle children and when material is an array of materials or\r\n // uniform is array of textures\r\n if (Array.isArray(resource)) {\r\n resource.forEach(resource => this.tracklocal(resource));\r\n return resource;\r\n }\r\n\r\n if (resource.dispose || resource instanceof THREE.Object3D) {\r\n this.resourceslocal.add(resource);\r\n }\r\n if (resource instanceof THREE.Object3D) {\r\n this.tracklocal(resource.geometry);\r\n this.tracklocal(resource.material);\r\n this.tracklocal(resource.children);\r\n } else if (resource instanceof THREE.Material) {\r\n // We have to check if there are any textures on the material\r\n for (const value of Object.values(resource)) {\r\n if (value instanceof THREE.Texture) {\r\n this.tracklocal(value);\r\n }\r\n }\r\n // We also have to check if any uniforms reference textures or arrays of textures\r\n if (resource.uniforms) {\r\n for (const value of Object.values(resource.uniforms)) {\r\n if (value) {\r\n const uniformValue = value.value;\r\n if (uniformValue instanceof THREE.Texture ||\r\n Array.isArray(uniformValue)) {\r\n this.tracklocal(uniformValue);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return resource;\r\n }\r\n untrack(resource) {\r\n this.resources.delete(resource);\r\n }\r\n untracklocal(resource) {\r\n this.resourceslocal.delete(resource);\r\n }\r\n async dispose() {\r\n return new Promise((resolve) => {\r\n const allresources = new Set([...this.resources, ...this.resourceslocal])\r\n let count = allresources.size;\r\n if (!count || count <= 0) resolve();\r\n for (const resource of allresources) {\r\n if (resource instanceof THREE.Object3D) {\r\n if (resource.parent) {\r\n resource.parent.remove(resource);\r\n }\r\n }\r\n if (resource.dispose) {\r\n resource.dispose();\r\n }\r\n count--;\r\n if (count <= 0) resolve();\r\n }\r\n this.resources.clear();\r\n this.resourceslocal.clear();\r\n })\r\n\r\n }\r\n disposelocal() {\r\n for (const resource of this.resourceslocal) {\r\n if (resource instanceof THREE.Object3D) {\r\n if (resource.parent) {\r\n resource.parent.remove(resource);\r\n }\r\n }\r\n if (resource.dispose) {\r\n resource.dispose();\r\n }\r\n }\r\n this.resourceslocal.clear();\r\n }\r\n}\r\n\r\n\r\nexport default class ThreeViewHelper {\r\n constructor() {\r\n this.scene = new THREE.Scene();\r\n\r\n this.textureLoader = new THREE.TextureLoader();\r\n this.fbxLoader = new FBXLoader();\r\n this.raycaster = new THREE.Raycaster();\r\n this.offset = new THREE.Vector3();\r\n this.carpetLoaded = false;\r\n this.objectLoaded = false;\r\n this.objects3d = [];\r\n this.resTracker = new ResourceTracker();\r\n this.track = this.resTracker.track.bind(this.resTracker);\r\n this.tracklocal = this.resTracker.tracklocal.bind(this.resTracker);\r\n }\r\n init({ canvas, config = {}, shot, dims = {}, surfaceName = \"surface1\", resolution, roomType, baseUrl }) {\r\n if (this.resTracker) {\r\n this.carpetLoaded ? this.resTracker.disposelocal() : this.resTracker.dispose();\r\n }\r\n let { width = window.innerWidth, height = window.innerHeight } = dims;\r\n this.w = width;\r\n this.h = height;\r\n this.surfaceName = surfaceName;\r\n this.sceneConfig = config;\r\n this.objProps = config[surfaceName];\r\n this.baseUrl = baseUrl;\r\n this.roomType = roomType\r\n if (roomType === \"illustration\") {\r\n canvas.style.visibility = \"hidden\";\r\n } else {\r\n canvas.style.visibility = \"inherit\";\r\n }\r\n this.renderer = this.tracklocal(new THREE.WebGLRenderer({\r\n canvas,\r\n preserveDrawingBuffer: true,\r\n alpha: true,\r\n antialias: false\r\n }));\r\n // window.renderer.push(this.renderer);\r\n this.renderer.setPixelRatio(resolution);\r\n this.renderer.setSize(width, height);\r\n const camConfig = config[shot];\r\n this.camera = this.tracklocal(perspectiveCamera({ ...camConfig, width, height }));\r\n this.scene.add(this.camera);\r\n window.scene = this.scene;\r\n this.orbit = addOrbitControl(this.renderer, this.scene, this.camera, camConfig);\r\n this.orbit.enabled = true;\r\n // this.orbit.screenSpacePanning = true;\r\n }\r\n setupLights() {\r\n this.directionalLight = this.track(new THREE.DirectionalLight(0xffffff, 0.9));\r\n this.scene.add(this.directionalLight);\r\n this.ambientLight = this.track(new THREE.AmbientLight(0xffffff, 0.5));\r\n this.scene.add(this.ambientLight);\r\n }\r\n removeLights() {\r\n if (this.directionalLight) {\r\n this.scene.remove(this.directionalLight);\r\n };\r\n if (this.ambientLight) {\r\n this.scene.remove(this.ambientLight);\r\n }\r\n }\r\n // setup3dObject({ fbxUrl }) {\r\n // if (this.carpetLoaded) {\r\n // this.scene.remove(this.carpetMesh);\r\n // const tarObj = this.scene.getObjectByName(\"TargetObject\");\r\n // this.scene.remove(tarObj);\r\n\r\n // this.carpetLoaded = false;\r\n // this.removeLights();\r\n // }\r\n // return new Promise((resolve, reject) => {\r\n // if (!this.sceneConfig) {\r\n // reject();\r\n // return;\r\n // }\r\n // const { objects3d, surfaces, availableSizes = [] } = this.sceneConfig;\r\n // const setupObjects = () => {\r\n // let objectsLoaded = 0;\r\n // objects3d.forEach(object3d => {\r\n // const object = this.objectFbx.getObjectByName(object3d);\r\n // if (!object) {\r\n // console.warn(\"PHOTOGRAPHIC VIEW: object\", object3d, \"does not exist\");\r\n // return;\r\n // }\r\n\r\n // const objectConfig = this.sceneConfig[object3d];\r\n // const {\r\n // position = [0, 0, 0],\r\n // rotation = [90, 0, 0],\r\n // scale = [1, 1, 1],\r\n // preset = false\r\n // } = objectConfig;\r\n // object.position.fromArray(position);\r\n // object.scale.fromArray(scale);\r\n // object.rotation.fromArray(convertArrIntoRad(rotation));\r\n // this.scene.add(object);\r\n // if (!preset) {\r\n // this.objProps = objectConfig;\r\n // if (surfaces) {\r\n // const { back, front } = surfaces;\r\n // this.objects3d.push(object.getObjectByName(front));\r\n // if (back) {\r\n // this.objectBack = object.getObjectByName(back);\r\n // this.hasBackSurface = true;\r\n // } else {\r\n // this.hasBackSurface = false;\r\n // }\r\n // } else {\r\n // if (this.material) {\r\n // object.material = this.material;\r\n // object.material.needsUpdate = true;\r\n // this.render();\r\n // }\r\n // this.objects3d.push(object);\r\n // }\r\n\r\n // objectsLoaded++;\r\n\r\n // if (objectsLoaded === objects3d.length) resolve(availableSizes);\r\n // } else {\r\n // const { defaultTexture, defaultScale = [9, 12] } = objectConfig;\r\n // const { width: texWidth = 9, height: texHeight = 12, path } = defaultTexture;\r\n // const textureUrl = `${this.baseUrl}/${path}`;\r\n // let repeat = [1, 1];\r\n // const rx = defaultScale[0] / texWidth;\r\n // const ry = defaultScale[1] / texHeight;\r\n // repeat = [rx, ry];\r\n // readImage(textureUrl).then(image => {\r\n // const { width, height } = image;\r\n // const canv = createCanvas(width, height);\r\n // canv.getContext(\"2d\").drawImage(image, 0, 0, width, height);\r\n\r\n // const texture = this.track(new THREE.CanvasTexture(canv));\r\n // texture.anisotropy = this.renderer.capabilities.getMaxAnisotropy();\r\n // texture.wrapS = texture.wrapT = THREE.RepeatWrapping;\r\n\r\n // texture.repeat.fromArray(repeat);\r\n\r\n // let material = this.track(new THREE.MeshBasicMaterial({\r\n // map: texture,\r\n // transparent: true,\r\n // side: THREE.DoubleSide,\r\n // alphaTest: 0.5\r\n // }));\r\n\r\n // object.material = material;\r\n // object.material.needsUpdate = true;\r\n // this.render();\r\n\r\n // objectsLoaded++;\r\n // if (objectsLoaded === objects3d.length) {\r\n // this.objectLoaded = true;\r\n // resolve(availableSizes);\r\n // }\r\n // });\r\n // }\r\n // });\r\n // };\r\n // if (!this.objectLoaded)\r\n // this.fbxLoader.load(\r\n // fbxUrl,\r\n // obj => {\r\n // this.objectFbx = obj;\r\n // setupObjects();\r\n // },\r\n // undefined,\r\n // console.error\r\n // );\r\n // else setupObjects();\r\n // });\r\n // }\r\n\r\n setupSceneObjects() {\r\n if (!this.sceneConfig.objects3d) this.floorObjectKey = null\r\n else\r\n this.floorObjectKey = this.sceneConfig.objects3d.find(item => item === \"floor\" || item === \"Floor\" || item === \"FLOOR\")\r\n const carpet = this.setupCarpet();\r\n\r\n const floor = this.scene.getObjectByName(\"floor\") || this.scene.getObjectByName(\"Floor\") || this.scene.getObjectByName(\"FLOOR\")\r\n if (floor) {\r\n this.scene.remove(floor);\r\n this.render()\r\n }\r\n const promiseArr = [carpet];\r\n if (this.floorObjectKey) {\r\n const floor = this.setupFloor();\r\n promiseArr.push(floor)\r\n } else {\r\n this.floor = null;\r\n this.bounds = null;\r\n };\r\n return Promise.all(promiseArr);\r\n }\r\n setupFloor() {\r\n return new Promise((resolve, reject) => {\r\n const { modelUrl } = this.sceneConfig\r\n const fbxUrl = makeUrl(this.baseUrl, modelUrl);\r\n // const fbxUrl = \"/untitledB.FBX\"\r\n\r\n const setup = () => {\r\n const objKey = this.floorObjectKey;\r\n const objConf = this.sceneConfig[objKey]\r\n const { position = [0, 0, 0], rotation = [90, 0, 0], scale } = objConf;\r\n this.floor.position.fromArray(position);\r\n this.floor.scale.fromArray(scale);\r\n this.floor.rotation.fromArray(convertArrIntoRad(rotation));\r\n this.floor.material = this.tracklocal(new THREE.MeshBasicMaterial({ side: THREE.DoubleSide, transparent: true }))\r\n this.floor.material.needsUpdate = true;\r\n this.floor.visible = true;\r\n }\r\n this.fbxLoader.load(fbxUrl, obj => {\r\n this.floor = this.tracklocal(obj.getObjectByName(\"floor\") || obj.getObjectByName(\"Floor\") || obj.getObjectByName(\"FLOOR\"))\r\n this.scene.add(this.floor);\r\n setup();\r\n this.floor.geometry.computeBoundingBox();\r\n this.bounds = this.tracklocal(new THREE.Box3().setFromObject(this.floor));\r\n this.setupRoomBounds();\r\n resolve();\r\n }, undefined, console.error);\r\n })\r\n }\r\n setupCarpet() {\r\n const fbxUrl = \"v3assets/rug.fbx\";\r\n this.objConf = this.sceneConfig[this.surfaceName];\r\n const { position = [0, 0, 0], rotation = [90, 0, 0] } = this.objConf;\r\n if (this.objectLoaded) {\r\n this.objects3d.forEach(object3d => {\r\n this.scene.remove(object3d);\r\n });\r\n const tarObj = this.scene.getObjectByName(\"TargetObject\");\r\n if (tarObj) {\r\n this.scene.remove(tarObj);\r\n }\r\n this.removeLights();\r\n this.objectLoaded = false;\r\n }\r\n return new Promise((resolve, reject) => {\r\n const setup = () => {\r\n // this.originalMesh =\r\n this.carpetMesh.position.fromArray(position);\r\n const { flagged } = this.sceneConfig;\r\n let fact = flagged ? 10 : 1;\r\n this.directionalLight.position.set(\r\n position[0] - 3000 / fact,\r\n position[1] + 3000 / fact,\r\n position[2]\r\n );\r\n var targetObject = this.tracklocal(new THREE.Object3D());\r\n targetObject.name = \"TargetObject\";\r\n targetObject.position.set(...position);\r\n this.scene.add(targetObject);\r\n this.directionalLight.target = targetObject;\r\n // let helper = new THREE.DirectionalLightHelper(this.directionalLight, 100, 0xff0000);\r\n // this.scene.add(helper);\r\n\r\n this.carpetMesh.rotation.fromArray(convertArrIntoRad(rotation.slice(0, 3)));\r\n if (this.designDetails) this.setCarpetScale(this.designDetails);\r\n\r\n if (this.material) {\r\n this.carpetMesh.material = this.material;\r\n this.carpetMesh.material.needsUpdate = true;\r\n this.render();\r\n }\r\n this.carpetLoaded = true;\r\n this.render();\r\n resolve();\r\n };\r\n if (!this.carpetLoaded)\r\n this.fbxLoader.load(\r\n fbxUrl,\r\n obj => {\r\n this.carpetMesh = this.track(obj.getObjectByName(this.surfaceName));\r\n this.scene.add(this.carpetMesh);\r\n this.setupLights();\r\n setup();\r\n },\r\n undefined,\r\n console.error\r\n );\r\n else setup();\r\n });\r\n }\r\n setupRoomBounds() {\r\n if (!this.bounds || !this.carpetMesh) return\r\n let smallBoxHalfSize = new THREE.Vector3();\r\n let boxBox = this.tracklocal(new THREE.Box3().setFromObject(this.carpetMesh)); // small box's bounding box\r\n boxBox.getSize(smallBoxHalfSize);\r\n smallBoxHalfSize.multiplyScalar(0.5);\r\n let min = this.bounds.min.clone();\r\n let max = this.bounds.max.clone();\r\n min = min.add(smallBoxHalfSize);\r\n max = max.sub(smallBoxHalfSize);\r\n this.clampingBox = this.tracklocal(new THREE.Box3(min, max));\r\n }\r\n setCarpetRotation(rotation) {\r\n const rot = convertArrIntoRad(rotation)\r\n if (!this.carpetLoaded || !this.carpetMesh) return;\r\n this.carpetMesh.rotation.fromArray(rot);\r\n this.render();\r\n }\r\n setCarpetPositon(position) {\r\n if (!this.carpetLoaded || !this.carpetMesh) return;\r\n this.carpetMesh.position.fromArray(position)\r\n this.render()\r\n }\r\n setCarpetScale(designDetails) {\r\n const { PhysicalWidth, PhysicalHeight, Unit, IsIrregular, KLRatio } = designDetails;\r\n if (!PhysicalWidth || !PhysicalHeight || !Unit) {\r\n console.error(\"Could not set carept scale\");\r\n return;\r\n }\r\n const { flagged } = this.sceneConfig;\r\n let fact = flagged ? 10 : 1;\r\n\r\n const wid = convertUnit(Unit, \"ft\", PhysicalWidth);\r\n const hgt = convertUnit(Unit, \"ft\", PhysicalHeight);\r\n this.carpetMesh.scale.set(wid * KLRatio / fact, hgt / fact, IsIrregular ? 1 : 2.5 / fact);\r\n this.setupRoomBounds()\r\n }\r\n set3dObjectScale(designDetails) {\r\n const { unit: sceneUnit, availableSizes = [] } = this.sceneConfig;\r\n const { PhysicalWidth, PhysicalHeight, Unit, IsIrregular } = designDetails;\r\n if (!PhysicalWidth || !PhysicalHeight || !Unit) {\r\n console.error(\"Could not set carept scale\");\r\n return;\r\n }\r\n\r\n const wid = convertUnit(Unit, sceneUnit, PhysicalWidth);\r\n const hgt = convertUnit(Unit, sceneUnit, PhysicalHeight);\r\n const size = availableSizes.find(\r\n item => item.PhysicalWidth === wid && item.PhysicalHeight === hgt\r\n );\r\n if (size) {\r\n this.change3dObjectScalePhysical(size);\r\n return size;\r\n }\r\n }\r\n change3dObjectScalePhysical(selectedSize) {\r\n this.objects3d.forEach(object3d => {\r\n const { name } = object3d;\r\n const { availableSizes = {} } = this.sceneConfig[name];\r\n const transformData = availableSizes[selectedSize.key] || {};\r\n const { position, rotation, scale } = transformData;\r\n if (position) object3d.position.fromArray(position);\r\n if (rotation) object3d.rotation.fromArray(convertArrIntoRad(rotation));\r\n if (scale) object3d.scale.fromArray(scale);\r\n });\r\n this.render();\r\n }\r\n setCarpetVisibility(visibility) {\r\n this.carpetMesh.visible = visibility;\r\n this.render();\r\n }\r\n // setObjectTexture({ designDetails, designCanvas, surfaceName }) {\r\n // return new Promise((resolve, reject) => {\r\n // const { surfaceUnit = \"in\", doubleSide } = this.objProps;\r\n // const PhysicalWidth = convertUnit(\r\n // designDetails.Unit,\r\n // surfaceUnit,\r\n // designDetails.PhysicalWidth\r\n // );\r\n // const PhysicalHeight = convertUnit(\r\n // designDetails.Unit,\r\n // surfaceUnit,\r\n // designDetails.PhysicalHeight\r\n // );\r\n // this.designDetails = {\r\n // ...designDetails,\r\n // PhysicalHeight,\r\n // PhysicalWidth,\r\n // Unit: surfaceUnit\r\n // };\r\n // const designTexture = new CanvasTexture(designCanvas);\r\n // designTexture.anisotropy = this.renderer.capabilities.getMaxAnisotropy();\r\n // designTexture.wrapS = designTexture.wrapT = THREE.RepeatWrapping;\r\n // this.material = this.track(new THREE.MeshBasicMaterial({\r\n // map: designTexture,\r\n // transparent: true,\r\n // side: doubleSide ? THREE.DoubleSide : THREE.FrontSide,\r\n // alphaTest: 0.5\r\n // }));\r\n // if (!this.objects3d.length) {\r\n // console.error(\"could not find the object\");\r\n // resolve();\r\n // return;\r\n // }\r\n // const size = this.set3dObjectScale(this.designDetails);\r\n // this.objects3d.forEach(object3d => {\r\n // object3d.material = this.material;\r\n // object3d.material.needsUpdate = true;\r\n // });\r\n\r\n // this.render();\r\n // resolve(size);\r\n // });\r\n // }\r\n setCarpetTexture({ designDetails, designCanvas, normapCanvas }) {\r\n if (!this.carpetMesh) return null;\r\n this.designDetails = designDetails;\r\n\r\n const designTexture = new CanvasTexture(designCanvas);\r\n const normalTexture = new CanvasTexture(normapCanvas);\r\n // designTexture.magFilter = THREE.LinearFilter;\r\n // designTexture.minFilter = THREE.LinearFilter;\r\n // normalTexture.magFilter = THREE.LinearFilter;\r\n // normalTexture.minFilter = THREE.LinearFilter;\r\n\r\n designTexture.anisotropy = this.renderer.capabilities.getMaxAnisotropy();\r\n normalTexture.anisotropy = this.renderer.capabilities.getMaxAnisotropy();\r\n this.material = this.tracklocal(new THREE.MeshStandardMaterial({\r\n map: designTexture,\r\n normalMap: normalTexture,\r\n // alphaMap: alphaTexture,\r\n roughness: 1,\r\n metalness: 0.1,\r\n needsUpdate: true,\r\n transparent: true,\r\n side: THREE.FrontSide\r\n }));\r\n\r\n if (this.designDetails.IsIrregular) {\r\n this.carpetMesh.position.y += 200;\r\n }\r\n\r\n this.setCarpetScale(this.designDetails);\r\n this.carpetMesh.material = this.material;\r\n this.carpetMesh.material.needsUpdate = true;\r\n this.render();\r\n return true;\r\n }\r\n setFloorTexture(floorOption) {\r\n if (!this.floor || !this.floor.material || !this.renderer || !floorOption) return\r\n window.floor = this.floor;\r\n const { floorCanvas, width, height } = floorOption;\r\n if (!floorCanvas) {\r\n this.floor.visible = false;\r\n this.render()\r\n return;\r\n }\r\n const objConf = this.sceneConfig[this.floorObjectKey]\r\n const { scale, size } = objConf;\r\n const texture = new CanvasTexture(floorCanvas);\r\n texture.anisotropy = this.renderer.capabilities.getMaxAnisotropy();\r\n texture.wrapS = texture.wrapT = THREE.RepeatWrapping;\r\n // const repeat = [(size[0] * scale[0]) / (floorCanvas.width / 305), (size[1] * scale[1]) / (floorCanvas.height / 305)]\r\n\r\n if (size) {\r\n const repeat = [(size[0]) / width, (size[1]) / height]\r\n console.log(repeat);\r\n texture.repeat.set(repeat[0], repeat[1]);\r\n // texture.repeat.set(1, 1);\r\n // texture.repeat.set((size[0]) / (floorCanvas.width / 305), (size[1]) / (floorCanvas.height / 305));\r\n }\r\n this.floor.material.map = texture\r\n this.floor.material.map.needsUpdate = true;\r\n this.floor.material.needsUpdate = true;\r\n if (!this.floor.visible) this.floor.visible = true\r\n this.render()\r\n }\r\n\r\n changeFloorVisibility(visible) {\r\n if (!this.floor) return;\r\n this.floor.visible = visible;\r\n this.render()\r\n }\r\n render() {\r\n this.renderer.render(this.scene, this.camera);\r\n }\r\n setFov(value) {\r\n const { camera } = this;\r\n camera.fov = value;\r\n camera.updateProjectionMatrix();\r\n this.render();\r\n }\r\n mouseDownTouchStart(e) {\r\n if (!this.carpetMesh) return;\r\n let intersect = this.raycastMouseOnCarpet(e);\r\n if (!intersect) return;\r\n const objPos = this.carpetMesh.position.clone();\r\n this.offset.copy(intersect.point).sub(objPos);\r\n return intersect;\r\n }\r\n\r\n mouseTouchMove(e) {\r\n if (!this.carpetMesh) return;\r\n //TODO:instead of casting on carpet, cast on an infinite plane \r\n let intersect = this.raycastMouseOnCarpet(e);\r\n if (!intersect) return\r\n const objPos = this.carpetMesh.position.clone();\r\n const sub = intersect.point.sub(this.offset);\r\n sub.y = objPos.y;\r\n const subClamped = sub.clone();\r\n if (this.bounds) subClamped.clamp(this.clampingBox.min, this.clampingBox.max)\r\n subClamped.y = objPos.y;\r\n this.carpetMesh.position.copy(subClamped);\r\n this.render();\r\n }\r\n raycastMouseOnCarpet(e) {\r\n const { x, y } = e;\r\n let { mouseX, mouseY } = this.convMouseCord(x, y);\r\n var mouse = new THREE.Vector3(mouseX, mouseY, 0.99);\r\n this.raycaster.setFromCamera(mouse, this.camera);\r\n var intersects = this.raycaster.intersectObject(this.carpetMesh);\r\n return intersects[0];\r\n }\r\n convMouseCord(x, y) {\r\n // const { offsetX, offsetY } = this.getRendererOffset();\r\n const vec = new THREE.Vector2();\r\n const { width, height } = this.renderer.getSize(vec);\r\n\r\n var mouseX = (x / width) * 2 - 1;\r\n var mouseY = -(y / height) * 2 + 1;\r\n return { mouseX, mouseY };\r\n }\r\n getCameraConfig() {\r\n const position = this.camera.position.toArray();\r\n const rotation = convertArrintoDeg(this.camera.rotation.toArray());\r\n const target = this.orbit.target.position.toArray();\r\n return { position, rotation, target };\r\n }\r\n rotateCarpet(rotationInDegrees, axis) {\r\n if (!this.carpetMesh) return;\r\n const { rotationFlag } = this.sceneConfig;\r\n if (!rotationFlag) this.carpetMesh.rotation[axis] += (rotationInDegrees * Math.PI) / 180;\r\n else this.carpetMesh.rotation[axis] -= (rotationInDegrees * Math.PI) / 180;\r\n this.render();\r\n }\r\n scaleObject(surfaceName, scaleFactor, axis) {\r\n let object = this.scene.getObjectByName(surfaceName);\r\n object.scale[axis] += scaleFactor;\r\n this.render();\r\n }\r\n attachTransformControls(surfaceName) {\r\n let object = this.scene.getObjectByName(surfaceName);\r\n\r\n this.transform.attach(object);\r\n this.scene.add(this.transform);\r\n }\r\n getRendererOffset() {\r\n var offsetY = this.renderer.domElement.offsetTop;\r\n var offsetX = this.renderer.domElement.offsetLeft;\r\n return { offsetX, offsetY };\r\n }\r\n clearScene() {\r\n return new Promise((resolve, reject) => {\r\n var objsToRemove = [...this.scene.children];\r\n let removeCount = objsToRemove.length;\r\n const resolveFunc = async () => {\r\n if (this.resTracker) {\r\n await this.resTracker.disposelocal();\r\n }\r\n resolve();\r\n }\r\n if (removeCount === 0) {\r\n this.carpetLoaded = false;\r\n this.objectLoaded = false;\r\n this.objects3d = [];\r\n resolveFunc();\r\n }\r\n objsToRemove.forEach((object,) => {\r\n this.scene.remove(object);\r\n removeCount--;\r\n if (removeCount === 0) {\r\n if (this.renderer) this.render();\r\n this.carpetLoaded = false;\r\n this.objectLoaded = false;\r\n this.objects3d = [];\r\n resolveFunc();\r\n }\r\n })\r\n\r\n\r\n });\r\n }\r\n\r\n toScreenXY(position, camera) {\r\n var pos = position.clone();\r\n let projScreenMat = new THREE.Matrix4();\r\n projScreenMat.multiply(camera.projectionMatrix, camera.matrixWorldInverse);\r\n projScreenMat.multiplyVector3(pos);\r\n const { offsetX, offsetY } = this.getRendererOffset();\r\n return {\r\n x: ((pos.x + 1) * this.w) / 2 + offsetX,\r\n y: ((-pos.y + 1) * this.h) / 2 + offsetY\r\n };\r\n }\r\n\r\n getCarpetPositions() {\r\n this.carpetMesh.geometry.computeBoundingBox();\r\n let box = this.carpetMesh.geometry.boundingBox;\r\n const widthheight = box.max.sub(box.min);\r\n\r\n const plane = this.tracklocal(new THREE.PlaneGeometry(widthheight.x, widthheight.y));\r\n const mat = this.tracklocal(new THREE.MeshBasicMaterial({ color: 0xff0000 }));\r\n const m = this.tracklocal(new THREE.Mesh(plane, mat));\r\n m.scale.copy(this.carpetMesh.scale);\r\n m.position.copy(this.carpetMesh.position);\r\n m.rotation.copy(this.carpetMesh.rotation);\r\n const a = [];\r\n plane.vertices.forEach(vertex => {\r\n const v = vertex.clone();\r\n v.applyMatrix4(this.carpetMesh.matrixWorld);\r\n a.push(v);\r\n });\r\n const b = a.map(vertex => createVector(vertex, this.camera, this.w, this.h));\r\n return [b[0], b[1], b[3], b[2]];\r\n }\r\n\r\n toggleOrbitControls(enable) {\r\n this.orbit.enabled = enable;\r\n this.orbit.update();\r\n }\r\n toggleScreenSpacePanning(enable) {\r\n this.orbit.screenSpacePanning = enable;\r\n this.orbit.update();\r\n }\r\n toggleOrbitLockAxis(axis, enable) {\r\n if (axis === 0) {\r\n this.orbit.lockVertical = enable;\r\n this.orbit.update();\r\n } else if (axis === 1) {\r\n this.orbit.lockHorizontal = enable;\r\n this.orbit.update();\r\n }\r\n }\r\n changeShot(shotConfig) {\r\n const { position = [0, 0, 0], rotation = [90, 0, 0], target, fov } = shotConfig;\r\n const { camera } = this;\r\n camera.fov = fov;\r\n camera.updateProjectionMatrix();\r\n camera.position.fromArray(position);\r\n camera.rotation.fromArray(rotation);\r\n // camera.lookAt(...target);\r\n this.orbit.target.fromArray(target);\r\n this.orbit.update();\r\n this.render();\r\n }\r\n updateMap() {\r\n\r\n // const mapCanvas = this.carpetMesh.material.map.image;\r\n\r\n // let alphaCanvasBlack = createCanvas(mapCanvas.width, mapCanvas.height);\r\n // let alphaBlackCtx = alphaCanvasBlack.getContext('2d');\r\n // alphaBlackCtx.beginPath();\r\n // alphaBlackCtx.rect(0, 0, mapCanvas.width, mapCanvas.height);\r\n // alphaBlackCtx.fillStyle = \"black\";\r\n // alphaBlackCtx.fill();\r\n // alphaBlackCtx.globalCompositeOperation = \"destination-out\";\r\n // alphaBlackCtx.drawImage(mapCanvas, 0, 0, mapCanvas.width, mapCanvas.height);\r\n\r\n // let alphaCanvas = createCanvas(mapCanvas.width, mapCanvas.height);\r\n // let alphaCtx = alphaCanvas.getContext('2d');\r\n // alphaCtx.beginPath();\r\n // alphaCtx.rect(0, 0, mapCanvas.width, mapCanvas.height);\r\n // alphaCtx.fillStyle = \"white\";\r\n // alphaCtx.fill();\r\n // alphaCtx.drawImage(alphaCanvasBlack, 0, 0, mapCanvas.width, mapCanvas.height);\r\n\r\n // const alphaTexture = new CanvasTexture(mapCanvas);\r\n // this.carpetMesh.material.alphaMap = alphaTexture;\r\n\r\n if (this.carpetMesh && this.carpetMesh.material.map) {\r\n this.carpetMesh.material.map.needsUpdate = true;\r\n this.carpetMesh.material.normalMap.needsUpdate = true;\r\n this.carpetMesh.material.needsUpdate = true;\r\n }\r\n this.objects3d.forEach(object3d => {\r\n if (object3d && object3d.material.map) {\r\n object3d.material.map.needsUpdate = true;\r\n object3d.material.needsUpdate = true;\r\n }\r\n });\r\n this.render();\r\n }\r\n resizeRenderer({ width, height }) {\r\n this.w = width;\r\n this.h = height;\r\n if (this.camera) {\r\n this.camera.aspect = width / height;\r\n this.camera.updateProjectionMatrix();\r\n }\r\n this.renderer.setSize(width, height);\r\n this.render();\r\n }\r\n getObjectConfig() {\r\n if (this.objectLoaded) {\r\n return null;\r\n } else {\r\n return this.carpetMesh;\r\n }\r\n }\r\n calculateCarpetSize() {\r\n if (!this.carpetMesh) return;\r\n const carpetSize = new THREE.Vector3();\r\n var box = this.tracklocal(new THREE.Box3());\r\n box.setFromObject(this.carpetMesh);\r\n box.getSize(carpetSize);\r\n // this.carpetMesh.geometry.computeBoundingBox();\r\n // this.carpetMesh.geometry.boundingBox.getSize(carpetSize);\r\n return carpetSize;\r\n }\r\n distbetween2Vertices(vertex1, vertex2, axis) {\r\n const { camera, renderer } = this;\r\n const vec = new THREE.Vector2();\r\n renderer.getSize(vec);\r\n const { x: width, y: height } = vec;\r\n const v1 = createVector(vertex1, camera, width, height);\r\n const v2 = createVector(vertex2, camera, width, height);\r\n const xDist = Math.abs(Math.abs(v2.x) - Math.abs(v1.x));\r\n const yDist = Math.abs(Math.abs(v2.y) - Math.abs(v1.y));\r\n return { xDist: xDist, yDist: yDist };\r\n }\r\n getGizmoCordinates() {\r\n const carpetSize = this.calculateCarpetSize();\r\n if (!carpetSize) return;\r\n const smallerDim = carpetSize.x > carpetSize.y ? carpetSize.x : carpetSize.y;\r\n const carpetRadius = smallerDim / 5;\r\n const carpetCenter = this.carpetMesh.position.clone();\r\n\r\n const vertex1 = carpetCenter.clone();\r\n const vertex2 = new THREE.Vector3(\r\n carpetCenter.x,\r\n carpetCenter.y,\r\n carpetCenter.z + carpetRadius\r\n );\r\n\r\n const dist1 = this.distbetween2Vertices(vertex1, vertex2);\r\n const radYY = dist1.yDist;\r\n const radYX = dist1.xDist;\r\n\r\n const vertex3 = new THREE.Vector3(\r\n carpetCenter.x + carpetRadius,\r\n carpetCenter.y,\r\n carpetCenter.z\r\n );\r\n //TODO:this could be point of failure\r\n const vertex4 = carpetCenter.clone();\r\n const dist2 = this.distbetween2Vertices(vertex3, vertex4);\r\n const radXX = dist2.xDist;\r\n const radXY = dist2.yDist;\r\n\r\n const area1 = areaOfellipse(radYY, radXX);\r\n const area2 = areaOfellipse(radXY, radYX);\r\n let radX, radY;\r\n if (area1 > area2) {\r\n radX = radXX;\r\n radY = radYY;\r\n } else {\r\n radX = radXY;\r\n radY = radYX;\r\n }\r\n const canvasCenter = createVector(carpetCenter, this.camera, this.w, this.h);\r\n return { radX, radY, canvasCenter };\r\n }\r\n // downloadImageData() {\r\n // const dataurl = this.renderer.domElement.toBlob(blob => {\r\n // var strData = URL.createObjectURL(blob);\r\n // var link = document.createElement(\"a\");\r\n // document.body.appendChild(link); //Firefox requires the link to be in the body\r\n // link.setAttribute(\"download\", \"download.png\");\r\n // link.href = strData;\r\n // link.click()\r\n // document.body.removeChild(link); //remove the link when done\r\n // })\r\n\r\n // }\r\n}\r\nexport const perspectiveCamera = (config = {}) => {\r\n const { innerWidth, innerHeight } = window;\r\n let {\r\n fov = 40,\r\n near = 0.1,\r\n far = 100000,\r\n height = innerHeight,\r\n width = innerWidth,\r\n position = [0, 200, 500],\r\n target = [0, 0, 0],\r\n rotation = [0, 0, 0]\r\n } = config;\r\n const aspect = width / height;\r\n const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);\r\n camera.lookAt(new THREE.Vector3(...target)); // This seems to be disabled by OrbitControls\r\n camera.position.set(...position);\r\n camera.rotation.set(...convertArrIntoRad(rotation));\r\n return camera;\r\n};\r\nexport const addOrbitControl = function (renderer, scene, camera, config = {}) {\r\n let { target = [0, 0, 0] } = config;\r\n const control = new OrbitControls(camera, renderer.domElement);\r\n control.enableKeys = false;\r\n control.target = new THREE.Vector3(...target);\r\n control.addEventListener(\"change\", () => {\r\n renderer.render(scene, camera);\r\n });\r\n control.update();\r\n return control;\r\n};\r\nexport const loadFbx = url => {\r\n return new Promise((resolve, reject) => {\r\n new FBXLoader().load(url, resolve, undefined, reject);\r\n });\r\n};\r\n","import {\r\n mergeArraysWithoutDuplicate,\r\n convertNameToTilePoint,\r\n convertTilePointToName,\r\n readImage\r\n} from \"./utils/utils\";\r\nimport AppProvider from \"./api/appProvider\";\r\nimport {generateHash} from \"./reducers/designdetails.reducer\"\r\nlet requestAnimationFrame =\r\n window.requestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.msRequestAnimationFrame;\r\n\r\nlet cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame;\r\n\r\nconst tileStandardSize = 256;\r\n\r\nconst calculateDistance = (pointA, pointB) => {\r\n const { x: ia, y: ja } = pointA;\r\n const { x: ib, y: jb } = pointB;\r\n return Math.sqrt(Math.pow(ia - ib, 2) + Math.pow(ja - jb, 2));\r\n};\r\nexport default class TileCanvas {\r\n constructor(options = {}) {\r\n const { canvas } = options;\r\n if (canvas) {\r\n this.setRenderingCanvas(canvas);\r\n }\r\n // this.tileArray = { sources: null, images: null }\r\n // this.imageLoader = new ImageLoader()\r\n this.tilePoints = [];\r\n this.width = null;\r\n this.height = null;\r\n this.tilesToUpdate = [];\r\n this.designTilesToUpdate = [];\r\n this.normapTilesToUpdate = [];\r\n this.roughTilesToUpdate = [];\r\n this.offsetX = 0;\r\n this.offsetY = 0;\r\n this.canvas = document.createElement(\"canvas\");\r\n this.canvasBack = document.createElement(\"canvas\");\r\n this.canvasNorm = document.createElement(\"canvas\");\r\n this.canvasRough = document.createElement(\"canvas\");\r\n this.canvasVis = document.createElement(\"canvas\");\r\n // this.canvasNorm.classList.add(\"test-canvas\");\r\n // document.body.appendChild(this.canvas);\r\n // document.body.appendChild(this.canvasNorm);\r\n }\r\n\r\n init(options) {\r\n const {\r\n tileSize = tileStandardSize,\r\n designDetails,\r\n maxArea = 15000*15000,\r\n zoom,\r\n offset = [0, 0],\r\n renderBounds,\r\n canvasSize = { width: null, height: null }\r\n } = options;\r\n this.desTilesUpdated = false;\r\n this.normapTilesUpdated = false;\r\n this.zoom = zoom;\r\n this.tileSize = tileSize;\r\n this.designDetails = designDetails;\r\n const { Width, Height } = designDetails;\r\n const ratio = Width / Height;\r\n let designWidth = Width * zoom;\r\n let designHeight = designWidth / ratio;\r\n\r\n if (maxArea && (designWidth * designHeight > maxArea)) {\r\n let newdesignWidth = Math.trunc(Math.sqrt(maxArea * ratio));\r\n let newdesignHeight = Math.trunc(Math.sqrt(maxArea / ratio));\r\n const resizeRatio = newdesignWidth / designWidth;\r\n designWidth = newdesignWidth;\r\n designHeight = newdesignHeight;\r\n this.tileSize = Math.trunc(this.tileSize * resizeRatio);\r\n }\r\n\r\n let w = designWidth;\r\n let h = designHeight;\r\n\r\n const { width: canvasWidth, height: canvasHeight } = canvasSize;\r\n if (canvasWidth) w = canvasWidth;\r\n if (canvasHeight) h = canvasHeight;\r\n this.width = w;\r\n this.height = h;\r\n const dw = w - designWidth;\r\n const dh = h - designHeight;\r\n\r\n this.offsetX = dw * offset[0];\r\n this.offsetY = dh * offset[1];\r\n\r\n this.canvas.width = w;\r\n this.canvas.height = h;\r\n this.canvasBack.width = w;\r\n this.canvasBack.height = h;\r\n this.canvasNorm.height = h;\r\n this.canvasNorm.width = w;\r\n this.canvasRough.height = h;\r\n this.canvasRough.width = w;\r\n this.canvasVis.height = h;\r\n this.canvasVis.width = w;\r\n\r\n // const ctx = this.canvas.getContext(\"2d\");\r\n // ctx.fillStyle = \"rgb(0,0,0)\";\r\n // ctx.fillRect(0, 0, canvasWidth, canvasHeight)\r\n let xOff = 0,\r\n yOff = 0;\r\n let tilesWidth = designWidth,\r\n tilesHeight = designHeight;\r\n //*important: the points should be multiple of 256 and should not be greater than width of canvas itself\r\n let p1 = { x: 0, y: 0 };\r\n let p2 = { x: designWidth, y: designHeight };\r\n\r\n if (renderBounds) {\r\n const { p1: point1, p2: point2 } = renderBounds;\r\n if (point1) p1 = point1;\r\n if (point2) p2 = point2;\r\n }\r\n /*\r\n * * if drawing canvas is smaller, tiles should not start from 0 and not end on design width depending on offset value\r\n * * if drawing canvas is larger, tiles should start from 0 but drawn on offsetpoint\r\n */\r\n if (this.offsetX < 0) {\r\n // * start drawing tiles from offset point, add bound start point to it\r\n xOff = this.offsetX - p1.x;\r\n // * draw tiles till the end of canvas or specified bound\r\n tilesWidth = p2.x - p1.x;\r\n } else {\r\n // * first tile is start point of bound\r\n xOff = p1.x;\r\n // * draw till last point of bound\r\n tilesWidth = p2.x - xOff;\r\n }\r\n if (this.offsetY < 0) {\r\n yOff = this.offsetY - p1.y;\r\n tilesHeight = p2.y - p1.y;\r\n } else {\r\n yOff = p1.y - this.offsetY;\r\n tilesHeight = p2.y - yOff;\r\n if (yOff < 0) yOff = 0;\r\n }\r\n if (tilesWidth > designWidth) tilesWidth = designWidth - Math.abs(xOff);\r\n if (tilesHeight > designHeight) tilesHeight = designHeight - Math.abs(yOff);\r\n const xOffPoint = Math.floor(Math.abs(xOff) / this.tileSize);\r\n const yOffPoint = Math.floor(Math.abs(yOff) / this.tileSize);\r\n\r\n this.xTotal = Math.floor((tilesWidth - 1) / this.tileSize) + 1 + xOffPoint;\r\n this.yTotal = Math.floor((tilesHeight - 1) / this.tileSize) + 1 + yOffPoint;\r\n this.tilePoints = [];\r\n\r\n for (let x = xOffPoint; x < this.xTotal; x++) {\r\n for (let y = yOffPoint; y < this.yTotal; y++) {\r\n this.tilePoints.push({ x, y, name: convertTilePointToName(x, y) });\r\n }\r\n }\r\n this.tilesToUpdate = this.tilePoints;\r\n this.designTilesToUpdate = this.tilePoints;\r\n this.normapTilesToUpdate = JSON.parse(JSON.stringify(this.tilePoints));\r\n this.roughTilesToUpdate = JSON.parse(JSON.stringify(this.tilePoints));\r\n this.visTilesToUpdate = JSON.parse(JSON.stringify(this.tilePoints));\r\n this.fetchNonce = null;\r\n this.fetchNonce1 = null;\r\n this.fetchNonce2 = null;\r\n this.fetchNonce3 = null;\r\n this.fetchNonce4 = null;\r\n this.fetchNonce5 = null;\r\n this.latesttiles = null;\r\n }\r\n\r\n drawCanvasBackTiles(options = {}, onUpdate, onComplete) {\r\n const { zoom } = this;\r\n const { x = 0, y = 0, designPath, renderBounds } = options;\r\n const designDetails = {...options.designDetails};\r\n let hash = options.hash;\r\n let tilesWidth, tilesHeight, xOff, yOff, xTotal, yTotal, tilePoints;\r\n const { Width, Height } = designDetails;\r\n const ratio = Width / Height;\r\n const designWidth = Width * zoom;\r\n const designHeight = designWidth / ratio;\r\n let p1 = { x: 0, y: 0 };\r\n let p2 = { x: designWidth, y: designHeight };\r\n\r\n if (renderBounds) {\r\n const { p1: point1, p2: point2 } = renderBounds;\r\n if (point1) p1 = point1;\r\n if (point2) p2 = point2;\r\n }\r\n if (this.offsetX < 0) {\r\n xOff = this.offsetX - p1.x;\r\n tilesWidth = p2.x - p1.x;\r\n } else {\r\n // * first tile is start point of bound\r\n xOff = p1.x;\r\n // * draw till last point of bound\r\n tilesWidth = p2.x - xOff;\r\n }\r\n if (this.offsetY < 0) {\r\n yOff = this.offsetY - p1.y;\r\n tilesHeight = p2.y - p1.y;\r\n } else {\r\n yOff = p1.y - this.offsetY;\r\n tilesHeight = p2.y - yOff;\r\n if (yOff < 0) yOff = 0;\r\n }\r\n if (tilesWidth > designWidth) tilesWidth = designWidth - Math.abs(xOff);\r\n if (tilesHeight > designHeight) tilesHeight = designHeight - Math.abs(yOff);\r\n const xOffPoint = Math.floor(Math.abs(xOff) / this.tileSize);\r\n const yOffPoint = Math.floor(Math.abs(yOff) / this.tileSize);\r\n\r\n xTotal = Math.floor((tilesWidth - 1) / this.tileSize) + 1 + xOffPoint;\r\n yTotal = Math.floor((tilesHeight - 1) / this.tileSize) + 1 + yOffPoint;\r\n tilePoints = [];\r\n\r\n for (let x = xOffPoint; x < xTotal; x++) {\r\n for (let y = yOffPoint; y < yTotal; y++) {\r\n tilePoints.push({ x, y, name: convertTilePointToName(x, y) });\r\n }\r\n }\r\n\r\n const ctx = this.canvasBack.getContext(\"2d\");\r\n const backTextureMaterialIndex = 4;\r\n let newDesignColors = [];\r\n designDetails.DesignColors.forEach((designColor, index) => {\r\n let newYarnDetails = [];\r\n designColor.YarnDetails.forEach((yarnDetails, yarnIndex) => {\r\n newYarnDetails.push({ ...yarnDetails, Material: backTextureMaterialIndex });\r\n });\r\n newDesignColors.push({\r\n ...designColor,\r\n Material: backTextureMaterialIndex,\r\n YarnDetails: [...newYarnDetails]\r\n });\r\n });\r\n hash = generateHash(designDetails,designPath );\r\n\r\n const pivot = {\r\n x: Math.round((xOffPoint + xTotal) / 2),\r\n y: Math.round((yOffPoint + yTotal) / 2)\r\n };\r\n\r\n if (tilePoints.length) {\r\n //calculate distance from pivot point of each point\r\n const tileVec = tilePoints.map(tile => ({\r\n ...tile,\r\n dist: calculateDistance(tile, pivot)\r\n }));\r\n tileVec.sort((a, b) => (a.dist > b.dist ? 1 : -1));\r\n\r\n const designTileNamesinVp = tileVec.map(tile => tile.name);\r\n const designApiProps = {\r\n file: designPath,\r\n zoom,\r\n tiles: designTileNamesinVp,\r\n props: { ...designDetails, DesignColors: [...newDesignColors] },\r\n hash\r\n };\r\n\r\n AppProvider.fetchDesignTiles(designApiProps).then(baseDesignPath => {\r\n drawTilesIterateFunc({ tileVec, baseDesignPath, hash, ctx, onComplete, mime: window.InterfaceElements.IsJpeg ? \"rendered.jpg\" : \"jpg\", tileSize: this.tileSize, offset: { X: this.offsetX, Y: this.offsetY } })\r\n });\r\n }\r\n }\r\n drawCanvasTiles(options = {}, onUpdate, onComplete) {\r\n const { xTotal, yTotal, zoom } = this;\r\n const {\r\n x = 0,\r\n y = 0,\r\n endX = xTotal,\r\n endY = yTotal,\r\n designPath,\r\n designDetails,\r\n drawNormap = true,\r\n drawRoughMap = false,\r\n hash,\r\n tileTransparency = []\r\n } = options;\r\n const localNonce = (this.fetchNonce = {});\r\n const ctx = this.canvas.getContext(\"2d\");\r\n const ctxnorm = this.canvasNorm.getContext(\"2d\");\r\n const ctxrough = this.canvasRough.getContext(\"2d\");\r\n const { startX, startY, endpointX, endpointY } = this.getStartEndPoints(x, y, endX, endY);\r\n\r\n const designTilesinVp = this.designTilesToUpdate.filter(point => {\r\n const { x, y } = point;\r\n return x >= startX && y >= startY && x <= endpointX && y <= endpointY;\r\n });\r\n const pivot = {\r\n x: Math.round((startX + endpointX) / 2),\r\n y: Math.round((startY + endpointY) / 2)\r\n };\r\n //tiles not in vp\r\n const designTilesNotinVp = this.designTilesToUpdate.filter(\r\n tile => !designTilesinVp.includes(tile)\r\n );\r\n this.designTilesToUpdate = designTilesNotinVp;\r\n\r\n const normapTilesinVp = this.normapTilesToUpdate.filter(point => {\r\n const { x, y } = point;\r\n return x >= startX && y >= startY && x <= endpointX && y <= endpointY;\r\n });\r\n const normapTilesNotinVp = this.normapTilesToUpdate.filter(\r\n tile => !normapTilesinVp.includes(tile)\r\n );\r\n this.normapTilesToUpdate = normapTilesNotinVp;\r\n\r\n const roughmapTilesinVp = this.roughTilesToUpdate.filter(point => {\r\n const { x, y } = point;\r\n return x >= startX && y >= startY && x <= endpointX && y <= endpointY;\r\n });\r\n const roughmapTilesNotinVp = this.roughTilesToUpdate.filter(\r\n tile => !roughmapTilesinVp.includes(tile)\r\n );\r\n this.roughTilesToUpdate = roughmapTilesNotinVp;\r\n\r\n // let designsLoaded = false, normapsloaded = false\r\n\r\n if (designTilesinVp.length) {\r\n //calculate distance from pivot point of each point\r\n const tileVec = designTilesinVp.map(tile => ({\r\n ...tile,\r\n dist: calculateDistance(tile, pivot)\r\n }));\r\n tileVec.sort((a, b) => (a.dist > b.dist ? 1 : -1));\r\n\r\n const designTileNamesinVp = tileVec.map(tile => tile.name);\r\n const designApiProps = {\r\n file: designPath,\r\n zoom,\r\n tiles: designTileNamesinVp,\r\n props: designDetails,\r\n hash\r\n };\r\n let designtilescomplete = false;\r\n let normaptilescomplete = !drawNormap;\r\n let roughmaptilescomplete = !drawRoughMap;\r\n\r\n const checkComplete = () => {\r\n if (designtilescomplete && normaptilescomplete && roughmaptilescomplete) {\r\n if (tileTransparency.length) {\r\n ctx.globalCompositeOperation = \"destination-in\";\r\n ctx.drawImage(this.canvasNorm, 0, 0);\r\n } else {\r\n ctx.globalCompositeOperation = \"source-over\";\r\n }\r\n onComplete()\r\n }\r\n };\r\n const drawNormalMaps = () => {\r\n if (normapTilesinVp.length && drawNormap) {\r\n const designTileNamesinVp = designTilesinVp.map(tile => tile.name);\r\n const designApiProps = {\r\n file: designPath,\r\n zoom,\r\n tiles: designTileNamesinVp,\r\n props: designDetails,\r\n hash\r\n };\r\n AppProvider.fetchPileTiles(designApiProps).then((baseNormapPath, index) => {\r\n const drawFinishNormap = () => {\r\n normaptilescomplete = true;\r\n checkComplete();\r\n };\r\n drawTilesIterateFunc({ tileVec: normapTilesinVp, baseDesignPath: baseNormapPath, hash, ctx: ctxnorm, onComplete: drawFinishNormap, mime: \"png\", tileSize: this.tileSize, offset: { X: this.offsetX, Y: this.offsetY } });\r\n\r\n });\r\n }\r\n };\r\n\r\n const drawRoughMaps = () => {\r\n if (roughmapTilesinVp.length && drawRoughMap) {\r\n const designTileNamesinVp = designTilesinVp.map(tile => tile.name);\r\n const designApiProps = {\r\n file: designPath,\r\n zoom,\r\n tiles: designTileNamesinVp,\r\n props: designDetails,\r\n hash\r\n };\r\n AppProvider.fetchSilkSheenTiles(designApiProps).then((baseRoughmapPath, index) => {\r\n const drawFinishRoughmap = () => {\r\n roughmaptilescomplete = true;\r\n checkComplete();\r\n };\r\n drawTilesIterateFunc({ tileVec: roughmapTilesinVp, baseDesignPath: baseRoughmapPath, hash, ctx: ctxrough, onComplete: drawFinishRoughmap, mime: \"silk.jpg\", tileSize: this.tileSize, offset: { X: this.offsetX, Y: this.offsetY } });\r\n\r\n });\r\n }\r\n };\r\n\r\n AppProvider.fetchDesignTiles(designApiProps).then(baseDesignPath => {\r\n const drawFinishDesignTiles = () => {\r\n if (!drawNormap) {\r\n ctxnorm.fillStyle = \"rgb(127,127,255)\";\r\n ctxnorm.fillRect(0, 0, this.canvasNorm.width, this.canvasNorm.height);\r\n designtilescomplete = true;\r\n checkComplete();\r\n return;\r\n }\r\n designtilescomplete = true;\r\n checkComplete();\r\n };\r\n drawTilesIterateFunc({ tileVec: tileVec, baseDesignPath: baseDesignPath, hash, ctx: ctx, onComplete: drawFinishDesignTiles, mime: window.InterfaceElements.IsJpeg ? \"rendered.jpg\" : \"jpg\", tileSize: this.tileSize, offset: { X: this.offsetX, Y: this.offsetY } })\r\n\r\n });\r\n if (localNonce !== this.fetchNonce) return;\r\n if (drawNormap) {\r\n drawNormalMaps();\r\n }\r\n if (drawRoughMap) {\r\n drawRoughMaps();\r\n }\r\n }\r\n }\r\n drawVisTiles(options, onComplete) {\r\n const { xTotal, yTotal, zoom } = this;\r\n const { x = 0, y = 0, endX = xTotal, endY = yTotal, designPath, designDetails, hash } = options;\r\n let localNonce = (this.fetchNonce4 = {});\r\n const ctxVis = this.canvasVis.getContext(\"2d\");\r\n const { startX, startY, endpointX, endpointY } = this.getStartEndPoints(x, y, endX, endY);\r\n const visTilesinVP = this.designTilesToUpdate.filter(point => {\r\n const { x, y } = point;\r\n return x >= startX && y >= startY && x <= endpointX && y <= endpointY;\r\n });\r\n const pivot = {\r\n x: Math.round((startX + endpointX) / 2),\r\n y: Math.round((startY + endpointY) / 2)\r\n };\r\n if (visTilesinVP.length) {\r\n const tileVec = visTilesinVP.map(tile => ({\r\n ...tile,\r\n dist: calculateDistance(tile, pivot)\r\n }));\r\n tileVec.sort((a, b) => (a.dist > b.dist ? 1 : -1));\r\n\r\n const apiProps = {\r\n file: designPath,\r\n zoom,\r\n tiles: tileVec.map(tile => tile.name),\r\n props: designDetails,\r\n hash\r\n };\r\n AppProvider.fetchVisualizationTiles(apiProps).then(basePath => {\r\n const drawInDesignCanvasFinish = () => {\r\n if (onComplete) {\r\n onComplete();\r\n return;\r\n }\r\n\r\n };\r\n drawTilesIterateFunc({ tileVec: tileVec, baseDesignPath: basePath, hash, ctx: ctxVis, onComplete: drawInDesignCanvasFinish, mime: \"rendered.jpg\", tileSize: this.tileSize, offset: { X: this.offsetX, Y: this.offsetY } })\r\n\r\n });\r\n }\r\n //tiles not in vp\r\n const designTilesNotinVp = this.designTilesToUpdate.filter(\r\n tile => !visTilesinVP.includes(tile)\r\n );\r\n this.designTilesToUpdate = designTilesNotinVp;\r\n }\r\n updateVisTiles(options, onComplete) {\r\n const { xTotal, yTotal } = this;\r\n const {\r\n x,\r\n y,\r\n endX = xTotal,\r\n endY = yTotal,\r\n tiles,\r\n zoom,\r\n designPath,\r\n designDetails,\r\n hash\r\n } = options;\r\n let tilePoints;\r\n let localNonce = (this.fetchNonce3 = {});\r\n if (tiles) tilePoints = tiles.map(name => ({ ...convertNameToTilePoint(name), name }));\r\n else tilePoints = this.tilePoints;\r\n const { startX, startY, endpointX, endpointY } = this.getStartEndPoints(x, y, endX, endY);\r\n const tilesinVp = tilePoints.filter(point => {\r\n const { x, y } = point;\r\n return x >= startX && y >= startY && x <= endpointX && y <= endpointY;\r\n });\r\n const tileNamesVp = tilesinVp.map(tile => convertTilePointToName(tile.x, tile.y));\r\n const tilesNotInVp = tilePoints.filter(n => !tilesinVp.includes(n));\r\n this.visTilesToUpdate = mergeArraysWithoutDuplicate(this.visTilesToUpdate, tilesNotInVp);\r\n const ctxVis = this.canvasVis.getContext(\"2d\");\r\n\r\n AppProvider.fetchVisualizationTiles({\r\n file: designPath,\r\n zoom,\r\n tiles: tileNamesVp,\r\n props: designDetails,\r\n hash\r\n }).then(baseDesignPath => {\r\n drawTilesIterateFunc({ tileVec: tilesinVp, baseDesignPath: baseDesignPath, hash, ctx: ctxVis, onComplete: onComplete, mime: \"rendered.jpg\", tileSize: this.tileSize, offset: { X: this.offsetX, Y: this.offsetY } })\r\n });\r\n }\r\n updateDesignTiles(options, onUpdate, onComplete) {\r\n const { xTotal, yTotal } = this;\r\n const {\r\n x,\r\n y,\r\n endX = xTotal,\r\n endY = yTotal,\r\n tiles,\r\n zoom,\r\n designPath,\r\n designDetails,\r\n hash,\r\n tileTransparency = []\r\n } = options;\r\n const localNonce = (this.fetchNonce1 = {});\r\n let tilePoints;\r\n if (tiles) tilePoints = tiles.map(name => ({ ...convertNameToTilePoint(name), name }));\r\n else tilePoints = this.tilePoints;\r\n const { startX, startY, endpointX, endpointY } = this.getStartEndPoints(x, y, endX, endY);\r\n const tilesinVp = tilePoints.filter(point => {\r\n const { x, y } = point;\r\n return x >= startX && y >= startY && x <= endpointX && y <= endpointY;\r\n });\r\n const tileNamesVp = tilesinVp.map(tile => convertTilePointToName(tile.x, tile.y));\r\n const tilesNotInVp = tilePoints.filter(n => !tilesinVp.includes(n));\r\n this.designTilesToUpdate = mergeArraysWithoutDuplicate(this.designTilesToUpdate, tilesNotInVp);\r\n const ctx = this.canvas.getContext(\"2d\");\r\n this.latesttiles = [...tileNamesVp];\r\n AppProvider.fetchDesignTiles({\r\n file: designPath,\r\n zoom,\r\n tiles: tileNamesVp,\r\n props: designDetails,\r\n hash\r\n }).then(baseDesignPath => {\r\n const issamecolornumber = JSON.stringify(this.latesttiles) === JSON.stringify(tileNamesVp);\r\n if (issamecolornumber && localNonce !== this.fetchNonce1) return;\r\n let loadcount = 0;\r\n const latesttiles = this.latesttiles;\r\n const uniquetilesinvp = issamecolornumber\r\n ? tilesinVp\r\n : tilesinVp.filter(function (tile) {\r\n return !latesttiles.includes(tile.name);\r\n });\r\n const drawInDesignCanvasFinish = (index) => {\r\n if (tileTransparency.length) {\r\n ctx.globalCompositeOperation = \"destination-in\";\r\n ctx.drawImage(this.canvasNorm, 0, 0);\r\n }\r\n onComplete()\r\n };\r\n drawTilesIterateFunc({ tileVec: uniquetilesinvp, baseDesignPath: baseDesignPath, hash, ctx: ctx, onComplete: drawInDesignCanvasFinish, mime: window.InterfaceElements.IsJpeg ? \"rendered.jpg\" : \"jpg\", tileSize: this.tileSize, offset: { X: this.offsetX, Y: this.offsetY } })\r\n\r\n });\r\n }\r\n updateNormapTiles(options, onUpdate, onComplete) {\r\n const { xTotal, yTotal } = this;\r\n const {\r\n x,\r\n y,\r\n endX = xTotal,\r\n endY = yTotal,\r\n tiles,\r\n zoom,\r\n designPath,\r\n designDetails,\r\n hash = \"\"\r\n } = options;\r\n const localNonce = (this.fetchNonce2 = {});\r\n const ctxNorm = this.canvasNorm.getContext(\"2d\");\r\n let tilePoints;\r\n if (tiles) tilePoints = tiles.map(name => convertNameToTilePoint(name));\r\n else tilePoints = this.tilePoints;\r\n const { startX, startY, endpointX, endpointY } = this.getStartEndPoints(x, y, endX, endY);\r\n const tilesinVp = tilePoints.filter(point => {\r\n const { x, y } = point;\r\n return x >= startX && y >= startY && x <= endpointX && y <= endpointY;\r\n });\r\n this.normapTilesUpdated = true;\r\n const tileNamesVp = tilesinVp.map(tile => convertTilePointToName(tile.x, tile.y));\r\n\r\n const tilesNotInVp = tilePoints.filter(n => !tilesinVp.includes(n));\r\n this.normapTilesToUpdate = mergeArraysWithoutDuplicate(this.normapTilesToUpdate, tilesNotInVp);\r\n\r\n AppProvider.fetchPileTiles({\r\n file: designPath,\r\n zoom,\r\n tiles: tileNamesVp,\r\n props: designDetails,\r\n hash\r\n }).then(baseNormalPath => {\r\n drawTilesIterateFunc({ tileVec: tilesinVp, baseDesignPath: baseNormalPath, hash, ctx: ctxNorm, onComplete: onComplete, mime: \"png\", tileSize: this.tileSize, offset: { X: this.offsetX, Y: this.offsetY } })\r\n });\r\n }\r\n\r\n getStartEndPoints(x, y, endX, endY) {\r\n const { xTotal, yTotal } = this;\r\n\r\n let startX = x >= 0 ? x : 0;\r\n let startY = y >= 0 ? y : 0;\r\n\r\n return {\r\n startX,\r\n startY,\r\n endpointX: endX > xTotal ? xTotal : endX,\r\n endpointY: endY > yTotal ? yTotal : endY\r\n };\r\n }\r\n}\r\n\r\nconst drawTilesIterateFunc = ({ tileVec, baseDesignPath, hash, ctx, onComplete, mime, tileSize, offset }) => {\r\n let tileImagesLoaded = 0;\r\n let errorArr = [];\r\n tileVec.forEach((tilePoint, index) => {\r\n const { name: tileName } = tilePoint;\r\n let filename = `${baseDesignPath}/${tileName}.${mime}?t=${hash}`;\r\n const img = document.createElement(\"img\");\r\n img.setAttribute(\"crossOrigin\", \"Anonymous\");\r\n img.src = filename;\r\n tilePoint.image = img;\r\n img.onerror = () => {\r\n tileImagesLoaded++;\r\n errorArr.push(tilePoint);\r\n if (tileImagesLoaded === tileVec.length) {\r\n drawFinish();\r\n }\r\n }\r\n img.onload = () => {\r\n drawSingleTileInDesignCanvas(index);\r\n tileImagesLoaded++;\r\n if (tileImagesLoaded === tileVec.length) {\r\n drawFinish();\r\n }\r\n };\r\n });\r\n\r\n const drawSingleTileInDesignCanvas = index => {\r\n const tilepoint = tileVec[index];\r\n const startX = tilepoint.x * tileSize + offset.X;\r\n const startY = tilepoint.y * tileSize + offset.Y;\r\n const destTileSizeX = tileSize * tilepoint.image.width / tileStandardSize;\r\n const destTileSizeY = tileSize * tilepoint.image.height / tileStandardSize;\r\n ctx.drawImage(tilepoint.image, startX, startY, destTileSizeX, destTileSizeY);\r\n };\r\n\r\n const drawFinish = () => {\r\n let errorCount = errorArr.length;\r\n if (errorCount > 0) {\r\n let errorLoadCount = 0;\r\n errorArr.forEach(tilePoint => {\r\n const img = document.createElement(\"img\");\r\n img.setAttribute(\"crossOrigin\", \"Anonymous\");\r\n img.onerror = () => {\r\n errorLoadCount++;\r\n if (errorLoadCount === errorArr.length) {\r\n finishError();\r\n }\r\n }\r\n img.onload = () => {\r\n tilePoint.image = img;\r\n const startX = tilePoint.x * tileSize + offset.X;\r\n const startY = tilePoint.y * tileSize + offset.Y;\r\n const destTileSizeX = tileSize * tilePoint.image.width / tileStandardSize;\r\n const destTileSizeY = tileSize * tilePoint.image.height / tileStandardSize;\r\n ctx.drawImage(tilePoint.image, startX, startY, destTileSizeX, destTileSizeY);\r\n errorCount--;\r\n errorLoadCount++;\r\n if (errorLoadCount === errorArr.length) {\r\n finishError();\r\n }\r\n };\r\n img.src = tilePoint.image.src;\r\n });\r\n const finishError = () => {\r\n if (errorCount !== 0) {\r\n console.error(\"Some Tiles could not load\");\r\n }\r\n onComplete();\r\n }\r\n }\r\n else {\r\n onComplete();\r\n }\r\n }\r\n}","// based on https://github.com/mrdoob/eventdispatcher.js/\r\n\r\nexport class EventDispatcher {\r\n\r\n\tconstructor() {\r\n\r\n\t\tthis._listeners = {};\r\n\r\n\t}\r\n\r\n\taddEventListener( type, listener ) {\r\n\r\n\t\tconst listeners = this._listeners;\r\n\r\n\t\tif ( listeners[ type ] === undefined ) {\r\n\r\n\t\t\tlisteners[ type ] = [];\r\n\r\n\t\t}\r\n\r\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\r\n\r\n\t\t\tlisteners[ type ].push( listener );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\thasEventListener( type, listener ) {\r\n\r\n\t\tconst listeners = this._listeners;\r\n\r\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\r\n\r\n\t}\r\n\r\n\tremoveEventListener( type, listener ) {\r\n\r\n\t\tconst listeners = this._listeners;\r\n\t\tconst listenerArray = listeners[ type ];\r\n\r\n\t\tif ( listenerArray !== undefined ) {\r\n\r\n\t\t\tconst index = listenerArray.indexOf( listener );\r\n\r\n\t\t\tif ( index !== - 1 ) {\r\n\r\n\t\t\t\tlistenerArray.splice( index, 1 );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tdispatchEvent( event ) {\r\n\r\n\t\tconst listeners = this._listeners;\r\n\t\tconst listenerArray = listeners[ event.type ];\r\n\r\n\t\tif ( listenerArray !== undefined ) {\r\n\r\n\t\t\tevent.target = this;\r\n\r\n\t\t\tconst array = listenerArray.slice( 0 );\r\n\r\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tarray[ i ].call( this, event );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n}\r\n","import * as THREE from \"three\";\r\nimport { OrbitControls } from \"../../utils/OrbitControls\";\r\nimport { FBXLoader } from \"three/examples/jsm/loaders/FBXLoader\";\r\nimport { convertArrIntoRad, convertUnit, readImage } from \"../../utils/utils\";\r\nimport { clearCanvas, createCanvas, downloadImageData } from \"../../utils/canvasutils\";\r\nimport CameraControls from \"./cameracontrols/camera-controls\";\r\n\r\nCameraControls.install({ THREE: THREE });\r\n\r\n\r\nclass ResourceTrackerPh {\r\n constructor () {\r\n this.resources = new Set();\r\n this.resourceslocal = new Set();\r\n }\r\n track(resource) {\r\n if (!resource) {\r\n return resource;\r\n }\r\n // handle children and when material is an array of materials or\r\n // uniform is array of textures\r\n if (Array.isArray(resource)) {\r\n resource.forEach(resource => this.track(resource));\r\n return resource;\r\n }\r\n\r\n if (resource.dispose || resource instanceof THREE.Object3D) {\r\n this.resources.add(resource);\r\n }\r\n if (resource instanceof THREE.Object3D) {\r\n this.track(resource.geometry);\r\n this.track(resource.material);\r\n this.track(resource.children);\r\n } else if (resource instanceof THREE.Material) {\r\n // We have to check if there are any textures on the material\r\n for (const value of Object.values(resource)) {\r\n if (value instanceof THREE.Texture) {\r\n this.track(value);\r\n }\r\n }\r\n // We also have to check if any uniforms reference textures or arrays of textures\r\n if (resource.uniforms) {\r\n for (const value of Object.values(resource.uniforms)) {\r\n if (value) {\r\n const uniformValue = value.value;\r\n if (uniformValue instanceof THREE.Texture ||\r\n Array.isArray(uniformValue)) {\r\n this.track(uniformValue);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return resource;\r\n }\r\n tracklocal(resource) {\r\n if (!resource) {\r\n return resource;\r\n }\r\n // handle children and when material is an array of materials or\r\n // uniform is array of textures\r\n if (Array.isArray(resource)) {\r\n resource.forEach(resource => this.tracklocal(resource));\r\n return resource;\r\n }\r\n\r\n if (resource.dispose || resource instanceof THREE.Object3D) {\r\n this.resourceslocal.add(resource);\r\n }\r\n if (resource instanceof THREE.Object3D) {\r\n this.tracklocal(resource.geometry);\r\n this.tracklocal(resource.material);\r\n this.tracklocal(resource.children);\r\n } else if (resource instanceof THREE.Material) {\r\n // We have to check if there are any textures on the material\r\n for (const value of Object.values(resource)) {\r\n if (value instanceof THREE.Texture) {\r\n this.tracklocal(value);\r\n }\r\n }\r\n // We also have to check if any uniforms reference textures or arrays of textures\r\n if (resource.uniforms) {\r\n for (const value of Object.values(resource.uniforms)) {\r\n if (value) {\r\n const uniformValue = value.value;\r\n if (uniformValue instanceof THREE.Texture ||\r\n Array.isArray(uniformValue)) {\r\n this.tracklocal(uniformValue);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return resource;\r\n }\r\n untrack(resource) {\r\n this.resources.delete(resource);\r\n }\r\n untracklocal(resource) {\r\n this.resourceslocal.delete(resource);\r\n }\r\n dispose() {\r\n const allresources = new Set([...this.resources, ...this.resourceslocal])\r\n for (const resource of allresources) {\r\n if (resource instanceof THREE.Object3D) {\r\n if (resource.parent) {\r\n resource.parent.remove(resource);\r\n }\r\n }\r\n if (resource.dispose) {\r\n resource.dispose();\r\n }\r\n }\r\n this.resources.clear();\r\n this.resourceslocal.clear();\r\n }\r\n disposelocal() {\r\n for (const resource of this.resourceslocal) {\r\n if (resource instanceof THREE.Object3D) {\r\n if (resource.parent) {\r\n resource.parent.remove(resource);\r\n }\r\n }\r\n if (resource.dispose) {\r\n resource.dispose();\r\n }\r\n }\r\n this.resourceslocal.clear();\r\n }\r\n}\r\nexport default class PhotographicView {\r\n constructor () {\r\n this.scene = new THREE.Scene();\r\n\r\n this.textureLoader = new THREE.TextureLoader();\r\n this.fbxLoader = new FBXLoader();\r\n this.raycaster = new THREE.Raycaster();\r\n this.offset = new THREE.Vector3();\r\n this.objectLoaded = false;\r\n this.object = null;\r\n this.w = null;\r\n this.h = null;\r\n this.hasBackSurface = false;\r\n this.modelUrl = null;\r\n this.resTracker = new ResourceTrackerPh();\r\n this.track = this.resTracker.track.bind(this.resTracker);\r\n this.tracklocal = this.resTracker.tracklocal.bind(this.resTracker);\r\n this.ambientIntensity = undefined;\r\n }\r\n reset() {\r\n this.objectLoaded = false;\r\n this.object = null;\r\n this.w = null;\r\n this.h = null;\r\n this.hasBackSurface = false;\r\n this.modelUrl = null;\r\n this.material = null;\r\n this.materialBack = null;\r\n }\r\n async init({ canvas, config = {}, shot, dims = {}, resolution, roomType, baseUrl }) {\r\n if (this.resTracker) {\r\n this.resTracker.disposelocal();\r\n }\r\n window.scene = this.scene;\r\n if (!this.modelUrl || (this.modelUrl !== config.modelUrl)) await this.clearScene();\r\n let { width = window.innerWidth, height = window.innerHeight } = dims;\r\n this.w = width;\r\n this.h = height;\r\n this.sceneConfig = config;\r\n let { orbitControl = false } = config;\r\n this.baseUrl = baseUrl;\r\n if (roomType === \"illustration\") {\r\n canvas.style.visibility = \"hidden\";\r\n } else {\r\n canvas.style.visibility = \"inherit\";\r\n }\r\n this.renderer = this.tracklocal(new THREE.WebGLRenderer({\r\n canvas,\r\n preserveDrawingBuffer: true,\r\n alpha: true,\r\n antialias: false\r\n }));\r\n this.renderer.setPixelRatio(resolution);\r\n this.renderer.setSize(width, height);\r\n const camConfig = config[shot];\r\n this.camera = this.tracklocal(perspectiveCamera({ ...camConfig, width, height }));\r\n this.scene.add(this.camera);\r\n window.scene = this.scene;\r\n // this.orbit = addCameraControl(this.renderer, this.scene, this.camera, camConfig);\r\n this.orbit = addOrbitControl(this.renderer, this.scene, this.camera, camConfig);\r\n this.orbit.enabled = true;\r\n // this.orbit.screenSpacePanning = true;\r\n }\r\n setupLights() {\r\n this.directionalLight = this.track(new THREE.DirectionalLight(0xffffff, 0.9));\r\n this.scene.add(this.directionalLight);\r\n const intensity = this.sceneConfig.ambientIntensity || 0.5;\r\n this.ambientLight = this.track(new THREE.AmbientLight(0xffffff, intensity));\r\n this.scene.add(this.ambientLight);\r\n }\r\n removeLights() {\r\n if (this.directionalLight) {\r\n this.scene.remove(this.directionalLight);\r\n };\r\n if (this.ambientLight) {\r\n this.scene.remove(this.ambientLight);\r\n }\r\n }\r\n changedIntensity() {\r\n const changedIntensity = this.ambientIntensity !== this.sceneConfig.ambientIntensity;\r\n if (\r\n changedIntensity &&\r\n (this.ambientIntensity !== undefined || this.sceneConfig.ambientIntensity !== undefined)\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n setup3dObject({ fbxUrl }) {\r\n return new Promise((resolve, reject) => {\r\n if (!this.sceneConfig) return;\r\n const { objects3d, surfaces } = this.sceneConfig;\r\n this.removeLights();\r\n const setupObjects = () => {\r\n let objectsLoaded = 0;\r\n objects3d.forEach(object3d => {\r\n console.log(object3d, this.objectFbx);\r\n const object = this.objectFbx.getObjectByName(object3d);\r\n if (!object) {\r\n console.warn(\"PHOTOGRAPHIC VIEW: object\", object3d, \"does not exist\");\r\n return;\r\n }\r\n this.scene.add(object);\r\n const objectConfig = this.sceneConfig[object3d];\r\n const { flagged } = this.sceneConfig;\r\n let fact = flagged ? 10 : 1;\r\n const {\r\n position = [0, 0, 0],\r\n rotation = [90, 0, 0],\r\n scale = [1, 1, 1],\r\n preset = false\r\n } = objectConfig;\r\n object.position.fromArray(position);\r\n object.scale.fromArray(scale);\r\n object.rotation.fromArray(convertArrIntoRad(rotation));\r\n\r\n this.directionalLight.position.set(\r\n position[0] + 3000 / fact,\r\n position[1] + 3000 / fact,\r\n position[2]\r\n );\r\n var targetObject = this.tracklocal(new THREE.Object3D());\r\n targetObject.name = \"TargetObject\";\r\n targetObject.position.set(...position);\r\n this.scene.add(targetObject);\r\n this.directionalLight.target = targetObject;\r\n // let helper = new THREE.DirectionalLightHelper(this.directionalLight, 100, 0xff0000);\r\n // this.scene.add(helper);\r\n\r\n if (!preset) {\r\n this.objProps = objectConfig;\r\n if (surfaces) {\r\n const { back, front } = surfaces;\r\n this.object = object.getObjectByName(front);\r\n if (back) {\r\n this.objectBack = object.getObjectByName(back);\r\n this.hasBackSurface = true;\r\n } else {\r\n this.hasBackSurface = false;\r\n }\r\n } else {\r\n this.object = object;\r\n }\r\n if (this.object && this.material) {\r\n this.object.material = this.material;\r\n this.object.material.needsUpdate = true;\r\n this.render();\r\n }\r\n objectsLoaded++;\r\n\r\n if (objectsLoaded === objects3d.length) {\r\n const fbxPathArr = fbxUrl.split(/[\\\\/]+/);\r\n this.modelUrl = fbxPathArr[fbxPathArr.length - 1];\r\n resolve();\r\n }\r\n } else {\r\n const { defaultTexture, defaultScale = [9, 12] } = objectConfig;\r\n const { width: texWidth = 9, height: texHeight = 12, path } = defaultTexture;\r\n const textureUrl = `${this.baseUrl}/${path}`;\r\n let repeat = [1, 1];\r\n const rx = defaultScale[0] / texWidth;\r\n const ry = defaultScale[1] / texHeight;\r\n repeat = [rx, ry];\r\n console.log(\"setupObjects -> repeat\", repeat);\r\n readImage(textureUrl).then(image => {\r\n const { width, height } = image;\r\n const canv = createCanvas(width, height);\r\n canv.getContext(\"2d\").drawImage(image, 0, 0, width, height);\r\n\r\n const texture = this.tracklocal(new THREE.CanvasTexture(canv));\r\n texture.anisotropy = this.renderer.capabilities.getMaxAnisotropy();\r\n texture.wrapS = texture.wrapT = THREE.RepeatWrapping;\r\n\r\n texture.repeat.fromArray(repeat);\r\n\r\n let material = this.tracklocal(new THREE.MeshBasicMaterial({\r\n map: texture,\r\n transparent: true,\r\n side: THREE.DoubleSide,\r\n alphaTest: 0.5\r\n }));\r\n\r\n object.material = material;\r\n object.material.needsUpdate = true;\r\n this.render();\r\n\r\n objectsLoaded++;\r\n if (objectsLoaded === objects3d.length) {\r\n const fbxPathArr = fbxUrl.split(/[\\\\/]+/);\r\n this.modelUrl = fbxPathArr[fbxPathArr.length - 1];\r\n resolve();\r\n }\r\n });\r\n }\r\n });\r\n };\r\n if (this.changedIntensity()) {\r\n this.ambientIntensity = this.sceneConfig.ambientIntensity;\r\n if (this.carpetLoaded) {\r\n this.removeLights();\r\n this.setupLights();\r\n }\r\n }\r\n if (!this.modelUrl || (this.modelUrl !== this.sceneConfig.modelUrl))\r\n this.fbxLoader.load(\r\n fbxUrl,\r\n obj => {\r\n\r\n // this.scene.add(obj);\r\n // this.render();\r\n // resolve();\r\n this.objectFbx = obj;\r\n this.setupLights();\r\n setupObjects();\r\n },\r\n undefined,\r\n console.error\r\n );\r\n else setupObjects();\r\n });\r\n }\r\n setObjectTexture({ designDetails, designCanvas, normapCanvas, backDesignCanvas }) {\r\n return new Promise((resolve, reject) => {\r\n const { surfaceUnit = \"in\", doubleSide, defaultScale, fitWidth, offset, textureRotation } = this.objProps;\r\n const PhysicalWidth = convertUnit(\r\n designDetails.Unit,\r\n surfaceUnit,\r\n designDetails.PhysicalWidth\r\n );\r\n const PhysicalHeight = convertUnit(\r\n designDetails.Unit,\r\n surfaceUnit,\r\n designDetails.PhysicalHeight\r\n );\r\n this.designDetails = {\r\n ...designDetails,\r\n PhysicalHeight,\r\n PhysicalWidth,\r\n Unit: surfaceUnit\r\n };\r\n if (designCanvas) {\r\n const designTexture = this.tracklocal(new THREE.CanvasTexture(designCanvas));\r\n designTexture.anisotropy = this.renderer.capabilities.getMaxAnisotropy();\r\n designTexture.wrapS = designTexture.wrapT = THREE.RepeatWrapping;\r\n // designTexture.flipY = false;\r\n let repeat = [1, 1];\r\n if (defaultScale)\r\n if (!fitWidth) {\r\n repeat = [defaultScale[0] / PhysicalWidth, defaultScale[1] / PhysicalHeight];\r\n } else {\r\n repeat = [1, (defaultScale[1] / defaultScale[0]) * (PhysicalWidth / PhysicalHeight)];\r\n }\r\n if (offset) {\r\n designTexture.offset.fromArray(offset);\r\n } else {\r\n designTexture.offset.fromArray([0, 0]);\r\n }\r\n designTexture.repeat.fromArray(repeat);\r\n if (textureRotation) {\r\n designTexture.rotation = ((textureRotation * Math.PI) / 180);\r\n }\r\n if (normapCanvas) {\r\n const normalTexture = this.tracklocal(new THREE.CanvasTexture(normapCanvas));\r\n normalTexture.anisotropy = this.renderer.capabilities.getMaxAnisotropy();\r\n normalTexture.wrapS = normalTexture.wrapT = THREE.RepeatWrapping;\r\n if (offset) {\r\n normalTexture.offset.fromArray(offset);\r\n } else {\r\n normalTexture.offset.fromArray([0, 0]);\r\n }\r\n normalTexture.repeat.fromArray(repeat);\r\n if (textureRotation) {\r\n normalTexture.rotation = ((textureRotation * Math.PI) / 180);\r\n }\r\n this.material = this.tracklocal(new THREE.MeshStandardMaterial({\r\n map: designTexture,\r\n normalMap: normalTexture,\r\n roughness: 1,\r\n metalness: 0.1,\r\n needsUpdate: true,\r\n transparent: true,\r\n side: doubleSide ? THREE.DoubleSide : THREE.FrontSide,\r\n }));\r\n }\r\n else {\r\n this.material = this.tracklocal(new THREE.MeshStandardMaterial({\r\n map: designTexture,\r\n roughness: 1,\r\n metalness: 0.1,\r\n needsUpdate: true,\r\n transparent: true,\r\n side: doubleSide ? THREE.DoubleSide : THREE.FrontSide,\r\n }));\r\n }\r\n\r\n if (!this.object) {\r\n console.error(\"could not find the object\");\r\n resolve();\r\n return;\r\n }\r\n this.object.material = this.material;\r\n this.object.material.needsUpdate = true;\r\n }\r\n if (this.hasBackSurface && backDesignCanvas) {\r\n const designTextureBack = this.tracklocal(new THREE.CanvasTexture(backDesignCanvas));\r\n designTextureBack.anisotropy = this.renderer.capabilities.getMaxAnisotropy();\r\n designTextureBack.wrapS = designTextureBack.wrapT = THREE.RepeatWrapping;\r\n this.materialBack = this.tracklocal(new THREE.MeshBasicMaterial({\r\n map: designTextureBack,\r\n transparent: true,\r\n side: THREE.DoubleSide,\r\n alphaTest: 0.5,\r\n needsUpdate: true\r\n }));\r\n this.objectBack.material = this.materialBack;\r\n this.objectBack.material.needsUpdate = true;\r\n }\r\n this.render();\r\n resolve();\r\n });\r\n }\r\n updateMap() {\r\n if (this.object && this.object.material.map) {\r\n this.object.material.map.needsUpdate = true;\r\n this.object.material.needsUpdate = true;\r\n }\r\n if (this.object && this.object.material.normalMap) {\r\n this.object.material.normalMap.needsUpdate = true;\r\n this.object.material.needsUpdate = true;\r\n }\r\n if (this.objectBack && this.objectBack.material.map) {\r\n this.objectBack.material.needsUpdate = true;\r\n this.objectBack.material.map.needsUpdate = true;\r\n }\r\n this.render();\r\n }\r\n clearScene() {\r\n return new Promise((resolve, reject) => {\r\n var objsToRemove = [...this.scene.children];\r\n let removeCount = objsToRemove.length;\r\n if (removeCount === 0) resolve()\r\n objsToRemove.map((object, index) => {\r\n this.scene.remove(object);\r\n removeCount--;\r\n if (removeCount === 0) {\r\n if (this.renderer) this.render();\r\n this.resTracker.dispose();\r\n resolve();\r\n }\r\n })\r\n });\r\n }\r\n\r\n render() {\r\n this.renderer.render(this.scene, this.camera);\r\n }\r\n resizeRenderer({ width, height }) {\r\n this.w = width;\r\n this.h = height;\r\n if (this.camera) {\r\n this.camera.aspect = width / height;\r\n this.camera.updateProjectionMatrix();\r\n }\r\n this.renderer.setSize(width, height);\r\n this.render();\r\n }\r\n}\r\n\r\nexport const perspectiveCamera = (config = {}) => {\r\n const { innerWidth, innerHeight } = window;\r\n let {\r\n fov = 40,\r\n near = 0.1,\r\n far = 100000,\r\n height = innerHeight,\r\n width = innerWidth,\r\n position = [0, 200, 500],\r\n target = [0, 0, 0],\r\n rotation = [0, 0, 0]\r\n } = config;\r\n const aspect = width / height;\r\n const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);\r\n camera.lookAt(new THREE.Vector3(...target)); // This seems to be disabled by OrbitControls\r\n camera.position.set(...position);\r\n camera.rotation.set(...convertArrIntoRad(rotation));\r\n return camera;\r\n};\r\n\r\nexport const addOrbitControl = function (renderer, scene, camera, config = {}) {\r\n let { target = [0, 0, 0] } = config;\r\n const control = new OrbitControls(camera, renderer.domElement);\r\n control.enableKeys = false;\r\n control.target = new THREE.Vector3(...target);\r\n control.addEventListener(\"change\", () => {\r\n renderer.render(scene, camera);\r\n });\r\n control.update();\r\n return control;\r\n};\r\nconst addCameraControl = function (renderer, scene, camera, config = {}) {\r\n let {\r\n target = [0, 0, 0],\r\n minDistance,\r\n maxDistance,\r\n enableRotate = true,\r\n enableDamping,\r\n autoRotate = false,\r\n autoRotateSpeed,\r\n panSpeed,\r\n boundingBox: bounds\r\n } = config;\r\n const clock = new THREE.Clock();\r\n\r\n const cameraControls = new CameraControls(camera, renderer.domElement);\r\n cameraControls.setTarget(target[0], target[1], target[2], false);\r\n const bb = new THREE.Box3(\r\n new THREE.Vector3(-1000, -500, -1500),\r\n new THREE.Vector3(500, 500, 1000)\r\n );\r\n if (bounds) {\r\n cameraControls.setBoundary(bb);\r\n cameraControls.verticalDragToForward = true;\r\n cameraControls.polarRotateSpeed = 0;\r\n cameraControls.azimuthRotateSpeed = 0;\r\n cameraControls.minDistance = 1200;\r\n cameraControls.maxDistance = 2000;\r\n cameraControls.boundaryFriction = 0.2;\r\n }\r\n console.log(cameraControls);\r\n\r\n renderer.render(scene, camera);\r\n\r\n (function anim() {\r\n const delta = clock.getDelta();\r\n const elapsed = clock.getElapsedTime();\r\n const updated = cameraControls.update(delta);\r\n requestAnimationFrame(anim);\r\n if (updated) {\r\n // cameraControls.getTarget(centerHelper.position);\r\n renderer.render(scene, camera);\r\n // console.log(\"rendered\");\r\n }\r\n })();\r\n return cameraControls;\r\n};\r\nexport const loadFbx = url => {\r\n return new Promise((resolve, reject) => {\r\n new FBXLoader().load(url, resolve, undefined, reject);\r\n });\r\n};\r\n","const { createCanvas } = require(\"./canvasutils\")\r\n\r\nconst toXY = (i, width) => {\r\n return { x: (i / 4) % width, y: Math.floor((i / 4) / width) }\r\n}\r\nconst fromXY = (x, y, width) => {\r\n return (x + y * width) * 4\r\n}\r\n\r\nexport const createBlurMatrix = (srcCanvas) => {\r\n const srcCtx = srcCanvas.getContext(\"2d\");\r\n const src_w = srcCanvas.width;\r\n const src_h = srcCanvas.height;\r\n const srcData = srcCtx.getImageData(0, 0, src_w, src_h);\r\n let blurMatrix = Array(srcData.data.length)\r\n\r\n return new Promise((resolve) => {\r\n for (let i = 0; i < srcData.data.length; i += 4) {\r\n let totR = srcData.data[i + 0];\r\n let totG = srcData.data[i + 1];\r\n let totB = srcData.data[i + 2];\r\n let totA = srcData.data[i + 3];\r\n const { x, y } = toXY(i, src_w);\r\n if (x > 0) {\r\n const ix = fromXY(x - 1, y, src_w, src_h)\r\n totR += blurMatrix[ix];\r\n totG += blurMatrix[ix + 1];\r\n totB += blurMatrix[ix + 2];\r\n totA += blurMatrix[ix + 3];\r\n }\r\n if (y > 0) {\r\n const iy = fromXY(x, y - 1, src_w, src_h)\r\n totR += blurMatrix[iy];\r\n totG += blurMatrix[iy + 1];\r\n totB += blurMatrix[iy + 2];\r\n totA += blurMatrix[iy + 3];\r\n }\r\n if (x > 0 && y > 0) {\r\n const ix = fromXY(x - 1, y - 1, src_w, src_h)\r\n totR -= blurMatrix[ix];\r\n totG -= blurMatrix[ix + 1];\r\n totB -= blurMatrix[ix + 2];\r\n totA -= blurMatrix[ix + 3];\r\n }\r\n blurMatrix[i + 0] = totR;\r\n blurMatrix[i + 1] = totG;\r\n blurMatrix[i + 2] = totB;\r\n blurMatrix[i + 3] = totA;\r\n if (i >= (srcData.data.length - 4)) {\r\n resolve(blurMatrix);\r\n }\r\n }\r\n })\r\n\r\n\r\n}\r\n\r\nexport const createBlurImage = async (src, depthImage, centerAt, dontBlur, maxRadius, blurMatrix = null) => {\r\n return new Promise(async (resolve) => {\r\n const width = src.width;\r\n const height = src.height;\r\n let srcCanvas, srcCtx;\r\n if (src.nodeName === \"IMAGE\") {\r\n srcCanvas = createCanvas(width, height);\r\n srcCtx = srcCanvas.getContext(\"2d\")\r\n srcCtx.drawImage(src, 0, 0, width, height)\r\n }\r\n else if (src.nodeName === \"CANVAS\") {\r\n srcCanvas = src;\r\n srcCtx = srcCanvas.getContext(\"2d\");\r\n }\r\n const depthCanvas = createCanvas(width, height);\r\n const depthCtx = depthCanvas.getContext(\"2d\")\r\n depthCtx.drawImage(depthImage, 0, 0, width, height)\r\n const dstCanvas = createCanvas(width, height);\r\n const dstCtx = dstCanvas.getContext(\"2d\");\r\n const t0 = performance.now()\r\n if (!blurMatrix) {\r\n blurMatrix = await createBlurMatrix(srcCanvas)\r\n }\r\n const t1 = performance.now()\r\n\r\n const min1 = centerAt - dontBlur;\r\n const min2 = 0;\r\n const max1 = centerAt + dontBlur;\r\n const max2 = 255;\r\n\r\n const dstData = dstCtx.getImageData(0, 0, width, height)\r\n const srcData = srcCtx.getImageData(0, 0, width, height)\r\n const depthData = depthCtx.getImageData(0, 0, width, height)\r\n\r\n for (let i = 0; i < srcData.data.length; i += 4) {\r\n const gs = depthData.data[i];\r\n let delta = 0;\r\n if (gs < min1)\r\n delta = (min1 - gs) * 255.0 / (min1 - min2);\r\n if (gs > max1)\r\n delta = (gs - max1) * 255.0 / (max2 - max1);\r\n const factor = delta / 255.0;\r\n const radius = Math.round(factor * maxRadius);\r\n if (radius === 0) {\r\n dstData.data[i] = srcData.data[i];\r\n dstData.data[i + 1] = srcData.data[i + 1]\r\n dstData.data[i + 2] = srcData.data[i + 2]\r\n dstData.data[i + 3] = srcData.data[i + 3]\r\n }\r\n else {\r\n let boxw = radius;\r\n let boxh = radius;\r\n let mul = 1.0 / ((boxw * 2) * (boxh * 2));\r\n const { x, y } = toXY(i, width);\r\n const ria = fromXY(x + boxw, y + boxh, width, height)\r\n const rib = fromXY(x - boxw, y - boxh, width, height)\r\n const ric = fromXY(x - boxw, y + boxh, width, height)\r\n const rid = fromXY(x + boxw, y - boxh, width, height)\r\n\r\n const getBlurData = (ind) => {\r\n let returnVal = (ind >= 0 ? blurMatrix[ind] : 0);\r\n return returnVal;\r\n }\r\n dstData.data[i + 0] += Math.round((getBlurData(ria + 0) + getBlurData(rib + 0) - getBlurData(ric + 0) - getBlurData(rid + 0)) * mul);\r\n dstData.data[i + 1] += Math.round((getBlurData(ria + 1) + getBlurData(rib + 1) - getBlurData(ric + 1) - getBlurData(rid + 1)) * mul);\r\n dstData.data[i + 2] += Math.round((getBlurData(ria + 2) + getBlurData(rib + 2) - getBlurData(ric + 2) - getBlurData(rid + 2)) * mul);\r\n dstData.data[i + 3] += Math.round((getBlurData(ria + 3) + getBlurData(rib + 3) - getBlurData(ric + 3) - getBlurData(rid + 3)) * mul);\r\n }\r\n if (i >= (srcData.data.length - 4)) {\r\n dstCtx.putImageData(dstData, 0, 0)\r\n const t2 = performance.now()\r\n console.log(t2 - t1, t1 - t0)\r\n resolve(dstCanvas);\r\n }\r\n }\r\n });\r\n}\r\n\r\n\r\n\r\n\r\n/*\r\n\r\nconst { createCanvas } = require(\"./canvasutils\")\r\n\r\nconst toXY = (i, width) => {\r\n return { x: (i / 4) % width, y: Math.floor((i / 4) / width) }\r\n}\r\nconst fromXY = (x, y, width) => {\r\n return (x + y * width) * 4\r\n}\r\n\r\nconst createBlurMatrix = (srcCanvas) => {\r\n const srcCtx = srcCanvas.getContext(\"2d\");\r\n const src_w = srcCanvas.width;\r\n const src_h = srcCanvas.height;\r\n const srcData = srcCtx.getImageData(0, 0, src_w, src_h);\r\n let blurMatrix = Array(srcData.data.length)\r\n\r\n return new Promise((resolve) => {\r\n for (let i = 0; i < srcData.data.length; i += 4) {\r\n let totR = srcData.data[i + 0];\r\n let totG = srcData.data[i + 1];\r\n let totB = srcData.data[i + 2];\r\n let totA = srcData.data[i + 3];\r\n const { x, y } = toXY(i, src_w);\r\n if (x > 0) {\r\n const ix = fromXY(x - 1, y, src_w, src_h)\r\n totR += blurMatrix[ix];\r\n totG += blurMatrix[ix + 1];\r\n totB += blurMatrix[ix + 2];\r\n totA += blurMatrix[ix + 3];\r\n }\r\n if (y > 0) {\r\n const iy = fromXY(x, y - 1, src_w, src_h)\r\n totR += blurMatrix[iy];\r\n totG += blurMatrix[iy + 1];\r\n totB += blurMatrix[iy + 2];\r\n totA += blurMatrix[iy + 3];\r\n }\r\n if (x > 0 && y > 0) {\r\n const ix = fromXY(x - 1, y - 1, src_w, src_h)\r\n totR -= blurMatrix[ix];\r\n totG -= blurMatrix[ix + 1];\r\n totB -= blurMatrix[ix + 2];\r\n totA -= blurMatrix[ix + 3];\r\n }\r\n blurMatrix[i + 0] = totR;\r\n blurMatrix[i + 1] = totG;\r\n blurMatrix[i + 2] = totB;\r\n blurMatrix[i + 3] = totA;\r\n // console.log(i);\r\n if (i >= (srcData.data.length - 1)) {\r\n resolve(blurMatrix);\r\n }\r\n }\r\n })\r\n\r\n\r\n}\r\n\r\nexport const createBlurImage = async (src, depthImage, centerAt, dontBlur, maxRadius) => {\r\n const width = depthImage.width;\r\n const height = depthImage.height;\r\n let srcCanvas, srcCtx;\r\n srcCanvas = createCanvas(width, height);\r\n srcCtx = srcCanvas.getContext(\"2d\")\r\n srcCtx.drawImage(src, 0, 0, width, height)\r\n const depthCanvas = createCanvas(width, height);\r\n const depthCtx = depthCanvas.getContext(\"2d\")\r\n depthCtx.drawImage(depthImage, 0, 0, width, height)\r\n const dstCanvas = createCanvas(width, height);\r\n const dstCtx = dstCanvas.getContext(\"2d\");\r\n const t0 = performance.now()\r\n const blurMatrix = await createBlurMatrix(srcCanvas)\r\n const t1 = performance.now()\r\n\r\n const min1 = centerAt - dontBlur;\r\n const min2 = 0;\r\n const max1 = centerAt + dontBlur;\r\n const max2 = 255;\r\n\r\n const dstData = dstCtx.getImageData(0, 0, width, height)\r\n const srcData = srcCtx.getImageData(0, 0, width, height)\r\n const depthData = depthCtx.getImageData(0, 0, width, height)\r\n\r\n return new Promise(resolve => {\r\n for (let i = 0; i < srcData.data.length; i += 4) {\r\n const gs = depthData.data[i];\r\n let delta = 0;\r\n if (gs < min1)\r\n delta = (min1 - gs) * 255.0 / (min1 - min2);\r\n if (gs > max1)\r\n delta = (gs - max1) * 255.0 / (max2 - max1);\r\n const factor = delta / 255.0;\r\n const radius = Math.round(factor * maxRadius);\r\n if (radius === 0) {\r\n dstData.data[i] = srcData.data[i];\r\n dstData.data[i + 1] = srcData.data[i + 1]\r\n dstData.data[i + 2] = srcData.data[i + 2]\r\n dstData.data[i + 3] = srcData.data[i + 3]\r\n } else {\r\n let boxw = radius;\r\n let boxh = radius;\r\n let mul = 1.0 / ((boxw * 2) * (boxh * 2));\r\n const { x, y } = toXY(i, width);\r\n const ria = fromXY(x + boxw, y + boxh, width, height)\r\n const rib = fromXY(x - boxw, y - boxh, width, height)\r\n const ric = fromXY(x - boxw, y + boxh, width, height)\r\n const rid = fromXY(x + boxw, y - boxh, width, height)\r\n dstData.data[i + 0] += (blurMatrix[ria + 0] + blurMatrix[rib + 0] - blurMatrix[ric + 0] - blurMatrix[rid + 0]) * mul;\r\n dstData.data[i + 1] += (blurMatrix[ria + 1] + blurMatrix[rib + 1] - blurMatrix[ric + 1] - blurMatrix[rid + 1]) * mul;\r\n dstData.data[i + 2] += (blurMatrix[ria + 2] + blurMatrix[rib + 2] - blurMatrix[ric + 2] - blurMatrix[rid + 2]) * mul;\r\n dstData.data[i + 3] += (blurMatrix[ria + 3] + blurMatrix[rib + 3] - blurMatrix[ric + 3] - blurMatrix[rid + 3]) * mul;\r\n }\r\n }\r\n dstCtx.putImageData(dstData, 0, 0)\r\n resolve(dstCanvas);\r\n })\r\n}\r\n\r\n*/","import space from \"color-space\";\r\nexport const calculateColorDelta = (color1, color2) => {\r\n const { R: r1, G: g1, B: b1 } = color1;\r\n const { R: r2, G: g2, B: b2 } = color2;\r\n // calculate differences between reds, greens and blues\r\n var r = 255 - Math.abs(r1 - r2);\r\n var g = 255 - Math.abs(g1 - g2);\r\n var b = 255 - Math.abs(b1 - b2);\r\n // limit differences between 0 and 1\r\n r /= 255;\r\n g /= 255;\r\n b /= 255;\r\n // 0 means opposit colors, 1 means same colors\r\n return (r + g + b) / 3;\r\n};\r\n\r\nexport function compare(a, sortingKey, b, sortingOrder) {\r\n const item1 = a[sortingKey];\r\n const item2 = b[sortingKey];\r\n return item1 === item2 ? 0 : item1 < item2 ? -sortingOrder : sortingOrder;\r\n}\r\n\r\nexport const hexToRGB = hex => {\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return result\r\n ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16)\r\n }\r\n : {}; //handle the return value in function calling this function\r\n};\r\n\r\nexport const hextoLum = hex => {\r\n const { r = 0, g = 0, b = 0 } = hexToRGB(hex)\r\n const hsl = space.rgb.hsl([r, g, b]);\r\n return hsl[2];\r\n};","// import { saveImageToDisk } from \"./../../api/nodeApi\";\r\nimport { readImage, resizeKeepingAspect, convertArrintoDeg, convertUnit } from \"../../utils/utils\";\r\nimport { clearCanvas, createCanvas, downloadImageData } from \"../../utils/canvasutils\";\r\nimport ThreeViewHelper from \"./threeviewhelper\";\r\nimport TileCanvas from \"../../tilecanvasnew\";\r\nimport PhotographicView from \"./photographicviewhelper\";\r\nimport { createBlurImage, createBlurMatrix } from \"../../utils/blur\";\r\nimport { hexToRGB } from \"../../utils/colorutils\";\r\n\r\nconst selectActiveObjectByMouseClick = false;\r\n\r\nconst tileCanvas = new TileCanvas();\r\nexport const roomTypes = {\r\n ILLUSTRATION: \"illustration\",\r\n ROOMVIEW: \"roomview\",\r\n PHOTOGRAPHIC: \"photographic\",\r\n PERSPECTIVE: \"perspective\"\r\n};\r\nexport const defaultRoomType = roomTypes.ROOMVIEW;\r\n\r\nfunction makeUrl() {\r\n let res = \"\";\r\n Array.from(arguments).forEach((argument, index) => {\r\n if (argument) {\r\n res = `${res}${index === 0 ? \"\" : \"/\"}${argument}`;\r\n }\r\n });\r\n return res;\r\n}\r\nconst rgbFromHex = hex => {\r\n let rgb = [0, 0, 0];\r\n rgb[0] = parseInt(hex.substring(1, 3), 16);\r\n rgb[1] = parseInt(hex.substring(3, 5), 16);\r\n rgb[2] = parseInt(hex.substring(5, 7), 16);\r\n return rgb;\r\n};\r\n\r\nconst patchRgb = [45, 24, 18];\r\n\r\nexport default class RoomViewHelper {\r\n constructor() {\r\n this.config = {};\r\n this.roomAssets = {};\r\n this.currentState = { shot: null, light: null, view: null };\r\n this.currentAssets = {};\r\n this.baseUrl = null;\r\n this.dimension = { width: null, height: null };\r\n this.dimensionPixels = { width: null, height: null };\r\n this.bgImage = null;\r\n this.maskImage = null;\r\n this.bgPatchImage = null;\r\n this.bgPatchShadowImage = null;\r\n this.shadowImage = null;\r\n this.highlightImage = null;\r\n this.canvasArray = Array(4);\r\n\r\n this.carpetURL = \"\";\r\n this.fbxLoaded = false;\r\n this.threeView = new ThreeViewHelper();\r\n this.phview = new PhotographicView();\r\n\r\n\r\n this.realTimeDynamicRendering = true;\r\n this.savedRoomState = {};\r\n this.currentActiveColors = [];\r\n\r\n this.zoom = 2;\r\n }\r\n\r\n initCanvas(options) {\r\n this.bgCanvas = options.bgCanvas;\r\n this.threeCanvas = options.threeCanvas;\r\n this.maskCanvas = options.maskCanvas;\r\n this.shadowCanvas = options.shadowCanvas;\r\n this.transitionCanvas = options.transitionCanvas;\r\n this.effectCanvas = options.effectCanvas;\r\n this.container = options.container;\r\n this.inputCanvas = options.inputCanvas;\r\n this.objCanvasContainer = options.objCanvasContainer;\r\n }\r\n clearAll() {\r\n this.clearAllCanvases();\r\n this.config = {};\r\n this.roomAssets = {};\r\n this.currentState = { shot: null, light: null, view: null };\r\n this.currentAssets = {};\r\n this.baseUrl = null;\r\n this.dimension = { width: null, height: null };\r\n this.dimensionPixels = { width: null, height: null };\r\n this.bgImage = null;\r\n this.maskImage = null;\r\n this.bgPatchImage = null;\r\n this.bgPatchShadowImage = null;\r\n this.shadowImage = null;\r\n this.highlightImage = null;\r\n this.canvasArray = Array(4);\r\n this.blurMatrix = null;\r\n\r\n // this.carpetURL = \"\";\r\n // this.fbxLoaded = false;\r\n }\r\n clearAllCanvases() {\r\n const { width, height } = this.dimension;\r\n clearCanvas(this.bgCanvas, width, height);\r\n clearCanvas(this.maskCanvas, width, height);\r\n clearCanvas(this.shadowCanvas, width, height);\r\n clearCanvas(this.inputCanvas, width, height);\r\n this.blurMatrix = null;\r\n // clearCanvas(this.transitionCanvas, width, height);\r\n }\r\n unmountClearUp() {\r\n const { roomType } = this.config;\r\n switch (roomType) {\r\n case roomTypes.ILLUSTRATION:\r\n this.phview.reset();\r\n this.phview.clearScene();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n resetOnDesignChange() {\r\n const { roomType } = this.config;\r\n switch (roomType) {\r\n case roomTypes.ILLUSTRATION:\r\n this.phview.reset();\r\n if (this.savedRoomState && this.savedRoomState[this.config.name]) {\r\n delete this.savedRoomState[this.config.name]\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n this.savedRoomState = {};\r\n }\r\n\r\n buildRoomAssets({ config }) {\r\n this.roomAssets = { ...config.roomAssets };\r\n }\r\n\r\n initConfig(roomData, resolution = null) {\r\n const { baseUrl, config, files, local } = roomData;\r\n this.roomData = roomData;\r\n this.realTimeDynamicRendering =\r\n config.realTimeDynamicRendering !== undefined || config.realTimeDynamicRendering !== null\r\n ? config.realTimeDynamicRendering\r\n : true;\r\n this.buildRoomAssets({ config });\r\n this.baseUrl = baseUrl;\r\n this.config = config;\r\n this.files = normalizeDirNames(files);\r\n this.local = local;\r\n const illustrationDims = this.config.dims;\r\n const containerDims = {\r\n width: this.container.clientWidth,\r\n height: this.container.clientHeight\r\n };\r\n this.currentActiveColors = [];\r\n this.resolution = resolution || window.devicePixelRatio;\r\n this.dimensionPixels = resizeKeepingAspect(illustrationDims, containerDims, \"fit_inside\");\r\n this.dimension = {\r\n width: Math.trunc(illustrationDims.width * this.resolution),\r\n height: Math.trunc(illustrationDims.height * this.resolution)\r\n };\r\n // this.dimension = { ...this.dimensionPixels };\r\n this.resolution = this.dimension.width / this.dimensionPixels.width;\r\n this.inputCanvas.width = this.dimensionPixels.width;\r\n this.inputCanvas.height = this.dimensionPixels.height;\r\n }\r\n\r\n getShotAssets({ shot, light, view }) {\r\n let commons = {};\r\n if (this.roomAssets[shot].CommonAssets) {\r\n commons = { ...commons, ...this.roomAssets[shot].CommonAssets }\r\n }\r\n if (light && view) {\r\n if (this.roomAssets[shot][light].CommonAssets) {\r\n commons = { ...commons, ...this.roomAssets[shot][light].CommonAssets }\r\n }\r\n if (view) {\r\n return { ...commons, ...this.roomAssets[shot][light][view] };\r\n }\r\n else {\r\n return { ...commons, ...this.roomAssets[shot][light][this.config.defaultview] };\r\n }\r\n } else {\r\n return { ...commons, ...this.roomAssets[shot] };\r\n }\r\n }\r\n\r\n updateRoomAssets({ shot, light, view, assets }) {\r\n if (light && view) {\r\n if (view) {\r\n this.roomAssets[shot][light][view] = {};\r\n this.roomAssets[shot][light][view] = { ...assets };\r\n if (assets && assets !== {}) this.roomAssets[shot][light][view][\"init\"] = true;\r\n } else {\r\n this.roomAssets[shot][light][this.config.defaultview] = {};\r\n this.roomAssets[shot][light][this.config.defaultview] = { ...assets };\r\n if (assets && assets !== {})\r\n this.roomAssets[shot][light][this.config.defaultview][\"init\"] = true;\r\n }\r\n } else if (shot) {\r\n this.roomAssets[shot] = {};\r\n this.roomAssets[shot] = { ...assets };\r\n if (assets && assets !== {}) this.roomAssets[shot][\"init\"] = true;\r\n }\r\n }\r\n\r\n preinitShot({ shot, light, view }) {\r\n this.updateRoomAssets({\r\n ...this.currentState,\r\n assets: { ...this.currentAssets }\r\n });\r\n\r\n let x = {\r\n shot: shot ? shot : this.currentState.shot,\r\n light: light ? light : this.currentState.light\r\n };\r\n if (x.light)\r\n x.view = !view\r\n ? this.currentState.view\r\n ? this.config.roomElements.lights[x.light].views.includes(this.currentState.view)\r\n ? this.currentState.view\r\n : this.config.defaultview\r\n : this.config.defaultview\r\n : view;\r\n\r\n this.currentState = { ...x };\r\n this.currentAssets = { ...this.getShotAssets({ ...x }) };\r\n\r\n return this.currentAssets.init;\r\n }\r\n\r\n initShot() {\r\n const promises = [];\r\n const bgUrl = this.currentAssets.background && this.currentAssets.background.url;\r\n const bgDimUrl = this.currentAssets.backgrounddim && this.currentAssets.backgrounddim.url;\r\n const bgPatchUrl = this.currentAssets.backgroundpatch && this.currentAssets.backgroundpatch.url;\r\n const bgPatchGreyUrl = this.currentAssets.backgroundpatchgrey && this.currentAssets.backgroundpatchgrey.url;\r\n const bgPatchGreyDimUrl = this.currentAssets.backgroundpatchgreydim && this.currentAssets.backgroundpatchgreydim.url;\r\n const bgPatchShadowUrl =\r\n this.currentAssets.backgroundpatchshadow && this.currentAssets.backgroundpatchshadow.url;\r\n const bgPatchShadowDimUrl =\r\n this.currentAssets.backgroundpatchshadowdim && this.currentAssets.backgroundpatchshadowdim.url;\r\n const maskUrl = this.currentAssets.mask && this.currentAssets.mask.url;\r\n const shadowUrl = this.currentAssets.shadow && this.currentAssets.shadow.url;\r\n const shadowDimUrl = this.currentAssets.shadowdim && this.currentAssets.shadowdim.url;\r\n const highlightUrl = this.currentAssets.highlight && this.currentAssets.highlight.url;\r\n const glowUrl = this.currentAssets.glow && this.currentAssets.glow.url;\r\n const blurmapUrl = this.currentAssets.blurmap && this.currentAssets.blurmap.url;\r\n const depthImageUrl = this.currentAssets.depthimage && this.currentAssets.depthimage.url;\r\n\r\n let objects = { ...this.currentAssets.objects };\r\n\r\n if (bgUrl && (this.files.includes(bgUrl) || this.local))\r\n promises.push(\r\n readImageFromPCorWeb(makeUrl(this.baseUrl, bgUrl), this.config.saveLocal ? `${this.config.name}/${bgUrl}` : null).then(\r\n img => (this.currentAssets.background.image = img)\r\n )\r\n );\r\n if (bgDimUrl && (this.files.includes(bgDimUrl) || this.local)) {\r\n promises.push(\r\n readImageFromPCorWeb(makeUrl(this.baseUrl, bgDimUrl), this.config.saveLocal ? `${this.config.name}/${bgDimUrl}` : null).then(\r\n img => (this.currentAssets.backgrounddim.image = img)\r\n )\r\n );\r\n }\r\n if (bgPatchUrl && (this.files.includes(bgPatchUrl) || this.local))\r\n promises.push(\r\n this.currentAssets.backgroundpatch.image\r\n ? Promise.resolve()\r\n : readImageFromPCorWeb(makeUrl(this.baseUrl, bgPatchUrl), this.config.saveLocal ? `${this.config.name}/${bgPatchUrl}` : null).then(img => (this.currentAssets.backgroundpatch.image = img))\r\n );\r\n if (bgPatchGreyUrl && (this.files.includes(bgPatchGreyUrl) || this.local))\r\n promises.push(\r\n this.currentAssets.backgroundpatchgrey.image\r\n ? Promise.resolve()\r\n : readImageFromPCorWeb(makeUrl(this.baseUrl, bgPatchGreyUrl), this.config.saveLocal ? `${this.config.name}/${bgPatchGreyUrl}` : null).then(\r\n img => (this.currentAssets.backgroundpatchgrey.image = img)\r\n )\r\n );\r\n if (bgPatchGreyDimUrl && (this.files.includes(bgPatchGreyDimUrl) || this.local))\r\n promises.push(\r\n this.currentAssets.backgroundpatchgreydim.image\r\n ? Promise.resolve()\r\n : readImageFromPCorWeb(makeUrl(this.baseUrl, bgPatchGreyDimUrl), this.config.saveLocal ? `${this.config.name}/${bgPatchGreyDimUrl}` : null).then(\r\n img => (this.currentAssets.backgroundpatchgreydim.image = img)\r\n )\r\n );\r\n if (bgPatchShadowUrl && (this.files.includes(bgPatchShadowUrl) || this.local))\r\n promises.push(\r\n this.currentAssets.backgroundpatchshadow.image\r\n ? Promise.resolve()\r\n : readImageFromPCorWeb(makeUrl(this.baseUrl, bgPatchShadowUrl), this.config.saveLocal ? `${this.config.name}/${bgPatchShadowUrl}` : null).then(\r\n img => (this.currentAssets.backgroundpatchshadow.image = img)\r\n )\r\n );\r\n if (bgPatchShadowDimUrl && (this.files.includes(bgPatchShadowDimUrl) || this.local))\r\n promises.push(\r\n this.currentAssets.backgroundpatchshadowdim.image\r\n ? Promise.resolve()\r\n : readImageFromPCorWeb(makeUrl(this.baseUrl, bgPatchShadowDimUrl), this.config.saveLocal ? `${this.config.name}/${bgPatchShadowDimUrl}` : null).then(\r\n img => (this.currentAssets.backgroundpatchshadowdim.image = img)\r\n )\r\n );\r\n if (maskUrl && (this.files.includes(maskUrl) || this.local || (maskUrl.includes(\"blob\"))))\r\n promises.push(\r\n this.currentAssets.mask.image\r\n ? Promise.resolve()\r\n : readImageFromPCorWeb(maskUrl.includes(\"blob\") ? maskUrl : makeUrl(this.baseUrl, maskUrl), this.config.saveLocal ? `${this.config.name}/${maskUrl}` : null).then(\r\n img => (this.currentAssets.mask.image = img)\r\n )\r\n );\r\n if (shadowUrl && (this.files.includes(shadowUrl) || this.local))\r\n promises.push(\r\n this.currentAssets.shadow.image\r\n ? Promise.resolve()\r\n : readImageFromPCorWeb(makeUrl(this.baseUrl, shadowUrl), this.config.saveLocal ? `${this.config.name}/${shadowUrl}` : null).then(\r\n img => (this.currentAssets.shadow.image = img)\r\n )\r\n );\r\n if (shadowDimUrl && (this.files.includes(shadowDimUrl) || this.local))\r\n promises.push(\r\n this.currentAssets.shadowdim.image\r\n ? Promise.resolve()\r\n : readImageFromPCorWeb(makeUrl(this.baseUrl, shadowDimUrl), this.config.saveLocal ? `${this.config.name}/${shadowDimUrl}` : null).then(\r\n img => (this.currentAssets.shadowdim.image = img)\r\n )\r\n );\r\n if (highlightUrl && (this.files.includes(highlightUrl) || this.local))\r\n promises.push(\r\n this.currentAssets.highlight.image\r\n ? Promise.resolve()\r\n : readImageFromPCorWeb(makeUrl(this.baseUrl, highlightUrl), this.config.saveLocal ? `${this.config.name}/${highlightUrl}` : null).then(\r\n img => (this.currentAssets.highlight.image = img)\r\n )\r\n );\r\n if (glowUrl && (this.files.includes(glowUrl) || this.local))\r\n promises.push(\r\n this.currentAssets.glow.image\r\n ? Promise.resolve()\r\n : readImageFromPCorWeb(makeUrl(this.baseUrl, glowUrl), this.config.saveLocal ? `${this.config.name}/${glowUrl}` : null).then(\r\n img => (this.currentAssets.glow.image = img)\r\n )\r\n );\r\n if (blurmapUrl && (this.files.includes(blurmapUrl) || this.local))\r\n promises.push(\r\n this.currentAssets.blurmap.image\r\n ? Promise.resolve()\r\n : readImageFromPCorWeb(makeUrl(this.baseUrl, blurmapUrl), this.config.saveLocal ? `${this.config.name}/${blurmapUrl}` : null).then(\r\n img => (this.currentAssets.blurmap.image = img)\r\n )\r\n );\r\n if (depthImageUrl && (this.files.includes(depthImageUrl) || this.local))\r\n promises.push(\r\n this.currentAssets.depthimage.image\r\n ? Promise.resolve()\r\n : readImageFromPCorWeb(makeUrl(this.baseUrl, depthImageUrl), this.config.saveLocal ? `${this.config.name}/${depthImageUrl}` : null).then(\r\n img => (this.currentAssets.depthimage.image = img)\r\n )\r\n );\r\n\r\n Object.keys(objects).forEach(object => {\r\n if (\r\n objects[object].object &&\r\n objects[object].object.url &&\r\n (this.files.includes(objects[object].object.url) || this.local)\r\n ) {\r\n promises.push(\r\n this.currentAssets.objects[object].object.image\r\n ? Promise.resolve()\r\n : readImageFromPCorWeb(makeUrl(this.baseUrl, objects[object].object.url), this.config.saveLocal ? `${this.config.name}/${objects[object].object.url}` : null).then(\r\n img => (this.currentAssets.objects[object].object.image = img)\r\n )\r\n );\r\n }\r\n if (\r\n objects[object].objectmask &&\r\n objects[object].objectmask.url &&\r\n (this.files.includes(objects[object].objectmask.url) || this.local)\r\n ) {\r\n promises.push(\r\n this.currentAssets.objects[object].objectmask.image\r\n ? Promise.resolve()\r\n : readImageFromPCorWeb(makeUrl(this.baseUrl, objects[object].objectmask.url), this.config.saveLocal ? `${this.config.name}/${objects[object].objectmask.url}` : null).then(\r\n img => (this.currentAssets.objects[object].objectmask.image = img)\r\n )\r\n );\r\n }\r\n\r\n if (\r\n objects[object].objectshadow &&\r\n objects[object].objectshadow.url &&\r\n (this.files.includes(objects[object].objectshadow.url) || this.local)\r\n ) {\r\n promises.push(\r\n this.currentAssets.objects[object].objectshadow.image\r\n ? Promise.resolve()\r\n : readImageFromPCorWeb(makeUrl(this.baseUrl, objects[object].objectshadow.url), this.config.saveLocal ? `${this.config.name}/${objects[object].objectshadow.url}` : null).then(\r\n img => (this.currentAssets.objects[object].objectshadow.image = img)\r\n )\r\n );\r\n }\r\n\r\n if (\r\n objects[object].patchgrey &&\r\n objects[object].patchgrey.url &&\r\n (this.files.includes(objects[object].patchgrey.url) || this.local)\r\n ) {\r\n promises.push(\r\n this.currentAssets.objects[object].patchgrey.image\r\n ? Promise.resolve()\r\n : readImageFromPCorWeb(makeUrl(this.baseUrl, objects[object].patchgrey.url), this.config.saveLocal ? `${this.config.name}/${objects[object].patchgrey.url}` : null).then(\r\n img => (this.currentAssets.objects[object].patchgrey.image = img)\r\n )\r\n );\r\n }\r\n\r\n if (\r\n objects[object].patchshadow &&\r\n objects[object].patchshadow.url &&\r\n (this.files.includes(objects[object].patchshadow.url) || this.local)\r\n ) {\r\n promises.push(\r\n this.currentAssets.objects[object].patchshadow.image\r\n ? Promise.resolve()\r\n : readImageFromPCorWeb(makeUrl(this.baseUrl, objects[object].patchshadow.url), this.config.saveLocal ? `${this.config.name}/${objects[object].patchshadow.url}` : null).then(\r\n img => (this.currentAssets.objects[object].patchshadow.image = img)\r\n )\r\n );\r\n }\r\n });\r\n\r\n return promises;\r\n }\r\n\r\n\r\n\r\n updateBackground(options = {}) {\r\n const { clear = false, dominantColorHex = null, canvas = this.bgCanvas, retainActiveColors = false } = options;\r\n const { width, height } = this.dimension;\r\n if (options.hasOwnProperty('lightIntensity') && options.lightIntensity !== null) {\r\n this.currentAssets.lightIntensity = options.lightIntensity;\r\n }\r\n\r\n\r\n const bgCtx = canvas.getContext(\"2d\");\r\n\r\n const tempBgCanvas = createCanvas(width, height);\r\n tempBgCanvas.getContext(\"2d\").drawImage(this.bgCanvas, 0, 0, width, height);\r\n\r\n clearCanvas(canvas, width, height);\r\n setCanvasDimensions(canvas, this.dimension, this.dimensionPixels);\r\n if (clear) {\r\n return \"clear\";\r\n }\r\n if (!this.currentAssets.background) return;\r\n\r\n if (this.currentAssets.backgrounddim?.image) {\r\n this.hasDimmer = true;\r\n const bgCtxDrawCanvas = combineDimImage({ image: this.currentAssets.background.image, imagedim: this.currentAssets.backgrounddim.image, width, height, lightIntensity: this.currentAssets.lightIntensity });\r\n bgCtx.drawImage(bgCtxDrawCanvas, 0, 0, width, height);\r\n }\r\n else {\r\n this.hasDimmer = false;\r\n bgCtx.drawImage(this.currentAssets.background.image, 0, 0, width, height);\r\n }\r\n\r\n\r\n\r\n retainActiveColors && bgCtx.drawImage(tempBgCanvas, 0, 0, width, height);\r\n if (\r\n this.currentAssets.backgroundpatch &&\r\n this.currentAssets.backgroundpatch.image &&\r\n dominantColorHex\r\n ) {\r\n this.annotationCanvas = createCanvas(this.dimensionPixels.width, this.dimensionPixels.height);\r\n this.annotationCanvas\r\n .getContext(\"2d\")\r\n .drawImage(this.currentAssets.backgroundpatch.image, 0, 0, this.dimensionPixels.width, this.dimensionPixels.height);\r\n const activeColor = rgbFromHex(dominantColorHex);\r\n const patchCanvas = createCanvas(width, height);\r\n const patchCtx = patchCanvas.getContext(\"2d\");\r\n patchCtx.drawImage(this.currentAssets.backgroundpatch.image, 0, 0, width, height);\r\n let patchData = patchCtx.getImageData(0, 0, width, height);\r\n\r\n if (!this.selectedColorCode) this.selectedColorCode = patchRgb;\r\n for (let i = 0; i < patchData.data.length; i += 4) {\r\n if (\r\n ((patchData.data[i] >= (this.selectedColorCode[0] - 5)) && (patchData.data[i] <= (this.selectedColorCode[0] + 5))) &&\r\n ((patchData.data[i + 1] >= (this.selectedColorCode[1] - 5)) && (patchData.data[i + 1] <= (this.selectedColorCode[1] + 5))) &&\r\n ((patchData.data[i + 2] >= (this.selectedColorCode[2] - 5)) && (patchData.data[i + 2] <= (this.selectedColorCode[2] + 5)))\r\n ) {\r\n patchData.data[i] = activeColor[0];\r\n patchData.data[i + 1] = activeColor[1];\r\n patchData.data[i + 2] = activeColor[2];\r\n }\r\n else {\r\n patchData.data[i] = 128;\r\n patchData.data[i + 1] = 128;\r\n patchData.data[i + 2] = 128;\r\n patchData.data[i + 3] = 0;\r\n }\r\n }\r\n\r\n const sel = this.currentActiveColors.findIndex(\r\n item => item.annotationColor === this.selectedColorCode\r\n );\r\n if (sel === -1) {\r\n this.currentActiveColors.push({\r\n annotationColor: this.selectedColorCode,\r\n dominantColorHex\r\n });\r\n } else\r\n this.currentActiveColors[sel] = {\r\n annotationColor: this.selectedColorCode,\r\n dominantColorHex\r\n };\r\n\r\n patchCtx.putImageData(patchData, 0, 0);\r\n const patchGreyCanvas = createCanvas(width, height);\r\n const patchGreyCtx = patchGreyCanvas.getContext(\"2d\");\r\n if (this.currentAssets.backgroundpatchgrey && this.currentAssets.backgroundpatchgrey.image) {\r\n if (this.currentAssets.backgroundpatchgreydim?.image) {\r\n const patchGreyCtxCanvas = combineDimImage({ image: this.currentAssets.backgroundpatchgrey.image, imagedim: this.currentAssets.backgroundpatchgreydim.image, width, height, lightIntensity: this.currentAssets.lightIntensity });\r\n patchGreyCtx.drawImage(patchGreyCtxCanvas, 0, 0, width, height);\r\n }\r\n else {\r\n patchGreyCtx.drawImage(this.currentAssets.backgroundpatchgrey.image, 0, 0, width, height);\r\n }\r\n\r\n }\r\n else {\r\n bgCtx.globalCompositeOperation = \"overlay\";\r\n }\r\n patchGreyCtx.globalCompositeOperation = \"overlay\";\r\n patchGreyCtx.drawImage(patchCanvas, 0, 0, width, height);\r\n if (\r\n this.currentAssets.backgroundpatchshadow &&\r\n this.currentAssets.backgroundpatchshadow.image\r\n ) {\r\n patchGreyCtx.globalCompositeOperation = \"multiply\";\r\n if (this.currentAssets.backgroundpatchshadowdim?.image) {\r\n const patchGreyShadowCanvas = combineDimImage({ image: this.currentAssets.backgroundpatchshadow.image, imagedim: this.currentAssets.backgroundpatchshadowdim.image, width, height, lightIntensity: this.currentAssets.lightIntensity });\r\n patchGreyCtx.drawImage(patchGreyShadowCanvas, 0, 0, width, height);\r\n } else {\r\n patchGreyCtx.drawImage(this.currentAssets.backgroundpatchshadow.image, 0, 0, width, height);\r\n }\r\n\r\n }\r\n patchGreyCtx.globalCompositeOperation = \"destination-in\";\r\n patchGreyCtx.drawImage(patchCanvas, 0, 0, width, height);\r\n bgCtx.drawImage(patchGreyCanvas, 0, 0, width, height);\r\n\r\n }\r\n else {\r\n this.annotationCanvas = null;\r\n }\r\n return \"successfully updated bg\";\r\n }\r\n async updateCameraShot(shot) {\r\n // console.log(this.config);\r\n // console.log(this.config.scene1);\r\n // console.log(this.config.scene1[this.config.shots[shot]]);\r\n await this.threeView.changeShot({ ...this.config.scene1[shot] });\r\n // await this.threeView.setupCarpet({ fbxUrl: \"rug.fbx\" })\r\n return;\r\n }\r\n async updatethreeCanvas(shot) {\r\n if (!this.config.scenes) return;\r\n const scene = this.config.scenes[0];\r\n const { roomType = defaultRoomType } = this.config;\r\n const sceneConfig = this.config[scene];\r\n\r\n if (this.roomType && (this.roomType !== roomType)) {\r\n switch (this.roomType) {\r\n case roomTypes.ROOMVIEW:\r\n await this.threeView.clearScene();\r\n this.phview.reset();\r\n break;\r\n case roomTypes.ILLUSTRATION:\r\n await this.phview.clearScene();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n // this.threeView.init({\r\n // canvas: this.threeCanvas,\r\n // config: sceneConfig,\r\n // shot: shot,\r\n // dims: this.dimensionPixels,\r\n // resolution: this.resolution,\r\n // roomType,\r\n // baseUrl: this.baseUrl\r\n // });\r\n // this.threeView.clearScene();\r\n // this.phview.clearScene();\r\n switch (roomType) {\r\n // case roomTypes.ILLUSTRATION:\r\n // this.threeView.init({\r\n // canvas: this.threeCanvas,\r\n // config: sceneConfig,\r\n // shot: shot,\r\n // dims: this.dimensionPixels,\r\n // resolution: this.resolution,\r\n // roomType,\r\n // baseUrl: this.baseUrl\r\n // });\r\n // return this.threeView.setup3dObject({\r\n // fbxUrl: makeUrl(this.baseUrl, sceneConfig.modelUrl)\r\n // });\r\n case roomTypes.ROOMVIEW:\r\n this.threeView.init({\r\n canvas: this.threeCanvas,\r\n config: sceneConfig,\r\n shot: shot,\r\n dims: this.dimensionPixels,\r\n resolution: this.resolution,\r\n roomType,\r\n baseUrl: this.baseUrl\r\n });\r\n this.roomType = roomTypes.ROOMVIEW;\r\n return this.threeView.setupSceneObjects();\r\n case roomTypes.ILLUSTRATION:\r\n await this.phview.init({\r\n canvas: this.threeCanvas,\r\n config: sceneConfig,\r\n shot: shot,\r\n dims: this.dimensionPixels,\r\n resolution: this.resolution,\r\n roomType,\r\n baseUrl: this.baseUrl\r\n });\r\n this.roomType = roomTypes.ILLUSTRATION;\r\n return this.phview.setup3dObject({\r\n fbxUrl: makeUrl(this.baseUrl, sceneConfig.modelUrl)\r\n });\r\n\r\n default:\r\n console.warn(\"ROOMVIEW: no roomtype specified\");\r\n break;\r\n }\r\n }\r\n async renderFloor(options = {}) {\r\n if (!this.threeView || (this.roomType !== roomTypes.ROOMVIEW)) {\r\n return;\r\n }\r\n if (!options || !options.path) {\r\n this.threeView.changeFloorVisibility(false)\r\n return;\r\n }\r\n try {\r\n const floorImage = await readImage(options.path)\r\n if (!this.floorCanvas) this.floorCanvas = createCanvas(floorImage.width, floorImage.height);\r\n else {\r\n this.floorCanvas.width = floorImage.width;\r\n this.floorCanvas.height = floorImage.height;\r\n }\r\n this.floorCanvas.getContext(\"2d\").drawImage(floorImage, 0, 0);\r\n this.threeView.setFloorTexture({ ...options, floorCanvas: this.floorCanvas });\r\n } catch (error) {\r\n this.threeView.setFloorTexture();\r\n }\r\n\r\n }\r\n renderDesignFromCustomUrl({ customUrl, physicalWidth, physicalHeight }) {\r\n return new Promise((resolve, reject) => {\r\n readImage(customUrl).then(image => {\r\n const { width, height } = image;\r\n const designCanvas = createCanvas(width, height);\r\n const ctx = designCanvas.getContext('2d')\r\n ctx.drawImage(image, 0, 0)\r\n const normapCanvas = createCanvas(width, height);\r\n const ctxNorm = normapCanvas.getContext(\"2d\")\r\n ctxNorm.fillStyle = \"rgb(127,127,255)\";\r\n ctxNorm.fillRect(0, 0, width, height);\r\n let PhysicalWidth, PhysicalHeight\r\n if (!physicalWidth || !physicalHeight) {\r\n const maxDims = { width: 1200, height: 1500 }\r\n const { width: newWidth, height: newHeight } = resizeKeepingAspect({ width, height }, maxDims, \"fit_inside\")\r\n PhysicalWidth = convertUnit(\"in\", \"ft\", newWidth / 10)\r\n PhysicalHeight = convertUnit(\"in\", \"ft\", newHeight / 10)\r\n } else {\r\n PhysicalWidth = convertUnit(\"cm\", \"ft\", physicalWidth)\r\n PhysicalHeight = convertUnit(\"cm\", \"ft\", physicalHeight)\r\n }\r\n const designDetails = { Width: width, Height: height, PhysicalWidth, PhysicalHeight, Unit: \"ft\" }\r\n const { roomType = roomTypes.ROOMVIEW } = this.config;\r\n switch (roomType) {\r\n case roomTypes.ROOMVIEW:\r\n let textureDrawn = this.threeView.setCarpetTexture({ designDetails, designCanvas, normapCanvas })\r\n if (!textureDrawn) reject(\"Could not draw texture\");\r\n this.updateGizmo();\r\n break;\r\n case roomTypes.ILLUSTRATION:\r\n this.phview.setObjectTexture({\r\n designDetails,\r\n designCanvas: designCanvas\r\n });\r\n break;\r\n }\r\n resolve()\r\n }).catch(err => {\r\n reject(err)\r\n })\r\n })\r\n }\r\n renderDesign({ designDetails, designPath, hash }) {\r\n return new Promise(async (resolve, reject) => {\r\n this.designDetails = designDetails;\r\n const { IsIrregular } = designDetails;\r\n this.designPath = designPath;\r\n const { roomType = roomTypes.ROOMVIEW } = this.config;\r\n const { designScale, canvasSize, renderBounds, offset } = { ...this.config[this.config.scenes[0]], designScale: window.globalCarpetScale };\r\n if (designScale) this.zoom = designScale;\r\n if (window.InterfaceElements.IsJpeg) this.zoom = 1\r\n tileCanvas.init({\r\n tileSize: 256,\r\n zoom: this.zoom,\r\n designDetails,\r\n canvasSize,\r\n renderBounds,\r\n offset\r\n });\r\n\r\n const tileTransparency = this.tileDetails && this.tileDetails[`tileTransparency${this.zoom}`] ? this.tileDetails[`tileTransparency${this.zoom}`] : (IsIrregular ? [] : [1]);\r\n let commonTileProps = {\r\n designPath,\r\n zoom: this.zoom,\r\n designDetails,\r\n hash,\r\n tileTransparency\r\n };\r\n switch (roomType) {\r\n case roomTypes.ROOMVIEW:\r\n this.threeView.setCarpetTexture({\r\n designDetails,\r\n designCanvas: tileCanvas.canvas,\r\n normapCanvas: tileCanvas.canvasNorm\r\n });\r\n this.threeView.setCarpetVisibility(false);\r\n const { DesignColors } = designDetails;\r\n tileCanvas.drawCanvasTiles(\r\n {\r\n ...commonTileProps,\r\n drawNormap:\r\n !DesignColors.every(color => color.PileHeight === DesignColors[0].PileHeight) ||\r\n tileTransparency.length\r\n },\r\n undefined,\r\n () => {\r\n this.threeView.updateMap();\r\n this.threeView.setCarpetVisibility(true);\r\n this.updateGizmo();\r\n\r\n resolve();\r\n }\r\n );\r\n break;\r\n case roomTypes.ILLUSTRATION:\r\n let backrendered, frontrendered;\r\n const resolvethis = () => {\r\n if (frontrendered && backrendered) {\r\n resolve();\r\n }\r\n };\r\n if (this.config[this.config.scenes[0]].surfaces.back) {\r\n let renderBounds =\r\n this.config[this.config.scenes[0]].back &&\r\n this.config[this.config.scenes[0]].back.renderBounds;\r\n if (!renderBounds && this.config[this.config.scenes[0]].surfaces.front)\r\n renderBounds = {\r\n p1: { x: 0, y: 0 },\r\n p2: { x: 1024, y: 1024 }\r\n };\r\n this.phview.setObjectTexture({\r\n designDetails,\r\n designCanvas: this.config[this.config.scenes[0]].surfaces.front ? tileCanvas.canvas : null,\r\n backDesignCanvas: tileCanvas.canvasBack\r\n });\r\n tileCanvas.drawCanvasBackTiles(\r\n {\r\n ...commonTileProps,\r\n renderBounds: renderBounds\r\n },\r\n undefined,\r\n () => {\r\n this.phview.updateMap();\r\n backrendered = true;\r\n resolvethis();\r\n }\r\n );\r\n } else {\r\n backrendered = true;\r\n }\r\n if (this.config[this.config.scenes[0]].surfaces.front) {\r\n const { DesignColors } = designDetails;\r\n tileCanvas.drawCanvasTiles(\r\n {\r\n ...commonTileProps,\r\n drawNormap:\r\n !DesignColors.every(color => color.PileHeight === DesignColors[0].PileHeight) ||\r\n tileTransparency.length\r\n },\r\n undefined,\r\n async () => {\r\n await this.phview.setObjectTexture({\r\n designDetails,\r\n designCanvas: tileCanvas.canvas,\r\n normapCanvas: tileCanvas.canvasNorm\r\n });\r\n this.phview.updateMap();\r\n frontrendered = true;\r\n resolvethis();\r\n }\r\n );\r\n }\r\n else {\r\n frontrendered = true;\r\n resolvethis();\r\n }\r\n\r\n\r\n\r\n\r\n break;\r\n default:\r\n console.warn(\"ROOMVIEW: no roomtype specified\");\r\n break;\r\n }\r\n });\r\n }\r\n\r\n setTileDetails(tileDetails) {\r\n this.tileDetails = tileDetails;\r\n }\r\n updateTiles({ designDetails, updateDesignTiles, updateNormapTiles, hash }) {\r\n if (!this.tileDetails) {\r\n return Promise.resolve();\r\n }\r\n const { roomType = roomTypes.ROOMVIEW } = this.config;\r\n return new Promise((resolve, reject) => {\r\n let colorIndex;\r\n if (updateDesignTiles) colorIndex = updateDesignTiles.colorIndex;\r\n if (updateNormapTiles) colorIndex = updateNormapTiles.colorIndex;\r\n\r\n this.designDetails = designDetails;\r\n\r\n let colorTileData = null;\r\n if (colorIndex && colorIndex !== -1) {\r\n const tileData = this.tileDetails[`colorTileData${this.zoom}`];\r\n colorTileData = tileData[colorIndex].tiles;\r\n } else {\r\n //all tiles\r\n }\r\n const tileTransparency = this.tileDetails[`tileTransparency${this.zoom}`];\r\n\r\n const props = {\r\n tiles: colorTileData,\r\n zoom: this.zoom,\r\n designDetails,\r\n designPath: this.designPath,\r\n hash,\r\n tileTransparency\r\n };\r\n\r\n if (!updateNormapTiles) {\r\n tileCanvas.designTilesUpdated = true;\r\n if (roomType === roomTypes.ROOMVIEW) {\r\n tileCanvas.updateDesignTiles(\r\n props,\r\n () => {\r\n this.threeView.updateMap()\r\n },\r\n () => {\r\n this.threeView.setCarpetTexture({\r\n designDetails,\r\n designCanvas: tileCanvas.canvas,\r\n normapCanvas: tileCanvas.canvasNorm\r\n });\r\n this.threeView.updateMap()\r\n setTimeout(() => {\r\n resolve();\r\n }, 500);\r\n }\r\n );\r\n }\r\n else if (roomType === roomTypes.ILLUSTRATION) {\r\n if (this.savedRoomState && this.savedRoomState[this.config.name]) {\r\n delete this.savedRoomState[this.config.name]\r\n }\r\n tileCanvas.updateVisTiles(\r\n props,\r\n () => {\r\n this.phview.setObjectTexture({\r\n designDetails,\r\n designCanvas: this.config[this.config.scenes[0]].surfaces.front ? tileCanvas.canvas : null,\r\n backDesignCanvas: tileCanvas.canvasBack\r\n });\r\n this.phview.updateMap();\r\n setTimeout(() => {\r\n resolve();\r\n }, 500);\r\n\r\n }\r\n );\r\n }\r\n\r\n } else {\r\n tileCanvas.normapTilesUpdated = true;\r\n tileCanvas.updateNormapTiles(\r\n props,\r\n () => {\r\n this.threeView.updateMap()\r\n },\r\n () => {\r\n if (roomType === roomTypes.ILLUSTRATION) {\r\n this.phview.setObjectTexture({\r\n designDetails,\r\n designCanvas: this.config[this.config.scenes[0]].surfaces.front ? tileCanvas.canvas : null,\r\n backDesignCanvas: tileCanvas.canvasBack\r\n });\r\n this.phview.updateMap();\r\n setTimeout(() => {\r\n resolve();\r\n }, 500);\r\n }\r\n else {\r\n this.threeView.setCarpetTexture({\r\n designDetails,\r\n designCanvas: tileCanvas.canvas,\r\n normapCanvas: tileCanvas.canvasNorm\r\n });\r\n this.threeView.updateMap()\r\n setTimeout(() => {\r\n resolve();\r\n }, 500);\r\n }\r\n }\r\n );\r\n // this.tileCanvas1x.updateNo(props, () => this.render())\r\n }\r\n });\r\n }\r\n updateShadowAssetFromSize(size) {\r\n if (!size || !this.currentAssets.shadow) return Promise.resolve();\r\n const { key } = size;\r\n const shad = this.currentAssets.shadow[key];\r\n if (!shad) return Promise.resolve();\r\n\r\n const setAssets = img => {\r\n this.currentAssets.shadow.image = img;\r\n this.currentAssets.shadow.url = img;\r\n };\r\n if (shad.url && !shad.image) {\r\n return readImage(makeUrl(this.baseUrl, shad.url)).then(img => {\r\n this.currentAssets.shadow[key].image = img;\r\n setAssets(img);\r\n });\r\n } else {\r\n setAssets(shad.image);\r\n return Promise.resolve();\r\n }\r\n }\r\n change3dObjectScale(selectedSize) {\r\n const { roomType = roomTypes.ROOMVIEW } = this.config;\r\n switch (roomType) {\r\n case roomTypes.ILLUSTRATION:\r\n this.threeView.change3dObjectScalePhysical(selectedSize);\r\n this.updateShadowAssetFromSize(selectedSize).then(() => {\r\n this.updateShadow();\r\n });\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n updateMask(options = {}) {\r\n const { clear = false } = options;\r\n const { width, height } = this.dimension;\r\n setCanvasDimensions(this.maskCanvas, this.dimension, this.dimensionPixels);\r\n clearCanvas(this.maskCanvas, width, height);\r\n if (clear) return \"clear\";\r\n\r\n // if (this.currentAssets.maskCanvasData) {\r\n // this.maskCanvas\r\n // .getContext(\"2d\")\r\n // .drawImage(this.currentAssets.maskCanvasData, 0, 0, width, height);\r\n // return;\r\n // }\r\n\r\n if (!(this.currentAssets.mask && this.currentAssets.mask.image)) return;\r\n\r\n const tmpCanvas = createCanvas(width, height);\r\n tmpCanvas.getContext(\"2d\").drawImage(this.bgCanvas, 0, 0, width, height);\r\n // makeMask(tmpCanvas, width, height, this.currentAssets.mask.image);\r\n tmpCanvas.getContext(\"2d\").globalCompositeOperation = \"destination-in\";\r\n tmpCanvas.getContext(\"2d\").drawImage(this.currentAssets.mask.image, 0, 0, width, height);\r\n // this.currentAssets.maskCanvasData = tmpCanvas;\r\n this.maskCanvas.getContext(\"2d\").drawImage(tmpCanvas, 0, 0, width, height);\r\n }\r\n\r\n makeTransitionCanvas({ objects }) {\r\n let transitionCanvas = this.transitionCanvas;\r\n clearCanvas(transitionCanvas, transitionCanvas.width, transitionCanvas.height);\r\n this.blurMatrix = null;\r\n setCanvasDimensions(transitionCanvas, this.dimension, this.dimensionPixels);\r\n const transitionctx = transitionCanvas.getContext(\"2d\");\r\n if (!this.realTimeDynamicRendering && this.savedRoomState[this.config.name]) {\r\n transitionctx.drawImage(\r\n this.savedRoomState[this.config.name],\r\n 0,\r\n 0,\r\n transitionCanvas.width,\r\n transitionCanvas.height\r\n );\r\n return Promise.resolve();\r\n }\r\n transitionctx.drawImage(this.bgCanvas, 0, 0, transitionCanvas.width, transitionCanvas.height);\r\n transitionctx.drawImage(this.threeCanvas, 0, 0, transitionCanvas.width, transitionCanvas.height);\r\n transitionctx.drawImage(this.maskCanvas, 0, 0, transitionCanvas.width, transitionCanvas.height);\r\n transitionctx.drawImage(this.shadowCanvas, 0, 0, transitionCanvas.width, transitionCanvas.height);\r\n Object.keys(objects).forEach(object => {\r\n const index = objects[object].order - 1;\r\n let objectcanvas = this.objCanvasContainer.children[index];\r\n transitionctx.drawImage(objectcanvas, 0, 0, transitionCanvas.width, transitionCanvas.height);\r\n });\r\n if (!this.realTimeDynamicRendering && !this.savedRoomState[this.config.name]) {\r\n const tempCanvas = createCanvas(this.dimension.width, this.dimension.height);\r\n const tCtx = tempCanvas.getContext(\"2d\");\r\n setCanvasDimensions(tempCanvas, this.dimension, this.dimensionPixels);\r\n tCtx.drawImage(transitionCanvas, 0, 0, this.dimension.width, this.dimension.height);\r\n this.savedRoomState[this.config.name] = tempCanvas;\r\n }\r\n return Promise.resolve();\r\n }\r\n async initEffectCanvas() {\r\n return new Promise((resolve) => {\r\n let canvas = document.createElement('canvas');\r\n setCanvasDimensions(canvas, this.dimension, this.dimensionPixels);\r\n setCanvasDimensions(this.effectCanvas, this.dimension, this.dimensionPixels);\r\n // clearCanvas(this.effectCanvas, this.effectCanvas.width, this.effectCanvas.height);\r\n canvas\r\n .getContext(\"2d\")\r\n .drawImage(\r\n this.transitionCanvas,\r\n 0,\r\n 0,\r\n this.transitionCanvas.width,\r\n this.transitionCanvas.height,\r\n 0,\r\n 0,\r\n canvas.width,\r\n canvas.height\r\n );\r\n resolve(canvas);\r\n })\r\n\r\n }\r\n async tiltShift(canvas, tiltShiftFilter) {\r\n\r\n if (!this.currentAssets.depthimage || !this.currentAssets.depthimage.image) return;\r\n let canvasDims = { width: canvas.width, height: canvas.height };\r\n const dims = { width: this.currentAssets.depthimage.image.width, height: this.currentAssets.depthimage.image.height };\r\n if (canvas.width !== this.currentAssets.depthimage.image.width) {\r\n canvasDims = resizeKeepingAspect(canvasDims, dims, \"fit_inside\");\r\n }\r\n const srcCanvas = createCanvas(canvasDims.width, canvasDims.height);\r\n const srcCtx = srcCanvas.getContext('2d');\r\n srcCtx.drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, canvasDims.width, canvasDims.height);\r\n let centerAt = 100;\r\n if (tiltShiftFilter.options.centerAt) {\r\n const depthCanvas = createCanvas(dims.width, dims.height);\r\n const depthCtx = depthCanvas.getContext('2d');\r\n depthCtx.drawImage(this.currentAssets.depthimage.image, 0, 0, dims.width, dims.height);\r\n const centerCoord = { x: tiltShiftFilter.options.centerAt.x * dims.width, y: tiltShiftFilter.options.centerAt.y * dims.height };\r\n centerAt = (depthCtx.getImageData(centerCoord.x, centerCoord.y, 1, 1)).data[0];\r\n }\r\n if (!this.blurMatrix) {\r\n this.blurMatrix = await createBlurMatrix(srcCanvas);\r\n }\r\n let blurImgData = await createBlurImage(\r\n srcCanvas,\r\n this.currentAssets.depthimage.image,\r\n centerAt,\r\n tiltShiftFilter.options.dontBlur,\r\n tiltShiftFilter.options.maxRadius,\r\n this.blurMatrix\r\n );\r\n blurImgData.toBlob(function (blob) {\r\n var url = URL.createObjectURL(blob);\r\n console.log(url);\r\n });\r\n clearCanvas(canvas, canvas.width, canvas.height);\r\n canvas.getContext('2d').drawImage(blurImgData, 0, 0, blurImgData.width, blurImgData.height, 0, 0, canvas.width, canvas.height)\r\n }\r\n renderSavedRoomState() {\r\n if (!this.savedRoomState || !this.savedRoomState[this.config.name]) return false;\r\n setCanvasDimensions(this.transitionCanvas, this.dimension, this.dimensionPixels);\r\n const transitionctx = this.transitionCanvas.getContext(\"2d\");\r\n transitionctx.drawImage(\r\n this.savedRoomState[this.config.name],\r\n 0,\r\n 0,\r\n this.dimension.width,\r\n this.dimension.height\r\n );\r\n\r\n return true;\r\n }\r\n updateCarpetPosition(position) {\r\n this.threeView.setCarpetPositon(position);\r\n this.updateGizmo();\r\n this.updateShadow()\r\n }\r\n updateCarpetRotation(rotation) {\r\n this.threeView.setCarpetRotation(rotation);\r\n this.updateShadow()\r\n }\r\n async updateShadow(options = {}) {\r\n const { clear = false } = options;\r\n clearCanvas(this.shadowCanvas, this.shadowCanvas.width, this.shadowCanvas.height);\r\n if (clear) return \"clear\";\r\n const { width, height } = this.dimension;\r\n if (!width || !height) return;\r\n const tempCanvas = createCanvas(width, height);\r\n const tCtx = tempCanvas.getContext(\"2d\");\r\n setCanvasDimensions(this.shadowCanvas, this.dimension, this.dimensionPixels);\r\n const { roomType = defaultRoomType } = this.config;\r\n tCtx.drawImage(this.bgCanvas, 0, 0, width, height);\r\n tCtx.drawImage(this.threeCanvas, 0, 0, width, height);\r\n tCtx.drawImage(this.maskCanvas, 0, 0, width, height);\r\n // switch (roomType) {\r\n // case roomTypes.ILLUSTRATION:\r\n // this.threeView.render();\r\n // tCtx.drawImage(this.bgCanvas, 0, 0, width, height);\r\n // let strMime = \"image/png\";\r\n // let imgData = this.threeView.renderer.domElement.toDataURL(strMime);\r\n // threeLayer = await readImage(imgData);\r\n // break;\r\n // default:\r\n // threeLayer = this.threeCanvas;\r\n // // console.warn(\"ROOMVIEW: no roomtype specified\");\r\n // break;\r\n // }\r\n\r\n if (this.currentAssets.shadow && this.currentAssets.shadow.image) {\r\n tCtx.globalCompositeOperation = \"multiply\";\r\n if (this.currentAssets.shadowdim?.image) {\r\n const shadowCanvas = combineDimImage({ image: this.currentAssets.shadow.image, imagedim: this.currentAssets.shadowdim.image, width, height, lightIntensity: this.currentAssets.lightIntensity });\r\n tCtx.drawImage(shadowCanvas, 0, 0, width, height);\r\n }\r\n else {\r\n tCtx.drawImage(this.currentAssets.shadow.image, 0, 0, width, height);\r\n }\r\n\r\n }\r\n if (this.currentAssets.highlight && this.currentAssets.highlight.image) {\r\n tCtx.globalCompositeOperation = \"screen\";\r\n tCtx.drawImage(this.currentAssets.highlight.image, 0, 0, width, height);\r\n }\r\n if (this.currentAssets.glow && this.currentAssets.glow.image) {\r\n tCtx.globalCompositeOperation = \"overlay\";\r\n tCtx.drawImage(this.currentAssets.glow.image, 0, 0, width, height);\r\n }\r\n if (this.currentAssets.blurmap && this.currentAssets.blurmap.image) {\r\n tCtx.globalCompositeOperation = \"source-over\";\r\n makeBlur(tempCanvas, width, height, this.currentAssets.blurmap.image);\r\n }\r\n tCtx.globalCompositeOperation = \"destination-in\";\r\n switch (roomType) {\r\n case roomTypes.ROOMVIEW:\r\n tCtx.drawImage(this.threeCanvas, 0, 0, width, height);\r\n break;\r\n default:\r\n\r\n break;\r\n }\r\n this.shadowCanvas.getContext(\"2d\").drawImage(tempCanvas, 0, 0, width, height);\r\n }\r\n\r\n updateObjects(options = {}) {\r\n const { width, height } = this.dimension;\r\n this.objCanvasContainer.style.width = `${this.dimensionPixels.width}px`;\r\n this.objCanvasContainer.style.height = `${this.dimensionPixels.height}px`;\r\n\r\n Object.keys(options).forEach(object => {\r\n const indexindiv = options[object].order - 1;\r\n const ref = this.objCanvasContainer.children[indexindiv];\r\n const refCtx = ref.getContext(\"2d\");\r\n setCanvasDimensions(ref, this.dimension, this.dimensionPixels);\r\n if (!options[object] || !options[object].isobjectinscene) return;\r\n if (\r\n options[object] &&\r\n (options[object].active || options[object].mystic) &&\r\n this.currentAssets.objects[object].object.image\r\n ) {\r\n refCtx.drawImage(this.currentAssets.objects[object].object.image, 0, 0, width, height);\r\n }\r\n\r\n if (options[object] && options[object].active && options[object].active !== \"init\") {\r\n refCtx.drawImage(this.currentAssets.objects[object].patchgrey.image, 0, 0, width, height);\r\n\r\n const patchCanvas = createCanvas(width, height);\r\n const patchCtx = patchCanvas.getContext(\"2d\");\r\n patchCtx.fillStyle = options[object].active;\r\n patchCtx.fillRect(0, 0, width, height);\r\n\r\n patchCtx.globalCompositeOperation = \"destination-in\";\r\n patchCtx.drawImage(this.currentAssets.objects[object].patchgrey.image, 0, 0, width, height);\r\n\r\n refCtx.globalCompositeOperation = \"overlay\";\r\n refCtx.drawImage(patchCanvas, 0, 0, width, height);\r\n\r\n const shadowCanvas = createCanvas(width, height);\r\n const shadowCtx = shadowCanvas.getContext(\"2d\");\r\n shadowCtx.drawImage(\r\n this.currentAssets.objects[object].patchshadow.image,\r\n 0,\r\n 0,\r\n width,\r\n height\r\n );\r\n shadowCtx.globalCompositeOperation = \"destination-in\";\r\n shadowCtx.drawImage(patchCanvas, 0, 0, width, height);\r\n\r\n refCtx.globalCompositeOperation = \"multiply\";\r\n refCtx.drawImage(shadowCanvas, 0, 0, width, height);\r\n }\r\n });\r\n }\r\n\r\n mouseDownTouchStart(e) {\r\n this.updateGizmo();\r\n this.intersectsGizmo = this.findGizmoIntersection(e);\r\n this.prev = { ...e };\r\n this.moved = false;\r\n this.mousedown = true\r\n if (!this.intersectsGizmo) {\r\n const intersectsCarpet = this.threeView.mouseDownTouchStart(e);\r\n this.shadowCleared = false;\r\n if (intersectsCarpet) {\r\n this.updateShadow({ clear: true });\r\n this.shadowCleared = true;\r\n return true;\r\n }\r\n } else {\r\n this.prev = { ...e };\r\n this.updateShadow({ clear: true });\r\n this.shadowCleared = true;\r\n return true;\r\n }\r\n }\r\n mouseDownTouchMove(e) {\r\n if (!this.mousedown) {\r\n const hoveredAtGizmo = this.findGizmoIntersection(e);\r\n return { hoveredAtGizmo }\r\n }\r\n const difference = e.x - this.prev.x;\r\n this.moved = Math.abs(difference) > 10;\r\n if (!this.intersectsGizmo) {\r\n this.threeView.mouseTouchMove(e);\r\n this.updateGizmo();\r\n } else {\r\n this.threeView.rotateCarpet(difference, \"z\");\r\n this.prev = { ...e };\r\n }\r\n return { hoveredAtGizmo: this.intersectsGizmo }\r\n }\r\n mouseDownTouchEnd(e) {\r\n this.mousedown = false;\r\n if (this.shadowCleared) this.updateShadow();\r\n let showColorSelectionBox = null;\r\n if (!this.moved && selectActiveObjectByMouseClick) {\r\n showColorSelectionBox = this.selectColorAnnotation(e)\r\n }\r\n let rotation = null;\r\n let position = null;\r\n const object = this.threeView.getObjectConfig()\r\n if (object) {\r\n if (this.intersectsGizmo) {\r\n rotation = convertArrintoDeg(object.rotation.toArray().slice(0, 3))\r\n } else {\r\n position = object.position\r\n }\r\n }\r\n\r\n return { showColorSelectionBox, rotation, position }\r\n }\r\n selectColorAnnotation(e) {\r\n let showColorSelectionBox = null;\r\n if (!this.annotationCanvas) return null;\r\n\r\n const imgData = this.annotationCanvas.getContext(\"2d\").getImageData(e.x, e.y, 1, 1);\r\n if (!imgData.data.every(data => data === 255 || data === 0))\r\n showColorSelectionBox = this.selectedColorCode = imgData.data.slice(0, 3);\r\n return showColorSelectionBox\r\n }\r\n selectColorCode(colorCode) {\r\n const { r, g, b } = hexToRGB(colorCode)\r\n const color = [r, g, b]\r\n if (color.every(value => value === 0) || color.every(value => value === 255)) return\r\n this.selectedColorCode = color\r\n }\r\n findGizmoIntersection(e) {\r\n const { x, y } = e;\r\n if (!this.inputCanvas) return;\r\n var imgData = this.inputCanvas.getContext(\"2d\").getImageData(x - 10, y - 10, 20, 20);\r\n var ingizmo = false;\r\n for (var i = 0; i < imgData.data.length; i += 4) {\r\n if (imgData.data[i + 3] !== 0) {\r\n ingizmo = true;\r\n break;\r\n }\r\n }\r\n return ingizmo;\r\n }\r\n updateGizmo() {\r\n const { roomType = defaultRoomType } = this.config;\r\n if (roomType !== roomTypes.ROOMVIEW) return;\r\n const diamondHeight = 10;\r\n const context = this.inputCanvas.getContext(\"2d\");\r\n const { width, height } = this.inputCanvas;\r\n if (roomType !== roomTypes.ROOMVIEW) {\r\n context.clearRect(0, 0, width, height);\r\n return;\r\n }\r\n const gizmoCoordinates = this.threeView.getGizmoCordinates();\r\n if (!gizmoCoordinates) return;\r\n let { radX, radY, canvasCenter } = gizmoCoordinates;\r\n const rgb = {\r\n r: 250,\r\n g: 250,\r\n b: 250,\r\n a: 0.8\r\n };\r\n const colorStr = \"rgba(\" + rgb.r + \", \" + rgb.g + \", \" + rgb.b + \", \" + rgb.a + \")\";\r\n var radiusX;\r\n var radiusY;\r\n if (radX > radY) {\r\n radiusX = radX;\r\n radiusY = radY;\r\n } else {\r\n radiusX = radY;\r\n radiusY = radX;\r\n }\r\n // Draw the ellipse\r\n context.strokeStyle = colorStr;\r\n context.fillStyle = colorStr;\r\n context.lineWidth = 1;\r\n context.shadowOffsetX = 0;\r\n context.shadowColor = \"black\";\r\n context.shadowOffsetY = 1;\r\n context.clearRect(0, 0, width, height);\r\n context.beginPath();\r\n context.ellipse(canvasCenter.x, canvasCenter.y, radiusX, radiusY, 0, 0, 2 * Math.PI);\r\n context.stroke();\r\n context.beginPath();\r\n context.moveTo(canvasCenter.x, canvasCenter.y + radiusY - 5);\r\n context.lineTo(canvasCenter.x + diamondHeight, canvasCenter.y + radiusY);\r\n context.lineTo(canvasCenter.x, canvasCenter.y + radiusY + 5);\r\n context.lineTo(canvasCenter.x - diamondHeight, canvasCenter.y + radiusY);\r\n context.fill();\r\n }\r\n resize(newDims) {\r\n if (!this.config.dims) return\r\n this.dimensionPixels = resizeKeepingAspect(this.config.dims, newDims, \"fit_inside\");\r\n if (this.transitionCanvas && newDims.windowsize) setCanvasDimensionsStyle(this.transitionCanvas, this.dimensionPixels);\r\n if (this.effectCanvas) {\r\n setCanvasDimensionsStyle(this.effectCanvas, this.dimensionPixels);\r\n this.blurMatrix = null;\r\n }\r\n const { roomType } = this.config;\r\n switch (roomType) {\r\n case roomTypes.ILLUSTRATION:\r\n if (!this.phview.renderer) return\r\n this.phview.resizeRenderer(this.dimensionPixels);\r\n break;\r\n\r\n default:\r\n if (!this.threeView.renderer) return\r\n this.threeView.resizeRenderer(this.dimensionPixels);\r\n break;\r\n }\r\n setCanvasDimensionsStyle(this.bgCanvas, this.dimensionPixels);\r\n setCanvasDimensionsStyle(this.maskCanvas, this.dimensionPixels);\r\n setCanvasDimensionsStyle(this.shadowCanvas, this.dimensionPixels);\r\n this.inputCanvas.width = this.dimensionPixels.width;\r\n this.inputCanvas.height = this.dimensionPixels.height;\r\n this.objCanvasContainer.style.width = `${this.dimensionPixels.width}px`;\r\n this.objCanvasContainer.style.height = `${this.dimensionPixels.height}px`;\r\n let objectlength = this.objCanvasContainer.children.length;\r\n for (let i = 0; i < objectlength; i++) {\r\n setCanvasDimensionsStyle(this.objCanvasContainer.children[i], this.dimensionPixels);\r\n }\r\n this.updateGizmo();\r\n }\r\n\r\n renderinCanvas() {\r\n const { width: w, height: h } = this.dimensionPixels;\r\n const renderCanvas = createCanvas(w, h);\r\n const renderCtx = renderCanvas.getContext(\"2d\");\r\n renderCtx.drawImage(this.bgCanvas, 0, 0, w, h);\r\n renderCtx.drawImage(this.threeCanvas, 0, 0, w, h);\r\n renderCtx.drawImage(this.maskCanvas, 0, 0, w, h);\r\n renderCtx.drawImage(this.shadowCanvas, 0, 0, w, h);\r\n Array.from(this.objCanvasContainer.children).forEach(item => {\r\n console.log(item.nodeName);\r\n if (item.nodeName === \"CANVAS\") {\r\n renderCtx.drawImage(item, 0, 0, w, h);\r\n }\r\n });\r\n return renderCanvas;\r\n }\r\n downloadRendering(name, mime) {\r\n downloadImageData(this.transitionCanvas, name, \"image/\" + mime);\r\n }\r\n addToLocalForage() {\r\n // localforage.setItem('somekey', 'some value').then(function (value) {\r\n // // Do other things once the value has been saved.\r\n // console.log(value);\r\n // }).catch(function (err) {\r\n // // This code runs if there were any errors\r\n // console.log(err);\r\n // });\r\n }\r\n}\r\n\r\nfunction combineDimImage({ image, imagedim, width, height, lightIntensity }) {\r\n let canvas = createCanvas(width, height);\r\n const ctx = canvas.getContext('2d');\r\n if (lightIntensity !== 0 && lightIntensity && lightIntensity === 100) {\r\n ctx.drawImage(image, 0, 0, width, height);\r\n }\r\n else if (lightIntensity === 0) { ctx.drawImage(imagedim, 0, 0, width, height); }\r\n else {\r\n ctx.drawImage(imagedim, 0, 0, width, height);\r\n ctx.globalAlpha = lightIntensity / 100;\r\n // ctx.globalCompositeOperation = 'copy';\r\n ctx.drawImage(image, 0, 0, width, height);\r\n ctx.globalAlpha = 1.00;\r\n ctx.globalCompositeOperation = 'source-over';\r\n }\r\n return canvas;\r\n}\r\n\r\nfunction makeBlur(canvas, w, h, blurMap) {\r\n const blurCanvas = createCanvas(w, h);\r\n const blurredCanvas = createCanvas(w, h);\r\n const ctx = canvas.getContext(\"2d\");\r\n const blurCtx = blurCanvas.getContext(\"2d\");\r\n const blurredCtx = blurredCanvas.getContext(\"2d\");\r\n blurredCtx.filter = \"blur(6px)\";\r\n blurredCtx.drawImage(canvas, 0, 0, w, h);\r\n blurCtx.drawImage(blurMap, 0, 0, w, h);\r\n let imageData = ctx.getImageData(0, 0, w, h);\r\n let blurData = blurCtx.getImageData(0, 0, w, h);\r\n let blurredData = blurredCtx.getImageData(0, 0, w, h);\r\n for (let i = 0; i < blurData.data.length; i += 4) {\r\n imageData.data[i + 3] = 255 - blurData.data[i];\r\n blurredData.data[i + 3] = blurData.data[i];\r\n }\r\n ctx.putImageData(imageData, 0, 0);\r\n blurredCtx.putImageData(blurredData, 0, 0);\r\n ctx.drawImage(blurredCanvas, 0, 0, w, h);\r\n}\r\nconst setCanvasDimensionsStyle = (canvas, dimensionPixels) => {\r\n const { width: widthPix, height: heightPix } = dimensionPixels;\r\n\r\n canvas.style.width = `${widthPix}px`;\r\n canvas.style.height = `${heightPix}px`;\r\n};\r\nconst setCanvasDimensions = (canvas, dimension, dimensionPixels) => {\r\n const { width, height } = dimension;\r\n const { width: widthPix, height: heightPix } = dimensionPixels;\r\n\r\n canvas.width = width;\r\n canvas.height = height;\r\n canvas.style.width = `${widthPix}px`;\r\n canvas.style.height = `${heightPix}px`;\r\n};\r\nconst normalizeDirNames = files =>\r\n files.map(item => (item.charAt(0) === \"/\" ? item.substring(1) : item));\r\n\r\n\r\nconst readImageFromPCorWeb = async (url, relativeSavePath) => {\r\n // let po = performance.now();\r\n let newUrl = url;\r\n return new Promise(async (resolve, reject) => {\r\n // if (relativeSavePath) newUrl = await saveImageToDisk(url, relativeSavePath);\r\n readImage(newUrl).then(\r\n async (img) => {\r\n // let p1 = performance.now();\r\n resolve(img);\r\n }\r\n )\r\n .catch(() => {\r\n reject();\r\n })\r\n })\r\n}\r\n","import React, { useState, forwardRef } from \"react\";\r\nfunction isTouchEvent(event) {\r\n return event.nativeEvent.type === \"touchstart\" || event.nativeEvent.type === \"touchmove\";\r\n}\r\nconst InputCanvas = (props, ref) => {\r\n const { onStart, onMove, onEnd, zIndex, pointerEvent, trackMouseDown = true, remapCoord, ...otherprops } = props;\r\n const [mouseDown, setMouseDown] = useState(false);\r\n\r\n const handleMouseDown = e => {\r\n const location = getlocation(e, ref.current.getBoundingClientRect());\r\n if (!location) return;\r\n setMouseDown(true);\r\n if (!onStart) return;\r\n onStart(location);\r\n };\r\n\r\n const handleMouseMove = e => {\r\n if (!onMove) return;\r\n if (!trackMouseDown || mouseDown) {\r\n const location = getlocation(e, ref.current.getBoundingClientRect());\r\n if (!location) return;\r\n onMove(location);\r\n }\r\n };\r\n const handleMouseUp = e => {\r\n // if (e.cancelable) {\r\n // e.stopPropagation();\r\n // }\r\n if (mouseDown) {\r\n setMouseDown(false);\r\n const location = getlocation(e, ref.current.getBoundingClientRect());\r\n if (!location) return;\r\n if (onEnd) onEnd(location);\r\n }\r\n };\r\n function getlocation(event, rect) {\r\n const { clientX, clientY } = isTouchEvent(event) ? event.nativeEvent.targetTouches[0] : event;\r\n const { top, left, width, height } = rect;\r\n const xabs = clientX - left;\r\n const yabs = clientY - top;\r\n if (!remapCoord)\r\n return {\r\n x: xabs,\r\n y: yabs\r\n };\r\n\r\n const { width: mapWidth, height: mapHeight } = remapCoord;\r\n const x = (mapWidth * xabs) / width;\r\n const y = (mapHeight * yabs) / height;\r\n return { x, y };\r\n }\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default forwardRef(InputCanvas);\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17 24.364a6.976 6.976 0 1 0 0-13.952 6.976 6.976 0 0 0 0 13.952Zm8.976-6.976a8.976 8.976 0 1 1-17.952 0 8.976 8.976 0 0 1 17.952 0ZM17.61 2a1 1 0 0 1 1 1v2.683a1 1 0 1 1-2 0V3a1 1 0 0 1 1-1Zm0 26.537a1 1 0 0 1 1 1v2.682a1 1 0 1 1-2 0v-2.682a1 1 0 0 1 1-1ZM28.433 5.829a1 1 0 0 1 0 1.414L26.536 9.14a1 1 0 1 1-1.415-1.414L27.02 5.83a1 1 0 0 1 1.414 0Zm-22.866 0a1 1 0 0 0 0 1.414L7.465 9.14a1 1 0 0 0 1.414-1.414L6.982 5.83a1 1 0 0 0-1.415 0Zm22.75 11.22a1 1 0 0 1 1-1H32a1 1 0 1 1 0 2h-2.683a1 1 0 0 1-1-1ZM1 17.049a1 1 0 0 0 1 1h2.683a1 1 0 1 0 0-2H2a1 1 0 0 0-1 1Zm24.363 7.511a1 1 0 0 1 1.414 0l1.897 1.898a1 1 0 0 1-1.414 1.414l-1.897-1.897a1 1 0 0 1 0-1.414ZM5.325 27.872a1 1 0 0 0 1.414 0l1.897-1.897a1 1 0 1 0-1.414-1.414l-1.897 1.897a1 1 0 0 0 0 1.414Z\",\n fill: \"#ADB3C2\"\n});\n\nvar SvgDay = function SvgDay(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 35,\n height: 35,\n viewBox: \"0 0 35 35\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgDay, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Day.aebc03c1.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m6.013 23.039.775-.522-.775.522Zm.594-.664.331-.874-.331.874ZM22.522 6.603l-.877.323.877-.323Zm-.18 4.256c0 6.284-5.092 11.377-11.373 11.377v1.87c7.314 0 13.243-5.931 13.243-13.247h-1.87Zm-.697-3.933c.45 1.224.698 2.549.698 3.933h1.87c0-1.608-.288-3.151-.814-4.58l-1.754.647Zm1.017-.14a11.364 11.364 0 0 1 4.94 9.382h1.869c0-4.535-2.28-8.537-5.75-10.923l-1.06 1.54Zm4.94 9.382c0 6.284-5.093 11.377-11.375 11.377v1.87c7.315 0 13.244-5.931 13.244-13.247H27.6ZM16.226 27.545a11.36 11.36 0 0 1-9.439-5.028l-1.55 1.044a13.23 13.23 0 0 0 10.99 5.853v-1.87Zm-5.258-5.309c-1.421 0-2.78-.26-4.03-.735l-.664 1.748c1.46.554 3.043.857 4.694.857v-1.87Zm-4.181.28a.515.515 0 0 1-.044.62.432.432 0 0 1-.469.113l.663-1.748a1.437 1.437 0 0 0-1.573.373 1.354 1.354 0 0 0-.128 1.687l1.551-1.044ZM23.399 6.28a.432.432 0 0 1-.118.468.515.515 0 0 1-.62.038l1.06-1.54a1.354 1.354 0 0 0-1.689.11 1.44 1.44 0 0 0-.387 1.57l1.754-.646Z\",\n fill: \"#ADB3C2\"\n});\n\nvar SvgNight = function SvgNight(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 35,\n height: 35,\n viewBox: \"0 0 35 35\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgNight, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Night.2fc8502a.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m21.774 12.176-1.003-.26-.24.927.905.313.338-.98Zm1.81 3.266-1.008-.241-.314 1.31 1.347-.032-.025-1.037Zm2.465 1.155-.814.642.464.59.705-.257-.355-.975Zm3.767.134-.424.946.171.077.187.012.066-1.035Zm-2.762 11.07.174 1.022-.174-1.022Zm-18.914.035.18-1.02-.18 1.02Zm-5.1-3.661.905-.508-.036-.064-.045-.058-.823.63Zm-.988-3.356 1.034.083.006-.074-.005-.074-1.035.065Zm2.445-3.912.327.984 1.015-.338-.37-1.004-.972.358Zm7.49-5.732-.582.857 1.711 1.164-.092-2.068-1.036.047Zm10.79 1.26a5.91 5.91 0 0 0 .189-1.482h-2.073c0 .333-.043.656-.122.963l2.007.52Zm1.919 2.365a3.82 3.82 0 0 0-2.584-3.605l-.676 1.96a1.747 1.747 0 0 1 1.187 1.645h2.073Zm-.104.883a3.79 3.79 0 0 0 .104-.883h-2.073c0 .14-.017.273-.047.4l2.016.483Zm-.933-1.278h-.1l.05 2.074.05-.001v-2.073Zm3.205 1.551a4.071 4.071 0 0 0-3.205-1.551v2.073a2 2 0 0 1 1.576.76l1.629-1.282Zm.903-.697a6.05 6.05 0 0 0-2.072.364l.709 1.949a3.978 3.978 0 0 1 1.363-.24V15.26Zm2.472.526a6.04 6.04 0 0 0-2.472-.526v2.074c.582 0 1.132.123 1.625.344l.847-1.892Zm-.49 1.98a2.553 2.553 0 0 1 2.387 2.548h2.074a4.626 4.626 0 0 0-4.328-4.616l-.132 2.069Zm2.387 2.548c0 3.19-2.191 5.943-5.256 6.466l.348 2.044c4.14-.706 6.982-4.39 6.982-8.51h-2.074ZM26.88 26.78c-7.27 1.24-12.463 1.112-18.56.036l-.36 2.042c6.328 1.117 11.76 1.247 19.268-.034l-.348-2.044Zm-18.56.036c-1.905-.336-3.463-1.525-4.375-3.148l-1.808 1.016c1.195 2.125 3.262 3.722 5.823 4.174l.36-2.042ZM1 21.212a5.89 5.89 0 0 0 1.218 3.593l1.646-1.26a3.821 3.821 0 0 1-.79-2.333H1Zm.019-.475a5.962 5.962 0 0 0-.019.475h2.073c0-.104.005-.208.013-.31l-2.067-.165Zm2.068.017a6.93 6.93 0 0 1-.014-.434H1a9 9 0 0 0 .018.564l2.069-.13Zm-.014-.434c0-1.13.733-2.09 1.751-2.43l-.654-1.967A4.635 4.635 0 0 0 1 20.32h2.073Zm.09-5.092c0 .713.127 1.4.36 2.037l1.947-.716a3.82 3.82 0 0 1-.234-1.321H3.162Zm6.01-5.953c-3.308 0-6.01 2.654-6.01 5.953h2.073c0-2.132 1.75-3.88 3.936-3.88V9.275Zm3.398 1.042a6.028 6.028 0 0 0-3.399-1.042v2.073c.832 0 1.6.253 2.233.684l1.166-1.715Zm-1.625.636c0 .09.002.18.006.268l2.072-.093a3.924 3.924 0 0 1-.004-.175h-2.074ZM16.956 5c-3.308 0-6.01 2.654-6.01 5.953h2.074c0-2.132 1.75-3.88 3.936-3.88V5Zm6.01 5.953c0-3.3-2.702-5.953-6.01-5.953v2.073c2.186 0 3.937 1.748 3.937 3.88h2.073Z\",\n fill: \"#ADB3C2\"\n});\n\nvar SvgCloudy = function SvgCloudy(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 35,\n height: 35,\n viewBox: \"0 0 35 35\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCloudy, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Cloudy.83aad7b8.svg\";\nexport { ForwardRef as ReactComponent };","import { useEffect, useState, useRef } from \"react\";\r\nimport AppProvider from \"../api/appProvider\";\r\nimport { CurrencyFormat } from \"../components/pages/EntryPage/defaultflags\";\r\nexport function usePrevious(value) {\r\n const ref = useRef(null);\r\n useEffect(() => {\r\n ref.current = value;\r\n }, [value]);\r\n return ref.current;\r\n}\r\nexport function useIsMounted() {\r\n const isMounted = useRef(true);\r\n\r\n useEffect(() => {\r\n return () => {\r\n isMounted.current = false;\r\n };\r\n }, []);\r\n\r\n return isMounted;\r\n}\r\n\r\nexport const usePriceCalculator = ({ designDetails, fullpath, showPrice }) => {\r\n const [price, setPrice] = useState({ Currency: \"\", Value: \"\" })\r\n\r\n useEffect(() => {\r\n if (!fullpath || !window.flags.hasOrderSheet || !showPrice) return\r\n if (designDetails.OrderProperties)\r\n AppProvider.calculatePriceOfRug({ file: fullpath, props: designDetails }).then(price => {\r\n if (price.Value && price.Value !== \"\") {\r\n const value = getPriceToDisplay(price.Value, window.flags.ordersheet.currencyFormat);\r\n price.Value = value;\r\n setPrice(price)\r\n }\r\n })\r\n }, [designDetails, fullpath, showPrice])\r\n return price\r\n}\r\nconst FormatCurrency = n => {\r\n return n.toFixed(2).replace(/./g, function (c, i, a) {\r\n return i > 0 && c !== \".\" && (a.length - i) % 3 === 0 ? \",\" + c : c;\r\n });\r\n};\r\n\r\nconst FormatCurrencyEU = num => {\r\n return String(num).replace(/[,.]/g, function (x) {\r\n return x === \",\" ? \".\" : \",\";\r\n });\r\n};\r\nconst getPriceToDisplay = (price, currencyFormat) => {\r\n let displayPrice = price;\r\n if (currencyFormat === CurrencyFormat.EU) {\r\n displayPrice = FormatCurrencyEU(price);\r\n } else if (currencyFormat === CurrencyFormat.US) {\r\n displayPrice = FormatCurrency(price);\r\n }\r\n return displayPrice;\r\n};\r\n\r\n\r\nexport function useWindowSize() {\r\n const isClient = typeof window === \"object\";\r\n function getSize() {\r\n return {\r\n width: isClient ? window.innerWidth : undefined,\r\n height: isClient ? window.innerHeight : undefined\r\n };\r\n }\r\n const [windowSize, setWindowSize] = useState(getSize);\r\n useEffect(() => {\r\n if (!isClient) {\r\n return false;\r\n }\r\n function handleResize() {\r\n setWindowSize(getSize());\r\n }\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, [getSize, isClient]); // Empty array ensures that effect is only run on mount and unmount\r\n return windowSize;\r\n}\r\nexport const useIntersect = (options) => {\r\n const [elements, setElements] = useState([]);\r\n const [entries, setEntries] = useState([]);\r\n\r\n const observer = useRef(null);\r\n\r\n const { root, rootMargin, threshold } = options || {}\r\n\r\n useEffect(() => {\r\n if (elements.length) {\r\n console.log('-----CONNECTING OBSERVER------');\r\n observer.current = new IntersectionObserver((ioEntries) => {\r\n setEntries(ioEntries);\r\n }, {\r\n threshold,\r\n root,\r\n rootMargin\r\n });\r\n\r\n elements.forEach(element => {\r\n observer.current.observe(element);\r\n });\r\n }\r\n return () => {\r\n if (observer.current) {\r\n console.log('-----DISCONNECTING OBSERVER------');\r\n observer.current.disconnect();\r\n }\r\n }\r\n }, [elements, root, rootMargin, threshold]);\r\n\r\n return [observer.current, setElements, entries];\r\n};","import React, { useEffect, useState } from \"react\";\r\nimport \"./daynightslider.scss\";\r\nimport { ReactComponent as Day } from \"./Day.svg\";\r\nimport { ReactComponent as Night } from \"./Night.svg\";\r\nimport { ReactComponent as Cloudy } from \"./Cloudy.svg\";\r\nimport AtButton from \"../atoms/AtButton\";\r\nimport classNames from \"classnames\";\r\n// import CircularSlider from \"circular-slider\";\r\nimport CircularSlider from \"react-circular-slider-responsive\";\r\nimport { useWindowSize } from \"../../hooks\";\r\nimport AtIcon from \"../atoms/AtIcon\";\r\n// const Day = () => {\r\n// return (\r\n// \r\n// \r\n// \r\n// \r\n// \r\n// \r\n// \r\n// \r\n// \r\n// \r\n// \r\n\r\n// )\r\n// }\r\n// let eventadded = false;\r\n// const sliderSize = 40;\r\n// const slideroffset = 2;\r\nconst sliderData = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100];\r\nconst DayNightSlider = props => {\r\n const { handledayState, isIdle, lights, hasNightSlider = false, handleNightOpacity, defaultNightOpacity } = props;\r\n const [currentlightindex, setcurrentlightindex] = useState(0);\r\n const [dir, setdir] = useState(1);\r\n const [sliderVal, setsliderVal] = useState(50);\r\n const [lightArr, setlightArr] = useState(null);\r\n const [sliderSize, setsliderSize] = useState({ width: 40, knob: 20 })\r\n\r\n const oscillate = false;\r\n\r\n const windowsize = useWindowSize();\r\n\r\n useEffect(() => {\r\n const rem = 3;\r\n const reminpx = rem * parseFloat(getComputedStyle(document.documentElement).fontSize);\r\n setsliderSize({ width: reminpx, knob: 20 })\r\n }, [windowsize])\r\n\r\n useEffect(() => {\r\n if (lights && lights.length > 0) {\r\n setlightArr([...lights]);\r\n }\r\n }, [lights]);\r\n\r\n const mouseup = () => {\r\n handleNightOpacity(lightArr[currentlightindex], sliderVal);\r\n };\r\n const trackClick = () => {\r\n handleNightOpacity(lightArr[currentlightindex], sliderVal);\r\n };\r\n\r\n // useEffect(() => {\r\n // let el = document.getElementById(\"circular-slider\");\r\n // let el1 = document.getElementById(\"track\");\r\n // if (!el) return;\r\n // // if (el.offsetLeft > sliderSize) {\r\n // // el.style.left = `${sliderSize}px`;\r\n // // }\r\n // // if (el.offsetTop > sliderSize) {\r\n // // el.style.top = `${sliderSize}px`;\r\n // // }\r\n\r\n // if (eventadded) return;\r\n // el.addEventListener(\"mouseup\", mouseup, false);\r\n // // el1.addEventListener(\"click\", trackClick, false);\r\n // eventadded = true;\r\n // return () => {\r\n // el.removeEventListener(\"mouseup\", mouseup, false);\r\n // // el1.addEveremoveEventListenerntListener(\"click\", trackClick, false);\r\n\r\n // eventadded = false;\r\n // };\r\n // }, [sliderVal]);\r\n\r\n // const handlebuttonClick = () => {\r\n // let newindex;\r\n // if (oscillate) {\r\n // newindex = dir > 0 ? currentlightindex + 1 : currentlightindex - 1;\r\n\r\n // if (newindex < 0) newindex = 0;\r\n // if (newindex > lightArr.length - 1) newindex = lightArr.length - 1;\r\n\r\n // if (newindex === 0) setdir(1);\r\n // if (newindex === lightArr.length - 1) setdir(-1);\r\n // } else {\r\n // newindex = currentlightindex + 1;\r\n // if (newindex > lightArr.length - 1) newindex = 0;\r\n // }\r\n\r\n // handledayState(lightArr[newindex]);\r\n\r\n // console.log(newindex);\r\n // setcurrentlightindex(newindex);\r\n // };\r\n\r\n const handleChangeLight = index => {\r\n handledayState(lightArr[index]);\r\n setcurrentlightindex(index);\r\n };\r\n\r\n const sliderOnChange = val => {\r\n if (hasNightSlider && currentlightindex === lightArr.indexOf(\"Night\")) {\r\n setsliderVal(val);\r\n handleNightOpacity(lightArr[currentlightindex], val);\r\n }\r\n };\r\n const dncClassname = active =>\r\n classNames(\"day-state-btn__image\", { \"day-state-btn__image--active\": active });\r\n return (\r\n \r\n {lightArr && lightArr.length > 0 && (\r\n \r\n {lightArr.includes(\"Day\") && (\r\n handleChangeLight(lightArr.indexOf(\"Day\"))}\r\n >
\r\n )}\r\n {lightArr.includes(\"Cloudy\") && (\r\n handleChangeLight(lightArr.indexOf(\"Cloudy\"))}\r\n >\r\n )}\r\n\r\n {lightArr.includes(\"Night\") && (\r\n <>\r\n handleChangeLight(lightArr.indexOf(\"Night\"))}\r\n >\r\n
\r\n sliderOnChange(value)}\r\n knobSize={sliderSize.knob}\r\n >\r\n
\r\n \r\n
\r\n\r\n \r\n {/* \r\n handleChangeLight(lightArr.indexOf(\"Night\"))}\r\n >\r\n
\r\n sliderOnChange(value)}\r\n knobSize={sliderSize.knob}\r\n >\r\n
\r\n \r\n
\r\n\r\n */}\r\n {/* handleChangeLight(lightArr.indexOf(\"Night\"))}>\r\n
\r\n sliderOnChange(value)}\r\n knobSize={sliderSize.knob}\r\n >\r\n
\r\n \r\n
\r\n \r\n {/* */}\r\n {/*
* /} */}\r\n \r\n )}\r\n \r\n )\r\n }\r\n \r\n );\r\n};\r\nexport default DayNightSlider;\r\n","import React from \"react\";\r\nimport { roomTypes, defaultRoomType } from \"./roomviewhelper\";\r\nconst roomConfigState = {\r\n activeshot: \"\",\r\n activelight: \"\",\r\n activeview: \"\",\r\n activedata: {},\r\n teleportpoints: {},\r\n lightswitchpoints: {},\r\n objectstate: {},\r\n roomelements: {},\r\n roomname: \"\",\r\n roomtype: \"\",\r\n hasShadow: null,\r\n mouseControls: false,\r\n realTimeDynamicRendering: true,\r\n lightIntensity: 50,\r\n dims: {},\r\n floorOptions: {\r\n show: false,\r\n floors: [],\r\n activeFloor: {}\r\n },\r\n carpetOptions: {\r\n rotation: [],\r\n position: []\r\n },\r\n showViewpointDialog: false,\r\n customDesignUrl: { url: null, physicalWidCms: null, physicalHGtCms: null }\r\n};\r\nconst SET_FLOOR_OPTIONS = \"SET_FLOOR_OPTIONS\";\r\nconst SET_ACTIVE_FLOOR_OPTION = \"SET_ACTIVE_FLOOR_OPTION\";\r\nconst SET_SHOW_FLOOR_OPTION = \"SET_SHOW_FLOOR_OPTION\";\r\nconst SET_CARPET_OPTION = \"SET_CARPET_OPTION\";\r\nconst SET_ROOM_OPTIONS = \"SET_ROOM_OPTIONS\";\r\nconst SET_SHOW_VP_DIALOG = \"SET_SHOW_VP_DIALOG\";\r\nconst SET_SHOW_COLOR_BOX = \"SET_SHOW_COLOR_BOX\";\r\nconst SET_CUSTOM_DESIGN_URL = \"SET_SET_CUSTOM_DESIGN_URL\";\r\nconst roomConfigActions = {\r\n SET_ACTIVE_FLOOR_OPTION,\r\n SET_SHOW_FLOOR_OPTION,\r\n SET_FLOOR_OPTIONS,\r\n SET_CARPET_OPTION,\r\n SET_ROOM_OPTIONS,\r\n SET_SHOW_VP_DIALOG,\r\n SET_SHOW_COLOR_BOX,\r\n SET_CUSTOM_DESIGN_URL\r\n};\r\nconst roomConfigReducer = (state, action) => {\r\n const { payload } = action;\r\n switch (action.type) {\r\n case \"RESET\":\r\n return { ...roomConfigState };\r\n case \"SET_ROOM_ELEMENTS\":\r\n return !action.precalc\r\n ? setRoomElements({ state, payload: action.payload })\r\n : { ...action.precalc };\r\n case \"INIT_ROOM_STATE\":\r\n return !action.precalc\r\n ? initRoomState({ state, payload: action.payload })\r\n : { ...action.precalc };\r\n case \"CHANGE_SHOT\":\r\n return !action.precalc\r\n ? changeShot({ state, payload: action.payload })\r\n : { ...action.precalc };\r\n case \"CHANGE_LIGHT\":\r\n return !action.precalc\r\n ? changeLight({ state, payload: action.payload })\r\n : { ...action.precalc };\r\n case \"CHANGE_LIGHT_INTENSITY\":\r\n return !action.precalc\r\n ? changeLightIntensity({ state, payload: action.payload })\r\n : { ...action.precalc };\r\n case \"CLEAR_ACTIVE_COLOR\":\r\n return !action.precalc\r\n ? clearActiveColor({ state, payload: action.payload })\r\n : { ...action.precalc };\r\n case \"SET_ACTIVE_COLOR\":\r\n return !action.precalc\r\n ? setActiveColor({ state, payload: action.payload })\r\n : { ...action.precalc };\r\n case \"TOGGLE_MYSTIC\":\r\n return !action.precalc\r\n ? toggleMystic({ state, payload: action.payload })\r\n : { ...action.precalc };\r\n case \"TOGGLE_LIGHT_SWITCH\":\r\n return !action.precalc\r\n ? changeLightSwitch({ state, payload: action.payload })\r\n : { ...action.precalc };\r\n case \"APPLY_TILT_SHIFT\":\r\n return { ...state, tiltShiftFilter: action.payload }\r\n case SET_FLOOR_OPTIONS:\r\n return setFloorOptions(state, payload);\r\n case SET_ACTIVE_FLOOR_OPTION:\r\n return { ...state, floorOptions: { ...state.floorOptions, activeFloor: payload } };\r\n case SET_SHOW_FLOOR_OPTION:\r\n return { ...state, floorOptions: { ...state.floorOptions, show: !!payload } };\r\n case SET_CARPET_OPTION:\r\n return { ...state, carpetOptions: payload };\r\n case SET_ROOM_OPTIONS:\r\n return { ...state, ...payload }\r\n case SET_SHOW_VP_DIALOG:\r\n return { ...state, showViewpointDialog: payload }\r\n case SET_SHOW_COLOR_BOX:\r\n return setShowColorBox({ state, payload });\r\n case SET_CUSTOM_DESIGN_URL:\r\n return { ...state, customDesignUrl: !payload || payload === \"\" ? roomConfigState.customDesignUrl : payload }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst setFloorOptions = (state, payload) => {\r\n const { floorOptions } = state;\r\n const {\r\n floors = floorOptions.floors,\r\n activeFloor = floorOptions.activeFloor,\r\n show = floorOptions.show\r\n } = payload;\r\n return { ...state, floorOptions: { ...state.floorOptions, floors, activeFloor, show } };\r\n};\r\n\r\n// reducer case handlers\r\n\r\nconst setRoomElements = ({ state, payload }) => {\r\n const {\r\n floorOptions = {\r\n show: false,\r\n floors: [],\r\n activeFloor: {}\r\n },\r\n carpetOptions = {\r\n position: [],\r\n rotation: []\r\n }\r\n } = payload\r\n let unsortedobjects = payload.roomElements.objects;\r\n const sortedobjectsarr = Object.entries(unsortedobjects)\r\n .sort((a, b) => a[1].order - b[1].order)\r\n .map(el => {\r\n return { [el[0]]: el[1] };\r\n });\r\n const sortedobjects = sortedobjectsarr.reduce((obj, item) => {\r\n obj[Object.keys(item)[0]] = Object.values(item)[0];\r\n return obj;\r\n }, {});\r\n\r\n const roomtype = payload.roomType && payload.roomType !== \"\" ? payload.roomType : defaultRoomType;\r\n const hasShadow = payload.hasShadow ? payload.hasShadow : false;\r\n const mouseControls = payload.mouseControls ? payload.mouseControls : false;\r\n const realTimeDynamicRendering =\r\n payload.realTimeDynamicRendering !== undefined || payload.realTimeDynamicRendering !== null\r\n ? payload.realTimeDynamicRendering\r\n : true;\r\n const roomelements = { ...payload.roomElements, objects: { ...sortedobjects } }\r\n let newstate = {\r\n ...state,\r\n roomname: payload.name,\r\n pointerinputcanvas: roomtype === roomTypes.ROOMVIEW,\r\n roomtype: roomtype,\r\n hasShadow: hasShadow,\r\n mouseControls: mouseControls,\r\n realTimeDynamicRendering: realTimeDynamicRendering,\r\n dims: { ...payload.dims },\r\n roomelements,\r\n floorOptions,\r\n carpetOptions\r\n };\r\n return initRoomState({ state: newstate, payload });\r\n};\r\n\r\nconst initRoomState = ({ state, payload }) => {\r\n const activeshot = payload.activeshot\r\n ? payload.activeshot\r\n : Object.keys(state.roomelements.shots)[0];\r\n\r\n const hasLights =\r\n Object.keys(state.roomelements.lights) && Object.keys(state.roomelements.lights).length > 0;\r\n const activelight = payload.activelight\r\n ? payload.activelight\r\n : hasLights\r\n ? Object.keys(state.roomelements.lights)[0]\r\n : \"\";\r\n\r\n const activeview = payload.activeview\r\n ? payload.activeview\r\n : hasLights\r\n ? state.roomelements.lights[activelight].views[0]\r\n : \"\";\r\n\r\n const activedata = state.roomelements.shots[activeshot].activeData;\r\n\r\n const teleportpoints = state.roomelements.shots[activeshot].teleportPoints;\r\n\r\n const lightsources = hasLights\r\n ? state.roomelements.lights[activelight].lightSources\r\n : state.roomelements.shots[activeshot].lightSources;\r\n\r\n let alllightswitchpoints = { ...state.roomelements.shots[activeshot].lightSwitchPoints };\r\n let lightswitchpoints = {};\r\n lightsources &&\r\n lightsources.forEach(lightobject => {\r\n if (alllightswitchpoints[lightobject])\r\n lightswitchpoints[lightobject] = alllightswitchpoints[lightobject];\r\n });\r\n\r\n let objectstate = {};\r\n Object.keys(state.roomelements.objects).forEach((object, index) => {\r\n let objectval = state.roomelements.objects[object];\r\n let formattedObj = {};\r\n formattedObj.order = objectval.order;\r\n const isobjectinscene =\r\n state.roomelements.shots[activeshot].objects &&\r\n Object.keys(state.roomelements.shots[activeshot].objects).length > 0 &&\r\n Object.keys(state.roomelements.shots[activeshot].objects).indexOf(object) > -1;\r\n\r\n if (isobjectinscene) {\r\n formattedObj.zindex = state.roomelements.shots[activeshot].objects[object].zindex;\r\n formattedObj.isobjectinscene = true;\r\n } else {\r\n formattedObj.zindex = -1;\r\n formattedObj.isobjectinscene = false;\r\n }\r\n if (objectval.active) formattedObj.active = \"init\";\r\n if (objectval.mystic) formattedObj.mystic = \"show\";\r\n if (lightsources && lightsources.includes(object)) formattedObj.lightSwitch = \"on\";\r\n objectstate[object] = formattedObj;\r\n });\r\n\r\n return {\r\n ...state,\r\n activeshot: activeshot,\r\n activelight: activelight,\r\n activeview: activeview,\r\n activedata: { ...activedata },\r\n teleportpoints: { ...teleportpoints },\r\n lightswitchpoints: { ...lightswitchpoints },\r\n objectstate: { ...objectstate }\r\n };\r\n};\r\n\r\nconst changeShot = ({ state, payload }) => {\r\n const { label, thumbUrl } = payload;\r\n\r\n const activeshot = payload.activeshot;\r\n const activedata = state.roomelements.shots[activeshot].activeData;\r\n const teleportpoints = state.roomelements.shots[activeshot].teleportPoints;\r\n\r\n const lightsources = (state.roomelements.lights && state.activelight) ? state.roomelements.lights[state.activelight].lightSources : null;\r\n let alllightswitchpoints = { ...state.roomelements.shots[activeshot].lightSwitchPoints };\r\n let lightswitchpoints = {};\r\n lightsources &&\r\n lightsources.forEach(lightobject => {\r\n if (alllightswitchpoints[lightobject])\r\n lightswitchpoints[lightobject] = alllightswitchpoints[lightobject];\r\n });\r\n\r\n let objectstate = {};\r\n Object.keys(state.objectstate).forEach((object, index) => {\r\n let formattedObj = { ...state.objectstate[object] };\r\n const isobjectinscene =\r\n state.roomelements.shots[activeshot].objects &&\r\n Object.keys(state.roomelements.shots[activeshot].objects).length > 0 &&\r\n Object.keys(state.roomelements.shots[activeshot].objects).indexOf(object) > -1;\r\n\r\n if (isobjectinscene) {\r\n formattedObj.zindex = state.roomelements.shots[activeshot].objects[object].zindex;\r\n formattedObj.isobjectinscene = true;\r\n } else {\r\n formattedObj.zindex = -1;\r\n formattedObj.isobjectinscene = false;\r\n }\r\n objectstate[object] = formattedObj;\r\n });\r\n\r\n return {\r\n ...state,\r\n activeshot: activeshot,\r\n activedata: { ...activedata },\r\n teleportpoints: { ...teleportpoints },\r\n lightswitchpoints: { ...lightswitchpoints },\r\n objectstate: { ...objectstate }, label, thumbUrl\r\n };\r\n};\r\n\r\nconst changeLightIntensity = ({ state, payload }) => {\r\n return {\r\n ...state,\r\n lightIntensity: payload\r\n };\r\n};\r\n\r\nconst changeLight = ({ state, payload }) => {\r\n const activelight = payload.activelight;\r\n\r\n const lightsources = state.roomelements.lights[activelight].lightSources;\r\n let alllightswitchpoints = { ...state.roomelements.shots[state.activeshot].lightSwitchPoints };\r\n let lightswitchpoints = {};\r\n lightsources &&\r\n lightsources.forEach(lightobject => {\r\n if (alllightswitchpoints[lightobject])\r\n lightswitchpoints[lightobject] = alllightswitchpoints[lightobject];\r\n });\r\n\r\n let objectstate = {};\r\n Object.keys(state.objectstate).forEach((object, index) => {\r\n let formattedObj = { ...state.objectstate[object] };\r\n\r\n if (lightsources && lightsources.includes(object)) formattedObj.lightSwitch = \"on\";\r\n objectstate[object] = formattedObj;\r\n });\r\n\r\n const activeview = calculateView({ state, activelight, objectstate });\r\n\r\n return {\r\n ...state,\r\n activelight: activelight,\r\n activeview: activeview,\r\n lightswitchpoints: { ...lightswitchpoints },\r\n objectstate: { ...objectstate }\r\n };\r\n};\r\n\r\nconst clearActiveColor = ({ state, payload }) => {\r\n const object = payload.object;\r\n return {\r\n ...state,\r\n objectstate: {\r\n ...state.objectstate,\r\n [object]: { ...state.objectstate[object], active: \"init\" }\r\n }\r\n };\r\n};\r\n\r\nconst setActiveColor = ({ state, payload }) => {\r\n const object = payload.object;\r\n const color = payload.color;\r\n return {\r\n ...state,\r\n objectstate: { ...state.objectstate, [object]: { ...state.objectstate[object], active: color } }\r\n };\r\n};\r\nconst setShowColorBox = ({ state, payload }) => {\r\n const { object, isOpen } = payload;\r\n return {\r\n ...state,\r\n objectstate: { ...state.objectstate, [object]: { ...state.objectstate[object], isOpen } }\r\n };\r\n}\r\n\r\nconst toggleMystic = ({ state, payload }) => {\r\n const object = payload.object;\r\n const newmysticval = state.objectstate[object].mystic === \"show\" ? \"hide\" : \"show\";\r\n const newobjectstate = {\r\n ...state.objectstate,\r\n [object]: { ...state.objectstate[object], mystic: newmysticval }\r\n };\r\n const activeview =\r\n state.roomelements.lights[state.activelight].lightSources &&\r\n state.roomelements.lights[state.activelight].lightSources.includes(object)\r\n ? calculateView({ state, objectstate: newobjectstate })\r\n : state.activeview;\r\n return {\r\n ...state,\r\n activeview: activeview,\r\n objectstate: { ...newobjectstate }\r\n };\r\n};\r\n\r\nconst changeLightSwitch = ({ state, payload }) => {\r\n const object = payload.object;\r\n const newlightswitchval = state.objectstate[object].lightSwitch === \"on\" ? \"off\" : \"on\";\r\n const newobjectstate = {\r\n ...state.objectstate,\r\n [object]: { ...state.objectstate[object], lightSwitch: newlightswitchval }\r\n };\r\n const activeview = calculateView({ state, objectstate: newobjectstate });\r\n return {\r\n ...state,\r\n activeview: activeview,\r\n objectstate: { ...newobjectstate }\r\n };\r\n};\r\n\r\n// reducer case handler helpers\r\n\r\nconst calculateView = ({ state, activelight, objectstate }) => {\r\n let light = activelight ? activelight : state.activelight;\r\n let thisobjectstate = objectstate ? objectstate : state.objectstate;\r\n\r\n let newview = state.activeview ? state.activeview : state.roomelements.lights[light].views[0];\r\n\r\n let lightobjectstatus = {};\r\n if (state.roomelements.lights[light].lightSources) {\r\n state.roomelements.lights[light].lightSources.forEach(lightsource => {\r\n lightobjectstatus[lightsource] =\r\n (thisobjectstate[lightsource].mystic\r\n ? thisobjectstate[lightsource].mystic === \"show\"\r\n : true) && thisobjectstate[lightsource].lightSwitch === \"on\"\r\n ? true\r\n : false;\r\n });\r\n\r\n const objectviewdataarr = state.roomelements.lights[light].objectViews.filter(\r\n objectviewconfig => {\r\n let thisistheview = true;\r\n Object.keys(lightobjectstatus).forEach(lightsourceobj => {\r\n let isobjectinthisobjectview = !objectviewconfig[lightsourceobj]\r\n ? false\r\n : objectviewconfig[lightsourceobj];\r\n if (isobjectinthisobjectview !== lightobjectstatus[lightsourceobj]) thisistheview = false;\r\n });\r\n return thisistheview;\r\n }\r\n );\r\n newview = objectviewdataarr.length > 0 ? objectviewdataarr[0].view : newview;\r\n }\r\n newview = state.roomelements.lights[light].views.includes(newview)\r\n ? newview\r\n : state.roomelements.lights[light].views[0];\r\n return newview;\r\n};\r\n\r\nexport const roomConfigReducerHandlers = {\r\n setRoomElements,\r\n initRoomState,\r\n changeShot,\r\n changeLight,\r\n clearActiveColor,\r\n setActiveColor,\r\n toggleMystic,\r\n changeLightSwitch,\r\n calculateView\r\n};\r\n\r\n// dispatch reducer as context\r\n\r\nconst StateContext = React.createContext();\r\nconst DispatchContext = React.createContext();\r\n\r\nfunction RoomConfigStateProvider({ children }) {\r\n const [state, dispatch] = React.useReducer(roomConfigReducer, roomConfigState);\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nfunction useRoomConfigState() {\r\n const context = React.useContext(StateContext);\r\n if (context === undefined) {\r\n throw new Error(\"useRoomConfigState must be used within a RoomConfigStateProvider\");\r\n }\r\n return context;\r\n}\r\nfunction useDispatchRoomConfig() {\r\n const context = React.useContext(DispatchContext);\r\n if (context === undefined) {\r\n throw new Error(\"useDispatchRoomConfig must be used within a RoomConfigStateProvider\");\r\n }\r\n return context;\r\n}\r\nexport { RoomConfigStateProvider, useRoomConfigState, useDispatchRoomConfig, roomConfigActions };\r\n","import React, { useRef, useState } from \"react\";\r\n\r\nconst BlurCircle = props => {\r\n const { onWheel, top, left, handleDontBLurRad, ...otherProps } = props;\r\n\r\n const [dragging, setdragging] = useState(false);\r\n const [circleRadius, setcircleRadius] = useState(100);\r\n const [distance, setdistance] = useState(0);\r\n const blurCircleRef = useRef(null);\r\n\r\n const getxy = e => {\r\n let isTouchEvent = e.nativeEvent.type === \"touchstart\" || e.nativeEvent.type === \"touchmove\";\r\n const { clientX, clientY } = isTouchEvent ? e.nativeEvent.targetTouches[0] : e;\r\n const { top, left } = blurCircleRef.current.getBoundingClientRect();\r\n const xabs = clientX - left;\r\n const yabs = clientY - top;\r\n return { x: xabs, y: yabs };\r\n };\r\n const handleMouseDown = e => {\r\n setdragging(true);\r\n const { x, y } = getxy(e);\r\n const newdistance = Math.round(\r\n Math.sqrt(Math.pow(x - circleRadius, 2) + Math.pow(y - circleRadius, 2))\r\n );\r\n setdistance(newdistance);\r\n };\r\n\r\n const handleMouseMove = e => {\r\n if (!dragging) return;\r\n const { x, y } = getxy(e);\r\n const newdistance = Math.round(\r\n Math.sqrt(Math.pow(x - circleRadius, 2) + Math.pow(y - circleRadius, 2))\r\n );\r\n const delta = newdistance - distance;\r\n setdistance(newdistance);\r\n setcircleRadius(circleRadius + delta / 4);\r\n // console.log(newdistance, circleRadius, delta)\r\n // if (delta > 0) {\r\n // setcircleRadius(circleRadius + (delta/4))\r\n // }\r\n // else {\r\n // setcircleRadius(circleRadius - (delta/4))\r\n // }\r\n };\r\n\r\n const handleMouseUp = e => {\r\n if (dragging) {\r\n handleDontBLurRad((circleRadius * 2) / 15);\r\n setdragging(false);\r\n setdistance(0);\r\n }\r\n };\r\n\r\n return (\r\n \r\n {/*
*/}\r\n
\r\n {/*
*/}\r\n \r\n );\r\n};\r\n\r\nexport default BlurCircle;\r\n","import React, { useState } from \"react\";\r\nimport { useRoomConfigState, useDispatchRoomConfig, roomConfigActions } from \"./roomconfig.reducer\";\r\nimport { MenuDivider, MenuItem, Menu } from \"@blueprintjs/core\";\r\nimport AtButton from \"../atoms/AtButton\";\r\nimport classNames from \"classnames\";\r\nconst IllustrationOptions = props => {\r\n const { roomData, isIdle } = props;\r\n const { config } = roomData;\r\n const { roomType, scene1 } = config;\r\n const dispatchRoomConfig = useDispatchRoomConfig();\r\n const roomConfigState = useRoomConfigState();\r\n const { floorOptions, carpetOptions, roomelements, activeshot, activedata } = roomConfigState;\r\n const [showMenu, setShowMenu] = useState(false);\r\n\r\n const isMultishot = roomelements.shots && Object.entries(roomelements.shots).length > 1;\r\n const hasIlluOptions =\r\n (roomType !== \"illustration\" && floorOptions.floors.length > 0) ||\r\n isMultishot ||\r\n (activedata && Object.keys(activedata).length > 0);\r\n const hasOptions = roomType !== \"illustration\" || hasIlluOptions;\r\n const tooltipProps = { position: \"bottom\" };\r\n\r\n window.dismissMenu = () => {\r\n setShowMenu(false);\r\n };\r\n\r\n const setCarpetOption = carpetOption =>\r\n dispatchRoomConfig({\r\n type: roomConfigActions.SET_CARPET_OPTION,\r\n payload: carpetOption\r\n });\r\n const handleRotation = angle => {\r\n const { rotation } = carpetOptions;\r\n if (!rotation) return;\r\n let newRotation = [rotation[0], rotation[1], rotation[2] + angle];\r\n const newCarpetOptions = { ...carpetOptions, rotation: newRotation };\r\n setCarpetOption(newCarpetOptions);\r\n };\r\n const handleResetRotation = () => {\r\n const newCarpetOptions = { ...carpetOptions, rotation: scene1.surface1.rotation };\r\n setCarpetOption(newCarpetOptions);\r\n };\r\n const handleShowFloor = () =>\r\n dispatchRoomConfig({\r\n type: roomConfigActions.SET_SHOW_FLOOR_OPTION,\r\n payload: true\r\n });\r\n const handleShowViewpoints = () => {\r\n dispatchRoomConfig({\r\n type: roomConfigActions.SET_SHOW_VP_DIALOG,\r\n payload: true\r\n });\r\n };\r\n const handleShowColorBox = object => {\r\n dispatchRoomConfig({\r\n type: roomConfigActions.SET_SHOW_COLOR_BOX,\r\n payload: { object, isOpen: true }\r\n });\r\n };\r\n const handleResetPosition = () => {\r\n const newCarpetOptions = { ...carpetOptions, position: scene1.surface1.position };\r\n setCarpetOption(newCarpetOptions);\r\n };\r\n const handleReset = () => {\r\n const newCarpetOptions = { ...carpetOptions, position: scene1.surface1.position, rotation: scene1.surface1.rotation };\r\n setCarpetOption(newCarpetOptions);\r\n }\r\n const renderFloorOption = path => (\r\n
\r\n {path ? (\r\n \"\"\r\n ) : (\r\n
\r\n )}\r\n Change Floor\r\n
\r\n );\r\n const renderMultishotOption = shot =>
Change Viewpoint
;\r\n const getObjectProps = key => roomelements.objects[key] || {};\r\n\r\n const renderActiveOption = objKey => (\r\n
Change {getObjectProps(objKey).label} Color
\r\n );\r\n\r\n const rotationOptions = (\r\n
\r\n Rotate Carpet\r\n
\r\n handleRotation(-15)}\r\n />\r\n handleRotation(15)}\r\n />\r\n {/* */}\r\n
\r\n
\r\n );\r\n return (\r\n
\r\n {showMenu && (\r\n \r\n {hasIlluOptions && (\r\n <>\r\n \r\n {floorOptions.floors.length > 0 && (\r\n \r\n )}\r\n {isMultishot && (\r\n \r\n )}\r\n {activedata &&\r\n Object.entries(activedata).map(([objKey, objProps]) => (\r\n handleShowColorBox(objKey)}\r\n />\r\n ))}\r\n \r\n )}\r\n {roomType !== \"illustration\" && (\r\n <>\r\n \r\n \r\n {\r\n handleReset();\r\n }}\r\n tooltipProps={tooltipProps}\r\n />\r\n }\r\n />\r\n \r\n )}\r\n \r\n )}\r\n {hasOptions && (\r\n setShowMenu(!showMenu)}\r\n />\r\n )}\r\n
\r\n );\r\n};\r\nexport default IllustrationOptions;\r\n","import React from \"react\";\r\nimport { Overlay, H5, H2 } from \"@blueprintjs/core\";\r\nimport Thumbnail from \"../molecules/Thumbnail\";\r\nimport { useRoomConfigState, useDispatchRoomConfig, roomConfigActions } from \"./roomconfig.reducer\";\r\nimport AtDialog from \"../molecules/AtDialog\";\r\nimport AtIcon from \"../atoms/AtIcon\";\r\n\r\nconst FloorSelectionDialog = props => {\r\n const { floorOptions, handleClose, handleThumbClick, handleReset } = props;\r\n return (\r\n <>\r\n {\r\n handleClose();\r\n }}\r\n className=\" illustration-dialog\"\r\n overlayClassName={floorOptions.show ? \"floordialog-popup-show\" : \"floordialog-popup-hide\"}\r\n size=\"lg\"\r\n // portalContainerId=\"vps-main\"\r\n >\r\n
\r\n
\r\n {/* \"logo\" */}\r\n

Please choose your floor

\r\n
\r\n \r\n
\r\n
\r\n {/* {scenesData &&\r\n scenesData.map((category, i) => {\r\n return ( */}\r\n
\r\n
\r\n
\r\n Royal Mosa\r\n \r\n The floor tiles in this collection are used with the courtesy of{\" \"}\r\n \r\n Royal Mosa\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n {handleReset && (\r\n
\r\n \r\n Original\r\n
\r\n
\r\n )}\r\n {floorOptions.floors.map((floor, i) => {\r\n return (\r\n {\r\n handleThumbClick(floor);\r\n // handleClose();\r\n }}\r\n />\r\n );\r\n })}\r\n
\r\n\r\n {/* {i < scenesData.length - 1 && */}\r\n {/*
*/}\r\n\r\n {/* } */}\r\n
\r\n {/* );\r\n })} */}\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport default FloorSelectionDialog;\r\n","import React from \"react\";\r\nimport { Overlay, H5 } from \"@blueprintjs/core\";\r\nimport Thumbnail from \"../molecules/Thumbnail\";\r\nimport { useRoomConfigState, useDispatchRoomConfig, roomConfigActions } from \"./roomconfig.reducer\";\r\n\r\nconst ViewpointDialog = props => {\r\n const { baseUrl, shots, showViewpointDialog, activeshot,handleChangeShot, handleClose, handleThumbClick } = props\r\n return \r\n
\r\n
Select Viewpoint
\r\n {shots && Object.entries(shots).map(([shotKey, shotProps], i) => (\r\n handleThumbClick(shotKey)}\r\n />\r\n ))}\r\n
\r\n \r\n}\r\n\r\n\r\nexport default ViewpointDialog","import React from \"react\";\r\n\r\nconst getSquareSVG = props => {\r\n const { yarns, handleClick, shape,strokeColor=\"#808080\", ...otherprops } = props;\r\n\r\n return (\r\n \r\n handleClick(e, 0)} x=\"0.5\" y=\"0.5\" width=\"71\" height=\"71\" fill={yarns[0]} stroke={strokeColor} />\r\n handleClick(e, 1)} x=\"0.5\" y=\"0.5\" width=\"53\" height=\"71\" fill={yarns[1]} stroke={strokeColor} />\r\n handleClick(e, 2)} x=\"0.5\" y=\"0.5\" width=\"35\" height=\"71\" fill={yarns[0]} stroke={strokeColor} />\r\n handleClick(e, 3)} x=\"0.5\" y=\"0.5\" width=\"17\" height=\"71\" fill={yarns[1]} stroke={strokeColor} />\r\n \r\n\r\n );\r\n};\r\nconst getCircleSVG = props => {\r\n const { yarns, handleClick, shape,strokeColor=\"#808080\", ...otherprops } = props;\r\n return (\r\n \r\n handleClick(e, 0)}\r\n d=\"M23.4147 3.20228C27.5585 1.48588 32.9288 0.566421 37.5 0.503467V35.5L1.50352 35.5C1.56679 31.0083 2.48204 26.5678 4.20228 22.4147C5.98632 18.1077 8.60123 14.1942 11.8977 10.8977C15.1942 7.60123 19.1077 4.98632 23.4147 3.20228Z\"\r\n fill={yarns[0]}\r\n stroke={strokeColor}\r\n />\r\n handleClick(e, 1)}\r\n d=\"M62.1023 10.8977C68.6419 17.4373 72.3666 26.2656 72.4965 35.5H37.5L37.5 0.503517C46.7344 0.633431 55.5627 4.35811 62.1023 10.8977Z\"\r\n fill={yarns[1]}\r\n stroke={strokeColor}\r\n />\r\n handleClick(e, 2)}\r\n d=\"M62.1113 61.0935L62.1112 61.0934L62.1023 61.1023C55.5627 67.6419 46.7344 71.3666 37.5 71.4965L37.5 35.5L72.5004 35.5C72.5888 44.921 68.8406 54.6942 62.1113 61.0935Z\"\r\n fill={yarns[2]}\r\n stroke={strokeColor}\r\n />\r\n handleClick(e, 3)}\r\n d=\"M11.9065 61.1016L11.8971 61.0917L11.8872 61.0824C5.09906 54.6802 1.35184 44.9081 1.50038 35.4903L37.5 35.4903L37.5 71.4985C28.0793 71.5867 18.306 67.8311 11.9065 61.1016Z\"\r\n fill={yarns[3]}\r\n stroke={strokeColor}\r\n />\r\n \r\n );\r\n};\r\nconst getSVGofShape = props => {\r\n const { yarns, handleClick, shape, ...otherprops } = props;\r\n switch (shape) {\r\n case \"CIRCLE\":\r\n return getCircleSVG(props);\r\n break;\r\n case \"SQUARE\":\r\n return getSquareSVG(props);\r\n break;\r\n default:\r\n return null\r\n }\r\n};\r\n\r\nconst Mixply4 = props => {\r\n const { yarns, handleClick, ...otherprops } = props;\r\n return (\r\n getSVGofShape(props)\r\n );\r\n};\r\n\r\nMixply4.propTypes = {};\r\n\r\nexport default Mixply4;\r\n","import React from \"react\";\r\n\r\nconst getSquareSVG = props => {\r\n const { yarns, handleClick, shape,strokeColor=\"#808080\", ...otherprops } = props;\r\n\r\n return (\r\n \r\n handleClick(e, 0)} x=\"0.5\" y=\"0.5\" width=\"71\" height=\"71\" fill={yarns[0]} stroke={strokeColor} />\r\n handleClick(e, 1)} x=\"0.5\" y=\"0.5\" width=\"47\" height=\"71\" fill={yarns[1]} stroke={strokeColor} />\r\n handleClick(e, 2)} x=\"0.5\" y=\"0.5\" width=\"23\" height=\"71\" fill={yarns[2]} stroke={strokeColor} />\r\n \r\n \r\n );\r\n};\r\nconst getCircleSVG = props => {\r\n const { yarns, handleClick, shape,strokeColor=\"#808080\", ...otherprops } = props;\r\n return (\r\n \r\n handleClick(e, 0)}\r\n d=\"M0.500009 35.9999C0.50001 29.7684 2.14031 23.6467 5.25606 18.25L5.25611 18.2499C8.31649 12.9516 14.0388 7.18504 19.7867 4.4711L37.4625 36.4841L19.7611 67.5604C12.7089 63.8293 8.41557 58.9217 5.25307 53.7447C2.13926 48.3493 0.500007 42.2294 0.500009 35.9999Z\"\r\n fill={yarns[0]}\r\n stroke={strokeColor}\r\n />\r\n handleClick(e, 1)}\r\n d=\"M66.75 18.2603L66.7499 18.2604L66.7439 18.25C63.6281 12.8533 59.1467 8.37187 53.75 5.25609C48.3533 2.14032 42.2316 0.5 36 0.5C29.9329 0.5 23.9699 2.05487 18.6789 5.01246L36.2932 36.5H71.5096C71.5817 30.38 69.9435 23.4974 66.75 18.2603Z\"\r\n fill={yarns[1]}\r\n stroke={strokeColor}\r\n />\r\n handleClick(e, 2)}\r\n d=\"M36 71.5C29.9352 71.5 23.9744 69.9463 18.6848 66.9908L36.2887 36.5H71.4965C71.4112 42.5587 69.7763 48.4977 66.7439 53.75C63.6281 59.1467 59.1467 63.6281 53.75 66.7439C48.3533 69.8597 42.2316 71.5 36 71.5Z\"\r\n fill={yarns[2]}\r\n stroke={strokeColor}\r\n />\r\n \r\n\r\n );\r\n};\r\nconst getSVGofShape = props => {\r\n const { yarns, handleClick, shape, ...otherprops } = props;\r\n switch (shape) {\r\n case \"CIRCLE\":\r\n return getCircleSVG(props);\r\n break;\r\n case \"SQUARE\":\r\n return getSquareSVG(props);\r\n break;\r\n default:\r\n return null\r\n }\r\n};\r\n\r\nconst Mixply3 = props => {\r\n return getSVGofShape(props)\r\n};\r\n\r\nMixply3.propTypes = {};\r\n\r\nexport default Mixply3;\r\n","import React from \"react\";\r\n\r\nconst getSquareSVG = props => {\r\n const { yarns, handleClick, shape, strokeColor=\"#808080\", ...otherprops } = props;\r\n \r\n return (\r\n \r\n handleClick(e, 0)}\r\n x=\"0.5\"\r\n y=\"0.5\"\r\n width=\"71\"\r\n height=\"71\"\r\n fill={yarns[0]}\r\n stroke={strokeColor}\r\n />\r\n handleClick(e, 1)}\r\n x=\"0.5\"\r\n y=\"0.5\"\r\n width=\"35\"\r\n height=\"71\"\r\n fill={yarns[1]}\r\n stroke={strokeColor}\r\n />\r\n \r\n );\r\n};\r\n\r\nconst getCircleSVG = props => {\r\n const { yarns, handleClick, shape, strokeColor=\"#808080\", ...otherprops } = props;\r\n return (\r\n \r\n handleClick(e, 0)}\r\n d=\"M4.20226 22.4147L4.1974 22.4265L4.19194 22.438C2.12953 26.7787 1.39774 32.0208 1.48683 36.5L37 36.5L72.514 36.5C72.6072 31.9172 71.6687 26.5523 69.8041 22.4294L69.8008 22.4221L69.7977 22.4147C68.0137 18.1077 65.3988 14.1942 62.1023 10.8977C58.8058 7.60123 54.8923 4.98632 50.5853 3.20228C46.2782 1.41823 41.6619 0.499997 37 0.499997C32.3381 0.499996 27.7218 1.41823 23.4147 3.20227C19.1077 4.98631 15.1942 7.60122 11.8977 10.8977C8.60123 14.1942 5.9863 18.1077 4.20226 22.4147Z\"\r\n fill={yarns[0]}\r\n stroke={strokeColor}\r\n />\r\n handleClick(e, 1)}\r\n d=\"M4.20228 49.5853L4.19676 49.5719L4.19048 49.559C2.2139 45.4712 1.32362 40.1005 1.47944 35.5L37 35.5L72.5133 35.5C72.6041 40.2099 71.6667 45.5661 69.8063 49.5657L69.8018 49.5754L69.7977 49.5853C68.0137 53.8923 65.3988 57.8058 62.1023 61.1023C58.8058 64.3988 54.8923 67.0137 50.5853 68.7977C46.2782 70.5818 41.6619 71.5 37 71.5C32.3381 71.5 27.7218 70.5818 23.4147 68.7977C19.1077 67.0137 15.1942 64.3988 11.8977 61.1023C8.60124 57.8058 5.98632 53.8923 4.20228 49.5853Z\"\r\n fill={yarns[1]}\r\n stroke={strokeColor}\r\n />\r\n \r\n );\r\n};\r\nconst getSVGofShape = props => {\r\n const { yarns, handleClick, shape, ...otherprops } = props;\r\n switch (shape) {\r\n case \"CIRCLE\":\r\n return getCircleSVG(props);\r\n break;\r\n case \"SQUARE\":\r\n return getSquareSVG(props);\r\n break;\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nconst Mixply2 = props => {\r\n return getSVGofShape(props);\r\n};\r\n\r\nMixply2.propTypes = {};\r\n\r\nexport default Mixply2;\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst getSquareSVG = props => {\r\n const { yarns, handleClick, shape,strokeColor=\"#808080\", ...otherprops } = props;\r\n\r\n return (\r\n \r\n handleClick(e, 0)}\r\n x=\"0.5\"\r\n y=\"0.5\"\r\n width=\"71\"\r\n height=\"71\"\r\n fill={yarns[0]}\r\n stroke={strokeColor}\r\n />\r\n \r\n );\r\n};\r\nconst getCircleSVG = props => {\r\n const { yarns, handleClick, shape,strokeColor=\"#808080\", ...otherprops } = props;\r\n return (\r\n \r\n handleClick(e, 0)} />\r\n \r\n );\r\n};\r\nconst getSVGofShape = props => {\r\n const { shape } = props;\r\n switch (shape) {\r\n case \"CIRCLE\":\r\n return getCircleSVG(props);\r\n break;\r\n case \"SQUARE\":\r\n return getSquareSVG(props);\r\n break;\r\n default:\r\n return null;\r\n }\r\n};\r\nconst Mixply1 = props => {\r\n const { yarns, handleClick, ...otherprops } = props;\r\n return getSVGofShape(props);\r\n};\r\n\r\nMixply1.propTypes = {};\r\n\r\nexport default Mixply1;\r\n","import React from \"react\";\r\nimport Mixply4 from \"./Mixply4\";\r\nimport Mixply3 from \"./Mixply3\";\r\nimport Mixply2 from \"./Mixply2\";\r\nimport Mixply1 from \"./Mixply1\";\r\n\r\nconst hexToRgb = hex => {\r\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return result\r\n ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16)\r\n }\r\n : null;\r\n};\r\nconst isRGBsimilarToGray = colorHex => {\r\n const rgb = hexToRgb(colorHex);\r\n const isRGBsimilar = isSimilar(rgb.r) && isSimilar(rgb.g) && isSimilar(rgb.b);\r\n return isRGBsimilar;\r\n};\r\nconst isSimilar = colorVal => {\r\n const similar = Math.abs(colorVal - 128) < 8;\r\n return similar;\r\n};\r\n\r\nconst CircularColorSVG = props => {\r\n const { yarns } = props;\r\n let strokeColor;\r\n yarns.forEach(element => {\r\n if (isRGBsimilarToGray(element)) {\r\n strokeColor = \"#333\";\r\n }\r\n });\r\n const renderView = () => {\r\n switch (yarns.length) {\r\n case 1:\r\n return ;\r\n case 2:\r\n return ;\r\n case 3:\r\n return ;\r\n case 4:\r\n return ;\r\n default:\r\n return <>;\r\n }\r\n };\r\n return <>{renderView()};\r\n};\r\n\r\nexport default CircularColorSVG;\r\n","import LocalizedStrings from \"react-localization\";\r\nimport deepmerge from \"deepmerge\";\r\n//categories: Design, visualization, Favorites, COlors, copyright,\r\nconst defaultStrings = {\r\n en: {\r\n copyrightText:\r\n \"The designs shown here are copyright of the respective owners. Copying is strictly prohibited. Colors are approximate and need to be verified with actual pom samples before ordering.\",\r\n tagline: \"\",\r\n design: {\r\n designs: \"Designs\",\r\n designViews: \"Design Views\",\r\n designVariations: \"Design Variations\",\r\n design: \"Design\",\r\n original: \"Original\",\r\n showAllDesigns: \"Show all designs\",\r\n searchDesigns: \"Search Designs\"\r\n },\r\n visualization: {\r\n visualizations: \"Visualizations\",\r\n illustrationViews: \"Illustration Views\",\r\n visualization: \"Visualization\",\r\n photorealistic: \"Photorealistic\",\r\n searchVisualizations: \"Search Visualizations\"\r\n },\r\n color: {\r\n colorsAndCons: \"Colors & Construction\",\r\n colorCustomization: \"Color Customization\",\r\n mixedColors: \"Multiple Colors\",\r\n mixedTextures: \"Mixed Textures\",\r\n infotext: \"Final color to be verified with physical pom samples before ordering.\",\r\n basicMaterialTitle: \"Basic\",\r\n mixedConstructionsTitle: \"Mixed Constructions\",\r\n similarColors: \"Similar Colors\",\r\n sortingBySequence: \"By Sequence\",\r\n sortingByName: \"By Name\",\r\n sortingByColor: \"By Color\",\r\n sortingBySharpness: \"By Sharpness\",\r\n sortingByBrightness: \"By Brightness\",\r\n searchColorByName: \"Search for color by name\",\r\n ascending: \"Ascending\",\r\n descending: \"Descending\",\r\n selectColor: \"Select color\"\r\n },\r\n favorite: {\r\n favorites: \"Favorites\",\r\n emptyFavText1: \"It’s a bit lonely here.\",\r\n emptyFavText2:\r\n \"Click the heart on the top right for any design you would like to see here later.\",\r\n addToFavorite: \"Add to Favorites\",\r\n saveAsFavorite: \"Save Design As Favorite\",\r\n dialogText: \"Please provide a name for favorite design\",\r\n designExistsTxt: \"Design already exists, name should be changed to save\"\r\n },\r\n ordersheet: {\r\n placeOrder: \"Order Sheet\",\r\n orderSheet: \"Order Sheet\",\r\n length: \"Length\",\r\n height: \"Height\",\r\n width: \"Width\",\r\n unit: \"Unit\",\r\n quality: \"Quality\",\r\n totalArea: \"Total Area is\",\r\n standardSizes: \"Standard Sizes\",\r\n requestQuote: \"Request Quote\",\r\n saveOrdersheet: \"Save Ordersheet\",\r\n orderEmail: \"Order Email\",\r\n yourName: \"Your Name\",\r\n yourEmailAddress: \"Your email address\",\r\n yourPhoneNumber: \"Your phone number\",\r\n notes: \"Notes\",\r\n sendEmail: \"Send Email\",\r\n orderUnits: {\r\n ft: \"ft\",\r\n cm: \"cm\"\r\n },\r\n emailMessages: {\r\n sending: \"Sending email\",\r\n sent: \"Email sent successfully\",\r\n fail: \"There seems to be an issue. Please try in again in a while\",\r\n incompleteInfo: \"Please enter your name and email address\",\r\n invalidEmail: \"Please check your email address and try again\"\r\n }\r\n },\r\n tools: {\r\n quicklinkTitle: \"Quick Link\",\r\n quicklinkText:\r\n \"With this Quick Link you can access this customized design from your phone or tablet for reviewing and ordering.\",\r\n undo: \"Undo\",\r\n redo: \"Redo\",\r\n reset: \"Reset\",\r\n autoRecolor: \"Autocolor\",\r\n addToCart: \"Add to Cart\",\r\n carving: \"Carving\",\r\n shuffleColors: \"Shuffle Colors\",\r\n mapColors: \"Map Colors\",\r\n showColorPercentage: \"Show Color Percentage\",\r\n hideColorPercentage: \"Hide Color Percentage\",\r\n saveAsImage: \"Save this image\",\r\n publishOnline: \"Publish for online sharing\",\r\n quickShare: \"Quick Share\",\r\n fileManager: \"File Manager\",\r\n downloadCTF: \"Download CTF\",\r\n clearCacheThisDesign: \"Clear Cache for this Design\",\r\n clearCacheAllDesign: \"Clear Cache for all Designs\",\r\n clearCacheTexture: \"Clear texture cache\",\r\n clearCacheColor: \"Clear color cache\",\r\n clearCacheOther: \"Clear other cache\",\r\n stripedDesign: \"Create another Stripe Design\",\r\n saveAndReplaceOnserver: \"Save on Server and Replace\",\r\n saveAndCopyOnServer: \"Save on Server as Copy\",\r\n saveOnServer: \"Save on Server\",\r\n designSaveSuccess: \"Design saved successfully\",\r\n designSaveFail: \"Could not save design\",\r\n save: \"Save\",\r\n cancel: \"Cancel\",\r\n close: \"Close\",\r\n renameDesign: \"Rename Design\"\r\n },\r\n search: {\r\n found: \"Found\",\r\n noDesignFound: {\r\n firstLine: \"Sorry, we could not find a design with that name.\",\r\n secondLine: \"Try a different name or search for Visualizations.\"\r\n },\r\n noVisualizationFound: {\r\n firstLine: \"Sorry, we could not find a visualization with that name.\",\r\n secondLine: \"Try a different name or search for Designs.\"\r\n }\r\n },\r\n designViews: {\r\n deepZoom: \"Top View\",\r\n perspective: \"Interactive Perspective View\",\r\n deepZoomRx: \"Top View RepeatX\"\r\n },\r\n myRoom: {\r\n uploadImage: \"Upload an Image\",\r\n takephoto: \"Take Photo\",\r\n openCam: \"Open Camera\",\r\n capture: \"Capture\",\r\n saveRoomText: \"Give your room a name\"\r\n }\r\n },\r\n fr: {\r\n copyrightText:\r\n \"Les dessins présentés ici sont la propriété de leurs propriétaires respectifs. La copie est strictement interdite. Les couleurs sont approximatives et doivent être vérifiées avec des échantillons de pom réels avant de commander.\",\r\n tagline: \"\",\r\n design: {\r\n designs: \"Dessins\",\r\n designViews: \"Vues de conception\",\r\n designVariations: \"Variations de conception\",\r\n design: \"Conception\",\r\n original: \"Original\",\r\n showAllDesigns: \"Afficher tous les designs\",\r\n searchDesigns: \"Rechercher des designs\"\r\n },\r\n visualization: {\r\n visualizations: \"Visualisations\",\r\n illustrationViews: \"Vues d'illustration\",\r\n visualization: \"Visualisation\",\r\n photorealistic: \"Photoréaliste\",\r\n searchVisualizations: \"Rechercher des visualisations\"\r\n },\r\n color: {\r\n colorsAndCons: \"Couleurs et construction\",\r\n colorCustomization: \"Personnalisation des couleurs\",\r\n mixedColors: \"Couleurs multiples\",\r\n mixedTextures: \"Textures mixtes\",\r\n infotext:\r\n \"La couleur finale doit être vérifiée avec des échantillons de pom physiques avant la commande.\",\r\n basicMaterialTitle: \"De base\",\r\n mixedConstructionsTitle: \"Constructions mixtes\",\r\n similarColors: \"Couleurs similaires\",\r\n sortingBySequence: \"Par séquence\",\r\n sortingByName: \"De nom\",\r\n sortingByColor: \"Par couleur\",\r\n sortingBySharpness: \"Par netteté\",\r\n sortingByBrightness: \"Par luminosité\",\r\n searchColorByName: \"Recherche de couleur par nom\",\r\n ascending: \"Ascendant\",\r\n descending: \"Descendant\",\r\n selectColor: \"Choisissez la couleur\"\r\n },\r\n favorite: {\r\n favorites: \"Favoris\",\r\n emptyFavText1: \"C'est un peu solitaire ici.\",\r\n emptyFavText2:\r\n \"Cliquez sur le cœur en haut à droite pour tout motif que vous aimeriez voir plus tard.\",\r\n addToFavorite: \"Ajouter aux Favoris\",\r\n saveAsFavorite: \"Enregistrer le design comme favori\",\r\n dialogText: \"Veuillez fournir un nom pour le design préféré\",\r\n designExistsTxt: \"Le design existe déjà, le nom doit être changé pour enregistrer\"\r\n },\r\n ordersheet: {\r\n placeOrder: \"Bon de commande\",\r\n orderSheet: \"Bon de commande\",\r\n length: \"Longueur\",\r\n height: \"la taille\",\r\n width: \"Largeur\",\r\n unit: \"Unité\",\r\n quality: \"Qualité\",\r\n totalArea: \"La superficie totale est\",\r\n standardSizes: \"Tailles standard\",\r\n requestQuote: \"Citation requise\",\r\n saveOrdersheet: \"Enregistrer la feuille de commande\",\r\n orderEmail: \"E-mail de commande\",\r\n yourName: \"votre nom\",\r\n yourEmailAddress: \"Votre adresse email\",\r\n yourPhoneNumber: \"Votre numéro de téléphone\",\r\n notes: \"Remarques\",\r\n sendEmail: \"Envoyer un e-mail\",\r\n orderUnits: {\r\n ft: \"pi\",\r\n cm: \"cm\"\r\n }\r\n },\r\n tools: {\r\n quicklinkTitle: \"Lien rapide\",\r\n quicklinkText:\r\n \"Avec ce lien rapide, vous pouvez accéder à cette conception personnalisée à partir de votre téléphone ou tablette pour examen et commande.\",\r\n undo: \"annuler\",\r\n redo: \"Refaire\",\r\n reset: \"Réinitialiser\",\r\n autoRecolor: \"Autocolor\",\r\n addToCart: \"Ajouter au chariot\",\r\n carving: \"Sculpture\",\r\n shuffleColors: \"Mélanger les couleurs\",\r\n mapColors: \"Couleurs de la carte\",\r\n showColorPercentage: \"Afficher le pourcentage de couleur\",\r\n hideColorPercentage: \"Masquer le pourcentage de couleur\",\r\n saveAsImage: \"Sauvegarder cette image\",\r\n publishOnline: \"Publier pour le partage en ligne\",\r\n quickShare: \"Partage rapide\",\r\n fileManager: \"Gestionnaire de fichiers\",\r\n downloadCTF: \"Télécharger CTF\",\r\n clearCacheThisDesign: \"Vider le cache pour cette conception\",\r\n clearCacheAllDesign: \"Vider le cache pour tous les designs\",\r\n clearCacheTexture: \"Effacer le cache de texture\",\r\n clearCacheColor: \"Effacer le cache des couleurs\",\r\n clearCacheOther: \"Effacer l'autre cache\",\r\n stripedDesign: \"Créer un autre motif de rayures\",\r\n saveAndReplaceOnserver: \"Enregistrer sur le Serveur et remplacer\",\r\n saveAndCopyOnServer: \"Enregistrer sur le Serveur en tant que copie\",\r\n saveOnServer: \"Économisez sur le Serveur\",\r\n designSaveSuccess: \"Conception enregistrée avec succès\",\r\n designSaveFail: \"Impossible d'enregistrer le design\",\r\n save: \"sauver\",\r\n cancel: \"Annuler\",\r\n close: \"Fermer\",\r\n renameDesign: \"Renommer le design\"\r\n },\r\n search: {\r\n found: \"A trouvé\",\r\n noDesignFound: {\r\n firstLine: \"Désolé, nous n'avons pas trouvé de design portant ce nom.\",\r\n secondLine: \"Essayez un autre nom ou recherchez des visualisations.\"\r\n },\r\n noVisualizationFound: {\r\n firstLine: \"Désolé, nous n'avons pas trouvé de visualisation portant ce nom.\",\r\n secondLine: \"Essayez un autre nom ou recherchez Designs.\"\r\n }\r\n },\r\n designViews: {\r\n deepZoom: \"Vue de dessus\",\r\n deepZoomRx: \"Vue de dessus RepeatX\"\r\n },\r\n myRoom: {\r\n uploadImage: \"Télécharger une image\",\r\n takephoto: \"Prendre une photo\",\r\n openCam: \"Ouvrir la caméra\",\r\n capture: \"Capturer\",\r\n saveRoomText: \"Donnez un nom à votre chambre\"\r\n },\r\n fit: \"Vue par défaut\"\r\n }\r\n};\r\n\r\nconst strings = new LocalizedStrings(defaultStrings);\r\nexport const initializeStrings = customStrings => {\r\n const obj = defaultStrings;\r\n let newObj = {};\r\n const overwriteMerge = (destinationArray, sourceArray, options) => sourceArray;\r\n // newObj = deepmerge(defaultStrings, customStrings, { arrayMerge: overwriteMerge });\r\n let flag = false;\r\n for (let key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n if (customStrings.hasOwnProperty(key)) {\r\n flag = true;\r\n }\r\n }\r\n }\r\n if (!flag) {\r\n newObj = deepmerge(obj, { en: customStrings }, { arrayMerge: overwriteMerge });\r\n } else {\r\n newObj = deepmerge(obj, customStrings, { arrayMerge: overwriteMerge });\r\n }\r\n strings.setContent(newObj);\r\n //console.log(\"TCL: newObj\", JSON.stringify(defaultStrings));\r\n};\r\nexport default strings;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Popover, Menu, MenuItem, Icon, MenuDivider } from \"@blueprintjs/core\";\r\nimport space from \"color-space\";\r\nimport {\r\n designDetailActions,\r\n useDesignDetailState,\r\n useDispatchDesignDetail\r\n} from \"../../../reducers/designdetails.reducer\";\r\nimport ColorSelectionBox from \"../../organisms/ColorSelectionBox\";\r\nimport AtIcon from \"../../atoms/AtIcon\";\r\nimport CircularColorSVG from \"../../atoms/CircularColorSVG\";\r\nimport strings from \"../../../strings\";\r\nimport { flaginCurrentMode } from \"../../pages/EntryPage/defaultflags\";\r\nimport classNames from \"classnames\";\r\n\r\nconst hextoLum = hex => {\r\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n\r\n var r = parseInt(result[1], 16);\r\n var g = parseInt(result[2], 16);\r\n var b = parseInt(result[3], 16);\r\n const hsl = space.rgb.hsl([r, g, b]);\r\n return hsl[2];\r\n};\r\n\r\nexport const getMaterialName = ind => {\r\n // let materialName;\r\n if (ind < 4) return window.TextureOptions.DefaultTextureNames[ind];\r\n if (ind <= 30) return window.TextureOptions.AdditionalTextureNames[ind - 4];\r\n else {\r\n const custTexIndex = window.TextureOptions.CustomTextureIndices.findIndex(item => item === ind);\r\n return window.TextureOptions.CustomTextureNames[custTexIndex];\r\n }\r\n};\r\nconst getPileheightText = ind => {\r\n if (ind <= 200) {\r\n let closest = window.TextureOptions.DefaultPileheightValues.reduce((prev, curr) =>\r\n Math.abs(curr - ind) < Math.abs(prev - ind) ? curr : prev\r\n );\r\n\r\n const index = window.TextureOptions.DefaultPileheightValues.findIndex(item => item === closest);\r\n return window.TextureOptions.DefaultPileheightNames[index];\r\n } else {\r\n const index = window.TextureOptions.CustomPileheightIndices.findIndex(item => item === ind);\r\n return window.TextureOptions.CustomPileheightNames[index];\r\n }\r\n};\r\nexport const AreaSwatch = React.forwardRef((props, ref) => {\r\n const {\r\n className,\r\n colorIndex,\r\n onColorSelectionClose,\r\n onColorSelectionOpen,\r\n handleClick,\r\n onColorPieClick,\r\n style,\r\n designColor,\r\n colorNumber,\r\n totalKnots,\r\n popoverPosition = \"left\",\r\n showPile = true,\r\n showColorSelection = true,\r\n showColorPercent\r\n } = props;\r\n const dispatchDesignDetails = useDispatchDesignDetail();\r\n const designDetailState = useDesignDetailState();\r\n const { designDetails } = designDetailState;\r\n const { colorAreaSwatch: casFlags, colorSeparatedTexture } = window.flags;\r\n const showPlyDropdown = flaginCurrentMode(window.InterfaceElements.IsAdmin, casFlags.hasMixply); /// window.InterfaceElements.IsAdmin;\r\n const { mixPlyOptions } = casFlags;\r\n let colorPercentShown =\r\n showColorPercent === undefined ? casFlags.showColorPercent : showColorPercent;\r\n\r\n const {\r\n DefaultTextureVisible,\r\n DefaultTextureNames,\r\n AdditionalTextureNames,\r\n CustomTextureNames = [],\r\n CustomTextureIndices,\r\n CustomPileheightIndices,\r\n CustomPileheightNames,\r\n DefaultPileheightNames,\r\n DefaultPileheightValues,\r\n DefaultPileheightVisible\r\n } = window.TextureOptions;\r\n\r\n const origDesignColors = designDetailState.history.length\r\n ? designDetailState.history[0].designDetails.DesignColors\r\n : designDetails.DesignColors;\r\n\r\n const handleColorSwatchClick = (color, e) => {\r\n if (designColor.YarnDetails.length <= 1) {\r\n dispatchDesignDetails({\r\n type: designDetailActions.CHANGE_COLOR,\r\n payload: color\r\n });\r\n } else {\r\n dispatchDesignDetails({\r\n type: designDetailActions.CHANGE_YARN_COLOR,\r\n payload: color\r\n });\r\n }\r\n };\r\n const handleMaterialChange = ({ material, materialName }) => {\r\n dispatchDesignDetails({\r\n type: designDetailActions.CHANGE_COLOR_TEXTURE,\r\n payload: { material, materialName, colorIndex }\r\n });\r\n // if (designColor.YarnMaterials.length <= 1) {\r\n // dispatchDesignDetails({\r\n // type: designDetailActions.CHANGE_COLOR_TEXTURE,\r\n // payload: { material, materialName, colorIndex }\r\n // });\r\n // } else {\r\n // dispatchDesignDetails({\r\n // type: designDetailActions.CHANGE_YARN_MATERIAL,\r\n // payload: { material, materialName, colorIndex }\r\n // });\r\n // }\r\n };\r\n const handleYarnClick = (e, yarnIndex) => {\r\n if (designColor.YarnDetails.length <= 1) {\r\n dispatchDesignDetails({\r\n type: designDetailActions.SELECT_DESIGN_COLOR,\r\n payload: colorIndex\r\n });\r\n if (onColorPieClick) onColorPieClick(designColor, e);\r\n } else {\r\n dispatchDesignDetails({\r\n type: designDetailActions.SELECT_YARN,\r\n payload: { colorIndex, yarnIndex }\r\n });\r\n if (onColorPieClick) onColorPieClick(designColor.YarnDetails[yarnIndex], e);\r\n }\r\n };\r\n const handleMixPly = plyNumber => {\r\n dispatchDesignDetails({\r\n type: designDetailActions.MIX_PLY,\r\n payload: { colorIndex, plyNumber }\r\n });\r\n };\r\n const colorTitle =\r\n designColor.YarnDetails.length <= 1\r\n ? designColor.YarnDetails[0].ColorName\r\n : strings.color.mixedColors;\r\n const shouldShowDropDown = () => {\r\n const materials = designColor.YarnDetails.map(item => item.Material);\r\n return materials.every(item => item === materials[0]);\r\n };\r\n const allMaterialOptionsHidden = () => {\r\n return DefaultTextureVisible.every(item => item === false);\r\n };\r\n // const checkExclusiveMaterial = i => {\r\n // const exclusiveMaterials = window.flags.colorAreaSwatch.exclusiveMatArr;\r\n // const selectedYarnMaterial = designColor.YarnDetails[0].Material;\r\n // if (!exclusiveMaterials.length) return true;\r\n // //check if selected material is exclusive\r\n // let isExclusive =\r\n // exclusiveMaterials.indexOf(selectedYarnMaterial) >\r\n // -1;\r\n\r\n // let showThisMat = true;\r\n // if (isExclusive) {\r\n // //if exclusive, hide other exclusive textures\r\n // showThisMat =\r\n // exclusiveMaterials.indexOf(i) === -1 ||\r\n // selectedYarnMaterial === i;\r\n // }\r\n // return showThisMat;\r\n // };\r\n const checkExclusiveMaterial = i => {\r\n const exclusiveMaterials = casFlags.exclusiveMatArr;\r\n const origColorMaterial = origDesignColors[colorIndex].YarnDetails[0].Material;\r\n let associatedYarnMaterial = parseFloat(designColor.YarnDetails[0].AssociatedMat);\r\n\r\n associatedYarnMaterial =\r\n associatedYarnMaterial || associatedYarnMaterial === 0\r\n ? associatedYarnMaterial\r\n : origColorMaterial;\r\n let showThisMat =\r\n associatedYarnMaterial === i ||\r\n !isAExclusiveMat(exclusiveMaterials, i) ||\r\n isExclusiveWithinArr(exclusiveMaterials, associatedYarnMaterial, i)\r\n ? true\r\n : false;\r\n return showThisMat;\r\n };\r\n const isAExclusiveMat = (exclusiveMaterials, matOption) => {\r\n let isExclusive = exclusiveMaterials.indexOf(matOption) !== -1 ? true : false;\r\n exclusiveMaterials.forEach(element => {\r\n if (Array.isArray(element) && element.indexOf(matOption) !== -1) {\r\n isExclusive = true;\r\n }\r\n });\r\n return isExclusive;\r\n };\r\n\r\n const isExclusiveWithinArr = (exclusiveMaterials, designColorMaterial, matOption) => {\r\n var showThisMat = false;\r\n for (var i = 0; i < exclusiveMaterials.length; i++) {\r\n if (Array.isArray(exclusiveMaterials[i])) {\r\n if (\r\n exclusiveMaterials[i].indexOf(designColorMaterial) !== -1 &&\r\n exclusiveMaterials[i].indexOf(matOption) !== -1\r\n ) {\r\n showThisMat = true;\r\n }\r\n }\r\n }\r\n return showThisMat;\r\n };\r\n\r\n const materialDropdown = (\r\n
\r\n \r\n {(DefaultTextureNames || AdditionalTextureNames) && (\r\n <>\r\n {CustomTextureNames && CustomTextureNames.length > 0 && (\r\n \r\n )}\r\n\r\n {DefaultTextureNames &&\r\n DefaultTextureNames.map(\r\n (textureName, i) =>\r\n DefaultTextureVisible[i] &&\r\n checkExclusiveMaterial(i) && (\r\n {\r\n handleMaterialChange({ material: i, materialName: textureName });\r\n }}\r\n />\r\n )\r\n )}\r\n {AdditionalTextureNames &&\r\n AdditionalTextureNames.map((textureName, i) => (\r\n {\r\n handleMaterialChange({ material: 4 + i, materialName: textureName });\r\n }}\r\n />\r\n ))}\r\n \r\n )}\r\n\r\n {CustomTextureNames && CustomTextureNames.length > 0 && (\r\n <>\r\n \r\n {CustomTextureNames.map((textureName, i) => (\r\n {\r\n handleMaterialChange({\r\n material: CustomTextureIndices[i],\r\n materialName: textureName\r\n });\r\n }}\r\n />\r\n ))}\r\n \r\n )}\r\n \r\n }\r\n minimal\r\n position=\"bottom-left\"\r\n portalContainer={document.getElementById(\"app-main\")}\r\n >\r\n
\r\n {shouldShowDropDown() ? (\r\n <>\r\n {getMaterialName(designColor.YarnDetails[0].Material)}\r\n {!allMaterialOptionsHidden() && }\r\n \r\n ) : (\r\n {strings.color.mixedTextures}\r\n )}\r\n
\r\n \r\n
\r\n );\r\n return (\r\n \r\n {colorNumber ? colorNumber : colorIndex + 1}\r\n }\r\n minimal\r\n position={popoverPosition}\r\n portalContainer={document.getElementById(\"app-main\")}\r\n boundary=\"viewport\"\r\n onClose={onColorSelectionClose}\r\n onOpened={onColorSelectionOpen}\r\n disabled={!showColorSelection}\r\n captureDismiss\r\n >\r\n
\r\n item.Color)}\r\n handleClick={handleYarnClick}\r\n shape={casFlags.shape}\r\n />\r\n\r\n {totalKnots && (\r\n \r\n {((designColor.Knots / totalKnots) * 100).toFixed(1)}%\r\n \r\n )}\r\n
\r\n \r\n\r\n
\r\n {designColor && (\r\n \r\n {mixPlyOptions.map(plyOption => (\r\n handleMixPly(plyOption.ply)}\r\n text={plyOption.text}\r\n >\r\n ))}\r\n \r\n }\r\n >\r\n
\r\n \r\n {colorTitle}\r\n \r\n {designColor.Carving && }\r\n {showPlyDropdown && (\r\n \r\n )}\r\n
\r\n \r\n )}\r\n\r\n {colorSeparatedTexture && (\r\n <>\r\n {materialDropdown}\r\n {showPile && (\r\n
\r\n \r\n {DefaultPileheightNames && DefaultPileheightNames.length > 0 && (\r\n <>\r\n {CustomPileheightNames && CustomPileheightNames.length > 0 && (\r\n \r\n )}\r\n\r\n {DefaultPileheightNames.map(\r\n (pileHeightText, i) =>\r\n (!DefaultPileheightVisible || DefaultPileheightVisible[i]) && (\r\n {\r\n dispatchDesignDetails({\r\n type: designDetailActions.CHANGE_PILE,\r\n payload: {\r\n pileHeight: DefaultPileheightValues[i],\r\n colorIndex\r\n }\r\n });\r\n }}\r\n />\r\n )\r\n )}\r\n \r\n )}\r\n {CustomPileheightNames && CustomPileheightNames.length > 0 && (\r\n <>\r\n \r\n {CustomPileheightNames.map((pileHeightText, i) => (\r\n {\r\n dispatchDesignDetails({\r\n type: designDetailActions.CHANGE_PILE,\r\n payload: { pileHeight: CustomPileheightIndices[i], colorIndex }\r\n });\r\n }}\r\n />\r\n ))}\r\n \r\n )}\r\n \r\n }\r\n minimal\r\n position=\"bottom-left\"\r\n portalContainer={document.getElementById(\"app-main\")}\r\n >\r\n
\r\n \r\n {getPileheightText(designColor.PileHeight)}\r\n \r\n \r\n
\r\n \r\n
\r\n )}\r\n \r\n )}\r\n
\r\n \r\n );\r\n});\r\n","import React from \"react\";\r\nimport AtIcon from \"../../atoms/AtIcon\";\r\nimport CircularColorSVG from \"../../atoms/CircularColorSVG\";\r\nimport Mixply1 from \"../../atoms/CircularColorSVG/Mixply1\";\r\nimport { Popover, Menu, MenuItem, Icon } from \"@blueprintjs/core\";\r\nimport {\r\n useDispatchDesignDetail,\r\n designDetailActions\r\n} from \"../../../reducers/designdetails.reducer\";\r\nimport { getMaterialName } from \"./index\";\r\nexport const NestedAreaSwatch = props => {\r\n const { className, colorIndex, handleClick, style, designColor, colorNumber, yarnIndex } = props;\r\n const dispatchDesignDetails = useDispatchDesignDetail();\r\n const currentYarn = designColor.YarnDetails[yarnIndex];\r\n const { colorAreaSwatch: casFlags } = window.flags;\r\n const { DefaultTextureVisible, DefaultTextureNames } = window.TextureOptions;\r\n const handleyarnMaterialChange = ({ material, materialName }) => {\r\n dispatchDesignDetails({\r\n type: designDetailActions.CHANGE_YARN_MATERIAL,\r\n payload: { material, materialName, colorIndex }\r\n });\r\n };\r\n const shouldShowDropdown = designColor.YarnDetails.map(item => item.Material).reduce(\r\n (prev, current) => current === 0 || current === 1\r\n );\r\n return (\r\n
\r\n {colorNumber ? colorNumber : colorIndex + 1}\r\n \r\n \r\n console.log(\"mixPly color clicked\")}\r\n shape={casFlags.shape}\r\n />\r\n
\r\n\r\n
\r\n {designColor && (\r\n
\r\n {currentYarn.ColorName}\r\n {designColor.Carving && }\r\n
\r\n )}\r\n\r\n
\r\n \r\n {DefaultTextureNames &&\r\n DefaultTextureNames.slice(0, 2).map(\r\n (textureName, i) =>\r\n DefaultTextureVisible[i] && (\r\n {\r\n handleyarnMaterialChange({ material: i, materialName: textureName });\r\n }}\r\n />\r\n )\r\n )}\r\n \r\n }\r\n minimal\r\n position=\"bottom-left\"\r\n portalContainer={document.getElementById(\"app-main\")}\r\n >\r\n
\r\n {getMaterialName(currentYarn.Material)}\r\n {shouldShowDropdown && }\r\n
\r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n","import React, { useRef } from \"react\";\r\nimport { useMount } from \"react-use\";\r\nimport { overlayTextureinCanvas } from \"../../../utils/utils\";\r\n\r\nconst ColorPreview = props => {\r\n const { style, colorName, color, material, colorTextures, renderTexturedPreview } = props;\r\n const canvasRef = useRef();\r\n useMount(() => {\r\n // console.log(color, colorName);\r\n const ctx = canvasRef.current.getContext(\"2d\");\r\n ctx.fillStyle = color;\r\n ctx.fillRect(0, 0, 160, 160);\r\n if (!renderTexturedPreview) return;\r\n const img = colorTextures.find(item => item.index === material);\r\n if (img && img.image)\r\n overlayTextureinCanvas({\r\n image: img.image,\r\n color,\r\n canvasSize: 160,\r\n canvas: canvasRef.current\r\n });\r\n });\r\n return (\r\n
\r\n \r\n
{colorName}
\r\n
\r\n );\r\n};\r\n\r\nexport default ColorPreview;\r\n","import React, { useEffect, useState, useRef } from \"react\";\r\nimport { isMobileDevice } from \"../../../utils/utils\";\r\nimport classNames from \"classnames\";\r\n\r\nconst isInViewPort = elem => {\r\n const bounding = elem.getBoundingClientRect();\r\n const parent = elem.parentElement;\r\n const { left, top, bottom, right } = parent.getBoundingClientRect();\r\n return (\r\n bounding.top + bounding.height >= top &&\r\n bounding.left + bounding.width >= left &&\r\n bounding.bottom - bounding.height <= bottom &&\r\n bounding.right - bounding.width <= right\r\n );\r\n};\r\nconst SwatchBox = props => {\r\n const { swatchSize, colorRow, onColorSwatchClick, active, handleHover, swatchSpace } = props;\r\n const disabledSwatch = colorRow.ColorName.toLowerCase() === \"_blank\";\r\n const { showColorName } = window.flags.colorSelectionBox;\r\n const [hover, setHover] = useState(null);\r\n\r\n // const [scrollTo, setScrollTo] = useState(true);\r\n const ref = useRef(null);\r\n useEffect(() => {\r\n const props = { block: \"center\", inline: \"center\" };\r\n // const props = {};\r\n const isInVP = isInViewPort(ref.current);\r\n if (active && !isInVP) ref.current.scrollIntoView(props);\r\n }, [ref, active]);\r\n useEffect(() => {\r\n if (!ref.current || !handleHover) return;\r\n if (hover === true && !isMobileDevice) handleHover(ref.current);\r\n if (hover === false) handleHover(null);\r\n }, [hover]); // eslint-disable-line\r\n return (\r\n !disabledSwatch && setHover(true)}\r\n onMouseOver={() => !disabledSwatch && setHover(true)}\r\n onMouseLeave={() => !disabledSwatch && setHover(false)}\r\n ref={ref}\r\n style={{\r\n margin: `${swatchSpace}rem`,\r\n width: `${swatchSize}rem`,\r\n height: `${swatchSize}rem`,\r\n backgroundColor: `${!disabledSwatch ? colorRow.Color : \"transparent\"}`\r\n }}\r\n onClick={e => {\r\n // setScrollTo(false);\r\n if (onColorSwatchClick) onColorSwatchClick(e);\r\n }}\r\n className={classNames(\"color-swatch\", { \"color-swatch--disabled\": disabledSwatch, active })}\r\n >\r\n {showColorName && {colorRow.ColorName}}\r\n \r\n );\r\n};\r\n\r\nexport default SwatchBox;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { calculateColorDelta, hexToRGB } from \"../../../utils/colorutils\";\r\nimport strings from \"../../../strings\";\r\nimport { H6 } from \"@blueprintjs/core\";\r\nimport SwatchBox from \"./SwatchBox\";\r\n\r\nconst SimilarColors = props => {\r\n const { activeColor, colorList, onColorSwatchClick, numColors = 5 } = props;\r\n const [similarColors, setSimilarColors] = useState(null);\r\n useEffect(() => {\r\n if (!activeColor) return;\r\n let color = activeColor;\r\n if (!activeColor.R || !activeColor.G || !activeColor.B) {\r\n const { r = 0, g = 0, b = 0 } = hexToRGB(activeColor.Color);\r\n activeColor.R = r;\r\n activeColor.G = g;\r\n activeColor.B = b;\r\n }\r\n const deltaArr = colorList.map(item => {\r\n return { ...item, delta: calculateColorDelta(item, color) };\r\n });\r\n setSimilarColors(deltaArr.sort((a, b) => b.delta - a.delta).slice(1, 1 + numColors));\r\n }, [activeColor, colorList, numColors]);\r\n\r\n return (\r\n similarColors && (\r\n
\r\n
{strings.color.similarColors}
\r\n
\r\n {similarColors.map((color, index) => (\r\n {\r\n onColorSwatchClick(color, e);\r\n }}\r\n />\r\n ))}\r\n
\r\n
\r\n )\r\n );\r\n};\r\nexport default SimilarColors;\r\n","/* eslint-disable no-useless-escape */\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { SketchPicker } from \"react-color\";\r\n\r\nimport styled from \"styled-components\";\r\nimport {\r\n colorListActions,\r\n useColorListState,\r\n useDispatchColorList\r\n} from \"../../../reducers/colors.reducer\";\r\nimport {\r\n Popover,\r\n Menu,\r\n InputGroup,\r\n MenuItem,\r\n Position,\r\n Button,\r\n MenuDivider,\r\n Portal,\r\n Switch\r\n} from \"@blueprintjs/core\";\r\nimport {\r\n useDesignDetailState,\r\n useDispatchDesignDetail,\r\n designDetailActions\r\n} from \"../../../reducers/designdetails.reducer\";\r\nimport { NestedAreaSwatch } from \"../../molecules/AreaSwatch/NestedAreaSwatch\";\r\nimport AtButton from \"../../atoms/AtButton\";\r\nimport { flaginCurrentMode } from \"../../pages/EntryPage/defaultflags\";\r\nimport strings from \"../../../strings\";\r\nimport classNames from \"classnames\";\r\nimport ColorPreview from \"./ColorPreview\";\r\nimport SwatchBox from \"./SwatchBox\";\r\nimport SimilarColors from \"./SimilarColors\";\r\nimport { compare } from \"../../../utils/colorutils\";\r\nimport AtIcon from \"../../atoms/AtIcon\";\r\nconst SwatchContainer = styled.div`\r\n display: flex;\r\n flex-grow: 1;\r\n flex-wrap: wrap;\r\n overflow: auto;\r\n width: auto;\r\n /* for firefox */\r\n scrollbar-width: thin;\r\n /*height= size of each swatch + 2 * size of space between them + size of scroll bar */\r\n height: ${props => `${(props.swatchSize + 2 * props.swatchSpace) * props.colorRows + 1.25}rem`};\r\n flex-direction: column;\r\n align-items: center;\r\n align-content: flex-start;\r\n justify-content: flex-start;\r\n padding: ${props => `${props.swatchSpace}rem`};\r\n`;\r\nconst getSortingOptions = colorString => {\r\n const sortingOptions = [\r\n {\r\n name: colorString.sortingBySequence,\r\n key: null\r\n },\r\n {\r\n name: colorString.sortingByName,\r\n key: \"ColorName\"\r\n },\r\n {\r\n name: colorString.sortingByColor,\r\n key: \"H\"\r\n },\r\n {\r\n name: colorString.sortingBySharpness,\r\n key: \"S\"\r\n },\r\n {\r\n name: colorString.sortingByBrightness,\r\n key: \"L\"\r\n }\r\n ];\r\n\r\n return sortingOptions;\r\n};\r\nconst getSortingOrders = colorString => {\r\n const sortingOrders = [\r\n { name: colorString.ascending, value: 1 },\r\n { name: colorString.descending, value: -1 }\r\n ];\r\n return sortingOrders;\r\n};\r\n\r\nconst ColorSelectionBox = props => {\r\n const {\r\n onColorSwatchClick,\r\n swatchSpace = 0.15,\r\n className = \"\",\r\n selectColorOnClick = true,\r\n selectionColor,\r\n style,\r\n onClose,\r\n renderTexturedPreview = true,\r\n ...otherprops\r\n } = props;\r\n\r\n const state = useColorListState();\r\n const dispatch = useDispatchColorList();\r\n const designDetailState = useDesignDetailState();\r\n const { designDetails, selectedColor, yarnIndex, colorNumbers, fullpath } = designDetailState;\r\n const dispatchDesignDetail = useDispatchDesignDetail();\r\n const {\r\n collections,\r\n collectionIndex,\r\n loading,\r\n activeColor,\r\n filteredCollection,\r\n colorTextures\r\n } = state;\r\n const [sortingOrder, setSortingOrder] = useState(1);\r\n const sortingOptions = getSortingOptions(strings.color);\r\n const [sortingKey, setSortingKey] = useState(sortingOptions[0].key);\r\n const [colorCollection, setColorCollection] = useState();\r\n const [hoveredBox, setHoveredBox] = useState(null);\r\n const { colorSelectionBox: CsbFlags } = window.flags;\r\n const { customColorOptions, collectionFilter, colorPaletteLabels, swatchSize } = CsbFlags;\r\n const [selectedCustomColor, setSelectedCustomColor] = useState({\r\n Color: \"#ffffff\",\r\n ColorName: \"R255 G255 B255\"\r\n });\r\n const [selectedCustomColorOption, setSelectedCustomColorOption] = useState(null);\r\n useEffect(() => {\r\n // console.log(sortingKey);\r\n if (!filteredCollection) return;\r\n // const collection = filteredCollection;\r\n const { NumRows, ColorRows } = filteredCollection;\r\n //sort the colors\r\n const colorRowsSorted = [...ColorRows].sort((a, b) => {\r\n if (!sortingKey) return a - b;\r\n return compare(a, sortingKey, b, sortingOrder);\r\n });\r\n let sortagain = [];\r\n //if the sorting is by sharpness or brightness, it needs to be sorted again along the rows with decreasing lightness\r\n if (sortingKey === \"H\" || sortingKey === \"S\") {\r\n for (let i = 0; i < ColorRows.length; i += NumRows) {\r\n const a = [...colorRowsSorted].slice(i, i + NumRows);\r\n a.sort((a, b) => compare(a, \"L\", b, -1));\r\n sortagain = [...sortagain, ...a];\r\n }\r\n } else {\r\n sortagain = [...colorRowsSorted];\r\n }\r\n // console.log(sortagain);\r\n setColorCollection({ ...filteredCollection, ColorRows: sortagain });\r\n }, [collectionIndex, sortingKey, sortingOrder, filteredCollection]);\r\n const handleColorSwatchClick = (color, e) => {\r\n e.stopPropagation();\r\n if (onColorSwatchClick) onColorSwatchClick(color, e);\r\n if (selectColorOnClick)\r\n dispatch({\r\n type: colorListActions.SET_ACTIVE_COLOR,\r\n payload: color\r\n });\r\n };\r\n const handleColorSearch = e => {\r\n dispatch({ type: colorListActions.SEARCH_COLOR, payload: e.target.value });\r\n };\r\n const handleCarving = e => {\r\n dispatchDesignDetail({ type: designDetailActions.TOGGLE_COLOR_CARVING });\r\n };\r\n const isCarvingAllowed = selectedColorIndex => {\r\n let carvingAllowed = flaginCurrentMode(window.InterfaceElements.IsAdmin, CsbFlags.showCarving); // CsbFlags.showCarving || window.InterfaceElements.IsAdmin;\r\n return carvingAllowed;\r\n };\r\n const selectCustomColorOption = colorIndex => {\r\n let selectedCustomDb = customColorOptions[colorIndex];\r\n setSelectedCustomColorOption(selectedCustomDb);\r\n if (activeColor)\r\n setSelectedCustomColor({ Color: activeColor.Color, ColorName: activeColor.ColorName });\r\n };\r\n const handleCustomColorPicked = e => {\r\n const tex =\r\n selectedCustomColorOption && selectedCustomColorOption.texture\r\n ? selectedCustomColorOption.texture\r\n : -1;\r\n let color = {\r\n Color: selectedCustomColor.Color,\r\n ColorName: selectedCustomColor.ColorName,\r\n Texture: tex\r\n };\r\n onColorSwatchClick(color, e);\r\n //handleColorSwatchClick(selectedCustomColor,e)\r\n };\r\n const handleCustomColorSelected = color => {\r\n const { rgb, hex } = color;\r\n setSelectedCustomColor({ Color: hex, ColorName: `R${rgb.r} G${rgb.g} B${rgb.b}` });\r\n };\r\n const getFolderName = fullpath => {\r\n return fullpath.split(\"/\")[1];\r\n };\r\n const renderCollectionDropdown = () => {\r\n const showThisCollection = collection => {\r\n if (collectionFilter.length === 0) return true;\r\n else {\r\n let showThis = false;\r\n let folderName = getFolderName(fullpath);\r\n let collectionsToshow = collectionFilter.filter(\r\n filtermap => filtermap.folder.toLowerCase() === folderName.toLowerCase()\r\n );\r\n if (!collectionsToshow || !collectionsToshow.length || !collectionsToshow[0].collection) {\r\n showThis = true;\r\n } else {\r\n collectionsToshow[0].collection.forEach(element => {\r\n if (element.toLowerCase() === collection.Name.toLowerCase()) {\r\n showThis = true;\r\n }\r\n });\r\n }\r\n\r\n return showThis;\r\n }\r\n };\r\n return (\r\n collections && (\r\n \r\n {collections.map((collection, index) => {\r\n if (showThisCollection(collection)) {\r\n return (\r\n {\r\n setSelectedCustomColorOption(null);\r\n dispatch({\r\n type: colorListActions.SELECT_COLLECTION,\r\n payload: index\r\n });\r\n }}\r\n />\r\n );\r\n }\r\n })}\r\n {customColorOptions.map((customColorOption, index) => (\r\n selectCustomColorOption(index)}\r\n >\r\n ))}\r\n \r\n )\r\n );\r\n };\r\n const renderSortingOptions = sortingOrders => (\r\n \r\n {sortingOrders.map((order, index) => (\r\n setSortingOrder(order.value)}\r\n />\r\n ))}\r\n \r\n {sortingOptions.map((option, index) => (\r\n setSortingKey(option.key)}\r\n />\r\n ))}\r\n \r\n );\r\n const LabelTemplateFlipo = props => {\r\n const { label } = props;\r\n return (\r\n
\r\n
premounted
\r\n
{label}
\r\n
\r\n );\r\n };\r\n const renderLabelTemplate = props => {\r\n const { templateName } = props;\r\n switch (templateName) {\r\n case \"flipo\":\r\n return ;\r\n default:\r\n return null;\r\n }\r\n };\r\n const previewMaterial = () => {\r\n const tex = parseInt(hoveredBox.colorRow.Texture || \"-1\");\r\n if (tex !== -1) return tex;\r\n if (selectedColor && selectedColor === -1) return -1;\r\n let yi = yarnIndex || 0;\r\n yi = yi === -1 ? 0 : yi;\r\n if (yarnIndex === -1) return designDetails.DesignColors[selectedColor].YarnDetails[yi].Material;\r\n };\r\n const isCurrentFolderLabel = index => {\r\n const colorCollectionName = colorCollection.Name;\r\n const currentFolderLabels = colorPaletteLabels.colorLabelFilter.filter(\r\n labelFilter => labelFilter.colorListName.toLowerCase() === colorCollectionName.toLowerCase()\r\n );\r\n const showThisLabel =\r\n currentFolderLabels.length > 0 && currentFolderLabels[0].labelIndeces.indexOf(index) >= 0\r\n ? true\r\n : false;\r\n return showThisLabel;\r\n };\r\n const showColorLabelInfo = () => {\r\n const colorCollectionName = colorCollection.Name;\r\n const currentFolderLabels = colorPaletteLabels.colorLabelFilter.filter(\r\n labelFilter => labelFilter.colorListName.toLowerCase() === colorCollectionName.toLowerCase()\r\n );\r\n const showLabel = currentFolderLabels.length > 0 && currentFolderLabels[0].showColorLabelInfo;\r\n return showLabel;\r\n };\r\n return (\r\n !loading && (\r\n \r\n {selectedColor !== -1 &&\r\n designDetails.DesignColors[selectedColor] &&\r\n designDetails.DesignColors[selectedColor].YarnDetails.length > 1 && (\r\n \r\n )}\r\n \r\n {CsbFlags.showColorFilter && (\r\n
\r\n \r\n
\r\n )}\r\n onClose && onClose()} />\r\n \r\n\r\n {colorCollection && CsbFlags.showSimilarColors && (\r\n \r\n )}\r\n {designDetailState.selectedColor !== -1 &&\r\n isCarvingAllowed(designDetailState.selectedColor) && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n
\r\n \r\n \r\n {!selectedCustomColorOption\r\n ? collections[collectionIndex].Name\r\n : selectedCustomColorOption.text}\r\n {collections.length + customColorOptions.length > 1 && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n {colorCollection && (\r\n
\r\n
\r\n {colorPaletteLabels.labels.length > 0 && (\r\n
\r\n {colorPaletteLabels.labels.map((label, index) => (\r\n \r\n {renderLabelTemplate({ templateName: \"flipo\", label })}\r\n
\r\n ))}\r\n
\r\n )}\r\n {selectedCustomColorOption ? (\r\n <>\r\n \r\n
\r\n \r\n
\r\n \r\n ) : (\r\n \r\n {colorCollection.ColorRows.map((colorRow, index) => (\r\n {\r\n handleColorSwatchClick(colorRow, e);\r\n }}\r\n active={colorRow === activeColor}\r\n handleHover={elem => setHoveredBox({ elem, colorRow })}\r\n />\r\n ))}\r\n {/* {state.filteredCollection.ColorRows.map((colorRow, index) => (\r\n {\r\n onColorSwatchClick(colorRow, e);\r\n }}\r\n active={colorRow === activeColor}\r\n handleHover={elem => setHoveredBox({ elem, colorRow })}\r\n />\r\n ))} */}\r\n \r\n {hoveredBox && hoveredBox.elem && (\r\n \r\n )}\r\n \r\n \r\n )}\r\n
\r\n {colorPaletteLabels.colorLabelInfo &&\r\n colorPaletteLabels.colorLabelInfo !== \"\" &&\r\n showColorLabelInfo() && (\r\n
\r\n {\" \"}\r\n {colorPaletteLabels.colorLabelInfo}\r\n
\r\n )}\r\n \r\n )}\r\n \r\n )\r\n );\r\n};\r\n\r\nexport default ColorSelectionBox;\r\n","import React from \"react\";\r\nimport { useRoomConfigState, useDispatchRoomConfig, roomConfigActions } from \"./roomconfig.reducer\";\r\nimport classNames from \"classnames\";\r\nimport { Overlay, Popover } from \"@blueprintjs/core\";\r\nimport ColorSelectionBox from \"../organisms/ColorSelectionBox\";\r\n\r\nconst ColorSelection = props => {\r\n const { isIdle, removeTransState, handleColorSwatchClick } = props;\r\n const roomConfigState = useRoomConfigState();\r\n const dispatchRoomConfig = useDispatchRoomConfig();\r\n const { activedata } = roomConfigState;\r\n const handleClose = object => {\r\n dispatchRoomConfig({\r\n type: roomConfigActions.SET_SHOW_COLOR_BOX,\r\n payload: { object, isOpen: false }\r\n });\r\n };\r\n const handleOpen = object => {\r\n dispatchRoomConfig({\r\n type: roomConfigActions.SET_SHOW_COLOR_BOX,\r\n payload: { object, isOpen: true }\r\n });\r\n };\r\n const getPosition = objProps => ({\r\n left: `${objProps[0]}%`,\r\n top: `${objProps[1]}%`\r\n });\r\n\r\n const getPosition1 = objProps => ({\r\n left: `${objProps[0] - 15}%`\r\n });\r\n\r\n const renderSelectionBox = (objKey, objProps, onClose) => (\r\n
\r\n handleColorSwatchClick(color, objKey)}\r\n onClose={onClose}\r\n style={getPosition1(objProps)}\r\n />\r\n
\r\n );\r\n if (!activedata) return <>;\r\n return Object.entries(activedata).map(\r\n ([objKey, objProps]) =>\r\n roomConfigState.objectstate[objKey].mystic !== \"hide\" && (\r\n removeTransState(objKey)}\r\n >\r\n handleClose(objKey)}\r\n portalContainer={document.getElementById(\"photoscene-main\")}\r\n content={renderSelectionBox(objKey, objProps, () => handleClose(objKey))}\r\n >\r\n handleOpen(objKey)}\r\n />\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default ColorSelection;\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\n\r\nimport React, { useState, useRef, useEffect } from \"react\";\r\nimport RoomViewHelper, { defaultRoomType, roomTypes } from \"./roomviewhelper\";\r\nimport { useMount } from \"react-use\";\r\nimport InputCanvas from \"../atoms/InputCanvas\";\r\n\r\nimport AppProvider, { getFloor } from \"../../api/appProvider\";\r\nimport Fade from \"./../higher-order-components/Fade\";\r\n\r\nimport CircularButton from \"./../atoms/CircularButton\";\r\nimport DayNightSlider from \"./../DayNightSlider\";\r\nimport { resizeKeepingAspect } from \"../../utils/utils\";\r\n\r\nimport { useWindowSize } from \"./../../hooks\";\r\nimport classNames from \"classnames\";\r\n\r\nimport {\r\n useRoomConfigState,\r\n useDispatchRoomConfig,\r\n roomConfigReducerHandlers,\r\n roomConfigActions\r\n} from \"./roomconfig.reducer\";\r\nimport {\r\n useDesignDetailState,\r\n useDispatchDesignDetail,\r\n designDetailActions\r\n} from \"../../reducers/designdetails.reducer\";\r\nimport { clearCanvas, createCanvas } from \"../../utils/canvasutils\";\r\nimport { createBlurImage } from \"../../utils/blur\";\r\nimport BlurCircle from \"../molecules/BlurCircle\";\r\nimport { applyPresetOnCanvas, presetsMapping } from \"instagram-filters\";\r\nimport IllustrationOptions from \"./IllustrationOptions\";\r\nimport FloorSelectionDialog from \"./FloorSelectionDialog\";\r\nimport ViewpointDialog from \"./ViewpointDialog\";\r\nimport ColorSelection from \"./ColorSelection\";\r\n\r\nlet roomViewHelper = new RoomViewHelper();\r\nwindow.roomViewHelper = roomViewHelper;\r\n\r\nlet designRendered = false;\r\nlet designRendering = false;\r\n\r\nfunction usePrevious(value) {\r\n const ref = useRef({});\r\n useEffect(() => {\r\n ref.current = value;\r\n }, [value]);\r\n return ref.current;\r\n}\r\n\r\nexport const getDominantColor = designDetails => {\r\n if (!designDetails || Object.keys(designDetails) < 1) return null;\r\n const smartKnot = designDetails.DesignColors?.map(c => c.Knots).sort((a, b) => b - a);\r\n const smartIndex = smartKnot.length > 2 ? (smartKnot.length === 3 ? 1 : 2) : smartKnot.length - 1;\r\n const domC = designDetails.DesignColors?.find(item => item.Knots === smartKnot[smartIndex]);\r\n if (domC) return domC.Color;\r\n else return null;\r\n};\r\n\r\nconst IllustrationView = props => {\r\n const {\r\n cameraactive,\r\n active,\r\n roomData,\r\n isIdle,\r\n handleAvailableSizesChange,\r\n selectedSize,\r\n handleRendering,\r\n filterData = null,\r\n tiltShiftFilter,\r\n floor,\r\n changeActiveFloor,\r\n resetTrigger, supported\r\n } = props;\r\n const { Name: roomName, Files: files, config: config1, baseUrl } = roomData;\r\n const config = { ...config1 };\r\n const designDetailState = useDesignDetailState();\r\n const dispatchDesignDetails = useDispatchDesignDetail();\r\n const [inputoncarpet, setinputoncarpet] = useState(false);\r\n const [shotReady, setshotReady] = useState(false);\r\n const [transition, settransition] = useState(-1);\r\n const [dimensions, setdimensions] = useState({});\r\n const [showWand, setshowWand] = useState(false);\r\n const [inputmoved, setinputmoved] = useState(false);\r\n const [drawOnEffectsTrigger, setdrawOnEffectsTrigger] = useState(false);\r\n const [renderfromsavedstate, setrenderfromsavedstate] = useState(false);\r\n // const [tiltShiftFilter, settiltShiftFilter] = useState({\r\n // active: false,\r\n // options: { centerAt: { x: 0.5, y: 0.5 }, dontBlur: 20, maxRadius: 15 }\r\n // });\r\n const [colorSelectionPos, setcolorSelectionPos] = useState({ x: -1, y: -1 });\r\n const [showEffectCanvas, setshowEffectCanvas] = useState(false);\r\n\r\n const roomconfigstate = useRoomConfigState();\r\n // const { tiltShiftFilter } = roomconfigstate;\r\n const dispatchRoomConfig = useDispatchRoomConfig();\r\n\r\n const containerRef = useRef(null);\r\n const bgCanvasRef = useRef(null);\r\n const threeCanvasRef = useRef(null);\r\n const maskCanvasRef = useRef(null);\r\n const shadowCanvasRef = useRef(null);\r\n const transitionCanvasRef = useRef(null);\r\n const inputCanvasRef = useRef(null);\r\n const objCanvasContainerRef = useRef(null);\r\n const inputCanvasContainerRef = useRef(null);\r\n const effectCanvasRef = useRef();\r\n\r\n const {\r\n floorOptions,\r\n carpetOptions,\r\n roomelements,\r\n activeshot,\r\n showViewpointDialog,\r\n customDesignUrl\r\n } = roomconfigstate;\r\n const { activeFloor } = floorOptions;\r\n const { rotation: carpetRotation, position: carpetPosition } = carpetOptions;\r\n const {\r\n designDetails,\r\n fullpath: designPath,\r\n hash,\r\n updateDesignTiles,\r\n updateNormapTiles\r\n } = designDetailState;\r\n\r\n const prevRoomDetails = usePrevious(roomData);\r\n\r\n const windowsize = useWindowSize();\r\n\r\n useMount(() => {\r\n const canvasConfig = {\r\n bgCanvas: bgCanvasRef.current,\r\n threeCanvas: threeCanvasRef.current,\r\n maskCanvas: maskCanvasRef.current,\r\n shadowCanvas: shadowCanvasRef.current,\r\n transitionCanvas: transitionCanvasRef.current,\r\n effectCanvas: effectCanvasRef.current,\r\n container: containerRef.current,\r\n inputCanvas: inputCanvasRef.current,\r\n objCanvasContainer: objCanvasContainerRef.current\r\n };\r\n roomViewHelper.initCanvas(canvasConfig);\r\n });\r\n\r\n useEffect(() => {\r\n return () => {\r\n roomViewHelper.unmountClearUp();\r\n designRendered = false;\r\n designRendering = false;\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n sizeContainers({ windowsize: true });\r\n }, [windowsize]);\r\n\r\n useEffect(() => {\r\n if (!selectedSize) return;\r\n roomViewHelper.change3dObjectScale(selectedSize);\r\n }, [selectedSize]);\r\n useEffect(() => {\r\n handleShotReady();\r\n }, [shotReady]);\r\n useEffect(() => {\r\n if (!shotReady || designDetailState.loading || carpetRotation.length !== 3) return;\r\n roomViewHelper.updateCarpetRotation(carpetRotation);\r\n }, [carpetRotation]);\r\n\r\n useEffect(() => {\r\n const run = async () => {\r\n if (cameraactive) {\r\n await makeTransitionCanvas();\r\n } else {\r\n setshowEffectCanvas(false);\r\n }\r\n };\r\n\r\n run();\r\n }, [cameraactive]);\r\n\r\n useEffect(() => {\r\n if (!shotReady || designDetailState.loading || !carpetPosition || carpetPosition.length !== 3)\r\n return;\r\n\r\n roomViewHelper.updateCarpetPosition(carpetPosition);\r\n }, [carpetPosition]);\r\n useEffect(() => {\r\n if (!shotReady || designDetailState.loading) {\r\n return;\r\n }\r\n const updateFloor = async () => {\r\n if (!floor) {\r\n await roomViewHelper.renderFloor(floor);\r\n await roomViewHelper.updateShadow();\r\n } else {\r\n setshotReady(false);\r\n await roomViewHelper.renderFloor(floor);\r\n await roomViewHelper.updateShadow();\r\n setshotReady(true);\r\n }\r\n };\r\n updateFloor();\r\n }, [floor]);\r\n\r\n const handleShotReady = () => {\r\n if (shotReady) {\r\n settransition(0);\r\n }\r\n dispatchDesignDetails({\r\n type: designDetailActions.SET_LOADING,\r\n payload: !shotReady\r\n });\r\n if (handleRendering) handleRendering(shotReady);\r\n };\r\n const setRoomConfigState = async config => {\r\n const {\r\n name,\r\n dims,\r\n roomType,\r\n hasShadow,\r\n mouseControls,\r\n realTimeDynamicRendering,\r\n roomElements,\r\n scene1\r\n } = config;\r\n const carpetOptions = {\r\n rotation: scene1.surface1.rotation,\r\n position: scene1.surface1.position\r\n };\r\n const roomState = {\r\n name,\r\n dims,\r\n roomType,\r\n hasShadow,\r\n mouseControls,\r\n realTimeDynamicRendering,\r\n roomElements,\r\n carpetOptions\r\n };\r\n const roomConfigState = roomConfigReducerHandlers.setRoomElements({\r\n state: { ...roomconfigstate },\r\n payload: roomState\r\n });\r\n dispatchRoomConfig({\r\n type: \"SET_ROOM_ELEMENTS\",\r\n precalc: { ...roomConfigState }\r\n });\r\n return roomConfigState;\r\n };\r\n const selectSmartObject = smartObj => {\r\n //works only for one object currently\r\n if (smartObj) {\r\n roomViewHelper.selectColorCode(smartObj.colorCode);\r\n }\r\n };\r\n\r\n const getSmartObject = objects => {\r\n if (!objects) return;\r\n let objectEntries = Object.entries(objects);\r\n if (objectEntries && objectEntries.length > 0) {\r\n let object = Object.entries(objects)[0][1];\r\n if (objectEntries.length > 1) {\r\n let smartObjs = objectEntries.filter((entry, index) => entry[1].smart);\r\n if (smartObjs.length) object = smartObjs[0][1];\r\n return smartObjs[0];\r\n } else if (object && object.passive) {\r\n return object.hasOwnProperty(\"smart\") && !object.smart ? null : Object.entries(objects)[0];\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n let la = true;\r\n const renderFloorInRoom = async (defaultFloor = false) => {\r\n if (!floor || !floor.path || defaultFloor) {\r\n changeActiveFloor(null);\r\n return roomViewHelper.renderFloor({ path: null });\r\n } else {\r\n return roomViewHelper.renderFloor(floor);\r\n }\r\n };\r\n\r\n const loadRoom = async () => {\r\n try {\r\n let temproomconfigstate = roomconfigstate;\r\n let newroom = false;\r\n if (prevRoomDetails !== roomData) {\r\n newroom = true;\r\n if (shotReady) await makeTransitionCanvas();\r\n settransition(1);\r\n if (!(!prevRoomDetails && roomViewHelper.roomData === roomData))\r\n roomViewHelper.clearAll();\r\n dispatchRoomConfig({\r\n type: \"RESET\"\r\n });\r\n temproomconfigstate = await setRoomConfigState(config);\r\n roomViewHelper.roomData = roomData;\r\n roomViewHelper.initConfig({ baseUrl, config, files, local: roomData.fromlocal });\r\n sizeContainers({ illustrationDims: config.dims });\r\n\r\n if (customDesignUrl?.url) {\r\n if (roomViewHelper.designDetails !== designDetails) roomViewHelper.resetOnDesignChange();\r\n } else {\r\n if (roomViewHelper.customDesignUrl?.url !== customDesignUrl?.url) roomViewHelper.resetOnDesignChange();\r\n }\r\n const renderScene = await initShot({\r\n shot: temproomconfigstate.activeshot,\r\n light: temproomconfigstate.activelight,\r\n view: temproomconfigstate.activeview,\r\n realTimeDynamicRendering: temproomconfigstate.realTimeDynamicRendering\r\n });\r\n if (!la || !renderScene) return;\r\n const smartObject = getSmartObject(temproomconfigstate.roomelements.objects);\r\n if (smartObject) {\r\n selectSmartObject(smartObject[1]);\r\n const dominantColorHex = getDominantColor(designDetailState?.designDetails);\r\n roomViewHelper.updateBackground({ dominantColorHex });\r\n if (dominantColorHex) {\r\n dispatchRoomConfig({\r\n type: \"SET_ACTIVE_COLOR\",\r\n payload: { object: smartObject[0], color: dominantColorHex }\r\n });\r\n }\r\n } else {\r\n roomViewHelper.updateBackground();\r\n }\r\n\r\n\r\n roomViewHelper.updateMask();\r\n\r\n if (\r\n (customDesignUrl?.url &&\r\n (roomViewHelper.customDesignUrl?.url === customDesignUrl.url))\r\n ||\r\n (!customDesignUrl?.url &&\r\n (roomViewHelper.designDetails === designDetails))\r\n ) {\r\n const availSizes = await roomViewHelper.updatethreeCanvas(\r\n temproomconfigstate.activeshot\r\n );\r\n if (!la) return;\r\n if (\r\n prevRoomDetails &&\r\n prevRoomDetails.config &&\r\n prevRoomDetails.config.designinroomformat !== roomData.config.designinroomformat\r\n ) {\r\n designRendered = false;\r\n designRendering = false;\r\n }\r\n if (!designRendering) {\r\n designRendering = true;\r\n if (customDesignUrl?.url) {\r\n await roomViewHelper.renderDesignFromCustomUrl({\r\n customUrl: customDesignUrl.url, physicalWidth: customDesignUrl.physicalWidCms,\r\n physicalHeight: customDesignUrl.physicalHgtCms\r\n });\r\n } else {\r\n await roomViewHelper.renderDesign({ designDetails, designPath, hash });\r\n }\r\n\r\n designRendered = true;\r\n if (availSizes && handleAvailableSizesChange) {\r\n handleAvailableSizesChange(availSizes);\r\n }\r\n }\r\n await renderFloorInRoom(newroom);\r\n roomViewHelper.updateShadow();\r\n roomViewHelper.updateGizmo();\r\n }\r\n updateAllObjectsInScene({ ...temproomconfigstate.objectstate });\r\n if (la && designRendered) {\r\n setshotReady(true);\r\n // clearCanvas(\r\n // transitionCanvasRef.current,\r\n // transitionCanvasRef.current.width,\r\n // transitionCanvasRef.current.height\r\n // );\r\n }\r\n }\r\n if (\r\n (customDesignUrl?.url &&\r\n (roomViewHelper.customDesignUrl?.url !== customDesignUrl.url))\r\n ||\r\n (!customDesignUrl?.url &&\r\n (roomViewHelper.designDetails !== designDetails))\r\n ) {\r\n setshotReady(false);\r\n designRendered = false;\r\n designRendering = false;\r\n\r\n if (renderfromsavedstate) {\r\n await Promise.all(roomViewHelper.initShot());\r\n }\r\n\r\n const dominantColorHex = getDominantColor(designDetailState?.designDetails);\r\n if (renderfromsavedstate || roomViewHelper.currentAssets.backgroundpatch) {\r\n const smartObject = getSmartObject(temproomconfigstate.roomelements.objects);\r\n if (smartObject) {\r\n roomViewHelper.updateBackground({ dominantColorHex });\r\n dominantColorHex && dispatchRoomConfig({\r\n type: \"SET_ACTIVE_COLOR\",\r\n payload: { object: smartObject[0], color: dominantColorHex }\r\n });\r\n temproomconfigstate = {\r\n ...temproomconfigstate,\r\n objectstate: {\r\n ...temproomconfigstate.objectstate,\r\n [smartObject[0]]: {\r\n ...temproomconfigstate.objectstate[smartObject[0]],\r\n active: dominantColorHex\r\n }\r\n }\r\n };\r\n handleBackgroundActives(temproomconfigstate);\r\n } else {\r\n roomViewHelper.updateBackground();\r\n handleBackgroundActives();\r\n }\r\n roomViewHelper.updateMask();\r\n }\r\n setrenderfromsavedstate(false);\r\n\r\n if (customDesignUrl?.url) {\r\n roomViewHelper.customDesignUrl = customDesignUrl;\r\n roomViewHelper.designDetails = null;\r\n }\r\n else {\r\n roomViewHelper.designDetails = designDetails;\r\n roomViewHelper.customDesignUrl = null;\r\n\r\n }\r\n\r\n\r\n if (\r\n customDesignUrl?.url || roomViewHelper.designPath !== designPath ||\r\n newroom\r\n ) {\r\n roomViewHelper.resetOnDesignChange();\r\n\r\n if (!customDesignUrl?.url) {\r\n const tileData = await AppProvider.fetchTileDetails({\r\n file: designPath\r\n });\r\n if (!la) return;\r\n dispatchDesignDetails({\r\n type: designDetailActions.SET_TILE_DETAILS,\r\n payload: tileData\r\n });\r\n roomViewHelper.setTileDetails(tileData);\r\n\r\n }\r\n\r\n\r\n const availSizes = await roomViewHelper.updatethreeCanvas(\r\n temproomconfigstate ? temproomconfigstate.activeshot : roomconfigstate.activeshot\r\n );\r\n if (!la) return;\r\n designRendering = true;\r\n roomViewHelper.threeView.changeFloorVisibility(false);\r\n if (customDesignUrl?.url) {\r\n await roomViewHelper.renderDesignFromCustomUrl({\r\n customUrl: customDesignUrl.url, physicalWidth: customDesignUrl.physicalWidCms,\r\n physicalHeight: customDesignUrl.physicalHgtCms\r\n });\r\n } else {\r\n await roomViewHelper.renderDesign({ designDetails, designPath, hash });\r\n }\r\n await renderFloorInRoom(newroom);\r\n\r\n if (availSizes && handleAvailableSizesChange) {\r\n handleAvailableSizesChange(availSizes);\r\n }\r\n await roomViewHelper.updateShadow();\r\n designRendered = true;\r\n if (la && designRendered) setshotReady(true);\r\n if (!la) return;\r\n } else {\r\n await roomViewHelper.updateTiles({\r\n designDetails,\r\n updateDesignTiles,\r\n updateNormapTiles,\r\n hash\r\n });\r\n await roomViewHelper.updateShadow();\r\n designRendered = true;\r\n }\r\n }\r\n setshotReady(true);\r\n } catch (error) {\r\n console.error(error);\r\n return;\r\n }\r\n };\r\n if (supported && roomData && (designDetails || customDesignUrl?.url) && active) loadRoom();\r\n\r\n return () => {\r\n la=false;\r\n }\r\n }, [roomData, active, designDetails, customDesignUrl, supported]);\r\n\r\n useEffect(() => {\r\n if (!active) return;\r\n applyEffects();\r\n }, [tiltShiftFilter, filterData]);\r\n\r\n // useEffect(() => {\r\n // settiltShiftFilter({\r\n // active: blurData.active,\r\n // options: { ...tiltShiftFilter.options, maxRadius: blurData.radius }\r\n // });\r\n // }, [blurData]);\r\n\r\n useEffect(() => {\r\n if (drawOnEffectsTrigger) {\r\n setdrawOnEffectsTrigger(false);\r\n drawOnEffects();\r\n }\r\n }, [drawOnEffectsTrigger]);\r\n\r\n const drawOnEffects = async () => {\r\n let canvas;\r\n\r\n if (filterData || tiltShiftFilter.active) {\r\n canvas = await roomViewHelper.initEffectCanvas();\r\n }\r\n if (filterData) {\r\n await applyPresetOnCanvas(canvas, presetsMapping[filterData]());\r\n roomViewHelper.blurMatrix = null;\r\n effectCanvasRef.current.getContext(\"2d\").drawImage(canvas, 0, 0);\r\n }\r\n if (tiltShiftFilter.active) {\r\n canvas.toBlob(async function (blob) {\r\n var url = URL.createObjectURL(blob);\r\n await roomViewHelper.tiltShift(canvas, tiltShiftFilter);\r\n effectCanvasRef.current.getContext(\"2d\").drawImage(canvas, 0, 0);\r\n });\r\n }\r\n\r\n setshowEffectCanvas(true);\r\n };\r\n\r\n const applyEffects = async () => {\r\n if (!effectCanvasRef || !effectCanvasRef.current) return;\r\n if (!(filterData || tiltShiftFilter.active)) return;\r\n setdrawOnEffectsTrigger(true);\r\n };\r\n\r\n // const handleBlurCenter = e => {\r\n // if (!tiltShiftFilter.active) return;\r\n // let isTouchEvent = e.nativeEvent.type === \"touchstart\" || e.nativeEvent.type === \"touchmove\";\r\n // const { clientX, clientY } = isTouchEvent ? e.nativeEvent.targetTouches[0] : e;\r\n // const { top, left, width, height } = effectCanvasRef.current.getBoundingClientRect();\r\n // const xabs = (clientX - left) / width;\r\n // const yabs = (clientY - top) / height;\r\n // settiltShiftFilter({\r\n // ...tiltShiftFilter,\r\n // options: { ...tiltShiftFilter.options, centerAt: { x: xabs, y: yabs } }\r\n // });\r\n // };\r\n\r\n const sizeContainers = ({ illustrationDims, windowsize = false }) => {\r\n const { width, height } = containerRef.current.getBoundingClientRect();\r\n roomViewHelper.resize({ width: width, height: height, windowsize: windowsize });\r\n const dimensionPixels = resizeKeepingAspect(\r\n illustrationDims ? illustrationDims : roomconfigstate.dims,\r\n { width: width, height: height },\r\n \"fit_inside\"\r\n );\r\n setdimensions({ width: `${dimensionPixels.width}px`, height: `${dimensionPixels.height}px` });\r\n };\r\n\r\n const initShot = async ({ shot, light, view, realTimeDynamicRendering }) => {\r\n const isinitialized = roomViewHelper.preinitShot({\r\n shot: shot,\r\n light: light,\r\n view: view\r\n });\r\n if (realTimeDynamicRendering === undefined || realTimeDynamicRendering === null)\r\n realTimeDynamicRendering = roomconfigstate.realTimeDynamicRendering;\r\n if (!realTimeDynamicRendering) {\r\n const isrenderedfromsavedstate = await roomViewHelper.renderSavedRoomState();\r\n if (isrenderedfromsavedstate) {\r\n setrenderfromsavedstate(true);\r\n\r\n if (!shotReady) {\r\n setshotReady(true);\r\n } else {\r\n handleShotReady();\r\n }\r\n return Promise.resolve(false);\r\n }\r\n }\r\n setrenderfromsavedstate(false);\r\n if (!isinitialized) {\r\n setshotReady(false);\r\n await Promise.all(roomViewHelper.initShot());\r\n } else {\r\n handleShotReady();\r\n }\r\n return Promise.resolve(true);\r\n };\r\n\r\n const handleBackgroundActives = (roomState = roomconfigstate) => {\r\n for (const objectname in roomState.objectstate) {\r\n if (\r\n roomState.objectstate[objectname].active &&\r\n roomState.objectstate[objectname].active !== \"init\"\r\n ) {\r\n const objectConfig = roomState.roomelements.objects[objectname];\r\n const objectPosition = roomState.activedata[objectname];\r\n const { passive, colorCode } = objectConfig;\r\n if (!passive) return;\r\n else {\r\n if (colorCode) {\r\n roomViewHelper.selectColorCode(colorCode);\r\n } else if (objectPosition) {\r\n const x = inputCanvasRef.current.width * objectPosition[0];\r\n const y = inputCanvasRef.current.height * objectPosition[1];\r\n roomViewHelper.selectColorAnnotation({ x, y });\r\n }\r\n if (colorCode || objectPosition) {\r\n roomViewHelper.updateBackground({\r\n dominantColorHex: roomState.objectstate[objectname].active,\r\n retainActiveColors: true\r\n });\r\n roomViewHelper.updateMask();\r\n roomViewHelper.updateShadow();\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n const changeShot = async newshot => {\r\n try {\r\n await makeTransitionCanvas();\r\n settransition(1);\r\n const temproomconfigstate = roomConfigReducerHandlers.changeShot({\r\n state: { ...roomconfigstate },\r\n payload: { activeshot: newshot }\r\n });\r\n dispatchRoomConfig({\r\n type: \"CHANGE_SHOT\",\r\n precalc: { ...temproomconfigstate }\r\n });\r\n await initShot({ shot: temproomconfigstate.activeshot });\r\n roomViewHelper.updateBackground();\r\n handleBackgroundActives();\r\n roomViewHelper.updateMask();\r\n\r\n await roomViewHelper.updateCameraShot(temproomconfigstate.activeshot);\r\n roomViewHelper.updateShadow();\r\n roomViewHelper.updateGizmo();\r\n updateAllObjectsInScene({ ...temproomconfigstate.objectstate });\r\n\r\n setshotReady(true);\r\n } catch (error) {\r\n console.error(error);\r\n return;\r\n }\r\n };\r\n\r\n const changeLight = async (newlightname, lightIntensity) => {\r\n let intensity = lightIntensity ? Math.round(lightIntensity / 10) * 10 : null;\r\n if (\r\n roomViewHelper.currentState.light === newlightname &&\r\n (intensity ?\r\n intensity === roomViewHelper.lightIntensity : true)\r\n ) {\r\n setshotReady(true);\r\n return;\r\n }\r\n await makeTransitionCanvas();\r\n settransition(1);\r\n const temproomconfigstate = roomConfigReducerHandlers.changeLight({\r\n state: { ...roomconfigstate },\r\n payload: { activelight: newlightname }\r\n });\r\n dispatchRoomConfig({\r\n type: \"CHANGE_LIGHT\",\r\n precalc: { ...temproomconfigstate }\r\n });\r\n\r\n await initShot({ light: newlightname, view: temproomconfigstate.activeview });\r\n if (!intensity && roomViewHelper.currentAssets.lightIntensity && roomViewHelper.currentAssets.lightIntensity >= 0)\r\n dispatchRoomConfig({\r\n type: \"CHANGE_LIGHT_INTENSITY\",\r\n payload: roomViewHelper.currentAssets.lightIntensity\r\n });\r\n settransition(1);\r\n setTimeout(() => {\r\n settransition(0);\r\n }, 1000);\r\n\r\n roomViewHelper.updateBackground({ lightIntensity: intensity });\r\n handleBackgroundActives();\r\n roomViewHelper.updateMask();\r\n roomViewHelper.updateShadow();\r\n updateAllObjectsInScene({ ...temproomconfigstate.objectstate });\r\n\r\n setshotReady(true);\r\n dispatchDesignDetails({\r\n type: designDetailActions.SET_LOADING,\r\n payload: false\r\n });\r\n };\r\n\r\n const changeView = async temproomconfigstate => {\r\n await makeTransitionCanvas();\r\n settransition(1);\r\n await initShot({ view: temproomconfigstate.activeview });\r\n setTimeout(() => {\r\n settransition(0);\r\n }, 1000);\r\n roomViewHelper.updateBackground();\r\n handleBackgroundActives();\r\n roomViewHelper.updateMask();\r\n roomViewHelper.updateShadow();\r\n updateAllObjectsInScene({ ...temproomconfigstate.objectstate });\r\n\r\n setshotReady(true);\r\n };\r\n\r\n const makeTransitionCanvas = async (roomview = roomViewHelper) => {\r\n let sceneobjectstate = Object.fromEntries(\r\n Object.entries(roomconfigstate.objectstate).filter(object => {\r\n return (\r\n object[1].isobjectinscene &&\r\n (object[1].mystic ? (object[1].mystic === \"show\" ? true : false) : true)\r\n );\r\n })\r\n );\r\n const sortedobjectsarr = Object.entries(sceneobjectstate)\r\n .sort((a, b) => a[1].zindex - b[1].zindex)\r\n .map(el => {\r\n return { [el[0]]: el[1] };\r\n });\r\n const sortedobjects = sortedobjectsarr.reduce((obj, item) => {\r\n obj[Object.keys(item)[0]] = Object.values(item)[0];\r\n return obj;\r\n }, {});\r\n await roomview.makeTransitionCanvas({\r\n objects: sortedobjects\r\n });\r\n };\r\n\r\n const updateAllObjectsInScene = objectstate => {\r\n let sceneobjectstate = Object.fromEntries(\r\n Object.entries(objectstate).filter(object => object[1].isobjectinscene)\r\n );\r\n roomViewHelper.updateObjects({ ...sceneobjectstate });\r\n };\r\n\r\n const mouseObjectTracker = e => {\r\n if (\r\n !inputoncarpet &&\r\n roomconfigstate.roomelements.objects &&\r\n Object.keys(roomconfigstate.roomelements.objects).length > 0\r\n ) {\r\n const { left, top, width, height } = document\r\n .getElementById(\"inputcontainer\")\r\n .getBoundingClientRect();\r\n const { x, y } = { x: e.clientX - left, y: e.clientY - top };\r\n const resolutionx = roomViewHelper.dimension.width / width;\r\n const resolutiony = roomViewHelper.dimension.height / height;\r\n let hoveredObjInd = null;\r\n try {\r\n Object.keys(roomconfigstate.objectstate).forEach((objectname, index) => {\r\n if (!roomconfigstate.objectstate[objectname].mystic) return;\r\n let objectindex = roomconfigstate.objectstate[objectname].order - 1;\r\n let c = objCanvasContainerRef.current.children[objectindex].getContext(\"2d\");\r\n let p = c.getImageData(x * resolutionx, y * resolutiony, 100, 100).data;\r\n const alphaArr = p.filter((p1each, index) => (index + 1) % 4 === 0);\r\n const isObjectCheck = element => element > 250;\r\n const isobject = alphaArr.some(isObjectCheck);\r\n if (isobject) {\r\n if (!hoveredObjInd || hoveredObjInd < objectindex) hoveredObjInd = objectindex;\r\n } else {\r\n document\r\n .getElementById(\"objcontainer\")\r\n .children[objectindex].classList.remove(\"objcontainer__objcanvas--trans\");\r\n }\r\n });\r\n if (hoveredObjInd) {\r\n document\r\n .getElementById(\"objcontainer\")\r\n .children[hoveredObjInd].classList.add(\"objcontainer__objcanvas--trans\");\r\n setshowWand(true);\r\n } else setshowWand(false);\r\n } catch (err) { }\r\n }\r\n };\r\n\r\n const mouseObjectClick = e => {\r\n if (!inputmoved) {\r\n if (\r\n roomconfigstate.roomelements.objects &&\r\n Object.keys(roomconfigstate.roomelements.objects).length > 0\r\n ) {\r\n try {\r\n Object.keys(roomconfigstate.objectstate).forEach((objectname, index) => {\r\n let objectindex = roomconfigstate.objectstate[objectname].order - 1;\r\n const isobject =\r\n document\r\n .getElementById(\"objcontainer\")\r\n .children[objectindex].className.indexOf(\"objcontainer__objcanvas--trans\") > -1;\r\n if (isobject) {\r\n const temproomconfigstate = roomConfigReducerHandlers.toggleMystic({\r\n state: { ...roomconfigstate },\r\n payload: { object: objectname }\r\n });\r\n dispatchRoomConfig({\r\n type: \"TOGGLE_MYSTIC\",\r\n precalc: { ...temproomconfigstate }\r\n });\r\n if (temproomconfigstate.activeview !== roomconfigstate.activeview)\r\n changeView(temproomconfigstate);\r\n }\r\n });\r\n } catch (err) { }\r\n }\r\n }\r\n setinputmoved(false);\r\n };\r\n\r\n const handleInputStart = (e, pointer = true) => {\r\n if (!pointer) return;\r\n let inputoncarpettmp = roomViewHelper.mouseDownTouchStart(e);\r\n setinputoncarpet(inputoncarpettmp);\r\n if (inputoncarpettmp) {\r\n roomViewHelper.updateShadow({ clear: true });\r\n }\r\n };\r\n\r\n const handleinputMove = (e, pointer = true) => {\r\n if (!pointer) return;\r\n const { hoveredAtGizmo } = roomViewHelper.mouseDownTouchMove(e);\r\n if (hoveredAtGizmo) {\r\n inputCanvasRef.current.style.opacity = 1;\r\n } else {\r\n inputCanvasRef.current.style.opacity = 0.5;\r\n }\r\n if (inputoncarpet) {\r\n setinputmoved(true);\r\n setshowWand(false);\r\n removeTransState();\r\n }\r\n };\r\n\r\n const handleInputEnd = (e, pointer = true) => {\r\n if (pointer) {\r\n const opt = roomViewHelper.mouseDownTouchEnd(e);\r\n const { rotation, position } = opt;\r\n let option = carpetOptions;\r\n if (rotation) option = { ...option, rotation };\r\n if (position) option = { ...option, position };\r\n if (position || rotation)\r\n dispatchRoomConfig({\r\n type: roomConfigActions.SET_CARPET_OPTION,\r\n payload: option\r\n });\r\n }\r\n if (inputoncarpet && pointer) {\r\n setinputmoved(false);\r\n setinputoncarpet(false);\r\n } else {\r\n if (!roomViewHelper.moved && roomViewHelper.annotationCanvas) {\r\n const imgData = roomViewHelper.annotationCanvas\r\n .getContext(\"2d\")\r\n .getImageData(e.x, e.y, 1, 1);\r\n if (!imgData.data.every(data => data === 255 || data === 0)) {\r\n roomViewHelper.selectedColorCode = imgData.data.slice(0, 3);\r\n setcolorSelectionPos({ ...e });\r\n }\r\n }\r\n }\r\n };\r\n\r\n const onRoomColorSwatchClick = color => {\r\n setcolorSelectionPos({ x: -1, y: -1 });\r\n roomViewHelper.updateBackground({ dominantColorHex: color.Color });\r\n roomViewHelper.updateMask();\r\n roomViewHelper.updateShadow();\r\n };\r\n\r\n const handleColorSwatchClick = (color, objectname) => {\r\n const temproomconfigstate = roomConfigReducerHandlers.setActiveColor({\r\n state: { ...roomconfigstate },\r\n payload: { object: objectname, color: color.Color }\r\n });\r\n dispatchRoomConfig({\r\n type: \"SET_ACTIVE_COLOR\",\r\n precalc: { ...temproomconfigstate }\r\n });\r\n const objectConfig = roomconfigstate.roomelements.objects[objectname];\r\n const objectPosition = roomconfigstate.activedata[objectname];\r\n const { passive, colorCode } = objectConfig;\r\n if (!passive)\r\n roomViewHelper.updateObjects({ [objectname]: temproomconfigstate.objectstate[objectname] });\r\n else {\r\n if (colorCode) {\r\n roomViewHelper.selectColorCode(colorCode);\r\n } else if (objectPosition) {\r\n const x = inputCanvasRef.current.width * objectPosition[0];\r\n const y = inputCanvasRef.current.height * objectPosition[1];\r\n roomViewHelper.selectColorAnnotation({ x, y });\r\n }\r\n if (colorCode || objectPosition) {\r\n roomViewHelper.updateBackground({\r\n dominantColorHex: color.Color,\r\n retainActiveColors: true\r\n });\r\n roomViewHelper.updateMask();\r\n roomViewHelper.updateShadow();\r\n }\r\n }\r\n };\r\n\r\n const removeTransState = (objectname = \"all\") => {\r\n if (objectname === \"all\") {\r\n var elems = document.getElementsByClassName(\"objcontainer__objcanvas--trans\");\r\n\r\n elems.length > 0 &&\r\n Array.from(elems).forEach(element => {\r\n element.classList.remove(\"objcontainer__objcanvas--trans\");\r\n });\r\n setshowWand(false);\r\n return;\r\n }\r\n let objectindex = roomconfigstate.objectstate[objectname].order - 1;\r\n document\r\n .getElementById(\"objcontainer\")\r\n .children[objectindex].classList.remove(\"objcontainer__objcanvas--trans\");\r\n setshowWand(false);\r\n };\r\n\r\n const handleLightSwitch = objectname => {\r\n const temproomconfigstate = roomConfigReducerHandlers.changeLightSwitch({\r\n state: { ...roomconfigstate },\r\n payload: { object: objectname }\r\n });\r\n dispatchRoomConfig({\r\n type: \"TOGGLE_LIGHT_SWITCH\",\r\n precalc: { ...temproomconfigstate }\r\n });\r\n if (temproomconfigstate.activeview !== roomconfigstate.activeview)\r\n changeView(temproomconfigstate);\r\n };\r\n window.downloadRendered3dIllinIllView = async () => {\r\n if (designDetailState.loading) return;\r\n const mime = \"jpg\";\r\n const downloadName = `${designDetailState.designName} in ${roomName}.${mime}`;\r\n const { dims, roomType = defaultRoomType } = config;\r\n const { width, height } = dims;\r\n const bgCanvas = createCanvas(width, height);\r\n const threeCanvas = createCanvas(width, height);\r\n const maskCanvas = createCanvas(width, height);\r\n const shadowCanvas = createCanvas(width, height);\r\n const container = { clientWidth: width, clientHeight: height };\r\n const inputCanvas = createCanvas(width, height);\r\n const transitionCanvas = createCanvas(width, height);\r\n const objCanvasContainer = document.createElement(\"div\");\r\n roomconfigstate.roomelements.objects &&\r\n Object.keys(roomconfigstate.roomelements.objects).forEach((object, index) => {\r\n const objCanvas = createCanvas(width, height);\r\n objCanvasContainer.appendChild(objCanvas);\r\n });\r\n const canvasConfig = {\r\n bgCanvas,\r\n threeCanvas,\r\n maskCanvas,\r\n shadowCanvas,\r\n container,\r\n inputCanvas,\r\n transitionCanvas,\r\n objCanvasContainer\r\n };\r\n const rh = new RoomViewHelper();\r\n rh.initCanvas(canvasConfig);\r\n rh.initConfig({ baseUrl, config, files }, 1);\r\n\r\n const isinitialized = rh.preinitShot({\r\n shot: roomconfigstate.activeshot,\r\n light: roomconfigstate.activelight,\r\n view: roomconfigstate.activeview\r\n });\r\n if (!isinitialized) {\r\n await Promise.all(rh.initShot());\r\n }\r\n const dominantColorHex = getDominantColor(designDetailState.designDetails);\r\n rh.updateBackground();\r\n if (roomViewHelper.currentActiveColors) {\r\n roomViewHelper.currentActiveColors.forEach(col => {\r\n const { dominantColorHex, annotationColor } = col;\r\n rh.selectedColorCode = annotationColor;\r\n rh.updateBackground({ dominantColorHex, retainActiveColors: true });\r\n });\r\n }\r\n\r\n rh.updateMask();\r\n await rh.updatethreeCanvas(roomconfigstate.activeshot);\r\n rh.setTileDetails(designDetailState.tileDetails);\r\n if (customDesignUrl?.url) {\r\n await rh.renderDesignFromCustomUrl({\r\n customUrl: customDesignUrl.url, physicalWidth: customDesignUrl.physicalWidCms,\r\n physicalHeight: customDesignUrl.physicalHgtCms\r\n });\r\n } else {\r\n await rh.renderDesign({ designDetails, designPath, hash });\r\n }\r\n if (roomType === defaultRoomType) {\r\n const objectConfig = roomViewHelper.threeView.getObjectConfig();\r\n if (objectConfig) {\r\n rh.threeView.carpetMesh.position.copy(objectConfig.position);\r\n rh.threeView.carpetMesh.rotation.copy(objectConfig.rotation);\r\n rh.threeView.render();\r\n }\r\n }\r\n await rh.renderFloor(floor);\r\n await rh.updateShadow();\r\n rh.updateObjects({ ...roomconfigstate.objectstate });\r\n // for (const objectname in roomconfigstate.objectstate) {\r\n // const objectConfig = roomconfigstate.roomelements.objects[objectname];\r\n // const objectPosition = roomconfigstate.activedata[objectname];\r\n // const { passive, colorCode } = objectConfig;\r\n // if (passive) {\r\n // if (colorCode) {\r\n // rh.selectColorCode(colorCode);\r\n // } else if (objectPosition) {\r\n // const x = inputCanvasRef.current.width * objectPosition[0];\r\n // const y = inputCanvasRef.current.height * objectPosition[1];\r\n // rh.selectColorAnnotation({ x, y });\r\n // }\r\n // if (colorCode || objectPosition) {\r\n // await rh.updateBackground({\r\n // dominantColorHex: roomconfigstate.objectstate[objectname].active\r\n // });\r\n // await rh.updateMask();\r\n // await rh.updateShadow();\r\n // }\r\n // }\r\n // }\r\n await makeTransitionCanvas(rh);\r\n if (filterData) {\r\n await applyPresetOnCanvas(transitionCanvas, presetsMapping[filterData]());\r\n }\r\n if (tiltShiftFilter.active) {\r\n await roomViewHelper.tiltShift(transitionCanvas, tiltShiftFilter);\r\n }\r\n rh.downloadRendering(downloadName, mime);\r\n return Promise.resolve();\r\n };\r\n\r\n const getSortedKeys = object => {\r\n let unsortedobjects = object;\r\n const sortedobjectsarr = Object.entries(unsortedobjects)\r\n .sort((a, b) => a[1].order - b[1].order)\r\n .map(el => {\r\n return [el[0]];\r\n });\r\n return sortedobjectsarr;\r\n };\r\n\r\n const reset = () => {\r\n const newCarpetOptions = {\r\n ...carpetOptions,\r\n position: config.scene1.surface1.position,\r\n rotation: config.scene1.surface1.rotation\r\n };\r\n dispatchRoomConfig({\r\n type: roomConfigActions.SET_CARPET_OPTION,\r\n payload: newCarpetOptions\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (resetTrigger > 0) {\r\n reset();\r\n }\r\n }, [resetTrigger]);\r\n\r\n return (\r\n \r\n {roomconfigstate.roomelements.lights &&\r\n Object.keys(roomconfigstate.roomelements.lights).length > 0 && (\r\n changeLight(val)}\r\n lights={Object.keys(roomconfigstate.roomelements.lights)}\r\n handleNightOpacity={(val, int) => changeLight(val, int)}\r\n hasNightSlider={roomViewHelper.hasDimmer}\r\n defaultNightOpacity={roomconfigstate.lightIntensity}\r\n />\r\n )}\r\n setshowWand(false)}\r\n >\r\n \r\n \r\n \r\n \r\n 0\r\n ? \"block\"\r\n : \"none\"\r\n }}\r\n >\r\n {roomconfigstate.objectstate &&\r\n getSortedKeys(roomconfigstate.objectstate).map((object, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n handleInputStart(\r\n e,\r\n roomData.category.toLowerCase() !== \"carpet in the making\" &&\r\n roomData.category.toLowerCase() !== \"photographic views\"\r\n )\r\n }\r\n onMove={e =>\r\n handleinputMove(\r\n e,\r\n roomData.category.toLowerCase() !== \"carpet in the making\" &&\r\n roomData.category.toLowerCase() !== \"photographic views\"\r\n )\r\n }\r\n onEnd={e =>\r\n handleInputEnd(\r\n e,\r\n roomData.category.toLowerCase() !== \"carpet in the making\" &&\r\n roomData.category.toLowerCase() !== \"photographic views\"\r\n )\r\n }\r\n trackMouseDown={false}\r\n />\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {/* teleportation points in a shot */}\r\n {roomconfigstate.teleportpoints &&\r\n Object.keys(roomconfigstate.teleportpoints).map((shotkey, index) => {\r\n return (\r\n removeTransState()}\r\n style={{\r\n left: `${roomconfigstate.teleportpoints[shotkey][0]}%`,\r\n top: `${roomconfigstate.teleportpoints[shotkey][1]}%`\r\n }}\r\n >\r\n changeShot(shotkey)}\r\n className=\"circular-button\"\r\n size=\"small\"\r\n />\r\n \r\n );\r\n })}\r\n\r\n {/* Active objects trigger points in a shot */}\r\n \r\n\r\n {/* Light Sources Switch buttons in a Light Setting */}\r\n {Object.keys(roomconfigstate.lightswitchpoints).map((lightsourcekey, index) => {\r\n return (\r\n handleLightSwitch(lightsourcekey)}\r\n onMouseOver={() => removeTransState(lightsourcekey)}\r\n >\r\n );\r\n })}\r\n\r\n {/* {tiltShiftFilter.active && (\r\n \r\n settiltShiftFilter({\r\n ...tiltShiftFilter,\r\n options: { ...tiltShiftFilter.options, dontBlur: val }\r\n })\r\n }\r\n />\r\n )} */}\r\n \r\n \r\n {/* */}\r\n \r\n {\r\n dispatchRoomConfig({\r\n type: roomConfigActions.SET_SHOW_VP_DIALOG,\r\n payload: false\r\n });\r\n }}\r\n handleThumbClick={shot => {\r\n changeShot(shot);\r\n }}\r\n />\r\n {roomData && }\r\n \r\n );\r\n};\r\n\r\nexport default IllustrationView;\r\n","import { Classes, Overlay, Popover } from \"@blueprintjs/core\";\r\nimport { applyPresetOnCanvas, presetsMapping } from \"instagram-filters\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useMount } from \"react-use\";\r\nimport AppProvider from \"../../api/appProvider\";\r\nimport { useWindowSize } from \"../../hooks\";\r\nimport {\r\n designDetailActions,\r\n useDesignDetailState,\r\n useDispatchDesignDetail\r\n} from \"../../reducers/designdetails.reducer\";\r\nimport { createCanvas, downloadImageData } from \"../../utils/canvasutils\";\r\nimport { readImage } from \"../../utils/utils\";\r\nimport { getDominantColor } from \"../IllustrationView\";\r\nimport { useRoomConfigState } from \"../IllustrationView/roomconfig.reducer\";\r\nimport RoomViewHelper from \"../IllustrationView/roomviewhelper\";\r\nimport ColorSelectionBox from \"../organisms/ColorSelectionBox\";\r\nimport { makePDf } from \"./pdfcreator\";\r\n\r\nlet w, h;\r\n\r\nconst mockHtml = `\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n`;\r\nconst mockHtml1 = `\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n`;\r\nconst mockHtml_FoldedView = `\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n`;\r\nconst mockHtml_PerspectiveView = `\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n`;\r\nconst mockHtml_BedroomModern = `\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n`;\r\nconst mockHtml_FoldedBack = `\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n`;\r\nconst mockHtml_ActBody = `\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n`;\r\nconst mockHtml_artgallery = `\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n
10' x 10'
\r\n
\r\n\r\n\r\n
\r\n
\r\n`;\r\nconst mockHtml_BabyFeet = `\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
10' x 10'
\r\n\r\n
\r\n
\r\n`;\r\nconst mockHtml_BookWorm = `\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n`;\r\nconst mockHtml_Bodypaint = `\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n`;\r\n\r\nlet catalogProps = [\r\n {\r\n id: \"ors_design_name\",\r\n type: \"DESIGN_NAME\"\r\n },\r\n {\r\n id: \"ors_design_area\",\r\n type: \"DESIGN_AREA\"\r\n },\r\n {\r\n id: \"ors_room_view\",\r\n type: \"ROOM_VIEW\",\r\n path: \"Rooms/Catalogs/Just Married.crf3d\"\r\n },\r\n {\r\n id: \"ors_logo_area\",\r\n type: \"LOGO_AREA\"\r\n }\r\n];\r\n\r\nconst areaComponentref = {\r\n DESIGN_NAME: \"DESIGN_NAME\",\r\n DESIGN_AREA: \"DESIGN_AREA\",\r\n ROOM_VIEW: \"ROOM_VIEW\",\r\n LOGO_AREA: \"LOGO_AREA\"\r\n};\r\n\r\nconst CatalogUrl = \"\";\r\nlet catalogRoomView = new RoomViewHelper();\r\n\r\nconst CatalogView = props => {\r\n const { active, roomData, filterData = null } = props;\r\n const designDetailState = useDesignDetailState();\r\n const dispatchDesignDetails = useDispatchDesignDetail();\r\n const [catalogPropsState, setcatalogPropsState] = useState([...catalogProps]);\r\n const [renderedDesign, setrenderedDesign] = useState(null);\r\n const [renderedRoom, setrenderedRoom] = useState(null);\r\n const [colorSelectionPos, setcolorSelectionPos] = useState({ x: -1, y: -1 });\r\n const [selectedHtml, setselectedHtml] = useState(null);\r\n const [showTransition, setshowTransition] = useState(false);\r\n\r\n const roomconfigstate = useRoomConfigState();\r\n\r\n const { customDesignUrl } = roomconfigstate;\r\n const { designDetails } = designDetailState;\r\n const windowsize = useWindowSize();\r\n\r\n useMount(() => {\r\n const canvasConfig = {\r\n bgCanvas: document.createElement(\"canvas\"),\r\n threeCanvas: document.createElement(\"canvas\"),\r\n maskCanvas: document.createElement(\"canvas\"),\r\n shadowCanvas: document.createElement(\"canvas\"),\r\n transitionCanvas: document.createElement(\"canvas\"),\r\n container: {\r\n clientWidth: document.getElementById(\"catalogview\").offsetWidth,\r\n clientHeight: document.getElementById(\"catalogview\").offsetHeight\r\n },\r\n inputCanvas: document.createElement(\"canvas\"),\r\n objCanvasContainer: document.createElement(\"div\")\r\n };\r\n catalogRoomView.initCanvas(canvasConfig);\r\n });\r\n\r\n useEffect(() => {\r\n sizeContainers({});\r\n }, [windowsize]);\r\n\r\n const sizeContainers = () => {\r\n catalogRoomView.container = {\r\n clientWidth: document.getElementById(\"catalogview\").offsetWidth,\r\n clientHeight: document.getElementById(\"catalogview\").offsetHeight\r\n };\r\n catalogRoomView.resize({\r\n width: catalogRoomView.container.clientWidth,\r\n height: catalogRoomView.container.clientHeight\r\n });\r\n // const at_catalog_layout = document.getElementById(\"at_catalog_layout\");\r\n // const catalog_roomcanvas = document.getElementById(\"catalog-roomcanvas\");\r\n // if (at_catalog_layout && catalog_roomcanvas) {\r\n // at_catalog_layout.style.width =\r\n // catalog_roomcanvas.offsetWidth + \"px\";\r\n // at_catalog_layout.style.height =\r\n // catalog_roomcanvas.offsetHeight + \"px\";\r\n // }\r\n };\r\n\r\n useEffect(() => {\r\n if (!active) return;\r\n if (!filterData) {\r\n let effectcanvas = document.getElementById(\"catalog-effectcanvas\");\r\n if (effectcanvas && effectcanvas.width) {\r\n effectcanvas.style.display = \"none\";\r\n effectcanvas.getContext(\"2d\").clearRect(0, 0, effectcanvas.width, effectcanvas.height);\r\n }\r\n let designcanvas = document.getElementById(\"catalog-designcanvas\");\r\n if (designcanvas) {\r\n designcanvas.style.opacity = 1;\r\n }\r\n } else {\r\n applyEffects();\r\n }\r\n }, [filterData]);\r\n\r\n const applyEffects = async () => {\r\n let roomcanvas = document.getElementById(\"catalog-roomcanvas\");\r\n let designcanvas = document.getElementById(\"catalog-designcanvas\");\r\n if (!roomcanvas) return;\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = roomcanvas.width;\r\n canvas.height = roomcanvas.height;\r\n canvas.getContext(\"2d\").drawImage(roomcanvas, 0, 0);\r\n\r\n if (designcanvas && designcanvas.width > 0) {\r\n let dx =\r\n ((designcanvas.getBoundingClientRect().left - roomcanvas.getBoundingClientRect().left) /\r\n roomcanvas.offsetWidth) *\r\n roomcanvas.width;\r\n let dy =\r\n ((designcanvas.getBoundingClientRect().top - roomcanvas.getBoundingClientRect().top) /\r\n roomcanvas.offsetHeight) *\r\n roomcanvas.height;\r\n canvas\r\n .getContext(\"2d\")\r\n .drawImage(\r\n designcanvas,\r\n dx,\r\n dy,\r\n (designcanvas.offsetWidth / roomcanvas.offsetWidth) * roomcanvas.width,\r\n (designcanvas.offsetHeight / roomcanvas.offsetHeight) * roomcanvas.height\r\n );\r\n }\r\n await applyPresetOnCanvas(canvas, presetsMapping[filterData]());\r\n let effectcanvas = document.getElementById(\"catalog-effectcanvas\");\r\n effectcanvas.getContext(\"2d\").drawImage(canvas, 0, 0);\r\n effectcanvas.style.display = \"block\";\r\n if (designcanvas && designcanvas.width > 0) designcanvas.style.opacity = 0;\r\n };\r\n\r\n useEffect(() => {\r\n if (roomData && designDetails && active) {\r\n if (\r\n !(\r\n catalogRoomView.designDetails === designDetails &&\r\n catalogRoomView.roomData &&\r\n catalogRoomView.roomData.config === roomData.config\r\n )\r\n ) {\r\n setshowTransition(true);\r\n if (catalogRoomView.roomData && catalogRoomView.roomData.config !== roomData.config) {\r\n catalogRoomView.clearAll();\r\n }\r\n renderHtml();\r\n } else if (customDesignUrl?.url) {\r\n renderHtml();\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [roomData, designDetails, customDesignUrl, active]);\r\n\r\n function blobToFile(theBlob, fileName) {\r\n return new File([theBlob], fileName, {\r\n lastModified: new Date().getTime(),\r\n type: theBlob.type\r\n });\r\n }\r\n const renderHtml = async () => {\r\n dispatchDesignDetails({\r\n type: designDetailActions.SET_LOADING,\r\n payload: true\r\n });\r\n document.getElementById(\"catalogview\").innerHTML = \"\";\r\n if (roomData.config.name === \"Just Married\") {\r\n document.getElementById(\"catalogview\").insertAdjacentHTML(\"afterbegin\", mockHtml);\r\n setselectedHtml(mockHtml);\r\n } else if (roomData.config.name === \"Art Gallery\") {\r\n document.getElementById(\"catalogview\").insertAdjacentHTML(\"afterbegin\", mockHtml_artgallery);\r\n setselectedHtml(mockHtml_artgallery);\r\n } else if (roomData.config.name === \"Baby Feet\") {\r\n document.getElementById(\"catalogview\").insertAdjacentHTML(\"afterbegin\", mockHtml_BabyFeet);\r\n setselectedHtml(mockHtml_BabyFeet);\r\n } else if (roomData.config.name === \"Book Worm\") {\r\n document.getElementById(\"catalogview\").insertAdjacentHTML(\"afterbegin\", mockHtml_BookWorm);\r\n setselectedHtml(mockHtml_BookWorm);\r\n } else if (roomData.config.name === \"Bodypaint\") {\r\n document.getElementById(\"catalogview\").insertAdjacentHTML(\"afterbegin\", mockHtml_Bodypaint);\r\n setselectedHtml(mockHtml_Bodypaint);\r\n } else if (roomData.config.name === \"Act Body\") {\r\n document.getElementById(\"catalogview\").insertAdjacentHTML(\"afterbegin\", mockHtml_ActBody);\r\n setselectedHtml(mockHtml_ActBody);\r\n } else if (roomData.config.name === \"Folded View\") {\r\n document.getElementById(\"catalogview\").insertAdjacentHTML(\"afterbegin\", mockHtml_FoldedView);\r\n setselectedHtml(mockHtml_FoldedView);\r\n } else if (roomData.config.name === \"Perspective View\") {\r\n document\r\n .getElementById(\"catalogview\")\r\n .insertAdjacentHTML(\"afterbegin\", mockHtml_PerspectiveView);\r\n setselectedHtml(mockHtml_PerspectiveView);\r\n } else if (roomData.config.name === \"Bedroom Modern\") {\r\n document\r\n .getElementById(\"catalogview\")\r\n .insertAdjacentHTML(\"afterbegin\", mockHtml_BedroomModern);\r\n setselectedHtml(mockHtml_BedroomModern);\r\n } else if (roomData.config.name === \"Folded Back\") {\r\n document.getElementById(\"catalogview\").insertAdjacentHTML(\"afterbegin\", mockHtml_FoldedBack);\r\n setselectedHtml(mockHtml_FoldedBack);\r\n } else {\r\n document.getElementById(\"catalogview\").insertAdjacentHTML(\"afterbegin\", mockHtml1);\r\n setselectedHtml(mockHtml1);\r\n }\r\n const catalogPropsTemp = [...catalogProps];\r\n let count = catalogPropsState.length;\r\n const resolveThis = () => {\r\n count--;\r\n if (count === 0) {\r\n setcatalogPropsState([...catalogPropsTemp]);\r\n // document.getElementById(\"at_catalog_layout\").style.width =\r\n // document.getElementById(\"catalog-roomcanvas\").offsetWidth + \"px\";\r\n setTimeout(() => {\r\n dispatchDesignDetails({\r\n type: designDetailActions.SET_LOADING,\r\n payload: false\r\n });\r\n setshowTransition(false);\r\n }, 400);\r\n }\r\n };\r\n\r\n catalogPropsState.forEach(async (component, index) => {\r\n if (component.type === areaComponentref.DESIGN_NAME) {\r\n document\r\n .getElementById(component.id)\r\n .insertAdjacentHTML(\"afterbegin\", `
${designDetailState.designName}
`);\r\n catalogPropsTemp[index].value = designDetailState.designName;\r\n resolveThis();\r\n } else if (component.type === areaComponentref.DESIGN_AREA) {\r\n const designfile = await renderDesign(component);\r\n catalogPropsTemp[index].value = `${CatalogUrl}/Data/${designfile.name}`;\r\n setrenderedDesign(designfile);\r\n resolveThis();\r\n } else if (component.type === areaComponentref.ROOM_VIEW) {\r\n const roomfile = await renderRoomArea(component);\r\n catalogPropsTemp[index].value = `${CatalogUrl}/Data/${roomfile.name}`;\r\n setrenderedRoom(roomfile);\r\n resolveThis();\r\n } else if (component.type === areaComponentref.LOGO_AREA) {\r\n catalogPropsTemp[index].value = await renderLogo(component);\r\n resolveThis();\r\n }\r\n });\r\n };\r\n\r\n const renderRoomArea = component => {\r\n return new Promise(async resolve => {\r\n const roomImgBlob = await getIllustration();\r\n\r\n let roomimg = new Image();\r\n roomimg.onload = () => {\r\n w = roomimg.width;\r\n h = roomimg.height;\r\n let roomcanvas = createCanvas(roomimg.width, roomimg.height);\r\n roomcanvas.setAttribute(\"id\", \"catalog-roomcanvas\");\r\n let effectcanvas = createCanvas(roomimg.width, roomimg.height);\r\n effectcanvas.setAttribute(\"id\", \"catalog-effectcanvas\");\r\n let offsetX = 0;\r\n if (roomData.config.name === \"Folded Back\") {\r\n offsetX = 0.3 * w;\r\n }\r\n roomcanvas.getContext(\"2d\").drawImage(roomimg, offsetX, 0);\r\n const transitionCanvas = document.getElementById(\"catalog-transition-canvas\");\r\n transitionCanvas.width = roomimg.width;\r\n transitionCanvas.height = roomimg.height;\r\n transitionCanvas.getContext(\"2d\").drawImage(roomimg, 0, 0);\r\n\r\n // if (roomimg.width < roomimg.height) {\r\n // roomcanvas.style.cssText = `position: absolute;max-width: 100%;top: -9999px;right: -9999px;left:-9999px;bottom: -9999px;margin: auto;`;\r\n // } else {\r\n // roomcanvas.style.cssText = `position: absolute;max-height: 100%;top: -9999px;right: -9999px;left:-9999px;bottom: -9999px;margin: auto;`;\r\n // }\r\n roomcanvas.addEventListener(\"click\", e =>\r\n onCanvasClick(e, roomcanvas.getBoundingClientRect())\r\n );\r\n document.getElementById(component.id).innerHTML = \"\";\r\n document.getElementById(component.id).appendChild(roomcanvas);\r\n document.getElementById(component.id).appendChild(effectcanvas);\r\n const roomname = `${designDetailState.designName.replace(/ /g, \"\")}_room-view.png`;\r\n const file = blobToFile(roomImgBlob, roomname);\r\n resolve(file);\r\n };\r\n roomimg.src = URL.createObjectURL(roomImgBlob);\r\n });\r\n };\r\n\r\n const renderLogo = async component => {\r\n let logo = new Image();\r\n\r\n logo.onload = () => {\r\n logo.style.cssText = `max-width: 100%;max-height: 100%;`;\r\n document.getElementById(component.id).appendChild(logo);\r\n };\r\n const logosrc = `${AppProvider.domain}${window.InterfaceElements.LogoUrl}`;\r\n logo.src = logosrc;\r\n\r\n return logosrc;\r\n };\r\n\r\n const renderDesign = async component => {\r\n let designcanvas;\r\n if (customDesignUrl?.url) {\r\n let image = await readImage(customDesignUrl.url);\r\n designcanvas = createCanvas(image.width, image.height);\r\n designcanvas.getContext(\"2d\").drawImage(image, 0, 0);\r\n } else {\r\n designcanvas = await AppProvider.getRenderedDesign({\r\n designDetails: designDetailState.designDetails,\r\n fullpath: designDetailState.fullpath,\r\n hash: designDetailState.hash\r\n });\r\n }\r\n // designcanvas.height = designcanvas.height * designDetailState.designDetails.KLRatio;\r\n designcanvas.style.cssText = `max-width: 100%;max-height: 100%;transform:translateY(${((designDetailState\r\n .designDetails.KLRatio -\r\n 1) /\r\n 2) *\r\n 100}%) scaleY(${designDetailState.designDetails.KLRatio})`;\r\n designcanvas.setAttribute(\"id\", \"catalog-designcanvas\");\r\n document.getElementById(component.id).appendChild(designcanvas);\r\n return new Promise(resolve => {\r\n designcanvas.toBlob(function (blob) {\r\n const designname = `${designDetailState.designName.replace(/ /g, \"\")}_visualization.png`;\r\n const file = blobToFile(blob, designname);\r\n resolve(file);\r\n });\r\n });\r\n };\r\n\r\n window.downloadRenderedCatalog_old = async () => {\r\n let roomimg = new Image();\r\n\r\n const drawImg = async (canvas, id, blob) => {\r\n const width = canvas.width;\r\n const height = canvas.height;\r\n return new Promise(resolve => {\r\n let designimg = new Image();\r\n designimg.crossOrigin = \"anonymous\";\r\n designimg.onload = () => {\r\n const elementW = document.getElementById(id).style.width;\r\n const elementH = document.getElementById(id).style.height;\r\n const elementL = document.getElementById(id).style.left;\r\n const elementT = document.getElementById(id).style.top;\r\n let w = elementW.includes(\"%\")\r\n ? (Number(elementW.replace(\"%\", \"\")) * width) / 100\r\n : Number(elementW.replace(\"px\", \"\"));\r\n let h = elementH.includes(\"%\")\r\n ? (Number(elementH.replace(\"%\", \"\")) * height) / 100\r\n : Number(elementH.replace(\"px\", \"\"));\r\n let left = elementL.includes(\"%\")\r\n ? (Number(elementL.replace(\"%\", \"\")) * width) / 100\r\n : Number(elementL.replace(\"px\", \"\"));\r\n let top = elementT.includes(\"%\")\r\n ? (Number(elementT.replace(\"%\", \"\")) * height) / 100\r\n : Number(elementT.replace(\"px\", \"\"));\r\n if (designimg.height > designimg.width) {\r\n canvas\r\n .getContext(\"2d\")\r\n .drawImage(\r\n designimg,\r\n 0,\r\n 0,\r\n designimg.width,\r\n designimg.height,\r\n left,\r\n top,\r\n (designimg.width * h) / designimg.height,\r\n h\r\n );\r\n } else {\r\n canvas\r\n .getContext(\"2d\")\r\n .drawImage(\r\n designimg,\r\n 0,\r\n 0,\r\n designimg.width,\r\n designimg.height,\r\n left,\r\n top,\r\n w,\r\n (w * designimg.height) / designimg.width\r\n );\r\n }\r\n resolve();\r\n };\r\n designimg.src = typeof blob === \"string\" ? blob : URL.createObjectURL(blob);\r\n });\r\n };\r\n\r\n roomimg.onload = async () => {\r\n const height = roomimg.height;\r\n const width =\r\n (Number(document.getElementById(\"at_catalog_layout\").style.width.replace(\"vh\", \"\")) / 100) *\r\n roomimg.height;\r\n const canvas = createCanvas(width, height);\r\n canvas\r\n .getContext(\"2d\")\r\n .drawImage(roomimg, (roomimg.width - width) / 2, 0, width, height, 0, 0, width, height);\r\n await drawImg(canvas, \"ors_design_area\", renderedDesign);\r\n await drawImg(\r\n canvas,\r\n \"ors_logo_area\",\r\n `${AppProvider.domain}${window.InterfaceElements.LogoUrl}`\r\n );\r\n canvas.getContext(\"2d\").font =\r\n (document.getElementById(\"ors_design_name\").offsetHeight * height) /\r\n document.getElementById(\"at_catalog_layout\").offsetHeight +\r\n \"px \" +\r\n document.getElementById(\"ors_design_name\").style.fontFamily;\r\n canvas.getContext(\"2d\").fillStyle = document.getElementById(\"ors_design_name\").style.color;\r\n canvas.getContext(\"2d\").textAlign = \"right\";\r\n canvas\r\n .getContext(\"2d\")\r\n .fillText(\r\n designDetailState.designName,\r\n (Number(document.getElementById(\"ors_design_name\").style.width.replace(\"%\", \"\")) *\r\n width) /\r\n 100,\r\n (Number(document.getElementById(\"ors_design_name\").style.top.replace(\"%\", \"\")) * height) /\r\n 100\r\n );\r\n const mime = \"jpg\";\r\n const downloadName = `${designDetailState.designName} in ${roomData.Name}.${mime}`;\r\n downloadImageData(canvas, downloadName, \"image/\" + mime);\r\n };\r\n roomimg.src = URL.createObjectURL(renderedRoom);\r\n };\r\n\r\n // const downlodPDF = () => {\r\n // AppProvider.downloadPdf({\r\n // url: CatalogUrl,\r\n // catalogProps: catalogPropsState,\r\n // rendereddesign: renderedDesign,\r\n // renderedroom: renderedRoom\r\n // });\r\n // };\r\n\r\n const getIllustration = async () => {\r\n // if (designDetailState.loading) return;\r\n const { dims } = roomData.config;\r\n // const { dims } = {...roomData.config, roomType:\"roomview\", designinroomformat:\"roomview\"};\r\n const { width, height } = dims;\r\n catalogRoomView.bgCanvas.width = width;\r\n catalogRoomView.bgCanvas.height = height;\r\n catalogRoomView.threeCanvas.width = width;\r\n catalogRoomView.threeCanvas.height = height;\r\n catalogRoomView.maskCanvas.width = width;\r\n catalogRoomView.maskCanvas.height = height;\r\n catalogRoomView.shadowCanvas.width = width;\r\n catalogRoomView.shadowCanvas.height = height;\r\n catalogRoomView.inputCanvas.width = width;\r\n catalogRoomView.inputCanvas.height = height;\r\n catalogRoomView.transitionCanvas.width = width;\r\n catalogRoomView.transitionCanvas.height = height;\r\n catalogRoomView.initConfig({\r\n baseUrl: roomData.baseUrl,\r\n config: roomData.config,\r\n // config: {...roomData.config, roomType:\"roomview\", designinroomformat:\"roomview\"},\r\n files: roomData.Files,\r\n local: roomData.fromlocal\r\n });\r\n const activeshot = Object.keys(roomData.config.roomElements.shots)[0];\r\n const isinitialized = catalogRoomView.preinitShot({\r\n shot: activeshot,\r\n light: null,\r\n view: null\r\n });\r\n if (!isinitialized) {\r\n await Promise.all(catalogRoomView.initShot());\r\n }\r\n catalogRoomView.resetOnDesignChange();\r\n const dominantColorHex = getDominantColor(designDetailState.designDetails);\r\n catalogRoomView.realTimeDynamicRendering = true;\r\n catalogRoomView.updateBackground({ dominantColorHex });\r\n catalogRoomView.updateMask();\r\n // if (\r\n // catalogRoomView.designPath !== designDetailState.designPath\r\n // ) {\r\n // const tileData = await AppProvider.fetchTileDetails({\r\n // file: designDetailState.designPath\r\n // });\r\n // dispatchDesignDetails({\r\n // type: designDetailActions.SET_TILE_DETAILS,\r\n // payload: tileData\r\n // });\r\n // catalogRoomView.setTileDetails(tileData);\r\n // }\r\n await catalogRoomView.updatethreeCanvas(activeshot);\r\n catalogRoomView.setTileDetails(designDetailState.tileDetails);\r\n if (customDesignUrl?.url) {\r\n await catalogRoomView.renderDesignFromCustomUrl({ customUrl: customDesignUrl.url });\r\n } else {\r\n await catalogRoomView.renderDesign({\r\n designDetails: designDetailState.designDetails,\r\n designPath: designDetailState.fullpath,\r\n hash: designDetailState.hash\r\n });\r\n }\r\n\r\n await catalogRoomView.updateShadow();\r\n await catalogRoomView.makeTransitionCanvas({\r\n objects: {},\r\n canvas: null,\r\n resetDimensions: false\r\n });\r\n\r\n return new Promise(resolve => {\r\n catalogRoomView.transitionCanvas.toBlob(blob => {\r\n resolve(blob);\r\n });\r\n });\r\n };\r\n\r\n const onCanvasClick = (event, rect) => {\r\n const { clientX, clientY } = event;\r\n const { top, left, width, height } = rect;\r\n const x = clientX - left;\r\n const y = clientY - top;\r\n if (!catalogRoomView.moved && catalogRoomView.annotationCanvas) {\r\n const imgData = catalogRoomView.annotationCanvas.getContext(\"2d\").getImageData(x, y, 1, 1);\r\n if (!imgData.data.every(data => data === 255 || data === 0)) {\r\n catalogRoomView.selectedColorCode = imgData.data.slice(0, 3);\r\n setcolorSelectionPos({ x: x, y: y });\r\n }\r\n }\r\n };\r\n\r\n const onRoomColorSwatchClick = async color => {\r\n setcolorSelectionPos({ x: -1, y: -1 });\r\n catalogRoomView.updateBackground({ dominantColorHex: color.Color });\r\n catalogRoomView.updateMask();\r\n await catalogRoomView.updateShadow();\r\n await catalogRoomView.makeTransitionCanvas({ objects: {}, canvas: null });\r\n catalogRoomView.transitionCanvas.toBlob(roomImgBlob => {\r\n let roomimg = new Image();\r\n roomimg.onload = () => {\r\n let roomcanvas = createCanvas(roomimg.width, roomimg.height);\r\n roomcanvas.getContext(\"2d\").drawImage(roomimg, 0, 0);\r\n\r\n // if (roomimg.width < roomimg.height) {\r\n // roomcanvas.style.cssText = `position: absolute;max-width: 100%;top: -9999px;right: -9999px;left:-9999px;bottom: -9999px;margin: auto;`;\r\n // } else {\r\n // roomcanvas.style.cssText = `position: absolute;max-height: 100%;top: -9999px;right: -9999px;left:-9999px;bottom: -9999px;margin: auto;`;\r\n // }\r\n roomcanvas.addEventListener(\"click\", e =>\r\n onCanvasClick(e, roomcanvas.getBoundingClientRect())\r\n );\r\n let index = -1;\r\n catalogPropsState.forEach((element, i) => {\r\n if (element.type === areaComponentref.ROOM_VIEW) {\r\n index = i;\r\n }\r\n });\r\n document.getElementById(catalogPropsState[index].id).innerHTML = \"\";\r\n document.getElementById(catalogPropsState[index].id).appendChild(roomcanvas);\r\n const roomname = `${designDetailState.designName.replace(/ /g, \"\")}_room-view.png`;\r\n const file = blobToFile(roomImgBlob, roomname);\r\n let catalogPropsTemp = [...catalogPropsState];\r\n catalogPropsTemp[index].value = `${CatalogUrl}/Data/${file.name}`;\r\n setcatalogPropsState([...catalogPropsTemp]);\r\n setrenderedRoom(file);\r\n };\r\n roomimg.src = URL.createObjectURL(roomImgBlob);\r\n });\r\n };\r\n\r\n window.downloadRenderedCatalog = async () => {\r\n let wd = document.getElementById(\"at_catalog_layout\").getBoundingClientRect().width;\r\n let ht = document.getElementById(\"at_catalog_layout\").getBoundingClientRect().height;\r\n let roomcanvas = document.getElementById(\"catalog-roomcanvas\");\r\n let effectcanvas = document.getElementById(\"catalog-effectcanvas\");\r\n if (filterData) {\r\n roomcanvas.style.display = \"none\";\r\n document.getElementById(\"catalogview\").appendChild(roomcanvas);\r\n } else {\r\n effectcanvas.style.display = \"none\";\r\n document.getElementById(\"catalogview\").appendChild(effectcanvas);\r\n }\r\n effectcanvas.style.transform = \"none\";\r\n const downloadName = `${designDetailState.designName} in ${roomData.config.name}`;\r\n return new Promise(resolve => {\r\n makePDf(\"at_catalog_layout\", wd, ht, downloadName, () => {\r\n if (filterData) {\r\n effectcanvas.before(roomcanvas);\r\n } else {\r\n roomcanvas.after(effectcanvas);\r\n }\r\n effectcanvas.style.transform = \"translateY(calc(-100% - 4px))\";\r\n if (filterData) {\r\n effectcanvas.style.display = \"block\";\r\n }\r\n roomcanvas.style.display = \"block\";\r\n resolve();\r\n });\r\n });\r\n };\r\n\r\n return (\r\n \r\n\r\n
\r\n\r\n
\r\n setcolorSelectionPos({ x: -1, y: -1 })}\r\n isOpen={colorSelectionPos.x > -1}\r\n className={Classes.OVERLAY_SCROLL_CONTAINER}\r\n hasBackdrop={false}\r\n lazy={false}\r\n // usePortal={true}\r\n // portalContainer={document.getElementById(\"catalogview\")}\r\n >\r\n -1 ? \"block\" : \"none\"}`,\r\n position: \"absolute\",\r\n transform: \"translate(0%, -50%)\",\r\n pointerEvents: \"all\"\r\n }}\r\n onColorSwatchClick={(color, e) => onRoomColorSwatchClick(color)}\r\n onClose={() => setcolorSelectionPos({ x: -1, y: -1 })}\r\n />\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default CatalogView;\r\n","import { jsPDF } from \"jspdf\";\r\nexport const makePDf = (id, width, height, name, callback) => {\r\n const element = document.getElementById(id);\r\n // var doc = new jsPDF('p', 'pt', 'a4');\r\n let o = width > height ? \"l\" : \"p\";\r\n var doc = new jsPDF({\r\n orientation: o,\r\n unit: \"px\",\r\n format: [width, height]\r\n // putOnlyUsedFonts: true,\r\n // floatPrecision: 16, // or \"smart\", default is 16,\r\n // hotfixes: [\"px_scaling\"]\r\n });\r\n\r\n doc.html(element, {\r\n callback: function(doc) {\r\n let count = doc.internal.getNumberOfPages();\r\n if (count > 1) {\r\n doc.deletePage(count);\r\n }\r\n doc.save(`${name}.pdf`);\r\n if (callback) callback();\r\n },\r\n x: 0,\r\n y: 0,\r\n margin: [0, 0, 0, 0]\r\n });\r\n};\r\n\r\n// var doc = new jsPDF({\r\n// orientation: \"p\",\r\n// unit: \"px\",\r\n// format: [width, height],\r\n// putOnlyUsedFonts: true,\r\n// floatPrecision: 16, // or \"smart\", default is 16,\r\n// hotfixes: [\"px_scaling\"]\r\n// });\r\n","import {\r\n Box3, Clock, Color,\r\n DirectionalLight, PointLight,\r\n PerspectiveCamera,\r\n Raycaster,\r\n Scene, Vector3, WebGLRenderer, AmbientLight,\r\n HemisphereLight,\r\n} from \"three\";\r\nimport * as THREE from \"three\";\r\nimport { FBXLoader } from \"three/examples/jsm/loaders/FBXLoader\";\r\nimport { convertArrIntoRad, convertUnit, createVector, makeUrl, readImage, resizeKeepingAspect } from \"../../utils/utils\";\r\nimport CameraControls from \"../IllustrationView/cameracontrols/camera-controls\";\r\nimport TileCanvas from \"../../tilecanvasnew\";\r\nimport { createCanvas, downloadImageData } from \"../../utils/canvasutils\";\r\n\r\nCameraControls.install({ THREE: THREE });\r\nconst tileCanvas = new TileCanvas();\r\n\r\nclass ResourceTrackerCs {\r\n constructor() {\r\n this.resources = new Set();\r\n this.resourceslocal = new Set();\r\n }\r\n track(resource) {\r\n if (!resource) {\r\n return resource;\r\n }\r\n // handle children and when material is an array of materials or\r\n // uniform is array of textures\r\n if (Array.isArray(resource)) {\r\n resource.forEach(resource => this.track(resource));\r\n return resource;\r\n }\r\n\r\n if (resource.dispose || resource instanceof THREE.Object3D) {\r\n this.resources.add(resource);\r\n }\r\n if (resource instanceof THREE.Object3D) {\r\n this.track(resource.geometry);\r\n this.track(resource.material);\r\n this.track(resource.children);\r\n } else if (resource instanceof THREE.Material) {\r\n // We have to check if there are any textures on the material\r\n for (const value of Object.values(resource)) {\r\n if (value instanceof THREE.Texture) {\r\n this.track(value);\r\n }\r\n }\r\n // We also have to check if any uniforms reference textures or arrays of textures\r\n if (resource.uniforms) {\r\n for (const value of Object.values(resource.uniforms)) {\r\n if (value) {\r\n const uniformValue = value.value;\r\n if (uniformValue instanceof THREE.Texture ||\r\n Array.isArray(uniformValue)) {\r\n this.track(uniformValue);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return resource;\r\n }\r\n tracklocal(resource) {\r\n if (!resource) {\r\n return resource;\r\n }\r\n // handle children and when material is an array of materials or\r\n // uniform is array of textures\r\n if (Array.isArray(resource)) {\r\n resource.forEach(resource => this.tracklocal(resource));\r\n return resource;\r\n }\r\n\r\n if (resource.dispose || resource instanceof THREE.Object3D) {\r\n this.resourceslocal.add(resource);\r\n }\r\n if (resource instanceof THREE.Object3D) {\r\n this.tracklocal(resource.geometry);\r\n this.tracklocal(resource.material);\r\n this.tracklocal(resource.children);\r\n } else if (resource instanceof THREE.Material) {\r\n // We have to check if there are any textures on the material\r\n for (const value of Object.values(resource)) {\r\n if (value instanceof THREE.Texture) {\r\n this.tracklocal(value);\r\n }\r\n }\r\n // We also have to check if any uniforms reference textures or arrays of textures\r\n if (resource.uniforms) {\r\n for (const value of Object.values(resource.uniforms)) {\r\n if (value) {\r\n const uniformValue = value.value;\r\n if (uniformValue instanceof THREE.Texture ||\r\n Array.isArray(uniformValue)) {\r\n this.tracklocal(uniformValue);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return resource;\r\n }\r\n untrack(resource) {\r\n this.resources.delete(resource);\r\n }\r\n untracklocal(resource) {\r\n this.resourceslocal.delete(resource);\r\n }\r\n dispose() {\r\n const allresources = new Set([...this.resources, ...this.resourceslocal])\r\n for (const resource of allresources) {\r\n if (resource instanceof THREE.Object3D) {\r\n if (resource.parent) {\r\n resource.parent.remove(resource);\r\n }\r\n }\r\n if (resource.dispose) {\r\n resource.dispose();\r\n }\r\n }\r\n this.resources.clear();\r\n this.resourceslocal.clear();\r\n }\r\n disposelocal() {\r\n for (const resource of this.resourceslocal) {\r\n if (resource instanceof THREE.Object3D) {\r\n if (resource.parent) {\r\n resource.parent.remove(resource);\r\n }\r\n }\r\n if (resource.dispose) {\r\n resource.dispose();\r\n }\r\n }\r\n this.resourceslocal.clear();\r\n }\r\n}\r\n\r\nexport default class CloseupViewHelper {\r\n constructor() {\r\n this.scene = new Scene()\r\n this.fbxLoader = new FBXLoader();\r\n this.raycaster = new Raycaster();\r\n this.lightsInScene = [];\r\n this.resTracker = new ResourceTrackerCs();\r\n this.track = this.resTracker.track.bind(this.resTracker);\r\n this.tracklocal = this.resTracker.tracklocal.bind(this.resTracker);\r\n }\r\n cleanup() {\r\n tileCanvas.designDetails = null;\r\n if (this.resTracker) {\r\n this.resTracker.dispose();\r\n }\r\n }\r\n init({ canvas }) {\r\n if (this.resTracker) {\r\n this.resTracker.disposelocal();\r\n this.scene = null;\r\n this.scene = new Scene();\r\n }\r\n this.renderer = this.tracklocal(new WebGLRenderer({\r\n canvas,\r\n preserveDrawingBuffer: true,\r\n antialias: false\r\n }));\r\n this.renderer.shadowMap.enabled = true\r\n this.renderer.shadowMap.type = THREE.PCFSoftShadowMap;\r\n // this.renderer.toneMapping = THREE.LinearToneMapping;\r\n // this.renderer.toneMappingExposure = 0.53;\r\n const width = window.innerWidth;\r\n const height = window.innerHeight;\r\n this.w = width;\r\n this.h = height;\r\n this.renderer.setPixelRatio(1);\r\n this.renderer.setSize(this.w, this.h);\r\n this.lastKnownIntersectionPoint = null;\r\n window.scene = this.scene;\r\n\r\n }\r\n initConfig({ config, baseUrl }) {\r\n this.sceneConfig = { ...config[config.scenes[0]], designScale: window.globalCarpetScale };\r\n this.flipY = config.hasOwnProperty('flipY') ? config.flipY : true;\r\n this.baseUrl = baseUrl\r\n\r\n const { Shot_1: shot1 } = this.sceneConfig;\r\n this.updateCamera(shot1);\r\n this.shot = \"Shot_1\";\r\n }\r\n updateCamera() {\r\n const { Shot_1: shot1, } = this.sceneConfig;\r\n this.camera = this.tracklocal(perspectiveCamera({ ...shot1, width: this.w, height: this.h }));\r\n this.orbit = addCameraControl(this.renderer, this.scene, this.camera, shot1);\r\n this.orbit.enabled = true;\r\n }\r\n async setupFloor(floorOption) {\r\n // if (this.floor) return;\r\n //**unit is feet */\r\n const geometry = this.tracklocal(new THREE.PlaneGeometry(10, 10, 100, 100));\r\n const material = this.tracklocal(new THREE.MeshStandardMaterial({ side: THREE.FrontSide, metalness: 0, roughness: 0.1 }));\r\n // const material = new THREE.MeshStandardMaterial({ side: THREE.FrontSide, metalness: 0.4, roughness: 1 });\r\n this.floor = this.tracklocal(new THREE.Mesh(geometry, material));\r\n this.floor.rotation.x = -Math.PI / 2\r\n this.floor.name = \"floor\"\r\n this.floor.castShadow = false;\r\n this.floor.receiveShadow = true;\r\n //**50 feet */\r\n this.floor.scale.set(5, 5, 1)\r\n // this.floor.scale.set(10, 10, 1)\r\n this.updateFloorTexture(floorOption)\r\n this.scene.add(this.floor)\r\n }\r\n async updateFloor(floorOption) {\r\n if (!this.floor) this.setupFloor(floorOption)\r\n await this.updateFloorTexture(floorOption)\r\n this.render()\r\n }\r\n async updateFloorTexture(floorOption) {\r\n const { path, width1 = 640, height1 = 640 } = floorOption;\r\n let width = 640, height = 640;\r\n if (floorOption.metalness) {\r\n this.floor.material.metalness = floorOption.metalness;\r\n }\r\n if (floorOption.roughness) {\r\n this.floor.material.roughness = floorOption.roughness;\r\n }\r\n if (!this.floorCanvas) {\r\n this.floorCanvas = document.createElement(\"canvas\")\r\n }\r\n try {\r\n const floorImage = await readImage(path);\r\n this.floorCanvas.width = floorImage.width;\r\n this.floorCanvas.height = floorImage.height;\r\n this.floorCanvas.getContext(\"2d\").drawImage(floorImage, 0, 0);\r\n width = floorImage.width / 305;\r\n height = floorImage.height / 305;\r\n } catch (error) {\r\n return;\r\n this.floorCanvas.width = 1024;\r\n this.floorCanvas.height = 1024;\r\n const ctx = this.floorCanvas.getContext(\"2d\")\r\n ctx.fillStyle = \"#f0f0f0\";\r\n ctx.fillRect(0, 0, 1024, 1024);\r\n }\r\n\r\n const floorTexture = this.tracklocal(new THREE.CanvasTexture(this.floorCanvas));\r\n floorTexture.anisotropy = this.renderer.capabilities.getMaxAnisotropy();\r\n floorTexture.wrapS = floorTexture.wrapT = THREE.RepeatWrapping;\r\n // floorTexture.repeat.set(50 / width, 50 / height);\r\n window.floor = this.floor;\r\n floorTexture.repeat.set(50 / width, 50 / height);\r\n this.floor.material.map = floorTexture;\r\n this.floor.material.needsUpdate = true;\r\n this.floor.material.map.needsUpdate = true;\r\n }\r\n\r\n setupObjects() {\r\n return new Promise((resolve, reject) => {\r\n const { modelUrl, objects3d, surfaces, carpetMeshName } = this.sceneConfig;\r\n let carpetObjectName = carpetMeshName;\r\n if (!carpetObjectName) {\r\n carpetObjectName = \"carpet\"\r\n }\r\n const setup = (object) => {\r\n if (this.object3d) {\r\n this.scene.remove(this.object3d)\r\n }\r\n if (this.object3dBack) {\r\n this.scene.remove(this.object3dBack)\r\n }\r\n if (this.objectGroup) {\r\n this.scene.remove(this.objectGroup)\r\n }\r\n const carpetObject = this.tracklocal(object.getObjectByName(carpetObjectName));\r\n const objectConfig = this.sceneConfig[carpetObjectName]\r\n const {\r\n position = [0, 0, 0],\r\n rotation = [90, 0, 0],\r\n scale = [1, 1, 1],\r\n shadow = {}\r\n } = objectConfig;\r\n carpetObject.position.fromArray(position);\r\n carpetObject.scale.fromArray(scale);\r\n carpetObject.rotation.fromArray(convertArrIntoRad(rotation));\r\n carpetObject.castShadow = shadow.cast;\r\n carpetObject.receiveShadow = shadow.receive;\r\n this.scene.add(carpetObject);\r\n\r\n if (surfaces) {\r\n this.objectGroup = carpetObject;\r\n const { back, front } = surfaces;\r\n this.object3d = carpetObject.getObjectByName(front);\r\n const frontConf = this.sceneConfig[front] || {}\r\n if (back) {\r\n this.object3dBack = carpetObject.getObjectByName(back);\r\n const backConf = this.sceneConfig[back] || {}\r\n const { shadow = {} } = backConf\r\n this.object3dBack.castShadow = shadow.cast\r\n this.object3dBack.receiveShadow = shadow.receive\r\n }\r\n else this.object3dBack = null\r\n const { shadow = {} } = frontConf\r\n this.object3d.castShadow = shadow.cast\r\n this.object3d.receiveShadow = shadow.receive\r\n } else {\r\n this.objectGroup = null;\r\n this.object3dBack = null\r\n this.object3d = carpetObject;\r\n }\r\n if (this.material) {\r\n this.object3d.material = this.material;\r\n }\r\n if (this.materialBack && this.object3dBack) {\r\n this.object3dBack.material = this.materialBack;\r\n }\r\n let shouldrenderDesignBack = !this.materialBack && this.object3dBack\r\n resolve(shouldrenderDesignBack)\r\n }\r\n this.fbxLoader.load(makeUrl(this.baseUrl, modelUrl), (object) => {\r\n setup(object)\r\n }, undefined, reject)\r\n })\r\n }\r\n setupLights() {\r\n this.lightsInScene.forEach(light => {\r\n this.scene.remove(light);\r\n })\r\n this.lightsInScene = [];\r\n const { lights: lightsConfig } = this.sceneConfig;\r\n const { shadowCamSize = 5, sources } = lightsConfig;\r\n\r\n sources.forEach((lightConf => {\r\n const {\r\n type,\r\n intensity = 1,\r\n position = [0, 0, 0],\r\n shadowRadius = 1,\r\n name = \"light\",\r\n color = \"#ffffff\"\r\n } = lightConf;\r\n const lightColor = new Color(color)\r\n const secondColor = \"#808080\"\r\n let light;\r\n // let light = new AmbientLight(lightColor, intensity);\r\n switch (type) {\r\n case \"DIRECTIONAL\":\r\n light = new DirectionalLight(lightColor, intensity);\r\n light.shadow.radius = shadowRadius;\r\n //** thorai vaye shadow half render hunxa dherai vaye carpet mathi shadow auxa*/\r\n const d = shadowCamSize;\r\n\r\n light.shadow.camera.left = - d;\r\n light.shadow.camera.right = d;\r\n light.shadow.camera.top = d;\r\n light.shadow.camera.bottom = - d;\r\n\r\n light.shadow.camera.far = 500;\r\n light.shadow.camera.near = 0.5;\r\n light.castShadow = true;\r\n if (process.env.NODE_ENV === \"development\") {\r\n const helper = this.tracklocal(new THREE.DirectionalLightHelper(light));\r\n this.scene.add(helper);\r\n }\r\n\r\n break;\r\n case \"POINTLIGHT\":\r\n light = new PointLight(lightColor, intensity);\r\n light.shadow.radius = shadowRadius;\r\n\r\n const e = shadowCamSize;\r\n light.shadow.camera.left = - e;\r\n light.shadow.camera.right = e;\r\n light.shadow.camera.top = e;\r\n light.shadow.camera.bottom = - e;\r\n\r\n light.shadow.camera.far = 500;\r\n light.shadow.camera.near = 0.5;\r\n light.castShadow = true;\r\n if (process.env.NODE_ENV === \"development\") {\r\n const helper = this.tracklocal(new THREE.PointLightHelper(light));\r\n this.scene.add(helper);\r\n }\r\n break;\r\n case \"HEMISPHERELIGHT\":\r\n light = new HemisphereLight(lightColor, secondColor, intensity);\r\n // light.shadow.radius = shadowRadius;\r\n\r\n // const f = shadowCamSize;\r\n // light.shadow.camera.left = - f;\r\n // light.shadow.camera.right = f;\r\n // light.shadow.camera.top = f;\r\n // light.shadow.camera.bottom = - f;\r\n\r\n // light.shadow.camera.far = 500;\r\n // light.shadow.camera.near = 0.5;\r\n // light.castShadow = true;\r\n break;\r\n default:\r\n light = new AmbientLight(lightColor, intensity);\r\n break;\r\n }\r\n light.name = name;\r\n light.position.fromArray(position);\r\n this.lightsInScene.push(light)\r\n this.scene.add(this.tracklocal(light))\r\n }))\r\n }\r\n renderDesignFromCustomUrl({ customUrl, physicalWidth, physicalHeight }) {\r\n return new Promise((resolve, reject) => {\r\n readImage(customUrl).then(image => {\r\n const { width, height } = image;\r\n const designCanvas = createCanvas(width, height);\r\n const ctx = designCanvas.getContext('2d')\r\n ctx.drawImage(image, 0, 0)\r\n const backDesignCanvas = createCanvas(width, height);\r\n const bctx = backDesignCanvas.getContext('2d')\r\n bctx.drawImage(image, 0, 0)\r\n const normapCanvas = createCanvas(width, height);\r\n const ctxNorm = normapCanvas.getContext(\"2d\")\r\n ctxNorm.fillStyle = \"rgb(127,127,255)\";\r\n ctxNorm.fillRect(0, 0, width, height);\r\n let PhysicalWidth, PhysicalHeight\r\n if (!physicalWidth || !physicalHeight) {\r\n const maxDims = { width: 1200, height: 1500 }\r\n const { width: newWidth, height: newHeight } = resizeKeepingAspect({ width, height }, maxDims, \"fit_inside\")\r\n PhysicalWidth = convertUnit(\"in\", \"ft\", newWidth / 10)\r\n PhysicalHeight = convertUnit(\"in\", \"ft\", newHeight / 10)\r\n } else {\r\n PhysicalWidth = convertUnit(\"cm\", \"ft\", physicalWidth)\r\n PhysicalHeight = convertUnit(\"cm\", \"ft\", physicalHeight)\r\n }\r\n const designDetails = { Width: width, Height: height, PhysicalWidth, PhysicalHeight, Unit: \"ft\" }\r\n this.setCarpetTexture({\r\n designDetails,\r\n designCanvas,\r\n normapCanvas,\r\n backDesignCanvas\r\n });\r\n resolve()\r\n }).catch(err => {\r\n reject(err)\r\n })\r\n })\r\n }\r\n renderDesign({ designDetails, designPath, hash }) {\r\n const { IsIrregular } = designDetails;\r\n this.designPath = designPath;\r\n this.designDetails = designDetails;\r\n this.zoom = this.sceneConfig.designScale || 4;\r\n return new Promise((resolve, reject) => {\r\n if (tileCanvas.designDetails !== designDetails) {\r\n tileCanvas.fronttilesDrawn = false;\r\n tileCanvas.backtilesDrawn = false;\r\n if (window.InterfaceElements.IsJpeg) this.zoom = 1\r\n tileCanvas.init({\r\n designDetails,\r\n tileSize: 256,\r\n zoom: this.zoom\r\n });\r\n }\r\n const tileTransparency = this.tileDetails && this.tileDetails[`tileTransparency${this.zoom}`] ? this.tileDetails[`tileTransparency${this.zoom}`] : (IsIrregular ? [] : [1]);\r\n let commonTileProps = {\r\n designPath,\r\n zoom: this.zoom,\r\n designDetails,\r\n hash,\r\n tileTransparency\r\n };\r\n const { DesignColors } = designDetails;\r\n const options = {\r\n ...commonTileProps,\r\n drawNormap:\r\n DesignColors?.length &&\r\n !DesignColors.every(color => color.PileHeight === DesignColors[0].PileHeight) ||\r\n tileTransparency.length\r\n }\r\n let renderBounds = {\r\n p1: { x: 0, y: 0 },\r\n p2: { x: 1024, y: 1024 }\r\n };\r\n let fronttilesDrawn;\r\n let backtilesDrawn;\r\n\r\n const drawBack = () => {\r\n if (this.object3dBack) {\r\n if (!tileCanvas.backtilesDrawn) {\r\n tileCanvas.drawCanvasBackTiles({ ...options, renderBounds }, undefined, () => {\r\n backtilesDrawn = true;\r\n tileCanvas.backtilesDrawn = true;\r\n setTexture(fronttilesDrawn, backtilesDrawn);\r\n })\r\n }\r\n else {\r\n backtilesDrawn = true;\r\n setTexture(fronttilesDrawn, backtilesDrawn);\r\n }\r\n }\r\n }\r\n\r\n const setTexture = () => {\r\n if (!fronttilesDrawn) return\r\n if (!backtilesDrawn) {\r\n drawBack();\r\n return;\r\n }\r\n this.setCarpetTexture({\r\n designDetails,\r\n designCanvas: tileCanvas.canvas,\r\n normapCanvas: tileCanvas.canvasNorm,\r\n // roughmapCanvas: tileCanvas.canvasRough,\r\n backDesignCanvas: tileCanvas.canvasBack\r\n });\r\n resolve();\r\n }\r\n if (!tileCanvas.fronttilesDrawn) {\r\n tileCanvas.drawCanvasTiles(options, undefined, () => {\r\n fronttilesDrawn = true;\r\n tileCanvas.fronttilesDrawn = true;\r\n if (!this.object3dBack) backtilesDrawn = true;\r\n setTexture(fronttilesDrawn, backtilesDrawn);\r\n });\r\n }\r\n else {\r\n fronttilesDrawn = true;\r\n setTexture(fronttilesDrawn, backtilesDrawn);\r\n }\r\n this.setCarpetScale(designDetails);\r\n });\r\n }\r\n setCarpetScale(designDetails) {\r\n const carpetObjectName = this.sceneConfig.carpetMeshName ? this.sceneConfig.carpetMeshName : \"carpet\";\r\n const carpetConfig = this.sceneConfig[carpetObjectName]\r\n\r\n if (carpetConfig.dynamicScaling) {\r\n const { Unit, PhysicalHeight, PhysicalWidth, KLRatio } = designDetails;\r\n const wid = convertUnit(Unit, \"ft\", PhysicalWidth);\r\n const hgt = convertUnit(Unit, \"ft\", PhysicalHeight);\r\n this.object3d.scale.set(wid * KLRatio, hgt, 1);\r\n }\r\n }\r\n setCarpetTexture({ designCanvas, normapCanvas, backDesignCanvas, roughmapCanvas }) {\r\n const designTexture = this.tracklocal(new THREE.CanvasTexture(\r\n designCanvas, THREE.UVMapping, THREE.ClampToEdgeWrapping, THREE.ClampToEdgeWrapping, THREE.LinearFilter, THREE.LinearFilter\r\n ));\r\n const normalTexture = this.tracklocal(new THREE.CanvasTexture(\r\n normapCanvas, THREE.UVMapping, THREE.ClampToEdgeWrapping, THREE.ClampToEdgeWrapping, THREE.LinearFilter, THREE.LinearFilter\r\n ));\r\n // const roughTexture = new THREE.CanvasTexture(roughmapCanvas);\r\n designTexture.anisotropy = this.renderer.capabilities.getMaxAnisotropy();\r\n normalTexture.anisotropy = this.renderer.capabilities.getMaxAnisotropy();\r\n // normalTexture.wrapS = normalTexture.wrapT = THREE.RepeatWrapping;\r\n // designTexture.wrapS = designTexture.wrapT = THREE.RepeatWrapping;\r\n designTexture.flipY = this.flipY;\r\n normalTexture.flipY = this.flipY;\r\n\r\n designTexture.minFilter = THREE.LinearFilter;\r\n designTexture.needsUpdate = true;\r\n normalTexture.minFilter = THREE.LinearFilter;\r\n normalTexture.needsUpdate = true;\r\n // roughTexture.flipY = this.flipY;\r\n\r\n\r\n const carpetObjectName = this.sceneConfig.carpetMeshName ? this.sceneConfig.carpetMeshName : \"carpet\";\r\n const carpetConfig = this.sceneConfig[carpetObjectName]\r\n this.material = this.tracklocal(new THREE.MeshStandardMaterial({\r\n map: designTexture,\r\n normalMap: normalTexture,\r\n // roughnessMap: roughTexture,\r\n color: 0xffffff,\r\n roughness: carpetConfig.roughness ? carpetConfig.roughness : 1,\r\n metalness: carpetConfig.metalness ? carpetConfig.metalness : 0,\r\n needsUpdate: true,\r\n // transparent: true,\r\n side: THREE.FrontSide\r\n }));\r\n if (!this.object3d) {\r\n console.error(\"Error seting carpet texure. Could not find the 3d object\");\r\n return;\r\n }\r\n this.object3d.material = this.material;\r\n this.object3d.material.needsUpdate = true;\r\n if (this.object3dBack && backDesignCanvas) {\r\n const designTextureBack = this.tracklocal(new THREE.CanvasTexture(backDesignCanvas));\r\n designTextureBack.anisotropy = this.renderer.capabilities.getMaxAnisotropy();\r\n designTextureBack.wrapS = designTextureBack.wrapT = THREE.RepeatWrapping;\r\n this.materialBack = this.tracklocal(new THREE.MeshStandardMaterial({\r\n map: designTextureBack,\r\n color: 0xffffff,\r\n transparent: true,\r\n side: THREE.FrontSide,\r\n needsUpdate: true,\r\n roughness: 1,\r\n metalness: 0,\r\n }));\r\n this.object3dBack.material = this.materialBack;\r\n this.object3dBack.material.needsUpdate = true;\r\n }\r\n // this.setCarpetScale(designDetails);\r\n this.render();\r\n }\r\n updateMap() {\r\n if (this.object3d && this.object3d.material && this.object3d.material.map) {\r\n this.object3d.material.needsUpdate = true\r\n this.object3d.material.map.needsUpdate = true\r\n }\r\n if (this.object3dBack && this.object3dBack.material && this.object3dBack.material.map) {\r\n this.object3dBack.material.needsUpdate = true\r\n this.object3dBack.material.map.needsUpdate = true\r\n }\r\n this.render()\r\n }\r\n render() {\r\n this.renderer.render(this.scene, this.camera);\r\n }\r\n resizeRenderer({ width, height }) {\r\n if (!this.renderer || !this.camera) return\r\n this.w = width;\r\n this.h = height;\r\n if (this.camera) {\r\n this.camera.aspect = width / height;\r\n this.camera.updateProjectionMatrix();\r\n }\r\n this.renderer.setSize(width, height);\r\n this.render();\r\n }\r\n // interseectsFloor(e) {\r\n // const { x, y } = e;\r\n // let { mouseX, mouseY } = this.convMouseCord(x, y);\r\n // var mouse = new THREE.Vector3(mouseX, mouseY, 0.99);\r\n // this.raycaster.setFromCamera(mouse, this.camera);\r\n // var intersects = this.raycaster.intersectObjects(this.scene.children);\r\n // if (!intersects.length) return false\r\n // if (intersects[0].object.name === \"floor\") {\r\n // this.lastKnownIntersectionPoint = intersects[0].point.clone()\r\n // return intersects[0];\r\n // }\r\n // else return false\r\n // }\r\n projectPoint(point) {\r\n if (!this.lastKnownIntersectionPoint)\r\n return;\r\n const size = new THREE.Vector2()\r\n // this.projected = true;\r\n this.renderer.getSize(size)\r\n const pnt = point ? point : this.lastKnownIntersectionPoint\r\n return createVector(\r\n pnt,\r\n this.camera,\r\n size.x, size.y\r\n );\r\n }\r\n convMouseCord(x, y) {\r\n const vec = new THREE.Vector2();\r\n const { width, height } = this.renderer.getSize(vec);\r\n var mouseX = (x / width) * 2 - 1;\r\n var mouseY = -(y / height) * 2 + 1;\r\n return { mouseX, mouseY };\r\n }\r\n downloadRendering(name, mime) {\r\n if (!this.dwRenderer) {\r\n const canvas = document.createElement(\"canvas\");\r\n this.dwRenderer = new WebGLRenderer({\r\n antialias: true,\r\n preserveDrawingBuffer: true,\r\n canvas\r\n })\r\n }\r\n this.dwRenderer.shadowMap.enabled = true\r\n this.dwRenderer.shadowMap.type = THREE.PCFSoftShadowMap;\r\n\r\n this.dwRenderer.setPixelRatio(1)\r\n const windowWidth = window.innerWidth;\r\n const windowHeight = window.innerHeight;\r\n\r\n const renderWidth = 3840;\r\n const renderHeight = 2160;\r\n let width, height;\r\n if (renderWidth / windowWidth < renderHeight / windowHeight) {\r\n width = renderWidth\r\n height = windowHeight * renderWidth / windowWidth;\r\n } else {\r\n height = renderHeight;\r\n width = windowWidth * renderHeight / windowHeight;\r\n };\r\n this.dwRenderer.setSize(width, height);\r\n this.dwRenderer.render(this.scene, this.camera);\r\n downloadImageData(this.dwRenderer.domElement, name, mime);\r\n }\r\n getInstance() {\r\n return new Promise((resolve) => {\r\n if (!this.dwRenderer) {\r\n const canvas = document.createElement(\"canvas\");\r\n this.dwRenderer = new WebGLRenderer({\r\n antialias: true,\r\n preserveDrawingBuffer: true,\r\n canvas\r\n })\r\n }\r\n\r\n this.dwRenderer.shadowMap.enabled = true\r\n this.dwRenderer.shadowMap.type = THREE.PCFSoftShadowMap;\r\n\r\n this.dwRenderer.setPixelRatio(2)\r\n //**not sure if this should be set to 1920x1080 explicitly */\r\n this.dwRenderer.setSize(window.innerWidth, window.innerHeight);\r\n this.dwRenderer.render(this.scene, this.camera);\r\n resolve(this.dwRenderer.domElement)\r\n })\r\n }\r\n changeShot(shotId) {\r\n //TODO: animate this\r\n if (!shotId) return\r\n const shotConfig = this.sceneConfig[shotId]\r\n const { position, target, fov, enableRotate, boundingBox, minDistance, maxDistance } = shotConfig;\r\n if (fov) {\r\n this.camera.fov = fov;\r\n this.camera.updateProjectionMatrix();\r\n }\r\n if (position && target && position.length === 3 && target.length === 3) {\r\n this.orbit.setLookAt(position[0], position[1], position[2], target[0], target[1], target[2], true)\r\n }\r\n // this.orbit.setLookAt(-5.6, 2.7, -0.81, -0.79, -2.34, -2.81, true)\r\n this.orbit.update();\r\n this.render();\r\n this.shot = shotId;\r\n //test block of code\r\n setTimeout(() => {\r\n this.render();\r\n }, 400);\r\n\r\n }\r\n resetView() {\r\n\r\n }\r\n\r\n}\r\n\r\n\r\n\r\nconst addCameraControl = function (renderer, scene, camera, config = {}) {\r\n let {\r\n target = [0, 0, 0],\r\n boundingBox,\r\n minDistance,\r\n maxDistance,\r\n enableRotate = false,\r\n sphericalInit,\r\n position = [0, 200, 500],\r\n } = config;\r\n const clock = new Clock();\r\n const cameraControls = new CameraControls(camera, renderer.domElement);\r\n cameraControls.setTarget(target[0], target[1], target[2], false);\r\n cameraControls.verticalDragToForward = true;\r\n cameraControls.polarRotateSpeed = enableRotate ? 1 : 0;\r\n cameraControls.azimuthRotateSpeed = enableRotate ? 1 : 0;\r\n cameraControls.minPolarAngle = 0\r\n cameraControls.maxPolarAngle = 60 * Math.PI / 180\r\n\r\n if (sphericalInit) {\r\n cameraControls.rotateTo(sphericalInit.theta * Math.PI / 180, sphericalInit.phi * Math.PI / 180, true);\r\n sphericalInit.radius && cameraControls.dollyTo(sphericalInit.radius, false);\r\n camera.position.set(...position);\r\n }\r\n\r\n if (boundingBox) {\r\n const bb = new Box3(\r\n new Vector3(...boundingBox.start),\r\n new Vector3(...boundingBox.end)\r\n );\r\n cameraControls.setBoundary(bb);\r\n cameraControls.boundaryFriction = 0.2;\r\n }\r\n cameraControls.minDistance = minDistance;\r\n cameraControls.maxDistance = maxDistance;\r\n window.cameraControls = cameraControls;\r\n\r\n renderer.render(scene, camera);\r\n let counter = 0;\r\n (function anim() {\r\n const delta = clock.getDelta();\r\n // const elapsed = clock.getElapsedTime();\r\n const updated = cameraControls.update(delta);\r\n // if (updated) counter = 10;\r\n requestAnimationFrame(anim);\r\n if (updated || (counter-- > 0)) {\r\n renderer.render(scene, camera);\r\n }\r\n })();\r\n return cameraControls;\r\n};\r\nconst perspectiveCamera = (config = {}) => {\r\n const { innerWidth, innerHeight } = window;\r\n let {\r\n fov = 40,\r\n near = 0.1,\r\n far = 100000,\r\n height = innerHeight,\r\n width = innerWidth,\r\n position = [0, 200, 500],\r\n target = [0, 0, 0],\r\n rotation = [0, 0, 0]\r\n } = config;\r\n const aspect = width / height;\r\n const camera = new PerspectiveCamera(fov, aspect, near, far);\r\n camera.lookAt(new Vector3(...target)); // This seems to be disabled by OrbitControls\r\n camera.position.set(...position);\r\n camera.rotation.set(...convertArrIntoRad(rotation));\r\n return camera;\r\n};\r\n\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { applyPresetOnCanvas, presetsMapping } from \"instagram-filters\";\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport { usePrevious } from \"react-use\";\r\nimport { useWindowSize } from \"../../hooks\";\r\nimport {\r\n designDetailActions,\r\n useDesignDetailState,\r\n useDispatchDesignDetail\r\n} from \"../../reducers/designdetails.reducer\";\r\nimport { createCanvas, downloadImageData } from \"../../utils/canvasutils\";\r\nimport Thumbnail from \"../molecules/Thumbnail\";\r\nimport CloseupViewHelper from \"./closeupviewhelper\";\r\nimport CloseupViewOptions from \"./CloseupViewOptions\";\r\nimport FloorSelectionDialog from \"../IllustrationView/FloorSelectionDialog\";\r\nimport ViewpointDialog from \"../IllustrationView/ViewpointDialog\";\r\nimport {\r\n roomConfigActions,\r\n useDispatchRoomConfig,\r\n useRoomConfigState\r\n} from \"../IllustrationView/roomconfig.reducer\";\r\nimport AppProvider, { getFloor } from \"../../api/appProvider\";\r\nimport { useDesignListState } from \"../../reducers/designstree.reducer\";\r\nconst viewHelper = new CloseupViewHelper();\r\n\r\nconst initialFloorOptions = {\r\n show: false,\r\n floors: [],\r\n activeFloor: {}\r\n};\r\n\r\nconst CloseupView = props => {\r\n const {\r\n isIdle,\r\n handleRendering,\r\n filterData = null,\r\n roomData,\r\n floor,\r\n resetTrigger,\r\n setDefaultFloor\r\n } = props;\r\n const { Name: roomName, config, baseUrl } = roomData;\r\n const designDetailState = useDesignDetailState();\r\n const dispatchDesignDetails = useDispatchDesignDetail();\r\n const designListState = useDesignListState();\r\n const windowsize = useWindowSize();\r\n\r\n const roomconfigstate = useRoomConfigState();\r\n const dispatchRoomConfig = useDispatchRoomConfig();\r\n const {\r\n designDetails,\r\n fullpath: designPath,\r\n hash,\r\n updateDesignTiles,\r\n updateNormapTiles\r\n } = designDetailState;\r\n const { customDesignUrl } = roomconfigstate;\r\n const [drawOnEffectsTrigger, setdrawOnEffectsTrigger] = useState(false);\r\n const [floorOptions, setFloorOptions] = useState(initialFloorOptions);\r\n const [showViewpointDialog, setShowViewpointDialog] = useState(false);\r\n const [activeShot, setActiveShot] = useState(null);\r\n const prevRoomData = usePrevious(roomData);\r\n const prevHash = usePrevious(hash);\r\n\r\n const perspectiveCanvasRef = useRef();\r\n const effectCanvasRef = useRef();\r\n\r\n useEffect(() => {\r\n return () => {\r\n viewHelper.cleanup();\r\n };\r\n }, []);\r\n\r\n\r\n const loadCustomDesign = async () => {\r\n dispatchDesignDetails({ type: designDetailActions.SET_LOADING, payload: true });\r\n try {\r\n await viewHelper.renderDesignFromCustomUrl({\r\n customUrl: customDesignUrl.url, physicalWidth: customDesignUrl.physicalWidCms,\r\n physicalHeight: customDesignUrl.physicalHgtCms\r\n });\r\n viewHelper.render();\r\n dispatchDesignDetails({ type: designDetailActions.SET_LOADING, payload: false });\r\n } catch (error) {\r\n console.log(\"Could not load image from the given url\", error);\r\n dispatchRoomConfig({\r\n type: roomConfigActions.SET_CUSTOM_DESIGN_URL,\r\n payload: \"\"\r\n });\r\n dispatchDesignDetails({ type: designDetailActions.SET_LOADING, payload: false });\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const loadView = async () => {\r\n dispatchDesignDetails({ type: designDetailActions.SET_LOADING, payload: true });\r\n if (!prevRoomData) {\r\n viewHelper.init({ canvas: perspectiveCanvasRef.current });\r\n }\r\n let shouldrenderDesignBack = false;\r\n if (prevRoomData !== roomData) {\r\n viewHelper.initConfig({ config, baseUrl });\r\n const { activeShot } = config;\r\n let defaultFloor;\r\n if (config.defaultFloor) {\r\n defaultFloor = setDefaultFloor(config.defaultFloor);\r\n }\r\n setActiveShot(activeShot);\r\n if (floor || defaultFloor) {\r\n await viewHelper.setupFloor(defaultFloor || floor);\r\n }\r\n shouldrenderDesignBack = await viewHelper.setupObjects();\r\n await viewHelper.setupLights();\r\n }\r\n if (customDesignUrl?.url) {\r\n await loadCustomDesign();\r\n if (handleRendering) handleRendering(true);\r\n return () => { };\r\n }\r\n if (prevHash !== hash || shouldrenderDesignBack) {\r\n const tileData = await AppProvider.fetchTileDetails({\r\n file: designPath\r\n });\r\n dispatchDesignDetails({\r\n type: designDetailActions.SET_TILE_DETAILS,\r\n payload: tileData\r\n });\r\n viewHelper.tileDetails = tileData;\r\n await viewHelper.renderDesign({\r\n designDetails,\r\n designPath,\r\n hash,\r\n // designImagePath: designListState.activeNode.Thumb\r\n });\r\n }\r\n await viewHelper.setCarpetScale(designDetails);\r\n await viewHelper.render();\r\n if (handleRendering) handleRendering(true);\r\n dispatchDesignDetails({ type: designDetailActions.SET_LOADING, payload: false });\r\n };\r\n loadView();\r\n return () => { };\r\n }, [roomData, designDetails, customDesignUrl]);\r\n\r\n useEffect(() => {\r\n console.log(\" designDetailState.loading\", designDetailState.loading);\r\n }, [designDetailState.loading]);\r\n useEffect(() => {\r\n if (designDetailState.loading || !floor) return;\r\n if (viewHelper.floor) {\r\n viewHelper.updateFloor(floor);\r\n }\r\n }, [floor]);\r\n\r\n useEffect(() => {\r\n if (!effectCanvasRef || !effectCanvasRef.current) return;\r\n if (!filterData) return;\r\n setdrawOnEffectsTrigger(true);\r\n }, [filterData]);\r\n\r\n useEffect(() => {\r\n if (drawOnEffectsTrigger) {\r\n setdrawOnEffectsTrigger(false);\r\n drawOnEffects();\r\n }\r\n }, [drawOnEffectsTrigger]);\r\n\r\n const drawOnEffects = async () => {\r\n if (filterData) {\r\n let t1 = performance.now();\r\n const width = window.innerWidth;\r\n const height = window.innerHeight;\r\n effectCanvasRef.current.width = width;\r\n effectCanvasRef.current.height = height;\r\n effectCanvasRef.current.style.width = `${width}px`;\r\n effectCanvasRef.current.style.height = `${height}px`;\r\n const canvas = await viewHelper.getInstance();\r\n let canvas1 = document.createElement(\"canvas\");\r\n canvas1.width = width;\r\n canvas1.height = height;\r\n canvas1.style.width = `${width}px`;\r\n canvas1.style.height = `${height}px`;\r\n canvas1\r\n .getContext(\"2d\")\r\n .drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, width, height);\r\n await applyPresetOnCanvas(canvas1, presetsMapping[filterData]());\r\n effectCanvasRef.current.getContext(\"2d\").drawImage(canvas1, 0, 0);\r\n let t2 = performance.now();\r\n }\r\n };\r\n\r\n const handleChangeShot = shotKey => {\r\n viewHelper.changeShot(shotKey);\r\n setActiveShot(shotKey);\r\n };\r\n\r\n useEffect(() => {\r\n if (!config || designDetailState.loading) return;\r\n viewHelper.resizeRenderer(windowsize);\r\n }, [windowsize]);\r\n window.downloadRenderedCloseupIll = async () => {\r\n if (designDetailState.loading) return;\r\n const mime = \"jpg\";\r\n const downloadName = `${designDetailState.designName} in ${roomName}.${mime}`;\r\n if (filterData) {\r\n const canvas = await viewHelper.getInstance();\r\n const newCanvas = createCanvas(window.innerWidth, window.innerHeight);\r\n newCanvas\r\n .getContext(\"2d\")\r\n .drawImage(\r\n canvas,\r\n 0,\r\n 0,\r\n canvas.width,\r\n canvas.height,\r\n 0,\r\n 0,\r\n newCanvas.width,\r\n newCanvas.height\r\n );\r\n await applyPresetOnCanvas(newCanvas, presetsMapping[filterData]());\r\n downloadImageData(newCanvas, downloadName, mime);\r\n } else {\r\n viewHelper.downloadRendering(downloadName, mime);\r\n }\r\n return Promise.resolve();\r\n };\r\n\r\n const reset = () => {\r\n viewHelper.resetView();\r\n };\r\n\r\n useEffect(() => {\r\n if (resetTrigger > 0) {\r\n reset();\r\n }\r\n }, [resetTrigger]);\r\n\r\n return (\r\n <>\r\n
\r\n \r\n \r\n
\r\n setShowViewpointDialog(false)}\r\n handleThumbClick={shot => {\r\n handleChangeShot(shot);\r\n }}\r\n />\r\n {/* setShowViewpointDialog(true)}\r\n handleShowFloorDialog={() => {\r\n setFloorOptions({ ...floorOptions, show: true });\r\n }}\r\n /> */}\r\n \r\n );\r\n};\r\n\r\nexport default CloseupView;\r\n","export const config2Point1 = (name, baseUrl, config) => {\r\n return new Promise((resolve) => {\r\n let image = new Image();\r\n image.onload = () => {\r\n let canvas = document.createElement('canvas');\r\n canvas.width = image.width;\r\n canvas.height = image.height;\r\n canvas.getContext('2d').drawImage(image, 0, 0);\r\n let imgdata = canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height);\r\n for (let i = 0; i < imgdata.data.length; i += 4) {\r\n imgdata.data[i + 3] = imgdata.data[i];\r\n\r\n }\r\n canvas.getContext('2d').putImageData(imgdata, 0, 0);\r\n canvas.toBlob(function (blob) {\r\n let url = URL.createObjectURL(blob);\r\n const mappedConfig = {\r\n version: 2.1,\r\n name: name,\r\n designinroomformat: \"roomview\",\r\n width: config.width,\r\n height: config.height,\r\n dims: { width: 1920, height: 1080 },\r\n roomElements: {\r\n shots: { Shot_1: {} },\r\n lights: {},\r\n objects: {}\r\n },\r\n defaultview: [\"view1\"],\r\n scenes: [\"scene1\"],\r\n hasShadow: true,\r\n mouseControls: true,\r\n realTimeDynamicRendering: true,\r\n canvases: [],\r\n scene1: {\r\n overwriteFbx: config.scene1.overwriteFbx,\r\n modelUrl: config.scene1.modelUrl,\r\n adjustObjects: [],\r\n hideObjects: [],\r\n Shot_1: {\r\n ...config.scene1.Shot_1\r\n },\r\n surface1: {\r\n ...config.scene1.surface1\r\n },\r\n objects3d: [\"surface1\"]\r\n },\r\n roomAssets: {\r\n Shot_1: {\r\n background: { \"url\": \"Shot_1.bg.jpg\" },\r\n mask: { \"url\": url },\r\n shadow: { \"url\": \"Shot_1.sh.jpg\" }\r\n }\r\n }\r\n }\r\n console.log(mappedConfig);\r\n resolve(mappedConfig);\r\n });\r\n\r\n\r\n }\r\n image.crossOrigin = \"Anonymous\";\r\n image.src = baseUrl + \"/\" + \"Shot_1.m.png\";\r\n\r\n })\r\n\r\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.3898 21.8115C44.5075 21.9094 44.6528 21.96 44.8 21.96C44.8922 21.96 44.985 21.9402 45.0714 21.8998C45.296 21.7942 45.44 21.5683 45.44 21.32V20.44H48V23H47.36C47.1117 23 46.8858 23.2637 46.7808 23.4883C46.6752 23.7136 46.7098 24.0387 46.8685 24.2294L48.4685 26.1795C48.5901 26.3254 48.7706 26.4246 48.9606 26.4246C49.1507 26.4246 49.3306 26.3478 49.4528 26.2019L51.0528 24.2858C51.2115 24.095 51.2461 23.7117 51.1405 23.4864C51.0342 23.2618 50.8083 23 50.56 23H49.92V20.44H52.48V21.32C52.48 21.5683 52.624 21.7942 52.8486 21.8998C52.935 21.9402 53.0272 21.96 53.12 21.96C53.2666 21.96 53.4125 21.9094 53.5302 21.8115L55.4502 20.2115C55.5955 20.0899 55.68 19.9094 55.68 19.72C55.68 19.5306 55.5955 19.3501 55.4502 19.2285L53.5302 17.6285C53.3395 17.4698 53.0733 17.4358 52.8493 17.5402C52.624 17.6451 52.48 17.871 52.48 18.12V18.52H49.92V15.96H50.56C50.8083 15.96 51.0342 15.9363 51.1392 15.711C51.2448 15.4858 51.2102 15.2803 51.0515 15.0896L49.4515 13.1997C49.2077 12.9078 48.7117 12.9226 48.4678 13.2144L46.8678 15.1421C46.7091 15.3328 46.6746 15.4826 46.7802 15.7072C46.8858 15.9325 47.1117 15.96 47.36 15.96H48V18.52H45.44V18.12C45.44 17.8717 45.296 17.6458 45.0714 17.5402C44.8486 17.4358 44.5818 17.4691 44.3904 17.6285L42.4704 19.2285C42.3245 19.3494 42.24 19.5299 42.24 19.72C42.24 19.9101 42.3245 20.0899 42.4698 20.2115L44.3898 21.8115Z\",\n fill: \"#D8DBE2\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M52.1485 36.36C51.888 36.36 51.2269 36.4496 50.5472 36.6608C50.3738 34.3485 48.4358 32.52 46.08 32.52C45.0195 32.52 44.0435 32.8906 43.2755 33.5088C42.7078 31.7757 41.207 30.6 39.3485 30.6C38.1177 30.6 37.0227 31.1062 36.2419 31.9331L36.0448 26.4195C38.2297 24.8502 39.6569 22.2896 39.6569 19.4C39.6569 14.6358 35.7811 10.76 31.0169 10.76C26.2528 10.76 22.377 14.6358 22.377 19.4C22.377 22.7126 24.2573 25.5837 27.0016 27.0314L27.2909 40.5565C26.7737 40.8374 25.9891 41.3514 24.985 42.2634C21.5104 45.4211 20.3731 53.0589 24.297 58.9706C28.6649 65.551 33.783 68.36 41.4118 68.36C49.4944 68.36 52.1984 64.3037 54.2758 60.1488C56.2739 56.1526 56.2969 40.849 56.2969 40.2C56.2976 38.1539 54.359 36.36 52.1485 36.36ZM52.5587 59.2899C50.6029 63.2016 48.4147 66.44 41.4125 66.44C34.4134 66.44 29.9187 63.9683 25.8976 57.9088C23.5545 54.3786 22.5376 47.0826 26.2771 43.6835C26.6809 43.3168 27.0374 43.0294 27.3395 42.8061L27.4829 49.4998C27.4944 50.0298 27.911 50.4643 28.4633 50.4394C28.9933 50.4278 29.4138 49.9894 29.4029 49.4589L28.7731 20.04C28.7731 18.3446 29.8266 17.16 31.3357 17.16C32.8448 17.16 33.8982 18.3446 33.8989 20.0746L34.5389 37.9946C34.5561 38.4867 34.944 38.8861 35.4349 38.9181C35.9206 38.9482 36.3622 38.6058 36.4448 38.12L36.9305 35.24C36.9395 35.1869 36.944 35.1338 36.944 35.08C36.944 33.6208 37.9782 32.52 39.3498 32.52C40.8966 32.52 41.6013 33.8467 41.6013 35.08V37C41.6013 37.5306 42.0313 37.96 42.5613 37.96C43.0912 37.96 43.5213 37.5306 43.5213 37C43.5213 35.5882 44.6694 34.44 46.0813 34.44C47.4931 34.44 48.6413 35.5882 48.6413 37V41.16C48.6413 41.6899 49.0713 42.12 49.6013 42.12C50.1312 42.12 50.5613 41.6899 50.5613 41.16V38.7152C50.9453 38.5283 51.6979 38.2794 52.1497 38.2794C53.2954 38.2794 54.3782 39.2125 54.3782 40.1994C54.3776 44.4982 54.0499 56.3075 52.5587 59.2899Z\",\n fill: \"#D8DBE2\"\n});\n\nvar SvgTutorial0 = function SvgTutorial0(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 77,\n height: 77,\n viewBox: \"0 0 77 77\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgTutorial0, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/tutorial0.125b3fe8.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0_1746_8936)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37.7212 14.0384C38.0962 14.4134 38.7036 14.4134 39.0786 14.0384L42.9186 10.1984C43.1932 9.92383 43.2757 9.39135 43.1266 9.03231C42.9775 8.67327 42.628 8.31999 42.2402 8.31999H39.6802V2.15999C39.6802 1.51999 39.0402 0.87999 38.4002 0.87999C37.7602 0.87999 37.1202 1.51999 37.1202 2.15999V8.31999H34.5602C34.1724 8.31999 33.8223 8.67391 33.6732 9.03231C33.524 9.39071 33.6066 9.86367 33.8812 10.1382L37.7212 14.0384Z\",\n fill: \"#D8DBE2\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M28.7611 20.4384C29.1362 20.8134 29.7435 20.8134 30.1186 20.4384L33.9586 16.5984C34.2331 16.3238 34.3157 15.7913 34.1666 15.4323C34.0175 15.0733 33.668 14.72 33.2802 14.72H30.7202V5.35998C30.7202 4.71998 30.0802 4.07998 29.4402 4.07998C28.8002 4.07998 28.1602 4.71998 28.1602 5.35998V14.72H25.6002C25.2123 14.72 24.8623 15.0739 24.7131 15.4323C24.564 15.7907 24.6466 16.2637 24.9211 16.5382L28.7611 20.4384Z\",\n fill: \"#D8DBE2\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.0964 76.72C33.4676 76.72 28.3495 73.911 23.9815 67.3299C20.0577 61.4189 21.195 53.7811 24.6695 50.6227C25.673 49.7113 26.4583 49.1974 26.9754 48.9165L26.5364 28.4205C26.5364 25.6633 28.4634 23.6 31.019 23.6C32.5665 23.6 33.8836 24.3565 34.6817 25.5603L34.7111 24.2182C34.7111 21.7273 36.7636 19.7593 39.1918 19.7593C41.5745 19.7593 43.5207 21.6857 43.5207 24.2393V41.6845C44.1607 41.1769 44.9793 40.8793 45.931 40.8793C48.2868 40.8793 50.1486 42.7065 50.3233 45.0195C50.9998 44.8083 51.6193 44.7193 51.8798 44.7193C54.0846 44.7193 56.0007 46.5133 56.0007 48.5593C56.0007 49.2083 55.9681 64.512 53.97 68.5081C51.8926 72.6637 49.179 76.72 41.0964 76.72ZM27.0234 51.1661C26.7207 51.3901 26.3649 51.6761 25.961 52.0435C22.2215 55.4425 23.2385 62.7385 25.5815 66.2688C29.6026 72.3289 34.098 74.8 41.0964 74.8C48.0986 74.8 50.2868 71.5622 52.2426 67.6499C53.7345 64.6662 54.0615 52.8576 54.0615 48.56C54.0615 47.5725 53.1329 46.64 51.9918 46.64C51.5418 46.64 50.5607 46.8877 50.5607 47.0752V49.52C50.5607 50.0499 50.1306 50.48 49.6007 50.48C49.0708 50.48 48.6407 50.0499 48.6407 49.52V45.36C48.6407 43.9475 47.3428 42.8 45.931 42.8C44.5191 42.8 43.2961 43.9475 43.2961 45.36C43.2961 45.8899 42.978 46.32 42.4481 46.32C41.9182 46.32 41.6001 45.8899 41.6001 45.36V24.24C41.6001 23.0067 40.7431 21.68 39.1911 21.68C37.817 21.68 36.706 22.7808 36.706 24.24L36.1786 46.5017C36.1658 47.0208 35.9738 47.6006 35.2058 47.6006C34.4378 47.6006 34.2497 47.0317 34.2311 46.5145L33.586 28.5145C33.5854 26.7846 32.53 25.5603 31.0209 25.5603C29.5118 25.5603 28.457 26.7245 28.457 28.4205L29.0862 57.8297C29.0977 58.3597 28.6759 58.7936 28.146 58.8057C27.6295 58.8109 27.1764 58.3929 27.1655 57.863L27.0234 51.1661Z\",\n fill: \"#D8DBE2\"\n}));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0_1746_8936\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 76.8,\n height: 76.8,\n fill: \"white\"\n})));\n\nvar SvgTutorial1 = function SvgTutorial1(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 77,\n height: 77,\n viewBox: \"0 0 77 77\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgTutorial1, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/tutorial1.7410cb53.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.0394 35.721C15.6643 35.3459 15.057 35.3459 14.6819 35.721L10.8419 39.561C10.5674 39.8349 10.4848 40.1287 10.6339 40.4871C10.783 40.8455 11.1325 40.96 11.5203 40.96H14.0803V47.6C14.0803 48.24 14.7203 48.88 15.3603 48.88C16.0003 48.88 16.6403 48.24 16.6403 47.6V40.96H19.2003C19.5882 40.96 19.9382 40.8461 20.0874 40.4877C20.2365 40.1293 20.1539 39.7754 19.8794 39.5015L16.0394 35.721Z\",\n fill: \"#D8DBE2\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.2004 25.6H16.6404V19.44C16.6404 18.8 16.0004 18.16 15.3604 18.16C14.7204 18.16 14.0804 18.8 14.0804 19.44V25.6H11.5204C11.1326 25.6 10.7825 25.9539 10.6334 26.3123C10.4842 26.6707 10.5668 27.1437 10.8414 27.4182L14.6814 31.2883C15.0564 31.6634 15.6638 31.6781 16.0388 31.303L19.8788 27.4707C20.1534 27.1962 20.2359 26.6675 20.0868 26.3085C19.9377 25.9494 19.5882 25.6 19.2004 25.6Z\",\n fill: \"#D8DBE2\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M60.8718 27.3024C60.3317 25.8195 58.8437 24.823 57.1688 24.823C56.6965 24.823 56.2357 24.903 55.7992 25.0624C55.3934 25.2096 54.9358 25.4873 54.5237 25.8124C53.7979 24.24 52.2075 23.2076 50.4558 23.2076C49.9336 23.2076 49.4178 23.2992 48.9237 23.479C47.94 23.8374 47.1291 24.5113 46.603 25.4009C45.7666 24.4147 44.5218 23.8118 43.1829 23.8118C42.6606 23.8118 42.1454 23.9033 41.6507 24.0832C40.4859 24.5075 39.4638 25.3337 38.8469 26.35C38.651 26.6726 38.4981 27.0105 38.3886 27.358C37.4088 25.847 36.2856 24.2886 35.2379 23.2409C33.3256 21.3286 30.5205 19.0489 28.0174 19.0489C27.5765 19.0489 27.156 19.1206 26.7688 19.2614C25.5534 19.7036 24.6267 20.6572 24.2267 21.8764C23.8088 23.1526 24.0174 24.5574 24.8002 25.7318C25.396 26.6252 26.187 27.1552 27.0248 27.7164C28.2779 28.5555 29.6974 29.5059 31.1656 32.0755C32.9013 35.1123 35.0043 40.5881 36.1269 43.6499L31.2974 41.2652C30.5928 40.9363 29.8459 40.7699 29.0773 40.7699C27.06 40.7699 25.2021 41.9571 24.3451 43.7958C23.1189 46.4256 24.2517 49.559 26.8238 50.7571C26.8674 50.7801 31.2763 53.1372 37.3826 55.9846L38.381 56.4518C42.2926 58.2886 45.9874 60.0243 50.2702 60.0243H50.2709C52.3106 60.0243 54.3534 59.6416 56.5147 58.855C64.1096 56.0908 65.2635 51.3536 65.7947 46.7392C66.3067 42.3014 61.0946 27.9129 60.8718 27.3024ZM63.8881 46.5203C63.3883 50.8652 62.4392 54.656 55.8594 57.0515C53.9112 57.76 52.084 58.1049 50.2722 58.1049H50.2715C46.4174 58.1049 43.0715 56.5337 39.1982 54.7142L38.1954 54.2451C32.141 51.4214 27.7755 49.0873 27.684 49.0412C26.0238 48.2668 25.3077 46.2777 26.0866 44.6073C26.6376 43.4246 27.7838 42.6905 29.0786 42.6905C29.5643 42.6905 30.0379 42.7961 30.4674 42.9964L37.4088 46.4236C37.7582 46.5971 38.1762 46.5414 38.468 46.2835C38.7605 46.0262 38.868 45.6179 38.7413 45.2499C38.6062 44.8601 35.4094 35.6294 32.8347 31.1232C31.1419 28.1619 29.3813 26.9824 28.0955 26.1216C27.3621 25.6307 26.7835 25.2428 26.4002 24.6675C25.9464 23.9865 25.8197 23.1878 26.0533 22.4748C26.2683 21.8188 26.7694 21.3049 27.4267 21.0656C28.7554 20.5792 31.2232 21.9392 33.8824 24.5984C36.3093 27.0252 39.3813 32.8115 39.412 32.8697C39.6475 33.3152 40.1877 33.5033 40.6504 33.2985C41.1118 33.0937 41.3358 32.567 41.163 32.0928L40.2875 29.687C39.9848 28.855 40.0533 28.0665 40.491 27.3446C40.8846 26.695 41.5477 26.1632 42.3093 25.886C42.5928 25.783 42.8872 25.7305 43.1848 25.7305C44.2574 25.7305 45.2245 26.4083 45.5912 27.4156L46.795 30.7232C46.9762 31.2211 47.5278 31.4784 48.0251 31.2966C48.523 31.1155 48.7803 30.5644 48.5986 30.0665L48.052 28.5625C47.8184 27.92 47.8491 27.2249 48.1378 26.6048C48.4264 25.9846 48.9397 25.5148 49.5829 25.2812C49.8651 25.1782 50.1602 25.1257 50.4578 25.1257C51.5298 25.1257 52.4968 25.8035 52.8635 26.8115L54.2869 30.7206C54.4686 31.2192 55.021 31.4752 55.517 31.294C56.0155 31.1123 56.2728 30.5612 56.0904 30.0633L55.2469 27.744C55.5067 27.4592 56.0507 27.0131 56.459 26.8646C56.6843 26.7827 56.9243 26.7411 57.1714 26.7411C58.029 26.7411 58.8097 27.2409 59.0709 27.9571C60.5384 31.9987 64.2696 43.2064 63.8881 46.5203Z\",\n fill: \"#D8DBE2\"\n});\n\nvar SvgTutorial2 = function SvgTutorial2(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 77,\n height: 77,\n viewBox: \"0 0 77 77\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3, _ref4);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgTutorial2, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/tutorial2.834afb13.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0_1746_8915)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#filter0_ddd_1746_8915)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M53.4041 40.7083C53.4041 42.4572 52.2764 43.875 50.8852 43.875H28.2147C26.8236 43.875 25.6958 42.4572 25.6958 40.7083V28.0417C25.6958 26.2928 26.8236 24.875 28.2147 24.875H31.7133L35.7716 20.125H43.3284L47.3867 24.875H50.8852C52.2764 24.875 53.4041 26.2928 53.4041 28.0417V40.7083ZM33.6135 33.9791C33.6135 30.6999 36.2718 28.0416 39.551 28.0416C42.8302 28.0416 45.4885 30.6999 45.4885 33.9791C45.4885 37.2583 42.8302 39.9166 39.551 39.9166C36.2718 39.9166 33.6135 37.2583 33.6135 33.9791ZM39.551 31.9999C38.4579 31.9999 37.5718 32.886 37.5718 33.9791C37.5718 35.0721 38.4579 35.9583 39.551 35.9583C40.644 35.9583 41.5302 35.0721 41.5302 33.9791C41.5302 32.886 40.644 31.9999 39.551 31.9999Z\",\n fill: \"white\"\n})));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n id: \"filter0_ddd_1746_8915\",\n x: -46.2,\n y: -27.75,\n width: 171.5,\n height: 155.5,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n}), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 18\n}), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 23\n}), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0.0627451 0 0 0 0 0.0862745 0 0 0 0 0.101961 0 0 0 0.2 0\"\n}), /*#__PURE__*/React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_1746_8915\"\n}), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 4\n}), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 4\n}), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0.0627451 0 0 0 0 0.0862745 0 0 0 0 0.101961 0 0 0 0.2 0\"\n}), /*#__PURE__*/React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"effect1_dropShadow_1746_8915\",\n result: \"effect2_dropShadow_1746_8915\"\n}), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), /*#__PURE__*/React.createElement(\"feOffset\", null), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0.0627451 0 0 0 0 0.0862745 0 0 0 0 0.101961 0 0 0 0.1 0\"\n}), /*#__PURE__*/React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"effect2_dropShadow_1746_8915\",\n result: \"effect3_dropShadow_1746_8915\"\n}), /*#__PURE__*/React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect3_dropShadow_1746_8915\",\n result: \"shape\"\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0_1746_8915\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 76.8,\n height: 64,\n fill: \"white\"\n})));\n\nvar SvgTutorial3 = function SvgTutorial3(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 77,\n height: 77,\n viewBox: \"0 0 77 77\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgTutorial3, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/tutorial3.77656f47.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useEffect, useState } from \"react\";\r\nimport AtButton from \"../../atoms/AtButton\";\r\nimport AtIcon from \"../../atoms/AtIcon\";\r\nimport { ReactComponent as Tutorial0 } from \"./tutorial0.svg\";\r\nimport { ReactComponent as Tutorial1 } from \"./tutorial1.svg\";\r\nimport { ReactComponent as Tutorial2 } from \"./tutorial2.svg\";\r\nimport { ReactComponent as Tutorial3 } from \"./tutorial3.svg\";\r\n\r\nconst tutorialTexts = [\r\n { text: \"Tap and drag to view a different part of the carpet\", icon: },\r\n { text: \"Drag with two fingers or right click to adjust the viewing angle\", icon: },\r\n { text: \"Pinch in or out or scroll to zoom in or out the shot\", icon: },\r\n { text: \"Tap or click the shutter button to capture the shot\", icon: }\r\n];\r\nconst Tutorial = props => {\r\n const [activeIndex, setactiveIndex] = useState(0);\r\n const { show, onClose } = props;\r\n const [isViewing, setisViewing] = useState(false);\r\n const [timeout, settimeout] = useState(false);\r\n\r\n useEffect(() => {\r\n if (show) {\r\n settimeout(false);\r\n startTimeout();\r\n }\r\n }, [show]);\r\n\r\n // useEffect(() => {\r\n // if (!timeout) return;\r\n // if (!isViewing || activeIndex === 0) {\r\n // onClose();\r\n // } else {\r\n // settimeout(false);\r\n // startTimeout();\r\n // }\r\n // }, [timeout]);\r\n\r\n const startTimeout = () => {\r\n setTimeout(() => {\r\n settimeout(true);\r\n }, 12000);\r\n };\r\n\r\n const handleNext = () => {\r\n if (!(activeIndex < tutorialTexts.length - 1)) {\r\n handleClose();\r\n return;\r\n }\r\n setactiveIndex(activeIndex + 1);\r\n };\r\n\r\n const handlePrev = () => {\r\n if (!(activeIndex > 0)) return;\r\n setactiveIndex(activeIndex - 1);\r\n };\r\n\r\n const handleClose = () => {\r\n setactiveIndex(0);\r\n onClose();\r\n };\r\n return (\r\n <>\r\n {show && (\r\n setisViewing(true)}\r\n onMouseLeave={() => setisViewing(false)}\r\n >\r\n
\r\n {tutorialTexts[activeIndex].icon && tutorialTexts[activeIndex].icon}\r\n {tutorialTexts[activeIndex].text}\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Tutorial;\r\n","import { H2 } from \"@blueprintjs/core\";\r\nimport React, { useState } from \"react\";\r\nimport AtButton from \"../../atoms/AtButton\";\r\nimport AtIcon from \"../../atoms/AtIcon\";\r\nimport AtDialog from \"../../molecules/AtDialog\";\r\nimport Thumbnail from \"../../molecules/Thumbnail\";\r\n\r\nconst CameraOptions = props => {\r\n const {\r\n show,\r\n filterOptions,\r\n activeFilterIndex,\r\n onFilterSelect,\r\n blurOptions,\r\n activeBlurIndex,\r\n onBlurSelect,\r\n onShot,\r\n handleClose\r\n } = props;\r\n\r\n const [seePreview, setseePreview] = useState(false);\r\n // const [activeBlurIndex, setactiveBlurIndex] = useState(0);\r\n return (\r\n <>\r\n {\r\n setseePreview(true);\r\n }}\r\n className={\"illustration-dialog camera-dialog\"}\r\n overlayClassName={show && !seePreview ? \"\" : \"hidden\"}\r\n size=\"lg\"\r\n >\r\n
\r\n
\r\n \"logo\"\r\n

Camera Options

\r\n
\r\n {\r\n setseePreview(true);\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Filters\r\n \r\n Enhance your studio shots with these filter options\r\n \r\n
\r\n
\r\n\r\n
\r\n {filterOptions.map((filter, index) => {\r\n return (\r\n {\r\n onFilterSelect(e, index);\r\n }}\r\n />\r\n );\r\n })}\r\n
\r\n\r\n
\r\n
\r\n\r\n {/* blur */}\r\n {blurOptions && blurOptions.length > 0 && (\r\n
\r\n
\r\n
\r\n Camera blur\r\n \r\n Add depth to your shots with these realistic camera blur options\r\n \r\n
\r\n
\r\n\r\n
\r\n {blurOptions.map((option, index) => {\r\n return (\r\n onBlurSelect(e, index)}\r\n />\r\n );\r\n })}\r\n
\r\n\r\n
\r\n )}\r\n
\r\n \r\n
\r\n setseePreview(!seePreview)}\r\n text={\"Camera Options\"}\r\n className=\"btn-cam-opts\"\r\n />\r\n onShot()}\r\n text={\"Capture Shot\"}\r\n icon=\"double-chevron-camera\"\r\n className=\"btn-cam-shot\"\r\n />\r\n {/* */}\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default CameraOptions;\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 4,\n y: 4,\n width: 6,\n height: 6,\n rx: 3,\n fill: \"#00D092\",\n stroke: \"#EEF0F1\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 14,\n y: 4,\n width: 6,\n height: 6,\n rx: 3,\n fill: \"#2A59F4\",\n stroke: \"#EEF0F1\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 4,\n y: 14,\n width: 6,\n height: 6,\n rx: 3,\n fill: \"#D9822B\",\n stroke: \"#EEF0F1\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 14,\n y: 14,\n width: 6,\n height: 6,\n rx: 3,\n fill: \"#DB3737\",\n stroke: \"#EEF0F1\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar SvgIconMmc = function SvgIconMmc(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3, _ref4, _ref5);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconMmc, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon-mmc.b246b845.svg\";\nexport { ForwardRef as ReactComponent };","import * as THREE from \"three\";\r\nimport { OrbitControls } from \"./../../utils/OrbitControls\";\r\nimport { FBXLoader } from \"three/examples/jsm/loaders/FBXLoader\";\r\nimport { convertArrIntoRad, convertArrintoDeg, convertUnit, areaOfellipse, createVector, makeUrl } from \"./../../utils/utils\";\r\nimport { CanvasTexture } from \"three\";\r\n\r\nexport default class ThreeViewHelper {\r\n constructor() {\r\n\r\n this.scene = new THREE.Scene();\r\n\r\n this.textureLoader = new THREE.TextureLoader();\r\n this.fbxLoader = new FBXLoader();\r\n this.raycaster = new THREE.Raycaster();\r\n this.offset = new THREE.Vector3();\r\n this.carpetLoaded = false;\r\n this.objectLoaded = false;\r\n }\r\n reset() {\r\n this.clearScene();\r\n this.scene = null;\r\n this.renderer = null;\r\n this.camera = null;\r\n this.orbit = null;\r\n this.carpetLoaded = false;\r\n this.objectLoaded = false;\r\n this.scene = new THREE.Scene();\r\n }\r\n init({ canvas, config = {}, shots, dims = {}, surfaceName = \"surface1\", resolution }) {\r\n this.reset()\r\n window.scene = this.scene;\r\n let { width = window.innerWidth, height = window.innerHeight } = dims;\r\n this.w = width\r\n this.h = height\r\n this.surfaceName = surfaceName;\r\n this.sceneConfig = config;\r\n this.objProps = config[surfaceName];\r\n\r\n this.renderer = renderer(canvas, { ...config, width, height, resolution });\r\n const camConfig = config[shots[0]];\r\n this.camera = perspectiveCamera({ ...camConfig, width, height });\r\n this.scene.add(this.camera);\r\n this.orbit = addOrbitControl(this.renderer, this.scene, this.camera, camConfig);\r\n this.orbit.enabled = false;\r\n // this.orbit.screenSpacePanning = true;\r\n }\r\n setupLights() {\r\n this.directionalLight = new THREE.DirectionalLight(0xffffff, 0.9)\r\n this.scene.add(this.directionalLight)\r\n this.ambientLight = new THREE.AmbientLight(0xffffff, 0.5)\r\n this.scene.add(this.ambientLight)\r\n }\r\n removeLights() {\r\n if (this.directionalLight)\r\n this.scene.remove(this.directionalLight)\r\n if (this.ambientLight)\r\n this.scene.remove(this.ambientLight)\r\n }\r\n setup3dObject({ fbxUrl }) {\r\n const objKey = \"surface1\"\r\n this.objConf = this.sceneConfig[objKey];\r\n if (this.carpetLoaded) {\r\n this.scene.remove(this.carpetMesh)\r\n const tarObj = this.scene.getObjectByName(\"TargetObject\")\r\n this.scene.remove(tarObj)\r\n\r\n this.carpetLoaded = false\r\n this.removeLights()\r\n }\r\n const { position = [0, 0, 0], rotation = [90, 0, 0], scale } = this.objConf;\r\n return new Promise((resolve, reject) => {\r\n const setup = () => {\r\n this.object.position.fromArray(position);\r\n this.object.scale.fromArray(scale);\r\n this.object.rotation.fromArray(convertArrIntoRad(rotation));\r\n if (this.material) {\r\n this.object.material = this.material\r\n this.object.material.needsUpdate = true\r\n this.render()\r\n }\r\n this.objectLoaded = true\r\n this.render()\r\n resolve();\r\n }\r\n if (!this.objectLoaded)\r\n\r\n this.fbxLoader.load(fbxUrl, obj => {\r\n\r\n this.object = obj.getObjectByName(objKey)\r\n this.scene.add(this.object);\r\n setup()\r\n }, undefined, console.error);\r\n else setup()\r\n })\r\n\r\n }\r\n async setupCarpet({ fbxUrl }) {\r\n this.objConf = this.sceneConfig[this.surfaceName];\r\n const { position = [0, 0, 0], rotation = [90, 0, 0] } = this.objConf;\r\n\r\n const setCarpet = (({ fbxUrl }) => {\r\n if (this.objectLoaded) {\r\n this.scene.remove(this.object)\r\n const tarObj = this.scene.getObjectByName(\"TargetObject\")\r\n if (tarObj)\r\n this.scene.remove(tarObj)\r\n this.removeLights()\r\n this.objectLoaded = false\r\n }\r\n return new Promise((resolve, reject) => {\r\n const setup = () => {\r\n // this.originalMesh = \r\n this.carpetMesh.position.fromArray(position);\r\n const { flagged } = this.sceneConfig;\r\n let fact = flagged ? 10 : 1\r\n this.directionalLight.position.set(position[0] - 3000 / fact, position[1] + 3000 / fact, position[2])\r\n var targetObject = new THREE.Object3D();\r\n targetObject.name = \"TargetObject\"\r\n targetObject.position.set(...position);\r\n this.scene.add(targetObject);\r\n this.directionalLight.target = targetObject;\r\n // let helper = new THREE.DirectionalLightHelper(this.directionalLight, 100, 0xff0000);\r\n // this.scene.add(helper);\r\n\r\n this.carpetMesh.rotation.fromArray(convertArrIntoRad(rotation.slice(0, 3)));\r\n if (this.designDetails)\r\n this.setCarpetScale(this.designDetails)\r\n\r\n if (this.material) {\r\n this.carpetMesh.material = this.material\r\n this.carpetMesh.material.needsUpdate = true\r\n this.render()\r\n }\r\n this.carpetLoaded = true\r\n this.render()\r\n resolve();\r\n }\r\n if (!this.carpetLoaded)\r\n\r\n this.fbxLoader.load(fbxUrl, obj => {\r\n\r\n this.carpetMesh = obj.getObjectByName(this.surfaceName)\r\n this.scene.add(this.carpetMesh);\r\n this.setupLights()\r\n setup()\r\n }, undefined, console.error);\r\n else setup()\r\n })\r\n }).bind(this)\r\n\r\n const setupFloor = (() => {\r\n return new Promise((resolve, reject) => {\r\n this.floorObjectKey = this.sceneConfig.objects3d.find(item => item === \"floor\" || item === \"Floor\" || item === \"FLOOR\")\r\n const floor = this.scene.getObjectByName(\"floor\") || this.scene.getObjectByName(\"Floor\") || this.scene.getObjectByName(\"FLOOR\")\r\n if (floor) {\r\n this.scene.remove(floor);\r\n this.render()\r\n }\r\n if (this.floorObjectKey) {\r\n const { modelUrl } = this.sceneConfig\r\n const fbxUrl = makeUrl(this.baseUrl, modelUrl);\r\n const setup = () => {\r\n const objKey = this.floorObjectKey;\r\n const objConf = this.sceneConfig[objKey]\r\n const { position = [0, 0, 0], rotation = [90, 0, 0], scale } = objConf;\r\n this.floor.position.fromArray(position);\r\n this.floor.scale.fromArray(scale);\r\n this.floor.rotation.fromArray(convertArrIntoRad(rotation));\r\n this.floor.material.needsUpdate = true;\r\n this.floor.visible = false;\r\n }\r\n const geometry = new THREE.BoxGeometry(1, 1, 1);\r\n const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });\r\n this.floor = new THREE.Mesh(geometry, material);\r\n setup();\r\n this.scene.add(this.floor);\r\n this.floor.geometry.computeBoundingBox();\r\n this.bounds = new THREE.Box3().setFromObject(this.floor);\r\n this.setupRoomBounds();\r\n resolve();\r\n }\r\n else {\r\n this.floor = null;\r\n this.bounds = null;\r\n resolve();\r\n };\r\n });\r\n }).bind(this)\r\n\r\n const carpet = await setCarpet({ fbxUrl });\r\n const floor = await setupFloor();\r\n const promiseArr = [carpet, floor];\r\n return Promise.all(promiseArr);\r\n\r\n\r\n\r\n\r\n }\r\n setupRoomBounds() {\r\n if (!this.bounds || !this.carpetMesh) return\r\n let smallBoxHalfSize = new THREE.Vector3();\r\n let boxBox = new THREE.Box3().setFromObject(this.carpetMesh);\r\n boxBox.getSize(smallBoxHalfSize);\r\n smallBoxHalfSize.multiplyScalar(0.5);\r\n let min = this.bounds.min.clone();\r\n let max = this.bounds.max.clone();\r\n min = min.add(smallBoxHalfSize);\r\n max = max.sub(smallBoxHalfSize);\r\n this.clampingBox = new THREE.Box3(min, max);\r\n }\r\n setCarpetScale(designDetails) {\r\n const { PhysicalWidth, PhysicalHeight, Unit } = designDetails\r\n if (!PhysicalWidth || !PhysicalHeight || !Unit) {\r\n console.error(\"Could not set carept scale\")\r\n return\r\n }\r\n const { flagged } = this.sceneConfig;\r\n let fact = flagged ? 10 : 1\r\n\r\n const wid = convertUnit(Unit, \"ft\", PhysicalWidth)\r\n const hgt = convertUnit(Unit, \"ft\", PhysicalHeight)\r\n this.carpetMesh.scale.set(wid / fact, hgt / fact, 2 / fact)\r\n this.setupRoomBounds()\r\n }\r\n setObjectVisibility(visibility) {\r\n this.object.visible = visibility\r\n this.render()\r\n }\r\n setCarpetVisibility(visibility) {\r\n this.carpetMesh.visible = visibility\r\n this.render()\r\n }\r\n setObjectTexture({ designDetails, designCanvas }) {\r\n return new Promise((resolve, reject) => {\r\n const { surfaceUnit = \"in\", doubleSide } = this.objProps;\r\n const PhysicalWidth = convertUnit(designDetails.Unit, surfaceUnit, designDetails.PhysicalWidth);\r\n const PhysicalHeight = convertUnit(designDetails.Unit, surfaceUnit, designDetails.PhysicalHeight);\r\n this.designDetails = { ...designDetails, PhysicalHeight, PhysicalWidth, Unit: surfaceUnit }\r\n const designTexture = new CanvasTexture(designCanvas);\r\n designTexture.anisotropy = this.renderer.capabilities.getMaxAnisotropy();\r\n designTexture.wrapS = designTexture.wrapT = THREE.RepeatWrapping;\r\n this.material = new THREE.MeshBasicMaterial({\r\n map: designTexture,\r\n transparent: true,\r\n side: doubleSide ? THREE.DoubleSide : THREE.FrontSide,\r\n alphaTest: 0.5,\r\n });\r\n if (!this.object) {\r\n console.error(\"could not find the object\")\r\n resolve()\r\n return;\r\n }\r\n this.object.material = this.material;\r\n this.object.material.needsUpdate = true;\r\n\r\n this.render()\r\n resolve()\r\n\r\n })\r\n\r\n }\r\n setCarpetTexture({ designDetails, designCanvas, normapCanvas }) {\r\n this.designDetails = designDetails\r\n\r\n const designTexture = new CanvasTexture(designCanvas);\r\n const normalTexture = new CanvasTexture(normapCanvas);\r\n // designTexture.magFilter = THREE.LinearFilter;\r\n // designTexture.minFilter = THREE.LinearFilter;\r\n designTexture.anisotropy = this.renderer.capabilities.getMaxAnisotropy();\r\n normalTexture.anisotropy = this.renderer.capabilities.getMaxAnisotropy();\r\n this.material = new THREE.MeshStandardMaterial({\r\n map: designTexture,\r\n normalMap: normalTexture,\r\n roughness: 1,\r\n metalness: 0.1,\r\n needsUpdate: true,\r\n transparent: true,\r\n side: THREE.FrontSide\r\n })\r\n if (!this.carpetMesh) return;\r\n this.setCarpetScale(this.designDetails)\r\n this.carpetMesh.material = this.material\r\n this.carpetMesh.material.needsUpdate = true\r\n this.render()\r\n }\r\n render() {\r\n if (!this.renderer) return;\r\n this.renderer.render(this.scene, this.camera);\r\n }\r\n setFov(value) {\r\n const { camera } = this;\r\n camera.fov = value;\r\n camera.updateProjectionMatrix();\r\n this.render();\r\n }\r\n mouseDownTouchStart(e) {\r\n if (!this.carpetMesh) return;\r\n let intersect = this.raycastMouseOnCarpet(e);\r\n if (!intersect) return\r\n const objPos = this.carpetMesh.position.clone();\r\n this.offset.copy(intersect.point).sub(objPos);\r\n return intersect\r\n }\r\n\r\n mouseTouchMove(e) {\r\n if (!this.carpetMesh) return;\r\n //TODO:instead of casting on carpet, cast on an infinite plane \r\n let intersect = this.raycastMouseOnCarpet(e);\r\n if (!intersect) return\r\n const objPos = this.carpetMesh.position.clone();\r\n const sub = intersect.point.sub(this.offset);\r\n sub.y = objPos.y;\r\n const subClamped = sub.clone();\r\n if (this.bounds) subClamped.clamp(this.clampingBox.min, this.clampingBox.max)\r\n subClamped.y = objPos.y;\r\n this.carpetMesh.position.copy(subClamped);\r\n this.render();\r\n }\r\n raycastMouseOnCarpet(e) {\r\n const { x, y } = e;\r\n let { mouseX, mouseY } = this.convMouseCord(x, y);\r\n var mouse = new THREE.Vector3(mouseX, mouseY, 0.99);\r\n this.raycaster.setFromCamera(mouse, this.camera);\r\n var intersects = this.raycaster.intersectObject(this.carpetMesh);\r\n return intersects[0];\r\n }\r\n convMouseCord(x, y) {\r\n // const { offsetX, offsetY } = this.getRendererOffset();\r\n const vec = new THREE.Vector2();\r\n const { width, height } = this.renderer.getSize(vec);\r\n\r\n var mouseX = ((x) / width) * 2 - 1;\r\n var mouseY = -((y) / height) * 2 + 1;\r\n return { mouseX, mouseY };\r\n }\r\n getCameraConfig() {\r\n const position = this.camera.position.toArray();\r\n const rotation = convertArrintoDeg(this.camera.rotation.toArray());\r\n const target = this.orbit.target.position.toArray();\r\n return { position, rotation, target };\r\n }\r\n rotateCarpet(rotationInDegrees, axis) {\r\n if (!this.carpetMesh) return\r\n this.carpetMesh.rotation[axis] += (rotationInDegrees * Math.PI) / 180;\r\n this.render();\r\n }\r\n scaleObject(surfaceName, scaleFactor, axis) {\r\n let object = this.scene.getObjectByName(surfaceName);\r\n object.scale[axis] += scaleFactor;\r\n this.render();\r\n }\r\n attachTransformControls(surfaceName) {\r\n let object = this.scene.getObjectByName(surfaceName);\r\n\r\n this.transform.attach(object);\r\n this.scene.add(this.transform);\r\n }\r\n getRendererOffset() {\r\n var offsetY = this.renderer.domElement.offsetTop;\r\n var offsetX = this.renderer.domElement.offsetLeft;\r\n return { offsetX, offsetY };\r\n }\r\n clearScene() {\r\n while (this.scene?.children.length > 0) {\r\n this.scene.remove(this.scene.children[0]);\r\n }\r\n this.render();\r\n }\r\n\r\n\r\n toScreenXY(position, camera) {\r\n var pos = position.clone();\r\n let projScreenMat = new THREE.Matrix4();\r\n projScreenMat.multiply(camera.projectionMatrix, camera.matrixWorldInverse);\r\n projScreenMat.multiplyVector3(pos);\r\n console.log(this.w, this.h)\r\n const { offsetX, offsetY } = this.getRendererOffset()\r\n console.log(offsetY)\r\n return {\r\n x: (pos.x + 1) * this.w / 2 + offsetX,\r\n y: (- pos.y + 1) * this.h / 2 + offsetY\r\n };\r\n\r\n }\r\n\r\n getCarpetPositions() {\r\n this.carpetMesh.geometry.computeBoundingBox();\r\n let box = this.carpetMesh.geometry.boundingBox;\r\n const widthheight = box.max.sub(box.min)\r\n\r\n const plane = new THREE.PlaneGeometry(widthheight.x, widthheight.y)\r\n const mat = new THREE.MeshBasicMaterial({ color: 0xff0000 })\r\n const m = new THREE.Mesh(plane, mat)\r\n m.scale.copy(this.carpetMesh.scale)\r\n m.position.copy(this.carpetMesh.position)\r\n m.rotation.copy(this.carpetMesh.rotation)\r\n const a = []\r\n plane.vertices.forEach(vertex => {\r\n const v = vertex.clone()\r\n v.applyMatrix4(this.carpetMesh.matrixWorld);\r\n a.push(v)\r\n })\r\n const b = a.map(vertex => createVector(vertex, this.camera, this.w, this.h))\r\n return [b[0], b[1], b[3], b[2]]\r\n }\r\n getCarpetArea() {\r\n const positions = this.getCarpetPositions();\r\n // positions[0].x\r\n }\r\n getCarpetMask() {\r\n const originalBg = this.scene.background;\r\n const object = this.scene.getObjectByName(this.surfaceName)\r\n const originalMat = object.material;\r\n // this.scene.background = new THREE.Color(0xffffff);\r\n const material = new THREE.MeshBasicMaterial({ color: 0xFFFFFF });\r\n object.material = material;\r\n object.material.needsUpdate = true;\r\n this.render();\r\n const dataurl = this.renderer.domElement.toDataURL();\r\n this.scene.background = originalBg;\r\n object.material = originalMat;\r\n this.render();\r\n return dataurl\r\n }\r\n toggleOrbitControls(enable) {\r\n this.orbit.enabled = enable;\r\n this.orbit.update();\r\n }\r\n toggleScreenSpacePanning(enable) {\r\n this.orbit.screenSpacePanning = enable;\r\n this.orbit.update();\r\n }\r\n toggleOrbitLockAxis(axis, enable) {\r\n if (axis === 0) {\r\n this.orbit.lockVertical = enable;\r\n this.orbit.update();\r\n } else if (axis === 1) {\r\n this.orbit.lockHorizontal = enable;\r\n this.orbit.update();\r\n }\r\n }\r\n changeShot(shotConfig) {\r\n const { position, rotation, target, fov } = shotConfig;\r\n const { camera } = this;\r\n camera.fov = fov;\r\n camera.updateProjectionMatrix();\r\n camera.position.fromArray(position);\r\n camera.rotation.fromArray(rotation);\r\n // camera.lookAt(...target);\r\n this.orbit.target.fromArray(target);\r\n this.orbit.update();\r\n this.render();\r\n }\r\n updateMap() {\r\n if (this.carpetMesh && this.carpetMesh.material.map) {\r\n this.carpetMesh.material.map.needsUpdate = true;\r\n this.carpetMesh.material.normalMap.needsUpdate = true;\r\n }\r\n if (this.object && this.object.material.map) {\r\n this.object.material.map.needsUpdate = true;\r\n // this.object.material.normalMap.needsUpdate = true;\r\n\r\n }\r\n this.render()\r\n }\r\n resizeRenderer({ width, height }) {\r\n this.w = width;\r\n this.h = height\r\n this.camera.aspect = width / height;\r\n this.camera.updateProjectionMatrix();\r\n\r\n this.renderer.setSize(width, height);\r\n }\r\n getObjectConfig() {\r\n console.log(this.carpetLoaded, this.objectLoaded)\r\n if (this.objectLoaded) {\r\n return null\r\n } else {\r\n return this.carpetMesh\r\n }\r\n }\r\n calculateCarpetSize() {\r\n const carpetSize = new THREE.Vector3();\r\n var box = new THREE.Box3();\r\n box.setFromObject(this.carpetMesh);\r\n box.getSize(carpetSize)\r\n // this.carpetMesh.geometry.computeBoundingBox();\r\n // this.carpetMesh.geometry.boundingBox.getSize(carpetSize);\r\n return carpetSize;\r\n }\r\n distbetween2Vertices(vertex1, vertex2, axis) {\r\n const { camera, renderer } = this;\r\n const vec = new THREE.Vector2()\r\n renderer.getSize(vec);\r\n const { x: width, y: height } = vec;\r\n const v1 = createVector(vertex1, camera, width, height);\r\n const v2 = createVector(vertex2, camera, width, height);\r\n const xDist = Math.abs(Math.abs(v2.x) - Math.abs(v1.x));\r\n const yDist = Math.abs(Math.abs(v2.y) - Math.abs(v1.y));\r\n return { xDist: xDist, yDist: yDist };\r\n }\r\n getGizmoCordinates() {\r\n const carpetSize = this.calculateCarpetSize();\r\n const smallerDim = carpetSize.x > carpetSize.y ? carpetSize.x : carpetSize.y;\r\n const carpetRadius = smallerDim / 5;\r\n const carpetCenter = this.carpetMesh.position.clone();\r\n\r\n const vertex1 = carpetCenter.clone();\r\n const vertex2 = new THREE.Vector3(\r\n carpetCenter.x,\r\n carpetCenter.y,\r\n carpetCenter.z + carpetRadius)\r\n\r\n const dist1 = this.distbetween2Vertices(vertex1, vertex2);\r\n const radYY = dist1.yDist;\r\n const radYX = dist1.xDist;\r\n\r\n const vertex3 = new THREE.Vector3(\r\n carpetCenter.x + carpetRadius,\r\n carpetCenter.y,\r\n carpetCenter.z);\r\n //TODO:this could be point of failure\r\n const vertex4 = carpetCenter.clone();\r\n const dist2 = this.distbetween2Vertices(vertex3, vertex4);\r\n const radXX = dist2.xDist;\r\n const radXY = dist2.yDist;\r\n\r\n const area1 = areaOfellipse(radYY, radXX);\r\n const area2 = areaOfellipse(radXY, radYX);\r\n let radX, radY;\r\n if (area1 > area2) {\r\n radX = radXX;\r\n radY = radYY;\r\n } else {\r\n radX = radXY;\r\n radY = radYX;\r\n }\r\n const canvasCenter = createVector(carpetCenter, this.camera, this.w, this.h);\r\n return { radX, radY, canvasCenter }\r\n }\r\n // downloadImageData() {\r\n // const dataurl = this.renderer.domElement.toBlob(blob => {\r\n // var strData = URL.createObjectURL(blob);\r\n // var link = document.createElement(\"a\");\r\n // document.body.appendChild(link); //Firefox requires the link to be in the body\r\n // link.setAttribute(\"download\", \"download.png\");\r\n // link.href = strData;\r\n // link.click()\r\n // document.body.removeChild(link); //remove the link when done\r\n // })\r\n\r\n\r\n // }\r\n}\r\nconst perspectiveCamera = (config = {}) => {\r\n const { innerWidth, innerHeight } = window;\r\n let {\r\n fov = 40,\r\n near = 0.1,\r\n far = 100000,\r\n height = innerHeight,\r\n width = innerWidth,\r\n position = [0, 200, 500],\r\n target = [0, 0, 0],\r\n rotation = [0, 0, 0],\r\n } = config;\r\n const aspect = width / height;\r\n const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);\r\n camera.lookAt(new THREE.Vector3(...target)); // This seems to be disabled by OrbitControls\r\n camera.position.set(...position);\r\n camera.rotation.set(...convertArrIntoRad(rotation));\r\n return camera;\r\n};\r\nconst renderer = (canvas, config = {}) => {\r\n const { innerWidth, innerHeight, devicePixelRatio } = window;\r\n let {\r\n width = innerWidth,\r\n height = innerHeight,\r\n preserveDrawingBuffer = true,\r\n alpha = true,\r\n antialias = false,\r\n resolution = 1\r\n } = config;\r\n //console.log(width, height);\r\n const renderer = new THREE.WebGLRenderer({\r\n canvas,\r\n preserveDrawingBuffer,\r\n alpha,\r\n antialias\r\n });\r\n // renderer.autoClear = false;\r\n // renderer.setClearColor(0x000000);\r\n renderer.setPixelRatio(resolution);\r\n renderer.setSize(width, height);\r\n return renderer;\r\n};\r\n\r\nconst addOrbitControl = function (renderer, scene, camera, config = {}) {\r\n let { target = [0, 0, 0] } = config;\r\n const control = new OrbitControls(camera, renderer.domElement);\r\n control.enableKeys = false;\r\n control.target = new THREE.Vector3(...target);\r\n // controls .rotateSpeed = 5;\r\n // controls .zoomSpeed = 2.5;\r\n control.addEventListener(\"change\", () => {\r\n renderer.render(scene, camera);\r\n });\r\n function animate() {\r\n requestAnimationFrame(animate);\r\n control.update();\r\n }\r\n animate();\r\n return control;\r\n};\r\nexport const loadFbx = (url) => {\r\n return new Promise((resolve, reject) => {\r\n new FBXLoader().load(\r\n url,\r\n resolve,\r\n undefined,\r\n reject\r\n );\r\n });\r\n}","import { readImage, resizeKeepingAspect, convertUnit, convertArrIntoRad } from \"./../../utils/utils\";\r\nimport { clearCanvas, createCanvas, downloadImageData } from \"./../../utils/canvasutils\";\r\nimport ThreeViewHelper from \"./threeviewhelper\";\r\n// import TileCanvas from \"../tilecanvasnew\";\r\n// const tileCanvas = new TileCanvas()\r\n\r\nfunction createName() {\r\n let res = \"\"\r\n Array.from(arguments).forEach(argument => {\r\n if (argument) {\r\n res = `${res}${argument}.`;\r\n }\r\n });\r\n return res\r\n}\r\nfunction makeUrl() {\r\n let res = \"\"\r\n Array.from(arguments).forEach((argument, index) => {\r\n if (argument) {\r\n res = `${res}${index === 0 ? \"\" : \"/\"}${argument}`;\r\n }\r\n });\r\n return res\r\n}\r\nconst rgbFromHex = hex => {\r\n let rgb = Array[3]\r\n rgb[0] = parseInt(hex.substring(1, 3), 16);\r\n rgb[1] = parseInt(hex.substring(3, 5), 16);\r\n rgb[2] = parseInt(hex.substring(5, 7), 16);\r\n return rgb\r\n}\r\n\r\nconst patchRgb = [45, 24, 18];\r\n\r\nexport default class RoomViewHelper {\r\n constructor() {\r\n this.config = {};\r\n this.baseUrl = null;\r\n this.dimension = { width: null, height: null };\r\n this.dimensionPixels = { width: null, height: null };\r\n this.bgImage = null;\r\n this.maskImage = null;\r\n this.bgPatchImage = null;\r\n this.bgPatchShadowImage = null;\r\n this.shadowImage = null;\r\n this.highlightImage = null;\r\n this.canvasArray = Array(4);\r\n\r\n this.carpetURL = \"\";\r\n this.fbxLoaded = false;\r\n this.threeView = new ThreeViewHelper();\r\n\r\n this.zoom = 2;\r\n\r\n }\r\n\r\n initCanvas(options) {\r\n this.bgCanvas = options.bgCanvas\r\n this.threeCanvas = options.threeCanvas\r\n this.maskCanvas = options.maskCanvas\r\n this.shadowCanvas = options.shadowCanvas\r\n this.container = options.container\r\n this.inputCanvas = options.inputCanvas\r\n }\r\n clearAllCanvases() {\r\n const { width, height } = this.dimension;\r\n console.info(\"Clearing canvases\", this.shadowCanvas)\r\n clearCanvas(this.bgCanvas, width, height);\r\n clearCanvas(this.maskCanvas, width, height);\r\n clearCanvas(this.shadowCanvas, width, height);\r\n clearCanvas(this.inputCanvas, width, height);\r\n }\r\n initConfig({ baseUrl, config, files }) {\r\n this.baseUrl = baseUrl\r\n this.config = config\r\n const illustrationDims = this.config.dims;\r\n const containerDims = {\r\n width: this.container.clientWidth,\r\n height: this.container.clientHeight\r\n }\r\n\r\n this.resolution = window.devicePixelRatio;\r\n this.dimensionPixels = resizeKeepingAspect(illustrationDims, containerDims, \"fit_inside\")\r\n\r\n this.dimension = {\r\n width: window.screen.width * this.resolution,\r\n height: window.screen.height * this.resolution\r\n };\r\n this.resolution = this.dimension.width / this.dimensionPixels.width\r\n this.inputCanvas.width = this.dimensionPixels.width\r\n this.inputCanvas.height = this.dimensionPixels.height\r\n // setCanvasDimensions(this.inputCanvas, this.dimension, this.dimensionPixels)\r\n\r\n const x = { shot: this.config.shots[0], light: this.config.lights ? this.config.lights[0] : null };\r\n const bgUrl = `${createName(x.shot, x.light)}bg.jpg`;\r\n const bgPatchUrl = `${createName(x.shot, x.light)}pch.png`;\r\n const bgPatchShadowUrl = `${createName(x.shot, x.light)}pch.sh.jpg`;\r\n const maskUrl = `${createName(x.shot, x.light)}m.png`;\r\n const shadowUrl = `${createName(x.shot, x.light)}sh.jpg`;\r\n const highlightUrl = `${createName(x.shot, x.light)}hl.jpg`;\r\n const glowUrl = `${createName(x.shot, x.light)}gl.jpg`;\r\n const promises = [];\r\n if (!files.includes(bgUrl))\r\n promises.push(Promise.reject(\"no background image\"))\r\n else {\r\n promises.push(readImage(makeUrl(baseUrl, bgUrl)).then(img => this.bgImage = img))\r\n if (files.includes(bgPatchUrl))\r\n promises.push(readImage(bgPatchUrl).then(img => this.patchImage = img))\r\n else\r\n this.patchImage = null\r\n if (files.includes(bgPatchShadowUrl))\r\n promises.push(readImage(makeUrl(baseUrl, bgPatchShadowUrl)).then(img => this.patchShadow = img))\r\n else {\r\n this.patchShadow = null\r\n }\r\n if (files.includes(maskUrl))\r\n promises.push(readImage(makeUrl(baseUrl, maskUrl)).then(img => this.maskImage = img))\r\n else\r\n this.maskImage = null\r\n if (files.includes(shadowUrl))\r\n promises.push(readImage(makeUrl(baseUrl, shadowUrl)).then(img => this.shadowImage = img))\r\n if (files.includes(highlightUrl))\r\n promises.push(readImage(makeUrl(baseUrl, highlightUrl)).then(img => this.highlightImage = img))\r\n if (files.includes(glowUrl))\r\n promises.push(readImage(makeUrl(baseUrl, glowUrl)).then(img => this.glowImage = img))\r\n }\r\n return promises\r\n }\r\n updateBackground(options = {}) {\r\n const { clear = false, dominantColorHex, canvas = this.bgCanvas } = options\r\n const { width, height } = this.dimension;\r\n\r\n const bgCtx = canvas.getContext(\"2d\");\r\n clearCanvas(canvas, width, height);\r\n setCanvasDimensions(canvas, this.dimension, this.dimensionPixels)\r\n if (clear) {\r\n return \"clear\";\r\n }\r\n bgCtx.drawImage(this.bgImage, 0, 0, width, height);\r\n if (this.patchImage && dominantColorHex) {\r\n\r\n const activeColor = rgbFromHex(dominantColorHex)\r\n const patchCanvas = createCanvas(width, height);\r\n const patchCtx = patchCanvas.getContext(\"2d\");\r\n patchCtx.drawImage(this.patchImage, 0, 0, width, height)\r\n let patchData = patchCtx.getImageData(0, 0, width, height);\r\n\r\n for (let i = 0; i < patchData.data.length; i += 4) {\r\n if (patchData.data[i] === patchRgb[0] && patchData.data[i + 1] === patchRgb[1] && patchData.data[i + 2] === patchRgb[2]) {\r\n patchData.data[i] = activeColor[0];\r\n patchData.data[i + 1] = activeColor[1];\r\n patchData.data[i + 2] = activeColor[2];\r\n }\r\n }\r\n patchCtx.putImageData(patchData, 0, 0);\r\n\r\n bgCtx.globalCompositeOperation = \"overlay\";\r\n bgCtx.drawImage(patchCanvas, 0, 0, width, height);\r\n\r\n if (this.patchShadow) {\r\n bgCtx.globalCompositeOperation = \"multiply\";\r\n bgCtx.drawImage(this.patchShadow, 0, 0, width, height);\r\n }\r\n }\r\n return \"successfully updated bg\"\r\n }\r\n updatethreeCanvas() {\r\n if (!this.config.scenes) return\r\n const scene = this.config.scenes[0];\r\n const { roomType } = this.config;\r\n const sceneConfig = this.config[scene];\r\n this.threeView.init({\r\n canvas: this.threeCanvas,\r\n config: sceneConfig,\r\n shots: this.config.shots,\r\n dims: this.dimensionPixels,\r\n resolution: this.resolution\r\n })\r\n switch (roomType) {\r\n case \"illustration\":\r\n return this.threeView.setup3dObject({ fbxUrl: makeUrl(this.baseUrl, sceneConfig.modelUrl) });\r\n default:\r\n return this.threeView.setupCarpet({ fbxUrl: \"https://v3.explorug.com/rug.fbx\" });\r\n\r\n }\r\n }\r\n\r\n changeDimensions({ physicalWidthCms, physicalHeightCms }) {\r\n const { width, height } = this.designDetails;\r\n let PhysicalWidth, PhysicalHeight;\r\n if (!physicalWidthCms || !physicalHeightCms) {\r\n const { width: newWidth, height: newHeight } = resizeKeepingAspect({ width, height }, { width: 1200, height: 1500 }, \"fit_inside\");\r\n PhysicalWidth = convertUnit(\"in\", \"ft\", newWidth / 10)\r\n PhysicalHeight = convertUnit(\"in\", \"ft\", newHeight / 10)\r\n }\r\n else {\r\n PhysicalWidth = convertUnit(\"cm\", \"ft\", physicalWidthCms)\r\n PhysicalHeight = convertUnit(\"cm\", \"ft\", physicalHeightCms)\r\n }\r\n\r\n const designDetails = { Width: width, Height: height, PhysicalWidth, PhysicalHeight, Unit: \"ft\" }\r\n this.designDetails = designDetails;\r\n this.threeView.setCarpetScale(designDetails);\r\n this.threeView.carpetMesh.material.needsUpdate = true;\r\n this.threeView.render();\r\n return Promise.resolve()\r\n }\r\n\r\n async renderFromJpg({ designImagePath, physicalWidthCms, physicalHeightCms }) {\r\n let designImage = new Image();\r\n await new Promise((resolve) => {\r\n designImage.onload = () => {\r\n resolve();\r\n }\r\n designImage.crossOrigin = \"anonymous\";\r\n designImage.src = designImagePath;\r\n });\r\n\r\n this.threeView.setCarpetVisibility(false)\r\n // return readImage(designPath).then(designImage => {\r\n // const designImage = designPath;\r\n const { width, height } = designImage\r\n const canvas = createCanvas(width, height)\r\n const context = canvas.getContext(\"2d\");\r\n context.drawImage(designImage, 0, 0\r\n )\r\n const canvasNorm = createCanvas(width, height)\r\n const ctxNorm = canvasNorm.getContext(\"2d\")\r\n ctxNorm.fillStyle = \"rgb(127,127,255)\";\r\n ctxNorm.fillRect(0, 0, width, height);\r\n let PhysicalWidth, PhysicalHeight;\r\n if (!physicalWidthCms || !physicalHeightCms) {\r\n const { width: newWidth, height: newHeight } = resizeKeepingAspect({ width, height }, { width: 1200, height: 1500 }, \"fit_inside\");\r\n PhysicalWidth = convertUnit(\"in\", \"ft\", newWidth / 10)\r\n PhysicalHeight = convertUnit(\"in\", \"ft\", newHeight / 10)\r\n }\r\n else {\r\n PhysicalWidth = convertUnit(\"cm\", \"ft\", physicalWidthCms)\r\n PhysicalHeight = convertUnit(\"cm\", \"ft\", physicalHeightCms)\r\n }\r\n\r\n // if (PhysicalWidth > 12 || PhysicalHeight > 15) {\r\n // console.log(PhysicalWidth, PhysicalHeight)\r\n // const { width, height } = resizeKeepingAspect({ width: PhysicalWidth, height: PhysicalHeight }, { width: 12, height: 15 }, \"fit_inside\")\r\n // // PhysicalWidth = width;\r\n // // PhysicalHeight = height;\r\n // }\r\n const { position = [0, 0, 0], rotation = [90, 0, 0] } = this.threeView.objConf;\r\n this.threeView.carpetMesh.position.fromArray(position);\r\n this.threeView.carpetMesh.rotation.fromArray(convertArrIntoRad(rotation.slice(0, 3)));\r\n const designDetails = { Width: width, Height: height, PhysicalWidth, PhysicalHeight, Unit: \"ft\" }\r\n this.designDetails = designDetails;\r\n this.threeView.setCarpetTexture({\r\n designDetails,\r\n designCanvas: canvas,\r\n normapCanvas: canvasNorm\r\n })\r\n this.updateGizmo();\r\n this.threeView.setCarpetVisibility(true)\r\n return Promise.resolve()\r\n // })\r\n }\r\n renderDesign({ designDetails, designPath, hash }) {\r\n // this.designDetails = designDetails;\r\n // this.designPath = designPath;\r\n // const { roomType } = this.config;\r\n // const { designScale } = this.config[this.config.scenes[0]]\r\n // if (designScale)\r\n // this.zoom = designScale\r\n // tileCanvas.init({ tileSize: 256, zoom: this.zoom, designDetails })\r\n\r\n // switch (roomType) {\r\n // case \"illustration\":\r\n // return new Promise((resolve, reject) => {\r\n // this.threeView.setObjectTexture({\r\n // designDetails,\r\n // designCanvas: tileCanvas.canvas\r\n // })\r\n // // this.threeView.setObjectVisibility(false)\r\n\r\n // tileCanvas.drawCanvasTiles({\r\n // designPath,\r\n // zoom: this.zoom,\r\n // designDetails,\r\n // hash,\r\n // drawNormap: false\r\n // }, () => {\r\n // // this.threeView.updateMap()\r\n // }, () => {\r\n // this.threeView.updateMap()\r\n // setTimeout(() => {\r\n // resolve()\r\n // // this.threeView.setObjectVisibility(true)\r\n // }, 500);\r\n // })\r\n // })\r\n\r\n // default:\r\n\r\n // return new Promise((resolve, reject) => {\r\n // this.threeView.setCarpetTexture({\r\n // designDetails,\r\n // designCanvas: tileCanvas.canvas,\r\n // normapCanvas: tileCanvas.canvasNorm\r\n // })\r\n // this.threeView.setCarpetVisibility(false)\r\n\r\n // tileCanvas.drawCanvasTiles({\r\n // designPath,\r\n // zoom: this.zoom,\r\n // designDetails,\r\n // hash\r\n // }, () => {\r\n // // this.threeView.updateMap()\r\n // }, () => {\r\n // this.threeView.updateMap()\r\n // setTimeout(() => {\r\n // resolve()\r\n // this.threeView.setCarpetVisibility(true)\r\n // this.updateGizmo()\r\n // }, 500);\r\n // })\r\n // })\r\n\r\n // }\r\n\r\n // return new Promise((resolve, reject) => {\r\n // readImage(\"temp/testcircular/diffuse.jpg\").then(dif => {\r\n // readImage(\"temp/testcircular/diffuse-norm.png\").then(norm => {\r\n // const desCanvas = createCanvas(4096, 4096)\r\n // const nomCanvas = createCanvas(4096, 4096)\r\n // desCanvas.getContext(\"2d\").drawImage(dif, 0, 0, 4096, 4096)\r\n // nomCanvas.getContext(\"2d\").drawImage(norm, 0, 0, 4096, 4096)\r\n // this.threeView.setCarpetTexture({\r\n // designDetails,\r\n // designCanvas: desCanvas,\r\n // normapCanvas: nomCanvas\r\n // })\r\n // this.threeView.updateMap()\r\n // resolve()\r\n // })\r\n // })\r\n // })\r\n }\r\n setTileDetails(tileDetails) {\r\n this.tileDetails = tileDetails\r\n }\r\n updateTiles({ designDetails, updateDesignTiles, updateNormapTiles, hash }) {\r\n // if (!this.tileDetails) {\r\n // return Promise.resolve()\r\n // }\r\n // return new Promise((resolve, reject) => {\r\n // let colorIndex;\r\n // if (updateDesignTiles) colorIndex = updateDesignTiles.colorIndex\r\n // if (updateNormapTiles) colorIndex = updateNormapTiles.colorIndex\r\n\r\n // this.designDetails = designDetails\r\n\r\n // let colorTileData = null\r\n // if (colorIndex && colorIndex !== -1) {\r\n // const tileData = this.tileDetails[`colorTileData${this.zoom}`]\r\n // colorTileData = tileData[colorIndex].tiles\r\n // } else {\r\n // //all tiles\r\n // }\r\n // const props = {\r\n // tiles: colorTileData,\r\n // zoom: this.zoom,\r\n // designDetails,\r\n // designPath: this.designPath,\r\n // hash\r\n // }\r\n // if (!updateNormapTiles) {\r\n // tileCanvas.designTilesUpdated = true\r\n // tileCanvas.updateDesignTiles(props, () => {\r\n // this.threeView.updateMap()\r\n // }, () => {\r\n // this.threeView.updateMap()\r\n // setTimeout(() => {\r\n // resolve()\r\n\r\n // }, 500);\r\n // })\r\n // } else {\r\n // tileCanvas.normapTilesUpdated = true\r\n // tileCanvas.updateNormapTiles(props, () => {\r\n // this.threeView.updateMap()\r\n // }, () => {\r\n // this.threeView.updateMap()\r\n // setTimeout(() => {\r\n // resolve()\r\n\r\n // }, 500);\r\n // })\r\n // // this.tileCanvas1x.updateNo(props, () => this.render())\r\n // }\r\n // })\r\n\r\n }\r\n updateMask(options = {}) {\r\n const { clear = false } = options;\r\n const { width, height } = this.dimension;\r\n setCanvasDimensions(this.maskCanvas, this.dimension, this.dimensionPixels)\r\n clearCanvas(this.maskCanvas, width, height);\r\n if (clear) return \"clear\"\r\n if (!this.maskImage) return\r\n\r\n const tmpCanvas = createCanvas(width, height);\r\n tmpCanvas.getContext(\"2d\").drawImage(this.bgCanvas, 0, 0, width, height);\r\n makeMask(tmpCanvas, width, height, this.maskImage);\r\n\r\n this.maskCanvas.getContext(\"2d\").drawImage(tmpCanvas, 0, 0, width, height);\r\n }\r\n updateShadow(options = {}) {\r\n const { clear = false } = options\r\n const { width, height } = this.dimension;\r\n const tempCanvas = createCanvas(width, height);\r\n const tCtx = tempCanvas.getContext(\"2d\");\r\n\r\n setCanvasDimensions(this.shadowCanvas, this.dimension, this.dimensionPixels)\r\n clearCanvas(this.shadowCanvas, width, height);\r\n\r\n if (clear) return \"clear\";\r\n // const ctx = this.canvas.getContext(\"2d\");\r\n // tCtx.fillStyle = \"rgb(0,0,0)\";\r\n // tCtx.fillRect(0, 0, width, height)\r\n tCtx.drawImage(this.bgCanvas, 0, 0, width, height);\r\n tCtx.drawImage(this.threeCanvas, 0, 0, width, height);\r\n tCtx.drawImage(this.maskCanvas, 0, 0, width, height);\r\n\r\n if (this.shadowImage) {\r\n tCtx.globalCompositeOperation = \"multiply\";\r\n tCtx.drawImage(this.shadowImage, 0, 0, width, height);\r\n }\r\n if (this.highlightImage) {\r\n tCtx.globalCompositeOperation = \"screen\";\r\n tCtx.drawImage(this.highlightImage, 0, 0, width, height);\r\n } if (this.glowImage) {\r\n tCtx.globalCompositeOperation = \"overlay\";\r\n tCtx.drawImage(this.glowImage, 0, 0, width, height);\r\n }\r\n tCtx.globalCompositeOperation = \"destination-in\";\r\n tCtx.drawImage(this.threeCanvas, 0, 0, width, height);\r\n this.shadowCanvas.getContext(\"2d\").drawImage(tempCanvas, 0, 0, width, height)\r\n }\r\n\r\n mouseDownTouchStart(e) {\r\n this.updateGizmo()\r\n this.intersectsGizmo = this.findGizmoIntersection(e)\r\n this.prev = { ...e }\r\n if (!this.intersectsGizmo) {\r\n const intersectsCarpet = this.threeView.mouseDownTouchStart(e)\r\n this.shadowCleared = false\r\n if (intersectsCarpet) {\r\n this.updateShadow({ clear: true });\r\n this.shadowCleared = true\r\n }\r\n } else {\r\n this.prev = { ...e }\r\n this.updateShadow({ clear: true });\r\n this.shadowCleared = true\r\n }\r\n }\r\n mouseDownTouchMove(e) {\r\n if (!this.intersectsGizmo) {\r\n this.threeView.mouseTouchMove(e)\r\n this.updateGizmo()\r\n } else {\r\n const difference = e.x - this.prev.x;\r\n this.threeView.rotateCarpet(difference, \"z\")\r\n this.prev = { ...e }\r\n }\r\n\r\n }\r\n mouseDownTouchEnd(e) {\r\n if (this.shadowCleared)\r\n this.updateShadow();\r\n }\r\n findGizmoIntersection(e) {\r\n const { x, y } = e\r\n if (!this.inputCanvas) return;\r\n var imgData = this.inputCanvas\r\n .getContext(\"2d\")\r\n .getImageData(x - 10, y - 10, 20, 20);\r\n var ingizmo = false;\r\n for (var i = 0; i < imgData.data.length; i += 4) {\r\n if (imgData.data[i + 3] !== 0) {\r\n ingizmo = true;\r\n break;\r\n }\r\n }\r\n return ingizmo\r\n }\r\n updateGizmo() {\r\n const diamondHeight = 10;\r\n const context = this.inputCanvas.getContext(\"2d\")\r\n const { width, height } = this.inputCanvas\r\n let { radX, radY, canvasCenter } = this.threeView.getGizmoCordinates()\r\n\r\n const rgb = {\r\n r: 250,\r\n g: 250,\r\n b: 250,\r\n a: 0.8\r\n };\r\n const colorStr =\r\n \"rgba(\" + rgb.r + \", \" + rgb.g + \", \" + rgb.b + \", \" + rgb.a + \")\";\r\n var radiusX;\r\n var radiusY;\r\n if (radX > radY) {\r\n radiusX = radX;\r\n radiusY = radY;\r\n } else {\r\n radiusX = radY;\r\n radiusY = radX;\r\n }\r\n // Draw the ellipse\r\n context.strokeStyle = colorStr;\r\n context.fillStyle = colorStr;\r\n context.lineWidth = 1;\r\n context.shadowOffsetX = 0;\r\n context.shadowColor = \"black\";\r\n context.shadowOffsetY = 1;\r\n context.clearRect(0, 0, width, height);\r\n context.beginPath();\r\n context.ellipse(\r\n canvasCenter.x,\r\n canvasCenter.y,\r\n radiusX,\r\n radiusY,\r\n 0,\r\n 0,\r\n 2 * Math.PI\r\n );\r\n context.stroke();\r\n context.beginPath();\r\n context.moveTo(canvasCenter.x, canvasCenter.y + radiusY - 5);\r\n context.lineTo(canvasCenter.x + diamondHeight, canvasCenter.y + radiusY);\r\n context.lineTo(canvasCenter.x, canvasCenter.y + radiusY + 5);\r\n context.lineTo(canvasCenter.x - diamondHeight, canvasCenter.y + radiusY);\r\n context.fill();\r\n }\r\n resize(newDims) {\r\n if (!this.config.dims || !this.threeView.renderer) return\r\n this.dimensionPixels = resizeKeepingAspect(this.config.dims, newDims, \"fit_inside\")\r\n setCanvasDimensionsStyle(this.bgCanvas, this.dimensionPixels)\r\n this.threeView.resizeRenderer(this.dimensionPixels)\r\n setCanvasDimensionsStyle(this.maskCanvas, this.dimensionPixels)\r\n setCanvasDimensionsStyle(this.shadowCanvas, this.dimensionPixels)\r\n this.inputCanvas.width = this.dimensionPixels.width\r\n this.inputCanvas.height = this.dimensionPixels.height\r\n this.updateGizmo()\r\n }\r\n renderInCanvas() {\r\n const { width: w, height: h } = this.dimensionPixels;\r\n const renderCanvas = createCanvas(w, h);\r\n const renderCtx = renderCanvas.getContext(\"2d\");\r\n renderCtx.drawImage(this.bgCanvas, 0, 0, w, h);\r\n renderCtx.drawImage(this.threeCanvas, 0, 0, w, h);\r\n renderCtx.drawImage(this.maskCanvas, 0, 0, w, h);\r\n renderCtx.drawImage(this.shadowCanvas, 0, 0, w, h);\r\n return renderCanvas;\r\n }\r\n downloadRendering(name, mime) {\r\n const renderCanvas = this.renderInCanvas();\r\n downloadImageData(renderCanvas, name, \"image/\" + mime);\r\n }\r\n\r\n rotatebybutton(deg) {\r\n this.threeView.rotateCarpet(deg, \"z\");\r\n }\r\n}\r\n\r\nfunction makeMask(canvas, w, h, maskImg, flag = false) {\r\n const tCanvas = createCanvas(w, h);\r\n\r\n const shCtx = canvas.getContext(\"2d\");\r\n const tmpCtx = tCanvas.getContext(\"2d\");\r\n tmpCtx.drawImage(maskImg, 0, 0, w, h);\r\n let imgData = shCtx.getImageData(0, 0, w, h);\r\n let maskData = tmpCtx.getImageData(0, 0, w, h);\r\n for (let i = 0; i < maskData.data.length; i += 4) {\r\n if (flag) {\r\n imgData.data[i + 3] = maskData.data[i];\r\n } else {\r\n imgData.data[i + 3] = maskData.data[i];\r\n }\r\n }\r\n shCtx.putImageData(imgData, 0, 0);\r\n return maskData;\r\n}\r\nconst setCanvasDimensionsStyle = (canvas, dimensionPixels) => {\r\n const { width: widthPix, height: heightPix } = dimensionPixels;\r\n\r\n canvas.style.width = `${widthPix}px`;\r\n canvas.style.height = `${heightPix}px`;\r\n}\r\nconst setCanvasDimensions = (canvas, dimension, dimensionPixels) => {\r\n const { width, height } = dimension;\r\n const { width: widthPix, height: heightPix } = dimensionPixels;\r\n\r\n canvas.width = width\r\n canvas.height = height\r\n canvas.style.width = `${widthPix}px`;\r\n canvas.style.height = `${heightPix}px`;\r\n}","import React, { useState, forwardRef } from \"react\";\r\nfunction isTouchEvent(event) {\r\n return event.nativeEvent.type === \"touchstart\" || event.nativeEvent.type === \"touchmove\";\r\n}\r\nconst InputCanvas = (props, ref) => {\r\n const { onStart, onMove, onEnd, zIndex, pointerEvent, remapCoord, ...otherprops } = props;\r\n const [mouseDown, setMouseDown] = useState(false);\r\n\r\n const handleMouseDown = (e) => {\r\n const location = getlocation(e, ref.current.getBoundingClientRect());\r\n if (!location) return;\r\n setMouseDown(true);\r\n if (!onStart) return;\r\n onStart(location);\r\n };\r\n\r\n const handleMouseMove = (e) => {\r\n if (!mouseDown || !onMove) return;\r\n const location = getlocation(e, ref.current.getBoundingClientRect());\r\n if (!location) return;\r\n onMove(location);\r\n };\r\n const handleMouseUp = (e) => {\r\n if (e.cancelable) {\r\n e.stopPropagation();\r\n }\r\n setMouseDown(false);\r\n if (onEnd) onEnd();\r\n };\r\n\r\n function getlocation(event, rect) {\r\n // if (isTouchEvent(event)) {\r\n // console.log(event.nativeEvent.targetTouches[0], event.nativeEvent.touches[0]);\r\n // }\r\n const { clientX, clientY } = isTouchEvent(event) ? event.nativeEvent.targetTouches[0] : event;\r\n const { top, left, width, height } = rect;\r\n const xabs = clientX - left;\r\n const yabs = clientY - top;\r\n if (!remapCoord)\r\n return {\r\n x: xabs,\r\n y: yabs,\r\n };\r\n\r\n const { width: mapWidth, height: mapHeight } = remapCoord;\r\n const x = (mapWidth * xabs) / width;\r\n const y = (mapHeight * yabs) / height;\r\n return { x, y };\r\n }\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default forwardRef(InputCanvas);\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\n\r\nimport React, { useState, useRef, useEffect } from \"react\";\r\nimport styled from \"styled-components\";\r\nimport RoomViewHelper from \"./roomviewhelper\";\r\nimport { useMount, useWindowSize } from \"react-use\";\r\nimport InputCanvas from \"../InputCanvas\";\r\nimport { clearCanvas, createCanvas, downloadImageData } from \"./../../utils/canvasutils\";\r\nimport { readJSON } from \"./../../utils/utils\";\r\nlet roomViewHelper = new RoomViewHelper();\r\nconst Container = styled.div`\r\n width: 100%;\r\n height: 100%;\r\n position: absolute;\r\n display: none;\r\n &.show{\r\n display: block;\r\n }\r\n & > canvas {\r\n position: absolute;\r\n margin: auto;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n /* width: inherit !important;\r\n height: auto !important; */\r\n }\r\n`;\r\nconst Canvas = styled.canvas`\r\n z-index: ${(props) => props.zIndex};\r\n pointer-events: ${(props) => (props.pointerEvent ? \"all\" : \"none\")};\r\n`;\r\nfunction usePrevious(value) {\r\n const ref = useRef({});\r\n useEffect(() => {\r\n ref.current = value;\r\n }, [value]);\r\n return ref.current;\r\n}\r\nconst RoomViewNew = (props) => {\r\n const { show, roomData, designImageProps, onRendered, onRoomLoaded, onInteracted } = props;\r\n const { Name: roomName, Dir: dir, Files: files, baseUrl, config } = roomData;\r\n const { designImagePath, designName, physicalWidthCms, physicalHeightCms } = designImageProps;\r\n const containerRef = useRef(null);\r\n const bgCanvasRef = useRef(null);\r\n const threeCanvasRef = useRef(null);\r\n const maskCanvasRef = useRef(null);\r\n const shadowCanvasRef = useRef(null);\r\n const inputCanvasRef = useRef(null);\r\n\r\n const prevRoomDetails = usePrevious(roomData);\r\n const prevDesignImagePath = usePrevious(designImagePath);\r\n const windowSize = useWindowSize();\r\n const [isDownloading, setIsDownloading] = useState(false);\r\n\r\n useEffect(() => {\r\n roomViewHelper.resize(windowSize);\r\n }, [windowSize]);\r\n useMount(() => {\r\n const canvasConfig = {\r\n bgCanvas: bgCanvasRef.current,\r\n threeCanvas: threeCanvasRef.current,\r\n maskCanvas: maskCanvasRef.current,\r\n shadowCanvas: shadowCanvasRef.current,\r\n container: containerRef.current,\r\n inputCanvas: inputCanvasRef.current,\r\n };\r\n roomViewHelper.initCanvas(canvasConfig);\r\n });\r\n useEffect(() => {\r\n if (!roomViewHelper?.designDetails || !physicalWidthCms || !physicalHeightCms) return;\r\n roomViewHelper.changeDimensions({ physicalWidthCms, physicalHeightCms });\r\n roomViewHelper.updateShadow();\r\n onRendered();\r\n }, [physicalWidthCms, physicalHeightCms])\r\n useEffect(() => {\r\n let la = true;\r\n const loadRoom = async () => {\r\n try {\r\n //if room has been changed\r\n if (prevRoomDetails !== roomData) {\r\n if (!la) return;\r\n await Promise.all(roomViewHelper.initConfig({ baseUrl, config, files }));\r\n if (!la) return;\r\n roomViewHelper.updateBackground();\r\n roomViewHelper.updateMask();\r\n onRoomLoaded();\r\n await roomViewHelper.updatethreeCanvas();\r\n // if (prevDesignImagePath === designImagePath) {\r\n // await roomViewHelper.updatethreeCanvas();\r\n // if (!la) return;\r\n // roomViewHelper.updateShadow();\r\n // }\r\n } else {\r\n onRoomLoaded();\r\n }\r\n if (prevDesignImagePath !== designImagePath) {\r\n // if (!la) return;\r\n // await roomViewHelper.updatethreeCanvas();\r\n if (!la) return;\r\n await roomViewHelper.renderFromJpg({ designImagePath: designImagePath, physicalWidthCms, physicalHeightCms });\r\n if (!la) return;\r\n roomViewHelper.updateShadow();\r\n }\r\n onRendered();\r\n } catch (error) {\r\n console.error(error);\r\n return;\r\n }\r\n };\r\n loadRoom();\r\n return () => {\r\n la = false;\r\n }\r\n }, [roomData, designImagePath]);\r\n\r\n const handleInputStart = (e) => {\r\n roomViewHelper.mouseDownTouchStart(e);\r\n };\r\n const handleinputMove = (e) => {\r\n roomViewHelper.mouseDownTouchMove(e);\r\n };\r\n const handleInputEnd = (e) => {\r\n roomViewHelper.mouseDownTouchEnd(e);\r\n onInteracted && onInteracted();\r\n };\r\n window.downloadRendered3dIllNQ = async () => {\r\n const mime = \"jpeg\";\r\n const downloadName = `${designName} in ${roomName}.${mime}`;\r\n roomViewHelper.downloadRendering(downloadName, mime);\r\n };\r\n window.downloadRendered3dIllHQ = async () => {\r\n if (isDownloading) return;\r\n setIsDownloading(true);\r\n const mime = \"jpeg\";\r\n const downloadName = `${designName} in ${roomName}.${mime}`;\r\n const { dims } = config;\r\n const { width, height } = config;\r\n const bgCanvas = createCanvas(width, height);\r\n const threeCanvas = createCanvas(width, height);\r\n const maskCanvas = createCanvas(width, height);\r\n const shadowCanvas = createCanvas(width, height);\r\n const container = { clientWidth: width, clientHeight: height };\r\n const inputCanvas = createCanvas(width, height);\r\n const canvasConfig = {\r\n bgCanvas,\r\n threeCanvas,\r\n maskCanvas,\r\n shadowCanvas,\r\n container,\r\n inputCanvas,\r\n };\r\n const rh = new RoomViewHelper();\r\n rh.initCanvas(canvasConfig);\r\n await Promise.all(rh.initConfig({ baseUrl, config, files }));\r\n rh.updateBackground();\r\n\r\n rh.updateMask();\r\n await rh.updatethreeCanvas();\r\n await rh.renderFromJpg({ designImagePath: designImagePath });\r\n const objectConfig = roomViewHelper.threeView.getObjectConfig();\r\n if (objectConfig) {\r\n rh.threeView.carpetMesh.position.copy(objectConfig.position);\r\n rh.threeView.carpetMesh.rotation.copy(objectConfig.rotation);\r\n rh.threeView.render();\r\n }\r\n await rh.updateShadow();\r\n const renderedCanvas = rh.renderInCanvas();\r\n setIsDownloading(false);\r\n return Promise.resolve(renderedCanvas);\r\n };\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default RoomViewNew;\r\n","import React, { useState, useEffect } from 'react';\r\nimport RoomViewNew from './RoomViewNew';\r\nimport { useMount } from 'react-use';\r\nimport { readJSON, readImage } from './../utils/utils';\r\nimport \"./style.scss\"\r\nimport { AtSpinnerOverlay } from './../components/atoms/AtSpinner';\r\nimport { ReactComponent as Tutorial0 } from \"./../components/organisms/VpsStage/tutorial0.svg\";\r\n\r\n\r\n\r\nfunction getJsonFromUrl(url) {\r\n if (!url) url = window.location.search;\r\n var query = url.substr(1);\r\n var result = {};\r\n query.split(\"&\").forEach(function (part) {\r\n var item = part.split(\"=\");\r\n result[item[0]] = decodeURIComponent(item[1]);\r\n });\r\n return result;\r\n}\r\n\r\nconst defaultRoomdata = {\r\n Dir: \"RomanPassage\",\r\n Name: \"Roman Passage\",\r\n Files: [\r\n \"Shot_1.bg.jpg\",\r\n \"Shot_1.sh.jpg\",\r\n \"Shot_1.m.png\"\r\n ]\r\n};\r\n\r\nfunction App(props) {\r\n const { design, designName, width, height, onRendering, showLoaderonInit } = props;\r\n const [roomData, setRoomData] = useState()\r\n const [designImageProps, setDesignImageProps] = useState(null);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [bgImage, setbgImage] = useState(null);\r\n const [showTutorial, setshowTutorial] = useState(true);\r\n const [showRoomView, setshowRoomView] = useState(false);\r\n\r\n\r\n useMount(() => {\r\n const baseUrl = defaultRoomdata.Dir\r\n readJSON(`${baseUrl}/config.json`).then(config => {\r\n setRoomData({ ...defaultRoomdata, config, baseUrl })\r\n })\r\n const jsonUrl = getJsonFromUrl();\r\n const design = jsonUrl.design;\r\n if (design) {\r\n setIsLoading(true);\r\n setDesignImageProps({\r\n designName: jsonUrl.designName,\r\n designImagePath: jsonUrl.design,\r\n physicalWidthCms: jsonUrl.width,\r\n physicalHeightCms: jsonUrl.height\r\n });\r\n }\r\n })\r\n\r\n useEffect(() => {\r\n if (design) {\r\n setshowRoomView(true);\r\n if (design !== designImageProps?.designImagePath)\r\n setIsLoading(true);\r\n setDesignImageProps({\r\n designName,\r\n designImagePath: design,\r\n physicalWidthCms: width,\r\n physicalHeightCms: height\r\n });\r\n }\r\n else {\r\n // setDesignImageProps(null);\r\n if (!showLoaderonInit)\r\n setIsLoading(false);\r\n setshowRoomView(false);\r\n\r\n }\r\n }, [design, width, height])\r\n\r\n\r\n useEffect(() => {\r\n if (showLoaderonInit) {\r\n setIsLoading(true);\r\n }\r\n else {\r\n setIsLoading(false);\r\n }\r\n }, [showLoaderonInit])\r\n\r\n useEffect(() => {\r\n onRendering && onRendering(isLoading)\r\n }, [isLoading])\r\n\r\n useEffect(() => {\r\n if (roomData) {\r\n const { Files: files, baseUrl, config } = roomData;\r\n preload({ baseUrl, config, files });\r\n }\r\n\r\n }, [roomData])\r\n function createName() {\r\n let res = \"\"\r\n Array.from(arguments).forEach(argument => {\r\n if (argument) {\r\n res = `${res}${argument}.`;\r\n }\r\n });\r\n return res\r\n }\r\n function makeUrl() {\r\n let res = \"\"\r\n Array.from(arguments).forEach((argument, index) => {\r\n if (argument) {\r\n res = `${res}${index === 0 ? \"\" : \"/\"}${argument}`;\r\n }\r\n });\r\n return res\r\n }\r\n const preload = ({ baseUrl, config, files }) => {\r\n\r\n const x = { shot: config.shots[0], light: config.lights ? config.lights[0] : null };\r\n const bgUrl = `${createName(x.shot, x.light)}bg.jpg`;\r\n const bgPatchUrl = `${createName(x.shot, x.light)}pch.png`;\r\n const bgPatchShadowUrl = `${createName(x.shot, x.light)}pch.sh.jpg`;\r\n const maskUrl = `${createName(x.shot, x.light)}m.png`;\r\n const shadowUrl = `${createName(x.shot, x.light)}sh.jpg`;\r\n const highlightUrl = `${createName(x.shot, x.light)}hl.jpg`;\r\n const glowUrl = `${createName(x.shot, x.light)}gl.jpg`;\r\n\r\n if (files.includes(bgUrl)) {\r\n const fullBgUrl = makeUrl(baseUrl, bgUrl);\r\n readImage(fullBgUrl).then((image) => {\r\n setbgImage(image);\r\n })\r\n }\r\n if (files.includes(bgPatchUrl)) readImage(makeUrl(baseUrl, bgPatchUrl)).then(() => { })\r\n if (files.includes(bgPatchShadowUrl)) readImage(makeUrl(baseUrl, bgPatchShadowUrl)).then(() => { })\r\n if (files.includes(maskUrl)) readImage(makeUrl(baseUrl, maskUrl)).then(() => { })\r\n if (files.includes(shadowUrl)) readImage(makeUrl(baseUrl, shadowUrl)).then(() => { })\r\n if (files.includes(highlightUrl)) readImage(makeUrl(baseUrl, highlightUrl)).then(() => { })\r\n if (files.includes(glowUrl)) readImage(makeUrl(baseUrl, glowUrl)).then(() => { })\r\n }\r\n\r\n return (\r\n {\r\n // e.preventDefault();\r\n // e.stopPropagation();\r\n // }}\r\n // onDragOver={(e) => {\r\n // e.preventDefault();\r\n // e.stopPropagation();\r\n // }}\r\n >\r\n {bgImage && }\r\n \r\n { }}\r\n />\r\n {showTutorial && designImageProps &&
\r\n \r\n Drag the carpet to move it\r\n
}\r\n {roomData && designImageProps && (\r\n {\r\n setIsLoading(false);\r\n }}\r\n onRoomLoaded={() => {\r\n window.parent.postMessage(\"success\", \"*\");\r\n }}\r\n roomData={roomData}\r\n designImageProps={designImageProps}\r\n onInteracted={() => setshowTutorial(false)}\r\n />\r\n )}\r\n \r\n );\r\n}\r\n\r\nexport default App;\r\n","import React from \"react\";\r\nimport AtIcon from \"../AtIcon\";\r\n\r\nconst AtDropdown = ({ dropdownItems, defaultItemIndex = 0, onChange, minimal }) => {\r\n const [value, setValue] = React.useState(defaultItemIndex);\r\n React.useEffect(() => {\r\n setValue(defaultItemIndex);\r\n }, [defaultItemIndex]);\r\n return (\r\n
\r\n {\r\n onChange(e.target.value);\r\n setValue(e.target.value);\r\n }}\r\n >\r\n {dropdownItems &&\r\n dropdownItems.map((cat, index) => (\r\n \r\n ))}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default AtDropdown;\r\n","// Load the required clients and packages\r\nimport { CognitoIdentityClient } from \"@aws-sdk/client-cognito-identity\"\r\nimport { fromCognitoIdentityPool } from \"@aws-sdk/credential-provider-cognito-identity\"\r\nimport { S3Client, PutObjectCommand, ListObjectsCommand, DeleteObjectCommand, DeleteObjectsCommand } from \"@aws-sdk/client-s3\";\r\n\r\n// Set the AWS Region\r\nconst REGION = \"us-east-1\"; //REGION\r\n\r\n// Initialize the Amazon Cognito credentials provider\r\nconst s3 = new S3Client({\r\n region: REGION,\r\n credentials: fromCognitoIdentityPool({\r\n client: new CognitoIdentityClient({ region: REGION }),\r\n identityPoolId: \"us-east-1:525b68be-bd75-429c-9f72-1e262ecd82a4\", // IDENTITY_POOL_ID\r\n }),\r\n});\r\n\r\nconst albumBucketName = \"virtualrugstudio\"; //BUCKET_NAME\r\n\r\nconst hasAlbum = async (name) => {\r\n if (!name) return false;\r\n try {\r\n const data = await s3.send(\r\n new ListObjectsCommand({ Delimiter: \"/\", Bucket: albumBucketName })\r\n );\r\n\r\n if (data.CommonPrefixes === undefined) {\r\n console.log(\"no albums found\");\r\n return false;\r\n } else {\r\n var albums = data.CommonPrefixes.map(function (commonPrefix) {\r\n var prefix = commonPrefix.Prefix;\r\n var albumName = decodeURIComponent(prefix.replace(\"/\", \"\"));\r\n return albumName;\r\n });\r\n return albums.includes(name);\r\n }\r\n } catch (err) {\r\n return console.log(\"There was an error listing your albums: \" + err.message);\r\n }\r\n};\r\n\r\nexport const viewAlbum = async (albumName) => {\r\n const albumPhotosKey = encodeURIComponent(albumName) + \"/\";\r\n try {\r\n const data = await s3.send(\r\n new ListObjectsCommand({\r\n Prefix: albumPhotosKey,\r\n Bucket: albumBucketName,\r\n })\r\n );\r\n if (!data?.Contents?.length > 1) { //the first content is the album folder itself\r\n console.log(\"You don't have any photos in this album.\");\r\n } else {\r\n const href = \"https://s3.\" + REGION + \".amazonaws.com/\";\r\n const bucketUrl = href + albumBucketName + \"/\";\r\n\r\n const photos = data.Contents.filter(function (photo) {\r\n return photo.Key !== albumPhotosKey;\r\n }).map(function (photo) {\r\n const photoKey = photo.Key;\r\n const photoUrl = bucketUrl + photoKey;\r\n return photoUrl;\r\n });\r\n return photos;\r\n }\r\n } catch (err) {\r\n console.log(\"There was an error viewing your album: \" + err.message);\r\n return;\r\n }\r\n};\r\n\r\n\r\n// Create an album in the bucket\r\nconst createAlbum = async (albumName) => {\r\n albumName = albumName.trim();\r\n if (!albumName) {\r\n return console.log(\"Album names must contain at least one non-space character.\");\r\n }\r\n if (albumName.indexOf(\"/\") !== -1) {\r\n return console.log(\"Album names cannot contain slashes.\");\r\n }\r\n var albumKey = encodeURIComponent(albumName);\r\n try {\r\n const key = albumKey + \"/\";\r\n const params = { Bucket: albumBucketName, Key: key };\r\n const data = await s3.send(new PutObjectCommand(params));\r\n console.log(\"Successfully created album.\");\r\n } catch (err) {\r\n return console.log(\"There was an error creating your album: \" + err.message);\r\n }\r\n};\r\n\r\n\r\n// Add a photo to an album\r\nexport const addPhoto = async ({ albumName, file, deleteExistingAlbum = false }) => {\r\n try {\r\n const albumExists = await hasAlbum(albumName);\r\n if (albumExists) {\r\n if (deleteExistingAlbum) {\r\n await deleteAlbum({albumName,deleteObjectsOnly:true});\r\n }\r\n }\r\n else {\r\n await createAlbum(albumName);\r\n }\r\n\r\n const albumPhotosKey = encodeURIComponent(albumName) + \"/\";\r\n const fileName = file.name;\r\n const photoKey = albumPhotosKey + fileName;\r\n const uploadParams = {\r\n Bucket: albumBucketName,\r\n Key: photoKey,\r\n Body: file\r\n };\r\n try {\r\n const data = await s3.send(new PutObjectCommand(uploadParams));\r\n console.log(\"Successfully uploaded photo.\");\r\n\r\n const href = \"https://s3.\" + REGION + \".amazonaws.com/\";\r\n const bucketUrl = href + albumBucketName + \"/\";\r\n const photoUrl = bucketUrl + photoKey;\r\n return photoUrl;\r\n } catch (err) {\r\n return console.log(\"There was an error uploading your photo: \", err.message);\r\n }\r\n } catch (err) {\r\n if (!file) {\r\n return console.log(\"Choose a file to upload first.\");\r\n }\r\n }\r\n};\r\n\r\nconst deleteAlbum = async ({ albumName, deleteObjectsOnly = false }) => {\r\n //deleteObjectsOnly = true , only deletes the album contents not the album folder itself\r\n //deleteObjectsOnly = false , deletes the whole album along with the folder\r\n const albumKey = encodeURIComponent(albumName) + \"/\";\r\n try {\r\n const params = { Bucket: albumBucketName, Prefix: albumKey };\r\n const data = await s3.send(new ListObjectsCommand(params));\r\n const objects = data.Contents.filter(function (object) {\r\n return !deleteObjectsOnly || (object.Key !== albumKey);\r\n }).map(function (object) {\r\n return { Key: object.Key };\r\n });\r\n if (!objects?.length) return;\r\n try {\r\n const params = {\r\n Bucket: albumBucketName,\r\n Delete: { Objects: objects },\r\n Quiet: true,\r\n };\r\n const data = await s3.send(new DeleteObjectsCommand(params));\r\n return console.log(\"Successfully deleted album.\");\r\n } catch (err) {\r\n return console.log(\"There was an error deleting your album: \", err.message);\r\n }\r\n } catch (err) {\r\n return console.log(\"There was an error deleting your album1: \", err.message);\r\n }\r\n};\r\n\r\n\r\n","import axios from \"axios\";\r\nimport convert from \"convert-units\";\r\nimport pako from \"pako\";\r\n\r\nconst fileApiUrl = 'https://v3.explorug.com/managefiles.aspx';\r\n\r\nfunction bytesToBase64(bytes) {\r\n var binary = \"\";\r\n var len = bytes.byteLength;\r\n for (var i = 0; i < len; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return window.btoa(binary);\r\n}\r\nconst comperessJSON = (colors) => bytesToBase64(pako.deflate(JSON.stringify(colors), { to: \"string\" }));\r\n\r\n\r\n\r\nexport const renameFolder = async ({ key, oldpath, newfoldername }) => {\r\n let data = new FormData();\r\n data.append(\"key\", key);\r\n data.append(\"action\", \"renamefolder\");\r\n data.append(\"newfoldername\", newfoldername);\r\n data.append(\"oldpath\", oldpath);\r\n\r\n try {\r\n const res = await axios.post(fileApiUrl, data);\r\n return res.data === \"Success\";\r\n } catch (err) {\r\n return false;\r\n }\r\n};\r\nexport const renameFile = async ({ key, oldfile, newfilename }) => {\r\n let data = new FormData();\r\n data.append(\"key\", key);\r\n data.append(\"action\", \"renamefile\");\r\n data.append(\"newfilename\", newfilename);\r\n data.append(\"oldfile\", oldfile);\r\n\r\n try {\r\n const res = await axios.post(fileApiUrl, data);\r\n return res.data === \"Success\";\r\n } catch (err) {\r\n return false;\r\n }\r\n};\r\nexport const addFolder = async ({ key, path }) => {\r\n let data = new FormData();\r\n data.append(\"key\", key);\r\n data.append(\"action\", \"addfolder\");\r\n data.append(\"path\", path);\r\n try {\r\n const res = await axios.post(fileApiUrl, data);\r\n return res.data === \"Success\";\r\n } catch (err) {\r\n return false;\r\n }\r\n};\r\n\r\nexport const deletefile = async ({ key, file }) => {\r\n let data = new FormData();\r\n data.append(\"key\", key);\r\n data.append(\"action\", \"deletefile\");\r\n data.append(\"file\", file);\r\n try {\r\n const res = await axios.post(fileApiUrl, data);\r\n return res.data === \"Success\";\r\n } catch (err) {\r\n return false;\r\n }\r\n};\r\nexport const deleteFolder = async ({ key, path }) => {\r\n let data = new FormData();\r\n data.append(\"key\", key);\r\n data.append(\"action\", \"deletefolder\");\r\n data.append(\"path\", path);\r\n try {\r\n const res = await axios.post(fileApiUrl, data);\r\n return res.data === \"Success\";\r\n } catch (err) {\r\n return false;\r\n }\r\n};\r\n\r\nexport const uploadFile = async ({ key, file, path, width, length, forceUnit = \"\" }) => {\r\n let newWid = width;\r\n let newLgt = length;\r\n let data = new FormData();\r\n data.append(\"key\", key);\r\n data.append(\"action\", \"uploadfile\");\r\n data.append(\"file\", file);\r\n data.append(\"path\", path);\r\n if (forceUnit !== \"\" && forceUnit === \"in\") {\r\n newWid = newWid * 2.54;\r\n newLgt = newLgt * 2.54;\r\n }\r\n if (width && length) {\r\n data.append(\"width\", newWid);\r\n data.append(\"length\", newLgt);\r\n }\r\n try {\r\n const res = await axios.post(fileApiUrl, data);\r\n return res.data === \"Success\";\r\n } catch (err) {\r\n return false;\r\n }\r\n};\r\n\r\nexport const moveFile = async ({ key, oldfile, newpath }) => {\r\n let data = new FormData();\r\n data.append(\"key\", key);\r\n data.append(\"action\", \"movefile\");\r\n data.append(\"oldfile\", oldfile);\r\n data.append(\"newpath\", newpath);\r\n try {\r\n const res = await axios.post(fileApiUrl, data);\r\n return res.data === \"Success\";\r\n } catch (err) {\r\n return false;\r\n }\r\n};\r\n//TODO: check success\r\nexport const copyFileList = async ({ key, fileMap }) => {\r\n let data = new FormData();\r\n data.append(\"key\", key);\r\n data.append(\"action\", \"copyfiles\");\r\n data.append(\"filemap\", JSON.stringify(fileMap));\r\n try {\r\n const res = await axios.post(fileApiUrl, data);\r\n return true;\r\n } catch (err) {\r\n return false;\r\n }\r\n};\r\nexport const moveFileList = async ({ key, fileMap }) => {\r\n let data = new FormData();\r\n data.append(\"key\", key);\r\n data.append(\"action\", \"movefiles\");\r\n data.append(\"filemap\", JSON.stringify(fileMap));\r\n try {\r\n const res = await axios.post(fileApiUrl, data);\r\n return true;\r\n } catch (err) {\r\n return false;\r\n }\r\n};\r\nexport const copyFile = async ({ key, oldfile, newpath }) => {\r\n let data = new FormData();\r\n data.append(\"key\", key);\r\n data.append(\"action\", \"copyfile\");\r\n data.append(\"oldfile\", oldfile);\r\n data.append(\"newpath\", newpath);\r\n try {\r\n const res = await axios.post(fileApiUrl, data);\r\n return res.data === \"Success\";\r\n } catch (err) {\r\n return false;\r\n }\r\n};\r\nexport const setFileOrder = async ({ key, fileOrder, path }) => {\r\n // return true;\r\n let data = new FormData();\r\n data.append(\"key\", key);\r\n data.append(\"action\", \"addfileorder\");\r\n data.append(\"order\", JSON.stringify(fileOrder));\r\n data.append(\"path\", path);\r\n try {\r\n const res = await axios.post(fileApiUrl, data);\r\n return res.data === \"Success\";\r\n } catch (err) {\r\n return false;\r\n }\r\n};\r\nexport const changeDesignDims = async ({ key, file, physicalWidth, physicalHeight, unit }) => {\r\n const width = convert(physicalWidth)\r\n .from(unit)\r\n .to(\"cm\");\r\n const height = convert(physicalHeight)\r\n .from(unit)\r\n .to(\"cm\");\r\n let data = new FormData();\r\n data.append(\"key\", key);\r\n data.append(\"action\", \"resize\");\r\n data.append(\"width\", width);\r\n data.append(\"length\", height);\r\n data.append(\"file\", file);\r\n try {\r\n const res = await axios.post(fileApiUrl, data);\r\n return res.data === \"Success\";\r\n } catch (err) {\r\n return false;\r\n }\r\n};\r\nexport const addFolderInfo = async ({ key, path, info }) => {\r\n let data = new FormData();\r\n data.append(\"key\", key);\r\n data.append(\"action\", \"addfolderinfo\");\r\n data.append(\"path\", path);\r\n data.append(\"info\", comperessJSON(info));\r\n try {\r\n const res = await axios.post(fileApiUrl, data);\r\n return res.data === \"Success\";\r\n } catch (err) {\r\n return false;\r\n }\r\n};","import { Classes, Overlay } from \"@blueprintjs/core\";\r\nimport React from \"react\";\r\nimport AtButton from \"../../atoms/AtButton\";\r\n\r\nconst AlertWarning = props => {\r\n const { message, show, handleClose } = props;\r\n\r\n return (\r\n \r\n
\r\n
\r\n {message}\r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default AlertWarning;\r\n","import React, { useEffect, useRef, useState, useCallback } from \"react\";\r\n// import ReactDOM from \"react-dom\";\r\nimport { Overlay, H5, H2, H4, H6, H3, Tooltip } from \"@blueprintjs/core\";\r\nimport { PayPalScriptProvider, PayPalButtons, FUNDING } from \"@paypal/react-paypal-js\";\r\nimport AtIcon from \"../../atoms/AtIcon\";\r\nimport AtButton from \"../../atoms/AtButton\";\r\nimport { AtSpinner } from \"../../atoms/AtSpinner\";\r\nimport AtDialog from \"../../molecules/AtDialog\";\r\nimport loadImage from \"blueimp-load-image\";\r\nimport UploadPreview from \"./../../../UploadPreview/App\";\r\nimport {\r\n roomConfigActions,\r\n useDispatchRoomConfig\r\n} from \"../../IllustrationView/roomconfig.reducer\";\r\nimport HttpClient from \"../../../api/httpClient\";\r\nimport AtDropdown from \"../../atoms/AtDropdown\";\r\nimport { addPhoto } from \"./aws-utils\";\r\nimport { addFolder, changeDesignDims, moveFile, uploadFile } from \"../../../api/filemanagerapi\";\r\nimport AppProvider from \"../../../api/appProvider\";\r\nimport { getExtension, getFilenameWithoutExt } from \"../../../utils/utils\";\r\nimport { createCanvas } from \"../../../utils/canvasutils\";\r\nimport AlertWarning from \"../AlertWarning\";\r\nimport { designDetailActions, useDispatchDesignDetail } from \"../../../reducers/designdetails.reducer\";\r\nimport { useDebounce } from \"use-debounce/lib\";\r\nimport { isRunner, unsupportedDesign } from \"../VpsStage\";\r\nimport { useDispatchDesignList, designListActions as actions, } from \"../../../reducers/designstree.reducer\";\r\n\r\nconst paymentAmount = 59;\r\n\r\nconst tryTimes = 1;\r\n\r\nconst paymentStatusEnum = {\r\n SUCCESS: \"SUCCESS\",\r\n FAILED: \"FAILED\",\r\n PROCESSING: \"PROCESSING\"\r\n};\r\n\r\nconst units = [\"inches\", \"cms\"];\r\nconst unitFactor = { \"inches\": 1 / 2.54, \"cms\": 2.54 };\r\nconst unitAbbr = { \"inches\": \"in\", \"cms\": \"cm\" };\r\nconst defaultUnitIndex = 0;\r\n\r\nconst pileunits = [\"mm\", \"cms\"];\r\nconst defaultPileUnitIndex = 0;\r\n\r\nconst maxCarpetDims = {\r\n inches: 200,\r\n cms: 500\r\n}\r\n\r\nexport const nameSeparator = \"_~_\";\r\n\r\nlet paymentWindow = null;\r\n\r\n// let PayPalButton = window.paypal?.Buttons?.driver(\"react\", { React, ReactDOM });\r\n// window.opener.postMessage('success', \"*\");\r\n\r\nconst previewIframeBaseUrl = `${window.location.origin}/modules/uploadpreview`;\r\n// const previewIframeBaseUrl = `http://localhost:3000/`;\r\n// const previewIframeBaseUrl = `http://localhost:3000/`;\r\n\r\nfunction hasTransparentPixel(data) {\r\n let isTransparent = false;\r\n\r\n for (let index = 0; index < data.length; index += 4) {\r\n\r\n if (data[index + 3] === 0) {\r\n isTransparent = true;\r\n break;\r\n }\r\n }\r\n return isTransparent;\r\n}\r\n\r\nfunction countPixels(data) {\r\n const colorCounts = {};\r\n let count = 0;\r\n let colorSeparated = true;\r\n for (let index = 0; index < data.length; index += 4) {\r\n const rgba = data[index] + \",\" + data[index + 1] + \",\" + data[index + 2] + \",\" + data[index + 3];\r\n if (!colorCounts[rgba]) {\r\n colorCounts[rgba] = 1;\r\n count++;\r\n }\r\n if (count >= 100) {\r\n colorSeparated = false;\r\n break;\r\n }\r\n }\r\n return colorSeparated;\r\n}\r\n\r\nconst toFixed = (num) => {\r\n num = Number(num);\r\n let returnval = num;\r\n if (Math.trunc(num) === num) returnval = Number(num);\r\n else returnval = Number(num.toFixed(2));\r\n return returnval;\r\n}\r\n\r\nconst estimateRugPhotoDims = (canvas) => {\r\n let maxW = 10 * 12;\r\n let maxH = 16 * 12;\r\n let physicalW = Math.min(canvas.width / 10, maxW);\r\n let physicalH = physicalW * canvas.height / canvas.width;\r\n if (physicalH > maxH) {\r\n physicalH = maxH;\r\n physicalW = physicalH * canvas.width / canvas.height;\r\n }\r\n return ({ width: physicalW, height: physicalH })\r\n}\r\n\r\nconst UploadPlatform = props => {\r\n const { show, handleClose, editDesign } = props;\r\n const [eFile, seteFile] = useState(null);\r\n const [uploadedDesign, setuploadedDesign] = useState(null);\r\n const [showUnsupportedDisclaimer, setshowUnsupportedDisclaimer] = useState(false); //false , 1 for irregular , 2 for runner\r\n const [showPngToJpegDisclaimer, setshowPngToJpegDisclaimer] = useState(false);\r\n const [showJpegDisclaimer, setshowJpegDisclaimer] = useState(false);\r\n const [draggingFile, setdraggingFile] = useState(0);// 0 : none, 1: left input zone, 2: right preview drop zone\r\n const [alertMessage, setalertMessage] = useState(null);\r\n const [token, settoken] = useState('');\r\n const [useToken, setuseToken] = useState(false);\r\n const [tokenMsg, settokenMsg] = useState({ status: null, msg: null });\r\n const [progressPercent, setprogressPercent] = useState(-1);\r\n const [customDesignDetails, setcustomDesignDetails] = useState({\r\n w: 96,\r\n h: 120,\r\n kl: 1,\r\n unit: units[defaultUnitIndex],\r\n ph: 6,\r\n punit: pileunits[defaultPileUnitIndex]\r\n });\r\n const [debouncedDesignDetails] = useDebounce(customDesignDetails, 100);\r\n const [previewRendering, setpreviewRendering] = useState(false);\r\n const [designUploadSuccess, setdesignUploadSuccess] = useState(false);\r\n const [designFinalUploading, setdesignFinalUploading] = useState(null);\r\n const dispatchRoomConfig = useDispatchRoomConfig();\r\n const dispatchDesignDetails = useDispatchDesignDetail();\r\n const dispatch = useDispatchDesignList();\r\n\r\n const inputRef = useRef(null);\r\n\r\n const validImageTypes = ['image/jpeg'];\r\n const validcarpetTypes = ['png', 'ctfx'];\r\n\r\n const reset = (resetdesign = true) => {\r\n if (resetdesign)\r\n setuploadedDesign(null);\r\n else if (uploadedDesign?.url) {\r\n setuploadedDesign({ file: uploadedDesign.file });\r\n }\r\n setdesignUploadSuccess(false);\r\n setdesignFinalUploading(null);\r\n setprogressPercent(-1);\r\n settokenMsg({ status: null, msg: null });\r\n setuseToken(false);\r\n settoken('');\r\n setalertMessage(null);\r\n setshowPngToJpegDisclaimer(false);\r\n setshowJpegDisclaimer(false);\r\n setshowUnsupportedDisclaimer(false);\r\n }\r\n\r\n useEffect(() => {\r\n if (!show) {\r\n seteFile(null);\r\n reset();\r\n }\r\n }, [show])\r\n\r\n useEffect(() => {\r\n if (!editDesign?.id) {\r\n reset();\r\n return;\r\n }\r\n let designDetails = editDesign;\r\n\r\n (async () => {\r\n reset();\r\n\r\n setprogressPercent(30);\r\n if (!designDetails) return;\r\n const keyType = designDetails.isJPEG ? AppProvider.keys.jpeg : AppProvider.keys.ctf;\r\n AppProvider.setActiveKey(keyType, [AppProvider.keyScopes.design]);\r\n let canvas;\r\n if (designDetails.isJPEG) {\r\n canvas = await AppProvider.getRenderedDesign({ designDetails: designDetails.Props, fullpath: designDetails.fullpath, zoom: 1 });\r\n }\r\n else {\r\n canvas = await AppProvider.getRenderedDesign({ designDetails: designDetails.Props, fullpath: designDetails.fullpath, zoom: 2 });\r\n }\r\n\r\n if (!designDetails) return;\r\n setprogressPercent(70);\r\n const isTransparent = designDetails.Props.IsIrregular;\r\n if (isTransparent)\r\n setshowUnsupportedDisclaimer(unsupportedDesign.IRREGULAR);\r\n canvas.toBlob(function (blob) {\r\n if (!designDetails) return;\r\n const url = URL.createObjectURL(blob);\r\n setprogressPercent(100);\r\n setcustomDesignDetails({\r\n ...customDesignDetails,\r\n w: toFixed(designDetails.Props.PhysicalWidth),\r\n h: toFixed(designDetails.Props.PhysicalHeight),\r\n kl: designDetails.Props.KLRatio,\r\n unit: designDetails.Props.Unit === \"in\" ? units[0] : units[1]\r\n });\r\n setTimeout(() => {\r\n setuploadedDesign({ url: url, name: designDetails.label, file: new File([blob], designDetails.label), uploadedPath: designDetails.fullpath });\r\n }, 500);\r\n AppProvider.setActiveKey(null, null, true); //restoring previous key\r\n });\r\n })()\r\n\r\n\r\n return () => {\r\n designDetails = null;\r\n }\r\n\r\n }, [editDesign])\r\n\r\n useEffect(() => {\r\n if (!uploadedDesign?.url || !debouncedDesignDetails?.w || !debouncedDesignDetails?.h) {\r\n resetPreviewDesign();\r\n return;\r\n }\r\n let msg = {\r\n design: uploadedDesign.url,\r\n width: `${debouncedDesignDetails.w * (debouncedDesignDetails.unit === \"cms\" ? 1 : 2.54)}`,\r\n height: `${debouncedDesignDetails.h * (debouncedDesignDetails.unit === \"cms\" ? 1 : 2.54)}`\r\n }\r\n let iframeEl = document.getElementById(\"previewIframe\");\r\n if (iframeEl) {\r\n iframeEl.contentWindow.postMessage(msg, \"*\");\r\n }\r\n }, [uploadedDesign, debouncedDesignDetails])\r\n\r\n const resetPreviewDesign = () => {\r\n let iframeEl = document.getElementById(\"previewIframe\");\r\n if (!iframeEl) return;\r\n iframeEl.contentWindow.postMessage({ reset: true }, \"*\");\r\n }\r\n\r\n const triggerInput = () => {\r\n if (inputRef?.current)\r\n inputRef.current.click();\r\n };\r\n\r\n const checkTempJpegUpload = async (file) => {\r\n const keyType = AppProvider.keys.jpeg;\r\n AppProvider.setActiveKey(keyType, [AppProvider.keyScopes.design]);\r\n const albumPhotosKey = encodeURIComponent(window.userEmail?.replace(\"@\", \"\") || \"default\");\r\n await addFolder(\r\n {\r\n key: AppProvider.getApiKey(AppProvider.keyScopes.design),\r\n path: \"/Designs/Internal/Uploads/Temp/\" + albumPhotosKey,\r\n }\r\n )\r\n const res = await tryUpload(uploadFile,\r\n {\r\n key: AppProvider.getApiKey(AppProvider.keyScopes.design),\r\n file: file,\r\n path: \"/Designs/Internal/Uploads/Temp/\" + albumPhotosKey,\r\n }\r\n , tryTimes);\r\n\r\n AppProvider.setActiveKey(null, null, true); // set previous key\r\n if (!res) {\r\n setalertMessage(\"Could not upload the file. Please check your internet connection and that the name of the uploaded file only consists of english characters or numbers.\");\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (!eFile) return;\r\n let uploadedImage = eFile;\r\n\r\n const fileType = uploadedImage['type'];\r\n const fileExt = getExtension(uploadedImage.name);\r\n\r\n if (!validImageTypes.includes(fileType) && !validcarpetTypes.includes(fileExt.toLowerCase())) {\r\n setalertMessage(\"Sorry, we only support .JPG, .PNG, or .CTFX files. Please refer to the upload guide on the left panel for more information.\");\r\n return;\r\n }\r\n if (uploadedImage.size * 0.000001 > 15) {\r\n setalertMessage(\"Sorry, we only support files up to 15MB. Please try uploading another file.\");\r\n return;\r\n }\r\n\r\n (async () => {\r\n reset(false);\r\n let fileNameIndex = 1;\r\n let uploadedImageNameLabel = getFilenameWithoutExt(uploadedImage.name);\r\n let uploadName = uploadedImageNameLabel;\r\n if (uploadName.length > 20) uploadName = uploadedImageNameLabel.substring(0, 20);\r\n\r\n const iter = (checkname, index) => {\r\n if (window.usedFileNames?.length && window.usedFileNames.includes(checkname)) {\r\n uploadName = `${uploadedImageNameLabel}_${index}`;\r\n iter(uploadName, index + 1);\r\n }\r\n else {\r\n let newuploadedImage = new File([uploadedImage], uploadName + `${nameSeparator}${Date.now()}` + \".\" + fileExt, { type: fileType });\r\n uploadedImage = newuploadedImage;\r\n window.usedFileNames.push(uploadName);\r\n }\r\n };\r\n if (!uploadedImage) return;\r\n iter(uploadName, fileNameIndex);\r\n\r\n if (validImageTypes.includes(fileType)) {\r\n setprogressPercent(30);\r\n if (!uploadedImage) return;\r\n let file = uploadedImage;\r\n let canUpload = await checkTempJpegUpload(file);\r\n if (!canUpload) return;\r\n loadImage(\r\n uploadedImage,\r\n async canvas1 => {\r\n let canvas = canvas1;\r\n if (!uploadedImage) return;\r\n if (canvas1.width > canvas1.height) {\r\n // let canvas = createCanvas(canvas1.height, canvas1.width);\r\n // canvas.drawImage\r\n await new Promise(resolve => {\r\n canvas = document.createElement(\"canvas\");\r\n var ctx = canvas.getContext(\"2d\");\r\n const image = canvas1;\r\n const degrees = 90;\r\n if (degrees == 90 || degrees == 270) {\r\n canvas.width = image.height;\r\n canvas.height = image.width;\r\n } else {\r\n canvas.width = image.width;\r\n canvas.height = image.height;\r\n }\r\n if (degrees == 90 || degrees == 270) {\r\n ctx.translate(image.height / 2, image.width / 2);\r\n } else {\r\n ctx.translate(image.width / 2, image.height / 2);\r\n }\r\n ctx.rotate(degrees * Math.PI / 180);\r\n ctx.drawImage(image, -image.width / 2, -image.height / 2);\r\n canvas.toBlob(blob => {\r\n file = new File([blob], uploadedImage.name, {\r\n type: uploadedImage.type,\r\n });\r\n resolve();\r\n }, uploadedImage.type)\r\n\r\n // loadImage(\r\n // uploadedImage,\r\n // async canvas2 => {\r\n // canvas = canvas2;\r\n // canvas.toBlob(blob => {\r\n // file = new File([blob], uploadedImage.name);\r\n // resolve();\r\n // }, 'image/jpeg', 1)\r\n // }, {\r\n // canvas: true,\r\n // orientation: 6\r\n // });\r\n })\r\n }\r\n setprogressPercent(70);\r\n canvas.toBlob(function (blob) {\r\n if (!uploadedImage) return;\r\n const { width: physicalW, height: physicalH } = estimateRugPhotoDims(canvas);\r\n setcustomDesignDetails({\r\n ...customDesignDetails,\r\n w: toFixed(physicalW),\r\n h: toFixed(physicalH),\r\n unit: units[0]\r\n });\r\n var url = URL.createObjectURL(blob);\r\n setprogressPercent(100);\r\n setTimeout(() => {\r\n setshowJpegDisclaimer(true);\r\n setuploadedDesign({ url: url, name: uploadedImage.name, file: file, isJpeg: true });\r\n }, 500);\r\n });\r\n },\r\n {\r\n canvas: true\r\n }\r\n );\r\n }\r\n else {\r\n if (validcarpetTypes.includes(fileExt.toLowerCase())) {\r\n setprogressPercent(10);\r\n\r\n const uploadToTemp = async (uploadcanvas) => {\r\n let file = null;\r\n if (uploadcanvas) {\r\n await uploadcanvas.toBlob(function (blob) {\r\n file = new File([blob], uploadedImage.name, {\r\n type: uploadedImage.type,\r\n });\r\n })\r\n }\r\n else {\r\n file = uploadedImage;\r\n }\r\n const keyType = AppProvider.keys.ctf;\r\n if (!uploadedImage) return;\r\n AppProvider.setActiveKey(keyType, [AppProvider.keyScopes.design]);\r\n const albumPhotosKey = encodeURIComponent(window.userEmail?.replace(\"@\", \"\") || \"default\");\r\n await addFolder(\r\n {\r\n key: AppProvider.getApiKey(AppProvider.keyScopes.design),\r\n path: \"/Designs/Internal/Uploads/Temp/\" + albumPhotosKey,\r\n }\r\n )\r\n if (!uploadedImage) return;\r\n setprogressPercent(30);\r\n const res = await tryUpload(uploadFile,\r\n {\r\n key: AppProvider.getApiKey(AppProvider.keyScopes.design),\r\n file: file,\r\n path: \"/Designs/Internal/Uploads/Temp/\" + albumPhotosKey,\r\n }\r\n , tryTimes);\r\n if (!uploadedImage) return;\r\n setprogressPercent(50);\r\n if (!res) {\r\n setalertMessage(\"Could not upload the file. Please check your internet connection or if your file type is supported.\");\r\n return;\r\n }\r\n\r\n //to update the key since new design is uploaded\r\n await AppProvider.autoLogin({ keyType: keyType });\r\n\r\n const fullpath = \"Designs/Internal/Uploads/Temp/\"\r\n + albumPhotosKey + \"/\"\r\n + uploadedImage.name.replace(\".\" + fileExt, \".ctf\");\r\n\r\n const designDetails = await AppProvider.getDesignThumbnails({\r\n designs: [\r\n {\r\n fullpath: fullpath\r\n }]\r\n })\r\n if (!uploadedImage) return;\r\n setprogressPercent(50);\r\n const canvas = await AppProvider.getRenderedDesign({ designDetails: designDetails[0].Props, fullpath: fullpath, zoom: 2 });\r\n if (!uploadedImage) return;\r\n setprogressPercent(70);\r\n\r\n const isTransparent = designDetails[0].Props.IsIrregular;\r\n if (isTransparent)\r\n setshowUnsupportedDisclaimer(unsupportedDesign.IRREGULAR);\r\n\r\n canvas.toBlob(function (blob) {\r\n if (!uploadedImage) return;\r\n const url = URL.createObjectURL(blob);\r\n setprogressPercent(100);\r\n setcustomDesignDetails({\r\n ...customDesignDetails,\r\n w: toFixed(designDetails[0].Props.PhysicalWidth),\r\n h: toFixed(designDetails[0].Props.PhysicalHeight),\r\n kl: designDetails[0].Props.KLRatio,\r\n unit: designDetails[0].Props.Unit === \"in\" ? units[0] : units[1]\r\n });\r\n setTimeout(() => {\r\n setuploadedDesign({ url: url, name: uploadedImage.name, file: file, uploadedPath: fullpath });\r\n }, 500);\r\n AppProvider.setActiveKey(null, null, true); //restoring previous key\r\n });\r\n }\r\n\r\n if (fileType === 'image/png') {\r\n let file = uploadedImage;\r\n await loadImage(\r\n uploadedImage,\r\n async canvas1 => {\r\n let canvas = canvas1;\r\n if (!uploadedImage) return;\r\n let ctx = canvas.getContext(\"2d\");\r\n let ctxdata = ctx.getImageData(0, 0, canvas.width, canvas.height).data;\r\n let colorSeparated = countPixels(ctxdata);\r\n let isTransparent = hasTransparentPixel(ctxdata);\r\n if (isTransparent) {\r\n setshowUnsupportedDisclaimer(unsupportedDesign.IRREGULAR);\r\n }\r\n if (isTransparent && !colorSeparated) {\r\n setalertMessage(\"Irregular carpets are not supported in Virtual Rug Studio currently. Please try a different rug to continue.\");\r\n return;\r\n }\r\n await new Promise(resolve => {\r\n if (canvas1.width > canvas1.height) {\r\n\r\n canvas = document.createElement(\"canvas\");\r\n var ctx = canvas.getContext(\"2d\");\r\n const image = canvas1;\r\n const degrees = 90;\r\n if (degrees == 90 || degrees == 270) {\r\n canvas.width = image.height;\r\n canvas.height = image.width;\r\n } else {\r\n canvas.width = image.width;\r\n canvas.height = image.height;\r\n }\r\n if (degrees == 90 || degrees == 270) {\r\n ctx.translate(image.height / 2, image.width / 2);\r\n } else {\r\n ctx.translate(image.width / 2, image.height / 2);\r\n }\r\n ctx.rotate(degrees * Math.PI / 180);\r\n ctx.drawImage(image, -image.width / 2, -image.height / 2);\r\n }\r\n resolve();\r\n\r\n })\r\n setprogressPercent(20);\r\n\r\n if ((fileType === 'image/png') && !colorSeparated) {\r\n //treat as jpeg\r\n await canvas.toBlob(async (blob) => {\r\n let newuploadedImage = new File([uploadedImage], uploadedImage.name.replace(\".png\", \"\") + \".jpg\", { type: \"image/jpeg\" });\r\n uploadedImage = newuploadedImage;\r\n file = new File([blob], uploadedImage.name, {\r\n type: uploadedImage.type,\r\n });\r\n\r\n if (!uploadedImage) return;\r\n let canUpload = await checkTempJpegUpload(file);\r\n if (!canUpload) return;\r\n setshowPngToJpegDisclaimer(true);\r\n setshowJpegDisclaimer(true);\r\n const { width: physicalW, height: physicalH } = estimateRugPhotoDims(canvas);\r\n setcustomDesignDetails({\r\n ...customDesignDetails,\r\n w: toFixed(physicalW),\r\n h: toFixed(physicalH),\r\n unit: units[0]\r\n });\r\n const url = URL.createObjectURL(file);\r\n setprogressPercent(100);\r\n setTimeout(() => {\r\n setuploadedDesign({ url: url, name: uploadedImage.name, file: file, isJpeg: true });\r\n }, 500);\r\n }, \"image/jpeg\");\r\n\r\n\r\n } else {\r\n uploadToTemp(canvas);\r\n }\r\n },\r\n {\r\n canvas: true\r\n }\r\n )\r\n }\r\n else {\r\n uploadToTemp();\r\n }\r\n\r\n\r\n\r\n }\r\n\r\n }\r\n })()\r\n\r\n return () => {\r\n uploadedImage = null;\r\n }\r\n }, [eFile])\r\n\r\n useEffect(() => {\r\n if (progressPercent === 100) {\r\n setTimeout(() => {\r\n setprogressPercent(-1);\r\n }, 500);\r\n }\r\n\r\n }, [progressPercent])\r\n\r\n useEffect(() => {\r\n if (!customDesignDetails || showUnsupportedDisclaimer === unsupportedDesign.IRREGULAR) return;\r\n const isrunner = isRunner({ width: customDesignDetails.w, height: customDesignDetails.h });\r\n if (isrunner) setshowUnsupportedDisclaimer(unsupportedDesign.RUNNER);\r\n else if (showUnsupportedDisclaimer === unsupportedDesign.RUNNER) setshowUnsupportedDisclaimer(false);\r\n }, [customDesignDetails])\r\n\r\n const onInputChange = async (e) => {\r\n setprogressPercent(0);\r\n const files = e?.target?.files || e?.dataTransfer?.files;\r\n let uploadedImage = files[0];\r\n if (!uploadedImage) return;\r\n seteFile(uploadedImage);\r\n\r\n };\r\n\r\n\r\n const changeDesignDetails = (key, value) => {\r\n setcustomDesignDetails({ ...customDesignDetails, [key]: value });\r\n };\r\n\r\n const createOrder = (data, actions) => {\r\n return actions.order.create({\r\n purchase_units: [\r\n {\r\n amount: {\r\n value: paymentAmount\r\n }\r\n }\r\n ],\r\n style: {\r\n layout: \"horizontal\"\r\n }\r\n });\r\n };\r\n\r\n // const onEditSucess = async () => {\r\n // dispatchDesignDetails({\r\n // type: designDetailActions.SET_LOADING,\r\n // payload: true\r\n // });\r\n // const keyType = editDesign.isJPEG ? AppProvider.keys.jpeg : AppProvider.keys.ctf;\r\n // AppProvider.setActiveKey(keyType, [AppProvider.keyScopes.design]);\r\n // await changeDesignDims(\r\n // {\r\n // key: AppProvider.getApiKey(AppProvider.keyScopes.design),\r\n // file: uploadedDesign.uploadedPath,\r\n // physicalWidth: `${customDesignDetails.w * (customDesignDetails.unit === \"cms\" ? 1 : 2.54)}`,\r\n // physicalHeight: `${customDesignDetails.h * customDesignDetails.kl * (customDesignDetails.unit === \"cms\" ? 1 : 2.54)}`,\r\n // unit: \"cm\"\r\n // }\r\n // );\r\n // await AppProvider.clearCache({ mode: \"designs\", files: [uploadedDesign.uploadedPath] });\r\n // const res = await moveFile(\r\n // {\r\n // key: AppProvider.getApiKey(AppProvider.keyScopes.design),\r\n // oldfile: uploadedDesign.uploadedPath,\r\n // newpath: \"/Designs/Internal/Uploads/\" + albumPhotosKey,\r\n // }\r\n // );\r\n // await AppProvider.autoLogin({ keyType: keyType });\r\n\r\n // window.getUploadedFile(uploadedDesign.file.name, uploadedDesign.file.type === \"image/jpeg\");\r\n // setdesignUploadSuccess(true);\r\n // }\r\n\r\n const tryUpload = async (func, args, n, timeout = 0) => {\r\n const res = await func(args);\r\n if (!res) {\r\n if (--n > 0) {\r\n if (timeout > 0) {\r\n setTimeout(async () => {\r\n await tryUpload(func, args, n, timeout);\r\n }, timeout);\r\n }\r\n else {\r\n await tryUpload(func, args, n, timeout);\r\n }\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n const onPaymentSuccess = async () => {\r\n dispatchDesignDetails({\r\n type: designDetailActions.SET_LOADING,\r\n payload: true\r\n });\r\n const keyType = uploadedDesign.isJpeg ? AppProvider.keys.jpeg : AppProvider.keys.ctf;\r\n AppProvider.setActiveKey(keyType, [AppProvider.keyScopes.design]);\r\n const albumPhotosKey = encodeURIComponent(window.userEmail?.replace(\"@\", \"\") || \"default\");\r\n await addFolder(\r\n {\r\n key: AppProvider.getApiKey(AppProvider.keyScopes.design),\r\n path: \"/Designs/Internal/Uploads/\" + albumPhotosKey,\r\n }\r\n )\r\n\r\n let file = uploadedDesign.file;\r\n let width = customDesignDetails.w * (customDesignDetails.unit === \"cms\" ? 1 : 2.54);\r\n let height = customDesignDetails.h * (customDesignDetails.unit === \"cms\" ? 1 : 2.54);\r\n const isCTFX = getExtension(file.name) === validcarpetTypes[1];\r\n let isFileChanged = false;\r\n\r\n if (!isCTFX && customDesignDetails.w > customDesignDetails.h) {\r\n await new Promise(resolve => {\r\n loadImage(\r\n uploadedDesign.file,\r\n async canvas1 => {\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n const image = canvas1;\r\n const degrees = 270;\r\n if (degrees == 90 || degrees == 270) {\r\n canvas.width = image.height;\r\n canvas.height = image.width;\r\n } else {\r\n canvas.width = image.width;\r\n canvas.height = image.height;\r\n }\r\n if (degrees == 90 || degrees == 270) {\r\n ctx.translate(image.height / 2, image.width / 2);\r\n } else {\r\n ctx.translate(image.width / 2, image.height / 2);\r\n }\r\n ctx.rotate(degrees * Math.PI / 180);\r\n ctx.drawImage(image, -image.width / 2, -image.height / 2);\r\n canvas.toBlob(blob => {\r\n isFileChanged = true;\r\n file = new File([blob], uploadedDesign.name, {\r\n type: uploadedDesign.file.type,\r\n });\r\n resolve();\r\n }, uploadedDesign.file.type)\r\n }, {\r\n canvas: true\r\n });\r\n })\r\n }\r\n\r\n if (isFileChanged) {\r\n let res;\r\n if (uploadedDesign.isJpeg) {\r\n res = await tryUpload(uploadFile,\r\n {\r\n key: AppProvider.getApiKey(AppProvider.keyScopes.design),\r\n file: file,\r\n path: \"/Designs/Internal/Uploads/\" + albumPhotosKey,\r\n // width: width,\r\n // length: height\r\n }\r\n , tryTimes);\r\n }\r\n else {\r\n res = await tryUpload(uploadFile,\r\n {\r\n key: AppProvider.getApiKey(AppProvider.keyScopes.design),\r\n file: file,\r\n path: \"/Designs/Internal/Uploads/\" + albumPhotosKey\r\n }\r\n , tryTimes);\r\n }\r\n\r\n if (!res) {\r\n setalertMessage(\"Could not upload the file.\");\r\n settoken('');\r\n setdesignFinalUploading(null);\r\n settokenMsg({ status: null, msg: null });\r\n dispatchDesignDetails({\r\n type: designDetailActions.SET_LOADING,\r\n payload: false\r\n });\r\n return;\r\n }\r\n const fileExt = getExtension(uploadedDesign.name);\r\n const fullpath = \"Designs/Internal/Uploads/\"\r\n + albumPhotosKey + \"/\"\r\n + uploadedDesign.name.replace(\".\" + fileExt, uploadedDesign.isJpeg ? \".jpg\" : \".ctf\");\r\n // if (!uploadedDesign.isJpeg) {\r\n await changeDesignDims(\r\n {\r\n key: AppProvider.getApiKey(AppProvider.keyScopes.design),\r\n file: fullpath,\r\n physicalWidth: width,\r\n physicalHeight: height,\r\n unit: \"cm\"\r\n }\r\n );\r\n // }\r\n await AppProvider.clearCache({ mode: \"designs\", files: [fullpath] });\r\n }\r\n else if (!uploadedDesign.uploadedPath) {\r\n const res = await tryUpload(uploadFile,\r\n {\r\n key: AppProvider.getApiKey(AppProvider.keyScopes.design),\r\n file: file,\r\n path: \"/Designs/Internal/Uploads/\" + albumPhotosKey,\r\n width: width,\r\n length: height\r\n }\r\n , tryTimes);\r\n if (!res) {\r\n setalertMessage(\"Could not upload the file.\");\r\n settoken('');\r\n setdesignFinalUploading(null);\r\n settokenMsg({ status: null, msg: null });\r\n dispatchDesignDetails({\r\n type: designDetailActions.SET_LOADING,\r\n payload: false\r\n });\r\n return;\r\n }\r\n // await changeDesignDims(\r\n // {\r\n // key: AppProvider.getApiKey(AppProvider.keyScopes.design),\r\n // file: uploadedDesign.uploadedPath,\r\n // physicalWidth: `${customDesignDetails.w * (customDesignDetails.unit === \"cms\" ? 1 : 2.54)}`,\r\n // physicalHeight: `${customDesignDetails.h * customDesignDetails.kl * (customDesignDetails.unit === \"cms\" ? 1 : 2.54)}`,\r\n // unit: \"cm\"\r\n // }\r\n // );\r\n // await AppProvider.clearCache({ mode: \"designs\", files: [uploadedDesign.uploadedPath] });\r\n }\r\n else {\r\n await changeDesignDims(\r\n {\r\n key: AppProvider.getApiKey(AppProvider.keyScopes.design),\r\n file: uploadedDesign.uploadedPath,\r\n physicalWidth: `${customDesignDetails.w * (customDesignDetails.unit === \"cms\" ? 1 : 2.54)}`,\r\n physicalHeight: `${customDesignDetails.h * (uploadedDesign.isJpeg ? 1 : customDesignDetails.kl) * (customDesignDetails.unit === \"cms\" ? 1 : 2.54)}`,\r\n unit: \"cm\"\r\n }\r\n );\r\n await AppProvider.clearCache({ mode: \"designs\", files: [uploadedDesign.uploadedPath] });\r\n const res = await moveFile(\r\n {\r\n key: AppProvider.getApiKey(AppProvider.keyScopes.design),\r\n oldfile: uploadedDesign.uploadedPath,\r\n newpath: \"/Designs/Internal/Uploads/\" + albumPhotosKey,\r\n }\r\n );\r\n }\r\n\r\n //to update the key since new design is uploaded\r\n await AppProvider.autoLogin({ keyType: keyType });\r\n\r\n window.getUploadedFile(uploadedDesign.file.name, uploadedDesign.file.type === \"image/jpeg\");\r\n // const toCms = customDesignDetails.unit === \"cms\" ? 1 : 2.54;\r\n // dispatchRoomConfig({\r\n // type: roomConfigActions.SET_CUSTOM_DESIGN_URL,\r\n // payload: { url: uploadedDesign.url, physicalWidCms: customDesignDetails.w * toCms, physicalHGtCms: customDesignDetails.h * toCms }\r\n // });\r\n setdesignUploadSuccess(true);\r\n // handleClose();\r\n }\r\n\r\n const onApprove = (data, actions) => {\r\n return actions.order.capture().then(async function (orderData) {\r\n setdesignFinalUploading('paypal');\r\n onPaymentSuccess();\r\n });\r\n };\r\n\r\n const uploadToken = (e) => {\r\n e.preventDefault();\r\n if (tokenMsg.status === 2) return;\r\n if (!token || token === \"\") {\r\n settokenMsg({ status: 0, msg: \"Please enter your coupon in the field above.\" });\r\n setTimeout(() => {\r\n settokenMsg(tokenMsg => tokenMsg.status === 0 ? ({ status: null, msg: null }) : tokenMsg)\r\n }, 3000);\r\n return;\r\n }\r\n settokenMsg({ status: 2, msg: null }); //status 2 is for processing\r\n HttpClient.get(\r\n `https://alternative.com.np/atcurrency.php?couponid=${token}&amount=${paymentAmount}`,\r\n {}\r\n ).then(response => {\r\n if (response.data === \"success\") {\r\n settokenMsg({ status: 1, msg: \"Token applied successfully.\" });\r\n setdesignFinalUploading('token');\r\n onPaymentSuccess();\r\n }\r\n else {\r\n settokenMsg({ status: 0, msg: \"Invalid Token.\" });\r\n }\r\n }).catch(error => {\r\n settokenMsg({ status: 0, msg: \"Could not process token. Try again later.\" });\r\n });\r\n }\r\n\r\n const handlePreviewRendering = useCallback(value => {\r\n setpreviewRendering(value);\r\n }, []);\r\n\r\n const onDesignEdit = async () => {\r\n dispatchDesignDetails({\r\n type: designDetailActions.SET_LOADING,\r\n payload: true\r\n });\r\n setdesignFinalUploading('edit');\r\n const keyType = editDesign.isJPEG ? AppProvider.keys.jpeg : AppProvider.keys.ctf;\r\n AppProvider.setActiveKey(keyType, [AppProvider.keyScopes.design]);\r\n const newWid = customDesignDetails.w * (customDesignDetails.unit === \"cms\" ? 1 : 2.54);\r\n const newHgt = customDesignDetails.h * (editDesign.isJPEG ? 1 : customDesignDetails.kl) * (customDesignDetails.unit === \"cms\" ? 1 : 2.54);\r\n await changeDesignDims(\r\n {\r\n key: AppProvider.getApiKey(AppProvider.keyScopes.design),\r\n file: editDesign.fullpath,\r\n physicalWidth: Math.floor(newWid),\r\n physicalHeight: Math.floor(newHgt),\r\n unit: \"cm\"\r\n }\r\n );\r\n await AppProvider.clearCache({ mode: \"designs\", files: [editDesign.fullpath] });\r\n //to update the key since new design is uploaded\r\n await AppProvider.autoLogin({ keyType: keyType });\r\n\r\n const finish = async () => {\r\n const updatedDesign = await AppProvider.getDesignThumbnails({ designs: [editDesign] });\r\n dispatch({\r\n type: actions.UPDATE_SINGLE_FILE_PROP,\r\n payload: { ...editDesign, ...updatedDesign[0] }\r\n });\r\n dispatch({\r\n type: actions.SET_ACTIVE_NODE,\r\n payload: { ...editDesign, ...updatedDesign[0] }\r\n });\r\n setdesignUploadSuccess(true);\r\n }\r\n\r\n setTimeout(() => {\r\n finish();\r\n }, 1000);\r\n\r\n }\r\n\r\n return (\r\n <>\r\n\r\n {\r\n handleClose();\r\n }}\r\n canOutsideClickClose={false}\r\n className=\" illustration-dialog upload-design-dialog\"\r\n overlayClassName={\"upload-modal-overlay \" + (show || editDesign?.id ? \"show\" : \"hide\")}\r\n size=\"lg\"\r\n >\r\n \r\n {/*
\r\n
\r\n

Please upload your design

\r\n
\r\n \r\n
*/}\r\n\r\n {\r\n setalertMessage(null);\r\n setprogressPercent(-1);\r\n }}\r\n />\r\n {!editDesign?.id &&
\r\n {designUploadSuccess && <>\r\n
\r\n

{uploadedDesign.name.split(nameSeparator)[0]}

\r\n
Design uploaded successfully!
\r\n
Your design is now ready.
\r\n
You can view it in different settings available in the 'Shot Selection' menu.
\r\n handleClose()}>\r\n
\r\n \r\n }\r\n {!designUploadSuccess && (uploadedDesign?.file ? (\r\n
\r\n

{uploadedDesign.file.name.split(nameSeparator)[0]}

\r\n {showUnsupportedDisclaimer &&
\r\n {showUnsupportedDisclaimer === unsupportedDesign.IRREGULAR ?\r\n \"Irregular carpets are currently not supported in Virtual Rug Studio. Please try a different rug or change the dimensions to continue.\"\r\n : \"Runner carpets are currently not supported in Virtual Rug Studio. Please try a different rug or change the dimensions to continue.\"\r\n }\r\n
}\r\n {showPngToJpegDisclaimer &&
\r\n The .PNG file you uploaded has more than 100 colors and will be treated as a rug photo. setshowPngToJpegDisclaimer(false)}>Okay\r\n
}\r\n {showJpegDisclaimer &&
\r\n Please note that some illustrations do not support rug photos. setshowJpegDisclaimer(false)}>Okay\r\n
}\r\n {progressPercent > -1 ?\r\n
\r\n {eFile &&
\r\n

{eFile.name}

\r\n {\r\n seteFile(null);\r\n setprogressPercent(-1);\r\n }} />\r\n
}\r\n
\r\n
\r\n
\r\n
\r\n :\r\n \r\n }\r\n\r\n\r\n
Please specify the desired size of the rug
\r\n
\r\n
\r\n Width\r\n maxCarpetDims[customDesignDetails.unit]}\r\n position=\"bottom\"\r\n content={`Maximum ${maxCarpetDims[customDesignDetails.unit]} ${customDesignDetails.unit} allowed`}\r\n >\r\n changeDesignDetails(\"w\", toFixed(e.target.value))}\r\n >\r\n \r\n
\r\n
\r\n Length\r\n maxCarpetDims[customDesignDetails.unit]}\r\n position=\"bottom\"\r\n content={`Maximum ${maxCarpetDims[customDesignDetails.unit]} ${customDesignDetails.unit} allowed`}\r\n >\r\n changeDesignDetails(\"h\", toFixed(e.target.value))}\r\n >\r\n \r\n
\r\n
\r\n Unit\r\n {\r\n setcustomDesignDetails({\r\n ...customDesignDetails,\r\n \"unit\": units[val],\r\n \"w\": toFixed(customDesignDetails.w * unitFactor[units[val]]),\r\n \"h\": toFixed(customDesignDetails.h * unitFactor[units[val]]),\r\n });\r\n }}\r\n />\r\n
\r\n
\r\n\r\n {\r\n // (!showUnsupportedDisclaimer ||\r\n // (showUnsupportedDisclaimer !== unsupportedDesign.RUNNER)) &&\r\n (!showUnsupportedDisclaimer) &&\r\n (customDesignDetails.w <= maxCarpetDims[customDesignDetails.unit] &&\r\n customDesignDetails.h <= maxCarpetDims[customDesignDetails.unit])\r\n &&\r\n <>\r\n
\r\n Please make sure that the uploaded design looks appropriate in this view.\r\n
\r\n \r\n You can then view and save this rug in the offered Virtual Studio settings, all for US ${paymentAmount} only.\r\n \r\n\r\n
\r\n {designFinalUploading === 'paypal' ?\r\n { }}\r\n style={{ width: '150px !important', height: '25px', backgroundColor: \"var(--brand-primary)\", color: 'white' }}>\r\n {((tokenMsg.status === 2) || designFinalUploading === 'token') && }\r\n
Verifying
\r\n
\r\n :\r\n \r\n createOrder(data, actions)}\r\n onApprove={(data, actions) => onApprove(data, actions)} />\r\n \r\n\r\n }\r\n\r\n\r\n\r\n {/* {PayPalButton && createOrder(data, actions)}\r\n onApprove={(data, actions) => onApprove(data, actions)}\r\n />} */}\r\n setuploadedDesign(null)}>\r\n
\r\n
\r\n setuseToken(true)}>I have a Coupon Code\r\n
\r\n \r\n }\r\n {useToken &&\r\n <>\r\n
\r\n
\r\n settoken(e.target.value)}\r\n >\r\n \r\n {((tokenMsg.status === 2) || designFinalUploading === 'token') && }\r\n
Use Coupon
\r\n
\r\n \r\n\r\n
\r\n {tokenMsg?.msg &&\r\n
{tokenMsg.msg}
}\r\n\r\n \r\n }\r\n
\r\n ) :\r\n <>\r\n
\r\n

{progressPercent > -1 ? \"Uploading your design...\" : \"Please upload your design\"}

\r\n
\r\n
{\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setdraggingFile(1);\r\n }}\r\n onDragOver={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setdraggingFile(1);\r\n }}\r\n onDrop={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n onInputChange(e);\r\n setdraggingFile(0);\r\n }}\r\n onDragExit={(e) => {\r\n setdraggingFile(0);\r\n }}\r\n onDragLeave={(e) => {\r\n setdraggingFile(0);\r\n }}\r\n onMouseLeave={(e) => {\r\n setdraggingFile(0);\r\n }}\r\n onClick={triggerInput}\r\n >\r\n {progressPercent < 0 && <>\r\n {\r\n e.stopPropagation();\r\n triggerInput(e)\r\n }}\r\n >\r\n
\r\n Drop your design here\r\n {/* */}\r\n
\r\n }\r\n {progressPercent > -1 &&\r\n <>\r\n {eFile &&
\r\n

{eFile.name}

\r\n {\r\n seteFile(null);\r\n setprogressPercent(-1);\r\n }} />\r\n
}\r\n
\r\n
\r\n
\r\n \r\n }\r\n \r\n
\r\n Supported files:\r\n
    \r\n
  • Maximum 15 MB
  • \r\n
  • JPG for rug photos\r\n
    \r\n High quality JPGs with atleast 2500 px width or height look better in closeup shots\r\n
  • \r\n
  • PNG for color separated designs
  • \r\n
  • CTFX for Galaincha designs
  • \r\n
  • Recommended minimum size :\r\n
    \r\n 5′ × 9′ or 150 × 275 cms
  • \r\n
  • Recommended maximum size :\r\n
    \r\n 12′ × 16′ or 370 × 480 cms
  • \r\n
\r\n
\r\n
\r\n Your uploaded designs are private and can only be accessed by you.\r\n
\r\n\r\n \r\n )}\r\n\r\n }\r\n\r\n {editDesign?.id && uploadedDesign?.file &&
\r\n {designUploadSuccess && <>\r\n
\r\n

{uploadedDesign.name.split(nameSeparator)[0]}

\r\n
Design edited successfully!
\r\n
Your design is now ready.
\r\n
You can view it in different settings available in the 'Shot Selection' menu.
\r\n handleClose()}>\r\n
\r\n \r\n }\r\n {!designUploadSuccess &&\r\n <>\r\n

{uploadedDesign.name.split(nameSeparator)[0]}

\r\n {showUnsupportedDisclaimer &&
\r\n {showUnsupportedDisclaimer === unsupportedDesign.IRREGULAR ?\r\n \"Disclaimer: The design you uploaded is irregular. Irregular designs are supported in limited views only.\"\r\n : \"Runner carpets are currently not supported in Virtual Rug Studio. Please try a different rug or change the dimensions to continue.\"\r\n }\r\n
}\r\n
Change Size
\r\n
\r\n
\r\n Width\r\n maxCarpetDims[customDesignDetails.unit]}\r\n position=\"bottom\"\r\n content={`Maximum ${maxCarpetDims[customDesignDetails.unit]} ${customDesignDetails.unit} allowed`}\r\n >\r\n changeDesignDetails(\"w\", toFixed(e.target.value))}\r\n >\r\n \r\n\r\n
\r\n
\r\n Length\r\n maxCarpetDims[customDesignDetails.unit]}\r\n position=\"bottom\"\r\n content={`Maximum ${maxCarpetDims[customDesignDetails.unit]} ${customDesignDetails.unit} allowed`}\r\n >\r\n changeDesignDetails(\"h\", toFixed(e.target.value))}\r\n >\r\n \r\n
\r\n
\r\n Unit\r\n {\r\n setcustomDesignDetails({\r\n ...customDesignDetails,\r\n \"unit\": units[val],\r\n \"w\": toFixed(customDesignDetails.w * unitFactor[units[val]]),\r\n \"h\": toFixed(customDesignDetails.h * unitFactor[units[val]]),\r\n });\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n \r\n {designFinalUploading === 'edit' && }\r\n
Update Design
\r\n
\r\n
\r\n \r\n }\r\n\r\n
\r\n }\r\n\r\n
{\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setdraggingFile(2);\r\n }}\r\n onDragOver={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setdraggingFile(2);\r\n }}\r\n onDrop={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n // if (!uploadedDesign?.url)\r\n onInputChange(e);\r\n setdraggingFile(0);\r\n }}\r\n onDragExit={(e) => {\r\n setdraggingFile(0);\r\n }}\r\n onDragLeave={(e) => {\r\n setdraggingFile(0);\r\n }}\r\n onMouseLeave={(e) => {\r\n setdraggingFile(0);\r\n }}\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!uploadedDesign?.url)\r\n triggerInput(e)\r\n }}\r\n >\r\n {/* */}\r\n \r\n {!uploadedDesign?.file &&
}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default UploadPlatform;\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useEffect, useState, useRef, useCallback } from \"react\";\r\nimport { Popover, Card, Slider, Overlay, ButtonGroup, H4 } from \"@blueprintjs/core\";\r\nimport AppProvider, { getFloor } from \"../../../api/appProvider\";\r\n\r\nimport { useFullscreen, useToggle, useIdle } from \"react-use\";\r\nimport classNames from \"classnames\";\r\nimport AtIcon from \"../../atoms/AtIcon\";\r\nimport AtButton from \"../../atoms/AtButton\";\r\nimport CameraButton from \"../../molecules/CameraButton\";\r\nimport OptionsSidePanel from \"../OptionsSidePanel\";\r\nimport IllustrationView from \"../../IllustrationView\";\r\nimport { getExtension, readJSON } from \"../../../utils/utils\";\r\nimport {\r\n useDesignDetailState,\r\n useDispatchDesignDetail,\r\n designDetailActions\r\n} from \"../../../reducers/designdetails.reducer\";\r\nimport { AtSpinner, AtSpinnerOverlay } from \"../../atoms/AtSpinner\";\r\nimport Thumbnail from \"../../molecules/Thumbnail\";\r\nimport DesignList, { jpegExtensions } from \"../DesignList\";\r\nimport CatalogView from \"../../CatalogView\";\r\nimport CloseupView from \"../../InteractivePerspectiveView/CloseupView\";\r\nimport {\r\n roomConfigActions,\r\n useDispatchRoomConfig\r\n} from \"../../IllustrationView/roomconfig.reducer\";\r\nimport { config2Point1 } from \"../../../configMatcher\";\r\nimport Tutorial from \"./Tutorial\";\r\nimport CameraOptions from \"../CameraOptions\";\r\nimport FloorSelectionDialog from \"../../IllustrationView/FloorSelectionDialog\";\r\nimport { ReactComponent as MMC } from \"./icon-mmc.svg\";\r\nimport { designListActions, useDispatchDesignList } from \"../../../reducers/designstree.reducer\";\r\nimport UploadPlatform from \"../UploadPlatform\";\r\nimport { useUiState } from \"../../../reducers/mainui.reducer\";\r\nconst viewTypes = {\r\n perspective: \"PerspectiveView\",\r\n illustration: \"illustration\",\r\n catalog: \"Catalog\",\r\n roomview: \"roomview\",\r\n closeupview: \"closeupview\"\r\n};\r\n\r\nconst filters = [\r\n { label: \"Original\", Thumb: `${window.assetspath}/v3assets/vps/Filters/Ludwig.jpg` },\r\n {\r\n filterName: \"Amaro\",\r\n label: \"Amaro\",\r\n Thumb: `${window.assetspath}/v3assets/vps/Filters/Ludwig.jpg`\r\n },\r\n {\r\n filterName: \"Hefe\",\r\n label: \"Hefe\",\r\n Thumb: `${window.assetspath}/v3assets/vps/Filters/Aden.jpg`\r\n },\r\n {\r\n filterName: \"Moon\",\r\n label: \"Moon\",\r\n Thumb: `${window.assetspath}/v3assets/vps/Filters/Moon.jpg`\r\n },\r\n {\r\n filterName: \"Sutro\",\r\n label: \"Sutro\",\r\n Thumb: `${window.assetspath}/v3assets/vps/Filters/Hudson.jpg`\r\n },\r\n {\r\n filterName: \"X-Pro II\",\r\n label: \"X-Pro II\",\r\n Thumb: `${window.assetspath}/v3assets/vps/Filters/Hudson.jpg`\r\n }\r\n];\r\n\r\nconst blursDef = [\r\n { label: \"Normal\", Thumb: `${window.assetspath}/v3assets/vps/Filters/Ludwig.jpg` },\r\n {\r\n label: \"Near\",\r\n centerAt: { x: 0.5, y: 0.9 },\r\n Thumb: `${window.assetspath}/v3assets/vps/Filters/Ludwig.jpg`\r\n },\r\n {\r\n label: \"Center\",\r\n centerAt: { x: 0.5, y: 0.5 },\r\n Thumb: `${window.assetspath}/v3assets/vps/Filters/Ludwig.jpg`\r\n },\r\n {\r\n label: \"Far\",\r\n centerAt: { x: 0.5, y: 0.1 },\r\n Thumb: `${window.assetspath}/v3assets/vps/Filters/Ludwig.jpg`\r\n }\r\n];\r\nexport const unsupportedDesign = {\r\n IRREGULAR: \"Irregular\",\r\n RUNNER: \"Runner\"\r\n};\r\nlet firstload = false;\r\n\r\nexport const isRunner = ({ width, height }) => {\r\n const ratio = width / height;\r\n if (ratio <= 1 / 1.75 || ratio >= 1.75) return true;\r\n return false;\r\n};\r\nconst VpsStage = props => {\r\n const {\r\n selectedView,\r\n handleCollapsePanel,\r\n showIllustrationModal,\r\n setshowMMC,\r\n showMMC,\r\n // mainRef,\r\n prevIllustration,\r\n nextIllustration,\r\n disableIllustrations,\r\n changeDesignType\r\n } = props;\r\n const designDetailState = useDesignDetailState();\r\n const dispatchDesignDetails = useDispatchDesignDetail();\r\n const dispatchDesignList = useDispatchDesignList();\r\n const dispatchRoomConfig = useDispatchRoomConfig();\r\n const [activeCameraFilter, setactiveCameraFilter] = useState(0);\r\n const [activeCameraBlur, setactiveCameraBlur] = useState(0);\r\n const [roomdata, setRoomData] = useState(null);\r\n const [isRendering, setIsRendering] = useState(false);\r\n const [disableCamera, setdisableCamera] = useState(true);\r\n const [illviewRoomData, setillviewRoomData] = useState(null);\r\n const [catalogviewRoomData, setcatalogviewRoomData] = useState(null);\r\n const [closeviewRoomData, setCloseviewRoomData] = useState();\r\n const [currentRenderingView, setcurrentRenderingView] = useState({ prev: null, active: null });\r\n const [showFilterPanel, setshowFilterPanel] = useState(false);\r\n // const [showirregularDesignAlert, setshowirregularDesignAlert] = useState(false);\r\n const [showunsupportedDesignAlert, setshowunsupportedDesignAlert] = useState(false);\r\n // const [customUrl, setcustomUrl] = useState(null);\r\n const [showDesignPopOver, setshowDesignPopOver] = useState(false);\r\n const [showUploadRugDialog, setshowUploadRugDialog] = useState(false);\r\n const [showTutorial, setshowTutorial] = useState(false);\r\n const [showRugColors, setshowRugColors] = useState(false);\r\n\r\n const [hideActive, sethideActive] = useState(true);\r\n const [triggerHideActive, settriggerHideActive] = useState(false);\r\n const [blurData, setblurData] = useState({ blur: true, active: false, radius: 10 });\r\n const [blurs, setblurs] = useState(blursDef);\r\n\r\n const [tiltShiftFilter, settiltShiftFilter] = useState({\r\n active: false,\r\n options: { centerAt: { x: 0.5, y: 0.5 }, dontBlur: 20, maxRadius: 15 }\r\n });\r\n const [resetTrigger, setresetTrigger] = useState(0);\r\n const [nextDesigns, setnextDesigns] = useState({ next: null, prev: null });\r\n const [customUploadFolder, setcustomUploadFolder] = useState(null);\r\n const [editDesign, seteditDesign] = useState(null);\r\n\r\n const [floorOptions, setfloorOptions] = useState({\r\n show: false,\r\n floors: [],\r\n activeFloor: {}\r\n });\r\n\r\n const mainRef = useRef(null);\r\n\r\n const [fullscreenstatus, togglefullscreen] = useToggle(false);\r\n const isFullScreen = useFullscreen(mainRef, fullscreenstatus, {\r\n onClose: () => togglefullscreen(false)\r\n });\r\n\r\n const isIdle = useIdle(5e3);\r\n\r\n useEffect(() => {\r\n (async () => {\r\n let floorOptionsTemp = await getFloor();\r\n setfloorOptions(floorOptionsTemp);\r\n })();\r\n return () => {\r\n firstload = false;\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (showIllustrationModal || showDesignPopOver || showFilterPanel || showMMC) {\r\n window.dismissMenu && window.dismissMenu();\r\n }\r\n }, [showDesignPopOver, showIllustrationModal, showFilterPanel, showMMC]);\r\n\r\n useEffect(() => {\r\n if (!showFilterPanel && activeCameraFilter !== 0) {\r\n setactiveCameraFilter(0);\r\n }\r\n }, [showFilterPanel]);\r\n\r\n useEffect(() => {\r\n settiltShiftFilter({\r\n active: activeCameraBlur !== 0,\r\n options: {\r\n ...tiltShiftFilter.options,\r\n centerAt:\r\n blurs && blurs[activeCameraBlur] ? blurs[activeCameraBlur].centerAt : { x: 0.5, y: 0.5 }\r\n }\r\n });\r\n }, [activeCameraBlur]);\r\n\r\n useEffect(() => {\r\n if (!selectedView) return;\r\n let isSupported = true;\r\n if (selectedView.category !== \"Studio Rooms\") {\r\n if (designDetailState.designDetails.IsIrregular) {\r\n setLoading(false);\r\n setshowunsupportedDesignAlert(unsupportedDesign.RUNNER);\r\n isSupported = false;\r\n return;\r\n } else if (\r\n isRunner({\r\n width: designDetailState.designDetails.PhysicalWidth,\r\n height: designDetailState.designDetails.PhysicalHeight\r\n })\r\n ) {\r\n setshowunsupportedDesignAlert(unsupportedDesign.IRREGULAR);\r\n isSupported = false;\r\n } else setshowunsupportedDesignAlert(false);\r\n } else setshowunsupportedDesignAlert(false);\r\n if (!isSupported) return;\r\n if (selectedView.fromlocal) {\r\n const baseUrl = selectedView.Dir;\r\n readJSON(`${baseUrl}/config.json`).then(config => {\r\n const name = selectedView.Name.replace(new RegExp(\"[0-9]\", \"g\"), \"\").trim();\r\n setRoomData({ ...selectedView, Name: name, config, baseUrl });\r\n });\r\n } else {\r\n setLoading(true);\r\n AppProvider.fetchRoomDetails({ file: selectedView.FullPath }).then(roomData => {\r\n if (!roomData && !roomData.dir) return;\r\n const s = roomData.Dir.split(\"/\");\r\n let baseUrl;\r\n if (s[1] === \"Assets\") {\r\n const ss = s.slice(2);\r\n baseUrl = `${AppProvider.assetsDomain}/${ss.join(\"/\")}`;\r\n } else {\r\n baseUrl = `${AppProvider.domain}${roomData.Dir}`;\r\n }\r\n readJSON(`${baseUrl}/config.json`).then(async config => {\r\n const name = selectedView.Name.replace(new RegExp(\"[0-9]\", \"g\"), \"\").trim();\r\n if (config.version !== 2.1) {\r\n let mappedConfig = await config2Point1(name, baseUrl, config);\r\n setRoomData({\r\n ...roomData,\r\n Name: name,\r\n config: mappedConfig,\r\n baseUrl,\r\n category: \"Studio Rooms\"\r\n });\r\n } else {\r\n setRoomData({\r\n ...roomData,\r\n Name: name,\r\n config,\r\n baseUrl,\r\n category: selectedView.category\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }, [selectedView]);\r\n\r\n useEffect(() => {\r\n if (!roomdata) return;\r\n if (!roomdata.config.blur) {\r\n setblurData({ ...blurData, blur: roomdata.config.blur, active: false });\r\n setblurs([]);\r\n } else {\r\n setblurData({ ...blurData, blur: roomdata.config.blur });\r\n setblurs([...blursDef]);\r\n }\r\n const config = roomdata.config;\r\n if (roomdata.config.roomType !== viewTypes.closeupview) {\r\n setshowTutorial(false);\r\n }\r\n if (currentRenderingView.prev || currentRenderingView.active) sethideActive(false);\r\n if (roomdata.config.roomType === viewTypes.closeupview) {\r\n setCloseviewRoomData(roomdata);\r\n if (\r\n !currentRenderingView.active ||\r\n (currentRenderingView.active && currentRenderingView.active !== viewTypes.closeupview)\r\n )\r\n sethideActive(true);\r\n setcurrentRenderingView({\r\n prev:\r\n currentRenderingView.active !== viewTypes.closeupview\r\n ? currentRenderingView.active\r\n : currentRenderingView.prev,\r\n active: viewTypes.closeupview\r\n });\r\n } else if (roomdata.category === viewTypes.catalog) {\r\n if (!catalogviewRoomData || roomdata.config.name !== catalogviewRoomData.config.name) {\r\n setcatalogviewRoomData({ ...roomdata });\r\n if (\r\n !currentRenderingView.active ||\r\n (currentRenderingView.active && currentRenderingView.active !== viewTypes.catalog)\r\n )\r\n sethideActive(true);\r\n }\r\n setcurrentRenderingView({\r\n prev:\r\n currentRenderingView.active !== viewTypes.catalog\r\n ? currentRenderingView.active\r\n : currentRenderingView.prev,\r\n active: viewTypes.catalog\r\n });\r\n } else if (roomdata.config.version > 2) {\r\n if (!illviewRoomData || roomdata.config.name !== illviewRoomData.config.name) {\r\n setillviewRoomData({ ...roomdata });\r\n if (\r\n !currentRenderingView.active ||\r\n (currentRenderingView.active && currentRenderingView.active !== viewTypes.illustration)\r\n )\r\n sethideActive(true);\r\n }\r\n setcurrentRenderingView({\r\n prev:\r\n currentRenderingView.active !== viewTypes.illustration\r\n ? currentRenderingView.active\r\n : currentRenderingView.prev,\r\n active: viewTypes.illustration\r\n });\r\n }\r\n }, [roomdata]);\r\n const setLoading = loading =>\r\n dispatchDesignDetails({ type: designDetailActions.SET_LOADING, payload: loading });\r\n\r\n useEffect(() => {\r\n if (!designDetailState?.designDetails || !selectedView) return;\r\n if (showRugColors && !designDetailState.designDetails.DesignColors.length) {\r\n setshowRugColors(false);\r\n }\r\n if (!designDetailState.designDetails.DesignColors.length) {\r\n changeDesignType && changeDesignType(\"jpeg\");\r\n if (\r\n selectedView?.category &&\r\n selectedView.category.toLowerCase() === \"carpet in the making\"\r\n ) {\r\n setTimeout(() => {\r\n dispatchDesignDetails({ type: designDetailActions.SET_LOADING, payload: false });\r\n setshowunsupportedDesignAlert(\"Rug photos \");\r\n }, 400);\r\n }\r\n } else {\r\n changeDesignType && changeDesignType(\"ctfx\");\r\n }\r\n const irregular = designDetailState.designDetails.IsIrregular;\r\n const runner = isRunner({\r\n width: designDetailState.designDetails.PhysicalWidth,\r\n height: designDetailState.designDetails.PhysicalHeight\r\n });\r\n\r\n if (irregular || runner) {\r\n disableIllustrations(irregular ? unsupportedDesign.IRREGULAR : unsupportedDesign.RUNNER);\r\n if (roomdata.category !== \"Studio Rooms\") {\r\n setTimeout(() => {\r\n dispatchDesignDetails({ type: designDetailActions.SET_LOADING, payload: false });\r\n setshowunsupportedDesignAlert(\r\n (irregular ? unsupportedDesign.IRREGULAR : unsupportedDesign.RUNNER) + \" designs \"\r\n );\r\n }, 400);\r\n } else setshowunsupportedDesignAlert(false);\r\n } else {\r\n disableIllustrations(false);\r\n setshowunsupportedDesignAlert(false);\r\n }\r\n }, [designDetailState.designDetails]);\r\n\r\n useEffect(() => {\r\n if (!hideActive) {\r\n return;\r\n }\r\n let tim = setTimeout(() => {\r\n settriggerHideActive(true);\r\n }, 300);\r\n return () => {\r\n clearTimeout(tim);\r\n };\r\n }, [hideActive]);\r\n\r\n useEffect(() => {\r\n settriggerHideActive(false);\r\n if (triggerHideActive && !designDetailState.loading) {\r\n sethideActive(false);\r\n }\r\n }, [triggerHideActive]);\r\n\r\n useEffect(() => {\r\n if (!designDetailState.loading) {\r\n sethideActive(false);\r\n }\r\n }, [designDetailState.loading]);\r\n\r\n useEffect(() => {\r\n if (showRugColors) {\r\n document.getElementsByClassName(\"mmc-stickright-wrapper\")[0].style.display = \"block\";\r\n } else {\r\n document.getElementsByClassName(\"mmc-stickright-wrapper\")[0].style.display = \"none\";\r\n }\r\n }, [showRugColors]);\r\n\r\n window.enter = () => {\r\n if (!firstload) return false;\r\n setshowTutorial(true);\r\n setcustomUploadFolder(window.userEmail?.replace(\"@\", \"\") || \"default\");\r\n return true;\r\n };\r\n\r\n const handleRendering = val => {\r\n if (val && !firstload) {\r\n handleCollapsePanel(true);\r\n firstload = true;\r\n // handleReady(true);\r\n }\r\n setdisableCamera(val);\r\n if (!val) return;\r\n switch (currentRenderingView.active) {\r\n case viewTypes.closeupview:\r\n setillviewRoomData(null);\r\n setcatalogviewRoomData(null);\r\n break;\r\n case viewTypes.illustration:\r\n setCloseviewRoomData(null);\r\n setcatalogviewRoomData(null);\r\n break;\r\n case viewTypes.catalog:\r\n setCloseviewRoomData(null);\r\n setillviewRoomData(null);\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n };\r\n const downloadIllustration = async () => {\r\n setIsRendering(true);\r\n\r\n if (!currentRenderingView.active) return;\r\n switch (currentRenderingView.active) {\r\n case viewTypes.closeupview:\r\n await window.downloadRenderedCloseupIll();\r\n break;\r\n case viewTypes.illustration:\r\n await window.downloadRendered3dIllinIllView();\r\n break;\r\n case viewTypes.catalog:\r\n await window.downloadRenderedCatalog();\r\n break;\r\n default:\r\n await window.downloadRendered3dIll();\r\n break;\r\n }\r\n setTimeout(() => {\r\n setIsRendering(false);\r\n }, 300);\r\n };\r\n\r\n const changeActiveFloor = floorOption => {\r\n setfloorOptions({ ...floorOptions, activeFloor: floorOption, show: false });\r\n };\r\n const setActiveFloor = floorName => {\r\n if (floorName) {\r\n let matchesName = floorOptions.floors.filter((el, i) => {\r\n return el.name === floorName;\r\n });\r\n if (matchesName.length > 0) {\r\n setfloorOptions({ ...floorOptions, activeFloor: matchesName[0], show: false });\r\n return matchesName[0];\r\n }\r\n }\r\n return null;\r\n };\r\n const handleDesignPopOverClose = useCallback(event => {\r\n setshowDesignPopOver(false);\r\n }, []);\r\n\r\n const handleUploadPlatformClose = useCallback(event => {\r\n seteditDesign(null);\r\n setshowUploadRugDialog(false);\r\n }, []);\r\n\r\n const handleSetNextDesigns = useCallback(val => {\r\n setnextDesigns(val);\r\n }, []);\r\n\r\n const nextDesign = () => {\r\n dispatchDesignList({\r\n type: designListActions.SET_ACTIVE_NODE,\r\n payload: nextDesigns.next\r\n });\r\n };\r\n const prevDesign = () => {\r\n dispatchDesignList({\r\n type: designListActions.SET_ACTIVE_NODE,\r\n payload: nextDesigns.prev\r\n });\r\n };\r\n\r\n return (\r\n
\r\n {showunsupportedDesignAlert && (\r\n
\r\n { handleCollapsePanel();setshowirregularDesignAlert(false)}}\r\n >\r\n
\r\n {\" \"}\r\n {showunsupportedDesignAlert} are not supported in this shot. Please select a different\r\n shot.\r\n
\r\n {\r\n handleCollapsePanel();\r\n }}\r\n >\r\n \r\n
\r\n )}\r\n \r\n {illviewRoomData && (\r\n setresetTrigger(resetTrigger + 1)}\r\n >\r\n )}\r\n togglefullscreen()}\r\n >\r\n \r\n \r\n setshowRugColors(true)}\r\n >\r\n \r\n \r\n
\r\n {/* mmc */}\r\n \r\n

\r\n Rug Colors\r\n setshowRugColors(false)} />\r\n

\r\n
\r\n {designDetailState?.designDetails?.DesignColors?.length &&\r\n designDetailState.designDetails.DesignColors.map((colorobj, index) => {\r\n return (\r\n setshowMMC(index, colorobj)}\r\n >
\r\n );\r\n })}\r\n \r\n \r\n {blurData.active && (\r\n setblurData({ ...blurData, radius: val })}\r\n value={blurData.radius}\r\n max={20}\r\n min={1}\r\n vertical\r\n />\r\n )}{\" \"}\r\n {\r\n downloadIllustration();\r\n }}\r\n size=\"small\"\r\n clipped={true}\r\n />\r\n setshowTutorial(false)}>\r\n {\r\n e.stopPropagation();\r\n setactiveCameraFilter(index);\r\n }}\r\n >\r\n
\r\n downloadIllustration()}\r\n disabled={isRendering}\r\n >\r\n {isRendering ? (\r\n \r\n ) : (\r\n \"take-shot\"\r\n )}\r\n Take shot\r\n \r\n setshowFilterPanel(false)}\r\n >\r\n
\r\n \r\n {\r\n e.stopPropagation();\r\n setactiveCameraFilter(index);\r\n }}\r\n blurOptions={blurs}\r\n activeBlurIndex={activeCameraBlur}\r\n onBlurSelect={(e, index) => {\r\n e.stopPropagation();\r\n setactiveCameraBlur(index);\r\n }}\r\n onShot={e => downloadIllustration()}\r\n handleClose={() => {\r\n setshowFilterPanel(false);\r\n setactiveCameraFilter(0);\r\n setactiveCameraBlur(0);\r\n }}\r\n />\r\n \r\n {isFullScreen && (\r\n <>\r\n togglefullscreen()}\r\n />\r\n {prevIllustration && (\r\n \r\n )}\r\n {nextIllustration && (\r\n \r\n )}\r\n {nextDesigns?.prev && (\r\n \r\n )}\r\n {nextDesigns?.next && (\r\n \r\n )}\r\n {\r\n downloadIllustration();\r\n }}\r\n className=\"fullWidth\"\r\n size=\"small\"\r\n clipped={true}\r\n />\r\n \r\n )}\r\n \r\n {closeviewRoomData && (\r\n \r\n )}\r\n \r\n \r\n {illviewRoomData && (\r\n \r\n )}\r\n \r\n \r\n {catalogviewRoomData && (\r\n \r\n )}\r\n \r\n\r\n \r\n \r\n \r\n
\r\n \"logo\"\r\n handleCollapsePanel()}\r\n >\r\n
\r\n {(closeviewRoomData || illviewRoomData) &&\r\n roomdata.config.roomType !== \"illustration\" &&\r\n roomdata.category.toLowerCase() !== \"carpet in the making\" && (\r\n
\r\n {\r\n setfloorOptions({ ...floorOptions, show: true });\r\n }}\r\n >\r\n {\r\n setfloorOptions({ ...floorOptions, show: false });\r\n }}\r\n handleReset={illviewRoomData && (() => changeActiveFloor(null))}\r\n handleThumbClick={changeActiveFloor}\r\n />\r\n
\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default VpsStage;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useMount } from \"react-use\";\r\nimport AppProvider from \"../../../api/appProvider\";\r\nimport { arrangeIntoTree, getPathOffile } from \"../../../utils/arrayUtils\";\r\nimport { useDebouncedCallback } from \"use-debounce/lib\";\r\nimport {\r\n designListActions as actions,\r\n useDesignListState,\r\n useDispatchDesignList\r\n} from \"../../../reducers/designstree.reducer\";\r\nimport { H2, H6 } from \"@blueprintjs/core\";\r\nimport AtDialog from \"../../molecules/AtDialog\";\r\nimport ThumbList from \"../../molecules/ThumbList\";\r\nimport AtIcon from \"../../atoms/AtIcon\";\r\nimport { getExtension, getFilenameWithoutExt } from \"../../../utils/utils\";\r\nimport deepmerge from \"deepmerge\";\r\nimport { isRunner, unsupportedDesign } from \"../VpsStage\";\r\nimport { nameSeparator } from \"../UploadPlatform\";\r\n\r\nconst thumbnailType = \"portrait\";\r\nexport const jpegExtensions = [\"jpg\", \"jpeg\"];\r\nconst DesignList = props => {\r\n const { handleThumbnailClick, hidden = true, handleClose, setNextDesigns, customUploadFolder, restrictJPEG, restrictDesigns, seteditDesign } = props;\r\n\r\n const [customTree, setcustomTree] = useState({});\r\n const [stateTree, setstateTree] = useState([]);\r\n const [uploadedFile, setuploadedFile] = useState({ name: null, isJPEG: false });\r\n\r\n const { initDesignPath } = window.initialData;\r\n\r\n const state = useDesignListState();\r\n const dispatch = useDispatchDesignList();\r\n\r\n useEffect(() => {\r\n if (!state.tree) return;\r\n if (JSON.stringify(state.tree) !== JSON.stringify(stateTree)) {\r\n setstateTree(state.tree);\r\n }\r\n }, [state.tree]);\r\n\r\n window.getUploadedFile = (filename, isJPEG) => {\r\n setuploadedFile({ name: filename, isJPEG: isJPEG });\r\n }\r\n\r\n const getFolderTree = ({ folderPath, defaultFilePath, defaultFileKeyType, scope }) => {\r\n if (!folderPath) return;\r\n folderPath = folderPath.toLowerCase();\r\n let passPath = folderPath;\r\n if (scope === \"internal\") {\r\n passPath = folderPath.split(\"designs/\")[1];\r\n }\r\n return new Promise((resolve) => {\r\n AppProvider.fetchList(\"design\", passPath).then(initialList => {\r\n const files = initialList.filter(item => (item.Type === \"file\" && item.FullPath.toLowerCase().includes(folderPath)));\r\n const folders = initialList.filter(item => (item.Type === \"folder\" && item.FullPath.toLowerCase() === folderPath));\r\n let defaultItemPath;\r\n\r\n\r\n if (!defaultFilePath) {\r\n defaultItemPath = files[0].FullPath;\r\n } else {\r\n // if (defaultFileKeyType) {\r\n // files.map(item => {\r\n // if (getFilenameWithoutExt(item.FullPath) === defaultFilePath) {\r\n // defaultItemPath = item.FullPath;\r\n // return { ...item, KeyType: defaultFileKeyType }\r\n // }\r\n // else return item;\r\n // });\r\n // }\r\n // else\r\n defaultItemPath = (files.find(item => getFilenameWithoutExt(item.FullPath) === defaultFilePath)).FullPath;\r\n }\r\n const params = { files, folders, defaultItemPath };\r\n const { tree, defaultItem, openNode, flatfileList } = arrangeIntoTree(params);\r\n if (!openNode) resolve(null);\r\n AppProvider.getDesignThumbnails({ designs: [...flatfileList] }).then(items => {\r\n let updatedTree = [...tree];\r\n\r\n const findinItems = (filesInNode) => {\r\n items.forEach(item => {\r\n const index = filesInNode.findIndex(\r\n fileInNode => item.fullpath === fileInNode.fullpath\r\n );\r\n if (index !== -1) filesInNode[index] = item;\r\n });\r\n return filesInNode;\r\n }\r\n let folderTree = null;\r\n updatedTree.forEach(function iter(node, index, object) {\r\n let { filesInNode } = node;\r\n node.filesInNode = findinItems(filesInNode);\r\n if (!folderTree && (node.fullpath.toLowerCase() === \"/\" + folderPath)) {\r\n folderTree = node;\r\n Array.isArray(folderTree.childNodes) && folderTree.childNodes.forEach(iter);\r\n }\r\n else {\r\n Array.isArray(node.childNodes) && node.childNodes.forEach(iter);\r\n }\r\n\r\n });\r\n\r\n const defItemWithThumb = items.find(item => item.fullpath === defaultItem.fullpath);\r\n\r\n resolve({ tree: folderTree, flatfileList, openNode, defItemWithThumb });\r\n\r\n });\r\n })\r\n });\r\n\r\n }\r\n\r\n useEffect(() => {\r\n if (!state.tree || !uploadedFile?.name) return;\r\n\r\n (async () => {\r\n const folderPath = window.InterfaceElements.StartupFolder;\r\n const defaultFilePath = window.InterfaceElements.StartupFolder + '/' + getFilenameWithoutExt(uploadedFile.name);\r\n const returned = await getFolderTree({\r\n folderPath,\r\n defaultFilePath,\r\n defaultFileKeyType: AppProvider.activeKey,\r\n scope: \"internal\"\r\n });\r\n if (!returned) return;\r\n const { tree: folderTree, flatfileList, openNode, defItemWithThumb } = returned;\r\n\r\n defItemWithThumb.isJPEG = uploadedFile.isJPEG;\r\n defItemWithThumb.label = defItemWithThumb.label.split(nameSeparator)[0];\r\n\r\n for (let i = 0; i < folderTree.length; i++) {\r\n const iter = async (node) => {\r\n if (node.type === 'folder' && node.filesInNode?.length) {\r\n for (let j = 0; j < node.filesInNode.length; j++) {\r\n await iter(node.filesInNode[j]);\r\n }\r\n }\r\n else if (node.type === 'file' && node.fullpath === defaultFilePath) {\r\n node.isJPEG = uploadedFile.isJPEG;\r\n node.label = node.label.split(nameSeparator)[0];\r\n return;\r\n }\r\n\r\n if (Array.isArray(node.childNodes)) {\r\n for (let j = 0; j < node.childNodes.length; j++) {\r\n await iter(node.childNodes[j]);\r\n }\r\n }\r\n }\r\n await iter(folderTree[i]);\r\n }\r\n\r\n let updatedTree = [...state.tree];\r\n if (updatedTree[0].label === \"Your Designs\") {\r\n updatedTree[0].filesInNode.push(defItemWithThumb);\r\n }\r\n else {\r\n updatedTree = [{ ...folderTree, label: \"Your Designs\", level: 0 }, ...updatedTree];\r\n }\r\n dispatch({\r\n type: actions.SET_TREE,\r\n payload: { tree: updatedTree, flatfileList, openNode }\r\n });\r\n\r\n if (openNode.filesInNode && openNode.filesInNode.length > 0)\r\n onThumbnailClick(defItemWithThumb);\r\n })();\r\n }, [uploadedFile])\r\n\r\n useEffect(() => {\r\n (async () => {\r\n if (!customUploadFolder) return;\r\n\r\n const currentKey = AppProvider.activeKey;\r\n window.InterfaceElements.StartupFolder = `Designs/Internal/Uploads/${customUploadFolder}`;\r\n\r\n const findinItems = (items, filesInNode) => {\r\n items.forEach(item => {\r\n const index = filesInNode.findIndex(\r\n fileInNode => item.fullpath === fileInNode.fullpath\r\n );\r\n item.label = item.label.split(nameSeparator)[0];\r\n if (index !== -1) {\r\n if (jpegExtensions.includes(getExtension(item.fullpath))) {\r\n filesInNode[index] = { ...item, infoThumbs: [], infoTitles: [\"This design is a rug photo\"], isJPEG: true };\r\n }\r\n else\r\n filesInNode[index] = { ...item };\r\n }\r\n });\r\n return filesInNode;\r\n }\r\n\r\n //functions for deepmerger designs folder\r\n\r\n const mapNodeFullPath = (arr) => {\r\n return arr.map((el) => el.fullpath);\r\n }\r\n\r\n const mergeNodes = async (a, b) => {\r\n if ((!a || a.length === 0) && (!b || b.length === 0)) return []\r\n if (!a || !a.length) return [...b]\r\n if (!b || !b.length) return [...a]\r\n\r\n let result = [];\r\n let aMapped = mapNodeFullPath(a);\r\n let bMapped = mapNodeFullPath(b);\r\n\r\n\r\n for (let index = 0; index < aMapped.length; index++) {\r\n var bIndex = bMapped.indexOf(aMapped[index]);\r\n if (bIndex !== -1) {\r\n let merged = await deepmerge.all([a[index], b[bIndex]], options);\r\n result.push(merged);\r\n bMapped.splice(bIndex, 1);\r\n b.splice(bIndex, 1);\r\n }\r\n else {\r\n result.push(a[index])\r\n }\r\n }\r\n return result.concat(b);\r\n }\r\n\r\n const options = {\r\n customMerge: (key) => {\r\n if (key === \"childNodes\") {\r\n return mergeNodes\r\n }\r\n }\r\n }\r\n\r\n let treeArray = [];\r\n let flatfileListMerged = [];\r\n let openNodeAfterMerge = null;\r\n let defItemWithThumb;\r\n const keyEntries = Object.entries(AppProvider.keys);\r\n window.usedFileNames = [];\r\n\r\n for (let index = 0; index < keyEntries.length; index++) {\r\n let startupDefault = false;\r\n\r\n AppProvider.setActiveKey(keyEntries[index][1], [AppProvider.keyScopes.design]);\r\n\r\n const internalCustomFolderPath = `Internal/Uploads/${customUploadFolder}`;\r\n\r\n const initialList = await AppProvider.fetchList(\"design\", internalCustomFolderPath);\r\n const files = initialList.filter(item => item.Type === \"file\");\r\n const folders = initialList.filter(item => item.Type === \"folder\");\r\n\r\n let defaultItemPath;\r\n\r\n if (!initDesignPath) {\r\n let folder = internalCustomFolderPath;\r\n const folderarr = folder.split(\"/\").find(item => item === \"Designs\");\r\n if (!folderarr) folder = `Designs/${folder}`;\r\n if (folder[0] !== \"/\") folder = `/${folder}`;\r\n const found = files.find(\r\n item => getPathOffile(item.FullPath).toLowerCase() === folder.toLowerCase()\r\n );\r\n if (found) {\r\n defaultItemPath = found.FullPath;\r\n startupDefault = true;\r\n }\r\n } else {\r\n defaultItemPath = initDesignPath;\r\n }\r\n\r\n const params = {\r\n files,\r\n folders,\r\n defaultItemPath\r\n };\r\n\r\n const { tree, defaultItem, openNode, flatfileList } = arrangeIntoTree(params);\r\n if (tree.length === 0) {\r\n treeArray.push([]);\r\n }\r\n else {\r\n // if (!openNode) return;\r\n flatfileListMerged = [...flatfileListMerged, ...flatfileList];\r\n\r\n const items = await AppProvider.getDesignThumbnails({ designs: [...flatfileList] });\r\n let updatedTree = [...tree];\r\n let uploadedNodeTemp = null;\r\n\r\n updatedTree.forEach(function iter(node, index, object) {\r\n let { filesInNode } = node;\r\n\r\n if (node.fullpath === \"/Designs/Internal/Uploads\") {\r\n uploadedNodeTemp = node.childNodes.find(node => (node.fullpath === (\"/Designs/\" + internalCustomFolderPath)));\r\n if (uploadedNodeTemp?.filesInNode?.length) {\r\n uploadedNodeTemp.filesInNode = findinItems(items, uploadedNodeTemp.filesInNode);\r\n uploadedNodeTemp = { ...uploadedNodeTemp, label: \"Your Designs\", level: 0 };\r\n let fileNames = uploadedNodeTemp.filesInNode.map(item => item.label);\r\n window.usedFileNames = [...window.usedFileNames, ...fileNames];\r\n }\r\n object.splice(index, 1);\r\n return;\r\n }\r\n\r\n node.filesInNode = findinItems(items, filesInNode);\r\n\r\n if (!defItemWithThumb || startupDefault) {\r\n defItemWithThumb = items.find(item => item.fullpath === defaultItem.fullpath);\r\n openNodeAfterMerge = openNode;\r\n }\r\n\r\n Array.isArray(node.childNodes) && node.childNodes.forEach(iter);\r\n });\r\n\r\n if (uploadedNodeTemp) {\r\n updatedTree = [uploadedNodeTemp, ...updatedTree]\r\n }\r\n treeArray.push(updatedTree);\r\n }\r\n }\r\n\r\n let mergedTree = await mergeNodes(treeArray[0], treeArray[1]);\r\n\r\n //pushing Your Designs folder to the front of array\r\n let yourDesignsNode = null;\r\n mergedTree.forEach(function iter(node, index, object) {\r\n if (node.label === \"Your Designs\") {\r\n yourDesignsNode = object[index];\r\n object.splice(index, 1);\r\n return;\r\n }\r\n });\r\n if (yourDesignsNode) {\r\n setcustomTree({ tree: [yourDesignsNode], flatfileList: flatfileListMerged });\r\n }\r\n\r\n AppProvider.setActiveKey(currentKey.key, [...currentKey.scope]);\r\n // if (defItemWithThumb)\r\n // onThumbnailClick(defItemWithThumb);\r\n })()\r\n }, [customUploadFolder])\r\n\r\n useEffect(() => {\r\n if (customTree?.tree?.length) {\r\n dispatch({\r\n type: actions.SET_TREE,\r\n payload: {\r\n tree: [...customTree.tree, ...state.tree],\r\n flatfileList: [...customTree.flatfileList, ...(state.flatfileList || [])]\r\n }\r\n });\r\n }\r\n }, [customTree])\r\n\r\n useMount(async () => {\r\n if (state.tree) return;\r\n if (!window.InterfaceElements.StartupFolder) window.InterfaceElements.StartupFolder = \"\"\r\n const findinItems = (items, filesInNode) => {\r\n items.forEach(item => {\r\n const index = filesInNode.findIndex(\r\n fileInNode => item.fullpath === fileInNode.fullpath\r\n );\r\n if (index !== -1) {\r\n if (jpegExtensions.includes(getExtension(item.fullpath))) {\r\n filesInNode[index] = { ...item, infoThumbs: [], infoTitles: [\"This design is a rug photo\"], isJPEG: true };\r\n }\r\n else\r\n filesInNode[index] = item;\r\n }\r\n });\r\n return filesInNode;\r\n }\r\n\r\n let treeArray = [];\r\n let flatfileListMerged = [];\r\n let openNodeAfterMerge = null;\r\n let defItemWithThumb;\r\n\r\n const keyEntries = Object.entries(AppProvider.keys);\r\n window.usedFileNames = [];\r\n\r\n for (let index = 0; index < keyEntries.length; index++) {\r\n let startupDefault = false;\r\n\r\n AppProvider.setActiveKey(keyEntries[index][1], [AppProvider.keyScopes.design]);\r\n\r\n const initialList = await AppProvider.fetchList(\"design\");\r\n const files = initialList.filter(item => item.Type === \"file\");\r\n const folders = initialList.filter(item => item.Type === \"folder\");\r\n\r\n let defaultItemPath;\r\n\r\n if (!initDesignPath) {\r\n let folder = window.InterfaceElements.StartupFolder;\r\n const folderarr = folder.split(\"/\").find(item => item === \"Designs\");\r\n if (!folderarr) folder = `Designs/${folder}`;\r\n if (folder[0] !== \"/\") folder = `/${folder}`;\r\n const found = files.find(\r\n item => getPathOffile(item.FullPath).toLowerCase() === folder.toLowerCase()\r\n );\r\n if (found) {\r\n defaultItemPath = found.FullPath;\r\n startupDefault = true;\r\n }\r\n } else {\r\n defaultItemPath = initDesignPath;\r\n }\r\n\r\n const params = {\r\n files,\r\n folders,\r\n defaultItemPath\r\n };\r\n\r\n const { tree, defaultItem, openNode, flatfileList } = arrangeIntoTree(params);\r\n if (!openNode) return;\r\n flatfileListMerged = [...flatfileListMerged, ...flatfileList];\r\n\r\n const items = await AppProvider.getDesignThumbnails({ designs: [...flatfileList] });\r\n let updatedTree = [...tree];\r\n let uploadedNodeTemp = null;\r\n\r\n updatedTree.forEach(function iter(node, index, object) {\r\n let { filesInNode } = node;\r\n\r\n if (node.fullpath === \"/Designs/Internal/Uploads\") {\r\n uploadedNodeTemp = node.childNodes.find(node => (node.fullpath === \"/\" + window.InterfaceElements.StartupFolder));\r\n if (uploadedNodeTemp?.filesInNode?.length) {\r\n uploadedNodeTemp.filesInNode = findinItems(items, uploadedNodeTemp.filesInNode);\r\n uploadedNodeTemp = { ...uploadedNodeTemp, label: \"Your Designs\", level: 0 };\r\n let fileNames = uploadedNodeTemp.filesInNode.map(item => item.label);\r\n window.usedFileNames = [...window.usedFileNames, ...fileNames];\r\n }\r\n object.splice(index, 1);\r\n return;\r\n }\r\n\r\n node.filesInNode = findinItems(items, filesInNode);\r\n\r\n if (!defItemWithThumb || startupDefault) {\r\n defItemWithThumb = items.find(item => item.fullpath === defaultItem.fullpath);\r\n openNodeAfterMerge = openNode;\r\n }\r\n\r\n Array.isArray(node.childNodes) && node.childNodes.forEach(iter);\r\n });\r\n\r\n if (uploadedNodeTemp) {\r\n updatedTree = [uploadedNodeTemp, ...updatedTree]\r\n }\r\n treeArray.push(updatedTree);\r\n }\r\n\r\n //deepmerger designs folder\r\n\r\n const mapNodeFullPath = (arr) => {\r\n return arr.map((el) => el.fullpath);\r\n }\r\n\r\n const mergeNodes = async (a, b) => {\r\n if ((!a || a.length === 0) && (!b || b.length === 0)) return []\r\n if (!a || !a.length) return [...b]\r\n if (!b || !b.length) return [...a]\r\n\r\n let result = [];\r\n let aMapped = mapNodeFullPath(a);\r\n let bMapped = mapNodeFullPath(b);\r\n\r\n\r\n for (let index = 0; index < aMapped.length; index++) {\r\n var bIndex = bMapped.indexOf(aMapped[index]);\r\n if (bIndex !== -1) {\r\n let merged = await deepmerge.all([a[index], b[bIndex]], options);\r\n result.push(merged);\r\n bMapped.splice(bIndex, 1);\r\n b.splice(bIndex, 1);\r\n }\r\n else {\r\n result.push(a[index])\r\n }\r\n }\r\n return result.concat(b);\r\n }\r\n\r\n const options = {\r\n customMerge: (key) => {\r\n if (key === \"childNodes\") {\r\n return mergeNodes\r\n }\r\n }\r\n }\r\n\r\n let mergedTree = await mergeNodes(treeArray[0], treeArray[1]);\r\n\r\n //pushing Your Designs folder to the front of array\r\n let yourDesignsNode = null;\r\n mergedTree.forEach(function iter(node, index, object) {\r\n if (node.label === \"Your Designs\") {\r\n yourDesignsNode = object[index];\r\n object.splice(index, 1);\r\n return;\r\n }\r\n });\r\n if (yourDesignsNode) mergedTree = [yourDesignsNode, ...mergedTree];\r\n //\r\n // if (defItemWithThumb?.fullpath) {\r\n // if (jpegExtensions.includes(getExtension(defItemWithThumb.fullpath))) {\r\n // AppProvider.setActiveKey(AppProvider.keys.jpeg, [AppProvider.keyScopes.design]);\r\n // } else {\r\n // AppProvider.setActiveKey(AppProvider.keys.ctf);\r\n // }\r\n // }\r\n dispatch({\r\n type: actions.SET_TREE,\r\n payload: { tree: mergedTree, flatfileList: flatfileListMerged, openNode: openNodeAfterMerge }\r\n });\r\n\r\n if (defItemWithThumb?.fullpath) {\r\n onThumbnailClick(defItemWithThumb);\r\n }\r\n\r\n });\r\n\r\n const [debouncedThumbnailClick] = useDebouncedCallback((node, e) => {\r\n if (!!handleThumbnailClick) handleThumbnailClick(node, e);\r\n }, 800);\r\n const onThumbnailClick = (node, e, prev = null, next = null) => {\r\n if (!node.Props) return;\r\n if (state.activeNode)\r\n if (node.id === state.activeNode.id) {\r\n handleClose && handleClose();\r\n return;\r\n }\r\n dispatch({\r\n type: actions.SET_ACTIVE_NODE,\r\n payload: node\r\n });\r\n debouncedThumbnailClick(node, e);\r\n handleClose && handleClose();\r\n };\r\n\r\n useEffect(() => {\r\n let prev = null;\r\n let next = null;\r\n let current = null;\r\n\r\n if (!state?.activeNode?.fullpath) return;\r\n\r\n if (jpegExtensions.includes(getExtension(state.activeNode.fullpath))) {\r\n AppProvider.setActiveKey(AppProvider.keys.jpeg, [AppProvider.keyScopes.design]);\r\n } else {\r\n AppProvider.setActiveKey(AppProvider.keys.ctf, [AppProvider.keyScopes.design]);\r\n }\r\n\r\n const findActive = async nodes => {\r\n if (!nodes || !nodes.length) return;\r\n const filteredNodes = stateTree.filter(\r\n node => node.childNodes.length || node.filesInNode.length\r\n );\r\n for (let i = 0; i < filteredNodes.length && !current; i++) {\r\n if (filteredNodes[i].filesInNode?.length) {\r\n for (let j = 0; j < filteredNodes[i].filesInNode.length && !current; j++) {\r\n prev = filteredNodes[i].filesInNode[j - 1];\r\n next = filteredNodes[i].filesInNode[j + 1];\r\n if (filteredNodes[i].filesInNode[j].id === state.activeNode.id) {\r\n current = await filteredNodes[i].filesInNode[j];\r\n if (restrictJPEG) {\r\n const iter = (nodeIndex, fileIndex, increment) => {\r\n if (increment > 0) {\r\n if (fileIndex >= filteredNodes[nodeIndex].filesInNode.length) {\r\n nodeIndex += 1;\r\n fileIndex = 0;\r\n }\r\n }\r\n else if (increment < 0) {\r\n if (fileIndex < 0) {\r\n nodeIndex -= 1;\r\n fileIndex = filteredNodes[nodeIndex] ? filteredNodes[nodeIndex].filesInNode.length - 1 : null;\r\n }\r\n }\r\n\r\n if (fileIndex === null)\r\n return false\r\n\r\n let des = filteredNodes[nodeIndex]?.filesInNode[fileIndex];\r\n if (des?.isJPEG) {\r\n return iter(nodeIndex, fileIndex + increment, increment);\r\n }\r\n else {\r\n return des;\r\n }\r\n }\r\n if (next?.isJPEG) {\r\n next = iter(i, j + 2, 1)\r\n }\r\n if (prev?.isJPEG) {\r\n prev = iter(i, j - 2, -1)\r\n }\r\n }\r\n if (setNextDesigns) {\r\n setNextDesigns({ next: next, prev: prev });\r\n }\r\n }\r\n }\r\n }\r\n if (!current) {\r\n findActive(filteredNodes.childNodes);\r\n }\r\n }\r\n };\r\n findActive(stateTree);\r\n }, [state.activeNode.id]);\r\n\r\n const renderNodes = (treeNodes, restrictJPEG, restrictDesigns) => {\r\n if (!treeNodes || !treeNodes.length) {\r\n return null;\r\n }\r\n const filteredNodes = treeNodes.filter(\r\n node => (node.childNodes.length || node.filesInNode.length)\r\n );\r\n const nodeItems = filteredNodes.map((node, index) => {\r\n return (\r\n {\r\n onThumbnailClick(node, e, prev, next);\r\n }}\r\n lastNode={index === filteredNodes.length - 1}\r\n >\r\n );\r\n });\r\n return <>{nodeItems};\r\n };\r\n\r\n const DesignCategory = props => {\r\n const { node, restrictJPEG, restrictDesigns, thumbList, ...otherProps } = props;\r\n const [thumblistArr, setthumblistArr] = useState([]);\r\n\r\n useEffect(() => {\r\n if (!restrictDesigns || !restrictJPEG) {\r\n setthumblistArr([...thumbList]);\r\n return;\r\n }\r\n const checkRestriction =\r\n (item) => {\r\n const isirregular = item.Props.IsIrregular;\r\n const isrunner = isRunner({ width: item.Props.PhysicalWidth, height: item.Props.PhysicalHeight });\r\n if (isirregular)\r\n return `${unsupportedDesign.IRREGULAR} designs`\r\n\r\n if (isrunner)\r\n return `${unsupportedDesign.RUNNER} designs`\r\n if (restrictJPEG && item.isJPEG)\r\n return 'Rug photos'\r\n return false\r\n }\r\n const thumbListTemp = thumbList.map(x => {\r\n const restriction = checkRestriction(x)\r\n if (restriction) {\r\n return {\r\n ...x,\r\n className: \"disabled\",\r\n tooltip: `${restriction} are not supported in the current shot`\r\n };\r\n }\r\n else\r\n return x\r\n });\r\n setthumblistArr([...thumbListTemp]);\r\n\r\n }, [thumbList])\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n {node.label}\r\n \r\n
\r\n
\r\n
\r\n {\r\n\r\n seteditDesign(e)\r\n handleClose && handleClose();\r\n }}\r\n >\r\n
\r\n\r\n {!props.lastNode && node.childNodes && node.childNodes.length <= 0 && (\r\n
\r\n )}\r\n
\r\n {renderNodes(node.childNodes, restrictJPEG, restrictDesigns)}\r\n \r\n );\r\n };\r\n\r\n return (\r\n <>\r\n {stateTree && (\r\n {\r\n handleClose && handleClose();\r\n }}\r\n className={\"illustration-dialog design-view-dialog\"}\r\n overlayClassName={hidden ? \"hidden\" : \"\"}\r\n size=\"lg\"\r\n >\r\n
\r\n
\r\n

Please choose your design

\r\n
\r\n {\r\n handleClose && handleClose();\r\n }}\r\n />\r\n
\r\n
\r\n {renderNodes(stateTree, restrictJPEG, restrictDesigns)}\r\n
\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default React.memo(DesignList);\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#filter0_d)\",\n id: \"top-group-svg\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.984 29.76H10V21.92C10 15.2926 15.3726 9.92004 22 9.92004H52.16C52.16 15.3987 47.7187 19.84 42.24 19.84H21.904C20.8083 19.84 19.92 20.7283 19.92 21.824C19.92 26.207 16.3669 29.76 11.984 29.76Z\",\n fill: \"#FFB627\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#filter1_d)\",\n id: \"bottom-group-svg\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M50.0961 32.24H52.0801V40.08C52.0801 46.7074 46.7075 52.08 40.0801 52.08H9.92008C9.92008 46.6013 14.3614 42.16 19.8401 42.16H40.1761C41.2718 42.16 42.1601 41.2717 42.1601 40.176C42.1601 35.793 45.7131 32.24 50.0961 32.24Z\",\n fill: \"url(#paint0_linear)\"\n})));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n id: \"filter0_d\",\n x: 6,\n y: 5.92004,\n width: 58.16,\n height: 35.84,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n}), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n}), /*#__PURE__*/React.createElement(\"feOffset\", {\n dx: 4,\n dy: 4\n}), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 4\n}), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.04 0\"\n}), /*#__PURE__*/React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow\"\n}), /*#__PURE__*/React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow\",\n result: \"shape\"\n})), /*#__PURE__*/React.createElement(\"filter\", {\n id: \"filter1_d\",\n x: 5.92017,\n y: 28.24,\n width: 58.16,\n height: 35.84,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n}), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n}), /*#__PURE__*/React.createElement(\"feOffset\", {\n dx: 4,\n dy: 4\n}), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 4\n}), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.04 0\"\n}), /*#__PURE__*/React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow\"\n}), /*#__PURE__*/React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow\",\n result: \"shape\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear\",\n x1: 9.92008,\n y1: 52.08,\n x2: 17.9409,\n y2: 68.6276,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#FFB627\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.630208,\n stopColor: \"#FFB627\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#E2EDFF\"\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 62,\n height: 62,\n fill: \"white\"\n})));\n\nvar SvgLogoSmall = function SvgLogoSmall(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 62,\n height: 62,\n viewBox: \"0 0 62 62\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgLogoSmall, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/logo-small.82295d94.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Suspense, useEffect, useState } from \"react\";\r\nimport { mainUiActions, useUiDispatch, useUiState } from \"../../../reducers/mainui.reducer\";\r\nimport classNames from \"classnames\";\r\nimport GoogleLogin, { useGoogleLogout } from \"react-google-login\";\r\nimport FacebookLogin from \"react-facebook-login\";\r\nimport { Spinner } from \"@blueprintjs/core\";\r\nimport AtButton from \"../../atoms/AtButton\";\r\nimport { ReactComponent as LogoSmallSVG } from \"./logo-small.svg\";\r\nimport { sendSignIn } from \"../../../api/appProvider\";\r\nimport { ismobileAndTabletCheck } from \"../../../utils/utils\";\r\nimport AlertWarning from \"../../organisms/AlertWarning\";\r\nimport GoogleLogin1 from \"./../LoginApi/GoogleLogin\";\r\nimport AtDialog from \"../../molecules/AtDialog\";\r\nimport Carousel from \"./Carousel\";\r\nimport AtIcon from \"../../atoms/AtIcon\";\r\nimport { usePrevious, useWindowSize } from \"../../../hooks\";\r\nimport axios from \"axios\";\r\n// import SketchSpinner from \"../../atoms/AtSpinner/SketchSpinner\";\r\n\r\nconst staticAssetsPath = \"https://cdn.virtualrugstudio.com/OnlineVPS/\";\r\n\r\nconst bgImage = \"previews/background-landing-light.jpg\";\r\nconst logoImage = \"InterfaceElements/logo-new.png\";\r\nwindow.logourl = `${staticAssetsPath}${logoImage}`;\r\n\r\nwindow.globalCarpetScale = ismobileAndTabletCheck() ? 2 : 4;\r\n\r\nconst sampleBaseUrl = \"https://cdn.virtualrugstudio.com/OnlineVPS/Previews/samples/\";\r\n\r\nconst samples = [\r\n sampleBaseUrl + \"1.jpg\",\r\n sampleBaseUrl + \"2.jpg\",\r\n sampleBaseUrl + \"3.jpg\",\r\n sampleBaseUrl + \"4.jpg\",\r\n sampleBaseUrl + \"5.jpg\",\r\n sampleBaseUrl + \"6.jpg\",\r\n sampleBaseUrl + \"7.jpg\",\r\n sampleBaseUrl + \"8.jpg\",\r\n sampleBaseUrl + \"9.jpg\",\r\n sampleBaseUrl + \"10.jpg\",\r\n sampleBaseUrl + \"11.jpg\",\r\n sampleBaseUrl + \"12.jpg\",\r\n sampleBaseUrl + \"13.jpg\",\r\n sampleBaseUrl + \"14.jpg\",\r\n sampleBaseUrl + \"15.jpg\",\r\n sampleBaseUrl + \"16.jpg\",\r\n sampleBaseUrl + \"17.jpg\",\r\n sampleBaseUrl + \"18.jpg\",\r\n sampleBaseUrl + \"19.jpg\",\r\n sampleBaseUrl + \"20.jpg\",\r\n sampleBaseUrl + \"21.jpg\",\r\n sampleBaseUrl + \"22.jpg\",\r\n sampleBaseUrl + \"23.jpg\",\r\n sampleBaseUrl + \"24.jpg\",\r\n sampleBaseUrl + \"25.jpg\",\r\n sampleBaseUrl + \"26.jpg\",\r\n sampleBaseUrl + \"27.jpg\",\r\n sampleBaseUrl + \"28.jpg\",\r\n sampleBaseUrl + \"29.jpg\",\r\n sampleBaseUrl + \"30.jpg\",\r\n sampleBaseUrl + \"31.jpg\",\r\n sampleBaseUrl + \"32.jpg\",\r\n sampleBaseUrl + \"33.jpg\",\r\n sampleBaseUrl + \"34.jpg\",\r\n sampleBaseUrl + \"35.jpg\",\r\n sampleBaseUrl + \"36.jpg\",\r\n sampleBaseUrl + \"37.jpg\"\r\n];\r\n\r\nconst VpsLanding = props => {\r\n const { onLoaded } = props;\r\n const uiState = useUiState();\r\n const dispatch = useUiDispatch();\r\n const [begin, setbegin] = useState(false);\r\n const [loadingPercent, setloadingPercent] = useState(0);\r\n const [signedIn, setsignedIn] = useState(false);\r\n const [showMobileWarning, setshowMobileWarning] = useState(false);\r\n const [activeSampleNode, setactiveSampleNode] = useState(2);\r\n const [prevactiveSampleNode, setprevactiveSampleNode] = useState(-1);\r\n const [sampleIndex, setsampleIndex] = useState(-1);\r\n const [showSampleLoadSpinner, setshowSampleLoadSpinner] = useState(false);\r\n const [loadedSamples, setloadedSamples] = useState(new Array(samples.length).fill(false));\r\n\r\n const { signOut, loaded } = useGoogleLogout({\r\n clientId: \"347190499501-81i6k56m7ecihdlhj44j12i7u2m9j2gn.apps.googleusercontent.com\",\r\n // clientId: \"615600073809-05cev43iap6cb2u2e7hcbhint20rq9po.apps.googleusercontent.com\",\r\n cookiePolicy: \"single_host_origin\"\r\n });\r\n\r\n const beginHandler = () => {\r\n if (signedIn) {\r\n const enterReady = window.enter && window.enter();\r\n if (enterReady) {\r\n setbegin(true);\r\n } else {\r\n setTimeout(() => {\r\n beginHandler();\r\n }, 100);\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const script = document.createElement(\"script\");\r\n const script1 = document.createElement(\"script\");\r\n const script2 = document.createElement(\"script\");\r\n\r\n script.src =\r\n \"https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js\";\r\n script2.src = \"https://accounts.google.com/gsi/client\";\r\n script.async = true;\r\n script2.async = true;\r\n\r\n document.body.appendChild(script);\r\n document.body.appendChild(script2);\r\n\r\n setTimeout(() => {\r\n script1.innerHTML = `AppleID.auth.init({\r\n clientId: \"com.explorug.login\",\r\n scope: \"name email\",\r\n usePopup: true,\r\n redirectURI: \"https://virtualrugstudio.com/\"\r\n });\r\n \r\n function decodeJwtResponse(data) {\r\n var tokens = data.split(\".\");\r\n return JSON.parse(atob(tokens[1]));\r\n }\r\n `;\r\n document.body.appendChild(script1);\r\n }, [2000]);\r\n }, []);\r\n useEffect(() => {\r\n if (!!begin) {\r\n return;\r\n }\r\n let interval = loadingPercent < uiState.loadingOverlayPercent ? 20 : 300;\r\n setTimeout(() => {\r\n if (loadingPercent < uiState.loadingOverlayPercent) {\r\n setloadingPercent(loadingPercent => loadingPercent + 2);\r\n } else if (loadingPercent < uiState.loadingOverlayPercent + 10) {\r\n setloadingPercent(loadingPercent => loadingPercent + 0.5);\r\n }\r\n }, interval);\r\n }, [loadingPercent]);\r\n\r\n useEffect(() => {\r\n if (signedIn) {\r\n onLoaded();\r\n beginHandler();\r\n }\r\n }, [signedIn]);\r\n\r\n const responseGoogle = response => {\r\n const profileObj = response.profileObj;\r\n sendSignIn({ type: \"g\", email: profileObj.email, name: profileObj.name });\r\n setsignedIn(true);\r\n signOut();\r\n\r\n // if (!response.tokenId) {\r\n // console.error(\"Unable to get tokenId from Google\", response)\r\n // return;\r\n // }\r\n\r\n // const tokenBlob = new Blob([JSON.stringify({ tokenId: response.tokenId }, null, 2)], { type: 'application/json' });\r\n // const options = {\r\n // method: 'POST',\r\n // body: tokenBlob,\r\n // mode: 'cors',\r\n // cache: 'default'\r\n // };\r\n // fetch(googleConfig.GOOGLE_AUTH_CALLBACK_URL, options)\r\n // .then(r => {\r\n // r.json().then(user => {\r\n // const token = user.token;\r\n // console.log(user);\r\n // // sendSignIn({ type: \"g\", email: profileObj.email, name: profileObj.name });\r\n // setsignedIn(true);\r\n // signOut();\r\n // });\r\n // })\r\n };\r\n\r\n const responseGoogleFail = response => {\r\n console.log(response);\r\n signOut();\r\n };\r\n\r\n const postUsageLog = (name, email, type) => {\r\n const formdata = new FormData();\r\n formdata.append(\"product\", \"vrs\");\r\n formdata.append(\"name\", name);\r\n formdata.append(\"email\", email);\r\n formdata.append(\"type\", type);\r\n axios.post(\"https://explorug.com/archanastools/Utilities/WebsiteLog.aspx\", formdata);\r\n };\r\n\r\n const responseFacebook = response => {\r\n sendSignIn({ type: \"f\", email: response.email, name: response.name });\r\n setsignedIn(true);\r\n postUsageLog(response.name, response.email, \"Facebook\");\r\n };\r\n const responseFacebookFail = response => {\r\n console.log(response);\r\n };\r\n useEffect(() => {\r\n window.handleSuccessGoogle = function(response) {\r\n const responsePayload = decodeJwtResponse(response.credential);\r\n sendSignIn({ type: \"g\", email: responsePayload.email, name: responsePayload.name });\r\n setsignedIn(true);\r\n postUsageLog(responsePayload.name, responsePayload.email, \"Gmail\");\r\n signOut();\r\n };\r\n\r\n function decodeJwtResponse(data) {\r\n var tokens = data.split(\".\");\r\n return JSON.parse(atob(tokens[1]));\r\n }\r\n\r\n document.addEventListener(\r\n \"AppleIDSignInOnSuccess\",\r\n event => {\r\n // Handle successful response.\r\n console.log(\"apple login success\");\r\n console.log(event.detail.authorization.id_token);\r\n const responsePayload = window.decodeJwtResponse(event.detail.authorization.id_token);\r\n console.log(responsePayload);\r\n var name = \"AppleUser\";\r\n if (event.detail.user) {\r\n name = event.detail.user.name.firstName + \" \" + event.detail.user.name.lastName;\r\n }\r\n var email = responsePayload.email;\r\n sendSignIn({ type: \"f\", email: email, name: name });\r\n setsignedIn(true);\r\n postUsageLog(name, email, \"Apple\");\r\n },\r\n { once: true }\r\n );\r\n\r\n // Listen for authorization failures.\r\n document.addEventListener(\r\n \"AppleIDSignInOnFailure\",\r\n event => {\r\n // Handle error.\r\n console.log(\"apple login failed\");\r\n console.log(event.detail.error);\r\n },\r\n { once: true }\r\n );\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (ismobileAndTabletCheck()) {\r\n setshowMobileWarning(true);\r\n }\r\n // onLoaded();\r\n\r\n const images = [bgImage];\r\n let loaded = 0;\r\n images.forEach((image, index) => {\r\n let img = new Image();\r\n img.onload = () => {\r\n loaded++;\r\n if (loaded === images.length) {\r\n // onLoaded();\r\n }\r\n };\r\n img.src = `${staticAssetsPath}${image}`;\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n console.log(sampleIndex);\r\n let la = true;\r\n if (loadedSamples[sampleIndex]) {\r\n setshowSampleLoadSpinner(false);\r\n return;\r\n }\r\n setTimeout(() => {\r\n if (la) {\r\n setshowSampleLoadSpinner(true);\r\n }\r\n }, 1000);\r\n\r\n return () => {\r\n la = false;\r\n };\r\n }, [sampleIndex, loadedSamples]);\r\n\r\n const nextSample = () => {\r\n let newSampleIndex = sampleIndex + 1;\r\n if (newSampleIndex >= samples.length) newSampleIndex = 0;\r\n setsampleIndex(newSampleIndex);\r\n if (activeSampleNode === 3) {\r\n setactiveSampleNode(1);\r\n } else {\r\n setactiveSampleNode(activeSampleNode + 1);\r\n }\r\n setprevactiveSampleNode(activeSampleNode);\r\n };\r\n\r\n const prevSample = () => {\r\n let newSampleIndex = sampleIndex - 1;\r\n if (newSampleIndex < 0) newSampleIndex = samples.length - 1;\r\n setsampleIndex(newSampleIndex);\r\n if (activeSampleNode === 1) {\r\n setactiveSampleNode(3);\r\n } else {\r\n setactiveSampleNode(activeSampleNode - 1);\r\n }\r\n setprevactiveSampleNode(activeSampleNode);\r\n };\r\n\r\n const onSampleImageLoad = ind => {\r\n let temp = [...loadedSamples];\r\n temp[ind] = true;\r\n setloadedSamples([...temp]);\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {/*
*/}\r\n
\r\n {/* */}\r\n \"logo\"\r\n
\r\n
\r\n Capture studio quality photos of your rugs
\r\n without having to produce them\r\n
\r\n \r\n \r\n
\r\n
\r\n
Sign in to try our early access demo
\r\n {/* */}\r\n
\r\n {/* */}\r\n {/* */}\r\n
\r\n
\r\n \r\n
\r\n {\r\n setsampleIndex(0);\r\n }}\r\n />\r\n \r\n {process.env.NODE_ENV === \"development\" && (\r\n {\r\n setsignedIn(true);\r\n }}\r\n >\r\n pass\r\n \r\n )}\r\n
\r\n\r\n {/* \r\n */}\r\n {/* */}\r\n
\r\n \r\n \r\n {\r\n setshowMobileWarning(false);\r\n }}\r\n />\r\n -1}\r\n onClose={() => {\r\n setsampleIndex(-1);\r\n }}\r\n className=\" samples-dialog\"\r\n overlayClassName={sampleIndex > -1 ? \"samples-dialog-show\" : \"samples-dialog-hide\"}\r\n size=\"lg\"\r\n >\r\n {\r\n
\r\n \r\n
\r\n }\r\n setsampleIndex(-1)}\r\n />\r\n
\r\n \r\n {[1, 2, 3].map(nodeIndex => {\r\n let index =\r\n sampleIndex +\r\n (nodeIndex - activeSampleNode > 1\r\n ? (nodeIndex - activeSampleNode) / -2\r\n : nodeIndex - activeSampleNode);\r\n if (index === -1) index = samples.length - 1;\r\n if (index === samples.length) index = 0;\r\n return (\r\n onSampleImageLoad(index)}\r\n />\r\n );\r\n })}\r\n \r\n
\r\n \r\n \r\n );\r\n\r\n // return ()\r\n};\r\n\r\nexport default VpsLanding;\r\n","import React, { useEffect, useState } from 'react'\r\nimport axios from 'axios'\r\nimport AtIcon from \"./../atoms/AtIcon\"\r\nimport './_mmc.scss';\r\nimport AtButton from '../atoms/AtButton';\r\nimport { designDetailActions, useDesignDetailState, useDispatchDesignDetail } from '../../reducers/designdetails.reducer';\r\nimport AtDialog from '../molecules/AtDialog';\r\nimport { H2 } from '@blueprintjs/core';\r\nfunction Intensity(rgb) {\r\n if (rgb[0] === \"#\") rgb = rgb.slice(1);\r\n\r\n rgb = parseInt(rgb, 16);\r\n var r = (rgb >> 16) & 0xff;\r\n var g = (rgb >> 8) & 0xff;\r\n var b = rgb & 0xff;\r\n return (r + g + b) / 3;\r\n}\r\n\r\n\r\n\r\nconst MMC = (props) => {\r\n const { isOpen, onClose, colorData } = props;\r\n\r\n const [gridDisplayLevel, setgridDisplayLevel] = useState(-1);\r\n const [selectedGridColor, setselectedGridColor] = useState(null);\r\n const [colorGridInfo, setcolorGridInfo] = useState(null);\r\n const [counter, setcounter] = useState(-1);\r\n const [designColors, setdesignColors] = useState(null);\r\n const [selectedDesignColor, setselectedDesignColor] = useState(null);\r\n\r\n const designDetailState = useDesignDetailState();\r\n const dispatchDesignDetails = useDispatchDesignDetail();\r\n const { designDetails } = designDetailState;\r\n\r\n\r\n useEffect(() => {\r\n if (gridDisplayLevel === 0) {\r\n getGrid();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [selectedGridColor])\r\n\r\n useEffect(() => {\r\n console.log(designDetails)\r\n if (designDetails && designDetails.DesignColors.length > 0) {\r\n setdesignColors([...designDetails.DesignColors])\r\n }\r\n }, [designDetails])\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setgridDisplayLevel(0)\r\n }\r\n else {\r\n setgridDisplayLevel(-1)\r\n }\r\n }, [isOpen])\r\n\r\n\r\n\r\n function showColorCirclesWrapper(colorName) {\r\n setselectedGridColor(colorName);\r\n var color = colorName.replace('#', '');\r\n const formdata = new FormData();\r\n formdata.append('id', 'singleColorTextured');\r\n formdata.append('color', color);\r\n axios.post(\"https://explorug.com/matchmycolors/utility.aspx\", formdata, { responseType: 'blob' }).then((data) => {\r\n var urlCreator = window.URL || window.webkitURL;\r\n var imageUrl = urlCreator.createObjectURL(data.data);\r\n document.getElementById('singleTextureCircleImg').src = imageUrl;\r\n setgridDisplayLevel(2);\r\n })\r\n return;\r\n }\r\n\r\n const getGrid = (counterarg = 1) => {\r\n if (!selectedGridColor) return;\r\n const color = selectedGridColor.replace('#', '');\r\n const formdata = new FormData();\r\n formdata.append('id', 'grid');\r\n formdata.append('color', color);\r\n formdata.append('counter', counterarg);\r\n if (gridDisplayLevel === 1) { document.getElementById('colorGrid').innerHTML = ''; }\r\n axios.post(\"https://explorug.com/matchmycolors/utility.aspx\", formdata, {}).then((data) => {\r\n setcolorGridInfo({ ...data.data });\r\n setgridDisplayLevel(1);\r\n setcounter(counterarg);\r\n })\r\n }\r\n\r\n const onBack = () => {\r\n setgridDisplayLevel(1);\r\n setselectedGridColor(null);\r\n }\r\n const handleClose = () => {\r\n setgridDisplayLevel(-1);\r\n setselectedGridColor(null);\r\n setcolorGridInfo(null);\r\n onClose && onClose();\r\n }\r\n const handleColorMatch = () => {\r\n setgridDisplayLevel(-1);\r\n setselectedGridColor(null);\r\n setcolorGridInfo(null);\r\n let newColor = { ...selectedDesignColor };\r\n newColor.Color = selectedGridColor;\r\n newColor.Texture = '-1';\r\n if (selectedDesignColor.YarnDetails.length <= 1) {\r\n dispatchDesignDetails({\r\n type: designDetailActions.CHANGE_COLOR,\r\n payload: newColor\r\n });\r\n } else {\r\n dispatchDesignDetails({\r\n type: designDetailActions.CHANGE_YARN_COLOR,\r\n payload: newColor\r\n });\r\n }\r\n onClose();\r\n }\r\n const handleColorClick = (e, colorIndex, designColor, yarnIndex = 0) => {\r\n setselectedDesignColor({ ...designColor });\r\n if (designColor.YarnDetails.length <= 1) {\r\n dispatchDesignDetails({\r\n type: designDetailActions.SELECT_DESIGN_COLOR,\r\n payload: colorIndex\r\n });\r\n } else {\r\n dispatchDesignDetails({\r\n type: designDetailActions.SELECT_YARN,\r\n payload: { colorIndex, yarnIndex }\r\n });\r\n }\r\n setgridDisplayLevel(0);\r\n setcolorGridInfo(null);\r\n setselectedGridColor(designColor.Color);\r\n };\r\n\r\n useEffect(() => {\r\n if (!colorData) return;\r\n const yarnIndex = 0;\r\n setselectedDesignColor({ ...colorData.color });\r\n if (colorData.color.YarnDetails.length <= 1) {\r\n dispatchDesignDetails({\r\n type: designDetailActions.SELECT_DESIGN_COLOR,\r\n payload: colorData.index\r\n });\r\n } else {\r\n dispatchDesignDetails({\r\n type: designDetailActions.SELECT_YARN,\r\n payload: { colorIndex: colorData.index, yarnIndex }\r\n });\r\n }\r\n setgridDisplayLevel(0);\r\n setcolorGridInfo(null);\r\n setselectedGridColor(colorData.color.Color);\r\n }, [colorData])\r\n return (\r\n <>\r\n 0}\r\n onClose={() => {\r\n handleClose();\r\n }}\r\n className=\" illustration-dialog mmc-dialog\"\r\n size=\"lg\"\r\n // portalContainerId=\"vps-main\"\r\n >\r\n
\r\n
\r\n {/* \"logo\" */}\r\n {(gridDisplayLevel === 0) &&

Please choose the color to match your sample

}\r\n {(gridDisplayLevel === 1) &&

Please select the color closest to your sample

}\r\n {(gridDisplayLevel === 2) &&

Please click on color to fine tune

}\r\n\r\n
\r\n \r\n
\r\n
\r\n {/* {scenesData &&\r\n scenesData.map((category, i) => {\r\n return ( */}\r\n
\r\n {/*
\r\n
\r\n Royal Mosa\r\n \r\n The floor tiles in this collection are created with the courtesy of{\" \"}\r\n \r\n Royal Mosa\r\n \r\n \r\n
\r\n
*/}\r\n\r\n
\r\n {designColors && designColors.map((colorobj, index) => {\r\n return (\r\n
handleColorClick(e, index, colorobj)}>
\r\n )\r\n })}\r\n
\r\n\r\n
\r\n {colorGridInfo && colorGridInfo.centers.map((eachCenter, i) => {\r\n return (\r\n
showColorCirclesWrapper(colorGridInfo.colorList[i])}>\r\n
\r\n )\r\n })}\r\n
\r\n\r\n
\r\n
\r\n {/* {counter !== 2 ?\r\n <> */}\r\n
getGrid(2)}>
\r\n
getGrid(2)}>\r\n \"texture\r\n
\r\n {/* \r\n :\r\n <>\r\n
\r\n
\r\n \"texture\r\n
\r\n \r\n } */}\r\n\r\n
\r\n\r\n {(gridDisplayLevel === 2) &&
\r\n
\r\n {/*
\r\n \r\n
*/}\r\n
\r\n\r\n
}\r\n\r\n {/* {i < scenesData.length - 1 && */}\r\n {/*
*/}\r\n\r\n {/* } */}\r\n
\r\n {/* );\r\n })} */}\r\n
\r\n \r\n \r\n )\r\n\r\n return (\r\n \r\n {(gridDisplayLevel === 0) &&\r\n
\r\n
Click on the color to match your sample
\r\n \r\n
\r\n {designColors && designColors.map((colorobj, index) => {\r\n return (\r\n
handleColorClick(e, index, colorobj)}>
\r\n )\r\n })}\r\n
\r\n\r\n
\r\n }\r\n
0) ? 'flex' : 'none' }}>\r\n
\r\n
Back
\r\n \r\n
\r\n
\r\n {colorGridInfo && colorGridInfo.centers.map((eachCenter, i) => {\r\n return (\r\n
showColorCirclesWrapper(colorGridInfo.colorList[i])}>\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \"texture\r\n
\r\n
\r\n {(gridDisplayLevel === 2) &&
\r\n {counter !== 2 &&
\r\n getGrid(2)}>\r\n
}\r\n
\r\n
}\r\n\r\n
\r\n
\r\n\r\n )\r\n}\r\n\r\nexport default MMC\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"ellipse\", {\n cx: 9.5,\n cy: 13.5,\n rx: 2.5,\n ry: 2.5,\n transform: \"rotate(-180 9.5 13.5)\",\n stroke: \"#8C9399\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.5 17.5001C12.5 19.5001 10.6674 20.6017 7.31035 19.8602C4.55186 19.2508 2.87833 16.3103 2.87833 11.9225C2.87833 6.43775 7.63794 3.0001 11.5 3.0001C15.7935 3.0001 21.5378 6.82996 20.5 11.5001C19.5 16.0001 15.2357 14.0287 13.5 17.5001Z\",\n stroke: \"#8C9399\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8 8.00022L8 8.00488\",\n stroke: \"#8C9399\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11 7.00022L11 7.00488\",\n stroke: \"#8C9399\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar _ref6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14 7.00022L14 7.00488\",\n stroke: \"#8C9399\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar _ref7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17 9.00022L17 9.00488\",\n stroke: \"#8C9399\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar SvgIconActive = function SvgIconActive(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconActive, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon-active.240bd2d3.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M5 12.6306C5.34112 16.3218 8.49533 19.1105 12.2005 18.9966C15.9057 18.8828 18.8828 15.9057 18.9966 12.2005C19.1105 8.49533 16.3218 5.34112 12.6306 5C14.2359 7.17184 14.0108 10.1913 12.1011 12.1011C10.1913 14.0108 7.17184 14.2359 5 12.6306Z\",\n stroke: \"#8C9399\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar SvgIconDaynight = function SvgIconDaynight(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconDaynight, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon-daynight.987c9f4c.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.33333 8H9C7.89543 8 7 8.89543 7 10V14C7 15.1046 7.89543 16 9 16H15C16.1046 16 17 15.1046 17 14V13.9111\",\n stroke: \"#8C9399\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.33333 11H6C4.89543 11 4 11.8954 4 13V17C4 18.1046 4.89543 19 6 19H12C13.1046 19 14 18.1046 14 17V16.9111\",\n stroke: \"#8C9399\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 13H18C19.1046 13 20 12.1052 20 11.0006V6.99974C20 5.89517 19.1046 5 18 5H12C10.8954 5 10 5.89543 10 7V11C10 12.1046 10.8954 13 12 13Z\",\n stroke: \"#8C9399\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar SvgIconMultishot = function SvgIconMultishot(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3, _ref4);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconMultishot, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon-multishot.e097b8ee.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M11.5925 5.09137L11.2694 7.98206L13.4034 9.78933L10.6276 10.4897L9.51692 13.2033L8.12443 10.7455L5.30251 10.6183L7.21786 8.39836L6.58397 5.60659L9.1622 6.6896L11.5925 5.09137Z\",\n stroke: \"#8C9399\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.5 11.5L18 18\",\n stroke: \"#8C9399\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar SvgIconMystic = function SvgIconMystic(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconMystic, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon-mystic.fa8789a9.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.84676 16.25C6.98483 16.25 7.09676 16.1381 7.09676 16V13.0809H10.1552V16C10.1552 16.1381 10.2671 16.25 10.4052 16.25H11.2519C11.39 16.25 11.5019 16.1381 11.5019 16V9C11.5019 8.86193 11.39 8.75 11.2519 8.75H10.4052C10.2671 8.75 10.1552 8.86193 10.1552 9V11.8388H7.09676V9C7.09676 8.86193 6.98483 8.75 6.84676 8.75H6C5.86193 8.75 5.75 8.86193 5.75 9V16C5.75 16.1381 5.86193 16.25 6 16.25H6.84676ZM13.1272 8.75C12.9892 8.75 12.8772 8.86193 12.8772 9V16C12.8772 16.1381 12.9892 16.25 13.1272 16.25H15.4861C15.9513 16.25 16.3808 16.1716 16.771 16.0104C17.1626 15.8487 17.4971 15.6086 17.7716 15.2914C18.0532 14.967 18.2634 14.5705 18.4063 14.1083L18.4066 14.1072C18.5498 13.6371 18.6191 13.1002 18.6191 12.5C18.6191 11.9002 18.5499 11.3664 18.4065 10.9024C18.264 10.4348 18.0542 10.0376 17.7718 9.7188C17.4977 9.39525 17.1632 9.15151 16.771 8.98956C16.3808 8.82841 15.9513 8.75 15.4861 8.75H13.1272ZM17.076 13.918L17.076 13.918L17.0748 13.9213C16.9909 14.1597 16.8734 14.3563 16.7247 14.5157C16.5755 14.6755 16.398 14.7985 16.1894 14.8854C15.9801 14.966 15.7465 15.0079 15.4861 15.0079H14.224V9.99212H15.4861C15.7456 9.99212 15.9781 10.037 16.1867 10.1235L16.1867 10.1236L16.1922 10.1257C16.3995 10.2059 16.576 10.3251 16.7247 10.4843C16.8724 10.6427 16.99 10.8416 17.0742 11.0869L17.0741 11.0869L17.0767 11.0939C17.1649 11.3278 17.2118 11.6045 17.2118 11.9284V13.0716C17.2118 13.3953 17.1649 13.6762 17.076 13.918Z\",\n fill: \"#8C9399\",\n stroke: \"#8C9399\",\n strokeWidth: 0.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar SvgIconHd = function SvgIconHd(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconHd, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon-hd.0e8262ba.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.19578 16C9.19578 16.1381 9.30771 16.25 9.44578 16.25H10.2638C10.4018 16.25 10.5138 16.1381 10.5138 16V14.8761H11.2965C11.4346 14.8761 11.5465 14.7641 11.5465 14.6261V13.9241C11.5465 13.786 11.4346 13.6741 11.2965 13.6741H10.5138V9C10.5138 8.86193 10.4018 8.75 10.2638 8.75H8.98566C8.89858 8.75 8.81778 8.79531 8.77236 8.8696L5.7867 13.7536C5.7627 13.7928 5.75 13.8379 5.75 13.884V14.6261C5.75 14.7641 5.86193 14.8761 6 14.8761H9.19578V16ZM14.4142 11.3461L13.8022 12.0724V9C13.8022 8.86193 13.6903 8.75 13.5522 8.75H12.6933C12.5552 8.75 12.4433 8.86193 12.4433 9V16C12.4433 16.1381 12.5552 16.25 12.6933 16.25H13.5522C13.6903 16.25 13.8022 16.1381 13.8022 16V13.7606L14.5366 12.9602L16.7308 16.1419C16.7775 16.2096 16.8544 16.25 16.9366 16.25H18C18.0935 16.25 18.1792 16.1978 18.2221 16.1147C18.265 16.0316 18.258 15.9315 18.2038 15.8552L15.4764 12.0158L18.003 9.16585C18.0683 9.09223 18.0843 8.98717 18.0439 8.89744C18.0036 8.80771 17.9143 8.75 17.816 8.75H16.7628C16.69 8.75 16.6208 8.78174 16.5733 8.83693L14.4158 11.3441L14.4158 11.3441L14.4142 11.3461ZM9.19578 10.463V13.6741H7.2514L9.19578 10.463Z\",\n fill: \"#8C9399\",\n stroke: \"#8C9399\",\n strokeWidth: 0.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar SvgIcon4K = function SvgIcon4K(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIcon4K, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon-4k.e6c8dc29.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"rect\", {\n y: 0.5,\n width: 21,\n height: 21,\n fill: \"url(#pattern0)\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"pattern\", {\n id: \"pattern0\",\n patternContentUnits: \"objectBoundingBox\",\n width: 1,\n height: 1\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#image0_1745_8838\",\n transform: \"scale(0.00195312)\"\n})), /*#__PURE__*/React.createElement(\"image\", {\n id: \"image0_1745_8838\",\n width: 512,\n height: 512,\n xlinkHref: \"data:image/png;base64,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\"\n}));\n\nvar SvgIconGalaincha = function SvgIconGalaincha(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 21,\n height: 22,\n viewBox: \"0 0 21 22\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconGalaincha, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon-galaincha.c1bd86ad.svg\";\nexport { ForwardRef as ReactComponent };","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useRef, useState, useEffect } from \"react\";\r\nimport { Overlay, Classes, Tooltip } from \"@blueprintjs/core\";\r\nimport { UiStateProvider } from \"../../../reducers/mainui.reducer\";\r\nimport AppProvider, { assetsDomain } from \"../../../api/appProvider\";\r\nimport { useDebouncedCallback } from \"use-debounce/lib\";\r\nimport { getExtension, readJSON } from \"../../../utils/utils\";\r\nimport Thumbnail from \"../../molecules/Thumbnail\";\r\nimport VpsStage from \"./../../organisms/VpsStage\";\r\n\r\nimport AtDialog from \"../../molecules/AtDialog\";\r\nimport { H2 } from \"@blueprintjs/core\";\r\nimport { localIlls } from \"./vpsscenes\";\r\nimport MMC from \"../../MMC\";\r\n\r\nimport { ReactComponent as ActiveSVG } from \"./icon-active.svg\";\r\nimport { ReactComponent as DayNightSVG } from \"./icon-daynight.svg\";\r\nimport { ReactComponent as MultishotSVG } from \"./icon-multishot.svg\";\r\nimport { ReactComponent as MysticSVG } from \"./icon-mystic.svg\";\r\nimport { ReactComponent as HDSVG } from \"./icon-hd.svg\";\r\nimport { ReactComponent as FourKSVG } from \"./icon-4k.svg\";\r\nimport { ReactComponent as Galaincha } from \"./icon-galaincha.svg\";\r\nimport AtIcon from \"../../atoms/AtIcon\";\r\n\r\nlet vpsfirstload = false;\r\nlet loadfromlocal = false;\r\nconst onlineDemoVer = true;\r\n\r\nconst infoThumbs_demo = {\r\n // \"Perspective View\": [],\r\n // \"Folded Back View\": [],\r\n // \"Folded View\": [],\r\n \"Perspective View Sheen\": [],\r\n \"Bedroom Tesoft\": [, , , , ],\r\n \"Bedroom Airepad\": [, ],\r\n \"Bedroom Epimogh\": [, , ],\r\n \"Living Room Arieble\": [, ],\r\n \"Living Room Exisize\": [, ],\r\n \"Living Room Expemica\": [, , ],\r\n // \"Living Room Renoid\": [, ],\r\n weaving: [],\r\n \"Unfinished Carpet\": [],\r\n \"Carpet Washing\": [],\r\n Carving: [],\r\n \"Stretched Carpet\": [],\r\n \"Finished Carpet with Fringes\": [],\r\n \"Finished Carpet with Binding\": [],\r\n \"Act Body\": [],\r\n \"Art Gallery\": [],\r\n \"Baby Feet\": [],\r\n Bodypaint: [],\r\n \"Book Worm\": [],\r\n \"Just Married\": [],\r\n \"Three Ballerinas\": [],\r\n \"Stair Pateduce\": [],\r\n \"Stair Subway\": [],\r\n Stair: []\r\n};\r\n\r\nconst mapInfoThumbs = (roomFeatures = {}) => {\r\n let arr = [];\r\n let arrInfo = [];\r\n if (roomFeatures[\"4k\"]) {\r\n arr.push();\r\n arrInfo.push(\"This shot is renderable in 4k\");\r\n }\r\n // if (roomFeatures[\"hd\"]) {\r\n // arr.push();\r\n // }\r\n if (roomFeatures[\"multishot\"]) {\r\n arr.push();\r\n arrInfo.push(\"This room has multiple views\");\r\n }\r\n if (roomFeatures[\"multilight\"]) {\r\n arr.push();\r\n arrInfo.push(\"This room has multiple lighting conditions\");\r\n }\r\n if (roomFeatures[\"active\"]) {\r\n arr.push();\r\n arrInfo.push(\"This room has color customizable furniture\");\r\n }\r\n if (roomFeatures[\"mystic\"]) {\r\n arr.push();\r\n arrInfo.push(\"Some objects in this room can be hidden on click\");\r\n }\r\n return [arr, arrInfo];\r\n};\r\n\r\nconst VPS = props => {\r\n const [selectedViewInd, setselectedViewInd] = useState(null);\r\n const [scenesData, setscenesData] = useState(null);\r\n const [showIllustrationModal, setshowIllustrationModal] = useState(false);\r\n const [currentCatIllustration, setcurrentCatIllustration] = useState(0);\r\n const [allRooms, setallRooms] = useState({});\r\n const [selectedView, setselectedView] = useState(null);\r\n const [showMMC, setshowMMC] = useState(false);\r\n const [mmcActiveColor, setmmcActiveColor] = useState(null);\r\n const [nextIllustrations, setnextIllustrations] = useState({ next: null, prev: null });\r\n const [disableIllsforIrregular, setdisableIllsforIrregular] = useState(false);\r\n const [disableCarpetInMaking, setdisableCarpetInMaking] = useState(false);\r\n const vpsHome = useRef(null);\r\n vpsHome.current = document.getElementById(\"app-root\");\r\n\r\n useEffect(() => {\r\n handleFetchRooms();\r\n return () => {\r\n vpsfirstload = false;\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (selectedViewInd && allRooms) {\r\n setselectedView({ ...allRooms[selectedViewInd.category][selectedViewInd.index] });\r\n\r\n let currentSceneIndex;\r\n let currentSceneData = scenesData.filter((item, i) => {\r\n let isCurrent = item.label === selectedViewInd.category;\r\n if (isCurrent) currentSceneIndex = i;\r\n return isCurrent;\r\n })[0];\r\n let nextCategory = selectedViewInd.category;\r\n let nextIndex = selectedViewInd.index + 1;\r\n if (currentSceneData.options.length - 1 <= selectedViewInd.index) {\r\n nextCategory = scenesData[currentSceneIndex + 1]?.label;\r\n if (disableCarpetInMaking && nextCategory.toLowerCase() === \"carpet in the making\") {\r\n nextCategory = scenesData[currentSceneIndex + 2]?.label;\r\n }\r\n nextIndex = nextCategory ? 0 : null;\r\n }\r\n\r\n let prevCategory = selectedViewInd.category;\r\n let prevIndex = selectedViewInd.index - 1;\r\n if (selectedViewInd.index === 0) {\r\n prevCategory = scenesData[currentSceneIndex - 1]?.label;\r\n prevIndex = prevCategory ? scenesData[currentSceneIndex - 1].options.length - 1 : null;\r\n if (disableCarpetInMaking && prevCategory.toLowerCase() === \"carpet in the making\") {\r\n prevCategory = scenesData[currentSceneIndex - 2]?.label;\r\n prevIndex = prevCategory ? scenesData[currentSceneIndex - 2].options.length - 1 : null;\r\n }\r\n }\r\n\r\n setnextIllustrations({\r\n next: { category: nextCategory, index: nextIndex },\r\n prev: { category: prevCategory, index: prevIndex }\r\n });\r\n }\r\n }, [selectedViewInd, allRooms]);\r\n\r\n useEffect(() => {\r\n if (disableCarpetInMaking) {\r\n let nextCategory, prevCategory, nextIndex, prevIndex;\r\n nextCategory = nextIllustrations?.next?.category;\r\n nextIndex = nextIllustrations?.next?.index;\r\n prevCategory = nextIllustrations?.prev?.category;\r\n prevIndex = nextIllustrations?.prev?.index;\r\n let currentSceneIndex;\r\n let currentSceneData = scenesData.filter((item, i) => {\r\n let isCurrent = item.label === selectedViewInd.category;\r\n if (isCurrent) currentSceneIndex = i;\r\n return isCurrent;\r\n })[0];\r\n if (\r\n nextIllustrations?.next?.category &&\r\n nextIllustrations.next.category.toLowerCase() === \"carpet in the making\"\r\n ) {\r\n nextCategory = scenesData[currentSceneIndex + 2]?.label;\r\n nextIndex = 0;\r\n }\r\n if (\r\n nextIllustrations?.prev?.category &&\r\n nextIllustrations.prev.category.toLowerCase() === \"carpet in the making\"\r\n ) {\r\n prevCategory = scenesData[currentSceneIndex - 2]?.label;\r\n prevIndex = scenesData[currentSceneIndex - 2].options.length - 1;\r\n }\r\n setnextIllustrations({\r\n next: { category: nextCategory, index: nextIndex },\r\n prev: { category: prevCategory, index: prevIndex }\r\n });\r\n }\r\n }, [disableCarpetInMaking]);\r\n\r\n const handleFetchRooms = async () => {\r\n const roomswithoutthumbs = await AppProvider.fetchRoomList({});\r\n let rooms = await AppProvider.getRoomThumbnails({ rooms: roomswithoutthumbs });\r\n if (loadfromlocal && process.env.NODE_ENV === \"development\") rooms = [...rooms, ...localIlls];\r\n const filteredRooms = rooms.filter(item => {\r\n const isonlinedemo = /Online Demo Rooms/i.test(item.FullPath);\r\n return (\r\n item.Type === \"file\" &&\r\n getExtension(item.FullPath) === \"crf3d\" &&\r\n (onlineDemoVer ? isonlinedemo : !isonlinedemo)\r\n );\r\n });\r\n\r\n let tempAllRooms = { ...allRooms };\r\n\r\n for (const room of filteredRooms) {\r\n let roomPathArr = room.FullPath.split(\"/\");\r\n let roomCategory = roomPathArr[roomPathArr.length - 2];\r\n if (!roomCategory || roomCategory === \"\") roomCategory = \"Rooms\";\r\n room[\"category\"] = roomCategory;\r\n room.label = room.label.replace(new RegExp(\"[0-9]\", \"g\"), \"\").trim();\r\n room.Name = room.Name.replace(new RegExp(\"[0-9]\", \"g\"), \"\").trim();\r\n room.Thumb = room.fromlocal ? room.Thumb : `${assetsDomain}${room.Thumb.split(\"Assets\")[1]}`;\r\n const dirArr = room.Thumb.split(\"/\");\r\n let roomname = dirArr.pop().split(\".\")[0];\r\n const baseUrl = dirArr.join(\"/\") + \"/\" + roomname;\r\n await readJSON(`${baseUrl}/config.json`).then(config => {\r\n const infos = mapInfoThumbs(config.roomFeatures);\r\n room.infoThumbs = infos[0];\r\n room.infoTitles = infos[1];\r\n });\r\n if (Object.keys(tempAllRooms).includes(roomCategory)) {\r\n tempAllRooms[roomCategory].push(room);\r\n } else {\r\n tempAllRooms[roomCategory] = [room];\r\n }\r\n }\r\n\r\n //merge root rooms to Studio Rooms\r\n if (tempAllRooms[\"Rooms\"] && tempAllRooms[\"Rooms\"].length > 0) {\r\n // tempAllRooms[\"Studio Rooms\"] = [...tempAllRooms[\"Studio Rooms\"], ...tempAllRooms[\"Rooms\"]];\r\n delete tempAllRooms[\"Rooms\"];\r\n }\r\n // readJSON(`/roomorder1.json`)\r\n readJSON(`https://images.explorug.com/VRS/roomorder1.json`)\r\n .then(roomorder => {\r\n if (!roomorder) return;\r\n const roomorderentries = Object.entries(roomorder);\r\n if (!roomorderentries || roomorderentries.length <= 0) return;\r\n let orderedRooms = {};\r\n roomorderentries.forEach((itemObj, index) => {\r\n const item = [itemObj[1].label, itemObj[1].rooms ? itemObj[1].rooms : []];\r\n if (tempAllRooms[itemObj[0]] && !tempAllRooms[item[0]]) {\r\n tempAllRooms[item[0]] = tempAllRooms[itemObj[0]];\r\n delete tempAllRooms[itemObj[0]];\r\n }\r\n if (tempAllRooms[item[0]]) {\r\n orderedRooms[item[0]] = [];\r\n if (item[1].length > 0) {\r\n let filteringArr = [...tempAllRooms[item[0]]];\r\n item[1].forEach((element, index) => {\r\n let findElementIndex = -1;\r\n let findElement = filteringArr.filter((eachitem, index) => {\r\n if (eachitem.Name.toLowerCase() === element.toLowerCase()) {\r\n findElementIndex = index;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n if (findElementIndex > -1) {\r\n filteringArr.splice(findElementIndex, 1);\r\n orderedRooms[item[0]].push(findElement[0]);\r\n }\r\n if (index === item[1].length - 1) {\r\n if (filteringArr.length > 0) {\r\n orderedRooms[item[0]] = [...orderedRooms[item[0]], ...filteringArr];\r\n }\r\n }\r\n });\r\n } else {\r\n orderedRooms[item[0]] = [...tempAllRooms[item[0]]];\r\n }\r\n }\r\n });\r\n setallRooms({ ...orderedRooms });\r\n //default first room selection\r\n setselectedViewInd({ category: Object.keys(orderedRooms)[0], index: 0 });\r\n })\r\n .catch(err => {\r\n setallRooms({ ...tempAllRooms });\r\n //default first room selection\r\n setselectedViewInd({ category: Object.keys(tempAllRooms)[0], index: 0 });\r\n });\r\n };\r\n\r\n const [debouncedThumbnailClick] = useDebouncedCallback((roomCategory, roomIndex) => {\r\n handleThumbnailClick(roomCategory, roomIndex);\r\n }, 400);\r\n const handleThumbnailClick = (roomCategory, roomIndex) => {\r\n if (selectedViewInd.category !== roomCategory || selectedViewInd.index !== roomIndex) {\r\n setselectedViewInd({ category: roomCategory, index: roomIndex });\r\n }\r\n setshowIllustrationModal(false);\r\n };\r\n\r\n useEffect(() => {\r\n if (!allRooms || Object.keys(allRooms).length <= 0) return;\r\n let temp = [];\r\n Object.entries(allRooms).forEach((roomCatData, index) => {\r\n let tempObj = {\r\n label: roomCatData[0],\r\n options: [\r\n ...roomCatData[1].map((eachObj, i) => {\r\n return {\r\n label: eachObj.label,\r\n Thumb: eachObj.Thumb,\r\n infoThumbs: eachObj.infoThumbs,\r\n infoTitles: eachObj.infoTitles,\r\n onClick: () => debouncedThumbnailClick(roomCatData[0], i)\r\n };\r\n })\r\n ]\r\n };\r\n if (tempObj.label.toLowerCase() === \"photographic shots\") {\r\n tempObj = {\r\n label: roomCatData[0],\r\n options: [\r\n ...roomCatData[1].map((eachObj, i) => {\r\n return {\r\n label: eachObj.label,\r\n Thumb: eachObj.Thumb,\r\n infoThumbs: [],\r\n infoTitles: [\"This room lets you position the camera freely in 3D space\"],\r\n onClick: () => debouncedThumbnailClick(roomCatData[0], i)\r\n };\r\n })\r\n ]\r\n };\r\n tempObj.showName = \"Photographic Shots\";\r\n tempObj.story = [\r\n {\r\n text:\r\n \"Frame the perfect shot of your carpet by moving the camera around freely in these well lit rooms and change the flooring.\"\r\n }\r\n ];\r\n } else if (tempObj.label.toLowerCase() === \"studio rooms\") {\r\n tempObj.story = [\r\n {\r\n text:\r\n \"Place the carpet anywhere you like in these rooms, quickly change lighting and take shots from different angles.\"\r\n }\r\n ];\r\n } else if (tempObj.label.toLowerCase() === \"carpet in the making\") {\r\n tempObj.showName = \"Carpet in the Making\";\r\n tempObj.icon = (\r\n \r\n \r\n \r\n );\r\n tempObj.story = [\r\n { text: \"Give your clients the experience of your \" },\r\n // { text: \"handknotted\", color: \"var(--brand-primary)\" },\r\n { text: \"handknotted\" },\r\n { text: \" carpets being produced from weaving, washing, stretching to carving.\" }\r\n ];\r\n } else if (tempObj.label.toLowerCase() === \"catalog ready\") {\r\n tempObj = {\r\n label: roomCatData[0],\r\n options: [\r\n ...roomCatData[1].map((eachObj, i) => {\r\n return {\r\n label: eachObj.label,\r\n Thumb: eachObj.Thumb,\r\n infoThumbs: [],\r\n infoTitles: [\"This shot will save as a PDF file\"],\r\n onClick: () => debouncedThumbnailClick(roomCatData[0], i)\r\n };\r\n })\r\n ]\r\n };\r\n tempObj.showName = \"Catalog Ready\";\r\n tempObj.story = [\r\n {\r\n text:\r\n \"These illustrative shots can be readily displayed on your webpages, social media or sent straight to print.\"\r\n }\r\n ];\r\n } else if (tempObj.label.toLowerCase() === \"staircase shots\") {\r\n tempObj.showName = \"Staircase Shots\";\r\n tempObj.story = [{ text: \"Show your carpets laid over staircases.\" }];\r\n } else if (tempObj.label.toLowerCase() === \"fixed shots\") {\r\n tempObj.showName = \"Fixed Shots\";\r\n tempObj.story = [{ text: \"Show your carpets in these fixed shots.\" }];\r\n }\r\n temp.push(tempObj);\r\n });\r\n setscenesData([...temp]);\r\n }, [allRooms]);\r\n\r\n const refs =\r\n scenesData &&\r\n scenesData.reduce((acc, value, i) => {\r\n acc[i] = React.createRef();\r\n return acc;\r\n }, {});\r\n\r\n useEffect(() => {\r\n if (!refs) return;\r\n refs[currentCatIllustration].current.scrollIntoView({\r\n behavior: \"smooth\",\r\n block: \"start\"\r\n });\r\n }, [currentCatIllustration]);\r\n\r\n const handleIllustrationModal = val => {\r\n if (val && !vpsfirstload) {\r\n vpsfirstload = true;\r\n }\r\n setshowIllustrationModal(val !== undefined ? !val : !showIllustrationModal);\r\n };\r\n\r\n const nextIllustration = () => {\r\n handleThumbnailClick(nextIllustrations.next?.category, nextIllustrations.next?.index);\r\n };\r\n\r\n const prevIllustration = () => {\r\n handleThumbnailClick(nextIllustrations.prev?.category, nextIllustrations.prev?.index);\r\n };\r\n\r\n const disableIllustrations = val => {\r\n setdisableIllsforIrregular(val);\r\n };\r\n\r\n return (\r\n \r\n
\r\n {\r\n setshowIllustrationModal(false);\r\n }}\r\n className=\" illustration-dialog\"\r\n overlayClassName={\r\n showIllustrationModal ? \"illustration-dialog-open\" : \"illustration-dialog-close\"\r\n }\r\n size=\"lg\"\r\n // portalContainerId=\"vps-main\"\r\n >\r\n
\r\n
\r\n {/* \"logo\" */}\r\n

Please choose your shot

\r\n
\r\n {\r\n setshowIllustrationModal(false);\r\n }}\r\n />\r\n
\r\n\r\n
\r\n {scenesData &&\r\n scenesData.map((category, i) => (\r\n setcurrentCatIllustration(i)}\r\n >\r\n {category.label}\r\n
\r\n ))}\r\n
\r\n
\r\n {scenesData &&\r\n scenesData.map((category, i) => {\r\n return (\r\n
\r\n {/* */}\r\n
\r\n
\r\n \r\n {category.showName ? category.showName : category.label}\r\n {category.icon && category.icon}\r\n \r\n \r\n {category.story.map(story => {\r\n return (\r\n \r\n {story.text}\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n
\r\n {category.options &&\r\n category.options.length > 0 &&\r\n category.options.map((item, itemIndex) => {\r\n return (\r\n \r\n debouncedThumbnailClick(category.label, itemIndex)\r\n }\r\n />\r\n );\r\n })}\r\n
\r\n\r\n {i < scenesData.length - 1 &&
}\r\n
\r\n );\r\n })}\r\n
\r\n \r\n {\r\n setmmcActiveColor({ index: index, color: color });\r\n setshowMMC(true);\r\n }}\r\n selectedView={selectedView}\r\n showMMC={showMMC}\r\n nextIllustration={nextIllustrations?.next?.category && nextIllustration}\r\n prevIllustration={nextIllustrations?.prev?.category && prevIllustration}\r\n disableIllustrations={disableIllustrations}\r\n changeDesignType={val => setdisableCarpetInMaking(val === \"jpeg\")}\r\n />\r\n {\r\n setshowMMC(false);\r\n }}\r\n isOpen={showMMC}\r\n className={\"mmc-overlay \" + Classes.OVERLAY_SCROLL_CONTAINER}\r\n hasBackdrop={false}\r\n usePortal={false}\r\n canOutsideClickClose={true}\r\n // portalContainer={document.getElementById(\"vps-main\")}\r\n >\r\n {\r\n setshowMMC(false);\r\n }}\r\n />\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default React.memo(VPS);\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect, useRef, Suspense } from \"react\";\r\nimport AppProvider from \"../../../api/appProvider\";\r\nimport {\r\n designListActions,\r\n useDesignListState,\r\n useDispatchDesignList\r\n} from \"../../../reducers/designstree.reducer\";\r\nimport { useMount, useFullscreen, useToggle, useIdle } from \"react-use\";\r\nimport { ReactComponent as Icons } from \"../../symbol-defs.svg\";\r\nimport {\r\n designDetailActions,\r\n useDispatchDesignDetail\r\n} from \"../../../reducers/designdetails.reducer\";\r\nimport { colorListActions, useDispatchColorList } from \"../../../reducers/colors.reducer\";\r\nimport uuid from \"uuid\";\r\nimport { useUiDispatch, useUiState, mainUiActions } from \"../../../reducers/mainui.reducer\";\r\nimport { getSimilarDesigns } from \"../../../utils/arrayUtils\";\r\nimport DesignList from \"../../organisms/DesignList\";\r\nimport VpsLanding from \"../VpsLanding\";\r\nimport {\r\n roomConfigActions,\r\n useDispatchRoomConfig,\r\n useRoomConfigState\r\n} from \"../../IllustrationView/roomconfig.reducer\";\r\nimport VPS from \"./../VPS\"\r\nconst assetspath = \"https://v3.explorug.com/modules/VirtualPhotoStudio/\";\r\nwindow.assetspath = assetspath;\r\nconst VpsHome = props => {\r\n const { initDesignPath, initDesignColors, eCatalogDetails } = window.initialData;\r\n const [isReady, setisReady] = useState(false);\r\n const [isLandingComplete, setisLandingComplete] = useState(false);\r\n\r\n const uiState = useUiState();\r\n const dispatchUiState = useUiDispatch();\r\n const designListState = useDesignListState();\r\n const dispatchDesignList = useDispatchDesignList();\r\n const dispatchColorListState = useDispatchColorList();\r\n const dispathcDesignDetails = useDispatchDesignDetail();\r\n const roomConfigState = useRoomConfigState();\r\n const dispatchRoomConfig = useDispatchRoomConfig();\r\n const [isFullScreen, toggleFullscreen] = useToggle(false);\r\n const isIdle = useIdle(5e3, false, [\r\n \"mousemove\",\r\n \"mousedown\",\r\n \"resize\",\r\n \"keydown\",\r\n \"touchstart\",\r\n \"wheel\",\r\n uiState.showLoadingOverlay\r\n ]);\r\n useEffect(() => {\r\n dispatchUiState({ type: mainUiActions.SET_IS_IDLE, payload: isIdle });\r\n }, [isIdle]);\r\n const refHome = useRef(null);\r\n useMount(() => {\r\n AppProvider.fetchColorList({}).then(colors => {\r\n dispatchColorListState({ type: colorListActions.SET_COLORS, payload: colors });\r\n });\r\n const { TextureOptions } = window;\r\n const texArr = [];\r\n TextureOptions.DefaultTextureVisible.forEach((tex, i) => {\r\n if (tex) texArr.push(i);\r\n });\r\n TextureOptions.AdditionalTextureNames.forEach((item, i) => {\r\n texArr.push(4 + i);\r\n });\r\n TextureOptions.CustomTextureIndices.forEach(item => {\r\n texArr.push(item);\r\n });\r\n AppProvider.readTextureImages(texArr).then(colorTextures => {\r\n dispatchColorListState({ type: colorListActions.SET_COLOR_TEXTURES, payload: colorTextures });\r\n });\r\n if (eCatalogDetails && initDesignPath) {\r\n const p = initDesignPath.split(\"/\").filter(item => item && item !== \"\");\r\n const designNamewithExt = p[p.length - 1];\r\n const darr = designNamewithExt.split(\".\");\r\n let designName = darr.slice(0, darr.length - 1).join(\".\");\r\n\r\n const name = initDesignPath.split(\"/\").find(item => item.substr(0, 1) === \".\");\r\n if (name && window.flags.designVariations.appendDesignName) {\r\n designName = `${name.substr(1)} ${designName}`;\r\n }\r\n\r\n p.pop();\r\n const path = \"/\" + p.join(\"/\");\r\n AppProvider.fetchDesignList().then(designlist => {\r\n const similarDesigns = getSimilarDesigns(designlist, {\r\n label: designName,\r\n fullpath: initDesignPath\r\n });\r\n AppProvider.getDesignThumbnails({ designs: [{ fullpath: initDesignPath }] }).then(thum => {\r\n const thumbnail = thum[0];\r\n if (thumbnail.fullpath === initDesignPath) {\r\n dispatchDesignList({\r\n type: designListActions.SET_ACTIVE_NODE,\r\n payload: {\r\n id: uuid.v4(),\r\n label: designName,\r\n fullpath: initDesignPath,\r\n path: path,\r\n isExpanded: false,\r\n childNodes: [],\r\n hasCaret: false,\r\n type: \"file\",\r\n similarItems: similarDesigns,\r\n Thumb: thumbnail.Thumb,\r\n Props: thumbnail.Props\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n });\r\n useFullscreen(refHome, isFullScreen, { onClose: () => toggleFullscreen(false) });\r\n\r\n useEffect(() => {\r\n let latest = true;\r\n const { fav, id, similarItems } = designListState.activeNode;\r\n if (id === \"0\" || fav) return;\r\n\r\n if (uiState.showLoadingOverlay)\r\n dispatchUiState({ type: mainUiActions.SET_LOADING_OVERLAY_PERCENT, payload: 50 });\r\n\r\n dispatchDesignList({\r\n type: designListActions.SET_SCHEMES,\r\n payload: similarItems ? similarItems : []\r\n });\r\n\r\n if (similarItems && similarItems.length) {\r\n AppProvider.getDesignThumbnails({ designs: similarItems.filter(item => !item.Thumb) }).then(\r\n schemes => {\r\n if (latest) dispatchDesignList({ type: designListActions.SET_SCHEMES, payload: schemes });\r\n }\r\n );\r\n }\r\n\r\n return () => (latest = false);\r\n }, [designListState.activeNode]); //eslint-disable-line\r\n\r\n useEffect(() => {\r\n const { fav, id, Props: designDetails } = designListState.activeNode;\r\n if (id === \"0\" || fav) return;\r\n if (initDesignColors) {\r\n dispathcDesignDetails({\r\n type: designDetailActions.SET_DETAILS,\r\n payload: {\r\n designDetails: { ...designDetails, DesignColors: initDesignColors },\r\n ...designListState.activeNode,\r\n customizationFlag: true\r\n }\r\n });\r\n } else {\r\n dispathcDesignDetails({\r\n type: designDetailActions.SET_DETAILS,\r\n payload: { designDetails, ...designListState.activeNode }\r\n });\r\n }\r\n dispatchRoomConfig({\r\n type: roomConfigActions.SET_CUSTOM_DESIGN_URL,\r\n payload: \"\"\r\n });\r\n if (uiState.showLoadingOverlay)\r\n dispatchUiState({ type: mainUiActions.SET_LOADING_OVERLAY_PERCENT, payload: 80 });\r\n }, [designListState.activeNode.id]);\r\n\r\n useEffect(() => {\r\n if (roomConfigState?.customDesignUrl?.url && uiState.showLoadingOverlay) {\r\n dispatchUiState({ type: mainUiActions.SET_LOADING_OVERLAY_PERCENT, payload: 80 });\r\n }\r\n }, [roomConfigState]);\r\n\r\n return (\r\n \r\n {/* {uiState.showLoadingOverlay && (\r\n \r\n )} */}\r\n {/* {isLandingComplete && ( */}\r\n \r\n
\r\n }>\r\n \r\n setisReady(true)} />\r\n \r\n
\r\n
\r\n {/* )} */}\r\n {/* setisLandingComplete(true)}> */}\r\n
\r\n );\r\n};\r\n\r\nexport default VpsHome;\r\n","import React from \"react\";\r\nconst SET_VIEW_MODE = \"SET_VIEW_MODE\";\r\nconst SET_ILLUSTRATIONS = \"SET_ILLUSTRATIONS\";\r\nconst SET_ACTIVE_NODE = \"SET_ACTIVE_ILLUSTRATION_NODE\";\r\nconst SELECT_NEXT_ILLUSTRATION = \"SELECT_NEXT_ILLUSTRATION\";\r\nconst SELECT_PREV_ILLUSTRATION = \"SELECT_PREV_ILLUSTRATION\"\r\nconst visViewModes = {\r\n ROOM_VIEW: \"ROOM_VIEW\",\r\n MY_ROOM: \"MY_ROOM\",\r\n DESIGN_VIEW_DEEPZOOM: \"DESIGN_VIEW_DEEPZOOM\", //deep zoom view\r\n DESIGN_VIEW_DEEPZOOM_RX: \"DESIGN_VIEW_DEEPZOOM_RX\", //deep zoom with repeat x\r\n DESIGN_VIEW_PERSPECTIVE: \"DESIGN_VIEW_PERSPECTIVE\",\r\n DESIGN_VIEW_PHOTOGRAPHIC: \"DESIGN_VIEW_PHOTOGRAPHIC\"\r\n}\r\n\r\nconst StateContext = React.createContext();\r\nconst DispatchContext = React.createContext();\r\n\r\nconst visualizationsActions = {\r\n SET_VIEW_MODE,\r\n SET_ILLUSTRATIONS,\r\n SET_ACTIVE_NODE,\r\n SELECT_NEXT_ILLUSTRATION,\r\n SELECT_PREV_ILLUSTRATION\r\n}\r\n\r\nconst visualizationState = {\r\n viewMode: visViewModes.DESIGN_VIEW,\r\n illustrations: [],\r\n activeNode: {\r\n id: \"0\"\r\n }\r\n}\r\n\r\nconst visualizationReducer = (state, action) => {\r\n //console.log(action.type)\r\n switch (action.type) {\r\n case SET_VIEW_MODE:\r\n return { ...state, viewMode: action.payload }\r\n case SET_ILLUSTRATIONS:\r\n return { ...state, illustrations: action.payload }\r\n case SET_ACTIVE_NODE:\r\n if (state.activeNode) {\r\n if (state.activeNode.id !== action.payload.id || state.viewMode !== visViewModes.ROOM_VIEW) {\r\n return { ...state, activeNode: action.payload };\r\n } else return state;\r\n } else\r\n return { ...state, activeNode: action.payload };\r\n case SELECT_PREV_ILLUSTRATION:\r\n return selPrevIll(state)\r\n case SELECT_NEXT_ILLUSTRATION:\r\n return selNextIll(state)\r\n default:\r\n return state;\r\n }\r\n}\r\nconst selPrevIll = (state) => {\r\n const ind = state.illustrations.findIndex(item => item.id === state.activeNode.id)\r\n if (ind < 0 || ind === 0)\r\n return state\r\n return { ...state, activeNode: state.illustrations[ind - 1] }\r\n}\r\nconst selNextIll = (state) => {\r\n const ind = state.illustrations.findIndex(item => item.id === state.activeNode.id)\r\n if (ind < 0 || ind >= state.illustrations.length - 1)\r\n return state\r\n return { ...state, activeNode: state.illustrations[ind + 1] }\r\n}\r\nfunction VisualizationStateProvider({ children }) {\r\n const { visualizations } = window.flags\r\n const initState = { ...visualizationState, viewMode: visualizations.defaultView }\r\n const [state, dispatch] = React.useReducer(visualizationReducer, initState)\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n )\r\n}\r\nfunction useVisualizationState() {\r\n const context = React.useContext(StateContext)\r\n if (context === undefined) {\r\n throw new Error('useCountState must be used within a CountProvider')\r\n }\r\n return context\r\n}\r\nfunction useDispatchVisualization() {\r\n const context = React.useContext(DispatchContext)\r\n if (context === undefined) {\r\n throw new Error('useCountDispatch must be used within a CountProvider')\r\n }\r\n return context\r\n}\r\nexport { VisualizationStateProvider, useVisualizationState, useDispatchVisualization, visualizationsActions, visViewModes }\r\n","import React from 'react'\r\n\r\nconst StateContext = React.createContext();\r\nconst DispatchContext = React.createContext();\r\n\r\nconst SET_CONTROL_MODE = \"SET_CONTROL_MODE\"\r\nconst SHOW_WALKTHROUGH = \"SHOW_WALKTHROUGH\"\r\nconst SAVE_ROOM = \"SAVE_ROOM\"\r\nconst controlModes = {\r\n TRANSFORM: \"TRANSFORM\",\r\n ADJUST_PLANE: \"ADJUST_PLANE\",\r\n MARK: \"MARK\"\r\n}\r\nconst myRoomActions = {\r\n SET_CONTROL_MODE,\r\n SHOW_WALKTHROUGH,\r\n SAVE_ROOM\r\n}\r\nconst initialMyroomState = {\r\n controlMode: controlModes.TRANSFORM,\r\n showWalkthrough: false,\r\n savedRooms: []\r\n}\r\nconst myroomReducer = (state, action) => {\r\n const { type, payload } = action\r\n switch (type) {\r\n case SET_CONTROL_MODE:\r\n return { ...state, controlMode: payload }\r\n case SHOW_WALKTHROUGH:\r\n return { ...state, showWalkthrough: payload }\r\n case SAVE_ROOM:\r\n return { ...state, savedRooms: [...state.savedRooms, payload] }\r\n default:\r\n return state;\r\n }\r\n}\r\nfunction MyroomStateProvider({ children }) {\r\n const [state, dispatch] = React.useReducer(myroomReducer, initialMyroomState)\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n )\r\n}\r\nfunction useMyroomState() {\r\n const context = React.useContext(StateContext)\r\n if (context === undefined) {\r\n throw new Error('useCountState must be used within a CountProvider')\r\n }\r\n return context\r\n}\r\nfunction useMyroomDispatch() {\r\n const context = React.useContext(DispatchContext)\r\n if (context === undefined) {\r\n throw new Error('useCountDispatch must be used within a CountProvider')\r\n }\r\n return context\r\n}\r\nexport { MyroomStateProvider, useMyroomState, useMyroomDispatch, myRoomActions, controlModes }\r\n","import React from \"react\";\r\nimport { errorTypes } from \"../../../utils/utils\";\r\nimport { H1 } from \"@blueprintjs/core\";\r\nimport AtButton from \"../../atoms/AtButton\";\r\nconst ErrorTem = props => {\r\n const { title, content, buttonText, onButtonClick } = props;\r\n return (\r\n
\r\n {title &&

{title}

}\r\n {content && {content}}\r\n {buttonText && }\r\n
\r\n );\r\n};\r\nconst ErrorPage = props => {\r\n const { errorType } = props;\r\n switch (errorType) {\r\n case errorTypes.INTERFACE_ERROR:\r\n return (\r\n \r\n It’s not you, it’s us. We’ve been notified of this issue.\r\n
Please check again soon.\r\n \r\n }\r\n buttonText=\"Try Again\"\r\n />\r\n );\r\n case errorTypes.INVALID_LINK:\r\n return (\r\n This link does not seem to be working.}\r\n buttonText=\"View other designs\"\r\n />\r\n );\r\n case errorTypes.NO_CONNECTION:\r\n return (\r\n \r\n );\r\n default:\r\n return ;\r\n }\r\n};\r\n\r\nexport default ErrorPage;\r\n","import React, { useState, Suspense } from \"react\";\r\nimport { useMount } from \"react-use\";\r\nimport VpsHome from \"../VpsHome\";\r\nimport AppProvider from \"../../../api/appProvider\";\r\nimport { UiStateProvider, useUiState, pageViews } from \"../../../reducers/mainui.reducer\";\r\nimport { DesignListStateProvider } from \"../../../reducers/designstree.reducer\";\r\nimport { VisualizationStateProvider } from \"../../../reducers/visualizations.reducer\";\r\nimport { ColorListStateProvider } from \"../../../reducers/colors.reducer\";\r\nimport { DesignDetailStateProvider } from \"../../../reducers/designdetails.reducer\";\r\nimport { MyroomStateProvider } from \"../../../reducers/myroom.reducer\";\r\nimport strings, { initializeStrings } from \"../../../strings\";\r\nimport deepmerge from \"deepmerge\";\r\nimport { defaultFlags } from \"./defaultflags\";\r\nimport { RoomConfigStateProvider } from \"../../IllustrationView/roomconfig.reducer\";\r\nimport { decodeColorsFromString, getFromSessionStorage, errorTypes } from \"../../../utils/utils\";\r\nimport ErrorPage from \"../ErrorPage\";\r\n\r\n\r\nconst PageTorender = props => {\r\n const uiState = useUiState();\r\n switch (uiState.pageView) {\r\n case pageViews.VPS:\r\n return ;\r\n default:\r\n break;\r\n }\r\n};\r\nconst overwriteMerge = (destinationArray, sourceArray, options) => sourceArray;\r\nconst processRoomPath = path => {\r\n const initpatharr = path.split(\"/\").filter(item => item && item !== \"\");\r\n return `${initpatharr[0] === \"Rooms\" ? \"\" : \"Rooms/\"}${path}`;\r\n};\r\nexport const processDesignPath = path => {\r\n const initpatharr = path.split(\"/\").filter(item => item && item !== \"\");\r\n return `${initpatharr[0] === \"Designs\" ? \"\" : \"Designs/\"}${path}`;\r\n};\r\nconst EntryPage = () => {\r\n const [initialData, setInitialData] = useState({\r\n eCatalogDetails: null,\r\n initDesignColors: null,\r\n initDesignPath: null,\r\n initRoomPath: null,\r\n initdesignFolder: false,\r\n loading: true,\r\n error: false\r\n });\r\n useMount(() => {\r\n const initializeData = ({\r\n initDesignPath,\r\n initRoomPath,\r\n initDesignColors,\r\n eCatalogDetails\r\n }) => {\r\n let initData = { ...initialData, eCatalogDetails };\r\n\r\n if (initDesignPath) {\r\n initData = { ...initData, initDesignPath: processDesignPath(initDesignPath) };\r\n }\r\n if (initRoomPath) {\r\n initData = { ...initData, initRoomPath: processRoomPath(initRoomPath) };\r\n window.flags.visualizations.defaultView = \"ROOM_VIEW\";\r\n }\r\n if (initDesignColors) initData = { ...initData, initDesignColors };\r\n return initData;\r\n };\r\n\r\n const catalogId = getFromSessionStorage(\"catalogid\");\r\n const mode = getFromSessionStorage(\"mode\");\r\n const initDesignPath = getFromSessionStorage(\"initdesign\");\r\n // const initDesignFolder = getFromSessionStorage(\"initdesignfolder\");\r\n const initRoomPath = getFromSessionStorage(\"initview\");\r\n const str = getFromSessionStorage(\"props\");\r\n const initDesignColors = str ? decodeColorsFromString(str) : null;\r\n\r\n const init = async () => {\r\n try {\r\n await AppProvider.autoLogin({ keyfromsession: true });\r\n const { flags } = await AppProvider.fetchInterfaceElements();\r\n window.flags = deepmerge(defaultFlags, flags, { arrayMerge: overwriteMerge });\r\n\r\n //set up langauge\r\n const { language: obj } = window.flags;\r\n initializeStrings(obj.strings);\r\n\r\n if (obj.langOptions && obj.langOptions.length) {\r\n const defLang = obj.langOptions[0].val || null;\r\n if (defLang) strings.setLanguage(obj.langOptions[0].val);\r\n else {\r\n strings.setLanguage(\"en\");\r\n window.flags.language.langOptions = [];\r\n }\r\n }\r\n } catch (error) {\r\n //*! could not set interface elements */\r\n console.error(error);\r\n setInitialData({ ...initialData, err: { ...errorTypes.INTERFACE_ERROR, error } });\r\n return;\r\n }\r\n\r\n const data = {\r\n initDesignPath,\r\n initRoomPath,\r\n initDesignColors,\r\n eCatalogDetails: null\r\n };\r\n let error = null;\r\n let initData;\r\n switch (mode) {\r\n case \"stripedesign\":\r\n try {\r\n const designPath = await AppProvider.getStripedDesign();\r\n data.initDesignPath = designPath;\r\n data.eCatalogDetails = {};\r\n initData = initializeData(data);\r\n } catch (err) {\r\n //*! could not get striped design */\r\n error = { type: errorTypes.INTERFACE_ERROR, err: err };\r\n console.error(err);\r\n }\r\n break;\r\n case \"myroom\":\r\n initData = initializeData(data);\r\n window.flags.visualizations.defaultView = \"MY_ROOM\";\r\n break;\r\n case \"ecat\":\r\n if (catalogId) {\r\n let eCatalogDetails;\r\n try {\r\n eCatalogDetails = await AppProvider.eCatalogDetails({ catalogId });\r\n } catch (err) {\r\n error = { type: errorTypes.INTERFACE_ERROR, err: err };\r\n console.error(error);\r\n }\r\n if (eCatalogDetails) {\r\n const { InitView, InitDesign, Colors } = eCatalogDetails;\r\n data.eCatalogDetails = eCatalogDetails;\r\n if (InitDesign && InitDesign !== \"\" && InitDesign !== \"undefined\") {\r\n data.initDesignPath = InitDesign;\r\n }\r\n if (InitView && InitView !== \"\" && InitView !== \"undefined\") {\r\n data.initRoomPath = InitView;\r\n }\r\n if (Colors) {\r\n data.initDesignColors = decodeColorsFromString(Colors);\r\n }\r\n initData = initializeData(data);\r\n }\r\n } else {\r\n data.eCatalogDetails = {};\r\n initData = initializeData(data);\r\n if (!initData.initDesignPath) error = { type: errorTypes.INVALID_LINK };\r\n }\r\n break;\r\n\r\n default:\r\n initData = initializeData(data);\r\n break;\r\n }\r\n window.initialData = initData;\r\n setInitialData({ ...initData, loading: false, error });\r\n };\r\n init();\r\n });\r\n return initialData.loading ? (\r\n <>\r\n ) : initialData.error ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default EntryPage;\r\n","import 'react-app-polyfill/ie9';\r\nimport 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\nimport React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport LoginPage from \"./components/pages/Login\";\r\nimport AppProvider from \"./api/appProvider\";\r\nimport \"./style.scss\";\r\n// import ReactGA from 'react-ga';\r\nimport EntryPage from \"./components/pages/EntryPage\";\r\nimport ErrorPage from './components/pages/ErrorPage';\r\nimport { errorTypes } from './utils/utils';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport VpsLanding from './components/pages/VpsLanding';\r\nimport { UiStateProvider } from './reducers/mainui.reducer';\r\n\r\n// const version = process.env.REACT_APP_VERSION;\r\n\r\n\r\n// ReactGA.initialize('UA-165307296-1');\r\n// window.onerror = (msg, src, lineno, colno, error) => {\r\n// console.log(error)\r\n// var category = 'JavaScript error';\r\n// const page = sessionStorage.getItem(\"page\");\r\n// ReactGA.event({\r\n// category: category,\r\n// action: msg,\r\n// label: page + \":\" + src + \":\" + lineno + \":\" + colno\r\n// });\r\n// return false\r\n// }\r\nconst App = props => {\r\n const { page } = props;\r\n if (page === \"entry\") return \r\n if (page === \"login\") return \r\n if (page === \"error\") return \r\n return\r\n}\r\nconst baseUrl = \"\";\r\nconst root = document.getElementById(\"app-root\")\r\nReactDOM.render(\r\n \r\n \r\n \r\n { }}>\r\n \r\n\r\n \r\n , root);\r\n\r\n\r\n","import { readImage } from \"./utils\";\r\n\r\nexport const createCanvas = (w, h) => {\r\n var canvas = document.createElement(\"canvas\");\r\n canvas.width = w;\r\n canvas.height = h;\r\n return canvas;\r\n};\r\n\r\nexport function applyEdgeFilter(canvas, image) {\r\n const pix = 4;\r\n const blur = \"2px\";\r\n const brightness = \"50%\";\r\n\r\n const w = canvas.width,\r\n h = canvas.height;\r\n\r\n var designCtx = canvas.getContext(\"2d\");\r\n\r\n var filterCanvas = createCanvas(w, h);\r\n var designfilterCtx = filterCanvas.getContext(\"2d\");\r\n designfilterCtx.filter = `blur(${blur}) brightness(${brightness})`;\r\n designfilterCtx.drawImage(image, 0, 0, w, h);\r\n\r\n const designfilterData = designfilterCtx.getImageData(0, 0, pix, h);\r\n designCtx.putImageData(designfilterData, 0, 0);\r\n\r\n const designfilterData2 = designfilterCtx.getImageData(0, 0, w, pix);\r\n designCtx.putImageData(designfilterData2, 0, 0);\r\n\r\n const designfilterData3 = designfilterCtx.getImageData(0, h - pix, w, pix);\r\n designCtx.putImageData(designfilterData3, 0, h - pix);\r\n\r\n const designfilterData4 = designfilterCtx.getImageData(w - pix, 0, pix, h);\r\n designCtx.putImageData(designfilterData4, w - pix, 0);\r\n return canvas;\r\n}\r\nexport function applyBWMask(maskCanvas, imageUrl, maskUrl, callback) {\r\n //console.log(imageUrl, maskUrl);\r\n const { width, height } = maskCanvas;\r\n const tempCanvas = createCanvas(width, height);\r\n const maskCtx = maskCanvas.getContext(\"2d\");\r\n const tempCtx = tempCanvas.getContext(\"2d\");\r\n\r\n const img = new Image();\r\n img.src = imageUrl;\r\n img.crossOrigin = \"Anonymous\";\r\n img.onload = () => {\r\n maskCanvas.width = width;\r\n maskCanvas.height = height;\r\n maskCtx.drawImage(img, 0, 0, width, height);\r\n const maskImg = new Image();\r\n maskImg.src = maskUrl;\r\n maskImg.crossOrigin = \"Anonymous\";\r\n maskImg.onload = () => {\r\n tempCanvas.width = width;\r\n tempCanvas.height = height;\r\n tempCtx.drawImage(maskImg, 0, 0, width, height);\r\n\r\n let imgData = maskCtx.getImageData(0, 0, width, height);\r\n let maskData = tempCtx.getImageData(0, 0, width, height);\r\n\r\n for (var i = 0; i < maskData.data.length; i += 4) {\r\n imgData.data[i + 3] = 255 - maskData.data[i];\r\n }\r\n maskCtx.putImageData(imgData, 0, 0);\r\n callback(maskCanvas);\r\n };\r\n };\r\n}\r\nexport const applyMask = (canvas, imgUrl, maskUrl) => {\r\n const { width, height } = canvas;\r\n const tempCanvas = createCanvas(width, height);\r\n const ctx = canvas.getContext(\"2d\");\r\n const tempCtx = tempCanvas.getContext(\"2d\");\r\n\r\n const readUrls = [readImage(imgUrl), readImage(maskUrl)];\r\n return Promise.all(readUrls).then(images => {\r\n const image = images[0];\r\n const mask = images[1];\r\n\r\n ctx.drawImage(image, 0, 0, width, height);\r\n tempCtx.drawImage(mask, 0, 0, width, height);\r\n\r\n let imgData = ctx.getImageData(0, 0, width, height);\r\n let maskData = tempCtx.getImageData(0, 0, width, height);\r\n\r\n for (let i = 0; i < maskData.data.length; i += 4) {\r\n imgData.data[i + 3] = 255 - maskData.data[i];\r\n }\r\n ctx.putImageData(imgData, 0, 0);\r\n });\r\n};\r\n\r\nexport const bnwToTransparency = (canvas, bnwUrl, amount) => {\r\n const { width, height } = canvas;\r\n const ctx = canvas.getContext(\"2d\");\r\n\r\n const image = new Image();\r\n image.src = bnwUrl;\r\n image.crossOrigin = \"Anonymous\";\r\n image.onload = function () {\r\n ctx.drawImage(image, 0, 0, width, height);\r\n\r\n let imageData = ctx.getImageData(0, 0, width, height);\r\n for (var i = 0; i < imageData.data.length; i += 4) {\r\n imageData.data[i + 3] = (255 - imageData.data[i]) * amount;\r\n imageData.data[i] = 0;\r\n imageData.data[i + 1] = 0;\r\n imageData.data[i + 2] = 0;\r\n }\r\n ctx.putImageData(imageData, 0, 0);\r\n };\r\n};\r\n\r\nexport const resizeCanvas = (canvas, width, height) => {\r\n canvas.style.width = `${width}px`;\r\n canvas.style.height = `${height}px`;\r\n};\r\nexport const clearCanvas = (canvas, w, h) => {\r\n canvas.getContext(\"2d\").clearRect(0, 0, w, h);\r\n};\r\nexport const downloadImageData = (canvas, name, mime) => {\r\n const mimetype = \"jpeg\";\r\n const downloadBlob = (blob) => {\r\n var url = URL.createObjectURL(blob);\r\n var anchor = document.createElement(\"a\");\r\n anchor.href = url;\r\n anchor.setAttribute(\"download\", name);\r\n\r\n setTimeout(function () {\r\n if (navigator.msSaveOrOpenBlob) {\r\n navigator.msSaveOrOpenBlob(blob, name);\r\n } else {\r\n anchor.click();\r\n }\r\n }, 100);\r\n }\r\n const type = `image/${mimetype}`;\r\n console.log(type);\r\n if (canvas.toBlob) {\r\n canvas.toBlob(downloadBlob, type, 0.95);\r\n return\r\n }\r\n const dataurl = canvas.toDataURL(type, 0.95);\r\n downloadBlob(dataURItoBlob(dataurl));\r\n};\r\n\r\nexport const canvasToBlobPromise = canvas =>\r\n new Promise((resolve, reject) => {\r\n if (canvas.toBlob)\r\n canvas.toBlob(resolve)\r\n if (canvas.msToBlob)\r\n canvas.msToBlob(resolve)\r\n const dataurl = canvas.toDataURL()\r\n resolve(dataURItoBlob(dataurl));\r\n });\r\nfunction dataURItoBlob(dataURI) {\r\n // convert base64 to raw binary data held in a string\r\n // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this\r\n var byteString = atob(dataURI.split(',')[1]);\r\n\r\n // separate out the mime component\r\n var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]\r\n\r\n // write the bytes of the string to an ArrayBuffer\r\n var ab = new ArrayBuffer(byteString.length);\r\n\r\n // create a view into the buffer\r\n var ia = new Uint8Array(ab);\r\n\r\n // set the bytes of the buffer to the correct values\r\n for (var i = 0; i < byteString.length; i++) {\r\n ia[i] = byteString.charCodeAt(i);\r\n }\r\n\r\n // write the ArrayBuffer to a blob, and you're done\r\n var blob = new Blob([ab], { type: mimeString });\r\n return blob;\r\n\r\n}\r\nexport const dataURLtoBlobURL = dataurl => {\r\n return new Promise(resolve => {\r\n let blob = dataURItoBlob(dataurl);\r\n const url = URL.createObjectURL(blob);\r\n resolve(url);\r\n });\r\n}","/* eslint-disable no-useless-escape */\r\nimport axios from \"axios\";\r\nimport convert from \"convert-units\";\r\nimport Pako from \"pako\";\r\nimport seedrandom from \"seedrandom\";\r\nimport { createCanvas } from \"./canvasutils\";\r\n\r\nexport function convertArrIntoRad(arrDeg) {\r\n return arrDeg.map(angle => (angle * Math.PI) / 180);\r\n}\r\nexport const convertArrintoDeg = arrRad => {\r\n return arrRad.map(angle => (angle * 180) / Math.PI);\r\n};\r\n\r\nexport function fitImageToContainer(image, container) {\r\n let { width: containerwidth, height: containerheight } = container;\r\n let { width: imagewidth, height: imageheight } = image;\r\n let width = imagewidth,\r\n height = imageheight;\r\n if (imagewidth > imageheight) {\r\n if (width > containerwidth) {\r\n height = (imageheight * containerwidth) / imagewidth;\r\n width = containerwidth;\r\n }\r\n if (height > containerheight) {\r\n width = (imagewidth * containerheight) / imageheight;\r\n height = containerheight;\r\n }\r\n } else {\r\n if (height > containerheight) {\r\n width = (imagewidth * containerheight) / imageheight;\r\n height = containerheight;\r\n }\r\n if (width > containerwidth) {\r\n height = (imageheight * containerwidth) / imageheight;\r\n width = containerwidth;\r\n }\r\n }\r\n return { width, height };\r\n}\r\n\r\nexport const downloadAsJSON = (object, name) => {\r\n const dataStr = \"data:text/json;charset=utf-8,\" + encodeURIComponent(JSON.stringify(object));\r\n const dlAnchorElem = document.createElement(\"a\");\r\n dlAnchorElem.setAttribute(\"href\", dataStr);\r\n dlAnchorElem.setAttribute(\"download\", `${name}.json`);\r\n dlAnchorElem.click();\r\n};\r\nexport const readImage = (url, i) => {\r\n let imageUrl = url;\r\n if (url instanceof Blob) {\r\n imageUrl = URL.createObjectURL(url);\r\n }\r\n return new Promise((resolve, reject) => {\r\n let image = new Image();\r\n image.crossOrigin = \"Anonymous\";\r\n image.src = imageUrl;\r\n image.onload = () => {\r\n if (i) resolve({ image, ...i });\r\n else resolve(image);\r\n };\r\n image.onerror = reject;\r\n });\r\n};\r\n\r\nexport const readJSON = url => {\r\n return axios.get(url).then(response => response.data);\r\n};\r\n\r\nexport function fitIntoContainer(image, container) {\r\n let { offsetWidth: containerwidth, offsetHeight: containerheight } = container;\r\n let imagewidth = image.width,\r\n imageheight = image.height;\r\n if (!image.width || !image.height) return { width: containerwidth, height: containerheight };\r\n let width = imagewidth,\r\n height = imageheight;\r\n const wdif = width - containerwidth;\r\n const hdif = height - containerheight;\r\n if (imagewidth > imageheight) {\r\n if (wdif > hdif) {\r\n height = containerheight;\r\n width = (imagewidth * containerheight) / imageheight;\r\n } else {\r\n width = containerwidth;\r\n height = (imageheight * containerwidth) / imagewidth;\r\n }\r\n // if (width > containerwidth) {\r\n // }\r\n } else {\r\n // if (height > containerheight) {\r\n // width = (imagewidth * containerheight) / imageheight;\r\n // height = containerheight;\r\n // }\r\n // if (width > containerwidth) {\r\n // height = (imageheight * containerwidth) / imageheight;\r\n // width = containerwidth;\r\n // }\r\n }\r\n return { width, height };\r\n}\r\n\r\nexport function resizeKeepingAspect(image, container, fitType = \"fit_inside\", resolution = 1) {\r\n let { width: containerwidth, height: containerheight } = container;\r\n let { width: imagewidth, height: imageheight } = image;\r\n if (!imagewidth || !imageheight) return { width: containerwidth, height: containerheight };\r\n if (containerheight === 0 || containerwidth === 0)\r\n return { width: imagewidth, height: imageheight };\r\n let width = imagewidth,\r\n height = imageheight;\r\n\r\n switch (fitType) {\r\n case \"fit_inside\":\r\n if (imagewidth > imageheight) {\r\n if (width > containerwidth) {\r\n height = (imageheight * containerwidth) / imagewidth;\r\n width = containerwidth;\r\n }\r\n if (height > containerheight) {\r\n width = (imagewidth * containerheight) / imageheight;\r\n height = containerheight;\r\n }\r\n } else {\r\n if (height > containerheight) {\r\n width = (imagewidth * containerheight) / imageheight;\r\n height = containerheight;\r\n }\r\n if (width > containerwidth) {\r\n height = (imageheight * containerwidth) / imagewidth;\r\n width = containerwidth;\r\n }\r\n }\r\n break;\r\n case \"crop\":\r\n const wdif = width - containerwidth;\r\n const hdif = height - containerheight;\r\n if (wdif > hdif) {\r\n height = containerheight;\r\n width = (imagewidth * containerheight) / imageheight;\r\n } else {\r\n width = containerwidth;\r\n height = (imageheight * containerwidth) / imagewidth;\r\n }\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n width = width * resolution;\r\n height = height * resolution;\r\n return { width, height };\r\n}\r\nexport const convertUnit = (from, to, value, fixed) => {\r\n const converted = convert(value)\r\n .from(from)\r\n .to(to);\r\n if (fixed) return Number(converted.toFixed(fixed));\r\n else return converted;\r\n};\r\n// export const safeInvoke = (func)=>{\r\n// if(func) func\r\n// }\r\nexport const getExtension = path => {\r\n const fp = path.split(\".\");\r\n return fp[fp.length - 1];\r\n};\r\nexport const getFilenameWithoutExt = filename => {\r\n if (filename.lastIndexOf(\".\") > -1) {\r\n return filename.substr(0, filename.lastIndexOf(\".\"));\r\n }\r\n else\r\n return filename;\r\n}\r\nexport function isiPhone() {\r\n return (\r\n //Detect iPhone\r\n navigator.platform.indexOf(\"iPhone\") !== -1 ||\r\n //Detect iPad\r\n navigator.platform.indexOf(\"iPad\") !== -1 ||\r\n //Detect iPod\r\n navigator.platform.indexOf(\"iPod\") !== -1\r\n );\r\n}\r\nexport function scrollIntoViewIfNeeded(target) {\r\n var rect = target.getBoundingClientRect();\r\n if (rect.bottom > window.innerHeight) {\r\n target.scrollIntoView(false);\r\n }\r\n if (rect.top < 0) {\r\n target.scrollIntoView();\r\n }\r\n}\r\n\r\nexport const isIE = () =>\r\n window.navigator.userAgent.indexOf(\"MSIE \") > 0 ||\r\n // eslint-disable-next-line no-useless-escape\r\n !!navigator.userAgent.match(/Trident.*rv\\:11\\./);\r\n\r\nexport function convertNumberToFeetInch(f, unit) {\r\n if (unit !== \"ft\") return f;\r\n var ft = Math.floor(f);\r\n var inch = Math.round(12 * (f - ft));\r\n if (inch === 12) {\r\n ft++;\r\n inch = 0;\r\n }\r\n return ft + \"′\" + (inch > 0 ? inch + \"″\" : \"\");\r\n}\r\nexport function convertFeetInchToNumber(f, unit) {\r\n if (unit !== \"ft\") return f;\r\n var rex = /[-+]?[0-9]*\\.?[0-9]+/g;\r\n var match = f.match(rex);\r\n var feet, inch;\r\n if (match) {\r\n feet = parseFloat(match[0]);\r\n inch = match.length > 1 ? parseFloat(match[1]) : 0;\r\n if (feet > 0 && inch >= 0 && inch < 12) {\r\n return feet + inch / 12;\r\n }\r\n }\r\n return null;\r\n}\r\nexport function makeid(length) {\r\n var result = \"\";\r\n var characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\r\n var charactersLength = characters.length;\r\n for (var i = 0; i < length; i++) {\r\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\r\n }\r\n return result;\r\n}\r\nexport const leftFillNum = (num, targetLength) => num.toString().padStart(targetLength, 0);\r\nexport const convertTilePointToName = (i, j) => `${leftFillNum(i, 2)}_${leftFillNum(j, 2)}`;\r\nexport const convertNameToTilePoint = name => {\r\n const x = parseInt(name.trim().substring(0, 2));\r\n const y = parseInt(name.trim().substring(3, 5));\r\n return { x, y };\r\n};\r\n\r\nexport const getPathFromString = string => {\r\n const x = string.split(\"/\");\r\n x.pop();\r\n return x.join(\"/\");\r\n};\r\nexport const createAsyncQueue = (tasks, maxNumOfWorkers = 5) => {\r\n var numOfWorkers = 0;\r\n var taskIndex = 0;\r\n\r\n return new Promise(done => {\r\n const handleResult = index => result => {\r\n tasks[index] = result;\r\n numOfWorkers--;\r\n getNextTask();\r\n };\r\n const getNextTask = () => {\r\n if (numOfWorkers < maxNumOfWorkers && taskIndex < tasks.length) {\r\n tasks[taskIndex].then(handleResult(taskIndex)).catch(handleResult(taskIndex));\r\n taskIndex++;\r\n numOfWorkers++;\r\n getNextTask();\r\n } else if (numOfWorkers === 0 && taskIndex === tasks.length) {\r\n done(tasks);\r\n }\r\n };\r\n getNextTask();\r\n });\r\n};\r\nexport const mergeArraysWithoutDuplicate = (...arrays) => {\r\n let jointArray = [];\r\n\r\n arrays.forEach(array => {\r\n jointArray = [...jointArray, ...array];\r\n });\r\n const uniqueArray = jointArray.filter((item, index) => jointArray.indexOf(item) === index);\r\n return uniqueArray;\r\n};\r\nexport const areaOfellipse = (x, y) => Math.PI * x * y;\r\n\r\nexport const createVector = (p, camera, width, height) => {\r\n var vector = p.clone().project(camera);\r\n\r\n vector.x = ((vector.x + 1) / 2) * width;\r\n vector.y = (-(vector.y - 1) / 2) * height;\r\n\r\n return vector;\r\n};\r\n\r\nexport const getDesignPathInTitle = designPath => {\r\n if (!designPath) return \"\";\r\n const dotPos = designPath.lastIndexOf(\".\");\r\n designPath = designPath.substring(0, dotPos);\r\n\r\n let title = designPath\r\n .replace(/\\/\\./g, \"/\")\r\n .split(\"/\")\r\n .slice(1)\r\n .join(\"/\");\r\n return title;\r\n};\r\nexport const isMobileDevice =\r\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|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|phone)|xda|xiino/i.test(\r\n navigator.userAgent\r\n ) ||\r\n /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(\r\n navigator.userAgent.substr(0, 4)\r\n );\r\n\r\nexport const ismobileAndTabletCheck = function () {\r\n let check = false;\r\n (function (a) { 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|android|ipad|playbook|silk/i.test(a) || /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(a.substr(0, 4))) check = true; })(navigator.userAgent || navigator.vendor || window.opera);\r\n return check;\r\n};\r\n\r\nexport const shuffle = arra1 => {\r\n var ctr = arra1.length,\r\n temp,\r\n index;\r\n // While there are elements in the array\r\n while (ctr > 0) {\r\n // Pick a random index\r\n index = Math.floor(Math.random() * ctr);\r\n // Decrease ctr by 1\r\n ctr--;\r\n // And swap the last element with it\r\n temp = arra1[ctr];\r\n arra1[ctr] = arra1[index];\r\n arra1[index] = temp;\r\n }\r\n return arra1;\r\n};\r\n\r\nexport const getPalette = arra1 => {\r\n var ctr = arra1.length;\r\n let newColorPalette = new Array(ctr);\r\n while (ctr > 0) {\r\n ctr--;\r\n newColorPalette[ctr] = {\r\n Name: arra1[ctr].ColorName,\r\n Value: arra1[ctr].Color\r\n };\r\n }\r\n return newColorPalette;\r\n};\r\nexport const decodeColorsFromString = str =>\r\n safelyParseJSON(Pako.inflate(window.atob(str), { to: \"string\" }));\r\nexport const encodeColorsToString = colors =>\r\n window.btoa(Pako.deflate(JSON.stringify(colors), { to: \"string\" }));\r\nexport const safelyParseJSON = json => {\r\n // This function cannot be optimised, it's best to\r\n // keep it small!\r\n let parsed;\r\n try {\r\n parsed = JSON.parse(json);\r\n } catch (e) {\r\n // Oh well, but whatever...\r\n }\r\n return parsed; // Could be undefined!\r\n};\r\nexport function getJsonFromUrl(url) {\r\n if (!url) url = window.location.search;\r\n var query = url.substr(1);\r\n var result = {};\r\n query.split(\"&\").forEach(function (part) {\r\n var item = part.split(\"=\");\r\n result[item[0]] = decodeURIComponent(item[1]);\r\n });\r\n return result;\r\n}\r\n\r\nexport function getMaterialNameArray() {\r\n const materialArr = new Array(70).fill(\"\");\r\n window.TextureOptions.DefaultTextureNames.forEach((name, i) => {\r\n materialArr[i] = name;\r\n });\r\n if (window.TextureOptions.AdditionalTextureNames) {\r\n window.TextureOptions.AdditionalTextureNames.forEach((name, i) => {\r\n materialArr[i + 4] = name;\r\n });\r\n }\r\n window.TextureOptions.CustomTextureIndices.forEach((texIndex, i) => {\r\n materialArr[texIndex] = window.TextureOptions.CustomTextureNames[i];\r\n });\r\n return materialArr;\r\n}\r\n\r\nexport const getFromSessionStorage = (key) => {\r\n const item = sessionStorage.getItem(key);\r\n if (item === \"undefined\") return undefined\r\n if (item === \"null\") return null\r\n try {\r\n return JSON.parse(item)\r\n } catch (error) {\r\n return item\r\n }\r\n}\r\n\r\nexport const errorTypes = {\r\n INTERFACE_ERROR: {\r\n message: \"INTERFACE_ERROR\"\r\n },\r\n ANICENT_BROWSER: {\r\n message: \"ANICENT_BROWSER\"\r\n },\r\n NO_CONNECTION: {\r\n message: \"NO_CONNECTION\"\r\n },\r\n INVALID_LINK: {\r\n message: \"INVALID_LINK\"\r\n }\r\n};\r\nexport const overlayTextureinCanvas = ({ image, color, canvasSize, canvas }) => {\r\n const ctx = canvas.getContext(\"2d\");\r\n var rng = seedrandom(color);\r\n const start = Math.round(rng() * (256 - canvasSize));\r\n const can = createCanvas(image.width, image.height);\r\n can.getContext(\"2d\").drawImage(image, 0, 0);\r\n const imgData = can.getContext(\"2d\").getImageData(start, start, canvasSize, canvasSize);\r\n ctx.globalCompositeOperation = \"overlay\";\r\n can.width = canvasSize;\r\n can.height = canvasSize;\r\n can.getContext(\"2d\").putImageData(imgData, 0, 0);\r\n ctx.drawImage(can, 0, 0);\r\n};\r\nexport function makeUrl() {\r\n let res = \"\";\r\n Array.from(arguments).forEach((argument, index) => {\r\n if (argument) {\r\n res = `${res}${index === 0 ? \"\" : \"/\"}${argument}`;\r\n }\r\n });\r\n return res;\r\n}"],"sourceRoot":""}