@daybrush/utils
Advanced tools
@@ -1,2 +0,2 @@ | ||
| import { IObject } from "./types"; | ||
| import { IObject, OpenCloseCharacter } from "./types"; | ||
| export declare const RGB = "rgb"; | ||
@@ -22,4 +22,4 @@ export declare const RGBA = "rgba"; | ||
| export declare const KEYFRAMES: string; | ||
| export declare const OPEN_CLOSED_CHARACTER: string[]; | ||
| export declare const OPEN_CLOSED_CHARACTERS: OpenCloseCharacter[]; | ||
| export declare const TINY_NUM = 1e-7; | ||
| export declare const DEFAULT_UNIT_PRESETS: IObject<(pos: number, size?: number) => number>; |
@@ -11,1 +11,13 @@ export interface IArrayFormat<T> { | ||
| } | ||
| export interface OpenCloseCharacter { | ||
| open: string; | ||
| close: string; | ||
| ignore?: RegExp; | ||
| } | ||
| export interface SplitOptions { | ||
| separator?: string; | ||
| isSeparateFirst?: boolean; | ||
| isSeparateOnlyOpenClose?: boolean; | ||
| isSeparateOpenClose?: boolean; | ||
| openCloseCharacters?: OpenCloseCharacter[]; | ||
| } |
@@ -1,2 +0,2 @@ | ||
| import { IArrayFormat, IObject } from "./types"; | ||
| import { IArrayFormat, IObject, SplitOptions } from "./types"; | ||
| export declare function dot(a1: number, a2: number, b1: number, b2: number): number; | ||
@@ -9,3 +9,3 @@ export declare function isUndefined(value: any): value is undefined; | ||
| export declare function isFunction(value: any): value is (...args: any[]) => any; | ||
| export declare function splitText(text: string, separator: string): string[]; | ||
| export declare function splitText(text: string, splitOptions: string | SplitOptions): string[]; | ||
| export declare function splitSpace(text: string): string[]; | ||
@@ -49,1 +49,2 @@ export declare function splitComma(text: string): string[]; | ||
| export declare function throttleArray(nums: number[], unit?: number): number[]; | ||
| export declare function counter(num: number): number[]; |
+157
-28
@@ -7,3 +7,3 @@ /* | ||
| repository: https://github.com/daybrush/utils | ||
| @version 1.5.0 | ||
| @version 1.6.0-beta.0 | ||
| */ | ||
@@ -237,3 +237,18 @@ /** | ||
| var KEYFRAMES = /*#__PURE__*/ANIMATION.replace("animation", "keyframes"); | ||
| var OPEN_CLOSED_CHARACTER = ["\"", "'", "\\\"", "\\'"]; | ||
| var OPEN_CLOSED_CHARACTERS = [{ | ||
| open: "(", | ||
| close: ")" | ||
| }, { | ||
| open: "\"", | ||
| close: "\"" | ||
| }, { | ||
| open: "'", | ||
| close: "'" | ||
| }, { | ||
| open: "\\\"", | ||
| close: "\\\"" | ||
| }, { | ||
| open: "\\'", | ||
| close: "\\'" | ||
| }]; | ||
| var TINY_NUM = 0.0000001; | ||
@@ -402,23 +417,64 @@ var DEFAULT_UNIT_PRESETS = { | ||
| function findClosed(closedCharacter, texts, index, length) { | ||
| for (var i = index; i < length; ++i) { | ||
| function isEqualSeparator(character, separator) { | ||
| var isCharacterSpace = character === "" || character == " "; | ||
| var isSeparatorSpace = separator === "" || separator == " "; | ||
| return isSeparatorSpace && isCharacterSpace || character === separator; | ||
| } | ||
| function findOpen(openCharacter, texts, index, length, openCloseCharacters) { | ||
| var isIgnore = findIgnore(openCharacter, texts, index); | ||
| if (!isIgnore) { | ||
| return findClose(openCharacter, texts, index + 1, length, openCloseCharacters); | ||
| } | ||
| return index; | ||
| } | ||
| function findIgnore(character, texts, index) { | ||
| if (!character.ignore) { | ||
| return null; | ||
| } | ||
| var otherText = texts.slice(Math.max(index - 3, 0), index + 3).join(""); | ||
| return new RegExp(character.ignore).exec(otherText); | ||
| } | ||
| function findClose(closeCharacter, texts, index, length, openCloseCharacters) { | ||
| var _loop_1 = function (i) { | ||
| var character = texts[i].trim(); | ||
| if (character === closedCharacter) { | ||
| return i; | ||
| if (character === closeCharacter.close && !findIgnore(closeCharacter, texts, i)) { | ||
| return { | ||
| value: i | ||
| }; | ||
| } | ||
| var nextIndex = i; | ||
| var nextIndex = i; // re open | ||
| if (character === "(") { | ||
| nextIndex = findClosed(")", texts, i + 1, length); | ||
| } else if (OPEN_CLOSED_CHARACTER.indexOf(character) > -1) { | ||
| nextIndex = findClosed(character, texts, i + 1, length); | ||
| var openCharacter = find(openCloseCharacters, function (_a) { | ||
| var open = _a.open; | ||
| return open === character; | ||
| }); | ||
| if (openCharacter) { | ||
| nextIndex = findOpen(openCharacter, texts, i, length, openCloseCharacters); | ||
| } | ||
| if (nextIndex === -1) { | ||
| break; | ||
| return out_i_1 = i, "break"; | ||
| } | ||
| i = nextIndex; | ||
| out_i_1 = i; | ||
| }; | ||
| var out_i_1; | ||
| for (var i = index; i < length; ++i) { | ||
| var state_1 = _loop_1(i); | ||
| i = out_i_1; | ||
| if (typeof state_1 === "object") return state_1.value; | ||
| if (state_1 === "break") break; | ||
| } | ||
@@ -429,4 +485,26 @@ | ||
| function splitText(text, separator) { | ||
| var regexText = "(\\s*" + (separator || ",") + "\\s*|\\(|\\)|\"|'|\\\\\"|\\\\'|\\s+)"; | ||
| function splitText(text, splitOptions) { | ||
| var _a = isString(splitOptions) ? { | ||
| separator: splitOptions | ||
| } : splitOptions, | ||
| _b = _a.separator, | ||
| separator = _b === void 0 ? "," : _b, | ||
| isSeparateFirst = _a.isSeparateFirst, | ||
| isSeparateOnlyOpenClose = _a.isSeparateOnlyOpenClose, | ||
| _c = _a.isSeparateOpenClose, | ||
| isSeparateOpenClose = _c === void 0 ? isSeparateOnlyOpenClose : _c, | ||
| _d = _a.openCloseCharacters, | ||
| openCloseCharacters = _d === void 0 ? OPEN_CLOSED_CHARACTERS : _d; | ||
| var openClosedText = openCloseCharacters.map(function (_a) { | ||
| var open = _a.open, | ||
| close = _a.close; | ||
| if (open === close) { | ||
| return open; | ||
| } | ||
| return open + "|" + close; | ||
| }).join("|"); | ||
| var regexText = "(\\s*" + separator + "\\s*|" + openClosedText + "|\\s+)"; | ||
| var regex = new RegExp(regexText, "g"); | ||
@@ -438,19 +516,51 @@ var texts = text.split(regex).filter(Boolean); | ||
| for (var i = 0; i < length; ++i) { | ||
| function resetTemp() { | ||
| if (tempValues.length) { | ||
| values.push(tempValues.join("")); | ||
| tempValues = []; | ||
| return true; | ||
| } | ||
| return false; | ||
| } | ||
| var _loop_2 = function (i) { | ||
| var character = texts[i].trim(); | ||
| var nextIndex = i; | ||
| var openCharacter = find(openCloseCharacters, function (_a) { | ||
| var open = _a.open; | ||
| return open === character; | ||
| }); | ||
| var closeCharacter = find(openCloseCharacters, function (_a) { | ||
| var close = _a.close; | ||
| return close === character; | ||
| }); | ||
| if (character === "(") { | ||
| nextIndex = findClosed(")", texts, i + 1, length); | ||
| } else if (character === ")") { | ||
| throw new Error("invalid format"); | ||
| } else if (OPEN_CLOSED_CHARACTER.indexOf(character) > -1) { | ||
| nextIndex = findClosed(character, texts, i + 1, length); | ||
| } else if (character === separator) { | ||
| if (tempValues.length) { | ||
| values.push(tempValues.join("")); | ||
| tempValues = []; | ||
| if (openCharacter) { | ||
| nextIndex = findOpen(openCharacter, texts, i, length, openCloseCharacters); | ||
| if (nextIndex !== -1 && isSeparateOpenClose) { | ||
| if (resetTemp() && isSeparateFirst) { | ||
| return out_i_2 = i, "break"; | ||
| } | ||
| values.push(texts.slice(i, nextIndex + 1).join("")); | ||
| i = nextIndex; | ||
| if (isSeparateFirst) { | ||
| return out_i_2 = i, "break"; | ||
| } | ||
| return out_i_2 = i, "continue"; | ||
| } | ||
| } else if (closeCharacter && !findIgnore(closeCharacter, texts, i)) { | ||
| throw new Error("invalid format: " + closeCharacter.close); | ||
| } else if (isEqualSeparator(character, separator) && !isSeparateOnlyOpenClose) { | ||
| resetTemp(); | ||
| continue; | ||
| if (isSeparateFirst) { | ||
| return out_i_2 = i, "break"; | ||
| } | ||
| return out_i_2 = i, "continue"; | ||
| } | ||
@@ -464,2 +574,12 @@ | ||
| i = nextIndex; | ||
| out_i_2 = i; | ||
| }; | ||
| var out_i_2; | ||
| for (var i = 0; i < length; ++i) { | ||
| var state_2 = _loop_2(i); | ||
| i = out_i_2; | ||
| if (state_2 === "break") break; | ||
| } | ||
@@ -488,3 +608,3 @@ | ||
| function splitSpace(text) { | ||
| // divide comma(,) | ||
| // divide comma(space) | ||
| return splitText(text, ""); | ||
@@ -965,3 +1085,12 @@ } | ||
| } | ||
| function counter(num) { | ||
| var nums = []; | ||
| for (var i = 0; i < num; ++i) { | ||
| nums.push(i); | ||
| } | ||
| return nums; | ||
| } | ||
| /** | ||
@@ -1292,3 +1421,3 @@ * @namespace | ||
| export { RGB, RGBA, HSL, HSLA, COLOR_MODELS, FUNCTION, PROPERTY, ARRAY, OBJECT, STRING, NUMBER, UNDEFINED, IS_WINDOW, doc as document, getCrossBrowserProperty, TRANSFORM, FILTER, ANIMATION, KEYFRAMES, OPEN_CLOSED_CHARACTER, TINY_NUM, DEFAULT_UNIT_PRESETS, cutHex, hexToRGBA, toFullHex, hslToRGBA, stringToRGBA, dot, isUndefined, isObject, isArray, isString, isNumber, isFunction, splitText, splitSpace, splitComma, splitBracket, splitUnit, camelize, decamelize, toArray, now, findIndex, find, requestAnimationFrame, cancelAnimationFrame, getKeys, sortOrders, convertUnitSize, between, checkBoundSize, calculateBoundSize, sum, average, getRad, getCenterPoint, getShapeDirection, getDist, throttle, throttleArray, $, hasClass, addClass, removeClass, fromCSS, addEvent, removeEvent }; | ||
| export { RGB, RGBA, HSL, HSLA, COLOR_MODELS, FUNCTION, PROPERTY, ARRAY, OBJECT, STRING, NUMBER, UNDEFINED, IS_WINDOW, doc as document, getCrossBrowserProperty, TRANSFORM, FILTER, ANIMATION, KEYFRAMES, OPEN_CLOSED_CHARACTERS, TINY_NUM, DEFAULT_UNIT_PRESETS, cutHex, hexToRGBA, toFullHex, hslToRGBA, stringToRGBA, dot, isUndefined, isObject, isArray, isString, isNumber, isFunction, splitText, splitSpace, splitComma, splitBracket, splitUnit, camelize, decamelize, toArray, now, findIndex, find, requestAnimationFrame, cancelAnimationFrame, getKeys, sortOrders, convertUnitSize, between, checkBoundSize, calculateBoundSize, sum, average, getRad, getCenterPoint, getShapeDirection, getDist, throttle, throttleArray, counter, $, hasClass, addClass, removeClass, fromCSS, addEvent, removeEvent }; | ||
| //# sourceMappingURL=utils.esm.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"utils.esm.js","sources":["../src/consts.ts","../src/utils.ts","../src/color.ts","../src/dom.ts"],"sourcesContent":["/**\n* @namespace\n* @name Consts\n*/\n\nimport { IObject } from \"./types\";\n\n/**\n* get string \"rgb\"\n* @memberof Color\n* @example\nimport {RGB} from \"@daybrush/utils\";\n\nconsole.log(RGB); // \"rgb\"\n*/\nexport const RGB = \"rgb\";\n/**\n* get string \"rgba\"\n* @memberof Color\n* @example\nimport {RGBA} from \"@daybrush/utils\";\n\nconsole.log(RGBA); // \"rgba\"\n*/\nexport const RGBA = \"rgba\";\n/**\n* get string \"hsl\"\n* @memberof Color\n* @example\nimport {HSL} from \"@daybrush/utils\";\n\nconsole.log(HSL); // \"hsl\"\n*/\nexport const HSL = \"hsl\";\n/**\n* get string \"hsla\"\n* @memberof Color\n* @example\nimport {HSLA} from \"@daybrush/utils\";\n\nconsole.log(HSLA); // \"hsla\"\n*/\nexport const HSLA = \"hsla\";\n/**\n* gets an array of color models.\n* @memberof Color\n* @example\nimport {COLOR_MODELS} from \"@daybrush/utils\";\n\nconsole.log(COLOR_MODELS); // [\"rgb\", \"rgba\", \"hsl\", \"hsla\"];\n*/\nexport const COLOR_MODELS = [RGB, RGBA, HSL, HSLA];\n\n/**\n* get string \"function\"\n* @memberof Consts\n* @example\nimport {FUNCTION} from \"@daybrush/utils\";\n\nconsole.log(FUNCTION); // \"function\"\n*/\nexport const FUNCTION = \"function\";\n/**\n* get string \"property\"\n* @memberof Consts\n* @example\nimport {PROPERTY} from \"@daybrush/utils\";\n\nconsole.log(PROPERTY); // \"property\"\n*/\nexport const PROPERTY = \"property\";\n/**\n* get string \"array\"\n* @memberof Consts\n* @example\nimport {ARRAY} from \"@daybrush/utils\";\n\nconsole.log(ARRAY); // \"array\"\n*/\nexport const ARRAY = \"array\";\n/**\n* get string \"object\"\n* @memberof Consts\n* @example\nimport {OBJECT} from \"@daybrush/utils\";\n\nconsole.log(OBJECT); // \"object\"\n*/\nexport const OBJECT = \"object\";\n/**\n* get string \"string\"\n* @memberof Consts\n* @example\nimport {STRING} from \"@daybrush/utils\";\n\nconsole.log(STRING); // \"string\"\n*/\nexport const STRING = \"string\";\n/**\n* get string \"number\"\n* @memberof Consts\n* @example\nimport {NUMBER} from \"@daybrush/utils\";\n\nconsole.log(NUMBER); // \"number\"\n*/\nexport const NUMBER = \"number\";\n/**\n* get string \"undefined\"\n* @memberof Consts\n* @example\nimport {UNDEFINED} from \"@daybrush/utils\";\n\nconsole.log(UNDEFINED); // \"undefined\"\n*/\nexport const UNDEFINED = \"undefined\";\n\n/**\n* Check whether the environment is window or node.js.\n* @memberof Consts\n* @example\nimport {IS_WINDOW} from \"@daybrush/utils\";\n\nconsole.log(IS_WINDOW); // false in node.js\nconsole.log(IS_WINDOW); // true in browser\n*/\nexport const IS_WINDOW = typeof window !== UNDEFINED;\n\n/**\n* Check whether the environment is window or node.js.\n* @memberof Consts\n* @name document\n* @example\nimport {IS_WINDOW} from \"@daybrush/utils\";\n\nconsole.log(IS_WINDOW); // false in node.js\nconsole.log(IS_WINDOW); // true in browser\n*/\nconst doc = (typeof document !== UNDEFINED && document) as Document; // FIXME: this type maybe false\n\nexport {doc as document};\n\nconst prefixes: string[] = [\"webkit\", \"ms\", \"moz\", \"o\"];\n\n/**\n * @namespace CrossBrowser\n */\n\n/**\n* Get a CSS property with a vendor prefix that supports cross browser.\n* @function\n* @param {string} property - A CSS property\n* @return {string} CSS property with cross-browser vendor prefix\n* @memberof CrossBrowser\n* @example\nimport {getCrossBrowserProperty} from \"@daybrush/utils\";\n\nconsole.log(getCrossBrowserProperty(\"transform\")); // \"transform\", \"-ms-transform\", \"-webkit-transform\"\nconsole.log(getCrossBrowserProperty(\"filter\")); // \"filter\", \"-webkit-filter\"\n*/\nexport const getCrossBrowserProperty = /*#__PURE__*/(property: string) => {\n if (!doc) {\n return \"\";\n }\n const styles = (doc.body || doc.documentElement).style as any;\n const length = prefixes.length;\n\n if (typeof styles[property] !== UNDEFINED) {\n return property;\n }\n for (let i = 0; i < length; ++i) {\n const name = `-${prefixes[i]}-${property}`;\n\n if (typeof styles[name] !== UNDEFINED) {\n return name;\n }\n }\n return \"\";\n};\n\n/**\n* get string \"transfrom\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {TRANSFORM} from \"@daybrush/utils\";\n\nconsole.log(TRANSFORM); // \"transform\", \"-ms-transform\", \"-webkit-transform\"\n*/\nexport const TRANSFORM = /*#__PURE__*/getCrossBrowserProperty(\"transform\");\n/**\n* get string \"filter\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {FILTER} from \"@daybrush/utils\";\n\nconsole.log(FILTER); // \"filter\", \"-ms-filter\", \"-webkit-filter\"\n*/\nexport const FILTER = /*#__PURE__*/getCrossBrowserProperty(\"filter\");\n/**\n* get string \"animation\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {ANIMATION} from \"@daybrush/utils\";\n\nconsole.log(ANIMATION); // \"animation\", \"-ms-animation\", \"-webkit-animation\"\n*/\nexport const ANIMATION = /*#__PURE__*/getCrossBrowserProperty(\"animation\");\n/**\n* get string \"keyframes\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {KEYFRAMES} from \"@daybrush/utils\";\n\nconsole.log(KEYFRAMES); // \"keyframes\", \"-ms-keyframes\", \"-webkit-keyframes\"\n*/\nexport const KEYFRAMES = /*#__PURE__*/ANIMATION.replace(\"animation\", \"keyframes\");\n\nexport const OPEN_CLOSED_CHARACTER = [`\"`, `'`, `\\\\\"`, `\\\\'`];\nexport const TINY_NUM = 0.0000001;\nexport const DEFAULT_UNIT_PRESETS: IObject<(pos: number, size?: number) => number> = {\n \"cm\": pos => pos * 96 / 2.54,\n \"mm\": pos => pos * 96 / 254,\n \"in\": pos => pos * 96,\n \"pt\": pos => pos * 96 / 72,\n \"pc\": pos => pos * 96 / 6,\n \"%\": (pos, size) => pos * size! / 100,\n \"vw\": (pos, size = window.innerWidth) => pos / 100 * size,\n \"vh\": (pos, size = window.innerHeight) => pos / 100 * size,\n \"vmax\": (pos, size = Math.max(window.innerWidth, window.innerHeight)) => pos / 100 * size,\n \"vmin\": (pos, size = Math.min(window.innerWidth, window.innerHeight)) => pos / 100 * size,\n};\n","import {\n UNDEFINED, STRING,\n OBJECT, FUNCTION,\n IS_WINDOW, OPEN_CLOSED_CHARACTER, NUMBER,\n DEFAULT_UNIT_PRESETS,\n TINY_NUM\n} from \"./consts\";\nimport { IArrayFormat, IObject } from \"./types\";\n/**\n* @namespace\n* @name Utils\n*/\n\n/**\n * Returns the inner product of two numbers(`a1`, `a2`) by two criteria(`b1`, `b2`).\n * @memberof Utils\n * @param - The first number\n * @param - The second number\n * @param - The first number to base on the inner product\n * @param - The second number to base on the inner product\n * @return - Returns the inner product\nimport { dot } from \"@daybrush/utils\";\n\nconsole.log(dot(0, 15, 2, 3)); // 6\nconsole.log(dot(5, 15, 2, 3)); // 9\nconsole.log(dot(5, 15, 1, 1)); // 10\n */\nexport function dot(a1: number, a2: number, b1: number, b2: number) {\n return (a1 * b2 + a2 * b1) / (b1 + b2);\n}\n/**\n* Check the type that the value is undefined.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {boolean} true if the type is correct, false otherwise\n* @example\nimport {isUndefined} from \"@daybrush/utils\";\n\nconsole.log(isUndefined(undefined)); // true\nconsole.log(isUndefined(\"\")); // false\nconsole.log(isUndefined(1)); // false\nconsole.log(isUndefined(null)); // false\n*/\nexport function isUndefined(value: any): value is undefined {\n return (typeof value === UNDEFINED);\n}\n/**\n* Check the type that the value is object.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isObject} from \"@daybrush/utils\";\n\nconsole.log(isObject({})); // true\nconsole.log(isObject(undefined)); // false\nconsole.log(isObject(\"\")); // false\nconsole.log(isObject(null)); // false\n*/\nexport function isObject(value: any): value is IObject<any> {\n return value && (typeof value === OBJECT);\n}\n/**\n* Check the type that the value is isArray.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isArray} from \"@daybrush/utils\";\n\nconsole.log(isArray([])); // true\nconsole.log(isArray({})); // false\nconsole.log(isArray(undefined)); // false\nconsole.log(isArray(null)); // false\n*/\nexport function isArray(value: any): value is any[] {\n return Array.isArray(value);\n}\n/**\n* Check the type that the value is string.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isString} from \"@daybrush/utils\";\n\nconsole.log(isString(\"1234\")); // true\nconsole.log(isString(undefined)); // false\nconsole.log(isString(1)); // false\nconsole.log(isString(null)); // false\n*/\nexport function isString(value: any): value is string {\n return typeof value === STRING;\n}\n\nexport function isNumber(value: any): value is number {\n return typeof value === NUMBER;\n}\n\n/**\n* Check the type that the value is function.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isFunction} from \"@daybrush/utils\";\n\nconsole.log(isFunction(function a() {})); // true\nconsole.log(isFunction(() => {})); // true\nconsole.log(isFunction(\"1234\")); // false\nconsole.log(isFunction(1)); // false\nconsole.log(isFunction(null)); // false\n*/\nexport function isFunction(value: any): value is (...args: any[]) => any {\n return typeof value === FUNCTION;\n}\n\nfunction findClosed(closedCharacter: string, texts: string[], index: number, length: number) {\n for (let i = index; i < length; ++i) {\n const character = texts[i].trim();\n\n if (character === closedCharacter) {\n return i;\n }\n let nextIndex = i;\n if (character === \"(\") {\n nextIndex = findClosed(\")\", texts, i + 1, length);\n } else if (OPEN_CLOSED_CHARACTER.indexOf(character) > -1) {\n nextIndex = findClosed(character, texts, i + 1, length);\n }\n if (nextIndex === -1) {\n break;\n }\n i = nextIndex;\n }\n return -1;\n}\nexport function splitText(text: string, separator: string) {\n const regexText = `(\\\\s*${separator || \",\"}\\\\s*|\\\\(|\\\\)|\"|'|\\\\\\\\\"|\\\\\\\\'|\\\\s+)`;\n const regex = new RegExp(regexText, \"g\");\n const texts = text.split(regex).filter(Boolean);\n const length = texts.length;\n const values: string[] = [];\n let tempValues: string[] = [];\n\n for (let i = 0; i < length; ++i) {\n const character = texts[i].trim();\n let nextIndex = i;\n\n if (character === \"(\") {\n nextIndex = findClosed(\")\", texts, i + 1, length);\n } else if (character === \")\") {\n throw new Error(\"invalid format\");\n } else if (OPEN_CLOSED_CHARACTER.indexOf(character) > -1) {\n nextIndex = findClosed(character, texts, i + 1, length);\n } else if (character === separator) {\n if (tempValues.length) {\n values.push(tempValues.join(\"\"));\n tempValues = [];\n }\n continue;\n }\n\n if (nextIndex === -1) {\n nextIndex = length - 1;\n }\n tempValues.push(texts.slice(i, nextIndex + 1).join(\"\"));\n i = nextIndex;\n }\n if (tempValues.length) {\n values.push(tempValues.join(\"\"));\n }\n return values;\n}\n\n/**\n* divide text by space.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {Array} divided texts\n* @example\nimport {spliceSpace} from \"@daybrush/utils\";\n\nconsole.log(splitSpace(\"a b c d e f g\"));\n// [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\"]\nconsole.log(splitSpace(\"'a,b' c 'd,e' f g\"));\n// [\"'a,b'\", \"c\", \"'d,e'\", \"f\", \"g\"]\n*/\nexport function splitSpace(text: string) {\n // divide comma(,)\n return splitText(text, \"\");\n}\n\n/**\n* divide text by comma.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {Array} divided texts\n* @example\nimport {splitComma} from \"@daybrush/utils\";\n\nconsole.log(splitComma(\"a,b,c,d,e,f,g\"));\n// [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\"]\nconsole.log(splitComma(\"'a,b',c,'d,e',f,g\"));\n// [\"'a,b'\", \"c\", \"'d,e'\", \"f\", \"g\"]\n*/\nexport function splitComma(text: string): string[] {\n // divide comma(,)\n // \"[^\"]*\"|'[^']*'\n return splitText(text, \",\");\n}\n/**\n* divide text by bracket \"(\", \")\".\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {object} divided texts\n* @example\nimport {splitBracket} from \"@daybrush/utils\";\n\nconsole.log(splitBracket(\"a(1, 2)\"));\n// {prefix: \"a\", value: \"1, 2\", suffix: \"\"}\nconsole.log(splitBracket(\"a(1, 2)b\"));\n// {prefix: \"a\", value: \"1, 2\", suffix: \"b\"}\n*/\nexport function splitBracket(text: string) {\n const matches = (/([^(]*)\\(([\\s\\S]*)\\)([\\s\\S]*)/g).exec(text);\n\n if (!matches || matches.length < 4) {\n return {};\n } else {\n return { prefix: matches[1], value: matches[2], suffix: matches[3] };\n }\n}\n/**\n* divide text by number and unit.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {} divided texts\n* @example\nimport {splitUnit} from \"@daybrush/utils\";\n\nconsole.log(splitUnit(\"10px\"));\n// {prefix: \"\", value: 10, unit: \"px\"}\nconsole.log(splitUnit(\"-10px\"));\n// {prefix: \"\", value: -10, unit: \"px\"}\nconsole.log(splitUnit(\"a10%\"));\n// {prefix: \"a\", value: 10, unit: \"%\"}\n*/\nexport function splitUnit(text: string): { prefix: string, unit: string, value: number } {\n const matches = /^([^\\d|e|\\-|\\+]*)((?:\\d|\\.|-|e-|e\\+)+)(\\S*)$/g.exec(text);\n\n if (!matches) {\n return { prefix: \"\", unit: \"\", value: NaN };\n }\n const prefix = matches[1];\n const value = matches[2];\n const unit = matches[3];\n\n return { prefix, unit, value: parseFloat(value) };\n}\n\n/**\n* transform strings to camel-case\n* @memberof Utils\n* @param {String} text - string\n* @return {String} camel-case string\n* @example\nimport {camelize} from \"@daybrush/utils\";\n\nconsole.log(camelize(\"transform-origin\")); // transformOrigin\nconsole.log(camelize(\"abcd_efg\")); // abcdEfg\nconsole.log(camelize(\"abcd efg\")); // abcdEfg\n*/\nexport function camelize(str: string) {\n return str.replace(/[\\s-_]([a-z])/g, (all, letter) => letter.toUpperCase());\n}\n/**\n* transform a camelized string into a lowercased string.\n* @memberof Utils\n* @param {string} text - a camel-cased string\n* @param {string} [separator=\"-\"] - a separator\n* @return {string} a lowercased string\n* @example\nimport {decamelize} from \"@daybrush/utils\";\n\nconsole.log(decamelize(\"transformOrigin\")); // transform-origin\nconsole.log(decamelize(\"abcdEfg\", \"_\")); // abcd_efg\n*/\nexport function decamelize(str: string, separator: string = \"-\") {\n return str.replace(/([a-z])([A-Z])/g, (all, letter, letter2) => `${letter}${separator}${letter2.toLowerCase()}`);\n}\n\n/**\n* transforms something in an array into an array.\n* @memberof Utils\n* @param - Array form\n* @return an array\n* @example\nimport {toArray} from \"@daybrush/utils\";\n\nconst arr1 = toArray(document.querySelectorAll(\".a\")); // Element[]\nconst arr2 = toArray(document.querySelectorAll<HTMLElement>(\".a\")); // HTMLElement[]\n*/\nexport function toArray<T>(value: IArrayFormat<T>): T[] {\n return [].slice.call(value);\n}\n\n/**\n* Date.now() method\n* @memberof CrossBrowser\n* @return {number} milliseconds\n* @example\nimport {now} from \"@daybrush/utils\";\n\nconsole.log(now()); // 12121324241(milliseconds)\n*/\nexport function now() {\n return Date.now ? Date.now() : new Date().getTime();\n}\n\n/**\n* Returns the index of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `findIndex` was called upon.\n* @param - A function to execute on each value in the array until the function returns true, indicating that the satisfying element was found.\n* @param - Returns defaultIndex if not found by the function.\n* @example\nimport { findIndex } from \"@daybrush/utils\";\n\nfindIndex([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // 1\n*/\nexport function findIndex<T>(\n arr: T[],\n callback: (element: T, index: number, arr: T[]) => any,\n defaultIndex: number = -1,\n): number {\n const length = arr.length;\n\n for (let i = 0; i < length; ++i) {\n if (callback(arr[i], i, arr)) {\n return i;\n }\n }\n return defaultIndex;\n}\n\n/**\n* Returns the value of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `find` was called upon.\n* @param - A function to execute on each value in the array,\n* @param - Returns defalutValue if not found by the function.\n* @example\nimport { find } from \"@daybrush/utils\";\n\nfind([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // {a: 2}\n*/\nexport function find<T>(\n arr: T[],\n callback: (element: T, index: number, arr: T[]) => any,\n defalutValue?: T,\n): T | undefined {\n const index = findIndex(arr, callback);\n\n return index > - 1 ? arr[index] : defalutValue;\n}\n\n/**\n* window.requestAnimationFrame() method with cross browser.\n* @function\n* @memberof CrossBrowser\n* @param {FrameRequestCallback} callback - The function to call when it's time to update your animation for the next repaint.\n* @return {number} id\n* @example\nimport {requestAnimationFrame} from \"@daybrush/utils\";\n\nrequestAnimationFrame((timestamp) => {\n console.log(timestamp);\n});\n*/\nexport const requestAnimationFrame = /*#__PURE__*/(() => {\n const firstTime = now();\n const raf = IS_WINDOW\n && (window.requestAnimationFrame || window.webkitRequestAnimationFrame\n || (window as any).mozRequestAnimationFrame || (window as any).msRequestAnimationFrame);\n\n return raf ? (raf.bind(window) as (callback: FrameRequestCallback) => number) : ((callback: FrameRequestCallback) => {\n const currTime = now();\n const id = window.setTimeout(() => {\n callback(currTime - firstTime);\n }, 1000 / 60);\n return id;\n });\n})();\n\n/**\n* window.cancelAnimationFrame() method with cross browser.\n* @function\n* @memberof CrossBrowser\n* @param {number} handle - the id obtained through requestAnimationFrame method\n* @return {void}\n* @example\nimport { requestAnimationFrame, cancelAnimationFrame } from \"@daybrush/utils\";\n\nconst id = requestAnimationFrame((timestamp) => {\n console.log(timestamp);\n});\n\ncancelAnimationFrame(id);\n*/\nexport const cancelAnimationFrame = /*#__PURE__*/(() => {\n const caf = IS_WINDOW\n && (window.cancelAnimationFrame || window.webkitCancelAnimationFrame\n || (window as any).mozCancelAnimationFrame || (window as any).msCancelAnimationFrame);\n\n return caf\n ? caf.bind(window) as (handle: number) => void\n : ((handle: number) => { clearTimeout(handle); });\n})();\n/**\n* @function\n* @memberof Utils\n*/\nexport function getKeys(obj: IObject<any>): string[] {\n if (Object.keys) {\n return Object.keys(obj);\n }\n const keys: string[] = [];\n for (const name in keys) {\n keys.push(name);\n }\n return keys;\n}\n\n/**\n* @function\n* @memberof Utils\n*/\nexport function sortOrders(keys: Array<string | number>, orders: Array<string | number> = []) {\n keys.sort((a, b) => {\n const index1 = orders.indexOf(a);\n const index2 = orders.indexOf(b);\n\n if (index2 === -1 && index1 === -1) {\n return 0;\n }\n if (index1 === -1) {\n return 1;\n }\n if (index2 === -1) {\n return -1;\n }\n return index1 - index2;\n });\n}\n\n/**\n* convert unit size to px size\n* @function\n* @memberof Utils\n*/\nexport function convertUnitSize(pos: string, size: number | IObject<((pos: number) => number) | number>) {\n const { value, unit } = splitUnit(pos);\n\n if (isObject(size)) {\n const sizeFunction = size[unit];\n if (sizeFunction) {\n if (isFunction(sizeFunction)) {\n return sizeFunction(value);\n } else if (DEFAULT_UNIT_PRESETS[unit]) {\n return DEFAULT_UNIT_PRESETS[unit](value, sizeFunction);\n }\n }\n } else if (unit === \"%\") {\n return value * size / 100;\n }\n if (DEFAULT_UNIT_PRESETS[unit]) {\n return DEFAULT_UNIT_PRESETS[unit](value);\n }\n return value;\n}\n\n/**\n* calculate between min, max\n* @function\n* @memberof Utils\n*/\nexport function between(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(value, max));\n}\n\nexport function checkBoundSize(targetSize: number[], compareSize: number[], isMax: boolean) {\n return [\n [throttle(compareSize[0], TINY_NUM), throttle(compareSize[0] * targetSize[1] / targetSize[0], TINY_NUM)],\n [throttle(compareSize[1] * targetSize[0] / targetSize[1], TINY_NUM), throttle(compareSize[1], TINY_NUM)],\n ].filter(size => size.every((value, i) => {\n return isMax ? value <= compareSize[i] : value >= compareSize[i];\n }))[0] || targetSize;\n}\n\n/**\n* calculate bound size\n* @function\n* @memberof Utils\n*/\nexport function calculateBoundSize(\n size: number[], minSize: number[],\n maxSize: number[], keepRatio?: boolean,\n): number[] {\n if (!keepRatio) {\n return size.map((value, i) => between(value, minSize[i], maxSize[i]));\n }\n let [width, height] = size;\n // width : height = minWidth : minHeight;\n const [minWidth, minHeight] = checkBoundSize(size, minSize, false);\n const [maxWidth, maxHeight] = checkBoundSize(size, maxSize, true);\n\n if (width < minWidth || height < minHeight) {\n width = minWidth;\n height = minHeight;\n } else if (width > maxWidth || height > maxHeight) {\n width = maxWidth;\n height = maxHeight;\n }\n return [width, height];\n}\n\n\n/**\n* Add all the numbers.\n* @function\n* @memberof Utils\n*/\nexport function sum(nums: number[]): number {\n const length = nums.length;\n let total = 0;\n\n for (let i = length - 1; i >= 0; --i) {\n total += nums[i];\n }\n return total;\n}\n\n/**\n* Average all numbers.\n* @function\n* @memberof Utils\n*/\nexport function average(nums: number[]) {\n const length = nums.length;\n let total = 0;\n\n for (let i = length - 1; i >= 0; --i) {\n total += nums[i];\n }\n return length ? total / length : 0;\n}\n/**\n* Get the angle of two points. (0 <= rad < 359)\n* @function\n* @memberof Utils\n*/\nexport function getRad(pos1: number[], pos2: number[]): number {\n const distX = pos2[0] - pos1[0];\n const distY = pos2[1] - pos1[1];\n const rad = Math.atan2(distY, distX);\n\n return rad >= 0 ? rad : rad + Math.PI * 2;\n}\n/**\n* Get the average point of all points.\n* @function\n* @memberof Utils\n*/\nexport function getCenterPoint(points: number[][]): number[] {\n return [0, 1].map(i => average(points.map(pos => pos[i])));\n}\n/**\n* Gets the direction of the shape.\n* @function\n* @memberof Utils\n*/\nexport function getShapeDirection(points: number[][]): 1 | -1 {\n const center = getCenterPoint(points);\n const pos1Rad = getRad(center, points[0]);\n const pos2Rad = getRad(center, points[1]);\n\n return (pos1Rad < pos2Rad && pos2Rad - pos1Rad < Math.PI) || (pos1Rad > pos2Rad && pos2Rad - pos1Rad < -Math.PI)\n ? 1 : -1;\n}\n\n/**\n* Get the distance between two points.\n* @function\n* @memberof Utils\n*/\nexport function getDist(a: number[], b?: number[]) {\n return Math.sqrt(Math.pow((b ? b[0] : 0) - a[0], 2) + Math.pow((b ? b[1] : 0) - a[1], 2));\n}\n\n/**\n* throttle number depending on the unit.\n* @function\n* @memberof Utils\n*/\nexport function throttle(num: number, unit?: number) {\n if (!unit) {\n return num;\n }\n return Math.round(num / unit) * unit;\n}\n\n/**\n* throttle number array depending on the unit.\n* @function\n* @memberof Utils\n*/\nexport function throttleArray(nums: number[], unit?: number) {\n nums.forEach((_, i) => {\n nums[i] = throttle(nums[i], unit);\n });\n return nums;\n}\n","import { RGB, RGBA, HSL, HSLA } from \"./consts\";\nimport { splitBracket, splitComma } from \"./utils\";\n\n/**\n* @namespace\n* @name Color\n*/\n\n/**\n* Remove the # from the hex color.\n* @memberof Color\n* @param {} hex - hex color\n* @return {} hex color\n* @example\nimport {cutHex} from \"@daybrush/utils\";\n\nconsole.log(cutHex(\"#000000\")) // \"000000\"\n*/\nexport function cutHex(hex: string) {\n return hex.replace(\"#\", \"\");\n}\n/**\n* convert hex color to rgb color.\n* @memberof Color\n* @param {} hex - hex color\n* @return {} rgb color\n* @example\nimport {hexToRGBA} from \"@daybrush/utils\";\n\nconsole.log(hexToRGBA(\"#00000005\"));\n// [0, 0, 0, 1]\nconsole.log(hexToRGBA(\"#201045\"));\n// [32, 16, 69, 1]\n*/\nexport function hexToRGBA(hex: string): [number, number, number, number] {\n const h = cutHex(hex);\n const r = parseInt(h.substring(0, 2), 16);\n const g = parseInt(h.substring(2, 4), 16);\n const b = parseInt(h.substring(4, 6), 16);\n let a = parseInt(h.substring(6, 8), 16) / 255;\n\n if (isNaN(a)) {\n a = 1;\n }\n return [r, g, b, a];\n}\n\n/**\n* convert 3(or 4)-digit hex color to 6(or 8)-digit hex color.\n* @memberof Color\n* @param {} hex - 3(or 4)-digit hex color\n* @return {} 6(or 8)-digit hex color\n* @example\nimport {toFullHex} from \"@daybrush/utils\";\n\nconsole.log(toFullHex(\"#123\")); // \"#112233\"\nconsole.log(toFullHex(\"#123a\")); // \"#112233aa\"\n*/\nexport function toFullHex(h: string): string {\n const r = h.charAt(1);\n const g = h.charAt(2);\n const b = h.charAt(3);\n const a = h.charAt(4);\n const arr = [\"#\", r, r, g, g, b, b, a, a];\n\n return arr.join(\"\");\n}\n/**\n* convert hsl color to rgba color.\n* @memberof Color\n* @param {} hsl - hsl color(hue: 0 ~ 360, saturation: 0 ~ 1, lightness: 0 ~ 1, alpha: 0 ~ 1)\n* @return {} rgba color\n* @example\nimport {hslToRGBA} from \"@daybrush/utils\";\n\nconsole.log(hslToRGBA([150, 0.5, 0.4]));\n// [51, 153, 102, 1]\n*/\nexport function hslToRGBA(hsl: readonly [number, number, number, number?]): [number, number, number, number] {\n let h = hsl[0];\n const s = hsl[1];\n const l = hsl[2];\n\n if (h < 0) {\n h += Math.floor((Math.abs(h) + 360) / 360) * 360;\n }\n h %= 360;\n\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs((h / 60) % 2 - 1));\n const m = l - c / 2;\n let rgb: [number, number, number];\n\n if (h < 60) {\n rgb = [c, x, 0];\n } else if (h < 120) {\n rgb = [x, c, 0];\n } else if (h < 180) {\n rgb = [0, c, x];\n } else if (h < 240) {\n rgb = [0, x, c];\n } else if (h < 300) {\n rgb = [x, 0, c];\n } else if (h < 360) {\n rgb = [c, 0, x];\n } else {\n rgb = [0, 0, 0];\n }\n\n return [\n Math.round((rgb[0] + m) * 255),\n Math.round((rgb[1] + m) * 255),\n Math.round((rgb[2] + m) * 255),\n hsl[3] ?? 1,\n ];\n}\n/**\n* convert string to rgba color.\n* @memberof Color\n* @param {} - 3-hex(#000), 4-hex(#0000) 6-hex(#000000), 8-hex(#00000000) or RGB(A), or HSL(A)\n* @return {} rgba color\n* @example\nimport {stringToRGBA} from \"@daybrush/utils\";\n\nconsole.log(stringToRGBA(\"#000000\")); // [0, 0, 0, 1]\nconsole.log(stringToRGBA(\"rgb(100, 100, 100)\")); // [100, 100, 100, 1]\nconsole.log(stringToRGBA(\"hsl(150, 0.5, 0.4)\")); // [51, 153, 102, 1]\n*/\nexport function stringToRGBA(color: string): [number, number, number, number] {\n if (color.charAt(0) === \"#\") {\n if (color.length === 4 || color.length === 5) {\n return hexToRGBA(toFullHex(color));\n } else {\n return hexToRGBA(color);\n }\n } else if (color.indexOf(\"(\") !== -1) {\n // in bracket.\n const {prefix, value} = splitBracket(color);\n\n if (!prefix || !value) {\n return undefined as never;\n }\n const arr = splitComma(value);\n const colorArr: [number, number, number, number] = [0, 0, 0, 1];\n const length = arr.length;\n\n switch (prefix) {\n case RGB:\n case RGBA:\n for (let i = 0; i < length; ++i) {\n colorArr[i] = parseFloat(arr[i]);\n }\n return colorArr;\n case HSL:\n case HSLA:\n for (let i = 0; i < length; ++i) {\n if (arr[i].indexOf(\"%\") !== -1) {\n colorArr[i] = parseFloat(arr[i]) / 100;\n } else {\n colorArr[i] = parseFloat(arr[i]);\n }\n }\n // hsl, hsla to rgba\n return hslToRGBA(colorArr);\n }\n }\n return undefined as never;\n}\n","import { document } from \"./consts\";\nimport { IObject, IEventMap } from \"./types\";\n\n/**\n * @namespace DOM\n */\n\nexport function $<K extends keyof HTMLElementTagNameMap>(selectors: K, multi: true):\n NodeListOf<HTMLElementTagNameMap[K]>;\nexport function $<K extends keyof SVGElementTagNameMap>(selectors: K, multi: true): NodeListOf<SVGElementTagNameMap[K]>;\nexport function $<E extends Element = Element>(selectors: string, multi: true): NodeListOf<E>;\n\nexport function $<K extends keyof HTMLElementTagNameMap>(selectors: K, multi?: false): HTMLElementTagNameMap[K] | null;\nexport function $<K extends keyof SVGElementTagNameMap>(selectors: K, multi?: false): SVGElementTagNameMap[K] | null;\nexport function $<E extends Element = Element>(selectors: string, multi?: false): E | null;\n/**\n * Returns all element descendants of node that\n * match selectors.\n */\n\n/**\n * Checks if the specified class value exists in the element's class attribute.\n * @memberof DOM\n * @param - A DOMString containing one or more selectors to match\n * @param - If multi is true, a DOMString containing one or more selectors to match against.\n * @example\nimport {$} from \"@daybrush/utils\";\n\nconsole.log($(\"div\")); // div element\nconsole.log($(\"div\", true)); // [div, div] elements\n*/\nexport function $<E extends Element = Element>(selectors: string, multi?: boolean): E | NodeListOf<E> | null {\n return multi ? document.querySelectorAll<E>(selectors) : document.querySelector<E>(selectors);\n}\n\n/**\n* Checks if the specified class value exists in the element's class attribute.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to search\n* @return {boolean} return false if the class is not found.\n* @example\nimport {hasClass} from \"@daybrush/utils\";\n\nconsole.log(hasClass(element, \"start\")); // true or false\n*/\nexport function hasClass(element: Element, className: string) {\n if (element.classList) {\n return element.classList.contains(className);\n }\n return !!element.className.match(new RegExp(`(\\\\s|^)${className}(\\\\s|$)`));\n}\n\n/**\n* Add the specified class value. If these classe already exist in the element's class attribute they are ignored.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to add\n* @example\nimport {addClass} from \"@daybrush/utils\";\n\naddClass(element, \"start\");\n*/\nexport function addClass(element: Element, className: string) {\n if (element.classList) {\n element.classList.add(className);\n } else {\n element.className += ` ${className}`;\n }\n}\n\n/**\n* Removes the specified class value.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to remove\n* @example\nimport {removeClass} from \"@daybrush/utils\";\n\nremoveClass(element, \"start\");\n*/\nexport function removeClass(element: Element, className: string) {\n if (element.classList) {\n element.classList.remove(className);\n } else {\n const reg = new RegExp(`(\\\\s|^)${className}(\\\\s|$)`);\n\n element.className = element.className.replace(reg, \" \");\n }\n}\n\n/**\n* Gets the CSS properties from the element.\n* @memberof DOM\n* @param elements - elements\n* @param properites - the CSS properties\n* @return returns CSS properties and values.\n* @example\nimport {fromCSS} from \"@daybrush/utils\";\n\nconsole.log(fromCSS(element, [\"left\", \"opacity\", \"top\"])); // {\"left\": \"10px\", \"opacity\": 1, \"top\": \"10px\"}\n*/\nexport function fromCSS(\n elements: Element | Element[] | NodeListOf<Element>, properties: string[]): IObject<any> {\n if (!elements || !properties || !properties.length) {\n return {};\n }\n let element;\n\n if (elements instanceof Element) {\n element = elements;\n } else if (elements.length) {\n element = elements[0];\n } else {\n return {};\n }\n const cssObject: IObject<any> = {};\n const styles = window.getComputedStyle(element) as any;\n const length = properties.length;\n\n for (let i = 0; i < length; ++i) {\n cssObject[properties[i]] = styles[properties[i]];\n }\n return cssObject;\n}\n\nexport function addEvent<K extends keyof IEventMap>(\n el: EventTarget, type: K, listener: (e: IEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;\n/**\n* Sets up a function that will be called whenever the specified event is delivered to the target\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The object which receives a notification (an object that implements the Event interface) when an event of the specified type occurs\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent} from \"@daybrush/utils\";\n\naddEvent(el, \"click\", e => {\n console.log(e);\n});\n*/\nexport function addEvent(\n el: EventTarget,\n type: string, listener: (e: Event) => void,\n options?: boolean | AddEventListenerOptions) {\n el.addEventListener(type, listener, options);\n}\n\nexport function removeEvent<K extends keyof IEventMap>(\n el: EventTarget, type: K, listener: (e: IEventMap[K]) => void, options?: boolean | EventListenerOptions): void;\n/**\n* removes from the EventTarget an event listener previously registered with EventTarget.addEventListener()\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The EventListener function of the event handler to remove from the event target.\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent, removeEvent} from \"@daybrush/utils\";\nconst listener = e => {\n console.log(e);\n};\naddEvent(el, \"click\", listener);\nremoveEvent(el, \"click\", listener);\n*/\nexport function removeEvent(\n el: EventTarget, type: string,\n listener: (e: Event) => void,\n options?: boolean | EventListenerOptions,\n) {\n el.removeEventListener(type, listener, options);\n}\n"],"names":["RGB","RGBA","HSL","HSLA","COLOR_MODELS","FUNCTION","PROPERTY","ARRAY","OBJECT","STRING","NUMBER","UNDEFINED","IS_WINDOW","window","doc","document","prefixes","getCrossBrowserProperty","property","styles","body","documentElement","style","length","i","name","TRANSFORM","FILTER","ANIMATION","KEYFRAMES","replace","OPEN_CLOSED_CHARACTER","TINY_NUM","DEFAULT_UNIT_PRESETS","pos","size","innerWidth","innerHeight","Math","max","min","dot","a1","a2","b1","b2","isUndefined","value","isObject","isArray","Array","isString","isNumber","isFunction","findClosed","closedCharacter","texts","index","character","trim","nextIndex","indexOf","splitText","text","separator","regexText","regex","RegExp","split","filter","Boolean","values","tempValues","Error","push","join","slice","splitSpace","splitComma","splitBracket","matches","exec","prefix","suffix","splitUnit","unit","NaN","parseFloat","camelize","str","all","letter","toUpperCase","decamelize","letter2","toLowerCase","toArray","call","now","Date","getTime","findIndex","arr","callback","defaultIndex","find","defalutValue","requestAnimationFrame","firstTime","raf","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","bind","currTime","id","setTimeout","cancelAnimationFrame","caf","webkitCancelAnimationFrame","mozCancelAnimationFrame","msCancelAnimationFrame","handle","clearTimeout","getKeys","obj","Object","keys","sortOrders","orders","sort","a","b","index1","index2","convertUnitSize","_a","sizeFunction","between","checkBoundSize","targetSize","compareSize","isMax","throttle","every","calculateBoundSize","minSize","maxSize","keepRatio","map","width","height","minWidth","minHeight","_b","maxWidth","maxHeight","sum","nums","total","average","getRad","pos1","pos2","distX","distY","rad","atan2","PI","getCenterPoint","points","getShapeDirection","center","pos1Rad","pos2Rad","getDist","sqrt","pow","num","round","throttleArray","forEach","_","cutHex","hex","hexToRGBA","h","r","parseInt","substring","g","isNaN","toFullHex","charAt","hslToRGBA","hsl","s","l","floor","abs","c","x","m","rgb","stringToRGBA","color","undefined","colorArr","$","selectors","multi","querySelectorAll","querySelector","hasClass","element","className","classList","contains","match","addClass","add","removeClass","remove","reg","fromCSS","elements","properties","Element","cssObject","getComputedStyle","addEvent","el","type","listener","options","addEventListener","removeEvent","removeEventListener"],"mappings":"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"} | ||
| {"version":3,"file":"utils.esm.js","sources":["../src/consts.ts","../src/utils.ts","../src/color.ts","../src/dom.ts"],"sourcesContent":["/**\n* @namespace\n* @name Consts\n*/\n\nimport { IObject, OpenCloseCharacter } from \"./types\";\n\n/**\n* get string \"rgb\"\n* @memberof Color\n* @example\nimport {RGB} from \"@daybrush/utils\";\n\nconsole.log(RGB); // \"rgb\"\n*/\nexport const RGB = \"rgb\";\n/**\n* get string \"rgba\"\n* @memberof Color\n* @example\nimport {RGBA} from \"@daybrush/utils\";\n\nconsole.log(RGBA); // \"rgba\"\n*/\nexport const RGBA = \"rgba\";\n/**\n* get string \"hsl\"\n* @memberof Color\n* @example\nimport {HSL} from \"@daybrush/utils\";\n\nconsole.log(HSL); // \"hsl\"\n*/\nexport const HSL = \"hsl\";\n/**\n* get string \"hsla\"\n* @memberof Color\n* @example\nimport {HSLA} from \"@daybrush/utils\";\n\nconsole.log(HSLA); // \"hsla\"\n*/\nexport const HSLA = \"hsla\";\n/**\n* gets an array of color models.\n* @memberof Color\n* @example\nimport {COLOR_MODELS} from \"@daybrush/utils\";\n\nconsole.log(COLOR_MODELS); // [\"rgb\", \"rgba\", \"hsl\", \"hsla\"];\n*/\nexport const COLOR_MODELS = [RGB, RGBA, HSL, HSLA];\n\n/**\n* get string \"function\"\n* @memberof Consts\n* @example\nimport {FUNCTION} from \"@daybrush/utils\";\n\nconsole.log(FUNCTION); // \"function\"\n*/\nexport const FUNCTION = \"function\";\n/**\n* get string \"property\"\n* @memberof Consts\n* @example\nimport {PROPERTY} from \"@daybrush/utils\";\n\nconsole.log(PROPERTY); // \"property\"\n*/\nexport const PROPERTY = \"property\";\n/**\n* get string \"array\"\n* @memberof Consts\n* @example\nimport {ARRAY} from \"@daybrush/utils\";\n\nconsole.log(ARRAY); // \"array\"\n*/\nexport const ARRAY = \"array\";\n/**\n* get string \"object\"\n* @memberof Consts\n* @example\nimport {OBJECT} from \"@daybrush/utils\";\n\nconsole.log(OBJECT); // \"object\"\n*/\nexport const OBJECT = \"object\";\n/**\n* get string \"string\"\n* @memberof Consts\n* @example\nimport {STRING} from \"@daybrush/utils\";\n\nconsole.log(STRING); // \"string\"\n*/\nexport const STRING = \"string\";\n/**\n* get string \"number\"\n* @memberof Consts\n* @example\nimport {NUMBER} from \"@daybrush/utils\";\n\nconsole.log(NUMBER); // \"number\"\n*/\nexport const NUMBER = \"number\";\n/**\n* get string \"undefined\"\n* @memberof Consts\n* @example\nimport {UNDEFINED} from \"@daybrush/utils\";\n\nconsole.log(UNDEFINED); // \"undefined\"\n*/\nexport const UNDEFINED = \"undefined\";\n\n/**\n* Check whether the environment is window or node.js.\n* @memberof Consts\n* @example\nimport {IS_WINDOW} from \"@daybrush/utils\";\n\nconsole.log(IS_WINDOW); // false in node.js\nconsole.log(IS_WINDOW); // true in browser\n*/\nexport const IS_WINDOW = typeof window !== UNDEFINED;\n\n/**\n* Check whether the environment is window or node.js.\n* @memberof Consts\n* @name document\n* @example\nimport {IS_WINDOW} from \"@daybrush/utils\";\n\nconsole.log(IS_WINDOW); // false in node.js\nconsole.log(IS_WINDOW); // true in browser\n*/\nconst doc = (typeof document !== UNDEFINED && document) as Document; // FIXME: this type maybe false\n\nexport {doc as document};\n\nconst prefixes: string[] = [\"webkit\", \"ms\", \"moz\", \"o\"];\n\n/**\n * @namespace CrossBrowser\n */\n\n/**\n* Get a CSS property with a vendor prefix that supports cross browser.\n* @function\n* @param {string} property - A CSS property\n* @return {string} CSS property with cross-browser vendor prefix\n* @memberof CrossBrowser\n* @example\nimport {getCrossBrowserProperty} from \"@daybrush/utils\";\n\nconsole.log(getCrossBrowserProperty(\"transform\")); // \"transform\", \"-ms-transform\", \"-webkit-transform\"\nconsole.log(getCrossBrowserProperty(\"filter\")); // \"filter\", \"-webkit-filter\"\n*/\nexport const getCrossBrowserProperty = /*#__PURE__*/(property: string) => {\n if (!doc) {\n return \"\";\n }\n const styles = (doc.body || doc.documentElement).style as any;\n const length = prefixes.length;\n\n if (typeof styles[property] !== UNDEFINED) {\n return property;\n }\n for (let i = 0; i < length; ++i) {\n const name = `-${prefixes[i]}-${property}`;\n\n if (typeof styles[name] !== UNDEFINED) {\n return name;\n }\n }\n return \"\";\n};\n\n/**\n* get string \"transfrom\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {TRANSFORM} from \"@daybrush/utils\";\n\nconsole.log(TRANSFORM); // \"transform\", \"-ms-transform\", \"-webkit-transform\"\n*/\nexport const TRANSFORM = /*#__PURE__*/getCrossBrowserProperty(\"transform\");\n/**\n* get string \"filter\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {FILTER} from \"@daybrush/utils\";\n\nconsole.log(FILTER); // \"filter\", \"-ms-filter\", \"-webkit-filter\"\n*/\nexport const FILTER = /*#__PURE__*/getCrossBrowserProperty(\"filter\");\n/**\n* get string \"animation\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {ANIMATION} from \"@daybrush/utils\";\n\nconsole.log(ANIMATION); // \"animation\", \"-ms-animation\", \"-webkit-animation\"\n*/\nexport const ANIMATION = /*#__PURE__*/getCrossBrowserProperty(\"animation\");\n/**\n* get string \"keyframes\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {KEYFRAMES} from \"@daybrush/utils\";\n\nconsole.log(KEYFRAMES); // \"keyframes\", \"-ms-keyframes\", \"-webkit-keyframes\"\n*/\nexport const KEYFRAMES = /*#__PURE__*/ANIMATION.replace(\"animation\", \"keyframes\");\n\nexport const OPEN_CLOSED_CHARACTERS: OpenCloseCharacter[] = [\n { open: \"(\", close: \")\" },\n { open: `\"`, close: `\"`},\n { open: `'`, close: `'`},\n { open: `\\\\\"`, close: `\\\\\"`},\n { open: `\\\\'`, close: `\\\\'`},\n];\nexport const TINY_NUM = 0.0000001;\nexport const DEFAULT_UNIT_PRESETS: IObject<(pos: number, size?: number) => number> = {\n \"cm\": pos => pos * 96 / 2.54,\n \"mm\": pos => pos * 96 / 254,\n \"in\": pos => pos * 96,\n \"pt\": pos => pos * 96 / 72,\n \"pc\": pos => pos * 96 / 6,\n \"%\": (pos, size) => pos * size! / 100,\n \"vw\": (pos, size = window.innerWidth) => pos / 100 * size,\n \"vh\": (pos, size = window.innerHeight) => pos / 100 * size,\n \"vmax\": (pos, size = Math.max(window.innerWidth, window.innerHeight)) => pos / 100 * size,\n \"vmin\": (pos, size = Math.min(window.innerWidth, window.innerHeight)) => pos / 100 * size,\n};\n","import {\n UNDEFINED, STRING,\n OBJECT, FUNCTION,\n IS_WINDOW, OPEN_CLOSED_CHARACTERS, NUMBER,\n DEFAULT_UNIT_PRESETS,\n TINY_NUM\n} from \"./consts\";\nimport { IArrayFormat, IObject, OpenCloseCharacter, SplitOptions } from \"./types\";\n/**\n* @namespace\n* @name Utils\n*/\n\n/**\n * Returns the inner product of two numbers(`a1`, `a2`) by two criteria(`b1`, `b2`).\n * @memberof Utils\n * @param - The first number\n * @param - The second number\n * @param - The first number to base on the inner product\n * @param - The second number to base on the inner product\n * @return - Returns the inner product\nimport { dot } from \"@daybrush/utils\";\n\nconsole.log(dot(0, 15, 2, 3)); // 6\nconsole.log(dot(5, 15, 2, 3)); // 9\nconsole.log(dot(5, 15, 1, 1)); // 10\n */\nexport function dot(a1: number, a2: number, b1: number, b2: number) {\n return (a1 * b2 + a2 * b1) / (b1 + b2);\n}\n/**\n* Check the type that the value is undefined.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {boolean} true if the type is correct, false otherwise\n* @example\nimport {isUndefined} from \"@daybrush/utils\";\n\nconsole.log(isUndefined(undefined)); // true\nconsole.log(isUndefined(\"\")); // false\nconsole.log(isUndefined(1)); // false\nconsole.log(isUndefined(null)); // false\n*/\nexport function isUndefined(value: any): value is undefined {\n return (typeof value === UNDEFINED);\n}\n/**\n* Check the type that the value is object.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isObject} from \"@daybrush/utils\";\n\nconsole.log(isObject({})); // true\nconsole.log(isObject(undefined)); // false\nconsole.log(isObject(\"\")); // false\nconsole.log(isObject(null)); // false\n*/\nexport function isObject(value: any): value is IObject<any> {\n return value && (typeof value === OBJECT);\n}\n/**\n* Check the type that the value is isArray.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isArray} from \"@daybrush/utils\";\n\nconsole.log(isArray([])); // true\nconsole.log(isArray({})); // false\nconsole.log(isArray(undefined)); // false\nconsole.log(isArray(null)); // false\n*/\nexport function isArray(value: any): value is any[] {\n return Array.isArray(value);\n}\n/**\n* Check the type that the value is string.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isString} from \"@daybrush/utils\";\n\nconsole.log(isString(\"1234\")); // true\nconsole.log(isString(undefined)); // false\nconsole.log(isString(1)); // false\nconsole.log(isString(null)); // false\n*/\nexport function isString(value: any): value is string {\n return typeof value === STRING;\n}\n\nexport function isNumber(value: any): value is number {\n return typeof value === NUMBER;\n}\n\n/**\n* Check the type that the value is function.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isFunction} from \"@daybrush/utils\";\n\nconsole.log(isFunction(function a() {})); // true\nconsole.log(isFunction(() => {})); // true\nconsole.log(isFunction(\"1234\")); // false\nconsole.log(isFunction(1)); // false\nconsole.log(isFunction(null)); // false\n*/\nexport function isFunction(value: any): value is (...args: any[]) => any {\n return typeof value === FUNCTION;\n}\nfunction isEqualSeparator(\n character: string,\n separator: string,\n) {\n const isCharacterSpace = character === \"\" || character == \" \";\n const isSeparatorSpace = separator === \"\" || separator == \" \";\n\n return (isSeparatorSpace && isCharacterSpace) || character === separator;\n}\nfunction findOpen(\n openCharacter: OpenCloseCharacter,\n texts: string[],\n index: number,\n length: number,\n openCloseCharacters: OpenCloseCharacter[],\n) {\n const isIgnore = findIgnore(openCharacter, texts, index);\n\n if (!isIgnore) {\n return findClose(openCharacter, texts, index + 1, length, openCloseCharacters);\n }\n return index;\n}\nfunction findIgnore(\n character: OpenCloseCharacter,\n texts: string[],\n index: number,\n) {\n if (!character.ignore) {\n return null;\n }\n const otherText = texts.slice(Math.max(index - 3, 0), index + 3).join(\"\");\n\n return new RegExp(character.ignore).exec(otherText);\n\n}\nfunction findClose(\n closeCharacter: OpenCloseCharacter,\n texts: string[],\n index: number,\n length: number,\n openCloseCharacters: OpenCloseCharacter[],\n) {\n for (let i = index; i < length; ++i) {\n const character = texts[i].trim();\n\n if (character === closeCharacter.close && !findIgnore(closeCharacter, texts, i)) {\n return i;\n }\n let nextIndex = i;\n // re open\n const openCharacter = find(openCloseCharacters, ({ open }) => open === character);\n\n if (openCharacter) {\n nextIndex = findOpen(openCharacter, texts, i, length, openCloseCharacters);\n }\n if (nextIndex === -1) {\n break;\n }\n i = nextIndex;\n }\n return -1;\n}\n\nexport function splitText(\n text: string,\n splitOptions: string | SplitOptions,\n) {\n const {\n separator = \",\",\n isSeparateFirst,\n isSeparateOnlyOpenClose,\n isSeparateOpenClose = isSeparateOnlyOpenClose,\n openCloseCharacters = OPEN_CLOSED_CHARACTERS,\n } = isString(splitOptions) ? {\n separator: splitOptions,\n } as SplitOptions : splitOptions;\n const openClosedText = openCloseCharacters.map(({ open, close }) => {\n if (open === close) {\n return open;\n }\n return `${open}|${close}`;\n }).join(\"|\");\n const regexText = `(\\\\s*${separator}\\\\s*|${openClosedText}|\\\\s+)`;\n const regex = new RegExp(regexText, \"g\");\n const texts = text.split(regex).filter(Boolean);\n const length = texts.length;\n const values: string[] = [];\n let tempValues: string[] = [];\n\n function resetTemp() {\n if (tempValues.length) {\n values.push(tempValues.join(\"\"));\n tempValues = [];\n\n return true;\n }\n return false;\n }\n for (let i = 0; i < length; ++i) {\n const character = texts[i].trim();\n let nextIndex = i;\n\n\n const openCharacter = find(openCloseCharacters, ({ open }) => open === character);\n const closeCharacter = find(openCloseCharacters, ({ close }) => close === character);\n\n if (openCharacter) {\n nextIndex = findOpen(openCharacter, texts, i, length, openCloseCharacters);\n\n if (nextIndex !== -1 && isSeparateOpenClose) {\n if (resetTemp() && isSeparateFirst) {\n break;\n }\n values.push(texts.slice(i, nextIndex + 1).join(\"\"));\n i = nextIndex;\n\n if (isSeparateFirst) {\n break;\n }\n continue;\n }\n } else if (closeCharacter && !findIgnore(closeCharacter, texts, i)) {\n throw new Error(`invalid format: ${closeCharacter.close}`);\n } else if (isEqualSeparator(character, separator) && !isSeparateOnlyOpenClose) {\n resetTemp();\n if (isSeparateFirst) {\n break;\n }\n continue;\n }\n\n if (nextIndex === -1) {\n nextIndex = length - 1;\n }\n tempValues.push(texts.slice(i, nextIndex + 1).join(\"\"));\n i = nextIndex;\n }\n if (tempValues.length) {\n values.push(tempValues.join(\"\"));\n }\n return values;\n}\n\n/**\n* divide text by space.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {Array} divided texts\n* @example\nimport {spliceSpace} from \"@daybrush/utils\";\n\nconsole.log(splitSpace(\"a b c d e f g\"));\n// [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\"]\nconsole.log(splitSpace(\"'a,b' c 'd,e' f g\"));\n// [\"'a,b'\", \"c\", \"'d,e'\", \"f\", \"g\"]\n*/\nexport function splitSpace(text: string) {\n // divide comma(space)\n return splitText(text, \"\");\n}\n\n/**\n* divide text by comma.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {Array} divided texts\n* @example\nimport {splitComma} from \"@daybrush/utils\";\n\nconsole.log(splitComma(\"a,b,c,d,e,f,g\"));\n// [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\"]\nconsole.log(splitComma(\"'a,b',c,'d,e',f,g\"));\n// [\"'a,b'\", \"c\", \"'d,e'\", \"f\", \"g\"]\n*/\nexport function splitComma(text: string): string[] {\n // divide comma(,)\n // \"[^\"]*\"|'[^']*'\n return splitText(text, \",\");\n}\n/**\n* divide text by bracket \"(\", \")\".\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {object} divided texts\n* @example\nimport {splitBracket} from \"@daybrush/utils\";\n\nconsole.log(splitBracket(\"a(1, 2)\"));\n// {prefix: \"a\", value: \"1, 2\", suffix: \"\"}\nconsole.log(splitBracket(\"a(1, 2)b\"));\n// {prefix: \"a\", value: \"1, 2\", suffix: \"b\"}\n*/\nexport function splitBracket(text: string) {\n const matches = (/([^(]*)\\(([\\s\\S]*)\\)([\\s\\S]*)/g).exec(text);\n\n if (!matches || matches.length < 4) {\n return {};\n } else {\n return { prefix: matches[1], value: matches[2], suffix: matches[3] };\n }\n}\n/**\n* divide text by number and unit.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {} divided texts\n* @example\nimport {splitUnit} from \"@daybrush/utils\";\n\nconsole.log(splitUnit(\"10px\"));\n// {prefix: \"\", value: 10, unit: \"px\"}\nconsole.log(splitUnit(\"-10px\"));\n// {prefix: \"\", value: -10, unit: \"px\"}\nconsole.log(splitUnit(\"a10%\"));\n// {prefix: \"a\", value: 10, unit: \"%\"}\n*/\nexport function splitUnit(text: string): { prefix: string, unit: string, value: number } {\n const matches = /^([^\\d|e|\\-|\\+]*)((?:\\d|\\.|-|e-|e\\+)+)(\\S*)$/g.exec(text);\n\n if (!matches) {\n return { prefix: \"\", unit: \"\", value: NaN };\n }\n const prefix = matches[1];\n const value = matches[2];\n const unit = matches[3];\n\n return { prefix, unit, value: parseFloat(value) };\n}\n\n/**\n* transform strings to camel-case\n* @memberof Utils\n* @param {String} text - string\n* @return {String} camel-case string\n* @example\nimport {camelize} from \"@daybrush/utils\";\n\nconsole.log(camelize(\"transform-origin\")); // transformOrigin\nconsole.log(camelize(\"abcd_efg\")); // abcdEfg\nconsole.log(camelize(\"abcd efg\")); // abcdEfg\n*/\nexport function camelize(str: string) {\n return str.replace(/[\\s-_]([a-z])/g, (all, letter) => letter.toUpperCase());\n}\n/**\n* transform a camelized string into a lowercased string.\n* @memberof Utils\n* @param {string} text - a camel-cased string\n* @param {string} [separator=\"-\"] - a separator\n* @return {string} a lowercased string\n* @example\nimport {decamelize} from \"@daybrush/utils\";\n\nconsole.log(decamelize(\"transformOrigin\")); // transform-origin\nconsole.log(decamelize(\"abcdEfg\", \"_\")); // abcd_efg\n*/\nexport function decamelize(str: string, separator: string = \"-\") {\n return str.replace(/([a-z])([A-Z])/g, (all, letter, letter2) => `${letter}${separator}${letter2.toLowerCase()}`);\n}\n\n/**\n* transforms something in an array into an array.\n* @memberof Utils\n* @param - Array form\n* @return an array\n* @example\nimport {toArray} from \"@daybrush/utils\";\n\nconst arr1 = toArray(document.querySelectorAll(\".a\")); // Element[]\nconst arr2 = toArray(document.querySelectorAll<HTMLElement>(\".a\")); // HTMLElement[]\n*/\nexport function toArray<T>(value: IArrayFormat<T>): T[] {\n return [].slice.call(value);\n}\n\n/**\n* Date.now() method\n* @memberof CrossBrowser\n* @return {number} milliseconds\n* @example\nimport {now} from \"@daybrush/utils\";\n\nconsole.log(now()); // 12121324241(milliseconds)\n*/\nexport function now() {\n return Date.now ? Date.now() : new Date().getTime();\n}\n\n/**\n* Returns the index of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `findIndex` was called upon.\n* @param - A function to execute on each value in the array until the function returns true, indicating that the satisfying element was found.\n* @param - Returns defaultIndex if not found by the function.\n* @example\nimport { findIndex } from \"@daybrush/utils\";\n\nfindIndex([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // 1\n*/\nexport function findIndex<T>(\n arr: T[],\n callback: (element: T, index: number, arr: T[]) => any,\n defaultIndex: number = -1,\n): number {\n const length = arr.length;\n\n for (let i = 0; i < length; ++i) {\n if (callback(arr[i], i, arr)) {\n return i;\n }\n }\n return defaultIndex;\n}\n\n/**\n* Returns the value of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `find` was called upon.\n* @param - A function to execute on each value in the array,\n* @param - Returns defalutValue if not found by the function.\n* @example\nimport { find } from \"@daybrush/utils\";\n\nfind([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // {a: 2}\n*/\nexport function find<T>(\n arr: T[],\n callback: (element: T, index: number, arr: T[]) => any,\n defalutValue?: T,\n): T | undefined {\n const index = findIndex(arr, callback);\n\n return index > - 1 ? arr[index] : defalutValue;\n}\n\n/**\n* window.requestAnimationFrame() method with cross browser.\n* @function\n* @memberof CrossBrowser\n* @param {FrameRequestCallback} callback - The function to call when it's time to update your animation for the next repaint.\n* @return {number} id\n* @example\nimport {requestAnimationFrame} from \"@daybrush/utils\";\n\nrequestAnimationFrame((timestamp) => {\n console.log(timestamp);\n});\n*/\nexport const requestAnimationFrame = /*#__PURE__*/(() => {\n const firstTime = now();\n const raf = IS_WINDOW\n && (window.requestAnimationFrame || window.webkitRequestAnimationFrame\n || (window as any).mozRequestAnimationFrame || (window as any).msRequestAnimationFrame);\n\n return raf ? (raf.bind(window) as (callback: FrameRequestCallback) => number) : ((callback: FrameRequestCallback) => {\n const currTime = now();\n const id = window.setTimeout(() => {\n callback(currTime - firstTime);\n }, 1000 / 60);\n return id;\n });\n})();\n\n/**\n* window.cancelAnimationFrame() method with cross browser.\n* @function\n* @memberof CrossBrowser\n* @param {number} handle - the id obtained through requestAnimationFrame method\n* @return {void}\n* @example\nimport { requestAnimationFrame, cancelAnimationFrame } from \"@daybrush/utils\";\n\nconst id = requestAnimationFrame((timestamp) => {\n console.log(timestamp);\n});\n\ncancelAnimationFrame(id);\n*/\nexport const cancelAnimationFrame = /*#__PURE__*/(() => {\n const caf = IS_WINDOW\n && (window.cancelAnimationFrame || window.webkitCancelAnimationFrame\n || (window as any).mozCancelAnimationFrame || (window as any).msCancelAnimationFrame);\n\n return caf\n ? caf.bind(window) as (handle: number) => void\n : ((handle: number) => { clearTimeout(handle); });\n})();\n/**\n* @function\n* @memberof Utils\n*/\nexport function getKeys(obj: IObject<any>): string[] {\n if (Object.keys) {\n return Object.keys(obj);\n }\n const keys: string[] = [];\n for (const name in keys) {\n keys.push(name);\n }\n return keys;\n}\n\n/**\n* @function\n* @memberof Utils\n*/\nexport function sortOrders(keys: Array<string | number>, orders: Array<string | number> = []) {\n keys.sort((a, b) => {\n const index1 = orders.indexOf(a);\n const index2 = orders.indexOf(b);\n\n if (index2 === -1 && index1 === -1) {\n return 0;\n }\n if (index1 === -1) {\n return 1;\n }\n if (index2 === -1) {\n return -1;\n }\n return index1 - index2;\n });\n}\n\n/**\n* convert unit size to px size\n* @function\n* @memberof Utils\n*/\nexport function convertUnitSize(pos: string, size: number | IObject<((pos: number) => number) | number>) {\n const { value, unit } = splitUnit(pos);\n\n if (isObject(size)) {\n const sizeFunction = size[unit];\n if (sizeFunction) {\n if (isFunction(sizeFunction)) {\n return sizeFunction(value);\n } else if (DEFAULT_UNIT_PRESETS[unit]) {\n return DEFAULT_UNIT_PRESETS[unit](value, sizeFunction);\n }\n }\n } else if (unit === \"%\") {\n return value * size / 100;\n }\n if (DEFAULT_UNIT_PRESETS[unit]) {\n return DEFAULT_UNIT_PRESETS[unit](value);\n }\n return value;\n}\n\n/**\n* calculate between min, max\n* @function\n* @memberof Utils\n*/\nexport function between(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(value, max));\n}\n\nexport function checkBoundSize(targetSize: number[], compareSize: number[], isMax: boolean) {\n return [\n [throttle(compareSize[0], TINY_NUM), throttle(compareSize[0] * targetSize[1] / targetSize[0], TINY_NUM)],\n [throttle(compareSize[1] * targetSize[0] / targetSize[1], TINY_NUM), throttle(compareSize[1], TINY_NUM)],\n ].filter(size => size.every((value, i) => {\n return isMax ? value <= compareSize[i] : value >= compareSize[i];\n }))[0] || targetSize;\n}\n\n/**\n* calculate bound size\n* @function\n* @memberof Utils\n*/\nexport function calculateBoundSize(\n size: number[], minSize: number[],\n maxSize: number[], keepRatio?: boolean,\n): number[] {\n if (!keepRatio) {\n return size.map((value, i) => between(value, minSize[i], maxSize[i]));\n }\n let [width, height] = size;\n // width : height = minWidth : minHeight;\n const [minWidth, minHeight] = checkBoundSize(size, minSize, false);\n const [maxWidth, maxHeight] = checkBoundSize(size, maxSize, true);\n\n if (width < minWidth || height < minHeight) {\n width = minWidth;\n height = minHeight;\n } else if (width > maxWidth || height > maxHeight) {\n width = maxWidth;\n height = maxHeight;\n }\n return [width, height];\n}\n\n\n/**\n* Add all the numbers.\n* @function\n* @memberof Utils\n*/\nexport function sum(nums: number[]): number {\n const length = nums.length;\n let total = 0;\n\n for (let i = length - 1; i >= 0; --i) {\n total += nums[i];\n }\n return total;\n}\n\n/**\n* Average all numbers.\n* @function\n* @memberof Utils\n*/\nexport function average(nums: number[]) {\n const length = nums.length;\n let total = 0;\n\n for (let i = length - 1; i >= 0; --i) {\n total += nums[i];\n }\n return length ? total / length : 0;\n}\n/**\n* Get the angle of two points. (0 <= rad < 359)\n* @function\n* @memberof Utils\n*/\nexport function getRad(pos1: number[], pos2: number[]): number {\n const distX = pos2[0] - pos1[0];\n const distY = pos2[1] - pos1[1];\n const rad = Math.atan2(distY, distX);\n\n return rad >= 0 ? rad : rad + Math.PI * 2;\n}\n/**\n* Get the average point of all points.\n* @function\n* @memberof Utils\n*/\nexport function getCenterPoint(points: number[][]): number[] {\n return [0, 1].map(i => average(points.map(pos => pos[i])));\n}\n/**\n* Gets the direction of the shape.\n* @function\n* @memberof Utils\n*/\nexport function getShapeDirection(points: number[][]): 1 | -1 {\n const center = getCenterPoint(points);\n const pos1Rad = getRad(center, points[0]);\n const pos2Rad = getRad(center, points[1]);\n\n return (pos1Rad < pos2Rad && pos2Rad - pos1Rad < Math.PI) || (pos1Rad > pos2Rad && pos2Rad - pos1Rad < -Math.PI)\n ? 1 : -1;\n}\n\n/**\n* Get the distance between two points.\n* @function\n* @memberof Utils\n*/\nexport function getDist(a: number[], b?: number[]) {\n return Math.sqrt(Math.pow((b ? b[0] : 0) - a[0], 2) + Math.pow((b ? b[1] : 0) - a[1], 2));\n}\n\n/**\n* throttle number depending on the unit.\n* @function\n* @memberof Utils\n*/\nexport function throttle(num: number, unit?: number) {\n if (!unit) {\n return num;\n }\n return Math.round(num / unit) * unit;\n}\n\n/**\n* throttle number array depending on the unit.\n* @function\n* @memberof Utils\n*/\nexport function throttleArray(nums: number[], unit?: number) {\n nums.forEach((_, i) => {\n nums[i] = throttle(nums[i], unit);\n });\n return nums;\n}\n\nexport function counter(num: number) {\n const nums: number[] = [];\n\n for (let i = 0; i < num; ++i) {\n nums.push(i);\n }\n\n return nums;\n}\n","import { RGB, RGBA, HSL, HSLA } from \"./consts\";\nimport { splitBracket, splitComma } from \"./utils\";\n\n/**\n* @namespace\n* @name Color\n*/\n\n/**\n* Remove the # from the hex color.\n* @memberof Color\n* @param {} hex - hex color\n* @return {} hex color\n* @example\nimport {cutHex} from \"@daybrush/utils\";\n\nconsole.log(cutHex(\"#000000\")) // \"000000\"\n*/\nexport function cutHex(hex: string) {\n return hex.replace(\"#\", \"\");\n}\n/**\n* convert hex color to rgb color.\n* @memberof Color\n* @param {} hex - hex color\n* @return {} rgb color\n* @example\nimport {hexToRGBA} from \"@daybrush/utils\";\n\nconsole.log(hexToRGBA(\"#00000005\"));\n// [0, 0, 0, 1]\nconsole.log(hexToRGBA(\"#201045\"));\n// [32, 16, 69, 1]\n*/\nexport function hexToRGBA(hex: string): [number, number, number, number] {\n const h = cutHex(hex);\n const r = parseInt(h.substring(0, 2), 16);\n const g = parseInt(h.substring(2, 4), 16);\n const b = parseInt(h.substring(4, 6), 16);\n let a = parseInt(h.substring(6, 8), 16) / 255;\n\n if (isNaN(a)) {\n a = 1;\n }\n return [r, g, b, a];\n}\n\n/**\n* convert 3(or 4)-digit hex color to 6(or 8)-digit hex color.\n* @memberof Color\n* @param {} hex - 3(or 4)-digit hex color\n* @return {} 6(or 8)-digit hex color\n* @example\nimport {toFullHex} from \"@daybrush/utils\";\n\nconsole.log(toFullHex(\"#123\")); // \"#112233\"\nconsole.log(toFullHex(\"#123a\")); // \"#112233aa\"\n*/\nexport function toFullHex(h: string): string {\n const r = h.charAt(1);\n const g = h.charAt(2);\n const b = h.charAt(3);\n const a = h.charAt(4);\n const arr = [\"#\", r, r, g, g, b, b, a, a];\n\n return arr.join(\"\");\n}\n/**\n* convert hsl color to rgba color.\n* @memberof Color\n* @param {} hsl - hsl color(hue: 0 ~ 360, saturation: 0 ~ 1, lightness: 0 ~ 1, alpha: 0 ~ 1)\n* @return {} rgba color\n* @example\nimport {hslToRGBA} from \"@daybrush/utils\";\n\nconsole.log(hslToRGBA([150, 0.5, 0.4]));\n// [51, 153, 102, 1]\n*/\nexport function hslToRGBA(hsl: readonly [number, number, number, number?]): [number, number, number, number] {\n let h = hsl[0];\n const s = hsl[1];\n const l = hsl[2];\n\n if (h < 0) {\n h += Math.floor((Math.abs(h) + 360) / 360) * 360;\n }\n h %= 360;\n\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs((h / 60) % 2 - 1));\n const m = l - c / 2;\n let rgb: [number, number, number];\n\n if (h < 60) {\n rgb = [c, x, 0];\n } else if (h < 120) {\n rgb = [x, c, 0];\n } else if (h < 180) {\n rgb = [0, c, x];\n } else if (h < 240) {\n rgb = [0, x, c];\n } else if (h < 300) {\n rgb = [x, 0, c];\n } else if (h < 360) {\n rgb = [c, 0, x];\n } else {\n rgb = [0, 0, 0];\n }\n\n return [\n Math.round((rgb[0] + m) * 255),\n Math.round((rgb[1] + m) * 255),\n Math.round((rgb[2] + m) * 255),\n hsl[3] ?? 1,\n ];\n}\n/**\n* convert string to rgba color.\n* @memberof Color\n* @param {} - 3-hex(#000), 4-hex(#0000) 6-hex(#000000), 8-hex(#00000000) or RGB(A), or HSL(A)\n* @return {} rgba color\n* @example\nimport {stringToRGBA} from \"@daybrush/utils\";\n\nconsole.log(stringToRGBA(\"#000000\")); // [0, 0, 0, 1]\nconsole.log(stringToRGBA(\"rgb(100, 100, 100)\")); // [100, 100, 100, 1]\nconsole.log(stringToRGBA(\"hsl(150, 0.5, 0.4)\")); // [51, 153, 102, 1]\n*/\nexport function stringToRGBA(color: string): [number, number, number, number] {\n if (color.charAt(0) === \"#\") {\n if (color.length === 4 || color.length === 5) {\n return hexToRGBA(toFullHex(color));\n } else {\n return hexToRGBA(color);\n }\n } else if (color.indexOf(\"(\") !== -1) {\n // in bracket.\n const {prefix, value} = splitBracket(color);\n\n if (!prefix || !value) {\n return undefined as never;\n }\n const arr = splitComma(value);\n const colorArr: [number, number, number, number] = [0, 0, 0, 1];\n const length = arr.length;\n\n switch (prefix) {\n case RGB:\n case RGBA:\n for (let i = 0; i < length; ++i) {\n colorArr[i] = parseFloat(arr[i]);\n }\n return colorArr;\n case HSL:\n case HSLA:\n for (let i = 0; i < length; ++i) {\n if (arr[i].indexOf(\"%\") !== -1) {\n colorArr[i] = parseFloat(arr[i]) / 100;\n } else {\n colorArr[i] = parseFloat(arr[i]);\n }\n }\n // hsl, hsla to rgba\n return hslToRGBA(colorArr);\n }\n }\n return undefined as never;\n}\n","import { document } from \"./consts\";\nimport { IObject, IEventMap } from \"./types\";\n\n/**\n * @namespace DOM\n */\n\nexport function $<K extends keyof HTMLElementTagNameMap>(selectors: K, multi: true):\n NodeListOf<HTMLElementTagNameMap[K]>;\nexport function $<K extends keyof SVGElementTagNameMap>(selectors: K, multi: true): NodeListOf<SVGElementTagNameMap[K]>;\nexport function $<E extends Element = Element>(selectors: string, multi: true): NodeListOf<E>;\n\nexport function $<K extends keyof HTMLElementTagNameMap>(selectors: K, multi?: false): HTMLElementTagNameMap[K] | null;\nexport function $<K extends keyof SVGElementTagNameMap>(selectors: K, multi?: false): SVGElementTagNameMap[K] | null;\nexport function $<E extends Element = Element>(selectors: string, multi?: false): E | null;\n/**\n * Returns all element descendants of node that\n * match selectors.\n */\n\n/**\n * Checks if the specified class value exists in the element's class attribute.\n * @memberof DOM\n * @param - A DOMString containing one or more selectors to match\n * @param - If multi is true, a DOMString containing one or more selectors to match against.\n * @example\nimport {$} from \"@daybrush/utils\";\n\nconsole.log($(\"div\")); // div element\nconsole.log($(\"div\", true)); // [div, div] elements\n*/\nexport function $<E extends Element = Element>(selectors: string, multi?: boolean): E | NodeListOf<E> | null {\n return multi ? document.querySelectorAll<E>(selectors) : document.querySelector<E>(selectors);\n}\n\n/**\n* Checks if the specified class value exists in the element's class attribute.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to search\n* @return {boolean} return false if the class is not found.\n* @example\nimport {hasClass} from \"@daybrush/utils\";\n\nconsole.log(hasClass(element, \"start\")); // true or false\n*/\nexport function hasClass(element: Element, className: string) {\n if (element.classList) {\n return element.classList.contains(className);\n }\n return !!element.className.match(new RegExp(`(\\\\s|^)${className}(\\\\s|$)`));\n}\n\n/**\n* Add the specified class value. If these classe already exist in the element's class attribute they are ignored.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to add\n* @example\nimport {addClass} from \"@daybrush/utils\";\n\naddClass(element, \"start\");\n*/\nexport function addClass(element: Element, className: string) {\n if (element.classList) {\n element.classList.add(className);\n } else {\n element.className += ` ${className}`;\n }\n}\n\n/**\n* Removes the specified class value.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to remove\n* @example\nimport {removeClass} from \"@daybrush/utils\";\n\nremoveClass(element, \"start\");\n*/\nexport function removeClass(element: Element, className: string) {\n if (element.classList) {\n element.classList.remove(className);\n } else {\n const reg = new RegExp(`(\\\\s|^)${className}(\\\\s|$)`);\n\n element.className = element.className.replace(reg, \" \");\n }\n}\n\n/**\n* Gets the CSS properties from the element.\n* @memberof DOM\n* @param elements - elements\n* @param properites - the CSS properties\n* @return returns CSS properties and values.\n* @example\nimport {fromCSS} from \"@daybrush/utils\";\n\nconsole.log(fromCSS(element, [\"left\", \"opacity\", \"top\"])); // {\"left\": \"10px\", \"opacity\": 1, \"top\": \"10px\"}\n*/\nexport function fromCSS(\n elements: Element | Element[] | NodeListOf<Element>, properties: string[]): IObject<any> {\n if (!elements || !properties || !properties.length) {\n return {};\n }\n let element;\n\n if (elements instanceof Element) {\n element = elements;\n } else if (elements.length) {\n element = elements[0];\n } else {\n return {};\n }\n const cssObject: IObject<any> = {};\n const styles = window.getComputedStyle(element) as any;\n const length = properties.length;\n\n for (let i = 0; i < length; ++i) {\n cssObject[properties[i]] = styles[properties[i]];\n }\n return cssObject;\n}\n\nexport function addEvent<K extends keyof IEventMap>(\n el: EventTarget, type: K, listener: (e: IEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;\n/**\n* Sets up a function that will be called whenever the specified event is delivered to the target\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The object which receives a notification (an object that implements the Event interface) when an event of the specified type occurs\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent} from \"@daybrush/utils\";\n\naddEvent(el, \"click\", e => {\n console.log(e);\n});\n*/\nexport function addEvent(\n el: EventTarget,\n type: string, listener: (e: Event) => void,\n options?: boolean | AddEventListenerOptions) {\n el.addEventListener(type, listener, options);\n}\n\nexport function removeEvent<K extends keyof IEventMap>(\n el: EventTarget, type: K, listener: (e: IEventMap[K]) => void, options?: boolean | EventListenerOptions): void;\n/**\n* removes from the EventTarget an event listener previously registered with EventTarget.addEventListener()\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The EventListener function of the event handler to remove from the event target.\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent, removeEvent} from \"@daybrush/utils\";\nconst listener = e => {\n console.log(e);\n};\naddEvent(el, \"click\", listener);\nremoveEvent(el, \"click\", listener);\n*/\nexport function removeEvent(\n el: EventTarget, type: string,\n listener: (e: Event) => void,\n options?: boolean | EventListenerOptions,\n) {\n el.removeEventListener(type, listener, options);\n}\n"],"names":["RGB","RGBA","HSL","HSLA","COLOR_MODELS","FUNCTION","PROPERTY","ARRAY","OBJECT","STRING","NUMBER","UNDEFINED","IS_WINDOW","window","doc","document","prefixes","getCrossBrowserProperty","property","styles","body","documentElement","style","length","i","name","TRANSFORM","FILTER","ANIMATION","KEYFRAMES","replace","OPEN_CLOSED_CHARACTERS","open","close","TINY_NUM","DEFAULT_UNIT_PRESETS","pos","size","innerWidth","innerHeight","Math","max","min","dot","a1","a2","b1","b2","isUndefined","value","isObject","isArray","Array","isString","isNumber","isFunction","isEqualSeparator","character","separator","isCharacterSpace","isSeparatorSpace","findOpen","openCharacter","texts","index","openCloseCharacters","isIgnore","findIgnore","findClose","ignore","otherText","slice","join","RegExp","exec","closeCharacter","trim","nextIndex","find","_a","splitText","text","splitOptions","_b","isSeparateFirst","isSeparateOnlyOpenClose","_c","isSeparateOpenClose","_d","openClosedText","map","regexText","regex","split","filter","Boolean","values","tempValues","resetTemp","push","Error","splitSpace","splitComma","splitBracket","matches","prefix","suffix","splitUnit","unit","NaN","parseFloat","camelize","str","all","letter","toUpperCase","decamelize","letter2","toLowerCase","toArray","call","now","Date","getTime","findIndex","arr","callback","defaultIndex","defalutValue","requestAnimationFrame","firstTime","raf","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","bind","currTime","id","setTimeout","cancelAnimationFrame","caf","webkitCancelAnimationFrame","mozCancelAnimationFrame","msCancelAnimationFrame","handle","clearTimeout","getKeys","obj","Object","keys","sortOrders","orders","sort","a","b","index1","indexOf","index2","convertUnitSize","sizeFunction","between","checkBoundSize","targetSize","compareSize","isMax","throttle","every","calculateBoundSize","minSize","maxSize","keepRatio","width","height","minWidth","minHeight","maxWidth","maxHeight","sum","nums","total","average","getRad","pos1","pos2","distX","distY","rad","atan2","PI","getCenterPoint","points","getShapeDirection","center","pos1Rad","pos2Rad","getDist","sqrt","pow","num","round","throttleArray","forEach","_","counter","cutHex","hex","hexToRGBA","h","r","parseInt","substring","g","isNaN","toFullHex","charAt","hslToRGBA","hsl","s","l","floor","abs","c","x","m","rgb","stringToRGBA","color","undefined","colorArr","$","selectors","multi","querySelectorAll","querySelector","hasClass","element","className","classList","contains","match","addClass","add","removeClass","remove","reg","fromCSS","elements","properties","Element","cssObject","getComputedStyle","addEvent","el","type","listener","options","addEventListener","removeEvent","removeEventListener"],"mappings":"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"} |
+158
-28
@@ -7,3 +7,3 @@ /* | ||
| repository: https://github.com/daybrush/utils | ||
| @version 1.5.0 | ||
| @version 1.6.0-beta.0 | ||
| */ | ||
@@ -243,3 +243,18 @@ (function (global, factory) { | ||
| var KEYFRAMES = /*#__PURE__*/ANIMATION.replace("animation", "keyframes"); | ||
| var OPEN_CLOSED_CHARACTER = ["\"", "'", "\\\"", "\\'"]; | ||
| var OPEN_CLOSED_CHARACTERS = [{ | ||
| open: "(", | ||
| close: ")" | ||
| }, { | ||
| open: "\"", | ||
| close: "\"" | ||
| }, { | ||
| open: "'", | ||
| close: "'" | ||
| }, { | ||
| open: "\\\"", | ||
| close: "\\\"" | ||
| }, { | ||
| open: "\\'", | ||
| close: "\\'" | ||
| }]; | ||
| var TINY_NUM = 0.0000001; | ||
@@ -408,23 +423,64 @@ var DEFAULT_UNIT_PRESETS = { | ||
| function findClosed(closedCharacter, texts, index, length) { | ||
| for (var i = index; i < length; ++i) { | ||
| function isEqualSeparator(character, separator) { | ||
| var isCharacterSpace = character === "" || character == " "; | ||
| var isSeparatorSpace = separator === "" || separator == " "; | ||
| return isSeparatorSpace && isCharacterSpace || character === separator; | ||
| } | ||
| function findOpen(openCharacter, texts, index, length, openCloseCharacters) { | ||
| var isIgnore = findIgnore(openCharacter, texts, index); | ||
| if (!isIgnore) { | ||
| return findClose(openCharacter, texts, index + 1, length, openCloseCharacters); | ||
| } | ||
| return index; | ||
| } | ||
| function findIgnore(character, texts, index) { | ||
| if (!character.ignore) { | ||
| return null; | ||
| } | ||
| var otherText = texts.slice(Math.max(index - 3, 0), index + 3).join(""); | ||
| return new RegExp(character.ignore).exec(otherText); | ||
| } | ||
| function findClose(closeCharacter, texts, index, length, openCloseCharacters) { | ||
| var _loop_1 = function (i) { | ||
| var character = texts[i].trim(); | ||
| if (character === closedCharacter) { | ||
| return i; | ||
| if (character === closeCharacter.close && !findIgnore(closeCharacter, texts, i)) { | ||
| return { | ||
| value: i | ||
| }; | ||
| } | ||
| var nextIndex = i; | ||
| var nextIndex = i; // re open | ||
| if (character === "(") { | ||
| nextIndex = findClosed(")", texts, i + 1, length); | ||
| } else if (OPEN_CLOSED_CHARACTER.indexOf(character) > -1) { | ||
| nextIndex = findClosed(character, texts, i + 1, length); | ||
| var openCharacter = find(openCloseCharacters, function (_a) { | ||
| var open = _a.open; | ||
| return open === character; | ||
| }); | ||
| if (openCharacter) { | ||
| nextIndex = findOpen(openCharacter, texts, i, length, openCloseCharacters); | ||
| } | ||
| if (nextIndex === -1) { | ||
| break; | ||
| return out_i_1 = i, "break"; | ||
| } | ||
| i = nextIndex; | ||
| out_i_1 = i; | ||
| }; | ||
| var out_i_1; | ||
| for (var i = index; i < length; ++i) { | ||
| var state_1 = _loop_1(i); | ||
| i = out_i_1; | ||
| if (typeof state_1 === "object") return state_1.value; | ||
| if (state_1 === "break") break; | ||
| } | ||
@@ -435,4 +491,26 @@ | ||
| function splitText(text, separator) { | ||
| var regexText = "(\\s*" + (separator || ",") + "\\s*|\\(|\\)|\"|'|\\\\\"|\\\\'|\\s+)"; | ||
| function splitText(text, splitOptions) { | ||
| var _a = isString(splitOptions) ? { | ||
| separator: splitOptions | ||
| } : splitOptions, | ||
| _b = _a.separator, | ||
| separator = _b === void 0 ? "," : _b, | ||
| isSeparateFirst = _a.isSeparateFirst, | ||
| isSeparateOnlyOpenClose = _a.isSeparateOnlyOpenClose, | ||
| _c = _a.isSeparateOpenClose, | ||
| isSeparateOpenClose = _c === void 0 ? isSeparateOnlyOpenClose : _c, | ||
| _d = _a.openCloseCharacters, | ||
| openCloseCharacters = _d === void 0 ? OPEN_CLOSED_CHARACTERS : _d; | ||
| var openClosedText = openCloseCharacters.map(function (_a) { | ||
| var open = _a.open, | ||
| close = _a.close; | ||
| if (open === close) { | ||
| return open; | ||
| } | ||
| return open + "|" + close; | ||
| }).join("|"); | ||
| var regexText = "(\\s*" + separator + "\\s*|" + openClosedText + "|\\s+)"; | ||
| var regex = new RegExp(regexText, "g"); | ||
@@ -444,19 +522,51 @@ var texts = text.split(regex).filter(Boolean); | ||
| for (var i = 0; i < length; ++i) { | ||
| function resetTemp() { | ||
| if (tempValues.length) { | ||
| values.push(tempValues.join("")); | ||
| tempValues = []; | ||
| return true; | ||
| } | ||
| return false; | ||
| } | ||
| var _loop_2 = function (i) { | ||
| var character = texts[i].trim(); | ||
| var nextIndex = i; | ||
| var openCharacter = find(openCloseCharacters, function (_a) { | ||
| var open = _a.open; | ||
| return open === character; | ||
| }); | ||
| var closeCharacter = find(openCloseCharacters, function (_a) { | ||
| var close = _a.close; | ||
| return close === character; | ||
| }); | ||
| if (character === "(") { | ||
| nextIndex = findClosed(")", texts, i + 1, length); | ||
| } else if (character === ")") { | ||
| throw new Error("invalid format"); | ||
| } else if (OPEN_CLOSED_CHARACTER.indexOf(character) > -1) { | ||
| nextIndex = findClosed(character, texts, i + 1, length); | ||
| } else if (character === separator) { | ||
| if (tempValues.length) { | ||
| values.push(tempValues.join("")); | ||
| tempValues = []; | ||
| if (openCharacter) { | ||
| nextIndex = findOpen(openCharacter, texts, i, length, openCloseCharacters); | ||
| if (nextIndex !== -1 && isSeparateOpenClose) { | ||
| if (resetTemp() && isSeparateFirst) { | ||
| return out_i_2 = i, "break"; | ||
| } | ||
| values.push(texts.slice(i, nextIndex + 1).join("")); | ||
| i = nextIndex; | ||
| if (isSeparateFirst) { | ||
| return out_i_2 = i, "break"; | ||
| } | ||
| return out_i_2 = i, "continue"; | ||
| } | ||
| } else if (closeCharacter && !findIgnore(closeCharacter, texts, i)) { | ||
| throw new Error("invalid format: " + closeCharacter.close); | ||
| } else if (isEqualSeparator(character, separator) && !isSeparateOnlyOpenClose) { | ||
| resetTemp(); | ||
| continue; | ||
| if (isSeparateFirst) { | ||
| return out_i_2 = i, "break"; | ||
| } | ||
| return out_i_2 = i, "continue"; | ||
| } | ||
@@ -470,2 +580,12 @@ | ||
| i = nextIndex; | ||
| out_i_2 = i; | ||
| }; | ||
| var out_i_2; | ||
| for (var i = 0; i < length; ++i) { | ||
| var state_2 = _loop_2(i); | ||
| i = out_i_2; | ||
| if (state_2 === "break") break; | ||
| } | ||
@@ -494,3 +614,3 @@ | ||
| function splitSpace(text) { | ||
| // divide comma(,) | ||
| // divide comma(space) | ||
| return splitText(text, ""); | ||
@@ -971,3 +1091,12 @@ } | ||
| } | ||
| function counter(num) { | ||
| var nums = []; | ||
| for (var i = 0; i < num; ++i) { | ||
| nums.push(i); | ||
| } | ||
| return nums; | ||
| } | ||
| /** | ||
@@ -1320,3 +1449,3 @@ * @namespace | ||
| KEYFRAMES: KEYFRAMES, | ||
| OPEN_CLOSED_CHARACTER: OPEN_CLOSED_CHARACTER, | ||
| OPEN_CLOSED_CHARACTERS: OPEN_CLOSED_CHARACTERS, | ||
| TINY_NUM: TINY_NUM, | ||
@@ -1363,2 +1492,3 @@ DEFAULT_UNIT_PRESETS: DEFAULT_UNIT_PRESETS, | ||
| throttleArray: throttleArray, | ||
| counter: counter, | ||
| $: $, | ||
@@ -1365,0 +1495,0 @@ hasClass: hasClass, |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"utils.js","sources":["../src/consts.ts","../src/utils.ts","../src/color.ts","../src/dom.ts"],"sourcesContent":["/**\n* @namespace\n* @name Consts\n*/\n\nimport { IObject } from \"./types\";\n\n/**\n* get string \"rgb\"\n* @memberof Color\n* @example\nimport {RGB} from \"@daybrush/utils\";\n\nconsole.log(RGB); // \"rgb\"\n*/\nexport const RGB = \"rgb\";\n/**\n* get string \"rgba\"\n* @memberof Color\n* @example\nimport {RGBA} from \"@daybrush/utils\";\n\nconsole.log(RGBA); // \"rgba\"\n*/\nexport const RGBA = \"rgba\";\n/**\n* get string \"hsl\"\n* @memberof Color\n* @example\nimport {HSL} from \"@daybrush/utils\";\n\nconsole.log(HSL); // \"hsl\"\n*/\nexport const HSL = \"hsl\";\n/**\n* get string \"hsla\"\n* @memberof Color\n* @example\nimport {HSLA} from \"@daybrush/utils\";\n\nconsole.log(HSLA); // \"hsla\"\n*/\nexport const HSLA = \"hsla\";\n/**\n* gets an array of color models.\n* @memberof Color\n* @example\nimport {COLOR_MODELS} from \"@daybrush/utils\";\n\nconsole.log(COLOR_MODELS); // [\"rgb\", \"rgba\", \"hsl\", \"hsla\"];\n*/\nexport const COLOR_MODELS = [RGB, RGBA, HSL, HSLA];\n\n/**\n* get string \"function\"\n* @memberof Consts\n* @example\nimport {FUNCTION} from \"@daybrush/utils\";\n\nconsole.log(FUNCTION); // \"function\"\n*/\nexport const FUNCTION = \"function\";\n/**\n* get string \"property\"\n* @memberof Consts\n* @example\nimport {PROPERTY} from \"@daybrush/utils\";\n\nconsole.log(PROPERTY); // \"property\"\n*/\nexport const PROPERTY = \"property\";\n/**\n* get string \"array\"\n* @memberof Consts\n* @example\nimport {ARRAY} from \"@daybrush/utils\";\n\nconsole.log(ARRAY); // \"array\"\n*/\nexport const ARRAY = \"array\";\n/**\n* get string \"object\"\n* @memberof Consts\n* @example\nimport {OBJECT} from \"@daybrush/utils\";\n\nconsole.log(OBJECT); // \"object\"\n*/\nexport const OBJECT = \"object\";\n/**\n* get string \"string\"\n* @memberof Consts\n* @example\nimport {STRING} from \"@daybrush/utils\";\n\nconsole.log(STRING); // \"string\"\n*/\nexport const STRING = \"string\";\n/**\n* get string \"number\"\n* @memberof Consts\n* @example\nimport {NUMBER} from \"@daybrush/utils\";\n\nconsole.log(NUMBER); // \"number\"\n*/\nexport const NUMBER = \"number\";\n/**\n* get string \"undefined\"\n* @memberof Consts\n* @example\nimport {UNDEFINED} from \"@daybrush/utils\";\n\nconsole.log(UNDEFINED); // \"undefined\"\n*/\nexport const UNDEFINED = \"undefined\";\n\n/**\n* Check whether the environment is window or node.js.\n* @memberof Consts\n* @example\nimport {IS_WINDOW} from \"@daybrush/utils\";\n\nconsole.log(IS_WINDOW); // false in node.js\nconsole.log(IS_WINDOW); // true in browser\n*/\nexport const IS_WINDOW = typeof window !== UNDEFINED;\n\n/**\n* Check whether the environment is window or node.js.\n* @memberof Consts\n* @name document\n* @example\nimport {IS_WINDOW} from \"@daybrush/utils\";\n\nconsole.log(IS_WINDOW); // false in node.js\nconsole.log(IS_WINDOW); // true in browser\n*/\nconst doc = (typeof document !== UNDEFINED && document) as Document; // FIXME: this type maybe false\n\nexport {doc as document};\n\nconst prefixes: string[] = [\"webkit\", \"ms\", \"moz\", \"o\"];\n\n/**\n * @namespace CrossBrowser\n */\n\n/**\n* Get a CSS property with a vendor prefix that supports cross browser.\n* @function\n* @param {string} property - A CSS property\n* @return {string} CSS property with cross-browser vendor prefix\n* @memberof CrossBrowser\n* @example\nimport {getCrossBrowserProperty} from \"@daybrush/utils\";\n\nconsole.log(getCrossBrowserProperty(\"transform\")); // \"transform\", \"-ms-transform\", \"-webkit-transform\"\nconsole.log(getCrossBrowserProperty(\"filter\")); // \"filter\", \"-webkit-filter\"\n*/\nexport const getCrossBrowserProperty = /*#__PURE__*/(property: string) => {\n if (!doc) {\n return \"\";\n }\n const styles = (doc.body || doc.documentElement).style as any;\n const length = prefixes.length;\n\n if (typeof styles[property] !== UNDEFINED) {\n return property;\n }\n for (let i = 0; i < length; ++i) {\n const name = `-${prefixes[i]}-${property}`;\n\n if (typeof styles[name] !== UNDEFINED) {\n return name;\n }\n }\n return \"\";\n};\n\n/**\n* get string \"transfrom\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {TRANSFORM} from \"@daybrush/utils\";\n\nconsole.log(TRANSFORM); // \"transform\", \"-ms-transform\", \"-webkit-transform\"\n*/\nexport const TRANSFORM = /*#__PURE__*/getCrossBrowserProperty(\"transform\");\n/**\n* get string \"filter\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {FILTER} from \"@daybrush/utils\";\n\nconsole.log(FILTER); // \"filter\", \"-ms-filter\", \"-webkit-filter\"\n*/\nexport const FILTER = /*#__PURE__*/getCrossBrowserProperty(\"filter\");\n/**\n* get string \"animation\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {ANIMATION} from \"@daybrush/utils\";\n\nconsole.log(ANIMATION); // \"animation\", \"-ms-animation\", \"-webkit-animation\"\n*/\nexport const ANIMATION = /*#__PURE__*/getCrossBrowserProperty(\"animation\");\n/**\n* get string \"keyframes\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {KEYFRAMES} from \"@daybrush/utils\";\n\nconsole.log(KEYFRAMES); // \"keyframes\", \"-ms-keyframes\", \"-webkit-keyframes\"\n*/\nexport const KEYFRAMES = /*#__PURE__*/ANIMATION.replace(\"animation\", \"keyframes\");\n\nexport const OPEN_CLOSED_CHARACTER = [`\"`, `'`, `\\\\\"`, `\\\\'`];\nexport const TINY_NUM = 0.0000001;\nexport const DEFAULT_UNIT_PRESETS: IObject<(pos: number, size?: number) => number> = {\n \"cm\": pos => pos * 96 / 2.54,\n \"mm\": pos => pos * 96 / 254,\n \"in\": pos => pos * 96,\n \"pt\": pos => pos * 96 / 72,\n \"pc\": pos => pos * 96 / 6,\n \"%\": (pos, size) => pos * size! / 100,\n \"vw\": (pos, size = window.innerWidth) => pos / 100 * size,\n \"vh\": (pos, size = window.innerHeight) => pos / 100 * size,\n \"vmax\": (pos, size = Math.max(window.innerWidth, window.innerHeight)) => pos / 100 * size,\n \"vmin\": (pos, size = Math.min(window.innerWidth, window.innerHeight)) => pos / 100 * size,\n};\n","import {\n UNDEFINED, STRING,\n OBJECT, FUNCTION,\n IS_WINDOW, OPEN_CLOSED_CHARACTER, NUMBER,\n DEFAULT_UNIT_PRESETS,\n TINY_NUM\n} from \"./consts\";\nimport { IArrayFormat, IObject } from \"./types\";\n/**\n* @namespace\n* @name Utils\n*/\n\n/**\n * Returns the inner product of two numbers(`a1`, `a2`) by two criteria(`b1`, `b2`).\n * @memberof Utils\n * @param - The first number\n * @param - The second number\n * @param - The first number to base on the inner product\n * @param - The second number to base on the inner product\n * @return - Returns the inner product\nimport { dot } from \"@daybrush/utils\";\n\nconsole.log(dot(0, 15, 2, 3)); // 6\nconsole.log(dot(5, 15, 2, 3)); // 9\nconsole.log(dot(5, 15, 1, 1)); // 10\n */\nexport function dot(a1: number, a2: number, b1: number, b2: number) {\n return (a1 * b2 + a2 * b1) / (b1 + b2);\n}\n/**\n* Check the type that the value is undefined.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {boolean} true if the type is correct, false otherwise\n* @example\nimport {isUndefined} from \"@daybrush/utils\";\n\nconsole.log(isUndefined(undefined)); // true\nconsole.log(isUndefined(\"\")); // false\nconsole.log(isUndefined(1)); // false\nconsole.log(isUndefined(null)); // false\n*/\nexport function isUndefined(value: any): value is undefined {\n return (typeof value === UNDEFINED);\n}\n/**\n* Check the type that the value is object.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isObject} from \"@daybrush/utils\";\n\nconsole.log(isObject({})); // true\nconsole.log(isObject(undefined)); // false\nconsole.log(isObject(\"\")); // false\nconsole.log(isObject(null)); // false\n*/\nexport function isObject(value: any): value is IObject<any> {\n return value && (typeof value === OBJECT);\n}\n/**\n* Check the type that the value is isArray.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isArray} from \"@daybrush/utils\";\n\nconsole.log(isArray([])); // true\nconsole.log(isArray({})); // false\nconsole.log(isArray(undefined)); // false\nconsole.log(isArray(null)); // false\n*/\nexport function isArray(value: any): value is any[] {\n return Array.isArray(value);\n}\n/**\n* Check the type that the value is string.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isString} from \"@daybrush/utils\";\n\nconsole.log(isString(\"1234\")); // true\nconsole.log(isString(undefined)); // false\nconsole.log(isString(1)); // false\nconsole.log(isString(null)); // false\n*/\nexport function isString(value: any): value is string {\n return typeof value === STRING;\n}\n\nexport function isNumber(value: any): value is number {\n return typeof value === NUMBER;\n}\n\n/**\n* Check the type that the value is function.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isFunction} from \"@daybrush/utils\";\n\nconsole.log(isFunction(function a() {})); // true\nconsole.log(isFunction(() => {})); // true\nconsole.log(isFunction(\"1234\")); // false\nconsole.log(isFunction(1)); // false\nconsole.log(isFunction(null)); // false\n*/\nexport function isFunction(value: any): value is (...args: any[]) => any {\n return typeof value === FUNCTION;\n}\n\nfunction findClosed(closedCharacter: string, texts: string[], index: number, length: number) {\n for (let i = index; i < length; ++i) {\n const character = texts[i].trim();\n\n if (character === closedCharacter) {\n return i;\n }\n let nextIndex = i;\n if (character === \"(\") {\n nextIndex = findClosed(\")\", texts, i + 1, length);\n } else if (OPEN_CLOSED_CHARACTER.indexOf(character) > -1) {\n nextIndex = findClosed(character, texts, i + 1, length);\n }\n if (nextIndex === -1) {\n break;\n }\n i = nextIndex;\n }\n return -1;\n}\nexport function splitText(text: string, separator: string) {\n const regexText = `(\\\\s*${separator || \",\"}\\\\s*|\\\\(|\\\\)|\"|'|\\\\\\\\\"|\\\\\\\\'|\\\\s+)`;\n const regex = new RegExp(regexText, \"g\");\n const texts = text.split(regex).filter(Boolean);\n const length = texts.length;\n const values: string[] = [];\n let tempValues: string[] = [];\n\n for (let i = 0; i < length; ++i) {\n const character = texts[i].trim();\n let nextIndex = i;\n\n if (character === \"(\") {\n nextIndex = findClosed(\")\", texts, i + 1, length);\n } else if (character === \")\") {\n throw new Error(\"invalid format\");\n } else if (OPEN_CLOSED_CHARACTER.indexOf(character) > -1) {\n nextIndex = findClosed(character, texts, i + 1, length);\n } else if (character === separator) {\n if (tempValues.length) {\n values.push(tempValues.join(\"\"));\n tempValues = [];\n }\n continue;\n }\n\n if (nextIndex === -1) {\n nextIndex = length - 1;\n }\n tempValues.push(texts.slice(i, nextIndex + 1).join(\"\"));\n i = nextIndex;\n }\n if (tempValues.length) {\n values.push(tempValues.join(\"\"));\n }\n return values;\n}\n\n/**\n* divide text by space.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {Array} divided texts\n* @example\nimport {spliceSpace} from \"@daybrush/utils\";\n\nconsole.log(splitSpace(\"a b c d e f g\"));\n// [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\"]\nconsole.log(splitSpace(\"'a,b' c 'd,e' f g\"));\n// [\"'a,b'\", \"c\", \"'d,e'\", \"f\", \"g\"]\n*/\nexport function splitSpace(text: string) {\n // divide comma(,)\n return splitText(text, \"\");\n}\n\n/**\n* divide text by comma.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {Array} divided texts\n* @example\nimport {splitComma} from \"@daybrush/utils\";\n\nconsole.log(splitComma(\"a,b,c,d,e,f,g\"));\n// [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\"]\nconsole.log(splitComma(\"'a,b',c,'d,e',f,g\"));\n// [\"'a,b'\", \"c\", \"'d,e'\", \"f\", \"g\"]\n*/\nexport function splitComma(text: string): string[] {\n // divide comma(,)\n // \"[^\"]*\"|'[^']*'\n return splitText(text, \",\");\n}\n/**\n* divide text by bracket \"(\", \")\".\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {object} divided texts\n* @example\nimport {splitBracket} from \"@daybrush/utils\";\n\nconsole.log(splitBracket(\"a(1, 2)\"));\n// {prefix: \"a\", value: \"1, 2\", suffix: \"\"}\nconsole.log(splitBracket(\"a(1, 2)b\"));\n// {prefix: \"a\", value: \"1, 2\", suffix: \"b\"}\n*/\nexport function splitBracket(text: string) {\n const matches = (/([^(]*)\\(([\\s\\S]*)\\)([\\s\\S]*)/g).exec(text);\n\n if (!matches || matches.length < 4) {\n return {};\n } else {\n return { prefix: matches[1], value: matches[2], suffix: matches[3] };\n }\n}\n/**\n* divide text by number and unit.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {} divided texts\n* @example\nimport {splitUnit} from \"@daybrush/utils\";\n\nconsole.log(splitUnit(\"10px\"));\n// {prefix: \"\", value: 10, unit: \"px\"}\nconsole.log(splitUnit(\"-10px\"));\n// {prefix: \"\", value: -10, unit: \"px\"}\nconsole.log(splitUnit(\"a10%\"));\n// {prefix: \"a\", value: 10, unit: \"%\"}\n*/\nexport function splitUnit(text: string): { prefix: string, unit: string, value: number } {\n const matches = /^([^\\d|e|\\-|\\+]*)((?:\\d|\\.|-|e-|e\\+)+)(\\S*)$/g.exec(text);\n\n if (!matches) {\n return { prefix: \"\", unit: \"\", value: NaN };\n }\n const prefix = matches[1];\n const value = matches[2];\n const unit = matches[3];\n\n return { prefix, unit, value: parseFloat(value) };\n}\n\n/**\n* transform strings to camel-case\n* @memberof Utils\n* @param {String} text - string\n* @return {String} camel-case string\n* @example\nimport {camelize} from \"@daybrush/utils\";\n\nconsole.log(camelize(\"transform-origin\")); // transformOrigin\nconsole.log(camelize(\"abcd_efg\")); // abcdEfg\nconsole.log(camelize(\"abcd efg\")); // abcdEfg\n*/\nexport function camelize(str: string) {\n return str.replace(/[\\s-_]([a-z])/g, (all, letter) => letter.toUpperCase());\n}\n/**\n* transform a camelized string into a lowercased string.\n* @memberof Utils\n* @param {string} text - a camel-cased string\n* @param {string} [separator=\"-\"] - a separator\n* @return {string} a lowercased string\n* @example\nimport {decamelize} from \"@daybrush/utils\";\n\nconsole.log(decamelize(\"transformOrigin\")); // transform-origin\nconsole.log(decamelize(\"abcdEfg\", \"_\")); // abcd_efg\n*/\nexport function decamelize(str: string, separator: string = \"-\") {\n return str.replace(/([a-z])([A-Z])/g, (all, letter, letter2) => `${letter}${separator}${letter2.toLowerCase()}`);\n}\n\n/**\n* transforms something in an array into an array.\n* @memberof Utils\n* @param - Array form\n* @return an array\n* @example\nimport {toArray} from \"@daybrush/utils\";\n\nconst arr1 = toArray(document.querySelectorAll(\".a\")); // Element[]\nconst arr2 = toArray(document.querySelectorAll<HTMLElement>(\".a\")); // HTMLElement[]\n*/\nexport function toArray<T>(value: IArrayFormat<T>): T[] {\n return [].slice.call(value);\n}\n\n/**\n* Date.now() method\n* @memberof CrossBrowser\n* @return {number} milliseconds\n* @example\nimport {now} from \"@daybrush/utils\";\n\nconsole.log(now()); // 12121324241(milliseconds)\n*/\nexport function now() {\n return Date.now ? Date.now() : new Date().getTime();\n}\n\n/**\n* Returns the index of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `findIndex` was called upon.\n* @param - A function to execute on each value in the array until the function returns true, indicating that the satisfying element was found.\n* @param - Returns defaultIndex if not found by the function.\n* @example\nimport { findIndex } from \"@daybrush/utils\";\n\nfindIndex([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // 1\n*/\nexport function findIndex<T>(\n arr: T[],\n callback: (element: T, index: number, arr: T[]) => any,\n defaultIndex: number = -1,\n): number {\n const length = arr.length;\n\n for (let i = 0; i < length; ++i) {\n if (callback(arr[i], i, arr)) {\n return i;\n }\n }\n return defaultIndex;\n}\n\n/**\n* Returns the value of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `find` was called upon.\n* @param - A function to execute on each value in the array,\n* @param - Returns defalutValue if not found by the function.\n* @example\nimport { find } from \"@daybrush/utils\";\n\nfind([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // {a: 2}\n*/\nexport function find<T>(\n arr: T[],\n callback: (element: T, index: number, arr: T[]) => any,\n defalutValue?: T,\n): T | undefined {\n const index = findIndex(arr, callback);\n\n return index > - 1 ? arr[index] : defalutValue;\n}\n\n/**\n* window.requestAnimationFrame() method with cross browser.\n* @function\n* @memberof CrossBrowser\n* @param {FrameRequestCallback} callback - The function to call when it's time to update your animation for the next repaint.\n* @return {number} id\n* @example\nimport {requestAnimationFrame} from \"@daybrush/utils\";\n\nrequestAnimationFrame((timestamp) => {\n console.log(timestamp);\n});\n*/\nexport const requestAnimationFrame = /*#__PURE__*/(() => {\n const firstTime = now();\n const raf = IS_WINDOW\n && (window.requestAnimationFrame || window.webkitRequestAnimationFrame\n || (window as any).mozRequestAnimationFrame || (window as any).msRequestAnimationFrame);\n\n return raf ? (raf.bind(window) as (callback: FrameRequestCallback) => number) : ((callback: FrameRequestCallback) => {\n const currTime = now();\n const id = window.setTimeout(() => {\n callback(currTime - firstTime);\n }, 1000 / 60);\n return id;\n });\n})();\n\n/**\n* window.cancelAnimationFrame() method with cross browser.\n* @function\n* @memberof CrossBrowser\n* @param {number} handle - the id obtained through requestAnimationFrame method\n* @return {void}\n* @example\nimport { requestAnimationFrame, cancelAnimationFrame } from \"@daybrush/utils\";\n\nconst id = requestAnimationFrame((timestamp) => {\n console.log(timestamp);\n});\n\ncancelAnimationFrame(id);\n*/\nexport const cancelAnimationFrame = /*#__PURE__*/(() => {\n const caf = IS_WINDOW\n && (window.cancelAnimationFrame || window.webkitCancelAnimationFrame\n || (window as any).mozCancelAnimationFrame || (window as any).msCancelAnimationFrame);\n\n return caf\n ? caf.bind(window) as (handle: number) => void\n : ((handle: number) => { clearTimeout(handle); });\n})();\n/**\n* @function\n* @memberof Utils\n*/\nexport function getKeys(obj: IObject<any>): string[] {\n if (Object.keys) {\n return Object.keys(obj);\n }\n const keys: string[] = [];\n for (const name in keys) {\n keys.push(name);\n }\n return keys;\n}\n\n/**\n* @function\n* @memberof Utils\n*/\nexport function sortOrders(keys: Array<string | number>, orders: Array<string | number> = []) {\n keys.sort((a, b) => {\n const index1 = orders.indexOf(a);\n const index2 = orders.indexOf(b);\n\n if (index2 === -1 && index1 === -1) {\n return 0;\n }\n if (index1 === -1) {\n return 1;\n }\n if (index2 === -1) {\n return -1;\n }\n return index1 - index2;\n });\n}\n\n/**\n* convert unit size to px size\n* @function\n* @memberof Utils\n*/\nexport function convertUnitSize(pos: string, size: number | IObject<((pos: number) => number) | number>) {\n const { value, unit } = splitUnit(pos);\n\n if (isObject(size)) {\n const sizeFunction = size[unit];\n if (sizeFunction) {\n if (isFunction(sizeFunction)) {\n return sizeFunction(value);\n } else if (DEFAULT_UNIT_PRESETS[unit]) {\n return DEFAULT_UNIT_PRESETS[unit](value, sizeFunction);\n }\n }\n } else if (unit === \"%\") {\n return value * size / 100;\n }\n if (DEFAULT_UNIT_PRESETS[unit]) {\n return DEFAULT_UNIT_PRESETS[unit](value);\n }\n return value;\n}\n\n/**\n* calculate between min, max\n* @function\n* @memberof Utils\n*/\nexport function between(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(value, max));\n}\n\nexport function checkBoundSize(targetSize: number[], compareSize: number[], isMax: boolean) {\n return [\n [throttle(compareSize[0], TINY_NUM), throttle(compareSize[0] * targetSize[1] / targetSize[0], TINY_NUM)],\n [throttle(compareSize[1] * targetSize[0] / targetSize[1], TINY_NUM), throttle(compareSize[1], TINY_NUM)],\n ].filter(size => size.every((value, i) => {\n return isMax ? value <= compareSize[i] : value >= compareSize[i];\n }))[0] || targetSize;\n}\n\n/**\n* calculate bound size\n* @function\n* @memberof Utils\n*/\nexport function calculateBoundSize(\n size: number[], minSize: number[],\n maxSize: number[], keepRatio?: boolean,\n): number[] {\n if (!keepRatio) {\n return size.map((value, i) => between(value, minSize[i], maxSize[i]));\n }\n let [width, height] = size;\n // width : height = minWidth : minHeight;\n const [minWidth, minHeight] = checkBoundSize(size, minSize, false);\n const [maxWidth, maxHeight] = checkBoundSize(size, maxSize, true);\n\n if (width < minWidth || height < minHeight) {\n width = minWidth;\n height = minHeight;\n } else if (width > maxWidth || height > maxHeight) {\n width = maxWidth;\n height = maxHeight;\n }\n return [width, height];\n}\n\n\n/**\n* Add all the numbers.\n* @function\n* @memberof Utils\n*/\nexport function sum(nums: number[]): number {\n const length = nums.length;\n let total = 0;\n\n for (let i = length - 1; i >= 0; --i) {\n total += nums[i];\n }\n return total;\n}\n\n/**\n* Average all numbers.\n* @function\n* @memberof Utils\n*/\nexport function average(nums: number[]) {\n const length = nums.length;\n let total = 0;\n\n for (let i = length - 1; i >= 0; --i) {\n total += nums[i];\n }\n return length ? total / length : 0;\n}\n/**\n* Get the angle of two points. (0 <= rad < 359)\n* @function\n* @memberof Utils\n*/\nexport function getRad(pos1: number[], pos2: number[]): number {\n const distX = pos2[0] - pos1[0];\n const distY = pos2[1] - pos1[1];\n const rad = Math.atan2(distY, distX);\n\n return rad >= 0 ? rad : rad + Math.PI * 2;\n}\n/**\n* Get the average point of all points.\n* @function\n* @memberof Utils\n*/\nexport function getCenterPoint(points: number[][]): number[] {\n return [0, 1].map(i => average(points.map(pos => pos[i])));\n}\n/**\n* Gets the direction of the shape.\n* @function\n* @memberof Utils\n*/\nexport function getShapeDirection(points: number[][]): 1 | -1 {\n const center = getCenterPoint(points);\n const pos1Rad = getRad(center, points[0]);\n const pos2Rad = getRad(center, points[1]);\n\n return (pos1Rad < pos2Rad && pos2Rad - pos1Rad < Math.PI) || (pos1Rad > pos2Rad && pos2Rad - pos1Rad < -Math.PI)\n ? 1 : -1;\n}\n\n/**\n* Get the distance between two points.\n* @function\n* @memberof Utils\n*/\nexport function getDist(a: number[], b?: number[]) {\n return Math.sqrt(Math.pow((b ? b[0] : 0) - a[0], 2) + Math.pow((b ? b[1] : 0) - a[1], 2));\n}\n\n/**\n* throttle number depending on the unit.\n* @function\n* @memberof Utils\n*/\nexport function throttle(num: number, unit?: number) {\n if (!unit) {\n return num;\n }\n return Math.round(num / unit) * unit;\n}\n\n/**\n* throttle number array depending on the unit.\n* @function\n* @memberof Utils\n*/\nexport function throttleArray(nums: number[], unit?: number) {\n nums.forEach((_, i) => {\n nums[i] = throttle(nums[i], unit);\n });\n return nums;\n}\n","import { RGB, RGBA, HSL, HSLA } from \"./consts\";\nimport { splitBracket, splitComma } from \"./utils\";\n\n/**\n* @namespace\n* @name Color\n*/\n\n/**\n* Remove the # from the hex color.\n* @memberof Color\n* @param {} hex - hex color\n* @return {} hex color\n* @example\nimport {cutHex} from \"@daybrush/utils\";\n\nconsole.log(cutHex(\"#000000\")) // \"000000\"\n*/\nexport function cutHex(hex: string) {\n return hex.replace(\"#\", \"\");\n}\n/**\n* convert hex color to rgb color.\n* @memberof Color\n* @param {} hex - hex color\n* @return {} rgb color\n* @example\nimport {hexToRGBA} from \"@daybrush/utils\";\n\nconsole.log(hexToRGBA(\"#00000005\"));\n// [0, 0, 0, 1]\nconsole.log(hexToRGBA(\"#201045\"));\n// [32, 16, 69, 1]\n*/\nexport function hexToRGBA(hex: string): [number, number, number, number] {\n const h = cutHex(hex);\n const r = parseInt(h.substring(0, 2), 16);\n const g = parseInt(h.substring(2, 4), 16);\n const b = parseInt(h.substring(4, 6), 16);\n let a = parseInt(h.substring(6, 8), 16) / 255;\n\n if (isNaN(a)) {\n a = 1;\n }\n return [r, g, b, a];\n}\n\n/**\n* convert 3(or 4)-digit hex color to 6(or 8)-digit hex color.\n* @memberof Color\n* @param {} hex - 3(or 4)-digit hex color\n* @return {} 6(or 8)-digit hex color\n* @example\nimport {toFullHex} from \"@daybrush/utils\";\n\nconsole.log(toFullHex(\"#123\")); // \"#112233\"\nconsole.log(toFullHex(\"#123a\")); // \"#112233aa\"\n*/\nexport function toFullHex(h: string): string {\n const r = h.charAt(1);\n const g = h.charAt(2);\n const b = h.charAt(3);\n const a = h.charAt(4);\n const arr = [\"#\", r, r, g, g, b, b, a, a];\n\n return arr.join(\"\");\n}\n/**\n* convert hsl color to rgba color.\n* @memberof Color\n* @param {} hsl - hsl color(hue: 0 ~ 360, saturation: 0 ~ 1, lightness: 0 ~ 1, alpha: 0 ~ 1)\n* @return {} rgba color\n* @example\nimport {hslToRGBA} from \"@daybrush/utils\";\n\nconsole.log(hslToRGBA([150, 0.5, 0.4]));\n// [51, 153, 102, 1]\n*/\nexport function hslToRGBA(hsl: readonly [number, number, number, number?]): [number, number, number, number] {\n let h = hsl[0];\n const s = hsl[1];\n const l = hsl[2];\n\n if (h < 0) {\n h += Math.floor((Math.abs(h) + 360) / 360) * 360;\n }\n h %= 360;\n\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs((h / 60) % 2 - 1));\n const m = l - c / 2;\n let rgb: [number, number, number];\n\n if (h < 60) {\n rgb = [c, x, 0];\n } else if (h < 120) {\n rgb = [x, c, 0];\n } else if (h < 180) {\n rgb = [0, c, x];\n } else if (h < 240) {\n rgb = [0, x, c];\n } else if (h < 300) {\n rgb = [x, 0, c];\n } else if (h < 360) {\n rgb = [c, 0, x];\n } else {\n rgb = [0, 0, 0];\n }\n\n return [\n Math.round((rgb[0] + m) * 255),\n Math.round((rgb[1] + m) * 255),\n Math.round((rgb[2] + m) * 255),\n hsl[3] ?? 1,\n ];\n}\n/**\n* convert string to rgba color.\n* @memberof Color\n* @param {} - 3-hex(#000), 4-hex(#0000) 6-hex(#000000), 8-hex(#00000000) or RGB(A), or HSL(A)\n* @return {} rgba color\n* @example\nimport {stringToRGBA} from \"@daybrush/utils\";\n\nconsole.log(stringToRGBA(\"#000000\")); // [0, 0, 0, 1]\nconsole.log(stringToRGBA(\"rgb(100, 100, 100)\")); // [100, 100, 100, 1]\nconsole.log(stringToRGBA(\"hsl(150, 0.5, 0.4)\")); // [51, 153, 102, 1]\n*/\nexport function stringToRGBA(color: string): [number, number, number, number] {\n if (color.charAt(0) === \"#\") {\n if (color.length === 4 || color.length === 5) {\n return hexToRGBA(toFullHex(color));\n } else {\n return hexToRGBA(color);\n }\n } else if (color.indexOf(\"(\") !== -1) {\n // in bracket.\n const {prefix, value} = splitBracket(color);\n\n if (!prefix || !value) {\n return undefined as never;\n }\n const arr = splitComma(value);\n const colorArr: [number, number, number, number] = [0, 0, 0, 1];\n const length = arr.length;\n\n switch (prefix) {\n case RGB:\n case RGBA:\n for (let i = 0; i < length; ++i) {\n colorArr[i] = parseFloat(arr[i]);\n }\n return colorArr;\n case HSL:\n case HSLA:\n for (let i = 0; i < length; ++i) {\n if (arr[i].indexOf(\"%\") !== -1) {\n colorArr[i] = parseFloat(arr[i]) / 100;\n } else {\n colorArr[i] = parseFloat(arr[i]);\n }\n }\n // hsl, hsla to rgba\n return hslToRGBA(colorArr);\n }\n }\n return undefined as never;\n}\n","import { document } from \"./consts\";\nimport { IObject, IEventMap } from \"./types\";\n\n/**\n * @namespace DOM\n */\n\nexport function $<K extends keyof HTMLElementTagNameMap>(selectors: K, multi: true):\n NodeListOf<HTMLElementTagNameMap[K]>;\nexport function $<K extends keyof SVGElementTagNameMap>(selectors: K, multi: true): NodeListOf<SVGElementTagNameMap[K]>;\nexport function $<E extends Element = Element>(selectors: string, multi: true): NodeListOf<E>;\n\nexport function $<K extends keyof HTMLElementTagNameMap>(selectors: K, multi?: false): HTMLElementTagNameMap[K] | null;\nexport function $<K extends keyof SVGElementTagNameMap>(selectors: K, multi?: false): SVGElementTagNameMap[K] | null;\nexport function $<E extends Element = Element>(selectors: string, multi?: false): E | null;\n/**\n * Returns all element descendants of node that\n * match selectors.\n */\n\n/**\n * Checks if the specified class value exists in the element's class attribute.\n * @memberof DOM\n * @param - A DOMString containing one or more selectors to match\n * @param - If multi is true, a DOMString containing one or more selectors to match against.\n * @example\nimport {$} from \"@daybrush/utils\";\n\nconsole.log($(\"div\")); // div element\nconsole.log($(\"div\", true)); // [div, div] elements\n*/\nexport function $<E extends Element = Element>(selectors: string, multi?: boolean): E | NodeListOf<E> | null {\n return multi ? document.querySelectorAll<E>(selectors) : document.querySelector<E>(selectors);\n}\n\n/**\n* Checks if the specified class value exists in the element's class attribute.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to search\n* @return {boolean} return false if the class is not found.\n* @example\nimport {hasClass} from \"@daybrush/utils\";\n\nconsole.log(hasClass(element, \"start\")); // true or false\n*/\nexport function hasClass(element: Element, className: string) {\n if (element.classList) {\n return element.classList.contains(className);\n }\n return !!element.className.match(new RegExp(`(\\\\s|^)${className}(\\\\s|$)`));\n}\n\n/**\n* Add the specified class value. If these classe already exist in the element's class attribute they are ignored.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to add\n* @example\nimport {addClass} from \"@daybrush/utils\";\n\naddClass(element, \"start\");\n*/\nexport function addClass(element: Element, className: string) {\n if (element.classList) {\n element.classList.add(className);\n } else {\n element.className += ` ${className}`;\n }\n}\n\n/**\n* Removes the specified class value.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to remove\n* @example\nimport {removeClass} from \"@daybrush/utils\";\n\nremoveClass(element, \"start\");\n*/\nexport function removeClass(element: Element, className: string) {\n if (element.classList) {\n element.classList.remove(className);\n } else {\n const reg = new RegExp(`(\\\\s|^)${className}(\\\\s|$)`);\n\n element.className = element.className.replace(reg, \" \");\n }\n}\n\n/**\n* Gets the CSS properties from the element.\n* @memberof DOM\n* @param elements - elements\n* @param properites - the CSS properties\n* @return returns CSS properties and values.\n* @example\nimport {fromCSS} from \"@daybrush/utils\";\n\nconsole.log(fromCSS(element, [\"left\", \"opacity\", \"top\"])); // {\"left\": \"10px\", \"opacity\": 1, \"top\": \"10px\"}\n*/\nexport function fromCSS(\n elements: Element | Element[] | NodeListOf<Element>, properties: string[]): IObject<any> {\n if (!elements || !properties || !properties.length) {\n return {};\n }\n let element;\n\n if (elements instanceof Element) {\n element = elements;\n } else if (elements.length) {\n element = elements[0];\n } else {\n return {};\n }\n const cssObject: IObject<any> = {};\n const styles = window.getComputedStyle(element) as any;\n const length = properties.length;\n\n for (let i = 0; i < length; ++i) {\n cssObject[properties[i]] = styles[properties[i]];\n }\n return cssObject;\n}\n\nexport function addEvent<K extends keyof IEventMap>(\n el: EventTarget, type: K, listener: (e: IEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;\n/**\n* Sets up a function that will be called whenever the specified event is delivered to the target\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The object which receives a notification (an object that implements the Event interface) when an event of the specified type occurs\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent} from \"@daybrush/utils\";\n\naddEvent(el, \"click\", e => {\n console.log(e);\n});\n*/\nexport function addEvent(\n el: EventTarget,\n type: string, listener: (e: Event) => void,\n options?: boolean | AddEventListenerOptions) {\n el.addEventListener(type, listener, options);\n}\n\nexport function removeEvent<K extends keyof IEventMap>(\n el: EventTarget, type: K, listener: (e: IEventMap[K]) => void, options?: boolean | EventListenerOptions): void;\n/**\n* removes from the EventTarget an event listener previously registered with EventTarget.addEventListener()\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The EventListener function of the event handler to remove from the event target.\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent, removeEvent} from \"@daybrush/utils\";\nconst listener = e => {\n console.log(e);\n};\naddEvent(el, \"click\", listener);\nremoveEvent(el, \"click\", listener);\n*/\nexport function removeEvent(\n el: EventTarget, type: string,\n listener: (e: Event) => void,\n options?: boolean | EventListenerOptions,\n) {\n el.removeEventListener(type, listener, options);\n}\n"],"names":["RGB","RGBA","HSL","HSLA","COLOR_MODELS","FUNCTION","PROPERTY","ARRAY","OBJECT","STRING","NUMBER","UNDEFINED","IS_WINDOW","window","doc","document","prefixes","getCrossBrowserProperty","property","styles","body","documentElement","style","length","i","name","TRANSFORM","FILTER","ANIMATION","KEYFRAMES","replace","OPEN_CLOSED_CHARACTER","TINY_NUM","DEFAULT_UNIT_PRESETS","pos","size","innerWidth","innerHeight","Math","max","min","dot","a1","a2","b1","b2","isUndefined","value","isObject","isArray","Array","isString","isNumber","isFunction","findClosed","closedCharacter","texts","index","character","trim","nextIndex","indexOf","splitText","text","separator","regexText","regex","RegExp","split","filter","Boolean","values","tempValues","Error","push","join","slice","splitSpace","splitComma","splitBracket","matches","exec","prefix","suffix","splitUnit","unit","NaN","parseFloat","camelize","str","all","letter","toUpperCase","decamelize","letter2","toLowerCase","toArray","call","now","Date","getTime","findIndex","arr","callback","defaultIndex","find","defalutValue","requestAnimationFrame","firstTime","raf","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","bind","currTime","id","setTimeout","cancelAnimationFrame","caf","webkitCancelAnimationFrame","mozCancelAnimationFrame","msCancelAnimationFrame","handle","clearTimeout","getKeys","obj","Object","keys","sortOrders","orders","sort","a","b","index1","index2","convertUnitSize","_a","sizeFunction","between","checkBoundSize","targetSize","compareSize","isMax","throttle","every","calculateBoundSize","minSize","maxSize","keepRatio","map","width","height","minWidth","minHeight","_b","maxWidth","maxHeight","sum","nums","total","average","getRad","pos1","pos2","distX","distY","rad","atan2","PI","getCenterPoint","points","getShapeDirection","center","pos1Rad","pos2Rad","getDist","sqrt","pow","num","round","throttleArray","forEach","_","cutHex","hex","hexToRGBA","h","r","parseInt","substring","g","isNaN","toFullHex","charAt","hslToRGBA","hsl","s","l","floor","abs","c","x","m","rgb","stringToRGBA","color","undefined","colorArr","$","selectors","multi","querySelectorAll","querySelector","hasClass","element","className","classList","contains","match","addClass","add","removeClass","remove","reg","fromCSS","elements","properties","Element","cssObject","getComputedStyle","addEvent","el","type","listener","options","addEventListener","removeEvent","removeEventListener"],"mappings":"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"} | ||
| {"version":3,"file":"utils.js","sources":["../src/consts.ts","../src/utils.ts","../src/color.ts","../src/dom.ts"],"sourcesContent":["/**\n* @namespace\n* @name Consts\n*/\n\nimport { IObject, OpenCloseCharacter } from \"./types\";\n\n/**\n* get string \"rgb\"\n* @memberof Color\n* @example\nimport {RGB} from \"@daybrush/utils\";\n\nconsole.log(RGB); // \"rgb\"\n*/\nexport const RGB = \"rgb\";\n/**\n* get string \"rgba\"\n* @memberof Color\n* @example\nimport {RGBA} from \"@daybrush/utils\";\n\nconsole.log(RGBA); // \"rgba\"\n*/\nexport const RGBA = \"rgba\";\n/**\n* get string \"hsl\"\n* @memberof Color\n* @example\nimport {HSL} from \"@daybrush/utils\";\n\nconsole.log(HSL); // \"hsl\"\n*/\nexport const HSL = \"hsl\";\n/**\n* get string \"hsla\"\n* @memberof Color\n* @example\nimport {HSLA} from \"@daybrush/utils\";\n\nconsole.log(HSLA); // \"hsla\"\n*/\nexport const HSLA = \"hsla\";\n/**\n* gets an array of color models.\n* @memberof Color\n* @example\nimport {COLOR_MODELS} from \"@daybrush/utils\";\n\nconsole.log(COLOR_MODELS); // [\"rgb\", \"rgba\", \"hsl\", \"hsla\"];\n*/\nexport const COLOR_MODELS = [RGB, RGBA, HSL, HSLA];\n\n/**\n* get string \"function\"\n* @memberof Consts\n* @example\nimport {FUNCTION} from \"@daybrush/utils\";\n\nconsole.log(FUNCTION); // \"function\"\n*/\nexport const FUNCTION = \"function\";\n/**\n* get string \"property\"\n* @memberof Consts\n* @example\nimport {PROPERTY} from \"@daybrush/utils\";\n\nconsole.log(PROPERTY); // \"property\"\n*/\nexport const PROPERTY = \"property\";\n/**\n* get string \"array\"\n* @memberof Consts\n* @example\nimport {ARRAY} from \"@daybrush/utils\";\n\nconsole.log(ARRAY); // \"array\"\n*/\nexport const ARRAY = \"array\";\n/**\n* get string \"object\"\n* @memberof Consts\n* @example\nimport {OBJECT} from \"@daybrush/utils\";\n\nconsole.log(OBJECT); // \"object\"\n*/\nexport const OBJECT = \"object\";\n/**\n* get string \"string\"\n* @memberof Consts\n* @example\nimport {STRING} from \"@daybrush/utils\";\n\nconsole.log(STRING); // \"string\"\n*/\nexport const STRING = \"string\";\n/**\n* get string \"number\"\n* @memberof Consts\n* @example\nimport {NUMBER} from \"@daybrush/utils\";\n\nconsole.log(NUMBER); // \"number\"\n*/\nexport const NUMBER = \"number\";\n/**\n* get string \"undefined\"\n* @memberof Consts\n* @example\nimport {UNDEFINED} from \"@daybrush/utils\";\n\nconsole.log(UNDEFINED); // \"undefined\"\n*/\nexport const UNDEFINED = \"undefined\";\n\n/**\n* Check whether the environment is window or node.js.\n* @memberof Consts\n* @example\nimport {IS_WINDOW} from \"@daybrush/utils\";\n\nconsole.log(IS_WINDOW); // false in node.js\nconsole.log(IS_WINDOW); // true in browser\n*/\nexport const IS_WINDOW = typeof window !== UNDEFINED;\n\n/**\n* Check whether the environment is window or node.js.\n* @memberof Consts\n* @name document\n* @example\nimport {IS_WINDOW} from \"@daybrush/utils\";\n\nconsole.log(IS_WINDOW); // false in node.js\nconsole.log(IS_WINDOW); // true in browser\n*/\nconst doc = (typeof document !== UNDEFINED && document) as Document; // FIXME: this type maybe false\n\nexport {doc as document};\n\nconst prefixes: string[] = [\"webkit\", \"ms\", \"moz\", \"o\"];\n\n/**\n * @namespace CrossBrowser\n */\n\n/**\n* Get a CSS property with a vendor prefix that supports cross browser.\n* @function\n* @param {string} property - A CSS property\n* @return {string} CSS property with cross-browser vendor prefix\n* @memberof CrossBrowser\n* @example\nimport {getCrossBrowserProperty} from \"@daybrush/utils\";\n\nconsole.log(getCrossBrowserProperty(\"transform\")); // \"transform\", \"-ms-transform\", \"-webkit-transform\"\nconsole.log(getCrossBrowserProperty(\"filter\")); // \"filter\", \"-webkit-filter\"\n*/\nexport const getCrossBrowserProperty = /*#__PURE__*/(property: string) => {\n if (!doc) {\n return \"\";\n }\n const styles = (doc.body || doc.documentElement).style as any;\n const length = prefixes.length;\n\n if (typeof styles[property] !== UNDEFINED) {\n return property;\n }\n for (let i = 0; i < length; ++i) {\n const name = `-${prefixes[i]}-${property}`;\n\n if (typeof styles[name] !== UNDEFINED) {\n return name;\n }\n }\n return \"\";\n};\n\n/**\n* get string \"transfrom\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {TRANSFORM} from \"@daybrush/utils\";\n\nconsole.log(TRANSFORM); // \"transform\", \"-ms-transform\", \"-webkit-transform\"\n*/\nexport const TRANSFORM = /*#__PURE__*/getCrossBrowserProperty(\"transform\");\n/**\n* get string \"filter\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {FILTER} from \"@daybrush/utils\";\n\nconsole.log(FILTER); // \"filter\", \"-ms-filter\", \"-webkit-filter\"\n*/\nexport const FILTER = /*#__PURE__*/getCrossBrowserProperty(\"filter\");\n/**\n* get string \"animation\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {ANIMATION} from \"@daybrush/utils\";\n\nconsole.log(ANIMATION); // \"animation\", \"-ms-animation\", \"-webkit-animation\"\n*/\nexport const ANIMATION = /*#__PURE__*/getCrossBrowserProperty(\"animation\");\n/**\n* get string \"keyframes\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {KEYFRAMES} from \"@daybrush/utils\";\n\nconsole.log(KEYFRAMES); // \"keyframes\", \"-ms-keyframes\", \"-webkit-keyframes\"\n*/\nexport const KEYFRAMES = /*#__PURE__*/ANIMATION.replace(\"animation\", \"keyframes\");\n\nexport const OPEN_CLOSED_CHARACTERS: OpenCloseCharacter[] = [\n { open: \"(\", close: \")\" },\n { open: `\"`, close: `\"`},\n { open: `'`, close: `'`},\n { open: `\\\\\"`, close: `\\\\\"`},\n { open: `\\\\'`, close: `\\\\'`},\n];\nexport const TINY_NUM = 0.0000001;\nexport const DEFAULT_UNIT_PRESETS: IObject<(pos: number, size?: number) => number> = {\n \"cm\": pos => pos * 96 / 2.54,\n \"mm\": pos => pos * 96 / 254,\n \"in\": pos => pos * 96,\n \"pt\": pos => pos * 96 / 72,\n \"pc\": pos => pos * 96 / 6,\n \"%\": (pos, size) => pos * size! / 100,\n \"vw\": (pos, size = window.innerWidth) => pos / 100 * size,\n \"vh\": (pos, size = window.innerHeight) => pos / 100 * size,\n \"vmax\": (pos, size = Math.max(window.innerWidth, window.innerHeight)) => pos / 100 * size,\n \"vmin\": (pos, size = Math.min(window.innerWidth, window.innerHeight)) => pos / 100 * size,\n};\n","import {\n UNDEFINED, STRING,\n OBJECT, FUNCTION,\n IS_WINDOW, OPEN_CLOSED_CHARACTERS, NUMBER,\n DEFAULT_UNIT_PRESETS,\n TINY_NUM\n} from \"./consts\";\nimport { IArrayFormat, IObject, OpenCloseCharacter, SplitOptions } from \"./types\";\n/**\n* @namespace\n* @name Utils\n*/\n\n/**\n * Returns the inner product of two numbers(`a1`, `a2`) by two criteria(`b1`, `b2`).\n * @memberof Utils\n * @param - The first number\n * @param - The second number\n * @param - The first number to base on the inner product\n * @param - The second number to base on the inner product\n * @return - Returns the inner product\nimport { dot } from \"@daybrush/utils\";\n\nconsole.log(dot(0, 15, 2, 3)); // 6\nconsole.log(dot(5, 15, 2, 3)); // 9\nconsole.log(dot(5, 15, 1, 1)); // 10\n */\nexport function dot(a1: number, a2: number, b1: number, b2: number) {\n return (a1 * b2 + a2 * b1) / (b1 + b2);\n}\n/**\n* Check the type that the value is undefined.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {boolean} true if the type is correct, false otherwise\n* @example\nimport {isUndefined} from \"@daybrush/utils\";\n\nconsole.log(isUndefined(undefined)); // true\nconsole.log(isUndefined(\"\")); // false\nconsole.log(isUndefined(1)); // false\nconsole.log(isUndefined(null)); // false\n*/\nexport function isUndefined(value: any): value is undefined {\n return (typeof value === UNDEFINED);\n}\n/**\n* Check the type that the value is object.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isObject} from \"@daybrush/utils\";\n\nconsole.log(isObject({})); // true\nconsole.log(isObject(undefined)); // false\nconsole.log(isObject(\"\")); // false\nconsole.log(isObject(null)); // false\n*/\nexport function isObject(value: any): value is IObject<any> {\n return value && (typeof value === OBJECT);\n}\n/**\n* Check the type that the value is isArray.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isArray} from \"@daybrush/utils\";\n\nconsole.log(isArray([])); // true\nconsole.log(isArray({})); // false\nconsole.log(isArray(undefined)); // false\nconsole.log(isArray(null)); // false\n*/\nexport function isArray(value: any): value is any[] {\n return Array.isArray(value);\n}\n/**\n* Check the type that the value is string.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isString} from \"@daybrush/utils\";\n\nconsole.log(isString(\"1234\")); // true\nconsole.log(isString(undefined)); // false\nconsole.log(isString(1)); // false\nconsole.log(isString(null)); // false\n*/\nexport function isString(value: any): value is string {\n return typeof value === STRING;\n}\n\nexport function isNumber(value: any): value is number {\n return typeof value === NUMBER;\n}\n\n/**\n* Check the type that the value is function.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isFunction} from \"@daybrush/utils\";\n\nconsole.log(isFunction(function a() {})); // true\nconsole.log(isFunction(() => {})); // true\nconsole.log(isFunction(\"1234\")); // false\nconsole.log(isFunction(1)); // false\nconsole.log(isFunction(null)); // false\n*/\nexport function isFunction(value: any): value is (...args: any[]) => any {\n return typeof value === FUNCTION;\n}\nfunction isEqualSeparator(\n character: string,\n separator: string,\n) {\n const isCharacterSpace = character === \"\" || character == \" \";\n const isSeparatorSpace = separator === \"\" || separator == \" \";\n\n return (isSeparatorSpace && isCharacterSpace) || character === separator;\n}\nfunction findOpen(\n openCharacter: OpenCloseCharacter,\n texts: string[],\n index: number,\n length: number,\n openCloseCharacters: OpenCloseCharacter[],\n) {\n const isIgnore = findIgnore(openCharacter, texts, index);\n\n if (!isIgnore) {\n return findClose(openCharacter, texts, index + 1, length, openCloseCharacters);\n }\n return index;\n}\nfunction findIgnore(\n character: OpenCloseCharacter,\n texts: string[],\n index: number,\n) {\n if (!character.ignore) {\n return null;\n }\n const otherText = texts.slice(Math.max(index - 3, 0), index + 3).join(\"\");\n\n return new RegExp(character.ignore).exec(otherText);\n\n}\nfunction findClose(\n closeCharacter: OpenCloseCharacter,\n texts: string[],\n index: number,\n length: number,\n openCloseCharacters: OpenCloseCharacter[],\n) {\n for (let i = index; i < length; ++i) {\n const character = texts[i].trim();\n\n if (character === closeCharacter.close && !findIgnore(closeCharacter, texts, i)) {\n return i;\n }\n let nextIndex = i;\n // re open\n const openCharacter = find(openCloseCharacters, ({ open }) => open === character);\n\n if (openCharacter) {\n nextIndex = findOpen(openCharacter, texts, i, length, openCloseCharacters);\n }\n if (nextIndex === -1) {\n break;\n }\n i = nextIndex;\n }\n return -1;\n}\n\nexport function splitText(\n text: string,\n splitOptions: string | SplitOptions,\n) {\n const {\n separator = \",\",\n isSeparateFirst,\n isSeparateOnlyOpenClose,\n isSeparateOpenClose = isSeparateOnlyOpenClose,\n openCloseCharacters = OPEN_CLOSED_CHARACTERS,\n } = isString(splitOptions) ? {\n separator: splitOptions,\n } as SplitOptions : splitOptions;\n const openClosedText = openCloseCharacters.map(({ open, close }) => {\n if (open === close) {\n return open;\n }\n return `${open}|${close}`;\n }).join(\"|\");\n const regexText = `(\\\\s*${separator}\\\\s*|${openClosedText}|\\\\s+)`;\n const regex = new RegExp(regexText, \"g\");\n const texts = text.split(regex).filter(Boolean);\n const length = texts.length;\n const values: string[] = [];\n let tempValues: string[] = [];\n\n function resetTemp() {\n if (tempValues.length) {\n values.push(tempValues.join(\"\"));\n tempValues = [];\n\n return true;\n }\n return false;\n }\n for (let i = 0; i < length; ++i) {\n const character = texts[i].trim();\n let nextIndex = i;\n\n\n const openCharacter = find(openCloseCharacters, ({ open }) => open === character);\n const closeCharacter = find(openCloseCharacters, ({ close }) => close === character);\n\n if (openCharacter) {\n nextIndex = findOpen(openCharacter, texts, i, length, openCloseCharacters);\n\n if (nextIndex !== -1 && isSeparateOpenClose) {\n if (resetTemp() && isSeparateFirst) {\n break;\n }\n values.push(texts.slice(i, nextIndex + 1).join(\"\"));\n i = nextIndex;\n\n if (isSeparateFirst) {\n break;\n }\n continue;\n }\n } else if (closeCharacter && !findIgnore(closeCharacter, texts, i)) {\n throw new Error(`invalid format: ${closeCharacter.close}`);\n } else if (isEqualSeparator(character, separator) && !isSeparateOnlyOpenClose) {\n resetTemp();\n if (isSeparateFirst) {\n break;\n }\n continue;\n }\n\n if (nextIndex === -1) {\n nextIndex = length - 1;\n }\n tempValues.push(texts.slice(i, nextIndex + 1).join(\"\"));\n i = nextIndex;\n }\n if (tempValues.length) {\n values.push(tempValues.join(\"\"));\n }\n return values;\n}\n\n/**\n* divide text by space.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {Array} divided texts\n* @example\nimport {spliceSpace} from \"@daybrush/utils\";\n\nconsole.log(splitSpace(\"a b c d e f g\"));\n// [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\"]\nconsole.log(splitSpace(\"'a,b' c 'd,e' f g\"));\n// [\"'a,b'\", \"c\", \"'d,e'\", \"f\", \"g\"]\n*/\nexport function splitSpace(text: string) {\n // divide comma(space)\n return splitText(text, \"\");\n}\n\n/**\n* divide text by comma.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {Array} divided texts\n* @example\nimport {splitComma} from \"@daybrush/utils\";\n\nconsole.log(splitComma(\"a,b,c,d,e,f,g\"));\n// [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\"]\nconsole.log(splitComma(\"'a,b',c,'d,e',f,g\"));\n// [\"'a,b'\", \"c\", \"'d,e'\", \"f\", \"g\"]\n*/\nexport function splitComma(text: string): string[] {\n // divide comma(,)\n // \"[^\"]*\"|'[^']*'\n return splitText(text, \",\");\n}\n/**\n* divide text by bracket \"(\", \")\".\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {object} divided texts\n* @example\nimport {splitBracket} from \"@daybrush/utils\";\n\nconsole.log(splitBracket(\"a(1, 2)\"));\n// {prefix: \"a\", value: \"1, 2\", suffix: \"\"}\nconsole.log(splitBracket(\"a(1, 2)b\"));\n// {prefix: \"a\", value: \"1, 2\", suffix: \"b\"}\n*/\nexport function splitBracket(text: string) {\n const matches = (/([^(]*)\\(([\\s\\S]*)\\)([\\s\\S]*)/g).exec(text);\n\n if (!matches || matches.length < 4) {\n return {};\n } else {\n return { prefix: matches[1], value: matches[2], suffix: matches[3] };\n }\n}\n/**\n* divide text by number and unit.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {} divided texts\n* @example\nimport {splitUnit} from \"@daybrush/utils\";\n\nconsole.log(splitUnit(\"10px\"));\n// {prefix: \"\", value: 10, unit: \"px\"}\nconsole.log(splitUnit(\"-10px\"));\n// {prefix: \"\", value: -10, unit: \"px\"}\nconsole.log(splitUnit(\"a10%\"));\n// {prefix: \"a\", value: 10, unit: \"%\"}\n*/\nexport function splitUnit(text: string): { prefix: string, unit: string, value: number } {\n const matches = /^([^\\d|e|\\-|\\+]*)((?:\\d|\\.|-|e-|e\\+)+)(\\S*)$/g.exec(text);\n\n if (!matches) {\n return { prefix: \"\", unit: \"\", value: NaN };\n }\n const prefix = matches[1];\n const value = matches[2];\n const unit = matches[3];\n\n return { prefix, unit, value: parseFloat(value) };\n}\n\n/**\n* transform strings to camel-case\n* @memberof Utils\n* @param {String} text - string\n* @return {String} camel-case string\n* @example\nimport {camelize} from \"@daybrush/utils\";\n\nconsole.log(camelize(\"transform-origin\")); // transformOrigin\nconsole.log(camelize(\"abcd_efg\")); // abcdEfg\nconsole.log(camelize(\"abcd efg\")); // abcdEfg\n*/\nexport function camelize(str: string) {\n return str.replace(/[\\s-_]([a-z])/g, (all, letter) => letter.toUpperCase());\n}\n/**\n* transform a camelized string into a lowercased string.\n* @memberof Utils\n* @param {string} text - a camel-cased string\n* @param {string} [separator=\"-\"] - a separator\n* @return {string} a lowercased string\n* @example\nimport {decamelize} from \"@daybrush/utils\";\n\nconsole.log(decamelize(\"transformOrigin\")); // transform-origin\nconsole.log(decamelize(\"abcdEfg\", \"_\")); // abcd_efg\n*/\nexport function decamelize(str: string, separator: string = \"-\") {\n return str.replace(/([a-z])([A-Z])/g, (all, letter, letter2) => `${letter}${separator}${letter2.toLowerCase()}`);\n}\n\n/**\n* transforms something in an array into an array.\n* @memberof Utils\n* @param - Array form\n* @return an array\n* @example\nimport {toArray} from \"@daybrush/utils\";\n\nconst arr1 = toArray(document.querySelectorAll(\".a\")); // Element[]\nconst arr2 = toArray(document.querySelectorAll<HTMLElement>(\".a\")); // HTMLElement[]\n*/\nexport function toArray<T>(value: IArrayFormat<T>): T[] {\n return [].slice.call(value);\n}\n\n/**\n* Date.now() method\n* @memberof CrossBrowser\n* @return {number} milliseconds\n* @example\nimport {now} from \"@daybrush/utils\";\n\nconsole.log(now()); // 12121324241(milliseconds)\n*/\nexport function now() {\n return Date.now ? Date.now() : new Date().getTime();\n}\n\n/**\n* Returns the index of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `findIndex` was called upon.\n* @param - A function to execute on each value in the array until the function returns true, indicating that the satisfying element was found.\n* @param - Returns defaultIndex if not found by the function.\n* @example\nimport { findIndex } from \"@daybrush/utils\";\n\nfindIndex([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // 1\n*/\nexport function findIndex<T>(\n arr: T[],\n callback: (element: T, index: number, arr: T[]) => any,\n defaultIndex: number = -1,\n): number {\n const length = arr.length;\n\n for (let i = 0; i < length; ++i) {\n if (callback(arr[i], i, arr)) {\n return i;\n }\n }\n return defaultIndex;\n}\n\n/**\n* Returns the value of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `find` was called upon.\n* @param - A function to execute on each value in the array,\n* @param - Returns defalutValue if not found by the function.\n* @example\nimport { find } from \"@daybrush/utils\";\n\nfind([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // {a: 2}\n*/\nexport function find<T>(\n arr: T[],\n callback: (element: T, index: number, arr: T[]) => any,\n defalutValue?: T,\n): T | undefined {\n const index = findIndex(arr, callback);\n\n return index > - 1 ? arr[index] : defalutValue;\n}\n\n/**\n* window.requestAnimationFrame() method with cross browser.\n* @function\n* @memberof CrossBrowser\n* @param {FrameRequestCallback} callback - The function to call when it's time to update your animation for the next repaint.\n* @return {number} id\n* @example\nimport {requestAnimationFrame} from \"@daybrush/utils\";\n\nrequestAnimationFrame((timestamp) => {\n console.log(timestamp);\n});\n*/\nexport const requestAnimationFrame = /*#__PURE__*/(() => {\n const firstTime = now();\n const raf = IS_WINDOW\n && (window.requestAnimationFrame || window.webkitRequestAnimationFrame\n || (window as any).mozRequestAnimationFrame || (window as any).msRequestAnimationFrame);\n\n return raf ? (raf.bind(window) as (callback: FrameRequestCallback) => number) : ((callback: FrameRequestCallback) => {\n const currTime = now();\n const id = window.setTimeout(() => {\n callback(currTime - firstTime);\n }, 1000 / 60);\n return id;\n });\n})();\n\n/**\n* window.cancelAnimationFrame() method with cross browser.\n* @function\n* @memberof CrossBrowser\n* @param {number} handle - the id obtained through requestAnimationFrame method\n* @return {void}\n* @example\nimport { requestAnimationFrame, cancelAnimationFrame } from \"@daybrush/utils\";\n\nconst id = requestAnimationFrame((timestamp) => {\n console.log(timestamp);\n});\n\ncancelAnimationFrame(id);\n*/\nexport const cancelAnimationFrame = /*#__PURE__*/(() => {\n const caf = IS_WINDOW\n && (window.cancelAnimationFrame || window.webkitCancelAnimationFrame\n || (window as any).mozCancelAnimationFrame || (window as any).msCancelAnimationFrame);\n\n return caf\n ? caf.bind(window) as (handle: number) => void\n : ((handle: number) => { clearTimeout(handle); });\n})();\n/**\n* @function\n* @memberof Utils\n*/\nexport function getKeys(obj: IObject<any>): string[] {\n if (Object.keys) {\n return Object.keys(obj);\n }\n const keys: string[] = [];\n for (const name in keys) {\n keys.push(name);\n }\n return keys;\n}\n\n/**\n* @function\n* @memberof Utils\n*/\nexport function sortOrders(keys: Array<string | number>, orders: Array<string | number> = []) {\n keys.sort((a, b) => {\n const index1 = orders.indexOf(a);\n const index2 = orders.indexOf(b);\n\n if (index2 === -1 && index1 === -1) {\n return 0;\n }\n if (index1 === -1) {\n return 1;\n }\n if (index2 === -1) {\n return -1;\n }\n return index1 - index2;\n });\n}\n\n/**\n* convert unit size to px size\n* @function\n* @memberof Utils\n*/\nexport function convertUnitSize(pos: string, size: number | IObject<((pos: number) => number) | number>) {\n const { value, unit } = splitUnit(pos);\n\n if (isObject(size)) {\n const sizeFunction = size[unit];\n if (sizeFunction) {\n if (isFunction(sizeFunction)) {\n return sizeFunction(value);\n } else if (DEFAULT_UNIT_PRESETS[unit]) {\n return DEFAULT_UNIT_PRESETS[unit](value, sizeFunction);\n }\n }\n } else if (unit === \"%\") {\n return value * size / 100;\n }\n if (DEFAULT_UNIT_PRESETS[unit]) {\n return DEFAULT_UNIT_PRESETS[unit](value);\n }\n return value;\n}\n\n/**\n* calculate between min, max\n* @function\n* @memberof Utils\n*/\nexport function between(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(value, max));\n}\n\nexport function checkBoundSize(targetSize: number[], compareSize: number[], isMax: boolean) {\n return [\n [throttle(compareSize[0], TINY_NUM), throttle(compareSize[0] * targetSize[1] / targetSize[0], TINY_NUM)],\n [throttle(compareSize[1] * targetSize[0] / targetSize[1], TINY_NUM), throttle(compareSize[1], TINY_NUM)],\n ].filter(size => size.every((value, i) => {\n return isMax ? value <= compareSize[i] : value >= compareSize[i];\n }))[0] || targetSize;\n}\n\n/**\n* calculate bound size\n* @function\n* @memberof Utils\n*/\nexport function calculateBoundSize(\n size: number[], minSize: number[],\n maxSize: number[], keepRatio?: boolean,\n): number[] {\n if (!keepRatio) {\n return size.map((value, i) => between(value, minSize[i], maxSize[i]));\n }\n let [width, height] = size;\n // width : height = minWidth : minHeight;\n const [minWidth, minHeight] = checkBoundSize(size, minSize, false);\n const [maxWidth, maxHeight] = checkBoundSize(size, maxSize, true);\n\n if (width < minWidth || height < minHeight) {\n width = minWidth;\n height = minHeight;\n } else if (width > maxWidth || height > maxHeight) {\n width = maxWidth;\n height = maxHeight;\n }\n return [width, height];\n}\n\n\n/**\n* Add all the numbers.\n* @function\n* @memberof Utils\n*/\nexport function sum(nums: number[]): number {\n const length = nums.length;\n let total = 0;\n\n for (let i = length - 1; i >= 0; --i) {\n total += nums[i];\n }\n return total;\n}\n\n/**\n* Average all numbers.\n* @function\n* @memberof Utils\n*/\nexport function average(nums: number[]) {\n const length = nums.length;\n let total = 0;\n\n for (let i = length - 1; i >= 0; --i) {\n total += nums[i];\n }\n return length ? total / length : 0;\n}\n/**\n* Get the angle of two points. (0 <= rad < 359)\n* @function\n* @memberof Utils\n*/\nexport function getRad(pos1: number[], pos2: number[]): number {\n const distX = pos2[0] - pos1[0];\n const distY = pos2[1] - pos1[1];\n const rad = Math.atan2(distY, distX);\n\n return rad >= 0 ? rad : rad + Math.PI * 2;\n}\n/**\n* Get the average point of all points.\n* @function\n* @memberof Utils\n*/\nexport function getCenterPoint(points: number[][]): number[] {\n return [0, 1].map(i => average(points.map(pos => pos[i])));\n}\n/**\n* Gets the direction of the shape.\n* @function\n* @memberof Utils\n*/\nexport function getShapeDirection(points: number[][]): 1 | -1 {\n const center = getCenterPoint(points);\n const pos1Rad = getRad(center, points[0]);\n const pos2Rad = getRad(center, points[1]);\n\n return (pos1Rad < pos2Rad && pos2Rad - pos1Rad < Math.PI) || (pos1Rad > pos2Rad && pos2Rad - pos1Rad < -Math.PI)\n ? 1 : -1;\n}\n\n/**\n* Get the distance between two points.\n* @function\n* @memberof Utils\n*/\nexport function getDist(a: number[], b?: number[]) {\n return Math.sqrt(Math.pow((b ? b[0] : 0) - a[0], 2) + Math.pow((b ? b[1] : 0) - a[1], 2));\n}\n\n/**\n* throttle number depending on the unit.\n* @function\n* @memberof Utils\n*/\nexport function throttle(num: number, unit?: number) {\n if (!unit) {\n return num;\n }\n return Math.round(num / unit) * unit;\n}\n\n/**\n* throttle number array depending on the unit.\n* @function\n* @memberof Utils\n*/\nexport function throttleArray(nums: number[], unit?: number) {\n nums.forEach((_, i) => {\n nums[i] = throttle(nums[i], unit);\n });\n return nums;\n}\n\nexport function counter(num: number) {\n const nums: number[] = [];\n\n for (let i = 0; i < num; ++i) {\n nums.push(i);\n }\n\n return nums;\n}\n","import { RGB, RGBA, HSL, HSLA } from \"./consts\";\nimport { splitBracket, splitComma } from \"./utils\";\n\n/**\n* @namespace\n* @name Color\n*/\n\n/**\n* Remove the # from the hex color.\n* @memberof Color\n* @param {} hex - hex color\n* @return {} hex color\n* @example\nimport {cutHex} from \"@daybrush/utils\";\n\nconsole.log(cutHex(\"#000000\")) // \"000000\"\n*/\nexport function cutHex(hex: string) {\n return hex.replace(\"#\", \"\");\n}\n/**\n* convert hex color to rgb color.\n* @memberof Color\n* @param {} hex - hex color\n* @return {} rgb color\n* @example\nimport {hexToRGBA} from \"@daybrush/utils\";\n\nconsole.log(hexToRGBA(\"#00000005\"));\n// [0, 0, 0, 1]\nconsole.log(hexToRGBA(\"#201045\"));\n// [32, 16, 69, 1]\n*/\nexport function hexToRGBA(hex: string): [number, number, number, number] {\n const h = cutHex(hex);\n const r = parseInt(h.substring(0, 2), 16);\n const g = parseInt(h.substring(2, 4), 16);\n const b = parseInt(h.substring(4, 6), 16);\n let a = parseInt(h.substring(6, 8), 16) / 255;\n\n if (isNaN(a)) {\n a = 1;\n }\n return [r, g, b, a];\n}\n\n/**\n* convert 3(or 4)-digit hex color to 6(or 8)-digit hex color.\n* @memberof Color\n* @param {} hex - 3(or 4)-digit hex color\n* @return {} 6(or 8)-digit hex color\n* @example\nimport {toFullHex} from \"@daybrush/utils\";\n\nconsole.log(toFullHex(\"#123\")); // \"#112233\"\nconsole.log(toFullHex(\"#123a\")); // \"#112233aa\"\n*/\nexport function toFullHex(h: string): string {\n const r = h.charAt(1);\n const g = h.charAt(2);\n const b = h.charAt(3);\n const a = h.charAt(4);\n const arr = [\"#\", r, r, g, g, b, b, a, a];\n\n return arr.join(\"\");\n}\n/**\n* convert hsl color to rgba color.\n* @memberof Color\n* @param {} hsl - hsl color(hue: 0 ~ 360, saturation: 0 ~ 1, lightness: 0 ~ 1, alpha: 0 ~ 1)\n* @return {} rgba color\n* @example\nimport {hslToRGBA} from \"@daybrush/utils\";\n\nconsole.log(hslToRGBA([150, 0.5, 0.4]));\n// [51, 153, 102, 1]\n*/\nexport function hslToRGBA(hsl: readonly [number, number, number, number?]): [number, number, number, number] {\n let h = hsl[0];\n const s = hsl[1];\n const l = hsl[2];\n\n if (h < 0) {\n h += Math.floor((Math.abs(h) + 360) / 360) * 360;\n }\n h %= 360;\n\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs((h / 60) % 2 - 1));\n const m = l - c / 2;\n let rgb: [number, number, number];\n\n if (h < 60) {\n rgb = [c, x, 0];\n } else if (h < 120) {\n rgb = [x, c, 0];\n } else if (h < 180) {\n rgb = [0, c, x];\n } else if (h < 240) {\n rgb = [0, x, c];\n } else if (h < 300) {\n rgb = [x, 0, c];\n } else if (h < 360) {\n rgb = [c, 0, x];\n } else {\n rgb = [0, 0, 0];\n }\n\n return [\n Math.round((rgb[0] + m) * 255),\n Math.round((rgb[1] + m) * 255),\n Math.round((rgb[2] + m) * 255),\n hsl[3] ?? 1,\n ];\n}\n/**\n* convert string to rgba color.\n* @memberof Color\n* @param {} - 3-hex(#000), 4-hex(#0000) 6-hex(#000000), 8-hex(#00000000) or RGB(A), or HSL(A)\n* @return {} rgba color\n* @example\nimport {stringToRGBA} from \"@daybrush/utils\";\n\nconsole.log(stringToRGBA(\"#000000\")); // [0, 0, 0, 1]\nconsole.log(stringToRGBA(\"rgb(100, 100, 100)\")); // [100, 100, 100, 1]\nconsole.log(stringToRGBA(\"hsl(150, 0.5, 0.4)\")); // [51, 153, 102, 1]\n*/\nexport function stringToRGBA(color: string): [number, number, number, number] {\n if (color.charAt(0) === \"#\") {\n if (color.length === 4 || color.length === 5) {\n return hexToRGBA(toFullHex(color));\n } else {\n return hexToRGBA(color);\n }\n } else if (color.indexOf(\"(\") !== -1) {\n // in bracket.\n const {prefix, value} = splitBracket(color);\n\n if (!prefix || !value) {\n return undefined as never;\n }\n const arr = splitComma(value);\n const colorArr: [number, number, number, number] = [0, 0, 0, 1];\n const length = arr.length;\n\n switch (prefix) {\n case RGB:\n case RGBA:\n for (let i = 0; i < length; ++i) {\n colorArr[i] = parseFloat(arr[i]);\n }\n return colorArr;\n case HSL:\n case HSLA:\n for (let i = 0; i < length; ++i) {\n if (arr[i].indexOf(\"%\") !== -1) {\n colorArr[i] = parseFloat(arr[i]) / 100;\n } else {\n colorArr[i] = parseFloat(arr[i]);\n }\n }\n // hsl, hsla to rgba\n return hslToRGBA(colorArr);\n }\n }\n return undefined as never;\n}\n","import { document } from \"./consts\";\nimport { IObject, IEventMap } from \"./types\";\n\n/**\n * @namespace DOM\n */\n\nexport function $<K extends keyof HTMLElementTagNameMap>(selectors: K, multi: true):\n NodeListOf<HTMLElementTagNameMap[K]>;\nexport function $<K extends keyof SVGElementTagNameMap>(selectors: K, multi: true): NodeListOf<SVGElementTagNameMap[K]>;\nexport function $<E extends Element = Element>(selectors: string, multi: true): NodeListOf<E>;\n\nexport function $<K extends keyof HTMLElementTagNameMap>(selectors: K, multi?: false): HTMLElementTagNameMap[K] | null;\nexport function $<K extends keyof SVGElementTagNameMap>(selectors: K, multi?: false): SVGElementTagNameMap[K] | null;\nexport function $<E extends Element = Element>(selectors: string, multi?: false): E | null;\n/**\n * Returns all element descendants of node that\n * match selectors.\n */\n\n/**\n * Checks if the specified class value exists in the element's class attribute.\n * @memberof DOM\n * @param - A DOMString containing one or more selectors to match\n * @param - If multi is true, a DOMString containing one or more selectors to match against.\n * @example\nimport {$} from \"@daybrush/utils\";\n\nconsole.log($(\"div\")); // div element\nconsole.log($(\"div\", true)); // [div, div] elements\n*/\nexport function $<E extends Element = Element>(selectors: string, multi?: boolean): E | NodeListOf<E> | null {\n return multi ? document.querySelectorAll<E>(selectors) : document.querySelector<E>(selectors);\n}\n\n/**\n* Checks if the specified class value exists in the element's class attribute.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to search\n* @return {boolean} return false if the class is not found.\n* @example\nimport {hasClass} from \"@daybrush/utils\";\n\nconsole.log(hasClass(element, \"start\")); // true or false\n*/\nexport function hasClass(element: Element, className: string) {\n if (element.classList) {\n return element.classList.contains(className);\n }\n return !!element.className.match(new RegExp(`(\\\\s|^)${className}(\\\\s|$)`));\n}\n\n/**\n* Add the specified class value. If these classe already exist in the element's class attribute they are ignored.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to add\n* @example\nimport {addClass} from \"@daybrush/utils\";\n\naddClass(element, \"start\");\n*/\nexport function addClass(element: Element, className: string) {\n if (element.classList) {\n element.classList.add(className);\n } else {\n element.className += ` ${className}`;\n }\n}\n\n/**\n* Removes the specified class value.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to remove\n* @example\nimport {removeClass} from \"@daybrush/utils\";\n\nremoveClass(element, \"start\");\n*/\nexport function removeClass(element: Element, className: string) {\n if (element.classList) {\n element.classList.remove(className);\n } else {\n const reg = new RegExp(`(\\\\s|^)${className}(\\\\s|$)`);\n\n element.className = element.className.replace(reg, \" \");\n }\n}\n\n/**\n* Gets the CSS properties from the element.\n* @memberof DOM\n* @param elements - elements\n* @param properites - the CSS properties\n* @return returns CSS properties and values.\n* @example\nimport {fromCSS} from \"@daybrush/utils\";\n\nconsole.log(fromCSS(element, [\"left\", \"opacity\", \"top\"])); // {\"left\": \"10px\", \"opacity\": 1, \"top\": \"10px\"}\n*/\nexport function fromCSS(\n elements: Element | Element[] | NodeListOf<Element>, properties: string[]): IObject<any> {\n if (!elements || !properties || !properties.length) {\n return {};\n }\n let element;\n\n if (elements instanceof Element) {\n element = elements;\n } else if (elements.length) {\n element = elements[0];\n } else {\n return {};\n }\n const cssObject: IObject<any> = {};\n const styles = window.getComputedStyle(element) as any;\n const length = properties.length;\n\n for (let i = 0; i < length; ++i) {\n cssObject[properties[i]] = styles[properties[i]];\n }\n return cssObject;\n}\n\nexport function addEvent<K extends keyof IEventMap>(\n el: EventTarget, type: K, listener: (e: IEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;\n/**\n* Sets up a function that will be called whenever the specified event is delivered to the target\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The object which receives a notification (an object that implements the Event interface) when an event of the specified type occurs\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent} from \"@daybrush/utils\";\n\naddEvent(el, \"click\", e => {\n console.log(e);\n});\n*/\nexport function addEvent(\n el: EventTarget,\n type: string, listener: (e: Event) => void,\n options?: boolean | AddEventListenerOptions) {\n el.addEventListener(type, listener, options);\n}\n\nexport function removeEvent<K extends keyof IEventMap>(\n el: EventTarget, type: K, listener: (e: IEventMap[K]) => void, options?: boolean | EventListenerOptions): void;\n/**\n* removes from the EventTarget an event listener previously registered with EventTarget.addEventListener()\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The EventListener function of the event handler to remove from the event target.\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent, removeEvent} from \"@daybrush/utils\";\nconst listener = e => {\n console.log(e);\n};\naddEvent(el, \"click\", listener);\nremoveEvent(el, \"click\", listener);\n*/\nexport function removeEvent(\n el: EventTarget, type: string,\n listener: (e: Event) => void,\n options?: boolean | EventListenerOptions,\n) {\n el.removeEventListener(type, listener, options);\n}\n"],"names":["RGB","RGBA","HSL","HSLA","COLOR_MODELS","FUNCTION","PROPERTY","ARRAY","OBJECT","STRING","NUMBER","UNDEFINED","IS_WINDOW","window","doc","document","prefixes","getCrossBrowserProperty","property","styles","body","documentElement","style","length","i","name","TRANSFORM","FILTER","ANIMATION","KEYFRAMES","replace","OPEN_CLOSED_CHARACTERS","open","close","TINY_NUM","DEFAULT_UNIT_PRESETS","pos","size","innerWidth","innerHeight","Math","max","min","dot","a1","a2","b1","b2","isUndefined","value","isObject","isArray","Array","isString","isNumber","isFunction","isEqualSeparator","character","separator","isCharacterSpace","isSeparatorSpace","findOpen","openCharacter","texts","index","openCloseCharacters","isIgnore","findIgnore","findClose","ignore","otherText","slice","join","RegExp","exec","closeCharacter","trim","nextIndex","find","_a","splitText","text","splitOptions","_b","isSeparateFirst","isSeparateOnlyOpenClose","_c","isSeparateOpenClose","_d","openClosedText","map","regexText","regex","split","filter","Boolean","values","tempValues","resetTemp","push","Error","splitSpace","splitComma","splitBracket","matches","prefix","suffix","splitUnit","unit","NaN","parseFloat","camelize","str","all","letter","toUpperCase","decamelize","letter2","toLowerCase","toArray","call","now","Date","getTime","findIndex","arr","callback","defaultIndex","defalutValue","requestAnimationFrame","firstTime","raf","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","bind","currTime","id","setTimeout","cancelAnimationFrame","caf","webkitCancelAnimationFrame","mozCancelAnimationFrame","msCancelAnimationFrame","handle","clearTimeout","getKeys","obj","Object","keys","sortOrders","orders","sort","a","b","index1","indexOf","index2","convertUnitSize","sizeFunction","between","checkBoundSize","targetSize","compareSize","isMax","throttle","every","calculateBoundSize","minSize","maxSize","keepRatio","width","height","minWidth","minHeight","maxWidth","maxHeight","sum","nums","total","average","getRad","pos1","pos2","distX","distY","rad","atan2","PI","getCenterPoint","points","getShapeDirection","center","pos1Rad","pos2Rad","getDist","sqrt","pow","num","round","throttleArray","forEach","_","counter","cutHex","hex","hexToRGBA","h","r","parseInt","substring","g","isNaN","toFullHex","charAt","hslToRGBA","hsl","s","l","floor","abs","c","x","m","rgb","stringToRGBA","color","undefined","colorArr","$","selectors","multi","querySelectorAll","querySelector","hasClass","element","className","classList","contains","match","addClass","add","removeClass","remove","reg","fromCSS","elements","properties","Element","cssObject","getComputedStyle","addEvent","el","type","listener","options","addEventListener","removeEvent","removeEventListener"],"mappings":"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"} |
@@ -7,5 +7,5 @@ /* | ||
| repository: https://github.com/daybrush/utils | ||
| @version 1.5.0 | ||
| @version 1.6.0-beta.0 | ||
| */ | ||
| !function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):n.utils=t()}(this,function(){"use strict";function n(n){if(!d)return"";var t=(d.body||d.documentElement).style,e=m.length;if(typeof t[n]!=u)return n;for(var r=0;r<e;++r){var i="-"+m[r]+"-"+n;if(typeof t[i]!=u)return i}return""}var f="rgb",c="rgba",s="hsl",l="hsla",t=[f,c,s,l],e="function",r="object",i="string",o="number",u="undefined",a=typeof window!=u,d=typeof document!=u&&document,m=["webkit","ms","moz","o"],v=n("transform"),h=n("filter"),p=n("animation"),w=p.replace("animation","keyframes"),g=['"',"'",'\\"',"\\'"],A=1e-7,y={cm:function(n){return 96*n/2.54},mm:function(n){return 96*n/254},in:function(n){return 96*n},pt:function(n){return 96*n/72},pc:function(n){return 96*n/6},"%":function(n,t){return n*t/100},vw:function(n,t){return void 0===t&&(t=window.innerWidth),n/100*t},vh:function(n,t){return void 0===t&&(t=window.innerHeight),n/100*t},vmax:function(n,t){return void 0===t&&(t=Math.max(window.innerWidth,window.innerHeight)),n/100*t},vmin:function(n,t){return void 0===t&&(t=Math.min(window.innerWidth,window.innerHeight)),n/100*t}};function x(n){return n&&typeof n===r}function E(n){return typeof n===e}function R(n,t,e,r){for(var i=e;i<r;++i){var o=t[i].trim();if(o===n)return i;var u=i;if("("===o?u=R(")",t,i+1,r):-1<g.indexOf(o)&&(u=R(o,t,i+1,r)),-1===u)break;i=u}return-1}function M(n,t){for(var e=new RegExp("(\\s*"+(t||",")+"\\s*|\\(|\\)|\"|'|\\\\\"|\\\\'|\\s+)","g"),r=n.split(e).filter(Boolean),i=r.length,o=[],u=[],a=0;a<i;++a){var f=r[a].trim(),c=a;if("("===f)c=R(")",r,a+1,i);else{if(")"===f)throw new Error("invalid format");if(-1<g.indexOf(f))c=R(f,r,a+1,i);else if(f===t){u.length&&(o.push(u.join("")),u=[]);continue}}-1===c&&(c=i-1),u.push(r.slice(a,c+1).join("")),a=c}return u.length&&o.push(u.join("")),o}function b(n){return M(n,",")}function S(n){var t=/([^(]*)\(([\s\S]*)\)([\s\S]*)/g.exec(n);return!t||t.length<4?{}:{prefix:t[1],value:t[2],suffix:t[3]}}function N(n){var t=/^([^\d|e|\-|\+]*)((?:\d|\.|-|e-|e\+)+)(\S*)$/g.exec(n);if(!t)return{prefix:"",unit:"",value:NaN};var e=t[1],r=t[2];return{prefix:e,unit:t[3],value:parseFloat(r)}}function F(){return Date.now?Date.now():(new Date).getTime()}function O(n,t,e){void 0===e&&(e=-1);for(var r=n.length,i=0;i<r;++i)if(t(n[i],i,n))return i;return e}var C=function(){var e=F(),n=a&&(window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame);return n?n.bind(window):function(n){var t=F();return window.setTimeout(function(){n(t-e)},1e3/60)}}();function T(n,t,e){return Math.max(t,Math.min(n,e))}function I(n,e,r){return[[z(e[0],A),z(e[0]*n[1]/n[0],A)],[z(e[1]*n[0]/n[1],A),z(e[1],A)]].filter(function(n){return n.every(function(n,t){return r?n<=e[t]:n>=e[t]})})[0]||n}function L(n){for(var t=n.length,e=0,r=t-1;0<=r;--r)e+=n[r];return t?e/t:0}function B(n,t){var e=t[0]-n[0],r=t[1]-n[1],i=Math.atan2(r,e);return 0<=i?i:i+2*Math.PI}function D(n){return[0,1].map(function(t){return L(n.map(function(n){return n[t]}))})}function z(n,t){return t?Math.round(n/t)*t:n}function U(n){return n.replace("#","")}function j(n){var t=U(n),e=parseInt(t.substring(0,2),16),r=parseInt(t.substring(2,4),16),i=parseInt(t.substring(4,6),16),o=parseInt(t.substring(6,8),16)/255;return isNaN(o)&&(o=1),[e,r,i,o]}function k(n){var t=n.charAt(1),e=n.charAt(2),r=n.charAt(3),i=n.charAt(4);return["#",t,t,e,e,r,r,i,i].join("")}function P(n){var t,e=n[0],r=n[1],i=n[2];e<0&&(e+=360*Math.floor((Math.abs(e)+360)/360)),e%=360;var o=(1-Math.abs(2*i-1))*r,u=o*(1-Math.abs(e/60%2-1)),a=i-o/2,f=e<60?[o,u,0]:e<120?[u,o,0]:e<180?[0,o,u]:e<240?[0,u,o]:e<300?[u,0,o]:e<360?[o,0,u]:[0,0,0];return[Math.round(255*(f[0]+a)),Math.round(255*(f[1]+a)),Math.round(255*(f[2]+a)),null!==(t=n[3])&&void 0!==t?t:1]}return{RGB:f,RGBA:c,HSL:s,HSLA:l,COLOR_MODELS:t,FUNCTION:e,PROPERTY:"property",ARRAY:"array",OBJECT:r,STRING:i,NUMBER:o,UNDEFINED:u,IS_WINDOW:a,document:d,getCrossBrowserProperty:n,TRANSFORM:v,FILTER:h,ANIMATION:p,KEYFRAMES:w,OPEN_CLOSED_CHARACTER:g,TINY_NUM:A,DEFAULT_UNIT_PRESETS:y,cutHex:U,hexToRGBA:j,toFullHex:k,hslToRGBA:P,stringToRGBA:function(n){if("#"===n.charAt(0))return 4===n.length||5===n.length?j(k(n)):j(n);if(-1!==n.indexOf("(")){var t=S(n),e=t.prefix,r=t.value;if(!e||!r)return;var i=b(r),o=[0,0,0,1],u=i.length;switch(e){case f:case c:for(var a=0;a<u;++a)o[a]=parseFloat(i[a]);return o;case s:case l:for(a=0;a<u;++a)-1!==i[a].indexOf("%")?o[a]=parseFloat(i[a])/100:o[a]=parseFloat(i[a]);return P(o)}}},dot:function(n,t,e,r){return(n*r+t*e)/(e+r)},isUndefined:function(n){return typeof n==u},isObject:x,isArray:function(n){return Array.isArray(n)},isString:function(n){return typeof n==i},isNumber:function(n){return typeof n==o},isFunction:E,splitText:M,splitSpace:function(n){return M(n,"")},splitComma:b,splitBracket:S,splitUnit:N,camelize:function(n){return n.replace(/[\s-_]([a-z])/g,function(n,t){return t.toUpperCase()})},decamelize:function(n,r){return void 0===r&&(r="-"),n.replace(/([a-z])([A-Z])/g,function(n,t,e){return""+t+r+e.toLowerCase()})},toArray:function(n){return[].slice.call(n)},now:F,findIndex:O,find:function(n,t,e){var r=O(n,t);return-1<r?n[r]:e},requestAnimationFrame:C,cancelAnimationFrame:function(){var n=a&&(window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||window.msCancelAnimationFrame);return n?n.bind(window):function(n){clearTimeout(n)}}(),getKeys:function(n){if(Object.keys)return Object.keys(n);var t=[];for(var e in t)t.push(e);return t},sortOrders:function(n,i){void 0===i&&(i=[]),n.sort(function(n,t){var e=i.indexOf(n),r=i.indexOf(t);return-1===r&&-1===e?0:-1===e?1:-1===r?-1:e-r})},convertUnitSize:function(n,t){var e=N(n),r=e.value,i=e.unit;if(x(t)){var o=t[i];if(o){if(E(o))return o(r);if(y[i])return y[i](r,o)}}else if("%"===i)return r*t/100;return y[i]?y[i](r):r},between:T,checkBoundSize:I,calculateBoundSize:function(n,e,r,t){if(!t)return n.map(function(n,t){return T(n,e[t],r[t])});var i=n[0],o=n[1],u=I(n,e,!1),a=u[0],f=u[1],c=I(n,r,!0),s=c[0],l=c[1];return i<a||o<f?(i=a,o=f):(s<i||l<o)&&(i=s,o=l),[i,o]},sum:function(n){for(var t=0,e=n.length-1;0<=e;--e)t+=n[e];return t},average:L,getRad:B,getCenterPoint:D,getShapeDirection:function(n){var t=D(n),e=B(t,n[0]),r=B(t,n[1]);return e<r&&r-e<Math.PI||r<e&&r-e<-Math.PI?1:-1},getDist:function(n,t){return Math.sqrt(Math.pow((t?t[0]:0)-n[0],2)+Math.pow((t?t[1]:0)-n[1],2))},throttle:z,throttleArray:function(e,r){return e.forEach(function(n,t){e[t]=z(e[t],r)}),e},$:function(n,t){return t?d.querySelectorAll(n):d.querySelector(n)},hasClass:function(n,t){return n.classList?n.classList.contains(t):!!n.className.match(new RegExp("(\\s|^)"+t+"(\\s|$)"))},addClass:function(n,t){n.classList?n.classList.add(t):n.className+=" "+t},removeClass:function(n,t){var e;n.classList?n.classList.remove(t):(e=new RegExp("(\\s|^)"+t+"(\\s|$)"),n.className=n.className.replace(e," "))},fromCSS:function(n,t){if(!n||!t||!t.length)return{};var e;if(n instanceof Element)e=n;else{if(!n.length)return{};e=n[0]}for(var r={},i=window.getComputedStyle(e),o=t.length,u=0;u<o;++u)r[t[u]]=i[t[u]];return r},addEvent:function(n,t,e,r){n.addEventListener(t,e,r)},removeEvent:function(n,t,e,r){n.removeEventListener(t,e,r)}}}); | ||
| !function(n,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):n.utils=e()}(this,function(){"use strict";function n(n){if(!d)return"";var e=(d.body||d.documentElement).style,t=p.length;if(typeof e[n]!=u)return n;for(var r=0;r<t;++r){var i="-"+p[r]+"-"+n;if(typeof e[i]!=u)return i}return""}var c="rgb",f="rgba",s="hsl",l="hsla",e=[c,f,s,l],t="function",r="object",i="string",o="number",u="undefined",a=typeof window!=u,d=typeof document!=u&&document,p=["webkit","ms","moz","o"],v=n("transform"),m=n("filter"),h=n("animation"),w=h.replace("animation","keyframes"),y=[{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:'\\"',close:'\\"'},{open:"\\'",close:"\\'"}],g=1e-7,A={cm:function(n){return 96*n/2.54},mm:function(n){return 96*n/254},in:function(n){return 96*n},pt:function(n){return 96*n/72},pc:function(n){return 96*n/6},"%":function(n,e){return n*e/100},vw:function(n,e){return void 0===e&&(e=window.innerWidth),n/100*e},vh:function(n,e){return void 0===e&&(e=window.innerHeight),n/100*e},vmax:function(n,e){return void 0===e&&(e=Math.max(window.innerWidth,window.innerHeight)),n/100*e},vmin:function(n,e){return void 0===e&&(e=Math.min(window.innerWidth,window.innerHeight)),n/100*e}};function b(n){return n&&typeof n===r}function S(n){return typeof n===i}function x(n){return typeof n===t}function E(n,e,t,r,i){return R(n,e,t)?t:function(i,o,n,u,a){for(var c,e=n;e<u;++e){var t=function(n){var e=o[n].trim();if(e===i.close&&!R(i,o,n))return{value:n};var t=n,r=I(a,function(n){return n.open===e});if(r&&(t=E(r,o,n,u,a)),-1===t)return c=n,"break";c=n=t}(e);if(e=c,"object"==typeof t)return t.value;if("break"===t)break}return-1}(n,e,t+1,r,i)}function R(n,e,t){if(!n.ignore)return null;var r=e.slice(Math.max(t-3,0),t+3).join("");return new RegExp(n.ignore).exec(r)}function M(n,e){var t=S(e)?{separator:e}:e,r=t.separator,a=void 0===r?",":r,c=t.isSeparateFirst,f=t.isSeparateOnlyOpenClose,i=t.isSeparateOpenClose,s=void 0===i?f:i,o=t.openCloseCharacters,l=void 0===o?y:o,u=l.map(function(n){var e=n.open,t=n.close;return e===t?e:e+"|"+t}).join("|"),d=new RegExp("(\\s*"+a+"\\s*|"+u+"|\\s+)","g"),p=n.split(d).filter(Boolean),v=p.length,m=[],h=[];function w(){return h.length&&(m.push(h.join("")),h=[])}for(var g,A=0;A<v;++A){var b=function(n){var e,t,r=p[n].trim(),i=n,o=I(l,function(n){return n.open===r}),u=I(l,function(n){return n.close===r});if(o){if(-1!==(i=E(o,p,n,v,l))&&s)return w()&&c?(g=n,"break"):(m.push(p.slice(n,i+1).join("")),n=i,c?(g=n,"break"):(g=n,"continue"))}else{if(u&&!R(u,p,n))throw new Error("invalid format: "+u.close);if(e=r,!((""!==(t=a)&&" "!=t||""!==e&&" "!=e)&&e!==t||f))return w(),c?(g=n,"break"):(g=n,"continue")}-1===i&&(i=v-1),h.push(p.slice(n,i+1).join("")),g=n=i}(A),A=g;if("break"===b)break}return h.length&&m.push(h.join("")),m}function C(n){return M(n,",")}function F(n){var e=/([^(]*)\(([\s\S]*)\)([\s\S]*)/g.exec(n);return!e||e.length<4?{}:{prefix:e[1],value:e[2],suffix:e[3]}}function N(n){var e=/^([^\d|e|\-|\+]*)((?:\d|\.|-|e-|e\+)+)(\S*)$/g.exec(n);if(!e)return{prefix:"",unit:"",value:NaN};var t=e[1],r=e[2];return{prefix:t,unit:e[3],value:parseFloat(r)}}function O(){return Date.now?Date.now():(new Date).getTime()}function T(n,e,t){void 0===t&&(t=-1);for(var r=n.length,i=0;i<r;++i)if(e(n[i],i,n))return i;return t}function I(n,e,t){var r=T(n,e);return-1<r?n[r]:t}var k=function(){var t=O(),n=a&&(window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame);return n?n.bind(window):function(n){var e=O();return window.setTimeout(function(){n(e-t)},1e3/60)}}();function L(n,e,t){return Math.max(e,Math.min(n,t))}function j(n,t,r){return[[U(t[0],g),U(t[0]*n[1]/n[0],g)],[U(t[1]*n[0]/n[1],g),U(t[1],g)]].filter(function(n){return n.every(function(n,e){return r?n<=t[e]:n>=t[e]})})[0]||n}function B(n){for(var e=n.length,t=0,r=e-1;0<=r;--r)t+=n[r];return e?t/e:0}function D(n,e){var t=e[0]-n[0],r=e[1]-n[1],i=Math.atan2(r,t);return 0<=i?i:i+2*Math.PI}function z(n){return[0,1].map(function(e){return B(n.map(function(n){return n[e]}))})}function U(n,e){return e?Math.round(n/e)*e:n}function P(n){return n.replace("#","")}function q(n){var e=P(n),t=parseInt(e.substring(0,2),16),r=parseInt(e.substring(2,4),16),i=parseInt(e.substring(4,6),16),o=parseInt(e.substring(6,8),16)/255;return isNaN(o)&&(o=1),[t,r,i,o]}function H(n){var e=n.charAt(1),t=n.charAt(2),r=n.charAt(3),i=n.charAt(4);return["#",e,e,t,t,r,r,i,i].join("")}function _(n){var e,t=n[0],r=n[1],i=n[2];t<0&&(t+=360*Math.floor((Math.abs(t)+360)/360)),t%=360;var o=(1-Math.abs(2*i-1))*r,u=o*(1-Math.abs(t/60%2-1)),a=i-o/2,c=t<60?[o,u,0]:t<120?[u,o,0]:t<180?[0,o,u]:t<240?[0,u,o]:t<300?[u,0,o]:t<360?[o,0,u]:[0,0,0];return[Math.round(255*(c[0]+a)),Math.round(255*(c[1]+a)),Math.round(255*(c[2]+a)),null!==(e=n[3])&&void 0!==e?e:1]}return{RGB:c,RGBA:f,HSL:s,HSLA:l,COLOR_MODELS:e,FUNCTION:t,PROPERTY:"property",ARRAY:"array",OBJECT:r,STRING:i,NUMBER:o,UNDEFINED:u,IS_WINDOW:a,document:d,getCrossBrowserProperty:n,TRANSFORM:v,FILTER:m,ANIMATION:h,KEYFRAMES:w,OPEN_CLOSED_CHARACTERS:y,TINY_NUM:g,DEFAULT_UNIT_PRESETS:A,cutHex:P,hexToRGBA:q,toFullHex:H,hslToRGBA:_,stringToRGBA:function(n){if("#"===n.charAt(0))return 4===n.length||5===n.length?q(H(n)):q(n);if(-1!==n.indexOf("(")){var e=F(n),t=e.prefix,r=e.value;if(!t||!r)return;var i=C(r),o=[0,0,0,1],u=i.length;switch(t){case c:case f:for(var a=0;a<u;++a)o[a]=parseFloat(i[a]);return o;case s:case l:for(a=0;a<u;++a)-1!==i[a].indexOf("%")?o[a]=parseFloat(i[a])/100:o[a]=parseFloat(i[a]);return _(o)}}},dot:function(n,e,t,r){return(n*r+e*t)/(t+r)},isUndefined:function(n){return typeof n==u},isObject:b,isArray:function(n){return Array.isArray(n)},isString:S,isNumber:function(n){return typeof n==o},isFunction:x,splitText:M,splitSpace:function(n){return M(n,"")},splitComma:C,splitBracket:F,splitUnit:N,camelize:function(n){return n.replace(/[\s-_]([a-z])/g,function(n,e){return e.toUpperCase()})},decamelize:function(n,r){return void 0===r&&(r="-"),n.replace(/([a-z])([A-Z])/g,function(n,e,t){return""+e+r+t.toLowerCase()})},toArray:function(n){return[].slice.call(n)},now:O,findIndex:T,find:I,requestAnimationFrame:k,cancelAnimationFrame:function(){var n=a&&(window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||window.msCancelAnimationFrame);return n?n.bind(window):function(n){clearTimeout(n)}}(),getKeys:function(n){if(Object.keys)return Object.keys(n);var e=[];for(var t in e)e.push(t);return e},sortOrders:function(n,i){void 0===i&&(i=[]),n.sort(function(n,e){var t=i.indexOf(n),r=i.indexOf(e);return-1===r&&-1===t?0:-1===t?1:-1===r?-1:t-r})},convertUnitSize:function(n,e){var t=N(n),r=t.value,i=t.unit;if(b(e)){var o=e[i];if(o){if(x(o))return o(r);if(A[i])return A[i](r,o)}}else if("%"===i)return r*e/100;return A[i]?A[i](r):r},between:L,checkBoundSize:j,calculateBoundSize:function(n,t,r,e){if(!e)return n.map(function(n,e){return L(n,t[e],r[e])});var i=n[0],o=n[1],u=j(n,t,!1),a=u[0],c=u[1],f=j(n,r,!0),s=f[0],l=f[1];return i<a||o<c?(i=a,o=c):(s<i||l<o)&&(i=s,o=l),[i,o]},sum:function(n){for(var e=0,t=n.length-1;0<=t;--t)e+=n[t];return e},average:B,getRad:D,getCenterPoint:z,getShapeDirection:function(n){var e=z(n),t=D(e,n[0]),r=D(e,n[1]);return t<r&&r-t<Math.PI||r<t&&r-t<-Math.PI?1:-1},getDist:function(n,e){return Math.sqrt(Math.pow((e?e[0]:0)-n[0],2)+Math.pow((e?e[1]:0)-n[1],2))},throttle:U,throttleArray:function(t,r){return t.forEach(function(n,e){t[e]=U(t[e],r)}),t},counter:function(n){for(var e=[],t=0;t<n;++t)e.push(t);return e},$:function(n,e){return e?d.querySelectorAll(n):d.querySelector(n)},hasClass:function(n,e){return n.classList?n.classList.contains(e):!!n.className.match(new RegExp("(\\s|^)"+e+"(\\s|$)"))},addClass:function(n,e){n.classList?n.classList.add(e):n.className+=" "+e},removeClass:function(n,e){var t;n.classList?n.classList.remove(e):(t=new RegExp("(\\s|^)"+e+"(\\s|$)"),n.className=n.className.replace(t," "))},fromCSS:function(n,e){if(!n||!e||!e.length)return{};var t;if(n instanceof Element)t=n;else{if(!n.length)return{};t=n[0]}for(var r={},i=window.getComputedStyle(t),o=e.length,u=0;u<o;++u)r[e[u]]=i[e[u]];return r},addEvent:function(n,e,t,r){n.addEventListener(e,t,r)},removeEvent:function(n,e,t,r){n.removeEventListener(e,t,r)}}}); | ||
| //# sourceMappingURL=utils.min.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"utils.min.js","sources":["../src/consts.ts","../src/utils.ts","../src/color.ts","../src/dom.ts"],"sourcesContent":["/**\n* @namespace\n* @name Consts\n*/\n\nimport { IObject } from \"./types\";\n\n/**\n* get string \"rgb\"\n* @memberof Color\n* @example\nimport {RGB} from \"@daybrush/utils\";\n\nconsole.log(RGB); // \"rgb\"\n*/\nexport const RGB = \"rgb\";\n/**\n* get string \"rgba\"\n* @memberof Color\n* @example\nimport {RGBA} from \"@daybrush/utils\";\n\nconsole.log(RGBA); // \"rgba\"\n*/\nexport const RGBA = \"rgba\";\n/**\n* get string \"hsl\"\n* @memberof Color\n* @example\nimport {HSL} from \"@daybrush/utils\";\n\nconsole.log(HSL); // \"hsl\"\n*/\nexport const HSL = \"hsl\";\n/**\n* get string \"hsla\"\n* @memberof Color\n* @example\nimport {HSLA} from \"@daybrush/utils\";\n\nconsole.log(HSLA); // \"hsla\"\n*/\nexport const HSLA = \"hsla\";\n/**\n* gets an array of color models.\n* @memberof Color\n* @example\nimport {COLOR_MODELS} from \"@daybrush/utils\";\n\nconsole.log(COLOR_MODELS); // [\"rgb\", \"rgba\", \"hsl\", \"hsla\"];\n*/\nexport const COLOR_MODELS = [RGB, RGBA, HSL, HSLA];\n\n/**\n* get string \"function\"\n* @memberof Consts\n* @example\nimport {FUNCTION} from \"@daybrush/utils\";\n\nconsole.log(FUNCTION); // \"function\"\n*/\nexport const FUNCTION = \"function\";\n/**\n* get string \"property\"\n* @memberof Consts\n* @example\nimport {PROPERTY} from \"@daybrush/utils\";\n\nconsole.log(PROPERTY); // \"property\"\n*/\nexport const PROPERTY = \"property\";\n/**\n* get string \"array\"\n* @memberof Consts\n* @example\nimport {ARRAY} from \"@daybrush/utils\";\n\nconsole.log(ARRAY); // \"array\"\n*/\nexport const ARRAY = \"array\";\n/**\n* get string \"object\"\n* @memberof Consts\n* @example\nimport {OBJECT} from \"@daybrush/utils\";\n\nconsole.log(OBJECT); // \"object\"\n*/\nexport const OBJECT = \"object\";\n/**\n* get string \"string\"\n* @memberof Consts\n* @example\nimport {STRING} from \"@daybrush/utils\";\n\nconsole.log(STRING); // \"string\"\n*/\nexport const STRING = \"string\";\n/**\n* get string \"number\"\n* @memberof Consts\n* @example\nimport {NUMBER} from \"@daybrush/utils\";\n\nconsole.log(NUMBER); // \"number\"\n*/\nexport const NUMBER = \"number\";\n/**\n* get string \"undefined\"\n* @memberof Consts\n* @example\nimport {UNDEFINED} from \"@daybrush/utils\";\n\nconsole.log(UNDEFINED); // \"undefined\"\n*/\nexport const UNDEFINED = \"undefined\";\n\n/**\n* Check whether the environment is window or node.js.\n* @memberof Consts\n* @example\nimport {IS_WINDOW} from \"@daybrush/utils\";\n\nconsole.log(IS_WINDOW); // false in node.js\nconsole.log(IS_WINDOW); // true in browser\n*/\nexport const IS_WINDOW = typeof window !== UNDEFINED;\n\n/**\n* Check whether the environment is window or node.js.\n* @memberof Consts\n* @name document\n* @example\nimport {IS_WINDOW} from \"@daybrush/utils\";\n\nconsole.log(IS_WINDOW); // false in node.js\nconsole.log(IS_WINDOW); // true in browser\n*/\nconst doc = (typeof document !== UNDEFINED && document) as Document; // FIXME: this type maybe false\n\nexport {doc as document};\n\nconst prefixes: string[] = [\"webkit\", \"ms\", \"moz\", \"o\"];\n\n/**\n * @namespace CrossBrowser\n */\n\n/**\n* Get a CSS property with a vendor prefix that supports cross browser.\n* @function\n* @param {string} property - A CSS property\n* @return {string} CSS property with cross-browser vendor prefix\n* @memberof CrossBrowser\n* @example\nimport {getCrossBrowserProperty} from \"@daybrush/utils\";\n\nconsole.log(getCrossBrowserProperty(\"transform\")); // \"transform\", \"-ms-transform\", \"-webkit-transform\"\nconsole.log(getCrossBrowserProperty(\"filter\")); // \"filter\", \"-webkit-filter\"\n*/\nexport const getCrossBrowserProperty = /*#__PURE__*/(property: string) => {\n if (!doc) {\n return \"\";\n }\n const styles = (doc.body || doc.documentElement).style as any;\n const length = prefixes.length;\n\n if (typeof styles[property] !== UNDEFINED) {\n return property;\n }\n for (let i = 0; i < length; ++i) {\n const name = `-${prefixes[i]}-${property}`;\n\n if (typeof styles[name] !== UNDEFINED) {\n return name;\n }\n }\n return \"\";\n};\n\n/**\n* get string \"transfrom\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {TRANSFORM} from \"@daybrush/utils\";\n\nconsole.log(TRANSFORM); // \"transform\", \"-ms-transform\", \"-webkit-transform\"\n*/\nexport const TRANSFORM = /*#__PURE__*/getCrossBrowserProperty(\"transform\");\n/**\n* get string \"filter\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {FILTER} from \"@daybrush/utils\";\n\nconsole.log(FILTER); // \"filter\", \"-ms-filter\", \"-webkit-filter\"\n*/\nexport const FILTER = /*#__PURE__*/getCrossBrowserProperty(\"filter\");\n/**\n* get string \"animation\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {ANIMATION} from \"@daybrush/utils\";\n\nconsole.log(ANIMATION); // \"animation\", \"-ms-animation\", \"-webkit-animation\"\n*/\nexport const ANIMATION = /*#__PURE__*/getCrossBrowserProperty(\"animation\");\n/**\n* get string \"keyframes\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {KEYFRAMES} from \"@daybrush/utils\";\n\nconsole.log(KEYFRAMES); // \"keyframes\", \"-ms-keyframes\", \"-webkit-keyframes\"\n*/\nexport const KEYFRAMES = /*#__PURE__*/ANIMATION.replace(\"animation\", \"keyframes\");\n\nexport const OPEN_CLOSED_CHARACTER = [`\"`, `'`, `\\\\\"`, `\\\\'`];\nexport const TINY_NUM = 0.0000001;\nexport const DEFAULT_UNIT_PRESETS: IObject<(pos: number, size?: number) => number> = {\n \"cm\": pos => pos * 96 / 2.54,\n \"mm\": pos => pos * 96 / 254,\n \"in\": pos => pos * 96,\n \"pt\": pos => pos * 96 / 72,\n \"pc\": pos => pos * 96 / 6,\n \"%\": (pos, size) => pos * size! / 100,\n \"vw\": (pos, size = window.innerWidth) => pos / 100 * size,\n \"vh\": (pos, size = window.innerHeight) => pos / 100 * size,\n \"vmax\": (pos, size = Math.max(window.innerWidth, window.innerHeight)) => pos / 100 * size,\n \"vmin\": (pos, size = Math.min(window.innerWidth, window.innerHeight)) => pos / 100 * size,\n};\n","import {\n UNDEFINED, STRING,\n OBJECT, FUNCTION,\n IS_WINDOW, OPEN_CLOSED_CHARACTER, NUMBER,\n DEFAULT_UNIT_PRESETS,\n TINY_NUM\n} from \"./consts\";\nimport { IArrayFormat, IObject } from \"./types\";\n/**\n* @namespace\n* @name Utils\n*/\n\n/**\n * Returns the inner product of two numbers(`a1`, `a2`) by two criteria(`b1`, `b2`).\n * @memberof Utils\n * @param - The first number\n * @param - The second number\n * @param - The first number to base on the inner product\n * @param - The second number to base on the inner product\n * @return - Returns the inner product\nimport { dot } from \"@daybrush/utils\";\n\nconsole.log(dot(0, 15, 2, 3)); // 6\nconsole.log(dot(5, 15, 2, 3)); // 9\nconsole.log(dot(5, 15, 1, 1)); // 10\n */\nexport function dot(a1: number, a2: number, b1: number, b2: number) {\n return (a1 * b2 + a2 * b1) / (b1 + b2);\n}\n/**\n* Check the type that the value is undefined.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {boolean} true if the type is correct, false otherwise\n* @example\nimport {isUndefined} from \"@daybrush/utils\";\n\nconsole.log(isUndefined(undefined)); // true\nconsole.log(isUndefined(\"\")); // false\nconsole.log(isUndefined(1)); // false\nconsole.log(isUndefined(null)); // false\n*/\nexport function isUndefined(value: any): value is undefined {\n return (typeof value === UNDEFINED);\n}\n/**\n* Check the type that the value is object.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isObject} from \"@daybrush/utils\";\n\nconsole.log(isObject({})); // true\nconsole.log(isObject(undefined)); // false\nconsole.log(isObject(\"\")); // false\nconsole.log(isObject(null)); // false\n*/\nexport function isObject(value: any): value is IObject<any> {\n return value && (typeof value === OBJECT);\n}\n/**\n* Check the type that the value is isArray.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isArray} from \"@daybrush/utils\";\n\nconsole.log(isArray([])); // true\nconsole.log(isArray({})); // false\nconsole.log(isArray(undefined)); // false\nconsole.log(isArray(null)); // false\n*/\nexport function isArray(value: any): value is any[] {\n return Array.isArray(value);\n}\n/**\n* Check the type that the value is string.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isString} from \"@daybrush/utils\";\n\nconsole.log(isString(\"1234\")); // true\nconsole.log(isString(undefined)); // false\nconsole.log(isString(1)); // false\nconsole.log(isString(null)); // false\n*/\nexport function isString(value: any): value is string {\n return typeof value === STRING;\n}\n\nexport function isNumber(value: any): value is number {\n return typeof value === NUMBER;\n}\n\n/**\n* Check the type that the value is function.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isFunction} from \"@daybrush/utils\";\n\nconsole.log(isFunction(function a() {})); // true\nconsole.log(isFunction(() => {})); // true\nconsole.log(isFunction(\"1234\")); // false\nconsole.log(isFunction(1)); // false\nconsole.log(isFunction(null)); // false\n*/\nexport function isFunction(value: any): value is (...args: any[]) => any {\n return typeof value === FUNCTION;\n}\n\nfunction findClosed(closedCharacter: string, texts: string[], index: number, length: number) {\n for (let i = index; i < length; ++i) {\n const character = texts[i].trim();\n\n if (character === closedCharacter) {\n return i;\n }\n let nextIndex = i;\n if (character === \"(\") {\n nextIndex = findClosed(\")\", texts, i + 1, length);\n } else if (OPEN_CLOSED_CHARACTER.indexOf(character) > -1) {\n nextIndex = findClosed(character, texts, i + 1, length);\n }\n if (nextIndex === -1) {\n break;\n }\n i = nextIndex;\n }\n return -1;\n}\nexport function splitText(text: string, separator: string) {\n const regexText = `(\\\\s*${separator || \",\"}\\\\s*|\\\\(|\\\\)|\"|'|\\\\\\\\\"|\\\\\\\\'|\\\\s+)`;\n const regex = new RegExp(regexText, \"g\");\n const texts = text.split(regex).filter(Boolean);\n const length = texts.length;\n const values: string[] = [];\n let tempValues: string[] = [];\n\n for (let i = 0; i < length; ++i) {\n const character = texts[i].trim();\n let nextIndex = i;\n\n if (character === \"(\") {\n nextIndex = findClosed(\")\", texts, i + 1, length);\n } else if (character === \")\") {\n throw new Error(\"invalid format\");\n } else if (OPEN_CLOSED_CHARACTER.indexOf(character) > -1) {\n nextIndex = findClosed(character, texts, i + 1, length);\n } else if (character === separator) {\n if (tempValues.length) {\n values.push(tempValues.join(\"\"));\n tempValues = [];\n }\n continue;\n }\n\n if (nextIndex === -1) {\n nextIndex = length - 1;\n }\n tempValues.push(texts.slice(i, nextIndex + 1).join(\"\"));\n i = nextIndex;\n }\n if (tempValues.length) {\n values.push(tempValues.join(\"\"));\n }\n return values;\n}\n\n/**\n* divide text by space.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {Array} divided texts\n* @example\nimport {spliceSpace} from \"@daybrush/utils\";\n\nconsole.log(splitSpace(\"a b c d e f g\"));\n// [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\"]\nconsole.log(splitSpace(\"'a,b' c 'd,e' f g\"));\n// [\"'a,b'\", \"c\", \"'d,e'\", \"f\", \"g\"]\n*/\nexport function splitSpace(text: string) {\n // divide comma(,)\n return splitText(text, \"\");\n}\n\n/**\n* divide text by comma.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {Array} divided texts\n* @example\nimport {splitComma} from \"@daybrush/utils\";\n\nconsole.log(splitComma(\"a,b,c,d,e,f,g\"));\n// [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\"]\nconsole.log(splitComma(\"'a,b',c,'d,e',f,g\"));\n// [\"'a,b'\", \"c\", \"'d,e'\", \"f\", \"g\"]\n*/\nexport function splitComma(text: string): string[] {\n // divide comma(,)\n // \"[^\"]*\"|'[^']*'\n return splitText(text, \",\");\n}\n/**\n* divide text by bracket \"(\", \")\".\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {object} divided texts\n* @example\nimport {splitBracket} from \"@daybrush/utils\";\n\nconsole.log(splitBracket(\"a(1, 2)\"));\n// {prefix: \"a\", value: \"1, 2\", suffix: \"\"}\nconsole.log(splitBracket(\"a(1, 2)b\"));\n// {prefix: \"a\", value: \"1, 2\", suffix: \"b\"}\n*/\nexport function splitBracket(text: string) {\n const matches = (/([^(]*)\\(([\\s\\S]*)\\)([\\s\\S]*)/g).exec(text);\n\n if (!matches || matches.length < 4) {\n return {};\n } else {\n return { prefix: matches[1], value: matches[2], suffix: matches[3] };\n }\n}\n/**\n* divide text by number and unit.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {} divided texts\n* @example\nimport {splitUnit} from \"@daybrush/utils\";\n\nconsole.log(splitUnit(\"10px\"));\n// {prefix: \"\", value: 10, unit: \"px\"}\nconsole.log(splitUnit(\"-10px\"));\n// {prefix: \"\", value: -10, unit: \"px\"}\nconsole.log(splitUnit(\"a10%\"));\n// {prefix: \"a\", value: 10, unit: \"%\"}\n*/\nexport function splitUnit(text: string): { prefix: string, unit: string, value: number } {\n const matches = /^([^\\d|e|\\-|\\+]*)((?:\\d|\\.|-|e-|e\\+)+)(\\S*)$/g.exec(text);\n\n if (!matches) {\n return { prefix: \"\", unit: \"\", value: NaN };\n }\n const prefix = matches[1];\n const value = matches[2];\n const unit = matches[3];\n\n return { prefix, unit, value: parseFloat(value) };\n}\n\n/**\n* transform strings to camel-case\n* @memberof Utils\n* @param {String} text - string\n* @return {String} camel-case string\n* @example\nimport {camelize} from \"@daybrush/utils\";\n\nconsole.log(camelize(\"transform-origin\")); // transformOrigin\nconsole.log(camelize(\"abcd_efg\")); // abcdEfg\nconsole.log(camelize(\"abcd efg\")); // abcdEfg\n*/\nexport function camelize(str: string) {\n return str.replace(/[\\s-_]([a-z])/g, (all, letter) => letter.toUpperCase());\n}\n/**\n* transform a camelized string into a lowercased string.\n* @memberof Utils\n* @param {string} text - a camel-cased string\n* @param {string} [separator=\"-\"] - a separator\n* @return {string} a lowercased string\n* @example\nimport {decamelize} from \"@daybrush/utils\";\n\nconsole.log(decamelize(\"transformOrigin\")); // transform-origin\nconsole.log(decamelize(\"abcdEfg\", \"_\")); // abcd_efg\n*/\nexport function decamelize(str: string, separator: string = \"-\") {\n return str.replace(/([a-z])([A-Z])/g, (all, letter, letter2) => `${letter}${separator}${letter2.toLowerCase()}`);\n}\n\n/**\n* transforms something in an array into an array.\n* @memberof Utils\n* @param - Array form\n* @return an array\n* @example\nimport {toArray} from \"@daybrush/utils\";\n\nconst arr1 = toArray(document.querySelectorAll(\".a\")); // Element[]\nconst arr2 = toArray(document.querySelectorAll<HTMLElement>(\".a\")); // HTMLElement[]\n*/\nexport function toArray<T>(value: IArrayFormat<T>): T[] {\n return [].slice.call(value);\n}\n\n/**\n* Date.now() method\n* @memberof CrossBrowser\n* @return {number} milliseconds\n* @example\nimport {now} from \"@daybrush/utils\";\n\nconsole.log(now()); // 12121324241(milliseconds)\n*/\nexport function now() {\n return Date.now ? Date.now() : new Date().getTime();\n}\n\n/**\n* Returns the index of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `findIndex` was called upon.\n* @param - A function to execute on each value in the array until the function returns true, indicating that the satisfying element was found.\n* @param - Returns defaultIndex if not found by the function.\n* @example\nimport { findIndex } from \"@daybrush/utils\";\n\nfindIndex([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // 1\n*/\nexport function findIndex<T>(\n arr: T[],\n callback: (element: T, index: number, arr: T[]) => any,\n defaultIndex: number = -1,\n): number {\n const length = arr.length;\n\n for (let i = 0; i < length; ++i) {\n if (callback(arr[i], i, arr)) {\n return i;\n }\n }\n return defaultIndex;\n}\n\n/**\n* Returns the value of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `find` was called upon.\n* @param - A function to execute on each value in the array,\n* @param - Returns defalutValue if not found by the function.\n* @example\nimport { find } from \"@daybrush/utils\";\n\nfind([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // {a: 2}\n*/\nexport function find<T>(\n arr: T[],\n callback: (element: T, index: number, arr: T[]) => any,\n defalutValue?: T,\n): T | undefined {\n const index = findIndex(arr, callback);\n\n return index > - 1 ? arr[index] : defalutValue;\n}\n\n/**\n* window.requestAnimationFrame() method with cross browser.\n* @function\n* @memberof CrossBrowser\n* @param {FrameRequestCallback} callback - The function to call when it's time to update your animation for the next repaint.\n* @return {number} id\n* @example\nimport {requestAnimationFrame} from \"@daybrush/utils\";\n\nrequestAnimationFrame((timestamp) => {\n console.log(timestamp);\n});\n*/\nexport const requestAnimationFrame = /*#__PURE__*/(() => {\n const firstTime = now();\n const raf = IS_WINDOW\n && (window.requestAnimationFrame || window.webkitRequestAnimationFrame\n || (window as any).mozRequestAnimationFrame || (window as any).msRequestAnimationFrame);\n\n return raf ? (raf.bind(window) as (callback: FrameRequestCallback) => number) : ((callback: FrameRequestCallback) => {\n const currTime = now();\n const id = window.setTimeout(() => {\n callback(currTime - firstTime);\n }, 1000 / 60);\n return id;\n });\n})();\n\n/**\n* window.cancelAnimationFrame() method with cross browser.\n* @function\n* @memberof CrossBrowser\n* @param {number} handle - the id obtained through requestAnimationFrame method\n* @return {void}\n* @example\nimport { requestAnimationFrame, cancelAnimationFrame } from \"@daybrush/utils\";\n\nconst id = requestAnimationFrame((timestamp) => {\n console.log(timestamp);\n});\n\ncancelAnimationFrame(id);\n*/\nexport const cancelAnimationFrame = /*#__PURE__*/(() => {\n const caf = IS_WINDOW\n && (window.cancelAnimationFrame || window.webkitCancelAnimationFrame\n || (window as any).mozCancelAnimationFrame || (window as any).msCancelAnimationFrame);\n\n return caf\n ? caf.bind(window) as (handle: number) => void\n : ((handle: number) => { clearTimeout(handle); });\n})();\n/**\n* @function\n* @memberof Utils\n*/\nexport function getKeys(obj: IObject<any>): string[] {\n if (Object.keys) {\n return Object.keys(obj);\n }\n const keys: string[] = [];\n for (const name in keys) {\n keys.push(name);\n }\n return keys;\n}\n\n/**\n* @function\n* @memberof Utils\n*/\nexport function sortOrders(keys: Array<string | number>, orders: Array<string | number> = []) {\n keys.sort((a, b) => {\n const index1 = orders.indexOf(a);\n const index2 = orders.indexOf(b);\n\n if (index2 === -1 && index1 === -1) {\n return 0;\n }\n if (index1 === -1) {\n return 1;\n }\n if (index2 === -1) {\n return -1;\n }\n return index1 - index2;\n });\n}\n\n/**\n* convert unit size to px size\n* @function\n* @memberof Utils\n*/\nexport function convertUnitSize(pos: string, size: number | IObject<((pos: number) => number) | number>) {\n const { value, unit } = splitUnit(pos);\n\n if (isObject(size)) {\n const sizeFunction = size[unit];\n if (sizeFunction) {\n if (isFunction(sizeFunction)) {\n return sizeFunction(value);\n } else if (DEFAULT_UNIT_PRESETS[unit]) {\n return DEFAULT_UNIT_PRESETS[unit](value, sizeFunction);\n }\n }\n } else if (unit === \"%\") {\n return value * size / 100;\n }\n if (DEFAULT_UNIT_PRESETS[unit]) {\n return DEFAULT_UNIT_PRESETS[unit](value);\n }\n return value;\n}\n\n/**\n* calculate between min, max\n* @function\n* @memberof Utils\n*/\nexport function between(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(value, max));\n}\n\nexport function checkBoundSize(targetSize: number[], compareSize: number[], isMax: boolean) {\n return [\n [throttle(compareSize[0], TINY_NUM), throttle(compareSize[0] * targetSize[1] / targetSize[0], TINY_NUM)],\n [throttle(compareSize[1] * targetSize[0] / targetSize[1], TINY_NUM), throttle(compareSize[1], TINY_NUM)],\n ].filter(size => size.every((value, i) => {\n return isMax ? value <= compareSize[i] : value >= compareSize[i];\n }))[0] || targetSize;\n}\n\n/**\n* calculate bound size\n* @function\n* @memberof Utils\n*/\nexport function calculateBoundSize(\n size: number[], minSize: number[],\n maxSize: number[], keepRatio?: boolean,\n): number[] {\n if (!keepRatio) {\n return size.map((value, i) => between(value, minSize[i], maxSize[i]));\n }\n let [width, height] = size;\n // width : height = minWidth : minHeight;\n const [minWidth, minHeight] = checkBoundSize(size, minSize, false);\n const [maxWidth, maxHeight] = checkBoundSize(size, maxSize, true);\n\n if (width < minWidth || height < minHeight) {\n width = minWidth;\n height = minHeight;\n } else if (width > maxWidth || height > maxHeight) {\n width = maxWidth;\n height = maxHeight;\n }\n return [width, height];\n}\n\n\n/**\n* Add all the numbers.\n* @function\n* @memberof Utils\n*/\nexport function sum(nums: number[]): number {\n const length = nums.length;\n let total = 0;\n\n for (let i = length - 1; i >= 0; --i) {\n total += nums[i];\n }\n return total;\n}\n\n/**\n* Average all numbers.\n* @function\n* @memberof Utils\n*/\nexport function average(nums: number[]) {\n const length = nums.length;\n let total = 0;\n\n for (let i = length - 1; i >= 0; --i) {\n total += nums[i];\n }\n return length ? total / length : 0;\n}\n/**\n* Get the angle of two points. (0 <= rad < 359)\n* @function\n* @memberof Utils\n*/\nexport function getRad(pos1: number[], pos2: number[]): number {\n const distX = pos2[0] - pos1[0];\n const distY = pos2[1] - pos1[1];\n const rad = Math.atan2(distY, distX);\n\n return rad >= 0 ? rad : rad + Math.PI * 2;\n}\n/**\n* Get the average point of all points.\n* @function\n* @memberof Utils\n*/\nexport function getCenterPoint(points: number[][]): number[] {\n return [0, 1].map(i => average(points.map(pos => pos[i])));\n}\n/**\n* Gets the direction of the shape.\n* @function\n* @memberof Utils\n*/\nexport function getShapeDirection(points: number[][]): 1 | -1 {\n const center = getCenterPoint(points);\n const pos1Rad = getRad(center, points[0]);\n const pos2Rad = getRad(center, points[1]);\n\n return (pos1Rad < pos2Rad && pos2Rad - pos1Rad < Math.PI) || (pos1Rad > pos2Rad && pos2Rad - pos1Rad < -Math.PI)\n ? 1 : -1;\n}\n\n/**\n* Get the distance between two points.\n* @function\n* @memberof Utils\n*/\nexport function getDist(a: number[], b?: number[]) {\n return Math.sqrt(Math.pow((b ? b[0] : 0) - a[0], 2) + Math.pow((b ? b[1] : 0) - a[1], 2));\n}\n\n/**\n* throttle number depending on the unit.\n* @function\n* @memberof Utils\n*/\nexport function throttle(num: number, unit?: number) {\n if (!unit) {\n return num;\n }\n return Math.round(num / unit) * unit;\n}\n\n/**\n* throttle number array depending on the unit.\n* @function\n* @memberof Utils\n*/\nexport function throttleArray(nums: number[], unit?: number) {\n nums.forEach((_, i) => {\n nums[i] = throttle(nums[i], unit);\n });\n return nums;\n}\n","import { RGB, RGBA, HSL, HSLA } from \"./consts\";\nimport { splitBracket, splitComma } from \"./utils\";\n\n/**\n* @namespace\n* @name Color\n*/\n\n/**\n* Remove the # from the hex color.\n* @memberof Color\n* @param {} hex - hex color\n* @return {} hex color\n* @example\nimport {cutHex} from \"@daybrush/utils\";\n\nconsole.log(cutHex(\"#000000\")) // \"000000\"\n*/\nexport function cutHex(hex: string) {\n return hex.replace(\"#\", \"\");\n}\n/**\n* convert hex color to rgb color.\n* @memberof Color\n* @param {} hex - hex color\n* @return {} rgb color\n* @example\nimport {hexToRGBA} from \"@daybrush/utils\";\n\nconsole.log(hexToRGBA(\"#00000005\"));\n// [0, 0, 0, 1]\nconsole.log(hexToRGBA(\"#201045\"));\n// [32, 16, 69, 1]\n*/\nexport function hexToRGBA(hex: string): [number, number, number, number] {\n const h = cutHex(hex);\n const r = parseInt(h.substring(0, 2), 16);\n const g = parseInt(h.substring(2, 4), 16);\n const b = parseInt(h.substring(4, 6), 16);\n let a = parseInt(h.substring(6, 8), 16) / 255;\n\n if (isNaN(a)) {\n a = 1;\n }\n return [r, g, b, a];\n}\n\n/**\n* convert 3(or 4)-digit hex color to 6(or 8)-digit hex color.\n* @memberof Color\n* @param {} hex - 3(or 4)-digit hex color\n* @return {} 6(or 8)-digit hex color\n* @example\nimport {toFullHex} from \"@daybrush/utils\";\n\nconsole.log(toFullHex(\"#123\")); // \"#112233\"\nconsole.log(toFullHex(\"#123a\")); // \"#112233aa\"\n*/\nexport function toFullHex(h: string): string {\n const r = h.charAt(1);\n const g = h.charAt(2);\n const b = h.charAt(3);\n const a = h.charAt(4);\n const arr = [\"#\", r, r, g, g, b, b, a, a];\n\n return arr.join(\"\");\n}\n/**\n* convert hsl color to rgba color.\n* @memberof Color\n* @param {} hsl - hsl color(hue: 0 ~ 360, saturation: 0 ~ 1, lightness: 0 ~ 1, alpha: 0 ~ 1)\n* @return {} rgba color\n* @example\nimport {hslToRGBA} from \"@daybrush/utils\";\n\nconsole.log(hslToRGBA([150, 0.5, 0.4]));\n// [51, 153, 102, 1]\n*/\nexport function hslToRGBA(hsl: readonly [number, number, number, number?]): [number, number, number, number] {\n let h = hsl[0];\n const s = hsl[1];\n const l = hsl[2];\n\n if (h < 0) {\n h += Math.floor((Math.abs(h) + 360) / 360) * 360;\n }\n h %= 360;\n\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs((h / 60) % 2 - 1));\n const m = l - c / 2;\n let rgb: [number, number, number];\n\n if (h < 60) {\n rgb = [c, x, 0];\n } else if (h < 120) {\n rgb = [x, c, 0];\n } else if (h < 180) {\n rgb = [0, c, x];\n } else if (h < 240) {\n rgb = [0, x, c];\n } else if (h < 300) {\n rgb = [x, 0, c];\n } else if (h < 360) {\n rgb = [c, 0, x];\n } else {\n rgb = [0, 0, 0];\n }\n\n return [\n Math.round((rgb[0] + m) * 255),\n Math.round((rgb[1] + m) * 255),\n Math.round((rgb[2] + m) * 255),\n hsl[3] ?? 1,\n ];\n}\n/**\n* convert string to rgba color.\n* @memberof Color\n* @param {} - 3-hex(#000), 4-hex(#0000) 6-hex(#000000), 8-hex(#00000000) or RGB(A), or HSL(A)\n* @return {} rgba color\n* @example\nimport {stringToRGBA} from \"@daybrush/utils\";\n\nconsole.log(stringToRGBA(\"#000000\")); // [0, 0, 0, 1]\nconsole.log(stringToRGBA(\"rgb(100, 100, 100)\")); // [100, 100, 100, 1]\nconsole.log(stringToRGBA(\"hsl(150, 0.5, 0.4)\")); // [51, 153, 102, 1]\n*/\nexport function stringToRGBA(color: string): [number, number, number, number] {\n if (color.charAt(0) === \"#\") {\n if (color.length === 4 || color.length === 5) {\n return hexToRGBA(toFullHex(color));\n } else {\n return hexToRGBA(color);\n }\n } else if (color.indexOf(\"(\") !== -1) {\n // in bracket.\n const {prefix, value} = splitBracket(color);\n\n if (!prefix || !value) {\n return undefined as never;\n }\n const arr = splitComma(value);\n const colorArr: [number, number, number, number] = [0, 0, 0, 1];\n const length = arr.length;\n\n switch (prefix) {\n case RGB:\n case RGBA:\n for (let i = 0; i < length; ++i) {\n colorArr[i] = parseFloat(arr[i]);\n }\n return colorArr;\n case HSL:\n case HSLA:\n for (let i = 0; i < length; ++i) {\n if (arr[i].indexOf(\"%\") !== -1) {\n colorArr[i] = parseFloat(arr[i]) / 100;\n } else {\n colorArr[i] = parseFloat(arr[i]);\n }\n }\n // hsl, hsla to rgba\n return hslToRGBA(colorArr);\n }\n }\n return undefined as never;\n}\n","import { document } from \"./consts\";\nimport { IObject, IEventMap } from \"./types\";\n\n/**\n * @namespace DOM\n */\n\nexport function $<K extends keyof HTMLElementTagNameMap>(selectors: K, multi: true):\n NodeListOf<HTMLElementTagNameMap[K]>;\nexport function $<K extends keyof SVGElementTagNameMap>(selectors: K, multi: true): NodeListOf<SVGElementTagNameMap[K]>;\nexport function $<E extends Element = Element>(selectors: string, multi: true): NodeListOf<E>;\n\nexport function $<K extends keyof HTMLElementTagNameMap>(selectors: K, multi?: false): HTMLElementTagNameMap[K] | null;\nexport function $<K extends keyof SVGElementTagNameMap>(selectors: K, multi?: false): SVGElementTagNameMap[K] | null;\nexport function $<E extends Element = Element>(selectors: string, multi?: false): E | null;\n/**\n * Returns all element descendants of node that\n * match selectors.\n */\n\n/**\n * Checks if the specified class value exists in the element's class attribute.\n * @memberof DOM\n * @param - A DOMString containing one or more selectors to match\n * @param - If multi is true, a DOMString containing one or more selectors to match against.\n * @example\nimport {$} from \"@daybrush/utils\";\n\nconsole.log($(\"div\")); // div element\nconsole.log($(\"div\", true)); // [div, div] elements\n*/\nexport function $<E extends Element = Element>(selectors: string, multi?: boolean): E | NodeListOf<E> | null {\n return multi ? document.querySelectorAll<E>(selectors) : document.querySelector<E>(selectors);\n}\n\n/**\n* Checks if the specified class value exists in the element's class attribute.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to search\n* @return {boolean} return false if the class is not found.\n* @example\nimport {hasClass} from \"@daybrush/utils\";\n\nconsole.log(hasClass(element, \"start\")); // true or false\n*/\nexport function hasClass(element: Element, className: string) {\n if (element.classList) {\n return element.classList.contains(className);\n }\n return !!element.className.match(new RegExp(`(\\\\s|^)${className}(\\\\s|$)`));\n}\n\n/**\n* Add the specified class value. If these classe already exist in the element's class attribute they are ignored.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to add\n* @example\nimport {addClass} from \"@daybrush/utils\";\n\naddClass(element, \"start\");\n*/\nexport function addClass(element: Element, className: string) {\n if (element.classList) {\n element.classList.add(className);\n } else {\n element.className += ` ${className}`;\n }\n}\n\n/**\n* Removes the specified class value.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to remove\n* @example\nimport {removeClass} from \"@daybrush/utils\";\n\nremoveClass(element, \"start\");\n*/\nexport function removeClass(element: Element, className: string) {\n if (element.classList) {\n element.classList.remove(className);\n } else {\n const reg = new RegExp(`(\\\\s|^)${className}(\\\\s|$)`);\n\n element.className = element.className.replace(reg, \" \");\n }\n}\n\n/**\n* Gets the CSS properties from the element.\n* @memberof DOM\n* @param elements - elements\n* @param properites - the CSS properties\n* @return returns CSS properties and values.\n* @example\nimport {fromCSS} from \"@daybrush/utils\";\n\nconsole.log(fromCSS(element, [\"left\", \"opacity\", \"top\"])); // {\"left\": \"10px\", \"opacity\": 1, \"top\": \"10px\"}\n*/\nexport function fromCSS(\n elements: Element | Element[] | NodeListOf<Element>, properties: string[]): IObject<any> {\n if (!elements || !properties || !properties.length) {\n return {};\n }\n let element;\n\n if (elements instanceof Element) {\n element = elements;\n } else if (elements.length) {\n element = elements[0];\n } else {\n return {};\n }\n const cssObject: IObject<any> = {};\n const styles = window.getComputedStyle(element) as any;\n const length = properties.length;\n\n for (let i = 0; i < length; ++i) {\n cssObject[properties[i]] = styles[properties[i]];\n }\n return cssObject;\n}\n\nexport function addEvent<K extends keyof IEventMap>(\n el: EventTarget, type: K, listener: (e: IEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;\n/**\n* Sets up a function that will be called whenever the specified event is delivered to the target\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The object which receives a notification (an object that implements the Event interface) when an event of the specified type occurs\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent} from \"@daybrush/utils\";\n\naddEvent(el, \"click\", e => {\n console.log(e);\n});\n*/\nexport function addEvent(\n el: EventTarget,\n type: string, listener: (e: Event) => void,\n options?: boolean | AddEventListenerOptions) {\n el.addEventListener(type, listener, options);\n}\n\nexport function removeEvent<K extends keyof IEventMap>(\n el: EventTarget, type: K, listener: (e: IEventMap[K]) => void, options?: boolean | EventListenerOptions): void;\n/**\n* removes from the EventTarget an event listener previously registered with EventTarget.addEventListener()\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The EventListener function of the event handler to remove from the event target.\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent, removeEvent} from \"@daybrush/utils\";\nconst listener = e => {\n console.log(e);\n};\naddEvent(el, \"click\", listener);\nremoveEvent(el, \"click\", listener);\n*/\nexport function removeEvent(\n el: EventTarget, type: string,\n listener: (e: Event) => void,\n options?: boolean | EventListenerOptions,\n) {\n el.removeEventListener(type, listener, options);\n}\n"],"names":["getCrossBrowserProperty","property","doc","styles","body","documentElement","style","length","prefixes","UNDEFINED","i","name","RGB","RGBA","HSL","HSLA","COLOR_MODELS","FUNCTION","OBJECT","STRING","NUMBER","IS_WINDOW","window","document","TRANSFORM","FILTER","ANIMATION","KEYFRAMES","replace","OPEN_CLOSED_CHARACTER","TINY_NUM","DEFAULT_UNIT_PRESETS","pos","size","innerWidth","innerHeight","Math","max","min","isObject","value","isFunction","findClosed","closedCharacter","texts","index","character","trim","nextIndex","indexOf","splitText","text","separator","regex","RegExp","split","filter","Boolean","values","tempValues","Error","push","join","slice","splitComma","splitBracket","matches","exec","prefix","suffix","splitUnit","unit","NaN","parseFloat","now","Date","getTime","findIndex","arr","callback","defaultIndex","requestAnimationFrame","firstTime","raf","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","bind","currTime","setTimeout","between","checkBoundSize","targetSize","compareSize","isMax","throttle","every","average","nums","total","getRad","pos1","pos2","distX","distY","rad","atan2","PI","getCenterPoint","points","map","num","round","cutHex","hex","hexToRGBA","h","r","parseInt","substring","g","b","a","isNaN","toFullHex","charAt","hslToRGBA","hsl","s","l","floor","abs","c","x","m","rgb","color","_a","colorArr","a1","a2","b1","b2","Array","isArray","str","all","letter","toUpperCase","letter2","toLowerCase","call","defalutValue","caf","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","msCancelAnimationFrame","handle","clearTimeout","obj","Object","keys","orders","sort","index1","index2","sizeFunction","minSize","maxSize","keepRatio","width","height","minWidth","minHeight","_b","maxWidth","maxHeight","center","pos1Rad","pos2Rad","sqrt","pow","forEach","_","selectors","multi","querySelectorAll","querySelector","element","className","classList","contains","match","add","reg","remove","elements","properties","Element","cssObject","getComputedStyle","el","type","listener","options","addEventListener","removeEventListener"],"mappings":";;;;;;;;iLAgKqD,SAAxCA,EAAyCC,OAC/CC,QACI,OAEHC,GAAUD,EAAIE,MAAQF,EAAIG,iBAAiBC,MAC3CC,EAASC,EAASD,iBAEbJ,EAAOF,IAAcQ,SACvBR,MAEJ,IAAIS,EAAI,EAAGA,EAAIH,IAAUG,EAAG,KACzBC,EAAO,IAAIH,EAASE,OAAMT,YAErBE,EAAOQ,IAAUF,SACnBE,QAGJ,GAlKF,IAAMC,EAAM,MASNC,EAAO,OASPC,EAAM,MASNC,EAAO,OASPC,EAAe,CAACJ,EAAKC,EAAMC,EAAKC,GAUhCE,EAAW,WA2BXC,EAAS,SASTC,EAAS,SASTC,EAAS,SASTX,EAAY,YAWZY,SAAmBC,QAAWb,EAYrCP,SAAcqB,UAAad,GAAac,SAIxCf,EAAqB,CAAC,SAAU,KAAM,MAAO,KA8CtCgB,EAAyBxB,EAAwB,aASjDyB,EAAsBzB,EAAwB,UAS9C0B,EAAyB1B,EAAwB,aASjD2B,EAAyBD,EAAUE,QAAQ,YAAa,aAExDC,EAAwB,CAAC,IAAK,IAAK,MAAO,OAC1CC,EAAW,KACXC,EAAwE,IAC7E,SAAAC,UAAa,GAANA,EAAW,SAClB,SAAAA,UAAa,GAANA,EAAW,QAClB,SAAAA,UAAa,GAANA,MACP,SAAAA,UAAa,GAANA,EAAW,OAClB,SAAAA,UAAa,GAANA,EAAW,OACnB,SAACA,EAAKC,UAASD,EAAMC,EAAQ,QAC5B,SAACD,EAAKC,uBAAAA,EAAOX,OAAOY,YAAeF,EAAM,IAAMC,MAC/C,SAACD,EAAKC,uBAAAA,EAAOX,OAAOa,aAAgBH,EAAM,IAAMC,QAC9C,SAACD,EAAKC,uBAAAA,EAAOG,KAAKC,IAAIf,OAAOY,WAAYZ,OAAOa,cAAiBH,EAAM,IAAMC,QAC7E,SAACD,EAAKC,uBAAAA,EAAOG,KAAKE,IAAIhB,OAAOY,WAAYZ,OAAOa,cAAiBH,EAAM,IAAMC,aC1KvEM,EAASC,UAChBA,UAAiBA,IAAUtB,WAqDpBuB,EAAWD,iBACXA,IAAUvB,EAG1B,SAASyB,EAAWC,EAAyBC,EAAiBC,EAAetC,OACtE,IAAIG,EAAImC,EAAOnC,EAAIH,IAAUG,EAAG,KAC7BoC,EAAYF,EAAMlC,GAAGqC,UAEvBD,IAAcH,SACTjC,MAELsC,EAAYtC,KACE,MAAdoC,EACFE,EAAYN,EAAW,IAAKE,EAAOlC,EAAI,EAAGH,IACW,EAA5CsB,EAAsBoB,QAAQH,KACvCE,EAAYN,EAAWI,EAAWF,EAAOlC,EAAI,EAAGH,KAE/B,IAAfyC,QAGJtC,EAAIsC,SAEE,WAEME,EAAUC,EAAcC,WAEhCC,EAAQ,IAAIC,OADA,SAAQF,GAAa,4CACH,KAC9BR,EAAQO,EAAKI,MAAMF,GAAOG,OAAOC,SACjClD,EAASqC,EAAMrC,OACfmD,EAAmB,GACrBC,EAAuB,GAElBjD,EAAI,EAAGA,EAAIH,IAAUG,EAAG,KACzBoC,EAAYF,EAAMlC,GAAGqC,OACvBC,EAAYtC,KAEE,MAAdoC,EACFE,EAAYN,EAAW,IAAKE,EAAOlC,EAAI,EAAGH,OACrC,CAAA,GAAkB,MAAduC,QACH,IAAIc,MAAM,kBACX,IAAgD,EAA5C/B,EAAsBoB,QAAQH,GACvCE,EAAYN,EAAWI,EAAWF,EAAOlC,EAAI,EAAGH,QAC3C,GAAIuC,IAAcM,EAAW,CAC9BO,EAAWpD,SACbmD,EAAOG,KAAKF,EAAWG,KAAK,KAC5BH,EAAa,eAKE,IAAfX,IACFA,EAAYzC,EAAS,GAEvBoD,EAAWE,KAAKjB,EAAMmB,MAAMrD,EAAGsC,EAAY,GAAGc,KAAK,KACnDpD,EAAIsC,SAEFW,EAAWpD,QACbmD,EAAOG,KAAKF,EAAWG,KAAK,KAEvBJ,WAkCOM,EAAWb,UAGlBD,EAAUC,EAAM,cAeTc,EAAad,OACrBe,EAAW,iCAAkCC,KAAKhB,UAEnDe,GAAWA,EAAQ3D,OAAS,EACxB,GAEA,CAAE6D,OAAQF,EAAQ,GAAI1B,MAAO0B,EAAQ,GAAIG,OAAQH,EAAQ,aAkBpDI,EAAUnB,OAClBe,EAAU,gDAAgDC,KAAKhB,OAEhEe,QACI,CAAEE,OAAQ,GAAIG,KAAM,GAAI/B,MAAOgC,SAElCJ,EAASF,EAAQ,GACjB1B,EAAQ0B,EAAQ,SAGf,CAAEE,SAAQG,KAFJL,EAAQ,GAEE1B,MAAOiC,WAAWjC,aA0D3BkC,WACPC,KAAKD,IAAMC,KAAKD,OAAQ,IAAIC,MAAOC,mBAe5BC,EACdC,EACAC,EACAC,gBAAAA,GAAwB,WAElBzE,EAASuE,EAAIvE,OAEVG,EAAI,EAAGA,EAAIH,IAAUG,KACxBqE,EAASD,EAAIpE,GAAIA,EAAGoE,UACfpE,SAGJsE,EAsCF,IAAMC,EAAsC,eAC3CC,EAAYR,IACZS,EAAM9D,IACNC,OAAO2D,uBAAyB3D,OAAO8D,6BACrC9D,OAAe+D,0BAA6B/D,OAAegE,gCAE5DH,EAAOA,EAAII,KAAKjE,QAA0D,SAACyD,OAC1ES,EAAWd,WACNpD,OAAOmE,WAAW,WAC3BV,EAASS,EAAWN,IACnB,IAAO,KAVqC,YA2GnCQ,EAAQlD,EAAeF,EAAaD,UAC3CD,KAAKC,IAAIC,EAAKF,KAAKE,IAAIE,EAAOH,aAGvBsD,EAAeC,EAAsBC,EAAuBC,SACnE,CACL,CAACC,EAASF,EAAY,GAAI/D,GAAWiE,EAASF,EAAY,GAAKD,EAAW,GAAKA,EAAW,GAAI9D,IAC9F,CAACiE,EAASF,EAAY,GAAKD,EAAW,GAAKA,EAAW,GAAI9D,GAAWiE,EAASF,EAAY,GAAI/D,KAC9F0B,OAAO,SAAAvB,UAAQA,EAAK+D,MAAM,SAACxD,EAAO9B,UAC3BoF,EAAQtD,GAASqD,EAAYnF,GAAK8B,GAASqD,EAAYnF,OAC5D,IAAMkF,WAmDIK,EAAQC,WAChB3F,EAAS2F,EAAK3F,OAChB4F,EAAQ,EAEHzF,EAAIH,EAAS,EAAQ,GAALG,IAAUA,EACjCyF,GAASD,EAAKxF,UAETH,EAAS4F,EAAQ5F,EAAS,WAOnB6F,EAAOC,EAAgBC,OAC/BC,EAAQD,EAAK,GAAKD,EAAK,GACvBG,EAAQF,EAAK,GAAKD,EAAK,GACvBI,EAAMrE,KAAKsE,MAAMF,EAAOD,UAEhB,GAAPE,EAAWA,EAAMA,EAAgB,EAAVrE,KAAKuE,YAOrBC,EAAeC,SACtB,CAAC,EAAG,GAAGC,IAAI,SAAApG,UAAKuF,EAAQY,EAAOC,IAAI,SAAA9E,UAAOA,EAAItB,iBA8BvCqF,EAASgB,EAAaxC,UAC/BA,EAGEnC,KAAK4E,MAAMD,EAAMxC,GAAQA,EAFvBwC,WC/kBKE,EAAOC,UACdA,EAAItF,QAAQ,IAAK,aAeVuF,EAAUD,OAClBE,EAAIH,EAAOC,GACXG,EAAIC,SAASF,EAAEG,UAAU,EAAG,GAAI,IAChCC,EAAIF,SAASF,EAAEG,UAAU,EAAG,GAAI,IAChCE,EAAIH,SAASF,EAAEG,UAAU,EAAG,GAAI,IAClCG,EAAIJ,SAASF,EAAEG,UAAU,EAAG,GAAI,IAAM,WAEtCI,MAAMD,KACRA,EAAI,GAEC,CAACL,EAAGG,EAAGC,EAAGC,YAcHE,EAAUR,OAClBC,EAAID,EAAES,OAAO,GACbL,EAAIJ,EAAES,OAAO,GACbJ,EAAIL,EAAES,OAAO,GACbH,EAAIN,EAAES,OAAO,SACP,CAAC,IAAKR,EAAGA,EAAGG,EAAGA,EAAGC,EAAGA,EAAGC,EAAGA,GAE5B5D,KAAK,aAaFgE,EAAUC,SACpBX,EAAIW,EAAI,GACNC,EAAID,EAAI,GACRE,EAAIF,EAAI,GAEVX,EAAI,IACNA,GAA8C,IAAxChF,KAAK8F,OAAO9F,KAAK+F,IAAIf,GAAK,KAAO,MAEzCA,GAAK,QAECgB,GAAK,EAAIhG,KAAK+F,IAAI,EAAIF,EAAI,IAAMD,EAChCK,EAAID,GAAK,EAAIhG,KAAK+F,IAAKf,EAAI,GAAM,EAAI,IACrCkB,EAAIL,EAAIG,EAAI,EAIhBG,EADEnB,EAAI,GACA,CAACgB,EAAGC,EAAG,GACJjB,EAAI,IACP,CAACiB,EAAGD,EAAG,GACJhB,EAAI,IACP,CAAC,EAAGgB,EAAGC,GACJjB,EAAI,IACP,CAAC,EAAGiB,EAAGD,GACJhB,EAAI,IACP,CAACiB,EAAG,EAAGD,GACJhB,EAAI,IACP,CAACgB,EAAG,EAAGC,GAEP,CAAC,EAAG,EAAG,SAGR,CACLjG,KAAK4E,MAAqB,KAAduB,EAAI,GAAKD,IACrBlG,KAAK4E,MAAqB,KAAduB,EAAI,GAAKD,IACrBlG,KAAK4E,MAAqB,KAAduB,EAAI,GAAKD,cACrBP,EAAI,kBAAM,uEF3CU,iBASH,0QEiDQS,MACH,MAApBA,EAAMX,OAAO,UACM,IAAjBW,EAAMjI,QAAiC,IAAjBiI,EAAMjI,OACvB4G,EAAUS,EAAUY,IAEpBrB,EAAUqB,GAEd,IAA4B,IAAxBA,EAAMvF,QAAQ,KAAa,KAE9BwF,EAAkBxE,EAAauE,GAA9BpE,WAAQ5B,cAEV4B,IAAW5B,aAGVsC,EAAMd,EAAWxB,GACjBkG,EAA6C,CAAC,EAAG,EAAG,EAAG,GACvDnI,EAASuE,EAAIvE,cAEX6D,QACDxD,OACAC,MACE,IAAIH,EAAI,EAAGA,EAAIH,IAAUG,EAC5BgI,EAAShI,GAAK+D,WAAWK,EAAIpE,WAExBgI,OACJ5H,OACAC,MACML,EAAI,EAAGA,EAAIH,IAAUG,GACC,IAAzBoE,EAAIpE,GAAGuC,QAAQ,KACjByF,EAAShI,GAAK+D,WAAWK,EAAIpE,IAAM,IAEnCgI,EAAShI,GAAK+D,WAAWK,EAAIpE,WAI1BoH,EAAUY,mBDxILC,EAAYC,EAAYC,EAAYC,UAC9CH,EAAKG,EAAKF,EAAKC,IAAOA,EAAKC,yBAeTtG,iBACXA,GAAU/B,+BA+BH+B,UACfuG,MAAMC,QAAQxG,sBAeEA,iBACTA,GAAUrB,qBAGDqB,iBACTA,GAAUpB,gDA4FC+B,UAElBD,EAAUC,EAAM,+DAmFA8F,UAChBA,EAAIrH,QAAQ,iBAAkB,SAACsH,EAAKC,UAAWA,EAAOC,qCAcpCH,EAAa7F,uBAAAA,OAC/B6F,EAAIrH,QAAQ,kBAAmB,SAACsH,EAAKC,EAAQE,SAAY,GAAGF,EAAS/F,EAAYiG,EAAQC,kCAcvE9G,SAClB,GAAGuB,MAAMwF,KAAK/G,oCAwDrBsC,EACAC,EACAyE,OAEM3G,EAAQgC,EAAUC,EAAKC,UAEZ,EAAVlC,EAAciC,EAAIjC,GAAS2G,gDA8Cc,eAC1CC,EAAMpI,IACNC,OAAOoI,sBAAwBpI,OAAOqI,4BACpCrI,OAAesI,yBAA4BtI,OAAeuI,+BAE3DJ,EACHA,EAAIlE,KAAKjE,QACR,SAACwI,GAAqBC,aAAaD,IAPQ,oBAa1BE,MAClBC,OAAOC,YACFD,OAAOC,KAAKF,OAEfE,EAAiB,OAClB,IAAMvJ,KAAQuJ,EACjBA,EAAKrG,KAAKlD,UAELuJ,uBAOkBA,EAA8BC,gBAAAA,MACvDD,EAAKE,KAAK,SAAC1C,EAAGD,OACN4C,EAASF,EAAOlH,QAAQyE,GACxB4C,EAASH,EAAOlH,QAAQwE,UAEd,IAAZ6C,IAA6B,IAAZD,EACZ,GAEO,IAAZA,EACK,GAEO,IAAZC,GACM,EAEHD,EAASC,8BASYtI,EAAaC,OACrCwG,EAAkBnE,EAAUtC,GAA1BQ,UAAO+B,YAEXhC,EAASN,GAAO,KACZsI,EAAetI,EAAKsC,MACtBgG,EAAc,IACZ9H,EAAW8H,UACNA,EAAa/H,GACf,GAAIT,EAAqBwC,UACvBxC,EAAqBwC,GAAM/B,EAAO+H,SAGxC,GAAa,MAAThG,SACF/B,EAAQP,EAAO,WAEpBF,EAAqBwC,GAChBxC,EAAqBwC,GAAM/B,GAE7BA,0DA2BPP,EAAgBuI,EAChBC,EAAmBC,OAEdA,SACIzI,EAAK6E,IAAI,SAACtE,EAAO9B,UAAMgF,EAAQlD,EAAOgI,EAAQ9J,GAAI+J,EAAQ/J,UAE9DiK,EAAiB1I,KAAV2I,EAAU3I,KAEhBwG,EAAwB9C,EAAe1D,EAAMuI,GAAS,GAArDK,OAAUC,OACXC,EAAwBpF,EAAe1D,EAAMwI,GAAS,GAArDO,OAAUC,cAEbN,EAAQE,GAAYD,EAASE,GAC/BH,EAAQE,EACRD,EAASE,IACQE,EAARL,GAA6BM,EAATL,KAC7BD,EAAQK,EACRJ,EAASK,GAEJ,CAACN,EAAOC,iBASG1E,WAEdC,EAAQ,EAEHzF,EAHMwF,EAAK3F,OAGE,EAAQ,GAALG,IAAUA,EACjCyF,GAASD,EAAKxF,UAETyF,kEA0CyBU,OAC1BqE,EAAStE,EAAeC,GACxBsE,EAAU/E,EAAO8E,EAAQrE,EAAO,IAChCuE,EAAUhF,EAAO8E,EAAQrE,EAAO,WAE9BsE,EAAUC,GAAWA,EAAUD,EAAU/I,KAAKuE,IAAkByE,EAAVD,GAAqBC,EAAUD,GAAW/I,KAAKuE,GACzG,GAAK,oBAQae,EAAaD,UAC5BrF,KAAKiJ,KAAKjJ,KAAKkJ,KAAK7D,EAAIA,EAAE,GAAK,GAAKC,EAAE,GAAI,GAAKtF,KAAKkJ,KAAK7D,EAAIA,EAAE,GAAK,GAAKC,EAAE,GAAI,uCAoB1DxB,EAAgB3B,UAC5C2B,EAAKqF,QAAQ,SAACC,EAAG9K,GACfwF,EAAKxF,GAAKqF,EAASG,EAAKxF,GAAI6D,KAEvB2B,cEhlBsCuF,EAAmBC,UACzDA,EAAQnK,EAASoK,iBAAoBF,GAAalK,EAASqK,cAAiBH,sBAc5DI,EAAkBC,UACrCD,EAAQE,UACHF,EAAQE,UAAUC,SAASF,KAE3BD,EAAQC,UAAUG,MAAM,IAAI3I,OAAO,UAAUwI,iCAa/BD,EAAkBC,GACrCD,EAAQE,UACVF,EAAQE,UAAUG,IAAIJ,GAEtBD,EAAQC,WAAa,IAAIA,wBAcDD,EAAkBC,OAIpCK,EAHJN,EAAQE,UACVF,EAAQE,UAAUK,OAAON,IAEnBK,EAAM,IAAI7I,OAAO,UAAUwI,aAEjCD,EAAQC,UAAYD,EAAQC,UAAUlK,QAAQuK,EAAK,wBAgBrDE,EAAqDC,OAChDD,IAAaC,IAAeA,EAAW/L,aACnC,OAELsL,KAEAQ,aAAoBE,QACtBV,EAAUQ,MACL,CAAA,IAAIA,EAAS9L,aAGX,GAFPsL,EAAUQ,EAAS,WAIfG,EAA0B,GAC1BrM,EAASmB,OAAOmL,iBAAiBZ,GACjCtL,EAAS+L,EAAW/L,OAEjBG,EAAI,EAAGA,EAAIH,IAAUG,EAC5B8L,EAAUF,EAAW5L,IAAMP,EAAOmM,EAAW5L,WAExC8L,qBAoBPE,EACAC,EAAcC,EACdC,GACAH,EAAGI,iBAAiBH,EAAMC,EAAUC,yBAqBpCH,EAAiBC,EACjBC,EACAC,GAEAH,EAAGK,oBAAoBJ,EAAMC,EAAUC"} | ||
| {"version":3,"file":"utils.min.js","sources":["../src/consts.ts","../src/utils.ts","../src/color.ts","../src/dom.ts"],"sourcesContent":["/**\n* @namespace\n* @name Consts\n*/\n\nimport { IObject, OpenCloseCharacter } from \"./types\";\n\n/**\n* get string \"rgb\"\n* @memberof Color\n* @example\nimport {RGB} from \"@daybrush/utils\";\n\nconsole.log(RGB); // \"rgb\"\n*/\nexport const RGB = \"rgb\";\n/**\n* get string \"rgba\"\n* @memberof Color\n* @example\nimport {RGBA} from \"@daybrush/utils\";\n\nconsole.log(RGBA); // \"rgba\"\n*/\nexport const RGBA = \"rgba\";\n/**\n* get string \"hsl\"\n* @memberof Color\n* @example\nimport {HSL} from \"@daybrush/utils\";\n\nconsole.log(HSL); // \"hsl\"\n*/\nexport const HSL = \"hsl\";\n/**\n* get string \"hsla\"\n* @memberof Color\n* @example\nimport {HSLA} from \"@daybrush/utils\";\n\nconsole.log(HSLA); // \"hsla\"\n*/\nexport const HSLA = \"hsla\";\n/**\n* gets an array of color models.\n* @memberof Color\n* @example\nimport {COLOR_MODELS} from \"@daybrush/utils\";\n\nconsole.log(COLOR_MODELS); // [\"rgb\", \"rgba\", \"hsl\", \"hsla\"];\n*/\nexport const COLOR_MODELS = [RGB, RGBA, HSL, HSLA];\n\n/**\n* get string \"function\"\n* @memberof Consts\n* @example\nimport {FUNCTION} from \"@daybrush/utils\";\n\nconsole.log(FUNCTION); // \"function\"\n*/\nexport const FUNCTION = \"function\";\n/**\n* get string \"property\"\n* @memberof Consts\n* @example\nimport {PROPERTY} from \"@daybrush/utils\";\n\nconsole.log(PROPERTY); // \"property\"\n*/\nexport const PROPERTY = \"property\";\n/**\n* get string \"array\"\n* @memberof Consts\n* @example\nimport {ARRAY} from \"@daybrush/utils\";\n\nconsole.log(ARRAY); // \"array\"\n*/\nexport const ARRAY = \"array\";\n/**\n* get string \"object\"\n* @memberof Consts\n* @example\nimport {OBJECT} from \"@daybrush/utils\";\n\nconsole.log(OBJECT); // \"object\"\n*/\nexport const OBJECT = \"object\";\n/**\n* get string \"string\"\n* @memberof Consts\n* @example\nimport {STRING} from \"@daybrush/utils\";\n\nconsole.log(STRING); // \"string\"\n*/\nexport const STRING = \"string\";\n/**\n* get string \"number\"\n* @memberof Consts\n* @example\nimport {NUMBER} from \"@daybrush/utils\";\n\nconsole.log(NUMBER); // \"number\"\n*/\nexport const NUMBER = \"number\";\n/**\n* get string \"undefined\"\n* @memberof Consts\n* @example\nimport {UNDEFINED} from \"@daybrush/utils\";\n\nconsole.log(UNDEFINED); // \"undefined\"\n*/\nexport const UNDEFINED = \"undefined\";\n\n/**\n* Check whether the environment is window or node.js.\n* @memberof Consts\n* @example\nimport {IS_WINDOW} from \"@daybrush/utils\";\n\nconsole.log(IS_WINDOW); // false in node.js\nconsole.log(IS_WINDOW); // true in browser\n*/\nexport const IS_WINDOW = typeof window !== UNDEFINED;\n\n/**\n* Check whether the environment is window or node.js.\n* @memberof Consts\n* @name document\n* @example\nimport {IS_WINDOW} from \"@daybrush/utils\";\n\nconsole.log(IS_WINDOW); // false in node.js\nconsole.log(IS_WINDOW); // true in browser\n*/\nconst doc = (typeof document !== UNDEFINED && document) as Document; // FIXME: this type maybe false\n\nexport {doc as document};\n\nconst prefixes: string[] = [\"webkit\", \"ms\", \"moz\", \"o\"];\n\n/**\n * @namespace CrossBrowser\n */\n\n/**\n* Get a CSS property with a vendor prefix that supports cross browser.\n* @function\n* @param {string} property - A CSS property\n* @return {string} CSS property with cross-browser vendor prefix\n* @memberof CrossBrowser\n* @example\nimport {getCrossBrowserProperty} from \"@daybrush/utils\";\n\nconsole.log(getCrossBrowserProperty(\"transform\")); // \"transform\", \"-ms-transform\", \"-webkit-transform\"\nconsole.log(getCrossBrowserProperty(\"filter\")); // \"filter\", \"-webkit-filter\"\n*/\nexport const getCrossBrowserProperty = /*#__PURE__*/(property: string) => {\n if (!doc) {\n return \"\";\n }\n const styles = (doc.body || doc.documentElement).style as any;\n const length = prefixes.length;\n\n if (typeof styles[property] !== UNDEFINED) {\n return property;\n }\n for (let i = 0; i < length; ++i) {\n const name = `-${prefixes[i]}-${property}`;\n\n if (typeof styles[name] !== UNDEFINED) {\n return name;\n }\n }\n return \"\";\n};\n\n/**\n* get string \"transfrom\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {TRANSFORM} from \"@daybrush/utils\";\n\nconsole.log(TRANSFORM); // \"transform\", \"-ms-transform\", \"-webkit-transform\"\n*/\nexport const TRANSFORM = /*#__PURE__*/getCrossBrowserProperty(\"transform\");\n/**\n* get string \"filter\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {FILTER} from \"@daybrush/utils\";\n\nconsole.log(FILTER); // \"filter\", \"-ms-filter\", \"-webkit-filter\"\n*/\nexport const FILTER = /*#__PURE__*/getCrossBrowserProperty(\"filter\");\n/**\n* get string \"animation\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {ANIMATION} from \"@daybrush/utils\";\n\nconsole.log(ANIMATION); // \"animation\", \"-ms-animation\", \"-webkit-animation\"\n*/\nexport const ANIMATION = /*#__PURE__*/getCrossBrowserProperty(\"animation\");\n/**\n* get string \"keyframes\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {KEYFRAMES} from \"@daybrush/utils\";\n\nconsole.log(KEYFRAMES); // \"keyframes\", \"-ms-keyframes\", \"-webkit-keyframes\"\n*/\nexport const KEYFRAMES = /*#__PURE__*/ANIMATION.replace(\"animation\", \"keyframes\");\n\nexport const OPEN_CLOSED_CHARACTERS: OpenCloseCharacter[] = [\n { open: \"(\", close: \")\" },\n { open: `\"`, close: `\"`},\n { open: `'`, close: `'`},\n { open: `\\\\\"`, close: `\\\\\"`},\n { open: `\\\\'`, close: `\\\\'`},\n];\nexport const TINY_NUM = 0.0000001;\nexport const DEFAULT_UNIT_PRESETS: IObject<(pos: number, size?: number) => number> = {\n \"cm\": pos => pos * 96 / 2.54,\n \"mm\": pos => pos * 96 / 254,\n \"in\": pos => pos * 96,\n \"pt\": pos => pos * 96 / 72,\n \"pc\": pos => pos * 96 / 6,\n \"%\": (pos, size) => pos * size! / 100,\n \"vw\": (pos, size = window.innerWidth) => pos / 100 * size,\n \"vh\": (pos, size = window.innerHeight) => pos / 100 * size,\n \"vmax\": (pos, size = Math.max(window.innerWidth, window.innerHeight)) => pos / 100 * size,\n \"vmin\": (pos, size = Math.min(window.innerWidth, window.innerHeight)) => pos / 100 * size,\n};\n","import {\n UNDEFINED, STRING,\n OBJECT, FUNCTION,\n IS_WINDOW, OPEN_CLOSED_CHARACTERS, NUMBER,\n DEFAULT_UNIT_PRESETS,\n TINY_NUM\n} from \"./consts\";\nimport { IArrayFormat, IObject, OpenCloseCharacter, SplitOptions } from \"./types\";\n/**\n* @namespace\n* @name Utils\n*/\n\n/**\n * Returns the inner product of two numbers(`a1`, `a2`) by two criteria(`b1`, `b2`).\n * @memberof Utils\n * @param - The first number\n * @param - The second number\n * @param - The first number to base on the inner product\n * @param - The second number to base on the inner product\n * @return - Returns the inner product\nimport { dot } from \"@daybrush/utils\";\n\nconsole.log(dot(0, 15, 2, 3)); // 6\nconsole.log(dot(5, 15, 2, 3)); // 9\nconsole.log(dot(5, 15, 1, 1)); // 10\n */\nexport function dot(a1: number, a2: number, b1: number, b2: number) {\n return (a1 * b2 + a2 * b1) / (b1 + b2);\n}\n/**\n* Check the type that the value is undefined.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {boolean} true if the type is correct, false otherwise\n* @example\nimport {isUndefined} from \"@daybrush/utils\";\n\nconsole.log(isUndefined(undefined)); // true\nconsole.log(isUndefined(\"\")); // false\nconsole.log(isUndefined(1)); // false\nconsole.log(isUndefined(null)); // false\n*/\nexport function isUndefined(value: any): value is undefined {\n return (typeof value === UNDEFINED);\n}\n/**\n* Check the type that the value is object.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isObject} from \"@daybrush/utils\";\n\nconsole.log(isObject({})); // true\nconsole.log(isObject(undefined)); // false\nconsole.log(isObject(\"\")); // false\nconsole.log(isObject(null)); // false\n*/\nexport function isObject(value: any): value is IObject<any> {\n return value && (typeof value === OBJECT);\n}\n/**\n* Check the type that the value is isArray.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isArray} from \"@daybrush/utils\";\n\nconsole.log(isArray([])); // true\nconsole.log(isArray({})); // false\nconsole.log(isArray(undefined)); // false\nconsole.log(isArray(null)); // false\n*/\nexport function isArray(value: any): value is any[] {\n return Array.isArray(value);\n}\n/**\n* Check the type that the value is string.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isString} from \"@daybrush/utils\";\n\nconsole.log(isString(\"1234\")); // true\nconsole.log(isString(undefined)); // false\nconsole.log(isString(1)); // false\nconsole.log(isString(null)); // false\n*/\nexport function isString(value: any): value is string {\n return typeof value === STRING;\n}\n\nexport function isNumber(value: any): value is number {\n return typeof value === NUMBER;\n}\n\n/**\n* Check the type that the value is function.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isFunction} from \"@daybrush/utils\";\n\nconsole.log(isFunction(function a() {})); // true\nconsole.log(isFunction(() => {})); // true\nconsole.log(isFunction(\"1234\")); // false\nconsole.log(isFunction(1)); // false\nconsole.log(isFunction(null)); // false\n*/\nexport function isFunction(value: any): value is (...args: any[]) => any {\n return typeof value === FUNCTION;\n}\nfunction isEqualSeparator(\n character: string,\n separator: string,\n) {\n const isCharacterSpace = character === \"\" || character == \" \";\n const isSeparatorSpace = separator === \"\" || separator == \" \";\n\n return (isSeparatorSpace && isCharacterSpace) || character === separator;\n}\nfunction findOpen(\n openCharacter: OpenCloseCharacter,\n texts: string[],\n index: number,\n length: number,\n openCloseCharacters: OpenCloseCharacter[],\n) {\n const isIgnore = findIgnore(openCharacter, texts, index);\n\n if (!isIgnore) {\n return findClose(openCharacter, texts, index + 1, length, openCloseCharacters);\n }\n return index;\n}\nfunction findIgnore(\n character: OpenCloseCharacter,\n texts: string[],\n index: number,\n) {\n if (!character.ignore) {\n return null;\n }\n const otherText = texts.slice(Math.max(index - 3, 0), index + 3).join(\"\");\n\n return new RegExp(character.ignore).exec(otherText);\n\n}\nfunction findClose(\n closeCharacter: OpenCloseCharacter,\n texts: string[],\n index: number,\n length: number,\n openCloseCharacters: OpenCloseCharacter[],\n) {\n for (let i = index; i < length; ++i) {\n const character = texts[i].trim();\n\n if (character === closeCharacter.close && !findIgnore(closeCharacter, texts, i)) {\n return i;\n }\n let nextIndex = i;\n // re open\n const openCharacter = find(openCloseCharacters, ({ open }) => open === character);\n\n if (openCharacter) {\n nextIndex = findOpen(openCharacter, texts, i, length, openCloseCharacters);\n }\n if (nextIndex === -1) {\n break;\n }\n i = nextIndex;\n }\n return -1;\n}\n\nexport function splitText(\n text: string,\n splitOptions: string | SplitOptions,\n) {\n const {\n separator = \",\",\n isSeparateFirst,\n isSeparateOnlyOpenClose,\n isSeparateOpenClose = isSeparateOnlyOpenClose,\n openCloseCharacters = OPEN_CLOSED_CHARACTERS,\n } = isString(splitOptions) ? {\n separator: splitOptions,\n } as SplitOptions : splitOptions;\n const openClosedText = openCloseCharacters.map(({ open, close }) => {\n if (open === close) {\n return open;\n }\n return `${open}|${close}`;\n }).join(\"|\");\n const regexText = `(\\\\s*${separator}\\\\s*|${openClosedText}|\\\\s+)`;\n const regex = new RegExp(regexText, \"g\");\n const texts = text.split(regex).filter(Boolean);\n const length = texts.length;\n const values: string[] = [];\n let tempValues: string[] = [];\n\n function resetTemp() {\n if (tempValues.length) {\n values.push(tempValues.join(\"\"));\n tempValues = [];\n\n return true;\n }\n return false;\n }\n for (let i = 0; i < length; ++i) {\n const character = texts[i].trim();\n let nextIndex = i;\n\n\n const openCharacter = find(openCloseCharacters, ({ open }) => open === character);\n const closeCharacter = find(openCloseCharacters, ({ close }) => close === character);\n\n if (openCharacter) {\n nextIndex = findOpen(openCharacter, texts, i, length, openCloseCharacters);\n\n if (nextIndex !== -1 && isSeparateOpenClose) {\n if (resetTemp() && isSeparateFirst) {\n break;\n }\n values.push(texts.slice(i, nextIndex + 1).join(\"\"));\n i = nextIndex;\n\n if (isSeparateFirst) {\n break;\n }\n continue;\n }\n } else if (closeCharacter && !findIgnore(closeCharacter, texts, i)) {\n throw new Error(`invalid format: ${closeCharacter.close}`);\n } else if (isEqualSeparator(character, separator) && !isSeparateOnlyOpenClose) {\n resetTemp();\n if (isSeparateFirst) {\n break;\n }\n continue;\n }\n\n if (nextIndex === -1) {\n nextIndex = length - 1;\n }\n tempValues.push(texts.slice(i, nextIndex + 1).join(\"\"));\n i = nextIndex;\n }\n if (tempValues.length) {\n values.push(tempValues.join(\"\"));\n }\n return values;\n}\n\n/**\n* divide text by space.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {Array} divided texts\n* @example\nimport {spliceSpace} from \"@daybrush/utils\";\n\nconsole.log(splitSpace(\"a b c d e f g\"));\n// [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\"]\nconsole.log(splitSpace(\"'a,b' c 'd,e' f g\"));\n// [\"'a,b'\", \"c\", \"'d,e'\", \"f\", \"g\"]\n*/\nexport function splitSpace(text: string) {\n // divide comma(space)\n return splitText(text, \"\");\n}\n\n/**\n* divide text by comma.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {Array} divided texts\n* @example\nimport {splitComma} from \"@daybrush/utils\";\n\nconsole.log(splitComma(\"a,b,c,d,e,f,g\"));\n// [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\"]\nconsole.log(splitComma(\"'a,b',c,'d,e',f,g\"));\n// [\"'a,b'\", \"c\", \"'d,e'\", \"f\", \"g\"]\n*/\nexport function splitComma(text: string): string[] {\n // divide comma(,)\n // \"[^\"]*\"|'[^']*'\n return splitText(text, \",\");\n}\n/**\n* divide text by bracket \"(\", \")\".\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {object} divided texts\n* @example\nimport {splitBracket} from \"@daybrush/utils\";\n\nconsole.log(splitBracket(\"a(1, 2)\"));\n// {prefix: \"a\", value: \"1, 2\", suffix: \"\"}\nconsole.log(splitBracket(\"a(1, 2)b\"));\n// {prefix: \"a\", value: \"1, 2\", suffix: \"b\"}\n*/\nexport function splitBracket(text: string) {\n const matches = (/([^(]*)\\(([\\s\\S]*)\\)([\\s\\S]*)/g).exec(text);\n\n if (!matches || matches.length < 4) {\n return {};\n } else {\n return { prefix: matches[1], value: matches[2], suffix: matches[3] };\n }\n}\n/**\n* divide text by number and unit.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {} divided texts\n* @example\nimport {splitUnit} from \"@daybrush/utils\";\n\nconsole.log(splitUnit(\"10px\"));\n// {prefix: \"\", value: 10, unit: \"px\"}\nconsole.log(splitUnit(\"-10px\"));\n// {prefix: \"\", value: -10, unit: \"px\"}\nconsole.log(splitUnit(\"a10%\"));\n// {prefix: \"a\", value: 10, unit: \"%\"}\n*/\nexport function splitUnit(text: string): { prefix: string, unit: string, value: number } {\n const matches = /^([^\\d|e|\\-|\\+]*)((?:\\d|\\.|-|e-|e\\+)+)(\\S*)$/g.exec(text);\n\n if (!matches) {\n return { prefix: \"\", unit: \"\", value: NaN };\n }\n const prefix = matches[1];\n const value = matches[2];\n const unit = matches[3];\n\n return { prefix, unit, value: parseFloat(value) };\n}\n\n/**\n* transform strings to camel-case\n* @memberof Utils\n* @param {String} text - string\n* @return {String} camel-case string\n* @example\nimport {camelize} from \"@daybrush/utils\";\n\nconsole.log(camelize(\"transform-origin\")); // transformOrigin\nconsole.log(camelize(\"abcd_efg\")); // abcdEfg\nconsole.log(camelize(\"abcd efg\")); // abcdEfg\n*/\nexport function camelize(str: string) {\n return str.replace(/[\\s-_]([a-z])/g, (all, letter) => letter.toUpperCase());\n}\n/**\n* transform a camelized string into a lowercased string.\n* @memberof Utils\n* @param {string} text - a camel-cased string\n* @param {string} [separator=\"-\"] - a separator\n* @return {string} a lowercased string\n* @example\nimport {decamelize} from \"@daybrush/utils\";\n\nconsole.log(decamelize(\"transformOrigin\")); // transform-origin\nconsole.log(decamelize(\"abcdEfg\", \"_\")); // abcd_efg\n*/\nexport function decamelize(str: string, separator: string = \"-\") {\n return str.replace(/([a-z])([A-Z])/g, (all, letter, letter2) => `${letter}${separator}${letter2.toLowerCase()}`);\n}\n\n/**\n* transforms something in an array into an array.\n* @memberof Utils\n* @param - Array form\n* @return an array\n* @example\nimport {toArray} from \"@daybrush/utils\";\n\nconst arr1 = toArray(document.querySelectorAll(\".a\")); // Element[]\nconst arr2 = toArray(document.querySelectorAll<HTMLElement>(\".a\")); // HTMLElement[]\n*/\nexport function toArray<T>(value: IArrayFormat<T>): T[] {\n return [].slice.call(value);\n}\n\n/**\n* Date.now() method\n* @memberof CrossBrowser\n* @return {number} milliseconds\n* @example\nimport {now} from \"@daybrush/utils\";\n\nconsole.log(now()); // 12121324241(milliseconds)\n*/\nexport function now() {\n return Date.now ? Date.now() : new Date().getTime();\n}\n\n/**\n* Returns the index of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `findIndex` was called upon.\n* @param - A function to execute on each value in the array until the function returns true, indicating that the satisfying element was found.\n* @param - Returns defaultIndex if not found by the function.\n* @example\nimport { findIndex } from \"@daybrush/utils\";\n\nfindIndex([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // 1\n*/\nexport function findIndex<T>(\n arr: T[],\n callback: (element: T, index: number, arr: T[]) => any,\n defaultIndex: number = -1,\n): number {\n const length = arr.length;\n\n for (let i = 0; i < length; ++i) {\n if (callback(arr[i], i, arr)) {\n return i;\n }\n }\n return defaultIndex;\n}\n\n/**\n* Returns the value of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `find` was called upon.\n* @param - A function to execute on each value in the array,\n* @param - Returns defalutValue if not found by the function.\n* @example\nimport { find } from \"@daybrush/utils\";\n\nfind([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // {a: 2}\n*/\nexport function find<T>(\n arr: T[],\n callback: (element: T, index: number, arr: T[]) => any,\n defalutValue?: T,\n): T | undefined {\n const index = findIndex(arr, callback);\n\n return index > - 1 ? arr[index] : defalutValue;\n}\n\n/**\n* window.requestAnimationFrame() method with cross browser.\n* @function\n* @memberof CrossBrowser\n* @param {FrameRequestCallback} callback - The function to call when it's time to update your animation for the next repaint.\n* @return {number} id\n* @example\nimport {requestAnimationFrame} from \"@daybrush/utils\";\n\nrequestAnimationFrame((timestamp) => {\n console.log(timestamp);\n});\n*/\nexport const requestAnimationFrame = /*#__PURE__*/(() => {\n const firstTime = now();\n const raf = IS_WINDOW\n && (window.requestAnimationFrame || window.webkitRequestAnimationFrame\n || (window as any).mozRequestAnimationFrame || (window as any).msRequestAnimationFrame);\n\n return raf ? (raf.bind(window) as (callback: FrameRequestCallback) => number) : ((callback: FrameRequestCallback) => {\n const currTime = now();\n const id = window.setTimeout(() => {\n callback(currTime - firstTime);\n }, 1000 / 60);\n return id;\n });\n})();\n\n/**\n* window.cancelAnimationFrame() method with cross browser.\n* @function\n* @memberof CrossBrowser\n* @param {number} handle - the id obtained through requestAnimationFrame method\n* @return {void}\n* @example\nimport { requestAnimationFrame, cancelAnimationFrame } from \"@daybrush/utils\";\n\nconst id = requestAnimationFrame((timestamp) => {\n console.log(timestamp);\n});\n\ncancelAnimationFrame(id);\n*/\nexport const cancelAnimationFrame = /*#__PURE__*/(() => {\n const caf = IS_WINDOW\n && (window.cancelAnimationFrame || window.webkitCancelAnimationFrame\n || (window as any).mozCancelAnimationFrame || (window as any).msCancelAnimationFrame);\n\n return caf\n ? caf.bind(window) as (handle: number) => void\n : ((handle: number) => { clearTimeout(handle); });\n})();\n/**\n* @function\n* @memberof Utils\n*/\nexport function getKeys(obj: IObject<any>): string[] {\n if (Object.keys) {\n return Object.keys(obj);\n }\n const keys: string[] = [];\n for (const name in keys) {\n keys.push(name);\n }\n return keys;\n}\n\n/**\n* @function\n* @memberof Utils\n*/\nexport function sortOrders(keys: Array<string | number>, orders: Array<string | number> = []) {\n keys.sort((a, b) => {\n const index1 = orders.indexOf(a);\n const index2 = orders.indexOf(b);\n\n if (index2 === -1 && index1 === -1) {\n return 0;\n }\n if (index1 === -1) {\n return 1;\n }\n if (index2 === -1) {\n return -1;\n }\n return index1 - index2;\n });\n}\n\n/**\n* convert unit size to px size\n* @function\n* @memberof Utils\n*/\nexport function convertUnitSize(pos: string, size: number | IObject<((pos: number) => number) | number>) {\n const { value, unit } = splitUnit(pos);\n\n if (isObject(size)) {\n const sizeFunction = size[unit];\n if (sizeFunction) {\n if (isFunction(sizeFunction)) {\n return sizeFunction(value);\n } else if (DEFAULT_UNIT_PRESETS[unit]) {\n return DEFAULT_UNIT_PRESETS[unit](value, sizeFunction);\n }\n }\n } else if (unit === \"%\") {\n return value * size / 100;\n }\n if (DEFAULT_UNIT_PRESETS[unit]) {\n return DEFAULT_UNIT_PRESETS[unit](value);\n }\n return value;\n}\n\n/**\n* calculate between min, max\n* @function\n* @memberof Utils\n*/\nexport function between(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(value, max));\n}\n\nexport function checkBoundSize(targetSize: number[], compareSize: number[], isMax: boolean) {\n return [\n [throttle(compareSize[0], TINY_NUM), throttle(compareSize[0] * targetSize[1] / targetSize[0], TINY_NUM)],\n [throttle(compareSize[1] * targetSize[0] / targetSize[1], TINY_NUM), throttle(compareSize[1], TINY_NUM)],\n ].filter(size => size.every((value, i) => {\n return isMax ? value <= compareSize[i] : value >= compareSize[i];\n }))[0] || targetSize;\n}\n\n/**\n* calculate bound size\n* @function\n* @memberof Utils\n*/\nexport function calculateBoundSize(\n size: number[], minSize: number[],\n maxSize: number[], keepRatio?: boolean,\n): number[] {\n if (!keepRatio) {\n return size.map((value, i) => between(value, minSize[i], maxSize[i]));\n }\n let [width, height] = size;\n // width : height = minWidth : minHeight;\n const [minWidth, minHeight] = checkBoundSize(size, minSize, false);\n const [maxWidth, maxHeight] = checkBoundSize(size, maxSize, true);\n\n if (width < minWidth || height < minHeight) {\n width = minWidth;\n height = minHeight;\n } else if (width > maxWidth || height > maxHeight) {\n width = maxWidth;\n height = maxHeight;\n }\n return [width, height];\n}\n\n\n/**\n* Add all the numbers.\n* @function\n* @memberof Utils\n*/\nexport function sum(nums: number[]): number {\n const length = nums.length;\n let total = 0;\n\n for (let i = length - 1; i >= 0; --i) {\n total += nums[i];\n }\n return total;\n}\n\n/**\n* Average all numbers.\n* @function\n* @memberof Utils\n*/\nexport function average(nums: number[]) {\n const length = nums.length;\n let total = 0;\n\n for (let i = length - 1; i >= 0; --i) {\n total += nums[i];\n }\n return length ? total / length : 0;\n}\n/**\n* Get the angle of two points. (0 <= rad < 359)\n* @function\n* @memberof Utils\n*/\nexport function getRad(pos1: number[], pos2: number[]): number {\n const distX = pos2[0] - pos1[0];\n const distY = pos2[1] - pos1[1];\n const rad = Math.atan2(distY, distX);\n\n return rad >= 0 ? rad : rad + Math.PI * 2;\n}\n/**\n* Get the average point of all points.\n* @function\n* @memberof Utils\n*/\nexport function getCenterPoint(points: number[][]): number[] {\n return [0, 1].map(i => average(points.map(pos => pos[i])));\n}\n/**\n* Gets the direction of the shape.\n* @function\n* @memberof Utils\n*/\nexport function getShapeDirection(points: number[][]): 1 | -1 {\n const center = getCenterPoint(points);\n const pos1Rad = getRad(center, points[0]);\n const pos2Rad = getRad(center, points[1]);\n\n return (pos1Rad < pos2Rad && pos2Rad - pos1Rad < Math.PI) || (pos1Rad > pos2Rad && pos2Rad - pos1Rad < -Math.PI)\n ? 1 : -1;\n}\n\n/**\n* Get the distance between two points.\n* @function\n* @memberof Utils\n*/\nexport function getDist(a: number[], b?: number[]) {\n return Math.sqrt(Math.pow((b ? b[0] : 0) - a[0], 2) + Math.pow((b ? b[1] : 0) - a[1], 2));\n}\n\n/**\n* throttle number depending on the unit.\n* @function\n* @memberof Utils\n*/\nexport function throttle(num: number, unit?: number) {\n if (!unit) {\n return num;\n }\n return Math.round(num / unit) * unit;\n}\n\n/**\n* throttle number array depending on the unit.\n* @function\n* @memberof Utils\n*/\nexport function throttleArray(nums: number[], unit?: number) {\n nums.forEach((_, i) => {\n nums[i] = throttle(nums[i], unit);\n });\n return nums;\n}\n\nexport function counter(num: number) {\n const nums: number[] = [];\n\n for (let i = 0; i < num; ++i) {\n nums.push(i);\n }\n\n return nums;\n}\n","import { RGB, RGBA, HSL, HSLA } from \"./consts\";\nimport { splitBracket, splitComma } from \"./utils\";\n\n/**\n* @namespace\n* @name Color\n*/\n\n/**\n* Remove the # from the hex color.\n* @memberof Color\n* @param {} hex - hex color\n* @return {} hex color\n* @example\nimport {cutHex} from \"@daybrush/utils\";\n\nconsole.log(cutHex(\"#000000\")) // \"000000\"\n*/\nexport function cutHex(hex: string) {\n return hex.replace(\"#\", \"\");\n}\n/**\n* convert hex color to rgb color.\n* @memberof Color\n* @param {} hex - hex color\n* @return {} rgb color\n* @example\nimport {hexToRGBA} from \"@daybrush/utils\";\n\nconsole.log(hexToRGBA(\"#00000005\"));\n// [0, 0, 0, 1]\nconsole.log(hexToRGBA(\"#201045\"));\n// [32, 16, 69, 1]\n*/\nexport function hexToRGBA(hex: string): [number, number, number, number] {\n const h = cutHex(hex);\n const r = parseInt(h.substring(0, 2), 16);\n const g = parseInt(h.substring(2, 4), 16);\n const b = parseInt(h.substring(4, 6), 16);\n let a = parseInt(h.substring(6, 8), 16) / 255;\n\n if (isNaN(a)) {\n a = 1;\n }\n return [r, g, b, a];\n}\n\n/**\n* convert 3(or 4)-digit hex color to 6(or 8)-digit hex color.\n* @memberof Color\n* @param {} hex - 3(or 4)-digit hex color\n* @return {} 6(or 8)-digit hex color\n* @example\nimport {toFullHex} from \"@daybrush/utils\";\n\nconsole.log(toFullHex(\"#123\")); // \"#112233\"\nconsole.log(toFullHex(\"#123a\")); // \"#112233aa\"\n*/\nexport function toFullHex(h: string): string {\n const r = h.charAt(1);\n const g = h.charAt(2);\n const b = h.charAt(3);\n const a = h.charAt(4);\n const arr = [\"#\", r, r, g, g, b, b, a, a];\n\n return arr.join(\"\");\n}\n/**\n* convert hsl color to rgba color.\n* @memberof Color\n* @param {} hsl - hsl color(hue: 0 ~ 360, saturation: 0 ~ 1, lightness: 0 ~ 1, alpha: 0 ~ 1)\n* @return {} rgba color\n* @example\nimport {hslToRGBA} from \"@daybrush/utils\";\n\nconsole.log(hslToRGBA([150, 0.5, 0.4]));\n// [51, 153, 102, 1]\n*/\nexport function hslToRGBA(hsl: readonly [number, number, number, number?]): [number, number, number, number] {\n let h = hsl[0];\n const s = hsl[1];\n const l = hsl[2];\n\n if (h < 0) {\n h += Math.floor((Math.abs(h) + 360) / 360) * 360;\n }\n h %= 360;\n\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs((h / 60) % 2 - 1));\n const m = l - c / 2;\n let rgb: [number, number, number];\n\n if (h < 60) {\n rgb = [c, x, 0];\n } else if (h < 120) {\n rgb = [x, c, 0];\n } else if (h < 180) {\n rgb = [0, c, x];\n } else if (h < 240) {\n rgb = [0, x, c];\n } else if (h < 300) {\n rgb = [x, 0, c];\n } else if (h < 360) {\n rgb = [c, 0, x];\n } else {\n rgb = [0, 0, 0];\n }\n\n return [\n Math.round((rgb[0] + m) * 255),\n Math.round((rgb[1] + m) * 255),\n Math.round((rgb[2] + m) * 255),\n hsl[3] ?? 1,\n ];\n}\n/**\n* convert string to rgba color.\n* @memberof Color\n* @param {} - 3-hex(#000), 4-hex(#0000) 6-hex(#000000), 8-hex(#00000000) or RGB(A), or HSL(A)\n* @return {} rgba color\n* @example\nimport {stringToRGBA} from \"@daybrush/utils\";\n\nconsole.log(stringToRGBA(\"#000000\")); // [0, 0, 0, 1]\nconsole.log(stringToRGBA(\"rgb(100, 100, 100)\")); // [100, 100, 100, 1]\nconsole.log(stringToRGBA(\"hsl(150, 0.5, 0.4)\")); // [51, 153, 102, 1]\n*/\nexport function stringToRGBA(color: string): [number, number, number, number] {\n if (color.charAt(0) === \"#\") {\n if (color.length === 4 || color.length === 5) {\n return hexToRGBA(toFullHex(color));\n } else {\n return hexToRGBA(color);\n }\n } else if (color.indexOf(\"(\") !== -1) {\n // in bracket.\n const {prefix, value} = splitBracket(color);\n\n if (!prefix || !value) {\n return undefined as never;\n }\n const arr = splitComma(value);\n const colorArr: [number, number, number, number] = [0, 0, 0, 1];\n const length = arr.length;\n\n switch (prefix) {\n case RGB:\n case RGBA:\n for (let i = 0; i < length; ++i) {\n colorArr[i] = parseFloat(arr[i]);\n }\n return colorArr;\n case HSL:\n case HSLA:\n for (let i = 0; i < length; ++i) {\n if (arr[i].indexOf(\"%\") !== -1) {\n colorArr[i] = parseFloat(arr[i]) / 100;\n } else {\n colorArr[i] = parseFloat(arr[i]);\n }\n }\n // hsl, hsla to rgba\n return hslToRGBA(colorArr);\n }\n }\n return undefined as never;\n}\n","import { document } from \"./consts\";\nimport { IObject, IEventMap } from \"./types\";\n\n/**\n * @namespace DOM\n */\n\nexport function $<K extends keyof HTMLElementTagNameMap>(selectors: K, multi: true):\n NodeListOf<HTMLElementTagNameMap[K]>;\nexport function $<K extends keyof SVGElementTagNameMap>(selectors: K, multi: true): NodeListOf<SVGElementTagNameMap[K]>;\nexport function $<E extends Element = Element>(selectors: string, multi: true): NodeListOf<E>;\n\nexport function $<K extends keyof HTMLElementTagNameMap>(selectors: K, multi?: false): HTMLElementTagNameMap[K] | null;\nexport function $<K extends keyof SVGElementTagNameMap>(selectors: K, multi?: false): SVGElementTagNameMap[K] | null;\nexport function $<E extends Element = Element>(selectors: string, multi?: false): E | null;\n/**\n * Returns all element descendants of node that\n * match selectors.\n */\n\n/**\n * Checks if the specified class value exists in the element's class attribute.\n * @memberof DOM\n * @param - A DOMString containing one or more selectors to match\n * @param - If multi is true, a DOMString containing one or more selectors to match against.\n * @example\nimport {$} from \"@daybrush/utils\";\n\nconsole.log($(\"div\")); // div element\nconsole.log($(\"div\", true)); // [div, div] elements\n*/\nexport function $<E extends Element = Element>(selectors: string, multi?: boolean): E | NodeListOf<E> | null {\n return multi ? document.querySelectorAll<E>(selectors) : document.querySelector<E>(selectors);\n}\n\n/**\n* Checks if the specified class value exists in the element's class attribute.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to search\n* @return {boolean} return false if the class is not found.\n* @example\nimport {hasClass} from \"@daybrush/utils\";\n\nconsole.log(hasClass(element, \"start\")); // true or false\n*/\nexport function hasClass(element: Element, className: string) {\n if (element.classList) {\n return element.classList.contains(className);\n }\n return !!element.className.match(new RegExp(`(\\\\s|^)${className}(\\\\s|$)`));\n}\n\n/**\n* Add the specified class value. If these classe already exist in the element's class attribute they are ignored.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to add\n* @example\nimport {addClass} from \"@daybrush/utils\";\n\naddClass(element, \"start\");\n*/\nexport function addClass(element: Element, className: string) {\n if (element.classList) {\n element.classList.add(className);\n } else {\n element.className += ` ${className}`;\n }\n}\n\n/**\n* Removes the specified class value.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to remove\n* @example\nimport {removeClass} from \"@daybrush/utils\";\n\nremoveClass(element, \"start\");\n*/\nexport function removeClass(element: Element, className: string) {\n if (element.classList) {\n element.classList.remove(className);\n } else {\n const reg = new RegExp(`(\\\\s|^)${className}(\\\\s|$)`);\n\n element.className = element.className.replace(reg, \" \");\n }\n}\n\n/**\n* Gets the CSS properties from the element.\n* @memberof DOM\n* @param elements - elements\n* @param properites - the CSS properties\n* @return returns CSS properties and values.\n* @example\nimport {fromCSS} from \"@daybrush/utils\";\n\nconsole.log(fromCSS(element, [\"left\", \"opacity\", \"top\"])); // {\"left\": \"10px\", \"opacity\": 1, \"top\": \"10px\"}\n*/\nexport function fromCSS(\n elements: Element | Element[] | NodeListOf<Element>, properties: string[]): IObject<any> {\n if (!elements || !properties || !properties.length) {\n return {};\n }\n let element;\n\n if (elements instanceof Element) {\n element = elements;\n } else if (elements.length) {\n element = elements[0];\n } else {\n return {};\n }\n const cssObject: IObject<any> = {};\n const styles = window.getComputedStyle(element) as any;\n const length = properties.length;\n\n for (let i = 0; i < length; ++i) {\n cssObject[properties[i]] = styles[properties[i]];\n }\n return cssObject;\n}\n\nexport function addEvent<K extends keyof IEventMap>(\n el: EventTarget, type: K, listener: (e: IEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;\n/**\n* Sets up a function that will be called whenever the specified event is delivered to the target\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The object which receives a notification (an object that implements the Event interface) when an event of the specified type occurs\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent} from \"@daybrush/utils\";\n\naddEvent(el, \"click\", e => {\n console.log(e);\n});\n*/\nexport function addEvent(\n el: EventTarget,\n type: string, listener: (e: Event) => void,\n options?: boolean | AddEventListenerOptions) {\n el.addEventListener(type, listener, options);\n}\n\nexport function removeEvent<K extends keyof IEventMap>(\n el: EventTarget, type: K, listener: (e: IEventMap[K]) => void, options?: boolean | EventListenerOptions): void;\n/**\n* removes from the EventTarget an event listener previously registered with EventTarget.addEventListener()\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The EventListener function of the event handler to remove from the event target.\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent, removeEvent} from \"@daybrush/utils\";\nconst listener = e => {\n console.log(e);\n};\naddEvent(el, \"click\", listener);\nremoveEvent(el, \"click\", listener);\n*/\nexport function removeEvent(\n el: EventTarget, type: string,\n listener: (e: Event) => void,\n options?: boolean | EventListenerOptions,\n) {\n el.removeEventListener(type, listener, options);\n}\n"],"names":["getCrossBrowserProperty","property","doc","styles","body","documentElement","style","length","prefixes","UNDEFINED","i","name","RGB","RGBA","HSL","HSLA","COLOR_MODELS","FUNCTION","OBJECT","STRING","NUMBER","IS_WINDOW","window","document","TRANSFORM","FILTER","ANIMATION","KEYFRAMES","replace","OPEN_CLOSED_CHARACTERS","open","close","TINY_NUM","DEFAULT_UNIT_PRESETS","pos","size","innerWidth","innerHeight","Math","max","min","isObject","value","isString","isFunction","findOpen","openCharacter","texts","index","openCloseCharacters","findIgnore","closeCharacter","character","trim","nextIndex","find","_a","findClose","ignore","otherText","slice","join","RegExp","exec","splitText","text","splitOptions","separator","_b","isSeparateFirst","isSeparateOnlyOpenClose","_c","isSeparateOpenClose","_d","openClosedText","map","regex","split","filter","Boolean","values","tempValues","resetTemp","push","Error","splitComma","splitBracket","matches","prefix","suffix","splitUnit","unit","NaN","parseFloat","now","Date","getTime","findIndex","arr","callback","defaultIndex","defalutValue","requestAnimationFrame","firstTime","raf","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","bind","currTime","setTimeout","between","checkBoundSize","targetSize","compareSize","isMax","throttle","every","average","nums","total","getRad","pos1","pos2","distX","distY","rad","atan2","PI","getCenterPoint","points","num","round","cutHex","hex","hexToRGBA","h","r","parseInt","substring","g","b","a","isNaN","toFullHex","charAt","hslToRGBA","hsl","s","l","floor","abs","c","x","m","rgb","color","indexOf","colorArr","a1","a2","b1","b2","Array","isArray","str","all","letter","toUpperCase","letter2","toLowerCase","call","caf","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","msCancelAnimationFrame","handle","clearTimeout","obj","Object","keys","orders","sort","index1","index2","sizeFunction","minSize","maxSize","keepRatio","width","height","minWidth","minHeight","maxWidth","maxHeight","center","pos1Rad","pos2Rad","sqrt","pow","forEach","_","selectors","multi","querySelectorAll","querySelector","element","className","classList","contains","match","add","reg","remove","elements","properties","Element","cssObject","getComputedStyle","el","type","listener","options","addEventListener","removeEventListener"],"mappings":"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"} |
+1
-1
| { | ||
| "name": "@daybrush/utils", | ||
| "version": "1.5.0", | ||
| "version": "1.6.0-beta.0", | ||
| "description": "utils for daybrush", | ||
@@ -5,0 +5,0 @@ "main": "dist/utils.js", |
+8
-2
@@ -6,3 +6,3 @@ /** | ||
| import { IObject } from "./types"; | ||
| import { IObject, OpenCloseCharacter } from "./types"; | ||
@@ -219,3 +219,9 @@ /** | ||
| export const OPEN_CLOSED_CHARACTER = [`"`, `'`, `\\"`, `\\'`]; | ||
| export const OPEN_CLOSED_CHARACTERS: OpenCloseCharacter[] = [ | ||
| { open: "(", close: ")" }, | ||
| { open: `"`, close: `"`}, | ||
| { open: `'`, close: `'`}, | ||
| { open: `\\"`, close: `\\"`}, | ||
| { open: `\\'`, close: `\\'`}, | ||
| ]; | ||
| export const TINY_NUM = 0.0000001; | ||
@@ -222,0 +228,0 @@ export const DEFAULT_UNIT_PRESETS: IObject<(pos: number, size?: number) => number> = { |
+16
-0
@@ -22,1 +22,17 @@ | ||
| } | ||
| /** | ||
| * @typedef | ||
| */ | ||
| export interface OpenCloseCharacter { | ||
| open: string; | ||
| close: string; | ||
| ignore?: RegExp; | ||
| } | ||
| export interface SplitOptions { | ||
| separator?: string; | ||
| isSeparateFirst?: boolean; | ||
| isSeparateOnlyOpenClose?: boolean, | ||
| isSeparateOpenClose?: boolean, | ||
| openCloseCharacters?: OpenCloseCharacter[], | ||
| } |
+116
-21
| import { | ||
| UNDEFINED, STRING, | ||
| OBJECT, FUNCTION, | ||
| IS_WINDOW, OPEN_CLOSED_CHARACTER, NUMBER, | ||
| IS_WINDOW, OPEN_CLOSED_CHARACTERS, NUMBER, | ||
| DEFAULT_UNIT_PRESETS, | ||
| TINY_NUM | ||
| } from "./consts"; | ||
| import { IArrayFormat, IObject } from "./types"; | ||
| import { IArrayFormat, IObject, OpenCloseCharacter, SplitOptions } from "./types"; | ||
| /** | ||
@@ -117,15 +117,57 @@ * @namespace | ||
| } | ||
| function isEqualSeparator( | ||
| character: string, | ||
| separator: string, | ||
| ) { | ||
| const isCharacterSpace = character === "" || character == " "; | ||
| const isSeparatorSpace = separator === "" || separator == " "; | ||
| function findClosed(closedCharacter: string, texts: string[], index: number, length: number) { | ||
| return (isSeparatorSpace && isCharacterSpace) || character === separator; | ||
| } | ||
| function findOpen( | ||
| openCharacter: OpenCloseCharacter, | ||
| texts: string[], | ||
| index: number, | ||
| length: number, | ||
| openCloseCharacters: OpenCloseCharacter[], | ||
| ) { | ||
| const isIgnore = findIgnore(openCharacter, texts, index); | ||
| if (!isIgnore) { | ||
| return findClose(openCharacter, texts, index + 1, length, openCloseCharacters); | ||
| } | ||
| return index; | ||
| } | ||
| function findIgnore( | ||
| character: OpenCloseCharacter, | ||
| texts: string[], | ||
| index: number, | ||
| ) { | ||
| if (!character.ignore) { | ||
| return null; | ||
| } | ||
| const otherText = texts.slice(Math.max(index - 3, 0), index + 3).join(""); | ||
| return new RegExp(character.ignore).exec(otherText); | ||
| } | ||
| function findClose( | ||
| closeCharacter: OpenCloseCharacter, | ||
| texts: string[], | ||
| index: number, | ||
| length: number, | ||
| openCloseCharacters: OpenCloseCharacter[], | ||
| ) { | ||
| for (let i = index; i < length; ++i) { | ||
| const character = texts[i].trim(); | ||
| if (character === closedCharacter) { | ||
| if (character === closeCharacter.close && !findIgnore(closeCharacter, texts, i)) { | ||
| return i; | ||
| } | ||
| let nextIndex = i; | ||
| if (character === "(") { | ||
| nextIndex = findClosed(")", texts, i + 1, length); | ||
| } else if (OPEN_CLOSED_CHARACTER.indexOf(character) > -1) { | ||
| nextIndex = findClosed(character, texts, i + 1, length); | ||
| // re open | ||
| const openCharacter = find(openCloseCharacters, ({ open }) => open === character); | ||
| if (openCharacter) { | ||
| nextIndex = findOpen(openCharacter, texts, i, length, openCloseCharacters); | ||
| } | ||
@@ -139,4 +181,23 @@ if (nextIndex === -1) { | ||
| } | ||
| export function splitText(text: string, separator: string) { | ||
| const regexText = `(\\s*${separator || ","}\\s*|\\(|\\)|"|'|\\\\"|\\\\'|\\s+)`; | ||
| export function splitText( | ||
| text: string, | ||
| splitOptions: string | SplitOptions, | ||
| ) { | ||
| const { | ||
| separator = ",", | ||
| isSeparateFirst, | ||
| isSeparateOnlyOpenClose, | ||
| isSeparateOpenClose = isSeparateOnlyOpenClose, | ||
| openCloseCharacters = OPEN_CLOSED_CHARACTERS, | ||
| } = isString(splitOptions) ? { | ||
| separator: splitOptions, | ||
| } as SplitOptions : splitOptions; | ||
| const openClosedText = openCloseCharacters.map(({ open, close }) => { | ||
| if (open === close) { | ||
| return open; | ||
| } | ||
| return `${open}|${close}`; | ||
| }).join("|"); | ||
| const regexText = `(\\s*${separator}\\s*|${openClosedText}|\\s+)`; | ||
| const regex = new RegExp(regexText, "g"); | ||
@@ -148,2 +209,11 @@ const texts = text.split(regex).filter(Boolean); | ||
| function resetTemp() { | ||
| if (tempValues.length) { | ||
| values.push(tempValues.join("")); | ||
| tempValues = []; | ||
| return true; | ||
| } | ||
| return false; | ||
| } | ||
| for (let i = 0; i < length; ++i) { | ||
@@ -153,13 +223,28 @@ const character = texts[i].trim(); | ||
| if (character === "(") { | ||
| nextIndex = findClosed(")", texts, i + 1, length); | ||
| } else if (character === ")") { | ||
| throw new Error("invalid format"); | ||
| } else if (OPEN_CLOSED_CHARACTER.indexOf(character) > -1) { | ||
| nextIndex = findClosed(character, texts, i + 1, length); | ||
| } else if (character === separator) { | ||
| if (tempValues.length) { | ||
| values.push(tempValues.join("")); | ||
| tempValues = []; | ||
| const openCharacter = find(openCloseCharacters, ({ open }) => open === character); | ||
| const closeCharacter = find(openCloseCharacters, ({ close }) => close === character); | ||
| if (openCharacter) { | ||
| nextIndex = findOpen(openCharacter, texts, i, length, openCloseCharacters); | ||
| if (nextIndex !== -1 && isSeparateOpenClose) { | ||
| if (resetTemp() && isSeparateFirst) { | ||
| break; | ||
| } | ||
| values.push(texts.slice(i, nextIndex + 1).join("")); | ||
| i = nextIndex; | ||
| if (isSeparateFirst) { | ||
| break; | ||
| } | ||
| continue; | ||
| } | ||
| } else if (closeCharacter && !findIgnore(closeCharacter, texts, i)) { | ||
| throw new Error(`invalid format: ${closeCharacter.close}`); | ||
| } else if (isEqualSeparator(character, separator) && !isSeparateOnlyOpenClose) { | ||
| resetTemp(); | ||
| if (isSeparateFirst) { | ||
| break; | ||
| } | ||
| continue; | ||
@@ -194,3 +279,3 @@ } | ||
| export function splitSpace(text: string) { | ||
| // divide comma(,) | ||
| // divide comma(space) | ||
| return splitText(text, ""); | ||
@@ -631,1 +716,11 @@ } | ||
| } | ||
| export function counter(num: number) { | ||
| const nums: number[] = []; | ||
| for (let i = 0; i < num; ++i) { | ||
| nums.push(i); | ||
| } | ||
| return nums; | ||
| } |
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
303152
8.89%4034
8.88%2
100%