{"version":3,"sources":["src/index.ts","src/CompassPlugin.ts","src/compass.svg","src/components/CompassComponent.ts"],"sourcesContent":["export { CompassPlugin } from './CompassPlugin';\nexport * from './model';\n\n/** @internal  */\nimport './styles/index.scss';\n","import type { PluginConstructor, Viewer } from '@photo-sphere-viewer/core';\nimport { AbstractConfigurablePlugin, events, utils } from '@photo-sphere-viewer/core';\nimport type { events as markersEvents, MarkersPlugin } from '@photo-sphere-viewer/markers-plugin';\nimport compass from './compass.svg';\nimport { CompassComponent } from './components/CompassComponent';\nimport { CompassHotspot, CompassPluginConfig, ParsedCompassPluginConfig } from './model';\n\nconst getConfig = utils.getConfigParser<CompassPluginConfig, ParsedCompassPluginConfig>(\n    {\n        size: '120px',\n        position: ['top', 'left'],\n        backgroundSvg: compass,\n        coneColor: 'rgba(255, 255, 255, 0.5)',\n        navigation: true,\n        resetPitch: false,\n        navigationColor: 'rgba(255, 0, 0, 0.2)',\n        hotspots: [],\n        hotspotColor: 'rgba(0, 0, 0, 0.5)',\n        className: null,\n    },\n    {\n        position: (position, { defValue }) => {\n            return utils.cleanCssPosition(position, { allowCenter: true, cssOrder: true }) || defValue;\n        },\n    },\n);\n\n/**\n * Adds a compass on the viewer\n */\nexport class CompassPlugin extends AbstractConfigurablePlugin<\n    CompassPluginConfig,\n    ParsedCompassPluginConfig\n> {\n    static override readonly id = 'compass';\n    static override readonly VERSION = PKG_VERSION;\n    static override readonly configParser = getConfig;\n\n    private markers?: MarkersPlugin;\n    private readonly component: CompassComponent;\n\n    static withConfig(config: CompassPluginConfig): [PluginConstructor, any] {\n        return [CompassPlugin, config];\n    }\n\n    constructor(viewer: Viewer, config: CompassPluginConfig) {\n        super(viewer, config);\n\n        this.component = new CompassComponent(this.viewer, this);\n    }\n\n    /**\n     * @internal\n     */\n    override init() {\n        super.init();\n\n        utils.checkStylesheet(this.viewer.container, 'compass-plugin');\n\n        this.markers = this.viewer.getPlugin('markers');\n\n        this.viewer.addEventListener(events.RenderEvent.type, this);\n        this.viewer.addEventListener(events.ReadyEvent.type, this, { once: true });\n\n        if (this.markers) {\n            this.markers.addEventListener('set-markers', this);\n        }\n    }\n\n    /**\n     * @internal\n     */\n    override destroy() {\n        this.viewer.removeEventListener(events.RenderEvent.type, this);\n        this.viewer.removeEventListener(events.ReadyEvent.type, this);\n\n        if (this.markers) {\n            this.markers.removeEventListener('set-markers', this);\n        }\n\n        this.component.destroy();\n\n        delete this.markers;\n\n        super.destroy();\n    }\n\n    override setOptions(options: Partial<CompassPluginConfig>) {\n        super.setOptions(options);\n\n        this.component.applyConfig();\n        this.component.update();\n    }\n\n    /**\n     * @internal\n     */\n    handleEvent(e: Event) {\n        switch (e.type) {\n            case events.ReadyEvent.type:\n                this.component.show();\n                break;\n            case events.RenderEvent.type:\n                this.component.update();\n                break;\n            case 'set-markers':\n                this.component.setMarkers(\n                    (e as markersEvents.SetMarkersEvent).markers.filter(m => m.data?.['compass']),\n                );\n                break;\n        }\n    }\n\n    /**\n     * Hides the compass\n     */\n    hide() {\n        this.component.hide();\n    }\n\n    /**\n     * Shows the compass\n     */\n    show() {\n        this.component.show();\n    }\n\n    /**\n     * Changes the hotspots on the compass\n     */\n    setHotspots(hotspots: CompassHotspot[] | null) {\n        this.config.hotspots = hotspots;\n        this.component.update();\n    }\n\n    /**\n     * Removes all hotspots\n     */\n    clearHotspots() {\n        this.setHotspots(null);\n    }\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><circle cx=\"50\" cy=\"50\" r=\"50\" fill=\"rgba(61, 61, 61, .5)\"/><path fill=\"rgba(255, 255, 255, .7)\" d=\"M50 97.1A47 47 0 0 1 32.5 6.5l.8 1.8a45 45 0 1 0 33.4 0l.8-1.8A47 47 0 0 1 50 97Zm0-42a5 5 0 1 1 5-5 5 5 0 0 1-5 5Zm4-41.7h-1.6a.4.4 0 0 1-.4-.2l-4.6-7.7V13a.3.3 0 0 1-.3.3h-1.6a.3.3 0 0 1-.3-.3V1.8a.3.3 0 0 1 .3-.3h1.6a.3.3 0 0 1 .4.2L52 9.4V1.8a.3.3 0 0 1 .3-.3H54c.2 0 .3 0 .3.3V13c0 .2-.1.3-.3.3Z\"/></svg>\n","import type { Position, Viewer } from '@photo-sphere-viewer/core';\nimport { AbstractComponent, SYSTEM } from '@photo-sphere-viewer/core';\nimport type { Marker } from '@photo-sphere-viewer/markers-plugin';\nimport { MathUtils } from 'three';\nimport type { CompassPlugin } from '../CompassPlugin';\n\nconst HOTSPOT_SIZE_RATIO = 1 / 40;\n\nexport class CompassComponent extends AbstractComponent {\n    protected override readonly state = {\n        visible: true,\n        mouse: null as { clientX: number; clientY: number },\n        mousedown: false,\n        markers: [] as Marker[],\n    };\n\n    private readonly canvas: HTMLCanvasElement;\n    private readonly background: HTMLElement;\n\n    get config() {\n        return this.plugin.config;\n    }\n\n    constructor(\n        viewer: Viewer,\n        private plugin: CompassPlugin,\n    ) {\n        super(viewer, {});\n\n        this.background = document.createElement('div');\n        this.canvas = document.createElement('canvas');\n        this.container.appendChild(this.background);\n        this.container.appendChild(this.canvas);\n\n        this.container.addEventListener('mouseenter', this);\n        this.container.addEventListener('mouseleave', this);\n        this.container.addEventListener('mousemove', this);\n        this.container.addEventListener('mousedown', this);\n        this.container.addEventListener('mouseup', this);\n        this.container.addEventListener('touchstart', this);\n        this.container.addEventListener('touchmove', this);\n        this.container.addEventListener('touchend', this);\n\n        this.applyConfig();\n        this.hide();\n    }\n\n    handleEvent(e: Event) {\n        if (!this.config.navigation) {\n            return;\n        }\n\n        switch (e.type) {\n            case 'mouseenter':\n            case 'mousemove':\n            case 'touchmove':\n                this.state.mouse = (e as TouchEvent).changedTouches?.[0] || (e as MouseEvent);\n                if (this.state.mousedown) {\n                    this.click();\n                } else {\n                    this.update();\n                }\n                e.stopPropagation();\n                e.preventDefault();\n                break;\n            case 'mousedown':\n            case 'touchstart':\n                this.state.mousedown = true;\n                e.stopPropagation();\n                e.preventDefault();\n                break;\n            case 'mouseup':\n            case 'touchend':\n                this.state.mouse = (e as TouchEvent).changedTouches?.[0] || (e as MouseEvent);\n                this.state.mousedown = false;\n                this.click();\n                if ((e as TouchEvent).changedTouches) {\n                    this.state.mouse = null;\n                    this.update();\n                }\n                e.stopPropagation();\n                e.preventDefault();\n                break;\n            case 'mouseleave':\n                this.state.mouse = null;\n                this.state.mousedown = false;\n                this.update();\n                break;\n            default:\n                break;\n        }\n    }\n\n    override destroy(): void {\n        this.canvas.width = 0;\n        this.canvas.height = 0;\n\n        super.destroy();\n    }\n\n    applyConfig() {\n        this.container.className = `psv-compass psv-compass--${this.config.position.join('-')}`;\n\n        if (this.config.className) {\n            this.container.classList.add(this.config.className);\n        }\n\n        this.background.innerHTML = this.config.backgroundSvg;\n\n        this.container.style.width = this.config.size;\n\n        this.container.style.marginTop = this.config.position[0] === 'center' ? `calc(-${this.config.size} / 2)` : '';\n        this.container.style.marginLeft = this.config.position[1] === 'center' ? `calc(-${this.config.size} / 2)` : '';\n    }\n\n    override show(): void {\n        super.show();\n        this.update();\n    }\n\n    setMarkers(markers: Marker[]) {\n        this.state.markers = markers;\n        this.update();\n    }\n\n    /**\n     * Updates the compass for current zoom and position\n     */\n    update() {\n        if (!this.isVisible()) {\n            return;\n        }\n\n        this.canvas.width = this.container.clientWidth * SYSTEM.pixelRatio;\n        this.canvas.height = this.container.clientWidth * SYSTEM.pixelRatio;\n\n        const context = this.canvas.getContext('2d');\n        context.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\n        const yaw = this.viewer.getPosition().yaw;\n        const fov = MathUtils.degToRad(this.viewer.state.hFov);\n\n        this.__drawCone(context, this.config.coneColor, yaw, fov);\n\n        const mouseAngle = this.__getMouseAngle();\n        if (mouseAngle !== null) {\n            this.__drawCone(context, this.config.navigationColor, mouseAngle, fov);\n        }\n\n        this.state.markers.forEach((marker) => {\n            this.__drawMarker(context, marker);\n        });\n        this.config.hotspots?.forEach((spot) => {\n            if ('yaw' in spot && !('pitch' in spot)) {\n                (spot as Position).pitch = 0;\n            }\n            const pos = this.viewer.dataHelper.cleanPosition(spot);\n            this.__drawPoint(context, spot.color || this.config.hotspotColor, pos.yaw, pos.pitch);\n        });\n    }\n\n    /**\n     * Rotates the viewer depending on the position of the mouse on the compass\n     */\n    private click() {\n        const mouseAngle = this.__getMouseAngle();\n\n        if (mouseAngle !== null) {\n            this.viewer.rotate({\n                yaw: mouseAngle,\n                pitch: this.config.resetPitch ? this.viewer.config.defaultPitch : this.viewer.getPosition().pitch,\n            });\n        }\n    }\n\n    /**\n     * Draw a cone\n     */\n    private __drawCone(context: CanvasRenderingContext2D, color: string, yaw: number, fov: number) {\n        const a1 = yaw - Math.PI / 2 - fov / 2;\n        const a2 = a1 + fov;\n        const c = this.canvas.width / 2;\n\n        context.beginPath();\n        context.moveTo(c, c);\n        context.lineTo(c + Math.cos(a1) * c, c + Math.sin(a1) * c);\n        context.arc(c, c, c, a1, a2, false);\n        context.lineTo(c, c);\n        context.fillStyle = color;\n        context.fill();\n    }\n\n    /**\n     * Draw a Marker\n     */\n    private __drawMarker(context: CanvasRenderingContext2D, marker: Marker) {\n        let color = this.config.hotspotColor;\n        if (typeof marker.data['compass'] === 'string') {\n            color = marker.data['compass'];\n        }\n\n        if (marker.isPoly()) {\n            context.beginPath();\n            (marker.definition[0] as Array<[number, number]>).forEach(([yaw, pitch], i) => {\n                const a = yaw - Math.PI / 2;\n                const d = (pitch + Math.PI / 2) / Math.PI;\n                const c = this.canvas.width / 2;\n\n                context[i === 0 ? 'moveTo' : 'lineTo'](c + Math.cos(a) * c * d, c + Math.sin(a) * c * d);\n            });\n            if (marker.type.startsWith('polygon')) {\n                context.fillStyle = color;\n                context.fill();\n            } else {\n                context.strokeStyle = color;\n                context.lineWidth = Math.max(1, (this.canvas.width * HOTSPOT_SIZE_RATIO) / 2);\n                context.stroke();\n            }\n        } else {\n            const pos = marker.state.position;\n            this.__drawPoint(context, color, pos.yaw, pos.pitch);\n        }\n    }\n\n    /**\n     * Draw a point\n     */\n    private __drawPoint(context: CanvasRenderingContext2D, color: string, yaw: number, pitch: number) {\n        const a = yaw - Math.PI / 2;\n        const d = (pitch + Math.PI / 2) / Math.PI;\n        const c = this.canvas.width / 2;\n        const r = Math.max(2, this.canvas.width * HOTSPOT_SIZE_RATIO);\n\n        context.beginPath();\n        context.ellipse(\n            c + Math.cos(a) * c * d, c + Math.sin(a) * c * d,\n            r, r,\n            0, 0,\n            Math.PI * 2,\n        );\n        context.fillStyle = color;\n        context.fill();\n    }\n\n    /**\n     * Gets the horizontal angle corresponding to the mouse position on the compass\n     */\n    private __getMouseAngle(): number | null {\n        if (!this.state.mouse) {\n            return null;\n        }\n\n        const boundingRect = this.container.getBoundingClientRect();\n        const mouseX = this.state.mouse.clientX - boundingRect.left - boundingRect.width / 2;\n        const mouseY = this.state.mouse.clientY - boundingRect.top - boundingRect.width / 2;\n\n        if (Math.sqrt(mouseX * mouseX + mouseY * mouseY) > boundingRect.width / 2) {\n            return null;\n        }\n\n        return Math.atan2(mouseY, mouseX) + Math.PI / 2;\n    }\n}\n"],"mappings":"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","names":["import_core"]}