@visactor/vgrammar-core 0.11.0-alpha.1 → 0.11.0
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/component/label.js.map +1 -1
- package/cjs/graph/attributes/line.d.ts +2 -0
- package/cjs/graph/attributes/line.js +38 -5
- package/cjs/graph/attributes/line.js.map +1 -1
- package/cjs/graph/element.js +15 -6
- package/cjs/graph/element.js.map +1 -1
- package/cjs/graph/enums.d.ts +2 -1
- package/cjs/graph/enums.js +1 -1
- package/cjs/graph/enums.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/interactions/element-highlight.d.ts +5 -2
- package/cjs/interactions/element-highlight.js +8 -23
- package/cjs/interactions/element-highlight.js.map +1 -1
- package/cjs/interactions/element-select.d.ts +6 -3
- package/cjs/interactions/element-select.js +20 -28
- package/cjs/interactions/element-select.js.map +1 -1
- package/cjs/interactions/filter.js +1 -1
- package/cjs/interactions/filter.js.map +1 -1
- package/cjs/interactions/fish-eye.js +1 -1
- package/cjs/interactions/fish-eye.js.map +1 -1
- package/cjs/interactions/index.js +4 -0
- package/cjs/interactions/index.js.map +1 -1
- package/cjs/interactions/toggle-state-mixin.d.ts +8 -0
- package/cjs/interactions/toggle-state-mixin.js +30 -0
- package/cjs/interactions/toggle-state-mixin.js.map +1 -0
- package/cjs/interactions/utils.d.ts +2 -1
- package/cjs/interactions/utils.js +15 -2
- package/cjs/interactions/utils.js.map +1 -1
- package/cjs/interactions/view-navigation-base.js +1 -1
- package/cjs/interactions/view-navigation-base.js.map +1 -1
- package/cjs/transforms/data/sampling.js.map +1 -1
- package/cjs/types/dataflow.d.ts +1 -2
- package/cjs/types/dataflow.js.map +1 -1
- package/cjs/types/grammar.d.ts +0 -1
- package/cjs/types/grammar.js.map +1 -1
- package/cjs/types/interaction.d.ts +4 -0
- package/cjs/types/interaction.js.map +1 -1
- package/cjs/types/mark.d.ts +1 -1
- package/cjs/types/mark.js.map +1 -1
- package/cjs/types/plot.d.ts +0 -1
- package/cjs/types/plot.js.map +1 -1
- package/cjs/types/transform.d.ts +1 -1
- package/cjs/types/transform.js.map +1 -1
- package/cjs/types/view.d.ts +2 -5
- package/cjs/types/view.js.map +1 -1
- package/cjs/util/data.d.ts +0 -1
- package/cjs/util/data.js +1 -37
- package/cjs/util/data.js.map +1 -1
- package/cjs/view/View.d.ts +2 -10
- package/cjs/view/View.js +20 -103
- package/cjs/view/View.js.map +1 -1
- package/cjs/view/data.d.ts +1 -2
- package/cjs/view/data.js +7 -49
- package/cjs/view/data.js.map +1 -1
- package/cjs/view/dataflow.d.ts +1 -6
- package/cjs/view/dataflow.js +7 -72
- package/cjs/view/dataflow.js.map +1 -1
- package/cjs/view/grammar-base.d.ts +3 -6
- package/cjs/view/grammar-base.js +0 -46
- package/cjs/view/grammar-base.js.map +1 -1
- package/cjs/view/mark.d.ts +1 -2
- package/cjs/view/mark.js +9 -38
- package/cjs/view/mark.js.map +1 -1
- package/es/component/label.js.map +1 -1
- package/es/graph/attributes/line.d.ts +2 -0
- package/es/graph/attributes/line.js +34 -5
- package/es/graph/attributes/line.js.map +1 -1
- package/es/graph/element.js +17 -8
- package/es/graph/element.js.map +1 -1
- package/es/graph/enums.d.ts +2 -1
- package/es/graph/enums.js +1 -1
- package/es/graph/enums.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/interactions/brush-filter.js +1 -2
- package/es/interactions/element-highlight-by-group.js +2 -1
- package/es/interactions/element-highlight.d.ts +5 -2
- package/es/interactions/element-highlight.js +9 -22
- package/es/interactions/element-highlight.js.map +1 -1
- package/es/interactions/element-select.d.ts +6 -3
- package/es/interactions/element-select.js +21 -27
- package/es/interactions/element-select.js.map +1 -1
- package/es/interactions/filter.js +1 -1
- package/es/interactions/filter.js.map +1 -1
- package/es/interactions/fish-eye.js +1 -1
- package/es/interactions/fish-eye.js.map +1 -1
- package/es/interactions/index.js +5 -4
- package/es/interactions/index.js.map +1 -1
- package/es/interactions/legend-filter.js +1 -1
- package/es/interactions/player-filter.js +1 -1
- package/es/interactions/roll-up.js +1 -1
- package/es/interactions/scrollbar-filter.js +1 -1
- package/es/interactions/slider-filter.js +1 -1
- package/es/interactions/toggle-state-mixin.d.ts +8 -0
- package/es/interactions/toggle-state-mixin.js +22 -0
- package/es/interactions/toggle-state-mixin.js.map +1 -0
- package/es/interactions/tooltip.js +1 -1
- package/es/interactions/utils.d.ts +2 -1
- package/es/interactions/utils.js +11 -0
- package/es/interactions/utils.js.map +1 -1
- package/es/interactions/view-navigation-base.js +1 -1
- package/es/interactions/view-navigation-base.js.map +1 -1
- package/es/parse/coordinate.js +1 -1
- package/es/parse/event.js +1 -1
- package/es/parse/mark.js +1 -1
- package/es/parse/option.js +1 -1
- package/es/parse/scale.js +2 -1
- package/es/parse/transform.js +1 -1
- package/es/parse/util.js +1 -1
- package/es/parse/view.js +1 -1
- package/es/transforms/data/sampling.js.map +1 -1
- package/es/types/dataflow.d.ts +1 -2
- package/es/types/dataflow.js.map +1 -1
- package/es/types/grammar.d.ts +0 -1
- package/es/types/grammar.js.map +1 -1
- package/es/types/interaction.d.ts +4 -0
- package/es/types/interaction.js.map +1 -1
- package/es/types/mark.d.ts +1 -1
- package/es/types/mark.js.map +1 -1
- package/es/types/plot.d.ts +0 -1
- package/es/types/plot.js.map +1 -1
- package/es/types/transform.d.ts +1 -1
- package/es/types/transform.js.map +1 -1
- package/es/types/view.d.ts +2 -5
- package/es/types/view.js.map +1 -1
- package/es/util/data.d.ts +0 -1
- package/es/util/data.js +0 -34
- package/es/util/data.js.map +1 -1
- package/es/view/View.d.ts +2 -10
- package/es/view/View.js +19 -103
- package/es/view/View.js.map +1 -1
- package/es/view/data.d.ts +1 -2
- package/es/view/data.js +8 -49
- package/es/view/data.js.map +1 -1
- package/es/view/dataflow.d.ts +1 -6
- package/es/view/dataflow.js +7 -72
- package/es/view/dataflow.js.map +1 -1
- package/es/view/grammar-base.d.ts +3 -6
- package/es/view/grammar-base.js +0 -45
- package/es/view/grammar-base.js.map +1 -1
- package/es/view/mark.d.ts +1 -2
- package/es/view/mark.js +8 -39
- package/es/view/mark.js.map +1 -1
- package/package.json +7 -7
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: !0
|
|
5
5
|
}), exports.ElementHighlight = void 0;
|
|
6
6
|
|
|
7
|
-
const enums_1 = require("../graph/enums"), base_1 = require("./base");
|
|
7
|
+
const enums_1 = require("../graph/enums"), base_1 = require("./base"), utils_1 = require("./utils");
|
|
8
8
|
|
|
9
9
|
class ElementHighlight extends base_1.BaseInteraction {
|
|
10
10
|
constructor(view, options) {
|
|
@@ -12,25 +12,16 @@ class ElementHighlight extends base_1.BaseInteraction {
|
|
|
12
12
|
if (e.element && this._marks && this._marks.includes(e.element.mark)) {
|
|
13
13
|
const {highlightState: highlightState, blurState: blurState} = this.options;
|
|
14
14
|
if (this._lastElement === e.element) return;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
this._lastElement.addState(blurState), e.element.removeState(blurState), hasHighlight = e.element.addState(highlightState); else {
|
|
18
|
-
let hasBlur = !1;
|
|
19
|
-
this._marks.forEach((mark => {
|
|
20
|
-
mark.elements.forEach((el => {
|
|
21
|
-
el === e.element ? (el.removeState(blurState), hasHighlight = el.addState(highlightState)) : (el.removeState(highlightState),
|
|
22
|
-
hasBlur = el.addState(blurState), hasBlur && (this._hasBlur = !0));
|
|
23
|
-
}));
|
|
24
|
-
}));
|
|
25
|
-
}
|
|
26
|
-
this._lastElement = e.element, hasHighlight && this.dispatchEvent("start", {
|
|
15
|
+
this._statedElements = [ e.element ], this.updateStates(highlightState, blurState),
|
|
16
|
+
this._lastElement = e.element, this.dispatchEvent("start", {
|
|
27
17
|
elements: [ e.element ],
|
|
28
18
|
options: this.options
|
|
29
19
|
});
|
|
30
20
|
} else this._lastElement && this.clearPrevElements();
|
|
31
21
|
}, this.handleReset = e => {
|
|
32
22
|
e.element && this._marks && this._marks.includes(e.element.mark) && this.clearPrevElements();
|
|
33
|
-
}, this.options = Object.assign({}, ElementHighlight.defaultOptions, options), this._marks = view.getMarksBySelector(this.options.selector)
|
|
23
|
+
}, this.options = Object.assign({}, ElementHighlight.defaultOptions, options), this._marks = view.getMarksBySelector(this.options.selector),
|
|
24
|
+
this._stateMarks = (0, utils_1.groupMarksByState)(this._marks, [ this.options.highlightState, this.options.blurState ]);
|
|
34
25
|
}
|
|
35
26
|
getEvents() {
|
|
36
27
|
return [ {
|
|
@@ -43,16 +34,10 @@ class ElementHighlight extends base_1.BaseInteraction {
|
|
|
43
34
|
}
|
|
44
35
|
clearPrevElements() {
|
|
45
36
|
const {highlightState: highlightState, blurState: blurState} = this.options;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
this._marks.forEach((mark => {
|
|
49
|
-
mark.elements.forEach((el => {
|
|
50
|
-
hasReset = el.removeState(highlightState), el.removeState(blurState), hasReset && resetElements.push(el);
|
|
51
|
-
}));
|
|
52
|
-
})), resetElements.length && this.dispatchEvent("reset", {
|
|
53
|
-
elements: resetElements,
|
|
37
|
+
this._lastElement && (this.clearAllStates(highlightState, blurState), this.dispatchEvent("reset", {
|
|
38
|
+
elements: [ this._lastElement ],
|
|
54
39
|
options: this.options
|
|
55
|
-
}), this._lastElement = null
|
|
40
|
+
}), this._lastElement = null);
|
|
56
41
|
}
|
|
57
42
|
}
|
|
58
43
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interactions/element-highlight.ts"],"names":[],"mappings":";;;AAAA,0CAAsD;
|
|
1
|
+
{"version":3,"sources":["../src/interactions/element-highlight.ts"],"names":[],"mappings":"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","file":"element-highlight.js","sourcesContent":["import { InteractionStateEnum } from '../graph/enums';\nimport type {\n ElementHighlightOptions,\n IElement,\n IGlyphElement,\n IMark,\n IToggleStateMixin,\n IView,\n InteractionEvent\n} from '../types';\nimport { BaseInteraction } from './base';\nimport { groupMarksByState } from './utils';\n\nexport interface ElementHighlight extends IToggleStateMixin, BaseInteraction<ElementHighlightOptions> {}\n\nexport class ElementHighlight extends BaseInteraction<ElementHighlightOptions> {\n static type: string = 'element-highlight';\n type: string = ElementHighlight.type;\n\n static defaultOptions: ElementHighlightOptions = {\n highlightState: InteractionStateEnum.highlight,\n blurState: InteractionStateEnum.blur,\n trigger: 'pointerover',\n triggerOff: 'pointerout'\n };\n options: ElementHighlightOptions;\n protected _marks?: IMark[];\n protected _stateMarks: Record<string, IMark[]>;\n protected _lastElement?: IElement;\n protected _statedElements?: (IElement | IGlyphElement)[];\n\n constructor(view: IView, options?: ElementHighlightOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementHighlight.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n this._stateMarks = groupMarksByState(this._marks, [this.options.highlightState, this.options.blurState]);\n }\n\n protected getEvents() {\n return [\n {\n type: this.options.trigger,\n handler: this.handleStart\n },\n { type: this.options.triggerOff, handler: this.handleReset }\n ];\n }\n\n clearPrevElements() {\n const { highlightState, blurState } = this.options;\n\n if (this._lastElement) {\n this.clearAllStates(highlightState, blurState);\n\n this.dispatchEvent('reset', { elements: [this._lastElement], options: this.options });\n\n this._lastElement = null;\n }\n }\n\n handleStart = (e: InteractionEvent) => {\n if (e.element && this._marks && this._marks.includes(e.element.mark)) {\n const { highlightState, blurState } = this.options;\n\n if (this._lastElement === e.element) {\n return;\n }\n this._statedElements = [e.element];\n\n this.updateStates(highlightState, blurState);\n\n this._lastElement = e.element;\n\n this.dispatchEvent('start', { elements: [e.element], options: this.options });\n } else if (this._lastElement) {\n this.clearPrevElements();\n }\n };\n\n handleReset = (e: InteractionEvent) => {\n const hasActiveElement = e.element && this._marks && this._marks.includes(e.element.mark);\n\n if (hasActiveElement) {\n this.clearPrevElements();\n }\n };\n}\n"]}
|
|
@@ -1,19 +1,22 @@
|
|
|
1
|
-
import type { ElementSelectOptions, EventType, IMark, IView, InteractionEvent } from '../types';
|
|
1
|
+
import type { ElementSelectOptions, EventType, IElement, IGlyphElement, IMark, IToggleStateMixin, IView, InteractionEvent } from '../types';
|
|
2
2
|
import { BaseInteraction } from './base';
|
|
3
|
+
export interface ElementSelect extends IToggleStateMixin, BaseInteraction<ElementSelectOptions> {
|
|
4
|
+
}
|
|
3
5
|
export declare class ElementSelect extends BaseInteraction<ElementSelectOptions> {
|
|
4
6
|
static type: string;
|
|
5
7
|
type: string;
|
|
6
8
|
static defaultOptions: ElementSelectOptions;
|
|
7
9
|
protected _resetType?: 'view' | 'self' | 'timeout';
|
|
8
10
|
protected _marks?: IMark[];
|
|
11
|
+
protected _stateMarks: Record<string, IMark[]>;
|
|
9
12
|
private _timer?;
|
|
10
|
-
|
|
13
|
+
protected _statedElements?: (IElement | IGlyphElement)[];
|
|
11
14
|
constructor(view: IView, options?: ElementSelectOptions);
|
|
12
15
|
protected getEvents(): {
|
|
13
16
|
type: EventType | EventType[];
|
|
14
17
|
handler: (e: InteractionEvent) => void;
|
|
15
18
|
}[];
|
|
16
|
-
clearPrevElements: (
|
|
19
|
+
clearPrevElements: () => void;
|
|
17
20
|
handleStart: (e: InteractionEvent) => void;
|
|
18
21
|
handleReset: (e: InteractionEvent) => void;
|
|
19
22
|
}
|
|
@@ -4,42 +4,34 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: !0
|
|
5
5
|
}), exports.ElementSelect = void 0;
|
|
6
6
|
|
|
7
|
-
const vutils_1 = require("@visactor/vutils"), enums_1 = require("../graph/enums"), base_1 = require("./base");
|
|
7
|
+
const vutils_1 = require("@visactor/vutils"), enums_1 = require("../graph/enums"), base_1 = require("./base"), utils_1 = require("./utils");
|
|
8
8
|
|
|
9
9
|
class ElementSelect extends base_1.BaseInteraction {
|
|
10
10
|
constructor(view, options) {
|
|
11
|
-
super(view, options), this.type = ElementSelect.type, this.clearPrevElements = (
|
|
11
|
+
super(view, options), this.type = ElementSelect.type, this.clearPrevElements = () => {
|
|
12
12
|
const {state: state, reverseState: reverseState} = this.options;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
this._hasSelected = !1, this._marks.forEach((mark => {
|
|
17
|
-
mark.elements.forEach((el => {
|
|
18
|
-
isMultiple || (res = el.removeState(state), res && !isActive && elements.push(el)),
|
|
19
|
-
reverseState && (isActive ? el.addState(reverseState) : el.removeState(reverseState));
|
|
20
|
-
}));
|
|
21
|
-
})), elements.length && this.dispatchEvent("reset", {
|
|
22
|
-
elements: elements,
|
|
13
|
+
this._statedElements && this._statedElements.length && (this.clearAllStates(state, reverseState),
|
|
14
|
+
this.dispatchEvent("reset", {
|
|
15
|
+
elements: this._statedElements,
|
|
23
16
|
options: this.options
|
|
24
|
-
});
|
|
17
|
+
}), this._statedElements = []);
|
|
25
18
|
}, this.handleStart = e => {
|
|
26
|
-
const {state: state, reverseState: reverseState} = this.options;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}), this.options.triggerOff));
|
|
38
|
-
} else "view" === this._resetType && this._hasSelected && this.clearPrevElements();
|
|
19
|
+
const {state: state, reverseState: reverseState, isMultiple: isMultiple} = this.options;
|
|
20
|
+
e.element && this._marks && this._marks.includes(e.element.mark) ? e.element.hasState(state) ? "self" === this._resetType && (this._statedElements && (this._statedElements = this._statedElements.filter((el => el !== e.element))),
|
|
21
|
+
this.updateStates(state, reverseState)) : (this._timer && clearTimeout(this._timer),
|
|
22
|
+
e.element.addState(state), this._statedElements || (this._statedElements = []),
|
|
23
|
+
isMultiple ? this._statedElements.push(e.element) : this._statedElements[0] = e.element,
|
|
24
|
+
this.updateStates(state, reverseState), this.dispatchEvent("start", {
|
|
25
|
+
elements: this._statedElements,
|
|
26
|
+
options: this.options
|
|
27
|
+
}), "timeout" === this._resetType && (this._timer = setTimeout((() => {
|
|
28
|
+
this.clearPrevElements();
|
|
29
|
+
}), this.options.triggerOff))) : "view" === this._resetType && this._statedElements && this._statedElements.length && this.clearPrevElements();
|
|
39
30
|
}, this.handleReset = e => {
|
|
40
31
|
const hasActiveElement = e.element && this._marks && this._marks.includes(e.element.mark);
|
|
41
|
-
this.
|
|
42
|
-
}, this.options = Object.assign({}, ElementSelect.defaultOptions, options), this._marks = view.getMarksBySelector(this.options.selector)
|
|
32
|
+
this._statedElements && this._statedElements.length && ("view" !== this._resetType || hasActiveElement ? "self" === this._resetType && hasActiveElement && this.clearPrevElements() : this.clearPrevElements());
|
|
33
|
+
}, this.options = Object.assign({}, ElementSelect.defaultOptions, options), this._marks = view.getMarksBySelector(this.options.selector),
|
|
34
|
+
this._stateMarks = (0, utils_1.groupMarksByState)(this._marks, [ this.options.state, this.options.reverseState ]);
|
|
43
35
|
}
|
|
44
36
|
getEvents() {
|
|
45
37
|
const triggerOff = this.options.triggerOff, trigger = this.options.trigger, events = [ {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interactions/element-select.ts"],"names":[],"mappings":";;;AAAA,6CAAsD;AACtD,0CAAsD;
|
|
1
|
+
{"version":3,"sources":["../src/interactions/element-select.ts"],"names":[],"mappings":"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","file":"element-select.js","sourcesContent":["import { isNumber, isString } from '@visactor/vutils';\nimport { InteractionStateEnum } from '../graph/enums';\nimport type {\n ElementSelectOptions,\n EventType,\n IElement,\n IGlyphElement,\n IMark,\n IToggleStateMixin,\n IView,\n InteractionEvent\n} from '../types';\nimport { BaseInteraction } from './base';\nimport { groupMarksByState } from './utils';\n\nexport interface ElementSelect extends IToggleStateMixin, BaseInteraction<ElementSelectOptions> {}\n\nexport class ElementSelect extends BaseInteraction<ElementSelectOptions> {\n static type: string = 'element-select';\n type: string = ElementSelect.type;\n\n static defaultOptions: ElementSelectOptions = {\n state: InteractionStateEnum.selected,\n trigger: 'click'\n };\n protected _resetType?: 'view' | 'self' | 'timeout';\n protected _marks?: IMark[];\n protected _stateMarks: Record<string, IMark[]>;\n private _timer?: number;\n protected _statedElements?: (IElement | IGlyphElement)[];\n\n constructor(view: IView, options?: ElementSelectOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementSelect.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n this._stateMarks = groupMarksByState(this._marks, [this.options.state, this.options.reverseState]);\n }\n\n protected getEvents() {\n const triggerOff = this.options.triggerOff;\n const trigger = this.options.trigger;\n\n const events = [\n {\n type: trigger,\n handler: this.handleStart\n }\n ];\n\n let eventName = triggerOff;\n\n if (triggerOff === 'empty') {\n eventName = trigger as EventType;\n\n this._resetType = 'view';\n } else if (isString(triggerOff)) {\n if (triggerOff.includes('view:')) {\n eventName = triggerOff.replace('view:', '') as EventType;\n\n this._resetType = 'view';\n } else {\n eventName = triggerOff;\n\n this._resetType = 'self';\n }\n } else if (isNumber(triggerOff)) {\n eventName = null;\n this._resetType = 'timeout';\n } else {\n this._resetType = null;\n }\n\n if (eventName && eventName !== trigger) {\n events.push({ type: eventName as EventType, handler: this.handleReset });\n }\n\n return events;\n }\n\n clearPrevElements = () => {\n const { state, reverseState } = this.options;\n\n if (this._statedElements && this._statedElements.length) {\n this.clearAllStates(state, reverseState);\n this.dispatchEvent('reset', { elements: this._statedElements, options: this.options });\n\n this._statedElements = [];\n }\n };\n\n handleStart = (e: InteractionEvent) => {\n const { state, reverseState, isMultiple } = this.options;\n\n if (e.element && this._marks && this._marks.includes(e.element.mark)) {\n if (e.element.hasState(state)) {\n if (this._resetType === 'self') {\n if (this._statedElements) {\n this._statedElements = this._statedElements.filter(el => el !== e.element);\n }\n\n this.updateStates(state, reverseState);\n }\n } else {\n if (this._timer) {\n clearTimeout(this._timer);\n }\n e.element.addState(state);\n\n if (!this._statedElements) {\n this._statedElements = [];\n }\n if (isMultiple) {\n this._statedElements.push(e.element);\n } else {\n this._statedElements[0] = e.element;\n }\n this.updateStates(state, reverseState);\n this.dispatchEvent('start', { elements: this._statedElements, options: this.options });\n\n if (this._resetType === 'timeout') {\n this._timer = setTimeout(() => {\n this.clearPrevElements();\n }, this.options.triggerOff as number) as unknown as number;\n }\n }\n } else if (this._resetType === 'view' && this._statedElements && this._statedElements.length) {\n this.clearPrevElements();\n }\n };\n\n handleReset = (e: InteractionEvent) => {\n const hasActiveElement = e.element && this._marks && this._marks.includes(e.element.mark);\n\n if (!this._statedElements || !this._statedElements.length) {\n return;\n }\n\n if (this._resetType === 'view' && !hasActiveElement) {\n this.clearPrevElements();\n } else if (this._resetType === 'self' && hasActiveElement) {\n this.clearPrevElements();\n }\n };\n}\n"]}
|
|
@@ -12,7 +12,7 @@ class FilterMixin {
|
|
|
12
12
|
return dataGrammar && (this.handleFilter = event => {
|
|
13
13
|
const element = null == event ? void 0 : event.element;
|
|
14
14
|
dataGrammar && (!source || element && element.mark === source) && (getFilterValue && (this._filterValue = getFilterValue(event)),
|
|
15
|
-
dataGrammar.commit(), this.view.
|
|
15
|
+
dataGrammar.commit(), this.view.run());
|
|
16
16
|
}, this._dataFilter = {
|
|
17
17
|
source: source ? `${source.uid}` : null,
|
|
18
18
|
rank: filterRank,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interactions/filter.ts"],"names":[],"mappings":";;;AACA,iCAAyC;AACzC,6CAA4C;AAW5C,MAAa,WAAW;IACtB,WAAW,CACT,IAAW,EACX,MAAoB,EACpB,UAAkB,EAClB,cAAmC,EACnC,MAAkD,EAClD,SAAmD;QAEnD,MAAM,WAAW,GAAG,IAAA,iBAAQ,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxE,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,YAAY,GAAG,CAAC,KAAuB,EAAE,EAAE;gBAC9C,MAAM,OAAO,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,CAAC;gBAC/B,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE;oBACrE,OAAO;iBACR;gBACD,IAAI,cAAc,EAAE;oBAClB,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;iBAC3C;gBACD,WAAW,CAAC,MAAM,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"sources":["../src/interactions/filter.ts"],"names":[],"mappings":";;;AACA,iCAAyC;AACzC,6CAA4C;AAW5C,MAAa,WAAW;IACtB,WAAW,CACT,IAAW,EACX,MAAoB,EACpB,UAAkB,EAClB,cAAmC,EACnC,MAAkD,EAClD,SAAmD;QAEnD,MAAM,WAAW,GAAG,IAAA,iBAAQ,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxE,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,YAAY,GAAG,CAAC,KAAuB,EAAE,EAAE;gBAC9C,MAAM,OAAO,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,CAAC;gBAC/B,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE;oBACrE,OAAO;iBACR;gBACD,IAAI,cAAc,EAAE;oBAClB,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;iBAC3C;gBACD,WAAW,CAAC,MAAM,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAClB,CAAC,CAAC;YAEF,IAAI,CAAC,WAAW,GAAG;gBACjB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI;gBACvC,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,CAAC,IAAW,EAAE,EAAE;oBACtB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;wBACtB,OAAO,IAAI,CAAC;qBACb;oBACD,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC5F,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;gBAC/E,CAAC;aACF,CAAC;YACF,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC7C;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAtCD,kCAsCC;AAMD,MAAsB,MAAO,SAAQ,sBAAkC;IAIrE,YAAY,IAAW,EAAE,OAA2B;QAClD,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrB,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,IAAI,CAAC,KAAK,GAAG,IAAA,iBAAQ,EAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;SAC1G;IACH,CAAC;;AATH,wBAUC;AATQ,qBAAc,GAAsC,EAAE,CAAC","file":"filter.js","sourcesContent":["import type { DataFilterOptions, IData, IDataFilter, IMark, IView, InteractionEvent } from '../types';\nimport { BaseInteraction } from './base';\nimport { isString } from '@visactor/vutils';\n\nexport interface FilterMixin {\n view: IView;\n _data?: IData;\n _marks?: IMark[];\n _filterValue: any;\n _dataFilter: IDataFilter;\n handleFilter: (event?: InteractionEvent) => void;\n}\n\nexport class FilterMixin {\n _filterData(\n data: IData,\n source: IMark | null,\n filterRank: number,\n getFilterValue: (event: any) => any,\n filter?: (data: any[], parameters: any) => boolean,\n transform?: (data: any[], parameters: any) => any[]\n ) {\n const dataGrammar = isString(data) ? this.view.getDataById(data) : data;\n if (dataGrammar) {\n this.handleFilter = (event: InteractionEvent) => {\n const element = event?.element;\n if (!dataGrammar || (source && (!element || element.mark !== source))) {\n return;\n }\n if (getFilterValue) {\n this._filterValue = getFilterValue(event);\n }\n dataGrammar.commit();\n this.view.run();\n };\n\n this._dataFilter = {\n source: source ? `${source.uid}` : null,\n rank: filterRank,\n filter: (data: any[]) => {\n if (!this._filterValue) {\n return data;\n }\n const filteredData = filter ? data.filter(datum => filter(datum, this._filterValue)) : data;\n return transform ? transform(filteredData, this._filterValue) : filteredData;\n }\n };\n dataGrammar.addDataFilter(this._dataFilter);\n }\n return this;\n }\n}\n\nexport interface Filter\n extends Pick<FilterMixin, '_data' | '_marks' | '_filterValue' | '_dataFilter' | 'handleFilter' | '_filterData'>,\n BaseInteraction<DataFilterOptions> {}\n\nexport abstract class Filter extends BaseInteraction<DataFilterOptions> {\n static defaultOptions: Omit<DataFilterOptions, 'target'> = {};\n options: DataFilterOptions;\n\n constructor(view: IView, options?: DataFilterOptions) {\n super(view, options);\n if (options.target) {\n this._data = isString(options.target.data) ? view.getDataById(options.target.data) : options.target.data;\n }\n }\n}\n"]}
|
|
@@ -73,7 +73,7 @@ class FishEye extends base_1.BaseInteraction {
|
|
|
73
73
|
const dimState = this._state[dim];
|
|
74
74
|
dimState.scale && !(0, vutils_1.isNil)(dimState.focus) && (needUpdate = !0, dimState.focus = null,
|
|
75
75
|
dimState.scale.setFishEye(null), dimState.scale.commit());
|
|
76
|
-
})), needUpdate && this.view.
|
|
76
|
+
})), needUpdate && this.view.run();
|
|
77
77
|
}
|
|
78
78
|
shouldHandle(e) {
|
|
79
79
|
var _a, _b, _c;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interactions/fish-eye.ts"],"names":[],"mappings":"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","file":"fish-eye.js","sourcesContent":["import { isNil, isString, throttle } from '@visactor/vutils';\nimport type { FishEyeOptions, IMark, IScale, IView, InteractionEvent, ViewNavigationRange } from '../types';\nimport { BaseInteraction } from './base';\n\nexport class FishEye extends BaseInteraction<FishEyeOptions> {\n static type: string = 'fish-eye';\n type: string = FishEye.type;\n\n static defaultOptions: FishEyeOptions = {\n trigger: 'pointerenter',\n updateTrigger: 'pointermove',\n endTrigger: 'pointerleave',\n distortionX: 2,\n distortionY: 2,\n throttle: 100\n };\n\n options: FishEyeOptions;\n protected _inited?: boolean;\n protected _state: Partial<\n Record<'x' | 'y', { scale?: IScale; focus?: number; distortion?: number; radius?: number; radiusRatio?: number }>\n >;\n protected _isActive?: boolean;\n protected _marks?: IMark[];\n\n protected handleUpdate: (e: InteractionEvent) => void;\n\n constructor(view: IView, options?: FishEyeOptions) {\n super(view, options);\n this.options = Object.assign({}, FishEye.defaultOptions, options);\n this._marks = view.getMarksBySelector(this.options.selector);\n\n this.handleUpdate = throttle(this.handleUpdateInner, this.options.throttle);\n }\n\n protected getEvents() {\n return [\n { type: this.options.trigger, handler: this.handleStart },\n { type: this.options.updateTrigger, handler: this.handleUpdate },\n { type: this.options.endTrigger, handler: this.handleEnd },\n { type: this.options.triggerOff, handler: this.handleReset }\n ];\n }\n\n protected _initStateByDim(\n dim: 'x' | 'y',\n distortion: number,\n scale?: string | IScale,\n radius?: number,\n radiusRatio?: number\n ) {\n const scaleGrammar = !isNil(scale) ? (isString(scale) ? this.view.getScaleById(scale) : scale) : null;\n\n this._state[dim] = { scale: scaleGrammar, distortion, radius, radiusRatio };\n }\n\n protected _initGrammars() {\n const { enableX, enableY, scaleX, scaleY, distortionX, distortionY, radiusRatioX, radiusRatioY, radiusX, radiusY } =\n this.options;\n\n this._state = {};\n\n if (enableX !== false) {\n this._initStateByDim('x', distortionX, scaleX, radiusX, radiusRatioX);\n }\n\n if (enableY !== false) {\n this._initStateByDim('y', distortionY, scaleY, radiusY, radiusRatioY);\n }\n\n this._inited = true;\n }\n\n updateView(focus?: { x: number; y: number }, e?: InteractionEvent) {\n let needUpdate = false;\n\n if (focus) {\n Object.keys(this._state).forEach(dim => {\n const dimState = this._state[dim];\n\n if (dimState.scale && dimState.focus !== focus[dim]) {\n needUpdate = true;\n // 坐标转换问题\n dimState.focus = focus[dim];\n dimState.scale.setFishEye({\n distortion: dimState.distortion,\n radius: dimState.radius,\n radiusRatio: dimState.radiusRatio,\n focus: focus[dim]\n });\n dimState.scale.commit();\n }\n });\n } else {\n Object.keys(this._state).forEach(dim => {\n const dimState = this._state[dim];\n\n if (dimState.scale && !isNil(dimState.focus)) {\n needUpdate = true;\n // 坐标转换问题\n dimState.focus = null;\n dimState.scale.setFishEye(null);\n dimState.scale.commit();\n }\n });\n }\n\n if (needUpdate) {\n this.view.runSync();\n }\n }\n\n shouldHandle(e: InteractionEvent) {\n if (this._marks) {\n return e.element && this._marks && this._marks.includes(e.element.mark);\n }\n return (e.target as any) === this.view?.renderer?.stage?.();\n }\n\n shouldUpdate(e: InteractionEvent) {\n if (this._marks) {\n return e.element && this._marks && this._marks.includes(e.element.mark);\n }\n const viewBox = this.view.getViewBox();\n return e.canvasX >= viewBox.x1 && e.canvasX <= viewBox.x2 && e.canvasY >= viewBox.y1 && e.canvasY <= viewBox.y2;\n }\n\n handleStart = (e: InteractionEvent) => {\n if (!e || !(this.options.shouldStart ? this.options.shouldStart(e) : this.shouldHandle(e))) {\n return;\n }\n\n if (!this._inited) {\n this._initGrammars();\n }\n if (!this._isActive) {\n this._isActive = true;\n this.updateView({ x: e.canvasX, y: e.canvasY }, e);\n }\n };\n\n handleUpdateInner = (e: InteractionEvent) => {\n if (!e || !(this.options.shouldUpdate ? this.options.shouldUpdate(e) : this.shouldUpdate(e))) {\n return;\n }\n\n this._isActive && this.updateView({ x: e.canvasX, y: e.canvasY }, e);\n };\n\n handleEnd = (e: InteractionEvent) => {\n if (!e || !(this.options.shouldEnd ? this.options.shouldEnd(e) : this.shouldHandle(e))) {\n return;\n }\n\n if (!this.options.triggerOff && this._isActive) {\n this._isActive = false;\n this.updateView(null, e);\n }\n };\n\n handleReset = (e: InteractionEvent) => {\n if (!e || !(this.options.shouldReset ? this.options.shouldReset(e) : this.shouldHandle(e))) {\n return;\n }\n\n if (this._isActive) {\n this.updateView(null, e);\n this._isActive = false;\n }\n };\n\n unbind() {\n super.unbind();\n\n if (this._state) {\n Object.keys(this._state).forEach(dim => {\n const { scale } = this._state[dim as 'x' | 'y'];\n\n if (scale) {\n scale.setRangeFactor(null);\n scale.commit();\n }\n });\n }\n\n this._state = null;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/interactions/fish-eye.ts"],"names":[],"mappings":"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","file":"fish-eye.js","sourcesContent":["import { isNil, isString, throttle } from '@visactor/vutils';\nimport type { FishEyeOptions, IMark, IScale, IView, InteractionEvent, ViewNavigationRange } from '../types';\nimport { BaseInteraction } from './base';\n\nexport class FishEye extends BaseInteraction<FishEyeOptions> {\n static type: string = 'fish-eye';\n type: string = FishEye.type;\n\n static defaultOptions: FishEyeOptions = {\n trigger: 'pointerenter',\n updateTrigger: 'pointermove',\n endTrigger: 'pointerleave',\n distortionX: 2,\n distortionY: 2,\n throttle: 100\n };\n\n options: FishEyeOptions;\n protected _inited?: boolean;\n protected _state: Partial<\n Record<'x' | 'y', { scale?: IScale; focus?: number; distortion?: number; radius?: number; radiusRatio?: number }>\n >;\n protected _isActive?: boolean;\n protected _marks?: IMark[];\n\n protected handleUpdate: (e: InteractionEvent) => void;\n\n constructor(view: IView, options?: FishEyeOptions) {\n super(view, options);\n this.options = Object.assign({}, FishEye.defaultOptions, options);\n this._marks = view.getMarksBySelector(this.options.selector);\n\n this.handleUpdate = throttle(this.handleUpdateInner, this.options.throttle);\n }\n\n protected getEvents() {\n return [\n { type: this.options.trigger, handler: this.handleStart },\n { type: this.options.updateTrigger, handler: this.handleUpdate },\n { type: this.options.endTrigger, handler: this.handleEnd },\n { type: this.options.triggerOff, handler: this.handleReset }\n ];\n }\n\n protected _initStateByDim(\n dim: 'x' | 'y',\n distortion: number,\n scale?: string | IScale,\n radius?: number,\n radiusRatio?: number\n ) {\n const scaleGrammar = !isNil(scale) ? (isString(scale) ? this.view.getScaleById(scale) : scale) : null;\n\n this._state[dim] = { scale: scaleGrammar, distortion, radius, radiusRatio };\n }\n\n protected _initGrammars() {\n const { enableX, enableY, scaleX, scaleY, distortionX, distortionY, radiusRatioX, radiusRatioY, radiusX, radiusY } =\n this.options;\n\n this._state = {};\n\n if (enableX !== false) {\n this._initStateByDim('x', distortionX, scaleX, radiusX, radiusRatioX);\n }\n\n if (enableY !== false) {\n this._initStateByDim('y', distortionY, scaleY, radiusY, radiusRatioY);\n }\n\n this._inited = true;\n }\n\n updateView(focus?: { x: number; y: number }, e?: InteractionEvent) {\n let needUpdate = false;\n\n if (focus) {\n Object.keys(this._state).forEach(dim => {\n const dimState = this._state[dim];\n\n if (dimState.scale && dimState.focus !== focus[dim]) {\n needUpdate = true;\n // 坐标转换问题\n dimState.focus = focus[dim];\n dimState.scale.setFishEye({\n distortion: dimState.distortion,\n radius: dimState.radius,\n radiusRatio: dimState.radiusRatio,\n focus: focus[dim]\n });\n dimState.scale.commit();\n }\n });\n } else {\n Object.keys(this._state).forEach(dim => {\n const dimState = this._state[dim];\n\n if (dimState.scale && !isNil(dimState.focus)) {\n needUpdate = true;\n // 坐标转换问题\n dimState.focus = null;\n dimState.scale.setFishEye(null);\n dimState.scale.commit();\n }\n });\n }\n\n if (needUpdate) {\n this.view.run();\n }\n }\n\n shouldHandle(e: InteractionEvent) {\n if (this._marks) {\n return e.element && this._marks && this._marks.includes(e.element.mark);\n }\n return (e.target as any) === this.view?.renderer?.stage?.();\n }\n\n shouldUpdate(e: InteractionEvent) {\n if (this._marks) {\n return e.element && this._marks && this._marks.includes(e.element.mark);\n }\n const viewBox = this.view.getViewBox();\n return e.canvasX >= viewBox.x1 && e.canvasX <= viewBox.x2 && e.canvasY >= viewBox.y1 && e.canvasY <= viewBox.y2;\n }\n\n handleStart = (e: InteractionEvent) => {\n if (!e || !(this.options.shouldStart ? this.options.shouldStart(e) : this.shouldHandle(e))) {\n return;\n }\n\n if (!this._inited) {\n this._initGrammars();\n }\n if (!this._isActive) {\n this._isActive = true;\n this.updateView({ x: e.canvasX, y: e.canvasY }, e);\n }\n };\n\n handleUpdateInner = (e: InteractionEvent) => {\n if (!e || !(this.options.shouldUpdate ? this.options.shouldUpdate(e) : this.shouldUpdate(e))) {\n return;\n }\n\n this._isActive && this.updateView({ x: e.canvasX, y: e.canvasY }, e);\n };\n\n handleEnd = (e: InteractionEvent) => {\n if (!e || !(this.options.shouldEnd ? this.options.shouldEnd(e) : this.shouldHandle(e))) {\n return;\n }\n\n if (!this.options.triggerOff && this._isActive) {\n this._isActive = false;\n this.updateView(null, e);\n }\n };\n\n handleReset = (e: InteractionEvent) => {\n if (!e || !(this.options.shouldReset ? this.options.shouldReset(e) : this.shouldHandle(e))) {\n return;\n }\n\n if (this._isActive) {\n this.updateView(null, e);\n this._isActive = false;\n }\n };\n\n unbind() {\n super.unbind();\n\n if (this._state) {\n Object.keys(this._state).forEach(dim => {\n const { scale } = this._state[dim as 'x' | 'y'];\n\n if (scale) {\n scale.setRangeFactor(null);\n scale.commit();\n }\n });\n }\n\n this._state = null;\n }\n}\n"]}
|
|
@@ -220,6 +220,8 @@ Object.defineProperty(exports, "FishEye", {
|
|
|
220
220
|
}
|
|
221
221
|
});
|
|
222
222
|
|
|
223
|
+
const toggle_state_mixin_1 = require("./toggle-state-mixin");
|
|
224
|
+
|
|
223
225
|
var base_tooltip_1 = require("./base-tooltip");
|
|
224
226
|
|
|
225
227
|
Object.defineProperty(exports, "BaseTooltip", {
|
|
@@ -263,12 +265,14 @@ const registerElementActive = () => {
|
|
|
263
265
|
exports.registerElementActive = registerElementActive;
|
|
264
266
|
|
|
265
267
|
const registerElementSelect = () => {
|
|
268
|
+
(0, vutils_1.mixin)(element_select_1.ElementSelect, toggle_state_mixin_1.ToggleStateMixin),
|
|
266
269
|
factory_1.Factory.registerInteraction(element_select_1.ElementSelect.type, element_select_1.ElementSelect);
|
|
267
270
|
};
|
|
268
271
|
|
|
269
272
|
exports.registerElementSelect = registerElementSelect;
|
|
270
273
|
|
|
271
274
|
const registerElementHighlight = () => {
|
|
275
|
+
(0, vutils_1.mixin)(element_highlight_1.ElementHighlight, toggle_state_mixin_1.ToggleStateMixin),
|
|
272
276
|
factory_1.Factory.registerInteraction(element_highlight_1.ElementHighlight.type, element_highlight_1.ElementHighlight);
|
|
273
277
|
};
|
|
274
278
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interactions/index.ts"],"names":[],"mappings":";;;AAAA,6CAA0C;AAC1C,qDAAiD;
|
|
1
|
+
{"version":3,"sources":["../src/interactions/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { Factory } from '../core/factory';\nimport { ElementActive } from './element-active';\nimport { ElementSelect } from './element-select';\nimport { ElementHighlight } from './element-highlight';\nimport { ElementHighlightByKey } from './element-highlight-by-key';\nimport { ElementHighlightByGroup } from './element-highlight-by-group';\nimport { ElementActiveByLegend } from './element-active-by-legend';\nimport { ElementHighlightByLegend } from './element-highlight-by-legend';\nimport { ElementHighlightByName } from './element-highlight-by-name';\nimport { BrushHighlight } from './brush-highlight';\nimport { BrushActive } from './brush-active';\nimport { BrushFilter } from './brush-filter';\nimport { DrillDown } from './drill-down';\nimport { RollUp } from './roll-up';\nimport { Tooltip } from './tooltip';\nimport { DimensionTooltip } from './dimension-tooltip';\nimport { Crosshair } from './crosshair';\nimport { FilterMixin } from './filter';\nimport { ViewZoom } from './view-zoom';\nimport { ViewScroll } from './view-scroll';\nimport { ViewDrag } from './view-drag';\nimport { mixin } from '@visactor/vutils';\nimport { ViewZoomMixin } from './view-zoom-mixin';\nimport { ViewScrollMixin } from './view-scroll-mixin';\nimport { ViewDragMixin } from './view-drag-mixin';\nimport { ViewRoam } from './view-roam';\nimport { FishEye } from './fish-eye';\nimport { ToggleStateMixin } from './toggle-state-mixin';\n\nexport { BaseTooltip } from './base-tooltip';\nexport { BaseInteraction } from './base';\nexport { BrushBase } from './brush-base';\nexport { ViewNavigationBase } from './view-navigation-base';\nexport {\n ElementActive,\n ElementSelect,\n ElementHighlight,\n ElementHighlightByKey,\n ElementHighlightByGroup,\n ElementActiveByLegend,\n ElementHighlightByLegend,\n ElementHighlightByName,\n BrushHighlight,\n BrushActive,\n DrillDown,\n RollUp,\n Tooltip,\n DimensionTooltip,\n Crosshair,\n FilterMixin,\n ViewZoom,\n ViewScroll,\n ViewDrag,\n ViewRoam,\n ViewScrollMixin,\n ViewZoomMixin,\n ViewDragMixin,\n FishEye\n};\n\nexport const registerElementActive = () => {\n Factory.registerInteraction(ElementActive.type, ElementActive);\n};\n\nexport const registerElementSelect = () => {\n mixin(ElementSelect, ToggleStateMixin);\n Factory.registerInteraction(ElementSelect.type, ElementSelect);\n};\n\nexport const registerElementHighlight = () => {\n mixin(ElementHighlight, ToggleStateMixin);\n Factory.registerInteraction(ElementHighlight.type, ElementHighlight);\n};\n\nexport const registerElementHighlightByKey = () => {\n Factory.registerInteraction(ElementHighlightByKey.type, ElementHighlightByKey);\n};\n\nexport const registerElementHighlightByGroup = () => {\n Factory.registerInteraction(ElementHighlightByGroup.type, ElementHighlightByGroup);\n};\n\nexport const registerElementActiveByLegend = () => {\n Factory.registerInteraction(ElementActiveByLegend.type, ElementActiveByLegend);\n};\n\nexport const registerElementHighlightByLegend = () => {\n Factory.registerInteraction(ElementHighlightByLegend.type, ElementHighlightByLegend);\n};\n\nexport const registerElementHighlightByName = () => {\n Factory.registerInteraction(ElementHighlightByName.type, ElementHighlightByName);\n};\n\nexport const registerBrushHighlight = () => {\n Factory.registerInteraction(BrushHighlight.type, BrushHighlight);\n};\n\nexport const registerBrushActive = () => {\n Factory.registerInteraction(BrushActive.type, BrushActive);\n};\n\nexport const registerBrushFilter = () => {\n mixin(BrushFilter, FilterMixin);\n Factory.registerInteraction(BrushFilter.type, BrushFilter);\n};\n\nexport const registerDrillDown = () => {\n mixin(DrillDown, FilterMixin);\n Factory.registerInteraction(DrillDown.type, DrillDown);\n};\n\nexport const registerRollUp = () => {\n Factory.registerInteraction(RollUp.type, RollUp);\n};\n\nexport const registerTooltip = () => {\n Factory.registerInteraction(Tooltip.type, Tooltip);\n};\n\nexport const registerDimensionTooltip = () => {\n Factory.registerInteraction(DimensionTooltip.type, DimensionTooltip);\n};\n\nexport const registerCrosshair = () => {\n Factory.registerInteraction(Crosshair.type, Crosshair);\n};\nexport const registerViewZoom = () => {\n mixin(ViewZoom, ViewZoomMixin);\n Factory.registerInteraction(ViewZoom.type, ViewZoom);\n};\n\nexport const registerViewScroll = () => {\n mixin(ViewScroll, ViewScrollMixin);\n Factory.registerInteraction(ViewScroll.type, ViewScroll);\n};\n\nexport const registerViewDrag = () => {\n mixin(ViewDrag, ViewDragMixin);\n Factory.registerInteraction(ViewDrag.type, ViewDrag);\n};\n\nexport const registerViewRoam = () => {\n mixin(ViewRoam, ViewZoomMixin);\n mixin(ViewRoam, ViewDragMixin);\n mixin(ViewRoam, ViewScrollMixin);\n Factory.registerInteraction(ViewRoam.type, ViewRoam);\n};\n\nexport const registerFishEye = () => {\n Factory.registerInteraction(FishEye.type, FishEye);\n};\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IElement, IGlyphElement, IMark, IToggleStateMixin } from '../types';
|
|
2
|
+
export declare class ToggleStateMixin implements IToggleStateMixin {
|
|
3
|
+
protected _statedElements?: (IElement | IGlyphElement)[];
|
|
4
|
+
protected _marks?: IMark[];
|
|
5
|
+
protected _stateMarks: Record<string, IMark[]>;
|
|
6
|
+
updateStates(state?: string, reverseState?: string): void;
|
|
7
|
+
clearAllStates(state?: string, reverseState?: string): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.ToggleStateMixin = void 0;
|
|
6
|
+
|
|
7
|
+
class ToggleStateMixin {
|
|
8
|
+
updateStates(state, reverseState) {
|
|
9
|
+
this._marks.forEach((mark => {
|
|
10
|
+
const hasReverse = reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(mark), hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(mark);
|
|
11
|
+
(hasReverse || hasState) && mark.elements.forEach((el => {
|
|
12
|
+
this._statedElements && this._statedElements.includes(el) ? (hasState && el.addState(state),
|
|
13
|
+
hasReverse && el.removeState(reverseState)) : (hasState && el.removeState(state),
|
|
14
|
+
hasReverse && el.addState(reverseState));
|
|
15
|
+
}));
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
clearAllStates(state, reverseState) {
|
|
19
|
+
this._statedElements && this._statedElements.length && this._marks.forEach((mark => {
|
|
20
|
+
reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(mark) && mark.elements.forEach((el => {
|
|
21
|
+
el.removeState(reverseState);
|
|
22
|
+
})), state && this._stateMarks[state] && this._stateMarks[state].includes(mark) && mark.elements.forEach((el => {
|
|
23
|
+
el.removeState(state);
|
|
24
|
+
}));
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
exports.ToggleStateMixin = ToggleStateMixin;
|
|
30
|
+
//# sourceMappingURL=toggle-state-mixin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/interactions/toggle-state-mixin.ts"],"names":[],"mappings":";;;AAEA,MAAa,gBAAgB;IAK3B,YAAY,CAAC,KAAc,EAAE,YAAqB;QAChD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACzB,MAAM,UAAU,GACd,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAClG,MAAM,QAAQ,GAAG,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAE5F,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE;gBAC5B,OAAO;aACR;YAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;gBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAE3E,IAAI,QAAQ,EAAE;oBACZ,IAAI,QAAQ,EAAE;wBACZ,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;qBACpB;oBAED,IAAI,UAAU,EAAE;wBACd,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;qBAC9B;iBACF;qBAAM;oBACL,IAAI,QAAQ,EAAE;wBACZ,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;qBACvB;oBAED,IAAI,UAAU,EAAE;wBACd,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;qBAC3B;iBACF;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,cAAc,CAAC,KAAc,EAAE,YAAqB;QAClD,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;YACzD,OAAO;SACR;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACzB,IAAI,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACnG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;oBACzB,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC;aACJ;YAED,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBAC9E,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;oBACzB,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA1DD,4CA0DC","file":"toggle-state-mixin.js","sourcesContent":["import type { IElement, IGlyphElement, IMark, IToggleStateMixin } from '../types';\n\nexport class ToggleStateMixin implements IToggleStateMixin {\n protected _statedElements?: (IElement | IGlyphElement)[];\n protected _marks?: IMark[];\n protected _stateMarks: Record<string, IMark[]>;\n\n updateStates(state?: string, reverseState?: string) {\n this._marks.forEach(mark => {\n const hasReverse =\n reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(mark);\n const hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(mark);\n\n if (!hasReverse && !hasState) {\n return;\n }\n\n mark.elements.forEach(el => {\n const isStated = this._statedElements && this._statedElements.includes(el);\n\n if (isStated) {\n if (hasState) {\n el.addState(state);\n }\n\n if (hasReverse) {\n el.removeState(reverseState);\n }\n } else {\n if (hasState) {\n el.removeState(state);\n }\n\n if (hasReverse) {\n el.addState(reverseState);\n }\n }\n });\n });\n }\n\n clearAllStates(state?: string, reverseState?: string) {\n if (!this._statedElements || !this._statedElements.length) {\n return;\n }\n\n this._marks.forEach(mark => {\n if (reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(mark)) {\n mark.elements.forEach(el => {\n el.removeState(reverseState);\n });\n }\n\n if (state && this._stateMarks[state] && this._stateMarks[state].includes(mark)) {\n mark.elements.forEach(el => {\n el.removeState(state);\n });\n }\n });\n }\n}\n"]}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import type { ElementFilterOptions, IElement } from '../types';
|
|
1
|
+
import type { ElementFilterOptions, IElement, IMark } from '../types';
|
|
2
2
|
export declare const generateFilterValue: (options: ElementFilterOptions) => (el: IElement) => any;
|
|
3
|
+
export declare const groupMarksByState: (marks: IMark[], states: string[]) => Record<string, IMark[]>;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: !0
|
|
5
|
-
}), exports.generateFilterValue = void 0;
|
|
5
|
+
}), exports.groupMarksByState = exports.generateFilterValue = void 0;
|
|
6
6
|
|
|
7
7
|
const generateFilterValue = options => options.filterField ? el => {
|
|
8
8
|
var _a;
|
|
@@ -10,4 +10,17 @@ const generateFilterValue = options => options.filterField ? el => {
|
|
|
10
10
|
} : el => el[options.filterType];
|
|
11
11
|
|
|
12
12
|
exports.generateFilterValue = generateFilterValue;
|
|
13
|
-
|
|
13
|
+
|
|
14
|
+
const groupMarksByState = (marks, states) => {
|
|
15
|
+
if (!states || !marks) return null;
|
|
16
|
+
const res = {};
|
|
17
|
+
return marks.forEach((mark => {
|
|
18
|
+
const encode = mark.getSpec().encode;
|
|
19
|
+
encode && states.forEach((state => {
|
|
20
|
+
state && encode[state] && (res[state] || (res[state] = []), res[state].push(mark));
|
|
21
|
+
}));
|
|
22
|
+
})), res;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
exports.groupMarksByState = groupMarksByState;
|
|
26
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interactions/utils.ts"],"names":[],"mappings":";;;AAEO,MAAM,mBAAmB,GAAG,CAAC,OAA6B,EAAE,EAAE;IACnE,IAAI,OAAO,CAAC,WAAW,EAAE;QACvB,OAAO,CAAC,EAAY,EAAE,EAAE;;YACtB,OAAO,MAAA,EAAE,CAAC,QAAQ,EAAE,0CAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9C,CAAC,CAAC;KACH;IAED,OAAO,CAAC,EAAY,EAAE,EAAE;QACtB,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,mBAAmB,uBAU9B","file":"utils.js","sourcesContent":["import type { ElementFilterOptions, IElement } from '../types';\n\nexport const generateFilterValue = (options: ElementFilterOptions) => {\n if (options.filterField) {\n return (el: IElement) => {\n return el.getDatum()?.[options.filterField];\n };\n }\n\n return (el: IElement) => {\n return el[options.filterType];\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/interactions/utils.ts"],"names":[],"mappings":";;;AAEO,MAAM,mBAAmB,GAAG,CAAC,OAA6B,EAAE,EAAE;IACnE,IAAI,OAAO,CAAC,WAAW,EAAE;QACvB,OAAO,CAAC,EAAY,EAAE,EAAE;;YACtB,OAAO,MAAA,EAAE,CAAC,QAAQ,EAAE,0CAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9C,CAAC,CAAC;KACH;IAED,OAAO,CAAC,EAAY,EAAE,EAAE;QACtB,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,mBAAmB,uBAU9B;AAEK,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAE,MAAgB,EAA2B,EAAE;IAC7F,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;QACrB,OAAO,IAAI,CAAC;KACb;IAED,MAAM,GAAG,GAAG,EAAE,CAAC;IAEf,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,MAAM,MAAM,GAAI,IAAI,CAAC,OAAO,EAAe,CAAC,MAAM,CAAC;QAEnD,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QAED,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrB,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBACf,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;iBACjB;gBAED,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvB;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AA1BW,QAAA,iBAAiB,qBA0B5B","file":"utils.js","sourcesContent":["import type { ElementFilterOptions, IElement, IMark, MarkSpec } from '../types';\n\nexport const generateFilterValue = (options: ElementFilterOptions) => {\n if (options.filterField) {\n return (el: IElement) => {\n return el.getDatum()?.[options.filterField];\n };\n }\n\n return (el: IElement) => {\n return el[options.filterType];\n };\n};\n\nexport const groupMarksByState = (marks: IMark[], states: string[]): Record<string, IMark[]> => {\n if (!states || !marks) {\n return null;\n }\n\n const res = {};\n\n marks.forEach(mark => {\n const encode = (mark.getSpec() as MarkSpec).encode;\n\n if (!encode) {\n return;\n }\n\n states.forEach(state => {\n if (state && encode[state]) {\n if (!res[state]) {\n res[state] = [];\n }\n\n res[state].push(mark);\n }\n });\n });\n\n return res;\n};\n"]}
|
|
@@ -60,7 +60,7 @@ class ViewNavigationBase extends base_1.BaseInteraction {
|
|
|
60
60
|
var _a, _b, _c, _d;
|
|
61
61
|
newRange && newRange.x && (null === (_b = null === (_a = this._state) || void 0 === _a ? void 0 : _a.x) || void 0 === _b ? void 0 : _b.linkedComponent) && this._updateLinkedComponent(this._state.x.linkedComponent, newRange.x),
|
|
62
62
|
newRange && newRange.y && (null === (_d = null === (_c = this._state) || void 0 === _c ? void 0 : _c.y) || void 0 === _d ? void 0 : _d.linkedComponent) && this._updateLinkedComponent(this._state.y.linkedComponent, newRange.y),
|
|
63
|
-
newRange && newRange.needUpdate && this.view.
|
|
63
|
+
newRange && newRange.needUpdate && this.view.run(), this.dispatchEvent(type, {
|
|
64
64
|
viewRange: newRange,
|
|
65
65
|
event: e
|
|
66
66
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interactions/view-navigation-base.ts"],"names":[],"mappings":"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","file":"view-navigation-base.js","sourcesContent":["import { isNil, isString } from '@visactor/vutils';\nimport type {\n FilterDataTarget,\n IBaseInteractionOptions,\n IComponent,\n IDataFilter,\n IDatazoom,\n IMark,\n IScale,\n IScrollbar,\n IView,\n InteractionEvent,\n ViewNavigationBaseOptions,\n ViewNavigationRange,\n ViewStateByDim\n} from '../types';\nimport { BaseInteraction } from './base';\nimport { ComponentEnum, DataFilterRank, GrammarMarkType } from '../graph/enums';\nimport { getScaleRangeRatio } from '../util/scale';\n\nexport abstract class ViewNavigationBase<\n T extends ViewNavigationBaseOptions & IBaseInteractionOptions\n> extends BaseInteraction<T> {\n options: T;\n\n protected _state: Partial<Record<'x' | 'y', ViewStateByDim>>;\n protected _inited?: boolean;\n protected _dataFilterX: IDataFilter;\n protected _dataFilterY: IDataFilter;\n\n constructor(view: IView, options?: T) {\n super(view, options);\n this.options = options;\n }\n\n protected _parseLinkedComponent(option: string | IDatazoom | IScrollbar): IDatazoom | IScrollbar {\n if (!option) {\n return null;\n }\n const comp: IMark = isString(option) ? this.view.getMarkById(option) : option;\n\n if (\n comp &&\n comp.markType === GrammarMarkType.component &&\n ((comp as IComponent).componentType === ComponentEnum.datazoom ||\n (comp as IComponent).componentType === ComponentEnum.scrollbar)\n ) {\n return comp as IDatazoom | IScrollbar;\n }\n\n return null;\n }\n\n protected _initStateByDim(\n dim: 'x' | 'y',\n linkedComponent?: string | IDatazoom | IScrollbar,\n scale?: string | IScale,\n dataTarget?: FilterDataTarget\n ) {\n const comp = this._parseLinkedComponent(linkedComponent);\n\n if (comp) {\n this._state[dim] = { linkedComponent: comp };\n return;\n }\n\n const scaleGrammar = !isNil(scale) ? (isString(scale) ? this.view.getScaleById(scale) : scale) : null;\n const dataGrammar = !isNil(dataTarget?.data)\n ? isString(dataTarget.data)\n ? this.view.getDataById(dataTarget.data)\n : dataTarget.data\n : null;\n\n if (!scaleGrammar || !dataGrammar) {\n this._state[dim] = { data: dataGrammar, scale: scaleGrammar };\n return;\n }\n\n dataGrammar.attach(scaleGrammar);\n\n const filterByScale = isString(dataTarget.filter)\n ? (datum: any, filterValue: number[]) => {\n const scale = scaleGrammar.getScale();\n const ratio = getScaleRangeRatio(scale, datum[dataTarget.filter as string]);\n\n return ratio >= filterValue[0] && ratio <= filterValue[1];\n }\n : dataTarget.filter;\n const dataFilter = {\n source: `${scaleGrammar.uid}`,\n rank: DataFilterRank.normal,\n filter: (data: any[]) => {\n const filterValue = dim === 'x' ? this._state?.x?.filterValue : this._state?.y?.filterValue;\n if (!filterValue) {\n return data;\n }\n const filteredData = data.filter(datum => filterByScale(datum, filterValue));\n return dataTarget.transform ? dataTarget.transform(filteredData, filterValue) : filteredData;\n }\n };\n\n if (dim === 'x') {\n this._dataFilterX = dataFilter;\n } else {\n this._dataFilterY = dataFilter;\n }\n\n dataGrammar.addDataFilter(dataFilter);\n\n this._state[dim] = { data: dataGrammar, scale: scaleGrammar };\n }\n\n protected _initGrammars() {\n const { enableX, enableY, scaleX, scaleY, dataTargetX, dataTargetY, linkedComponentX, linkedComponentY } =\n this.options;\n\n this._state = {};\n\n if (enableX !== false) {\n this._initStateByDim('x', linkedComponentX, scaleX, dataTargetX);\n }\n\n if (enableY !== false) {\n this._initStateByDim('y', linkedComponentY, scaleY, dataTargetY);\n }\n\n this._inited = true;\n }\n\n protected _updateLinkedComponent(comp: IDatazoom | IScrollbar, newRange: [number, number]) {\n if (comp.componentType === ComponentEnum.datazoom) {\n (comp as IDatazoom).setStartEndValue(newRange[0], newRange[1]);\n } else {\n // fix: need to update range scrollbar\n (comp as IScrollbar).setScrollStart(newRange[0]);\n }\n }\n\n updateView(type: 'start' | 'reset' | 'update' | 'end', newRange: ViewNavigationRange, e?: InteractionEvent) {\n if (newRange && newRange.x && this._state?.x?.linkedComponent) {\n this._updateLinkedComponent(this._state.x.linkedComponent, newRange.x);\n }\n\n if (newRange && newRange.y && this._state?.y?.linkedComponent) {\n this._updateLinkedComponent(this._state.y.linkedComponent, newRange.y);\n }\n\n if (newRange && newRange.needUpdate) {\n this.view.runAsync();\n }\n\n this.dispatchEvent(type, { viewRange: newRange, event: e });\n }\n\n unbind() {\n super.unbind();\n\n if (this._state) {\n Object.keys(this._state).forEach(dim => {\n const { data, scale } = this._state[dim as 'x' | 'y'];\n\n if (data && scale) {\n data.detach(scale);\n data.removeDataFilter(dim === 'x' ? this._dataFilterX : this._dataFilterY);\n } else if (scale) {\n scale.setRangeFactor(null);\n scale.commit();\n }\n });\n }\n\n this._state = null;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/interactions/view-navigation-base.ts"],"names":[],"mappings":";;;AAAA,6CAAmD;AAgBnD,iCAAyC;AACzC,0CAAgF;AAChF,yCAAmD;AAEnD,MAAsB,kBAEpB,SAAQ,sBAAkB;IAQ1B,YAAY,IAAW,EAAE,OAAW;QAClC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAES,qBAAqB,CAAC,MAAuC;QACrE,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,IAAI,CAAC;SACb;QACD,MAAM,IAAI,GAAU,IAAA,iBAAQ,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAE9E,IACE,IAAI;YACJ,IAAI,CAAC,QAAQ,KAAK,uBAAe,CAAC,SAAS;YAC3C,CAAE,IAAmB,CAAC,aAAa,KAAK,qBAAa,CAAC,QAAQ;gBAC3D,IAAmB,CAAC,aAAa,KAAK,qBAAa,CAAC,SAAS,CAAC,EACjE;YACA,OAAO,IAA8B,CAAC;SACvC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAES,eAAe,CACvB,GAAc,EACd,eAAiD,EACjD,KAAuB,EACvB,UAA6B;QAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;QAEzD,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;YAC7C,OAAO;SACR;QAED,MAAM,YAAY,GAAG,CAAC,IAAA,cAAK,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAQ,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACtG,MAAM,WAAW,GAAG,CAAC,IAAA,cAAK,EAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,CAAC;YAC1C,CAAC,CAAC,IAAA,iBAAQ,EAAC,UAAU,CAAC,IAAI,CAAC;gBACzB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC;gBACxC,CAAC,CAAC,UAAU,CAAC,IAAI;YACnB,CAAC,CAAC,IAAI,CAAC;QAET,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE;YACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;YAC9D,OAAO;SACR;QAED,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAEjC,MAAM,aAAa,GAAG,IAAA,iBAAQ,EAAC,UAAU,CAAC,MAAM,CAAC;YAC/C,CAAC,CAAC,CAAC,KAAU,EAAE,WAAqB,EAAE,EAAE;gBACpC,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAG,IAAA,0BAAkB,EAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAgB,CAAC,CAAC,CAAC;gBAE5E,OAAO,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;YACH,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QACtB,MAAM,UAAU,GAAG;YACjB,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE;YAC7B,IAAI,EAAE,sBAAc,CAAC,MAAM;YAC3B,MAAM,EAAE,CAAC,IAAW,EAAE,EAAE;;gBACtB,MAAM,WAAW,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,MAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,CAAC,0CAAE,WAAW,CAAC,CAAC,CAAC,MAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,CAAC,0CAAE,WAAW,CAAC;gBAC5F,IAAI,CAAC,WAAW,EAAE;oBAChB,OAAO,IAAI,CAAC;iBACb;gBACD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;gBAC7E,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YAC/F,CAAC;SACF,CAAC;QAEF,IAAI,GAAG,KAAK,GAAG,EAAE;YACf,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;SAChC;aAAM;YACL,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;SAChC;QAED,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAEtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAChE,CAAC;IAES,aAAa;QACrB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GACtG,IAAI,CAAC,OAAO,CAAC;QAEf,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QAEjB,IAAI,OAAO,KAAK,KAAK,EAAE;YACrB,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;SAClE;QAED,IAAI,OAAO,KAAK,KAAK,EAAE;YACrB,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;SAClE;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAES,sBAAsB,CAAC,IAA4B,EAAE,QAA0B;QACvF,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAa,CAAC,QAAQ,EAAE;YAChD,IAAkB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;SAChE;aAAM;YAEJ,IAAmB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;SAClD;IACH,CAAC;IAED,UAAU,CAAC,IAA0C,EAAE,QAA6B,EAAE,CAAoB;;QACxG,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,KAAI,MAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,CAAC,0CAAE,eAAe,CAAA,EAAE;YAC7D,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;SACxE;QAED,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,KAAI,MAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,CAAC,0CAAE,eAAe,CAAA,EAAE;YAC7D,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;SACxE;QAED,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE;YACnC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;SACjB;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM;QACJ,KAAK,CAAC,MAAM,EAAE,CAAC;QAEf,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACrC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAgB,CAAC,CAAC;gBAEtD,IAAI,IAAI,IAAI,KAAK,EAAE;oBACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACnB,IAAI,CAAC,gBAAgB,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;iBAC5E;qBAAM,IAAI,KAAK,EAAE;oBAChB,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;oBAC3B,KAAK,CAAC,MAAM,EAAE,CAAC;iBAChB;YACH,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;CACF;AAzJD,gDAyJC","file":"view-navigation-base.js","sourcesContent":["import { isNil, isString } from '@visactor/vutils';\nimport type {\n FilterDataTarget,\n IBaseInteractionOptions,\n IComponent,\n IDataFilter,\n IDatazoom,\n IMark,\n IScale,\n IScrollbar,\n IView,\n InteractionEvent,\n ViewNavigationBaseOptions,\n ViewNavigationRange,\n ViewStateByDim\n} from '../types';\nimport { BaseInteraction } from './base';\nimport { ComponentEnum, DataFilterRank, GrammarMarkType } from '../graph/enums';\nimport { getScaleRangeRatio } from '../util/scale';\n\nexport abstract class ViewNavigationBase<\n T extends ViewNavigationBaseOptions & IBaseInteractionOptions\n> extends BaseInteraction<T> {\n options: T;\n\n protected _state: Partial<Record<'x' | 'y', ViewStateByDim>>;\n protected _inited?: boolean;\n protected _dataFilterX: IDataFilter;\n protected _dataFilterY: IDataFilter;\n\n constructor(view: IView, options?: T) {\n super(view, options);\n this.options = options;\n }\n\n protected _parseLinkedComponent(option: string | IDatazoom | IScrollbar): IDatazoom | IScrollbar {\n if (!option) {\n return null;\n }\n const comp: IMark = isString(option) ? this.view.getMarkById(option) : option;\n\n if (\n comp &&\n comp.markType === GrammarMarkType.component &&\n ((comp as IComponent).componentType === ComponentEnum.datazoom ||\n (comp as IComponent).componentType === ComponentEnum.scrollbar)\n ) {\n return comp as IDatazoom | IScrollbar;\n }\n\n return null;\n }\n\n protected _initStateByDim(\n dim: 'x' | 'y',\n linkedComponent?: string | IDatazoom | IScrollbar,\n scale?: string | IScale,\n dataTarget?: FilterDataTarget\n ) {\n const comp = this._parseLinkedComponent(linkedComponent);\n\n if (comp) {\n this._state[dim] = { linkedComponent: comp };\n return;\n }\n\n const scaleGrammar = !isNil(scale) ? (isString(scale) ? this.view.getScaleById(scale) : scale) : null;\n const dataGrammar = !isNil(dataTarget?.data)\n ? isString(dataTarget.data)\n ? this.view.getDataById(dataTarget.data)\n : dataTarget.data\n : null;\n\n if (!scaleGrammar || !dataGrammar) {\n this._state[dim] = { data: dataGrammar, scale: scaleGrammar };\n return;\n }\n\n dataGrammar.attach(scaleGrammar);\n\n const filterByScale = isString(dataTarget.filter)\n ? (datum: any, filterValue: number[]) => {\n const scale = scaleGrammar.getScale();\n const ratio = getScaleRangeRatio(scale, datum[dataTarget.filter as string]);\n\n return ratio >= filterValue[0] && ratio <= filterValue[1];\n }\n : dataTarget.filter;\n const dataFilter = {\n source: `${scaleGrammar.uid}`,\n rank: DataFilterRank.normal,\n filter: (data: any[]) => {\n const filterValue = dim === 'x' ? this._state?.x?.filterValue : this._state?.y?.filterValue;\n if (!filterValue) {\n return data;\n }\n const filteredData = data.filter(datum => filterByScale(datum, filterValue));\n return dataTarget.transform ? dataTarget.transform(filteredData, filterValue) : filteredData;\n }\n };\n\n if (dim === 'x') {\n this._dataFilterX = dataFilter;\n } else {\n this._dataFilterY = dataFilter;\n }\n\n dataGrammar.addDataFilter(dataFilter);\n\n this._state[dim] = { data: dataGrammar, scale: scaleGrammar };\n }\n\n protected _initGrammars() {\n const { enableX, enableY, scaleX, scaleY, dataTargetX, dataTargetY, linkedComponentX, linkedComponentY } =\n this.options;\n\n this._state = {};\n\n if (enableX !== false) {\n this._initStateByDim('x', linkedComponentX, scaleX, dataTargetX);\n }\n\n if (enableY !== false) {\n this._initStateByDim('y', linkedComponentY, scaleY, dataTargetY);\n }\n\n this._inited = true;\n }\n\n protected _updateLinkedComponent(comp: IDatazoom | IScrollbar, newRange: [number, number]) {\n if (comp.componentType === ComponentEnum.datazoom) {\n (comp as IDatazoom).setStartEndValue(newRange[0], newRange[1]);\n } else {\n // fix: need to update range scrollbar\n (comp as IScrollbar).setScrollStart(newRange[0]);\n }\n }\n\n updateView(type: 'start' | 'reset' | 'update' | 'end', newRange: ViewNavigationRange, e?: InteractionEvent) {\n if (newRange && newRange.x && this._state?.x?.linkedComponent) {\n this._updateLinkedComponent(this._state.x.linkedComponent, newRange.x);\n }\n\n if (newRange && newRange.y && this._state?.y?.linkedComponent) {\n this._updateLinkedComponent(this._state.y.linkedComponent, newRange.y);\n }\n\n if (newRange && newRange.needUpdate) {\n this.view.run();\n }\n\n this.dispatchEvent(type, { viewRange: newRange, event: e });\n }\n\n unbind() {\n super.unbind();\n\n if (this._state) {\n Object.keys(this._state).forEach(dim => {\n const { data, scale } = this._state[dim as 'x' | 'y'];\n\n if (data && scale) {\n data.detach(scale);\n data.removeDataFilter(dim === 'x' ? this._dataFilterX : this._dataFilterY);\n } else if (scale) {\n scale.setRangeFactor(null);\n scale.commit();\n }\n });\n }\n\n this._state = null;\n }\n}\n"]}
|