{"version":3,"sources":["src/index.ts","src/events.ts","src/SettingsButton.ts","src/icons/settings.svg","src/SettingsPlugin.ts","src/constants.ts","src/icons/check.svg","src/icons/chevron.svg","src/icons/switch-off.svg","src/icons/switch-on.svg","src/SettingsComponent.ts"],"sourcesContent":["import { DEFAULTS, registerButton } from '@photo-sphere-viewer/core';\nimport * as events from './events';\nimport { SettingsButton } from './SettingsButton';\n\nDEFAULTS.lang[SettingsButton.id] = 'Settings';\nregisterButton(SettingsButton, 'fullscreen:left');\n\nexport { SettingsPlugin } from './SettingsPlugin';\nexport * from './model';\nexport { events };\n\n/** @internal  */\nimport './styles/index.scss';\n","import { TypedEvent } from '@photo-sphere-viewer/core';\nimport type { SettingsPlugin } from './SettingsPlugin';\n\n/**\n * @event Triggered when a setting's value changes\n */\nexport class SettingChangedEvent extends TypedEvent<SettingsPlugin> {\n    static override readonly type = 'setting-changed';\n    override type: 'setting-changed';\n\n    /** @internal */\n    constructor(\n        public readonly settingId: string,\n        public readonly settingValue: boolean | string,\n    ) {\n        super(SettingChangedEvent.type);\n    }\n}\n\nexport type SettingsPluginEvents = SettingChangedEvent;\n","import type { Navbar } from '@photo-sphere-viewer/core';\nimport { AbstractButton } from '@photo-sphere-viewer/core';\nimport icon from './icons/settings.svg';\nimport type { SettingsPlugin } from './SettingsPlugin';\n\nexport class SettingsButton extends AbstractButton {\n    static override readonly id = 'settings';\n\n    private readonly plugin: SettingsPlugin;\n    private readonly badge: HTMLElement;\n\n    constructor(navbar: Navbar) {\n        super(navbar, {\n            className: 'psv-settings-button',\n            icon: icon,\n            hoverScale: true,\n            collapsable: false,\n            tabbable: true,\n        });\n\n        this.plugin = this.viewer.getPlugin('settings');\n\n        this.badge = document.createElement('div');\n        this.badge.className = 'psv-settings-badge';\n        this.badge.style.display = 'none';\n        this.container.appendChild(this.badge);\n    }\n\n    override isSupported() {\n        return !!this.plugin;\n    }\n\n    /**\n     * Toggles settings\n     */\n    onClick() {\n        this.plugin.toggleSettings();\n    }\n\n    /**\n     * Changes the badge value\n     */\n    setBadge(value: string) {\n        this.badge.innerText = value;\n        this.badge.style.display = value ? '' : 'none';\n    }\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"currentColor\" d=\"M98.4 43.7c-.8-.5-7-4.3-9.6-5.4l-3-7.5c.9-2.5 2.6-9.4 3-10.6a3.3 3.3 0 00-1-3.1L83 12.2a3.3 3.3 0 00-3-.9c-1 .2-8 2-10.7 3l-7.5-3.1c-1-2.4-4.8-8.6-5.4-9.6A3.3 3.3 0 0053.4 0h-6.8a3.4 3.4 0 00-2.9 1.6c-.5.8-4.2 7-5.4 9.6l-7.5 3-10.6-3a3.3 3.3 0 00-3.1 1L12.2 17a3.3 3.3 0 00-.9 3c.2 1 2 8 3 10.7l-3.1 7.5c-2.4 1-8.6 4.8-9.6 5.4A3.3 3.3 0 000 46.6v6.8a3.4 3.4 0 001.6 2.9c.8.5 7 4.2 9.6 5.4l3 7.5-3 10.6a3.3 3.3 0 001 3.1l4.8 4.9a3.3 3.3 0 003.1.9c1-.2 8-2 10.7-3l7.5 3c1 2.5 4.7 8.6 5.4 9.7a3.3 3.3 0 002.9 1.6h6.8a3.4 3.4 0 002.9-1.6c.5-.8 4.2-7 5.4-9.6l7.5-3c2.5.9 9.4 2.6 10.6 3a3.3 3.3 0 003.1-1l4.9-4.8a3.3 3.3 0 00.9-3.1c-.2-1-2-8-3-10.7l3-7.5c2.5-1 8.6-4.7 9.7-5.4a3.3 3.3 0 001.6-2.9v-6.8a3.3 3.3 0 00-1.6-2.9zM50 71.7A21.8 21.8 0 1171.8 50 21.8 21.8 0 0150 71.8z\"/><!-- Created by i cons from the Noun Project --></svg>\n","import type { PluginConstructor, Viewer } from '@photo-sphere-viewer/core';\nimport { AbstractPlugin, events, PSVError, utils } from '@photo-sphere-viewer/core';\nimport { LOCAL_STORAGE_KEY } from './constants';\nimport { SettingChangedEvent, SettingsPluginEvents } from './events';\nimport { OptionsSetting, Setting, SettingsPluginConfig, ToggleSetting } from './model';\nimport { SettingsButton } from './SettingsButton';\nimport { SettingsComponent } from './SettingsComponent';\n\nfunction getData() {\n    return JSON.parse(localStorage.getItem(LOCAL_STORAGE_KEY)) || {};\n}\n\nfunction setData(data: any) {\n    localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(data));\n}\n\nconst getConfig = utils.getConfigParser<SettingsPluginConfig>({\n    persist: false,\n    storage: {\n        set(settingId: string, value: boolean | string) {\n            const data = getData();\n            data[settingId] = value;\n            setData(data);\n        },\n        get(settingId: string) {\n            return getData()[settingId];\n        },\n    },\n});\n\n/**\n * Adds a button to access various settings\n */\nexport class SettingsPlugin extends AbstractPlugin<SettingsPluginEvents> {\n    static override readonly id = 'settings';\n    static override readonly VERSION = PKG_VERSION;\n\n    readonly config: SettingsPluginConfig;\n\n    private readonly component: SettingsComponent;\n    readonly settings: Setting[] = [];\n\n    static withConfig(config: SettingsPluginConfig): [PluginConstructor, any] {\n        return [SettingsPlugin, config];\n    }\n\n    constructor(viewer: Viewer, config: SettingsPluginConfig) {\n        super(viewer);\n\n        this.config = getConfig(config);\n\n        this.component = new SettingsComponent(this, this.viewer);\n    }\n\n    /**\n     * @internal\n     */\n    override init() {\n        super.init();\n\n        utils.checkStylesheet(this.viewer.container, 'settings-plugin');\n\n        this.viewer.addEventListener(events.ClickEvent.type, this);\n        this.viewer.addEventListener(events.ShowPanelEvent.type, this);\n\n        // buttons are initialized just after plugins\n        setTimeout(() => this.updateButton());\n    }\n\n    /**\n     * @internal\n     */\n    override destroy() {\n        this.viewer.removeEventListener(events.ClickEvent.type, this);\n        this.viewer.removeEventListener(events.ShowPanelEvent.type, this);\n\n        this.component.destroy();\n        this.settings.length = 0;\n\n        super.destroy();\n    }\n\n    /**\n     * @internal\n     */\n    handleEvent(e: Event) {\n        if (e instanceof events.ClickEvent || e instanceof events.ShowPanelEvent) {\n            if (this.component.isVisible()) {\n                this.hideSettings();\n            }\n        }\n    }\n\n    /**\n     * Registers a new setting\n     * @throws {@link PSVError} if the configuration is invalid\n     */\n    addSetting(setting: Setting) {\n        if (!setting.id) {\n            throw new PSVError('Missing setting id');\n        }\n        if (!setting.type) {\n            throw new PSVError('Missing setting type');\n        }\n        if (this.settings.some(s => s.id === setting.id)) {\n            throw new PSVError(`Setting \"${setting.id}\" already exists`);\n        }\n\n        if (setting.badge && this.settings.some(s => s.badge)) {\n            utils.logWarn('More than one setting with a badge are declared, the result is unpredictable.');\n        }\n\n        this.settings.push(setting);\n\n        if (this.component.isVisible()) {\n            this.showSettings(); // re-render\n        }\n\n        this.updateButton();\n\n        if (this.config.persist) {\n            Promise.resolve(this.config.storage.get(setting.id)).then((value) => {\n                switch (setting.type) {\n                    case 'toggle': {\n                        const toggle = setting as ToggleSetting;\n                        if (!utils.isNil(value) && value !== toggle.active()) {\n                            toggle.toggle();\n                            this.dispatchEvent(new SettingChangedEvent(toggle.id, toggle.active()));\n                        }\n                        break;\n                    }\n\n                    case 'options': {\n                        const options = setting as OptionsSetting;\n                        if (!utils.isNil(value) && value !== options.current()) {\n                            options.apply(value as string);\n                            this.dispatchEvent(new SettingChangedEvent(options.id, options.current()));\n                        }\n                        break;\n                    }\n\n                    default:\n                    // noop\n                }\n\n                this.updateButton();\n            });\n        }\n    }\n\n    /**\n     * Removes a setting\n     */\n    removeSetting(id: string) {\n        const idx = this.settings.findIndex(setting => setting.id === id);\n        if (idx !== -1) {\n            this.settings.splice(idx, 1);\n\n            if (this.component.isVisible()) {\n                this.component.show(); // re-render\n            }\n\n            this.updateButton();\n        }\n    }\n\n    /**\n     * Toggles the settings menu\n     */\n    toggleSettings() {\n        if (this.component.isVisible()) {\n            this.hideSettings();\n        } else {\n            this.showSettings();\n        }\n    }\n\n    /**\n     * Hides the settings menu\n     */\n    hideSettings() {\n        const button = this.__getButton();\n        button?.toggleActive(false);\n        this.component.hide();\n    }\n\n    /**\n     * Shows the settings menu\n     */\n    showSettings() {\n        const button = this.__getButton();\n        this.component.show(button?.container.getBoundingClientRect());\n        button?.toggleActive(true);\n    }\n\n    /**\n     * Updates the badge in the button\n     */\n    updateButton() {\n        const button = this.__getButton();\n        if (this.settings.length) {\n            const value = this.settings.find(s => s.badge)?.badge();\n            button?.show();\n            button?.setBadge(value);\n        } else {\n            button?.hide();\n        }\n    }\n\n    /**\n     * Toggles a setting\n     * @internal\n     */\n    toggleSettingValue(setting: ToggleSetting) {\n        const newValue = !setting.active(); // in case \"toggle\" is async\n\n        setting.toggle();\n\n        this.dispatchEvent(new SettingChangedEvent(setting.id, newValue));\n\n        if (this.config.persist) {\n            this.config.storage.set(setting.id, newValue);\n        }\n\n        this.updateButton();\n    }\n\n    /**\n     * Changes the value of an setting\n     * @internal\n     */\n    applySettingOption(setting: OptionsSetting, optionId: string) {\n        setting.apply(optionId);\n\n        this.dispatchEvent(new SettingChangedEvent(setting.id, optionId));\n\n        if (this.config.persist) {\n            this.config.storage.set(setting.id, optionId);\n        }\n\n        this.updateButton();\n    }\n\n    private __getButton() {\n        return this.viewer.navbar.getButton(SettingsButton.id, false) as SettingsButton;\n    }\n}\n","import { utils, ViewerConfig } from '@photo-sphere-viewer/core';\nimport check from './icons/check.svg';\nimport chevron from './icons/chevron.svg';\nimport switchOff from './icons/switch-off.svg';\nimport switchOn from './icons/switch-on.svg';\nimport { OptionsSetting, Setting, ToggleSetting } from './model';\n\nexport const LOCAL_STORAGE_KEY = 'psvSettings';\nexport const ID_PANEL = 'settings';\nexport const SETTING_DATA = 'settingId';\nexport const OPTION_DATA = 'optionId';\nexport const ID_BACK = '__back';\nexport const ID_ENTER = '__enter';\nexport const SETTING_DATA_KEY = utils.dasherize(SETTING_DATA);\nexport const OPTION_DATA_KEY = utils.dasherize(OPTION_DATA);\n\n/**\n * Setting item template, by type\n */\nexport const SETTINGS_TEMPLATE_: Record<Setting['type'], any> = {\n    options: (setting: OptionsSetting, lang: ViewerConfig['lang']) => {\n        const current = setting.current();\n        const option = setting.options().find(opt => opt.id === current);\n        return `\n<span class=\"psv-settings-item-label\">${lang[setting.label] ?? setting.label}</span>\n<span class=\"psv-settings-item-value\">${option?.label ?? current}</span>\n<span class=\"psv-settings-item-icon\">${chevron}</span>\n`;\n    },\n    toggle: (setting: ToggleSetting, lang: ViewerConfig['lang']) => `\n<span class=\"psv-settings-item-label\">${lang[setting.label] ?? setting.label}</span>\n<span class=\"psv-settings-item-value\">${setting.active() ? switchOn : switchOff}</span>\n`,\n};\n\n/**\n * Settings list template\n */\nexport const SETTINGS_TEMPLATE = (settings: Setting[], lang: ViewerConfig['lang']) => `\n<ul class=\"psv-settings-list\">\n${settings.map(setting => `\n    <li class=\"psv-settings-item\" tabindex=\"0\"\n        data-${SETTING_DATA_KEY}=\"${setting.id}\" data-${OPTION_DATA_KEY}=\"${ID_ENTER}\">\n        ${SETTINGS_TEMPLATE_[setting.type](setting, lang)}\n    </li>\n`).join('')}\n</ul>\n`;\n\n/**\n * Settings options template\n */\nexport const SETTING_OPTIONS_TEMPLATE = (setting: OptionsSetting, lang: ViewerConfig['lang']) => {\n    const current = setting.current();\n\n    return `\n<ul class=\"psv-settings-list\">\n    <li class=\"psv-settings-item psv-settings-item--header\" tabindex=\"0\"\n        data-${SETTING_DATA_KEY}=\"${setting.id}\" data-${OPTION_DATA_KEY}=\"${ID_BACK}\">\n        <span class=\"psv-settings-item-icon\">${chevron}</span>\n        <span class=\"psv-settings-item-label\">${lang[setting.label] ?? setting.label}</span>\n    </li>\n${setting.options().map(option => `\n    <li class=\"psv-settings-item\" tabindex=\"0\"\n        data-${SETTING_DATA_KEY}=\"${setting.id}\" data-${OPTION_DATA_KEY}=\"${option.id}\">\n        <span class=\"psv-settings-item-icon\">${option.id === current ? check : ''}</span>\n        <span class=\"psv-settings-item-value\">${lang[option.label] ?? option.label}</span>\n    </li>\n`).join('')}\n</ul>\n`;\n};\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 90 90\"><polygon fill=\"currentColor\" points=\"0,48 10,35 36,57 78,10 90,21 37,79 \"/><!-- Created by Zahroe from the Noun Project --></svg>\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><path fill=\"currentColor\" d=\"M86.2 50.7l-44 44-9.9-9.9 34.1-34.1-34.7-34.8L41.6 6z\"/><!-- Created by Renee Ramsey-Passmore from the Noun Project--></svg>\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 100\" width=\"2.4em\" height=\"1.2em\"><path fill=\"currentColor\" transform=\"scale(1.88) translate(0, -25)\" d=\"M72 73.2H44A26.4 26.4 0 0044 30h28a21.6 21.6 0 010 43.2M7.2 51.6a21.6 21.6 0 1143.2 0 21.6 21.6 0 01-43.2 0M72 25.2H28.8a26.4 26.4 0 000 52.8H72a26.4 26.4 0 000-52.8\"/><!-- Created by Nikita from the Noun Project --></svg>\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 100\" width=\"2.4em\" height=\"1.2em\"><path fill=\"currentColor\" transform=\"scale(1.88) translate(0, -25)\" d=\"M72 73.2A21.6 21.6 0 1172 30a21.6 21.6 0 010 43.2M2.4 51.6A26.4 26.4 0 0028.8 78H72a26.4 26.4 0 000-52.8H28.8A26.4 26.4 0 002.4 51.6\"/><!-- Created by Nikita from the Noun Project --></svg>\n","import type { Viewer } from '@photo-sphere-viewer/core';\nimport { AbstractComponent, CONSTANTS, utils } from '@photo-sphere-viewer/core';\nimport { ID_BACK, ID_ENTER, OPTION_DATA, SETTINGS_TEMPLATE, SETTING_DATA, SETTING_OPTIONS_TEMPLATE } from './constants';\nimport { OptionsSetting, ToggleSetting } from './model';\nimport { SettingsButton } from './SettingsButton';\nimport type { SettingsPlugin } from './SettingsPlugin';\n\nexport class SettingsComponent extends AbstractComponent {\n    constructor(\n        private readonly plugin: SettingsPlugin,\n        viewer: Viewer,\n    ) {\n        super(viewer, {\n            className: `psv-settings ${CONSTANTS.CAPTURE_EVENTS_CLASS}`,\n        });\n\n        this.container.addEventListener('click', this);\n        this.container.addEventListener('transitionend', this);\n        this.container.addEventListener('keydown', this);\n\n        this.hide();\n    }\n\n    handleEvent(e: Event) {\n        switch (e.type) {\n            case 'click':\n                this.__click(e);\n                break;\n\n            case 'transitionend':\n                if (e.target === this.container) {\n                    if (!this.isVisible()) {\n                        this.container.innerHTML = ''; // empty content after fade out\n                    } else {\n                        this.__focusFirstOption();\n                    }\n                }\n                break;\n\n            case 'keydown':\n                if (this.isVisible()) {\n                    switch ((e as KeyboardEvent).key) {\n                        case CONSTANTS.KEY_CODES.Escape:\n                            this.plugin.hideSettings();\n                            break;\n                        case CONSTANTS.KEY_CODES.Enter:\n                            this.__click(e);\n                            break;\n                    }\n                }\n                break;\n        }\n    }\n\n    override show(buttonPosition?: DOMRect) {\n        this.__showSettings(false);\n\n        this.container.classList.add('psv-settings--open');\n        this.container.style.right = '';\n        this.container.style.left = '';\n\n        if (buttonPosition) {\n            const viewerRect = this.viewer.container.getBoundingClientRect();\n            const buttonLeft = buttonPosition.left - viewerRect.left;\n            const buttonRight = viewerRect.right - buttonPosition.right;\n            const buttonWidth = buttonPosition.width;\n            const menuWidth = this.container.offsetWidth;\n\n            if (menuWidth >= buttonLeft + buttonWidth) {\n                // if the button is close to the left, stick the menu to the left side\n                this.container.style.left = '0px';\n            } else if (menuWidth >= buttonRight + buttonWidth) {\n                // if the button is close to the right, stick the menu to the right side\n                this.container.style.right = '0px';\n            } else if (buttonLeft + menuWidth < viewerRect.width) {\n                // if there is enough space on the right of the button, stick the menu to the left of the button\n                this.container.style.left = `${buttonLeft}px`;\n            } else {\n                // else stick to the right of the button\n                this.container.style.right = `${buttonRight}px`;\n            }\n        } else {\n            this.container.style.right = '0px';\n        }\n\n        this.state.visible = true;\n    }\n\n    override hide() {\n        this.container.classList.remove('psv-settings--open');\n        this.state.visible = false;\n\n        if (utils.hasParent(document.activeElement as HTMLElement, this.container)) {\n            this.viewer.navbar.focusButton(SettingsButton.id);\n        }\n    }\n\n    /**\n     * Handle clicks on items\n     */\n    private __click(e: Event) {\n        const li = utils.getMatchingTarget(e, '.psv-settings-item');\n        if (!li) {\n            return;\n        }\n\n        const settingId = li.dataset[SETTING_DATA];\n        const optionId = li.dataset[OPTION_DATA];\n\n        const setting = this.plugin.settings.find(s => s.id === settingId);\n\n        switch (optionId) {\n            case ID_BACK:\n                this.__showSettings(true);\n                break;\n\n            case ID_ENTER:\n                switch (setting.type) {\n                    case 'toggle':\n                        this.plugin.toggleSettingValue(setting as ToggleSetting);\n                        this.__showSettings(true); // re-render\n                        break;\n\n                    case 'options':\n                        this.__showOptions(setting as OptionsSetting);\n                        break;\n\n                    default:\n                    // noop\n                }\n                break;\n\n            default:\n                switch (setting.type) {\n                    case 'options':\n                        this.hide();\n                        this.plugin.applySettingOption(setting as OptionsSetting, optionId);\n                        break;\n\n                    default:\n                    // noop\n                }\n                break;\n        }\n    }\n\n    /**\n     * Shows the list of options\n     */\n    private __showSettings(focus: boolean) {\n        this.container.innerHTML = SETTINGS_TEMPLATE(this.plugin.settings, this.viewer.config.lang);\n\n        // must not focus during the initial transition\n        if (focus) {\n            this.__focusFirstOption();\n        }\n    }\n\n    /**\n     * Shows setting options panel\n     */\n    private __showOptions(setting: OptionsSetting) {\n        this.container.innerHTML = SETTING_OPTIONS_TEMPLATE(setting, this.viewer.config.lang);\n\n        this.__focusFirstOption();\n    }\n\n    private __focusFirstOption() {\n        this.container.querySelector<HTMLElement>('[tabindex]')?.focus();\n    }\n}\n"],"mappings":"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","names":["import_core","import_core","import_core","import_core","import_core"]}