@tetacom/svg-charts 1.0.1 → 1.0.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"tetacom-svg-charts.mjs","sources":["../../src/chart/model/enum/axis-orientation.ts","../../src/chart/core/utils/get-text-width.ts","../../src/chart/core/utils/generate-ticks.ts","../../src/chart/core/axis/builders/axis-size-builder.ts","../../src/chart/core/axis/builders/extremes-builder.ts","../../src/chart/model/enum/axis-type.ts","../../src/chart/core/axis/axis.ts","../../src/chart/service/axes.service.ts","../../src/chart/service/scale.service.ts","../../src/chart/service/chart.service.ts","../../src/chart/model/enum/zoom-type.ts","../../src/chart/model/enum/brush-type.ts","../../src/chart/service/broadcast.service.ts","../../src/chart/service/zoom.service.ts","../../src/chart/service/brush.service.ts","../../src/chart/model/chart-bounds.ts","../../src/chart/chart-container/tooltip/tooltip.component.ts","../../src/chart/chart-container/tooltip/tooltip.component.html","../../src/chart/chart-container/y-axis/y-axis.component.ts","../../src/chart/chart-container/y-axis/y-axis.component.html","../../src/chart/chart-container/x-axis/x-axis.component.ts","../../src/chart/chart-container/x-axis/x-axis.component.html","../../src/chart/chart-container/gridlines/gridlines.component.ts","../../src/chart/chart-container/gridlines/gridlines.component.html","../../src/chart/chart-container/plotline/plotline.component.ts","../../src/chart/chart-container/plotline/plotline.component.html","../../src/chart/chart-container/plotband/plotband.component.ts","../../src/chart/chart-container/plotband/plotband.component.html","../../src/chart/base/series-base.component.ts","../../src/chart/model/enum/tooltip-tracking.ts","../../src/chart/model/enum/drag-point-type.ts","../../src/chart/chart-container/series/line/line-series.component.ts","../../src/chart/chart-container/series/line/line-series.component.html","../../src/chart/chart-container/series/bar/bar-series.component.ts","../../src/chart/chart-container/series/bar/bar-series.component.html","../../src/chart/model/enum/series-type.ts","../../src/chart/chart-container/series-host/series-host.component.ts","../../src/chart/directives/brushable.directive.ts","../../src/chart/directives/zoomable.directive.ts","../../src/chart/chart-container/chart-container.component.ts","../../src/chart/chart-container/chart-container.component.html","../../src/chart/legend/legend.component.ts","../../src/chart/legend/legend.component.html","../../src/chart/chart/chart.component.ts","../../src/chart/chart/chart.component.html","../../src/chart/chart.module.ts","../../src/public-api.ts","../../src/tetacom-svg-charts.ts"],"sourcesContent":["export enum AxisOrientation {\n x,\n y\n}\n","export const getTextWidth = (\n inputText?: string | number | null,\n backupRatio = 0.5,\n fontSize = 11\n): number => {\n let text = inputText ?? '';\n text = text.toString();\n\n return fontSize * backupRatio * text.length;\n};\n","import * as d3 from 'd3';\n\nexport function generateTicks(extremes: number[]) {\n const [min, max] = extremes;\n\n const tickCount = 10;\n const tickStep = (max - min) / tickCount;\n\n const ticks = d3\n .range(min, max + tickStep, tickStep)\n .filter((step) => step <= max);\n\n return ticks;\n}\n","import { Axis } from '../axis';\nimport { AxisOrientation } from '../../../model/enum/axis-orientation';\nimport { maxIndex } from 'd3-array';\nimport { getTextWidth } from '../../utils/public-api';\nimport { IBuilder } from '../../../model/i-builder';\n\nexport class AxisSizeBuilder implements IBuilder<Axis, number> {\n private titlePadding = 8;\n private basePadding = 16;\n private backupRatio = 0.58;\n\n build(settings: Axis): number {\n let finalPadding = this.basePadding;\n\n if (settings.orientation === AxisOrientation.y) {\n const formatter = settings.defaultFormatter();\n\n finalPadding += settings.options.title ? this.titlePadding : 0;\n\n const maxElementLengthIndex = maxIndex(\n settings.tickValues,\n (_) => formatter(_).length\n );\n\n finalPadding += getTextWidth(\n formatter(settings.tickValues[maxElementLengthIndex]),\n this.backupRatio\n );\n }\n\n if (settings.orientation === AxisOrientation.x) {\n finalPadding += finalPadding + 20;\n }\n\n return finalPadding;\n }\n}\n","import { IBuilder } from '../../../model/i-builder';\nimport { Axis } from '../axis';\nimport { BasePoint } from '../../../model/base-point';\nimport { AxisOrientation } from '../../../model/enum/axis-orientation';\n\nimport * as d3 from 'd3';\n\nexport class ExtremesBuilder implements IBuilder<Axis, [number, number]> {\n private extentAccessorMap = new Map<\n AxisOrientation,\n (point: BasePoint) => number\n >()\n .set(AxisOrientation.x, (_) => _.x)\n .set(AxisOrientation.y, (_) => _.y);\n\n private extremes: [number, number] = [0, 0];\n\n build(settings: Axis): [number, number] {\n const options = settings.options;\n\n const hasMin = options?.min != null;\n const hasMax = options?.max != null;\n\n if (!hasMin || !hasMax) {\n const linkedSeries = settings.linkedSeries();\n const data = linkedSeries.reduce((acc: BasePoint[], current) => {\n return acc.concat(current.data);\n }, []);\n\n const accessor = this.extentAccessorMap.get(settings.orientation);\n // add negative axis!\n\n this.extremes = d3.extent(data, accessor);\n }\n\n if (hasMin) {\n this.extremes[0] = options?.min;\n }\n\n if (hasMax) {\n this.extremes[1] = options?.max;\n }\n return this.extremes;\n }\n}\n","export enum AxisType {\n number,\n time,\n category,\n log,\n pow,\n}\n","import { IChartConfig } from '../../model/i-chart-config';\nimport { AxisOrientation } from '../../model/enum/axis-orientation';\nimport { Series } from '../../model/series';\nimport { BasePoint } from '../../model/base-point';\nimport * as d3 from 'd3';\nimport { AxisOptions } from '../../model/axis-options';\nimport { AxisSizeBuilder, ExtremesBuilder } from './builders/public-api';\nimport { AxisType } from '../../model/enum/axis-type';\n\nimport { generateTicks } from '../utils/public-api';\n\nexport class Axis {\n private chartConfig: IChartConfig;\n private _orientation: AxisOrientation;\n private _index: number | string;\n private _extremes: [number, number] = [0, 0];\n private _selfSize: number;\n private _ticksValues: number[];\n\n private defaultFormatters = new Map<AxisType, any>()\n .set(AxisType.number, d3.format(',.2f'))\n .set(AxisType.time, d3.timeFormat('%B %d, %Y'))\n .set(AxisType.log, d3.format(',.2f'));\n\n constructor(config: IChartConfig) {\n this.chartConfig = config;\n }\n\n /**\n * Factory for creating x,y axes\n * @param {AxisOrientation} orientation\n * Axis type\n * @param {IChartConfig} config\n * Chart config\n * @param {number} index\n * Index axis\n * @return {Axis}\n * New generated axis\n */\n public static createAxis(\n orientation: AxisOrientation,\n config: IChartConfig,\n index: number\n ): Axis {\n const axis = new Axis(config);\n axis.setLocate(orientation);\n axis.setIndex(index);\n axis.setExtremes();\n axis.setTicksValues();\n axis.setSelfSize();\n\n return axis;\n }\n\n /**\n *\n * @param {orientation} orientation\n * Set locate axis x or y\n */\n private setLocate(orientation: AxisOrientation): void {\n this._orientation = orientation;\n }\n\n /**\n *\n * @param {number | string} index\n * Index axis\n */\n private setIndex(index: number | string): void {\n this._index = index;\n }\n\n /**\n * @return {Array<Series<BasePoint>>}\n * Linked series\n */\n public linkedSeries(): Array<Series<BasePoint>> {\n const linkedFilter = (serie: Series<BasePoint>) =>\n serie[\n this._orientation === AxisOrientation.y ? 'yAxisIndex' : 'xAxisIndex'\n ] === this._index;\n\n return this.chartConfig?.series.filter(linkedFilter);\n }\n\n private setExtremes(): void {\n const builder = new ExtremesBuilder();\n this._extremes = builder.build(this);\n\n this._extremes = d3.nice(this._extremes[0], this._extremes[1], 10);\n }\n\n private setSelfSize(): void {\n const builder = new AxisSizeBuilder();\n this._selfSize = builder.build(this);\n }\n\n private setTicksValues(): void {\n const ticks = generateTicks(this._extremes);\n this._ticksValues = ticks;\n }\n\n get extremes(): Array<number> {\n return this._extremes;\n }\n\n get orientation(): AxisOrientation {\n return this._orientation;\n }\n\n get selfSize(): number {\n return this._selfSize;\n }\n\n get tickValues(): number[] {\n return this._ticksValues;\n }\n\n get index() {\n return this._index;\n }\n\n get options(): AxisOptions {\n return this.orientation === AxisOrientation.x\n ? this.chartConfig.xAxis[this.index]\n : this.chartConfig.yAxis[this.index];\n }\n\n public defaultFormatter() {\n return this.defaultFormatters.get(this.options.type);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { AxisOrientation } from '../model/enum/axis-orientation';\nimport { Axis } from '../core/axis/axis';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AxesService {\n public yAxis: Map<number, Axis> = new Map<number, Axis>();\n public xAxis: Map<number, Axis> = new Map<number, Axis>();\n\n constructor() {}\n\n init(config: IChartConfig) {\n config?.yAxis.forEach((_, index) => {\n const axis = Axis.createAxis(AxisOrientation.y, config, index);\n\n this.yAxis.set(index, axis);\n });\n config?.xAxis.forEach((_, index) => {\n const axis = Axis.createAxis(AxisOrientation.x, config, index);\n\n this.xAxis.set(index, axis);\n });\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { AxesService } from './axes.service';\nimport * as d3 from 'd3';\nimport { AxisType } from '../model/enum/axis-type';\nimport { Axis } from '../core/axis/axis';\nimport { AxisOrientation } from '../model/enum/axis-orientation';\n\nimport { IChartConfig } from '../model/i-chart-config';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ScaleService {\n public yScales: Map<number | string, any> = new Map<number | string, any>();\n public xScales: Map<number | string, any> = new Map<number | string, any>();\n\n private scaleMapping = new Map<AxisType, any>()\n .set(AxisType.number, d3.scaleLinear)\n .set(AxisType.time, d3.scaleTime)\n .set(AxisType.category, d3.scaleOrdinal)\n .set(AxisType.log, d3.scaleLog);\n\n constructor(private axesService: AxesService) {}\n\n public createScales(size: DOMRect, config?: IChartConfig) {\n this.yScales.clear();\n this.xScales.clear();\n\n const topBound = [...this.axesService.xAxis.values()]\n .filter((_) => _.options?.visible && _.options?.opposite)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const bottomBound = [...this.axesService.xAxis.values()]\n .filter((_) => _.options?.visible && _.options?.opposite !== true)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const leftBound = [...this.axesService.yAxis.values()]\n .filter((_) => _.options?.visible && _.options.opposite !== true)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const rightBound = [...this.axesService.yAxis.values()]\n .filter((_) => _.options?.visible && _.options.opposite)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n this.axesService.yAxis.forEach((axis: Axis) => {\n const scale = this.getScale(axis).range([\n 0,\n size.height - topBound - bottomBound,\n ]);\n\n this.yScales.set(axis.index, scale);\n });\n\n this.axesService.xAxis.forEach((axis: Axis) => {\n const scale = this.getScale(axis).range([\n 0,\n size.width - leftBound - rightBound,\n ]);\n\n this.xScales.set(axis.index, scale);\n });\n }\n\n private getScale(axis: Axis) {\n return this.scaleMapping\n .get(axis.options?.type)()\n .domain(\n axis.orientation === AxisOrientation.y\n ? [...axis.extremes].reverse()\n : axis.extremes\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { AxesService } from './axes.service';\nimport { map, Observable, Subject } from 'rxjs';\nimport { ScaleService } from './scale.service';\nimport { IChartEvent } from '../model/i-chart-event';\nimport { IDisplayTooltip } from '../model/i-display-tooltip';\nimport { Plotband } from '../model/plotband';\nimport { PlotLine } from '../model/plotline';\nimport { IPointMove } from '../model/i-point-move';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ChartService {\n public size: Observable<DOMRect>;\n public pointerMove: Observable<any>;\n public tooltips: Observable<IDisplayTooltip>;\n public plotbandMove: Observable<IChartEvent<Plotband>>;\n public plotlineMove: Observable<IChartEvent<PlotLine>>;\n public pointMove: Observable<IChartEvent<IPointMove>>;\n\n private size$ = new Subject<DOMRect>();\n private pointerMove$ = new Subject<any>();\n private tooltips$ = new Subject<IDisplayTooltip>();\n private plotbandMove$ = new Subject<IChartEvent<Plotband>>();\n private plotlineMove$ = new Subject<IChartEvent<PlotLine>>();\n private pointMove$ = new Subject<IChartEvent<IPointMove>>();\n\n private _config: IChartConfig;\n\n constructor(\n private axesService: AxesService,\n private scaleService: ScaleService\n ) {\n this.size = this.size$.asObservable();\n this.pointerMove = this.pointerMove$.asObservable();\n this.tooltips = this.tooltips$.asObservable();\n this.plotbandMove = this.plotbandMove$.asObservable();\n this.plotlineMove = this.plotlineMove$.asObservable();\n this.pointMove = this.pointMove$.asObservable();\n\n this.size\n .pipe(\n map((size) => {\n this.scaleService.createScales(size, this._config);\n })\n )\n .subscribe();\n }\n\n public init(config: IChartConfig) {\n this._config = config;\n\n if (config.inverted) {\n this._config.series = this._config?.series?.map((serie) => {\n return {\n ...serie,\n data: serie?.data?.map((point) => {\n return {\n ...point,\n x: point?.y,\n y: point?.x,\n };\n }),\n };\n });\n }\n\n this.axesService.init(this._config);\n }\n\n public setSize(size: DOMRect) {\n this.size$.next(size);\n }\n\n public setPointerMove(event: any) {\n this.pointerMove$.next({ event });\n }\n\n public setTooltip(tooltip: IDisplayTooltip) {\n this.tooltips$.next(tooltip);\n }\n\n public emitPlotband(event: IChartEvent<Plotband>) {\n this.plotbandMove$.next(event);\n }\n\n public emitPlotline(event: IChartEvent<PlotLine>) {\n this.plotlineMove$.next(event);\n }\n\n public emitPoint(event: IChartEvent<IPointMove>) {\n this.pointMove$.next(event);\n }\n\n get config(): IChartConfig {\n return this._config;\n }\n}\n","export enum ZoomType {\n x,\n y,\n xy,\n}\n","export enum BrushType {\n x,\n y,\n xy,\n}\n","import { Injectable } from '@angular/core';\nimport { IBroadcastMessage } from '../model/i-broadcast-message';\nimport { filter, Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BroadcastService {\n private emitter: Subject<IBroadcastMessage>;\n\n constructor() {\n this.emitter = new Subject<IBroadcastMessage>();\n }\n\n broadcast(value: IBroadcastMessage) {\n this.emitter.next(value);\n }\n\n subscribeToChannel(channel: string): Observable<IBroadcastMessage> {\n return this.emitter\n .asObservable()\n .pipe(filter((msg) => channel && msg.channel === channel));\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport * as d3 from 'd3';\nimport { D3ZoomEvent, zoomIdentity } from 'd3';\nimport { ScaleService } from './scale.service';\nimport { map, merge, Observable, of, Subject, Subscription } from 'rxjs';\nimport { IChartEvent } from '../model/i-chart-event';\nimport { ZoomType } from '../model/enum/zoom-type';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { BroadcastService } from './broadcast.service';\nimport { ChartService } from './chart.service';\nimport { BrushType } from '../model/enum/brush-type';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ZoomService {\n zoomed: Observable<any>;\n private zoomed$ = new Subject<any>();\n\n broadcastSubscribtion: Subscription;\n\n private x = new Map<number | string, any>();\n private y = new Map<number | string, any>();\n\n private zoom;\n private svg;\n private initialZoom = zoomIdentity;\n\n constructor(\n private scaleService: ScaleService,\n private broadcastService: BroadcastService,\n private chartService: ChartService\n ) {\n this.zoomed = this.zoomed$.asObservable();\n\n merge(of(1), this.chartService.size)\n .pipe(\n map((_) => {\n this.x = new Map(this.scaleService.xScales);\n this.y = new Map(this.scaleService.yScales);\n\n if (this.svg) {\n const currentTransform = d3.zoomTransform(this.svg.node());\n this.setZoom(currentTransform);\n }\n })\n )\n .subscribe();\n }\n\n applyZoom(svgElement: ElementRef, config: IChartConfig, size: DOMRect) {\n this.broadcastSubscribtion?.unsubscribe();\n\n this.svg = d3.select(svgElement.nativeElement);\n\n const zoomType = config?.zoom?.type;\n const enable = config?.zoom?.enable;\n\n const zoomed = (event: D3ZoomEvent<any, any>) => {\n const { transform } = event;\n\n if (zoomType === ZoomType.x || zoomType === ZoomType.xy) {\n for (let [index, scale] of this.x.entries()) {\n this.scaleService.xScales.set(index, transform.rescaleX(scale));\n }\n }\n\n if (zoomType === ZoomType.y || zoomType === ZoomType.xy) {\n for (let [index, scale] of this.y.entries()) {\n this.scaleService.yScales.set(index, transform.rescaleY(scale));\n }\n }\n\n if (enable) {\n this.zoomed$.next({ event });\n\n if (event.sourceEvent) {\n this.broadcastService.broadcast({\n channel: config?.zoom?.syncChannel,\n message: event,\n domain: this.scaleService[\n config?.zoom?.type === ZoomType.x ? 'xScales' : 'yScales'\n ]\n .get(config.brush?.axisIndex ?? 0)\n .domain(),\n });\n }\n }\n };\n\n if (enable) {\n this.zoom = d3\n .zoom()\n .scaleExtent([1, Infinity])\n .extent([\n [0, 0],\n [size.width, size.height],\n ]);\n\n this.zoom.on('start zoom end', zoomed);\n this.svg.call(this.zoom);\n this.svg.call(this.zoom.transform, this.initialZoom);\n\n const sc =\n config?.zoom?.type === ZoomType.x\n ? this.x.get(config.brush?.axisIndex ?? 0)\n : this.y.get(config.brush?.axisIndex ?? 0);\n\n this.broadcastSubscribtion = this.broadcastService\n .subscribeToChannel(config?.zoom?.syncChannel)\n .pipe(\n map((_) => {\n const currentTransform = d3.zoomTransform(this.svg.node());\n\n const { message } = _;\n if (currentTransform !== message?.transform) {\n if (message.selection) {\n const s = message.selection;\n\n const domain = sc.domain();\n\n const scale = (domain[1] - domain[0]) / (s[1] - s[0]);\n\n let transform = zoomIdentity.scale(scale);\n\n if (message?.brushType === BrushType.x) {\n transform = transform.translate(-sc(s[0]), 0);\n }\n if (message?.brushType === BrushType.y) {\n transform = transform.translate(0, -sc(s[0]));\n }\n\n this.setZoom(transform);\n\n return;\n }\n\n this.setZoom(message?.transform);\n }\n })\n )\n .subscribe();\n }\n }\n\n setZoom(transform: any) {\n // requestAnimationFrame(() => {\n //\n // });\n\n this.svg?.call(this.zoom.transform, transform);\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { BrushType } from '../model/enum/brush-type';\nimport * as d3 from 'd3';\nimport { map, Subscription } from 'rxjs';\nimport { BroadcastService } from './broadcast.service';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { ScaleService } from './scale.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BrushService {\n broadcastSubscribtion: Subscription;\n\n private brushMap = new Map<BrushType, d3.BrushBehavior<any>>()\n .set(BrushType.x, d3.brushX())\n .set(BrushType.y, d3.brushY());\n\n private scaleMap = new Map<BrushType, string>()\n .set(BrushType.x, 'xScales')\n .set(BrushType.y, 'yScales');\n\n constructor(\n private broadcastService: BroadcastService,\n private scaleService: ScaleService\n ) {}\n\n applyBrush(svgElement: ElementRef, config: IChartConfig, size: DOMRect) {\n this.broadcastSubscribtion?.unsubscribe();\n\n if (config.brush?.enable) {\n const s = this.scaleService[\n this.scaleMap.get(config?.brush?.type ?? BrushType.x)\n ].get(config?.brush?.axisIndex ?? 0);\n\n const brush = this.brushMap.get(config?.brush?.type ?? BrushType.x);\n\n const container = d3.select(svgElement.nativeElement);\n\n const brushBehavior = brush.on(\n 'start brush end',\n (_: d3.D3BrushEvent<any>) => {\n if (_.sourceEvent) {\n const [from, to] = _.selection as number[];\n\n if (to - from < 5) {\n container.call(brush.move, [from, to]);\n return;\n }\n\n this.broadcastService.broadcast({\n channel: config?.zoom?.syncChannel,\n message: {\n ..._,\n selection: [s.invert(from), s.invert(to)],\n brushType: config?.brush?.type ?? BrushType.x,\n },\n });\n }\n }\n );\n\n container.call(brushBehavior);\n\n setTimeout(() => {\n container.call(brush.move, s.domain().map(s), {});\n });\n\n this.broadcastSubscribtion = this.broadcastService\n .subscribeToChannel(config?.zoom?.syncChannel)\n .pipe(\n map((_) => {\n if (_.message?.transform) {\n const s = this.scaleService[\n this.scaleMap.get(config?.brush?.type ?? BrushType.x)\n ].get(config?.brush?.axisIndex ?? 0);\n\n const domain = _.domain;\n\n container.call(brush.move, [s(domain[0]), s(domain[1])]);\n }\n })\n )\n .subscribe();\n }\n }\n}\n","export class ChartBounds {\n top = 0;\n right = 30;\n bottom = 0;\n left = 0;\n\n constructor(options?: {\n top?: number;\n right?: number;\n bottom?: number;\n left: number;\n }) {\n this.top = options?.top || this.top;\n this.right = options?.right || this.right;\n this.bottom = options?.bottom || this.bottom;\n this.left = options?.left || this.left;\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { filter, map, merge, Observable, takeWhile, tap } from 'rxjs';\nimport { ChartService } from '../../service/chart.service';\nimport { ZoomService } from '../../service/zoom.service';\nimport { IChartEvent } from '../../model/i-chart-event';\nimport { IDisplayTooltip } from '../../model/i-display-tooltip';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Component({\n selector: 'teta-tooltip',\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss'],\n})\nexport class TooltipComponent implements OnInit, OnDestroy {\n @Input() size: DOMRect;\n\n position: Observable<{\n left: string;\n top: string;\n bottom: string;\n right: string;\n }>;\n\n displayTooltips: Observable<string>;\n\n tooltips = [];\n\n private alive = true;\n\n display: Observable<number>;\n\n constructor(\n private svc: ChartService,\n private cdr: ChangeDetectorRef,\n private zoomService: ZoomService,\n private sanitizer: DomSanitizer\n ) {}\n\n ngOnInit(): void {\n this.display = merge(this.svc.pointerMove, this.zoomService.zoomed).pipe(\n map(({ event }) => {\n const opacity = event?.type === 'mousemove' ? 1 : 0;\n\n return opacity;\n }),\n tap(() => {\n requestAnimationFrame(() => {\n this.cdr.detectChanges();\n });\n })\n );\n\n this.position = this.svc.pointerMove.pipe(\n filter(({ event }) => event),\n map((_) => {\n return this.getPoisition(_);\n }),\n tap((_) => this.cdr.detectChanges())\n );\n\n const transformHtml = (html) => {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n };\n\n const defaultFormatter = (tooltips: IDisplayTooltip[]) => {\n let html = '';\n\n tooltips.forEach((_) => {\n const indicatorStyle = `display:block; width: 10px; height: 2px; background-color: ${_?.series?.color}`;\n\n html += `<div class=\"display-flex align-center\"><span class=\"margin-right-1\" style=\"${indicatorStyle}\"></span>\n <span class=\"font-title-3\">${_.series.name}\n <span class=\"font-body-3\">x: ${_.point.x?.toFixed(\n 2\n )} y: ${_.point.y?.toFixed(2)}</span></span></div>`;\n });\n\n return transformHtml(html);\n };\n\n const formatter = this.svc.config?.tooltip?.format;\n\n this.displayTooltips = merge(\n this.svc.pointerMove.pipe(tap((_) => (this.tooltips = []))),\n this.svc.tooltips\n ).pipe(\n takeWhile((_) => this.alive),\n filter((_) => !_['event']),\n map((tooltip: any) => {\n if (tooltip) {\n this.tooltips.push(tooltip);\n }\n\n const formatted = formatter\n ? formatter(this.tooltips)\n : defaultFormatter(this.tooltips);\n\n return formatted;\n })\n );\n }\n\n private getPoisition({ event }: any) {\n const centerX = this.size.width / 2;\n const centerY = this.size.height / 2;\n\n const padding = { x: 10, y: 10 };\n\n const scene = {\n left: event.pageX > centerX ? 'initial' : `${event.pageX + padding.x}px`,\n top: event.pageY > centerY ? 'initial' : `${event.pageY + padding.y}px`,\n bottom:\n event.pageY > centerY\n ? `${window.innerHeight - event.pageY}px`\n : 'initial',\n right:\n event.pageX > centerX\n ? `${window.innerWidth - event.pageX + padding.x}px`\n : 'initial',\n };\n\n return scene;\n }\n\n ngOnDestroy() {\n this.alive = false;\n }\n}\n","<ng-container *ngIf=\"position | async as p\">\n\n <div class=\"chart-tooltip color-text-90 bg-background-50 shadow-2 padding-2 border-radius-1\"\n [style.position]=\"'fixed'\"\n [style.opacity]=\"display | async\"\n style=\"pointer-events: none;\"\n [style.left]=\"p.left\"\n [style.top]=\"p.top\"\n [style.bottom]=\"p.bottom\"\n [style.right]=\"p.right\"\n [innerHTML]=\"displayTooltips | async\">\n </div>\n</ng-container>\n\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { Axis } from '../../core/axis/axis';\nimport * as d3 from 'd3';\nimport { ScaleService } from '../../service/scale.service';\nimport { ChartService } from '../../service/chart.service';\nimport { ZoomService } from '../../service/zoom.service';\nimport { merge, takeWhile, tap } from 'rxjs';\n\n@Component({\n selector: '[teta-y-axis]',\n templateUrl: './y-axis.component.html',\n styleUrls: ['./y-axis.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class YAxisComponent implements OnInit, OnDestroy, AfterViewInit {\n @Input() axis: Axis;\n @Input() size: DOMRect;\n @ViewChild('svg') node: ElementRef;\n\n private _alive = true;\n\n constructor(\n private scaleService: ScaleService,\n private chartService: ChartService,\n private cdr: ChangeDetectorRef,\n private zoomService: ZoomService\n ) {\n merge(this.zoomService.zoomed, this.chartService.size)\n .pipe(\n takeWhile(() => this._alive),\n tap((_) => {\n this.draw();\n this.cdr.markForCheck();\n })\n )\n .subscribe();\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n ngAfterViewInit() {\n this.draw();\n }\n\n getLabelTransform() {\n return `translate(${\n this.axis.options.opposite\n ? this.axis.selfSize - 24\n : -this.axis.selfSize + 24\n }, ${this.size.height / 2}) rotate(${\n this.axis.options.opposite ? '90' : '-90'\n })`;\n }\n\n private draw() {\n const scale = this.scaleService.yScales.get(this.axis.index);\n\n const axis = this.axis.options.opposite\n ? d3\n .axisRight(scale)\n // .tickValues(this.axis.tickValues)\n .tickFormat(\n this.axis.options.tickFormat ?? this.axis.defaultFormatter()\n )\n : d3\n .axisLeft(scale)\n // .tickValues(this.axis.tickValues)\n .tickFormat(\n this.axis.options.tickFormat ?? this.axis.defaultFormatter()\n );\n\n d3.select(this.node.nativeElement)\n .call(axis)\n .call((_) => _.select('.domain').remove());\n }\n}\n","<svg:g #svg></svg:g>\n<svg:g class=\"label-axis font-caption\" [attr.transform]=\"getLabelTransform()\">\n <text dy=\"-8px\" text-anchor=\"middle\" dominant-baseline=\"middle\">{{ axis.options.title }}</text>\n</svg:g>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { Axis } from '../../core/axis/axis';\nimport { ScaleService } from '../../service/scale.service';\nimport { ChartService } from '../../service/chart.service';\nimport * as d3 from 'd3';\nimport { ZoomService } from '../../service/zoom.service';\nimport { concat, map, merge, takeWhile, tap } from 'rxjs';\n\n@Component({\n selector: '[teta-x-axis]',\n templateUrl: './x-axis.component.html',\n styleUrls: ['./x-axis.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class XAxisComponent implements OnInit, OnDestroy, AfterViewInit {\n @Input() axis: Axis;\n @Input() size: DOMRect;\n @ViewChild('svg') node: ElementRef;\n\n private _alive = true;\n\n constructor(\n private scaleService: ScaleService,\n private chartService: ChartService,\n private cdr: ChangeDetectorRef,\n private zoomService: ZoomService\n ) {\n merge(this.zoomService.zoomed, this.chartService.size)\n .pipe(\n takeWhile(() => this._alive),\n tap((_) => {\n this.draw();\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n ngAfterViewInit() {\n this.draw();\n }\n\n private draw() {\n const scale = this.scaleService.xScales.get(this.axis.index);\n\n const axis = this.axis.options.opposite\n ? d3\n .axisTop(scale)\n .tickFormat(\n this.axis.options.tickFormat ?? this.axis.defaultFormatter()\n )\n : d3\n .axisBottom(scale)\n .tickFormat(\n this.axis.options.tickFormat ?? this.axis.defaultFormatter()\n );\n\n d3.select(this.node.nativeElement)\n .call(axis)\n .call((_) => _.select('.domain').remove());\n }\n}\n","<svg:g #svg></svg:g>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ScaleService } from '../../service/scale.service';\nimport { AxesService } from '../../service/axes.service';\n\nimport { merge, tap } from 'rxjs';\nimport { ChartService } from '../../service/chart.service';\nimport { ZoomService } from '../../service/zoom.service';\n\n@Component({\n selector: '[teta-gridlines]',\n templateUrl: './gridlines.component.html',\n styleUrls: ['./gridlines.component.scss'],\n})\nexport class GridlinesComponent implements OnInit {\n @Input() size: DOMRect;\n tickYValues: number[];\n tickXValues: number[];\n y: any;\n x: any;\n\n constructor(\n private scaleService: ScaleService,\n private axesService: AxesService,\n private chartService: ChartService,\n private zoomService: ZoomService,\n private cdr: ChangeDetectorRef\n ) {\n merge(this.chartService.size, this.zoomService.zoomed)\n .pipe(\n tap(() => {\n this.draw();\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n draw() {\n this.y = this.scaleService.yScales.get(0);\n this.x = this.scaleService.xScales.get(0);\n\n this.tickYValues = this.y.ticks();\n this.tickXValues = this.x.ticks();\n }\n\n ngOnInit(): void {\n this.draw();\n }\n}\n","<ng-container *ngFor=\"let tick of tickYValues\">\n <svg:line [attr.x1]=\"0\" stroke=\"red\" [attr.y1]=\"y(tick)\" [attr.x2]=\"size?.width\" [attr.y2]=\"y(tick)\"></svg:line>\n</ng-container>\n\n<ng-container *ngFor=\"let tick of tickXValues\">\n <svg:line [attr.x1]=\"x(tick)\" stroke=\"red\" [attr.y1]=\"0\" [attr.x2]=\"x(tick)\" [attr.y2]=\"size?.height\"></svg:line>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnInit,\n} from '@angular/core';\nimport { PlotLine } from '../../model/plotline';\nimport { Axis } from '../../core/axis/axis';\nimport { AxisOrientation } from '../../model/enum/axis-orientation';\nimport { ZoomService } from '../../service/zoom.service';\nimport { ScaleService } from '../../service/scale.service';\nimport * as d3 from 'd3';\nimport { IChartEvent } from '../../model/i-chart-event';\nimport { Plotband } from '../../model/plotband';\nimport { ChartService } from '../../service/chart.service';\n\n@Component({\n selector: '[teta-plot-line]',\n templateUrl: './plotline.component.html',\n styleUrls: ['./plotline.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlotlineComponent implements OnInit {\n @Input() plotline: PlotLine;\n @Input() size: DOMRect;\n @Input() axis: Axis;\n orientation = AxisOrientation;\n\n private scale: any;\n private domain: number[];\n\n constructor(\n private cdr: ChangeDetectorRef,\n private zoomService: ZoomService,\n private scaleService: ScaleService,\n private chartService: ChartService,\n private element: ElementRef\n ) {\n this.zoomService.zoomed.subscribe(() => {\n this.scale = this.scaleService[\n this.axis.orientation === AxisOrientation.x ? 'xScales' : 'yScales'\n ].get(this.axis.index);\n this.cdr.detectChanges();\n });\n }\n\n ngOnInit(): void {\n this.scale = this.scaleService[\n this.axis.orientation === AxisOrientation.x ? 'xScales' : 'yScales'\n ].get(this.axis.index);\n\n this.domain = this.scale.domain();\n\n const plotlineElement = d3\n .select(this.element.nativeElement)\n .select('.plotline');\n\n const grabElement = d3\n .select(this.element.nativeElement)\n .selectAll('.grabber');\n\n const drag = d3\n .drag()\n .subject(() => {\n if (this.axis.orientation === AxisOrientation.y) {\n return { y: plotlineElement.attr('y1') };\n }\n if (this.axis.orientation === AxisOrientation.x) {\n return { x: plotlineElement.attr('x1') };\n }\n })\n .on(\n 'start drag end',\n (event: d3.D3DragEvent<any, PlotLine, any>, d: PlotLine) => {\n d.value = this.scale.invert(\n event[AxisOrientation[this.axis.orientation]]\n );\n\n this.emit({\n event,\n target: d,\n });\n\n this.cdr.detectChanges();\n }\n );\n\n plotlineElement.datum<PlotLine>(this.plotline);\n grabElement.datum<PlotLine>(this.plotline);\n\n if (this.plotline.draggable) {\n grabElement.call(drag);\n }\n }\n\n emit(event: IChartEvent<PlotLine>) {\n this.chartService.emitPlotline(event);\n }\n\n get value() {\n return this.scale(this.plotline.value);\n }\n\n get height(): number {\n return this.size.height;\n }\n\n get width(): number {\n return this.size.width;\n }\n}\n","<svg:line class=\"plotline\"\n [attr.stroke]=\"plotline.style?.stroke || 'red'\"\n [attr.stroke-width]=\"plotline.style?.strokeWidth || 4\"\n [attr.stroke-dasharray]=\"plotline.style?.strokeDasharray\"\n [attr.x1]=\"axis.orientation === orientation.x ? value : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? value : width\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : value\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : value\">\n</svg:line>\n\n<svg:line class=\"grabber\"\n\n [class.x-grabber]=\"axis.orientation === orientation.x\"\n [class.y-grabber]=\"axis.orientation === orientation.y\"\n [attr.stroke]=\"'red'\"\n [attr.stroke-width]=\"8\"\n opacity=\"0\"\n [attr.x1]=\"axis.orientation === orientation.x ? value : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? value : width\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : value\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : value\">\n</svg:line>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnInit,\n} from '@angular/core';\n\nimport * as d3 from 'd3';\nimport { Plotband } from '../../model/plotband';\nimport { ScaleService } from '../../service/scale.service';\n\nimport { Axis } from '../../core/axis/axis';\nimport { ZoomService } from '../../service/zoom.service';\nimport { AxisOrientation } from '../../model/enum/axis-orientation';\nimport { IChartEvent } from '../../model/i-chart-event';\nimport { ChartService } from '../../service/chart.service';\n\n@Component({\n selector: '[teta-plot-band]',\n templateUrl: './plotband.component.html',\n styleUrls: ['./plotband.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlotbandComponent implements OnInit {\n @Input() plotband: Plotband;\n @Input() axis: Axis;\n @Input() size: DOMRect;\n orientation = AxisOrientation;\n\n private scale: any;\n domain: number[];\n\n constructor(\n private scaleService: ScaleService,\n private zoomService: ZoomService,\n private chartService: ChartService,\n private cdr: ChangeDetectorRef,\n private element: ElementRef\n ) {\n this.zoomService.zoomed.subscribe(() => {\n this.scale = this.scaleService[\n this.axis.orientation === AxisOrientation.x ? 'xScales' : 'yScales'\n ].get(this.axis.index);\n this.cdr.detectChanges();\n });\n }\n\n emit(event: IChartEvent<Plotband>) {\n this.chartService.emitPlotband(event);\n }\n\n ngOnInit(): void {\n this.scale = this.scaleService[\n this.axis.orientation === AxisOrientation.x ? 'xScales' : 'yScales'\n ].get(this.axis.index);\n\n this.domain = this.scale.domain();\n\n const plotbandElement = d3\n .select(this.element.nativeElement)\n .select('.plotband');\n\n const grabElements = d3\n .select(this.element.nativeElement)\n .selectAll('.grabber');\n\n const drag = d3\n .drag()\n .subject(() => {\n if (this.axis.orientation === AxisOrientation.x) {\n return { x: plotbandElement.attr('x') };\n }\n\n if (this.axis.orientation === AxisOrientation.y) {\n return { y: plotbandElement.attr('y') };\n }\n })\n .on(\n 'start drag end',\n (event: d3.D3DragEvent<any, Plotband, any>, d: Plotband) => {\n requestAnimationFrame(() => {\n let bandSize = parseFloat(\n plotbandElement.attr(\n this.axis.orientation === AxisOrientation.x ? 'width' : 'height'\n )\n );\n\n d.to = this.scale.invert(\n event[AxisOrientation[this.axis.orientation]] +\n (this.axis.orientation === AxisOrientation.x ? bandSize : 0)\n );\n\n d.from = this.scale.invert(\n event[AxisOrientation[this.axis.orientation]] +\n (this.axis.orientation === AxisOrientation.y ? bandSize : 0)\n );\n\n this.emit({\n event,\n target: d,\n });\n\n this.cdr.detectChanges();\n });\n }\n );\n\n let grabberKey;\n\n const resize = d3\n .drag()\n .on(\n 'start drag end',\n (event: d3.D3DragEvent<any, Plotband, any>, d: Plotband) => {\n requestAnimationFrame(() => {\n if (event?.type === 'start') {\n const { grabber } = event?.sourceEvent?.target?.dataset;\n grabberKey = grabber;\n }\n\n const min = Math.min(...this.domain);\n const max = Math.max(...this.domain);\n\n const minValue = d.min ?? min;\n const maxValue = d.max ?? max;\n d[grabberKey] = this.scale.invert(\n event[AxisOrientation[this.axis.orientation]]\n );\n\n if (grabberKey === 'from') {\n const borderMin = d.from <= minValue;\n\n if (d.from >= d.to) {\n d.from = d.to;\n }\n\n if (borderMin) {\n d.from = minValue;\n }\n }\n\n if (grabberKey === 'to') {\n const borderMax = d.to >= maxValue;\n\n if (borderMax) {\n d.to = maxValue;\n }\n\n if (d.to <= d.from) {\n d.to = d.from;\n }\n }\n\n this.emit({\n event,\n target: d,\n });\n\n this.cdr.detectChanges();\n });\n }\n );\n\n plotbandElement.datum<Plotband>(this.plotband);\n grabElements.datum<Plotband>(this.plotband);\n\n if (this.plotband.draggable) {\n plotbandElement.call(drag);\n }\n\n if (this.plotband.resizable) {\n grabElements.call(resize);\n }\n }\n\n get bandSize(): number {\n return Math.abs(\n this.scale(this.plotband.to) - this.scale(this.plotband.from)\n );\n }\n\n get height(): number {\n return this.size.height;\n }\n\n get width(): number {\n return this.size.width;\n }\n\n get from(): number {\n return this.scale(this.plotband.from);\n }\n\n get to(): number {\n return this.scale(this.plotband.to);\n }\n\n getFill(d: Plotband): string {\n if (d.style?.plotband?.patternImage) {\n return `url(#${d.style.plotband?.patternImage})`;\n }\n return d.style.plotband?.fill;\n }\n}\n","<svg:rect class=\"plotband\"\n [attr.fill]=\"getFill(plotband)\"\n [attr.opacity]=\"plotband.style?.plotband?.opacity\"\n [attr.height]=\"axis.orientation === orientation.x ? height : bandSize\"\n [attr.width]=\"axis.orientation === orientation.x ? bandSize : width\"\n [attr.y]=\"axis.orientation === orientation.y ? to : null\"\n [attr.x]=\"axis.orientation === orientation.x ? from : null\">\n</svg:rect>\n\n<svg:line class=\"display-grabber\"\n [attr.stroke]=\"plotband.style?.grabbers?.stroke || 'red'\"\n [attr.stroke-width]=\"plotband.style?.grabbers?.strokeWidth || 4\"\n [attr.stroke-dasharray]=\"plotband.style?.grabbers?.strokeDasharray\"\n [attr.x1]=\"axis.orientation === orientation.x ? from : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? from : width\"\n [attr.data-grabber]=\"'from'\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : from\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : from\">\n</svg:line>\n\n<svg:line class=\"display-grabber\"\n [attr.stroke]=\"plotband.style?.grabbers?.stroke || 'red'\"\n [attr.stroke-width]=\"plotband.style?.grabbers?.strokeWidth || 4\"\n [attr.stroke-dasharray]=\"plotband.style?.grabbers?.strokeDasharray\"\n [attr.x1]=\"axis.orientation === orientation.x ? to : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? to : width\"\n [attr.data-grabber]=\"'to'\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : to\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : to\">\n</svg:line>\n\n<svg:line class=\"grabber\"\n [class.x-grabber]=\"axis.orientation === orientation.x\"\n [class.y-grabber]=\"axis.orientation === orientation.y\"\n [attr.stroke]=\"'red'\"\n [attr.stroke-width]=\"8\"\n opacity=\"0\"\n [attr.x1]=\"axis.orientation === orientation.x ? from : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? from : width\"\n [attr.data-grabber]=\"'from'\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : from\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : from\">\n</svg:line>\n\n<svg:line class=\"grabber\"\n [class.x-grabber]=\"axis.orientation === orientation.x\"\n [class.y-grabber]=\"axis.orientation === orientation.y\"\n [attr.stroke]=\"'red'\"\n [attr.stroke-width]=\"8\"\n opacity=\"0\"\n [attr.x1]=\"axis.orientation === orientation.x ? to : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? to : width\"\n [attr.data-grabber]=\"'to'\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : to\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : to\">\n</svg:line>\n\n\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ChartService } from '../service/chart.service';\nimport { Series } from '../model/series';\nimport { BasePoint } from '../model/base-point';\nimport { ScaleService } from '../service/scale.service';\nimport { ZoomService } from '../service/zoom.service';\nimport { Observable, tap } from 'rxjs';\n\n@Component({\n template: '',\n})\nexport class SeriesBaseComponent<T extends BasePoint> implements OnInit {\n @Input() series: Series<T>;\n @Input() size: DOMRect;\n\n zoom: Observable<any>;\n\n constructor(\n protected svc: ChartService,\n protected cdr: ChangeDetectorRef,\n protected scaleService: ScaleService,\n protected zoomService: ZoomService,\n protected element: ElementRef\n ) {\n this.zoomService.zoomed\n .pipe(\n tap((_) => {\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n ngOnInit(): void {}\n}\n","export enum TooltipTracking {\n x,\n y,\n}\n","export enum DragPointType {\n x,\n y,\n xy,\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnInit,\n} from '@angular/core';\nimport * as d3 from 'd3';\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { ChartService } from '../../../service/chart.service';\nimport { BasePoint } from '../../../model/base-point';\nimport { ScaleService } from '../../../service/scale.service';\nimport { filter, map, Observable, tap } from 'rxjs';\n\nimport { ZoomService } from '../../../service/zoom.service';\nimport { TooltipTracking } from '../../../model/enum/tooltip-tracking';\nimport { DragPointType } from '../../../model/enum/drag-point-type';\n\n@Component({\n selector: 'svg:svg[teta-line-series]',\n templateUrl: './line-series.component.html',\n styleUrls: ['./line-series.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LineSeriesComponent<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit, AfterViewInit\n{\n transform: Observable<Pick<BasePoint, 'x' | 'y'>>;\n display: Observable<number>;\n\n svgElement: SVGGeometryElement;\n x: any;\n y: any;\n\n constructor(\n protected override svc: ChartService,\n protected override cdr: ChangeDetectorRef,\n protected override scaleService: ScaleService,\n protected override zoomService: ZoomService,\n protected override element: ElementRef\n ) {\n super(svc, cdr, scaleService, zoomService, element);\n }\n\n override ngOnInit(): void {\n this.display = this.zoomService.zoomed.pipe(\n map(({ event }) => {\n return event?.type === 'end' ? 1 : 0;\n })\n );\n\n this.transform = this.svc.pointerMove.pipe(\n filter(({ event }) => event),\n map(({ event }) => {\n return this.getTransform(event);\n }),\n tap((_) => this.cdr.detectChanges())\n );\n }\n\n ngAfterViewInit() {\n const drag = (node, event: d3.D3DragEvent<any, any, any>, d: BasePoint) => {\n if (\n d.marker?.dragType === DragPointType.x ||\n d.marker?.dragType === DragPointType.xy\n ) {\n d.x = this.x.invert(event.x);\n }\n\n if (\n d.marker?.dragType === DragPointType.y ||\n d.marker?.dragType === DragPointType.xy\n ) {\n d.y = this.y.invert(event.y);\n }\n\n this.svc.emitPoint({\n target: {\n series: this.series,\n point: d,\n },\n event,\n });\n\n this.cdr.detectChanges();\n };\n\n const dragMarkers = d3\n .drag()\n .subject(function (event, d: BasePoint) {\n const node = d3.select(this);\n return { x: node.attr('cx'), y: node.attr('cy') };\n })\n .on(\n 'start drag end',\n function (event: d3.D3DragEvent<any, any, any>, d: BasePoint) {\n const node = d3.select(this);\n\n drag(node, event, d);\n }\n );\n\n const draggableMarkers = this.series.data?.filter(\n (_) => _?.marker && _?.marker?.draggable\n );\n\n const element = d3\n .select(this.element.nativeElement)\n .selectAll('.draggable-marker')\n .data(draggableMarkers);\n\n element.call(dragMarkers as any);\n\n this.svgElement = d3\n .select(this.element.nativeElement)\n .select('.line')\n .node() as SVGGeometryElement;\n }\n\n getPath() {\n this.x = this.scaleService.xScales.get(this.series.xAxisIndex);\n this.y = this.scaleService.yScales.get(this.series.yAxisIndex);\n\n const line = d3\n .line<BasePoint>()\n .defined((point) => point.x !== null || point.y !== null)\n .x((point) => this.x(point.x))\n .y((point) => this.y(point.y));\n\n const path = line(this.series.data);\n\n return path;\n }\n\n getMarkers() {\n return this.series.data?.filter((_) => _?.marker);\n }\n\n getTransform(event: any): Pick<BasePoint, 'x' | 'y'> {\n const mouse = d3.pointer(event);\n\n const foundX = this.scaleService.xScales.get(this.series.xAxisIndex);\n const foundY = this.scaleService.yScales.get(this.series.yAxisIndex);\n\n const tooltipTracking = this.svc.config?.tooltip?.tracking;\n\n const lineIntersection = (\n p0_x,\n p0_y,\n p1_x,\n p1_y,\n p2_x,\n p2_y,\n p3_x,\n p3_y\n ) => {\n const rV = {} as any;\n let s1_x, s1_y, s2_x, s2_y;\n s1_x = p1_x - p0_x;\n s1_y = p1_y - p0_y;\n s2_x = p3_x - p2_x;\n s2_y = p3_y - p2_y;\n\n let s, t;\n s =\n (-s1_y * (p0_x - p2_x) + s1_x * (p0_y - p2_y)) /\n (-s2_x * s1_y + s1_x * s2_y);\n t =\n (s2_x * (p0_y - p2_y) - s2_y * (p0_x - p2_x)) /\n (-s2_x * s1_y + s1_x * s2_y);\n\n if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n // Collision detected\n rV.x = p0_x + t * s1_x;\n rV.y = p0_y + t * s1_y;\n }\n\n return rV;\n };\n\n if (tooltipTracking === TooltipTracking.x) {\n const bisect = d3.bisector((_: BasePoint) => _.x).right;\n\n const x0 = foundX.invert(mouse[0]);\n const rightId = bisect(this.series.data, x0);\n\n const range = foundY.range();\n\n const intersect = lineIntersection(\n mouse[0],\n range[0],\n mouse[0],\n range[1],\n foundX(this.series.data[rightId - 1]?.x),\n foundY(this.series.data[rightId - 1]?.y),\n foundX(this.series.data[rightId]?.x),\n foundY(this.series.data[rightId]?.y)\n );\n\n console.log(intersect);\n\n this.svc.setTooltip({\n point: { x: foundX.invert(intersect.x), y: foundY.invert(intersect.y) },\n series: this.series,\n });\n\n return {\n x: intersect.x,\n y: intersect.y,\n };\n }\n\n if (tooltipTracking === TooltipTracking.y) {\n const bisect = d3.bisector((_: BasePoint) => _.y).right;\n\n const y0 = foundY.invert(mouse[1]);\n\n const rightId = bisect(this.series.data, y0);\n const range = foundX.range();\n\n const intersect = lineIntersection(\n range[0],\n mouse[1],\n range[1],\n mouse[1],\n foundX(this.series.data[rightId - 1]?.x),\n foundY(this.series.data[rightId - 1]?.y),\n foundX(this.series.data[rightId]?.x),\n foundY(this.series.data[rightId]?.y)\n );\n\n this.svc.setTooltip({\n point: { x: foundX.invert(intersect.x), y: foundY.invert(intersect.y) },\n series: this.series,\n });\n\n return {\n x: intersect.x,\n y: intersect.y,\n };\n }\n }\n}\n","<svg:path\n class=\"line\"\n [attr.d]=\"getPath()\"\n [attr.stroke]=\"series.color\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n fill=\"none\">\n</svg:path>\n\n<ng-container *ngIf=\"transform | async as t\">\n <svg:circle\n r=\"3\"\n [attr.fill]=\"series.color\"\n [attr.transform]=\"'translate('+ t.x +', '+ t.y +')'\"\n [attr.opacity]=\"display | async\">\n </svg:circle>\n</ng-container>\n\n<ng-container *ngIf=\"getMarkers() as markers\">\n\n <svg:circle\n class=\"marker\"\n *ngFor=\"let point of markers\"\n [class.draggable-marker]=\"point?.marker?.draggable\"\n [attr.r]=\"point.marker.style?.radius ?? 5\"\n [attr.fill]=\"point.marker.style?.fill ?? 'transparent'\"\n [attr.stroke]=\"point.marker.style?.stroke ?? 'none'\"\n [attr.stroke-width]=\"point.marker.style?.strokeWidth\"\n [attr.stroke-dasharray]=\"point.marker.style?.strokeDasharray\"\n [attr.cx]=\"x(point.x)\"\n [attr.cy]=\"y(point.y)\"\n >\n </svg:circle>\n\n\n</ng-container>\n\n\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnChanges,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport * as d3 from 'd3';\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { BasePoint } from '../../../model/base-point';\nimport { ChartService } from '../../../service/chart.service';\nimport { ScaleService } from '../../../service/scale.service';\nimport { ZoomService } from '../../../service/zoom.service';\n\n@Component({\n selector: 'svg:svg[teta-bar-series]',\n templateUrl: './bar-series.component.html',\n styleUrls: ['./bar-series.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BarSeriesComponent<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit, OnChanges\n{\n private scaleBand: d3.ScaleBand<any>;\n private y: any;\n\n constructor(\n protected override svc: ChartService,\n protected override cdr: ChangeDetectorRef,\n protected override scaleService: ScaleService,\n protected override zoomService: ZoomService,\n protected override element: ElementRef\n ) {\n super(svc, cdr, scaleService, zoomService, element);\n }\n\n override ngOnInit(): void {\n const x = this.scaleService.xScales.get(this.series.xAxisIndex);\n const y = this.scaleService.yScales.get(this.series.yAxisIndex);\n\n const domain = this.series.data?.map((_: BasePoint) => _.x);\n const range = [x(domain[0]), x(domain[domain?.length - 1])];\n\n this.scaleBand = d3.scaleBand<number>().domain(domain).range(range);\n\n this.y = y;\n }\n\n width() {\n return this.scaleBand.bandwidth();\n }\n\n height(point: BasePoint) {\n return Math.abs(this.y(0) - this.y(point.y));\n }\n\n getX(point: BasePoint) {\n return this.scaleBand(point.x);\n }\n\n getY(point: BasePoint) {\n return this.y(point.y);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n console.log(changes);\n }\n}\n","<svg:rect *ngFor=\"let point of series.data\" [attr.y]=\"getY(point)\" [attr.x]=\"getX(point)\" [attr.width]=\"width()\"\n [attr.height]=\"height(point)\"\n [attr.fill]=\"point.color\"></svg:rect>\n","export enum SeriesType {\n line,\n bar,\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n Input,\n OnInit,\n SimpleChanges,\n ViewContainerRef,\n} from '@angular/core';\nimport { SeriesBaseComponent } from '../../base/series-base.component';\nimport { LineSeriesComponent } from '../series/line/line-series.component';\nimport { BarSeriesComponent } from '../series/bar/bar-series.component';\n\nimport { Series } from '../../model/series';\nimport { BasePoint } from '../../model/base-point';\nimport { ChartService } from '../../service/chart.service';\nimport { tap } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\nimport { SeriesType } from '../../model/enum/series-type';\n\n@Component({\n selector: '[teta-series-host]',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeriesHostComponent<T extends BasePoint> implements OnInit {\n @Input() series: Series<T>;\n @Input() size: DOMRect;\n\n private defaultSeriesTypeMapping = new Map<\n SeriesType,\n typeof SeriesBaseComponent\n >()\n .set(SeriesType.line, LineSeriesComponent)\n .set(SeriesType.bar, BarSeriesComponent);\n\n private _init = false;\n private _componentRef: ComponentRef<any>;\n\n constructor(\n private viewContainerRef: ViewContainerRef,\n private chartService: ChartService\n ) {\n this.chartService.size\n .pipe(\n throttleTime(100, null, { trailing: true }),\n tap(() => {\n this._componentRef?.injector.get(ChangeDetectorRef).detectChanges();\n })\n )\n .subscribe();\n }\n\n ngOnInit(): void {\n if (!SeriesBaseComponent.isPrototypeOf(this.series.component)) {\n this.series.component =\n this.defaultSeriesTypeMapping.get(this.series.type) ||\n LineSeriesComponent;\n }\n\n this._componentRef = this.viewContainerRef.createComponent(\n this.series.component\n );\n this._componentRef.instance.series = this.series;\n this._componentRef.instance.size = this.size;\n this._init = true;\n }\n\n ngOnDestroy(): void {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this._init && changes.hasOwnProperty('series')) {\n this._componentRef.instance.series = this.series;\n this._componentRef.instance.size = this.size;\n this._componentRef.injector.get(ChangeDetectorRef).markForCheck();\n this._componentRef.injector.get(ChangeDetectorRef).detectChanges();\n }\n }\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n Input,\n OnInit,\n} from '@angular/core';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { BrushService } from '../service/brush.service';\nimport { ChartService } from '../service/chart.service';\n\n@Directive({\n selector: 'svg:svg[tetaBrushable]',\n})\nexport class BrushableDirective implements OnInit, AfterViewInit {\n @Input() config?: IChartConfig;\n @Input() size?: DOMRect;\n\n constructor(\n private brushService: BrushService,\n private chartService: ChartService,\n private element: ElementRef\n ) {}\n\n ngOnInit() {}\n\n ngAfterViewInit() {\n this.brushService.applyBrush(this.element, this.config, this.size);\n }\n}\n","import { Directive, ElementRef, HostBinding, Input } from '@angular/core';\nimport { ZoomService } from '../service/zoom.service';\nimport { ChartService } from '../service/chart.service';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { Axis } from '../core/axis/axis';\n\n@Directive({\n selector: '[tetaZoomable]',\n})\nexport class ZoomableDirective {\n @Input() config?: IChartConfig;\n @Input() axis?: Axis;\n @Input() size?: DOMRect;\n\n @HostBinding('class.zoomable') private zoomable = false;\n\n constructor(\n private element: ElementRef,\n private svc: ZoomService,\n private chartService: ChartService\n ) {}\n\n ngOnInit() {\n if (this.config?.zoom?.enable || this.axis?.options?.zoom) {\n this.zoomable = true;\n\n this.svc.applyZoom(this.element, this.chartService.config, this.size);\n }\n }\n ngAfterViewInit() {}\n}\n","import {\n AfterContentChecked,\n AfterViewChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { ChartService } from '../service/chart.service';\nimport { Observable, tap } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\nimport { AxesService } from '../service/axes.service';\nimport { Axis } from '../core/axis/axis';\nimport { AxisOrientation } from '../model/enum/axis-orientation';\n\ntype Opposite = boolean;\n\n@Component({\n selector: 'teta-chart-container',\n templateUrl: './chart-container.component.html',\n styleUrls: ['./chart-container.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartContainerComponent\n implements OnInit, OnChanges, AfterViewChecked, AfterContentChecked\n{\n @Input() config: IChartConfig;\n\n yAxes: Map<number, Axis>;\n xAxes: Map<number, Axis>;\n size: Observable<DOMRect>;\n\n private _observer: ResizeObserver;\n private uniqId: string;\n\n private filterPositionMap = new Map<\n Opposite,\n (axis: Axis) => (_: Axis) => boolean\n >()\n .set(\n true,\n (axis) => (_: Axis) =>\n _.options.opposite && _.options.visible && axis.index <= _.index\n )\n .set(\n false,\n (axis) => (_: Axis) =>\n _.options.opposite !== true &&\n _.options.visible &&\n _.index <= axis.index\n );\n\n constructor(\n private _svc: ChartService,\n private _cdr: ChangeDetectorRef,\n private _elementRef: ElementRef,\n private _axesService: AxesService\n ) {\n this.size = this._svc.size.pipe(\n throttleTime(100, undefined, { trailing: true }),\n tap(() => {\n setTimeout(() => {\n this._cdr.detectChanges();\n });\n })\n );\n\n this.yAxes = this._axesService.yAxis;\n this.xAxes = this._axesService.xAxis;\n\n this.uniqId = (Date.now() + Math.random()).toString(36);\n }\n\n ngOnInit(): void {\n this._observer = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n this._svc.setSize(entries[0].contentRect);\n });\n this._observer.observe(this._elementRef.nativeElement);\n\n this._svc.init(this.config);\n }\n\n private sumSize = (acc, curr) => acc + curr.selfSize;\n\n private oppositeFilter(axis?: Axis) {\n return (_) =>\n _.options.opposite && _.options.visible && axis.index <= _.index;\n }\n\n private nonOppositeFilter(axis?: Axis) {\n return (_) =>\n _.options.opposite !== true && _.options.visible && _.index <= axis.index;\n }\n\n getVisibleRect(size: DOMRect) {\n const yAxesArray = [...this.yAxes.values()];\n const xAxesArray = [...this.xAxes.values()];\n\n const left = yAxesArray\n .filter((_) => _.options.opposite !== true && _.options.visible)\n .reduce(this.sumSize, 0);\n\n const right = yAxesArray\n .filter((_) => _.options.opposite && _.options.visible)\n .reduce(this.sumSize, 0);\n\n const bottom = xAxesArray\n .filter((_) => _.options.opposite !== true && _.options.visible)\n .reduce(this.sumSize, 0);\n\n const top = xAxesArray\n .filter((_) => _.options.opposite && _.options.visible)\n .reduce(this.sumSize, 0);\n\n const rect = {\n left,\n top,\n width: size.width - left - right + 1,\n height: size.height - top - bottom + 1,\n };\n\n return rect;\n }\n\n getYAxisTranslate(axis: Axis, size: DOMRect): string {\n const yAxesArray = [...this.yAxes.values()];\n\n const translateOpposite = yAxesArray\n .filter(this.nonOppositeFilter(axis))\n .reduce(this.sumSize, 0);\n\n const translateNonOpposite = yAxesArray\n .filter(this.oppositeFilter(axis))\n .reduce(this.sumSize, 0);\n\n return `translate(${\n axis.options.opposite\n ? size.width - translateNonOpposite\n : translateOpposite\n }, 0)`;\n }\n\n getXAxisTranslate(axis: Axis, size: DOMRect): string {\n const xAxesArray = [...this.xAxes.values()];\n\n const translateNonOpposite = xAxesArray\n .filter(this.nonOppositeFilter(axis))\n .reduce(this.sumSize, 0);\n\n const translateOpposite = xAxesArray\n .filter(this.oppositeFilter(axis))\n .reduce(this.sumSize, 0);\n\n return `translate(0, ${\n axis.options.opposite\n ? translateOpposite\n : size.height - translateNonOpposite\n })`;\n }\n\n getTranslate(axis?: Axis, size?: DOMRect): string {\n const xAxesArray = [...this.xAxes.values()];\n const yAxesArray = [...this.yAxes.values()];\n\n const oppositeFilter = this.filterPositionMap.get(true);\n const nonOppositeFilter = this.filterPositionMap.get(false);\n\n const oppositeOffsetY = yAxesArray.filter(oppositeFilter(axis));\n const nonOppositeOffsetY = yAxesArray.filter(nonOppositeFilter(axis));\n\n const oppositeOffsetX = xAxesArray.filter(oppositeFilter(axis));\n const nonOppositeOffsetX = xAxesArray.filter(nonOppositeFilter(axis));\n\n const oppositeTranslateY = oppositeOffsetY.reduce(\n (acc, curr) => acc + curr.selfSize,\n 0\n );\n const nonOppisteTranslateY = nonOppositeOffsetY.reduce(\n (acc, curr) => acc + curr.selfSize,\n 0\n );\n\n const oppositeTranslateX = oppositeOffsetX.reduce(\n (acc, curr) => acc + curr.selfSize,\n 0\n );\n\n const nonOppisteTranslateX = nonOppositeOffsetX.reduce(\n (acc, curr) => acc + curr.selfSize,\n 0\n );\n\n const left = yAxesArray\n .filter((_) => _.options.visible && _.options.opposite !== true)\n .reduce((acc, curr) => acc + curr.selfSize, 0);\n\n const top = xAxesArray\n .filter((_) => _.options.visible && _.options.opposite === true)\n .reduce((acc, curr) => acc + curr.selfSize, 0);\n\n if (axis.orientation === AxisOrientation.x) {\n return `translate(${left}, ${\n axis.options.opposite\n ? oppositeTranslateX\n : size.height - nonOppisteTranslateX\n })`;\n }\n\n if (axis.orientation === AxisOrientation.y) {\n return `translate(${\n axis.options.opposite\n ? size.width - oppositeTranslateY\n : nonOppisteTranslateY\n }, ${top})`;\n }\n\n return 'translate(0, 0)';\n }\n\n mouseMove(event) {\n this._svc.setPointerMove(event);\n }\n\n mouseLeave(event) {\n this._svc.setPointerMove(event);\n }\n\n id(): string {\n return this.uniqId;\n }\n\n ngAfterContentChecked(): void {}\n\n ngAfterViewChecked(): void {}\n\n ngOnChanges(changes: SimpleChanges): void {}\n}\n","<ng-container *ngIf=\"size | async as s\">\n <teta-tooltip [size]=\"s\"></teta-tooltip>\n <svg\n [tetaZoomable]\n [tetaBrushable]\n [size]=\"s\"\n [config]=\"config\"\n [attr.width]=\"s.width\"\n [attr.height]=\"s.height\"\n [attr.viewBox]=\"'0 0 '+s.width+' '+s.height\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousemove)=\"mouseMove($event)\">\n <ng-container *ngIf=\"getVisibleRect(s) as rect\">\n <defs>\n <clipPath [attr.id]=\"'visible-window-' + id()\">\n <rect [attr.x]=\"rect.left\" [attr.y]=\"rect.top\" [attr.width]=\"rect.width\" [attr.height]=\"rect.height\"></rect>\n </clipPath>\n </defs>\n\n <g class=\"y-axis-container\">\n <g *ngFor=\"let item of yAxes | keyvalue\"\n teta-y-axis\n [axis]=\"item.value\"\n [size]=\"s\"\n [attr.transform]=\"getTranslate(item.value, s)\"></g>\n </g>\n <g class=\"x-axis-container\">\n <g *ngFor=\"let item of xAxes | keyvalue\"\n teta-x-axis\n\n [axis]=\"item.value\"\n [size]=\"s\"\n [attr.transform]=\"getTranslate(item.value, s)\"></g>\n </g>\n <g [attr.clip-path]=\"'url(#visible-window-'+ id() +')'\">\n <g [attr.transform]=\"'translate('+ rect.left +', '+ rect.top +')'\">\n <g class=\"gridlines\" teta-gridlines [size]=\"s\"></g>\n\n <g class=\"x-axis-plotline-container\">\n <ng-container *ngFor=\"let axis of config.xAxis; let i = index\">\n <g teta-plot-line *ngFor=\"let plotline of axis.plotlines\" [plotline]=\"plotline\" [size]=\"s\"\n [axis]=\"xAxes.get(i)\"></g>\n </ng-container>\n </g>\n\n <g class=\"y-axis-plotline-container\">\n <ng-container *ngFor=\"let axis of config.yAxis; let i = index\">\n <g teta-plot-line *ngFor=\"let plotline of axis.plotlines\" [plotline]=\"plotline\" [size]=\"s\"\n [axis]=\"yAxes.get(i)\"></g>\n </ng-container>\n </g>\n\n <g class=\"x-axis-plotband-container\">\n <ng-container *ngFor=\"let axis of config.xAxis; let i = index\">\n <g teta-plot-band *ngFor=\"let plotband of axis.plotbands\" [plotband]=\"plotband\" [size]=\"s\"\n [axis]=\"xAxes.get(i)\"></g>\n </ng-container>\n </g>\n <g class=\"y-axis-plotband-container\">\n <ng-container *ngFor=\"let axis of config.yAxis; let i = index\">\n <g teta-plot-band *ngFor=\"let plotband of axis.plotbands\" [plotband]=\"plotband\" [size]=\"s\"\n [axis]=\"yAxes.get(i)\"></g>\n </ng-container>\n </g>\n <g class=\"series-tooltip-line-marker\"></g>\n <g class=\"series-container\">\n <g teta-series-host\n *ngFor=\"let series of config.series\"\n [series]=\"series\"\n [size]=\"s\"></g>\n </g>\n </g>\n </g>\n </ng-container>\n </svg>\n\n\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnInit,\n} from '@angular/core';\nimport { Series } from '../model/series';\nimport { BasePoint } from '../model/base-point';\nimport { SeriesType } from '../model/enum/series-type';\n\n@Component({\n selector: 'teta-legend',\n templateUrl: './legend.component.html',\n styleUrls: ['./legend.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LegendComponent implements OnInit {\n private sizeMapping = new Map<SeriesType, number>()\n .set(SeriesType.line, 2)\n .set(SeriesType.bar, 12);\n\n @Input() series: Array<Series<BasePoint>>;\n @HostBinding('class.padding-bottom-4') classLegend = true;\n\n constructor() {}\n\n ngOnInit(): void {\n this.series = this.series?.filter((_) => _.showInLegend !== false);\n }\n\n getHeight(serie: Series<BasePoint>) {\n return this.sizeMapping.get(serie.type);\n }\n}\n","<div *ngFor=\"let serie of series\">\n <div class=\"legend-item\">\n <div class=\"legend-icon-form\" [style.height.px]=\"getHeight(serie)\" [style.background-color]=\"serie.color\"></div>\n <div class=\"legend-label\">{{ serie.name }}</div>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ChartService } from '../service/chart.service';\nimport { IChartConfig } from '../model/i-chart-config';\n\nimport { BasePoint } from '../model/base-point';\nimport { Series } from '../model/series';\nimport { ZoomService } from '../service/zoom.service';\nimport { ScaleService } from '../service/scale.service';\nimport { BrushService } from '../service/brush.service';\nimport { AxesService } from '../service/axes.service';\nimport { ChartBounds } from '../model/chart-bounds';\n\nimport { IChartEvent } from '../model/i-chart-event';\nimport { PlotLine } from '../model/plotline';\nimport { Plotband } from '../model/plotband';\nimport { IPointMove } from '../model/i-point-move';\n\n@Component({\n selector: 'teta-chart',\n templateUrl: './chart.component.html',\n styleUrls: ['./chart.component.scss'],\n providers: [\n ChartService,\n ZoomService,\n ScaleService,\n AxesService,\n BrushService,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartComponent implements OnInit, OnChanges, OnDestroy {\n legendSeries: Array<Series<BasePoint>>;\n\n @Output()\n plotBandsMove: EventEmitter<IChartEvent<Plotband>> = new EventEmitter<\n IChartEvent<Plotband>\n >();\n\n @Output()\n plotLinesMove: EventEmitter<IChartEvent<PlotLine>> = new EventEmitter<\n IChartEvent<PlotLine>\n >();\n\n @Output()\n pointMove: EventEmitter<IChartEvent<IPointMove>> = new EventEmitter<\n IChartEvent<IPointMove>\n >();\n\n @Input() set config(config: IChartConfig) {\n this._config = Object.assign(\n {\n bounds: new ChartBounds(),\n },\n config\n );\n }\n\n get config() {\n return this._config;\n }\n\n private _config;\n\n constructor(private svc: ChartService, private zoomService: ZoomService) {}\n\n ngOnChanges(changes: SimpleChanges) {}\n\n ngOnInit(): void {\n this.svc.plotbandMove.subscribe((_) => {\n this.plotBandsMove.emit(_);\n });\n\n this.svc.plotlineMove.subscribe((_) => {\n this.plotLinesMove.emit(_);\n });\n\n this.svc.pointMove.subscribe((_) => {\n this.pointMove.emit(_);\n });\n }\n\n ngAfterViewInit() {}\n\n ngOnDestroy() {\n this.zoomService.broadcastSubscribtion?.unsubscribe();\n }\n}\n","<div class=\"column column_auto\">\n <teta-chart-container class=\"chart-container\" [config]=\"config\"></teta-chart-container>\n</div>\n\n<teta-legend *ngIf=\"config.legend?.enable === true\" [series]=\"config.series\"></teta-legend>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ChartComponent } from './chart/chart.component';\nimport { SeriesHostComponent } from './chart-container/series-host/series-host.component';\nimport { ChartContainerComponent } from './chart-container/chart-container.component';\nimport { LegendComponent } from './legend/legend.component';\nimport { SeriesBaseComponent } from './base/series-base.component';\nimport { LineSeriesComponent } from './chart-container/series/line/line-series.component';\nimport { GridlinesComponent } from './chart-container/gridlines/gridlines.component';\nimport { XAxisComponent } from './chart-container/x-axis/x-axis.component';\nimport { YAxisComponent } from './chart-container/y-axis/y-axis.component';\nimport { PlotlineComponent } from './chart-container/plotline/plotline.component';\nimport { PlotbandComponent } from './chart-container/plotband/plotband.component';\nimport { BarSeriesComponent } from './chart-container/series/bar/bar-series.component';\nimport { TooltipComponent } from './chart-container/tooltip/tooltip.component';\nimport { ZoomableDirective } from './directives/zoomable.directive';\nimport { BrushableDirective } from './directives/brushable.directive';\n\n@NgModule({\n declarations: [\n ChartComponent,\n SeriesHostComponent,\n ChartContainerComponent,\n LegendComponent,\n SeriesBaseComponent,\n LineSeriesComponent,\n GridlinesComponent,\n XAxisComponent,\n YAxisComponent,\n PlotlineComponent,\n PlotbandComponent,\n BarSeriesComponent,\n TooltipComponent,\n ZoomableDirective,\n BrushableDirective,\n ],\n exports: [ChartComponent],\n imports: [CommonModule],\n})\nexport class ChartModule {}\n","/*\n * Public API Surface of chart\n */\n\nexport * from './chart/chart.module';\nexport * from './chart/service/chart.service';\nexport * from './chart/chart/chart.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tetacom-svg-charts.mjs","sources":["../../src/chart/model/enum/axis-orientation.ts","../../src/chart/core/utils/get-text-width.ts","../../src/chart/core/utils/generate-ticks.ts","../../src/chart/core/axis/builders/axis-size-builder.ts","../../src/chart/core/axis/builders/extremes-builder.ts","../../src/chart/model/enum/axis-type.ts","../../src/chart/core/axis/axis.ts","../../src/chart/service/axes.service.ts","../../src/chart/service/scale.service.ts","../../src/chart/service/chart.service.ts","../../src/chart/model/enum/zoom-type.ts","../../src/chart/model/enum/brush-type.ts","../../src/chart/service/broadcast.service.ts","../../src/chart/service/zoom.service.ts","../../src/chart/service/brush.service.ts","../../src/chart/model/chart-bounds.ts","../../src/chart/chart-container/tooltip/tooltip.component.ts","../../src/chart/chart-container/tooltip/tooltip.component.html","../../src/chart/chart-container/y-axis/y-axis.component.ts","../../src/chart/chart-container/y-axis/y-axis.component.html","../../src/chart/chart-container/x-axis/x-axis.component.ts","../../src/chart/chart-container/x-axis/x-axis.component.html","../../src/chart/chart-container/gridlines/gridlines.component.ts","../../src/chart/chart-container/gridlines/gridlines.component.html","../../src/chart/chart-container/plotline/plotline.component.ts","../../src/chart/chart-container/plotline/plotline.component.html","../../src/chart/chart-container/plotband/plotband.component.ts","../../src/chart/chart-container/plotband/plotband.component.html","../../src/chart/base/series-base.component.ts","../../src/chart/model/enum/tooltip-tracking.ts","../../src/chart/model/enum/drag-point-type.ts","../../src/chart/chart-container/series/line/line-series.component.ts","../../src/chart/chart-container/series/line/line-series.component.html","../../src/chart/chart-container/series/bar/bar-series.component.ts","../../src/chart/chart-container/series/bar/bar-series.component.html","../../src/chart/model/enum/series-type.ts","../../src/chart/chart-container/series-host/series-host.component.ts","../../src/chart/directives/brushable.directive.ts","../../src/chart/directives/zoomable.directive.ts","../../src/chart/chart-container/chart-container.component.ts","../../src/chart/chart-container/chart-container.component.html","../../src/chart/legend/legend.component.ts","../../src/chart/legend/legend.component.html","../../src/chart/chart/chart.component.ts","../../src/chart/chart/chart.component.html","../../src/chart/chart.module.ts","../../src/chart/model/plotband.ts","../../src/chart/model/plotline.ts","../../src/public-api.ts","../../src/tetacom-svg-charts.ts"],"sourcesContent":["export enum AxisOrientation {\n x,\n y\n}\n","export const getTextWidth = (\n inputText?: string | number | null,\n backupRatio = 0.5,\n fontSize = 11\n): number => {\n let text = inputText ?? '';\n text = text.toString();\n\n return fontSize * backupRatio * text.length;\n};\n","import * as d3 from 'd3';\n\nexport function generateTicks(extremes: number[]) {\n const [min, max] = extremes;\n\n const tickCount = 10;\n const tickStep = (max - min) / tickCount;\n\n const ticks = d3\n .range(min, max + tickStep, tickStep)\n .filter((step) => step <= max);\n\n return ticks;\n}\n","import { Axis } from '../axis';\nimport { AxisOrientation } from '../../../model/enum/axis-orientation';\nimport { maxIndex } from 'd3-array';\nimport { getTextWidth } from '../../utils/public-api';\nimport { IBuilder } from '../../../model/i-builder';\n\nexport class AxisSizeBuilder implements IBuilder<Axis, number> {\n private titlePadding = 8;\n private basePadding = 16;\n private backupRatio = 0.58;\n\n build(settings: Axis): number {\n let finalPadding = this.basePadding;\n\n if (settings.orientation === AxisOrientation.y) {\n const formatter = settings.defaultFormatter();\n\n finalPadding += settings.options.title ? this.titlePadding : 0;\n\n const maxElementLengthIndex = maxIndex(\n settings.tickValues,\n (_) => formatter(_).length\n );\n\n finalPadding += getTextWidth(\n formatter(settings.tickValues[maxElementLengthIndex]),\n this.backupRatio\n );\n }\n\n if (settings.orientation === AxisOrientation.x) {\n finalPadding += finalPadding + 20;\n }\n\n return finalPadding;\n }\n}\n","import { IBuilder } from '../../../model/i-builder';\nimport { Axis } from '../axis';\nimport { BasePoint } from '../../../model/base-point';\nimport { AxisOrientation } from '../../../model/enum/axis-orientation';\n\nimport * as d3 from 'd3';\n\nexport class ExtremesBuilder implements IBuilder<Axis, [number, number]> {\n private extentAccessorMap = new Map<\n AxisOrientation,\n (point: BasePoint) => number\n >()\n .set(AxisOrientation.x, (_) => _.x)\n .set(AxisOrientation.y, (_) => _.y);\n\n private extremes: [number, number] = [0, 0];\n\n build(settings: Axis): [number, number] {\n const options = settings.options;\n\n const hasMin = options?.min != null;\n const hasMax = options?.max != null;\n\n if (!hasMin || !hasMax) {\n const linkedSeries = settings.linkedSeries();\n const data = linkedSeries.reduce((acc: BasePoint[], current) => {\n return acc.concat(current.data);\n }, []);\n\n const accessor = this.extentAccessorMap.get(settings.orientation);\n // add negative axis!\n\n this.extremes = d3.extent(data, accessor);\n }\n\n if (hasMin) {\n this.extremes[0] = options?.min;\n }\n\n if (hasMax) {\n this.extremes[1] = options?.max;\n }\n return this.extremes;\n }\n}\n","export enum AxisType {\n number,\n time,\n category,\n log,\n pow,\n}\n","import { IChartConfig } from '../../model/i-chart-config';\nimport { AxisOrientation } from '../../model/enum/axis-orientation';\nimport { Series } from '../../model/series';\nimport { BasePoint } from '../../model/base-point';\nimport * as d3 from 'd3';\nimport { AxisOptions } from '../../model/axis-options';\nimport { AxisSizeBuilder, ExtremesBuilder } from './builders/public-api';\nimport { AxisType } from '../../model/enum/axis-type';\n\nimport { generateTicks } from '../utils/public-api';\n\nexport class Axis {\n private chartConfig: IChartConfig;\n private _orientation: AxisOrientation;\n private _index: number | string;\n private _extremes: [number, number] = [0, 0];\n private _selfSize: number;\n private _ticksValues: number[];\n\n private defaultFormatters = new Map<AxisType, any>()\n .set(AxisType.number, d3.format(',.2f'))\n .set(AxisType.time, d3.timeFormat('%B %d, %Y'))\n .set(AxisType.log, d3.format(',.2f'));\n\n constructor(config: IChartConfig) {\n this.chartConfig = config;\n }\n\n /**\n * Factory for creating x,y axes\n * @param {AxisOrientation} orientation\n * Axis type\n * @param {IChartConfig} config\n * Chart config\n * @param {number} index\n * Index axis\n * @return {Axis}\n * New generated axis\n */\n public static createAxis(\n orientation: AxisOrientation,\n config: IChartConfig,\n index: number\n ): Axis {\n const axis = new Axis(config);\n axis.setLocate(orientation);\n axis.setIndex(index);\n axis.setExtremes();\n axis.setTicksValues();\n axis.setSelfSize();\n\n return axis;\n }\n\n /**\n *\n * @param {orientation} orientation\n * Set locate axis x or y\n */\n private setLocate(orientation: AxisOrientation): void {\n this._orientation = orientation;\n }\n\n /**\n *\n * @param {number | string} index\n * Index axis\n */\n private setIndex(index: number | string): void {\n this._index = index;\n }\n\n /**\n * @return {Array<Series<BasePoint>>}\n * Linked series\n */\n public linkedSeries(): Array<Series<BasePoint>> {\n const linkedFilter = (serie: Series<BasePoint>) =>\n serie[\n this._orientation === AxisOrientation.y ? 'yAxisIndex' : 'xAxisIndex'\n ] === this._index;\n\n return this.chartConfig?.series.filter(linkedFilter);\n }\n\n private setExtremes(): void {\n const builder = new ExtremesBuilder();\n this._extremes = builder.build(this);\n\n this._extremes = d3.nice(this._extremes[0], this._extremes[1], 10);\n }\n\n private setSelfSize(): void {\n const builder = new AxisSizeBuilder();\n this._selfSize = builder.build(this);\n }\n\n private setTicksValues(): void {\n const ticks = generateTicks(this._extremes);\n this._ticksValues = ticks;\n }\n\n get extremes(): Array<number> {\n return this._extremes;\n }\n\n get orientation(): AxisOrientation {\n return this._orientation;\n }\n\n get selfSize(): number {\n return this._selfSize;\n }\n\n get tickValues(): number[] {\n return this._ticksValues;\n }\n\n get index() {\n return this._index;\n }\n\n get options(): AxisOptions {\n return this.orientation === AxisOrientation.x\n ? this.chartConfig.xAxis[this.index]\n : this.chartConfig.yAxis[this.index];\n }\n\n public defaultFormatter() {\n return this.defaultFormatters.get(this.options.type);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { AxisOrientation } from '../model/enum/axis-orientation';\nimport { Axis } from '../core/axis/axis';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AxesService {\n public yAxis: Map<number, Axis> = new Map<number, Axis>();\n public xAxis: Map<number, Axis> = new Map<number, Axis>();\n\n constructor() {}\n\n init(config: IChartConfig) {\n config?.yAxis.forEach((_, index) => {\n const axis = Axis.createAxis(AxisOrientation.y, config, index);\n\n this.yAxis.set(index, axis);\n });\n config?.xAxis.forEach((_, index) => {\n const axis = Axis.createAxis(AxisOrientation.x, config, index);\n\n this.xAxis.set(index, axis);\n });\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { AxesService } from './axes.service';\nimport * as d3 from 'd3';\nimport { AxisType } from '../model/enum/axis-type';\nimport { Axis } from '../core/axis/axis';\nimport { AxisOrientation } from '../model/enum/axis-orientation';\n\nimport { IChartConfig } from '../model/i-chart-config';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ScaleService {\n public yScales: Map<number | string, any> = new Map<number | string, any>();\n public xScales: Map<number | string, any> = new Map<number | string, any>();\n\n private scaleMapping = new Map<AxisType, any>()\n .set(AxisType.number, d3.scaleLinear)\n .set(AxisType.time, d3.scaleTime)\n .set(AxisType.category, d3.scaleOrdinal)\n .set(AxisType.log, d3.scaleLog);\n\n constructor(private axesService: AxesService) {}\n\n public createScales(size: DOMRect, config?: IChartConfig) {\n this.yScales.clear();\n this.xScales.clear();\n\n const topBound = [...this.axesService.xAxis.values()]\n .filter((_) => _.options?.visible && _.options?.opposite)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const bottomBound = [...this.axesService.xAxis.values()]\n .filter((_) => _.options?.visible && _.options?.opposite !== true)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const leftBound = [...this.axesService.yAxis.values()]\n .filter((_) => _.options?.visible && _.options.opposite !== true)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const rightBound = [...this.axesService.yAxis.values()]\n .filter((_) => _.options?.visible && _.options.opposite)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n this.axesService.yAxis.forEach((axis: Axis) => {\n const scale = this.getScale(axis).range([\n 0,\n size.height - topBound - bottomBound,\n ]);\n\n this.yScales.set(axis.index, scale);\n });\n\n this.axesService.xAxis.forEach((axis: Axis) => {\n const scale = this.getScale(axis).range([\n 0,\n size.width - leftBound - rightBound,\n ]);\n\n this.xScales.set(axis.index, scale);\n });\n }\n\n private getScale(axis: Axis) {\n return this.scaleMapping\n .get(axis.options?.type)()\n .domain(\n axis.orientation === AxisOrientation.y\n ? [...axis.extremes].reverse()\n : axis.extremes\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { AxesService } from './axes.service';\nimport { map, Observable, Subject } from 'rxjs';\nimport { ScaleService } from './scale.service';\nimport { IChartEvent } from '../model/i-chart-event';\nimport { IDisplayTooltip } from '../model/i-display-tooltip';\nimport { Plotband } from '../model/plotband';\nimport { PlotLine } from '../model/plotline';\nimport { IPointMove } from '../model/i-point-move';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ChartService {\n public size: Observable<DOMRect>;\n public pointerMove: Observable<any>;\n public tooltips: Observable<IDisplayTooltip>;\n public plotbandMove: Observable<IChartEvent<Plotband>>;\n public plotlineMove: Observable<IChartEvent<PlotLine>>;\n public pointMove: Observable<IChartEvent<IPointMove>>;\n\n private size$ = new Subject<DOMRect>();\n private pointerMove$ = new Subject<any>();\n private tooltips$ = new Subject<IDisplayTooltip>();\n private plotbandMove$ = new Subject<IChartEvent<Plotband>>();\n private plotlineMove$ = new Subject<IChartEvent<PlotLine>>();\n private pointMove$ = new Subject<IChartEvent<IPointMove>>();\n\n private _config: IChartConfig;\n\n constructor(\n private axesService: AxesService,\n private scaleService: ScaleService\n ) {\n this.size = this.size$.asObservable();\n this.pointerMove = this.pointerMove$.asObservable();\n this.tooltips = this.tooltips$.asObservable();\n this.plotbandMove = this.plotbandMove$.asObservable();\n this.plotlineMove = this.plotlineMove$.asObservable();\n this.pointMove = this.pointMove$.asObservable();\n\n this.size\n .pipe(\n map((size) => {\n this.scaleService.createScales(size, this._config);\n })\n )\n .subscribe();\n }\n\n public init(config: IChartConfig) {\n this._config = config;\n\n if (config.inverted) {\n this._config.series = this._config?.series?.map((serie) => {\n return {\n ...serie,\n data: serie?.data?.map((point) => {\n return {\n ...point,\n x: point?.y,\n y: point?.x,\n };\n }),\n };\n });\n }\n\n this.axesService.init(this._config);\n }\n\n public setSize(size: DOMRect) {\n this.size$.next(size);\n }\n\n public setPointerMove(event: any) {\n this.pointerMove$.next({ event });\n }\n\n public setTooltip(tooltip: IDisplayTooltip) {\n this.tooltips$.next(tooltip);\n }\n\n public emitPlotband(event: IChartEvent<Plotband>) {\n this.plotbandMove$.next(event);\n }\n\n public emitPlotline(event: IChartEvent<PlotLine>) {\n this.plotlineMove$.next(event);\n }\n\n public emitPoint(event: IChartEvent<IPointMove>) {\n this.pointMove$.next(event);\n }\n\n get config(): IChartConfig {\n return this._config;\n }\n}\n","export enum ZoomType {\n x,\n y,\n xy,\n}\n","export enum BrushType {\n x,\n y,\n xy,\n}\n","import { Injectable } from '@angular/core';\nimport { IBroadcastMessage } from '../model/i-broadcast-message';\nimport { filter, Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BroadcastService {\n private emitter: Subject<IBroadcastMessage>;\n\n constructor() {\n this.emitter = new Subject<IBroadcastMessage>();\n }\n\n broadcast(value: IBroadcastMessage) {\n this.emitter.next(value);\n }\n\n subscribeToChannel(channel: string): Observable<IBroadcastMessage> {\n return this.emitter\n .asObservable()\n .pipe(filter((msg) => channel && msg.channel === channel));\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport * as d3 from 'd3';\nimport { D3ZoomEvent, zoomIdentity } from 'd3';\nimport { ScaleService } from './scale.service';\nimport { map, merge, Observable, of, Subject, Subscription } from 'rxjs';\nimport { IChartEvent } from '../model/i-chart-event';\nimport { ZoomType } from '../model/enum/zoom-type';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { BroadcastService } from './broadcast.service';\nimport { ChartService } from './chart.service';\nimport { BrushType } from '../model/enum/brush-type';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ZoomService {\n zoomed: Observable<any>;\n private zoomed$ = new Subject<any>();\n\n broadcastSubscribtion: Subscription;\n\n private x = new Map<number | string, any>();\n private y = new Map<number | string, any>();\n\n private zoom;\n private svg;\n private initialZoom = zoomIdentity;\n\n constructor(\n private scaleService: ScaleService,\n private broadcastService: BroadcastService,\n private chartService: ChartService\n ) {\n this.zoomed = this.zoomed$.asObservable();\n\n merge(of(1), this.chartService.size)\n .pipe(\n map((_) => {\n this.x = new Map(this.scaleService.xScales);\n this.y = new Map(this.scaleService.yScales);\n\n if (this.svg) {\n const currentTransform = d3.zoomTransform(this.svg.node());\n this.setZoom(currentTransform);\n }\n })\n )\n .subscribe();\n }\n\n applyZoom(svgElement: ElementRef, config: IChartConfig, size: DOMRect) {\n this.broadcastSubscribtion?.unsubscribe();\n\n this.svg = d3.select(svgElement.nativeElement);\n\n const zoomType = config?.zoom?.type;\n const enable = config?.zoom?.enable;\n\n const zoomed = (event: D3ZoomEvent<any, any>) => {\n const { transform } = event;\n\n if (zoomType === ZoomType.x || zoomType === ZoomType.xy) {\n for (let [index, scale] of this.x.entries()) {\n this.scaleService.xScales.set(index, transform.rescaleX(scale));\n }\n }\n\n if (zoomType === ZoomType.y || zoomType === ZoomType.xy) {\n for (let [index, scale] of this.y.entries()) {\n this.scaleService.yScales.set(index, transform.rescaleY(scale));\n }\n }\n\n if (enable) {\n this.zoomed$.next({ event });\n\n if (event.sourceEvent) {\n this.broadcastService.broadcast({\n channel: config?.zoom?.syncChannel,\n message: event,\n domain: this.scaleService[\n config?.zoom?.type === ZoomType.x ? 'xScales' : 'yScales'\n ]\n .get(config.brush?.axisIndex ?? 0)\n .domain(),\n });\n }\n }\n };\n\n if (enable) {\n this.zoom = d3\n .zoom()\n .scaleExtent([1, Infinity])\n .extent([\n [0, 0],\n [size.width, size.height],\n ]);\n\n this.zoom.on('start zoom end', zoomed);\n this.svg.call(this.zoom);\n this.svg.call(this.zoom.transform, this.initialZoom);\n\n const sc =\n config?.zoom?.type === ZoomType.x\n ? this.x.get(config.brush?.axisIndex ?? 0)\n : this.y.get(config.brush?.axisIndex ?? 0);\n\n this.broadcastSubscribtion = this.broadcastService\n .subscribeToChannel(config?.zoom?.syncChannel)\n .pipe(\n map((_) => {\n const currentTransform = d3.zoomTransform(this.svg.node());\n\n const { message } = _;\n if (currentTransform !== message?.transform) {\n if (message.selection) {\n const s = message.selection;\n\n const domain = sc.domain();\n\n const scale = (domain[1] - domain[0]) / (s[1] - s[0]);\n\n let transform = zoomIdentity.scale(scale);\n\n if (message?.brushType === BrushType.x) {\n transform = transform.translate(-sc(s[0]), 0);\n }\n if (message?.brushType === BrushType.y) {\n transform = transform.translate(0, -sc(s[0]));\n }\n\n this.setZoom(transform);\n\n return;\n }\n\n this.setZoom(message?.transform);\n }\n })\n )\n .subscribe();\n }\n }\n\n setZoom(transform: any) {\n // requestAnimationFrame(() => {\n //\n // });\n\n this.svg?.call(this.zoom.transform, transform);\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { BrushType } from '../model/enum/brush-type';\nimport * as d3 from 'd3';\nimport { map, Subscription } from 'rxjs';\nimport { BroadcastService } from './broadcast.service';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { ScaleService } from './scale.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BrushService {\n broadcastSubscribtion: Subscription;\n\n private brushMap = new Map<BrushType, d3.BrushBehavior<any>>()\n .set(BrushType.x, d3.brushX())\n .set(BrushType.y, d3.brushY());\n\n private scaleMap = new Map<BrushType, string>()\n .set(BrushType.x, 'xScales')\n .set(BrushType.y, 'yScales');\n\n constructor(\n private broadcastService: BroadcastService,\n private scaleService: ScaleService\n ) {}\n\n applyBrush(svgElement: ElementRef, config: IChartConfig, size: DOMRect) {\n this.broadcastSubscribtion?.unsubscribe();\n\n if (config.brush?.enable) {\n const s = this.scaleService[\n this.scaleMap.get(config?.brush?.type ?? BrushType.x)\n ].get(config?.brush?.axisIndex ?? 0);\n\n const brush = this.brushMap.get(config?.brush?.type ?? BrushType.x);\n\n const container = d3.select(svgElement.nativeElement);\n\n const brushBehavior = brush.on(\n 'start brush end',\n (_: d3.D3BrushEvent<any>) => {\n if (_.sourceEvent) {\n const [from, to] = _.selection as number[];\n\n if (to - from < 5) {\n container.call(brush.move, [from, to]);\n return;\n }\n\n this.broadcastService.broadcast({\n channel: config?.zoom?.syncChannel,\n message: {\n ..._,\n selection: [s.invert(from), s.invert(to)],\n brushType: config?.brush?.type ?? BrushType.x,\n },\n });\n }\n }\n );\n\n container.call(brushBehavior);\n\n setTimeout(() => {\n container.call(brush.move, s.domain().map(s), {});\n });\n\n this.broadcastSubscribtion = this.broadcastService\n .subscribeToChannel(config?.zoom?.syncChannel)\n .pipe(\n map((_) => {\n if (_.message?.transform) {\n const s = this.scaleService[\n this.scaleMap.get(config?.brush?.type ?? BrushType.x)\n ].get(config?.brush?.axisIndex ?? 0);\n\n const domain = _.domain;\n\n container.call(brush.move, [s(domain[0]), s(domain[1])]);\n }\n })\n )\n .subscribe();\n }\n }\n}\n","export class ChartBounds {\n top = 0;\n right = 30;\n bottom = 0;\n left = 0;\n\n constructor(options?: {\n top?: number;\n right?: number;\n bottom?: number;\n left: number;\n }) {\n this.top = options?.top || this.top;\n this.right = options?.right || this.right;\n this.bottom = options?.bottom || this.bottom;\n this.left = options?.left || this.left;\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { filter, map, merge, Observable, takeWhile, tap } from 'rxjs';\nimport { ChartService } from '../../service/chart.service';\nimport { ZoomService } from '../../service/zoom.service';\nimport { IChartEvent } from '../../model/i-chart-event';\nimport { IDisplayTooltip } from '../../model/i-display-tooltip';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Component({\n selector: 'teta-tooltip',\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss'],\n})\nexport class TooltipComponent implements OnInit, OnDestroy {\n @Input() size: DOMRect;\n\n position: Observable<{\n left: string;\n top: string;\n bottom: string;\n right: string;\n }>;\n\n displayTooltips: Observable<string>;\n\n tooltips = [];\n\n private alive = true;\n\n display: Observable<number>;\n\n constructor(\n private svc: ChartService,\n private cdr: ChangeDetectorRef,\n private zoomService: ZoomService,\n private sanitizer: DomSanitizer\n ) {}\n\n ngOnInit(): void {\n this.display = merge(this.svc.pointerMove, this.zoomService.zoomed).pipe(\n map(({ event }) => {\n const opacity = event?.type === 'mousemove' ? 1 : 0;\n\n return opacity;\n }),\n tap(() => {\n requestAnimationFrame(() => {\n this.cdr.detectChanges();\n });\n })\n );\n\n this.position = this.svc.pointerMove.pipe(\n filter(({ event }) => event),\n map((_) => {\n return this.getPoisition(_);\n }),\n tap((_) => this.cdr.detectChanges())\n );\n\n const transformHtml = (html) => {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n };\n\n const defaultFormatter = (tooltips: IDisplayTooltip[]) => {\n let html = '';\n\n tooltips.forEach((_) => {\n const indicatorStyle = `display:block; width: 10px; height: 2px; background-color: ${_?.series?.color}`;\n\n html += `<div class=\"display-flex align-center\"><span class=\"margin-right-1\" style=\"${indicatorStyle}\"></span>\n <span class=\"font-title-3\">${_.series.name}\n <span class=\"font-body-3\">x: ${_.point.x?.toFixed(\n 2\n )} y: ${_.point.y?.toFixed(2)}</span></span></div>`;\n });\n\n return transformHtml(html);\n };\n\n const formatter = this.svc.config?.tooltip?.format;\n\n this.displayTooltips = merge(\n this.svc.pointerMove.pipe(tap((_) => (this.tooltips = []))),\n this.svc.tooltips\n ).pipe(\n takeWhile((_) => this.alive),\n filter((_) => !_['event']),\n map((tooltip: any) => {\n if (tooltip) {\n this.tooltips.push(tooltip);\n }\n\n const formatted = formatter\n ? formatter(this.tooltips)\n : defaultFormatter(this.tooltips);\n\n return formatted;\n })\n );\n }\n\n private getPoisition({ event }: any) {\n const centerX = this.size.width / 2;\n const centerY = this.size.height / 2;\n\n const padding = { x: 10, y: 10 };\n\n const scene = {\n left: event.pageX > centerX ? 'initial' : `${event.pageX + padding.x}px`,\n top: event.pageY > centerY ? 'initial' : `${event.pageY + padding.y}px`,\n bottom:\n event.pageY > centerY\n ? `${window.innerHeight - event.pageY}px`\n : 'initial',\n right:\n event.pageX > centerX\n ? `${window.innerWidth - event.pageX + padding.x}px`\n : 'initial',\n };\n\n return scene;\n }\n\n ngOnDestroy() {\n this.alive = false;\n }\n}\n","<ng-container *ngIf=\"position | async as p\">\n\n <div class=\"chart-tooltip color-text-90 bg-background-50 shadow-2 padding-2 border-radius-1\"\n [style.position]=\"'fixed'\"\n [style.opacity]=\"display | async\"\n style=\"pointer-events: none;\"\n [style.left]=\"p.left\"\n [style.top]=\"p.top\"\n [style.bottom]=\"p.bottom\"\n [style.right]=\"p.right\"\n [innerHTML]=\"displayTooltips | async\">\n </div>\n</ng-container>\n\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { Axis } from '../../core/axis/axis';\nimport * as d3 from 'd3';\nimport { ScaleService } from '../../service/scale.service';\nimport { ChartService } from '../../service/chart.service';\nimport { ZoomService } from '../../service/zoom.service';\nimport { merge, takeWhile, tap } from 'rxjs';\n\n@Component({\n selector: '[teta-y-axis]',\n templateUrl: './y-axis.component.html',\n styleUrls: ['./y-axis.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class YAxisComponent implements OnInit, OnDestroy, AfterViewInit {\n @Input() axis: Axis;\n @Input() size: DOMRect;\n @ViewChild('svg') node: ElementRef;\n\n private _alive = true;\n\n constructor(\n private scaleService: ScaleService,\n private chartService: ChartService,\n private cdr: ChangeDetectorRef,\n private zoomService: ZoomService\n ) {\n merge(this.zoomService.zoomed, this.chartService.size)\n .pipe(\n takeWhile(() => this._alive),\n tap((_) => {\n this.draw();\n this.cdr.markForCheck();\n })\n )\n .subscribe();\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n ngAfterViewInit() {\n this.draw();\n }\n\n getLabelTransform() {\n return `translate(${\n this.axis.options.opposite\n ? this.axis.selfSize - 24\n : -this.axis.selfSize + 24\n }, ${this.size.height / 2}) rotate(${\n this.axis.options.opposite ? '90' : '-90'\n })`;\n }\n\n private draw() {\n const scale = this.scaleService.yScales.get(this.axis.index);\n\n const axis = this.axis.options.opposite\n ? d3\n .axisRight(scale)\n // .tickValues(this.axis.tickValues)\n .tickFormat(\n this.axis.options.tickFormat ?? this.axis.defaultFormatter()\n )\n : d3\n .axisLeft(scale)\n // .tickValues(this.axis.tickValues)\n .tickFormat(\n this.axis.options.tickFormat ?? this.axis.defaultFormatter()\n );\n\n d3.select(this.node.nativeElement)\n .call(axis)\n .call((_) => _.select('.domain').remove());\n }\n}\n","<svg:g #svg></svg:g>\n<svg:g class=\"label-axis font-caption\" [attr.transform]=\"getLabelTransform()\">\n <text dy=\"-8px\" text-anchor=\"middle\" dominant-baseline=\"middle\">{{ axis.options.title }}</text>\n</svg:g>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { Axis } from '../../core/axis/axis';\nimport { ScaleService } from '../../service/scale.service';\nimport { ChartService } from '../../service/chart.service';\nimport * as d3 from 'd3';\nimport { ZoomService } from '../../service/zoom.service';\nimport { concat, map, merge, takeWhile, tap } from 'rxjs';\n\n@Component({\n selector: '[teta-x-axis]',\n templateUrl: './x-axis.component.html',\n styleUrls: ['./x-axis.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class XAxisComponent implements OnInit, OnDestroy, AfterViewInit {\n @Input() axis: Axis;\n @Input() size: DOMRect;\n @ViewChild('svg') node: ElementRef;\n\n private _alive = true;\n\n constructor(\n private scaleService: ScaleService,\n private chartService: ChartService,\n private cdr: ChangeDetectorRef,\n private zoomService: ZoomService\n ) {\n merge(this.zoomService.zoomed, this.chartService.size)\n .pipe(\n takeWhile(() => this._alive),\n tap((_) => {\n this.draw();\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n ngAfterViewInit() {\n this.draw();\n }\n\n private draw() {\n const scale = this.scaleService.xScales.get(this.axis.index);\n\n const axis = this.axis.options.opposite\n ? d3\n .axisTop(scale)\n .tickFormat(\n this.axis.options.tickFormat ?? this.axis.defaultFormatter()\n )\n : d3\n .axisBottom(scale)\n .tickFormat(\n this.axis.options.tickFormat ?? this.axis.defaultFormatter()\n );\n\n d3.select(this.node.nativeElement)\n .call(axis)\n .call((_) => _.select('.domain').remove());\n }\n}\n","<svg:g #svg></svg:g>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ScaleService } from '../../service/scale.service';\nimport { AxesService } from '../../service/axes.service';\n\nimport { merge, tap } from 'rxjs';\nimport { ChartService } from '../../service/chart.service';\nimport { ZoomService } from '../../service/zoom.service';\n\n@Component({\n selector: '[teta-gridlines]',\n templateUrl: './gridlines.component.html',\n styleUrls: ['./gridlines.component.scss'],\n})\nexport class GridlinesComponent implements OnInit {\n @Input() size: DOMRect;\n tickYValues: number[];\n tickXValues: number[];\n y: any;\n x: any;\n\n constructor(\n private scaleService: ScaleService,\n private axesService: AxesService,\n private chartService: ChartService,\n private zoomService: ZoomService,\n private cdr: ChangeDetectorRef\n ) {\n merge(this.chartService.size, this.zoomService.zoomed)\n .pipe(\n tap(() => {\n this.draw();\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n draw() {\n this.y = this.scaleService.yScales.get(0);\n this.x = this.scaleService.xScales.get(0);\n\n this.tickYValues = this.y.ticks();\n this.tickXValues = this.x.ticks();\n }\n\n ngOnInit(): void {\n this.draw();\n }\n}\n","<ng-container *ngFor=\"let tick of tickYValues\">\n <svg:line [attr.x1]=\"0\" stroke=\"red\" [attr.y1]=\"y(tick)\" [attr.x2]=\"size?.width\" [attr.y2]=\"y(tick)\"></svg:line>\n</ng-container>\n\n<ng-container *ngFor=\"let tick of tickXValues\">\n <svg:line [attr.x1]=\"x(tick)\" stroke=\"red\" [attr.y1]=\"0\" [attr.x2]=\"x(tick)\" [attr.y2]=\"size?.height\"></svg:line>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnInit,\n} from '@angular/core';\nimport { PlotLine } from '../../model/plotline';\nimport { Axis } from '../../core/axis/axis';\nimport { AxisOrientation } from '../../model/enum/axis-orientation';\nimport { ZoomService } from '../../service/zoom.service';\nimport { ScaleService } from '../../service/scale.service';\nimport * as d3 from 'd3';\nimport { IChartEvent } from '../../model/i-chart-event';\nimport { Plotband } from '../../model/plotband';\nimport { ChartService } from '../../service/chart.service';\n\n@Component({\n selector: '[teta-plot-line]',\n templateUrl: './plotline.component.html',\n styleUrls: ['./plotline.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlotlineComponent implements OnInit {\n @Input() plotline: PlotLine;\n @Input() size: DOMRect;\n @Input() axis: Axis;\n orientation = AxisOrientation;\n\n private scale: any;\n private domain: number[];\n\n constructor(\n private cdr: ChangeDetectorRef,\n private zoomService: ZoomService,\n private scaleService: ScaleService,\n private chartService: ChartService,\n private element: ElementRef\n ) {\n this.zoomService.zoomed.subscribe(() => {\n this.scale = this.scaleService[\n this.axis.orientation === AxisOrientation.x ? 'xScales' : 'yScales'\n ].get(this.axis.index);\n this.cdr.detectChanges();\n });\n }\n\n ngOnInit(): void {\n this.scale = this.scaleService[\n this.axis.orientation === AxisOrientation.x ? 'xScales' : 'yScales'\n ].get(this.axis.index);\n\n this.domain = this.scale.domain();\n\n const plotlineElement = d3\n .select(this.element.nativeElement)\n .select('.plotline');\n\n const grabElement = d3\n .select(this.element.nativeElement)\n .selectAll('.grabber');\n\n const drag = d3\n .drag()\n .subject(() => {\n if (this.axis.orientation === AxisOrientation.y) {\n return { y: plotlineElement.attr('y1') };\n }\n if (this.axis.orientation === AxisOrientation.x) {\n return { x: plotlineElement.attr('x1') };\n }\n })\n .on(\n 'start drag end',\n (event: d3.D3DragEvent<any, PlotLine, any>, d: PlotLine) => {\n d.value = this.scale.invert(\n event[AxisOrientation[this.axis.orientation]]\n );\n\n this.emit({\n event,\n target: d,\n });\n\n this.cdr.detectChanges();\n }\n );\n\n plotlineElement.datum<PlotLine>(this.plotline);\n grabElement.datum<PlotLine>(this.plotline);\n\n if (this.plotline.draggable) {\n grabElement.call(drag);\n }\n }\n\n emit(event: IChartEvent<PlotLine>) {\n this.chartService.emitPlotline(event);\n }\n\n get value() {\n return this.scale(this.plotline.value);\n }\n\n get height(): number {\n return this.size.height;\n }\n\n get width(): number {\n return this.size.width;\n }\n}\n","<svg:line class=\"plotline\"\n [attr.stroke]=\"plotline.style?.stroke || 'red'\"\n [attr.stroke-width]=\"plotline.style?.strokeWidth || 4\"\n [attr.stroke-dasharray]=\"plotline.style?.strokeDasharray\"\n [attr.x1]=\"axis.orientation === orientation.x ? value : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? value : width\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : value\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : value\">\n</svg:line>\n\n<svg:line class=\"grabber\"\n\n [class.x-grabber]=\"axis.orientation === orientation.x\"\n [class.y-grabber]=\"axis.orientation === orientation.y\"\n [attr.stroke]=\"'red'\"\n [attr.stroke-width]=\"8\"\n opacity=\"0\"\n [attr.x1]=\"axis.orientation === orientation.x ? value : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? value : width\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : value\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : value\">\n</svg:line>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnInit,\n} from '@angular/core';\n\nimport * as d3 from 'd3';\nimport { Plotband } from '../../model/plotband';\nimport { ScaleService } from '../../service/scale.service';\n\nimport { Axis } from '../../core/axis/axis';\nimport { ZoomService } from '../../service/zoom.service';\nimport { AxisOrientation } from '../../model/enum/axis-orientation';\nimport { IChartEvent } from '../../model/i-chart-event';\nimport { ChartService } from '../../service/chart.service';\n\n@Component({\n selector: '[teta-plot-band]',\n templateUrl: './plotband.component.html',\n styleUrls: ['./plotband.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlotbandComponent implements OnInit {\n @Input() plotband: Plotband;\n @Input() axis: Axis;\n @Input() size: DOMRect;\n orientation = AxisOrientation;\n\n private scale: any;\n domain: number[];\n\n constructor(\n private scaleService: ScaleService,\n private zoomService: ZoomService,\n private chartService: ChartService,\n private cdr: ChangeDetectorRef,\n private element: ElementRef\n ) {\n this.zoomService.zoomed.subscribe(() => {\n this.scale = this.scaleService[\n this.axis.orientation === AxisOrientation.x ? 'xScales' : 'yScales'\n ].get(this.axis.index);\n this.cdr.detectChanges();\n });\n }\n\n emit(event: IChartEvent<Plotband>) {\n this.chartService.emitPlotband(event);\n }\n\n ngOnInit(): void {\n this.scale = this.scaleService[\n this.axis.orientation === AxisOrientation.x ? 'xScales' : 'yScales'\n ].get(this.axis.index);\n\n this.domain = this.scale.domain();\n\n const plotbandElement = d3\n .select(this.element.nativeElement)\n .select('.plotband');\n\n const grabElements = d3\n .select(this.element.nativeElement)\n .selectAll('.grabber');\n\n const drag = d3\n .drag()\n .subject(() => {\n if (this.axis.orientation === AxisOrientation.x) {\n return { x: plotbandElement.attr('x') };\n }\n\n if (this.axis.orientation === AxisOrientation.y) {\n return { y: plotbandElement.attr('y') };\n }\n })\n .on(\n 'start drag end',\n (event: d3.D3DragEvent<any, Plotband, any>, d: Plotband) => {\n requestAnimationFrame(() => {\n let bandSize = parseFloat(\n plotbandElement.attr(\n this.axis.orientation === AxisOrientation.x ? 'width' : 'height'\n )\n );\n\n d.to = this.scale.invert(\n event[AxisOrientation[this.axis.orientation]] +\n (this.axis.orientation === AxisOrientation.x ? bandSize : 0)\n );\n\n d.from = this.scale.invert(\n event[AxisOrientation[this.axis.orientation]] +\n (this.axis.orientation === AxisOrientation.y ? bandSize : 0)\n );\n\n this.emit({\n event,\n target: d,\n });\n\n this.cdr.detectChanges();\n });\n }\n );\n\n let grabberKey;\n\n const resize = d3\n .drag()\n .on(\n 'start drag end',\n (event: d3.D3DragEvent<any, Plotband, any>, d: Plotband) => {\n requestAnimationFrame(() => {\n if (event?.type === 'start') {\n const { grabber } = event?.sourceEvent?.target?.dataset;\n grabberKey = grabber;\n }\n\n const min = Math.min(...this.domain);\n const max = Math.max(...this.domain);\n\n const minValue = d.min ?? min;\n const maxValue = d.max ?? max;\n d[grabberKey] = this.scale.invert(\n event[AxisOrientation[this.axis.orientation]]\n );\n\n if (grabberKey === 'from') {\n const borderMin = d.from <= minValue;\n\n if (d.from >= d.to) {\n d.from = d.to;\n }\n\n if (borderMin) {\n d.from = minValue;\n }\n }\n\n if (grabberKey === 'to') {\n const borderMax = d.to >= maxValue;\n\n if (borderMax) {\n d.to = maxValue;\n }\n\n if (d.to <= d.from) {\n d.to = d.from;\n }\n }\n\n this.emit({\n event,\n target: d,\n });\n\n this.cdr.detectChanges();\n });\n }\n );\n\n plotbandElement.datum<Plotband>(this.plotband);\n grabElements.datum<Plotband>(this.plotband);\n\n if (this.plotband.draggable) {\n plotbandElement.call(drag);\n }\n\n if (this.plotband.resizable) {\n grabElements.call(resize);\n }\n }\n\n get bandSize(): number {\n return Math.abs(\n this.scale(this.plotband.to) - this.scale(this.plotband.from)\n );\n }\n\n get height(): number {\n return this.size.height;\n }\n\n get width(): number {\n return this.size.width;\n }\n\n get from(): number {\n return this.scale(this.plotband.from);\n }\n\n get to(): number {\n return this.scale(this.plotband.to);\n }\n\n getFill(d: Plotband): string {\n if (d.style?.plotband?.patternImage) {\n return `url(#${d.style.plotband?.patternImage})`;\n }\n return d.style.plotband?.fill;\n }\n}\n","<svg:rect class=\"plotband\"\n [attr.fill]=\"getFill(plotband)\"\n [attr.opacity]=\"plotband.style?.plotband?.opacity\"\n [attr.height]=\"axis.orientation === orientation.x ? height : bandSize\"\n [attr.width]=\"axis.orientation === orientation.x ? bandSize : width\"\n [attr.y]=\"axis.orientation === orientation.y ? to : null\"\n [attr.x]=\"axis.orientation === orientation.x ? from : null\">\n</svg:rect>\n\n<svg:line class=\"display-grabber\"\n [attr.stroke]=\"plotband.style?.grabbers?.stroke || 'red'\"\n [attr.stroke-width]=\"plotband.style?.grabbers?.strokeWidth || 4\"\n [attr.stroke-dasharray]=\"plotband.style?.grabbers?.strokeDasharray\"\n [attr.x1]=\"axis.orientation === orientation.x ? from : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? from : width\"\n [attr.data-grabber]=\"'from'\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : from\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : from\">\n</svg:line>\n\n<svg:line class=\"display-grabber\"\n [attr.stroke]=\"plotband.style?.grabbers?.stroke || 'red'\"\n [attr.stroke-width]=\"plotband.style?.grabbers?.strokeWidth || 4\"\n [attr.stroke-dasharray]=\"plotband.style?.grabbers?.strokeDasharray\"\n [attr.x1]=\"axis.orientation === orientation.x ? to : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? to : width\"\n [attr.data-grabber]=\"'to'\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : to\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : to\">\n</svg:line>\n\n<svg:line class=\"grabber\"\n [class.x-grabber]=\"axis.orientation === orientation.x\"\n [class.y-grabber]=\"axis.orientation === orientation.y\"\n [attr.stroke]=\"'red'\"\n [attr.stroke-width]=\"8\"\n opacity=\"0\"\n [attr.x1]=\"axis.orientation === orientation.x ? from : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? from : width\"\n [attr.data-grabber]=\"'from'\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : from\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : from\">\n</svg:line>\n\n<svg:line class=\"grabber\"\n [class.x-grabber]=\"axis.orientation === orientation.x\"\n [class.y-grabber]=\"axis.orientation === orientation.y\"\n [attr.stroke]=\"'red'\"\n [attr.stroke-width]=\"8\"\n opacity=\"0\"\n [attr.x1]=\"axis.orientation === orientation.x ? to : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? to : width\"\n [attr.data-grabber]=\"'to'\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : to\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : to\">\n</svg:line>\n\n\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ChartService } from '../service/chart.service';\nimport { Series } from '../model/series';\nimport { BasePoint } from '../model/base-point';\nimport { ScaleService } from '../service/scale.service';\nimport { ZoomService } from '../service/zoom.service';\nimport { Observable, tap } from 'rxjs';\n\n@Component({\n template: '',\n})\nexport class SeriesBaseComponent<T extends BasePoint> implements OnInit {\n @Input() series: Series<T>;\n @Input() size: DOMRect;\n\n zoom: Observable<any>;\n\n constructor(\n protected svc: ChartService,\n protected cdr: ChangeDetectorRef,\n protected scaleService: ScaleService,\n protected zoomService: ZoomService,\n protected element: ElementRef\n ) {\n this.zoomService.zoomed\n .pipe(\n tap((_) => {\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n ngOnInit(): void {}\n}\n","export enum TooltipTracking {\n x,\n y,\n}\n","export enum DragPointType {\n x,\n y,\n xy,\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnInit,\n} from '@angular/core';\nimport * as d3 from 'd3';\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { ChartService } from '../../../service/chart.service';\nimport { BasePoint } from '../../../model/base-point';\nimport { ScaleService } from '../../../service/scale.service';\nimport { filter, map, Observable, tap } from 'rxjs';\n\nimport { ZoomService } from '../../../service/zoom.service';\nimport { TooltipTracking } from '../../../model/enum/tooltip-tracking';\nimport { DragPointType } from '../../../model/enum/drag-point-type';\n\n@Component({\n selector: 'svg:svg[teta-line-series]',\n templateUrl: './line-series.component.html',\n styleUrls: ['./line-series.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LineSeriesComponent<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit, AfterViewInit\n{\n transform: Observable<Pick<BasePoint, 'x' | 'y'>>;\n display: Observable<number>;\n\n svgElement: SVGGeometryElement;\n x: any;\n y: any;\n\n constructor(\n protected override svc: ChartService,\n protected override cdr: ChangeDetectorRef,\n protected override scaleService: ScaleService,\n protected override zoomService: ZoomService,\n protected override element: ElementRef\n ) {\n super(svc, cdr, scaleService, zoomService, element);\n }\n\n override ngOnInit(): void {\n this.display = this.zoomService.zoomed.pipe(\n map(({ event }) => {\n return event?.type === 'end' ? 1 : 0;\n })\n );\n\n this.transform = this.svc.pointerMove.pipe(\n filter(({ event }) => event),\n map(({ event }) => {\n return this.getTransform(event);\n }),\n tap((_) => this.cdr.detectChanges())\n );\n }\n\n ngAfterViewInit() {\n const drag = (node, event: d3.D3DragEvent<any, any, any>, d: BasePoint) => {\n if (\n d.marker?.dragType === DragPointType.x ||\n d.marker?.dragType === DragPointType.xy\n ) {\n d.x = this.x.invert(event.x);\n }\n\n if (\n d.marker?.dragType === DragPointType.y ||\n d.marker?.dragType === DragPointType.xy\n ) {\n d.y = this.y.invert(event.y);\n }\n\n this.svc.emitPoint({\n target: {\n series: this.series,\n point: d,\n },\n event,\n });\n\n this.cdr.detectChanges();\n };\n\n const dragMarkers = d3\n .drag()\n .subject(function (event, d: BasePoint) {\n const node = d3.select(this);\n return { x: node.attr('cx'), y: node.attr('cy') };\n })\n .on(\n 'start drag end',\n function (event: d3.D3DragEvent<any, any, any>, d: BasePoint) {\n const node = d3.select(this);\n\n drag(node, event, d);\n }\n );\n\n const draggableMarkers = this.series.data?.filter(\n (_) => _?.marker && _?.marker?.draggable\n );\n\n const element = d3\n .select(this.element.nativeElement)\n .selectAll('.draggable-marker')\n .data(draggableMarkers);\n\n element.call(dragMarkers as any);\n\n this.svgElement = d3\n .select(this.element.nativeElement)\n .select('.line')\n .node() as SVGGeometryElement;\n }\n\n getPath() {\n this.x = this.scaleService.xScales.get(this.series.xAxisIndex);\n this.y = this.scaleService.yScales.get(this.series.yAxisIndex);\n\n const line = d3\n .line<BasePoint>()\n .defined((point) => point.x !== null || point.y !== null)\n .x((point) => this.x(point.x))\n .y((point) => this.y(point.y));\n\n const path = line(this.series.data);\n\n return path;\n }\n\n getMarkers() {\n return this.series.data?.filter((_) => _?.marker);\n }\n\n getTransform(event: any): Pick<BasePoint, 'x' | 'y'> {\n const mouse = d3.pointer(event);\n\n const foundX = this.scaleService.xScales.get(this.series.xAxisIndex);\n const foundY = this.scaleService.yScales.get(this.series.yAxisIndex);\n\n const tooltipTracking = this.svc.config?.tooltip?.tracking;\n\n const lineIntersection = (\n p0_x,\n p0_y,\n p1_x,\n p1_y,\n p2_x,\n p2_y,\n p3_x,\n p3_y\n ) => {\n const rV = {} as any;\n let s1_x, s1_y, s2_x, s2_y;\n s1_x = p1_x - p0_x;\n s1_y = p1_y - p0_y;\n s2_x = p3_x - p2_x;\n s2_y = p3_y - p2_y;\n\n let s, t;\n s =\n (-s1_y * (p0_x - p2_x) + s1_x * (p0_y - p2_y)) /\n (-s2_x * s1_y + s1_x * s2_y);\n t =\n (s2_x * (p0_y - p2_y) - s2_y * (p0_x - p2_x)) /\n (-s2_x * s1_y + s1_x * s2_y);\n\n if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n // Collision detected\n rV.x = p0_x + t * s1_x;\n rV.y = p0_y + t * s1_y;\n }\n\n return rV;\n };\n\n if (tooltipTracking === TooltipTracking.x) {\n const bisect = d3.bisector((_: BasePoint) => _.x).right;\n\n const x0 = foundX.invert(mouse[0]);\n const rightId = bisect(this.series.data, x0);\n\n const range = foundY.range();\n\n const intersect = lineIntersection(\n mouse[0],\n range[0],\n mouse[0],\n range[1],\n foundX(this.series.data[rightId - 1]?.x),\n foundY(this.series.data[rightId - 1]?.y),\n foundX(this.series.data[rightId]?.x),\n foundY(this.series.data[rightId]?.y)\n );\n\n console.log(intersect);\n\n this.svc.setTooltip({\n point: { x: foundX.invert(intersect.x), y: foundY.invert(intersect.y) },\n series: this.series,\n });\n\n return {\n x: intersect.x,\n y: intersect.y,\n };\n }\n\n if (tooltipTracking === TooltipTracking.y) {\n const bisect = d3.bisector((_: BasePoint) => _.y).right;\n\n const y0 = foundY.invert(mouse[1]);\n\n const rightId = bisect(this.series.data, y0);\n const range = foundX.range();\n\n const intersect = lineIntersection(\n range[0],\n mouse[1],\n range[1],\n mouse[1],\n foundX(this.series.data[rightId - 1]?.x),\n foundY(this.series.data[rightId - 1]?.y),\n foundX(this.series.data[rightId]?.x),\n foundY(this.series.data[rightId]?.y)\n );\n\n this.svc.setTooltip({\n point: { x: foundX.invert(intersect.x), y: foundY.invert(intersect.y) },\n series: this.series,\n });\n\n return {\n x: intersect.x,\n y: intersect.y,\n };\n }\n }\n}\n","<svg:path\n class=\"line\"\n [attr.d]=\"getPath()\"\n [attr.stroke]=\"series.color\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n fill=\"none\">\n</svg:path>\n\n<ng-container *ngIf=\"transform | async as t\">\n <svg:circle\n r=\"3\"\n [attr.fill]=\"series.color\"\n [attr.transform]=\"'translate('+ t.x +', '+ t.y +')'\"\n [attr.opacity]=\"display | async\">\n </svg:circle>\n</ng-container>\n\n<ng-container *ngIf=\"getMarkers() as markers\">\n\n <svg:circle\n class=\"marker\"\n *ngFor=\"let point of markers\"\n [class.draggable-marker]=\"point?.marker?.draggable\"\n [attr.r]=\"point.marker.style?.radius ?? 5\"\n [attr.fill]=\"point.marker.style?.fill ?? 'transparent'\"\n [attr.stroke]=\"point.marker.style?.stroke ?? 'none'\"\n [attr.stroke-width]=\"point.marker.style?.strokeWidth\"\n [attr.stroke-dasharray]=\"point.marker.style?.strokeDasharray\"\n [attr.cx]=\"x(point.x)\"\n [attr.cy]=\"y(point.y)\"\n >\n </svg:circle>\n\n\n</ng-container>\n\n\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnChanges,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport * as d3 from 'd3';\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { BasePoint } from '../../../model/base-point';\nimport { ChartService } from '../../../service/chart.service';\nimport { ScaleService } from '../../../service/scale.service';\nimport { ZoomService } from '../../../service/zoom.service';\n\n@Component({\n selector: 'svg:svg[teta-bar-series]',\n templateUrl: './bar-series.component.html',\n styleUrls: ['./bar-series.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BarSeriesComponent<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit, OnChanges\n{\n private scaleBand: d3.ScaleBand<any>;\n private y: any;\n\n constructor(\n protected override svc: ChartService,\n protected override cdr: ChangeDetectorRef,\n protected override scaleService: ScaleService,\n protected override zoomService: ZoomService,\n protected override element: ElementRef\n ) {\n super(svc, cdr, scaleService, zoomService, element);\n }\n\n override ngOnInit(): void {\n const x = this.scaleService.xScales.get(this.series.xAxisIndex);\n const y = this.scaleService.yScales.get(this.series.yAxisIndex);\n\n const domain = this.series.data?.map((_: BasePoint) => _.x);\n const range = [x(domain[0]), x(domain[domain?.length - 1])];\n\n this.scaleBand = d3.scaleBand<number>().domain(domain).range(range);\n\n this.y = y;\n }\n\n width() {\n return this.scaleBand.bandwidth();\n }\n\n height(point: BasePoint) {\n return Math.abs(this.y(0) - this.y(point.y));\n }\n\n getX(point: BasePoint) {\n return this.scaleBand(point.x);\n }\n\n getY(point: BasePoint) {\n return this.y(point.y);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n console.log(changes);\n }\n}\n","<svg:rect *ngFor=\"let point of series.data\" [attr.y]=\"getY(point)\" [attr.x]=\"getX(point)\" [attr.width]=\"width()\"\n [attr.height]=\"height(point)\"\n [attr.fill]=\"point.color\"></svg:rect>\n","export enum SeriesType {\n line,\n bar,\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n Input,\n OnInit,\n SimpleChanges,\n ViewContainerRef,\n} from '@angular/core';\nimport { SeriesBaseComponent } from '../../base/series-base.component';\nimport { LineSeriesComponent } from '../series/line/line-series.component';\nimport { BarSeriesComponent } from '../series/bar/bar-series.component';\n\nimport { Series } from '../../model/series';\nimport { BasePoint } from '../../model/base-point';\nimport { ChartService } from '../../service/chart.service';\nimport { tap } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\nimport { SeriesType } from '../../model/enum/series-type';\n\n@Component({\n selector: '[teta-series-host]',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeriesHostComponent<T extends BasePoint> implements OnInit {\n @Input() series: Series<T>;\n @Input() size: DOMRect;\n\n private defaultSeriesTypeMapping = new Map<\n SeriesType,\n typeof SeriesBaseComponent\n >()\n .set(SeriesType.line, LineSeriesComponent)\n .set(SeriesType.bar, BarSeriesComponent);\n\n private _init = false;\n private _componentRef: ComponentRef<any>;\n\n constructor(\n private viewContainerRef: ViewContainerRef,\n private chartService: ChartService\n ) {\n this.chartService.size\n .pipe(\n throttleTime(100, null, { trailing: true }),\n tap(() => {\n this._componentRef?.injector.get(ChangeDetectorRef).detectChanges();\n })\n )\n .subscribe();\n }\n\n ngOnInit(): void {\n if (!SeriesBaseComponent.isPrototypeOf(this.series.component)) {\n this.series.component =\n this.defaultSeriesTypeMapping.get(this.series.type) ||\n LineSeriesComponent;\n }\n\n this._componentRef = this.viewContainerRef.createComponent(\n this.series.component\n );\n this._componentRef.instance.series = this.series;\n this._componentRef.instance.size = this.size;\n this._init = true;\n }\n\n ngOnDestroy(): void {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this._init && changes.hasOwnProperty('series')) {\n this._componentRef.instance.series = this.series;\n this._componentRef.instance.size = this.size;\n this._componentRef.injector.get(ChangeDetectorRef).markForCheck();\n this._componentRef.injector.get(ChangeDetectorRef).detectChanges();\n }\n }\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n Input,\n OnInit,\n} from '@angular/core';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { BrushService } from '../service/brush.service';\nimport { ChartService } from '../service/chart.service';\n\n@Directive({\n selector: 'svg:svg[tetaBrushable]',\n})\nexport class BrushableDirective implements OnInit, AfterViewInit {\n @Input() config?: IChartConfig;\n @Input() size?: DOMRect;\n\n constructor(\n private brushService: BrushService,\n private chartService: ChartService,\n private element: ElementRef\n ) {}\n\n ngOnInit() {}\n\n ngAfterViewInit() {\n this.brushService.applyBrush(this.element, this.config, this.size);\n }\n}\n","import { Directive, ElementRef, HostBinding, Input } from '@angular/core';\nimport { ZoomService } from '../service/zoom.service';\nimport { ChartService } from '../service/chart.service';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { Axis } from '../core/axis/axis';\n\n@Directive({\n selector: '[tetaZoomable]',\n})\nexport class ZoomableDirective {\n @Input() config?: IChartConfig;\n @Input() axis?: Axis;\n @Input() size?: DOMRect;\n\n @HostBinding('class.zoomable') private zoomable = false;\n\n constructor(\n private element: ElementRef,\n private svc: ZoomService,\n private chartService: ChartService\n ) {}\n\n ngOnInit() {\n if (this.config?.zoom?.enable || this.axis?.options?.zoom) {\n this.zoomable = true;\n\n this.svc.applyZoom(this.element, this.chartService.config, this.size);\n }\n }\n ngAfterViewInit() {}\n}\n","import {\n AfterContentChecked,\n AfterViewChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { ChartService } from '../service/chart.service';\nimport { Observable, tap } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\nimport { AxesService } from '../service/axes.service';\nimport { Axis } from '../core/axis/axis';\nimport { AxisOrientation } from '../model/enum/axis-orientation';\n\ntype Opposite = boolean;\n\n@Component({\n selector: 'teta-chart-container',\n templateUrl: './chart-container.component.html',\n styleUrls: ['./chart-container.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartContainerComponent\n implements OnInit, OnChanges, AfterViewChecked, AfterContentChecked\n{\n @Input() config: IChartConfig;\n\n yAxes: Map<number, Axis>;\n xAxes: Map<number, Axis>;\n size: Observable<DOMRect>;\n\n private _observer: ResizeObserver;\n private uniqId: string;\n\n private filterPositionMap = new Map<\n Opposite,\n (axis: Axis) => (_: Axis) => boolean\n >()\n .set(\n true,\n (axis) => (_: Axis) =>\n _.options.opposite && _.options.visible && axis.index <= _.index\n )\n .set(\n false,\n (axis) => (_: Axis) =>\n _.options.opposite !== true &&\n _.options.visible &&\n _.index <= axis.index\n );\n\n constructor(\n private _svc: ChartService,\n private _cdr: ChangeDetectorRef,\n private _elementRef: ElementRef,\n private _axesService: AxesService\n ) {\n this.size = this._svc.size.pipe(\n throttleTime(100, undefined, { trailing: true }),\n tap(() => {\n setTimeout(() => {\n this._cdr.detectChanges();\n });\n })\n );\n\n this.yAxes = this._axesService.yAxis;\n this.xAxes = this._axesService.xAxis;\n\n this.uniqId = (Date.now() + Math.random()).toString(36);\n }\n\n ngOnInit(): void {\n this._observer = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n this._svc.setSize(entries[0].contentRect);\n });\n this._observer.observe(this._elementRef.nativeElement);\n\n this._svc.init(this.config);\n }\n\n private sumSize = (acc, curr) => acc + curr.selfSize;\n\n private oppositeFilter(axis?: Axis) {\n return (_) =>\n _.options.opposite && _.options.visible && axis.index <= _.index;\n }\n\n private nonOppositeFilter(axis?: Axis) {\n return (_) =>\n _.options.opposite !== true && _.options.visible && _.index <= axis.index;\n }\n\n getVisibleRect(size: DOMRect) {\n const yAxesArray = [...this.yAxes.values()];\n const xAxesArray = [...this.xAxes.values()];\n\n const left = yAxesArray\n .filter((_) => _.options.opposite !== true && _.options.visible)\n .reduce(this.sumSize, 0);\n\n const right = yAxesArray\n .filter((_) => _.options.opposite && _.options.visible)\n .reduce(this.sumSize, 0);\n\n const bottom = xAxesArray\n .filter((_) => _.options.opposite !== true && _.options.visible)\n .reduce(this.sumSize, 0);\n\n const top = xAxesArray\n .filter((_) => _.options.opposite && _.options.visible)\n .reduce(this.sumSize, 0);\n\n const rect = {\n left,\n top,\n width: size.width - left - right + 1,\n height: size.height - top - bottom + 1,\n };\n\n return rect;\n }\n\n getYAxisTranslate(axis: Axis, size: DOMRect): string {\n const yAxesArray = [...this.yAxes.values()];\n\n const translateOpposite = yAxesArray\n .filter(this.nonOppositeFilter(axis))\n .reduce(this.sumSize, 0);\n\n const translateNonOpposite = yAxesArray\n .filter(this.oppositeFilter(axis))\n .reduce(this.sumSize, 0);\n\n return `translate(${\n axis.options.opposite\n ? size.width - translateNonOpposite\n : translateOpposite\n }, 0)`;\n }\n\n getXAxisTranslate(axis: Axis, size: DOMRect): string {\n const xAxesArray = [...this.xAxes.values()];\n\n const translateNonOpposite = xAxesArray\n .filter(this.nonOppositeFilter(axis))\n .reduce(this.sumSize, 0);\n\n const translateOpposite = xAxesArray\n .filter(this.oppositeFilter(axis))\n .reduce(this.sumSize, 0);\n\n return `translate(0, ${\n axis.options.opposite\n ? translateOpposite\n : size.height - translateNonOpposite\n })`;\n }\n\n getTranslate(axis?: Axis, size?: DOMRect): string {\n const xAxesArray = [...this.xAxes.values()];\n const yAxesArray = [...this.yAxes.values()];\n\n const oppositeFilter = this.filterPositionMap.get(true);\n const nonOppositeFilter = this.filterPositionMap.get(false);\n\n const oppositeOffsetY = yAxesArray.filter(oppositeFilter(axis));\n const nonOppositeOffsetY = yAxesArray.filter(nonOppositeFilter(axis));\n\n const oppositeOffsetX = xAxesArray.filter(oppositeFilter(axis));\n const nonOppositeOffsetX = xAxesArray.filter(nonOppositeFilter(axis));\n\n const oppositeTranslateY = oppositeOffsetY.reduce(\n (acc, curr) => acc + curr.selfSize,\n 0\n );\n const nonOppisteTranslateY = nonOppositeOffsetY.reduce(\n (acc, curr) => acc + curr.selfSize,\n 0\n );\n\n const oppositeTranslateX = oppositeOffsetX.reduce(\n (acc, curr) => acc + curr.selfSize,\n 0\n );\n\n const nonOppisteTranslateX = nonOppositeOffsetX.reduce(\n (acc, curr) => acc + curr.selfSize,\n 0\n );\n\n const left = yAxesArray\n .filter((_) => _.options.visible && _.options.opposite !== true)\n .reduce((acc, curr) => acc + curr.selfSize, 0);\n\n const top = xAxesArray\n .filter((_) => _.options.visible && _.options.opposite === true)\n .reduce((acc, curr) => acc + curr.selfSize, 0);\n\n if (axis.orientation === AxisOrientation.x) {\n return `translate(${left}, ${\n axis.options.opposite\n ? oppositeTranslateX\n : size.height - nonOppisteTranslateX\n })`;\n }\n\n if (axis.orientation === AxisOrientation.y) {\n return `translate(${\n axis.options.opposite\n ? size.width - oppositeTranslateY\n : nonOppisteTranslateY\n }, ${top})`;\n }\n\n return 'translate(0, 0)';\n }\n\n mouseMove(event) {\n this._svc.setPointerMove(event);\n }\n\n mouseLeave(event) {\n this._svc.setPointerMove(event);\n }\n\n id(): string {\n return this.uniqId;\n }\n\n ngAfterContentChecked(): void {}\n\n ngAfterViewChecked(): void {}\n\n ngOnChanges(changes: SimpleChanges): void {}\n}\n","<ng-container *ngIf=\"size | async as s\">\n <teta-tooltip [size]=\"s\"></teta-tooltip>\n <svg\n [tetaZoomable]\n [tetaBrushable]\n [size]=\"s\"\n [config]=\"config\"\n [attr.width]=\"s.width\"\n [attr.height]=\"s.height\"\n [attr.viewBox]=\"'0 0 '+s.width+' '+s.height\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousemove)=\"mouseMove($event)\">\n <ng-container *ngIf=\"getVisibleRect(s) as rect\">\n <defs>\n <clipPath [attr.id]=\"'visible-window-' + id()\">\n <rect [attr.x]=\"rect.left\" [attr.y]=\"rect.top\" [attr.width]=\"rect.width\" [attr.height]=\"rect.height\"></rect>\n </clipPath>\n </defs>\n\n <g class=\"y-axis-container\">\n <g *ngFor=\"let item of yAxes | keyvalue\"\n teta-y-axis\n [axis]=\"item.value\"\n [size]=\"s\"\n [attr.transform]=\"getTranslate(item.value, s)\"></g>\n </g>\n <g class=\"x-axis-container\">\n <g *ngFor=\"let item of xAxes | keyvalue\"\n teta-x-axis\n\n [axis]=\"item.value\"\n [size]=\"s\"\n [attr.transform]=\"getTranslate(item.value, s)\"></g>\n </g>\n <g [attr.clip-path]=\"'url(#visible-window-'+ id() +')'\">\n <g [attr.transform]=\"'translate('+ rect.left +', '+ rect.top +')'\">\n <g class=\"gridlines\" teta-gridlines [size]=\"s\"></g>\n\n <g class=\"x-axis-plotline-container\">\n <ng-container *ngFor=\"let axis of config.xAxis; let i = index\">\n <g teta-plot-line *ngFor=\"let plotline of axis.plotlines\" [plotline]=\"plotline\" [size]=\"s\"\n [axis]=\"xAxes.get(i)\"></g>\n </ng-container>\n </g>\n\n <g class=\"y-axis-plotline-container\">\n <ng-container *ngFor=\"let axis of config.yAxis; let i = index\">\n <g teta-plot-line *ngFor=\"let plotline of axis.plotlines\" [plotline]=\"plotline\" [size]=\"s\"\n [axis]=\"yAxes.get(i)\"></g>\n </ng-container>\n </g>\n\n <g class=\"x-axis-plotband-container\">\n <ng-container *ngFor=\"let axis of config.xAxis; let i = index\">\n <g teta-plot-band *ngFor=\"let plotband of axis.plotbands\" [plotband]=\"plotband\" [size]=\"s\"\n [axis]=\"xAxes.get(i)\"></g>\n </ng-container>\n </g>\n <g class=\"y-axis-plotband-container\">\n <ng-container *ngFor=\"let axis of config.yAxis; let i = index\">\n <g teta-plot-band *ngFor=\"let plotband of axis.plotbands\" [plotband]=\"plotband\" [size]=\"s\"\n [axis]=\"yAxes.get(i)\"></g>\n </ng-container>\n </g>\n <g class=\"series-tooltip-line-marker\"></g>\n <g class=\"series-container\">\n <g teta-series-host\n *ngFor=\"let series of config.series\"\n [series]=\"series\"\n [size]=\"s\"></g>\n </g>\n </g>\n </g>\n </ng-container>\n </svg>\n\n\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnInit,\n} from '@angular/core';\nimport { Series } from '../model/series';\nimport { BasePoint } from '../model/base-point';\nimport { SeriesType } from '../model/enum/series-type';\n\n@Component({\n selector: 'teta-legend',\n templateUrl: './legend.component.html',\n styleUrls: ['./legend.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LegendComponent implements OnInit {\n private sizeMapping = new Map<SeriesType, number>()\n .set(SeriesType.line, 2)\n .set(SeriesType.bar, 12);\n\n @Input() series: Array<Series<BasePoint>>;\n @HostBinding('class.padding-bottom-4') classLegend = true;\n\n constructor() {}\n\n ngOnInit(): void {\n this.series = this.series?.filter((_) => _.showInLegend !== false);\n }\n\n getHeight(serie: Series<BasePoint>) {\n return this.sizeMapping.get(serie.type);\n }\n}\n","<div *ngFor=\"let serie of series\">\n <div class=\"legend-item\">\n <div class=\"legend-icon-form\" [style.height.px]=\"getHeight(serie)\" [style.background-color]=\"serie.color\"></div>\n <div class=\"legend-label\">{{ serie.name }}</div>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ChartService } from '../service/chart.service';\nimport { IChartConfig } from '../model/i-chart-config';\n\nimport { BasePoint } from '../model/base-point';\nimport { Series } from '../model/series';\nimport { ZoomService } from '../service/zoom.service';\nimport { ScaleService } from '../service/scale.service';\nimport { BrushService } from '../service/brush.service';\nimport { AxesService } from '../service/axes.service';\nimport { ChartBounds } from '../model/chart-bounds';\n\nimport { IChartEvent } from '../model/i-chart-event';\nimport { PlotLine } from '../model/plotline';\nimport { Plotband } from '../model/plotband';\nimport { IPointMove } from '../model/i-point-move';\n\n@Component({\n selector: 'teta-svg-chart',\n templateUrl: './chart.component.html',\n styleUrls: ['./chart.component.scss'],\n providers: [\n ChartService,\n ZoomService,\n ScaleService,\n AxesService,\n BrushService,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartComponent implements OnInit, OnChanges, OnDestroy {\n legendSeries: Array<Series<BasePoint>>;\n\n @Output()\n plotBandsMove: EventEmitter<IChartEvent<Plotband>> = new EventEmitter<\n IChartEvent<Plotband>\n >();\n\n @Output()\n plotLinesMove: EventEmitter<IChartEvent<PlotLine>> = new EventEmitter<\n IChartEvent<PlotLine>\n >();\n\n @Output()\n pointMove: EventEmitter<IChartEvent<IPointMove>> = new EventEmitter<\n IChartEvent<IPointMove>\n >();\n\n @Input() set config(config: IChartConfig) {\n this._config = Object.assign(\n {\n bounds: new ChartBounds(),\n },\n config\n );\n }\n\n get config() {\n return this._config;\n }\n\n private _config;\n\n constructor(private svc: ChartService, private zoomService: ZoomService) {}\n\n ngOnChanges(changes: SimpleChanges) {}\n\n ngOnInit(): void {\n this.svc.plotbandMove.subscribe((_) => {\n this.plotBandsMove.emit(_);\n });\n\n this.svc.plotlineMove.subscribe((_) => {\n this.plotLinesMove.emit(_);\n });\n\n this.svc.pointMove.subscribe((_) => {\n this.pointMove.emit(_);\n });\n }\n\n ngAfterViewInit() {}\n\n ngOnDestroy() {\n this.zoomService.broadcastSubscribtion?.unsubscribe();\n }\n}\n","<div class=\"column column_auto\">\n <teta-chart-container class=\"chart-container\" [config]=\"config\"></teta-chart-container>\n</div>\n\n<teta-legend *ngIf=\"config.legend?.enable === true\" [series]=\"config.series\"></teta-legend>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ChartComponent } from './chart/chart.component';\nimport { SeriesHostComponent } from './chart-container/series-host/series-host.component';\nimport { ChartContainerComponent } from './chart-container/chart-container.component';\nimport { LegendComponent } from './legend/legend.component';\nimport { SeriesBaseComponent } from './base/series-base.component';\nimport { LineSeriesComponent } from './chart-container/series/line/line-series.component';\nimport { GridlinesComponent } from './chart-container/gridlines/gridlines.component';\nimport { XAxisComponent } from './chart-container/x-axis/x-axis.component';\nimport { YAxisComponent } from './chart-container/y-axis/y-axis.component';\nimport { PlotlineComponent } from './chart-container/plotline/plotline.component';\nimport { PlotbandComponent } from './chart-container/plotband/plotband.component';\nimport { BarSeriesComponent } from './chart-container/series/bar/bar-series.component';\nimport { TooltipComponent } from './chart-container/tooltip/tooltip.component';\nimport { ZoomableDirective } from './directives/zoomable.directive';\nimport { BrushableDirective } from './directives/brushable.directive';\n\n@NgModule({\n declarations: [\n ChartComponent,\n SeriesHostComponent,\n ChartContainerComponent,\n LegendComponent,\n SeriesBaseComponent,\n LineSeriesComponent,\n GridlinesComponent,\n XAxisComponent,\n YAxisComponent,\n PlotlineComponent,\n PlotbandComponent,\n BarSeriesComponent,\n TooltipComponent,\n ZoomableDirective,\n BrushableDirective,\n ],\n exports: [ChartComponent],\n imports: [CommonModule],\n})\nexport class ChartModule {}\n","import { SvgAttributes } from './svg-attributes';\n\nexport class Plotband {\n id: number | string;\n from: number;\n to: number;\n label?: string;\n showGrabbers?: boolean;\n draggable?: boolean;\n resizable?: boolean;\n min?: number;\n max?: number;\n style?: {\n plotband?: SvgAttributes;\n grabbers?: SvgAttributes;\n };\n\n constructor(options?: {\n id: any;\n from: number;\n to: number;\n label?: string;\n showGrabbers?: boolean;\n draggable?: boolean;\n resizable?: boolean;\n min?: number;\n max?: number;\n style?: {\n plotband?: SvgAttributes;\n grabbers?: SvgAttributes;\n };\n }) {\n this.id = options?.id;\n this.from = options?.from;\n this.to = options?.to;\n this.label = options?.label;\n this.showGrabbers =\n options?.showGrabbers != null ? options.showGrabbers : true;\n this.draggable = options?.draggable != null ? options?.draggable : false;\n this.resizable = options?.resizable != null ? options?.resizable : true;\n this.min = options?.min;\n this.max = options?.max;\n this.style = options?.style;\n }\n}\n","import { SvgAttributes } from './svg-attributes';\n\nexport class PlotLine {\n id?: number | string;\n value: number;\n label?: string;\n min?: number;\n max?: number;\n draggable?: boolean;\n style?: SvgAttributes;\n\n constructor(options?: {\n id?: number;\n value: number;\n label?: string;\n min?: number;\n max?: number;\n draggable?: boolean;\n style?: SvgAttributes;\n }) {\n this.id = options?.id;\n this.value = options?.value;\n this.label = options?.label;\n this.min = options?.min;\n this.max = options?.max;\n this.draggable = options?.draggable;\n this.style = options?.style;\n }\n}\n","/*\n * Public API Surface of chart\n */\n\nexport * from './chart/chart.module';\nexport * from './chart/service/chart.service';\nexport * from './chart/chart/chart.component';\nexport * from './chart/model/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}