@visactor/vutils 0.9.0-alpha.0

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 (611) hide show
  1. package/README.md +34 -0
  2. package/README.zh-CN.md +0 -0
  3. package/cjs/angle.d.ts +12 -0
  4. package/cjs/angle.js +40 -0
  5. package/cjs/angle.js.map +1 -0
  6. package/cjs/color/Color.d.ts +181 -0
  7. package/cjs/color/Color.js +298 -0
  8. package/cjs/color/Color.js.map +1 -0
  9. package/cjs/color/hexToRgb.d.ts +1 -0
  10. package/cjs/color/hexToRgb.js +13 -0
  11. package/cjs/color/hexToRgb.js.map +1 -0
  12. package/cjs/color/hslToRgb.d.ts +5 -0
  13. package/cjs/color/hslToRgb.js +21 -0
  14. package/cjs/color/hslToRgb.js.map +1 -0
  15. package/cjs/color/index.d.ts +6 -0
  16. package/cjs/color/index.js +80 -0
  17. package/cjs/color/index.js.map +1 -0
  18. package/cjs/color/interpolate.d.ts +2 -0
  19. package/cjs/color/interpolate.js +18 -0
  20. package/cjs/color/interpolate.js.map +1 -0
  21. package/cjs/color/rgbToHex.d.ts +1 -0
  22. package/cjs/color/rgbToHex.js +10 -0
  23. package/cjs/color/rgbToHex.js.map +1 -0
  24. package/cjs/color/rgbToHsl.d.ts +5 -0
  25. package/cjs/color/rgbToHsl.js +19 -0
  26. package/cjs/color/rgbToHsl.js.map +1 -0
  27. package/cjs/common/array.d.ts +9 -0
  28. package/cjs/common/array.js +64 -0
  29. package/cjs/common/array.js.map +1 -0
  30. package/cjs/common/ascending.d.ts +1 -0
  31. package/cjs/common/ascending.js +10 -0
  32. package/cjs/common/ascending.js.map +1 -0
  33. package/cjs/common/bisect.d.ts +1 -0
  34. package/cjs/common/bisect.js +24 -0
  35. package/cjs/common/bisect.js.map +1 -0
  36. package/cjs/common/clamp.d.ts +2 -0
  37. package/cjs/common/clamp.js +12 -0
  38. package/cjs/common/clamp.js.map +1 -0
  39. package/cjs/common/clampRange.d.ts +2 -0
  40. package/cjs/common/clampRange.js +16 -0
  41. package/cjs/common/clampRange.js.map +1 -0
  42. package/cjs/common/clamper.d.ts +1 -0
  43. package/cjs/common/clamper.js +11 -0
  44. package/cjs/common/clamper.js.map +1 -0
  45. package/cjs/common/clone.d.ts +1 -0
  46. package/cjs/common/clone.js +42 -0
  47. package/cjs/common/clone.js.map +1 -0
  48. package/cjs/common/cloneDeep.d.ts +1 -0
  49. package/cjs/common/cloneDeep.js +31 -0
  50. package/cjs/common/cloneDeep.js.map +1 -0
  51. package/cjs/common/constant.d.ts +2 -0
  52. package/cjs/common/constant.js +17 -0
  53. package/cjs/common/constant.js.map +1 -0
  54. package/cjs/common/debounce.d.ts +7 -0
  55. package/cjs/common/debounce.js +76 -0
  56. package/cjs/common/debounce.js.map +1 -0
  57. package/cjs/common/deviation.d.ts +1 -0
  58. package/cjs/common/deviation.js +15 -0
  59. package/cjs/common/deviation.js.map +1 -0
  60. package/cjs/common/get.d.ts +3 -0
  61. package/cjs/common/get.js +20 -0
  62. package/cjs/common/get.js.map +1 -0
  63. package/cjs/common/getType.d.ts +2 -0
  64. package/cjs/common/getType.js +9 -0
  65. package/cjs/common/getType.js.map +1 -0
  66. package/cjs/common/has.d.ts +3 -0
  67. package/cjs/common/has.js +10 -0
  68. package/cjs/common/has.js.map +1 -0
  69. package/cjs/common/index.d.ts +56 -0
  70. package/cjs/common/index.js +485 -0
  71. package/cjs/common/index.js.map +1 -0
  72. package/cjs/common/interpolate.d.ts +4 -0
  73. package/cjs/common/interpolate.js +55 -0
  74. package/cjs/common/interpolate.js.map +1 -0
  75. package/cjs/common/isArray.d.ts +2 -0
  76. package/cjs/common/isArray.js +17 -0
  77. package/cjs/common/isArray.js.map +1 -0
  78. package/cjs/common/isArrayLike.d.ts +2 -0
  79. package/cjs/common/isArrayLike.js +12 -0
  80. package/cjs/common/isArrayLike.js.map +1 -0
  81. package/cjs/common/isBase64.d.ts +2 -0
  82. package/cjs/common/isBase64.js +10 -0
  83. package/cjs/common/isBase64.js.map +1 -0
  84. package/cjs/common/isBoolean.d.ts +2 -0
  85. package/cjs/common/isBoolean.js +17 -0
  86. package/cjs/common/isBoolean.js.map +1 -0
  87. package/cjs/common/isDate.d.ts +2 -0
  88. package/cjs/common/isDate.js +16 -0
  89. package/cjs/common/isDate.js.map +1 -0
  90. package/cjs/common/isEmpty.d.ts +2 -0
  91. package/cjs/common/isEmpty.js +26 -0
  92. package/cjs/common/isEmpty.js.map +1 -0
  93. package/cjs/common/isEqual.d.ts +1 -0
  94. package/cjs/common/isEqual.js +49 -0
  95. package/cjs/common/isEqual.js.map +1 -0
  96. package/cjs/common/isFunction.d.ts +2 -0
  97. package/cjs/common/isFunction.js +10 -0
  98. package/cjs/common/isFunction.js.map +1 -0
  99. package/cjs/common/isNil.d.ts +2 -0
  100. package/cjs/common/isNil.js +10 -0
  101. package/cjs/common/isNil.js.map +1 -0
  102. package/cjs/common/isNull.d.ts +2 -0
  103. package/cjs/common/isNull.js +10 -0
  104. package/cjs/common/isNull.js.map +1 -0
  105. package/cjs/common/isNumber.d.ts +2 -0
  106. package/cjs/common/isNumber.js +19 -0
  107. package/cjs/common/isNumber.js.map +1 -0
  108. package/cjs/common/isNumeric.d.ts +2 -0
  109. package/cjs/common/isNumeric.js +10 -0
  110. package/cjs/common/isNumeric.js.map +1 -0
  111. package/cjs/common/isObject.d.ts +2 -0
  112. package/cjs/common/isObject.js +12 -0
  113. package/cjs/common/isObject.js.map +1 -0
  114. package/cjs/common/isObjectLike.d.ts +2 -0
  115. package/cjs/common/isObjectLike.js +10 -0
  116. package/cjs/common/isObjectLike.js.map +1 -0
  117. package/cjs/common/isPlainObject.d.ts +2 -0
  118. package/cjs/common/isPlainObject.js +22 -0
  119. package/cjs/common/isPlainObject.js.map +1 -0
  120. package/cjs/common/isPrototype.d.ts +2 -0
  121. package/cjs/common/isPrototype.js +13 -0
  122. package/cjs/common/isPrototype.js.map +1 -0
  123. package/cjs/common/isRegExp.d.ts +2 -0
  124. package/cjs/common/isRegExp.js +16 -0
  125. package/cjs/common/isRegExp.js.map +1 -0
  126. package/cjs/common/isShallowEqual.d.ts +1 -0
  127. package/cjs/common/isShallowEqual.js +34 -0
  128. package/cjs/common/isShallowEqual.js.map +1 -0
  129. package/cjs/common/isString.d.ts +2 -0
  130. package/cjs/common/isString.js +19 -0
  131. package/cjs/common/isString.js.map +1 -0
  132. package/cjs/common/isType.d.ts +2 -0
  133. package/cjs/common/isType.js +10 -0
  134. package/cjs/common/isType.js.map +1 -0
  135. package/cjs/common/isUndefined.d.ts +2 -0
  136. package/cjs/common/isUndefined.js +10 -0
  137. package/cjs/common/isUndefined.js.map +1 -0
  138. package/cjs/common/isValid.d.ts +2 -0
  139. package/cjs/common/isValid.js +10 -0
  140. package/cjs/common/isValid.js.map +1 -0
  141. package/cjs/common/isValidNumber.d.ts +2 -0
  142. package/cjs/common/isValidNumber.js +17 -0
  143. package/cjs/common/isValidNumber.js.map +1 -0
  144. package/cjs/common/isValidUrl.d.ts +2 -0
  145. package/cjs/common/isValidUrl.js +10 -0
  146. package/cjs/common/isValidUrl.js.map +1 -0
  147. package/cjs/common/lowerFirst.d.ts +2 -0
  148. package/cjs/common/lowerFirst.js +12 -0
  149. package/cjs/common/lowerFirst.js.map +1 -0
  150. package/cjs/common/median.d.ts +1 -0
  151. package/cjs/common/median.js +13 -0
  152. package/cjs/common/median.js.map +1 -0
  153. package/cjs/common/merge.d.ts +1 -0
  154. package/cjs/common/merge.js +63 -0
  155. package/cjs/common/merge.js.map +1 -0
  156. package/cjs/common/mixin.d.ts +5 -0
  157. package/cjs/common/mixin.js +35 -0
  158. package/cjs/common/mixin.js.map +1 -0
  159. package/cjs/common/number.d.ts +3 -0
  160. package/cjs/common/number.js +23 -0
  161. package/cjs/common/number.js.map +1 -0
  162. package/cjs/common/pad.d.ts +2 -0
  163. package/cjs/common/pad.js +17 -0
  164. package/cjs/common/pad.js.map +1 -0
  165. package/cjs/common/pick.d.ts +1 -0
  166. package/cjs/common/pick.js +24 -0
  167. package/cjs/common/pick.js.map +1 -0
  168. package/cjs/common/pickWithout.d.ts +1 -0
  169. package/cjs/common/pickWithout.js +28 -0
  170. package/cjs/common/pickWithout.js.map +1 -0
  171. package/cjs/common/quantileSorted.d.ts +1 -0
  172. package/cjs/common/quantileSorted.js +19 -0
  173. package/cjs/common/quantileSorted.js.map +1 -0
  174. package/cjs/common/range.d.ts +1 -0
  175. package/cjs/common/range.js +24 -0
  176. package/cjs/common/range.js.map +1 -0
  177. package/cjs/common/throttle.d.ts +5 -0
  178. package/cjs/common/throttle.js +27 -0
  179. package/cjs/common/throttle.js.map +1 -0
  180. package/cjs/common/tickStep.d.ts +1 -0
  181. package/cjs/common/tickStep.js +18 -0
  182. package/cjs/common/tickStep.js.map +1 -0
  183. package/cjs/common/toDate.d.ts +2 -0
  184. package/cjs/common/toDate.js +28 -0
  185. package/cjs/common/toDate.js.map +1 -0
  186. package/cjs/common/toNumber.d.ts +1 -0
  187. package/cjs/common/toNumber.js +10 -0
  188. package/cjs/common/toNumber.js.map +1 -0
  189. package/cjs/common/toValidNumber.d.ts +1 -0
  190. package/cjs/common/toValidNumber.js +22 -0
  191. package/cjs/common/toValidNumber.js.map +1 -0
  192. package/cjs/common/truncate.d.ts +2 -0
  193. package/cjs/common/truncate.js +19 -0
  194. package/cjs/common/truncate.js.map +1 -0
  195. package/cjs/common/upperFirst.d.ts +2 -0
  196. package/cjs/common/upperFirst.js +12 -0
  197. package/cjs/common/upperFirst.js.map +1 -0
  198. package/cjs/common/uuid.d.ts +2 -0
  199. package/cjs/common/uuid.js +19 -0
  200. package/cjs/common/uuid.js.map +1 -0
  201. package/cjs/common/variance.d.ts +1 -0
  202. package/cjs/common/variance.js +17 -0
  203. package/cjs/common/variance.js.map +1 -0
  204. package/cjs/data-structure/bounds.d.ts +81 -0
  205. package/cjs/data-structure/bounds.js +139 -0
  206. package/cjs/data-structure/bounds.js.map +1 -0
  207. package/cjs/data-structure/hashTable.d.ts +35 -0
  208. package/cjs/data-structure/hashTable.js +114 -0
  209. package/cjs/data-structure/hashTable.js.map +1 -0
  210. package/cjs/data-structure/index.d.ts +4 -0
  211. package/cjs/data-structure/index.js +22 -0
  212. package/cjs/data-structure/index.js.map +1 -0
  213. package/cjs/data-structure/matrix.d.ts +80 -0
  214. package/cjs/data-structure/matrix.js +113 -0
  215. package/cjs/data-structure/matrix.js.map +1 -0
  216. package/cjs/data-structure/point.d.ts +62 -0
  217. package/cjs/data-structure/point.js +81 -0
  218. package/cjs/data-structure/point.js.map +1 -0
  219. package/cjs/dom.d.ts +10 -0
  220. package/cjs/dom.js +86 -0
  221. package/cjs/dom.js.map +1 -0
  222. package/cjs/geo/index.d.ts +2 -0
  223. package/cjs/geo/index.js +21 -0
  224. package/cjs/geo/index.js.map +1 -0
  225. package/cjs/geo/interface.d.ts +1 -0
  226. package/cjs/geo/interface.js +6 -0
  227. package/cjs/geo/interface.js.map +1 -0
  228. package/cjs/geo/invariant.d.ts +9 -0
  229. package/cjs/geo/invariant.js +45 -0
  230. package/cjs/geo/invariant.js.map +1 -0
  231. package/cjs/graphics/algorithm/aabb.d.ts +6 -0
  232. package/cjs/graphics/algorithm/aabb.js +58 -0
  233. package/cjs/graphics/algorithm/aabb.js.map +1 -0
  234. package/cjs/graphics/algorithm/index.d.ts +3 -0
  235. package/cjs/graphics/algorithm/index.js +22 -0
  236. package/cjs/graphics/algorithm/index.js.map +1 -0
  237. package/cjs/graphics/algorithm/interface.d.ts +20 -0
  238. package/cjs/graphics/algorithm/interface.js +6 -0
  239. package/cjs/graphics/algorithm/interface.js.map +1 -0
  240. package/cjs/graphics/algorithm/intersect.d.ts +25 -0
  241. package/cjs/graphics/algorithm/intersect.js +143 -0
  242. package/cjs/graphics/algorithm/intersect.js.map +1 -0
  243. package/cjs/graphics/algorithm/obb.d.ts +5 -0
  244. package/cjs/graphics/algorithm/obb.js +80 -0
  245. package/cjs/graphics/algorithm/obb.js.map +1 -0
  246. package/cjs/graphics/graph-util.d.ts +23 -0
  247. package/cjs/graphics/graph-util.js +47 -0
  248. package/cjs/graphics/graph-util.js.map +1 -0
  249. package/cjs/graphics/image.d.ts +2 -0
  250. package/cjs/graphics/image.js +18 -0
  251. package/cjs/graphics/image.js.map +1 -0
  252. package/cjs/graphics/index.d.ts +5 -0
  253. package/cjs/graphics/index.js +23 -0
  254. package/cjs/graphics/index.js.map +1 -0
  255. package/cjs/graphics/polygon.d.ts +5 -0
  256. package/cjs/graphics/polygon.js +54 -0
  257. package/cjs/graphics/polygon.js.map +1 -0
  258. package/cjs/graphics/text/index.d.ts +2 -0
  259. package/cjs/graphics/text/index.js +39 -0
  260. package/cjs/graphics/text/index.js.map +1 -0
  261. package/cjs/graphics/text/measure/index.d.ts +4 -0
  262. package/cjs/graphics/text/measure/index.js +22 -0
  263. package/cjs/graphics/text/measure/index.js.map +1 -0
  264. package/cjs/graphics/text/measure/interface.d.ts +31 -0
  265. package/cjs/graphics/text/measure/interface.js +6 -0
  266. package/cjs/graphics/text/measure/interface.js.map +1 -0
  267. package/cjs/graphics/text/measure/test.d.ts +14 -0
  268. package/cjs/graphics/text/measure/test.js +67 -0
  269. package/cjs/graphics/text/measure/test.js.map +1 -0
  270. package/cjs/graphics/text/measure/textMeasure.d.ts +38 -0
  271. package/cjs/graphics/text/measure/textMeasure.js +183 -0
  272. package/cjs/graphics/text/measure/textMeasure.js.map +1 -0
  273. package/cjs/graphics/text/measure/util.d.ts +2 -0
  274. package/cjs/graphics/text/measure/util.js +11 -0
  275. package/cjs/graphics/text/measure/util.js.map +1 -0
  276. package/cjs/graphics/text/stringWidth.d.ts +2 -0
  277. package/cjs/graphics/text/stringWidth.js +49 -0
  278. package/cjs/graphics/text/stringWidth.js.map +1 -0
  279. package/cjs/index.d.ts +15 -0
  280. package/cjs/index.js +47 -0
  281. package/cjs/index.js.map +1 -0
  282. package/cjs/logger.d.ts +12 -0
  283. package/cjs/logger.js +36 -0
  284. package/cjs/logger.js.map +1 -0
  285. package/cjs/lru.d.ts +25 -0
  286. package/cjs/lru.js +43 -0
  287. package/cjs/lru.js.map +1 -0
  288. package/cjs/math.d.ts +66 -0
  289. package/cjs/math.js +57 -0
  290. package/cjs/math.js.map +1 -0
  291. package/cjs/padding.d.ts +7 -0
  292. package/cjs/padding.js +41 -0
  293. package/cjs/padding.js.map +1 -0
  294. package/cjs/time/formatUtils.d.ts +17 -0
  295. package/cjs/time/formatUtils.js +95 -0
  296. package/cjs/time/formatUtils.js.map +1 -0
  297. package/cjs/time/index.d.ts +2 -0
  298. package/cjs/time/index.js +21 -0
  299. package/cjs/time/index.js.map +1 -0
  300. package/cjs/time/interval.d.ts +77 -0
  301. package/cjs/time/interval.js +324 -0
  302. package/cjs/time/interval.js.map +1 -0
  303. package/cjs/type.d.ts +5 -0
  304. package/cjs/type.js +6 -0
  305. package/cjs/type.js.map +1 -0
  306. package/dist/visactor_vutils.js +1 -0
  307. package/dist/visactor_vutils.min.js +1 -0
  308. package/es/angle.d.ts +12 -0
  309. package/es/angle.js +31 -0
  310. package/es/angle.js.map +1 -0
  311. package/es/color/Color.d.ts +181 -0
  312. package/es/color/Color.js +283 -0
  313. package/es/color/Color.js.map +1 -0
  314. package/es/color/hexToRgb.d.ts +1 -0
  315. package/es/color/hexToRgb.js +7 -0
  316. package/es/color/hexToRgb.js.map +1 -0
  317. package/es/color/hslToRgb.d.ts +5 -0
  318. package/es/color/hslToRgb.js +15 -0
  319. package/es/color/hslToRgb.js.map +1 -0
  320. package/es/color/index.d.ts +6 -0
  321. package/es/color/index.js +12 -0
  322. package/es/color/index.js.map +1 -0
  323. package/es/color/interpolate.d.ts +2 -0
  324. package/es/color/interpolate.js +10 -0
  325. package/es/color/interpolate.js.map +1 -0
  326. package/es/color/rgbToHex.d.ts +1 -0
  327. package/es/color/rgbToHex.js +4 -0
  328. package/es/color/rgbToHex.js.map +1 -0
  329. package/es/color/rgbToHsl.d.ts +5 -0
  330. package/es/color/rgbToHsl.js +13 -0
  331. package/es/color/rgbToHsl.js.map +1 -0
  332. package/es/common/array.d.ts +9 -0
  333. package/es/common/array.js +50 -0
  334. package/es/common/array.js.map +1 -0
  335. package/es/common/ascending.d.ts +1 -0
  336. package/es/common/ascending.js +4 -0
  337. package/es/common/ascending.js.map +1 -0
  338. package/es/common/bisect.d.ts +1 -0
  339. package/es/common/bisect.js +12 -0
  340. package/es/common/bisect.js.map +1 -0
  341. package/es/common/clamp.d.ts +2 -0
  342. package/es/common/clamp.js +6 -0
  343. package/es/common/clamp.js.map +1 -0
  344. package/es/common/clampRange.d.ts +2 -0
  345. package/es/common/clampRange.js +10 -0
  346. package/es/common/clampRange.js.map +1 -0
  347. package/es/common/clamper.d.ts +1 -0
  348. package/es/common/clamper.js +5 -0
  349. package/es/common/clamper.js.map +1 -0
  350. package/es/common/clone.d.ts +1 -0
  351. package/es/common/clone.js +32 -0
  352. package/es/common/clone.js.map +1 -0
  353. package/es/common/cloneDeep.d.ts +1 -0
  354. package/es/common/cloneDeep.js +26 -0
  355. package/es/common/cloneDeep.js.map +1 -0
  356. package/es/common/constant.d.ts +2 -0
  357. package/es/common/constant.js +6 -0
  358. package/es/common/constant.js.map +1 -0
  359. package/es/common/debounce.d.ts +7 -0
  360. package/es/common/debounce.js +68 -0
  361. package/es/common/debounce.js.map +1 -0
  362. package/es/common/deviation.d.ts +1 -0
  363. package/es/common/deviation.js +7 -0
  364. package/es/common/deviation.js.map +1 -0
  365. package/es/common/get.d.ts +3 -0
  366. package/es/common/get.js +10 -0
  367. package/es/common/get.js.map +1 -0
  368. package/es/common/getType.d.ts +2 -0
  369. package/es/common/getType.js +3 -0
  370. package/es/common/getType.js.map +1 -0
  371. package/es/common/has.d.ts +3 -0
  372. package/es/common/has.js +4 -0
  373. package/es/common/has.js.map +1 -0
  374. package/es/common/index.d.ts +56 -0
  375. package/es/common/index.js +112 -0
  376. package/es/common/index.js.map +1 -0
  377. package/es/common/interpolate.d.ts +4 -0
  378. package/es/common/interpolate.js +45 -0
  379. package/es/common/interpolate.js.map +1 -0
  380. package/es/common/isArray.d.ts +2 -0
  381. package/es/common/isArray.js +6 -0
  382. package/es/common/isArray.js.map +1 -0
  383. package/es/common/isArrayLike.d.ts +2 -0
  384. package/es/common/isArrayLike.js +6 -0
  385. package/es/common/isArrayLike.js.map +1 -0
  386. package/es/common/isBase64.d.ts +2 -0
  387. package/es/common/isBase64.js +4 -0
  388. package/es/common/isBase64.js.map +1 -0
  389. package/es/common/isBoolean.d.ts +2 -0
  390. package/es/common/isBoolean.js +6 -0
  391. package/es/common/isBoolean.js.map +1 -0
  392. package/es/common/isDate.d.ts +2 -0
  393. package/es/common/isDate.js +6 -0
  394. package/es/common/isDate.js.map +1 -0
  395. package/es/common/isEmpty.d.ts +2 -0
  396. package/es/common/isEmpty.js +22 -0
  397. package/es/common/isEmpty.js.map +1 -0
  398. package/es/common/isEqual.d.ts +1 -0
  399. package/es/common/isEqual.js +39 -0
  400. package/es/common/isEqual.js.map +1 -0
  401. package/es/common/isFunction.d.ts +2 -0
  402. package/es/common/isFunction.js +4 -0
  403. package/es/common/isFunction.js.map +1 -0
  404. package/es/common/isNil.d.ts +2 -0
  405. package/es/common/isNil.js +4 -0
  406. package/es/common/isNil.js.map +1 -0
  407. package/es/common/isNull.d.ts +2 -0
  408. package/es/common/isNull.js +4 -0
  409. package/es/common/isNull.js.map +1 -0
  410. package/es/common/isNumber.d.ts +2 -0
  411. package/es/common/isNumber.js +9 -0
  412. package/es/common/isNumber.js.map +1 -0
  413. package/es/common/isNumeric.d.ts +2 -0
  414. package/es/common/isNumeric.js +4 -0
  415. package/es/common/isNumeric.js.map +1 -0
  416. package/es/common/isObject.d.ts +2 -0
  417. package/es/common/isObject.js +6 -0
  418. package/es/common/isObject.js.map +1 -0
  419. package/es/common/isObjectLike.d.ts +2 -0
  420. package/es/common/isObjectLike.js +4 -0
  421. package/es/common/isObjectLike.js.map +1 -0
  422. package/es/common/isPlainObject.d.ts +2 -0
  423. package/es/common/isPlainObject.js +14 -0
  424. package/es/common/isPlainObject.js.map +1 -0
  425. package/es/common/isPrototype.d.ts +2 -0
  426. package/es/common/isPrototype.js +7 -0
  427. package/es/common/isPrototype.js.map +1 -0
  428. package/es/common/isRegExp.d.ts +2 -0
  429. package/es/common/isRegExp.js +6 -0
  430. package/es/common/isRegExp.js.map +1 -0
  431. package/es/common/isShallowEqual.d.ts +1 -0
  432. package/es/common/isShallowEqual.js +22 -0
  433. package/es/common/isShallowEqual.js.map +1 -0
  434. package/es/common/isString.d.ts +2 -0
  435. package/es/common/isString.js +9 -0
  436. package/es/common/isString.js.map +1 -0
  437. package/es/common/isType.d.ts +2 -0
  438. package/es/common/isType.js +4 -0
  439. package/es/common/isType.js.map +1 -0
  440. package/es/common/isUndefined.d.ts +2 -0
  441. package/es/common/isUndefined.js +4 -0
  442. package/es/common/isUndefined.js.map +1 -0
  443. package/es/common/isValid.d.ts +2 -0
  444. package/es/common/isValid.js +4 -0
  445. package/es/common/isValid.js.map +1 -0
  446. package/es/common/isValidNumber.d.ts +2 -0
  447. package/es/common/isValidNumber.js +6 -0
  448. package/es/common/isValidNumber.js.map +1 -0
  449. package/es/common/isValidUrl.d.ts +2 -0
  450. package/es/common/isValidUrl.js +4 -0
  451. package/es/common/isValidUrl.js.map +1 -0
  452. package/es/common/lowerFirst.d.ts +2 -0
  453. package/es/common/lowerFirst.js +6 -0
  454. package/es/common/lowerFirst.js.map +1 -0
  455. package/es/common/median.d.ts +1 -0
  456. package/es/common/median.js +9 -0
  457. package/es/common/median.js.map +1 -0
  458. package/es/common/merge.d.ts +1 -0
  459. package/es/common/merge.js +54 -0
  460. package/es/common/merge.js.map +1 -0
  461. package/es/common/mixin.d.ts +5 -0
  462. package/es/common/mixin.js +28 -0
  463. package/es/common/mixin.js.map +1 -0
  464. package/es/common/number.d.ts +3 -0
  465. package/es/common/number.js +15 -0
  466. package/es/common/number.js.map +1 -0
  467. package/es/common/pad.d.ts +2 -0
  468. package/es/common/pad.js +11 -0
  469. package/es/common/pad.js.map +1 -0
  470. package/es/common/pick.d.ts +1 -0
  471. package/es/common/pick.js +12 -0
  472. package/es/common/pick.js.map +1 -0
  473. package/es/common/pickWithout.d.ts +1 -0
  474. package/es/common/pickWithout.js +16 -0
  475. package/es/common/pickWithout.js.map +1 -0
  476. package/es/common/quantileSorted.d.ts +1 -0
  477. package/es/common/quantileSorted.js +11 -0
  478. package/es/common/quantileSorted.js.map +1 -0
  479. package/es/common/range.d.ts +1 -0
  480. package/es/common/range.js +10 -0
  481. package/es/common/range.js.map +1 -0
  482. package/es/common/throttle.d.ts +5 -0
  483. package/es/common/throttle.js +17 -0
  484. package/es/common/throttle.js.map +1 -0
  485. package/es/common/tickStep.d.ts +1 -0
  486. package/es/common/tickStep.js +10 -0
  487. package/es/common/tickStep.js.map +1 -0
  488. package/es/common/toDate.d.ts +2 -0
  489. package/es/common/toDate.js +18 -0
  490. package/es/common/toDate.js.map +1 -0
  491. package/es/common/toNumber.d.ts +1 -0
  492. package/es/common/toNumber.js +4 -0
  493. package/es/common/toNumber.js.map +1 -0
  494. package/es/common/toValidNumber.d.ts +1 -0
  495. package/es/common/toValidNumber.js +8 -0
  496. package/es/common/toValidNumber.js.map +1 -0
  497. package/es/common/truncate.d.ts +2 -0
  498. package/es/common/truncate.js +9 -0
  499. package/es/common/truncate.js.map +1 -0
  500. package/es/common/upperFirst.d.ts +2 -0
  501. package/es/common/upperFirst.js +6 -0
  502. package/es/common/upperFirst.js.map +1 -0
  503. package/es/common/uuid.d.ts +2 -0
  504. package/es/common/uuid.js +13 -0
  505. package/es/common/uuid.js.map +1 -0
  506. package/es/common/variance.d.ts +1 -0
  507. package/es/common/variance.js +11 -0
  508. package/es/common/variance.js.map +1 -0
  509. package/es/data-structure/bounds.d.ts +81 -0
  510. package/es/data-structure/bounds.js +127 -0
  511. package/es/data-structure/bounds.js.map +1 -0
  512. package/es/data-structure/hashTable.d.ts +35 -0
  513. package/es/data-structure/hashTable.js +104 -0
  514. package/es/data-structure/hashTable.js.map +1 -0
  515. package/es/data-structure/index.d.ts +4 -0
  516. package/es/data-structure/index.js +8 -0
  517. package/es/data-structure/index.js.map +1 -0
  518. package/es/data-structure/matrix.d.ts +80 -0
  519. package/es/data-structure/matrix.js +106 -0
  520. package/es/data-structure/matrix.js.map +1 -0
  521. package/es/data-structure/point.d.ts +62 -0
  522. package/es/data-structure/point.js +65 -0
  523. package/es/data-structure/point.js.map +1 -0
  524. package/es/dom.d.ts +10 -0
  525. package/es/dom.js +75 -0
  526. package/es/dom.js.map +1 -0
  527. package/es/geo/index.d.ts +2 -0
  528. package/es/geo/index.js +4 -0
  529. package/es/geo/index.js.map +1 -0
  530. package/es/geo/interface.d.ts +1 -0
  531. package/es/geo/interface.js +2 -0
  532. package/es/geo/interface.js.map +1 -0
  533. package/es/geo/invariant.d.ts +9 -0
  534. package/es/geo/invariant.js +40 -0
  535. package/es/geo/invariant.js.map +1 -0
  536. package/es/graphics/algorithm/aabb.d.ts +6 -0
  537. package/es/graphics/algorithm/aabb.js +49 -0
  538. package/es/graphics/algorithm/aabb.js.map +1 -0
  539. package/es/graphics/algorithm/index.d.ts +3 -0
  540. package/es/graphics/algorithm/index.js +6 -0
  541. package/es/graphics/algorithm/index.js.map +1 -0
  542. package/es/graphics/algorithm/interface.d.ts +20 -0
  543. package/es/graphics/algorithm/interface.js +2 -0
  544. package/es/graphics/algorithm/interface.js.map +1 -0
  545. package/es/graphics/algorithm/intersect.d.ts +25 -0
  546. package/es/graphics/algorithm/intersect.js +135 -0
  547. package/es/graphics/algorithm/intersect.js.map +1 -0
  548. package/es/graphics/algorithm/obb.d.ts +5 -0
  549. package/es/graphics/algorithm/obb.js +68 -0
  550. package/es/graphics/algorithm/obb.js.map +1 -0
  551. package/es/graphics/graph-util.d.ts +23 -0
  552. package/es/graphics/graph-util.js +39 -0
  553. package/es/graphics/graph-util.js.map +1 -0
  554. package/es/graphics/image.d.ts +2 -0
  555. package/es/graphics/image.js +12 -0
  556. package/es/graphics/image.js.map +1 -0
  557. package/es/graphics/index.d.ts +5 -0
  558. package/es/graphics/index.js +10 -0
  559. package/es/graphics/index.js.map +1 -0
  560. package/es/graphics/polygon.d.ts +5 -0
  561. package/es/graphics/polygon.js +47 -0
  562. package/es/graphics/polygon.js.map +1 -0
  563. package/es/graphics/text/index.d.ts +2 -0
  564. package/es/graphics/text/index.js +4 -0
  565. package/es/graphics/text/index.js.map +1 -0
  566. package/es/graphics/text/measure/index.d.ts +4 -0
  567. package/es/graphics/text/measure/index.js +8 -0
  568. package/es/graphics/text/measure/index.js.map +1 -0
  569. package/es/graphics/text/measure/interface.d.ts +31 -0
  570. package/es/graphics/text/measure/interface.js +2 -0
  571. package/es/graphics/text/measure/interface.js.map +1 -0
  572. package/es/graphics/text/measure/test.d.ts +14 -0
  573. package/es/graphics/text/measure/test.js +65 -0
  574. package/es/graphics/text/measure/test.js.map +1 -0
  575. package/es/graphics/text/measure/textMeasure.d.ts +38 -0
  576. package/es/graphics/text/measure/textMeasure.js +181 -0
  577. package/es/graphics/text/measure/textMeasure.js.map +1 -0
  578. package/es/graphics/text/measure/util.d.ts +2 -0
  579. package/es/graphics/text/measure/util.js +5 -0
  580. package/es/graphics/text/measure/util.js.map +1 -0
  581. package/es/graphics/text/stringWidth.d.ts +2 -0
  582. package/es/graphics/text/stringWidth.js +43 -0
  583. package/es/graphics/text/stringWidth.js.map +1 -0
  584. package/es/index.d.ts +15 -0
  585. package/es/index.js +30 -0
  586. package/es/index.js.map +1 -0
  587. package/es/logger.d.ts +12 -0
  588. package/es/logger.js +38 -0
  589. package/es/logger.js.map +1 -0
  590. package/es/lru.d.ts +25 -0
  591. package/es/lru.js +36 -0
  592. package/es/lru.js.map +1 -0
  593. package/es/math.d.ts +66 -0
  594. package/es/math.js +76 -0
  595. package/es/math.js.map +1 -0
  596. package/es/padding.d.ts +7 -0
  597. package/es/padding.js +31 -0
  598. package/es/padding.js.map +1 -0
  599. package/es/time/formatUtils.d.ts +17 -0
  600. package/es/time/formatUtils.js +72 -0
  601. package/es/time/formatUtils.js.map +1 -0
  602. package/es/time/index.d.ts +2 -0
  603. package/es/time/index.js +4 -0
  604. package/es/time/index.js.map +1 -0
  605. package/es/time/interval.d.ts +77 -0
  606. package/es/time/interval.js +227 -0
  607. package/es/time/interval.js.map +1 -0
  608. package/es/type.d.ts +5 -0
  609. package/es/type.js +2 -0
  610. package/es/type.js.map +1 -0
  611. package/package.json +51 -0
