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 • 60.9 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../src/speeddial/BaseSpeedDial.vue","../../src/speeddial/SpeedDial.vue","../../src/speeddial/SpeedDial.vue?vue&type=template&id=3a333aa5&lang.js"],"sourcesContent":["<script>\nimport BaseComponent from '@primevue/core/basecomponent';\nimport SpeedDialStyle from 'primevue/speeddial/style';\n\nexport default {\n name: 'BaseSpeedDial',\n extends: BaseComponent,\n props: {\n model: null,\n visible: {\n type: Boolean,\n default: false\n },\n direction: {\n type: String,\n default: 'up'\n },\n transitionDelay: {\n type: Number,\n default: 30\n },\n type: {\n type: String,\n default: 'linear'\n },\n radius: {\n type: Number,\n default: 0\n },\n mask: {\n type: Boolean,\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n },\n hideOnClickOutside: {\n type: Boolean,\n default: true\n },\n buttonClass: null,\n maskStyle: null,\n maskClass: null,\n showIcon: {\n type: String,\n default: undefined\n },\n hideIcon: {\n type: String,\n default: undefined\n },\n rotateAnimation: {\n type: Boolean,\n default: true\n },\n tooltipOptions: null,\n style: null,\n class: null,\n buttonProps: {\n type: Object,\n default() {\n return { rounded: true };\n }\n },\n actionButtonProps: {\n type: Object,\n default() {\n return { severity: 'secondary', rounded: true, size: 'small' };\n }\n },\n ariaLabelledby: {\n type: String,\n default: null\n },\n ariaLabel: {\n type: String,\n default: null\n }\n },\n style: SpeedDialStyle,\n provide() {\n return {\n $pcSpeedDial: this,\n $parentInstance: this\n };\n }\n};\n</script>\n","<template>\n <div :ref=\"containerRef\" :class=\"containerClass\" :style=\"[style, sx('root')]\" v-bind=\"ptmi('root')\">\n <slot name=\"button\" :visible=\"d_visible\" :toggleCallback=\"onClick\">\n <Button\n :class=\"[cx('pcButton'), buttonClass]\"\n :disabled=\"disabled\"\n :aria-expanded=\"d_visible\"\n :aria-haspopup=\"true\"\n :aria-controls=\"$id + '_list'\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"ariaLabelledby\"\n :unstyled=\"unstyled\"\n @click=\"onClick($event)\"\n @keydown=\"onTogglerKeydown\"\n v-bind=\"buttonProps\"\n :pt=\"ptm('pcButton')\"\n >\n <template #icon=\"slotProps\">\n <slot name=\"icon\" :visible=\"d_visible\">\n <component v-if=\"d_visible && !!hideIcon\" :is=\"hideIcon ? 'span' : 'PlusIcon'\" :class=\"[hideIcon, slotProps.class]\" v-bind=\"ptm('pcButton')['icon']\" data-pc-section=\"icon\" />\n <component v-else :is=\"showIcon ? 'span' : 'PlusIcon'\" :class=\"[d_visible && !!hideIcon ? hideIcon : showIcon, slotProps.class]\" v-bind=\"ptm('pcButton')['icon']\" data-pc-section=\"icon\" />\n </slot>\n </template>\n </Button>\n </slot>\n <ul :ref=\"listRef\" :id=\"$id + '_list'\" :class=\"cx('list')\" :style=\"sx('list')\" role=\"menu\" tabindex=\"-1\" @focus=\"onFocus\" @blur=\"onBlur\" @keydown=\"onKeyDown\" v-bind=\"ptm('list')\">\n <template v-for=\"(item, index) of model\" :key=\"index\">\n <li\n v-if=\"isItemVisible(item)\"\n :id=\"`${$id}_${index}`\"\n :class=\"cx('item', { id: `${$id}_${index}` })\"\n :style=\"getItemStyle(index)\"\n role=\"none\"\n :data-p-active=\"isItemActive(`${$id}_${index}`)\"\n v-bind=\"getPTOptions(`${$id}_${index}`, 'item')\"\n >\n <template v-if=\"!$slots.item\">\n <Button\n v-tooltip:[tooltipOptions]=\"{ value: item.label, disabled: !tooltipOptions }\"\n :tabindex=\"-1\"\n role=\"menuitem\"\n :class=\"cx('pcAction', { item })\"\n :aria-label=\"item.label\"\n :disabled=\"disabled\"\n :unstyled=\"unstyled\"\n @click=\"onItemClick($event, item)\"\n v-bind=\"actionButtonProps\"\n :pt=\"getPTOptions(`${$id}_${index}`, 'pcAction')\"\n >\n <template v-if=\"item.icon\" #icon=\"slotProps\">\n <slot name=\"itemicon\" :item=\"item\" :class=\"slotProps.class\">\n <span :class=\"[item.icon, slotProps.class]\" v-bind=\"getPTOptions(`${$id}_${index}`, 'actionIcon')\"></span>\n </slot>\n </template>\n </Button>\n </template>\n <component v-else :is=\"$slots.item\" :item=\"item\" :onClick=\"(event) => onItemClick(event, item)\" :toggleCallback=\"(event) => onItemClick(event, item)\"></component>\n </li>\n </template>\n </ul>\n </div>\n <template v-if=\"mask\">\n <div :class=\"[cx('mask'), maskClass]\" :style=\"maskStyle\" v-bind=\"ptm('mask')\"></div>\n </template>\n</template>\n\n<script>\nimport { $dt } from '@primeuix/styled';\nimport { find, findSingle, focus, hasClass } from '@primeuix/utils/dom';\nimport PlusIcon from '@primevue/icons/plus';\nimport Button from 'primevue/button';\nimport Ripple from 'primevue/ripple';\nimport Tooltip from 'primevue/tooltip';\nimport BaseSpeedDial from './BaseSpeedDial.vue';\n\n// Set fix value for SSR.\nconst Math_PI = 3.14159265358979;\n\nexport default {\n name: 'SpeedDial',\n extends: BaseSpeedDial,\n inheritAttrs: false,\n emits: ['click', 'show', 'hide', 'focus', 'blur'],\n documentClickListener: null,\n container: null,\n list: null,\n data() {\n return {\n d_visible: this.visible,\n isItemClicked: false,\n focused: false,\n focusedOptionIndex: -1\n };\n },\n watch: {\n visible(newValue) {\n this.d_visible = newValue;\n }\n },\n mounted() {\n if (this.type !== 'linear') {\n const button = findSingle(this.container, '[data-pc-name=\"pcbutton\"]');\n const firstItem = findSingle(this.list, '[data-pc-section=\"item\"]');\n\n if (button && firstItem) {\n const wDiff = Math.abs(button.offsetWidth - firstItem.offsetWidth);\n const hDiff = Math.abs(button.offsetHeight - firstItem.offsetHeight);\n\n this.list.style.setProperty($dt('item.diff.x').name, `${wDiff / 2}px`);\n this.list.style.setProperty($dt('item.diff.y').name, `${hDiff / 2}px`);\n }\n }\n\n if (this.hideOnClickOutside) {\n this.bindDocumentClickListener();\n }\n },\n beforeUnmount() {\n this.unbindDocumentClickListener();\n },\n methods: {\n getPTOptions(id, key) {\n return this.ptm(key, {\n context: {\n active: this.isItemActive(id),\n hidden: !this.d_visible\n }\n });\n },\n onFocus(event) {\n this.$emit('focus', event);\n },\n onBlur(event) {\n this.focusedOptionIndex = -1;\n this.$emit('blur', event);\n },\n onItemClick(e, item) {\n if (item.command) {\n item.command({ originalEvent: e, item });\n }\n\n this.hide();\n\n this.isItemClicked = true;\n e.preventDefault();\n },\n onClick(event) {\n this.d_visible ? this.hide() : this.show();\n this.isItemClicked = true;\n this.$emit('click', event);\n },\n show() {\n this.d_visible = true;\n this.$emit('show');\n },\n hide() {\n this.d_visible = false;\n this.$emit('hide');\n },\n calculateTransitionDelay(index) {\n const length = this.model.length;\n const visible = this.d_visible;\n\n return (visible ? index : length - index - 1) * this.transitionDelay;\n },\n onTogglerKeydown(event) {\n switch (event.code) {\n case 'ArrowDown':\n case 'ArrowLeft':\n this.onTogglerArrowDown(event);\n\n break;\n\n case 'ArrowUp':\n case 'ArrowRight':\n this.onTogglerArrowUp(event);\n\n break;\n\n case 'Escape':\n this.onEscapeKey();\n\n break;\n\n default:\n break;\n }\n },\n onKeyDown(event) {\n switch (event.code) {\n case 'ArrowDown':\n this.onArrowDown(event);\n break;\n\n case 'ArrowUp':\n this.onArrowUp(event);\n break;\n\n case 'ArrowLeft':\n this.onArrowLeft(event);\n break;\n\n case 'ArrowRight':\n this.onArrowRight(event);\n break;\n\n case 'Enter':\n case 'NumpadEnter':\n case 'Space':\n this.onEnterKey(event);\n break;\n\n case 'Escape':\n this.onEscapeKey(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 default:\n break;\n }\n },\n onTogglerArrowUp(event) {\n this.show();\n this.navigatePrevItem(event);\n\n event.preventDefault();\n },\n onTogglerArrowDown(event) {\n this.show();\n this.navigateNextItem(event);\n\n event.preventDefault();\n },\n onEnterKey(event) {\n const items = find(this.container, '[data-pc-section=\"item\"]');\n const itemIndex = [...items].findIndex((item) => item.id === this.focusedOptionIndex);\n const buttonEl = findSingle(this.container, 'button');\n\n this.onItemClick(event, this.model[itemIndex]);\n this.onBlur(event);\n\n buttonEl && focus(buttonEl);\n },\n onEscapeKey() {\n this.hide();\n\n const buttonEl = findSingle(this.container, 'button');\n\n buttonEl && focus(buttonEl);\n },\n onArrowUp(event) {\n if (this.direction === 'down') {\n this.navigatePrevItem(event);\n } else {\n this.navigateNextItem(event);\n }\n },\n onArrowDown(event) {\n if (this.direction === 'down') {\n this.navigateNextItem(event);\n } else {\n this.navigatePrevItem(event);\n }\n },\n\n onArrowLeft(event) {\n const leftValidDirections = ['left', 'up-right', 'down-left'];\n const rightValidDirections = ['right', 'up-left', 'down-right'];\n\n if (leftValidDirections.includes(this.direction)) {\n this.navigateNextItem(event);\n } else if (rightValidDirections.includes(this.direction)) {\n this.navigatePrevItem(event);\n } else {\n this.navigatePrevItem(event);\n }\n },\n\n onArrowRight(event) {\n const leftValidDirections = ['left', 'up-right', 'down-left'];\n const rightValidDirections = ['right', 'up-left', 'down-right'];\n\n if (leftValidDirections.includes(this.direction)) {\n this.navigatePrevItem(event);\n } else if (rightValidDirections.includes(this.direction)) {\n this.navigateNextItem(event);\n } else {\n this.navigateNextItem(event);\n }\n },\n onEndKey(event) {\n event.preventDefault();\n\n this.focusedOptionIndex = -1;\n this.navigatePrevItem(event);\n },\n onHomeKey(event) {\n event.preventDefault();\n\n this.focusedOptionIndex = -1;\n this.navigateNextItem(event);\n },\n navigateNextItem(event) {\n const optionIndex = this.findNextOptionIndex(this.focusedOptionIndex);\n\n this.changeFocusedOptionIndex(optionIndex);\n\n event.preventDefault();\n },\n navigatePrevItem(event) {\n const optionIndex = this.findPrevOptionIndex(this.focusedOptionIndex);\n\n this.changeFocusedOptionIndex(optionIndex);\n\n event.preventDefault();\n },\n changeFocusedOptionIndex(index) {\n const items = find(this.container, '[data-pc-section=\"item\"]');\n const filteredItems = [...items].filter((item) => !hasClass(findSingle(item, 'a'), 'p-disabled'));\n\n if (filteredItems[index]) {\n this.focusedOptionIndex = filteredItems[index].getAttribute('id');\n const buttonEl = findSingle(filteredItems[index], '[type=\"button\"]');\n\n buttonEl && focus(buttonEl);\n }\n },\n findPrevOptionIndex(index) {\n const items = find(this.container, '[data-pc-section=\"item\"]');\n const filteredItems = [...items].filter((item) => !hasClass(findSingle(item, 'a'), 'p-disabled'));\n const newIndex = index === -1 ? filteredItems[filteredItems.length - 1].id : index;\n let matchedOptionIndex = filteredItems.findIndex((link) => link.getAttribute('id') === newIndex);\n\n matchedOptionIndex = index === -1 ? filteredItems.length - 1 : matchedOptionIndex - 1;\n\n return matchedOptionIndex;\n },\n findNextOptionIndex(index) {\n const items = find(this.container, '[data-pc-section=\"item\"]');\n const filteredItems = [...items].filter((item) => !hasClass(findSingle(item, 'a'), 'p-disabled'));\n const newIndex = index === -1 ? filteredItems[0].id : index;\n let matchedOptionIndex = filteredItems.findIndex((link) => link.getAttribute('id') === newIndex);\n\n matchedOptionIndex = index === -1 ? 0 : matchedOptionIndex + 1;\n\n return matchedOptionIndex;\n },\n calculatePointStyle(index) {\n const type = this.type;\n\n if (type !== 'linear') {\n const length = this.model.length;\n const radius = this.radius || length * 20;\n\n if (type === 'circle') {\n const step = (2 * Math_PI) / length;\n\n return {\n left: `calc(${radius * Math.cos(step * index)}px + ${$dt('item.diff.x', '0px').variable})`,\n top: `calc(${radius * Math.sin(step * index)}px + ${$dt('item.diff.y', '0px').variable})`\n };\n } else if (type === 'semi-circle') {\n const direction = this.direction;\n const step = Math_PI / (length - 1);\n const x = `calc(${radius * Math.cos(step * index)}px + ${$dt('item.diff.x', '0px').variable})`;\n const y = `calc(${radius * Math.sin(step * index)}px + ${$dt('item.diff.y', '0px').variable})`;\n\n if (direction === 'up') {\n return { left: x, bottom: y };\n } else if (direction === 'down') {\n return { left: x, top: y };\n } else if (direction === 'left') {\n return { right: y, top: x };\n } else if (direction === 'right') {\n return { left: y, top: x };\n }\n } else if (type === 'quarter-circle') {\n const direction = this.direction;\n const step = Math_PI / (2 * (length - 1));\n const x = `calc(${radius * Math.cos(step * index)}px + ${$dt('item.diff.x', '0px').variable})`;\n const y = `calc(${radius * Math.sin(step * index)}px + ${$dt('item.diff.y', '0px').variable})`;\n\n if (direction === 'up-left') {\n return { right: x, bottom: y };\n } else if (direction === 'up-right') {\n return { left: x, bottom: y };\n } else if (direction === 'down-left') {\n return { right: y, top: x };\n } else if (direction === 'down-right') {\n return { left: y, top: x };\n }\n }\n }\n\n return {};\n },\n getItemStyle(index) {\n const transitionDelay = this.calculateTransitionDelay(index);\n const pointStyle = this.calculatePointStyle(index);\n\n return {\n transitionDelay: `${transitionDelay}ms`,\n ...pointStyle\n };\n },\n bindDocumentClickListener() {\n if (!this.documentClickListener) {\n this.documentClickListener = (event) => {\n if (this.d_visible && this.isOutsideClicked(event)) {\n this.hide();\n }\n\n this.isItemClicked = false;\n };\n\n document.addEventListener('click', this.documentClickListener);\n }\n },\n unbindDocumentClickListener() {\n if (this.documentClickListener) {\n document.removeEventListener('click', this.documentClickListener);\n this.documentClickListener = null;\n }\n },\n isOutsideClicked(event) {\n return this.container && !(this.container.isSameNode(event.target) || this.container.contains(event.target) || this.isItemClicked);\n },\n isItemVisible(item) {\n return typeof item.visible === 'function' ? item.visible() : item.visible !== false;\n },\n isItemActive(id) {\n return id === this.focusedOptionId;\n },\n containerRef(el) {\n this.container = el;\n },\n listRef(el) {\n this.list = el;\n }\n },\n computed: {\n containerClass() {\n return [this.cx('root'), this.class];\n },\n focusedOptionId() {\n return this.focusedOptionIndex !== -1 ? this.focusedOptionIndex : null;\n }\n },\n components: {\n Button,\n PlusIcon\n },\n directives: {\n ripple: Ripple,\n tooltip: Tooltip\n }\n};\n</script>\n","<template>\n <div :ref=\"containerRef\" :class=\"containerClass\" :style=\"[style, sx('root')]\" v-bind=\"ptmi('root')\">\n <slot name=\"button\" :visible=\"d_visible\" :toggleCallback=\"onClick\">\n <Button\n :class=\"[cx('pcButton'), buttonClass]\"\n :disabled=\"disabled\"\n :aria-expanded=\"d_visible\"\n :aria-haspopup=\"true\"\n :aria-controls=\"$id + '_list'\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"ariaLabelledby\"\n :unstyled=\"unstyled\"\n @click=\"onClick($event)\"\n @keydown=\"onTogglerKeydown\"\n v-bind=\"buttonProps\"\n :pt=\"ptm('pcButton')\"\n >\n <template #icon=\"slotProps\">\n <slot name=\"icon\" :visible=\"d_visible\">\n <component v-if=\"d_visible && !!hideIcon\" :is=\"hideIcon ? 'span' : 'PlusIcon'\" :class=\"[hideIcon, slotProps.class]\" v-bind=\"ptm('pcButton')['icon']\" data-pc-section=\"icon\" />\n <component v-else :is=\"showIcon ? 'span' : 'PlusIcon'\" :class=\"[d_visible && !!hideIcon ? hideIcon : showIcon, slotProps.class]\" v-bind=\"ptm('pcButton')['icon']\" data-pc-section=\"icon\" />\n </slot>\n </template>\n </Button>\n </slot>\n <ul :ref=\"listRef\" :id=\"$id + '_list'\" :class=\"cx('list')\" :style=\"sx('list')\" role=\"menu\" tabindex=\"-1\" @focus=\"onFocus\" @blur=\"onBlur\" @keydown=\"onKeyDown\" v-bind=\"ptm('list')\">\n <template v-for=\"(item, index) of model\" :key=\"index\">\n <li\n v-if=\"isItemVisible(item)\"\n :id=\"`${$id}_${index}`\"\n :class=\"cx('item', { id: `${$id}_${index}` })\"\n :style=\"getItemStyle(index)\"\n role=\"none\"\n :data-p-active=\"isItemActive(`${$id}_${index}`)\"\n v-bind=\"getPTOptions(`${$id}_${index}`, 'item')\"\n >\n <template v-if=\"!$slots.item\">\n <Button\n v-tooltip:[tooltipOptions]=\"{ value: item.label, disabled: !tooltipOptions }\"\n :tabindex=\"-1\"\n role=\"menuitem\"\n :class=\"cx('pcAction', { item })\"\n :aria-label=\"item.label\"\n :disabled=\"disabled\"\n :unstyled=\"unstyled\"\n @click=\"onItemClick($event, item)\"\n v-bind=\"actionButtonProps\"\n :pt=\"getPTOptions(`${$id}_${index}`, 'pcAction')\"\n >\n <template v-if=\"item.icon\" #icon=\"slotProps\">\n <slot name=\"itemicon\" :item=\"item\" :class=\"slotProps.class\">\n <span :class=\"[item.icon, slotProps.class]\" v-bind=\"getPTOptions(`${$id}_${index}`, 'actionIcon')\"></span>\n </slot>\n </template>\n </Button>\n </template>\n <component v-else :is=\"$slots.item\" :item=\"item\" :onClick=\"(event) => onItemClick(event, item)\" :toggleCallback=\"(event) => onItemClick(event, item)\"></component>\n </li>\n </template>\n </ul>\n </div>\n <template v-if=\"mask\">\n <div :class=\"[cx('mask'), maskClass]\" :style=\"maskStyle\" v-bind=\"ptm('mask')\"></div>\n </template>\n</template>\n\n<script>\nimport { $dt } from '@primeuix/styled';\nimport { find, findSingle, focus, hasClass } from '@primeuix/utils/dom';\nimport PlusIcon from '@primevue/icons/plus';\nimport Button from 'primevue/button';\nimport Ripple from 'primevue/ripple';\nimport Tooltip from 'primevue/tooltip';\nimport BaseSpeedDial from './BaseSpeedDial.vue';\n\n// Set fix value for SSR.\nconst Math_PI = 3.14159265358979;\n\nexport default {\n name: 'SpeedDial',\n extends: BaseSpeedDial,\n inheritAttrs: false,\n emits: ['click', 'show', 'hide', 'focus', 'blur'],\n documentClickListener: null,\n container: null,\n list: null,\n data() {\n return {\n d_visible: this.visible,\n isItemClicked: false,\n focused: false,\n focusedOptionIndex: -1\n };\n },\n watch: {\n visible(newValue) {\n this.d_visible = newValue;\n }\n },\n mounted() {\n if (this.type !== 'linear') {\n const button = findSingle(this.container, '[data-pc-name=\"pcbutton\"]');\n const firstItem = findSingle(this.list, '[data-pc-section=\"item\"]');\n\n if (button && firstItem) {\n const wDiff = Math.abs(button.offsetWidth - firstItem.offsetWidth);\n const hDiff = Math.abs(button.offsetHeight - firstItem.offsetHeight);\n\n this.list.style.setProperty($dt('item.diff.x').name, `${wDiff / 2}px`);\n this.list.style.setProperty($dt('item.diff.y').name, `${hDiff / 2}px`);\n }\n }\n\n if (this.hideOnClickOutside) {\n this.bindDocumentClickListener();\n }\n },\n beforeUnmount() {\n this.unbindDocumentClickListener();\n },\n methods: {\n getPTOptions(id, key) {\n return this.ptm(key, {\n context: {\n active: this.isItemActive(id),\n hidden: !this.d_visible\n }\n });\n },\n onFocus(event) {\n this.$emit('focus', event);\n },\n onBlur(event) {\n this.focusedOptionIndex = -1;\n this.$emit('blur', event);\n },\n onItemClick(e, item) {\n if (item.command) {\n item.command({ originalEvent: e, item });\n }\n\n this.hide();\n\n this.isItemClicked = true;\n e.preventDefault();\n },\n onClick(event) {\n this.d_visible ? this.hide() : this.show();\n this.isItemClicked = true;\n this.$emit('click', event);\n },\n show() {\n this.d_visible = true;\n this.$emit('show');\n },\n hide() {\n this.d_visible = false;\n this.$emit('hide');\n },\n calculateTransitionDelay(index) {\n const length = this.model.length;\n const visible = this.d_visible;\n\n return (visible ? index : length - index - 1) * this.transitionDelay;\n },\n onTogglerKeydown(event) {\n switch (event.code) {\n case 'ArrowDown':\n case 'ArrowLeft':\n this.onTogglerArrowDown(event);\n\n break;\n\n case 'ArrowUp':\n case 'ArrowRight':\n this.onTogglerArrowUp(event);\n\n break;\n\n case 'Escape':\n this.onEscapeKey();\n\n break;\n\n default:\n break;\n }\n },\n onKeyDown(event) {\n switch (event.code) {\n case 'ArrowDown':\n this.onArrowDown(event);\n break;\n\n case 'ArrowUp':\n this.onArrowUp(event);\n break;\n\n case 'ArrowLeft':\n this.onArrowLeft(event);\n break;\n\n case 'ArrowRight':\n this.onArrowRight(event);\n break;\n\n case 'Enter':\n case 'NumpadEnter':\n case 'Space':\n this.onEnterKey(event);\n break;\n\n case 'Escape':\n this.onEscapeKey(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 default:\n break;\n }\n },\n onTogglerArrowUp(event) {\n this.show();\n this.navigatePrevItem(event);\n\n event.preventDefault();\n },\n onTogglerArrowDown(event) {\n this.show();\n this.navigateNextItem(event);\n\n event.preventDefault();\n },\n onEnterKey(event) {\n const items = find(this.container, '[data-pc-section=\"item\"]');\n const itemIndex = [...items].findIndex((item) => item.id === this.focusedOptionIndex);\n const buttonEl = findSingle(this.container, 'button');\n\n this.onItemClick(event, this.model[itemIndex]);\n this.onBlur(event);\n\n buttonEl && focus(buttonEl);\n },\n onEscapeKey() {\n this.hide();\n\n const buttonEl = findSingle(this.container, 'button');\n\n buttonEl && focus(buttonEl);\n },\n onArrowUp(event) {\n if (this.direction === 'down') {\n this.navigatePrevItem(event);\n } else {\n this.navigateNextItem(event);\n }\n },\n onArrowDown(event) {\n if (this.direction === 'down') {\n this.navigateNextItem(event);\n } else {\n this.navigatePrevItem(event);\n }\n },\n\n onArrowLeft(event) {\n const leftValidDirections = ['left', 'up-right', 'down-left'];\n const rightValidDirections = ['right', 'up-left', 'down-right'];\n\n if (leftValidDirections.includes(this.direction)) {\n this.navigateNextItem(event);\n } else if (rightValidDirections.includes(this.direction)) {\n this.navigatePrevItem(event);\n } else {\n this.navigatePrevItem(event);\n }\n },\n\n onArrowRight(event) {\n const leftValidDirections = ['left', 'up-right', 'down-left'];\n const rightValidDirections = ['right', 'up-left', 'down-right'];\n\n if (leftValidDirections.includes(this.direction)) {\n this.navigatePrevItem(event);\n } else if (rightValidDirections.includes(this.direction)) {\n this.navigateNextItem(event);\n } else {\n this.navigateNextItem(event);\n }\n },\n onEndKey(event) {\n event.preventDefault();\n\n this.focusedOptionIndex = -1;\n this.navigatePrevItem(event);\n },\n onHomeKey(event) {\n event.preventDefault();\n\n this.focusedOptionIndex = -1;\n this.navigateNextItem(event);\n },\n navigateNextItem(event) {\n const optionIndex = this.findNextOptionIndex(this.focusedOptionIndex);\n\n this.changeFocusedOptionIndex(optionIndex);\n\n event.preventDefault();\n },\n navigatePrevItem(event) {\n const optionIndex = this.findPrevOptionIndex(this.focusedOptionIndex);\n\n this.changeFocusedOptionIndex(optionIndex);\n\n event.preventDefault();\n },\n changeFocusedOptionIndex(index) {\n const items = find(this.container, '[data-pc-section=\"item\"]');\n const filteredItems = [...items].filter((item) => !hasClass(findSingle(item, 'a'), 'p-disabled'));\n\n if (filteredItems[index]) {\n this.focusedOptionIndex = filteredItems[index].getAttribute('id');\n const buttonEl = findSingle(filteredItems[index], '[type=\"button\"]');\n\n buttonEl && focus(buttonEl);\n }\n },\n findPrevOptionIndex(index) {\n const items = find(this.container, '[data-pc-section=\"item\"]');\n const filteredItems = [...items].filter((item) => !hasClass(findSingle(item, 'a'), 'p-disabled'));\n const newIndex = index === -1 ? filteredItems[filteredItems.length - 1].id : index;\n let matchedOptionIndex = filteredItems.findIndex((link) => link.getAttribute('id') === newIndex);\n\n matchedOptionIndex = index === -1 ? filteredItems.length - 1 : matchedOptionIndex - 1;\n\n return matchedOptionIndex;\n },\n findNextOptionIndex(index) {\n const items = find(this.container, '[data-pc-section=\"item\"]');\n const filteredItems = [...items].filter((item) => !hasClass(findSingle(item, 'a'), 'p-disabled'));\n const newIndex = index === -1 ? filteredItems[0].id : index;\n let matchedOptionIndex = filteredItems.findIndex((link) => link.getAttribute('id') === newIndex);\n\n matchedOptionIndex = index === -1 ? 0 : matchedOptionIndex + 1;\n\n return matchedOptionIndex;\n },\n calculatePointStyle(index) {\n const type = this.type;\n\n if (type !== 'linear') {\n const length = this.model.length;\n const radius = this.radius || length * 20;\n\n if (type === 'circle') {\n const step = (2 * Math_PI) / length;\n\n return {\n left: `calc(${radius * Math.cos(step * index)}px + ${$dt('item.diff.x', '0px').variable})`,\n top: `calc(${radius * Math.sin(step * index)}px + ${$dt('item.diff.y', '0px').variable})`\n };\n } else if (type === 'semi-circle') {\n const direction = this.direction;\n const step = Math_PI / (length - 1);\n const x = `calc(${radius * Math.cos(step * index)}px + ${$dt('item.diff.x', '0px').variable})`;\n const y = `calc(${radius * Math.sin(step * index)}px + ${$dt('item.diff.y', '0px').variable})`;\n\n if (direction === 'up') {\n return { left: x, bottom: y };\n } else if (direction === 'down') {\n return { left: x, top: y };\n } else if (direction === 'left') {\n return { right: y, top: x };\n } else if (direction === 'right') {\n return { left: y, top: x };\n }\n } else if (type === 'quarter-circle') {\n const direction = this.direction;\n const step = Math_PI / (2 * (length - 1));\n const x = `calc(${radius * Math.cos(step * index)}px + ${$dt('item.diff.x', '0px').variable})`;\n const y = `calc(${radius * Math.sin(step * index)}px + ${$dt('item.diff.y', '0px').variable})`;\n\n if (direction === 'up-left') {\n return { right: x, bottom: y };\n } else if (direction === 'up-right') {\n return { left: x, bottom: y };\n } else if (direction === 'down-left') {\n return { right: y, top: x };\n } else if (direction === 'down-right') {\n return { left: y, top: x };\n }\n }\n }\n\n return {};\n },\n getItemStyle(index) {\n const transitionDelay = this.calculateTransitionDelay(index);\n const pointStyle = this.calculatePointStyle(index);\n\n return {\n transitionDelay: `${transitionDelay}ms`,\n ...pointStyle\n };\n },\n bindDocumentClickListener() {\n if (!this.documentClickListener) {\n this.documentClickListener = (event) => {\n if (this.d_visible && this.isOutsideClicked(event)) {\n this.hide();\n }\n\n this.isItemClicked = false;\n };\n\n document.addEventListener('click', this.documentClickListener);\n }\n },\n unbindDocumentClickListener() {\n if (this.documentClickListener) {\n document.removeEventListener('click', this.documentClickListener);\n this.documentClickListener = null;\n }\n },\n isOutsideClicked(event) {\n return this.container && !(this.container.isSameNode(event.target) || this.container.contains(event.target) || this.isItemClicked);\n },\n isItemVisible(item) {\n return typeof item.visible === 'function' ? item.visible() : item.visible !== false;\n },\n isItemActive(id) {\n return id === this.focusedOptionId;\n },\n containerRef(el) {\n this.container = el;\n },\n listRef(el) {\n this.list = el;\n }\n },\n computed: {\n containerClass() {\n return [this.cx('root'), this.class];\n },\n focusedOptionId() {\n return this.focusedOptionIndex !== -1 ? this.focusedOptionIndex : null;\n }\n },\n components: {\n Button,\n PlusIcon\n },\n directives: {\n ripple: Ripple,\n tooltip: Tooltip\n }\n};\n</script>\n"],"names":["name","BaseComponent","props","model","visible","type","Boolean","direction","String","transitionDelay","Number","radius","mask","disabled","hideOnClickOutside","buttonClass","maskStyle","maskClass","showIcon","undefined","hideIcon","rotateAnimation","tooltipOptions","style","buttonProps","Object","default","rounded","actionButtonProps","severity","size","ariaLabelledby","ariaLabel","SpeedDialStyle","provide","$pcSpeedDial","$parentInstance","Math_PI","BaseSpeedDial","inheritAttrs","emits","documentClickListener","container","list","data","d_visible","isItemClicked","focused","focusedOptionIndex","watch","newValue","mounted","button","findSingle","firstItem","wDiff","Math","abs","offsetWidth","hDiff","offsetHeight","setProperty","$dt","concat","bindDocumentClickListener","beforeUnmount","unbindDocumentClickListener","methods","getPTOptions","id","key","ptm","context","active","isItemActive","hidden","onFocus","event","$emit","onBlur","onItemClick","e","item","command","originalEvent","hide","preventDefault","onClick","show","calculateTransitionDelay","index","length","onTogglerKeydown","code","onTogglerArrowDown","onTogglerArrowUp","onEscapeKey","onKeyDown","onArrowDown","onArrowUp","onArrowLeft","onArrowRight","onEnterKey","onHomeKey","onEndKey","navigatePrevItem","navigateNextItem","_this","items","find","itemIndex","_toConsumableArray","findIndex","buttonEl","focus","leftValidDirections","rightValidDirections","includes","optionIndex","findNextOptionIndex","changeFocusedOptionIndex","findPrevOptionIndex","filteredItems","filter","hasClass","getAttribute","newIndex","matchedOptionIndex","link","calculatePointStyle","step","left","cos","variable","top","sin","x","y","bottom","right","getItemStyle","pointStyle","_objectSpread","_this2","isOutsideClicked","document","addEventListener","removeEventListener","isSameNode","target","contains","isItemVisible","focusedOptionId","containerRef","el","listRef","computed","containerClass","cx","components","Button","PlusIcon","directives","ripple","Ripple","tooltip","Tooltip","_createElementVNode","_mergeProps","ref","$options","_ctx","sx","ptmi","_renderSlot","$slots","$data","toggleCallback","_createVNode","_component_Button","$id","unstyled","_cache","$event","onKeydown","pt","icon","_withCtx","slotProps","_createBlock","_resolveDynamicComponent","role","tabindex","apply","arguments","_openBlock","_createElementBlock","_Fragment","_renderList","_withDirectives","label","fn","_normalizeClass","_directive_tooltip","value"],"mappings":"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