{"version":3,"sources":["src/index.ts","src/events.ts","src/PlanPlugin.ts","src/components/PlanComponent.ts","src/constants.ts","src/utils.ts","src/components/PlanCloseButton.ts","src/icons/map.svg","src/components/AbstractPlanButton.ts","src/icons/layers.svg","src/components/PlanLayersButton.ts","src/icons/maximize.svg","src/icons/minimize.svg","src/components/PlanMaximizeButton.ts","src/icons/reset.svg","src/components/PlanResetButton.ts","src/icons/pin.svg"],"sourcesContent":["import { DEFAULTS } from '@photo-sphere-viewer/core';\nimport * as events from './events';\n\nDEFAULTS.lang['map'] = 'Map';\nDEFAULTS.lang['mapMaximize'] = 'Maximize';\nDEFAULTS.lang['mapMinimize'] = 'Minimize';\nDEFAULTS.lang['mapReset'] = 'Reset';\nDEFAULTS.lang['mapLayers'] = 'Base layer';\n\nexport { PlanPlugin } from './PlanPlugin';\nexport * from './model';\nexport { events };\n\n/** @internal  */\nimport './styles/index.scss';\n","import { TypedEvent } from '@photo-sphere-viewer/core';\nimport type { PlanPlugin } from './PlanPlugin';\n\n/**\n * @event Triggered when the user clicks on a hotspot\n */\nexport class SelectHotspot extends TypedEvent<PlanPlugin> {\n    static override readonly type = 'select-hotspot';\n    override type: 'select-hotspot';\n\n    /** @internal */\n    constructor(public readonly hotspotId: string) {\n        super(SelectHotspot.type);\n    }\n}\n\n/**\n * @event Triggered when the size of the map changes\n */\nexport class ViewChanged extends TypedEvent<PlanPlugin> {\n    static override readonly type = 'view-changed';\n    override type: 'view-changed';\n\n    /** @internal */\n    constructor(public readonly view: 'closed' | 'normal' | 'maximized') {\n        super(ViewChanged.type);\n    }\n}\n\nexport type PlanPluginEvents = SelectHotspot | ViewChanged;\n","import { AbstractConfigurablePlugin, events, PluginConstructor, utils, type Viewer } from '@photo-sphere-viewer/core';\nimport type { Marker, events as markersEvents, MarkersPlugin } from '@photo-sphere-viewer/markers-plugin';\nimport { type Map } from 'leaflet';\nimport { PlanComponent } from './components/PlanComponent';\nimport { HOTSPOT_GENERATED_ID, HOTSPOT_MARKER_ID, MARKER_DATA_KEY, OSM_ATTRIBUTION, OSM_LABEL, OSM_URL } from './constants';\nimport { PlanPluginEvents } from './events';\nimport pin from './icons/pin.svg';\nimport { GpsPosition, ParsedPlanPluginConfig, PlanHotspot, PlanPluginConfig, UpdatablePlanPluginConfig } from './model';\n\nconst getConfig = utils.getConfigParser<PlanPluginConfig>(\n    {\n        coordinates: null,\n        bearing: 0,\n        size: { width: '300px', height: '200px' },\n        position: ['bottom', 'left'],\n        visibleOnLoad: true,\n        pinImage: pin,\n        pinSize: 35,\n        spotStyle: {\n            size: 15,\n            image: null,\n            color: 'white',\n            borderSize: 0,\n            borderColor: null,\n            hoverSize: null,\n            hoverImage: null,\n            hoverColor: null,\n            hoverBorderSize: 4,\n            hoverBorderColor: 'rgba(255, 255, 255, 0.8)',\n        },\n        defaultZoom: 15,\n        layers: [{\n            urlTemplate: OSM_URL,\n            attribution: OSM_ATTRIBUTION,\n            name: OSM_LABEL,\n        }],\n        configureLeaflet: null,\n        hotspots: [],\n        minimizeOnHotspotClick: true,\n        buttons: {\n            maximize: true,\n            close: true,\n            reset: true,\n        },\n    },\n    {\n        spotStyle: (spotStyle, { defValue }) => ({ ...defValue, ...spotStyle }),\n        position: (position, { defValue }) => {\n            return utils.cleanCssPosition(position, { allowCenter: false, cssOrder: true }) || defValue;\n        },\n        bearing: bearing => utils.parseAngle(bearing),\n        buttons: (buttons, { defValue }) => ({ ...defValue, ...buttons }),\n    },\n);\n\n/**\n * Adds a map on the viewer\n */\nexport class PlanPlugin extends AbstractConfigurablePlugin<\n    PlanPluginConfig,\n    ParsedPlanPluginConfig,\n    UpdatablePlanPluginConfig,\n    PlanPluginEvents\n> {\n    static override readonly id = 'plan';\n    static override readonly VERSION = PKG_VERSION;\n    static override readonly configParser = getConfig;\n    static override readonly readonlyOptions: Array<keyof PlanPluginConfig> = [\n        'visibleOnLoad',\n        'defaultZoom',\n        'layers',\n        'configureLeaflet',\n        'buttons',\n    ];\n\n    private markers?: MarkersPlugin;\n    readonly component: PlanComponent;\n\n    static withConfig(config: PlanPluginConfig): [PluginConstructor, any] {\n        return [PlanPlugin, config];\n    }\n\n    constructor(viewer: Viewer, config: PlanPluginConfig) {\n        super(viewer, config);\n\n        this.component = new PlanComponent(this.viewer, this);\n    }\n\n    /**\n     * @internal\n     */\n    override init() {\n        super.init();\n\n        utils.checkStylesheet(this.viewer.container, 'plan-plugin');\n\n        this.component.init();\n\n        this.markers = this.viewer.getPlugin('markers');\n\n        this.viewer.addEventListener(events.PositionUpdatedEvent.type, this);\n        this.viewer.addEventListener(events.ReadyEvent.type, this, { once: true });\n        this.markers?.addEventListener('set-markers', this);\n\n        this.setHotspots(this.config.hotspots);\n    }\n\n    /**\n     * @internal\n     */\n    override destroy() {\n        this.viewer.removeEventListener(events.PositionUpdatedEvent.type, this);\n        this.viewer.removeEventListener(events.ReadyEvent.type, this);\n        this.markers?.removeEventListener('set-markers', this);\n\n        this.component.destroy();\n\n        super.destroy();\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.PositionUpdatedEvent.type:\n                this.component.updateBearing((e as events.PositionUpdatedEvent).position);\n                break;\n            case 'set-markers':\n                this.component.setMarkers(this.__markersToHotspots((e as markersEvents.SetMarkersEvent).markers));\n                break;\n            default:\n                break;\n        }\n    }\n\n    override setOptions(options: Partial<PlanPluginConfig>) {\n        super.setOptions(options);\n\n        if (options.coordinates) {\n            this.component.recenter();\n        }\n        if (!utils.isNil(options.bearing)) {\n            this.component.updateBearing();\n        }\n        if (options.pinImage || options.pinSize) {\n            this.component.updatePin();\n        }\n        if (options.spotStyle) {\n            this.component.updateSpots();\n        }\n        if (options.hotspots !== undefined) {\n            this.setHotspots(options.hotspots);\n        }\n\n        this.component.applyConfig();\n    }\n\n    /**\n     * Hides the map\n     */\n    hide() {\n        this.component.hide();\n    }\n\n    /**\n     * Shows the map\n     */\n    show() {\n        this.component.show();\n    }\n\n    /**\n     * Changes the current zoom level\n     */\n    setZoom(level: number) {\n        this.component.zoom(level);\n    }\n\n    /**\n     * Closes the map\n     */\n    close() {\n        if (!this.component.collapsed) {\n            this.component.toggleCollapse();\n        }\n    }\n\n    /**\n     * Open the map\n     */\n    open() {\n        if (this.component.collapsed) {\n            this.component.toggleCollapse();\n        }\n    }\n\n    /**\n     * Minimizes the map\n     */\n    minimize() {\n        if (this.component.maximized) {\n            this.component.toggleMaximized();\n        }\n    }\n\n    /**\n     * Maximizes the map\n     */\n    maximize() {\n        if (!this.component.maximized) {\n            this.component.toggleMaximized();\n        }\n    }\n\n    /**\n     * Changes the position on the map\n     */\n    setCoordinates(coordinates: GpsPosition) {\n        this.config.coordinates = coordinates;\n        this.component.recenter();\n    }\n\n    /**\n     * Changes the hotspots on the map\n     */\n    setHotspots(hotspots: PlanHotspot[] | null) {\n        const ids: string[] = [];\n        let i = 1;\n\n        hotspots?.forEach((hotspot) => {\n            if (!hotspot.id) {\n                hotspot.id = HOTSPOT_GENERATED_ID + i++;\n            } else if (ids.includes(hotspot.id)) {\n                utils.logWarn(`Duplicated hotspot id \"${hotspot.id}`);\n            } else {\n                ids.push(hotspot.id);\n            }\n        });\n\n        this.config.hotspots = hotspots || [];\n\n        this.component.setHotspots(this.config.hotspots);\n    }\n\n    /**\n     * Removes all hotspots\n     */\n    clearHotspots() {\n        this.setHotspots(null);\n    }\n\n    /**\n     * Changes the highlighted hotspot\n     */\n    setActiveHotspot(hotspotId: string | null) {\n        this.component.setActiveHotspot(hotspotId);\n    }\n\n    /**\n     * Returns the Leaflet instance\n     */\n    getLeaflet(): Map {\n        return this.component.map;\n    }\n\n    private __markersToHotspots(markers: Marker[]): PlanHotspot[] {\n        return markers\n            .filter(marker => marker.data?.[MARKER_DATA_KEY])\n            .map((marker) => {\n                const hotspot: PlanHotspot = {\n                    ...marker.data[MARKER_DATA_KEY],\n                    id: HOTSPOT_MARKER_ID + marker.id,\n                    tooltip: marker.config.tooltip,\n                };\n\n                if (!hotspot.coordinates) {\n                    utils.logWarn(`Marker #${marker.id} \"plan\" data is missing GPS coordinates`);\n                    return null;\n                }\n\n                return hotspot;\n            })\n            .filter(h => h);\n    }\n}\n","import type { Position, Viewer } from '@photo-sphere-viewer/core';\nimport { AbstractComponent, CONSTANTS, events, utils } from '@photo-sphere-viewer/core';\nimport type { MarkersPlugin } from '@photo-sphere-viewer/markers-plugin';\nimport type { GalleryPlugin, events as GalleryEvents } from '@photo-sphere-viewer/gallery-plugin';\nimport { Control, Layer, Map, Marker, TileLayer } from 'leaflet';\nimport { MathUtils } from 'three';\nimport type { PlanPlugin } from '../PlanPlugin';\nimport { HOTSPOT_MARKER_ID, OSM_ATTRIBUTION, OSM_LABEL, OSM_URL } from '../constants';\nimport { SelectHotspot, ViewChanged } from '../events';\nimport { PlanHotspot } from '../model';\nimport { createLeafletIcon, getStyle, gpsToLeaflet } from '../utils';\nimport { PlanCloseButton } from './PlanCloseButton';\nimport { PlanLayersButton } from './PlanLayersButton';\nimport { PlanMaximizeButton } from './PlanMaximizeButton';\nimport { PlanResetButton } from './PlanResetButton';\n\nexport class PlanComponent extends AbstractComponent {\n    protected override readonly state = {\n        visible: false,\n        maximized: false,\n        collapsed: false,\n        galleryWasVisible: false,\n\n        layers: {} as Record<string, Layer>,\n        pinMarker: null as Marker,\n        hotspots: {} as Record<string, {\n            hotspot: PlanHotspot;\n            marker: Marker;\n            isMarker: boolean;\n        }>,\n        hotspotId: null as string,\n\n        forceRender: false,\n        needsUpdate: false,\n        renderLoop: null as ReturnType<typeof requestAnimationFrame>,\n    };\n\n    private gallery?: GalleryPlugin;\n\n    public readonly map: Map;\n    private readonly resetButton: PlanResetButton;\n    private readonly closeButton: PlanCloseButton;\n    private readonly maximizeButton: PlanMaximizeButton;\n    private readonly layersButton: PlanLayersButton;\n\n    get config() {\n        return this.plugin.config;\n    }\n\n    get maximized() {\n        return this.state.maximized;\n    }\n\n    get collapsed() {\n        return this.state.collapsed;\n    }\n\n    constructor(\n        viewer: Viewer,\n        private plugin: PlanPlugin,\n    ) {\n        super(viewer, {\n            className: `psv-plan ${CONSTANTS.CAPTURE_EVENTS_CLASS}`,\n        });\n\n        viewer.addEventListener(events.KeypressEvent.type, this);\n        viewer.addEventListener(events.ConfigChangedEvent.type, this);\n\n        const mapContainer = document.createElement('div');\n        mapContainer.className = 'psv-plan__container';\n\n        this.map = new Map(mapContainer, {\n            attributionControl: false,\n            zoomControl: false,\n        });\n        new Control.Attribution({ prefix: false }).addTo(this.map);\n\n        this.container.appendChild(mapContainer);\n\n        this.container.addEventListener('transitionstart', this);\n        this.container.addEventListener('transitionend', this);\n\n        // sub-components\n        this.layersButton = new PlanLayersButton(this);\n        if (this.config.buttons.reset) {\n            this.resetButton = new PlanResetButton(this);\n        }\n        if (this.config.buttons.maximize) {\n            this.maximizeButton = new PlanMaximizeButton(this);\n        }\n        if (this.config.buttons.close) {\n            this.closeButton = new PlanCloseButton(this);\n        }\n\n        // render loop\n        const renderLoop = () => {\n            if (this.isVisible() && (this.state.needsUpdate || this.state.forceRender)) {\n                this.map?.invalidateSize();\n                this.state.needsUpdate = false;\n            }\n            this.state.renderLoop = requestAnimationFrame(renderLoop);\n        };\n        renderLoop();\n\n        this.applyConfig();\n        this.hide();\n\n        if (!this.config.visibleOnLoad) {\n            this.toggleCollapse();\n        }\n\n        if (this.config.configureLeaflet) {\n            this.config.configureLeaflet(this.map);\n        } else {\n            this.__configureLeaflet();\n        }\n\n        this.map.fitWorld();\n\n        if (this.config.coordinates) {\n            this.recenter();\n        }\n    }\n\n    init() {\n        this.gallery = this.viewer.getPlugin('gallery');\n\n        this.gallery?.addEventListener('show-gallery', this);\n        this.gallery?.addEventListener('hide-gallery', this);\n    }\n\n    override destroy(): void {\n        cancelAnimationFrame(this.state.renderLoop);\n\n        this.viewer.removeEventListener(events.KeypressEvent.type, this);\n        this.viewer.removeEventListener(events.ConfigChangedEvent.type, this);\n\n        this.gallery?.removeEventListener('show-gallery', this);\n        this.gallery?.removeEventListener('hide-gallery', this);\n\n        super.destroy();\n    }\n\n    handleEvent(e: Event) {\n        if (utils.getMatchingTarget(e, `.${CONSTANTS.CAPTURE_EVENTS_CLASS}:not(.psv-plan)`)) {\n            return;\n        }\n        switch (e.type) {\n            case events.KeypressEvent.type:\n                if (this.state.maximized) {\n                    this.__onKeyPress(e as events.KeypressEvent);\n                    e.preventDefault();\n                }\n                break;\n            case events.ConfigChangedEvent.type:\n                if ((e as events.ConfigChangedEvent).containsOptions('lang')) {\n                    this.resetButton?.update();\n                    this.closeButton?.update();\n                    this.layersButton?.update();\n                    this.maximizeButton?.update();\n                }\n                break;\n            case 'transitionstart':\n                this.state.forceRender = true;\n                break;\n            case 'transitionend':\n                this.state.forceRender = false;\n                break;\n            case 'hide-gallery':\n                this.__onToggleGallery(false);\n                break;\n            case 'show-gallery':\n                if (!(e as GalleryEvents.ShowGalleryEvent).fullscreen) {\n                    this.__onToggleGallery(true);\n                }\n                break;\n        }\n    }\n\n    /**\n     * Applies default configuration\n     */\n    private __configureLeaflet() {\n        this.state.layers = this.config.layers.reduce((acc, layer, i) => {\n            if (!layer.name) {\n                layer.name = `Layer ${i + 1}`;\n            }\n\n            if (layer.urlTemplate) {\n                acc[layer.name] = new TileLayer(layer.urlTemplate, { attribution: layer.attribution });\n            } else if (layer.layer) {\n                if (layer.attribution) {\n                    layer.layer.options.attribution = layer.attribution;\n                }\n                acc[layer.name] = layer.layer;\n            } else {\n                utils.logWarn(`Layer #${i} is missing \"urlTemplate\" or \"layer\" property.`);\n            }\n            return acc;\n        }, {} as Record<string, Layer>);\n\n        if (!Object.values(this.state.layers).length) {\n            utils.logWarn(`No layer configured, fallback to OSM.`);\n            this.state.layers[OSM_LABEL] = new TileLayer(OSM_URL, { attribution: OSM_ATTRIBUTION });\n        }\n\n        const layersNames = Object.keys(this.state.layers);\n\n        this.setLayer(layersNames[0]);\n\n        if (layersNames.length > 1) {\n            this.layersButton.setLayers(layersNames);\n        }\n    }\n\n    applyConfig() {\n        this.container.classList.remove(\n            'psv-plan--top-right',\n            'psv-plan--top-left',\n            'psv-plan--bottom-right',\n            'psv-plan--bottom-left',\n        );\n        this.container.classList.add(`psv-plan--${this.config.position.join('-')}`);\n\n        this.container.style.width = this.config.size.width;\n        this.container.style.height = this.config.size.height;\n\n        this.layersButton.applyConfig();\n        this.resetButton?.applyConfig();\n        this.closeButton?.applyConfig();\n        this.maximizeButton?.applyConfig();\n\n        this.state.needsUpdate = true;\n    }\n\n    /**\n     * Force re-creation of the central pin\n     */\n    updatePin() {\n        if (this.state.pinMarker) {\n            this.state.pinMarker.remove();\n            this.state.pinMarker = null;\n        }\n        this.recenter();\n    }\n\n    /**\n     * Force re-creation of hotspots\n     */\n    updateSpots() {\n        this.setHotspots(Object.values(this.state.hotspots).filter(({ isMarker }) => !isMarker).map(({ hotspot }) => hotspot));\n        this.setMarkers(Object.values(this.state.hotspots).filter(({ isMarker }) => isMarker).map(({ hotspot }) => hotspot));\n    }\n\n    override isVisible(): boolean {\n        return this.state.visible && !this.state.collapsed;\n    }\n\n    override show() {\n        super.show();\n        this.state.needsUpdate = true;\n    }\n\n    override hide() {\n        super.hide();\n        this.state.forceRender = false;\n    }\n\n    /**\n     * Rotates the central pin\n     */\n    updateBearing(position: Position = this.viewer.getPosition()) {\n        if (this.state.pinMarker) {\n            const elt = this.state.pinMarker.getElement().firstElementChild as HTMLElement;\n            elt.style.rotate = MathUtils.radToDeg(position.yaw + this.config.bearing) + 'deg';\n        }\n    }\n\n    /**\n     * Changes the base layer\n     */\n    setLayer(name: string) {\n        Object.values(this.state.layers).forEach((layer) => {\n            if (this.map.hasLayer(layer)) {\n                this.map.removeLayer(layer);\n            }\n        });\n\n        this.map.addLayer(this.state.layers[name]);\n    }\n\n    /**\n     * Resets the map position and zoom level\n     */\n    reset() {\n        this.map?.setView(gpsToLeaflet(this.config.coordinates), this.config.defaultZoom);\n    }\n\n    /**\n     * Moves the position pin and resets the map position\n     */\n    recenter() {\n        const pos = gpsToLeaflet(this.config.coordinates);\n\n        if (!this.state.pinMarker) {\n            const icon = createLeafletIcon(this.config.pinImage, this.config.pinSize, 'psv-plan__pin');\n\n            this.state.pinMarker = new Marker(pos, {\n                icon,\n                alt: '',\n            }).addTo(this.map);\n\n            this.updateBearing();\n        } else {\n            this.state.pinMarker.setLatLng(pos);\n        }\n\n        if (this.map.getZoom() < 10) {\n            this.reset();\n        } else {\n            this.map.setView(pos);\n        }\n    }\n\n    /**\n     * Switch collapsed mode\n     */\n    toggleCollapse() {\n        if (this.state.maximized) {\n            this.toggleMaximized(false);\n        }\n\n        this.state.collapsed = !this.state.collapsed;\n\n        utils.toggleClass(this.container, 'psv-plan--collapsed', this.state.collapsed);\n\n        if (!this.state.collapsed) {\n            this.reset();\n            this.plugin.dispatchEvent(new ViewChanged('normal'));\n        } else {\n            this.plugin.dispatchEvent(new ViewChanged('closed'));\n        }\n\n        this.closeButton?.update();\n    }\n\n    /**\n     * Switch maximized mode\n     */\n    toggleMaximized(dispatchMinimizeEvent = true) {\n        if (this.state.collapsed) {\n            return;\n        }\n\n        this.state.maximized = !this.state.maximized;\n\n        utils.toggleClass(this.container, 'psv-plan--maximized', this.state.maximized);\n\n        if (this.state.maximized) {\n            this.state.galleryWasVisible = this.gallery?.isVisible();\n            this.gallery?.hide();\n\n            this.map.getContainer().focus();\n            this.plugin.dispatchEvent(new ViewChanged('maximized'));\n        } else {\n            this.map.getContainer().blur();\n\n            if (this.state.galleryWasVisible) {\n                this.gallery.show();\n            }\n            if (dispatchMinimizeEvent) {\n                this.plugin.dispatchEvent(new ViewChanged('normal'));\n            }\n        }\n\n        this.maximizeButton?.update();\n    }\n\n    /**\n     * Changes the zoom level\n     */\n    zoom(d: number) {\n        this.map.setZoom(d);\n    }\n\n    /**\n     * Updates the markers\n     */\n    setMarkers(markers: PlanHotspot[]) {\n        this.__setHotspots(markers, true);\n    }\n\n    /**\n     * Changes the highlighted hotspot\n     */\n    setActiveHotspot(hotspotId: string) {\n        if (this.state.hotspotId) {\n            this.__applyStyle(this.state.hotspotId, false);\n        }\n\n        if (hotspotId) {\n            this.__applyStyle(hotspotId, true);\n        }\n\n        this.state.hotspotId = hotspotId;\n    }\n\n    /**\n     * Changes the hotspots\n     */\n    setHotspots(hotspots: PlanHotspot[]) {\n        this.__setHotspots(hotspots, false);\n    }\n\n    private __setHotspots(hotspots: PlanHotspot[], isMarkers: boolean) {\n        Object.entries(this.state.hotspots)\n            .filter(([, { isMarker }]) => isMarker === isMarkers)\n            .forEach(([id, { marker }]) => {\n                marker.off();\n                marker.remove();\n                delete this.state.hotspots[id];\n            });\n\n        hotspots.forEach((hotspot) => {\n            const style = getStyle(this.config.spotStyle, hotspot, false);\n\n            const icon = createLeafletIcon(style.image || '', style.size, 'psv-plan__spot');\n\n            const marker = new Marker(gpsToLeaflet(hotspot.coordinates), {\n                icon,\n                alt: '',\n            }).addTo(this.map);\n\n            if (hotspot.tooltip) {\n                if (typeof hotspot.tooltip === 'string') {\n                    hotspot.tooltip = { content: hotspot.tooltip };\n                }\n\n                marker.bindTooltip(hotspot.tooltip.content, {\n                    className: hotspot.tooltip.className,\n                    direction: 'top',\n                    offset: [0, -style.size / 2],\n                });\n            }\n\n            marker.on('click', () => this.__clickHotspot(hotspot.id));\n            marker.on('mouseover', () => this.setActiveHotspot(hotspot.id));\n            marker.on('mouseout', () => this.setActiveHotspot(null));\n\n            this.state.hotspots[hotspot.id] = {\n                hotspot,\n                marker,\n                isMarker: isMarkers,\n            };\n\n            this.__applyStyle(hotspot.id, false);\n        });\n    }\n\n    /**\n     * Updates the style of a map marker\n     */\n    private __applyStyle(hotspotId: string, hover: boolean) {\n        const hotspot = this.state.hotspots[hotspotId]?.hotspot;\n        const element = this.state.hotspots[hotspotId]?.marker.getElement();\n\n        if (!hotspot) {\n            return;\n        }\n\n        const style = getStyle(this.config.spotStyle, hotspot, hover);\n\n        element.style.width = style.size + 'px';\n        element.style.height = style.size + 'px';\n        element.style.marginTop = (-style.size / 2) + 'px';\n        element.style.marginLeft = (-style.size / 2) + 'px';\n\n        if (!style.image) {\n            element.style.backgroundColor = style.color;\n            element.style.outlineStyle = 'solid';\n            element.style.outlineColor = style.borderColor;\n            element.style.outlineWidth = style.borderSize + 'px';\n        } else {\n            (element.firstElementChild as HTMLImageElement).src = style.image;\n        }\n    }\n\n    /**\n     * Dispatch event when a hotspot is clicked\n     */\n    private __clickHotspot(hotspotId: string) {\n        this.plugin.dispatchEvent(new SelectHotspot(hotspotId));\n\n        if (hotspotId.startsWith(HOTSPOT_MARKER_ID)) {\n            const markerId = hotspotId.substring(HOTSPOT_MARKER_ID.length);\n            this.viewer.getPlugin<MarkersPlugin>('markers').gotoMarker(markerId);\n        }\n\n        if (this.maximized && this.config.minimizeOnHotspotClick) {\n            this.toggleMaximized();\n        }\n    }\n\n    private __onToggleGallery(visible: boolean) {\n        if (!visible) {\n            this.container.style.marginBottom = '';\n        } else {\n            this.container.style.marginBottom = (this.viewer.container.querySelector<HTMLElement>('.psv-gallery').offsetHeight + 10) + 'px';\n        }\n    }\n\n    private __onKeyPress(e: events.KeypressEvent) {\n        if (e.matches(CONSTANTS.KEY_CODES.Escape)) {\n            this.toggleMaximized();\n            return;\n        }\n    }\n}\n","export const OSM_LABEL = 'OpenStreetMap';\nexport const OSM_URL = 'https://tile.openstreetmap.org/{z}/{x}/{y}.png';\nexport const OSM_ATTRIBUTION = '&copy; <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a>';\n\nexport const MARKER_DATA_KEY = 'plan';\nexport const HOTSPOT_GENERATED_ID = '__generated__';\nexport const HOTSPOT_MARKER_ID = '__marker__';\n","import { DivIcon, LatLngLiteral } from 'leaflet';\nimport { GpsPosition, PlanHotspotStyle } from './model';\n\nexport function gpsToLeaflet(gps: GpsPosition): LatLngLiteral {\n    return { lng: gps[0], lat: gps[1], alt: gps[2] };\n}\n\nexport function createLeafletIcon(src: string, size: number, className: string): DivIcon {\n    return new DivIcon({\n        html: src && !src.includes('<svg') ? `<img src=\"${src}\" style=\"width: 100%; height: 100%\">` : src,\n        iconSize: [size, size],\n        iconAnchor: [size / 2, size / 2],\n        className,\n    });\n}\n\nexport function getStyle(defaultStyle: PlanHotspotStyle, style: PlanHotspotStyle, isHover: boolean) {\n    return {\n        image: isHover\n            ? style.hoverImage ?? style.image ?? defaultStyle.hoverImage ?? defaultStyle.image\n            : style.image ?? defaultStyle.image,\n        size: isHover\n            ? style.hoverSize ?? style.size ?? defaultStyle.hoverSize ?? defaultStyle.size\n            : style.size ?? defaultStyle.size,\n        color: isHover\n            ? style.hoverColor ?? style.color ?? defaultStyle.hoverColor ?? defaultStyle.color\n            : style.color ?? defaultStyle.color,\n        borderColor: isHover\n            ? style.hoverBorderColor ?? style.borderColor ?? defaultStyle.hoverBorderColor ?? defaultStyle.borderColor\n            : style.borderColor ?? defaultStyle.borderColor ?? 'transparent',\n        borderSize: isHover\n            ? style.hoverBorderSize ?? defaultStyle.hoverBorderSize\n            : style.borderSize ?? defaultStyle.borderSize,\n    };\n}\n","import { CONSTANTS } from '@photo-sphere-viewer/core';\nimport icon from '../icons/map.svg';\nimport { AbstractPlanButton, ButtonPosition } from './AbstractPlanButton';\nimport type { PlanComponent } from './PlanComponent';\n\nexport class PlanCloseButton extends AbstractPlanButton {\n    constructor(plan: PlanComponent) {\n        super(plan, ButtonPosition.DEFAULT);\n\n        this.container.addEventListener('click', (e) => {\n            plan.toggleCollapse();\n            e.stopPropagation();\n        });\n    }\n\n    override applyConfig(): void {\n        super.applyConfig();\n        this.container.classList.add('psv-plan__button-close');\n    }\n\n    override update() {\n        this.container.innerHTML = this.plan.collapsed ? icon : CONSTANTS.ICONS.close;\n        this.container.title = this.plan.collapsed ? this.viewer.config.lang['map'] : this.viewer.config.lang.close;\n    }\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\" fill=\"currentColor\"><path d=\"M26.629,3.472c1.493,1.397,2.433,3.378,2.433,5.58c0,0.691-0.093,1.379-0.276,2.045c-0.076,0.273-0.166,0.541-0.271,0.8   l-0.201,0.458l-6.902,12.759l-7.11-13.235c-0.106-0.267-0.191-0.521-0.263-0.783c-0.184-0.663-0.277-1.351-0.277-2.044   c0-2.167,0.909-4.122,2.362-5.515l-4.956-3.195V5.05h-1V0.239L0,5.419V32l10.168-6.339V20.51h1v5.153l9.744,6.074v-4.897h1v4.812   L32,25.597V0L26.629,3.472z M11.168,17.732h-1v-3.564h1V17.732z M11.168,11.391h-1V7.827h1V11.391z\"/><circle cx=\"21.412\" cy=\"8.987\" r=\"2.664\"/><path d=\"M21.412,2.401c-3.667,0-6.65,2.983-6.65,6.65c0,0.603,0.081,1.202,0.241,1.778c0.062,0.227,0.137,0.449,0.222,0.665   l0.209,0.475l5.979,11.043l6.182-11.504c0.085-0.21,0.163-0.442,0.228-0.678c0.16-0.579,0.241-1.177,0.241-1.779   C28.062,5.385,25.079,2.401,21.412,2.401z M21.412,12.651c-2.021,0-3.664-1.644-3.664-3.664s1.644-3.664,3.664-3.664   s3.664,1.644,3.664,3.664S23.433,12.651,21.412,12.651z\"/><!-- Created by Icons By Alfredo from the Noun Project --></svg>\n","import { AbstractComponent } from '@photo-sphere-viewer/core';\nimport { PlanComponent } from './PlanComponent';\n\nexport const enum ButtonPosition {\n    DEFAULT,\n    DIAGONAL,\n    HORIZONTAL,\n    VERTICAL,\n}\n\nconst INVERT_POSITIONS: Record<string, string> = {\n    top: 'bottom',\n    bottom: 'top',\n    left: 'right',\n    right: 'left',\n};\n\nfunction getButtonPosition(mapPosition: [string, string], direction: ButtonPosition): [string, string] {\n    switch (direction) {\n        case ButtonPosition.DIAGONAL:\n            return [INVERT_POSITIONS[mapPosition[0]], INVERT_POSITIONS[mapPosition[1]]];\n        case ButtonPosition.HORIZONTAL:\n            return [mapPosition[0], INVERT_POSITIONS[mapPosition[1]]];\n        case ButtonPosition.VERTICAL:\n            return [INVERT_POSITIONS[mapPosition[0]], mapPosition[1]];\n        default:\n            return mapPosition;\n    }\n}\n\nexport abstract class AbstractPlanButton extends AbstractComponent {\n    constructor(\n        protected plan: PlanComponent,\n        private position: ButtonPosition,\n    ) {\n        super(plan, {});\n    }\n\n    applyConfig() {\n        this.container.className = `psv-plan__button psv-plan__button--${getButtonPosition(this.plan.config.position, this.position).join('-')}`;\n        this.update();\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    update() {}\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"20 20 60 60\" fill=\"currentColor\"><path d=\"M21.94,40.2,49.22,51.84a2,2,0,0,0,1.57,0L78.06,40.2a2,2,0,0,0,0-3.68L50.78,24.89a2,2,0,0,0-1.57,0L21.94,36.52a2,2,0,0,0,0,3.68Z\"/><path d=\"M76.49,59.8,50,71.1,23.51,59.8a2,2,0,0,0-1.57,3.68L49.22,75.11a2,2,0,0,0,1.57,0L78.06,63.48a2,2,0,0,0-1.57-3.68Z\"/><path d=\"M76.49,48.16,50,59.46,23.51,48.16a2,2,0,0,0-1.57,3.68L49.22,63.48a2,2,0,0,0,1.57,0L78.06,51.84a2,2,0,0,0-1.57-3.68Z\"/><!-- Created by Prithvi from the Noun Project --></svg>\n","import layersIcon from '../icons/layers.svg';\nimport { AbstractPlanButton, ButtonPosition } from './AbstractPlanButton';\nimport type { PlanComponent } from './PlanComponent';\n\nexport class PlanLayersButton extends AbstractPlanButton {\n    private select: HTMLSelectElement;\n\n    constructor(plan: PlanComponent) {\n        super(plan, ButtonPosition.VERTICAL);\n\n        this.container.innerHTML = layersIcon;\n\n        this.select = document.createElement('select');\n        this.select.className = 'psv-plan__layers-select';\n\n        const placeholder = document.createElement('option');\n        placeholder.disabled = true;\n        this.select.appendChild(placeholder);\n\n        this.select.addEventListener('change', () => {\n            plan.setLayer(this.select.value);\n            this.__setSelected();\n        });\n\n        this.container.appendChild(this.select);\n\n        this.hide();\n    }\n\n    override update() {\n        const title = this.viewer.config.lang['mapLayers'];\n\n        this.container.title = title;\n        this.select.setAttribute('aria-label', title);\n        this.select.querySelector('option').innerText = title;\n    }\n\n    setLayers(layers: string[]) {\n        this.show();\n\n        layers.forEach((title) => {\n            const option = document.createElement('option');\n            option.value = title;\n            option.innerText = title;\n            this.select.appendChild(option);\n        });\n\n        this.select.value = layers[0];\n        this.__setSelected();\n    }\n\n    private __setSelected() {\n        this.select.querySelector<HTMLElement>('[selected]')?.removeAttribute('selected');\n        this.select.querySelector<HTMLElement>(`[value=\"${this.select.value}\"]`).setAttribute('selected', 'selected');\n    }\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\"><path d=\"M18 0h-6v2h6v6h2V0zM2 18v-6H0v8h8v-2z\"/><!-- Created by Stepan Voevodin from the Noun Project --></svg>\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\"><path d=\"M14 6V0h-2v8h8V6zM0 12v2h6v6h2v-8H6z\"/><!-- Created by Stepan Voevodin from the Noun Project --></svg>\n","import maximize from '../icons/maximize.svg';\nimport minimize from '../icons/minimize.svg';\nimport { AbstractPlanButton, ButtonPosition } from './AbstractPlanButton';\nimport type { PlanComponent } from './PlanComponent';\n\nconst ROTATION: Record<string, number> = {\n    'bottom-left': 0,\n    'bottom-right': -90,\n    'top-right': 180,\n    'top-left': 90,\n};\n\nexport class PlanMaximizeButton extends AbstractPlanButton {\n    constructor(plan: PlanComponent) {\n        super(plan, ButtonPosition.DIAGONAL);\n\n        this.container.addEventListener('click', (e) => {\n            plan.toggleMaximized();\n            e.stopPropagation();\n        });\n    }\n\n    override update() {\n        this.container.innerHTML = this.plan.maximized ? minimize : maximize;\n        this.container.querySelector('svg').style.transform = `rotate3d(0, 0, 1, ${ROTATION[this.plan.config.position.join('-')]}deg)`;\n        this.container.title = this.plan.maximized\n            ? this.viewer.config.lang['mapMinimize']\n            : this.viewer.config.lang['mapMaximize'];\n    }\n}\n","<svg viewBox=\"170 100 360 360\" xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"currentColor\"><path d=\"M518.6 269h-18.5a150.8 150.8 0 0 0-138-137.9v-20.9c0-5.8-4.7-10.6-10.5-10.6h-3.2c-5.8 0-10.6 4.8-10.6 10.6v21A150.8 150.8 0 0 0 200 269h-18.5c-5.9 0-10.6 4.7-10.6 10.6v3.2c0 5.8 4.7 10.5 10.6 10.5h18.5c6 73.4 64.6 132 138 138v18.5c0 5.8 4.7 10.6 10.5 10.6h3.2c5.8 0 10.6-4.8 10.6-10.6v-18.6c73.3-5.9 132-64.5 137.9-137.9h18.5c5.9 0 10.6-4.7 10.6-10.5v-3.2c0-5.9-4.7-10.6-10.6-10.6zM362.2 414.4v-9.8c0-5.9-4.8-10.6-10.6-10.6h-3.2c-5.8 0-10.6 4.7-10.6 10.6v9.8a134 134 0 0 1-121-121h9.8c5.9 0 10.6-4.8 10.6-10.6v-3.2c0-5.9-4.7-10.6-10.6-10.6h-9.8a134 134 0 0 1 121-121v7.5c0 5.8 4.8 10.5 10.6 10.5h3.2c5.8 0 10.6-4.7 10.6-10.5V148a134 134 0 0 1 121 121h-9.8c-5.9 0-10.6 4.7-10.6 10.6v3.2c0 5.8 4.7 10.5 10.6 10.5h9.8a134 134 0 0 1-121 121z\"/><path d=\"M355.4 222a6 6 0 0 0-10.7 0L291 320a8.3 8.3 0 0 0 9.7 12l39.2-11.7c6.6-2 13.6-2 20.2 0l39.2 11.7a8.3 8.3 0 0 0 9.7-12z\"/></g><!-- Created by muhammad benani from Noun Project --></svg>\n","import reset from '../icons/reset.svg';\nimport { AbstractPlanButton, ButtonPosition } from './AbstractPlanButton';\nimport type { PlanComponent } from './PlanComponent';\n\nexport class PlanResetButton extends AbstractPlanButton {\n    constructor(plan: PlanComponent) {\n        super(plan, ButtonPosition.HORIZONTAL);\n\n        this.container.innerHTML = reset;\n        this.container.querySelector('svg').style.width = '80%';\n\n        this.container.addEventListener('click', (e) => {\n            plan.reset();\n            e.stopPropagation();\n        });\n    }\n\n    override update() {\n        this.container.title = this.viewer.config.lang['mapReset'];\n    }\n}\n","<svg viewBox=\"0 0 700 700\" xmlns=\"http://www.w3.org/2000/svg\">\n    <circle cx=\"350\" cy=\"350\" r=\"160\" fill=\"white\"/>\n    <circle cx=\"350\" cy=\"350\" r=\"120\" fill=\"#1E78E6\"/>\n    <path fill=\"rgba(255,255,255,0.8)\" d=\"M222,222 L103,103 A353,353,0,0,1,597,103 L478,222 A180,180,0,0,0,222,222\"/>\n</svg>\n"],"mappings":"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","names":["import_core","import_core","import_core","import_leaflet","import_core","import_core"]}