@lumiscaphe/viewer 4.0.9 → 4.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Animation.d.ts +7 -7
- package/dist/Basis3.d.ts +10 -10
- package/dist/Canvas2D.d.ts +16 -16
- package/dist/Canvas3D.d.ts +8 -8
- package/dist/Encoder.d.ts +5 -5
- package/dist/EventHelper.d.ts +5 -5
- package/dist/Hotspot.d.ts +14 -14
- package/dist/Inertia.d.ts +14 -14
- package/dist/InertiaPoint.d.ts +6 -6
- package/dist/InteractiveCamera.d.ts +25 -25
- package/dist/InteractivePosition.d.ts +26 -26
- package/dist/Loader.d.ts +28 -28
- package/dist/LoaderDelegate.d.ts +5 -5
- package/dist/Maths.d.ts +10 -10
- package/dist/Options.d.ts +10 -10
- package/dist/Parameters.d.ts +9 -9
- package/dist/Point.d.ts +6 -6
- package/dist/PointOfView.d.ts +12 -12
- package/dist/Position.d.ts +4 -4
- package/dist/Resolution.d.ts +6 -6
- package/dist/Scene.d.ts +13 -13
- package/dist/Size.d.ts +5 -5
- package/dist/Snapshot.d.ts +10 -10
- package/dist/Transition.d.ts +6 -6
- package/dist/Video.d.ts +8 -8
- package/dist/View.d.ts +20 -20
- package/dist/Viewer.d.ts +64 -64
- package/dist/Viewport.d.ts +12 -12
- package/dist/WRAPIv1.d.ts +37 -37
- package/dist/WRAPIv2.d.ts +333 -333
- package/dist/WebRenderStatic.d.ts +9 -9
- package/dist/WebRenderV1.d.ts +16 -16
- package/dist/WebRenderV2.d.ts +20 -20
- package/dist/Widget.d.ts +17 -17
- package/dist/WidgetImage.d.ts +28 -28
- package/dist/WidgetVRCube.d.ts +43 -43
- package/dist/WidgetVRObject.d.ts +37 -37
- package/dist/WidgetVideo.d.ts +26 -26
- package/dist/index.d.ts +16 -16
- package/dist/index.es.js +1 -1
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +11 -11
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/Resolution.ts","../src/Viewport.ts","../src/Canvas2D.ts","../src/Canvas3D.ts","../src/Maths.ts","../src/WebRenderStatic.ts","../src/WebRenderV1.ts","../src/WebRenderV2.ts","../node_modules/tslib/tslib.es6.js","../src/Loader.ts","../src/Video.ts","../src/WidgetImage.ts","../src/WidgetVideo.ts","../src/Point.ts","../src/EventHelper.ts","../src/Basis3.ts","../src/InertiaPoint.ts","../src/Inertia.ts","../src/PointOfView.ts","../src/InteractiveCamera.ts","../src/WidgetVRCube.ts","../src/InteractivePosition.ts","../src/WidgetVRObject.ts","../src/WRAPIv2.ts","../node_modules/style-inject/dist/style-inject.es.js","../src/Viewer.ts"],"sourcesContent":["export class Resolution {\r\n constructor(width, height) {\r\n this.width = width;\r\n this.height = height;\r\n }\r\n get aspect() {\r\n return this.width / this.height;\r\n }\r\n}\r\n","import { Resolution } from './Resolution';\r\nexport class Viewport {\r\n constructor(top, left, width, height) {\r\n this.top = top;\r\n this.left = left;\r\n this.width = width;\r\n this.height = height;\r\n }\r\n static fit(resolution, viewportResolution, fit) {\r\n const aspectRatio = resolution.aspect;\r\n const viewportRatio = viewportResolution.aspect;\r\n let width = 0;\r\n let height = 0;\r\n switch (fit) {\r\n case 'contain':\r\n width = viewportRatio < aspectRatio ? viewportResolution.width : viewportResolution.height * aspectRatio;\r\n height = viewportRatio < aspectRatio ? viewportResolution.width / aspectRatio : viewportResolution.height;\r\n break;\r\n case 'cover':\r\n default:\r\n width = viewportRatio < aspectRatio ? viewportResolution.height * aspectRatio : viewportResolution.width;\r\n height = viewportRatio < aspectRatio ? viewportResolution.height : viewportResolution.width / aspectRatio;\r\n break;\r\n case 'fill':\r\n width = viewportResolution.width;\r\n height = viewportResolution.height;\r\n break;\r\n }\r\n const top = (viewportResolution.height - height) / 2;\r\n const left = (viewportResolution.width - width) / 2;\r\n return new Viewport(top, left, width, height);\r\n }\r\n static getStandardAspectRatio(width, height) {\r\n if (width === 0 || height === 0) {\r\n return 0;\r\n }\r\n const aspectRatio = width / height;\r\n if (width < height) {\r\n const distanceTo34 = Math.abs(3 / 4 - aspectRatio);\r\n const distanceTo916 = Math.abs(9 / 16 - aspectRatio);\r\n return distanceTo34 < distanceTo916 ? 3 / 4 : 9 / 16;\r\n }\r\n const distanceTo43 = Math.abs(4 / 3 - aspectRatio);\r\n const distanceTo169 = Math.abs(16 / 9 - aspectRatio);\r\n return distanceTo43 < distanceTo169 ? 4 / 3 : 16 / 9;\r\n }\r\n static getStandardResolution(width, height) {\r\n if (width === 0 || height === 0) {\r\n return new Resolution(0, 0);\r\n }\r\n const aspectRatio = Viewport.getStandardAspectRatio(width, height);\r\n if (width < height) {\r\n const quality = Viewport.getStandardQuality(Math.max(height * aspectRatio, width));\r\n return new Resolution(Math.round(quality), Math.round(quality / aspectRatio));\r\n }\r\n const quality = Viewport.getStandardQuality(Math.max(width / aspectRatio, height));\r\n return new Resolution(Math.round(quality * aspectRatio), Math.round(quality));\r\n }\r\n static getStandardQuality(height) {\r\n if (height <= 240) {\r\n return 240;\r\n }\r\n if (height <= 360) {\r\n return 360;\r\n }\r\n if (height <= 480) {\r\n return 480;\r\n }\r\n if (height <= 720) {\r\n return 720;\r\n }\r\n return 1080;\r\n }\r\n}\r\n","import { Resolution } from './Resolution';\r\nimport { Viewport } from './Viewport';\r\nexport class Canvas2D {\r\n constructor(fit) {\r\n this.element = document.createElement('canvas');\r\n this.element.classList.add('ls-viewer-canvas');\r\n this.element.style.opacity = '0';\r\n this.element.width = 0;\r\n this.element.height = 0;\r\n this.context = this.element.getContext('2d');\r\n this.backCanvas = document.createElement('canvas');\r\n this.backContext = this.backCanvas.getContext('2d');\r\n this.fit = fit;\r\n }\r\n destroy() {\r\n if (this.requestAnimationId) {\r\n cancelAnimationFrame(this.requestAnimationId);\r\n this.requestAnimationId = undefined;\r\n }\r\n }\r\n show(useDisplay) {\r\n if (useDisplay) {\r\n this.element.style.display = 'block';\r\n }\r\n else {\r\n this.element.style.opacity = '1';\r\n }\r\n }\r\n hide(useDisplay) {\r\n if (useDisplay) {\r\n this.element.style.display = 'none';\r\n }\r\n else {\r\n this.element.style.opacity = '0';\r\n }\r\n }\r\n resize(width, height, pixelRatio) {\r\n this.element.width = width * pixelRatio;\r\n this.element.height = height * pixelRatio;\r\n this.element.style.width = `${width}px`;\r\n this.element.style.height = `${height}px`;\r\n this.backCanvas.width = width * pixelRatio;\r\n this.backCanvas.height = height * pixelRatio;\r\n }\r\n draw(img, fade, speed) {\r\n if (!img) {\r\n return;\r\n }\r\n if (this.requestAnimationId) {\r\n cancelAnimationFrame(this.requestAnimationId);\r\n this.requestAnimationId = undefined;\r\n }\r\n const viewport = Viewport.fit(new Resolution(img.width, img.height), new Resolution(this.element.width, this.element.height), this.fit);\r\n if (fade) {\r\n this.backContext.drawImage(this.element, 0, 0);\r\n this.context.globalAlpha = 0.0;\r\n this.fadeLoop(img, speed || 0);\r\n }\r\n else {\r\n this.context.globalAlpha = 1.0;\r\n this.context.drawImage(img, viewport.left, viewport.top, viewport.width, viewport.height);\r\n }\r\n this.image = img;\r\n }\r\n fadeLoop(img, speed) {\r\n if (this.context.globalAlpha >= 1.0) {\r\n cancelAnimationFrame(this.requestAnimationId);\r\n this.requestAnimationId = undefined;\r\n return;\r\n }\r\n const alpha = Math.min(this.context.globalAlpha + speed, 1.0);\r\n const viewport = Viewport.fit(new Resolution(img.width, img.height), new Resolution(this.element.width, this.element.height), this.fit);\r\n this.context.clearRect(0, 0, this.element.width, this.element.height);\r\n this.context.globalAlpha = 1.0;\r\n this.context.drawImage(this.backCanvas, 0, 0);\r\n this.context.globalAlpha = alpha;\r\n this.context.drawImage(img, viewport.left, viewport.top, viewport.width, viewport.height);\r\n this.requestAnimationId = requestAnimationFrame(() => {\r\n this.fadeLoop(img, speed);\r\n });\r\n }\r\n}\r\n","import * as twgl from 'twgl.js';\r\nexport class Canvas3D {\r\n constructor() {\r\n this.element = document.createElement('canvas');\r\n this.element.classList.add('ls-viewer-canvas');\r\n this.element.style.opacity = '0';\r\n this.element.width = 0;\r\n this.element.height = 0;\r\n this.context = twgl.getContext(this.element, { preserveDrawingBuffer: true });\r\n twgl.setDefaultTextureColor([1, 1, 1, 1]);\r\n }\r\n show() {\r\n this.element.style.opacity = '1';\r\n }\r\n hide() {\r\n this.element.style.opacity = '0';\r\n }\r\n resize(width, height, pixelRatio) {\r\n this.element.width = width * pixelRatio;\r\n this.element.height = height * pixelRatio;\r\n this.element.style.width = `${width}px`;\r\n this.element.style.height = `${height}px`;\r\n }\r\n}\r\n","export class Maths {\r\n static accelerate(v, f) {\r\n const factor = f || 1.5;\r\n return (Math.abs(v) ** factor) * (v > 0 ? 1 : -1);\r\n }\r\n static degreesToRadians(a) {\r\n return a * (Math.PI / 180);\r\n }\r\n static radiansToDegrees(a) {\r\n return a * (180 / Math.PI);\r\n }\r\n static mod(x, y) {\r\n return (x - (y * Math.floor(x / y)));\r\n }\r\n static perspectiveWithFovX(fovX, aspect, near, far, dst) {\r\n const right = Math.tan(fovX / 2.0);\r\n const top = right / aspect;\r\n return this.perspectiveWithLeft(-right, right, -top, top, near, far, dst);\r\n }\r\n static perspectiveWithFovY(fovY, aspect, near, far, dst) {\r\n const top = near * Math.tan(fovY / 2.0);\r\n const right = top * aspect;\r\n return this.perspectiveWithLeft(-right, right, -top, top, near, far, dst);\r\n }\r\n static perspectiveWithLeft(left, right, bottom, top, near, far, dst) {\r\n dst = dst || new Float32Array(16);\r\n const ral = right + left;\r\n const rsl = right - left;\r\n const tab = top + bottom;\r\n const tsb = top - bottom;\r\n const fsn = far - near;\r\n dst[0] = 2 * near / rsl;\r\n dst[1] = 0;\r\n dst[2] = 0;\r\n dst[3] = 0;\r\n dst[4] = 0;\r\n dst[5] = 2 * near / tsb;\r\n dst[6] = 0;\r\n dst[7] = 0;\r\n dst[8] = ral / rsl;\r\n dst[9] = tab / tsb;\r\n dst[10] = -far / fsn;\r\n dst[11] = -1.0;\r\n dst[12] = 0.0;\r\n dst[13] = 0.0;\r\n dst[14] = -far * near / fsn;\r\n dst[15] = 0.0;\r\n return dst;\r\n }\r\n}\r\n","export class WebRenderStatic {\r\n constructor() {\r\n }\r\n async animation(snapshot) {\r\n return snapshot.scene;\r\n }\r\n async image(snapshot) {\r\n return snapshot.scene;\r\n }\r\n async video(snapshot) {\r\n return snapshot.scene;\r\n }\r\n async vrCube(snapshot) {\r\n return snapshot.scene;\r\n }\r\n async vrObject(snapshot) {\r\n return snapshot.scene;\r\n }\r\n}\r\n","export class WebRenderV1 {\r\n constructor(server) {\r\n this.server = server;\r\n }\r\n static buildQuery(request) {\r\n return Object.entries(request).filter(([k, v]) => v !== null && v !== undefined).map(([k, v]) => `${k}=${v}`).join('&');\r\n }\r\n static sceneParameters(snapshot) {\r\n var _a, _b;\r\n const scene = snapshot.scene;\r\n const accessory = scene.length > 1 ? scene.find(p => p.accessory) : null;\r\n const decor = scene.length > 1 ? scene.find(p => p.decor) : null;\r\n const product = scene.find(p => p !== accessory && p !== decor);\r\n return {\r\n databaseId: product.database,\r\n configuration: product === null || product === void 0 ? void 0 : product.configuration,\r\n animations: (_a = product === null || product === void 0 ? void 0 : product.animations) === null || _a === void 0 ? void 0 : _a.join('/'),\r\n accessoryDatabaseId: accessory === null || accessory === void 0 ? void 0 : accessory.database,\r\n decorDatabaseId: decor === null || decor === void 0 ? void 0 : decor.database,\r\n decorDeltaAltitude: (_b = decor === null || decor === void 0 ? void 0 : decor.translation) === null || _b === void 0 ? void 0 : _b.y\r\n };\r\n }\r\n static renderParameters(snapshot) {\r\n const { parameters, view } = snapshot;\r\n return {\r\n background: view.background,\r\n width: parameters.width,\r\n height: parameters.height,\r\n softwareAntialiasing: parameters.antialiasing,\r\n superSampling: parameters.superSampling\r\n };\r\n }\r\n static encoderParameters(snapshot) {\r\n const { encoder } = snapshot;\r\n return {\r\n imageFormat: encoder.format,\r\n imageQuality: encoder.quality\r\n };\r\n }\r\n static async fetch(url) {\r\n return fetch(url).then(response => response.text()).then(responseText => {\r\n const xml = responseText.replace(/&/g, '&');\r\n const matches = xml.match(this.xmlRegex);\r\n if (!matches) {\r\n return Promise.reject();\r\n }\r\n return matches.map(m => m.replace(this.xmlRegex, '$1'));\r\n });\r\n }\r\n async animation(snapshot) {\r\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { animation: snapshot.view.animation, bookmarkSet: snapshot.view.camera.split('/')[0], bookmark: snapshot.view.camera.split('/')[1], frames: snapshot.view.frames, loop: !!snapshot.view.loop }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\r\n const queryString = WebRenderV1.buildQuery(request);\r\n return WebRenderV1.fetch(`${this.server}/ImagesFromAnimation?${queryString}`);\r\n }\r\n async image(snapshot) {\r\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { bookmarkSet: snapshot.view.camera.split('/')[0], bookmark: snapshot.view.camera.split('/')[1] }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\r\n const queryString = WebRenderV1.buildQuery(request);\r\n return Promise.resolve(`${this.server}/ImageFromBookmark?${queryString}`);\r\n }\r\n async video(snapshot) {\r\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { animation: snapshot.view.animation, bookmarkSet: snapshot.view.camera.split('/')[0], bookmark: snapshot.view.camera.split('/')[1], duration: snapshot.view.duration, frames: snapshot.view.frames, loop: !!snapshot.view.loop, reverse: !!snapshot.view.reverse }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\r\n const queryString = WebRenderV1.buildQuery(request);\r\n return Promise.resolve(`${this.server}/ImagesFromAnimation?${queryString}`);\r\n }\r\n async vrCube(snapshot) {\r\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { bookmarkSet: snapshot.view.camera.split('/')[0], bookmark: snapshot.view.camera.split('/')[1] }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\r\n request.width = Math.max(request.width, request.height);\r\n request.height = Math.max(request.width, request.height);\r\n const queryString = WebRenderV1.buildQuery(request);\r\n return WebRenderV1.fetch(`${this.server}/CubeFromBookmark?${queryString}`);\r\n }\r\n async vrObject(snapshot) {\r\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { bookmarkSet: snapshot.view.camera }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\r\n const queryString = WebRenderV1.buildQuery(request);\r\n return WebRenderV1.fetch(`${this.server}/ImagesFromBookmarkSet?${queryString}`);\r\n }\r\n}\r\nWebRenderV1.xmlRegex = /directUrl=\"([^\"]*)\"/g;\r\n","import { __rest } from \"tslib\";\r\nexport class WebRenderV2 {\r\n constructor(server) {\r\n this.server = server;\r\n }\r\n static scene(snapshot) {\r\n return snapshot.scene.map(p => {\r\n const { accessory, decor } = p, pResult = __rest(p, [\"accessory\", \"decor\"]);\r\n return pResult;\r\n });\r\n }\r\n static renderParameters(snapshot) {\r\n return Object.assign(Object.assign({}, snapshot.parameters), { superSampling: snapshot.parameters.superSampling.toString() });\r\n }\r\n static encoder(snapshot) {\r\n switch (snapshot.encoder.format) {\r\n case 'jpeg': return {\r\n jpeg: {\r\n quality: snapshot.encoder.quality\r\n }\r\n };\r\n case 'png': return {\r\n png: {\r\n compression: snapshot.encoder.compression\r\n }\r\n };\r\n case 'webp': return {\r\n webp: {\r\n quality: snapshot.encoder.quality\r\n }\r\n };\r\n }\r\n return {\r\n jpeg: {\r\n quality: 80\r\n }\r\n };\r\n }\r\n static async fetchFrame(url, body) {\r\n return fetch(url, { method: 'POST', body: JSON.stringify(body) }).then(response => response.json()).then((data) => {\r\n return data.url;\r\n });\r\n }\r\n static async fetchFrameArray(url, body) {\r\n return fetch(url, { method: 'POST', body: JSON.stringify(body) }).then(response => response.json()).then((data) => {\r\n return data.map(f => f.url);\r\n });\r\n }\r\n static async fetchHotspots(url, body) {\r\n return fetch(url, { method: 'POST', body: JSON.stringify(body) }).then(response => response.json()).then((data) => {\r\n return data;\r\n });\r\n }\r\n static async fetchHotspotsArray(url, body) {\r\n return fetch(url, { method: 'POST', body: JSON.stringify(body) }).then(response => response.json()).then((data) => {\r\n return data;\r\n });\r\n }\r\n async image(snapshot) {\r\n const body = {\r\n scene: WebRenderV2.scene(snapshot),\r\n mode: {\r\n image: {\r\n camera: snapshot.view.camera\r\n }\r\n },\r\n renderParameters: WebRenderV2.renderParameters(snapshot),\r\n encoder: WebRenderV2.encoder(snapshot)\r\n };\r\n return WebRenderV2.fetchFrame(`${this.server}/Snapshot`, body);\r\n }\r\n async vrCube(snapshot) {\r\n const body = {\r\n scene: WebRenderV2.scene(snapshot),\r\n mode: {\r\n vrCube: {\r\n camera: snapshot.view.camera\r\n }\r\n },\r\n renderParameters: WebRenderV2.renderParameters(snapshot),\r\n encoder: WebRenderV2.encoder(snapshot)\r\n };\r\n body.renderParameters.width = Math.max(body.renderParameters.width, body.renderParameters.height);\r\n body.renderParameters.height = Math.max(body.renderParameters.width, body.renderParameters.height);\r\n return WebRenderV2.fetchFrameArray(`${this.server}/Snapshot`, body);\r\n }\r\n async vrObject(snapshot) {\r\n let mode;\r\n if (snapshot.view.cameraGroup) {\r\n mode = {\r\n images: {\r\n cameraGroup: snapshot.view.cameraGroup\r\n }\r\n };\r\n }\r\n else {\r\n if (snapshot.view.frames) {\r\n mode = {\r\n vrObject: {\r\n camera: snapshot.view.camera,\r\n frames: snapshot.view.frames\r\n }\r\n };\r\n }\r\n else {\r\n mode = {\r\n vrObject: {\r\n camera: snapshot.view.camera,\r\n panFrames: snapshot.view.panFrames || 1,\r\n panFrom: snapshot.view.panFrom || 0,\r\n panTo: snapshot.view.panTo || 0,\r\n panLoop: snapshot.view.panLoop || false,\r\n tiltFrames: snapshot.view.tiltFrames || 1,\r\n tiltFrom: snapshot.view.tiltFrom || 0,\r\n tiltTo: snapshot.view.tiltTo || 0,\r\n tiltLoop: snapshot.view.tiltLoop || false\r\n }\r\n };\r\n }\r\n }\r\n const body = {\r\n scene: WebRenderV2.scene(snapshot),\r\n mode,\r\n renderParameters: WebRenderV2.renderParameters(snapshot),\r\n encoder: WebRenderV2.encoder(snapshot)\r\n };\r\n return WebRenderV2.fetchFrameArray(`${this.server}/Snapshot`, body);\r\n }\r\n async animation(snapshot) {\r\n const body = {\r\n scene: WebRenderV2.scene(snapshot),\r\n mode: {\r\n animation: {\r\n id: snapshot.view.animation,\r\n camera: snapshot.view.camera,\r\n fps: snapshot.view.fps,\r\n }\r\n },\r\n renderParameters: WebRenderV2.renderParameters(snapshot),\r\n encoder: WebRenderV2.encoder(snapshot)\r\n };\r\n return WebRenderV2.fetchFrameArray(`${this.server}/Snapshot`, body);\r\n }\r\n async imageHotspots(snapshot, tags) {\r\n const body = {\r\n scene: WebRenderV2.scene(snapshot),\r\n mode: {\r\n image: {\r\n camera: snapshot.view.camera\r\n }\r\n },\r\n renderParameters: WebRenderV2.renderParameters(snapshot),\r\n tags: tags\r\n };\r\n return await WebRenderV2.fetchHotspots(`${this.server}/Hotspot`, body);\r\n }\r\n async vrCubeHotspots(snapshot, tags) {\r\n const body = {\r\n scene: WebRenderV2.scene(snapshot),\r\n mode: {\r\n vrCube: {\r\n camera: snapshot.view.camera\r\n }\r\n },\r\n renderParameters: WebRenderV2.renderParameters(snapshot),\r\n tags\r\n };\r\n body.renderParameters.width = Math.max(body.renderParameters.width, body.renderParameters.height);\r\n body.renderParameters.height = Math.max(body.renderParameters.width, body.renderParameters.height);\r\n return await WebRenderV2.fetchHotspotsArray(`${this.server}/Hotspot`, body);\r\n }\r\n async vrObjectHotspots(snapshot, tags) {\r\n let mode;\r\n if (snapshot.view.cameraGroup) {\r\n mode = {\r\n images: {\r\n cameraGroup: snapshot.view.cameraGroup\r\n }\r\n };\r\n }\r\n else {\r\n if (snapshot.view.frames) {\r\n mode = {\r\n vrObject: {\r\n camera: snapshot.view.camera,\r\n frames: snapshot.view.frames\r\n }\r\n };\r\n }\r\n else {\r\n mode = {\r\n vrObject: {\r\n camera: snapshot.view.camera,\r\n panFrames: snapshot.view.panFrames || 1,\r\n panFrom: snapshot.view.panFrom || 0,\r\n panTo: snapshot.view.panTo || 0,\r\n panLoop: snapshot.view.panLoop || false,\r\n tiltFrames: snapshot.view.tiltFrames || 1,\r\n tiltFrom: snapshot.view.tiltFrom || 0,\r\n tiltTo: snapshot.view.tiltTo || 0,\r\n tiltLoop: snapshot.view.tiltLoop || false\r\n }\r\n };\r\n }\r\n }\r\n const body = {\r\n scene: WebRenderV2.scene(snapshot),\r\n mode,\r\n renderParameters: WebRenderV2.renderParameters(snapshot),\r\n tags\r\n };\r\n return await WebRenderV2.fetchHotspotsArray(`${this.server}/Hotspot`, body);\r\n }\r\n}\r\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Maths } from './Maths';\r\nimport { WebRenderStatic } from './WebRenderStatic';\r\nimport { WebRenderV1 } from './WebRenderV1';\r\nimport { WebRenderV2 } from './WebRenderV2';\r\nexport class Loader {\r\n constructor(server, api, delegate) {\r\n switch (api) {\r\n case 'static':\r\n this.webrender = new WebRenderStatic();\r\n break;\r\n case 'v1':\r\n this.webrender = new WebRenderV1(server);\r\n break;\r\n case 'v2':\r\n this.webrender = new WebRenderV2(server);\r\n break;\r\n default:\r\n this.webrender = new WebRenderV1(server);\r\n break;\r\n }\r\n this.delegate = delegate;\r\n this.loadingId = 0;\r\n this.loaded = 0;\r\n this.total = 0;\r\n this.onLoadStart = delegate && delegate.onLoadStart ? delegate.onLoadStart : (() => { });\r\n this.onLoadProgress = delegate && delegate.onLoadProgress ? delegate.onLoadProgress : (() => { });\r\n this.onLoadEnd = delegate && delegate.onLoadEnd ? delegate.onLoadEnd : (() => { });\r\n }\r\n get progress() {\r\n return this.total ? this.loaded / this.total : 0;\r\n }\r\n async loadImageSnapshot(snapshot) {\r\n this.loadingId += 1;\r\n this.loaded = 0;\r\n this.total = 1;\r\n this.onLoadStart(this.progress);\r\n const { loadingId } = this;\r\n return this.webrender.image(snapshot).then(src => (this.loadImage(src, loadingId))).then(img => {\r\n this.onLoadEnd(this.progress);\r\n return img;\r\n });\r\n }\r\n async loadVideoSnapshot(video, snapshot) {\r\n this.loadingId += 1;\r\n this.loaded = 0;\r\n this.total = 1;\r\n this.onLoadStart(this.progress);\r\n const { loadingId } = this;\r\n return this.webrender.video(snapshot).then(src => (this.loadVideo(video, src, !!snapshot.view.loop, loadingId))).then(() => {\r\n this.onLoadEnd(this.progress);\r\n return video;\r\n });\r\n }\r\n async loadVRCubeSnapshot(snapshot) {\r\n this.loadingId += 1;\r\n this.loaded = 0;\r\n this.total = 0;\r\n this.onLoadStart(this.progress);\r\n const { loadingId } = this;\r\n return this.webrender.vrCube(snapshot).then(srcs => {\r\n this.total = srcs.length;\r\n const promises = srcs.map(src => this.loadImage(src, loadingId));\r\n return Promise.all(promises);\r\n }).then(imgs => {\r\n this.onLoadEnd(this.progress);\r\n return imgs;\r\n });\r\n }\r\n async loadVRObjectSnapshot(snapshot, position) {\r\n var _a;\r\n this.loadingId += 1;\r\n this.loaded = 0;\r\n this.total = 0;\r\n this.onLoadStart(this.progress);\r\n const { loadingId } = this;\r\n if (snapshot.view.animation) {\r\n if (((_a = snapshot.encoder) === null || _a === void 0 ? void 0 : _a.format) === 'mp4') {\r\n return this.webrender.video(snapshot).then(src => {\r\n return this.loadVideoFrames(src, snapshot.view.frames, 30, loadingId);\r\n });\r\n }\r\n else {\r\n return this.webrender.animation(snapshot).then(srcs => {\r\n return this.loadImageFrames(srcs, snapshot.view.loop, position, loadingId);\r\n });\r\n }\r\n }\r\n else {\r\n return this.webrender.vrObject(snapshot).then(srcs => {\r\n return this.loadImageFrames(srcs, snapshot.view.loop, position, loadingId);\r\n });\r\n }\r\n }\r\n async loadImage(src, loadingId) {\r\n const image = new Image();\r\n image.crossOrigin = location.protocol === 'file:' && !Loader.isValidHttpUrl(src) ? null : 'anonymous';\r\n const promise = new Promise((resolve, reject) => {\r\n image.addEventListener('load', () => {\r\n if (loadingId !== this.loadingId)\r\n return;\r\n this.loaded += 1;\r\n this.onLoadProgress(this.progress);\r\n resolve(image);\r\n }, { once: true });\r\n image.addEventListener('error', (e) => {\r\n if (loadingId !== this.loadingId)\r\n return;\r\n reject(`${e.type} : ${src}`);\r\n }, { once: true });\r\n });\r\n image.src = src;\r\n return promise;\r\n }\r\n loadImageFrames(srcs, loop, position, loadingId) {\r\n this.total = srcs.length;\r\n const promises = new Array(srcs.length);\r\n const start = position || 0;\r\n for (let i = 0, n = srcs.length; i < n; i += 1) {\r\n const step = Math.ceil(i / 2) * (i % 2 === 0 ? 1 : -1);\r\n const index = loop ? Maths.mod(start + step, n) : i;\r\n promises[index] = this.loadImage(srcs[index], loadingId);\r\n }\r\n Promise.all(promises).then(() => this.onLoadEnd(this.progress)).catch(() => { });\r\n return promises;\r\n }\r\n async loadVideo(video, src, loop, loadingId) {\r\n video.loop = loop;\r\n const promise = new Promise((resolve, reject) => {\r\n video.addEventListener('canplaythrough', () => {\r\n if (loadingId !== this.loadingId)\r\n return;\r\n this.loaded += 1;\r\n this.onLoadProgress(this.progress);\r\n resolve();\r\n }, { once: true });\r\n video.addEventListener('error', e => {\r\n if (loadingId !== this.loadingId)\r\n return;\r\n reject(`${e.type} : ${src}`);\r\n }, { once: true });\r\n });\r\n video.src = src;\r\n video.load();\r\n return promise;\r\n }\r\n async loadVideoFrame(video, fps, frames, i, loadingId) {\r\n let count = 0;\r\n return new Promise((resolve, reject) => {\r\n const seeked = () => {\r\n if (loadingId !== this.loadingId)\r\n return;\r\n if (count !== i) {\r\n count += 1;\r\n return;\r\n }\r\n video.removeEventListener('seeked', seeked);\r\n const canvas = document.createElement('canvas');\r\n canvas.width = video.videoWidth;\r\n canvas.height = video.videoHeight;\r\n const context = canvas.getContext('2d');\r\n context.drawImage(video, 0, 0);\r\n const image = new Image();\r\n image.src = canvas.toDataURL();\r\n resolve(image);\r\n this.loaded += 1;\r\n this.onLoadProgress(this.progress);\r\n if (i !== frames - 1) {\r\n video.currentTime += 1 / fps;\r\n }\r\n };\r\n video.addEventListener('seeked', seeked);\r\n video.addEventListener('error', e => {\r\n if (loadingId !== this.loadingId)\r\n return;\r\n reject(e);\r\n }, { once: true });\r\n });\r\n }\r\n loadVideoFrames(src, frames, fps, loadingId) {\r\n this.total = frames;\r\n const promises = new Array(frames);\r\n const video = document.createElement('video');\r\n for (let i = 0, n = frames; i < n; i += 1) {\r\n promises[i] = this.loadVideoFrame(video, fps, frames, i, loadingId);\r\n }\r\n video.addEventListener('canplaythrough', () => {\r\n if (loadingId !== this.loadingId)\r\n return;\r\n video.currentTime = (1 / fps) / 2;\r\n }, { once: true });\r\n video.src = src;\r\n video.load();\r\n Promise.all(promises).then(() => this.onLoadEnd(this.progress)).catch(() => { });\r\n return promises;\r\n }\r\n async loadImageHotspots(snapshot, tags) {\r\n if (!(this.webrender instanceof WebRenderV2)) {\r\n return Promise.reject(new Error('Hotspots only available with api V2'));\r\n }\r\n return await this.webrender.imageHotspots(snapshot, tags);\r\n }\r\n async loadVRCubeHotspots(snapshot, tags) {\r\n if (!(this.webrender instanceof WebRenderV2)) {\r\n return Promise.reject(new Error('Hotspots only available with api V2'));\r\n }\r\n return await this.webrender.vrCubeHotspots(snapshot, tags);\r\n }\r\n async loadVRObjectHotspots(snapshot, tags) {\r\n if (!(this.webrender instanceof WebRenderV2)) {\r\n return Promise.reject(new Error('Hotspots only available with api V2'));\r\n }\r\n return await this.webrender.vrObjectHotspots(snapshot, tags);\r\n }\r\n onLoadStart(progress) {\r\n if (this.delegate) {\r\n this.delegate.onLoadStart(progress);\r\n }\r\n }\r\n onLoadProgress(progress) {\r\n if (this.delegate) {\r\n this.delegate.onLoadProgress(progress);\r\n }\r\n }\r\n onLoadEnd(progress) {\r\n if (this.delegate) {\r\n this.delegate.onLoadEnd(progress);\r\n }\r\n }\r\n static isValidHttpUrl(str) {\r\n let url;\r\n try {\r\n url = new URL(str);\r\n }\r\n catch (_) {\r\n return false;\r\n }\r\n return url.protocol === \"http:\" || url.protocol === \"https:\";\r\n }\r\n}\r\n","import { Resolution } from './Resolution';\r\nimport { Viewport } from './Viewport';\r\nexport class Video {\r\n constructor() {\r\n this.element = document.createElement('video');\r\n this.element.classList.add('ls-viewer-video');\r\n this.element.style.opacity = '0';\r\n this.element.width = 0;\r\n this.element.height = 0;\r\n this.element.setAttribute('muted', '');\r\n this.element.setAttribute('playsinline', '');\r\n this.element.setAttribute('preload', 'auto');\r\n }\r\n show() {\r\n this.element.style.opacity = '1';\r\n }\r\n hide() {\r\n this.element.style.opacity = '0';\r\n }\r\n resize(width, height, resolution, fit) {\r\n const viewport = Viewport.fit(resolution, new Resolution(width, height), fit);\r\n this.element.style.top = `${viewport.top}px`;\r\n this.element.style.left = `${viewport.left}px`;\r\n this.element.style.width = `${viewport.width}px`;\r\n this.element.style.height = `${viewport.height}px`;\r\n if (resolution.width !== this.element.width || resolution.height !== this.element.height) {\r\n this.element.width = resolution.width;\r\n this.element.height = resolution.height;\r\n }\r\n }\r\n}\r\n","export class WidgetImage {\r\n constructor(container, canvas, loader) {\r\n this.container = container;\r\n this.canvas = canvas;\r\n this.loader = loader;\r\n this.hotspots = [];\r\n }\r\n destroy() { }\r\n show() {\r\n this.canvas.show(false);\r\n this.container.classList.add('ls-viewer-container-image');\r\n }\r\n hide() {\r\n this.canvas.hide(false);\r\n this.container.classList.remove('ls-viewer-container-image');\r\n }\r\n async load(snapshot, tags, reset, fade) {\r\n let promise = Promise.resolve();\r\n const snapshotHash = JSON.stringify(snapshot);\r\n if (snapshotHash === this.snapshotHash && this.image) {\r\n promise = promise.then(() => this.canvas.draw(this.image, fade, 0.05));\r\n }\r\n else {\r\n promise = promise.then(() => this.loader.loadImageSnapshot(snapshot).then(image => {\r\n this.canvas.draw(image, fade, 0.05);\r\n this.image = image;\r\n }));\r\n }\r\n const tagsHash = JSON.stringify(tags);\r\n if (tags.length && (snapshotHash !== this.snapshotHash || tagsHash !== this.tagsHash)) {\r\n promise = promise.then(() => this.loader.loadImageHotspots(snapshot, tags).then(hotspots => {\r\n this.hotspots = hotspots;\r\n }));\r\n }\r\n this.snapshotHash = snapshotHash;\r\n this.tagsHash = tagsHash;\r\n return promise.then(() => Promise.resolve(this.hotspots));\r\n }\r\n snapshot(type, quality) {\r\n return this.canvas.element.toDataURL(type, quality);\r\n }\r\n onMouseDown(e) {\r\n }\r\n onMouseMove(e) {\r\n }\r\n onMouseUp(e) {\r\n }\r\n onMouseEnter(e) {\r\n }\r\n onTouchStart(e) {\r\n }\r\n onTouchMove(e) {\r\n }\r\n onTouchEnd(e) {\r\n }\r\n onDeviceOrientation(e) {\r\n }\r\n}\r\n","export class WidgetVideo {\r\n constructor(container, video, loader) {\r\n this.container = container;\r\n this.loader = loader;\r\n this.video = video;\r\n }\r\n destroy() { }\r\n show() {\r\n this.video.show();\r\n this.container.classList.add('ls-viewer-container-video');\r\n }\r\n hide() {\r\n this.video.hide();\r\n this.container.classList.remove('ls-viewer-container-video');\r\n }\r\n async load(snapshot) {\r\n const hash = JSON.stringify(snapshot);\r\n if (hash === this.hash) {\r\n this.video.element.load();\r\n return Promise.resolve([]);\r\n }\r\n this.hash = hash;\r\n return this.loader.loadVideoSnapshot(this.video.element, snapshot).then(() => Promise.resolve([]));\r\n }\r\n snapshot(type, quality) {\r\n return 'data:image/gif;base64,R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';\r\n }\r\n async play() {\r\n return new Promise((resolve, reject) => {\r\n this.video.element.addEventListener('ended', () => {\r\n resolve();\r\n }, { once: true });\r\n this.video.element.play().catch(reject);\r\n this.show();\r\n });\r\n }\r\n onMouseDown(e) {\r\n }\r\n onMouseMove(e) {\r\n }\r\n onMouseUp(e) {\r\n }\r\n onMouseEnter(e) {\r\n }\r\n onTouchStart(e) {\r\n }\r\n onTouchMove(e) {\r\n }\r\n onTouchEnd(e) {\r\n }\r\n onDeviceOrientation(e) {\r\n }\r\n}\r\n","export class Point {\r\n constructor(x, y) {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n clone() {\r\n return new Point(this.x, this.y);\r\n }\r\n}\r\n","import { Point } from './Point';\r\nexport class EventHelper {\r\n static pointFromMouseEvent(e) {\r\n return new Point(e.screenX, e.screenY);\r\n }\r\n static pointFromTouchEvent(e) {\r\n const touch = e.targetTouches[0] || e.changedTouches[0];\r\n return new Point(touch.screenX, touch.screenY);\r\n }\r\n}\r\n","import { m4, v3 } from 'twgl.js';\r\nexport class Basis3 {\r\n constructor(...args) {\r\n if (args.length === 3) {\r\n ({ 0: this.u, 1: this.v, 2: this.o } = args);\r\n this.w = v3.cross(this.u, this.v);\r\n }\r\n else if (args.length === 4) {\r\n ({ 0: this.u, 1: this.v, 2: this.w, 3: this.o } = args);\r\n }\r\n else {\r\n this.u = [1, 0, 0];\r\n this.v = [0, 1, 0];\r\n this.w = [0, 0, 1];\r\n this.o = [0, 0, 0];\r\n }\r\n }\r\n get localToGlobalMatrix() {\r\n const X = [this.u[0], this.u[1], this.u[2], 0.0];\r\n const Y = [this.v[0], this.v[1], this.v[2], 0.0];\r\n const Z = [this.w[0], this.w[1], this.w[2], 0.0];\r\n const W = [this.o[0], this.o[1], this.o[2], 1.0];\r\n return [...X, ...Y, ...Z, ...W];\r\n }\r\n get globalToLocalMatrix() {\r\n return m4.inverse(this.localToGlobalMatrix);\r\n }\r\n}\r\n","export class InertiaPoint {\r\n constructor(x, y, time) {\r\n this.x = x;\r\n this.y = y;\r\n this.time = time;\r\n }\r\n}\r\n","import { InertiaPoint } from './InertiaPoint';\r\nimport { Point } from './Point';\r\nexport class Inertia {\r\n constructor(onMotion) {\r\n this.points = [];\r\n this.onMotion = onMotion;\r\n this.lastPoint = new Point(0.0, 0.0);\r\n this.velocity = new Point(0.0, 0.0);\r\n this.loop = this.loop.bind(this);\r\n }\r\n destroy() {\r\n if (this.animationFrameId) {\r\n cancelAnimationFrame(this.animationFrameId);\r\n this.animationFrameId = undefined;\r\n }\r\n }\r\n track(point) {\r\n const time = Date.now();\r\n this.points = this.points.filter(p => time - p.time <= 100);\r\n this.points.push(new InertiaPoint(point.x, point.y, time));\r\n this.lastPoint = point;\r\n }\r\n start() {\r\n if (this.points.length === 0) {\r\n return;\r\n }\r\n const firstPoint = this.points[0];\r\n const lastPoint = this.points[this.points.length - 1];\r\n const dx = lastPoint.x - firstPoint.x;\r\n const dy = lastPoint.y - firstPoint.y;\r\n const dt = lastPoint.time - firstPoint.time;\r\n this.velocity = new Point(dt === 0 ? 0 : dx / (dt / 15), dt === 0 ? 0 : dy / (dt / 15));\r\n if (this.animationFrameId) {\r\n cancelAnimationFrame(this.animationFrameId);\r\n this.animationFrameId = undefined;\r\n }\r\n this.animationFrameId = requestAnimationFrame(this.loop);\r\n }\r\n stop() {\r\n if (this.animationFrameId) {\r\n cancelAnimationFrame(this.animationFrameId);\r\n this.animationFrameId = undefined;\r\n }\r\n this.points = [];\r\n }\r\n loop() {\r\n if ((Math.abs(this.velocity.x) < 1 && Math.abs(this.velocity.y) < 1)) {\r\n this.animationFrameId = undefined;\r\n this.points = [];\r\n return;\r\n }\r\n this.lastPoint.x += this.velocity.x;\r\n this.lastPoint.y += this.velocity.y;\r\n this.velocity.x *= 0.9;\r\n this.velocity.y *= 0.9;\r\n this.onMotion(this.lastPoint.clone());\r\n this.animationFrameId = requestAnimationFrame(this.loop);\r\n }\r\n}\r\n","import { m4, v3 } from 'twgl.js';\r\nexport class PointOfView {\r\n constructor(target, eye, up) {\r\n this.target = v3.copy(target);\r\n this.eye = v3.copy(eye);\r\n this.up = v3.copy(up);\r\n }\r\n get viewVector() {\r\n return v3.subtract(this.target, this.eye);\r\n }\r\n get rightVector() {\r\n return v3.normalize(v3.cross(this.viewVector, this.up));\r\n }\r\n get viewMatrix() {\r\n return m4.inverse(m4.lookAt(this.eye, this.target, this.up));\r\n }\r\n clone() {\r\n return new PointOfView(v3.copy(this.target), v3.copy(this.eye), v3.copy(this.up));\r\n }\r\n}\r\nPointOfView.default = new PointOfView([0.0, 0.0, 0.0], [2.0, 2.0, 2.0], [0.0, 1.0, 0.0]);\r\n","import { m4, v3 } from 'twgl.js';\r\nimport { Basis3 } from './Basis3';\r\nimport { Inertia } from './Inertia';\r\nimport { Maths } from './Maths';\r\nimport { Point } from './Point';\r\nimport { PointOfView } from './PointOfView';\r\nexport class InteractiveCamera {\r\n constructor(pov, fov, onMotion) {\r\n this.isStarted = false;\r\n this.pov = pov;\r\n this.fov = Maths.degreesToRadians(fov);\r\n this.orientationMatrix = m4.identity();\r\n this.inertia = new Inertia(this.motion.bind(this));\r\n this.onMotion = onMotion;\r\n this.initPov = this.pov;\r\n this.initFov = this.fov;\r\n this.initOrientation = Maths.degreesToRadians(window.orientation) || 0;\r\n this.startPov = new PointOfView([0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0]);\r\n this.startSize = { width: 0.0, height: 0.0 };\r\n this.previousPoint = new Point(0.0, 0.0);\r\n }\r\n destroy() {\r\n this.inertia.destroy();\r\n }\r\n get orientedPov() {\r\n const viewVector = v3.normalize(v3.cross(this.pov.up, this.pov.target));\r\n const headBasis = new Basis3(viewVector, [0.0, 1.0, 0.0], this.pov.eye);\r\n const matrix = m4.identity();\r\n m4.multiply(matrix, headBasis.localToGlobalMatrix, matrix);\r\n m4.multiply(matrix, this.orientationMatrix, matrix);\r\n m4.multiply(matrix, headBasis.globalToLocalMatrix, matrix);\r\n const target = m4.transformDirection(matrix, this.pov.target);\r\n const eye = this.pov.eye;\r\n const up = m4.transformDirection(matrix, this.pov.up);\r\n return new PointOfView(target, eye, up);\r\n }\r\n reset() {\r\n this.pov = this.initPov.clone();\r\n this.fov = this.initFov;\r\n }\r\n start(point, size) {\r\n this.isStarted = true;\r\n this.startPov = this.pov;\r\n this.startSize = size;\r\n this.previousPoint = point;\r\n this.inertia.stop();\r\n }\r\n motion(point) {\r\n if (this.isStarted) {\r\n this.inertia.track(point);\r\n }\r\n const delta = {\r\n x: point.x - this.previousPoint.x,\r\n y: point.y - this.previousPoint.y,\r\n };\r\n const dx = (Maths.accelerate(delta.x, 1.3) / this.startSize.width) * 0.2 * Math.PI * 1.5;\r\n const dy = (Maths.accelerate(delta.y, 1.3) / this.startSize.height) * 0.2 * Math.PI;\r\n const rotationMatrix = m4.multiply(m4.rotationY(-dx), m4.rotationX(-dy));\r\n const viewVector = v3.normalize(v3.cross(this.pov.up, this.pov.target));\r\n const headBasis = new Basis3(viewVector, [0.0, 1.0, 0.0], this.pov.eye);\r\n const headMatrix = m4.identity();\r\n m4.multiply(headMatrix, headBasis.localToGlobalMatrix, headMatrix);\r\n m4.multiply(headMatrix, rotationMatrix, headMatrix);\r\n m4.multiply(headMatrix, headBasis.globalToLocalMatrix, headMatrix);\r\n const target = m4.transformPoint(headMatrix, this.pov.target);\r\n const up = m4.transformDirection(headMatrix, this.pov.up);\r\n if (v3.cross(up, [0, 0, 1])[0] >= 0) {\r\n this.pov.target = target;\r\n this.pov.up = up;\r\n }\r\n this.previousPoint = point;\r\n this.onMotion();\r\n }\r\n end(point, inertia) {\r\n this.isStarted = false;\r\n if (inertia) {\r\n this.inertia.track(point);\r\n this.inertia.start();\r\n }\r\n }\r\n orientation(alpha, beta, gamma) {\r\n const orientation = Maths.degreesToRadians(window.orientation) || 0;\r\n const alphaRadians = Maths.degreesToRadians(alpha);\r\n const betaRadians = Maths.degreesToRadians(-beta);\r\n const gammaRadians = Maths.degreesToRadians(-gamma);\r\n const matrix = m4.rotationX(Maths.degreesToRadians(90));\r\n m4.rotateZ(matrix, this.initOrientation, matrix);\r\n m4.rotateZ(matrix, alphaRadians, matrix);\r\n m4.rotateX(matrix, betaRadians, matrix);\r\n m4.rotateY(matrix, gammaRadians, matrix);\r\n m4.rotateZ(matrix, -orientation, matrix);\r\n this.orientationMatrix = matrix;\r\n this.onMotion();\r\n }\r\n}\r\n","import * as twgl from 'twgl.js';\r\nimport { m4, v3 } from 'twgl.js';\r\nimport { EventHelper } from './EventHelper';\r\nimport { InteractiveCamera } from './InteractiveCamera';\r\nimport { Maths } from './Maths';\r\nimport { PointOfView } from './PointOfView';\r\nimport { Viewport } from './Viewport';\r\nimport WidgetVRCubeFragmentShader from './WidgetVRCube.frag';\r\nimport WidgetVRCubeVertexShader from './WidgetVRCube.vert';\r\nexport class WidgetVRCube {\r\n constructor(container, canvas, loader, onInteraction) {\r\n this.container = container;\r\n this.canvas = canvas;\r\n this.loader = loader;\r\n this.images = [];\r\n this.hotspotsList = [[]];\r\n const pov = new PointOfView([0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0]);\r\n const fov = 60;\r\n const rotationMatrix = m4.rotationX(Maths.degreesToRadians(15));\r\n m4.transformDirection(rotationMatrix, pov.target, pov.target);\r\n m4.transformDirection(rotationMatrix, pov.up, pov.up);\r\n this.interaction = new InteractiveCamera(pov, fov, () => {\r\n this.animationFrameId = requestAnimationFrame(this.render);\r\n this.onInteraction({\r\n pov: this.interaction.pov.clone(),\r\n fov: this.interaction.fov\r\n });\r\n });\r\n this.onInteraction = onInteraction;\r\n this.gl = this.canvas.context;\r\n this.programInfo = twgl.createProgramInfo(this.gl, [`${WidgetVRCubeVertexShader}\\n`, `${WidgetVRCubeFragmentShader}\\n`]);\r\n this.quad = twgl.primitives.createXYQuadBufferInfo(this.gl);\r\n this.uniforms = {\r\n u_matrix: m4.identity(),\r\n u_mix: 0.0,\r\n u_texture_back: twgl.createTexture(this.gl, {\r\n target: this.gl.TEXTURE_CUBE_MAP,\r\n minMag: this.gl.LINEAR,\r\n width: 1,\r\n height: 1,\r\n }),\r\n u_texture: twgl.createTexture(this.gl, {\r\n target: this.gl.TEXTURE_CUBE_MAP,\r\n minMag: this.gl.LINEAR,\r\n width: 1,\r\n height: 1,\r\n }),\r\n };\r\n this.render = this.render.bind(this);\r\n }\r\n destroy() {\r\n this.interaction.destroy();\r\n if (this.animationFrameId) {\r\n cancelAnimationFrame(this.animationFrameId);\r\n this.animationFrameId = undefined;\r\n }\r\n }\r\n show() {\r\n this.canvas.show();\r\n this.container.classList.add('ls-viewer-container-vrcube');\r\n }\r\n hide() {\r\n this.canvas.hide();\r\n this.container.classList.remove('ls-viewer-container-vrcube');\r\n }\r\n get pov() {\r\n return this.interaction.pov;\r\n }\r\n set pov(pov) {\r\n if (this.interaction.pov.eye.every((v, i) => v === pov.eye[i])\r\n && this.interaction.pov.target.every((v, i) => v === pov.target[i])\r\n && this.interaction.pov.up.every((v, i) => v === pov.up[i])) {\r\n return;\r\n }\r\n this.interaction.pov = pov.clone();\r\n this.animationFrameId = requestAnimationFrame(this.render);\r\n }\r\n get fov() {\r\n return Maths.radiansToDegrees(this.interaction.fov);\r\n }\r\n set fov(fov) {\r\n if (this.interaction.fov === fov) {\r\n return;\r\n }\r\n this.interaction.fov = Maths.degreesToRadians(fov);\r\n this.animationFrameId = requestAnimationFrame(this.render);\r\n }\r\n get hotspots() {\r\n const result = [];\r\n this.hotspotsList.flat();\r\n const width = this.canvas.element.clientWidth;\r\n const height = this.canvas.element.clientHeight;\r\n const modelViewProjectionMatrix = m4.inverse(this.modelViewProjectionMatrix);\r\n this.hotspotsList.forEach((hotspots, i) => {\r\n hotspots.forEach(hotspot => {\r\n const s = hotspot.position2D.x / this.images[0].width;\r\n const t = hotspot.position2D.y / this.images[0].height;\r\n let rx = 0;\r\n let ry = 0;\r\n let rz = 0;\r\n switch (i) {\r\n case 0:\r\n if (this.pov.target[2] < 0) {\r\n return;\r\n }\r\n rx = (2 * s - 1);\r\n ry = (2 * t - 1) * -1;\r\n rz = 1;\r\n break;\r\n case 1:\r\n if (this.pov.target[0] < 0) {\r\n return;\r\n }\r\n rx = 1;\r\n ry = (2 * t - 1) * -1;\r\n rz = (1 - 2 * s);\r\n break;\r\n case 2:\r\n if (this.pov.target[2] > 0) {\r\n return;\r\n }\r\n rx = (1 - 2 * s);\r\n ry = (2 * t - 1) * -1;\r\n rz = -1;\r\n break;\r\n case 3:\r\n if (this.pov.target[0] > 0) {\r\n return;\r\n }\r\n rx = -1;\r\n ry = (2 * t - 1) * -1;\r\n rz = (2 * s - 1);\r\n break;\r\n case 4:\r\n if (this.pov.target[1] < 0) {\r\n return;\r\n }\r\n rx = (2 * s - 1);\r\n ry = 1;\r\n rz = (2 * t - 1);\r\n break;\r\n case 5:\r\n if (this.pov.target[1] > 0) {\r\n return;\r\n }\r\n rx = (2 * s - 1);\r\n ry = -1;\r\n rz = (2 * t - 1) * -1;\r\n break;\r\n }\r\n const point3D = v3.normalize([rx, ry, rz]);\r\n const point2D = m4.transformPoint(modelViewProjectionMatrix, point3D);\r\n const position2D = {\r\n x: width - 0.5 * width * (point2D[0] + 1),\r\n y: height - 0.5 * height * (point2D[1] + 1)\r\n };\r\n result.push(Object.assign(Object.assign({}, hotspot), { position2D }));\r\n });\r\n });\r\n return result;\r\n }\r\n async load(snapshot, tags, reset, fade) {\r\n let promise = Promise.resolve();\r\n const snapshotHash = JSON.stringify(snapshot);\r\n if (snapshotHash === this.snapshotHash) {\r\n promise = promise.then(() => { this.animationFrameId = requestAnimationFrame(this.render); return Promise.resolve(); });\r\n }\r\n else {\r\n this.images = [];\r\n this.animationFrameId = requestAnimationFrame(this.render);\r\n promise = promise.then(() => this.loader.loadVRCubeSnapshot(snapshot).then(images => {\r\n this.images = images;\r\n twgl.createTexture(this.gl, {\r\n target: this.gl.TEXTURE_CUBE_MAP,\r\n minMag: this.gl.LINEAR,\r\n auto: false,\r\n cubeFaceOrder: [\r\n this.gl.TEXTURE_CUBE_MAP_POSITIVE_Z,\r\n this.gl.TEXTURE_CUBE_MAP_POSITIVE_X,\r\n this.gl.TEXTURE_CUBE_MAP_NEGATIVE_Z,\r\n this.gl.TEXTURE_CUBE_MAP_NEGATIVE_X,\r\n this.gl.TEXTURE_CUBE_MAP_POSITIVE_Y,\r\n this.gl.TEXTURE_CUBE_MAP_NEGATIVE_Y,\r\n ],\r\n src: images,\r\n }, (err, texture) => {\r\n if (err) {\r\n return;\r\n }\r\n if (reset) {\r\n this.interaction.reset();\r\n }\r\n this.uniforms.u_mix = fade ? 0.0 : 1.0;\r\n this.uniforms.u_texture_back = this.uniforms.u_texture;\r\n this.uniforms.u_texture = texture;\r\n this.animationFrameId = requestAnimationFrame(this.render);\r\n });\r\n }));\r\n }\r\n const tagsHash = JSON.stringify(tags);\r\n if (tags.length && (snapshotHash !== this.snapshotHash || tagsHash !== this.tagsHash)) {\r\n promise = promise.then(() => this.loader.loadVRCubeHotspots(snapshot, tags).then(hotspots => {\r\n this.hotspotsList = hotspots;\r\n }));\r\n }\r\n this.snapshotHash = snapshotHash;\r\n this.tagsHash = tagsHash;\r\n return promise.then(() => Promise.resolve(this.hotspots));\r\n }\r\n snapshot(type, quality) {\r\n return this.canvas.element.toDataURL(type, quality);\r\n }\r\n get modelViewProjectionMatrix() {\r\n const width = this.canvas.element.clientWidth;\r\n const height = this.canvas.element.clientHeight;\r\n const aspect = width > height ? width / height : height / width;\r\n const standardAspectRatio = Viewport.getStandardAspectRatio(width, height);\r\n const fov = this.interaction.fov * (standardAspectRatio / aspect);\r\n const projectionMatrix = width > height ? Maths.perspectiveWithFovY(fov, width / height, 0.5, 100) : Maths.perspectiveWithFovX(fov, width / height, 0.5, 100);\r\n const projectionMatrixInverse = m4.inverse(projectionMatrix);\r\n const pov = this.interaction.orientedPov;\r\n const viewMatrixInverse = m4.lookAt(pov.eye, pov.target, pov.up);\r\n return m4.multiply(viewMatrixInverse, projectionMatrixInverse);\r\n }\r\n render() {\r\n this.gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);\r\n this.uniforms.u_matrix = this.modelViewProjectionMatrix;\r\n this.gl.useProgram(this.programInfo.program);\r\n twgl.setBuffersAndAttributes(this.gl, this.programInfo, this.quad);\r\n twgl.setUniforms(this.programInfo, this.uniforms);\r\n twgl.drawBufferInfo(this.gl, this.quad);\r\n if (this.uniforms.u_mix < 1.0) {\r\n this.uniforms.u_mix = Math.min(this.uniforms.u_mix + 0.05, 1.0);\r\n this.animationFrameId = requestAnimationFrame(this.render);\r\n }\r\n }\r\n onMouseDown(e) {\r\n this.container.classList.add('ls-viewer-container-vrcube-grabbing');\r\n this.interaction.start(EventHelper.pointFromMouseEvent(e), {\r\n width: this.gl.canvas.width,\r\n height: this.gl.canvas.height,\r\n });\r\n }\r\n onMouseMove(e) {\r\n if (!this.interaction.isStarted) {\r\n return;\r\n }\r\n this.interaction.motion(EventHelper.pointFromMouseEvent(e));\r\n e.preventDefault();\r\n }\r\n onMouseUp(e) {\r\n if (!this.interaction.isStarted) {\r\n return;\r\n }\r\n this.container.classList.remove('ls-viewer-container-vrcube-grabbing');\r\n this.interaction.end(EventHelper.pointFromMouseEvent(e), true);\r\n }\r\n onMouseEnter(e) {\r\n if (!this.interaction.isStarted) {\r\n return;\r\n }\r\n if (e.buttons === 0) {\r\n this.container.classList.remove('ls-viewer-container-vrcube-grabbing');\r\n this.interaction.end(EventHelper.pointFromMouseEvent(e), false);\r\n }\r\n }\r\n onTouchStart(e) {\r\n this.container.classList.add('ls-viewer-container-vrcube-grabbing');\r\n this.interaction.start(EventHelper.pointFromTouchEvent(e), {\r\n width: this.gl.canvas.width,\r\n height: this.gl.canvas.height,\r\n });\r\n }\r\n onTouchMove(e) {\r\n if (!this.interaction.isStarted) {\r\n return;\r\n }\r\n this.interaction.motion(EventHelper.pointFromTouchEvent(e));\r\n e.preventDefault();\r\n }\r\n onTouchEnd(e) {\r\n if (!this.interaction.isStarted) {\r\n return;\r\n }\r\n this.container.classList.remove('ls-viewer-container-vrcube-grabbing');\r\n this.interaction.end(EventHelper.pointFromTouchEvent(e), true);\r\n }\r\n onDeviceOrientation(e) {\r\n this.interaction.orientation(e.alpha, e.beta, e.gamma);\r\n }\r\n}\r\n","import regression from 'regression';\r\nimport { Inertia } from './Inertia';\r\nimport { Maths } from './Maths';\r\nimport { Point } from './Point';\r\nexport class InteractivePosition {\r\n constructor(position, frames, rows, loop, onMotion) {\r\n this.isStarted = false;\r\n this.position = position;\r\n this.frames = frames;\r\n this.rows = rows;\r\n this.loop = loop;\r\n this.onMotion = onMotion;\r\n this.inertia = new Inertia(this.motion.bind(this));\r\n this.initPosition = this.position;\r\n this.startPosition = { x: 0.0, y: 0.0 };\r\n this.startPoint = new Point(0.0, 0.0);\r\n this.startSize = { width: 0.0, height: 0.0 };\r\n this.lastPoints = [];\r\n this.lastPointsNumber = 20;\r\n }\r\n destroy() {\r\n this.inertia.destroy();\r\n }\r\n reset() {\r\n this.position = this.initPosition;\r\n }\r\n get positionIndex() {\r\n return this.frames * this.position.y + this.position.x;\r\n }\r\n set positionIndex(index) {\r\n if (this.positionIndex === index) {\r\n return;\r\n }\r\n const positionIndex = this.loop ? Maths.mod(index, this.frames * this.rows) : Math.max(0, Math.min(index, this.frames * this.rows));\r\n this.position.x = Maths.mod(positionIndex, this.frames);\r\n this.position.y = Math.floor(positionIndex / this.frames);\r\n }\r\n start(point, size) {\r\n this.isStarted = true;\r\n this.startPosition = Object.assign({}, this.position);\r\n this.startPoint = point;\r\n this.startSize = size;\r\n this.lastPoints = [];\r\n this.inertia.stop();\r\n }\r\n motion(point) {\r\n if (this.isStarted) {\r\n this.inertia.track(point);\r\n }\r\n this.lastPoints.push({ x: point.x, y: point.y });\r\n this.lastPoints.splice(0, this.lastPoints.length - this.lastPointsNumber);\r\n const regressionResult = regression.linear(this.lastPoints.map(p => [p.x, p.y]));\r\n const minDistance = 25;\r\n if (Math.abs(regressionResult.equation[0]) < 1) {\r\n const dx = (Maths.accelerate(point.x - this.startPoint.x, 1.3) / this.startSize.width) * (this.frames / 4);\r\n let positionX = this.startPosition.x - Math.round(dx);\r\n positionX = this.loop ? Maths.mod(positionX, this.frames) : Math.max(0, Math.min(positionX, this.frames - 1));\r\n if (positionX !== this.position.x) {\r\n this.position.x = positionX;\r\n this.onMotion();\r\n }\r\n const minX = Math.min(...this.lastPoints.map(p => p.x));\r\n const maxX = Math.max(...this.lastPoints.map(p => p.x));\r\n if (maxX - minX > minDistance) {\r\n this.startPoint.y = point.y;\r\n this.startPosition.y = this.position.y;\r\n }\r\n }\r\n else {\r\n const dy = (Maths.accelerate(point.y - this.startPoint.y, 1.7) / this.startSize.height) * (this.rows / 4);\r\n let positionY = this.startPosition.y + Math.round(dy);\r\n positionY = Math.max(0, Math.min(positionY, this.rows - 1));\r\n if (positionY !== this.position.y) {\r\n this.position.y = positionY;\r\n this.onMotion();\r\n }\r\n const minY = Math.min(...this.lastPoints.map(p => p.y));\r\n const maxY = Math.max(...this.lastPoints.map(p => p.y));\r\n if (maxY - minY > minDistance) {\r\n this.startPoint.x = point.x;\r\n this.startPosition.x = this.position.x;\r\n }\r\n }\r\n }\r\n end(point, inertia) {\r\n this.isStarted = false;\r\n if (inertia) {\r\n this.inertia.track(point);\r\n this.inertia.start();\r\n }\r\n }\r\n}\r\n","import { EventHelper } from './EventHelper';\r\nimport { InteractivePosition } from './InteractivePosition';\r\nexport class WidgetVRObject {\r\n constructor(container, canvas, loader, onInteraction) {\r\n this.container = container;\r\n this.canvas = canvas;\r\n this.loader = loader;\r\n this.images = [];\r\n this.frames = 24;\r\n this.hotspotsList = [[]];\r\n this.interaction = new InteractivePosition({ x: 0, y: 0 }, 1, 1, false, () => {\r\n this.canvas.draw(this.image, true, 0.5);\r\n this.onInteraction({\r\n position: this.interaction.positionIndex\r\n });\r\n });\r\n this.onInteraction = onInteraction;\r\n }\r\n destroy() {\r\n if (this.animationFrameId) {\r\n cancelAnimationFrame(this.animationFrameId);\r\n this.animationFrameId = undefined;\r\n }\r\n }\r\n show() {\r\n this.canvas.show(false);\r\n this.container.classList.add('ls-viewer-container-vrobject');\r\n }\r\n hide() {\r\n this.canvas.hide(false);\r\n this.container.classList.remove('ls-viewer-container-vrobject');\r\n }\r\n async goto(position) {\r\n return new Promise((resolve) => {\r\n let pos = this.interaction.positionIndex;\r\n const goToLoop = () => {\r\n if (this.interaction.positionIndex === position) {\r\n resolve();\r\n }\r\n else {\r\n let sign = pos > position ? -1 : 1;\r\n if (this.interaction.loop) {\r\n if (((this.interaction.frames - pos) + position) < Math.abs(position - pos)) {\r\n sign *= -1;\r\n }\r\n }\r\n pos += 0.5 * sign;\r\n this.position = Math.floor(pos);\r\n this.animationFrameId = requestAnimationFrame(goToLoop);\r\n }\r\n };\r\n this.animationFrameId = requestAnimationFrame(goToLoop);\r\n });\r\n }\r\n get position() {\r\n return this.interaction.positionIndex;\r\n }\r\n set position(position) {\r\n this.interaction.positionIndex = position;\r\n this.canvas.draw(this.image, true, 0.5);\r\n }\r\n get image() {\r\n return this.images[this.interaction.positionIndex];\r\n }\r\n get hotspots() {\r\n return this.hotspotsList[this.interaction.positionIndex] || [];\r\n }\r\n async load(snapshot, tags, reset, fade) {\r\n let promise = Promise.resolve();\r\n if (reset) {\r\n this.interaction.reset();\r\n }\r\n const snapshotHash = JSON.stringify(snapshot);\r\n if (snapshotHash === this.snapshotHash && this.image) {\r\n promise = promise.then(() => this.canvas.draw(this.image, fade, 0.05));\r\n }\r\n else {\r\n this.images = [];\r\n promise = promise.then(() => this.loader.loadVRObjectSnapshot(snapshot, this.interaction.positionIndex).then(promises => {\r\n const frames = promises.length;\r\n this.images = new Array(frames);\r\n this.interaction.frames = snapshot.view.frames || this.frames;\r\n this.interaction.rows = frames / this.interaction.frames;\r\n this.interaction.loop = !!snapshot.view.loop;\r\n if (reset) {\r\n this.interaction.reset();\r\n }\r\n promises.forEach((promise, i) => {\r\n promise.then((img) => {\r\n this.images[i] = img;\r\n if (img === this.image) {\r\n this.canvas.draw(this.image, fade, 0.05);\r\n }\r\n }).catch(() => { });\r\n });\r\n return promises[this.interaction.positionIndex].then(() => Promise.resolve());\r\n }));\r\n }\r\n const tagsHash = JSON.stringify(tags);\r\n if (tags.length && (snapshotHash !== this.snapshotHash || tagsHash !== this.tagsHash)) {\r\n promise = promise.then(() => this.loader.loadVRObjectHotspots(snapshot, tags).then(hotspots => {\r\n this.hotspotsList = hotspots;\r\n }));\r\n }\r\n this.snapshotHash = snapshotHash;\r\n this.tagsHash = tagsHash;\r\n return promise.then(() => Promise.resolve(this.hotspots));\r\n }\r\n snapshot(type, quality) {\r\n return this.canvas.element.toDataURL(type, quality);\r\n }\r\n onMouseDown(e) {\r\n this.container.classList.add('ls-viewer-container-vrobject-grabbing');\r\n this.interaction.start(EventHelper.pointFromMouseEvent(e), {\r\n width: this.canvas.element.width,\r\n height: this.canvas.element.height,\r\n });\r\n }\r\n onMouseMove(e) {\r\n if (!this.interaction.isStarted) {\r\n return;\r\n }\r\n this.interaction.motion(EventHelper.pointFromMouseEvent(e));\r\n e.preventDefault();\r\n }\r\n onMouseUp(e) {\r\n if (!this.interaction.isStarted) {\r\n return;\r\n }\r\n this.container.classList.remove('ls-viewer-container-vrobject-grabbing');\r\n this.interaction.end(EventHelper.pointFromMouseEvent(e), true);\r\n }\r\n onMouseEnter(e) {\r\n if (!this.interaction.isStarted) {\r\n return;\r\n }\r\n if (e.buttons === 0) {\r\n this.container.classList.remove('ls-viewer-container-vrobject-grabbing');\r\n this.interaction.end(EventHelper.pointFromMouseEvent(e), false);\r\n }\r\n }\r\n onTouchStart(e) {\r\n this.container.classList.add('ls-viewer-container-vrobject-grabbing');\r\n this.interaction.start(EventHelper.pointFromTouchEvent(e), {\r\n width: this.canvas.element.width,\r\n height: this.canvas.element.height,\r\n });\r\n }\r\n onTouchMove(e) {\r\n if (!this.interaction.isStarted) {\r\n return;\r\n }\r\n this.interaction.motion(EventHelper.pointFromTouchEvent(e));\r\n e.preventDefault();\r\n }\r\n onTouchEnd(e) {\r\n if (!this.interaction.isStarted) {\r\n return;\r\n }\r\n this.container.classList.remove('ls-viewer-container-vrobject-grabbing');\r\n this.interaction.end(EventHelper.pointFromTouchEvent(e), true);\r\n }\r\n onDeviceOrientation(e) {\r\n }\r\n}\r\n","export var WRAPIv2;\r\n(function (WRAPIv2) {\r\n let SunShadowQualityMode;\r\n (function (SunShadowQualityMode) {\r\n SunShadowQualityMode[\"VeryLow\"] = \"veryLow\";\r\n SunShadowQualityMode[\"Low\"] = \"low\";\r\n SunShadowQualityMode[\"Medium\"] = \"medium\";\r\n SunShadowQualityMode[\"Fine\"] = \"fine\";\r\n SunShadowQualityMode[\"Ultra\"] = \"ultra\";\r\n })(SunShadowQualityMode = WRAPIv2.SunShadowQualityMode || (WRAPIv2.SunShadowQualityMode = {}));\r\n let SunShadowSmoothnessMode;\r\n (function (SunShadowSmoothnessMode) {\r\n SunShadowSmoothnessMode[\"None\"] = \"none\";\r\n SunShadowSmoothnessMode[\"Weak\"] = \"weak\";\r\n SunShadowSmoothnessMode[\"Normal\"] = \"normal\";\r\n SunShadowSmoothnessMode[\"Fine\"] = \"fine\";\r\n SunShadowSmoothnessMode[\"UltraFine\"] = \"ultraFine\";\r\n SunShadowSmoothnessMode[\"Max\"] = \"max\";\r\n })(SunShadowSmoothnessMode = WRAPIv2.SunShadowSmoothnessMode || (WRAPIv2.SunShadowSmoothnessMode = {}));\r\n let SunUseCaseMode;\r\n (function (SunUseCaseMode) {\r\n SunUseCaseMode[\"Manual\"] = \"manual\";\r\n SunUseCaseMode[\"ExtractedFromEnv\"] = \"extractedFromEnv\";\r\n })(SunUseCaseMode = WRAPIv2.SunUseCaseMode || (WRAPIv2.SunUseCaseMode = {}));\r\n})(WRAPIv2 || (WRAPIv2 = {}));\r\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import debounce from 'debounce-promise';\r\nimport { Canvas2D } from './Canvas2D';\r\nimport { Canvas3D } from './Canvas3D';\r\nimport { Loader } from './Loader';\r\nimport { Resolution } from './Resolution';\r\nimport { Video } from './Video';\r\nimport { Viewport } from './Viewport';\r\nimport { WidgetImage } from './WidgetImage';\r\nimport { WidgetVideo } from './WidgetVideo';\r\nimport { WidgetVRCube } from './WidgetVRCube';\r\nimport { WidgetVRObject } from './WidgetVRObject';\r\nimport './index.css';\r\nexport class Viewer {\r\n constructor(container, options) {\r\n this.checkResize = this.checkResize.bind(this);\r\n this.onDeviceOrientation = this.onDeviceOrientation.bind(this);\r\n this.onResize = this.onResize.bind(this);\r\n this.onMouseDown = this.onMouseDown.bind(this);\r\n this.onMouseMove = this.onMouseMove.bind(this);\r\n this.onMouseUp = this.onMouseUp.bind(this);\r\n this.onMouseEnter = this.onMouseEnter.bind(this);\r\n this.onTouchStart = this.onTouchStart.bind(this);\r\n this.onTouchMove = this.onTouchMove.bind(this);\r\n this.onTouchEnd = this.onTouchEnd.bind(this);\r\n this.onLoadStart = this.onLoadStart.bind(this);\r\n this.onLoadProgress = this.onLoadProgress.bind(this);\r\n this.onLoadEnd = this.onLoadEnd.bind(this);\r\n this.onLoadError = this.onLoadError.bind(this);\r\n this.onHotspotsChange = this.onHotspotsChange.bind(this);\r\n this.onVrcubeInteraction = this.onVrcubeInteraction.bind(this);\r\n this.onVrobjectInteraction = this.onVrobjectInteraction.bind(this);\r\n this.options = Object.assign({ server: 'localhost', api: 'v1', fit: 'cover', image: {}, video: {}, vrcube: {}, vrobject: {}, events: {} }, options);\r\n this.options.events = Object.assign({ onLoadStart: (() => { }), onLoadProgress: (() => { }), onLoadEnd: (() => { }), onLoadError: (() => { }), onInteraction: (() => { }), onVrcubeInteraction: (() => { }), onVrobjectInteraction: (() => { }), onHotspotsChange: (() => { }) }, options.events);\r\n this.options.events.onLoadError = debounce(this.options.events.onLoadError, 10);\r\n this.container = container;\r\n this.container.classList.add('ls-viewer-container');\r\n this.containerWidth = 0;\r\n this.containerHeight = 0;\r\n this.canvas2D = new Canvas2D(this.options.fit);\r\n this.container.appendChild(this.canvas2D.element);\r\n this.canvas3D = new Canvas3D();\r\n this.container.appendChild(this.canvas3D.element);\r\n this.video = new Video();\r\n this.container.appendChild(this.video.element);\r\n this.loader = new Loader(this.options.server, this.options.api, this);\r\n this.resolution = new Resolution(0, 0);\r\n this.parameters = {\r\n width: 0,\r\n height: 0,\r\n antialiasing: false,\r\n superSampling: 2\r\n };\r\n this.encoder = {\r\n format: 'jpeg',\r\n quality: 80,\r\n };\r\n this.widgetImage = new WidgetImage(container, this.canvas2D, this.loader);\r\n this.widgetVideo = new WidgetVideo(container, this.video, this.loader);\r\n this.widgetVRCube = new WidgetVRCube(container, this.canvas3D, this.loader, this.onVrcubeInteraction);\r\n this.widgetVRObject = new WidgetVRObject(container, this.canvas2D, this.loader, this.onVrobjectInteraction);\r\n this.widget = this.widgetImage;\r\n this.isDestroyed = false;\r\n this.container.addEventListener('mousedown', this.onMouseDown);\r\n this.container.addEventListener('mouseenter', this.onMouseEnter);\r\n this.container.addEventListener('touchstart', this.onTouchStart);\r\n document.addEventListener('mousemove', this.onMouseMove, { passive: false });\r\n document.addEventListener('mouseup', this.onMouseUp);\r\n document.addEventListener('touchmove', this.onTouchMove, { passive: false });\r\n document.addEventListener('touchend', this.onTouchEnd);\r\n this.loadWidget = debounce(this.loadWidget, 10);\r\n this.onResize = debounce(this.onResize, 250);\r\n requestAnimationFrame(this.checkResize);\r\n }\r\n destroy() {\r\n this.canvas2D.destroy();\r\n this.container.removeEventListener('mousedown', this.onMouseDown);\r\n this.container.removeEventListener('mouseenter', this.onMouseEnter);\r\n this.container.removeEventListener('touchstart', this.onTouchStart);\r\n document.removeEventListener('mousemove', this.onMouseMove);\r\n document.removeEventListener('mouseup', this.onMouseUp);\r\n document.removeEventListener('touchmove', this.onTouchMove);\r\n document.removeEventListener('touchend', this.onTouchEnd);\r\n this.isDestroyed = true;\r\n }\r\n async load(scene, transition) {\r\n let promise = Promise.resolve();\r\n if (transition === null || transition === void 0 ? void 0 : transition.animation) {\r\n promise = promise.then(() => this.loadAnimation(transition.animation));\r\n }\r\n if (this.view && (transition === null || transition === void 0 ? void 0 : transition.fromPosition) !== undefined && this.viewWidget instanceof WidgetVRObject) {\r\n const mode = this.view.mode;\r\n promise = promise.then(() => this.viewWidget.goto(transition.fromPosition));\r\n }\r\n if (transition === null || transition === void 0 ? void 0 : transition.animation) {\r\n promise = promise.then(() => this.widgetVideo.play());\r\n }\r\n promise = promise.then(() => {\r\n this.scene = Array.isArray(scene) ? [...scene] : [scene];\r\n return this.loadWidget(false, !(transition && transition.animation));\r\n });\r\n promise.catch((e) => {\r\n this.onLoadError(e);\r\n });\r\n return promise;\r\n }\r\n async setEncoder(encoder) {\r\n this.encoder = Object.assign({}, encoder);\r\n let promise = Promise.resolve();\r\n promise = promise.then(() => this.loadWidget(false, true));\r\n promise.catch((e) => {\r\n this.onLoadError(e);\r\n });\r\n return promise;\r\n }\r\n setParameters(parameters) {\r\n this.parameters = Object.assign({}, parameters);\r\n this.parameters.width = this.resolution.width;\r\n this.parameters.height = this.resolution.height;\r\n let promise = Promise.resolve();\r\n promise = promise.then(() => this.loadWidget(false, true));\r\n promise.catch((e) => {\r\n this.onLoadError(e);\r\n });\r\n return promise;\r\n }\r\n setTags(tags) {\r\n this.tags = tags;\r\n this.loadWidget(false, false);\r\n }\r\n async setView(view, transition) {\r\n let promise = Promise.resolve();\r\n if (transition === null || transition === void 0 ? void 0 : transition.animation) {\r\n promise = promise.then(() => this.loadAnimation(transition.animation));\r\n }\r\n if (this.view && (transition === null || transition === void 0 ? void 0 : transition.fromPosition) !== undefined && this.viewWidget instanceof WidgetVRObject) {\r\n promise = promise.then(() => this.viewWidget.goto(transition.fromPosition));\r\n }\r\n if (transition === null || transition === void 0 ? void 0 : transition.animation) {\r\n promise = promise.then(() => this.widgetVideo.play());\r\n }\r\n promise = promise.then(() => {\r\n let reset = true;\r\n this.view = Object.assign({}, view);\r\n if (this.view && this.viewWidget instanceof WidgetVRObject && (transition === null || transition === void 0 ? void 0 : transition.toPosition) !== undefined) {\r\n reset = false;\r\n this.viewWidget.position = transition.toPosition;\r\n }\r\n return this.loadWidget(reset, !(transition && transition.animation));\r\n });\r\n promise.catch((e) => {\r\n this.onLoadError(e);\r\n });\r\n return promise;\r\n }\r\n setVrcube(data) {\r\n Object.assign(this.widgetVRCube, data);\r\n }\r\n setVrobject(data) {\r\n Object.assign(this.widgetVRObject, data);\r\n }\r\n async loadAnimation(animation) {\r\n var _a;\r\n const snapshot = {\r\n scene: this.scene,\r\n view: {\r\n animation: animation.name,\r\n camera: animation.camera,\r\n duration: animation.duration,\r\n loop: animation.loop,\r\n reverse: animation.reverse,\r\n },\r\n parameters: this.parameters,\r\n encoder: {\r\n format: 'mp4',\r\n },\r\n };\r\n if (!((_a = snapshot.view) === null || _a === void 0 ? void 0 : _a.background)) {\r\n snapshot.view.background = 'product';\r\n }\r\n return this.widgetVideo.load(snapshot).then(() => Promise.resolve());\r\n }\r\n async playAnimation(animation) {\r\n return this.loadAnimation(animation).then(() => this.widgetVideo.play()).catch((e) => {\r\n this.onLoadError(e);\r\n });\r\n }\r\n stopAnimation() {\r\n this.widgetVideo.hide();\r\n }\r\n snapshot(type, quality) {\r\n return this.viewWidget.snapshot(type, quality);\r\n }\r\n async loadWidget(reset, fade) {\r\n if (!this.scene || !this.view) {\r\n return Promise.resolve();\r\n }\r\n if (!this.parameters.width || !this.parameters.height) {\r\n return Promise.resolve();\r\n }\r\n const widget = this.viewWidget;\r\n if (!widget) {\r\n return Promise.reject(new Error('Unknown view mode'));\r\n }\r\n const snapshot = {\r\n scene: this.scene,\r\n view: this.view,\r\n parameters: this.parameters,\r\n encoder: this.encoder\r\n };\r\n if (!snapshot.view.background) {\r\n snapshot.view.background = 'product';\r\n }\r\n return widget.load(snapshot, this.tags || [], reset, fade).then(hotspots => {\r\n this.widget.hide();\r\n this.widget = widget;\r\n this.widget.show();\r\n this.widgetVideo.hide();\r\n this.onHotspotsChange(hotspots);\r\n });\r\n }\r\n get viewWidget() {\r\n var _a;\r\n switch ((_a = this.view) === null || _a === void 0 ? void 0 : _a.mode) {\r\n case 'image':\r\n return this.widgetImage;\r\n case 'video':\r\n return this.widgetVideo;\r\n case 'vrcube':\r\n return this.widgetVRCube;\r\n case 'vrobject':\r\n return this.widgetVRObject;\r\n default:\r\n return this.widgetImage;\r\n }\r\n }\r\n checkResize() {\r\n if (this.isDestroyed) {\r\n return;\r\n }\r\n const width = this.container.clientWidth;\r\n const height = this.container.clientHeight;\r\n if (width !== this.containerWidth || height !== this.containerHeight) {\r\n this.containerWidth = width;\r\n this.containerHeight = height;\r\n this.onResize();\r\n }\r\n if (!this.isDestroyed) {\r\n requestAnimationFrame(this.checkResize);\r\n }\r\n }\r\n onMouseDown(e) {\r\n this.widget.onMouseDown(e);\r\n }\r\n onMouseEnter(e) {\r\n this.widget.onMouseEnter(e);\r\n }\r\n onMouseMove(e) {\r\n this.widget.onMouseMove(e);\r\n }\r\n onMouseUp(e) {\r\n this.widget.onMouseUp(e);\r\n }\r\n onTouchStart(e) {\r\n this.widget.onTouchStart(e);\r\n }\r\n onTouchMove(e) {\r\n this.widget.onTouchMove(e);\r\n }\r\n onTouchEnd(e) {\r\n this.widget.onTouchEnd(e);\r\n }\r\n onDeviceOrientation(e) {\r\n this.widget.onDeviceOrientation(e);\r\n }\r\n onResize() {\r\n const width = this.container.clientWidth;\r\n const height = this.container.clientHeight;\r\n this.resolution = Viewport.getStandardResolution(width * window.devicePixelRatio, height * window.devicePixelRatio);\r\n this.parameters.width = this.resolution.width;\r\n this.parameters.height = this.resolution.height;\r\n this.canvas2D.resize(width, height, window.devicePixelRatio);\r\n this.canvas3D.resize(width, height, window.devicePixelRatio);\r\n this.video.resize(width, height, this.resolution, this.options.fit);\r\n this.loadWidget(false, false).catch(e => {\r\n this.onLoadError(e);\r\n });\r\n }\r\n onVrcubeInteraction(...args) {\r\n this.options.events.onHotspotsChange(this.widgetVRCube.hotspots);\r\n this.options.events.onInteraction(...args);\r\n this.options.events.onVrcubeInteraction(...args);\r\n }\r\n onVrobjectInteraction(...args) {\r\n this.options.events.onHotspotsChange(this.widgetVRObject.hotspots);\r\n this.options.events.onInteraction(...args);\r\n this.options.events.onVrobjectInteraction(...args);\r\n }\r\n onHotspotsChange(...args) {\r\n this.options.events.onHotspotsChange(...args);\r\n }\r\n onLoadStart(...args) {\r\n this.container.classList.add('ls-viewer-container-loading');\r\n this.options.events.onLoadStart(...args);\r\n }\r\n onLoadProgress(...args) {\r\n this.options.events.onLoadProgress(...args);\r\n }\r\n onLoadEnd(...args) {\r\n this.container.classList.remove('ls-viewer-container-loading');\r\n this.options.events.onLoadEnd(...args);\r\n }\r\n onLoadError(...args) {\r\n this.container.classList.remove('ls-viewer-container-loading');\r\n this.options.events.onLoadError(...args);\r\n }\r\n}\r\n"],"names":["Resolution","constructor","width","height","this","aspect","Viewport","top","left","static","resolution","viewportResolution","fit","aspectRatio","viewportRatio","Math","abs","getStandardAspectRatio","quality","getStandardQuality","max","round","Canvas2D","element","document","createElement","classList","add","style","opacity","context","getContext","backCanvas","backContext","destroy","requestAnimationId","cancelAnimationFrame","undefined","show","useDisplay","display","hide","resize","pixelRatio","draw","img","fade","speed","viewport","drawImage","globalAlpha","fadeLoop","image","alpha","min","clearRect","requestAnimationFrame","Canvas3D","twgl","preserveDrawingBuffer","setDefaultTextureColor","Maths","v","f","factor","a","PI","x","y","floor","fovX","near","far","dst","right","tan","perspectiveWithLeft","fovY","bottom","ral","rsl","tab","tsb","fsn","Float32Array","WebRenderStatic","async","snapshot","scene","WebRenderV1","server","request","Object","entries","filter","k","map","join","_a","_b","accessory","length","find","p","decor","product","databaseId","database","configuration","animations","accessoryDatabaseId","decorDatabaseId","decorDeltaAltitude","translation","parameters","view","background","softwareAntialiasing","antialiasing","superSampling","encoder","imageFormat","format","imageQuality","url","fetch","then","response","text","responseText","matches","replace","match","xmlRegex","m","Promise","reject","assign","sceneParameters","animation","bookmarkSet","camera","split","bookmark","frames","loop","renderParameters","encoderParameters","queryString","buildQuery","resolve","duration","reverse","WebRenderV2","pResult","s","e","t","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","i","propertyIsEnumerable","__rest","toString","jpeg","png","compression","webp","body","method","JSON","stringify","json","data","mode","fetchFrame","vrCube","fetchFrameArray","cameraGroup","images","vrObject","panFrames","panFrom","panTo","panLoop","tiltFrames","tiltFrom","tiltTo","tiltLoop","id","fps","tags","fetchHotspots","fetchHotspotsArray","Loader","api","delegate","webrender","loadingId","loaded","total","onLoadStart","onLoadProgress","onLoadEnd","progress","src","loadImage","video","loadVideo","srcs","promises","all","imgs","position","loadVideoFrames","loadImageFrames","Image","crossOrigin","location","protocol","isValidHttpUrl","promise","addEventListener","once","type","Array","start","n","step","ceil","index","mod","catch","load","count","seeked","removeEventListener","canvas","videoWidth","videoHeight","toDataURL","currentTime","loadVideoFrame","imageHotspots","Error","vrCubeHotspots","vrObjectHotspots","str","URL","_","Video","setAttribute","WidgetImage","container","loader","hotspots","remove","reset","snapshotHash","loadImageSnapshot","tagsHash","loadImageHotspots","onMouseDown","onMouseMove","onMouseUp","onMouseEnter","onTouchStart","onTouchMove","onTouchEnd","onDeviceOrientation","WidgetVideo","hash","loadVideoSnapshot","play","Point","clone","EventHelper","screenX","screenY","touch","targetTouches","changedTouches","Basis3","args","u","o","w","v3","cross","localToGlobalMatrix","globalToLocalMatrix","m4","inverse","InertiaPoint","time","Inertia","onMotion","points","lastPoint","velocity","bind","animationFrameId","track","point","Date","now","push","firstPoint","dx","dy","dt","stop","PointOfView","target","eye","up","copy","viewVector","subtract","rightVector","normalize","viewMatrix","lookAt","default","InteractiveCamera","pov","fov","isStarted","degreesToRadians","orientationMatrix","identity","inertia","motion","initPov","initFov","initOrientation","window","orientation","startPov","startSize","previousPoint","orientedPov","headBasis","matrix","multiply","transformDirection","size","delta","accelerate","rotationMatrix","rotationY","rotationX","headMatrix","transformPoint","end","beta","gamma","alphaRadians","betaRadians","gammaRadians","rotateZ","rotateX","rotateY","WidgetVRCube","onInteraction","hotspotsList","interaction","render","gl","programInfo","createProgramInfo","quad","primitives","createXYQuadBufferInfo","uniforms","u_matrix","u_mix","u_texture_back","createTexture","TEXTURE_CUBE_MAP","minMag","LINEAR","u_texture","every","radiansToDegrees","result","flat","clientWidth","clientHeight","modelViewProjectionMatrix","forEach","hotspot","position2D","rx","ry","rz","point3D","point2D","loadVRCubeSnapshot","auto","cubeFaceOrder","TEXTURE_CUBE_MAP_POSITIVE_Z","TEXTURE_CUBE_MAP_POSITIVE_X","TEXTURE_CUBE_MAP_NEGATIVE_Z","TEXTURE_CUBE_MAP_NEGATIVE_X","TEXTURE_CUBE_MAP_POSITIVE_Y","TEXTURE_CUBE_MAP_NEGATIVE_Y","err","texture","loadVRCubeHotspots","standardAspectRatio","projectionMatrix","perspectiveWithFovY","perspectiveWithFovX","projectionMatrixInverse","viewMatrixInverse","useProgram","program","setBuffersAndAttributes","setUniforms","drawBufferInfo","pointFromMouseEvent","preventDefault","buttons","pointFromTouchEvent","InteractivePosition","rows","initPosition","startPosition","startPoint","lastPoints","lastPointsNumber","positionIndex","splice","regressionResult","regression","linear","equation","positionX","minX","positionY","minY","WidgetVRObject","pos","goToLoop","sign","loadVRObjectSnapshot","loadVRObjectHotspots","WRAPIv2","SunShadowQualityMode","SunShadowSmoothnessMode","SunUseCaseMode","css","ref","insertAt","head","getElementsByTagName","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","options","checkResize","onResize","onLoadError","onHotspotsChange","onVrcubeInteraction","onVrobjectInteraction","vrcube","vrobject","events","debounce","containerWidth","containerHeight","canvas2D","canvas3D","widgetImage","widgetVideo","widgetVRCube","widgetVRObject","widget","isDestroyed","passive","loadWidget","transition","loadAnimation","fromPosition","viewWidget","goto","isArray","setParameters","setTags","toPosition","setVrcube","setVrobject","name","stopAnimation","getStandardResolution","devicePixelRatio"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/Resolution.ts","../src/Viewport.ts","../src/Canvas2D.ts","../src/Canvas3D.ts","../src/Maths.ts","../src/WebRenderStatic.ts","../src/WebRenderV1.ts","../src/WebRenderV2.ts","../node_modules/tslib/tslib.es6.js","../src/Loader.ts","../src/Video.ts","../src/WidgetImage.ts","../src/WidgetVideo.ts","../src/Point.ts","../src/EventHelper.ts","../src/Basis3.ts","../src/InertiaPoint.ts","../src/Inertia.ts","../src/PointOfView.ts","../src/InteractiveCamera.ts","../src/WidgetVRCube.ts","../src/InteractivePosition.ts","../src/WidgetVRObject.ts","../src/WRAPIv2.ts","../node_modules/style-inject/dist/style-inject.es.js","../src/Viewer.ts"],"sourcesContent":["export class Resolution {\n constructor(width, height) {\n this.width = width;\n this.height = height;\n }\n get aspect() {\n return this.width / this.height;\n }\n}\n","import { Resolution } from './Resolution';\nexport class Viewport {\n constructor(top, left, width, height) {\n this.top = top;\n this.left = left;\n this.width = width;\n this.height = height;\n }\n static fit(resolution, viewportResolution, fit) {\n const aspectRatio = resolution.aspect;\n const viewportRatio = viewportResolution.aspect;\n let width = 0;\n let height = 0;\n switch (fit) {\n case 'contain':\n width = viewportRatio < aspectRatio ? viewportResolution.width : viewportResolution.height * aspectRatio;\n height = viewportRatio < aspectRatio ? viewportResolution.width / aspectRatio : viewportResolution.height;\n break;\n case 'cover':\n default:\n width = viewportRatio < aspectRatio ? viewportResolution.height * aspectRatio : viewportResolution.width;\n height = viewportRatio < aspectRatio ? viewportResolution.height : viewportResolution.width / aspectRatio;\n break;\n case 'fill':\n width = viewportResolution.width;\n height = viewportResolution.height;\n break;\n }\n const top = (viewportResolution.height - height) / 2;\n const left = (viewportResolution.width - width) / 2;\n return new Viewport(top, left, width, height);\n }\n static getStandardAspectRatio(width, height) {\n if (width === 0 || height === 0) {\n return 0;\n }\n const aspectRatio = width / height;\n if (width < height) {\n const distanceTo34 = Math.abs(3 / 4 - aspectRatio);\n const distanceTo916 = Math.abs(9 / 16 - aspectRatio);\n return distanceTo34 < distanceTo916 ? 3 / 4 : 9 / 16;\n }\n const distanceTo43 = Math.abs(4 / 3 - aspectRatio);\n const distanceTo169 = Math.abs(16 / 9 - aspectRatio);\n return distanceTo43 < distanceTo169 ? 4 / 3 : 16 / 9;\n }\n static getStandardResolution(width, height) {\n if (width === 0 || height === 0) {\n return new Resolution(0, 0);\n }\n const aspectRatio = Viewport.getStandardAspectRatio(width, height);\n if (width < height) {\n const quality = Viewport.getStandardQuality(Math.max(height * aspectRatio, width));\n return new Resolution(Math.round(quality), Math.round(quality / aspectRatio));\n }\n const quality = Viewport.getStandardQuality(Math.max(width / aspectRatio, height));\n return new Resolution(Math.round(quality * aspectRatio), Math.round(quality));\n }\n static getStandardQuality(height) {\n if (height <= 240) {\n return 240;\n }\n if (height <= 360) {\n return 360;\n }\n if (height <= 480) {\n return 480;\n }\n if (height <= 720) {\n return 720;\n }\n return 1080;\n }\n}\n","import { Resolution } from './Resolution';\nimport { Viewport } from './Viewport';\nexport class Canvas2D {\n constructor(fit) {\n this.element = document.createElement('canvas');\n this.element.classList.add('ls-viewer-canvas');\n this.element.style.opacity = '0';\n this.element.width = 0;\n this.element.height = 0;\n this.context = this.element.getContext('2d');\n this.backCanvas = document.createElement('canvas');\n this.backContext = this.backCanvas.getContext('2d');\n this.fit = fit;\n }\n destroy() {\n if (this.requestAnimationId) {\n cancelAnimationFrame(this.requestAnimationId);\n this.requestAnimationId = undefined;\n }\n }\n show(useDisplay) {\n if (useDisplay) {\n this.element.style.display = 'block';\n }\n else {\n this.element.style.opacity = '1';\n }\n }\n hide(useDisplay) {\n if (useDisplay) {\n this.element.style.display = 'none';\n }\n else {\n this.element.style.opacity = '0';\n }\n }\n resize(width, height, pixelRatio) {\n this.element.width = width * pixelRatio;\n this.element.height = height * pixelRatio;\n this.element.style.width = `${width}px`;\n this.element.style.height = `${height}px`;\n this.backCanvas.width = width * pixelRatio;\n this.backCanvas.height = height * pixelRatio;\n }\n draw(img, fade, speed) {\n if (!img) {\n return;\n }\n if (this.requestAnimationId) {\n cancelAnimationFrame(this.requestAnimationId);\n this.requestAnimationId = undefined;\n }\n const viewport = Viewport.fit(new Resolution(img.width, img.height), new Resolution(this.element.width, this.element.height), this.fit);\n if (fade) {\n this.backContext.drawImage(this.element, 0, 0);\n this.context.globalAlpha = 0.0;\n this.fadeLoop(img, speed || 0);\n }\n else {\n this.context.globalAlpha = 1.0;\n this.context.drawImage(img, viewport.left, viewport.top, viewport.width, viewport.height);\n }\n this.image = img;\n }\n fadeLoop(img, speed) {\n if (this.context.globalAlpha >= 1.0) {\n cancelAnimationFrame(this.requestAnimationId);\n this.requestAnimationId = undefined;\n return;\n }\n const alpha = Math.min(this.context.globalAlpha + speed, 1.0);\n const viewport = Viewport.fit(new Resolution(img.width, img.height), new Resolution(this.element.width, this.element.height), this.fit);\n this.context.clearRect(0, 0, this.element.width, this.element.height);\n this.context.globalAlpha = 1.0;\n this.context.drawImage(this.backCanvas, 0, 0);\n this.context.globalAlpha = alpha;\n this.context.drawImage(img, viewport.left, viewport.top, viewport.width, viewport.height);\n this.requestAnimationId = requestAnimationFrame(() => {\n this.fadeLoop(img, speed);\n });\n }\n}\n","import * as twgl from 'twgl.js';\nexport class Canvas3D {\n constructor() {\n this.element = document.createElement('canvas');\n this.element.classList.add('ls-viewer-canvas');\n this.element.style.opacity = '0';\n this.element.width = 0;\n this.element.height = 0;\n this.context = twgl.getContext(this.element, { preserveDrawingBuffer: true });\n twgl.setDefaultTextureColor([1, 1, 1, 1]);\n }\n show() {\n this.element.style.opacity = '1';\n }\n hide() {\n this.element.style.opacity = '0';\n }\n resize(width, height, pixelRatio) {\n this.element.width = width * pixelRatio;\n this.element.height = height * pixelRatio;\n this.element.style.width = `${width}px`;\n this.element.style.height = `${height}px`;\n }\n}\n","export class Maths {\n static accelerate(v, f) {\n const factor = f || 1.5;\n return (Math.abs(v) ** factor) * (v > 0 ? 1 : -1);\n }\n static degreesToRadians(a) {\n return a * (Math.PI / 180);\n }\n static radiansToDegrees(a) {\n return a * (180 / Math.PI);\n }\n static mod(x, y) {\n return (x - (y * Math.floor(x / y)));\n }\n static perspectiveWithFovX(fovX, aspect, near, far, dst) {\n const right = Math.tan(fovX / 2.0);\n const top = right / aspect;\n return this.perspectiveWithLeft(-right, right, -top, top, near, far, dst);\n }\n static perspectiveWithFovY(fovY, aspect, near, far, dst) {\n const top = near * Math.tan(fovY / 2.0);\n const right = top * aspect;\n return this.perspectiveWithLeft(-right, right, -top, top, near, far, dst);\n }\n static perspectiveWithLeft(left, right, bottom, top, near, far, dst) {\n dst = dst || new Float32Array(16);\n const ral = right + left;\n const rsl = right - left;\n const tab = top + bottom;\n const tsb = top - bottom;\n const fsn = far - near;\n dst[0] = 2 * near / rsl;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 2 * near / tsb;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = ral / rsl;\n dst[9] = tab / tsb;\n dst[10] = -far / fsn;\n dst[11] = -1.0;\n dst[12] = 0.0;\n dst[13] = 0.0;\n dst[14] = -far * near / fsn;\n dst[15] = 0.0;\n return dst;\n }\n}\n","export class WebRenderStatic {\n constructor() {\n }\n async animation(snapshot) {\n return snapshot.scene;\n }\n async image(snapshot) {\n return snapshot.scene;\n }\n async video(snapshot) {\n return snapshot.scene;\n }\n async vrCube(snapshot) {\n return snapshot.scene;\n }\n async vrObject(snapshot) {\n return snapshot.scene;\n }\n}\n","export class WebRenderV1 {\n constructor(server) {\n this.server = server;\n }\n static buildQuery(request) {\n return Object.entries(request).filter(([k, v]) => v !== null && v !== undefined).map(([k, v]) => `${k}=${v}`).join('&');\n }\n static sceneParameters(snapshot) {\n var _a, _b;\n const scene = snapshot.scene;\n const accessory = scene.length > 1 ? scene.find(p => p.accessory) : null;\n const decor = scene.length > 1 ? scene.find(p => p.decor) : null;\n const product = scene.find(p => p !== accessory && p !== decor);\n return {\n databaseId: product.database,\n configuration: product === null || product === void 0 ? void 0 : product.configuration,\n animations: (_a = product === null || product === void 0 ? void 0 : product.animations) === null || _a === void 0 ? void 0 : _a.join('/'),\n accessoryDatabaseId: accessory === null || accessory === void 0 ? void 0 : accessory.database,\n decorDatabaseId: decor === null || decor === void 0 ? void 0 : decor.database,\n decorDeltaAltitude: (_b = decor === null || decor === void 0 ? void 0 : decor.translation) === null || _b === void 0 ? void 0 : _b.y\n };\n }\n static renderParameters(snapshot) {\n const { parameters, view } = snapshot;\n return {\n background: view.background,\n width: parameters.width,\n height: parameters.height,\n softwareAntialiasing: parameters.antialiasing,\n superSampling: parameters.superSampling\n };\n }\n static encoderParameters(snapshot) {\n const { encoder } = snapshot;\n return {\n imageFormat: encoder.format,\n imageQuality: encoder.quality\n };\n }\n static async fetch(url) {\n return fetch(url).then(response => response.text()).then(responseText => {\n const xml = responseText.replace(/&/g, '&');\n const matches = xml.match(this.xmlRegex);\n if (!matches) {\n return Promise.reject();\n }\n return matches.map(m => m.replace(this.xmlRegex, '$1'));\n });\n }\n async animation(snapshot) {\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { animation: snapshot.view.animation, bookmarkSet: snapshot.view.camera.split('/')[0], bookmark: snapshot.view.camera.split('/')[1], frames: snapshot.view.frames, loop: !!snapshot.view.loop }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\n const queryString = WebRenderV1.buildQuery(request);\n return WebRenderV1.fetch(`${this.server}/ImagesFromAnimation?${queryString}`);\n }\n async image(snapshot) {\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { bookmarkSet: snapshot.view.camera.split('/')[0], bookmark: snapshot.view.camera.split('/')[1] }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\n const queryString = WebRenderV1.buildQuery(request);\n return Promise.resolve(`${this.server}/ImageFromBookmark?${queryString}`);\n }\n async video(snapshot) {\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { animation: snapshot.view.animation, bookmarkSet: snapshot.view.camera.split('/')[0], bookmark: snapshot.view.camera.split('/')[1], duration: snapshot.view.duration, frames: snapshot.view.frames, loop: !!snapshot.view.loop, reverse: !!snapshot.view.reverse }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\n const queryString = WebRenderV1.buildQuery(request);\n return Promise.resolve(`${this.server}/ImagesFromAnimation?${queryString}`);\n }\n async vrCube(snapshot) {\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { bookmarkSet: snapshot.view.camera.split('/')[0], bookmark: snapshot.view.camera.split('/')[1] }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\n request.width = Math.max(request.width, request.height);\n request.height = Math.max(request.width, request.height);\n const queryString = WebRenderV1.buildQuery(request);\n return WebRenderV1.fetch(`${this.server}/CubeFromBookmark?${queryString}`);\n }\n async vrObject(snapshot) {\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { bookmarkSet: snapshot.view.camera }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\n const queryString = WebRenderV1.buildQuery(request);\n return WebRenderV1.fetch(`${this.server}/ImagesFromBookmarkSet?${queryString}`);\n }\n}\nWebRenderV1.xmlRegex = /directUrl=\"([^\"]*)\"/g;\n","import { __rest } from \"tslib\";\nexport class WebRenderV2 {\n constructor(server) {\n this.server = server;\n }\n static scene(snapshot) {\n return snapshot.scene.map(p => {\n const { accessory, decor } = p, pResult = __rest(p, [\"accessory\", \"decor\"]);\n return pResult;\n });\n }\n static renderParameters(snapshot) {\n return Object.assign(Object.assign({}, snapshot.parameters), { superSampling: snapshot.parameters.superSampling.toString() });\n }\n static encoder(snapshot) {\n switch (snapshot.encoder.format) {\n case 'jpeg': return {\n jpeg: {\n quality: snapshot.encoder.quality\n }\n };\n case 'png': return {\n png: {\n compression: snapshot.encoder.compression\n }\n };\n case 'webp': return {\n webp: {\n quality: snapshot.encoder.quality\n }\n };\n }\n return {\n jpeg: {\n quality: 80\n }\n };\n }\n static async fetchFrame(url, body) {\n return fetch(url, { method: 'POST', body: JSON.stringify(body) }).then(response => response.json()).then((data) => {\n return data.url;\n });\n }\n static async fetchFrameArray(url, body) {\n return fetch(url, { method: 'POST', body: JSON.stringify(body) }).then(response => response.json()).then((data) => {\n return data.map(f => f.url);\n });\n }\n static async fetchHotspots(url, body) {\n return fetch(url, { method: 'POST', body: JSON.stringify(body) }).then(response => response.json()).then((data) => {\n return data;\n });\n }\n static async fetchHotspotsArray(url, body) {\n return fetch(url, { method: 'POST', body: JSON.stringify(body) }).then(response => response.json()).then((data) => {\n return data;\n });\n }\n async image(snapshot) {\n const body = {\n scene: WebRenderV2.scene(snapshot),\n mode: {\n image: {\n camera: snapshot.view.camera\n }\n },\n renderParameters: WebRenderV2.renderParameters(snapshot),\n encoder: WebRenderV2.encoder(snapshot)\n };\n return WebRenderV2.fetchFrame(`${this.server}/Snapshot`, body);\n }\n async vrCube(snapshot) {\n const body = {\n scene: WebRenderV2.scene(snapshot),\n mode: {\n vrCube: {\n camera: snapshot.view.camera\n }\n },\n renderParameters: WebRenderV2.renderParameters(snapshot),\n encoder: WebRenderV2.encoder(snapshot)\n };\n body.renderParameters.width = Math.max(body.renderParameters.width, body.renderParameters.height);\n body.renderParameters.height = Math.max(body.renderParameters.width, body.renderParameters.height);\n return WebRenderV2.fetchFrameArray(`${this.server}/Snapshot`, body);\n }\n async vrObject(snapshot) {\n let mode;\n if (snapshot.view.cameraGroup) {\n mode = {\n images: {\n cameraGroup: snapshot.view.cameraGroup\n }\n };\n }\n else {\n if (snapshot.view.frames) {\n mode = {\n vrObject: {\n camera: snapshot.view.camera,\n frames: snapshot.view.frames\n }\n };\n }\n else {\n mode = {\n vrObject: {\n camera: snapshot.view.camera,\n panFrames: snapshot.view.panFrames || 1,\n panFrom: snapshot.view.panFrom || 0,\n panTo: snapshot.view.panTo || 0,\n panLoop: snapshot.view.panLoop || false,\n tiltFrames: snapshot.view.tiltFrames || 1,\n tiltFrom: snapshot.view.tiltFrom || 0,\n tiltTo: snapshot.view.tiltTo || 0,\n tiltLoop: snapshot.view.tiltLoop || false\n }\n };\n }\n }\n const body = {\n scene: WebRenderV2.scene(snapshot),\n mode,\n renderParameters: WebRenderV2.renderParameters(snapshot),\n encoder: WebRenderV2.encoder(snapshot)\n };\n return WebRenderV2.fetchFrameArray(`${this.server}/Snapshot`, body);\n }\n async animation(snapshot) {\n const body = {\n scene: WebRenderV2.scene(snapshot),\n mode: {\n animation: {\n id: snapshot.view.animation,\n camera: snapshot.view.camera,\n fps: snapshot.view.fps,\n }\n },\n renderParameters: WebRenderV2.renderParameters(snapshot),\n encoder: WebRenderV2.encoder(snapshot)\n };\n return WebRenderV2.fetchFrameArray(`${this.server}/Snapshot`, body);\n }\n async imageHotspots(snapshot, tags) {\n const body = {\n scene: WebRenderV2.scene(snapshot),\n mode: {\n image: {\n camera: snapshot.view.camera\n }\n },\n renderParameters: WebRenderV2.renderParameters(snapshot),\n tags: tags\n };\n return await WebRenderV2.fetchHotspots(`${this.server}/Hotspot`, body);\n }\n async vrCubeHotspots(snapshot, tags) {\n const body = {\n scene: WebRenderV2.scene(snapshot),\n mode: {\n vrCube: {\n camera: snapshot.view.camera\n }\n },\n renderParameters: WebRenderV2.renderParameters(snapshot),\n tags\n };\n body.renderParameters.width = Math.max(body.renderParameters.width, body.renderParameters.height);\n body.renderParameters.height = Math.max(body.renderParameters.width, body.renderParameters.height);\n return await WebRenderV2.fetchHotspotsArray(`${this.server}/Hotspot`, body);\n }\n async vrObjectHotspots(snapshot, tags) {\n let mode;\n if (snapshot.view.cameraGroup) {\n mode = {\n images: {\n cameraGroup: snapshot.view.cameraGroup\n }\n };\n }\n else {\n if (snapshot.view.frames) {\n mode = {\n vrObject: {\n camera: snapshot.view.camera,\n frames: snapshot.view.frames\n }\n };\n }\n else {\n mode = {\n vrObject: {\n camera: snapshot.view.camera,\n panFrames: snapshot.view.panFrames || 1,\n panFrom: snapshot.view.panFrom || 0,\n panTo: snapshot.view.panTo || 0,\n panLoop: snapshot.view.panLoop || false,\n tiltFrames: snapshot.view.tiltFrames || 1,\n tiltFrom: snapshot.view.tiltFrom || 0,\n tiltTo: snapshot.view.tiltTo || 0,\n tiltLoop: snapshot.view.tiltLoop || false\n }\n };\n }\n }\n const body = {\n scene: WebRenderV2.scene(snapshot),\n mode,\n renderParameters: WebRenderV2.renderParameters(snapshot),\n tags\n };\n return await WebRenderV2.fetchHotspotsArray(`${this.server}/Hotspot`, body);\n }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Maths } from './Maths';\nimport { WebRenderStatic } from './WebRenderStatic';\nimport { WebRenderV1 } from './WebRenderV1';\nimport { WebRenderV2 } from './WebRenderV2';\nexport class Loader {\n constructor(server, api, delegate) {\n switch (api) {\n case 'static':\n this.webrender = new WebRenderStatic();\n break;\n case 'v1':\n this.webrender = new WebRenderV1(server);\n break;\n case 'v2':\n this.webrender = new WebRenderV2(server);\n break;\n default:\n this.webrender = new WebRenderV1(server);\n break;\n }\n this.delegate = delegate;\n this.loadingId = 0;\n this.loaded = 0;\n this.total = 0;\n this.onLoadStart = delegate && delegate.onLoadStart ? delegate.onLoadStart : (() => { });\n this.onLoadProgress = delegate && delegate.onLoadProgress ? delegate.onLoadProgress : (() => { });\n this.onLoadEnd = delegate && delegate.onLoadEnd ? delegate.onLoadEnd : (() => { });\n }\n get progress() {\n return this.total ? this.loaded / this.total : 0;\n }\n async loadImageSnapshot(snapshot) {\n this.loadingId += 1;\n this.loaded = 0;\n this.total = 1;\n this.onLoadStart(this.progress);\n const { loadingId } = this;\n return this.webrender.image(snapshot).then(src => (this.loadImage(src, loadingId))).then(img => {\n this.onLoadEnd(this.progress);\n return img;\n });\n }\n async loadVideoSnapshot(video, snapshot) {\n this.loadingId += 1;\n this.loaded = 0;\n this.total = 1;\n this.onLoadStart(this.progress);\n const { loadingId } = this;\n return this.webrender.video(snapshot).then(src => (this.loadVideo(video, src, !!snapshot.view.loop, loadingId))).then(() => {\n this.onLoadEnd(this.progress);\n return video;\n });\n }\n async loadVRCubeSnapshot(snapshot) {\n this.loadingId += 1;\n this.loaded = 0;\n this.total = 0;\n this.onLoadStart(this.progress);\n const { loadingId } = this;\n return this.webrender.vrCube(snapshot).then(srcs => {\n this.total = srcs.length;\n const promises = srcs.map(src => this.loadImage(src, loadingId));\n return Promise.all(promises);\n }).then(imgs => {\n this.onLoadEnd(this.progress);\n return imgs;\n });\n }\n async loadVRObjectSnapshot(snapshot, position) {\n var _a;\n this.loadingId += 1;\n this.loaded = 0;\n this.total = 0;\n this.onLoadStart(this.progress);\n const { loadingId } = this;\n if (snapshot.view.animation) {\n if (((_a = snapshot.encoder) === null || _a === void 0 ? void 0 : _a.format) === 'mp4') {\n return this.webrender.video(snapshot).then(src => {\n return this.loadVideoFrames(src, snapshot.view.frames, 30, loadingId);\n });\n }\n else {\n return this.webrender.animation(snapshot).then(srcs => {\n return this.loadImageFrames(srcs, snapshot.view.loop, position, loadingId);\n });\n }\n }\n else {\n return this.webrender.vrObject(snapshot).then(srcs => {\n return this.loadImageFrames(srcs, snapshot.view.loop, position, loadingId);\n });\n }\n }\n async loadImage(src, loadingId) {\n const image = new Image();\n image.crossOrigin = location.protocol === 'file:' && !Loader.isValidHttpUrl(src) ? null : 'anonymous';\n const promise = new Promise((resolve, reject) => {\n image.addEventListener('load', () => {\n if (loadingId !== this.loadingId)\n return;\n this.loaded += 1;\n this.onLoadProgress(this.progress);\n resolve(image);\n }, { once: true });\n image.addEventListener('error', (e) => {\n if (loadingId !== this.loadingId)\n return;\n reject(`${e.type} : ${src}`);\n }, { once: true });\n });\n image.src = src;\n return promise;\n }\n loadImageFrames(srcs, loop, position, loadingId) {\n this.total = srcs.length;\n const promises = new Array(srcs.length);\n const start = position || 0;\n for (let i = 0, n = srcs.length; i < n; i += 1) {\n const step = Math.ceil(i / 2) * (i % 2 === 0 ? 1 : -1);\n const index = loop ? Maths.mod(start + step, n) : i;\n promises[index] = this.loadImage(srcs[index], loadingId);\n }\n Promise.all(promises).then(() => this.onLoadEnd(this.progress)).catch(() => { });\n return promises;\n }\n async loadVideo(video, src, loop, loadingId) {\n video.loop = loop;\n const promise = new Promise((resolve, reject) => {\n video.addEventListener('canplaythrough', () => {\n if (loadingId !== this.loadingId)\n return;\n this.loaded += 1;\n this.onLoadProgress(this.progress);\n resolve();\n }, { once: true });\n video.addEventListener('error', e => {\n if (loadingId !== this.loadingId)\n return;\n reject(`${e.type} : ${src}`);\n }, { once: true });\n });\n video.src = src;\n video.load();\n return promise;\n }\n async loadVideoFrame(video, fps, frames, i, loadingId) {\n let count = 0;\n return new Promise((resolve, reject) => {\n const seeked = () => {\n if (loadingId !== this.loadingId)\n return;\n if (count !== i) {\n count += 1;\n return;\n }\n video.removeEventListener('seeked', seeked);\n const canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n const context = canvas.getContext('2d');\n context.drawImage(video, 0, 0);\n const image = new Image();\n image.src = canvas.toDataURL();\n resolve(image);\n this.loaded += 1;\n this.onLoadProgress(this.progress);\n if (i !== frames - 1) {\n video.currentTime += 1 / fps;\n }\n };\n video.addEventListener('seeked', seeked);\n video.addEventListener('error', e => {\n if (loadingId !== this.loadingId)\n return;\n reject(e);\n }, { once: true });\n });\n }\n loadVideoFrames(src, frames, fps, loadingId) {\n this.total = frames;\n const promises = new Array(frames);\n const video = document.createElement('video');\n for (let i = 0, n = frames; i < n; i += 1) {\n promises[i] = this.loadVideoFrame(video, fps, frames, i, loadingId);\n }\n video.addEventListener('canplaythrough', () => {\n if (loadingId !== this.loadingId)\n return;\n video.currentTime = (1 / fps) / 2;\n }, { once: true });\n video.src = src;\n video.load();\n Promise.all(promises).then(() => this.onLoadEnd(this.progress)).catch(() => { });\n return promises;\n }\n async loadImageHotspots(snapshot, tags) {\n if (!(this.webrender instanceof WebRenderV2)) {\n return Promise.reject(new Error('Hotspots only available with api V2'));\n }\n return await this.webrender.imageHotspots(snapshot, tags);\n }\n async loadVRCubeHotspots(snapshot, tags) {\n if (!(this.webrender instanceof WebRenderV2)) {\n return Promise.reject(new Error('Hotspots only available with api V2'));\n }\n return await this.webrender.vrCubeHotspots(snapshot, tags);\n }\n async loadVRObjectHotspots(snapshot, tags) {\n if (!(this.webrender instanceof WebRenderV2)) {\n return Promise.reject(new Error('Hotspots only available with api V2'));\n }\n return await this.webrender.vrObjectHotspots(snapshot, tags);\n }\n onLoadStart(progress) {\n if (this.delegate) {\n this.delegate.onLoadStart(progress);\n }\n }\n onLoadProgress(progress) {\n if (this.delegate) {\n this.delegate.onLoadProgress(progress);\n }\n }\n onLoadEnd(progress) {\n if (this.delegate) {\n this.delegate.onLoadEnd(progress);\n }\n }\n static isValidHttpUrl(str) {\n let url;\n try {\n url = new URL(str);\n }\n catch (_) {\n return false;\n }\n return url.protocol === \"http:\" || url.protocol === \"https:\";\n }\n}\n","import { Resolution } from './Resolution';\nimport { Viewport } from './Viewport';\nexport class Video {\n constructor() {\n this.element = document.createElement('video');\n this.element.classList.add('ls-viewer-video');\n this.element.style.opacity = '0';\n this.element.width = 0;\n this.element.height = 0;\n this.element.setAttribute('muted', '');\n this.element.setAttribute('playsinline', '');\n this.element.setAttribute('preload', 'auto');\n }\n show() {\n this.element.style.opacity = '1';\n }\n hide() {\n this.element.style.opacity = '0';\n }\n resize(width, height, resolution, fit) {\n const viewport = Viewport.fit(resolution, new Resolution(width, height), fit);\n this.element.style.top = `${viewport.top}px`;\n this.element.style.left = `${viewport.left}px`;\n this.element.style.width = `${viewport.width}px`;\n this.element.style.height = `${viewport.height}px`;\n if (resolution.width !== this.element.width || resolution.height !== this.element.height) {\n this.element.width = resolution.width;\n this.element.height = resolution.height;\n }\n }\n}\n","export class WidgetImage {\n constructor(container, canvas, loader) {\n this.container = container;\n this.canvas = canvas;\n this.loader = loader;\n this.hotspots = [];\n }\n destroy() { }\n show() {\n this.canvas.show(false);\n this.container.classList.add('ls-viewer-container-image');\n }\n hide() {\n this.canvas.hide(false);\n this.container.classList.remove('ls-viewer-container-image');\n }\n async load(snapshot, tags, reset, fade) {\n let promise = Promise.resolve();\n const snapshotHash = JSON.stringify(snapshot);\n if (snapshotHash === this.snapshotHash && this.image) {\n promise = promise.then(() => this.canvas.draw(this.image, fade, 0.05));\n }\n else {\n promise = promise.then(() => this.loader.loadImageSnapshot(snapshot).then(image => {\n this.canvas.draw(image, fade, 0.05);\n this.image = image;\n }));\n }\n const tagsHash = JSON.stringify(tags);\n if (tags.length && (snapshotHash !== this.snapshotHash || tagsHash !== this.tagsHash)) {\n promise = promise.then(() => this.loader.loadImageHotspots(snapshot, tags).then(hotspots => {\n this.hotspots = hotspots;\n }));\n }\n this.snapshotHash = snapshotHash;\n this.tagsHash = tagsHash;\n return promise.then(() => Promise.resolve(this.hotspots));\n }\n snapshot(type, quality) {\n return this.canvas.element.toDataURL(type, quality);\n }\n onMouseDown(e) {\n }\n onMouseMove(e) {\n }\n onMouseUp(e) {\n }\n onMouseEnter(e) {\n }\n onTouchStart(e) {\n }\n onTouchMove(e) {\n }\n onTouchEnd(e) {\n }\n onDeviceOrientation(e) {\n }\n}\n","export class WidgetVideo {\n constructor(container, video, loader) {\n this.container = container;\n this.loader = loader;\n this.video = video;\n }\n destroy() { }\n show() {\n this.video.show();\n this.container.classList.add('ls-viewer-container-video');\n }\n hide() {\n this.video.hide();\n this.container.classList.remove('ls-viewer-container-video');\n }\n async load(snapshot) {\n const hash = JSON.stringify(snapshot);\n if (hash === this.hash) {\n this.video.element.load();\n return Promise.resolve([]);\n }\n this.hash = hash;\n return this.loader.loadVideoSnapshot(this.video.element, snapshot).then(() => Promise.resolve([]));\n }\n snapshot(type, quality) {\n return 'data:image/gif;base64,R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';\n }\n async play() {\n return new Promise((resolve, reject) => {\n this.video.element.addEventListener('ended', () => {\n resolve();\n }, { once: true });\n this.video.element.play().catch(reject);\n this.show();\n });\n }\n onMouseDown(e) {\n }\n onMouseMove(e) {\n }\n onMouseUp(e) {\n }\n onMouseEnter(e) {\n }\n onTouchStart(e) {\n }\n onTouchMove(e) {\n }\n onTouchEnd(e) {\n }\n onDeviceOrientation(e) {\n }\n}\n","export class Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n clone() {\n return new Point(this.x, this.y);\n }\n}\n","import { Point } from './Point';\nexport class EventHelper {\n static pointFromMouseEvent(e) {\n return new Point(e.screenX, e.screenY);\n }\n static pointFromTouchEvent(e) {\n const touch = e.targetTouches[0] || e.changedTouches[0];\n return new Point(touch.screenX, touch.screenY);\n }\n}\n","import { m4, v3 } from 'twgl.js';\nexport class Basis3 {\n constructor(...args) {\n if (args.length === 3) {\n ({ 0: this.u, 1: this.v, 2: this.o } = args);\n this.w = v3.cross(this.u, this.v);\n }\n else if (args.length === 4) {\n ({ 0: this.u, 1: this.v, 2: this.w, 3: this.o } = args);\n }\n else {\n this.u = [1, 0, 0];\n this.v = [0, 1, 0];\n this.w = [0, 0, 1];\n this.o = [0, 0, 0];\n }\n }\n get localToGlobalMatrix() {\n const X = [this.u[0], this.u[1], this.u[2], 0.0];\n const Y = [this.v[0], this.v[1], this.v[2], 0.0];\n const Z = [this.w[0], this.w[1], this.w[2], 0.0];\n const W = [this.o[0], this.o[1], this.o[2], 1.0];\n return [...X, ...Y, ...Z, ...W];\n }\n get globalToLocalMatrix() {\n return m4.inverse(this.localToGlobalMatrix);\n }\n}\n","export class InertiaPoint {\n constructor(x, y, time) {\n this.x = x;\n this.y = y;\n this.time = time;\n }\n}\n","import { InertiaPoint } from './InertiaPoint';\nimport { Point } from './Point';\nexport class Inertia {\n constructor(onMotion) {\n this.points = [];\n this.onMotion = onMotion;\n this.lastPoint = new Point(0.0, 0.0);\n this.velocity = new Point(0.0, 0.0);\n this.loop = this.loop.bind(this);\n }\n destroy() {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n }\n track(point) {\n const time = Date.now();\n this.points = this.points.filter(p => time - p.time <= 100);\n this.points.push(new InertiaPoint(point.x, point.y, time));\n this.lastPoint = point;\n }\n start() {\n if (this.points.length === 0) {\n return;\n }\n const firstPoint = this.points[0];\n const lastPoint = this.points[this.points.length - 1];\n const dx = lastPoint.x - firstPoint.x;\n const dy = lastPoint.y - firstPoint.y;\n const dt = lastPoint.time - firstPoint.time;\n this.velocity = new Point(dt === 0 ? 0 : dx / (dt / 15), dt === 0 ? 0 : dy / (dt / 15));\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n this.animationFrameId = requestAnimationFrame(this.loop);\n }\n stop() {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n this.points = [];\n }\n loop() {\n if ((Math.abs(this.velocity.x) < 1 && Math.abs(this.velocity.y) < 1)) {\n this.animationFrameId = undefined;\n this.points = [];\n return;\n }\n this.lastPoint.x += this.velocity.x;\n this.lastPoint.y += this.velocity.y;\n this.velocity.x *= 0.9;\n this.velocity.y *= 0.9;\n this.onMotion(this.lastPoint.clone());\n this.animationFrameId = requestAnimationFrame(this.loop);\n }\n}\n","import { m4, v3 } from 'twgl.js';\nexport class PointOfView {\n constructor(target, eye, up) {\n this.target = v3.copy(target);\n this.eye = v3.copy(eye);\n this.up = v3.copy(up);\n }\n get viewVector() {\n return v3.subtract(this.target, this.eye);\n }\n get rightVector() {\n return v3.normalize(v3.cross(this.viewVector, this.up));\n }\n get viewMatrix() {\n return m4.inverse(m4.lookAt(this.eye, this.target, this.up));\n }\n clone() {\n return new PointOfView(v3.copy(this.target), v3.copy(this.eye), v3.copy(this.up));\n }\n}\nPointOfView.default = new PointOfView([0.0, 0.0, 0.0], [2.0, 2.0, 2.0], [0.0, 1.0, 0.0]);\n","import { m4, v3 } from 'twgl.js';\nimport { Basis3 } from './Basis3';\nimport { Inertia } from './Inertia';\nimport { Maths } from './Maths';\nimport { Point } from './Point';\nimport { PointOfView } from './PointOfView';\nexport class InteractiveCamera {\n constructor(pov, fov, onMotion) {\n this.isStarted = false;\n this.pov = pov;\n this.fov = Maths.degreesToRadians(fov);\n this.orientationMatrix = m4.identity();\n this.inertia = new Inertia(this.motion.bind(this));\n this.onMotion = onMotion;\n this.initPov = this.pov;\n this.initFov = this.fov;\n this.initOrientation = Maths.degreesToRadians(window.orientation) || 0;\n this.startPov = new PointOfView([0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0]);\n this.startSize = { width: 0.0, height: 0.0 };\n this.previousPoint = new Point(0.0, 0.0);\n }\n destroy() {\n this.inertia.destroy();\n }\n get orientedPov() {\n const viewVector = v3.normalize(v3.cross(this.pov.up, this.pov.target));\n const headBasis = new Basis3(viewVector, [0.0, 1.0, 0.0], this.pov.eye);\n const matrix = m4.identity();\n m4.multiply(matrix, headBasis.localToGlobalMatrix, matrix);\n m4.multiply(matrix, this.orientationMatrix, matrix);\n m4.multiply(matrix, headBasis.globalToLocalMatrix, matrix);\n const target = m4.transformDirection(matrix, this.pov.target);\n const eye = this.pov.eye;\n const up = m4.transformDirection(matrix, this.pov.up);\n return new PointOfView(target, eye, up);\n }\n reset() {\n this.pov = this.initPov.clone();\n this.fov = this.initFov;\n }\n start(point, size) {\n this.isStarted = true;\n this.startPov = this.pov;\n this.startSize = size;\n this.previousPoint = point;\n this.inertia.stop();\n }\n motion(point) {\n if (this.isStarted) {\n this.inertia.track(point);\n }\n const delta = {\n x: point.x - this.previousPoint.x,\n y: point.y - this.previousPoint.y,\n };\n const dx = (Maths.accelerate(delta.x, 1.3) / this.startSize.width) * 0.2 * Math.PI * 1.5;\n const dy = (Maths.accelerate(delta.y, 1.3) / this.startSize.height) * 0.2 * Math.PI;\n const rotationMatrix = m4.multiply(m4.rotationY(-dx), m4.rotationX(-dy));\n const viewVector = v3.normalize(v3.cross(this.pov.up, this.pov.target));\n const headBasis = new Basis3(viewVector, [0.0, 1.0, 0.0], this.pov.eye);\n const headMatrix = m4.identity();\n m4.multiply(headMatrix, headBasis.localToGlobalMatrix, headMatrix);\n m4.multiply(headMatrix, rotationMatrix, headMatrix);\n m4.multiply(headMatrix, headBasis.globalToLocalMatrix, headMatrix);\n const target = m4.transformPoint(headMatrix, this.pov.target);\n const up = m4.transformDirection(headMatrix, this.pov.up);\n if (v3.cross(up, [0, 0, 1])[0] >= 0) {\n this.pov.target = target;\n this.pov.up = up;\n }\n this.previousPoint = point;\n this.onMotion();\n }\n end(point, inertia) {\n this.isStarted = false;\n if (inertia) {\n this.inertia.track(point);\n this.inertia.start();\n }\n }\n orientation(alpha, beta, gamma) {\n const orientation = Maths.degreesToRadians(window.orientation) || 0;\n const alphaRadians = Maths.degreesToRadians(alpha);\n const betaRadians = Maths.degreesToRadians(-beta);\n const gammaRadians = Maths.degreesToRadians(-gamma);\n const matrix = m4.rotationX(Maths.degreesToRadians(90));\n m4.rotateZ(matrix, this.initOrientation, matrix);\n m4.rotateZ(matrix, alphaRadians, matrix);\n m4.rotateX(matrix, betaRadians, matrix);\n m4.rotateY(matrix, gammaRadians, matrix);\n m4.rotateZ(matrix, -orientation, matrix);\n this.orientationMatrix = matrix;\n this.onMotion();\n }\n}\n","import * as twgl from 'twgl.js';\nimport { m4, v3 } from 'twgl.js';\nimport { EventHelper } from './EventHelper';\nimport { InteractiveCamera } from './InteractiveCamera';\nimport { Maths } from './Maths';\nimport { PointOfView } from './PointOfView';\nimport { Viewport } from './Viewport';\nimport WidgetVRCubeFragmentShader from './WidgetVRCube.frag';\nimport WidgetVRCubeVertexShader from './WidgetVRCube.vert';\nexport class WidgetVRCube {\n constructor(container, canvas, loader, onInteraction) {\n this.container = container;\n this.canvas = canvas;\n this.loader = loader;\n this.images = [];\n this.hotspotsList = [[]];\n const pov = new PointOfView([0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0]);\n const fov = 60;\n const rotationMatrix = m4.rotationX(Maths.degreesToRadians(15));\n m4.transformDirection(rotationMatrix, pov.target, pov.target);\n m4.transformDirection(rotationMatrix, pov.up, pov.up);\n this.interaction = new InteractiveCamera(pov, fov, () => {\n this.animationFrameId = requestAnimationFrame(this.render);\n this.onInteraction({\n pov: this.interaction.pov.clone(),\n fov: this.interaction.fov\n });\n });\n this.onInteraction = onInteraction;\n this.gl = this.canvas.context;\n this.programInfo = twgl.createProgramInfo(this.gl, [`${WidgetVRCubeVertexShader}\\n`, `${WidgetVRCubeFragmentShader}\\n`]);\n this.quad = twgl.primitives.createXYQuadBufferInfo(this.gl);\n this.uniforms = {\n u_matrix: m4.identity(),\n u_mix: 0.0,\n u_texture_back: twgl.createTexture(this.gl, {\n target: this.gl.TEXTURE_CUBE_MAP,\n minMag: this.gl.LINEAR,\n width: 1,\n height: 1,\n }),\n u_texture: twgl.createTexture(this.gl, {\n target: this.gl.TEXTURE_CUBE_MAP,\n minMag: this.gl.LINEAR,\n width: 1,\n height: 1,\n }),\n };\n this.render = this.render.bind(this);\n }\n destroy() {\n this.interaction.destroy();\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n }\n show() {\n this.canvas.show();\n this.container.classList.add('ls-viewer-container-vrcube');\n }\n hide() {\n this.canvas.hide();\n this.container.classList.remove('ls-viewer-container-vrcube');\n }\n get pov() {\n return this.interaction.pov;\n }\n set pov(pov) {\n if (this.interaction.pov.eye.every((v, i) => v === pov.eye[i])\n && this.interaction.pov.target.every((v, i) => v === pov.target[i])\n && this.interaction.pov.up.every((v, i) => v === pov.up[i])) {\n return;\n }\n this.interaction.pov = pov.clone();\n this.animationFrameId = requestAnimationFrame(this.render);\n }\n get fov() {\n return Maths.radiansToDegrees(this.interaction.fov);\n }\n set fov(fov) {\n if (this.interaction.fov === fov) {\n return;\n }\n this.interaction.fov = Maths.degreesToRadians(fov);\n this.animationFrameId = requestAnimationFrame(this.render);\n }\n get hotspots() {\n const result = [];\n this.hotspotsList.flat();\n const width = this.canvas.element.clientWidth;\n const height = this.canvas.element.clientHeight;\n const modelViewProjectionMatrix = m4.inverse(this.modelViewProjectionMatrix);\n this.hotspotsList.forEach((hotspots, i) => {\n hotspots.forEach(hotspot => {\n const s = hotspot.position2D.x / this.images[0].width;\n const t = hotspot.position2D.y / this.images[0].height;\n let rx = 0;\n let ry = 0;\n let rz = 0;\n switch (i) {\n case 0:\n if (this.pov.target[2] < 0) {\n return;\n }\n rx = (2 * s - 1);\n ry = (2 * t - 1) * -1;\n rz = 1;\n break;\n case 1:\n if (this.pov.target[0] < 0) {\n return;\n }\n rx = 1;\n ry = (2 * t - 1) * -1;\n rz = (1 - 2 * s);\n break;\n case 2:\n if (this.pov.target[2] > 0) {\n return;\n }\n rx = (1 - 2 * s);\n ry = (2 * t - 1) * -1;\n rz = -1;\n break;\n case 3:\n if (this.pov.target[0] > 0) {\n return;\n }\n rx = -1;\n ry = (2 * t - 1) * -1;\n rz = (2 * s - 1);\n break;\n case 4:\n if (this.pov.target[1] < 0) {\n return;\n }\n rx = (2 * s - 1);\n ry = 1;\n rz = (2 * t - 1);\n break;\n case 5:\n if (this.pov.target[1] > 0) {\n return;\n }\n rx = (2 * s - 1);\n ry = -1;\n rz = (2 * t - 1) * -1;\n break;\n }\n const point3D = v3.normalize([rx, ry, rz]);\n const point2D = m4.transformPoint(modelViewProjectionMatrix, point3D);\n const position2D = {\n x: width - 0.5 * width * (point2D[0] + 1),\n y: height - 0.5 * height * (point2D[1] + 1)\n };\n result.push(Object.assign(Object.assign({}, hotspot), { position2D }));\n });\n });\n return result;\n }\n async load(snapshot, tags, reset, fade) {\n let promise = Promise.resolve();\n const snapshotHash = JSON.stringify(snapshot);\n if (snapshotHash === this.snapshotHash) {\n promise = promise.then(() => { this.animationFrameId = requestAnimationFrame(this.render); return Promise.resolve(); });\n }\n else {\n this.images = [];\n this.animationFrameId = requestAnimationFrame(this.render);\n promise = promise.then(() => this.loader.loadVRCubeSnapshot(snapshot).then(images => {\n this.images = images;\n twgl.createTexture(this.gl, {\n target: this.gl.TEXTURE_CUBE_MAP,\n minMag: this.gl.LINEAR_MIPMAP_LINEAR,\n cubeFaceOrder: [\n this.gl.TEXTURE_CUBE_MAP_POSITIVE_Z,\n this.gl.TEXTURE_CUBE_MAP_POSITIVE_X,\n this.gl.TEXTURE_CUBE_MAP_NEGATIVE_Z,\n this.gl.TEXTURE_CUBE_MAP_NEGATIVE_X,\n this.gl.TEXTURE_CUBE_MAP_POSITIVE_Y,\n this.gl.TEXTURE_CUBE_MAP_NEGATIVE_Y,\n ],\n src: images,\n }, (err, texture) => {\n if (err) {\n return;\n }\n if (reset) {\n this.interaction.reset();\n }\n this.uniforms.u_mix = fade ? 0.0 : 1.0;\n this.uniforms.u_texture_back = this.uniforms.u_texture;\n this.uniforms.u_texture = texture;\n this.animationFrameId = requestAnimationFrame(this.render);\n });\n }));\n }\n const tagsHash = JSON.stringify(tags);\n if (tags.length && (snapshotHash !== this.snapshotHash || tagsHash !== this.tagsHash)) {\n promise = promise.then(() => this.loader.loadVRCubeHotspots(snapshot, tags).then(hotspots => {\n this.hotspotsList = hotspots;\n }));\n }\n this.snapshotHash = snapshotHash;\n this.tagsHash = tagsHash;\n return promise.then(() => Promise.resolve(this.hotspots));\n }\n snapshot(type, quality) {\n return this.canvas.element.toDataURL(type, quality);\n }\n get modelViewProjectionMatrix() {\n const width = this.canvas.element.clientWidth;\n const height = this.canvas.element.clientHeight;\n const aspect = width > height ? width / height : height / width;\n const standardAspectRatio = Viewport.getStandardAspectRatio(width, height);\n const fov = this.interaction.fov * (standardAspectRatio / aspect);\n const projectionMatrix = width > height ? Maths.perspectiveWithFovY(fov, width / height, 0.5, 100) : Maths.perspectiveWithFovX(fov, width / height, 0.5, 100);\n const projectionMatrixInverse = m4.inverse(projectionMatrix);\n const pov = this.interaction.orientedPov;\n const viewMatrixInverse = m4.lookAt(pov.eye, pov.target, pov.up);\n return m4.multiply(viewMatrixInverse, projectionMatrixInverse);\n }\n render() {\n this.gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);\n this.uniforms.u_matrix = this.modelViewProjectionMatrix;\n this.gl.useProgram(this.programInfo.program);\n twgl.setBuffersAndAttributes(this.gl, this.programInfo, this.quad);\n twgl.setUniforms(this.programInfo, this.uniforms);\n twgl.drawBufferInfo(this.gl, this.quad);\n if (this.uniforms.u_mix < 1.0) {\n this.uniforms.u_mix = Math.min(this.uniforms.u_mix + 0.05, 1.0);\n this.animationFrameId = requestAnimationFrame(this.render);\n }\n }\n onMouseDown(e) {\n this.container.classList.add('ls-viewer-container-vrcube-grabbing');\n this.interaction.start(EventHelper.pointFromMouseEvent(e), {\n width: this.gl.canvas.width,\n height: this.gl.canvas.height,\n });\n }\n onMouseMove(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.interaction.motion(EventHelper.pointFromMouseEvent(e));\n e.preventDefault();\n }\n onMouseUp(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.container.classList.remove('ls-viewer-container-vrcube-grabbing');\n this.interaction.end(EventHelper.pointFromMouseEvent(e), true);\n }\n onMouseEnter(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n if (e.buttons === 0) {\n this.container.classList.remove('ls-viewer-container-vrcube-grabbing');\n this.interaction.end(EventHelper.pointFromMouseEvent(e), false);\n }\n }\n onTouchStart(e) {\n this.container.classList.add('ls-viewer-container-vrcube-grabbing');\n this.interaction.start(EventHelper.pointFromTouchEvent(e), {\n width: this.gl.canvas.width,\n height: this.gl.canvas.height,\n });\n }\n onTouchMove(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.interaction.motion(EventHelper.pointFromTouchEvent(e));\n e.preventDefault();\n }\n onTouchEnd(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.container.classList.remove('ls-viewer-container-vrcube-grabbing');\n this.interaction.end(EventHelper.pointFromTouchEvent(e), true);\n }\n onDeviceOrientation(e) {\n this.interaction.orientation(e.alpha, e.beta, e.gamma);\n }\n}\n","import regression from 'regression';\nimport { Inertia } from './Inertia';\nimport { Maths } from './Maths';\nimport { Point } from './Point';\nexport class InteractivePosition {\n constructor(position, frames, rows, loop, onMotion) {\n this.isStarted = false;\n this.position = position;\n this.frames = frames;\n this.rows = rows;\n this.loop = loop;\n this.onMotion = onMotion;\n this.inertia = new Inertia(this.motion.bind(this));\n this.initPosition = this.position;\n this.startPosition = { x: 0.0, y: 0.0 };\n this.startPoint = new Point(0.0, 0.0);\n this.startSize = { width: 0.0, height: 0.0 };\n this.lastPoints = [];\n this.lastPointsNumber = 20;\n }\n destroy() {\n this.inertia.destroy();\n }\n reset() {\n this.position = this.initPosition;\n }\n get positionIndex() {\n return this.frames * this.position.y + this.position.x;\n }\n set positionIndex(index) {\n if (this.positionIndex === index) {\n return;\n }\n const positionIndex = this.loop ? Maths.mod(index, this.frames * this.rows) : Math.max(0, Math.min(index, this.frames * this.rows));\n this.position.x = Maths.mod(positionIndex, this.frames);\n this.position.y = Math.floor(positionIndex / this.frames);\n }\n start(point, size) {\n this.isStarted = true;\n this.startPosition = Object.assign({}, this.position);\n this.startPoint = point;\n this.startSize = size;\n this.lastPoints = [];\n this.inertia.stop();\n }\n motion(point) {\n if (this.isStarted) {\n this.inertia.track(point);\n }\n this.lastPoints.push({ x: point.x, y: point.y });\n this.lastPoints.splice(0, this.lastPoints.length - this.lastPointsNumber);\n const regressionResult = regression.linear(this.lastPoints.map(p => [p.x, p.y]));\n const minDistance = 25;\n if (Math.abs(regressionResult.equation[0]) < 1) {\n const dx = (Maths.accelerate(point.x - this.startPoint.x, 1.3) / this.startSize.width) * (this.frames / 4);\n let positionX = this.startPosition.x - Math.round(dx);\n positionX = this.loop ? Maths.mod(positionX, this.frames) : Math.max(0, Math.min(positionX, this.frames - 1));\n if (positionX !== this.position.x) {\n this.position.x = positionX;\n this.onMotion();\n }\n const minX = Math.min(...this.lastPoints.map(p => p.x));\n const maxX = Math.max(...this.lastPoints.map(p => p.x));\n if (maxX - minX > minDistance) {\n this.startPoint.y = point.y;\n this.startPosition.y = this.position.y;\n }\n }\n else {\n const dy = (Maths.accelerate(point.y - this.startPoint.y, 1.7) / this.startSize.height) * (this.rows / 4);\n let positionY = this.startPosition.y + Math.round(dy);\n positionY = Math.max(0, Math.min(positionY, this.rows - 1));\n if (positionY !== this.position.y) {\n this.position.y = positionY;\n this.onMotion();\n }\n const minY = Math.min(...this.lastPoints.map(p => p.y));\n const maxY = Math.max(...this.lastPoints.map(p => p.y));\n if (maxY - minY > minDistance) {\n this.startPoint.x = point.x;\n this.startPosition.x = this.position.x;\n }\n }\n }\n end(point, inertia) {\n this.isStarted = false;\n if (inertia) {\n this.inertia.track(point);\n this.inertia.start();\n }\n }\n}\n","import { EventHelper } from './EventHelper';\nimport { InteractivePosition } from './InteractivePosition';\nexport class WidgetVRObject {\n constructor(container, canvas, loader, onInteraction) {\n this.container = container;\n this.canvas = canvas;\n this.loader = loader;\n this.images = [];\n this.frames = 24;\n this.hotspotsList = [[]];\n this.interaction = new InteractivePosition({ x: 0, y: 0 }, 1, 1, false, () => {\n this.canvas.draw(this.image, true, 0.5);\n this.onInteraction({\n position: this.interaction.positionIndex\n });\n });\n this.onInteraction = onInteraction;\n }\n destroy() {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n }\n show() {\n this.canvas.show(false);\n this.container.classList.add('ls-viewer-container-vrobject');\n }\n hide() {\n this.canvas.hide(false);\n this.container.classList.remove('ls-viewer-container-vrobject');\n }\n async goto(position) {\n return new Promise((resolve) => {\n let pos = this.interaction.positionIndex;\n const goToLoop = () => {\n if (this.interaction.positionIndex === position) {\n resolve();\n }\n else {\n let sign = pos > position ? -1 : 1;\n if (this.interaction.loop) {\n if (((this.interaction.frames - pos) + position) < Math.abs(position - pos)) {\n sign *= -1;\n }\n }\n pos += 0.5 * sign;\n this.position = Math.floor(pos);\n this.animationFrameId = requestAnimationFrame(goToLoop);\n }\n };\n this.animationFrameId = requestAnimationFrame(goToLoop);\n });\n }\n get position() {\n return this.interaction.positionIndex;\n }\n set position(position) {\n this.interaction.positionIndex = position;\n this.canvas.draw(this.image, true, 0.5);\n }\n get image() {\n return this.images[this.interaction.positionIndex];\n }\n get hotspots() {\n return this.hotspotsList[this.interaction.positionIndex] || [];\n }\n async load(snapshot, tags, reset, fade) {\n let promise = Promise.resolve();\n if (reset) {\n this.interaction.reset();\n }\n const snapshotHash = JSON.stringify(snapshot);\n if (snapshotHash === this.snapshotHash && this.image) {\n promise = promise.then(() => this.canvas.draw(this.image, fade, 0.05));\n }\n else {\n this.images = [];\n promise = promise.then(() => this.loader.loadVRObjectSnapshot(snapshot, this.interaction.positionIndex).then(promises => {\n const frames = promises.length;\n this.images = new Array(frames);\n this.interaction.frames = snapshot.view.frames || this.frames;\n this.interaction.rows = frames / this.interaction.frames;\n this.interaction.loop = !!snapshot.view.loop;\n if (reset) {\n this.interaction.reset();\n }\n promises.forEach((promise, i) => {\n promise.then((img) => {\n this.images[i] = img;\n if (img === this.image) {\n this.canvas.draw(this.image, fade, 0.05);\n }\n }).catch(() => { });\n });\n return promises[this.interaction.positionIndex].then(() => Promise.resolve());\n }));\n }\n const tagsHash = JSON.stringify(tags);\n if (tags.length && (snapshotHash !== this.snapshotHash || tagsHash !== this.tagsHash)) {\n promise = promise.then(() => this.loader.loadVRObjectHotspots(snapshot, tags).then(hotspots => {\n this.hotspotsList = hotspots;\n }));\n }\n this.snapshotHash = snapshotHash;\n this.tagsHash = tagsHash;\n return promise.then(() => Promise.resolve(this.hotspots));\n }\n snapshot(type, quality) {\n return this.canvas.element.toDataURL(type, quality);\n }\n onMouseDown(e) {\n this.container.classList.add('ls-viewer-container-vrobject-grabbing');\n this.interaction.start(EventHelper.pointFromMouseEvent(e), {\n width: this.canvas.element.width,\n height: this.canvas.element.height,\n });\n }\n onMouseMove(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.interaction.motion(EventHelper.pointFromMouseEvent(e));\n e.preventDefault();\n }\n onMouseUp(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.container.classList.remove('ls-viewer-container-vrobject-grabbing');\n this.interaction.end(EventHelper.pointFromMouseEvent(e), true);\n }\n onMouseEnter(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n if (e.buttons === 0) {\n this.container.classList.remove('ls-viewer-container-vrobject-grabbing');\n this.interaction.end(EventHelper.pointFromMouseEvent(e), false);\n }\n }\n onTouchStart(e) {\n this.container.classList.add('ls-viewer-container-vrobject-grabbing');\n this.interaction.start(EventHelper.pointFromTouchEvent(e), {\n width: this.canvas.element.width,\n height: this.canvas.element.height,\n });\n }\n onTouchMove(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.interaction.motion(EventHelper.pointFromTouchEvent(e));\n e.preventDefault();\n }\n onTouchEnd(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.container.classList.remove('ls-viewer-container-vrobject-grabbing');\n this.interaction.end(EventHelper.pointFromTouchEvent(e), true);\n }\n onDeviceOrientation(e) {\n }\n}\n","export var WRAPIv2;\n(function (WRAPIv2) {\n let SunShadowQualityMode;\n (function (SunShadowQualityMode) {\n SunShadowQualityMode[\"VeryLow\"] = \"veryLow\";\n SunShadowQualityMode[\"Low\"] = \"low\";\n SunShadowQualityMode[\"Medium\"] = \"medium\";\n SunShadowQualityMode[\"Fine\"] = \"fine\";\n SunShadowQualityMode[\"Ultra\"] = \"ultra\";\n })(SunShadowQualityMode = WRAPIv2.SunShadowQualityMode || (WRAPIv2.SunShadowQualityMode = {}));\n let SunShadowSmoothnessMode;\n (function (SunShadowSmoothnessMode) {\n SunShadowSmoothnessMode[\"None\"] = \"none\";\n SunShadowSmoothnessMode[\"Weak\"] = \"weak\";\n SunShadowSmoothnessMode[\"Normal\"] = \"normal\";\n SunShadowSmoothnessMode[\"Fine\"] = \"fine\";\n SunShadowSmoothnessMode[\"UltraFine\"] = \"ultraFine\";\n SunShadowSmoothnessMode[\"Max\"] = \"max\";\n })(SunShadowSmoothnessMode = WRAPIv2.SunShadowSmoothnessMode || (WRAPIv2.SunShadowSmoothnessMode = {}));\n let SunUseCaseMode;\n (function (SunUseCaseMode) {\n SunUseCaseMode[\"Manual\"] = \"manual\";\n SunUseCaseMode[\"ExtractedFromEnv\"] = \"extractedFromEnv\";\n })(SunUseCaseMode = WRAPIv2.SunUseCaseMode || (WRAPIv2.SunUseCaseMode = {}));\n})(WRAPIv2 || (WRAPIv2 = {}));\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import debounce from 'debounce-promise';\nimport { Canvas2D } from './Canvas2D';\nimport { Canvas3D } from './Canvas3D';\nimport { Loader } from './Loader';\nimport { Resolution } from './Resolution';\nimport { Video } from './Video';\nimport { Viewport } from './Viewport';\nimport { WidgetImage } from './WidgetImage';\nimport { WidgetVideo } from './WidgetVideo';\nimport { WidgetVRCube } from './WidgetVRCube';\nimport { WidgetVRObject } from './WidgetVRObject';\nimport './index.css';\nexport class Viewer {\n constructor(container, options) {\n this.checkResize = this.checkResize.bind(this);\n this.onDeviceOrientation = this.onDeviceOrientation.bind(this);\n this.onResize = this.onResize.bind(this);\n this.onMouseDown = this.onMouseDown.bind(this);\n this.onMouseMove = this.onMouseMove.bind(this);\n this.onMouseUp = this.onMouseUp.bind(this);\n this.onMouseEnter = this.onMouseEnter.bind(this);\n this.onTouchStart = this.onTouchStart.bind(this);\n this.onTouchMove = this.onTouchMove.bind(this);\n this.onTouchEnd = this.onTouchEnd.bind(this);\n this.onLoadStart = this.onLoadStart.bind(this);\n this.onLoadProgress = this.onLoadProgress.bind(this);\n this.onLoadEnd = this.onLoadEnd.bind(this);\n this.onLoadError = this.onLoadError.bind(this);\n this.onHotspotsChange = this.onHotspotsChange.bind(this);\n this.onVrcubeInteraction = this.onVrcubeInteraction.bind(this);\n this.onVrobjectInteraction = this.onVrobjectInteraction.bind(this);\n this.options = Object.assign({ server: 'localhost', api: 'v1', fit: 'cover', image: {}, video: {}, vrcube: {}, vrobject: {}, events: {} }, options);\n this.options.events = Object.assign({ onLoadStart: (() => { }), onLoadProgress: (() => { }), onLoadEnd: (() => { }), onLoadError: (() => { }), onInteraction: (() => { }), onVrcubeInteraction: (() => { }), onVrobjectInteraction: (() => { }), onHotspotsChange: (() => { }) }, options.events);\n this.options.events.onLoadError = debounce(this.options.events.onLoadError, 10);\n this.container = container;\n this.container.classList.add('ls-viewer-container');\n this.containerWidth = 0;\n this.containerHeight = 0;\n this.canvas2D = new Canvas2D(this.options.fit);\n this.container.appendChild(this.canvas2D.element);\n this.canvas3D = new Canvas3D();\n this.container.appendChild(this.canvas3D.element);\n this.video = new Video();\n this.container.appendChild(this.video.element);\n this.loader = new Loader(this.options.server, this.options.api, this);\n this.resolution = new Resolution(0, 0);\n this.parameters = {\n width: 0,\n height: 0,\n antialiasing: false,\n superSampling: 2\n };\n this.encoder = {\n format: 'jpeg',\n quality: 80,\n };\n this.widgetImage = new WidgetImage(container, this.canvas2D, this.loader);\n this.widgetVideo = new WidgetVideo(container, this.video, this.loader);\n this.widgetVRCube = new WidgetVRCube(container, this.canvas3D, this.loader, this.onVrcubeInteraction);\n this.widgetVRObject = new WidgetVRObject(container, this.canvas2D, this.loader, this.onVrobjectInteraction);\n this.widget = this.widgetImage;\n this.isDestroyed = false;\n this.container.addEventListener('mousedown', this.onMouseDown);\n this.container.addEventListener('mouseenter', this.onMouseEnter);\n this.container.addEventListener('touchstart', this.onTouchStart);\n document.addEventListener('mousemove', this.onMouseMove, { passive: false });\n document.addEventListener('mouseup', this.onMouseUp);\n document.addEventListener('touchmove', this.onTouchMove, { passive: false });\n document.addEventListener('touchend', this.onTouchEnd);\n this.loadWidget = debounce(this.loadWidget, 10);\n this.onResize = debounce(this.onResize, 250);\n requestAnimationFrame(this.checkResize);\n }\n destroy() {\n this.canvas2D.destroy();\n this.container.removeEventListener('mousedown', this.onMouseDown);\n this.container.removeEventListener('mouseenter', this.onMouseEnter);\n this.container.removeEventListener('touchstart', this.onTouchStart);\n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('mouseup', this.onMouseUp);\n document.removeEventListener('touchmove', this.onTouchMove);\n document.removeEventListener('touchend', this.onTouchEnd);\n this.isDestroyed = true;\n }\n async load(scene, transition) {\n let promise = Promise.resolve();\n if (transition === null || transition === void 0 ? void 0 : transition.animation) {\n promise = promise.then(() => this.loadAnimation(transition.animation));\n }\n if (this.view && (transition === null || transition === void 0 ? void 0 : transition.fromPosition) !== undefined && this.viewWidget instanceof WidgetVRObject) {\n const mode = this.view.mode;\n promise = promise.then(() => this.viewWidget.goto(transition.fromPosition));\n }\n if (transition === null || transition === void 0 ? void 0 : transition.animation) {\n promise = promise.then(() => this.widgetVideo.play());\n }\n promise = promise.then(() => {\n this.scene = Array.isArray(scene) ? [...scene] : [scene];\n return this.loadWidget(false, !(transition && transition.animation));\n });\n promise.catch((e) => {\n this.onLoadError(e);\n });\n return promise;\n }\n async setEncoder(encoder) {\n this.encoder = Object.assign({}, encoder);\n let promise = Promise.resolve();\n promise = promise.then(() => this.loadWidget(false, true));\n promise.catch((e) => {\n this.onLoadError(e);\n });\n return promise;\n }\n setParameters(parameters) {\n this.parameters = Object.assign({}, parameters);\n this.parameters.width = this.resolution.width;\n this.parameters.height = this.resolution.height;\n let promise = Promise.resolve();\n promise = promise.then(() => this.loadWidget(false, true));\n promise.catch((e) => {\n this.onLoadError(e);\n });\n return promise;\n }\n setTags(tags) {\n this.tags = tags;\n this.loadWidget(false, false);\n }\n async setView(view, transition) {\n let promise = Promise.resolve();\n if (transition === null || transition === void 0 ? void 0 : transition.animation) {\n promise = promise.then(() => this.loadAnimation(transition.animation));\n }\n if (this.view && (transition === null || transition === void 0 ? void 0 : transition.fromPosition) !== undefined && this.viewWidget instanceof WidgetVRObject) {\n promise = promise.then(() => this.viewWidget.goto(transition.fromPosition));\n }\n if (transition === null || transition === void 0 ? void 0 : transition.animation) {\n promise = promise.then(() => this.widgetVideo.play());\n }\n promise = promise.then(() => {\n let reset = true;\n this.view = Object.assign({}, view);\n if (this.view && this.viewWidget instanceof WidgetVRObject && (transition === null || transition === void 0 ? void 0 : transition.toPosition) !== undefined) {\n reset = false;\n this.viewWidget.position = transition.toPosition;\n }\n return this.loadWidget(reset, !(transition && transition.animation));\n });\n promise.catch((e) => {\n this.onLoadError(e);\n });\n return promise;\n }\n setVrcube(data) {\n Object.assign(this.widgetVRCube, data);\n }\n setVrobject(data) {\n Object.assign(this.widgetVRObject, data);\n }\n async loadAnimation(animation) {\n var _a;\n const snapshot = {\n scene: this.scene,\n view: {\n animation: animation.name,\n camera: animation.camera,\n duration: animation.duration,\n loop: animation.loop,\n reverse: animation.reverse,\n },\n parameters: this.parameters,\n encoder: {\n format: 'mp4',\n },\n };\n if (!((_a = snapshot.view) === null || _a === void 0 ? void 0 : _a.background)) {\n snapshot.view.background = 'product';\n }\n return this.widgetVideo.load(snapshot).then(() => Promise.resolve());\n }\n async playAnimation(animation) {\n return this.loadAnimation(animation).then(() => this.widgetVideo.play()).catch((e) => {\n this.onLoadError(e);\n });\n }\n stopAnimation() {\n this.widgetVideo.hide();\n }\n snapshot(type, quality) {\n return this.viewWidget.snapshot(type, quality);\n }\n async loadWidget(reset, fade) {\n if (!this.scene || !this.view) {\n return Promise.resolve();\n }\n if (!this.parameters.width || !this.parameters.height) {\n return Promise.resolve();\n }\n const widget = this.viewWidget;\n if (!widget) {\n return Promise.reject(new Error('Unknown view mode'));\n }\n const snapshot = {\n scene: this.scene,\n view: this.view,\n parameters: this.parameters,\n encoder: this.encoder\n };\n if (!snapshot.view.background) {\n snapshot.view.background = 'product';\n }\n return widget.load(snapshot, this.tags || [], reset, fade).then(hotspots => {\n this.widget.hide();\n this.widget = widget;\n this.widget.show();\n this.widgetVideo.hide();\n this.onHotspotsChange(hotspots);\n });\n }\n get viewWidget() {\n var _a;\n switch ((_a = this.view) === null || _a === void 0 ? void 0 : _a.mode) {\n case 'image':\n return this.widgetImage;\n case 'video':\n return this.widgetVideo;\n case 'vrcube':\n return this.widgetVRCube;\n case 'vrobject':\n return this.widgetVRObject;\n default:\n return this.widgetImage;\n }\n }\n checkResize() {\n if (this.isDestroyed) {\n return;\n }\n const width = this.container.clientWidth;\n const height = this.container.clientHeight;\n if (width !== this.containerWidth || height !== this.containerHeight) {\n this.containerWidth = width;\n this.containerHeight = height;\n this.onResize();\n }\n if (!this.isDestroyed) {\n requestAnimationFrame(this.checkResize);\n }\n }\n onMouseDown(e) {\n this.widget.onMouseDown(e);\n }\n onMouseEnter(e) {\n this.widget.onMouseEnter(e);\n }\n onMouseMove(e) {\n this.widget.onMouseMove(e);\n }\n onMouseUp(e) {\n this.widget.onMouseUp(e);\n }\n onTouchStart(e) {\n this.widget.onTouchStart(e);\n }\n onTouchMove(e) {\n this.widget.onTouchMove(e);\n }\n onTouchEnd(e) {\n this.widget.onTouchEnd(e);\n }\n onDeviceOrientation(e) {\n this.widget.onDeviceOrientation(e);\n }\n onResize() {\n const width = this.container.clientWidth;\n const height = this.container.clientHeight;\n this.resolution = Viewport.getStandardResolution(width * window.devicePixelRatio, height * window.devicePixelRatio);\n this.parameters.width = this.resolution.width;\n this.parameters.height = this.resolution.height;\n this.canvas2D.resize(width, height, window.devicePixelRatio);\n this.canvas3D.resize(width, height, window.devicePixelRatio);\n this.video.resize(width, height, this.resolution, this.options.fit);\n this.loadWidget(false, false).catch(e => {\n this.onLoadError(e);\n });\n }\n onVrcubeInteraction(...args) {\n this.options.events.onHotspotsChange(this.widgetVRCube.hotspots);\n this.options.events.onInteraction(...args);\n this.options.events.onVrcubeInteraction(...args);\n }\n onVrobjectInteraction(...args) {\n this.options.events.onHotspotsChange(this.widgetVRObject.hotspots);\n this.options.events.onInteraction(...args);\n this.options.events.onVrobjectInteraction(...args);\n }\n onHotspotsChange(...args) {\n this.options.events.onHotspotsChange(...args);\n }\n onLoadStart(...args) {\n this.container.classList.add('ls-viewer-container-loading');\n this.options.events.onLoadStart(...args);\n }\n onLoadProgress(...args) {\n this.options.events.onLoadProgress(...args);\n }\n onLoadEnd(...args) {\n this.container.classList.remove('ls-viewer-container-loading');\n this.options.events.onLoadEnd(...args);\n }\n onLoadError(...args) {\n this.container.classList.remove('ls-viewer-container-loading');\n this.options.events.onLoadError(...args);\n }\n}\n"],"names":["Resolution","constructor","width","height","this","aspect","Viewport","top","left","static","resolution","viewportResolution","fit","aspectRatio","viewportRatio","Math","abs","getStandardAspectRatio","quality","getStandardQuality","max","round","Canvas2D","element","document","createElement","classList","add","style","opacity","context","getContext","backCanvas","backContext","destroy","requestAnimationId","cancelAnimationFrame","undefined","show","useDisplay","display","hide","resize","pixelRatio","draw","img","fade","speed","viewport","drawImage","globalAlpha","fadeLoop","image","alpha","min","clearRect","requestAnimationFrame","Canvas3D","twgl","preserveDrawingBuffer","setDefaultTextureColor","Maths","v","f","factor","a","PI","x","y","floor","fovX","near","far","dst","right","tan","perspectiveWithLeft","fovY","bottom","ral","rsl","tab","tsb","fsn","Float32Array","WebRenderStatic","async","snapshot","scene","WebRenderV1","server","request","Object","entries","filter","k","map","join","_a","_b","accessory","length","find","p","decor","product","databaseId","database","configuration","animations","accessoryDatabaseId","decorDatabaseId","decorDeltaAltitude","translation","parameters","view","background","softwareAntialiasing","antialiasing","superSampling","encoder","imageFormat","format","imageQuality","url","fetch","then","response","text","responseText","matches","replace","match","xmlRegex","m","Promise","reject","assign","sceneParameters","animation","bookmarkSet","camera","split","bookmark","frames","loop","renderParameters","encoderParameters","queryString","buildQuery","resolve","duration","reverse","WebRenderV2","pResult","s","e","t","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","i","propertyIsEnumerable","__rest","toString","jpeg","png","compression","webp","body","method","JSON","stringify","json","data","mode","fetchFrame","vrCube","fetchFrameArray","cameraGroup","images","vrObject","panFrames","panFrom","panTo","panLoop","tiltFrames","tiltFrom","tiltTo","tiltLoop","id","fps","tags","fetchHotspots","fetchHotspotsArray","Loader","api","delegate","webrender","loadingId","loaded","total","onLoadStart","onLoadProgress","onLoadEnd","progress","src","loadImage","video","loadVideo","srcs","promises","all","imgs","position","loadVideoFrames","loadImageFrames","Image","crossOrigin","location","protocol","isValidHttpUrl","promise","addEventListener","once","type","Array","start","n","step","ceil","index","mod","catch","load","count","seeked","removeEventListener","canvas","videoWidth","videoHeight","toDataURL","currentTime","loadVideoFrame","imageHotspots","Error","vrCubeHotspots","vrObjectHotspots","str","URL","_","Video","setAttribute","WidgetImage","container","loader","hotspots","remove","reset","snapshotHash","loadImageSnapshot","tagsHash","loadImageHotspots","onMouseDown","onMouseMove","onMouseUp","onMouseEnter","onTouchStart","onTouchMove","onTouchEnd","onDeviceOrientation","WidgetVideo","hash","loadVideoSnapshot","play","Point","clone","EventHelper","screenX","screenY","touch","targetTouches","changedTouches","Basis3","args","u","o","w","v3","cross","localToGlobalMatrix","globalToLocalMatrix","m4","inverse","InertiaPoint","time","Inertia","onMotion","points","lastPoint","velocity","bind","animationFrameId","track","point","Date","now","push","firstPoint","dx","dy","dt","stop","PointOfView","target","eye","up","copy","viewVector","subtract","rightVector","normalize","viewMatrix","lookAt","default","InteractiveCamera","pov","fov","isStarted","degreesToRadians","orientationMatrix","identity","inertia","motion","initPov","initFov","initOrientation","window","orientation","startPov","startSize","previousPoint","orientedPov","headBasis","matrix","multiply","transformDirection","size","delta","accelerate","rotationMatrix","rotationY","rotationX","headMatrix","transformPoint","end","beta","gamma","alphaRadians","betaRadians","gammaRadians","rotateZ","rotateX","rotateY","WidgetVRCube","onInteraction","hotspotsList","interaction","render","gl","programInfo","createProgramInfo","quad","primitives","createXYQuadBufferInfo","uniforms","u_matrix","u_mix","u_texture_back","createTexture","TEXTURE_CUBE_MAP","minMag","LINEAR","u_texture","every","radiansToDegrees","result","flat","clientWidth","clientHeight","modelViewProjectionMatrix","forEach","hotspot","position2D","rx","ry","rz","point3D","point2D","loadVRCubeSnapshot","LINEAR_MIPMAP_LINEAR","cubeFaceOrder","TEXTURE_CUBE_MAP_POSITIVE_Z","TEXTURE_CUBE_MAP_POSITIVE_X","TEXTURE_CUBE_MAP_NEGATIVE_Z","TEXTURE_CUBE_MAP_NEGATIVE_X","TEXTURE_CUBE_MAP_POSITIVE_Y","TEXTURE_CUBE_MAP_NEGATIVE_Y","err","texture","loadVRCubeHotspots","standardAspectRatio","projectionMatrix","perspectiveWithFovY","perspectiveWithFovX","projectionMatrixInverse","viewMatrixInverse","useProgram","program","setBuffersAndAttributes","setUniforms","drawBufferInfo","pointFromMouseEvent","preventDefault","buttons","pointFromTouchEvent","InteractivePosition","rows","initPosition","startPosition","startPoint","lastPoints","lastPointsNumber","positionIndex","splice","regressionResult","regression","linear","equation","positionX","minX","positionY","minY","WidgetVRObject","pos","goToLoop","sign","loadVRObjectSnapshot","loadVRObjectHotspots","WRAPIv2","SunShadowQualityMode","SunShadowSmoothnessMode","SunUseCaseMode","css","ref","insertAt","head","getElementsByTagName","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","options","checkResize","onResize","onLoadError","onHotspotsChange","onVrcubeInteraction","onVrobjectInteraction","vrcube","vrobject","events","debounce","containerWidth","containerHeight","canvas2D","canvas3D","widgetImage","widgetVideo","widgetVRCube","widgetVRObject","widget","isDestroyed","passive","loadWidget","transition","loadAnimation","fromPosition","viewWidget","goto","isArray","setParameters","setTags","toPosition","setVrcube","setVrobject","name","stopAnimation","getStandardResolution","devicePixelRatio"],"mappings":"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"}
|