{"version":3,"sources":["utils/orbit.js","assets/environment/envLowPoly.glb","assets/textures/hdr/nx.hdr","assets/textures/hdr/ny.hdr","assets/textures/hdr/nz.hdr","assets/textures/hdr/px.hdr","assets/textures/hdr/py.hdr","assets/textures/hdr/pz.hdr","assets/textures/roundshadow.png","assets/textures/clear-normal.jpeg","assets/textures/hotspot-dot.png","assets/textures/hotspot-ring.png","assets/images/sunrise-medical-logo-color.svg","assets/images/nitrum-logo.svg","assets/images/sunrise-medical-logo.png","assets/images/nitrum-logo.png","assets/images/wheelchair/frame.svg","assets/images/wheelchair/seat-sling.svg","assets/images/wheelchair/backrest.svg","assets/images/wheelchair/sideguard.svg","assets/images/wheelchair/footrest.svg","assets/images/wheelchair/casters.svg","assets/images/wheelchair/rear-wheels.svg","assets/images/wheelchair/wheel-locks.svg","assets/images/wheelchair/addon.svg","assets/images/wheelchair/hover/frame.svg","assets/images/wheelchair/hover/seat-sling.svg","assets/images/wheelchair/hover/backrest.svg","assets/images/wheelchair/hover/sideguard.svg","assets/images/wheelchair/hover/footrest.svg","assets/images/wheelchair/hover/casters.svg","assets/images/wheelchair/hover/rear-wheels.svg","assets/images/wheelchair/hover/wheel-locks.svg","assets/images/wheelchair/hover/addon.svg","store/navSlice.js","i18n/dict.js","i18n/index.js","data/config/index.js","data/materials/index.js","store/configSlice.js","store/index.js","components/viewer-components/fps-monitor.js","components/viewer-components/camera.js","components/viewer-components/environment.js","utils/disposeObject3D.js","assets/jsm/FlakesTexture.js","components/viewer-components/material-manager.js","components/viewer-components/wheelchair.js","components/viewer-components/hotspot.js","components/viewer-components/hotspots-manager.js","components/viewer-components/materialGroups.js","assets/images/preloader.svg","assets/images/plus.svg","assets/images/minus.svg","assets/images/refresh.svg","components/Viewer.js","assets/images/caret.svg","components/Header.js","components/Drawer.js","utils/previous-hook.js","components/ConfigFormBuilder.js","assets/images/download.svg","assets/images/facebook.svg","assets/images/twitter.svg","assets/images/email-alt.svg","assets/images/copy.svg","components/NavNitrum.js","assets/images/pencil.svg","components/YourNitrum.js","assets/images/environment.svg","components/Nav.js","assets/images/close.svg","components/Popover.js","assets/images/play.svg","assets/images/pause.svg","components/Modal.js","components/Tooltip.js","components/App.js","index.js"],"names":["module","exports","THREE","MOUSE","OrbitConstraint","object","this","target","Vector3","minDistance","maxDistance","Infinity","minZoom","maxZoom","minPolarAngle","maxPolarAngle","Math","PI","minAzimuthAngle","maxAzimuthAngle","enableDamping","dampingFactor","scope","EPS","theta","phi","phiDelta","thetaDelta","scale","panOffset","zoomChanged","getPolarAngle","getAzimuthalAngle","setPolarAngle","angle","forceUpdate","setZoom","value","getZoom","setAzimuthalAngle","rotateLeft","rotateUp","panLeft","v","distance","te","matrix","elements","set","multiplyScalar","add","panUp","pan","deltaX","deltaY","screenWidth","screenHeight","PerspectiveCamera","targetDistance","position","clone","sub","length","tan","fov","OrthographicCamera","right","left","top","bottom","console","warn","dollyIn","dollyScale","zoom","max","min","updateProjectionMatrix","dollyOut","offset","quat","Quaternion","setFromUnitVectors","up","quatInverse","inverse","lastPosition","lastQuaternion","copy","applyQuaternion","radius","x","sin","y","cos","z","lookAt","distanceToSquared","dot","quaternion","update","atan2","sqrt","OrbitControls","domElement","constraint","undefined","document","Object","defineProperty","get","getZoomScale","enabled","center","enableZoom","zoomSpeed","enableRotate","rotateSpeed","enablePan","keyPanSpeed","autoRotate","autoRotateSpeed","enableKeys","keys","LEFT","UP","RIGHT","BOTTOM","mouseButtons","ORBIT","ZOOM","MIDDLE","PAN","rotateStart","Vector2","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","STATE","state","target0","position0","zoom0","changeEvent","type","startEvent","endEvent","element","body","clientWidth","clientHeight","pow","onMouseDown","event","preventDefault","button","clientX","clientY","addEventListener","onMouseMove","onMouseUp","dispatchEvent","subVectors","removeEventListener","onMouseWheel","stopPropagation","delta","wheelDelta","detail","onKeyDown","keyCode","touchstart","touches","pageX","pageY","dx","dy","touchmove","touchend","contextmenu","reset","dispose","window","prototype","create","EventDispatcher","constructor","defineProperties","noZoom","noRotate","noPan","noKeys","staticMoving","dynamicDampingFactor","navSlice","createSlice","name","initialState","activePart","drawerOpen","nitrumOpen","preloaderVisible","backgroundVisible","popover","modal","tooltip","viewport","reducers","openDrawer","action","payload","closeDrawer","openNitrum","closeNitrum","showPreloader","hidePreloader","toggleBackground","showPopover","hidePopover","showModal","hideModal","showTooltip","hideTooltip","setViewport","actions","common","parts","map","_default","region","lang","country","locale","url","URL","location","toString","hostname","match","language","log","searchParams","has","regionParam","toUpperCase","test","origin","getLocaleInfoFromUrl","SM_URL","SM_LANG","SM_REGION","SM_COUNTRY","defaultLng","resources","DICT","i18n","use","initReactI18next","init","interpolation","escapeValue","defaultNS","fallbackLng","lng","FRAME","SEAT_SLING","BACKREST","SIDEGUARDS","FOOTREST","CASTERS","REAR_WHEELS","WHEEL_LOCKS","ADDONS","SETS","MATERIALS","configSlice","_code","_region","_country","_defaultsLoaded","_updatedPart","_updatedAttr","_framePath","_pushbarPath","part","attr","option","constraints","forEach","c","constrainedValue","values","find","val","shouldUpdateFrameRepositionableParts","inset","shouldUpdateBackrestRepositionableParts","push_handles","setDefaultsLoaded","buildConfigCode","materials","materialsMap","code","partKey","configMap","attrKey","hidden","selectedValue","assetType","selectedMaterial","linkKey","selectedOption","regional","options","el","replace","encode","configureStore","reducer","nav","navReducer","config","configReducer","FpsMonitor","beginTime","performance","Date","now","prevTime","frames","enable","disable","begin","end","time","fps","round","Camera","renderer","isMobile","degToRad","deg","radToDeg","rad","moveCamera","delay","completeHandler","posTo","controls","TweenLite","to","ease","Power1","easeOut","onUpdate","onComplete","zoomCamera","direction","zoomCameraTo","startWalkThrough","State","States","WALKTHROUGH","doWalkThrough","finishWalkthrough","setCamState","IDLE","index","data","cameraWalkThroughData","angleX","angleY","next","onCamFinish","walkThroughIndex","ratio","innerWidth","innerHeight","camera","OrbitControlsPlus","Orbit","screenSpacePanning","_state","LOCK","Environment","scene","createObjects","meshes","GLTFLoader","load","environment","gltf","mainScene","traverse","child","material","domeMaterial","transparent","depthWrite","opacity","envMaterial","groundMaterial","wrapS","wrapT","repeat","aoMap","normalMap","roughnessMap","ground","receiveShadow","UseShadows","createShadow","texture","shadowTexture","shadowMat","planeGeometry","rotateX","plane","renderOrder","createLights","directionalLight","castShadow","shadow","mapSize","width","height","near","far","directionalLight2","directionalLight3","pointLight","loadHdri","images","pmremGenerator","compileCubemapShader","hdrCubeMap","HDRCubeTextureLoader","setDataType","hdrCubeRenderTarget","fromCubemap","magFilter","needsUpdate","envMap","emit","loadModel","path","error","BackgroundEnabled","alphaTo","alpha","visible","ambientHDR","ambient_px","ambient_nx","ambient_py","ambient_ny","ambient_pz","ambient_nz","STUDIO","studioHDR","AMBIENT","_backgroundEnabled","_useShadows","useShadows","EventEmitter","maps","disposeObject3D","obj","geometry","bufferGeometry","FlakesTexture","canvas","createElement","context","getContext","fillStyle","fillRect","i","random","r","nx","ny","nz","l","beginPath","arc","fill","MaterialManager","_showMaterialReferences","lin","col","key","m","_createMaterial","color","carPaint","metalness","roughness","normals","transparency","tile","alphaMap","push","px","py","sphere","basepath","pkg","homepage","debug","render","textureLoader","clearNormal","normalMapFlake","anisotropy","HDR","then","_MISSING","hdr","hasOwnProperty","mat","envMapIntensity","Promise","resolve","reject","colour","useCarPaint","normalPath","self","diffuse","normal","textureCount","hasDiffuseMap","hasNormalMap","hasAlphaMap","onTextureLoaded","TextureLoader","flipY","Wheelchair","dracoDecoderPath","isGermany","f55Angle","dracoLoader","DRACOLoader","setDecoderPath","preload","mainGroup","materialManager","materialGroups","initialLoad","promises","partPath","_loadPart","all","result","oldPart","newPart","isF55","rotation","remove","catch","loader","setDRACOLoader","getObjectByName","materialPromises","materialGroup","targets","materialPromise","getMaterialByName","targetMaterial","targetChildren","targetChildrenLength","groupCollapsed","childMatName","userData","originalMatName","includes","groupEnd","materialName","children","setHdr","partName","getMaterialFromId","_lerpMaterialColor","colorTo","getHex","g","b","clipName","clip","findByName","clips","mixer","clipAction","play","HotSpot","materialCircle","materialRing","close","IsOpen","changeScale","Ring","Circle","open","mouseOver","IsOver","mouseOut","from","anim","kill","updateCameraPosition","Particle","circleGeometry","ringGeometry","_particle","particle","_ring","ring","_circle","circle","_isOver","isOver","_isOpen","isOpen","HotspotsManager","contentEl","updateHotSpots","category","hotSpots","h","toLowerCase","partConstrain","contain","hotspot","webglContent","mouse","colliders","raycaster","_onMouseMove","bind","_onMouseUp","texture1","hopspotDotTexture","texture2","hopspotRingTexture","matCircle","side","matRing","hotspotsData","hotSpot","collisions","_checkCollision","_getHotspotFromCollider","screenPosition","_getScreenPosition","setTimeout","offsetWidth","offsetHeight","setFromCamera","intersectObjects","len","widthHalf","heightHalf","vector","Projector","projectVector","setFromMatrixPosition","matrixWorld","MaterialGroups","props","_extends","assign","arguments","source","call","apply","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","cx","cy","stroke","strokeWidth","strokeDasharray","attributeName","repeatCount","dur","keyTimes","_ref","svgRef","title","style","margin","background","display","shapeRendering","viewBox","preserveAspectRatio","ref","ForwardRef","forwardRef","d","xmlSpace","className","id","enableBackground","mapDispatch","Viewer","animate","lastWidth","mount","onWindowResize","fpsMonitor","stats","wheelchair","hotspotsManager","dropFramesThreshold","dropFramesThresholdCounter","requestAnimationFrame","shareUrlUsesHash","shareUrlVersion","shadowMap","createStats","createRenderer","createScene","on","onHDRLoaded","onWheelchairLoaded","loadDefaultConfig","loadSavedConfig","onHotspotOver","onHotspotOut","onHotspotSelected","onHotspotSelectedDelayed","appendChild","prevProps","prevConfig","loadWheelchair","updateFrameRepositionableParts","backrest","push_handle","updateBackrestRepositionableParts","armrests","updateArmrestSideguards","newVal","oldVal","updatePartAttribute","onCategoryChange","attributes","optionsType","materialSet","defaultMaterial","defaults","filter","default","off","hasSavedConfig","hash","pathname","savedConfig","decode","split","version","parseInt","shift","partI","savedPartConfig","attrI","savedAttrKey","savedMaterial","_findMaterialByLinkKey","saved","forks","getSrcByOptionValue","casters","footrest","cushion","push_bar","sideguards","rear_wheels","breaks","safety","led_lights","f55","frame_common","lower_frame","sling","bag_common","brakes","getBaseMaterialGroup","loadParts","finally","_updateHotspots","currentCategory","led_lights_path","type_path","f55_path","unloadPart","frameMaterials","footRestMaterials","casterMaterials","addOnMaterials","backrestMaterials","sideGuardsMaterials","validatePartAttributeValue","updatePartsMaterials","newOption","src","updatePartAttribute_LoadPart","rearWheelsMaterials","seatSlingMaterials","wheelLocksMaterials","antialias","setSize","setPixelRatio","devicePixelRatio","outputEncoding","gammaFactor","autoClear","setClearColor","physicallyCorrectLights","toneMapping","toneMappingExposure","Stats","showPanel","dom","createHotSpots","aspect","prevCategory","axle_tube","utility_bag_right","push_handle_and_back","transKey","cameraX","cameraY","t","viewerShrinked","onClick","onZoomIn","onZoomOut","reloadDefaultConfig","Component","withTranslation","connect","transform","x1","y2","strokeLinecap","y1","Header","activePartDelayed","nitrumOpenDelayed","showCopiedFeedback","copyInput","createRef","prevPart","clearInterval","timerID","setState","prevNitrumOpen","showTitle","nitrumLogo","alt","sunriseLogo","configCode","Drawer","useTranslation","dispatch","useDispatch","useSelector","usePrevious","useRef","useEffect","current","SectionDisabledException","OptionDisabledException","ColorsetOptions","setConstrainedBy","DEFAULT","constrainTo","allowedMaterials","constrainerValue","ix","data-interact","data-item","backgroundColor","colorIcon","LabelOptions","country_constraints","exclude","constrained_by","ValueOptions","valueTransKey","Section","content","layout","useState","expanded","setExpanded","scrollHeight","setScrollHeight","section","collapsible","measuredRef","useCallback","node","gridSize","set_constrained_by","collapsibleClass","collapsibleStyle","ConfigFormBuilder","prevActivePart","setActivePartDelayed","scrollArea","timer","clearTimeout","scrollTop","clipRule","fillRule","NavNitrum","pdfMode","baseUrl","shareUrl","encodeURIComponent","text","subject","input","select","setSelectionRange","execCommand","getSelection","removeAllRanges","downloadPDF_HTML","downloadPDF_Form","lib","pdfform","xhr","XMLHttpRequest","responseType","onload","status","buf","filledPDF","fields","form","compoundVal","compound_val","relValue","blob","Blob","saveAs","response","send","doc","jsPDF","format","unit","querySelector","cloneNode","html2canvas","srcSize","getBoundingClientRect","addImage","save","desktop","href","getShareUrl","rel","readOnly","copyCode","downloadPDF","AttrDisabledException","selectedValueLabel","selectedValueColor","getAttribute","YourNitrum","setNitrumOpenDelayed","icon","Frame","activeIcon","FrameHover","SeatSling","SeatSlingHover","Backrest","BackrestHover","Sideguard","SideguardHover","Footrest","FootrestHover","Casters","CastersHover","RearWheels","RearWheelsHover","WheelLocks","WheelLocksHover","Addon","AddonHover","Nav","updateSelectionBoxLeft","currentTarget","selectionBoxLeft","offsetLeft","selectionIndex","sliderWidth","sliderContentWidth","sliderPrevActive","sliderNextActive","selectionBoxImmediateTranslation","selectionBoxSize","w","sliderEl","firstNavItemEl","calcSliderSize","setSelectionBoxSize","onWindowResizeDebounced","debounce","scrollWidth","scrollLeft","scrollLimit","dir","scrollBy","behavior","item","querySelectorAll","sliderGoTo","func","wait","immediate","timeout","args","later","callNow","items","label","active","e","onScroll","updateSliderControls","onSliderPrev","onSliderNext","Popover","popoverDelayed","positioned","showArrow","popoverEl","image","prevPopover","calcPosition","popoverHeight","bodyOffsetY","offsetTop","popoverWidth","targetX","targetY","hasImage","desc","onLoad","onImageLoaded","onError","onImageError","clamp","n","Modal","onDrag","dragMin","dragMax","dragPosPercent","jumpTo","duration","videoEl","currentTime","dragPos","onDragEnd","wasPlaying","isDragging","modalDelayed","elapsed","progress","isPlaying","video","scrubberBar","onDurationChange","onTimeUpdate","onPlay","onPauseOrEnd","prevModal","pause","rect","seconds","mins","floor","secs","thumbPos","autoPlay","togglePlay","onDragStart","onTouchStart","_secondsToMinutesAndSeconds","Tooltip","tooltipDelayed","prevTooltip","App","setViewportInfo","breakpoint","isTablet","isDesktop","useDiacritics","property","ReactDOM","StrictMode","store","getElementById"],"mappings":"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","file":"static/js/main.53856421.chunk.js","sourcesContent":["module.exports = function (THREE) {\n var MOUSE = THREE.MOUSE;\n if (!MOUSE) MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2 };\n\n /**\n * @author qiao / https://github.com/qiao\n * @author mrdoob / http://mrdoob.com\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author erich666 / http://erichaines.com\n */\n function OrbitConstraint(object) {\n this.object = object;\n\n // \"target\" sets the location of focus, where the object orbits around\n // and where it pans with respect to.\n this.target = new THREE.Vector3();\n\n // Limits to how far you can dolly in and out ( PerspectiveCamera only )\n this.minDistance = 0;\n this.maxDistance = Infinity;\n\n // Limits to how far you can zoom in and out ( OrthographicCamera only )\n this.minZoom = 0;\n this.maxZoom = Infinity;\n\n // How far you can orbit vertically, upper and lower limits.\n // Range is 0 to Math.PI radians.\n this.minPolarAngle = 0; // radians\n this.maxPolarAngle = Math.PI; // radians\n\n // How far you can orbit horizontally, upper and lower limits.\n // If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n this.minAzimuthAngle = -Infinity; // radians\n this.maxAzimuthAngle = Infinity; // radians\n\n // Set to true to enable damping (inertia)\n // If damping is enabled, you must call controls.update() in your animation loop\n this.enableDamping = false;\n this.dampingFactor = 0.25;\n\n ////////////\n // internals\n\n var scope = this;\n\n var EPS = 0.000001;\n\n // Current position in spherical coordinate system.\n var theta = 0;\n var phi = 0;\n\n // Pending changes\n var phiDelta = 0;\n var thetaDelta = 0;\n var scale = 1;\n var panOffset = new THREE.Vector3();\n var zoomChanged = false;\n\n // API\n\n this.getPolarAngle = function () {\n return phi;\n };\n\n this.getAzimuthalAngle = function () {\n return theta;\n };\n\n this.setPolarAngle = function (angle) {\n phi = angle;\n this.forceUpdate();\n };\n\n this.setZoom = function (value) {\n scale = value;\n this.forceUpdate();\n };\n\n this.getZoom = function () {\n return scale;\n };\n\n this.setAzimuthalAngle = function (angle) {\n theta = angle;\n this.forceUpdate();\n };\n\n this.setAzimuthalAngle = function (angle) {\n theta = angle;\n this.forceUpdate();\n };\n\n this.rotateLeft = function (angle) {\n thetaDelta -= angle;\n };\n\n this.rotateUp = function (angle) {\n phiDelta -= angle;\n };\n\n // pass in distance in world space to move left\n this.panLeft = (function () {\n var v = new THREE.Vector3();\n\n return function panLeft(distance) {\n var te = this.object.matrix.elements;\n\n // get X column of matrix\n v.set(te[0], te[1], te[2]);\n v.multiplyScalar(-distance);\n\n panOffset.add(v);\n };\n })();\n\n // pass in distance in world space to move up\n this.panUp = (function () {\n var v = new THREE.Vector3();\n\n return function panUp(distance) {\n var te = this.object.matrix.elements;\n\n // get Y column of matrix\n v.set(te[4], te[5], te[6]);\n v.multiplyScalar(distance);\n\n panOffset.add(v);\n };\n })();\n\n // pass in x,y of change desired in pixel space,\n // right and down are positive\n this.pan = function (deltaX, deltaY, screenWidth, screenHeight) {\n if (scope.object instanceof THREE.PerspectiveCamera) {\n // perspective\n var position = scope.object.position;\n var offset = position.clone().sub(scope.target);\n var targetDistance = offset.length();\n\n // half of the fov is center to top of screen\n targetDistance *= Math.tan(((scope.object.fov / 2) * Math.PI) / 180.0);\n\n // we actually don't use screenWidth, since perspective camera is fixed to screen height\n scope.panLeft((2 * deltaX * targetDistance) / screenHeight);\n scope.panUp((2 * deltaY * targetDistance) / screenHeight);\n } else if (scope.object instanceof THREE.OrthographicCamera) {\n // orthographic\n scope.panLeft(\n (deltaX * (scope.object.right - scope.object.left)) / screenWidth\n );\n scope.panUp(\n (deltaY * (scope.object.top - scope.object.bottom)) / screenHeight\n );\n } else {\n // camera neither orthographic or perspective\n console.warn(\n \"WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.\"\n );\n }\n };\n\n this.dollyIn = function (dollyScale) {\n if (scope.object instanceof THREE.PerspectiveCamera) {\n scale /= dollyScale;\n } else if (scope.object instanceof THREE.OrthographicCamera) {\n scope.object.zoom = Math.max(\n this.minZoom,\n Math.min(this.maxZoom, this.object.zoom * dollyScale)\n );\n scope.object.updateProjectionMatrix();\n zoomChanged = true;\n } else {\n console.warn(\n \"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\"\n );\n }\n };\n\n this.dollyOut = function (dollyScale) {\n if (scope.object instanceof THREE.PerspectiveCamera) {\n scale *= dollyScale;\n } else if (scope.object instanceof THREE.OrthographicCamera) {\n scope.object.zoom = Math.max(\n this.minZoom,\n Math.min(this.maxZoom, this.object.zoom / dollyScale)\n );\n scope.object.updateProjectionMatrix();\n zoomChanged = true;\n } else {\n console.warn(\n \"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\"\n );\n }\n };\n\n this.forceUpdate = (function () {\n var offset = new THREE.Vector3();\n\n // so camera.up is the orbit axis\n var quat = new THREE.Quaternion().setFromUnitVectors(\n object.up,\n new THREE.Vector3(0, 1, 0)\n );\n var quatInverse = quat.clone().inverse();\n\n var lastPosition = new THREE.Vector3();\n var lastQuaternion = new THREE.Quaternion();\n\n return function () {\n var position = this.object.position;\n\n offset.copy(position).sub(this.target);\n\n // rotate offset to \"y-axis-is-up\" space\n offset.applyQuaternion(quat);\n\n // restrict theta to be between desired limits\n theta = Math.max(\n this.minAzimuthAngle,\n Math.min(this.maxAzimuthAngle, theta)\n );\n\n // restrict phi to be between desired limits\n phi = Math.max(this.minPolarAngle, Math.min(this.maxPolarAngle, phi));\n\n // restrict phi to be betwee EPS and PI-EPS\n phi = Math.max(EPS, Math.min(Math.PI - EPS, phi));\n\n var radius = offset.length() * scale;\n\n // restrict radius to be between desired limits\n radius = Math.max(this.minDistance, Math.min(this.maxDistance, radius));\n\n // move target to panned location\n this.target.add(panOffset);\n\n offset.x = radius * Math.sin(phi) * Math.sin(theta);\n offset.y = radius * Math.cos(phi);\n offset.z = radius * Math.sin(phi) * Math.cos(theta);\n\n // rotate offset back to \"camera-up-vector-is-up\" space\n offset.applyQuaternion(quatInverse);\n\n position.copy(this.target).add(offset);\n\n this.object.lookAt(this.target);\n\n if (this.enableDamping === true) {\n thetaDelta *= 1 - this.dampingFactor;\n phiDelta *= 1 - this.dampingFactor;\n } else {\n thetaDelta = 0;\n phiDelta = 0;\n }\n\n //scale = 1;\n panOffset.set(0, 0, 0);\n\n // update condition is:\n // min(camera displacement, camera rotation in radians)^2 > EPS\n // using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n if (\n zoomChanged ||\n lastPosition.distanceToSquared(this.object.position) > EPS ||\n 8 * (1 - lastQuaternion.dot(this.object.quaternion)) > EPS\n ) {\n lastPosition.copy(this.object.position);\n lastQuaternion.copy(this.object.quaternion);\n zoomChanged = false;\n\n return true;\n }\n\n return false;\n };\n })();\n\n this.update = (function () {\n var offset = new THREE.Vector3();\n\n // so camera.up is the orbit axis\n var quat = new THREE.Quaternion().setFromUnitVectors(\n object.up,\n new THREE.Vector3(0, 1, 0)\n );\n var quatInverse = quat.clone().inverse();\n\n var lastPosition = new THREE.Vector3();\n var lastQuaternion = new THREE.Quaternion();\n\n return function () {\n var position = this.object.position;\n\n offset.copy(position).sub(this.target);\n\n // rotate offset to \"y-axis-is-up\" space\n offset.applyQuaternion(quat);\n\n // angle from z-axis around y-axis\n\n theta = Math.atan2(offset.x, offset.z);\n\n // angle from y-axis\n\n phi = Math.atan2(\n Math.sqrt(offset.x * offset.x + offset.z * offset.z),\n offset.y\n );\n\n theta += thetaDelta;\n phi += phiDelta;\n\n // restrict theta to be between desired limits\n theta = Math.max(\n this.minAzimuthAngle,\n Math.min(this.maxAzimuthAngle, theta)\n );\n\n // restrict phi to be between desired limits\n phi = Math.max(this.minPolarAngle, Math.min(this.maxPolarAngle, phi));\n\n // restrict phi to be betwee EPS and PI-EPS\n phi = Math.max(EPS, Math.min(Math.PI - EPS, phi));\n\n var radius = offset.length() * scale;\n\n // restrict radius to be between desired limits\n radius = Math.max(this.minDistance, Math.min(this.maxDistance, radius));\n\n // move target to panned location\n this.target.add(panOffset);\n\n offset.x = radius * Math.sin(phi) * Math.sin(theta);\n offset.y = radius * Math.cos(phi);\n offset.z = radius * Math.sin(phi) * Math.cos(theta);\n\n // rotate offset back to \"camera-up-vector-is-up\" space\n offset.applyQuaternion(quatInverse);\n\n position.copy(this.target).add(offset);\n\n this.object.lookAt(this.target);\n\n if (this.enableDamping === true) {\n thetaDelta *= 1 - this.dampingFactor;\n phiDelta *= 1 - this.dampingFactor;\n } else {\n thetaDelta = 0;\n phiDelta = 0;\n }\n\n scale = 1;\n panOffset.set(0, 0, 0);\n\n // update condition is:\n // min(camera displacement, camera rotation in radians)^2 > EPS\n // using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n if (\n zoomChanged ||\n lastPosition.distanceToSquared(this.object.position) > EPS ||\n 8 * (1 - lastQuaternion.dot(this.object.quaternion)) > EPS\n ) {\n lastPosition.copy(this.object.position);\n lastQuaternion.copy(this.object.quaternion);\n zoomChanged = false;\n\n return true;\n }\n\n return false;\n };\n })();\n }\n\n // This set of controls performs orbiting, dollying (zooming), and panning. It maintains\n // the \"up\" direction as +Y, unlike the TrackballControls. Touch on tablet and phones is\n // supported.\n //\n // Orbit - left mouse / touch: one finger move\n // Zoom - middle mouse, or mousewheel / touch: two finger spread or squish\n // Pan - right mouse, or arrow keys / touch: three finter swipe\n\n function OrbitControls(object, domElement) {\n var constraint = new OrbitConstraint(object);\n\n this.domElement = domElement !== undefined ? domElement : document;\n\n // API\n\n Object.defineProperty(this, \"constraint\", {\n get: function () {\n return constraint;\n },\n });\n\n this.getPolarAngle = function () {\n return constraint.getPolarAngle();\n };\n\n this.getAzimuthalAngle = function () {\n return constraint.getAzimuthalAngle();\n };\n\n this.setPolarAngle = function (angle) {\n return constraint.setPolarAngle(angle);\n };\n\n this.setZoom = function (value) {\n return constraint.setZoom(value);\n };\n\n this.getZoom = function (value) {\n return constraint.getZoom();\n };\n\n this.setAzimuthalAngle = function (angle) {\n return constraint.setAzimuthalAngle(angle);\n };\n\n this.dollyIn = function() {\n constraint.dollyIn(getZoomScale());\n }\n\n this.dollyOut = function() {\n constraint.dollyOut(getZoomScale());\n }\n\n // Set to false to disable this control\n this.enabled = true;\n\n // center is old, deprecated; use \"target\" instead\n this.center = this.target;\n\n // This option actually enables dollying in and out; left as \"zoom\" for\n // backwards compatibility.\n // Set to false to disable zooming\n this.enableZoom = true;\n this.zoomSpeed = 1.0;\n\n // Set to false to disable rotating\n this.enableRotate = true;\n this.rotateSpeed = 1.0;\n\n // Set to false to disable panning\n this.enablePan = true;\n this.keyPanSpeed = 7.0; // pixels moved per arrow key push\n\n // Set to true to automatically rotate around the target\n // If auto-rotate is enabled, you must call controls.update() in your animation loop\n this.autoRotate = false;\n this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n // Set to false to disable use of the keys\n this.enableKeys = true;\n\n // The four arrow keys\n this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n // Mouse buttons\n this.mouseButtons = {\n ORBIT: THREE.MOUSE.LEFT,\n ZOOM: THREE.MOUSE.MIDDLE,\n PAN: THREE.MOUSE.RIGHT,\n };\n\n ////////////\n // internals\n\n var scope = this;\n\n var rotateStart = new THREE.Vector2();\n var rotateEnd = new THREE.Vector2();\n var rotateDelta = new THREE.Vector2();\n\n var panStart = new THREE.Vector2();\n var panEnd = new THREE.Vector2();\n var panDelta = new THREE.Vector2();\n\n var dollyStart = new THREE.Vector2();\n var dollyEnd = new THREE.Vector2();\n var dollyDelta = new THREE.Vector2();\n\n var STATE = {\n NONE: -1,\n ROTATE: 0,\n DOLLY: 1,\n PAN: 2,\n TOUCH_ROTATE: 3,\n TOUCH_DOLLY: 4,\n TOUCH_PAN: 5,\n };\n\n var state = STATE.NONE;\n\n // for reset\n\n this.target0 = this.target.clone();\n this.position0 = this.object.position.clone();\n this.zoom0 = this.object.zoom;\n\n // events\n\n var changeEvent = { type: \"change\" };\n var startEvent = { type: \"start\" };\n var endEvent = { type: \"end\" };\n\n // pass in x,y of change desired in pixel space,\n // right and down are positive\n function pan(deltaX, deltaY) {\n var element =\n scope.domElement === document\n ? scope.domElement.body\n : scope.domElement;\n\n constraint.pan(deltaX, deltaY, element.clientWidth, element.clientHeight);\n }\n\n this.update = function () {\n if (this.autoRotate && state === STATE.NONE) {\n constraint.rotateLeft(getAutoRotationAngle());\n }\n\n if (constraint.update() === true) {\n this.dispatchEvent(changeEvent);\n }\n };\n\n this.reset = function () {\n state = STATE.NONE;\n\n this.target.copy(this.target0);\n this.object.position.copy(this.position0);\n this.object.zoom = this.zoom0;\n\n this.object.updateProjectionMatrix();\n this.dispatchEvent(changeEvent);\n\n this.update();\n };\n\n function getAutoRotationAngle() {\n return ((2 * Math.PI) / 60 / 60) * scope.autoRotateSpeed;\n }\n\n function getZoomScale() {\n return Math.pow(0.95, scope.zoomSpeed);\n }\n\n function onMouseDown(event) {\n if (scope.enabled === false) return;\n\n event.preventDefault();\n\n if (event.button === scope.mouseButtons.ORBIT) {\n if (scope.enableRotate === false) return;\n\n state = STATE.ROTATE;\n\n rotateStart.set(event.clientX, event.clientY);\n } else if (event.button === scope.mouseButtons.ZOOM) {\n if (scope.enableZoom === false) return;\n\n state = STATE.DOLLY;\n\n dollyStart.set(event.clientX, event.clientY);\n } else if (event.button === scope.mouseButtons.PAN) {\n if (scope.enablePan === false) return;\n\n state = STATE.PAN;\n\n panStart.set(event.clientX, event.clientY);\n }\n\n if (state !== STATE.NONE) {\n document.addEventListener(\"mousemove\", onMouseMove, false);\n document.addEventListener(\"mouseup\", onMouseUp, false);\n scope.dispatchEvent(startEvent);\n }\n }\n\n function onMouseMove(event) {\n if (scope.enabled === false) return;\n\n event.preventDefault();\n\n var element =\n scope.domElement === document\n ? scope.domElement.body\n : scope.domElement;\n\n if (state === STATE.ROTATE) {\n if (scope.enableRotate === false) return;\n\n rotateEnd.set(event.clientX, event.clientY);\n rotateDelta.subVectors(rotateEnd, rotateStart);\n\n // rotating across whole screen goes 360 degrees around\n constraint.rotateLeft(\n ((2 * Math.PI * rotateDelta.x) / element.clientWidth) *\n scope.rotateSpeed\n );\n\n // rotating up and down along whole screen attempts to go 360, but limited to 180\n constraint.rotateUp(\n ((2 * Math.PI * rotateDelta.y) / element.clientHeight) *\n scope.rotateSpeed\n );\n\n rotateStart.copy(rotateEnd);\n } else if (state === STATE.DOLLY) {\n if (scope.enableZoom === false) return;\n\n dollyEnd.set(event.clientX, event.clientY);\n dollyDelta.subVectors(dollyEnd, dollyStart);\n\n if (dollyDelta.y > 0) {\n constraint.dollyIn(getZoomScale());\n } else if (dollyDelta.y < 0) {\n constraint.dollyOut(getZoomScale());\n }\n\n dollyStart.copy(dollyEnd);\n } else if (state === STATE.PAN) {\n if (scope.enablePan === false) return;\n\n panEnd.set(event.clientX, event.clientY);\n panDelta.subVectors(panEnd, panStart);\n\n pan(panDelta.x, panDelta.y);\n\n panStart.copy(panEnd);\n }\n\n if (state !== STATE.NONE) scope.update();\n }\n\n function onMouseUp(/* event */) {\n if (scope.enabled === false) return;\n\n document.removeEventListener(\"mousemove\", onMouseMove, false);\n document.removeEventListener(\"mouseup\", onMouseUp, false);\n scope.dispatchEvent(endEvent);\n state = STATE.NONE;\n }\n\n function onMouseWheel(event) {\n if (\n scope.enabled === false ||\n scope.enableZoom === false ||\n state !== STATE.NONE\n )\n return;\n\n event.preventDefault();\n event.stopPropagation();\n\n var delta = 0;\n\n if (event.wheelDelta !== undefined) {\n // WebKit / Opera / Explorer 9\n\n delta = event.wheelDelta;\n } else if (event.detail !== undefined) {\n // Firefox\n\n delta = -event.detail;\n }\n\n if (delta > 0) {\n constraint.dollyOut(getZoomScale());\n } else if (delta < 0) {\n constraint.dollyIn(getZoomScale());\n }\n\n scope.update();\n scope.dispatchEvent(startEvent);\n scope.dispatchEvent(endEvent);\n }\n\n function onKeyDown(event) {\n if (\n scope.enabled === false ||\n scope.enableKeys === false ||\n scope.enablePan === false\n )\n return;\n\n // eslint-disable-next-line default-case\n switch (event.keyCode) {\n case scope.keys.UP:\n pan(0, scope.keyPanSpeed);\n scope.update();\n break;\n\n case scope.keys.BOTTOM:\n pan(0, -scope.keyPanSpeed);\n scope.update();\n break;\n\n case scope.keys.LEFT:\n pan(scope.keyPanSpeed, 0);\n scope.update();\n break;\n\n case scope.keys.RIGHT:\n pan(-scope.keyPanSpeed, 0);\n scope.update();\n break;\n }\n }\n\n function touchstart(event) {\n if (scope.enabled === false) return;\n\n switch (event.touches.length) {\n case 1: // one-fingered touch: rotate\n if (scope.enableRotate === false) return;\n\n state = STATE.TOUCH_ROTATE;\n\n rotateStart.set(event.touches[0].pageX, event.touches[0].pageY);\n break;\n\n case 2: // two-fingered touch: dolly\n if (scope.enableZoom === false) return;\n\n state = STATE.TOUCH_DOLLY;\n\n var dx = event.touches[0].pageX - event.touches[1].pageX;\n var dy = event.touches[0].pageY - event.touches[1].pageY;\n var distance = Math.sqrt(dx * dx + dy * dy);\n dollyStart.set(0, distance);\n break;\n\n case 3: // three-fingered touch: pan\n if (scope.enablePan === false) return;\n\n state = STATE.TOUCH_PAN;\n\n panStart.set(event.touches[0].pageX, event.touches[0].pageY);\n break;\n\n default:\n state = STATE.NONE;\n }\n\n if (state !== STATE.NONE) scope.dispatchEvent(startEvent);\n }\n\n function touchmove(event) {\n if (scope.enabled === false) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n var element =\n scope.domElement === document\n ? scope.domElement.body\n : scope.domElement;\n\n switch (event.touches.length) {\n case 1: // one-fingered touch: rotate\n if (scope.enableRotate === false) return;\n if (state !== STATE.TOUCH_ROTATE) return;\n\n rotateEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n rotateDelta.subVectors(rotateEnd, rotateStart);\n\n // rotating across whole screen goes 360 degrees around\n constraint.rotateLeft(\n ((2 * Math.PI * rotateDelta.x) / element.clientWidth) *\n scope.rotateSpeed\n );\n // rotating up and down along whole screen attempts to go 360, but limited to 180\n constraint.rotateUp(\n ((2 * Math.PI * rotateDelta.y) / element.clientHeight) *\n scope.rotateSpeed\n );\n\n rotateStart.copy(rotateEnd);\n\n scope.update();\n break;\n\n case 2: // two-fingered touch: dolly\n if (scope.enableZoom === false) return;\n if (state !== STATE.TOUCH_DOLLY) return;\n\n var dx = event.touches[0].pageX - event.touches[1].pageX;\n var dy = event.touches[0].pageY - event.touches[1].pageY;\n var distance = Math.sqrt(dx * dx + dy * dy);\n\n dollyEnd.set(0, distance);\n dollyDelta.subVectors(dollyEnd, dollyStart);\n\n if (dollyDelta.y > 0) {\n constraint.dollyOut(getZoomScale());\n } else if (dollyDelta.y < 0) {\n constraint.dollyIn(getZoomScale());\n }\n\n dollyStart.copy(dollyEnd);\n\n scope.update();\n break;\n\n case 3: // three-fingered touch: pan\n if (scope.enablePan === false) return;\n if (state !== STATE.TOUCH_PAN) return;\n\n panEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n panDelta.subVectors(panEnd, panStart);\n\n pan(panDelta.x, panDelta.y);\n\n panStart.copy(panEnd);\n\n scope.update();\n break;\n\n default:\n state = STATE.NONE;\n }\n }\n\n function touchend(/* event */) {\n if (scope.enabled === false) return;\n\n scope.dispatchEvent(endEvent);\n state = STATE.NONE;\n }\n\n function contextmenu(event) {\n event.preventDefault();\n }\n\n this.dispose = function () {\n this.domElement.removeEventListener(\"contextmenu\", contextmenu, false);\n this.domElement.removeEventListener(\"mousedown\", onMouseDown, false);\n this.domElement.removeEventListener(\"mousewheel\", onMouseWheel, false);\n this.domElement.removeEventListener(\n \"MozMousePixelScroll\",\n onMouseWheel,\n false\n ); // firefox\n\n this.domElement.removeEventListener(\"touchstart\", touchstart, false);\n this.domElement.removeEventListener(\"touchend\", touchend, false);\n this.domElement.removeEventListener(\"touchmove\", touchmove, false);\n\n document.removeEventListener(\"mousemove\", onMouseMove, false);\n document.removeEventListener(\"mouseup\", onMouseUp, false);\n\n window.removeEventListener(\"keydown\", onKeyDown, false);\n };\n\n this.domElement.addEventListener(\"contextmenu\", contextmenu, false);\n\n this.domElement.addEventListener(\"mousedown\", onMouseDown, false);\n this.domElement.addEventListener(\"mousewheel\", onMouseWheel, false);\n this.domElement.addEventListener(\n \"MozMousePixelScroll\",\n onMouseWheel,\n false\n ); // firefox\n\n this.domElement.addEventListener(\"touchstart\", touchstart, false);\n this.domElement.addEventListener(\"touchend\", touchend, false);\n this.domElement.addEventListener(\"touchmove\", touchmove, false);\n\n window.addEventListener(\"keydown\", onKeyDown, false);\n\n // force an update at start\n this.update();\n }\n\n OrbitControls.prototype = Object.create(THREE.EventDispatcher.prototype);\n OrbitControls.prototype.constructor = OrbitControls;\n\n Object.defineProperties(OrbitControls.prototype, {\n object: {\n get: function () {\n return this.constraint.object;\n },\n },\n\n target: {\n get: function () {\n return this.constraint.target;\n },\n\n set: function (value) {\n console.warn(\n \"THREE.OrbitControls: target is now immutable. Use target.set() instead.\"\n );\n this.constraint.target.copy(value);\n },\n },\n\n minDistance: {\n get: function () {\n return this.constraint.minDistance;\n },\n\n set: function (value) {\n this.constraint.minDistance = value;\n },\n },\n\n maxDistance: {\n get: function () {\n return this.constraint.maxDistance;\n },\n\n set: function (value) {\n this.constraint.maxDistance = value;\n },\n },\n\n minZoom: {\n get: function () {\n return this.constraint.minZoom;\n },\n\n set: function (value) {\n this.constraint.minZoom = value;\n },\n },\n\n maxZoom: {\n get: function () {\n return this.constraint.maxZoom;\n },\n\n set: function (value) {\n this.constraint.maxZoom = value;\n },\n },\n\n minPolarAngle: {\n get: function () {\n return this.constraint.minPolarAngle;\n },\n\n set: function (value) {\n this.constraint.minPolarAngle = value;\n },\n },\n\n maxPolarAngle: {\n get: function () {\n return this.constraint.maxPolarAngle;\n },\n\n set: function (value) {\n this.constraint.maxPolarAngle = value;\n },\n },\n\n minAzimuthAngle: {\n get: function () {\n return this.constraint.minAzimuthAngle;\n },\n\n set: function (value) {\n this.constraint.minAzimuthAngle = value;\n },\n },\n\n maxAzimuthAngle: {\n get: function () {\n return this.constraint.maxAzimuthAngle;\n },\n\n set: function (value) {\n this.constraint.maxAzimuthAngle = value;\n },\n },\n\n enableDamping: {\n get: function () {\n return this.constraint.enableDamping;\n },\n\n set: function (value) {\n this.constraint.enableDamping = value;\n },\n },\n\n dampingFactor: {\n get: function () {\n return this.constraint.dampingFactor;\n },\n\n set: function (value) {\n this.constraint.dampingFactor = value;\n },\n },\n\n // backward compatibility\n\n noZoom: {\n get: function () {\n console.warn(\n \"THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.\"\n );\n return !this.enableZoom;\n },\n\n set: function (value) {\n console.warn(\n \"THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.\"\n );\n this.enableZoom = !value;\n },\n },\n\n noRotate: {\n get: function () {\n console.warn(\n \"THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.\"\n );\n return !this.enableRotate;\n },\n\n set: function (value) {\n console.warn(\n \"THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.\"\n );\n this.enableRotate = !value;\n },\n },\n\n noPan: {\n get: function () {\n console.warn(\n \"THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.\"\n );\n return !this.enablePan;\n },\n\n set: function (value) {\n console.warn(\n \"THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.\"\n );\n this.enablePan = !value;\n },\n },\n\n noKeys: {\n get: function () {\n console.warn(\n \"THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.\"\n );\n return !this.enableKeys;\n },\n\n set: function (value) {\n console.warn(\n \"THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.\"\n );\n this.enableKeys = !value;\n },\n },\n\n staticMoving: {\n get: function () {\n console.warn(\n \"THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.\"\n );\n return !this.constraint.enableDamping;\n },\n\n set: function (value) {\n console.warn(\n \"THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.\"\n );\n this.constraint.enableDamping = !value;\n },\n },\n\n dynamicDampingFactor: {\n get: function () {\n console.warn(\n \"THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.\"\n );\n return this.constraint.dampingFactor;\n },\n\n set: function (value) {\n console.warn(\n \"THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.\"\n );\n this.constraint.dampingFactor = value;\n },\n },\n });\n\n return OrbitControls;\n};\n","module.exports = __webpack_public_path__ + \"static/media/envLowPoly.d142ae5a.glb\";","module.exports = __webpack_public_path__ + \"static/media/nx.d39770e9.hdr\";","module.exports = __webpack_public_path__ + \"static/media/ny.02d1271a.hdr\";","module.exports = __webpack_public_path__ + \"static/media/nz.d1b4ba58.hdr\";","module.exports = __webpack_public_path__ + \"static/media/px.b41802a3.hdr\";","module.exports = __webpack_public_path__ + \"static/media/py.795a9f16.hdr\";","module.exports = __webpack_public_path__ + \"static/media/pz.c2278a4b.hdr\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAACXBIWXMAAC4jAAAuIwF4pT92AAAGAGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTgtMDktMDNUMTg6NTQ6NTgrMDk6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTgtMDktMDNUMTg6NTQ6NTgrMDk6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE4LTA5LTAzVDE4OjU0OjU4KzA5OjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjljZDMwYzIyLWVlZWQtNGQyOC1iOGFmLTEyNDQ5Yjk4ZWExOCIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjk0Y2YxOTUxLTY3NGQtNTE0MC1hMTFiLWVhMGRiMWU4MWMyNSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjEyZDVhZjBlLTY1YTktNDBmNy05ZjM0LTQ2ZTVkYWY1ZmZkYyIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MTJkNWFmMGUtNjVhOS00MGY3LTlmMzQtNDZlNWRhZjVmZmRjIiBzdEV2dDp3aGVuPSIyMDE4LTA5LTAzVDE4OjU0OjU4KzA5OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OWNkMzBjMjItZWVlZC00ZDI4LWI4YWYtMTI0NDliOThlYTE4IiBzdEV2dDp3aGVuPSIyMDE4LTA5LTAzVDE4OjU0OjU4KzA5OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5vNdSEAAAeNklEQVR42u2di47byq5EW/b/f7KlA9x7DhAEkUTWg92yKSDIRJ7Ze/KoxWKRam/HcYy++urrN6+tAdBXXw2AvvrqqwHQV199NQD66quvBkBfffXVAOirr74aAH311VcDoK+++votAGzb1n9SD/t7Nf63u2I86LrTdwPg+wRe8Zd1NCAaAH3NE/s2Ufx3Qj8aCg2AvnSC34Ti3wQCRyBwNBAaAH3dixIRf1U7kLX9GQg0EBoAXeGTMJjVChwiCBztEBoA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\"","module.exports = \"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkFBQoFBQUFBQ8ICQUKFBEWFhQRExMYHCggGBolGxMTITEhJSkrLi4uFx8zODMsNygtLisBCgoKDQ0NDg0NDisZFRkrNysrKystKysrKysrKzcrLSsrKystKysrKy0rKysrKysrKysrKysrKysrKysrKysrK//AABEIAOEA4QMBIgACEQEDEQH/xAAVAAEBAAAAAAAAAAAAAAAAAAAABP/EABQQAQAAAAAAAAAAAAAAAAAAAAD/xAAXAQEBAQEAAAAAAAAAAAAAAAAAAQYE/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AsAbNzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAIACgAAAAAAAAAj/9k=\"","module.exports = __webpack_public_path__ + \"static/media/hotspot-dot.801ebbfc.png\";","module.exports = __webpack_public_path__ + \"static/media/hotspot-ring.2522f556.png\";","module.exports = __webpack_public_path__ + \"static/media/sunrise-medical-logo-color.3cd61caa.svg\";","module.exports = __webpack_public_path__ + \"static/media/nitrum-logo.9427f80e.svg\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/frame.5cac9571.svg\";","module.exports = __webpack_public_path__ + \"static/media/seat-sling.177e6507.svg\";","module.exports = __webpack_public_path__ + \"static/media/backrest.7fd561ac.svg\";","module.exports = __webpack_public_path__ + \"static/media/sideguard.5d46283b.svg\";","module.exports = __webpack_public_path__ + \"static/media/footrest.4165c66c.svg\";","module.exports = __webpack_public_path__ + \"static/media/casters.22cdcfdd.svg\";","module.exports = __webpack_public_path__ + \"static/media/rear-wheels.b162ba04.svg\";","module.exports = __webpack_public_path__ + \"static/media/wheel-locks.0ac233d8.svg\";","module.exports = __webpack_public_path__ + \"static/media/addon.96672427.svg\";","module.exports = __webpack_public_path__ + \"static/media/frame.8cb0e2fd.svg\";","module.exports = __webpack_public_path__ + \"static/media/seat-sling.001ecefa.svg\";","module.exports = __webpack_public_path__ + \"static/media/backrest.47fea978.svg\";","module.exports = __webpack_public_path__ + \"static/media/sideguard.3e25e4f2.svg\";","module.exports = __webpack_public_path__ + \"static/media/footrest.5fa72c78.svg\";","module.exports = __webpack_public_path__ + \"static/media/casters.c53b5546.svg\";","module.exports = __webpack_public_path__ + \"static/media/rear-wheels.93f2ec39.svg\";","module.exports = __webpack_public_path__ + \"static/media/wheel-locks.552e4c11.svg\";","module.exports = __webpack_public_path__ + \"static/media/addon.25082521.svg\";","import { createSlice } from \"@reduxjs/toolkit\";\n\nexport const navSlice = createSlice({\n name: \"nav\",\n initialState: {\n activePart: null,\n drawerOpen: false,\n nitrumOpen: false,\n preloaderVisible: false,\n backgroundVisible: false,\n popover: null,\n modal: null,\n tooltip: null,\n viewport: null\n },\n reducers: {\n openDrawer: (state, action) => {\n state.drawerOpen = true;\n state.activePart = action.payload;\n\n // close nitrum\n state.nitrumOpen = false;\n },\n closeDrawer: (state) => {\n state.drawerOpen = false;\n state.activePart = null;\n },\n openNitrum: (state) => {\n state.nitrumOpen = true;\n\n // close drawer\n state.drawerOpen = false;\n state.activePart = null;\n },\n closeNitrum: (state) => {\n state.nitrumOpen = false;\n },\n showPreloader: (state) => {\n state.preloaderVisible = true;\n },\n hidePreloader: (state) => {\n state.preloaderVisible = false;\n },\n toggleBackground: (state) => {\n state.backgroundVisible = !state.backgroundVisible;\n },\n showPopover: (state, action) => {\n state.popover = action.payload;\n },\n hidePopover: (state) => {\n state.popover = null;\n },\n showModal: (state, action) => {\n state.modal = action.payload;\n },\n hideModal: (state) => {\n state.modal = null;\n },\n showTooltip: (state, action) => {\n state.tooltip = action.payload;\n },\n hideTooltip: (state) => {\n state.tooltip = null;\n },\n setViewport: (state, action) => {\n state.viewport = action.payload;\n }\n },\n});\n\nexport const {\n openDrawer,\n closeDrawer,\n openNitrum,\n closeNitrum,\n showPreloader,\n hidePreloader,\n toggleBackground,\n showPopover,\n hidePopover,\n showModal,\n hideModal,\n showTooltip,\n hideTooltip,\n setViewport\n} = navSlice.actions;\n\nexport default navSlice.reducer;\n","import en_uk_common from \"./en_UK/common.json\";\nimport en_uk_parts from \"./en_UK/parts.json\";\n\nimport en_us_common from \"./en_US/common.json\";\nimport en_us_parts from \"./en_US/parts.json\";\n\nimport cs_common from \"./cs/common.json\";\nimport cs_parts from \"./cs/parts.json\";\n\nimport da_common from \"./da/common.json\";\nimport da_parts from \"./da/parts.json\";\n\nimport de_common from \"./de/common.json\";\nimport de_parts from \"./de/parts.json\";\n\nimport es_common from \"./es/common.json\";\nimport es_parts from \"./es/parts.json\";\n\nimport fr_common from \"./fr/common.json\";\nimport fr_parts from \"./fr/parts.json\";\n\nimport it_common from \"./it/common.json\";\nimport it_parts from \"./it/parts.json\";\n\nimport nl_common from \"./nl/common.json\";\nimport nl_parts from \"./nl/parts.json\";\n\nimport no_common from \"./no/common.json\";\nimport no_parts from \"./no/parts.json\";\n\nimport pl_common from \"./pl/common.json\";\nimport pl_parts from \"./pl/parts.json\";\n\nimport pt_common from \"./pt/common.json\";\nimport pt_parts from \"./pt/parts.json\";\n\nimport sv_common from \"./sv/common.json\";\nimport sv_parts from \"./sv/parts.json\";\n\nexport default {\n \"en_UK\": { common: en_uk_common, parts: en_uk_parts },\n \"en_US\": { common: en_us_common, parts: en_us_parts },\n \"cs\": { common: cs_common, parts: cs_parts },\n \"da\": { common: da_common, parts: da_parts },\n \"de\": { common: de_common, parts: de_parts },\n \"es\": { common: es_common, parts: es_parts },\n \"fr\": { common: fr_common, parts: fr_parts },\n \"it\": { common: it_common, parts: it_parts },\n \"nl\": { common: nl_common, parts: nl_parts },\n \"no\": { common: no_common, parts: no_parts },\n \"pl\": { common: pl_common, parts: pl_parts },\n \"pt\": { common: pt_common, parts: pt_parts },\n \"sv\": { common: sv_common, parts: sv_parts },\n};\n","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\nimport DICT from \"./dict\";\n\nconst debug = true;\n\nconst map = {\n _default: { region: \"EU\", lang: \"en_UK\", country: false },\n\n \"www.sunrisemedical.lat\": { region: \"US\", lang: \"es\", country: false }, // Spanish\n \"www.sunrisemedical.com.au\": { region: \"US\", lang: \"en_UK\", country: \"AUSTRALIA\" }, // English\n \"www.sunrisemedical.be\": { region: \"EU\", lang: \"de\", country: \"BELGIUM\" }, // German\n \"fr.sunrisemedical.be\": { region: \"EU\", lang: \"fr\", country: \"BELGIUM\" }, // French\n \"www.sunrisemedical.ca\": { region: \"US\", lang: \"en\", country: \"CANADA\" },\n \"www.medicco.cz\": { region: \"EU\", lang: \"cs\", country: \"CZECH_REPUBLIC\" }, // Czech\n \"www.sunrisemedical.dk\": { region: \"EU\", lang: \"da\", country: \"DENMARK\" }, // Danish\n \"www.sunrisemedical.de\": { region: \"EU\", lang: \"de\", country: \"GERMANY\" },\n \"www.sunrisemedical.es\": { region: \"EU\", lang: \"es\", country: \"SPAIN\" },\n \"www.sunrisemedical.fr\": { region: \"EU\", lang: \"fr\", country: \"FRANCE\" },\n \"www.sunrisemedical.eu\": { region: \"EU\", lang: \"en\", country: false },\n \"www.sunrisemedical.it\": { region: \"EU\", lang: \"it\", country: \"ITALY\" }, // Italian\n \"www.sunrisemedical.nl\": { region: \"EU\", lang: \"nl\", country: \"NETHERLANDS\" }, // Dutch\n \"www.sunrisemedical.no\": { region: \"EU\", lang: \"no\", country: \"NORWAY\" }, // Norwegian\n \"www.sunrisemedical.at\": { region: \"EU\", lang: \"de\", country: \"AUSTRIA\" },\n \"www.sunrise-medical.pl\": { region: \"EU\", lang: \"pl\", country: \"POLAND\" }, // Polish\n \"www.sunrisemedical.pt\": { region: \"EU\", lang: \"pt\", country: \"PORTUGAL\" }, // Portuguese\n \"www.sunrisemedical.ch\": { region: \"EU\", lang: \"de\", country: \"SWITZERLAND\" },\n \"www.sunrisemedical.se\": { region: \"EU\", lang: \"sv\", country: \"SWEDEN\" }, // Swedish\n \"www.sunrisemedical.co.uk\": { region: \"EU\", lang: \"en_UK\", country: \"UK\" },\n \"www.sunrisemedical.com\": { region: \"US\", lang: \"en_US\", country: \"US\" }\n};\n\nfunction getLocaleInfoFromUrl() {\n // const url = new URL(\"https://\" + \"www.sunrisemedical.fr\" + \"/something\");\n\n const url = new URL(window.location.toString());\n const hostname = url.hostname;\n const match = map[hostname] || false;\n\n let language = map._default.lang;\n let region = map._default.region;\n let country = map._default.country;\n\n if (match) {\n language = match.lang;\n region = match.region;\n country = map.country;\n } else {\n debug && console.log(\"I18N defaults\");\n }\n\n if (url.searchParams.has(\"lang\")) {\n const langParam = url.searchParams.get(\"lang\");\n language = langParam;\n }\n\n if (url.searchParams.has(\"region\")) {\n const regionParam = url.searchParams.get(\"region\").toUpperCase();\n if (/(US|EU)/.test(regionParam)) {\n region = regionParam;\n }\n }\n\n if (url.searchParams.has(\"country\")) {\n const countryParam = url.searchParams.get(\"country\").toUpperCase();\n country = countryParam;\n }\n\n debug && console.log(\"I18N\", language, country, region);\n\n return { url: url.origin, language, region, country };\n}\n\nconst locale = getLocaleInfoFromUrl();\n\nexport const SM_URL = locale.url;\nexport const SM_LANG = locale.language;\nexport const SM_REGION = locale.region;\nexport const SM_COUNTRY = locale.country;\n\nconst defaultLng = locale.language;\nconst resources = DICT;\n\ni18n.use(initReactI18next).init({\n interpolation: { escapeValue: false },\n defaultNS: \"common\",\n fallbackLng: defaultLng,\n lng: defaultLng,\n resources,\n});\n\nexport default i18n;\n","import FRAME from './frame.json';\nimport SEAT_SLING from './seat_sling.json';\nimport BACKREST from './backrest.json';\nimport SIDEGUARDS from './sideguards.json';\nimport FOOTREST from './footrest.json';\nimport CASTERS from './casters.json';\nimport REAR_WHEELS from './rear_wheels.json';\nimport WHEEL_LOCKS from './wheel_locks.json';\nimport ADDONS from './addons.json';\n\nexport default {\n FRAME,\n SEAT_SLING,\n BACKREST,\n SIDEGUARDS,\n FOOTREST,\n CASTERS,\n REAR_WHEELS,\n WHEEL_LOCKS,\n ADDONS\n}\n","import SETS from './sets.json';\nimport MATERIALS from './materials.json';\n\nexport default {\n SETS,\n MATERIALS\n}\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport { encode } from \"js-base64\";\nimport { SM_REGION, SM_COUNTRY } from \"../i18n\";\n\nimport configMap from \"../data/config\";\nimport materialsMap from \"../data/materials\";\n\nfunction shouldUpdateFrameRepositionableParts(part, attr) {\n return part === \"FRAME\" && (attr === \"angle\" || attr === \"inset\");\n}\n\nfunction shouldUpdateBackrestRepositionableParts(part, attr) {\n return (\n part === \"BACKREST\" && (attr === \"backrest\" || attr === \"push_handles\")\n );\n}\n\nexport const configSlice = createSlice({\n name: \"config\",\n initialState: {\n _code: \"\",\n _region: SM_REGION,\n _country: SM_COUNTRY,\n _defaultsLoaded: false,\n _updatedPart: null,\n _updatedAttr: null,\n _framePath: null,\n _pushbarPath: null,\n FRAME: {},\n SEAT_SLING: {},\n BACKREST: {},\n SIDEGUARDS: {},\n FOOTREST: {},\n CASTERS: {},\n REAR_WHEELS: {},\n WHEEL_LOCKS: {},\n ADDONS: {},\n },\n reducers: {\n set: (state, action) => {\n const { part, attr, option } = action.payload;\n const { value, constraints } = option;\n\n state[part][attr] = value;\n state._updatedPart = part;\n state._updatedAttr = attr;\n\n if (constraints) {\n constraints.forEach((c) => {\n const constrainedValue = state[c.part][c.attr];\n if (!c.values.find((val) => val === constrainedValue)) {\n state[c.part][c.attr] = c.values[0] || null;\n }\n });\n }\n\n // @todo reload default if a constraint has set the part to NULL\n // This is the case of the backrest push handle / push bar\n // ATM we restore default by adding a \"positive\" constraint to the other\n // parts, but that should be implemented as a \"resetDefaults\" propery.\n // For that we need to read the configMap here and find default\n\n /**\n * shouldUpdateFrameRepositionableParts:\n *\n * When FRAME angle|inset is changed we update the frame_path - this\n * change will make Viewer ignore the angle|inset change and just process\n * the frame_path change which triggers an udpate of the frame\n * repositionable parts: lower_frame, forks, casters and footrest\n *\n */\n if (shouldUpdateFrameRepositionableParts(part, attr)) {\n const angle = state[part].angle;\n const inset = state[part].inset;\n\n // undefined should only happen on default (initial) parts set\n // because we set the 'angle' before the inset\n if (typeof inset !== \"undefined\") {\n state._framePath = `${angle}_Degree_${inset}_Cm_Inset`;\n }\n }\n\n if (shouldUpdateBackrestRepositionableParts(part, attr)) {\n const push_handles = state[part].push_handles;\n state._pushbarPath = `Push_Bar_Options/FOR_${push_handles}`;\n }\n },\n setDefaultsLoaded: (state, action) => {\n state._defaultsLoaded = action.payload;\n },\n buildConfigCode: (state) => {\n const materials = materialsMap.MATERIALS;\n let code = \"v1-\"; // share link version\n\n for (const partKey in configMap) {\n const part = configMap[partKey];\n\n for (const attrKey in part) {\n const attr = part[attrKey];\n if (attr.hidden) {\n continue;\n }\n\n const selectedValue = state[partKey][attrKey];\n\n if (!selectedValue) {\n continue;\n }\n\n if (attr.assetType === \"material\") {\n const selectedMaterial = materials[selectedValue];\n if (selectedMaterial) {\n code += selectedMaterial.linkKey;\n } else {\n code += \"m!\";\n }\n } else {\n const isRegionalOption = attr.regional || false;\n const options = isRegionalOption\n ? attr.options[state._region]\n : attr.options;\n const selectedOption = options.find(\n (el) => el.value === selectedValue\n );\n\n if (selectedOption) {\n code += selectedOption.linkKey || \"o!\";\n } else {\n code += \"o?\";\n }\n }\n }\n\n code += \"-\";\n }\n\n code = code.replace(/-$/, \"\"); // remove trailing dash\n\n state._code = encode(code);\n },\n },\n});\n\nexport const { set, setDefaultsLoaded, buildConfigCode } = configSlice.actions;\n\nexport default configSlice.reducer;\n","import { configureStore } from '@reduxjs/toolkit';\nimport navReducer from './navSlice';\nimport configReducer from './configSlice';\n\nexport default configureStore({\n reducer: {\n nav: navReducer,\n config: configReducer\n },\n});\n","export default function FpsMonitor() {\n let beginTime = ( performance || Date ).now();\n let prevTime = beginTime;\n let frames = 0;\n let enabled = false;\n\n return {\n enable: () => {\n beginTime = ( performance || Date ).now();\n prevTime = beginTime;\n enabled = true;\n },\n \n disable: () => {\n enabled = false; \n },\n\n begin: () => {\n if (!enabled) {\n return false;\n }\n\n beginTime = ( performance || Date ).now();\n },\n\n end: () => {\n if (!enabled) {\n return false;\n }\n\n frames++;\n\n const time = ( performance || Date ).now();\n\n if (time >= prevTime + 1000) {\n const fps = Math.round((frames * 1000) / (time - prevTime));\n\n prevTime = time;\n frames = 0;\n\n return fps;\n } else {\n return false;\n }\n }\n }\n}","import * as THREE from \"three\";\nimport { TweenLite, Power1 } from \"gsap\";\nimport Orbit from \"../../utils/orbit\";\n\nimport cameraWalkThroughData from \"../../data/camera_walkthrough.json\";\n\nexport default class Camera {\n /**\n * Camera States\n */\n static States = {\n LOCK: \"lock\",\n IDLE: \"idle\",\n WALKTHROUGH: \"walkThroug\",\n };\n\n /**\n * Get current camera state\n */\n get State() {\n return this._state;\n }\n\n /**\n * Set camera state\n * @param {Camera.States} state - Camera States (LOCK / IDLE / WALKTHROUGH)\n */\n set State(state) {\n this._state = state;\n\n if (state === Camera.States.IDLE) {\n this.controls.enableZoom = true;\n this.controls.enabled = true;\n } else {\n this.controls.enableZoom = false;\n this.controls.enabled = false;\n }\n }\n\n constructor(renderer, isMobile) {\n const ratio = window.innerWidth / window.innerHeight;\n\n this.camera = new THREE.PerspectiveCamera(75, ratio, 0.1, 10000);\n this.camera.position.z = isMobile ? 1.8 : 0.8; // Default distance\n this.camera.position.y = 0.5;\n\n const OrbitControlsPlus = Orbit(THREE);\n\n this.controls = new OrbitControlsPlus(this.camera, renderer.domElement);\n this.controls.target.set(0, 0.3, 0);\n\n this.controls.enableDamping = true;\n this.controls.dampingFactor = 0.1;\n this.controls.rotateSpeed = 0.2;\n this.controls.screenSpacePanning = false;\n this.controls.enableZoom = true;\n this.controls.zoomSpeed = 1;\n this.controls.minDistance = isMobile ? 1 : 0.8; // close up\n this.controls.maxDistance = isMobile ? 2 : 1.5; // open\n this.controls.maxPolarAngle = Math.PI / 2;\n this.controls.enableKeys = false;\n this.controls.enablePan = false;\n this.controls.zoom0 = 0;\n this.controls.update();\n\n this.State = Camera.States.IDLE;\n this.moveCamera(0, 90, 1, 0);\n }\n\n /**\n * Convert Rad to Deg\n * @param {number} deg - Number in degs\n */\n degToRad = (deg) => {\n return (deg * Math.PI) / 180;\n };\n\n /**\n * Convert Deg to Rad\n * @param {number} rad - Number in radians\n */\n radToDeg = (rad) => {\n return (rad * 180) / Math.PI;\n };\n\n /**\n * Tween camera to specific angle\n */\n moveCamera = (x, y, zoom, time = 0.5, delay = 0, completeHandler) => {\n x = this.degToRad(x);\n y = this.degToRad(y);\n\n var posTo = {\n y: this.controls.getAzimuthalAngle(),\n x: this.controls.getPolarAngle(),\n zoom: this.controls.getZoom(),\n };\n TweenLite.to(posTo, time, {\n x: x,\n y: y,\n delay: delay,\n zoom: zoom,\n ease: Power1.easeOut,\n onUpdate: () => {\n this.controls.setPolarAngle(posTo.x);\n this.controls.setAzimuthalAngle(posTo.y);\n this.controls.setZoom(posTo.zoom);\n },\n onComplete: completeHandler,\n });\n };\n\n zoomCamera = (direction, time = 0.25, completeHandler) => {\n const zoom = direction < 0 ? 1.01 : 0.99;\n var posTo = {\n zoom: this.controls.getZoom(),\n };\n\n TweenLite.to(posTo, time, {\n zoom: zoom,\n ease: Power1.easeOut,\n onUpdate: () => {\n this.controls.setZoom(posTo.zoom);\n },\n onComplete: () => {\n console.log(this.controls.getZoom());\n typeof completeHandler === 'function' && completeHandler();\n },\n });\n\n /*\n if (direction < 0) {\n this.controls.dollyOut();\n } else {\n this.controls.dollyIn();\n }\n */\n };\n\n /**\n * Zoom should be in the decimals. Example: 0.98, 1.01\n * @param {double} zoom \n */\n zoomCameraTo = (zoom = 1.0, time = 0.25) => {\n var posTo = {\n zoom: this.controls.getZoom(),\n };\n\n TweenLite.to(posTo, time, {\n zoom: zoom,\n ease: Power1.easeOut,\n onUpdate: () => {\n this.controls.setZoom(posTo.zoom);\n }\n });\n };\n\n startWalkThrough = () => {\n this.State = Camera.States.WALKTHROUGH;\n this.doWalkThrough(0);\n };\n\n finishWalkthrough = () => {\n this.setCamState(Camera.States.IDLE);\n };\n\n doWalkThrough = (index) => {\n if (this.State !== Camera.States.WALKTHROUGH) return;\n\n const data = cameraWalkThroughData[index];\n this.moveCamera(data.angleX, data.angleY, data.zoom, data.time, 3, () => {\n const next = index + 1;\n\n if (next === cameraWalkThroughData.length) this.doWalkThrough(0);\n else this.doWalkThrough(next);\n });\n };\n\n onCamFinish = () => {\n this.walkThroughIndex += 1;\n\n if (this.walkThroughIndex === cameraWalkThroughData.length)\n this.walkThroughIndex = 0;\n\n this.doWalkThrough();\n };\n\n update = () => {\n\n \n this.controls.update();\n //console.log('y: ' , this.radToDeg(this.controls.getAzimuthalAngle()));\n //console.log('x: ' , this.radToDeg(this.controls.getPolarAngle()));\n };\n}\n","import EventEmitter from \"EventEmitter\";\nimport * as THREE from \"three\";\nimport { GLTFLoader } from \"three/examples/jsm/loaders/GLTFLoader\";\nimport { HDRCubeTextureLoader } from \"three/examples/jsm/loaders/HDRCubeTextureLoader\";\n\nimport { TweenLite, Power1 } from \"gsap\";\n\n// Path for the environment GLB\n\nimport environment from \"../../assets/environment/envLowPoly.glb\";\n\nimport ambient_nx from \"../../assets/textures/hdr/nx.hdr\";\nimport ambient_ny from \"../../assets/textures/hdr/ny.hdr\";\nimport ambient_nz from \"../../assets/textures/hdr/nz.hdr\";\nimport ambient_px from \"../../assets/textures/hdr/px.hdr\";\nimport ambient_py from \"../../assets/textures/hdr/py.hdr\";\nimport ambient_pz from \"../../assets/textures/hdr/pz.hdr\";\n\nimport shadowTexture from \"../../assets/textures/roundshadow.png\";\n\nexport default class Environment extends EventEmitter {\n get HDRI() {\n return {\n STUDIO: this.studioHDR,\n AMBIENT: this.ambientHDR,\n };\n }\n\n get BackgroundEnabled() {\n return this._backgroundEnabled;\n }\n\n set BackgroundEnabled(value) {\n this._backgroundEnabled = value;\n }\n\n constructor(scene, renderer) {\n super();\n\n this.renderer = renderer;\n this.scene = scene;\n this.ground = {};\n\n this.ambientHDR = [\n ambient_px,\n ambient_nx,\n ambient_py,\n ambient_ny,\n ambient_pz,\n ambient_nz,\n ];\n\n\n\n this.createObjects();\n this.createLights();\n this.loadHdri(this.ambientHDR);\n }\n\n /**\n * Load all neccessary models for the environment\n */\n createObjects = () => {\n\n\n //save the array of meshes to update the shadows later\n this.meshes = []\n const tile = 50;\n const loader = new GLTFLoader();\n\n loader.load(environment,(gltf) => {\n\n this.mainScene = gltf.scene;\n gltf.scene.position.y = 0.023;\n gltf.scene.traverse((child) => {\n if (!(child instanceof THREE.Mesh)) {\n return;\n } \n\n switch(child.material.name){\n case 'dome':\n \n this.domeMaterial = new THREE.MeshBasicMaterial({\n map:child.material.map,\n transparent: true,\n depthWrite: true,\n opacity: 0,\n });\n \n child.material = this.domeMaterial;\n this.domeMaterial.transparent = true;\n \n break;\n case 'envLowPoly':\n this.envMaterial = child.material;\n this.envMaterial.transparent = true;\n this.envMaterial.opacity = 0;\n\n break;\n case 'floor':\n this.groundMaterial = child.material;\n this.groundMaterial.transparent = true;\n this.groundMaterial.opacity = 0;\n \n this.groundMaterial.map.wrapS = THREE.RepeatWrapping;\n this.groundMaterial.map.wrapT = THREE.RepeatWrapping;\n this.groundMaterial.map.repeat = new THREE.Vector2(tile,tile);\n\n this.groundMaterial.aoMap.wrapS = THREE.RepeatWrapping;\n this.groundMaterial.aoMap.wrapT = THREE.RepeatWrapping;\n this.groundMaterial.aoMap.repeat = new THREE.Vector2(tile,tile);\n\n this.groundMaterial.normalMap.wrapS = THREE.RepeatWrapping;\n this.groundMaterial.normalMap.wrapT = THREE.RepeatWrapping;\n this.groundMaterial.normalMap.repeat = new THREE.Vector2(tile,tile);\n\n this.groundMaterial.roughnessMap.wrapS = THREE.RepeatWrapping;\n this.groundMaterial.roughnessMap.wrapT = THREE.RepeatWrapping;\n this.groundMaterial.roughnessMap.repeat = new THREE.Vector2(tile,tile);\n\n //Assign a local reference of the ground so we can change shadows\n this.ground = child;\n this.ground.receiveShadow = this.UseShadows;\n \n break;\n default:\n\n break;\n }\n this.toggleBackground(0,0 );\n });\n\n \n gltf.scene.scale.set(0.01, 0.01, 0.01);\n \n this.scene.add(gltf.scene);\n\n });\n\n\n this.createShadow();\n \n \n };\n\n\n /**\n * Create contact shadow\n */\n createShadow = () => {\n const loader = new THREE.TextureLoader();\n const texture = loader.load(shadowTexture);\n\n this.shadowMat = new THREE.MeshBasicMaterial({\n map: texture,\n transparent: true, // so we can see the ground\n depthWrite: true, // so we don't have to sort\n });\n\n const planeGeometry = new THREE.PlaneBufferGeometry(1.5, 1.52, 1, 1);\n planeGeometry.rotateX(-Math.PI / 2);\n\n const plane = new THREE.Mesh(planeGeometry, this.shadowMat);\n plane.position.set(0, 0.024, 0.15);\n plane.renderOrder = 3;\n\n this.scene.add(plane);\n };\n\n\n /**\n * Create Lights\n * @todo Light has to be done with auto team\n */\n createLights = () => {\n this.directionalLight = new THREE.DirectionalLight(0xfffdf1, 4 , 10);\n this.directionalLight.position.set(-0.7, 1, -0.5);\n this.scene.add(this.directionalLight);\n\n if(this.UseShadows)\n this.directionalLight.castShadow = true; \n \n const res = 256;\n this.directionalLight.shadow.mapSize.width = res; // default\n this.directionalLight.shadow.mapSize.height = res; // default\n this.directionalLight.shadow.camera.near = 0.1; // default\n this.directionalLight.shadow.camera.far = 100; // default\n \n \n const directionalLight2 = new THREE.DirectionalLight(0xfaf5d4, 3.0 , 10);\n directionalLight2.position.set(2.5, 0.5, 2);\n this.scene.add(directionalLight2);\n\n const directionalLight3 = new THREE.DirectionalLight(0xfaf5d4, 2.0 , 10);\n directionalLight3.position.set(-2.5, 0.5, -1);\n this.scene.add(directionalLight3);\n\n\n const pointLight = new THREE.PointLight(0xfaf5d4, 2.0 , 10);\n pointLight.position.set(1.5, 0, -1);\n this.scene.add(pointLight);\n\n };\n\n get UseShadows() {\n return this._useShadows;\n }\n\n set UseShadows(useShadows) {\n\n this.shadowMat.opacity = !useShadows ? 1 : 0;\n this.shadowMat.needsUpdate = true;\n this.ground.receiveShadow = useShadows;\n this.directionalLight.castShadow = useShadows; \n this._useShadows = useShadows;\n }\n\n /**\n * Load HDR\n * @param {array} images - Array of Images\n */\n loadHdri = (images) => {\n\n const pmremGenerator = new THREE.PMREMGenerator(this.renderer);\n pmremGenerator.compileCubemapShader();\n\n this.hdrCubeMap = new HDRCubeTextureLoader()\n .setDataType(THREE.UnsignedByteType)\n .load(images, () => {\n // console.log('images');\n const hdrCubeRenderTarget = pmremGenerator.fromCubemap(this.hdrCubeMap);\n\n\n this.hdrCubeMap.magFilter = THREE.LinearFilter;\n this.hdrCubeMap.needsUpdate = true;\n\n if(this.groundMaterial){\n this.groundMaterial.envMap = this.hdrCubeMap;\n this.groundMaterial.needsUpdate = true;\n }\n\n this.toggleBackground(0,0);\n this.emit(\"onHDRLoaded\", hdrCubeRenderTarget.texture);\n });\n };\n\n /**\n * Load Model\n * @todo Should we abstract a generic function in a Utils class to load 3D models?\n */\n loadModel = (path) => {\n const loader = new GLTFLoader();\n loader.load(\n path,\n (gltf) => {\n //this.scene.add( gltf.scene )s;\n },\n undefined,\n (error) => {\n console.error(\"error: \", error);\n }\n );\n };\n\n /**\n * Show or hide background\n * @param {bool} value - Show or hide background\n * @param {float} time - transition time\n */\n toggleBackground = (value, time = 0.2) => {\n\n if(!this.envMaterial || !this.groundMaterial)return;\n\n this.BackgroundEnabled = value;\n const alphaTo = {\n alpha: value ? 0 : 1,\n };\n TweenLite.to(alphaTo, time, {\n alpha: value ? 1 : 0,\n ease: Power1.easeOut,\n onUpdate: () => {\n this.envMaterial.opacity = alphaTo.alpha;\n this.envMaterial.needsUpdate = true;\n this.groundMaterial.opacity = alphaTo.alpha;\n this.groundMaterial.needsUpdate = true;\n this.domeMaterial.opacity = alphaTo.alpha;\n this.domeMaterial.needsUpdate = true;\n\n //If we don't have realtime shadows enabled we always use the contact shadow\n this.shadowMat.opacity = !this.UseShadows ? 1 : 1 - alphaTo.alpha;\n this.shadowMat.needsUpdate = true;\n\n if(alphaTo > 0 && !this.mainScene.visible)\n this.mainScene.visible = true;\n else if(alphaTo <= 0 && this.mainScene.visible)\n this.mainScene.visible = false;\n\n\n },\n });\n };\n}\n","import * as THREE from \"three\";\n\nconst maps = [\n 'map',\n 'lightMap',\n 'aoMap',\n 'emissiveMap',\n 'bumpMap',\n 'normalMap',\n 'displacementMap',\n 'roughnessMap',\n 'metalnessMap',\n 'alphaMap',\n 'envMaps',\n 'envMap',\n 'specularMap',\n 'gradientMap',\n];\n\nexport default function disposeObject3D(scene) {\n scene.traverse((obj) => {\n if (obj instanceof THREE.Mesh) {\n if (obj.material) {\n // obj.material.dispose(); \n\n maps.forEach((map) => {\n if (obj.material[map]) {\n // obj.material[map].dispose();\n // obj.material[map] = null; \n }\n });\n }\n\n if (obj.geometry) {\n obj.geometry.dispose();\n }\n\n if (obj.texture) {\n obj.texture.dispose();\n obj.texture = {};\n }\n\n if (obj.bufferGeometry) {\n obj.bufferGeometry.dispose();\n }\n }\n });\n}\n","/**\n * @author mrdoob / http://mrdoob.com/\n */\nclass FlakesTexture {\n constructor(width = 512, height = 512) {\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n\n const context = canvas.getContext(\"2d\");\n context.fillStyle = \"rgb(127,127,255)\";\n context.fillRect(0, 0, width, height);\n\n for (let i = 0; i < 4000; i++) {\n const x = Math.random() * width;\n const y = Math.random() * height;\n //const r = Math.random() * 3 + 3;\n const r = Math.random() * 2 + 0.8;\n\n let nx = Math.random() * 2 - 1;\n let ny = Math.random() * 2 - 1;\n let nz = 1.5;\n\n const l = Math.sqrt(nx * nx + ny * ny + nz * nz);\n\n nx /= l;\n ny /= l;\n nz /= l;\n\n context.fillStyle =\n \"rgb(\" +\n (nx * 127 + 127) +\n \",\" +\n (ny * 127 + 127) +\n \",\" +\n nz * 255 +\n \")\";\n context.beginPath();\n context.arc(x, y, r, 0, Math.PI * 2);\n context.fill();\n }\n\n return canvas;\n }\n}\n\nexport default FlakesTexture;\n","import * as THREE from \"three\";\nimport { TextureLoader } from \"three\";\n\nimport materialsMap from \"../../data/materials\";\nimport FlakesTexture from \"../../assets/jsm/FlakesTexture\";\nimport clearNormal from \"../../assets/textures/clear-normal.jpeg\";\nimport pkg from \"../../../package.json\";\n\nexport default class MaterialManager {\n constructor(scene, renderer) {\n this.basepath = (pkg.homepage || \"\") + \"/textures\";\n this.debug = false;\n\n this.scene = scene;\n this.render = renderer;\n\n this.materials = {};\n\n const textureLoader = new THREE.TextureLoader();\n this.normalMap = textureLoader.load(clearNormal);\n this.normalMap.wrapS = THREE.RepeatWrapping;\n this.normalMap.wrapT = THREE.RepeatWrapping;\n\n this.normalMapFlake = new THREE.CanvasTexture(new FlakesTexture());\n this.normalMapFlake.wrapS = THREE.RepeatWrapping;\n this.normalMapFlake.wrapT = THREE.RepeatWrapping;\n this.normalMapFlake.repeat.x = 10;\n this.normalMapFlake.repeat.y = 6;\n this.normalMapFlake.anisotropy = 16;\n\n this.HDR = null;\n\n this._createMaterial(\n \"_MISSING\", \"#FF0000\", null, false, 0.9, 0.5, null, 1.0, 1 , null\n ).then((material) => {\n this.materials._MISSING = material;\n });\n\n // this._showMaterialReferences(); \n }\n\n /**\n * Create Material Grid\n * @param {image} hdr - set HDRI Image\n */\n setHdr(hdr) {\n this.HDR = hdr;\n\n if (!this.materials.length) {\n return;\n }\n\n for (const key in this.materials) {\n if (this.materials.hasOwnProperty(key)) {\n const mat = this.materials[key];\n mat.envMap = hdr;\n mat.envMapIntensity = 1.1; \n mat.needsUpdate = true;\n \n }\n }\n };\n\n getMaterialByName(name) {\n return new Promise((resolve, reject) => {\n if (this.materials.hasOwnProperty(name)) {\n return resolve(this.materials[name]);\n }\n \n if (!materialsMap.MATERIALS.hasOwnProperty(name)) {\n console.warn(`Material \"${name}\" is not defined`);\n return resolve(this.materials[\"_MISSING\"]);\n }\n \n const data = materialsMap.MATERIALS[name];\n this.debug && console.log('data:', data);\n\n this._createMaterial(\n name,\n data.color,\n data.texture,\n data.carPaint,\n data.metalness,\n data.roughness,\n data.normals,\n data.transparency,\n data.tile,\n data.alphaMap\n ).then((material) => {\n\n this.materials[name] = material;\n resolve(this.materials[name]);\n }); \n });\n }\n\n /**\n * Create the material\n * @param {string} name - Name of the material\n * @param {#} colour - Material color\n * @param {bool} useCarPaint - Add the flakes of car paint\n * @param {float} metalness - Metalnes\n * @param {float} roughness - Roughness of the material\n */\n _createMaterial(name, colour, texture, useCarPaint, metalness, roughness, normalPath, transparency, tile , alphaMap) {\n const self = this;\n\n \n\n return new Promise((resolve, reject) => {\n let diffuse;\n let normal;\n let alpha;\n let textureCount = 0;\n const hasDiffuseMap = (texture && texture.length > 0);\n const hasNormalMap = (normalPath && normalPath.length > 0);\n const hasAlphaMap = (alphaMap && alphaMap.length > 0);\n\n if (hasDiffuseMap) textureCount++;\n if (hasNormalMap) textureCount++;\n if (hasAlphaMap) textureCount++;\n\n const onTextureLoaded = () => {\n textureCount--;\n if (textureCount === 0) {\n const material = onComplete();\n resolve(material);\n }\n }\n \n const onComplete = () => {\n const material = new THREE.MeshPhysicalMaterial({\n transparent: transparency < 1.0 ? true : false,\n opacity: transparency,\n //clearcoat: 0.8,\n //clearcoatRoughness: roughness,\n map: diffuse || null,\n metalness: metalness,\n roughness: roughness,\n color: colour,\n envMap: this.HDR,\n envMapIntensity: 0.4,\n roughnessMap: null,\n normalMap: useCarPaint ? this.normalMapFlake : normal,\n // clearcoatNormalMap: useCarPaint ? this.normalMapFlake : normal\n });\n\n if(alpha)\n material.alphaMap = alpha;\n\n material.name = name;\n\n return material;\n }\n\n if (textureCount === 0) {\n normal = this.normalMap;\n const material = onComplete();\n return resolve(material);\n }\n \n if (hasAlphaMap) {\n \n new TextureLoader().load(\n `${this.basepath}/${alphaMap}`,\n function(texture) {\n alpha = texture;\n if (tile !== 1) {\n alpha.wrapS = THREE.RepeatWrapping;\n alpha.wrapT = THREE.RepeatWrapping;\n alpha.repeat = new THREE.Vector2(tile, tile);\n }\n\n\n alpha.flipY = false;\n\n self.debug && console.log('alpha:', alpha);\n\n onTextureLoaded();\n },\n undefined,\n function(error) {\n console.error(name ,\" : \" , alphaMap , 'Alpha map loading error:', error);\n onTextureLoaded();\n }\n );\n }\n\n if (hasDiffuseMap) {\n \n\n new TextureLoader().load(\n `${this.basepath}/${texture}`,\n function(texture) {\n diffuse = texture;\n if (tile !== 1) {\n diffuse.wrapS = THREE.RepeatWrapping;\n diffuse.wrapT = THREE.RepeatWrapping;\n diffuse.repeat = new THREE.Vector2(tile, tile);\n }\n\n diffuse.flipY = false;\n \n\n self.debug && console.log('diffuse:', diffuse);\n\n onTextureLoaded();\n },\n undefined,\n function(error) {\n console.error('Diffuse map loading error:', error);\n onTextureLoaded();\n }\n );\n }\n \n if (hasNormalMap) {\n new TextureLoader().load(\n `${this.basepath}/${normalPath}`, \n function(texture) {\n normal = texture;\n normal.repeat.set(1, 1);\n if (tile !== 1) {\n normal.wrapS = THREE.RepeatWrapping;\n normal.wrapT = THREE.RepeatWrapping;\n normal.repeat = new THREE.Vector2(tile, tile);\n }\n\n normal.flipY = false;\n\n self.debug && console.log('normalPath: ' , normal);\n\n onTextureLoaded();\n }, \n undefined,\n function(error) {\n console.error('Normal map loading error:', error);\n onTextureLoaded();\n }\n );\n }\n });\n };\n\n /**\n * Create Material Grid\n */\n _showMaterialReferences = () => {\n let lin = 0;\n let col = 0;\n\n const materials = [];\n\n for(const key in materialsMap.MATERIALS){\n\n const m = materialsMap.MATERIALS[key]\n const material = this._createMaterial(\n key,\n m.color,\n m.texture,\n m.carPaint,\n m.metalness,\n m.roughness,\n m.normals,\n m.transparency,\n m.tile,\n m.alphaMap\n );\n materials.push(material);\n }\n\n materials.forEach((m, i) => {\n if (lin !== 0 && lin % 8 === 0) {\n lin = 0;\n col++;\n } else lin++;\n\n const px = -0.4 + lin * 0.1;\n const py = 0.2 + col * 0.1;\n\n const geometry = new THREE.SphereBufferGeometry(0.04, 32, 32);\n this.sphere = new THREE.Mesh(geometry, m);\n this.sphere.position.set(px, py, -0.4);\n this.scene.add(this.sphere);\n });\n };\n}\n","import EventEmitter from \"EventEmitter\";\nimport * as THREE from \"three\";\nimport { GLTFLoader } from \"three/examples/jsm/loaders/GLTFLoader\";\nimport { DRACOLoader } from \"three/examples/jsm/loaders/DRACOLoader\";\n\nimport { TweenLite } from \"gsap\";\n\nimport disposeObject3D from \"../../utils/disposeObject3D\";\nimport MaterialManager from \"./material-manager\";\nimport pkg from \"../../../package.json\";\n\nexport default class Wheelchair extends EventEmitter {\n constructor(scene, renderer, country) {\n super();\n\n this.debug = false;\n this.dracoDecoderPath = (pkg.homepage || \"\") + \"/gltf/\";\n this.basepath = (pkg.homepage || \"\") + \"/wheelchair\";\n this.isGermany = country === \"GERMANY\";\n this.f55Angle = 3;\n this.dracoLoader = new DRACOLoader();\n this.dracoLoader.setDecoderPath(this.dracoDecoderPath);\n this.dracoLoader.preload();\n\n this.mainGroup = new THREE.Group();\n\n this.scene = scene;\n this.renderer = renderer;\n this.materials = [];\n this.materialManager = new MaterialManager(this.scene, this.renderer);\n\n this.scene.add(this.mainGroup);\n }\n\n get UseShadows() {\n return this._useShadows;\n }\n\n set UseShadows(useShadows) {\n this._useShadows = useShadows;\n }\n\n loadParts(parts, materialGroups = false, initialLoad = false) {\n return new Promise((resolve, reject) => {\n const promises = [];\n for (let part in parts) {\n const partPath = parts[part];\n\n if (partPath === \"false\") {\n // src/path can be false when an option is \"NONE\"\n // We check for a string because we send all path values as strings\n // from Viewer and boolean false will be casted to string \"false\"\n continue;\n }\n\n promises.push(this._loadPart(part, partPath, materialGroups));\n }\n\n Promise.all(promises)\n .then((result) => {\n result.forEach(({ oldPart, newPart }) => {\n const isF55 = newPart.name === \"f55\";\n const target = isF55 ? this.scene : this.mainGroup;\n\n if (isF55) {\n this.mainGroup.rotation.x = THREE.Math.degToRad(this.f55Angle);\n newPart.position.z += 0.02;\n }\n\n target.add(newPart);\n if (oldPart) {\n target.remove(oldPart);\n disposeObject3D(oldPart);\n }\n });\n\n if (initialLoad) {\n this.emit(\"partsloaded\");\n }\n\n resolve();\n })\n .catch((error) => {\n reject(error);\n console.error(\"loadParts error:\", error);\n });\n });\n }\n\n /**\n * This shouldn't be called directly. Even if only loading one part,\n * use loadParts() as it may handle additional pre/post loading\n * logic\n *\n * @param {string} path - part path\n */\n _loadPart(name, path, materialGroups) {\n return new Promise((resolve, reject) => {\n if (!path) {\n reject(\"Invalid part path\");\n }\n\n const loader = new GLTFLoader();\n loader.setDRACOLoader(this.dracoLoader);\n\n loader.load(\n `${this.basepath}/${path}`,\n (gltf) => {\n // Add name to scene for future removal/cleanup\n gltf.scene.name = name;\n\n if (!materialGroups) {\n // Resolve with a ref to the new part to be added to scene\n // and a ref to the old part to be removed and disposed\n return resolve({\n newPart: gltf.scene,\n oldPart: this.scene.getObjectByName(name),\n });\n }\n\n // APPLY MATERIALS\n\n const materialPromises = [];\n\n materialGroups.forEach((materialGroup) => {\n if (materialGroup.targets[name]) {\n const materialPromise = this.materialManager\n .getMaterialByName(materialGroup.material)\n .then((targetMaterial) => {\n const targetChildren = materialGroup.targets[name];\n const targetChildrenLength = targetChildren.length;\n let i;\n\n this.debug && console.groupCollapsed(name);\n\n gltf.scene.traverse((child) => {\n if (!(child instanceof THREE.Mesh)) {\n return;\n }\n\n // keep the original material name in a child userData property.\n // We do this for subsequent material changes because we loose\n // the original name after setting a material.\n // Overriding the material.name doesn't work because materials\n // are shared and thus, linked by reference\n let childMatName = child.userData.originalMatName;\n\n if (!childMatName) {\n childMatName = child.material.name;\n child.userData.originalMatName = childMatName;\n }\n\n // Disable Sopur Logo on not German\n // Quick fix to be changed in a feature\n if (name === \"backrest\") {\n if (\n [\n \"pasted__yellow\",\n \"pasted__white\",\n \"pasted__black\",\n \"pasted__grey\",\n ].includes(childMatName)\n ) {\n // Quicky\n child.visible = this.isGermany ? false : true;\n } else if (\n [\n \"pasted__backupholstery_badgecolour1_option1\",\n \"pasted__backupholstery_badgecolour2_option1\",\n \"pasted__backupholstery_badge_option13\",\n ].includes(childMatName)\n ) {\n // Sopur\n child.visible = this.isGermany ? true : false;\n }\n }\n\n if (name === \"sideguards\") {\n if ([\"Sideguard_Logo_Quickie\"].includes(childMatName)) {\n child.visible = this.isGermany ? false : true;\n } else if (\n [\"Sideguard_Logo_Sopur\"].includes(childMatName)\n ) {\n child.visible = this.isGermany ? true : false;\n }\n }\n\n // SHADOWS\n // Still in test as we think it affect performance\n // Make sure we move that so some state where when we drop from 45fps we turn it off\n // Make a function taht update the existant mesh\n if (this.UseShadows) {\n if (name === \"cushion\" || name === \"backrest\") {\n child.receiveShadow = true;\n }\n\n if (child.material.name.includes(\"bolts\")) {\n child.receiveShadow = false;\n child.castShadow = false;\n } else {\n child.castShadow = true;\n }\n }\n\n this.debug && console.log(childMatName);\n\n for (i = 0; i < targetChildrenLength; i++) {\n const matches =\n name === \"rear_wheels\"\n ? childMatName === targetChildren[i]\n : childMatName.includes(targetChildren[i]);\n\n if (matches) {\n if (targetMaterial.name === \"HIDE\") {\n child.visible = false;\n }\n\n child.material = targetMaterial;\n break;\n }\n }\n });\n\n this.debug && console.groupEnd();\n });\n\n materialPromises.push(materialPromise);\n }\n });\n\n Promise.all(materialPromises).then((result) => {\n // Resolve with a ref to the new part to be added to scene\n // and a ref to the old part to be removed and disposed\n resolve({\n newPart: gltf.scene,\n oldPart: this.scene.getObjectByName(name),\n });\n });\n },\n null, // progress\n (error) => reject({ error: error, path: `${this.basepath}/${path}` })\n );\n });\n }\n\n updatePartsMaterials(parts, materialName) {\n return new Promise((resolve, reject) => {\n this.materialManager.getMaterialByName(materialName).then((material) => {\n for (const key in parts) {\n if (parts.hasOwnProperty(key)) {\n const part = this.scene.getObjectByName(key);\n const children = parts[key];\n const length = children.length;\n let i;\n\n if (!part || part === undefined) {\n console.warn(`Unable to get \"${key}\" part`);\n continue;\n }\n\n this.debug && console.groupCollapsed(key);\n part.traverse((child) => {\n if (!(child instanceof THREE.Mesh)) {\n return;\n }\n\n const childMatName = child.userData.originalMatName;\n this.debug && console.log(childMatName);\n for (i = 0; i < length; i++) {\n if (childMatName.includes(children[i])) {\n child.material = material;\n break;\n }\n }\n });\n this.debug && console.groupEnd();\n }\n }\n\n resolve();\n });\n });\n }\n\n /**\n * Removes a part from the scene and disposes object\n *\n * Usually _loadPart sets the part that should be removed (replaced), but in\n * one case (freestyle back) we need to remove a part (push bar) without\n * replacing.\n *\n * @param {string} name\n */\n unloadPart(name) {\n const part = this.scene.getObjectByName(name);\n const isF55 = name === \"f55\";\n const target = isF55 ? this.scene : this.mainGroup;\n\n if (!part) {\n console.warn(\"Attempt to remove a part that is not in the scene:\", name);\n return;\n }\n\n if (isF55) {\n this.mainGroup.rotation.x = THREE.Math.degToRad(0);\n }\n\n this.debug && console.log(\"Removed part from scene\", name);\n target.remove(part);\n disposeObject3D(part);\n }\n\n /**\n * Update materials HDR from the environment\n * Called by Viewer when Environment is loaded\n *\n * @todo check if there's no problem with setting it ahead of time when\n * parts/materials aren't loaded yet\n *\n * @param {hdr} hdr - HDR\n */\n setHdr(hdr) {\n this.HDR = hdr;\n this.materialManager.setHdr(this.HDR);\n\n if (!this.materials.length) {\n // console.log(\"setHdr() has no materials\");\n return;\n }\n\n this.materials.forEach((m) => {\n m.envMap = this.HDR;\n m.needsUpdate = true;\n });\n }\n\n /**\n * Update HDR from the environment\n * @param {string} partName - name of the part ( currently related with the name of the material )\n * @param {#} color - color\n */\n changeMaterialColor(partName, color) {\n const material = this.materialManager.getMaterialFromId(partName);\n\n if (!material) {\n console.log(\"Material not found:\", partName);\n return;\n }\n\n this._lerpMaterialColor(material, color, 0);\n }\n\n /**\n * Lerp material Color\n *\n * @param {material} material - Material\n * @param {#} color - color\n * @param {float} time - time\n */\n _lerpMaterialColor(material, color, time = 0.8) {\n const colorTo = new THREE.Color(material.color.getHex());\n const value = new THREE.Color(color);\n\n TweenLite.to(colorTo, time, {\n r: value.r,\n g: value.g,\n b: value.b,\n onUpdate: () => {\n material.color = colorTo;\n material.needsUpdate = true;\n },\n });\n }\n\n /**\n * Start Animation\n * @todo Implement or remove\n *\n * @param {string} clipName - clipName\n */\n animateChair(clipName) {\n const clip = THREE.AnimationClip.findByName(this.clips, clipName);\n const action = this.mixer.clipAction(clip);\n action.play();\n }\n\n /**\n * Called by Viewer updater (animate())\n */\n update() {\n if (this.mixer) {\n this.mixer.update(0.01);\n }\n }\n}\n","import * as THREE from \"three\";\nimport { TweenLite, Power1 } from \"gsap\";\n\nexport default class HotSpot {\n get Particle() {\n return this._particle;\n }\n\n set Particle(particle) {\n this._particle = particle;\n }\n\n get Ring() {\n return this._ring;\n }\n\n set Ring(ring) {\n this._ring = ring;\n }\n\n get Circle() {\n return this._circle;\n }\n\n set Circle(circle) {\n this._circle = circle;\n }\n\n get IsOver() {\n return this._isOver;\n }\n\n set IsOver(isOver) {\n this._isOver = isOver;\n }\n\n get IsOpen() {\n return this._isOpen;\n }\n\n set IsOpen(isOpen) {\n this._isOpen = isOpen;\n }\n\n constructor(position, materialCircle, materialRing) {\n let scale = 0.01;\n const circleGeometry = new THREE.PlaneBufferGeometry(\n scale,\n scale,\n scale,\n scale\n );\n scale = 0.05;\n const ringGeometry = new THREE.PlaneBufferGeometry(\n scale,\n scale,\n scale,\n scale\n );\n\n this.Circle = new THREE.Mesh(circleGeometry, materialCircle);\n this.Ring = new THREE.Mesh(ringGeometry, materialRing);\n\n this.Particle = new THREE.Group();\n this.Particle.add(this.Circle);\n this.Particle.add(this.Ring);\n this.Particle.renderOrder = 3;\n\n this.Particle.position.set(position.x, position.y, position.z);\n \n this.IsOpen = true;\n\n this.close(0);\n }\n\n close = (time = 0.3) => {\n if (!this.IsOpen) {\n return;\n }\n\n this.IsOpen = false;\n this.changeScale(this.Ring, 1, 0, time);\n this.changeScale(this.Circle, 1, 0, time);\n }\n\n open = (time = 0.3) => {\n if (this.IsOpen) {\n return;\n }\n\n this.IsOpen = true;\n this.changeScale(this.Ring, 0, 1, time);\n this.changeScale(this.Circle, 0, 1, time);\n }\n\n mouseOver = () => {\n if (!this.IsOpen || this.IsOver) {\n return;\n }\n\n this.IsOver = true;\n this.changeScale(this.Ring, 1, 1.1, 0.3, 0.0);\n this.changeScale(this.Circle, 1, 2.5, 0.3, 0.1);\n };\n\n mouseOut = () => {\n if (!this.IsOpen || !this.IsOver) {\n return;\n }\n\n this.IsOver = false;\n this.changeScale(this.Ring, 1.2, 1, 0.3, 0.1);\n this.changeScale(this.Circle, 2, 1, 0.3);\n };\n\n changeScale = (obj, from, to, time = 0.2, delay = 0.0) => {\n if (obj.anim) {\n obj.anim.kill();\n }\n\n const scale = { scale: from };\n obj.anim = TweenLite.to(scale, time, {\n scale: to,\n ease: Power1.easeOut,\n delay: delay,\n onUpdate: () => {\n obj.scale.set(scale.scale, scale.scale, scale.scale);\n },\n });\n };\n\n updateCameraPosition = (position) => {\n this.Particle.lookAt(position);\n };\n}\n","import EventEmitter from \"EventEmitter\";\nimport * as THREE from \"three\";\nimport { Projector } from \"three/examples/jsm/renderers/Projector\";\n\nimport HotSpot from \"./hotspot\";\nimport hotspotsData from \"../../data/hotspots.json\";\nimport hopspotDotTexture from \"../../assets/textures/hotspot-dot.png\";\nimport hopspotRingTexture from \"../../assets/textures/hotspot-ring.png\";\n\nexport default class HotspotsManager extends EventEmitter {\n constructor(scene, renderer, camera, contentEl) {\n super();\n\n this.debug = false;\n this.scene = scene;\n this.renderer = renderer;\n this.camera = camera;\n this.webglContent = contentEl;\n this.mouse = { x: 0, y: 0 };\n\n this.hotSpots = [];\n this.colliders = [];\n this.raycaster = new THREE.Raycaster();\n\n this.webglContent.addEventListener(\"mousemove\", this._onMouseMove.bind(this));\n this.webglContent.addEventListener(\"mouseup\", this._onMouseUp.bind(this));\n }\n\n createHotSpots() {\n const loader = new THREE.TextureLoader();\n const texture1 = loader.load(hopspotDotTexture);\n const texture2 = loader.load(hopspotRingTexture);\n\n const matCircle = new THREE.MeshBasicMaterial({\n map: texture1,\n transparent: true, // so we can see the ground\n depthWrite: true, // so we don't have to sort\n side: THREE.DoubleSide,\n });\n\n const matRing = new THREE.MeshBasicMaterial({\n map: texture2,\n transparent: true, // so we can see the ground\n depthWrite: true, // so we don't have to sort\n side: THREE.DoubleSide,\n });\n\n hotspotsData.forEach((h) => {\n const hotSpot = new HotSpot(\n new THREE.Vector3(h.x, h.y, h.z),\n matCircle,\n matRing\n );\n hotSpot.data = h;\n this.hotSpots.push(hotSpot);\n\n this.scene.add(hotSpot.Particle);\n this.colliders.push(hotSpot.Ring);\n\n if (h.category === \"\") {\n hotSpot.open();\n } else {\n hotSpot.close(0);\n }\n });\n };\n\n updateHotSpots = (category, parts = []) => {\n\n this.debug && console.log('Hotspot category:', category);\n this.hotSpots.forEach((h) => {\n if (category && category !== \"\" && h.data.category.toLowerCase().includes(category.toLowerCase())) \n {\n if (h.data.partConstrain.length === 0) {\n h.open();\n\n } else {\n let contain = false;\n\n h.data.partConstrain.forEach(c => {\n if (parts.includes(c)) {\n contain = true;\n }\n });\n\n if (contain) {\n h.open();\n } else {\n h.close();\n }\n }\n } else if ((category === \"\" || !category) && h.data.category === \"\") {\n h.open();\n } else {\n h.close();\n }\n });\n }\n\n _onMouseMove(event) {\n this.mouse.x = event.clientX;\n this.mouse.y = event.clientY;\n\n const collisions = this._checkCollision();\n\n if (!collisions.length) {\n return this.hotSpots.forEach((hotspot) => {\n if (hotspot.IsOver) {\n hotspot.mouseOut();\n this.emit(\"hotspotOut\"); \n }\n });\n }\n\n const object = collisions[0].object;\n const hotspot = this._getHotspotFromCollider(object);\n const screenPosition = this._getScreenPosition(object);\n const data = hotspot.data;\n data.screenPosition = screenPosition;\n\n hotspot.mouseOver();\n this.emit(\"hotspotOver\", data); \n };\n\n _onMouseUp() {\n const collisions = this._checkCollision();\n\n if (!collisions.length) {\n return;\n }\n\n const object = collisions[0].object;\n const screenPosition = this._getScreenPosition(object);\n const data = this._getHotspotFromCollider(object).data;\n data.screenPosition = screenPosition;\n \n this.emit(\"hotspotSelected\", data);\n\n setTimeout(() => {\n const screenPosition = this._getScreenPosition(object);\n data.screenPosition = screenPosition;\n this.emit(\"hotspotSelectedDelayed\", data);\n }, 1000);\n };\n\n _checkCollision() {\n const mouse = new THREE.Vector2();\n mouse.x = (this.mouse.x / this.webglContent.offsetWidth) * 2 - 1;\n mouse.y = -(this.mouse.y / this.webglContent.offsetHeight) * 2 + 1;\n\n this.raycaster.setFromCamera(mouse, this.camera);\n const intersects = this.raycaster.intersectObjects(this.colliders);\n\n return intersects;\n };\n\n _getHotspotFromCollider(col) {\n const len = this.hotSpots.length;\n\n for (let i = 0; i < len; i++) {\n if (this.hotSpots[i].Ring === col) return this.hotSpots[i];\n }\n\n return null;\n };\n\n _getScreenPosition(object) {\n const width = this.webglContent.offsetWidth,\n height = this.webglContent.offsetHeight;\n const widthHalf = width / 2,\n heightHalf = height / 2;\n\n const vector = new THREE.Vector3();\n const projector = new Projector();\n projector.projectVector(\n vector.setFromMatrixPosition(object.matrixWorld),\n this.camera\n );\n\n vector.x = vector.x * widthHalf + widthHalf;\n vector.y = -(vector.y * heightHalf) + heightHalf;\n\n return vector;\n }\n\n // RENDER UPDATE\n\n update = () => {\n this.hotSpots.forEach((hotspot) => {\n hotspot.updateCameraPosition(this.camera.position);\n });\n };\n}\n","export default class MaterialGroups {\n static footRestMaterials(configMap, props) {\n return [\n {\n targets: configMap[\"FOOTREST\"][\"_footrest_color\"].targets,\n material: props.config[\"FOOTREST\"][\"_footrest_color\"],\n },\n {\n targets: configMap[\"FOOTREST\"][\"_footrest_carbon\"].targets,\n material: props.config[\"FOOTREST\"][\"_footrest_carbon\"],\n },\n ];\n }\n\n static wheelLocksMaterials(configMap, props) {\n return [\n {\n targets: configMap[\"WHEEL_LOCKS\"][\"_wheel_locks_color\"].targets,\n material: props.config[\"WHEEL_LOCKS\"][\"_wheel_locks_color\"],\n },\n {\n targets: configMap[\"WHEEL_LOCKS\"][\"_handled_color\"].targets,\n material: props.config[\"WHEEL_LOCKS\"][\"_handled_color\"],\n },\n ];\n }\n\n static addOnMaterials(configMap, props) {\n return [\n {\n targets: configMap[\"ADDONS\"][\"_addons_metal_color\"].targets,\n material: props.config[\"ADDONS\"][\"_addons_metal_color\"],\n },\n {\n targets: configMap[\"ADDONS\"][\"_addons_rubber_color\"].targets,\n material: props.config[\"ADDONS\"][\"_addons_rubber_color\"],\n },\n {\n targets: configMap[\"ADDONS\"][\"_addons_chrome_color\"].targets,\n material: props.config[\"ADDONS\"][\"_addons_chrome_color\"],\n },\n {\n targets: configMap[\"ADDONS\"][\"_f55_metal_black_color\"].targets,\n material: props.config[\"ADDONS\"][\"_f55_metal_black_color\"],\n },\n {\n targets: configMap[\"ADDONS\"][\"_f55_metal_silver_color\"].targets,\n material: props.config[\"ADDONS\"][\"_f55_metal_silver_color\"],\n },\n {\n targets: configMap[\"ADDONS\"][\"_f55_rubber_color\"].targets,\n material: props.config[\"ADDONS\"][\"_f55_rubber_color\"],\n },\n {\n targets: configMap[\"ADDONS\"][\"f55_color\"].targets,\n material: props.config[\"ADDONS\"][\"f55_color\"],\n },\n {\n targets: configMap[\"ADDONS\"][\"_f55_glass_color\"].targets,\n material: props.config[\"ADDONS\"][\"_f55_glass_color\"],\n },\n {\n targets: configMap[\"ADDONS\"][\"_f55_tyre8_color\"].targets,\n material: props.config[\"ADDONS\"][\"_f55_tyre8_color\"],\n },\n {\n targets: configMap[\"ADDONS\"][\"_f55_tyre14_color\"].targets,\n material: props.config[\"ADDONS\"][\"_f55_tyre14_color\"],\n },\n {\n targets: configMap[\"ADDONS\"][\"_f55_handgrip\"].targets,\n material: props.config[\"ADDONS\"][\"_f55_handgrip\"],\n },\n {\n targets: configMap[\"ADDONS\"][\"_f55_cruisecontrolbutton\"].targets,\n material: props.config[\"ADDONS\"][\"_f55_cruisecontrolbutton\"],\n },\n {\n targets: configMap[\"ADDONS\"][\"_f55_batterydecal\"].targets,\n material: props.config[\"ADDONS\"][\"_f55_batterydecal\"],\n },\n {\n targets: configMap[\"ADDONS\"][\"_f55_screendecal\"].targets,\n material: props.config[\"ADDONS\"][\"_f55_screendecal\"],\n },\n ];\n }\n\n static sideGuardsMaterials(configMap, props) {\n return [\n {\n targets: configMap[\"SIDEGUARDS\"][\"_rubber_color\"].targets,\n material: props.config[\"SIDEGUARDS\"][\"_rubber_color\"],\n },\n {\n targets: configMap[\"SIDEGUARDS\"][\"_metal_color\"].targets,\n material: props.config[\"SIDEGUARDS\"][\"_metal_color\"],\n },\n {\n targets: configMap[\"SIDEGUARDS\"][\"_carbon_color\"].targets,\n material: props.config[\"SIDEGUARDS\"][\"_carbon_color\"],\n },\n ];\n }\n\n static seatSlingMaterials(configMap, props) {\n return [\n {\n targets: configMap[\"SEAT_SLING\"][\"_cushion_color\"].targets,\n material: props.config[\"SEAT_SLING\"][\"_cushion_color\"],\n },\n {\n targets: configMap[\"SEAT_SLING\"][\"_middle_color\"].targets,\n material: props.config[\"SEAT_SLING\"][\"_middle_color\"],\n },\n {\n targets: configMap[\"SEAT_SLING\"][\"_metal_parts_color\"].targets,\n material: props.config[\"SEAT_SLING\"][\"_metal_parts_color\"],\n },\n {\n targets: configMap[\"SEAT_SLING\"][\"_jay_light\"].targets,\n material: props.config[\"SEAT_SLING\"][\"_jay_light\"],\n },\n {\n targets: configMap[\"SEAT_SLING\"][\"_jay_basic\"].targets,\n material: props.config[\"SEAT_SLING\"][\"_jay_basic\"],\n },\n {\n targets: configMap[\"SEAT_SLING\"][\"_jay_easy\"].targets,\n material: props.config[\"SEAT_SLING\"][\"_jay_easy\"],\n },\n {\n targets: configMap[\"SEAT_SLING\"][\"_soft_combi\"].targets,\n material: props.config[\"SEAT_SLING\"][\"_soft_combi\"],\n },\n {\n targets: configMap[\"SEAT_SLING\"][\"_jay_visco\"].targets,\n material: props.config[\"SEAT_SLING\"][\"_jay_visco\"],\n },\n {\n targets: configMap[\"SEAT_SLING\"][\"_jay_fushion\"].targets,\n material: props.config[\"SEAT_SLING\"][\"_jay_fushion\"],\n },\n {\n targets: configMap[\"SEAT_SLING\"][\"_jay_ion\"].targets,\n material: props.config[\"SEAT_SLING\"][\"_jay_ion\"],\n },\n {\n targets: configMap[\"SEAT_SLING\"][\"_jay2\"].targets,\n material: props.config[\"SEAT_SLING\"][\"_jay2\"],\n },\n {\n targets: configMap[\"SEAT_SLING\"][\"_bag_common\"].targets,\n material: props.config[\"SEAT_SLING\"][\"_bag_common\"],\n },\n ];\n }\n\n static rearWheelsMaterials(configMap, props) {\n return [\n {\n targets: configMap[\"REAR_WHEELS\"][\"hand_rim_color\"].targets,\n material: props.config[\"REAR_WHEELS\"][\"hand_rim_color\"],\n },\n {\n targets: configMap[\"REAR_WHEELS\"][\"rim_color\"].targets,\n material: props.config[\"REAR_WHEELS\"][\"rim_color\"],\n },\n {\n targets: configMap[\"REAR_WHEELS\"][\"_wheels\"].targets,\n material: props.config[\"REAR_WHEELS\"][\"_wheels\"],\n },\n {\n targets: configMap[\"REAR_WHEELS\"][\"_reflector\"].targets,\n material: props.config[\"REAR_WHEELS\"][\"_reflector\"],\n },\n {\n targets: configMap[\"REAR_WHEELS\"][\"_silver_rim_color\"].targets,\n material: props.config[\"REAR_WHEELS\"][\"_silver_rim_color\"],\n },\n {\n targets: configMap[\"REAR_WHEELS\"][\"_black_rim_color\"].targets,\n material: props.config[\"REAR_WHEELS\"][\"_black_rim_color\"],\n },\n {\n targets: configMap[\"REAR_WHEELS\"][\"_black_color\"].targets,\n material: props.config[\"REAR_WHEELS\"][\"_black_color\"],\n },\n ];\n }\n\n static frameMaterials(configMap, props) {\n return [\n {\n targets: configMap[\"FRAME\"][\"frame_color\"].targets,\n material: props.config[\"FRAME\"][\"frame_color\"],\n },\n {\n targets: configMap[\"FRAME\"][\"_strap_color\"].targets,\n material: props.config[\"FRAME\"][\"_strap_color\"],\n },\n {\n targets: configMap[\"FRAME\"][\"_frame_metal_color\"].targets,\n material: props.config[\"FRAME\"][\"_frame_metal_color\"],\n },\n {\n targets: configMap[\"FRAME\"][\"_frame_diffuse_black_color\"].targets,\n material: props.config[\"FRAME\"][\"_frame_diffuse_black_color\"],\n },\n {\n targets: configMap[\"FRAME\"][\"_rubber_color\"].targets,\n material: props.config[\"FRAME\"][\"_rubber_color\"],\n },\n {\n targets: configMap[\"FRAME\"][\"_frame_carbon_color\"].targets,\n material: props.config[\"FRAME\"][\"_frame_carbon_color\"],\n },\n {\n targets: configMap[\"FRAME\"][\"_frame_carbon_color\"].targets,\n material: props.config[\"FRAME\"][\"_frame_carbon_color\"],\n },\n {\n targets: configMap[\"FRAME\"][\"_led_case\"].targets,\n material: props.config[\"FRAME\"][\"_led_case\"],\n },\n {\n targets: configMap[\"FRAME\"][\"_led_colour\"].targets,\n material: props.config[\"FRAME\"][\"_led_colour\"],\n },\n {\n targets: configMap[\"FRAME\"][\"frame_bracket_colour\"].targets,\n material: props.config[\"FRAME\"][\"frame_bracket_colour\"],\n },\n {\n targets: configMap[\"FRAME\"][\"frame_bracket_colour\"].targets,\n material: props.config[\"FRAME\"][\"frame_bracket_colour\"],\n },\n {\n targets: configMap[\"FRAME\"][\"frame_clamp_colour\"].targets,\n material: props.config[\"FRAME\"][\"frame_clamp_colour\"],\n },\n\n {\n targets: configMap[\"FRAME\"][\"_level_colour\"].targets,\n material: props.config[\"FRAME\"][\"_level_colour\"],\n },\n {\n targets: configMap[\"FRAME\"][\"sticker_colour\"].targets,\n material: props.config[\"FRAME\"][\"sticker_colour\"],\n },\n {\n targets: configMap[\"FRAME\"][\"sticker_dot_colour\"].targets,\n material: props.config[\"FRAME\"][\"sticker_dot_colour\"],\n },\n {\n targets: configMap[\"FRAME\"][\"axle_tube\"].targets,\n material: props.config[\"FRAME\"][\"axle_tube\"],\n },\n ];\n }\n\n static casterMaterials(configMap, props) {\n return [\n {\n targets: configMap[\"CASTERS\"][\"rim_color\"].targets,\n material: props.config[\"CASTERS\"][\"rim_color\"],\n },\n {\n targets: configMap[\"CASTERS\"][\"caster_fork_color\"].targets,\n material: props.config[\"CASTERS\"][\"caster_fork_color\"],\n },\n {\n targets: configMap[\"CASTERS\"][\"_tyre_rubber\"].targets,\n material: props.config[\"CASTERS\"][\"_tyre_rubber\"],\n },\n {\n targets: configMap[\"CASTERS\"][\"_metal_black\"].targets,\n material: props.config[\"CASTERS\"][\"_metal_black\"],\n },\n {\n targets: configMap[\"CASTERS\"][\"_metal_silver\"].targets,\n material: props.config[\"CASTERS\"][\"_metal_silver\"],\n },\n ];\n }\n\n static backrestMaterials(configMap, props) {\n return [\n {\n targets: configMap[\"BACKREST\"][\"back_rest_piping_color\"].targets,\n material: props.config[\"BACKREST\"][\"back_rest_piping_color\"],\n },\n {\n targets: configMap[\"BACKREST\"][\"_back_rest_color\"].targets,\n material: props.config[\"BACKREST\"][\"_back_rest_color\"],\n },\n {\n targets: configMap[\"BACKREST\"][\"_back_rest_metal_color\"].targets,\n material: props.config[\"BACKREST\"][\"_back_rest_metal_color\"],\n },\n {\n targets: configMap[\"BACKREST\"][\"_back_rest_rubber_color\"].targets,\n material: props.config[\"BACKREST\"][\"_back_rest_rubber_color\"],\n },\n {\n targets: configMap[\"BACKREST\"][\"_logo_color\"].targets,\n material: props.config[\"BACKREST\"][\"_logo_color\"],\n },\n {\n targets: configMap[\"BACKREST\"][\"_zipper_color\"].targets,\n material: props.config[\"BACKREST\"][\"_zipper_color\"],\n },\n {\n targets: configMap[\"BACKREST\"][\"_badge_text_color\"].targets,\n material: props.config[\"BACKREST\"][\"_badge_text_color\"],\n },\n {\n targets: configMap[\"BACKREST\"][\"_badge_2_color\"].targets,\n material: props.config[\"BACKREST\"][\"_badge_2_color\"],\n },\n {\n targets: configMap[\"BACKREST\"][\"_backrest_handlegripbutton\"].targets,\n material: props.config[\"BACKREST\"][\"_backrest_handlegripbutton\"],\n },\n {\n targets: configMap[\"BACKREST\"][\"bracket_colour\"].targets,\n material: props.config[\"BACKREST\"][\"bracket_colour\"],\n },\n {\n targets: configMap[\"BACKREST\"][\"_back_rest_carbon_color\"].targets,\n material: props.config[\"BACKREST\"][\"_back_rest_carbon_color\"],\n },\n {\n targets: configMap[\"BACKREST\"][\"_back_rest_metal_matt_color\"].targets,\n material: props.config[\"BACKREST\"][\"_back_rest_metal_matt_color\"],\n },\n ];\n }\n}\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(\"circle\", {\n cx: 50,\n cy: 50,\n fill: \"none\",\n stroke: \"#f5a70f\",\n strokeWidth: 8,\n r: 30,\n strokeDasharray: \"141.37166941154067 49.12388980384689\"\n}, /*#__PURE__*/React.createElement(\"animateTransform\", {\n attributeName: \"transform\",\n type: \"rotate\",\n repeatCount: \"indefinite\",\n dur: \"1s\",\n values: \"0 50 50;360 50 50\",\n keyTimes: \"0;1\"\n}));\n\nvar SvgPreloader = function SvgPreloader(_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 style: {\n margin: \"auto\",\n background: \"none\",\n display: \"block\",\n shapeRendering: \"auto\"\n },\n width: \"100px\",\n height: \"100px\",\n viewBox: \"0 0 100 100\",\n preserveAspectRatio: \"xMidYMid\",\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(SvgPreloader, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/preloader.7c9e7abb.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: \"M417.4,224H288V94.6c0-16.9-14.3-30.6-32-30.6c-17.7,0-32,13.7-32,30.6V224H94.6C77.7,224,64,238.3,64,256 c0,17.7,13.7,32,30.6,32H224v129.4c0,16.9,14.3,30.6,32,30.6c17.7,0,32-13.7,32-30.6V288h129.4c16.9,0,30.6-14.3,30.6-32 C448,238.3,434.3,224,417.4,224z\"\n});\n\nvar SvgPlus = function SvgPlus(_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 viewBox: \"0 0 512 512\",\n xmlSpace: \"preserve\",\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(SvgPlus, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/plus.56f282a1.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: \"M417.4,224H94.6C77.7,224,64,238.3,64,256c0,17.7,13.7,32,30.6,32h322.8c16.9,0,30.6-14.3,30.6-32 C448,238.3,434.3,224,417.4,224z\"\n});\n\nvar SvgMinus = function SvgMinus(_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 viewBox: \"0 0 512 512\",\n xmlSpace: \"preserve\",\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(SvgMinus, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/minus.d00bd4de.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 className: \"st0\",\n d: \"M19.6,6.5C11.4,7,4.8,13.8,4.8,22.2c0,8.7,7,15.7,15.7,15.7s15.7-7,15.7-15.7h-5.5c0,5.6-4.5,10.2-10.2,10.2 s-10.2-4.5-10.2-10.2c0-5.3,4.1-9.6,9.2-10.1v6.3l9.1-9.1l-9.1-9.1V6.5z\"\n});\n\nvar SvgRefresh = function SvgRefresh(_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 id: \"Layer_1\",\n x: \"0px\",\n y: \"0px\",\n width: \"40px\",\n height: \"40px\",\n viewBox: \"0 0 40 40\",\n style: {\n enableBackground: \"new 0 0 40 40\"\n },\n xmlSpace: \"preserve\",\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(SvgRefresh, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/refresh.8a04ff85.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Component } from \"react\";\nimport { withTranslation } from \"react-i18next\";\nimport { connect } from \"react-redux\";\nimport { decode } from 'js-base64';\nimport { set, setDefaultsLoaded } from \"../store/configSlice\";\nimport { showPreloader, hidePreloader, showPopover, showModal, showTooltip, hideTooltip } from \"../store/navSlice\";\n\nimport * as THREE from \"three\";\nimport Stats from \"stats.js\";\nimport FpsMonitor from \"./viewer-components/fps-monitor\";\nimport Camera from \"./viewer-components/camera\";\nimport Environment from \"./viewer-components/environment\";\nimport Wheelchair from \"./viewer-components/wheelchair\";\nimport HotspotsManager from \"./viewer-components/hotspots-manager\";\nimport configMap from \"../data/config\";\nimport materialsMap from \"../data/materials\";\nimport pkg from \"../../package.json\";\nimport MaterialGroups from './viewer-components/materialGroups'\n\nimport \"./Viewer.scss\";\nimport { ReactComponent as Preloader } from \"../assets/images/preloader.svg\";\nimport { ReactComponent as IconPlus } from \"../assets/images/plus.svg\";\nimport { ReactComponent as IconMinus } from \"../assets/images/minus.svg\";\nimport { ReactComponent as IconRefresh } from \"../assets/images/refresh.svg\";\n\nconst mapState = (state) => {\n const config = state.config;\n const {\n activePart,\n drawerOpen,\n nitrumOpen,\n preloaderVisible,\n backgroundVisible,\n } = state.nav;\n\n return {\n activePart,\n config,\n drawerOpen,\n nitrumOpen,\n preloaderVisible,\n backgroundVisible: backgroundVisible && !drawerOpen && !nitrumOpen,\n viewerShrinked: drawerOpen || nitrumOpen,\n };\n};\n\nconst mapDispatch = {\n set,\n setDefaultsLoaded,\n showPreloader,\n hidePreloader,\n showPopover,\n showModal,\n showTooltip,\n hideTooltip,\n};\n\nclass Viewer extends Component {\n\n /**\n * Enable/disable shadows on the environment\n */\n get UseShadows() {\n return this._useShadows;\n }\n\n set UseShadows(useShadows) {\n this.renderer.shadowMap.enabled = useShadows;\n this.wheelchair.UseShadows = useShadows;\n this.environment.UseShadows = useShadows;\n\n this._useShadows = useShadows;\n }\n\n constructor(props) {\n super();\n this.shareUrlUsesHash = true;\n this.shareUrlVersion = 1;\n this.debug = false;\n this.basepath = (pkg.homepage || \"\");\n }\n\n /**\n * Initialize Viewer\n * - Setup THREE components, Environment, Wheelchair, Hotspots\n * - Sets global event listerners (mouse, resize)\n * - Initializes the animation loop\n */\n componentDidMount() {\n this.isMobile = window.innerWidth < 992;\n this.lastWidth = this.mount.offsetWidth; // used to autoadapt webgl context\n\n // SETUP THREE SCENE\n this.stats = this.debug && this.createStats();\n this.renderer = this.createRenderer();\n this.scene = this.createScene();\n this.camera = new Camera(this.renderer, this.isMobile);\n this.fpsMonitor = new FpsMonitor();\n\n // SETUP ENVIRONMENT\n // @todo check if HDR setup on materials triggering before materials\n // are loaded/set is OK\n this.environment = new Environment(this.scene, this.renderer);\n this.environment.on(\"onHDRLoaded\", this.onHDRLoaded.bind(this));\n\n // SETUP WHEELCHAIR (+ load defaults)\n this.wheelchair = new Wheelchair(this.scene, this.renderer, this.props.config._country);\n this.wheelchair.on(\"partsloaded\", this.onWheelchairLoaded.bind(this));\n\n // Enable Shadows\n this.UseShadows = true;\n\n // Drop frames and we will kill shadows\n this.dropFramesThreshold = 45; // below X fps\n this.dropFramesThresholdCounter = 5; // for X seconds\n\n // Load default configuration\n this.loadDefaultConfig();\n this.loadSavedConfig();\n\n // SETUP HOSTPOTS\n this.hotspotsManager = new HotspotsManager(\n this.scene,\n this.renderer,\n this.camera.camera,\n this.mount\n );\n this.hotspotsManager.on(\"hotspotOver\", this.onHotspotOver.bind(this));\n this.hotspotsManager.on(\"hotspotOut\", this.onHotspotOut.bind(this));\n this.hotspotsManager.on(\n \"hotspotSelected\",\n this.onHotspotSelected.bind(this)\n );\n this.hotspotsManager.on(\n \"hotspotSelectedDelayed\",\n this.onHotspotSelectedDelayed.bind(this)\n );\n\n // LISTENERS\n\n // webgl context\n this.mount.addEventListener(\n \"resize\",\n this.onWindowResize.bind(this),\n false\n );\n\n // display webgl\n this.mount.appendChild(this.renderer.domElement);\n this.onWindowResize(); // trigger initial resize\n this.animate(); // start animation loop \n }\n\n /**\n * Handles initial parts loading and configurator changes\n * Handles background toggling\n * @param {*} prevProps\n */\n componentDidUpdate(prevProps) {\n if (this.props.backgroundVisible !== prevProps.backgroundVisible) {\n this.environment.toggleBackground(this.props.backgroundVisible);\n return;\n }\n\n if (this.props.activePart !== prevProps.activePart) {\n this.onCategoryChange(this.props.activePart, prevProps.activePart);\n return;\n }\n\n const config = this.props.config;\n const prevConfig = prevProps.config;\n const { _updatedPart, _updatedAttr } = config;\n\n // IGNORE CHANGES UNTIL DEFAULTS ARE LOADED\n if (!config._defaultsLoaded) {\n this.debug &&\n console.log(\"[Viewer] Got changes but defaults aren't set yet\");\n return;\n }\n\n // LOAD DEFAULT PARTS ON _defaultsLoaded change (one time only)\n if (config._defaultsLoaded !== prevConfig._defaultsLoaded) {\n this.debug && console.log(\"[Viewer] Defaults set, loading default parts\");\n this.loadWheelchair();\n return;\n }\n\n // SWAP ASSETS REPOSITIONED BY FRAME ANGE/INSET\n if (config._framePath !== prevConfig._framePath) {\n this.debug &&\n console.log(\"[Viewer] Frame changed, updating repositionable parts\");\n this.updateFrameRepositionableParts();\n return;\n }\n\n // SWAP PUSHBAR REPOSITIONED BY BACKREST (push_handle_and_back)\n if (\n config._pushbarPath !== prevConfig._pushbarPath ||\n config.BACKREST.backrest !== prevConfig.BACKREST.backrest || \n config.BACKREST.push_handle !== prevConfig.BACKREST.push_handle\n ) {\n this.debug &&\n console.log(\"[Viewer] Push Handles changed, updating repositionable parts\");\n this.updateBackrestRepositionableParts();\n return;\n }\n\n // Handle constraints for armrest\n if (config.SIDEGUARDS.armrests !== prevConfig.SIDEGUARDS.armrests) {\n this.debug &&\n console.log(\"[Viewer] Armrest changed, updating sideguards\");\n this.updateArmrestSideguards();\n // no return - let pass through to handle actual armrest change\n }\n\n // SWAP 'LOOSE' PARTS\n if (_updatedPart) {\n const newVal = config[_updatedPart][_updatedAttr];\n const oldVal =\n prevConfig[_updatedPart].hasOwnProperty(_updatedAttr) &&\n prevConfig[_updatedPart][_updatedAttr];\n\n if (newVal !== oldVal) {\n this.debug && console.log(\"UPDATE PART ATTR\", _updatedPart, _updatedAttr);\n this.updatePartAttribute(_updatedPart, _updatedAttr, newVal, oldVal);\n }\n }\n }\n\n // ---------------------------------------------------------------------------\n // WHEELCHAIR UPDATING\n// ---------------------------------------------------------------------------\n\n /**\n * Sets default parts in Redux\n *\n * This initial/default changes are ignored by componentDidUpdate\n * via the state flag config._defaultsLoaded\n */\n loadDefaultConfig() {\n const { _region } = this.props.config;\n\n this.debug && console.groupCollapsed(\"SET DEFAULTS\");\n\n for (let partKey in configMap) {\n this.debug && console.groupCollapsed(partKey);\n\n let attributes = configMap[partKey];\n for (let attrKey in attributes) {\n this.debug && console.groupCollapsed(attrKey);\n\n // this.debug && console.log(\"ALL\", attributes[attrKey]);\n this.debug && console.log(\"Type\", attributes[attrKey].optionsType);\n\n // MATERIAL/COLOR\n if (attributes[attrKey].optionsType === \"color\") {\n let materialSet = attributes[attrKey].materialSet;\n if (!materialSet) {\n this.debug && console.log(\"No Material Set\");\n this.debug && console.groupEnd();\n continue;\n }\n\n let defaultMaterial = attributes[attrKey].defaultMaterial;\n\n if (typeof defaultMaterial === \"object\") {\n defaultMaterial = defaultMaterial[_region];\n }\n\n this.debug &&\n console.log(\"Default\", defaultMaterial ? defaultMaterial : \"-\");\n\n this.props.set({\n part: partKey,\n attr: attrKey,\n option: {\n value: defaultMaterial,\n },\n });\n\n // OTHER: MODEL, CONTEXTUAL, DECLARATIVE\n } else {\n let options = attributes[attrKey].options;\n\n if (attributes[attrKey].regional) {\n options = options[_region];\n }\n\n if (!options) {\n this.debug && console.log(\"No options\");\n this.debug && console.groupEnd();\n continue;\n }\n\n this.debug && console.log(\"Options\", options);\n\n let defaults = options.filter((option) => {\n return option.hasOwnProperty(\"default\") && option.default;\n });\n\n this.debug &&\n console.log(\"Default\", defaults.length ? defaults[0] : \"-\");\n\n if (defaults.length) {\n this.props.set({\n part: partKey,\n attr: attrKey,\n option: defaults[0],\n });\n }\n }\n\n this.debug && console.groupEnd();\n }\n\n this.debug && console.groupEnd();\n }\n\n this.debug && console.groupEnd();\n }\n\n reloadDefaultConfig() {\n this.wheelchair.off(\"partsloaded\");\n this.props.setDefaultsLoaded(false);\n this.loadDefaultConfig();\n setTimeout(() => {\n this.props.setDefaultsLoaded(true); \n }, 100);\n }\n\n loadSavedConfig() {\n const { _region } = this.props.config;\n const url = new URL(window.location.toString());\n const hasSavedConfig = this.shareUrlUsesHash\n ? url.hash.indexOf(\"/share/\") !== -1\n : url.pathname.indexOf(\"/share/\") !== -1;\n\n // Parse hybrid url param\n if (_region === \"EU\" && url.searchParams.has(\"frame\")) {\n const frameParam = url.searchParams.get(\"frame\");\n if (frameParam === \"hybrid\") {\n this.props.set({\n part: \"FRAME\",\n attr: \"type\",\n option: {\n value: \"HYBRID\",\n },\n });\n }\n }\n\n if (!hasSavedConfig) {\n // Set state flag config._defaultsLoaded to true to start responding\n // to config changes in componentDidUpdate\n this.props.setDefaultsLoaded(true);\n return;\n }\n\n let savedConfig = this.shareUrlUsesHash\n ? url.hash.replace(\"#/share/\", \"\")\n : url.pathname.replace(this.basepath + \"/share/\", \"\");\n\n savedConfig = decode(savedConfig);\n savedConfig = savedConfig.split(\"-\");\n\n // Check share link version\n if (/v[1-9]/.test(savedConfig[0])) {\n const version = parseInt(savedConfig[0].replace(\"v\", \"\"), 10);\n if (version < this.shareUrlVersion) {\n this.debug && console.log(`Share link version ${version} is no longer supported`);\n this.props.setDefaultsLoaded(true);\n return; \n }\n\n // remove version element from array and continue\n savedConfig.shift();\n } else {\n this.debug && console.log(\"Share link has no version\");\n this.props.setDefaultsLoaded(true);\n return;\n }\n\n // Validate we have the same amount of parts\n if (savedConfig.length !== Object.keys(configMap).length) {\n this.debug && console.log(\"Invalid config link\");\n this.props.setDefaultsLoaded(true);\n return;\n }\n\n this.debug && console.groupCollapsed(\"SET SAVED\");\n\n let partI = -1;\n for (let partKey in configMap) {\n partI++;\n const savedPartConfig = savedConfig[partI].split(\"\");\n this.debug && console.groupCollapsed(partKey);\n\n let attributes = configMap[partKey];\n let attrI = -1;\n\n for (let attrKey in attributes) {\n if (attributes[attrKey].hidden) {\n continue;\n }\n\n attrI += 2;\n\n const savedAttrKey = savedPartConfig[attrI - 1] + savedPartConfig[attrI];\n console.log(savedAttrKey);\n this.debug && console.groupCollapsed(attrKey);\n this.debug && console.log(\"linkKey\", savedAttrKey);\n\n // this.debug && console.log(\"ALL\", attributes[attrKey]);\n this.debug && console.log(\"Type\", attributes[attrKey].optionsType);\n\n // MATERIAL/COLOR\n if (attributes[attrKey].optionsType === \"color\") {\n let materialSet = attributes[attrKey].materialSet;\n if (!materialSet) {\n this.debug && console.log(\"No Material Set\");\n this.debug && console.groupEnd();\n continue;\n }\n\n let savedMaterial = this._findMaterialByLinkKey(savedAttrKey);\n\n if (!savedMaterial) {\n continue;\n }\n\n this.debug &&\n console.log(\"Saved\", savedMaterial ? savedMaterial : \"-\");\n\n this.props.set({\n part: partKey,\n attr: attrKey,\n option: {\n value: savedMaterial,\n },\n });\n\n // OTHER: MODEL, CONTEXTUAL, DECLARATIVE\n } else {\n const isRegionalOption = attributes[attrKey].regional || false;\n const options = isRegionalOption\n ? attributes[attrKey].options[_region]\n : attributes[attrKey].options;\n\n if (!options) {\n this.debug && console.log(\"No options\");\n this.debug && console.groupEnd();\n continue;\n }\n\n this.debug && console.log(\"Options\", options);\n\n let saved = options.filter((option) => {\n return (\n option.hasOwnProperty(\"linkKey\") &&\n option.linkKey === savedAttrKey\n );\n });\n\n this.debug && console.log(\"Saved\", saved.length ? saved[0] : \"-\");\n\n if (saved.length) {\n this.props.set({\n part: partKey,\n attr: attrKey,\n option: saved[0],\n });\n }\n }\n\n this.debug && console.groupEnd();\n }\n\n this.debug && console.groupEnd();\n }\n\n this.props.setDefaultsLoaded(true);\n }\n\n loadWheelchair() {\n const { _framePath, _pushbarPath, _region } = this.props.config;\n\n const forks = this.getSrcByOptionValue(\"CASTERS\", \"forks\");\n const casters = this.getSrcByOptionValue(\"CASTERS\", \"casters\");\n const footrest = this.getSrcByOptionValue(\"FOOTREST\", \"footrest\");\n const cushion = this.getSrcByOptionValue(\"SEAT_SLING\", \"cushion\");\n const backrest = this.getSrcByOptionValue(\"BACKREST\", \"backrest\");\n const push_handles = this.getSrcByOptionValue(\"BACKREST\", \"push_handles\");\n const push_bar = this.getSrcByOptionValue(\"BACKREST\", \"push_bar\");\n const armrests = this.getSrcByOptionValue(\"SIDEGUARDS\", \"armrests\");\n const sideguards = this.getSrcByOptionValue(\"SIDEGUARDS\", \"sideguards\");\n const rear_wheels = this.getSrcByOptionValue(\"REAR_WHEELS\", \"rear_wheels\");\n const breaks = this.getSrcByOptionValue(\"WHEEL_LOCKS\", \"brakes\");\n const safety = this.getSrcByOptionValue(\"ADDONS\", \"safety\");\n const led_lights = this.getSrcByOptionValue(\"FRAME\", \"led_lights\");\n const type = this.getSrcByOptionValue(\"FRAME\", \"type\");\n const f55 = this.getSrcByOptionValue(\"ADDONS\", \"f55\");\n\n const parts = {\n frame_common : `Common_Parts/Frame_Common.glb`,\n f55 : f55 ? `${_framePath}/${f55}` : \"false\",\n lower_frame : `${_framePath}/Lower_Frame/${_region}_Lower_Frame.glb`,\n type : type ? `${_framePath}/${type}` : \"false\",\n forks : `${_framePath}/${forks}`,\n casters : `${_framePath}/${casters}`,\n footrest : `${_framePath}/${footrest}`,\n sling : \"Slings/Sling_1.glb\",\n bag_common : \"Slings/Utility_Bag_LH.glb\",\n cushion : `${cushion}`,\n backrest : `${backrest}`,\n push_handles : `${push_handles}`,\n push_bar : `${_pushbarPath}/${push_bar}`,\n armrests : `${armrests}`,\n sideguards : `${sideguards}`,\n rear_wheels : `${rear_wheels}`,\n brakes : `${breaks}`,\n safety : `${safety}`,\n led_lights : `${_framePath}/${led_lights}`,\n };\n\n const materialGroups = this.getBaseMaterialGroup();\n\n this.props.showPreloader();\n this.wheelchair\n .loadParts(parts, materialGroups, true)\n .finally(() => this.props.hidePreloader());\n\n this._updateHotspots(this.currentCategory);\n }\n\n // ---------------------------------------------------------------------------\n\n updateFrameRepositionableParts() {\n const { _framePath, _region } = this.props.config;\n const forks = this.getSrcByOptionValue(\"CASTERS\", \"forks\");\n const casters = this.getSrcByOptionValue(\"CASTERS\", \"casters\");\n const footrest = this.getSrcByOptionValue(\"FOOTREST\", \"footrest\");\n const led_lights = this.getSrcByOptionValue(\"FRAME\", \"led_lights\");\n const type = this.getSrcByOptionValue(\"FRAME\", \"type\");\n const f55 = this.getSrcByOptionValue(\"ADDONS\", \"f55\");\n\n // we compute this way because removable parts should pass a false value\n // casted as string, but in this case we have the frame_path prepended\n const led_lights_path = !led_lights ? false : `${_framePath}/${led_lights}`;\n const type_path = !type ? false : `${_framePath}/${type}`;\n const f55_path = !f55 ? false : `${_framePath}/${f55}`;\n\n const parts = {\n lower_frame: `${_framePath}/Lower_Frame/${_region}_Lower_Frame.glb`,\n forks: `${_framePath}/${forks}`,\n casters: `${_framePath}/${casters}`,\n footrest: `${_framePath}/${footrest}`,\n led_lights: `${led_lights_path}`,\n type: `${type_path}`,\n f55: `${f55_path}`\n };\n\n if (!f55_path) {\n this.wheelchair.unloadPart(\"f55\");\n }\n\n const materialGroups = [\n ...MaterialGroups.frameMaterials(configMap , this.props),\n ...MaterialGroups.footRestMaterials(configMap , this.props),\n ...MaterialGroups.casterMaterials(configMap , this.props),\n ...MaterialGroups.addOnMaterials(configMap , this.props),\n ];\n\n this.props.showPreloader();\n this.wheelchair\n .loadParts(parts, materialGroups)\n .finally(() => this.props.hidePreloader());\n\n this._updateHotspots(this.currentCategory);\n }\n\n updateBackrestRepositionableParts() {\n const parts = {};\n\n // BACKREST\n const backrest = this.getSrcByOptionValue(\"BACKREST\", \"backrest\");\n parts.backrest = `${backrest}`;\n\n // PUSH HANDLES\n const push_handles = this.getSrcByOptionValue(\"BACKREST\", \"push_handles\");\n \n if (!push_handles) {\n this.wheelchair.unloadPart(\"push_handles\");\n } else {\n parts.push_handles = `${push_handles}`;\n }\n\n // PUSH BAR\n\n const push_bar = this.getSrcByOptionValue(\"BACKREST\", \"push_bar\");\n \n if (!push_bar) {\n this.wheelchair.unloadPart(\"push_bar\");\n } else {\n const { _pushbarPath } = this.props.config;\n parts.push_bar = `${_pushbarPath}/${push_bar}`;\n }\n\n const materialGroups = [\n ...MaterialGroups.backrestMaterials(configMap , this.props),\n ...MaterialGroups.frameMaterials(configMap , this.props),\n ];\n\n this.props.showPreloader();\n this.wheelchair\n .loadParts(parts, materialGroups)\n .finally(() => this.props.hidePreloader());\n\n this._updateHotspots(this.currentCategory);\n }\n\n updateArmrestSideguards() {\n const sideguards = this.getSrcByOptionValue(\"SIDEGUARDS\", \"sideguards\");\n \n if (!sideguards) {\n this.wheelchair.unloadPart(\"sideguards\");\n return;\n }\n\n const parts = {\n sideguards: `${sideguards}`\n };\n\n const materialGroups = [\n ...MaterialGroups.sideGuardsMaterials(configMap, this.props),\n ...MaterialGroups.frameMaterials(configMap, this.props)\n ];\n\n this.props.showPreloader();\n this.wheelchair\n .loadParts(parts, materialGroups)\n .finally(() => this.props.hidePreloader());\n }\n\n updatePartAttribute(part, attr, newVal, oldVal) {\n const { _region } = this.props.config;\n\n if (!this.validatePartAttributeValue(part, attr, newVal)) {\n return;\n }\n\n this.debug &&\n console.log(\"updatePartAttribute():\", part, attr, newVal, oldVal);\n\n const assetType = configMap[part][attr].assetType;\n\n if (assetType === \"material\") {\n const targets = configMap[part][attr].targets;\n\n this.props.showPreloader();\n this.wheelchair\n .updatePartsMaterials(targets, newVal)\n .finally(() => this.props.hidePreloader());\n } else if (assetType === \"model\") {\n const isRegionalOption = configMap[part][attr].regional || false;\n const options = isRegionalOption\n ? configMap[part][attr].options[_region]\n : configMap[part][attr].options;\n const newOption = options.find((el) => el.value === newVal);\n\n this.debug && console.log(`SET ${part} ${attr}:`, newVal, newOption);\n\n let src = newOption.src;\n\n this._updateHotspots(this.currentCategory);\n\n // \"NONE\" case\n if (src === false) {\n this.wheelchair.unloadPart(attr);\n return;\n }\n\n // Handle zoom out on F55 load\n // F55 unload is stopped at the previous \"NONE\" case\n if (part === \"ADDONS\" && attr === 'f55') {\n this.camera.zoomCameraTo(1.04, 0.75);\n setTimeout(() => {\n this.updatePartAttribute_LoadPart(part, attr, newOption, src);\n }, 375); // less time than animation because of easing curve\n return;\n }\n\n this.updatePartAttribute_LoadPart(part, attr, newOption, src);\n } \n }\n\n updatePartAttribute_LoadPart(part, attr, newOption, src) {\n const { _region } = this.props.config;\n\n if (newOption.hasOwnProperty(\"regional\") && newOption.regional) {\n src = newOption.src[_region];\n } else if (/(footrest|casters|forks|led_lights|type|f55)/.test(attr)) {\n const { _framePath } = this.props.config;\n src = `${_framePath}/${src}`;\n } else if (/(push_bar)/.test(attr)) {\n const { _pushbarPath } = this.props.config;\n src = `${_pushbarPath}/${src}`;\n }\n\n const parts = {\n [attr]: src,\n };\n\n const materialGroups = this.getBaseMaterialGroup();\n\n this.props.showPreloader();\n this.wheelchair\n .loadParts(parts, materialGroups)\n .finally(() => this.props.hidePreloader());\n }\n\n validatePartAttributeValue(part, attr, value) {\n const { _region } = this.props.config;\n\n if (!configMap.hasOwnProperty(part)) {\n console.error(`Missing definitions for ${part} part`);\n return false;\n }\n\n if (!configMap[part].hasOwnProperty(attr)) {\n console.error(`Missing definitions for ${part} ${attr} attribute`);\n return false;\n }\n\n if (!configMap[part][attr].hasOwnProperty(\"assetType\")) {\n console.error(`Missing assetType definition for ${part} ${attr}`);\n return false;\n }\n\n const assetType = configMap[part][attr].assetType;\n\n if (assetType === \"declarative\") {\n return true;\n } else if (assetType === \"contextual\") {\n return true;\n } else if (assetType === \"material\") {\n // @todo validate\n // should validate material.id - if we have multiple sets, we need\n // to validate via unique id to avoid false positive\n return true;\n } else if (assetType === \"model\") {\n const isRegionalOption = configMap[part][attr].regional || false;\n const options = isRegionalOption\n ? configMap[part][attr].options[_region]\n : configMap[part][attr].options;\n const option = options.find((el) => el.value === value);\n\n if (!option) {\n console.error(\n `Missing definitions for ${part} ${attr} ${value} option`\n );\n return false;\n }\n\n return true;\n } else {\n console.error(\n `Unknown assetType definition for ${part} ${attr}:`,\n assetType\n );\n\n return false;\n }\n }\n\n getSrcByOptionValue(part, attr) {\n const config = this.props.config;\n const {_region} = config;\n\n const isRegionalOption = configMap[part][attr].regional || false;\n const options = isRegionalOption\n ? configMap[part][attr].options[_region]\n : configMap[part][attr].options;\n\n const option = options.find((el) => el.value === config[part][attr]);\n\n if (!option) {\n return false;\n }\n\n if (option.hasOwnProperty(\"regional\") && option.regional) {\n return option.src[_region];\n };\n\n return option.src;\n }\n\n getBaseMaterialGroup() {\n return [\n ...MaterialGroups.rearWheelsMaterials(configMap, this.props),\n // Important to process sideguard materials first as there is a conflict\n // with frame materials on the aluminium sideguards\n ...MaterialGroups.sideGuardsMaterials(configMap, this.props),\n ...MaterialGroups.frameMaterials(configMap, this.props),\n ...MaterialGroups.backrestMaterials(configMap, this.props),\n ...MaterialGroups.casterMaterials(configMap, this.props),\n ...MaterialGroups.seatSlingMaterials(configMap, this.props),\n ...MaterialGroups.footRestMaterials(configMap, this.props),\n ...MaterialGroups.wheelLocksMaterials(configMap, this.props),\n ...MaterialGroups.addOnMaterials(configMap, this.props),\n ];\n }\n\n _findMaterialByLinkKey(linkKey) {\n const materials = materialsMap.MATERIALS;\n\n for (let name in materials) {\n const matLinkKey = materials[name].linkKey;\n if (matLinkKey === linkKey) {\n return name;\n }\n }\n\n return false;\n }\n\n // ---------------------------------------------------------------------------\n // INITIALIZE\n // ---------------------------------------------------------------------------\n\n createRenderer() {\n const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\n renderer.setSize(window.innerWidth, window.innerHeight);\n renderer.setPixelRatio(window.devicePixelRatio);\n\n renderer.outputEncoding = true;\n renderer.gammaFactor = 1.0;\n renderer.autoClear = true;\n\n renderer.setClearColor(0x000000, 0);\n renderer.physicallyCorrectLights = true;\n renderer.toneMapping = THREE.ACESFilmicToneMapping;\n renderer.outputEncoding = THREE.sRGBEncoding;\n renderer.toneMappingExposure = 1;\n renderer.shadowMap.type = THREE.PCFSoftShadowMap;\n\n return renderer;\n }\n\n createScene() {\n const scene = new THREE.Scene();\n // scene.background = new THREE.Color( 0x000000 );\n\n return scene;\n }\n\n createStats() {\n const stats = new Stats();\n stats.showPanel(2); // 0: fps, 1: ms, 2: mb, 3+: custom\n stats.dom.style.right = \"0px\";\n stats.dom.style.left = \"auto\";\n document.body.appendChild(stats.dom);\n\n return stats;\n }\n\n // ---------------------------------------------------------------------------\n // GLOBAL HANDLERS\n // ---------------------------------------------------------------------------\n\n onHDRLoaded(hdr) {\n this.wheelchair.setHdr(hdr);\n }\n\n onWheelchairLoaded() {\n this.camera.moveCamera(90, 220, 1, 1, 1, () => {\n this.hotspotsManager.createHotSpots();\n this.fpsMonitor.enable();\n });\n }\n\n onWindowResize() {\n this.lastWidth = this.mount.offsetWidth;\n this.camera.camera.aspect = this.mount.offsetWidth / window.innerHeight;\n this.camera.camera.updateProjectionMatrix();\n this.renderer.setSize(this.mount.offsetWidth, window.innerHeight);\n }\n\n // ---------------------------------------------------------------------------\n // HOTSPOTS\n // ---------------------------------------------------------------------------\n\n onCategoryChange(currentCategory, prevCategory) {\n this.currentCategory = currentCategory;\n\n this._updateHotspots(currentCategory);\n if (!currentCategory) {\n // Drawer was closed\n }\n }\n\n _updateHotspots(category) {\n const { angle, inset, type, axle_tube, led_lights } = this.props.config.FRAME;\n const { utility_bag_right, cushion } = this.props.config.SEAT_SLING;\n const { push_bar, push_handle_and_back } = this.props.config.BACKREST;\n const { sideguards } = this.props.config.SIDEGUARDS;\n const { footrest } = this.props.config.FOOTREST;\n const { casters, forks } = this.props.config.CASTERS;\n const { rear_wheels } = this.props.config.REAR_WHEELS;\n const { brakes } = this.props.config.WHEEL_LOCKS;\n const { safety } = this.props.config.ADDONS;\n\n const parts = [\n angle, inset, type, axle_tube, led_lights,\n utility_bag_right, cushion,\n push_bar, push_handle_and_back, \n sideguards,\n footrest,\n casters, forks,\n rear_wheels,\n brakes,\n safety\n ]\n\n this.hotspotsManager.updateHotSpots(category, parts);\n }\n\n onHotspotOver(hotspot) {\n const { transKey } = hotspot;\n const { x, y } = hotspot.screenPosition;\n this.props.showTooltip({ transKey, x, y });\n }\n\n onHotspotOut() {\n this.props.hideTooltip();\n }\n\n onHotspotSelected(hotspot) {\n const { cameraX, cameraY, zoom } = hotspot; // transKey\n this.camera.moveCamera(cameraX, cameraY, zoom, 1);\n this.props.hideTooltip();\n // window.ga('send', 'event', \"visualiser\", \"hotspot\", transKey);\n }\n\n onHotspotSelectedDelayed(hotspot) {\n const { type, transKey, src } = hotspot;\n const { x, y } = hotspot.screenPosition;\n\n if (type === \"video\") {\n this.props.showModal({ transKey, src });\n } else if (type === \"image\" || type === \"text\") {\n this.props.showPopover({ transKey, src, x, y });\n }\n }\n\n // ---------------------------------------------------------------------------\n // ZOOM\n // ---------------------------------------------------------------------------\n\n onZoomIn() {\n this.camera.zoomCamera(1);\n }\n\n onZoomOut() {\n this.camera.zoomCamera(-1);\n }\n\n // ---------------------------------------------------------------------------\n // RENDER / ANIMATE\n // ---------------------------------------------------------------------------\n\n animate = () => {\n if (!this.isMobile && this.lastWidth !== this.mount.offsetWidth) {\n this.onWindowResize();\n }\n\n this.fpsMonitor.begin();\n \n this.debug && this.stats.begin();\n \n this.camera.update();\n this.wheelchair.update();\n this.hotspotsManager.update();\n this.renderer.render(this.scene, this.camera.camera);\n \n this.debug && this.stats.end();\n \n const fps = this.fpsMonitor.end();\n\n if (fps && fps < this.dropFramesThreshold) {\n this.dropFramesThresholdCounter--;\n if (this.dropFramesThresholdCounter === 0) {\n console.log(\"Disabling shadows\");\n this.UseShadows = false;\n this.fpsMonitor.disable();\n }\n } \n\n requestAnimationFrame(this.animate);\n };\n\n render() {\n const { t,preloaderVisible, viewerShrinked } = this.props;\n\n return (\n
\n (this.mount = ref)}\n className={`content ${viewerShrinked ? \"shrinked\" : \"\"}`}\n />\n
\n
\n \n \n \n
{t(\"zoom_in\")}
\n
\n
\n \n \n \n
{t(\"zoom_out\")}
\n
\n
\n \n \n \n
{t(\"refresh\")}
\n
\n
\n \n
\n \n
\n
\n \n );\n }\n}\n\nexport default withTranslation()(connect(mapState, mapDispatch)(Viewer));\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 id: \"X\",\n transform: \"translate(18.768 3.745) rotate(90)\"\n}, /*#__PURE__*/React.createElement(\"line\", {\n fill: \"none\",\n stroke: \"#55595b\",\n \"data-name\": \"L\\\\xEDnea 1\",\n x1: 12.551,\n y2: 0.99,\n transform: \"translate(8.872 6.85) rotate(135)\",\n strokeLinecap: \"round\",\n strokeWidth: 4\n}), /*#__PURE__*/React.createElement(\"line\", {\n fill: \"none\",\n stroke: \"#55595b\",\n \"data-name\": \"L\\\\xEDnea 2\",\n x1: 12.551,\n y1: 0.99,\n transform: \"translate(8.574 6.15) rotate(45)\",\n strokeLinecap: \"round\",\n strokeWidth: 4\n}));\n\nvar SvgCaret = function SvgCaret(_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: 15.659,\n height: 24.236,\n viewBox: \"0 0 15.659 24.236\",\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(SvgCaret, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/caret.c29d4635.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Component, createRef } from \"react\";\nimport { withTranslation } from \"react-i18next\";\nimport { connect } from \"react-redux\";\nimport { closeDrawer, closeNitrum } from \"../store/navSlice\";\n\nimport \"./Header.scss\";\nimport sunriseLogo from \"../assets/images/sunrise-medical-logo-color.svg\";\nimport nitrumLogo from \"../assets/images/nitrum-logo.svg\";\nimport { ReactComponent as IconCaret } from \"../assets/images/caret.svg\";\n\n\nfunction mapState(state) {\n const { activePart, nitrumOpen } = state.nav;\n const configCode = state.config._code;\n\n return {\n activePart,\n nitrumOpen,\n configCode\n };\n}\n\nconst mapDispatch = { closeDrawer, closeNitrum };\n\nclass Header extends Component {\n constructor(props) {\n super();\n this.state = {\n activePartDelayed: props.activePart,\n nitrumOpenDelayed: props.nitrumOpen,\n showCopiedFeedback: false\n };\n\n this.copyInput = createRef();\n }\n\n componentDidUpdate(prevProps) {\n const part = this.props.activePart;\n const prevPart = prevProps.activePart;\n\n // Delay unsetting the part so out transition can play\n if (prevPart !== null && part === null) {\n clearInterval(this.timerID);\n this.timerID = setTimeout(() => {\n this.setState({\n activePartDelayed: part,\n });\n }, 500);\n } else if (prevPart !== part) {\n this.setState({\n activePartDelayed: part,\n });\n }\n\n const nitrumOpen = this.props.nitrumOpen;\n const prevNitrumOpen = prevProps.nitrumOpen;\n\n // Delay unsetting yourNitrumVisible so out transition can play\n if (prevNitrumOpen && !nitrumOpen) {\n clearInterval(this.timerID);\n this.timerID = setTimeout(() => {\n this.setState({\n nitrumOpenDelayed: false\n });\n }, 500);\n } else if (prevNitrumOpen !== nitrumOpen) {\n this.setState({\n nitrumOpenDelayed: nitrumOpen\n });\n }\n }\n\n render() {\n const { t, activePart, nitrumOpen } = this.props;\n const { activePartDelayed, nitrumOpenDelayed } = this.state;\n\n const showTitle = nitrumOpen || activePart !== null;\n let title = \"\";\n\n if (nitrumOpenDelayed) {\n title = \"\"; // t(`common:your_nitrum_configuration`);\n } else {\n title = t(`parts:${activePartDelayed}._part_name`);\n }\n\n return (\n
\n {\n this.props.closeDrawer();\n this.props.closeNitrum();\n }}\n >\n
\n \n
\n
\n \"Sunrise\n
\n \n
{title}
\n
\n \"Sunrise\n
\n
\n );\n }\n}\n\nexport default withTranslation([\"common\", \"parts\"])(\n connect(mapState, mapDispatch)(Header)\n);\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { closeDrawer } from \"../store/navSlice\";\n\nimport \"./Drawer.scss\";\nimport { ReactComponent as IconCaret } from \"../assets/images/caret.svg\";\n\nconst Drawer = ({ children }) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const open = useSelector((state) => state.nav.drawerOpen);\n\n return (\n
\n
\n
\n dispatch(closeDrawer())}\n title={t(\"hide\")}\n >\n \n \n
\n
\n {children}\n
\n
\n );\n};\n\nexport default Drawer;\n","import { useEffect, useRef } from \"react\";\n\n/**\n * Helper effect to achieve \"prevProps\" on useEffect hook\n */\nexport function usePrevious(value) {\n const ref = useRef();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\n","import React, { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { usePrevious } from \"../utils/previous-hook\";\nimport { set } from \"../store/configSlice\";\nimport configMap from \"../data/config\";\nimport materialsMap from \"../data/materials\";\n\nconst SectionDisabledException = {};\nconst OptionDisabledException = {};\n\nfunction ColorsetOptions({ part, attr, regional, materialSet, setConstrainedBy }) {\n const { t } = useTranslation();\n const config = useSelector((state) => state.config);\n const region = useSelector((state) => state.config._region);\n const selectedMaterial = useSelector((state) => state.config[part][attr]);\n const dispatch = useDispatch();\n\n if (!materialsMap.SETS.hasOwnProperty(materialSet)) {\n console.warn(`Material set \"${materialSet}\" does not exist`);\n materialSet = materialsMap.SETS.DEFAULT;\n } else {\n if (!regional) {\n materialSet = materialsMap.SETS[materialSet];\n } else {\n if (!materialsMap.SETS[materialSet].hasOwnProperty(region)) {\n console.warn(\n `Material set \"${materialSet}\" is missing ${region} definitios`\n );\n materialSet = materialsMap.SETS.DEFAULT;\n } else {\n materialSet = materialsMap.SETS[materialSet][region];\n }\n }\n }\n\n let constrainTo = false;\n if (setConstrainedBy) {\n const { part, attr, values, allowedMaterials } = setConstrainedBy;\n const constrainerValue = config[part][attr];\n const isConstrained = values.find((el) => el === constrainerValue);\n if (isConstrained) {\n constrainTo = allowedMaterials;\n }\n }\n\n return materialSet.map((name, ix) => {\n const mat = materialsMap.MATERIALS[name];\n if (!mat) {\n console.warn(\n `Material \"${name}\" in \"${materialSet}\" colorset does not exist`\n );\n return null;\n }\n\n if (constrainTo) {\n const isAllowed = constrainTo.find((el) => el === name);\n if (!isAllowed) {\n return null;\n }\n }\n\n return (\n dispatch(set({ part, attr, option: { value: name } }))}\n >\n );\n });\n}\n\nfunction LabelOptions({ part, attr, regional, options }) {\n const { t } = useTranslation();\n const config = useSelector((state) => state.config);\n const { _country } = config;\n const selectedValue = useSelector((state) => state.config[part][attr]);\n const dispatch = useDispatch();\n\n options = regional ? options[config._region] : options;\n\n if (!options.length) {\n return null;\n }\n\n return options.map((option, ix) => {\n if (option.hidden) {\n return null;\n }\n\n if (option.hasOwnProperty(\"country_constraints\")) {\n if (option.country_constraints.hasOwnProperty(\"exclude\")) {\n try {\n const excludedCountries = option.country_constraints.exclude;\n const isExcluded = excludedCountries.find((el) => el === _country);\n if (isExcluded) throw OptionDisabledException;\n } catch (error) {\n if (error !== OptionDisabledException) {\n throw error;\n } else {\n return null;\n }\n }\n }\n }\n\n if (option.hasOwnProperty(\"constrained_by\")) {\n try {\n option.constrained_by.forEach((constraint) => {\n const { part, attr, values } = constraint;\n const constrainerValue = config[part][attr];\n const isAllowed = values.find((el) => el === constrainerValue);\n if (!isAllowed) throw OptionDisabledException;\n });\n } catch (error) {\n if (error !== OptionDisabledException) {\n throw error;\n } else {\n return null;\n }\n }\n }\n\n return (\n dispatch(set({ part, attr, option }))}\n >\n {t(`parts:${part}.${option.transKey}`)}\n \n );\n });\n}\n\nfunction ValueOptions({ part, attr, regional, options }) {\n const { t } = useTranslation();\n const config = useSelector((state) => state.config);\n const selectedValue = useSelector((state) => state.config[part][attr]);\n const dispatch = useDispatch();\n\n options = regional ? options[config._region] : options;\n\n return options.map((option, ix) => {\n if (option.hasOwnProperty(\"constrained_by\")) {\n try {\n option.constrained_by.forEach((constraint) => {\n const { part, attr, values } = constraint;\n const constrainerValue = config[part][attr];\n const isAllowed = values.find((el) => el === constrainerValue);\n if (!isAllowed) throw OptionDisabledException;\n });\n } catch (error) {\n if (error !== OptionDisabledException) {\n throw error;\n } else {\n return null;\n }\n }\n }\n\n return (\n dispatch(set({ part, attr, option }))}\n >\n {t(`parts:${part}.${option.valueTransKey}`)}\n \n );\n });\n}\n\nfunction Section({ part, attr }) {\n const { t } = useTranslation();\n const config = useSelector((state) => state.config);\n const [expanded, setExpanded] = useState(false);\n const [scrollHeight, setScrollHeight] = useState(0);\n\n const section = configMap[part][attr];\n const { transKey, collapsible, optionsType, options, materialSet } = section;\n\n const measuredRef = useCallback(\n (node) => {\n if (collapsible && node !== null) {\n setScrollHeight(node.scrollHeight);\n }\n },\n [collapsible]\n );\n\n // This is used when the option is \"hidden\" only for a region\n // (we have an empty options array)\n if (section.regional && options && !options[config._region].length) {\n return null;\n }\n\n if (section.hasOwnProperty(\"constrained_by\")) {\n try {\n section.constrained_by.forEach((constraint) => {\n const { part, attr, values } = constraint;\n const constrainerValue = config[part][attr];\n const isAllowed = values.find((el) => el === constrainerValue);\n if (!isAllowed) throw SectionDisabledException;\n });\n } catch (error) {\n if (error !== SectionDisabledException) {\n throw error;\n } else {\n return null;\n }\n }\n }\n\n let content;\n let layout;\n\n if (optionsType === \"label\") {\n layout = `grid grid-${section.gridSize || \"full\"}`;\n content = (\n \n );\n } else if (optionsType === \"value\") {\n layout = \"bullets\";\n content = (\n \n );\n } else if (optionsType === \"color\") {\n // Don't show section if it only has one color option\n if (\n section.regional &&\n materialsMap.SETS[materialSet][config._region]?.length === 1\n ) {\n return null;\n } else if (materialsMap.SETS[materialSet]?.length === 1) {\n return null;\n }\n\n layout = \"bullets\";\n content = (\n \n );\n }\n\n let collapsibleClass = \"\";\n let collapsibleStyle = {};\n\n if (collapsible) {\n collapsibleClass = `collapsible ${expanded ? \"expanded\" : \"\"}`;\n collapsibleStyle = {\n height: expanded ? scrollHeight + \"px\" : \"0px\",\n };\n }\n\n return (\n
\n setExpanded(!expanded) : () => {}}\n >\n {collapsible &&
}\n {t(`parts:${part}.${transKey}`)}\n \n
\n
{content}
\n
\n
\n );\n}\n\nexport default function ConfigFormBuilder() {\n const activePart = useSelector((state) => state.nav.activePart);\n const prevActivePart = usePrevious(activePart);\n const [activePartDelayed, setActivePartDelayed] = useState(activePart);\n const scrollArea = useRef(null);\n\n useEffect(() => {\n const prevPart = prevActivePart;\n const part = activePart;\n\n // Delay unsetting the part so out transition can play\n if (prevPart !== null && part === null) {\n const timer = setTimeout(() => {\n setActivePartDelayed(part);\n }, 500);\n return () => clearTimeout(timer);\n } else if (prevPart !== part) {\n setActivePartDelayed(part);\n setTimeout(() => {\n scrollArea.current.scrollTop = 0;\n }, 10);\n }\n }, [activePart, prevActivePart]);\n\n if (!activePartDelayed || !configMap.hasOwnProperty(activePartDelayed)) {\n return null;\n }\n\n return (\n
\n {Object.keys(configMap[activePartDelayed]).map((key) => {\n if (configMap[activePartDelayed][key].hidden) {\n return null;\n }\n return
;\n })}\n
\n );\n}\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 fill: \"#f00\",\n d: \"M11.2,16.6c0.4,0.5,1.2,0.5,1.6,0l6-6.3C19.3,9.8,18.8,9,18,9h-4c0,0,0.2-4.6,0-7c-0.1-1.1-0.9-2-2-2s-1.9,0.9-2,2c-0.2,2.3,0,7,0,7H6c-0.8,0-1.3,0.8-0.8,1.4L11.2,16.6z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#f00\",\n d: \"M19,19H5c-1.1,0-2,0.9-2,2l0,0c0,0.6,0.4,1,1,1h16c0.6,0,1-0.4,1-1l0,0C21,19.9,20.1,19,19,19z\"\n});\n\nvar SvgDownload = function SvgDownload(_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 x: \"0px\",\n y: \"0px\",\n width: \"24px\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n style: {\n enableBackground: \"new 0 0 24 24\"\n },\n xmlSpace: \"preserve\",\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(SvgDownload, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/download.db31cfe9.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 id: \"facebook\",\n d: \"M17.857,4.741h2.607V.2a33.658,33.658,0,0,0-3.8-.2c-3.758,0-6.332,2.364-6.332,6.708v4H6.187v5.075h4.147v12.77h5.085V15.783H19.4l.632-5.075H15.417v-3.5c0-1.467.4-2.471,2.44-2.471Z\",\n transform: \"translate(-6.187)\",\n fill: \"#a7adaf\"\n});\n\nvar SvgFacebook = function SvgFacebook(_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: 14.277,\n height: 28.552,\n viewBox: \"0 0 14.277 28.552\",\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(SvgFacebook, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/facebook.f0860760.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 id: \"Path_186\",\n \"data-name\": \"Path 186\",\n d: \"M26.327,50.532a11.253,11.253,0,0,1-3.11.852A5.367,5.367,0,0,0,25.591,48.4a10.786,10.786,0,0,1-3.422,1.306A5.4,5.4,0,0,0,12.833,53.4a5.557,5.557,0,0,0,.125,1.231A15.277,15.277,0,0,1,1.833,48.984,5.4,5.4,0,0,0,3.492,56.2a5.33,5.33,0,0,1-2.439-.665v.059a5.422,5.422,0,0,0,4.324,5.3,5.387,5.387,0,0,1-1.415.178,4.772,4.772,0,0,1-1.022-.092,5.449,5.449,0,0,0,5.043,3.76,10.845,10.845,0,0,1-6.692,2.3A10.108,10.108,0,0,1,0,66.969a15.2,15.2,0,0,0,8.28,2.422A15.256,15.256,0,0,0,23.642,54.032c0-.239-.008-.469-.02-.7A10.767,10.767,0,0,0,26.327,50.532Z\",\n transform: \"translate(0 -48)\",\n fill: \"#a7adaf\"\n});\n\nvar SvgTwitter = function SvgTwitter(_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: 26.327,\n height: 21.391,\n viewBox: \"0 0 26.327 21.391\",\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(SvgTwitter, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/twitter.3acc28df.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 clipRule: \"evenodd\",\n d: \"M11.984,13C10.031,13-0.031,4.891-0.031,4.891V4c0-1.104,0.896-2,2.002-2h20.026 C23.104,2,24,2.896,24,4l-0.016,1C23.984,5,14.031,13,11.984,13z M11.984,15.75c2.141,0,12-7.75,12-7.75L24,20 c0,1.104-0.896,2-2.003,2H1.971c-1.105,0-2.002-0.896-2.002-2l0.016-12C-0.016,8,10.031,15.75,11.984,15.75z\",\n fillRule: \"evenodd\"\n});\n\nvar SvgEmailAlt = function SvgEmailAlt(_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 enableBackground: \"new 0 0 24 24\",\n height: \"24px\",\n id: \"Layer_1\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n xmlSpace: \"preserve\",\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(SvgEmailAlt, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/email-alt.8def92a7.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 id: \"Path_187\",\n \"data-name\": \"Path 187\",\n d: \"M10.054,272.129a2.13,2.13,0,0,0-2.117,2.117.794.794,0,1,0,1.588,0,.511.511,0,0,1,.529-.529H20.638a.512.512,0,0,1,.529.529v14.817a.512.512,0,0,1-.529.529.794.794,0,1,0,0,1.588,2.13,2.13,0,0,0,2.117-2.117V274.246a2.13,2.13,0,0,0-2.117-2.117Zm-4.233,4.233A2.13,2.13,0,0,0,3.7,278.479V293.3a2.13,2.13,0,0,0,2.117,2.117H16.4a2.13,2.13,0,0,0,2.117-2.117V278.479a2.13,2.13,0,0,0-2.117-2.117Zm0,1.587H16.4a.512.512,0,0,1,.529.529V293.3a.512.512,0,0,1-.529.529H5.821a.511.511,0,0,1-.529-.529V278.479A.512.512,0,0,1,5.821,277.95Z\",\n transform: \"translate(-3.704 -272.129)\",\n fill: \"#9a9a9a\",\n fillRule: \"evenodd\"\n});\n\nvar SvgCopy = function SvgCopy(_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: 19.05,\n height: 23.283,\n viewBox: \"0 0 19.05 23.283\",\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(SvgCopy, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/copy.58f2486b.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Component, createRef } from \"react\";\nimport { withTranslation } from \"react-i18next\";\nimport { connect } from \"react-redux\";\nimport { jsPDF } from \"jspdf\";\nimport html2canvas from \"html2canvas\";\nimport pkg from \"../../package.json\";\nimport configMap from \"../data/config\";\nimport materialsMap from \"../data/materials\";\n\nimport \"./NavNitrum.scss\";\nimport { ReactComponent as IconDownload } from \"../assets/images/download.svg\";\nimport { ReactComponent as IconFacebook } from \"../assets/images/facebook.svg\";\nimport { ReactComponent as IconTwitter } from \"../assets/images/twitter.svg\";\nimport { ReactComponent as IconEmail } from \"../assets/images/email-alt.svg\";\nimport { ReactComponent as IconCopy } from \"../assets/images/copy.svg\";\n\nfunction mapState(state) {\n return {\n nitrumOpen: state.nav.nitrumOpen,\n config: state.config,\n configCode: state.config._code,\n region: state.config._region,\n };\n}\n\nclass NavNitrum extends Component {\n constructor(props) {\n super();\n this.pdfMode = \"html\"; // html|form\n this.shareUrlUsesHash = true;\n this.state = {\n showCopiedFeedback: false\n };\n this.copyInput = createRef();\n\n const url = new URL(window.location.toString());\n this.baseUrl = url.origin + (pkg.homepage || \"\");\n }\n\n getShareUrl(target) {\n const { t } = this.props;\n\n let shareUrl = this.shareUrlUsesHash \n ? `${this.baseUrl}/index.html#/share/${this.props.configCode}`\n : `${this.baseUrl}/share/${this.props.configCode}`;\n shareUrl = encodeURIComponent(shareUrl);\n\n let url;\n\n if (target === \"facebook\") {\n url = `https://www.facebook.com/sharer/sharer.php?u=${shareUrl}`;\n\n } else if (target === \"twitter\") {\n const text = encodeURIComponent(t(\"share_tweet_text\"));\n const rel = \"SunriseMedical\";\n url = `https://twitter.com/intent/tweet?text=${text}&url=${shareUrl}&related=${rel}`;\n\n } else if (target === \"email\") {\n const subject = encodeURIComponent(t(\"share_email_subject\"));\n const body = encodeURIComponent(t(\"share_email_body\") + \" \") + shareUrl;\n url = `mailto:?subject=${subject}&body=${body}`;\n }\n\n return url;\n };\n\n copyCode() {\n const input = this.copyInput.current;\n\n if (input !== null) {\n input.select();\n input.setSelectionRange(0, 99999); // For mobile devices\n document.execCommand(\"copy\");\n window.getSelection().removeAllRanges();\n \n this.setState({ showCopiedFeedback: true });\n setTimeout(() => {\n this.setState({ showCopiedFeedback: false });\n }, 1000);\n }\n }\n\n downloadPDF() {\n if (this.pdfMode === \"html\") {\n this.downloadPDF_HTML();\n } else if (this.pdfMode === \"form\") {\n this.downloadPDF_Form();\n }\n }\n\n downloadPDF_Form() {\n const {config, region} = this.props;\n const lib = window.pdfform();\n const url = `${this.baseUrl}/forms/58838-eu-master.pdf`;\n\n function fill(buf) {\n const fields = {};\n\n Object.keys(configMap).map((partKey) => {\n const attributes = configMap[partKey];\n return Object.keys(attributes).map((attrKey) => {\n const { hidden, assetType, regional, options } = configMap[partKey][\n attrKey\n ];\n\n if (hidden) {\n return null;\n }\n\n const selectedValue = config[partKey][attrKey];\n if (!selectedValue) {\n return null;\n }\n\n if (assetType === \"material\") {\n const selectedMaterial = materialsMap.MATERIALS[selectedValue];\n if (selectedMaterial) {\n return null;\n }\n return null;\n } else {\n const isRegionalOption = regional || false;\n const opts = isRegionalOption ? options[region] : options;\n const selectedOption = opts.find((el) => el.value === selectedValue);\n if (selectedOption.hidden) {\n return null;\n }\n \n if (selectedOption && selectedOption.hasOwnProperty(\"form\")) {\n const key = selectedOption.form.key;\n const val = selectedOption.form.val;\n // console.log(selectedOption.form);\n \n if (val) {\n return fields[key] = [val];\n }\n\n const compoundVal = selectedOption.form.compound_val;\n if (compoundVal) {\n const relValue = config[compoundVal.part][compoundVal.attr];\n return fields[key] = [compoundVal.values[relValue]];\n }\n }\n\n return null;\n }\n }); \n });\n \n let filledPDF; // Uint8Array\n try {\n filledPDF = lib.transform(buf, fields);\n } catch (error) {\n console.error(\"Error filling PDF form\", error);\n }\n\n const blob = new Blob([filledPDF], {type: 'application/pdf'});\n window.saveAs(blob, 'pdfform.js_generated.pdf');\n }\n\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n\n xhr.onload = function() {\n if (this.status === 200) {\n return fill(this.response);\n }\n\n console.error(\"Error loading PDF form\", url);\n };\n\n xhr.send();\n }\n\n downloadPDF_HTML() {\n const { region } = this.props;\n\n const A4 = [595.28, 841.89];\n const doc = new jsPDF({ format: A4, unit: \"px\" });\n\n const content = document.querySelector(\".app-nitrum .scrollarea\");\n const clone = content.cloneNode(true);\n clone.className = \"nitrum-pdf\";\n document.body.appendChild(clone);\n \n // Use html2canvas because jsPDF doesn't handle unicode characters correctly\n // And some languages look broken\n html2canvas(document.querySelector(\".nitrum-pdf\")).then(canvas => {\n const srcSize = clone.getBoundingClientRect();\n console.log(\"CANVAS\", srcSize.width/2, srcSize.height/2);\n doc.addImage(canvas, 'PNG', 0, 0, srcSize.width/2, srcSize.height/2, null, \"SLOW\");\n doc.save(`your-nitrum-${region.toLowerCase()}.pdf`);\n clone.remove();\n });\n };\n\n render() {\n const { t, desktop, nitrumOpen, configCode } = this.props;\n const { showCopiedFeedback } = this.state;\n\n return (\n \n
\n {t('share')}:\n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n
\n {t(\"copied_to_clipboard\")}!\n
\n \n
\n
{t(\"copy_code\")}
\n
\n
\n this.downloadPDF()}\n >\n {t(\"download_pdf\")}\n \n \n
\n \n );\n }\n}\n\nexport default withTranslation()(connect(mapState)(NavNitrum));\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: \"M8.7,21.3L20,10l0,0L15,5L3.7,16.3L8.7,21.3z M8,22L2,23L3,17L8,22zM20.7,9.3l2.1-2.1c0.7-0.7,0-1.4,0-1.4l-3.5-3.5c0,0-0.7-0.7-1.4,0l-2.1,2.1L20.7,9.3L20.7,9.3z\"\n});\n\nvar SvgPencil = function SvgPencil(_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 x: \"0px\",\n y: \"0px\",\n width: \"24px\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n style: {\n enableBackground: \"new 0 0 24 24\"\n },\n xmlSpace: \"preserve\",\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(SvgPencil, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/pencil.fb1ee28b.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useState, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { usePrevious } from \"../utils/previous-hook\";\nimport { closeNitrum, openDrawer } from \"../store/navSlice\";\n\nimport NavNitrum from \"./NavNitrum\";\nimport configMap from \"../data/config\";\nimport materialsMap from \"../data/materials\";\n\nimport \"./YourNitrum.scss\";\nimport sunriseLogo from \"../assets/images/sunrise-medical-logo.png\";\nimport nitrumLogo from \"../assets/images/nitrum-logo.png\";\nimport { ReactComponent as IconCaret } from \"../assets/images/caret.svg\";\nimport { ReactComponent as IconPencil } from \"../assets/images/pencil.svg\";\n\nconst AttrDisabledException = {};\n\nfunction Section({ partKey }) {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const config = useSelector((state) => state.config);\n const attributes = configMap[partKey];\n\n const getAttribute = (attrKey) => {\n const attr = configMap[partKey][attrKey];\n const { transKey, hidden, assetType, regional, materialSet, options } = attr;\n\n if (hidden) {\n return null;\n }\n\n // Don't show attribute if it only has one material option\n if (assetType === \"material\") {\n if (\n regional && materialsMap.SETS[materialSet][config._region]?.length === 1\n ) {\n return null;\n } else if (materialsMap.SETS[materialSet]?.length === 1) {\n return null;\n }\n }\n\n if (attr.hasOwnProperty(\"constrained_by\")) {\n try {\n attr.constrained_by.forEach((constraint) => {\n const { part, attr, values } = constraint;\n const constrainerValue = config[part][attr];\n const isAllowed = values.find((el) => el === constrainerValue);\n if (!isAllowed) throw AttrDisabledException;\n });\n } catch (error) {\n if (error !== AttrDisabledException) {\n throw error;\n } else {\n return null;\n }\n }\n }\n\n const selectedValue = config[partKey][attrKey];\n\n if (!selectedValue) {\n // console.log(`Skipped ${partKey}.${attrKey}`);\n return null;\n }\n\n let selectedValueLabel;\n let selectedValueColor;\n\n if (assetType === \"material\") {\n const selectedMaterial = materialsMap.MATERIALS[selectedValue];\n if (selectedMaterial) {\n selectedValueColor = selectedMaterial.color;\n selectedValueLabel = t(`materials.${selectedMaterial.transKey}`);\n }\n } else {\n const isRegionalOption = regional || false;\n const opts = isRegionalOption ? options[config._region] : options;\n\n const selectedOption = opts.find((el) => el.value === selectedValue);\n\n if (selectedOption.hidden) {\n return null;\n }\n\n if (selectedOption) {\n selectedValueLabel = t(`parts:${partKey}.${selectedOption.transKey}`);\n }\n }\n\n return (\n
\n {t(`parts:${partKey}.${transKey}`)}\n \n {selectedValueLabel}\n {assetType === \"material\" && (\n
\n )}\n \n \n );\n };\n\n return (\n
\n
\n
dispatch(openDrawer(partKey))}>\n \n {t(`parts:${partKey}._part_name`)}\n
\n
\n
\n {Object.keys(attributes).map((attrKey) => {\n return getAttribute(attrKey);\n })}\n
\n
\n );\n}\n\nexport default function YourNitrum() {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const nitrumOpen = useSelector((state) => state.nav.nitrumOpen);\n const prevNitrumOpen = usePrevious(nitrumOpen);\n const [nitrumOpenDelayed, setNitrumOpenDelayed] = useState(nitrumOpen);\n\n useEffect(() => {\n // Delay unsetting yourNitrumVisible so out transition can play\n if (prevNitrumOpen && !nitrumOpen) {\n const timer = setTimeout(() => {\n setNitrumOpenDelayed(nitrumOpen);\n }, 500);\n return () => clearTimeout(timer);\n } else if (prevNitrumOpen !== nitrumOpen) {\n setNitrumOpenDelayed(nitrumOpen);\n }\n }, [nitrumOpen, prevNitrumOpen]);\n\n return (\n
\n
\n
\n dispatch(closeNitrum())}\n title={t(\"hide\")}\n >\n \n \n
\n
\n
\n
\n \"Nitrum\"\n \"Sunrise\n
\n

{t(\"my_summary\")}

\n {nitrumOpenDelayed &&\n Object.keys(configMap).map((partKey) => {\n return
;\n })\n }\n \n
\n
\n
\n );\n}\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 id: \"outside_icon_\",\n \"data-name\": \"outside [icon]\",\n transform: \"translate(0 0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_31\",\n \"data-name\": \"Path 31\",\n d: \"M14.832,43.2V39.219a4.292,4.292,0,0,0,1.547-1.141,2.435,2.435,0,0,0,1.141.254,2.738,2.738,0,0,0,1.75-4.844,2.738,2.738,0,0,0-1.75-4.844h-.178A4.013,4.013,0,0,0,13.666,25.6c-2.156,0-3.931,2.054-3.931,4.59v.025A2.735,2.735,0,0,0,9,35.465a2.613,2.613,0,0,0-.254,1.167,2.793,2.793,0,0,0,2.815,2.739,5.013,5.013,0,0,0,1.014-.178V43.2Z\",\n transform: \"translate(-7.3 -25.125)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n id: \"SUN\",\n transform: \"translate(9.746 0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_32\",\n \"data-name\": \"Path 32\",\n d: \"M65.241,16.163a.314.314,0,0,0,.246.154.277.277,0,0,0,.154-.031.311.311,0,0,0,.123-.4l-.707-1.23a.3.3,0,0,0-.523.277Z\",\n transform: \"translate(-61.919 -13.795)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_33\",\n \"data-name\": \"Path 33\",\n d: \"M58.13,29.108a.308.308,0,0,0-.308-.308H56.408a.308.308,0,1,0,0,.615h1.415A.331.331,0,0,0,58.13,29.108Z\",\n transform: \"translate(-56.1 -23.694)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_34\",\n \"data-name\": \"Path 34\",\n d: \"M60.032,21.31,58.8,20.6a.3.3,0,0,0-.277.523l1.23.707a.277.277,0,0,0,.154.031.274.274,0,0,0,.246-.154A.324.324,0,0,0,60.032,21.31Z\",\n transform: \"translate(-57.664 -17.988)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_35\",\n \"data-name\": \"Path 35\",\n d: \"M59.686,34.9l-1.23.707a.293.293,0,0,0,.123.554.277.277,0,0,0,.154-.031l1.23-.707a.311.311,0,0,0,.123-.4A.271.271,0,0,0,59.686,34.9Z\",\n transform: \"translate(-57.626 -27.89)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_36\",\n \"data-name\": \"Path 36\",\n d: \"M83.479,21.894a.277.277,0,0,0,.154-.031l1.23-.707a.3.3,0,1,0-.277-.523l-1.23.707a.311.311,0,0,0-.123.4A.274.274,0,0,0,83.479,21.894Z\",\n transform: \"translate(-74.867 -18.019)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_37\",\n \"data-name\": \"Path 37\",\n d: \"M73.008,14.23a.308.308,0,0,0,.308-.308V12.508a.308.308,0,1,0-.615,0v1.415A.331.331,0,0,0,73.008,14.23Z\",\n transform: \"translate(-67.594 -12.2)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_38\",\n \"data-name\": \"Path 38\",\n d: \"M78.856,16.256a.277.277,0,0,0,.154.031.274.274,0,0,0,.246-.154l.707-1.23a.3.3,0,1,0-.523-.277l-.707,1.23A.311.311,0,0,0,78.856,16.256Z\",\n transform: \"translate(-71.751 -13.764)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_39\",\n \"data-name\": \"Path 39\",\n d: \"M86.422,28.8H85.008a.308.308,0,0,0,0,.615h1.415a.308.308,0,0,0,.308-.308A.331.331,0,0,0,86.422,28.8Z\",\n transform: \"translate(-75.904 -23.694)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_40\",\n \"data-name\": \"Path 40\",\n d: \"M67.26,26.221a2.86,2.86,0,1,0-2.86-2.86A2.875,2.875,0,0,0,67.26,26.221Z\",\n transform: \"translate(-61.847 -17.947)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_41\",\n \"data-name\": \"Path 41\",\n d: \"M84.832,35.61,83.6,34.9a.3.3,0,0,0-.277.523l1.23.707a.277.277,0,0,0,.154.031.274.274,0,0,0,.246-.154A.324.324,0,0,0,84.832,35.61Z\",\n transform: \"translate(-74.837 -27.89)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_42\",\n \"data-name\": \"Path 42\",\n d: \"M65.61,39.3a.271.271,0,0,0-.4.123l-.707,1.23a.271.271,0,0,0,.123.4.277.277,0,0,0,.154.031.274.274,0,0,0,.246-.154l.707-1.23A.324.324,0,0,0,65.61,39.3Z\",\n transform: \"translate(-61.888 -30.937)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_43\",\n \"data-name\": \"Path 43\",\n d: \"M79.256,39.356a.3.3,0,0,0-.523.277l.707,1.23a.314.314,0,0,0,.246.154.277.277,0,0,0,.154-.031.311.311,0,0,0,.123-.4Z\",\n transform: \"translate(-71.751 -30.898)\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_44\",\n \"data-name\": \"Path 44\",\n d: \"M73.008,40.9a.308.308,0,0,0-.308.308v1.415a.308.308,0,1,0,.615,0V41.208A.308.308,0,0,0,73.008,40.9Z\",\n transform: \"translate(-67.594 -32.073)\",\n fill: \"#fff\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_8\",\n \"data-name\": \"Group 8\",\n transform: \"translate(11.691 8.743)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_45\",\n \"data-name\": \"Path 45\",\n d: \"M59.943,62.562a1.5,1.5,0,0,0,.533-1.167,1.526,1.526,0,0,0-1.522-1.522h-.1A2.224,2.224,0,0,0,56.824,58.2a2.121,2.121,0,0,0-1.877,1.293,2.182,2.182,0,0,1,.025.406A3.113,3.113,0,0,1,53.4,62.613a1.545,1.545,0,0,0,.888,1.014,1.375,1.375,0,0,0-.152.634,1.479,1.479,0,0,0,1.446,1.522c.178,0,.482-.025.482-.1v1.851h1.268V65.707c0-.127.685-.33.938-.634a1.48,1.48,0,0,0,.659.152A1.526,1.526,0,0,0,60.45,63.7,1.385,1.385,0,0,0,59.943,62.562Z\",\n transform: \"translate(-53.4 -58.2)\",\n fill: \"#fff\"\n})));\n\nvar SvgEnvironment = function SvgEnvironment(_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: 20.572,\n height: 18.076,\n viewBox: \"0 0 20.572 18.076\",\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(SvgEnvironment, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/environment.73460c9a.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Component, createRef } from \"react\";\nimport { withTranslation } from \"react-i18next\";\nimport { connect } from \"react-redux\";\nimport { buildConfigCode } from \"../store/configSlice\";\nimport {\n openDrawer,\n closeDrawer,\n openNitrum,\n toggleBackground,\n} from \"../store/navSlice\";\n\nimport \"./Nav.scss\";\n\n// import ArButton from \"./ArButton\";\nimport { ReactComponent as IconCaret } from \"../assets/images/caret.svg\";\nimport { ReactComponent as IconEnvironment } from \"../assets/images/environment.svg\";\n\n// @temp should replace with one standardize SVG\nimport Frame from \"../assets/images/wheelchair/frame.svg\";\nimport SeatSling from \"../assets/images/wheelchair/seat-sling.svg\";\nimport Backrest from \"../assets/images/wheelchair/backrest.svg\";\nimport Sideguard from \"../assets/images/wheelchair/sideguard.svg\";\nimport Footrest from \"../assets/images/wheelchair/footrest.svg\";\nimport Casters from \"../assets/images/wheelchair/casters.svg\";\nimport RearWheels from \"../assets/images/wheelchair/rear-wheels.svg\";\nimport WheelLocks from \"../assets/images/wheelchair/wheel-locks.svg\";\nimport Addon from \"../assets/images/wheelchair/addon.svg\";\nimport FrameHover from \"../assets/images/wheelchair/hover/frame.svg\";\nimport SeatSlingHover from \"../assets/images/wheelchair/hover/seat-sling.svg\";\nimport BackrestHover from \"../assets/images/wheelchair/hover/backrest.svg\";\nimport SideguardHover from \"../assets/images/wheelchair/hover/sideguard.svg\";\nimport FootrestHover from \"../assets/images/wheelchair/hover/footrest.svg\";\nimport CastersHover from \"../assets/images/wheelchair/hover/casters.svg\";\nimport RearWheelsHover from \"../assets/images/wheelchair/hover/rear-wheels.svg\";\nimport WheelLocksHover from \"../assets/images/wheelchair/hover/wheel-locks.svg\";\nimport AddonHover from \"../assets/images/wheelchair/hover/addon.svg\";\n\nconst parts = [\n { id: \"FRAME\", icon: Frame, activeIcon: FrameHover },\n { id: \"SEAT_SLING\", icon: SeatSling, activeIcon: SeatSlingHover },\n { id: \"BACKREST\", icon: Backrest, activeIcon: BackrestHover },\n { id: \"SIDEGUARDS\", icon: Sideguard, activeIcon: SideguardHover },\n { id: \"FOOTREST\", icon: Footrest, activeIcon: FootrestHover },\n { id: \"CASTERS\", icon: Casters, activeIcon: CastersHover },\n { id: \"REAR_WHEELS\", icon: RearWheels, activeIcon: RearWheelsHover },\n { id: \"WHEEL_LOCKS\", icon: WheelLocks, activeIcon: WheelLocksHover },\n { id: \"ADDONS\", icon: Addon, activeIcon: AddonHover },\n];\n\nfunction mapState(state) {\n const { activePart, nitrumOpen, backgroundVisible } = state.nav;\n return {\n activePart,\n nitrumOpen,\n backgroundVisible,\n };\n}\n\nconst mapDispatch = {\n openDrawer,\n closeDrawer,\n openNitrum,\n toggleBackground,\n buildConfigCode,\n};\n\nclass Nav extends Component {\n constructor(props) {\n super(props);\n this.state = {\n sliderWidth: 0,\n sliderContentWidth: 0,\n sliderPrevActive: false,\n sliderNextActive: true,\n selectionIndex: null,\n selectionBoxImmediateTranslation: true,\n selectionBoxLeft: 50,\n selectionBoxSize: {\n w: 0,\n h: 0,\n },\n };\n\n this.sliderEl = createRef();\n this.firstNavItemEl = createRef();\n }\n\n componentDidMount() {\n this.calcSliderSize();\n\n setTimeout(() => {\n this.setSelectionBoxSize();\n }, 1000);\n\n const onWindowResizeDebounced = this.debounce(\n this.onWindowResize.bind(this),\n 100\n );\n\n window.addEventListener(\"resize\", onWindowResizeDebounced, false);\n }\n\n componentDidUpdate(prevProps) {\n const part = this.props.activePart;\n const prevPart = prevProps.activePart;\n\n if (prevPart !== part) {\n this.setState({\n selectionBoxImmediateTranslation: prevPart === null,\n });\n }\n }\n\n calcSliderSize() {\n const sliderEl = this.sliderEl.current;\n\n if (sliderEl !== null) {\n this.setState({\n sliderWidth: sliderEl.getBoundingClientRect().width,\n sliderContentWidth: sliderEl.scrollWidth,\n });\n }\n }\n\n updateSliderControls(event) {\n const { scrollLeft } = event.target;\n const { sliderWidth, sliderContentWidth } = this.state;\n const scrollLimit = sliderContentWidth - sliderWidth - 10;\n this.setState({\n sliderPrevActive: scrollLeft !== 0,\n sliderNextActive: scrollLeft < scrollLimit,\n });\n }\n\n sliderGoTo(dir) {\n const sliderEl = this.sliderEl.current;\n\n sliderEl.scrollBy({\n top: 0,\n left: 300 * dir,\n behavior: \"smooth\",\n });\n }\n\n onWindowResize() {\n this.setSelectionBoxSize();\n\n // recalc SelectionBoxLeft\n const sliderEl = this.sliderEl.current;\n const { selectionIndex } = this.state;\n if (sliderEl !== null && selectionIndex !== null) {\n const items = sliderEl.querySelector(\".parts-nav\").querySelectorAll(\"li\");\n const item = items[this.state.selectionIndex];\n this.setState({\n selectionBoxLeft: item.offsetLeft,\n });\n }\n }\n\n onSliderPrev() {\n this.sliderGoTo(-1);\n }\n\n onSliderNext() {\n this.sliderGoTo(1);\n }\n\n setSelectionBoxSize() {\n const firstNavItemEl = this.firstNavItemEl.current;\n\n if (firstNavItemEl !== null) {\n this.setState({\n selectionBoxSize: {\n w: firstNavItemEl.offsetWidth,\n h: firstNavItemEl.offsetHeight,\n },\n });\n }\n }\n\n updateSelectionBoxLeft = (event, ix) => {\n const el = event.currentTarget;\n this.setState({\n selectionBoxLeft: el.offsetLeft,\n selectionIndex: ix,\n });\n };\n\n debounce(func, wait, immediate) {\n let timeout;\n\n return function () {\n const context = this;\n const args = arguments;\n const later = function () {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n const callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n }\n\n render() {\n const {\n t,\n activePart,\n nitrumOpen,\n backgroundVisible,\n openDrawer,\n closeDrawer,\n openNitrum,\n toggleBackground,\n buildConfigCode,\n } = this.props;\n\n const {\n sliderPrevActive,\n sliderNextActive,\n selectionBoxLeft,\n selectionBoxSize,\n selectionBoxImmediateTranslation,\n } = this.state;\n\n const items = parts.map((part, ix) => {\n const label = t(`parts:${part.id}._part_name`);\n const active = part.id === activePart;\n\n return (\n {\n this.updateSelectionBoxLeft(e, ix);\n active ? closeDrawer() : openDrawer(part.id);\n }}\n >\n {label}\n
{label}
\n
\n \n );\n });\n\n return (\n
\n
\n
\n toggleBackground()}\n title={t(\"outside_view\")}\n >\n {t(\"outside_view\")}\n \n toggleBackground()}\n title={t(\"3d_view\")}\n >\n {t(\"3d_view\")}\n \n closeDrawer()}\n title={t(\"full_view\")}\n >\n {t(\"full_view\")}\n \n
\n
\n
\n \n
    {items}
\n
\n
\n \n \n \n \n \n \n \n
\n
\n toggleBackground()}\n >\n \n \n
\n
\n {\n buildConfigCode();\n openNitrum();\n }}\n >\n {t(\"summary\")}\n \n \n
\n
\n {/* */}\n
\n
\n \n );\n }\n}\n\nexport default withTranslation([\"common\", \"parts\"])(\n connect(mapState, mapDispatch)(Nav)\n);\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 id: \"X\",\n transform: \"translate(18.93 18.93) rotate(180)\"\n}, /*#__PURE__*/React.createElement(\"line\", {\n id: \"Line_1\",\n \"data-name\": \"Line 1\",\n x1: 24.44,\n y1: 0.306,\n transform: \"translate(17.498 0.217) rotate(135)\",\n fill: \"none\",\n stroke: \"#212527\",\n strokeLinecap: \"round\",\n strokeWidth: 2\n}), /*#__PURE__*/React.createElement(\"line\", {\n id: \"Line_2\",\n \"data-name\": \"Line 2\",\n x1: 24.44,\n y2: 0.306,\n transform: \"translate(0.217 0) rotate(45)\",\n fill: \"none\",\n stroke: \"#212527\",\n strokeLinecap: \"round\",\n strokeWidth: 2\n}));\n\nvar SvgClose = function SvgClose(_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: 20.362,\n height: 20.362,\n viewBox: \"0 0 20.362 20.362\",\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(SvgClose, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/close.2aa8da77.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Component, createRef } from \"react\";\nimport { withTranslation } from \"react-i18next\";\nimport { connect } from \"react-redux\";\nimport { hidePopover } from \"../store/navSlice\";\nimport pkg from \"../../package.json\";\n\nimport \"./Popover.scss\";\nimport { ReactComponent as IconClose } from \"../assets/images/close.svg\";\n\nconst mapDispatch = { hidePopover };\nfunction mapState(state) {\n return {\n popover: state.nav.popover,\n isMobile: state.nav.viewport?.isMobile || false\n };\n}\n\nclass Popover extends Component {\n constructor(props) {\n super();\n\n this.basepath = (pkg.homepage || \"\") + \"/content\";\n\n this.state = {\n popoverDelayed: props.popover,\n positioned: false,\n showArrow: true,\n x: 0,\n y: 0\n };\n\n this.popoverEl = createRef();\n this.image = createRef();\n this.body = createRef();\n }\n\n componentDidUpdate(prevProps) {\n const popover = this.props.popover;\n const prevPopover = prevProps.popover;\n\n // Delay unsetting the popover so out transition can play\n if (prevPopover !== null && popover === null) {\n clearInterval(this.timerID);\n this.timerID = setTimeout(() => {\n this.setState({\n popoverDelayed: popover,\n positioned: false,\n showArrow: true,\n x: 0,\n y: 0\n });\n }, 500);\n } else if (prevPopover !== popover) {\n this.setState({\n popoverDelayed: popover,\n positioned: false,\n showArrow: true,\n x: 0,\n y: 0\n });\n\n if (!this.props.isMobile && !popover?.src?.length) {\n setTimeout(() => {\n this.calcPosition(); \n }, 100);\n }\n }\n }\n\n onImageLoaded() {\n !this.props.isMobile && this.calcPosition();\n }\n\n onImageError() {\n this.setState({\n popoverDelayed: {\n ...this.state.popoverDelayed,\n src: ''\n }\n });\n\n // Allow for broken image tag to be removed before calc\n !this.props.isMobile && setTimeout(() => {\n this.calcPosition(); \n }, 50);\n }\n\n calcPosition() {\n const popoverEl = this.popoverEl.current;\n const body = this.body.current;\n\n if (!popoverEl || !body) {\n return;\n }\n\n const popoverHeight = popoverEl.offsetHeight;\n const bodyOffsetY = body.offsetTop + 30;\n const popoverWidth = popoverEl.offsetWidth;\n const { x, y } = this.state.popoverDelayed;\n const { innerHeight, innerWidth } = window;\n\n let showArrow = true;\n let targetX = x;\n let targetY = y;\n\n targetX += 40; // push to the right so the arrow doesn't overlap hotpot\n targetY -= bodyOffsetY;\n\n // CHECK BOUNDARIES\n\n // Adjust if it goes above or below viewport\n if (targetY < 0) {\n showArrow = false;\n targetY = 20;\n } else if (targetY + popoverHeight > innerHeight) {\n showArrow = false;\n targetY = innerHeight - popoverHeight - 20;\n }\n \n // Adjust position if goes to the right of viewport (can't go to the left)\n if (targetX + popoverWidth > innerWidth) {\n showArrow = false;\n targetX = innerWidth - popoverWidth - 20;\n }\n \n this.setState({\n positioned: true,\n showArrow,\n x: targetX,\n y: targetY,\n });\n }\n\n render() {\n const { t, isMobile, popover, hidePopover } = this.props;\n const { popoverDelayed, positioned, x, y, showArrow } = this.state;\n\n const hasImage = popoverDelayed?.src?.length > 0;\n const transKey = popoverDelayed?.transKey || false;\n const title = transKey ? t(`hotspots.${transKey}_title`) : \"\";\n const desc = transKey ? t(`hotspots.${transKey}_body`) : \"\";\n const style = isMobile ? {} : {\n top: `${y}px`,\n left: `${x}px`,\n };\n\n return (\n hidePopover()}\n >\n e.stopPropagation()}\n >\n
{title}
\n {hasImage && (\n \n )}\n
\n {desc}\n
\n hidePopover()}\n >\n \n \n \n \n );\n }\n}\n\nexport default withTranslation()(connect(mapState, mapDispatch)(Popover));\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 id: \"Play_Icon\",\n fill: \"#FFFFFF\",\n d: \"M23,13.8L7.3,23.7c-1,0.6-2.3,0.3-3-0.7C4.1,22.6,4,22.2,4,21.8V2.2C4,1,5,0,6.2,0 c0.4,0,0.8,0.1,1.1,0.3L23,10.2c1,0.7,1.3,2.1,0.6,3.1C23.4,13.5,23.3,13.7,23,13.8z\"\n});\n\nvar SvgPlay = function SvgPlay(_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 id: \"Layer_1\",\n x: \"0px\",\n y: \"0px\",\n width: \"24px\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n enableBackground: \"new 0 0 24 24\",\n xmlSpace: \"preserve\",\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(SvgPlay, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/play.be897209.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 id: \"Rectangle_69\",\n fill: \"#FFFFFF\",\n d: \"M6.5,0L6.5,0c1.1,0,2,0.9,2,2v20c0,1.1-0.9,2-2,2l0,0c-1.1,0-2-0.9-2-2V2 C4.5,0.9,5.4,0,6.5,0z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Rectangle_70\",\n fill: \"#FFFFFF\",\n d: \"M17.5,0L17.5,0c1.1,0,2,0.9,2,2v20c0,1.1-0.9,2-2,2l0,0c-1.1,0-2-0.9-2-2V2 C15.5,0.9,16.4,0,17.5,0z\"\n});\n\nvar SvgPause = function SvgPause(_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 id: \"Layer_1\",\n x: \"0px\",\n y: \"0px\",\n width: \"24px\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n enableBackground: \"new 0 0 24 24\",\n xmlSpace: \"preserve\",\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(SvgPause, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/pause.243fd4e1.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Component, createRef } from \"react\";\nimport { withTranslation } from \"react-i18next\";\nimport { connect } from \"react-redux\";\nimport { hideModal } from \"../store/navSlice\";\nimport pkg from \"../../package.json\";\n\nimport \"./Modal.scss\";\nimport { ReactComponent as IconPlay } from \"../assets/images/play.svg\";\nimport { ReactComponent as IconPause } from \"../assets/images/pause.svg\";\nimport { ReactComponent as IconClose } from \"../assets/images/close.svg\";\n\nfunction clamp(n, min, max) {\n return Math.max(Math.min(n, max), min);\n}\n\nconst mapDispatch = { hideModal };\nfunction mapState(state) {\n return { modal: state.nav.modal };\n}\n\nclass Modal extends Component {\n constructor(props) {\n super();\n\n this.basepath = (pkg.homepage || \"\") + \"/content\";\n\n this.state = {\n modalDelayed: props.modal,\n duration: 0,\n elapsed: 0,\n progress: 0,\n isPlaying: false,\n wasPlaying: false,\n isDragging: false,\n dragMin: null,\n dragMax: null,\n dragPos: null,\n };\n\n this.modal = createRef();\n this.video = createRef();\n this.videoEl = null;\n this.scrubberBar = createRef();\n }\n\n componentDidMount() {\n if (!this.videoEl && this.video.current) {\n this.videoEl = this.video.current;\n this.videoEl.addEventListener(\n \"durationchange\",\n this.onDurationChange.bind(this)\n );\n this.videoEl.addEventListener(\"timeupdate\", this.onTimeUpdate.bind(this));\n this.videoEl.addEventListener(\"play\", this.onPlay.bind(this));\n this.videoEl.addEventListener(\"pause\", this.onPauseOrEnd.bind(this));\n }\n }\n\n componentDidUpdate(prevProps) {\n const modal = this.props.modal;\n const prevModal = prevProps.modal;\n\n // Delay unsetting the modal so out transition can play\n if (prevModal !== null && modal === null) {\n clearInterval(this.timerID);\n this.timerID = setTimeout(() => {\n this.setState({ modalDelayed: modal });\n }, 500);\n } else if (prevModal !== modal) {\n this.setState({ modalDelayed: modal });\n }\n }\n\n onDurationChange() {\n this.setState({\n duration: this.videoEl.duration,\n });\n }\n\n onTimeUpdate() {\n this.setState({\n elapsed: this.videoEl.currentTime,\n });\n }\n\n onPlay() {\n this.setState({ isPlaying: true });\n }\n\n onPauseOrEnd() {\n this.setState({ isPlaying: false });\n }\n\n onEnded() {\n console.log(\"ended\");\n this.setState({ isPlaying: false });\n }\n\n togglePlay() {\n if (this.state.isPlaying) {\n this.videoEl.pause();\n } else {\n this.videoEl.play();\n }\n }\n\n jumpTo(event) {\n if (this.scrubberBar.current === null) {\n return;\n }\n\n const rect = this.scrubberBar.current.getBoundingClientRect();\n const offset = rect.left;\n const end = rect.width;\n const x = event.clientX - offset;\n const jumpToPercent = (x * 100) / end;\n const jumpTo = (jumpToPercent * this.state.duration) / 100;\n\n this.videoEl.currentTime = jumpTo;\n }\n\n onDragStart(event) {\n const modal = this.modal.current;\n const scrubberBar = this.scrubberBar.current;\n\n if (modal === null || scrubberBar === null) {\n return;\n }\n\n const pageX = event.touches ? event.touches[0].pageX : event.pageX;\n\n const rect = scrubberBar.getBoundingClientRect();\n const dragMin = rect.left;\n const dragMax = dragMin + rect.width;\n const dragPos = clamp(pageX, dragMin, dragMax);\n const dragPosPercent = (dragPos - dragMin) * 100 / (dragMax - dragMin);\n\n this.setState({\n isDragging: true,\n wasPlaying: this.state.isPlaying,\n dragMin,\n dragMax,\n dragPos: dragPosPercent\n });\n\n this.videoEl.pause();\n\n modal.addEventListener(\"touchmove\", this.onDrag);\n modal.addEventListener(\"mousemove\", this.onDrag);\n modal.addEventListener(\"touchend\", this.onDragEnd);\n modal.addEventListener(\"mouseup\", this.onDragEnd);\n }\n\n onDrag = (event) => {\n const { dragMin, dragMax } = this.state;\n const pageX = event.touches ? event.touches[0].pageX : event.pageX;\n const dragPos = clamp(pageX, dragMin, dragMax);\n const dragPosPercent = (dragPos - dragMin) * 100 / (dragMax - dragMin);\n\n const jumpTo = (dragPosPercent * this.state.duration) / 100;\n this.videoEl.currentTime = jumpTo;\n\n this.setState({ dragPos: dragPosPercent });\n }\n\n onDragEnd = (e) => {\n const modal = this.modal.current; \n\n if (modal === null) {\n return;\n }\n \n if (this.state.wasPlaying) {\n this.videoEl.play();\n }\n\n // Delay unsetting the flag to handle issue were ending drag outside of\n // player triggers modal backfrop click closing modal\n setTimeout(() => {\n this.setState({ isDragging: false }); \n }, 500);\n\n modal.removeEventListener(\"touchmove\", this.onDrag);\n modal.removeEventListener(\"mousemove\", this.onDrag);\n modal.removeEventListener(\"touchend\", this.onDragEnd);\n modal.removeEventListener(\"mouseup\", this.onDragEnd);\n }\n\n _secondsToMinutesAndSeconds(seconds) {\n let mins = Math.floor(seconds / 60);\n let secs = Math.floor(seconds - mins * 60);\n\n mins = mins < 10 ? \"0\" + mins : mins;\n secs = secs < 10 ? \"0\" + secs : secs;\n\n return `${mins}:${secs}`;\n }\n\n render() {\n const { t, modal, hideModal } = this.props;\n const { modalDelayed, duration, elapsed, isPlaying } = this.state;\n const { isDragging, dragPos } = this.state;\n const progress = (elapsed * 100) / duration + \"%\";\n const thumbPos = isDragging ? dragPos + \"%\" : progress;\n const transKey = modalDelayed?.transKey || false;\n\n let title = \"\";\n if (transKey) {\n title = t(`hotspots.${transKey}_title`);\n }\n\n return (\n !isDragging && hideModal()}\n >\n e.stopPropagation()}\n >\n
{title}
\n this.togglePlay()}\n />\n
\n this.jumpTo(e)}\n >
\n
\n
\n
\n
\n
\n \n \n
\n
\n {this._secondsToMinutesAndSeconds(elapsed)}\n
\n this.togglePlay()}\n >\n {isPlaying ? : }\n \n
\n {this._secondsToMinutesAndSeconds(duration)}\n
\n
\n hideModal()}\n >\n \n \n \n \n );\n }\n}\n\nexport default withTranslation()(connect(mapState, mapDispatch)(Modal));\n","import React, { Component } from \"react\";\nimport { withTranslation } from \"react-i18next\";\nimport { connect } from \"react-redux\";\n\nimport \"./Tooltip.scss\";\n\nfunction mapState(state) {\n return { tooltip: state.nav.tooltip };\n}\n\nclass Tooltip extends Component {\n constructor(props) {\n super();\n this.state = {\n tooltipDelayed: props.tooltip\n };\n }\n\n componentDidUpdate(prevProps) {\n const tooltip = this.props.tooltip;\n const prevTooltip = prevProps.tooltip;\n\n // Delay unsetting the tooltip so out transition can play\n if (prevTooltip !== null && tooltip === null) {\n clearInterval(this.timerID);\n this.timerID = setTimeout(() => {\n this.setState({ tooltipDelayed: tooltip });\n }, 500);\n } else if (prevTooltip !== tooltip) {\n clearInterval(this.timerID);\n this.setState({ tooltipDelayed: tooltip });\n }\n }\n\n render() {\n const { t, tooltip } = this.props;\n const { tooltipDelayed } = this.state;\n\n const transKey = tooltipDelayed?.transKey || false;\n const text = transKey ? t(`hotspots.${transKey}_title`) : \"\";\n const style = {\n left: tooltipDelayed?.x || 0,\n top: tooltipDelayed?.y || 0\n };\n\n return (\n
\n
\n
{text}
\n
\n
\n );\n }\n}\n\nexport default withTranslation()(connect(mapState)(Tooltip));\n","import React, {Component} from \"react\";\nimport { Helmet, HelmetProvider } from 'react-helmet-async';\nimport { connect } from \"react-redux\";\nimport { withTranslation } from \"react-i18next\";\nimport { SM_URL, SM_LANG } from \"../i18n\";\nimport { setViewport } from \"../store/navSlice\";\n\nimport Viewer from \"./Viewer\";\nimport Header from \"./Header\";\nimport Drawer from \"./Drawer\";\nimport ConfigFormBuilder from \"./ConfigFormBuilder\";\nimport YourNitrum from \"./YourNitrum\";\nimport Nav from \"./Nav\";\nimport NavNitrum from \"./NavNitrum\";\nimport Popover from \"./Popover\";\nimport Modal from \"./Modal\";\nimport Tooltip from \"./Tooltip\";\nimport \"./App.scss\";\n\nconst mapDispatch = { setViewport };\n\nclass App extends Component {\n constructor(props) {\n super(props);\n this.setViewportInfo();\n }\n\n setViewportInfo() {\n const width = window.innerWidth;\n let breakpoint;\n let isMobile = false;\n let isTablet = false;\n let isDesktop = false;\n \n if (width < 576) {\n breakpoint = \"xs\";\n isMobile = true;\n } else if (width <= 767) {\n breakpoint = \"sm\";\n isTablet = true;\n } else if (width <= 991) {\n breakpoint = \"md\";\n isTablet = true;\n } else if (width <= 1199) {\n breakpoint = \"lg\";\n isDesktop = true;\n } else if (width <= 1439) {\n breakpoint = \"xl\";\n isDesktop = true;\n } else {\n breakpoint = \"xxl\";\n isDesktop = true;\n }\n\n this.props.setViewport({\n width,\n breakpoint,\n isMobile,\n isTablet,\n isDesktop\n });\n }\n\n render() {\n const { t } = this.props;\n const useDiacritics = /^(cs|pl)$/.test(SM_LANG);\n const ogImage = \"/getmedia/00081dc2-305b-4def-b8f3-f2b528cf5619/Social-share-nitrum-visualiser.jpg\";\n\n return (\n \n
\n \n { t(\"meta_title\") }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n
\n
\n );\n }\n}\n\nexport default withTranslation()( connect(null, mapDispatch)(App) );","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Provider } from 'react-redux'\n\nimport store from './store'\nimport App from \"./components/App\";\nimport './i18n';\nimport \"./assets/scss/index.scss\";\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n"],"sourceRoot":""}