primevue
Version:
PrimeVue is an open source UI library for Vue featuring a rich set of 80+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with PrimeBloc
1 lines • 62.7 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../src/menu/BaseMenu.vue","../../src/menu/Menuitem.vue","../../src/menu/Menuitem.vue?vue&type=template&id=34cda3c6&lang.js","../../src/menu/Menu.vue","../../src/menu/Menu.vue?vue&type=template&id=068ae026&lang.js"],"sourcesContent":["<script>\nimport BaseComponent from '@primevue/core/basecomponent';\nimport MenuStyle from 'primevue/menu/style';\n\nexport default {\n name: 'BaseMenu',\n extends: BaseComponent,\n props: {\n popup: {\n type: Boolean,\n default: false\n },\n model: {\n type: Array,\n default: null\n },\n appendTo: {\n type: [String, Object],\n default: 'body'\n },\n autoZIndex: {\n type: Boolean,\n default: true\n },\n baseZIndex: {\n type: Number,\n default: 0\n },\n tabindex: {\n type: Number,\n default: 0\n },\n ariaLabel: {\n type: String,\n default: null\n },\n ariaLabelledby: {\n type: String,\n default: null\n }\n },\n style: MenuStyle,\n provide() {\n return {\n $pcMenu: this,\n $parentInstance: this\n };\n }\n};\n</script>\n","<template>\n <li\n v-if=\"visible()\"\n :id=\"id\"\n :class=\"[cx('item'), item.class]\"\n role=\"menuitem\"\n :style=\"item.style\"\n :aria-label=\"label()\"\n :aria-disabled=\"disabled()\"\n v-bind=\"getPTOptions('item')\"\n :data-p-focused=\"isItemFocused()\"\n :data-p-disabled=\"disabled() || false\"\n >\n <div :class=\"cx('itemContent')\" @click=\"onItemClick($event)\" @mousemove=\"onItemMouseMove($event)\" v-bind=\"getPTOptions('itemContent')\">\n <template v-if=\"!templates.item\">\n <a v-ripple :href=\"item.url\" :class=\"cx('itemLink')\" :target=\"item.target\" tabindex=\"-1\" v-bind=\"getPTOptions('itemLink')\">\n <component v-if=\"templates.itemicon\" :is=\"templates.itemicon\" :item=\"item\" :class=\"cx('itemIcon')\" />\n <span v-else-if=\"item.icon\" :class=\"[cx('itemIcon'), item.icon]\" v-bind=\"getPTOptions('itemIcon')\" />\n <span :class=\"cx('itemLabel')\" v-bind=\"getPTOptions('itemLabel')\">{{ label() }}</span>\n </a>\n </template>\n <component v-else-if=\"templates.item\" :is=\"templates.item\" :item=\"item\" :label=\"label()\" :props=\"getMenuItemProps(item)\"></component>\n </div>\n </li>\n</template>\n\n<script>\nimport { resolve } from '@primeuix/utils/object';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport Ripple from 'primevue/ripple';\nimport { mergeProps } from 'vue';\n\nexport default {\n name: 'Menuitem',\n hostName: 'Menu',\n extends: BaseComponent,\n inheritAttrs: false,\n emits: ['item-click', 'item-mousemove'],\n props: {\n item: null,\n templates: null,\n id: null,\n focusedOptionId: null,\n index: null\n },\n methods: {\n getItemProp(processedItem, name) {\n return processedItem && processedItem.item ? resolve(processedItem.item[name]) : undefined;\n },\n getPTOptions(key) {\n return this.ptm(key, {\n context: {\n item: this.item,\n index: this.index,\n focused: this.isItemFocused(),\n disabled: this.disabled()\n }\n });\n },\n isItemFocused() {\n return this.focusedOptionId === this.id;\n },\n onItemClick(event) {\n const command = this.getItemProp(this.item, 'command');\n\n command && command({ originalEvent: event, item: this.item.item });\n this.$emit('item-click', { originalEvent: event, item: this.item, id: this.id });\n },\n onItemMouseMove(event) {\n this.$emit('item-mousemove', { originalEvent: event, item: this.item, id: this.id });\n },\n visible() {\n return typeof this.item.visible === 'function' ? this.item.visible() : this.item.visible !== false;\n },\n disabled() {\n return typeof this.item.disabled === 'function' ? this.item.disabled() : this.item.disabled;\n },\n label() {\n return typeof this.item.label === 'function' ? this.item.label() : this.item.label;\n },\n getMenuItemProps(item) {\n return {\n action: mergeProps(\n {\n class: this.cx('itemLink'),\n tabindex: '-1',\n 'aria-hidden': true\n },\n this.getPTOptions('itemLink')\n ),\n icon: mergeProps(\n {\n class: [this.cx('itemIcon'), item.icon]\n },\n this.getPTOptions('itemIcon')\n ),\n label: mergeProps(\n {\n class: this.cx('itemLabel')\n },\n this.getPTOptions('itemLabel')\n )\n };\n }\n },\n directives: {\n ripple: Ripple\n }\n};\n</script>\n","<template>\n <li\n v-if=\"visible()\"\n :id=\"id\"\n :class=\"[cx('item'), item.class]\"\n role=\"menuitem\"\n :style=\"item.style\"\n :aria-label=\"label()\"\n :aria-disabled=\"disabled()\"\n v-bind=\"getPTOptions('item')\"\n :data-p-focused=\"isItemFocused()\"\n :data-p-disabled=\"disabled() || false\"\n >\n <div :class=\"cx('itemContent')\" @click=\"onItemClick($event)\" @mousemove=\"onItemMouseMove($event)\" v-bind=\"getPTOptions('itemContent')\">\n <template v-if=\"!templates.item\">\n <a v-ripple :href=\"item.url\" :class=\"cx('itemLink')\" :target=\"item.target\" tabindex=\"-1\" v-bind=\"getPTOptions('itemLink')\">\n <component v-if=\"templates.itemicon\" :is=\"templates.itemicon\" :item=\"item\" :class=\"cx('itemIcon')\" />\n <span v-else-if=\"item.icon\" :class=\"[cx('itemIcon'), item.icon]\" v-bind=\"getPTOptions('itemIcon')\" />\n <span :class=\"cx('itemLabel')\" v-bind=\"getPTOptions('itemLabel')\">{{ label() }}</span>\n </a>\n </template>\n <component v-else-if=\"templates.item\" :is=\"templates.item\" :item=\"item\" :label=\"label()\" :props=\"getMenuItemProps(item)\"></component>\n </div>\n </li>\n</template>\n\n<script>\nimport { resolve } from '@primeuix/utils/object';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport Ripple from 'primevue/ripple';\nimport { mergeProps } from 'vue';\n\nexport default {\n name: 'Menuitem',\n hostName: 'Menu',\n extends: BaseComponent,\n inheritAttrs: false,\n emits: ['item-click', 'item-mousemove'],\n props: {\n item: null,\n templates: null,\n id: null,\n focusedOptionId: null,\n index: null\n },\n methods: {\n getItemProp(processedItem, name) {\n return processedItem && processedItem.item ? resolve(processedItem.item[name]) : undefined;\n },\n getPTOptions(key) {\n return this.ptm(key, {\n context: {\n item: this.item,\n index: this.index,\n focused: this.isItemFocused(),\n disabled: this.disabled()\n }\n });\n },\n isItemFocused() {\n return this.focusedOptionId === this.id;\n },\n onItemClick(event) {\n const command = this.getItemProp(this.item, 'command');\n\n command && command({ originalEvent: event, item: this.item.item });\n this.$emit('item-click', { originalEvent: event, item: this.item, id: this.id });\n },\n onItemMouseMove(event) {\n this.$emit('item-mousemove', { originalEvent: event, item: this.item, id: this.id });\n },\n visible() {\n return typeof this.item.visible === 'function' ? this.item.visible() : this.item.visible !== false;\n },\n disabled() {\n return typeof this.item.disabled === 'function' ? this.item.disabled() : this.item.disabled;\n },\n label() {\n return typeof this.item.label === 'function' ? this.item.label() : this.item.label;\n },\n getMenuItemProps(item) {\n return {\n action: mergeProps(\n {\n class: this.cx('itemLink'),\n tabindex: '-1',\n 'aria-hidden': true\n },\n this.getPTOptions('itemLink')\n ),\n icon: mergeProps(\n {\n class: [this.cx('itemIcon'), item.icon]\n },\n this.getPTOptions('itemIcon')\n ),\n label: mergeProps(\n {\n class: this.cx('itemLabel')\n },\n this.getPTOptions('itemLabel')\n )\n };\n }\n },\n directives: {\n ripple: Ripple\n }\n};\n</script>\n","<template>\n <Portal :appendTo=\"appendTo\" :disabled=\"!popup\">\n <transition name=\"p-connected-overlay\" @enter=\"onEnter\" @leave=\"onLeave\" @after-leave=\"onAfterLeave\" v-bind=\"ptm('transition')\">\n <div v-if=\"popup ? overlayVisible : true\" :ref=\"containerRef\" :id=\"id\" :class=\"cx('root')\" @click=\"onOverlayClick\" v-bind=\"ptmi('root')\">\n <div v-if=\"$slots.start\" :class=\"cx('start')\" v-bind=\"ptm('start')\">\n <slot name=\"start\"></slot>\n </div>\n <ul\n :ref=\"listRef\"\n :id=\"id + '_list'\"\n :class=\"cx('list')\"\n role=\"menu\"\n :tabindex=\"tabindex\"\n :aria-activedescendant=\"focused ? focusedOptionId : undefined\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"ariaLabelledby\"\n @focus=\"onListFocus\"\n @blur=\"onListBlur\"\n @keydown=\"onListKeyDown\"\n v-bind=\"ptm('list')\"\n >\n <template v-for=\"(item, i) of model\" :key=\"label(item) + i.toString()\">\n <template v-if=\"item.items && visible(item) && !item.separator\">\n <li v-if=\"item.items\" :id=\"id + '_' + i\" :class=\"[cx('submenuLabel'), item.class]\" role=\"none\" v-bind=\"ptm('submenuLabel')\">\n <!--TODO: submenuheader deprecated since v4.0. Use submenulabel-->\n <slot :name=\"$slots.submenulabel ? 'submenulabel' : 'submenuheader'\" :item=\"item\">{{ label(item) }}</slot>\n </li>\n <template v-for=\"(child, j) of item.items\" :key=\"child.label + i + '_' + j\">\n <PVMenuitem\n v-if=\"visible(child) && !child.separator\"\n :id=\"id + '_' + i + '_' + j\"\n :item=\"child\"\n :templates=\"$slots\"\n :focusedOptionId=\"focusedOptionId\"\n :unstyled=\"unstyled\"\n @item-click=\"itemClick\"\n @item-mousemove=\"itemMouseMove\"\n :pt=\"pt\"\n />\n <li v-else-if=\"visible(child) && child.separator\" :key=\"'separator' + i + j\" :class=\"[cx('separator'), item.class]\" :style=\"child.style\" role=\"separator\" v-bind=\"ptm('separator')\"></li>\n </template>\n </template>\n <li v-else-if=\"visible(item) && item.separator\" :key=\"'separator' + i.toString()\" :class=\"[cx('separator'), item.class]\" :style=\"item.style\" role=\"separator\" v-bind=\"ptm('separator')\"></li>\n <PVMenuitem\n v-else\n :key=\"label(item) + i.toString()\"\n :id=\"id + '_' + i\"\n :item=\"item\"\n :index=\"i\"\n :templates=\"$slots\"\n :focusedOptionId=\"focusedOptionId\"\n :unstyled=\"unstyled\"\n @item-click=\"itemClick\"\n @item-mousemove=\"itemMouseMove\"\n :pt=\"pt\"\n />\n </template>\n </ul>\n <div v-if=\"$slots.end\" :class=\"cx('end')\" v-bind=\"ptm('end')\">\n <slot name=\"end\"></slot>\n </div>\n </div>\n </transition>\n </Portal>\n</template>\n\n<script>\nimport { ConnectedOverlayScrollHandler, UniqueComponentId } from '@primevue/core/utils';\nimport { focus, find, findSingle, addStyle, absolutePosition, getOuterWidth, isTouchDevice } from '@primeuix/utils/dom';\nimport { ZIndex } from '@primeuix/utils/zindex';\nimport OverlayEventBus from 'primevue/overlayeventbus';\nimport Portal from 'primevue/portal';\nimport BaseMenu from './BaseMenu.vue';\nimport Menuitem from './Menuitem.vue';\n\nexport default {\n name: 'Menu',\n extends: BaseMenu,\n inheritAttrs: false,\n emits: ['show', 'hide', 'focus', 'blur'],\n data() {\n return {\n id: this.$attrs.id,\n overlayVisible: false,\n focused: false,\n focusedOptionIndex: -1,\n selectedOptionIndex: -1\n };\n },\n watch: {\n '$attrs.id': function (newValue) {\n this.id = newValue || UniqueComponentId();\n }\n },\n target: null,\n outsideClickListener: null,\n scrollHandler: null,\n resizeListener: null,\n container: null,\n list: null,\n mounted() {\n this.id = this.id || UniqueComponentId();\n\n if (!this.popup) {\n this.bindResizeListener();\n this.bindOutsideClickListener();\n }\n },\n beforeUnmount() {\n this.unbindResizeListener();\n this.unbindOutsideClickListener();\n\n if (this.scrollHandler) {\n this.scrollHandler.destroy();\n this.scrollHandler = null;\n }\n\n this.target = null;\n\n if (this.container && this.autoZIndex) {\n ZIndex.clear(this.container);\n }\n\n this.container = null;\n },\n methods: {\n itemClick(event) {\n const item = event.item;\n\n if (this.disabled(item)) {\n return;\n }\n\n if (item.command) {\n item.command(event);\n }\n\n if (this.overlayVisible) this.hide();\n\n if (!this.popup && this.focusedOptionIndex !== event.id) {\n this.focusedOptionIndex = event.id;\n }\n },\n itemMouseMove(event) {\n if (this.focused) {\n this.focusedOptionIndex = event.id;\n }\n },\n onListFocus(event) {\n this.focused = true;\n !this.popup && this.changeFocusedOptionIndex(0);\n\n this.$emit('focus', event);\n },\n onListBlur(event) {\n this.focused = false;\n this.focusedOptionIndex = -1;\n this.$emit('blur', event);\n },\n onListKeyDown(event) {\n switch (event.code) {\n case 'ArrowDown':\n this.onArrowDownKey(event);\n break;\n\n case 'ArrowUp':\n this.onArrowUpKey(event);\n break;\n\n case 'Home':\n this.onHomeKey(event);\n break;\n\n case 'End':\n this.onEndKey(event);\n break;\n\n case 'Enter':\n case 'NumpadEnter':\n this.onEnterKey(event);\n break;\n\n case 'Space':\n this.onSpaceKey(event);\n break;\n\n case 'Escape':\n if (this.popup) {\n focus(this.target);\n this.hide();\n }\n\n case 'Tab':\n this.overlayVisible && this.hide();\n break;\n\n default:\n break;\n }\n },\n onArrowDownKey(event) {\n const optionIndex = this.findNextOptionIndex(this.focusedOptionIndex);\n\n this.changeFocusedOptionIndex(optionIndex);\n event.preventDefault();\n },\n onArrowUpKey(event) {\n if (event.altKey && this.popup) {\n focus(this.target);\n this.hide();\n event.preventDefault();\n } else {\n const optionIndex = this.findPrevOptionIndex(this.focusedOptionIndex);\n\n this.changeFocusedOptionIndex(optionIndex);\n event.preventDefault();\n }\n },\n onHomeKey(event) {\n this.changeFocusedOptionIndex(0);\n event.preventDefault();\n },\n onEndKey(event) {\n this.changeFocusedOptionIndex(find(this.container, 'li[data-pc-section=\"item\"][data-p-disabled=\"false\"]').length - 1);\n event.preventDefault();\n },\n onEnterKey(event) {\n const element = findSingle(this.list, `li[id=\"${`${this.focusedOptionIndex}`}\"]`);\n const anchorElement = element && findSingle(element, 'a[data-pc-section=\"itemlink\"]');\n\n this.popup && focus(this.target);\n anchorElement ? anchorElement.click() : element && element.click();\n\n event.preventDefault();\n },\n onSpaceKey(event) {\n this.onEnterKey(event);\n },\n findNextOptionIndex(index) {\n const links = find(this.container, 'li[data-pc-section=\"item\"][data-p-disabled=\"false\"]');\n const matchedOptionIndex = [...links].findIndex((link) => link.id === index);\n\n return matchedOptionIndex > -1 ? matchedOptionIndex + 1 : 0;\n },\n findPrevOptionIndex(index) {\n const links = find(this.container, 'li[data-pc-section=\"item\"][data-p-disabled=\"false\"]');\n const matchedOptionIndex = [...links].findIndex((link) => link.id === index);\n\n return matchedOptionIndex > -1 ? matchedOptionIndex - 1 : 0;\n },\n changeFocusedOptionIndex(index) {\n const links = find(this.container, 'li[data-pc-section=\"item\"][data-p-disabled=\"false\"]');\n let order = index >= links.length ? links.length - 1 : index < 0 ? 0 : index;\n\n order > -1 && (this.focusedOptionIndex = links[order].getAttribute('id'));\n },\n toggle(event) {\n if (this.overlayVisible) this.hide();\n else this.show(event);\n },\n show(event) {\n this.overlayVisible = true;\n this.target = event.currentTarget;\n },\n hide() {\n this.overlayVisible = false;\n this.target = null;\n },\n onEnter(el) {\n addStyle(el, { position: 'absolute', top: '0', left: '0' });\n this.alignOverlay();\n this.bindOutsideClickListener();\n this.bindResizeListener();\n this.bindScrollListener();\n\n if (this.autoZIndex) {\n ZIndex.set('menu', el, this.baseZIndex + this.$primevue.config.zIndex.menu);\n }\n\n if (this.popup) {\n focus(this.list);\n }\n\n this.$emit('show');\n },\n onLeave() {\n this.unbindOutsideClickListener();\n this.unbindResizeListener();\n this.unbindScrollListener();\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);\n const targetWidth = getOuterWidth(this.target);\n\n if (targetWidth > getOuterWidth(this.container)) {\n this.container.style.minWidth = getOuterWidth(this.target) + 'px';\n }\n },\n bindOutsideClickListener() {\n if (!this.outsideClickListener) {\n this.outsideClickListener = (event) => {\n const isOutsideContainer = this.container && !this.container.contains(event.target);\n const isOutsideTarget = !(this.target && (this.target === event.target || this.target.contains(event.target)));\n\n if (this.overlayVisible && isOutsideContainer && isOutsideTarget) {\n this.hide();\n } else if (!this.popup && isOutsideContainer && isOutsideTarget) {\n this.focusedOptionIndex = -1;\n }\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 }\n },\n bindScrollListener() {\n if (!this.scrollHandler) {\n this.scrollHandler = new ConnectedOverlayScrollHandler(this.target, () => {\n if (this.overlayVisible) {\n this.hide();\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.overlayVisible && !isTouchDevice()) {\n this.hide();\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 visible(item) {\n return typeof item.visible === 'function' ? item.visible() : item.visible !== false;\n },\n disabled(item) {\n return typeof item.disabled === 'function' ? item.disabled() : item.disabled;\n },\n label(item) {\n return typeof item.label === 'function' ? item.label() : item.label;\n },\n onOverlayClick(event) {\n OverlayEventBus.emit('overlay-click', {\n originalEvent: event,\n target: this.target\n });\n },\n containerRef(el) {\n this.container = el;\n },\n listRef(el) {\n this.list = el;\n }\n },\n computed: {\n focusedOptionId() {\n return this.focusedOptionIndex !== -1 ? this.focusedOptionIndex : null;\n }\n },\n components: {\n PVMenuitem: Menuitem,\n Portal: Portal\n }\n};\n</script>\n","<template>\n <Portal :appendTo=\"appendTo\" :disabled=\"!popup\">\n <transition name=\"p-connected-overlay\" @enter=\"onEnter\" @leave=\"onLeave\" @after-leave=\"onAfterLeave\" v-bind=\"ptm('transition')\">\n <div v-if=\"popup ? overlayVisible : true\" :ref=\"containerRef\" :id=\"id\" :class=\"cx('root')\" @click=\"onOverlayClick\" v-bind=\"ptmi('root')\">\n <div v-if=\"$slots.start\" :class=\"cx('start')\" v-bind=\"ptm('start')\">\n <slot name=\"start\"></slot>\n </div>\n <ul\n :ref=\"listRef\"\n :id=\"id + '_list'\"\n :class=\"cx('list')\"\n role=\"menu\"\n :tabindex=\"tabindex\"\n :aria-activedescendant=\"focused ? focusedOptionId : undefined\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"ariaLabelledby\"\n @focus=\"onListFocus\"\n @blur=\"onListBlur\"\n @keydown=\"onListKeyDown\"\n v-bind=\"ptm('list')\"\n >\n <template v-for=\"(item, i) of model\" :key=\"label(item) + i.toString()\">\n <template v-if=\"item.items && visible(item) && !item.separator\">\n <li v-if=\"item.items\" :id=\"id + '_' + i\" :class=\"[cx('submenuLabel'), item.class]\" role=\"none\" v-bind=\"ptm('submenuLabel')\">\n <!--TODO: submenuheader deprecated since v4.0. Use submenulabel-->\n <slot :name=\"$slots.submenulabel ? 'submenulabel' : 'submenuheader'\" :item=\"item\">{{ label(item) }}</slot>\n </li>\n <template v-for=\"(child, j) of item.items\" :key=\"child.label + i + '_' + j\">\n <PVMenuitem\n v-if=\"visible(child) && !child.separator\"\n :id=\"id + '_' + i + '_' + j\"\n :item=\"child\"\n :templates=\"$slots\"\n :focusedOptionId=\"focusedOptionId\"\n :unstyled=\"unstyled\"\n @item-click=\"itemClick\"\n @item-mousemove=\"itemMouseMove\"\n :pt=\"pt\"\n />\n <li v-else-if=\"visible(child) && child.separator\" :key=\"'separator' + i + j\" :class=\"[cx('separator'), item.class]\" :style=\"child.style\" role=\"separator\" v-bind=\"ptm('separator')\"></li>\n </template>\n </template>\n <li v-else-if=\"visible(item) && item.separator\" :key=\"'separator' + i.toString()\" :class=\"[cx('separator'), item.class]\" :style=\"item.style\" role=\"separator\" v-bind=\"ptm('separator')\"></li>\n <PVMenuitem\n v-else\n :key=\"label(item) + i.toString()\"\n :id=\"id + '_' + i\"\n :item=\"item\"\n :index=\"i\"\n :templates=\"$slots\"\n :focusedOptionId=\"focusedOptionId\"\n :unstyled=\"unstyled\"\n @item-click=\"itemClick\"\n @item-mousemove=\"itemMouseMove\"\n :pt=\"pt\"\n />\n </template>\n </ul>\n <div v-if=\"$slots.end\" :class=\"cx('end')\" v-bind=\"ptm('end')\">\n <slot name=\"end\"></slot>\n </div>\n </div>\n </transition>\n </Portal>\n</template>\n\n<script>\nimport { ConnectedOverlayScrollHandler, UniqueComponentId } from '@primevue/core/utils';\nimport { focus, find, findSingle, addStyle, absolutePosition, getOuterWidth, isTouchDevice } from '@primeuix/utils/dom';\nimport { ZIndex } from '@primeuix/utils/zindex';\nimport OverlayEventBus from 'primevue/overlayeventbus';\nimport Portal from 'primevue/portal';\nimport BaseMenu from './BaseMenu.vue';\nimport Menuitem from './Menuitem.vue';\n\nexport default {\n name: 'Menu',\n extends: BaseMenu,\n inheritAttrs: false,\n emits: ['show', 'hide', 'focus', 'blur'],\n data() {\n return {\n id: this.$attrs.id,\n overlayVisible: false,\n focused: false,\n focusedOptionIndex: -1,\n selectedOptionIndex: -1\n };\n },\n watch: {\n '$attrs.id': function (newValue) {\n this.id = newValue || UniqueComponentId();\n }\n },\n target: null,\n outsideClickListener: null,\n scrollHandler: null,\n resizeListener: null,\n container: null,\n list: null,\n mounted() {\n this.id = this.id || UniqueComponentId();\n\n if (!this.popup) {\n this.bindResizeListener();\n this.bindOutsideClickListener();\n }\n },\n beforeUnmount() {\n this.unbindResizeListener();\n this.unbindOutsideClickListener();\n\n if (this.scrollHandler) {\n this.scrollHandler.destroy();\n this.scrollHandler = null;\n }\n\n this.target = null;\n\n if (this.container && this.autoZIndex) {\n ZIndex.clear(this.container);\n }\n\n this.container = null;\n },\n methods: {\n itemClick(event) {\n const item = event.item;\n\n if (this.disabled(item)) {\n return;\n }\n\n if (item.command) {\n item.command(event);\n }\n\n if (this.overlayVisible) this.hide();\n\n if (!this.popup && this.focusedOptionIndex !== event.id) {\n this.focusedOptionIndex = event.id;\n }\n },\n itemMouseMove(event) {\n if (this.focused) {\n this.focusedOptionIndex = event.id;\n }\n },\n onListFocus(event) {\n this.focused = true;\n !this.popup && this.changeFocusedOptionIndex(0);\n\n this.$emit('focus', event);\n },\n onListBlur(event) {\n this.focused = false;\n this.focusedOptionIndex = -1;\n this.$emit('blur', event);\n },\n onListKeyDown(event) {\n switch (event.code) {\n case 'ArrowDown':\n this.onArrowDownKey(event);\n break;\n\n case 'ArrowUp':\n this.onArrowUpKey(event);\n break;\n\n case 'Home':\n this.onHomeKey(event);\n break;\n\n case 'End':\n this.onEndKey(event);\n break;\n\n case 'Enter':\n case 'NumpadEnter':\n this.onEnterKey(event);\n break;\n\n case 'Space':\n this.onSpaceKey(event);\n break;\n\n case 'Escape':\n if (this.popup) {\n focus(this.target);\n this.hide();\n }\n\n case 'Tab':\n this.overlayVisible && this.hide();\n break;\n\n default:\n break;\n }\n },\n onArrowDownKey(event) {\n const optionIndex = this.findNextOptionIndex(this.focusedOptionIndex);\n\n this.changeFocusedOptionIndex(optionIndex);\n event.preventDefault();\n },\n onArrowUpKey(event) {\n if (event.altKey && this.popup) {\n focus(this.target);\n this.hide();\n event.preventDefault();\n } else {\n const optionIndex = this.findPrevOptionIndex(this.focusedOptionIndex);\n\n this.changeFocusedOptionIndex(optionIndex);\n event.preventDefault();\n }\n },\n onHomeKey(event) {\n this.changeFocusedOptionIndex(0);\n event.preventDefault();\n },\n onEndKey(event) {\n this.changeFocusedOptionIndex(find(this.container, 'li[data-pc-section=\"item\"][data-p-disabled=\"false\"]').length - 1);\n event.preventDefault();\n },\n onEnterKey(event) {\n const element = findSingle(this.list, `li[id=\"${`${this.focusedOptionIndex}`}\"]`);\n const anchorElement = element && findSingle(element, 'a[data-pc-section=\"itemlink\"]');\n\n this.popup && focus(this.target);\n anchorElement ? anchorElement.click() : element && element.click();\n\n event.preventDefault();\n },\n onSpaceKey(event) {\n this.onEnterKey(event);\n },\n findNextOptionIndex(index) {\n const links = find(this.container, 'li[data-pc-section=\"item\"][data-p-disabled=\"false\"]');\n const matchedOptionIndex = [...links].findIndex((link) => link.id === index);\n\n return matchedOptionIndex > -1 ? matchedOptionIndex + 1 : 0;\n },\n findPrevOptionIndex(index) {\n const links = find(this.container, 'li[data-pc-section=\"item\"][data-p-disabled=\"false\"]');\n const matchedOptionIndex = [...links].findIndex((link) => link.id === index);\n\n return matchedOptionIndex > -1 ? matchedOptionIndex - 1 : 0;\n },\n changeFocusedOptionIndex(index) {\n const links = find(this.container, 'li[data-pc-section=\"item\"][data-p-disabled=\"false\"]');\n let order = index >= links.length ? links.length - 1 : index < 0 ? 0 : index;\n\n order > -1 && (this.focusedOptionIndex = links[order].getAttribute('id'));\n },\n toggle(event) {\n if (this.overlayVisible) this.hide();\n else this.show(event);\n },\n show(event) {\n this.overlayVisible = true;\n this.target = event.currentTarget;\n },\n hide() {\n this.overlayVisible = false;\n this.target = null;\n },\n onEnter(el) {\n addStyle(el, { position: 'absolute', top: '0', left: '0' });\n this.alignOverlay();\n this.bindOutsideClickListener();\n this.bindResizeListener();\n this.bindScrollListener();\n\n if (this.autoZIndex) {\n ZIndex.set('menu', el, this.baseZIndex + this.$primevue.config.zIndex.menu);\n }\n\n if (this.popup) {\n focus(this.list);\n }\n\n this.$emit('show');\n },\n onLeave() {\n this.unbindOutsideClickListener();\n this.unbindResizeListener();\n this.unbindScrollListener();\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);\n const targetWidth = getOuterWidth(this.target);\n\n if (targetWidth > getOuterWidth(this.container)) {\n this.container.style.minWidth = getOuterWidth(this.target) + 'px';\n }\n },\n bindOutsideClickListener() {\n if (!this.outsideClickListener) {\n this.outsideClickListener = (event) => {\n const isOutsideContainer = this.container && !this.container.contains(event.target);\n const isOutsideTarget = !(this.target && (this.target === event.target || this.target.contains(event.target)));\n\n if (this.overlayVisible && isOutsideContainer && isOutsideTarget) {\n this.hide();\n } else if (!this.popup && isOutsideContainer && isOutsideTarget) {\n this.focusedOptionIndex = -1;\n }\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 }\n },\n bindScrollListener() {\n if (!this.scrollHandler) {\n this.scrollHandler = new ConnectedOverlayScrollHandler(this.target, () => {\n if (this.overlayVisible) {\n this.hide();\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.overlayVisible && !isTouchDevice()) {\n this.hide();\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 visible(item) {\n return typeof item.visible === 'function' ? item.visible() : item.visible !== false;\n },\n disabled(item) {\n return typeof item.disabled === 'function' ? item.disabled() : item.disabled;\n },\n label(item) {\n return typeof item.label === 'function' ? item.label() : item.label;\n },\n onOverlayClick(event) {\n OverlayEventBus.emit('overlay-click', {\n originalEvent: event,\n target: this.target\n });\n },\n containerRef(el) {\n this.container = el;\n },\n listRef(el) {\n this.list = el;\n }\n },\n computed: {\n focusedOptionId() {\n return this.focusedOptionIndex !== -1 ? this.focusedOptionIndex : null;\n }\n },\n components: {\n PVMenuitem: Menuitem,\n Portal: Portal\n }\n};\n</script>\n"],"names":["name","BaseComponent","props","popup","type","Boolean","model","Array","appendTo","String","Object","autoZIndex","baseZIndex","Number","tabindex","ariaLabel","ariaLabelledby","style","MenuStyle","provide","$pcMenu","$parentInstance","hostName","inheritAttrs","emits","item","templates","id","focusedOptionId","index","methods","getItemProp","processedItem","resolve","undefined","getPTOptions","key","ptm","context","focused","isItemFocused","disabled","onItemClick","event","command","originalEvent","$emit","onItemMouseMove","visible","label","getMenuItemProps","action","mergeProps","cx","icon","directives","ripple","Ripple","$options","_openBlock","_createElementBlock","_mergeProps","$props","_ctx","role","_createElementVNode","onClick","_cache","$event","onMousemove","_withDirectives","href","url","target","itemicon","_createBlock","_resolveDynamicComponent","BaseMenu","data","$attrs","overlayVisible","focusedOptionIndex","selectedOptionIndex","watch","$attrsId","newValue","UniqueComponentId","outsideClickListener","scrollHandler","resizeListener","container","list","mounted","bindResizeListener","bindOutsideClickListener","beforeUnmount","unbindResizeListener","unbindOutsideClickListener","destroy","ZIndex","clear","itemClick","hide","itemMouseMove","onListFocus","changeFocusedOptionIndex","onListBlur","onListKeyDown","code","onArrowDownKey","onArrowUpKey","onHomeKey","onEndKey","onEnterKey","onSpaceKey","focus","optionIndex","findNextOptionIndex","preventDefault","altKey","findPrevOptionIndex","find","length","element","findSingle","concat","anchorElement","click","links","matchedOptionIndex","_toConsumableArray","findIndex","link","order","getAttribute","toggle","show","currentTarget","onEnter","el","addStyle","position","top","left","alignOverlay","bindScrollListener","set","$primevue","config","zIndex","menu","onLeave","unbindScrollListener","onAfterLeave","absolutePosition","targetWidth","getOuterWidth","minWidth","_this","isOutsideContainer","contains","isOutsideTarget","document","addEventListener","removeEventListener","_this2","ConnectedOverlayScrollHandler","_this3","isTouchDevice","window","onOverlayClick","OverlayEventBus","emit","containerRef","listRef","computed","components","PVMenuitem","Menuitem","Portal","_component_Portal","_createVNode","_Transition","$data","ref","apply","arguments","ptmi","$slots","start","_renderSlot","onFocus","onBlur","onKeydown","_Fragment","_renderList","i","toString","items","separator","submenulabel","_createTextVNode","_toDisplayString","child","j","_component_PVMenuitem","unstyled","onItemMousemove","pt","end"],"mappings":"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