{"version":3,"file":"utils.mjs","sources":["../../../../../../../packages/components/video/src/hooks/utils.ts"],"sourcesContent":["import { isFunction } from '@lit-element/utils'\nimport { isClient } from '@vueuse/core'\n\nexport function isDefined<T = unknown>(\n  value: T | undefined | null\n): value is Exclude<T, undefined | null> {\n  return value !== undefined && value !== null\n}\n\n/**\n * 根据数组元素中某个或多个属性的值转换为映射对象\n *\n * @param list 需要被转换的数组\n * @param prop 需要被转换的属性或提供一个读取方法\n * @param accessor 映射的值的读取方法，默认返回元素本身\n * @param isMap 是否使用 Map 对象储存结果\n *\n * @returns 转换后的映射对象\n */\nexport function listToMap<T = any, O = T>(\n  list: T[],\n  prop: keyof T | ((item: T) => any),\n  accessor?: (item: T) => O,\n  isMap?: false\n): Record<string, O>\nexport function listToMap<T = any, O = T, K extends keyof T = keyof T>(\n  list: T[],\n  prop: K,\n  accessor?: (item: T) => O,\n  isMap?: true\n): Map<T[K], O>\nexport function listToMap<T = any, O = T, K = any>(\n  list: T[],\n  prop: (item: T) => K,\n  accessor?: (item: T) => O,\n  isMap?: true\n): Map<K extends keyof T ? T[K] : unknown, O>\nexport function listToMap<T = any, O = T>(\n  list: T[],\n  prop: keyof T | ((item: T) => any),\n  accessor: (item: T) => O = (v) => v as any,\n  isMap = false\n) {\n  const map = (isMap ? new Map<string, any>() : {}) as any\n\n  if (!isDefined(prop)) return map\n\n  const set = isMap\n    ? (key: any, value: O) => map.set(key, value)\n    : (key: any, value: O) => (map[key] = value)\n  const propAccessor = isFunction(prop) ? prop : (item: T) => item[prop]\n\n  list.forEach((item) => {\n    const key = propAccessor(item)\n\n    if (isDefined(key)) {\n      set(key, accessor(item))\n    }\n  })\n\n  return map\n}\n\nexport function getStepByWord(wordTemplate: string, step: number) {\n  return wordTemplate.replace(/{n}/g, `${step}`)\n}\n\nexport function boundRange(\n  number: number | string,\n  min: number,\n  max: number\n): number {\n  return Math.max(min, Math.min(max, Number.parseFloat(number as string)))\n}\n\n/**\n * 为给定的整数开头填充 0，直至满足指定的长度\n *\n * @param number 需要处理的整数\n * @param length 填充至的长度\n *\n * @returns 填充后的字面值\n */\nexport function padStartZeros(number: number, length: number) {\n  if (length <= 0) {\n    return number.toString()\n  }\n\n  return `${number < 0 ? '-' : ''}${String(\n    Math.abs(Math.round(number))\n  ).padStart(length, '0')}`\n}\n\n/**\n * 将小于 10 整数 N 变成 `0N` 的字符串，方法不会对入参校验\n *\n * @param number 需要处理的整数\n *\n * @returns 填充后的字面值\n */\nexport function doubleDigits(number: number) {\n  return padStartZeros(number, 2)\n}\n\n/**\n * 将给定的被除数和除数，不断的取余直至达到次数限制或余数小于除数，返回系列余数\n *\n * @param number 被除数，需大于 0\n * @param divideBy 除数，需大于 1\n * @param limit 次数限制，默认为 0，小于 1 则不作限制\n *\n * @returns 相除过程的系列余数\n */\nexport function leaveNumber(number: number, divideBy: number, limit = 0) {\n  if (number <= 0 || divideBy <= 1) return [number]\n\n  if (limit < 1) {\n    limit = Number.POSITIVE_INFINITY\n  }\n\n  const remainders: number[] = []\n  let count = 0\n\n  while (number >= divideBy && count < limit) {\n    remainders.push(number % divideBy)\n    number = Math.floor(number / divideBy)\n    ++count\n  }\n\n  remainders.push(number)\n\n  return remainders.reverse()\n}\n\nexport function formatSeconds(seconds: number) {\n  if (seconds <= 0) return '00:00'\n\n  const remainders = leaveNumber(Math.ceil(seconds), 60, 2)\n\n  if (remainders.length < 2) {\n    remainders.unshift(0)\n  }\n\n  return remainders.length < 3\n    ? remainders.map(doubleDigits).join(':')\n    : remainders.map((r, i) => (i ? doubleDigits(r) : r)).join(':')\n}\n\nexport function mergeIconScale(scale: number, icon: any) {\n  return {\n    ...icon,\n    scale: +(icon.scale || 1) * scale,\n  }\n}\n\n/**\n * 获取元素横向的内边距像素值\n *\n * @param el 指定的元素\n *\n * @returns 元素横向的内边距像素值\n */\nexport function getXPadding(el: HTMLElement | null) {\n  if (!isClient || !el) return 0\n\n  const computedStyle = getComputedStyle(el)\n  const padding =\n    Number.parseFloat(computedStyle.paddingLeft) +\n    Number.parseFloat(computedStyle.paddingRight)\n\n  return padding || 0\n}\n\n/**\n * 获取元素的选中宽度\n *\n * @param el 指定的元素\n *\n * @returns 元素的选中宽度\n */\nexport function getRangeWidth(el: HTMLElement | null) {\n  if (!isClient || !el) return 0\n\n  const range = document.createRange()\n\n  range.setStart(el, 0)\n  range.setEnd(el, el.childNodes.length)\n\n  const rangeWidth = range.getBoundingClientRect().width\n  const xPadding = getXPadding(el)\n\n  return rangeWidth + xPadding\n}\n\nexport const numberRE = /^\\s*[+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?\\s*$/\n/**\n * 检测给定的值是否可以通过 parseFlat 或 Number 方法转为数字\n *\n * 开启严格模式则通过正则以更严格的方法判断\n *\n * @param value 需要检测的值\n * @param strict 是否为严格模式\n *\n * @returns 值是否可以转为数字\n */\nexport function isValidNumber(value: unknown, strict = false) {\n  if (typeof value === 'number') {\n    return !Number.isNaN(value)\n  }\n\n  if (strict) {\n    return numberRE.test(String(value))\n  }\n\n  return (\n    !Number.isNaN(Number.parseFloat(value as string)) ||\n    !Number.isNaN(Number(value))\n  )\n}\n\n/**\n * 将给定的值转成数字，NaN 的情况将会处理成 0\n *\n * @param value 需要转换的值\n *\n * @returns 转换后的数字\n */\nexport function toNumber(value: unknown) {\n  let number = Number.parseFloat(value as string)\n\n  if (Number.isNaN(number)) {\n    number = Number(value)\n  }\n\n  return Number.isNaN(number) ? 0 : number\n}\n"],"names":[],"mappings":";;;;AAEO,SAAS,SAAS,CAAC,KAAK,EAAE;AACjC,EAAE,OAAO,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC;AAC5C,CAAC;AACM,SAAS,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE;AAC1E,EAAE,MAAM,GAAG,GAAG,KAAK,mBAAmB,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;AACrD,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACtB,IAAI,OAAO,GAAG,CAAC;AACf,EAAE,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC7F,EAAE,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;AACtE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACzB,IAAI,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;AACnC,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;AACxB,MAAM,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/B,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,GAAG,CAAC;AACb,CAAC;AACM,SAAS,aAAa,CAAC,YAAY,EAAE,IAAI,EAAE;AAClD,EAAE,OAAO,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AACM,SAAS,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;AAC7C,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AACM,SAAS,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE;AAC9C,EAAE,IAAI,MAAM,IAAI,CAAC,EAAE;AACnB,IAAI,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC7B,GAAG;AACH,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACjG,CAAC;AACM,SAAS,YAAY,CAAC,MAAM,EAAE;AACrC,EAAE,OAAO,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAClC,CAAC;AACM,SAAS,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,EAAE;AACzD,EAAE,IAAI,MAAM,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC;AAClC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;AACpB,EAAE,IAAI,KAAK,GAAG,CAAC,EAAE;AACjB,IAAI,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACrC,GAAG;AACH,EAAE,MAAM,UAAU,GAAG,EAAE,CAAC;AACxB,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;AAChB,EAAE,OAAO,MAAM,IAAI,QAAQ,IAAI,KAAK,GAAG,KAAK,EAAE;AAC9C,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;AACvC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;AAC3C,IAAI,EAAE,KAAK,CAAC;AACZ,GAAG;AACH,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,EAAE,OAAO,UAAU,CAAC,OAAO,EAAE,CAAC;AAC9B,CAAC;AACM,SAAS,aAAa,CAAC,OAAO,EAAE;AACvC,EAAE,IAAI,OAAO,IAAI,CAAC;AAClB,IAAI,OAAO,OAAO,CAAC;AACnB,EAAE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC5D,EAAE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1B,GAAG;AACH,EAAE,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtI,CAAC;AACM,SAAS,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE;AAC5C,EAAE,OAAO;AACT,IAAI,GAAG,IAAI;AACX,IAAI,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK;AACrC,GAAG,CAAC;AACJ,CAAC;AACM,SAAS,WAAW,CAAC,EAAE,EAAE;AAChC,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE;AACtB,IAAI,OAAO,CAAC,CAAC;AACb,EAAE,MAAM,aAAa,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAC7C,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AAC/G,EAAE,OAAO,OAAO,IAAI,CAAC,CAAC;AACtB,CAAC;AACM,SAAS,aAAa,CAAC,EAAE,EAAE;AAClC,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE;AACtB,IAAI,OAAO,CAAC,CAAC;AACb,EAAE,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;AACvC,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACxB,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACzC,EAAE,MAAM,UAAU,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;AACzD,EAAE,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;AACnC,EAAE,OAAO,UAAU,GAAG,QAAQ,CAAC;AAC/B,CAAC;AACW,MAAC,QAAQ,GAAG,0CAA0C;AAC3D,SAAS,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE;AACrD,EAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACjC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAChC,GAAG;AACH,EAAE,IAAI,MAAM,EAAE;AACd,IAAI,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,GAAG;AACH,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACjF,CAAC;AACM,SAAS,QAAQ,CAAC,KAAK,EAAE;AAChC,EAAE,IAAI,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACxC,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAC5B,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3B,GAAG;AACH,EAAE,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;AAC3C;;;;"}