@visactor/vutils 0.19.5 → 0.19.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +5 -12
  2. package/cjs/common/extent.d.ts +1 -0
  3. package/cjs/common/extent.js +30 -0
  4. package/cjs/common/extent.js.map +1 -0
  5. package/cjs/common/field.d.ts +12 -0
  6. package/cjs/common/field.js +36 -0
  7. package/cjs/common/field.js.map +1 -0
  8. package/cjs/common/index.d.ts +5 -0
  9. package/cjs/common/index.js +3 -1
  10. package/cjs/common/index.js.map +1 -1
  11. package/cjs/common/interpolate.js +1 -2
  12. package/cjs/common/isArrayLike.js +2 -1
  13. package/cjs/common/isPrototype.js +1 -2
  14. package/cjs/common/isShallowEqual.js +2 -1
  15. package/cjs/common/isValidUrl.js +1 -1
  16. package/cjs/common/lowerFirst.js +1 -1
  17. package/cjs/common/random.d.ts +2 -0
  18. package/cjs/common/random.js +18 -1
  19. package/cjs/common/random.js.map +1 -1
  20. package/cjs/common/regression-linear.d.ts +8 -0
  21. package/cjs/common/regression-linear.js +50 -0
  22. package/cjs/common/regression-linear.js.map +1 -0
  23. package/cjs/common/toPercent.d.ts +1 -0
  24. package/cjs/common/toPercent.js +17 -0
  25. package/cjs/common/toPercent.js.map +1 -0
  26. package/cjs/common/zero.d.ts +1 -0
  27. package/cjs/common/zero.js +10 -0
  28. package/cjs/common/zero.js.map +1 -0
  29. package/dist/index.js +145 -2
  30. package/dist/index.min.js +1 -1
  31. package/es/common/extent.d.ts +1 -0
  32. package/es/common/extent.js +21 -0
  33. package/es/common/extent.js.map +1 -0
  34. package/es/common/field.d.ts +12 -0
  35. package/es/common/field.js +24 -0
  36. package/es/common/field.js.map +1 -0
  37. package/es/common/index.d.ts +5 -0
  38. package/es/common/index.js +10 -0
  39. package/es/common/index.js.map +1 -1
  40. package/es/common/interpolate.js +1 -2
  41. package/es/common/isArrayLike.js +2 -1
  42. package/es/common/isPrototype.js +1 -2
  43. package/es/common/isShallowEqual.js +2 -1
  44. package/es/common/isValidUrl.js +1 -1
  45. package/es/common/lowerFirst.js +1 -1
  46. package/es/common/random.d.ts +2 -0
  47. package/es/common/random.js +13 -0
  48. package/es/common/random.js.map +1 -1
  49. package/es/common/regression-linear.d.ts +8 -0
  50. package/es/common/regression-linear.js +35 -0
  51. package/es/common/regression-linear.js.map +1 -0
  52. package/es/common/toPercent.d.ts +1 -0
  53. package/es/common/toPercent.js +6 -0
  54. package/es/common/toPercent.js.map +1 -0
  55. package/es/common/zero.d.ts +1 -0
  56. package/es/common/zero.js +2 -0
  57. package/es/common/zero.js.map +1 -0
  58. package/package.json +8 -5
package/README.md CHANGED
@@ -1,33 +1,26 @@
1
- # @visactor/vutils
1
+ # @visactor/vlayouts
2
2
 
3
3
  ## Installation
4
4
 
