@visactor/vchart 2.0.7-alpha.2 → 2.0.7-alpha.5

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/build/index.es.js CHANGED
@@ -1036,43 +1036,187 @@ const extent$2 = (array, func) => {
1036
1036
  return [min, max];
1037
1037
  };
1038
1038
 
1039
+ function invNorm(p) {
1040
+ if (p <= 0 || p >= 1) return 0;
1041
+ const c1 = -.00778489400243029,
1042
+ c2 = -.322396458041136,
1043
+ c3 = -2.40075827716184,
1044
+ c4 = -2.54973253934373,
1045
+ c5 = 4.37466414146497,
1046
+ c6 = 2.93816398269878,
1047
+ d1 = .00778469570904146,
1048
+ d2 = .32246712907004,
1049
+ d3 = 2.445134137143,
1050
+ d4 = 3.75440866190742;
1051
+ let q, r;
1052
+ return p < .02425 ? (q = Math.sqrt(-2 * Math.log(p)), (((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) / ((((d1 * q + d2) * q + d3) * q + d4) * q + 1)) : p <= .97575 ? (q = p - .5, r = q * q, (((((-39.6968302866538 * r + 220.946098424521) * r - 275.928510446969) * r + 138.357751867269) * r - 30.6647980661472) * r + 2.50662827745924) * q / (((((-54.4760987982241 * r + 161.585836858041) * r - 155.698979859887) * r + 66.8013118877197) * r - 13.2806815528857) * r + 1)) : (q = Math.sqrt(-2 * Math.log(1 - p)), -(((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) / ((((d1 * q + d2) * q + d3) * q + d4) * q + 1));
1053
+ }
1054
+ function computeLinearCIComponents(data, x, y, predict) {
1055
+ let min = 1 / 0,
1056
+ max = -1 / 0,
1057
+ n = 0,
1058
+ sumX = 0;
1059
+ for (let i = 0; i < data.length; i++) {
1060
+ const d = data[i];
1061
+ let dx = x(d),
1062
+ dy = y(d);
1063
+ !isNil$1(dx) && (dx = +dx) >= dx && !isNil$1(dy) && (dy = +dy) >= dy && (dx < min && (min = dx), dx > max && (max = dx), n++, sumX += dx);
1064
+ }
1065
+ if (0 === n) return {
1066
+ min: min,
1067
+ max: max,
1068
+ n: n,
1069
+ X: 0,
1070
+ SSE: 0,
1071
+ Sxx: 0
1072
+ };
1073
+ const X = sumX / n;
1074
+ let SSE = 0,
1075
+ Sxx = 0;
1076
+ for (let i = 0; i < data.length; i++) {
1077
+ const d = data[i];
1078
+ let dx = x(d),
1079
+ dy = y(d);
1080
+ if (!isNil$1(dx) && (dx = +dx) >= dx && !isNil$1(dy) && (dy = +dy) >= dy) {
1081
+ const r = dy - predict(dx);
1082
+ SSE += r * r;
1083
+ const dxc = dx - X;
1084
+ Sxx += dxc * dxc;
1085
+ }
1086
+ }
1087
+ return {
1088
+ min: min,
1089
+ max: max,
1090
+ n: n,
1091
+ X: X,
1092
+ SSE: SSE,
1093
+ Sxx: Sxx
1094
+ };
1095
+ }
1096
+ function stdErrorsAt(px, comps) {
1097
+ const {
1098
+ n: n,
1099
+ X: X,
1100
+ Sxx: Sxx,
1101
+ SSE: SSE
1102
+ } = comps,
1103
+ s2 = n > 2 ? SSE / (n - 2) : 0;
1104
+ return {
1105
+ seMean: Sxx > 0 ? Math.sqrt(s2 * (1 / n + (px - X) * (px - X) / Sxx)) : Math.sqrt(s2 / n),
1106
+ sePred: Math.sqrt(s2 * (1 + 1 / n + (Sxx > 0 ? (px - X) * (px - X) / Sxx : 0)))
1107
+ };
1108
+ }
1109
+
1039
1110
  function ordinaryLeastSquares(uX, uY, uXY, uX2) {
1040
- const delta = uX2 - uX * uX,
1041
- slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta;
1042
- return [uY - slope * uX, slope];
1111
+ const denom = uX2 - uX * uX;
1112
+ if (Math.abs(denom) < Number.EPSILON) return {
1113
+ a: uY,
1114
+ b: 0
1115
+ };
1116
+ const b = (uXY - uX * uY) / denom;
1117
+ return {
1118
+ a: uY - b * uX,
1119
+ b: b
1120
+ };
1043
1121
  }
1044
1122
  function visitPoints(data, x, y, callback) {
1045
- let u,
1046
- v,
1047
- i = -1;
1048
- data.forEach(d => {
1049
- u = x(d), v = y(d), !isNil$1(u) && (u = +u) >= u && !isNil$1(v) && (v = +v) >= v && callback(u, v, ++i);
1050
- });
1123
+ for (let i = 0; i < data.length; i++) {
1124
+ const d = data[i];
1125
+ let xi = x(d),
1126
+ yi = y(d);
1127
+ !isNil$1(xi) && (xi = +xi) >= xi && !isNil$1(yi) && (yi = +yi) >= yi && callback(xi, yi, i);
1128
+ }
1051
1129
  }
1052
1130
  function rSquared(data, x, y, uY, predict) {
1053
- let SSE = 0,
1054
- SST = 0;
1055
- return visitPoints(data, x, y, (dx, dy) => {
1056
- const sse = dy - predict(dx),
1057
- sst = dy - uY;
1058
- SSE += sse * sse, SST += sst * sst;
1059
- }), 1 - SSE / SST;
1060
- }
1061
- function regressionLinear(data, x = datum => datum.x, y = datum => datum.y) {
1062
- let X = 0,
1063
- Y = 0,
1064
- XY = 0,
1065
- X2 = 0,
1066
- n = 0;
1067
- visitPoints(data, x, y, (dx, dy) => {
1068
- ++n, X += (dx - X) / n, Y += (dy - Y) / n, XY += (dx * dy - XY) / n, X2 += (dx * dx - X2) / n;
1131
+ let ssr = 0,
1132
+ sst = 0;
1133
+ for (let i = 0; i < data.length; i++) {
1134
+ const d = data[i];
1135
+ let yi = y(d);
1136
+ if (!isNil$1(yi) && (yi = +yi) >= yi) {
1137
+ const r = yi - predict(x(d));
1138
+ ssr += r * r;
1139
+ const t = yi - uY;
1140
+ sst += t * t;
1141
+ }
1142
+ }
1143
+ return 0 === sst ? 0 : 1 - ssr / sst;
1144
+ }
1145
+ function regressionLinear(data, x = d => d.x, y = d => d.y) {
1146
+ let n = 0,
1147
+ meanX = 0,
1148
+ meanY = 0,
1149
+ meanXY = 0,
1150
+ meanX2 = 0;
1151
+ visitPoints(data, x, y, (xi, yi) => {
1152
+ n++, meanX += (xi - meanX) / n, meanY += (yi - meanY) / n, meanXY += (xi * yi - meanXY) / n, meanX2 += (xi * xi - meanX2) / n;
1069
1153
  });
1070
- const coef = ordinaryLeastSquares(X, Y, XY, X2),
1071
- predict = x => coef[0] + coef[1] * x;
1154
+ const {
1155
+ a: a,
1156
+ b: b
1157
+ } = ordinaryLeastSquares(meanX, meanY, meanXY, meanX2),
1158
+ predict = xx => a + b * xx,
1159
+ comps = computeLinearCIComponents(data, x, y, predict);
1072
1160
  return {
1073
- coef: coef,
1161
+ coef: {
1162
+ a: a,
1163
+ b: b
1164
+ },
1074
1165
  predict: predict,
1075
- rSquared: rSquared(data, x, y, Y, predict)
1166
+ rSquared: rSquared(data, x, y, meanY, predict),
1167
+ evaluateGrid: function (N) {
1168
+ const out = [];
1169
+ if (0 === comps.n || N <= 0) return out;
1170
+ if (comps.min === comps.max) {
1171
+ for (let i = 0; i < N; i++) out.push({
1172
+ x: comps.min,
1173
+ y: predict(comps.min)
1174
+ });
1175
+ return out;
1176
+ }
1177
+ const step = (comps.max - comps.min) / (N - 1);
1178
+ for (let i = 0; i < N; i++) {
1179
+ const px = i === N - 1 ? comps.max : comps.min + step * i;
1180
+ out.push({
1181
+ x: px,
1182
+ y: predict(px)
1183
+ });
1184
+ }
1185
+ return out;
1186
+ },
1187
+ confidenceInterval: function (N = 50, alpha = .05) {
1188
+ const out = [];
1189
+ if (0 === comps.n || N <= 0) return out;
1190
+ const z = invNorm(1 - alpha / 2);
1191
+ if (comps.min === comps.max) {
1192
+ const m = predict(comps.min),
1193
+ errs = stdErrorsAt(comps.min, comps);
1194
+ for (let i = 0; i < N; i++) out.push({
1195
+ x: comps.min,
1196
+ mean: m,
1197
+ lower: m - z * errs.seMean,
1198
+ upper: m + z * errs.seMean,
1199
+ predLower: m - z * errs.sePred,
1200
+ predUpper: m + z * errs.sePred
1201
+ });
1202
+ return out;
1203
+ }
1204
+ const step = (comps.max - comps.min) / (N - 1);
1205
+ for (let i = 0; i < N; i++) {
1206
+ const px = i === N - 1 ? comps.max : comps.min + step * i,
1207
+ m = predict(px),
1208
+ errs = stdErrorsAt(px, comps);
1209
+ out.push({
1210
+ x: px,
1211
+ mean: m,
1212
+ lower: m - z * errs.seMean,
1213
+ upper: m + z * errs.seMean,
1214
+ predLower: m - z * errs.sePred,
1215
+ predUpper: m + z * errs.sePred
1216
+ });
1217
+ }
1218
+ return out;
1219
+ }
1076
1220
  };
1077
1221
  }
1078
1222
 
@@ -5968,6 +6112,140 @@ function sortData(a, b, sortFields) {
5968
6112
  return 0;
5969
6113
  }
5970
6114
 
6115
+ const bin = (data, options) => {
6116
+ var _a, _b, _c, _d, _e, _f, _g, _h;
6117
+ const field = null == options ? void 0 : options.field;
6118
+ if (!field) return [];
6119
+ const n = data.length;
6120
+ let thresholds,
6121
+ min = 1 / 0,
6122
+ max = -1 / 0;
6123
+ if (null == options ? void 0 : options.extent) min = options.extent[0], max = options.extent[1];else for (let i = 0; i < n; i++) {
6124
+ const v = data[i][field];
6125
+ if (isNil$1(v)) continue;
6126
+ const num = +v;
6127
+ Number.isFinite(num) && (num < min && (min = num), num > max && (max = num));
6128
+ }
6129
+ if (!Number.isFinite(min) || !Number.isFinite(max) || 0 === n) return [];
6130
+ if (options && options.thresholds && options.thresholds.length) thresholds = options.thresholds.slice(), thresholds.sort((a, b) => a - b);else if (options && "number" == typeof options.step && options.step > 0) {
6131
+ const stepSize = options.step;
6132
+ let startMin = min;
6133
+ for (options.extent || (startMin = Math.floor(min / stepSize) * stepSize), thresholds = [startMin]; startMin < max;) startMin += stepSize, thresholds.push(startMin);
6134
+ } else {
6135
+ const bins = (null == options ? void 0 : options.bins) && options.bins > 0 ? Math.floor(options.bins) : 10,
6136
+ stepSize = (max - min) / bins;
6137
+ thresholds = new Array(bins + 1);
6138
+ for (let i = 0; i <= bins; i++) thresholds[i] = i === bins ? max : min + stepSize * i;
6139
+ }
6140
+ const numBins = Math.max(0, thresholds.length - 1);
6141
+ if (0 === numBins) return [];
6142
+ const x0Name = null !== (_b = null === (_a = options.outputNames) || void 0 === _a ? void 0 : _a.x0) && void 0 !== _b ? _b : "x0",
6143
+ x1Name = null !== (_d = null === (_c = options.outputNames) || void 0 === _c ? void 0 : _c.x1) && void 0 !== _d ? _d : "x1",
6144
+ countName = null !== (_f = null === (_e = options.outputNames) || void 0 === _e ? void 0 : _e.count) && void 0 !== _f ? _f : "count",
6145
+ valuesName = null !== (_h = null === (_g = options.outputNames) || void 0 === _g ? void 0 : _g.values) && void 0 !== _h ? _h : "values",
6146
+ out = new Array(numBins);
6147
+ for (let i = 0; i < numBins; i++) out[i] = {
6148
+ [x0Name]: thresholds[i],
6149
+ [x1Name]: thresholds[i + 1],
6150
+ [countName]: 0
6151
+ }, (null == options ? void 0 : options.includeValues) && (out[i][valuesName] = []);
6152
+ for (let i = 0; i < n; i++) {
6153
+ const v = data[i][field];
6154
+ if (null == v) continue;
6155
+ const num = +v;
6156
+ if (Number.isFinite(num)) for (let j = 0; j < numBins; j++) {
6157
+ const left = out[j][x0Name],
6158
+ right = out[j][x1Name];
6159
+ if (num >= left && num < right || j === numBins - 1 && num <= right) {
6160
+ out[j][countName]++, options && options.includeValues && out[j][valuesName].push(data[i]);
6161
+ break;
6162
+ }
6163
+ }
6164
+ }
6165
+ return out;
6166
+ };
6167
+
6168
+ const boxplot = (data, options) => {
6169
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
6170
+ const field = null == options ? void 0 : options.field;
6171
+ if (!field) return [];
6172
+ const groupField = null == options ? void 0 : options.groupField;
6173
+ let whiskers = null !== (_a = null == options ? void 0 : options.whiskers) && void 0 !== _a ? _a : 1.5;
6174
+ const includeValues = !!(null == options ? void 0 : options.includeValues),
6175
+ names = null !== (_b = null == options ? void 0 : options.outputNames) && void 0 !== _b ? _b : {},
6176
+ keyName = null !== (_c = names.key) && void 0 !== _c ? _c : isArray$1(groupField) ? null : null !== (_d = groupField) && void 0 !== _d ? _d : "key",
6177
+ countName = null !== (_e = names.count) && void 0 !== _e ? _e : "count",
6178
+ meanName = null !== (_f = names.mean) && void 0 !== _f ? _f : "mean",
6179
+ q1Name = null !== (_g = names.q1) && void 0 !== _g ? _g : "q1",
6180
+ medianName = null !== (_h = names.median) && void 0 !== _h ? _h : "median",
6181
+ q3Name = null !== (_j = names.q3) && void 0 !== _j ? _j : "q3",
6182
+ iqrName = null !== (_k = names.iqr) && void 0 !== _k ? _k : "iqr",
6183
+ minName = null !== (_l = names.min) && void 0 !== _l ? _l : "min",
6184
+ maxName = null !== (_m = names.max) && void 0 !== _m ? _m : "max",
6185
+ lowerWhiskerName = null !== (_o = names.lowerWhisker) && void 0 !== _o ? _o : "lowerWhisker",
6186
+ upperWhiskerName = null !== (_p = names.upperWhisker) && void 0 !== _p ? _p : "upperWhisker",
6187
+ outliersName = null !== (_q = names.outliers) && void 0 !== _q ? _q : "outliers",
6188
+ valuesName = null !== (_r = names.values) && void 0 !== _r ? _r : "values",
6189
+ groups = new Map(),
6190
+ rawValues = new Map(),
6191
+ keyToGroup = new Map(),
6192
+ n = data.length;
6193
+ for (let i = 0; i < n; i++) {
6194
+ const d = data[i],
6195
+ v = d[field];
6196
+ if (isNil$1(v)) continue;
6197
+ const num = +v;
6198
+ if (!Number.isFinite(num)) continue;
6199
+ let key;
6200
+ key = isArray$1(groupField) ? groupField.map(f => String(d[f])).join("||") : groupField ? String(d[groupField]) : "___all", groups.has(key) || (groups.set(key, []), includeValues && rawValues.set(key, []), isArray$1(groupField) ? keyToGroup.set(key, Object.fromEntries(groupField.map(f => [f, d[f]]))) : keyToGroup.set(key, groupField ? d[groupField] : null));
6201
+ const arr = groups.get(key);
6202
+ if (arr && arr.push(num), includeValues) {
6203
+ const rv = rawValues.get(key);
6204
+ rv && rv.push(d);
6205
+ }
6206
+ }
6207
+ if (isArray$1(whiskers)) {
6208
+ whiskers = [clamp$1(Math.min.apply(null, whiskers), 0, 1), clamp$1(Math.max.apply(null, whiskers), 0, 1)];
6209
+ }
6210
+ const out = [];
6211
+ for (const [key, vals] of groups) {
6212
+ if (!vals || 0 === vals.length) continue;
6213
+ const sorted = vals.slice().sort((a, b) => a - b),
6214
+ count = sorted.length,
6215
+ dataMin = sorted[0],
6216
+ dataMax = sorted[sorted.length - 1];
6217
+ let sum = 0;
6218
+ for (let i = 0; i < sorted.length; i++) sum += sorted[i];
6219
+ const mean = sum / count,
6220
+ q1 = quantileSorted(sorted, .25),
6221
+ median = quantileSorted(sorted, .5),
6222
+ q3 = quantileSorted(sorted, .75),
6223
+ iqr = q3 - q1,
6224
+ lowerBound = isArray$1(whiskers) ? quantileSorted(sorted, whiskers[0]) : q1 - whiskers * iqr,
6225
+ upperBound = isArray$1(whiskers) ? quantileSorted(sorted, whiskers[1]) : q3 + whiskers * iqr;
6226
+ let lowerWhisker = dataMin;
6227
+ for (let i = 0; i < sorted.length; i++) if (sorted[i] >= lowerBound) {
6228
+ lowerWhisker = sorted[i];
6229
+ break;
6230
+ }
6231
+ let upperWhisker = dataMax;
6232
+ for (let i = sorted.length - 1; i >= 0; i--) if (sorted[i] <= upperBound) {
6233
+ upperWhisker = sorted[i];
6234
+ break;
6235
+ }
6236
+ const outliers = [];
6237
+ for (let i = 0; i < sorted.length; i++) (sorted[i] < lowerWhisker || sorted[i] > upperWhisker) && outliers.push(sorted[i]);
6238
+ const obj = {},
6239
+ representative = keyToGroup.get(key);
6240
+ if (null !== keyName) obj[keyName] = representative;else if (isArray$1(groupField)) {
6241
+ const groupObj = representative || {};
6242
+ for (const f of groupField) obj[f] = groupObj[f];
6243
+ }
6244
+ obj[countName] = count, obj[meanName] = mean, obj[q1Name] = q1, obj[medianName] = median, obj[q3Name] = q3, obj[iqrName] = iqr, obj[minName] = dataMin, obj[maxName] = dataMax, obj[lowerWhiskerName] = lowerWhisker, obj[upperWhiskerName] = upperWhisker, obj[outliersName] = outliers, includeValues && (obj[valuesName] = rawValues.get(key) || []), out.push(obj);
6245
+ }
6246
+ return out;
6247
+ };
6248
+
5971
6249
  var EOL = {},
5972
6250
  EOF = {},
5973
6251
  QUOTE = 34,
@@ -38696,7 +38974,9 @@ class BandScale extends OrdinalScale {
38696
38974
  space = bandSpace(n, this._paddingInner, this._paddingOuter);
38697
38975
  return this._step = (stop - start) / Math.max(1, space || 1), this._round && (this._step = Math.floor(this._step)), start += (stop - start - this._step * (n - this._paddingInner)) * this._align, this.isBandwidthFixed() || (this._bandwidth = this._step * (1 - this._paddingInner)), this._round && (start = Math.round(start), this.isBandwidthFixed() || (this._bandwidth = Math.round(this._bandwidth))), this._bandRangeState = {
38698
38976
  reverse: reverse,
38699
- start: reverse ? start + this._step * (n - 1) : start,
38977
+ start: reverse ? clamp$1(start + this._step * (n - 1), wholeRange[1], wholeRange[0]) : clamp$1(start, wholeRange[0], wholeRange[1]),
38978
+ min: reverse ? wholeRange[1] : wholeRange[0],
38979
+ max: stop,
38700
38980
  count: n
38701
38981
  }, this.generateFishEyeTransform(), this;
38702
38982
  }
@@ -38713,10 +38993,12 @@ class BandScale extends OrdinalScale {
38713
38993
  const {
38714
38994
  count: count,
38715
38995
  start: start,
38716
- reverse: reverse
38996
+ reverse: reverse,
38997
+ min: min,
38998
+ max: max
38717
38999
  } = this._bandRangeState,
38718
39000
  output = start + (reverse ? -1 : 1) * ((i - 1) % count) * this._step;
38719
- return this._fishEyeTransform ? this._fishEyeTransform(output) : output;
39001
+ return clamp$1(this._fishEyeTransform ? this._fishEyeTransform(output) : output, min, max);
38720
39002
  }
38721
39003
  _calculateWholeRange(range, changeProperty) {
38722
39004
  if (this._wholeRange) return this._wholeRange;
@@ -42224,6 +42506,19 @@ class CircleAxisGrid extends BaseGrid {
42224
42506
  }
42225
42507
  mixin(CircleAxisGrid, CircleAxisMixin);
42226
42508
 
42509
+ var DataZoomActiveTag;
42510
+ !function (DataZoomActiveTag) {
42511
+ DataZoomActiveTag.startHandler = "startHandler", DataZoomActiveTag.endHandler = "endHandler", DataZoomActiveTag.middleHandler = "middleHandler", DataZoomActiveTag.background = "background";
42512
+ }(DataZoomActiveTag || (DataZoomActiveTag = {}));
42513
+ var IDataZoomInteractiveEvent;
42514
+ !function (IDataZoomInteractiveEvent) {
42515
+ IDataZoomInteractiveEvent.stateUpdate = "stateUpdate", IDataZoomInteractiveEvent.maskUpdate = "maskUpdate", IDataZoomInteractiveEvent.dataZoomUpdate = "dataZoomUpdate";
42516
+ }(IDataZoomInteractiveEvent || (IDataZoomInteractiveEvent = {}));
42517
+ var IDataZoomEvent;
42518
+ !function (IDataZoomEvent) {
42519
+ IDataZoomEvent.dataZoomChange = "dataZoomChange";
42520
+ }(IDataZoomEvent || (IDataZoomEvent = {}));
42521
+
42227
42522
  const DEFAULT_HANDLER_PATH = "M -0.0544 0.25 C -0.0742 0.25 -0.0901 0.234 -0.0901 0.2143 L -0.0901 -0.1786 C -0.0901 -0.1983 -0.0742 -0.2143 -0.0544 -0.2143 L -0.0187 -0.2143 L -0.0187 -0.5 L 0.017 -0.5 L 0.017 -0.2143 L 0.0527 -0.2143 C 0.0724 -0.2143 0.0884 -0.1983 0.0884 -0.1786 L 0.0884 0.2143 C 0.0884 0.234 0.0724 0.25 0.0527 0.25 L 0.017 0.25 L 0.017 0.5 L -0.0187 0.5 L -0.0187 0.25 L -0.0544 0.25 Z M -0.0187 -0.1429 L -0.0544 -0.1429 L -0.0544 0.1786 L -0.0187 0.1786 L -0.0187 -0.1429 Z M 0.0527 -0.1429 L 0.017 -0.1429 L 0.017 0.1786 L 0.0527 0.1786 L 0.0527 -0.1429 Z";
42228
42523
  const DEFAULT_DATA_ZOOM_ATTRIBUTES = {
42229
42524
  orient: "bottom",
@@ -42341,14 +42636,17 @@ const DEFAULT_HANDLER_ATTR_MAP = {
42341
42636
  }
42342
42637
  };
42343
42638
 
42344
- var DataZoomActiveTag;
42345
- !function (DataZoomActiveTag) {
42346
- DataZoomActiveTag.startHandler = "startHandler", DataZoomActiveTag.endHandler = "endHandler", DataZoomActiveTag.middleHandler = "middleHandler", DataZoomActiveTag.background = "background";
42347
- }(DataZoomActiveTag || (DataZoomActiveTag = {}));
42348
-
42349
- function loadDataZoomComponent() {
42350
- loadTagComponent(), registerRect(), registerSymbol(), registerArea(), registerLine();
42351
- }
42639
+ const isTextOverflow = (componentBoundsLike, textBounds, layout, isHorizontal) => {
42640
+ if (!textBounds) return !1;
42641
+ if (isHorizontal) {
42642
+ if ("start" === layout) {
42643
+ if (textBounds.x1 < componentBoundsLike.x1) return !0;
42644
+ } else if (textBounds.x2 > componentBoundsLike.x2) return !0;
42645
+ } else if ("start" === layout) {
42646
+ if (textBounds.y1 < componentBoundsLike.y1) return !0;
42647
+ } else if (textBounds.y2 > componentBoundsLike.y2) return !0;
42648
+ return !1;
42649
+ };
42352
42650
 
42353
42651
  var __rest$1 = undefined && undefined.__rest || function (s, e) {
42354
42652
  var t = {};
@@ -42359,176 +42657,96 @@ var __rest$1 = undefined && undefined.__rest || function (s, e) {
42359
42657
  }
42360
42658
  return t;
42361
42659
  };
42362
- const delayMap$2 = {
42363
- debounce: debounce,
42364
- throttle: throttle
42365
- };
42366
- loadDataZoomComponent();
42367
- let DataZoom$1 = class DataZoom extends AbstractComponent {
42368
- setPropsFromAttrs() {
42660
+ class DataZoomRenderer {
42661
+ get startHandlerMask() {
42662
+ return this._startHandlerMask;
42663
+ }
42664
+ get middleHandlerSymbol() {
42665
+ return this._middleHandlerSymbol;
42666
+ }
42667
+ get middleHandlerRect() {
42668
+ return this._middleHandlerRect;
42669
+ }
42670
+ get endHandlerMask() {
42671
+ return this._endHandlerMask;
42672
+ }
42673
+ get selectedBackground() {
42674
+ return this._selectedBackground;
42675
+ }
42676
+ get dragMask() {
42677
+ return this._dragMask;
42678
+ }
42679
+ get startText() {
42680
+ return this._startText;
42681
+ }
42682
+ get endText() {
42683
+ return this._endText;
42684
+ }
42685
+ get startValue() {
42686
+ return this._startValue;
42687
+ }
42688
+ get endValue() {
42689
+ return this._endValue;
42690
+ }
42691
+ set showText(showText) {
42692
+ this._showText = showText;
42693
+ }
42694
+ get background() {
42695
+ return this._background;
42696
+ }
42697
+ set previewData(previewData) {
42698
+ this._previewData = previewData;
42699
+ }
42700
+ get previewGroup() {
42701
+ return this._previewGroup;
42702
+ }
42703
+ get selectedPreviewGroup() {
42704
+ return this._selectedPreviewGroup;
42705
+ }
42706
+ set previewPointsX(previewPointsX) {
42707
+ this._previewPointsX = previewPointsX;
42708
+ }
42709
+ set previewPointsY(previewPointsY) {
42710
+ this._previewPointsY = previewPointsY;
42711
+ }
42712
+ set previewPointsX1(previewPointsX1) {
42713
+ this._previewPointsX1 = previewPointsX1;
42714
+ }
42715
+ set previewPointsY1(previewPointsY1) {
42716
+ this._previewPointsY1 = previewPointsY1;
42717
+ }
42718
+ set statePointToData(statePointToData) {
42719
+ this._statePointToData = statePointToData;
42720
+ }
42721
+ _initAttrs(props) {
42722
+ this.attribute = props.attribute, this._isHorizontal = "top" === this.attribute.orient || "bottom" === this.attribute.orient;
42369
42723
  const {
42370
- start: start,
42371
- end: end,
42372
- orient: orient,
42373
42724
  previewData: previewData,
42374
42725
  previewPointsX: previewPointsX,
42375
42726
  previewPointsY: previewPointsY,
42376
42727
  previewPointsX1: previewPointsX1,
42377
42728
  previewPointsY1: previewPointsY1
42378
42729
  } = this.attribute;
42379
- start && (this.state.start = start), end && (this.state.end = end);
42380
- const {
42381
- width: width,
42382
- height: height
42383
- } = this.getLayoutAttrFromConfig();
42384
- this._spanCache = this.state.end - this.state.start, this._isHorizontal = "top" === orient || "bottom" === orient, this._layoutCache.max = this._isHorizontal ? width : height, this._layoutCache.attPos = this._isHorizontal ? "x" : "y", this._layoutCache.attSize = this._isHorizontal ? "width" : "height", previewData && (this._previewData = previewData), isFunction$1(previewPointsX) && (this._previewPointsX = previewPointsX), isFunction$1(previewPointsY) && (this._previewPointsY = previewPointsY), isFunction$1(previewPointsX1) && (this._previewPointsX1 = previewPointsX1), isFunction$1(previewPointsY1) && (this._previewPointsY1 = previewPointsY1);
42730
+ previewData && (this._previewData = previewData), isFunction$1(previewPointsX) && (this._previewPointsX = previewPointsX), isFunction$1(previewPointsY) && (this._previewPointsY = previewPointsY), isFunction$1(previewPointsX1) && (this._previewPointsX1 = previewPointsX1), isFunction$1(previewPointsY1) && (this._previewPointsY1 = previewPointsY1), this._getState = props.getState, this._getLayoutAttrFromConfig = props.getLayoutAttrFromConfig, this._getContainer = props.getContainer;
42385
42731
  }
42386
- constructor(attributes, options) {
42387
- super((null == options ? void 0 : options.skipDefault) ? attributes : merge$1({}, DataZoom.defaultAttributes, attributes)), this.name = "dataZoom", this._previewData = [], this._activeState = !1, this._activeCache = {
42388
- startPos: {
42389
- x: 0,
42390
- y: 0
42391
- },
42392
- lastPos: {
42393
- x: 0,
42394
- y: 0
42395
- }
42396
- }, this._layoutCache = {
42397
- attPos: "x",
42398
- attSize: "width",
42399
- max: 0
42400
- }, this.state = {
42401
- start: 0,
42402
- end: 1
42403
- }, this._statePointToData = state => state, this._handleTouchMove = e => {
42404
- this._activeState && e.preventDefault();
42405
- }, this._onHandlerPointerDown = (e, tag) => {
42406
- this._clearDragEvents(), "start" === tag ? (this._activeTag = DataZoomActiveTag.startHandler, this._activeItem = this._startHandlerMask) : "end" === tag ? (this._activeTag = DataZoomActiveTag.endHandler, this._activeItem = this._endHandlerMask) : "middleRect" === tag ? (this._activeTag = DataZoomActiveTag.middleHandler, this._activeItem = this._middleHandlerRect) : "middleSymbol" === tag ? (this._activeTag = DataZoomActiveTag.middleHandler, this._activeItem = this._middleHandlerSymbol) : "background" === tag && (this._activeTag = DataZoomActiveTag.background, this._activeItem = this._background), this._activeState = !0, this._activeCache.startPos = this.eventPosToStagePos(e), this._activeCache.lastPos = this.eventPosToStagePos(e);
42407
- const evtTarget = "browser" === vglobal.env ? vglobal : this.stage,
42408
- triggers = getEndTriggersOfDrag();
42409
- evtTarget.addEventListener("pointermove", this._onHandlerPointerMove, {
42410
- capture: !0
42411
- }), this.addEventListener("pointermove", this._onHandlerPointerMove, {
42412
- capture: !0
42413
- }), triggers.forEach(trigger => {
42414
- evtTarget.addEventListener(trigger, this._onHandlerPointerUp);
42415
- });
42416
- }, this._pointerMove = e => {
42417
- const {
42418
- start: startAttr,
42419
- end: endAttr,
42420
- brushSelect: brushSelect,
42421
- realTime = !0
42422
- } = this.attribute,
42423
- pos = this.eventPosToStagePos(e),
42424
- {
42425
- attPos: attPos,
42426
- max: max
42427
- } = this._layoutCache,
42428
- dis = (pos[attPos] - this._activeCache.lastPos[attPos]) / max;
42429
- let {
42430
- start: start,
42431
- end: end
42432
- } = this.state;
42433
- this._activeState && (this._activeTag === DataZoomActiveTag.middleHandler ? this.moveZoomWithMiddle((this.state.start + this.state.end) / 2 + dis) : this._activeTag === DataZoomActiveTag.startHandler ? start + dis > end ? (start = end, end = start + dis, this._activeTag = DataZoomActiveTag.endHandler) : start += dis : this._activeTag === DataZoomActiveTag.endHandler && (end + dis < start ? (end = start, start = end + dis, this._activeTag = DataZoomActiveTag.startHandler) : end += dis), this._activeCache.lastPos = pos, brushSelect && this.renderDragMask()), start = Math.min(Math.max(start, 0), 1), end = Math.min(Math.max(end, 0), 1), startAttr === start && endAttr === end || (this.setStateAttr(start, end, !0), realTime && this._dispatchEvent("change", {
42434
- start: start,
42435
- end: end,
42436
- tag: this._activeTag
42437
- }));
42438
- }, this._onHandlerPointerMove = 0 === this.attribute.delayTime ? this._pointerMove : delayMap$2[this.attribute.delayType](this._pointerMove, this.attribute.delayTime), this._onHandlerPointerUp = e => {
42439
- const {
42440
- start: start,
42441
- end: end,
42442
- brushSelect: brushSelect,
42443
- realTime = !0
42444
- } = this.attribute;
42445
- if (this._activeState && this._activeTag === DataZoomActiveTag.background) {
42446
- const pos = this.eventPosToStagePos(e);
42447
- this.backgroundDragZoom(this._activeCache.startPos, pos);
42448
- }
42449
- this._activeState = !1, brushSelect && this.renderDragMask(), this._dispatchEvent("change", {
42450
- start: this.state.start,
42451
- end: this.state.end,
42452
- tag: this._activeTag
42453
- }), this._clearDragEvents();
42454
- };
42732
+ constructor(props) {
42733
+ this._previewData = [], this._statePointToData = state => state;
42455
42734
  const {
42456
- position: position,
42457
42735
  showDetail: showDetail
42458
- } = attributes;
42459
- this._activeCache.startPos = position, this._activeCache.lastPos = position, this._showText = "auto" !== showDetail && showDetail, this.setPropsFromAttrs();
42736
+ } = props.attribute;
42737
+ this._showText = "auto" !== showDetail && showDetail, this._initAttrs(props);
42460
42738
  }
42461
- setAttributes(params, forceUpdateTag) {
42462
- super.setAttributes(params, forceUpdateTag), this.setPropsFromAttrs();
42739
+ setAttributes(props) {
42740
+ this._initAttrs(props);
42463
42741
  }
42464
- bindEvents() {
42465
- if (this.attribute.disableTriggerEvent) return void this.setAttribute("childrenPickable", !1);
42742
+ renderDataZoom(onlyStateChange = !1) {
42743
+ var _a, _b, _c, _d, _e, _f;
42466
42744
  const {
42467
- showDetail: showDetail,
42745
+ backgroundChartStyle = {},
42746
+ selectedBackgroundChartStyle = {},
42468
42747
  brushSelect: brushSelect
42469
42748
  } = this.attribute;
42470
- this._startHandlerMask && this._startHandlerMask.addEventListener("pointerdown", e => this._onHandlerPointerDown(e, "start")), this._endHandlerMask && this._endHandlerMask.addEventListener("pointerdown", e => this._onHandlerPointerDown(e, "end")), this._middleHandlerSymbol && this._middleHandlerSymbol.addEventListener("pointerdown", e => this._onHandlerPointerDown(e, "middleSymbol")), this._middleHandlerRect && this._middleHandlerRect.addEventListener("pointerdown", e => this._onHandlerPointerDown(e, "middleRect"));
42471
- const selectedTag = brushSelect ? "background" : "middleRect";
42472
- this._selectedBackground && this._selectedBackground.addEventListener("pointerdown", e => this._onHandlerPointerDown(e, selectedTag)), brushSelect && this._background && this._background.addEventListener("pointerdown", e => this._onHandlerPointerDown(e, "background")), brushSelect && this._previewGroup && this._previewGroup.addEventListener("pointerdown", e => this._onHandlerPointerDown(e, "background")), this._selectedPreviewGroup && this._selectedPreviewGroup.addEventListener("pointerdown", e => this._onHandlerPointerDown(e, selectedTag)), "auto" === showDetail && (this.addEventListener("pointerenter", this._onHandlerPointerEnter), this.addEventListener("pointerleave", this._onHandlerPointerLeave)), ("browser" === vglobal.env ? vglobal : this.stage).addEventListener("touchmove", this._handleTouchMove, {
42473
- passive: !1
42474
- });
42475
- }
42476
- dragMaskSize() {
42477
- const {
42478
- position: position
42479
- } = this.attribute,
42480
- {
42481
- attPos: attPos,
42482
- max: max
42483
- } = this._layoutCache;
42484
- return this._activeCache.lastPos[attPos] - position[attPos] > max ? max + position[attPos] - this._activeCache.startPos[attPos] : this._activeCache.lastPos[attPos] - position[attPos] < 0 ? position[attPos] - this._activeCache.startPos[attPos] : this._activeCache.lastPos[attPos] - this._activeCache.startPos[attPos];
42485
- }
42486
- setStateAttr(start, end, shouldRender) {
42487
- const {
42488
- zoomLock = !1,
42489
- minSpan = 0,
42490
- maxSpan = 1
42491
- } = this.attribute,
42492
- span = end - start;
42493
- span !== this._spanCache && (zoomLock || span < minSpan || span > maxSpan) || (this._spanCache = span, this.state.start = start, this.state.end = end, shouldRender && this.setAttributes({
42494
- start: start,
42495
- end: end
42496
- }));
42497
- }
42498
- _clearDragEvents() {
42499
- const evtTarget = "browser" === vglobal.env ? vglobal : this.stage,
42500
- triggers = getEndTriggersOfDrag();
42501
- evtTarget.removeEventListener("pointermove", this._onHandlerPointerMove, {
42502
- capture: !0
42503
- }), triggers.forEach(trigger => {
42504
- evtTarget.removeEventListener(trigger, this._onHandlerPointerUp);
42505
- }), this.removeEventListener("pointermove", this._onHandlerPointerMove, {
42506
- capture: !0
42507
- });
42508
- }
42509
- _onHandlerPointerEnter(e) {
42510
- this._showText = !0, this.renderText();
42511
- }
42512
- _onHandlerPointerLeave(e) {
42513
- this._showText = !1, this.renderText();
42514
- }
42515
- backgroundDragZoom(startPos, endPos) {
42516
- const {
42517
- attPos: attPos,
42518
- max: max
42519
- } = this._layoutCache,
42520
- {
42521
- position: position
42522
- } = this.attribute,
42523
- startPosInComponent = startPos[attPos] - position[attPos],
42524
- endPosInComponent = endPos[attPos] - position[attPos],
42525
- start = Math.min(Math.max(Math.min(startPosInComponent, endPosInComponent) / max, 0), 1),
42526
- end = Math.min(Math.max(Math.max(startPosInComponent, endPosInComponent) / max, 0), 1);
42527
- Math.abs(start - end) < .01 ? this.moveZoomWithMiddle(start) : this.setStateAttr(start, end, !1);
42528
- }
42529
- moveZoomWithMiddle(middle) {
42530
- let offset = middle - (this.state.start + this.state.end) / 2;
42531
- 0 !== offset && (offset > 0 ? this.state.end + offset > 1 && (offset = 1 - this.state.end) : offset < 0 && this.state.start + offset < 0 && (offset = -this.state.start), this.setStateAttr(this.state.start + offset, this.state.end + offset, !1));
42749
+ this._renderBackground(), (null === (_a = backgroundChartStyle.line) || void 0 === _a ? void 0 : _a.visible) && !onlyStateChange && this._setPreviewAttributes("line", this._getContainer()), (null === (_b = backgroundChartStyle.area) || void 0 === _b ? void 0 : _b.visible) && !onlyStateChange && this._setPreviewAttributes("area", this._getContainer()), brushSelect && this.renderDragMask(), this._renderSelectedBackground(), (null === (_c = selectedBackgroundChartStyle.line) || void 0 === _c ? void 0 : _c.visible) && this._setSelectedPreviewClipAttributes("line", this._getContainer()), (null === (_d = selectedBackgroundChartStyle.line) || void 0 === _d ? void 0 : _d.visible) && !onlyStateChange && this._setSelectedPreviewAttributes("line"), (null === (_e = selectedBackgroundChartStyle.line) || void 0 === _e ? void 0 : _e.visible) && this._setSelectedPreviewClipAttributes("area", this._getContainer()), (null === (_f = selectedBackgroundChartStyle.area) || void 0 === _f ? void 0 : _f.visible) && !onlyStateChange && this._setSelectedPreviewAttributes("area"), this._renderHandler(), this._showText && this.renderText();
42532
42750
  }
42533
42751
  renderDragMask() {
42534
42752
  const {
@@ -42538,254 +42756,104 @@ let DataZoom$1 = class DataZoom extends AbstractComponent {
42538
42756
  position: position,
42539
42757
  width: width,
42540
42758
  height: height
42541
- } = this.getLayoutAttrFromConfig();
42542
- this._isHorizontal ? this._dragMask = this._container.createOrUpdateChild("dragMask", Object.assign({
42543
- x: clamp$1(this.dragMaskSize() < 0 ? this._activeCache.lastPos.x : this._activeCache.startPos.x, position.x, position.x + width),
42759
+ } = this._getLayoutAttrFromConfig(),
42760
+ {
42761
+ start: start,
42762
+ end: end
42763
+ } = this._getState();
42764
+ return this._isHorizontal ? this._dragMask = this._getContainer().createOrUpdateChild("dragMask", Object.assign({
42765
+ x: position.x + start * width,
42544
42766
  y: position.y,
42545
- width: this._activeState && this._activeTag === DataZoomActiveTag.background && Math.abs(this.dragMaskSize()) || 0,
42767
+ width: (end - start) * width,
42546
42768
  height: height
42547
- }, dragMaskStyle), "rect") : this._dragMask = this._container.createOrUpdateChild("dragMask", Object.assign({
42769
+ }, dragMaskStyle), "rect") : this._dragMask = this._getContainer().createOrUpdateChild("dragMask", Object.assign({
42548
42770
  x: position.x,
42549
- y: clamp$1(this.dragMaskSize() < 0 ? this._activeCache.lastPos.y : this._activeCache.startPos.y, position.y, position.y + height),
42771
+ y: position.y + start * height,
42550
42772
  width: width,
42551
- height: this._activeState && this._activeTag === DataZoomActiveTag.background && Math.abs(this.dragMaskSize()) || 0
42552
- }, dragMaskStyle), "rect");
42553
- }
42554
- isTextOverflow(componentBoundsLike, textBounds, layout) {
42555
- if (!textBounds) return !1;
42556
- if (this._isHorizontal) {
42557
- if ("start" === layout) {
42558
- if (textBounds.x1 < componentBoundsLike.x1) return !0;
42559
- } else if (textBounds.x2 > componentBoundsLike.x2) return !0;
42560
- } else if ("start" === layout) {
42561
- if (textBounds.y1 < componentBoundsLike.y1) return !0;
42562
- } else if (textBounds.y2 > componentBoundsLike.y2) return !0;
42563
- return !1;
42773
+ height: (end - start) * height
42774
+ }, dragMaskStyle), "rect"), {
42775
+ start: start,
42776
+ end: end
42777
+ };
42564
42778
  }
42565
- setTextAttr(startTextBounds, endTextBounds) {
42566
- var _a, _b, _c, _d, _e, _f, _g, _h;
42779
+ _renderBackground() {
42780
+ var _a;
42567
42781
  const {
42568
- startTextStyle: startTextStyle,
42569
- endTextStyle: endTextStyle
42782
+ backgroundStyle: backgroundStyle,
42783
+ brushSelect: brushSelect,
42784
+ zoomLock: zoomLock
42570
42785
  } = this.attribute,
42571
42786
  {
42572
- formatMethod: startTextFormat
42573
- } = startTextStyle,
42574
- restStartTextStyle = __rest$1(startTextStyle, ["formatMethod"]),
42575
- {
42576
- formatMethod: endTextFormat
42577
- } = endTextStyle,
42578
- restEndTextStyle = __rest$1(endTextStyle, ["formatMethod"]),
42579
- {
42580
- start: start,
42581
- end: end
42582
- } = this.state;
42583
- this._startValue = this._statePointToData(start), this._endValue = this._statePointToData(end);
42584
- const {
42585
42787
  position: position,
42586
42788
  width: width,
42587
42789
  height: height
42588
- } = this.getLayoutAttrFromConfig(),
42589
- startTextValue = startTextFormat ? startTextFormat(this._startValue) : this._startValue,
42590
- endTextValue = endTextFormat ? endTextFormat(this._endValue) : this._endValue,
42591
- componentBoundsLike = {
42592
- x1: position.x,
42593
- y1: position.y,
42594
- x2: position.x + width,
42595
- y2: position.y + height
42596
- };
42597
- let startTextPosition, endTextPosition, startTextAlignStyle, endTextAlignStyle;
42598
- this._isHorizontal ? (startTextPosition = {
42599
- x: position.x + start * width,
42600
- y: position.y + height / 2
42601
- }, endTextPosition = {
42602
- x: position.x + end * width,
42603
- y: position.y + height / 2
42604
- }, startTextAlignStyle = {
42605
- textAlign: this.isTextOverflow(componentBoundsLike, startTextBounds, "start") ? "left" : "right",
42606
- textBaseline: null !== (_b = null === (_a = null == restStartTextStyle ? void 0 : restStartTextStyle.textStyle) || void 0 === _a ? void 0 : _a.textBaseline) && void 0 !== _b ? _b : "middle"
42607
- }, endTextAlignStyle = {
42608
- textAlign: this.isTextOverflow(componentBoundsLike, endTextBounds, "end") ? "right" : "left",
42609
- textBaseline: null !== (_d = null === (_c = null == restEndTextStyle ? void 0 : restEndTextStyle.textStyle) || void 0 === _c ? void 0 : _c.textBaseline) && void 0 !== _d ? _d : "middle"
42610
- }) : (startTextPosition = {
42611
- x: position.x + width / 2,
42612
- y: position.y + start * height
42613
- }, endTextPosition = {
42614
- x: position.x + width / 2,
42615
- y: position.y + end * height
42616
- }, startTextAlignStyle = {
42617
- textAlign: null !== (_f = null === (_e = null == restStartTextStyle ? void 0 : restStartTextStyle.textStyle) || void 0 === _e ? void 0 : _e.textAlign) && void 0 !== _f ? _f : "center",
42618
- textBaseline: this.isTextOverflow(componentBoundsLike, startTextBounds, "start") ? "top" : "bottom"
42619
- }, endTextAlignStyle = {
42620
- textAlign: null !== (_h = null === (_g = null == restEndTextStyle ? void 0 : restEndTextStyle.textStyle) || void 0 === _g ? void 0 : _g.textAlign) && void 0 !== _h ? _h : "center",
42621
- textBaseline: this.isTextOverflow(componentBoundsLike, endTextBounds, "end") ? "bottom" : "top"
42622
- }), this._startText = this.maybeAddLabel(this._container, merge$1({}, restStartTextStyle, {
42623
- text: startTextValue,
42624
- x: startTextPosition.x,
42625
- y: startTextPosition.y,
42626
- visible: this._showText,
42627
- pickable: !1,
42628
- childrenPickable: !1,
42629
- textStyle: startTextAlignStyle
42630
- }), `data-zoom-start-text-${position}`), this._endText = this.maybeAddLabel(this._container, merge$1({}, restEndTextStyle, {
42631
- text: endTextValue,
42632
- x: endTextPosition.x,
42633
- y: endTextPosition.y,
42634
- visible: this._showText,
42635
- pickable: !1,
42636
- childrenPickable: !1,
42637
- textStyle: endTextAlignStyle
42638
- }), `data-zoom-end-text-${position}`);
42639
- }
42640
- renderText() {
42641
- let startTextBounds = null,
42642
- endTextBounds = null;
42643
- this.setTextAttr(startTextBounds, endTextBounds), startTextBounds = this._startText.AABBBounds, endTextBounds = this._endText.AABBBounds, this.setTextAttr(startTextBounds, endTextBounds), startTextBounds = this._startText.AABBBounds, endTextBounds = this._endText.AABBBounds;
42644
- const {
42645
- x1: x1,
42646
- x2: x2,
42647
- y1: y1,
42648
- y2: y2
42649
- } = startTextBounds,
42650
- {
42651
- dx: startTextDx = 0,
42652
- dy: startTextDy = 0
42653
- } = this.attribute.startTextStyle;
42654
- if (new Bounds().set(x1, y1, x2, y2).intersects(endTextBounds)) {
42655
- const direction = "bottom" === this.attribute.orient || "right" === this.attribute.orient ? -1 : 1;
42656
- if (this._isHorizontal) {
42657
- const boundsYDiff = Math.abs(endTextBounds.y1 - endTextBounds.y2);
42658
- this._startText.setAttribute("dy", startTextDy + direction * (Number.isFinite(boundsYDiff) ? boundsYDiff : 0));
42659
- } else {
42660
- const boundsXDiff = Math.abs(endTextBounds.x1 - endTextBounds.x2);
42661
- this._startText.setAttribute("dx", startTextDx + direction * (Number.isFinite(boundsXDiff) ? boundsXDiff : 0));
42662
- }
42663
- } else this._isHorizontal ? this._startText.setAttribute("dy", startTextDy) : this._startText.setAttribute("dx", startTextDx);
42664
- }
42665
- getLayoutAttrFromConfig() {
42666
- var _a, _b, _c, _d, _e, _f;
42667
- if (this._layoutAttrFromConfig) return this._layoutAttrFromConfig;
42668
- const {
42669
- position: positionConfig,
42670
- size: size,
42671
- orient: orient,
42672
- middleHandlerStyle = {},
42673
- startHandlerStyle = {},
42674
- endHandlerStyle = {},
42675
- backgroundStyle = {}
42676
- } = this.attribute,
42677
- {
42678
- width: widthConfig,
42679
- height: heightConfig
42680
- } = size,
42681
- middleHandlerSize = null !== (_b = null === (_a = middleHandlerStyle.background) || void 0 === _a ? void 0 : _a.size) && void 0 !== _b ? _b : 10;
42682
- let width, height, position;
42683
- middleHandlerStyle.visible ? this._isHorizontal ? (width = widthConfig, height = heightConfig - middleHandlerSize, position = {
42684
- x: positionConfig.x,
42685
- y: positionConfig.y + middleHandlerSize
42686
- }) : (width = widthConfig - middleHandlerSize, height = heightConfig, position = {
42687
- x: positionConfig.x + ("left" === orient ? middleHandlerSize : 0),
42688
- y: positionConfig.y
42689
- }) : (width = widthConfig, height = heightConfig, position = positionConfig);
42690
- const startHandlerSize = null !== (_c = startHandlerStyle.size) && void 0 !== _c ? _c : this._isHorizontal ? height : width,
42691
- endHandlerSize = null !== (_d = endHandlerStyle.size) && void 0 !== _d ? _d : this._isHorizontal ? height : width;
42692
- return startHandlerStyle.visible && (this._isHorizontal ? (width -= (startHandlerSize + endHandlerSize) / 2, position = {
42693
- x: position.x + startHandlerSize / 2,
42694
- y: position.y
42695
- }) : (height -= (startHandlerSize + endHandlerSize) / 2, position = {
42790
+ } = this._getLayoutAttrFromConfig(),
42791
+ group = this._getContainer();
42792
+ this._background = group.createOrUpdateChild("background", Object.assign(Object.assign({
42696
42793
  x: position.x,
42697
- y: position.y + startHandlerSize / 2
42698
- })), height += null !== (_e = backgroundStyle.lineWidth / 2) && void 0 !== _e ? _e : 1, width += null !== (_f = backgroundStyle.lineWidth / 2) && void 0 !== _f ? _f : 1, this._layoutAttrFromConfig = {
42699
- position: position,
42794
+ y: position.y,
42700
42795
  width: width,
42701
- height: height
42702
- }, this._layoutAttrFromConfig;
42796
+ height: height,
42797
+ cursor: brushSelect ? "crosshair" : "auto"
42798
+ }, backgroundStyle), {
42799
+ pickable: !zoomLock && (null === (_a = backgroundStyle.pickable) || void 0 === _a || _a)
42800
+ }), "rect");
42703
42801
  }
42704
- render() {
42705
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9;
42706
- this._layoutAttrFromConfig = null;
42802
+ _renderHandler() {
42803
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2;
42707
42804
  const {
42708
42805
  orient: orient,
42709
- backgroundStyle: backgroundStyle,
42710
- backgroundChartStyle = {},
42711
- selectedBackgroundStyle = {},
42712
- selectedBackgroundChartStyle = {},
42713
42806
  middleHandlerStyle = {},
42714
42807
  startHandlerStyle = {},
42715
42808
  endHandlerStyle = {},
42716
- brushSelect: brushSelect,
42717
42809
  zoomLock: zoomLock
42718
42810
  } = this.attribute,
42719
42811
  {
42720
42812
  start: start,
42721
42813
  end: end
42722
- } = this.state,
42814
+ } = this._getState(),
42723
42815
  {
42724
42816
  position: position,
42725
42817
  width: width,
42726
42818
  height: height
42727
- } = this.getLayoutAttrFromConfig(),
42819
+ } = this._getLayoutAttrFromConfig(),
42728
42820
  startHandlerMinSize = null !== (_a = startHandlerStyle.triggerMinSize) && void 0 !== _a ? _a : 40,
42729
42821
  endHandlerMinSize = null !== (_b = endHandlerStyle.triggerMinSize) && void 0 !== _b ? _b : 40,
42730
- group = this.createOrUpdateChild("dataZoom-container", {}, "group");
42731
- if (this._container = group, this._background = group.createOrUpdateChild("background", Object.assign(Object.assign({
42732
- x: position.x,
42733
- y: position.y,
42734
- width: width,
42735
- height: height,
42736
- cursor: brushSelect ? "crosshair" : "auto"
42737
- }, backgroundStyle), {
42738
- pickable: !zoomLock && (null === (_c = backgroundStyle.pickable) || void 0 === _c || _c)
42739
- }), "rect"), (null === (_d = backgroundChartStyle.line) || void 0 === _d ? void 0 : _d.visible) && this.setPreviewAttributes("line", group), (null === (_e = backgroundChartStyle.area) || void 0 === _e ? void 0 : _e.visible) && this.setPreviewAttributes("area", group), brushSelect && this.renderDragMask(), this._isHorizontal ? this._selectedBackground = group.createOrUpdateChild("selectedBackground", Object.assign(Object.assign({
42740
- x: position.x + start * width,
42741
- y: position.y,
42742
- width: (end - start) * width,
42743
- height: height,
42744
- cursor: brushSelect ? "crosshair" : "move"
42745
- }, selectedBackgroundStyle), {
42746
- pickable: !zoomLock && (null === (_f = selectedBackgroundChartStyle.pickable) || void 0 === _f || _f)
42747
- }), "rect") : this._selectedBackground = group.createOrUpdateChild("selectedBackground", Object.assign(Object.assign({
42748
- x: position.x,
42749
- y: position.y + start * height,
42750
- width: width,
42751
- height: (end - start) * height,
42752
- cursor: brushSelect ? "crosshair" : "move"
42753
- }, selectedBackgroundStyle), {
42754
- pickable: !zoomLock && (null === (_g = selectedBackgroundStyle.pickable) || void 0 === _g || _g)
42755
- }), "rect"), (null === (_h = selectedBackgroundChartStyle.line) || void 0 === _h ? void 0 : _h.visible) && this.setSelectedPreviewAttributes("line", group), (null === (_j = selectedBackgroundChartStyle.area) || void 0 === _j ? void 0 : _j.visible) && this.setSelectedPreviewAttributes("area", group), this._isHorizontal) {
42822
+ group = this._getContainer();
42823
+ if (this._isHorizontal) {
42756
42824
  if (middleHandlerStyle.visible) {
42757
- const middleHandlerBackgroundSize = (null === (_k = middleHandlerStyle.background) || void 0 === _k ? void 0 : _k.size) || 10;
42825
+ const middleHandlerBackgroundSize = (null === (_c = middleHandlerStyle.background) || void 0 === _c ? void 0 : _c.size) || 10;
42758
42826
  this._middleHandlerRect = group.createOrUpdateChild("middleHandlerRect", Object.assign(Object.assign({
42759
42827
  x: position.x + start * width,
42760
42828
  y: position.y - middleHandlerBackgroundSize,
42761
42829
  width: (end - start) * width,
42762
42830
  height: middleHandlerBackgroundSize
42763
- }, null === (_l = middleHandlerStyle.background) || void 0 === _l ? void 0 : _l.style), {
42764
- pickable: !zoomLock && (null === (_p = null === (_o = null === (_m = middleHandlerStyle.background) || void 0 === _m ? void 0 : _m.style) || void 0 === _o ? void 0 : _o.pickable) || void 0 === _p || _p)
42831
+ }, null === (_d = middleHandlerStyle.background) || void 0 === _d ? void 0 : _d.style), {
42832
+ pickable: !zoomLock && (null === (_g = null === (_f = null === (_e = middleHandlerStyle.background) || void 0 === _e ? void 0 : _e.style) || void 0 === _f ? void 0 : _f.pickable) || void 0 === _g || _g)
42765
42833
  }), "rect"), this._middleHandlerSymbol = group.createOrUpdateChild("middleHandlerSymbol", Object.assign(Object.assign({
42766
42834
  x: position.x + (start + end) / 2 * width,
42767
42835
  y: position.y - middleHandlerBackgroundSize / 2,
42768
42836
  strokeBoundsBuffer: 0,
42769
42837
  angle: 0,
42770
- symbolType: null !== (_r = null === (_q = middleHandlerStyle.icon) || void 0 === _q ? void 0 : _q.symbolType) && void 0 !== _r ? _r : "square"
42838
+ symbolType: null !== (_j = null === (_h = middleHandlerStyle.icon) || void 0 === _h ? void 0 : _h.symbolType) && void 0 !== _j ? _j : "square"
42771
42839
  }, middleHandlerStyle.icon), {
42772
- pickable: !zoomLock && (null === (_s = middleHandlerStyle.icon.pickable) || void 0 === _s || _s)
42840
+ pickable: !zoomLock && (null === (_k = middleHandlerStyle.icon.pickable) || void 0 === _k || _k)
42773
42841
  }), "symbol");
42774
42842
  }
42775
42843
  this._startHandler = group.createOrUpdateChild("startHandler", Object.assign(Object.assign(Object.assign({
42776
42844
  x: position.x + start * width,
42777
42845
  y: position.y + height / 2,
42778
42846
  size: height,
42779
- symbolType: null !== (_t = startHandlerStyle.symbolType) && void 0 !== _t ? _t : "square"
42847
+ symbolType: null !== (_l = startHandlerStyle.symbolType) && void 0 !== _l ? _l : "square"
42780
42848
  }, DEFAULT_HANDLER_ATTR_MAP.horizontal), startHandlerStyle), {
42781
- pickable: !zoomLock && (null === (_u = startHandlerStyle.pickable) || void 0 === _u || _u)
42849
+ pickable: !zoomLock && (null === (_m = startHandlerStyle.pickable) || void 0 === _m || _m)
42782
42850
  }), "symbol"), this._endHandler = group.createOrUpdateChild("endHandler", Object.assign(Object.assign(Object.assign({
42783
42851
  x: position.x + end * width,
42784
42852
  y: position.y + height / 2,
42785
42853
  size: height,
42786
- symbolType: null !== (_v = endHandlerStyle.symbolType) && void 0 !== _v ? _v : "square"
42854
+ symbolType: null !== (_o = endHandlerStyle.symbolType) && void 0 !== _o ? _o : "square"
42787
42855
  }, DEFAULT_HANDLER_ATTR_MAP.horizontal), endHandlerStyle), {
42788
- pickable: !zoomLock && (null === (_w = endHandlerStyle.pickable) || void 0 === _w || _w)
42856
+ pickable: !zoomLock && (null === (_p = endHandlerStyle.pickable) || void 0 === _p || _p)
42789
42857
  }), "symbol");
42790
42858
  const startHandlerWidth = Math.max(this._startHandler.AABBBounds.width(), startHandlerMinSize),
42791
42859
  startHandlerHeight = Math.max(this._startHandler.AABBBounds.height(), startHandlerMinSize),
@@ -42814,38 +42882,38 @@ let DataZoom$1 = class DataZoom extends AbstractComponent {
42814
42882
  }), "rect");
42815
42883
  } else {
42816
42884
  if (middleHandlerStyle.visible) {
42817
- const middleHandlerBackgroundSize = (null === (_x = middleHandlerStyle.background) || void 0 === _x ? void 0 : _x.size) || 10;
42885
+ const middleHandlerBackgroundSize = (null === (_q = middleHandlerStyle.background) || void 0 === _q ? void 0 : _q.size) || 10;
42818
42886
  this._middleHandlerRect = group.createOrUpdateChild("middleHandlerRect", Object.assign(Object.assign({
42819
42887
  x: "left" === orient ? position.x - middleHandlerBackgroundSize : position.x + width,
42820
42888
  y: position.y + start * height,
42821
42889
  width: middleHandlerBackgroundSize,
42822
42890
  height: (end - start) * height
42823
- }, null === (_y = middleHandlerStyle.background) || void 0 === _y ? void 0 : _y.style), {
42824
- pickable: !zoomLock && (null === (_1 = null === (_0 = null === (_z = middleHandlerStyle.background) || void 0 === _z ? void 0 : _z.style) || void 0 === _0 ? void 0 : _0.pickable) || void 0 === _1 || _1)
42891
+ }, null === (_r = middleHandlerStyle.background) || void 0 === _r ? void 0 : _r.style), {
42892
+ pickable: !zoomLock && (null === (_u = null === (_t = null === (_s = middleHandlerStyle.background) || void 0 === _s ? void 0 : _s.style) || void 0 === _t ? void 0 : _t.pickable) || void 0 === _u || _u)
42825
42893
  }), "rect"), this._middleHandlerSymbol = group.createOrUpdateChild("middleHandlerSymbol", Object.assign(Object.assign({
42826
42894
  x: "left" === orient ? position.x - middleHandlerBackgroundSize / 2 : position.x + width + middleHandlerBackgroundSize / 2,
42827
42895
  y: position.y + (start + end) / 2 * height,
42828
42896
  angle: Math.PI / 180 * 90,
42829
- symbolType: null !== (_3 = null === (_2 = middleHandlerStyle.icon) || void 0 === _2 ? void 0 : _2.symbolType) && void 0 !== _3 ? _3 : "square",
42897
+ symbolType: null !== (_w = null === (_v = middleHandlerStyle.icon) || void 0 === _v ? void 0 : _v.symbolType) && void 0 !== _w ? _w : "square",
42830
42898
  strokeBoundsBuffer: 0
42831
42899
  }, middleHandlerStyle.icon), {
42832
- pickable: !zoomLock && (null === (_5 = null === (_4 = middleHandlerStyle.icon) || void 0 === _4 ? void 0 : _4.pickable) || void 0 === _5 || _5)
42900
+ pickable: !zoomLock && (null === (_y = null === (_x = middleHandlerStyle.icon) || void 0 === _x ? void 0 : _x.pickable) || void 0 === _y || _y)
42833
42901
  }), "symbol");
42834
42902
  }
42835
42903
  this._startHandler = group.createOrUpdateChild("startHandler", Object.assign(Object.assign(Object.assign({
42836
42904
  x: position.x + width / 2,
42837
42905
  y: position.y + start * height,
42838
42906
  size: width,
42839
- symbolType: null !== (_6 = startHandlerStyle.symbolType) && void 0 !== _6 ? _6 : "square"
42907
+ symbolType: null !== (_z = startHandlerStyle.symbolType) && void 0 !== _z ? _z : "square"
42840
42908
  }, DEFAULT_HANDLER_ATTR_MAP.vertical), startHandlerStyle), {
42841
- pickable: !zoomLock && (null === (_7 = startHandlerStyle.pickable) || void 0 === _7 || _7)
42909
+ pickable: !zoomLock && (null === (_0 = startHandlerStyle.pickable) || void 0 === _0 || _0)
42842
42910
  }), "symbol"), this._endHandler = group.createOrUpdateChild("endHandler", Object.assign(Object.assign(Object.assign({
42843
42911
  x: position.x + width / 2,
42844
42912
  y: position.y + end * height,
42845
42913
  size: width,
42846
- symbolType: null !== (_8 = endHandlerStyle.symbolType) && void 0 !== _8 ? _8 : "square"
42914
+ symbolType: null !== (_1 = endHandlerStyle.symbolType) && void 0 !== _1 ? _1 : "square"
42847
42915
  }, DEFAULT_HANDLER_ATTR_MAP.vertical), endHandlerStyle), {
42848
- pickable: !zoomLock && (null === (_9 = endHandlerStyle.pickable) || void 0 === _9 || _9)
42916
+ pickable: !zoomLock && (null === (_2 = endHandlerStyle.pickable) || void 0 === _2 || _2)
42849
42917
  }), "symbol");
42850
42918
  const startHandlerWidth = Math.max(this._startHandler.AABBBounds.width(), startHandlerMinSize),
42851
42919
  startHandlerHeight = Math.max(this._startHandler.AABBBounds.height(), startHandlerMinSize),
@@ -42873,9 +42941,107 @@ let DataZoom$1 = class DataZoom extends AbstractComponent {
42873
42941
  pickable: !zoomLock
42874
42942
  }), "rect");
42875
42943
  }
42876
- this._showText && this.renderText();
42877
42944
  }
42878
- computeBasePoints() {
42945
+ _renderSelectedBackground() {
42946
+ var _a, _b;
42947
+ const {
42948
+ selectedBackgroundStyle = {},
42949
+ selectedBackgroundChartStyle = {},
42950
+ brushSelect: brushSelect,
42951
+ zoomLock: zoomLock
42952
+ } = this.attribute,
42953
+ {
42954
+ start: start,
42955
+ end: end
42956
+ } = this._getState(),
42957
+ {
42958
+ position: position,
42959
+ width: width,
42960
+ height: height
42961
+ } = this._getLayoutAttrFromConfig(),
42962
+ group = this._getContainer();
42963
+ this._isHorizontal ? this._selectedBackground = group.createOrUpdateChild("selectedBackground", Object.assign(Object.assign({
42964
+ x: position.x + start * width,
42965
+ y: position.y,
42966
+ width: (end - start) * width,
42967
+ height: height,
42968
+ cursor: brushSelect ? "crosshair" : "move"
42969
+ }, selectedBackgroundStyle), {
42970
+ pickable: !zoomLock && (null === (_a = selectedBackgroundChartStyle.pickable) || void 0 === _a || _a)
42971
+ }), "rect") : this._selectedBackground = group.createOrUpdateChild("selectedBackground", Object.assign(Object.assign({
42972
+ x: position.x,
42973
+ y: position.y + start * height,
42974
+ width: width,
42975
+ height: (end - start) * height,
42976
+ cursor: brushSelect ? "crosshair" : "move"
42977
+ }, selectedBackgroundStyle), {
42978
+ pickable: !zoomLock && (null === (_b = selectedBackgroundStyle.pickable) || void 0 === _b || _b)
42979
+ }), "rect");
42980
+ }
42981
+ _setPreviewAttributes(type, group) {
42982
+ this._previewGroup || (this._previewGroup = group.createOrUpdateChild("previewGroup", {
42983
+ pickable: !1
42984
+ }, "group")), "line" === type ? this._previewLine = this._previewGroup.createOrUpdateChild("previewLine", {}, "line") : this._previewArea = this._previewGroup.createOrUpdateChild("previewArea", {
42985
+ curveType: "basis"
42986
+ }, "area");
42987
+ const {
42988
+ backgroundChartStyle = {}
42989
+ } = this.attribute;
42990
+ "line" === type && this._previewLine.setAttributes(Object.assign({
42991
+ points: this._getPreviewLinePoints(),
42992
+ curveType: "basis",
42993
+ pickable: !1
42994
+ }, backgroundChartStyle.line)), "area" === type && this._previewArea.setAttributes(Object.assign({
42995
+ points: this._getPreviewAreaPoints(),
42996
+ curveType: "basis",
42997
+ pickable: !1
42998
+ }, backgroundChartStyle.area));
42999
+ }
43000
+ _setSelectedPreviewClipAttributes(type, group) {
43001
+ this._selectedPreviewGroupClip || (this._selectedPreviewGroupClip = group.createOrUpdateChild("selectedPreviewGroupClip", {
43002
+ pickable: !1
43003
+ }, "group"), this._selectedPreviewGroup = this._selectedPreviewGroupClip.createOrUpdateChild("selectedPreviewGroup", {}, "group"));
43004
+ const {
43005
+ start: start,
43006
+ end: end
43007
+ } = this._getState(),
43008
+ {
43009
+ position: position,
43010
+ width: width,
43011
+ height: height
43012
+ } = this._getLayoutAttrFromConfig();
43013
+ this._selectedPreviewGroupClip.setAttributes({
43014
+ x: this._isHorizontal ? position.x + start * width : position.x,
43015
+ y: this._isHorizontal ? position.y : position.y + start * height,
43016
+ width: this._isHorizontal ? (end - start) * width : width,
43017
+ height: this._isHorizontal ? height : (end - start) * height,
43018
+ clip: !0,
43019
+ pickable: !1
43020
+ }), this._selectedPreviewGroup.setAttributes({
43021
+ x: -(this._isHorizontal ? position.x + start * width : position.x),
43022
+ y: -(this._isHorizontal ? position.y : position.y + start * height),
43023
+ width: this._isHorizontal ? (end - start) * width : width,
43024
+ height: this._isHorizontal ? height : (end - start) * height,
43025
+ pickable: !1
43026
+ });
43027
+ }
43028
+ _setSelectedPreviewAttributes(type) {
43029
+ const {
43030
+ selectedBackgroundChartStyle = {}
43031
+ } = this.attribute;
43032
+ "line" === type ? this._selectedPreviewLine = this._selectedPreviewGroup.createOrUpdateChild("selectedPreviewLine", {}, "line") : this._selectedPreviewArea = this._selectedPreviewGroup.createOrUpdateChild("selectedPreviewArea", {
43033
+ curveType: "basis"
43034
+ }, "area"), "line" === type && this._selectedPreviewLine.setAttributes(Object.assign({
43035
+ points: this._getPreviewLinePoints(),
43036
+ curveType: "basis",
43037
+ pickable: !1
43038
+ }, selectedBackgroundChartStyle.line)), "area" === type && this._selectedPreviewArea.setAttributes(Object.assign({
43039
+ points: this._getPreviewAreaPoints(),
43040
+ curveType: "basis",
43041
+ pickable: !1
43042
+ }, selectedBackgroundChartStyle.area));
43043
+ }
43044
+ _computeBasePoints() {
42879
43045
  const {
42880
43046
  orient: orient
42881
43047
  } = this.attribute,
@@ -42883,7 +43049,7 @@ let DataZoom$1 = class DataZoom extends AbstractComponent {
42883
43049
  position: position,
42884
43050
  width: width,
42885
43051
  height: height
42886
- } = this.getLayoutAttrFromConfig();
43052
+ } = this._getLayoutAttrFromConfig();
42887
43053
  let basePointStart, basePointEnd;
42888
43054
  return this._isHorizontal ? (basePointStart = [{
42889
43055
  x: position.x,
@@ -42908,7 +43074,7 @@ let DataZoom$1 = class DataZoom extends AbstractComponent {
42908
43074
  basePointEnd: basePointEnd
42909
43075
  };
42910
43076
  }
42911
- simplifyPoints(points) {
43077
+ _simplifyPoints(points) {
42912
43078
  var _a;
42913
43079
  if (points.length > 1e4) {
42914
43080
  const tolerance = null !== (_a = this.attribute.tolerance) && void 0 !== _a ? _a : this._previewData.length / 1e4;
@@ -42916,20 +43082,20 @@ let DataZoom$1 = class DataZoom extends AbstractComponent {
42916
43082
  }
42917
43083
  return points;
42918
43084
  }
42919
- getPreviewLinePoints() {
43085
+ _getPreviewLinePoints() {
42920
43086
  let previewPoints = this._previewData.map(d => ({
42921
43087
  x: this._previewPointsX && this._previewPointsX(d),
42922
43088
  y: this._previewPointsY && this._previewPointsY(d)
42923
43089
  }));
42924
43090
  if (0 === previewPoints.length) return previewPoints;
42925
- previewPoints = this.simplifyPoints(previewPoints);
43091
+ previewPoints = this._simplifyPoints(previewPoints);
42926
43092
  const {
42927
43093
  basePointStart: basePointStart,
42928
43094
  basePointEnd: basePointEnd
42929
- } = this.computeBasePoints();
43095
+ } = this._computeBasePoints();
42930
43096
  return basePointStart.concat(previewPoints).concat(basePointEnd);
42931
43097
  }
42932
- getPreviewAreaPoints() {
43098
+ _getPreviewAreaPoints() {
42933
43099
  let previewPoints = this._previewData.map(d => ({
42934
43100
  x: this._previewPointsX && this._previewPointsX(d),
42935
43101
  y: this._previewPointsY && this._previewPointsY(d),
@@ -42937,99 +43103,459 @@ let DataZoom$1 = class DataZoom extends AbstractComponent {
42937
43103
  y1: this._previewPointsY1 && this._previewPointsY1(d)
42938
43104
  }));
42939
43105
  if (0 === previewPoints.length) return previewPoints;
42940
- previewPoints = this.simplifyPoints(previewPoints);
43106
+ previewPoints = this._simplifyPoints(previewPoints);
42941
43107
  const {
42942
43108
  basePointStart: basePointStart,
42943
43109
  basePointEnd: basePointEnd
42944
- } = this.computeBasePoints();
43110
+ } = this._computeBasePoints();
42945
43111
  return basePointStart.concat(previewPoints).concat(basePointEnd);
42946
43112
  }
42947
- setPreviewAttributes(type, group) {
42948
- this._previewGroup || (this._previewGroup = group.createOrUpdateChild("previewGroup", {
42949
- pickable: !1
42950
- }, "group")), "line" === type ? this._previewLine = this._previewGroup.createOrUpdateChild("previewLine", {}, "line") : this._previewArea = this._previewGroup.createOrUpdateChild("previewArea", {
42951
- curveType: "basis"
42952
- }, "area");
42953
- const {
42954
- backgroundChartStyle = {}
42955
- } = this.attribute;
42956
- "line" === type && this._previewLine.setAttributes(Object.assign({
42957
- points: this.getPreviewLinePoints(),
42958
- curveType: "basis",
42959
- pickable: !1
42960
- }, backgroundChartStyle.line)), "area" === type && this._previewArea.setAttributes(Object.assign({
42961
- points: this.getPreviewAreaPoints(),
42962
- curveType: "basis",
42963
- pickable: !1
42964
- }, backgroundChartStyle.area));
43113
+ renderText() {
43114
+ let startTextBounds = null,
43115
+ endTextBounds = null;
43116
+ if (this._setTextAttr(startTextBounds, endTextBounds), this._showText) {
43117
+ startTextBounds = this._startText.AABBBounds, endTextBounds = this._endText.AABBBounds, this._setTextAttr(startTextBounds, endTextBounds), startTextBounds = this._startText.AABBBounds, endTextBounds = this._endText.AABBBounds;
43118
+ const {
43119
+ x1: x1,
43120
+ x2: x2,
43121
+ y1: y1,
43122
+ y2: y2
43123
+ } = startTextBounds,
43124
+ {
43125
+ dx: startTextDx = 0,
43126
+ dy: startTextDy = 0
43127
+ } = this.attribute.startTextStyle;
43128
+ if (new Bounds().set(x1, y1, x2, y2).intersects(endTextBounds)) {
43129
+ const direction = "bottom" === this.attribute.orient || "right" === this.attribute.orient ? -1 : 1;
43130
+ this._isHorizontal ? this._startText.setAttribute("dy", startTextDy + direction * Math.abs(endTextBounds.y1 - endTextBounds.y2)) : this._startText.setAttribute("dx", startTextDx + direction * Math.abs(endTextBounds.x1 - endTextBounds.x2));
43131
+ } else this._isHorizontal ? this._startText.setAttribute("dy", startTextDy) : this._startText.setAttribute("dx", startTextDx);
43132
+ }
42965
43133
  }
42966
- setSelectedPreviewAttributes(type, group) {
42967
- this._selectedPreviewGroupClip || (this._selectedPreviewGroupClip = group.createOrUpdateChild("selectedPreviewGroupClip", {
42968
- pickable: !1
42969
- }, "group"), this._selectedPreviewGroup = this._selectedPreviewGroupClip.createOrUpdateChild("selectedPreviewGroup", {}, "group")), "line" === type ? this._selectedPreviewLine = this._selectedPreviewGroup.createOrUpdateChild("selectedPreviewLine", {}, "line") : this._selectedPreviewArea = this._selectedPreviewGroup.createOrUpdateChild("selectedPreviewArea", {
42970
- curveType: "basis"
42971
- }, "area");
43134
+ _setTextAttr(startTextBounds, endTextBounds) {
43135
+ var _a, _b, _c, _d, _e, _f, _g, _h;
42972
43136
  const {
42973
- selectedBackgroundChartStyle = {}
43137
+ startTextStyle: startTextStyle,
43138
+ endTextStyle: endTextStyle
42974
43139
  } = this.attribute,
43140
+ {
43141
+ formatMethod: startTextFormat
43142
+ } = startTextStyle,
43143
+ restStartTextStyle = __rest$1(startTextStyle, ["formatMethod"]),
43144
+ {
43145
+ formatMethod: endTextFormat
43146
+ } = endTextStyle,
43147
+ restEndTextStyle = __rest$1(endTextStyle, ["formatMethod"]),
42975
43148
  {
42976
43149
  start: start,
42977
43150
  end: end
42978
- } = this.state,
42979
- {
43151
+ } = this._getState();
43152
+ this._startValue = this._statePointToData(start), this._endValue = this._statePointToData(end);
43153
+ const {
42980
43154
  position: position,
42981
43155
  width: width,
42982
43156
  height: height
42983
- } = this.getLayoutAttrFromConfig();
42984
- this._selectedPreviewGroupClip.setAttributes({
42985
- x: this._isHorizontal ? position.x + start * width : position.x,
42986
- y: this._isHorizontal ? position.y : position.y + start * height,
42987
- width: this._isHorizontal ? (end - start) * width : width,
42988
- height: this._isHorizontal ? height : (end - start) * height,
42989
- clip: !0,
42990
- pickable: !1
42991
- }), this._selectedPreviewGroup.setAttributes({
42992
- x: -(this._isHorizontal ? position.x + start * width : position.x),
42993
- y: -(this._isHorizontal ? position.y : position.y + start * height),
42994
- width: this._isHorizontal ? (end - start) * width : width,
42995
- height: this._isHorizontal ? height : (end - start) * height,
42996
- pickable: !1
42997
- }), "line" === type && this._selectedPreviewLine.setAttributes(Object.assign({
42998
- points: this.getPreviewLinePoints(),
42999
- curveType: "basis",
43000
- pickable: !1
43001
- }, selectedBackgroundChartStyle.line)), "area" === type && this._selectedPreviewArea.setAttributes(Object.assign({
43002
- points: this.getPreviewAreaPoints(),
43003
- curveType: "basis",
43004
- pickable: !1
43005
- }, selectedBackgroundChartStyle.area));
43157
+ } = this._getLayoutAttrFromConfig(),
43158
+ startTextValue = startTextFormat ? startTextFormat(this._startValue) : this._startValue,
43159
+ endTextValue = endTextFormat ? endTextFormat(this._endValue) : this._endValue,
43160
+ componentBoundsLike = {
43161
+ x1: position.x,
43162
+ y1: position.y,
43163
+ x2: position.x + width,
43164
+ y2: position.y + height
43165
+ };
43166
+ let startTextPosition, endTextPosition, startTextAlignStyle, endTextAlignStyle;
43167
+ this._isHorizontal ? (startTextPosition = {
43168
+ x: position.x + start * width,
43169
+ y: position.y + height / 2
43170
+ }, endTextPosition = {
43171
+ x: position.x + end * width,
43172
+ y: position.y + height / 2
43173
+ }, startTextAlignStyle = {
43174
+ textAlign: isTextOverflow(componentBoundsLike, startTextBounds, "start", this._isHorizontal) ? "left" : "right",
43175
+ textBaseline: null !== (_b = null === (_a = null == restStartTextStyle ? void 0 : restStartTextStyle.textStyle) || void 0 === _a ? void 0 : _a.textBaseline) && void 0 !== _b ? _b : "middle"
43176
+ }, endTextAlignStyle = {
43177
+ textAlign: isTextOverflow(componentBoundsLike, endTextBounds, "end", this._isHorizontal) ? "right" : "left",
43178
+ textBaseline: null !== (_d = null === (_c = null == restEndTextStyle ? void 0 : restEndTextStyle.textStyle) || void 0 === _c ? void 0 : _c.textBaseline) && void 0 !== _d ? _d : "middle"
43179
+ }) : (startTextPosition = {
43180
+ x: position.x + width / 2,
43181
+ y: position.y + start * height
43182
+ }, endTextPosition = {
43183
+ x: position.x + width / 2,
43184
+ y: position.y + end * height
43185
+ }, startTextAlignStyle = {
43186
+ textAlign: null !== (_f = null === (_e = null == restStartTextStyle ? void 0 : restStartTextStyle.textStyle) || void 0 === _e ? void 0 : _e.textAlign) && void 0 !== _f ? _f : "center",
43187
+ textBaseline: isTextOverflow(componentBoundsLike, startTextBounds, "start", this._isHorizontal) ? "top" : "bottom"
43188
+ }, endTextAlignStyle = {
43189
+ textAlign: null !== (_h = null === (_g = null == restEndTextStyle ? void 0 : restEndTextStyle.textStyle) || void 0 === _g ? void 0 : _g.textAlign) && void 0 !== _h ? _h : "center",
43190
+ textBaseline: isTextOverflow(componentBoundsLike, endTextBounds, "end", this._isHorizontal) ? "bottom" : "top"
43191
+ }), this._startText = this._maybeAddLabel(this._getContainer(), merge$1({}, restStartTextStyle, {
43192
+ text: startTextValue,
43193
+ x: startTextPosition.x,
43194
+ y: startTextPosition.y,
43195
+ visible: this._showText,
43196
+ pickable: !1,
43197
+ childrenPickable: !1,
43198
+ textStyle: startTextAlignStyle
43199
+ }), "data-zoom-start-text"), this._endText = this._maybeAddLabel(this._getContainer(), merge$1({}, restEndTextStyle, {
43200
+ text: endTextValue,
43201
+ x: endTextPosition.x,
43202
+ y: endTextPosition.y,
43203
+ visible: this._showText,
43204
+ pickable: !1,
43205
+ childrenPickable: !1,
43206
+ textStyle: endTextAlignStyle
43207
+ }), "data-zoom-end-text");
43006
43208
  }
43007
- maybeAddLabel(container, attributes, name) {
43008
- let labelShape = this.find(node => node.name === name, !0);
43009
- return labelShape ? labelShape.setAttributes(attributes) : (labelShape = new Tag(attributes), labelShape.name = name), container.add(labelShape), labelShape;
43209
+ _maybeAddLabel(container, attributes, name) {
43210
+ let labelShape = container.find(node => node.name === name, !0);
43211
+ return labelShape ? labelShape.setAttributes(attributes) : (labelShape = new Tag(attributes), labelShape.name = name, container.add(labelShape)), labelShape;
43010
43212
  }
43011
- setStartAndEnd(start, end) {
43213
+ }
43214
+
43215
+ const delayMap$2 = {
43216
+ debounce: debounce,
43217
+ throttle: throttle
43218
+ };
43219
+ class DataZoomInteraction extends EventEmitter {
43220
+ constructor(props) {
43221
+ super(), this._activeState = !1, this._activeCache = {
43222
+ startPos: {
43223
+ x: 0,
43224
+ y: 0
43225
+ },
43226
+ lastPos: {
43227
+ x: 0,
43228
+ y: 0
43229
+ }
43230
+ }, this._layoutCache = {
43231
+ attPos: "x",
43232
+ attSize: "width",
43233
+ size: 0
43234
+ }, this._handleTouchMove = e => {
43235
+ this._activeState && e.preventDefault();
43236
+ }, this._onHandlerPointerDown = (e, tag) => {
43237
+ this.clearDragEvents(), "start" === tag ? (this._activeTag = DataZoomActiveTag.startHandler, this._activeItem = this._startHandlerMask) : "end" === tag ? (this._activeTag = DataZoomActiveTag.endHandler, this._activeItem = this._endHandlerMask) : "middleRect" === tag ? (this._activeTag = DataZoomActiveTag.middleHandler, this._activeItem = this._middleHandlerRect) : "middleSymbol" === tag ? (this._activeTag = DataZoomActiveTag.middleHandler, this._activeItem = this._middleHandlerSymbol) : "background" === tag && (this._activeTag = DataZoomActiveTag.background, this._activeItem = this._background), this._activeState = !0, this._activeCache.startPos = this._eventPosToStagePos(e), this._activeCache.lastPos = this._eventPosToStagePos(e);
43238
+ const evtTarget = "browser" === vglobal.env ? vglobal : this.stage,
43239
+ triggers = getEndTriggersOfDrag();
43240
+ evtTarget.addEventListener("pointermove", this._onHandlerPointerMove, {
43241
+ capture: !0
43242
+ }), this.on("pointermove", this._onHandlerPointerMove, {
43243
+ capture: !0
43244
+ }), triggers.forEach(trigger => {
43245
+ evtTarget.addEventListener(trigger, this._onHandlerPointerUp);
43246
+ });
43247
+ }, this._pointerMove = e => {
43248
+ const {
43249
+ brushSelect: brushSelect
43250
+ } = this.attribute,
43251
+ {
43252
+ position: position
43253
+ } = this._getLayoutAttrFromConfig(),
43254
+ pos = this._eventPosToStagePos(e),
43255
+ {
43256
+ attPos: attPos,
43257
+ size: size,
43258
+ attSize: attSize
43259
+ } = this._layoutCache,
43260
+ dis = (pos[attPos] - this._activeCache.lastPos[attPos]) / size,
43261
+ statePos = (pos[attPos] - position[attPos]) / this._getLayoutAttrFromConfig()[attSize];
43262
+ let {
43263
+ start: start,
43264
+ end: end
43265
+ } = this._getState(),
43266
+ shouldRender = !0;
43267
+ this._activeState && (this._activeTag === DataZoomActiveTag.middleHandler ? ({
43268
+ start: start,
43269
+ end: end
43270
+ } = this._moveZoomWithMiddle(dis)) : this._activeTag === DataZoomActiveTag.startHandler ? ({
43271
+ start: start,
43272
+ end: end
43273
+ } = this._moveZoomWithHandler(statePos, "start")) : this._activeTag === DataZoomActiveTag.endHandler ? ({
43274
+ start: start,
43275
+ end: end
43276
+ } = this._moveZoomWithHandler(statePos, "end")) : this._activeTag === DataZoomActiveTag.background && brushSelect && (({
43277
+ start: start,
43278
+ end: end
43279
+ } = this._moveZoomWithBackground(statePos)), shouldRender = !1, this._dispatchEvent(IDataZoomInteractiveEvent.maskUpdate)), this._activeCache.lastPos = pos), this._getState().start === start && this._getState().end === end || (this._setStateAttr(start, end), this._dispatchEvent(IDataZoomInteractiveEvent.stateUpdate, {
43280
+ start: this._getState().start,
43281
+ end: this._getState().end,
43282
+ shouldRender: shouldRender,
43283
+ tag: this._activeTag
43284
+ }), this.attribute.realTime && this._dispatchEvent(IDataZoomInteractiveEvent.dataZoomUpdate, {
43285
+ start: this._getState().start,
43286
+ end: this._getState().end,
43287
+ shouldRender: !0,
43288
+ tag: this._activeTag
43289
+ }));
43290
+ }, this._onHandlerPointerUp = e => {
43291
+ this._activeState && this._activeTag === DataZoomActiveTag.background && (this._setStateAttr(this._getState().start, this._getState().end), this._dispatchEvent(IDataZoomInteractiveEvent.stateUpdate, {
43292
+ start: this._getState().start,
43293
+ end: this._getState().end,
43294
+ shouldRender: !0,
43295
+ tag: this._activeTag
43296
+ })), this._activeState = !1, this._dispatchEvent(IDataZoomInteractiveEvent.dataZoomUpdate, {
43297
+ start: this._getState().start,
43298
+ end: this._getState().end,
43299
+ shouldRender: !0,
43300
+ tag: this._activeTag
43301
+ }), this.clearDragEvents();
43302
+ }, this._initAttrs(props);
43303
+ }
43304
+ setAttributes(props) {
43305
+ var _a, _b, _c, _d, _e, _f;
43306
+ this._initAttrs(props), this._onHandlerPointerMove = 0 === (null !== (_b = null === (_a = this.attribute) || void 0 === _a ? void 0 : _a.delayTime) && void 0 !== _b ? _b : 0) ? this._pointerMove : delayMap$2[null !== (_d = null === (_c = this.attribute) || void 0 === _c ? void 0 : _c.delayType) && void 0 !== _d ? _d : "debounce"](this._pointerMove, null !== (_f = null === (_e = this.attribute) || void 0 === _e ? void 0 : _e.delayTime) && void 0 !== _f ? _f : 0);
43307
+ }
43308
+ _initAttrs(props) {
43309
+ this.stage = props.stage, this.attribute = props.attribute, this._startHandlerMask = props.startHandlerMask, this._endHandlerMask = props.endHandlerMask, this._middleHandlerSymbol = props.middleHandlerSymbol, this._middleHandlerRect = props.middleHandlerRect, this._selectedBackground = props.selectedBackground, this._background = props.background, this._previewGroup = props.previewGroup, this._selectedPreviewGroup = props.selectedPreviewGroup, this._getLayoutAttrFromConfig = props.getLayoutAttrFromConfig, this._getState = props.getState, this._setState = props.setState;
43012
43310
  const {
43013
- start: startAttr,
43014
- end: endAttr
43311
+ width: width,
43312
+ height: height
43313
+ } = this._getLayoutAttrFromConfig();
43314
+ this._spanCache = this._getState().end - this._getState().start;
43315
+ const isHorizontal = "top" === this.attribute.orient || "bottom" === this.attribute.orient;
43316
+ this._layoutCache.size = isHorizontal ? width : height, this._layoutCache.attPos = isHorizontal ? "x" : "y", this._layoutCache.attSize = isHorizontal ? "width" : "height", this._getGlobalTransMatrix = props.getGlobalTransMatrix;
43317
+ }
43318
+ clearDragEvents() {
43319
+ const evtTarget = "browser" === vglobal.env ? vglobal : this.stage,
43320
+ triggers = getEndTriggersOfDrag();
43321
+ evtTarget.removeEventListener("pointermove", this._onHandlerPointerMove, {
43322
+ capture: !0
43323
+ }), triggers.forEach(trigger => {
43324
+ evtTarget.removeEventListener(trigger, this._onHandlerPointerUp);
43325
+ }), this.off("pointermove", this._onHandlerPointerMove, {
43326
+ capture: !0
43327
+ });
43328
+ }
43329
+ clearVGlobalEvents() {
43330
+ ("browser" === vglobal.env ? vglobal : this.stage).addEventListener("touchmove", this._handleTouchMove, {
43331
+ passive: !1
43332
+ });
43333
+ }
43334
+ bindEvents() {
43335
+ var _a, _b, _c, _d, _e, _f, _g, _h;
43336
+ const {
43337
+ brushSelect: brushSelect
43015
43338
  } = this.attribute;
43016
- isValid$1(start) && isValid$1(end) && (start !== this.state.start || end !== this.state.end) && (this.state.start = start, this.state.end = end, startAttr === this.state.start && endAttr === this.state.end || (this.setStateAttr(start, end, !0), this._dispatchEvent("change", {
43339
+ null === (_a = this._startHandlerMask) || void 0 === _a || _a.addEventListener("pointerdown", e => this._onHandlerPointerDown(e, "start")), null === (_b = this._endHandlerMask) || void 0 === _b || _b.addEventListener("pointerdown", e => this._onHandlerPointerDown(e, "end")), null === (_c = this._middleHandlerSymbol) || void 0 === _c || _c.addEventListener("pointerdown", e => this._onHandlerPointerDown(e, "middleSymbol")), null === (_d = this._middleHandlerRect) || void 0 === _d || _d.addEventListener("pointerdown", e => this._onHandlerPointerDown(e, "middleRect"));
43340
+ const selectedTag = brushSelect ? "background" : "middleRect";
43341
+ null === (_e = this._selectedBackground) || void 0 === _e || _e.addEventListener("pointerdown", e => this._onHandlerPointerDown(e, selectedTag)), brushSelect && (null === (_f = this._background) || void 0 === _f || _f.addEventListener("pointerdown", e => this._onHandlerPointerDown(e, "background"))), brushSelect && (null === (_g = this._previewGroup) || void 0 === _g || _g.addEventListener("pointerdown", e => this._onHandlerPointerDown(e, "background"))), null === (_h = this._selectedPreviewGroup) || void 0 === _h || _h.addEventListener("pointerdown", e => this._onHandlerPointerDown(e, selectedTag)), ("browser" === vglobal.env ? vglobal : this.stage).addEventListener("touchmove", this._handleTouchMove, {
43342
+ passive: !1
43343
+ });
43344
+ }
43345
+ _setStateAttr(start, end) {
43346
+ const {
43347
+ zoomLock = !1,
43348
+ minSpan = 0,
43349
+ maxSpan = 1
43350
+ } = this.attribute,
43351
+ span = end - start;
43352
+ span !== this._spanCache && (zoomLock || span < minSpan || span > maxSpan) || (this._spanCache = span, this._setState({
43353
+ start: start,
43354
+ end: end
43355
+ }));
43356
+ }
43357
+ _moveZoomWithMiddle(dis) {
43358
+ const {
43359
+ start: staetState,
43360
+ end: endState
43361
+ } = this._getState();
43362
+ return dis > 0 && endState + dis > 1 ? dis = 1 - endState : dis < 0 && staetState + dis < 0 && (dis = -staetState), {
43363
+ start: clamp$1(staetState + dis, 0, 1),
43364
+ end: clamp$1(endState + dis, 0, 1)
43365
+ };
43366
+ }
43367
+ _moveZoomWithHandler(statePos, handler) {
43368
+ const {
43369
+ start: start,
43370
+ end: end
43371
+ } = this._getState();
43372
+ let newStart = start,
43373
+ newEnd = end;
43374
+ return "start" === handler ? statePos > end ? (newStart = end, newEnd = statePos, this._activeTag = DataZoomActiveTag.endHandler) : newStart = statePos : "end" === handler && (statePos < start ? (newEnd = start, newStart = statePos, this._activeTag = DataZoomActiveTag.startHandler) : newEnd = statePos), {
43375
+ start: clamp$1(newStart, 0, 1),
43376
+ end: clamp$1(newEnd, 0, 1)
43377
+ };
43378
+ }
43379
+ _moveZoomWithBackground(statePos) {
43380
+ const {
43381
+ position: position
43382
+ } = this._getLayoutAttrFromConfig(),
43383
+ {
43384
+ attSize: attSize
43385
+ } = this._layoutCache,
43386
+ startPos = (this._activeCache.startPos[this._layoutCache.attPos] - position[this._layoutCache.attPos]) / this._getLayoutAttrFromConfig()[attSize],
43387
+ endPos = statePos;
43388
+ let start = clamp$1(startPos, 0, 1),
43389
+ end = clamp$1(endPos, 0, 1);
43390
+ return start > end && ([start, end] = [end, start]), {
43391
+ start: start,
43392
+ end: end
43393
+ };
43394
+ }
43395
+ _eventPosToStagePos(e) {
43396
+ var _a, _b;
43397
+ const result = {
43398
+ x: 0,
43399
+ y: 0
43400
+ },
43401
+ stagePoints = null !== (_b = null === (_a = this.stage) || void 0 === _a ? void 0 : _a.eventPointTransform(e)) && void 0 !== _b ? _b : {
43402
+ x: 0,
43403
+ y: 0
43404
+ };
43405
+ return this._getGlobalTransMatrix().transformPoint(stagePoints, result), result;
43406
+ }
43407
+ _dispatchEvent(eventName, details) {
43408
+ this.emit(eventName, details);
43409
+ }
43410
+ }
43411
+
43412
+ function loadDataZoomComponent() {
43413
+ loadTagComponent(), registerRect(), registerSymbol(), registerArea(), registerLine();
43414
+ }
43415
+
43416
+ loadDataZoomComponent();
43417
+ let DataZoom$1 = class DataZoom extends AbstractComponent {
43418
+ constructor(attributes, options) {
43419
+ super((null == options ? void 0 : options.skipDefault) ? attributes : merge$1({}, DataZoom.defaultAttributes, attributes)), this.name = "dataZoom", this._state = {
43420
+ start: 0,
43421
+ end: 1
43422
+ }, this.getLayoutAttrFromConfig = () => {
43423
+ var _a, _b, _c, _d, _e, _f;
43424
+ if (this._layoutCacheFromConfig) return this._layoutCacheFromConfig;
43425
+ const {
43426
+ position: positionConfig,
43427
+ size: size,
43428
+ orient: orient,
43429
+ middleHandlerStyle = {},
43430
+ startHandlerStyle = {},
43431
+ endHandlerStyle = {},
43432
+ backgroundStyle = {}
43433
+ } = this.attribute,
43434
+ {
43435
+ width: widthConfig,
43436
+ height: heightConfig
43437
+ } = size,
43438
+ middleHandlerSize = null !== (_b = null === (_a = middleHandlerStyle.background) || void 0 === _a ? void 0 : _a.size) && void 0 !== _b ? _b : 10;
43439
+ let width, height, position;
43440
+ middleHandlerStyle.visible ? this._isHorizontal ? (width = widthConfig, height = heightConfig - middleHandlerSize, position = {
43441
+ x: positionConfig.x,
43442
+ y: positionConfig.y + middleHandlerSize
43443
+ }) : (width = widthConfig - middleHandlerSize, height = heightConfig, position = {
43444
+ x: positionConfig.x + ("left" === orient ? middleHandlerSize : 0),
43445
+ y: positionConfig.y
43446
+ }) : (width = widthConfig, height = heightConfig, position = positionConfig);
43447
+ const startHandlerSize = null !== (_c = startHandlerStyle.size) && void 0 !== _c ? _c : this._isHorizontal ? height : width,
43448
+ endHandlerSize = null !== (_d = endHandlerStyle.size) && void 0 !== _d ? _d : this._isHorizontal ? height : width;
43449
+ return startHandlerStyle.visible && (this._isHorizontal ? (width -= (startHandlerSize + endHandlerSize) / 2, position = {
43450
+ x: position.x + startHandlerSize / 2,
43451
+ y: position.y
43452
+ }) : (height -= (startHandlerSize + endHandlerSize) / 2, position = {
43453
+ x: position.x,
43454
+ y: position.y + startHandlerSize / 2
43455
+ })), height += (null !== (_e = backgroundStyle.lineWidth) && void 0 !== _e ? _e : 2) / 2, width += (null !== (_f = backgroundStyle.lineWidth) && void 0 !== _f ? _f : 2) / 2, this._layoutCacheFromConfig = {
43456
+ position: position,
43457
+ width: width,
43458
+ height: height
43459
+ }, this._layoutCacheFromConfig;
43460
+ };
43461
+ const {
43017
43462
  start: start,
43018
43463
  end: end,
43019
- tag: this._activeTag
43464
+ orient: orient
43465
+ } = this.attribute;
43466
+ this._isHorizontal = "top" === orient || "bottom" === orient, start && (this._state.start = start), end && (this._state.end = end), this._renderer = new DataZoomRenderer(this._getRendererAttrs()), this._interaction = new DataZoomInteraction(this._getInteractionAttrs());
43467
+ }
43468
+ _getRendererAttrs() {
43469
+ return {
43470
+ attribute: this.attribute,
43471
+ getLayoutAttrFromConfig: this.getLayoutAttrFromConfig,
43472
+ setState: state => {
43473
+ this._state = state;
43474
+ },
43475
+ getState: () => this._state,
43476
+ getContainer: () => this._container
43477
+ };
43478
+ }
43479
+ _getInteractionAttrs() {
43480
+ return {
43481
+ stage: this.stage,
43482
+ attribute: this.attribute,
43483
+ startHandlerMask: this._renderer.startHandlerMask,
43484
+ endHandlerMask: this._renderer.endHandlerMask,
43485
+ middleHandlerSymbol: this._renderer.middleHandlerSymbol,
43486
+ middleHandlerRect: this._renderer.middleHandlerRect,
43487
+ selectedBackground: this._renderer.selectedBackground,
43488
+ background: this._renderer.background,
43489
+ previewGroup: this._renderer.previewGroup,
43490
+ selectedPreviewGroup: this._renderer.selectedPreviewGroup,
43491
+ getLayoutAttrFromConfig: this.getLayoutAttrFromConfig,
43492
+ setState: state => {
43493
+ this._state = state;
43494
+ },
43495
+ getState: () => this._state,
43496
+ getGlobalTransMatrix: () => this.globalTransMatrix
43497
+ };
43498
+ }
43499
+ bindEvents() {
43500
+ this.attribute.disableTriggerEvent ? this.setAttribute("childrenPickable", !1) : (this._interaction.bindEvents(), this._interaction.on(IDataZoomInteractiveEvent.stateUpdate, ({
43501
+ shouldRender: shouldRender
43502
+ }) => {
43503
+ shouldRender && this._renderer.renderDataZoom(!0);
43504
+ }), this._interaction.on(IDataZoomInteractiveEvent.dataZoomUpdate, ({
43505
+ start: start,
43506
+ end: end,
43507
+ tag: tag
43508
+ }) => {
43509
+ this._dispatchEvent(IDataZoomEvent.dataZoomChange, {
43510
+ start: start,
43511
+ end: end,
43512
+ tag: tag
43513
+ });
43514
+ }), this._interaction.on(IDataZoomInteractiveEvent.maskUpdate, () => {
43515
+ this._renderer.renderDragMask();
43516
+ }), "auto" === this.attribute.showDetail && (this._container.addEventListener("pointerenter", () => {
43517
+ this._renderer.showText = !0, this._renderer.renderText();
43518
+ }), this._container.addEventListener("pointerleave", () => {
43519
+ this._renderer.showText = !1, this._renderer.renderText();
43020
43520
  })));
43021
43521
  }
43522
+ setAttributes(params, forceUpdateTag) {
43523
+ const {
43524
+ start: start,
43525
+ end: end
43526
+ } = this.attribute;
43527
+ start && (this._state.start = start), end && (this._state.end = end), this._renderer.setAttributes(this._getRendererAttrs()), this._interaction.setAttributes(this._getInteractionAttrs()), super.setAttributes(params, forceUpdateTag);
43528
+ }
43529
+ render() {
43530
+ this._layoutCacheFromConfig = null, this._container = this.createOrUpdateChild("datazoom-container", {}, "group"), this._renderer.renderDataZoom(), this._interaction.setAttributes(this._getInteractionAttrs());
43531
+ }
43532
+ release(all) {
43533
+ super.release(all), this._interaction.clearDragEvents();
43534
+ }
43535
+ setStartAndEnd(start, end) {
43536
+ const {
43537
+ start: startState,
43538
+ end: endState
43539
+ } = this._state;
43540
+ isValid$1(start) && isValid$1(end) && (start !== startState || end !== endState) && (this._state = {
43541
+ start: start,
43542
+ end: end
43543
+ }, this._renderer.renderDataZoom(!0), this._dispatchEvent(IDataZoomEvent.dataZoomChange, {
43544
+ start: start,
43545
+ end: end
43546
+ }));
43547
+ }
43022
43548
  setPreviewData(data) {
43023
- this._previewData = data;
43549
+ this._renderer.previewData = data;
43024
43550
  }
43025
43551
  setText(text, tag) {
43026
- "start" === tag ? this._startText.setAttribute("text", text) : this._endText.setAttribute("text", text);
43552
+ "start" === tag ? this._renderer.startText.setAttribute("text", text) : this._renderer.endText.setAttribute("text", text);
43027
43553
  }
43028
43554
  getStartValue() {
43029
- return this._startValue;
43555
+ return this._renderer.startValue;
43030
43556
  }
43031
43557
  getEndTextValue() {
43032
- return this._endValue;
43558
+ return this._renderer.endValue;
43033
43559
  }
43034
43560
  getMiddleHandlerSize() {
43035
43561
  var _a, _b, _c, _d;
@@ -43041,24 +43567,19 @@ let DataZoom$1 = class DataZoom extends AbstractComponent {
43041
43567
  return Math.max(middleHandlerRectSize, ...array(middleHandlerSymbolSize));
43042
43568
  }
43043
43569
  setPreviewPointsX(callback) {
43044
- isFunction$1(callback) && (this._previewPointsX = callback);
43570
+ isFunction$1(callback) && (this._renderer.previewPointsX = callback);
43045
43571
  }
43046
43572
  setPreviewPointsY(callback) {
43047
- isFunction$1(callback) && (this._previewPointsY = callback);
43573
+ isFunction$1(callback) && (this._renderer.previewPointsY = callback);
43048
43574
  }
43049
43575
  setPreviewPointsX1(callback) {
43050
- isFunction$1(callback) && (this._previewPointsX1 = callback);
43576
+ isFunction$1(callback) && (this._renderer.previewPointsX1 = callback);
43051
43577
  }
43052
43578
  setPreviewPointsY1(callback) {
43053
- isFunction$1(callback) && (this._previewPointsY1 = callback);
43579
+ isFunction$1(callback) && (this._renderer.previewPointsY1 = callback);
43054
43580
  }
43055
43581
  setStatePointToData(callback) {
43056
- isFunction$1(callback) && (this._statePointToData = callback);
43057
- }
43058
- release(all) {
43059
- super.release(all), ("browser" === vglobal.env ? vglobal : this.stage).addEventListener("touchmove", this._handleTouchMove, {
43060
- passive: !1
43061
- }), this._clearDragEvents();
43582
+ isFunction$1(callback) && (this._renderer.statePointToData = callback);
43062
43583
  }
43063
43584
  };
43064
43585
  DataZoom$1.defaultAttributes = DEFAULT_DATA_ZOOM_ATTRIBUTES;
@@ -58325,7 +58846,7 @@ const lookup = (data, opt) => {
58325
58846
  });
58326
58847
  };
58327
58848
 
58328
- const version = "2.0.7-alpha.2";
58849
+ const version = "2.0.7-alpha.5";
58329
58850
 
58330
58851
  const addVChartProperty = (data, op) => {
58331
58852
  const context = op.beforeCall();
@@ -78401,6 +78922,72 @@ const calculateNodeValue = subTree => {
78401
78922
  isNil$1(node.value) && ((null === (_a = node.children) || void 0 === _a ? void 0 : _a.length) ? node.value = calculateNodeValue(node.children) : node.value = 0), sum += Math.abs(node.value);
78402
78923
  }), sum;
78403
78924
  };
78925
+ function makeHierarchicNodes(originalNodes, nodeKeyFunc, nodes = [], nodeMap = {}, originalLinks) {
78926
+ calculateNodeValue(originalNodes);
78927
+ const doSubTree = (subTree, depth, parents) => {
78928
+ subTree.forEach((node, index) => {
78929
+ const nodeKey = nodeKeyFunc ? nodeKeyFunc(node) : parents ? `${parents[parents.length - 1].key}-${index}` : `${depth}-${index}`,
78930
+ nodeValue = isNil$1(node.value) ? 0 : toValidNumber$1(node.value);
78931
+ if (nodeMap[nodeKey]) nodeMap[nodeKey].value = void 0;else {
78932
+ const nodeElement = {
78933
+ depth: depth,
78934
+ datum: node,
78935
+ index: index,
78936
+ key: nodeKey,
78937
+ value: nodeValue,
78938
+ sourceLinks: [],
78939
+ targetLinks: []
78940
+ };
78941
+ nodeMap[nodeKey] = nodeElement, nodes.push(nodeElement);
78942
+ }
78943
+ parents && originalLinks && originalLinks.push({
78944
+ source: parents[parents.length - 1].key,
78945
+ target: nodeKey,
78946
+ value: nodeValue,
78947
+ parents: parents
78948
+ }), node.children && node.children.length && doSubTree(node.children, depth + 1, parents ? parents.concat([nodeMap[nodeKey]]) : [nodeMap[nodeKey]]);
78949
+ });
78950
+ };
78951
+ return doSubTree(originalNodes, 0, null), nodes;
78952
+ }
78953
+ function computeHierarchicNodeLinks(originalNodes, nodeKeyFunc) {
78954
+ const nodes = [],
78955
+ links = [],
78956
+ nodeMap = {},
78957
+ linkMap = {},
78958
+ originalLinks = [];
78959
+ return makeHierarchicNodes(originalNodes, nodeKeyFunc, nodes, nodeMap, originalLinks), originalLinks.forEach((link, index) => {
78960
+ const key = `${link.source}-${link.target}`,
78961
+ linkDatum = pickWithout(link, ["parents"]);
78962
+ if (linkDatum.parents = link.parents.map(node => pickWithout(node, ["sourceLinks", "targetLinks"])), linkMap[key]) return linkMap[key].value += toValidNumber$1(link.value), void linkMap[key].datum.push(linkDatum);
78963
+ const linkElement = {
78964
+ index: index,
78965
+ key: `${link.source}-${link.target}`,
78966
+ source: link.source,
78967
+ target: link.target,
78968
+ datum: [linkDatum],
78969
+ value: link.value,
78970
+ parents: link.parents.map(parent => parent.key)
78971
+ };
78972
+ links.push(linkElement), nodeMap[link.source].sourceLinks.push(linkElement), nodeMap[link.target].targetLinks.push(linkElement), linkMap[key] = linkElement;
78973
+ }), {
78974
+ nodes: nodes,
78975
+ links: links,
78976
+ nodeMap: nodeMap
78977
+ };
78978
+ }
78979
+ function computeNodeValues(nodes) {
78980
+ for (let i = 0, len = nodes.length; i < len; i++) {
78981
+ const node = nodes[i];
78982
+ node.value = Math.max(isNil$1(node.value) ? 0 : toValidNumber$1(node.value), node.sourceLinks.reduce((sum, link) => {
78983
+ var _a;
78984
+ return sum + (null !== (_a = toValidNumber$1(link.value)) && void 0 !== _a ? _a : 0);
78985
+ }, 0), node.targetLinks.reduce((sum, link) => {
78986
+ var _a;
78987
+ return sum + (null !== (_a = toValidNumber$1(link.value)) && void 0 !== _a ? _a : 0);
78988
+ }, 0));
78989
+ }
78990
+ }
78404
78991
 
78405
78992
  function left(node) {
78406
78993
  return node.depth;
@@ -78534,55 +79121,7 @@ class SankeyLayout {
78534
79121
  };
78535
79122
  }
78536
79123
  computeHierarchicNodeLinks(originalNodes) {
78537
- const nodes = [],
78538
- links = [],
78539
- nodeMap = {},
78540
- linkMap = {},
78541
- originalLinks = [];
78542
- calculateNodeValue(originalNodes);
78543
- const doSubTree = (subTree, depth, parents) => {
78544
- subTree.forEach((node, index) => {
78545
- const nodeKey = this._getNodeKey ? this._getNodeKey(node) : parents ? `${parents[parents.length - 1].key}-${index}` : `${depth}-${index}`,
78546
- nodeValue = isNil$1(node.value) ? 0 : toValidNumber$1(node.value);
78547
- if (nodeMap[nodeKey]) nodeMap[nodeKey].value = void 0;else {
78548
- const nodeElement = {
78549
- depth: depth,
78550
- datum: node,
78551
- index: index,
78552
- key: nodeKey,
78553
- value: nodeValue,
78554
- sourceLinks: [],
78555
- targetLinks: []
78556
- };
78557
- nodeMap[nodeKey] = nodeElement, nodes.push(nodeElement);
78558
- }
78559
- parents && originalLinks.push({
78560
- source: parents[parents.length - 1].key,
78561
- target: nodeKey,
78562
- value: nodeValue,
78563
- parents: parents
78564
- }), node.children && node.children.length && doSubTree(node.children, depth + 1, parents ? parents.concat([nodeMap[nodeKey]]) : [nodeMap[nodeKey]]);
78565
- });
78566
- };
78567
- return doSubTree(originalNodes, 0, null), originalLinks.forEach((link, index) => {
78568
- const key = `${link.source}-${link.target}`,
78569
- linkDatum = pickWithout(link, ["parents"]);
78570
- if (linkDatum.parents = link.parents.map(node => pickWithout(node, ["sourceLinks", "targetLinks"])), linkMap[key]) return linkMap[key].value += toValidNumber$1(link.value), void linkMap[key].datum.push(linkDatum);
78571
- const linkElement = {
78572
- index: index,
78573
- key: `${link.source}-${link.target}`,
78574
- source: link.source,
78575
- target: link.target,
78576
- datum: [linkDatum],
78577
- value: link.value,
78578
- parents: link.parents.map(parent => parent.key)
78579
- };
78580
- links.push(linkElement), nodeMap[link.source].sourceLinks.push(linkElement), nodeMap[link.target].targetLinks.push(linkElement), linkMap[key] = linkElement;
78581
- }), {
78582
- nodes: nodes,
78583
- links: links,
78584
- nodeMap: nodeMap
78585
- };
79124
+ return computeHierarchicNodeLinks(originalNodes, this._getNodeKey);
78586
79125
  }
78587
79126
  computeSourceTargetNodeLinks(data) {
78588
79127
  const nodes = [],
@@ -78652,16 +79191,7 @@ class SankeyLayout {
78652
79191
  };
78653
79192
  }
78654
79193
  computeNodeValues(nodes) {
78655
- for (let i = 0, len = nodes.length; i < len; i++) {
78656
- const node = nodes[i];
78657
- node.value = Math.max(isNil$1(node.value) ? 0 : toValidNumber$1(node.value), node.sourceLinks.reduce((sum, link) => {
78658
- var _a;
78659
- return sum + (null !== (_a = toValidNumber$1(link.value)) && void 0 !== _a ? _a : 0);
78660
- }, 0), node.targetLinks.reduce((sum, link) => {
78661
- var _a;
78662
- return sum + (null !== (_a = toValidNumber$1(link.value)) && void 0 !== _a ? _a : 0);
78663
- }, 0));
78664
- }
79194
+ return computeNodeValues(nodes);
78665
79195
  }
78666
79196
  computeNodeDepths(nodes) {
78667
79197
  var _a;
@@ -79726,7 +80256,7 @@ function normalizeSolution(solution, orientation, orientationOrder) {
79726
80256
  return ret;
79727
80257
  }
79728
80258
 
79729
- function scaleSolution(solution, width, height, x0, y0) {
80259
+ function scaleSolution(solution, width, height, x0, y0, hasEmptySet = !1) {
79730
80260
  width = Math.max(width, 1), height = Math.max(height, 1);
79731
80261
  const circles = [],
79732
80262
  setIds = [];
@@ -79736,9 +80266,20 @@ function scaleSolution(solution, width, height, x0, y0) {
79736
80266
  yRange = bounds.yRange;
79737
80267
  if (xRange.max === xRange.min || yRange.max === yRange.min) return console.log("not scaling solution: zero size detected"), solution;
79738
80268
  const xScaling = width / (xRange.max - xRange.min),
79739
- yScaling = height / (yRange.max - yRange.min),
79740
- scaling = Math.min(yScaling, xScaling),
79741
- xOffset = (width - (xRange.max - xRange.min) * scaling) / 2,
80269
+ yScaling = height / (yRange.max - yRange.min);
80270
+ let scaling;
80271
+ if (hasEmptySet) {
80272
+ const containerRadius = Math.min(width, height) / 2,
80273
+ centerX = (xRange.min + xRange.max) / 2,
80274
+ centerY = (yRange.min + yRange.max) / 2;
80275
+ let diagramRadius = 0;
80276
+ for (const circle of circles) {
80277
+ const maxDistanceForThisCircle = Math.sqrt(Math.pow(circle.x - centerX, 2) + Math.pow(circle.y - centerY, 2)) + circle.radius;
80278
+ diagramRadius = Math.max(diagramRadius, maxDistanceForThisCircle);
80279
+ }
80280
+ scaling = containerRadius / diagramRadius;
80281
+ } else scaling = Math.min(yScaling, xScaling);
80282
+ const xOffset = (width - (xRange.max - xRange.min) * scaling) / 2,
79742
80283
  yOffset = (height - (yRange.max - yRange.min) * scaling) / 2,
79743
80284
  scaled = {};
79744
80285
  for (let i = 0; i < circles.length; ++i) {
@@ -79953,21 +80494,39 @@ const transform$2 = (options, upstreamData) => {
79953
80494
  setField = "sets",
79954
80495
  valueField = "size",
79955
80496
  orientation = Math.PI / 2,
79956
- orientationOrder = null
80497
+ orientationOrder = null,
80498
+ emptySetKey: emptySetKey
79957
80499
  } = options;
79958
80500
  let circles = {},
79959
80501
  textCenters = {};
79960
- if (upstreamData.length > 0) {
79961
- const vennData = upstreamData.map(area => ({
80502
+ const hasEmptySet = upstreamData.some(area => {
80503
+ const sets = array(area[setField]);
80504
+ return !sets || 0 === sets.length;
80505
+ }),
80506
+ nonEmptyData = hasEmptySet ? upstreamData.filter(area => !isEmpty(array(area[setField]))) : upstreamData;
80507
+ if (nonEmptyData.length > 0) {
80508
+ const vennData = nonEmptyData.map(area => ({
79962
80509
  sets: array(area[setField]),
79963
80510
  size: area[valueField]
79964
80511
  }));
79965
80512
  let solution = venn$1(vennData, options);
79966
- solution = normalizeSolution(solution, orientation, orientationOrder), circles = scaleSolution(solution, x1 - x0, y1 - y0, x0, y0), textCenters = computeTextCenters(circles, vennData);
80513
+ solution = normalizeSolution(solution, orientation, orientationOrder), circles = scaleSolution(solution, x1 - x0, y1 - y0, x0, y0, hasEmptySet), textCenters = computeTextCenters(circles, vennData);
79967
80514
  }
79968
80515
  return upstreamData.map(area => {
79969
- const sets = array(area[setField]),
79970
- key = sets.toString(),
80516
+ const sets = array(area[setField]);
80517
+ if (!sets || 0 === sets.length) return Object.assign(Object.assign({}, area), {
80518
+ datum: area,
80519
+ sets: sets,
80520
+ key: emptySetKey || "others",
80521
+ size: area[valueField],
80522
+ labelX: void 0,
80523
+ labelY: void 0,
80524
+ type: "circle",
80525
+ x: x0 + (x1 - x0) / 2,
80526
+ y: y0 + (y1 - y0) / 2,
80527
+ radius: Math.min(x1 - x0, y1 - y0) / 2
80528
+ });
80529
+ const key = sets.toString(),
79971
80530
  textCenter = textCenters[key],
79972
80531
  basicDatum = Object.assign(Object.assign({}, area), {
79973
80532
  datum: area,
@@ -80247,11 +80806,11 @@ class CloudLayout extends BaseLayout {
80247
80806
  if (1 === this._placeStatus) {
80248
80807
  const maxSize0 = d.fontSize * this._originSize[0] / this.options.minFontSize,
80249
80808
  distSize0 = Math.max(d.width, d.height);
80250
- if (distSize0 <= maxSize0) this.expandBoard(this._board, this._bounds, distSize0 / this._size[0]);else {
80809
+ if (distSize0 <= maxSize0) this._board = this.expandBoard(this._board, this._bounds, distSize0 / this._size[0]);else {
80251
80810
  if (!this.options.clip) return !0;
80252
- this.expandBoard(this._board, this._bounds, maxSize0 / this._size[0]);
80811
+ this._board = this.expandBoard(this._board, this._bounds, maxSize0 / this._size[0]);
80253
80812
  }
80254
- } else this._placeStatus, this.expandBoard(this._board, this._bounds);
80813
+ } else this._placeStatus, this._board = this.expandBoard(this._board, this._bounds);
80255
80814
  return this.updateBoardExpandStatus(d.fontSize), !1;
80256
80815
  }
80257
80816
  return this._tTemp = null, this._dtTemp = null, !0;
@@ -80262,7 +80821,7 @@ class CloudLayout extends BaseLayout {
80262
80821
  width: 1,
80263
80822
  height: 1
80264
80823
  }));
80265
- this.contextAndRatio = contextAndRatio, this._board = new Array((this._size[0] >> 5) * this._size[1]).fill(0), this._bounds = null;
80824
+ this.contextAndRatio = contextAndRatio, this._board = new Uint32Array((this._size[0] >> 5) * this._size[1]).fill(0), this._bounds = null;
80266
80825
  words.length;
80267
80826
  this.result = [];
80268
80827
  const data = words.map((d, i) => ({
@@ -80329,18 +80888,33 @@ class CloudLayout extends BaseLayout {
80329
80888
  this._size = this._size.map(v => v * (1 - minRatio));
80330
80889
  }
80331
80890
  expandBoard(board, bounds, factor) {
80332
- const expandedLeftWidth = this._size[0] * (factor || 1.1) - this._size[0] >> 5;
80891
+ const oldW = this._size[0],
80892
+ oldH = this._size[1],
80893
+ oldRowStride = oldW >> 5,
80894
+ expandedLeftWidth = oldW * (factor || 1.1) - oldW >> 5;
80333
80895
  let diffWidth = 2 * expandedLeftWidth > 2 ? expandedLeftWidth : 2;
80334
80896
  diffWidth % 2 != 0 && diffWidth++;
80335
- let diffHeight = Math.ceil(this._size[1] * (diffWidth << 5) / this._size[0]);
80897
+ let diffHeight = Math.ceil(oldH * (diffWidth << 5) / oldW);
80336
80898
  diffHeight % 2 != 0 && diffHeight++;
80337
- const w = this._size[0],
80338
- h = this._size[1],
80339
- widthArr = new Array(diffWidth).fill(0),
80340
- heightArr = new Array(diffHeight / 2 * (diffWidth + (w >> 5))).fill(0);
80341
- this.insertZerosToArray(board, h * (w >> 5), heightArr.length + diffWidth / 2);
80342
- for (let i = h - 1; i > 0; i--) this.insertZerosToArray(board, i * (w >> 5), widthArr.length);
80343
- this.insertZerosToArray(board, 0, heightArr.length + diffWidth / 2), this._size = [w + (diffWidth << 5), h + diffHeight], bounds && (bounds[0].x += (diffWidth << 5) / 2, bounds[0].y += diffHeight / 2, bounds[1].x += (diffWidth << 5) / 2, bounds[1].y += diffHeight / 2);
80899
+ const newW = oldW + (diffWidth << 5),
80900
+ newH = oldH + diffHeight,
80901
+ newRowStride = newW >> 5,
80902
+ paddingLeft = diffWidth / 2,
80903
+ paddingTop = diffHeight / 2,
80904
+ newBoard = new Uint32Array(newH * newRowStride).fill(0);
80905
+ for (let y = 0; y < oldH; y++) {
80906
+ const sourceStartIndex = y * oldRowStride,
80907
+ sourceEndIndex = sourceStartIndex + oldRowStride,
80908
+ destStartIndex = (y + paddingTop) * newRowStride + paddingLeft,
80909
+ rowData = board.slice(sourceStartIndex, sourceEndIndex);
80910
+ newBoard.set(rowData, destStartIndex);
80911
+ }
80912
+ if (this._size = [newW, newH], bounds) {
80913
+ const offsetX = (diffWidth << 5) / 2,
80914
+ offsetY = diffHeight / 2;
80915
+ bounds[0].x += offsetX, bounds[0].y += offsetY, bounds[1].x += offsetX, bounds[1].y += offsetY;
80916
+ }
80917
+ return newBoard;
80344
80918
  }
80345
80919
  insertZerosToArray(array, index, length) {
80346
80920
  if (this.options.customInsertZerosToArray) return this.options.customInsertZerosToArray(array, index, length);
@@ -88829,6 +89403,7 @@ const registerHistogramChart = () => {
88829
89403
  registerDimensionEvents();
88830
89404
  registerDimensionHover();
88831
89405
  registerBarSeries();
89406
+ Factory.registerTransform('bin', bin);
88832
89407
  Factory.registerChart(HistogramChart.type, HistogramChart);
88833
89408
  };
88834
89409
 
@@ -89528,6 +90103,7 @@ const registerBoxplotChart = () => {
89528
90103
  registerDimensionEvents();
89529
90104
  registerDimensionHover();
89530
90105
  registerBoxplotSeries();
90106
+ Factory.registerTransform('boxplot', boxplot);
89531
90107
  Factory.registerChart(BoxPlotChart.type, BoxPlotChart);
89532
90108
  };
89533
90109
 
@@ -101801,4 +102377,4 @@ function registerSequentialAnimate() {
101801
102377
  mixin(BaseMark, SequentialAnimate);
101802
102378
  }
101803
102379
 
101804
- export { ArcMark, AreaChart, AreaMark, AreaSeries, AttributeLevel, AxisSyncPlugin, BandAxisMixin, BarChart, BarChartSpecTransformer, BarSeries, BarSeriesSpecTransformer, BaseArcMark, BaseChart, BaseChartSpecTransformer, BaseComponent, BaseComponentSpecTransformer, BaseHistogramChart, BaseMark, BasePieChart, BasePieChartSpecTransformer, BasePieSeries, BasePlugin, BasePolygonMark, BaseSeries, BaseSeriesSpecTransformer, BaseSeriesTooltipHelper, BaseWordCloudChart, BaseWordCloudChartSpecTransformer, BaseWordCloudSeries, BoxPlotChart, BoxPlotSeries, Brush, CanvasTooltipHandler, CartesianAxis, CartesianBandAxis, CartesianChartSpecTransformer, CartesianCrossHair, CartesianLinearAxis, CartesianLogAxis, CartesianMarkArea, CartesianMarkLine, CartesianMarkPoint, CartesianSeries, CartesianSymlogAxis, CartesianTimeAxis, ChartEvent, CirclePackingChart, CirclePackingSeries, CircularProgressChart, CircularProgressSeries, CommonChart, CommonChartSpecTransformer, CompilableData, ComponentMark, ContinuousLegend, CorrelationChart, CorrelationSeries, CustomMark, DEFAULT_ANIMATION_CONFIG, DEFAULT_CHART_HEIGHT, DEFAULT_CHART_WIDTH, DEFAULT_CLOSE_STROKE_JOIN, DEFAULT_DATA_INDEX, DEFAULT_DATA_KEY, DEFAULT_DATA_SERIES_FIELD, DEFAULT_KEY, DEFAULT_LAYOUT_RECT_LEVEL, DEFAULT_LAYOUT_RECT_LEVEL_MIN, DEFAULT_LINEAR_INTERPOLATE, DEFAULT_MEASURE_CANVAS_ID, DEFAULT_SERIES_STYLE_NAME, DEFAULT_SMOOTH_INTERPOLATE, DataZoom, DimensionClickEvent, DimensionEventEnum, DimensionHoverEvent, Direction, DiscreteLegend, DomTooltipHandler, DotSeries, ElementHighlight, ElementSelect, Event$1 as Event, Factory, FormatterPlugin, FunnelChart, FunnelChartSpecTransformer, FunnelSeries, FunnelSeriesSpecTransformer, GaugeChart, GaugePointerSeries, GaugeSeries, GeoCoordinate, GeoMarkPoint, GeoSeries, GlyphMark, GridLayout, GroupMark, HeatmapChart, HeatmapSeries, HistogramChart, HistogramChartSpecTransformer, ImageMark, Indicator, Label, Layout$1 as Layout, LayoutLevel, LayoutZIndex, LineChart, LineMark, LineSeries, LinearAxisMixin, LinearProgressChart, LinearProgressSeries, LinkSeries, LiquidChart, LiquidSeries, MOSAIC_CAT_END_PERCENT, MOSAIC_CAT_START_PERCENT, MOSAIC_VALUE_END_PERCENT, MOSAIC_VALUE_START_PERCENT, ManualTicker, MapChart, MapSeries, MarkTypeEnum, MediaQuery, MosaicChart, MosaicSeries, PREFIX, PathMark, PieChart, PieSeries, PieSeriesSpecTransformer, Player, PolarAxis, PolarBandAxis, PolarCrossHair, PolarLinearAxis, PolarMarkArea, PolarMarkLine, PolarMarkPoint, PolarSeries, PolygonMark, PositionEnum, ProgressLikeSeries, RadarChart, RadarSeries, RangeAreaChart, RangeAreaSeries, RangeColumnChart, RangeColumnSeries, RangeColumnSeriesSpecTransformer, RectMark, RenderModeEnum, RippleMark, RoseChart, RoseLikeSeries, RoseSeries, RuleMark, SEGMENT_FIELD_END, SEGMENT_FIELD_START, STACK_FIELD_END, STACK_FIELD_END_OffsetSilhouette, STACK_FIELD_END_PERCENT, STACK_FIELD_KEY, STACK_FIELD_START, STACK_FIELD_START_OffsetSilhouette, STACK_FIELD_START_PERCENT, STACK_FIELD_TOTAL, STACK_FIELD_TOTAL_BOTTOM, STACK_FIELD_TOTAL_PERCENT, STACK_FIELD_TOTAL_TOP, STATE_VALUE_ENUM, SankeyChart, SankeySeries, ScatterChart, ScatterSeries, ScrollBar, SequenceChart, SeriesMarkNameEnum, SeriesTypeEnum, SeriesTypeForThemeEnum, Stack, StackChartMixin, StreamLight, SunburstChart, SunburstSeries, SymbolMark, TextMark, ThemeManager, Title, Tooltip, TooltipResult, TotalLabel, TransformLevel, TreemapChart, TreemapSeries, USER_LAYOUT_RECT_LEVEL, VChart, VennChart, VennSeries, WaterfallChart, WaterfallSeries, WordCloudChart, WordCloudSeries, alternatingWave, animationConfig, barGrowIn, barGrowOut, barPresetAnimation, baseSeriesMark, boundsInRect, builtinThemes, calcLayoutNumber, calcPadding, centerToCorner, columnCenterToEdge, columnEdgeToCenter, columnLeftToRight, columnRightToLeft, computeActualDataScheme, convertPoint, cornerToCenter, createArc, createArea, createGroup, createLine, createRect, createRichText, createScale, createScaleWithSpec, createSymbol, createText, darkTheme, dataScheme, VChart as default, defaultThemeName, diagonalCenterToEdge, diagonalTopLeftToBottomRight, findMarkGraphic, functionTransform, getActualColor, getActualNumValue, getCartesianCrosshairRect, getCartesianDimensionInfo, getColorSchemeBySeries, getCombinedSizeOfRegions, getDataScheme, getDatumOfGraphic, getDiffAttributesOfGraphic, getDimensionInfoByValue, getFieldAlias, getFunnelTheme, getGroupAnimationParams, getMergedTheme, getPolarDimensionInfo, getRegionStackGroup, getSpecInfo, getTheme, hasThemeMerged, isCollectionMark, isColorKey, isPercent, isPercentOffset, isPolarAxisSeries, isProgressiveDataColorScheme, isSpecValueWithScale, isTokenKey, isValidOrient, isValueInScaleDomain, isXAxis, isYAxis, isZAxis, lightTheme, lookup, measureText, mergeFields, normalizeLayoutPaddingSpec, particleEffect, pieDisappear, pieEnter, pieExit, piePresetAnimation, pulseWave, queryColorFromColorScheme, queryToken, randomOpacity, registerAllEnv, registerAllMarks, registerAnimate, registerArcAnimation, registerArcMark, registerAreaChart, registerAreaMark, registerAreaSeries, registerBarChart, registerBarSeries, registerBoxplotChart, registerBoxplotSeries, registerBrowserEnv, registerBrush, registerCanvasTooltipHandler, registerCartesianBandAxis, registerCartesianCrossHair, registerCartesianLinearAxis, registerCartesianLogAxis, registerCartesianSymlogAxis, registerCartesianTimeAxis, registerChartPlugin, registerCirclePackingChart, registerCirclePackingSeries, registerCircularProgressChart, registerCircularProgressSeries, registerCommonChart, registerComponentMark, registerContinuousLegend, registerCorrelationChart, registerCustomAnimate, registerCustomMark, registerDataSetInstanceParser, registerDataSetInstanceTransform, registerDataZoom, registerDimensionEvents, registerDimensionHover, registerDimensionTooltipProcessor, registerDiscreteLegend, registerDomTooltipHandler, registerDotSeries, registerDragPlugin, registerElementActive, registerElementActiveByLegend, registerElementHighlight, registerElementHighlightByGroup, registerElementHighlightByKey, registerElementHighlightByLegend, registerElementHighlightByName, registerElementSelect, registerFormatPlugin, registerFunnelChart, registerFunnelSeries, registerGaugeChart, registerGaugePointerSeries, registerGaugeSeries, registerGeoCoordinate, registerGeoMarkPoint, registerGesturePlugin, registerGlyphMark, registerGridLayout, registerGroupMark, registerGroupTooltipProcessor, registerHarmonyEnv, registerHeatmapChart, registerHeatmapSeries, registerHistogramChart, registerHtmlAttributePlugin, registerImageMark, registerIndicator, registerLabel, registerLarkEnv, registerLineChart, registerLineMark, registerLineSeries, registerLinearProgressChart, registerLinearProgressSeries, registerLinkSeries, registerLiquidChart, registerLiquidSeries, registerLynxEnv, registerMapChart, registerMapSeries, registerMarkArea, registerMarkFilterTransform, registerMarkLine, registerMarkMapTransform, registerMarkPoint, registerMarkTooltipProcessor, registerMediaQuery, registerMosaicChart, registerMosaicSeries, registerNodeEnv, registerPathMark, registerPieChart, registerPieSeries, registerPlayer, registerPolarBandAxis, registerPolarCrossHair, registerPolarLinearAxis, registerPolarMarkArea, registerPolarMarkLine, registerPolarMarkPoint, registerPolygonAnimation, registerPolygonMark, registerPoptip, registerRadarChart, registerRadarSeries, registerRangeAreaChart, registerRangeAreaSeries, registerRangeColumnChart, registerRangeColumnSeries, registerReactAttributePlugin, registerRectAnimation, registerRectMark, registerRippleMark, registerRoseChart, registerRoseSeries, registerRuleMark, registerSankeyChart, registerSankeySeries, registerScaleInOutAnimation, registerScatterChart, registerScatterSeries, registerScrollBar, registerSequenceChart, registerSequentialAnimate, registerStateTransition, registerSunBurstSeries, registerSunburstChart, registerSymbolMark, registerTTEnv, registerTaroEnv, registerTextMark, registerTheme, registerTitle, registerTooltip, registerTotalLabel, registerTreemapChart, registerTreemapSeries, registerAnimate$1 as registerVRenderAnimate, registerVennChart, registerVennSeries, registerWXEnv, registerWaterfallChart, registerWaterfallSeries, registerWordCloudChart, registerWordCloudSeries, registerWordCloudShapeChart, removeTheme, rippleEffect, rotationScan, rowBottomToTop, rowCenterToEdge, rowEdgeToCenter, rowTopToBottom, setDefaultCrosshairForCartesianChart, shouldMarkDoMorph, snakeWave, sortDataInAxisHelper, sortStackValueGroup, specTransform, spiralEffect, stack, stackGroup, stackMosaic, stackMosaicTotal, stackOffsetSilhouette, stackTotal, themeExist, themes, token, transformColorSchemeToStandardStruct, transformToGraphic, userAnimationConfig, valueInScaleRange, version, vglobal, warn };
102380
+ export { ArcMark, AreaChart, AreaMark, AreaSeries, AttributeLevel, AxisSyncPlugin, BandAxisMixin, BarChart, BarChartSpecTransformer, BarSeries, BarSeriesSpecTransformer, BaseArcMark, BaseChart, BaseChartSpecTransformer, BaseComponent, BaseComponentSpecTransformer, BaseHistogramChart, BaseMark, BasePieChart, BasePieChartSpecTransformer, BasePieSeries, BasePlugin, BasePolygonMark, BaseSeries, BaseSeriesSpecTransformer, BaseSeriesTooltipHelper, BaseWordCloudChart, BaseWordCloudChartSpecTransformer, BaseWordCloudSeries, BoxPlotChart, BoxPlotSeries, Brush, CanvasTooltipHandler, CartesianAxis, CartesianBandAxis, CartesianChartSpecTransformer, CartesianCrossHair, CartesianLinearAxis, CartesianLogAxis, CartesianMarkArea, CartesianMarkLine, CartesianMarkPoint, CartesianSeries, CartesianSymlogAxis, CartesianTimeAxis, ChartEvent, CirclePackingChart, CirclePackingSeries, CircularProgressChart, CircularProgressSeries, CommonChart, CommonChartSpecTransformer, CompilableData, ComponentMark, ContinuousLegend, CorrelationChart, CorrelationSeries, CustomMark, DEFAULT_ANIMATION_CONFIG, DEFAULT_CHART_HEIGHT, DEFAULT_CHART_WIDTH, DEFAULT_CLOSE_STROKE_JOIN, DEFAULT_DATA_INDEX, DEFAULT_DATA_KEY, DEFAULT_DATA_SERIES_FIELD, DEFAULT_KEY, DEFAULT_LAYOUT_RECT_LEVEL, DEFAULT_LAYOUT_RECT_LEVEL_MIN, DEFAULT_LINEAR_INTERPOLATE, DEFAULT_MEASURE_CANVAS_ID, DEFAULT_SERIES_STYLE_NAME, DEFAULT_SMOOTH_INTERPOLATE, DataZoom, DimensionClickEvent, DimensionEventEnum, DimensionHoverEvent, Direction, DiscreteLegend, DomTooltipHandler, DotSeries, ElementHighlight, ElementSelect, Event$1 as Event, Factory, FormatterPlugin, FunnelChart, FunnelChartSpecTransformer, FunnelSeries, FunnelSeriesSpecTransformer, GaugeChart, GaugePointerSeries, GaugeSeries, GeoCoordinate, GeoMarkPoint, GeoSeries, GlyphMark, GridLayout, GroupMark, HeatmapChart, HeatmapSeries, HistogramChart, HistogramChartSpecTransformer, ImageMark, Indicator, Label, Layout$1 as Layout, LayoutLevel, LayoutZIndex, LineChart, LineMark, LineSeries, LinearAxisMixin, LinearProgressChart, LinearProgressSeries, LinkSeries, LiquidChart, LiquidSeries, MOSAIC_CAT_END_PERCENT, MOSAIC_CAT_START_PERCENT, MOSAIC_VALUE_END_PERCENT, MOSAIC_VALUE_START_PERCENT, ManualTicker, MapChart, MapSeries, MarkTypeEnum, MediaQuery, MosaicChart, MosaicSeries, PREFIX, PathMark, PieChart, PieSeries, PieSeriesSpecTransformer, Player, PolarAxis, PolarBandAxis, PolarCrossHair, PolarLinearAxis, PolarMarkArea, PolarMarkLine, PolarMarkPoint, PolarSeries, PolygonMark, PositionEnum, ProgressLikeSeries, RadarChart, RadarSeries, RangeAreaChart, RangeAreaSeries, RangeColumnChart, RangeColumnSeries, RangeColumnSeriesSpecTransformer, RectMark, RenderModeEnum, RippleMark, RoseChart, RoseLikeSeries, RoseSeries, RuleMark, SEGMENT_FIELD_END, SEGMENT_FIELD_START, STACK_FIELD_END, STACK_FIELD_END_OffsetSilhouette, STACK_FIELD_END_PERCENT, STACK_FIELD_KEY, STACK_FIELD_START, STACK_FIELD_START_OffsetSilhouette, STACK_FIELD_START_PERCENT, STACK_FIELD_TOTAL, STACK_FIELD_TOTAL_BOTTOM, STACK_FIELD_TOTAL_PERCENT, STACK_FIELD_TOTAL_TOP, STATE_VALUE_ENUM, SankeyChart, SankeySeries, ScatterChart, ScatterSeries, ScrollBar, SequenceChart, SeriesMarkNameEnum, SeriesTypeEnum, SeriesTypeForThemeEnum, Stack, StackChartMixin, StreamLight, SunburstChart, SunburstSeries, SymbolMark, TextMark, ThemeManager, Title, Tooltip, TooltipResult, TotalLabel, TransformLevel, TreemapChart, TreemapSeries, USER_LAYOUT_RECT_LEVEL, VChart, VennChart, VennSeries, WaterfallChart, WaterfallSeries, WordCloudChart, WordCloudSeries, alternatingWave, animationConfig, barGrowIn, barGrowOut, barPresetAnimation, baseSeriesMark, boundsInRect, builtinThemes, calcLayoutNumber, calcPadding, centerToCorner, columnCenterToEdge, columnEdgeToCenter, columnLeftToRight, columnRightToLeft, computeActualDataScheme, convertPoint, cornerToCenter, createArc, createArea, createGroup, createLine, createRect, createRichText, createScale, createScaleWithSpec, createSymbol, createText, darkTheme, dataScheme, VChart as default, defaultThemeName, diagonalCenterToEdge, diagonalTopLeftToBottomRight, findMarkGraphic, functionTransform, getActualColor, getActualNumValue, getCartesianCrosshairRect, getCartesianDimensionInfo, getColorSchemeBySeries, getCombinedSizeOfRegions, getDataScheme, getDatumOfGraphic, getDiffAttributesOfGraphic, getDimensionInfoByValue, getFieldAlias, getFunnelTheme, getGroupAnimationParams, getMergedTheme, getPolarDimensionInfo, getRegionStackGroup, getSpecInfo, getTheme, hasThemeMerged, isCollectionMark, isColorKey, isPercent, isPercentOffset, isPolarAxisSeries, isProgressiveDataColorScheme, isSpecValueWithScale, isTokenKey, isValidOrient, isValueInScaleDomain, isXAxis, isYAxis, isZAxis, lightTheme, lookup, measureText, mergeFields, normalizeLayoutPaddingSpec, particleEffect, pieDisappear, pieEnter, pieExit, piePresetAnimation, pulseWave, queryColorFromColorScheme, queryToken, randomOpacity, registerAllEnv, registerAllMarks, registerAnimate, registerArcAnimation, registerArcMark, registerAreaChart, registerAreaMark, registerAreaSeries, registerBarAnimation, registerBarChart, registerBarSeries, registerBoxplotChart, registerBoxplotSeries, registerBrowserEnv, registerBrush, registerCanvasTooltipHandler, registerCartesianBandAxis, registerCartesianCrossHair, registerCartesianLinearAxis, registerCartesianLogAxis, registerCartesianSymlogAxis, registerCartesianTimeAxis, registerChartPlugin, registerCirclePackingChart, registerCirclePackingSeries, registerCircularProgressChart, registerCircularProgressSeries, registerCommonChart, registerComponentMark, registerContinuousLegend, registerCorrelationChart, registerCustomAnimate, registerCustomMark, registerDataSetInstanceParser, registerDataSetInstanceTransform, registerDataZoom, registerDimensionEvents, registerDimensionHover, registerDimensionTooltipProcessor, registerDiscreteLegend, registerDomTooltipHandler, registerDotSeries, registerDragPlugin, registerElementActive, registerElementActiveByLegend, registerElementHighlight, registerElementHighlightByGroup, registerElementHighlightByKey, registerElementHighlightByLegend, registerElementHighlightByName, registerElementSelect, registerFormatPlugin, registerFunnelChart, registerFunnelSeries, registerGaugeChart, registerGaugePointerSeries, registerGaugeSeries, registerGeoCoordinate, registerGeoMarkPoint, registerGesturePlugin, registerGlyphMark, registerGridLayout, registerGroupMark, registerGroupTooltipProcessor, registerHarmonyEnv, registerHeatmapChart, registerHeatmapSeries, registerHistogramChart, registerHtmlAttributePlugin, registerImageMark, registerIndicator, registerLabel, registerLarkEnv, registerLineChart, registerLineMark, registerLineSeries, registerLinearProgressChart, registerLinearProgressSeries, registerLinkSeries, registerLiquidChart, registerLiquidSeries, registerLynxEnv, registerMapChart, registerMapSeries, registerMarkArea, registerMarkFilterTransform, registerMarkLine, registerMarkMapTransform, registerMarkPoint, registerMarkTooltipProcessor, registerMediaQuery, registerMosaicChart, registerMosaicSeries, registerNodeEnv, registerPathMark, registerPieChart, registerPieSeries, registerPlayer, registerPolarBandAxis, registerPolarCrossHair, registerPolarLinearAxis, registerPolarMarkArea, registerPolarMarkLine, registerPolarMarkPoint, registerPolygonAnimation, registerPolygonMark, registerPoptip, registerRadarChart, registerRadarSeries, registerRangeAreaChart, registerRangeAreaSeries, registerRangeColumnChart, registerRangeColumnSeries, registerReactAttributePlugin, registerRectAnimation, registerRectMark, registerRippleMark, registerRoseChart, registerRoseSeries, registerRuleMark, registerSankeyChart, registerSankeySeries, registerScaleInOutAnimation, registerScatterChart, registerScatterSeries, registerScrollBar, registerSequenceChart, registerSequentialAnimate, registerStateTransition, registerSunBurstSeries, registerSunburstChart, registerSymbolMark, registerTTEnv, registerTaroEnv, registerTextMark, registerTheme, registerTitle, registerTooltip, registerTotalLabel, registerTreemapChart, registerTreemapSeries, registerAnimate$1 as registerVRenderAnimate, registerVennChart, registerVennSeries, registerWXEnv, registerWaterfallChart, registerWaterfallSeries, registerWordCloudChart, registerWordCloudSeries, registerWordCloudShapeChart, removeTheme, rippleEffect, rotationScan, rowBottomToTop, rowCenterToEdge, rowEdgeToCenter, rowTopToBottom, setDefaultCrosshairForCartesianChart, shouldMarkDoMorph, snakeWave, sortDataInAxisHelper, sortStackValueGroup, specTransform, spiralEffect, stack, stackGroup, stackMosaic, stackMosaicTotal, stackOffsetSilhouette, stackTotal, themeExist, themes, token, transformColorSchemeToStandardStruct, transformToGraphic, userAnimationConfig, valueInScaleRange, version, vglobal, warn };