{"version":3,"file":"photo-sphere-viewer.js","sources":["../src/PSVError.js","../src/adapters/AbstractAdapter.js","../src/data/constants.js","../src/data/system.js","../src/utils/browser.js","../src/utils/math.js","../src/utils/misc.js","../src/utils/psv.js","../src/utils/Animation.js","../src/utils/Dynamic.js","../src/utils/MultiDynamic.js","../src/utils/Slider.js","../src/utils/index.js","../src/adapters/equirectangular/index.js","../src/components/AbstractComponent.js","../src/buttons/AbstractButton.js","../src/buttons/AutorotateButton.js","../src/buttons/CustomButton.js","../src/components/NavbarCaption.js","../src/buttons/DescriptionButton.js","../src/buttons/DownloadButton.js","../src/buttons/FullscreenButton.js","../src/buttons/MenuButton.js","../src/utils/PressHandler.js","../src/buttons/AbstractMoveButton.js","../src/buttons/MoveDownButton.js","../src/buttons/MoveLeftButton.js","../src/buttons/MoveRightButton.js","../src/buttons/MoveUpButton.js","../src/buttons/AbstractZoomButton.js","../src/buttons/ZoomInButton.js","../src/buttons/ZoomOutButton.js","../src/buttons/ZoomRangeButton.js","../src/plugins/AbstractPlugin.js","../src/data/config.js","../src/components/Navbar.js","../src/components/Loader.js","../src/components/Notification.js","../src/components/Overlay.js","../src/components/Panel.js","../src/services/AbstractService.js","../src/services/DataHelper.js","../src/services/EventsHandler.js","../src/services/Renderer.js","../src/services/TextureLoader.js","../src/components/Tooltip.js","../src/services/TooltipRenderer.js","../src/Viewer.js"],"sourcesContent":["/**\n * @summary Custom error used in the lib\n * @param {string} message\n * @constructor\n * @memberOf PSV\n */\nfunction PSVError(message) {\n this.message = message;\n\n // Use V8's native method if available, otherwise fallback\n if ('captureStackTrace' in Error) {\n Error.captureStackTrace(this, PSVError);\n }\n else {\n this.stack = (new Error()).stack;\n }\n}\n\nPSVError.prototype = Object.create(Error.prototype);\nPSVError.prototype.name = 'PSVError';\nPSVError.prototype.constructor = PSVError;\n\nexport { PSVError };\n","import { PSVError } from '../PSVError';\n\n/**\n * @namespace PSV.adapters\n */\n\n/**\n * @summary Base adapters class\n * @memberof PSV.adapters\n * @abstract\n */\nexport class AbstractAdapter {\n\n /**\n * @summary Unique identifier of the adapter\n * @member {string}\n * @readonly\n * @static\n */\n static id = null;\n\n /**\n * @summary Indicates if the adapter supports panorama download natively\n * @type {boolean}\n * @readonly\n * @static\n */\n static supportsDownload = false;\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n /**\n * @summary Reference to main controller\n * @type {PSV.Viewer}\n * @readonly\n */\n this.psv = psv;\n }\n\n /**\n * @summary Destroys the adapter\n */\n destroy() {\n delete this.psv;\n }\n\n /**\n * @summary Indicates if the adapter supports transitions between panoramas\n * @param {*} panorama\n * @return {boolean}\n */\n supportsTransition(panorama) { // eslint-disable-line no-unused-vars\n return false;\n }\n\n /**\n * @summary Indicates if the adapter supports preload of a panorama\n * @param {*} panorama\n * @return {boolean}\n */\n supportsPreload(panorama) { // eslint-disable-line no-unused-vars\n return false;\n }\n\n /**\n * @abstract\n * @summary Loads the panorama texture(s)\n * @param {*} panorama\n * @param {PSV.PanoData | PSV.PanoDataProvider} [newPanoData]\n * @returns {Promise.}\n */\n loadTexture(panorama, newPanoData) { // eslint-disable-line no-unused-vars\n throw new PSVError('loadTexture not implemented');\n }\n\n /**\n * @abstract\n * @summary Creates the cube mesh\n * @param {number} [scale=1]\n * @returns {external:THREE.Mesh}\n */\n createMesh(scale = 1) { // eslint-disable-line no-unused-vars\n throw new PSVError('createMesh not implemented');\n }\n\n /**\n * @abstract\n * @summary Applies the texture to the mesh\n * @param {external:THREE.Mesh} mesh\n * @param {PSV.TextureData} textureData\n * @param {boolean} [transition=false]\n */\n setTexture(mesh, textureData, transition = false) { // eslint-disable-line no-unused-vars\n throw new PSVError('setTexture not implemented');\n }\n\n /**\n * @abstract\n * @summary Changes the opacity of the mesh\n * @param {external:THREE.Mesh} mesh\n * @param {number} opacity\n */\n setTextureOpacity(mesh, opacity) { // eslint-disable-line no-unused-vars\n throw new PSVError('setTextureOpacity not implemented');\n }\n\n /**\n * @abstract\n * @summary Clear a loaded texture from memory\n * @param {PSV.TextureData} textureData\n */\n disposeTexture(textureData) { // eslint-disable-line no-unused-vars\n throw new PSVError('disposeTexture not implemented');\n }\n\n}\n","/**\n * @namespace PSV.constants\n */\n\n/**\n * @summary Default duration of the transition between panoramas\n * @memberOf PSV.constants\n * @type {number}\n * @constant\n */\nexport const DEFAULT_TRANSITION = 1500;\n\n/**\n * @summary Number of pixels bellow which a mouse move will be considered as a click\n * @memberOf PSV.constants\n * @type {number}\n * @constant\n */\nexport const MOVE_THRESHOLD = 4;\n\n/**\n * @summary Delay in milliseconds between two clicks to consider a double click\n * @memberOf PSV.constants\n * @type {number}\n * @constant\n */\nexport const DBLCLICK_DELAY = 300;\n\n/**\n * @summary Delay in milliseconds to emulate a long touch\n * @memberOf PSV.constants\n * @type {number}\n * @constant\n */\nexport const LONGTOUCH_DELAY = 500;\n\n/**\n * @summary Delay in milliseconds to for the two fingers overlay to appear\n * @memberOf PSV.constants\n * @type {number}\n * @constant\n */\nexport const TWOFINGERSOVERLAY_DELAY = 100;\n\n/**\n * @summary Duration in milliseconds of the \"ctrl zoom\" overlay\n * @memberOf PSV.constants\n * @type {number}\n * @constant\n */\nexport const CTRLZOOM_TIMEOUT = 2000;\n\n/**\n * @summary Time size of the mouse position history used to compute inertia\n * @memberOf PSV.constants\n * @type {number}\n * @constant\n */\nexport const INERTIA_WINDOW = 300;\n\n/**\n * @summary Radius of the THREE.SphereGeometry, Half-length of the THREE.BoxGeometry\n * @memberOf PSV.constants\n * @type {number}\n * @constant\n */\nexport const SPHERE_RADIUS = 10;\n\n/**\n * @summary Property name added to viewer element\n * @memberOf PSV.constants\n * @type {string}\n * @constant\n */\nexport const VIEWER_DATA = 'photoSphereViewer';\n\n/**\n * @summary Property added the the main Mesh object\n * @memberOf PSV.constants\n * @type {string}\n * @constant\n */\nexport const MESH_USER_DATA = 'psvSphere';\n\n/**\n * @summary Available actions\n * @memberOf PSV.constants\n * @enum {string}\n * @constant\n */\nexport const ACTIONS = {\n ROTATE_LAT_UP : 'rotateLatitudeUp',\n ROTATE_LAT_DOWN : 'rotateLatitudeDown',\n ROTATE_LONG_RIGHT: 'rotateLongitudeRight',\n ROTATE_LONG_LEFT : 'rotateLongitudeLeft',\n ZOOM_IN : 'zoomIn',\n ZOOM_OUT : 'zoomOut',\n TOGGLE_AUTOROTATE: 'toggleAutorotate',\n};\n\n/**\n * @summary Available events names\n * @memberOf PSV.constants\n * @enum {string}\n * @constant\n */\nexport const EVENTS = {\n /**\n * @event autorotate\n * @memberof PSV\n * @summary Triggered when the automatic rotation is enabled/disabled\n * @param {boolean} enabled\n */\n AUTOROTATE : 'autorotate',\n /**\n * @event before-render\n * @memberof PSV\n * @summary Triggered before a render, used to modify the view\n * @param {number} timestamp - time provided by requestAnimationFrame\n * @param {number} elapsed - time elapsed from the previous frame\n */\n BEFORE_RENDER : 'before-render',\n /**\n * @event before-rotate\n * @memberOf PSV\n * @summary Triggered before a rotate operation, can be cancelled\n * @param {PSV.ExtendedPosition}\n */\n BEFORE_ROTATE : 'before-rotate',\n /**\n * @event click\n * @memberof PSV\n * @summary Triggered when the user clicks on the viewer (everywhere excluding the navbar and the side panel)\n * @param {PSV.ClickData} data\n */\n CLICK : 'click',\n /**\n * @event close-panel\n * @memberof PSV\n * @summary Triggered when the panel is closed\n * @param {string} [id]\n */\n CLOSE_PANEL : 'close-panel',\n /**\n * @event config-changed\n * @memberOf PSV\n * @summary Triggered after a call to setOption/setOptions\n * @param {string[]} name of changed options\n */\n CONFIG_CHANGED : 'config-changed',\n /**\n * @event dblclick\n * @memberof PSV\n * @summary Triggered when the user double clicks on the viewer. The simple `click` event is always fired before `dblclick`\n * @param {PSV.ClickData} data\n */\n DOUBLE_CLICK : 'dblclick',\n /**\n * @event fullscreen-updated\n * @memberof PSV\n * @summary Triggered when the fullscreen mode is enabled/disabled\n * @param {boolean} enabled\n */\n FULLSCREEN_UPDATED: 'fullscreen-updated',\n /**\n * @event hide-notification\n * @memberof PSV\n * @summary Triggered when the notification is hidden\n * @param {string} [id]\n */\n HIDE_NOTIFICATION : 'hide-notification',\n /**\n * @event hide-overlay\n * @memberof PSV\n * @summary Triggered when the overlay is hidden\n * @param {string} [id]\n */\n HIDE_OVERLAY : 'hide-overlay',\n /**\n * @event hide-tooltip\n * @memberof PSV\n * @summary Triggered when the tooltip is hidden\n * @param {*} Data associated to this tooltip\n */\n HIDE_TOOLTIP : 'hide-tooltip',\n /**\n * @event key-press\n * @memberof PSV\n * @summary Triggered when a key is pressed, can be cancelled\n * @param {string} key\n */\n KEY_PRESS : 'key-press',\n /**\n * @event load-progress\n * @memberof PSV\n * @summary Triggered when the loader value changes\n * @param {number} value from 0 to 100\n */\n LOAD_PROGRESS : 'load-progress',\n /**\n * @event open-panel\n * @memberof PSV\n * @summary Triggered when the panel is opened\n * @param {string} [id]\n */\n OPEN_PANEL : 'open-panel',\n /**\n * @event panorama-loaded\n * @memberof PSV\n * @summary Triggered when a panorama image has been loaded\n * @param {PSV.TextureData} textureData\n */\n PANORAMA_LOADED : 'panorama-loaded',\n /**\n * @event position-updated\n * @memberof PSV\n * @summary Triggered when the view longitude and/or latitude changes\n * @param {PSV.Position} position\n */\n POSITION_UPDATED : 'position-updated',\n /**\n * @event ready\n * @memberof PSV\n * @summary Triggered when the panorama image has been loaded and the viewer is ready to perform the first render\n */\n READY : 'ready',\n /**\n * @event render\n * @memberof PSV\n * @summary Triggered on each viewer render, **this event is triggered very often**\n */\n RENDER : 'render',\n /**\n * @event show-notification\n * @memberof PSV\n * @summary Triggered when the notification is shown\n * @param {string} [id]\n */\n SHOW_NOTIFICATION : 'show-notification',\n /**\n * @event show-overlay\n * @memberof PSV\n * @summary Triggered when the overlay is shown\n * @param {string} [id]\n */\n SHOW_OVERLAY : 'show-overlay',\n /**\n * @event show-tooltip\n * @memberof PSV\n * @summary Triggered when the tooltip is shown\n * @param {*} Data associated to this tooltip\n * @param {PSV.components.Tooltip} Instance of the tooltip\n */\n SHOW_TOOLTIP : 'show-tooltip',\n /**\n * @event size-updated\n * @memberof PSV\n * @summary Triggered when the viewer size changes\n * @param {PSV.Size} size\n */\n SIZE_UPDATED : 'size-updated',\n /**\n * @event stop-all\n * @memberof PSV\n * @summary Triggered when all current animations are stopped\n */\n STOP_ALL : 'stop-all',\n /**\n * @event zoom-updated\n * @memberof PSV\n * @summary Triggered when the zoom level changes\n * @param {number} zoomLevel\n */\n ZOOM_UPDATED : 'zoom-updated',\n};\n\n/**\n * @summary Available change events names\n * @memberOf PSV.constants\n * @enum {string}\n * @constant\n */\nexport const CHANGE_EVENTS = {\n /**\n * @event get-animate-position\n * @memberof PSV\n * @param {Position} position\n * @returns {Position}\n * @summary Called to alter the target position of an animation\n */\n GET_ANIMATE_POSITION: 'get-animate-position',\n /**\n * @event get-rotate-position\n * @memberof PSV\n * @param {Position} position\n * @returns {Position}\n * @summary Called to alter the target position of a rotation\n */\n GET_ROTATE_POSITION : 'get-rotate-position',\n};\n\n/**\n * @summary Special events emitted to listener using {@link Viewer#observeObjects}\n * @memberOf PSV.constants\n * @constant\n * @package\n */\nexport const OBJECT_EVENTS = {\n ENTER_OBJECT: 'enter-object',\n HOVER_OBJECT: 'hover-object',\n LEAVE_OBJECT: 'leave-object',\n};\n\n/**\n * @summary Internal identifiers for various stuff\n * @memberOf PSV.constants\n * @enum {string}\n * @constant\n */\nexport const IDS = {\n MENU : 'menu',\n TWO_FINGERS: 'twoFingers',\n CTRL_ZOOM : 'ctrlZoom',\n ERROR : 'error',\n DESCRIPTION: 'description',\n};\n\n/* eslint-disable */\n// @formatter:off\n/**\n * @summary Collection of easing functions\n * @memberOf PSV.constants\n * @see {@link https://gist.github.com/frederickk/6165768}\n * @type {Object}\n * @constant\n */\nexport const EASINGS = {\n linear : (t) => t,\n\n inQuad : (t) => t*t,\n outQuad : (t) => t*(2-t),\n inOutQuad : (t) => t<.5 ? 2*t*t : -1+(4-2*t)*t,\n\n inCubic : (t) => t*t*t,\n outCubic : (t) => (--t)*t*t+1,\n inOutCubic: (t) => t<.5 ? 4*t*t*t : (t-1)*(2*t-2)*(2*t-2)+1,\n\n inQuart : (t) => t*t*t*t,\n outQuart : (t) => 1-(--t)*t*t*t,\n inOutQuart: (t) => t<.5 ? 8*t*t*t*t : 1-8*(--t)*t*t*t,\n\n inQuint : (t) => t*t*t*t*t,\n outQuint : (t) => 1+(--t)*t*t*t*t,\n inOutQuint: (t) => t<.5 ? 16*t*t*t*t*t : 1+16*(--t)*t*t*t*t,\n\n inSine : (t) => 1-Math.cos(t*(Math.PI/2)),\n outSine : (t) => Math.sin(t*(Math.PI/2)),\n inOutSine : (t) => .5-.5*Math.cos(Math.PI*t),\n\n inExpo : (t) => Math.pow(2, 10*(t-1)),\n outExpo : (t) => 1-Math.pow(2, -10*t),\n inOutExpo : (t) => (t=t*2-1)<0 ? .5*Math.pow(2, 10*t) : 1-.5*Math.pow(2, -10*t),\n\n inCirc : (t) => 1-Math.sqrt(1-t*t),\n outCirc : (t) => Math.sqrt(1-(t-1)*(t-1)),\n inOutCirc : (t) => (t*=2)<1 ? .5-.5*Math.sqrt(1-t*t) : .5+.5*Math.sqrt(1-(t-=2)*t)\n};\n// @formatter:on\n/* eslint-enable */\n\n/**\n * @summary Subset of key codes\n * @memberOf PSV.constants\n * @type {Object}\n * @constant\n */\nexport const KEY_CODES = {\n Enter : 'Enter',\n Control : 'Control',\n Escape : 'Escape',\n Space : ' ',\n PageUp : 'PageUp',\n PageDown : 'PageDown',\n ArrowLeft : 'ArrowLeft',\n ArrowUp : 'ArrowUp',\n ArrowRight: 'ArrowRight',\n ArrowDown : 'ArrowDown',\n Delete : 'Delete',\n Plus : '+',\n Minus : '-',\n};\n","import { PSVError } from '../PSVError';\nimport { VIEWER_DATA } from './constants';\n\nconst LOCALSTORAGE_TOUCH_SUPPORT = `${VIEWER_DATA}_touchSupport`;\n\n/**\n * @summary General information about the system\n * @constant\n * @memberOf PSV\n * @property {boolean} loaded - Indicates if the system data has been loaded\n * @property {Function} load - Loads the system if not already loaded\n * @property {number} pixelRatio\n * @property {boolean} isWebGLSupported\n * @property {number} maxCanvasWidth\n * @property {string} mouseWheelEvent\n * @property {string} fullscreenEvent\n * @property {Function} getMaxCanvasWidth - Returns the max width of a canvas allowed by the browser\n * @property {{initial: boolean, promise: Promise}} isTouchEnabled\n */\nexport const SYSTEM = {\n loaded : false,\n pixelRatio : 1,\n isWebGLSupported: false,\n isTouchEnabled : null,\n maxTextureWidth : 0,\n mouseWheelEvent : null,\n fullscreenEvent : null,\n};\n\n/**\n * @summary Loads the system if not already loaded\n */\nSYSTEM.load = () => {\n if (!SYSTEM.loaded) {\n const ctx = getWebGLCtx();\n\n SYSTEM.loaded = true;\n SYSTEM.pixelRatio = window.devicePixelRatio || 1;\n SYSTEM.isWebGLSupported = ctx != null;\n SYSTEM.isTouchEnabled = isTouchEnabled();\n SYSTEM.maxTextureWidth = getMaxTextureWidth(ctx);\n SYSTEM.mouseWheelEvent = getMouseWheelEvent();\n SYSTEM.fullscreenEvent = getFullscreenEvent();\n }\n};\n\nlet maxCanvasWidth = null;\nSYSTEM.getMaxCanvasWidth = () => {\n if (maxCanvasWidth === null) {\n maxCanvasWidth = getMaxCanvasWidth(SYSTEM.maxTextureWidth);\n }\n return maxCanvasWidth;\n};\n\n/**\n * @summary Tries to return a canvas webgl context\n * @returns {WebGLRenderingContext}\n * @private\n */\nfunction getWebGLCtx() {\n const canvas = document.createElement('canvas');\n const names = ['webgl', 'experimental-webgl', 'moz-webgl', 'webkit-3d'];\n let context = null;\n\n if (!canvas.getContext) {\n return null;\n }\n\n if (names.some((name) => {\n try {\n context = canvas.getContext(name);\n return context !== null;\n }\n catch (e) {\n return false;\n }\n })) {\n return context;\n }\n else {\n return null;\n }\n}\n\n/**\n * @summary Detects if the user is using a touch screen\n * @returns {{initial: boolean, promise: Promise}}\n * @private\n */\nfunction isTouchEnabled() {\n let initial = ('ontouchstart' in window) || (navigator.maxTouchPoints > 0);\n if (LOCALSTORAGE_TOUCH_SUPPORT in localStorage) {\n initial = localStorage[LOCALSTORAGE_TOUCH_SUPPORT] === 'true';\n }\n\n const promise = new Promise((resolve) => {\n let clear;\n\n const listenerMouse = () => {\n clear();\n localStorage[LOCALSTORAGE_TOUCH_SUPPORT] = false;\n resolve(false);\n };\n\n const listenerTouch = () => {\n clear();\n localStorage[LOCALSTORAGE_TOUCH_SUPPORT] = true;\n resolve(true);\n };\n\n const listenerTimeout = () => {\n clear();\n localStorage[LOCALSTORAGE_TOUCH_SUPPORT] = initial;\n resolve(initial);\n };\n\n clear = () => {\n window.removeEventListener('mousedown', listenerMouse);\n window.removeEventListener('touchstart', listenerTouch);\n };\n\n window.addEventListener('mousedown', listenerMouse, false);\n window.addEventListener('touchstart', listenerTouch, false);\n setTimeout(listenerTimeout, 10000);\n });\n\n return { initial, promise };\n}\n\n/**\n * @summary Gets max texture width in WebGL context\n * @returns {number}\n * @private\n */\nfunction getMaxTextureWidth(ctx) {\n if (ctx !== null) {\n return ctx.getParameter(ctx.MAX_TEXTURE_SIZE);\n }\n else {\n return 0;\n }\n}\n\n/**\n * @summary Gets max canvas width supported by the browser.\n * We only test powers of 2 and height = width / 2 because that's what we need to generate WebGL textures\n * @param maxWidth\n * @return {number}\n * @private\n */\nfunction getMaxCanvasWidth(maxWidth) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n canvas.width = maxWidth;\n canvas.height = maxWidth / 2;\n\n while (canvas.width > 1024) {\n ctx.fillStyle = 'white';\n ctx.fillRect(0, 0, 1, 1);\n\n try {\n if (ctx.getImageData(0, 0, 1, 1).data[0] === 255) {\n return canvas.width;\n }\n }\n catch (e) {\n // continue\n }\n\n canvas.width /= 2;\n canvas.height /= 2;\n }\n\n throw new PSVError('Unable to detect system capabilities');\n}\n\n/**\n * @summary Gets the event name for mouse wheel\n * @returns {string}\n * @private\n */\nfunction getMouseWheelEvent() {\n if ('onwheel' in document.createElement('div')) { // Modern browsers support \"wheel\"\n return 'wheel';\n }\n else if (document.onmousewheel !== undefined) { // Webkit and IE support at least \"mousewheel\"\n return 'mousewheel';\n }\n else { // let's assume that remaining browsers are older Firefox\n return 'DOMMouseScroll';\n }\n}\n\n/**\n * @summary Map between fullsceen method and fullscreen event name\n * @type {Object}\n * @readonly\n * @private\n */\nconst FULLSCREEN_EVT_MAP = {\n exitFullscreen : 'fullscreenchange',\n webkitExitFullscreen: 'webkitfullscreenchange',\n mozCancelFullScreen : 'mozfullscreenchange',\n msExitFullscreen : 'MSFullscreenChange',\n};\n\n\n/**\n * @summary Gets the event name for fullscreen\n * @returns {string}\n * @private\n */\nfunction getFullscreenEvent() {\n const validExits = Object.keys(FULLSCREEN_EVT_MAP).filter(exit => exit in document);\n\n if (validExits.length) {\n return FULLSCREEN_EVT_MAP[validExits[0]];\n }\n else {\n return null;\n }\n}\n","/**\n * @summary Toggles a CSS class\n * @memberOf PSV.utils\n * @param {HTMLElement|SVGElement} element\n * @param {string} className\n * @param {boolean} [active] - forced state\n */\nexport function toggleClass(element, className, active) {\n if (active === undefined) {\n element.classList.toggle(className);\n }\n else if (active && !element.classList.contains(className)) {\n element.classList.add(className);\n }\n else if (!active) {\n element.classList.remove(className);\n }\n}\n\n/**\n * @summary Adds one or several CSS classes to an element\n * @memberOf PSV.utils\n * @param {HTMLElement} element\n * @param {string} className\n */\nexport function addClasses(element, className) {\n if (className) {\n className.split(' ').forEach((name) => {\n toggleClass(element, name, true);\n });\n }\n}\n\n/**\n * @summary Removes one or several CSS classes to an element\n * @memberOf PSV.utils\n * @param {HTMLElement} element\n * @param {string} className\n */\nexport function removeClasses(element, className) {\n if (className) {\n className.split(' ').forEach((name) => {\n toggleClass(element, name, false);\n });\n }\n}\n\n/**\n * @summary Searches if an element has a particular parent at any level including itself\n * @memberOf PSV.utils\n * @param {HTMLElement} el\n * @param {HTMLElement} parent\n * @returns {boolean}\n */\nexport function hasParent(el, parent) {\n let test = el;\n\n do {\n if (test === parent) {\n return true;\n }\n test = test.parentNode;\n } while (test);\n\n return false;\n}\n\n/**\n * @summary Gets the closest parent (can by itself)\n * @memberOf PSV.utils\n * @param {HTMLElement|SVGElement} el\n * @param {string} selector\n * @returns {HTMLElement}\n */\nexport function getClosest(el, selector) {\n // When el is document or window, the matches does not exist\n if (!el.matches) {\n return null;\n }\n\n let test = el;\n\n do {\n if (test.matches(selector)) {\n return test;\n }\n test = test instanceof SVGElement ? test.parentNode : test.parentElement;\n } while (test);\n\n return null;\n}\n\n/**\n * @summary Gets the position of an element in the viewer without reflow\n * @description Will gives the same result as getBoundingClientRect() as soon as there are no CSS transforms\n * @memberOf PSV.utils\n * @param {HTMLElement} el\n * @return {{left: number, top: number}}\n */\nexport function getPosition(el) {\n let left = 0;\n let top = 0;\n let test = el;\n\n while (test) {\n left += (test.offsetLeft - test.scrollLeft + test.clientLeft);\n top += (test.offsetTop - test.scrollTop + test.clientTop);\n test = test.offsetParent;\n }\n\n return { left, top };\n}\n\n/**\n * @summary Detects if fullscreen is enabled\n * @memberOf PSV.utils\n * @param {HTMLElement} elt\n * @returns {boolean}\n */\nexport function isFullscreenEnabled(elt) {\n return (document.fullscreenElement || document.webkitFullscreenElement) === elt;\n}\n\n/**\n * @summary Enters fullscreen mode\n * @memberOf PSV.utils\n * @param {HTMLElement} elt\n */\nexport function requestFullscreen(elt) {\n (elt.requestFullscreen || elt.webkitRequestFullscreen).call(elt);\n}\n\n/**\n * @summary Exits fullscreen mode\n * @memberOf PSV.utils\n */\nexport function exitFullscreen() {\n (document.exitFullscreen || document.webkitExitFullscreen).call(document);\n}\n\n/**\n * @summary Gets an element style\n * @memberOf PSV.utils\n * @param {HTMLElement} elt\n * @param {string} prop\n * @returns {*}\n */\nexport function getStyle(elt, prop) {\n return window.getComputedStyle(elt, null)[prop];\n}\n\n/**\n * @summary Normalize mousewheel values accross browsers\n * @memberOf PSV.utils\n * @description From Facebook's Fixed Data Table\n * {@link https://github.com/facebookarchive/fixed-data-table/blob/master/src/vendor_upstream/dom/normalizeWheel.js}\n * @copyright Facebook\n * @param {WheelEvent} event\n * @returns {{spinX: number, spinY: number, pixelX: number, pixelY: number}}\n */\nexport function normalizeWheel(event) {\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n\n let spinX = 0;\n let spinY = 0;\n let pixelX = 0;\n let pixelY = 0;\n\n // Legacy\n if ('detail' in event) {\n spinY = event.detail;\n }\n if ('wheelDelta' in event) {\n spinY = -event.wheelDelta / 120;\n }\n if ('wheelDeltaY' in event) {\n spinY = -event.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in event) {\n spinX = -event.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in event && event.axis === event.HORIZONTAL_AXIS) {\n spinX = spinY;\n spinY = 0;\n }\n\n pixelX = spinX * PIXEL_STEP;\n pixelY = spinY * PIXEL_STEP;\n\n if ('deltaY' in event) {\n pixelY = event.deltaY;\n }\n if ('deltaX' in event) {\n pixelX = event.deltaX;\n }\n\n if ((pixelX || pixelY) && event.deltaMode) {\n // delta in LINE units\n if (event.deltaMode === 1) {\n pixelX *= LINE_HEIGHT;\n pixelY *= LINE_HEIGHT;\n }\n // delta in PAGE units\n else {\n pixelX *= PAGE_HEIGHT;\n pixelY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pixelX && !spinX) {\n spinX = (pixelX < 1) ? -1 : 1;\n }\n if (pixelY && !spinY) {\n spinY = (pixelY < 1) ? -1 : 1;\n }\n\n return { spinX, spinY, pixelX, pixelY };\n}\n","/**\n * @summary Ensures that a number is in a given interval\n * @memberOf PSV.utils\n * @param {number} x\n * @param {number} min\n * @param {number} max\n * @returns {number}\n */\nexport function bound(x, min, max) {\n return Math.max(min, Math.min(max, x));\n}\n\n/**\n * @summary Ensure a value is within 0 and `max`\n * @param {number} value\n * @param {number} max\n * @return {number}\n */\nexport function loop(value, max) {\n let result = value % max;\n\n if (result < 0) {\n result += max;\n }\n\n return result;\n}\n\n/**\n * @summary Checks if a value is an integer\n * @memberOf PSV.utils\n * @param {*} value\n * @returns {boolean}\n */\nexport function isInteger(value) {\n if (Number.isInteger) {\n return Number.isInteger(value);\n }\n return typeof value === 'number' && Number.isFinite(value) && Math.floor(value) === value;\n}\n\n/**\n * @summary Tests if a number is power of two\n * @memberOf PSV.utils\n * @param {number} x\n * @return {boolean}\n */\nexport function isPowerOfTwo(x) {\n return (Math.log(x) / Math.log(2)) % 1 === 0;\n}\n\n/**\n * @summary Computes the sum of an array\n * @memberOf PSV.utils\n * @param {number[]} array\n * @returns {number}\n */\nexport function sum(array) {\n return array.reduce((a, b) => a + b, 0);\n}\n\n/**\n * @summary Computes the distance between two points\n * @memberOf PSV.utils\n * @param {PSV.Point} p1\n * @param {PSV.Point} p2\n * @returns {number}\n */\nexport function distance(p1, p2) {\n return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n}\n\n/**\n * @summary Compute the shortest offset between two longitudes\n * @memberOf PSV.utils\n * @param {number} from\n * @param {number} to\n * @returns {number}\n */\nexport function getShortestArc(from, to) {\n const tCandidates = [\n 0, // direct\n Math.PI * 2, // clock-wise cross zero\n -Math.PI * 2, // counter-clock-wise cross zero\n ];\n\n return tCandidates.reduce((value, candidate) => {\n const newCandidate = to - from + candidate;\n return Math.abs(newCandidate) < Math.abs(value) ? newCandidate : value;\n }, Infinity);\n}\n\n/**\n * @summary Computes the angle between the current position and a target position\n * @memberOf PSV.utils\n * @param {PSV.Position} position1\n * @param {PSV.Position} position2\n * @returns {number}\n */\nexport function getAngle(position1, position2) {\n return Math.acos(\n Math.cos(position1.latitude)\n * Math.cos(position2.latitude)\n * Math.cos(position1.longitude - position2.longitude)\n + Math.sin(position1.latitude)\n * Math.sin(position2.latitude)\n );\n}\n\n/**\n * @summary Returns the distance between two points on a sphere of radius one\n * {@link http://www.movable-type.co.uk/scripts/latlong.html}\n * @memberOf PSV.utils\n * @param {number[]} p1\n * @param {number[]} p2\n * @returns {number}\n */\nexport function greatArcDistance(p1, p2) {\n const [λ1, φ1] = p1;\n const [λ2, φ2] = p2;\n\n const x = (λ2 - λ1) * Math.cos((φ1 + φ2) / 2);\n const y = (φ2 - φ1);\n return Math.sqrt(x * x + y * y);\n}\n","/**\n * @summary Transforms a string to dash-case {@link https://github.com/shahata/dasherize}\n * @memberOf PSV.utils\n * @param {string} str\n * @returns {string}\n */\nexport function dasherize(str) {\n return str.replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g, (s, i) => {\n return (i > 0 ? '-' : '') + s.toLowerCase();\n });\n}\n\n/**\n * @summary Returns a function, that, when invoked, will only be triggered at most once during a given window of time.\n * @memberOf PSV.utils\n * @copyright underscore.js - modified by Clément Prévost {@link http://stackoverflow.com/a/27078401}\n * @param {Function} func\n * @param {number} wait\n * @returns {Function}\n */\nexport function throttle(func, wait) {\n /* eslint-disable */\n let self, args, result;\n let timeout;\n let previous = 0;\n const later = function() {\n previous = Date.now();\n timeout = undefined;\n result = func.apply(self, args);\n if (!timeout) {\n self = args = null;\n }\n };\n return function() {\n const now = Date.now();\n if (!previous) {\n previous = now;\n }\n const remaining = wait - (now - previous);\n self = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n previous = now;\n result = func.apply(self, args);\n if (!timeout) {\n self = args = null;\n }\n }\n else if (!timeout) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n /* eslint-enable */\n}\n\n/**\n * @summary Test if an object is a plain object\n * @memberOf PSV.utils\n * @description Test if an object is a plain object, i.e. is constructed\n * by the built-in Object constructor and inherits directly from Object.prototype\n * or null. Some built-in objects pass the test, e.g. Math which is a plain object\n * and some host or exotic objects may pass also.\n * {@link http://stackoverflow.com/a/5878101/1207670}\n * @param {*} obj\n * @returns {boolean}\n */\nexport function isPlainObject(obj) {\n // Basic check for Type object that's not null\n if (typeof obj === 'object' && obj !== null) {\n // If Object.getPrototypeOf supported, use it\n if (typeof Object.getPrototypeOf === 'function') {\n const proto = Object.getPrototypeOf(obj);\n return proto === Object.prototype || proto === null;\n }\n\n // Otherwise, use internal class\n // This should be reliable as if getPrototypeOf not supported, is pre-ES5\n return Object.prototype.toString.call(obj) === '[object Object]';\n }\n\n // Not an object\n return false;\n}\n\n/**\n * @summary Merges the enumerable attributes of two objects\n * @memberOf PSV.utils\n * @description Replaces arrays and alters the target object.\n * @copyright Nicholas Fisher \n * @param {Object} target\n * @param {Object} src\n * @returns {Object} target\n */\nexport function deepmerge(target, src) {\n /* eslint-disable */\n let first = src;\n\n return (function merge(target, src) {\n if (Array.isArray(src)) {\n if (!target || !Array.isArray(target)) {\n target = [];\n }\n else {\n target.length = 0;\n }\n src.forEach(function(e, i) {\n target[i] = merge(null, e);\n });\n }\n else if (typeof src === 'object') {\n if (!target || Array.isArray(target)) {\n target = {};\n }\n Object.keys(src).forEach(function(key) {\n if (typeof src[key] !== 'object' || !src[key] || !isPlainObject(src[key])) {\n target[key] = src[key];\n }\n else if (src[key] != first) {\n if (!target[key]) {\n target[key] = merge(null, src[key]);\n }\n else {\n merge(target[key], src[key]);\n }\n }\n });\n }\n else {\n target = src;\n }\n\n return target;\n }(target, src));\n /* eslint-enable */\n}\n\n/**\n * @summary Deeply clones an object\n * @memberOf PSV.utils\n * @param {Object} src\n * @returns {Object}\n */\nexport function clone(src) {\n return deepmerge(null, src);\n}\n\n/**\n * @summery Test of an object is empty\n * @memberOf PSV.utils\n * @param {object} obj\n * @returns {boolean}\n */\nexport function isEmpty(obj) {\n return !obj || (Object.keys(obj).length === 0 && obj.constructor === Object);\n}\n\n/**\n * @summary Loops over enumerable properties of an object\n * @memberOf PSV.utils\n * @param {Object} object\n * @param {Function} callback\n */\nexport function each(object, callback) {\n Object.keys(object).forEach((key) => {\n callback(object[key], key);\n });\n}\n\n/**\n * @summary Returns if a valu is null or undefined\n * @memberOf PSV.utils\n * @param {*} val\n * @return {boolean}\n */\nexport function isNil(val) {\n return val === null || val === undefined;\n}\n\n/**\n * @summary Returns the first non null non undefined parameter\n * @memberOf PSV.utils\n * @param {*} values\n * @return {*}\n */\nexport function firstNonNull(...values) {\n for (const val of values) {\n if (!isNil(val)) {\n return val;\n }\n }\n\n return undefined;\n}\n","import * as THREE from 'three';\nimport { PSVError } from '../PSVError';\nimport { bound, loop } from './math';\n\n/**\n * @summary Returns the plugin constructor from the imported object\n * For retrocompatibility with previous default exports\n * @memberOf PSV.utils\n * @package\n */\nexport function pluginInterop(plugin, target) {\n if (plugin) {\n for (const [, p] of [['_', plugin], ...Object.entries(plugin)]) {\n if (p.prototype instanceof target) {\n return p;\n }\n }\n }\n return null;\n}\n\n/**\n * @summary Builds an Error with name 'AbortError'\n * @memberOf PSV.utils\n * @return {Error}\n */\nexport function getAbortError() {\n const error = new Error('Loading was aborted.');\n error.name = 'AbortError';\n return error;\n}\n\n/**\n * @summary Tests if an Error has name 'AbortError'\n * @memberOf PSV.utils\n * @param {Error} err\n * @return {boolean}\n */\nexport function isAbortError(err) {\n return err?.name === 'AbortError';\n}\n\n/**\n * @summary Displays a warning in the console\n * @memberOf PSV.utils\n * @param {string} message\n */\nexport function logWarn(message) {\n console.warn(`PhotoSphereViewer: ${message}`);\n}\n\n/**\n * @summary Checks if an object is a {PSV.ExtendedPosition}, ie has x/y or longitude/latitude\n * @memberOf PSV.utils\n * @param {object} object\n * @returns {boolean}\n */\nexport function isExtendedPosition(object) {\n return [['x', 'y'], ['longitude', 'latitude']].some(([key1, key2]) => {\n return object[key1] !== undefined && object[key2] !== undefined;\n });\n}\n\n/**\n * @summary Returns the value of a given attribute in the panorama metadata\n * @memberOf PSV.utils\n * @param {string} data\n * @param {string} attr\n * @returns (number)\n */\nexport function getXMPValue(data, attr) {\n // XMP data are stored in children\n let result = data.match('(.*)');\n if (result !== null) {\n const val = parseInt(result[1], 10);\n return isNaN(val) ? null : val;\n }\n\n // XMP data are stored in attributes\n result = data.match('GPano:' + attr + '=\"(.*?)\"');\n if (result !== null) {\n const val = parseInt(result[1], 10);\n return isNaN(val) ? null : val;\n }\n\n return null;\n}\n\n/**\n * @readonly\n * @private\n * @type {{top: string, left: string, bottom: string, center: string, right: string}}\n */\nconst CSS_POSITIONS = {\n top : '0%',\n bottom: '100%',\n left : '0%',\n right : '100%',\n center: '50%',\n};\n\n/**\n * @summary Translate CSS values like \"top center\" or \"10% 50%\" as top and left positions\n * @memberOf PSV.utils\n * @description The implementation is as close as possible to the \"background-position\" specification\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-position}\n * @param {string|PSV.Point} value\n * @returns {PSV.Point}\n */\nexport function parsePosition(value) {\n if (!value) {\n return { x: 0.5, y: 0.5 };\n }\n\n if (typeof value === 'object') {\n return value;\n }\n\n let tokens = value.toLocaleLowerCase().split(' ').slice(0, 2);\n\n if (tokens.length === 1) {\n if (CSS_POSITIONS[tokens[0]] !== undefined) {\n tokens = [tokens[0], 'center'];\n }\n else {\n tokens = [tokens[0], tokens[0]];\n }\n }\n\n const xFirst = tokens[1] !== 'left' && tokens[1] !== 'right' && tokens[0] !== 'top' && tokens[0] !== 'bottom';\n\n tokens = tokens.map(token => CSS_POSITIONS[token] || token);\n\n if (!xFirst) {\n tokens.reverse();\n }\n\n const parsed = tokens.join(' ').match(/^([0-9.]+)% ([0-9.]+)%$/);\n\n if (parsed) {\n return {\n x: parseFloat(parsed[1]) / 100,\n y: parseFloat(parsed[2]) / 100,\n };\n }\n else {\n return { x: 0.5, y: 0.5 };\n }\n}\n\n/**\n * @readonly\n * @private\n */\nconst LEFT_MAP = { 0: 'left', 0.5: 'center', 1: 'right' };\n/**\n * @readonly\n * @private\n */\nconst TOP_MAP = { 0: 'top', 0.5: 'center', 1: 'bottom' };\n\n/**\n * @summary Parse a CSS-like position into an array of position keywords among top, bottom, left, right and center\n * @memberOf PSV.utils\n * @param {string | string[]} value\n * @param {string} defaultValue\n * @param {boolean} [allowCenter=true]\n * @return {string[]}\n */\nexport function cleanPosition(value, defaultValue, allowCenter = true) {\n if (!value) {\n return defaultValue.split(' ');\n }\n\n if (typeof value === 'string') {\n const tempPos = parsePosition(value);\n\n if (!(tempPos.x in LEFT_MAP) || !(tempPos.y in TOP_MAP)) {\n throw new PSVError(`Unable to parse position \"${value}\"`);\n }\n\n value = [TOP_MAP[tempPos.y], LEFT_MAP[tempPos.x]];\n }\n\n if (!allowCenter && value[0] === 'center' && value[1] === 'center') {\n throw new PSVError('Unable to parse position \"center center\"');\n }\n\n return value;\n}\n\n/**\n * @summary Parses an speed\n * @memberOf PSV.utils\n * @param {string|number} speed - The speed, in radians/degrees/revolutions per second/minute\n * @returns {number} radians per second\n * @throws {PSV.PSVError} when the speed cannot be parsed\n */\nexport function parseSpeed(speed) {\n let parsed;\n\n if (typeof speed === 'string') {\n const speedStr = speed.toString().trim();\n\n // Speed extraction\n let speedValue = parseFloat(speedStr.replace(/^(-?[0-9]+(?:\\.[0-9]*)?).*$/, '$1'));\n const speedUnit = speedStr.replace(/^-?[0-9]+(?:\\.[0-9]*)?(.*)$/, '$1').trim();\n\n // \"per minute\" -> \"per second\"\n if (speedUnit.match(/(pm|per minute)$/)) {\n speedValue /= 60;\n }\n\n // Which unit?\n switch (speedUnit) {\n // Degrees per minute / second\n case 'dpm':\n case 'degrees per minute':\n case 'dps':\n case 'degrees per second':\n parsed = THREE.Math.degToRad(speedValue);\n break;\n\n // Radians per minute / second\n case 'rdpm':\n case 'radians per minute':\n case 'rdps':\n case 'radians per second':\n parsed = speedValue;\n break;\n\n // Revolutions per minute / second\n case 'rpm':\n case 'revolutions per minute':\n case 'rps':\n case 'revolutions per second':\n parsed = speedValue * Math.PI * 2;\n break;\n\n // Unknown unit\n default:\n throw new PSVError('Unknown speed unit \"' + speedUnit + '\"');\n }\n }\n else {\n parsed = speed;\n }\n\n return parsed;\n}\n\n/**\n * @summary Parses an angle value in radians or degrees and returns a normalized value in radians\n * @memberOf PSV.utils\n * @param {string|number} angle - eg: 3.14, 3.14rad, 180deg\n * @param {boolean} [zeroCenter=false] - normalize between -Pi - Pi instead of 0 - 2*Pi\n * @param {boolean} [halfCircle=zeroCenter] - normalize between -Pi/2 - Pi/2 instead of -Pi - Pi\n * @returns {number}\n * @throws {PSV.PSVError} when the angle cannot be parsed\n */\nexport function parseAngle(angle, zeroCenter = false, halfCircle = zeroCenter) {\n let parsed;\n\n if (typeof angle === 'string') {\n const match = angle.toLowerCase().trim().match(/^(-?[0-9]+(?:\\.[0-9]*)?)(.*)$/);\n\n if (!match) {\n throw new PSVError('Unknown angle \"' + angle + '\"');\n }\n\n const value = parseFloat(match[1]);\n const unit = match[2];\n\n if (unit) {\n switch (unit) {\n case 'deg':\n case 'degs':\n parsed = THREE.Math.degToRad(value);\n break;\n case 'rad':\n case 'rads':\n parsed = value;\n break;\n default:\n throw new PSVError('Unknown angle unit \"' + unit + '\"');\n }\n }\n else {\n parsed = value;\n }\n }\n else if (typeof angle === 'number' && !isNaN(angle)) {\n parsed = angle;\n }\n else {\n throw new PSVError('Unknown angle \"' + angle + '\"');\n }\n\n parsed = loop(zeroCenter ? parsed + Math.PI : parsed, Math.PI * 2);\n\n return zeroCenter ? bound(parsed - Math.PI, -Math.PI / (halfCircle ? 2 : 1), Math.PI / (halfCircle ? 2 : 1)) : parsed;\n}\n\n/**\n * @summary Creates a THREE texture from an image\n * @memberOf PSV.utils\n * @param {HTMLImageElement | HTMLCanvasElement} img\n * @return {external:THREE.Texture}\n */\nexport function createTexture(img) {\n const texture = new THREE.Texture(img);\n texture.needsUpdate = true;\n texture.minFilter = THREE.LinearFilter;\n texture.generateMipmaps = false;\n return texture;\n}\n\nconst quaternion = new THREE.Quaternion();\n\n/**\n * @summary Applies the inverse of Euler angles to a vector\n * @memberOf PSV.utils\n * @param {external:THREE.Vector3} vector\n * @param {external:THREE.Euler} euler\n */\nexport function applyEulerInverse(vector, euler) {\n quaternion.setFromEuler(euler).invert();\n vector.applyQuaternion(quaternion);\n}\n","import { EASINGS } from '../data/constants';\nimport { each } from './misc';\nimport { logWarn } from './psv';\n\n/**\n * @callback OnTick\n * @summary Function called for each animation frame with computed properties\n * @memberOf PSV.utils.Animation\n * @param {Object.} properties - current values\n * @param {float} progress - 0 to 1\n */\n\n/**\n * @summary Interpolation helper for animations\n * @memberOf PSV.utils\n * @description\n * Implements the Promise API with an additional \"cancel\" method.\n * The promise is resolved with `true` when the animation is completed and `false` if the animation is cancelled.\n * @example\n * const anim = new Animation({\n * properties: {\n * width: {start: 100, end: 200}\n * },\n * duration: 5000,\n * onTick: (properties) => element.style.width = `${properties.width}px`;\n * });\n *\n * anim.then((completed) => ...);\n *\n * anim.cancel()\n */\nexport class Animation {\n\n /**\n * @param {Object} options\n * @param {Object.} options.properties\n * @param {number} options.properties[].start\n * @param {number} options.properties[].end\n * @param {number} options.duration\n * @param {number} [options.delay=0]\n * @param {string} [options.easing='linear']\n * @param {PSV.utils.Animation.OnTick} options.onTick - called on each frame\n */\n constructor(options) {\n this.__callbacks = [];\n\n if (options) {\n if (!options.easing || typeof options.easing === 'string') {\n options.easing = EASINGS[options.easing || 'linear'];\n }\n\n this.__start = null;\n this.options = options;\n\n if (options.delay) {\n this.__delayTimeout = setTimeout(() => {\n this.__delayTimeout = null;\n this.__animationFrame = window.requestAnimationFrame(t => this.__run(t));\n }, options.delay);\n }\n else {\n this.__animationFrame = window.requestAnimationFrame(t => this.__run(t));\n }\n }\n else {\n this.__resolved = true;\n }\n }\n\n /**\n * @summary Main loop for the animation\n * @param {number} timestamp\n * @private\n */\n __run(timestamp) {\n // first iteration\n if (this.__start === null) {\n this.__start = timestamp;\n }\n\n // compute progress\n const progress = (timestamp - this.__start) / this.options.duration;\n const current = {};\n\n if (progress < 1.0) {\n // interpolate properties\n each(this.options.properties, (prop, name) => {\n if (prop) {\n current[name] = prop.start + (prop.end - prop.start) * this.options.easing(progress);\n }\n });\n this.options.onTick(current, progress);\n\n this.__animationFrame = window.requestAnimationFrame(t => this.__run(t));\n }\n else {\n // call onTick one last time with final values\n each(this.options.properties, (prop, name) => {\n if (prop) {\n current[name] = prop.end;\n }\n });\n this.options.onTick(current, 1.0);\n\n this.__animationFrame = window.requestAnimationFrame(() => {\n this.__resolved = true;\n this.__resolve(true);\n });\n }\n }\n\n /**\n * @private\n */\n __resolve(value) {\n this.__callbacks.forEach(cb => cb(value));\n this.__callbacks.length = 0;\n }\n\n /**\n * @summary Promise chaining\n * @param {Function} [onFulfilled] - Called when the animation is complete (true) or cancelled (false)\n * @param {Function} [onRejected] - deprecated\n * @returns {Promise}\n */\n then(onFulfilled = null, onRejected = null) {\n if (onRejected) {\n logWarn('Animation#then does not accept a rejection handler anymore');\n }\n\n if (this.__resolved || this.__cancelled) {\n return Promise.resolve(this.__resolved)\n .then(onFulfilled);\n }\n\n return new Promise((resolve) => {\n this.__callbacks.push(resolve);\n })\n .then(onFulfilled);\n }\n\n /**\n * @summary Cancels the animation\n */\n cancel() {\n if (!this.__cancelled && !this.__resolved) {\n this.__cancelled = true;\n this.__resolve(false);\n\n if (this.__delayTimeout) {\n window.clearTimeout(this.__delayTimeout);\n this.__delayTimeout = null;\n }\n if (this.__animationFrame) {\n window.cancelAnimationFrame(this.__animationFrame);\n this.__animationFrame = null;\n }\n }\n }\n\n /**\n * @deprecated not supported anymore\n */\n catch() {\n logWarn('Animation#catch is not supported anymore');\n return this.then();\n }\n\n /**\n * @deprecated not supported anymore\n */\n finally(onFinally) {\n logWarn('Animation#finally is not supported anymore');\n return this.then(onFinally);\n }\n\n /**\n * @deprecated not supported anymore\n */\n static resolve() {\n logWarn('Animation.resolve is not supported anymore');\n }\n\n}\n","import { PSVError } from '../PSVError';\nimport { bound, loop } from './index';\n\n/**\n * @summary Represents a variable that can dynamically change with time (using requestAnimationFrame)\n * @memberOf PSV.utils\n */\nexport class Dynamic {\n\n static STOP = 0;\n static INFINITE = 1;\n static POSITION = 2;\n\n /**\n * @param {Function} [fn] Callback function\n * @param {number} [defaultValue] Default position\n * @param {number} [min] Minimum position\n * @param {number} [max] Maximum position\n * @param {boolean} [loopValue] Loop value between min and max\n */\n constructor(fn, defaultValue = 0, min = -Infinity, max = Infinity, loopValue = false) {\n /**\n * @type {Function}\n * @private\n * @readonly\n */\n this.fn = fn;\n\n /**\n * @type {number}\n * @private\n */\n this.mode = Dynamic.STOP;\n\n /**\n * @type {number}\n * @private\n */\n this.speed = 0;\n\n /**\n * @type {number}\n * @private\n */\n this.speedMult = 1;\n\n /**\n * @type {number}\n * @private\n */\n this.currentSpeed = 0;\n\n /**\n * @type {number}\n * @private\n */\n this.target = 0;\n\n /**\n * @type {number}\n * @readonly\n */\n this.current = defaultValue;\n\n /**\n * @type {number}\n * @private\n */\n this.min = min;\n\n /**\n * @type {number}\n * @private\n */\n this.max = max;\n\n /**\n * @type {boolean}\n * @private\n */\n this.loopValue = loopValue;\n\n if (loopValue && min !== 0) {\n throw new PSVError('invalid config');\n }\n\n if (this.fn) {\n this.fn(defaultValue);\n }\n }\n\n /**\n * Changes base speed\n * @param {number} speed\n */\n setSpeed(speed) {\n this.speed = speed;\n }\n\n /**\n * Defines the target position\n * @param {number} position\n * @param {number} [speedMult=1]\n */\n goto(position, speedMult = 1) {\n this.mode = Dynamic.POSITION;\n this.target = this.loopValue ? loop(position, this.max) : bound(position, this.min, this.max);\n this.speedMult = speedMult;\n }\n\n /**\n * Increase/decrease the target position\n * @param {number} step\n * @param {number} [speedMult=1]\n */\n step(step, speedMult = 1) {\n if (this.mode !== Dynamic.POSITION) {\n this.target = this.current;\n }\n this.goto(this.target + step, speedMult);\n }\n\n /**\n * Starts infinite movement\n * @param {boolean} [invert=false]\n * @param {number} [speedMult=1]\n */\n roll(invert = false, speedMult = 1) {\n this.mode = Dynamic.INFINITE;\n this.target = invert ? -Infinity : Infinity;\n this.speedMult = speedMult;\n }\n\n /**\n * Stops movement\n */\n stop() {\n this.mode = Dynamic.STOP;\n }\n\n /**\n * Defines the current position and immediately stops movement\n * @param {number} value\n */\n setValue(value) {\n this.target = this.loopValue ? loop(value, this.max) : bound(value, this.min, this.max);\n this.mode = Dynamic.STOP;\n if (this.target !== this.current) {\n this.current = this.target;\n if (this.fn) {\n this.fn(this.current);\n }\n return true;\n }\n return false;\n }\n\n /**\n * @package\n */\n update(elapsed) {\n // in position mode switch to stop mode when in the decceleration window\n if (this.mode === Dynamic.POSITION) {\n // in loop mode, alter \"current\" to avoid crossing the origin\n if (this.loopValue && Math.abs(this.target - this.current) > this.max / 2) {\n this.current = this.current < this.target ? this.current + this.max : this.current - this.max;\n }\n\n const dstStop = this.currentSpeed * this.currentSpeed / (this.speed * this.speedMult * 4);\n if (Math.abs(this.target - this.current) <= dstStop) {\n this.mode = Dynamic.STOP;\n }\n }\n\n // compute speed\n let targetSpeed = this.mode === Dynamic.STOP ? 0 : this.speed * this.speedMult;\n if (this.target < this.current) {\n targetSpeed = -targetSpeed;\n }\n if (this.currentSpeed < targetSpeed) {\n this.currentSpeed = Math.min(targetSpeed, this.currentSpeed + elapsed / 1000 * this.speed * this.speedMult * 2);\n }\n else if (this.currentSpeed > targetSpeed) {\n this.currentSpeed = Math.max(targetSpeed, this.currentSpeed - elapsed / 1000 * this.speed * this.speedMult * 2);\n }\n\n // compute new position\n let next = null;\n if (this.current > this.target && this.currentSpeed) {\n next = Math.max(this.target, this.current + this.currentSpeed * elapsed / 1000);\n }\n else if (this.current < this.target && this.currentSpeed) {\n next = Math.min(this.target, this.current + this.currentSpeed * elapsed / 1000);\n }\n\n // apply value\n if (next !== null) {\n next = this.loopValue ? loop(next, this.max) : bound(next, this.min, this.max);\n if (next !== this.current) {\n this.current = next;\n if (this.fn) {\n this.fn(this.current);\n }\n return true;\n }\n }\n\n return false;\n }\n\n}\n","import { each } from './index';\n\n/**\n * @summary Wrapper for multiple {@link PSV.utils.Dynamic} evolving together\n * @memberOf PSV.utils\n */\nexport class MultiDynamic {\n\n /**\n * @type {Object}\n * @readonly\n */\n get current() {\n const values = {};\n each(this.dynamics, (dynamic, name) => {\n values[name] = dynamic.current;\n });\n return values;\n }\n\n /**\n * @param {Record} dynamics\n * @param {Function} [fn] Callback function\n */\n constructor(dynamics, fn) {\n /**\n * @type {Function}\n * @private\n * @readonly\n */\n this.fn = fn;\n\n /**\n * @type {Record}\n * @private\n * @readonly\n */\n this.dynamics = dynamics;\n\n if (this.fn) {\n this.fn(this.current);\n }\n }\n\n /**\n * Changes base speed\n * @param {number} speed\n */\n setSpeed(speed) {\n each(this.dynamics, (d) => {\n d.setSpeed(speed);\n });\n }\n\n /**\n * Defines the target positions\n * @param {Record} positions\n * @param {number} [speedMult=1]\n */\n goto(positions, speedMult = 1) {\n each(positions, (position, name) => {\n this.dynamics[name].goto(position, speedMult);\n });\n }\n\n /**\n * Increase/decrease the target positions\n * @param {Record} steps\n * @param {number} [speedMult=1]\n */\n step(steps, speedMult = 1) {\n each(steps, (step, name) => {\n this.dynamics[name].step(step, speedMult);\n });\n }\n\n /**\n * Starts infinite movements\n * @param {Record} rolls\n * @param {number} [speedMult=1]\n */\n roll(rolls, speedMult = 1) {\n each(rolls, (roll, name) => {\n this.dynamics[name].roll(roll, speedMult);\n });\n }\n\n /**\n * Stops movements\n */\n stop() {\n each(this.dynamics, d => d.stop());\n }\n\n /**\n * Defines the current positions and immediately stops movements\n * @param {Record} values\n */\n setValue(values) {\n let hasUpdates = false;\n each(values, (value, name) => {\n hasUpdates |= this.dynamics[name].setValue(value);\n });\n\n if (hasUpdates && this.fn) {\n this.fn(this.current);\n }\n\n return hasUpdates;\n }\n\n /**\n * @package\n */\n update(elapsed) {\n let hasUpdates = false;\n each(this.dynamics, (dynamic) => {\n hasUpdates |= dynamic.update(elapsed);\n });\n\n if (hasUpdates && this.fn) {\n this.fn(this.current);\n }\n\n return hasUpdates;\n }\n\n}\n","import { EventEmitter } from 'uevent';\n\n/**\n * @summary Helper to make sliders elements\n * @memberOf PSV.utils\n */\nexport class Slider extends EventEmitter {\n\n static VERTICAL = 1;\n static HORIZONTAL = 2;\n\n /**\n * @type {boolean}\n * @readonly\n */\n get vertical() {\n return this.prop.direction === Slider.VERTICAL;\n }\n\n constructor({ psv, container, direction, onUpdate }) {\n super();\n\n /**\n * @summary Reference to main controller\n * @type {PSV.Viewer}\n * @readonly\n */\n this.psv = psv;\n\n /**\n * @member {HTMLElement}\n * @readonly\n */\n this.container = container;\n\n /**\n * @summary Internal properties\n * @member {Object}\n * @protected\n * @property {boolean} mousedown\n * @property {number} mediaMinWidth\n */\n this.prop = {\n onUpdate : onUpdate,\n direction: direction,\n mousedown: false,\n mouseover: false,\n };\n\n this.container.addEventListener('click', this);\n this.container.addEventListener('mousedown', this);\n this.container.addEventListener('mouseenter', this);\n this.container.addEventListener('mouseleave', this);\n this.container.addEventListener('touchstart', this);\n this.container.addEventListener('mousemove', this, true);\n this.container.addEventListener('touchmove', this, true);\n window.addEventListener('mouseup', this);\n window.addEventListener('touchend', this);\n }\n\n /**\n * @protected\n */\n destroy() {\n window.removeEventListener('mouseup', this);\n window.removeEventListener('touchend', this);\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case 'click': e.stopPropagation(); break;\n case 'mousedown': this.__onMouseDown(e); break;\n case 'mouseenter': this.__onMouseEnter(e); break;\n case 'mouseleave': this.__onMouseLeave(e); break;\n case 'touchstart': this.__onTouchStart(e); break;\n case 'mousemove': this.__onMouseMove(e); break;\n case 'touchmove': this.__onTouchMove(e); break;\n case 'mouseup': this.__onMouseUp(e); break;\n case 'touchend': this.__onTouchEnd(e); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @private\n */\n __onMouseDown(evt) {\n this.prop.mousedown = true;\n this.__update(evt, true);\n }\n\n /**\n * @private\n */\n __onMouseEnter(evt) {\n this.prop.mouseover = true;\n this.__update(evt, true);\n }\n\n /**\n * @private\n */\n __onTouchStart(evt) {\n this.prop.mouseover = true;\n this.prop.mousedown = true;\n this.__update(evt.changedTouches[0], true);\n }\n\n /**\n * @private\n */\n __onMouseMove(evt) {\n if (this.prop.mousedown || this.prop.mouseover) {\n evt.stopPropagation();\n this.__update(evt, true);\n }\n }\n\n /**\n * @private\n */\n __onTouchMove(evt) {\n if (this.prop.mousedown || this.prop.mouseover) {\n evt.stopPropagation();\n this.__update(evt.changedTouches[0], true);\n }\n }\n\n /**\n * @private\n */\n __onMouseUp(evt) {\n if (this.prop.mousedown) {\n this.prop.mousedown = false;\n this.__update(evt, false);\n }\n }\n\n /**\n * @private\n */\n __onMouseLeave(evt) {\n if (this.prop.mouseover) {\n this.prop.mouseover = false;\n this.__update(evt, true);\n }\n }\n\n /**\n * @private\n */\n __onTouchEnd(evt) {\n if (this.prop.mousedown) {\n this.prop.mouseover = false;\n this.prop.mousedown = false;\n this.__update(evt.changedTouches[0], false);\n }\n }\n\n /**\n * @private\n */\n __update(evt, moving) {\n const boundingClientRect = this.container.getBoundingClientRect();\n const cursor = evt[this.vertical ? 'clientY' : 'clientX'];\n const pos = boundingClientRect[this.vertical ? 'bottom' : 'left'];\n const size = boundingClientRect[this.vertical ? 'height' : 'width'];\n const val = Math.abs((pos - cursor) / size);\n\n this.prop.onUpdate({\n value : val,\n click : !moving,\n mousedown: this.prop.mousedown,\n mouseover: this.prop.mouseover,\n cursor : evt,\n });\n }\n\n}\n","/**\n * @namespace PSV.utils\n */\n\nexport * from './browser';\nexport * from './math';\nexport * from './misc';\nexport * from './psv';\n\nexport * from './Animation';\nexport * from './Dynamic';\nexport * from './MultiDynamic';\nexport * from './Slider';\n","import * as THREE from 'three';\nimport { SPHERE_RADIUS } from '../../data/constants';\nimport { SYSTEM } from '../../data/system';\nimport { PSVError } from '../../PSVError';\nimport { createTexture, firstNonNull, getXMPValue, isPowerOfTwo, logWarn } from '../../utils';\nimport { AbstractAdapter } from '../AbstractAdapter';\n\n\n/**\n * @typedef {Object} PSV.adapters.EquirectangularAdapter.Options\n * @property {number} [resolution=64] - number of faces of the sphere geometry, higher values may decrease performances\n */\n\n\n/**\n * @summary Adapter for equirectangular panoramas\n * @memberof PSV.adapters\n * @extends PSV.adapters.AbstractAdapter\n */\nexport class EquirectangularAdapter extends AbstractAdapter {\n\n static id = 'equirectangular';\n static supportsDownload = true;\n\n /**\n * @param {PSV.Viewer} psv\n * @param {PSV.adapters.EquirectangularAdapter.Options} options\n */\n constructor(psv, options) {\n super(psv);\n\n /**\n * @member {PSV.adapters.EquirectangularAdapter.Options}\n * @private\n */\n this.config = {\n resolution: 64,\n ...options,\n };\n\n if (!isPowerOfTwo(this.config.resolution)) {\n throw new PSVError('EquirectangularAdapter resolution must be power of two');\n }\n\n this.SPHERE_SEGMENTS = this.config.resolution;\n this.SPHERE_HORIZONTAL_SEGMENTS = this.SPHERE_SEGMENTS / 2;\n }\n\n /**\n * @override\n */\n supportsTransition() {\n return true;\n }\n\n /**\n * @override\n */\n supportsPreload() {\n return true;\n }\n\n /**\n * @override\n * @param {string} panorama\n * @param {PSV.PanoData | PSV.PanoDataProvider} [newPanoData]\n * @returns {Promise.}\n */\n loadTexture(panorama, newPanoData) {\n if (typeof panorama !== 'string') {\n if (Array.isArray(panorama) || typeof panorama === 'object' && !!panorama.left) {\n logWarn('Cubemap support now requires an additional adapter, see https://photo-sphere-viewer.js.org/guide/adapters');\n }\n return Promise.reject(new PSVError('Invalid panorama url, are you using the right adapter?'));\n }\n\n return (\n !this.psv.config.useXmpData\n ? this.psv.textureLoader.loadImage(panorama, p => this.psv.loader.setProgress(p))\n .then(img => ({ img: img, xmpPanoData: null }))\n : this.__loadXMP(panorama, p => this.psv.loader.setProgress(p))\n .then(xmpPanoData => this.psv.textureLoader.loadImage(panorama).then(img => ({ img, xmpPanoData })))\n )\n .then(({ img, xmpPanoData }) => {\n if (typeof newPanoData === 'function') {\n newPanoData = newPanoData(img);\n }\n\n const panoData = {\n fullWidth : firstNonNull(newPanoData?.fullWidth, xmpPanoData?.fullWidth, img.width),\n fullHeight : firstNonNull(newPanoData?.fullHeight, xmpPanoData?.fullHeight, img.height),\n croppedWidth : firstNonNull(newPanoData?.croppedWidth, xmpPanoData?.croppedWidth, img.width),\n croppedHeight: firstNonNull(newPanoData?.croppedHeight, xmpPanoData?.croppedHeight, img.height),\n croppedX : firstNonNull(newPanoData?.croppedX, xmpPanoData?.croppedX, 0),\n croppedY : firstNonNull(newPanoData?.croppedY, xmpPanoData?.croppedY, 0),\n poseHeading : firstNonNull(newPanoData?.poseHeading, xmpPanoData?.poseHeading, 0),\n posePitch : firstNonNull(newPanoData?.posePitch, xmpPanoData?.posePitch, 0),\n poseRoll : firstNonNull(newPanoData?.poseRoll, xmpPanoData?.poseRoll, 0),\n };\n\n if (panoData.croppedWidth !== img.width || panoData.croppedHeight !== img.height) {\n logWarn(`Invalid panoData, croppedWidth and/or croppedHeight is not coherent with loaded image.\n panoData: ${panoData.croppedWidth}x${panoData.croppedHeight}, image: ${img.width}x${img.height}`);\n }\n if ((newPanoData || xmpPanoData) && panoData.fullWidth !== panoData.fullHeight * 2) {\n logWarn('Invalid panoData, fullWidth should be twice fullHeight');\n }\n\n const texture = this.__createEquirectangularTexture(img, panoData);\n\n return { panorama, texture, panoData };\n });\n }\n\n /**\n * @summary Loads the XMP data of an image\n * @param {string} panorama\n * @param {function(number)} [onProgress]\n * @returns {Promise}\n * @throws {PSV.PSVError} when the image cannot be loaded\n * @private\n */\n __loadXMP(panorama, onProgress) {\n return this.psv.textureLoader.loadFile(panorama, onProgress)\n .then(blob => this.__loadBlobAsString(blob))\n .then((binary) => {\n const a = binary.indexOf('');\n const data = binary.substring(a, b);\n\n if (a !== -1 && b !== -1 && data.includes('GPano:')) {\n return {\n fullWidth : getXMPValue(data, 'FullPanoWidthPixels'),\n fullHeight : getXMPValue(data, 'FullPanoHeightPixels'),\n croppedWidth : getXMPValue(data, 'CroppedAreaImageWidthPixels'),\n croppedHeight: getXMPValue(data, 'CroppedAreaImageHeightPixels'),\n croppedX : getXMPValue(data, 'CroppedAreaLeftPixels'),\n croppedY : getXMPValue(data, 'CroppedAreaTopPixels'),\n poseHeading : getXMPValue(data, 'PoseHeadingDegrees'),\n posePitch : getXMPValue(data, 'PosePitchDegrees'),\n poseRoll : getXMPValue(data, 'PoseRollDegrees'),\n };\n }\n\n return null;\n });\n }\n\n /**\n * @summmary read a Blob as string\n * @param {Blob} blob\n * @returns {Promise}\n * @private\n */\n __loadBlobAsString(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result);\n reader.onerror = reject;\n reader.readAsText(blob);\n });\n }\n\n /**\n * @summary Creates the final texture from image and panorama data\n * @param {Image} img\n * @param {PSV.PanoData} panoData\n * @returns {external:THREE.Texture}\n * @private\n */\n __createEquirectangularTexture(img, panoData) {\n // resize image / fill cropped parts with black\n if (panoData.fullWidth > SYSTEM.maxTextureWidth\n || panoData.croppedWidth !== panoData.fullWidth\n || panoData.croppedHeight !== panoData.fullHeight\n ) {\n const ratio = SYSTEM.getMaxCanvasWidth() / panoData.fullWidth;\n\n const resizedPanoData = { ...panoData };\n if (ratio < 1) {\n resizedPanoData.fullWidth *= ratio;\n resizedPanoData.fullHeight *= ratio;\n resizedPanoData.croppedWidth *= ratio;\n resizedPanoData.croppedHeight *= ratio;\n resizedPanoData.croppedX *= ratio;\n resizedPanoData.croppedY *= ratio;\n }\n\n const buffer = document.createElement('canvas');\n buffer.width = resizedPanoData.fullWidth;\n buffer.height = resizedPanoData.fullHeight;\n\n const ctx = buffer.getContext('2d');\n ctx.drawImage(img,\n resizedPanoData.croppedX, resizedPanoData.croppedY,\n resizedPanoData.croppedWidth, resizedPanoData.croppedHeight);\n\n return createTexture(buffer);\n }\n\n return createTexture(img);\n }\n\n /**\n * @override\n */\n createMesh(scale = 1) {\n // The middle of the panorama is placed at longitude=0\n const geometry = new THREE.SphereGeometry(\n SPHERE_RADIUS * scale,\n this.SPHERE_SEGMENTS,\n this.SPHERE_HORIZONTAL_SEGMENTS,\n -Math.PI / 2\n )\n .scale(-1, 1, 1);\n\n const material = new THREE.MeshBasicMaterial();\n\n return new THREE.Mesh(geometry, material);\n }\n\n /**\n * @override\n */\n setTexture(mesh, textureData) {\n mesh.material.map?.dispose();\n mesh.material.map = textureData.texture;\n }\n\n /**\n * @override\n */\n setTextureOpacity(mesh, opacity) {\n mesh.material.opacity = opacity;\n mesh.material.transparent = opacity < 1;\n }\n\n /**\n * @override\n */\n disposeTexture(textureData) {\n textureData.texture?.dispose();\n }\n\n}\n","/**\n * @namespace PSV.components\n */\n\n/**\n * @summary Base component class\n * @memberof PSV.components\n * @abstract\n */\nexport class AbstractComponent {\n\n /**\n * @param {PSV.Viewer | PSV.components.AbstractComponent} parent\n * @param {string} className - CSS class added to the component's container\n */\n constructor(parent, className) {\n /**\n * @summary Reference to main controller\n * @type {PSV.Viewer}\n * @readonly\n */\n this.psv = parent.psv || parent;\n\n /**\n * @member {PSV.Viewer|PSV.components.AbstractComponent}\n * @readonly\n */\n this.parent = parent;\n this.parent.children.push(this);\n\n /**\n * @summary All child components\n * @type {PSV.components.AbstractComponent[]}\n * @readonly\n * @package\n */\n this.children = [];\n\n /**\n * @summary Internal properties\n * @member {Object}\n * @protected\n * @property {boolean} visible - Visibility of the component\n */\n this.prop = {\n visible: true,\n };\n\n /**\n * @member {HTMLElement}\n * @readonly\n */\n this.container = document.createElement('div');\n this.container.className = className;\n this.parent.container.appendChild(this.container);\n }\n\n /**\n * @summary Destroys the component\n * @protected\n */\n destroy() {\n this.parent.container.removeChild(this.container);\n\n const childIdx = this.parent.children.indexOf(this);\n if (childIdx !== -1) {\n this.parent.children.splice(childIdx, 1);\n }\n\n this.children.slice().forEach(child => child.destroy());\n this.children.length = 0;\n\n delete this.container;\n delete this.parent;\n delete this.psv;\n delete this.prop;\n }\n\n /**\n * @summary Refresh UI\n * @description Must be be a very lightweight operation\n * @package\n */\n refreshUi() {\n this.children.every((child) => {\n child.refreshUi();\n return this.psv.prop.uiRefresh === true;\n });\n }\n\n /**\n * @summary Displays or hides the component\n */\n toggle() {\n if (this.isVisible()) {\n this.hide();\n }\n else {\n this.show();\n }\n }\n\n /**\n * @summary Hides the component\n */\n hide() {\n this.container.style.display = 'none';\n this.prop.visible = false;\n }\n\n /**\n * @summary Displays the component\n */\n show() {\n this.container.style.display = '';\n this.prop.visible = true;\n }\n\n /**\n * @summary Checks if the component is visible\n * @returns {boolean}\n */\n isVisible() {\n return this.prop.visible;\n }\n\n}\n","import { AbstractComponent } from '../components/AbstractComponent';\nimport { KEY_CODES } from '../data/constants';\nimport { PSVError } from '../PSVError';\nimport { isPlainObject, toggleClass } from '../utils';\n\n/**\n * @namespace PSV.buttons\n */\n\n/**\n * @summary Base navbar button class\n * @extends PSV.components.AbstractComponent\n * @memberof PSV.buttons\n * @abstract\n */\nexport class AbstractButton extends AbstractComponent {\n\n /**\n * @summary Unique identifier of the button\n * @member {string}\n * @readonly\n * @static\n */\n static id = null;\n\n /**\n * @summary Identifier to declare a group of buttons\n * @member {string}\n * @readonly\n * @static\n */\n static groupId = null;\n\n /**\n * @summary SVG icon name injected in the button\n * @member {string}\n * @readonly\n * @static\n */\n static icon = null;\n\n /**\n * @summary SVG icon name injected in the button when it is active\n * @member {string}\n * @readonly\n * @static\n */\n static iconActive = null;\n\n /**\n * @param {PSV.components.Navbar} navbar\n * @param {string} [className] - Additional CSS classes\n * @param {boolean} [collapsable=false] - `true` if the button can be moved to menu when the navbar is too small\n * @param {boolean} [tabbable=true] - `true` if the button is accessible with the keyboard\n */\n constructor(navbar, className = '', collapsable = false, tabbable = true) {\n super(navbar, 'psv-button ' + className);\n\n /**\n * @override\n * @property {string} id - Unique identifier of the button\n * @property {boolean} enabled\n * @property {boolean} supported\n * @property {boolean} collapsed\n * @property {boolean} active\n * @property {number} width\n */\n this.prop = {\n ...this.prop,\n id : this.constructor.id,\n collapsable: collapsable,\n enabled : true,\n supported : true,\n collapsed : false,\n active : false,\n width : this.container.offsetWidth,\n };\n\n if (this.constructor.icon) {\n this.__setIcon(this.constructor.icon);\n }\n\n if (this.prop.id && this.psv.config.lang[this.prop.id]) {\n this.container.title = this.psv.config.lang[this.prop.id];\n }\n\n if (tabbable) {\n this.container.tabIndex = 0;\n }\n\n this.container.addEventListener('click', (e) => {\n if (this.prop.enabled) {\n this.onClick();\n }\n e.stopPropagation();\n });\n\n this.container.addEventListener('keydown', (e) => {\n if (e.key === KEY_CODES.Enter && this.prop.enabled) {\n this.onClick();\n e.stopPropagation();\n }\n });\n }\n\n /**\n * @package\n */\n checkSupported() {\n const supportedOrObject = this.isSupported();\n if (isPlainObject(supportedOrObject)) {\n if (supportedOrObject.initial === false) {\n this.hide();\n this.prop.supported = false;\n }\n\n supportedOrObject.promise.then((supported) => {\n if (!this.prop) {\n return; // the component has been destroyed\n }\n this.prop.supported = supported;\n if (!supported) {\n this.hide();\n }\n else {\n this.show();\n }\n });\n }\n else {\n this.prop.supported = supportedOrObject;\n if (!supportedOrObject) {\n this.hide();\n }\n }\n }\n\n /**\n * @summary Checks if the button can be displayed\n * @returns {boolean|{initial: boolean, promise: Promise}}\n */\n isSupported() {\n return true;\n }\n\n /**\n * @summary Changes the active state of the button\n * @param {boolean} [active] - forced state\n */\n toggleActive(active) {\n this.prop.active = active !== undefined ? active : !this.prop.active;\n toggleClass(this.container, 'psv-button--active', this.prop.active);\n\n if (this.constructor.iconActive) {\n this.__setIcon(this.prop.active ? this.constructor.iconActive : this.constructor.icon);\n }\n }\n\n /**\n * @override\n */\n show(refresh = true) {\n if (!this.isVisible()) {\n this.prop.visible = true;\n if (!this.prop.collapsed) {\n this.container.style.display = '';\n }\n if (refresh) {\n this.psv.refreshUi(`show button ${this.prop.id}`);\n }\n }\n }\n\n /**\n * @override\n */\n hide(refresh = true) {\n if (this.isVisible()) {\n this.prop.visible = false;\n this.container.style.display = 'none';\n if (refresh) {\n this.psv.refreshUi(`hide button ${this.prop.id}`);\n }\n }\n }\n\n /**\n * @summary Disables the button\n */\n disable() {\n this.container.classList.add('psv-button--disabled');\n this.prop.enabled = false;\n }\n\n /**\n * @summary Enables the button\n */\n enable() {\n this.container.classList.remove('psv-button--disabled');\n this.prop.enabled = true;\n }\n\n /**\n * @summary Collapses the button in the navbar menu\n */\n collapse() {\n this.prop.collapsed = true;\n this.container.style.display = 'none';\n }\n\n /**\n * @summary Uncollapses the button from the navbar menu\n */\n uncollapse() {\n this.prop.collapsed = false;\n if (this.prop.visible) {\n this.container.style.display = '';\n }\n }\n\n /**\n * @summary Set the button icon\n * @param {string} icon SVG\n * @param {HTMLElement} [container] - default is the main button container\n * @private\n */\n __setIcon(icon, container = this.container) {\n if (icon) {\n container.innerHTML = icon;\n // className is read-only on SVGElement\n container.querySelector('svg').classList.add('psv-button-svg');\n }\n else {\n container.innerHTML = '';\n }\n }\n\n /**\n * @summary Action when the button is clicked\n * @private\n * @abstract\n */\n onClick() {\n throw new PSVError(`onClick not implemented for button \"${this.prop.id}\".`);\n }\n\n}\n","import { EVENTS } from '../data/constants';\nimport playActive from '../icons/play-active.svg';\nimport play from '../icons/play.svg';\nimport { AbstractButton } from './AbstractButton';\n\n/**\n * @summary Navigation bar autorotate button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class AutorotateButton extends AbstractButton {\n\n static id = 'autorotate';\n static icon = play;\n static iconActive = playActive;\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, 'psv-button--hover-scale psv-autorotate-button', true);\n\n this.psv.on(EVENTS.AUTOROTATE, this);\n }\n\n /**\n * @override\n */\n destroy() {\n this.psv.off(EVENTS.AUTOROTATE, this);\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case EVENTS.AUTOROTATE: this.toggleActive(e.args[0]); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n * @description Toggles autorotate\n */\n onClick() {\n this.psv.toggleAutorotate();\n }\n\n}\n","import { addClasses } from '../utils';\nimport { AbstractButton } from './AbstractButton';\n\n/**\n * @summary Navigation bar custom button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class CustomButton extends AbstractButton {\n\n /**\n * @param {PSV.components.Navbar} navbar\n * @param {PSV.NavbarCustomButton} config\n */\n constructor(navbar, config) {\n super(navbar, 'psv-custom-button', config.collapsable !== false, config.tabbable !== false);\n\n /**\n * @member {Object}\n * @readonly\n * @private\n */\n this.config = config;\n\n if (this.config.id) {\n this.prop.id = this.config.id;\n }\n else {\n this.prop.id = 'psvButton-' + Math.random().toString(36).substr(2, 9);\n }\n\n if (this.config.className) {\n addClasses(this.container, this.config.className);\n }\n\n if (this.config.title) {\n this.container.title = this.config.title;\n }\n\n if (this.config.content) {\n this.container.innerHTML = this.config.content;\n }\n\n this.prop.width = this.container.offsetWidth;\n\n if (this.config.enabled === false) {\n this.disable();\n }\n\n if (this.config.visible === false) {\n this.hide();\n }\n }\n\n /**\n * @override\n */\n destroy() {\n delete this.config;\n\n super.destroy();\n }\n\n /**\n * @override\n * @description Calls user method\n */\n onClick() {\n if (this.config.onClick) {\n this.config.onClick.apply(this.psv);\n }\n }\n\n}\n","import { DescriptionButton } from '../buttons/DescriptionButton';\nimport { AbstractComponent } from './AbstractComponent';\n\n/**\n * @summary Navbar caption class\n * @extends PSV.components.AbstractComponent\n * @memberof PSV.components\n */\nexport class NavbarCaption extends AbstractComponent {\n\n static id = 'caption';\n\n /**\n * @param {PSV.components.Navbar} navbar\n * @param {string} caption\n */\n constructor(navbar, caption) {\n super(navbar, 'psv-caption');\n\n /**\n * @override\n * @property {string} id\n * @property {boolean} collapsable\n * @property {number} width\n * @property {number} contentWidth - width of the caption content\n */\n this.prop = {\n ...this.prop,\n id : this.constructor.id,\n collapsable : false,\n width : 0,\n contentWidth: 0,\n };\n\n /**\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.content = document.createElement('div');\n this.content.className = 'psv-caption-content';\n this.container.appendChild(this.content);\n\n this.setCaption(caption);\n }\n\n /**\n * @override\n */\n destroy() {\n delete this.content;\n\n super.destroy();\n }\n\n /**\n * @summary Sets the bar caption\n * @param {string} html\n */\n setCaption(html) {\n this.show();\n this.content.innerHTML = html;\n this.prop.contentWidth = html ? this.content.offsetWidth : 0;\n this.refreshUi();\n }\n\n /**\n * @summary Toggles content and icon depending on available space\n * @private\n */\n refreshUi() {\n const availableWidth = this.container.offsetWidth;\n if (availableWidth >= this.prop.contentWidth) {\n this.show();\n }\n else if (availableWidth < this.prop.contentWidth) {\n this.hide();\n }\n this.__refreshButton();\n }\n\n /**\n * @override\n */\n hide() {\n this.content.style.display = 'none';\n this.prop.visible = false;\n }\n\n /**\n * @override\n */\n show() {\n this.content.style.display = '';\n this.prop.visible = true;\n }\n\n /**\n * @private\n */\n __refreshButton() {\n this.psv.navbar.getButton(DescriptionButton.id, false)?.refreshUi(true);\n }\n\n}\n","import { NavbarCaption } from '../components/NavbarCaption';\nimport { EVENTS, IDS } from '../data/constants';\nimport info from '../icons/info.svg';\nimport { AbstractButton } from './AbstractButton';\n\nconst MODE_NOTIF = 1;\nconst MODE_PANEL = 2;\n\n/**\n * @summary Navigation bar description button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class DescriptionButton extends AbstractButton {\n\n static id = 'description';\n static icon = info;\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, 'psv-button--hover-scale psv-description-button');\n\n /**\n * @override\n * @property {string} mode - notification or panel\n */\n this.prop = {\n ...this.prop,\n mode: null,\n };\n\n this.psv.on(EVENTS.HIDE_NOTIFICATION, this);\n this.psv.on(EVENTS.SHOW_NOTIFICATION, this);\n this.psv.on(EVENTS.CLOSE_PANEL, this);\n this.psv.on(EVENTS.OPEN_PANEL, this);\n }\n\n /**\n * @override\n */\n destroy() {\n this.psv.off(EVENTS.HIDE_NOTIFICATION, this);\n this.psv.off(EVENTS.SHOW_NOTIFICATION, this);\n this.psv.off(EVENTS.CLOSE_PANEL, this);\n this.psv.off(EVENTS.OPEN_PANEL, this);\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n if (!this.prop.mode) {\n return;\n }\n\n let closed = false;\n switch (e.type) {\n case EVENTS.HIDE_NOTIFICATION:\n closed = this.prop.mode === MODE_NOTIF;\n break;\n\n case EVENTS.SHOW_NOTIFICATION:\n closed = this.prop.mode === MODE_NOTIF && e.args[0] !== IDS.DESCRIPTION;\n break;\n\n case EVENTS.CLOSE_PANEL:\n closed = this.prop.mode === MODE_PANEL;\n break;\n\n case EVENTS.OPEN_PANEL:\n closed = this.prop.mode === MODE_PANEL && e.args[0] !== IDS.DESCRIPTION;\n break;\n\n default:\n }\n\n if (closed) {\n this.toggleActive(false);\n this.prop.mode = null;\n }\n }\n\n /**\n * @override\n */\n hide(refresh) {\n super.hide(refresh);\n\n if (this.prop.mode) {\n this.__close();\n }\n }\n\n /**\n * This button can only be refresh from NavbarCaption\n * @override\n */\n refreshUi(refresh = false) {\n if (refresh) {\n const caption = this.psv.navbar.getButton(NavbarCaption.id, false);\n const captionHidden = caption && !caption.isVisible();\n const hasDescription = !!this.psv.config.description;\n\n if (captionHidden || hasDescription) {\n this.show(false);\n }\n else {\n this.hide(false);\n }\n }\n }\n\n /**\n * @override\n * @description Toggles caption\n */\n onClick() {\n if (this.prop.mode) {\n this.__close();\n }\n else {\n this.__open();\n }\n }\n\n /**\n * @private\n */\n __close() {\n switch (this.prop.mode) {\n case MODE_NOTIF:\n this.psv.notification.hide(IDS.DESCRIPTION);\n break;\n case MODE_PANEL:\n this.psv.panel.hide(IDS.DESCRIPTION);\n break;\n default:\n }\n }\n\n /**\n * @private\n */\n __open() {\n this.toggleActive(true);\n\n if (this.psv.config.description) {\n this.prop.mode = MODE_PANEL;\n this.psv.panel.show({\n id : IDS.DESCRIPTION,\n content: `${this.psv.config.caption ? `

${this.psv.config.caption}

` : ''}${this.psv.config.description}`,\n });\n }\n else {\n this.prop.mode = MODE_NOTIF;\n this.psv.notification.show({\n id : IDS.DESCRIPTION,\n content: this.psv.config.caption,\n });\n }\n }\n\n}\n","import download from '../icons/download.svg';\nimport { AbstractButton } from './AbstractButton';\n\n/**\n * @summary Navigation bar download button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class DownloadButton extends AbstractButton {\n\n static id = 'download';\n static icon = download;\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, 'psv-button--hover-scale psv-download-button', true);\n }\n\n /**\n * @override\n * @description Asks the browser to download the panorama source file\n */\n onClick() {\n const link = document.createElement('a');\n link.href = this.psv.config.downloadUrl || this.psv.config.panorama;\n link.download = link.href.split('/').pop();\n this.psv.container.appendChild(link);\n link.click();\n\n setTimeout(() => {\n this.psv.container.removeChild(link);\n }, 100);\n }\n\n /**\n * @override\n */\n refreshUi() {\n const supported = this.psv.adapter.constructor.supportsDownload || this.psv.config.downloadUrl;\n if (supported && !this.prop.visible) {\n this.show();\n }\n else if (!supported && this.prop.visible) {\n this.hide();\n }\n }\n\n}\n","import { EVENTS } from '../data/constants';\nimport fullscreenIn from '../icons/fullscreen-in.svg';\nimport fullscreenOut from '../icons/fullscreen-out.svg';\nimport { AbstractButton } from './AbstractButton';\n\n/**\n * @summary Navigation bar fullscreen button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class FullscreenButton extends AbstractButton {\n\n static id = 'fullscreen';\n static icon = fullscreenIn;\n static iconActive = fullscreenOut;\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, 'psv-button--hover-scale psv-fullscreen-button');\n\n this.psv.on(EVENTS.FULLSCREEN_UPDATED, this);\n }\n\n /**\n * @override\n */\n destroy() {\n this.psv.off(EVENTS.FULLSCREEN_UPDATED, this);\n\n super.destroy();\n }\n\n /**\n * Handle events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case EVENTS.FULLSCREEN_UPDATED: this.toggleActive(e.args[0]); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n * @description Toggles fullscreen\n */\n onClick() {\n this.psv.toggleFullscreen();\n }\n\n}\n","import { EVENTS, IDS } from '../data/constants';\nimport menuIcon from '../icons/menu.svg';\nimport { dasherize, getClosest } from '../utils';\nimport { AbstractButton } from './AbstractButton';\n\n/**\n * @summary Navigation bar menu button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class MenuButton extends AbstractButton {\n\n static id = 'menu';\n static icon = menuIcon;\n\n /**\n * @summary Property name added to buttons list\n * @type {string}\n * @constant\n */\n static BUTTON_DATA = 'psvButton';\n\n /**\n * @summary Menu template\n * @param {AbstractButton[]} buttons\n * @param {PSV.Viewer} psv\n * @param {string} dataKey\n * @returns {string}\n */\n static MENU_TEMPLATE = (buttons, psv, dataKey) => `\n
\n

${menuIcon} ${psv.config.lang.menu}

\n
    \n ${buttons.map(button => `\n
  • \n ${button.container.innerHTML}\n ${button.container.title}\n
  • \n `).join('')}\n
\n
\n`;\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, 'psv-button--hover-scale psv-menu-button');\n\n this.psv.on(EVENTS.OPEN_PANEL, this);\n this.psv.on(EVENTS.CLOSE_PANEL, this);\n\n super.hide();\n }\n\n /**\n * @override\n */\n destroy() {\n this.psv.off(EVENTS.OPEN_PANEL, this);\n this.psv.off(EVENTS.CLOSE_PANEL, this);\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case EVENTS.OPEN_PANEL: this.toggleActive(e.args[0] === IDS.MENU); break;\n case EVENTS.CLOSE_PANEL: this.toggleActive(false); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n */\n hide(refresh) {\n super.hide(refresh);\n this.__hideMenu();\n }\n\n /**\n * @override\n */\n show(refresh) {\n super.show(refresh);\n\n if (this.prop.active) {\n this.__showMenu();\n }\n }\n\n /**\n * @override\n * @description Toggles menu\n */\n onClick() {\n if (this.prop.active) {\n this.__hideMenu();\n }\n else {\n this.__showMenu();\n }\n }\n\n __showMenu() {\n this.psv.panel.show({\n id : IDS.MENU,\n content : MenuButton.MENU_TEMPLATE(this.parent.collapsed, this.psv, dasherize(MenuButton.BUTTON_DATA)),\n noMargin : true,\n clickHandler: (e) => {\n const li = e.target ? getClosest(e.target, 'li') : undefined;\n const buttonId = li ? li.dataset[MenuButton.BUTTON_DATA] : undefined;\n\n if (buttonId) {\n this.parent.getButton(buttonId).onClick();\n this.__hideMenu();\n }\n },\n });\n }\n\n __hideMenu() {\n this.psv.panel.hide(IDS.MENU);\n }\n\n}\n","/**\n * @summary Helper for pressable things (buttons, keyboard)\n * @description When the pressed thing goes up and was not pressed long enough, wait a bit more before execution\n * @private\n */\nexport class PressHandler {\n\n constructor(delay = 200) {\n this.delay = delay;\n this.time = 0;\n this.timeout = null;\n }\n\n down() {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n\n this.time = new Date().getTime();\n }\n\n up(cb) {\n if (!this.time) {\n return;\n }\n\n const elapsed = new Date().getTime() - this.time;\n if (elapsed < this.delay) {\n this.timeout = setTimeout(() => {\n cb();\n this.timeout = null;\n this.time = 0;\n }, this.delay);\n }\n else {\n cb();\n this.time = 0;\n }\n }\n\n}\n","import { KEY_CODES } from '../data/constants';\nimport { SYSTEM } from '../data/system';\nimport arrow from '../icons/arrow.svg';\nimport { PressHandler } from '../utils/PressHandler';\nimport { AbstractButton } from './AbstractButton';\n\nexport function getOrientedArrow(direction) {\n let angle = 0;\n switch (direction) {\n // @formatter:off\n case 'up': angle = 90; break;\n case 'right': angle = 180; break;\n case 'down': angle = -90; break;\n default: angle = 0; break;\n // @formatter:on\n }\n\n return arrow.replace('rotate(0', `rotate(${angle}`);\n}\n\n/**\n * @summary Navigation bar move button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class AbstractMoveButton extends AbstractButton {\n\n static groupId = 'move';\n\n /**\n * @param {PSV.components.Navbar} navbar\n * @param {number} value\n */\n constructor(navbar, value) {\n super(navbar, 'psv-button--hover-scale psv-move-button');\n\n this.container.title = this.psv.config.lang.move;\n\n /**\n * @override\n * @property {{longitude: boolean, latitude: boolean}} value\n * @property {PressHandler} handler\n */\n this.prop = {\n ...this.prop,\n value : value,\n handler: new PressHandler(),\n };\n\n this.container.addEventListener('mousedown', this);\n this.container.addEventListener('keydown', this);\n this.container.addEventListener('keyup', this);\n this.psv.container.addEventListener('mouseup', this);\n this.psv.container.addEventListener('touchend', this);\n }\n\n /**\n * @override\n */\n destroy() {\n this.__onMouseUp();\n\n this.psv.container.removeEventListener('mouseup', this);\n this.psv.container.removeEventListener('touchend', this);\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case 'mousedown': this.__onMouseDown(); break;\n case 'mouseup': this.__onMouseUp(); break;\n case 'touchend': this.__onMouseUp(); break;\n case 'keydown': e.key === KEY_CODES.Enter && this.__onMouseDown(); break;\n case 'keyup': e.key === KEY_CODES.Enter && this.__onMouseUp(); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n */\n isSupported() {\n return {\n initial: !SYSTEM.isTouchEnabled.initial,\n promise: SYSTEM.isTouchEnabled.promise.then(enabled => !enabled),\n };\n }\n\n /**\n * @override\n */\n onClick() {\n // nothing\n }\n\n /**\n * @private\n */\n __onMouseDown() {\n if (!this.prop.enabled) {\n return;\n }\n\n this.psv.__stopAll();\n this.psv.dynamics.position.roll(this.prop.value);\n this.prop.handler.down();\n }\n\n /**\n * @private\n */\n __onMouseUp() {\n if (!this.prop.enabled) {\n return;\n }\n\n this.prop.handler.up(() => this.psv.dynamics.position.stop());\n }\n\n}\n","import { AbstractMoveButton, getOrientedArrow } from './AbstractMoveButton';\n\n/**\n * @summary Navigation bar move down button class\n * @extends PSV.buttons.AbstractMoveButton\n * @memberof PSV.buttons\n */\nexport class MoveDownButton extends AbstractMoveButton {\n\n static id = 'moveDown';\n static icon = getOrientedArrow('down');\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, { latitude: true });\n }\n\n}\n","import { AbstractMoveButton, getOrientedArrow } from './AbstractMoveButton';\n\n/**\n * @summary Navigation bar move left button class\n * @extends PSV.buttons.AbstractMoveButton\n * @memberof PSV.buttons\n */\nexport class MoveLeftButton extends AbstractMoveButton {\n\n static id = 'moveLeft';\n static icon = getOrientedArrow('left');\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, { longitude: true });\n }\n\n}\n","import { AbstractMoveButton, getOrientedArrow } from './AbstractMoveButton';\n\n/**\n * @summary Navigation bar move right button class\n * @extends PSV.buttons.AbstractMoveButton\n * @memberof PSV.buttons\n */\nexport class MoveRightButton extends AbstractMoveButton {\n\n static id = 'moveRight';\n static icon = getOrientedArrow('right');\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, { longitude: false });\n }\n\n}\n","import { AbstractMoveButton, getOrientedArrow } from './AbstractMoveButton';\n\n/**\n * @summary Navigation bar move up button class\n * @extends PSV.buttons.AbstractMoveButton\n * @memberof PSV.buttons\n */\nexport class MoveUpButton extends AbstractMoveButton {\n\n static id = 'moveUp';\n static icon = getOrientedArrow('up');\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, { latitude: false });\n }\n\n}\n","import { KEY_CODES } from '../data/constants';\nimport { SYSTEM } from '../data/system';\nimport { PressHandler } from '../utils/PressHandler';\nimport { AbstractButton } from './AbstractButton';\n\n/**\n * @summary Navigation bar zoom button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class AbstractZoomButton extends AbstractButton {\n\n static groupId = 'zoom';\n\n /**\n * @param {PSV.components.Navbar} navbar\n * @param {number} value\n */\n constructor(navbar, value) {\n super(navbar, 'psv-button--hover-scale psv-zoom-button');\n\n /**\n * @override\n * @property {boolean} value\n * @property {PressHandler} handler\n */\n this.prop = {\n ...this.prop,\n value : value,\n handler: new PressHandler(),\n };\n\n this.container.addEventListener('mousedown', this);\n this.container.addEventListener('keydown', this);\n this.container.addEventListener('keyup', this);\n this.psv.container.addEventListener('mouseup', this);\n this.psv.container.addEventListener('touchend', this);\n }\n\n /**\n * @override\n */\n destroy() {\n this.__onMouseUp();\n\n this.psv.container.removeEventListener('mouseup', this);\n this.psv.container.removeEventListener('touchend', this);\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case 'mousedown': this.__onMouseDown(); break;\n case 'mouseup': this.__onMouseUp(); break;\n case 'touchend': this.__onMouseUp(); break;\n case 'keydown': e.key === KEY_CODES.Enter && this.__onMouseDown(); break;\n case 'keyup': e.key === KEY_CODES.Enter && this.__onMouseUp(); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n */\n isSupported() {\n return {\n initial: !SYSTEM.isTouchEnabled.initial,\n promise: SYSTEM.isTouchEnabled.promise.then(enabled => !enabled),\n };\n }\n\n /**\n * @override\n */\n onClick() {\n // nothing\n }\n\n /**\n * @private\n */\n __onMouseDown() {\n if (!this.prop.enabled) {\n return;\n }\n\n this.psv.dynamics.zoom.roll(this.prop.value);\n this.prop.handler.down();\n }\n\n /**\n * @private\n */\n __onMouseUp() {\n if (!this.prop.enabled) {\n return;\n }\n\n this.prop.handler.up(() => this.psv.dynamics.zoom.stop());\n }\n\n}\n","import { AbstractZoomButton } from './AbstractZoomButton';\nimport zoomIn from '../icons/zoom-in.svg';\n\n/**\n * @summary Navigation bar zoom-in button class\n * @extends PSV.buttons.AbstractZoomButton\n * @memberof PSV.buttons\n */\nexport class ZoomInButton extends AbstractZoomButton {\n\n static id = 'zoomIn';\n static icon = zoomIn;\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, false);\n }\n\n}\n","import { AbstractZoomButton } from './AbstractZoomButton';\nimport zoomOut from '../icons/zoom-out.svg';\n\n/**\n * @summary Navigation bar zoom-out button class\n * @extends PSV.buttons.AbstractZoomButton\n * @memberof PSV.buttons\n */\nexport class ZoomOutButton extends AbstractZoomButton {\n\n static id = 'zoomOut';\n static icon = zoomOut;\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, true);\n }\n\n}\n","import { EVENTS } from '../data/constants';\nimport { SYSTEM } from '../data/system';\nimport { getStyle, Slider } from '../utils';\nimport { AbstractButton } from './AbstractButton';\n\n/**\n * @summary Navigation bar zoom button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class ZoomRangeButton extends AbstractButton {\n\n static id = 'zoomRange';\n static groupId = 'zoom';\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, 'psv-zoom-range', false, false);\n\n /**\n * @override\n * @property {number} mediaMinWidth\n */\n this.prop = {\n ...this.prop,\n mediaMinWidth: 0,\n };\n\n /**\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.zoomRange = document.createElement('div');\n this.zoomRange.className = 'psv-zoom-range-line';\n this.container.appendChild(this.zoomRange);\n\n /**\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.zoomValue = document.createElement('div');\n this.zoomValue.className = 'psv-zoom-range-handle';\n this.zoomRange.appendChild(this.zoomValue);\n\n /**\n * @member {PSV.Slider}\n * @readonly\n * @private\n */\n this.slider = new Slider({\n container: this.container,\n direction: Slider.HORIZONTAL,\n onUpdate : e => this.__onSliderUpdate(e),\n });\n\n this.prop.mediaMinWidth = parseInt(getStyle(this.container, 'maxWidth'), 10);\n\n this.psv.on(EVENTS.ZOOM_UPDATED, this);\n if (this.psv.prop.ready) {\n this.__moveZoomValue(this.psv.getZoomLevel());\n }\n else {\n this.psv.once(EVENTS.READY, this);\n }\n\n this.refreshUi();\n }\n\n /**\n * @override\n */\n destroy() {\n this.slider.destroy();\n\n delete this.zoomRange;\n delete this.zoomValue;\n\n this.psv.off(EVENTS.ZOOM_UPDATED, this);\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case EVENTS.ZOOM_UPDATED: this.__moveZoomValue(e.args[0]); break;\n case EVENTS.READY: this.__moveZoomValue(this.psv.getZoomLevel()); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n */\n isSupported() {\n return {\n initial: !SYSTEM.isTouchEnabled.initial,\n promise: SYSTEM.isTouchEnabled.promise.then(enabled => !enabled),\n };\n }\n\n /**\n * @override\n */\n refreshUi() {\n if (this.prop.supported) {\n if (this.psv.prop.size.width <= this.prop.mediaMinWidth && this.prop.visible) {\n this.hide();\n }\n else if (this.psv.prop.size.width > this.prop.mediaMinWidth && !this.prop.visible) {\n this.show();\n }\n }\n }\n\n /**\n * @override\n */\n onClick() {\n // nothing\n }\n\n /**\n * @summary Moves the zoom cursor\n * @param {number} level\n * @private\n */\n __moveZoomValue(level) {\n this.zoomValue.style.left = (level / 100 * this.zoomRange.offsetWidth - this.zoomValue.offsetWidth / 2) + 'px';\n }\n\n\n /**\n * @summary Zoom change\n * @private\n */\n __onSliderUpdate(e) {\n if (e.mousedown) {\n this.psv.zoom(e.value * 100);\n }\n }\n\n}\n","import { EventEmitter } from 'uevent';\n\n/**\n * @namespace PSV.plugins\n */\n\n/**\n * @summary Base plugins class\n * @memberof PSV.plugins\n * @abstract\n */\nexport class AbstractPlugin extends EventEmitter {\n\n /**\n * @summary Unique identifier of the plugin\n * @member {string}\n * @readonly\n * @static\n */\n static id = null;\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super();\n\n /**\n * @summary Reference to main controller\n * @type {PSV.Viewer}\n * @readonly\n */\n this.psv = psv;\n }\n\n /**\n * @summary Initializes the plugin\n * @package\n */\n init() {\n }\n\n /**\n * @summary Destroys the plugin\n * @package\n */\n destroy() {\n delete this.psv;\n }\n\n}\n","import { AbstractAdapter } from '../adapters/AbstractAdapter';\nimport { EquirectangularAdapter } from '../adapters/equirectangular';\nimport { AbstractPlugin } from '../plugins/AbstractPlugin';\nimport { PSVError } from '../PSVError';\nimport { bound, clone, deepmerge, each, logWarn, parseAngle, parseSpeed, pluginInterop } from '../utils';\nimport { ACTIONS, KEY_CODES } from './constants';\n\n/**\n * @summary Default options\n * @type {PSV.Options}\n * @memberOf PSV\n * @constant\n */\nexport const DEFAULTS = {\n panorama : null,\n container : null,\n adapter : null,\n plugins : [],\n caption : null,\n description : null,\n downloadUrl : null,\n loadingImg : null,\n loadingTxt : 'Loading...',\n size : null,\n fisheye : false,\n minFov : 30,\n maxFov : 90,\n defaultZoomLvl : 50,\n defaultLong : 0,\n defaultLat : 0,\n sphereCorrection : null,\n moveSpeed : 1,\n zoomSpeed : 1,\n autorotateDelay : null,\n autorotateSpeed : '2rpm',\n autorotateLat : null,\n moveInertia : true,\n mousewheel : true,\n mousemove : true,\n captureCursor : false,\n mousewheelCtrlKey : false,\n touchmoveTwoFingers: false,\n useXmpData : true,\n panoData : null,\n requestHeaders : null,\n canvasBackground : '#000',\n withCredentials : false,\n navbar : [\n 'autorotate',\n 'zoom',\n 'move',\n 'download',\n 'description',\n 'caption',\n 'fullscreen',\n ],\n lang : {\n autorotate: 'Automatic rotation',\n zoom : 'Zoom',\n zoomOut : 'Zoom out',\n zoomIn : 'Zoom in',\n move : 'Move',\n download : 'Download',\n fullscreen: 'Fullscreen',\n menu : 'Menu',\n twoFingers: 'Use two fingers to navigate',\n ctrlZoom : 'Use ctrl + scroll to zoom the image',\n loadError : 'The panorama can\\'t be loaded',\n },\n keyboard : {\n [KEY_CODES.ArrowUp] : ACTIONS.ROTATE_LAT_UP,\n [KEY_CODES.ArrowDown] : ACTIONS.ROTATE_LAT_DOWN,\n [KEY_CODES.ArrowRight]: ACTIONS.ROTATE_LONG_RIGHT,\n [KEY_CODES.ArrowLeft] : ACTIONS.ROTATE_LONG_LEFT,\n [KEY_CODES.PageUp] : ACTIONS.ZOOM_IN,\n [KEY_CODES.PageDown] : ACTIONS.ZOOM_OUT,\n [KEY_CODES.Plus] : ACTIONS.ZOOM_IN,\n [KEY_CODES.Minus] : ACTIONS.ZOOM_OUT,\n [KEY_CODES.Space] : ACTIONS.TOGGLE_AUTOROTATE,\n },\n};\n\n/**\n * @summary List of unmodifiable options and their error messages\n * @private\n */\nexport const READONLY_OPTIONS = {\n panorama : 'Use setPanorama method to change the panorama',\n panoData : 'Use setPanorama method to change the panorama',\n container: 'Cannot change viewer container',\n adapter : 'Cannot change adapter',\n plugins : 'Cannot change plugins',\n};\n\n/**\n * @summary List of deprecated options and their warning messages\n * @private\n */\nexport const DEPRECATED_OPTIONS = {\n zoomButtonIncrement : 'zoomButtonIncrement is deprecated, use zoomSpeed',\n mousewheelSpeed : 'mousewheelSpeed is deprecated, use zoomSpeed',\n sphereCorrectionReorder: 'sphereCorrectionReorder is deprecated',\n};\n\n/**\n * @summary Parsers/validators for each option\n * @private\n */\nexport const CONFIG_PARSERS = {\n container : (container) => {\n if (!container) {\n throw new PSVError('No value given for container.');\n }\n return container;\n },\n adapter : (adapter) => {\n if (!adapter) {\n adapter = [EquirectangularAdapter];\n }\n else if (Array.isArray(adapter)) {\n adapter = [pluginInterop(adapter[0], AbstractAdapter), adapter[1]];\n }\n else {\n adapter = [pluginInterop(adapter, AbstractAdapter)];\n }\n if (!adapter[0]) {\n throw new PSVError('Un undefined value with given for adapter.');\n }\n return adapter;\n },\n defaultLong : (defaultLong) => {\n // defaultLat is between 0 and PI\n return parseAngle(defaultLong);\n },\n defaultLat : (defaultLat) => {\n // defaultLat is between -PI/2 and PI/2\n return parseAngle(defaultLat, true);\n },\n minFov : (minFov, config) => {\n // minFov and maxFov must be ordered\n if (config.maxFov < minFov) {\n logWarn('maxFov cannot be lower than minFov');\n minFov = config.maxFov;\n }\n // minFov between 1 and 179\n return bound(minFov, 1, 179);\n },\n maxFov : (maxFov, config) => {\n // minFov and maxFov must be ordered\n if (maxFov < config.minFov) {\n maxFov = config.minFov;\n }\n // maxFov between 1 and 179\n return bound(maxFov, 1, 179);\n },\n lang : (lang) => {\n if (Array.isArray(lang.twoFingers)) {\n logWarn('lang.twoFingers must not be an array');\n lang.twoFingers = lang.twoFingers[0];\n }\n return {\n ...DEFAULTS.lang,\n ...lang,\n };\n },\n keyboard : (keyboard) => {\n // keyboard=true becomes the default map\n if (keyboard === true) {\n return clone(DEFAULTS.keyboard);\n }\n return keyboard;\n },\n autorotateLat : (autorotateLat, config) => {\n // default autorotateLat is defaultLat\n if (autorotateLat === null) {\n return parseAngle(config.defaultLat, true);\n }\n // autorotateLat is between -PI/2 and PI/2\n else {\n return parseAngle(autorotateLat, true);\n }\n },\n autorotateSpeed: (autorotateSpeed) => {\n return parseSpeed(autorotateSpeed);\n },\n fisheye : (fisheye) => {\n // translate boolean fisheye to amount\n if (fisheye === true) {\n return 1;\n }\n else if (fisheye === false) {\n return 0;\n }\n return fisheye;\n },\n plugins : (plugins) => {\n return plugins\n .map((plugin) => {\n if (Array.isArray(plugin)) {\n plugin = [pluginInterop(plugin[0], AbstractPlugin), plugin[1]];\n }\n else {\n plugin = [pluginInterop(plugin, AbstractPlugin)];\n }\n if (!plugin[0]) {\n throw new PSVError('Un undefined value was given for plugins.');\n }\n return plugin;\n });\n },\n};\n\n/**\n * @summary Merge user config with default config and performs validation\n * @param {PSV.Options} options\n * @returns {PSV.Options}\n * @memberOf PSV\n * @private\n */\nexport function getConfig(options) {\n const tempConfig = clone(DEFAULTS);\n deepmerge(tempConfig, options);\n\n const config = {};\n\n each(tempConfig, (value, key) => {\n if (DEPRECATED_OPTIONS[key]) {\n logWarn(DEPRECATED_OPTIONS[key]);\n return;\n }\n\n if (!Object.prototype.hasOwnProperty.call(DEFAULTS, key)) {\n throw new PSVError(`Unknown option ${key}`);\n }\n\n if (CONFIG_PARSERS[key]) {\n config[key] = CONFIG_PARSERS[key](value, tempConfig);\n }\n else {\n config[key] = value;\n }\n });\n\n return config;\n}\n","import { AutorotateButton } from '../buttons/AutorotateButton';\nimport { CustomButton } from '../buttons/CustomButton';\nimport { DescriptionButton } from '../buttons/DescriptionButton';\nimport { DownloadButton } from '../buttons/DownloadButton';\nimport { FullscreenButton } from '../buttons/FullscreenButton';\nimport { MenuButton } from '../buttons/MenuButton';\nimport { MoveDownButton } from '../buttons/MoveDownButton';\nimport { MoveLeftButton } from '../buttons/MoveLeftButton';\nimport { MoveRightButton } from '../buttons/MoveRightButton';\nimport { MoveUpButton } from '../buttons/MoveUpButton';\nimport { ZoomInButton } from '../buttons/ZoomInButton';\nimport { ZoomOutButton } from '../buttons/ZoomOutButton';\nimport { ZoomRangeButton } from '../buttons/ZoomRangeButton';\nimport { DEFAULTS } from '../data/config';\nimport { PSVError } from '../PSVError';\nimport { clone, logWarn } from '../utils';\nimport { AbstractComponent } from './AbstractComponent';\nimport { NavbarCaption } from './NavbarCaption';\n\n/**\n * @summary List of available buttons\n * @type {Object>}\n * @private\n */\nconst AVAILABLE_BUTTONS = {};\n\n/**\n * @summary List of available buttons\n * @type {Object>>}\n * @private\n */\nconst AVAILABLE_GROUPS = {};\n\n/**\n * @summary Register a new button available for all viewers\n * @param {Class} button\n * @param {'start' | 'end' | '[id]:left' | '[id]:right'} [defaultPosition]\n * If provided the default configuration of the navbar will be modified.\n * @memberOf PSV\n */\nexport function registerButton(button, defaultPosition) {\n if (!button.id) {\n throw new PSVError('Button ID is required');\n }\n\n AVAILABLE_BUTTONS[button.id] = button;\n\n if (button.groupId) {\n AVAILABLE_GROUPS[button.groupId] = AVAILABLE_GROUPS[button.groupId] || [];\n AVAILABLE_GROUPS[button.groupId].push(button);\n }\n\n if (typeof defaultPosition === 'string') {\n switch (defaultPosition) {\n case 'start':\n DEFAULTS.navbar.unshift(button.id);\n break;\n case 'end':\n DEFAULTS.navbar.push(button.id);\n break;\n default:\n const [id, pos] = defaultPosition.split(':');\n DEFAULTS.navbar.splice(DEFAULTS.navbar.indexOf(id) + (pos === 'right' ? 1 : 0), 0, button.id);\n }\n }\n}\n\n[\n AutorotateButton,\n ZoomOutButton,\n ZoomRangeButton,\n ZoomInButton,\n DescriptionButton,\n DownloadButton,\n FullscreenButton,\n MoveLeftButton,\n MoveRightButton,\n MoveUpButton,\n MoveDownButton,\n].forEach(registerButton);\n\n/**\n * @summary Navigation bar component\n * @extends PSV.components.AbstractComponent\n * @memberof PSV.components\n */\nexport class Navbar extends AbstractComponent {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv, 'psv-navbar');\n\n /**\n * @summary List of buttons of the navbar\n * @member {PSV.buttons.AbstractButton[]}\n * @override\n */\n this.children = [];\n\n /**\n * @summary List of collapsed buttons\n * @member {PSV.buttons.AbstractButton[]}\n * @private\n */\n this.collapsed = [];\n }\n\n /**\n * @summary Change the buttons visible on the navbar\n * @param {string|Array} buttons\n * @throws {PSV.PSVError} when a button is unknown\n */\n setButtons(buttons) {\n this.children.slice().forEach(item => item.destroy());\n this.children.length = 0;\n\n const cleanedButtons = this.__cleanButtons(buttons);\n\n // force description button if caption is present (used on narrow screens)\n if (cleanedButtons.indexOf(NavbarCaption.id) !== -1 && cleanedButtons.indexOf(DescriptionButton.id) === -1) {\n cleanedButtons.splice(cleanedButtons.indexOf(NavbarCaption.id), 0, DescriptionButton.id);\n }\n\n /* eslint-disable no-new */\n cleanedButtons.forEach((button) => {\n if (typeof button === 'object') {\n new CustomButton(this, button);\n }\n else if (AVAILABLE_BUTTONS[button]) {\n new AVAILABLE_BUTTONS[button](this);\n }\n else if (AVAILABLE_GROUPS[button]) {\n AVAILABLE_GROUPS[button].forEach(buttonCtor => new buttonCtor(this)); // eslint-disable-line new-cap\n }\n else if (button === NavbarCaption.id) {\n new NavbarCaption(this, this.psv.config.caption);\n }\n else {\n throw new PSVError('Unknown button ' + button);\n }\n });\n\n new MenuButton(this);\n /* eslint-enable no-new */\n\n this.children.forEach((item) => {\n if (typeof item.checkSupported === 'function') {\n item.checkSupported();\n }\n });\n }\n\n /**\n * @summary Sets the bar caption\n * @param {string} html\n */\n setCaption(html) {\n const caption = this.getButton(NavbarCaption.id, false);\n caption?.setCaption(html);\n }\n\n /**\n * @summary Returns a button by its identifier\n * @param {string} id\n * @param {boolean} [warnNotFound=true]\n * @returns {PSV.buttons.AbstractButton}\n */\n getButton(id, warnNotFound = true) {\n let button = null;\n\n this.children.some((item) => {\n if (item.prop.id === id) {\n button = item;\n return true;\n }\n else {\n return false;\n }\n });\n\n if (!button && warnNotFound) {\n logWarn(`button \"${id}\" not found in the navbar`);\n }\n\n return button;\n }\n\n /**\n * @summary Shows the navbar\n */\n show() {\n this.container.classList.add('psv-navbar--open');\n this.prop.visible = true;\n }\n\n /**\n * @summary Hides the navbar\n */\n hide() {\n this.container.classList.remove('psv-navbar--open');\n this.prop.visible = false;\n }\n\n /**\n * @override\n */\n refreshUi() {\n super.refreshUi();\n\n if (this.psv.prop.uiRefresh === true) {\n const availableWidth = this.container.offsetWidth;\n\n let totalWidth = 0;\n const visibleButtons = [];\n const collapsableButtons = [];\n\n this.children.forEach((item) => {\n if (item.prop.visible) {\n totalWidth += item.prop.width;\n visibleButtons.push(item);\n if (item.prop.collapsable) {\n collapsableButtons.push(item);\n }\n }\n });\n\n if (!visibleButtons.length) {\n return;\n }\n\n if (availableWidth < totalWidth && collapsableButtons.length > 0) {\n collapsableButtons.forEach(item => item.collapse());\n this.collapsed = collapsableButtons;\n\n this.getButton(MenuButton.id).show(false);\n }\n else if (availableWidth >= totalWidth && this.collapsed.length > 0) {\n this.collapsed.forEach(item => item.uncollapse());\n this.collapsed = [];\n\n this.getButton(MenuButton.id).hide(false);\n }\n\n const caption = this.getButton(NavbarCaption.id, false);\n if (caption) {\n caption.refreshUi();\n }\n }\n }\n\n /**\n * @summary Ensure the buttons configuration is correct\n * @private\n */\n __cleanButtons(buttons) {\n // true becomes the default array\n if (buttons === true) {\n return clone(DEFAULTS.navbar);\n }\n // can be a space or coma separated list\n else if (typeof buttons === 'string') {\n return buttons.split(/[ ,]/);\n }\n else {\n return buttons || [];\n }\n }\n\n}\n","import { EVENTS } from '../data/constants';\nimport { SYSTEM } from '../data/system';\nimport { bound, getStyle } from '../utils';\nimport { AbstractComponent } from './AbstractComponent';\n\n/**\n * @summary Loader component\n * @extends PSV.components.AbstractComponent\n * @memberof PSV.components\n */\nexport class Loader extends AbstractComponent {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv, 'psv-loader-container');\n\n /**\n * @summary Inner container for vertical center\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.loader = document.createElement('div');\n this.loader.className = 'psv-loader';\n this.container.appendChild(this.loader);\n\n /**\n * @summary Animation canvas\n * @member {HTMLCanvasElement}\n * @readonly\n * @private\n */\n this.canvas = document.createElement('canvas');\n this.canvas.className = 'psv-loader-canvas';\n\n this.canvas.width = this.loader.clientWidth * SYSTEM.pixelRatio;\n this.canvas.height = this.loader.clientWidth * SYSTEM.pixelRatio;\n this.loader.appendChild(this.canvas);\n\n /**\n * @override\n * @property {number} thickness\n * @property {string} current\n */\n this.prop = {\n ...this.prop,\n tickness: (this.loader.offsetWidth - this.loader.clientWidth) / 2 * SYSTEM.pixelRatio,\n current : null,\n };\n\n this.refreshUi();\n this.hide();\n }\n\n /**\n * @override\n */\n destroy() {\n delete this.loader;\n delete this.canvas;\n\n super.destroy();\n }\n\n /**\n * @override\n */\n refreshUi() {\n if (this.prop.current !== (this.psv.config.loadingImg || this.psv.config.loadingTxt)) {\n if (this.prop.current) {\n this.loader.removeChild(this.loader.lastChild);\n }\n\n let inner;\n if (this.psv.config.loadingImg) {\n inner = document.createElement('img');\n inner.className = 'psv-loader-image';\n inner.src = this.psv.config.loadingImg;\n }\n else if (this.psv.config.loadingTxt) {\n inner = document.createElement('div');\n inner.className = 'psv-loader-text';\n inner.innerHTML = this.psv.config.loadingTxt;\n }\n if (inner) {\n const size = Math.round(Math.sqrt(2 * Math.pow((this.canvas.width / 2 - this.prop.tickness / 2) / SYSTEM.pixelRatio, 2)));\n inner.style.maxWidth = size + 'px';\n inner.style.maxHeight = size + 'px';\n this.loader.appendChild(inner);\n }\n\n this.prop.current = this.psv.config.loadingImg || this.psv.config.loadingTxt;\n }\n }\n\n /**\n * @summary Sets the loader progression\n * @param {number} value - from 0 to 100\n */\n setProgress(value) {\n const context = this.canvas.getContext('2d');\n\n context.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\n context.lineWidth = this.prop.tickness;\n context.strokeStyle = getStyle(this.loader, 'color');\n\n context.beginPath();\n context.arc(\n this.canvas.width / 2, this.canvas.height / 2,\n this.canvas.width / 2 - this.prop.tickness / 2,\n -Math.PI / 2, bound(value, 0, 100) / 100 * 2 * Math.PI - Math.PI / 2\n );\n context.stroke();\n\n this.psv.trigger(EVENTS.LOAD_PROGRESS, Math.round(value));\n }\n\n}\n","import { EVENTS } from '../data/constants';\nimport { PSVError } from '../PSVError';\nimport { AbstractComponent } from './AbstractComponent';\n\n/**\n * @summary Notification component\n * @extends PSV.components.AbstractComponent\n * @memberof PSV.components\n */\nexport class Notification extends AbstractComponent {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv, 'psv-notification');\n\n /**\n * @override\n * @property {*} timeout\n */\n this.prop = {\n ...this.prop,\n visible : false,\n contentId: undefined,\n timeout : null,\n };\n\n /**\n * Notification content\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.content = document.createElement('div');\n this.content.className = 'psv-notification-content';\n this.container.appendChild(this.content);\n\n this.content.addEventListener('click', () => this.hide());\n }\n\n /**\n * @override\n */\n destroy() {\n delete this.content;\n\n super.destroy();\n }\n\n /**\n * @override\n * @param {string} [id]\n */\n isVisible(id) {\n return this.prop.visible && (!id || !this.prop.contentId || this.prop.contentId === id);\n }\n\n /**\n * @override\n * @summary This method is not supported\n * @throws {PSV.PSVError} always\n */\n toggle() {\n throw new PSVError('Notification cannot be toggled');\n }\n\n /**\n * @summary Displays a notification on the viewer\n * @param {Object|string} config\n * @param {string} [config.id] - unique identifier to use with \"hide\"\n * @param {string} config.content\n * @param {number} [config.timeout]\n * @fires PSV.show-notification\n *\n * @example\n * viewer.showNotification({ content: 'Hello world', timeout: 5000 })\n * @example\n * viewer.showNotification('Hello world')\n */\n show(config) {\n if (this.prop.timeout) {\n clearTimeout(this.prop.timeout);\n this.prop.timeout = null;\n }\n\n if (typeof config === 'string') {\n config = { content: config };\n }\n\n this.prop.contentId = config.id;\n this.content.innerHTML = config.content;\n\n this.container.classList.add('psv-notification--visible');\n this.prop.visible = true;\n\n this.psv.trigger(EVENTS.SHOW_NOTIFICATION, config.id);\n\n if (config.timeout) {\n this.prop.timeout = setTimeout(() => this.hide(config.id), config.timeout);\n }\n }\n\n /**\n * @summary Hides the notification\n * @param {string} [id]\n * @fires PSV.hide-notification\n */\n hide(id) {\n if (this.isVisible(id)) {\n const contentId = this.prop.contentId;\n\n this.container.classList.remove('psv-notification--visible');\n this.prop.visible = false;\n\n this.prop.contentId = undefined;\n\n this.psv.trigger(EVENTS.HIDE_NOTIFICATION, contentId);\n }\n }\n\n}\n","import { EVENTS, KEY_CODES } from '../data/constants';\nimport { PSVError } from '../PSVError';\nimport { AbstractComponent } from './AbstractComponent';\n\n/**\n * @summary Overlay component\n * @extends PSV.components.AbstractComponent\n * @memberof PSV.components\n */\nexport class Overlay extends AbstractComponent {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv, 'psv-overlay');\n\n /**\n * @override\n * @property {string} contentId\n * @property {boolean} dissmisable\n */\n this.prop = {\n ...this.prop,\n contentId : undefined,\n dissmisable: true,\n };\n\n /**\n * Image container\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.image = document.createElement('div');\n this.image.className = 'psv-overlay-image';\n this.container.appendChild(this.image);\n\n /**\n * Text container\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.text = document.createElement('div');\n this.text.className = 'psv-overlay-text';\n this.container.appendChild(this.text);\n\n /**\n * Subtext container\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.subtext = document.createElement('div');\n this.subtext.className = 'psv-overlay-subtext';\n this.container.appendChild(this.subtext);\n\n this.psv.on(EVENTS.CLICK, this);\n this.psv.on(EVENTS.KEY_PRESS, this);\n\n super.hide();\n }\n\n /**\n * @override\n */\n destroy() {\n this.psv.off(EVENTS.CLICK, this);\n this.psv.off(EVENTS.KEY_PRESS, this);\n\n delete this.image;\n delete this.text;\n delete this.subtext;\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n case EVENTS.CLICK:\n if (this.isVisible() && this.prop.dissmisable) {\n this.hide();\n e.stopPropagation();\n }\n break;\n case EVENTS.KEY_PRESS:\n if (this.isVisible() && this.prop.dissmisable && e.args[0] === KEY_CODES.Escape) {\n this.hide();\n e.preventDefault();\n }\n break;\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n * @param {string} [id]\n */\n isVisible(id) {\n return this.prop.visible && (!id || !this.prop.contentId || this.prop.contentId === id);\n }\n\n /**\n * @override\n * @summary This method is not supported\n * @throws {PSV.PSVError} always\n */\n toggle() {\n throw new PSVError('Overlay cannot be toggled');\n }\n\n /**\n * @summary Displays an overlay on the viewer\n * @param {Object|string} config\n * @param {string} [config.id] - unique identifier to use with \"hide\"\n * @param {string} config.image - SVG image/icon displayed above the text\n * @param {string} config.text - main message\n * @param {string} [config.subtext] - secondary message\n * @param {boolean} [config.dissmisable=true] - if the user can hide the overlay by clicking\n * @fires PSV.show-overlay\n */\n show(config) {\n if (typeof config === 'string') {\n config = { text: config };\n }\n\n this.prop.contentId = config.id;\n this.prop.dissmisable = config.dissmisable !== false;\n this.image.innerHTML = config.image || '';\n this.text.innerHTML = config.text || '';\n this.subtext.innerHTML = config.subtext || '';\n\n super.show();\n\n this.psv.trigger(EVENTS.SHOW_OVERLAY, config.id);\n }\n\n /**\n * @summary Hides the overlay\n * @param {string} [id]\n * @fires PSV.hide-overlay\n */\n hide(id) {\n if (this.isVisible(id)) {\n const contentId = this.prop.contentId;\n\n super.hide();\n\n this.prop.contentId = undefined;\n\n this.psv.trigger(EVENTS.HIDE_OVERLAY, contentId);\n }\n }\n\n}\n","import { EVENTS, KEY_CODES } from '../data/constants';\nimport { SYSTEM } from '../data/system';\nimport { PSVError } from '../PSVError';\nimport { toggleClass } from '../utils';\nimport { AbstractComponent } from './AbstractComponent';\n\n/**\n * @summary Minimum width of the panel\n * @type {number}\n * @constant\n * @private\n */\nconst PANEL_MIN_WIDTH = 200;\n\n/**\n * @summary Panel component\n * @extends PSV.components.AbstractComponent\n * @memberof PSV.components\n */\nexport class Panel extends AbstractComponent {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv, 'psv-panel');\n\n /**\n * @override\n * @property {string} contentId\n * @property {number} mouseX\n * @property {number} mouseY\n * @property {boolean} mousedown\n * @property {function} clickHandler\n * @property {function} keyHandler\n */\n this.prop = {\n ...this.prop,\n visible : false,\n contentId : undefined,\n mouseX : 0,\n mouseY : 0,\n mousedown : false,\n clickHandler: null,\n keyHandler : null,\n width : {},\n };\n\n const resizer = document.createElement('div');\n resizer.className = 'psv-panel-resizer';\n this.container.appendChild(resizer);\n\n const closeBtn = document.createElement('div');\n closeBtn.className = 'psv-panel-close-button';\n this.container.appendChild(closeBtn);\n\n /**\n * @summary Content container\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.content = document.createElement('div');\n this.content.className = 'psv-panel-content';\n this.container.appendChild(this.content);\n\n // Stop wheel event bubbling from panel\n this.container.addEventListener(SYSTEM.mouseWheelEvent, e => e.stopPropagation());\n\n closeBtn.addEventListener('click', () => this.hide());\n\n // Event for panel resizing + stop bubling\n resizer.addEventListener('mousedown', this);\n resizer.addEventListener('touchstart', this);\n this.psv.container.addEventListener('mouseup', this);\n this.psv.container.addEventListener('touchend', this);\n this.psv.container.addEventListener('mousemove', this);\n this.psv.container.addEventListener('touchmove', this);\n\n this.psv.on(EVENTS.KEY_PRESS, this);\n }\n\n /**\n * @override\n */\n destroy() {\n this.psv.off(EVENTS.KEY_PRESS, this);\n\n this.psv.container.removeEventListener('mousemove', this);\n this.psv.container.removeEventListener('touchmove', this);\n this.psv.container.removeEventListener('mouseup', this);\n this.psv.container.removeEventListener('touchend', this);\n\n delete this.prop;\n delete this.content;\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case 'mousedown': this.__onMouseDown(e); break;\n case 'touchstart': this.__onTouchStart(e); break;\n case 'mousemove': this.__onMouseMove(e); break;\n case 'touchmove': this.__onTouchMove(e); break;\n case 'mouseup': this.__onMouseUp(e); break;\n case 'touchend': this.__onMouseUp(e); break;\n case EVENTS.KEY_PRESS:\n if (this.isVisible() && e.args[0] === KEY_CODES.Escape) {\n this.hide();\n e.preventDefault();\n }\n break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n * @param {string} [id]\n */\n isVisible(id) {\n return this.prop.visible && (!id || !this.prop.contentId || this.prop.contentId === id);\n }\n\n /**\n * @override\n * @summary This method is not supported\n * @throws {PSV.PSVError} always\n */\n toggle() {\n throw new PSVError('Panel cannot be toggled');\n }\n\n /**\n * @summary Shows the panel\n * @param {string|Object} config\n * @param {string} [config.id] - unique identifier to use with \"hide\" and to store the user desired width\n * @param {string} config.content - HTML content of the panel\n * @param {boolean} [config.noMargin=false] - remove the default margins\n * @param {string} [config.width] - initial width\n * @param {Function} [config.clickHandler] - called when the user clicks inside the panel or presses the Enter key while an element focused\n * @fires PSV.open-panel\n */\n show(config) {\n const wasVisible = this.isVisible(config.id);\n\n if (typeof config === 'string') {\n config = { content: config };\n }\n\n this.prop.contentId = config.id;\n this.prop.visible = true;\n\n if (this.prop.clickHandler) {\n this.content.removeEventListener('click', this.prop.clickHandler);\n this.content.removeEventListener('keydown', this.prop.keyHandler);\n this.prop.clickHandler = null;\n this.prop.keyHandler = null;\n }\n\n if (config.id && this.prop.width[config.id]) {\n this.container.style.width = this.prop.width[config.id];\n }\n else if (config.width) {\n this.container.style.width = config.width;\n }\n else {\n this.container.style.width = null;\n }\n\n this.content.innerHTML = config.content;\n this.content.scrollTop = 0;\n this.container.classList.add('psv-panel--open');\n\n toggleClass(this.content, 'psv-panel-content--no-margin', config.noMargin === true);\n\n if (config.clickHandler) {\n this.prop.clickHandler = config.clickHandler;\n this.prop.keyHandler = (e) => {\n if (e.key === KEY_CODES.Enter) {\n config.clickHandler(e);\n }\n };\n this.content.addEventListener('click', this.prop.clickHandler);\n this.content.addEventListener('keydown', this.prop.keyHandler);\n\n // focus the first element if possible, after animation ends\n if (!wasVisible) {\n setTimeout(() => {\n this.content.querySelector('a,button,[tabindex]')?.focus();\n }, 300);\n }\n }\n\n this.psv.trigger(EVENTS.OPEN_PANEL, config.id);\n }\n\n /**\n * @summary Hides the panel\n * @param {string} [id]\n * @fires PSV.close-panel\n */\n hide(id) {\n if (this.isVisible(id)) {\n const contentId = this.prop.contentId;\n\n this.prop.visible = false;\n this.prop.contentId = undefined;\n\n this.content.innerHTML = null;\n this.container.classList.remove('psv-panel--open');\n\n if (this.prop.clickHandler) {\n this.content.removeEventListener('click', this.prop.clickHandler);\n this.prop.clickHandler = null;\n }\n\n this.psv.trigger(EVENTS.CLOSE_PANEL, contentId);\n }\n }\n\n /**\n * @summary Handles mouse down events\n * @param {MouseEvent} evt\n * @private\n */\n __onMouseDown(evt) {\n evt.stopPropagation();\n this.__startResize(evt);\n }\n\n /**\n * @summary Handles touch events\n * @param {TouchEvent} evt\n * @private\n */\n __onTouchStart(evt) {\n evt.stopPropagation();\n this.__startResize(evt.changedTouches[0]);\n }\n\n /**\n * @summary Handles mouse up events\n * @param {MouseEvent} evt\n * @private\n */\n __onMouseUp(evt) {\n if (this.prop.mousedown) {\n evt.stopPropagation();\n this.prop.mousedown = false;\n this.content.classList.remove('psv-panel-content--no-interaction');\n }\n }\n\n /**\n * @summary Handles mouse move events\n * @param {MouseEvent} evt\n * @private\n */\n __onMouseMove(evt) {\n if (this.prop.mousedown) {\n evt.stopPropagation();\n this.__resize(evt);\n }\n }\n\n /**\n * @summary Handles touch move events\n * @param {TouchEvent} evt\n * @private\n */\n __onTouchMove(evt) {\n if (this.prop.mousedown) {\n this.__resize(evt.touches[0]);\n }\n }\n\n /**\n * @summary Initializes the panel resize\n * @param {MouseEvent|Touch} evt\n * @private\n */\n __startResize(evt) {\n this.prop.mouseX = evt.clientX;\n this.prop.mouseY = evt.clientY;\n this.prop.mousedown = true;\n this.content.classList.add('psv-panel-content--no-interaction');\n }\n\n /**\n * @summary Resizes the panel\n * @param {MouseEvent|Touch} evt\n * @private\n */\n __resize(evt) {\n const x = evt.clientX;\n const y = evt.clientY;\n const width = Math.max(PANEL_MIN_WIDTH, this.container.offsetWidth - (x - this.prop.mouseX)) + 'px';\n\n if (this.prop.contentId) {\n this.prop.width[this.prop.contentId] = width;\n }\n\n this.container.style.width = width;\n\n this.prop.mouseX = x;\n this.prop.mouseY = y;\n }\n\n}\n","/**\n * @namespace PSV.services\n */\n\n/**\n * @summary Base services class\n * @memberof PSV.services\n * @abstract\n */\nexport class AbstractService {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n /**\n * @summary Reference to main controller\n * @type {PSV.Viewer}\n * @readonly\n */\n this.psv = psv;\n\n /**\n * @summary Configuration holder\n * @type {PSV.Options}\n * @readonly\n */\n this.config = psv.config;\n\n /**\n * @summary Properties holder\n * @type {Object}\n * @readonly\n */\n this.prop = psv.prop;\n }\n\n /**\n * @summary Destroys the service\n */\n destroy() {\n delete this.psv;\n delete this.config;\n delete this.prop;\n }\n\n}\n","import * as THREE from 'three';\nimport { MESH_USER_DATA, SPHERE_RADIUS } from '../data/constants';\nimport { PSVError } from '../PSVError';\nimport { applyEulerInverse, parseAngle, parseSpeed } from '../utils';\nimport { AbstractService } from './AbstractService';\n\nconst vector2 = new THREE.Vector2();\nconst vector3 = new THREE.Vector3();\nconst eulerZero = new THREE.Euler(0, 0, 0, 'ZXY');\n\n/**\n * @summary Collections of data converters for the current viewer\n * @extends PSV.services.AbstractService\n * @memberof PSV.services\n */\nexport class DataHelper extends AbstractService {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv);\n }\n\n /**\n * @summary Converts vertical FOV to zoom level\n * @param {number} fov\n * @returns {number}\n */\n fovToZoomLevel(fov) {\n const temp = Math.round((fov - this.config.minFov) / (this.config.maxFov - this.config.minFov) * 100);\n return temp - 2 * (temp - 50);\n }\n\n /**\n * @summary Converts zoom level to vertical FOV\n * @param {number} level\n * @returns {number}\n */\n zoomLevelToFov(level) {\n return this.config.maxFov + (level / 100) * (this.config.minFov - this.config.maxFov);\n }\n\n /**\n * @summary Convert vertical FOV to horizontal FOV\n * @param {number} vFov\n * @returns {number}\n */\n vFovToHFov(vFov) {\n return THREE.Math.radToDeg(2 * Math.atan(Math.tan(THREE.Math.degToRad(vFov) / 2) * this.prop.aspect));\n }\n\n /**\n * @summary Converts a speed into a duration from current position to a new position\n * @param {string|number} value\n * @param {number} angle\n * @returns {number}\n */\n speedToDuration(value, angle) {\n if (!value || typeof value !== 'number') {\n // desired radial speed\n const speed = value ? parseSpeed(value) : this.config.autorotateSpeed;\n // compute duration\n return angle / Math.abs(speed) * 1000;\n }\n else {\n return Math.abs(value);\n }\n }\n\n /**\n * @summary Converts pixel texture coordinates to spherical radians coordinates\n * @param {PSV.Point} point\n * @returns {PSV.Position}\n * @throws {PSV.PSVError} when the current adapter does not support texture coordinates\n */\n textureCoordsToSphericalCoords(point) {\n const panoData = this.prop.panoData;\n if (!panoData) {\n throw new PSVError('Current adapter does not support texture coordinates.');\n }\n\n const relativeX = (point.x + panoData.croppedX) / panoData.fullWidth * Math.PI * 2;\n const relativeY = (point.y + panoData.croppedY) / panoData.fullHeight * Math.PI;\n\n const result = {\n longitude: relativeX >= Math.PI ? relativeX - Math.PI : relativeX + Math.PI,\n latitude : Math.PI / 2 - relativeY,\n };\n\n // Apply panoData pose and sphereCorrection\n if (!eulerZero.equals(this.psv.renderer.mesh.rotation) || !eulerZero.equals(this.psv.renderer.meshContainer.rotation)) {\n this.sphericalCoordsToVector3(result, vector3);\n vector3.applyEuler(this.psv.renderer.mesh.rotation);\n vector3.applyEuler(this.psv.renderer.meshContainer.rotation);\n return this.vector3ToSphericalCoords(vector3);\n }\n else {\n return result;\n }\n }\n\n /**\n * @summary Converts spherical radians coordinates to pixel texture coordinates\n * @param {PSV.Position} position\n * @returns {PSV.Point}\n * @throws {PSV.PSVError} when the current adapter does not support texture coordinates\n */\n sphericalCoordsToTextureCoords(position) {\n const panoData = this.prop.panoData;\n if (!panoData) {\n throw new PSVError('Current adapter does not support texture coordinates.');\n }\n\n // Apply panoData pose and sphereCorrection\n if (!eulerZero.equals(this.psv.renderer.mesh.rotation) || !eulerZero.equals(this.psv.renderer.meshContainer.rotation)) {\n this.sphericalCoordsToVector3(position, vector3);\n applyEulerInverse(vector3, this.psv.renderer.meshContainer.rotation);\n applyEulerInverse(vector3, this.psv.renderer.mesh.rotation);\n position = this.vector3ToSphericalCoords(vector3);\n }\n\n const relativeLong = position.longitude / Math.PI / 2 * panoData.fullWidth;\n const relativeLat = position.latitude / Math.PI * panoData.fullHeight;\n\n return {\n x: Math.round(position.longitude < Math.PI ? relativeLong + panoData.fullWidth / 2 : relativeLong - panoData.fullWidth / 2) - panoData.croppedX,\n y: Math.round(panoData.fullHeight / 2 - relativeLat) - panoData.croppedY,\n };\n }\n\n /**\n * @summary Converts spherical radians coordinates to a THREE.Vector3\n * @param {PSV.Position} position\n * @param {external:THREE.Vector3} [vector]\n * @returns {external:THREE.Vector3}\n */\n sphericalCoordsToVector3(position, vector) {\n if (!vector) {\n vector = new THREE.Vector3();\n }\n vector.x = SPHERE_RADIUS * -Math.cos(position.latitude) * Math.sin(position.longitude);\n vector.y = SPHERE_RADIUS * Math.sin(position.latitude);\n vector.z = SPHERE_RADIUS * Math.cos(position.latitude) * Math.cos(position.longitude);\n return vector;\n }\n\n /**\n * @summary Converts a THREE.Vector3 to spherical radians coordinates\n * @param {external:THREE.Vector3} vector\n * @returns {PSV.Position}\n */\n vector3ToSphericalCoords(vector) {\n const phi = Math.acos(vector.y / Math.sqrt(vector.x * vector.x + vector.y * vector.y + vector.z * vector.z));\n const theta = Math.atan2(vector.x, vector.z);\n\n return {\n longitude: theta < 0 ? -theta : Math.PI * 2 - theta,\n latitude : Math.PI / 2 - phi,\n };\n }\n\n /**\n * @summary Converts position on the viewer to a THREE.Vector3\n * @param {PSV.Point} viewerPoint\n * @returns {external:THREE.Vector3}\n */\n viewerCoordsToVector3(viewerPoint) {\n const sphereIntersect = this.getIntersections(viewerPoint).filter(i => i.object.userData[MESH_USER_DATA]);\n\n if (sphereIntersect.length) {\n return sphereIntersect[0].point;\n }\n else {\n return null;\n }\n }\n\n /**\n * @summary Converts a THREE.Vector3 to position on the viewer\n * @param {external:THREE.Vector3} vector\n * @returns {PSV.Point}\n */\n vector3ToViewerCoords(vector) {\n const vectorClone = vector.clone();\n vectorClone.project(this.psv.renderer.camera);\n\n return {\n x: Math.round((vectorClone.x + 1) / 2 * this.prop.size.width),\n y: Math.round((1 - vectorClone.y) / 2 * this.prop.size.height),\n };\n }\n\n /**\n * @summary Converts spherical radians coordinates to position on the viewer\n * @param {PSV.Position} position\n * @returns {PSV.Point}\n */\n sphericalCoordsToViewerCoords(position) {\n return this.vector3ToViewerCoords(this.sphericalCoordsToVector3(position, vector3));\n }\n\n /**\n * @summary Returns intersections with objects in the scene\n * @param {PSV.Point} viewerPoint\n * @return {external:THREE.Intersection[]}\n */\n getIntersections(viewerPoint) {\n vector2.x = 2 * viewerPoint.x / this.prop.size.width - 1;\n vector2.y = -2 * viewerPoint.y / this.prop.size.height + 1;\n\n this.psv.renderer.raycaster.setFromCamera(vector2, this.psv.renderer.camera);\n\n return this.psv.renderer.raycaster.intersectObjects(this.psv.renderer.scene.children, true)\n .filter(i => !!i.object.userData);\n }\n\n /**\n * @summary Converts x/y to latitude/longitude if present and ensure boundaries\n * @param {PSV.ExtendedPosition} position\n * @returns {PSV.Position}\n */\n cleanPosition(position) {\n if (position.x !== undefined && position.y !== undefined) {\n return this.textureCoordsToSphericalCoords(position);\n }\n else {\n return {\n longitude: parseAngle(position.longitude),\n latitude : parseAngle(position.latitude, true),\n };\n }\n }\n\n /**\n * @summary Ensure a SphereCorrection object is valid\n * @param {PSV.SphereCorrection} sphereCorrection\n * @returns {PSV.SphereCorrection}\n */\n cleanSphereCorrection(sphereCorrection) {\n return {\n pan : parseAngle(sphereCorrection?.pan || 0),\n tilt: parseAngle(sphereCorrection?.tilt || 0, true),\n roll: parseAngle(sphereCorrection?.roll || 0, true, false),\n };\n }\n\n /**\n * @summary Parse the pose angles of the pano data\n * @param {PSV.PanoData} panoData\n * @returns {PSV.SphereCorrection}\n */\n cleanPanoramaPose(panoData) {\n return {\n pan : THREE.Math.degToRad(panoData?.poseHeading || 0),\n tilt: THREE.Math.degToRad(panoData?.posePitch || 0),\n roll: THREE.Math.degToRad(panoData?.poseRoll || 0),\n };\n }\n\n}\n","import * as THREE from 'three';\nimport {\n ACTIONS,\n CTRLZOOM_TIMEOUT,\n DBLCLICK_DELAY,\n EVENTS,\n IDS,\n INERTIA_WINDOW,\n KEY_CODES,\n LONGTOUCH_DELAY,\n MOVE_THRESHOLD,\n OBJECT_EVENTS,\n TWOFINGERSOVERLAY_DELAY\n} from '../data/constants';\nimport { SYSTEM } from '../data/system';\nimport gestureIcon from '../icons/gesture.svg';\nimport mousewheelIcon from '../icons/mousewheel.svg';\nimport { clone, distance, each, getClosest, getPosition, isEmpty, isFullscreenEnabled, normalizeWheel, throttle } from '../utils';\nimport { Animation } from '../utils/Animation';\nimport { PressHandler } from '../utils/PressHandler';\nimport { AbstractService } from './AbstractService';\n\n/**\n * @summary Events handler\n * @extends PSV.services.AbstractService\n * @memberof PSV.services\n */\nexport class EventsHandler extends AbstractService {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv);\n\n /**\n * @summary Internal properties\n * @member {Object}\n * @property {number} moveThreshold - computed threshold based on device pixel ratio\n * @property {boolean} moving - is the user moving\n * @property {boolean} zooming - is the user zooming\n * @property {number} startMouseX - start x position of the click/touch\n * @property {number} startMouseY - start y position of the click/touch\n * @property {number} mouseX - current x position of the cursor\n * @property {number} mouseY - current y position of the cursor\n * @property {number[][]} mouseHistory - list of latest positions of the cursor, [time, x, y]\n * @property {number} pinchDist - distance between fingers when zooming\n * @property {PressHandler} keyHandler\n * @property {boolean} ctrlKeyDown - when the Ctrl key is pressed\n * @property {PSV.ClickData} dblclickData - temporary storage of click data between two clicks\n * @property {number} dblclickTimeout - timeout id for double click\n * @property {number} twofingersTimeout - timeout id for \"two fingers\" overlay\n * @property {number} ctrlZoomTimeout - timeout id for \"ctrol zoom\" overlay\n * @protected\n */\n this.state = {\n moveThreshold : MOVE_THRESHOLD * SYSTEM.pixelRatio,\n keyboardEnabled : false,\n moving : false,\n zooming : false,\n startMouseX : 0,\n startMouseY : 0,\n mouseX : 0,\n mouseY : 0,\n mouseHistory : [],\n pinchDist : 0,\n keyHandler : new PressHandler(),\n ctrlKeyDown : false,\n dblclickData : null,\n dblclickTimeout : null,\n longtouchTimeout : null,\n twofingersTimeout: null,\n ctrlZoomTimeout : null,\n };\n\n /**\n * @summary Throttled wrapper of {@link PSV.Viewer#autoSize}\n * @type {Function}\n * @private\n */\n this.__onResize = throttle(() => this.psv.autoSize(), 50);\n }\n\n /**\n * @summary Initializes event handlers\n * @protected\n */\n init() {\n window.addEventListener('resize', this);\n window.addEventListener('keydown', this);\n window.addEventListener('keyup', this);\n this.psv.container.addEventListener('mouseenter', this);\n this.psv.container.addEventListener('mousedown', this);\n this.psv.container.addEventListener('mouseleave', this);\n this.psv.container.addEventListener('mousemove', this);\n window.addEventListener('mouseup', this);\n this.psv.container.addEventListener('touchstart', this);\n this.psv.container.addEventListener('touchmove', this);\n window.addEventListener('touchend', this);\n this.psv.container.addEventListener(SYSTEM.mouseWheelEvent, this);\n\n if (SYSTEM.fullscreenEvent) {\n document.addEventListener(SYSTEM.fullscreenEvent, this);\n }\n }\n\n /**\n * @override\n */\n destroy() {\n window.removeEventListener('resize', this);\n window.removeEventListener('keydown', this);\n window.removeEventListener('keyup', this);\n this.psv.container.removeEventListener('mouseenter', this);\n this.psv.container.removeEventListener('mousedown', this);\n this.psv.container.removeEventListener('mouseleave', this);\n this.psv.container.removeEventListener('mousemove', this);\n window.removeEventListener('mouseup', this);\n this.psv.container.removeEventListener('touchstart', this);\n this.psv.container.removeEventListener('touchmove', this);\n window.removeEventListener('touchend', this);\n this.psv.container.removeEventListener(SYSTEM.mouseWheelEvent, this);\n\n if (SYSTEM.fullscreenEvent) {\n document.removeEventListener(SYSTEM.fullscreenEvent, this);\n }\n\n clearTimeout(this.state.dblclickTimeout);\n clearTimeout(this.state.longtouchTimeout);\n clearTimeout(this.state.twofingersTimeout);\n clearTimeout(this.state.ctrlZoomTimeout);\n\n delete this.state;\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} evt\n * @private\n */\n handleEvent(evt) {\n /* eslint-disable */\n switch (evt.type) {\n // @formatter:off\n case 'resize': this.__onResize(); break;\n case 'keydown': this.__onKeyDown(evt); break;\n case 'keyup': this.__onKeyUp(); break;\n case 'mouseup': this.__onMouseUp(evt); break;\n case 'touchend': this.__onTouchEnd(evt); break;\n case SYSTEM.fullscreenEvent: this.__fullscreenToggled(); break;\n // @formatter:on\n }\n /* eslint-enable */\n\n if (!getClosest(evt.target, '.psv-navbar') && !getClosest(evt.target, '.psv-panel')) {\n /* eslint-disable */\n switch (evt.type) {\n // @formatter:off\n case 'mousedown': this.__onMouseDown(evt); break;\n case 'mouseenter': this.__onMouseEnter(evt); break;\n case 'mouseleave': this.__onMouseLeave(evt); break;\n case 'mousemove': this.__onMouseMove(evt); break;\n case 'touchstart': this.__onTouchStart(evt); break;\n case 'touchmove': this.__onTouchMove(evt); break;\n case SYSTEM.mouseWheelEvent: this.__onMouseWheel(evt); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n }\n\n /**\n * @summary Enables the keyboard controls\n * @protected\n */\n enableKeyboard() {\n this.state.keyboardEnabled = true;\n }\n\n /**\n * @summary Disables the keyboard controls\n * @protected\n */\n disableKeyboard() {\n this.state.keyboardEnabled = false;\n }\n\n /**\n * @summary Handles keyboard events\n * @param {KeyboardEvent} e\n * @private\n */\n __onKeyDown(e) {\n if (this.config.mousewheelCtrlKey) {\n this.state.ctrlKeyDown = e.key === KEY_CODES.Control;\n\n if (this.state.ctrlKeyDown) {\n clearTimeout(this.state.ctrlZoomTimeout);\n this.psv.overlay.hide(IDS.CTRL_ZOOM);\n }\n }\n\n const e2 = this.psv.trigger(EVENTS.KEY_PRESS, e.key);\n if (e2.isDefaultPrevented()) {\n return;\n }\n\n if (!this.state.keyboardEnabled) {\n return;\n }\n\n if (this.config.keyboard[e.key] === ACTIONS.TOGGLE_AUTOROTATE) {\n this.psv.toggleAutorotate();\n }\n else if (this.config.keyboard[e.key] && !this.state.keyHandler.time) {\n /* eslint-disable */\n switch (this.config.keyboard[e.key]) {\n // @formatter:off\n case ACTIONS.ROTATE_LAT_UP: this.psv.dynamics.position.roll({latitude: false}); break;\n case ACTIONS.ROTATE_LAT_DOWN: this.psv.dynamics.position.roll({latitude: true}); break;\n case ACTIONS.ROTATE_LONG_RIGHT: this.psv.dynamics.position.roll({longitude: false}); break;\n case ACTIONS.ROTATE_LONG_LEFT: this.psv.dynamics.position.roll({longitude: true}); break;\n case ACTIONS.ZOOM_IN: this.psv.dynamics.zoom.roll(false); break;\n case ACTIONS.ZOOM_OUT: this.psv.dynamics.zoom.roll(true); break;\n // @formatter:on\n }\n /* eslint-enable */\n\n this.state.keyHandler.down();\n }\n }\n\n /**\n * @summary Handles keyboard events\n * @private\n */\n __onKeyUp() {\n this.state.ctrlKeyDown = false;\n\n if (!this.state.keyboardEnabled) {\n return;\n }\n\n this.state.keyHandler.up(() => {\n this.psv.dynamics.position.stop();\n this.psv.dynamics.zoom.stop();\n });\n }\n\n /**\n * @summary Handles mouse down events\n * @param {MouseEvent} evt\n * @private\n */\n __onMouseDown(evt) {\n if (!this.config.mousemove || this.config.captureCursor) {\n return;\n }\n\n this.__startMove(evt);\n }\n\n /**\n * @summary Handles mouse enter events\n * @param {MouseEvent} evt\n * @private\n */\n __onMouseEnter(evt) {\n if (!this.config.mousemove || !this.config.captureCursor) {\n return;\n }\n\n this.__startMove(evt);\n }\n\n /**\n * @summary Handles mouse up events\n * @param {MouseEvent} evt\n * @private\n */\n __onMouseUp(evt) {\n if (!this.config.mousemove || this.config.captureCursor) {\n return;\n }\n\n this.__stopMove(evt);\n }\n\n /**\n * @summary Handles mouse leave events\n * @param {MouseEvent} evt\n * @private\n */\n __onMouseLeave(evt) {\n if (!this.config.mousemove || !this.config.captureCursor) {\n return;\n }\n\n this.__stopMove(evt);\n }\n\n /**\n * @summary Handles mouse move events\n * @param {MouseEvent} evt\n * @private\n */\n __onMouseMove(evt) {\n if (this.config.mousemove) {\n if (evt.buttons !== 0) {\n evt.preventDefault();\n this.__move(evt);\n }\n else if (this.config.captureCursor) {\n this.__moveAbsolute(evt);\n }\n }\n\n if (!isEmpty(this.prop.objectsObservers)) {\n const viewerPos = getPosition(this.psv.container);\n\n const viewerPoint = {\n x: evt.clientX - viewerPos.left,\n y: evt.clientY - viewerPos.top,\n };\n\n const intersections = this.psv.dataHelper.getIntersections(viewerPoint);\n\n const emit = (observer, key, type) => {\n observer.listener.handleEvent(new CustomEvent(type, {\n detail: {\n originalEvent: evt,\n object : observer.object,\n data : observer.object.userData[key],\n viewerPoint : viewerPoint,\n },\n }));\n };\n\n each(this.prop.objectsObservers, (observer, key) => {\n const intersection = intersections.find(i => i.object.userData[key]);\n\n if (intersection) {\n if (observer.object && intersection.object !== observer.object) {\n emit(observer, key, OBJECT_EVENTS.LEAVE_OBJECT);\n delete observer.object;\n }\n\n if (!observer.object) {\n observer.object = intersection.object;\n emit(observer, key, OBJECT_EVENTS.ENTER_OBJECT);\n }\n else {\n emit(observer, key, OBJECT_EVENTS.HOVER_OBJECT);\n }\n }\n else if (observer.object) {\n emit(observer, key, OBJECT_EVENTS.LEAVE_OBJECT);\n delete observer.object;\n }\n });\n }\n }\n\n /**\n * @summary Handles touch events\n * @param {TouchEvent} evt\n * @private\n */\n __onTouchStart(evt) {\n if (!this.config.mousemove) {\n return;\n }\n\n if (evt.touches.length === 1) {\n if (!this.config.touchmoveTwoFingers) {\n this.__startMove(evt.touches[0]);\n evt.preventDefault(); // prevent mouse events emulation\n }\n\n if (!this.prop.longtouchTimeout) {\n this.prop.longtouchTimeout = setTimeout(() => {\n this.__click(evt.touches[0], true);\n this.prop.longtouchTimeout = null;\n }, LONGTOUCH_DELAY);\n }\n }\n else if (evt.touches.length === 2) {\n this.__cancelLongTouch();\n this.__cancelTwoFingersOverlay();\n this.__startMoveZoom(evt);\n evt.preventDefault();\n }\n }\n\n /**\n * @summary Handles touch events\n * @param {TouchEvent} evt\n * @private\n */\n __onTouchEnd(evt) {\n if (!this.config.mousemove) {\n return;\n }\n\n this.__cancelLongTouch();\n this.__cancelTwoFingersOverlay();\n\n if (evt.touches.length === 1) {\n this.__stopMoveZoom();\n }\n else if (evt.touches.length === 0) {\n this.__stopMove(evt.changedTouches[0]);\n }\n }\n\n /**\n * @summary Handles touch move events\n * @param {TouchEvent} evt\n * @private\n */\n __onTouchMove(evt) {\n if (!this.config.mousemove) {\n return;\n }\n\n this.__cancelLongTouch();\n\n if (evt.touches.length === 1) {\n if (this.config.touchmoveTwoFingers) {\n if (!this.prop.twofingersTimeout) {\n this.prop.twofingersTimeout = setTimeout(() => {\n this.psv.overlay.show({\n id : IDS.TWO_FINGERS,\n image: gestureIcon,\n text : this.config.lang.twoFingers,\n });\n }, TWOFINGERSOVERLAY_DELAY);\n }\n }\n else {\n evt.preventDefault();\n this.__move(evt.touches[0]);\n }\n }\n else if (evt.touches.length === 2) {\n evt.preventDefault();\n this.__moveZoom(evt);\n this.__cancelTwoFingersOverlay();\n }\n }\n\n /**\n * @summary Cancel the long touch timer if any\n * @private\n */\n __cancelLongTouch() {\n if (this.prop.longtouchTimeout) {\n clearTimeout(this.prop.longtouchTimeout);\n this.prop.longtouchTimeout = null;\n }\n }\n\n /**\n * @summary Cancel the two fingers overlay timer if any\n * @private\n */\n __cancelTwoFingersOverlay() {\n if (this.prop.twofingersTimeout) {\n clearTimeout(this.prop.twofingersTimeout);\n this.prop.twofingersTimeout = null;\n }\n this.psv.overlay.hide(IDS.TWO_FINGERS);\n }\n\n /**\n * @summary Handles mouse wheel events\n * @param {WheelEvent} evt\n * @private\n */\n __onMouseWheel(evt) {\n if (!this.config.mousewheel) {\n return;\n }\n\n if (this.config.mousewheelCtrlKey && !this.state.ctrlKeyDown) {\n this.psv.overlay.show({\n id : IDS.CTRL_ZOOM,\n image: mousewheelIcon,\n text : this.config.lang.ctrlZoom,\n });\n\n clearTimeout(this.state.ctrlZoomTimeout);\n this.state.ctrlZoomTimeout = setTimeout(() => this.psv.overlay.hide(IDS.CTRL_ZOOM), CTRLZOOM_TIMEOUT);\n\n return;\n }\n\n evt.preventDefault();\n evt.stopPropagation();\n\n const delta = normalizeWheel(evt).spinY * 5 * this.config.zoomSpeed;\n if (delta !== 0) {\n this.psv.dynamics.zoom.step(-delta, 5);\n }\n }\n\n /**\n * @summary Handles fullscreen events\n * @param {boolean} [force] force state\n * @fires PSV.fullscreen-updated\n * @package\n */\n __fullscreenToggled(force) {\n this.prop.fullscreen = force !== undefined ? force : isFullscreenEnabled(this.psv.container);\n\n if (this.config.keyboard) {\n if (this.prop.fullscreen) {\n this.psv.startKeyboardControl();\n }\n else {\n this.psv.stopKeyboardControl();\n }\n }\n\n this.psv.trigger(EVENTS.FULLSCREEN_UPDATED, this.prop.fullscreen);\n }\n\n /**\n * @summary Initializes the movement\n * @param {MouseEvent|Touch} evt\n * @private\n */\n __startMove(evt) {\n this.psv.stopAutorotate();\n this.psv.stopAnimation()\n .then(() => {\n this.state.mouseX = evt.clientX;\n this.state.mouseY = evt.clientY;\n this.state.startMouseX = this.state.mouseX;\n this.state.startMouseY = this.state.mouseY;\n this.state.moving = true;\n this.state.zooming = false;\n\n this.state.mouseHistory.length = 0;\n this.__logMouseMove(evt);\n });\n }\n\n /**\n * @summary Initializes the combines move and zoom\n * @param {TouchEvent} evt\n * @private\n */\n __startMoveZoom(evt) {\n const p1 = { x: evt.touches[0].clientX, y: evt.touches[0].clientY };\n const p2 = { x: evt.touches[1].clientX, y: evt.touches[1].clientY };\n\n this.state.pinchDist = distance(p1, p2);\n this.state.mouseX = (p1.x + p2.x) / 2;\n this.state.mouseY = (p1.y + p2.y) / 2;\n this.state.startMouseX = this.state.mouseX;\n this.state.startMouseY = this.state.mouseY;\n this.state.moving = true;\n this.state.zooming = true;\n }\n\n /**\n * @summary Stops the movement\n * @description If the move threshold was not reached a click event is triggered, otherwise an animation is launched to simulate inertia\n * @param {MouseEvent|Touch} evt\n * @private\n */\n __stopMove(evt) {\n if (!getClosest(evt.target, '.psv-container')) {\n this.state.moving = false;\n this.state.mouseHistory.length = 0;\n return;\n }\n\n if (this.state.moving) {\n // move threshold to trigger a click\n if (Math.abs(evt.clientX - this.state.startMouseX) < this.state.moveThreshold\n && Math.abs(evt.clientY - this.state.startMouseY) < this.state.moveThreshold) {\n this.__click(evt);\n this.state.moving = false;\n }\n // inertia animation\n else if (this.config.moveInertia) {\n this.__logMouseMove(evt);\n this.__stopMoveInertia(evt);\n }\n else {\n this.state.moving = false;\n }\n\n this.state.mouseHistory.length = 0;\n }\n }\n\n /**\n * @summary Stops the combined move and zoom\n * @private\n */\n __stopMoveZoom() {\n this.state.mouseHistory.length = 0;\n this.state.moving = false;\n this.state.zooming = false;\n }\n\n /**\n * @summary Performs an animation to simulate inertia when the movement stops\n * @param {MouseEvent|Touch} evt\n * @private\n */\n __stopMoveInertia(evt) {\n const direction = {\n x: evt.clientX - this.state.mouseHistory[0][1],\n y: evt.clientY - this.state.mouseHistory[0][2],\n };\n\n const norm = Math.sqrt(direction.x * direction.x + direction.y * direction.y);\n\n this.prop.animationPromise = new Animation({\n properties: {\n clientX: { start: evt.clientX, end: evt.clientX + direction.x },\n clientY: { start: evt.clientY, end: evt.clientY + direction.y },\n },\n duration : norm * INERTIA_WINDOW / 100,\n easing : 'outCirc',\n onTick : (properties) => {\n this.__move(properties, false);\n },\n });\n\n this.prop.animationPromise\n .then(() => {\n this.state.moving = false;\n });\n }\n\n /**\n * @summary Triggers an event with all coordinates when a simple click is performed\n * @param {MouseEvent|Touch} evt\n * @param {boolean} [longtouch=false]\n * @fires PSV.click\n * @fires PSV.dblclick\n * @private\n */\n __click(evt, longtouch = false) {\n const boundingRect = this.psv.container.getBoundingClientRect();\n\n /**\n * @type {PSV.ClickData}\n */\n const data = {\n rightclick: longtouch || evt.button === 2,\n target : evt.target,\n clientX : evt.clientX,\n clientY : evt.clientY,\n viewerX : evt.clientX - boundingRect.left,\n viewerY : evt.clientY - boundingRect.top,\n };\n\n const intersections = this.psv.dataHelper.getIntersections({\n x: data.viewerX,\n y: data.viewerY,\n });\n\n const sphereIntersection = intersections.find(i => i.object.userData.psvSphere);\n\n if (sphereIntersection) {\n const sphericalCoords = this.psv.dataHelper.vector3ToSphericalCoords(sphereIntersection.point);\n data.longitude = sphericalCoords.longitude;\n data.latitude = sphericalCoords.latitude;\n\n data.objects = intersections.map(i => i.object).filter(o => !o.userData.psvSphere);\n\n try {\n const textureCoords = this.psv.dataHelper.sphericalCoordsToTextureCoords(data);\n data.textureX = textureCoords.x;\n data.textureY = textureCoords.y;\n }\n catch (e) {\n data.textureX = NaN;\n data.textureY = NaN;\n }\n\n if (!this.state.dblclickTimeout) {\n this.psv.trigger(EVENTS.CLICK, data);\n\n this.state.dblclickData = clone(data);\n this.state.dblclickTimeout = setTimeout(() => {\n this.state.dblclickTimeout = null;\n this.state.dblclickData = null;\n }, DBLCLICK_DELAY);\n }\n else {\n if (Math.abs(this.state.dblclickData.clientX - data.clientX) < this.state.moveThreshold\n && Math.abs(this.state.dblclickData.clientY - data.clientY) < this.state.moveThreshold) {\n this.psv.trigger(EVENTS.DOUBLE_CLICK, this.state.dblclickData);\n }\n\n clearTimeout(this.state.dblclickTimeout);\n this.state.dblclickTimeout = null;\n this.state.dblclickData = null;\n }\n }\n }\n\n /**\n * @summary Performs movement\n * @param {MouseEvent|Touch} evt\n * @param {boolean} [log=true]\n * @private\n */\n __move(evt, log) {\n if (this.state.moving) {\n const x = evt.clientX;\n const y = evt.clientY;\n\n const rotation = {\n longitude: (x - this.state.mouseX) / this.prop.size.width * this.config.moveSpeed * THREE.Math.degToRad(this.prop.hFov),\n latitude : (y - this.state.mouseY) / this.prop.size.height * this.config.moveSpeed * THREE.Math.degToRad(this.prop.vFov),\n };\n\n const currentPosition = this.psv.getPosition();\n this.psv.rotate({\n longitude: currentPosition.longitude - rotation.longitude,\n latitude : currentPosition.latitude + rotation.latitude,\n });\n\n this.state.mouseX = x;\n this.state.mouseY = y;\n\n if (log !== false) {\n this.__logMouseMove(evt);\n }\n }\n }\n\n /**\n * @summary Performs movement absolute to cursor position in viewer\n * @param {MouseEvent} evt\n * @private\n */\n __moveAbsolute(evt) {\n if (this.state.moving) {\n const containerRect = this.psv.container.getBoundingClientRect();\n this.psv.dynamics.position.goto({\n longitude: ((evt.clientX - containerRect.left) / containerRect.width - 0.5) * Math.PI * 2,\n latitude : -((evt.clientY - containerRect.top) / containerRect.height - 0.5) * Math.PI,\n }, 10);\n }\n }\n\n /**\n * @summary Perfoms combined move and zoom\n * @param {TouchEvent} evt\n * @private\n */\n __moveZoom(evt) {\n if (this.state.zooming && this.state.moving) {\n const p1 = { x: evt.touches[0].clientX, y: evt.touches[0].clientY };\n const p2 = { x: evt.touches[1].clientX, y: evt.touches[1].clientY };\n\n const p = distance(p1, p2);\n const delta = 80 * (p - this.state.pinchDist) / this.prop.size.width * this.config.zoomSpeed;\n\n this.psv.zoom(this.psv.getZoomLevel() + delta);\n\n this.__move({\n clientX: (p1.x + p2.x) / 2,\n clientY: (p1.y + p2.y) / 2,\n });\n\n this.state.pinchDist = p;\n }\n }\n\n /**\n * @summary Stores each mouse position during a mouse move\n * @description Positions older than \"INERTIA_WINDOW\" are removed
\n * Positions before a pause of \"INERTIA_WINDOW\" / 10 are removed\n * @param {MouseEvent|Touch} evt\n * @private\n */\n __logMouseMove(evt) {\n const now = Date.now();\n this.state.mouseHistory.push([now, evt.clientX, evt.clientY]);\n\n let previous = null;\n\n for (let i = 0; i < this.state.mouseHistory.length;) {\n if (this.state.mouseHistory[0][i] < now - INERTIA_WINDOW) {\n this.state.mouseHistory.splice(i, 1);\n }\n else if (previous && this.state.mouseHistory[0][i] - previous > INERTIA_WINDOW / 10) {\n this.state.mouseHistory.splice(0, i);\n i = 0;\n previous = this.state.mouseHistory[0][i];\n }\n else {\n i++;\n previous = this.state.mouseHistory[0][i];\n }\n }\n }\n\n}\n","import * as THREE from 'three';\nimport { Animation } from '../utils/Animation';\nimport { EVENTS, MESH_USER_DATA, SPHERE_RADIUS } from '../data/constants';\nimport { SYSTEM } from '../data/system';\nimport { each, isExtendedPosition } from '../utils';\nimport { AbstractService } from './AbstractService';\n\n/**\n * @summary Viewer and renderer\n * @extends PSV.services.AbstractService\n * @memberof PSV.services\n */\nexport class Renderer extends AbstractService {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv);\n\n /**\n * @member {external:THREE.WebGLRenderer}\n * @readonly\n * @protected\n */\n this.renderer = new THREE.WebGLRenderer({ alpha: true, antialias: true });\n this.renderer.setPixelRatio(SYSTEM.pixelRatio);\n this.renderer.domElement.className = 'psv-canvas';\n\n /**\n * @member {external:THREE.Scene}\n * @readonly\n * @protected\n */\n this.scene = new THREE.Scene();\n\n /**\n * @member {external:THREE.PerspectiveCamera}\n * @readonly\n * @protected\n */\n this.camera = new THREE.PerspectiveCamera(50, 16 / 9, 1, 2 * SPHERE_RADIUS);\n\n /**\n * @member {external:THREE.Mesh}\n * @readonly\n * @protected\n */\n this.mesh = this.psv.adapter.createMesh();\n this.mesh.userData = { [MESH_USER_DATA]: true };\n\n /**\n * @member {external:THREE.Group}\n * @readonly\n * @private\n */\n this.meshContainer = new THREE.Group();\n this.meshContainer.add(this.mesh);\n this.scene.add(this.meshContainer);\n\n /**\n * @member {external:THREE.Raycaster}\n * @readonly\n * @protected\n */\n this.raycaster = new THREE.Raycaster();\n\n /**\n * @member {number}\n * @private\n */\n this.timestamp = null;\n\n /**\n * @member {boolean}\n * @private\n */\n this.ready = false;\n\n /**\n * @member {HTMLElement}\n * @readonly\n * @package\n */\n this.canvasContainer = document.createElement('div');\n this.canvasContainer.className = 'psv-canvas-container';\n this.canvasContainer.style.background = this.psv.config.canvasBackground;\n this.canvasContainer.style.cursor = this.psv.config.mousemove ? 'move' : 'default';\n this.canvasContainer.appendChild(this.renderer.domElement);\n this.psv.container.appendChild(this.canvasContainer);\n\n psv.on(EVENTS.SIZE_UPDATED, this);\n psv.on(EVENTS.ZOOM_UPDATED, this);\n psv.on(EVENTS.POSITION_UPDATED, this);\n psv.on(EVENTS.CONFIG_CHANGED, this);\n\n this.hide();\n }\n\n /**\n * @override\n */\n destroy() {\n // cancel render loop\n this.renderer.setAnimationLoop(null);\n\n // destroy ThreeJS view\n this.__cleanTHREEScene(this.scene);\n\n // remove container\n this.psv.container.removeChild(this.canvasContainer);\n\n delete this.canvasContainer;\n delete this.renderer;\n delete this.scene;\n delete this.camera;\n delete this.mesh;\n delete this.meshContainer;\n delete this.raycaster;\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} evt\n * @private\n */\n handleEvent(evt) {\n /* eslint-disable */\n switch (evt.type) {\n // @formatter:off\n case EVENTS.SIZE_UPDATED: this.__onSizeUpdated(); break;\n case EVENTS.ZOOM_UPDATED: this.__onZoomUpdated(); break;\n case EVENTS.POSITION_UPDATED: this.__onPositionUpdated(); break;\n case EVENTS.CONFIG_CHANGED:\n if (evt.args[0].includes('fisheye')) {\n this.__onPositionUpdated();\n }\n if (evt.args[0].includes('mousemove')) {\n this.canvasContainer.style.cursor = this.psv.config.mousemove ? 'move' : 'default';\n }\n break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @summary Hides the viewer\n */\n hide() {\n this.canvasContainer.style.opacity = 0;\n }\n\n /**\n * @summary Shows the viewer\n */\n show() {\n this.canvasContainer.style.opacity = 1;\n }\n\n /**\n * @summary Updates the size of the renderer and the aspect of the camera\n * @private\n */\n __onSizeUpdated() {\n this.renderer.setSize(this.prop.size.width, this.prop.size.height);\n this.camera.aspect = this.prop.aspect;\n this.camera.updateProjectionMatrix();\n this.prop.needsUpdate = true;\n }\n\n /**\n * @summary Updates the fov of the camera\n * @private\n */\n __onZoomUpdated() {\n this.camera.fov = this.prop.vFov;\n this.camera.updateProjectionMatrix();\n this.prop.needsUpdate = true;\n }\n\n /**\n * @summary Updates the position of the camera\n * @private\n */\n __onPositionUpdated() {\n this.camera.position.set(0, 0, 0);\n this.camera.lookAt(this.prop.direction);\n if (this.config.fisheye) {\n this.camera.position.copy(this.prop.direction).multiplyScalar(this.config.fisheye / 2).negate();\n }\n this.prop.needsUpdate = true;\n }\n\n /**\n * @summary Main event loop, calls {@link render} if `prop.needsUpdate` is true\n * @param {number} timestamp\n * @fires PSV.before-render\n * @private\n */\n __renderLoop(timestamp) {\n const elapsed = this.timestamp !== null ? timestamp - this.timestamp : 0;\n this.timestamp = timestamp;\n\n this.psv.trigger(EVENTS.BEFORE_RENDER, timestamp, elapsed);\n each(this.psv.dynamics, d => d.update(elapsed));\n\n if (this.prop.needsUpdate) {\n this.render();\n this.prop.needsUpdate = false;\n }\n }\n\n /**\n * @summary Performs a render\n * @description Do not call this method directly, instead call\n * {@link PSV.Viewer#needsUpdate} on {@link PSV.event:before-render}.\n * @fires PSV.render\n */\n render() {\n this.renderer.render(this.scene, this.camera);\n this.psv.trigger(EVENTS.RENDER);\n }\n\n /**\n * @summary Applies the texture to the scene, creates the scene if needed\n * @param {PSV.TextureData} textureData\n * @fires PSV.panorama-loaded\n * @package\n */\n setTexture(textureData) {\n this.prop.panoData = textureData.panoData;\n\n this.psv.adapter.setTexture(this.mesh, textureData);\n\n if (!this.ready) {\n this.renderer.setAnimationLoop(t => this.__renderLoop(t));\n this.ready = true;\n }\n\n this.psv.needsUpdate();\n\n this.psv.trigger(EVENTS.PANORAMA_LOADED, textureData);\n }\n\n /**\n * @summary Apply a panorama data pose to a Mesh\n * @param {PSV.PanoData} [panoData]\n * @param {external:THREE.Mesh} [mesh=this.mesh]\n * @package\n */\n setPanoramaPose(panoData, mesh = this.mesh) {\n // By Google documentation the angles are applied on the camera in order : heading, pitch, roll\n // here we apply the reverse transformation on the sphere\n const cleanCorrection = this.psv.dataHelper.cleanPanoramaPose(panoData);\n\n mesh.rotation.set(\n -cleanCorrection.tilt,\n -cleanCorrection.pan,\n -cleanCorrection.roll,\n 'ZXY'\n );\n }\n\n /**\n * @summary Apply a SphereCorrection to a Mesh\n * @param {PSV.SphereCorrection} [sphereCorrection]\n * @param {external:THREE.Mesh} [mesh=this.meshContainer]\n * @package\n */\n setSphereCorrection(sphereCorrection, mesh = this.meshContainer) {\n const cleanCorrection = this.psv.dataHelper.cleanSphereCorrection(sphereCorrection);\n\n mesh.rotation.set(\n cleanCorrection.tilt,\n cleanCorrection.pan,\n cleanCorrection.roll,\n 'ZXY'\n );\n }\n\n /**\n * @summary Performs transition between the current and a new texture\n * @param {PSV.TextureData} textureData\n * @param {PSV.PanoramaOptions} options\n * @returns {PSV.Animation}\n * @package\n */\n transition(textureData, options) {\n const positionProvided = isExtendedPosition(options);\n const zoomProvided = 'zoom' in options;\n\n // create temp group and new mesh, half size to be in \"front\" of the first one\n const group = new THREE.Group();\n const mesh = this.psv.adapter.createMesh(0.5);\n this.psv.adapter.setTexture(mesh, textureData, true);\n this.psv.adapter.setTextureOpacity(mesh, 0);\n this.setPanoramaPose(textureData.panoData, mesh);\n this.setSphereCorrection(options.sphereCorrection, group);\n\n // rotate the new sphere to make the target position face the camera\n if (positionProvided) {\n const cleanPosition = this.psv.dataHelper.cleanPosition(options);\n const currentPosition = this.psv.getPosition();\n\n // Longitude rotation along the vertical axis\n const verticalAxis = new THREE.Vector3(0, 1, 0);\n group.rotateOnWorldAxis(verticalAxis, cleanPosition.longitude - currentPosition.longitude);\n\n // Latitude rotation along the camera horizontal axis\n const horizontalAxis = new THREE.Vector3(0, 1, 0).cross(this.camera.getWorldDirection(new THREE.Vector3())).normalize();\n group.rotateOnWorldAxis(horizontalAxis, cleanPosition.latitude - currentPosition.latitude);\n }\n\n group.add(mesh);\n this.scene.add(group);\n\n const animation = new Animation({\n properties: {\n opacity: { start: 0.0, end: 1.0 },\n zoom : zoomProvided ? { start: this.psv.getZoomLevel(), end: options.zoom } : undefined,\n },\n duration : options.transition,\n easing : 'outCubic',\n onTick : (properties) => {\n this.psv.adapter.setTextureOpacity(mesh, properties.opacity);\n this.psv.adapter.setTextureOpacity(this.mesh, 1 - properties.opacity);\n\n if (zoomProvided) {\n this.psv.zoom(properties.zoom);\n }\n\n this.psv.needsUpdate();\n },\n });\n\n animation\n .then((completed) => {\n if (completed) {\n // remove temp sphere and transfer the texture to the main mesh\n this.setTexture(textureData);\n this.psv.adapter.setTextureOpacity(this.mesh, 1);\n this.setPanoramaPose(textureData.panoData);\n this.setSphereCorrection(options.sphereCorrection);\n\n // actually rotate the camera\n if (positionProvided) {\n this.psv.rotate(options);\n }\n }\n else {\n this.psv.adapter.disposeTexture(textureData);\n }\n\n this.scene.remove(group);\n mesh.geometry.dispose();\n mesh.geometry = null;\n });\n\n return animation;\n }\n\n /**\n * @summary Calls `dispose` on all objects and textures\n * @param {external:THREE.Object3D} object\n * @private\n */\n __cleanTHREEScene(object) {\n object.traverse((item) => {\n if (item.geometry) {\n item.geometry.dispose();\n }\n\n if (item.material) {\n if (Array.isArray(item.material)) {\n item.material.forEach((material) => {\n if (material.map) {\n material.map.dispose();\n }\n\n material.dispose();\n });\n }\n else {\n if (item.material.map) {\n item.material.map.dispose();\n }\n\n item.material.dispose();\n }\n }\n\n if (item.dispose && !(item instanceof THREE.Scene)) {\n item.dispose();\n }\n\n if (item !== object) {\n this.__cleanTHREEScene(item);\n }\n });\n }\n\n}\n","import * as THREE from 'three';\nimport { AbstractService } from './AbstractService';\n\n/**\n * @summary Texture loader\n * @extends PSV.services.AbstractService\n * @memberof PSV.services\n */\nexport class TextureLoader extends AbstractService {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv);\n\n /**\n * @summary THREE file loader\n * @type {external:THREE:FileLoader}\n * @private\n */\n this.loader = new THREE.FileLoader();\n this.loader.setResponseType('blob');\n if (this.config.withCredentials) {\n this.loader.setWithCredentials(true);\n }\n if (this.config.requestHeaders && typeof this.config.requestHeaders === 'object') {\n this.loader.setRequestHeader(this.config.requestHeaders);\n }\n }\n\n /**\n * @override\n */\n destroy() {\n this.abortLoading();\n super.destroy();\n }\n\n /**\n * @summary Loads the panorama texture(s)\n * @param {*} panorama\n * @param {PSV.PanoData | PSV.PanoDataProvider} [newPanoData]\n * @returns {Promise.}\n * @throws {PSV.PSVError} when the image cannot be loaded\n * @package\n * @deprecated\n */\n loadTexture(panorama, newPanoData) {\n return this.psv.adapter.loadTexture(panorama, newPanoData);\n }\n\n /**\n * @summary Cancels current HTTP requests\n * @package\n */\n abortLoading() {\n // noop implementation waiting for https://github.com/mrdoob/three.js/pull/23070\n }\n\n /**\n * @summary Loads a Blob with FileLoader\n * @param {string} url\n * @param {function(number)} [onProgress]\n * @returns {Promise}\n */\n loadFile(url, onProgress) {\n if (this.config.requestHeaders && typeof this.config.requestHeaders === 'function') {\n this.loader.setRequestHeader(this.config.requestHeaders(url));\n }\n\n return new Promise((resolve, reject) => {\n let progress = 0;\n onProgress && onProgress(progress);\n\n this.loader.load(\n url,\n (result) => {\n progress = 100;\n onProgress && onProgress(progress);\n resolve(result);\n },\n (e) => {\n if (e.lengthComputable) {\n const newProgress = e.loaded / e.total * 100;\n if (newProgress > progress) {\n progress = newProgress;\n onProgress && onProgress(progress);\n }\n }\n },\n (err) => {\n reject(err);\n }\n );\n });\n }\n\n /**\n * @summary Loads an Image using FileLoader to have progress events\n * @param {string} url\n * @param {function(number)} [onProgress]\n * @returns {Promise}\n */\n loadImage(url, onProgress) {\n return this.loadFile(url, onProgress)\n .then(result => new Promise((resolve, reject) => {\n const img = document.createElementNS('http://www.w3.org/1999/xhtml', 'img');\n img.onload = () => {\n URL.revokeObjectURL(img.src);\n resolve(img);\n };\n img.onerror = reject;\n img.src = URL.createObjectURL(result);\n }));\n }\n\n /**\n * @summary Preload a panorama file without displaying it\n * @param {*} panorama\n * @returns {Promise}\n */\n preloadPanorama(panorama) {\n if (this.psv.adapter.supportsPreload(panorama)) {\n return this.psv.adapter.loadTexture(panorama);\n }\n else {\n return Promise.resolve();\n }\n }\n\n}\n","import { EVENTS } from '../data/constants';\nimport { PSVError } from '../PSVError';\nimport { addClasses, cleanPosition } from '../utils';\nimport { AbstractComponent } from './AbstractComponent';\n\nconst STATE = { NONE: 0, SHOWING: 1, HIDING: 2, READY: 3 };\n\n/**\n * @typedef {Object} PSV.components.Tooltip.Position\n * @summary Object defining the tooltip position\n * @property {number} top - Position of the tip of the arrow of the tooltip, in pixels\n * @property {number} left - Position of the tip of the arrow of the tooltip, in pixels\n * @property {string|string[]} [position='top center'] - Tooltip position toward it's arrow tip.\n * Accepted values are combinations of `top`, `center`, `bottom` and `left`, `center`, `right`\n * @property {Object} [box] - Used when displaying a tooltip on a marker\n * @property {number} [box.width=0]\n * @property {number} [box.height=0]\n */\n\n/**\n * @typedef {PSV.components.Tooltip.Position} PSV.components.Tooltip.Config\n * @summary Object defining the tooltip configuration\n * @property {string} content - HTML content of the tooltip\n * @property {string} [className] - Additional CSS class added to the tooltip\n * @property {*} [data] - Userdata associated to the tooltip\n */\n\n/**\n * @summary Tooltip component\n * @description Never instanciate tooltips directly use {@link PSV.services.TooltipRenderer} instead\n * @extends PSV.components.AbstractComponent\n * @memberof PSV.components\n */\nexport class Tooltip extends AbstractComponent {\n\n /**\n * @param {PSV.Viewer} psv\n * @param {{arrow: number, offset: number}} size\n */\n constructor(psv, size) {\n super(psv, 'psv-tooltip');\n\n /**\n * @override\n * @property {number} arrow\n * @property {number} offset\n * @property {number} width\n * @property {number} height\n * @property {string} pos\n * @property {string} state\n * @property {*} data\n */\n this.prop = {\n ...this.prop,\n ...size,\n state : STATE.NONE,\n width : 0,\n height: 0,\n pos : '',\n data : null,\n };\n\n /**\n * Tooltip content\n * @member {HTMLElement}\n * @readonly\n * @private\n */\n this.content = document.createElement('div');\n this.content.className = 'psv-tooltip-content';\n this.container.appendChild(this.content);\n\n /**\n * Tooltip arrow\n * @member {HTMLElement}\n * @readonly\n * @package\n */\n this.arrow = document.createElement('div');\n this.arrow.className = 'psv-tooltip-arrow';\n this.container.appendChild(this.arrow);\n\n this.container.addEventListener('transitionend', this);\n\n this.container.style.top = '-1000px';\n this.container.style.left = '-1000px';\n }\n\n /**\n * @override\n */\n destroy() {\n delete this.arrow;\n delete this.content;\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case 'transitionend': this.__onTransitionEnd(e); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n * @summary This method is not supported\n * @throws {PSV.PSVError} always\n */\n toggle() {\n throw new PSVError('Tooltip cannot be toggled');\n }\n\n /**\n * @summary Displays the tooltip on the viewer\n * Do not call this method directly, use {@link PSV.services.TooltipRenderer} instead.\n * @param {PSV.components.Tooltip.Config} config\n *\n * @fires PSV.show-tooltip\n * @throws {PSV.PSVError} when the configuration is incorrect\n *\n * @package\n */\n show(config) {\n if (this.prop.state !== STATE.NONE) {\n throw new PSVError('Initialized tooltip cannot be re-initialized');\n }\n\n if (config.className) {\n addClasses(this.container, config.className);\n }\n\n this.content.innerHTML = config.content;\n\n const rect = this.container.getBoundingClientRect();\n this.prop.width = rect.right - rect.left;\n this.prop.height = rect.bottom - rect.top;\n\n this.prop.state = STATE.READY;\n\n this.move(config);\n\n this.prop.data = config.data;\n this.prop.state = STATE.SHOWING;\n\n this.psv.trigger(EVENTS.SHOW_TOOLTIP, this.prop.data, this);\n }\n\n /**\n * @summary Moves the tooltip to a new position\n * @param {PSV.components.Tooltip.Position} config\n *\n * @throws {PSV.PSVError} when the configuration is incorrect\n */\n move(config) {\n if (this.prop.state !== STATE.SHOWING && this.prop.state !== STATE.READY) {\n throw new PSVError('Uninitialized tooltip cannot be moved');\n }\n\n const t = this.container;\n const a = this.arrow;\n\n // compute size\n const style = {\n posClass : cleanPosition(config.position, 'top center', false),\n width : this.prop.width,\n height : this.prop.height,\n top : 0,\n left : 0,\n arrowTop : 0,\n arrowLeft: 0,\n };\n\n // set initial position\n this.__computeTooltipPosition(style, config);\n\n // correct position if overflow\n let refresh = false;\n if (style.top < this.prop.offset) {\n style.posClass[0] = 'bottom';\n refresh = true;\n }\n else if (style.top + style.height > this.psv.prop.size.height - this.prop.offset) {\n style.posClass[0] = 'top';\n refresh = true;\n }\n if (style.left < this.prop.offset) {\n style.posClass[1] = 'right';\n refresh = true;\n }\n else if (style.left + style.width > this.psv.prop.size.width - this.prop.offset) {\n style.posClass[1] = 'left';\n refresh = true;\n }\n if (refresh) {\n this.__computeTooltipPosition(style, config);\n }\n\n // apply position\n t.style.top = style.top + 'px';\n t.style.left = style.left + 'px';\n\n a.style.top = style.arrowTop + 'px';\n a.style.left = style.arrowLeft + 'px';\n\n const newPos = style.posClass.join('-');\n if (newPos !== this.prop.pos) {\n t.classList.remove(`psv-tooltip--${this.prop.pos}`);\n\n this.prop.pos = newPos;\n t.classList.add(`psv-tooltip--${this.prop.pos}`);\n }\n }\n\n /**\n * @summary Hides the tooltip\n * @fires PSV.hide-tooltip\n */\n hide() {\n this.container.classList.remove('psv-tooltip--visible');\n this.prop.state = STATE.HIDING;\n\n this.psv.trigger(EVENTS.HIDE_TOOLTIP, this.prop.data);\n }\n\n /**\n * @summary Finalize transition\n * @param {TransitionEvent} e\n * @private\n */\n __onTransitionEnd(e) {\n if (e.propertyName === 'transform') {\n switch (this.prop.state) {\n case STATE.SHOWING:\n this.container.classList.add('psv-tooltip--visible');\n this.prop.state = STATE.READY;\n break;\n\n case STATE.HIDING:\n this.prop.state = STATE.NONE;\n this.destroy();\n break;\n\n default:\n // nothing\n }\n }\n }\n\n /**\n * @summary Computes the position of the tooltip and its arrow\n * @param {Object} style\n * @param {Object} config\n * @private\n */\n __computeTooltipPosition(style, config) {\n let topBottom = false;\n\n if (!config.box) {\n config.box = {\n width : 0,\n height: 0,\n };\n }\n\n switch (style.posClass[0]) {\n case 'bottom':\n style.top = config.top + config.box.height + this.prop.offset + this.prop.arrow;\n style.arrowTop = -this.prop.arrow * 2;\n topBottom = true;\n break;\n\n case 'center':\n style.top = config.top + config.box.height / 2 - style.height / 2;\n style.arrowTop = style.height / 2 - this.prop.arrow;\n break;\n\n case 'top':\n style.top = config.top - style.height - this.prop.offset - this.prop.arrow;\n style.arrowTop = style.height;\n topBottom = true;\n break;\n\n // no default\n }\n\n switch (style.posClass[1]) {\n case 'right':\n if (topBottom) {\n style.left = config.left + config.box.width / 2 - this.prop.offset - this.prop.arrow;\n style.arrowLeft = this.prop.offset;\n }\n else {\n style.left = config.left + config.box.width + this.prop.offset + this.prop.arrow;\n style.arrowLeft = -this.prop.arrow * 2;\n }\n break;\n\n case 'center':\n style.left = config.left + config.box.width / 2 - style.width / 2;\n style.arrowLeft = style.width / 2 - this.prop.arrow;\n break;\n\n case 'left':\n if (topBottom) {\n style.left = config.left - style.width + config.box.width / 2 + this.prop.offset + this.prop.arrow;\n style.arrowLeft = style.width - this.prop.offset - this.prop.arrow * 2;\n }\n else {\n style.left = config.left - style.width - this.prop.offset - this.prop.arrow;\n style.arrowLeft = style.width;\n }\n break;\n\n // no default\n }\n }\n\n}\n","import { Tooltip } from '../components/Tooltip';\nimport { getStyle } from '../utils';\nimport { AbstractService } from './AbstractService';\n\n/**\n * @summary Tooltip renderer\n * @extends PSV.services.AbstractService\n * @memberof PSV.services\n */\nexport class TooltipRenderer extends AbstractService {\n\n /**\n * @param {PSV.Viewer} psv\n */\n constructor(psv) {\n super(psv);\n\n const testTooltip = new Tooltip(this.psv);\n\n /**\n * @summary Computed static sizes\n * @member {Object}\n * @package\n * @property {number} arrowSize\n * @property {number} offset\n */\n this.size = {\n arrow : parseInt(getStyle(testTooltip.arrow, 'borderTopWidth'), 10),\n offset: parseInt(getStyle(testTooltip.container, 'outlineWidth'), 10),\n };\n\n testTooltip.destroy();\n }\n\n /**\n * @override\n */\n destroy() {\n delete this.size;\n\n super.destroy();\n }\n\n /**\n * @summary Displays a tooltip on the viewer\n * @param {PSV.components.Tooltip.Config} config\n * @returns {PSV.components.Tooltip}\n *\n * @fires PSV.show-tooltip\n * @throws {PSV.PSVError} when the configuration is incorrect\n *\n * @example\n * viewer.tooltip.create({ content: 'Hello world', top: 200, left: 450, position: 'center bottom'})\n */\n create(config) {\n const tooltip = new Tooltip(this.psv, this.size);\n tooltip.show(config);\n\n return tooltip;\n }\n\n}\n","import * as THREE from 'three';\nimport { EventEmitter } from 'uevent';\nimport { Loader } from './components/Loader';\nimport { Navbar } from './components/Navbar';\nimport { Notification } from './components/Notification';\nimport { Overlay } from './components/Overlay';\nimport { Panel } from './components/Panel';\nimport { CONFIG_PARSERS, DEFAULTS, DEPRECATED_OPTIONS, getConfig, READONLY_OPTIONS } from './data/config';\nimport { CHANGE_EVENTS, DEFAULT_TRANSITION, EVENTS, IDS, SPHERE_RADIUS, VIEWER_DATA } from './data/constants';\nimport { SYSTEM } from './data/system';\nimport errorIcon from './icons/error.svg';\nimport { AbstractPlugin } from './plugins/AbstractPlugin';\nimport { PSVError } from './PSVError';\nimport { DataHelper } from './services/DataHelper';\nimport { EventsHandler } from './services/EventsHandler';\nimport { Renderer } from './services/Renderer';\nimport { TextureLoader } from './services/TextureLoader';\nimport { TooltipRenderer } from './services/TooltipRenderer';\nimport {\n Animation,\n Dynamic,\n each,\n exitFullscreen,\n getAbortError,\n getAngle,\n getShortestArc,\n isAbortError,\n isExtendedPosition,\n isFullscreenEnabled,\n logWarn,\n MultiDynamic,\n pluginInterop,\n requestFullscreen,\n throttle,\n toggleClass\n} from './utils';\n\nTHREE.Cache.enabled = true;\n\n/**\n * @summary Main class\n * @memberOf PSV\n * @extends {external:uEvent.EventEmitter}\n */\nexport class Viewer extends EventEmitter {\n\n /**\n * @param {PSV.Options} options\n * @fires PSV.ready\n * @throws {PSV.PSVError} when the configuration is incorrect\n */\n constructor(options) {\n super();\n\n SYSTEM.load();\n\n // must support WebGL\n if (!SYSTEM.isWebGLSupported) {\n throw new PSVError('WebGL is not supported.');\n }\n\n if (SYSTEM.maxTextureWidth === 0) {\n throw new PSVError('Unable to detect system capabilities');\n }\n\n /**\n * @summary Internal properties\n * @member {Object}\n * @protected\n * @property {boolean} ready - when all components are loaded\n * @property {boolean} uiRefresh - if the UI needs to be renderer\n * @property {boolean} needsUpdate - if the view needs to be renderer\n * @property {boolean} fullscreen - if the viewer is currently fullscreen\n * @property {external:THREE.Vector3} direction - direction of the camera\n * @property {number} vFov - vertical FOV\n * @property {number} hFov - horizontal FOV\n * @property {number} aspect - viewer aspect ratio\n * @property {boolean} autorotateEnabled - automatic rotation is enabled\n * @property {PSV.Animation} animationPromise - promise of the current animation\n * @property {Promise} loadingPromise - promise of the setPanorama method\n * @property startTimeout - timeout id of the automatic rotation delay\n * @property {object} objectsObservers\n * @property {PSV.Size} size - size of the container\n * @property {PSV.PanoData} panoData - panorama metadata, if supported\n */\n this.prop = {\n ready : false,\n uiRefresh : false,\n needsUpdate : false,\n fullscreen : false,\n direction : new THREE.Vector3(0, 0, SPHERE_RADIUS),\n vFov : null,\n hFov : null,\n aspect : null,\n autorotateEnabled: false,\n animationPromise : null,\n loadingPromise : null,\n startTimeout : null,\n objectsObservers : {},\n size : {\n width : 0,\n height: 0,\n },\n panoData : {\n fullWidth : 0,\n fullHeight : 0,\n croppedWidth : 0,\n croppedHeight: 0,\n croppedX : 0,\n croppedY : 0,\n poseHeading : 0,\n posePitch : 0,\n poseRoll : 0,\n },\n };\n\n /**\n * @summary Configuration holder\n * @type {PSV.Options}\n * @readonly\n */\n this.config = getConfig(options);\n\n /**\n * @summary Top most parent\n * @member {HTMLElement}\n * @readonly\n */\n this.parent = (typeof options.container === 'string') ? document.getElementById(options.container) : options.container;\n this.parent[VIEWER_DATA] = this;\n\n /**\n * @summary Main container\n * @member {HTMLElement}\n * @readonly\n */\n this.container = document.createElement('div');\n this.container.classList.add('psv-container');\n this.parent.appendChild(this.container);\n\n /**\n * @summary Render adapter\n * @type {PSV.adapters.AbstractAdapter}\n * @readonly\n * @package\n */\n this.adapter = new this.config.adapter[0](this, this.config.adapter[1]); // eslint-disable-line new-cap\n\n /**\n * @summary All child components\n * @type {PSV.components.AbstractComponent[]}\n * @readonly\n * @package\n */\n this.children = [];\n\n /**\n * @summary All plugins\n * @type {Object}\n * @readonly\n * @package\n */\n this.plugins = {};\n\n /**\n * @type {PSV.services.Renderer}\n * @readonly\n */\n this.renderer = new Renderer(this);\n\n /**\n * @type {PSV.services.TextureLoader}\n * @readonly\n */\n this.textureLoader = new TextureLoader(this);\n\n /**\n * @type {PSV.services.EventsHandler}\n * @readonly\n */\n this.eventsHandler = new EventsHandler(this);\n\n /**\n * @type {PSV.services.DataHelper}\n * @readonly\n */\n this.dataHelper = new DataHelper(this);\n\n /**\n * @member {PSV.components.Loader}\n * @readonly\n */\n this.loader = new Loader(this);\n\n /**\n * @member {PSV.components.Navbar}\n * @readonly\n */\n this.navbar = new Navbar(this);\n\n /**\n * @member {PSV.components.Panel}\n * @readonly\n */\n this.panel = new Panel(this);\n\n /**\n * @member {PSV.services.TooltipRenderer}\n * @readonly\n */\n this.tooltip = new TooltipRenderer(this);\n\n /**\n * @member {PSV.components.Notification}\n * @readonly\n */\n this.notification = new Notification(this);\n\n /**\n * @member {PSV.components.Overlay}\n * @readonly\n */\n this.overlay = new Overlay(this);\n\n /**\n * @member {Record}\n * @package\n */\n this.dynamics = {\n zoom: new Dynamic((value) => {\n this.prop.vFov = this.dataHelper.zoomLevelToFov(value);\n this.prop.hFov = this.dataHelper.vFovToHFov(this.prop.vFov);\n this.trigger(EVENTS.ZOOM_UPDATED, value);\n }, this.config.defaultZoomLvl, 0, 100),\n\n position: new MultiDynamic({\n longitude: new Dynamic(null, this.config.defaultLong, 0, 2 * Math.PI, true),\n latitude : new Dynamic(null, this.config.defaultLat, -Math.PI / 2, Math.PI / 2),\n }, (position) => {\n this.dataHelper.sphericalCoordsToVector3(position, this.prop.direction);\n this.trigger(EVENTS.POSITION_UPDATED, position);\n }),\n };\n\n this.__updateSpeeds();\n\n this.eventsHandler.init();\n\n this.__resizeRefresh = throttle(() => this.refreshUi('resize'), 500);\n\n // apply container size\n this.resize(this.config.size);\n\n // init plugins\n this.config.plugins.forEach(([plugin, opts]) => {\n this.plugins[plugin.id] = new plugin(this, opts); // eslint-disable-line new-cap\n });\n each(this.plugins, plugin => plugin.init?.());\n\n // init buttons\n this.navbar.setButtons(this.config.navbar);\n\n // load panorama\n if (this.config.panorama) {\n this.setPanorama(this.config.panorama);\n }\n\n toggleClass(this.container, 'psv--is-touch', SYSTEM.isTouchEnabled.initial);\n SYSTEM.isTouchEnabled.promise.then(enabled => toggleClass(this.container, 'psv--is-touch', enabled));\n\n // enable GUI after first render\n this.once(EVENTS.RENDER, () => {\n if (this.config.navbar) {\n this.container.classList.add('psv--has-navbar');\n this.navbar.show();\n }\n\n // Queue autorotate\n if (this.config.autorotateDelay) {\n this.prop.startTimeout = setTimeout(() => this.startAutorotate(), this.config.autorotateDelay);\n }\n\n this.prop.ready = true;\n\n setTimeout(() => {\n this.refreshUi('init');\n\n this.trigger(EVENTS.READY);\n }, 0);\n });\n }\n\n /**\n * @summary Destroys the viewer\n * @description The memory used by the ThreeJS context is not totally cleared. This will be fixed as soon as possible.\n */\n destroy() {\n this.__stopAll();\n this.stopKeyboardControl();\n this.exitFullscreen();\n\n this.eventsHandler.destroy();\n this.renderer.destroy();\n this.textureLoader.destroy();\n this.dataHelper.destroy();\n this.adapter.destroy();\n\n this.children.slice().forEach(child => child.destroy());\n this.children.length = 0;\n\n each(this.plugins, plugin => plugin.destroy());\n delete this.plugins;\n\n this.parent.removeChild(this.container);\n delete this.parent[VIEWER_DATA];\n\n delete this.parent;\n delete this.container;\n\n delete this.loader;\n delete this.navbar;\n delete this.panel;\n delete this.tooltip;\n delete this.notification;\n delete this.overlay;\n\n delete this.config;\n }\n\n /**\n * @summary Refresh UI\n * @package\n */\n refreshUi(reason) {\n if (!this.prop.ready) {\n return;\n }\n\n if (!this.prop.uiRefresh) {\n // console.log(`PhotoSphereViewer: UI Refresh, ${reason}`);\n\n this.prop.uiRefresh = true;\n\n this.children.every((child) => {\n child.refreshUi();\n return this.prop.uiRefresh === true;\n });\n\n this.prop.uiRefresh = false;\n }\n else if (this.prop.uiRefresh !== 'new') {\n this.prop.uiRefresh = 'new';\n\n // wait for current refresh to cancel\n setTimeout(() => {\n this.prop.uiRefresh = false;\n this.refreshUi(reason);\n });\n }\n }\n\n /**\n * @summary Returns the instance of a plugin if it exists\n * @param {Class|string} pluginId\n * @returns {PSV.plugins.AbstractPlugin}\n */\n getPlugin(pluginId) {\n if (typeof pluginId === 'string') {\n return this.plugins[pluginId];\n }\n else {\n const pluginCtor = pluginInterop(pluginId, AbstractPlugin);\n return pluginCtor ? this.plugins[pluginCtor.id] : undefined;\n }\n }\n\n /**\n * @summary Returns the current position of the camera\n * @returns {PSV.Position}\n */\n getPosition() {\n return this.dataHelper.cleanPosition(this.dynamics.position.current);\n }\n\n /**\n * @summary Returns the current zoom level\n * @returns {number}\n */\n getZoomLevel() {\n return this.dynamics.zoom.current;\n }\n\n /**\n * @summary Returns the current viewer size\n * @returns {PSV.Size}\n */\n getSize() {\n return { ...this.prop.size };\n }\n\n /**\n * @summary Checks if the automatic rotation is enabled\n * @returns {boolean}\n */\n isAutorotateEnabled() {\n return this.prop.autorotateEnabled;\n }\n\n /**\n * @summary Checks if the viewer is in fullscreen\n * @returns {boolean}\n */\n isFullscreenEnabled() {\n if (SYSTEM.fullscreenEvent) {\n return isFullscreenEnabled(this.container);\n }\n else {\n return this.prop.fullscreen;\n }\n }\n\n /**\n * @summary Flags the view has changed for the next render\n */\n needsUpdate() {\n this.prop.needsUpdate = true;\n }\n\n /**\n * @summary Resizes the canvas when the window is resized\n * @fires PSV.size-updated\n */\n autoSize() {\n if (this.container.clientWidth !== this.prop.size.width || this.container.clientHeight !== this.prop.size.height) {\n this.prop.size.width = Math.round(this.container.clientWidth);\n this.prop.size.height = Math.round(this.container.clientHeight);\n this.prop.aspect = this.prop.size.width / this.prop.size.height;\n this.prop.hFov = this.dataHelper.vFovToHFov(this.prop.vFov);\n\n this.trigger(EVENTS.SIZE_UPDATED, this.getSize());\n this.__resizeRefresh();\n }\n }\n\n /**\n * @summary Loads a new panorama file\n * @description Loads a new panorama file, optionally changing the camera position/zoom and activating the transition animation.
\n * If the \"options\" parameter is not defined, the camera will not move and the ongoing animation will continue.
\n * If another loading is already in progress it will be aborted.\n * @param {*} path - URL of the new panorama file\n * @param {PSV.PanoramaOptions} [options]\n * @returns {Promise} resolves false if the loading was aborted by another call\n */\n setPanorama(path, options = {}) {\n this.textureLoader.abortLoading();\n this.prop.transitionAnimation?.cancel();\n\n // apply default parameters on first load\n if (!this.prop.ready) {\n if (!('sphereCorrection' in options)) {\n options.sphereCorrection = this.config.sphereCorrection;\n }\n if (!('panoData' in options)) {\n options.panoData = this.config.panoData;\n }\n }\n\n if (options.transition === undefined || options.transition === true) {\n options.transition = DEFAULT_TRANSITION;\n }\n if (options.showLoader === undefined) {\n options.showLoader = true;\n }\n if (options.caption === undefined) {\n options.caption = this.config.caption;\n }\n if (options.description === undefined) {\n options.description = this.config.description;\n }\n\n const positionProvided = isExtendedPosition(options);\n const zoomProvided = 'zoom' in options;\n\n if (positionProvided || zoomProvided) {\n this.__stopAll();\n }\n\n this.hideError();\n\n this.config.panorama = path;\n this.config.caption = options.caption;\n this.config.description = options.description;\n\n const done = (err) => {\n this.loader.hide();\n\n this.prop.loadingPromise = null;\n\n if (isAbortError(err)) {\n return false;\n }\n else if (err) {\n this.navbar.setCaption('');\n this.showError(this.config.lang.loadError);\n console.error(err);\n throw err;\n }\n else {\n this.navbar.setCaption(this.config.caption);\n return true;\n }\n };\n\n this.navbar.setCaption(`${this.config.loadingTxt || ''}`);\n if (options.showLoader || !this.prop.ready) {\n this.loader.show();\n }\n\n const loadingPromise = this.adapter.loadTexture(this.config.panorama, options.panoData)\n .then((textureData) => {\n // check if another panorama was requested\n if (textureData.panorama !== this.config.panorama) {\n this.adapter.disposeTexture(textureData);\n throw getAbortError();\n }\n return textureData;\n });\n\n if (!options.transition || !this.prop.ready || !this.adapter.supportsTransition(this.config.panorama)) {\n this.prop.loadingPromise = loadingPromise\n .then((textureData) => {\n this.renderer.show();\n this.renderer.setTexture(textureData);\n this.renderer.setPanoramaPose(textureData.panoData);\n this.renderer.setSphereCorrection(options.sphereCorrection);\n\n if (zoomProvided) {\n this.zoom(options.zoom);\n }\n if (positionProvided) {\n this.rotate(options);\n }\n })\n .then(done, done);\n }\n else {\n this.prop.loadingPromise = loadingPromise\n .then((textureData) => {\n this.loader.hide();\n\n this.prop.transitionAnimation = this.renderer.transition(textureData, options);\n return this.prop.transitionAnimation\n .then((completed) => {\n this.prop.transitionAnimation = null;\n if (!completed) {\n throw getAbortError();\n }\n });\n })\n .then(done, done);\n }\n\n return this.prop.loadingPromise;\n }\n\n /**\n * @summary Update options\n * @param {PSV.Options} options\n * @fires PSV.config-changed\n * @throws {PSV.PSVError} when the configuration is incorrect\n */\n setOptions(options) {\n each(options, (value, key) => {\n if (DEPRECATED_OPTIONS[key]) {\n logWarn(DEPRECATED_OPTIONS[key]);\n return;\n }\n\n if (!Object.prototype.hasOwnProperty.call(DEFAULTS, key)) {\n throw new PSVError(`Unknown option ${key}`);\n }\n\n if (READONLY_OPTIONS[key]) {\n throw new PSVError(READONLY_OPTIONS[key]);\n }\n\n if (CONFIG_PARSERS[key]) {\n this.config[key] = CONFIG_PARSERS[key](value, options);\n }\n else {\n this.config[key] = value;\n }\n\n switch (key) {\n case 'caption':\n case 'description':\n this.navbar.setCaption(this.config.caption);\n break;\n\n case 'size':\n this.resize(value);\n break;\n\n case 'sphereCorrection':\n this.renderer.setSphereCorrection(value);\n break;\n\n case 'navbar':\n case 'lang':\n this.navbar.setButtons(this.config.navbar);\n break;\n\n case 'moveSpeed':\n case 'zoomSpeed':\n this.__updateSpeeds();\n break;\n\n case 'minFov':\n case 'maxFov':\n this.dynamics.zoom.setValue(this.dataHelper.fovToZoomLevel(this.prop.vFov));\n this.trigger(EVENTS.ZOOM_UPDATED, this.getZoomLevel());\n break;\n\n case 'canvasBackground':\n this.renderer.canvasContainer.style.background = this.config.canvasBackground;\n break;\n\n default:\n break;\n }\n });\n\n this.needsUpdate();\n this.refreshUi('set options');\n\n this.trigger(EVENTS.CONFIG_CHANGED, Object.keys(options));\n }\n\n /**\n * @summary Update options\n * @param {string} option\n * @param {any} value\n * @fires PSV.config-changed\n * @throws {PSV.PSVError} when the configuration is incorrect\n */\n setOption(option, value) {\n this.setOptions({ [option]: value });\n }\n\n /**\n * @summary Starts the automatic rotation\n * @fires PSV.autorotate\n */\n startAutorotate(refresh = false) {\n if (refresh && !this.isAutorotateEnabled()) {\n return;\n }\n\n if (!refresh) {\n this.__stopAll();\n }\n\n this.dynamics.position.roll({\n longitude: this.config.autorotateSpeed < 0,\n }, Math.abs(this.config.autorotateSpeed / this.config.moveSpeed));\n\n this.dynamics.position.goto({\n latitude: this.config.autorotateLat,\n }, Math.abs(this.config.autorotateSpeed / this.config.moveSpeed));\n\n this.prop.autorotateEnabled = true;\n\n if (!refresh) {\n this.trigger(EVENTS.AUTOROTATE, true);\n }\n }\n\n /**\n * @summary Stops the automatic rotation\n * @fires PSV.autorotate\n */\n stopAutorotate() {\n if (this.prop.startTimeout) {\n clearTimeout(this.prop.startTimeout);\n this.prop.startTimeout = null;\n }\n\n if (this.isAutorotateEnabled()) {\n this.dynamics.position.stop();\n\n this.prop.autorotateEnabled = false;\n\n this.trigger(EVENTS.AUTOROTATE, false);\n }\n }\n\n /**\n * @summary Starts or stops the automatic rotation\n * @fires PSV.autorotate\n */\n toggleAutorotate() {\n if (this.isAutorotateEnabled()) {\n this.stopAutorotate();\n }\n else {\n this.startAutorotate();\n }\n }\n\n /**\n * @summary Displays an error message over the viewer\n * @param {string} message\n */\n showError(message) {\n this.overlay.show({\n id : IDS.ERROR,\n image : errorIcon,\n text : message,\n dissmisable: false,\n });\n }\n\n /**\n * @summary Hides the error message\n */\n hideError() {\n this.overlay.hide(IDS.ERROR);\n }\n\n /**\n * @summary Rotates the view to specific longitude and latitude\n * @param {PSV.ExtendedPosition} position\n * @fires PSV.before-rotate\n * @fires PSV.position-updated\n */\n rotate(position) {\n const e = this.trigger(EVENTS.BEFORE_ROTATE, position);\n if (e.isDefaultPrevented()) {\n return;\n }\n\n const cleanPosition = this.change(CHANGE_EVENTS.GET_ROTATE_POSITION, this.dataHelper.cleanPosition(position));\n this.dynamics.position.setValue(cleanPosition);\n }\n\n /**\n * @summary Rotates and zooms the view with a smooth animation\n * @param {PSV.AnimateOptions} options - position and/or zoom level\n * @returns {PSV.Animation}\n */\n animate(options) {\n this.__stopAll();\n\n const positionProvided = isExtendedPosition(options);\n const zoomProvided = 'zoom' in options;\n\n const animProperties = {};\n let duration;\n\n // clean/filter position and compute duration\n if (positionProvided) {\n const cleanPosition = this.change(CHANGE_EVENTS.GET_ANIMATE_POSITION, this.dataHelper.cleanPosition(options));\n const currentPosition = this.getPosition();\n\n // longitude offset for shortest arc\n const tOffset = getShortestArc(currentPosition.longitude, cleanPosition.longitude);\n\n animProperties.longitude = { start: currentPosition.longitude, end: currentPosition.longitude + tOffset };\n animProperties.latitude = { start: currentPosition.latitude, end: cleanPosition.latitude };\n\n duration = this.dataHelper.speedToDuration(options.speed, getAngle(currentPosition, cleanPosition));\n }\n\n // clean/filter zoom and compute duration\n if (zoomProvided) {\n const dZoom = Math.abs(options.zoom - this.getZoomLevel());\n\n animProperties.zoom = { start: this.getZoomLevel(), end: options.zoom };\n\n if (!duration) {\n // if animating zoom only and a speed is given, use an arbitrary PI/4 to compute the duration\n duration = this.dataHelper.speedToDuration(options.speed, Math.PI / 4 * dZoom / 100);\n }\n }\n\n // if no animation needed\n if (!duration) {\n if (positionProvided) {\n this.rotate(options);\n }\n if (zoomProvided) {\n this.zoom(options.zoom);\n }\n\n return new Animation();\n }\n\n this.prop.animationPromise = new Animation({\n properties: animProperties,\n duration : duration,\n easing : 'inOutSine',\n onTick : (properties) => {\n if (positionProvided) {\n this.rotate(properties);\n }\n if (zoomProvided) {\n this.zoom(properties.zoom);\n }\n },\n });\n\n return this.prop.animationPromise;\n }\n\n /**\n * @summary Stops the ongoing animation\n * @description The return value is a Promise because the is no guaranty the animation can be stopped synchronously.\n * @returns {Promise} Resolved when the animation has ben cancelled\n */\n stopAnimation() {\n if (this.prop.animationPromise) {\n return new Promise((resolve) => {\n this.prop.animationPromise.then(resolve);\n this.prop.animationPromise.cancel();\n this.prop.animationPromise = null;\n });\n }\n else {\n return Promise.resolve();\n }\n }\n\n /**\n * @summary Zooms to a specific level between `max_fov` and `min_fov`\n * @param {number} level - new zoom level from 0 to 100\n * @fires PSV.zoom-updated\n */\n zoom(level) {\n this.dynamics.zoom.setValue(level);\n }\n\n /**\n * @summary Increases the zoom level\n * @param {number} [step=1]\n */\n zoomIn(step = 1) {\n this.dynamics.zoom.step(step);\n }\n\n /**\n * @summary Decreases the zoom level\n * @param {number} [step=1]\n */\n zoomOut(step = 1) {\n this.dynamics.zoom.step(-step);\n }\n\n /**\n * @summary Resizes the viewer\n * @param {PSV.CssSize} size\n */\n resize(size) {\n ['width', 'height'].forEach((dim) => {\n if (size && size[dim]) {\n if (/^[0-9.]+$/.test(size[dim])) {\n size[dim] += 'px';\n }\n this.parent.style[dim] = size[dim];\n }\n });\n\n this.autoSize();\n }\n\n /**\n * @summary Enters the fullscreen mode\n * @fires PSV.fullscreen-updated\n */\n enterFullscreen() {\n if (SYSTEM.fullscreenEvent) {\n requestFullscreen(this.container);\n }\n else {\n this.container.classList.add('psv-container--fullscreen');\n this.autoSize();\n this.eventsHandler.__fullscreenToggled(true);\n }\n }\n\n /**\n * @summary Exits the fullscreen mode\n * @fires PSV.fullscreen-updated\n */\n exitFullscreen() {\n if (this.isFullscreenEnabled()) {\n if (SYSTEM.fullscreenEvent) {\n exitFullscreen();\n }\n else {\n this.container.classList.remove('psv-container--fullscreen');\n this.autoSize();\n this.eventsHandler.__fullscreenToggled(false);\n }\n }\n }\n\n /**\n * @summary Enters or exits the fullscreen mode\n * @fires PSV.fullscreen-updated\n */\n toggleFullscreen() {\n if (!this.isFullscreenEnabled()) {\n this.enterFullscreen();\n }\n else {\n this.exitFullscreen();\n }\n }\n\n /**\n * @summary Enables the keyboard controls (done automatically when entering fullscreen)\n */\n startKeyboardControl() {\n this.eventsHandler.enableKeyboard();\n }\n\n /**\n * @summary Disables the keyboard controls (done automatically when exiting fullscreen)\n */\n stopKeyboardControl() {\n this.eventsHandler.disableKeyboard();\n }\n\n /**\n * @summary Subscribes to events on objects in the scene\n * @param {string} userDataKey - only objects with the following `userData` will be emitted\n * @param {EventListener} listener - must implement `handleEvent\n * @return {function} call to stop the subscription\n * @package\n */\n observeObjects(userDataKey, listener) {\n this.prop.objectsObservers[userDataKey] = { listener };\n\n return () => {\n delete this.prop.objectsObservers[userDataKey];\n };\n }\n\n /**\n * @summary Stops all current animations\n * @package\n */\n __stopAll() {\n this.stopAutorotate();\n this.stopAnimation();\n\n this.trigger(EVENTS.STOP_ALL);\n }\n\n /**\n * @summary Recomputes dynamics speeds\n * @private\n */\n __updateSpeeds() {\n this.dynamics.zoom.setSpeed(this.config.zoomSpeed * 50);\n this.dynamics.position.setSpeed(THREE.Math.degToRad(this.config.moveSpeed * 50));\n }\n\n}\n"],"names":["PSVError","message","Error","captureStackTrace","stack","prototype","Object","create","name","constructor","AbstractAdapter","psv","destroy","supportsTransition","panorama","supportsPreload","loadTexture","newPanoData","createMesh","scale","setTexture","mesh","textureData","transition","setTextureOpacity","opacity","disposeTexture","id","supportsDownload","DEFAULT_TRANSITION","MOVE_THRESHOLD","DBLCLICK_DELAY","LONGTOUCH_DELAY","TWOFINGERSOVERLAY_DELAY","CTRLZOOM_TIMEOUT","INERTIA_WINDOW","SPHERE_RADIUS","VIEWER_DATA","MESH_USER_DATA","ACTIONS","ROTATE_LAT_UP","ROTATE_LAT_DOWN","ROTATE_LONG_RIGHT","ROTATE_LONG_LEFT","ZOOM_IN","ZOOM_OUT","TOGGLE_AUTOROTATE","EVENTS","AUTOROTATE","BEFORE_RENDER","BEFORE_ROTATE","CLICK","CLOSE_PANEL","CONFIG_CHANGED","DOUBLE_CLICK","FULLSCREEN_UPDATED","HIDE_NOTIFICATION","HIDE_OVERLAY","HIDE_TOOLTIP","KEY_PRESS","LOAD_PROGRESS","OPEN_PANEL","PANORAMA_LOADED","POSITION_UPDATED","READY","RENDER","SHOW_NOTIFICATION","SHOW_OVERLAY","SHOW_TOOLTIP","SIZE_UPDATED","STOP_ALL","ZOOM_UPDATED","CHANGE_EVENTS","GET_ANIMATE_POSITION","GET_ROTATE_POSITION","OBJECT_EVENTS","ENTER_OBJECT","HOVER_OBJECT","LEAVE_OBJECT","IDS","MENU","TWO_FINGERS","CTRL_ZOOM","ERROR","DESCRIPTION","EASINGS","linear","t","inQuad","outQuad","inOutQuad","inCubic","outCubic","inOutCubic","inQuart","outQuart","inOutQuart","inQuint","outQuint","inOutQuint","inSine","Math","cos","PI","outSine","sin","inOutSine","inExpo","pow","outExpo","inOutExpo","inCirc","sqrt","outCirc","inOutCirc","KEY_CODES","Enter","Control","Escape","Space","PageUp","PageDown","ArrowLeft","ArrowUp","ArrowRight","ArrowDown","Delete","Plus","Minus","LOCALSTORAGE_TOUCH_SUPPORT","SYSTEM","loaded","pixelRatio","isWebGLSupported","isTouchEnabled","maxTextureWidth","mouseWheelEvent","fullscreenEvent","load","ctx","getWebGLCtx","window","devicePixelRatio","getMaxTextureWidth","getMouseWheelEvent","getFullscreenEvent","maxCanvasWidth","getMaxCanvasWidth","canvas","document","createElement","names","context","getContext","some","e","initial","navigator","maxTouchPoints","localStorage","promise","Promise","resolve","clear","listenerMouse","listenerTouch","listenerTimeout","removeEventListener","addEventListener","setTimeout","getParameter","MAX_TEXTURE_SIZE","maxWidth","width","height","fillStyle","fillRect","getImageData","data","onmousewheel","undefined","FULLSCREEN_EVT_MAP","exitFullscreen","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","validExits","keys","filter","exit","length","toggleClass","element","className","active","classList","toggle","contains","add","remove","addClasses","split","forEach","removeClasses","hasParent","el","parent","test","parentNode","getClosest","selector","matches","SVGElement","parentElement","getPosition","left","top","offsetLeft","scrollLeft","clientLeft","offsetTop","scrollTop","clientTop","offsetParent","isFullscreenEnabled","elt","fullscreenElement","webkitFullscreenElement","requestFullscreen","webkitRequestFullscreen","call","getStyle","prop","getComputedStyle","normalizeWheel","event","PIXEL_STEP","LINE_HEIGHT","PAGE_HEIGHT","spinX","spinY","pixelX","pixelY","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","bound","x","min","max","loop","value","result","isInteger","Number","isFinite","floor","isPowerOfTwo","log","sum","array","reduce","a","b","distance","p1","p2","y","getShortestArc","from","to","tCandidates","candidate","newCandidate","abs","Infinity","getAngle","position1","position2","acos","latitude","longitude","greatArcDistance","λ1","φ1","λ2","φ2","dasherize","str","replace","s","i","toLowerCase","throttle","func","wait","self","args","timeout","previous","later","Date","now","apply","remaining","arguments","clearTimeout","isPlainObject","obj","getPrototypeOf","proto","toString","deepmerge","target","src","first","merge","Array","isArray","key","clone","isEmpty","each","object","callback","isNil","val","firstNonNull","values","pluginInterop","plugin","entries","p","getAbortError","error","isAbortError","err","logWarn","console","warn","isExtendedPosition","key1","key2","getXMPValue","attr","match","parseInt","isNaN","CSS_POSITIONS","bottom","right","center","parsePosition","tokens","toLocaleLowerCase","slice","xFirst","map","token","reverse","parsed","join","parseFloat","LEFT_MAP","TOP_MAP","cleanPosition","defaultValue","allowCenter","tempPos","parseSpeed","speed","speedStr","trim","speedValue","speedUnit","THREE","degToRad","parseAngle","angle","zeroCenter","halfCircle","unit","createTexture","img","texture","Texture","needsUpdate","minFilter","LinearFilter","generateMipmaps","quaternion","Quaternion","applyEulerInverse","vector","euler","setFromEuler","invert","applyQuaternion","Animation","options","__callbacks","easing","__start","delay","__delayTimeout","__animationFrame","requestAnimationFrame","__run","__resolved","timestamp","progress","duration","current","properties","start","end","onTick","__resolve","cb","then","onFulfilled","onRejected","__cancelled","push","cancel","cancelAnimationFrame","catch","finally","onFinally","Dynamic","fn","loopValue","mode","STOP","speedMult","currentSpeed","setSpeed","goto","position","POSITION","step","roll","INFINITE","stop","setValue","update","elapsed","dstStop","targetSpeed","next","MultiDynamic","dynamics","d","positions","steps","rolls","hasUpdates","dynamic","Slider","container","direction","onUpdate","mousedown","mouseover","handleEvent","type","stopPropagation","__onMouseDown","__onMouseEnter","__onMouseLeave","__onTouchStart","__onMouseMove","__onTouchMove","__onMouseUp","__onTouchEnd","evt","__update","changedTouches","moving","boundingClientRect","getBoundingClientRect","cursor","vertical","pos","size","click","VERTICAL","EventEmitter","HORIZONTAL","EquirectangularAdapter","config","resolution","SPHERE_SEGMENTS","SPHERE_HORIZONTAL_SEGMENTS","reject","useXmpData","textureLoader","loadImage","loader","setProgress","xmpPanoData","__loadXMP","panoData","fullWidth","fullHeight","croppedWidth","croppedHeight","croppedX","croppedY","poseHeading","posePitch","poseRoll","__createEquirectangularTexture","onProgress","loadFile","blob","__loadBlobAsString","binary","indexOf","substring","includes","reader","FileReader","onload","onerror","readAsText","ratio","resizedPanoData","buffer","drawImage","geometry","SphereGeometry","material","MeshBasicMaterial","Mesh","dispose","transparent","AbstractComponent","children","visible","appendChild","removeChild","childIdx","splice","child","refreshUi","every","uiRefresh","isVisible","hide","show","style","display","AbstractButton","navbar","collapsable","tabbable","enabled","supported","collapsed","offsetWidth","icon","__setIcon","lang","title","tabIndex","onClick","checkSupported","supportedOrObject","isSupported","toggleActive","iconActive","refresh","disable","enable","collapse","uncollapse","innerHTML","querySelector","groupId","AutorotateButton","on","off","toggleAutorotate","play","playActive","CustomButton","random","substr","content","NavbarCaption","caption","contentWidth","setCaption","html","availableWidth","__refreshButton","getButton","DescriptionButton","MODE_NOTIF","MODE_PANEL","closed","__close","captionHidden","hasDescription","description","__open","notification","panel","info","DownloadButton","link","href","downloadUrl","download","pop","adapter","FullscreenButton","toggleFullscreen","fullscreenIn","fullscreenOut","MenuButton","__hideMenu","__showMenu","MENU_TEMPLATE","BUTTON_DATA","noMargin","clickHandler","li","buttonId","dataset","menuIcon","buttons","dataKey","menu","button","PressHandler","time","down","getTime","up","getOrientedArrow","arrow","AbstractMoveButton","move","handler","__stopAll","MoveDownButton","MoveLeftButton","MoveRightButton","MoveUpButton","AbstractZoomButton","zoom","ZoomInButton","zoomIn","ZoomOutButton","zoomOut","ZoomRangeButton","mediaMinWidth","zoomRange","zoomValue","slider","__onSliderUpdate","ready","__moveZoomValue","getZoomLevel","once","level","AbstractPlugin","init","DEFAULTS","plugins","loadingImg","loadingTxt","fisheye","minFov","maxFov","defaultZoomLvl","defaultLong","defaultLat","sphereCorrection","moveSpeed","zoomSpeed","autorotateDelay","autorotateSpeed","autorotateLat","moveInertia","mousewheel","mousemove","captureCursor","mousewheelCtrlKey","touchmoveTwoFingers","requestHeaders","canvasBackground","withCredentials","autorotate","fullscreen","twoFingers","ctrlZoom","loadError","keyboard","READONLY_OPTIONS","DEPRECATED_OPTIONS","zoomButtonIncrement","mousewheelSpeed","sphereCorrectionReorder","CONFIG_PARSERS","getConfig","tempConfig","hasOwnProperty","AVAILABLE_BUTTONS","AVAILABLE_GROUPS","registerButton","defaultPosition","unshift","Navbar","setButtons","item","cleanedButtons","__cleanButtons","buttonCtor","warnNotFound","totalWidth","visibleButtons","collapsableButtons","Loader","clientWidth","tickness","lastChild","inner","round","maxHeight","clearRect","lineWidth","strokeStyle","beginPath","arc","stroke","trigger","Notification","contentId","Overlay","dissmisable","image","text","subtext","preventDefault","PANEL_MIN_WIDTH","Panel","mouseX","mouseY","keyHandler","resizer","closeBtn","wasVisible","focus","__startResize","__resize","touches","clientX","clientY","AbstractService","vector2","Vector2","vector3","Vector3","eulerZero","Euler","DataHelper","fovToZoomLevel","fov","temp","zoomLevelToFov","vFovToHFov","vFov","radToDeg","atan","tan","aspect","speedToDuration","textureCoordsToSphericalCoords","point","relativeX","relativeY","equals","renderer","rotation","meshContainer","sphericalCoordsToVector3","applyEuler","vector3ToSphericalCoords","sphericalCoordsToTextureCoords","relativeLong","relativeLat","z","phi","theta","atan2","viewerCoordsToVector3","viewerPoint","sphereIntersect","getIntersections","userData","vector3ToViewerCoords","vectorClone","project","camera","sphericalCoordsToViewerCoords","raycaster","setFromCamera","intersectObjects","scene","cleanSphereCorrection","pan","tilt","cleanPanoramaPose","EventsHandler","state","moveThreshold","keyboardEnabled","zooming","startMouseX","startMouseY","mouseHistory","pinchDist","ctrlKeyDown","dblclickData","dblclickTimeout","longtouchTimeout","twofingersTimeout","ctrlZoomTimeout","__onResize","autoSize","__onKeyDown","__onKeyUp","__fullscreenToggled","__onMouseWheel","enableKeyboard","disableKeyboard","overlay","e2","isDefaultPrevented","__startMove","__stopMove","__move","__moveAbsolute","objectsObservers","viewerPos","intersections","dataHelper","emit","observer","listener","CustomEvent","originalEvent","intersection","find","__click","__cancelLongTouch","__cancelTwoFingersOverlay","__startMoveZoom","__stopMoveZoom","gestureIcon","__moveZoom","mousewheelIcon","delta","force","startKeyboardControl","stopKeyboardControl","stopAutorotate","stopAnimation","__logMouseMove","__stopMoveInertia","norm","animationPromise","longtouch","boundingRect","rightclick","viewerX","viewerY","sphereIntersection","psvSphere","sphericalCoords","objects","o","textureCoords","textureX","textureY","NaN","hFov","currentPosition","rotate","containerRect","Renderer","WebGLRenderer","alpha","antialias","setPixelRatio","domElement","Scene","PerspectiveCamera","Group","Raycaster","canvasContainer","background","setAnimationLoop","__cleanTHREEScene","__onSizeUpdated","__onZoomUpdated","__onPositionUpdated","setSize","updateProjectionMatrix","set","lookAt","copy","multiplyScalar","negate","__renderLoop","render","setPanoramaPose","cleanCorrection","setSphereCorrection","positionProvided","zoomProvided","group","verticalAxis","rotateOnWorldAxis","horizontalAxis","cross","getWorldDirection","normalize","animation","completed","traverse","TextureLoader","FileLoader","setResponseType","setWithCredentials","setRequestHeader","abortLoading","url","lengthComputable","newProgress","total","createElementNS","URL","revokeObjectURL","createObjectURL","preloadPanorama","STATE","NONE","SHOWING","HIDING","Tooltip","__onTransitionEnd","rect","posClass","arrowTop","arrowLeft","__computeTooltipPosition","offset","newPos","propertyName","topBottom","box","TooltipRenderer","testTooltip","tooltip","Cache","Viewer","autorotateEnabled","loadingPromise","startTimeout","getElementById","eventsHandler","__updateSpeeds","__resizeRefresh","resize","opts","setPanorama","startAutorotate","reason","getPlugin","pluginId","pluginCtor","getSize","isAutorotateEnabled","clientHeight","path","transitionAnimation","showLoader","hideError","done","showError","setOptions","setOption","option","errorIcon","change","animate","animProperties","tOffset","dZoom","dim","enterFullscreen","observeObjects","userDataKey"],"mappings":"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"}