@visactor/vutils 0.18.9 → 0.18.11

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 (39) hide show
  1. package/cjs/color/Color.js +12 -7
  2. package/cjs/color/Color.js.map +1 -1
  3. package/cjs/common/cloneDeep.d.ts +1 -1
  4. package/cjs/common/cloneDeep.js +3 -3
  5. package/cjs/common/cloneDeep.js.map +1 -1
  6. package/cjs/common/index.d.ts +1 -1
  7. package/cjs/common/index.js +7 -2
  8. package/cjs/common/index.js.map +1 -1
  9. package/cjs/common/merge.d.ts +1 -0
  10. package/cjs/common/merge.js +7 -6
  11. package/cjs/common/merge.js.map +1 -1
  12. package/cjs/graphics/algorithm/intersect.js +48 -31
  13. package/cjs/graphics/algorithm/intersect.js.map +1 -1
  14. package/cjs/graphics/text/measure/util.d.ts +1 -1
  15. package/cjs/graphics/text/measure/util.js +3 -2
  16. package/cjs/graphics/text/measure/util.js.map +1 -1
  17. package/cjs/math.js +1 -1
  18. package/cjs/math.js.map +1 -1
  19. package/dist/index.js +72 -111
  20. package/dist/index.min.js +1 -1
  21. package/es/color/Color.js +12 -7
  22. package/es/color/Color.js.map +1 -1
  23. package/es/common/cloneDeep.d.ts +1 -1
  24. package/es/common/cloneDeep.js +3 -3
  25. package/es/common/cloneDeep.js.map +1 -1
  26. package/es/common/index.d.ts +1 -1
  27. package/es/common/index.js +1 -1
  28. package/es/common/index.js.map +1 -1
  29. package/es/common/merge.d.ts +1 -0
  30. package/es/common/merge.js +4 -4
  31. package/es/common/merge.js.map +1 -1
  32. package/es/graphics/algorithm/intersect.js +40 -25
  33. package/es/graphics/algorithm/intersect.js.map +1 -1
  34. package/es/graphics/text/measure/util.d.ts +1 -1
  35. package/es/graphics/text/measure/util.js +3 -2
  36. package/es/graphics/text/measure/util.js.map +1 -1
  37. package/es/math.js +1 -1
  38. package/es/math.js.map +1 -1
  39. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphics/algorithm/intersect.ts"],"names":[],"mappings":";;;AACA,uCAA6C;AAG7C,qCAAsE;AAGtE,SAAS,GAAG,CAAC,GAAS,EAAE,EAAQ,EAAE,EAAQ;IACxC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACvB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAGD,IAAI,GAAW,CAAC;AAChB,IAAI,GAAW,CAAC;AAChB,IAAI,GAAW,CAAC;AAChB,IAAI,GAAW,CAAC;AAChB,IAAI,GAAW,CAAC;AAChB,IAAI,GAAW,CAAC;AAChB,IAAI,GAAW,CAAC;AAChB,IAAI,GAAW,CAAC;AAShB,SAAgB,WAAW,CAAC,KAAW,EAAE,MAAY,EAAE,KAAW,EAAE,MAAY;IAC9E,IAAI,IAAI,GAAW,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,IAAI,GAAW,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,IAAI,GAAW,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,IAAI,GAAW,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,KAAa,CAAC;IAClB,IAAI,IAAI,GAAG,IAAI,EAAE;QACf,KAAK,GAAG,IAAI,CAAC;QACb,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;KAC/B;IACD,IAAI,IAAI,GAAG,IAAI,EAAE;QACf,KAAK,GAAG,IAAI,CAAC;QACb,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;KAC/B;IACD,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;QAC9B,OAAO,KAAK,CAAC;KACd;IAED,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,IAAI,IAAI,GAAG,IAAI,EAAE;QACf,KAAK,GAAG,IAAI,CAAC;QACb,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;KAC/B;IACD,IAAI,IAAI,GAAG,IAAI,EAAE;QACf,KAAK,GAAG,IAAI,CAAC;QACb,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;KAC/B;IACD,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;QAC9B,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAhCD,kCAgCC;AAWD,SAAgB,iBAAiB,CAAC,KAAW,EAAE,MAAY,EAAE,KAAW,EAAE,MAAY;IACpF,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE;QAC9C,OAAO,KAAK,CAAC;KACd;IACD,MAAM,IAAI,GAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACzB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAGzB,IAAI,IAAA,oBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,EAAE;QAC7B,OAAO,IAAI,CAAC;KACb;IAQD,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAG,IAAA,mBAAY,EAAC,OAAO,EAAE,IAAI,CAAC,GAAG,IAAA,mBAAY,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACpB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KACzD;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AA5BD,8CA4BC;AASD,SAAgB,gBAAgB,CAC9B,KAAyB,EACzB,KAAyB,EACzB,MAAe;IAEf,IAAI,KAAK,KAAK,IAAI,EAAE;QAClB,OAAO,KAAK,CAAC;KACd;IACD,IAAI,KAAK,KAAK,IAAI,EAAE;QAClB,OAAO,KAAK,CAAC;KACd;IAED,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QACd,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;IAEnB,IAAI,MAAM,EAAE;QACV,IAAI,GAAG,GAAG,GAAG,EAAE;YACb,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SACzB;QACD,IAAI,GAAG,GAAG,GAAG,EAAE;YACb,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SACzB;QACD,IAAI,GAAG,GAAG,GAAG,EAAE;YACb,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SACzB;QACD,IAAI,GAAG,GAAG,GAAG,EAAE;YACb,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SACzB;KACF;IAED,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE;QACxD,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;KACvC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;AAC5G,CAAC;AAxCD,4CAwCC;AAED,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,yCAAQ,CAAA;IACR,2CAAS,CAAA;IACT,2CAAS,CAAA;AACX,CAAC,EAJW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAIpB;AAQD,SAAgB,qBAAqB,CACnC,KAAyB,EACzB,KAAyB,EACzB,MAAe;IAEf,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;QACpB,OAAO,SAAS,CAAC,IAAI,CAAC;KACvB;IAED,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QACd,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;IAEnB,IAAI,MAAM,EAAE;QACV,IAAI,GAAG,GAAG,GAAG,EAAE;YACb,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SACzB;QACD,IAAI,GAAG,GAAG,GAAG,EAAE;YACb,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SACzB;QACD,IAAI,GAAG,GAAG,GAAG,EAAE;YACb,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SACzB;QACD,IAAI,GAAG,GAAG,GAAG,EAAE;YACb,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SACzB;KACF;IAGD,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE;QACpD,OAAO,SAAS,CAAC,KAAK,CAAC;KACxB;IAED,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE;QACpD,OAAO,SAAS,CAAC,KAAK,CAAC;KACxB;IAED,OAAO,SAAS,CAAC,IAAI,CAAC;AACxB,CAAC;AA3CD,sDA2CC;AASD,SAAgB,eAAe,CAAC,KAAyB,EAAE,KAAyB,EAAE,MAAe;IACnG,IAAI,KAAK,IAAI,KAAK,EAAE;QAClB,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE;gBAC5F,OAAO,KAAK,CAAC;aACd;YACD,OAAO,IAAI,CAAC;SACb;QAED,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;YACd,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;YAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;YAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;YAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;YAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;YAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;YAChB,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACnB,IAAI,GAAG,GAAG,GAAG,EAAE;YACb,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SACzB;QACD,IAAI,GAAG,GAAG,GAAG,EAAE;YACb,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SACzB;QACD,IAAI,GAAG,GAAG,GAAG,EAAE;YACb,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SACzB;QACD,IAAI,GAAG,GAAG,GAAG,EAAE;YACb,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SACzB;QAED,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE;YACpD,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC;KACb;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AApCD,0CAoCC;AAQD,SAAgB,WAAW,CAAC,KAA+B,EAAE,IAAwB,EAAE,MAAe;IACpG,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,IAAI,CAAC;KACb;IACD,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;KAC7F;IACD,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACnE,IAAI,GAAG,GAAG,GAAG,EAAE;QACb,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KACzB;IACD,IAAI,GAAG,GAAG,GAAG,EAAE;QACb,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KACzB;IACD,OAAO,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC;AAC9E,CAAC;AAfD,kCAeC;AASD,SAAS,mBAAmB,CAAC,SAA2B,EAAE,IAAsB;IAC9E,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAS,EAAE,GAAW,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IACnE,OAAO;QACL,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAC7E,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;KAC9E,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,GAAgB;IACtC,OAAO;QACL,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;QACxB,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;KACzB,CAAC;AACJ,CAAC;AAWD,SAAS,MAAM,CAAC,GAAgB,EAAE,KAAc;IAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,sBAAc,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO;QACL,MAAM,CACJ;YACE,CAAC,EAAE,GAAG,CAAC,EAAE;YACT,CAAC,EAAE,GAAG,CAAC,EAAE;SACV,EACD,GAAG,EACH,EAAE,CACH;QACD,MAAM,CACJ;YACE,CAAC,EAAE,GAAG,CAAC,EAAE;YACT,CAAC,EAAE,GAAG,CAAC,EAAE;SACV,EACD,GAAG,EACH,EAAE,CACH;QACD,MAAM,CACJ;YACE,CAAC,EAAE,GAAG,CAAC,EAAE;YACT,CAAC,EAAE,GAAG,CAAC,EAAE;SACV,EACD,GAAG,EACH,EAAE,CACH;QACD,MAAM,CACJ;YACE,CAAC,EAAE,GAAG,CAAC,EAAE;YACT,CAAC,EAAE,GAAG,CAAC,EAAE;SACV,EACD,GAAG,EACH,EAAE,CACH;KACF,CAAC;AACJ,CAAC;AACD,SAAgB,qBAAqB,CACnC,IAAiB,EACjB,IAAiB,EACjB,KAAK,GAAG,KAAK,EACb,GAA8B;IAE9B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,CAAC,KAAY,EAAE,GAAU,EAAE,EAAE;QAC1C,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAqB,CAAC;IAChE,CAAC,CAAC;IAEF,IAAI,GAAG,EAAE;QACP,GAAG,CAAC,IAAI,EAAE,CAAC;QACX,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;QACtB,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC;QACtB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC5B,IAAI,KAAK,KAAK,CAAC,EAAE;gBACf,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;aAC5B;iBAAM;gBACL,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;aAC5B;QACH,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,EAAE,CAAC;QACX,GAAG,CAAC,OAAO,EAAE,CAAC;QAEd,GAAG,CAAC,IAAI,EAAE,CAAC;QACX,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC;QACxB,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC;QACtB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC5B,IAAI,KAAK,KAAK,CAAC,EAAE;gBACf,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;aAC5B;iBAAM;gBACL,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;aAC5B;QACH,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,EAAE,CAAC;QACX,GAAG,CAAC,OAAO,EAAE,CAAC;KACf;IAGD,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAEhC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtC,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAG7B,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAGxC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,sBAAc,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,aAAM,CAAC,CAAC,CAAC,IAAA,sBAAc,EAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAE1E,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,sBAAc,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,aAAM,CAAC,CAAC,CAAC,IAAA,sBAAc,EAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1E,IAAI,KAAK,GAAG,UAAG,EAAE;QACf,KAAK,IAAI,UAAG,CAAC;KACd;IACD,IAAI,KAAK,GAAG,UAAG,EAAE;QACf,KAAK,IAAI,UAAG,CAAC;KACd;IAGD,MAAM,OAAO,GAAG,CACd,eAAuB,EACvB,GAAW,EACX,WAA6B,EAC7B,WAA6B,EAC7B,EAAE;QACF,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAqB,CAAC;QACrE,MAAM,gBAAgB,GACpB,CAAC,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;QAClG,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAEhE,OAAO,eAAe,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;IAChE,CAAC,CAAC;IAEF,OAAO,CACL,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;QACnD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;QACnD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC;QAC/C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAChD,CAAC;AACJ,CAAC;AA1FD,sDA0FC","file":"intersect.js","sourcesContent":["/* 用于判断2d相交 */\nimport { degreeToRadian } from '../../angle';\nimport type { IBoundsLike } from '../../data-structure';\nimport type { vec2 } from '../../math';\nimport { pi2, halfPi, crossProduct, fuzzyEqualVec } from '../../math';\nimport type { Point } from './interface';\n\nfunction sub(out: vec2, v1: vec2, v2: vec2) {\n out[0] = v1[0] - v2[0];\n out[1] = v1[1] - v2[1];\n}\n\n// 临时变量\nlet x11: number;\nlet x12: number;\nlet y11: number;\nlet y12: number;\nlet x21: number;\nlet x22: number;\nlet y21: number;\nlet y22: number;\n\n/**\n * 判断直线是否相交,投影法\n * @param left1\n * @param right1\n * @param left2\n * @param right2\n */\nexport function isIntersect(left1: vec2, right1: vec2, left2: vec2, right2: vec2): boolean {\n let min1: number = left1[0];\n let max1: number = right1[0];\n let min2: number = left2[0];\n let max2: number = right2[0];\n let _temp: number;\n if (max1 < min1) {\n _temp = max1;\n (max1 = min1), (min1 = _temp);\n }\n if (max2 < min2) {\n _temp = max2;\n (max2 = min2), (min2 = _temp);\n }\n if (max1 < min2 || max2 < min1) {\n return false;\n }\n\n (min1 = left1[1]), (max1 = right1[1]), (min2 = left2[1]), (max2 = right2[1]);\n if (max1 < min1) {\n _temp = max1;\n (max1 = min1), (min1 = _temp);\n }\n if (max2 < min2) {\n _temp = max2;\n (max2 = min2), (min2 = _temp);\n }\n if (max1 < min2 || max2 < min1) {\n return false;\n }\n\n return true;\n}\n\n/**\n * 获取直线交点\n * 不相交返回false,共线返回true,相交返回交点\n * https://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/565282#565282\n * @param left1\n * @param right1\n * @param left2\n * @param right2\n */\nexport function getIntersectPoint(left1: vec2, right1: vec2, left2: vec2, right2: vec2): boolean | vec2 {\n if (!isIntersect(left1, right1, left2, right2)) {\n return false;\n }\n const dir1: vec2 = [0, 0];\n const dir2: vec2 = [0, 0];\n const tempVec: vec2 = [0, 0];\n sub(dir1, right1, left1);\n sub(dir2, right2, left2);\n\n // 判断共线\n if (fuzzyEqualVec(dir1, dir2)) {\n return true;\n }\n\n // https://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/565282#565282\n // line1: left1 + dir1 * t\n // line2: left2 + dir2 * u\n // 当 left1 + dir1 * t = left2 + dir2 * u => (left1 + dir1 * t) x dir2 = (left2 + dir2 * u) x dir2\n // => dir1 x dir2 * t = (left2 - left1) x dir2 => t = (left2 - left1) x dir2 / (dir1 x dir2)\n // 直线不平行,dir1 x dir2 ≠ 0,当0 <= t <= 1时,可以求出交点\n sub(tempVec, left2, left1);\n const t = crossProduct(tempVec, dir2) / crossProduct(dir1, dir2);\n if (t >= 0 && t <= 1) {\n return [left1[0] + dir1[0] * t, left1[1] + dir1[1] * t];\n }\n\n return false;\n}\n\n/**\n * 获取两个rect的相交部分\n * 如果有bbox为null,返回null,如果不相交返回{x1: 0, y1: 0, x2: 0, y2: 0}\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function getRectIntersect(\n bbox1: IBoundsLike | null,\n bbox2: IBoundsLike | null,\n format: boolean\n): IBoundsLike | null {\n if (bbox1 === null) {\n return bbox2;\n }\n if (bbox2 === null) {\n return bbox1;\n }\n\n (x11 = bbox1.x1),\n (x12 = bbox1.x2),\n (y11 = bbox1.y1),\n (y12 = bbox1.y2),\n (x21 = bbox2.x1),\n (x22 = bbox2.x2),\n (y21 = bbox2.y1),\n (y22 = bbox2.y2);\n\n if (format) {\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n if (x21 > x22) {\n [x21, x22] = [x22, x21];\n }\n if (y21 > y22) {\n [y21, y22] = [y22, y21];\n }\n }\n\n if (x11 >= x22 || x12 <= x21 || y11 >= y22 || y12 <= y21) {\n return { x1: 0, y1: 0, x2: 0, y2: 0 };\n }\n return { x1: Math.max(x11, x21), y1: Math.max(y11, y21), x2: Math.min(x12, x22), y2: Math.min(y12, y22) };\n}\n\nexport enum InnerBBox {\n NONE = 0,\n BBOX1 = 1,\n BBOX2 = 2\n}\n/**\n * 矩形是否在另一个矩形内部\n * 返回InnerBBox\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function rectInsideAnotherRect(\n bbox1: IBoundsLike | null,\n bbox2: IBoundsLike | null,\n format: boolean\n): InnerBBox {\n if (!bbox1 || !bbox2) {\n return InnerBBox.NONE;\n }\n\n (x11 = bbox1.x1),\n (x12 = bbox1.x2),\n (y11 = bbox1.y1),\n (y12 = bbox1.y2),\n (x21 = bbox2.x1),\n (x22 = bbox2.x2),\n (y21 = bbox2.y1),\n (y22 = bbox2.y2);\n\n if (format) {\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n if (x21 > x22) {\n [x21, x22] = [x22, x21];\n }\n if (y21 > y22) {\n [y21, y22] = [y22, y21];\n }\n }\n\n // bbox1在bbox2内部\n if (x11 > x21 && x12 < x22 && y11 > y21 && y12 < y22) {\n return InnerBBox.BBOX1;\n }\n // bbox2在bbox1内部\n if (x21 > x11 && x22 < x12 && y21 > y11 && y22 < y12) {\n return InnerBBox.BBOX2;\n }\n\n return InnerBBox.NONE;\n}\n\n/**\n * 两个矩形是否相交\n * 如果有矩形为null,判断为相交\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function isRectIntersect(bbox1: IBoundsLike | null, bbox2: IBoundsLike | null, format: boolean): boolean {\n if (bbox1 && bbox2) {\n if (!format) {\n if (bbox1.x1 > bbox2.x2 || bbox1.x2 < bbox2.x1 || bbox1.y1 > bbox2.y2 || bbox1.y2 < bbox2.y1) {\n return false;\n }\n return true;\n }\n\n (x11 = bbox1.x1),\n (x12 = bbox1.x2),\n (y11 = bbox1.y1),\n (y12 = bbox1.y2),\n (x21 = bbox2.x1),\n (x22 = bbox2.x2),\n (y21 = bbox2.y1),\n (y22 = bbox2.y2);\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n if (x21 > x22) {\n [x21, x22] = [x22, x21];\n }\n if (y21 > y22) {\n [y21, y22] = [y22, y21];\n }\n\n if (x11 > x22 || x12 < x21 || y11 > y22 || y12 < y21) {\n return false;\n }\n return true;\n }\n return true;\n}\n\n/**\n * 点在box内部\n * 如果bbox为null返回true\n * @param point\n * @param bbox\n */\nexport function pointInRect(point: { x: number; y: number }, bbox: IBoundsLike | null, format: boolean): boolean {\n if (!bbox) {\n return true;\n }\n if (!format) {\n return point.x >= bbox.x1 && point.x <= bbox.x2 && point.y >= bbox.y1 && point.y <= bbox.y2;\n }\n (x11 = bbox.x1), (x12 = bbox.x2), (y11 = bbox.y1), (y12 = bbox.y2);\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n return point.x >= x11 && point.x <= x12 && point.y >= y11 && point.y <= y12;\n}\n\n// 参考https://github.com/francecil/leetcode/issues/1\n\n/**\n * 计算投影半径\n * @param {Array(Number)} checkAxis 检测轴 [cosθ,sinθ]\n * @param {Array} axis 目标轴 [x,y]\n */\nfunction getProjectionRadius(checkAxis: [number, number], axis: [number, number]) {\n return Math.abs(axis[0] * checkAxis[0] + axis[1] * checkAxis[1]);\n}\n\nfunction rotate({ x, y }: Point, deg: number, origin = { x: 0, y: 0 }) {\n return {\n x: (x - origin.x) * Math.cos(deg) + (y - origin.y) * Math.sin(deg) + origin.x,\n y: (x - origin.x) * Math.sin(deg) + (origin.y - y) * Math.cos(deg) + origin.y\n };\n}\n\nfunction getCenterPoint(box: RotateBound): Point {\n return {\n x: (box.x1 + box.x2) / 2,\n y: (box.y1 + box.y2) / 2\n };\n}\n\ninterface RotateBound extends IBoundsLike {\n angle: number;\n rotateCenter?: { x: number; y: number };\n}\n\n/**\n * 转化为顶点坐标数组\n * @param {Object} box\n */\nfunction toRect(box: RotateBound, isDeg: boolean) {\n const deg = isDeg ? box.angle : degreeToRadian(box.angle);\n const cp = getCenterPoint(box);\n return [\n rotate(\n {\n x: box.x1,\n y: box.y1\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x2,\n y: box.y1\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x2,\n y: box.y2\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x1,\n y: box.y2\n },\n deg,\n cp\n )\n ];\n}\nexport function isRotateAABBIntersect(\n box1: RotateBound,\n box2: RotateBound,\n isDeg = false,\n ctx?: CanvasRenderingContext2D\n) {\n const rect1 = toRect(box1, isDeg);\n const rect2 = toRect(box2, isDeg);\n const vector = (start: Point, end: Point) => {\n return [end.x - start.x, end.y - start.y] as [number, number];\n };\n\n if (ctx) {\n ctx.save();\n ctx.fillStyle = 'red';\n ctx.globalAlpha = 0.6;\n rect1.forEach((item, index) => {\n if (index === 0) {\n ctx.moveTo(item.x, item.y);\n } else {\n ctx.lineTo(item.x, item.y);\n }\n });\n ctx.fill();\n ctx.restore();\n\n ctx.save();\n ctx.fillStyle = 'green';\n ctx.globalAlpha = 0.6;\n rect2.forEach((item, index) => {\n if (index === 0) {\n ctx.moveTo(item.x, item.y);\n } else {\n ctx.lineTo(item.x, item.y);\n }\n });\n ctx.fill();\n ctx.restore();\n }\n\n // 两个矩形的中心点\n const p1 = getCenterPoint(box1);\n const p2 = getCenterPoint(box2);\n\n ctx && ctx.fillRect(p1.x, p1.y, 2, 2);\n ctx && ctx.fillRect(p2.x, p2.y, 2, 2);\n // 向量 p1p2\n const vp1p2 = vector(p1, p2);\n\n //矩形1的两边向量\n const AB = vector(rect1[0], rect1[1]);\n const BC = vector(rect1[1], rect1[2]);\n //矩形2的两边向量\n const A1B1 = vector(rect2[0], rect2[1]);\n const B1C1 = vector(rect2[1], rect2[2]);\n\n // 矩形1 的两个弧度\n const deg11 = isDeg ? box1.angle : degreeToRadian(box1.angle);\n let deg12 = isDeg ? box1.angle + halfPi : degreeToRadian(90 - box1.angle);\n // 矩形2 的两个弧度\n const deg21 = isDeg ? box2.angle : degreeToRadian(box2.angle);\n let deg22 = isDeg ? box2.angle + halfPi : degreeToRadian(90 - box2.angle);\n if (deg12 > pi2) {\n deg12 -= pi2;\n }\n if (deg22 > pi2) {\n deg22 -= pi2;\n }\n\n // 投影重叠\n const isCover = (\n checkAxisRadius: number,\n deg: number,\n targetAxis1: [number, number],\n targetAxis2: [number, number]\n ) => {\n const checkAxis = [Math.cos(deg), Math.sin(deg)] as [number, number];\n const targetAxisRadius =\n (getProjectionRadius(checkAxis, targetAxis1) + getProjectionRadius(checkAxis, targetAxis2)) / 2;\n const centerPointRadius = getProjectionRadius(checkAxis, vp1p2);\n // console.log('abc', `checkAxis:${checkAxis},三个投影:${checkAxisRadius}, ${targetAxisRadius}, ${centerPointRadius}`)\n return checkAxisRadius + targetAxisRadius > centerPointRadius;\n };\n\n return (\n isCover((box1.x2 - box1.x1) / 2, deg11, A1B1, B1C1) &&\n isCover((box1.y2 - box1.y1) / 2, deg12, A1B1, B1C1) &&\n isCover((box2.x2 - box2.x1) / 2, deg21, AB, BC) &&\n isCover((box2.y2 - box2.y1) / 2, deg22, AB, BC)\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/graphics/algorithm/intersect.ts"],"names":[],"mappings":"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","file":"intersect.js","sourcesContent":["/* 用于判断2d相交 */\nimport { degreeToRadian } from '../../angle';\nimport type { IBoundsLike } from '../../data-structure';\nimport type { vec2 } from '../../math';\nimport { pi2, halfPi, crossProduct, fuzzyEqualVec } from '../../math';\nimport type { Point } from './interface';\n\nfunction sub(out: vec2, v1: vec2, v2: vec2) {\n out[0] = v1[0] - v2[0];\n out[1] = v1[1] - v2[1];\n}\n\n/**\n * 判断直线是否相交,投影法\n * @param left1\n * @param right1\n * @param left2\n * @param right2\n */\nexport function isIntersect(left1: vec2, right1: vec2, left2: vec2, right2: vec2): boolean {\n let min1: number = left1[0];\n let max1: number = right1[0];\n let min2: number = left2[0];\n let max2: number = right2[0];\n if (max1 < min1) {\n [min1, max1] = [max1, min1];\n }\n if (max2 < min2) {\n [max2, min2] = [min2, max2];\n }\n if (max1 < min2 || max2 < min1) {\n return false;\n }\n\n (min1 = left1[1]), (max1 = right1[1]), (min2 = left2[1]), (max2 = right2[1]);\n if (max1 < min1) {\n [min1, max1] = [max1, min1];\n }\n if (max2 < min2) {\n [max2, min2] = [min2, max2];\n }\n if (max1 < min2 || max2 < min1) {\n return false;\n }\n\n return true;\n}\n\n/**\n * 获取直线交点\n * 不相交返回false,共线返回true,相交返回交点\n * https://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/565282#565282\n * @param left1\n * @param right1\n * @param left2\n * @param right2\n */\nexport function getIntersectPoint(left1: vec2, right1: vec2, left2: vec2, right2: vec2): boolean | vec2 {\n if (!isIntersect(left1, right1, left2, right2)) {\n return false;\n }\n const dir1: vec2 = [0, 0];\n const dir2: vec2 = [0, 0];\n const tempVec: vec2 = [0, 0];\n sub(dir1, right1, left1);\n sub(dir2, right2, left2);\n\n // 判断共线\n if (fuzzyEqualVec(dir1, dir2)) {\n return true;\n }\n\n // https://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/565282#565282\n // line1: left1 + dir1 * t\n // line2: left2 + dir2 * u\n // 当 left1 + dir1 * t = left2 + dir2 * u => (left1 + dir1 * t) x dir2 = (left2 + dir2 * u) x dir2\n // => dir1 x dir2 * t = (left2 - left1) x dir2 => t = (left2 - left1) x dir2 / (dir1 x dir2)\n // 直线不平行,dir1 x dir2 ≠ 0,当0 <= t <= 1时,可以求出交点\n sub(tempVec, left2, left1);\n const t = crossProduct(tempVec, dir2) / crossProduct(dir1, dir2);\n if (t >= 0 && t <= 1) {\n return [left1[0] + dir1[0] * t, left1[1] + dir1[1] * t];\n }\n\n return false;\n}\n\n/**\n * 获取两个rect的相交部分\n * 如果有bbox为null,返回null,如果不相交返回{x1: 0, y1: 0, x2: 0, y2: 0}\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function getRectIntersect(\n bbox1: IBoundsLike | null,\n bbox2: IBoundsLike | null,\n format: boolean\n): IBoundsLike | null {\n if (bbox1 === null) {\n return bbox2;\n }\n if (bbox2 === null) {\n return bbox1;\n }\n\n const { x11, x12, y11, y12, x21, x22, y21, y22 } = formatTwoBBox(bbox1, bbox2, format);\n\n if (x11 >= x22 || x12 <= x21 || y11 >= y22 || y12 <= y21) {\n return { x1: 0, y1: 0, x2: 0, y2: 0 };\n }\n return { x1: Math.max(x11, x21), y1: Math.max(y11, y21), x2: Math.min(x12, x22), y2: Math.min(y12, y22) };\n}\n\nexport enum InnerBBox {\n NONE = 0,\n BBOX1 = 1,\n BBOX2 = 2\n}\n\nconst formatTwoBBox = (bbox1: IBoundsLike, bbox2: IBoundsLike, format: boolean) => {\n let x11 = bbox1.x1;\n let x12 = bbox1.x2;\n let y11 = bbox1.y1;\n let y12 = bbox1.y2;\n let x21 = bbox2.x1;\n let x22 = bbox2.x2;\n let y21 = bbox2.y1;\n let y22 = bbox2.y2;\n\n if (format) {\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n if (x21 > x22) {\n [x21, x22] = [x22, x21];\n }\n if (y21 > y22) {\n [y21, y22] = [y22, y21];\n }\n }\n return { x11, x12, y11, y12, x21, x22, y21, y22 };\n};\n/**\n * 矩形是否在另一个矩形内部\n * 返回InnerBBox\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function rectInsideAnotherRect(\n bbox1: IBoundsLike | null,\n bbox2: IBoundsLike | null,\n format: boolean\n): InnerBBox {\n if (!bbox1 || !bbox2) {\n return InnerBBox.NONE;\n }\n\n const { x11, x12, y11, y12, x21, x22, y21, y22 } = formatTwoBBox(bbox1, bbox2, format);\n // bbox1在bbox2内部\n if (x11 > x21 && x12 < x22 && y11 > y21 && y12 < y22) {\n return InnerBBox.BBOX1;\n }\n // bbox2在bbox1内部\n if (x21 > x11 && x22 < x12 && y21 > y11 && y22 < y12) {\n return InnerBBox.BBOX2;\n }\n\n return InnerBBox.NONE;\n}\n\n/**\n * 两个矩形是否相交\n * 如果有矩形为null,判断为相交\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function isRectIntersect(bbox1: IBoundsLike | null, bbox2: IBoundsLike | null, format: boolean): boolean {\n if (bbox1 && bbox2) {\n if (!format) {\n if (bbox1.x1 > bbox2.x2 || bbox1.x2 < bbox2.x1 || bbox1.y1 > bbox2.y2 || bbox1.y2 < bbox2.y1) {\n return false;\n }\n return true;\n }\n\n const { x11, x12, y11, y12, x21, x22, y21, y22 } = formatTwoBBox(bbox1, bbox2, true);\n\n if (x11 > x22 || x12 < x21 || y11 > y22 || y12 < y21) {\n return false;\n }\n return true;\n }\n return true;\n}\n\n/**\n * 点在box内部\n * 如果bbox为null返回true\n * @param point\n * @param bbox\n */\nexport function pointInRect(point: { x: number; y: number }, bbox: IBoundsLike | null, format: boolean): boolean {\n if (!bbox) {\n return true;\n }\n if (!format) {\n return point.x >= bbox.x1 && point.x <= bbox.x2 && point.y >= bbox.y1 && point.y <= bbox.y2;\n }\n let x11 = bbox.x1;\n let x12 = bbox.x2;\n let y11 = bbox.y1;\n let y12 = bbox.y2;\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n return point.x >= x11 && point.x <= x12 && point.y >= y11 && point.y <= y12;\n}\n\n// 参考https://github.com/francecil/leetcode/issues/1\n\n/**\n * 计算投影半径\n * @param {Array(Number)} checkAxis 检测轴 [cosθ,sinθ]\n * @param {Array} axis 目标轴 [x,y]\n */\nfunction getProjectionRadius(checkAxis: [number, number], axis: [number, number]) {\n return Math.abs(axis[0] * checkAxis[0] + axis[1] * checkAxis[1]);\n}\n\nfunction rotate({ x, y }: Point, deg: number, origin = { x: 0, y: 0 }) {\n return {\n x: (x - origin.x) * Math.cos(deg) + (y - origin.y) * Math.sin(deg) + origin.x,\n y: (x - origin.x) * Math.sin(deg) + (origin.y - y) * Math.cos(deg) + origin.y\n };\n}\n\nfunction getCenterPoint(box: RotateBound): Point {\n return {\n x: (box.x1 + box.x2) / 2,\n y: (box.y1 + box.y2) / 2\n };\n}\n\ninterface RotateBound extends IBoundsLike {\n angle: number;\n rotateCenter?: { x: number; y: number };\n}\n\n/**\n * 转化为顶点坐标数组\n * @param {Object} box\n */\nfunction toRect(box: RotateBound, isDeg: boolean) {\n const deg = isDeg ? box.angle : degreeToRadian(box.angle);\n const cp = getCenterPoint(box);\n return [\n rotate(\n {\n x: box.x1,\n y: box.y1\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x2,\n y: box.y1\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x2,\n y: box.y2\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x1,\n y: box.y2\n },\n deg,\n cp\n )\n ];\n}\nexport function isRotateAABBIntersect(\n box1: RotateBound,\n box2: RotateBound,\n isDeg = false,\n ctx?: CanvasRenderingContext2D\n) {\n const rect1 = toRect(box1, isDeg);\n const rect2 = toRect(box2, isDeg);\n const vector = (start: Point, end: Point) => {\n return [end.x - start.x, end.y - start.y] as [number, number];\n };\n\n if (ctx) {\n ctx.save();\n ctx.fillStyle = 'red';\n ctx.globalAlpha = 0.6;\n rect1.forEach((item, index) => {\n if (index === 0) {\n ctx.moveTo(item.x, item.y);\n } else {\n ctx.lineTo(item.x, item.y);\n }\n });\n ctx.fill();\n ctx.restore();\n\n ctx.save();\n ctx.fillStyle = 'green';\n ctx.globalAlpha = 0.6;\n rect2.forEach((item, index) => {\n if (index === 0) {\n ctx.moveTo(item.x, item.y);\n } else {\n ctx.lineTo(item.x, item.y);\n }\n });\n ctx.fill();\n ctx.restore();\n }\n\n // 两个矩形的中心点\n const p1 = getCenterPoint(box1);\n const p2 = getCenterPoint(box2);\n\n ctx && ctx.fillRect(p1.x, p1.y, 2, 2);\n ctx && ctx.fillRect(p2.x, p2.y, 2, 2);\n // 向量 p1p2\n const vp1p2 = vector(p1, p2);\n\n //矩形1的两边向量\n const AB = vector(rect1[0], rect1[1]);\n const BC = vector(rect1[1], rect1[2]);\n //矩形2的两边向量\n const A1B1 = vector(rect2[0], rect2[1]);\n const B1C1 = vector(rect2[1], rect2[2]);\n\n // 矩形1 的两个弧度\n const deg11 = isDeg ? box1.angle : degreeToRadian(box1.angle);\n let deg12 = isDeg ? box1.angle + halfPi : degreeToRadian(90 - box1.angle);\n // 矩形2 的两个弧度\n const deg21 = isDeg ? box2.angle : degreeToRadian(box2.angle);\n let deg22 = isDeg ? box2.angle + halfPi : degreeToRadian(90 - box2.angle);\n if (deg12 > pi2) {\n deg12 -= pi2;\n }\n if (deg22 > pi2) {\n deg22 -= pi2;\n }\n\n // 投影重叠\n const isCover = (\n checkAxisRadius: number,\n deg: number,\n targetAxis1: [number, number],\n targetAxis2: [number, number]\n ) => {\n const checkAxis = [Math.cos(deg), Math.sin(deg)] as [number, number];\n const targetAxisRadius =\n (getProjectionRadius(checkAxis, targetAxis1) + getProjectionRadius(checkAxis, targetAxis2)) / 2;\n const centerPointRadius = getProjectionRadius(checkAxis, vp1p2);\n // console.log('abc', `checkAxis:${checkAxis},三个投影:${checkAxisRadius}, ${targetAxisRadius}, ${centerPointRadius}`)\n return checkAxisRadius + targetAxisRadius > centerPointRadius;\n };\n\n return (\n isCover((box1.x2 - box1.x1) / 2, deg11, A1B1, B1C1) &&\n isCover((box1.y2 - box1.y1) / 2, deg12, A1B1, B1C1) &&\n isCover((box2.x2 - box2.x1) / 2, deg21, AB, BC) &&\n isCover((box2.y2 - box2.y1) / 2, deg22, AB, BC)\n );\n}\n"]}