5
- [npm package](https://www.npmjs.com/package/@visactor/vutils)
5
+ [npm package](https://www.npmjs.com/package/@visactor/vlayouts)
6
6
 
7
7
  ```bash
8
8
  // npm
9
- npm install @visactor/vutils
9
+ npm install @visactor/vlayouts
10
10
 
11
11
  // yarn
12
- yarn add @visactor/vutils
12
+ yarn add @visactor/vlayouts
13
13
  ```
14
14
 
15
15
  ##
16
16
 
17
- [More demos and detailed tutorials](https://visactor.io/vutil)
18
-
19
- # Related Links
20
-
21
- - [VGrammar](https://github.com/VisActor/VGrammar)
22
- - [VChart](https://visactor.io/vchart)
23
-
24
17
  # Contribution
25
18
 
26
19
  If you would like to contribute, please read the [Code of Conduct ](./CODE_OF_CONDUCT.md) 和 [ Guide](./CONTRIBUTING.zh-CN.md) first。
27
20
 
28
21
  Small streams converge to make great rivers and seas!
29
22
 
30
- <a href="https://github.com/visactor/vutil/graphs/contributors"><img src="https://contrib.rocks/image?repo=visactor/vutil" /></a>
23
+ <a href="https://github.com/visactor/vlayouts/graphs/contributors"><img src="https://contrib.rocks/image?repo=visactor/vlayouts" /></a>
31
24
 
32
25
  # License
33
26
 
@@ -0,0 +1 @@
1
+ export declare const extent: (array: any[], func?: (val: any) => number) => number[];
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ var __importDefault = this && this.__importDefault || function(mod) {
4
+ return mod && mod.__esModule ? mod : {
5
+ default: mod
6
+ };
7
+ };
8
+
9
+ Object.defineProperty(exports, "__esModule", {
10
+ value: !0
11
+ }), exports.extent = void 0;
12
+
13
+ const isFunction_1 = __importDefault(require("./isFunction")), isNil_1 = __importDefault(require("./isNil")), isNumber_1 = __importDefault(require("./isNumber")), extent = (array, func) => {
14
+ const valueGetter = (0, isFunction_1.default)(func) ? func : val => val;
15
+ let min, max;
16
+ if (array && array.length) {
17
+ const n = array.length;
18
+ for (let i = 0; i < n; i += 1) {
19
+ let value = valueGetter(array[i]);
20
+ (0, isNil_1.default)(value) || !(0, isNumber_1.default)(value = +value) || Number.isNaN(value) || ((0,
21
+ isNil_1.default)(min) ? (min = value, max = value) : (min = Math.min(min, value),
22
+ max = Math.max(max, value)));
23
+ }
24
+ return [ min, max ];
25
+ }
26
+ return [ min, max ];
27
+ };
28
+
29
+ exports.extent = extent;
30
+ //# sourceMappingURL=extent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/extent.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAsC;AACtC,oDAA4B;AAC5B,0DAAkC;AAK3B,MAAM,MAAM,GAAG,CAAC,KAAY,EAAE,IAA2B,EAAE,EAAE;IAClE,MAAM,WAAW,GAAG,IAAA,oBAAU,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC;IAChE,IAAI,GAAW,CAAC;IAChB,IAAI,GAAW,CAAC;IAEhB,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;QACzB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QAGvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YAC7B,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,IAAA,eAAK,EAAC,KAAK,CAAC,IAAI,IAAA,kBAAQ,EAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACvE,IAAI,IAAA,eAAK,EAAC,GAAG,CAAC,EAAE;oBACd,GAAG,GAAG,KAAK,CAAC;oBACZ,GAAG,GAAG,KAAK,CAAC;iBACb;qBAAM;oBACL,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC3B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBAC5B;aACF;SACF;QAED,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KACnB;IAED,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpB,CAAC,CAAC;AA1BW,QAAA,MAAM,UA0BjB","file":"extent.js","sourcesContent":["import isFunction from './isFunction';\nimport isNil from './isNil';\nimport isNumber from './isNumber';\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nexport const extent = (array: any[], func?: (val: any) => number) => {\n const valueGetter = isFunction(func) ? func : (val: any) => val;\n let min: number;\n let max: number;\n\n if (array && array.length) {\n const n = array.length;\n\n // find first valid value\n for (let i = 0; i < n; i += 1) {\n let value = valueGetter(array[i]);\n if (!isNil(value) && isNumber((value = +value)) && !Number.isNaN(value)) {\n if (isNil(min)) {\n min = value;\n max = value;\n } else {\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n }\n\n return [min, max];\n }\n\n return [min, max];\n};\n"]}
@@ -0,0 +1,12 @@
1
+ export type FieldGetterFunction = (val: any) => any;
2
+ export type Getter = (path: string[]) => FieldGetterFunction;
3
+ export type FieldOption = {
4
+ field: string;
5
+ };
6
+ export type TagItemAttribute<T> = T | ((d?: any) => T);
7
+ export interface FieldGetterGeneratorOptions {
8
+ get?: Getter;
9
+ }
10
+ export declare const getter: (path: string[]) => any;
11
+ export declare const field: (fieldStr: string | string[] | FieldGetterFunction | FieldGetterFunction[], opt?: FieldGetterGeneratorOptions) => any;
12
+ export declare const simpleField: <T>(option: FieldOption | TagItemAttribute<T>) => (datum: any) => any;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ var __importDefault = this && this.__importDefault || function(mod) {
4
+ return mod && mod.__esModule ? mod : {
5
+ default: mod
6
+ };
7
+ };
8
+
9
+ Object.defineProperty(exports, "__esModule", {
10
+ value: !0
11
+ }), exports.simpleField = exports.field = exports.getter = void 0;
12
+
13
+ const get_1 = __importDefault(require("./get")), isArray_1 = __importDefault(require("./isArray")), isFunction_1 = __importDefault(require("./isFunction")), getter = path => obj => (0,
14
+ get_1.default)(obj, path);
15
+
16
+ exports.getter = getter;
17
+
18
+ const fieldSingle = (fieldStr, opt = {}) => {
19
+ if ((0, isFunction_1.default)(fieldStr)) return fieldStr;
20
+ const path = [ fieldStr ];
21
+ return (opt && opt.get || exports.getter)(path);
22
+ }, field = (fieldStr, opt = {}) => {
23
+ if ((0, isArray_1.default)(fieldStr)) {
24
+ const funcs = fieldStr.map((entry => fieldSingle(entry, opt)));
25
+ return datum => funcs.map((func => func(datum)));
26
+ }
27
+ return fieldSingle(fieldStr, opt);
28
+ };
29
+
30
+ exports.field = field;
31
+
32
+ const simpleField = option => option ? "string" == typeof option || "number" == typeof option ? () => option : (0,
33
+ isFunction_1.default)(option) ? option : datum => datum[option.field] : null;
34
+
35
+ exports.simpleField = simpleField;
36
+ //# sourceMappingURL=field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/field.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,wDAAgC;AAChC,8DAAsC;AAgB/B,MAAM,MAAM,GAAG,CAAC,IAAc,EAAO,EAAE;IAC5C,OAAO,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAA,aAAG,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC,CAAC;AAFW,QAAA,MAAM,UAEjB;AAEF,MAAM,WAAW,GAAG,CAAC,QAAsC,EAAE,MAAmC,EAAE,EAAE,EAAE;IACpG,IAAI,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE;QACxB,OAAO,QAAQ,CAAC;KACjB;IAED,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAExB,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,cAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEK,MAAM,KAAK,GAAG,CACnB,QAAyE,EACzE,MAAmC,EAAE,EACrC,EAAE;IACF,IAAI,IAAA,iBAAO,EAAC,QAAQ,CAAC,EAAE;QACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QAE7D,OAAO,CAAC,KAAU,EAAE,EAAE;YACpB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC;KACH;IAED,OAAO,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC,CAAC;AAbW,QAAA,KAAK,SAahB;AAKK,MAAM,WAAW,GAAG,CAAI,MAAyC,EAAE,EAAE;IAC1E,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,IAAI,CAAC;KACb;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC5D,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC;KACrB;SAAM,IAAI,IAAA,oBAAU,EAAC,MAAM,CAAC,EAAE;QAC7B,OAAO,MAA2B,CAAC;KACpC;IACD,OAAO,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAE,MAAsB,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC,CAAC;AAVW,QAAA,WAAW,eAUtB","file":"field.js","sourcesContent":["import get from './get';\nimport isArray from './isArray';\nimport isFunction from './isFunction';\n\n/** 获取字段值的函数 */\nexport type FieldGetterFunction = (val: any) => any;\n\n/** 根据字段路径,返回获取相应路径属性的函数 */\nexport type Getter = (path: string[]) => FieldGetterFunction;\n\nexport type FieldOption = { field: string };\nexport type TagItemAttribute<T> = T | ((d?: any) => T);\n\n/** field函数对应的参数 */\nexport interface FieldGetterGeneratorOptions {\n get?: Getter;\n}\n\nexport const getter = (path: string[]): any => {\n return (obj: any) => get(obj, path);\n};\n\nconst fieldSingle = (fieldStr: string | FieldGetterFunction, opt: FieldGetterGeneratorOptions = {}) => {\n if (isFunction(fieldStr)) {\n return fieldStr;\n }\n\n const path = [fieldStr];\n\n return ((opt && opt.get) || getter)(path);\n};\n\nexport const field = (\n fieldStr: string | string[] | FieldGetterFunction | FieldGetterFunction[],\n opt: FieldGetterGeneratorOptions = {}\n) => {\n if (isArray(fieldStr)) {\n const funcs = fieldStr.map(entry => fieldSingle(entry, opt));\n\n return (datum: any) => {\n return funcs.map(func => func(datum));\n };\n }\n\n return fieldSingle(fieldStr, opt);\n};\n\n/**\n * 取数逻辑\n */\nexport const simpleField = <T>(option: FieldOption | TagItemAttribute<T>) => {\n if (!option) {\n return null;\n }\n if (typeof option === 'string' || typeof option === 'number') {\n return () => option;\n } else if (isFunction(option)) {\n return option as (datum: any) => T;\n }\n return (datum: any) => datum[(option as FieldOption).field];\n};\n"]}
@@ -57,3 +57,8 @@ export { default as lowerFirst } from './lowerFirst';
57
57
  export { default as upperFirst } from './upperFirst';
58
58
  export { default as substitute } from './substitute';
59
59
  export * from './random';
60
+ export * from './field';
61
+ export * from './toPercent';
62
+ export * from './zero';
63
+ export * from './extent';
64
+ export * from './regression-linear';
@@ -519,5 +519,7 @@ Object.defineProperty(exports, "substitute", {
519
519
  get: function() {
520
520
  return __importDefault(substitute_1).default;
521
521
  }
522
- }), __exportStar(require("./random"), exports);
522
+ }), __exportStar(require("./random"), exports), __exportStar(require("./field"), exports),
523
+ __exportStar(require("./toPercent"), exports), __exportStar(require("./zero"), exports),
524
+ __exportStar(require("./extent"), exports), __exportStar(require("./regression-linear"), exports);
523
525
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// type check\nexport { default as isBoolean } from './isBoolean';\nexport { default as isFunction } from './isFunction';\nexport { default as isNil } from './isNil';\nexport { default as isNull } from './isNull';\nexport { default as isValid } from './isValid';\nexport { default as isObject } from './isObject';\nexport { default as isObjectLike } from './isObjectLike';\nexport { default as isPlainObject } from './isPlainObject';\nexport { default as isType } from './isType';\nexport { default as isUndefined } from './isUndefined';\nexport { default as isString } from './isString';\nexport { default as isArray } from './isArray';\nexport { default as isArrayLike } from './isArrayLike';\nexport { default as isDate } from './isDate';\nexport { default as isNumber } from './isNumber';\nexport { default as isNumeric } from './isNumeric';\nexport { default as isValidNumber } from './isValidNumber';\nexport { default as isValidUrl } from './isValidUrl';\nexport { default as isRegExp } from './isRegExp';\nexport { default as isBase64 } from './isBase64';\n\nexport { default as isEmpty } from './isEmpty';\n\n// object\nexport { default as get } from './get';\nexport { default as has } from './has';\nexport { default as clone } from './clone';\nexport { default as cloneDeep } from './cloneDeep';\nexport { default as merge, baseMerge } from './merge';\nexport { default as pick } from './pick';\nexport { default as pickWithout } from './pickWithout';\nexport { isEqual } from './isEqual';\nexport { isShallowEqual } from './isShallowEqual';\nexport * from './mixin';\n\n// array\nexport * from './array';\nexport { range } from './range';\nexport { ascending } from './ascending';\nexport * from './quantileSorted';\nexport { bisect, findZeroOfFunction, binaryFuzzySearch, binaryFuzzySearchInNumberRange } from './bisect';\nexport { deviation } from './deviation';\nexport { median } from './median';\nexport { variance } from './variance';\n\n// tick\nexport { tickStep } from './tickStep';\n\n// number\nexport * from './number';\n\n// function\nexport { default as constant } from './constant';\nexport { memoize } from './memoize';\n\n// pad\nexport { default as pad } from './pad';\nexport { default as truncate } from './truncate';\n\n// uuid\nexport { default as uuid } from './uuid';\n\n// clamp\nexport { default as clamp } from './clamp';\nexport { default as clampRange } from './clampRange';\nexport { clamper } from './clamper';\n\n// debounce & throttle\nexport { default as debounce } from './debounce';\nexport { default as throttle } from './throttle';\n\n// interpolate\nexport * from './interpolate';\n\n// type convert\nexport { toDate } from './toDate';\nexport { toNumber } from './toNumber';\nexport { toValidNumber } from './toValidNumber';\n\n// string\nexport { default as lowerFirst } from './lowerFirst';\nexport { default as upperFirst } from './upperFirst';\n\n// string format\nexport { default as substitute } from './substitute';\n\nexport * from './random';\n"]}
1
+ {"version":3,"sources":["../src/common/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// type check\nexport { default as isBoolean } from './isBoolean';\nexport { default as isFunction } from './isFunction';\nexport { default as isNil } from './isNil';\nexport { default as isNull } from './isNull';\nexport { default as isValid } from './isValid';\nexport { default as isObject } from './isObject';\nexport { default as isObjectLike } from './isObjectLike';\nexport { default as isPlainObject } from './isPlainObject';\nexport { default as isType } from './isType';\nexport { default as isUndefined } from './isUndefined';\nexport { default as isString } from './isString';\nexport { default as isArray } from './isArray';\nexport { default as isArrayLike } from './isArrayLike';\nexport { default as isDate } from './isDate';\nexport { default as isNumber } from './isNumber';\nexport { default as isNumeric } from './isNumeric';\nexport { default as isValidNumber } from './isValidNumber';\nexport { default as isValidUrl } from './isValidUrl';\nexport { default as isRegExp } from './isRegExp';\nexport { default as isBase64 } from './isBase64';\n\nexport { default as isEmpty } from './isEmpty';\n\n// object\nexport { default as get } from './get';\nexport { default as has } from './has';\nexport { default as clone } from './clone';\nexport { default as cloneDeep } from './cloneDeep';\nexport { default as merge, baseMerge } from './merge';\nexport { default as pick } from './pick';\nexport { default as pickWithout } from './pickWithout';\nexport { isEqual } from './isEqual';\nexport { isShallowEqual } from './isShallowEqual';\nexport * from './mixin';\n\n// array\nexport * from './array';\nexport { range } from './range';\nexport { ascending } from './ascending';\nexport * from './quantileSorted';\nexport { bisect, findZeroOfFunction, binaryFuzzySearch, binaryFuzzySearchInNumberRange } from './bisect';\nexport { deviation } from './deviation';\nexport { median } from './median';\nexport { variance } from './variance';\n\n// tick\nexport { tickStep } from './tickStep';\n\n// number\nexport * from './number';\n\n// function\nexport { default as constant } from './constant';\nexport { memoize } from './memoize';\n\n// pad\nexport { default as pad } from './pad';\nexport { default as truncate } from './truncate';\n\n// uuid\nexport { default as uuid } from './uuid';\n\n// clamp\nexport { default as clamp } from './clamp';\nexport { default as clampRange } from './clampRange';\nexport { clamper } from './clamper';\n\n// debounce & throttle\nexport { default as debounce } from './debounce';\nexport { default as throttle } from './throttle';\n\n// interpolate\nexport * from './interpolate';\n\n// type convert\nexport { toDate } from './toDate';\nexport { toNumber } from './toNumber';\nexport { toValidNumber } from './toValidNumber';\n\n// string\nexport { default as lowerFirst } from './lowerFirst';\nexport { default as upperFirst } from './upperFirst';\n\n// string format\nexport { default as substitute } from './substitute';\n\nexport * from './random';\nexport * from './field';\nexport * from './toPercent';\nexport * from './zero';\nexport * from './extent';\nexport * from './regression-linear';\n"]}
@@ -51,5 +51,4 @@ function interpolateString(a, b) {
51
51
  });
52
52
  }
53
53
 
54
- exports.interpolateString = interpolateString;
55
- //# sourceMappingURL=interpolate.js.map
54
+ exports.interpolateString = interpolateString;
@@ -8,4 +8,5 @@ const isArrayLike = function(value) {
8
8
  return null !== value && "function" != typeof value && Number.isFinite(value.length);
9
9
  };
10
10
 
11
- exports.default = isArrayLike;
11
+ exports.default = isArrayLike;
12
+ //# sourceMappingURL=isArrayLike.js.map
@@ -9,5 +9,4 @@ const objectProto = Object.prototype, isPrototype = function(value) {
9
9
  return value === ("function" == typeof Ctor && Ctor.prototype || objectProto);
10
10
  };
11
11
 
12
- exports.default = isPrototype;
13
- //# sourceMappingURL=isPrototype.js.map
12
+ exports.default = isPrototype;
@@ -30,4 +30,5 @@ function isShallowEqual(objA, objB) {
30
30
  ret;
31
31
  }
32
32
 
33
- exports.isShallowEqual = isShallowEqual;
33
+ exports.isShallowEqual = isShallowEqual;
34
+ //# sourceMappingURL=isShallowEqual.js.map
@@ -7,4 +7,4 @@ Object.defineProperty(exports, "__esModule", {
7
7
  const isValidUrl = value => new RegExp(/^(http(s)?:\/\/)\w+[^\s]+(\.[^\s]+){1,}$/).test(value);
8
8
 
9
9
  exports.isValidUrl = isValidUrl, exports.default = exports.isValidUrl;
10
- //# sourceMappingURL=isValidUrl.js.map
10
+ //# sourceMappingURL=isValidUrl.js.map
@@ -9,4 +9,4 @@ const lowerFirst = function(str) {
9
9
  };
10
10
 
11
11
  exports.default = lowerFirst;
12
- //# sourceMappingURL=lowerFirst.js.map
12
+ //# sourceMappingURL=lowerFirst.js.map
@@ -1 +1,3 @@
1
1
  export declare function seedRandom(seed: number): number;
2
+ export declare function randomLCG(initS?: number): () => number;
3
+ export declare const fakeRandom: () => () => number;
@@ -6,5 +6,22 @@ function seedRandom(seed) {
6
6
 
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: !0
9
- }), exports.seedRandom = void 0, exports.seedRandom = seedRandom;
9
+ }), exports.fakeRandom = exports.randomLCG = exports.seedRandom = void 0, exports.seedRandom = seedRandom;
10
+
11
+ const a = 1664525, c = 1013904223, m = 4294967296;
12
+
13
+ function randomLCG(initS = 1) {
14
+ let s = initS;
15
+ return () => (s = (a * s + c) % m) / m;
16
+ }
17
+
18
+ exports.randomLCG = randomLCG;
19
+
20
+ const fakeRandom = () => {
21
+ let i = -1;
22
+ const arr = [ 0, .1, .2, .3, .4, .5, .6, .7, .8, .9 ];
23
+ return () => (i = (i + 1) % arr.length, arr[i]);
24
+ };
25
+
26
+ exports.fakeRandom = fakeRandom;
10
27
  //# sourceMappingURL=random.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/random.ts"],"names":[],"mappings":";;;AAAA,SAAgB,UAAU,CAAC,IAAY;IACrC,OAAO,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAFD,gCAEC","file":"random.js","sourcesContent":["export function seedRandom(seed: number) {\n return parseFloat('0.' + Math.sin(seed).toString().substring(6));\n}\n"]}
