@visactor/vrender-core 0.16.14-alpha.1 → 0.16.14-alpha.3

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.
package/dist/index.js CHANGED
@@ -5425,6 +5425,247 @@
5425
5425
  return containPath(commands, lineWidth, true, x, y);
5426
5426
  }
5427
5427
 
5428
+ exports.Edge = void 0;
5429
+ (function (Edge) {
5430
+ Edge[Edge["Top"] = 1] = "Top";
5431
+ Edge[Edge["Right"] = 2] = "Right";
5432
+ Edge[Edge["Bottom"] = 4] = "Bottom";
5433
+ Edge[Edge["Left"] = 8] = "Left";
5434
+ Edge[Edge["ALL"] = 15] = "ALL";
5435
+ })(exports.Edge || (exports.Edge = {}));
5436
+ const _strokeVec4 = [
5437
+ false,
5438
+ false,
5439
+ false,
5440
+ false
5441
+ ];
5442
+ const parseStroke = (stroke) => {
5443
+ var _a;
5444
+ let isFullStroke = true;
5445
+ if (vutils.isBoolean(stroke, true)) {
5446
+ for (let i = 0; i < 4; i++) {
5447
+ _strokeVec4[i] = stroke;
5448
+ isFullStroke && (isFullStroke = !!((_a = _strokeVec4[i]) !== null && _a !== void 0 ? _a : true));
5449
+ }
5450
+ isFullStroke = stroke;
5451
+ }
5452
+ else if (Array.isArray(stroke)) {
5453
+ for (let i = 0; i < 4; i++) {
5454
+ _strokeVec4[i] = !!stroke[i];
5455
+ isFullStroke && (isFullStroke = !!_strokeVec4[i]);
5456
+ }
5457
+ }
5458
+ else {
5459
+ _strokeVec4[0] = false;
5460
+ _strokeVec4[1] = false;
5461
+ _strokeVec4[2] = false;
5462
+ _strokeVec4[3] = false;
5463
+ }
5464
+ return {
5465
+ isFullStroke,
5466
+ stroke: _strokeVec4
5467
+ };
5468
+ };
5469
+ const _paddingVec4 = [0, 0, 0, 0];
5470
+ const parsePadding = (padding) => {
5471
+ if (!padding) {
5472
+ return 0;
5473
+ }
5474
+ if (vutils.isArray(padding)) {
5475
+ if (padding.length === 0) {
5476
+ return 0;
5477
+ }
5478
+ else if (padding.length === 1) {
5479
+ return padding[0];
5480
+ }
5481
+ else if (padding.length === 2) {
5482
+ _paddingVec4[0] = padding[0];
5483
+ _paddingVec4[2] = padding[0];
5484
+ _paddingVec4[1] = padding[1];
5485
+ _paddingVec4[3] = padding[1];
5486
+ return _paddingVec4;
5487
+ }
5488
+ return padding;
5489
+ }
5490
+ return padding;
5491
+ };
5492
+ const _coords = [
5493
+ { x: 0, y: 0 },
5494
+ { x: 0, y: 0 },
5495
+ { x: 0, y: 0 },
5496
+ { x: 0, y: 0 }
5497
+ ];
5498
+ const indexList = [1, 2, 3, 0, 1, 2, 3, 0];
5499
+ function circleBounds(startAngle, endAngle, radius, bounds) {
5500
+ while (startAngle >= vutils.pi2) {
5501
+ startAngle -= vutils.pi2;
5502
+ }
5503
+ while (startAngle < 0) {
5504
+ startAngle += vutils.pi2;
5505
+ }
5506
+ while (startAngle > endAngle) {
5507
+ endAngle += vutils.pi2;
5508
+ }
5509
+ _coords[0].x = radius;
5510
+ _coords[1].y = radius;
5511
+ _coords[2].x = -radius;
5512
+ _coords[3].y = -radius;
5513
+ const startIdx = Math.ceil(startAngle / vutils.halfPi) % 4;
5514
+ const endIdx = Math.ceil(endAngle / vutils.halfPi) % 4;
5515
+ bounds.add(vutils.cos(startAngle) * radius, vutils.sin(startAngle) * radius);
5516
+ bounds.add(vutils.cos(endAngle) * radius, vutils.sin(endAngle) * radius);
5517
+ if (startIdx !== endIdx || endAngle - startAngle > vutils.pi) {
5518
+ let match = false;
5519
+ for (let i = 0; i < indexList.length; i++) {
5520
+ if (!match && startIdx === indexList[i]) {
5521
+ match = true;
5522
+ const p = _coords[startIdx];
5523
+ bounds.add(p.x, p.y);
5524
+ continue;
5525
+ }
5526
+ else if (match && endIdx === indexList[i]) {
5527
+ break;
5528
+ }
5529
+ if (match) {
5530
+ const p = _coords[indexList[i]];
5531
+ bounds.add(p.x, p.y);
5532
+ }
5533
+ }
5534
+ }
5535
+ }
5536
+ function pointsEqual(pointsA, pointsB) {
5537
+ if (!pointsA || !pointsB) {
5538
+ return false;
5539
+ }
5540
+ if (Array.isArray(pointsA) && Array.isArray(pointsB)) {
5541
+ if (pointsA.length !== pointsB.length) {
5542
+ return false;
5543
+ }
5544
+ return pointsA.every((point, index) => pointEqual(point, pointsB[index]));
5545
+ }
5546
+ if (!Number.isNaN(pointsA.x + pointsA.y)) {
5547
+ return pointEqual(pointsA, pointsB);
5548
+ }
5549
+ return false;
5550
+ }
5551
+ function pointEqual(pointA, pointB) {
5552
+ return (pointA.x === pointB.x &&
5553
+ pointA.y === pointB.y &&
5554
+ pointA.x1 === pointB.x1 &&
5555
+ pointA.y1 === pointB.y1 &&
5556
+ pointA.defined === pointB.defined);
5557
+ }
5558
+ function pointInterpolation(pointA, pointB, ratio) {
5559
+ const { x, y } = vutils.pointAt(pointA.x, pointA.y, pointB.x, pointB.y, ratio);
5560
+ const { x: x1, y: y1 } = vutils.pointAt(pointA.x1, pointA.y1, pointB.x1, pointB.y1, ratio);
5561
+ const point = new vutils.Point(x, y, x1, y1);
5562
+ point.defined = pointB.defined;
5563
+ return point;
5564
+ }
5565
+ function pointInterpolationHighPerformance(pointA, pointB, ratio, point) {
5566
+ const { x, y } = vutils.pointAt(pointA.x, pointA.y, pointB.x, pointB.y, ratio);
5567
+ const { x: x1, y: y1 } = vutils.pointAt(pointA.x1, pointA.y1, pointB.x1, pointB.y1, ratio);
5568
+ point.x = x;
5569
+ point.y = y;
5570
+ point.x1 = x1;
5571
+ point.y1 = y1;
5572
+ point.defined = pointB.defined;
5573
+ return point;
5574
+ }
5575
+ function pointsInterpolation(pointsA, pointsB, ratio) {
5576
+ if (!pointsA || !pointsB) {
5577
+ return [];
5578
+ }
5579
+ if (!Array.isArray(pointsA)) {
5580
+ pointsA = [pointsA];
5581
+ }
5582
+ if (!Array.isArray(pointsB)) {
5583
+ pointsB = [pointsB];
5584
+ }
5585
+ let points = [];
5586
+ if (pointsA.length > pointsB.length) {
5587
+ points = pointsB.map(point => {
5588
+ const p = new vutils.Point(point.x, point.y, point.x1, point.y1);
5589
+ p.defined = point.defined;
5590
+ return p;
5591
+ });
5592
+ for (let i = 0; i < pointsB.length; i++) {
5593
+ points[i] = pointInterpolation(pointsA[i], pointsB[i], ratio);
5594
+ }
5595
+ }
5596
+ else {
5597
+ points = pointsB.map(point => {
5598
+ const p = new vutils.Point(point.x, point.y, point.x1, point.y1);
5599
+ p.defined = point.defined;
5600
+ return p;
5601
+ });
5602
+ for (let i = 0; i < pointsA.length; i++) {
5603
+ points[i] = pointInterpolation(pointsA[i], pointsB[i], ratio);
5604
+ }
5605
+ }
5606
+ return points;
5607
+ }
5608
+ const transformKeys = [
5609
+ 'x',
5610
+ 'y',
5611
+ 'dx',
5612
+ 'dy',
5613
+ 'scaleX',
5614
+ 'scaleY',
5615
+ 'angle',
5616
+ 'anchor',
5617
+ 'postMatrix',
5618
+ 'scrollX',
5619
+ 'scrollY'
5620
+ ];
5621
+ const isTransformKey = (key) => {
5622
+ return transformKeys.includes(key);
5623
+ };
5624
+ function getAttributeFromDefaultAttrList(attr, key) {
5625
+ if (vutils.isArray(attr)) {
5626
+ let val;
5627
+ for (let i = 0; i < attr.length && val === undefined; i++) {
5628
+ val = attr[i][key];
5629
+ }
5630
+ return val;
5631
+ }
5632
+ return attr[key];
5633
+ }
5634
+ class RafBasedSTO {
5635
+ constructor() {
5636
+ this.durations = [];
5637
+ this.timeout = RafBasedSTO.TimeOut;
5638
+ this.lastDate = 0;
5639
+ this.durationsListThreshold = 30;
5640
+ }
5641
+ call(cb) {
5642
+ this.lastDate = Date.now();
5643
+ return setTimeout(() => {
5644
+ this.appendDuration(Date.now() - this.lastDate);
5645
+ cb(0);
5646
+ }, this.timeout, true);
5647
+ }
5648
+ clear(h) {
5649
+ clearTimeout(h);
5650
+ }
5651
+ appendDuration(d) {
5652
+ this.durations.push(d);
5653
+ if (this.durations.length > this.durationsListThreshold) {
5654
+ this.durations.shift();
5655
+ }
5656
+ this.timeout = Math.min(Math.max(this.durations.reduce((a, b) => a + b, 0) / this.durations.length, 1000 / 60), 1000 / 30);
5657
+ }
5658
+ }
5659
+ RafBasedSTO.TimeOut = 1000 / 60;
5660
+ const rafBasedSto = new RafBasedSTO();
5661
+ const calculateLineHeight = (lineHeight, fontSize) => {
5662
+ if (vutils.isString(lineHeight) && lineHeight[lineHeight.length - 1] === '%') {
5663
+ const scale = Number.parseFloat(lineHeight.substring(0, lineHeight.length - 1)) / 100;
5664
+ return fontSize * scale;
5665
+ }
5666
+ return lineHeight;
5667
+ };
5668
+
5428
5669
  exports.DefaultGraphicUtil = class DefaultGraphicUtil {
5429
5670
  constructor(contributions, global) {
5430
5671
  this.contributions = contributions;
@@ -5475,7 +5716,7 @@
5475
5716
  return new vutils.TextMeasure(Object.assign({ defaultFontParams: {
5476
5717
  fontFamily: DefaultTextStyle.fontFamily,
5477
5718
  fontSize: DefaultTextStyle.fontSize
5478
- }, getCanvasForMeasure: getCanvasForMeasure || (() => this.canvas), getTextBounds: undefined, specialCharSet: '-/: .,@%\'"~' + vutils.TextMeasure.ALPHABET_CHAR_SET + vutils.TextMeasure.ALPHABET_CHAR_SET.toUpperCase() }, (option !== null && option !== void 0 ? option : {})), textSpec);
5719
+ }, getCanvasForMeasure: getCanvasForMeasure || (() => this.canvas), getTextBounds: undefined, specialCharSet: '-/: .,@%\'"~' + vutils.TextMeasure.ALPHABET_CHAR_SET + vutils.TextMeasure.ALPHABET_CHAR_SET.toUpperCase() }, (option !== null && option !== void 0 ? option : {})), Object.assign(Object.assign({}, textSpec), { lineHeight: calculateLineHeight(textSpec === null || textSpec === void 0 ? void 0 : textSpec.lineHeight, textSpec === null || textSpec === void 0 ? void 0 : textSpec.fontSize) }));
5479
5720
  }
