@eonova/v3-directives 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/directive/v-backtop/index.ts","../src/directive/v-clickOutside/index.ts","../src/directive/v-copy/index.ts","../src/utils/isBoolean.ts","../src/utils/isFunction.ts","../src/utils/loadingSvg.ts","../src/directive/v-debounce/index.ts","../src/directive/v-doubleClick/index.ts","../src/directive/v-draggable/index.ts","../src/directive/v-ellipsis/index.ts","../src/directive/v-emoji/index.ts","../src/directive/v-empty/index.ts","../src/directive/v-flicker/index.ts","../src/directive/v-focus/index.ts","../src/directive/v-highlight/index.ts","../src/directive/v-hover/index.ts","../src/directive/v-input/index.ts","../src/directive/v-lazyImg/index.ts","../src/directive/v-loading/index.ts","../src/directive/v-longpress/index.ts","../src/directive/v-money/index.ts","../src/directive/v-onOnce/index.ts","../src/directive/v-permission/index.ts","../src/directive/v-resize/index.ts","../src/directive/v-ripple/index.ts","../src/directive/v-slideIn/index.ts","../src/directive/v-throttle/index.ts","../src/directive/v-waterMarker/index.ts","../src/index.ts"],"names":["handleScroll","handler","addEventListener","elMapToHandlers","el","elMapToEventName","style","e"],"mappings":"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","sourcesContent":["/**\n * @description: v-backtop指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/13 14:05:16\n * @description: 为元素添加返回顶部功能\n */\nimport type { Directive, DirectiveBinding } from 'vue'\n\ninterface BackTopElement extends HTMLElement {\n style: CSSStyleDeclaration\n}\n\n// 定义通用的滚动元素接口\ninterface ScrollableElement extends HTMLElement {\n scrollTop: number\n}\n\nconst vBackTop: Directive = {\n mounted(el: BackTopElement, binding: DirectiveBinding<number | undefined>) {\n const target = binding.arg ? document.getElementById(binding.arg) as (Window | HTMLElement) : window\n el.addEventListener('click', () => {\n target.scrollTo({\n behavior: 'smooth',\n top: 0,\n })\n })\n const handleScroll = () => {\n const isScrolledUp = (target as ScrollableElement).scrollTop < (binding.value as number)\n el.style.visibility = isScrolledUp ? 'hidden' : 'unset'\n }\n if ((target as ScrollableElement).scrollTop < (binding.value as number))\n el.style.visibility = 'hidden';\n\n (target as ScrollableElement).addEventListener('scroll', handleScroll)\n },\n unmounted(el: BackTopElement, binding: DirectiveBinding<number | undefined>) {\n const target = binding.arg ? document.getElementById(binding.arg) as (Window | HTMLElement) : window\n const handleScroll = () => {\n const isScrolledUp = (target as ScrollableElement).scrollTop < (binding.value as number)\n el.style.visibility = isScrolledUp ? 'hidden' : 'unset'\n };\n\n (target as ScrollableElement).removeEventListener('scroll', handleScroll)\n el.removeEventListener('click', handleScroll)\n },\n updated(el: BackTopElement, binding: DirectiveBinding<number | undefined>) {\n const target = binding.arg ? document.getElementById(binding.arg) as (Window | HTMLElement) : window\n const handleScroll = () => {\n const isScrolledUp = (target as ScrollableElement).scrollTop < (binding.value as number)\n el.style.visibility = isScrolledUp ? 'hidden' : 'unset'\n }\n\n if (binding.value !== undefined)\n (target as ScrollableElement).addEventListener('scroll', handleScroll)\n else\n (target as ScrollableElement).removeEventListener('scroll', handleScroll)\n },\n}\n\nexport default vBackTop\n","/**\n * @description: v-clickOutside指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/07 11:12:16\n * @description: 点击元素外部触发时事件\n */\nimport type { Directive, DirectiveBinding } from 'vue'\n\nconst elMapToHandlers: WeakMap<Element, (e: MouseEvent) => void> = new WeakMap()\n\nfunction addEventListener(el: Element, binding: DirectiveBinding) {\n const handler = (e: MouseEvent) => {\n if (el.contains(e.target as Node))\n return\n\n const { value } = binding\n value()\n }\n window.addEventListener('click', handler)\n elMapToHandlers.set(el, handler)\n}\n\nconst vClickOut: Directive = {\n beforeUnmount(el: HTMLElement) {\n if (elMapToHandlers.has(el)) {\n const handler = elMapToHandlers.get(el)\n\n handler && window.removeEventListener('click', handler)\n elMapToHandlers.delete(el)\n }\n },\n mounted(el: HTMLElement, binding: DirectiveBinding) {\n addEventListener(el, binding)\n },\n updated(el: HTMLElement, binding: DirectiveBinding) {\n if (elMapToHandlers.has(el)) {\n const handler = elMapToHandlers.get(el)\n handler && window.removeEventListener('click', handler)\n elMapToHandlers.delete(el)\n }\n addEventListener(el, binding)\n },\n}\n\nexport default vClickOut\n","/**\n * @description: v-copy指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/07 11:12:16\n * @description: 实现文本复制到剪贴板功能\n */\nimport type { Directive, DirectiveBinding } from 'vue'\n\nfunction addEventListener(el: Element, binding: DirectiveBinding) {\n const { value } = binding\n\n el.setAttribute('copyValue', String(value))\n\n const copyHandler = (): void => {\n navigator.clipboard\n .writeText(el.getAttribute('copyValue') || '')\n .then(() => {\n // eslint-disable-next-line no-alert\n window.alert('复制成功!')\n })\n .catch(() => {\n // eslint-disable-next-line no-alert\n window.alert('复制失败!')\n })\n }\n\n el.addEventListener('click', copyHandler)\n}\n\nconst vCopy: Directive = {\n mounted(el: HTMLElement, binding) {\n addEventListener(el, binding)\n },\n updated(el: HTMLElement, binding) {\n const { value } = binding\n el.setAttribute('copyValue', String(value))\n },\n}\n\nexport default vCopy\n","export default function isBoolean(x: any): boolean {\n return typeof x === 'boolean'\n}\n","export default function (value: any): boolean {\n return typeof value === 'function'\n}\n","export default `\n<svg width=\"57\" height=\"57\" viewBox=\"0 0 57 57\" xmlns=\"http://www.w3.org/2000/svg\" stroke=\"#fff\">\n <g fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(1 1)\" stroke-width=\"2\">\n <circle cx=\"5\" cy=\"50\" r=\"5\">\n <animate attributeName=\"cy\"\n begin=\"0s\" dur=\"2.2s\"\n values=\"50;5;50;50\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n <animate attributeName=\"cx\"\n begin=\"0s\" dur=\"2.2s\"\n values=\"5;27;49;5\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n </circle>\n <circle cx=\"27\" cy=\"5\" r=\"5\">\n <animate attributeName=\"cy\"\n begin=\"0s\" dur=\"2.2s\"\n from=\"5\" to=\"5\"\n values=\"5;50;50;5\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n <animate attributeName=\"cx\"\n begin=\"0s\" dur=\"2.2s\"\n from=\"27\" to=\"27\"\n values=\"27;49;5;27\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n </circle>\n <circle cx=\"49\" cy=\"50\" r=\"5\">\n <animate attributeName=\"cy\"\n begin=\"0s\" dur=\"2.2s\"\n values=\"50;50;5;50\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n <animate attributeName=\"cx\"\n from=\"49\" to=\"49\"\n begin=\"0s\" dur=\"2.2s\"\n values=\"49;5;27;49\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n </circle>\n </g>\n </g>\n</svg>\n`\n","import type { Directive, DirectiveBinding } from 'vue'\nimport { isFunction } from '../../utils/index'\n\nconst elMapToHandlers: WeakMap<Element, () => void> = new WeakMap()\n\nconst elMapToEventName: WeakMap<Element, string> = new WeakMap()\n\nfunction addEventListener(el: Element, binding: DirectiveBinding): void {\n const { arg, value } = binding\n if (!isFunction(value))\n return\n\n const delay = arg ? Number(arg.split('-')[1]) : 300\n\n const eventName = arg ? arg.split('-')[0] : 'click'\n\n let timer: undefined | number\n\n const handler = (): void => {\n if (timer === undefined) {\n timer = window.setTimeout(() => {\n value()\n timer = undefined\n }, delay)\n }\n else {\n window.clearTimeout(timer)\n timer = window.setTimeout(() => {\n value()\n timer = undefined\n }, delay)\n }\n }\n\n elMapToHandlers.set(el, handler)\n elMapToEventName.set(el, eventName)\n el.addEventListener(eventName, handler)\n}\n\nconst vDebounce: Directive = {\n beforeUnmount(el: HTMLElement) {\n elMapToHandlers.delete(el)\n elMapToEventName.delete(el)\n },\n mounted(el: HTMLElement, binding) {\n addEventListener(el, binding)\n },\n updated(el: HTMLElement, binding) {\n if (elMapToHandlers.has(el)) {\n const eventName = elMapToEventName.get(el)\n const handler = elMapToHandlers.get(el)\n handler\n && eventName\n && el.removeEventListener(eventName as keyof HTMLElementEventMap, handler)\n elMapToHandlers.delete(el)\n elMapToEventName.delete(el)\n }\n\n addEventListener(el, binding)\n },\n}\nexport default vDebounce\n","/**\n * @description: v-doubleClick指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/07 11:12:16\n * @description: 双击触发事件\n */\nimport type { Directive, DirectiveBinding } from 'vue'\nimport { isFunction } from '../../utils'\n\nconst elMapToHandlers: WeakMap<Element, () => void> = new WeakMap()\n\nfunction addEventListener(el: Element, binding: DirectiveBinding): void {\n const { arg, value } = binding\n if (!isFunction(value))\n return\n let clickCount = 0\n let time = 0\n\n const handler = () => {\n clickCount++\n const now = new Date().getTime()\n\n if (clickCount === 1) {\n time = now\n setTimeout(\n () => {\n clickCount = 0\n time = 0\n },\n arg ? Number(arg) : 300,\n )\n }\n\n if (clickCount === 2) {\n if (now - time < (arg ? Number(arg) : 300))\n value()\n\n clickCount = 0\n time = 0\n }\n }\n elMapToHandlers.set(el, handler)\n el.addEventListener('click', handler)\n}\n\nconst vDoubleClick: Directive = {\n beforeUnmount(el) {\n elMapToHandlers.delete(el)\n },\n mounted(el: HTMLElement, binding) {\n addEventListener(el, binding)\n },\n updated(el: HTMLElement, binding) {\n if (elMapToHandlers.has(el)) {\n const handler = elMapToHandlers.get(el)\n handler && el.removeEventListener('click', handler)\n elMapToHandlers.delete(el)\n }\n\n addEventListener(el, binding)\n },\n}\nexport default vDoubleClick\n","/**\n * @description: v-draggable指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/07 11:12:16\n * @description: 使元素可拖拽\n */\nimport type { Directive } from 'vue'\n\nconst vDraggable: Directive = {\n mounted(el: HTMLElement) {\n let startX = 0\n let startY = 0\n\n let offsetXX = 0\n let offsetYY = 0\n\n let endX = 0\n let endY = 0\n\n el.style.cursor = 'move'\n\n const transformValue = window\n .getComputedStyle(el)\n .transform.split(',')\n .map(item => Number.parseInt(item))\n .slice(4, 6)\n\n if (transformValue.length > 1) {\n endX = transformValue[0]\n endY = transformValue[1]\n }\n\n const handler = (e: MouseEvent) => {\n const { clientX, clientY } = e\n const offsetX = clientX - startX + endX\n const offsetY = clientY - startY + endY\n offsetXX = offsetX\n offsetYY = offsetY\n el.style.transform = `translate(${offsetX}px, ${offsetY}px)`\n }\n\n el.addEventListener('mousedown', (e: MouseEvent) => {\n const { clientX, clientY } = e\n startX = clientX\n startY = clientY\n\n window.addEventListener('mousemove', handler)\n })\n el.addEventListener('mouseup', () => {\n endX = offsetXX\n endY = offsetYY\n window.removeEventListener('mousemove', handler)\n })\n },\n}\nexport default vDraggable\n","/**\n * @description: v-ellipsis指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/07 11:12:16\n * @description: 省略超出文本\n */\nimport type { Directive, DirectiveBinding } from 'vue'\n\nfunction handler(el: HTMLElement, binding: DirectiveBinding) {\n el.style.overflow = 'hidden'\n el.style.textOverflow = 'ellipsis'\n const { arg } = binding\n if (arg) {\n el.style.display = '-webkit-box'\n el.style.webkitLineClamp = String(Number(arg))\n el.style.webkitBoxOrient = 'vertical'\n }\n else {\n el.style.whiteSpace = 'nowrap'\n }\n el.setAttribute('title', el.textContent as string)\n}\n\nconst vEllipsis: Directive = {\n mounted(el: HTMLElement, binding) {\n handler(el, binding)\n },\n updated(el: HTMLElement, binding) {\n handler(el, binding)\n },\n}\nexport default vEllipsis\n","/**\n * @description: v-emoji指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/07 11:12:16\n * @description: 禁止输入emoji\n */\nimport type { Directive } from 'vue'\n\nconst vEmoji: Directive = {\n mounted(el, _binding, _vnode) {\n const handleInput = (event: Event) => {\n const inputElement = event.target as HTMLInputElement\n const value = inputElement.value\n const newValue = value.replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|\\uD83C[\\uDC00-\\uDFFF]|\\uD83D[\\uDC00-\\uDE4F\\uDE80-\\uDEFF]|[\\u2600-\\u27FF]/g, '')\n if (newValue !== value) {\n inputElement.value = newValue\n inputElement.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n\n el.addEventListener('input', handleInput)\n\n el.$destroy = () => {\n el.removeEventListener('input', handleInput)\n delete el.$destroy\n }\n },\n unmounted(el) {\n if (el.$destroy)\n el.$destroy()\n },\n}\n\nexport default vEmoji\n","/**\n * @description: v-empty指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/07 11:12:16\n * @description: 设置空状态\n */\nimport type { Directive, DirectiveBinding } from 'vue'\nimport { isRef, watch } from 'vue'\n\nlet originalContent = ''\nlet emptyState = ''\nfunction insertEmptyState(el: HTMLElement, content: string, img: string) {\n const image = img ? `<img src=\"${img}\" style=\"width: 90%; border-radius: 5px;\" />` : ''\n emptyState = `\n <div style=\"position: absolute; top: 0; left: 0; z-index: 9999; background: #fff; display: flex; justify-content: center; align-items: center; height: ${el.offsetHeight}px; width: ${el.offsetWidth}px; border-radius: 5px;\">\n <div style=\"display: flex; justify-content: center; align-items: center; flex-direction: column;\">\n ${image}\n <div style=\"color: #000\">${content}</div>\n </div>\n </div>\n `\n el.innerHTML = emptyState\n}\n\nconst vEmpty: Directive = {\n beforeMount(el: HTMLElement, _binding: DirectiveBinding) {\n originalContent = el.innerHTML\n },\n mounted(el: HTMLElement, binding: DirectiveBinding) {\n el.style.position = el.style.position || 'relative'\n\n const { content = '暂无数据', img, visible } = binding.value\n\n const insertContent = () => {\n el.innerHTML = originalContent\n }\n\n const handleVisibilityChange = () => {\n const isVisible = isRef(visible) ? visible.value : visible\n if (isVisible)\n insertEmptyState(el, content, img)\n else\n insertContent()\n }\n\n if (isRef(visible))\n watch(visible, handleVisibilityChange)\n\n handleVisibilityChange()\n },\n updated(el: HTMLElement, binding: DirectiveBinding) {\n const { visible } = binding.value\n const isVisible = isRef(visible) ? visible.value : visible\n if (!isVisible)\n el.innerHTML = originalContent.trim()\n else\n el.innerHTML = emptyState\n },\n}\n\nexport default vEmpty\n","/**\n * @description: v-flicker指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/07 11:12:16\n * @description: 元素闪烁\n */\nimport type { Directive } from 'vue'\n\nlet style: HTMLStyleElement | null = null\n\nconst animationStr = `\n@keyframes v-flicker {\n 0% {\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n`\n\nconst vFlicker: Directive = {\n mounted(el: HTMLElement) {\n if (style === null) {\n style = document.createElement('style')\n style.innerHTML = animationStr\n document.head.appendChild(style)\n }\n\n el.style.animation = 'v-flicker 1s infinite'\n },\n}\n\nexport default vFlicker\n","/**\n * @description: v-focus指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/07 11:12:16\n * @description: 自动聚焦\n */\nimport type { Directive } from 'vue'\n\nconst vFocus: Directive = {\n mounted(el: HTMLElement) {\n el.focus && el.focus()\n },\n updated(el: HTMLElement) {\n el.focus && el.focus()\n },\n}\nexport default vFocus\n","/**\n * @description: v-highlight指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/07 11:12:16\n * @description: 元素闪烁\n */\nimport type { Directive } from 'vue'\n\nconst vHighlight: Directive = {\n mounted(el: HTMLElement, binding) {\n const { arg } = binding\n el.style.backgroundColor = arg || 'rgba(255, 255, 0, .8)'\n },\n}\n\nexport default vHighlight\n","/**\n * @description: v-hover指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/07 11:12:16\n * @description: 鼠标经过触发事件\n */\nimport type { Directive, DirectiveBinding } from 'vue'\nimport { isFunction } from '../../utils/index'\n\nconst elMapToHandlers: WeakMap<Element, () => void> = new WeakMap()\n\nfunction addEventListener(el: Element, binding: DirectiveBinding): void {\n const { value } = binding\n if (isFunction(value)) {\n el.addEventListener('mouseenter', value)\n elMapToHandlers.set(el, value)\n }\n}\n\nconst vHover: Directive = {\n beforeUnmount(el: HTMLElement) {\n elMapToHandlers.delete(el)\n },\n mounted(el: HTMLElement, binding) {\n addEventListener(el, binding)\n },\n updated(el: HTMLElement, binding) {\n if (elMapToHandlers.has(el)) {\n const handler = elMapToHandlers.get(el)\n handler && el.removeEventListener('mouseenter', handler)\n elMapToHandlers.delete(el)\n }\n addEventListener(el, binding)\n },\n}\nexport default vHover\n","/**\n * @description: v-input指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/07 11:12:16\n * @description: 限制输入类型\n */\nimport type { Directive } from 'vue'\n\n// 派发自定义事件\nfunction trigger(el: any, type: string) {\n const e = document.createEvent('HTMLEvents')\n e.initEvent(type, true, true)\n el.dispatchEvent(e)\n}\n\nconst vInput: Directive = {\n mounted(el, binding) {\n const _type = binding.arg\n const restrict = binding.value || 10\n const types = ['number', 'decimal', 'customize']\n if (!_type || !types.includes(_type))\n // eslint-disable-next-line no-console\n return console.log(`使用v-input指令需要选择特定功能:v-input:type=\"restrictValue\"; type = ${types.join('/')}.`)\n el.$handler = (el: any) => {\n switch (_type) {\n // 数字\n case 'number':\n el.value = el.value.replace(/[^\\d]/, '')\n break\n // 数字+小数\n case 'decimal':\n el.value = el.value.replace(/[^\\d.]/g, '') // 清除数字和'.'以外的字符\n el.value = el.value.replace(/\\.{2,}/g, '.') // 连续两个'.', 只保留第一个'.'\n el.value = el.value.replace('.', '$#$').replace(/\\./g, '').replace('$#$', '.') // 隔着字符, 也保证只有一个'.'\n // eslint-disable-next-line no-case-declarations\n const regexPattern = new RegExp(`^(-)*(\\\\d+)\\\\.(\\\\d{0,${restrict}}).*$`)\n el.value = el.value.replace(regexPattern, '$1$2.$3') // 只能输入两位小数\n !el.value.includes('.') && el.value !== '' && (el.value = Number.parseFloat(el.value)) // 保证不会出现重复的: 00, 01, 02 ...\n el.value.includes('.') && el.value.length === 1 && (el.value = '') // 第一位不能以'.'开头\n break\n // 自定义, 由data-rule提供规则\n case 'customize':\n // eslint-disable-next-line no-case-declarations\n const rule = restrict && new RegExp(restrict) // 字符串正则转正则表达式\n el.value = el.value.replace(rule, '')\n break\n }\n trigger(el, 'input')\n }\n el.$handler(el)\n },\n updated(el) {\n el.$handler && el.$handler(el)\n },\n}\n\nexport default vInput\n","import type { Directive, DirectiveBinding } from 'vue'\n\nlet options: {\n root: HTMLElement | null\n threshold: number\n} | null\n\nconst callback: IntersectionObserverCallback = (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n const img = entry.target as HTMLImageElement\n if (img.src !== img.dataset.src)\n img.src = img.dataset.src || ''\n }\n })\n}\n\nlet observer: IntersectionObserver | null = null\n\nconst observerHandler: (el: Element, binding: DirectiveBinding) => void = (\n el,\n binding,\n) => {\n if (el.tagName !== 'IMG')\n return\n const { value } = binding\n el.setAttribute('data-src', String(value))\n observer?.observe(el)\n}\n\nconst vImgLazyLoad: Directive = {\n beforeUnmount(el: HTMLElement) {\n if (observer)\n observer.unobserve(el)\n },\n mounted(el: HTMLElement, binding) {\n if (options === null) {\n options = {\n root: document.querySelector('html'),\n threshold: 0.1,\n }\n }\n\n if (observer === null)\n observer = new IntersectionObserver(callback, options)\n\n observerHandler(el, binding)\n },\n updated(el: HTMLElement, binding) {\n observerHandler(el, binding)\n },\n}\nexport default vImgLazyLoad\n","import type { Directive } from 'vue'\nimport { isBoolean, loadingSvg } from '../../utils'\n\nconst elMapToMaskElement: WeakMap<Element, HTMLDivElement> = new WeakMap()\n\nconst elMapToHasChangedPosition: WeakMap<Element, boolean> = new WeakMap()\n\nfunction appendChild(el: HTMLElement): void {\n const loadingWrapper = document.createElement('div')\n const maskElement = document.createElement('div')\n maskElement.style.position = 'absolute'\n maskElement.style.top = '0'\n maskElement.style.left = '0'\n maskElement.style.right = '0'\n maskElement.style.bottom = '0'\n maskElement.style.zIndex = '9999'\n maskElement.style.backgroundColor = 'rgba(0, 0, 0, 0.5)'\n maskElement.style.pointerEvents = 'none'\n\n loadingWrapper.style.position = 'absolute'\n loadingWrapper.style.top = '50%'\n loadingWrapper.style.left = '50%'\n loadingWrapper.style.transform = 'translate(-50%, -50%)'\n loadingWrapper.style.pointerEvents = 'none'\n loadingWrapper.innerHTML = loadingSvg\n if (el.style.position === 'static' || el.style.position === '') {\n elMapToHasChangedPosition.set(el, true)\n el.style.position = 'relative'\n }\n maskElement.appendChild(loadingWrapper)\n elMapToMaskElement.set(el, maskElement)\n el.appendChild(maskElement)\n}\n\nconst vLoading: Directive = {\n beforeUnmount(el: HTMLElement) {\n elMapToMaskElement.delete(el)\n elMapToHasChangedPosition.delete(el)\n },\n mounted(el: HTMLElement, binding) {\n const { value } = binding\n if (!isBoolean(value))\n return\n if (!value)\n return\n appendChild(el)\n },\n updated(el: HTMLElement, binding) {\n const { value } = binding\n const hasMaskElement = elMapToMaskElement.has(el)\n const hasChangedPosition = elMapToHasChangedPosition.has(el)\n if (value && hasMaskElement)\n return\n if (value && !hasMaskElement)\n appendChild(el)\n\n if ((!value || !isBoolean(value)) && !hasMaskElement)\n return\n if ((!value || !isBoolean(value)) && hasMaskElement) {\n if (hasChangedPosition) {\n el.style.position = 'static'\n elMapToHasChangedPosition.delete(el)\n }\n const maskElement = elMapToMaskElement.get(el)\n maskElement && el.removeChild(maskElement)\n elMapToMaskElement.delete(el)\n }\n },\n}\nexport default vLoading\n","/**\n * @description: v-longpress指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/21 18:12:16\n * @description: 长按触发事件\n */\nimport type { Directive, DirectiveBinding } from 'vue'\nimport { isFunction } from '../../utils'\n\nconst elMapToMouseDownHandlers: WeakMap<Element, () => void> = new WeakMap()\n\nconst elMapToMouseUpHandlers: WeakMap<Element, () => void> = new WeakMap()\n\nfunction addEventListener(el: Element, binding: DirectiveBinding) {\n const { arg, value } = binding\n if (!isFunction(value))\n return\n let timer: number | undefined\n const pressHandler = () => {\n timer = window.setTimeout(value, arg ? Number(arg) : 300)\n }\n const clearTimeoutHandler = () => {\n clearTimeout(timer)\n }\n el.addEventListener('mousedown', pressHandler)\n el.addEventListener('mouseup', clearTimeoutHandler)\n elMapToMouseDownHandlers.set(el, pressHandler)\n elMapToMouseUpHandlers.set(el, clearTimeoutHandler)\n}\n\nconst vLongPress: Directive = {\n beforeUnmount(el: HTMLElement) {\n elMapToMouseDownHandlers.delete(el)\n elMapToMouseUpHandlers.delete(el)\n },\n mounted(el: HTMLElement, binding) {\n addEventListener(el, binding)\n },\n updated(el: HTMLElement, binding) {\n if (elMapToMouseDownHandlers.has(el)) {\n const pressHandler = elMapToMouseDownHandlers.get(el)\n pressHandler && el.removeEventListener('mousedown', pressHandler)\n elMapToMouseDownHandlers.delete(el)\n }\n if (elMapToMouseUpHandlers.has(el)) {\n const pressHandler = elMapToMouseDownHandlers.get(el)\n pressHandler && el.removeEventListener('mouseup', pressHandler)\n elMapToMouseUpHandlers.delete(el)\n }\n addEventListener(el, binding)\n },\n}\nexport default vLongPress\n","/**\n * @description: v-money指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/21 18:12:16\n * @description: 格式化数字为金额\n */\nimport type { Directive, DirectiveBinding } from 'vue'\n\nfunction setInnerHTML(el: HTMLElement, binding: DirectiveBinding) {\n const { value } = binding\n\n const parts = String(value).split('.')\n\n const moneyReverse = Array.from(parts[0]).reverse()\n\n const moneyArray = []\n\n for (let i = 0; i < moneyReverse.length; i++) {\n if (i % 3 === 0 && i !== 0)\n moneyArray.push(',')\n\n moneyArray.push(moneyReverse[i])\n }\n\n const moneyString = moneyArray.reverse().join('')\n\n if (parts.length > 1)\n el.innerHTML = `${moneyString}.${parts[1]}`\n else\n el.innerHTML = moneyString\n}\n\nconst vMoney: Directive = {\n mounted(el: HTMLElement, binding) {\n setInnerHTML(el, binding)\n },\n updated(el: HTMLElement, binding) {\n setInnerHTML(el, binding)\n },\n}\nexport default vMoney\n","/**\n * @description: v-onOnce指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/21 18:12:16\n * @description: 只触发一次回调\n */\nimport type { Directive, DirectiveBinding } from 'vue'\nimport { isFunction } from '../../utils/index'\n\nconst elMapToHandlers: WeakMap<Element, () => void> = new WeakMap()\n\nconst elMapToEventName: WeakMap<Element, string> = new WeakMap()\n\nfunction addEventListener(el: HTMLElement, binding: DirectiveBinding) {\n const { arg, value } = binding\n if (!isFunction(value))\n return\n\n const eventName = arg || 'click'\n const handler = (): void => {\n value()\n el.removeEventListener(eventName, handler)\n }\n\n elMapToHandlers.set(el, handler)\n elMapToEventName.set(el, eventName)\n el.addEventListener(eventName, handler)\n}\n\nconst vOnOnce: Directive = {\n beforeUnmount(el: HTMLElement) {\n elMapToHandlers.delete(el)\n elMapToEventName.delete(el)\n },\n mounted(el: HTMLElement, binding) {\n addEventListener(el, binding)\n },\n updated(el: HTMLElement, binding) {\n if (elMapToHandlers.has(el)) {\n const eventName = elMapToEventName.get(el)\n const handler = elMapToHandlers.get(el)\n handler\n && eventName\n && el.removeEventListener(eventName as keyof HTMLElementEventMap, handler)\n elMapToHandlers.delete(el)\n elMapToEventName.delete(el)\n }\n\n addEventListener(el, binding)\n },\n}\nexport default vOnOnce\n","/**\n * @description: v-permission指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/07 11:12:16\n * @description: 快速实现鉴权\n */\nimport type { Directive } from 'vue'\n\nconst vPermission: Directive = {\n mounted(el, binding) {\n // 从服务获取用户的权限列表,一般获取后存放于vuex中,本案例为了方便演示将直接以字符串的形式展示\n // 权限之间以分号分隔\n // 管理员权限:\"add;del;update;query\"\n // 普通用户权限:\"add;del;update;query\"\n let permission = 'add;del' // 权限字符串\n let permissionList = []// 权限列表\n if (!permission)\n permission = ''\n permissionList = permission.split(';')\n\n // 获取需要的权限标识,即元素给指令传进来的参数值\n let inValue\n if (typeof binding.value === 'string') {\n inValue = binding.value\n }\n else if (Array.isArray(binding.value)) {\n inValue = binding.value.join(';')\n }\n else {\n // eslint-disable-next-line no-console\n console.log('数据格式不正确,请输入字符串(以分号分隔)或数组')\n }\n\n let passText = inValue // 可以是多个值,中间以分号分隔\n let passTextArr = []// 将权限解析到数组中\n if (!passText)\n passText = ''\n passTextArr = passText.split(';')\n\n // 定义一个权限标识变量,用于标识是否有权限\n let flag = false\n // 循环遍历权限列表,检测用户是否有相应的操作权限\n for (let i = 0; i < passTextArr.length; i++) {\n if (permissionList.includes(passTextArr[i])) {\n // 如果从服务器中获取的权限列表中有组件所需的权限,则将flag置为true,同时跳出循环\n flag = true\n break\n }\n }\n // 如果flag为false,也就是没权限则直接将元素移除或者隐藏\n if (!flag)\n el.parentNode && el.parentNode.removeChild(el)\n },\n}\n\nexport default vPermission\n","/**\n * @description: v-resize指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/07 11:12:16\n * @description: 响应缩放\n */\n\nimport type { Directive } from 'vue'\n\nfunction createYElement(type: 'top' | 'bottom'): HTMLDivElement {\n const Element = document.createElement('div')\n Element.style.position = 'absolute'\n if (type === 'top')\n Element.style.top = '0'\n else\n Element.style.bottom = '0'\n\n Element.style.left = '0'\n Element.style.right = '0'\n Element.style.height = '5px'\n Element.style.backgroundColor = '#1890ff'\n Element.style.zIndex = '1'\n Element.style.cursor = 'ns-resize'\n Element.style.display = 'none'\n\n return Element\n}\n\nfunction createXElement(type: 'left' | 'right'): HTMLDivElement {\n const Element = document.createElement('div')\n Element.style.position = 'absolute'\n Element.style.top = '5px'\n if (type === 'left')\n Element.style.left = '0'\n else\n Element.style.right = '0'\n\n Element.style.bottom = '5px'\n Element.style.width = '5px'\n Element.style.backgroundColor = '#1890ff'\n Element.style.zIndex = '1'\n Element.style.cursor = 'ew-resize'\n Element.style.display = 'none'\n Element.style.transition = 'all 0.3s'\n\n return Element\n}\n\nconst vResize: Directive = {\n mounted(el: HTMLElement) {\n const position = el.style.position\n if (position === 'static' || position === '')\n el.style.position = 'relative'\n\n const topElement = createYElement('top')\n const bottomElement = createYElement('bottom')\n const leftElement = createXElement('left')\n const rightElement = createXElement('right')\n\n const Y = [topElement, bottomElement]\n const X = [leftElement, rightElement]\n\n const all = [...Y, ...X]\n\n Y.forEach((element) => {\n element.addEventListener('mousedown', (e: MouseEvent) => {\n e.stopPropagation()\n const startY = e.clientY\n\n const style = window.getComputedStyle(el)\n const height = style.height\n\n const windowMouseMoveHandler = (e: MouseEvent) => {\n const offsetY = e.clientY - startY\n el.style.height = `${Number.parseInt(height, 10) + offsetY}px`\n }\n\n const windowMouseUpHandler = () => {\n window.removeEventListener('mousemove', windowMouseMoveHandler)\n window.removeEventListener('mouseup', windowMouseUpHandler)\n }\n\n window.addEventListener('mousemove', windowMouseMoveHandler)\n\n window.addEventListener('mouseup', windowMouseUpHandler)\n })\n })\n\n X.forEach((element) => {\n element.addEventListener('mousedown', (e: MouseEvent) => {\n e.stopPropagation()\n\n const startX = e.clientX\n\n const style = window.getComputedStyle(el)\n const width = style.width\n\n const windowMouseMoveHandler = (e: MouseEvent) => {\n const offsetX = e.clientX - startX\n el.style.width = `${Number.parseInt(width, 10) + offsetX}px`\n }\n\n const windowMouseUpHandler = () => {\n window.removeEventListener('mousemove', windowMouseMoveHandler)\n window.removeEventListener('mouseup', windowMouseUpHandler)\n }\n\n window.addEventListener('mousemove', windowMouseMoveHandler)\n\n window.addEventListener('mouseup', windowMouseUpHandler)\n })\n })\n\n el.addEventListener('click', () => {\n all.forEach((element) => {\n element.style.display = 'block'\n })\n })\n\n const handler = (e: MouseEvent) => {\n if (el.contains(e.target as Node))\n return\n\n all.forEach((element) => {\n element.style.display = 'none'\n })\n }\n window.addEventListener('click', handler)\n\n el.appendChild(topElement)\n el.appendChild(bottomElement)\n el.appendChild(leftElement)\n el.appendChild(rightElement)\n },\n}\nexport default vResize\n","/**\n * @description: v-ripple指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/07 11:12:16\n * @description: 给元素添加波纹动效\n */\n\n/* eslint-disable ts/ban-ts-comment */\n// @ts-nocheck\nimport type { Directive } from 'vue'\n\nconst Ripple: Directive = {\n mounted(el, binding) {\n // Default values.\n const props = {\n event: 'mousedown',\n transition: 600,\n }\n\n setProps(Object.keys(binding.modifiers), props)\n\n el.addEventListener(props.event, (event) => {\n rippler(event, el, binding.value)\n })\n\n const bg = binding.value || Ripple.color || 'rgba(0, 0, 0, 0.35)'\n const zIndex = Ripple.zIndex || '9999'\n\n function rippler(event, el) {\n const target = el\n // Get border to avoid offsetting on ripple container position\n const targetBorder = Number.parseInt((getComputedStyle(target).borderWidth).replace('px', ''))\n\n // Get necessary variables\n const rect = target.getBoundingClientRect()\n const left = rect.left\n const top = rect.top\n const width = target.offsetWidth\n const height = target.offsetHeight\n const dx = event.clientX - left\n const dy = event.clientY - top\n const maxX = Math.max(dx, width - dx)\n const maxY = Math.max(dy, height - dy)\n const style = window.getComputedStyle(target)\n const radius = Math.sqrt((maxX * maxX) + (maxY * maxY))\n const border = (targetBorder > 0) ? targetBorder : 0\n\n // Create the ripple and its container\n const ripple = document.createElement('div')\n const rippleContainer = document.createElement('div')\n rippleContainer.className = 'ripple-container'\n ripple.className = 'ripple'\n\n // Styles for ripple\n ripple.style.marginTop = '0px'\n ripple.style.marginLeft = '0px'\n ripple.style.width = '1px'\n ripple.style.height = '1px'\n ripple.style.transition = `all ${props.transition}ms cubic-bezier(0.4, 0, 0.2, 1)`\n ripple.style.borderRadius = '50%'\n ripple.style.pointerEvents = 'none'\n ripple.style.position = 'relative'\n ripple.style.zIndex = zIndex\n ripple.style.backgroundColor = bg\n\n // Styles for rippleContainer\n rippleContainer.style.position = 'absolute'\n rippleContainer.style.left = `${0 - border}px`\n rippleContainer.style.top = `${0 - border}px`\n rippleContainer.style.height = '0'\n rippleContainer.style.width = '0'\n rippleContainer.style.pointerEvents = 'none'\n rippleContainer.style.overflow = 'hidden'\n\n // Store target position to change it after\n const storedTargetPosition = ((target.style.position).length > 0) ? target.style.position : getComputedStyle(target).position\n // Change target position to relative to guarantee ripples correct positioning\n if (storedTargetPosition !== 'relative')\n target.style.position = 'relative'\n\n rippleContainer.appendChild(ripple)\n target.appendChild(rippleContainer)\n\n ripple.style.marginLeft = `${dx}px`\n ripple.style.marginTop = `${dy}px`\n\n // No need to set positioning because ripple should be child of target and to it's relative position.\n // rippleContainer.style.left = left + (((window.pageXOffset || document.scrollLeft) - (document.clientLeft || 0)) || 0) + \"px\";\n // rippleContainer.style.top = top + (((window.pageYOffset || document.scrollTop) - (document.clientTop || 0)) || 0) + \"px\";\n rippleContainer.style.width = `${width}px`\n rippleContainer.style.height = `${height}px`\n rippleContainer.style.borderTopLeftRadius = style.borderTopLeftRadius\n rippleContainer.style.borderTopRightRadius = style.borderTopRightRadius\n rippleContainer.style.borderBottomLeftRadius = style.borderBottomLeftRadius\n rippleContainer.style.borderBottomRightRadius = style.borderBottomRightRadius\n\n rippleContainer.style.direction = 'ltr'\n\n setTimeout(() => {\n ripple.style.width = `${radius * 2}px`\n ripple.style.height = `${radius * 2}px`\n ripple.style.marginLeft = `${dx - radius}px`\n ripple.style.marginTop = `${dy - radius}px`\n }, 0)\n\n function clearRipple() {\n setTimeout(() => {\n ripple.style.backgroundColor = 'rgba(0, 0, 0, 0)'\n }, 250)\n\n // Timeout set to get a smooth removal of the ripple\n setTimeout(() => {\n rippleContainer.parentNode.removeChild(rippleContainer)\n }, 850)\n\n el.removeEventListener('mouseup', clearRipple, false)\n\n // After removing event set position to target to it's original one\n // Timeout it's needed to avoid jerky effect of ripple jumping out parent target\n setTimeout(() => {\n let clearPosition = true\n for (let i = 0; i < target.childNodes.length; i++) {\n if (target.childNodes[i].className === 'ripple-container')\n clearPosition = false\n }\n\n if (clearPosition) {\n if (storedTargetPosition !== 'static')\n target.style.position = storedTargetPosition\n else\n target.style.position = ''\n }\n }, props.transition + 250)\n }\n\n if (event.type === 'mousedown')\n el.addEventListener('mouseup', clearRipple, false)\n else\n clearRipple()\n }\n },\n}\n\nfunction setProps(modifiers, props) {\n modifiers.forEach((item) => {\n if (Number.isNaN(Number(item)))\n props.event = item\n else\n props.transition = item\n })\n}\n\nexport default Ripple\n","import type { Directive } from 'vue'\n\nconst DISTANCE = 100 // 距离\nconst ANIMATIONTIME = 500 // 500毫秒\nlet distance: number | null = null\nlet animationtime: number | null = null\nconst map = new WeakMap()\n\nfunction isBelowViewport(el: HTMLElement) {\n const rect = el.getBoundingClientRect()\n return rect.top - (distance || DISTANCE) > window.innerHeight\n}\n\nfunction handleScroll() {\n const elements = document.querySelectorAll('[v-slideIn]')\n elements.forEach((el: any) => {\n if (isBelowViewport(el))\n return\n\n const animation = map.get(el)\n if (animation && !el.hasAttribute('v-slideIn-played')) {\n animation.play()\n el.removeAttribute('v-slideIn')\n el.setAttribute('v-slideIn-played', '') // Add a flag to mark the animation as played\n }\n })\n}\n\nconst vSlideIn: Directive = {\n mounted(el: HTMLElement, binding: any) {\n if (binding.value) {\n distance = binding.value.px // 接收指定距离\n animationtime = binding.value.time // 接收指定时间\n }\n if (!isBelowViewport(el))\n return\n\n const animation = el.animate(\n [\n {\n opacity: 0,\n transform: `translateY(${distance || DISTANCE}px)`,\n },\n {\n opacity: 1,\n transform: `translateY(0px)`,\n },\n ],\n {\n duration: animationtime || ANIMATIONTIME,\n easing: 'ease-in-out',\n fill: 'forwards',\n },\n )\n animation.pause()\n map.set(el, animation)\n el.setAttribute('v-slideIn', '') // 添加标记,表示需要进行动画\n\n window.addEventListener('scroll', handleScroll)\n },\n\n unmounted(el: HTMLElement) {\n map.delete(el)\n window.removeEventListener('scroll', handleScroll)\n },\n}\n\nexport default vSlideIn\n","import type { Directive, DirectiveBinding } from 'vue'\nimport { isFunction } from '../../utils'\n\nconst elMapToHandlers: WeakMap<Element, () => void> = new WeakMap()\n\nconst elMapToEventName: WeakMap<Element, string> = new WeakMap()\n\nfunction addEventListener(el: Element, binding: DirectiveBinding): void {\n const { arg, value } = binding\n if (!isFunction(value))\n return\n\n const delay = arg ? Number(arg.split('-')[1]) : 300\n const eventName = arg ? arg.split('-')[0] : 'click'\n\n let lastExecTime = 0\n\n const handler = (): void => {\n const currentTime = Date.now()\n if (currentTime - lastExecTime < delay)\n return\n lastExecTime = currentTime\n value()\n }\n\n const existingHandler = elMapToHandlers.get(el)\n if (existingHandler)\n el.removeEventListener(eventName, existingHandler)\n\n elMapToHandlers.set(el, handler)\n elMapToEventName.set(el, eventName)\n el.addEventListener(eventName, handler)\n}\n\nconst vThrottle: Directive = {\n beforeUnmount(el: HTMLElement) {\n if (elMapToHandlers.has(el)) {\n const eventName = elMapToEventName.get(el)\n const handler = elMapToHandlers.get(el)\n handler\n && eventName\n && el.removeEventListener(eventName as keyof HTMLElementEventMap, handler)\n elMapToHandlers.delete(el)\n elMapToEventName.delete(el)\n }\n },\n mounted(el: HTMLElement, binding) {\n addEventListener(el, binding)\n },\n updated(el: HTMLElement, binding) {\n if (elMapToHandlers.has(el)) {\n const eventName = elMapToEventName.get(el)\n const handler = elMapToHandlers.get(el)\n handler\n && eventName\n && el.removeEventListener(eventName as keyof HTMLElementEventMap, handler)\n elMapToHandlers.delete(el)\n elMapToEventName.delete(el)\n }\n\n addEventListener(el, binding)\n },\n}\n\nexport default vThrottle\n","/**\n * @description: v-waterMarker指令\n * @LastEditors: eonova\n * @LastEditTime: 2024/02/07 11:12:16\n * @description: 添加水印\n */\nimport type { Directive, DirectiveBinding } from 'vue'\n\nconst addWaterMarker: Directive = (str: string, parentNode: any, font: any, textColor: string) => {\n // 水印文字,父元素,字体,文字颜色\n const can: HTMLCanvasElement = document.createElement('canvas')\n parentNode.appendChild(can)\n can.width = 200\n can.height = 150\n can.style.display = 'none'\n const cans = can.getContext('2d') as CanvasRenderingContext2D\n cans.rotate((-20 * Math.PI) / 180)\n cans.font = font || '16px Microsoft JhengHei'\n cans.fillStyle = textColor || 'rgba(180, 180, 180, 0.3)'\n cans.textAlign = 'left'\n cans.textBaseline = 'Middle' as CanvasTextBaseline\n cans.fillText(str, can.width / 10, can.height / 2)\n parentNode.style.backgroundImage = `url(${can.toDataURL('image/png')})`\n}\n\nconst waterMarker = {\n mounted(el: DirectiveBinding, binding: DirectiveBinding) {\n addWaterMarker(binding.value.text, el, binding.value.font, binding.value.textColor)\n },\n}\n\nexport default waterMarker\n","import type { App, Directive } from 'vue'\nimport backtop from './directive/v-backtop'\nimport clickOutside from './directive/v-clickOutside'\nimport copy from './directive/v-copy'\nimport debounce from './directive/v-debounce'\nimport doubleClick from './directive/v-doubleClick'\nimport draggable from './directive/v-draggable'\nimport ellipsis from './directive/v-ellipsis'\nimport emoji from './directive/v-emoji'\nimport empty from './directive/v-empty'\nimport flicker from './directive/v-flicker'\nimport focus from './directive/v-focus'\nimport highlight from './directive/v-highlight'\nimport hover from './directive/v-hover'\nimport input from './directive/v-input'\nimport lazyImg from './directive/v-lazyImg'\nimport loading from './directive/v-loading'\nimport longpress from './directive/v-longpress'\nimport money from './directive/v-money'\nimport onOnce from './directive/v-onOnce'\nimport permission from './directive/v-permission'\nimport resize from './directive/v-resize'\nimport ripple from './directive/v-ripple'\nimport slideIn from './directive/v-slideIn'\nimport throttle from './directive/v-throttle'\nimport waterMarker from './directive/v-waterMarker'\n\nexport {\n backtop as vBacktop,\n clickOutside as vClickOutside,\n copy as vCopy,\n debounce as vDebounce,\n doubleClick as vDoubleClick,\n draggable as vDraggable,\n ellipsis as vEllipsis,\n emoji as vEmoji,\n empty as vEmpty,\n flicker as vFlicker,\n focus as vFocus,\n highlight as vHighlight,\n hover as vHover,\n input as vInput,\n lazyImg as vLazyImg,\n loading as vLoading,\n longpress as vLongpress,\n money as vMoney,\n onOnce as vOnOnce,\n permission as vPermission,\n resize as vResize,\n ripple as vRipple,\n slideIn as vSlideIn,\n throttle as vThrottle,\n waterMarker as vWaterMarker,\n}\n\ninterface DirectiveCollection {\n [key: string]: Directive\n}\n\nconst directives: DirectiveCollection = {\n backtop,\n clickOutside,\n copy,\n debounce,\n doubleClick,\n draggable,\n ellipsis,\n emoji,\n empty,\n flicker,\n focus,\n highlight,\n hover,\n input,\n lazyImg,\n loading,\n longpress,\n money,\n onOnce,\n permission,\n resize,\n ripple,\n slideIn,\n throttle,\n waterMarker,\n}\n\nexport default {\n install(app: App) {\n Object.keys(directives).forEach((key) => {\n app.directive(key, directives[key])\n })\n },\n}\n"]}