qauMaWeb/node_modules/.cache/babel-loader/2576adccc5a21e0f5f938229565...

1 line
52 KiB
JSON

{"ast":null,"code":"import \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/es.string.match.js\";\nimport \"core-js/modules/es.number.to-fixed.js\";\nimport \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.array.splice.js\";\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* A third-party license is embedded for some of the code in this file:\n* The method \"quantile\" was copied from \"d3.js\".\n* (See more details in the comment of the method below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* </licenses/LICENSE-d3>).\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nvar RADIAN_EPSILON = 1e-4; // Although chrome already enlarge this number to 100 for `toFixed`, but\n// we sill follow the spec for compatibility.\n\nvar ROUND_SUPPORTED_PRECISION_MAX = 20;\n\nfunction _trim(str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n}\n/**\n * Linear mapping a value from domain to range\n * @param val\n * @param domain Domain extent domain[0] can be bigger than domain[1]\n * @param range Range extent range[0] can be bigger than range[1]\n * @param clamp Default to be false\n */\n\n\nexport function linearMap(val, domain, range, clamp) {\n var d0 = domain[0];\n var d1 = domain[1];\n var r0 = range[0];\n var r1 = range[1];\n var subDomain = d1 - d0;\n var subRange = r1 - r0;\n\n if (subDomain === 0) {\n return subRange === 0 ? r0 : (r0 + r1) / 2;\n } // Avoid accuracy problem in edge, such as\n // 146.39 - 62.83 === 83.55999999999999.\n // See echarts/test/ut/spec/util/number.js#linearMap#accuracyError\n // It is a little verbose for efficiency considering this method\n // is a hotspot.\n\n\n if (clamp) {\n if (subDomain > 0) {\n if (val <= d0) {\n return r0;\n } else if (val >= d1) {\n return r1;\n }\n } else {\n if (val >= d0) {\n return r0;\n } else if (val <= d1) {\n return r1;\n }\n }\n } else {\n if (val === d0) {\n return r0;\n }\n\n if (val === d1) {\n return r1;\n }\n }\n\n return (val - d0) / subDomain * subRange + r0;\n}\n/**\n * Convert a percent string to absolute number.\n * Returns NaN if percent is not a valid string or number\n */\n\nexport function parsePercent(percent, all) {\n switch (percent) {\n case 'center':\n case 'middle':\n percent = '50%';\n break;\n\n case 'left':\n case 'top':\n percent = '0%';\n break;\n\n case 'right':\n case 'bottom':\n percent = '100%';\n break;\n }\n\n if (zrUtil.isString(percent)) {\n if (_trim(percent).match(/%$/)) {\n return parseFloat(percent) / 100 * all;\n }\n\n return parseFloat(percent);\n }\n\n return percent == null ? NaN : +percent;\n}\nexport function round(x, precision, returnStr) {\n if (precision == null) {\n precision = 10;\n } // Avoid range error\n\n\n precision = Math.min(Math.max(0, precision), ROUND_SUPPORTED_PRECISION_MAX); // PENDING: 1.005.toFixed(2) is '1.00' rather than '1.01'\n\n x = (+x).toFixed(precision);\n return returnStr ? x : +x;\n}\n/**\n * Inplacd asc sort arr.\n * The input arr will be modified.\n */\n\nexport function asc(arr) {\n arr.sort(function (a, b) {\n return a - b;\n });\n return arr;\n}\n/**\n * Get precision.\n */\n\nexport function getPrecision(val) {\n val = +val;\n\n if (isNaN(val)) {\n return 0;\n } // It is much faster than methods converting number to string as follows\n // let tmp = val.toString();\n // return tmp.length - 1 - tmp.indexOf('.');\n // especially when precision is low\n // Notice:\n // (1) If the loop count is over about 20, it is slower than `getPrecisionSafe`.\n // (see https://jsbench.me/2vkpcekkvw/1)\n // (2) If the val is less than for example 1e-15, the result may be incorrect.\n // (see test/ut/spec/util/number.test.ts `getPrecision_equal_random`)\n\n\n if (val > 1e-14) {\n var e = 1;\n\n for (var i = 0; i < 15; i++, e *= 10) {\n if (Math.round(val * e) / e === val) {\n return i;\n }\n }\n }\n\n return getPrecisionSafe(val);\n}\n/**\n * Get precision with slow but safe method\n */\n\nexport function getPrecisionSafe(val) {\n // toLowerCase for: '3.4E-12'\n var str = val.toString().toLowerCase(); // Consider scientific notation: '3.4e-12' '3.4e+12'\n\n var eIndex = str.indexOf('e');\n var exp = eIndex > 0 ? +str.slice(eIndex + 1) : 0;\n var significandPartLen = eIndex > 0 ? eIndex : str.length;\n var dotIndex = str.indexOf('.');\n var decimalPartLen = dotIndex < 0 ? 0 : significandPartLen - 1 - dotIndex;\n return Math.max(0, decimalPartLen - exp);\n}\n/**\n * Minimal dicernible data precisioin according to a single pixel.\n */\n\nexport function getPixelPrecision(dataExtent, pixelExtent) {\n var log = Math.log;\n var LN10 = Math.LN10;\n var dataQuantity = Math.floor(log(dataExtent[1] - dataExtent[0]) / LN10);\n var sizeQuantity = Math.round(log(Math.abs(pixelExtent[1] - pixelExtent[0])) / LN10); // toFixed() digits argument must be between 0 and 20.\n\n var precision = Math.min(Math.max(-dataQuantity + sizeQuantity, 0), 20);\n return !isFinite(precision) ? 20 : precision;\n}\n/**\n * Get a data of given precision, assuring the sum of percentages\n * in valueList is 1.\n * The largest remainder method is used.\n * https://en.wikipedia.org/wiki/Largest_remainder_method\n *\n * @param valueList a list of all data\n * @param idx index of the data to be processed in valueList\n * @param precision integer number showing digits of precision\n * @return percent ranging from 0 to 100\n */\n\nexport function getPercentWithPrecision(valueList, idx, precision) {\n if (!valueList[idx]) {\n return 0;\n }\n\n var seats = getPercentSeats(valueList, precision);\n return seats[idx] || 0;\n}\n/**\n * Get a data of given precision, assuring the sum of percentages\n * in valueList is 1.\n * The largest remainder method is used.\n * https://en.wikipedia.org/wiki/Largest_remainder_method\n *\n * @param valueList a list of all data\n * @param precision integer number showing digits of precision\n * @return {Array<number>}\n */\n\nexport function getPercentSeats(valueList, precision) {\n var sum = zrUtil.reduce(valueList, function (acc, val) {\n return acc + (isNaN(val) ? 0 : val);\n }, 0);\n\n if (sum === 0) {\n return [];\n }\n\n var digits = Math.pow(10, precision);\n var votesPerQuota = zrUtil.map(valueList, function (val) {\n return (isNaN(val) ? 0 : val) / sum * digits * 100;\n });\n var targetSeats = digits * 100;\n var seats = zrUtil.map(votesPerQuota, function (votes) {\n // Assign automatic seats.\n return Math.floor(votes);\n });\n var currentSum = zrUtil.reduce(seats, function (acc, val) {\n return acc + val;\n }, 0);\n var remainder = zrUtil.map(votesPerQuota, function (votes, idx) {\n return votes - seats[idx];\n }); // Has remainding votes.\n\n while (currentSum < targetSeats) {\n // Find next largest remainder.\n var max = Number.NEGATIVE_INFINITY;\n var maxId = null;\n\n for (var i = 0, len = remainder.length; i < len; ++i) {\n if (remainder[i] > max) {\n max = remainder[i];\n maxId = i;\n }\n } // Add a vote to max remainder.\n\n\n ++seats[maxId];\n remainder[maxId] = 0;\n ++currentSum;\n }\n\n return zrUtil.map(seats, function (seat) {\n return seat / digits;\n });\n}\n/**\n * Solve the floating point adding problem like 0.1 + 0.2 === 0.30000000000000004\n * See <http://0.30000000000000004.com/>\n */\n\nexport function addSafe(val0, val1) {\n var maxPrecision = Math.max(getPrecision(val0), getPrecision(val1)); // const multiplier = Math.pow(10, maxPrecision);\n // return (Math.round(val0 * multiplier) + Math.round(val1 * multiplier)) / multiplier;\n\n var sum = val0 + val1; // // PENDING: support more?\n\n return maxPrecision > ROUND_SUPPORTED_PRECISION_MAX ? sum : round(sum, maxPrecision);\n} // Number.MAX_SAFE_INTEGER, ie do not support.\n\nexport var MAX_SAFE_INTEGER = 9007199254740991;\n/**\n * To 0 - 2 * PI, considering negative radian.\n */\n\nexport function remRadian(radian) {\n var pi2 = Math.PI * 2;\n return (radian % pi2 + pi2) % pi2;\n}\n/**\n * @param {type} radian\n * @return {boolean}\n */\n\nexport function isRadianAroundZero(val) {\n return val > -RADIAN_EPSILON && val < RADIAN_EPSILON;\n} // eslint-disable-next-line\n\nvar TIME_REG = /^(?:(\\d{4})(?:[-\\/](\\d{1,2})(?:[-\\/](\\d{1,2})(?:[T ](\\d{1,2})(?::(\\d{1,2})(?::(\\d{1,2})(?:[.,](\\d+))?)?)?(Z|[\\+\\-]\\d\\d:?\\d\\d)?)?)?)?)?$/; // jshint ignore:line\n\n/**\n * @param value valid type: number | string | Date, otherwise return `new Date(NaN)`\n * These values can be accepted:\n * + An instance of Date, represent a time in its own time zone.\n * + Or string in a subset of ISO 8601, only including:\n * + only year, month, date: '2012-03', '2012-03-01', '2012-03-01 05', '2012-03-01 05:06',\n * + separated with T or space: '2012-03-01T12:22:33.123', '2012-03-01 12:22:33.123',\n * + time zone: '2012-03-01T12:22:33Z', '2012-03-01T12:22:33+8000', '2012-03-01T12:22:33-05:00',\n * all of which will be treated as local time if time zone is not specified\n * (see <https://momentjs.com/>).\n * + Or other string format, including (all of which will be treated as local time):\n * '2012', '2012-3-1', '2012/3/1', '2012/03/01',\n * '2009/6/12 2:00', '2009/6/12 2:05:08', '2009/6/12 2:05:08.123'\n * + a timestamp, which represent a time in UTC.\n * @return date Never be null/undefined. If invalid, return `new Date(NaN)`.\n */\n\nexport function parseDate(value) {\n if (value instanceof Date) {\n return value;\n } else if (zrUtil.isString(value)) {\n // Different browsers parse date in different way, so we parse it manually.\n // Some other issues:\n // new Date('1970-01-01') is UTC,\n // new Date('1970/01/01') and new Date('1970-1-01') is local.\n // See issue #3623\n var match = TIME_REG.exec(value);\n\n if (!match) {\n // return Invalid Date.\n return new Date(NaN);\n } // Use local time when no timezone offset is specified.\n\n\n if (!match[8]) {\n // match[n] can only be string or undefined.\n // But take care of '12' + 1 => '121'.\n return new Date(+match[1], +(match[2] || 1) - 1, +match[3] || 1, +match[4] || 0, +(match[5] || 0), +match[6] || 0, match[7] ? +match[7].substring(0, 3) : 0);\n } // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time,\n // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment).\n // For example, system timezone is set as \"Time Zone: America/Toronto\",\n // then these code will get different result:\n // `new Date(1478411999999).getTimezoneOffset(); // get 240`\n // `new Date(1478412000000).getTimezoneOffset(); // get 300`\n // So we should not use `new Date`, but use `Date.UTC`.\n else {\n var hour = +match[4] || 0;\n\n if (match[8].toUpperCase() !== 'Z') {\n hour -= +match[8].slice(0, 3);\n }\n\n return new Date(Date.UTC(+match[1], +(match[2] || 1) - 1, +match[3] || 1, hour, +(match[5] || 0), +match[6] || 0, match[7] ? +match[7].substring(0, 3) : 0));\n }\n } else if (value == null) {\n return new Date(NaN);\n }\n\n return new Date(Math.round(value));\n}\n/**\n * Quantity of a number. e.g. 0.1, 1, 10, 100\n *\n * @param val\n * @return\n */\n\nexport function quantity(val) {\n return Math.pow(10, quantityExponent(val));\n}\n/**\n * Exponent of the quantity of a number\n * e.g., 1234 equals to 1.234*10^3, so quantityExponent(1234) is 3\n *\n * @param val non-negative value\n * @return\n */\n\nexport function quantityExponent(val) {\n if (val === 0) {\n return 0;\n }\n\n var exp = Math.floor(Math.log(val) / Math.LN10);\n /**\n * exp is expected to be the rounded-down result of the base-10 log of val.\n * But due to the precision loss with Math.log(val), we need to restore it\n * using 10^exp to make sure we can get val back from exp. #11249\n */\n\n if (val / Math.pow(10, exp) >= 10) {\n exp++;\n }\n\n return exp;\n}\n/**\n * find a “nice” number approximately equal to x. Round the number if round = true,\n * take ceiling if round = false. The primary observation is that the “nicest”\n * numbers in decimal are 1, 2, and 5, and all power-of-ten multiples of these numbers.\n *\n * See \"Nice Numbers for Graph Labels\" of Graphic Gems.\n *\n * @param val Non-negative value.\n * @param round\n * @return Niced number\n */\n\nexport function nice(val, round) {\n var exponent = quantityExponent(val);\n var exp10 = Math.pow(10, exponent);\n var f = val / exp10; // 1 <= f < 10\n\n var nf;\n\n if (round) {\n if (f < 1.5) {\n nf = 1;\n } else if (f < 2.5) {\n nf = 2;\n } else if (f < 4) {\n nf = 3;\n } else if (f < 7) {\n nf = 5;\n } else {\n nf = 10;\n }\n } else {\n if (f < 1) {\n nf = 1;\n } else if (f < 2) {\n nf = 2;\n } else if (f < 3) {\n nf = 3;\n } else if (f < 5) {\n nf = 5;\n } else {\n nf = 10;\n }\n }\n\n val = nf * exp10; // Fix 3 * 0.1 === 0.30000000000000004 issue (see IEEE 754).\n // 20 is the uppper bound of toFixed.\n\n return exponent >= -20 ? +val.toFixed(exponent < 0 ? -exponent : 0) : val;\n}\n/**\n * This code was copied from \"d3.js\"\n * <https://github.com/d3/d3/blob/9cc9a875e636a1dcf36cc1e07bdf77e1ad6e2c74/src/arrays/quantile.js>.\n * See the license statement at the head of this file.\n * @param ascArr\n */\n\nexport function quantile(ascArr, p) {\n var H = (ascArr.length - 1) * p + 1;\n var h = Math.floor(H);\n var v = +ascArr[h - 1];\n var e = H - h;\n return e ? v + e * (ascArr[h] - v) : v;\n}\n/**\n * Order intervals asc, and split them when overlap.\n * expect(numberUtil.reformIntervals([\n * {interval: [18, 62], close: [1, 1]},\n * {interval: [-Infinity, -70], close: [0, 0]},\n * {interval: [-70, -26], close: [1, 1]},\n * {interval: [-26, 18], close: [1, 1]},\n * {interval: [62, 150], close: [1, 1]},\n * {interval: [106, 150], close: [1, 1]},\n * {interval: [150, Infinity], close: [0, 0]}\n * ])).toEqual([\n * {interval: [-Infinity, -70], close: [0, 0]},\n * {interval: [-70, -26], close: [1, 1]},\n * {interval: [-26, 18], close: [0, 1]},\n * {interval: [18, 62], close: [0, 1]},\n * {interval: [62, 150], close: [0, 1]},\n * {interval: [150, Infinity], close: [0, 0]}\n * ]);\n * @param list, where `close` mean open or close\n * of the interval, and Infinity can be used.\n * @return The origin list, which has been reformed.\n */\n\nexport function reformIntervals(list) {\n list.sort(function (a, b) {\n return littleThan(a, b, 0) ? -1 : 1;\n });\n var curr = -Infinity;\n var currClose = 1;\n\n for (var i = 0; i < list.length;) {\n var interval = list[i].interval;\n var close_1 = list[i].close;\n\n for (var lg = 0; lg < 2; lg++) {\n if (interval[lg] <= curr) {\n interval[lg] = curr;\n close_1[lg] = !lg ? 1 - currClose : 1;\n }\n\n curr = interval[lg];\n currClose = close_1[lg];\n }\n\n if (interval[0] === interval[1] && close_1[0] * close_1[1] !== 1) {\n list.splice(i, 1);\n } else {\n i++;\n }\n }\n\n return list;\n\n function littleThan(a, b, lg) {\n return a.interval[lg] < b.interval[lg] || a.interval[lg] === b.interval[lg] && (a.close[lg] - b.close[lg] === (!lg ? 1 : -1) || !lg && littleThan(a, b, 1));\n }\n}\n/**\n * [Numeric is defined as]:\n * `parseFloat(val) == val`\n * For example:\n * numeric:\n * typeof number except NaN, '-123', '123', '2e3', '-2e3', '011', 'Infinity', Infinity,\n * and they rounded by white-spaces or line-terminal like ' -123 \\n ' (see es spec)\n * not-numeric:\n * null, undefined, [], {}, true, false, 'NaN', NaN, '123ab',\n * empty string, string with only white-spaces or line-terminal (see es spec),\n * 0x12, '0x12', '-0x12', 012, '012', '-012',\n * non-string, ...\n *\n * @test See full test cases in `test/ut/spec/util/number.js`.\n * @return Must be a typeof number. If not numeric, return NaN.\n */\n\nexport function numericToNumber(val) {\n var valFloat = parseFloat(val);\n return valFloat == val // eslint-disable-line eqeqeq\n && (valFloat !== 0 || !zrUtil.isString(val) || val.indexOf('x') <= 0) // For case ' 0x0 '.\n ? valFloat : NaN;\n}\n/**\n * Definition of \"numeric\": see `numericToNumber`.\n */\n\nexport function isNumeric(val) {\n return !isNaN(numericToNumber(val));\n}\n/**\n * Use random base to prevent users hard code depending on\n * this auto generated marker id.\n * @return An positive integer.\n */\n\nexport function getRandomIdBase() {\n return Math.round(Math.random() * 9);\n}\n/**\n * Get the greatest common divisor.\n *\n * @param {number} a one number\n * @param {number} b the other number\n */\n\nexport function getGreatestCommonDividor(a, b) {\n if (b === 0) {\n return a;\n }\n\n return getGreatestCommonDividor(b, a % b);\n}\n/**\n * Get the least common multiple.\n *\n * @param {number} a one number\n * @param {number} b the other number\n */\n\nexport function getLeastCommonMultiple(a, b) {\n if (a == null) {\n return b;\n }\n\n if (b == null) {\n return a;\n }\n\n return a * b / getGreatestCommonDividor(a, b);\n}","map":{"version":3,"sources":["D:/Work/WorkSpace/GitWorkSpace/TenShop/resource/ElectronicMall/src/ElectronicMallVue/node_modules/echarts/lib/util/number.js"],"names":["zrUtil","RADIAN_EPSILON","ROUND_SUPPORTED_PRECISION_MAX","_trim","str","replace","linearMap","val","domain","range","clamp","d0","d1","r0","r1","subDomain","subRange","parsePercent","percent","all","isString","match","parseFloat","NaN","round","x","precision","returnStr","Math","min","max","toFixed","asc","arr","sort","a","b","getPrecision","isNaN","e","i","getPrecisionSafe","toString","toLowerCase","eIndex","indexOf","exp","slice","significandPartLen","length","dotIndex","decimalPartLen","getPixelPrecision","dataExtent","pixelExtent","log","LN10","dataQuantity","floor","sizeQuantity","abs","isFinite","getPercentWithPrecision","valueList","idx","seats","getPercentSeats","sum","reduce","acc","digits","pow","votesPerQuota","map","targetSeats","votes","currentSum","remainder","Number","NEGATIVE_INFINITY","maxId","len","seat","addSafe","val0","val1","maxPrecision","MAX_SAFE_INTEGER","remRadian","radian","pi2","PI","isRadianAroundZero","TIME_REG","parseDate","value","Date","exec","substring","hour","toUpperCase","UTC","quantity","quantityExponent","nice","exponent","exp10","f","nf","quantile","ascArr","p","H","h","v","reformIntervals","list","littleThan","curr","Infinity","currClose","interval","close_1","close","lg","splice","numericToNumber","valFloat","isNumeric","getRandomIdBase","random","getGreatestCommonDividor","getLeastCommonMultiple"],"mappings":"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","sourcesContent":["\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* A third-party license is embedded for some of the code in this file:\n* The method \"quantile\" was copied from \"d3.js\".\n* (See more details in the comment of the method below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* </licenses/LICENSE-d3>).\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nvar RADIAN_EPSILON = 1e-4; // Although chrome already enlarge this number to 100 for `toFixed`, but\n// we sill follow the spec for compatibility.\n\nvar ROUND_SUPPORTED_PRECISION_MAX = 20;\n\nfunction _trim(str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n}\n/**\n * Linear mapping a value from domain to range\n * @param val\n * @param domain Domain extent domain[0] can be bigger than domain[1]\n * @param range Range extent range[0] can be bigger than range[1]\n * @param clamp Default to be false\n */\n\n\nexport function linearMap(val, domain, range, clamp) {\n var d0 = domain[0];\n var d1 = domain[1];\n var r0 = range[0];\n var r1 = range[1];\n var subDomain = d1 - d0;\n var subRange = r1 - r0;\n\n if (subDomain === 0) {\n return subRange === 0 ? r0 : (r0 + r1) / 2;\n } // Avoid accuracy problem in edge, such as\n // 146.39 - 62.83 === 83.55999999999999.\n // See echarts/test/ut/spec/util/number.js#linearMap#accuracyError\n // It is a little verbose for efficiency considering this method\n // is a hotspot.\n\n\n if (clamp) {\n if (subDomain > 0) {\n if (val <= d0) {\n return r0;\n } else if (val >= d1) {\n return r1;\n }\n } else {\n if (val >= d0) {\n return r0;\n } else if (val <= d1) {\n return r1;\n }\n }\n } else {\n if (val === d0) {\n return r0;\n }\n\n if (val === d1) {\n return r1;\n }\n }\n\n return (val - d0) / subDomain * subRange + r0;\n}\n/**\n * Convert a percent string to absolute number.\n * Returns NaN if percent is not a valid string or number\n */\n\nexport function parsePercent(percent, all) {\n switch (percent) {\n case 'center':\n case 'middle':\n percent = '50%';\n break;\n\n case 'left':\n case 'top':\n percent = '0%';\n break;\n\n case 'right':\n case 'bottom':\n percent = '100%';\n break;\n }\n\n if (zrUtil.isString(percent)) {\n if (_trim(percent).match(/%$/)) {\n return parseFloat(percent) / 100 * all;\n }\n\n return parseFloat(percent);\n }\n\n return percent == null ? NaN : +percent;\n}\nexport function round(x, precision, returnStr) {\n if (precision == null) {\n precision = 10;\n } // Avoid range error\n\n\n precision = Math.min(Math.max(0, precision), ROUND_SUPPORTED_PRECISION_MAX); // PENDING: 1.005.toFixed(2) is '1.00' rather than '1.01'\n\n x = (+x).toFixed(precision);\n return returnStr ? x : +x;\n}\n/**\n * Inplacd asc sort arr.\n * The input arr will be modified.\n */\n\nexport function asc(arr) {\n arr.sort(function (a, b) {\n return a - b;\n });\n return arr;\n}\n/**\n * Get precision.\n */\n\nexport function getPrecision(val) {\n val = +val;\n\n if (isNaN(val)) {\n return 0;\n } // It is much faster than methods converting number to string as follows\n // let tmp = val.toString();\n // return tmp.length - 1 - tmp.indexOf('.');\n // especially when precision is low\n // Notice:\n // (1) If the loop count is over about 20, it is slower than `getPrecisionSafe`.\n // (see https://jsbench.me/2vkpcekkvw/1)\n // (2) If the val is less than for example 1e-15, the result may be incorrect.\n // (see test/ut/spec/util/number.test.ts `getPrecision_equal_random`)\n\n\n if (val > 1e-14) {\n var e = 1;\n\n for (var i = 0; i < 15; i++, e *= 10) {\n if (Math.round(val * e) / e === val) {\n return i;\n }\n }\n }\n\n return getPrecisionSafe(val);\n}\n/**\n * Get precision with slow but safe method\n */\n\nexport function getPrecisionSafe(val) {\n // toLowerCase for: '3.4E-12'\n var str = val.toString().toLowerCase(); // Consider scientific notation: '3.4e-12' '3.4e+12'\n\n var eIndex = str.indexOf('e');\n var exp = eIndex > 0 ? +str.slice(eIndex + 1) : 0;\n var significandPartLen = eIndex > 0 ? eIndex : str.length;\n var dotIndex = str.indexOf('.');\n var decimalPartLen = dotIndex < 0 ? 0 : significandPartLen - 1 - dotIndex;\n return Math.max(0, decimalPartLen - exp);\n}\n/**\n * Minimal dicernible data precisioin according to a single pixel.\n */\n\nexport function getPixelPrecision(dataExtent, pixelExtent) {\n var log = Math.log;\n var LN10 = Math.LN10;\n var dataQuantity = Math.floor(log(dataExtent[1] - dataExtent[0]) / LN10);\n var sizeQuantity = Math.round(log(Math.abs(pixelExtent[1] - pixelExtent[0])) / LN10); // toFixed() digits argument must be between 0 and 20.\n\n var precision = Math.min(Math.max(-dataQuantity + sizeQuantity, 0), 20);\n return !isFinite(precision) ? 20 : precision;\n}\n/**\n * Get a data of given precision, assuring the sum of percentages\n * in valueList is 1.\n * The largest remainder method is used.\n * https://en.wikipedia.org/wiki/Largest_remainder_method\n *\n * @param valueList a list of all data\n * @param idx index of the data to be processed in valueList\n * @param precision integer number showing digits of precision\n * @return percent ranging from 0 to 100\n */\n\nexport function getPercentWithPrecision(valueList, idx, precision) {\n if (!valueList[idx]) {\n return 0;\n }\n\n var seats = getPercentSeats(valueList, precision);\n return seats[idx] || 0;\n}\n/**\n * Get a data of given precision, assuring the sum of percentages\n * in valueList is 1.\n * The largest remainder method is used.\n * https://en.wikipedia.org/wiki/Largest_remainder_method\n *\n * @param valueList a list of all data\n * @param precision integer number showing digits of precision\n * @return {Array<number>}\n */\n\nexport function getPercentSeats(valueList, precision) {\n var sum = zrUtil.reduce(valueList, function (acc, val) {\n return acc + (isNaN(val) ? 0 : val);\n }, 0);\n\n if (sum === 0) {\n return [];\n }\n\n var digits = Math.pow(10, precision);\n var votesPerQuota = zrUtil.map(valueList, function (val) {\n return (isNaN(val) ? 0 : val) / sum * digits * 100;\n });\n var targetSeats = digits * 100;\n var seats = zrUtil.map(votesPerQuota, function (votes) {\n // Assign automatic seats.\n return Math.floor(votes);\n });\n var currentSum = zrUtil.reduce(seats, function (acc, val) {\n return acc + val;\n }, 0);\n var remainder = zrUtil.map(votesPerQuota, function (votes, idx) {\n return votes - seats[idx];\n }); // Has remainding votes.\n\n while (currentSum < targetSeats) {\n // Find next largest remainder.\n var max = Number.NEGATIVE_INFINITY;\n var maxId = null;\n\n for (var i = 0, len = remainder.length; i < len; ++i) {\n if (remainder[i] > max) {\n max = remainder[i];\n maxId = i;\n }\n } // Add a vote to max remainder.\n\n\n ++seats[maxId];\n remainder[maxId] = 0;\n ++currentSum;\n }\n\n return zrUtil.map(seats, function (seat) {\n return seat / digits;\n });\n}\n/**\n * Solve the floating point adding problem like 0.1 + 0.2 === 0.30000000000000004\n * See <http://0.30000000000000004.com/>\n */\n\nexport function addSafe(val0, val1) {\n var maxPrecision = Math.max(getPrecision(val0), getPrecision(val1)); // const multiplier = Math.pow(10, maxPrecision);\n // return (Math.round(val0 * multiplier) + Math.round(val1 * multiplier)) / multiplier;\n\n var sum = val0 + val1; // // PENDING: support more?\n\n return maxPrecision > ROUND_SUPPORTED_PRECISION_MAX ? sum : round(sum, maxPrecision);\n} // Number.MAX_SAFE_INTEGER, ie do not support.\n\nexport var MAX_SAFE_INTEGER = 9007199254740991;\n/**\n * To 0 - 2 * PI, considering negative radian.\n */\n\nexport function remRadian(radian) {\n var pi2 = Math.PI * 2;\n return (radian % pi2 + pi2) % pi2;\n}\n/**\n * @param {type} radian\n * @return {boolean}\n */\n\nexport function isRadianAroundZero(val) {\n return val > -RADIAN_EPSILON && val < RADIAN_EPSILON;\n} // eslint-disable-next-line\n\nvar TIME_REG = /^(?:(\\d{4})(?:[-\\/](\\d{1,2})(?:[-\\/](\\d{1,2})(?:[T ](\\d{1,2})(?::(\\d{1,2})(?::(\\d{1,2})(?:[.,](\\d+))?)?)?(Z|[\\+\\-]\\d\\d:?\\d\\d)?)?)?)?)?$/; // jshint ignore:line\n\n/**\n * @param value valid type: number | string | Date, otherwise return `new Date(NaN)`\n * These values can be accepted:\n * + An instance of Date, represent a time in its own time zone.\n * + Or string in a subset of ISO 8601, only including:\n * + only year, month, date: '2012-03', '2012-03-01', '2012-03-01 05', '2012-03-01 05:06',\n * + separated with T or space: '2012-03-01T12:22:33.123', '2012-03-01 12:22:33.123',\n * + time zone: '2012-03-01T12:22:33Z', '2012-03-01T12:22:33+8000', '2012-03-01T12:22:33-05:00',\n * all of which will be treated as local time if time zone is not specified\n * (see <https://momentjs.com/>).\n * + Or other string format, including (all of which will be treated as local time):\n * '2012', '2012-3-1', '2012/3/1', '2012/03/01',\n * '2009/6/12 2:00', '2009/6/12 2:05:08', '2009/6/12 2:05:08.123'\n * + a timestamp, which represent a time in UTC.\n * @return date Never be null/undefined. If invalid, return `new Date(NaN)`.\n */\n\nexport function parseDate(value) {\n if (value instanceof Date) {\n return value;\n } else if (zrUtil.isString(value)) {\n // Different browsers parse date in different way, so we parse it manually.\n // Some other issues:\n // new Date('1970-01-01') is UTC,\n // new Date('1970/01/01') and new Date('1970-1-01') is local.\n // See issue #3623\n var match = TIME_REG.exec(value);\n\n if (!match) {\n // return Invalid Date.\n return new Date(NaN);\n } // Use local time when no timezone offset is specified.\n\n\n if (!match[8]) {\n // match[n] can only be string or undefined.\n // But take care of '12' + 1 => '121'.\n return new Date(+match[1], +(match[2] || 1) - 1, +match[3] || 1, +match[4] || 0, +(match[5] || 0), +match[6] || 0, match[7] ? +match[7].substring(0, 3) : 0);\n } // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time,\n // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment).\n // For example, system timezone is set as \"Time Zone: America/Toronto\",\n // then these code will get different result:\n // `new Date(1478411999999).getTimezoneOffset(); // get 240`\n // `new Date(1478412000000).getTimezoneOffset(); // get 300`\n // So we should not use `new Date`, but use `Date.UTC`.\n else {\n var hour = +match[4] || 0;\n\n if (match[8].toUpperCase() !== 'Z') {\n hour -= +match[8].slice(0, 3);\n }\n\n return new Date(Date.UTC(+match[1], +(match[2] || 1) - 1, +match[3] || 1, hour, +(match[5] || 0), +match[6] || 0, match[7] ? +match[7].substring(0, 3) : 0));\n }\n } else if (value == null) {\n return new Date(NaN);\n }\n\n return new Date(Math.round(value));\n}\n/**\n * Quantity of a number. e.g. 0.1, 1, 10, 100\n *\n * @param val\n * @return\n */\n\nexport function quantity(val) {\n return Math.pow(10, quantityExponent(val));\n}\n/**\n * Exponent of the quantity of a number\n * e.g., 1234 equals to 1.234*10^3, so quantityExponent(1234) is 3\n *\n * @param val non-negative value\n * @return\n */\n\nexport function quantityExponent(val) {\n if (val === 0) {\n return 0;\n }\n\n var exp = Math.floor(Math.log(val) / Math.LN10);\n /**\n * exp is expected to be the rounded-down result of the base-10 log of val.\n * But due to the precision loss with Math.log(val), we need to restore it\n * using 10^exp to make sure we can get val back from exp. #11249\n */\n\n if (val / Math.pow(10, exp) >= 10) {\n exp++;\n }\n\n return exp;\n}\n/**\n * find a “nice” number approximately equal to x. Round the number if round = true,\n * take ceiling if round = false. The primary observation is that the “nicest”\n * numbers in decimal are 1, 2, and 5, and all power-of-ten multiples of these numbers.\n *\n * See \"Nice Numbers for Graph Labels\" of Graphic Gems.\n *\n * @param val Non-negative value.\n * @param round\n * @return Niced number\n */\n\nexport function nice(val, round) {\n var exponent = quantityExponent(val);\n var exp10 = Math.pow(10, exponent);\n var f = val / exp10; // 1 <= f < 10\n\n var nf;\n\n if (round) {\n if (f < 1.5) {\n nf = 1;\n } else if (f < 2.5) {\n nf = 2;\n } else if (f < 4) {\n nf = 3;\n } else if (f < 7) {\n nf = 5;\n } else {\n nf = 10;\n }\n } else {\n if (f < 1) {\n nf = 1;\n } else if (f < 2) {\n nf = 2;\n } else if (f < 3) {\n nf = 3;\n } else if (f < 5) {\n nf = 5;\n } else {\n nf = 10;\n }\n }\n\n val = nf * exp10; // Fix 3 * 0.1 === 0.30000000000000004 issue (see IEEE 754).\n // 20 is the uppper bound of toFixed.\n\n return exponent >= -20 ? +val.toFixed(exponent < 0 ? -exponent : 0) : val;\n}\n/**\n * This code was copied from \"d3.js\"\n * <https://github.com/d3/d3/blob/9cc9a875e636a1dcf36cc1e07bdf77e1ad6e2c74/src/arrays/quantile.js>.\n * See the license statement at the head of this file.\n * @param ascArr\n */\n\nexport function quantile(ascArr, p) {\n var H = (ascArr.length - 1) * p + 1;\n var h = Math.floor(H);\n var v = +ascArr[h - 1];\n var e = H - h;\n return e ? v + e * (ascArr[h] - v) : v;\n}\n/**\n * Order intervals asc, and split them when overlap.\n * expect(numberUtil.reformIntervals([\n * {interval: [18, 62], close: [1, 1]},\n * {interval: [-Infinity, -70], close: [0, 0]},\n * {interval: [-70, -26], close: [1, 1]},\n * {interval: [-26, 18], close: [1, 1]},\n * {interval: [62, 150], close: [1, 1]},\n * {interval: [106, 150], close: [1, 1]},\n * {interval: [150, Infinity], close: [0, 0]}\n * ])).toEqual([\n * {interval: [-Infinity, -70], close: [0, 0]},\n * {interval: [-70, -26], close: [1, 1]},\n * {interval: [-26, 18], close: [0, 1]},\n * {interval: [18, 62], close: [0, 1]},\n * {interval: [62, 150], close: [0, 1]},\n * {interval: [150, Infinity], close: [0, 0]}\n * ]);\n * @param list, where `close` mean open or close\n * of the interval, and Infinity can be used.\n * @return The origin list, which has been reformed.\n */\n\nexport function reformIntervals(list) {\n list.sort(function (a, b) {\n return littleThan(a, b, 0) ? -1 : 1;\n });\n var curr = -Infinity;\n var currClose = 1;\n\n for (var i = 0; i < list.length;) {\n var interval = list[i].interval;\n var close_1 = list[i].close;\n\n for (var lg = 0; lg < 2; lg++) {\n if (interval[lg] <= curr) {\n interval[lg] = curr;\n close_1[lg] = !lg ? 1 - currClose : 1;\n }\n\n curr = interval[lg];\n currClose = close_1[lg];\n }\n\n if (interval[0] === interval[1] && close_1[0] * close_1[1] !== 1) {\n list.splice(i, 1);\n } else {\n i++;\n }\n }\n\n return list;\n\n function littleThan(a, b, lg) {\n return a.interval[lg] < b.interval[lg] || a.interval[lg] === b.interval[lg] && (a.close[lg] - b.close[lg] === (!lg ? 1 : -1) || !lg && littleThan(a, b, 1));\n }\n}\n/**\n * [Numeric is defined as]:\n * `parseFloat(val) == val`\n * For example:\n * numeric:\n * typeof number except NaN, '-123', '123', '2e3', '-2e3', '011', 'Infinity', Infinity,\n * and they rounded by white-spaces or line-terminal like ' -123 \\n ' (see es spec)\n * not-numeric:\n * null, undefined, [], {}, true, false, 'NaN', NaN, '123ab',\n * empty string, string with only white-spaces or line-terminal (see es spec),\n * 0x12, '0x12', '-0x12', 012, '012', '-012',\n * non-string, ...\n *\n * @test See full test cases in `test/ut/spec/util/number.js`.\n * @return Must be a typeof number. If not numeric, return NaN.\n */\n\nexport function numericToNumber(val) {\n var valFloat = parseFloat(val);\n return valFloat == val // eslint-disable-line eqeqeq\n && (valFloat !== 0 || !zrUtil.isString(val) || val.indexOf('x') <= 0) // For case ' 0x0 '.\n ? valFloat : NaN;\n}\n/**\n * Definition of \"numeric\": see `numericToNumber`.\n */\n\nexport function isNumeric(val) {\n return !isNaN(numericToNumber(val));\n}\n/**\n * Use random base to prevent users hard code depending on\n * this auto generated marker id.\n * @return An positive integer.\n */\n\nexport function getRandomIdBase() {\n return Math.round(Math.random() * 9);\n}\n/**\n * Get the greatest common divisor.\n *\n * @param {number} a one number\n * @param {number} b the other number\n */\n\nexport function getGreatestCommonDividor(a, b) {\n if (b === 0) {\n return a;\n }\n\n return getGreatestCommonDividor(b, a % b);\n}\n/**\n * Get the least common multiple.\n *\n * @param {number} a one number\n * @param {number} b the other number\n */\n\nexport function getLeastCommonMultiple(a, b) {\n if (a == null) {\n return b;\n }\n\n if (b == null) {\n return a;\n }\n\n return a * b / getGreatestCommonDividor(a, b);\n}"]},"metadata":{},"sourceType":"module"}