{"version":3,"sources":["src/index.ts","src/events.ts","src/StereoButton.ts","src/icons/stereo.svg","src/StereoPlugin.ts","../node_modules/three/examples/jsm/effects/StereoEffect.js","src/icons/mobile-rotate.svg","src/utils.ts"],"sourcesContent":["import { DEFAULTS, registerButton } from '@photo-sphere-viewer/core';\nimport * as events from './events';\nimport { StereoButton } from './StereoButton';\n\nDEFAULTS.lang[StereoButton.id] = 'Stereo view';\nregisterButton(StereoButton, 'caption:right');\n\nDEFAULTS.lang.stereoNotification = 'Tap anywhere to exit stereo view.';\nDEFAULTS.lang.pleaseRotate = 'Please rotate your device';\nDEFAULTS.lang.tapToContinue = '(or tap to continue)';\n\nexport { StereoPlugin } from './StereoPlugin';\nexport { events };\n","import { TypedEvent } from '@photo-sphere-viewer/core';\nimport type { StereoPlugin } from './StereoPlugin';\n\n/**\n * @event Triggered when the stereo view is enabled/disabled\n */\nexport class StereoUpdatedEvent extends TypedEvent<StereoPlugin> {\n    static override readonly type = 'stereo-updated';\n    override type: 'stereo-updated';\n\n    /** @internal */\n    constructor(public readonly stereoEnabled: boolean) {\n        super(StereoUpdatedEvent.type);\n    }\n}\n\nexport type StereoPluginEvents = StereoUpdatedEvent;\n","import type { Navbar } from '@photo-sphere-viewer/core';\nimport { AbstractButton } from '@photo-sphere-viewer/core';\nimport { StereoUpdatedEvent } from './events';\nimport stereo from './icons/stereo.svg';\nimport type { StereoPlugin } from './StereoPlugin';\n\nexport class StereoButton extends AbstractButton {\n    static override readonly id = 'stereo';\n\n    private readonly plugin: StereoPlugin;\n\n    constructor(navbar: Navbar) {\n        super(navbar, {\n            className: 'psv-stereo-button',\n            icon: stereo,\n            hoverScale: true,\n            collapsable: true,\n            tabbable: true,\n        });\n\n        this.plugin = this.viewer.getPlugin('stereo');\n\n        if (this.plugin) {\n            this.plugin.addEventListener(StereoUpdatedEvent.type, this);\n        }\n    }\n\n    override destroy() {\n        if (this.plugin) {\n            this.plugin.removeEventListener(StereoUpdatedEvent.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    handleEvent(e: Event) {\n        if (e instanceof StereoUpdatedEvent) {\n            this.toggleActive(e.stereoEnabled);\n        }\n    }\n\n    /**\n     * Toggles stereo control\n     */\n    onClick() {\n        this.plugin.toggle();\n    }\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -2 16 16\"><path fill=\"currentColor\" d=\"M13.104 0H2.896C2.332 0 1 .392 1 .875h14C15 .392 13.668 0 13.104 0zM15 1H1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h3.534a2 2 0 0 0 1.821-1.172l1.19-2.618a.5.5 0 0 1 .91 0l1.19 2.618A2 2 0 0 0 11.466 11H15a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zM4 7a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm8 0a2 2 0 1 1 0-4 2 2 0 0 1 0 4z\"/><!--Created by Idevã Batista from the Noun Project--></svg>","import type { CompassPlugin } from '@photo-sphere-viewer/compass-plugin';\nimport type { PluginConstructor, Viewer } from '@photo-sphere-viewer/core';\nimport { AbstractPlugin, events, PSVError, utils } from '@photo-sphere-viewer/core';\nimport type { GalleryPlugin } from '@photo-sphere-viewer/gallery-plugin';\nimport type { GyroscopePlugin } from '@photo-sphere-viewer/gyroscope-plugin';\nimport type { MapPlugin } from '@photo-sphere-viewer/map-plugin';\nimport type { MarkersPlugin } from '@photo-sphere-viewer/markers-plugin';\nimport type { PlanPlugin } from '@photo-sphere-viewer/plan-plugin';\nimport { StereoEffect } from 'three/examples/jsm/effects/StereoEffect.js';\nimport { StereoPluginEvents, StereoUpdatedEvent } from './events';\nimport mobileRotateIcon from './icons/mobile-rotate.svg';\nimport { cancelWaitLandscape, getOrientation, waitLandscape } from './utils';\n\nconst ID_OVERLAY_PLEASE_ROTATE = 'pleaseRotate';\n\n/**\n * Adds stereo view on mobile devices\n */\nexport class StereoPlugin extends AbstractPlugin<StereoPluginEvents> {\n    static override readonly id = 'stereo';\n    static override readonly VERSION = PKG_VERSION;\n\n    private readonly state = {\n        enabled: false,\n        wakeLock: null as WakeLockSentinel,\n        waitLandscape: null as any,\n    };\n\n    private compass?: CompassPlugin;\n    private gallery?: GalleryPlugin;\n    private gyroscope: GyroscopePlugin;\n    private map?: MapPlugin;\n    private markers?: MarkersPlugin;\n    private plan?: PlanPlugin;\n\n    /**\n     * @internal\n     */\n    get isSupported(): Promise<boolean> {\n        return this.gyroscope.isSupported();\n    }\n\n    static withConfig(): [PluginConstructor, any] {\n        return [StereoPlugin, undefined];\n    }\n\n    constructor(viewer: Viewer) {\n        super(viewer);\n    }\n\n    /**\n     * @internal\n     */\n    override init() {\n        super.init();\n\n        this.compass = this.viewer.getPlugin('compass');\n        this.gallery = this.viewer.getPlugin('gallery');\n        this.gyroscope = this.viewer.getPlugin('gyroscope');\n        this.map = this.viewer.getPlugin('map');\n        this.markers = this.viewer.getPlugin('markers');\n        this.plan = this.viewer.getPlugin('plan');\n\n        if (!this.gyroscope) {\n            throw new PSVError('Stereo plugin requires the Gyroscope plugin');\n        }\n\n        this.viewer.addEventListener(events.StopAllEvent.type, this);\n        this.viewer.addEventListener(events.ClickEvent.type, this);\n    }\n\n    /**\n     * @internal\n     */\n    override destroy() {\n        this.viewer.removeEventListener(events.StopAllEvent.type, this);\n        this.viewer.removeEventListener(events.ClickEvent.type, this);\n\n        this.stop();\n\n        delete this.compass;\n        delete this.gallery;\n        delete this.gyroscope;\n        delete this.map;\n        delete this.markers;\n        delete this.plan;\n\n        super.destroy();\n    }\n\n    /**\n     * @internal\n     */\n    handleEvent(e: Event) {\n        if (e instanceof events.StopAllEvent || e instanceof events.ClickEvent) {\n            this.stop();\n        }\n    }\n\n    /**\n     * Checks if the stereo view is enabled\n     */\n    isEnabled(): boolean {\n        return this.state.enabled;\n    }\n\n    /**\n     * Enables the stereo view\n     *\n     *  - enables wake lock\n     *  - enables full screen\n     *  - starts gyroscope controle\n     *  - hides markers, navbar and panel\n     *  - instanciate the stereo effect\n     */\n    start(): Promise<void> {\n        // Need to be in the main event queue\n        this.viewer.enterFullscreen();\n        this.__startWakelock();\n        this.__lockOrientation();\n\n        return this.gyroscope.start('fast').then(\n            () => {\n                this.viewer.renderer.setCustomRenderer(renderer => new StereoEffect(renderer));\n                this.state.enabled = true;\n\n                this.viewer.navbar.hide();\n                this.viewer.panel.hide();\n                this.compass?.hide();\n                this.gallery?.hide();\n                this.map?.hide();\n                this.plan?.hide();\n                this.markers?.hideAllMarkers();\n\n                this.dispatchEvent(new StereoUpdatedEvent(true));\n\n                this.viewer.notification.show({\n                    content: this.viewer.config.lang.stereoNotification,\n                    timeout: 3000,\n                });\n            },\n            () => {\n                this.__unlockOrientation();\n                this.__stopWakelock();\n                this.viewer.exitFullscreen();\n                return Promise.reject();\n            },\n        );\n    }\n\n    /**\n     * Disables the stereo view\n     */\n    stop() {\n        if (this.isEnabled()) {\n            this.viewer.renderer.setCustomRenderer(null);\n            this.state.enabled = false;\n\n            this.__unlockOrientation();\n            this.__stopWakelock();\n            this.viewer.exitFullscreen();\n            this.gyroscope.stop();\n\n            this.viewer.navbar.show();\n            this.compass?.show();\n            this.map?.show();\n            this.plan?.show();\n            this.markers?.showAllMarkers();\n\n            this.dispatchEvent(new StereoUpdatedEvent(false));\n        }\n    }\n\n    /**\n     * Enables or disables the stereo view\n     */\n    toggle() {\n        if (this.isEnabled()) {\n            this.stop();\n        } else {\n            this.start();\n        }\n    }\n\n    /**\n     * Enables WakeLock\n     */\n    private __startWakelock() {\n        if ('wakeLock' in navigator) {\n            navigator.wakeLock\n                .request('screen')\n                .then((wakeLock: WakeLockSentinel) => {\n                    this.state.wakeLock = wakeLock;\n                })\n                .catch(() => utils.logWarn('Cannot acquire WakeLock'));\n        } else {\n            utils.logWarn('WakeLock is not available');\n        }\n    }\n\n    /**\n     * Disables WakeLock\n     */\n    private __stopWakelock() {\n        if (this.state.wakeLock) {\n            this.state.wakeLock.release();\n            this.state.wakeLock = null;\n        }\n    }\n\n    /**\n     * Tries to lock the device in landscape or display a message\n     */\n    private __lockOrientation() {\n        let displayRotateMessageTimeout: ReturnType<typeof setTimeout>;\n\n        const displayRotateMessage = () => {\n            if (getOrientation() !== 'landscape' && !this.viewer.overlay.isVisible(ID_OVERLAY_PLEASE_ROTATE)) {\n                this.viewer.overlay.show({\n                    id: ID_OVERLAY_PLEASE_ROTATE,\n                    image: mobileRotateIcon,\n                    title: this.viewer.config.lang.pleaseRotate,\n                    text: this.viewer.config.lang.tapToContinue,\n                });\n\n                this.state.waitLandscape = waitLandscape(() => {\n                    this.viewer.overlay.hide(ID_OVERLAY_PLEASE_ROTATE);\n                    cancelWaitLandscape(this.state.waitLandscape);\n                    this.state.waitLandscape = null;\n                });\n            }\n\n            if (displayRotateMessageTimeout) {\n                clearTimeout(displayRotateMessageTimeout);\n                displayRotateMessageTimeout = null;\n            }\n        };\n\n        try {\n            (screen.orientation as any).lock('landscape').then(null, () => displayRotateMessage());\n            displayRotateMessageTimeout = setTimeout(() => displayRotateMessage(), 1000);\n        } catch {\n            displayRotateMessage();\n        }\n    }\n\n    /**\n     * Unlock the device orientation\n     */\n    private __unlockOrientation() {\n        this.viewer.overlay.hide(ID_OVERLAY_PLEASE_ROTATE);\n\n        if (this.state.waitLandscape) {\n            cancelWaitLandscape(this.state.waitLandscape);\n            this.state.waitLandscape = null;\n        }\n\n        try {\n            screen.orientation?.unlock();\n        } catch {\n            // empty\n        }\n    }\n}\n","import {\n\tStereoCamera,\n\tVector2\n} from 'three';\n\n/**\n * A class that creates an stereo effect.\n *\n * Note that this class can only be used with {@link WebGLRenderer}.\n * When using {@link WebGPURenderer}, use {@link StereoPassNode}.\n *\n * @three_import import { StereoEffect } from 'three/addons/effects/StereoEffect.js';\n */\nclass StereoEffect {\n\n\t/**\n\t * Constructs a new stereo effect.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t */\n\tconstructor( renderer ) {\n\n\t\tconst _stereo = new StereoCamera();\n\t\t_stereo.aspect = 0.5;\n\t\tconst size = new Vector2();\n\n\t\t/**\n\t\t * Sets the given eye separation.\n\t\t *\n\t\t * @param {number} eyeSep - The eye separation to set.\n\t\t */\n\t\tthis.setEyeSeparation = function ( eyeSep ) {\n\n\t\t\t_stereo.eyeSep = eyeSep;\n\n\t\t};\n\n\t\t/**\n\t\t * Resizes the effect.\n\t\t *\n\t\t * @param {number} width - The width of the effect in logical pixels.\n\t\t * @param {number} height - The height of the effect in logical pixels.\n\t\t */\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\trenderer.setSize( width, height );\n\n\t\t};\n\n\t\t/**\n\t\t * When using this effect, this method should be called instead of the\n\t\t * default {@link WebGLRenderer#render}.\n\t\t *\n\t\t * @param {Object3D} scene - The scene to render.\n\t\t * @param {Camera} camera - The camera.\n\t\t */\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\t_stereo.update( camera );\n\n\t\t\tconst currentAutoClear = renderer.autoClear;\n\t\t\trenderer.getSize( size );\n\n\t\t\trenderer.autoClear = false;\n\t\t\trenderer.clear();\n\n\t\t\trenderer.setScissorTest( true );\n\n\t\t\trenderer.setScissor( 0, 0, size.width / 2, size.height );\n\t\t\trenderer.setViewport( 0, 0, size.width / 2, size.height );\n\t\t\trenderer.render( scene, _stereo.cameraL );\n\n\t\t\trenderer.setScissor( size.width / 2, 0, size.width / 2, size.height );\n\t\t\trenderer.setViewport( size.width / 2, 0, size.width / 2, size.height );\n\t\t\trenderer.render( scene, _stereo.cameraR );\n\n\t\t\trenderer.setScissorTest( false );\n\n\t\t\trenderer.autoClear = currentAutoClear;\n\n\t\t};\n\n\t}\n\n}\n\nexport { StereoEffect };\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"currentColor\" d=\"M66.7 19a14 14 0 0 1 13.8 12.1l-3.9-2.7c-.5-.3-1.1-.2-1.4.3-.3.5-.2 1.1.3 1.4l5.7 3.9.6.2c.3 0 .6-.2.8-.4l3.9-5.7c.3-.5.2-1.1-.3-1.4-.5-.3-1.1-.2-1.4.3l-2.4 3.5A16 16 0 0 0 66.7 17c-.6 0-1 .4-1 1s.4 1 1 1zM25 15h10c.6 0 1-.4 1-1s-.4-1-1-1H25c-.6 0-1 .4-1 1s.4 1 1 1zm-6.9 30H16l-2 .2a1 1 0 0 0-.8 1.2c.1.5.5.8 1 .8h.2l1.7-.2h2.1c.6 0 1-.4 1-1s-.5-1-1.1-1zm10 0h-4c-.6 0-1 .4-1 1s.4 1 1 1h4c.6 0 1-.4 1-1s-.4-1-1-1zM84 45H55V16A11 11 0 0 0 44 5H16A11 11 0 0 0 5 16v68a11 11 0 0 0 11 11h68a11 11 0 0 0 11-11V56a11 11 0 0 0-11-11zM16 93c-5 0-9-4-9-9V53.2c.3-.1.6-.3.7-.6a9.8 9.8 0 0 1 2-3c.4-.4.4-1 0-1.4a1 1 0 0 0-1.4 0l-1.2 1.5V16c0-5 4-9 9-9h28c5 0 9 4 9 9v68c0 5-4 9-9 9H16zm77-9c0 5-4 9-9 9H50.3c2.8-2 4.7-5.3 4.7-9V47h29c5 0 9 4 9 9v28zM38.1 45h-4c-.6 0-1 .4-1 1s.4 1 1 1h4c.6 0 1-.4 1-1s-.5-1-1-1zm9.9 0h-4c-.6 0-1 .4-1 1s.4 1 1 1h4c.6 0 1-.4 1-1s-.4-1-1-1zm38 19c-.6 0-1 .4-1 1v10c0 .6.4 1 1 1s1-.4 1-1V65c0-.6-.4-1-1-1z\"/><!--Created by Anthony Bresset from the Noun Project--></svg>","/**\n * Returns the orientation of the screen\n */\nexport function getOrientation(): 'landscape' | 'portrait' {\n    try {\n        switch (screen.orientation.type) {\n            case 'landscape-primary':\n            case 'landscape-secondary':\n                return 'landscape';\n            case 'portrait-primary':\n            case 'portrait-secondary':\n                return 'portrait';\n            default:\n                throw new Error('unknown');\n        }\n    } catch {\n        if (window.innerHeight > window.innerWidth) {\n            return 'portrait';\n        } else {\n            return 'landscape';\n        }\n    }\n}\n\n/**\n * Wait for the screen to be in landscape orientation\n */\nexport function waitLandscape(cb: () => void): any {\n    try {\n        const listener = () => {\n            if (getOrientation() === 'landscape') {\n                cb();\n            }\n        };\n        screen.orientation.addEventListener('change', listener);\n        return listener;\n    } catch {\n        return setInterval(() => {\n            if (getOrientation() === 'landscape') {\n                cb();\n            }\n        }, 500);\n    }\n}\n\n/**\n * Cancel the waiting for the landscape orientation\n */\nexport function cancelWaitLandscape(id: any) {\n    if (typeof id === 'number') {\n        clearInterval(id);\n    } else {\n        try {\n            screen.orientation.removeEventListener('change', id);\n        } catch {\n            // empty\n        }\n    }\n}\n"],"mappings":"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","names":["import_core","import_core","import_core"]}