@visactor/vrender-components 0.15.0-alpha.20 → 0.15.0-alpha.22

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 (99) hide show
  1. package/cjs/axis/line.js +1 -1
  2. package/cjs/axis/line.js.map +1 -1
  3. package/cjs/index.d.ts +1 -1
  4. package/cjs/index.js +1 -1
  5. package/cjs/index.js.map +1 -1
  6. package/cjs/label/base.js +12 -10
  7. package/cjs/label/base.js.map +1 -1
  8. package/cjs/label/type.d.ts +1 -0
  9. package/cjs/label/type.js.map +1 -1
  10. package/cjs/legend/discrete/discrete.js +28 -27
  11. package/cjs/legend/discrete/discrete.js.map +1 -1
  12. package/cjs/legend/size/size.d.ts +2 -2
  13. package/cjs/legend/size/size.js.map +1 -1
  14. package/cjs/marker/area.d.ts +1 -20
  15. package/cjs/marker/area.js +33 -35
  16. package/cjs/marker/area.js.map +1 -1
  17. package/cjs/marker/base.d.ts +1 -0
  18. package/cjs/marker/base.js +3 -0
  19. package/cjs/marker/base.js.map +1 -1
  20. package/cjs/marker/config.d.ts +1 -1
  21. package/cjs/marker/config.js.map +1 -1
  22. package/cjs/marker/line.js +23 -12
  23. package/cjs/marker/line.js.map +1 -1
  24. package/cjs/marker/point.d.ts +7 -7
  25. package/cjs/marker/point.js +16 -7
  26. package/cjs/marker/point.js.map +1 -1
  27. package/cjs/marker/type.d.ts +7 -4
  28. package/cjs/marker/type.js.map +1 -1
  29. package/cjs/marker/util.d.ts +1 -0
  30. package/cjs/marker/util.js +3 -0
  31. package/cjs/marker/util.js.map +1 -0
  32. package/cjs/pager/pager.js +4 -2
  33. package/cjs/pager/pager.js.map +1 -1
  34. package/cjs/segment/segment.d.ts +11 -6
  35. package/cjs/segment/segment.js +82 -40
  36. package/cjs/segment/segment.js.map +1 -1
  37. package/cjs/segment/type.d.ts +5 -3
  38. package/cjs/segment/type.js.map +1 -1
  39. package/cjs/util/index.d.ts +1 -1
  40. package/cjs/util/index.js +1 -1
  41. package/cjs/util/index.js.map +1 -1
  42. package/cjs/util/{labelSmartInvert.js → label-smartInvert.js} +1 -1
  43. package/cjs/util/label-smartInvert.js.map +1 -0
  44. package/cjs/util/limit-shape.d.ts +3 -0
  45. package/cjs/util/limit-shape.js +14 -0
  46. package/cjs/util/limit-shape.js.map +1 -0
  47. package/dist/index.js +282 -169
  48. package/dist/index.min.js +1 -1
  49. package/es/axis/line.js +1 -1
  50. package/es/axis/line.js.map +1 -1
  51. package/es/index.d.ts +1 -1
  52. package/es/index.js +1 -1
  53. package/es/index.js.map +1 -1
  54. package/es/label/base.js +5 -3
  55. package/es/label/base.js.map +1 -1
  56. package/es/label/type.d.ts +1 -0
  57. package/es/label/type.js.map +1 -1
  58. package/es/legend/discrete/discrete.js +26 -25
  59. package/es/legend/discrete/discrete.js.map +1 -1
  60. package/es/legend/size/size.d.ts +2 -2
  61. package/es/legend/size/size.js.map +1 -1
  62. package/es/marker/area.d.ts +1 -20
  63. package/es/marker/area.js +34 -34
  64. package/es/marker/area.js.map +1 -1
  65. package/es/marker/base.d.ts +1 -0
  66. package/es/marker/base.js +3 -0
  67. package/es/marker/base.js.map +1 -1
  68. package/es/marker/config.d.ts +1 -1
  69. package/es/marker/config.js.map +1 -1
  70. package/es/marker/line.js +24 -11
  71. package/es/marker/line.js.map +1 -1
  72. package/es/marker/point.d.ts +7 -7
  73. package/es/marker/point.js +17 -6
  74. package/es/marker/point.js.map +1 -1
  75. package/es/marker/type.d.ts +7 -4
  76. package/es/marker/type.js.map +1 -1
  77. package/es/marker/util.d.ts +1 -0
  78. package/es/marker/util.js +3 -0
  79. package/es/marker/util.js.map +1 -0
  80. package/es/pager/pager.js +4 -2
  81. package/es/pager/pager.js.map +1 -1
  82. package/es/segment/segment.d.ts +11 -6
  83. package/es/segment/segment.js +81 -41
  84. package/es/segment/segment.js.map +1 -1
  85. package/es/segment/type.d.ts +5 -3
  86. package/es/segment/type.js.map +1 -1
  87. package/es/util/index.d.ts +1 -1
  88. package/es/util/index.js +1 -1
  89. package/es/util/index.js.map +1 -1
  90. package/es/util/{labelSmartInvert.js → label-smartInvert.js} +1 -1
  91. package/es/util/label-smartInvert.js.map +1 -0
  92. package/es/util/limit-shape.d.ts +3 -0
  93. package/es/util/limit-shape.js +8 -0
  94. package/es/util/limit-shape.js.map +1 -0
  95. package/package.json +4 -4
  96. package/cjs/util/labelSmartInvert.js.map +0 -1
  97. package/es/util/labelSmartInvert.js.map +0 -1
  98. /package/cjs/util/{labelSmartInvert.d.ts → label-smartInvert.d.ts} +0 -0
  99. /package/es/util/{labelSmartInvert.d.ts → label-smartInvert.d.ts} +0 -0
package/es/axis/line.js CHANGED
@@ -144,7 +144,7 @@ export class LineAxis extends AxisBase {
144
144
  }