1
+ {"version":3,"sources":["../src/common/random.ts"],"names":[],"mappings":";;;AAAA,SAAgB,UAAU,CAAC,IAAY;IACrC,OAAO,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAFD,gCAEC;AAYD,MAAM,CAAC,GAAG,OAAO,CAAC;AAClB,MAAM,CAAC,GAAG,UAAU,CAAC;AACrB,MAAM,CAAC,GAAG,UAAU,CAAC;AAErB,SAAgB,SAAS,CAAC,QAAgB,CAAC;IACzC,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAHD,8BAGC;AAKM,MAAM,UAAU,GAAG,GAAG,EAAE;IAC7B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACX,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7D,OAAO,GAAG,EAAE;QACV,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;QACzB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC,CAAC;AAPW,QAAA,UAAU,cAOrB","file":"random.js","sourcesContent":["export function seedRandom(seed: number) {\n return parseFloat('0.' + Math.sin(seed).toString().substring(6));\n}\n\n/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-statistics/src/lcg.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\n// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport function randomLCG(initS: number = 1) {\n let s = initS;\n return () => (s = (a * s + c) % m) / m;\n}\n\n/**\n * 随机拟合\n */\nexport const fakeRandom = () => {\n let i = -1;\n const arr = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9];\n return () => {\n i = (i + 1) % arr.length;\n return arr[i];\n };\n};\n"]}
@@ -0,0 +1,8 @@
1
+ export declare function ordinaryLeastSquares(uX: number, uY: number, uXY: number, uX2: number): number[];
2
+ export declare function visitPoints(data: any[], x: (datum: any) => number, y: (datum: any) => number, callback: (x: number, y: number, index: number) => void): void;
3
+ export declare function rSquared(data: any[], x: (datum: any) => number, y: (datum: any) => number, uY: number, predict: (x: number) => number): number;
4
+ export declare function regressionLinear(data: any[], x?: (datum: any) => number, y?: (datum: any) => number): {
5
+ coef: number[];
6
+ predict: (x: number) => number;
7
+ rSquared: number;
8
+ };
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ var __importDefault = this && this.__importDefault || function(mod) {
4
+ return mod && mod.__esModule ? mod : {
5
+ default: mod
6
+ };
7
+ };
8
+
9
+ Object.defineProperty(exports, "__esModule", {
10
+ value: !0
11
+ }), exports.regressionLinear = exports.rSquared = exports.visitPoints = exports.ordinaryLeastSquares = void 0;
12
+
13
+ const isNil_1 = __importDefault(require("./isNil"));
14
+
15
+ function ordinaryLeastSquares(uX, uY, uXY, uX2) {
16
+ const delta = uX2 - uX * uX, slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta;
17
+ return [ uY - slope * uX, slope ];
18
+ }
19
+
20
+ function visitPoints(data, x, y, callback) {
21
+ let u, v, i = -1;
22
+ data.forEach((d => {
23
+ u = x(d), v = y(d), !(0, isNil_1.default)(u) && (u = +u) >= u && !(0, isNil_1.default)(v) && (v = +v) >= v && callback(u, v, ++i);
24
+ }));
25
+ }
26
+
27
+ function rSquared(data, x, y, uY, predict) {
28
+ let SSE = 0, SST = 0;
29
+ return visitPoints(data, x, y, ((dx, dy) => {
30
+ const sse = dy - predict(dx), sst = dy - uY;
31
+ SSE += sse * sse, SST += sst * sst;
32
+ })), 1 - SSE / SST;
33
+ }
34
+
35
+ function regressionLinear(data, x = (datum => datum.x), y = (datum => datum.y)) {
36
+ let X = 0, Y = 0, XY = 0, X2 = 0, n = 0;
37
+ visitPoints(data, x, y, ((dx, dy) => {
38
+ ++n, X += (dx - X) / n, Y += (dy - Y) / n, XY += (dx * dy - XY) / n, X2 += (dx * dx - X2) / n;
39
+ }));
40
+ const coef = ordinaryLeastSquares(X, Y, XY, X2), predict = x => coef[0] + coef[1] * x;
41
+ return {
42
+ coef: coef,
43
+ predict: predict,
44
+ rSquared: rSquared(data, x, y, Y, predict)
45
+ };
46
+ }
47
+
48
+ exports.ordinaryLeastSquares = ordinaryLeastSquares, exports.visitPoints = visitPoints,
49
+ exports.rSquared = rSquared, exports.regressionLinear = regressionLinear;
50
+ //# sourceMappingURL=regression-linear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/regression-linear.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAS5B,SAAgB,oBAAoB,CAAC,EAAU,EAAE,EAAU,EAAE,GAAW,EAAE,GAAW;IACnF,MAAM,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;IACpE,MAAM,SAAS,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;IAElC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC5B,CAAC;AAND,oDAMC;AAID,SAAgB,WAAW,CACzB,IAAW,EACX,CAAyB,EACzB,CAAyB,EACzB,QAAuD;IAEvD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACX,IAAI,CAAC,CAAC;IACN,IAAI,CAAC,CAAC;IAEN,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACf,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACT,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACT,IAAI,CAAC,IAAA,eAAK,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAA,eAAK,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YAC5D,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SACrB;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAjBD,kCAiBC;AAID,SAAgB,QAAQ,CACtB,IAAW,EACX,CAAyB,EACzB,CAAyB,EACzB,EAAU,EACV,OAA8B;IAE9B,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QACjC,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;QAEpB,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;QACjB,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AACvB,CAAC;AAnBD,4BAmBC;AAID,SAAgB,gBAAgB,CAC9B,IAAW,EACX,IAA4B,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAC5C,IAA4B,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAE5C,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QACjC,EAAE,CAAC,CAAC;QACJ,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAClB,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACzB,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAErD,OAAO;QACL,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;KAC3C,CAAC;AACJ,CAAC;AA3BD,4CA2BC","file":"regression-linear.js","sourcesContent":["import isNil from './isNil';\n/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-statistics/src/regression/ols.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\nexport function ordinaryLeastSquares(uX: number, uY: number, uXY: number, uX2: number) {\n const delta = uX2 - uX * uX;\n const slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta;\n const intercept = uY - slope * uX;\n\n return [intercept, slope];\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nexport function visitPoints(\n data: any[],\n x: (datum: any) => number,\n y: (datum: any) => number,\n callback: (x: number, y: number, index: number) => void\n) {\n let i = -1;\n let u;\n let v;\n\n data.forEach(d => {\n u = x(d);\n v = y(d);\n if (!isNil(u) && (u = +u) >= u && !isNil(v) && (v = +v) >= v) {\n callback(u, v, ++i);\n }\n });\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nexport function rSquared(\n data: any[],\n x: (datum: any) => number,\n y: (datum: any) => number,\n uY: number,\n predict: (x: number) => number\n) {\n let SSE = 0;\n let SST = 0;\n\n visitPoints(data, x, y, (dx, dy) => {\n const sse = dy - predict(dx);\n const sst = dy - uY;\n\n SSE += sse * sse;\n SST += sst * sst;\n });\n\n return 1 - SSE / SST;\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nexport function regressionLinear(\n data: any[],\n x: (datum: any) => number = datum => datum.x,\n y: (datum: any) => number = datum => datum.y\n) {\n let X = 0;\n let Y = 0;\n let XY = 0;\n let X2 = 0;\n let n = 0;\n\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n\n const coef = ordinaryLeastSquares(X, Y, XY, X2);\n const predict = (x: number) => coef[0] + coef[1] * x;\n\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n"]}
@@ -0,0 +1 @@
1
+ export declare const toPercent: (percent: string | number, total: number) => number;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ var __importDefault = this && this.__importDefault || function(mod) {
4
+ return mod && mod.__esModule ? mod : {
5
+ default: mod
6
+ };
7
+ };
8
+
9
+ Object.defineProperty(exports, "__esModule", {
10
+ value: !0
11
+ }), exports.toPercent = void 0;
12
+
13
+ const isNil_1 = __importDefault(require("./isNil")), isString_1 = __importDefault(require("./isString")), toPercent = (percent, total) => (0,
14
+ isNil_1.default)(percent) ? total : (0, isString_1.default)(percent) ? total * parseFloat(percent) / 100 : percent;
15
+
16
+ exports.toPercent = toPercent;
17
+ //# sourceMappingURL=toPercent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/toPercent.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,0DAAkC;AAE3B,MAAM,SAAS,GAAG,CAAC,OAAwB,EAAE,KAAa,EAAE,EAAE;IACnE,IAAI,IAAA,eAAK,EAAC,OAAO,CAAC,EAAE;QAClB,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAA,kBAAQ,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,OAAiB,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AACrF,CAAC,CAAC;AANW,QAAA,SAAS,aAMpB","file":"toPercent.js","sourcesContent":["import isNil from './isNil';\nimport isString from './isString';\n\nexport const toPercent = (percent: string | number, total: number) => {\n if (isNil(percent)) {\n return total;\n }\n\n return isString(percent) ? (total * parseFloat(percent as string)) / 100 : percent;\n};\n"]}
@@ -0,0 +1 @@
1
+ export declare const zero: (_: any) => number;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.zero = void 0;
6
+
7
+ const zero = _ => 0;
8
+
9
+ exports.zero = zero;
10
+ //# sourceMappingURL=zero.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/zero.ts"],"names":[],"mappings":";;;AAAO,MAAM,IAAI,GAAG,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AAArB,QAAA,IAAI,QAAiB","file":"zero.js","sourcesContent":["export const zero = (_: any) => 0;\n"]}
package/dist/index.js CHANGED
@@ -1514,7 +1514,7 @@
1514
1514
  }
