{"version":3,"sources":["src/index.ts","src/GyroscopeButton.ts","src/compass.svg","src/events.ts","src/GyroscopePlugin.ts","src/DeviceOrientationControls.js"],"sourcesContent":["import { DEFAULTS, registerButton } from '@photo-sphere-viewer/core';\nimport { GyroscopeButton } from './GyroscopeButton';\nimport * as events from './events';\n\nDEFAULTS.lang[GyroscopeButton.id] = 'Gyroscope';\nregisterButton(GyroscopeButton, 'caption:right');\n\nexport { GyroscopePlugin } from './GyroscopePlugin';\nexport * from './model';\nexport { events };\n","import type { Navbar } from '@photo-sphere-viewer/core';\nimport { AbstractButton } from '@photo-sphere-viewer/core';\nimport compass from './compass.svg';\nimport { GyroscopeUpdatedEvent } from './events';\nimport type { GyroscopePlugin } from './GyroscopePlugin';\n\nexport class GyroscopeButton extends AbstractButton {\n    static override readonly id = 'gyroscope';\n\n    private readonly plugin: GyroscopePlugin;\n\n    /**\n     * @param {PSV.components.Navbar} navbar\n     */\n    constructor(navbar: Navbar) {\n        super(navbar, {\n            className: 'psv-gyroscope-button',\n            icon: compass,\n            hoverScale: true,\n            collapsable: true,\n            tabbable: true,\n        });\n\n        this.plugin = this.viewer.getPlugin('gyroscope');\n\n        if (this.plugin) {\n            this.plugin.addEventListener(GyroscopeUpdatedEvent.type, this);\n        }\n    }\n\n    override destroy() {\n        if (this.plugin) {\n            this.plugin.removeEventListener(GyroscopeUpdatedEvent.type, this);\n        }\n\n        super.destroy();\n    }\n\n    override isSupported() {\n        return !this.plugin ? false : { initial: false, promise: this.plugin.isSupported() };\n    }\n\n    /**\n     * @internal\n     */\n    handleEvent(e: Event) {\n        if (e instanceof GyroscopeUpdatedEvent) {\n            this.toggleActive(e.gyroscopeEnabled);\n        }\n    }\n\n    /**\n     * Toggles gyroscope control\n     */\n    onClick() {\n        this.plugin.toggle();\n    }\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"currentColor\" d=\"M50 0a50 50 0 1 0 0 100A50 50 0 0 0 50 0zm0 88.81a38.86 38.86 0 0 1-38.81-38.8 38.86 38.86 0 0 1 38.8-38.82A38.86 38.86 0 0 1 88.82 50 38.87 38.87 0 0 1 50 88.81z\"/><path fill=\"currentColor\" d=\"M72.07 25.9L40.25 41.06 27.92 74.12l31.82-15.18v-.01l12.32-33.03zM57.84 54.4L44.9 42.58l21.1-10.06-8.17 21.9z\"/><!--Created by iconoci from the Noun Project--></svg>","import { TypedEvent } from '@photo-sphere-viewer/core';\nimport type { GyroscopePlugin } from './GyroscopePlugin';\n\n/**\n * @event Triggered when the gyroscope control is enabled/disabled\n */\nexport class GyroscopeUpdatedEvent extends TypedEvent<GyroscopePlugin> {\n    static override readonly type = 'gyroscope-updated';\n    override type: 'gyroscope-updated';\n\n    /** @internal */\n    constructor(public readonly gyroscopeEnabled: boolean) {\n        super(GyroscopeUpdatedEvent.type);\n    }\n}\n\nexport type GyroscopePluginEvents = GyroscopeUpdatedEvent;\n","import type { PluginConstructor, Position, Viewer } from '@photo-sphere-viewer/core';\nimport { AbstractConfigurablePlugin, DEFAULTS, events, utils } from '@photo-sphere-viewer/core';\nimport { Object3D, Vector3 } from 'three';\nimport { DeviceOrientationControls } from './DeviceOrientationControls';\nimport { GyroscopePluginEvents, GyroscopeUpdatedEvent } from './events';\nimport { GyroscopePluginConfig, UpdatableGyroscopePluginConfig } from './model.js';\n\nconst getConfig = utils.getConfigParser<GyroscopePluginConfig>(\n    {\n        touchmove: true,\n        roll: true,\n        absolutePosition: false,\n        moveMode: 'smooth',\n    },\n    {\n        moveMode(moveMode, { defValue }) {\n            if (moveMode !== 'smooth' && moveMode !== 'fast') {\n                utils.logWarn(`GyroscopePlugin: invalid moveMode`);\n                return defValue;\n            } else {\n                return moveMode;\n            }\n        },\n    },\n);\n\nconst direction = new Vector3();\n\n/**\n * Adds gyroscope controls on mobile devices\n */\nexport class GyroscopePlugin extends AbstractConfigurablePlugin<\n    GyroscopePluginConfig,\n    GyroscopePluginConfig,\n    UpdatableGyroscopePluginConfig,\n    GyroscopePluginEvents\n> {\n    static override readonly id = 'gyroscope';\n    static override readonly VERSION = PKG_VERSION;\n    static override readonly configParser = getConfig;\n    static override readonly readonlyOptions: Array<keyof GyroscopePluginConfig> = ['absolutePosition'];\n\n    private readonly state = {\n        isSupported: this.__checkSupport(),\n        alphaOffset: 0,\n        enabled: false,\n        config_moveInertia: DEFAULTS.moveInertia,\n        moveMode: this.config.moveMode,\n    };\n\n    private controls: DeviceOrientationControls;\n\n    static withConfig(config: GyroscopePluginConfig): [PluginConstructor, any] {\n        return [GyroscopePlugin, config];\n    }\n\n    constructor(viewer: Viewer, config: GyroscopePluginConfig) {\n        super(viewer, config);\n    }\n\n    /**\n     * @internal\n     */\n    override init() {\n        super.init();\n\n        this.viewer.addEventListener(events.StopAllEvent.type, this);\n        this.viewer.addEventListener(events.BeforeRotateEvent.type, this);\n        this.viewer.addEventListener(events.BeforeRenderEvent.type, this);\n    }\n\n    /**\n     * @internal\n     */\n    override destroy() {\n        this.viewer.removeEventListener(events.StopAllEvent.type, this);\n        this.viewer.removeEventListener(events.BeforeRotateEvent.type, this);\n        this.viewer.removeEventListener(events.BeforeRenderEvent.type, this);\n\n        this.stop();\n\n        this.controls?.disconnect();\n        delete this.controls;\n\n        super.destroy();\n    }\n\n    /**\n     * @internal\n     */\n    handleEvent(e: Event) {\n        if (e instanceof events.StopAllEvent) {\n            this.stop();\n        } else if (e instanceof events.BeforeRenderEvent) {\n            this.__onBeforeRender();\n        } else if (e instanceof events.BeforeRotateEvent) {\n            this.__onBeforeRotate(e as events.BeforeRotateEvent);\n        }\n    }\n\n    /**\n     * Checks if the gyroscope is supported\n     */\n    isSupported(): Promise<boolean> {\n        return this.state.isSupported;\n    }\n\n    /**\n     * Checks if the gyroscope is enabled\n     */\n    isEnabled(): boolean {\n        return this.state.enabled;\n    }\n\n    /**\n     * Enables the gyroscope navigation if available\n     */\n    start(moveMode = this.config.moveMode): Promise<void> {\n        return this.state.isSupported\n            .then((supported) => {\n                if (supported) {\n                    return this.__requestPermission();\n                } else {\n                    utils.logWarn('gyroscope not available');\n                    return Promise.reject();\n                }\n            })\n            .then((granted) => {\n                if (granted) {\n                    return Promise.resolve();\n                } else {\n                    utils.logWarn('gyroscope not allowed');\n                    return Promise.reject();\n                }\n            })\n            .then(() => {\n                this.viewer.stopAll();\n\n                this.state.moveMode = moveMode;\n\n                // disable inertia\n                this.state.config_moveInertia = this.viewer.config.moveInertia;\n                this.viewer.config.moveInertia = 0;\n\n                // enable gyro controls\n                if (!this.controls) {\n                    this.controls = new DeviceOrientationControls(new Object3D(), this.config.absolutePosition);\n                }\n\n                // reset\n                this.controls.alphaOffset = 0;\n\n                this.state.alphaOffset = this.config.absolutePosition ? 0 : null;\n                this.state.enabled = true;\n\n                this.dispatchEvent(new GyroscopeUpdatedEvent(true));\n            });\n    }\n\n    /**\n     * Disables the gyroscope navigation\n     */\n    stop() {\n        if (this.isEnabled()) {\n            this.state.enabled = false;\n            this.viewer.config.moveInertia = this.state.config_moveInertia;\n\n            if (this.config.roll) {\n                this.viewer.dynamics.roll.goto(0, 30);\n            }\n\n            this.dispatchEvent(new GyroscopeUpdatedEvent(false));\n\n            this.viewer.resetIdleTimer();\n        }\n    }\n\n    /**\n     * Enables or disables the gyroscope navigation\n     */\n    toggle() {\n        if (this.isEnabled()) {\n            this.stop();\n        } else {\n            this.start();\n        }\n    }\n\n    /**\n     * Handles gyro movements\n     */\n    private __onBeforeRender() {\n        if (!this.isEnabled()) {\n            return;\n        }\n\n        if (!this.controls.deviceOrientation) {\n            return;\n        }\n\n        const position = this.viewer.getPosition();\n\n        // on first run compute the offset depending on the current viewer position and device orientation\n        if (this.state.alphaOffset === null) {\n            if (this.controls.update()) {\n                this.controls.object.getWorldDirection(direction);\n\n                const sphericalCoords = this.viewer.dataHelper.vector3ToSphericalCoords(direction);\n                this.state.alphaOffset = sphericalCoords.yaw - position.yaw;\n            }\n        } else {\n            this.controls.alphaOffset = this.state.alphaOffset;\n            if (this.controls.update()) {\n                this.controls.object.getWorldDirection(direction);\n\n                const sphericalCoords = this.viewer.dataHelper.vector3ToSphericalCoords(direction);\n\n                const target: Position = {\n                    yaw: sphericalCoords.yaw,\n                    pitch: -sphericalCoords.pitch,\n                };\n\n                // having a slow speed on smalls movements allows to absorb the device/hand vibrations\n                const step = this.state.moveMode === 'smooth' ? 3 : 10;\n                this.viewer.dynamics.position.goto(target, utils.getAngle(position, target) < 0.01 ? 1 : step);\n\n                if (this.config.roll) {\n                    this.viewer.dynamics.roll.goto(-this.controls.object.rotation.z, this.state.moveMode === 'smooth' ? 10 : 30);\n                }\n            }\n        }\n    }\n\n    /**\n     * Intercepts moves and offsets the alpha angle\n     */\n    private __onBeforeRotate(e: events.BeforeRotateEvent) {\n        if (this.isEnabled()) {\n            e.preventDefault();\n\n            if (this.config.touchmove) {\n                this.state.alphaOffset -= e.position.yaw - this.viewer.getPosition().pitch;\n            }\n        }\n    }\n\n    /**\n     * Detects if device orientation is supported\n     */\n    private __checkSupport(): Promise<boolean> {\n        if (\n            'DeviceOrientationEvent' in window\n            && typeof (DeviceOrientationEvent as any).requestPermission === 'function'\n        ) {\n            return Promise.resolve(true);\n        } else if ('DeviceOrientationEvent' in window) {\n            return new Promise((resolve) => {\n                const listener = (e: DeviceOrientationEvent) => {\n                    resolve(!!e && !utils.isNil(e.alpha) && !isNaN(e.alpha));\n\n                    window.removeEventListener('deviceorientation', listener);\n                };\n\n                window.addEventListener('deviceorientation', listener, false);\n                setTimeout(listener, 10000);\n            });\n        } else {\n            return Promise.resolve(false);\n        }\n    }\n\n    /**\n     * Request permission to the motion API\n     */\n    private __requestPermission(): Promise<boolean> {\n        if (typeof (DeviceOrientationEvent as any).requestPermission === 'function') {\n            return (DeviceOrientationEvent as any)\n                .requestPermission()\n                .then((response: string) => response === 'granted')\n                .catch(() => false);\n        } else {\n            return Promise.resolve(true);\n        }\n    }\n}\n","import { Euler, MathUtils, Quaternion, Vector3 } from 'three';\n\nconst _zee = new Vector3(0, 0, 1);\nconst _euler = new Euler();\nconst _q0 = new Quaternion();\nconst _q1 = new Quaternion(-Math.sqrt(0.5), 0, 0, Math.sqrt(0.5)); // - PI/2 around the x-axis\n\n/**\n * Copied from three.js examples before deletion in r134\n * (deleted because of constructors/OS inconsistencies)\n * @internal\n */\nexport class DeviceOrientationControls {\n    constructor(object, preferAbsolute) {\n        if (window.isSecureContext === false) {\n            console.error(\n                'THREE.DeviceOrientationControls: DeviceOrientationEvent is only available in secure contexts (https)',\n            );\n        }\n\n        const scope = this; // eslint-disable-line @typescript-eslint/no-this-alias\n\n        const EPS = 0.000001;\n        const lastQuaternion = new Quaternion();\n\n        let nonAbsoluteListener = false;\n\n        this.object = object;\n        this.object.rotation.reorder('YXZ');\n\n        this.enabled = true;\n\n        this.deviceOrientation = {};\n        this.screenOrientation = 0;\n\n        this.alphaOffset = 0; // radians\n\n        const onDeviceOrientationChangeEvent = function (event) {\n            scope.deviceOrientation = event;\n        };\n\n        const onDeviceOrientationAbsoluteChangeEvent = function (event) {\n            // if the 'deviceorientationabsolute' event is supported, automatically remove the 'deviceorientation' listener\n            if (nonAbsoluteListener) {\n                window.removeEventListener('deviceorientation', onDeviceOrientationChangeEvent);\n                nonAbsoluteListener = false;\n            }\n            scope.deviceOrientation = event;\n        };\n\n        const onScreenOrientationChangeEvent = function () {\n            scope.screenOrientation = window.orientation || 0;\n        };\n\n        // The angles alpha, beta and gamma form a set of intrinsic Tait-Bryan angles of type Z-X'-Y''\n\n        const setObjectQuaternion = function (quaternion, alpha, beta, gamma, orient) {\n            _euler.set(beta, alpha, -gamma, 'YXZ'); // 'ZXY' for the device, but 'YXZ' for us\n\n            quaternion.setFromEuler(_euler); // orient the device\n\n            quaternion.multiply(_q1); // camera looks out the back of the device, not the top\n\n            quaternion.multiply(_q0.setFromAxisAngle(_zee, -orient)); // adjust for screen orientation\n        };\n\n        this.connect = function () {\n            onScreenOrientationChangeEvent(); // run once on load\n\n            // iOS 13+\n\n            if (\n                window.DeviceOrientationEvent !== undefined\n                && typeof window.DeviceOrientationEvent.requestPermission === 'function'\n            ) {\n                window.DeviceOrientationEvent.requestPermission()\n                    .then(function (response) {\n                        if (response === 'granted') {\n                            window.addEventListener('orientationchange', onScreenOrientationChangeEvent);\n                            window.addEventListener('deviceorientation', onDeviceOrientationChangeEvent);\n                            if (preferAbsolute) {\n                                window.addEventListener('deviceorientationabsolute', onDeviceOrientationAbsoluteChangeEvent);\n                                nonAbsoluteListener = true;\n                            }\n                        }\n                    })\n                    .catch(function (error) {\n                        console.error('THREE.DeviceOrientationControls: Unable to use DeviceOrientation API:', error);\n                    });\n            } else {\n                window.addEventListener('orientationchange', onScreenOrientationChangeEvent);\n                window.addEventListener('deviceorientation', onDeviceOrientationChangeEvent);\n                if (preferAbsolute) {\n                    window.addEventListener('deviceorientationabsolute', onDeviceOrientationAbsoluteChangeEvent);\n                    nonAbsoluteListener = true;\n                }\n            }\n\n            scope.enabled = true;\n        };\n\n        this.disconnect = function () {\n            window.removeEventListener('orientationchange', onScreenOrientationChangeEvent);\n            window.removeEventListener('deviceorientation', onDeviceOrientationChangeEvent);\n            window.removeEventListener('deviceorientationabsolute', onDeviceOrientationAbsoluteChangeEvent);\n            nonAbsoluteListener = false;\n\n            scope.enabled = false;\n        };\n\n        this.update = function () {\n            if (scope.enabled === false) return false;\n\n            const device = scope.deviceOrientation;\n\n            if (device) {\n                if (!device.alpha && !device.beta && !device.gamma) {\n                    return false;\n                }\n\n                const alpha = device.alpha ? MathUtils.degToRad(device.alpha) + scope.alphaOffset : 0; // Z\n\n                const beta = device.beta ? MathUtils.degToRad(device.beta) : 0; // X'\n\n                const gamma = device.gamma ? MathUtils.degToRad(device.gamma) : 0; // Y''\n\n                const orient = scope.screenOrientation ? MathUtils.degToRad(scope.screenOrientation) : 0; // O\n\n                setObjectQuaternion(scope.object.quaternion, alpha, beta, gamma, orient);\n\n                if (8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {\n                    lastQuaternion.copy(scope.object.quaternion);\n                }\n\n                return true;\n            }\n\n            return false;\n        };\n\n        this.dispose = function () {\n            scope.disconnect();\n        };\n\n        this.connect();\n    }\n}\n"],"mappings":"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","names":["import_core","import_core","import_core","import_three"]}