UNPKG

@coreui/vue

Version:

UI Components Library for Vue.js

93 lines (90 loc) 3.25 kB
import { createPopper } from '@popperjs/core'; import 'vue'; import { useUniqueId } from '../composables/useUniqueId.js'; const createPopoverElement = (id, header, content) => { const popover = document.createElement('div'); popover.id = id; popover.classList.add('popover', 'bs-popover-auto', 'fade'); popover.setAttribute('role', 'popover'); popover.innerHTML = `<div class="popover-arrow" data-popper-arrow></div> <div class="popover-header">${header}</div> <div class="popover-body" id="">${content}</div>`; return popover; }; const addPopoverElement = (el, popover, popperOptions, uID) => { el.setAttribute('aria-describedby', uID); document.body.appendChild(popover); createPopper(el, popover, popperOptions); setTimeout(() => { popover.classList.add('show'); }, 1); }; const removePopoverElement = (el, popover) => { el.removeAttribute('aria-describedby'); popover.classList.remove('show'); setTimeout(() => { popover.remove(); }, 300); }; const togglePopoverElement = (el, popover, popperOptions, uID) => { const popperElement = document.getElementById(popover.id); if (popperElement && popperElement.classList.contains('show')) { removePopoverElement(el, popover); return; } addPopoverElement(el, popover, popperOptions, uID); }; var vCPopover = { name: 'c-popover', uid: '', mounted(el, binding) { const { getUID } = useUniqueId('popover'); const value = binding.value; const content = typeof value === 'string' ? value : value.content ?? ''; const header = value.header ?? ''; const trigger = value.trigger ?? 'click'; // Popper Config const offset = value.offset ?? [0, 8]; const placement = value.placement ?? 'top'; const popperOptions = { placement: placement, modifiers: [ { name: 'offset', options: { offset: offset, }, }, ], }; const uID = getUID(); binding.arg = uID; const popover = createPopoverElement(uID, header, content); trigger.includes('click') && el.addEventListener('click', () => { togglePopoverElement(el, popover, popperOptions, uID); }); if (trigger.includes('focus')) { el.addEventListener('focus', () => { addPopoverElement(el, popover, popperOptions, uID); }); el.addEventListener('blur', () => { removePopoverElement(el, popover); }); } if (trigger.includes('hover')) { el.addEventListener('mouseenter', () => { addPopoverElement(el, popover, popperOptions, uID); }); el.addEventListener('mouseleave', () => { removePopoverElement(el, popover); }); } }, unmounted(_el, binding) { const popover = binding.arg && document.getElementById(binding.arg); popover && popover.remove(); }, }; export { vCPopover as default }; //# sourceMappingURL=v-c-popover.js.map