{"version":3,"file":"util.cjs","sources":["../../../src/js/util.ts"],"sourcesContent":["/**\n * util.js\n */\n\nimport { isString } from './common';\nimport { resolve } from './resolve';\n\n/* constants */\nimport { NAMED_COLORS } from './color';\nimport { SYN_COLOR_TYPE, SYN_MIX, VAL_SPEC } from './constant';\nconst DEC = 10;\nconst HEX = 16;\nconst DEG = 360;\nconst DEG_HALF = 180;\n\n/* regexp */\nconst REG_COLOR = new RegExp(`^(?:${SYN_COLOR_TYPE})$`);\nconst REG_MIX = new RegExp(`${SYN_MIX}`);\n\n/**\n * is color\n * @param {string} value - value\n * @returns {boolean} - result\n */\nexport const isColor = (value: string): boolean => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n if (value) {\n if (/^[a-z]+$/.test(value)) {\n if (\n /^(?:currentcolor|transparent)$/.test(value) ||\n Object.prototype.hasOwnProperty.call(NAMED_COLORS, value)\n ) {\n return true;\n }\n } else if (REG_COLOR.test(value) || REG_MIX.test(value)) {\n return true;\n } else {\n const resolvedValue = resolve(value, {\n format: VAL_SPEC\n });\n if (resolvedValue) {\n return true;\n }\n return false;\n }\n }\n }\n return false;\n};\n\n/**\n * value to JSON string\n * @param {*} value - value\n * @param {boolean} func - stringify function\n * @returns {string} - stringified value in JSON notation\n */\nexport const valueToJsonString = (\n value: any,\n func: boolean = false\n): string => {\n if (typeof value === 'undefined') {\n return '';\n }\n const res = JSON.stringify(value, (_key, val) => {\n let replacedValue;\n if (typeof val === 'undefined') {\n replacedValue = null;\n } else if (typeof val === 'function') {\n if (func) {\n replacedValue = val.toString();\n } else {\n replacedValue = val.name;\n }\n } else if (val instanceof Map || val instanceof Set) {\n replacedValue = [...val];\n } else if (typeof val === 'bigint') {\n replacedValue = val.toString();\n } else {\n replacedValue = val;\n }\n return replacedValue;\n });\n return res;\n};\n\n/**\n * round to specified precision\n * @param {number} value - value\n * @param {number} bit - minimum bits\n * @returns {number} - rounded value\n */\nexport const roundToPrecision = (value: number, bit: number = 0): number => {\n if (!Number.isFinite(value)) {\n throw new TypeError(`${value} is not a number.`);\n }\n if (!Number.isFinite(bit)) {\n throw new TypeError(`${bit} is not a number.`);\n } else if (bit < 0 || bit > HEX) {\n throw new RangeError(`${bit} is not between 0 and ${HEX}.`);\n }\n if (bit === 0) {\n return Math.round(value);\n }\n let val;\n if (bit === HEX) {\n val = value.toPrecision(6);\n } else if (bit < DEC) {\n val = value.toPrecision(4);\n } else {\n val = value.toPrecision(5);\n }\n return parseFloat(val);\n};\n\n/**\n * interpolate hue\n * @param {number} hueA - hue\n * @param {number} hueB - hue\n * @param {string} arc - arc\n * @returns {Array} - [hueA, hueB]\n */\nexport const interpolateHue = (\n hueA: number,\n hueB: number,\n arc: string = 'shorter'\n): Array => {\n if (!Number.isFinite(hueA)) {\n throw new TypeError(`${hueA} is not a number.`);\n }\n if (!Number.isFinite(hueB)) {\n throw new TypeError(`${hueB} is not a number.`);\n }\n switch (arc) {\n case 'decreasing': {\n if (hueB > hueA) {\n hueA += DEG;\n }\n break;\n }\n case 'increasing': {\n if (hueB < hueA) {\n hueB += DEG;\n }\n break;\n }\n case 'longer': {\n if (hueB > hueA && hueB < hueA + DEG_HALF) {\n hueA += DEG;\n } else if (hueB > hueA + DEG_HALF * -1 && hueB <= hueA) {\n hueB += DEG;\n }\n break;\n }\n case 'shorter':\n default: {\n if (hueB > hueA + DEG_HALF) {\n hueA += DEG;\n } else if (hueB < hueA + DEG_HALF * -1) {\n hueB += DEG;\n }\n }\n }\n return [hueA, hueB];\n};\n"],"names":["SYN_COLOR_TYPE","SYN_MIX","isString","NAMED_COLORS","resolve","VAL_SPEC"],"mappings":"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"}