UNPKG

@inkline/inkline

Version:

Inkline is the Vue.js UI/UX Library built for creating your next design system

33 lines (26 loc) 763 B
import { Directive } from 'vue'; import { on, isVisible } from '@inkline/inkline/helpers'; export const onClickOutside = (element: HTMLElement, binding: any) => (e: { target: HTMLElement }) => { if (!isVisible(element) || !e.target) { return; } if (element === e.target || element.contains(e.target)) { return; } binding.value(e); }; /** * v-click-outside * @example * ```vue * <div v-click-outside="handleClose"> * ``` */ export const ClickOutsideDirective: Directive = { beforeMount (element: HTMLElement, binding: any) { if (typeof window !== 'undefined') { on(window.document as any, 'mouseup', onClickOutside(element, binding)); } } }; export default ClickOutsideDirective;