{"version":3,"file":"index.mjs","sources":["../../src/popover/BasePopover.vue","../../src/popover/Popover.vue","../../src/popover/Popover.vue?vue&type=template&id=6c45cba8&lang.js"],"sourcesContent":["<script>\nimport BaseComponent from '@primevue/core/basecomponent';\nimport PopoverStyle from 'primevue/popover/style';\n\nexport default {\n    name: 'BasePopover',\n    extends: BaseComponent,\n    props: {\n        dismissable: {\n            type: Boolean,\n            default: true\n        },\n        appendTo: {\n            type: [String, Object],\n            default: 'body'\n        },\n        baseZIndex: {\n            type: Number,\n            default: 0\n        },\n        autoZIndex: {\n            type: Boolean,\n            default: true\n        },\n        breakpoints: {\n            type: Object,\n            default: null\n        },\n        closeOnEscape: {\n            type: Boolean,\n            default: true\n        }\n    },\n    style: PopoverStyle,\n    provide() {\n        return {\n            $pcPopover: this,\n            $parentInstance: this\n        };\n    }\n};\n</script>\n","<template>\n    <Portal :appendTo=\"appendTo\">\n        <transition name=\"p-popover\" @enter=\"onEnter\" @leave=\"onLeave\" @after-leave=\"onAfterLeave\" v-bind=\"ptm('transition')\">\n            <div v-if=\"visible\" :ref=\"containerRef\" v-focustrap role=\"dialog\" :aria-modal=\"visible\" @click=\"onOverlayClick\" :class=\"cx('root')\" v-bind=\"ptmi('root')\">\n                <slot v-if=\"$slots.container\" name=\"container\" :closeCallback=\"hide\" :keydownCallback=\"(event) => onButtonKeydown(event)\"></slot>\n                <template v-else>\n                    <div :class=\"cx('content')\" @click=\"onContentClick\" @mousedown=\"onContentClick\" @keydown=\"onContentKeydown\" v-bind=\"ptm('content')\">\n                        <slot></slot>\n                    </div>\n                </template>\n            </div>\n        </transition>\n    </Portal>\n</template>\n\n<script>\nimport { ConnectedOverlayScrollHandler, UniqueComponentId } from '@primevue/core/utils';\nimport { addStyle, absolutePosition, getOffset, addClass, focus, isClient, isTouchDevice, setAttribute } from '@primeuix/utils/dom';\nimport { ZIndex } from '@primeuix/utils/zindex';\nimport { $dt } from '@primeuix/styled';\nimport FocusTrap from 'primevue/focustrap';\nimport OverlayEventBus from 'primevue/overlayeventbus';\nimport Portal from 'primevue/portal';\nimport Ripple from 'primevue/ripple';\nimport BasePopover from './BasePopover.vue';\n\nexport default {\n    name: 'Popover',\n    extends: BasePopover,\n    inheritAttrs: false,\n    emits: ['show', 'hide'],\n    data() {\n        return {\n            visible: false\n        };\n    },\n    watch: {\n        dismissable: {\n            immediate: true,\n            handler(newValue) {\n                if (newValue) {\n                    this.bindOutsideClickListener();\n                } else {\n                    this.unbindOutsideClickListener();\n                }\n            }\n        }\n    },\n    selfClick: false,\n    target: null,\n    eventTarget: null,\n    outsideClickListener: null,\n    scrollHandler: null,\n    resizeListener: null,\n    container: null,\n    styleElement: null,\n    overlayEventListener: null,\n    documentKeydownListener: null,\n    beforeUnmount() {\n        if (this.dismissable) {\n            this.unbindOutsideClickListener();\n        }\n\n        if (this.scrollHandler) {\n            this.scrollHandler.destroy();\n            this.scrollHandler = null;\n        }\n\n        this.destroyStyle();\n        this.unbindResizeListener();\n        this.target = null;\n\n        if (this.container && this.autoZIndex) {\n            ZIndex.clear(this.container);\n        }\n\n        if (this.overlayEventListener) {\n            OverlayEventBus.off('overlay-click', this.overlayEventListener);\n            this.overlayEventListener = null;\n        }\n\n        this.container = null;\n    },\n    mounted() {\n        if (this.breakpoints) {\n            this.createStyle();\n        }\n    },\n    methods: {\n        toggle(event, target) {\n            if (this.visible) this.hide();\n            else this.show(event, target);\n        },\n        show(event, target) {\n            this.visible = true;\n            this.eventTarget = event.currentTarget;\n            this.target = target || event.currentTarget;\n        },\n        hide() {\n            this.visible = false;\n        },\n        onContentClick() {\n            this.selfClick = true;\n        },\n        onEnter(el) {\n            this.container.setAttribute(this.attributeSelector, '');\n            addStyle(el, { position: 'absolute', top: '0', left: '0' });\n            this.alignOverlay();\n\n            if (this.dismissable) {\n                this.bindOutsideClickListener();\n            }\n\n            this.bindScrollListener();\n            this.bindResizeListener();\n\n            if (this.autoZIndex) {\n                ZIndex.set('overlay', el, this.baseZIndex + this.$primevue.config.zIndex.overlay);\n            }\n\n            this.overlayEventListener = (e) => {\n                if (this.container.contains(e.target)) {\n                    this.selfClick = true;\n                }\n            };\n\n            this.focus();\n            OverlayEventBus.on('overlay-click', this.overlayEventListener);\n            this.$emit('show');\n\n            if (this.closeOnEscape) {\n                this.bindDocumentKeyDownListener();\n            }\n        },\n        onLeave() {\n            this.unbindOutsideClickListener();\n            this.unbindScrollListener();\n            this.unbindResizeListener();\n            this.unbindDocumentKeyDownListener();\n            OverlayEventBus.off('overlay-click', this.overlayEventListener);\n            this.overlayEventListener = null;\n            this.$emit('hide');\n        },\n        onAfterLeave(el) {\n            if (this.autoZIndex) {\n                ZIndex.clear(el);\n            }\n        },\n        alignOverlay() {\n            absolutePosition(this.container, this.target, false);\n\n            const containerOffset = getOffset(this.container);\n            const targetOffset = getOffset(this.target);\n            let arrowLeft = 0;\n\n            if (containerOffset.left < targetOffset.left) {\n                arrowLeft = targetOffset.left - containerOffset.left;\n            }\n\n            this.container.style.setProperty($dt('popover.arrow.left').name, `${arrowLeft}px`);\n\n            if (containerOffset.top < targetOffset.top) {\n                this.container.setAttribute('data-p-popover-flipped', 'true');\n                !this.isUnstyled && addClass(this.container, 'p-popover-flipped');\n            }\n        },\n        onContentKeydown(event) {\n            if (event.code === 'Escape' && this.closeOnEscape) {\n                this.hide();\n                focus(this.target);\n            }\n        },\n        onButtonKeydown(event) {\n            switch (event.code) {\n                case 'ArrowDown':\n                case 'ArrowUp':\n                case 'ArrowLeft':\n                case 'ArrowRight':\n                    event.preventDefault();\n\n                default:\n                    break;\n            }\n        },\n        focus() {\n            let focusTarget = this.container.querySelector('[autofocus]');\n\n            if (focusTarget) {\n                focusTarget.focus();\n            }\n        },\n        onKeyDown(event) {\n            if (event.code === 'Escape' && this.closeOnEscape) {\n                this.visible = false;\n            }\n        },\n        bindDocumentKeyDownListener() {\n            if (!this.documentKeydownListener) {\n                this.documentKeydownListener = this.onKeyDown.bind(this);\n                window.document.addEventListener('keydown', this.documentKeydownListener);\n            }\n        },\n        unbindDocumentKeyDownListener() {\n            if (this.documentKeydownListener) {\n                window.document.removeEventListener('keydown', this.documentKeydownListener);\n                this.documentKeydownListener = null;\n            }\n        },\n        bindOutsideClickListener() {\n            if (!this.outsideClickListener && isClient()) {\n                this.outsideClickListener = (event) => {\n                    if (this.visible && !this.selfClick && !this.isTargetClicked(event)) {\n                        this.visible = false;\n                    }\n\n                    this.selfClick = false;\n                };\n\n                document.addEventListener('click', this.outsideClickListener);\n            }\n        },\n        unbindOutsideClickListener() {\n            if (this.outsideClickListener) {\n                document.removeEventListener('click', this.outsideClickListener);\n                this.outsideClickListener = null;\n                this.selfClick = false;\n            }\n        },\n        bindScrollListener() {\n            if (!this.scrollHandler) {\n                this.scrollHandler = new ConnectedOverlayScrollHandler(this.target, () => {\n                    if (this.visible) {\n                        this.visible = false;\n                    }\n                });\n            }\n\n            this.scrollHandler.bindScrollListener();\n        },\n        unbindScrollListener() {\n            if (this.scrollHandler) {\n                this.scrollHandler.unbindScrollListener();\n            }\n        },\n        bindResizeListener() {\n            if (!this.resizeListener) {\n                this.resizeListener = () => {\n                    if (this.visible && !isTouchDevice()) {\n                        this.visible = false;\n                    }\n                };\n\n                window.addEventListener('resize', this.resizeListener);\n            }\n        },\n        unbindResizeListener() {\n            if (this.resizeListener) {\n                window.removeEventListener('resize', this.resizeListener);\n                this.resizeListener = null;\n            }\n        },\n        isTargetClicked(event) {\n            return this.eventTarget && (this.eventTarget === event.target || this.eventTarget.contains(event.target));\n        },\n        containerRef(el) {\n            this.container = el;\n        },\n        createStyle() {\n            if (!this.styleElement && !this.isUnstyled) {\n                this.styleElement = document.createElement('style');\n                this.styleElement.type = 'text/css';\n                setAttribute(this.styleElement, 'nonce', this.$primevue?.config?.csp?.nonce);\n                document.head.appendChild(this.styleElement);\n\n                let innerHTML = '';\n\n                for (let breakpoint in this.breakpoints) {\n                    innerHTML += `\n                        @media screen and (max-width: ${breakpoint}) {\n                            .p-popover[${this.attributeSelector}] {\n                                width: ${this.breakpoints[breakpoint]} !important;\n                            }\n                        }\n                    `;\n                }\n\n                this.styleElement.innerHTML = innerHTML;\n            }\n        },\n        destroyStyle() {\n            if (this.styleElement) {\n                document.head.removeChild(this.styleElement);\n                this.styleElement = null;\n            }\n        },\n        onOverlayClick(event) {\n            OverlayEventBus.emit('overlay-click', {\n                originalEvent: event,\n                target: this.target\n            });\n        }\n    },\n    computed: {\n        attributeSelector() {\n            return UniqueComponentId();\n        }\n    },\n    directives: {\n        focustrap: FocusTrap,\n        ripple: Ripple\n    },\n    components: {\n        Portal\n    }\n};\n</script>\n","<template>\n    <Portal :appendTo=\"appendTo\">\n        <transition name=\"p-popover\" @enter=\"onEnter\" @leave=\"onLeave\" @after-leave=\"onAfterLeave\" v-bind=\"ptm('transition')\">\n            <div v-if=\"visible\" :ref=\"containerRef\" v-focustrap role=\"dialog\" :aria-modal=\"visible\" @click=\"onOverlayClick\" :class=\"cx('root')\" v-bind=\"ptmi('root')\">\n                <slot v-if=\"$slots.container\" name=\"container\" :closeCallback=\"hide\" :keydownCallback=\"(event) => onButtonKeydown(event)\"></slot>\n                <template v-else>\n                    <div :class=\"cx('content')\" @click=\"onContentClick\" @mousedown=\"onContentClick\" @keydown=\"onContentKeydown\" v-bind=\"ptm('content')\">\n                        <slot></slot>\n                    </div>\n                </template>\n            </div>\n        </transition>\n    </Portal>\n</template>\n\n<script>\nimport { ConnectedOverlayScrollHandler, UniqueComponentId } from '@primevue/core/utils';\nimport { addStyle, absolutePosition, getOffset, addClass, focus, isClient, isTouchDevice, setAttribute } from '@primeuix/utils/dom';\nimport { ZIndex } from '@primeuix/utils/zindex';\nimport { $dt } from '@primeuix/styled';\nimport FocusTrap from 'primevue/focustrap';\nimport OverlayEventBus from 'primevue/overlayeventbus';\nimport Portal from 'primevue/portal';\nimport Ripple from 'primevue/ripple';\nimport BasePopover from './BasePopover.vue';\n\nexport default {\n    name: 'Popover',\n    extends: BasePopover,\n    inheritAttrs: false,\n    emits: ['show', 'hide'],\n    data() {\n        return {\n            visible: false\n        };\n    },\n    watch: {\n        dismissable: {\n            immediate: true,\n            handler(newValue) {\n                if (newValue) {\n                    this.bindOutsideClickListener();\n                } else {\n                    this.unbindOutsideClickListener();\n                }\n            }\n        }\n    },\n    selfClick: false,\n    target: null,\n    eventTarget: null,\n    outsideClickListener: null,\n    scrollHandler: null,\n    resizeListener: null,\n    container: null,\n    styleElement: null,\n    overlayEventListener: null,\n    documentKeydownListener: null,\n    beforeUnmount() {\n        if (this.dismissable) {\n            this.unbindOutsideClickListener();\n        }\n\n        if (this.scrollHandler) {\n            this.scrollHandler.destroy();\n            this.scrollHandler = null;\n        }\n\n        this.destroyStyle();\n        this.unbindResizeListener();\n        this.target = null;\n\n        if (this.container && this.autoZIndex) {\n            ZIndex.clear(this.container);\n        }\n\n        if (this.overlayEventListener) {\n            OverlayEventBus.off('overlay-click', this.overlayEventListener);\n            this.overlayEventListener = null;\n        }\n\n        this.container = null;\n    },\n    mounted() {\n        if (this.breakpoints) {\n            this.createStyle();\n        }\n    },\n    methods: {\n        toggle(event, target) {\n            if (this.visible) this.hide();\n            else this.show(event, target);\n        },\n        show(event, target) {\n            this.visible = true;\n            this.eventTarget = event.currentTarget;\n            this.target = target || event.currentTarget;\n        },\n        hide() {\n            this.visible = false;\n        },\n        onContentClick() {\n            this.selfClick = true;\n        },\n        onEnter(el) {\n            this.container.setAttribute(this.attributeSelector, '');\n            addStyle(el, { position: 'absolute', top: '0', left: '0' });\n            this.alignOverlay();\n\n            if (this.dismissable) {\n                this.bindOutsideClickListener();\n            }\n\n            this.bindScrollListener();\n            this.bindResizeListener();\n\n            if (this.autoZIndex) {\n                ZIndex.set('overlay', el, this.baseZIndex + this.$primevue.config.zIndex.overlay);\n            }\n\n            this.overlayEventListener = (e) => {\n                if (this.container.contains(e.target)) {\n                    this.selfClick = true;\n                }\n            };\n\n            this.focus();\n            OverlayEventBus.on('overlay-click', this.overlayEventListener);\n            this.$emit('show');\n\n            if (this.closeOnEscape) {\n                this.bindDocumentKeyDownListener();\n            }\n        },\n        onLeave() {\n            this.unbindOutsideClickListener();\n            this.unbindScrollListener();\n            this.unbindResizeListener();\n            this.unbindDocumentKeyDownListener();\n            OverlayEventBus.off('overlay-click', this.overlayEventListener);\n            this.overlayEventListener = null;\n            this.$emit('hide');\n        },\n        onAfterLeave(el) {\n            if (this.autoZIndex) {\n                ZIndex.clear(el);\n            }\n        },\n        alignOverlay() {\n            absolutePosition(this.container, this.target, false);\n\n            const containerOffset = getOffset(this.container);\n            const targetOffset = getOffset(this.target);\n            let arrowLeft = 0;\n\n            if (containerOffset.left < targetOffset.left) {\n                arrowLeft = targetOffset.left - containerOffset.left;\n            }\n\n            this.container.style.setProperty($dt('popover.arrow.left').name, `${arrowLeft}px`);\n\n            if (containerOffset.top < targetOffset.top) {\n                this.container.setAttribute('data-p-popover-flipped', 'true');\n                !this.isUnstyled && addClass(this.container, 'p-popover-flipped');\n            }\n        },\n        onContentKeydown(event) {\n            if (event.code === 'Escape' && this.closeOnEscape) {\n                this.hide();\n                focus(this.target);\n            }\n        },\n        onButtonKeydown(event) {\n            switch (event.code) {\n                case 'ArrowDown':\n                case 'ArrowUp':\n                case 'ArrowLeft':\n                case 'ArrowRight':\n                    event.preventDefault();\n\n                default:\n                    break;\n            }\n        },\n        focus() {\n            let focusTarget = this.container.querySelector('[autofocus]');\n\n            if (focusTarget) {\n                focusTarget.focus();\n            }\n        },\n        onKeyDown(event) {\n            if (event.code === 'Escape' && this.closeOnEscape) {\n                this.visible = false;\n            }\n        },\n        bindDocumentKeyDownListener() {\n            if (!this.documentKeydownListener) {\n                this.documentKeydownListener = this.onKeyDown.bind(this);\n                window.document.addEventListener('keydown', this.documentKeydownListener);\n            }\n        },\n        unbindDocumentKeyDownListener() {\n            if (this.documentKeydownListener) {\n                window.document.removeEventListener('keydown', this.documentKeydownListener);\n                this.documentKeydownListener = null;\n            }\n        },\n        bindOutsideClickListener() {\n            if (!this.outsideClickListener && isClient()) {\n                this.outsideClickListener = (event) => {\n                    if (this.visible && !this.selfClick && !this.isTargetClicked(event)) {\n                        this.visible = false;\n                    }\n\n                    this.selfClick = false;\n                };\n\n                document.addEventListener('click', this.outsideClickListener);\n            }\n        },\n        unbindOutsideClickListener() {\n            if (this.outsideClickListener) {\n                document.removeEventListener('click', this.outsideClickListener);\n                this.outsideClickListener = null;\n                this.selfClick = false;\n            }\n        },\n        bindScrollListener() {\n            if (!this.scrollHandler) {\n                this.scrollHandler = new ConnectedOverlayScrollHandler(this.target, () => {\n                    if (this.visible) {\n                        this.visible = false;\n                    }\n                });\n            }\n\n            this.scrollHandler.bindScrollListener();\n        },\n        unbindScrollListener() {\n            if (this.scrollHandler) {\n                this.scrollHandler.unbindScrollListener();\n            }\n        },\n        bindResizeListener() {\n            if (!this.resizeListener) {\n                this.resizeListener = () => {\n                    if (this.visible && !isTouchDevice()) {\n                        this.visible = false;\n                    }\n                };\n\n                window.addEventListener('resize', this.resizeListener);\n            }\n        },\n        unbindResizeListener() {\n            if (this.resizeListener) {\n                window.removeEventListener('resize', this.resizeListener);\n                this.resizeListener = null;\n            }\n        },\n        isTargetClicked(event) {\n            return this.eventTarget && (this.eventTarget === event.target || this.eventTarget.contains(event.target));\n        },\n        containerRef(el) {\n            this.container = el;\n        },\n        createStyle() {\n            if (!this.styleElement && !this.isUnstyled) {\n                this.styleElement = document.createElement('style');\n                this.styleElement.type = 'text/css';\n                setAttribute(this.styleElement, 'nonce', this.$primevue?.config?.csp?.nonce);\n                document.head.appendChild(this.styleElement);\n\n                let innerHTML = '';\n\n                for (let breakpoint in this.breakpoints) {\n                    innerHTML += `\n                        @media screen and (max-width: ${breakpoint}) {\n                            .p-popover[${this.attributeSelector}] {\n                                width: ${this.breakpoints[breakpoint]} !important;\n                            }\n                        }\n                    `;\n                }\n\n                this.styleElement.innerHTML = innerHTML;\n            }\n        },\n        destroyStyle() {\n            if (this.styleElement) {\n                document.head.removeChild(this.styleElement);\n                this.styleElement = null;\n            }\n        },\n        onOverlayClick(event) {\n            OverlayEventBus.emit('overlay-click', {\n                originalEvent: event,\n                target: this.target\n            });\n        }\n    },\n    computed: {\n        attributeSelector() {\n            return UniqueComponentId();\n        }\n    },\n    directives: {\n        focustrap: FocusTrap,\n        ripple: Ripple\n    },\n    components: {\n        Portal\n    }\n};\n</script>\n"],"names":["name","BaseComponent","props","dismissable","type","Boolean","appendTo","String","Object","baseZIndex","Number","autoZIndex","breakpoints","closeOnEscape","style","PopoverStyle","provide","$pcPopover","$parentInstance","BasePopover","inheritAttrs","emits","data","visible","watch","immediate","handler","newValue","bindOutsideClickListener","unbindOutsideClickListener","selfClick","target","eventTarget","outsideClickListener","scrollHandler","resizeListener","container","styleElement","overlayEventListener","documentKeydownListener","beforeUnmount","destroy","destroyStyle","unbindResizeListener","ZIndex","clear","OverlayEventBus","off","mounted","createStyle","methods","toggle","event","hide","show","currentTarget","onContentClick","onEnter","el","_this","setAttribute","attributeSelector","addStyle","position","top","left","alignOverlay","bindScrollListener","bindResizeListener","set","$primevue","config","zIndex","overlay","e","contains","focus","on","$emit","bindDocumentKeyDownListener","onLeave","unbindScrollListener","unbindDocumentKeyDownListener","onAfterLeave","absolutePosition","containerOffset","getOffset","targetOffset","arrowLeft","setProperty","$dt","concat","isUnstyled","addClass","onContentKeydown","code","onButtonKeydown","preventDefault","focusTarget","querySelector","onKeyDown","bind","window","document","addEventListener","removeEventListener","_this2","isClient","isTargetClicked","_this3","ConnectedOverlayScrollHandler","_this4","isTouchDevice","containerRef","_this$$primevue","createElement","csp","nonce","head","appendChild","innerHTML","breakpoint","removeChild","onOverlayClick","emit","originalEvent","computed","UniqueComponentId","directives","focustrap","FocusTrap","ripple","Ripple","components","Portal","_createBlock","_component_Portal","_ctx","_createVNode","_Transition","_mergeProps","$options","ptm","$data","_withDirectives","_openBlock","_createElementBlock","ref","role","onClick","apply","arguments","cx","ptmi","$slots","_renderSlot","closeCallback","keydownCallback","onMousedown","onKeydown"],"mappings":"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"}