1515
1515
  const reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;
1516
1516
  const reB = new RegExp(reA.source, 'g');
1517
- function zero(b) {
1517
+ function zero$1(b) {
1518
1518
  return function () {
1519
1519
  return b;
1520
1520
  };
@@ -1569,7 +1569,7 @@
1569
1569
  return s.length < 2
1570
1570
  ? q[0]
1571
1571
  ? one(q[0].x)
1572
- : zero(b)
1572
+ : zero$1(b)
1573
1573
  : ((b = q.length),
1574
1574
  function (t) {
1575
1575
  for (let i = 0, o; i < b; ++i) {
@@ -1635,6 +1635,137 @@
1635
1635
  function seedRandom(seed) {
1636
1636
  return parseFloat('0.' + Math.sin(seed).toString().substring(6));
1637
1637
  }
1638
+ const a = 1664525;
1639
+ const c = 1013904223;
1640
+ const m = 4294967296;
1641
+ function randomLCG(initS = 1) {
1642
+ let s = initS;
1643
+ return () => (s = (a * s + c) % m) / m;
1644
+ }
1645
+ const fakeRandom = () => {
1646
+ let i = -1;
1647
+ const arr = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9];
1648
+ return () => {
1649
+ i = (i + 1) % arr.length;
1650
+ return arr[i];
1651
+ };
1652
+ };
1653
+
1654
+ const getter = (path) => {
1655
+ return (obj) => get(obj, path);
1656
+ };
1657
+ const fieldSingle = (fieldStr, opt = {}) => {
1658
+ if (isFunction(fieldStr)) {
1659
+ return fieldStr;
1660
+ }
1661
+ const path = [fieldStr];
1662
+ return ((opt && opt.get) || getter)(path);
1663
+ };
1664
+ const field = (fieldStr, opt = {}) => {
1665
+ if (isArray(fieldStr)) {
1666
+ const funcs = fieldStr.map(entry => fieldSingle(entry, opt));
1667
+ return (datum) => {
1668
+ return funcs.map(func => func(datum));
1669
+ };
1670
+ }
1671
+ return fieldSingle(fieldStr, opt);
1672
+ };
1673
+ const simpleField = (option) => {
1674
+ if (!option) {
1675
+ return null;
1676
+ }
1677
+ if (typeof option === 'string' || typeof option === 'number') {
1678
+ return () => option;
1679
+ }
1680
+ else if (isFunction(option)) {
1681
+ return option;
1682
+ }
1683
+ return (datum) => datum[option.field];
1684
+ };
1685
+
1686
+ const toPercent = (percent, total) => {
1687
+ if (isNil(percent)) {
1688
+ return total;
1689
+ }
1690
+ return isString(percent) ? (total * parseFloat(percent)) / 100 : percent;
1691
+ };
1692
+
1693
+ const zero = (_) => 0;
1694
+
1695
+ const extent = (array, func) => {
1696
+ const valueGetter = isFunction(func) ? func : (val) => val;
1697
+ let min;
1698
+ let max;
1699
+ if (array && array.length) {
1700
+ const n = array.length;
1701
+ for (let i = 0; i < n; i += 1) {
1702
+ let value = valueGetter(array[i]);
1703
+ if (!isNil(value) && isNumber((value = +value)) && !Number.isNaN(value)) {
1704
+ if (isNil(min)) {
1705
+ min = value;
1706
+ max = value;
1707
+ }
1708
+ else {
1709
+ min = Math.min(min, value);
1710
+ max = Math.max(max, value);
1711
+ }
1712
+ }
1713
+ }
1714
+ return [min, max];
1715
+ }
1716
+ return [min, max];
1717
+ };
1718
+
1719
+ function ordinaryLeastSquares(uX, uY, uXY, uX2) {
1720
+ const delta = uX2 - uX * uX;
1721
+ const slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta;
1722
+ const intercept = uY - slope * uX;
1723
+ return [intercept, slope];
1724
+ }
1725
+ function visitPoints(data, x, y, callback) {
1726
+ let i = -1;
1727
+ let u;
1728
+ let v;
1729
+ data.forEach(d => {
1730
+ u = x(d);
1731
+ v = y(d);
1732
+ if (!isNil(u) && (u = +u) >= u && !isNil(v) && (v = +v) >= v) {
1733
+ callback(u, v, ++i);
1734
+ }
1735
+ });
1736
+ }
1737
+ function rSquared(data, x, y, uY, predict) {
1738
+ let SSE = 0;
1739
+ let SST = 0;
1740
+ visitPoints(data, x, y, (dx, dy) => {
1741
+ const sse = dy - predict(dx);
1742
+ const sst = dy - uY;
1743
+ SSE += sse * sse;
1744
+ SST += sst * sst;
1745
+ });
1746
+ return 1 - SSE / SST;
1747
+ }
1748
+ function regressionLinear(data, x = datum => datum.x, y = datum => datum.y) {
1749
+ let X = 0;
1750
+ let Y = 0;
1751
+ let XY = 0;
1752
+ let X2 = 0;
1753
+ let n = 0;
1754
+ visitPoints(data, x, y, (dx, dy) => {
1755
+ ++n;
1756
+ X += (dx - X) / n;
1757
+ Y += (dy - Y) / n;
1758
+ XY += (dx * dy - XY) / n;
1759
+ X2 += (dx * dx - X2) / n;
1760
+ });
1761
+ const coef = ordinaryLeastSquares(X, Y, XY, X2);
1762
+ const predict = (x) => coef[0] + coef[1] * x;
1763
+ return {
1764
+ coef: coef,
1765
+ predict: predict,
1766
+ rSquared: rSquared(data, x, y, Y, predict)
1767
+ };
1768
+ }
1638
1769
 
1639
1770
  class HashValue {
1640
1771
  }
@@ -6255,6 +6386,9 @@
6255
6386
  exports.eastAsianCharacterInfo = eastAsianCharacterInfo;
6256
6387
  exports.epsilon = epsilon;
6257
6388
  exports.exponent = exponent;
6389
+ exports.extent = extent;
6390
+ exports.fakeRandom = fakeRandom;
6391
+ exports.field = field;
6258
6392
  exports.findBoundaryAngles = findBoundaryAngles;
6259
6393
  exports.findZeroOfFunction = findZeroOfFunction;
6260
6394
  exports.fixPrecision = fixPrecision;
@@ -6290,6 +6424,7 @@
6290
6424
  exports.getScrollLeft = getScrollLeft;
6291
6425
  exports.getScrollTop = getScrollTop;
6292
6426
  exports.getTimeFormatter = getTimeFormatter;
6427
+ exports.getter = getter;
6293
6428
  exports.halfPi = halfPi;
6294
6429
  exports.has = has;
6295
6430
  exports.hasParentElement = hasParentElement;
@@ -6378,6 +6513,7 @@
6378
6513
  exports.normalizePadding = normalizePadding;
6379
6514
  exports.numberSpecifierReg = numberSpecifierReg;
6380
6515
  exports.obbSeparation = obbSeparation;
6516
+ exports.ordinaryLeastSquares = ordinaryLeastSquares;
6381
6517
  exports.pad = pad;
6382
6518
  exports.parseUint8ToImageData = parseUint8ToImageData;
6383
6519
  exports.pi = pi;
@@ -6397,9 +6533,12 @@
6397
6533
  exports.precisionAdd = precisionAdd;
6398
6534
  exports.precisionSub = precisionSub;
6399
6535
  exports.quantileSorted = quantileSorted;
6536
+ exports.rSquared = rSquared;
6400
6537
  exports.radianToDegree = radianToDegree;
6538
+ exports.randomLCG = randomLCG;
6401
6539
  exports.range = range;
6402
6540
  exports.rectInsideAnotherRect = rectInsideAnotherRect;
6541
+ exports.regressionLinear = regressionLinear;
6403
6542
  exports.rgbToHex = rgbToHex;
6404
6543
  exports.rgbToHsl = rgbToHsl;
6405
6544
  exports.rotatePoint = rotatePoint;
@@ -6412,6 +6551,7 @@
6412
6551
  exports.secondsSetterName = secondsSetterName;
6413
6552
  exports.seedRandom = seedRandom;
6414
6553
  exports.shuffleArray = shuffleArray;
6554
+ exports.simpleField = simpleField;
6415
6555
  exports.sin = sin;
6416
6556
  exports.span = span;
6417
6557
  exports.sqrt = sqrt;
@@ -6424,6 +6564,7 @@
6424
6564
  exports.toCamelCase = toCamelCase;
6425
6565
  exports.toDate = toDate;
6426
6566
  exports.toNumber = toNumber;
6567
+ exports.toPercent = toPercent;
6427
6568
  exports.toValidNumber = toValidNumber;
6428
6569
  exports.transformBounds = transformBounds;
6429
6570
  exports.transformBoundsWithMatrix = transformBoundsWithMatrix;
@@ -6454,11 +6595,13 @@
6454
6595
  exports.utcYearOffset = utcYearOffset;
6455
6596
  exports.uuid = uuid;
6456
6597
  exports.variance = variance;
6598
+ exports.visitPoints = visitPoints;
6457
6599
  exports.weightedSum = weightedSum;
6458
6600
  exports.yearCount = yearCount;
6459
6601
  exports.yearField = yearField;
6460
6602
  exports.yearFloor = yearFloor;
6461
6603
  exports.yearOffset = yearOffset;
6604
+ exports.zero = zero;
6462
6605
  exports.zeros = zeros;
6463
6606
  exports.zerosM = zerosM;
6464
6607