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/speeddial/BaseSpeedDial.vue","../../src/speeddial/SpeedDial.vue","../../src/speeddial/SpeedDial.vue?vue&type=template&id=e2c27f26&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 :aria-controls=\"`${id}_item`\"\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 <span :class=\"[item.icon, slotProps.class]\" v-bind=\"getPTOptions(`${id}_${index}`, 'actionIcon')\"></span>\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 { UniqueComponentId } from '@primevue/core/utils';\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 id: this.$attrs.id,\n d_visible: this.visible,\n isItemClicked: false,\n focused: false,\n focusedOptionIndex: -1\n };\n },\n watch: {\n '$attrs.id': function (newValue) {\n this.id = newValue || UniqueComponentId();\n },\n visible(newValue) {\n this.d_visible = newValue;\n }\n },\n mounted() {\n this.id = this.id || UniqueComponentId();\n\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 :aria-controls=\"`${id}_item`\"\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 <span :class=\"[item.icon, slotProps.class]\" v-bind=\"getPTOptions(`${id}_${index}`, 'actionIcon')\"></span>\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 { UniqueComponentId } from '@primevue/core/utils';\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 id: this.$attrs.id,\n d_visible: this.visible,\n isItemClicked: false,\n focused: false,\n focusedOptionIndex: -1\n };\n },\n watch: {\n '$attrs.id': function (newValue) {\n this.id = newValue || UniqueComponentId();\n },\n visible(newValue) {\n this.d_visible = newValue;\n }\n },\n mounted() {\n this.id = this.id || UniqueComponentId();\n\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","id","$attrs","d_visible","isItemClicked","focused","focusedOptionIndex","watch","$attrsId","newValue","UniqueComponentId","mounted","button","findSingle","firstItem","wDiff","Math","abs","offsetWidth","hDiff","offsetHeight","setProperty","$dt","concat","bindDocumentClickListener","beforeUnmount","unbindDocumentClickListener","methods","getPTOptions","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","unstyled","_cache","$event","onKeydown","pt","icon","_withCtx","slotProps","_createBlock","_resolveDynamicComponent","role","tabindex","apply","arguments","_openBlock","_createElementBlock","_Fragment","_renderList","_withDirectives","label","fn","_directive_tooltip","value"],"mappings":"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