@@ -1,2 +1,2 @@
1
1
  import type { ITextFontParams } from './interface';
2
- export declare function getContextFont(text: Partial<ITextFontParams>, defaultAttr?: Partial<ITextFontParams>): string;
2
+ export declare function getContextFont(text: Partial<ITextFontParams>, defaultAttr?: Partial<ITextFontParams>, fontSizeScale?: number): string;
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
 
3
- function getContextFont(text, defaultAttr = {}) {
3
+ function getContextFont(text, defaultAttr = {}, fontSizeScale) {
4
+ fontSizeScale || (fontSizeScale = 1);
4
5
  const {fontStyle: fontStyle = defaultAttr.fontStyle, fontVariant: fontVariant = defaultAttr.fontVariant, fontWeight: fontWeight = defaultAttr.fontWeight, fontSize: fontSize = defaultAttr.fontSize, fontFamily: fontFamily = defaultAttr.fontFamily} = text;
5
- return (fontStyle ? fontStyle + " " : "") + (fontVariant ? fontVariant + " " : "") + (fontWeight ? fontWeight + " " : "") + fontSize + "px " + (fontFamily || "sans-serif");
6
+ return (fontStyle ? fontStyle + " " : "") + (fontVariant ? fontVariant + " " : "") + (fontWeight ? fontWeight + " " : "") + fontSize * fontSizeScale + "px " + (fontFamily || "sans-serif");
6
7
  }
7
8
 
8
9
  Object.defineProperty(exports, "__esModule", {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphics/text/measure/util.ts"],"names":[],"mappings":";;;AAGA,SAAgB,cAAc,CAAC,IAA8B,EAAE,cAAwC,EAAE;IACvG,MAAM,EACJ,SAAS,GAAG,WAAW,CAAC,SAAS,EACjC,WAAW,GAAG,WAAW,CAAC,WAAW,EACrC,UAAU,GAAG,WAAW,CAAC,UAAU,EACnC,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAC/B,UAAU,GAAG,WAAW,CAAC,UAAU,EACpC,GAAG,IAAI,CAAC;IACT,OAAO,CACL,EAAE;QACF,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,QAAQ;QACR,KAAK;QACL,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CACzC,CAAC;AACJ,CAAC;AAjBD,wCAiBC","file":"util.js","sourcesContent":["import type { ITextFontParams } from './interface';\n\n// FIXME: from VRender\nexport function getContextFont(text: Partial<ITextFontParams>, defaultAttr: Partial<ITextFontParams> = {}): string {\n const {\n fontStyle = defaultAttr.fontStyle,\n fontVariant = defaultAttr.fontVariant,\n fontWeight = defaultAttr.fontWeight,\n fontSize = defaultAttr.fontSize,\n fontFamily = defaultAttr.fontFamily\n } = text;\n return (\n '' +\n (fontStyle ? fontStyle + ' ' : '') +\n (fontVariant ? fontVariant + ' ' : '') +\n (fontWeight ? fontWeight + ' ' : '') +\n fontSize +\n 'px ' +\n (fontFamily ? fontFamily : 'sans-serif')\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/graphics/text/measure/util.ts"],"names":[],"mappings":";;;AAGA,SAAgB,cAAc,CAC5B,IAA8B,EAC9B,cAAwC,EAAE,EAC1C,aAAsB;IAEtB,IAAI,CAAC,aAAa,EAAE;QAClB,aAAa,GAAG,CAAC,CAAC;KACnB;IACD,MAAM,EACJ,SAAS,GAAG,WAAW,CAAC,SAAS,EACjC,WAAW,GAAG,WAAW,CAAC,WAAW,EACrC,UAAU,GAAG,WAAW,CAAC,UAAU,EACnC,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAC/B,UAAU,GAAG,WAAW,CAAC,UAAU,EACpC,GAAG,IAAI,CAAC;IACT,OAAO,CACL,EAAE;QACF,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,QAAQ,GAAG,aAAa;QACxB,KAAK;QACL,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CACzC,CAAC;AACJ,CAAC;AAxBD,wCAwBC","file":"util.js","sourcesContent":["import type { ITextFontParams } from './interface';\n\n// FIXME: from VRender\nexport function getContextFont(\n text: Partial<ITextFontParams>,\n defaultAttr: Partial<ITextFontParams> = {},\n fontSizeScale?: number\n): string {\n if (!fontSizeScale) {\n fontSizeScale = 1;\n }\n const {\n fontStyle = defaultAttr.fontStyle,\n fontVariant = defaultAttr.fontVariant,\n fontWeight = defaultAttr.fontWeight,\n fontSize = defaultAttr.fontSize,\n fontFamily = defaultAttr.fontFamily\n } = text;\n return (\n '' +\n (fontStyle ? fontStyle + ' ' : '') +\n (fontVariant ? fontVariant + ' ' : '') +\n (fontWeight ? fontWeight + ' ' : '') +\n fontSize * fontSizeScale +\n 'px ' +\n (fontFamily ? fontFamily : 'sans-serif')\n );\n}\n"]}
package/cjs/math.js CHANGED
@@ -9,7 +9,7 @@ function asin(x) {
9
9
  }
10
10
 
11
11
  function pointAt(x1, y1, x2, y2, t) {
12
- let x, y;
12
+ let x = x2, y = y2;
13
13
  return "number" == typeof x1 && "number" == typeof x2 && (x = (1 - t) * x1 + t * x2),
14
14
  "number" == typeof y1 && "number" == typeof y2 && (y = (1 - t) * y1 + t * y2), {
15
15
  x: x,
package/cjs/math.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/math.ts"],"names":[],"mappings":"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","file":"math.js","sourcesContent":["export const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\nexport const NEWTON_ITERATIONS = 4;\nexport const NEWTON_MIN_SLOPE = 0.001;\nexport const SUBDIVISION_PRECISION = 0.0000001;\nexport const SUBDIVISION_MAX_ITERATIONS = 10;\nexport const pi2 = Math.PI * 2;\n\nexport type vec2 = [number, number] | Float32Array;\nexport type vec3 = [number, number, number] | Float32Array;\nexport type vec4 = [number, number, number, number] | Float32Array;\nexport type vec8 = [number, number, number, number, number, number, number, number] | Float32Array;\nexport type mat4 =\n | [\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number\n ]\n | Float32Array;\n\nexport const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\nexport const pow = Math.pow;\n\nexport function acos(x: number) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x: number) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n\n/**\n * 根据比例获直线上的点\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @param {number} t 指定比例\n * @return {object} 包含 x, y 的点\n */\nexport function pointAt(\n x1: number | null | undefined,\n y1: number | null | undefined,\n x2: number | null | undefined,\n y2: number | null | undefined,\n t: number\n): {\n x: undefined | number;\n y: undefined | number;\n} {\n let x: number | undefined;\n let y: number | undefined;\n if (typeof x1 === 'number' && typeof x2 === 'number') {\n x = (1 - t) * x1 + t * x2;\n }\n if (typeof y1 === 'number' && typeof y2 === 'number') {\n y = (1 - t) * y1 + t * y2;\n }\n return {\n x,\n y\n };\n}\n\nexport function lengthFromPointToLine(\n point: { x: number; y: number },\n point1: { x: number; y: number },\n point2: { x: number; y: number }\n): number {\n // 面积\n const dir1X = point2.x - point1.x;\n const dir1Y = point2.y - point1.y;\n const dir2X = point.x - point1.x;\n const dir2Y = point.y - point1.y;\n const s = Math.abs(dir1X * dir2Y - dir2X * dir1Y);\n const length = Math.sqrt(dir1X * dir1X + dir1Y * dir1Y);\n return s / length;\n}\n\nexport function crossProduct(dir1: vec2, dir2: vec2): number {\n return dir1[0] * dir2[1] - dir1[1] * dir2[0];\n}\n\nexport function crossProductPoint(dir1: { x: number; y: number }, dir2: { x: number; y: number }): number {\n return dir1.x * dir2.y - dir1.y * dir2.x;\n}\n\nexport function dotProduct(a: number[] | Float32Array, b: number[] | Float32Array): number {\n let ret = 0;\n for (let i = 0; i < a.length; ++i) {\n ret += a[i] * b[i];\n }\n return ret;\n}\n\nexport function fuzzyEqualNumber(a: number, b: number): boolean {\n return abs(a - b) < epsilon;\n}\n\nexport function fuzzyEqualVec(a: vec2, b: vec2): boolean {\n return abs(a[0] - b[0]) + abs(a[1] - b[1]) < epsilon;\n}\n\nexport function fixPrecision(num: number, precision = 10) {\n return Math.round(num * precision) / precision;\n}\n\nexport function getDecimalPlaces(n: number): number {\n const dStr = n.toString().split(/[eE]/);\n const s = (dStr[0].split('.')[1] || '').length - (+dStr[1] || 0);\n return s > 0 ? s : 0;\n}\n\nexport function precisionAdd(a: number, b: number) {\n return fixPrecision(a + b, 10 ** Math.max(getDecimalPlaces(a), getDecimalPlaces(b)));\n}\n\nexport function precisionSub(a: number, b: number) {\n return fixPrecision(a - b, 10 ** Math.max(getDecimalPlaces(a), getDecimalPlaces(b)));\n}\n"]}
1
+ {"version":3,"sources":["../src/math.ts"],"names":[],"mappings":"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","file":"math.js","sourcesContent":["export const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\nexport const NEWTON_ITERATIONS = 4;\nexport const NEWTON_MIN_SLOPE = 0.001;\nexport const SUBDIVISION_PRECISION = 0.0000001;\nexport const SUBDIVISION_MAX_ITERATIONS = 10;\nexport const pi2 = Math.PI * 2;\n\nexport type vec2 = [number, number] | Float32Array;\nexport type vec3 = [number, number, number] | Float32Array;\nexport type vec4 = [number, number, number, number] | Float32Array;\nexport type vec8 = [number, number, number, number, number, number, number, number] | Float32Array;\nexport type mat4 =\n | [\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number\n ]\n | Float32Array;\n\nexport const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\nexport const pow = Math.pow;\n\nexport function acos(x: number) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x: number) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n\n/**\n * 根据比例获直线上的点\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @param {number} t 指定比例\n * @return {object} 包含 x, y 的点\n */\nexport function pointAt(\n x1: number | null | undefined,\n y1: number | null | undefined,\n x2: number | null | undefined,\n y2: number | null | undefined,\n t: number\n): {\n x: undefined | number;\n y: undefined | number;\n} {\n let x: number | undefined = x2;\n let y: number | undefined = y2;\n if (typeof x1 === 'number' && typeof x2 === 'number') {\n x = (1 - t) * x1 + t * x2;\n }\n if (typeof y1 === 'number' && typeof y2 === 'number') {\n y = (1 - t) * y1 + t * y2;\n }\n return {\n x,\n y\n };\n}\n\nexport function lengthFromPointToLine(\n point: { x: number; y: number },\n point1: { x: number; y: number },\n point2: { x: number; y: number }\n): number {\n // 面积\n const dir1X = point2.x - point1.x;\n const dir1Y = point2.y - point1.y;\n const dir2X = point.x - point1.x;\n const dir2Y = point.y - point1.y;\n const s = Math.abs(dir1X * dir2Y - dir2X * dir1Y);\n const length = Math.sqrt(dir1X * dir1X + dir1Y * dir1Y);\n return s / length;\n}\n\nexport function crossProduct(dir1: vec2, dir2: vec2): number {\n return dir1[0] * dir2[1] - dir1[1] * dir2[0];\n}\n\nexport function crossProductPoint(dir1: { x: number; y: number }, dir2: { x: number; y: number }): number {\n return dir1.x * dir2.y - dir1.y * dir2.x;\n}\n\nexport function dotProduct(a: number[] | Float32Array, b: number[] | Float32Array): number {\n let ret = 0;\n for (let i = 0; i < a.length; ++i) {\n ret += a[i] * b[i];\n }\n return ret;\n}\n\nexport function fuzzyEqualNumber(a: number, b: number): boolean {\n return abs(a - b) < epsilon;\n}\n\nexport function fuzzyEqualVec(a: vec2, b: vec2): boolean {\n return abs(a[0] - b[0]) + abs(a[1] - b[1]) < epsilon;\n}\n\nexport function fixPrecision(num: number, precision = 10) {\n return Math.round(num * precision) / precision;\n}\n\nexport function getDecimalPlaces(n: number): number {\n const dStr = n.toString().split(/[eE]/);\n const s = (dStr[0].split('.')[1] || '').length - (+dStr[1] || 0);\n return s > 0 ? s : 0;\n}\n\nexport function precisionAdd(a: number, b: number) {\n return fixPrecision(a + b, 10 ** Math.max(getDecimalPlaces(a), getDecimalPlaces(b)));\n}\n\nexport function precisionSub(a: number, b: number) {\n return fixPrecision(a - b, 10 ** Math.max(getDecimalPlaces(a), getDecimalPlaces(b)));\n}\n"]}
package/dist/index.js CHANGED
@@ -545,9 +545,9 @@
545
545
  return _clone(parent, depth);
546
546
  }
547
547
 
548
- function cloneDeep(value) {
548
+ function cloneDeep(value, ignoreWhen, excludeKeys) {
549
549
  let result;
550
- if (!isValid(value) || typeof value !== 'object') {
550
+ if (!isValid(value) || typeof value !== 'object' || (ignoreWhen && ignoreWhen(value))) {
551
551
  return value;
552
552
  }
553
553
  const isArr = isArray(value);
@@ -573,13 +573,18 @@
573
573
  while (++index < (props || value).length) {
574
574
  const key = props ? props[index] : index;
575
575
  const subValue = value[key];
576
- result[key] = cloneDeep(subValue);
576
+ if (excludeKeys && excludeKeys.includes(key.toString())) {
577
+ result[key] = subValue;
578
+ }
579
+ else {
580
+ result[key] = cloneDeep(subValue, ignoreWhen, excludeKeys);
581
+ }
577
582
  }
578
583
  }
579
584
  return result;
580
585
  }
581
586
 
582
- function baseMerge(target, source, shallowArray = false) {
587
+ function baseMerge(target, source, shallowArray = false, skipTargetArray = false) {
583
588
  if (source) {
584
589
  if (target === source) {
585
590
  return;
@@ -594,8 +599,10 @@
594
599
  let propIndex = -1;
595
600
  while (length--) {
596
601
  const key = props[++propIndex];
597
- if (isValid(iterable[key]) && typeof iterable[key] === 'object') {
598
- baseMergeDeep(target, source, key, shallowArray);
602
+ if (isValid(iterable[key]) &&
603
+ typeof iterable[key] === 'object' &&
604
+ (!skipTargetArray || !isArray(target[key]))) {
605
+ baseMergeDeep(target, source, key, shallowArray, skipTargetArray);
599
606
  }
600
607
  else {
601
608
  assignMergeValue(target, key, iterable[key]);
@@ -604,7 +611,7 @@
604
611
  }
605
612
  }
606
613
  }
607
- function baseMergeDeep(target, source, key, shallowArray = false) {
614
+ function baseMergeDeep(target, source, key, shallowArray = false, skipTargetArray = false) {
608
615
  const objValue = target[key];
609
616
  const srcValue = source[key];
610
617
  let newValue = source[key];
@@ -635,7 +642,7 @@
635
642
  isCommon = false;
636
643
  }
637
644
  if (isCommon) {
638
- baseMerge(newValue, srcValue, shallowArray);
645
+ baseMerge(newValue, srcValue, shallowArray, skipTargetArray);
639
646
  }
640
647
  assignMergeValue(target, key, newValue);
641
648
  }
@@ -1800,8 +1807,8 @@
1800
1807
  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);
1801
1808
  }
1802
1809
  function pointAt(x1, y1, x2, y2, t) {
1803
- let x;
1804
- let y;
1810
+ let x = x2;
1811
+ let y = y2;
1805
1812
  if (typeof x1 === 'number' && typeof x2 === 'number') {
1806
1813
  x = (1 - t) * x1 + t * x2;
1807
1814
  }
@@ -2868,6 +2875,24 @@
2868
2875
  function LinearToSRGB(c) {
2869
2876
  return c < 0.0031308 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055;
2870
2877
  }
2878
+ const setHex = (formatValue, forceHex) => {
2879
+ const isHex = REG_HEX.exec(formatValue);
2880
+ if (forceHex || isHex) {
2881
+ const hex = parseInt(isHex[1], 16);
2882
+ const hexLength = isHex[1].length;
2883
+ if (hexLength === 3) {
2884
+ return new RGB(((hex >> 8) & 0xf) + (((hex >> 8) & 0xf) << 4), ((hex >> 4) & 0xf) + (((hex >> 4) & 0xf) << 4), (hex & 0xf) + ((hex & 0xf) << 4), 1);
2885
+ }
2886
+ if (hexLength === 6) {
2887
+ return rgb(hex);
2888
+ }
2889
+ else if (hexLength === 8) {
2890
+ return new RGB((hex >> 24) & 0xff, (hex >> 16) & 0xff, (hex >> 8) & 0xff, (hex & 0xff) / 0xff);
2891
+ }
2892
+ return null;
2893
+ }
2894
+ return undefined;
2895
+ };
2871
2896
  class Color {
2872
2897
  static Brighter(source, b = 1) {
2873
2898
  if (b === 1) {
@@ -2906,20 +2931,9 @@
2906
2931
  return rgb(DEFAULT_COLORS[value]);
2907
2932
  }
2908
2933
  const formatValue = `${value}`.trim().toLowerCase();
2909
- const isHex = REG_HEX.exec(formatValue);
2910
- if (isHex) {
2911
- const hex = parseInt(isHex[1], 16);
2912
- const hexLength = isHex[1].length;
2913
- if (hexLength === 3) {
2914
- return new RGB(((hex >> 8) & 0xf) + (((hex >> 8) & 0xf) << 4), ((hex >> 4) & 0xf) + (((hex >> 4) & 0xf) << 4), (hex & 0xf) + ((hex & 0xf) << 4), 1);
2915
- }
2916
- if (hexLength === 6) {
2917
- return rgb(hex);
2918
- }
2919
- else if (hexLength === 8) {
2920
- return new RGB((hex >> 24) & 0xff, (hex >> 16) & 0xff, (hex >> 8) & 0xff, (hex & 0xff) / 0xff);
2921
- }
2922
- return;
2934
+ const hexRes = setHex(value);
2935
+ if (hexRes !== undefined) {
2936
+ return hexRes;
2923
2937
  }
2924
2938
  if (/^(rgb|RGB|rgba|RGBA)/.test(formatValue)) {
2925
2939
  const aColor = formatValue.replace(/(?:\(|\)|rgba|RGBA|rgb|RGB)*/g, '').split(',');
@@ -3004,19 +3018,8 @@
3004
3018
  }
3005
3019
  setHex(value) {
3006
3020
  const formatValue = `${value}`.trim().toLowerCase();
3007
- const isHex = REG_HEX.exec(formatValue);
3008
- const hex = parseInt(isHex[1], 16);
3009
- const hexLength = isHex[1].length;
3010
- if (hexLength === 3) {
3011
- return new RGB(((hex >> 8) & 0xf) + (((hex >> 8) & 0xf) << 4), ((hex >> 4) & 0xf) + (((hex >> 4) & 0xf) << 4), (hex & 0xf) + ((hex & 0xf) << 4), 1);
3012
- }
3013
- if (hexLength === 6) {
3014
- return rgb(hex);
3015
- }
3016
- else if (hexLength === 8) {
3017
- return new RGB((hex >> 24) & 0xff, (hex >> 16) & 0xff, (hex >> 8) & 0xff, (hex & 0xff) / 0xff);
3018
- }
3019
- return this;
3021
+ const res = setHex(formatValue, true);
3022
+ return res !== null && res !== void 0 ? res : this;
3020
3023
  }
3021
3024
  setColorName(name) {
3022
3025
  const hex = DEFAULT_COLORS[name.toLowerCase()];
@@ -3202,39 +3205,26 @@
3202
3205
  out[0] = v1[0] - v2[0];
3203
3206
  out[1] = v1[1] - v2[1];
3204
3207
  }
3205
- let x11;
3206
- let x12;
3207
- let y11;
3208
- let y12;
3209
- let x21;
3210
- let x22;
3211
- let y21;
3212
- let y22;
3213
3208
  function isIntersect(left1, right1, left2, right2) {
3214
3209
  let min1 = left1[0];
3215
3210
  let max1 = right1[0];
3216
3211
  let min2 = left2[0];
3217
3212
  let max2 = right2[0];
3218
- let _temp;
3219
3213
  if (max1 < min1) {
3220
- _temp = max1;
3221
- (max1 = min1), (min1 = _temp);
3214
+ [min1, max1] = [max1, min1];
3222
3215
  }
3223
3216
  if (max2 < min2) {
3224
- _temp = max2;
3225
- (max2 = min2), (min2 = _temp);
3217
+ [max2, min2] = [min2, max2];
3226
3218
  }
3227
3219
  if (max1 < min2 || max2 < min1) {
3228
3220
  return false;
3229
3221
  }
3230
3222
  (min1 = left1[1]), (max1 = right1[1]), (min2 = left2[1]), (max2 = right2[1]);
3231
3223
  if (max1 < min1) {
3232
- _temp = max1;
3233
- (max1 = min1), (min1 = _temp);
3224
+ [min1, max1] = [max1, min1];
3234
3225
  }
3235
3226
  if (max2 < min2) {
3236
- _temp = max2;
3237
- (max2 = min2), (min2 = _temp);
3227
+ [max2, min2] = [min2, max2];
3238
3228
  }
3239
3229
  if (max1 < min2 || max2 < min1) {
3240
3230
  return false;
@@ -3267,28 +3257,7 @@
3267
3257
  if (bbox2 === null) {
3268
3258
  return bbox1;
3269
3259
  }
3270
- (x11 = bbox1.x1),
3271
- (x12 = bbox1.x2),
3272
- (y11 = bbox1.y1),
3273
- (y12 = bbox1.y2),
3274
- (x21 = bbox2.x1),
3275
- (x22 = bbox2.x2),
3276
- (y21 = bbox2.y1),
3277
- (y22 = bbox2.y2);
3278
- if (format) {
3279
- if (x11 > x12) {
3280
- [x11, x12] = [x12, x11];
3281
- }
3282
- if (y11 > y12) {
3283
- [y11, y12] = [y12, y11];
3284
- }
3285
- if (x21 > x22) {
3286
- [x21, x22] = [x22, x21];
3287
- }
3288
- if (y21 > y22) {
3289
- [y21, y22] = [y22, y21];
3290
- }
3291
- }
3260
+ const { x11, x12, y11, y12, x21, x22, y21, y22 } = formatTwoBBox(bbox1, bbox2, format);
3292
3261
  if (x11 >= x22 || x12 <= x21 || y11 >= y22 || y12 <= y21) {
3293
3262
  return { x1: 0, y1: 0, x2: 0, y2: 0 };
3294
3263
  }
@@ -3300,18 +3269,15 @@
3300
3269
  InnerBBox[InnerBBox["BBOX1"] = 1] = "BBOX1";
3301
3270
  InnerBBox[InnerBBox["BBOX2"] = 2] = "BBOX2";
3302
3271
  })(exports.InnerBBox || (exports.InnerBBox = {}));
3303
- function rectInsideAnotherRect(bbox1, bbox2, format) {
3304
- if (!bbox1 || !bbox2) {
3305
- return exports.InnerBBox.NONE;
3306
- }
3307
- (x11 = bbox1.x1),
3308
- (x12 = bbox1.x2),
3309
- (y11 = bbox1.y1),
3310
- (y12 = bbox1.y2),
3311
- (x21 = bbox2.x1),
3312
- (x22 = bbox2.x2),
3313
- (y21 = bbox2.y1),
3314
- (y22 = bbox2.y2);
3272
+ const formatTwoBBox = (bbox1, bbox2, format) => {
3273
+ let x11 = bbox1.x1;
3274
+ let x12 = bbox1.x2;
3275
+ let y11 = bbox1.y1;
3276
+ let y12 = bbox1.y2;
3277
+ let x21 = bbox2.x1;
3278
+ let x22 = bbox2.x2;
3279
+ let y21 = bbox2.y1;
3280
+ let y22 = bbox2.y2;
3315
3281
  if (format) {
3316
3282
  if (x11 > x12) {
3317
3283
  [x11, x12] = [x12, x11];
@@ -3326,6 +3292,13 @@
3326
3292
  [y21, y22] = [y22, y21];
3327
3293
  }
3328
3294
  }
3295
+ return { x11, x12, y11, y12, x21, x22, y21, y22 };
3296
+ };
3297
+ function rectInsideAnotherRect(bbox1, bbox2, format) {
3298
+ if (!bbox1 || !bbox2) {
3299
+ return exports.InnerBBox.NONE;
3300
+ }
3301
+ const { x11, x12, y11, y12, x21, x22, y21, y22 } = formatTwoBBox(bbox1, bbox2, format);
3329
3302
  if (x11 > x21 && x12 < x22 && y11 > y21 && y12 < y22) {
3330
3303
  return exports.InnerBBox.BBOX1;
3331
3304
  }
@@ -3342,26 +3315,7 @@
3342
3315
  }
3343
3316
  return true;
3344
3317
  }
3345
- (x11 = bbox1.x1),
3346
- (x12 = bbox1.x2),
3347
- (y11 = bbox1.y1),
3348
- (y12 = bbox1.y2),
3349
- (x21 = bbox2.x1),
3350
- (x22 = bbox2.x2),
3351
- (y21 = bbox2.y1),
3352
- (y22 = bbox2.y2);
3353
- if (x11 > x12) {
3354
- [x11, x12] = [x12, x11];
3355
- }
3356
- if (y11 > y12) {
3357
- [y11, y12] = [y12, y11];
3358
- }
3359
- if (x21 > x22) {
3360
- [x21, x22] = [x22, x21];
3361
- }
3362
- if (y21 > y22) {
3363
- [y21, y22] = [y22, y21];
3364
- }
3318
+ const { x11, x12, y11, y12, x21, x22, y21, y22 } = formatTwoBBox(bbox1, bbox2, true);
3365
3319
  if (x11 > x22 || x12 < x21 || y11 > y22 || y12 < y21) {
3366
3320
  return false;
3367
3321
  }
@@ -3376,7 +3330,10 @@
3376
3330
  if (!format) {
3377
3331
  return point.x >= bbox.x1 && point.x <= bbox.x2 && point.y >= bbox.y1 && point.y <= bbox.y2;
3378
3332
  }
3379
- (x11 = bbox.x1), (x12 = bbox.x2), (y11 = bbox.y1), (y12 = bbox.y2);
3333
+ let x11 = bbox.x1;
3334
+ let x12 = bbox.x2;
3335
+ let y11 = bbox.y1;
3336
+ let y12 = bbox.y2;
3380
3337
  if (x11 > x12) {
3381
3338
  [x11, x12] = [x12, x11];
3382
3339
  }
@@ -4086,13 +4043,16 @@
4086
4043
  return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC3\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC08\uDC26](?:\u200D\u2B1B)?|[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;
4087
4044
  };
4088
4045
 
4089
- function getContextFont(text, defaultAttr = {}) {
4046
+ function getContextFont(text, defaultAttr = {}, fontSizeScale) {
4047
+ if (!fontSizeScale) {
4048
+ fontSizeScale = 1;
4049
+ }
4090
4050
  const { fontStyle = defaultAttr.fontStyle, fontVariant = defaultAttr.fontVariant, fontWeight = defaultAttr.fontWeight, fontSize = defaultAttr.fontSize, fontFamily = defaultAttr.fontFamily } = text;
4091
4051
  return ('' +
4092
4052
  (fontStyle ? fontStyle + ' ' : '') +
4093
4053
  (fontVariant ? fontVariant + ' ' : '') +
4094
4054
  (fontWeight ? fontWeight + ' ' : '') +
4095
- fontSize +
4055
+ fontSize * fontSizeScale +
4096
4056
  'px ' +
4097
4057
  (fontFamily ? fontFamily : 'sans-serif'));
4098
4058
  }
@@ -6133,6 +6093,7 @@
6133
6093
  exports.ascending = ascending;
6134
6094
  exports.asin = asin;
6135
6095
  exports.atan2 = atan2;
6096
+ exports.baseMerge = baseMerge;
6136
6097
  exports.binaryFuzzySearch = binaryFuzzySearch;
6137
6098
  exports.binaryFuzzySearchInNumberRange = binaryFuzzySearchInNumberRange;
6138
6099
  exports.bisect = bisect;