@@ -0,0 +1,104 @@
1
+ export class HashValue {}
2
+
3
+ export class HashTable {
4
+ constructor() {
5
+ this.items = {}, this.itemList = [];
6
+ }
7
+ get type() {
8
+ return "xhHashTable";
9
+ }
10
+ set(key, value) {
11
+ const vl = new HashValue;
12
+ vl.key = key, vl.value = value;
13
+ let index = this.itemList.length;
14
+ return this.has(key) && (index = this.items[key].index), vl.index = index, this.itemList[index] = vl,
15
+ this.items[key] = vl, vl;
16
+ }
17
+ clear() {
18
+ this.items = {}, this.itemList = [];
19
+ }
20
+ del(key) {
21
+ if (this.has(key)) {
22
+ const index = this.items[key].index;
23
+ index > -1 && this.itemList.splice(index, 1), delete this.items[key], this.resetIndex();
24
+ }
25
+ }
26
+ delFrom(index) {
27
+ for (let i = index + 1; i < this.count(); i++) {
28
+ const key = this.itemList[i].key;
29
+ delete this.items[key];
30
+ }
31
+ this.itemList.splice(index + 1, this.count() - index), this.resetIndex();
32
+ }
33
+ resetIndex() {
34
+ this.foreachHashv(((k, v) => {
35
+ const index = this.itemList.indexOf(v);
36
+ this.items[k].index = index;
37
+ }));
38
+ }
39
+ has(key) {
40
+ return key in this.items;
41
+ }
42
+ get(key) {
43
+ return this.has(key) ? this.items[key].value : null;
44
+ }
45
+ count() {
46
+ return this.itemList.length;
47
+ }
48
+ all() {
49
+ return this.itemList.map((vl => vl.value));
50
+ }
51
+ first() {
52
+ return this.itemList[0].value;
53
+ }
54
+ last() {
55
+ return this.itemList[this.itemList.length - 1].value;
56
+ }
57
+ getByIndex(index) {
58
+ return this.itemList[index].value;
59
+ }
60
+ getKeyByIndex(index) {
61
+ return this.itemList[index].key;
62
+ }
63
+ foreach(callback) {
64
+ for (const key in this.items) {
65
+ if (!1 === callback(key, this.items[key].value)) return !1;
66
+ }
67
+ return !0;
68
+ }
69
+ foreachHashv(callback) {
70
+ for (const key in this.items) {
71
+ if (!1 === callback(key, this.items[key])) return !1;
72
+ }
73
+ return !0;
74
+ }
75
+ hasValue(value) {
76
+ for (const key in this.items) if (this.items[key].value === value) return !0;
77
+ return !1;
78
+ }
79
+ indexOf(key) {
80
+ return this.has(key) ? this.items[key].index : -1;
81
+ }
82
+ insertAt(index, value, key) {
83
+ const hashV = new HashValue;
84
+ hashV.index = index, hashV.key = key, hashV.value = value, this.itemList.splice(index, 0, hashV),
85
+ this.items[key] = hashV, this.resetIndex();
86
+ }
87
+ sort(callback) {
88
+ return this.itemList.sort(((a, b) => callback(a.value, b.value)));
89
+ }
90
+ toArray() {
91
+ return this.itemList.slice(0, this.itemList.length).map((vl => vl.value));
92
+ }
93
+ push(lists) {
94
+ lists.foreach(((key, value) => {
95
+ this.set(key, value);
96
+ }));
97
+ }
98
+ mapKey() {
99
+ const returnArr = [];
100
+ for (const key in this.items) returnArr.push(key);
101
+ return returnArr;
102
+ }
103
+ toImmutableMap() {}
104
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data-structure/hashTable.ts"],"names":[],"mappings":"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","file":"hashTable.js","sourcesContent":["import type { LooseFunction } from '../type';\n\nexport class HashValue<T> {\n index: number;\n key: string;\n value: T;\n}\n\n// 基于 array 和 object的 HashTable\nexport class HashTable<T> {\n private items: { [key: string]: HashValue<T> };\n private itemList: Array<HashValue<T>>;\n constructor() {\n this.items = {};\n this.itemList = [];\n }\n get type() {\n return 'xhHashTable';\n }\n set(key: string, value: T): HashValue<T> {\n const vl = new HashValue<T>();\n vl.key = key;\n vl.value = value;\n let index = this.itemList.length;\n if (this.has(key)) {\n index = this.items[key].index;\n }\n vl.index = index;\n this.itemList[index] = vl;\n this.items[key] = vl;\n return vl;\n }\n\n clear() {\n this.items = {};\n this.itemList = [];\n }\n del(key: string): void {\n if (this.has(key)) {\n const index = this.items[key].index;\n if (index > -1) {\n this.itemList.splice(index, 1);\n }\n delete this.items[key];\n this.resetIndex();\n }\n }\n\n /**\n * 不包含当前index\n * @param index\n */\n delFrom(index: number) {\n for (let i = index + 1; i < this.count(); i++) {\n const key = this.itemList[i].key;\n delete this.items[key];\n }\n this.itemList.splice(index + 1, this.count() - index);\n this.resetIndex();\n }\n\n resetIndex(): void {\n this.foreachHashv((k: any, v: HashValue<T>) => {\n const index = this.itemList.indexOf(v);\n this.items[k].index = index;\n });\n }\n\n has(key: string): boolean {\n return key in this.items;\n }\n\n get(key: string): T | null {\n if (this.has(key)) {\n return this.items[key].value;\n }\n return null;\n }\n\n count(): number {\n return this.itemList.length;\n }\n\n all(): Array<T> {\n return this.itemList.map(vl => {\n return vl.value;\n });\n }\n first(): T {\n return this.itemList[0].value;\n }\n last(): T {\n return this.itemList[this.itemList.length - 1].value;\n }\n getByIndex(index: number): T {\n return this.itemList[index].value;\n }\n\n getKeyByIndex(index: number): string {\n return this.itemList[index].key;\n }\n\n //遍历 扩展\n foreach(callback: (key: string, value: T) => boolean | void) {\n for (const key in this.items) {\n const returnVal = callback(key, this.items[key].value);\n if (returnVal === false) {\n return false;\n }\n }\n return true;\n }\n private foreachHashv(callback: (key: string, value: HashValue<T>) => boolean | void) {\n for (const key in this.items) {\n const returnVal = callback(key, this.items[key]);\n if (returnVal === false) {\n return false;\n }\n }\n return true;\n }\n hasValue(value: any): boolean {\n for (const key in this.items) {\n if (this.items[key].value === value) {\n return true;\n }\n }\n return false;\n }\n //获取index\n indexOf(key: any): number {\n if (this.has(key)) {\n return this.items[key].index;\n }\n return -1;\n }\n\n //插入\n insertAt(index: number, value: T, key: string) {\n const hashV = new HashValue<T>();\n\n hashV.index = index;\n hashV.key = key;\n hashV.value = value;\n this.itemList.splice(index, 0, hashV);\n this.items[key] = hashV;\n this.resetIndex();\n }\n\n sort(callback: LooseFunction) {\n return this.itemList.sort((a: HashValue<T>, b: HashValue<T>) => {\n return callback(a.value, b.value);\n });\n }\n toArray(): Array<T> {\n return this.itemList.slice(0, this.itemList.length).map(vl => {\n return vl.value;\n });\n }\n push(lists: HashTable<any>) {\n lists.foreach((key: string, value: T) => {\n this.set(key, value);\n });\n }\n mapKey(): string[] {\n const returnArr: string[] = [];\n for (const key in this.items) {\n returnArr.push(key);\n }\n return returnArr;\n }\n\n toImmutableMap() {\n // do nothing\n }\n}\n"]}
@@ -0,0 +1,4 @@
1
+ export * from './hashTable';
2
+ export * from './point';
3
+ export * from './bounds';
4
+ export * from './matrix';
@@ -0,0 +1,8 @@
1
+ export * from "./hashTable";
2
+
3
+ export * from "./point";
4
+
5
+ export * from "./bounds";
6
+
7
+ export * from "./matrix";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data-structure/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAE5B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC","file":"index.js","sourcesContent":["// 基于 array 和 object 的 HashTable\nexport * from './hashTable';\n// Point\nexport * from './point';\nexport * from './bounds';\nexport * from './matrix';\n"]}
@@ -0,0 +1,80 @@
1
+ import type { vec2 } from '../math';
2
+ import type { IPointLike } from './point';
3
+ export interface IMatrixLike {
4
+ a: number;
5
+ b: number;
6
+ c: number;
7
+ d: number;
8
+ e: number;
9
+ f: number;
10
+ }
11
+ export interface IMatrix {
12
+ a: number;
13
+ b: number;
14
+ c: number;
15
+ d: number;
16
+ e: number;
17
+ f: number;
18
+ setValue: (a: number, b: number, c: number, d: number, e: number, f: number) => IMatrix;
19
+ getInverse: () => IMatrix;
20
+ rotate: (rad: number) => IMatrix;
21
+ rotateByCenter: (rad: number, cx: number, cy: number) => IMatrix;
22
+ scale: (sx: number, sy: number) => IMatrix;
23
+ setScale: (sx: number, sy: number) => IMatrix;
24
+ transform: (a: number, b: number, c: number, d: number, e: number, f: number) => IMatrix;
25
+ translate: (x: number, y: number) => IMatrix;
26
+ transpose: () => IMatrix;
27
+ equalToMatrix: (m2: IMatrixLike) => boolean;
28
+ equalTo: (a2: number, b2: number, c2: number, d2: number, e2: number, f2: number) => boolean;
29
+ multiply: (a2: number, b2: number, c2: number, d2: number, e2: number, f2: number) => IMatrix;
30
+ interpolate: (m2: IMatrix, t: number) => IMatrix;
31
+ transformPoint: (source: IPointLike, target: IPointLike) => void;
32
+ reset: () => IMatrix;
33
+ onlyTranslate: (scale?: number) => boolean;
34
+ clone: () => IMatrix;
35
+ toTransformAttrs: () => {
36
+ x: number;
37
+ y: number;
38
+ scaleX: number;
39
+ scaleY: number;
40
+ skewX: number;
41
+ skewY: number;
42
+ rotateDeg: number;
43
+ };
44
+ }
45
+ export declare class Matrix implements IMatrix {
46
+ a: number;
47
+ b: number;
48
+ c: number;
49
+ d: number;
50
+ e: number;
51
+ f: number;
52
+ constructor(a?: number, b?: number, c?: number, d?: number, e?: number, f?: number);
53
+ equalToMatrix(m2: IMatrixLike): boolean;
54
+ equalTo(a: number, b: number, c: number, d: number, e: number, f: number): boolean;
55
+ setValue(a: number, b: number, c: number, d: number, e: number, f: number): this;
56
+ reset(): this;
57
+ getInverse(): Matrix;
58
+ rotate(rad: number): this;
59
+ rotateByCenter(rad: number, cx: number, cy: number): this;
60
+ scale(sx: number, sy: number): this;
61
+ setScale(sx: number, sy: number): this;
62
+ transform(a: number, b: number, c: number, d: number, e: number, f: number): this;
63
+ translate(x: number, y: number): this;
64
+ transpose(): this;
65
+ multiply(a2: number, b2: number, c2: number, d2: number, e2: number, f2: number): this;
66
+ interpolate(m2: Matrix, t: number): Matrix;
67
+ transformPoint(source: IPointLike, target: IPointLike): void;
68
+ onlyTranslate(scale?: number): boolean;
69
+ clone(): Matrix;
70
+ toTransformAttrs(): {
71
+ x: number;
72
+ y: number;
73
+ rotateDeg: number;
74
+ scaleX: number;
75
+ scaleY: number;
76
+ skewX: number;
77
+ skewY: number;
78
+ };
79
+ }
80
+ export declare function normalTransform(out: Matrix, origin: Matrix, x: number, y: number, scaleX: number, scaleY: number, angle: number, rotateCenter?: vec2): void;
@@ -0,0 +1,106 @@
1
+ import { radianToDegree } from "../angle";
2
+
3
+ import { cos, sin } from "../math";
4
+
5
+ export class Matrix {
6
+ constructor(a = 1, b = 0, c = 0, d = 1, e = 0, f = 0) {
7
+ this.a = a, this.b = b, this.c = c, this.d = d, this.e = e, this.f = f;
8
+ }
9
+ equalToMatrix(m2) {
10
+ return !(this.e !== m2.e || this.f !== m2.f || this.a !== m2.a || this.d !== m2.d || this.b !== m2.b || this.c !== m2.c);
11
+ }
12
+ equalTo(a, b, c, d, e, f) {
13
+ return !(this.e !== e || this.f !== f || this.a !== a || this.d !== d || this.b !== b || this.c !== c);
14
+ }
15
+ setValue(a, b, c, d, e, f) {
16
+ return this.a = a, this.b = b, this.c = c, this.d = d, this.e = e, this.f = f, this;
17
+ }
18
+ reset() {
19
+ return this.a = 1, this.b = 0, this.c = 0, this.d = 1, this.e = 0, this.f = 0, this;
20
+ }
21
+ getInverse() {
22
+ const a = this.a, b = this.b, c = this.c, d = this.d, e = this.e, f = this.f, m = new Matrix, dt = a * d - b * c;
23
+ return m.a = d / dt, m.b = -b / dt, m.c = -c / dt, m.d = a / dt, m.e = (c * f - d * e) / dt,
24
+ m.f = -(a * f - b * e) / dt, m;
25
+ }
26
+ rotate(rad) {
27
+ const c = Math.cos(rad), s = Math.sin(rad), m11 = this.a * c + this.c * s, m12 = this.b * c + this.d * s, m21 = this.a * -s + this.c * c, m22 = this.b * -s + this.d * c;
28
+ return this.a = m11, this.b = m12, this.c = m21, this.d = m22, this;
29
+ }
30
+ rotateByCenter(rad, cx, cy) {
31
+ const cos = Math.cos(rad), sin = Math.sin(rad), rotateM13 = (1 - cos) * cx + sin * cy, rotateM23 = (1 - cos) * cy - sin * cx, m11 = cos * this.a - sin * this.b, m21 = sin * this.a + cos * this.b, m12 = cos * this.c - sin * this.d, m22 = sin * this.c + cos * this.d, m13 = cos * this.e - sin * this.f + rotateM13, m23 = sin * this.e + cos * this.f + rotateM23;
32
+ return this.a = m11, this.b = m21, this.c = m12, this.d = m22, this.e = m13, this.f = m23,
33
+ this;
34
+ }
35
+ scale(sx, sy) {
36
+ return this.a *= sx, this.b *= sx, this.c *= sy, this.d *= sy, this;
37
+ }
38
+ setScale(sx, sy) {
39
+ return this.b = this.b / this.a * sx, this.c = this.c / this.d * sy, this.a = sx,
40
+ this.d = sy, this;
41
+ }
42
+ transform(a, b, c, d, e, f) {
43
+ return this.multiply(a, b, c, d, e, f), this;
44
+ }
45
+ translate(x, y) {
46
+ return this.e += this.a * x + this.c * y, this.f += this.b * x + this.d * y, this;
47
+ }
48
+ transpose() {
49
+ const {a: a, b: b, c: c, d: d, e: e, f: f} = this;
50
+ return this.a = b, this.b = a, this.c = d, this.d = c, this.e = f, this.f = e, this;
51
+ }
52
+ multiply(a2, b2, c2, d2, e2, f2) {
53
+ const a1 = this.a, b1 = this.b, c1 = this.c, d1 = this.d, m11 = a1 * a2 + c1 * b2, m12 = b1 * a2 + d1 * b2, m21 = a1 * c2 + c1 * d2, m22 = b1 * c2 + d1 * d2, dx = a1 * e2 + c1 * f2 + this.e, dy = b1 * e2 + d1 * f2 + this.f;
54
+ return this.a = m11, this.b = m12, this.c = m21, this.d = m22, this.e = dx, this.f = dy,
55
+ this;
56
+ }
57
+ interpolate(m2, t) {
58
+ const m = new Matrix;
59
+ return m.a = this.a + (m2.a - this.a) * t, m.b = this.b + (m2.b - this.b) * t, m.c = this.c + (m2.c - this.c) * t,
60
+ m.d = this.d + (m2.d - this.d) * t, m.e = this.e + (m2.e - this.e) * t, m.f = this.f + (m2.f - this.f) * t,
61
+ m;
62
+ }
63
+ transformPoint(source, target) {
64
+ const {a: a, b: b, c: c, d: d, e: e, f: f} = this, dt = a * d - b * c, nextA = d / dt, nextB = -b / dt, nextC = -c / dt, nextD = a / dt, nextE = (c * f - d * e) / dt, nextF = -(a * f - b * e) / dt, {x: x, y: y} = source;
65
+ target.x = x * nextA + y * nextC + nextE, target.y = x * nextB + y * nextD + nextF;
66
+ }
67
+ onlyTranslate(scale = 1) {
68
+ return this.a === scale && 0 === this.b && 0 === this.c && this.d === scale;
69
+ }
70
+ clone() {
71
+ return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);
72
+ }
73
+ toTransformAttrs() {
74
+ const a = this.a, b = this.b, c = this.c, d = this.d, delta = a * d - b * c, result = {
75
+ x: this.e,
76
+ y: this.f,
77
+ rotateDeg: 0,
78
+ scaleX: 0,
79
+ scaleY: 0,
80
+ skewX: 0,
81
+ skewY: 0
82
+ };
83
+ if (0 !== a || 0 !== b) {
84
+ const r = Math.sqrt(a * a + b * b);
85
+ result.rotateDeg = b > 0 ? Math.acos(a / r) : -Math.acos(a / r), result.scaleX = r,
86
+ result.scaleY = delta / r, result.skewX = (a * c + b * d) / delta, result.skewY = 0;
87
+ } else if (0 !== c || 0 !== d) {
88
+ const s = Math.sqrt(c * c + d * d);
89
+ result.rotateDeg = Math.PI / 2 - (d > 0 ? Math.acos(-c / s) : -Math.acos(c / s)),
90
+ result.scaleX = delta / s, result.scaleY = s, result.skewX = 0, result.skewY = (a * c + b * d) / delta;
91
+ }
92
+ return result.rotateDeg = radianToDegree(result.rotateDeg), result;
93
+ }
94
+ }
95
+
96
+ export function normalTransform(out, origin, x, y, scaleX, scaleY, angle, rotateCenter) {
97
+ const oa = origin.a, ob = origin.b, oc = origin.c, od = origin.d, oe = origin.e, of = origin.f, cosTheta = cos(angle), sinTheta = sin(angle);
98
+ let rotateCenterX, rotateCenterY;
99
+ rotateCenter ? (rotateCenterX = rotateCenter[0], rotateCenterY = rotateCenter[1]) : (rotateCenterX = x,
100
+ rotateCenterY = y);
101
+ const offsetX = rotateCenterX - x, offsetY = rotateCenterY - y, a1 = oa * cosTheta + oc * sinTheta, b1 = ob * cosTheta + od * sinTheta, c1 = oc * cosTheta - oa * sinTheta, d1 = od * cosTheta - ob * sinTheta;
102
+ out.a = scaleX * a1, out.b = scaleX * b1, out.c = scaleY * c1, out.d = scaleY * d1,
103
+ out.e = oe + oa * rotateCenterX + oc * rotateCenterY - a1 * offsetX - c1 * offsetY,
104
+ out.f = of + ob * rotateCenterX + od * rotateCenterY - b1 * offsetX - d1 * offsetY;
105
+ }
106
+ //# sourceMappingURL=matrix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data-structure/matrix.ts"],"names":[],"mappings":"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","file":"matrix.js","sourcesContent":["import { radianToDegree } from '../angle';\nimport type { vec2 } from '../math';\nimport { cos, sin } from '../math';\nimport type { IPointLike } from './point';\n\nexport interface IMatrixLike {\n a: number;\n /**\n * skew y\n */\n b: number;\n /**\n * skewx\n */\n c: number;\n /**\n * scale y\n */\n d: number;\n /**\n * translate x\n */\n e: number;\n /**\n * translate y\n */\n f: number;\n}\n\n// 不建议用户直接操作matrix\nexport interface IMatrix {\n /**\n * scale x\n */\n a: number;\n /**\n * skew y\n */\n b: number;\n /**\n * skewx\n */\n c: number;\n /**\n * scale y\n */\n d: number;\n /**\n * translate x\n */\n e: number;\n /**\n * translate y\n */\n f: number;\n\n setValue: (a: number, b: number, c: number, d: number, e: number, f: number) => IMatrix;\n /**\n * 获取当前矩阵的逆矩阵\n */\n getInverse: () => IMatrix;\n rotate: (rad: number) => IMatrix;\n rotateByCenter: (rad: number, cx: number, cy: number) => IMatrix;\n scale: (sx: number, sy: number) => IMatrix;\n setScale: (sx: number, sy: number) => IMatrix;\n transform: (a: number, b: number, c: number, d: number, e: number, f: number) => IMatrix;\n translate: (x: number, y: number) => IMatrix;\n transpose: () => IMatrix;\n equalToMatrix: (m2: IMatrixLike) => boolean;\n equalTo: (a2: number, b2: number, c2: number, d2: number, e2: number, f2: number) => boolean;\n /**\n * 矩阵相乘\n * @param matrix\n */\n multiply: (a2: number, b2: number, c2: number, d2: number, e2: number, f2: number) => IMatrix;\n /**\n * 插值计算\n * @param m2\n * @param t\n */\n interpolate: (m2: IMatrix, t: number) => IMatrix;\n\n // 将point转到当前矩阵的坐标空间中\n transformPoint: (source: IPointLike, target: IPointLike) => void;\n\n reset: () => IMatrix;\n\n // 是否只有translate\n onlyTranslate: (scale?: number) => boolean;\n\n clone: () => IMatrix;\n\n toTransformAttrs: () => {\n x: number;\n y: number;\n scaleX: number;\n scaleY: number;\n skewX: number;\n skewY: number;\n rotateDeg: number;\n };\n}\n\nexport class Matrix implements IMatrix {\n /**\n * scale x\n */\n a: number;\n /**\n * skew y\n */\n b: number;\n /**\n * skewx\n */\n c: number;\n /**\n * scale y\n */\n d: number;\n /**\n * translate x\n */\n e: number;\n /**\n * translate y\n */\n f: number;\n\n constructor(a: number = 1, b: number = 0, c: number = 0, d: number = 1, e: number = 0, f: number = 0) {\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n }\n\n equalToMatrix(m2: IMatrixLike): boolean {\n // ef -> ad -> bc\n return !(\n this.e !== m2.e ||\n this.f !== m2.f ||\n this.a !== m2.a ||\n this.d !== m2.d ||\n this.b !== m2.b ||\n this.c !== m2.c\n );\n }\n equalTo(a: number, b: number, c: number, d: number, e: number, f: number): boolean {\n // ef -> ad -> bc\n return !(this.e !== e || this.f !== f || this.a !== a || this.d !== d || this.b !== b || this.c !== c);\n }\n\n setValue(a: number, b: number, c: number, d: number, e: number, f: number) {\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n return this;\n }\n\n reset(): this {\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.e = 0;\n this.f = 0;\n return this;\n }\n\n /**\n * 获取当前矩阵的逆矩阵\n */\n getInverse() {\n const a = this.a;\n const b = this.b;\n const c = this.c;\n const d = this.d;\n const e = this.e;\n const f = this.f;\n const m = new Matrix();\n const dt = a * d - b * c;\n\n m.a = d / dt;\n m.b = -b / dt;\n m.c = -c / dt;\n m.d = a / dt;\n m.e = (c * f - d * e) / dt;\n m.f = -(a * f - b * e) / dt;\n\n return m;\n }\n\n rotate(rad: number) {\n const c = Math.cos(rad);\n const s = Math.sin(rad);\n const m11 = this.a * c + this.c * s;\n const m12 = this.b * c + this.d * s;\n const m21 = this.a * -s + this.c * c;\n const m22 = this.b * -s + this.d * c;\n this.a = m11;\n this.b = m12;\n this.c = m21;\n this.d = m22;\n return this;\n }\n\n rotateByCenter(rad: number, cx: number, cy: number) {\n /** rotate matrix\n * | cos -sin (1-cos)*cx+sin*cy |\n * | sin cos (1-cos)*cy-sin*cx |\n * | 0 0 1 |\n * after multiply\n * m13 = (1-cos)*cx+sin*cy;\n * m23 = (1-cos)*cy-sin*cx;\n * | cos*a-sin*b cos*c-sin*d cos*e-sin*f+m13 |\n * | sin*a+cos*b sin*c+cos*d sin*e+cos*f+m23 |\n * | 0 0 1 |\n */\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n const rotateM13 = (1 - cos) * cx + sin * cy;\n const rotateM23 = (1 - cos) * cy - sin * cx;\n const m11 = cos * this.a - sin * this.b;\n const m21 = sin * this.a + cos * this.b;\n const m12 = cos * this.c - sin * this.d;\n const m22 = sin * this.c + cos * this.d;\n const m13 = cos * this.e - sin * this.f + rotateM13;\n const m23 = sin * this.e + cos * this.f + rotateM23;\n this.a = m11;\n this.b = m21;\n this.c = m12;\n this.d = m22;\n this.e = m13;\n this.f = m23;\n return this;\n }\n\n scale(sx: number, sy: number) {\n this.a *= sx;\n this.b *= sx;\n this.c *= sy;\n this.d *= sy;\n return this;\n }\n\n setScale(sx: number, sy: number) {\n this.b = (this.b / this.a) * sx;\n this.c = (this.c / this.d) * sy;\n this.a = sx;\n this.d = sy;\n return this;\n }\n\n transform(a: number, b: number, c: number, d: number, e: number, f: number) {\n this.multiply(a, b, c, d, e, f);\n return this;\n }\n\n translate(x: number, y: number) {\n this.e += this.a * x + this.c * y;\n this.f += this.b * x + this.d * y;\n return this;\n }\n\n transpose() {\n /** transpose matrix\n * | 0 1 0 |\n * | 1 0 0 |\n * | 0 0 1 |\n * after multiply\n * | b d f |\n * | a c e |\n * | 0 0 1 |\n */\n const { a, b, c, d, e, f } = this;\n this.a = b;\n this.b = a;\n this.c = d;\n this.d = c;\n this.e = f;\n this.f = e;\n return this;\n }\n\n /**\n * 矩阵相乘\n * @param matrix\n */\n multiply(a2: number, b2: number, c2: number, d2: number, e2: number, f2: number) {\n const a1 = this.a;\n const b1 = this.b;\n const c1 = this.c;\n const d1 = this.d;\n const e1 = this.e;\n const f1 = this.f;\n\n const m11 = a1 * a2 + c1 * b2;\n const m12 = b1 * a2 + d1 * b2;\n const m21 = a1 * c2 + c1 * d2;\n const m22 = b1 * c2 + d1 * d2;\n const dx = a1 * e2 + c1 * f2 + e1;\n const dy = b1 * e2 + d1 * f2 + f1;\n\n this.a = m11;\n this.b = m12;\n this.c = m21;\n this.d = m22;\n this.e = dx;\n this.f = dy;\n return this;\n }\n\n /**\n * 插值计算\n * @param m2\n * @param t\n */\n interpolate(m2: Matrix, t: number) {\n const m = new Matrix();\n\n m.a = this.a + (m2.a - this.a) * t;\n m.b = this.b + (m2.b - this.b) * t;\n m.c = this.c + (m2.c - this.c) * t;\n m.d = this.d + (m2.d - this.d) * t;\n m.e = this.e + (m2.e - this.e) * t;\n m.f = this.f + (m2.f - this.f) * t;\n\n return m;\n }\n\n /**\n * 将point转到当前矩阵的坐标空间中\n * @param source\n * @param target\n */\n transformPoint(source: IPointLike, target: IPointLike) {\n const { a, b, c, d, e, f } = this;\n const dt = a * d - b * c;\n\n const nextA = d / dt;\n const nextB = -b / dt;\n const nextC = -c / dt;\n const nextD = a / dt;\n const nextE = (c * f - d * e) / dt;\n const nextF = -(a * f - b * e) / dt;\n\n const { x, y } = source;\n target.x = x * nextA + y * nextC + nextE;\n target.y = x * nextB + y * nextD + nextF;\n }\n\n // 只有translate\n onlyTranslate(scale: number = 1): boolean {\n return this.a === scale && this.b === 0 && this.c === 0 && this.d === scale;\n }\n\n clone(): Matrix {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n }\n\n toTransformAttrs() {\n const a = this.a;\n const b = this.b;\n const c = this.c;\n const d = this.d;\n const e = this.e;\n const f = this.f;\n\n const delta = a * d - b * c;\n\n const result = {\n x: e,\n y: f,\n rotateDeg: 0,\n scaleX: 0,\n scaleY: 0,\n skewX: 0,\n skewY: 0\n };\n\n // Apply the QR-like decomposition.\n if (a !== 0 || b !== 0) {\n const r = Math.sqrt(a * a + b * b);\n result.rotateDeg = b > 0 ? Math.acos(a / r) : -Math.acos(a / r);\n result.scaleX = r;\n result.scaleY = delta / r;\n result.skewX = (a * c + b * d) / delta;\n result.skewY = 0;\n } else if (c !== 0 || d !== 0) {\n const s = Math.sqrt(c * c + d * d);\n result.rotateDeg = Math.PI / 2 - (d > 0 ? Math.acos(-c / s) : -Math.acos(c / s));\n result.scaleX = delta / s;\n result.scaleY = s;\n result.skewX = 0;\n result.skewY = (a * c + b * d) / delta;\n } else {\n // a = b = c = d = 0\n }\n\n result.rotateDeg = radianToDegree(result.rotateDeg);\n\n return result;\n }\n}\n\n/**\n * 对matrix进行通常的变换(基于rotateCenter进行旋转的同时进行translate和scale)\n * @param out\n * @param origin\n * @param x\n * @param y\n * @param scaleX\n * @param scaleY\n * @param angle\n * @param rotateCenter\n */\nexport function normalTransform(\n out: Matrix,\n origin: Matrix,\n x: number,\n y: number,\n scaleX: number,\n scaleY: number,\n angle: number,\n rotateCenter?: vec2\n) {\n const oa = origin.a;\n const ob = origin.b;\n const oc = origin.c;\n const od = origin.d;\n const oe = origin.e;\n const of = origin.f;\n const cosTheta = cos(angle);\n const sinTheta = sin(angle);\n let rotateCenterX: number;\n let rotateCenterY: number;\n if (rotateCenter) {\n rotateCenterX = rotateCenter[0];\n rotateCenterY = rotateCenter[1];\n } else {\n rotateCenterX = x;\n rotateCenterY = y;\n }\n const offsetX = rotateCenterX - x;\n const offsetY = rotateCenterY - y;\n\n const a1 = oa * cosTheta + oc * sinTheta;\n const b1 = ob * cosTheta + od * sinTheta;\n const c1 = oc * cosTheta - oa * sinTheta;\n const d1 = od * cosTheta - ob * sinTheta;\n out.a = scaleX * a1;\n out.b = scaleX * b1;\n out.c = scaleY * c1;\n out.d = scaleY * d1;\n\n out.e = oe + oa * rotateCenterX + oc * rotateCenterY - a1 * offsetX - c1 * offsetY;\n out.f = of + ob * rotateCenterX + od * rotateCenterY - b1 * offsetX - d1 * offsetY;\n}\n"]}
@@ -0,0 +1,62 @@
1
+ export interface IPoint {
2
+ x: number;
3
+ y: number;
4
+ x1?: number;
5
+ y1?: number;
6
+ defined?: boolean;
7
+ context?: any;
8
+ clone: () => IPoint;
9
+ copyFrom: (p: IPointLike) => IPoint;
10
+ set: (x: number, y: number) => IPoint;
11
+ add: (point: IPointLike | number) => IPoint;
12
+ sub: (point: IPointLike | number) => IPoint;
13
+ multi: (point: IPointLike | number) => IPoint;
14
+ div: (point: IPointLike | number) => IPoint;
15
+ }
16
+ export type IPointLike = Pick<IPoint, 'x' | 'y' | 'x1' | 'y1' | 'defined' | 'context'>;
17
+ export declare class Point implements IPoint {
18
+ x: number;
19
+ y: number;
20
+ x1?: number;
21
+ y1?: number;
22
+ defined?: boolean;
23
+ context?: any;
24
+ constructor(x?: number, y?: number, x1?: number, y1?: number);
25
+ clone(): Point;
26
+ copyFrom(p: IPointLike): this;
27
+ set(x: number, y: number): this;
28
+ add(point: IPointLike | number): IPoint;
29
+ sub(point: IPointLike | number): IPoint;
30
+ multi(point: IPointLike | number): IPoint;
31
+ div(point: IPointLike | number): IPoint;
32
+ }
33
+ export declare class PointService {
34
+ static distancePP(p1: IPointLike, p2: IPointLike): number;
35
+ static distanceNN(x: number, y: number, x1: number, y1: number): number;
36
+ static distancePN(point: IPointLike, x: number, y: number): number;
37
+ static pointAtPP(p1: IPointLike, p2: IPointLike, t: number): IPoint;
38
+ }
39
+ export interface IPolarPoint {
40
+ r: number;
41
+ theta: number;
42
+ r1?: number;
43
+ theta1?: number;
44
+ defined?: boolean;
45
+ context?: any;
46
+ clone: () => IPolarPoint;
47
+ copyFrom: (p: IPolarPoint) => IPolarPoint;
48
+ set: (x: number, y: number) => IPolarPoint;
49
+ }
50
+ export declare type IPolarPointLike = Pick<IPolarPoint, 'r' | 'theta' | 'r1' | 'theta1' | 'defined' | 'context'>;
51
+ export declare class PolarPoint implements IPolarPoint {
52
+ r: number;
53
+ theta: number;
54
+ r1?: number;
55
+ theta1?: number;
56
+ defined?: boolean;
57
+ context?: any;
58
+ constructor(r?: number, theta?: number, r1?: number, theta1?: number);
59
+ clone(): PolarPoint;
60
+ copyFrom(p: IPolarPointLike): this;
61
+ set(r: number, theta: number): this;
62
+ }
@@ -0,0 +1,65 @@
1
+ import isNumber from "../common/isNumber";
2
+
3
+ import { pow, sqrt } from "../math";
4
+
5
+ export class Point {
6
+ constructor(x = 0, y = 0, x1, y1) {
7
+ this.x = 0, this.y = 0, this.x = x, this.y = y, this.x1 = x1, this.y1 = y1;
8
+ }
9
+ clone() {
10
+ return new Point(this.x, this.y);
11
+ }
12
+ copyFrom(p) {
13
+ return this.x = p.x, this.y = p.y, this.x1 = p.x1, this.y1 = p.y1, this.defined = p.defined,
14
+ this.context = p.context, this;
15
+ }
16
+ set(x, y) {
17
+ return this.x = x, this.y = y, this;
18
+ }
19
+ add(point) {
20
+ return isNumber(point) ? (this.x += point, void (this.y += point)) : (this.x += point.x,
21
+ this.y += point.y, this);
22
+ }
23
+ sub(point) {
24
+ return isNumber(point) ? (this.x -= point, void (this.y -= point)) : (this.x -= point.x,
25
+ this.y -= point.y, this);
26
+ }
27
+ multi(point) {
28
+ throw new Error("暂不支持");
29
+ }
30
+ div(point) {
31
+ throw new Error("暂不支持");
32
+ }
33
+ }
34
+
35
+ export class PointService {
36
+ static distancePP(p1, p2) {
37
+ return sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2));
38
+ }
39
+ static distanceNN(x, y, x1, y1) {
40
+ return sqrt(pow(x - x1, 2) + pow(y - y1, 2));
41
+ }
42
+ static distancePN(point, x, y) {
43
+ return sqrt(pow(x - point.x, 2) + pow(y - point.y, 2));
44
+ }
45
+ static pointAtPP(p1, p2, t) {
46
+ return new Point((p2.x - p1.x) * t + p1.x, (p2.y - p1.y) * t + p1.y);
47
+ }
48
+ }
49
+
50
+ export class PolarPoint {
51
+ constructor(r = 0, theta = 0, r1, theta1) {
52
+ this.r = 0, this.theta = 0, this.r = r, this.theta = theta, this.r1 = r1, this.theta1 = theta1;
53
+ }
54
+ clone() {
55
+ return new PolarPoint(this.r, this.theta);
56
+ }
57
+ copyFrom(p) {
58
+ return this.r = p.r, this.theta = p.theta, this.r1 = p.r1, this.theta1 = p.theta1,
59
+ this.defined = p.defined, this.context = p.context, this;
60
+ }
61
+ set(r, theta) {
62
+ return this.r = r, this.theta = theta, this;
63
+ }
64
+ }
65
+ //# sourceMappingURL=point.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data-structure/point.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAqBpC,MAAM,OAAO,KAAK;IAWhB,YAAY,IAAY,CAAC,EAAE,IAAY,CAAC,EAAE,EAAW,EAAE,EAAW;QAPlE,MAAC,GAAW,CAAC,CAAC;QACd,MAAC,GAAW,CAAC,CAAC;QAOZ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,KAAK;QACH,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,QAAQ,CAAC,CAAa;QACpB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACb,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACb,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QACf,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,CAAS,EAAE,CAAS;QACtB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,KAA0B;QAC5B,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;YACnB,IAAI,CAAC,CAAC,IAAI,KAAe,CAAC;YAC1B,IAAI,CAAC,CAAC,IAAI,KAAe,CAAC;YAC1B,OAAO;SACR;QACD,IAAI,CAAC,CAAC,IAAiB,KAAM,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC,IAAiB,KAAM,CAAC,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,GAAG,CAAC,KAA0B;QAC5B,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;YACnB,IAAI,CAAC,CAAC,IAAI,KAAe,CAAC;YAC1B,IAAI,CAAC,CAAC,IAAI,KAAe,CAAC;YAC1B,OAAO;SACR;QACD,IAAI,CAAC,CAAC,IAAiB,KAAM,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC,IAAiB,KAAM,CAAC,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,CAAC,KAA0B;QAC9B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IACD,GAAG,CAAC,KAA0B;QAC5B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,YAAY;IAEvB,MAAM,CAAC,UAAU,CAAC,EAAc,EAAE,EAAc;QAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,CAAC,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU;QAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,CAAC,UAAU,CAAC,KAAiB,EAAE,CAAS,EAAE,CAAS;QACvD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;IAGD,MAAM,CAAC,SAAS,CAAC,EAAc,EAAE,EAAc,EAAE,CAAS;QACxD,OAAO,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;CACF;AAsBD,MAAM,OAAO,UAAU;IAQrB,YAAY,IAAY,CAAC,EAAE,QAAgB,CAAC,EAAE,EAAW,EAAE,MAAe;QAP1E,MAAC,GAAW,CAAC,CAAC;QACd,UAAK,GAAW,CAAC,CAAC;QAOhB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK;QACH,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,QAAQ,CAAC,CAAkB;QACzB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACrB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,CAAS,EAAE,KAAa;QAC1B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;CACF","file":"point.js","sourcesContent":["import isNumber from '../common/isNumber';\nimport { pow, sqrt } from '../math';\n\nexport interface IPoint {\n x: number;\n y: number;\n x1?: number;\n y1?: number;\n defined?: boolean; // defined表示这个点是否存在\n context?: any; // context stores addition information for point\n\n clone: () => IPoint;\n copyFrom: (p: IPointLike) => IPoint;\n set: (x: number, y: number) => IPoint;\n add: (point: IPointLike | number) => IPoint;\n sub: (point: IPointLike | number) => IPoint;\n multi: (point: IPointLike | number) => IPoint;\n div: (point: IPointLike | number) => IPoint;\n}\n\nexport type IPointLike = Pick<IPoint, 'x' | 'y' | 'x1' | 'y1' | 'defined' | 'context'>;\n\nexport class Point implements IPoint {\n /**\n * 面积图的下点\n */\n x: number = 0;\n y: number = 0;\n x1?: number;\n y1?: number;\n defined?: boolean;\n context?: any;\n\n constructor(x: number = 0, y: number = 0, x1?: number, y1?: number) {\n this.x = x;\n this.y = y;\n this.x1 = x1;\n this.y1 = y1;\n }\n\n clone(): Point {\n return new Point(this.x, this.y);\n }\n\n copyFrom(p: IPointLike): this {\n this.x = p.x;\n this.y = p.y;\n this.x1 = p.x1;\n this.y1 = p.y1;\n this.defined = p.defined;\n this.context = p.context;\n return this;\n }\n\n set(x: number, y: number): this {\n this.x = x;\n this.y = y;\n return this;\n }\n\n add(point: IPointLike | number): IPoint {\n if (isNumber(point)) {\n this.x += point as number;\n this.y += point as number;\n return;\n }\n this.x += (<IPointLike>point).x;\n this.y += (<IPointLike>point).y;\n return this;\n }\n sub(point: IPointLike | number): IPoint {\n if (isNumber(point)) {\n this.x -= point as number;\n this.y -= point as number;\n return;\n }\n this.x -= (<IPointLike>point).x;\n this.y -= (<IPointLike>point).y;\n return this;\n }\n multi(point: IPointLike | number): IPoint {\n throw new Error('暂不支持');\n }\n div(point: IPointLike | number): IPoint {\n throw new Error('暂不支持');\n }\n}\n\nexport class PointService {\n /* distance */\n static distancePP(p1: IPointLike, p2: IPointLike): number {\n return sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2));\n }\n static distanceNN(x: number, y: number, x1: number, y1: number) {\n return sqrt(pow(x - x1, 2) + pow(y - y1, 2));\n }\n static distancePN(point: IPointLike, x: number, y: number) {\n return sqrt(pow(x - point.x, 2) + pow(y - point.y, 2));\n }\n\n /* point at */\n static pointAtPP(p1: IPointLike, p2: IPointLike, t: number): IPoint {\n return new Point((p2.x - p1.x) * t + p1.x, (p2.y - p1.y) * t + p1.y);\n }\n}\n\nexport interface IPolarPoint {\n r: number;\n theta: number;\n r1?: number;\n theta1?: number;\n defined?: boolean;\n context?: any;\n\n clone: () => IPolarPoint;\n copyFrom: (p: IPolarPoint) => IPolarPoint;\n set: (x: number, y: number) => IPolarPoint;\n // TODO: support if needed\n // add: (point: IPolarPoint | number) => IPolarPoint;\n // sub: (point: IPolarPoint | number) => IPolarPoint;\n // multi: (point: IPolarPoint | number) => IPolarPoint;\n // div: (point: IPolarPoint | number) => IPolarPoint;\n}\n\nexport declare type IPolarPointLike = Pick<IPolarPoint, 'r' | 'theta' | 'r1' | 'theta1' | 'defined' | 'context'>;\n\nexport class PolarPoint implements IPolarPoint {\n r: number = 0;\n theta: number = 0;\n r1?: number;\n theta1?: number;\n defined?: boolean;\n context?: any;\n\n constructor(r: number = 0, theta: number = 0, r1?: number, theta1?: number) {\n this.r = r;\n this.theta = theta;\n this.r1 = r1;\n this.theta1 = theta1;\n }\n\n clone(): PolarPoint {\n return new PolarPoint(this.r, this.theta);\n }\n\n copyFrom(p: IPolarPointLike): this {\n this.r = p.r;\n this.theta = p.theta;\n this.r1 = p.r1;\n this.theta1 = p.theta1;\n this.defined = p.defined;\n this.context = p.context;\n return this;\n }\n\n set(r: number, theta: number): this {\n this.r = r;\n this.theta = theta;\n return this;\n }\n}\n"]}
package/es/dom.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ import type { IPointLike } from './data-structure';
2
+ export declare function getContainerSize(el: HTMLElement | null, defaultWidth?: number, defaultHeight?: number): {
3
+ width: number;
4
+ height: number;
5
+ };
6
+ export declare function getElementAbsolutePosition(element: HTMLElement): IPointLike;
7
+ export declare function getElementRelativePosition(element: HTMLElement, base: HTMLElement): IPointLike;
8
+ export declare function getElementAbsoluteScrollOffset(element: HTMLElement): IPointLike;
9
+ export declare function getElementRelativeScrollOffset(element: HTMLElement, base: HTMLElement): IPointLike;
10
+ export declare function hasParentElement(element: HTMLElement, target: HTMLElement): boolean;
package/es/dom.js ADDED
@@ -0,0 +1,75 @@
1
+ export function getContainerSize(el, defaultWidth = 0, defaultHeight = 0) {
2
+ if (!el) return {
3
+ width: defaultWidth,
4
+ height: defaultHeight
5
+ };
6
+ let getComputedStyle;
7
+ try {
8
+ getComputedStyle = null === window || void 0 === window ? void 0 : window.getComputedStyle;
9
+ } catch (e) {
10
+ getComputedStyle = () => ({});
11
+ }
12
+ const style = getComputedStyle(el), computedWidth = parseFloat(style.width) - parseFloat(style.paddingLeft) - parseFloat(style.paddingRight) || el.clientWidth - 1, computedHeight = parseFloat(style.height) - parseFloat(style.paddingTop) - parseFloat(style.paddingBottom) || el.clientHeight - 1;
13
+ return {
14
+ width: computedWidth <= 0 ? defaultWidth : computedWidth,
15
+ height: computedHeight <= 0 ? defaultHeight : computedHeight
16
+ };
17
+ }
18
+
19
+ export function getElementAbsolutePosition(element) {
20
+ let actualLeft = element.offsetLeft, current = element.offsetParent;
21
+ for (;current; ) actualLeft += current.offsetLeft, current = current.offsetParent;
22
+ let actualTop = element.offsetTop;
23
+ for (current = element.offsetParent; current; ) actualTop += current.offsetTop + current.clientTop,
24
+ current = current.offsetParent;
25
+ return {
26
+ x: actualLeft,
27
+ y: actualTop
28
+ };
29
+ }
30
+
31
+ export function getElementRelativePosition(element, base) {
32
+ const posElement = getElementAbsolutePosition(element), posBase = getElementAbsolutePosition(base);
33
+ return {
34
+ x: posElement.x - posBase.x,
35
+ y: posElement.y - posBase.y
36
+ };
37
+ }
38
+
39
+ const getScrollLeft = element => {
40
+ var _a, _b, _c;
41
+ return element === (null === (_a = null === globalThis || void 0 === globalThis ? void 0 : globalThis.document) || void 0 === _a ? void 0 : _a.body) ? (null === (_c = null === (_b = null === globalThis || void 0 === globalThis ? void 0 : globalThis.document) || void 0 === _b ? void 0 : _b.documentElement) || void 0 === _c ? void 0 : _c.scrollLeft) || element.scrollLeft : "html" === element.tagName.toLowerCase() ? 0 : element.scrollLeft;
42
+ }, getScrollTop = element => {
43
+ var _a, _b, _c;
44
+ return element === (null === (_a = null === globalThis || void 0 === globalThis ? void 0 : globalThis.document) || void 0 === _a ? void 0 : _a.body) ? (null === (_c = null === (_b = null === globalThis || void 0 === globalThis ? void 0 : globalThis.document) || void 0 === _b ? void 0 : _b.documentElement) || void 0 === _c ? void 0 : _c.scrollTop) || element.scrollTop : "html" === element.tagName.toLowerCase() ? 0 : element.scrollTop;
45
+ };
46
+
47
+ export function getElementAbsoluteScrollOffset(element) {
48
+ let actualLeft = getScrollLeft(element), current = element.parentElement;
49
+ for (;current; ) actualLeft += getScrollLeft(current), current = current.parentElement;
50
+ let actualTop = getScrollTop(element);
51
+ for (current = element.parentElement; current; ) actualTop += getScrollTop(current),
52
+ current = current.parentElement;
53
+ return {
54
+ x: actualLeft,
55
+ y: actualTop
56
+ };
57
+ }
58
+
59
+ export function getElementRelativeScrollOffset(element, base) {
60
+ const posElement = getElementAbsoluteScrollOffset(element), posBase = getElementAbsoluteScrollOffset(base);
61
+ return {
62
+ x: posElement.x - posBase.x,
63
+ y: posElement.y - posBase.y
64
+ };
65
+ }
66
+
67
+ export function hasParentElement(element, target) {
68
+ let parent = element.parentNode;
69
+ for (;null !== parent; ) {
70
+ if (parent === target) return !0;
71
+ parent = parent.parentNode;
72
+ }
73
+ return !1;
74
+ }
75
+ //# sourceMappingURL=dom.js.map
package/es/dom.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/dom.ts"],"names":[],"mappings":"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","file":"dom.js","sourcesContent":["import type { IPointLike } from './data-structure';\n\nexport function getContainerSize(el: HTMLElement | null, defaultWidth: number = 0, defaultHeight: number = 0) {\n if (!el) {\n return { width: defaultWidth, height: defaultHeight };\n }\n\n let getComputedStyle;\n try {\n getComputedStyle = window?.getComputedStyle;\n } catch (e) {\n getComputedStyle = () => {\n return {} as CSSStyleDeclaration;\n };\n }\n\n const style = getComputedStyle(el);\n\n // clientWidth/clientHeight: 默认整数,会向上取整,导致canvas > container\n // getBoundingClientRect:默认小数,但是在container上有css类似 transform: scale(0.5)时,获取结果不对\n // getComputedStyle:默认小数,获取最终结果,但是会包含padding;\n const computedWidth =\n parseFloat(style.width) - parseFloat(style.paddingLeft) - parseFloat(style.paddingRight) || el.clientWidth - 1;\n\n const computedHeight =\n parseFloat(style.height) - parseFloat(style.paddingTop) - parseFloat(style.paddingBottom) || el.clientHeight - 1;\n\n // 理论上不用向下取整,目前没加。\n return {\n width: computedWidth <= 0 ? defaultWidth : computedWidth,\n height: computedHeight <= 0 ? defaultHeight : computedHeight\n };\n}\n\n/**\n * 获取元素的绝对位置坐标(相对于页面左上角)\n * @param element\n * @returns\n */\nexport function getElementAbsolutePosition(element: HTMLElement): IPointLike {\n //计算x坐标\n let actualLeft = element.offsetLeft;\n let current = element.offsetParent as HTMLElement;\n while (current) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent as HTMLElement;\n }\n //计算y坐标\n let actualTop = element.offsetTop;\n current = element.offsetParent as HTMLElement;\n while (current) {\n actualTop += current.offsetTop + current.clientTop;\n current = current.offsetParent as HTMLElement;\n }\n return { x: actualLeft, y: actualTop };\n}\n\n/**\n * 获取元素的相对位置坐标(相对于其他dom元素)\n * @param element\n * @returns\n */\nexport function getElementRelativePosition(element: HTMLElement, base: HTMLElement): IPointLike {\n const posElement = getElementAbsolutePosition(element);\n const posBase = getElementAbsolutePosition(base);\n return { x: posElement.x - posBase.x, y: posElement.y - posBase.y };\n}\n\nconst getScrollLeft = (element: HTMLElement) => {\n if (element === globalThis?.document?.body) {\n return globalThis?.document?.documentElement?.scrollLeft || element.scrollLeft;\n } else if (element.tagName.toLowerCase() === 'html') {\n return 0;\n }\n return element.scrollLeft;\n};\nconst getScrollTop = (element: HTMLElement) => {\n if (element === globalThis?.document?.body) {\n return globalThis?.document?.documentElement?.scrollTop || element.scrollTop;\n } else if (element.tagName.toLowerCase() === 'html') {\n return 0;\n }\n return element.scrollTop;\n};\n\n/**\n * 获取元素的绝对滚动偏移量\n * @param element\n * @returns\n */\nexport function getElementAbsoluteScrollOffset(element: HTMLElement): IPointLike {\n //计算x坐标\n let actualLeft = getScrollLeft(element);\n let current = element.parentElement as HTMLElement;\n while (current) {\n actualLeft += getScrollLeft(current);\n current = current.parentElement as HTMLElement;\n }\n //计算y坐标\n let actualTop = getScrollTop(element);\n current = element.parentElement as HTMLElement;\n while (current) {\n actualTop += getScrollTop(current);\n current = current.parentElement as HTMLElement;\n }\n return { x: actualLeft, y: actualTop };\n}\n\n/**\n * 获取元素的相对滚动偏移量(相对于其他dom元素)\n * @param element\n * @returns\n */\nexport function getElementRelativeScrollOffset(element: HTMLElement, base: HTMLElement): IPointLike {\n const posElement = getElementAbsoluteScrollOffset(element);\n const posBase = getElementAbsoluteScrollOffset(base);\n return { x: posElement.x - posBase.x, y: posElement.y - posBase.y };\n}\n\n/**\n * 判断是否是元素的父元素\n * @param element 从其父元素开始查找的 DOM 元素\n * @param target 要查找的目标父元素\n * @returns boolean, true 代表查找到,false 表示未找到\n */\nexport function hasParentElement(element: HTMLElement, target: HTMLElement): boolean {\n let parent = element.parentNode;\n\n while (parent !== null) {\n if (parent === target) {\n return true;\n }\n parent = parent.parentNode;\n }\n\n return false;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export * from './invariant';
2
+ export * from './interface';
@@ -0,0 +1,4 @@
1
+ export * from "./invariant";
2
+
3
+ export * from "./interface";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/geo/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC","file":"index.js","sourcesContent":["export * from './invariant';\nexport * from './interface';\n"]}