Socket
Socket
Sign inDemoInstall

@lumiscaphe/viewer

Package Overview
Dependencies
Maintainers
1
Versions
113
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@lumiscaphe/viewer - npm Package Compare versions

Comparing version 0.5.1 to 0.5.2

2

dist/index.js

@@ -1,1 +0,1 @@

!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i(require("twgl.js"),require("lodash.clonedeep"),require("lodash.debounce")):"function"==typeof define&&define.amd?define(["twgl.js","lodash.clonedeep","lodash.debounce"],i):t.LumiscapheViewer=i(t.twgl,t.cloneDeep,t.debounce)}(this,function(t,i,e){"use strict";var n="default"in t?t.default:t;i=i&&i.hasOwnProperty("default")?i.default:i,e=e&&e.hasOwnProperty("default")?e.default:e;var o=function(){};o.fit=function(t,i,e,n){var o=t.width/t.height,r=i/e,s=0,a=0;switch(n){case"contain":s=r<o?i:e*o,a=r<o?i/o:e;break;case"cover":default:s=r<o?e*o:i,a=r<o?e:i/o;break;case"fill":s=i,a=e}return{width:Math.round(s),height:Math.round(a),top:Math.round((e-a)/2),left:Math.round((i-s)/2)}},o.getStandardQuality=function(t){return t<=240?240:t<=360?360:t<=480?480:t<=720?720:1080},o.getStandardResolution=function(t,i){if(0===t||0===i)return{width:0,height:0};if(t<i){var e=t/i<.75?9/16:.75,n=o.getStandardQuality(i*e);return{width:Math.round(n),height:Math.round(n/e)}}var r=t/i>4/3?16/9:4/3,s=o.getStandardQuality(t/r);return{width:Math.round(s*r),height:Math.round(s)}};var r=function(){this.element=document.createElement("canvas"),this.element.classList.add("ls-viewer-canvas"),this.element.style.opacity=0,this.context=this.element.getContext("2d"),this.requestAnimationId=null};r.prototype.show=function(){this.element.style.opacity=1},r.prototype.hide=function(){this.element.style.opacity=0},r.prototype.resize=function(t,i,e){var n=o.fit(e,t,i,"cover");this.element.style.width=n.width+"px",this.element.style.height=n.height+"px",this.element.style.top=n.top+"px",this.element.style.left=n.left+"px",e.width===this.element.width&&e.height===this.element.height||(this.element.width=e.width,this.element.height=e.height)},r.prototype.draw=function(t,i,e){t&&(this.requestAnimationId&&(cancelAnimationFrame(this.requestAnimationId),this.requestAnimationId=null),i?(this.context.globalAlpha=0,this.fadeLoop(t,e)):(this.context.globalAlpha=1,this.context.drawImage(t,0,0,this.element.width,this.element.height)))},r.prototype.play=function(t,i){t&&(this.requestAnimationId&&(cancelAnimationFrame(this.requestAnimationId),this.requestAnimationId=null),this.playLoop(t,i))},r.prototype.stop=function(){this.requestAnimationId&&(cancelAnimationFrame(this.requestAnimationId),this.requestAnimationId=null)},r.prototype.fadeLoop=function(t,i){var e=this;if(this.context.globalAlpha>=1)return cancelAnimationFrame(this.requestAnimationId),void(this.requestAnimationId=null);this.context.globalAlpha=Math.min(this.context.globalAlpha+i,1),this.context.drawImage(t,0,0,this.element.width,this.element.height),this.requestAnimationId=requestAnimationFrame(function(){e.fadeLoop(t,i)})},r.prototype.playLoop=function(t,i){var e=this;this.context.drawImage(t,0,0,this.element.width,this.element.height),this.requestAnimationId=requestAnimationFrame(function(){e.playLoop(t,i)})};var s=function(){this.element=document.createElement("canvas"),this.element.classList.add("ls-viewer-canvas"),this.element.style.opacity=0,this.context=n.getContext(this.element),n.setDefaultTextureColor([1,1,1,1]),this.requestAnimationId=null};s.prototype.show=function(){this.element.style.opacity=1},s.prototype.hide=function(){this.element.style.opacity=0},s.prototype.resize=function(){this.element.style.width="100%",this.element.style.height="100%",this.element.style.top=0,this.element.style.left=0};var a=function(){};a.accelerate=function(t,i){var e=i||1.5;return Math.pow(Math.abs(t),e)*(t>0?1:-1)},a.degreesToRadians=function(t){return t*(Math.PI/180)},a.mod=function(t,i){return t-i*Math.floor(t/i)};var h=function(t){this.server=t};h.buildQuery=function(t){return Object.keys(t).filter(function(i){return void 0!==t[i]}).map(function(i){return i+"="+t[i]}).join("&")},h.sceneParameters=function(t){var i=t.scene,e={},n=i.length>1?i.find(function(t){return t.master})||i[0]:null;if(n){var o=i.find(function(t){return t!==n});e.databaseId=o.database,e.configuration=o.configuration,e.decorDatabaseId=n.database,e.decorDeltaAltitude=n.translation.y}else{var r=i[0];e.databaseId=r.database,e.configuration=r.configuration,e.animations=r.animations&&r.animations.length?r.animations.join("/"):void 0}return e},h.renderParameters=function(t){var i=t.parameters;return{width:i.width,height:i.height,softwareAntialiasing:i.antialiasing,superSampling:i.superSampling}},h.encoderParameters=function(t){var i=t.encoder;return{imageFormat:i.format,imageQuality:i.quality}},h.fetch=function(t){return fetch(t).then(function(t){return t.text()}).then(function(t){var i=t.replace(/&amp;/g,"&").match(/directUrl="([^"]*)"/g);return i?i.map(function(t){return t.replace(/directUrl="([^"]*)"/g,"$1")}):Promise.reject()})},h.prototype.animation=function(t){var i={};Object.assign(i,h.sceneParameters(t)),Object.assign(i,{animation:t.view.animation,bookmarkSet:t.view.camera.split("/")[0],bookmark:t.view.camera.split("/")[1],frames:t.view.frames,loop:!!t.view.loop,background:t.view.background}),Object.assign(i,h.renderParameters(t)),Object.assign(i,h.encoderParameters(t));var e=h.buildQuery(i);return h.fetch(this.server+"/ImagesFromAnimation?"+e)},h.prototype.image=function(t){var i={};Object.assign(i,h.sceneParameters(t)),Object.assign(i,{bookmarkSet:t.view.camera.split("/")[0],bookmark:t.view.camera.split("/")[1],background:t.view.background}),Object.assign(i,h.renderParameters(t)),Object.assign(i,h.encoderParameters(t));var e=h.buildQuery(i);return Promise.resolve(this.server+"/ImageFromBookmark?"+e)},h.prototype.video=function(t){var i={};Object.assign(i,h.sceneParameters(t)),Object.assign(i,{animation:t.view.animation,bookmarkSet:t.view.camera.split("/")[0],bookmark:t.view.camera.split("/")[1],duration:t.view.duration,frames:t.view.frames,loop:!!t.view.loop,background:t.view.background}),Object.assign(i,h.renderParameters(t)),Object.assign(i,h.encoderParameters(t));var e=h.buildQuery(i);return Promise.resolve(this.server+"/ImagesFromAnimation?"+e)},h.prototype.vrCube=function(t){var i={};Object.assign(i,h.sceneParameters(t)),Object.assign(i,{bookmarkSet:t.view.camera.split("/")[0],bookmark:t.view.camera.split("/")[1],background:t.view.background}),Object.assign(i,h.renderParameters(t)),Object.assign(i,h.encoderParameters(t)),i.width=Math.max(i.width,i.height),i.height=Math.max(i.width,i.height);var e=h.buildQuery(i);return h.fetch(this.server+"/CubeFromBookmark?"+e)},h.prototype.vrObject=function(t){var i={};Object.assign(i,h.sceneParameters(t)),Object.assign(i,{bookmarkSet:t.view.camera,background:t.view.background}),Object.assign(i,h.renderParameters(t)),Object.assign(i,h.encoderParameters(t));var e=h.buildQuery(i);return h.fetch(this.server+"/ImagesFromBookmarkSet?"+e)};var c=function(t,i){this.webrender=new h(t),this.loadingId=0,this.loaded=0,this.total=0,this.onLoadStart=i.onLoadStart||function(){},this.onLoadProgress=i.onLoadProgress||function(){},this.onLoadEnd=i.onLoadEnd||function(){}},d={progress:{configurable:!0}};d.progress.get=function(){return this.total?this.loaded/this.total:0},c.prototype.loadImage=function(t,i){var e=this,n=new Image;n.crossOrigin="anonymous";var o=new Promise(function(t,o){n.addEventListener("load",function(){i===e.loadingId&&(e.loaded+=1,e.onLoadProgress(e.progress),t(n))}),n.addEventListener("error",function(t){i===e.loadingId&&o(t)})});return n.src=t,o},c.prototype.loadImageFrames=function(t,i,e,n){var o=this;this.total=t.length;for(var r=new Array(t.length),s=e||0,h=0,c=t.length;h<c;h+=1){var d=Math.ceil(h/2)*(h%2==0?1:-1),u=i?a.mod(s+d,c):h;r[u]=o.loadImage(t[u],n)}return Promise.all(r).then(function(){return o.onLoadEnd(o.progress)}),r},c.prototype.loadVideo=function(t,i,e){var n=this,o=document.createElement("video");o.autoplay=!0,o.loop=i,o.muted=!0,o.playsinline=!0,o.preload="auto";var r=new Promise(function(t,i){o.addEventListener("loadeddata",function(){e===n.loadingId&&(n.loaded+=1,n.onLoadProgress(n.progress),t(o))}),o.addEventListener("error",function(t){e===n.loadingId&&i(t)})});return o.src=t,r},c.prototype.loadVideoFrame=function(t,i,e,n,o){var r=this,s=0;return new Promise(function(a,h){var c=function(){if(o===r.loadingId){if(s!==n)return void(s+=1);t.removeEventListener("seeked",c);var h=document.createElement("canvas");h.width=t.videoWidth,h.height=t.videoHeight,h.getContext("2d").drawImage(t,0,0),a(h),r.loaded+=1,r.onLoadProgress(r.progress),n!==e-1&&(t.currentTime+=1/i)}};t.addEventListener("seeked",c);var d=function(i){o===r.loadingId&&(t.removeEventListener("error",d),h(i))};t.addEventListener("error",d)})},c.prototype.loadVideoFrames=function(t,i,e,n){var o=this;this.total=i;var r=new Array(i),s=document.createElement("video");s.autoplay=!0,s.muted=!0,s.playsinline=!0,s.preload="auto";for(var a=0,h=i;a<h;a+=1)r[a]=o.loadVideoFrame(s,e,i,a,n);return s.addEventListener("loadeddata",function(){n===o.loadingId&&(s.currentTime=1/e/2)}),s.src=t,Promise.all(r).then(function(){return o.onLoadEnd(o.progress)}),r},c.prototype.loadImageSnapshot=function(t){var i=this;this.loadingId+=1,this.loaded=0,this.total=1,this.onLoadStart(this.progress);var e=this.loadingId;return this.webrender.image(t).then(function(t){return i.loadImage(t,e)}).then(function(t){return i.onLoadEnd(i.progress),t})},c.prototype.loadVideoSnapshot=function(t){var i=this;this.loadingId+=1,this.loaded=0,this.total=1,this.onLoadStart(this.progress);var e=this.loadingId;return this.webrender.video(t).then(function(n){return i.loadVideo(n,t.view.loop,e)}).then(function(t){return i.onLoadEnd(i.progress),t})},c.prototype.loadVRCubeSnapshot=function(t){var i=this;this.loadingId+=1,this.loaded=0,this.total=0,this.onLoadStart(this.progress);var e=this.loadingId;return this.webrender.vrCube(t).then(function(t){i.total=t.length;var n=t.map(function(t){return i.loadImage(t,e)});return Promise.all(n)}).then(function(t){return i.onLoadEnd(i.progress),t})},c.prototype.loadVRObjectSnapshot=function(t,i){var e=this;this.loadingId+=1,this.loaded=0,this.total=0,this.onLoadStart(this.progress);var n,o=this.loadingId;return n=t.view.animation?"mp4"===t.encoder.format?"video":"animation":"vrObject",this.webrender[n](t).then(function(n){return Array.isArray(n)?e.loadImageFrames(n,t.view.loop,i,o):e.loadVideoFrames(n,t.view.frames,30,o)})},Object.defineProperties(c.prototype,d);var u=function(t,i,e){this.container=t,this.canvas=i,this.loader=e,this.image=null,this.goto=function(){},this.onStart=function(){},this.onEnter=function(){},this.onMove=function(){},this.onEnd=function(){},this.onDeviceOrientation=function(){}};u.prototype.show=function(){this.canvas.show(),this.container.classList.add("ls-viewer-container-image")},u.prototype.hide=function(){this.canvas.hide(),this.container.classList.remove("ls-viewer-container-image")},u.prototype.load=function(t,i,e){var n=this,o=JSON.stringify(t);return o===this.hash?(this.canvas.draw(this.image,e,.01),Promise.resolve()):(this.hash=o,this.loader.loadImageSnapshot(t).then(function(t){n.image=t,n.canvas.draw(n.image,e,.01)}))};var l=function(t,i,e){this.container=t,this.canvas=i,this.loader=e,this.video=null,this.onStart=function(){},this.onEnter=function(){},this.onMove=function(){},this.onEnd=function(){},this.onDeviceOrientation=function(){}};l.prototype.show=function(){this.canvas.show(),this.container.classList.add("ls-viewer-container-video")},l.prototype.hide=function(){this.canvas.hide(),this.container.classList.remove("ls-viewer-container-video"),this.video&&this.video.pause(),this.canvas.stop()},l.prototype.load=function(t){var i=this,e=JSON.stringify(t);return e===this.hash?(this.video.load(),this.canvas.play(this.video,t.view.loop),Promise.resolve()):(this.hash=e,this.loader.loadVideoSnapshot(t).then(function(e){i.video=e,i.canvas.play(i.video,t.view.loop)}))};var m=function(){};m.point=function(t){if("touchmove"===t.type||"touchstart"===t.type||"touchend"===t.type){var i=t.targetTouches[0]||t.changedTouches[0];return{x:i.screenX,y:i.screenY}}return{x:t.screenX,y:t.screenY}};var v=function(){for(var i,e=[],n=arguments.length;n--;)e[n]=arguments[n];3===e.length?(i=e,this.u=i[0],this.v=i[1],this.o=i[2],this.w=t.v3.cross(this.u,this.v)):(this.u=[1,0,0],this.v=[0,1,0],this.w=[0,0,1],this.o=[0,0,0])},p={localToGlobalMatrix:{configurable:!0},globalToLocalMatrix:{configurable:!0}};p.localToGlobalMatrix.get=function(){var t=[this.u[0],this.u[1],this.u[2],0],i=[this.v[0],this.v[1],this.v[2],0],e=[this.w[0],this.w[1],this.w[2],0],n=[this.o[0],this.o[1],this.o[2],1];return[].concat.apply([],[t,i,e,n])},p.globalToLocalMatrix.get=function(){return t.m4.inverse(this.localToGlobalMatrix)},Object.defineProperties(v.prototype,p);var g=function(t){this.animationFrameId=null,this.points=[],this.onMotion=t,this.loop=this.loop.bind(this)};g.prototype.track=function(t){var i=Date.now();this.points=this.points.filter(function(t){return i-t.time<=100}),this.points.push({x:t.x,y:t.y,time:i}),this.lastPoint=t},g.prototype.start=function(){if(0!==this.points.length){var t=this.points[0],i=this.points[this.points.length-1],e=i.x-t.x,n=i.y-t.y,o=i.time-t.time;this.velocity={x:0===o?0:e/(o/15),y:0===o?0:n/(o/15)},this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.animationFrameId=requestAnimationFrame(this.loop)}},g.prototype.stop=function(){this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.points=[]},g.prototype.loop=function(){if(Math.abs(this.velocity.x)<1&&Math.abs(this.velocity.y)<1)return this.animationFrameId=null,void(this.points=[]);this.lastPoint.x+=this.velocity.x,this.lastPoint.y+=this.velocity.y,this.velocity.x*=.9,this.velocity.y*=.9,this.onMotion(this.lastPoint),this.animationFrameId=requestAnimationFrame(this.loop)};var f=function(i,e,n){this.changed=!1,this.isStarted=!1,this.inertia=new g(this.motion.bind(this)),this.fov=a.degreesToRadians(i),this.pov=e,this.orientationMatrix=t.m4.identity(),this.initFov=this.fov,this.initPov=this.pov,this.initOrientation=a.degreesToRadians(window.orientation)||0,this.onMotion=n},y={orientedPov:{configurable:!0}};y.orientedPov.get=function(){var i=t.v3.normalize(t.v3.cross(this.pov.up,this.pov.target)),e=new v(i,[0,1,0],this.pov.eye),n=t.m4.identity();return t.m4.multiply(n,e.localToGlobalMatrix,n),t.m4.multiply(n,this.orientationMatrix,n),t.m4.multiply(n,e.globalToLocalMatrix,n),{eye:this.pov.eye,target:t.m4.transformDirection(n,this.pov.target),up:t.m4.transformDirection(n,this.pov.up)}},f.prototype.reset=function(){this.fov=this.initFov,this.pov={eye:Array.from(this.initPov.eye),target:Array.from(this.initPov.target),up:Array.from(this.initPov.up)}},f.prototype.start=function(t,i){this.changed=!1,this.isStarted=!0,this.startPov=this.pov,this.startPoint=t,this.startSize=i,this.previousPoint=t,this.inertia.stop()},f.prototype.motion=function(i){this.isStarted&&this.inertia.track(i);var e={x:i.x-this.previousPoint.x,y:i.y-this.previousPoint.y},n=a.accelerate(e.x,1.3)/this.startSize.width*.2*Math.PI*1.5,o=a.accelerate(e.y,1.3)/this.startSize.height*.2*Math.PI,r=t.m4.multiply(t.m4.rotationY(-n),t.m4.rotationX(-o)),s=t.v3.normalize(t.v3.cross(this.pov.up,this.pov.target)),h=new v(s,[0,1,0],this.pov.eye),c=t.m4.identity();t.m4.multiply(c,h.localToGlobalMatrix,c),t.m4.multiply(c,r,c),t.m4.multiply(c,h.globalToLocalMatrix,c);var d=t.m4.transformPoint(c,this.pov.target),u=t.m4.transformDirection(c,this.pov.up);t.v3.cross(u,[0,0,1])[0]>=0&&(this.pov.target=d,this.pov.up=u),this.previousPoint={x:i.x,y:i.y},this.onMotion(),this.changed=!0},f.prototype.end=function(t){this.isStarted=!1,t&&this.inertia.start()},f.prototype.orientation=function(i){if(null!==i.alpha&&null!==i.beta&&null!==i.gamma){var e=a.degreesToRadians(window.orientation)||0,n=a.degreesToRadians(i.alpha),o=a.degreesToRadians(-i.beta),r=a.degreesToRadians(-i.gamma),s=t.m4.rotationX(a.degreesToRadians(90));t.m4.rotateZ(s,this.initOrientation,s),t.m4.rotateZ(s,n,s),t.m4.rotateX(s,o,s),t.m4.rotateY(s,r,s),t.m4.rotateZ(s,-e,s),this.orientationMatrix=s,this.onMotion()}},Object.defineProperties(f.prototype,y);var w=function(t,i,e,o){var r=this;this.container=t,this.canvas=i,this.loader=e,this.onInteraction=o;var s={eye:[0,0,0],target:[0,0,1],up:[0,1,0]},h=n.m4.rotationX(a.degreesToRadians(15));n.m4.transformDirection(h,s.target,s.target),n.m4.transformDirection(h,s.up,s.up),this.interaction=new f(60,s,function(){requestAnimationFrame(r.render)}),this.gl=this.canvas.context,this.programInfo=n.createProgramInfo(this.gl,["attribute vec4 position;uniform mat4 u_matrix;varying vec3 direction;void main(){direction=(u_matrix*position).xyz;gl_Position=position*vec4(-1,1,1,1);}\n","precision mediump float;uniform float u_mix;uniform samplerCube u_texture;uniform samplerCube u_texture_back;varying vec3 direction;void main(){vec4 backColor=textureCube(u_texture_back,direction);vec4 color=textureCube(u_texture,direction);gl_FragColor=mix(backColor,color,u_mix);}\n"]),this.quad=n.primitives.createXYQuadBufferInfo(this.gl),this.uniforms={u_matrix:n.m4.identity(),u_mix:0,u_texture_back:n.createTexture(this.gl,{target:this.gl.TEXTURE_CUBE_MAP,minMag:this.gl.LINEAR,width:1,height:1}),u_texture:n.createTexture(this.gl,{target:this.gl.TEXTURE_CUBE_MAP,minMag:this.gl.LINEAR,width:1,height:1})},this.render=this.render.bind(this),this.goto=function(){}};w.prototype.show=function(){this.canvas.show(),this.container.classList.add("ls-viewer-container-vrcube")},w.prototype.hide=function(){this.canvas.hide(),this.container.classList.remove("ls-viewer-container-vrcube")},w.prototype.load=function(t,i,e){var o=this,r=JSON.stringify(t);return r===this.hash?(requestAnimationFrame(this.render),Promise.resolve()):(this.hash=r,this.images=[],requestAnimationFrame(this.render),this.loader.loadVRCubeSnapshot(t).then(function(t){n.createTexture(o.gl,{target:o.gl.TEXTURE_CUBE_MAP,minMag:o.gl.LINEAR,auto:!1,cubeFaceOrder:[o.gl.TEXTURE_CUBE_MAP_POSITIVE_Z,o.gl.TEXTURE_CUBE_MAP_POSITIVE_X,o.gl.TEXTURE_CUBE_MAP_NEGATIVE_Z,o.gl.TEXTURE_CUBE_MAP_NEGATIVE_X,o.gl.TEXTURE_CUBE_MAP_POSITIVE_Y,o.gl.TEXTURE_CUBE_MAP_NEGATIVE_Y],src:t},function(t,n){t||(i&&o.interaction.reset(),o.uniforms.u_mix=e?0:1,o.uniforms.u_texture_back=o.uniforms.u_texture,o.uniforms.u_texture=n,requestAnimationFrame(o.render))})}))},w.prototype.render=function(){n.resizeCanvasToDisplaySize(this.gl.canvas,window.devicePixelRatio),this.gl.viewport(0,0,this.gl.canvas.width,this.gl.canvas.height);var t=this.interaction.fov,i=this.gl.canvas.clientWidth/this.gl.canvas.clientHeight,e=n.m4.inverse(n.m4.perspective(t,i,.5,100)),o=this.interaction.orientedPov,r=n.m4.lookAt(o.eye,o.target,o.up);this.uniforms.u_matrix=n.m4.multiply(r,e),this.gl.useProgram(this.programInfo.program),n.setBuffersAndAttributes(this.gl,this.programInfo,this.quad),n.setUniforms(this.programInfo,this.uniforms),n.drawBufferInfo(this.gl,this.quad),this.uniforms.u_mix<1&&(this.uniforms.u_mix=Math.min(this.uniforms.u_mix+.05,1),requestAnimationFrame(this.render))},w.prototype.onStart=function(t){this.container.classList.add("ls-viewer-container-vrcube-grabbing"),this.interaction.start(m.point(t),{width:this.gl.canvas.width,height:this.gl.canvas.height})},w.prototype.onEnter=function(t){this.interaction.isStarted&&0===t.buttons&&(this.container.classList.remove("ls-viewer-container-vrcube-grabbing"),this.interaction.end(!1))},w.prototype.onMove=function(t){this.interaction.isStarted&&(this.interaction.motion(m.point(t)),t.preventDefault())},w.prototype.onEnd=function(){this.interaction.isStarted&&(this.container.classList.remove("ls-viewer-container-vrcube-grabbing"),this.interaction.end(!0),this.interaction.changed&&this.onInteraction())},w.prototype.onDeviceOrientation=function(t){this.interaction.orientation({alpha:t.alpha,beta:t.beta,gamma:t.gamma})};var b=function(t,i,e,n){this.changed=!1,this.isStarted=!1,this.inertia=new g(this.motion.bind(this)),this.position=t,this.count=i,this.loop=e,this.onMotion=n,this.initPosition=this.position};b.prototype.set=function(t){var i=this.position;this.loop?this.position=a.mod(t,this.count):this.position=Math.max(0,Math.min(t,this.count-1)),this.position!==i&&(this.onMotion(),this.changed=!0)},b.prototype.reset=function(){this.position=this.initPosition},b.prototype.start=function(t,i){this.changed=!1,this.isStarted=!0,this.startPosition=this.position,this.startPoint=t,this.startSize=i,this.inertia.stop()},b.prototype.motion=function(t){this.isStarted&&this.inertia.track(t);var i={x:t.x-this.startPoint.x,y:t.y-this.startPoint.y},e=a.accelerate(i.x,1.3)/this.startSize.width*(this.count/4),n=this.startPosition-Math.round(e);this.set(n)},b.prototype.end=function(t){this.isStarted=!1,t&&this.inertia.start()};var E=function(t,i,e,n){var o=this;this.container=t,this.canvas=i,this.loader=e,this.onInteraction=n,this.images=[],this.interaction=new b(0,1,!1,function(){o.canvas.draw(o.image,!0,.5)}),this.options={loop:!0},this.onDeviceOrientation=function(){}},L={image:{configurable:!0}};E.prototype.show=function(){this.canvas.show(),this.container.classList.add("ls-viewer-container-vrobject")},E.prototype.hide=function(){this.canvas.hide(),this.container.classList.remove("ls-viewer-container-vrobject")},E.prototype.goto=function(t){var i=this;return new Promise(function(e){var n=i.interaction.position,o=function(){var r=n>t?-1:1;i.interaction.loop&&i.interaction.count-n+t<Math.abs(t-n)&&(r*=-1),n+=.5*r,i.interaction.set(Math.floor(n)),i.interaction.position===t?e():requestAnimationFrame(o)};requestAnimationFrame(o)})},L.image.get=function(){return this.images[this.interaction.position]},E.prototype.load=function(t,i,e){var n=this,o=JSON.stringify(t);if(o===this.hash)return this.canvas.draw(this.image,e,.01),Promise.resolve();this.hash=o,this.images=[],i&&this.interaction.reset();var r=this.interaction.position;return this.loader.loadVRObjectSnapshot(t,r).then(function(i){var o=i.length;return n.images=new Array(o),n.interaction.count=o,n.interaction.loop=!1!==t.view.loop,i.forEach(function(t,i){t.then(function(t){n.images[i]=t,n.canvas.draw(n.image,e,.01)})}),i[n.interaction.position]})},E.prototype.onStart=function(t){this.container.classList.add("ls-viewer-container-vrobject-grabbing"),this.interaction.start(m.point(t),{width:this.canvas.element.width,height:this.canvas.element.height})},E.prototype.onEnter=function(t){this.interaction.isStarted&&0===t.buttons&&(this.container.classList.remove("ls-viewer-container-vrobject-grabbing"),this.interaction.end(!1))},E.prototype.onMove=function(t){this.interaction.isStarted&&(this.interaction.motion(m.point(t)),t.preventDefault())},E.prototype.onEnd=function(){this.interaction.isStarted&&(this.container.classList.remove("ls-viewer-container-vrobject-grabbing"),this.interaction.end(!0),this.interaction.changed&&this.onInteraction())},Object.defineProperties(E.prototype,L);!function(t,i){void 0===i&&(i={});var e=i.insertAt;if(t&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===e&&n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o),o.styleSheet?o.styleSheet.cssText=t:o.appendChild(document.createTextNode(t))}}(".ls-viewer-container{display:block;position:relative;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%;height:100%}.ls-viewer-container-image,.ls-viewer-container-video{cursor:default;pointer-events:none}.ls-viewer-container-vrcube{cursor:pointer;cursor:-webkit-grab;cursor:grab}.ls-viewer-container-vrcube-grabbing{cursor:move;cursor:-webkit-grabbing;cursor:grabbing}.ls-viewer-container-vrobject{cursor:move;cursor:-webkit-grab;cursor:grab}.ls-viewer-container-vrobject-grabbing{cursor:move;cursor:-webkit-grabbing;cursor:grabbing}.ls-viewer-container-loading{cursor:progress}.ls-viewer-canvas{position:absolute;-webkit-transition:opacity .5s;transition:opacity .5s}");var P=function(t,i){this.checkResize=this.checkResize.bind(this),this.onDeviceOrientation=this.onDeviceOrientation.bind(this),this.onInteraction=this.onInteraction.bind(this),this.onResize=this.onResize.bind(this),this.onStart=this.onStart.bind(this),this.onEnter=this.onEnter.bind(this),this.onMove=this.onMove.bind(this),this.onEnd=this.onEnd.bind(this),this.onLoadStart=this.onLoadStart.bind(this),this.onLoadProgress=this.onLoadProgress.bind(this),this.onLoadEnd=this.onLoadEnd.bind(this),this.onLoadError=this.onLoadError.bind(this),this.container=t,this.container.classList.add("ls-viewer-container"),this.canvas2D=new r,this.container.appendChild(this.canvas2D.element),this.canvas3D=new s,this.container.appendChild(this.canvas3D.element),this.canvasVideo=new r,this.container.appendChild(this.canvasVideo.element),this.options=Object.assign({},{server:"localhost",events:{onInteraction:function(){},onLoadStart:function(){},onLoadProgress:function(){},onLoadEnd:function(){},onLoadError:function(){}}},i),this.loader=new c(i.server,{onLoadStart:this.onLoadStart,onLoadProgress:this.onLoadProgress,onLoadEnd:this.onLoadEnd,onLoadError:this.onLoadError}),this.resolution={width:0,height:0},this.scene=null,this.view=null,this.parameters={antialiasing:!1,superSampling:2},this.encoder={format:"jpeg",quality:90},this.widgets={image:new u(t,this.canvas2D,this.loader,this.onInteraction),video:new l(t,this.canvasVideo,this.loader,this.onInteraction),vrcube:new w(t,this.canvas3D,this.loader,this.onInteraction),vrobject:new E(t,this.canvas2D,this.loader,this.onInteraction)},this.widget=this.widgets.image,this.container.addEventListener("mousedown",this.onStart),this.container.addEventListener("mouseenter",this.onEnter),this.container.addEventListener("mousemove",this.onMove),this.container.addEventListener("mouseup",this.onEnd),this.container.addEventListener("touchstart",this.onStart),this.container.addEventListener("touchmove",this.onMove),this.container.addEventListener("touchend",this.onEnd),window.addEventListener("deviceorientation",this.onDeviceOrientation),this.checkResize(),this.loadWidget=e(this.loadWidget,10),this.onResize=e(this.onResize,250)};return P.prototype.destroy=function(){this.container.removeEventListener("mousedown",this.onStart),this.container.removeEventListener("mouseenter",this.onEnter),this.container.removeEventListener("mousemove",this.onMove),this.container.removeEventListener("mouseup",this.onEnd),this.container.removeEventListener("touchstart",this.onStart),this.container.removeEventListener("touchmove",this.onMove),this.container.removeEventListener("touchend",this.onEnd),window.removeEventListener("deviceorientation",this.onDeviceOrientation),this.isDestroyed=!0},P.prototype.load=function(t,e){var n=this,o=Promise.resolve();this.view&&e&&void 0!==e.position&&(o=o.then(function(){return n.widgets[n.view.mode].goto(e.position)})),e&&void 0!==e.animation&&(o=o.then(function(){return n.playAnimation(e.animation)})),o.then(function(){n.scene=Array.isArray(t)?i(t):[i(t)],n.loadWidget(!1,!(e&&e.animation))})},P.prototype.setEncoder=function(t){this.encoder=i(t),this.loadWidget(!1,!0)},P.prototype.setParameters=function(t){this.parameters=i(t),this.parameters.width=this.resolution.width,this.parameters.height=this.resolution.height,this.loadWidget(!1,!0)},P.prototype.setView=function(t,e){var n=this,o=Promise.resolve();this.view&&e&&void 0!==e.position&&(o=o.then(function(){return n.widgets[n.view.mode].goto(e.position)})),e&&void 0!==e.animation&&(o=o.then(function(){return n.playAnimation(e.animation)})),o.then(function(){n.view=i(t),n.loadWidget(!0,!(e&&e.animation))})},P.prototype.playAnimation=function(t){var i=this,e=this.widgets.video;if(!e)return Promise.reject();var n={scene:this.scene,view:{animation:t.name,camera:t.camera,duration:t.duration,loop:t.loop},parameters:this.parameters,encoder:{format:"mp4"}};return n.view.background||(n.view.background="product"),new Promise(function(t,o){e.load(n,!0,!0).then(function(){e.video.addEventListener("ended",function(){t()}),e.show()},function(t){i.options.events.onLoadError(t),o()})})},P.prototype.stopAnimation=function(){var t=this.widgets.video;t&&(t.hide(),this.loadWidget(!1,!0))},P.prototype.loadWidget=function(t,i){var e=this;if(this.scene&&this.view&&this.parameters.width&&this.parameters.height){var n=this.widgets[this.view.mode];if(n){var o={scene:this.scene,view:this.view,parameters:this.parameters,encoder:this.encoder};o.view.background||(o.view.background="product"),n.load(o,t,i).then(function(){e.widget.hide(),e.widget=n,e.widget.show(),e.widgets.video.hide()},function(t){e.options.events.onLoadError(t)})}}},P.prototype.checkResize=function(){if(!this.isDestroyed){var t=this.container.offsetWidth,i=this.container.offsetHeight;t===this.containerWidth&&i===this.containerHeight||(this.containerWidth=t,this.containerHeight=i,this.onResize()),this.isDestroyed||requestAnimationFrame(this.checkResize)}},P.prototype.onStart=function(t){this.widget.onStart(t)},P.prototype.onEnter=function(t){this.widget.onEnter(t)},P.prototype.onMove=function(t){this.widget.onMove(t)},P.prototype.onEnd=function(t){this.widget.onEnd(t)},P.prototype.onDeviceOrientation=function(t){this.widget.onDeviceOrientation(t)},P.prototype.onResize=function(){var t=window.devicePixelRatio,i=this.container.offsetWidth*t,e=this.container.offsetHeight*t;this.resolution=o.getStandardResolution(i,e),this.parameters.width=this.resolution.width,this.parameters.height=this.resolution.height,this.canvas2D.resize(i/t,e/t,this.resolution),this.canvas3D.resize(i/t,e/t,this.resolution),this.canvasVideo.resize(i/t,e/t,this.resolution),this.loadWidget(!1,!1)},P.prototype.onInteraction=function(){for(var t=[],i=arguments.length;i--;)t[i]=arguments[i];this.options.events.onInteraction(t)},P.prototype.onLoadStart=function(){for(var t=[],i=arguments.length;i--;)t[i]=arguments[i];this.container.classList.add("ls-viewer-container-loading"),this.options.events.onLoadStart(t)},P.prototype.onLoadProgress=function(){for(var t=[],i=arguments.length;i--;)t[i]=arguments[i];this.options.events.onLoadProgress(t)},P.prototype.onLoadEnd=function(){for(var t=[],i=arguments.length;i--;)t[i]=arguments[i];this.container.classList.remove("ls-viewer-container-loading"),this.options.events.onLoadEnd(t)},P.prototype.onLoadError=function(){for(var t=[],i=arguments.length;i--;)t[i]=arguments[i];this.options.events.onLoadError(t)},P});
!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i(require("twgl.js"),require("axios"),require("lodash.clonedeep"),require("lodash.debounce")):"function"==typeof define&&define.amd?define(["twgl.js","axios","lodash.clonedeep","lodash.debounce"],i):t.LumiscapheViewer=i(t.twgl,t.axios,t.cloneDeep,t.debounce)}(this,function(t,i,e,n){"use strict";var o="default"in t?t.default:t;i=i&&i.hasOwnProperty("default")?i.default:i,e=e&&e.hasOwnProperty("default")?e.default:e,n=n&&n.hasOwnProperty("default")?n.default:n;var r=function(){};r.fit=function(t,i,e,n){var o=t.width/t.height,r=i/e,s=0,a=0;switch(n){case"contain":s=r<o?i:e*o,a=r<o?i/o:e;break;case"cover":default:s=r<o?e*o:i,a=r<o?e:i/o;break;case"fill":s=i,a=e}return{width:Math.round(s),height:Math.round(a),top:Math.round((e-a)/2),left:Math.round((i-s)/2)}},r.getStandardQuality=function(t){return t<=240?240:t<=360?360:t<=480?480:t<=720?720:1080},r.getStandardResolution=function(t,i){if(0===t||0===i)return{width:0,height:0};if(t<i){var e=t/i<.75?9/16:.75,n=r.getStandardQuality(i*e);return{width:Math.round(n),height:Math.round(n/e)}}var o=t/i>4/3?16/9:4/3,s=r.getStandardQuality(t/o);return{width:Math.round(s*o),height:Math.round(s)}};var s=function(){this.element=document.createElement("canvas"),this.element.classList.add("ls-viewer-canvas"),this.element.style.opacity=0,this.context=this.element.getContext("2d"),this.requestAnimationId=null};s.prototype.show=function(){this.element.style.opacity=1},s.prototype.hide=function(){this.element.style.opacity=0},s.prototype.resize=function(t,i,e){var n=r.fit(e,t,i,"cover");this.element.style.width=n.width+"px",this.element.style.height=n.height+"px",this.element.style.top=n.top+"px",this.element.style.left=n.left+"px",e.width===this.element.width&&e.height===this.element.height||(this.element.width=e.width,this.element.height=e.height)},s.prototype.draw=function(t,i,e){t&&(this.requestAnimationId&&(cancelAnimationFrame(this.requestAnimationId),this.requestAnimationId=null),i?(this.context.globalAlpha=0,this.fadeLoop(t,e)):(this.context.globalAlpha=1,this.context.drawImage(t,0,0,this.element.width,this.element.height)))},s.prototype.play=function(t,i){t&&(this.requestAnimationId&&(cancelAnimationFrame(this.requestAnimationId),this.requestAnimationId=null),this.playLoop(t,i))},s.prototype.stop=function(){this.requestAnimationId&&(cancelAnimationFrame(this.requestAnimationId),this.requestAnimationId=null)},s.prototype.fadeLoop=function(t,i){var e=this;if(this.context.globalAlpha>=1)return cancelAnimationFrame(this.requestAnimationId),void(this.requestAnimationId=null);this.context.globalAlpha=Math.min(this.context.globalAlpha+i,1),this.context.drawImage(t,0,0,this.element.width,this.element.height),this.requestAnimationId=requestAnimationFrame(function(){e.fadeLoop(t,i)})},s.prototype.playLoop=function(t,i){var e=this;this.context.drawImage(t,0,0,this.element.width,this.element.height),this.requestAnimationId=requestAnimationFrame(function(){e.playLoop(t,i)})};var a=function(){this.element=document.createElement("canvas"),this.element.classList.add("ls-viewer-canvas"),this.element.style.opacity=0,this.context=o.getContext(this.element),o.setDefaultTextureColor([1,1,1,1]),this.requestAnimationId=null};a.prototype.show=function(){this.element.style.opacity=1},a.prototype.hide=function(){this.element.style.opacity=0},a.prototype.resize=function(){this.element.style.width="100%",this.element.style.height="100%",this.element.style.top=0,this.element.style.left=0};var h=function(){};h.accelerate=function(t,i){var e=i||1.5;return Math.pow(Math.abs(t),e)*(t>0?1:-1)},h.degreesToRadians=function(t){return t*(Math.PI/180)},h.mod=function(t,i){return t-i*Math.floor(t/i)};var c=function(t){this.server=t};c.buildQuery=function(t){return Object.keys(t).filter(function(i){return void 0!==t[i]}).map(function(i){return i+"="+t[i]}).join("&")},c.sceneParameters=function(t){var i=t.scene,e={},n=i.length>1?i.find(function(t){return t.master})||i[0]:null;if(n){var o=i.find(function(t){return t!==n});e.databaseId=o.database,e.configuration=o.configuration,e.decorDatabaseId=n.database,e.decorDeltaAltitude=n.translation.y}else{var r=i[0];e.databaseId=r.database,e.configuration=r.configuration,e.animations=r.animations&&r.animations.length?r.animations.join("/"):void 0}return e},c.renderParameters=function(t){var i=t.parameters;return{width:i.width,height:i.height,softwareAntialiasing:i.antialiasing,superSampling:i.superSampling}},c.encoderParameters=function(t){var i=t.encoder;return{imageFormat:i.format,imageQuality:i.quality}},c.fetch=function(t){return i.get(t).then(function(t){var i=t.data.replace(/&amp;/g,"&").match(/directUrl="([^"]*)"/g);return i?i.map(function(t){return t.replace(/directUrl="([^"]*)"/g,"$1")}):Promise.reject()})},c.prototype.animation=function(t){var i={};Object.assign(i,c.sceneParameters(t)),Object.assign(i,{animation:t.view.animation,bookmarkSet:t.view.camera.split("/")[0],bookmark:t.view.camera.split("/")[1],frames:t.view.frames,loop:!!t.view.loop,background:t.view.background}),Object.assign(i,c.renderParameters(t)),Object.assign(i,c.encoderParameters(t));var e=c.buildQuery(i);return c.fetch(this.server+"/ImagesFromAnimation?"+e)},c.prototype.image=function(t){var i={};Object.assign(i,c.sceneParameters(t)),Object.assign(i,{bookmarkSet:t.view.camera.split("/")[0],bookmark:t.view.camera.split("/")[1],background:t.view.background}),Object.assign(i,c.renderParameters(t)),Object.assign(i,c.encoderParameters(t));var e=c.buildQuery(i);return Promise.resolve(this.server+"/ImageFromBookmark?"+e)},c.prototype.video=function(t){var i={};Object.assign(i,c.sceneParameters(t)),Object.assign(i,{animation:t.view.animation,bookmarkSet:t.view.camera.split("/")[0],bookmark:t.view.camera.split("/")[1],duration:t.view.duration,frames:t.view.frames,loop:!!t.view.loop,background:t.view.background}),Object.assign(i,c.renderParameters(t)),Object.assign(i,c.encoderParameters(t));var e=c.buildQuery(i);return Promise.resolve(this.server+"/ImagesFromAnimation?"+e)},c.prototype.vrCube=function(t){var i={};Object.assign(i,c.sceneParameters(t)),Object.assign(i,{bookmarkSet:t.view.camera.split("/")[0],bookmark:t.view.camera.split("/")[1],background:t.view.background}),Object.assign(i,c.renderParameters(t)),Object.assign(i,c.encoderParameters(t)),i.width=Math.max(i.width,i.height),i.height=Math.max(i.width,i.height);var e=c.buildQuery(i);return c.fetch(this.server+"/CubeFromBookmark?"+e)},c.prototype.vrObject=function(t){var i={};Object.assign(i,c.sceneParameters(t)),Object.assign(i,{bookmarkSet:t.view.camera,background:t.view.background}),Object.assign(i,c.renderParameters(t)),Object.assign(i,c.encoderParameters(t));var e=c.buildQuery(i);return c.fetch(this.server+"/ImagesFromBookmarkSet?"+e)};var d=function(t,i){this.webrender=new c(t),this.loadingId=0,this.loaded=0,this.total=0,this.onLoadStart=i.onLoadStart||function(){},this.onLoadProgress=i.onLoadProgress||function(){},this.onLoadEnd=i.onLoadEnd||function(){}},u={progress:{configurable:!0}};u.progress.get=function(){return this.total?this.loaded/this.total:0},d.prototype.loadImage=function(t,i){var e=this,n=new Image;n.crossOrigin="anonymous";var o=new Promise(function(t,o){n.addEventListener("load",function(){i===e.loadingId&&(e.loaded+=1,e.onLoadProgress(e.progress),t(n))}),n.addEventListener("error",function(t){i===e.loadingId&&o(t)})});return n.src=t,o},d.prototype.loadImageFrames=function(t,i,e,n){var o=this;this.total=t.length;for(var r=new Array(t.length),s=e||0,a=0,c=t.length;a<c;a+=1){var d=Math.ceil(a/2)*(a%2==0?1:-1),u=i?h.mod(s+d,c):a;r[u]=o.loadImage(t[u],n)}return Promise.all(r).then(function(){return o.onLoadEnd(o.progress)}),r},d.prototype.loadVideo=function(t,i,e){var n=this,o=document.createElement("video");o.autoplay=!0,o.loop=i,o.muted=!0,o.playsinline=!0,o.preload="auto";var r=new Promise(function(t,i){o.addEventListener("loadeddata",function(){e===n.loadingId&&(n.loaded+=1,n.onLoadProgress(n.progress),t(o))}),o.addEventListener("error",function(t){e===n.loadingId&&i(t)})});return o.src=t,r},d.prototype.loadVideoFrame=function(t,i,e,n,o){var r=this,s=0;return new Promise(function(a,h){var c=function(){if(o===r.loadingId){if(s!==n)return void(s+=1);t.removeEventListener("seeked",c);var h=document.createElement("canvas");h.width=t.videoWidth,h.height=t.videoHeight,h.getContext("2d").drawImage(t,0,0),a(h),r.loaded+=1,r.onLoadProgress(r.progress),n!==e-1&&(t.currentTime+=1/i)}};t.addEventListener("seeked",c);var d=function(i){o===r.loadingId&&(t.removeEventListener("error",d),h(i))};t.addEventListener("error",d)})},d.prototype.loadVideoFrames=function(t,i,e,n){var o=this;this.total=i;var r=new Array(i),s=document.createElement("video");s.autoplay=!0,s.muted=!0,s.playsinline=!0,s.preload="auto";for(var a=0,h=i;a<h;a+=1)r[a]=o.loadVideoFrame(s,e,i,a,n);return s.addEventListener("loadeddata",function(){n===o.loadingId&&(s.currentTime=1/e/2)}),s.src=t,Promise.all(r).then(function(){return o.onLoadEnd(o.progress)}),r},d.prototype.loadImageSnapshot=function(t){var i=this;this.loadingId+=1,this.loaded=0,this.total=1,this.onLoadStart(this.progress);var e=this.loadingId;return this.webrender.image(t).then(function(t){return i.loadImage(t,e)}).then(function(t){return i.onLoadEnd(i.progress),t})},d.prototype.loadVideoSnapshot=function(t){var i=this;this.loadingId+=1,this.loaded=0,this.total=1,this.onLoadStart(this.progress);var e=this.loadingId;return this.webrender.video(t).then(function(n){return i.loadVideo(n,t.view.loop,e)}).then(function(t){return i.onLoadEnd(i.progress),t})},d.prototype.loadVRCubeSnapshot=function(t){var i=this;this.loadingId+=1,this.loaded=0,this.total=0,this.onLoadStart(this.progress);var e=this.loadingId;return this.webrender.vrCube(t).then(function(t){i.total=t.length;var n=t.map(function(t){return i.loadImage(t,e)});return Promise.all(n)}).then(function(t){return i.onLoadEnd(i.progress),t})},d.prototype.loadVRObjectSnapshot=function(t,i){var e=this;this.loadingId+=1,this.loaded=0,this.total=0,this.onLoadStart(this.progress);var n,o=this.loadingId;return n=t.view.animation?"mp4"===t.encoder.format?"video":"animation":"vrObject",this.webrender[n](t).then(function(n){return Array.isArray(n)?e.loadImageFrames(n,t.view.loop,i,o):e.loadVideoFrames(n,t.view.frames,30,o)})},Object.defineProperties(d.prototype,u);var l=function(t,i,e){this.container=t,this.canvas=i,this.loader=e,this.image=null,this.goto=function(){},this.onStart=function(){},this.onEnter=function(){},this.onMove=function(){},this.onEnd=function(){},this.onDeviceOrientation=function(){}};l.prototype.show=function(){this.canvas.show(),this.container.classList.add("ls-viewer-container-image")},l.prototype.hide=function(){this.canvas.hide(),this.container.classList.remove("ls-viewer-container-image")},l.prototype.load=function(t,i,e){var n=this,o=JSON.stringify(t);return o===this.hash?(this.canvas.draw(this.image,e,.01),Promise.resolve()):(this.hash=o,this.loader.loadImageSnapshot(t).then(function(t){n.image=t,n.canvas.draw(n.image,e,.01)}))};var m=function(t,i,e){this.container=t,this.canvas=i,this.loader=e,this.video=null,this.onStart=function(){},this.onEnter=function(){},this.onMove=function(){},this.onEnd=function(){},this.onDeviceOrientation=function(){}};m.prototype.show=function(){this.canvas.show(),this.container.classList.add("ls-viewer-container-video")},m.prototype.hide=function(){this.canvas.hide(),this.container.classList.remove("ls-viewer-container-video"),this.video&&this.video.pause(),this.canvas.stop()},m.prototype.load=function(t){var i=this,e=JSON.stringify(t);return e===this.hash?(this.video.load(),this.canvas.play(this.video,t.view.loop),Promise.resolve()):(this.hash=e,this.loader.loadVideoSnapshot(t).then(function(e){i.video=e,i.canvas.play(i.video,t.view.loop)}))};var v=function(){};v.point=function(t){if("touchmove"===t.type||"touchstart"===t.type||"touchend"===t.type){var i=t.targetTouches[0]||t.changedTouches[0];return{x:i.screenX,y:i.screenY}}return{x:t.screenX,y:t.screenY}};var p=function(){for(var i,e=[],n=arguments.length;n--;)e[n]=arguments[n];3===e.length?(i=e,this.u=i[0],this.v=i[1],this.o=i[2],this.w=t.v3.cross(this.u,this.v)):(this.u=[1,0,0],this.v=[0,1,0],this.w=[0,0,1],this.o=[0,0,0])},g={localToGlobalMatrix:{configurable:!0},globalToLocalMatrix:{configurable:!0}};g.localToGlobalMatrix.get=function(){var t=[this.u[0],this.u[1],this.u[2],0],i=[this.v[0],this.v[1],this.v[2],0],e=[this.w[0],this.w[1],this.w[2],0],n=[this.o[0],this.o[1],this.o[2],1];return[].concat.apply([],[t,i,e,n])},g.globalToLocalMatrix.get=function(){return t.m4.inverse(this.localToGlobalMatrix)},Object.defineProperties(p.prototype,g);var f=function(t){this.animationFrameId=null,this.points=[],this.onMotion=t,this.loop=this.loop.bind(this)};f.prototype.track=function(t){var i=Date.now();this.points=this.points.filter(function(t){return i-t.time<=100}),this.points.push({x:t.x,y:t.y,time:i}),this.lastPoint=t},f.prototype.start=function(){if(0!==this.points.length){var t=this.points[0],i=this.points[this.points.length-1],e=i.x-t.x,n=i.y-t.y,o=i.time-t.time;this.velocity={x:0===o?0:e/(o/15),y:0===o?0:n/(o/15)},this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.animationFrameId=requestAnimationFrame(this.loop)}},f.prototype.stop=function(){this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.points=[]},f.prototype.loop=function(){if(Math.abs(this.velocity.x)<1&&Math.abs(this.velocity.y)<1)return this.animationFrameId=null,void(this.points=[]);this.lastPoint.x+=this.velocity.x,this.lastPoint.y+=this.velocity.y,this.velocity.x*=.9,this.velocity.y*=.9,this.onMotion(this.lastPoint),this.animationFrameId=requestAnimationFrame(this.loop)};var y=function(i,e,n){this.changed=!1,this.isStarted=!1,this.inertia=new f(this.motion.bind(this)),this.fov=h.degreesToRadians(i),this.pov=e,this.orientationMatrix=t.m4.identity(),this.initFov=this.fov,this.initPov=this.pov,this.initOrientation=h.degreesToRadians(window.orientation)||0,this.onMotion=n},w={orientedPov:{configurable:!0}};w.orientedPov.get=function(){var i=t.v3.normalize(t.v3.cross(this.pov.up,this.pov.target)),e=new p(i,[0,1,0],this.pov.eye),n=t.m4.identity();return t.m4.multiply(n,e.localToGlobalMatrix,n),t.m4.multiply(n,this.orientationMatrix,n),t.m4.multiply(n,e.globalToLocalMatrix,n),{eye:this.pov.eye,target:t.m4.transformDirection(n,this.pov.target),up:t.m4.transformDirection(n,this.pov.up)}},y.prototype.reset=function(){this.fov=this.initFov,this.pov={eye:Array.from(this.initPov.eye),target:Array.from(this.initPov.target),up:Array.from(this.initPov.up)}},y.prototype.start=function(t,i){this.changed=!1,this.isStarted=!0,this.startPov=this.pov,this.startPoint=t,this.startSize=i,this.previousPoint=t,this.inertia.stop()},y.prototype.motion=function(i){this.isStarted&&this.inertia.track(i);var e={x:i.x-this.previousPoint.x,y:i.y-this.previousPoint.y},n=h.accelerate(e.x,1.3)/this.startSize.width*.2*Math.PI*1.5,o=h.accelerate(e.y,1.3)/this.startSize.height*.2*Math.PI,r=t.m4.multiply(t.m4.rotationY(-n),t.m4.rotationX(-o)),s=t.v3.normalize(t.v3.cross(this.pov.up,this.pov.target)),a=new p(s,[0,1,0],this.pov.eye),c=t.m4.identity();t.m4.multiply(c,a.localToGlobalMatrix,c),t.m4.multiply(c,r,c),t.m4.multiply(c,a.globalToLocalMatrix,c);var d=t.m4.transformPoint(c,this.pov.target),u=t.m4.transformDirection(c,this.pov.up);t.v3.cross(u,[0,0,1])[0]>=0&&(this.pov.target=d,this.pov.up=u),this.previousPoint={x:i.x,y:i.y},this.onMotion(),this.changed=!0},y.prototype.end=function(t){this.isStarted=!1,t&&this.inertia.start()},y.prototype.orientation=function(i){if(null!==i.alpha&&null!==i.beta&&null!==i.gamma){var e=h.degreesToRadians(window.orientation)||0,n=h.degreesToRadians(i.alpha),o=h.degreesToRadians(-i.beta),r=h.degreesToRadians(-i.gamma),s=t.m4.rotationX(h.degreesToRadians(90));t.m4.rotateZ(s,this.initOrientation,s),t.m4.rotateZ(s,n,s),t.m4.rotateX(s,o,s),t.m4.rotateY(s,r,s),t.m4.rotateZ(s,-e,s),this.orientationMatrix=s,this.onMotion()}},Object.defineProperties(y.prototype,w);var b=function(t,i,e,n){var r=this;this.container=t,this.canvas=i,this.loader=e,this.onInteraction=n;var s={eye:[0,0,0],target:[0,0,1],up:[0,1,0]},a=o.m4.rotationX(h.degreesToRadians(15));o.m4.transformDirection(a,s.target,s.target),o.m4.transformDirection(a,s.up,s.up),this.interaction=new y(60,s,function(){requestAnimationFrame(r.render)}),this.gl=this.canvas.context,this.programInfo=o.createProgramInfo(this.gl,["attribute vec4 position;uniform mat4 u_matrix;varying vec3 direction;void main(){direction=(u_matrix*position).xyz;gl_Position=position*vec4(-1,1,1,1);}\n","precision mediump float;uniform float u_mix;uniform samplerCube u_texture;uniform samplerCube u_texture_back;varying vec3 direction;void main(){vec4 backColor=textureCube(u_texture_back,direction);vec4 color=textureCube(u_texture,direction);gl_FragColor=mix(backColor,color,u_mix);}\n"]),this.quad=o.primitives.createXYQuadBufferInfo(this.gl),this.uniforms={u_matrix:o.m4.identity(),u_mix:0,u_texture_back:o.createTexture(this.gl,{target:this.gl.TEXTURE_CUBE_MAP,minMag:this.gl.LINEAR,width:1,height:1}),u_texture:o.createTexture(this.gl,{target:this.gl.TEXTURE_CUBE_MAP,minMag:this.gl.LINEAR,width:1,height:1})},this.render=this.render.bind(this),this.goto=function(){}};b.prototype.show=function(){this.canvas.show(),this.container.classList.add("ls-viewer-container-vrcube")},b.prototype.hide=function(){this.canvas.hide(),this.container.classList.remove("ls-viewer-container-vrcube")},b.prototype.load=function(t,i,e){var n=this,r=JSON.stringify(t);return r===this.hash?(requestAnimationFrame(this.render),Promise.resolve()):(this.hash=r,this.images=[],requestAnimationFrame(this.render),this.loader.loadVRCubeSnapshot(t).then(function(t){o.createTexture(n.gl,{target:n.gl.TEXTURE_CUBE_MAP,minMag:n.gl.LINEAR,auto:!1,cubeFaceOrder:[n.gl.TEXTURE_CUBE_MAP_POSITIVE_Z,n.gl.TEXTURE_CUBE_MAP_POSITIVE_X,n.gl.TEXTURE_CUBE_MAP_NEGATIVE_Z,n.gl.TEXTURE_CUBE_MAP_NEGATIVE_X,n.gl.TEXTURE_CUBE_MAP_POSITIVE_Y,n.gl.TEXTURE_CUBE_MAP_NEGATIVE_Y],src:t},function(t,o){t||(i&&n.interaction.reset(),n.uniforms.u_mix=e?0:1,n.uniforms.u_texture_back=n.uniforms.u_texture,n.uniforms.u_texture=o,requestAnimationFrame(n.render))})}))},b.prototype.render=function(){o.resizeCanvasToDisplaySize(this.gl.canvas,window.devicePixelRatio),this.gl.viewport(0,0,this.gl.canvas.width,this.gl.canvas.height);var t=this.interaction.fov,i=this.gl.canvas.clientWidth/this.gl.canvas.clientHeight,e=o.m4.inverse(o.m4.perspective(t,i,.5,100)),n=this.interaction.orientedPov,r=o.m4.lookAt(n.eye,n.target,n.up);this.uniforms.u_matrix=o.m4.multiply(r,e),this.gl.useProgram(this.programInfo.program),o.setBuffersAndAttributes(this.gl,this.programInfo,this.quad),o.setUniforms(this.programInfo,this.uniforms),o.drawBufferInfo(this.gl,this.quad),this.uniforms.u_mix<1&&(this.uniforms.u_mix=Math.min(this.uniforms.u_mix+.05,1),requestAnimationFrame(this.render))},b.prototype.onStart=function(t){this.container.classList.add("ls-viewer-container-vrcube-grabbing"),this.interaction.start(v.point(t),{width:this.gl.canvas.width,height:this.gl.canvas.height})},b.prototype.onEnter=function(t){this.interaction.isStarted&&0===t.buttons&&(this.container.classList.remove("ls-viewer-container-vrcube-grabbing"),this.interaction.end(!1))},b.prototype.onMove=function(t){this.interaction.isStarted&&(this.interaction.motion(v.point(t)),t.preventDefault())},b.prototype.onEnd=function(){this.interaction.isStarted&&(this.container.classList.remove("ls-viewer-container-vrcube-grabbing"),this.interaction.end(!0),this.interaction.changed&&this.onInteraction())},b.prototype.onDeviceOrientation=function(t){this.interaction.orientation({alpha:t.alpha,beta:t.beta,gamma:t.gamma})};var E=function(t,i,e,n){this.changed=!1,this.isStarted=!1,this.inertia=new f(this.motion.bind(this)),this.position=t,this.count=i,this.loop=e,this.onMotion=n,this.initPosition=this.position};E.prototype.set=function(t){var i=this.position;this.loop?this.position=h.mod(t,this.count):this.position=Math.max(0,Math.min(t,this.count-1)),this.position!==i&&(this.onMotion(),this.changed=!0)},E.prototype.reset=function(){this.position=this.initPosition},E.prototype.start=function(t,i){this.changed=!1,this.isStarted=!0,this.startPosition=this.position,this.startPoint=t,this.startSize=i,this.inertia.stop()},E.prototype.motion=function(t){this.isStarted&&this.inertia.track(t);var i={x:t.x-this.startPoint.x,y:t.y-this.startPoint.y},e=h.accelerate(i.x,1.3)/this.startSize.width*(this.count/4),n=this.startPosition-Math.round(e);this.set(n)},E.prototype.end=function(t){this.isStarted=!1,t&&this.inertia.start()};var P=function(t,i,e,n){var o=this;this.container=t,this.canvas=i,this.loader=e,this.onInteraction=n,this.images=[],this.interaction=new E(0,1,!1,function(){o.canvas.draw(o.image,!0,.5)}),this.options={loop:!0},this.onDeviceOrientation=function(){}},L={image:{configurable:!0}};P.prototype.show=function(){this.canvas.show(),this.container.classList.add("ls-viewer-container-vrobject")},P.prototype.hide=function(){this.canvas.hide(),this.container.classList.remove("ls-viewer-container-vrobject")},P.prototype.goto=function(t){var i=this;return new Promise(function(e){var n=i.interaction.position,o=function(){var r=n>t?-1:1;i.interaction.loop&&i.interaction.count-n+t<Math.abs(t-n)&&(r*=-1),n+=.5*r,i.interaction.set(Math.floor(n)),i.interaction.position===t?e():requestAnimationFrame(o)};requestAnimationFrame(o)})},L.image.get=function(){return this.images[this.interaction.position]},P.prototype.load=function(t,i,e){var n=this,o=JSON.stringify(t);if(o===this.hash)return this.canvas.draw(this.image,e,.01),Promise.resolve();this.hash=o,this.images=[],i&&this.interaction.reset();var r=this.interaction.position;return this.loader.loadVRObjectSnapshot(t,r).then(function(i){var o=i.length;return n.images=new Array(o),n.interaction.count=o,n.interaction.loop=!!t.view.loop,i.forEach(function(t,i){t.then(function(t){n.images[i]=t,n.canvas.draw(n.image,e,.01)})}),i[n.interaction.position]})},P.prototype.onStart=function(t){this.container.classList.add("ls-viewer-container-vrobject-grabbing"),this.interaction.start(v.point(t),{width:this.canvas.element.width,height:this.canvas.element.height})},P.prototype.onEnter=function(t){this.interaction.isStarted&&0===t.buttons&&(this.container.classList.remove("ls-viewer-container-vrobject-grabbing"),this.interaction.end(!1))},P.prototype.onMove=function(t){this.interaction.isStarted&&(this.interaction.motion(v.point(t)),t.preventDefault())},P.prototype.onEnd=function(){this.interaction.isStarted&&(this.container.classList.remove("ls-viewer-container-vrobject-grabbing"),this.interaction.end(!0),this.interaction.changed&&this.onInteraction())},Object.defineProperties(P.prototype,L);!function(t,i){void 0===i&&(i={});var e=i.insertAt;if(t&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===e&&n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o),o.styleSheet?o.styleSheet.cssText=t:o.appendChild(document.createTextNode(t))}}(".ls-viewer-container{display:block;position:relative;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%;height:100%}.ls-viewer-container-image,.ls-viewer-container-video{cursor:default;pointer-events:none}.ls-viewer-container-vrcube{cursor:pointer;cursor:-webkit-grab;cursor:grab}.ls-viewer-container-vrcube-grabbing{cursor:move;cursor:-webkit-grabbing;cursor:grabbing}.ls-viewer-container-vrobject{cursor:move;cursor:-webkit-grab;cursor:grab}.ls-viewer-container-vrobject-grabbing{cursor:move;cursor:-webkit-grabbing;cursor:grabbing}.ls-viewer-container-loading{cursor:progress}.ls-viewer-canvas{position:absolute;-webkit-transition:opacity .5s;transition:opacity .5s}");var I=function(t,i){this.checkResize=this.checkResize.bind(this),this.onDeviceOrientation=this.onDeviceOrientation.bind(this),this.onInteraction=this.onInteraction.bind(this),this.onResize=this.onResize.bind(this),this.onStart=this.onStart.bind(this),this.onEnter=this.onEnter.bind(this),this.onMove=this.onMove.bind(this),this.onEnd=this.onEnd.bind(this),this.onLoadStart=this.onLoadStart.bind(this),this.onLoadProgress=this.onLoadProgress.bind(this),this.onLoadEnd=this.onLoadEnd.bind(this),this.onLoadError=this.onLoadError.bind(this),this.container=t,this.container.classList.add("ls-viewer-container"),this.canvas2D=new s,this.container.appendChild(this.canvas2D.element),this.canvas3D=new a,this.container.appendChild(this.canvas3D.element),this.canvasVideo=new s,this.container.appendChild(this.canvasVideo.element),this.options=Object.assign({},{server:"localhost",events:{onInteraction:function(){},onLoadStart:function(){},onLoadProgress:function(){},onLoadEnd:function(){},onLoadError:function(){}}},i),this.loader=new d(i.server,{onLoadStart:this.onLoadStart,onLoadProgress:this.onLoadProgress,onLoadEnd:this.onLoadEnd,onLoadError:this.onLoadError}),this.resolution={width:0,height:0},this.scene=null,this.view=null,this.parameters={antialiasing:!1,superSampling:2},this.encoder={format:"jpeg",quality:90},this.widgets={image:new l(t,this.canvas2D,this.loader,this.onInteraction),video:new m(t,this.canvasVideo,this.loader,this.onInteraction),vrcube:new b(t,this.canvas3D,this.loader,this.onInteraction),vrobject:new P(t,this.canvas2D,this.loader,this.onInteraction)},this.widget=this.widgets.image,this.container.addEventListener("mousedown",this.onStart),this.container.addEventListener("mouseenter",this.onEnter),this.container.addEventListener("mousemove",this.onMove),this.container.addEventListener("mouseup",this.onEnd),this.container.addEventListener("touchstart",this.onStart),this.container.addEventListener("touchmove",this.onMove),this.container.addEventListener("touchend",this.onEnd),window.addEventListener("deviceorientation",this.onDeviceOrientation),this.checkResize(),this.loadWidget=n(this.loadWidget,10),this.onResize=n(this.onResize,250)};return I.prototype.destroy=function(){this.container.removeEventListener("mousedown",this.onStart),this.container.removeEventListener("mouseenter",this.onEnter),this.container.removeEventListener("mousemove",this.onMove),this.container.removeEventListener("mouseup",this.onEnd),this.container.removeEventListener("touchstart",this.onStart),this.container.removeEventListener("touchmove",this.onMove),this.container.removeEventListener("touchend",this.onEnd),window.removeEventListener("deviceorientation",this.onDeviceOrientation),this.isDestroyed=!0},I.prototype.load=function(t,i){var n=this,o=Promise.resolve();this.view&&i&&void 0!==i.position&&(o=o.then(function(){return n.widgets[n.view.mode].goto(i.position)})),i&&void 0!==i.animation&&(o=o.then(function(){return n.playAnimation(i.animation)})),o.then(function(){return n.scene=Array.isArray(t)?e(t):[e(t)],n.loadWidget(!1,!(i&&i.animation))}),o.catch(function(){})},I.prototype.setEncoder=function(t){var i=this;this.encoder=e(t);var n=Promise.resolve();(n=n.then(function(){return i.loadWidget(!1,!0)})).catch(function(){})},I.prototype.setParameters=function(t){var i=this;this.parameters=e(t),this.parameters.width=this.resolution.width,this.parameters.height=this.resolution.height;var n=Promise.resolve();(n=n.then(function(){return i.loadWidget(!1,!0)})).catch(function(){})},I.prototype.setView=function(t,i){var n=this,o=Promise.resolve();this.view&&i&&void 0!==i.fromPosition&&(o=o.then(function(){return n.widgets[n.view.mode].goto(i.fromPosition)})),i&&void 0!==i.animation&&(o=o.then(function(){return n.playAnimation(i.animation)})),o.then(function(){return n.view=e(t),n.loadWidget(!0,!(i&&i.animation))}),this.view&&i&&void 0!==i.toPosition&&(o=o.then(function(){return n.widgets[n.view.mode].goto(i.toPosition)})),o.catch(function(){})},I.prototype.playAnimation=function(t){var i=this,e=this.widgets.video;if(!e)return Promise.reject();var n={scene:this.scene,view:{animation:t.name,camera:t.camera,duration:t.duration,loop:t.loop},parameters:this.parameters,encoder:{format:"mp4"}};return n.view.background||(n.view.background="product"),new Promise(function(t,o){e.load(n,!0,!0).then(function(){e.video.addEventListener("ended",function(){t()}),e.show()},function(t){i.options.events.onLoadError(t),o()})})},I.prototype.stopAnimation=function(){var t=this.widgets.video;t&&(t.hide(),this.loadWidget(!1,!0).catch(function(){}))},I.prototype.loadWidget=function(t,i){var e=this;if(!this.scene||!this.view)return Promise.reject();if(!this.parameters.width||!this.parameters.height)return Promise.reject();var n=this.widgets[this.view.mode];if(!n)return Promise.reject();var o={scene:this.scene,view:this.view,parameters:this.parameters,encoder:this.encoder};return o.view.background||(o.view.background="product"),n.load(o,t,i).then(function(){e.widget.hide(),e.widget=n,e.widget.show(),e.widgets.video.hide()},function(t){e.options.events.onLoadError(t)})},I.prototype.checkResize=function(){if(!this.isDestroyed){var t=this.container.offsetWidth,i=this.container.offsetHeight;t===this.containerWidth&&i===this.containerHeight||(this.containerWidth=t,this.containerHeight=i,this.onResize()),this.isDestroyed||requestAnimationFrame(this.checkResize)}},I.prototype.onStart=function(t){this.widget.onStart(t)},I.prototype.onEnter=function(t){this.widget.onEnter(t)},I.prototype.onMove=function(t){this.widget.onMove(t)},I.prototype.onEnd=function(t){this.widget.onEnd(t)},I.prototype.onDeviceOrientation=function(t){this.widget.onDeviceOrientation(t)},I.prototype.onResize=function(){var t=window.devicePixelRatio,i=this.container.offsetWidth*t,e=this.container.offsetHeight*t;this.resolution=r.getStandardResolution(i,e),this.parameters.width=this.resolution.width,this.parameters.height=this.resolution.height,this.canvas2D.resize(i/t,e/t,this.resolution),this.canvas3D.resize(i/t,e/t,this.resolution),this.canvasVideo.resize(i/t,e/t,this.resolution),this.loadWidget(!1,!1).catch(function(){})},I.prototype.onInteraction=function(){for(var t=[],i=arguments.length;i--;)t[i]=arguments[i];this.options.events.onInteraction(t)},I.prototype.onLoadStart=function(){for(var t=[],i=arguments.length;i--;)t[i]=arguments[i];this.container.classList.add("ls-viewer-container-loading"),this.options.events.onLoadStart(t)},I.prototype.onLoadProgress=function(){for(var t=[],i=arguments.length;i--;)t[i]=arguments[i];this.options.events.onLoadProgress(t)},I.prototype.onLoadEnd=function(){for(var t=[],i=arguments.length;i--;)t[i]=arguments[i];this.container.classList.remove("ls-viewer-container-loading"),this.options.events.onLoadEnd(t)},I.prototype.onLoadError=function(){for(var t=[],i=arguments.length;i--;)t[i]=arguments[i];this.options.events.onLoadError(t)},I});
{
"name": "@lumiscaphe/viewer",
"version": "0.5.1",
"version": "0.5.2",
"description": "Lumiscaphe 3D Viewer",

@@ -13,2 +13,3 @@ "main": "dist/index.js",

"dependencies": {
"axios": "^0.17.1",
"lodash.clonedeep": "^4.5.0",

@@ -27,3 +28,3 @@ "lodash.debounce": "^4.0.8",

"rollup": "^0.55.5",
"rollup-plugin-buble": "^0.19.1",
"rollup-plugin-buble": "^0.19.2",
"rollup-plugin-eslint": "^4.0.0",

@@ -30,0 +31,0 @@ "rollup-plugin-glsl": "^1.1.0",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc