@visactor/vutils 1.0.24 → 1.0.25

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 (435) hide show
  1. package/README.zh-CN.md +12 -0
  2. package/cjs/angle.d.ts +61 -0
  3. package/cjs/angle.js +73 -7
  4. package/cjs/angle.js.map +1 -1
  5. package/cjs/color/Color.d.ts +3 -0
  6. package/cjs/color/Color.js +64 -10
  7. package/cjs/color/Color.js.map +1 -1
  8. package/cjs/color/hexToRgb.d.ts +5 -0
  9. package/cjs/color/hexToRgb.js +5 -0
  10. package/cjs/color/hexToRgb.js.map +1 -1
  11. package/cjs/color/rgbToHsl.js +5 -1
  12. package/cjs/color/rgbToHsl.js.map +1 -1
  13. package/cjs/common/array.d.ts +43 -0
  14. package/cjs/common/array.js +44 -0
  15. package/cjs/common/array.js.map +1 -1
  16. package/cjs/common/ascending.js +1 -2
  17. package/cjs/common/bisect.d.ts +21 -0
  18. package/cjs/common/bisect.js +29 -0
  19. package/cjs/common/bisect.js.map +1 -1
  20. package/cjs/common/bootstrap.d.ts +5 -0
  21. package/cjs/common/bootstrap.js +22 -0
  22. package/cjs/common/bootstrap.js.map +1 -0
  23. package/cjs/common/clone.js +6 -0
  24. package/cjs/common/clone.js.map +1 -1
  25. package/cjs/common/cloneDeep.js +4 -1
  26. package/cjs/common/cloneDeep.js.map +1 -1
  27. package/cjs/common/correlation.d.ts +3 -0
  28. package/cjs/common/correlation.js +83 -0
  29. package/cjs/common/correlation.js.map +1 -0
  30. package/cjs/common/debounce.js +22 -4
  31. package/cjs/common/debounce.js.map +1 -1
  32. package/cjs/common/ecdf.d.ts +8 -0
  33. package/cjs/common/ecdf.js +11 -2
  34. package/cjs/common/ecdf.js.map +1 -1
  35. package/cjs/common/extent.d.ts +4 -0
  36. package/cjs/common/extent.js +4 -2
  37. package/cjs/common/extent.js.map +1 -1
  38. package/cjs/common/field.d.ts +6 -0
  39. package/cjs/common/field.js +3 -0
  40. package/cjs/common/field.js.map +1 -1
  41. package/cjs/common/getType.js +1 -2
  42. package/cjs/common/has.d.ts +17 -0
  43. package/cjs/common/has.js +18 -1
  44. package/cjs/common/has.js.map +1 -1
  45. package/cjs/common/index.d.ts +4 -0
  46. package/cjs/common/index.js +33 -6
  47. package/cjs/common/index.js.map +1 -1
  48. package/cjs/common/interpolate.js +16 -3
  49. package/cjs/common/interpolate.js.map +1 -1
  50. package/cjs/common/isBase64.d.ts +6 -0
  51. package/cjs/common/isBase64.js +6 -0
  52. package/cjs/common/isBase64.js.map +1 -1
  53. package/cjs/common/isBoolean.d.ts +13 -0
  54. package/cjs/common/isBoolean.js +13 -1
  55. package/cjs/common/isBoolean.js.map +1 -1
  56. package/cjs/common/isEmpty.js +11 -1
  57. package/cjs/common/isEmpty.js.map +1 -1
  58. package/cjs/common/isEqual.js +19 -7
  59. package/cjs/common/isEqual.js.map +1 -1
  60. package/cjs/common/isFunction.d.ts +25 -0
  61. package/cjs/common/isFunction.js +26 -0
  62. package/cjs/common/isFunction.js.map +1 -1
  63. package/cjs/common/isNull.js +2 -1
  64. package/cjs/common/isNumber.d.ts +23 -0
  65. package/cjs/common/isNumber.js +23 -1
  66. package/cjs/common/isNumber.js.map +1 -1
  67. package/cjs/common/isNumeric.d.ts +25 -0
  68. package/cjs/common/isNumeric.js +25 -0
  69. package/cjs/common/isNumeric.js.map +1 -1
  70. package/cjs/common/isObject.d.ts +21 -0
  71. package/cjs/common/isObject.js +23 -2
  72. package/cjs/common/isObject.js.map +1 -1
  73. package/cjs/common/isObjectLike.d.ts +20 -0
  74. package/cjs/common/isObjectLike.js +21 -0
  75. package/cjs/common/isObjectLike.js.map +1 -1
  76. package/cjs/common/isPlainObject.d.ts +25 -0
  77. package/cjs/common/isPlainObject.js.map +1 -1
  78. package/cjs/common/isShallowEqual.js +2 -1
  79. package/cjs/common/isShallowEqual.js.map +1 -1
  80. package/cjs/common/isString.d.ts +13 -0
  81. package/cjs/common/isString.js +14 -2
  82. package/cjs/common/isString.js.map +1 -1
  83. package/cjs/common/isType.d.ts +6 -0
  84. package/cjs/common/isType.js +7 -1
  85. package/cjs/common/isType.js.map +1 -1
  86. package/cjs/common/isValidNumber.js.map +1 -1
  87. package/cjs/common/isValidUrl.js.map +1 -1
  88. package/cjs/common/kde.d.ts +28 -0
  89. package/cjs/common/kde.js +29 -5
  90. package/cjs/common/kde.js.map +1 -1
  91. package/cjs/common/mean.d.ts +2 -0
  92. package/cjs/common/mean.js +25 -0
  93. package/cjs/common/mean.js.map +1 -0
  94. package/cjs/common/merge.js +20 -4
  95. package/cjs/common/merge.js.map +1 -1
  96. package/cjs/common/mixin.js +14 -3
  97. package/cjs/common/mixin.js.map +1 -1
  98. package/cjs/common/normalQuantile.d.ts +5 -0
  99. package/cjs/common/normalQuantile.js +21 -0
  100. package/cjs/common/normalQuantile.js.map +1 -0
  101. package/cjs/common/number.d.ts +24 -0
  102. package/cjs/common/number.js +24 -1
  103. package/cjs/common/number.js.map +1 -1
  104. package/cjs/common/pad.d.ts +21 -0
  105. package/cjs/common/pad.js +21 -1
  106. package/cjs/common/pad.js.map +1 -1
  107. package/cjs/common/random.d.ts +3 -0
  108. package/cjs/common/random.js +13 -0
  109. package/cjs/common/random.js.map +1 -1
  110. package/cjs/common/regression-linear.d.ts +4 -0
  111. package/cjs/common/regression-linear.js +19 -12
  112. package/cjs/common/regression-linear.js.map +1 -1
  113. package/cjs/common/regression-logistic.d.ts +6 -0
  114. package/cjs/common/regression-logistic.js +25 -14
  115. package/cjs/common/regression-logistic.js.map +1 -1
  116. package/cjs/common/regression-lowess.d.ts +9 -0
  117. package/cjs/common/regression-lowess.js +51 -23
  118. package/cjs/common/regression-lowess.js.map +1 -1
  119. package/cjs/common/regression-polynomial.js +26 -15
  120. package/cjs/common/regression-polynomial.js.map +1 -1
  121. package/cjs/common/regression-utils.d.ts +13 -1
  122. package/cjs/common/regression-utils.js +27 -12
  123. package/cjs/common/regression-utils.js.map +1 -1
  124. package/cjs/common/throttle.js +3 -0
  125. package/cjs/common/throttle.js.map +1 -1
  126. package/cjs/common/toDate.js +22 -3
  127. package/cjs/common/toDate.js.map +1 -1
  128. package/cjs/common/uuid.d.ts +7 -0
  129. package/cjs/common/uuid.js +15 -1
  130. package/cjs/common/uuid.js.map +1 -1
  131. package/cjs/data-structure/bounds.d.ts +101 -0
  132. package/cjs/data-structure/bounds.js +75 -8
  133. package/cjs/data-structure/bounds.js.map +1 -1
  134. package/cjs/data-structure/hashTable.d.ts +4 -0
  135. package/cjs/data-structure/hashTable.js +13 -3
  136. package/cjs/data-structure/hashTable.js.map +1 -1
  137. package/cjs/data-structure/index.js +7 -3
  138. package/cjs/data-structure/index.js.map +1 -1
  139. package/cjs/data-structure/matrix.d.ts +91 -0
  140. package/cjs/data-structure/matrix.js +53 -5
  141. package/cjs/data-structure/matrix.js.map +1 -1
  142. package/cjs/data-structure/point.d.ts +3 -0
  143. package/cjs/data-structure/point.js +6 -2
  144. package/cjs/data-structure/point.js.map +1 -1
  145. package/cjs/dom.d.ts +36 -0
  146. package/cjs/dom.js +43 -1
  147. package/cjs/dom.js.map +1 -1
  148. package/cjs/fmin/blas1.js +10 -1
  149. package/cjs/fmin/blas1.js.map +1 -1
  150. package/cjs/fmin/conjugate-gradient.js +18 -3
  151. package/cjs/fmin/conjugate-gradient.js.map +1 -1
  152. package/cjs/fmin/linesearch.js +15 -1
  153. package/cjs/fmin/linesearch.js.map +1 -1
  154. package/cjs/fmin/nelder-mead.d.ts +1 -0
  155. package/cjs/fmin/nelder-mead.js +30 -10
  156. package/cjs/fmin/nelder-mead.js.map +1 -1
  157. package/cjs/format/number/formatDecimal.js +9 -1
  158. package/cjs/format/number/formatDecimal.js.map +1 -1
  159. package/cjs/format/number/formatGroup.js +7 -0
  160. package/cjs/format/number/formatGroup.js.map +1 -1
  161. package/cjs/format/number/formatPrefixAuto.js +8 -0
  162. package/cjs/format/number/formatPrefixAuto.js.map +1 -1
  163. package/cjs/format/number/formatRounded.js +7 -0
  164. package/cjs/format/number/formatRounded.js.map +1 -1
  165. package/cjs/format/number/formatTrim.js +7 -0
  166. package/cjs/format/number/formatTrim.js.map +1 -1
  167. package/cjs/format/number/number.js +39 -9
  168. package/cjs/format/number/number.js.map +1 -1
  169. package/cjs/format/time.js +23 -6
  170. package/cjs/format/time.js.map +1 -1
  171. package/cjs/geo/circle-intersection.d.ts +12 -0
  172. package/cjs/geo/circle-intersection.js +54 -9
  173. package/cjs/geo/circle-intersection.js.map +1 -1
  174. package/cjs/geo/constant.js +8 -1
  175. package/cjs/geo/constant.js.map +1 -1
  176. package/cjs/geo/invariant.d.ts +22 -0
  177. package/cjs/geo/invariant.js +24 -1
  178. package/cjs/geo/invariant.js.map +1 -1
  179. package/cjs/graphics/algorithm/aabb.js +7 -3
  180. package/cjs/graphics/algorithm/aabb.js.map +1 -1
  181. package/cjs/graphics/algorithm/intersect.d.ts +48 -0
  182. package/cjs/graphics/algorithm/intersect.js +75 -7
  183. package/cjs/graphics/algorithm/intersect.js.map +1 -1
  184. package/cjs/graphics/bounds-util.js +4 -2
  185. package/cjs/graphics/bounds-util.js.map +1 -1
  186. package/cjs/graphics/graph-util.js +4 -0
  187. package/cjs/graphics/graph-util.js.map +1 -1
  188. package/cjs/graphics/index.js +7 -4
  189. package/cjs/graphics/index.js.map +1 -1
  190. package/cjs/graphics/polygon.d.ts +12 -0
  191. package/cjs/graphics/polygon.js +28 -5
  192. package/cjs/graphics/polygon.js.map +1 -1
  193. package/cjs/graphics/text/measure/interface.d.ts +12 -0
  194. package/cjs/graphics/text/measure/textMeasure.d.ts +23 -0
  195. package/cjs/graphics/text/measure/textMeasure.js +50 -22
  196. package/cjs/graphics/text/measure/textMeasure.js.map +1 -1
  197. package/cjs/graphics/text/measure/util.js +1 -0
  198. package/cjs/graphics/text/measure/util.js.map +1 -1
  199. package/cjs/graphics/text/stringWidth.js +7 -3
  200. package/cjs/graphics/text/stringWidth.js.map +1 -1
  201. package/cjs/index.d.ts +6 -0
  202. package/cjs/index.js +19 -4
  203. package/cjs/index.js.map +1 -1
  204. package/cjs/logger.js +12 -2
  205. package/cjs/logger.js.map +1 -1
  206. package/cjs/lru.js +14 -6
  207. package/cjs/lru.js.map +1 -1
  208. package/cjs/math.d.ts +9 -0
  209. package/cjs/math.js +10 -0
  210. package/cjs/math.js.map +1 -1
  211. package/cjs/padding.d.ts +5 -0
  212. package/cjs/padding.js +5 -0
  213. package/cjs/padding.js.map +1 -1
  214. package/cjs/time/formatUtils.d.ts +6 -0
  215. package/cjs/time/formatUtils.js +7 -0
  216. package/cjs/time/formatUtils.js.map +1 -1
  217. package/dist/index.js +1602 -109
  218. package/dist/index.min.js +128 -1
  219. package/es/angle.d.ts +61 -0
  220. package/es/angle.js +66 -10
  221. package/es/angle.js.map +1 -1
  222. package/es/color/Color.d.ts +3 -0
  223. package/es/color/Color.js +64 -9
  224. package/es/color/Color.js.map +1 -1
  225. package/es/color/hexToRgb.d.ts +5 -0
  226. package/es/color/hexToRgb.js +5 -0
  227. package/es/color/hexToRgb.js.map +1 -1
  228. package/es/color/rgbToHsl.js +5 -1
  229. package/es/color/rgbToHsl.js.map +1 -1
  230. package/es/common/array.d.ts +43 -0
  231. package/es/common/array.js +44 -8
  232. package/es/common/array.js.map +1 -1
  233. package/es/common/ascending.js +1 -2
  234. package/es/common/bisect.d.ts +21 -0
  235. package/es/common/bisect.js +29 -4
  236. package/es/common/bisect.js.map +1 -1
  237. package/es/common/bootstrap.d.ts +5 -0
  238. package/es/common/bootstrap.js +14 -0
  239. package/es/common/bootstrap.js.map +1 -0
  240. package/es/common/clone.js +6 -0
  241. package/es/common/clone.js.map +1 -1
  242. package/es/common/cloneDeep.js +4 -1
  243. package/es/common/cloneDeep.js.map +1 -1
  244. package/es/common/correlation.d.ts +3 -0
  245. package/es/common/correlation.js +77 -0
  246. package/es/common/correlation.js.map +1 -0
  247. package/es/common/debounce.js +22 -4
  248. package/es/common/debounce.js.map +1 -1
  249. package/es/common/ecdf.d.ts +8 -0
  250. package/es/common/ecdf.js +11 -1
  251. package/es/common/ecdf.js.map +1 -1
  252. package/es/common/extent.d.ts +4 -0
  253. package/es/common/extent.js +8 -3
  254. package/es/common/extent.js.map +1 -1
  255. package/es/common/field.d.ts +6 -0
  256. package/es/common/field.js +3 -1
  257. package/es/common/field.js.map +1 -1
  258. package/es/common/getType.js +1 -2
  259. package/es/common/has.d.ts +17 -0
  260. package/es/common/has.js +18 -1
  261. package/es/common/has.js.map +1 -1
  262. package/es/common/index.d.ts +4 -0
  263. package/es/common/index.js +22 -0
  264. package/es/common/index.js.map +1 -1
  265. package/es/common/interpolate.js +16 -3
  266. package/es/common/interpolate.js.map +1 -1
  267. package/es/common/isBase64.d.ts +6 -0
  268. package/es/common/isBase64.js +6 -0
  269. package/es/common/isBase64.js.map +1 -1
  270. package/es/common/isBoolean.d.ts +13 -0
  271. package/es/common/isBoolean.js +13 -1
  272. package/es/common/isBoolean.js.map +1 -1
  273. package/es/common/isEmpty.js +11 -1
  274. package/es/common/isEmpty.js.map +1 -1
  275. package/es/common/isEqual.js +19 -7
  276. package/es/common/isEqual.js.map +1 -1
  277. package/es/common/isFunction.d.ts +25 -0
  278. package/es/common/isFunction.js +26 -0
  279. package/es/common/isFunction.js.map +1 -1
  280. package/es/common/isNull.js +2 -1
  281. package/es/common/isNumber.d.ts +23 -0
  282. package/es/common/isNumber.js +23 -1
  283. package/es/common/isNumber.js.map +1 -1
  284. package/es/common/isNumeric.d.ts +25 -0
  285. package/es/common/isNumeric.js +25 -0
  286. package/es/common/isNumeric.js.map +1 -1
  287. package/es/common/isObject.d.ts +21 -0
  288. package/es/common/isObject.js +23 -2
  289. package/es/common/isObject.js.map +1 -1
  290. package/es/common/isObjectLike.d.ts +20 -0
  291. package/es/common/isObjectLike.js +21 -0
  292. package/es/common/isObjectLike.js.map +1 -1
  293. package/es/common/isPlainObject.d.ts +25 -0
  294. package/es/common/isPlainObject.js +26 -0
  295. package/es/common/isPlainObject.js.map +1 -1
  296. package/es/common/isShallowEqual.js +2 -1
  297. package/es/common/isShallowEqual.js.map +1 -1
  298. package/es/common/isString.d.ts +13 -0
  299. package/es/common/isString.js +14 -2
  300. package/es/common/isString.js.map +1 -1
  301. package/es/common/isType.d.ts +6 -0
  302. package/es/common/isType.js +7 -1
  303. package/es/common/isType.js.map +1 -1
  304. package/es/common/isValidNumber.js.map +1 -1
  305. package/es/common/isValidUrl.js.map +1 -1
  306. package/es/common/kde.d.ts +28 -0
  307. package/es/common/kde.js +29 -7
  308. package/es/common/kde.js.map +1 -1
  309. package/es/common/mean.d.ts +2 -0
  310. package/es/common/mean.js +19 -0
  311. package/es/common/mean.js.map +1 -0
  312. package/es/common/merge.js +22 -5
  313. package/es/common/merge.js.map +1 -1
  314. package/es/common/mixin.js +14 -3
  315. package/es/common/mixin.js.map +1 -1
  316. package/es/common/normalQuantile.d.ts +5 -0
  317. package/es/common/normalQuantile.js +15 -0
  318. package/es/common/normalQuantile.js.map +1 -0
  319. package/es/common/number.d.ts +24 -0
  320. package/es/common/number.js +24 -2
  321. package/es/common/number.js.map +1 -1
  322. package/es/common/pad.d.ts +21 -0
  323. package/es/common/pad.js +21 -1
  324. package/es/common/pad.js.map +1 -1
  325. package/es/common/random.d.ts +3 -0
  326. package/es/common/random.js +13 -1
  327. package/es/common/random.js.map +1 -1
  328. package/es/common/regression-linear.d.ts +4 -0
  329. package/es/common/regression-linear.js +18 -14
  330. package/es/common/regression-linear.js.map +1 -1
  331. package/es/common/regression-logistic.d.ts +6 -0
  332. package/es/common/regression-logistic.js +24 -16
  333. package/es/common/regression-logistic.js.map +1 -1
  334. package/es/common/regression-lowess.d.ts +9 -0
  335. package/es/common/regression-lowess.js +50 -24
  336. package/es/common/regression-lowess.js.map +1 -1
  337. package/es/common/regression-polynomial.js +25 -16
  338. package/es/common/regression-polynomial.js.map +1 -1
  339. package/es/common/regression-utils.d.ts +13 -1
  340. package/es/common/regression-utils.js +18 -9
  341. package/es/common/regression-utils.js.map +1 -1
  342. package/es/common/throttle.js +3 -0
  343. package/es/common/throttle.js.map +1 -1
  344. package/es/common/toDate.js +23 -3
  345. package/es/common/toDate.js.map +1 -1
  346. package/es/common/uuid.d.ts +7 -0
  347. package/es/common/uuid.js +15 -1
  348. package/es/common/uuid.js.map +1 -1
  349. package/es/data-structure/bounds.d.ts +101 -0
  350. package/es/data-structure/bounds.js +75 -9
  351. package/es/data-structure/bounds.js.map +1 -1
  352. package/es/data-structure/hashTable.d.ts +4 -0
  353. package/es/data-structure/hashTable.js +13 -3
  354. package/es/data-structure/hashTable.js.map +1 -1
  355. package/es/data-structure/index.js +3 -1
  356. package/es/data-structure/index.js.map +1 -1
  357. package/es/data-structure/matrix.d.ts +91 -0
  358. package/es/data-structure/matrix.js +53 -6
  359. package/es/data-structure/matrix.js.map +1 -1
  360. package/es/data-structure/point.d.ts +3 -0
  361. package/es/data-structure/point.js +6 -2
  362. package/es/data-structure/point.js.map +1 -1
  363. package/es/dom.d.ts +36 -0
  364. package/es/dom.js +43 -8
  365. package/es/dom.js.map +1 -1
  366. package/es/fmin/blas1.js +10 -0
  367. package/es/fmin/blas1.js.map +1 -1
  368. package/es/fmin/conjugate-gradient.js +18 -2
  369. package/es/fmin/conjugate-gradient.js.map +1 -1
  370. package/es/fmin/linesearch.js +15 -0
  371. package/es/fmin/linesearch.js.map +1 -1
  372. package/es/fmin/nelder-mead.d.ts +1 -0
  373. package/es/fmin/nelder-mead.js +29 -9
  374. package/es/fmin/nelder-mead.js.map +1 -1
  375. package/es/format/number/formatDecimal.js +9 -1
  376. package/es/format/number/formatDecimal.js.map +1 -1
  377. package/es/format/number/formatGroup.js +7 -0
  378. package/es/format/number/formatGroup.js.map +1 -1
  379. package/es/format/number/formatPrefixAuto.js +8 -0
  380. package/es/format/number/formatPrefixAuto.js.map +1 -1
  381. package/es/format/number/formatRounded.js +7 -0
  382. package/es/format/number/formatRounded.js.map +1 -1
  383. package/es/format/number/formatTrim.js +7 -0
  384. package/es/format/number/formatTrim.js.map +1 -1
  385. package/es/format/number/number.js +40 -8
  386. package/es/format/number/number.js.map +1 -1
  387. package/es/format/time.js +23 -5
  388. package/es/format/time.js.map +1 -1
  389. package/es/geo/circle-intersection.d.ts +12 -0
  390. package/es/geo/circle-intersection.js +54 -14
  391. package/es/geo/circle-intersection.js.map +1 -1
  392. package/es/geo/constant.js +8 -0
  393. package/es/geo/constant.js.map +1 -1
  394. package/es/geo/invariant.d.ts +22 -0
  395. package/es/geo/invariant.js +24 -0
  396. package/es/geo/invariant.js.map +1 -1
  397. package/es/graphics/algorithm/aabb.js +7 -3
  398. package/es/graphics/algorithm/aabb.js.map +1 -1
  399. package/es/graphics/algorithm/intersect.d.ts +48 -0
  400. package/es/graphics/algorithm/intersect.js +75 -12
  401. package/es/graphics/algorithm/intersect.js.map +1 -1
  402. package/es/graphics/bounds-util.js +4 -2
  403. package/es/graphics/bounds-util.js.map +1 -1
  404. package/es/graphics/graph-util.js +4 -0
  405. package/es/graphics/graph-util.js.map +1 -1
  406. package/es/graphics/index.js +2 -0
  407. package/es/graphics/index.js.map +1 -1
  408. package/es/graphics/polygon.d.ts +12 -0
  409. package/es/graphics/polygon.js +28 -6
  410. package/es/graphics/polygon.js.map +1 -1
  411. package/es/graphics/text/measure/interface.d.ts +12 -0
  412. package/es/graphics/text/measure/textMeasure.d.ts +23 -0
  413. package/es/graphics/text/measure/textMeasure.js +46 -21
  414. package/es/graphics/text/measure/textMeasure.js.map +1 -1
  415. package/es/graphics/text/measure/util.js +1 -0
  416. package/es/graphics/text/measure/util.js.map +1 -1
  417. package/es/graphics/text/stringWidth.js +7 -3
  418. package/es/graphics/text/stringWidth.js.map +1 -1
  419. package/es/index.d.ts +6 -0
  420. package/es/index.js +15 -1
  421. package/es/index.js.map +1 -1
  422. package/es/logger.js +12 -1
  423. package/es/logger.js.map +1 -1
  424. package/es/lru.js +14 -6
  425. package/es/lru.js.map +1 -1
  426. package/es/math.d.ts +9 -0
  427. package/es/math.js +10 -1
  428. package/es/math.js.map +1 -1
  429. package/es/padding.d.ts +5 -0
  430. package/es/padding.js +5 -1
  431. package/es/padding.js.map +1 -1
  432. package/es/time/formatUtils.d.ts +6 -0
  433. package/es/time/formatUtils.js +7 -1
  434. package/es/time/formatUtils.js.map +1 -1
  435. package/package.json +3 -3
