@visactor/vrender-components 1.0.41-alpha.2 → 1.0.41-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/data-zoom/interaction.js +1 -1
- package/cjs/data-zoom/interaction.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/label/base.js +25 -5
- package/cjs/label/base.js.map +1 -1
- package/cjs/label/type.d.ts +1 -1
- package/cjs/label/type.js.map +1 -1
- package/cjs/player/base-player.d.ts +1 -0
- package/cjs/player/base-player.js +3 -0
- package/cjs/player/base-player.js.map +1 -1
- package/cjs/slider/slider.d.ts +2 -0
- package/cjs/slider/slider.js +24 -19
- package/cjs/slider/slider.js.map +1 -1
- package/cjs/slider/type.d.ts +14 -3
- package/cjs/slider/type.js.map +1 -1
- package/dist/index.es.js +95 -32
- package/es/data-zoom/interaction.js +1 -1
- package/es/data-zoom/interaction.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/label/base.js +25 -5
- package/es/label/base.js.map +1 -1
- package/es/label/type.d.ts +1 -1
- package/es/label/type.js.map +1 -1
- package/es/player/base-player.d.ts +1 -0
- package/es/player/base-player.js +3 -0
- package/es/player/base-player.js.map +1 -1
- package/es/slider/slider.d.ts +2 -0
- package/es/slider/slider.js +25 -20
- package/es/slider/slider.js.map +1 -1
- package/es/slider/type.d.ts +14 -3
- package/es/slider/type.js.map +1 -1
- package/package.json +5 -5
package/dist/index.es.js
CHANGED
|
@@ -633,28 +633,59 @@ class EventListenerManager {
|
|
|
633
633
|
}
|
|
634
634
|
addEventListener(type, listener, options) {
|
|
635
635
|
if (!listener) return;
|
|
636
|
+
const capture = this._resolveCapture(options),
|
|
637
|
+
once = this._resolveOnce(options),
|
|
638
|
+
listenerTypeMap = this._getOrCreateListenerTypeMap(type),
|
|
639
|
+
wrappedMap = this._getOrCreateWrappedMap(listenerTypeMap, listener);
|
|
640
|
+
if (wrappedMap.has(capture)) return;
|
|
636
641
|
const wrappedListener = event => {
|
|
637
642
|
const transformedEvent = this._eventListenerTransformer(event);
|
|
638
|
-
"function" == typeof listener ? listener(transformedEvent) : listener.handleEvent && listener.handleEvent(transformedEvent);
|
|
643
|
+
"function" == typeof listener ? listener(transformedEvent) : listener.handleEvent && listener.handleEvent(transformedEvent), once && this._deleteListenerRecord(type, listener, capture);
|
|
639
644
|
};
|
|
640
|
-
|
|
645
|
+
wrappedMap.set(capture, {
|
|
646
|
+
wrappedListener: wrappedListener,
|
|
647
|
+
options: options
|
|
648
|
+
}), this._nativeAddEventListener(type, wrappedListener, options);
|
|
641
649
|
}
|
|
642
650
|
removeEventListener(type, listener, options) {
|
|
643
|
-
var _a;
|
|
651
|
+
var _a, _b;
|
|
644
652
|
if (!listener) return;
|
|
645
|
-
const
|
|
646
|
-
|
|
653
|
+
const capture = this._resolveCapture(options),
|
|
654
|
+
wrappedRecord = null === (_b = null === (_a = this._listenerMap.get(type)) || void 0 === _a ? void 0 : _a.get(listener)) || void 0 === _b ? void 0 : _b.get(capture);
|
|
655
|
+
wrappedRecord && (this._nativeRemoveEventListener(type, wrappedRecord.wrappedListener, capture), this._deleteListenerRecord(type, listener, capture));
|
|
647
656
|
}
|
|
648
657
|
dispatchEvent(event) {
|
|
649
658
|
return this._nativeDispatchEvent(event);
|
|
650
659
|
}
|
|
651
660
|
clearAllEventListeners() {
|
|
652
|
-
this._listenerMap.forEach((
|
|
653
|
-
|
|
654
|
-
|
|
661
|
+
this._listenerMap.forEach((listenerMap, type) => {
|
|
662
|
+
listenerMap.forEach(wrappedMap => {
|
|
663
|
+
wrappedMap.forEach((wrappedRecord, capture) => {
|
|
664
|
+
this._nativeRemoveEventListener(type, wrappedRecord.wrappedListener, capture);
|
|
665
|
+
});
|
|
655
666
|
});
|
|
656
667
|
}), this._listenerMap.clear();
|
|
657
668
|
}
|
|
669
|
+
_resolveCapture(options) {
|
|
670
|
+
return "boolean" == typeof options ? options : !!(null == options ? void 0 : options.capture);
|
|
671
|
+
}
|
|
672
|
+
_resolveOnce(options) {
|
|
673
|
+
return "object" == typeof options && !!(null == options ? void 0 : options.once);
|
|
674
|
+
}
|
|
675
|
+
_getOrCreateListenerTypeMap(type) {
|
|
676
|
+
let listenerTypeMap = this._listenerMap.get(type);
|
|
677
|
+
return listenerTypeMap || (listenerTypeMap = new Map(), this._listenerMap.set(type, listenerTypeMap)), listenerTypeMap;
|
|
678
|
+
}
|
|
679
|
+
_getOrCreateWrappedMap(listenerTypeMap, listener) {
|
|
680
|
+
let wrappedMap = listenerTypeMap.get(listener);
|
|
681
|
+
return wrappedMap || (wrappedMap = new Map(), listenerTypeMap.set(listener, wrappedMap)), wrappedMap;
|
|
682
|
+
}
|
|
683
|
+
_deleteListenerRecord(type, listener, capture) {
|
|
684
|
+
const listenerTypeMap = this._listenerMap.get(type);
|
|
685
|
+
if (!listenerTypeMap) return;
|
|
686
|
+
const wrappedMap = listenerTypeMap.get(listener);
|
|
687
|
+
wrappedMap && (wrappedMap.delete(capture), 0 === wrappedMap.size && listenerTypeMap.delete(listener), 0 === listenerTypeMap.size && this._listenerMap.delete(type));
|
|
688
|
+
}
|
|
658
689
|
_nativeAddEventListener(type, listener, options) {
|
|
659
690
|
throw new Error("_nativeAddEventListener must be implemented by derived classes");
|
|
660
691
|
}
|
|
@@ -6942,7 +6973,7 @@ class Graphic extends Node {
|
|
|
6942
6973
|
});
|
|
6943
6974
|
}
|
|
6944
6975
|
release() {
|
|
6945
|
-
this.releaseStatus = "released", this.stopAnimates(), application.graphicService.onRelease(this);
|
|
6976
|
+
this.releaseStatus = "released", this.stopAnimates(), application.graphicService.onRelease(this), super.release();
|
|
6946
6977
|
}
|
|
6947
6978
|
_emitCustomEvent(type, context) {
|
|
6948
6979
|
var _a, _b;
|
|
@@ -12199,9 +12230,10 @@ class DefaultTextBackgroundRenderContribution extends DefaultBaseBackgroundRende
|
|
|
12199
12230
|
}), context.highPerformanceRestore(), context.setTransformForCurrent();
|
|
12200
12231
|
} else {
|
|
12201
12232
|
const {
|
|
12202
|
-
backgroundCornerRadius: backgroundCornerRadius
|
|
12233
|
+
backgroundCornerRadius: backgroundCornerRadius,
|
|
12234
|
+
backgroundOpacity = 1
|
|
12203
12235
|
} = graphic.attribute;
|
|
12204
|
-
context.highPerformanceSave(), context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute), context.fillStyle = background, backgroundCornerRadius ? (createRectPath(context, b.x1, b.y1, b.width(), b.height(), backgroundCornerRadius, !0), context.fill()) : context.fillRect(b.x1, b.y1, b.width(), b.height()), context.highPerformanceRestore();
|
|
12236
|
+
context.highPerformanceSave(), context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute), context.globalAlpha = backgroundOpacity, context.fillStyle = background, backgroundCornerRadius ? (createRectPath(context, b.x1, b.y1, b.width(), b.height(), backgroundCornerRadius, !0), context.fill()) : context.fillRect(b.x1, b.y1, b.width(), b.height()), context.highPerformanceRestore();
|
|
12205
12237
|
}
|
|
12206
12238
|
shouldReCalBounds && boundsAllocate.free(b), restore();
|
|
12207
12239
|
}
|
|
@@ -23610,6 +23642,7 @@ class LabelBase extends AnimateComponent {
|
|
|
23610
23642
|
}
|
|
23611
23643
|
const baseMark = this.getRelatedGraphic(label.attribute);
|
|
23612
23644
|
let backgroundColor = baseMark.getAttributes(true).fill;
|
|
23645
|
+
const backgroundOpacity = baseMark.getAttributes(true).fillOpacity;
|
|
23613
23646
|
let foregroundColor = label.attribute.fill;
|
|
23614
23647
|
if (isObject(backgroundColor) && backgroundColor.gradient) {
|
|
23615
23648
|
const firstStopColor = (_g = (_f = backgroundColor.stops) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.color;
|
|
@@ -23628,10 +23661,21 @@ class LabelBase extends AnimateComponent {
|
|
|
23628
23661
|
if (label.attribute.lineWidth === 0 || label.attribute.strokeOpacity === 0) {
|
|
23629
23662
|
continue;
|
|
23630
23663
|
}
|
|
23631
|
-
|
|
23632
|
-
|
|
23664
|
+
if (interactInvertType === 'background') {
|
|
23665
|
+
label.setAttributes({ stroke: false });
|
|
23666
|
+
}
|
|
23667
|
+
else {
|
|
23668
|
+
const stroke = smartInvertStrategy(strokeStrategy, backgroundColor, invertColor, similarColor);
|
|
23669
|
+
stroke && label.setAttributes({ stroke });
|
|
23670
|
+
}
|
|
23633
23671
|
}
|
|
23634
23672
|
else if (isIntersect && interactInvertType !== 'none') {
|
|
23673
|
+
if (interactInvertType === 'background') {
|
|
23674
|
+
const fill = smartInvertStrategy(fillStrategy, backgroundColor, invertColor, similarColor);
|
|
23675
|
+
fill && label.setAttributes({ fill });
|
|
23676
|
+
label.setAttributes({ stroke: false, background: backgroundColor, backgroundOpacity });
|
|
23677
|
+
continue;
|
|
23678
|
+
}
|
|
23635
23679
|
if (label.attribute.lineWidth === 0 || label.attribute.strokeOpacity === 0) {
|
|
23636
23680
|
continue;
|
|
23637
23681
|
}
|
|
@@ -23646,6 +23690,9 @@ class LabelBase extends AnimateComponent {
|
|
|
23646
23690
|
const stroke = smartInvertStrategy(strokeStrategy, backgroundColor, invertColor, similarColor);
|
|
23647
23691
|
stroke && label.setAttributes({ stroke });
|
|
23648
23692
|
}
|
|
23693
|
+
if (isInside === false && interactInvertType === 'background') {
|
|
23694
|
+
label.setAttributes({ background: null });
|
|
23695
|
+
}
|
|
23649
23696
|
}
|
|
23650
23697
|
}
|
|
23651
23698
|
_canPlaceInside(textBound, shapeBound) {
|
|
@@ -25867,7 +25914,7 @@ class DataZoomInteraction extends EventEmitter {
|
|
|
25867
25914
|
});
|
|
25868
25915
|
}
|
|
25869
25916
|
clearVGlobalEvents() {
|
|
25870
|
-
(vglobal.env === 'browser' ? vglobal : this.stage).
|
|
25917
|
+
(vglobal.env === 'browser' ? vglobal : this.stage).removeEventListener('touchmove', this._handleTouchMove, {
|
|
25871
25918
|
passive: false
|
|
25872
25919
|
});
|
|
25873
25920
|
}
|
|
@@ -30054,14 +30101,33 @@ class Slider extends AbstractComponent {
|
|
|
30054
30101
|
return handler;
|
|
30055
30102
|
}
|
|
30056
30103
|
_renderHandlerText(value, position) {
|
|
30057
|
-
|
|
30104
|
+
const textShape = graphicCreator.text(this._getHandlerTextAttributes(value, position));
|
|
30105
|
+
return textShape;
|
|
30106
|
+
}
|
|
30107
|
+
_getHandlerTextStyle(value, position) {
|
|
30108
|
+
const { align, handlerSize = 14, handlerText = {}, railHeight, railWidth, slidable } = this.attribute;
|
|
30109
|
+
if (isFunction(handlerText.style)) {
|
|
30110
|
+
return handlerText.style(value, position, {
|
|
30111
|
+
layout: this.attribute.layout,
|
|
30112
|
+
align,
|
|
30113
|
+
railWidth,
|
|
30114
|
+
railHeight,
|
|
30115
|
+
handlerSize,
|
|
30116
|
+
slidable
|
|
30117
|
+
});
|
|
30118
|
+
}
|
|
30119
|
+
return handlerText.style;
|
|
30120
|
+
}
|
|
30121
|
+
_getHandlerTextAttributes(value, position) {
|
|
30122
|
+
var _a, _b;
|
|
30058
30123
|
const { align, handlerSize = 14, handlerText = {}, railHeight, railWidth, slidable } = this.attribute;
|
|
30059
30124
|
const isHorizontal = this._isHorizontal;
|
|
30060
30125
|
const pos = this.calculatePosByValue(value, position);
|
|
30061
30126
|
const textSpace = (_a = handlerText.space) !== null && _a !== void 0 ? _a : 4;
|
|
30127
|
+
const handlerTextStyle = this._getHandlerTextStyle(value, position);
|
|
30062
30128
|
const textStyle = {
|
|
30063
30129
|
text: handlerText.formatter ? handlerText.formatter(value) : value.toFixed((_b = handlerText.precision) !== null && _b !== void 0 ? _b : 0),
|
|
30064
|
-
lineHeight:
|
|
30130
|
+
lineHeight: handlerTextStyle === null || handlerTextStyle === void 0 ? void 0 : handlerTextStyle.lineHeight,
|
|
30065
30131
|
cursor: slidable === false ? 'default' : getDefaultCursor(isHorizontal)
|
|
30066
30132
|
};
|
|
30067
30133
|
if (isHorizontal) {
|
|
@@ -30092,8 +30158,7 @@ class Slider extends AbstractComponent {
|
|
|
30092
30158
|
textStyle.y = pos;
|
|
30093
30159
|
}
|
|
30094
30160
|
}
|
|
30095
|
-
|
|
30096
|
-
return textShape;
|
|
30161
|
+
return Object.assign(Object.assign({}, textStyle), handlerTextStyle);
|
|
30097
30162
|
}
|
|
30098
30163
|
_renderTooltip() {
|
|
30099
30164
|
var _a;
|
|
@@ -30264,16 +30329,12 @@ class Slider extends AbstractComponent {
|
|
|
30264
30329
|
}
|
|
30265
30330
|
}
|
|
30266
30331
|
_updateHandler(handler, position, value) {
|
|
30267
|
-
var _a;
|
|
30268
30332
|
const isHorizontal = this._isHorizontal;
|
|
30269
30333
|
handler.setAttribute(isHorizontal ? 'x' : 'y', position);
|
|
30270
30334
|
const updateHandlerText = handler.name === SLIDER_ELEMENT_NAME.startHandler ? this._startHandlerText : this._endHandlerText;
|
|
30271
30335
|
if (updateHandlerText) {
|
|
30272
|
-
const
|
|
30273
|
-
updateHandlerText.setAttributes(
|
|
30274
|
-
text: handlerText.formatter ? handlerText.formatter(value) : value.toFixed((_a = handlerText.precision) !== null && _a !== void 0 ? _a : 0),
|
|
30275
|
-
[isHorizontal ? 'x' : 'y']: position
|
|
30276
|
-
});
|
|
30336
|
+
const handlerPosition = handler.name === SLIDER_ELEMENT_NAME.startHandler ? 'start' : 'end';
|
|
30337
|
+
updateHandlerText.setAttributes(this._getHandlerTextAttributes(value, handlerPosition));
|
|
30277
30338
|
}
|
|
30278
30339
|
if (handler.name === SLIDER_ELEMENT_NAME.startHandler) {
|
|
30279
30340
|
this._currentValue.startValue = value;
|
|
@@ -30285,13 +30346,9 @@ class Slider extends AbstractComponent {
|
|
|
30285
30346
|
}
|
|
30286
30347
|
}
|
|
30287
30348
|
_updateHandlerText(handlerText, position, value) {
|
|
30288
|
-
var _a;
|
|
30289
30349
|
const isHorizontal = this._isHorizontal;
|
|
30290
|
-
const
|
|
30291
|
-
handlerText.setAttributes(
|
|
30292
|
-
[isHorizontal ? 'x' : 'y']: position,
|
|
30293
|
-
text: handlerTextAttr.formatter ? handlerTextAttr.formatter(value) : value.toFixed((_a = handlerTextAttr.precision) !== null && _a !== void 0 ? _a : 0)
|
|
30294
|
-
});
|
|
30350
|
+
const handlerPosition = handlerText.name === SLIDER_ELEMENT_NAME.startHandlerText ? 'start' : 'end';
|
|
30351
|
+
handlerText.setAttributes(this._getHandlerTextAttributes(value, handlerPosition));
|
|
30295
30352
|
const updateHandler = handlerText.name === SLIDER_ELEMENT_NAME.startHandlerText ? this._startHandler : this._endHandler;
|
|
30296
30353
|
if (updateHandler) {
|
|
30297
30354
|
updateHandler.setAttributes({
|
|
@@ -30358,7 +30415,7 @@ class Slider extends AbstractComponent {
|
|
|
30358
30415
|
}
|
|
30359
30416
|
release(all) {
|
|
30360
30417
|
super.release(all);
|
|
30361
|
-
(vglobal.env === 'browser' ? vglobal : this.stage).
|
|
30418
|
+
(vglobal.env === 'browser' ? vglobal : this.stage).removeEventListener('touchmove', this._handleTouchMove, {
|
|
30362
30419
|
passive: false
|
|
30363
30420
|
});
|
|
30364
30421
|
this._clearAllDragEvents();
|
|
@@ -31682,6 +31739,12 @@ class BasePlayer extends AbstractComponent {
|
|
|
31682
31739
|
value: this._data[dataIndex]
|
|
31683
31740
|
});
|
|
31684
31741
|
}
|
|
31742
|
+
release(all) {
|
|
31743
|
+
if (!this._sliderVisible) {
|
|
31744
|
+
this._slider.release(all);
|
|
31745
|
+
}
|
|
31746
|
+
super.release(all);
|
|
31747
|
+
}
|
|
31685
31748
|
}
|
|
31686
31749
|
BasePlayer.defaultAttributes = {
|
|
31687
31750
|
visible: true,
|
|
@@ -34933,6 +34996,6 @@ TableSeriesNumber.defaultAttributes = {
|
|
|
34933
34996
|
select: true
|
|
34934
34997
|
};
|
|
34935
34998
|
|
|
34936
|
-
const version = "1.0.41-alpha.
|
|
34999
|
+
const version = "1.0.41-alpha.3";
|
|
34937
35000
|
|
|
34938
35001
|
export { AXIS_ELEMENT_NAME, AbstractComponent, ArcInfo, ArcLabel, ArcSegment, AxisStateValue, BasePlayer, Brush, CheckBox, CircleAxis, CircleAxisGrid, CircleCrosshair, ColorContinuousLegend, ContinuousPlayer, DEFAULT_ITEM_SPACE_COL, DEFAULT_ITEM_SPACE_ROW, DEFAULT_LABEL_SPACE, DEFAULT_PAGER_SPACE, DEFAULT_SHAPE_SIZE, DEFAULT_SHAPE_SPACE, DEFAULT_STATES$1 as DEFAULT_STATES, DEFAULT_TITLE_SPACE, DEFAULT_VALUE_SPACE, DataLabel, DataZoom, DataZoomActiveTag, DirectionEnum, DiscreteLegend, DiscretePlayer, EmptyTip, GroupTransition, IDataZoomEvent, IDataZoomInteractiveEvent, IMarkAreaLabelPosition, IMarkCommonArcLabelPosition, IMarkLineLabelPosition, IMarkPointItemPosition, IOperateType, Indicator, LEGEND_ELEMENT_NAME, LabelBase, LegendEvent, LegendStateValue, LineAxis, LineAxisGrid, LineCrosshair, LineLabel, LinkPath, MarkArcArea, MarkArcLine, MarkArea, MarkLine, MarkPoint, Pager, PlayerEventEnum, PolygonCrosshair, PolygonSectorCrosshair, PopTip, Radio, RectCrosshair, RectLabel, SLIDER_ELEMENT_NAME, ScrollBar, SectorCrosshair, Segment, SeriesNumberCellStateValue, SeriesNumberEvent, SizeContinuousLegend, Slider, StoryLabelItem, Switch, SymbolLabel, TableSeriesNumber, Tag, Timeline, Title, Tooltip, TopZIndex, VTag, WeatherBox, alignTextInLine, angle, angleLabelOrientAttribute, angleTo, cartesianTicks, clampRadian, computeOffsetForlimit, continuousTicks, contrastAccessibilityChecker, convertDomainToTickData, createTextGraphicByType, deltaXYToAngle, fuzzyEqualNumber, getAxisBreakSymbolAttrs, getCircleLabelPosition, getCirclePoints, getCircleVerticalVector, getElMap, getHorizontalPath, getMarksByName, getNoneGroupMarksByName, getPolarAngleLabelPosition, getPolygonPath, getSizeHandlerPath, getTextAlignAttrOfVerticalDir, getTextType, getVerticalCoord, getVerticalPath, hasOverlap, htmlAttributeTransform, initTextMeasure, isInRange, isPostiveXAxis, isRichText, isVisible, labelSmartInvert, length, limitShapeInBounds, linearDiscreteTicks, loadPoptip, loadScrollbar, measureTextSize, normalize, polarAngleAxisDiscreteTicks, polarTicks, reactAttributeTransform, registerArcDataLabel, registerLineDataLabel, registerMarkArcAreaAnimate, registerMarkArcLineAnimate, registerMarkAreaAnimate, registerMarkLineAnimate, registerMarkPointAnimate, registerRectDataLabel, registerSymbolDataLabel, removeRepeatPoint, richTextAttributeTransform, scale, scrollbarModule, setPoptipTheme, smartInvertStrategy, tan2AngleToAngle, textIntersect, ticks, traverseGroup, version };
|
|
@@ -104,7 +104,7 @@ export class DataZoomInteraction extends EventEmitter {
|
|
|
104
104
|
});
|
|
105
105
|
}
|
|
106
106
|
clearVGlobalEvents() {
|
|
107
|
-
("browser" === vglobal.env ? vglobal : this.stage).
|
|
107
|
+
("browser" === vglobal.env ? vglobal : this.stage).removeEventListener("touchmove", this._handleTouchMove, {
|
|
108
108
|
passive: !1
|
|
109
109
|
});
|
|
110
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data-zoom/interaction.ts"],"names":[],"mappings":"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","file":"interaction.js","sourcesContent":["import { DataZoomActiveTag, IDataZoomInteractiveEvent, type DataZoomAttributes } from './type';\nimport { getEndTriggersOfDrag } from '../util/event';\nimport type { IPointLike, Dict, Matrix } from '@visactor/vutils';\nimport { vglobal } from '@visactor/vrender-core';\nimport type { FederatedPointerEvent, IGroup, IRect, ISymbol, IStage } from '@visactor/vrender-core';\nimport { clamp, debounce, EventEmitter, throttle } from '@visactor/vutils';\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\nexport interface InteractionAttributes {\n stage: IStage;\n attribute: Partial<Required<DataZoomAttributes>>;\n startHandlerMask?: IRect;\n endHandlerMask?: IRect;\n middleHandlerSymbol?: ISymbol;\n middleHandlerRect?: IRect;\n selectedBackground?: IRect;\n background?: IRect;\n previewGroup?: IGroup;\n selectedPreviewGroup?: IGroup;\n getLayoutAttrFromConfig?: any;\n getState: () => { start: number; end: number };\n setState: (state: { start: number; end: number }) => void;\n getGlobalTransMatrix: () => Matrix;\n}\nexport class DataZoomInteraction extends EventEmitter {\n /** 上层透传 */\n stage: IStage;\n attribute!: Partial<Required<DataZoomAttributes>>;\n private _getLayoutAttrFromConfig: any;\n private _getState: () => { start: number; end: number };\n private _setState: (state: { start: number; end: number }) => void;\n private _getGlobalTransMatrix: () => Matrix;\n\n /** 图元 */\n private _startHandlerMask: IRect | undefined;\n private _middleHandlerSymbol: ISymbol | undefined;\n private _middleHandlerRect: IRect | undefined;\n private _endHandlerMask: IRect | undefined;\n private _background: IRect | undefined;\n private _previewGroup: IGroup | undefined;\n private _selectedPreviewGroup: IGroup | undefined;\n private _selectedBackground: IRect | undefined;\n\n /** 交互 */\n private _activeTag!: DataZoomActiveTag;\n private _activeItem!: any;\n private _activeState = false;\n private _activeCache: {\n startPos: IPointLike;\n lastPos: IPointLike;\n } = {\n startPos: { x: 0, y: 0 },\n lastPos: { x: 0, y: 0 }\n };\n private _layoutCache: {\n attPos: 'x' | 'y';\n attSize: 'width' | 'height';\n size: number;\n } = {\n attPos: 'x',\n attSize: 'width',\n size: 0\n };\n private _spanCache: number;\n\n private _onHandlerPointerMove: (e: FederatedPointerEvent) => void;\n\n constructor(props: InteractionAttributes) {\n super();\n this._initAttrs(props);\n }\n\n setAttributes(props: InteractionAttributes): void {\n this._initAttrs(props);\n this._onHandlerPointerMove =\n (this.attribute?.delayTime ?? 0) === 0\n ? this._pointerMove\n : delayMap[this.attribute?.delayType ?? 'debounce'](this._pointerMove, this.attribute?.delayTime ?? 0);\n }\n\n private _initAttrs(props: InteractionAttributes) {\n this.stage = props.stage;\n this.attribute = props.attribute;\n this._startHandlerMask = props.startHandlerMask;\n this._endHandlerMask = props.endHandlerMask;\n this._middleHandlerSymbol = props.middleHandlerSymbol;\n this._middleHandlerRect = props.middleHandlerRect;\n this._selectedBackground = props.selectedBackground;\n this._background = props.background;\n this._previewGroup = props.previewGroup;\n this._selectedPreviewGroup = props.selectedPreviewGroup;\n this._getLayoutAttrFromConfig = props.getLayoutAttrFromConfig;\n this._getState = props.getState;\n this._setState = props.setState;\n\n const { width, height } = this._getLayoutAttrFromConfig();\n this._spanCache = this._getState().end - this._getState().start;\n const isHorizontal = this.attribute.orient === 'top' || this.attribute.orient === 'bottom';\n this._layoutCache.size = isHorizontal ? width : height;\n this._layoutCache.attPos = isHorizontal ? 'x' : 'y';\n this._layoutCache.attSize = isHorizontal ? 'width' : 'height';\n this._getGlobalTransMatrix = props.getGlobalTransMatrix;\n }\n\n clearDragEvents() {\n const evtTarget = vglobal.env === 'browser' ? vglobal : this.stage;\n const triggers = getEndTriggersOfDrag();\n\n evtTarget.removeEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n triggers.forEach((trigger: string) => {\n evtTarget.removeEventListener(trigger, this._onHandlerPointerUp);\n });\n\n (this as unknown as IGroup).off('pointermove', this._onHandlerPointerMove, {\n capture: true\n });\n }\n\n clearVGlobalEvents() {\n (vglobal.env === 'browser' ? vglobal : this.stage).addEventListener('touchmove', this._handleTouchMove, {\n passive: false\n });\n }\n\n bindEvents(): void {\n const { brushSelect } = this.attribute as DataZoomAttributes;\n // 拖拽开始\n this._startHandlerMask?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'start') as unknown as EventListener\n );\n this._endHandlerMask?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'end') as unknown as EventListener\n );\n this._middleHandlerSymbol?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'middleSymbol') as unknown as EventListener\n );\n this._middleHandlerRect?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'middleRect') as unknown as EventListener\n );\n const selectedTag = brushSelect ? 'background' : 'middleRect';\n this._selectedBackground?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, selectedTag) as unknown as EventListener\n );\n brushSelect &&\n this._background?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'background') as unknown as EventListener\n );\n brushSelect &&\n this._previewGroup?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'background') as unknown as EventListener\n );\n this._selectedPreviewGroup?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, selectedTag) as unknown as EventListener\n );\n\n (vglobal.env === 'browser' ? vglobal : this.stage).addEventListener('touchmove', this._handleTouchMove, {\n passive: false\n });\n }\n private _handleTouchMove = (e: TouchEvent) => {\n if (this._activeState) {\n /**\n * https://developer.mozilla.org/zh-CN/docs/Web/CSS/overscroll-behavior\n * 由于浏览器的overscroll-behavior属性,需要在move的时候阻止浏览器默认行为,否则会因为浏览器检测到scroll行为,阻止pointer事件,\n * 抛出pointercancel事件,导致拖拽行为中断。\n */\n e.preventDefault();\n }\n };\n\n /**\n * 拖拽开始事件\n * @description 开启activeState + 通过tag判断事件在哪个元素上触发 并 更新交互坐标\n */\n private _onHandlerPointerDown = (e: FederatedPointerEvent, tag: string) => {\n // 清除之前的事件,防止没有被清除掉\n this.clearDragEvents();\n if (tag === 'start') {\n this._activeTag = DataZoomActiveTag.startHandler;\n this._activeItem = this._startHandlerMask;\n } else if (tag === 'end') {\n this._activeTag = DataZoomActiveTag.endHandler;\n this._activeItem = this._endHandlerMask;\n } else if (tag === 'middleRect') {\n this._activeTag = DataZoomActiveTag.middleHandler;\n this._activeItem = this._middleHandlerRect;\n } else if (tag === 'middleSymbol') {\n this._activeTag = DataZoomActiveTag.middleHandler;\n this._activeItem = this._middleHandlerSymbol;\n } else if (tag === 'background') {\n this._activeTag = DataZoomActiveTag.background;\n this._activeItem = this._background;\n }\n this._activeState = true;\n this._activeCache.startPos = this._eventPosToStagePos(e);\n this._activeCache.lastPos = this._eventPosToStagePos(e);\n const evtTarget = vglobal.env === 'browser' ? vglobal : this.stage;\n const triggers = getEndTriggersOfDrag();\n\n /**\n * move的时候,需要通过 capture: true,能够在捕获截断被拦截,\n */\n evtTarget.addEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n (this as unknown as IGroup).on('pointermove', this._onHandlerPointerMove, {\n capture: true\n });\n\n triggers.forEach((trigger: string) => {\n evtTarget.addEventListener(trigger, this._onHandlerPointerUp);\n });\n };\n\n /**\n * 拖拽进行事件\n * @description 分为以下四种情况:\n * 1. 在背景 or 背景图表上拖拽 (activeTag === 'background'): 改变lastPos => only renderDragMask\n * 2. 在middleHandler上拖拽 (activeTag === 'middleHandler'): 改变lastPos、start & end + 边界处理: 防止拖拽结果超出背景 => render\n * 3. 在startHandler上拖拽 (activeTag === 'startHandler'): 改变lastPos、start & end + 边界处理: startHandler和endHandler交换 => render\n * 4. 在endHandler上拖拽,同上\n */\n private _pointerMove = (e: FederatedPointerEvent) => {\n const { brushSelect } = this.attribute as DataZoomAttributes;\n const { position } = this._getLayoutAttrFromConfig();\n const pos = this._eventPosToStagePos(e);\n\n const { attPos, size, attSize } = this._layoutCache;\n const dis = (pos[attPos] - this._activeCache.lastPos[attPos]) / size;\n const statePos = (pos[attPos] - position[attPos]) / this._getLayoutAttrFromConfig()[attSize];\n\n let { start, end } = this._getState();\n let shouldRender = true;\n if (this._activeState) {\n if (this._activeTag === DataZoomActiveTag.middleHandler) {\n ({ start, end } = this._moveZoomWithMiddle(dis));\n } else if (this._activeTag === DataZoomActiveTag.startHandler) {\n ({ start, end } = this._moveZoomWithHandler(statePos, 'start'));\n } else if (this._activeTag === DataZoomActiveTag.endHandler) {\n ({ start, end } = this._moveZoomWithHandler(statePos, 'end'));\n } else if (this._activeTag === DataZoomActiveTag.background && brushSelect) {\n ({ start, end } = this._moveZoomWithBackground(statePos));\n shouldRender = false;\n this._dispatchEvent(IDataZoomInteractiveEvent.maskUpdate);\n }\n this._activeCache.lastPos = pos;\n }\n\n // 避免attributes相同时, 重复渲染\n if (this._getState().start !== start || this._getState().end !== end) {\n this._setStateAttr(start, end);\n this._dispatchEvent(IDataZoomInteractiveEvent.stateUpdate, {\n start: this._getState().start,\n end: this._getState().end,\n shouldRender,\n tag: this._activeTag\n });\n if (this.attribute.realTime) {\n this._dispatchEvent(IDataZoomInteractiveEvent.dataZoomUpdate, {\n start: this._getState().start,\n end: this._getState().end,\n shouldRender: true,\n tag: this._activeTag\n });\n }\n }\n };\n\n /** state 边界处理 */\n private _setStateAttr(start: number, end: number) {\n const { zoomLock = false, minSpan = 0, maxSpan = 1 } = this.attribute as DataZoomAttributes;\n const span = end - start;\n if (span !== this._spanCache && (zoomLock || span < minSpan || span > maxSpan)) {\n return;\n }\n this._spanCache = span;\n this._setState({ start, end });\n }\n /**\n * @description 拖拽middleHandler, 改变start和end\n */\n private _moveZoomWithMiddle(dis: number) {\n const { start: staetState, end: endState } = this._getState();\n // 拖拽middleHandler时,限制在background范围内\n if (dis > 0 && endState + dis > 1) {\n dis = 1 - endState;\n } else if (dis < 0 && staetState + dis < 0) {\n dis = -staetState;\n }\n return {\n start: clamp(staetState + dis, 0, 1),\n end: clamp(endState + dis, 0, 1)\n };\n }\n\n /**\n * @description 拖拽startHandler/endHandler, 改变start和end\n */\n private _moveZoomWithHandler(statePos: number, handler: 'start' | 'end') {\n const { start, end } = this._getState();\n let newStart = start;\n let newEnd = end;\n if (handler === 'start') {\n if (statePos > end) {\n newStart = end;\n newEnd = statePos;\n this._activeTag = DataZoomActiveTag.endHandler;\n } else {\n newStart = statePos;\n }\n } else if (handler === 'end') {\n if (statePos < start) {\n newEnd = start;\n newStart = statePos;\n this._activeTag = DataZoomActiveTag.startHandler;\n } else {\n newEnd = statePos;\n }\n }\n return {\n start: clamp(newStart, 0, 1),\n end: clamp(newEnd, 0, 1)\n };\n }\n\n /**\n * @description 拖拽背景, 改变start和end\n */\n private _moveZoomWithBackground(statePos: number) {\n const { position } = this._getLayoutAttrFromConfig();\n const { attSize } = this._layoutCache;\n const startPos =\n (this._activeCache.startPos[this._layoutCache.attPos] - position[this._layoutCache.attPos]) /\n this._getLayoutAttrFromConfig()[attSize];\n const endPos = statePos;\n let start = clamp(startPos, 0, 1);\n let end = clamp(endPos, 0, 1);\n if (start > end) {\n [start, end] = [end, start];\n }\n return { start, end };\n }\n\n /**\n * 拖拽结束事件\n * @description 关闭activeState + 边界情况处理: 防止拖拽后start和end过近\n */\n private _onHandlerPointerUp = (e: FederatedPointerEvent) => {\n if (this._activeState) {\n // brush的时候, 只改变了state, 没有触发重新渲染, 在抬起鼠标时触发\n if (this._activeTag === DataZoomActiveTag.background) {\n this._setStateAttr(this._getState().start, this._getState().end);\n this._dispatchEvent(IDataZoomInteractiveEvent.stateUpdate, {\n start: this._getState().start,\n end: this._getState().end,\n shouldRender: true,\n tag: this._activeTag\n });\n }\n }\n this._activeState = false;\n // 此次dispatch不能被省略\n // 因为pointermove时, 已经将状态更新至最新, 所以在pointerup时, 必定start = state.start & end = state.end\n // 而realTime = false时, 需要依赖这次dispatch来更新图表图元\n this._dispatchEvent(IDataZoomInteractiveEvent.dataZoomUpdate, {\n start: this._getState().start,\n end: this._getState().end,\n shouldRender: true,\n tag: this._activeTag\n });\n\n this.clearDragEvents();\n };\n\n /** 事件系统坐标转换为stage坐标 */\n private _eventPosToStagePos(e: FederatedPointerEvent) {\n const result = { x: 0, y: 0 };\n // 1. 外部坐标 -> 内部坐标\n const stagePoints = this.stage?.eventPointTransform(e as any) ?? { x: 0, y: 0 }; // updateSpec过程中交互的话, stage可能为空\n // 2. 内部坐标 -> 组件坐标 (比如: 给layer设置 scale / x / y)\n this._getGlobalTransMatrix().transformPoint(stagePoints, result);\n return result;\n }\n\n protected _dispatchEvent(eventName: IDataZoomInteractiveEvent, details?: Dict<any>) {\n this.emit(eventName, details);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/data-zoom/interaction.ts"],"names":[],"mappings":"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","file":"interaction.js","sourcesContent":["import { DataZoomActiveTag, IDataZoomInteractiveEvent, type DataZoomAttributes } from './type';\nimport { getEndTriggersOfDrag } from '../util/event';\nimport type { IPointLike, Dict, Matrix } from '@visactor/vutils';\nimport { vglobal } from '@visactor/vrender-core';\nimport type { FederatedPointerEvent, IGroup, IRect, ISymbol, IStage } from '@visactor/vrender-core';\nimport { clamp, debounce, EventEmitter, throttle } from '@visactor/vutils';\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\nexport interface InteractionAttributes {\n stage: IStage;\n attribute: Partial<Required<DataZoomAttributes>>;\n startHandlerMask?: IRect;\n endHandlerMask?: IRect;\n middleHandlerSymbol?: ISymbol;\n middleHandlerRect?: IRect;\n selectedBackground?: IRect;\n background?: IRect;\n previewGroup?: IGroup;\n selectedPreviewGroup?: IGroup;\n getLayoutAttrFromConfig?: any;\n getState: () => { start: number; end: number };\n setState: (state: { start: number; end: number }) => void;\n getGlobalTransMatrix: () => Matrix;\n}\nexport class DataZoomInteraction extends EventEmitter {\n /** 上层透传 */\n stage: IStage;\n attribute!: Partial<Required<DataZoomAttributes>>;\n private _getLayoutAttrFromConfig: any;\n private _getState: () => { start: number; end: number };\n private _setState: (state: { start: number; end: number }) => void;\n private _getGlobalTransMatrix: () => Matrix;\n\n /** 图元 */\n private _startHandlerMask: IRect | undefined;\n private _middleHandlerSymbol: ISymbol | undefined;\n private _middleHandlerRect: IRect | undefined;\n private _endHandlerMask: IRect | undefined;\n private _background: IRect | undefined;\n private _previewGroup: IGroup | undefined;\n private _selectedPreviewGroup: IGroup | undefined;\n private _selectedBackground: IRect | undefined;\n\n /** 交互 */\n private _activeTag!: DataZoomActiveTag;\n private _activeItem!: any;\n private _activeState = false;\n private _activeCache: {\n startPos: IPointLike;\n lastPos: IPointLike;\n } = {\n startPos: { x: 0, y: 0 },\n lastPos: { x: 0, y: 0 }\n };\n private _layoutCache: {\n attPos: 'x' | 'y';\n attSize: 'width' | 'height';\n size: number;\n } = {\n attPos: 'x',\n attSize: 'width',\n size: 0\n };\n private _spanCache: number;\n\n private _onHandlerPointerMove: (e: FederatedPointerEvent) => void;\n\n constructor(props: InteractionAttributes) {\n super();\n this._initAttrs(props);\n }\n\n setAttributes(props: InteractionAttributes): void {\n this._initAttrs(props);\n this._onHandlerPointerMove =\n (this.attribute?.delayTime ?? 0) === 0\n ? this._pointerMove\n : delayMap[this.attribute?.delayType ?? 'debounce'](this._pointerMove, this.attribute?.delayTime ?? 0);\n }\n\n private _initAttrs(props: InteractionAttributes) {\n this.stage = props.stage;\n this.attribute = props.attribute;\n this._startHandlerMask = props.startHandlerMask;\n this._endHandlerMask = props.endHandlerMask;\n this._middleHandlerSymbol = props.middleHandlerSymbol;\n this._middleHandlerRect = props.middleHandlerRect;\n this._selectedBackground = props.selectedBackground;\n this._background = props.background;\n this._previewGroup = props.previewGroup;\n this._selectedPreviewGroup = props.selectedPreviewGroup;\n this._getLayoutAttrFromConfig = props.getLayoutAttrFromConfig;\n this._getState = props.getState;\n this._setState = props.setState;\n\n const { width, height } = this._getLayoutAttrFromConfig();\n this._spanCache = this._getState().end - this._getState().start;\n const isHorizontal = this.attribute.orient === 'top' || this.attribute.orient === 'bottom';\n this._layoutCache.size = isHorizontal ? width : height;\n this._layoutCache.attPos = isHorizontal ? 'x' : 'y';\n this._layoutCache.attSize = isHorizontal ? 'width' : 'height';\n this._getGlobalTransMatrix = props.getGlobalTransMatrix;\n }\n\n clearDragEvents() {\n const evtTarget = vglobal.env === 'browser' ? vglobal : this.stage;\n const triggers = getEndTriggersOfDrag();\n\n evtTarget.removeEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n triggers.forEach((trigger: string) => {\n evtTarget.removeEventListener(trigger, this._onHandlerPointerUp);\n });\n\n (this as unknown as IGroup).off('pointermove', this._onHandlerPointerMove, {\n capture: true\n });\n }\n\n clearVGlobalEvents() {\n (vglobal.env === 'browser' ? vglobal : this.stage).removeEventListener('touchmove', this._handleTouchMove, {\n passive: false\n });\n }\n\n bindEvents(): void {\n const { brushSelect } = this.attribute as DataZoomAttributes;\n // 拖拽开始\n this._startHandlerMask?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'start') as unknown as EventListener\n );\n this._endHandlerMask?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'end') as unknown as EventListener\n );\n this._middleHandlerSymbol?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'middleSymbol') as unknown as EventListener\n );\n this._middleHandlerRect?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'middleRect') as unknown as EventListener\n );\n const selectedTag = brushSelect ? 'background' : 'middleRect';\n this._selectedBackground?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, selectedTag) as unknown as EventListener\n );\n brushSelect &&\n this._background?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'background') as unknown as EventListener\n );\n brushSelect &&\n this._previewGroup?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'background') as unknown as EventListener\n );\n this._selectedPreviewGroup?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, selectedTag) as unknown as EventListener\n );\n\n (vglobal.env === 'browser' ? vglobal : this.stage).addEventListener('touchmove', this._handleTouchMove, {\n passive: false\n });\n }\n private _handleTouchMove = (e: TouchEvent) => {\n if (this._activeState) {\n /**\n * https://developer.mozilla.org/zh-CN/docs/Web/CSS/overscroll-behavior\n * 由于浏览器的overscroll-behavior属性,需要在move的时候阻止浏览器默认行为,否则会因为浏览器检测到scroll行为,阻止pointer事件,\n * 抛出pointercancel事件,导致拖拽行为中断。\n */\n e.preventDefault();\n }\n };\n\n /**\n * 拖拽开始事件\n * @description 开启activeState + 通过tag判断事件在哪个元素上触发 并 更新交互坐标\n */\n private _onHandlerPointerDown = (e: FederatedPointerEvent, tag: string) => {\n // 清除之前的事件,防止没有被清除掉\n this.clearDragEvents();\n if (tag === 'start') {\n this._activeTag = DataZoomActiveTag.startHandler;\n this._activeItem = this._startHandlerMask;\n } else if (tag === 'end') {\n this._activeTag = DataZoomActiveTag.endHandler;\n this._activeItem = this._endHandlerMask;\n } else if (tag === 'middleRect') {\n this._activeTag = DataZoomActiveTag.middleHandler;\n this._activeItem = this._middleHandlerRect;\n } else if (tag === 'middleSymbol') {\n this._activeTag = DataZoomActiveTag.middleHandler;\n this._activeItem = this._middleHandlerSymbol;\n } else if (tag === 'background') {\n this._activeTag = DataZoomActiveTag.background;\n this._activeItem = this._background;\n }\n this._activeState = true;\n this._activeCache.startPos = this._eventPosToStagePos(e);\n this._activeCache.lastPos = this._eventPosToStagePos(e);\n const evtTarget = vglobal.env === 'browser' ? vglobal : this.stage;\n const triggers = getEndTriggersOfDrag();\n\n /**\n * move的时候,需要通过 capture: true,能够在捕获截断被拦截,\n */\n evtTarget.addEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n (this as unknown as IGroup).on('pointermove', this._onHandlerPointerMove, {\n capture: true\n });\n\n triggers.forEach((trigger: string) => {\n evtTarget.addEventListener(trigger, this._onHandlerPointerUp);\n });\n };\n\n /**\n * 拖拽进行事件\n * @description 分为以下四种情况:\n * 1. 在背景 or 背景图表上拖拽 (activeTag === 'background'): 改变lastPos => only renderDragMask\n * 2. 在middleHandler上拖拽 (activeTag === 'middleHandler'): 改变lastPos、start & end + 边界处理: 防止拖拽结果超出背景 => render\n * 3. 在startHandler上拖拽 (activeTag === 'startHandler'): 改变lastPos、start & end + 边界处理: startHandler和endHandler交换 => render\n * 4. 在endHandler上拖拽,同上\n */\n private _pointerMove = (e: FederatedPointerEvent) => {\n const { brushSelect } = this.attribute as DataZoomAttributes;\n const { position } = this._getLayoutAttrFromConfig();\n const pos = this._eventPosToStagePos(e);\n\n const { attPos, size, attSize } = this._layoutCache;\n const dis = (pos[attPos] - this._activeCache.lastPos[attPos]) / size;\n const statePos = (pos[attPos] - position[attPos]) / this._getLayoutAttrFromConfig()[attSize];\n\n let { start, end } = this._getState();\n let shouldRender = true;\n if (this._activeState) {\n if (this._activeTag === DataZoomActiveTag.middleHandler) {\n ({ start, end } = this._moveZoomWithMiddle(dis));\n } else if (this._activeTag === DataZoomActiveTag.startHandler) {\n ({ start, end } = this._moveZoomWithHandler(statePos, 'start'));\n } else if (this._activeTag === DataZoomActiveTag.endHandler) {\n ({ start, end } = this._moveZoomWithHandler(statePos, 'end'));\n } else if (this._activeTag === DataZoomActiveTag.background && brushSelect) {\n ({ start, end } = this._moveZoomWithBackground(statePos));\n shouldRender = false;\n this._dispatchEvent(IDataZoomInteractiveEvent.maskUpdate);\n }\n this._activeCache.lastPos = pos;\n }\n\n // 避免attributes相同时, 重复渲染\n if (this._getState().start !== start || this._getState().end !== end) {\n this._setStateAttr(start, end);\n this._dispatchEvent(IDataZoomInteractiveEvent.stateUpdate, {\n start: this._getState().start,\n end: this._getState().end,\n shouldRender,\n tag: this._activeTag\n });\n if (this.attribute.realTime) {\n this._dispatchEvent(IDataZoomInteractiveEvent.dataZoomUpdate, {\n start: this._getState().start,\n end: this._getState().end,\n shouldRender: true,\n tag: this._activeTag\n });\n }\n }\n };\n\n /** state 边界处理 */\n private _setStateAttr(start: number, end: number) {\n const { zoomLock = false, minSpan = 0, maxSpan = 1 } = this.attribute as DataZoomAttributes;\n const span = end - start;\n if (span !== this._spanCache && (zoomLock || span < minSpan || span > maxSpan)) {\n return;\n }\n this._spanCache = span;\n this._setState({ start, end });\n }\n /**\n * @description 拖拽middleHandler, 改变start和end\n */\n private _moveZoomWithMiddle(dis: number) {\n const { start: staetState, end: endState } = this._getState();\n // 拖拽middleHandler时,限制在background范围内\n if (dis > 0 && endState + dis > 1) {\n dis = 1 - endState;\n } else if (dis < 0 && staetState + dis < 0) {\n dis = -staetState;\n }\n return {\n start: clamp(staetState + dis, 0, 1),\n end: clamp(endState + dis, 0, 1)\n };\n }\n\n /**\n * @description 拖拽startHandler/endHandler, 改变start和end\n */\n private _moveZoomWithHandler(statePos: number, handler: 'start' | 'end') {\n const { start, end } = this._getState();\n let newStart = start;\n let newEnd = end;\n if (handler === 'start') {\n if (statePos > end) {\n newStart = end;\n newEnd = statePos;\n this._activeTag = DataZoomActiveTag.endHandler;\n } else {\n newStart = statePos;\n }\n } else if (handler === 'end') {\n if (statePos < start) {\n newEnd = start;\n newStart = statePos;\n this._activeTag = DataZoomActiveTag.startHandler;\n } else {\n newEnd = statePos;\n }\n }\n return {\n start: clamp(newStart, 0, 1),\n end: clamp(newEnd, 0, 1)\n };\n }\n\n /**\n * @description 拖拽背景, 改变start和end\n */\n private _moveZoomWithBackground(statePos: number) {\n const { position } = this._getLayoutAttrFromConfig();\n const { attSize } = this._layoutCache;\n const startPos =\n (this._activeCache.startPos[this._layoutCache.attPos] - position[this._layoutCache.attPos]) /\n this._getLayoutAttrFromConfig()[attSize];\n const endPos = statePos;\n let start = clamp(startPos, 0, 1);\n let end = clamp(endPos, 0, 1);\n if (start > end) {\n [start, end] = [end, start];\n }\n return { start, end };\n }\n\n /**\n * 拖拽结束事件\n * @description 关闭activeState + 边界情况处理: 防止拖拽后start和end过近\n */\n private _onHandlerPointerUp = (e: FederatedPointerEvent) => {\n if (this._activeState) {\n // brush的时候, 只改变了state, 没有触发重新渲染, 在抬起鼠标时触发\n if (this._activeTag === DataZoomActiveTag.background) {\n this._setStateAttr(this._getState().start, this._getState().end);\n this._dispatchEvent(IDataZoomInteractiveEvent.stateUpdate, {\n start: this._getState().start,\n end: this._getState().end,\n shouldRender: true,\n tag: this._activeTag\n });\n }\n }\n this._activeState = false;\n // 此次dispatch不能被省略\n // 因为pointermove时, 已经将状态更新至最新, 所以在pointerup时, 必定start = state.start & end = state.end\n // 而realTime = false时, 需要依赖这次dispatch来更新图表图元\n this._dispatchEvent(IDataZoomInteractiveEvent.dataZoomUpdate, {\n start: this._getState().start,\n end: this._getState().end,\n shouldRender: true,\n tag: this._activeTag\n });\n\n this.clearDragEvents();\n };\n\n /** 事件系统坐标转换为stage坐标 */\n private _eventPosToStagePos(e: FederatedPointerEvent) {\n const result = { x: 0, y: 0 };\n // 1. 外部坐标 -> 内部坐标\n const stagePoints = this.stage?.eventPointTransform(e as any) ?? { x: 0, y: 0 }; // updateSpec过程中交互的话, stage可能为空\n // 2. 内部坐标 -> 组件坐标 (比如: 给layer设置 scale / x / y)\n this._getGlobalTransMatrix().transformPoint(stagePoints, result);\n return result;\n }\n\n protected _dispatchEvent(eventName: IDataZoomInteractiveEvent, details?: Dict<any>) {\n this.emit(eventName, details);\n }\n}\n"]}
|
package/es/index.d.ts
CHANGED
package/es/index.js
CHANGED
package/es/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,OAAO,GAAG,gBAAgB,CAAC;AAExC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC","file":"index.js","sourcesContent":["// 导出版本号\nexport const version = \"1.0.41-alpha.
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,OAAO,GAAG,gBAAgB,CAAC;AAExC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC","file":"index.js","sourcesContent":["// 导出版本号\nexport const version = \"1.0.41-alpha.3\";\n\nexport * from './core/base';\nexport * from './core/type';\nexport * from './scrollbar';\nexport * from './tag';\nexport * from './poptip';\nexport * from './crosshair';\nexport * from './label';\nexport * from './axis';\nexport * from './axis/grid';\nexport * from './segment';\nexport * from './data-zoom';\nexport * from './marker';\nexport * from './pager';\nexport * from './legend';\nexport * from './title';\nexport * from './indicator';\nexport * from './slider';\nexport * from './link-path';\nexport * from './player';\nexport * from './brush';\nexport * from './tooltip';\nexport * from './timeline';\nexport * from './interface';\nexport * from './jsx';\nexport * from './checkbox';\nexport * from './radio';\nexport * from './empty-tip';\nexport * from './weather';\nexport * from './util';\nexport * from './switch';\nexport * from './label-item';\nexport * from './table-series-number';\n"]}
|
package/es/label/base.js
CHANGED
|
@@ -488,7 +488,9 @@ export class LabelBase extends AnimateComponent {
|
|
|
488
488
|
const label = labels[i];
|
|
489
489
|
if (!label) continue;
|
|
490
490
|
const baseMark = this.getRelatedGraphic(label.attribute);
|
|
491
|
-
let backgroundColor = baseMark.getAttributes(!0).fill
|
|
491
|
+
let backgroundColor = baseMark.getAttributes(!0).fill;
|
|
492
|
+
const backgroundOpacity = baseMark.getAttributes(!0).fillOpacity;
|
|
493
|
+
let foregroundColor = label.attribute.fill;
|
|
492
494
|
if (isObject(backgroundColor) && backgroundColor.gradient) {
|
|
493
495
|
const firstStopColor = null === (_g = null === (_f = backgroundColor.stops) || void 0 === _f ? void 0 : _f[0]) || void 0 === _g ? void 0 : _g.color;
|
|
494
496
|
firstStopColor && (backgroundColor = firstStopColor, foregroundColor = firstStopColor);
|
|
@@ -499,11 +501,26 @@ export class LabelBase extends AnimateComponent {
|
|
|
499
501
|
if (fill && label.setAttributes({
|
|
500
502
|
fill: fill
|
|
501
503
|
}), 0 === label.attribute.lineWidth || 0 === label.attribute.strokeOpacity) continue;
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
504
|
+
if ("background" === interactInvertType) label.setAttributes({
|
|
505
|
+
stroke: !1
|
|
506
|
+
}); else {
|
|
507
|
+
const stroke = smartInvertStrategy(strokeStrategy, backgroundColor, invertColor, similarColor);
|
|
508
|
+
stroke && label.setAttributes({
|
|
509
|
+
stroke: stroke
|
|
510
|
+
});
|
|
511
|
+
}
|
|
506
512
|
} else if (isIntersect && "none" !== interactInvertType) {
|
|
513
|
+
if ("background" === interactInvertType) {
|
|
514
|
+
const fill = smartInvertStrategy(fillStrategy, backgroundColor, invertColor, similarColor);
|
|
515
|
+
fill && label.setAttributes({
|
|
516
|
+
fill: fill
|
|
517
|
+
}), label.setAttributes({
|
|
518
|
+
stroke: !1,
|
|
519
|
+
background: backgroundColor,
|
|
520
|
+
backgroundOpacity: backgroundOpacity
|
|
521
|
+
});
|
|
522
|
+
continue;
|
|
523
|
+
}
|
|
507
524
|
if (0 === label.attribute.lineWidth || 0 === label.attribute.strokeOpacity) continue;
|
|
508
525
|
if (label.attribute.stroke) {
|
|
509
526
|
label.setAttributes({
|
|
@@ -520,6 +537,9 @@ export class LabelBase extends AnimateComponent {
|
|
|
520
537
|
stroke: stroke
|
|
521
538
|
});
|
|
522
539
|
}
|
|
540
|
+
!1 === isInside && "background" === interactInvertType && label.setAttributes({
|
|
541
|
+
background: null
|
|
542
|
+
});
|
|
523
543
|
}
|
|
524
544
|
}
|
|
525
545
|
_canPlaceInside(textBound, shapeBound) {
|