@tanwan/utils 1.1.0 → 1.2.0
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.
- package/CHANGELOG.md +19 -0
- package/dist/addClass.cjs +19 -0
- package/dist/addClass.d.cts +16 -0
- package/dist/addClass.d.ts +17 -0
- package/dist/addClass.js +19 -0
- package/dist/{string/camelCase.d.cts → camelCase.d.cts} +1 -2
- package/dist/{string/camelCase.d.ts → camelCase.d.ts} +1 -2
- package/dist/{string/camelCase.js → camelCase.js} +0 -2
- package/dist/{string/capitalize.d.cts → capitalize.d.cts} +1 -2
- package/dist/{string/capitalize.d.ts → capitalize.d.ts} +1 -2
- package/dist/{string/capitalize.js → capitalize.js} +0 -2
- package/dist/{array/chunk.d.cts → chunk.d.cts} +1 -2
- package/dist/{array/chunk.d.ts → chunk.d.ts} +1 -2
- package/dist/{array/chunk.js → chunk.js} +0 -2
- package/dist/{number/clamp.d.cts → clamp.d.cts} +1 -2
- package/dist/{number/clamp.d.ts → clamp.d.ts} +1 -2
- package/dist/{number/clamp.js → clamp.js} +0 -2
- package/dist/convertCurrencyToChinese.cjs +56 -0
- package/dist/convertCurrencyToChinese.d.cts +18 -0
- package/dist/convertCurrencyToChinese.d.ts +19 -0
- package/dist/convertCurrencyToChinese.js +56 -0
- package/dist/copyToClipboard.cjs +38 -0
- package/dist/copyToClipboard.d.cts +17 -0
- package/dist/copyToClipboard.d.ts +18 -0
- package/dist/copyToClipboard.js +38 -0
- package/dist/createElement.cjs +27 -0
- package/dist/createElement.d.cts +21 -0
- package/dist/createElement.d.ts +22 -0
- package/dist/createElement.js +27 -0
- package/dist/{function/debounce.d.cts → debounce.d.cts} +1 -2
- package/dist/{function/debounce.d.ts → debounce.d.ts} +1 -2
- package/dist/{function/debounce.js → debounce.js} +0 -2
- package/dist/debounceSubmit.cjs +34 -0
- package/dist/debounceSubmit.d.cts +22 -0
- package/dist/debounceSubmit.d.ts +23 -0
- package/dist/debounceSubmit.js +34 -0
- package/dist/decodeBase64.cjs +19 -0
- package/dist/decodeBase64.d.cts +16 -0
- package/dist/decodeBase64.d.ts +17 -0
- package/dist/decodeBase64.js +19 -0
- package/dist/{base/deepClone.cjs → deepClone.cjs} +2 -2
- package/dist/{base/deepClone.d.cts → deepClone.d.cts} +1 -2
- package/dist/{base/deepClone.d.ts → deepClone.d.ts} +1 -2
- package/dist/{base/deepClone.js → deepClone.js} +0 -2
- package/dist/deepMerge.cjs +39 -0
- package/dist/deepMerge.d.cts +25 -0
- package/dist/deepMerge.d.ts +26 -0
- package/dist/deepMerge.js +39 -0
- package/dist/{function/delay.d.cts → delay.d.cts} +1 -2
- package/dist/{function/delay.d.ts → delay.d.ts} +1 -2
- package/dist/{function/delay.js → delay.js} +0 -2
- package/dist/difference.cjs +24 -0
- package/dist/difference.d.cts +20 -0
- package/dist/difference.d.ts +21 -0
- package/dist/difference.js +24 -0
- package/dist/downloadFile.cjs +31 -0
- package/dist/downloadFile.d.cts +20 -0
- package/dist/downloadFile.d.ts +21 -0
- package/dist/downloadFile.js +31 -0
- package/dist/encodeBase64.cjs +20 -0
- package/dist/encodeBase64.d.cts +17 -0
- package/dist/encodeBase64.d.ts +18 -0
- package/dist/encodeBase64.js +20 -0
- package/dist/{array/flatten.d.cts → flatten.d.cts} +1 -2
- package/dist/{array/flatten.d.ts → flatten.d.ts} +1 -2
- package/dist/{array/flatten.js → flatten.js} +0 -2
- package/dist/formatBankCard.cjs +19 -0
- package/dist/formatBankCard.d.cts +16 -0
- package/dist/formatBankCard.d.ts +17 -0
- package/dist/formatBankCard.js +19 -0
- package/dist/formatCurrency.cjs +7 -0
- package/dist/formatCurrency.d.cts +27 -0
- package/dist/formatCurrency.d.ts +28 -0
- package/dist/formatCurrency.js +7 -0
- package/dist/{date/formatDate.d.cts → formatDate.d.cts} +1 -2
- package/dist/{date/formatDate.d.ts → formatDate.d.ts} +1 -2
- package/dist/{date/formatDate.js → formatDate.js} +0 -2
- package/dist/formatFileSize.cjs +33 -0
- package/dist/formatFileSize.d.cts +19 -0
- package/dist/formatFileSize.d.ts +20 -0
- package/dist/formatFileSize.js +33 -0
- package/dist/formatIdCard.cjs +21 -0
- package/dist/formatIdCard.d.cts +17 -0
- package/dist/formatIdCard.d.ts +18 -0
- package/dist/formatIdCard.js +21 -0
- package/dist/formatPhone.cjs +21 -0
- package/dist/formatPhone.d.cts +17 -0
- package/dist/formatPhone.d.ts +18 -0
- package/dist/formatPhone.js +21 -0
- package/dist/{number/formatThousands.d.cts → formatThousands.d.cts} +1 -2
- package/dist/{number/formatThousands.d.ts → formatThousands.d.ts} +1 -2
- package/dist/{number/formatThousands.js → formatThousands.js} +0 -2
- package/dist/generateCode.cjs +29 -0
- package/dist/generateCode.d.cts +19 -0
- package/dist/generateCode.d.ts +20 -0
- package/dist/generateCode.js +29 -0
- package/dist/getAge.cjs +30 -0
- package/dist/getAge.d.cts +18 -0
- package/dist/getAge.d.ts +19 -0
- package/dist/getAge.js +30 -0
- package/dist/getByPath.cjs +29 -0
- package/dist/getByPath.d.cts +20 -0
- package/dist/getByPath.d.ts +21 -0
- package/dist/getByPath.js +29 -0
- package/dist/getCssVar.cjs +22 -0
- package/dist/getCssVar.d.cts +18 -0
- package/dist/getCssVar.d.ts +19 -0
- package/dist/getCssVar.js +22 -0
- package/dist/{date/getRelativeTime.d.cts → getRelativeTime.d.cts} +1 -2
- package/dist/{date/getRelativeTime.d.ts → getRelativeTime.d.ts} +1 -2
- package/dist/{date/getRelativeTime.js → getRelativeTime.js} +0 -2
- package/dist/getScrollTop.cjs +28 -0
- package/dist/getScrollTop.d.cts +18 -0
- package/dist/getScrollTop.d.ts +19 -0
- package/dist/getScrollTop.js +28 -0
- package/dist/getStorage.cjs +27 -0
- package/dist/getStorage.d.cts +18 -0
- package/dist/getStorage.d.ts +19 -0
- package/dist/getStorage.js +27 -0
- package/dist/getStyle.cjs +20 -0
- package/dist/getStyle.d.cts +17 -0
- package/dist/getStyle.d.ts +18 -0
- package/dist/getStyle.js +20 -0
- package/dist/getTextWidth.cjs +26 -0
- package/dist/getTextWidth.d.cts +16 -0
- package/dist/getTextWidth.d.ts +17 -0
- package/dist/getTextWidth.js +26 -0
- package/dist/{array/groupBy.d.cts → groupBy.d.cts} +1 -2
- package/dist/{array/groupBy.d.ts → groupBy.d.ts} +1 -2
- package/dist/{array/groupBy.js → groupBy.js} +0 -2
- package/dist/hasClass.cjs +19 -0
- package/dist/hasClass.d.cts +16 -0
- package/dist/hasClass.d.ts +17 -0
- package/dist/hasClass.js +19 -0
- package/dist/index.cjs +180 -54
- package/dist/index.d.cts +91 -28
- package/dist/index.d.ts +91 -28
- package/dist/index.iife.js +1 -1
- package/dist/index.js +91 -28
- package/dist/insertAfter.cjs +19 -0
- package/dist/insertAfter.d.cts +15 -0
- package/dist/insertAfter.d.ts +16 -0
- package/dist/insertAfter.js +19 -0
- package/dist/intersection.cjs +24 -0
- package/dist/intersection.d.cts +20 -0
- package/dist/intersection.d.ts +21 -0
- package/dist/intersection.js +24 -0
- package/dist/invert.cjs +21 -0
- package/dist/invert.d.cts +16 -0
- package/dist/invert.d.ts +17 -0
- package/dist/invert.js +21 -0
- package/dist/{base/isArray.d.cts → isArray.d.cts} +1 -2
- package/dist/{base/isArray.d.ts → isArray.d.ts} +1 -2
- package/dist/{base/isArray.js → isArray.js} +0 -2
- package/dist/isBrowser.cjs +17 -0
- package/dist/isBrowser.d.cts +14 -0
- package/dist/isBrowser.d.ts +15 -0
- package/dist/isBrowser.js +17 -0
- package/dist/isDate.cjs +18 -0
- package/dist/isDate.d.cts +15 -0
- package/dist/isDate.d.ts +16 -0
- package/dist/isDate.js +18 -0
- package/dist/{base/isEmpty.cjs → isEmpty.cjs} +2 -2
- package/dist/{base/isEmpty.d.cts → isEmpty.d.cts} +1 -2
- package/dist/{base/isEmpty.d.ts → isEmpty.d.ts} +1 -2
- package/dist/{base/isEmpty.js → isEmpty.js} +0 -2
- package/dist/isFunction.cjs +19 -0
- package/dist/isFunction.d.cts +16 -0
- package/dist/isFunction.d.ts +17 -0
- package/dist/isFunction.js +19 -0
- package/dist/isInViewport.cjs +22 -0
- package/dist/isInViewport.d.cts +17 -0
- package/dist/isInViewport.d.ts +18 -0
- package/dist/isInViewport.js +22 -0
- package/dist/isNil.cjs +19 -0
- package/dist/isNil.d.cts +16 -0
- package/dist/isNil.d.ts +17 -0
- package/dist/isNil.js +19 -0
- package/dist/isNumber.cjs +19 -0
- package/dist/isNumber.d.cts +16 -0
- package/dist/isNumber.d.ts +17 -0
- package/dist/isNumber.js +19 -0
- package/dist/{base/isObject.d.cts → isObject.d.cts} +1 -2
- package/dist/{base/isObject.d.ts → isObject.d.ts} +1 -2
- package/dist/{base/isObject.js → isObject.js} +0 -2
- package/dist/isPrimitive.cjs +21 -0
- package/dist/isPrimitive.d.cts +18 -0
- package/dist/isPrimitive.d.ts +19 -0
- package/dist/isPrimitive.js +21 -0
- package/dist/isPromise.cjs +18 -0
- package/dist/isPromise.d.cts +15 -0
- package/dist/isPromise.d.ts +16 -0
- package/dist/isPromise.js +18 -0
- package/dist/{base/isString.d.cts → isString.d.cts} +1 -2
- package/dist/{base/isString.d.ts → isString.d.ts} +1 -2
- package/dist/{base/isString.js → isString.js} +0 -2
- package/dist/joinUrl.cjs +25 -0
- package/dist/joinUrl.d.cts +19 -0
- package/dist/joinUrl.d.ts +20 -0
- package/dist/joinUrl.js +25 -0
- package/dist/{string/kebabCase.d.cts → kebabCase.d.cts} +1 -2
- package/dist/{string/kebabCase.d.ts → kebabCase.d.ts} +1 -2
- package/dist/{string/kebabCase.js → kebabCase.js} +0 -2
- package/dist/lazyLoadImages.cjs +36 -0
- package/dist/lazyLoadImages.d.cts +19 -0
- package/dist/lazyLoadImages.d.ts +20 -0
- package/dist/lazyLoadImages.js +36 -0
- package/dist/listToTree.cjs +25 -0
- package/dist/listToTree.d.cts +32 -0
- package/dist/listToTree.d.ts +33 -0
- package/dist/listToTree.js +25 -0
- package/dist/mapValues.cjs +25 -0
- package/dist/mapValues.d.cts +20 -0
- package/dist/mapValues.d.ts +21 -0
- package/dist/mapValues.js +25 -0
- package/dist/maskString.cjs +28 -0
- package/dist/maskString.d.cts +24 -0
- package/dist/maskString.d.ts +25 -0
- package/dist/maskString.js +28 -0
- package/dist/memoize.cjs +32 -0
- package/dist/memoize.d.cts +22 -0
- package/dist/memoize.d.ts +23 -0
- package/dist/memoize.js +32 -0
- package/dist/off.cjs +22 -0
- package/dist/off.d.cts +19 -0
- package/dist/off.d.ts +20 -0
- package/dist/off.js +22 -0
- package/dist/{object/omit.d.cts → omit.d.cts} +1 -2
- package/dist/{object/omit.d.ts → omit.d.ts} +1 -2
- package/dist/{object/omit.js → omit.js} +0 -2
- package/dist/on.cjs +21 -0
- package/dist/on.d.cts +18 -0
- package/dist/on.d.ts +19 -0
- package/dist/on.js +21 -0
- package/dist/once.cjs +31 -0
- package/dist/once.d.cts +20 -0
- package/dist/once.d.ts +21 -0
- package/dist/once.js +31 -0
- package/dist/{url/parseQueryString.d.cts → parseQueryString.d.cts} +1 -2
- package/dist/{url/parseQueryString.d.ts → parseQueryString.d.ts} +1 -2
- package/dist/{url/parseQueryString.js → parseQueryString.js} +0 -2
- package/dist/pascalCase.cjs +18 -0
- package/dist/pascalCase.d.cts +15 -0
- package/dist/pascalCase.d.ts +16 -0
- package/dist/pascalCase.js +18 -0
- package/dist/{object/pick.d.cts → pick.d.cts} +1 -2
- package/dist/{object/pick.d.ts → pick.d.ts} +1 -2
- package/dist/{object/pick.js → pick.js} +0 -2
- package/dist/{number/randomInt.d.cts → randomInt.d.cts} +1 -2
- package/dist/{number/randomInt.d.ts → randomInt.d.ts} +1 -2
- package/dist/{number/randomInt.js → randomInt.js} +0 -2
- package/dist/{array/range.d.cts → range.d.cts} +1 -2
- package/dist/{array/range.d.ts → range.d.ts} +1 -2
- package/dist/{array/range.js → range.js} +0 -2
- package/dist/removeClass.cjs +19 -0
- package/dist/removeClass.d.cts +16 -0
- package/dist/removeClass.d.ts +17 -0
- package/dist/removeClass.js +19 -0
- package/dist/removeElement.cjs +17 -0
- package/dist/removeElement.d.cts +14 -0
- package/dist/removeElement.d.ts +15 -0
- package/dist/removeElement.js +17 -0
- package/dist/removeStorage.cjs +19 -0
- package/dist/removeStorage.d.cts +14 -0
- package/dist/removeStorage.d.ts +15 -0
- package/dist/removeStorage.js +19 -0
- package/dist/retry.cjs +27 -0
- package/dist/retry.d.cts +17 -0
- package/dist/retry.d.ts +18 -0
- package/dist/retry.js +27 -0
- package/dist/sample.cjs +20 -0
- package/dist/sample.d.cts +16 -0
- package/dist/sample.d.ts +17 -0
- package/dist/sample.js +20 -0
- package/dist/scrollToElement.cjs +23 -0
- package/dist/scrollToElement.d.cts +16 -0
- package/dist/scrollToElement.d.ts +17 -0
- package/dist/scrollToElement.js +23 -0
- package/dist/setCssVar.cjs +22 -0
- package/dist/setCssVar.d.cts +18 -0
- package/dist/setCssVar.d.ts +19 -0
- package/dist/setCssVar.js +22 -0
- package/dist/setStorage.cjs +25 -0
- package/dist/setStorage.d.cts +17 -0
- package/dist/setStorage.d.ts +18 -0
- package/dist/setStorage.js +25 -0
- package/dist/setStyle.cjs +22 -0
- package/dist/setStyle.d.cts +19 -0
- package/dist/setStyle.d.ts +20 -0
- package/dist/setStyle.js +22 -0
- package/dist/{array/shuffle.d.cts → shuffle.d.cts} +1 -2
- package/dist/{array/shuffle.d.ts → shuffle.d.ts} +1 -2
- package/dist/{array/shuffle.js → shuffle.js} +0 -2
- package/dist/snakeCase.cjs +18 -0
- package/dist/snakeCase.d.cts +15 -0
- package/dist/snakeCase.d.ts +16 -0
- package/dist/snakeCase.js +18 -0
- package/dist/sortBy.cjs +30 -0
- package/dist/sortBy.d.cts +20 -0
- package/dist/sortBy.d.ts +21 -0
- package/dist/sortBy.js +30 -0
- package/dist/{url/stringifyQueryString.d.cts → stringifyQueryString.d.cts} +1 -2
- package/dist/{url/stringifyQueryString.d.ts → stringifyQueryString.d.ts} +1 -2
- package/dist/{url/stringifyQueryString.js → stringifyQueryString.js} +0 -2
- package/dist/{function/throttle.d.cts → throttle.d.cts} +1 -2
- package/dist/{function/throttle.d.ts → throttle.d.ts} +1 -2
- package/dist/{function/throttle.js → throttle.js} +0 -2
- package/dist/toggleClass.cjs +22 -0
- package/dist/toggleClass.d.cts +19 -0
- package/dist/toggleClass.d.ts +20 -0
- package/dist/toggleClass.js +22 -0
- package/dist/treeFind.cjs +34 -0
- package/dist/treeFind.d.cts +25 -0
- package/dist/treeFind.d.ts +26 -0
- package/dist/treeFind.js +34 -0
- package/dist/treeToList.cjs +33 -0
- package/dist/treeToList.d.cts +24 -0
- package/dist/treeToList.d.ts +25 -0
- package/dist/treeToList.js +33 -0
- package/dist/truncate.cjs +23 -0
- package/dist/truncate.d.cts +19 -0
- package/dist/truncate.d.ts +20 -0
- package/dist/truncate.js +23 -0
- package/dist/uniqBy.cjs +30 -0
- package/dist/uniqBy.d.cts +20 -0
- package/dist/uniqBy.d.ts +21 -0
- package/dist/uniqBy.js +30 -0
- package/dist/{array/unique.d.cts → unique.d.cts} +1 -2
- package/dist/{array/unique.d.ts → unique.d.ts} +1 -2
- package/dist/{array/unique.js → unique.js} +0 -2
- package/dist/{string/uuid.d.cts → uuid.d.cts} +1 -2
- package/dist/{string/uuid.d.ts → uuid.d.ts} +1 -2
- package/dist/{string/uuid.js → uuid.js} +0 -2
- package/dist/validateEmail.cjs +19 -0
- package/dist/validateEmail.d.cts +16 -0
- package/dist/validateEmail.d.ts +17 -0
- package/dist/validateEmail.js +19 -0
- package/dist/validateIdCard.cjs +62 -0
- package/dist/validateIdCard.d.cts +15 -0
- package/dist/validateIdCard.d.ts +16 -0
- package/dist/validateIdCard.js +62 -0
- package/dist/validatePhone.cjs +19 -0
- package/dist/validatePhone.d.cts +16 -0
- package/dist/validatePhone.d.ts +17 -0
- package/dist/validatePhone.js +19 -0
- package/package.json +340 -83
- package/dist/array/chunk.d.cts.map +0 -1
- package/dist/array/chunk.d.ts.map +0 -1
- package/dist/array/chunk.js.map +0 -1
- package/dist/array/flatten.d.cts.map +0 -1
- package/dist/array/flatten.d.ts.map +0 -1
- package/dist/array/flatten.js.map +0 -1
- package/dist/array/groupBy.d.cts.map +0 -1
- package/dist/array/groupBy.d.ts.map +0 -1
- package/dist/array/groupBy.js.map +0 -1
- package/dist/array/range.d.cts.map +0 -1
- package/dist/array/range.d.ts.map +0 -1
- package/dist/array/range.js.map +0 -1
- package/dist/array/shuffle.d.cts.map +0 -1
- package/dist/array/shuffle.d.ts.map +0 -1
- package/dist/array/shuffle.js.map +0 -1
- package/dist/array/unique.d.cts.map +0 -1
- package/dist/array/unique.d.ts.map +0 -1
- package/dist/array/unique.js.map +0 -1
- package/dist/base/deepClone.d.cts.map +0 -1
- package/dist/base/deepClone.d.ts.map +0 -1
- package/dist/base/deepClone.js.map +0 -1
- package/dist/base/isArray.d.cts.map +0 -1
- package/dist/base/isArray.d.ts.map +0 -1
- package/dist/base/isArray.js.map +0 -1
- package/dist/base/isEmpty.d.cts.map +0 -1
- package/dist/base/isEmpty.d.ts.map +0 -1
- package/dist/base/isEmpty.js.map +0 -1
- package/dist/base/isObject.d.cts.map +0 -1
- package/dist/base/isObject.d.ts.map +0 -1
- package/dist/base/isObject.js.map +0 -1
- package/dist/base/isString.d.cts.map +0 -1
- package/dist/base/isString.d.ts.map +0 -1
- package/dist/base/isString.js.map +0 -1
- package/dist/date/formatDate.d.cts.map +0 -1
- package/dist/date/formatDate.d.ts.map +0 -1
- package/dist/date/formatDate.js.map +0 -1
- package/dist/date/getRelativeTime.d.cts.map +0 -1
- package/dist/date/getRelativeTime.d.ts.map +0 -1
- package/dist/date/getRelativeTime.js.map +0 -1
- package/dist/function/debounce.d.cts.map +0 -1
- package/dist/function/debounce.d.ts.map +0 -1
- package/dist/function/debounce.js.map +0 -1
- package/dist/function/delay.d.cts.map +0 -1
- package/dist/function/delay.d.ts.map +0 -1
- package/dist/function/delay.js.map +0 -1
- package/dist/function/throttle.d.cts.map +0 -1
- package/dist/function/throttle.d.ts.map +0 -1
- package/dist/function/throttle.js.map +0 -1
- package/dist/number/clamp.d.cts.map +0 -1
- package/dist/number/clamp.d.ts.map +0 -1
- package/dist/number/clamp.js.map +0 -1
- package/dist/number/formatThousands.d.cts.map +0 -1
- package/dist/number/formatThousands.d.ts.map +0 -1
- package/dist/number/formatThousands.js.map +0 -1
- package/dist/number/randomInt.d.cts.map +0 -1
- package/dist/number/randomInt.d.ts.map +0 -1
- package/dist/number/randomInt.js.map +0 -1
- package/dist/object/omit.d.cts.map +0 -1
- package/dist/object/omit.d.ts.map +0 -1
- package/dist/object/omit.js.map +0 -1
- package/dist/object/pick.d.cts.map +0 -1
- package/dist/object/pick.d.ts.map +0 -1
- package/dist/object/pick.js.map +0 -1
- package/dist/string/camelCase.d.cts.map +0 -1
- package/dist/string/camelCase.d.ts.map +0 -1
- package/dist/string/camelCase.js.map +0 -1
- package/dist/string/capitalize.d.cts.map +0 -1
- package/dist/string/capitalize.d.ts.map +0 -1
- package/dist/string/capitalize.js.map +0 -1
- package/dist/string/kebabCase.d.cts.map +0 -1
- package/dist/string/kebabCase.d.ts.map +0 -1
- package/dist/string/kebabCase.js.map +0 -1
- package/dist/string/uuid.d.cts.map +0 -1
- package/dist/string/uuid.d.ts.map +0 -1
- package/dist/string/uuid.js.map +0 -1
- package/dist/url/parseQueryString.d.cts.map +0 -1
- package/dist/url/parseQueryString.d.ts.map +0 -1
- package/dist/url/parseQueryString.js.map +0 -1
- package/dist/url/stringifyQueryString.d.cts.map +0 -1
- package/dist/url/stringifyQueryString.d.ts.map +0 -1
- package/dist/url/stringifyQueryString.js.map +0 -1
- /package/dist/{string/camelCase.cjs → camelCase.cjs} +0 -0
- /package/dist/{string/capitalize.cjs → capitalize.cjs} +0 -0
- /package/dist/{array/chunk.cjs → chunk.cjs} +0 -0
- /package/dist/{number/clamp.cjs → clamp.cjs} +0 -0
- /package/dist/{function/debounce.cjs → debounce.cjs} +0 -0
- /package/dist/{function/delay.cjs → delay.cjs} +0 -0
- /package/dist/{array/flatten.cjs → flatten.cjs} +0 -0
- /package/dist/{date/formatDate.cjs → formatDate.cjs} +0 -0
- /package/dist/{number/formatThousands.cjs → formatThousands.cjs} +0 -0
- /package/dist/{date/getRelativeTime.cjs → getRelativeTime.cjs} +0 -0
- /package/dist/{array/groupBy.cjs → groupBy.cjs} +0 -0
- /package/dist/{base/isArray.cjs → isArray.cjs} +0 -0
- /package/dist/{base/isObject.cjs → isObject.cjs} +0 -0
- /package/dist/{base/isString.cjs → isString.cjs} +0 -0
- /package/dist/{string/kebabCase.cjs → kebabCase.cjs} +0 -0
- /package/dist/{object/omit.cjs → omit.cjs} +0 -0
- /package/dist/{url/parseQueryString.cjs → parseQueryString.cjs} +0 -0
- /package/dist/{object/pick.cjs → pick.cjs} +0 -0
- /package/dist/{number/randomInt.cjs → randomInt.cjs} +0 -0
- /package/dist/{array/range.cjs → range.cjs} +0 -0
- /package/dist/{array/shuffle.cjs → shuffle.cjs} +0 -0
- /package/dist/{url/stringifyQueryString.cjs → stringifyQueryString.cjs} +0 -0
- /package/dist/{function/throttle.cjs → throttle.cjs} +0 -0
- /package/dist/{array/unique.cjs → unique.cjs} +0 -0
- /package/dist/{string/uuid.cjs → uuid.cjs} +0 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# @tanwan/utils
|
|
2
|
+
|
|
3
|
+
## 1.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 扁平化导出路径:简化 import 路径从 `@tanwan/utils/array/chunk` 到 `@tanwan/utils/chunk`。
|
|
8
|
+
|
|
9
|
+
## 1.1.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 新增 9 个实用工具函数:isEmpty (base), pick/omit (object), range/groupBy (array), uuid (string), delay (function), parseQueryString/stringifyQueryString (url)
|
|
14
|
+
|
|
15
|
+
## 1.0.0
|
|
16
|
+
|
|
17
|
+
### Major Changes
|
|
18
|
+
|
|
19
|
+
- 初始化第一波版本
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/dom/addClass/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 给元素添加 CSS class
|
|
4
|
+
*
|
|
5
|
+
* @param el - DOM 元素
|
|
6
|
+
* @param className - 要添加的 class(支持空格分隔多个)
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import addClass from '@tanwan/utils/addClass'
|
|
11
|
+
* addClass(el, 'active')
|
|
12
|
+
* addClass(el, 'foo bar')
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
function addClass(el, className) {
|
|
16
|
+
el.classList.add(...className.split(/\s+/).filter(Boolean));
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
module.exports = addClass;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/dom/addClass/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 给元素添加 CSS class
|
|
4
|
+
*
|
|
5
|
+
* @param el - DOM 元素
|
|
6
|
+
* @param className - 要添加的 class(支持空格分隔多个)
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import addClass from '@tanwan/utils/addClass'
|
|
11
|
+
* addClass(el, 'active')
|
|
12
|
+
* addClass(el, 'foo bar')
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
declare function addClass(el: Element, className: string): void;
|
|
16
|
+
export = addClass;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/dom/addClass/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 给元素添加 CSS class
|
|
4
|
+
*
|
|
5
|
+
* @param el - DOM 元素
|
|
6
|
+
* @param className - 要添加的 class(支持空格分隔多个)
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import addClass from '@tanwan/utils/addClass'
|
|
11
|
+
* addClass(el, 'active')
|
|
12
|
+
* addClass(el, 'foo bar')
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
declare function addClass(el: Element, className: string): void;
|
|
16
|
+
//#endregion
|
|
17
|
+
export { addClass as default };
|
package/dist/addClass.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/dom/addClass/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 给元素添加 CSS class
|
|
4
|
+
*
|
|
5
|
+
* @param el - DOM 元素
|
|
6
|
+
* @param className - 要添加的 class(支持空格分隔多个)
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import addClass from '@tanwan/utils/addClass'
|
|
11
|
+
* addClass(el, 'active')
|
|
12
|
+
* addClass(el, 'foo bar')
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
function addClass(el, className) {
|
|
16
|
+
el.classList.add(...className.split(/\s+/).filter(Boolean));
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { addClass as default };
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
//#region src/business/convertCurrencyToChinese/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 金额转为中文大写
|
|
4
|
+
*
|
|
5
|
+
* @param amount - 金额数值
|
|
6
|
+
* @returns 中文大写金额字符串
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import convertCurrencyToChinese from '@tanwan/utils/convertCurrencyToChinese'
|
|
11
|
+
* convertCurrencyToChinese(1234.56)
|
|
12
|
+
* // '壹仟贰佰叁拾肆元伍角陆分'
|
|
13
|
+
* convertCurrencyToChinese(0)
|
|
14
|
+
* // '零元整'
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
function convertCurrencyToChinese(amount) {
|
|
18
|
+
if (amount === 0) return "零元整";
|
|
19
|
+
const digits = "零壹贰叁肆伍陆柒捌玖";
|
|
20
|
+
const units = [
|
|
21
|
+
"",
|
|
22
|
+
"拾",
|
|
23
|
+
"佰",
|
|
24
|
+
"仟"
|
|
25
|
+
];
|
|
26
|
+
const bigUnits = [
|
|
27
|
+
"",
|
|
28
|
+
"万",
|
|
29
|
+
"亿"
|
|
30
|
+
];
|
|
31
|
+
const [intPart, decimalPart] = amount.toFixed(2).split(".");
|
|
32
|
+
const intLen = intPart.length;
|
|
33
|
+
let result = "";
|
|
34
|
+
for (let i = 0; i < intLen; i++) {
|
|
35
|
+
const digit = Number.parseInt(intPart[i]);
|
|
36
|
+
const pos = intLen - 1 - i;
|
|
37
|
+
const unitIdx = pos % 4;
|
|
38
|
+
const bigIdx = Math.floor(pos / 4);
|
|
39
|
+
if (digit !== 0) result += digits[digit] + units[unitIdx];
|
|
40
|
+
else if (i < intLen - 1 && intPart[i + 1] !== "0") result += digits[0];
|
|
41
|
+
if (unitIdx === 0 && bigIdx > 0) {
|
|
42
|
+
if (intPart.substring(i + 1).replace(/0+$/, "").length > 0) result += bigUnits[bigIdx];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
result += "元";
|
|
46
|
+
const jiao = Number.parseInt(decimalPart[0]);
|
|
47
|
+
const fen = Number.parseInt(decimalPart[1]);
|
|
48
|
+
if (jiao === 0 && fen === 0) result += "整";
|
|
49
|
+
else {
|
|
50
|
+
if (jiao > 0) result += digits[jiao] + "角";
|
|
51
|
+
if (fen > 0) result += digits[fen] + "分";
|
|
52
|
+
}
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
//#endregion
|
|
56
|
+
module.exports = convertCurrencyToChinese;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/business/convertCurrencyToChinese/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 金额转为中文大写
|
|
4
|
+
*
|
|
5
|
+
* @param amount - 金额数值
|
|
6
|
+
* @returns 中文大写金额字符串
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import convertCurrencyToChinese from '@tanwan/utils/convertCurrencyToChinese'
|
|
11
|
+
* convertCurrencyToChinese(1234.56)
|
|
12
|
+
* // '壹仟贰佰叁拾肆元伍角陆分'
|
|
13
|
+
* convertCurrencyToChinese(0)
|
|
14
|
+
* // '零元整'
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
declare function convertCurrencyToChinese(amount: number): string;
|
|
18
|
+
export = convertCurrencyToChinese;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/business/convertCurrencyToChinese/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 金额转为中文大写
|
|
4
|
+
*
|
|
5
|
+
* @param amount - 金额数值
|
|
6
|
+
* @returns 中文大写金额字符串
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import convertCurrencyToChinese from '@tanwan/utils/convertCurrencyToChinese'
|
|
11
|
+
* convertCurrencyToChinese(1234.56)
|
|
12
|
+
* // '壹仟贰佰叁拾肆元伍角陆分'
|
|
13
|
+
* convertCurrencyToChinese(0)
|
|
14
|
+
* // '零元整'
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
declare function convertCurrencyToChinese(amount: number): string;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { convertCurrencyToChinese as default };
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
//#region src/business/convertCurrencyToChinese/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 金额转为中文大写
|
|
4
|
+
*
|
|
5
|
+
* @param amount - 金额数值
|
|
6
|
+
* @returns 中文大写金额字符串
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import convertCurrencyToChinese from '@tanwan/utils/convertCurrencyToChinese'
|
|
11
|
+
* convertCurrencyToChinese(1234.56)
|
|
12
|
+
* // '壹仟贰佰叁拾肆元伍角陆分'
|
|
13
|
+
* convertCurrencyToChinese(0)
|
|
14
|
+
* // '零元整'
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
function convertCurrencyToChinese(amount) {
|
|
18
|
+
if (amount === 0) return "零元整";
|
|
19
|
+
const digits = "零壹贰叁肆伍陆柒捌玖";
|
|
20
|
+
const units = [
|
|
21
|
+
"",
|
|
22
|
+
"拾",
|
|
23
|
+
"佰",
|
|
24
|
+
"仟"
|
|
25
|
+
];
|
|
26
|
+
const bigUnits = [
|
|
27
|
+
"",
|
|
28
|
+
"万",
|
|
29
|
+
"亿"
|
|
30
|
+
];
|
|
31
|
+
const [intPart, decimalPart] = amount.toFixed(2).split(".");
|
|
32
|
+
const intLen = intPart.length;
|
|
33
|
+
let result = "";
|
|
34
|
+
for (let i = 0; i < intLen; i++) {
|
|
35
|
+
const digit = Number.parseInt(intPart[i]);
|
|
36
|
+
const pos = intLen - 1 - i;
|
|
37
|
+
const unitIdx = pos % 4;
|
|
38
|
+
const bigIdx = Math.floor(pos / 4);
|
|
39
|
+
if (digit !== 0) result += digits[digit] + units[unitIdx];
|
|
40
|
+
else if (i < intLen - 1 && intPart[i + 1] !== "0") result += digits[0];
|
|
41
|
+
if (unitIdx === 0 && bigIdx > 0) {
|
|
42
|
+
if (intPart.substring(i + 1).replace(/0+$/, "").length > 0) result += bigUnits[bigIdx];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
result += "元";
|
|
46
|
+
const jiao = Number.parseInt(decimalPart[0]);
|
|
47
|
+
const fen = Number.parseInt(decimalPart[1]);
|
|
48
|
+
if (jiao === 0 && fen === 0) result += "整";
|
|
49
|
+
else {
|
|
50
|
+
if (jiao > 0) result += digits[jiao] + "角";
|
|
51
|
+
if (fen > 0) result += digits[fen] + "分";
|
|
52
|
+
}
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
//#endregion
|
|
56
|
+
export { convertCurrencyToChinese as default };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//#region src/business/copyToClipboard/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 复制文本到剪贴板
|
|
4
|
+
*
|
|
5
|
+
* 优先使用 `navigator.clipboard.writeText`,不支持时降级为 `document.execCommand`
|
|
6
|
+
*
|
|
7
|
+
* @param text - 要复制的文本
|
|
8
|
+
* @returns 是否复制成功
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import copyToClipboard from '@tanwan/utils/copyToClipboard'
|
|
13
|
+
* await copyToClipboard('Hello World')
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
async function copyToClipboard(text) {
|
|
17
|
+
try {
|
|
18
|
+
if (navigator.clipboard && typeof navigator.clipboard.writeText === "function") {
|
|
19
|
+
await navigator.clipboard.writeText(text);
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
} catch {}
|
|
23
|
+
const textarea = document.createElement("textarea");
|
|
24
|
+
textarea.value = text;
|
|
25
|
+
textarea.style.position = "fixed";
|
|
26
|
+
textarea.style.opacity = "0";
|
|
27
|
+
document.body.appendChild(textarea);
|
|
28
|
+
textarea.select();
|
|
29
|
+
try {
|
|
30
|
+
return document.execCommand("copy");
|
|
31
|
+
} catch {
|
|
32
|
+
return false;
|
|
33
|
+
} finally {
|
|
34
|
+
document.body.removeChild(textarea);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
38
|
+
module.exports = copyToClipboard;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/business/copyToClipboard/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 复制文本到剪贴板
|
|
4
|
+
*
|
|
5
|
+
* 优先使用 `navigator.clipboard.writeText`,不支持时降级为 `document.execCommand`
|
|
6
|
+
*
|
|
7
|
+
* @param text - 要复制的文本
|
|
8
|
+
* @returns 是否复制成功
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import copyToClipboard from '@tanwan/utils/copyToClipboard'
|
|
13
|
+
* await copyToClipboard('Hello World')
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
declare function copyToClipboard(text: string): Promise<boolean>;
|
|
17
|
+
export = copyToClipboard;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/business/copyToClipboard/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 复制文本到剪贴板
|
|
4
|
+
*
|
|
5
|
+
* 优先使用 `navigator.clipboard.writeText`,不支持时降级为 `document.execCommand`
|
|
6
|
+
*
|
|
7
|
+
* @param text - 要复制的文本
|
|
8
|
+
* @returns 是否复制成功
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import copyToClipboard from '@tanwan/utils/copyToClipboard'
|
|
13
|
+
* await copyToClipboard('Hello World')
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
declare function copyToClipboard(text: string): Promise<boolean>;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { copyToClipboard as default };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//#region src/business/copyToClipboard/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 复制文本到剪贴板
|
|
4
|
+
*
|
|
5
|
+
* 优先使用 `navigator.clipboard.writeText`,不支持时降级为 `document.execCommand`
|
|
6
|
+
*
|
|
7
|
+
* @param text - 要复制的文本
|
|
8
|
+
* @returns 是否复制成功
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import copyToClipboard from '@tanwan/utils/copyToClipboard'
|
|
13
|
+
* await copyToClipboard('Hello World')
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
async function copyToClipboard(text) {
|
|
17
|
+
try {
|
|
18
|
+
if (navigator.clipboard && typeof navigator.clipboard.writeText === "function") {
|
|
19
|
+
await navigator.clipboard.writeText(text);
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
} catch {}
|
|
23
|
+
const textarea = document.createElement("textarea");
|
|
24
|
+
textarea.value = text;
|
|
25
|
+
textarea.style.position = "fixed";
|
|
26
|
+
textarea.style.opacity = "0";
|
|
27
|
+
document.body.appendChild(textarea);
|
|
28
|
+
textarea.select();
|
|
29
|
+
try {
|
|
30
|
+
return document.execCommand("copy");
|
|
31
|
+
} catch {
|
|
32
|
+
return false;
|
|
33
|
+
} finally {
|
|
34
|
+
document.body.removeChild(textarea);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
38
|
+
export { copyToClipboard as default };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//#region src/dom/createElement/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 快捷创建元素并设置属性
|
|
4
|
+
*
|
|
5
|
+
* @param tag - HTML 标签名
|
|
6
|
+
* @param attrs - 属性对象,如 `{ id: 'box', class: 'card' }`
|
|
7
|
+
* @param children - 子节点(文本、元素或元素数组)
|
|
8
|
+
* @returns 创建的 DOM 元素
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import createElement from '@tanwan/utils/createElement'
|
|
13
|
+
* createElement('div', { class: 'card' }, 'Hello')
|
|
14
|
+
* createElement('ul', { id: 'list' },
|
|
15
|
+
* createElement('li', {}, 'Item 1'),
|
|
16
|
+
* createElement('li', {}, 'Item 2'),
|
|
17
|
+
* )
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
function createElement(tag, attrs = {}, ...children) {
|
|
21
|
+
const el = document.createElement(tag);
|
|
22
|
+
for (const key of Object.keys(attrs)) el.setAttribute(key, attrs[key]);
|
|
23
|
+
for (const child of children) el.appendChild(typeof child === "string" ? document.createTextNode(child) : child);
|
|
24
|
+
return el;
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
module.exports = createElement;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/dom/createElement/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 快捷创建元素并设置属性
|
|
4
|
+
*
|
|
5
|
+
* @param tag - HTML 标签名
|
|
6
|
+
* @param attrs - 属性对象,如 `{ id: 'box', class: 'card' }`
|
|
7
|
+
* @param children - 子节点(文本、元素或元素数组)
|
|
8
|
+
* @returns 创建的 DOM 元素
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import createElement from '@tanwan/utils/createElement'
|
|
13
|
+
* createElement('div', { class: 'card' }, 'Hello')
|
|
14
|
+
* createElement('ul', { id: 'list' },
|
|
15
|
+
* createElement('li', {}, 'Item 1'),
|
|
16
|
+
* createElement('li', {}, 'Item 2'),
|
|
17
|
+
* )
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
declare function createElement<K extends keyof HTMLElementTagNameMap>(tag: K, attrs?: Record<string, string>, ...children: (string | Node)[]): HTMLElementTagNameMap[K];
|
|
21
|
+
export = createElement;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/dom/createElement/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 快捷创建元素并设置属性
|
|
4
|
+
*
|
|
5
|
+
* @param tag - HTML 标签名
|
|
6
|
+
* @param attrs - 属性对象,如 `{ id: 'box', class: 'card' }`
|
|
7
|
+
* @param children - 子节点(文本、元素或元素数组)
|
|
8
|
+
* @returns 创建的 DOM 元素
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import createElement from '@tanwan/utils/createElement'
|
|
13
|
+
* createElement('div', { class: 'card' }, 'Hello')
|
|
14
|
+
* createElement('ul', { id: 'list' },
|
|
15
|
+
* createElement('li', {}, 'Item 1'),
|
|
16
|
+
* createElement('li', {}, 'Item 2'),
|
|
17
|
+
* )
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
declare function createElement<K extends keyof HTMLElementTagNameMap>(tag: K, attrs?: Record<string, string>, ...children: (string | Node)[]): HTMLElementTagNameMap[K];
|
|
21
|
+
//#endregion
|
|
22
|
+
export { createElement as default };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//#region src/dom/createElement/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 快捷创建元素并设置属性
|
|
4
|
+
*
|
|
5
|
+
* @param tag - HTML 标签名
|
|
6
|
+
* @param attrs - 属性对象,如 `{ id: 'box', class: 'card' }`
|
|
7
|
+
* @param children - 子节点(文本、元素或元素数组)
|
|
8
|
+
* @returns 创建的 DOM 元素
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import createElement from '@tanwan/utils/createElement'
|
|
13
|
+
* createElement('div', { class: 'card' }, 'Hello')
|
|
14
|
+
* createElement('ul', { id: 'list' },
|
|
15
|
+
* createElement('li', {}, 'Item 1'),
|
|
16
|
+
* createElement('li', {}, 'Item 2'),
|
|
17
|
+
* )
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
function createElement(tag, attrs = {}, ...children) {
|
|
21
|
+
const el = document.createElement(tag);
|
|
22
|
+
for (const key of Object.keys(attrs)) el.setAttribute(key, attrs[key]);
|
|
23
|
+
for (const child of children) el.appendChild(typeof child === "string" ? document.createTextNode(child) : child);
|
|
24
|
+
return el;
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { createElement as default };
|
|
@@ -11,5 +11,4 @@
|
|
|
11
11
|
*/
|
|
12
12
|
declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number, immediate?: boolean): (...args: Parameters<T>) => void;
|
|
13
13
|
//#endregion
|
|
14
|
-
export { debounce as default };
|
|
15
|
-
//# sourceMappingURL=debounce.d.ts.map
|
|
14
|
+
export { debounce as default };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
//#region src/business/debounceSubmit/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 包装异步函数,防止重复提交
|
|
4
|
+
*
|
|
5
|
+
* 在函数执行期间,后续调用会被忽略直到第一次调用完成
|
|
6
|
+
*
|
|
7
|
+
* @param fn - 异步提交函数
|
|
8
|
+
* @returns 包装后的函数
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import debounceSubmit from '@tanwan/utils/debounceSubmit'
|
|
13
|
+
* const submit = debounceSubmit(async (data: FormData) => {
|
|
14
|
+
* await fetch('/api/submit', { method: 'POST', body: data })
|
|
15
|
+
* })
|
|
16
|
+
*
|
|
17
|
+
* await submit(formData) // 第一次执行
|
|
18
|
+
* await submit(formData) // 忽略(上一次还在执行中)
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
function debounceSubmit(fn) {
|
|
22
|
+
let pending = false;
|
|
23
|
+
return (async (...args) => {
|
|
24
|
+
if (pending) return;
|
|
25
|
+
pending = true;
|
|
26
|
+
try {
|
|
27
|
+
return await fn(...args);
|
|
28
|
+
} finally {
|
|
29
|
+
pending = false;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
module.exports = debounceSubmit;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/business/debounceSubmit/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 包装异步函数,防止重复提交
|
|
4
|
+
*
|
|
5
|
+
* 在函数执行期间,后续调用会被忽略直到第一次调用完成
|
|
6
|
+
*
|
|
7
|
+
* @param fn - 异步提交函数
|
|
8
|
+
* @returns 包装后的函数
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import debounceSubmit from '@tanwan/utils/debounceSubmit'
|
|
13
|
+
* const submit = debounceSubmit(async (data: FormData) => {
|
|
14
|
+
* await fetch('/api/submit', { method: 'POST', body: data })
|
|
15
|
+
* })
|
|
16
|
+
*
|
|
17
|
+
* await submit(formData) // 第一次执行
|
|
18
|
+
* await submit(formData) // 忽略(上一次还在执行中)
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
declare function debounceSubmit<T extends (...args: unknown[]) => Promise<unknown>>(fn: T): T;
|
|
22
|
+
export = debounceSubmit;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/business/debounceSubmit/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 包装异步函数,防止重复提交
|
|
4
|
+
*
|
|
5
|
+
* 在函数执行期间,后续调用会被忽略直到第一次调用完成
|
|
6
|
+
*
|
|
7
|
+
* @param fn - 异步提交函数
|
|
8
|
+
* @returns 包装后的函数
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import debounceSubmit from '@tanwan/utils/debounceSubmit'
|
|
13
|
+
* const submit = debounceSubmit(async (data: FormData) => {
|
|
14
|
+
* await fetch('/api/submit', { method: 'POST', body: data })
|
|
15
|
+
* })
|
|
16
|
+
*
|
|
17
|
+
* await submit(formData) // 第一次执行
|
|
18
|
+
* await submit(formData) // 忽略(上一次还在执行中)
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
declare function debounceSubmit<T extends (...args: unknown[]) => Promise<unknown>>(fn: T): T;
|
|
22
|
+
//#endregion
|
|
23
|
+
export { debounceSubmit as default };
|