145
145
  beforeLabelsOverlap(labelShapes, labelData, labelContainer, layer, layerCount) {
146
146
  const {flush: flush = !1} = this.attribute.label || {};
147
- if (flush) {
147
+ if (flush && labelShapes.length) {
148
148
  const {orient: orient, start: start, end: end} = this.attribute, isX = "bottom" === orient || "top" === orient, first = labelShapes[0], last = peek(labelShapes), isInverse = isX ? first.attribute.x > last.attribute.x : first.attribute.y < last.attribute.y;
149
149
  if (isX) {
150
150
  const width = Math.abs(start.x - end.x);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/axis/line.ts"],"names":[],"mappings":";;;;;;;;;;;AAIA,OAAO,EACL,GAAG,EACH,KAAK,EACL,KAAK,EACL,aAAa,EACb,OAAO,EACP,UAAU,EACV,aAAa,EACb,OAAO,EACP,gBAAgB,EAChB,KAAK,EACL,IAAI,IAAI,IAAI,EACb,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,UAAU,EAA8D,MAAM,mBAAmB,CAAC;AAG3G,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGzC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC7G,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAM7C,MAAM,OAAO,QAAS,SAAQ,QAA4B;IAGxD,YAAY,UAA8B,EAAE,IAAkB;QAC5D,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,iBAAiB,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACpB;IACH,CAAC;IAES,YAAY,CAAC,SAAiB;;QACtC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC9B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAIjC,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE;YAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YACzC,MAAM,mBAAmB,GAAG,aAAa,CAAC,UAAU,CAAC;YACrD,MAAM,MAAM,GAAG,UAAU,iBACvB,CAAC,EAAE,mBAAmB,CAAC,EAAE,EACzB,CAAC,EAAE,mBAAmB,CAAC,EAAE,EACzB,KAAK,EAAE,mBAAmB,CAAC,KAAK,EAAE,EAClC,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,IACjC,KAAK,CAAC,KAAK,EACd,CAAC;YACH,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC,UAAU,CAAC;YAC3C,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAE1C,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,MAAA,KAAK,CAAC,KAAK,mCAAI,EAAE,CAAC,CAAC;YAC7D,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;SAC9D;IACH,CAAC;IAGS,UAAU,CAAC,SAAiB;QACpC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,SAA+B,CAAC;QAClE,MAAM,KACJ,IAAsB,EADlB,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,OAC7D,EADkE,aAAa,cAAjG,6FAAmG,CACjF,CAAC;QACzB,MAAM,SAAS,GAAG,gBAChB,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EACpB,WAAW;YACX,SAAS,EACT,SAAS,EAAE,KAAK,IACb,aAAa,CACI,CAAC;QAEvB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACnB,SAAS,CAAC,KAAK,GAAG;gBAChB,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC;gBACtC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC;aACzC,CAAC;SACH;QAED,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7C,aAAa,CAAC,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC;QAC5C,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC3C,SAAS,CAAC,GAAG,CAAC,aAAiC,CAAC,CAAC;IACnD,CAAC;IAGS,iBAAiB;;QACzB,MAAM,KASF,IAAI,CAAC,SAAS,CAAC,KAAwB,EATrC,EACJ,QAAQ,GAAG,QAAQ,EACnB,KAAK,GAAG,CAAC,EACT,SAAS,GAAG,EAAE,EACd,UAAU,GAAG,IAAI,EACjB,KAAK,EACL,UAAU,EACV,KAAK,OAEoC,EADtC,SAAS,cARR,gFASL,CAA0C,CAAC;QAC5C,IAAI,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,QAAQ,KAAK,OAAO,EAAE;YACxB,OAAO,GAAG,CAAC,CAAC;SACb;aAAM,IAAI,QAAQ,KAAK,KAAK,EAAE;YAC7B,OAAO,GAAG,CAAC,CAAC;SACb;QACD,MAAM,EAAE,cAAc,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9C,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE5C,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,CAAA,MAAA,IAAI,CAAC,SAAS,CAAC,KAAK,0CAAE,OAAO,KAAI,CAAA,MAAA,IAAI,CAAC,SAAS,CAAC,KAAK,0CAAE,MAAM,MAAK,KAAK,EAAE;YAC3E,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;YACrD,WAAW,IAAI,KAAK,CAAC;YACrB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC;YAC/D,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;gBACvB,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;gBACvE,IAAI,QAAQ,CAAC,iBAAiB,CAAC,EAAE;oBAC/B,WAAW,IAAI,iBAAiB,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;iBAC7D;qBAAM;oBACL,WAAW,GAAG,CAAC,CAAC;iBACjB;aACF;iBAAM;gBACL,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;oBACvB,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;oBAChE,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE;wBACzB,WAAW,IAAI,WAAW,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;qBACvD;yBAAM;wBACL,WAAW,GAAG,CAAC,CAAC;qBACjB;iBACF;qBAAM;oBAEL,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;wBAC5D,WAAW,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChF,CAAC,CAAC,CAAC;iBACJ;gBAED,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACvD,MAAM,gBAAgB,GAAG,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,MAAM,CAAC;gBACvE,MAAM,YAAY,GAAG,SAAS,KAAK,QAAQ,CAAC;gBAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACpC,IAAI,MAAM,KAAK,CAAC,EAAE;oBAChB,WAAW,GAAG,SAAS;wBACrB,CAAC,CAAC,gBAAgB;4BAChB,CAAC,CAAC,WAAW;4BACb,CAAC,CAAC,YAAY;gCACd,CAAC,CAAC,WAAW,GAAG,CAAC;gCACjB,CAAC,CAAC,KAAK;wBACT,CAAC,CAAC,gBAAgB;4BAClB,CAAC,CAAC,KAAK;4BACP,CAAC,CAAC,YAAY;gCACd,CAAC,CAAC,WAAW,GAAG,CAAC;gCACjB,CAAC,CAAC,WAAW,CAAC;iBACjB;qBAAM;oBACL,WAAW,GAAG,SAAS;wBACrB,CAAC,CAAC,gBAAgB;4BAChB,CAAC,CAAC,KAAK;4BACP,CAAC,CAAC,YAAY;gCACd,CAAC,CAAC,WAAW,GAAG,CAAC;gCACjB,CAAC,CAAC,WAAW;wBACf,CAAC,CAAC,gBAAgB;4BAClB,CAAC,CAAC,WAAW;4BACb,CAAC,CAAC,YAAY;gCACd,CAAC,CAAC,WAAW,GAAG,CAAC;gCACjB,CAAC,CAAC,KAAK,CAAC;iBACX;aACF;SACF;QAGD,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,CAAA,MAAA,IAAI,CAAC,SAAS,CAAC,IAAI,0CAAE,OAAO,KAAI,CAAA,MAAA,IAAI,CAAC,SAAS,CAAC,IAAI,0CAAE,MAAM,MAAK,KAAK,EAAE;YACzE,UAAU,GAAG,CAAA,MAAA,IAAI,CAAC,SAAS,CAAC,IAAI,0CAAE,MAAM,KAAI,CAAC,CAAC;SAC/C;QACD,IAAI,CAAA,MAAA,IAAI,CAAC,SAAS,CAAC,OAAO,0CAAE,OAAO,KAAI,CAAA,MAAA,IAAI,CAAC,SAAS,CAAC,OAAO,0CAAE,MAAM,MAAK,KAAK,EAAE;YAC/E,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAA,MAAA,IAAI,CAAC,SAAS,CAAC,OAAO,0CAAE,MAAM,KAAI,CAAC,CAAC,CAAC;SACxE;QAED,MAAM,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,KAAK,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAErE,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;QAC1B,IAAI,SAAS,CAAC;QACd,IAAI,QAAQ,KAAK,OAAO,EAAE;YACxB,SAAS,GAAG,OAAO,CAAC;SACrB;aAAM,IAAI,QAAQ,KAAK,KAAK,EAAE;YAC7B,SAAS,GAAG,KAAK,CAAC;SACnB;aAAM;YACL,SAAS,GAAG,QAAQ,CAAC;SACtB;QACD,IAAI,YAAY,CAAC;QACjB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,UAAU,EAAE;YAC9B,MAAM,EAAE,GAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAC7C,KAAK,GAAG,MAAM,CAAC;YACf,MAAM,EAAE,cAAc,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;YAC9C,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC;YACnC,IAAI,MAAM,KAAK,CAAC,EAAE;gBAChB,YAAY,GAAG,QAAQ,CAAC;aACzB;iBAAM;gBACL,YAAY,GAAG,KAAK,CAAC;aACtB;SACF;aAAM;YAIL,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAkB,CAAC,CAAC;YAClD,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,MAAkB,EAAE,KAAK,CAAC,CAAC;SAChE;QAED,MAAM,KAAK,iDACN,UAAU,GACV,SAAS,KACZ,SAAS,kBAEP,SAAS;gBAET,YAAY,IACT,SAAS,GAEd,KAAK,EAAE;gBACL,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAC;gBAC5C,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAC;gBAC9C,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,CAAC;aACpD,GACF,CAAC;QACF,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QAEpB,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE;YAC1B,KAAK,CAAC,KAAK,mBACT,OAAO,EAAE,IAAI,IACV,KAAK,CAAC,KAAK,CACf,CAAC;YACF,IAAI,KAAK,CAAC,KAAK,EAAE;gBACf,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;aAC3B;SACF;QAED,IAAI,UAAU,IAAI,UAAU,CAAC,OAAO,EAAE;YACpC,KAAK,CAAC,KAAK,mBACT,OAAO,EAAE,IAAI,IACV,UAAU,CAAC,KAAK,CACpB,CAAC;SACH;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAES,eAAe,CAAC,MAAgB,EAAE,MAAgB;QAC1D,IAAI,IAAI,GAAqB,QAAQ,CAAC;QACtC,MAAM,EAAE,cAAc,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9C,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC;QAClD,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YAC/B,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;gBACzF,IAAI,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;aACxC;iBAAM;gBACL,IAAI,GAAG,QAAQ,CAAC;aACjB;SACF;aAAM,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YACxB,IAAI,GAAG,KAAK,CAAC;SACd;aAAM,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YACxB,IAAI,GAAG,QAAQ,CAAC;SACjB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAES,aAAa,CACrB,MAAwB,EACxB,MAAgB,EAChB,KAAc;QAEd,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACrC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;YACxB,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,EAAE;gBAC3C,OAAO,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;aAC1C;YACD,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,EAAE;gBAC3C,OAAO,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;aAC1C;SACF;QAED,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YACpC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC;SACnD,CAAC;IACJ,CAAC;IAES,mBAAmB,CAC3B,WAAoB,EACpB,SAAqB,EACrB,cAAsB,EACtB,KAAa,EACb,UAAkB;QAElB,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;QACrD,IAAI,KAAK,EAAE;YAET,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;YAC9C,MAAM,GAAG,GAAG,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,KAAK,CAAC;YACpD,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/B,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YAEpG,IAAI,GAAG,EAAE;gBACP,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACxC,IAAI,SAAS,EAAE;oBACb,MAAM,KAAK,GAAG,KAAK,CAAC;oBACpB,MAAM,GAAG,GAAG,CAAC,CAAC;oBACd,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;oBACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;oBAEpC,IAAI,UAAU,GAAG,KAAK,EAAE;wBACtB,KAAK,CAAC,aAAa,CAAC;4BAClB,CAAC,EAAE,KAAK;4BACR,SAAS,EAAE,OAAO;yBACnB,CAAC,CAAC;qBACJ;oBAED,IAAI,QAAQ,GAAG,GAAG,EAAE;wBAClB,IAAI,CAAC,aAAa,CAAC;4BACjB,CAAC,EAAE,GAAG;4BACN,SAAS,EAAE,MAAM;yBAClB,CAAC,CAAC;qBACJ;iBACF;qBAAM;oBACL,MAAM,KAAK,GAAG,CAAC,CAAC;oBAChB,MAAM,GAAG,GAAG,KAAK,CAAC;oBAClB,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;oBACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;oBACpC,IAAI,UAAU,GAAG,KAAK,EAAE;wBACtB,KAAK,CAAC,aAAa,CAAC;4BAClB,CAAC,EAAE,KAAK;4BACR,SAAS,EAAE,MAAM;yBAClB,CAAC,CAAC;qBACJ;oBAED,IAAI,QAAQ,GAAG,GAAG,EAAE;wBAClB,IAAI,CAAC,aAAa,CAAC;4BACjB,CAAC,EAAE,GAAG;4BACN,SAAS,EAAE,OAAO;yBACnB,CAAC,CAAC;qBACJ;iBACF;aACF;iBAAM;gBACL,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACzC,IAAI,SAAS,EAAE;oBACb,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;oBACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;oBACpC,MAAM,KAAK,GAAG,CAAC,CAAC;oBAChB,MAAM,GAAG,GAAG,MAAM,CAAC;oBAEnB,IAAI,UAAU,GAAG,KAAK,EAAE;wBACtB,KAAK,CAAC,aAAa,CAAC;4BAClB,CAAC,EAAE,KAAK;4BACR,YAAY,EAAE,KAAK;yBACpB,CAAC,CAAC;qBACJ;oBAED,IAAI,QAAQ,GAAG,GAAG,EAAE;wBAClB,IAAI,CAAC,aAAa,CAAC;4BACjB,CAAC,EAAE,GAAG;4BACN,YAAY,EAAE,QAAQ;yBACvB,CAAC,CAAC;qBACJ;iBACF;qBAAM;oBACL,MAAM,KAAK,GAAG,MAAM,CAAC;oBACrB,MAAM,GAAG,GAAG,CAAC,CAAC;oBACd,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;oBACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;oBAEpC,IAAI,UAAU,GAAG,KAAK,EAAE;wBACtB,KAAK,CAAC,aAAa,CAAC;4BAClB,CAAC,EAAE,KAAK;4BACR,YAAY,EAAE,QAAQ;yBACvB,CAAC,CAAC;qBACJ;oBAED,IAAI,QAAQ,GAAG,GAAG,EAAE;wBAClB,IAAI,CAAC,aAAa,CAAC;4BACjB,CAAC,EAAE,GAAG;4BACN,YAAY,EAAE,KAAK;yBACpB,CAAC,CAAC;qBACJ;iBACF;aACF;SACF;QAED,OAAO;IACT,CAAC;IACS,mBAAmB,CAC3B,WAAoB,EACpB,SAAqB,EACrB,cAAsB,EACtB,KAAa,EACb,UAAkB;QAElB,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE;YACxB,OAAO;SACR;QAED,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;QAEjF,MAAM,EACJ,UAAU,EACV,UAAU,EACV,eAAe,EACf,SAAS,EACT,aAAa,EACb,QAAQ,EACR,cAAc,EACd,kBAAkB,EACnB,GAAG,KAAK,CAAC;QAEV,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE;YAE1B,UAAU,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;SACjD;aAAM;YAEL,IAAI,UAAU,EAAE;gBACd,cAAc,CAAC,WAAW,EAAE;oBAC1B,gBAAgB,EAAE,eAAe;oBACjC,MAAM;iBACP,CAAC,CAAC;aACJ;YACD,IAAI,SAAS,IAAI,aAAa,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE;gBAC9D,aAAa,CAAC,WAAW,EAAE;oBACzB,WAAW;oBACX,QAAQ,EAAE,aAAa;oBACvB,MAAM;iBACP,CAAC,CAAC;aACJ;YACD,IAAI,QAAQ,EAAE;gBACZ,YAAY,CAAC,WAAW,EAAE;oBACxB,MAAM;oBACN,MAAM,EAAE,cAAc;oBACtB,UAAU,EAAE,kBAAkB;iBAC/B,CAAC,CAAC;aACJ;SACF;IACH,CAAC;IAES,kBAAkB,CAC1B,WAAoB,EACpB,SAAqB,EACrB,cAAsB,EACtB,KAAa,EACb,UAAkB;QAElB,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAGrD,MAAM,YAAY,GAAG,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,KAAK,CAAC;QAC7D,MAAM,wBAAwB,GAAG,cAAc,CAAC,UAAU,CAAC;QAC3D,IAAI,sBAAsB,GAAG,YAAY,CAAC,CAAC,CAAC,wBAAwB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC;QACjH,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAE3C,IAAI,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,eAAe,IAAI,iBAAiB,CAAC,EAAE;YACjH,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;YAC3E,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;YAEnE,IAAI,CAAC,CAAC;YACN,IAAI,CAAC,CAAC;YACN,IAAI,MAAM,KAAK,MAAM,EAAE;gBACrB,CAAC,GAAG,wBAAwB,CAAC,EAAE,GAAG,sBAAsB,CAAC;gBACzD,CAAC,GAAG,wBAAwB,CAAC,EAAE,CAAC;aACjC;iBAAM,IAAI,MAAM,KAAK,OAAO,EAAE;gBAC7B,CAAC,GAAG,wBAAwB,CAAC,EAAE,CAAC;gBAChC,CAAC,GAAG,wBAAwB,CAAC,EAAE,CAAC;aACjC;iBAAM,IAAI,MAAM,KAAK,KAAK,EAAE;gBAC3B,CAAC,GAAG,wBAAwB,CAAC,EAAE,CAAC;gBAChC,CAAC,GAAG,wBAAwB,CAAC,EAAE,GAAG,sBAAsB,CAAC;aAC1D;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE;gBAC9B,CAAC,GAAG,wBAAwB,CAAC,EAAE,CAAC;gBAChC,CAAC,GAAG,wBAAwB,CAAC,EAAE,CAAC;aACjC;YAED,MAAM,MAAM,GAAG,UAAU,CAAC;gBACxB,CAAC;gBACD,CAAC;gBACD,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,sBAAsB;gBAC/E,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,wBAAwB,CAAC,MAAM,EAAE;gBACjF,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC,mBAAmB,CAAC;YACpD,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;YACrD,cAAc,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;SAChE;QAGD,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;YAChD,IAAI,KAAK,CAAC;YACV,IAAI,MAAM,KAAK,MAAM,EAAE;gBACrB,KAAK,GAAG,wBAAwB,CAAC,EAAE,CAAC;aACrC;iBAAM,IAAI,MAAM,KAAK,OAAO,EAAE;gBAC7B,KAAK,GAAG,wBAAwB,CAAC,EAAE,CAAC;aACrC;iBAAM,IAAI,MAAM,KAAK,KAAK,EAAE;gBAC3B,KAAK,GAAG,wBAAwB,CAAC,EAAE,CAAC;aACrC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE;gBAC9B,KAAK,GAAG,wBAAwB,CAAC,EAAE,CAAC;aACrC;YAED,eAAe,CAAC,WAAW,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;SAC1G;IACH,CAAC;IAEO,wBAAwB,CAAC,SAAiB,EAAE,UAAkB;;QACpE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QACpD,MAAM,UAAU,GAAG,MAAA,KAAK,CAAC,KAAK,mCAAI,CAAC,CAAC;QACpC,IAAI,WAAW,GAAG,SAAS,CAAC;QAC5B,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,MAAM,aAAa,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,EAAC,CAAC,CAAC,MAAA,IAAI,CAAC,KAAK,CAAC,SAAS,mCAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,UAAU,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,EAAC,CAAC,CAAC,MAAA,IAAI,CAAC,MAAM,mCAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE;YAClB,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;YAClE,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAChD,YAAY,GAAG,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;SACtD;QACD,IAAI,WAAW,EAAE;YACf,WAAW,GAAG,CAAC,WAAW,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,aAAa,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC;SACjH;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;;AAhfM,0BAAiB,GAAG,kBAAkB,CAAC;AAmfhD,KAAK,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC","file":"line.js","sourcesContent":["/**\n * @description 直线型坐标轴\n */\n// eslint-disable-next-line no-duplicate-imports\nimport {\n get,\n isNil,\n merge,\n isNumberClose,\n isEmpty,\n isFunction,\n isValidNumber,\n isValid,\n normalizePadding,\n mixin,\n last as peek\n} from '@visactor/vutils';\nimport type { TextAlignType } from '@visactor/vrender';\n// eslint-disable-next-line no-duplicate-imports\nimport { createRect, type IGroup, type INode, type IText, type TextBaselineType } from '@visactor/vrender';\nimport type { SegmentAttributes } from '../segment';\n// eslint-disable-next-line no-duplicate-imports\nimport { Segment } from '../segment';\nimport { angleTo } from '../util/matrix';\nimport type { TagAttributes } from '../tag';\nimport type { LineAttributes, LineAxisAttributes, TitleAttributes, AxisItem } from './type';\nimport { AxisBase } from './base';\nimport { DEFAULT_AXIS_THEME } from './config';\nimport { AXIS_ELEMENT_NAME, DEFAULT_STATES } from './constant';\nimport { measureTextSize } from '../util';\nimport { autoHide as autoHideFunc } from './overlap/auto-hide';\nimport { autoRotate as autoRotateFunc, getXAxisLabelAlign, getYAxisLabelAlign } from './overlap/auto-rotate';\nimport { autoLimit as autoLimitFunc } from './overlap/auto-limit';\nimport { alignAxisLabels } from '../util/align';\nimport { LineAxisMixin } from './mixin/line';\n\nexport interface LineAxis\n extends Pick<LineAxisMixin, 'isInValidValue' | 'getTickCoord' | 'getVerticalVector' | 'getRelativeVector'>,\n AxisBase<LineAxisAttributes> {}\n\nexport class LineAxis extends AxisBase<LineAxisAttributes> {\n static defaultAttributes = DEFAULT_AXIS_THEME;\n\n constructor(attributes: LineAxisAttributes, mode?: '2d' | '3d') {\n super(merge({}, LineAxis.defaultAttributes, attributes), mode);\n if (mode === '3d') {\n this.setMode(mode);\n }\n }\n\n protected _renderInner(container: IGroup) {\n super._renderInner(container);\n const { panel } = this.attribute;\n\n // TODO: 目前是通过包围盒绘制,在一些情况下会有那问题,比如圆弧轴、带了箭头的坐标轴等\n // 坐标轴主体 panel\n if (panel && panel.visible) {\n const axisContainer = this.axisContainer;\n const axisContainerBounds = axisContainer.AABBBounds;\n const bgRect = createRect({\n x: axisContainerBounds.x1,\n y: axisContainerBounds.y1,\n width: axisContainerBounds.width(),\n height: axisContainerBounds.height(),\n ...panel.style\n });\n bgRect.name = AXIS_ELEMENT_NAME.background;\n bgRect.id = this._getNodeId('background');\n\n bgRect.states = merge({}, DEFAULT_STATES, panel.state ?? {});\n axisContainer.insertBefore(bgRect, axisContainer.firstChild);\n }\n }\n\n // TODO: break\n protected renderLine(container: IGroup): void {\n const { start, end, line } = this.attribute as LineAxisAttributes;\n const { startSymbol, endSymbol, style, breakRange, breakShape, breakShapeStyle, state, ...restLineAttrs } =\n line as LineAttributes;\n const lineAttrs = {\n points: [start, end],\n startSymbol,\n endSymbol,\n lineStyle: style,\n ...restLineAttrs\n } as SegmentAttributes;\n\n if (!isEmpty(state)) {\n lineAttrs.state = {\n line: merge({}, DEFAULT_STATES, state),\n symbol: merge({}, DEFAULT_STATES, state)\n };\n }\n\n const axisLineGroup = new Segment(lineAttrs);\n axisLineGroup.name = AXIS_ELEMENT_NAME.line;\n axisLineGroup.id = this._getNodeId('line');\n container.add(axisLineGroup as unknown as INode);\n }\n\n // TODO: 太 hack 了,需要静心优化\n protected getTitleAttribute() {\n const {\n position = 'middle',\n space = 4,\n textStyle = {},\n autoRotate = true,\n shape,\n background,\n state,\n ...restAttrs\n } = this.attribute.title as TitleAttributes;\n let percent = 0.5;\n if (position === 'start') {\n percent = 0;\n } else if (position === 'end') {\n percent = 1;\n }\n const { verticalFactor = 1 } = this.attribute;\n const factor = -1 * verticalFactor;\n const point = this.getTickCoord(percent);\n const axisVector = this.getRelativeVector();\n // HACK;\n let labelLength = 0;\n if (this.attribute.label?.visible && this.attribute.label?.inside === false) {\n const space = +get(this.attribute, 'label.space', 4);\n labelLength += space;\n const layerCount = Object.keys(this.axisLabelLayerSize).length;\n if (axisVector[1] === 0) {\n const labelBoundsHeight = this.axisLabelsContainer.AABBBounds.height();\n if (isFinite(labelBoundsHeight)) {\n labelLength += labelBoundsHeight + (layerCount - 1) * space;\n } else {\n labelLength = 0;\n }\n } else {\n if (axisVector[0] === 0) {\n const boundsWidth = this.axisLabelsContainer.AABBBounds.width();\n if (isFinite(boundsWidth)) {\n labelLength += boundsWidth + (layerCount - 1) * space;\n } else {\n labelLength = 0;\n }\n } else {\n // 发生了旋转\n Object.keys(this.axisLabelLayerSize).forEach((layer, index) => {\n labelLength += this.axisLabelLayerSize[layer].width + (index > 0 ? space : 0);\n });\n }\n\n const textAlign = this.axisLabelLayerSize[0].textAlign;\n const isTextAlignStart = textAlign === 'start' || textAlign === 'left';\n const isTextCenter = textAlign === 'center';\n const isReverse = axisVector[1] > 0;\n if (factor === 1) {\n labelLength = isReverse\n ? isTextAlignStart\n ? labelLength\n : isTextCenter\n ? labelLength / 2\n : space\n : isTextAlignStart\n ? space\n : isTextCenter\n ? labelLength / 2\n : labelLength;\n } else {\n labelLength = isReverse\n ? isTextAlignStart\n ? space\n : isTextCenter\n ? labelLength / 2\n : labelLength\n : isTextAlignStart\n ? labelLength\n : isTextCenter\n ? labelLength / 2\n : space;\n }\n }\n }\n\n // 标题都默认朝外\n let tickLength = 0;\n if (this.attribute.tick?.visible && this.attribute.tick?.inside === false) {\n tickLength = this.attribute.tick?.length || 4;\n }\n if (this.attribute.subTick?.visible && this.attribute.subTick?.inside === false) {\n tickLength = Math.max(tickLength, this.attribute.subTick?.length || 2);\n }\n\n const offset = tickLength + labelLength + space;\n const titlePoint = this.getVerticalCoord(point, offset, false); // 标题的点\n const vector = this.getVerticalVector(offset, false, { x: 0, y: 0 });\n\n let { angle } = restAttrs; // 用户设置的是角度\n let textAlign;\n if (position === 'start') {\n textAlign = 'start';\n } else if (position === 'end') {\n textAlign = 'end';\n } else {\n textAlign = 'center';\n }\n let textBaseline;\n if (isNil(angle) && autoRotate) {\n const v1: [number, number] = [1, 0]; // 水平方向的向量\n const radian = angleTo(axisVector, v1, true);\n angle = radian;\n const { verticalFactor = 1 } = this.attribute;\n const factor = -1 * verticalFactor;\n if (factor === 1) {\n textBaseline = 'bottom';\n } else {\n textBaseline = 'top';\n }\n } else {\n // if (isValid(angle)) {\n // angle = degreeToRadian(angle);\n // }\n textAlign = this.getTextAlign(vector as number[]);\n textBaseline = this.getTextBaseline(vector as number[], false);\n }\n\n const attrs: TagAttributes = {\n ...titlePoint,\n ...restAttrs,\n textStyle: {\n // @ts-ignore\n textAlign,\n // @ts-ignore\n textBaseline,\n ...textStyle\n },\n state: {\n text: merge({}, DEFAULT_STATES, state?.text),\n shape: merge({}, DEFAULT_STATES, state?.shape),\n panel: merge({}, DEFAULT_STATES, state?.background)\n }\n };\n attrs.angle = angle;\n\n if (shape && shape.visible) {\n attrs.shape = {\n visible: true,\n ...shape.style\n };\n if (shape.space) {\n attrs.space = shape.space;\n }\n }\n\n if (background && background.visible) {\n attrs.panel = {\n visible: true,\n ...background.style\n };\n }\n\n return attrs;\n }\n\n protected getTextBaseline(vector: number[], inside?: boolean): TextBaselineType {\n let base: TextBaselineType = 'middle';\n const { verticalFactor = 1 } = this.attribute;\n const factor = (inside ? 1 : -1) * verticalFactor;\n if (isNumberClose(vector[1], 0)) {\n if (isNumberClose(vector[0], 0) && !Object.is(vector[0], -0) && !Object.is(vector[1], -0)) {\n base = factor === 1 ? 'bottom' : 'top';\n } else {\n base = 'middle';\n }\n } else if (vector[1] > 0) {\n base = 'top';\n } else if (vector[1] < 0) {\n base = 'bottom';\n }\n return base;\n }\n\n protected getLabelAlign(\n vector: [number, number],\n inside?: boolean,\n angle?: number\n ): { textAlign: TextAlignType; textBaseline: TextBaselineType } {\n const orient = this.attribute.orient;\n if (isValidNumber(angle)) {\n if (orient === 'top' || orient === 'bottom') {\n return getXAxisLabelAlign(orient, angle);\n }\n if (orient === 'left' || orient === 'right') {\n return getYAxisLabelAlign(orient, angle);\n }\n }\n\n return {\n textAlign: this.getTextAlign(vector),\n textBaseline: this.getTextBaseline(vector, inside)\n };\n }\n\n protected beforeLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n const { flush = false } = this.attribute.label || {};\n if (flush) {\n // 首尾标签向内偏移\n const { orient, start, end } = this.attribute;\n const isX = orient === 'bottom' || orient === 'top';\n const first = labelShapes[0];\n const last = peek(labelShapes);\n const isInverse = isX ? first.attribute.x > last.attribute.x : first.attribute.y < last.attribute.y;\n\n if (isX) {\n const width = Math.abs(start.x - end.x);\n if (isInverse) {\n const start = width;\n const end = 0;\n const startBound = first.AABBBounds.x2;\n const endBound = last.AABBBounds.x1;\n\n if (startBound > start) {\n first.setAttributes({\n x: start,\n textAlign: 'right'\n });\n }\n\n if (endBound < end) {\n last.setAttributes({\n x: end,\n textAlign: 'left'\n });\n }\n } else {\n const start = 0;\n const end = width;\n const startBound = first.AABBBounds.x1;\n const endBound = last.AABBBounds.x2;\n if (startBound < start) {\n first.setAttributes({\n x: start,\n textAlign: 'left'\n });\n }\n\n if (endBound > end) {\n last.setAttributes({\n x: end,\n textAlign: 'right'\n });\n }\n }\n } else {\n const height = Math.abs(start.y - end.y);\n if (isInverse) {\n const startBound = first.AABBBounds.y1;\n const endBound = last.AABBBounds.y2;\n const start = 0;\n const end = height;\n\n if (startBound < start) {\n first.setAttributes({\n y: start,\n textBaseline: 'top'\n });\n }\n\n if (endBound > end) {\n last.setAttributes({\n y: end,\n textBaseline: 'bottom'\n });\n }\n } else {\n const start = height;\n const end = 0;\n const startBound = first.AABBBounds.y2;\n const endBound = last.AABBBounds.y1;\n\n if (startBound > start) {\n first.setAttributes({\n y: start,\n textBaseline: 'bottom'\n });\n }\n\n if (endBound < end) {\n last.setAttributes({\n y: end,\n textBaseline: 'top'\n });\n }\n }\n }\n }\n\n return;\n }\n protected handleLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n if (isEmpty(labelShapes)) {\n return;\n }\n\n const { verticalLimitSize, label, orient } = this.attribute;\n const limitLength = this._getAxisLabelLimitLength(verticalLimitSize, layerCount);\n\n const {\n layoutFunc,\n autoRotate,\n autoRotateAngle,\n autoLimit,\n limitEllipsis,\n autoHide,\n autoHideMethod,\n autoHideSeparation\n } = label;\n\n if (isFunction(layoutFunc)) {\n // 自定义布局\n layoutFunc(labelShapes, labelData, layer, this);\n } else {\n // order: autoRotate -> autoLimit -> autoHide\n if (autoRotate) {\n autoRotateFunc(labelShapes, {\n labelRotateAngle: autoRotateAngle,\n orient\n });\n }\n if (autoLimit && isValidNumber(limitLength) && limitLength > 0) {\n autoLimitFunc(labelShapes, {\n limitLength,\n ellipsis: limitEllipsis,\n orient\n });\n }\n if (autoHide) {\n autoHideFunc(labelShapes, {\n orient,\n method: autoHideMethod,\n separation: autoHideSeparation\n });\n }\n }\n }\n\n protected afterLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ) {\n const { verticalLimitSize, orient } = this.attribute;\n\n // 处理 verticalMinSize,根据 verticalMinSize 调整 labelContainer 的大小\n const isHorizontal = orient === 'bottom' || orient === 'top';\n const axisLabelContainerBounds = labelContainer.AABBBounds;\n let axisLabelContainerSize = isHorizontal ? axisLabelContainerBounds.height() : axisLabelContainerBounds.width();\n const { verticalMinSize } = this.attribute;\n\n if (isValidNumber(verticalMinSize) && (!isValidNumber(verticalLimitSize) || verticalMinSize <= verticalLimitSize)) {\n const minSize = this._getAxisLabelLimitLength(verticalMinSize, layerCount);\n axisLabelContainerSize = Math.max(axisLabelContainerSize, minSize);\n\n let x;\n let y;\n if (orient === 'left') {\n x = axisLabelContainerBounds.x2 - axisLabelContainerSize;\n y = axisLabelContainerBounds.y1;\n } else if (orient === 'right') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y1;\n } else if (orient === 'top') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y2 - axisLabelContainerSize;\n } else if (orient === 'bottom') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y1;\n }\n\n const bgRect = createRect({\n x,\n y,\n width: isHorizontal ? axisLabelContainerBounds.width() : axisLabelContainerSize,\n height: isHorizontal ? axisLabelContainerSize : axisLabelContainerBounds.height(),\n pickable: false\n });\n bgRect.name = AXIS_ELEMENT_NAME.axisLabelBackground;\n bgRect.id = this._getNodeId('axis-label-background');\n labelContainer.insertBefore(bgRect, labelContainer.firstChild);\n }\n\n // 处理 align,进行整体的对齐操作\n if (isValid(this.attribute.label.containerAlign)) {\n let start;\n if (orient === 'left') {\n start = axisLabelContainerBounds.x2;\n } else if (orient === 'right') {\n start = axisLabelContainerBounds.x1;\n } else if (orient === 'top') {\n start = axisLabelContainerBounds.y2;\n } else if (orient === 'bottom') {\n start = axisLabelContainerBounds.y1;\n }\n\n alignAxisLabels(labelShapes, start, axisLabelContainerSize, orient, this.attribute.label.containerAlign);\n }\n }\n\n private _getAxisLabelLimitLength(limitSize: number, layerCount: number): number {\n const { label, title, line, tick } = this.attribute;\n const labelSpace = label.space ?? 4;\n let limitLength = limitSize;\n let titleHeight = 0;\n let titleSpacing = 0;\n const axisLineWidth = line?.visible ? line.style.lineWidth ?? 1 : 0;\n const tickLength = tick?.visible ? tick.length ?? 4 : 0;\n if (title?.visible) {\n titleHeight = measureTextSize(title.text, title.textStyle).height;\n const padding = normalizePadding(title.padding);\n titleSpacing = title.space + padding[0] + padding[2];\n }\n if (limitLength) {\n limitLength = (limitLength - labelSpace - titleSpacing - titleHeight - axisLineWidth - tickLength) / layerCount;\n }\n return limitLength;\n }\n}\n\nmixin(LineAxis, LineAxisMixin);\n"]}
1
+ {"version":3,"sources":["../src/axis/line.ts"],"names":[],"mappings":"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","file":"line.js","sourcesContent":["/**\n * @description 直线型坐标轴\n */\n// eslint-disable-next-line no-duplicate-imports\nimport {\n get,\n isNil,\n merge,\n isNumberClose,\n isEmpty,\n isFunction,\n isValidNumber,\n isValid,\n normalizePadding,\n mixin,\n last as peek\n} from '@visactor/vutils';\nimport type { TextAlignType } from '@visactor/vrender';\n// eslint-disable-next-line no-duplicate-imports\nimport { createRect, type IGroup, type INode, type IText, type TextBaselineType } from '@visactor/vrender';\nimport type { SegmentAttributes } from '../segment';\n// eslint-disable-next-line no-duplicate-imports\nimport { Segment } from '../segment';\nimport { angleTo } from '../util/matrix';\nimport type { TagAttributes } from '../tag';\nimport type { LineAttributes, LineAxisAttributes, TitleAttributes, AxisItem } from './type';\nimport { AxisBase } from './base';\nimport { DEFAULT_AXIS_THEME } from './config';\nimport { AXIS_ELEMENT_NAME, DEFAULT_STATES } from './constant';\nimport { measureTextSize } from '../util';\nimport { autoHide as autoHideFunc } from './overlap/auto-hide';\nimport { autoRotate as autoRotateFunc, getXAxisLabelAlign, getYAxisLabelAlign } from './overlap/auto-rotate';\nimport { autoLimit as autoLimitFunc } from './overlap/auto-limit';\nimport { alignAxisLabels } from '../util/align';\nimport { LineAxisMixin } from './mixin/line';\n\nexport interface LineAxis\n extends Pick<LineAxisMixin, 'isInValidValue' | 'getTickCoord' | 'getVerticalVector' | 'getRelativeVector'>,\n AxisBase<LineAxisAttributes> {}\n\nexport class LineAxis extends AxisBase<LineAxisAttributes> {\n static defaultAttributes = DEFAULT_AXIS_THEME;\n\n constructor(attributes: LineAxisAttributes, mode?: '2d' | '3d') {\n super(merge({}, LineAxis.defaultAttributes, attributes), mode);\n if (mode === '3d') {\n this.setMode(mode);\n }\n }\n\n protected _renderInner(container: IGroup) {\n super._renderInner(container);\n const { panel } = this.attribute;\n\n // TODO: 目前是通过包围盒绘制,在一些情况下会有那问题,比如圆弧轴、带了箭头的坐标轴等\n // 坐标轴主体 panel\n if (panel && panel.visible) {\n const axisContainer = this.axisContainer;\n const axisContainerBounds = axisContainer.AABBBounds;\n const bgRect = createRect({\n x: axisContainerBounds.x1,\n y: axisContainerBounds.y1,\n width: axisContainerBounds.width(),\n height: axisContainerBounds.height(),\n ...panel.style\n });\n bgRect.name = AXIS_ELEMENT_NAME.background;\n bgRect.id = this._getNodeId('background');\n\n bgRect.states = merge({}, DEFAULT_STATES, panel.state ?? {});\n axisContainer.insertBefore(bgRect, axisContainer.firstChild);\n }\n }\n\n // TODO: break\n protected renderLine(container: IGroup): void {\n const { start, end, line } = this.attribute as LineAxisAttributes;\n const { startSymbol, endSymbol, style, breakRange, breakShape, breakShapeStyle, state, ...restLineAttrs } =\n line as LineAttributes;\n const lineAttrs = {\n points: [start, end],\n startSymbol,\n endSymbol,\n lineStyle: style,\n ...restLineAttrs\n } as SegmentAttributes;\n\n if (!isEmpty(state)) {\n lineAttrs.state = {\n line: merge({}, DEFAULT_STATES, state),\n symbol: merge({}, DEFAULT_STATES, state)\n };\n }\n\n const axisLineGroup = new Segment(lineAttrs);\n axisLineGroup.name = AXIS_ELEMENT_NAME.line;\n axisLineGroup.id = this._getNodeId('line');\n container.add(axisLineGroup as unknown as INode);\n }\n\n // TODO: 太 hack 了,需要静心优化\n protected getTitleAttribute() {\n const {\n position = 'middle',\n space = 4,\n textStyle = {},\n autoRotate = true,\n shape,\n background,\n state,\n ...restAttrs\n } = this.attribute.title as TitleAttributes;\n let percent = 0.5;\n if (position === 'start') {\n percent = 0;\n } else if (position === 'end') {\n percent = 1;\n }\n const { verticalFactor = 1 } = this.attribute;\n const factor = -1 * verticalFactor;\n const point = this.getTickCoord(percent);\n const axisVector = this.getRelativeVector();\n // HACK;\n let labelLength = 0;\n if (this.attribute.label?.visible && this.attribute.label?.inside === false) {\n const space = +get(this.attribute, 'label.space', 4);\n labelLength += space;\n const layerCount = Object.keys(this.axisLabelLayerSize).length;\n if (axisVector[1] === 0) {\n const labelBoundsHeight = this.axisLabelsContainer.AABBBounds.height();\n if (isFinite(labelBoundsHeight)) {\n labelLength += labelBoundsHeight + (layerCount - 1) * space;\n } else {\n labelLength = 0;\n }\n } else {\n if (axisVector[0] === 0) {\n const boundsWidth = this.axisLabelsContainer.AABBBounds.width();\n if (isFinite(boundsWidth)) {\n labelLength += boundsWidth + (layerCount - 1) * space;\n } else {\n labelLength = 0;\n }\n } else {\n // 发生了旋转\n Object.keys(this.axisLabelLayerSize).forEach((layer, index) => {\n labelLength += this.axisLabelLayerSize[layer].width + (index > 0 ? space : 0);\n });\n }\n\n const textAlign = this.axisLabelLayerSize[0].textAlign;\n const isTextAlignStart = textAlign === 'start' || textAlign === 'left';\n const isTextCenter = textAlign === 'center';\n const isReverse = axisVector[1] > 0;\n if (factor === 1) {\n labelLength = isReverse\n ? isTextAlignStart\n ? labelLength\n : isTextCenter\n ? labelLength / 2\n : space\n : isTextAlignStart\n ? space\n : isTextCenter\n ? labelLength / 2\n : labelLength;\n } else {\n labelLength = isReverse\n ? isTextAlignStart\n ? space\n : isTextCenter\n ? labelLength / 2\n : labelLength\n : isTextAlignStart\n ? labelLength\n : isTextCenter\n ? labelLength / 2\n : space;\n }\n }\n }\n\n // 标题都默认朝外\n let tickLength = 0;\n if (this.attribute.tick?.visible && this.attribute.tick?.inside === false) {\n tickLength = this.attribute.tick?.length || 4;\n }\n if (this.attribute.subTick?.visible && this.attribute.subTick?.inside === false) {\n tickLength = Math.max(tickLength, this.attribute.subTick?.length || 2);\n }\n\n const offset = tickLength + labelLength + space;\n const titlePoint = this.getVerticalCoord(point, offset, false); // 标题的点\n const vector = this.getVerticalVector(offset, false, { x: 0, y: 0 });\n\n let { angle } = restAttrs; // 用户设置的是角度\n let textAlign;\n if (position === 'start') {\n textAlign = 'start';\n } else if (position === 'end') {\n textAlign = 'end';\n } else {\n textAlign = 'center';\n }\n let textBaseline;\n if (isNil(angle) && autoRotate) {\n const v1: [number, number] = [1, 0]; // 水平方向的向量\n const radian = angleTo(axisVector, v1, true);\n angle = radian;\n const { verticalFactor = 1 } = this.attribute;\n const factor = -1 * verticalFactor;\n if (factor === 1) {\n textBaseline = 'bottom';\n } else {\n textBaseline = 'top';\n }\n } else {\n // if (isValid(angle)) {\n // angle = degreeToRadian(angle);\n // }\n textAlign = this.getTextAlign(vector as number[]);\n textBaseline = this.getTextBaseline(vector as number[], false);\n }\n\n const attrs: TagAttributes = {\n ...titlePoint,\n ...restAttrs,\n textStyle: {\n // @ts-ignore\n textAlign,\n // @ts-ignore\n textBaseline,\n ...textStyle\n },\n state: {\n text: merge({}, DEFAULT_STATES, state?.text),\n shape: merge({}, DEFAULT_STATES, state?.shape),\n panel: merge({}, DEFAULT_STATES, state?.background)\n }\n };\n attrs.angle = angle;\n\n if (shape && shape.visible) {\n attrs.shape = {\n visible: true,\n ...shape.style\n };\n if (shape.space) {\n attrs.space = shape.space;\n }\n }\n\n if (background && background.visible) {\n attrs.panel = {\n visible: true,\n ...background.style\n };\n }\n\n return attrs;\n }\n\n protected getTextBaseline(vector: number[], inside?: boolean): TextBaselineType {\n let base: TextBaselineType = 'middle';\n const { verticalFactor = 1 } = this.attribute;\n const factor = (inside ? 1 : -1) * verticalFactor;\n if (isNumberClose(vector[1], 0)) {\n if (isNumberClose(vector[0], 0) && !Object.is(vector[0], -0) && !Object.is(vector[1], -0)) {\n base = factor === 1 ? 'bottom' : 'top';\n } else {\n base = 'middle';\n }\n } else if (vector[1] > 0) {\n base = 'top';\n } else if (vector[1] < 0) {\n base = 'bottom';\n }\n return base;\n }\n\n protected getLabelAlign(\n vector: [number, number],\n inside?: boolean,\n angle?: number\n ): { textAlign: TextAlignType; textBaseline: TextBaselineType } {\n const orient = this.attribute.orient;\n if (isValidNumber(angle)) {\n if (orient === 'top' || orient === 'bottom') {\n return getXAxisLabelAlign(orient, angle);\n }\n if (orient === 'left' || orient === 'right') {\n return getYAxisLabelAlign(orient, angle);\n }\n }\n\n return {\n textAlign: this.getTextAlign(vector),\n textBaseline: this.getTextBaseline(vector, inside)\n };\n }\n\n protected beforeLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n const { flush = false } = this.attribute.label || {};\n if (flush && labelShapes.length) {\n // 首尾标签向内偏移\n const { orient, start, end } = this.attribute;\n const isX = orient === 'bottom' || orient === 'top';\n const first = labelShapes[0];\n const last = peek(labelShapes);\n const isInverse = isX ? first.attribute.x > last.attribute.x : first.attribute.y < last.attribute.y;\n\n if (isX) {\n const width = Math.abs(start.x - end.x);\n if (isInverse) {\n const start = width;\n const end = 0;\n const startBound = first.AABBBounds.x2;\n const endBound = last.AABBBounds.x1;\n\n if (startBound > start) {\n first.setAttributes({\n x: start,\n textAlign: 'right'\n });\n }\n\n if (endBound < end) {\n last.setAttributes({\n x: end,\n textAlign: 'left'\n });\n }\n } else {\n const start = 0;\n const end = width;\n const startBound = first.AABBBounds.x1;\n const endBound = last.AABBBounds.x2;\n if (startBound < start) {\n first.setAttributes({\n x: start,\n textAlign: 'left'\n });\n }\n\n if (endBound > end) {\n last.setAttributes({\n x: end,\n textAlign: 'right'\n });\n }\n }\n } else {\n const height = Math.abs(start.y - end.y);\n if (isInverse) {\n const startBound = first.AABBBounds.y1;\n const endBound = last.AABBBounds.y2;\n const start = 0;\n const end = height;\n\n if (startBound < start) {\n first.setAttributes({\n y: start,\n textBaseline: 'top'\n });\n }\n\n if (endBound > end) {\n last.setAttributes({\n y: end,\n textBaseline: 'bottom'\n });\n }\n } else {\n const start = height;\n const end = 0;\n const startBound = first.AABBBounds.y2;\n const endBound = last.AABBBounds.y1;\n\n if (startBound > start) {\n first.setAttributes({\n y: start,\n textBaseline: 'bottom'\n });\n }\n\n if (endBound < end) {\n last.setAttributes({\n y: end,\n textBaseline: 'top'\n });\n }\n }\n }\n }\n\n return;\n }\n protected handleLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n if (isEmpty(labelShapes)) {\n return;\n }\n\n const { verticalLimitSize, label, orient } = this.attribute;\n const limitLength = this._getAxisLabelLimitLength(verticalLimitSize, layerCount);\n\n const {\n layoutFunc,\n autoRotate,\n autoRotateAngle,\n autoLimit,\n limitEllipsis,\n autoHide,\n autoHideMethod,\n autoHideSeparation\n } = label;\n\n if (isFunction(layoutFunc)) {\n // 自定义布局\n layoutFunc(labelShapes, labelData, layer, this);\n } else {\n // order: autoRotate -> autoLimit -> autoHide\n if (autoRotate) {\n autoRotateFunc(labelShapes, {\n labelRotateAngle: autoRotateAngle,\n orient\n });\n }\n if (autoLimit && isValidNumber(limitLength) && limitLength > 0) {\n autoLimitFunc(labelShapes, {\n limitLength,\n ellipsis: limitEllipsis,\n orient\n });\n }\n if (autoHide) {\n autoHideFunc(labelShapes, {\n orient,\n method: autoHideMethod,\n separation: autoHideSeparation\n });\n }\n }\n }\n\n protected afterLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ) {\n const { verticalLimitSize, orient } = this.attribute;\n\n // 处理 verticalMinSize,根据 verticalMinSize 调整 labelContainer 的大小\n const isHorizontal = orient === 'bottom' || orient === 'top';\n const axisLabelContainerBounds = labelContainer.AABBBounds;\n let axisLabelContainerSize = isHorizontal ? axisLabelContainerBounds.height() : axisLabelContainerBounds.width();\n const { verticalMinSize } = this.attribute;\n\n if (isValidNumber(verticalMinSize) && (!isValidNumber(verticalLimitSize) || verticalMinSize <= verticalLimitSize)) {\n const minSize = this._getAxisLabelLimitLength(verticalMinSize, layerCount);\n axisLabelContainerSize = Math.max(axisLabelContainerSize, minSize);\n\n let x;\n let y;\n if (orient === 'left') {\n x = axisLabelContainerBounds.x2 - axisLabelContainerSize;\n y = axisLabelContainerBounds.y1;\n } else if (orient === 'right') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y1;\n } else if (orient === 'top') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y2 - axisLabelContainerSize;\n } else if (orient === 'bottom') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y1;\n }\n\n const bgRect = createRect({\n x,\n y,\n width: isHorizontal ? axisLabelContainerBounds.width() : axisLabelContainerSize,\n height: isHorizontal ? axisLabelContainerSize : axisLabelContainerBounds.height(),\n pickable: false\n });\n bgRect.name = AXIS_ELEMENT_NAME.axisLabelBackground;\n bgRect.id = this._getNodeId('axis-label-background');\n labelContainer.insertBefore(bgRect, labelContainer.firstChild);\n }\n\n // 处理 align,进行整体的对齐操作\n if (isValid(this.attribute.label.containerAlign)) {\n let start;\n if (orient === 'left') {\n start = axisLabelContainerBounds.x2;\n } else if (orient === 'right') {\n start = axisLabelContainerBounds.x1;\n } else if (orient === 'top') {\n start = axisLabelContainerBounds.y2;\n } else if (orient === 'bottom') {\n start = axisLabelContainerBounds.y1;\n }\n\n alignAxisLabels(labelShapes, start, axisLabelContainerSize, orient, this.attribute.label.containerAlign);\n }\n }\n\n private _getAxisLabelLimitLength(limitSize: number, layerCount: number): number {\n const { label, title, line, tick } = this.attribute;\n const labelSpace = label.space ?? 4;\n let limitLength = limitSize;\n let titleHeight = 0;\n let titleSpacing = 0;\n const axisLineWidth = line?.visible ? line.style.lineWidth ?? 1 : 0;\n const tickLength = tick?.visible ? tick.length ?? 4 : 0;\n if (title?.visible) {\n titleHeight = measureTextSize(title.text, title.textStyle).height;\n const padding = normalizePadding(title.padding);\n titleSpacing = title.space + padding[0] + padding[2];\n }\n if (limitLength) {\n limitLength = (limitLength - labelSpace - titleSpacing - titleHeight - axisLineWidth - tickLength) / layerCount;\n }\n return limitLength;\n }\n}\n\nmixin(LineAxis, LineAxisMixin);\n"]}
package/es/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export declare const version = "0.15.0-alpha.20";
1
+ export declare const version = "0.15.0-alpha.22";
2
2
  export * from './core/base';
3
3
  export * from './scrollbar';
4
4
  export * from './tag';
package/es/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export const version = "0.15.0-alpha.20";
1
+ export const version = "0.15.0-alpha.22";
2
2
 
3
3
  export * from "./core/base";
4
4
 
package/es/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,OAAO,GAAG,iBAAiB,CAAC;AAEzC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC","file":"index.js","sourcesContent":["// 导出版本号\nexport const version = \"0.15.0-alpha.20\";\n\nexport * from './core/base';\nexport * from './scrollbar';\nexport * from './tag';\nexport * from './poptip';\nexport * from './crosshair';\nexport * from './label';\nexport * from './axis';\nexport * from './axis/grid';\nexport * from './segment';\nexport * from './data-zoom';\nexport * from './marker';\nexport * from './pager';\nexport * from './legend';\nexport * from './title';\nexport * from './indicator';\nexport * from './slider';\nexport * from './link-path';\nexport * from './player';\nexport * from './brush';\nexport * from './tooltip';\nexport * from './interface';\nexport * from './jsx';\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,OAAO,GAAG,iBAAiB,CAAC;AAEzC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC","file":"index.js","sourcesContent":["// 导出版本号\nexport const version = \"0.15.0-alpha.22\";\n\nexport * from './core/base';\nexport * from './scrollbar';\nexport * from './tag';\nexport * from './poptip';\nexport * from './crosshair';\nexport * from './label';\nexport * from './axis';\nexport * from './axis/grid';\nexport * from './segment';\nexport * from './data-zoom';\nexport * from './marker';\nexport * from './pager';\nexport * from './legend';\nexport * from './title';\nexport * from './indicator';\nexport * from './slider';\nexport * from './link-path';\nexport * from './player';\nexport * from './brush';\nexport * from './tooltip';\nexport * from './interface';\nexport * from './jsx';\n"]}
package/es/label/base.js CHANGED
@@ -4,7 +4,7 @@ import { isFunction, isValidNumber, isEmpty, isValid, isString, merge, isRectInt
4
4
 
5
5
  import { AbstractComponent } from "../core/base";
6
6
 
7
- import { labelSmartInvert, contrastAccessibilityChecker, smartInvertStrategy } from "../util/labelSmartInvert";
7
+ import { labelSmartInvert, contrastAccessibilityChecker, smartInvertStrategy } from "../util/label-smartInvert";
8
8
 
9
9
  import { getMarksByName, getNoneGroupMarksByName, traverseGroup } from "../util";
10
10
 
@@ -71,8 +71,10 @@ export class LabelBase extends AbstractComponent {
71
71
  }
72
72
  _prepare() {
73
73
  var _a;
74
- const baseMarks = getMarksByName(this.getRootNode(), this.attribute.baseMarkGroupName), currentBaseMarks = [];
75
- if (baseMarks.forEach((mark => {
74
+ const currentBaseMarks = [];
75
+ let baseMarks;
76
+ if (baseMarks = isFunction(this.attribute.getBaseMarks) ? this.attribute.getBaseMarks() : getMarksByName(this.getRootNode(), this.attribute.baseMarkGroupName),
77
+ baseMarks.forEach((mark => {
76
78
  "willRelease" !== mark.releaseStatus && currentBaseMarks.push(mark);
77
79
  })), null === (_a = this._idToGraphic) || void 0 === _a || _a.clear(), this._baseMarks = currentBaseMarks,
78
80
  !currentBaseMarks || 0 === currentBaseMarks.length) return;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/label/base.ts"],"names":[],"mappings":"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","file":"base.js","sourcesContent":["/**\n * @description Label 基类\n */\nimport type { IGroup, Text, IGraphic, IText, FederatedPointerEvent, IColor, ILine } from '@visactor/vrender';\nimport { createText, IncreaseCount, AttributeUpdateType } from '@visactor/vrender';\nimport type { IAABBBounds, IBoundsLike } from '@visactor/vutils';\nimport { isFunction, isValidNumber, isEmpty, isValid, isString, merge, isRectIntersect, isNil } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { PointLocationCfg } from '../core/type';\nimport { labelSmartInvert, contrastAccessibilityChecker, smartInvertStrategy } from '../util/labelSmartInvert';\nimport { getMarksByName, getNoneGroupMarksByName, traverseGroup } from '../util';\nimport { StateValue } from '../constant';\nimport type { Bitmap } from './overlap';\nimport { bitmapTool, boundToRange, canPlace, clampText, place } from './overlap';\nimport type { BaseLabelAttrs, OverlapAttrs, ILabelAnimation, ArcLabelAttrs, LabelItem, SmartInvertAttrs } from './type';\nimport { DefaultLabelAnimation, getAnimationAttributes } from './animate/animate';\n\nexport class LabelBase<T extends BaseLabelAttrs> extends AbstractComponent<T> {\n name = 'label';\n\n protected _baseMarks?: IGraphic[];\n\n protected _bitmap?: Bitmap;\n\n static defaultAttributes: Partial<BaseLabelAttrs> = {\n textStyle: {\n fontSize: 12,\n // FIXME: we need a default color. Yet in current logic, textStyle will override fill from baseMark.\n // This need a new config option like `colorFull`\n // fill: '#000',\n textAlign: 'center',\n textBaseline: 'middle',\n boundsPadding: [-1, 0, -1, 0] // to ignore the textBound buf\n },\n offset: 0,\n pickable: false\n };\n\n setBitmap(bitmap: Bitmap) {\n this._bitmap = bitmap;\n }\n\n protected _bmpTool?: ReturnType<typeof bitmapTool>;\n setBitmapTool(bmpTool: ReturnType<typeof bitmapTool>) {\n this._bmpTool = bmpTool;\n }\n\n protected _graphicToText: Map<IGraphic, { text: IText; labelLine?: ILine }>;\n\n protected _idToGraphic: Map<string, IGraphic>;\n\n onAfterLabelOverlap?: (bitmap: Bitmap) => void;\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n private _enableAnimation: boolean;\n\n constructor(attributes: BaseLabelAttrs) {\n super(merge({}, LabelBase.defaultAttributes, attributes));\n }\n\n /**\n * 计算 text 的最终位置属性x, y\n * @param textBounds\n * @param graphicBounds\n * @param position\n * @param offset\n * @returns\n */\n protected labeling(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position?: BaseLabelAttrs['position'],\n offset?: number\n ): { x: number; y: number } | undefined {\n // 基类没有指定的图元类型,需要在 data 中指定位置,故无需进行 labeling\n return;\n }\n\n protected _labelLine(text: IText): ILine | undefined {\n // 基类没有指定的图元类型,需要在 data 中指定位置,故无需进行 labeling\n return;\n }\n\n protected render() {\n this._prepare();\n\n if (isNil(this._idToGraphic)) {\n return;\n }\n\n const { overlap, smartInvert, dataFilter, customLayoutFunc, customOverlapFunc } = this.attribute;\n let data = this.attribute.data;\n\n if (isFunction(dataFilter)) {\n data = dataFilter(data);\n }\n\n let labels: IText[];\n\n if (isFunction(customLayoutFunc)) {\n labels = customLayoutFunc(data, (d: LabelItem) => this._idToGraphic.get(d.id));\n } else {\n // 根据关联图元和配置的position计算标签坐标\n labels = this._layout(data);\n }\n\n if (isFunction(customOverlapFunc)) {\n labels = customOverlapFunc(labels as Text[], (d: LabelItem) => this._idToGraphic.get(d.id));\n } else {\n // 防重叠逻辑\n if (overlap !== false) {\n labels = this._overlapping(labels);\n }\n }\n\n if (smartInvert !== false) {\n this._smartInvert(labels);\n }\n\n this._renderLabels(labels);\n }\n\n private _bindEvent(target: IGraphic) {\n if (!target) {\n return;\n }\n\n const { hover, select } = this.attribute;\n\n if (hover) {\n target.addEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n target.addEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n target.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _setStates(target: IGraphic) {\n if (!target) {\n return;\n }\n const state = this.attribute.state;\n\n if (!state || isEmpty(state)) {\n return;\n }\n\n target.states = state;\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (target !== this._lastHover && !isEmpty(target.states)) {\n target.addState(StateValue.hover, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.hoverReverse, true);\n }\n });\n this._lastHover = target;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastHover) {\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.hoverReverse);\n node.removeState(StateValue.hover);\n }\n });\n this._lastHover = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (this._lastSelect === target && target.hasState('selected')) {\n // 取消选中\n this._lastSelect = null;\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.selectedReverse);\n node.removeState(StateValue.selected);\n }\n });\n return;\n }\n\n if (!isEmpty(target.states)) {\n target.addState(StateValue.selected, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.selectedReverse, true);\n }\n });\n this._lastSelect = target;\n }\n };\n\n protected _createLabelText(attributes: LabelItem) {\n const text = createText(attributes);\n this._bindEvent(text);\n this._setStates(text);\n return text;\n }\n\n private _prepare() {\n const baseMarks = getMarksByName(this.getRootNode() as IGroup, this.attribute.baseMarkGroupName);\n const currentBaseMarks: IGraphic[] = [];\n baseMarks.forEach(mark => {\n if ((mark as any).releaseStatus !== 'willRelease') {\n currentBaseMarks.push(mark);\n }\n });\n\n this._idToGraphic?.clear();\n this._baseMarks = currentBaseMarks;\n\n if (!currentBaseMarks || currentBaseMarks.length === 0) {\n return;\n }\n\n const { data } = this.attribute;\n\n if (!data || data.length === 0) {\n return;\n }\n\n if (!this._idToGraphic) {\n this._idToGraphic = new Map();\n }\n // generate id mapping before data filter\n for (let i = 0; i < currentBaseMarks.length; i++) {\n const textData = data[i];\n const baseMark = currentBaseMarks[i] as IGraphic;\n if (textData && baseMark) {\n if (!isValid(textData.id)) {\n textData.id = `vrender-component-${this.name}-${i}`;\n }\n this._idToGraphic.set(textData.id, baseMark);\n }\n }\n }\n\n protected _layout(data: LabelItem[] = []): IText[] {\n const { textStyle = {}, position, offset } = this.attribute;\n const labels = [];\n\n for (let i = 0; i < data.length; i++) {\n const textData = data[i];\n const baseMark = this._idToGraphic.get(textData.id);\n\n const labelAttribute = {\n fill: baseMark.attribute.fill,\n ...textStyle,\n ...textData\n };\n const text = this._createLabelText(labelAttribute);\n const textBounds = this.getGraphicBounds(text);\n const graphicBounds = this.getGraphicBounds(baseMark, { x: textData.x as number, y: textData.y as number });\n\n const textLocation = this.labeling(\n textBounds,\n graphicBounds,\n isFunction(position) ? position(textData) : position,\n offset\n );\n\n if (textLocation) {\n labelAttribute.x = textLocation.x;\n labelAttribute.y = textLocation.y;\n text.setAttributes(textLocation);\n }\n\n labels.push(text);\n }\n\n return labels;\n }\n\n protected _overlapping(labels: IText[]) {\n if (labels.length === 0) {\n return [];\n }\n const option = this.attribute.overlap as OverlapAttrs;\n\n const result: IText[] = [];\n const baseMarkGroup = this.getBaseMarkGroup();\n\n const size = option.size ?? {\n width: baseMarkGroup?.AABBBounds.width() ?? 0,\n height: baseMarkGroup?.AABBBounds.height() ?? 0\n };\n\n if (size.width === 0 || size.height === 0) {\n return labels;\n }\n\n const {\n avoidBaseMark,\n strategy = [],\n hideOnHit = true,\n clampForce = true,\n avoidMarks = [],\n overlapPadding\n } = option;\n const bmpTool = this._bmpTool || bitmapTool(size.width, size.height);\n const bitmap = this._bitmap || bmpTool.bitmap();\n const checkBounds = strategy.some(s => s.type === 'bound');\n\n // 躲避关联的基础图元\n if (avoidBaseMark) {\n this._baseMarks?.forEach(mark => {\n mark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, mark.AABBBounds, true));\n });\n }\n\n // 躲避指定图元\n if (avoidMarks.length > 0) {\n avoidMarks.forEach(avoid => {\n if (isString(avoid)) {\n getNoneGroupMarksByName(this.getRootNode() as IGroup, avoid).forEach(avoidMark => {\n avoidMark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, avoidMark.AABBBounds, true));\n });\n } else if (avoid.AABBBounds) {\n bitmap.setRange(boundToRange(bmpTool, avoid.AABBBounds, true));\n }\n });\n }\n\n for (let i = 0; i < labels.length; i++) {\n if (labels[i].visible === false) {\n continue;\n }\n\n const text = labels[i] as IText;\n const baseMark = this._idToGraphic.get((text.attribute as LabelItem).id);\n text.update();\n if (!isRectIntersect(baseMark.AABBBounds, { x1: 0, x2: bmpTool.width, y1: 0, y2: bmpTool.height }, true)) {\n continue;\n }\n\n // 默认位置可以放置\n if (canPlace(bmpTool, bitmap, text.AABBBounds, clampForce, overlapPadding)) {\n // 如果配置了限制在图形内部,需要提前判断;\n if (!checkBounds) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n\n if (checkBounds && baseMark?.AABBBounds && this._canPlaceInside(text.AABBBounds, baseMark?.AABBBounds)) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n }\n\n let hasPlace: ReturnType<typeof place> = false;\n // 发生碰撞,根据策略寻找可放置的位置\n for (let j = 0; j < strategy.length; j++) {\n hasPlace = place(\n bmpTool,\n bitmap,\n strategy[j],\n <BaseLabelAttrs>this.attribute,\n text as Text,\n this.getGraphicBounds(baseMark, labels[i]),\n this.labeling\n );\n if (hasPlace !== false) {\n text.setAttributes({ x: hasPlace.x, y: hasPlace.y });\n result.push(text);\n break;\n }\n }\n\n // 尝试向内挤压\n if (!hasPlace && clampForce) {\n const { dx = 0, dy = 0 } = clampText(text, bmpTool.width, bmpTool.height);\n if (\n !(dx === 0 && dy === 0) &&\n canPlace(\n bmpTool,\n bitmap,\n {\n x1: text.AABBBounds.x1 + dx,\n x2: text.AABBBounds.x2 + dx,\n y1: text.AABBBounds.y1 + dy,\n y2: text.AABBBounds.y2 + dy\n },\n undefined,\n overlapPadding\n )\n ) {\n text.setAttributes({ x: text.attribute.x + dx, y: text.attribute.y + dy });\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n }\n\n !hasPlace && !hideOnHit && result.push(text);\n }\n\n if (isFunction(this.onAfterLabelOverlap)) {\n this.onAfterLabelOverlap(bitmap);\n }\n\n return result;\n }\n\n protected getBaseMarkGroup() {\n const { baseMarkGroupName } = this.attribute as BaseLabelAttrs;\n if (!baseMarkGroupName) {\n return;\n }\n return (this.getRootNode() as IGroup).find(node => node.name === baseMarkGroupName, true) as IGroup;\n }\n\n protected getGraphicBounds(graphic?: IGraphic, point: Partial<PointLocationCfg> = {}): IBoundsLike {\n // if (graphic && !isEmpty((graphic as any).finalAttrs)) {\n // const g = graphic.clone();\n // g.onBeforeAttributeUpdate = graphic.onBeforeAttributeUpdate;\n // g.setAttributes((graphic as any).finalAttrs);\n // g.update();\n // return g.AABBBounds;\n // }\n return (\n graphic?.AABBBounds ||\n ({\n x1: point.x,\n x2: point.x,\n y1: point.y,\n y2: point.y\n } as IBoundsLike)\n );\n }\n\n protected _renderLabels(labels: IText[]) {\n const disableAnimation = this._enableAnimation === false || this.attribute.animation === false;\n\n if (disableAnimation) {\n this._renderWithOutAnimation(labels);\n } else {\n this._renderWithAnimation(labels);\n }\n }\n\n protected _renderWithAnimation(labels: IText[]) {\n const animationConfig = (this.attribute.animation ?? {}) as ILabelAnimation;\n\n const mode = animationConfig.mode ?? DefaultLabelAnimation.mode;\n const duration = animationConfig.duration ?? DefaultLabelAnimation.duration;\n const easing = animationConfig.easing ?? DefaultLabelAnimation.easing;\n const delay = animationConfig.delay ?? 0;\n\n const currentTextMap: Map<any, { text: IText; labelLine?: ILine }> = new Map();\n const prevTextMap: Map<any, { text: IText; labelLine?: ILine }> = this._graphicToText || new Map();\n const texts = [] as IText[];\n\n labels.forEach((text, index) => {\n const labelLine: ILine = this._labelLine(text);\n const relatedGraphic = this._idToGraphic.get((text.attribute as LabelItem).id);\n const state = prevTextMap?.get(relatedGraphic) ? 'update' : 'enter';\n\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(relatedGraphic, labelLine ? { text, labelLine } : { text });\n if (relatedGraphic) {\n const { from, to } = getAnimationAttributes(text.attribute, 'fadeIn');\n this.add(text);\n labelLine && this.add(labelLine);\n\n relatedGraphic.once('animate-bind', () => {\n text.setAttributes(from);\n const listener = this._afterRelatedGraphicAttributeUpdate(text, texts, index, relatedGraphic, {\n mode,\n duration,\n easing,\n to,\n delay\n });\n relatedGraphic.on('afterAttributeUpdate', listener);\n });\n }\n } else if (state === 'update') {\n const prevLabel = prevTextMap.get(relatedGraphic);\n prevTextMap.delete(relatedGraphic);\n currentTextMap.set(relatedGraphic, prevLabel);\n const prevText = prevLabel.text;\n prevText.animate().to(text.attribute, duration, easing);\n if (prevLabel.labelLine) {\n prevLabel.labelLine.animate().to(\n merge({}, prevLabel.labelLine.attribute, {\n visible:\n ((text.attribute as ArcLabelAttrs)?.line?.visible && text.attribute?.visible) ??\n text.attribute?.visible ??\n true,\n points: (text.attribute as ArcLabelAttrs)?.points\n }),\n duration,\n easing\n );\n }\n if (\n animationConfig.increaseEffect !== false &&\n prevText.attribute.text !== text.attribute.text &&\n isValidNumber(Number(prevText.attribute.text) * Number(text.attribute.text))\n ) {\n prevText\n .animate()\n .play(\n new IncreaseCount(\n { text: prevText.attribute.text as string },\n { text: text.attribute.text as string },\n duration,\n easing\n )\n );\n }\n }\n });\n prevTextMap.forEach(label => {\n label.text\n ?.animate()\n .to(getAnimationAttributes(label.text.attribute, 'fadeOut').to, duration, easing)\n .onEnd(() => {\n this.removeChild(label.text);\n if (label?.labelLine) {\n this.removeChild(label.labelLine);\n }\n });\n });\n\n this._graphicToText = currentTextMap;\n }\n\n protected _renderWithOutAnimation(labels: IText[]) {\n const currentTextMap: Map<any, { text: IText; labelLine?: ILine }> = new Map();\n const prevTextMap: Map<any, { text: IText; labelLine?: ILine }> = this._graphicToText || new Map();\n const texts = [] as IText[];\n\n labels.forEach(text => {\n const labelLine = this._labelLine(text);\n const relatedGraphic = this._idToGraphic.get((text.attribute as LabelItem).id);\n const state = prevTextMap?.get(relatedGraphic) ? 'update' : 'enter';\n\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(relatedGraphic, labelLine ? { text, labelLine } : { text });\n this.add(text);\n if (labelLine) {\n this.add(labelLine);\n }\n } else if (state === 'update') {\n const prevLabel = prevTextMap.get(relatedGraphic);\n prevTextMap.delete(relatedGraphic);\n currentTextMap.set(relatedGraphic, prevLabel);\n prevLabel.text.setAttributes(text.attribute);\n if (prevLabel?.labelLine) {\n prevLabel.labelLine.setAttributes({ points: (text.attribute as ArcLabelAttrs)?.points });\n }\n }\n });\n\n prevTextMap.forEach(label => {\n this.removeChild(label.text);\n if (label?.labelLine) {\n this.removeChild(label.labelLine);\n }\n });\n\n this._graphicToText = currentTextMap;\n }\n\n protected _afterRelatedGraphicAttributeUpdate(\n text: IText,\n texts: IText[],\n index: number,\n relatedGraphic: IGraphic,\n { mode, duration, easing, to, delay }: ILabelAnimation & { to: any }\n ) {\n const listener = (event: any) => {\n const { detail } = event;\n if (!detail) {\n return {};\n }\n\n const isValidAnimateState =\n detail &&\n detail.type === AttributeUpdateType.ANIMATE_UPDATE &&\n detail.animationState &&\n detail.animationState.step?.type !== 'wait';\n\n if (!isValidAnimateState) {\n return {};\n }\n\n if (detail.type === AttributeUpdateType.ANIMATE_END) {\n text.setAttributes(to);\n return;\n }\n\n const onEnd = () => {\n if (relatedGraphic) {\n relatedGraphic.onAnimateBind = undefined;\n relatedGraphic.removeEventListener('afterAttributeUpdate', listener);\n }\n };\n\n switch (mode) {\n case 'after':\n // 3. 当前关联图元的动画播放结束后\n if (detail.animationState.end) {\n text.animate({ onEnd }).wait(delay).to(to, duration, easing);\n }\n break;\n case 'after-all':\n // 2. 所有完成后才开始;\n if (index === texts.length - 1) {\n if (detail.animationState.end) {\n texts.forEach(t => {\n t.animate({ onEnd }).wait(delay).to(to, duration, easing);\n });\n }\n }\n break;\n case 'same-time':\n default:\n // 1. 与当前关联图元的动画播放同时进行\n if (detail.animationState.isFirstFrameOfStep) {\n text.animate({ onEnd }).wait(delay).to(to, duration, easing);\n }\n break;\n }\n };\n return listener;\n }\n\n protected _smartInvert(labels: IText[]) {\n const option = (this.attribute.smartInvert || {}) as SmartInvertAttrs;\n const { textType, contrastRatiosThreshold, alternativeColors } = option;\n const fillStrategy = option.fillStrategy ?? 'invertBase';\n const strokeStrategy = option.strokeStrategy ?? 'base';\n const brightColor = option.brightColor ?? '#ffffff';\n const darkColor = option.darkColor ?? '#000000';\n\n if (fillStrategy === 'null' && strokeStrategy === 'null') {\n return;\n }\n\n for (let i = 0; i < labels.length; i++) {\n const label = labels[i];\n if (!label) {\n continue;\n }\n\n const baseMark = this._idToGraphic.get((label.attribute as LabelItem).id);\n const isInside = this._canPlaceInside(label.AABBBounds, baseMark?.AABBBounds);\n\n /**\n * 增加smartInvert时fillStrategy和 strokeStrategy的四种策略:\n * series(baseMark色),\n * invertSeries(执行智能反色),\n * similarSeries(智能反色的补色),\n * null(不执行智能反色,保持fill设置的颜色)\n * */\n const backgroundColor = baseMark.attribute.fill as IColor;\n const foregroundColor = label.attribute.fill as IColor;\n const baseColor = backgroundColor;\n const invertColor = labelSmartInvert(\n foregroundColor,\n backgroundColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors\n );\n const similarColor = contrastAccessibilityChecker(invertColor, brightColor) ? brightColor : darkColor;\n\n if (isInside) {\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n } else {\n /** 当label无法设置stroke时,不进行反色计算(容易反色为白色与白色背景混合不可见) */\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n /** 当label设置stroke时,保留stroke设置的颜色,根据stroke对fill做反色 */\n if (label.attribute.stroke) {\n label.setAttributes({\n fill: labelSmartInvert(\n label.attribute.fill as IColor,\n label.attribute.stroke as IColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors\n )\n });\n continue;\n }\n\n /** 当label未设置stroke,且可设置stroke时,正常计算 */\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n }\n }\n }\n\n /**\n * 是否在图形内部\n * @param textBound\n * @param shapeBound\n * @returns\n */\n protected _canPlaceInside(textBound: IBoundsLike, shapeBound: IAABBBounds) {\n if (!textBound || !shapeBound) {\n return false;\n }\n return shapeBound.encloses(textBound);\n }\n\n setLocation(point: PointLocationCfg) {\n this.translateTo(point.x, point.y);\n }\n\n disableAnimation() {\n this._enableAnimation = false;\n }\n\n enableAnimation() {\n this._enableAnimation = true;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/label/base.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEnF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACxH,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChH,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAEjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAElF,MAAM,OAAO,SAAoC,SAAQ,iBAAoB;IAqB3E,SAAS,CAAC,MAAc;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAGD,aAAa,CAAC,OAAsC;QAClD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAaD,YAAY,UAA0B;QACpC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC,CAAC;QAzC5D,SAAI,GAAG,OAAO,CAAC;QAwIP,aAAQ,GAAG,CAAC,CAAwB,EAAE,EAAE;YAC9C,MAAM,MAAM,GAAG,CAAC,CAAC,MAA6B,CAAC;YAC/C,IAAI,MAAM,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;gBACzD,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACxC,aAAa,CAAC,IAA2B,EAAE,CAAC,IAAc,EAAE,EAAE;oBAC5D,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;wBAC5C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;qBAC9C;gBACH,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;aAC1B;QACH,CAAC,CAAC;QAEM,eAAU,GAAG,CAAC,CAAwB,EAAE,EAAE;YAChD,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,aAAa,CAAC,IAA2B,EAAE,CAAC,IAAc,EAAE,EAAE;oBAC5D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;wBACzB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;wBAC1C,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;qBACpC;gBACH,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;aACxB;QACH,CAAC,CAAC;QAEM,aAAQ,GAAG,CAAC,CAAwB,EAAE,EAAE;YAC9C,MAAM,MAAM,GAAG,CAAC,CAAC,MAA6B,CAAC;YAC/C,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBAE9D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,aAAa,CAAC,IAA2B,EAAE,CAAC,IAAc,EAAE,EAAE;oBAC5D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;wBACzB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;wBAC7C,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;qBACvC;gBACH,CAAC,CAAC,CAAC;gBACH,OAAO;aACR;YAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;gBAC3B,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC3C,aAAa,CAAC,IAA2B,EAAE,CAAC,IAAc,EAAE,EAAE;oBAC5D,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;wBAC5C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;qBACjD;gBACH,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;aAC3B;QACH,CAAC,CAAC;IA9IF,CAAC;IAUS,QAAQ,CAChB,UAAuB,EACvB,aAA0B,EAC1B,QAAqC,EACrC,MAAe;QAGf,OAAO;IACT,CAAC;IAES,UAAU,CAAC,IAAW;QAE9B,OAAO;IACT,CAAC;IAES,MAAM;QACd,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YAC5B,OAAO;SACR;QAED,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QACjG,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAE/B,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE;YAC1B,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;SACzB;QAED,IAAI,MAAe,CAAC;QAEpB,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE;YAChC,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAY,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAChF;aAAM;YAEL,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC7B;QAED,IAAI,UAAU,CAAC,iBAAiB,CAAC,EAAE;YACjC,MAAM,GAAG,iBAAiB,CAAC,MAAgB,EAAE,CAAC,CAAY,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC7F;aAAM;YAEL,IAAI,OAAO,KAAK,KAAK,EAAE;gBACrB,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;aACpC;SACF;QAED,IAAI,WAAW,KAAK,KAAK,EAAE;YACzB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;SAC3B;QAED,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAEO,UAAU,CAAC,MAAgB;QACjC,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAEzC,IAAI,KAAK,EAAE;YACT,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,QAA8C,CAAC,CAAC;YAC5F,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,UAAgD,CAAC,CAAC;SAC9F;QAED,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,QAA8C,CAAC,CAAC;SAC7F;IACH,CAAC;IAEO,UAAU,CAAC,MAAgB;QACjC,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAEnC,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;YAC5B,OAAO;SACR;QAED,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAoDS,gBAAgB,CAAC,UAAqB;QAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,QAAQ;;QACd,MAAM,gBAAgB,GAAe,EAAE,CAAC;QACxC,IAAI,SAAS,CAAC;QACd,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE;YAC3C,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;SAC3C;aAAM;YACL,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,EAAY,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;SAC5F;QAED,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,IAAK,IAAY,CAAC,aAAa,KAAK,aAAa,EAAE;gBACjD,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC7B;QACH,CAAC,CAAC,CAAC;QAEH,MAAA,IAAI,CAAC,YAAY,0CAAE,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC;QAEnC,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;YACtD,OAAO;SACR;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAEhC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;SAC/B;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAa,CAAC;YACjD,IAAI,QAAQ,IAAI,QAAQ,EAAE;gBACxB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;oBACzB,QAAQ,CAAC,EAAE,GAAG,qBAAqB,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;iBACrD;gBACD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;aAC9C;SACF;IACH,CAAC;IAES,OAAO,CAAC,OAAoB,EAAE;QACtC,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5D,MAAM,MAAM,GAAG,EAAE,CAAC;QAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAEpD,MAAM,cAAc,iCAClB,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,IAC1B,SAAS,GACT,QAAQ,CACZ,CAAC;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;YACnD,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAW,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAW,EAAE,CAAC,CAAC;YAE5G,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAChC,UAAU,EACV,aAAa,EACb,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EACpD,MAAM,CACP,CAAC;YAEF,IAAI,YAAY,EAAE;gBAChB,cAAc,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;gBAClC,cAAc,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;gBAClC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;aAClC;YAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACnB;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAES,YAAY,CAAC,MAAe;;QACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,OAAO,EAAE,CAAC;SACX;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAuB,CAAC;QAEtD,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9C,MAAM,IAAI,GAAG,MAAA,MAAM,CAAC,IAAI,mCAAI;YAC1B,KAAK,EAAE,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU,CAAC,KAAK,EAAE,mCAAI,CAAC;YAC7C,MAAM,EAAE,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU,CAAC,MAAM,EAAE,mCAAI,CAAC;SAChD,CAAC;QAEF,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACzC,OAAO,MAAM,CAAC;SACf;QAED,MAAM,EACJ,aAAa,EACb,QAAQ,GAAG,EAAE,EACb,SAAS,GAAG,IAAI,EAChB,UAAU,GAAG,IAAI,EACjB,UAAU,GAAG,EAAE,EACf,cAAc,EACf,GAAG,MAAM,CAAC;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAChD,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAG3D,IAAI,aAAa,EAAE;YACjB,MAAA,IAAI,CAAC,UAAU,0CAAE,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC9B,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;YACnF,CAAC,CAAC,CAAC;SACJ;QAGD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACzB,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACzB,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;oBACnB,uBAAuB,CAAC,IAAI,CAAC,WAAW,EAAY,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;wBAC/E,SAAS,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC7F,CAAC,CAAC,CAAC;iBACJ;qBAAM,IAAI,KAAK,CAAC,UAAU,EAAE;oBAC3B,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;iBAChE;YACH,CAAC,CAAC,CAAC;SACJ;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,EAAE;gBAC/B,SAAS;aACV;YAED,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAU,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAE,IAAI,CAAC,SAAuB,CAAC,EAAE,CAAC,CAAC;YACzE,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE;gBACxG,SAAS;aACV;YAGD,IAAI,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE;gBAE1E,IAAI,CAAC,WAAW,EAAE;oBAChB,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC9D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClB,SAAS;iBACV;gBAED,IAAI,WAAW,KAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,CAAA,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,CAAC,EAAE;oBACtG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC9D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClB,SAAS;iBACV;aACF;YAED,IAAI,QAAQ,GAA6B,KAAK,CAAC;YAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,QAAQ,GAAG,KAAK,CACd,OAAO,EACP,MAAM,EACN,QAAQ,CAAC,CAAC,CAAC,EACK,IAAI,CAAC,SAAS,EAC9B,IAAY,EACZ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAC1C,IAAI,CAAC,QAAQ,CACd,CAAC;gBACF,IAAI,QAAQ,KAAK,KAAK,EAAE;oBACtB,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;oBACrD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClB,MAAM;iBACP;aACF;YAGD,IAAI,CAAC,QAAQ,IAAI,UAAU,EAAE;gBAC3B,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC1E,IACE,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBACvB,QAAQ,CACN,OAAO,EACP,MAAM,EACN;wBACE,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE;wBAC3B,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE;wBAC3B,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE;wBAC3B,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE;qBAC5B,EACD,SAAS,EACT,cAAc,CACf,EACD;oBACA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAC3E,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC9D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClB,SAAS;iBACV;aACF;YAED,CAAC,QAAQ,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC9C;QAED,IAAI,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE;YACxC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;SAClC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAES,gBAAgB;QACxB,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,SAA2B,CAAC;QAC/D,IAAI,CAAC,iBAAiB,EAAE;YACtB,OAAO;SACR;QACD,OAAQ,IAAI,CAAC,WAAW,EAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,IAAI,CAAW,CAAC;IACtG,CAAC;IAES,gBAAgB,CAAC,OAAkB,EAAE,QAAmC,EAAE;QAQlF,OAAO,CACL,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU;YAClB;gBACC,EAAE,EAAE,KAAK,CAAC,CAAC;gBACX,EAAE,EAAE,KAAK,CAAC,CAAC;gBACX,EAAE,EAAE,KAAK,CAAC,CAAC;gBACX,EAAE,EAAE,KAAK,CAAC,CAAC;aACI,CAClB,CAAC;IACJ,CAAC;IAES,aAAa,CAAC,MAAe;QACrC,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,KAAK,KAAK,CAAC;QAE/F,IAAI,gBAAgB,EAAE;YACpB,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;SACtC;aAAM;YACL,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;SACnC;IACH,CAAC;IAES,oBAAoB,CAAC,MAAe;;QAC5C,MAAM,eAAe,GAAG,CAAC,MAAA,IAAI,CAAC,SAAS,CAAC,SAAS,mCAAI,EAAE,CAAoB,CAAC;QAE5E,MAAM,IAAI,GAAG,MAAA,eAAe,CAAC,IAAI,mCAAI,qBAAqB,CAAC,IAAI,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAA,eAAe,CAAC,QAAQ,mCAAI,qBAAqB,CAAC,QAAQ,CAAC;QAC5E,MAAM,MAAM,GAAG,MAAA,eAAe,CAAC,MAAM,mCAAI,qBAAqB,CAAC,MAAM,CAAC;QACtE,MAAM,KAAK,GAAG,MAAA,eAAe,CAAC,KAAK,mCAAI,CAAC,CAAC;QAEzC,MAAM,cAAc,GAAiD,IAAI,GAAG,EAAE,CAAC;QAC/E,MAAM,WAAW,GAAiD,IAAI,CAAC,cAAc,IAAI,IAAI,GAAG,EAAE,CAAC;QACnG,MAAM,KAAK,GAAG,EAAa,CAAC;QAE5B,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;;YAC7B,MAAM,SAAS,GAAU,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAE,IAAI,CAAC,SAAuB,CAAC,EAAE,CAAC,CAAC;YAC/E,MAAM,KAAK,GAAG,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,GAAG,CAAC,cAAc,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YAEpE,IAAI,KAAK,KAAK,OAAO,EAAE;gBACrB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/E,IAAI,cAAc,EAAE;oBAClB,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBACtE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACf,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAEjC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE;wBACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;wBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,mCAAmC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE;4BAC5F,IAAI;4BACJ,QAAQ;4BACR,MAAM;4BACN,EAAE;4BACF,KAAK;yBACN,CAAC,CAAC;wBACH,cAAc,CAAC,EAAE,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;oBACtD,CAAC,CAAC,CAAC;iBACJ;aACF;iBAAM,IAAI,KAAK,KAAK,QAAQ,EAAE;gBAC7B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBAClD,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACnC,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;gBAC9C,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC;gBAChC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACxD,IAAI,SAAS,CAAC,SAAS,EAAE;oBACvB,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAC9B,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE;wBACvC,OAAO,EACL,MAAA,MAAA,CAAC,CAAA,MAAA,MAAC,IAAI,CAAC,SAA2B,0CAAE,IAAI,0CAAE,OAAO,MAAI,MAAA,IAAI,CAAC,SAAS,0CAAE,OAAO,CAAA,CAAC,mCAC7E,MAAA,IAAI,CAAC,SAAS,0CAAE,OAAO,mCACvB,IAAI;wBACN,MAAM,EAAE,MAAC,IAAI,CAAC,SAA2B,0CAAE,MAAM;qBAClD,CAAC,EACF,QAAQ,EACR,MAAM,CACP,CAAC;iBACH;gBACD,IACE,eAAe,CAAC,cAAc,KAAK,KAAK;oBACxC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI;oBAC/C,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAC5E;oBACA,QAAQ;yBACL,OAAO,EAAE;yBACT,IAAI,CACH,IAAI,aAAa,CACf,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAc,EAAE,EAC3C,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAc,EAAE,EACvC,QAAQ,EACR,MAAM,CACP,CACF,CAAC;iBACL;aACF;QACH,CAAC,CAAC,CAAC;QACH,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;;YAC1B,MAAA,KAAK,CAAC,IAAI,0CACN,OAAO,GACR,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAC/E,KAAK,CAAC,GAAG,EAAE;gBACV,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,EAAE;oBACpB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;iBACnC;YACH,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAES,uBAAuB,CAAC,MAAe;QAC/C,MAAM,cAAc,GAAiD,IAAI,GAAG,EAAE,CAAC;QAC/E,MAAM,WAAW,GAAiD,IAAI,CAAC,cAAc,IAAI,IAAI,GAAG,EAAE,CAAC;QACnG,MAAM,KAAK,GAAG,EAAa,CAAC;QAE5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;;YACpB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAE,IAAI,CAAC,SAAuB,CAAC,EAAE,CAAC,CAAC;YAC/E,MAAM,KAAK,GAAG,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,GAAG,CAAC,cAAc,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YAEpE,IAAI,KAAK,KAAK,OAAO,EAAE;gBACrB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/E,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACf,IAAI,SAAS,EAAE;oBACb,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;iBACrB;aACF;iBAAM,IAAI,KAAK,KAAK,QAAQ,EAAE;gBAC7B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBAClD,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACnC,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;gBAC9C,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7C,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,EAAE;oBACxB,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,MAAC,IAAI,CAAC,SAA2B,0CAAE,MAAM,EAAE,CAAC,CAAC;iBAC1F;aACF;QACH,CAAC,CAAC,CAAC;QAEH,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC1B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,EAAE;gBACpB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;aACnC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAES,mCAAmC,CAC3C,IAAW,EACX,KAAc,EACd,KAAa,EACb,cAAwB,EACxB,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAiC;QAEpE,MAAM,QAAQ,GAAG,CAAC,KAAU,EAAE,EAAE;;YAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,MAAM,EAAE;gBACX,OAAO,EAAE,CAAC;aACX;YAED,MAAM,mBAAmB,GACvB,MAAM;gBACN,MAAM,CAAC,IAAI,KAAK,mBAAmB,CAAC,cAAc;gBAClD,MAAM,CAAC,cAAc;gBACrB,CAAA,MAAA,MAAM,CAAC,cAAc,CAAC,IAAI,0CAAE,IAAI,MAAK,MAAM,CAAC;YAE9C,IAAI,CAAC,mBAAmB,EAAE;gBACxB,OAAO,EAAE,CAAC;aACX;YAED,IAAI,MAAM,CAAC,IAAI,KAAK,mBAAmB,CAAC,WAAW,EAAE;gBACnD,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBACvB,OAAO;aACR;YAED,MAAM,KAAK,GAAG,GAAG,EAAE;gBACjB,IAAI,cAAc,EAAE;oBAClB,cAAc,CAAC,aAAa,GAAG,SAAS,CAAC;oBACzC,cAAc,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;iBACtE;YACH,CAAC,CAAC;YAEF,QAAQ,IAAI,EAAE;gBACZ,KAAK,OAAO;oBAEV,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE;wBAC7B,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;qBAC9D;oBACD,MAAM;gBACR,KAAK,WAAW;oBAEd,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC9B,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE;4BAC7B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gCAChB,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;4BAC5D,CAAC,CAAC,CAAC;yBACJ;qBACF;oBACD,MAAM;gBACR,KAAK,WAAW,CAAC;gBACjB;oBAEE,IAAI,MAAM,CAAC,cAAc,CAAC,kBAAkB,EAAE;wBAC5C,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;qBAC9D;oBACD,MAAM;aACT;QACH,CAAC,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAES,YAAY,CAAC,MAAe;;QACpC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,EAAE,CAAqB,CAAC;QACtE,MAAM,EAAE,QAAQ,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;QACxE,MAAM,YAAY,GAAG,MAAA,MAAM,CAAC,YAAY,mCAAI,YAAY,CAAC;QACzD,MAAM,cAAc,GAAG,MAAA,MAAM,CAAC,cAAc,mCAAI,MAAM,CAAC;QACvD,MAAM,WAAW,GAAG,MAAA,MAAM,CAAC,WAAW,mCAAI,SAAS,CAAC;QACpD,MAAM,SAAS,GAAG,MAAA,MAAM,CAAC,SAAS,mCAAI,SAAS,CAAC;QAEhD,IAAI,YAAY,KAAK,MAAM,IAAI,cAAc,KAAK,MAAM,EAAE;YACxD,OAAO;SACR;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,EAAE;gBACV,SAAS;aACV;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAE,KAAK,CAAC,SAAuB,CAAC,EAAE,CAAC,CAAC;YAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,CAAC,CAAC;YAS9E,MAAM,eAAe,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAc,CAAC;YAC1D,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,IAAc,CAAC;YACvD,MAAM,SAAS,GAAG,eAAe,CAAC;YAClC,MAAM,WAAW,GAAG,gBAAgB,CAClC,eAAe,EACf,eAAe,EACf,QAAQ,EACR,uBAAuB,EACvB,iBAAiB,CAClB,CAAC;YACF,MAAM,YAAY,GAAG,4BAA4B,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;YAEtG,IAAI,QAAQ,EAAE;gBACZ,MAAM,IAAI,GAAG,mBAAmB,CAAC,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;gBACrF,IAAI,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBAEtC,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,KAAK,CAAC,EAAE;oBACnC,SAAS;iBACV;gBAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;gBACzF,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;aAC3C;iBAAM;gBAEL,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,KAAK,CAAC,EAAE;oBACnC,SAAS;iBACV;gBAGD,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE;oBAC1B,KAAK,CAAC,aAAa,CAAC;wBAClB,IAAI,EAAE,gBAAgB,CACpB,KAAK,CAAC,SAAS,CAAC,IAAc,EAC9B,KAAK,CAAC,SAAS,CAAC,MAAgB,EAChC,QAAQ,EACR,uBAAuB,EACvB,iBAAiB,CAClB;qBACF,CAAC,CAAC;oBACH,SAAS;iBACV;gBAGD,MAAM,IAAI,GAAG,mBAAmB,CAAC,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;gBACrF,IAAI,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBAEtC,MAAM,MAAM,GAAG,mBAAmB,CAAC,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;gBACzF,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;aAC3C;SACF;IACH,CAAC;IAQS,eAAe,CAAC,SAAsB,EAAE,UAAuB;QACvE,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,EAAE;YAC7B,OAAO,KAAK,CAAC;SACd;QACD,OAAO,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,WAAW,CAAC,KAAuB;QACjC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;IAED,eAAe;QACb,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC/B,CAAC;;AA1tBM,2BAAiB,GAA4B;IAClD,SAAS,EAAE;QACT,QAAQ,EAAE,EAAE;QAIZ,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,QAAQ;QACtB,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;KAC9B;IACD,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,KAAK;CAChB,CAAC","file":"base.js","sourcesContent":["/**\n * @description Label 基类\n */\nimport type { IGroup, Text, IGraphic, IText, FederatedPointerEvent, IColor, ILine } from '@visactor/vrender';\nimport { createText, IncreaseCount, AttributeUpdateType } from '@visactor/vrender';\nimport type { IAABBBounds, IBoundsLike } from '@visactor/vutils';\nimport { isFunction, isValidNumber, isEmpty, isValid, isString, merge, isRectIntersect, isNil } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { PointLocationCfg } from '../core/type';\nimport { labelSmartInvert, contrastAccessibilityChecker, smartInvertStrategy } from '../util/label-smartInvert';\nimport { getMarksByName, getNoneGroupMarksByName, traverseGroup } from '../util';\nimport { StateValue } from '../constant';\nimport type { Bitmap } from './overlap';\nimport { bitmapTool, boundToRange, canPlace, clampText, place } from './overlap';\nimport type { BaseLabelAttrs, OverlapAttrs, ILabelAnimation, ArcLabelAttrs, LabelItem, SmartInvertAttrs } from './type';\nimport { DefaultLabelAnimation, getAnimationAttributes } from './animate/animate';\n\nexport class LabelBase<T extends BaseLabelAttrs> extends AbstractComponent<T> {\n name = 'label';\n\n protected _baseMarks?: IGraphic[];\n\n protected _bitmap?: Bitmap;\n\n static defaultAttributes: Partial<BaseLabelAttrs> = {\n textStyle: {\n fontSize: 12,\n // FIXME: we need a default color. Yet in current logic, textStyle will override fill from baseMark.\n // This need a new config option like `colorFull`\n // fill: '#000',\n textAlign: 'center',\n textBaseline: 'middle',\n boundsPadding: [-1, 0, -1, 0] // to ignore the textBound buf\n },\n offset: 0,\n pickable: false\n };\n\n setBitmap(bitmap: Bitmap) {\n this._bitmap = bitmap;\n }\n\n protected _bmpTool?: ReturnType<typeof bitmapTool>;\n setBitmapTool(bmpTool: ReturnType<typeof bitmapTool>) {\n this._bmpTool = bmpTool;\n }\n\n protected _graphicToText: Map<IGraphic, { text: IText; labelLine?: ILine }>;\n\n protected _idToGraphic: Map<string, IGraphic>;\n\n onAfterLabelOverlap?: (bitmap: Bitmap) => void;\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n private _enableAnimation: boolean;\n\n constructor(attributes: BaseLabelAttrs) {\n super(merge({}, LabelBase.defaultAttributes, attributes));\n }\n\n /**\n * 计算 text 的最终位置属性x, y\n * @param textBounds\n * @param graphicBounds\n * @param position\n * @param offset\n * @returns\n */\n protected labeling(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position?: BaseLabelAttrs['position'],\n offset?: number\n ): { x: number; y: number } | undefined {\n // 基类没有指定的图元类型,需要在 data 中指定位置,故无需进行 labeling\n return;\n }\n\n protected _labelLine(text: IText): ILine | undefined {\n // 基类没有指定的图元类型,需要在 data 中指定位置,故无需进行 labeling\n return;\n }\n\n protected render() {\n this._prepare();\n\n if (isNil(this._idToGraphic)) {\n return;\n }\n\n const { overlap, smartInvert, dataFilter, customLayoutFunc, customOverlapFunc } = this.attribute;\n let data = this.attribute.data;\n\n if (isFunction(dataFilter)) {\n data = dataFilter(data);\n }\n\n let labels: IText[];\n\n if (isFunction(customLayoutFunc)) {\n labels = customLayoutFunc(data, (d: LabelItem) => this._idToGraphic.get(d.id));\n } else {\n // 根据关联图元和配置的position计算标签坐标\n labels = this._layout(data);\n }\n\n if (isFunction(customOverlapFunc)) {\n labels = customOverlapFunc(labels as Text[], (d: LabelItem) => this._idToGraphic.get(d.id));\n } else {\n // 防重叠逻辑\n if (overlap !== false) {\n labels = this._overlapping(labels);\n }\n }\n\n if (smartInvert !== false) {\n this._smartInvert(labels);\n }\n\n this._renderLabels(labels);\n }\n\n private _bindEvent(target: IGraphic) {\n if (!target) {\n return;\n }\n\n const { hover, select } = this.attribute;\n\n if (hover) {\n target.addEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n target.addEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n target.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _setStates(target: IGraphic) {\n if (!target) {\n return;\n }\n const state = this.attribute.state;\n\n if (!state || isEmpty(state)) {\n return;\n }\n\n target.states = state;\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (target !== this._lastHover && !isEmpty(target.states)) {\n target.addState(StateValue.hover, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.hoverReverse, true);\n }\n });\n this._lastHover = target;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastHover) {\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.hoverReverse);\n node.removeState(StateValue.hover);\n }\n });\n this._lastHover = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (this._lastSelect === target && target.hasState('selected')) {\n // 取消选中\n this._lastSelect = null;\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.selectedReverse);\n node.removeState(StateValue.selected);\n }\n });\n return;\n }\n\n if (!isEmpty(target.states)) {\n target.addState(StateValue.selected, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.selectedReverse, true);\n }\n });\n this._lastSelect = target;\n }\n };\n\n protected _createLabelText(attributes: LabelItem) {\n const text = createText(attributes);\n this._bindEvent(text);\n this._setStates(text);\n return text;\n }\n\n private _prepare() {\n const currentBaseMarks: IGraphic[] = [];\n let baseMarks;\n if (isFunction(this.attribute.getBaseMarks)) {\n baseMarks = this.attribute.getBaseMarks();\n } else {\n baseMarks = getMarksByName(this.getRootNode() as IGroup, this.attribute.baseMarkGroupName);\n }\n\n baseMarks.forEach(mark => {\n if ((mark as any).releaseStatus !== 'willRelease') {\n currentBaseMarks.push(mark);\n }\n });\n\n this._idToGraphic?.clear();\n this._baseMarks = currentBaseMarks;\n\n if (!currentBaseMarks || currentBaseMarks.length === 0) {\n return;\n }\n\n const { data } = this.attribute;\n\n if (!data || data.length === 0) {\n return;\n }\n\n if (!this._idToGraphic) {\n this._idToGraphic = new Map();\n }\n // generate id mapping before data filter\n for (let i = 0; i < currentBaseMarks.length; i++) {\n const textData = data[i];\n const baseMark = currentBaseMarks[i] as IGraphic;\n if (textData && baseMark) {\n if (!isValid(textData.id)) {\n textData.id = `vrender-component-${this.name}-${i}`;\n }\n this._idToGraphic.set(textData.id, baseMark);\n }\n }\n }\n\n protected _layout(data: LabelItem[] = []): IText[] {\n const { textStyle = {}, position, offset } = this.attribute;\n const labels = [];\n\n for (let i = 0; i < data.length; i++) {\n const textData = data[i];\n const baseMark = this._idToGraphic.get(textData.id);\n\n const labelAttribute = {\n fill: baseMark.attribute.fill,\n ...textStyle,\n ...textData\n };\n const text = this._createLabelText(labelAttribute);\n const textBounds = this.getGraphicBounds(text);\n const graphicBounds = this.getGraphicBounds(baseMark, { x: textData.x as number, y: textData.y as number });\n\n const textLocation = this.labeling(\n textBounds,\n graphicBounds,\n isFunction(position) ? position(textData) : position,\n offset\n );\n\n if (textLocation) {\n labelAttribute.x = textLocation.x;\n labelAttribute.y = textLocation.y;\n text.setAttributes(textLocation);\n }\n\n labels.push(text);\n }\n\n return labels;\n }\n\n protected _overlapping(labels: IText[]) {\n if (labels.length === 0) {\n return [];\n }\n const option = this.attribute.overlap as OverlapAttrs;\n\n const result: IText[] = [];\n const baseMarkGroup = this.getBaseMarkGroup();\n\n const size = option.size ?? {\n width: baseMarkGroup?.AABBBounds.width() ?? 0,\n height: baseMarkGroup?.AABBBounds.height() ?? 0\n };\n\n if (size.width === 0 || size.height === 0) {\n return labels;\n }\n\n const {\n avoidBaseMark,\n strategy = [],\n hideOnHit = true,\n clampForce = true,\n avoidMarks = [],\n overlapPadding\n } = option;\n const bmpTool = this._bmpTool || bitmapTool(size.width, size.height);\n const bitmap = this._bitmap || bmpTool.bitmap();\n const checkBounds = strategy.some(s => s.type === 'bound');\n\n // 躲避关联的基础图元\n if (avoidBaseMark) {\n this._baseMarks?.forEach(mark => {\n mark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, mark.AABBBounds, true));\n });\n }\n\n // 躲避指定图元\n if (avoidMarks.length > 0) {\n avoidMarks.forEach(avoid => {\n if (isString(avoid)) {\n getNoneGroupMarksByName(this.getRootNode() as IGroup, avoid).forEach(avoidMark => {\n avoidMark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, avoidMark.AABBBounds, true));\n });\n } else if (avoid.AABBBounds) {\n bitmap.setRange(boundToRange(bmpTool, avoid.AABBBounds, true));\n }\n });\n }\n\n for (let i = 0; i < labels.length; i++) {\n if (labels[i].visible === false) {\n continue;\n }\n\n const text = labels[i] as IText;\n const baseMark = this._idToGraphic.get((text.attribute as LabelItem).id);\n text.update();\n if (!isRectIntersect(baseMark.AABBBounds, { x1: 0, x2: bmpTool.width, y1: 0, y2: bmpTool.height }, true)) {\n continue;\n }\n\n // 默认位置可以放置\n if (canPlace(bmpTool, bitmap, text.AABBBounds, clampForce, overlapPadding)) {\n // 如果配置了限制在图形内部,需要提前判断;\n if (!checkBounds) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n\n if (checkBounds && baseMark?.AABBBounds && this._canPlaceInside(text.AABBBounds, baseMark?.AABBBounds)) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n }\n\n let hasPlace: ReturnType<typeof place> = false;\n // 发生碰撞,根据策略寻找可放置的位置\n for (let j = 0; j < strategy.length; j++) {\n hasPlace = place(\n bmpTool,\n bitmap,\n strategy[j],\n <BaseLabelAttrs>this.attribute,\n text as Text,\n this.getGraphicBounds(baseMark, labels[i]),\n this.labeling\n );\n if (hasPlace !== false) {\n text.setAttributes({ x: hasPlace.x, y: hasPlace.y });\n result.push(text);\n break;\n }\n }\n\n // 尝试向内挤压\n if (!hasPlace && clampForce) {\n const { dx = 0, dy = 0 } = clampText(text, bmpTool.width, bmpTool.height);\n if (\n !(dx === 0 && dy === 0) &&\n canPlace(\n bmpTool,\n bitmap,\n {\n x1: text.AABBBounds.x1 + dx,\n x2: text.AABBBounds.x2 + dx,\n y1: text.AABBBounds.y1 + dy,\n y2: text.AABBBounds.y2 + dy\n },\n undefined,\n overlapPadding\n )\n ) {\n text.setAttributes({ x: text.attribute.x + dx, y: text.attribute.y + dy });\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n }\n\n !hasPlace && !hideOnHit && result.push(text);\n }\n\n if (isFunction(this.onAfterLabelOverlap)) {\n this.onAfterLabelOverlap(bitmap);\n }\n\n return result;\n }\n\n protected getBaseMarkGroup() {\n const { baseMarkGroupName } = this.attribute as BaseLabelAttrs;\n if (!baseMarkGroupName) {\n return;\n }\n return (this.getRootNode() as IGroup).find(node => node.name === baseMarkGroupName, true) as IGroup;\n }\n\n protected getGraphicBounds(graphic?: IGraphic, point: Partial<PointLocationCfg> = {}): IBoundsLike {\n // if (graphic && !isEmpty((graphic as any).finalAttrs)) {\n // const g = graphic.clone();\n // g.onBeforeAttributeUpdate = graphic.onBeforeAttributeUpdate;\n // g.setAttributes((graphic as any).finalAttrs);\n // g.update();\n // return g.AABBBounds;\n // }\n return (\n graphic?.AABBBounds ||\n ({\n x1: point.x,\n x2: point.x,\n y1: point.y,\n y2: point.y\n } as IBoundsLike)\n );\n }\n\n protected _renderLabels(labels: IText[]) {\n const disableAnimation = this._enableAnimation === false || this.attribute.animation === false;\n\n if (disableAnimation) {\n this._renderWithOutAnimation(labels);\n } else {\n this._renderWithAnimation(labels);\n }\n }\n\n protected _renderWithAnimation(labels: IText[]) {\n const animationConfig = (this.attribute.animation ?? {}) as ILabelAnimation;\n\n const mode = animationConfig.mode ?? DefaultLabelAnimation.mode;\n const duration = animationConfig.duration ?? DefaultLabelAnimation.duration;\n const easing = animationConfig.easing ?? DefaultLabelAnimation.easing;\n const delay = animationConfig.delay ?? 0;\n\n const currentTextMap: Map<any, { text: IText; labelLine?: ILine }> = new Map();\n const prevTextMap: Map<any, { text: IText; labelLine?: ILine }> = this._graphicToText || new Map();\n const texts = [] as IText[];\n\n labels.forEach((text, index) => {\n const labelLine: ILine = this._labelLine(text);\n const relatedGraphic = this._idToGraphic.get((text.attribute as LabelItem).id);\n const state = prevTextMap?.get(relatedGraphic) ? 'update' : 'enter';\n\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(relatedGraphic, labelLine ? { text, labelLine } : { text });\n if (relatedGraphic) {\n const { from, to } = getAnimationAttributes(text.attribute, 'fadeIn');\n this.add(text);\n labelLine && this.add(labelLine);\n\n relatedGraphic.once('animate-bind', () => {\n text.setAttributes(from);\n const listener = this._afterRelatedGraphicAttributeUpdate(text, texts, index, relatedGraphic, {\n mode,\n duration,\n easing,\n to,\n delay\n });\n relatedGraphic.on('afterAttributeUpdate', listener);\n });\n }\n } else if (state === 'update') {\n const prevLabel = prevTextMap.get(relatedGraphic);\n prevTextMap.delete(relatedGraphic);\n currentTextMap.set(relatedGraphic, prevLabel);\n const prevText = prevLabel.text;\n prevText.animate().to(text.attribute, duration, easing);\n if (prevLabel.labelLine) {\n prevLabel.labelLine.animate().to(\n merge({}, prevLabel.labelLine.attribute, {\n visible:\n ((text.attribute as ArcLabelAttrs)?.line?.visible && text.attribute?.visible) ??\n text.attribute?.visible ??\n true,\n points: (text.attribute as ArcLabelAttrs)?.points\n }),\n duration,\n easing\n );\n }\n if (\n animationConfig.increaseEffect !== false &&\n prevText.attribute.text !== text.attribute.text &&\n isValidNumber(Number(prevText.attribute.text) * Number(text.attribute.text))\n ) {\n prevText\n .animate()\n .play(\n new IncreaseCount(\n { text: prevText.attribute.text as string },\n { text: text.attribute.text as string },\n duration,\n easing\n )\n );\n }\n }\n });\n prevTextMap.forEach(label => {\n label.text\n ?.animate()\n .to(getAnimationAttributes(label.text.attribute, 'fadeOut').to, duration, easing)\n .onEnd(() => {\n this.removeChild(label.text);\n if (label?.labelLine) {\n this.removeChild(label.labelLine);\n }\n });\n });\n\n this._graphicToText = currentTextMap;\n }\n\n protected _renderWithOutAnimation(labels: IText[]) {\n const currentTextMap: Map<any, { text: IText; labelLine?: ILine }> = new Map();\n const prevTextMap: Map<any, { text: IText; labelLine?: ILine }> = this._graphicToText || new Map();\n const texts = [] as IText[];\n\n labels.forEach(text => {\n const labelLine = this._labelLine(text);\n const relatedGraphic = this._idToGraphic.get((text.attribute as LabelItem).id);\n const state = prevTextMap?.get(relatedGraphic) ? 'update' : 'enter';\n\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(relatedGraphic, labelLine ? { text, labelLine } : { text });\n this.add(text);\n if (labelLine) {\n this.add(labelLine);\n }\n } else if (state === 'update') {\n const prevLabel = prevTextMap.get(relatedGraphic);\n prevTextMap.delete(relatedGraphic);\n currentTextMap.set(relatedGraphic, prevLabel);\n prevLabel.text.setAttributes(text.attribute);\n if (prevLabel?.labelLine) {\n prevLabel.labelLine.setAttributes({ points: (text.attribute as ArcLabelAttrs)?.points });\n }\n }\n });\n\n prevTextMap.forEach(label => {\n this.removeChild(label.text);\n if (label?.labelLine) {\n this.removeChild(label.labelLine);\n }\n });\n\n this._graphicToText = currentTextMap;\n }\n\n protected _afterRelatedGraphicAttributeUpdate(\n text: IText,\n texts: IText[],\n index: number,\n relatedGraphic: IGraphic,\n { mode, duration, easing, to, delay }: ILabelAnimation & { to: any }\n ) {\n const listener = (event: any) => {\n const { detail } = event;\n if (!detail) {\n return {};\n }\n\n const isValidAnimateState =\n detail &&\n detail.type === AttributeUpdateType.ANIMATE_UPDATE &&\n detail.animationState &&\n detail.animationState.step?.type !== 'wait';\n\n if (!isValidAnimateState) {\n return {};\n }\n\n if (detail.type === AttributeUpdateType.ANIMATE_END) {\n text.setAttributes(to);\n return;\n }\n\n const onEnd = () => {\n if (relatedGraphic) {\n relatedGraphic.onAnimateBind = undefined;\n relatedGraphic.removeEventListener('afterAttributeUpdate', listener);\n }\n };\n\n switch (mode) {\n case 'after':\n // 3. 当前关联图元的动画播放结束后\n if (detail.animationState.end) {\n text.animate({ onEnd }).wait(delay).to(to, duration, easing);\n }\n break;\n case 'after-all':\n // 2. 所有完成后才开始;\n if (index === texts.length - 1) {\n if (detail.animationState.end) {\n texts.forEach(t => {\n t.animate({ onEnd }).wait(delay).to(to, duration, easing);\n });\n }\n }\n break;\n case 'same-time':\n default:\n // 1. 与当前关联图元的动画播放同时进行\n if (detail.animationState.isFirstFrameOfStep) {\n text.animate({ onEnd }).wait(delay).to(to, duration, easing);\n }\n break;\n }\n };\n return listener;\n }\n\n protected _smartInvert(labels: IText[]) {\n const option = (this.attribute.smartInvert || {}) as SmartInvertAttrs;\n const { textType, contrastRatiosThreshold, alternativeColors } = option;\n const fillStrategy = option.fillStrategy ?? 'invertBase';\n const strokeStrategy = option.strokeStrategy ?? 'base';\n const brightColor = option.brightColor ?? '#ffffff';\n const darkColor = option.darkColor ?? '#000000';\n\n if (fillStrategy === 'null' && strokeStrategy === 'null') {\n return;\n }\n\n for (let i = 0; i < labels.length; i++) {\n const label = labels[i];\n if (!label) {\n continue;\n }\n\n const baseMark = this._idToGraphic.get((label.attribute as LabelItem).id);\n const isInside = this._canPlaceInside(label.AABBBounds, baseMark?.AABBBounds);\n\n /**\n * 增加smartInvert时fillStrategy和 strokeStrategy的四种策略:\n * series(baseMark色),\n * invertSeries(执行智能反色),\n * similarSeries(智能反色的补色),\n * null(不执行智能反色,保持fill设置的颜色)\n * */\n const backgroundColor = baseMark.attribute.fill as IColor;\n const foregroundColor = label.attribute.fill as IColor;\n const baseColor = backgroundColor;\n const invertColor = labelSmartInvert(\n foregroundColor,\n backgroundColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors\n );\n const similarColor = contrastAccessibilityChecker(invertColor, brightColor) ? brightColor : darkColor;\n\n if (isInside) {\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n } else {\n /** 当label无法设置stroke时,不进行反色计算(容易反色为白色与白色背景混合不可见) */\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n /** 当label设置stroke时,保留stroke设置的颜色,根据stroke对fill做反色 */\n if (label.attribute.stroke) {\n label.setAttributes({\n fill: labelSmartInvert(\n label.attribute.fill as IColor,\n label.attribute.stroke as IColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors\n )\n });\n continue;\n }\n\n /** 当label未设置stroke,且可设置stroke时,正常计算 */\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n }\n }\n }\n\n /**\n * 是否在图形内部\n * @param textBound\n * @param shapeBound\n * @returns\n */\n protected _canPlaceInside(textBound: IBoundsLike, shapeBound: IAABBBounds) {\n if (!textBound || !shapeBound) {\n return false;\n }\n return shapeBound.encloses(textBound);\n }\n\n setLocation(point: PointLocationCfg) {\n this.translateTo(point.x, point.y);\n }\n\n disableAnimation() {\n this._enableAnimation = false;\n }\n\n enableAnimation() {\n this._enableAnimation = true;\n }\n}\n"]}
@@ -13,6 +13,7 @@ export type LabelItem = {
13
13
  export interface BaseLabelAttrs extends IGroupGraphicAttribute {
14
14
  type: string;
15
15
  baseMarkGroupName: string;
16
+ getBaseMarks?: () => IGraphic[];
16
17
  select?: boolean;
17
18
  hover?: boolean;
18
19
  data: LabelItem[];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/label/type.ts"],"names":[],"mappings":"","file":"type.js","sourcesContent":["import type {\n EasingType,\n IGraphic,\n IGroupGraphicAttribute,\n ITextGraphicAttribute,\n Text,\n TextAlignType,\n TextBaselineType,\n ILineGraphicAttribute\n} from '@visactor/vrender';\n\nexport type LabelItemStateStyle<T> = {\n hover?: T;\n hover_reverse?: T;\n selected?: T;\n selected_reverse?: T;\n};\n\nexport type LabelItem = {\n // 用于动画\n id?: string;\n // 原始数据\n data?: any;\n [key: string]: any;\n} & ITextGraphicAttribute;\n\nexport interface BaseLabelAttrs extends IGroupGraphicAttribute {\n type: string;\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n /**\n * 是否开启选中交互\n * @default false\n */\n select?: boolean;\n /**\n * 是否开启 hover 交互\n * @default false\n */\n hover?: boolean;\n /**\n * 标签数据\n */\n data: LabelItem[];\n\n /** 文本样式,优先级低于 data */\n textStyle?: Partial<ITextGraphicAttribute>;\n\n /** 文本交互样式 */\n state?: LabelItemStateStyle<ITextGraphicAttribute>;\n\n /** 标签默认位置 */\n position?: Functional<string>;\n\n /** 偏移量 */\n offset?: number;\n\n /** 是否开启防重叠\n * @default true\n */\n overlap?: OverlapAttrs | false;\n\n /** 智能反色 */\n smartInvert?: SmartInvertAttrs | false;\n\n /** 动画配置 */\n animation?: ILabelAnimation | false;\n\n // 排序 or 删减\n dataFilter?: (data: LabelItem[]) => LabelItem[];\n\n /** 自定义布局函数\n * @description 当配置了 customLayoutFunc 后,默认布局逻辑将不再生效。(position/offset不生效)\n */\n customLayoutFunc?: (data: LabelItem[], getRelatedGraphic: (data: LabelItem) => IGraphic) => Text[];\n\n /** 自定义标签躲避函数\n * @description 当配置了 customOverlapFunc 后,会根据 position 和 offset 进行初始布局。配置的防重叠逻辑(overlap)不生效。\n */\n customOverlapFunc?: (label: Text[], getRelatedGraphic: (data: LabelItem) => IGraphic) => Text[];\n}\n\nexport interface OverlapAttrs {\n /**\n * 防重叠的区域大小\n */\n size?: { width: number; height: number };\n\n /**\n * 发生重叠后,是否隐藏标签\n * @default true\n */\n hideOnHit?: boolean;\n\n /**\n * 是否约束标签在指定 size 的范围内。开启后若标签被区域裁剪,会向内收缩。\n * @default true\n */\n clampForce?: boolean;\n\n /**\n * 是否躲避基础图元\n * @default false\n */\n avoidBaseMark?: boolean;\n\n /**\n * 躲避指定图元\n * @default []\n */\n avoidMarks?: string[] | IGraphic[];\n\n /**\n * 发生重叠后的躲避策略\n */\n strategy?: Strategy[];\n\n /**\n * 文字在防重叠计算中预留的边距。\n * @default 0\n */\n overlapPadding?: number;\n}\n\nexport interface SmartInvertAttrs {\n /**\n * 文本类型\n * 包含普通文本和大文本,对应不同的对比度标准,label默认为普通文本\n * 'normalText' | 'largeText'\n * @default 'normalText'\n */\n textType?: string;\n /**\n * 自定义对比度阈值\n */\n contrastRatiosThreshold?: number;\n /**\n * 自定义备选label颜色\n */\n alternativeColors?: string | string[];\n /**\n * fillStrategy四种策略:\n * - base(baseMark色),\n * - invertBase(执行智能反色),\n * - similarBase(智能反色的补色),\n * - null(不执行智能反色,保持stroke设置的颜色)\n * @default 'invertSeries'\n */\n fillStrategy?: 'base' | 'invertBase' | 'similarBase' | 'null';\n /**\n * strokeStrategy的四种策略:\n * - base(baseMark色),\n * - invertBase(执行智能反色),\n * - similarBase(智能反色的补色),\n * - null(不执行智能反色,保持fill设置的颜色)\n * @default 'series'\n */\n strokeStrategy?: 'base' | 'invertBase' | 'similarBase' | 'null';\n /**\n * 前景色与亮色具有对比度时,similarSeries使用该色\n * @default '#ffffff'\n */\n brightColor?: string;\n /**\n * 前景色与暗色具有对比度时,similarSeries使用该色\n * @default '#000000'\n */\n darkColor?: string;\n}\n\nexport type PositionStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则考虑 position 内的备选位置。\n */\n type: 'position';\n position?: Functional<LabelPosition[]>;\n};\n\nexport type BoundStrategy = {\n /**\n * 标签配置在图形内部时使用。\n * 当图形大小不足以放下标签,则考虑 position 内的备选位置。\n */\n type: 'bound';\n position?: Functional<LabelPosition[]>;\n};\n\nexport type MoveYStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则根据 offset 在Y方向上寻找位置。\n */\n type: 'moveY';\n /**\n * Y方向上的尝试的位置偏移量\n */\n offset: Functional<number[]>;\n};\n\nexport type MoveXStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则根据 offset 在X方向上寻找位置。\n */\n type: 'moveX';\n /**\n * X方向上的尝试的位置偏移量\n */\n offset: Functional<number[]>;\n};\n\nexport type Strategy = PositionStrategy | BoundStrategy | MoveYStrategy | MoveXStrategy;\n\nexport type LabelPosition = SymbolLabelAttrs['position'] | RectLabelAttrs['position'];\n\nexport interface SymbolLabelAttrs extends BaseLabelAttrs {\n type: 'symbol';\n\n /**\n * 标签位置\n * @default 'top'\n */\n position?: Functional<\n 'top' | 'bottom' | 'left' | 'right' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center'\n >;\n}\n\nexport interface RectLabelAttrs extends BaseLabelAttrs {\n type: 'rect';\n /**\n * 标签位置\n * @default 'top'\n */\n position?: Functional<\n 'top' | 'bottom' | 'left' | 'right' | 'inside' | 'inside-top' | 'inside-bottom' | 'inside-right' | 'inside-left'\n >;\n}\n\nexport interface LineLabelAttrs extends BaseLabelAttrs {\n type: 'line';\n /**\n * 标签位置\n * @default 'end'\n */\n position?: Functional<'start' | 'end'>;\n}\n\nexport interface PolygonLabelAttrs extends BaseLabelAttrs {\n type: 'polygon';\n /**\n * 标签位置\n * @default 'center'\n */\n position?: Functional<'center'>;\n}\n\nexport interface ArcLabelAttrs extends BaseLabelAttrs {\n type: 'arc';\n\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n\n /**\n * 标签位置\n * @default 'outside'\n */\n position?: Functional<'inside' | 'outside'>;\n\n // 画布宽度\n width?: number;\n // 画布高度\n height?: number;\n\n /**\n * 是否允许标签重叠\n * @default false\n */\n coverEnable?: boolean;\n /**\n * 是否允许标签旋转\n * @default true\n */\n rotate?: boolean;\n\n /**\n * 文字与引导线间隔宽度\n * @default 5\n */\n spaceWidth?: number;\n /**\n * 标签旋转角度\n */\n angle?: number;\n /**\n * 标签横向点对齐\n */\n textAlign?: TextAlignType;\n /**\n * 标签纵向点对齐\n */\n textBaseline?: TextBaselineType;\n /**\n * 扇区间标签的间隔\n * @default 6\n */\n layoutArcGap?: number;\n /** 标签引导线样式 */\n line?: IArcLabelLineSpec;\n /** 标签布局配置 */\n layout?: IArcLabelLayoutSpec;\n /** 标签引导线点集 */\n points?: IPoint[];\n /** 饼图扇区中心偏移 */\n centerOffset?: number;\n}\n\nexport interface IArcLabelLineSpec {\n /**\n * 是否显示引导线\n * @default true\n */\n visible?: boolean;\n /**\n * 引导线 line1 部分最小长度\n * @default 20\n */\n line1MinLength?: number;\n /**\n * 引导线 line2 部分最小长度\n * @default 10\n */\n line2MinLength?: number;\n /**\n * 引导线是否光滑\n * @default false\n */\n smooth?: boolean;\n /**\n * 引导线样式\n */\n style?: Partial<ILineGraphicAttribute>;\n}\n\nexport type ArcLabelAlignType = 'arc' | 'labelLine' | 'edge';\n\nexport type ArcLabelStrategyType = 'priority' | 'vertical' | 'none';\n\nexport interface IArcLabelLayoutSpec {\n /**\n * 标签对齐方式\n * @default 'arc'\n */\n textAlign?: ArcLabelAlignType;\n /** @deprecate 建议统一使用textAlign,后续将废除 */\n align?: ArcLabelAlignType;\n /**\n * 标签布局策略\n * @default 'priority'\n */\n strategy?: ArcLabelStrategyType;\n /**\n * 是否启用切线约束\n * @default true\n */\n tangentConstraint?: boolean;\n}\n\nexport interface DataLabelAttrs extends IGroupGraphicAttribute {\n dataLabels: (RectLabelAttrs | SymbolLabelAttrs | ArcLabelAttrs)[];\n /**\n * 防重叠的区域大小\n */\n size: { width: number; height: number };\n}\n\nexport type Functional<T> = T | ((data: any) => T);\n\nexport interface ILabelAnimation {\n mode?: 'same-time' | 'after' | 'after-all';\n duration?: number;\n delay?: number;\n easing?: EasingType;\n /** 是否开启 increaseCount 动画\n * @default true\n */\n increaseEffect?: boolean;\n}\n\nexport interface IPoint {\n x: number;\n y: number;\n}\n\nexport interface IPolarPoint {\n radius: number;\n angle: number;\n}\n\nexport type Quadrant = 1 | 2 | 3 | 4;\n\nexport type TextAlign = 'left' | 'right' | 'center';\n"]}
1
+ {"version":3,"sources":["../src/label/type.ts"],"names":[],"mappings":"","file":"type.js","sourcesContent":["import type {\n EasingType,\n IGraphic,\n IGroupGraphicAttribute,\n ITextGraphicAttribute,\n Text,\n TextAlignType,\n TextBaselineType,\n ILineGraphicAttribute\n} from '@visactor/vrender';\n\nexport type LabelItemStateStyle<T> = {\n hover?: T;\n hover_reverse?: T;\n selected?: T;\n selected_reverse?: T;\n};\n\nexport type LabelItem = {\n // 用于动画\n id?: string;\n // 原始数据\n data?: any;\n [key: string]: any;\n} & ITextGraphicAttribute;\n\nexport interface BaseLabelAttrs extends IGroupGraphicAttribute {\n type: string;\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n /**\n * @hack not recommend to use\n * @returns\n */\n getBaseMarks?: () => IGraphic[];\n /**\n * 是否开启选中交互\n * @default false\n */\n select?: boolean;\n /**\n * 是否开启 hover 交互\n * @default false\n */\n hover?: boolean;\n /**\n * 标签数据\n */\n data: LabelItem[];\n\n /** 文本样式,优先级低于 data */\n textStyle?: Partial<ITextGraphicAttribute>;\n\n /** 文本交互样式 */\n state?: LabelItemStateStyle<ITextGraphicAttribute>;\n\n /** 标签默认位置 */\n position?: Functional<string>;\n\n /** 偏移量 */\n offset?: number;\n\n /** 是否开启防重叠\n * @default true\n */\n overlap?: OverlapAttrs | false;\n\n /** 智能反色 */\n smartInvert?: SmartInvertAttrs | false;\n\n /** 动画配置 */\n animation?: ILabelAnimation | false;\n\n // 排序 or 删减\n dataFilter?: (data: LabelItem[]) => LabelItem[];\n\n /** 自定义布局函数\n * @description 当配置了 customLayoutFunc 后,默认布局逻辑将不再生效。(position/offset不生效)\n */\n customLayoutFunc?: (data: LabelItem[], getRelatedGraphic: (data: LabelItem) => IGraphic) => Text[];\n\n /** 自定义标签躲避函数\n * @description 当配置了 customOverlapFunc 后,会根据 position 和 offset 进行初始布局。配置的防重叠逻辑(overlap)不生效。\n */\n customOverlapFunc?: (label: Text[], getRelatedGraphic: (data: LabelItem) => IGraphic) => Text[];\n}\n\nexport interface OverlapAttrs {\n /**\n * 防重叠的区域大小\n */\n size?: { width: number; height: number };\n\n /**\n * 发生重叠后,是否隐藏标签\n * @default true\n */\n hideOnHit?: boolean;\n\n /**\n * 是否约束标签在指定 size 的范围内。开启后若标签被区域裁剪,会向内收缩。\n * @default true\n */\n clampForce?: boolean;\n\n /**\n * 是否躲避基础图元\n * @default false\n */\n avoidBaseMark?: boolean;\n\n /**\n * 躲避指定图元\n * @default []\n */\n avoidMarks?: string[] | IGraphic[];\n\n /**\n * 发生重叠后的躲避策略\n */\n strategy?: Strategy[];\n\n /**\n * 文字在防重叠计算中预留的边距。\n * @default 0\n */\n overlapPadding?: number;\n}\n\nexport interface SmartInvertAttrs {\n /**\n * 文本类型\n * 包含普通文本和大文本,对应不同的对比度标准,label默认为普通文本\n * 'normalText' | 'largeText'\n * @default 'normalText'\n */\n textType?: string;\n /**\n * 自定义对比度阈值\n */\n contrastRatiosThreshold?: number;\n /**\n * 自定义备选label颜色\n */\n alternativeColors?: string | string[];\n /**\n * fillStrategy四种策略:\n * - base(baseMark色),\n * - invertBase(执行智能反色),\n * - similarBase(智能反色的补色),\n * - null(不执行智能反色,保持stroke设置的颜色)\n * @default 'invertSeries'\n */\n fillStrategy?: 'base' | 'invertBase' | 'similarBase' | 'null';\n /**\n * strokeStrategy的四种策略:\n * - base(baseMark色),\n * - invertBase(执行智能反色),\n * - similarBase(智能反色的补色),\n * - null(不执行智能反色,保持fill设置的颜色)\n * @default 'series'\n */\n strokeStrategy?: 'base' | 'invertBase' | 'similarBase' | 'null';\n /**\n * 前景色与亮色具有对比度时,similarSeries使用该色\n * @default '#ffffff'\n */\n brightColor?: string;\n /**\n * 前景色与暗色具有对比度时,similarSeries使用该色\n * @default '#000000'\n */\n darkColor?: string;\n}\n\nexport type PositionStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则考虑 position 内的备选位置。\n */\n type: 'position';\n position?: Functional<LabelPosition[]>;\n};\n\nexport type BoundStrategy = {\n /**\n * 标签配置在图形内部时使用。\n * 当图形大小不足以放下标签,则考虑 position 内的备选位置。\n */\n type: 'bound';\n position?: Functional<LabelPosition[]>;\n};\n\nexport type MoveYStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则根据 offset 在Y方向上寻找位置。\n */\n type: 'moveY';\n /**\n * Y方向上的尝试的位置偏移量\n */\n offset: Functional<number[]>;\n};\n\nexport type MoveXStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则根据 offset 在X方向上寻找位置。\n */\n type: 'moveX';\n /**\n * X方向上的尝试的位置偏移量\n */\n offset: Functional<number[]>;\n};\n\nexport type Strategy = PositionStrategy | BoundStrategy | MoveYStrategy | MoveXStrategy;\n\nexport type LabelPosition = SymbolLabelAttrs['position'] | RectLabelAttrs['position'];\n\nexport interface SymbolLabelAttrs extends BaseLabelAttrs {\n type: 'symbol';\n\n /**\n * 标签位置\n * @default 'top'\n */\n position?: Functional<\n 'top' | 'bottom' | 'left' | 'right' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center'\n >;\n}\n\nexport interface RectLabelAttrs extends BaseLabelAttrs {\n type: 'rect';\n /**\n * 标签位置\n * @default 'top'\n */\n position?: Functional<\n 'top' | 'bottom' | 'left' | 'right' | 'inside' | 'inside-top' | 'inside-bottom' | 'inside-right' | 'inside-left'\n >;\n}\n\nexport interface LineLabelAttrs extends BaseLabelAttrs {\n type: 'line';\n /**\n * 标签位置\n * @default 'end'\n */\n position?: Functional<'start' | 'end'>;\n}\n\nexport interface PolygonLabelAttrs extends BaseLabelAttrs {\n type: 'polygon';\n /**\n * 标签位置\n * @default 'center'\n */\n position?: Functional<'center'>;\n}\n\nexport interface ArcLabelAttrs extends BaseLabelAttrs {\n type: 'arc';\n\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n\n /**\n * 标签位置\n * @default 'outside'\n */\n position?: Functional<'inside' | 'outside'>;\n\n // 画布宽度\n width?: number;\n // 画布高度\n height?: number;\n\n /**\n * 是否允许标签重叠\n * @default false\n */\n coverEnable?: boolean;\n /**\n * 是否允许标签旋转\n * @default true\n */\n rotate?: boolean;\n\n /**\n * 文字与引导线间隔宽度\n * @default 5\n */\n spaceWidth?: number;\n /**\n * 标签旋转角度\n */\n angle?: number;\n /**\n * 标签横向点对齐\n */\n textAlign?: TextAlignType;\n /**\n * 标签纵向点对齐\n */\n textBaseline?: TextBaselineType;\n /**\n * 扇区间标签的间隔\n * @default 6\n */\n layoutArcGap?: number;\n /** 标签引导线样式 */\n line?: IArcLabelLineSpec;\n /** 标签布局配置 */\n layout?: IArcLabelLayoutSpec;\n /** 标签引导线点集 */\n points?: IPoint[];\n /** 饼图扇区中心偏移 */\n centerOffset?: number;\n}\n\nexport interface IArcLabelLineSpec {\n /**\n * 是否显示引导线\n * @default true\n */\n visible?: boolean;\n /**\n * 引导线 line1 部分最小长度\n * @default 20\n */\n line1MinLength?: number;\n /**\n * 引导线 line2 部分最小长度\n * @default 10\n */\n line2MinLength?: number;\n /**\n * 引导线是否光滑\n * @default false\n */\n smooth?: boolean;\n /**\n * 引导线样式\n */\n style?: Partial<ILineGraphicAttribute>;\n}\n\nexport type ArcLabelAlignType = 'arc' | 'labelLine' | 'edge';\n\nexport type ArcLabelStrategyType = 'priority' | 'vertical' | 'none';\n\nexport interface IArcLabelLayoutSpec {\n /**\n * 标签对齐方式\n * @default 'arc'\n */\n textAlign?: ArcLabelAlignType;\n /** @deprecate 建议统一使用textAlign,后续将废除 */\n align?: ArcLabelAlignType;\n /**\n * 标签布局策略\n * @default 'priority'\n */\n strategy?: ArcLabelStrategyType;\n /**\n * 是否启用切线约束\n * @default true\n */\n tangentConstraint?: boolean;\n}\n\nexport interface DataLabelAttrs extends IGroupGraphicAttribute {\n dataLabels: (RectLabelAttrs | SymbolLabelAttrs | ArcLabelAttrs)[];\n /**\n * 防重叠的区域大小\n */\n size: { width: number; height: number };\n}\n\nexport type Functional<T> = T | ((data: any) => T);\n\nexport interface ILabelAnimation {\n mode?: 'same-time' | 'after' | 'after-all';\n duration?: number;\n delay?: number;\n easing?: EasingType;\n /** 是否开启 increaseCount 动画\n * @default true\n */\n increaseEffect?: boolean;\n}\n\nexport interface IPoint {\n x: number;\n y: number;\n}\n\nexport interface IPolarPoint {\n radius: number;\n angle: number;\n}\n\nexport type Quadrant = 1 | 2 | 3 | 4;\n\nexport type TextAlign = 'left' | 'right' | 'center';\n"]}