UNPKG

@nova-ui/charts

Version:

Nova Charts is a library created to provide potential consumers with solutions for various data visualizations that conform with the Nova Design Language. It's designed to solve common patterns identified by UX designers, but also be very flexible so that

113 lines 15.5 kB
// © 2022 SolarWinds Worldwide, LLC. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. import isEmpty from "lodash/isEmpty"; import { Subject } from "rxjs"; import { takeUntil } from "rxjs/operators"; import { INTERACTION_COORDINATES_EVENT, INTERACTION_VALUES_ACTIVE_EVENT, INTERACTION_VALUES_EVENT, MOUSE_ACTIVE_EVENT, } from "../../constants"; import { ChartPlugin } from "../common/chart-plugin"; import { InteractionType } from "../common/types"; import { UtilityService } from "../common/utility.service"; /** @ignore */ export class MouseInteractiveAreaPlugin extends ChartPlugin { mouseInteractiveArea; destroy$ = new Subject(); interactionValuesActive = true; constructor(mouseInteractiveArea) { super(); this.mouseInteractiveArea = mouseInteractiveArea; } initialize() { this.mouseInteractiveArea.active .pipe(takeUntil(this.destroy$)) .subscribe((active) => { this.chart .getEventBus() .getStream(MOUSE_ACTIVE_EVENT) .next({ data: active }); }); this.chart .getEventBus() .getStream(MOUSE_ACTIVE_EVENT) .pipe(takeUntil(this.destroy$)) .subscribe((event) => { const active = event.data; if (!active && this.chart.getDataManager().chartSeriesSet) { this.highlightReset(); } }); this.chart .getEventBus() .getStream(INTERACTION_VALUES_ACTIVE_EVENT) .pipe(takeUntil(this.destroy$)) .subscribe((event) => (this.interactionValuesActive = event.data)); this.mouseInteractiveArea.interaction .pipe(takeUntil(this.destroy$)) .subscribe((event) => { const gridScales = this.chart.getGrid().scales; if (isEmpty(gridScales)) { return; } if (this.interactionValuesActive) { const xScales = gridScales.x.list; const yScales = gridScales.y.list; const xCoordinate = event.coordinates.x; const yCoordinate = event.coordinates.y; const values = UtilityService.getXYValues(xScales, yScales, xCoordinate, yCoordinate); this.chart .getEventBus() .getStream(INTERACTION_VALUES_EVENT) .next({ data: { interactionType: event.type, values }, }); } this.chart .getEventBus() .getStream(INTERACTION_COORDINATES_EVENT) .next({ data: { interactionType: event.type, coordinates: event.coordinates, }, }); }); } update() { this.highlightReset(); } updateDimensions() { this.highlightReset(); } destroy() { this.destroy$.next(); this.destroy$.complete(); } highlightReset() { this.chart .getEventBus() .getStream(INTERACTION_VALUES_EVENT) .next({ data: { interactionType: InteractionType.MouseMove, values: {}, }, }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW91c2UtaW50ZXJhY3RpdmUtYXJlYS1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS9wbHVnaW5zL21vdXNlLWludGVyYWN0aXZlLWFyZWEtcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUVqQixPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczQyxPQUFPLEVBQ0gsNkJBQTZCLEVBQzdCLCtCQUErQixFQUMvQix3QkFBd0IsRUFDeEIsa0JBQWtCLEdBQ3JCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXJELE9BQU8sRUFBcUIsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNELGNBQWM7QUFDZCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsV0FBVztJQUluQztJQUhILFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBQ3hDLHVCQUF1QixHQUFHLElBQUksQ0FBQztJQUV2QyxZQUFvQixvQkFBMEM7UUFDMUQsS0FBSyxFQUFFLENBQUM7UUFEUSx5QkFB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Y0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLGdCQUFnQjtRQUNuQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLE9BQU87UUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVPLGNBQWM7UUFDbEIsSUFBSSxDQUFDLEtBQUs7YUFDTCxXQUFXLEVBQUU7YUFDYixTQUFTLENBQUMsd0JBQXdCLENBQUM7YUFDbkMsSUFBSSxDQUFDO1lBQ0YsSUFBSSxFQUFFO2dCQUNGLGVBQWUsRUFBRSxlQUFlLENBQUMsU0FBUztnQkFDMUMsTUFBTSxFQUFFLEVBQUU7YUFDYjtTQUNKLENBQUMsQ0FBQztJQUNYLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8vIMKpIDIwMjIgU29sYXJXaW5kcyBXb3JsZHdpZGUsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyAgVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgaXNFbXB0eSBmcm9tIFwibG9kYXNoL2lzRW1wdHlcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbmltcG9ydCB7IElJbnRlcmFjdGlvblZhbHVlcyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQge1xuICAgIElOVEVSQUNUSU9OX0NPT1JESU5BVEVTX0VWRU5ULFxuICAgIElOVEVSQUNUSU9OX1ZBTFVFU19BQ1RJVkVfRVZFTlQsXG4gICAgSU5URVJBQ1RJT05fVkFMVUVTX0VWRU5ULFxuICAgIE1PVVNFX0FDVElWRV9FVkVOVCxcbn0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ2hhcnRQbHVnaW4gfSBmcm9tIFwiLi4vY29tbW9uL2NoYXJ0LXBsdWdpblwiO1xuaW1wb3J0IHsgTW91c2VJbnRlcmFjdGl2ZUFyZWEgfSBmcm9tIFwiLi4vY29tbW9uL21vdXNlLWludGVyYWN0aXZlLWFyZWFcIjtcbmltcG9ydCB7IElJbnRlcmFjdGlvbkV2ZW50LCBJbnRlcmFjdGlvblR5cGUgfSBmcm9tIFwiLi4vY29tbW9uL3R5cGVzXCI7XG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gXCIuLi9jb21tb24vdXRpbGl0eS5zZXJ2aWNlXCI7XG5cbi8qKiBAaWdub3JlICovXG5leHBvcnQgY2xhc3MgTW91c2VJbnRlcmFjdGl2ZUFyZWFQbHVnaW4gZXh0ZW5kcyBDaGFydFBsdWdpbiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBpbnRlcmFjdGlvblZhbHVlc0FjdGl2ZSA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vdXNlSW50ZXJhY3RpdmVBcmVhOiBNb3VzZUludGVyYWN0aXZlQXJlYSkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vdXNlSW50ZXJhY3RpdmVBcmVhLmFjdGl2ZVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoYWN0aXZlOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFydFxuICAgICAgICAgICAgICAgICAgICAuZ2V0RXZlbnRCdXMoKVxuICAgICAgICAgICAgICAgICAgICAuZ2V0U3RyZWFtKE1PVVNFX0FDVElWRV9FVkVOVClcbiAgICAgICAgICAgICAgICAgICAgLm5leHQoeyBkYXRhOiBhY3RpdmUgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNoYXJ0XG4gICAgICAgICAgICAuZ2V0RXZlbnRCdXMoKVxuICAgICAgICAgICAgLmdldFN0cmVhbShNT1VTRV9BQ1RJVkVfRVZFTlQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZTogYm9vbGVhbiA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKCFhY3RpdmUgJiYgdGhpcy5jaGFydC5nZXREYXRhTWFuYWdlcigpLmNoYXJ0U2VyaWVzU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0UmVzZXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNoYXJ0XG4gICAgICAgICAgICAuZ2V0RXZlbnRCdXMoKVxuICAgICAgICAgICAgLmdldFN0cmVhbShJTlRFUkFDVElPTl9WQUxVRVNfQUNUSVZFX0VWRU5UKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+ICh0aGlzLmludGVyYWN0aW9uVmFsdWVzQWN0aXZlID0gZXZlbnQuZGF0YSkpO1xuXG4gICAgICAgIHRoaXMubW91c2VJbnRlcmFjdGl2ZUFyZWEuaW50ZXJhY3Rpb25cbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBJSW50ZXJhY3Rpb25FdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWRTY2FsZXMgPSB0aGlzLmNoYXJ0LmdldEdyaWQoKS5zY2FsZXM7XG4gICAgICAgICAgICAgICAgaWYgKGlzRW1wdHkoZ3JpZFNjYWxlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmludGVyYWN0aW9uVmFsdWVzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhTY2FsZXMgPSBncmlkU2NhbGVzLngubGlzdDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeVNjYWxlcyA9IGdyaWRTY2FsZXMueS5saXN0O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4Q29vcmRpbmF0ZSA9IGV2ZW50LmNvb3JkaW5hdGVzLng7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHlDb29yZGluYXRlID0gZXZlbnQuY29vcmRpbmF0ZXMueTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZXM6IElJbnRlcmFjdGlvblZhbHVlcyA9XG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5U2VydmljZS5nZXRYWVZhbHVlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4U2NhbGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlTY2FsZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeENvb3JkaW5hdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeUNvb3JkaW5hdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRFdmVudEJ1cygpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U3RyZWFtKElOVEVSQUNUSU9OX1ZBTFVFU19FVkVOVClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IGludGVyYWN0aW9uVHlwZTogZXZlbnQudHlwZSwgdmFsdWVzIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0XG4gICAgICAgICAgICAgICAgICAgIC5nZXRFdmVudEJ1cygpXG4gICAgICAgICAgICAgICAgICAgIC5nZXRTdHJlYW0oSU5URVJBQ1RJT05fQ09PUkRJTkFURVNfRVZFTlQpXG4gICAgICAgICAgICAgICAgICAgIC5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGlvblR5cGU6IGV2ZW50LnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXM6IGV2ZW50LmNvb3JkaW5hdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpZ2hsaWdodFJlc2V0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZURpbWVuc2lvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0UmVzZXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZ2hsaWdodFJlc2V0KCkge1xuICAgICAgICB0aGlzLmNoYXJ0XG4gICAgICAgICAgICAuZ2V0RXZlbnRCdXMoKVxuICAgICAgICAgICAgLmdldFN0cmVhbShJTlRFUkFDVElPTl9WQUxVRVNfRVZFTlQpXG4gICAgICAgICAgICAubmV4dCh7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGlvblR5cGU6IEludGVyYWN0aW9uVHlwZS5Nb3VzZU1vdmUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczoge30sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==