{"version":3,"file":"helpers.mjs","sources":["../../../../src/utils/helpers.ts"],"sourcesContent":["import { CSSProperties, computed, ref } from 'vue';\r\nimport { isDef, isNumeric } from './validate';\r\n\r\n// 文件上传类型\r\nexport type UploaderResultType = 'dataUrl' | 'text' | 'file' | 'url';\r\n\r\nexport type Interceptor = (...args: any[]) => Promise<boolean> | boolean;\r\n\r\nexport type UploaderMaxSize = number | string | ((file: File) => boolean);\r\n\r\nexport type UploaderFileListItem = {\r\n  url?: string;\r\n  file?: File;\r\n  content?: string;\r\n  status?: '' | 'uploading' | 'done' | 'failed';\r\n  message?: string;\r\n  beforeDelete?: Interceptor;\r\n};\r\n\r\n// 读取文件内容\r\nexport function readFileContent(file: File, resultType: UploaderResultType) {\r\n  return new Promise<string | void>((resolve) => {\r\n    // 文件类型\r\n    if (resultType === 'file') {\r\n      resolve();\r\n\r\n      return;\r\n    }\r\n\r\n    // url\r\n    if (resultType === 'url') {\r\n      const url = URL.createObjectURL(file);\r\n\r\n      resolve(url);\r\n\r\n      return;\r\n    }\r\n\r\n    const reader = new FileReader();\r\n\r\n    reader.onload = (event) => {\r\n      resolve((event.target as FileReader).result as string);\r\n    };\r\n\r\n    // base64\r\n    if (resultType === 'dataUrl') {\r\n      reader.readAsDataURL(file);\r\n    }\r\n    // 文本类型\r\n    else if (resultType === 'text') {\r\n      reader.readAsText(file);\r\n    }\r\n  });\r\n}\r\n\r\n// 文件是否超出大小\r\nexport function isOversize(\r\n  items: UploaderFileListItem | UploaderFileListItem[],\r\n  maxSize: UploaderMaxSize\r\n): boolean {\r\n  return toArray(items).some((item) => {\r\n    if (item.file) {\r\n      if (isFunction(maxSize)) {\r\n        return maxSize(item.file);\r\n      }\r\n\r\n      return item.file.size > maxSize;\r\n    }\r\n    return false;\r\n  });\r\n}\r\n\r\n// 设置为数组\r\nexport function toArray<T>(item: T | T[]): T[] {\r\n  if (Array.isArray(item)) {\r\n    return item;\r\n  }\r\n\r\n  return [item];\r\n}\r\n\r\n// 是否是方法\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport function isFunction(val: unknown): val is Function {\r\n  return typeof val === 'function';\r\n}\r\n\r\n// 过滤文件\r\nexport function filterFiles(\r\n  items: UploaderFileListItem[],\r\n  maxSize: UploaderMaxSize\r\n) {\r\n  const valid: UploaderFileListItem[] = [];\r\n  const invalid: UploaderFileListItem[] = [];\r\n\r\n  items.forEach((item) => {\r\n    if (isOversize(item, maxSize)) {\r\n      invalid.push(item);\r\n    } else {\r\n      valid.push(item);\r\n    }\r\n  });\r\n\r\n  return { valid, invalid };\r\n}\r\n\r\n// 设置随机字符串\r\nexport const getRandomStr = (len = 32) => {\r\n  const $chars =\r\n    'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';\r\n  const length = $chars.length;\r\n\r\n  let str = '';\r\n\r\n  for (let i = 0; i < len; i++) {\r\n    str += $chars.charAt(Math.floor(Math.random() * length));\r\n  }\r\n\r\n  return str;\r\n};\r\n\r\nconst IMAGE_REGEXP = /\\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i;\r\n\r\nexport function isImageUrl(url: string): boolean {\r\n  return IMAGE_REGEXP.test(url);\r\n}\r\n\r\n// 是图片\r\nexport function isImageFile(item): boolean {\r\n  // some special urls cannot be recognized\r\n  // user can add `isImage` flag to mark it as an image url\r\n\r\n  if (item.isImage) {\r\n    return true;\r\n  }\r\n\r\n  // 文件类型\r\n  if (item.file && item.file.type) {\r\n    return item.file.type.indexOf('image') === 0;\r\n  }\r\n\r\n  // 有链接\r\n  if (item.url) {\r\n    return isImageUrl(item.url);\r\n  }\r\n\r\n  // base64\r\n  if (typeof item.content === 'string') {\r\n    return item.content.indexOf('data:image') === 0;\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\nexport function addUnit(value?: string | number): string | undefined {\r\n  if (!isDef(value)) {\r\n    return undefined;\r\n  }\r\n\r\n  return isNumeric(value) ? `${value}px` : String(value);\r\n}\r\n\r\n// 获取大小样式\r\nexport function getSizeStyle(\r\n  originSize?: string | number\r\n): CSSProperties | undefined {\r\n  if (isDef(originSize)) {\r\n    const size = addUnit(originSize);\r\n    return {\r\n      width: size,\r\n      height: size,\r\n    };\r\n  }\r\n}\r\n\r\n// 事件代码\r\nexport const EVENT_CODE = {\r\n  tab: 'Tab',\r\n  enter: 'Enter',\r\n  space: 'Space',\r\n  left: 'ArrowLeft', // 37\r\n  up: 'ArrowUp', // 38\r\n  right: 'ArrowRight', // 39\r\n  down: 'ArrowDown', // 40\r\n  esc: 'Escape',\r\n  delete: 'Delete',\r\n  backspace: 'Backspace',\r\n};\r\n\r\n// 创建数组范围\r\nexport function createRange(length) {\r\n  return Array.from({ length }, (v, k) => k);\r\n}\r\n\r\n// 是否是颜色\r\nexport function isCssColor(color) {\r\n  return !!color && !!color.match(/^(#|(rgb|hsl)a?\\()/);\r\n}\r\n\r\n// 设置文字颜色\r\nexport function setTextColor(color: string | string[]) {\r\n  let style: {\r\n    color?: string;\r\n  } = {};\r\n\r\n  // 是否是数组\r\n  if (Array.isArray(color)) {\r\n    style = {\r\n      color: `${color[0]}`,\r\n    };\r\n  } else if (isCssColor(color)) {\r\n    style = {\r\n      color: `${color}`,\r\n    };\r\n  } else if (color) {\r\n    const [colorName] = color.toString().trim().split(' ', 2);\r\n\r\n    style = {\r\n      color: `${colorName}--text`,\r\n    };\r\n  }\r\n\r\n  return style;\r\n}\r\n\r\n// 是否是纯数字\r\nexport function isValueNumber(value) {\r\n  return /^[0-9][0-9]*$/.test(value + '');\r\n}\r\n\r\n// 已经获取滚动条宽度\r\nlet cached;\r\n\r\n// 获取滚动条宽度\r\nexport function getScrollBarSize(fresh?) {\r\n  if (!isClient) {\r\n    return 0;\r\n  }\r\n\r\n  if (fresh || cached === undefined) {\r\n    const inner = document.createElement('div');\r\n    inner.style.width = '100%';\r\n    inner.style.height = '200px';\r\n\r\n    const outer = document.createElement('div');\r\n\r\n    const outerStyle: CSSStyleDeclaration = outer.style;\r\n\r\n    outerStyle.position = 'absolute';\r\n    outerStyle.top = '0px';\r\n    outerStyle.left = '0px';\r\n    outerStyle.pointerEvents = 'none';\r\n    outerStyle.visibility = 'hidden';\r\n    outerStyle.width = '200px';\r\n    outerStyle.height = '150px';\r\n    outerStyle.overflow = 'hidden';\r\n\r\n    outer.appendChild(inner);\r\n\r\n    document.body.appendChild(outer);\r\n\r\n    const widthContained = inner.offsetWidth;\r\n    outer.style.overflow = 'scroll';\r\n    let widthScroll = inner.offsetWidth;\r\n\r\n    if (widthContained === widthScroll) {\r\n      widthScroll = outer.clientWidth;\r\n    }\r\n\r\n    document.body.removeChild(outer);\r\n\r\n    cached = widthContained - widthScroll;\r\n  }\r\n\r\n  return cached;\r\n}\r\n\r\nconst zIndex = ref(0);\r\n\r\n// 创建zindex\r\nexport const useZIndex = () => {\r\n  const currentZIndex = computed(() => 2000 + zIndex.value);\r\n\r\n  // 下一个数值\r\n  const nextZIndex = () => {\r\n    zIndex.value++;\r\n\r\n    return currentZIndex.value;\r\n  };\r\n\r\n  return {\r\n    currentZIndex,\r\n    nextZIndex,\r\n  };\r\n};\r\n\r\n// 是否是客户端\r\nexport const isClient = typeof window !== 'undefined';\r\n\r\n// 是否是对象\r\nexport const isObject = (obj: unknown): boolean => {\r\n  return obj !== null && typeof obj === 'object';\r\n};\r\n\r\n// 是否是Element\r\nexport const isElement = (el: HTMLElement) => {\r\n  return typeof HTMLElement === 'object' && el instanceof HTMLElement;\r\n};\r\n\r\n// 下载文件\r\nexport async function downloadFile(url, name = '') {\r\n  if (!isClient) {\r\n    return Promise.reject();\r\n  }\r\n\r\n  try {\r\n    const res = await fetch(url);\r\n    const blob = await res.blob();\r\n\r\n    const split = res.url.split('/');\r\n    // 文件名称\r\n    const fileName = split[split.length - 1];\r\n\r\n    if (!blob) {\r\n      return Promise.reject();\r\n    }\r\n\r\n    const localUrl = URL.createObjectURL(blob);\r\n    const a = document.createElement('a');\r\n    a.setAttribute('href', localUrl);\r\n    a.setAttribute('download', name || fileName);\r\n    a.click();\r\n\r\n    URL.revokeObjectURL(localUrl);\r\n\r\n    return Promise.resolve();\r\n  } catch (e) {\r\n    return Promise.reject(e);\r\n  }\r\n}\r\n\r\n// requestAnimationFrame\r\nexport function raf(fn: FrameRequestCallback): number {\r\n  return isClient ? requestAnimationFrame(fn) : -1;\r\n}\r\n\r\n// cancelAnimationFrame\r\nexport function cancelRaf(id: number) {\r\n  if (isClient) {\r\n    cancelAnimationFrame(id);\r\n  }\r\n}\r\n\r\n// double raf for animation\r\nexport function doubleRaf(fn: FrameRequestCallback): void {\r\n  raf(() => raf(fn));\r\n}\r\n\r\n// 是否是undefined\r\nexport const isUndefined = (val: any): val is undefined => val === undefined;\r\n\r\n// Find components upward\r\nexport function findComponentsUpward(context, componentName) {\r\n  const parents = [];\r\n  const parent = context.$parent;\r\n\r\n  if (parent) {\r\n    // 找到当前组件名称\r\n    if (parent.$options.name === componentName) {\r\n      parents.push(parent);\r\n    }\r\n\r\n    // 拼接数组\r\n    return parents.concat(findComponentsUpward(parent, componentName));\r\n  } else {\r\n    return [];\r\n  }\r\n}\r\n\r\n// Find components upward\r\nexport function findComponentUpward(context, componentName, componentNames?) {\r\n  // 当前组件名称\r\n  if (typeof componentName === 'string') {\r\n    componentNames = [componentName];\r\n  } else {\r\n    componentNames = componentName;\r\n  }\r\n\r\n  let parent = context.$parent;\r\n  let name = parent.$options.name;\r\n\r\n  while (parent && (!name || componentNames.indexOf(name) < 0)) {\r\n    parent = parent.$parent;\r\n\r\n    if (parent) {\r\n      name = parent.$options.name;\r\n    }\r\n  }\r\n\r\n  return parent;\r\n}\r\n"],"names":[],"mappings":"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"}