{"version":3,"sources":["src/index.ts","src/events.ts","src/GalleryButton.ts","src/icons/gallery.svg","src/GalleryPlugin.ts","src/GalleryComponent.ts","src/constants.ts","src/icons/arrow.svg","src/icons/blank.svg","src/utils.ts"],"sourcesContent":["import { DEFAULTS, registerButton } from '@photo-sphere-viewer/core';\nimport * as events from './events';\nimport { GalleryButton } from './GalleryButton';\n\nDEFAULTS.lang[GalleryButton.id] = 'Gallery';\nregisterButton(GalleryButton, 'caption:left');\n\nexport { GalleryPlugin } from './GalleryPlugin';\nexport * from './model';\nexport { events };\n\n/** @internal  */\nimport './styles/index.scss';\n","import { TypedEvent } from '@photo-sphere-viewer/core';\nimport type { GalleryPlugin } from './GalleryPlugin';\n\n/**\n * @event Triggered when the gallery shown\n */\nexport class ShowGalleryEvent extends TypedEvent<GalleryPlugin> {\n    static override readonly type = 'show-gallery';\n    override type: 'show-gallery';\n\n    /** @internal */\n    constructor(public readonly fullscreen: boolean) {\n        super(ShowGalleryEvent.type);\n    }\n}\n\n/**\n * @event Triggered when the gallery hidden\n */\nexport class HideGalleryEvent extends TypedEvent<GalleryPlugin> {\n    static override readonly type = 'hide-gallery';\n    override type: 'hide-gallery';\n\n    /** @internal */\n    constructor() {\n        super(HideGalleryEvent.type);\n    }\n}\n\nexport type GalleryPluginEvents = ShowGalleryEvent | HideGalleryEvent;\n","import { AbstractButton } from '@photo-sphere-viewer/core';\nimport type { Navbar } from '@photo-sphere-viewer/core';\nimport type { GalleryPlugin } from './GalleryPlugin';\nimport gallery from './icons/gallery.svg';\nimport { HideGalleryEvent, ShowGalleryEvent } from './events';\n\nexport class GalleryButton extends AbstractButton {\n    static override readonly id = 'gallery';\n\n    private readonly plugin: GalleryPlugin;\n\n    /**\n     * @param {PSV.components.Navbar} navbar\n     */\n    constructor(navbar: Navbar) {\n        super(navbar, {\n            className: 'psv-gallery-button',\n            hoverScale: true,\n            collapsable: true,\n            tabbable: true,\n            icon: gallery,\n        });\n\n        this.plugin = this.viewer.getPlugin('gallery');\n\n        if (this.plugin) {\n            this.plugin.addEventListener(ShowGalleryEvent.type, this);\n            this.plugin.addEventListener(HideGalleryEvent.type, this);\n        }\n    }\n\n    override destroy() {\n        if (this.plugin) {\n            this.plugin.removeEventListener(ShowGalleryEvent.type, this);\n            this.plugin.removeEventListener(HideGalleryEvent.type, this);\n        }\n\n        super.destroy();\n    }\n\n    /**\n     * @internal\n     */\n    handleEvent(e: Event) {\n        if (e instanceof ShowGalleryEvent) {\n            this.toggleActive(true);\n        } else if (e instanceof HideGalleryEvent) {\n            this.toggleActive(false);\n        }\n    }\n\n    override isSupported() {\n        return !!this.plugin;\n    }\n\n    onClick() {\n        this.plugin.toggle();\n    }\n}\n","<svg viewBox=\"185 115 330 330\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"currentColor\" d=\"M186.7 326.7V163.3c0-15 8.3-23.3 23.3-23.3h210c15 0 23.3 8.3 23.3 23.3v163.4c0 15-8.3 23.3-23.3 23.3H210c-15 0-23.3-8.3-23.3-23.3zm70 70v-23.4H420c30.2 0 46.7-16.4 46.7-46.6V210H490c15 0 23.3 8.3 23.3 23.3v163.4c0 15-8.3 23.3-23.3 23.3H280c-15 0-23.3-8.3-23.3-23.3zm-23.8-105H397l-40-50.4-26.7 29.7-44.3-54.5zm106.7-76c9.6 0 17.8-7.8 17.8-17.2a18 18 0 0 0-17.8-17.8c-9.4 0-17.2 8.2-17.2 17.8 0 9.4 7.8 17.2 17.2 17.2z\"/><!--Created by Wolf Böse from the Noun Project--></svg>","import type { PluginConstructor, Viewer } from '@photo-sphere-viewer/core';\nimport { AbstractConfigurablePlugin, events, PSVError, utils } from '@photo-sphere-viewer/core';\nimport type { MapPlugin } from '@photo-sphere-viewer/map-plugin';\nimport type { PlanPlugin } from '@photo-sphere-viewer/plan-plugin';\nimport { GalleryPluginEvents, HideGalleryEvent, ShowGalleryEvent } from './events';\nimport { GalleryButton } from './GalleryButton';\nimport { GalleryComponent } from './GalleryComponent';\nimport { GalleryItem, GalleryPluginConfig, UpdatableGalleryPluginConfig } from './model';\n\nconst getConfig = utils.getConfigParser<GalleryPluginConfig>({\n    items: [],\n    navigationArrows: true,\n    visibleOnLoad: false,\n    hideOnClick: true,\n    thumbnailSize: {\n        width: 200,\n        height: 100,\n    },\n});\n\n/**\n * Adds a gallery of multiple panoramas\n */\nexport class GalleryPlugin extends AbstractConfigurablePlugin<\n    GalleryPluginConfig,\n    GalleryPluginConfig,\n    UpdatableGalleryPluginConfig,\n    GalleryPluginEvents\n> {\n    static override readonly id = 'gallery';\n    static override readonly VERSION = PKG_VERSION;\n    static override readonly configParser = getConfig;\n    static override readonly readonlyOptions: Array<keyof GalleryPluginConfig> = ['items', 'navigationArrows', 'visibleOnLoad'];\n\n    private readonly gallery: GalleryComponent;\n\n    private items: GalleryItem[] = [];\n    private handler?: (id: GalleryItem['id']) => void;\n    private currentId?: GalleryItem['id'];\n\n    private map?: MapPlugin;\n    private plan?: PlanPlugin;\n\n    static withConfig(config: GalleryPluginConfig): [PluginConstructor, any] {\n        return [GalleryPlugin, config];\n    }\n\n    constructor(viewer: Viewer, config: GalleryPluginConfig) {\n        super(viewer, config);\n\n        this.gallery = new GalleryComponent(this, this.viewer);\n    }\n\n    /**\n     * @internal\n     */\n    override init() {\n        super.init();\n\n        utils.checkStylesheet(this.viewer.container, 'gallery-plugin');\n\n        this.map = this.viewer.getPlugin('map');\n        this.plan = this.viewer.getPlugin('plan');\n\n        this.viewer.addEventListener(events.PanoramaLoadedEvent.type, this);\n        this.viewer.addEventListener(events.ShowPanelEvent.type, this);\n\n        if (this.config.visibleOnLoad) {\n            this.viewer.addEventListener(events.ReadyEvent.type, () => {\n                if (this.items.length) {\n                    this.show();\n                }\n            }, { once: true });\n        }\n\n        this.setItems(this.config.items);\n        delete this.config.items;\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.PanoramaLoadedEvent.type, this);\n        this.viewer.removeEventListener(events.ShowPanelEvent.type, this);\n\n        this.gallery.destroy();\n\n        super.destroy();\n    }\n\n    override setOptions(options: Partial<UpdatableGalleryPluginConfig>) {\n        super.setOptions(options);\n\n        if (options.thumbnailSize) {\n            this.gallery.setItems(this.items);\n        }\n    }\n\n    /**\n     * @internal\n     */\n    handleEvent(e: Event) {\n        if (e instanceof events.PanoramaLoadedEvent) {\n            const item = this.items.find(i => utils.deepEqual(i.panorama, e.data.panorama));\n            this.currentId = item?.id;\n            this.gallery.setActive(this.currentId);\n        } else if (e instanceof events.ShowPanelEvent) {\n            this.gallery.isVisible() && this.hide();\n        }\n    }\n\n    /**\n     * Shows the gallery\n     */\n    show() {\n        this.map?.minimize();\n        this.plan?.minimize();\n\n        this.dispatchEvent(new ShowGalleryEvent(!this.gallery.isAboveBreakpoint));\n        return this.gallery.show();\n    }\n\n    /**\n     * Hides the carousem\n     */\n    hide() {\n        this.dispatchEvent(new HideGalleryEvent());\n        return this.gallery.hide();\n    }\n\n    /**\n     * Hides or shows the gallery\n     */\n    toggle() {\n        if (this.gallery.isVisible()) {\n            this.hide();\n        } else {\n            this.show();\n        }\n    }\n\n    isVisible() {\n        return this.gallery.isVisible();\n    }\n\n    /**\n     * Sets the list of items\n     * @param items\n     * @param [handler] function that will be called when an item is clicked instead of the default behavior\n     * @throws {@link PSVError} if the configuration is invalid\n     */\n    setItems(items: GalleryItem[] | null, handler?: (id: GalleryItem['id']) => void) {\n        if (!items) {\n            items = [];\n        } else {\n            items.forEach((item, i) => {\n                if (!item.id) {\n                    throw new PSVError(`Item ${i} has no \"id\".`);\n                }\n                if (!item.panorama) {\n                    throw new PSVError(`Item \"${item.id}\" has no \"panorama\".`);\n                }\n            });\n        }\n\n        this.handler = handler;\n        this.items = items.map(item => ({\n            ...item,\n            id: `${item.id}`,\n        }));\n\n        this.gallery.setItems(this.items);\n\n        if (this.currentId) {\n            const item = this.items.find(i => i.id === this.currentId);\n            this.currentId = item?.id;\n            this.gallery.setActive(this.currentId);\n        }\n\n        if (!this.items.length) {\n            this.gallery.hide();\n        }\n\n        this.__updateButton();\n    }\n\n    /**\n     * @internal\n     */\n    applyItem(id: GalleryItem['id']) {\n        if (id === this.currentId) {\n            return;\n        }\n\n        if (this.handler) {\n            this.handler(id);\n        } else {\n            const item = this.items.find(i => i.id === id);\n            this.viewer.setPanorama(item.panorama, {\n                caption: item.name,\n                ...item.options,\n            });\n        }\n\n        this.currentId = id;\n    }\n\n    private __updateButton() {\n        this.viewer.navbar.getButton(GalleryButton.id, false)?.toggle(this.items.length > 0);\n    }\n}\n","import type { Viewer } from '@photo-sphere-viewer/core';\nimport { AbstractComponent, CONSTANTS, events, utils } from '@photo-sphere-viewer/core';\nimport { MathUtils } from 'three';\nimport { ACTIVE_CLASS, GALLERY_ITEM_DATA, GALLERY_ITEM_DATA_KEY, ITEMS_TEMPLATE } from './constants';\nimport { GalleryButton } from './GalleryButton';\nimport type { GalleryPlugin } from './GalleryPlugin';\nimport arrowIcon from './icons/arrow.svg';\nimport blankIcon from './icons/blank.svg';\nimport { GalleryItem } from './model';\nimport { clickRepeater } from './utils';\n\nexport class GalleryComponent extends AbstractComponent {\n    protected override readonly state = {\n        visible: true,\n        mousedown: false,\n        initMouse: null as number,\n        mouse: null as number,\n        itemMargin: null as number,\n        breakpoint: null as number,\n        scrollLeft: 0,\n        scrollTop: 0,\n        isAboveBreakpoint: null as boolean,\n    };\n\n    private readonly observer: IntersectionObserver;\n    private readonly items: HTMLElement;\n    private readonly arrowLeft?: HTMLElement;\n    private readonly arrowRight?: HTMLElement;\n\n    get isAboveBreakpoint() {\n        return this.items.offsetWidth > this.state.breakpoint;\n    }\n\n    get config() {\n        return this.plugin.config;\n    }\n\n    constructor(\n        private readonly plugin: GalleryPlugin,\n        viewer: Viewer,\n    ) {\n        super(viewer, {\n            className: `psv-gallery ${CONSTANTS.CAPTURE_EVENTS_CLASS}`,\n        });\n\n        this.container.innerHTML = blankIcon;\n        this.container.querySelector('svg').style.display = 'none';\n\n        const closeBtn = document.createElement('div');\n        closeBtn.className = 'psv-panel-close-button';\n        closeBtn.innerHTML = CONSTANTS.ICONS.close;\n        this.container.appendChild(closeBtn);\n\n        closeBtn.addEventListener('click', () => this.plugin.hide());\n\n        this.items = document.createElement('div');\n        this.items.className = 'psv-gallery-container';\n        this.container.appendChild(this.items);\n\n        if (this.config.navigationArrows) {\n            this.arrowLeft = document.createElement('div');\n            this.arrowLeft.className = 'psv-gallery-arrow';\n            this.arrowLeft.innerHTML = arrowIcon;\n            this.container.appendChild(this.arrowLeft);\n\n            this.arrowRight = document.createElement('div');\n            this.arrowRight.className = 'psv-gallery-arrow';\n            this.arrowRight.innerHTML = arrowIcon;\n            this.container.appendChild(this.arrowRight);\n\n            clickRepeater(this.arrowLeft, () => this.__scroll(-1));\n            clickRepeater(this.arrowRight, () => this.__scroll(1));\n        }\n\n        this.state.itemMargin = parseInt(utils.getStyleProperty(this.items, 'padding-left'), 10);\n        this.state.breakpoint = parseInt(utils.getStyleProperty(this.container, '--psv-gallery-breakpoint'), 10);\n\n        this.observer = new IntersectionObserver(\n            (entries) => {\n                entries.forEach((entry) => {\n                    if (entry.intersectionRatio > 0) {\n                        const element = entry.target as HTMLElement;\n                        element.style.backgroundImage = `url(\"${element.dataset.src}\")`;\n                        delete element.dataset.src;\n                        this.observer.unobserve(entry.target);\n                    }\n                });\n            },\n            {\n                root: this.viewer.container,\n            },\n        );\n\n        this.viewer.addEventListener(events.SizeUpdatedEvent.type, this);\n        this.container.addEventListener('transitionend', this);\n        this.container.addEventListener('keydown', this);\n        this.items.addEventListener('wheel', this);\n        this.items.addEventListener('scroll', this);\n        this.items.addEventListener('mousedown', this);\n        this.items.addEventListener('mousemove', this);\n        this.items.addEventListener('click', this);\n        window.addEventListener('mouseup', this);\n\n        this.hide();\n    }\n\n    override destroy() {\n        window.removeEventListener('mouseup', this);\n\n        this.viewer.removeEventListener(events.SizeUpdatedEvent.type, this);\n\n        this.observer.disconnect();\n\n        super.destroy();\n    }\n\n    /**\n     * @internal\n     */\n    handleEvent(e: Event) {\n        switch (e.type) {\n            case 'transitionend':\n                if (this.isVisible() && e.target === this.container) {\n                    this.__focusActiveOrFirst();\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.hide();\n                            break;\n                        case CONSTANTS.KEY_CODES.Enter:\n                            this.__click(e);\n                            break;\n                    }\n                }\n                break;\n\n            case 'wheel': {\n                const evt = e as WheelEvent;\n                this.__scroll(evt.deltaY > 0 ? 1 : -1);\n                e.preventDefault();\n                break;\n            }\n\n            case 'scroll':\n            case events.SizeUpdatedEvent.type:\n                this.__updateArrows();\n                break;\n\n            case 'mousedown':\n                this.state.mousedown = true;\n                if (this.isAboveBreakpoint) {\n                    this.state.initMouse = (e as MouseEvent).clientX;\n                } else {\n                    this.state.initMouse = (e as MouseEvent).clientY;\n                }\n                this.state.mouse = this.state.initMouse;\n                break;\n\n            case 'mousemove':\n                if (this.state.mousedown) {\n                    if (this.isAboveBreakpoint) {\n                        const delta = this.state.mouse - (e as MouseEvent).clientX;\n                        this.items.scrollLeft += delta;\n                        this.state.scrollLeft = this.items.scrollLeft;\n                        this.state.mouse = (e as MouseEvent).clientX;\n                    } else {\n                        const delta = this.state.mouse - (e as MouseEvent).clientY;\n                        this.items.scrollTop += delta;\n                        this.state.scrollTop = this.items.scrollTop;\n                        this.state.mouse = (e as MouseEvent).clientY;\n                    }\n                }\n                break;\n\n            case 'mouseup':\n                this.state.mousedown = false;\n                this.state.mouse = null;\n                e.preventDefault();\n                break;\n\n            case 'click': {\n                // prevent click on drag\n                const currentMouse = this.isAboveBreakpoint ? (e as MouseEvent).clientX : (e as MouseEvent).clientY;\n                if (Math.abs(this.state.initMouse - currentMouse) < 10) {\n                    this.__click(e);\n                }\n                break;\n            }\n        }\n    }\n\n    override show() {\n        this.container.classList.add('psv-gallery--open');\n        this.state.visible = true;\n    }\n\n    override hide() {\n        this.container.classList.remove('psv-gallery--open');\n        this.state.visible = false;\n\n        if (utils.hasParent(document.activeElement as HTMLElement, this.container)) {\n            this.viewer.navbar.focusButton(GalleryButton.id);\n        }\n    }\n\n    setItems(items: GalleryItem[]) {\n        this.items.innerHTML = ITEMS_TEMPLATE(items, this.plugin.config.thumbnailSize);\n\n        if (this.observer) {\n            this.observer.disconnect();\n\n            this.items.querySelectorAll('[data-src]').forEach((child) => {\n                this.observer.observe(child);\n            });\n        }\n\n        this.__updateArrows();\n    }\n\n    setActive(id: GalleryItem['id']) {\n        const currentActive = this.items.querySelector('.' + ACTIVE_CLASS);\n        currentActive?.classList.remove(ACTIVE_CLASS);\n\n        if (id) {\n            const nextActive = this.items.querySelector(`[data-${GALLERY_ITEM_DATA_KEY}=\"${id}\"]`) as HTMLElement;\n            if (nextActive) {\n                nextActive.classList.add(ACTIVE_CLASS);\n                this.items.scrollLeft = nextActive.offsetLeft + nextActive.clientWidth / 2 - this.items.clientWidth / 2;\n            }\n        }\n    }\n\n    /**\n     * Handle clicks on items\n     */\n    private __click(e: Event) {\n        const item = utils.getMatchingTarget(e, `.psv-gallery-item`);\n        if (!item) {\n            return;\n        }\n\n        const id = item.dataset[GALLERY_ITEM_DATA];\n\n        this.plugin.applyItem(id);\n\n        this.setActive(id);\n\n        if (this.config.hideOnClick || !this.isAboveBreakpoint) {\n            this.hide();\n        }\n    }\n\n    private __focusActiveOrFirst() {\n        const el = this.items.querySelector<HTMLElement>('.' + ACTIVE_CLASS) ?? this.items.firstElementChild as HTMLElement;\n        el?.focus();\n    }\n\n    /**\n     * Applies scroll\n     */\n    private __scroll(direction: 1 | -1) {\n        if (this.isAboveBreakpoint) {\n            const maxScroll = this.items.scrollWidth - this.items.offsetWidth;\n            const scrollAmount = this.plugin.config.thumbnailSize.width + (this.state.itemMargin ?? 0);\n\n            this.state.scrollLeft = MathUtils.clamp(this.state.scrollLeft + direction * scrollAmount, 0, maxScroll);\n            if (direction === -1 && this.state.scrollLeft < scrollAmount * 0.8) {\n                this.state.scrollLeft = 0;\n            }\n            if (direction === 1 && this.state.scrollLeft > maxScroll - scrollAmount * 0.8) {\n                this.state.scrollLeft = maxScroll;\n            }\n\n            this.items.scroll({\n                left: this.state.scrollLeft,\n                behavior: 'smooth',\n            });\n        } else {\n            const maxScroll = this.items.scrollHeight - this.items.offsetHeight;\n            const scrollAmount = this.items.querySelector<HTMLElement>(':first-child').offsetHeight * 2 + (this.state.itemMargin ?? 0);\n\n            this.state.scrollTop = MathUtils.clamp(this.state.scrollTop + direction * scrollAmount, 0, maxScroll);\n            if (direction === -1 && this.state.scrollTop < scrollAmount * 0.8) {\n                this.state.scrollTop = 0;\n            }\n            if (direction === 1 && this.state.scrollTop > maxScroll - scrollAmount * 0.8) {\n                this.state.scrollTop = maxScroll;\n            }\n\n            this.items.scroll({\n                top: this.state.scrollTop,\n                behavior: 'smooth',\n            });\n        }\n    }\n\n    /**\n     * Updates the arrows visibility and indicator size\n     */\n    private __updateArrows() {\n        if (!this.config.navigationArrows) {\n            return;\n        }\n\n        // switch between vertical and horizontal\n        if (this.state.isAboveBreakpoint !== this.isAboveBreakpoint) {\n            utils.toggleClass(this.arrowLeft, 'psv-gallery-arrow--left', this.isAboveBreakpoint);\n            utils.toggleClass(this.arrowLeft, 'psv-gallery-arrow--top', !this.isAboveBreakpoint);\n            utils.toggleClass(this.arrowRight, 'psv-gallery-arrow--right', this.isAboveBreakpoint);\n            utils.toggleClass(this.arrowRight, 'psv-gallery-arrow--bottom', !this.isAboveBreakpoint);\n\n            this.state.isAboveBreakpoint = this.isAboveBreakpoint;\n        }\n\n        const toggle = (el: HTMLElement, show: boolean) => {\n            if (show) {\n                el.style.opacity = '1';\n                el.style.pointerEvents = 'auto';\n            } else {\n                el.style.opacity = '0';\n                el.style.pointerEvents = 'none';\n            }\n        };\n\n        if (this.isAboveBreakpoint) {\n            const maxScroll = this.items.scrollWidth - this.items.offsetWidth;\n\n            toggle(this.arrowLeft, this.items.scrollLeft > 50);\n            toggle(this.arrowRight, this.items.scrollLeft < maxScroll - 50);\n        } else {\n            const maxScroll = this.items.scrollHeight - this.items.offsetHeight;\n\n            toggle(this.arrowLeft, this.items.scrollTop > 50);\n            toggle(this.arrowRight, this.items.scrollTop < maxScroll - 50);\n        }\n    }\n}\n","import type { Size } from '@photo-sphere-viewer/core';\nimport { utils } from '@photo-sphere-viewer/core';\nimport { GalleryItem } from './model';\n\n/**\n * Property name added to gallery items\n * @internal\n */\nexport const GALLERY_ITEM_DATA = 'psvGalleryItem';\n\n/**\n * Property name added to gallery items (dash-case)\n * @internal\n */\nexport const GALLERY_ITEM_DATA_KEY = utils.dasherize(GALLERY_ITEM_DATA);\n\n/**\n * Class added to active gallery items\n * @internal\n */\nexport const ACTIVE_CLASS = 'psv-gallery-item--active';\n\n/**\n * Gallery template\n * @internal\n */\nexport const ITEMS_TEMPLATE = (items: GalleryItem[], size: Size) => `\n${items.map(item => `\n<div class=\"psv-gallery-item\" \n     data-${GALLERY_ITEM_DATA_KEY}=\"${item.id}\"\n     style=\"width:${size.width}px; aspect-ratio:${size.width / size.height};\"\n     tabindex=\"0\">\n    ${item.name ? `<div class=\"psv-gallery-item-title\"><span>${item.name}</span></div>` : ''}\n    <svg class=\"psv-gallery-item-thumb\" viewBox=\"0 0 200 200\" preserveAspectRatio=\"xMidYMid slice\"><use href=\"#psvGalleryBlankIcon\"></use></svg>\n    ${item.thumbnail ? `<div class=\"psv-gallery-item-thumb\" data-src=\"${item.thumbnail}\"></div>` : ''}\n</div>\n`).join('')}\n`;\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"25 0 50 100\"><polygon fill=\"currentColor\" points=\"24.66 99.31 25.34 100 75.34 50 25.34 0 24.66 0.69 24.66 22.64 52.01 50 24.66 77.36 24.66 99.31\"/><!-- Created by Rainbow Designs from the Noun Project --></svg>\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 200\">\n  <defs>\n    <symbol id=\"psvGalleryBlankIcon\" viewBox=\"0 0 200 200\">\n      <rect x=\"0\" y=\"0\" width=\"200\" height=\"200\" fill=\"#666\"/>\n      <g transform=\"scale(0.25) translate(25 20) \" fill=\"#eee\">\n        <path d=\"M376 220.61c-85.84 0-155.39 69.56-155.39 155.39 0 85.84 69.56 155.39 155.39 155.39 85.84 0 155.39-69.56 155.39-155.39 0-85.84-69.56-155.39-155.39-155.39zm0 300.92c-80.41 0-145.53-65.12-145.53-145.53S295.59 230.47 376 230.47 521.53 295.59 521.53 376 456.41 521.53 376 521.53z\"/>\n        <path d=\"M467.27 300.03H284.74a18.21 18.21 0 0 0-18.25 18.25v115.43a18.21 18.21 0 0 0 18.25 18.26h182.53a18.21 18.21 0 0 0 18.25-18.26V318.28a18.2 18.2 0 0 0-18.25-18.25zm-190.91 18.25a8.64 8.64 0 0 1 8.39-8.38h182.53a8.64 8.64 0 0 1 8.38 8.38V413l-44.89-35.52c-.49-.5-.99-.5-1.48-.99h-2.46c-.5 0-1 0-1.48.5l-37.5 21.2-43.9-58.7-.5-.5s0-.48-.49-.48c0 0-.49 0-.49-.5-.49 0-.49-.49-.99-.49-.49 0-.49 0-.98-.49H337.53c-.5 0-.5.5-.99.5h-.49l-.5.48s-.48 0-.48.5l-58.7 65.12zM467.27 442.1H284.74a8.64 8.64 0 0 1-8.39-8.38v-15.3l63.15-68.07 42.92 57.22 1.48 1.48h.49c.5.5 1.48.5 1.97.5H388.83l38.47-21.72 46.37 36.5c.5.5 1.49 1 1.98 1v8.88c0 3.95-3.45 7.9-8.38 7.9z\"/>\n        <path d=\"M429.77 333.58a13.81 13.81 0 1 1-27.63 0 13.81 13.81 0 0 1 27.63 0\"/>\n      </g>\n    </symbol>\n  </defs>\n</svg>","export function clickRepeater(element: HTMLElement, cb: () => void) {\n    let interval: ReturnType<typeof setInterval>;\n\n    element.addEventListener('mousedown', () => {\n        cb();\n\n        clearInterval(interval);\n\n        interval = setInterval(() => {\n            // the element has been hidden\n            if (element.style.pointerEvents === 'none') {\n                clearInterval(interval);\n            } else {\n                cb();\n            }\n        }, 500);\n    });\n\n    element.addEventListener('mouseup', () => {\n        clearInterval(interval);\n    });\n}\n"],"mappings":"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","names":["import_core","import_core","import_core","import_core","import_core"]}