@@ -13,9 +13,12 @@ Object.defineProperty(exports, "__esModule", {
13
13
  const regression_linear_1 = require("./regression-linear"), isNil_1 = __importDefault(require("./isNil")), regression_utils_1 = require("./regression-utils");
14
14
 
15
15
  function solveLinearSystem(A, b) {
16
+ // Gaussian elimination with partial pivoting
16
17
  const n = b.length, M = new Array(n);
17
- for (let i = 0; i < n; i++) M[i] = A[i].slice(), M[i].push(b[i]);
18
+ // clone
19
+ for (let i = 0; i < n; i++) M[i] = A[i].slice(), M[i].push(b[i]);
18
20
  for (let k = 0; k < n; k++) {
21
+ // find pivot
19
22
  let maxRow = k, maxVal = Math.abs(M[k][k]);
20
23
  for (let i = k + 1; i < n; i++) {
21
24
  const v = Math.abs(M[i][k]);
@@ -25,11 +28,14 @@ function solveLinearSystem(A, b) {
25
28
  const tmp = M[k];
26
29
  M[k] = M[maxRow], M[maxRow] = tmp;
27
30
  }
28
- if (Math.abs(M[k][k]) < 1e-12) {
31
+ // singular check
32
+ if (Math.abs(M[k][k]) < 1e-12) {
29
33
  return new Array(n).fill(0);
30
34
  }
31
- for (let j = k + 1; j <= n; j++) M[k][j] = M[k][j] / M[k][k];
35
+ // normalize row
36
+ for (let j = k + 1; j <= n; j++) M[k][j] = M[k][j] / M[k][k];
32
37
  M[k][k] = 1;
38
+ // eliminate
33
39
  for (let i = 0; i < n; i++) {
34
40
  if (i === k) continue;
35
41
  const factor = M[i][k];
@@ -53,6 +59,7 @@ function regressionPolynomial(data, x = (d => d.x), y = (d => d.y), options = {}
53
59
  let xp = 1;
54
60
  for (let k = 0; k < sums.length; k++) sums[k] += xp, xp *= dx;
55
61
  }));
62
+ // build normal matrix
56
63
  const A = new Array(m);
57
64
  for (let i = 0; i < m; i++) {
58
65
  A[i] = new Array(m).fill(0);
@@ -73,6 +80,7 @@ function regressionPolynomial(data, x = (d => d.x), y = (d => d.y), options = {}
73
80
  coef: coef,
74
81
  predict: predict,
75
82
  rSquared: (0, regression_linear_1.rSquared)(data, x, y, (() => {
83
+ // compute mean y
76
84
  let sum = 0, cnt = 0;
77
85
  return (0, regression_linear_1.visitPoints)(data, x, y, ((_dx, dy) => {
78
86
  sum += dy, cnt++;
@@ -81,7 +89,8 @@ function regressionPolynomial(data, x = (d => d.x), y = (d => d.y), options = {}
81
89
  evaluateGrid(N) {
82
90
  const out = [];
83
91
  if (N <= 0) return out;
84
- let min = 1 / 0, max = -1 / 0;
92
+ // compute range
93
+ let min = 1 / 0, max = -1 / 0;
85
94
  if ((0, regression_linear_1.visitPoints)(data, x, y, (dx => {
86
95
  (0, isNil_1.default)(dx) || (dx < min && (min = dx), dx > max && (max = dx));
87
96
  })), min === 1 / 0 || max === -1 / 0) return out;
@@ -108,30 +117,32 @@ function regressionPolynomial(data, x = (d => d.x), y = (d => d.y), options = {}
108
117
  if (N <= 0) return out;
109
118
  const comps = (0, regression_utils_1.computeLinearCIComponents)(data, x, y, predict);
110
119
  if (0 === comps.n) return out;
111
- const z = Math.abs((0, regression_utils_1.invNorm)(1 - alpha / 2));
120
+ const z = (0, regression_utils_1.confidenceCriticalValue)(alpha);
112
121
  if (comps.min === comps.max) {
113
- const v = predict(comps.min), errs = (0, regression_utils_1.stdErrorsAt)(comps.min, comps);
122
+ const v = predict(comps.min), errs = (0, regression_utils_1.stdErrorsAt)(comps.min, comps), meanHalfWidth = (0,
123
+ regression_utils_1.confidenceHalfWidth)(z, errs.seMean), predHalfWidth = (0, regression_utils_1.confidenceHalfWidth)(z, errs.sePred);
114
124
  for (let i = 0; i < N; i++) out.push({
115
125
  x: comps.min,
116
126
  mean: v,
117
- lower: v - z * errs.seMean,
118
- upper: v + z * errs.seMean,
119
- predLower: v - z * errs.sePred,
120
- predUpper: v + z * errs.sePred
127
+ lower: v - meanHalfWidth,
128
+ upper: v + meanHalfWidth,
129
+ predLower: v - predHalfWidth,
130
+ predUpper: v + predHalfWidth
121
131
  });
122
132
  return out;
123
133
  }
124
134
  const step = (comps.max - comps.min) / (N - 1);
125
135
  for (let i = 0; i < N; i++) {
126
136
  const px = i === N - 1 ? comps.max : comps.min + step * i, yh = predict(px), errs = (0,
127
- regression_utils_1.stdErrorsAt)(px, comps);
137
+ regression_utils_1.stdErrorsAt)(px, comps), meanHalfWidth = (0, regression_utils_1.confidenceHalfWidth)(z, errs.seMean), predHalfWidth = (0,
138
+ regression_utils_1.confidenceHalfWidth)(z, errs.sePred);
128
139
  out.push({
129
140
  x: px,
130
141
  mean: yh,
131
- lower: yh - z * errs.seMean,
132
- upper: yh + z * errs.seMean,
133
- predLower: yh - z * errs.sePred,
134
- predUpper: yh + z * errs.sePred
142
+ lower: yh - meanHalfWidth,
143
+ upper: yh + meanHalfWidth,
144
+ predLower: yh - predHalfWidth,
145
+ predUpper: yh + predHalfWidth
135
146
  });
136
147
  }
137
148
  return out;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/regression-polynomial.ts"],"names":[],"mappings":"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","file":"regression-polynomial.js","sourcesContent":["import { visitPoints, rSquared } from './regression-linear';\nimport isNil from './isNil';\nimport { computeLinearCIComponents, invNorm, stdErrorsAt } from './regression-utils';\n\nfunction solveLinearSystem(A: number[][], b: number[]): number[] {\n // Gaussian elimination with partial pivoting\n const n = b.length;\n // clone\n const M: number[][] = new Array(n);\n for (let i = 0; i < n; i++) {\n M[i] = A[i].slice();\n M[i].push(b[i]);\n }\n\n for (let k = 0; k < n; k++) {\n // find pivot\n let maxRow = k;\n let maxVal = Math.abs(M[k][k]);\n for (let i = k + 1; i < n; i++) {\n const v = Math.abs(M[i][k]);\n if (v > maxVal) {\n maxVal = v;\n maxRow = i;\n }\n }\n if (maxRow !== k) {\n const tmp = M[k];\n M[k] = M[maxRow];\n M[maxRow] = tmp;\n }\n\n // singular check\n if (Math.abs(M[k][k]) < 1e-12) {\n // return least squares fallback zeros\n const res: number[] = new Array(n).fill(0);\n return res;\n }\n\n // normalize row\n for (let j = k + 1; j <= n; j++) {\n M[k][j] = M[k][j] / M[k][k];\n }\n M[k][k] = 1;\n\n // eliminate\n for (let i = 0; i < n; i++) {\n if (i === k) {\n continue;\n }\n const factor = M[i][k];\n if (factor === 0) {\n continue;\n }\n for (let j = k + 1; j <= n; j++) {\n M[i][j] -= factor * M[k][j];\n }\n M[i][k] = 0;\n }\n }\n\n const x: number[] = new Array(n);\n for (let i = 0; i < n; i++) {\n x[i] = M[i][n];\n }\n return x;\n}\n\nexport function regressionPolynomial(\n data: any[],\n x: (d: any) => number = d => d.x,\n y: (d: any) => number = d => d.y,\n options: { degree?: number; alpha?: number } = {}\n) {\n let degree = options.degree ?? 0;\n if (degree < 0) {\n degree = 0;\n }\n const alpha = options.alpha ?? 0.05;\n const m = degree + 1;\n const sums: number[] = new Array(2 * degree + 1).fill(0);\n\n visitPoints(data, x, y, (dx, dy) => {\n let xp = 1;\n for (let k = 0; k < sums.length; k++) {\n sums[k] += xp;\n xp *= dx;\n }\n });\n\n // build normal matrix\n const A: number[][] = new Array(m);\n for (let i = 0; i < m; i++) {\n A[i] = new Array(m).fill(0);\n for (let j = 0; j < m; j++) {\n A[i][j] = sums[i + j];\n }\n }\n\n const B: number[] = new Array(m).fill(0);\n visitPoints(data, x, y, (dx, dy) => {\n let xp = 1;\n for (let k = 0; k < m; k++) {\n B[k] += dy * xp;\n xp *= dx;\n }\n });\n\n const coef = solveLinearSystem(A, B);\n\n const predict = (xx: number) => {\n let xp = 1;\n let v = 0;\n for (let k = 0; k < coef.length; k++) {\n v += coef[k] * xp;\n xp *= xx;\n }\n return v;\n };\n\n return {\n degree,\n coef,\n predict,\n rSquared: rSquared(\n data,\n x,\n y,\n (() => {\n // compute mean y\n let sum = 0;\n let cnt = 0;\n visitPoints(data, x, y, (_dx, dy) => {\n sum += dy;\n cnt++;\n });\n return cnt === 0 ? 0 : sum / cnt;\n })(),\n predict\n ),\n evaluateGrid(N: number) {\n const out: { x: number; y: number }[] = [];\n if (N <= 0) {\n return out;\n }\n // compute range\n let min = Infinity;\n let max = -Infinity;\n visitPoints(data, x, y, dx => {\n if (!isNil(dx)) {\n if (dx < min) {\n min = dx;\n }\n if (dx > max) {\n max = dx;\n }\n }\n });\n if (min === Infinity || max === -Infinity) {\n return out;\n }\n if (min === max) {\n const v = predict(min);\n for (let i = 0; i < N; i++) {\n out.push({ x: min, y: v });\n }\n return out;\n }\n const step = (max - min) / (N - 1);\n for (let i = 0; i < N; i++) {\n const px = i === N - 1 ? max : min + step * i;\n out.push({ x: px, y: predict(px) });\n }\n return out;\n },\n confidenceInterval(N: number = 50) {\n const out: { x: number; mean: number; lower: number; upper: number; predLower: number; predUpper: number }[] = [];\n\n if (N <= 0) {\n return out;\n }\n\n const comps = computeLinearCIComponents(data, x, y, predict);\n if (comps.n === 0) {\n return out;\n }\n\n const z = Math.abs(invNorm(1 - alpha / 2));\n if (comps.min === comps.max) {\n const v = predict(comps.min);\n const errs = stdErrorsAt(comps.min, comps);\n for (let i = 0; i < N; i++) {\n out.push({\n x: comps.min,\n mean: v,\n lower: v - z * errs.seMean,\n upper: v + z * errs.seMean,\n predLower: v - z * errs.sePred,\n predUpper: v + z * errs.sePred\n });\n }\n return out;\n }\n\n const step = (comps.max - comps.min) / (N - 1);\n for (let i = 0; i < N; i++) {\n const px = i === N - 1 ? comps.max : comps.min + step * i;\n const yh = predict(px);\n const errs = stdErrorsAt(px, comps);\n out.push({\n x: px,\n mean: yh,\n lower: yh - z * errs.seMean,\n upper: yh + z * errs.seMean,\n predLower: yh - z * errs.sePred,\n predUpper: yh + z * errs.sePred\n });\n }\n return out;\n }\n };\n}\n\nexport default regressionPolynomial;\n"]}
1
+ {"version":3,"sources":["../src/common/regression-polynomial.ts"],"names":[],"mappings":"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","file":"regression-polynomial.js","sourcesContent":["import { visitPoints, rSquared } from './regression-linear';\nimport isNil from './isNil';\nimport {\n computeLinearCIComponents,\n confidenceCriticalValue,\n confidenceHalfWidth,\n stdErrorsAt\n} from './regression-utils';\n\nfunction solveLinearSystem(A: number[][], b: number[]): number[] {\n // Gaussian elimination with partial pivoting\n const n = b.length;\n // clone\n const M: number[][] = new Array(n);\n for (let i = 0; i < n; i++) {\n M[i] = A[i].slice();\n M[i].push(b[i]);\n }\n\n for (let k = 0; k < n; k++) {\n // find pivot\n let maxRow = k;\n let maxVal = Math.abs(M[k][k]);\n for (let i = k + 1; i < n; i++) {\n const v = Math.abs(M[i][k]);\n if (v > maxVal) {\n maxVal = v;\n maxRow = i;\n }\n }\n if (maxRow !== k) {\n const tmp = M[k];\n M[k] = M[maxRow];\n M[maxRow] = tmp;\n }\n\n // singular check\n if (Math.abs(M[k][k]) < 1e-12) {\n // return least squares fallback zeros\n const res: number[] = new Array(n).fill(0);\n return res;\n }\n\n // normalize row\n for (let j = k + 1; j <= n; j++) {\n M[k][j] = M[k][j] / M[k][k];\n }\n M[k][k] = 1;\n\n // eliminate\n for (let i = 0; i < n; i++) {\n if (i === k) {\n continue;\n }\n const factor = M[i][k];\n if (factor === 0) {\n continue;\n }\n for (let j = k + 1; j <= n; j++) {\n M[i][j] -= factor * M[k][j];\n }\n M[i][k] = 0;\n }\n }\n\n const x: number[] = new Array(n);\n for (let i = 0; i < n; i++) {\n x[i] = M[i][n];\n }\n return x;\n}\n\nexport function regressionPolynomial(\n data: any[],\n x: (d: any) => number = d => d.x,\n y: (d: any) => number = d => d.y,\n options: { degree?: number; alpha?: number } = {}\n) {\n let degree = options.degree ?? 0;\n if (degree < 0) {\n degree = 0;\n }\n const alpha = options.alpha ?? 0.05;\n const m = degree + 1;\n const sums: number[] = new Array(2 * degree + 1).fill(0);\n\n visitPoints(data, x, y, (dx, dy) => {\n let xp = 1;\n for (let k = 0; k < sums.length; k++) {\n sums[k] += xp;\n xp *= dx;\n }\n });\n\n // build normal matrix\n const A: number[][] = new Array(m);\n for (let i = 0; i < m; i++) {\n A[i] = new Array(m).fill(0);\n for (let j = 0; j < m; j++) {\n A[i][j] = sums[i + j];\n }\n }\n\n const B: number[] = new Array(m).fill(0);\n visitPoints(data, x, y, (dx, dy) => {\n let xp = 1;\n for (let k = 0; k < m; k++) {\n B[k] += dy * xp;\n xp *= dx;\n }\n });\n\n const coef = solveLinearSystem(A, B);\n\n const predict = (xx: number) => {\n let xp = 1;\n let v = 0;\n for (let k = 0; k < coef.length; k++) {\n v += coef[k] * xp;\n xp *= xx;\n }\n return v;\n };\n\n return {\n degree,\n coef,\n predict,\n rSquared: rSquared(\n data,\n x,\n y,\n (() => {\n // compute mean y\n let sum = 0;\n let cnt = 0;\n visitPoints(data, x, y, (_dx, dy) => {\n sum += dy;\n cnt++;\n });\n return cnt === 0 ? 0 : sum / cnt;\n })(),\n predict\n ),\n evaluateGrid(N: number) {\n const out: { x: number; y: number }[] = [];\n if (N <= 0) {\n return out;\n }\n // compute range\n let min = Infinity;\n let max = -Infinity;\n visitPoints(data, x, y, dx => {\n if (!isNil(dx)) {\n if (dx < min) {\n min = dx;\n }\n if (dx > max) {\n max = dx;\n }\n }\n });\n if (min === Infinity || max === -Infinity) {\n return out;\n }\n if (min === max) {\n const v = predict(min);\n for (let i = 0; i < N; i++) {\n out.push({ x: min, y: v });\n }\n return out;\n }\n const step = (max - min) / (N - 1);\n for (let i = 0; i < N; i++) {\n const px = i === N - 1 ? max : min + step * i;\n out.push({ x: px, y: predict(px) });\n }\n return out;\n },\n confidenceInterval(N: number = 50) {\n const out: { x: number; mean: number; lower: number; upper: number; predLower: number; predUpper: number }[] = [];\n\n if (N <= 0) {\n return out;\n }\n\n const comps = computeLinearCIComponents(data, x, y, predict);\n if (comps.n === 0) {\n return out;\n }\n\n const z = confidenceCriticalValue(alpha);\n if (comps.min === comps.max) {\n const v = predict(comps.min);\n const errs = stdErrorsAt(comps.min, comps);\n const meanHalfWidth = confidenceHalfWidth(z, errs.seMean);\n const predHalfWidth = confidenceHalfWidth(z, errs.sePred);\n for (let i = 0; i < N; i++) {\n out.push({\n x: comps.min,\n mean: v,\n lower: v - meanHalfWidth,\n upper: v + meanHalfWidth,\n predLower: v - predHalfWidth,\n predUpper: v + predHalfWidth\n });\n }\n return out;\n }\n\n const step = (comps.max - comps.min) / (N - 1);\n for (let i = 0; i < N; i++) {\n const px = i === N - 1 ? comps.max : comps.min + step * i;\n const yh = predict(px);\n const errs = stdErrorsAt(px, comps);\n const meanHalfWidth = confidenceHalfWidth(z, errs.seMean);\n const predHalfWidth = confidenceHalfWidth(z, errs.sePred);\n out.push({\n x: px,\n mean: yh,\n lower: yh - meanHalfWidth,\n upper: yh + meanHalfWidth,\n predLower: yh - predHalfWidth,\n predUpper: yh + predHalfWidth\n });\n }\n return out;\n }\n };\n}\n\nexport default regressionPolynomial;\n"]}
@@ -1,4 +1,9 @@
1
- export declare function invNorm(p: number): number;
1
+ import { normalQuantile as invNorm } from './normalQuantile';
2
+ export { invNorm };
3
+ /** Compute a two-sided normal critical value without subtracting a small tail probability from one. */
4
+ export declare function confidenceCriticalValue(alpha: number): number;
5
+ /** A zero standard error gives a degenerate interval even when the critical value is infinite. */
6
+ export declare function confidenceHalfWidth(z: number, standardError: number): number;
2
7
  export interface LinearCIComponents {
3
8
  min: number;
4
9
  max: number;
@@ -7,7 +12,14 @@ export interface LinearCIComponents {
7
12
  SSE: number;
8
13
  Sxx: number;
9
14
  }
15
+ /**
16
+ * Compute basic components used for linear regression confidence / prediction intervals.
17
+ * - scans data to compute min/max of x, n, mean X, SSE and Sxx (sum (xi - X)^2).
18
+ */
10
19
  export declare function computeLinearCIComponents(data: any[], x: (d: any) => number, y: (d: any) => number, predict: (x: number) => number): LinearCIComponents;
20
+ /**
21
+ * Compute standard errors for mean and prediction at px using components.
22
+ */
11
23
  export declare function stdErrorsAt(px: number, comps: LinearCIComponents): {
12
24
  seMean: number;
13
25
  sePred: number;
@@ -8,20 +8,26 @@ var __importDefault = this && this.__importDefault || function(mod) {
8
8
 
9
9
  Object.defineProperty(exports, "__esModule", {
10
10
  value: !0
11
- }), exports.stdErrorsAt = exports.computeLinearCIComponents = exports.invNorm = void 0;
11
+ }), exports.stdErrorsAt = exports.computeLinearCIComponents = exports.confidenceHalfWidth = exports.confidenceCriticalValue = exports.invNorm = void 0;
12
12
 
13
- const isNil_1 = __importDefault(require("./isNil"));
13
+ const isNil_1 = __importDefault(require("./isNil")), normalQuantile_1 = require("./normalQuantile");
14
14
 
15
- function invNorm(p) {
16
- if (p <= 0 || p >= 1) return 0;
17
- const c1 = -.00778489400243029, c2 = -.322396458041136, c3 = -2.40075827716184, c4 = -2.54973253934373, c5 = 4.37466414146497, c6 = 2.93816398269878, d1 = .00778469570904146, d2 = .32246712907004, d3 = 2.445134137143, d4 = 3.75440866190742;
18
- let q, r;
19
- return p < .02425 ? (q = Math.sqrt(-2 * Math.log(p)), (((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) / ((((d1 * q + d2) * q + d3) * q + d4) * q + 1)) : p <= .97575 ? (q = p - .5,
20
- r = q * q, (((((-39.6968302866538 * r + 220.946098424521) * r - 275.928510446969) * r + 138.357751867269) * r - 30.6647980661472) * r + 2.50662827745924) * q / (((((-54.4760987982241 * r + 161.585836858041) * r - 155.698979859887) * r + 66.8013118877197) * r - 13.2806815528857) * r + 1)) : (q = Math.sqrt(-2 * Math.log(1 - p)),
21
- -(((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) / ((((d1 * q + d2) * q + d3) * q + d4) * q + 1));
15
+ /** Compute a two-sided normal critical value without subtracting a small tail probability from one. */
16
+ function confidenceCriticalValue(alpha) {
17
+ return !Number.isFinite(alpha) || alpha < 0 || alpha > 1 ? NaN : -(0, normalQuantile_1.normalQuantile)(alpha / 2);
22
18
  }
23
19
 
20
+ /** A zero standard error gives a degenerate interval even when the critical value is infinite. */
21
+ function confidenceHalfWidth(z, standardError) {
22
+ return Number.isNaN(z) ? NaN : 0 === standardError ? 0 : z * standardError;
23
+ }
24
+
25
+ /**
26
+ * Compute basic components used for linear regression confidence / prediction intervals.
27
+ * - scans data to compute min/max of x, n, mean X, SSE and Sxx (sum (xi - X)^2).
28
+ */
24
29
  function computeLinearCIComponents(data, x, y, predict) {
30
+ // simple local scanner to avoid circular imports
25
31
  let min = 1 / 0, max = -1 / 0, n = 0, sumX = 0;
26
32
  for (let i = 0; i < data.length; i++) {
27
33
  const d = data[i];
@@ -59,6 +65,9 @@ function computeLinearCIComponents(data, x, y, predict) {
59
65
  };
60
66
  }
61
67
 
68
+ /**
69
+ * Compute standard errors for mean and prediction at px using components.
70
+ */
62
71
  function stdErrorsAt(px, comps) {
63
72
  const {n: n, X: X, Sxx: Sxx, SSE: SSE} = comps, s2 = n > 2 ? SSE / (n - 2) : 0;
64
73
  return {
@@ -67,9 +76,15 @@ function stdErrorsAt(px, comps) {
67
76
  };
68
77
  }
69
78
 
70
- exports.invNorm = invNorm, exports.computeLinearCIComponents = computeLinearCIComponents,
71
- exports.stdErrorsAt = stdErrorsAt, exports.default = {
72
- invNorm: invNorm,
79
+ Object.defineProperty(exports, "invNorm", {
80
+ enumerable: !0,
81
+ get: function() {
82
+ return normalQuantile_1.normalQuantile;
83
+ }
84
+ }), exports.confidenceCriticalValue = confidenceCriticalValue, exports.confidenceHalfWidth = confidenceHalfWidth,
85
+ exports.computeLinearCIComponents = computeLinearCIComponents, exports.stdErrorsAt = stdErrorsAt,
86
+ exports.default = {
87
+ invNorm: normalQuantile_1.normalQuantile,
73
88
  computeLinearCIComponents: computeLinearCIComponents,
74
89
  stdErrorsAt: stdErrorsAt
75
90
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/regression-utils.ts"],"names":[],"mappings":"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","file":"regression-utils.js","sourcesContent":["import isNil from './isNil';\n\n/**\n * Approximate inverse normal CDF (probit) using Acklam's algorithm.\n * Returns z such that P(Z <= z) = p for standard normal Z.\n */\nexport function invNorm(p: number) {\n if (p <= 0 || p >= 1) {\n return 0;\n }\n\n const a1 = -39.6968302866538;\n const a2 = 220.946098424521;\n const a3 = -275.928510446969;\n const a4 = 138.357751867269;\n const a5 = -30.6647980661472;\n const a6 = 2.50662827745924;\n\n const b1 = -54.4760987982241;\n const b2 = 161.585836858041;\n const b3 = -155.698979859887;\n const b4 = 66.8013118877197;\n const b5 = -13.2806815528857;\n\n const c1 = -0.00778489400243029;\n const c2 = -0.322396458041136;\n const c3 = -2.40075827716184;\n const c4 = -2.54973253934373;\n const c5 = 4.37466414146497;\n const c6 = 2.93816398269878;\n\n const d1 = 0.00778469570904146;\n const d2 = 0.32246712907004;\n const d3 = 2.445134137143;\n const d4 = 3.75440866190742;\n\n const pLow = 0.02425;\n const pHigh = 1 - pLow;\n\n let q: number;\n let r: number;\n\n if (p < pLow) {\n q = Math.sqrt(-2 * Math.log(p));\n return (((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) / ((((d1 * q + d2) * q + d3) * q + d4) * q + 1);\n }\n\n if (p <= pHigh) {\n q = p - 0.5;\n r = q * q;\n return (\n ((((((a1 * r + a2) * r + a3) * r + a4) * r + a5) * r + a6) * q) /\n (((((b1 * r + b2) * r + b3) * r + b4) * r + b5) * r + 1)\n );\n }\n\n q = Math.sqrt(-2 * Math.log(1 - p));\n return -((((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) / ((((d1 * q + d2) * q + d3) * q + d4) * q + 1));\n}\n\nexport interface LinearCIComponents {\n min: number;\n max: number;\n n: number;\n X: number; // mean of x\n SSE: number;\n Sxx: number;\n}\n\n/**\n * Compute basic components used for linear regression confidence / prediction intervals.\n * - scans data to compute min/max of x, n, mean X, SSE and Sxx (sum (xi - X)^2).\n */\nexport function computeLinearCIComponents(\n data: any[],\n x: (d: any) => number,\n y: (d: any) => number,\n predict: (x: number) => number\n): LinearCIComponents {\n // simple local scanner to avoid circular imports\n let min = Infinity;\n let max = -Infinity;\n let n = 0;\n let sumX = 0;\n\n for (let i = 0; i < data.length; i++) {\n const d = data[i];\n let dx = x(d);\n let dy = y(d);\n if (!isNil(dx) && (dx = +dx) >= dx && !isNil(dy) && (dy = +dy) >= dy) {\n if (dx < min) {\n min = dx;\n }\n if (dx > max) {\n max = dx;\n }\n n++;\n sumX += dx;\n }\n }\n\n if (n === 0) {\n return { min, max, n, X: 0, SSE: 0, Sxx: 0 };\n }\n\n const X = sumX / n;\n let SSE = 0;\n let Sxx = 0;\n for (let i = 0; i < data.length; i++) {\n const d = data[i];\n let dx = x(d);\n let dy = y(d);\n if (!isNil(dx) && (dx = +dx) >= dx && !isNil(dy) && (dy = +dy) >= dy) {\n const r = dy - predict(dx);\n SSE += r * r;\n const dxc = dx - X;\n Sxx += dxc * dxc;\n }\n }\n\n return { min, max, n, X, SSE, Sxx };\n}\n\n/**\n * Compute standard errors for mean and prediction at px using components.\n */\nexport function stdErrorsAt(px: number, comps: LinearCIComponents) {\n const { n, X, Sxx, SSE } = comps;\n const s2 = n > 2 ? SSE / (n - 2) : 0;\n const seMean = Sxx > 0 ? Math.sqrt(s2 * (1 / n + ((px - X) * (px - X)) / Sxx)) : Math.sqrt(s2 / n);\n const sePred = Math.sqrt(s2 * (1 + 1 / n + (Sxx > 0 ? ((px - X) * (px - X)) / Sxx : 0)));\n return { seMean, sePred };\n}\n\nexport default {\n invNorm,\n computeLinearCIComponents,\n stdErrorsAt\n};\n"]}
1
+ {"version":3,"sources":["../src/common/regression-utils.ts"],"names":[],"mappings":"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","file":"regression-utils.js","sourcesContent":["import isNil from './isNil';\nimport { normalQuantile as invNorm } from './normalQuantile';\nexport { invNorm };\n\n/** Compute a two-sided normal critical value without subtracting a small tail probability from one. */\nexport function confidenceCriticalValue(alpha: number): number {\n if (!Number.isFinite(alpha) || alpha < 0 || alpha > 1) {\n return NaN;\n }\n return -invNorm(alpha / 2);\n}\n\n/** A zero standard error gives a degenerate interval even when the critical value is infinite. */\nexport function confidenceHalfWidth(z: number, standardError: number): number {\n if (Number.isNaN(z)) {\n return NaN;\n }\n return standardError === 0 ? 0 : z * standardError;\n}\n\nexport interface LinearCIComponents {\n min: number;\n max: number;\n n: number;\n X: number; // mean of x\n SSE: number;\n Sxx: number;\n}\n\n/**\n * Compute basic components used for linear regression confidence / prediction intervals.\n * - scans data to compute min/max of x, n, mean X, SSE and Sxx (sum (xi - X)^2).\n */\nexport function computeLinearCIComponents(\n data: any[],\n x: (d: any) => number,\n y: (d: any) => number,\n predict: (x: number) => number\n): LinearCIComponents {\n // simple local scanner to avoid circular imports\n let min = Infinity;\n let max = -Infinity;\n let n = 0;\n let sumX = 0;\n\n for (let i = 0; i < data.length; i++) {\n const d = data[i];\n let dx = x(d);\n let dy = y(d);\n if (!isNil(dx) && (dx = +dx) >= dx && !isNil(dy) && (dy = +dy) >= dy) {\n if (dx < min) {\n min = dx;\n }\n if (dx > max) {\n max = dx;\n }\n n++;\n sumX += dx;\n }\n }\n\n if (n === 0) {\n return { min, max, n, X: 0, SSE: 0, Sxx: 0 };\n }\n\n const X = sumX / n;\n let SSE = 0;\n let Sxx = 0;\n for (let i = 0; i < data.length; i++) {\n const d = data[i];\n let dx = x(d);\n let dy = y(d);\n if (!isNil(dx) && (dx = +dx) >= dx && !isNil(dy) && (dy = +dy) >= dy) {\n const r = dy - predict(dx);\n SSE += r * r;\n const dxc = dx - X;\n Sxx += dxc * dxc;\n }\n }\n\n return { min, max, n, X, SSE, Sxx };\n}\n\n/**\n * Compute standard errors for mean and prediction at px using components.\n */\nexport function stdErrorsAt(px: number, comps: LinearCIComponents) {\n const { n, X, Sxx, SSE } = comps;\n const s2 = n > 2 ? SSE / (n - 2) : 0;\n const seMean = Sxx > 0 ? Math.sqrt(s2 * (1 / n + ((px - X) * (px - X)) / Sxx)) : Math.sqrt(s2 / n);\n const sePred = Math.sqrt(s2 * (1 + 1 / n + (Sxx > 0 ? ((px - X) * (px - X)) / Sxx : 0)));\n return { seMean, sePred };\n}\n\nexport default {\n invNorm,\n computeLinearCIComponents,\n stdErrorsAt\n};\n"]}
@@ -10,6 +10,9 @@ Object.defineProperty(exports, "__esModule", {
10
10
  value: !0
11
11
  });
12
12
 
13
+ /**
14
+ * @see https://github.com/lodash/lodash/blob/master/throttle.js
15
+ */
13
16
  const debounce_1 = __importDefault(require("./debounce")), isObject_1 = __importDefault(require("./isObject"));
14
17
 
15
18
  function throttle(func, wait, options) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/throttle.ts"],"names":[],"mappings":";;;;;AAGA,0DAAkC;AAClC,0DAAkC;AAElC,SAAS,QAAQ,CACf,IAAyB,EACzB,IAAY,EACZ,OAAmD;IAEnD,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,QAAQ,GAAG,IAAI,CAAC;IAEpB,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QAC9B,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;IACD,IAAI,IAAA,kBAAQ,EAAC,OAAO,CAAC,EAAE;QACrB,OAAO,GAAG,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7D,QAAQ,GAAG,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;KAClE;IACD,OAAO,IAAA,kBAAQ,EAAC,IAAI,EAAE,IAAI,EAAE;QAC1B,OAAO;QACP,QAAQ;QACR,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;AACL,CAAC;AAED,kBAAe,QAAQ,CAAC","file":"throttle.js","sourcesContent":["/**\n * @see https://github.com/lodash/lodash/blob/master/throttle.js\n */\nimport debounce from './debounce';\nimport isObject from './isObject';\n\nfunction throttle<T, S>(\n func: (...args: T[]) => S,\n wait: number,\n options?: { leading?: boolean; trailing?: boolean }\n): (...args: T[]) => S {\n let leading = true;\n let trailing = true;\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function');\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n leading,\n trailing,\n maxWait: wait\n });\n}\n\nexport default throttle;\n"]}
1
+ {"version":3,"sources":["../src/common/throttle.ts"],"names":[],"mappings":";;;;;AAAA;;GAEG;AACH,0DAAkC;AAClC,0DAAkC;AAElC,SAAS,QAAQ,CACf,IAAyB,EACzB,IAAY,EACZ,OAAmD;IAEnD,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,QAAQ,GAAG,IAAI,CAAC;IAEpB,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QAC9B,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;IACD,IAAI,IAAA,kBAAQ,EAAC,OAAO,CAAC,EAAE;QACrB,OAAO,GAAG,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7D,QAAQ,GAAG,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;KAClE;IACD,OAAO,IAAA,kBAAQ,EAAC,IAAI,EAAE,IAAI,EAAE;QAC1B,OAAO;QACP,QAAQ;QACR,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;AACL,CAAC;AAED,kBAAe,QAAQ,CAAC","file":"throttle.js","sourcesContent":["/**\n * @see https://github.com/lodash/lodash/blob/master/throttle.js\n */\nimport debounce from './debounce';\nimport isObject from './isObject';\n\nfunction throttle<T, S>(\n func: (...args: T[]) => S,\n wait: number,\n options?: { leading?: boolean; trailing?: boolean }\n): (...args: T[]) => S {\n let leading = true;\n let trailing = true;\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function');\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n leading,\n trailing,\n maxWait: wait\n });\n}\n\nexport default throttle;\n"]}
@@ -12,13 +12,32 @@ Object.defineProperty(exports, "__esModule", {
12
12
 
13
13
  const isNil_1 = __importDefault(require("./isNil")), isString_1 = __importDefault(require("./isString")), 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)?)?)?)?)?$/;
14
14
 
15
+ // eslint-disable-line
15
16
  function toDate(val) {
16
17
  if (val instanceof Date) return val;
17
18
  if ((0, isString_1.default)(val)) {
19
+ // Different browsers parse date in different way, so we parse it manually.
20
+ // Some other issues:
21
+ // new Date('1970-01-01') is UTC,
22
+ // new Date('1970/01/01') and new Date('1970-1-01') is local.
23
+ // See issue #3623
18
24
  const match = TIME_REG.exec(val);
19
- if (!match) return new Date(NaN);
20
- if (!match[8]) 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);
21
- let hour = +match[4] || 0;
25
+ if (!match)
26
+ // return Invalid Date.
27
+ return new Date(NaN);
28
+ // Use local time when no timezone offset specifed.
29
+ if (!match[8])
30
+ // match[n] can only be string or undefined.
31
+ // But take care of '12' + 1 => '121'.
32
+ 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);
33
+ // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time,
34
+ // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment).
35
+ // For example, system timezone is set as "Time Zone: America/Toronto",
36
+ // then these code will get different result:
37
+ // `new Date(1478411999999).getTimezoneOffset(); // get 240`
38
+ // `new Date(1478412000000).getTimezoneOffset(); // get 300`
39
+ // So we should not use `new Date`, but use `Date.UTC`.
40
+ let hour = +match[4] || 0;
22
41
  return "Z" !== match[8].toUpperCase() && (hour -= +match[8].slice(0, 3)), 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));
23
42
  }
24
43
  return (0, isNil_1.default)(val) ? new Date(NaN) : new Date(Math.round(val));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/toDate.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,0DAAkC;AAKlC,MAAM,QAAQ,GACZ,yIAAyI,CAAC;AAE5I,SAAgB,MAAM,CAAC,GAAiB;IACtC,IAAI,GAAG,YAAY,IAAI,EAAE;QACvB,OAAO,GAAG,CAAC;KACZ;SAAM,IAAI,IAAA,kBAAQ,EAAC,GAAG,CAAC,EAAE;QAMxB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEjC,IAAI,CAAC,KAAK,EAAE;YAEV,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;SACtB;QAGD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YAGb,OAAO,IAAI,IAAI,CACb,CAAC,KAAK,CAAC,CAAC,CAAC,EACT,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EACpB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAChB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACzC,CAAC;SACH;QASD,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE;YAClC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC/B;QACD,OAAO,IAAI,IAAI,CACb,IAAI,CAAC,GAAG,CACN,CAAC,KAAK,CAAC,CAAC,CAAC,EACT,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EACpB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,IAAI,EACJ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAChB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACzC,CACF,CAAC;KACH;SAAM,IAAI,IAAA,eAAK,EAAC,GAAG,CAAC,EAAE;QACrB,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;KACtB;IAED,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAa,CAAC,CAAC,CAAC;AAC7C,CAAC;AA1DD,wBA0DC","file":"toDate.js","sourcesContent":["import isNil from './isNil';\nimport isString from './isString';\n\nexport type DateLikeType = number | string | Date;\n\n// eslint-disable-next-line no-useless-escape\nconst TIME_REG =\n /^(?:(\\d{4})(?:[-\\/](\\d{1,2})(?:[-\\/](\\d{1,2})(?:[T ](\\d{1,2})(?::(\\d{1,2})(?::(\\d{1,2})(?:[.,](\\d+))?)?)?(Z|[\\+\\-]\\d\\d:?\\d\\d)?)?)?)?)?$/; // eslint-disable-line\n\nexport function toDate(val: DateLikeType): Date {\n if (val instanceof Date) {\n return val;\n } else if (isString(val)) {\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 const match = TIME_REG.exec(val);\n\n if (!match) {\n // return Invalid Date.\n return new Date(NaN);\n }\n\n // Use local time when no timezone offset specifed.\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(\n +match[1],\n +(match[2] || 1) - 1,\n +match[3] || 1,\n +match[4] || 0,\n +(match[5] || 0),\n +match[6] || 0,\n match[7] ? +match[7].substring(0, 3) : 0\n );\n }\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\n let hour = +match[4] || 0;\n if (match[8].toUpperCase() !== 'Z') {\n hour -= +match[8].slice(0, 3);\n }\n return new Date(\n Date.UTC(\n +match[1],\n +(match[2] || 1) - 1,\n +match[3] || 1,\n hour,\n +(match[5] || 0),\n +match[6] || 0,\n match[7] ? +match[7].substring(0, 3) : 0\n )\n );\n } else if (isNil(val)) {\n return new Date(NaN);\n }\n\n return new Date(Math.round(val as number));\n}\n"]}
1
+ {"version":3,"sources":["../src/common/toDate.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,0DAAkC;AAIlC,6CAA6C;AAC7C,MAAM,QAAQ,GACZ,yIAAyI,CAAC,CAAC,sBAAsB;AAEnK,SAAgB,MAAM,CAAC,GAAiB;IACtC,IAAI,GAAG,YAAY,IAAI,EAAE;QACvB,OAAO,GAAG,CAAC;KACZ;SAAM,IAAI,IAAA,kBAAQ,EAAC,GAAG,CAAC,EAAE;QACxB,2EAA2E;QAC3E,qBAAqB;QACrB,iCAAiC;QACjC,6DAA6D;QAC7D,kBAAkB;QAClB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEjC,IAAI,CAAC,KAAK,EAAE;YACV,uBAAuB;YACvB,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;SACtB;QAED,mDAAmD;QACnD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACb,4CAA4C;YAC5C,sCAAsC;YACtC,OAAO,IAAI,IAAI,CACb,CAAC,KAAK,CAAC,CAAC,CAAC,EACT,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EACpB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAChB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACzC,CAAC;SACH;QACD,8EAA8E;QAC9E,wEAAwE;QACxE,uEAAuE;QACvE,6CAA6C;QAC7C,6DAA6D;QAC7D,6DAA6D;QAC7D,uDAAuD;QAEvD,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE;YAClC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC/B;QACD,OAAO,IAAI,IAAI,CACb,IAAI,CAAC,GAAG,CACN,CAAC,KAAK,CAAC,CAAC,CAAC,EACT,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EACpB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,IAAI,EACJ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAChB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACzC,CACF,CAAC;KACH;SAAM,IAAI,IAAA,eAAK,EAAC,GAAG,CAAC,EAAE;QACrB,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;KACtB;IAED,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAa,CAAC,CAAC,CAAC;AAC7C,CAAC;AA1DD,wBA0DC","file":"toDate.js","sourcesContent":["import isNil from './isNil';\nimport isString from './isString';\n\nexport type DateLikeType = number | string | Date;\n\n// eslint-disable-next-line no-useless-escape\nconst TIME_REG =\n /^(?:(\\d{4})(?:[-\\/](\\d{1,2})(?:[-\\/](\\d{1,2})(?:[T ](\\d{1,2})(?::(\\d{1,2})(?::(\\d{1,2})(?:[.,](\\d+))?)?)?(Z|[\\+\\-]\\d\\d:?\\d\\d)?)?)?)?)?$/; // eslint-disable-line\n\nexport function toDate(val: DateLikeType): Date {\n if (val instanceof Date) {\n return val;\n } else if (isString(val)) {\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 const match = TIME_REG.exec(val);\n\n if (!match) {\n // return Invalid Date.\n return new Date(NaN);\n }\n\n // Use local time when no timezone offset specifed.\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(\n +match[1],\n +(match[2] || 1) - 1,\n +match[3] || 1,\n +match[4] || 0,\n +(match[5] || 0),\n +match[6] || 0,\n match[7] ? +match[7].substring(0, 3) : 0\n );\n }\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\n let hour = +match[4] || 0;\n if (match[8].toUpperCase() !== 'Z') {\n hour -= +match[8].slice(0, 3);\n }\n return new Date(\n Date.UTC(\n +match[1],\n +(match[2] || 1) - 1,\n +match[3] || 1,\n hour,\n +(match[5] || 0),\n +match[6] || 0,\n match[7] ? +match[7].substring(0, 3) : 0\n )\n );\n } else if (isNil(val)) {\n return new Date(NaN);\n }\n\n return new Date(Math.round(val as number));\n}\n"]}
@@ -1,2 +1,9 @@
1
+ /**
2
+ * 生成uuid字符串.
3
+ * 参考https://github.com/yangjunning/issues/issues/56
4
+ * @param len
5
+ * @param radix
6
+ * @returns
7
+ */
1
8
  declare const uuid: (len: number, radix: number) => string;
2
9
  export default uuid;
@@ -4,11 +4,25 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  });
6
6
 
7
+ // TODO: 性能不是很好,需要优化,后续升级到最新版本的 canvas 之后就可以删除了
8
+ /**
9
+ * 生成uuid字符串.
10
+ * 参考https://github.com/yangjunning/issues/issues/56
11
+ * @param len
12
+ * @param radix
13
+ * @returns
14
+ */
7
15
  const uuid = (len, radix) => {
8
16
  const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), uuid = [];
9
17
  let i;
10
- if (radix = radix || chars.length, len) for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]; else {
18
+ if (radix = radix || chars.length, len)
19
+ // Compact form
20
+ for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]; else {
21
+ // rfc4122, version 4 form
11
22
  let r;
23
+ // rfc4122 requires these characters
24
+ // Fill in random data. At i==19 set the high bits of clock sequence as
25
+ // per rfc4122, sec. 4.1.5
12
26
  for (uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-", uuid[14] = "4", i = 0; i < 36; i++) uuid[i] || (r = 0 | 16 * Math.random(),
13
27
  uuid[i] = chars[19 === i ? 3 & r | 8 : r]);
14
28
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/uuid.ts"],"names":[],"mappings":";;AAQA,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,KAAa,EAAU,EAAE;IAClD,MAAM,KAAK,GAAG,gEAAgE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzF,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,CAAC;IACN,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;IAE9B,IAAI,GAAG,EAAE;QAEP,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YACxB,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;SAC9C;KACF;SAAM;QAEL,IAAI,CAAC,CAAC;QAGN,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;QAC/C,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;QAIf,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBACZ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC7B,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACjD;SACF;KACF;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,kBAAe,IAAI,CAAC","file":"uuid.js","sourcesContent":["// TODO: 性能不是很好,需要优化,后续升级到最新版本的 canvas 之后就可以删除了\n/**\n * 生成uuid字符串.\n * 参考https://github.com/yangjunning/issues/issues/56\n * @param len\n * @param radix\n * @returns\n */\nconst uuid = (len: number, radix: number): string => {\n const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');\n const uuid = [];\n let i;\n radix = radix || chars.length;\n\n if (len) {\n // Compact form\n for (i = 0; i < len; i++) {\n uuid[i] = chars[0 | (Math.random() * radix)];\n }\n } else {\n // rfc4122, version 4 form\n let r;\n\n // rfc4122 requires these characters\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\n uuid[14] = '4';\n\n // Fill in random data. At i==19 set the high bits of clock sequence as\n // per rfc4122, sec. 4.1.5\n for (i = 0; i < 36; i++) {\n if (!uuid[i]) {\n r = 0 | (Math.random() * 16);\n uuid[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r];\n }\n }\n }\n\n return uuid.join('');\n};\n\nexport default uuid;\n"]}
1
+ {"version":3,"sources":["../src/common/uuid.ts"],"names":[],"mappings":";;AAAA,+CAA+C;AAC/C;;;;;;GAMG;AACH,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,KAAa,EAAU,EAAE;IAClD,MAAM,KAAK,GAAG,gEAAgE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzF,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,CAAC;IACN,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;IAE9B,IAAI,GAAG,EAAE;QACP,eAAe;QACf,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YACxB,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;SAC9C;KACF;SAAM;QACL,0BAA0B;QAC1B,IAAI,CAAC,CAAC;QAEN,oCAAoC;QACpC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;QAC/C,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;QAEf,wEAAwE;QACxE,0BAA0B;QAC1B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBACZ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC7B,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACjD;SACF;KACF;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,kBAAe,IAAI,CAAC","file":"uuid.js","sourcesContent":["// TODO: 性能不是很好,需要优化,后续升级到最新版本的 canvas 之后就可以删除了\n/**\n * 生成uuid字符串.\n * 参考https://github.com/yangjunning/issues/issues/56\n * @param len\n * @param radix\n * @returns\n */\nconst uuid = (len: number, radix: number): string => {\n const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');\n const uuid = [];\n let i;\n radix = radix || chars.length;\n\n if (len) {\n // Compact form\n for (i = 0; i < len; i++) {\n uuid[i] = chars[0 | (Math.random() * radix)];\n }\n } else {\n // rfc4122, version 4 form\n let r;\n\n // rfc4122 requires these characters\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\n uuid[14] = '4';\n\n // Fill in random data. At i==19 set the high bits of clock sequence as\n // per rfc4122, sec. 4.1.5\n for (i = 0; i < 36; i++) {\n if (!uuid[i]) {\n r = 0 | (Math.random() * 16);\n uuid[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r];\n }\n }\n }\n\n return uuid.join('');\n};\n\nexport default uuid;\n"]}
@@ -20,11 +20,42 @@ export interface IBounds {
20
20
  translate: (dx: number, dy: number) => IBounds;
21
21
  rotate: (angle: number, x: number, y: number) => IBounds;
22
22
  scale: (sx: number, sy: number, x: number, y: number) => IBounds;
23
+ /**
24
+ * 并集
25
+ * @param b
26
+ * @returns
27
+ */
23
28
  union: (b: IBoundsLike) => IBounds;
29
+ /**
30
+ * 交集
31
+ * @param b
32
+ * @returns
33
+ */
24
34
  intersect: (b: IBoundsLike) => IBounds;
35
+ /**
36
+ * 是否包含b
37
+ * @param b
38
+ * @returns
39
+ */
25
40
  encloses: (b: IBoundsLike) => boolean;
41
+ /**
42
+ * 是否共边
43
+ * @param b
44
+ * @returns
45
+ */
26
46
  alignsWith: (b: IBoundsLike) => boolean;
47
+ /**
48
+ * 是否相交
49
+ * @param b
50
+ * @returns
51
+ */
27
52
  intersects: (b: IBoundsLike) => boolean;
53
+ /**
54
+ * 是否包含
55
+ * @param x
56
+ * @param y
57
+ * @returns
58
+ */
28
59
  contains: (x: number, y: number) => boolean;
29
60
  containsPoint: (p: IPointLike) => boolean;
30
61
  width: () => number;
@@ -40,7 +71,46 @@ export interface IOBBBounds extends IBounds {
40
71
  getRotatedCorners: () => IPointLike[];
41
72
  }
42
73
  export declare function transformBoundsWithMatrix(out: IBounds, bounds: IBounds, matrix: IMatrix): IBounds;
74
+ /**
75
+ * 依据graphic的属性对bounds进行变换
76
+ * @param bounds
77
+ * @param x
78
+ * @param y
79
+ * @param scaleX
80
+ * @param scaleY
81
+ * @param angle
82
+ * @param rotateCenter
83
+ */
43
84
  export declare function transformBounds(bounds: IBounds, x: number, y: number, scaleX: number, scaleY: number, angle: number, rotateCenter?: [number, number]): void;
85
+ /**
86
+ Copyright (c) 2015-2021, University of Washington Interactive Data Lab
87
+ All rights reserved.
88
+
89
+ Redistribution and use in source and binary forms, with or without
90
+ modification, are permitted provided that the following conditions are met:
91
+
92
+ 1. Redistributions of source code must retain the above copyright notice, this
93
+ list of conditions and the following disclaimer.
94
+
95
+ 2. Redistributions in binary form must reproduce the above copyright notice,
96
+ this list of conditions and the following disclaimer in the documentation
97
+ and/or other materials provided with the distribution.
98
+
99
+ 3. Neither the name of the copyright holder nor the names of its contributors
100
+ may be used to endorse or promote products derived from this software
101
+ without specific prior written permission.
102
+
103
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
104
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
105
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
106
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
107
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
108
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
109
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
110
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
111
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
112
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
113
+ */
44
114
  export declare class Bounds implements IBounds {
45
115
  x1: number;
46
116
  y1: number;
@@ -59,11 +129,42 @@ export declare class Bounds implements IBounds {
59
129
  translate(dx?: number, dy?: number): Bounds;
60
130
  rotate(angle?: number, x?: number, y?: number): Bounds;
61
131
  scale(sx?: number, sy?: number, x?: number, y?: number): Bounds;
132
+ /**
133
+ * 并集
134
+ * @param b
135
+ * @returns
136
+ */
62
137
  union(b: IBoundsLike): Bounds;
138
+ /**
139
+ * 交集
140
+ * @param b
141
+ * @returns
142
+ */
63
143
  intersect(b: IBoundsLike): Bounds;
144
+ /**
145
+ * 是否包含b
146
+ * @param b
147
+ * @returns
148
+ */
64
149
  encloses(b: IBoundsLike): boolean;
150
+ /**
151
+ * 是否共边
152
+ * @param b
153
+ * @returns
154
+ */
65
155
  alignsWith(b: IBoundsLike): boolean;
156
+ /**
157
+ * 是否相交
158
+ * @param b
159
+ * @returns
160
+ */
66
161
  intersects(b: IBoundsLike): boolean;
162
+ /**
163
+ * 是否包含
164
+ * @param x
165
+ * @param y
166
+ * @returns
167
+ */
67
168
  contains(x?: number, y?: number): boolean;
68
169
  containsPoint(p: IPointLike): boolean;
69
170
  width(): number;