5480
5721
  };
5481
5722
  exports.DefaultGraphicUtil = __decorate([
@@ -8783,247 +9024,6 @@
8783
9024
  easing: 'quadInOut'
8784
9025
  };
8785
9026
 
8786
- exports.Edge = void 0;
8787
- (function (Edge) {
8788
- Edge[Edge["Top"] = 1] = "Top";
8789
- Edge[Edge["Right"] = 2] = "Right";
8790
- Edge[Edge["Bottom"] = 4] = "Bottom";
8791
- Edge[Edge["Left"] = 8] = "Left";
8792
- Edge[Edge["ALL"] = 15] = "ALL";
8793
- })(exports.Edge || (exports.Edge = {}));
8794
- const _strokeVec4 = [
8795
- false,
8796
- false,
8797
- false,
8798
- false
8799
- ];
8800
- const parseStroke = (stroke) => {
8801
- var _a;
8802
- let isFullStroke = true;
8803
- if (vutils.isBoolean(stroke, true)) {
8804
- for (let i = 0; i < 4; i++) {
8805
- _strokeVec4[i] = stroke;
8806
- isFullStroke && (isFullStroke = !!((_a = _strokeVec4[i]) !== null && _a !== void 0 ? _a : true));
8807
- }
8808
- isFullStroke = stroke;
8809
- }
8810
- else if (Array.isArray(stroke)) {
8811
- for (let i = 0; i < 4; i++) {
8812
- _strokeVec4[i] = !!stroke[i];
8813
- isFullStroke && (isFullStroke = !!_strokeVec4[i]);
8814
- }
8815
- }
8816
- else {
8817
- _strokeVec4[0] = false;
8818
- _strokeVec4[1] = false;
8819
- _strokeVec4[2] = false;
8820
- _strokeVec4[3] = false;
8821
- }
8822
- return {
8823
- isFullStroke,
8824
- stroke: _strokeVec4
8825
- };
8826
- };
8827
- const _paddingVec4 = [0, 0, 0, 0];
8828
- const parsePadding = (padding) => {
8829
- if (!padding) {
8830
- return 0;
8831
- }
8832
- if (vutils.isArray(padding)) {
8833
- if (padding.length === 0) {
8834
- return 0;
8835
- }
8836
- else if (padding.length === 1) {
8837
- return padding[0];
8838
- }
8839
- else if (padding.length === 2) {
8840
- _paddingVec4[0] = padding[0];
8841
- _paddingVec4[2] = padding[0];
8842
- _paddingVec4[1] = padding[1];
8843
- _paddingVec4[3] = padding[1];
8844
- return _paddingVec4;
8845
- }
8846
- return padding;
8847
- }
8848
- return padding;
8849
- };
8850
- const _coords = [
8851
- { x: 0, y: 0 },
8852
- { x: 0, y: 0 },
8853
- { x: 0, y: 0 },
8854
- { x: 0, y: 0 }
8855
- ];
8856
- const indexList = [1, 2, 3, 0, 1, 2, 3, 0];
8857
- function circleBounds(startAngle, endAngle, radius, bounds) {
8858
- while (startAngle >= vutils.pi2) {
8859
- startAngle -= vutils.pi2;
8860
- }
8861
- while (startAngle < 0) {
8862
- startAngle += vutils.pi2;
8863
- }
8864
- while (startAngle > endAngle) {
8865
- endAngle += vutils.pi2;
8866
- }
8867
- _coords[0].x = radius;
8868
- _coords[1].y = radius;
8869
- _coords[2].x = -radius;
8870
- _coords[3].y = -radius;
8871
- const startIdx = Math.ceil(startAngle / vutils.halfPi) % 4;
8872
- const endIdx = Math.ceil(endAngle / vutils.halfPi) % 4;
8873
- bounds.add(vutils.cos(startAngle) * radius, vutils.sin(startAngle) * radius);
8874
- bounds.add(vutils.cos(endAngle) * radius, vutils.sin(endAngle) * radius);
8875
- if (startIdx !== endIdx || endAngle - startAngle > vutils.pi) {
8876
- let match = false;
8877
- for (let i = 0; i < indexList.length; i++) {
8878
- if (!match && startIdx === indexList[i]) {
8879
- match = true;
8880
- const p = _coords[startIdx];
8881
- bounds.add(p.x, p.y);
8882
- continue;
8883
- }
8884
- else if (match && endIdx === indexList[i]) {
8885
- break;
8886
- }
8887
- if (match) {
8888
- const p = _coords[indexList[i]];
8889
- bounds.add(p.x, p.y);
8890
- }
8891
- }
8892
- }
8893
- }
8894
- function pointsEqual(pointsA, pointsB) {
8895
- if (!pointsA || !pointsB) {
8896
- return false;
8897
- }
8898
- if (Array.isArray(pointsA) && Array.isArray(pointsB)) {
8899
- if (pointsA.length !== pointsB.length) {
8900
- return false;
8901
- }
8902
- return pointsA.every((point, index) => pointEqual(point, pointsB[index]));
8903
- }
8904
- if (!Number.isNaN(pointsA.x + pointsA.y)) {
8905
- return pointEqual(pointsA, pointsB);
8906
- }
8907
- return false;
8908
- }
8909
- function pointEqual(pointA, pointB) {
8910
- return (pointA.x === pointB.x &&
8911
- pointA.y === pointB.y &&
8912
- pointA.x1 === pointB.x1 &&
8913
- pointA.y1 === pointB.y1 &&
8914
- pointA.defined === pointB.defined);
8915
- }
8916
- function pointInterpolation(pointA, pointB, ratio) {
8917
- const { x, y } = vutils.pointAt(pointA.x, pointA.y, pointB.x, pointB.y, ratio);
8918
- const { x: x1, y: y1 } = vutils.pointAt(pointA.x1, pointA.y1, pointB.x1, pointB.y1, ratio);
8919
- const point = new vutils.Point(x, y, x1, y1);
8920
- point.defined = pointB.defined;
8921
- return point;
8922
- }
8923
- function pointInterpolationHighPerformance(pointA, pointB, ratio, point) {
8924
- const { x, y } = vutils.pointAt(pointA.x, pointA.y, pointB.x, pointB.y, ratio);
8925
- const { x: x1, y: y1 } = vutils.pointAt(pointA.x1, pointA.y1, pointB.x1, pointB.y1, ratio);
8926
- point.x = x;
8927
- point.y = y;
8928
- point.x1 = x1;
8929
- point.y1 = y1;
8930
- point.defined = pointB.defined;
8931
- return point;
8932
- }
8933
- function pointsInterpolation(pointsA, pointsB, ratio) {
8934
- if (!pointsA || !pointsB) {
8935
- return [];
8936
- }
8937
- if (!Array.isArray(pointsA)) {
8938
- pointsA = [pointsA];
8939
- }
8940
- if (!Array.isArray(pointsB)) {
8941
- pointsB = [pointsB];
8942
- }
8943
- let points = [];
8944
- if (pointsA.length > pointsB.length) {
8945
- points = pointsB.map(point => {
8946
- const p = new vutils.Point(point.x, point.y, point.x1, point.y1);
8947
- p.defined = point.defined;
8948
- return p;
8949
- });
8950
- for (let i = 0; i < pointsB.length; i++) {
8951
- points[i] = pointInterpolation(pointsA[i], pointsB[i], ratio);
8952
- }
8953
- }
8954
- else {
8955
- points = pointsB.map(point => {
8956
- const p = new vutils.Point(point.x, point.y, point.x1, point.y1);
8957
- p.defined = point.defined;
8958
- return p;
8959
- });
8960
- for (let i = 0; i < pointsA.length; i++) {
8961
- points[i] = pointInterpolation(pointsA[i], pointsB[i], ratio);
8962
- }
8963
- }
8964
- return points;
8965
- }
8966
- const transformKeys = [
8967
- 'x',
8968
- 'y',
8969
- 'dx',
8970
- 'dy',
8971
- 'scaleX',
8972
- 'scaleY',
8973
- 'angle',
8974
- 'anchor',
8975
- 'postMatrix',
8976
- 'scrollX',
8977
- 'scrollY'
8978
- ];
8979
- const isTransformKey = (key) => {
8980
- return transformKeys.includes(key);
8981
- };
8982
- function getAttributeFromDefaultAttrList(attr, key) {
8983
- if (vutils.isArray(attr)) {
8984
- let val;
8985
- for (let i = 0; i < attr.length && val === undefined; i++) {
8986
- val = attr[i][key];
8987
- }
8988
- return val;
8989
- }
8990
- return attr[key];
8991
- }
8992
- class RafBasedSTO {
8993
- constructor() {
8994
- this.durations = [];
8995
- this.timeout = RafBasedSTO.TimeOut;
8996
- this.lastDate = 0;
8997
- this.durationsListThreshold = 30;
8998
- }
8999
- call(cb) {
9000
- this.lastDate = Date.now();
9001
- return setTimeout(() => {
9002
- this.appendDuration(Date.now() - this.lastDate);
9003
- cb(0);
9004
- }, this.timeout, true);
9005
- }
9006
- clear(h) {
9007
- clearTimeout(h);
9008
- }
9009
- appendDuration(d) {
9010
- this.durations.push(d);
9011
- if (this.durations.length > this.durationsListThreshold) {
9012
- this.durations.shift();
9013
- }
9014
- this.timeout = Math.min(Math.max(this.durations.reduce((a, b) => a + b, 0) / this.durations.length, 1000 / 60), 1000 / 30);
9015
- }
9016
- }
9017
- RafBasedSTO.TimeOut = 1000 / 60;
9018
- const rafBasedSto = new RafBasedSTO();
9019
- const calculateLineHeight = (lineHeight, fontSize) => {
9020
- if (vutils.isString(lineHeight) && lineHeight[lineHeight.length - 1] === '%') {
9021
- const scale = Number.parseFloat(lineHeight.substring(0, lineHeight.length - 1)) / 100;
9022
- return fontSize * scale;
9023
- }
9024
- return lineHeight;
9025
- };
9026
-
9027
9027
  class IncreaseCount extends ACustomAnimate {
9028
9028
  constructor(from, to, duration, easing, params) {
9029
9029
  super(from, to, duration, easing, params);
@@ -14411,11 +14411,12 @@
14411
14411
  return bounds;
14412
14412
  }
14413
14413
  updateWrapAABBBounds(text) {
14414
- var _a, _b, _c;
14414
+ var _a, _b, _c, _d;
14415
14415
  const textTheme = getTheme(this).text;
14416
- const { fontFamily = textTheme.fontFamily, textAlign = textTheme.textAlign, textBaseline = textTheme.textBaseline, fontSize = textTheme.fontSize, lineHeight = calculateLineHeight(this.attribute.lineHeight || this.attribute.fontSize || textTheme.fontSize, this.attribute.fontSize || textTheme.fontSize), ellipsis = textTheme.ellipsis, maxLineWidth, stroke = textTheme.stroke, lineWidth = textTheme.lineWidth, wordBreak = textTheme.wordBreak, fontWeight = textTheme.fontWeight, ignoreBuf = textTheme.ignoreBuf, heightLimit = 0, lineClamp } = this.attribute;
14416
+ const { fontFamily = textTheme.fontFamily, textAlign = textTheme.textAlign, textBaseline = textTheme.textBaseline, fontSize = textTheme.fontSize, ellipsis = textTheme.ellipsis, maxLineWidth, stroke = textTheme.stroke, lineWidth = textTheme.lineWidth, wordBreak = textTheme.wordBreak, fontWeight = textTheme.fontWeight, ignoreBuf = textTheme.ignoreBuf, heightLimit = 0, lineClamp } = this.attribute;
14417
+ const lineHeight = (_a = calculateLineHeight(this.attribute.lineHeight, this.attribute.fontSize || textTheme.fontSize)) !== null && _a !== void 0 ? _a : (this.attribute.fontSize || textTheme.fontSize);
14417
14418
  const buf = ignoreBuf ? 0 : 2;
14418
- if (!this.shouldUpdateShape() && ((_a = this.cache) === null || _a === void 0 ? void 0 : _a.layoutData)) {
14419
+ if (!this.shouldUpdateShape() && ((_b = this.cache) === null || _b === void 0 ? void 0 : _b.layoutData)) {
14419
14420
  const bbox = this.cache.layoutData.bbox;
14420
14421
  this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);
14421
14422
  if (stroke) {
@@ -14452,8 +14453,8 @@
14452
14453
  if (str !== '' && clip.str === '') {
14453
14454
  if (ellipsis) {
14454
14455
  const clipEllipsis = layoutObj.textMeasure.clipTextWithSuffix(str, layoutObj.textOptions, maxLineWidth, ellipsis, false);
14455
- clip.str = (_b = clipEllipsis.str) !== null && _b !== void 0 ? _b : '';
14456
- clip.width = (_c = clipEllipsis.width) !== null && _c !== void 0 ? _c : 0;
14456
+ clip.str = (_c = clipEllipsis.str) !== null && _c !== void 0 ? _c : '';
14457
+ clip.width = (_d = clipEllipsis.width) !== null && _d !== void 0 ? _d : 0;
14457
14458
  }
14458
14459
  else {
14459
14460
  clip.str = '';
@@ -14543,7 +14544,7 @@
14543
14544
  }
14544
14545
  const buf = ignoreBuf ? 0 : Math.max(2, fontSize * 0.075);
14545
14546
  const textFontSize = attribute.fontSize || textTheme.fontSize;
14546
- const { lineHeight = calculateLineHeight((_a = attribute.lineHeight) !== null && _a !== void 0 ? _a : textFontSize, textFontSize) + buf } = attribute;
14547
+ const lineHeight = (_a = calculateLineHeight(attribute.lineHeight, textFontSize)) !== null && _a !== void 0 ? _a : textFontSize + buf;
14547
14548
  if (!this.shouldUpdateShape() && this.cache) {
14548
14549
  width = (_b = this.cache.clipedWidth) !== null && _b !== void 0 ? _b : 0;
14549
14550
  const dx = textDrawOffsetX(textAlign, width);
@@ -14601,7 +14602,8 @@
14601
14602
  const attribute = this.attribute;
14602
14603
  const { ignoreBuf = textTheme.ignoreBuf } = attribute;
14603
14604
  const buf = ignoreBuf ? 0 : 2;
14604
- const { maxLineWidth = textTheme.maxLineWidth, ellipsis = textTheme.ellipsis, fontSize = textTheme.fontSize, fontWeight = textTheme.fontWeight, fontFamily = textTheme.fontFamily, stroke = textTheme.stroke, lineHeight = calculateLineHeight((_a = attribute.lineHeight) !== null && _a !== void 0 ? _a : (attribute.fontSize || textTheme.fontSize), attribute.fontSize || textTheme.fontSize) + buf, lineWidth = textTheme.lineWidth, verticalMode = textTheme.verticalMode } = attribute;
14605
+ const { maxLineWidth = textTheme.maxLineWidth, ellipsis = textTheme.ellipsis, fontSize = textTheme.fontSize, fontWeight = textTheme.fontWeight, fontFamily = textTheme.fontFamily, stroke = textTheme.stroke, lineWidth = textTheme.lineWidth, verticalMode = textTheme.verticalMode } = attribute;
14606
+ const lineHeight = (_a = calculateLineHeight(attribute.lineHeight, attribute.fontSize || textTheme.fontSize)) !== null && _a !== void 0 ? _a : (attribute.fontSize || textTheme.fontSize) + buf;
14605
14607
  let { textAlign = textTheme.textAlign, textBaseline = textTheme.textBaseline } = attribute;
14606
14608
  if (!verticalMode) {
14607
14609
  const t = textAlign;
@@ -14658,14 +14660,15 @@
14658
14660
  return this._AABBBounds;
14659
14661
  }
14660
14662
  updateHorizontalMultilineAABBBounds(text) {
14661
- var _a;
14663
+ var _a, _b;
14662
14664
  const textTheme = getTheme(this).text;
14663
14665
  const attribute = this.attribute;
14664
- const { fontFamily = textTheme.fontFamily, textAlign = textTheme.textAlign, textBaseline = textTheme.textBaseline, fontSize = textTheme.fontSize, fontWeight = textTheme.fontWeight, lineHeight = calculateLineHeight(attribute.lineHeight || attribute.fontSize || textTheme.fontSize, attribute.fontSize || textTheme.fontSize), ellipsis = textTheme.ellipsis, maxLineWidth, stroke = textTheme.stroke, lineWidth = textTheme.lineWidth, whiteSpace = textTheme.whiteSpace } = attribute;
14666
+ const { fontFamily = textTheme.fontFamily, textAlign = textTheme.textAlign, textBaseline = textTheme.textBaseline, fontSize = textTheme.fontSize, fontWeight = textTheme.fontWeight, ellipsis = textTheme.ellipsis, maxLineWidth, stroke = textTheme.stroke, lineWidth = textTheme.lineWidth, whiteSpace = textTheme.whiteSpace } = attribute;
14667
+ const lineHeight = (_a = calculateLineHeight(attribute.lineHeight, attribute.fontSize || textTheme.fontSize)) !== null && _a !== void 0 ? _a : (attribute.fontSize || textTheme.fontSize);
14665
14668
  if (whiteSpace === 'normal') {
14666
14669
  return this.updateWrapAABBBounds(text);
14667
14670
  }
14668
- if (!this.shouldUpdateShape() && ((_a = this.cache) === null || _a === void 0 ? void 0 : _a.layoutData)) {
14671
+ if (!this.shouldUpdateShape() && ((_b = this.cache) === null || _b === void 0 ? void 0 : _b.layoutData)) {
14669
14672
  const bbox = this.cache.layoutData.bbox;
14670
14673
  this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);
14671
14674
  if (stroke) {
@@ -14693,7 +14696,8 @@
14693
14696
  const attribute = this.attribute;
14694
14697
  const { ignoreBuf = textTheme.ignoreBuf } = attribute;
14695
14698
  const buf = ignoreBuf ? 0 : 2;
14696
- const { maxLineWidth = textTheme.maxLineWidth, ellipsis = textTheme.ellipsis, fontFamily = textTheme.fontFamily, fontSize = textTheme.fontSize, fontWeight = textTheme.fontWeight, stroke = textTheme.stroke, lineHeight = calculateLineHeight((_a = attribute.lineHeight) !== null && _a !== void 0 ? _a : (attribute.fontSize || textTheme.fontSize), attribute.fontSize || textTheme.fontSize) + buf, lineWidth = textTheme.lineWidth, verticalMode = textTheme.verticalMode } = attribute;
14699
+ const { maxLineWidth = textTheme.maxLineWidth, ellipsis = textTheme.ellipsis, fontFamily = textTheme.fontFamily, fontSize = textTheme.fontSize, fontWeight = textTheme.fontWeight, stroke = textTheme.stroke, lineWidth = textTheme.lineWidth, verticalMode = textTheme.verticalMode } = attribute;
14700
+ const lineHeight = (_a = calculateLineHeight(attribute.lineHeight, attribute.fontSize || textTheme.fontSize)) !== null && _a !== void 0 ? _a : (attribute.fontSize || textTheme.fontSize) + buf;
14697
14701
  let { textAlign = textTheme.textAlign, textBaseline = textTheme.textBaseline } = attribute;
14698
14702
  if (!verticalMode) {
14699
14703
  const t = textAlign;
@@ -14800,11 +14804,12 @@
14800
14804
  return text != null && text !== '';
14801
14805
  }
14802
14806
  updateMultilineAABBBounds(text) {
14803
- var _a, _b, _c;
14807
+ var _a, _b, _c, _d;
14804
14808
  const textTheme = getTheme(this).text;
14805
- const { fontFamily = textTheme.fontFamily, textAlign = textTheme.textAlign, textBaseline = textTheme.textBaseline, fontSize = textTheme.fontSize, lineHeight = calculateLineHeight(this.attribute.lineHeight || this.attribute.fontSize || textTheme.fontSize, this.attribute.fontSize || textTheme.fontSize), ellipsis = textTheme.ellipsis, maxLineWidth, stroke = textTheme.stroke, lineWidth = textTheme.lineWidth, wordBreak = textTheme.wordBreak, fontWeight = textTheme.fontWeight, ignoreBuf = textTheme.ignoreBuf, heightLimit = 0, lineClamp } = this.attribute;
14809
+ const { fontFamily = textTheme.fontFamily, textAlign = textTheme.textAlign, textBaseline = textTheme.textBaseline, fontSize = textTheme.fontSize, ellipsis = textTheme.ellipsis, maxLineWidth, stroke = textTheme.stroke, lineWidth = textTheme.lineWidth, wordBreak = textTheme.wordBreak, fontWeight = textTheme.fontWeight, ignoreBuf = textTheme.ignoreBuf, heightLimit = 0, lineClamp } = this.attribute;
14810
+ const lineHeight = (_a = calculateLineHeight(this.attribute.lineHeight, this.attribute.fontSize || textTheme.fontSize)) !== null && _a !== void 0 ? _a : (this.attribute.fontSize || textTheme.fontSize);
14806
14811
  const buf = ignoreBuf ? 0 : 2;
14807
- if (!this.shouldUpdateShape() && ((_a = this.cache) === null || _a === void 0 ? void 0 : _a.layoutData)) {
14812
+ if (!this.shouldUpdateShape() && ((_b = this.cache) === null || _b === void 0 ? void 0 : _b.layoutData)) {
14808
14813
  const bbox = this.cache.layoutData.bbox;
14809
14814
  this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);
14810
14815
  if (stroke) {
@@ -14841,8 +14846,8 @@
14841
14846
  if (str !== '' && clip.str === '') {
14842
14847
  if (ellipsis) {
14843
14848
  const clipEllipsis = layoutObj.textMeasure.clipTextWithSuffix(str, layoutObj.textOptions, maxLineWidth, ellipsis, false);
14844
- clip.str = (_b = clipEllipsis.str) !== null && _b !== void 0 ? _b : '';
14845
- clip.width = (_c = clipEllipsis.width) !== null && _c !== void 0 ? _c : 0;
14849
+ clip.str = (_c = clipEllipsis.str) !== null && _c !== void 0 ? _c : '';
14850
+ clip.width = (_d = clipEllipsis.width) !== null && _d !== void 0 ? _d : 0;
14846
14851
  }
14847
14852
  else {
14848
14853
  clip.str = '';
@@ -20986,7 +20991,7 @@
20986
20991
  textAlign = (_a = text.getBaselineMapAlign()[textBaseline]) !== null && _a !== void 0 ? _a : 'left';
20987
20992
  textBaseline = (_b = text.getAlignMapBaseline()[t]) !== null && _b !== void 0 ? _b : 'top';
20988
20993
  }
20989
- const lineHeight = (_c = text.attribute.lineHeight) !== null && _c !== void 0 ? _c : fontSize;
20994
+ const lineHeight = (_c = calculateLineHeight(text.attribute.lineHeight, fontSize)) !== null && _c !== void 0 ? _c : fontSize;
20990
20995
  const data = this.valid(text, textAttribute, fillCb, strokeCb);
20991
20996
  if (!data) {
20992
20997
  return;