@tetacom/svg-charts 1.6.0 → 1.6.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/service/broadcast.service.ts","../../src/chart/service/brush.service.ts","../../src/chart/model/enum/scale-type.ts","../../src/chart/default/default-axis-config.ts","../../src/chart/model/enum/zoom-type.ts","../../src/chart/model/chart-bounds.ts","../../src/chart/model/enum/tooltip-tracking.ts","../../src/chart/model/enum/zoom-behavior-type.ts","../../src/chart/default/default-chart-config.ts","../../src/chart/model/enum/series-type.ts","../../src/chart/model/enum/fill-type.ts","../../src/chart/model/enum/clip-points-direction.ts","../../src/chart/default/default-series-config.ts","../../src/chart/service/chart.service.ts","../../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/core/axis/axis.ts","../../src/chart/model/i-broadcast-message.ts","../../src/chart/service/zoom.service.ts","../../src/chart/service/scale.service.ts","../../src/chart/base/series-base.component.ts","../../src/chart/model/enum/brush-type.ts","../../src/chart/model/enum/align.enum.ts","../../src/chart/model/enum/vertical-align.enum.ts","../../src/chart/core/utils/position-util.ts","../../src/chart/chart-container/tooltip/tooltip.component.ts","../../src/chart/chart-container/tooltip/tooltip.component.html","../../src/chart/chart-container/x-axis/x-axis.component.ts","../../src/chart/chart-container/x-axis/x-axis.component.html","../../src/chart/directives/zoomable.directive.ts","../../src/chart/chart-container/y-axis/y-axis.component.ts","../../src/chart/chart-container/y-axis/y-axis.component.html","../../src/chart/model/plot-band.ts","../../src/chart/chart-container/plotband/plot-band.component.ts","../../src/chart/chart-container/plotband/plot-band.component.html","../../src/chart/chart-container/gridlines/gridlines.component.ts","../../src/chart/chart-container/gridlines/gridlines.component.html","../../src/chart/chart-container/series/linear-series-base.ts","../../src/chart/model/enum/drag-point-type.ts","../../src/chart/directives/draggable-point.directive.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/chart-container/series/scatter-series/scatter-series.component.ts","../../src/chart/chart-container/series/scatter-series/scatter-series.component.html","../../src/chart/chart-container/series/block-series/block-series.component.ts","../../src/chart/chart-container/series/block-series/block-series.component.html","../../src/chart/chart-container/series/block-area-series/block-area-series.component.ts","../../src/chart/chart-container/series/block-area-series/block-area-series.component.html","../../src/chart/chart-container/series/area-series/area-series.component.ts","../../src/chart/chart-container/series/area-series/area-series.component.html","../../src/chart/default/defaultSeriesTypeMapping.ts","../../src/chart/chart-container/series-host/series-host.component.ts","../../src/chart/model/plot-line.ts","../../src/chart/chart-container/plotline/plotline.component.ts","../../src/chart/chart-container/plotline/plotline.component.html","../../src/chart/chart-container/annotation/annotation.component.ts","../../src/chart/chart-container/annotation/annotation.component.html","../../src/chart/chart-container/crosshair/crosshair.component.ts","../../src/chart/chart-container/crosshair/crosshair.component.html","../../src/chart/directives/brushable.directive.ts","../../src/observable/zoneObservable.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-container/series/block-horizontal-series/block-horizontal-series.component.ts","../../src/chart/chart-container/series/block-horizontal-series/block-horizontal-series.component.html","../../src/index.ts","../../src/tetacom-svg-charts.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {IBroadcastMessage, ZoomMessage} from '../model/i-broadcast-message';\nimport {filter, Observable, ReplaySubject} from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BroadcastService {\n private zoomEmitter: ReplaySubject<IBroadcastMessage<ZoomMessage>>;\n\n constructor() {\n this.zoomEmitter = new ReplaySubject<IBroadcastMessage<ZoomMessage>>(1);\n }\n\n broadcastZoom(value: IBroadcastMessage<ZoomMessage>) {\n this.zoomEmitter.next(value);\n }\n\n subscribeToZoom(channel: string): Observable<IBroadcastMessage<ZoomMessage>> {\n return this.zoomEmitter.asObservable().pipe(\n filter((msg) => channel && msg.channel === channel)\n );\n }\n}\n","import {Injectable} from '@angular/core';\nimport {Observable, ReplaySubject} from 'rxjs';\nimport {BrushMessage} from '../model/i-broadcast-message';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BrushService {\n brushDomain: Observable<BrushMessage>;\n private _brushDomain = new ReplaySubject<BrushMessage>(1);\n\n constructor() {\n this.brushDomain = this._brushDomain.asObservable();\n }\n\n setBrush(brush: BrushMessage) {\n this._brushDomain.next(brush);\n }\n}\n","export enum ScaleType {\n linear,\n log,\n symlog,\n pow,\n sqrt,\n time,\n band\n}\n","import { AxisOptions } from '../model/axis-options';\nimport { ScaleType } from '../model/enum/scale-type';\n\nexport const defaultAxisConfig: AxisOptions = {\n visible: true,\n zoom: true,\n scaleType: {\n type: ScaleType.linear,\n },\n niceTicks: false,\n};\n","export enum ZoomType {\n x,\n y,\n xy,\n}\n","export class ChartBounds {\n top?: number = 0;\n right?: number = 0;\n bottom?: number = 0;\n left?: number = 0;\n\n constructor(options?: {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n }) {\n this.top = options?.top || 0;\n this.right = options?.right || 0;\n this.bottom = options?.bottom || 0;\n this.left = options?.left || 0;\n }\n}\n","export enum TooltipTracking {\n x,\n y,\n}\n","export enum ZoomBehaviorType {\n move,\n wheel\n}\n","import {IChartConfig} from '../model/i-chart-config';\nimport {ZoomType} from '../model/enum/zoom-type';\nimport {ChartBounds} from '../model/chart-bounds';\nimport {TooltipTracking} from '../model/enum/tooltip-tracking';\nimport {ZoomBehaviorType} from \"../model/enum/zoom-behavior-type\";\n\nexport const defaultChartConfig = (): IChartConfig => ({\n name: null,\n zoom: {\n enable: true,\n type: ZoomType.x,\n syncType: ZoomType.xy,\n zoomBehavior: ZoomBehaviorType.move\n },\n bounds: new ChartBounds({\n bottom: 12,\n left: 12,\n top: 12,\n right: 12\n }),\n legend: {\n enable: true,\n },\n tooltip: {\n enable: true,\n showMarkers: true,\n tracking: TooltipTracking.x,\n showCrosshair: false,\n padding: {\n x: 16,\n y: 16\n }\n },\n xAxis: [],\n yAxis: [],\n series: [],\n gridLines: {\n enable: true\n }\n});\n","export enum SeriesType {\n line,\n bar,\n area,\n scatter,\n block,\n blockArea\n}\n","export enum FillType {\n default,\n gradient,\n}\nexport enum FillDirection {\n x,\n y,\n}\n","export enum ClipPointsDirection {\n x,\n y,\n none\n}\n\n","import {Series} from '../model/series';\nimport {BasePoint} from '../model/base-point';\nimport {SeriesType} from '../model/enum/series-type';\nimport {FillType} from '../model/enum/fill-type';\nimport {ClipPointsDirection} from \"../model/enum/clip-points-direction\";\n\nexport const defaultSeriesConfig = (): Series<BasePoint> => ({\n data: [],\n type: SeriesType.line,\n xAxisIndex: 0,\n yAxisIndex: 0,\n fillType: FillType.default,\n color: 'coral',\n visible: true,\n clipPointsDirection: ClipPointsDirection.x\n});\n","import { Injectable } from '@angular/core';\nimport {\n BehaviorSubject,\n filter,\n lastValueFrom,\n map,\n Observable,\n of,\n shareReplay,\n Subject,\n take,\n withLatestFrom,\n} from 'rxjs';\n\nimport { defaultAxisConfig } from '../default/default-axis-config';\nimport { defaultChartConfig } from '../default/default-chart-config';\nimport { defaultSeriesConfig } from '../default/default-series-config';\nimport { Annotation } from '../model/annotation';\nimport { BasePoint } from '../model/base-point';\nimport { ClipPointsDirection } from '../model/enum/clip-points-direction';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { IChartEvent } from '../model/i-chart-event';\nimport { IDisplayTooltip } from '../model/i-display-tooltip';\nimport { IPointMove } from '../model/i-point-move';\nimport { PlotBand } from '../model/plot-band';\nimport { PlotLine } from '../model/plot-line';\nimport { Series } from '../model/series';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ChartService {\n public id: Observable<string>;\n public config: Observable<IChartConfig>;\n public size: Observable<DOMRect>;\n public pointerMove: Observable<PointerEvent>;\n public tooltips: Observable<Map<Series<BasePoint>, IDisplayTooltip>>;\n public plotBandEvent: Observable<IChartEvent<PlotBand>>;\n public plotLineMove: Observable<IChartEvent<PlotLine>>;\n public plotBandClick: Observable<IChartEvent<PlotBand>>;\n public plotBandContextMenu: Observable<IChartEvent<PlotBand>>;\n public pointMove: Observable<IChartEvent<IPointMove>>;\n public annotationMove: Observable<IChartEvent<Annotation>>;\n public annotationClick: Observable<IChartEvent<Annotation>>;\n public annotationContextMenu: Observable<IChartEvent<Annotation>>;\n public chartClick: Observable<IChartEvent<BasePoint>>;\n public chartContextMenu: Observable<IChartEvent<BasePoint>>;\n\n private config$ = new BehaviorSubject<IChartConfig>(defaultChartConfig());\n private size$ = new BehaviorSubject<DOMRect>(null);\n private pointerMove$ = new Subject<PointerEvent>();\n private tooltips$ = new BehaviorSubject<\n Map<Series<BasePoint>, IDisplayTooltip>\n >(new Map());\n private plotBandEvent$ = new Subject<IChartEvent<PlotBand>>();\n private plotLineMove$ = new Subject<IChartEvent<PlotLine>>();\n private pointMove$ = new Subject<IChartEvent<IPointMove>>();\n private chartClick$ = new Subject<IChartEvent<BasePoint>>();\n private chartContextMenu$ = new Subject<IChartEvent<BasePoint>>();\n private annotationEvent$ = new Subject<IChartEvent<Annotation>>();\n private annotationMove$ = new Subject<IChartEvent<Annotation>>();\n\n private static _hiddenSeriesPostfix = 'hidden_series';\n\n constructor() {\n this.id = of((Date.now() + Math.random()).toString(36));\n\n this.config = this.config$.asObservable().pipe(\n withLatestFrom(this.id),\n map(this.setDefaults),\n map(this.setPreparationData),\n map(this.restoreLocalStorage),\n shareReplay({\n bufferSize: 1,\n refCount: true,\n })\n );\n\n this.size = this.size$.asObservable().pipe(filter(size => size != null));\n this.pointerMove = this.pointerMove$.asObservable();\n this.tooltips = this.tooltips$.asObservable();\n this.plotBandEvent = this.plotBandEvent$.asObservable();\n this.plotLineMove = this.plotLineMove$.asObservable();\n this.pointMove = this.pointMove$.asObservable();\n this.chartClick = this.chartClick$.asObservable();\n this.chartContextMenu = this.chartContextMenu$.asObservable();\n this.annotationClick = this.annotationEvent$\n .asObservable()\n .pipe(filter(_ => _?.event?.type === 'click'));\n this.annotationContextMenu = this.annotationEvent$\n .asObservable()\n .pipe(filter(_ => _?.event?.type === 'contextmenu'));\n this.annotationMove = this.annotationMove$.asObservable();\n\n this.plotBandClick = this.plotBandEvent$\n .asObservable()\n .pipe(filter(_ => _?.event?.type === 'click'));\n this.plotBandContextMenu = this.plotBandEvent$\n .asObservable()\n .pipe(filter(_ => _?.event?.type === 'contextmenu'));\n // this.zoomInstance = this.zoomInstance$.asObservable();\n // this.brushInstance = this.brushInstance$.asObservable();\n }\n\n public setConfig(config: IChartConfig) {\n this.clearTooltips();\n this.config$.next(config);\n }\n\n public setSize(size: DOMRect) {\n this.size$.next(size);\n }\n\n public setPointerMove(event: PointerEvent) {\n this.pointerMove$.next(event);\n }\n\n public setTooltip(tooltip: IDisplayTooltip) {\n const currentTooltips = this.tooltips$.value;\n if (!tooltip.point) {\n currentTooltips.delete(tooltip.series);\n } else {\n currentTooltips.set(tooltip.series, tooltip);\n }\n this.tooltips$.next(\n new Map<Series<BasePoint>, IDisplayTooltip>(currentTooltips)\n );\n }\n\n public clearTooltips() {\n this.tooltips$.next(new Map());\n }\n\n public async toggleVisibilitySeries(\n seriesIndex: Array<number | string>,\n visible?: boolean\n ) {\n if (seriesIndex?.length === 0) {\n return;\n }\n\n const currentConfig = await lastValueFrom(this.config.pipe(take(1)));\n\n seriesIndex.forEach(serieIndex => {\n const currentSerieIndex = currentConfig.series.findIndex(\n _ => _.id === serieIndex\n );\n\n if (currentSerieIndex === -1) {\n return;\n }\n currentConfig.series[currentSerieIndex].visible =\n visible !== undefined\n ? visible\n : !currentConfig.series[currentSerieIndex].visible;\n\n const seriesLinkCount = currentConfig.series.filter(\n _ =>\n _.yAxisIndex === currentConfig.series[currentSerieIndex].yAxisIndex &&\n _.visible === true\n ).length;\n currentConfig.yAxis[\n currentConfig.series[currentSerieIndex].yAxisIndex\n ].visible = seriesLinkCount !== 0;\n });\n\n try {\n this.saveCookie(currentConfig);\n } finally {\n this.config$.next(currentConfig);\n }\n }\n\n public emitMoveAnnotation(event: IChartEvent<Annotation>) {\n this.annotationMove$.next(event);\n }\n\n public emitAnnotation(event: IChartEvent<Annotation>) {\n this.annotationEvent$.next(event);\n }\n\n public emitPlotband(event: IChartEvent<PlotBand>) {\n this.plotBandEvent$.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 public emitChartClick(event: IChartEvent<BasePoint>) {\n this.chartClick$.next(event);\n }\n\n public emitChartContextMenu(event: IChartEvent<BasePoint>) {\n this.chartContextMenu$.next(event);\n }\n\n // public emitZoomInstance(event: ZoomService) {\n // this.zoomInstance$.next(event);\n // }\n //\n // public emitZoomInstance(event: ZoomService) {\n // this.zoomInstance$.next(event);\n // }\n\n private saveCookie(config: IChartConfig) {\n if (!config.name) return;\n const hiddenSeries = config.series?.filter(_ => !_.visible).map(_ => _.id);\n localStorage.setItem(\n `${config.name}_${ChartService._hiddenSeriesPostfix}`,\n JSON.stringify(hiddenSeries)\n );\n }\n\n private restoreLocalStorage(config: IChartConfig): IChartConfig {\n if (!config.name) return config;\n\n const hiddenSeries = localStorage.getItem(\n `${config.name}_${ChartService._hiddenSeriesPostfix}`\n );\n if (hiddenSeries) {\n const json = JSON.parse(hiddenSeries) as Array<string | number>;\n config.series = config.series.map((serie, index) => {\n serie.visible = !json.includes(serie.id);\n\n const currentSerieIndex = config.series.findIndex(\n _ => _.id === serie.id\n );\n\n if (currentSerieIndex !== -1) {\n const seriesLinkCount = config.series.filter(\n _ =>\n _.yAxisIndex === config.series[currentSerieIndex].yAxisIndex &&\n _.visible === true\n ).length;\n config.yAxis[config.series[currentSerieIndex].yAxisIndex].visible =\n seriesLinkCount !== 0;\n }\n\n return serie;\n });\n\n return config;\n }\n\n return config;\n }\n\n private setDefaults(data: [IChartConfig, string]): IChartConfig {\n let [config, id] = data;\n\n const defaultConfig = defaultConfig => {\n return source => {\n return Object.assign({}, defaultConfig, source);\n };\n };\n\n config = Object.assign({}, defaultChartConfig(), config);\n config.id = config.id ?? id;\n\n config.xAxis = config.xAxis.map(defaultConfig(defaultAxisConfig));\n config.yAxis = config.yAxis.map(defaultConfig(defaultAxisConfig));\n config.series = config.series.map(defaultConfig(defaultSeriesConfig()));\n\n config.series = config.series.map((_, index) => {\n return {\n ..._,\n data: _.data ?? [],\n id: _.id ?? index,\n };\n });\n\n const oppositeYCount = config.yAxis?.filter(_ => _.opposite);\n const oppositeXCount = config.xAxis?.filter(_ => _.opposite);\n\n const nonOppositeYCount = config.yAxis?.filter(_ => !_.opposite);\n const nonOppositeXCount = config.xAxis?.filter(_ => !_.opposite);\n\n if (nonOppositeXCount?.length > 1) {\n config.bounds.bottom = 0;\n }\n\n if (oppositeXCount?.length > 1) {\n config.bounds.top = 0;\n }\n\n if (nonOppositeYCount?.length > 1) {\n config.bounds.left = 0;\n }\n\n if (oppositeYCount?.length > 1) {\n config.bounds.right = 0;\n }\n\n config.tooltip = Object.assign(\n {},\n defaultChartConfig().tooltip,\n config.tooltip\n );\n\n config.zoom = Object.assign({}, defaultChartConfig().zoom, config.zoom);\n\n config.zoom.syncChannel = config.zoom?.syncChannel ?? id;\n\n return config;\n }\n\n private setPreparationData(config: IChartConfig): IChartConfig {\n if (config.inverted) {\n const xAxes = [...config.xAxis];\n const yAxes = [...config.yAxis];\n\n config.xAxis = yAxes;\n config.yAxis = xAxes;\n\n config.series = config.series?.map(serie => {\n const x = serie.xAxisIndex;\n const y = serie.yAxisIndex;\n serie.xAxisIndex = y;\n serie.yAxisIndex = x;\n return {\n ...serie,\n clipPointsDirection: ClipPointsDirection.y,\n data: serie?.data?.map(point => {\n return {\n ...point,\n x: point?.y,\n y: point?.x,\n x1: point?.y1,\n y1: point?.x1,\n };\n }),\n };\n });\n }\n\n if (config?.brush?.enable) {\n config.yAxis = config.yAxis.map(_ => ({ ..._, zoom: false }));\n config.xAxis = config.xAxis.map(_ => ({ ..._, zoom: false }));\n }\n\n return config;\n }\n}\n","export enum AxisOrientation {\n x,\n y\n}\n","export const getTextWidth = (\n inputText?: string | number | null,\n backupRatio = 0.5,\n fontSize = 10\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[], count = 10) {\n const [min, max] = extremes;\n const tickStep = (max - min) / count;\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';\nimport {ScaleType} from \"../../../model/enum/scale-type\";\n\nexport class AxisSizeBuilder implements IBuilder<Axis, number> {\n private titlePadding = 11;\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.options.tickFormat || settings.defaultFormatter();\n\n finalPadding += settings.options.title ? this.titlePadding : 0;\n\n const scale = settings.defaultScale()();\n scale.domain(settings.extremes)\n\n\n if(settings.options.scaleType.type === ScaleType.band) {\n scale.ticks = (ticks?: number) => {\n return scale.domain()\n }\n }\n const ticks = scale.ticks(20);\n\n const maxElementLengthIndex = maxIndex(\n ticks,\n (_) => formatter(_).length\n );\n\n finalPadding += getTextWidth(\n formatter(ticks[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 * as d3 from 'd3';\n\nimport { BasePoint } from '../../../model/base-point';\nimport { AxisOrientation } from '../../../model/enum/axis-orientation';\nimport { ScaleType } from '../../../model/enum/scale-type';\nimport { IBuilder } from '../../../model/i-builder';\nimport { Axis } from '../axis';\n\nexport class ExtremesBuilder implements IBuilder<Axis, number[] | string[]> {\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[] | string[] = [0, 1];\n\n build(settings: Axis): number[] | string[] {\n const options = settings.options;\n let extremes: number[] | string[] = [];\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 const accessor = this.extentAccessorMap.get(settings.orientation);\n\n if (settings.options.scaleType.type === ScaleType.band) {\n extremes = data.map(accessor);\n } else {\n extremes = data.length > 0 ? d3.extent(data, accessor) : [0, 1];\n }\n }\n\n if (hasMin) {\n extremes[0] = options?.min;\n }\n\n if (hasMax) {\n extremes[1] = options?.max;\n }\n if (\n typeof extremes[0] === 'number' &&\n typeof extremes[1] === 'number' &&\n extremes[0] === extremes[1]\n ) {\n extremes[0] = extremes[0] - 1;\n extremes[1] = extremes[1] + 1;\n }\n this.extremes = extremes;\n return this.extremes;\n }\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 { ScaleType } from '../../model/enum/scale-type';\n\nexport class Axis {\n private chartConfig: IChartConfig;\n private _orientation: AxisOrientation;\n private _index: number;\n private _extremes: number[] | string[] = [0, 0];\n private _selfSize: number;\n private _ticksValues: number[];\n private _options: AxisOptions;\n private _originDomain: [number, number] = [0, 0];\n\n private _scale: any;\n\n private defaultFormatters = new Map<ScaleType, any>()\n .set(ScaleType.linear, d3.format(',.5~r'))\n .set(ScaleType.time, d3.timeFormat('%d.%m.%Y'))\n .set(ScaleType.log, d3.format('~s'))\n .set(ScaleType.symlog, d3.format('~s'))\n .set(ScaleType.pow, d3.format('~s'))\n .set(ScaleType.sqrt, d3.format('~s'))\n .set(ScaleType.band, _ => {\n return _;\n });\n\n private defaultScales = new Map<ScaleType, any>()\n .set(ScaleType.linear, d3.scaleLinear)\n .set(ScaleType.log, d3.scaleLog)\n .set(ScaleType.symlog, d3.scaleSymlog)\n .set(ScaleType.pow, d3.scalePow)\n .set(ScaleType.sqrt, d3.scaleSqrt)\n .set(ScaleType.time, d3.scaleTime)\n .set(ScaleType.band, d3.scaleBand);\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 * 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\n axis.setOptions();\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} index\n * Index axis\n */\n private setIndex(index: number): 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 public setExtremes(): void {\n const builder = new ExtremesBuilder();\n this._extremes = builder.build(this);\n }\n\n public setOriginDomain(domain: [number, number]) {\n this._originDomain = domain;\n }\n\n public setScale(scale: any) {\n this._scale = scale;\n\n if (this.options.scaleType.type === ScaleType.band) {\n this._scale.ticks = () => {\n return this._scale.domain();\n };\n }\n }\n\n private setSelfSize(): void {\n this._selfSize = new AxisSizeBuilder().build(this);\n }\n\n private setTicksValues(): void {\n //this._ticksValues = generateTicks(this._extremes);\n }\n\n private setOptions(): void {\n const options =\n this.orientation === AxisOrientation.x\n ? this.chartConfig.xAxis[this.index]\n : this.chartConfig.yAxis[this.index];\n\n this._options = options;\n }\n\n get scale(): any {\n return this._scale;\n }\n\n get extremes(): Array<number | string> {\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(): number {\n return this._index;\n }\n\n get options(): AxisOptions {\n return this._options;\n }\n\n get originDomain(): [number, number] {\n return this._originDomain;\n }\n\n public defaultFormatter() {\n return this.defaultFormatters.get(this.options.scaleType.type);\n }\n\n public defaultScale() {\n return this.defaultScales.get(this.options.scaleType.type);\n }\n}\n","import {AxisOrientation} from './enum/axis-orientation';\nimport {ElementRef} from '@angular/core';\n\nexport type TransformStyle = {\n transition?: boolean;\n}\n\nexport type TargetAxis = {\n index: number,\n orientation: AxisOrientation\n}\n\nexport class ZoomMessage {\n eventType: 'start' | 'zoom' | 'end' | string;\n element?: ElementRef;\n axis: TargetAxis;\n domain?: [number, number];\n chartId: string;\n style?: TransformStyle;\n\n constructor(options?: {\n eventType: 'start' | 'zoom' | 'end' | string;\n element?: ElementRef;\n axis?: TargetAxis;\n domain?: [number, number]\n chartId: string;\n style?: TransformStyle;\n }) {\n this.eventType = options?.eventType;\n this.element = options?.element;\n this.axis = options?.axis;\n this.domain = options.domain;\n this.chartId = options?.chartId;\n this.style = options?.style;\n }\n}\n\nexport class BrushMessage {\n chartId: string;\n selection: [number, number];\n mode?: 'drag' | 'space' | 'handle' | 'center' | 'init';\n\n constructor(options?: {\n chartId: string;\n selection: [number, number];\n mode?: 'drag' | 'space' | 'handle' | 'center' | 'init';\n }) {\n this.chartId = options?.chartId;\n this.selection = options?.selection;\n this.mode = options?.mode;\n }\n}\n\nexport interface IBroadcastMessage<T> {\n channel: string;\n message: T;\n}\n","import {BehaviorSubject, combineLatest, filter, Observable, shareReplay, Subscription} from 'rxjs';\nimport {AxisOrientation} from '../model/enum/axis-orientation';\nimport {Injectable, OnDestroy} from '@angular/core';\nimport {IBroadcastMessage, ZoomMessage} from '../model/i-broadcast-message';\nimport {zoomIdentity} from 'd3';\nimport {BroadcastService} from './broadcast.service';\nimport {ChartService} from './chart.service';\nimport {IChartConfig} from \"../model/i-chart-config\";\nimport {ZoomType} from \"../model/enum/zoom-type\";\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ZoomService implements OnDestroy {\n zoomed: Observable<ZoomMessage>;\n\n private zoomed$ = new BehaviorSubject<ZoomMessage>(null);\n private broadcastChannel: string;\n private broadcastSub: Subscription;\n\n constructor(private _broadcast: BroadcastService,\n private _chart: ChartService) {\n this.zoomed = this.zoomed$.asObservable().pipe(shareReplay({\n bufferSize: 1,\n refCount: true\n }));\n }\n\n fireZoom(zoom: ZoomMessage) {\n this.zoomed$.next(zoom);\n }\n\n broadcastZoom(zoom: ZoomMessage) {\n if (this.broadcastChannel?.length) {\n this._broadcast.broadcastZoom({\n channel: this.broadcastChannel,\n message: zoom\n });\n }\n }\n\n setBroadcastChannel(channel: string) {\n if (this.broadcastSub) {\n this.broadcastSub?.unsubscribe();\n }\n this.broadcastChannel = channel;\n if (this.broadcastChannel?.length) {\n this.broadcastSub = combineLatest(\n [this._broadcast.subscribeToZoom(this.broadcastChannel), this._chart.config]\n )\n .pipe(filter(([zoom, config]: [IBroadcastMessage<ZoomMessage>, IChartConfig]) => {\n return zoom.message?.chartId !== config.id && (\n config.zoom.syncType === ZoomType.xy ||\n (zoom.message.axis.orientation === AxisOrientation.y && config.zoom.syncType === ZoomType.y) ||\n (zoom.message.axis.orientation === AxisOrientation.x && config.zoom.syncType === ZoomType.x)\n );\n }))\n .subscribe(([zoom, config]) => {\n this.fireZoom(zoom.message);\n });\n }\n }\n\n getD3Transform(targetDomain: [number, number],\n originalDomain: [number, number],\n scale,\n orientation: AxisOrientation,\n inverted: boolean) {\n const zoomScale = Math.abs(scale(originalDomain[1]) - scale(originalDomain[0])) / Math.abs(scale(targetDomain[1]) - scale(targetDomain[0]));\n let transform = zoomIdentity.scale(zoomScale);\n if (orientation === AxisOrientation.x) {\n if (!!inverted) {\n transform = transform.translate(-scale(Math.max(...targetDomain)), 0);\n } else {\n transform = transform.translate(-scale(Math.min(...targetDomain)), 0);\n }\n }\n\n if (orientation === AxisOrientation.y) {\n if (!!inverted) {\n transform = transform.translate(0, -scale(Math.min(...targetDomain)));\n } else {\n transform = transform.translate(0, -scale(Math.max(...targetDomain)));\n }\n }\n return transform;\n }\n\n ngOnDestroy() {\n this.broadcastSub?.unsubscribe();\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as d3 from 'd3';\nimport { ZoomTransform } from 'd3';\nimport {\n combineLatest,\n map,\n Observable,\n shareReplay,\n take,\n withLatestFrom,\n} from 'rxjs';\n\nimport { Axis } from '../core/axis/axis';\nimport { AxisOrientation } from '../model/enum/axis-orientation';\nimport { ScaleType } from '../model/enum/scale-type';\nimport { ZoomType } from '../model/enum/zoom-type';\nimport { ZoomMessage } from '../model/i-broadcast-message';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { IScalesMap } from '../model/i-scales-map';\nimport { ChartService } from './chart.service';\nimport { ZoomService } from './zoom.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ScaleService {\n public scales: Observable<IScalesMap>;\n\n private transformCacheX = new Map<number, ZoomTransform>();\n private transformCacheY = new Map<number, ZoomTransform>();\n\n private scaleMapping = new Map<ScaleType, any>()\n .set(ScaleType.linear, d3.scaleLinear)\n .set(ScaleType.time, d3.scaleTime)\n .set(ScaleType.log, d3.scaleLog)\n .set(ScaleType.symlog, d3.scaleSymlog)\n .set(ScaleType.pow, d3.scalePow)\n .set(ScaleType.sqrt, d3.scaleSqrt)\n .set(ScaleType.band, d3.scaleBand);\n\n constructor(\n private chartService: ChartService,\n private zoomService: ZoomService\n ) {\n this.scales = combineLatest([\n this.chartService.size,\n this.chartService.config,\n this.zoomService.zoomed,\n ]).pipe(\n map((data: [DOMRectReadOnly, IChartConfig, ZoomMessage]) => {\n const [size, config, zoom] = data;\n\n const xAxisMap = new Map<number, Axis>();\n const yAxisMap = new Map<number, Axis>();\n\n config.yAxis.map((_, index) => {\n yAxisMap.set(\n index,\n Axis.createAxis(AxisOrientation.y, config, index)\n );\n });\n\n config.xAxis.map((_, index) => {\n xAxisMap.set(\n index,\n Axis.createAxis(AxisOrientation.x, config, index)\n );\n });\n\n // Generate x scales\n const left = Array.from(yAxisMap.values())\n .filter(_ => _.options?.visible && _.options?.opposite)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const right = Array.from(yAxisMap.values())\n .filter(_ => _.options?.visible && _.options?.opposite !== true)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const finalWidth = (size.width || 0) - left - right;\n\n xAxisMap.forEach(axis => {\n let domain = axis.extremes;\n\n if (axis?.options.inverted) {\n domain = [...axis.extremes].reverse();\n }\n\n const scale = this.scaleMapping\n .get(axis.options.scaleType.type)()\n .domain(domain)\n .range([0, finalWidth - config.bounds.right]);\n\n if (axis.options.niceTicks) {\n scale.nice();\n }\n\n if (axis.options.scaleType.type === ScaleType.log) {\n scale.base(axis.options.scaleType.base);\n }\n\n if (axis.options.scaleType.type === ScaleType.band) {\n scale.paddingInner(0.1);\n scale.paddingOuter(0.1);\n scale.align(0.1);\n }\n\n axis.setScale(scale);\n axis.setOriginDomain(scale.domain());\n\n const hasCache = this.transformCacheX.has(axis.index);\n const shouldRestore =\n zoom?.axis?.orientation !== AxisOrientation.x ||\n zoom.axis?.index !== axis.index;\n\n if (hasCache && shouldRestore) {\n const restoredTransform = this.transformCacheX.get(axis.index);\n axis.setScale(restoredTransform.rescaleX(scale));\n }\n });\n\n if (zoom && zoom.domain) {\n if (zoom.axis?.orientation === AxisOrientation.x) {\n if (xAxisMap.has(zoom.axis.index)) {\n const x = xAxisMap.get(zoom.axis.index);\n const transform = this.zoomService.getD3Transform(\n zoom.domain,\n x.originDomain,\n x.scale,\n AxisOrientation.x,\n x.options.inverted\n );\n const rescaled = transform.rescaleX(x.scale.copy());\n x.setScale(rescaled);\n this.transformCacheX.set(x.index, transform);\n }\n }\n }\n\n // Generate y axis\n\n const top = Array.from(xAxisMap.values())\n .filter(_ => _.options?.visible && _.options?.opposite)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const bottom = Array.from(xAxisMap.values())\n .filter(_ => _.options?.visible && _.options?.opposite !== true)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const finalHeight =\n (size.height || 0) -\n top -\n bottom -\n config?.bounds?.top -\n config.bounds?.bottom;\n\n yAxisMap.forEach(axis => {\n let domain = axis.extremes;\n\n if (axis.orientation === AxisOrientation.y) {\n domain = [...axis.extremes].reverse();\n }\n\n if (axis?.options.inverted) {\n domain = domain.reverse();\n }\n\n const scale = this.scaleMapping\n .get(axis.options.scaleType.type)()\n .domain(domain)\n .range([config.bounds.top, finalHeight]);\n\n if (axis.options.niceTicks) {\n scale.nice();\n }\n\n if (axis.options.scaleType.type === ScaleType.log) {\n scale.base(axis.options.scaleType.base);\n }\n\n if (axis.options.scaleType.type === ScaleType.band) {\n scale.paddingInner(0.1);\n scale.paddingOuter(0.1);\n scale.align(0.1);\n }\n\n axis.setScale(scale);\n axis.setOriginDomain(scale.domain());\n\n const hasCache = this.transformCacheY.has(axis.index);\n\n const shouldRestore =\n zoom?.axis?.orientation !== AxisOrientation.y ||\n zoom.axis?.index !== axis.index;\n\n if (hasCache && shouldRestore) {\n const restoredTransform = this.transformCacheY.get(axis.index);\n axis.setScale(restoredTransform.rescaleY(scale));\n }\n });\n\n if (zoom && zoom.domain) {\n if (zoom.axis?.orientation === AxisOrientation.y) {\n if (yAxisMap.has(zoom.axis.index)) {\n const y = yAxisMap.get(zoom.axis.index);\n const transform = this.zoomService.getD3Transform(\n zoom.domain,\n y.originDomain,\n y.scale,\n AxisOrientation.y,\n y.options.inverted\n );\n const rescaled = transform.rescaleY(y.scale.copy());\n y.setScale(rescaled);\n this.transformCacheY.set(y.index, transform);\n }\n }\n }\n return {\n x: xAxisMap,\n y: yAxisMap,\n };\n }),\n shareReplay({\n bufferSize: 1,\n refCount: true,\n })\n );\n }\n\n resetZoom() {\n this.chartService.config\n .pipe(take(1), withLatestFrom(this.scales))\n .subscribe(([config, scales]: [IChartConfig, IScalesMap]) => {\n config.xAxis.forEach((axis, index) => {\n const scale = scales?.x?.get(index)?.originDomain;\n if (scale) {\n const msg = new ZoomMessage({\n eventType: 'end',\n axis: {\n index,\n orientation: AxisOrientation.x,\n },\n domain: scale,\n chartId: config.id,\n });\n this.zoomService.fireZoom(msg);\n if (\n config.zoom.syncChannel &&\n config.zoom.syncType === ZoomType.x\n ) {\n this.zoomService.broadcastZoom(msg);\n }\n }\n });\n config.yAxis.forEach((axis, index) => {\n const scale = scales?.y?.get(index)?.originDomain;\n if (scale) {\n const msg = new ZoomMessage({\n eventType: 'end',\n axis: {\n index,\n orientation: AxisOrientation.y,\n },\n domain: scale,\n chartId: config.id,\n });\n this.zoomService.fireZoom(msg);\n if (\n config.zoom.syncChannel &&\n config.zoom.syncType === ZoomType.y\n ) {\n this.zoomService.broadcastZoom(msg);\n }\n }\n });\n });\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n NgZone,\n OnInit,\n} from '@angular/core';\n\nimport { BasePoint } from '../model/base-point';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { Series } from '../model/series';\nimport { ChartService } from '../service/chart.service';\nimport { ScaleService } from '../service/scale.service';\nimport { ZoomService } from '../service/zoom.service';\n\n@Component({\n template: '',\n standalone:true,\n\n})\nexport class SeriesBaseComponent<T extends BasePoint> implements OnInit {\n @Input()\n set config(config: IChartConfig) {\n this._config = config;\n }\n\n get config() {\n return this._config;\n }\n\n @Input()\n set series(series: Series<T>) {\n this._series = series;\n }\n\n get series() {\n return this._series;\n }\n\n protected _series: Series<T>;\n protected _config: IChartConfig;\n\n constructor(\n protected svc: ChartService,\n protected cdr: ChangeDetectorRef,\n protected scaleService: ScaleService,\n protected zoomService: ZoomService,\n protected element: ElementRef,\n protected zone?: NgZone\n ) {}\n\n ngOnInit(): void {}\n}\n","export enum BrushType {\n x,\n y,\n xy,\n}\n","export enum Align {\n left,\n right,\n center,\n auto,\n fitWidth,\n minWidth,\n outerLeft,\n outerRight,\n outerAuto\n}\n","export enum VerticalAlign {\n top,\n bottom,\n center,\n auto,\n innerTop,\n innerBottom,\n innerAuto\n}\n","import { IRect } from '../../model/i-rect';\nimport { Align } from '../../model/enum/align.enum';\nimport { VerticalAlign } from '../../model/enum/vertical-align.enum';\n\nexport class PositionUtil {\n public static getPosition(\n containerPosition: IRect,\n elementPosition: IRect,\n align: Align,\n verticalAlign: VerticalAlign,\n margin = 0,\n verticalMargin = 0,\n transformedParentRect: IRect = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n }\n ): IRect {\n const rect: IRect = {};\n const elementWidth = elementPosition.right - elementPosition.left;\n const elementHeight = elementPosition.bottom - elementPosition.top;\n const containerWidth = containerPosition.right - containerPosition.left;\n const containerHeight = containerPosition.bottom - containerPosition.top;\n if (align === Align.auto) {\n align = Align.left;\n if (window.innerWidth < containerPosition.left + elementWidth) {\n align = Align.right;\n }\n }\n if (align === Align.left) {\n rect.left = containerPosition.left + margin;\n }\n if (align === Align.right) {\n rect.left = containerPosition.right - elementWidth - margin;\n }\n if (align === Align.center) {\n rect.left =\n (containerPosition.left + containerPosition.right) / 2 -\n elementWidth / 2;\n }\n if (align === Align.outerAuto) {\n align = Align.outerRight;\n if (window.innerWidth < containerPosition.right + elementWidth) {\n align = Align.outerLeft;\n }\n }\n if (align === Align.outerLeft) {\n rect.left = containerPosition.left - elementWidth + margin;\n }\n if (align === Align.outerRight) {\n rect.left = containerPosition.right - margin;\n }\n\n if (align === Align.fitWidth) {\n rect.left = containerPosition.left + margin;\n rect.right = window.innerWidth - containerPosition.right + margin;\n }\n\n if (align === Align.minWidth) {\n rect.left = containerPosition.left + margin;\n rect.minWidth = containerWidth;\n }\n\n if (verticalAlign === VerticalAlign.auto) {\n if (\n containerPosition.bottom + elementHeight > window.innerHeight &&\n containerPosition.bottom >= window.innerHeight / 2\n ) {\n verticalAlign = VerticalAlign.top;\n } else {\n verticalAlign = VerticalAlign.bottom;\n }\n }\n if (verticalAlign === VerticalAlign.innerAuto) {\n if (\n containerPosition.bottom + elementHeight > window.innerHeight &&\n containerPosition.bottom >= window.innerHeight / 2\n ) {\n verticalAlign = VerticalAlign.innerTop;\n } else {\n verticalAlign = VerticalAlign.innerBottom;\n }\n }\n if (verticalAlign === VerticalAlign.top) {\n rect.top = containerPosition.top - elementHeight - verticalMargin;\n }\n if (verticalAlign === VerticalAlign.bottom) {\n rect.top = containerPosition.bottom + verticalMargin;\n }\n if (verticalAlign === VerticalAlign.innerTop) {\n rect.top = containerPosition.bottom - elementHeight - verticalMargin;\n }\n if (verticalAlign === VerticalAlign.innerBottom) {\n rect.top = containerPosition.top + verticalMargin;\n }\n if (verticalAlign === VerticalAlign.center) {\n rect.top =\n (containerPosition.top + containerPosition.bottom) / 2 -\n elementHeight / 2;\n }\n\n if (rect.left + elementWidth > window.innerWidth) {\n rect.left = window.innerWidth - elementWidth;\n }\n if (rect.left < 0) {\n rect.left = 0;\n }\n if (rect.top + elementHeight > window.innerHeight || rect.bottom < 0) {\n rect.bottom = 0;\n }\n if (rect.top < 0) {\n rect.top = 0;\n }\n if (\n verticalAlign === VerticalAlign.bottom ||\n verticalAlign === VerticalAlign.center ||\n verticalAlign === VerticalAlign.innerBottom\n ) {\n rect.maxHeight = window.innerHeight - rect.top;\n }\n if (\n verticalAlign === VerticalAlign.top ||\n verticalAlign === VerticalAlign.innerTop\n ) {\n rect.maxHeight = containerPosition.top;\n }\n if (!isNaN(rect.left)) {\n rect.left = rect.left - transformedParentRect.left;\n }\n if (!isNaN(rect.right)) {\n rect.right = rect.right - transformedParentRect.left;\n }\n if (!isNaN(rect.top)) {\n rect.top = rect.top - transformedParentRect.top;\n }\n if (!isNaN(rect.bottom)) {\n rect.bottom = rect.bottom\n ? rect.bottom - transformedParentRect.bottom\n : rect.bottom;\n }\n return rect;\n }\n\n public static setElementPosition(element: HTMLElement, rect: IRect): void {\n element.style.left = rect.left != null ? `${rect.left}px` : '';\n element.style.right = rect.right != null ? `${rect.right}px` : '';\n element.style.top = rect.top != null ? `${rect.top}px` : '';\n element.style.bottom = rect.bottom != null ? `${rect.bottom}px` : '';\n element.style.maxHeight =\n rect.maxHeight != null ? `${rect.maxHeight}px` : '';\n element.style.minWidth = rect.minWidth != null ? `${rect.minWidth}px` : '';\n }\n\n public static getMaxHeight(position: IRect): number | null {\n let maxHeight = null;\n maxHeight = 1;\n return maxHeight;\n }\n\n public static getMaxWidth(position: IRect): number | null {\n let maxWidth = null;\n maxWidth = 1;\n return maxWidth;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n NgZone,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport * as d3 from 'd3';\nimport { filter, map, Observable, tap } from 'rxjs';\n\nimport { IChartConfig } from '../../model/i-chart-config';\nimport { IDisplayTooltip } from '../../model/i-display-tooltip';\nimport { Series } from '../../model/series';\nimport { ChartService } from '../../service/chart.service';\nimport { ZoomService } from '../../service/zoom.service';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { PositionUtil } from '../../core/utils/position-util';\nimport { Align } from '../../model/enum/align.enum';\nimport { VerticalAlign } from '../../model/enum/vertical-align.enum';\n\n@Component({\n selector: 'teta-tooltip',\n templateUrl: './tooltip.component.html',\n standalone: true,\n styleUrls: ['./tooltip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n NgTemplateOutlet\n ]\n})\nexport class TooltipComponent implements OnInit {\n @Input() size: DOMRect;\n @Input() config: IChartConfig;\n\n @ViewChild('tooltip', { static: false, read: ElementRef })\n tooltip: ElementRef;\n\n position: Observable<{\n left?: number;\n top?: number;\n bottom?: number;\n right?: number;\n }>;\n\n displayTooltips: Observable<SafeHtml>;\n display: Observable<number>;\n tooltips: Observable<IDisplayTooltip[]>;\n\n constructor(\n private svc: ChartService,\n private cdr: ChangeDetectorRef,\n private zoomService: ZoomService,\n private sanitizer: DomSanitizer,\n private _zone: NgZone,\n private _elementRef: ElementRef\n ) {\n this.tooltips = this.svc.tooltips.pipe(map(_ => [..._.values()]));\n }\n getImplicit(t){\n return {$implicit: t} as any\n }\n ngOnInit(): void {\n this.display = this.svc.pointerMove.pipe(\n map((event: PointerEvent) => {\n return event.type === 'mousemove' ? 1 : 0;\n }),\n tap(() => {\n setTimeout(() => {\n this.cdr.detectChanges();\n });\n })\n );\n\n this.position = this.svc.pointerMove.pipe(\n filter(event => !!event),\n map(_ => {\n return this.getPosition(_);\n }),\n tap(() => this.cdr.detectChanges())\n );\n\n const transformHtml = (html): SafeHtml => {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n };\n\n const defaultFormatter = (tooltips: IDisplayTooltip[]): SafeHtml => {\n let html = '';\n const format = d3.timeFormat('%d.%m.%Y');\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'>\n x: ${\n (_.point.x as any) instanceof Date\n ? format(_.point.x as any)\n : _.point.x?.toFixed(2)\n }\n y: ${\n (_.point.y as any) instanceof Date\n ? format(_.point.y as any)\n : _.point.y?.toFixed(2)\n }\n </span>\n </span></div>`;\n });\n\n return transformHtml(html);\n };\n\n const formatter = this.config?.tooltip?.format;\n\n this.displayTooltips = this.svc.tooltips.pipe(\n map((tooltips: Map<Series<any>, IDisplayTooltip>) => {\n const tooltipList = [...tooltips.values()];\n if (tooltipList?.length < 1) {\n return '';\n }\n const formatted = formatter\n ? transformHtml(formatter(tooltipList))\n : defaultFormatter(tooltipList);\n return formatted;\n })\n );\n }\n\n private getPosition(event: PointerEvent) {\n if (!this.tooltip) {\n return null;\n }\n return PositionUtil.getPosition(\n {\n top: event.pageY,\n bottom: event.pageY,\n left: event.pageX,\n right: event.pageX,\n },\n this.tooltip?.nativeElement?.getBoundingClientRect(),\n Align.auto,\n VerticalAlign.top,\n 12\n );\n }\n\n format(input: number | Date): string {\n if (input instanceof Date) {\n const format = d3.timeFormat('%d.%m.%Y');\n return format(input);\n }\n\n const format = d3.format(',.5~r');\n return format(input);\n }\n}\n","@if ({p: position | async}; as data) {\n @if ((tooltips | async); as t) {\n @if (t.length > 0) {\n <div class=\"chart-tooltip color-text-90 bg-global-bgcard shadow-2\"\n #tooltip\n [style.position]=\"'fixed'\"\n [style.opacity]=\"display | async\"\n [hidden]=\"!data.p\"\n style=\"pointer-events: none; min-width: 200px;\"\n [style.left.px]=\"data.p?.left\"\n [style.top.px]=\"data.p?.top\"\n [style.bottom.px]=\"data.p?.bottom\"\n [style.right.px]=\"data.p?.right\">\n @if (config.tooltip?.template) {\n <ng-container *ngTemplateOutlet=\"config.tooltip.template; context: getImplicit(t)\"></ng-container>\n }\n @if (config.tooltip?.format) {\n <div [innerHTML]=\"displayTooltips | async\"></div>\n } @else {\n @if (!config.tooltip?.template) {\n <div class=\"padding-2 border-radius-1\">\n @for (tooltip of t; track tooltip) {\n <div class=\"display-flex align-center\">\n <span class=\"display-block margin-right-1\" [style.width.px]=\"10\" [style.height.px]=\"2\"\n [style.background-color]=\"tooltip.series?.color\">\n </span>\n <span class=\"font-title-3\">\n {{ tooltip.series?.name }}\n <span class=\"font-body-3\">\n x: {{ format(tooltip.point?.x) }}\n y: {{ format(tooltip.point?.y) }}\n </span>\n </span>\n </div>\n }\n </div>\n }\n }\n </div>\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input, OnChanges, OnDestroy,\n OnInit, SimpleChange, SimpleChanges,\n} from '@angular/core';\nimport {Axis} from '../../core/axis/axis';\nimport {BehaviorSubject, combineLatest, map, Observable, Subject, withLatestFrom} from 'rxjs';\nimport {ScaleService} from '../../service/scale.service';\nimport {getTextWidth} from '../../core/utils/get-text-width';\nimport * as d3 from 'd3';\nimport {ChartService} from '../../service/chart.service';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: '[teta-x-axis]',\n templateUrl: './x-axis.component.html',\n styleUrls: ['./x-axis.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n ]\n})\nexport class XAxisComponent implements OnInit, OnChanges, OnDestroy {\n x: Observable<any>;\n ticks: Observable<any[]>;\n\n @Input() axis: Axis;\n @Input() size: DOMRect;\n\n private update$ = new BehaviorSubject<void>(null);\n private _alive = true;\n\n constructor(private scaleService: ScaleService, private _svc: ChartService) {\n this.x = this.scaleService.scales.pipe(map((_) => {\n return _.x.get(this.axis.index)?.scale;\n }));\n\n\n this.ticks = combineLatest([this.x, this.update$]).pipe(\n withLatestFrom(this._svc.size),\n map((_: [[any, void], DOMRect]) => {\n const [[x], size] = _;\n\n const tickSize = x.ticks().map((_) => getTextWidth(this.axis.options.tickFormat ? this.axis.options.tickFormat(_) : this.axis.defaultFormatter()(_), 0.45, 11));\n return x.ticks(size.width / parseInt(d3.max(tickSize), 10) / 5);\n })\n );\n }\n\n getLabelTransform() {\n return `translate(${\n this.size.width / 2\n }, ${this.axis.options.opposite ? -32 : 32})`;\n }\n\n ngOnInit(): void {\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.hasOwnProperty('axis')) {\n this.update$.next();\n }\n }\n\n}\n","@if ({x: x | async, ticks: ticks | async}; as data) {\n @for (tick of data.ticks; track tick) {\n <svg:g text-anchor=\"middle\" [attr.transform]=\"'translate('+ data.x(tick) +', 0)'\">\n <text fill=\"var(--color-text-70)\" [attr.dy]=\"axis.options.opposite ? '-0.71em' : '0.71em'\"\n [attr.y]=\"axis.options.opposite ? 0 : 9\">\n {{ this.axis.options.tickFormat ? this.axis.options.tickFormat(tick) : this.axis.defaultFormatter()(tick) }}\n </text>\n <line stroke=\"var(--color-text-30)\" [attr.y2]=\"axis.options.opposite ? -6 : 6\"></line>\n </svg:g>\n }\n <svg:g class=\"label-axis font-caption\" [attr.transform]=\"getLabelTransform()\">\n <text fill=\"var(--color-text-70)\" text-anchor=\"middle\" dominant-baseline=\"middle\">\n {{ axis.options.title }}\n </text>\n </svg:g>\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n NgZone,\n OnDestroy,\n} from '@angular/core';\nimport { ZoomService } from '../service/zoom.service';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { Axis } from '../core/axis/axis';\nimport * as d3 from 'd3';\nimport { D3ZoomEvent, ZoomBehavior, zoomIdentity } from 'd3';\nimport { ZoomType } from '../model/enum/zoom-type';\nimport { AxisOrientation } from '../model/enum/axis-orientation';\nimport { ZoomMessage } from '../model/i-broadcast-message';\nimport { takeWhile } from 'rxjs';\nimport { ChartService } from '../service/chart.service';\nimport { ZoomBehaviorType } from '../model/enum/zoom-behavior-type';\nimport { ScaleType } from '../model/enum/scale-type';\n\n@Directive({\n selector: '[tetaZoomable]',\n standalone:true\n})\nexport class ZoomableDirective implements OnDestroy, AfterViewInit {\n @Input() config: IChartConfig;\n @Input() axis: Axis;\n @Input() size: DOMRect;\n\n @HostBinding('class.zoomable') private zoomable = false;\n @HostBinding('class.crosshair') private crosshair = false;\n\n private _element: d3.Selection<SVGElement, any, any, any>;\n private zoom: ZoomBehavior<any, any>;\n private alive = true;\n\n @HostListener('mouseenter')\n mouseenter() {\n this.zoom?.on('start zoom end', this.zoomed);\n this._element?.call(this.zoom).on('dblclick.zoom', null);\n // Run wheel event listener\n if (this.config?.zoom?.zoomBehavior === ZoomBehaviorType.wheel) {\n this.runWheelTranslate();\n }\n }\n\n @HostListener('mouseleave')\n mouseleave() {\n this.zoom?.on('start zoom end', null);\n this._element?.on('wheel', null);\n }\n\n private currentTransform = zoomIdentity;\n\n constructor(\n private elementRef: ElementRef,\n private zoomService: ZoomService,\n private chartService: ChartService,\n private zone: NgZone\n ) {}\n\n ngOnInit() {\n if (this.axis?.options?.zoom || this.config?.zoom?.enable) {\n this.zoomable =\n this.config?.zoom?.zoomBehavior === ZoomBehaviorType.move &&\n !this.config?.tooltip?.showCrosshair;\n this.crosshair = this.config?.tooltip?.showCrosshair;\n }\n }\n\n ngAfterViewInit() {\n this.initZoomListeners();\n this.initZoomSync();\n }\n\n ngOnDestroy(): void {\n this.zoom?.on('start zoom end', null);\n this._element?.on('wheel', null);\n this.alive = false;\n }\n\n private initZoomSync() {\n this.zoomService.zoomed\n .pipe(takeWhile(() => this.alive))\n .subscribe((zoomed: ZoomMessage) => {\n if (\n this._element &&\n this.elementRef !== zoomed?.element &&\n zoomed?.axis?.index === this.axis.index &&\n zoomed?.axis?.orientation === this.axis.orientation\n ) {\n const scale = this.axis.scale.copy().domain(this.axis.originDomain);\n let transform;\n if (zoomed.domain === null) {\n transform = zoomIdentity;\n } else {\n transform = this.zoomService.getD3Transform(\n zoomed.domain,\n this.axis.originDomain,\n scale,\n this.axis.orientation,\n this.axis.options.inverted\n );\n }\n this._element.call(this.zoom.transform, transform);\n this.currentTransform = transform;\n }\n });\n }\n\n private initZoomListeners() {\n const enable =\n (this.axis?.options?.zoom && this.axis?.options.visible !== false) ||\n this.config?.zoom?.enable;\n\n if (!enable) {\n return;\n }\n\n this._element = d3.select(this.elementRef.nativeElement);\n this.zoom = d3.zoom().extent([\n [0, 0],\n [this.size.width, this.size.height],\n ]);\n\n const min =\n this.config?.zoom?.minTranslate != null\n ? this.axis.scale(this.config?.zoom?.minTranslate)\n : -Infinity;\n const max =\n this.config?.zoom?.maxTranslate != null\n ? this.axis.scale(this.config?.zoom?.maxTranslate)\n : Infinity;\n if (\n this.axis.orientation === AxisOrientation.x &&\n this.config.zoom.type === ZoomType.x\n ) {\n this.zoom.translateExtent([\n [Math.min(min, max), -Infinity],\n [Math.max(min, max), Infinity],\n ]);\n }\n\n if (\n this.axis.orientation === AxisOrientation.y &&\n this.config.zoom.type === ZoomType.y\n ) {\n this.zoom.translateExtent([\n [-Infinity, Math.min(min, max)],\n [Infinity, Math.max(min, max)],\n ]);\n }\n\n if (this.config.zoom?.wheelDelta) {\n this.zoom.wheelDelta(this.config.zoom?.wheelDelta);\n }\n\n if (this.config?.zoom?.wheelFilter) {\n this.zoom.filter(this.config?.zoom?.wheelFilter);\n }\n\n if (this.axis.options.scaleType.type !== ScaleType.band) {\n const extremes = this.axis.extremes as number[];\n const maxZoom = this.config.zoom?.max\n ? (extremes[1] - extremes[0]) / this.config.zoom?.max\n : this.config.zoom?.limitZoomByData\n ? 1\n : 0;\n\n const minZoom = this.config.zoom?.min\n ? (extremes[1] - extremes[0]) / this.config.zoom?.min\n : Infinity;\n\n this.zoom.scaleExtent([maxZoom, minZoom]);\n }\n\n if (this.config?.zoom?.zoomBehavior === ZoomBehaviorType.wheel) {\n this.runWheelTranslate();\n }\n }\n\n zoomed = (event: D3ZoomEvent<any, any>) => {\n if (\n event.sourceEvent &&\n (this.elementRef.nativeElement === event.sourceEvent.target ||\n this.elementRef.nativeElement.contains(event.sourceEvent.target))\n ) {\n if (Object.keys(event.sourceEvent).length !== 0) {\n const origin = this.axis.scale.copy().domain(this.axis.originDomain);\n if (this.axis.options.scaleType.type === ScaleType.band) {\n return;\n }\n\n const domain =\n this.axis.orientation === AxisOrientation.y\n ? event.transform.rescaleY(origin).domain()\n : event.transform.rescaleX(origin).domain();\n if (\n domain[0] === null ||\n domain[0] === undefined ||\n domain[1] === null ||\n domain[1] === undefined ||\n Math.abs(domain[0] - domain[1]) < 0.000001\n ) {\n return;\n }\n const message = new ZoomMessage({\n eventType: event.type,\n axis: {\n index: this.axis.index,\n orientation: this.axis.orientation,\n },\n element: this.elementRef,\n domain,\n chartId: this.config.id,\n });\n this.zoomService.fireZoom(message);\n this.zoomService.broadcastZoom(message);\n }\n this.currentTransform = event.transform;\n }\n };\n\n private runWheelTranslate() {\n let type: 'start' | 'zoom' | 'end' = 'start';\n let wheeling;\n\n // For touch events\n this.zoom.on('start zoom end', this.zoomed);\n this._element?.call(this.zoom);\n\n this.zoom\n .filter(event => {\n return (\n (event.ctrlKey && event.type === 'wheel') ||\n Boolean(window.TouchEvent && event.type !== 'wheel')\n );\n })\n .wheelDelta(event => {\n const delta =\n this.config?.zoom.type === ZoomType.x ? -event.deltaX : -event.deltaY;\n return delta * 0.002;\n });\n\n const emit = (type: string, event: WheelEvent) => {\n const origin = this.axis.scale.copy().domain(this.axis.originDomain);\n let transform = zoomIdentity;\n const delta =\n type === 'end'\n ? 0\n : this.axis.orientation === AxisOrientation.y\n ? event.deltaY\n : event.deltaX;\n\n if (this.axis.orientation === AxisOrientation.y) {\n transform = transform.translate(0, this.currentTransform.y - delta / 2);\n }\n\n if (this.axis.orientation === AxisOrientation.x) {\n transform = transform.translate(this.currentTransform.x - delta / 2, 0);\n }\n\n transform = transform.scale(this.currentTransform.k);\n\n let domain =\n this.axis.orientation === AxisOrientation.y\n ? transform.rescaleY(origin).domain()\n : transform.rescaleX(origin).domain();\n\n const extent = this.axis.options?.inverted\n ? domain\n : [...domain].reverse();\n\n if (extent[0] <= this.config.zoom?.minTranslate) {\n return;\n }\n\n if (extent[1] >= this.config.zoom?.maxTranslate) {\n return;\n }\n\n const message = new ZoomMessage({\n eventType: type,\n element: this.elementRef,\n axis: {\n index: this.axis.index,\n orientation: this.axis.orientation,\n },\n domain,\n chartId: this.config.id,\n });\n\n this._element?.call(this.zoom.transform, transform);\n this.zoomService.fireZoom(message);\n this.zoomService.broadcastZoom(message);\n this.currentTransform = transform;\n };\n\n this._element.on('wheel', (event: WheelEvent) => {\n event.preventDefault();\n\n if (event.ctrlKey) {\n return;\n }\n this.zone.runOutsideAngular(() => {\n clearTimeout(wheeling);\n emit(type, event);\n type = 'zoom';\n wheeling = setTimeout(() => {\n emit('end', event);\n type = 'start';\n }, 50);\n });\n });\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport { Axis } from '../../core/axis/axis';\n\nimport {ScaleService} from \"../../service/scale.service\";\nimport {map, Observable} from \"rxjs\";\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: '[teta-y-axis]',\n templateUrl: './y-axis.component.html',\n standalone: true,\n styleUrls: ['./y-axis.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n ]\n})\nexport class YAxisComponent implements OnInit, AfterViewInit {\n\n y: Observable<any>;\n\n @Input() axis: Axis;\n @Input() size: DOMRect;\n\n private _alive = true;\n\n constructor(private scaleService: ScaleService) {\n this.y = this.scaleService.scales.pipe(map((_) => {\n return _.y.get(this.axis.index)?.scale\n }))\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n ngAfterViewInit() {\n }\n\n getLabelTransform() {\n return `translate(${\n this.axis.options.opposite\n ? this.axis.selfSize\n : -this.axis.selfSize\n }, ${this.size.height / 2}) rotate(-90)`;\n }\n\n}\n","@if (y | async; as scale) {\n @for (tick of scale.ticks(); track tick) {\n <svg:g [attr.text-anchor]=\"axis.options.opposite ? 'start' : 'end'\"\n [attr.transform]=\"'translate(0, '+ scale(tick) +')'\">\n <text fill=\"var(--color-text-70)\" dy=\"0.32em\"\n [attr.x]=\"axis.options.opposite ? 10 : -9\">\n {{ this.axis.options.tickFormat ? this.axis.options.tickFormat(tick) : this.axis.defaultFormatter()(tick) }}\n </text>\n <line stroke=\"var(--color-text-30)\" [attr.x2]=\"axis.options.opposite ? 6 : -6\"></line>\n </svg:g>\n }\n <svg:g class=\"label-axis font-caption\" [attr.transform]=\"getLabelTransform()\">\n <text [attr.dy]=\"axis.options.opposite ? '-4px' : '4px'\" text-anchor=\"middle\"\n [attr.dominant-baseline]=\"axis.options.opposite ? 'auto' : 'hanging'\">\n {{ axis.options.title }}\n </text>\n </svg:g>\n}\n","import { SvgAttributes } from './svg-attributes';\n\nexport class PlotBand {\n id?: number | string;\n name?: 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 order = 0;\n style?: {\n plotBand?: SvgAttributes;\n grabbers?: SvgAttributes;\n };\n\n constructor(options?: {\n id?: number | string;\n name?: 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 order?: number;\n style?: {\n plotBand?: SvgAttributes;\n grabbers?: SvgAttributes;\n };\n }) {\n this.id = options?.id;\n this.name = options?.name;\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.order = options?.order ?? 0;\n this.style = options?.style;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n} from '@angular/core';\nimport * as d3 from 'd3';\n\nimport { Axis } from '../../core/axis/axis';\nimport { AxisOrientation } from '../../model/enum/axis-orientation';\nimport { IChartEvent } from '../../model/i-chart-event';\nimport { PlotBand } from '../../model/plot-band';\nimport { ChartService } from '../../service/chart.service';\n\n@Component({\n selector: '[teta-plot-band]',\n templateUrl: './plot-band.component.html',\n styleUrls: ['./plot-band.component.scss'],\n standalone:true,\n imports:[\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlotBandComponent implements AfterViewInit, OnDestroy {\n @Input() plotBand: PlotBand;\n @Input() axis: Axis;\n @Input() scale: any;\n @Input() size: DOMRect;\n\n @HostListener('click', ['$event']) click(event: MouseEvent) {\n this.emit({\n target: this.plotBand,\n event,\n });\n }\n\n @HostListener('contextmenu', ['$event']) contextMenu(event: MouseEvent) {\n this.emit({\n target: this.plotBand,\n event,\n });\n }\n\n orientation = AxisOrientation;\n resizeElements: any;\n dragElements: any;\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 get bandSize(): number {\n return Math.abs(\n this.scale(this.plotBand.to) - this.scale(this.plotBand.from)\n );\n }\n\n constructor(\n private chartService: ChartService,\n private cdr: ChangeDetectorRef,\n private element: ElementRef\n ) {}\n\n emit(event: IChartEvent<PlotBand>) {\n this.chartService.emitPlotband(event);\n }\n\n ngAfterViewInit(): void {\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 this.dragElements = d3.drag().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 return null\n });\n\n const drag = this.dragElements.on(\n 'start drag end',\n (event: d3.D3DragEvent<any, PlotBand, any>, d: PlotBand) => {\n const bandSize = parseFloat(\n plotbandElement.attr(\n this.axis.orientation === AxisOrientation.x ? 'width' : 'height'\n )\n );\n\n d.from = this.scale.invert(\n event[AxisOrientation[this.axis.orientation]]\n );\n\n d.to = this.scale.invert(\n event[AxisOrientation[this.axis.orientation]] + bandSize\n );\n\n this.emit({\n event,\n target: d,\n });\n\n this.cdr.detectChanges();\n }\n );\n\n let grabberKey;\n this.resizeElements = d3.drag();\n\n const resize = this.resizeElements.on(\n 'start drag end',\n (event: d3.D3DragEvent<any, PlotBand, any>, d: PlotBand) => {\n if (event?.type === 'start') {\n const { grabber } = event?.sourceEvent?.target?.dataset;\n grabberKey = grabber;\n }\n\n const min = Math.min(...this.scale.domain());\n const max = Math.max(...this.scale.domain());\n\n const minValue = d.min ?? min;\n const maxValue = d.max ?? max;\n\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 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 ngOnDestroy() {\n this.dragElements.on('start drag end', null);\n this.resizeElements.on('start drag end', null);\n }\n\n getTextPosition = () => {\n let [min, max] = this.scale.domain();\n min = min instanceof Date ? min.getTime() : min;\n max = max instanceof Date ? max.getTime() : max;\n const from =\n (this.plotBand.from as any) instanceof Date\n ? (this.plotBand.from as any).getTime()\n : this.plotBand.from;\n const to =\n (this.plotBand.to as any) instanceof Date\n ? (this.plotBand.to as any).getTime()\n : this.plotBand.to;\n const position = ((from <= min ? min : from) + (to >= max ? max : to)) / 2;\n return this.scale(position);\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\n class='plotband' xmlns:svg='http://www.w3.org/1999/html'\n [class.draggable]='plotBand?.draggable === true'\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 ? (axis.options.inverted === true ? from : to) : null'\n [attr.x]='axis.orientation === orientation.x ? (axis.options.inverted === true ? to : from) : null'>\n</svg:rect>\n@if (axis.orientation === orientation.x) {\n <svg:text\n text-anchor='middle'\n dominant-baseline='middle'\n class='label font-caption fill-text-90'\n [attr.x]='getTextPosition()'\n [attr.transform]=\"'rotate(-90, '+ getTextPosition() +',' + height / 2 + ')'\"\n [attr.y]='height / 2'>{{ plotBand.label }}\n </svg:text>\n}\n@if (axis.orientation === orientation.y) {\n <svg:text\n text-anchor='middle'\n class='label font-caption fill-text-90'\n dominant-baseline='central'\n [attr.x]='getTextPosition()'\n [attr.y]='width / 2'>{{ plotBand.label }}\n </svg:text>\n}\n@if (plotBand.resizable) {\n @if (plotBand.showGrabbers) {\n <svg:line class='display-grabber'\n [attr.stroke]=\"plotBand.style?.grabbers?.stroke || 'var(--color-text-50)'\"\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 <svg:line class='display-grabber'\n [attr.stroke]=\"plotBand.style?.grabbers?.stroke || 'var(--color-text-50)'\"\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 [class.resizeable]='plotBand?.resizable'\n [attr.stroke]=\"plotBand.style?.grabbers?.stroke || 'var(--color-text-50)'\"\n [attr.stroke-width]='8'\n [style.transform]=\"axis.orientation === orientation.x ? 'translateX(2px)' : 'translateY(2px)'\"\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 <svg:line class='grabber'\n [class.x-grabber]='axis.orientation === orientation.x'\n [class.y-grabber]='axis.orientation === orientation.y'\n [class.resizeable]='plotBand?.resizable'\n [attr.stroke]=\"plotBand.style?.grabbers?.stroke || 'var(--color-text-50)'\"\n [attr.stroke-width]='8'\n [style.transform]=\"axis.orientation === orientation.x ? 'translateX(-2px)' : 'translateY(-2px)'\"\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","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component, Input,\n} from '@angular/core';\n\nimport {ScaleService} from \"../../service/scale.service\";\nimport {map, Observable, withLatestFrom} from \"rxjs\";\nimport {IChartConfig} from \"../../model/i-chart-config\";\nimport {ChartService} from \"../../service/chart.service\";\nimport {generateTicks} from \"../../core/utils/generate-ticks\";\nimport {IScalesMap} from \"../../model/i-scales-map\";\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: '[teta-gridlines]',\n templateUrl: './gridlines.component.html',\n styleUrls: ['./gridlines.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n ]\n})\nexport class GridlinesComponent implements AfterViewInit {\n\n @Input() size: DOMRect;\n\n config: Observable<IChartConfig>;\n tickYValues: Observable<number[]>;\n tickXValues: Observable<number[]>;\n x: Observable<any>;\n y: Observable<any>;\n\n constructor(private svc: ScaleService, private chartService: ChartService) {\n this.config = this.chartService.config;\n\n this.tickYValues = this.svc.scales.pipe(\n withLatestFrom(this.config),\n map((_: [IScalesMap, IChartConfig]) => {\n const [scales, config] = _;\n const ratio = this.size.height / 40;\n return config.gridLines?.y?.ticksCount != null ? generateTicks(scales.y.get(0).scale.domain(), config.gridLines?.y?.ticksCount) : scales.y.get(0)?.scale.ticks(ratio);\n }));\n\n this.tickXValues = this.svc.scales.pipe(\n withLatestFrom(this.config),\n map((_: [IScalesMap, IChartConfig]) => {\n const [scales, config] = _;\n const ratio = this.size.width / 40;\n return config.gridLines?.x?.ticksCount != null ? generateTicks(scales.x.get(0).originDomain, config.gridLines?.x?.ticksCount) : scales.x.get(0)?.scale.ticks(ratio);\n }));\n\n this.y = this.svc.scales.pipe(map((_) => _.y.get(0)?.scale));\n this.x = this.svc.scales.pipe(map((_) => _.x.get(0)?.scale));\n }\n\n ngAfterViewInit() {\n\n }\n}\n","@if ({\n xValues: tickXValues | async,\n yValues: tickYValues | async,\n x: x | async,\n y: y | async,\n config: config | async\n}; as data) {\n @if (data.y && data.config.gridLines?.showY !== false) {\n @for (tick of data.yValues; track tick) {\n <svg:line [attr.x1]=\"0\"\n [attr.y1]=\"data.y(tick) || 1\"\n [attr.x2]=\"size?.width\"\n [attr.y2]=\"data.y(tick) || 1\"></svg:line>\n }\n }\n @if (data.x && data.config.gridLines?.showX !== false) {\n @for (tick of data.xValues; track tick) {\n <svg:line [attr.x1]=\"data.x(tick) || 1\"\n [attr.y1]=\"0\"\n [attr.x2]=\"data.x(tick) || 1\"\n [attr.y2]=\"size?.height\"></svg:line>\n }\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport * as d3 from 'd3';\nimport {\n BehaviorSubject,\n combineLatest,\n map,\n Observable,\n tap,\n withLatestFrom,\n} from 'rxjs';\n\nimport { SeriesBaseComponent } from '../../base/series-base.component';\nimport { BasePoint } from '../../model/base-point';\nimport { ClipPointsDirection } from '../../model/enum/clip-points-direction';\nimport { TooltipTracking } from '../../model/enum/tooltip-tracking';\nimport { IScalesMap } from '../../model/i-scales-map';\nimport { Series } from '../../model/series';\nimport { ChartService } from '../../service/chart.service';\nimport { ScaleService } from '../../service/scale.service';\nimport { ZoomService } from '../../service/zoom.service';\n\n@Component({\n template: '',\n standalone:true,\n})\nexport class LinearSeriesBase<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit, OnDestroy\n{\n public defaultClipPointsMapping: Map<\n ClipPointsDirection,\n (\n min: number,\n max: number\n ) => (point: BasePoint, idx: number, arr: Array<BasePoint>) => {}\n > = new Map();\n\n transform: Observable<Pick<BasePoint, 'x' | 'y'>>;\n display: Observable<number>;\n path: Observable<string>;\n x: any;\n y: any;\n markers: BasePoint[];\n\n private __series: Series<T>;\n protected _update = new BehaviorSubject<void>(null);\n\n @Input()\n override set series(series: Series<T>) {\n this.__series = series;\n\n this.markers = this.__series.data?.filter(\n _ =>\n _?.marker &&\n _?.x !== undefined &&\n _?.y !== undefined &&\n _?.x !== null &&\n _?.y !== null\n );\n }\n\n override get series() {\n return this.__series;\n }\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 filterX =\n (min: number, max: number) =>\n (point: BasePoint, idx: number, arr: Array<BasePoint>) => {\n const bigger = min > max ? min : max;\n const smaller = min > max ? max : min;\n return (\n (point.x <= bigger ||\n point.x1 <= bigger ||\n (arr[idx - 1] && arr[idx - 1].x <= bigger) ||\n (arr[idx - 1] && arr[idx - 1].x1 <= bigger)) &&\n (point.x >= smaller ||\n point.x1 >= smaller ||\n (arr[idx + 1] && arr[idx + 1].x >= smaller) ||\n (arr[idx + 1] && arr[idx + 1].x1 >= smaller))\n );\n };\n\n const filterY =\n (min: number, max: number) =>\n (point: BasePoint, idx: number, arr: Array<BasePoint>) => {\n const bigger = min > max ? min : max;\n const smaller = min > max ? max : min;\n return (\n (point.y <= bigger ||\n point.y1 <= bigger ||\n (arr[idx - 1] && arr[idx - 1].y <= bigger) ||\n (arr[idx - 1] && arr[idx - 1].y1 <= bigger)) &&\n (point.y >= smaller ||\n point.y1 >= smaller ||\n (arr[idx + 1] && arr[idx + 1].y >= smaller) ||\n (arr[idx + 1] && arr[idx + 1].y1 >= smaller))\n );\n };\n\n this.defaultClipPointsMapping.set(ClipPointsDirection.x, filterX);\n this.defaultClipPointsMapping.set(ClipPointsDirection.y, filterY);\n\n this.transform = this.svc.pointerMove.pipe(\n withLatestFrom(this.scaleService.scales),\n map((data: [PointerEvent, IScalesMap]) => {\n const [event, { x, y }] = data;\n\n return this.getTransform(\n event,\n x.get(this.series.xAxisIndex).scale,\n y.get(this.series.yAxisIndex).scale\n );\n }),\n tap(() => setTimeout(() => this.cdr.detectChanges()))\n );\n\n this.path = combineLatest([this.scaleService.scales, this._update]).pipe(\n map(([data]) => {\n const { x, y } = data;\n this.x = x.get(this.series.xAxisIndex)?.scale;\n this.y = y.get(this.series.yAxisIndex)?.scale;\n\n if (!this.x || !this.y) {\n return '';\n }\n\n const filter = this.defaultClipPointsMapping.get(\n this.series.clipPointsDirection\n );\n\n const line = d3\n .line<BasePoint>()\n .defined(\n point =>\n point.x !== null &&\n point.y !== null &&\n point.x !== undefined &&\n point.y !== undefined &&\n !isNaN(point.x) &&\n !isNaN(point.y)\n )\n .x(point => this.x(point.x))\n .y(point => this.y(point.y));\n\n let filteredData = this.series.data;\n\n if (this.series.clipPointsDirection === ClipPointsDirection.x) {\n let [min, max] = this.x.domain();\n\n min = min instanceof Date ? min.getTime() : min;\n max = max instanceof Date ? max.getTime() : max;\n\n filteredData = filteredData?.filter(filter(min, max));\n }\n\n if (this.series.clipPointsDirection === ClipPointsDirection.y) {\n let [min, max] = this.y.domain();\n\n min = min instanceof Date ? min.getTime() : min;\n max = max instanceof Date ? max.getTime() : max;\n\n filteredData = filteredData?.filter(filter(min, max));\n }\n\n return line(filteredData);\n })\n );\n }\n\n ngOnDestroy() {\n this.svc.setTooltip({\n point: null,\n series: this.series,\n });\n }\n\n ngAfterViewInit() {}\n\n getTransform(\n event: any,\n scaleX: any,\n scaleY: any\n ): Pick<BasePoint, 'x' | 'y'> {\n if (event.type === 'mouseleave') {\n return null;\n }\n const mouse = [event?.offsetX, event?.offsetY];\n\n const tooltipTracking = this.config?.tooltip?.tracking;\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 const pointer = mouse[0];\n\n let x0 = scaleX.invert(pointer);\n if (x0 instanceof Date) {\n x0 = x0.getTime();\n }\n const rightId = bisect(this.series.data, x0);\n const range = scaleY.range();\n const intersect = lineIntersection(\n pointer,\n range[0],\n pointer,\n Number.MAX_SAFE_INTEGER,\n scaleX(this.series.data[rightId - 1]?.x),\n scaleY(this.series.data[rightId - 1]?.y),\n scaleX(this.series.data[rightId]?.x),\n scaleY(this.series.data[rightId]?.y)\n );\n const x = scaleX.invert(intersect.x);\n const y = scaleY.invert(intersect.y);\n if (\n x !== null &&\n x !== undefined &&\n !isNaN(x) &&\n y !== null &&\n y !== undefined &&\n !isNaN(y)\n ) {\n this.svc.setTooltip({\n point: {\n x: scaleX.invert(intersect.x),\n y: scaleY.invert(intersect.y),\n },\n series: this.series,\n });\n } else {\n this.svc.setTooltip({\n point: null,\n series: this.series,\n });\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 let y0 = scaleY.invert(mouse[1]);\n if (y0 instanceof Date) {\n y0 = y0.getTime();\n }\n const rightId = bisect(this.series.data, y0);\n const range = scaleX.range();\n\n const intersect = lineIntersection(\n range[0],\n mouse[1],\n Number.MAX_SAFE_INTEGER,\n mouse[1],\n scaleX(this.series.data[rightId - 1]?.x),\n scaleY(this.series.data[rightId - 1]?.y),\n scaleX(this.series.data[rightId]?.x),\n scaleY(this.series.data[rightId]?.y)\n );\n\n const x = scaleX.invert(intersect.x);\n const y = scaleY.invert(intersect.y);\n\n if (\n x !== null &&\n x !== undefined &&\n !isNaN(x) &&\n y !== null &&\n y !== undefined &&\n !isNaN(y)\n ) {\n this.svc.setTooltip({\n point: {\n x: scaleX.invert(intersect.x),\n y: scaleY.invert(intersect.y),\n },\n series: this.series,\n });\n } else {\n this.svc.setTooltip({\n point: null,\n series: this.series,\n });\n }\n\n return {\n x: intersect.x,\n y: intersect.y,\n };\n }\n return null\n }\n}\n","export enum DragPointType {\n x,\n y,\n xy,\n}\n","import {Directive, ElementRef, EventEmitter, HostListener, Input, Output} from '@angular/core';\nimport {DragPointType} from '../model/enum/drag-point-type';\n\n@Directive({\n selector: '[tetaDraggablePoint]',\n exportAs: 'tetaDraggablePoint',\n standalone:true\n})\nexport class DraggablePointDirective {\n @Input() tetaDraggablePoint: boolean;\n @Input() dragDirection: DragPointType;\n @Input() allowDrag: (point: {\n x: number,\n y: number,\n deltaX: number,\n deltaY: number\n }) => boolean;\n\n private startPosition: {\n x: number,\n y: number;\n };\n\n private transformCache: {\n x: number,\n y: number;\n };\n\n constructor(private _elementRef: ElementRef) {\n }\n\n @Output() moveStart = new EventEmitter<{\n x: number,\n y: number\n }>();\n\n @Output() moveProcess = new EventEmitter<{\n x: number,\n y: number,\n deltaX: number,\n deltaY: number\n }>();\n\n @Output() moveEnd = new EventEmitter<{\n x: number,\n y: number,\n deltaX: number,\n deltaY: number\n }>();\n\n @HostListener('mousedown', ['$event'])\n @HostListener('touchstart', ['$event'])\n mouseDown(event: MouseEvent) {\n if (!this.tetaDraggablePoint) {\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n this.startPosition = {\n x: event.x,\n y: event.y\n };\n this.moveStart.emit(this.startPosition);\n }\n\n @HostListener('window:mouseup', ['$event'])\n @HostListener('window:touchend', ['$event'])\n mouseUp(event: MouseEvent) {\n if (this.startPosition !== null && this.startPosition !== undefined) {\n let deltaX = event.x - this.startPosition.x;\n let deltaY = event.y - this.startPosition.y;\n if (this.dragDirection === DragPointType.x) {\n deltaY = 0;\n }\n if (this.dragDirection === DragPointType.y) {\n deltaX = 0;\n }\n if (this.allowDrag && !this.allowDrag({\n x: event.x,\n y: event.y,\n deltaX,\n deltaY\n })) {\n this.startPosition = null;\n return;\n }\n if (this.transformCache) {\n this.transformCache.x = this.transformCache.x + deltaX;\n this.transformCache.y = this.transformCache.y + deltaY;\n } else {\n this.transformCache = {\n x: deltaX,\n y: deltaY\n };\n }\n this.moveEnd.emit({\n x: event.x,\n y: event.y,\n deltaX,\n deltaY\n });\n }\n this.startPosition = null;\n }\n\n @HostListener('window:mousemove', ['$event'])\n @HostListener('window:touchmove', ['$event'])\n mouseMove(event: MouseEvent) {\n if (this.startPosition) {\n let deltaX = event.x - this.startPosition.x;\n let deltaY = event.y - this.startPosition.y;\n if (this.transformCache) {\n deltaX = this.transformCache.x + deltaX;\n deltaY = this.transformCache.y + deltaY;\n }\n if (this.allowDrag && !this.allowDrag({\n x: event.x,\n y: event.y,\n deltaX,\n deltaY\n })) {\n return;\n }\n if (this.dragDirection === DragPointType.x) {\n deltaY = 0;\n }\n if (this.dragDirection === DragPointType.y) {\n deltaX = 0;\n }\n this.setTransform(deltaX, deltaY);\n event.stopPropagation();\n event.preventDefault();\n this.moveProcess.emit({\n x: event.x,\n y: event.y,\n deltaX,\n deltaY\n });\n }\n }\n\n setTransform(x: number, y: number) {\n this._elementRef.nativeElement.style.transform = `translate(${x}px, ${y}px)`;\n }\n\n resetTransform() {\n this.setTransform(0, 0);\n this.transformCache = null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport {ChartService} from '../../../service/chart.service';\nimport {BasePoint} from '../../../model/base-point';\nimport {ScaleService} from '../../../service/scale.service';\nimport {ZoomService} from '../../../service/zoom.service';\nimport {LinearSeriesBase} from '../linear-series-base';\nimport { AsyncPipe } from '@angular/common';\nimport { DraggablePointDirective } from '../../../directives/draggable-point.directive';\n\n@Component({\n selector: 'svg:svg[teta-line-series]',\n templateUrl: './line-series.component.html',\n styleUrls: ['./line-series.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n DraggablePointDirective,\n ]\n})\nexport class LineSeriesComponent<T extends BasePoint>\n extends LinearSeriesBase<T>\n implements OnInit, OnDestroy {\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 private start: { x: number, y: number };\n private labelStart: { dx: number, dy: number };\n\n moveStart(event, point) {\n this.start = {x: point.x, y: point.y};\n }\n\n moveEnd(event, point) {\n point.x = this.x.invert(this.x(this.start.x) + event.deltaX);\n point.y = this.y.invert(this.y(this.start.y) + event.deltaY);\n this._update.next();\n const emitEvent = {\n type: 'end',\n sourceEvent: event\n };\n this.svc.emitPoint({\n target: {\n series: this.series,\n point: point,\n },\n event: emitEvent,\n });\n }\n\n moveProcess(event, point) {\n point.x = this.x.invert(this.x(this.start.x) + event.deltaX);\n point.y = this.y.invert(this.y(this.start.y) + event.deltaY);\n this._update.next();\n const emitEvent = {\n type: 'drag',\n sourceEvent: event\n };\n this.svc.emitPoint({\n target: {\n series: this.series,\n point: point,\n },\n event: emitEvent,\n });\n }\n\n startLabel(event, label) {\n this.labelStart = {dx: label.dx, dy: label.dy};\n }\n\n moveLabel(event, label) {\n label.dx = this.labelStart.dx + event.deltaX;\n label.dy = this.labelStart.dy + event.deltaY;\n }\n\n allowDrag = (point: BasePoint) => {\n return (newPoint) => {\n if (point.marker.minX !== null && point.marker.minX !== undefined) {\n if (this.x.invert(this.x(this.start.x) + newPoint.deltaX) < point.marker.minX) {\n return false;\n }\n }\n if (point.marker.maxX !== null && point.marker.maxX !== undefined) {\n if (this.x.invert(this.x(this.start.x) + newPoint.deltaX) > point.marker.maxX) {\n return false;\n }\n }\n if (point.marker.minY !== null && point.marker.minY !== undefined) {\n if (this.y.invert(this.y(this.start.y) + newPoint.deltaY) < point.marker.minY) {\n return false;\n }\n }\n if (point.marker.maxY !== null && point.marker.maxY !== undefined) {\n if (this.y.invert(this.y(this.start.y) + newPoint.deltaY) > point.marker.maxY) {\n return false;\n }\n }\n return true;\n };\n };\n}\n","<svg:path\n class=\"line\"\n [attr.d]=\"path | async\"\n [attr.stroke]=\"series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n fill=\"none\">\n</svg:path>\n@if (transform | async; as t) {\n @if (t?.x != null && t?.y != null) {\n <svg:circle r=\"3\"\n [attr.fill]=\"series.color\"\n [attr.transform]=\"'translate('+ t.x +', '+ t.y +')'\">\n </svg:circle>\n }\n}\n@if (markers; as draggablePoints) {\n @if (x && y) {\n @for (point of draggablePoints; track point) {\n <svg:g\n [attr.transform]=\"'translate(' + x(point.x) + ',' + y(point.y) + ')'\">\n <svg:g [tetaDraggablePoint]=\"point.marker.draggable\"\n [dragDirection]=\"point.marker.dragType\"\n [allowDrag]=\"allowDrag(point)\"\n #dragPoint=\"tetaDraggablePoint\"\n (moveStart)=\"moveStart($event, point)\"\n (moveEnd)=\"moveEnd($event, point);dragPoint.resetTransform();\"\n (moveProcess)=\"moveProcess($event, point);dragPoint.resetTransform();\"\n [class.draggable-marker]=\"point?.marker?.draggable\">\n <svg:circle\n class=\"marker\"\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]=\"0\"\n [attr.cy]=\"0\">\n </svg:circle>\n @if (point.marker.label?.text) {\n <svg:line\n [attr.x1]=\"0\"\n [attr.y1]=\"0\"\n [attr.x2]=\"point.marker.label?.dx\"\n [attr.y2]=\"point.marker.label?.dy\"\n [attr.stroke]=\"point.marker.label?.style?.stroke ?? 'var(--color-text-90)'\"\n [attr.stroke-width]=\"point.marker.label?.style?.strokeWidth ?? 1\"\n [attr.stroke-dasharray]=\"point.marker.label?.style?.strokeDasharray ?? null\">\n </svg:line>\n <svg:foreignObject\n [tetaDraggablePoint]=\"point.marker.label?.draggable\"\n [dragDirection]=\"point.marker.label.dragType\"\n #labelPoint=\"tetaDraggablePoint\"\n (moveStart)=\"startLabel($event, point.marker.label)\"\n (moveProcess)=\"moveLabel($event, point.marker.label); labelPoint.resetTransform();\"\n (moveEnd)=\"labelPoint.resetTransform();\"\n [attr.width]=\"annotationNode?.offsetWidth ?? 0\"\n [attr.height]=\"annotationNode?.offsetHeight ?? 0\"\n [attr.x]=\"point.marker.label?.dx\"\n [attr.y]=\"point.marker.label?.dy\"\n class=\"position-absolute\">\n <div\n #annotationNode\n class=\"shadow-2 padding-2\"\n [style.color]=\"'var(--color-text-90)'\"\n [style.background-color]=\"'var(--color-global-bgcard)'\"\n [style.cursor]=\"'move'\"\n style=\"border-radius: 2px; display: inline-block;\">\n {{ point.marker.label?.text }}\n </div>\n </svg:foreignObject>\n }\n </svg:g>\n </svg:g>\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnChanges,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\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';\nimport {map, Observable} from 'rxjs';\nimport {SeriesType} from '../../../model/enum/series-type';\nimport * as d3 from 'd3';\nimport {AsyncPipe} from '@angular/common';\n\n@Component({\n selector: 'svg:svg[teta-bar-series]',\n templateUrl: './bar-series.component.html',\n styleUrls: ['./bar-series.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n ]\n})\nexport class BarSeriesComponent<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit, OnChanges {\n\n x: Observable<any>;\n x1: Observable<any>;\n y: Observable<any>;\n\n barSeriesCount: Observable<number>;\n\n Math: any = Math;\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.barSeriesCount = this.svc.config.pipe(\n map((_) => {\n const count = _.series.filter(\n (_) =>\n _.type === SeriesType.bar && _.xAxisIndex === this.series.xAxisIndex\n );\n\n return count.length;\n })\n );\n\n this.x1 = this.scaleService.scales.pipe(\n map((_) => {\n const x = _.x.get(this.series.xAxisIndex)?.scale;\n const range = x.range();\n const domain = this.series.data.map((_) => _.x);\n\n return d3\n .scaleBand<number>()\n .range([0, range[1]])\n .domain(domain)\n .padding(0.1);\n })\n );\n\n this.x = this.scaleService.scales.pipe(\n map((_) => _.x.get(this.series.xAxisIndex)?.scale)\n );\n\n this.y = this.scaleService.scales.pipe(\n map((_) => _.y.get(this.series.yAxisIndex)?.scale)\n );\n }\n\n mouseenter(point: BasePoint) {\n this.svc.setTooltip({\n point: point,\n series: this.series,\n });\n }\n\n mouseleave(point: BasePoint) {\n this.svc.setTooltip({\n point: null,\n series: this.series,\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n }\n\n isNumber(value: any): value is number {\n return typeof value === 'number'\n }\n}\n","@if ({\n x: x | async,\n x1: x1 | async,\n y: y | async,\n barSeriesCount: barSeriesCount | async\n}; as data) {\n @if (data.x && data.y) {\n @if (data.barSeriesCount > 1) {\n @for (point of series.data; track point; ) {\n <svg:rect\n (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\"\n [attr.x]=\"data.x(point.x) + ((isNumber(series.id) ? series.id : 0) * data.x1.bandwidth() / data.barSeriesCount)\"\n [attr.y]=\"point.y > 0 ? data.y(point.y) : data.y(0)\"\n [attr.width]=\"data.x1.bandwidth() / data.barSeriesCount\"\n [attr.height]=\"Math.abs(data.y(point.y) - data.y(0))\"\n [attr.fill]=\"series.color\"\n ></svg:rect>\n }\n }\n @if (data.barSeriesCount === 1) {\n @for (point of series.data; track point; ) {\n <svg:rect\n (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\"\n [attr.x]=\"data.x(point.x)\"\n [attr.y]=\"point.y > 0 ? data.y(point.y) : data.y(0)\"\n [attr.width]=\"data.x1.bandwidth()\"\n [attr.height]=\"Math.abs(data.y(point.y) - data.y(0))\"\n [attr.fill]=\"point.color ?? series.color\"\n ></svg:rect>\n }\n }\n }\n}\n","import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, OnInit} from '@angular/core';\nimport {BasePoint} from '../../../model/base-point';\nimport {SeriesBaseComponent} from '../../../base/series-base.component';\nimport {map, Observable} from 'rxjs';\nimport {ChartService} from '../../../service/chart.service';\nimport {ScaleService} from '../../../service/scale.service';\nimport {ZoomService} from '../../../service/zoom.service';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'svg:svg[teta-scatter-series]',\n templateUrl: './scatter-series.component.html',\n styleUrls: ['./scatter-series.component.scss'],\n standalone: true,\n imports: [\n AsyncPipe\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ScatterSeriesComponent<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit, AfterViewInit {\n transform: Observable<Pick<BasePoint, 'x' | 'y'>>;\n display: Observable<number>;\n path: Observable<string>;\n x: Observable<any>;\n y: Observable<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.x = this.scaleService.scales.pipe(map(_ => _.x.get(this.series.xAxisIndex)?.scale));\n this.y = this.scaleService.scales.pipe(map(_ => _.y.get(this.series.yAxisIndex)?.scale));\n }\n\n ngAfterViewInit() {\n }\n\n mouseenter(point: BasePoint) {\n this.svc.setTooltip({\n point: point,\n series: this.series,\n });\n }\n\n mouseleave(point: BasePoint) {\n this.svc.setTooltip({\n point: null,\n series: this.series,\n });\n }\n}\n","@if ({\n y: y | async,\n x: x | async\n}; as scales) {\n @if (scales.x && scales.y) {\n @for (point of series.data; track point) {\n <svg:circle\n class=\"line\"\n (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\"\n [attr.cx]=\"scales.x(point.x)\"\n [attr.cy]=\"scales.y(point.y)\"\n [attr.r]=\"series.style?.radius ?? 1\"\n [attr.stroke]=\"point.color ?? series.color\"\n [attr.fill]=\"point.color ?? series.color\"\n [attr.stroke-width]=\"series.style?.strokeWidth\">\n </svg:circle>\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnInit,\n} from '@angular/core';\nimport { filter, map, Observable } from 'rxjs';\n\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { BasePoint } from '../../../model/base-point';\nimport { FillType } from '../../../model/enum/fill-type';\nimport { ChartService } from '../../../service/chart.service';\nimport { ScaleService } from '../../../service/scale.service';\nimport { ZoomService } from '../../../service/zoom.service';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'svg:svg[teta-block-series]',\n templateUrl: './block-series.component.html',\n styleUrls: ['./block-series.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n ]\n})\nexport class BlockSeriesComponent<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit\n{\n x: Observable<any>;\n y: Observable<any>;\n displayPoints: Observable<BasePoint[]>;\n fillType = FillType;\n id: string;\n Math = Math;\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 this.id = (Date.now() + Math.random()).toString(36);\n }\n\n override ngOnInit(): void {\n this.x = this.scaleService.scales.pipe(\n map(_ => _.x.get(this.series.xAxisIndex)?.scale)\n );\n this.y = this.scaleService.scales.pipe(\n map(_ => _.y.get(this.series.yAxisIndex)?.scale)\n );\n\n this.displayPoints = this.y.pipe(\n filter(y => y),\n map(y => {\n return this.series.data.filter((point, index, arr) => {\n const [min, max] = y.domain();\n return (\n (point.y >= min ||\n point.y1 >= min ||\n arr[index + 1]?.y >= min ||\n arr[index + 1]?.y1 >= min) &&\n (point.y <= max ||\n point.y1 <= max ||\n arr[index - 1]?.y <= max ||\n arr[index - 1]?.y1 <= max)\n );\n });\n })\n );\n }\n\n mouseenter(point: BasePoint) {\n this.svc.setTooltip({\n point: point,\n series: this.series,\n });\n }\n\n mouseleave(point: BasePoint) {\n this.svc.setTooltip({\n point: null,\n series: this.series,\n });\n }\n}\n","@if ({\n y: y | async,\n x: x | async,\n points: displayPoints | async\n}; as data) {\n @if (series?.fillType === fillType.gradient) {\n <svg:defs>\n <svg:linearGradient [id]=\"'gradient-fill-' + id\" gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n </svg:defs>\n }\n @if (data.x && data.y) {\n @for (point of data.points; track point) {\n <svg:g (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\">\n <svg:rect\n x=\"0\"\n [attr.y]=\"data.y(point.y)\"\n [attr.height]=\"Math.abs(data.y(point.y1) - data.y(point.y))\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : point.iconId ? 'url(#pattern'+point.iconId+')' : point.color ?? series.style?.fill ?? series.color\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n width=\"100%\">\n </svg:rect>\n @if (point.text && data.y(point.y1) - data.y(point.y) > 8) {\n <svg:text x=\"50%\"\n [attr.y]=\"(data.y(point.y1) + data.y(point.y)) / 2\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\">{{ point.text }}\n </svg:text>\n }\n <svg:line x1=\"0\" x2=\"100%\" [attr.y1]=\"data.y(point.y)\" [attr.y2]=\"data.y(point.y)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"></svg:line>\n <svg:line x1=\"0\" x2=\"100%\" [attr.y1]=\"data.y(point.y1)\" [attr.y2]=\"data.y(point.y1)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"></svg:line>\n </svg:g>\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnInit,\n} from '@angular/core';\nimport { filter, map, Observable } from 'rxjs';\n\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { BasePoint } from '../../../model/base-point';\nimport { FillType } from '../../../model/enum/fill-type';\nimport { ChartService } from '../../../service/chart.service';\nimport { ScaleService } from '../../../service/scale.service';\nimport { ZoomService } from '../../../service/zoom.service';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'svg:svg[teta-block-area-series]',\n templateUrl: './block-area-series.component.html',\n styleUrls: ['./block-area-series.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n ]\n})\nexport class BlockAreaSeriesComponent<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit, AfterViewInit\n{\n x: Observable<any>;\n y: Observable<any>;\n displayPoints: Observable<BasePoint[]>;\n fillType = FillType;\n id: string;\n Math = Math;\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 this.id = (Date.now() + Math.random()).toString(36);\n }\n\n override ngOnInit(): void {\n this.x = this.scaleService.scales.pipe(\n map(_ => _.x.get(this.series.xAxisIndex)?.scale)\n );\n this.y = this.scaleService.scales.pipe(\n map(_ => _.y.get(this.series.yAxisIndex)?.scale)\n );\n\n this.displayPoints = this.y.pipe(\n filter(y => y),\n map(y => {\n return this.series.data.filter((point, index, arr) => {\n const [min, max] = y.domain();\n return (\n (point.y >= min ||\n point.y1 >= min ||\n arr[index + 1]?.y >= min ||\n arr[index + 1]?.y1 >= min) &&\n (point.y <= max ||\n point.y1 <= max ||\n arr[index - 1]?.y <= max ||\n arr[index - 1]?.y1 <= max)\n );\n });\n })\n );\n }\n\n ngAfterViewInit() {}\n\n mouseenter(point: BasePoint) {\n this.svc.setTooltip({\n point: point,\n series: this.series,\n });\n }\n\n mouseleave(point: BasePoint) {\n this.svc.setTooltip({\n point: null,\n series: this.series,\n });\n }\n}\n","@if ({\n y: y | async,\n x: x | async,\n points: displayPoints | async\n}; as data) {\n @if (series?.fillType === fillType.gradient) {\n <svg:defs>\n <svg:linearGradient [id]=\"'gradient-fill-' + id\"\n gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n </svg:defs>\n }\n @if (data.x && data.y) {\n @for (point of data.points; track point) {\n <svg:g (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\">\n @if (!!config.inverted) {\n <svg:rect\n [attr.x]=\"data.x(0) < data.x(point.x) ? data.x(0) : data.x(point.x)\"\n [attr.y]=\"data.y(point.y)\"\n [attr.height]=\"Math.abs(data.y(point.y1) - data.y(point.y))\"\n [attr.width]=\"data.x(0) < data.x(point.x) ? data.x(point.x) - data.x(0) : data.x(0) - data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? '' : point.color ?? series.style?.stroke ?? series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : point.iconId ? 'url(#pattern'+point.iconId+')' : point.color ?? series.style?.fill ?? series.color\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\">\n </svg:rect>\n } @else {\n <svg:rect\n [attr.x]=\"data.x(point.x)\"\n [attr.y]=\"data.y(0)\"\n [attr.height]=\"Math.abs(data.y(0) - data.y(point.y))\"\n [attr.width]=\"data.x(point.x1) - data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? '' : point.color ?? series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : point.iconId ? 'url(#pattern'+point.iconId+')' : point.color ?? series.color\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\">\n </svg:rect>\n }\n @if (point.text) {\n <svg:text x=\"50%\"\n fill=\"var(--color-text-50)\"\n [attr.y]=\"(data.y(point.y1) + data.y(point.y)) / 2\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\">{{ point.text }}\n </svg:text>\n }\n </svg:g>\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport * as d3 from 'd3';\nimport { map, Observable } from 'rxjs';\n\nimport { BasePoint } from '../../../model/base-point';\nimport { ClipPointsDirection } from '../../../model/enum/clip-points-direction';\nimport { FillDirection, FillType } from '../../../model/enum/fill-type';\nimport { ChartService } from '../../../service/chart.service';\nimport { ScaleService } from '../../../service/scale.service';\nimport { ZoomService } from '../../../service/zoom.service';\nimport { LinearSeriesBase } from '../linear-series-base';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'svg:svg[teta-area-series]',\n templateUrl: './area-series.component.html',\n styleUrls: ['./area-series.component.scss'],\n standalone:true,\n imports: [AsyncPipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AreaSeriesComponent<T extends BasePoint>\n extends LinearSeriesBase<T>\n implements OnInit, OnDestroy\n{\n areaPath: Observable<string>;\n\n fillDirection = FillDirection;\n fillType = FillType;\n id: string;\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 this.id = (Date.now() + Math.random()).toString(36);\n }\n\n override ngOnInit() {\n super.ngOnInit();\n this.areaPath = this.scaleService.scales.pipe(\n map(data => {\n const { x, y } = data;\n\n this.x = x.get(this.series.xAxisIndex)?.scale;\n this.y = y.get(this.series.yAxisIndex)?.scale;\n\n if (!this.x || !this.y) {\n return '';\n }\n\n const area = d3\n .area<BasePoint>()\n .defined(\n point =>\n point.x !== null &&\n point.y !== null &&\n !isNaN(point.x) &&\n !isNaN(point.y)\n );\n\n area\n .x1(_ =>\n _.x1 !== null && _.x1 !== undefined ? this.x(_.x1) : this.x(0)\n )\n .x0(_ => this.x(_.x))\n\n .y(_ => this.y(_.y));\n\n const filter = this.defaultClipPointsMapping.get(\n this.series.clipPointsDirection\n );\n let filteredData = this.series.data;\n\n if (this.series.clipPointsDirection === ClipPointsDirection.x) {\n let [min, max] = this.x.domain();\n\n min = min instanceof Date ? min.getTime() : min;\n max = max instanceof Date ? max.getTime() : max;\n\n filteredData = filteredData?.filter(filter(min, max));\n }\n\n if (this.series.clipPointsDirection === ClipPointsDirection.y) {\n let [min, max] = this.y.domain();\n\n min = min instanceof Date ? min.getTime() : min;\n max = max instanceof Date ? max.getTime() : max;\n\n filteredData = filteredData?.filter(filter(min, max));\n }\n\n return area(filteredData);\n })\n );\n }\n}\n","@if (series?.fillType === fillType.gradient) {\n <svg:defs>\n <svg:linearGradient [id]=\"'gradient-fill-' + id\" gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted || series?.fillDirection === fillDirection.y ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted || series?.fillDirection === fillDirection.y ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.8\"></svg:stop>\n </svg:linearGradient>\n </svg:defs>\n}\n<svg:path\n class=\"area\"\n [attr.d]=\"areaPath | async\"\n [attr.stroke-width]=\"0\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : series.style?.fill ?? series.color\">\n</svg:path>\n<svg:path\n class=\"area\"\n fill=\"none\"\n [attr.d]=\"path | async\"\n [attr.stroke]=\"series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\">\n</svg:path>\n@if (transform | async; as t) {\n @if (t?.x != null && t?.y != null) {\n <svg:circle\n r=\"3\"\n [attr.fill]=\"series.color\"\n [attr.transform]=\"'translate('+ t.x +', '+ t.y +')'\">\n </svg:circle>\n }\n}\n@if (markers; as draggablePoints) {\n @for (point of draggablePoints; track point; ) {\n <svg:circle\n class=\"marker\"\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 </svg:circle>\n }\n}\n\n\n\n","import {SeriesType} from '../model/enum/series-type';\nimport {SeriesBaseComponent} from '../base/series-base.component';\nimport {LineSeriesComponent} from '../chart-container/series/line/line-series.component';\nimport {BarSeriesComponent} from '../chart-container/series/bar/bar-series.component';\nimport {ScatterSeriesComponent} from '../chart-container/series/scatter-series/scatter-series.component';\nimport {BlockSeriesComponent} from '../chart-container/series/block-series/block-series.component';\nimport {BlockAreaSeriesComponent} from '../chart-container/series/block-area-series/block-area-series.component';\nimport {AreaSeriesComponent} from '../chart-container/series/area-series/area-series.component';\n\nexport const defaultSeriesTypeMapping = new Map<SeriesType,\n typeof SeriesBaseComponent>()\n .set(SeriesType.line, LineSeriesComponent)\n .set(SeriesType.bar, BarSeriesComponent)\n .set(SeriesType.scatter, ScatterSeriesComponent)\n .set(SeriesType.block, BlockSeriesComponent)\n .set(SeriesType.area, AreaSeriesComponent)\n .set(SeriesType.blockArea, BlockAreaSeriesComponent);\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n Input, OnDestroy,\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 {Series} from '../../model/series';\nimport {BasePoint} from '../../model/base-point';\nimport {IChartConfig} from '../../model/i-chart-config';\nimport {defaultSeriesTypeMapping} from '../../default/defaultSeriesTypeMapping';\n\n@Component({\n selector: '[teta-series-host]',\n template: '',\n standalone:true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeriesHostComponent<T extends BasePoint> implements OnInit, OnDestroy {\n @Input() config: IChartConfig;\n @Input() series: Series<T>;\n\n private _init = false;\n private _componentRef: ComponentRef<any>;\n\n constructor(\n private viewContainerRef: ViewContainerRef\n ) {\n }\n\n ngOnInit(): void {\n if (!SeriesBaseComponent.isPrototypeOf(this.series.component)) {\n this.series.component =\n defaultSeriesTypeMapping.get(this.series.type) || LineSeriesComponent;\n }\n\n this._componentRef = this.viewContainerRef.createComponent(\n this.series.component\n );\n this._componentRef.instance.config = this.config;\n this._componentRef.instance.series = this.series;\n this._init = true;\n }\n\n ngOnDestroy(): void {\n this._componentRef.destroy();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this._init && (changes.hasOwnProperty('series') || changes.hasOwnProperty('config'))) {\n this._componentRef.instance.config = this.config;\n this._componentRef.instance.series = this.series;\n this._componentRef.injector.get(ChangeDetectorRef).detectChanges();\n }\n }\n}\n","import {SvgAttributes} from './svg-attributes';\n\nexport class PlotLine {\n id?: number | string;\n name?: 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 | string;\n name?: string;\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.name = options?.name;\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","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input, OnDestroy,\n OnInit,\n} from '@angular/core';\nimport {PlotLine} from '../../model/plot-line';\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 {ChartService} from '../../service/chart.service';\n\n@Component({\n selector: '[teta-plot-line]',\n templateUrl: './plotline.component.html',\n styleUrls: ['./plotline.component.scss'],\n standalone:true,\n imports:[],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlotlineComponent implements OnInit, OnDestroy {\n @Input() plotLine: PlotLine;\n @Input() size: DOMRect;\n @Input() axis: Axis;\n @Input() scale: any;\n orientation = AxisOrientation;\n dragElements: any;\n\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 }\n\n ngOnInit(): void {\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 this.dragElements = 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 return null\n });\n const drag = this.dragElements\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 if (d.max !== null && d.max !== undefined && d.value >= d.max) {\n d.value = d.max;\n }\n if (d.min !== null && d.min !== undefined && d.value <= d.min) {\n d.value = d.min;\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 ngOnDestroy() {\n this.dragElements.on('start drag end', null);\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\n@if (axis.orientation === orientation.x) {\n <svg:text\n text-anchor=\"middle\"\n dominant-baseline=\"central\"\n class=\"label font-title-2 fill-text-70\"\n [attr.x]=\"value\"\n dy=\"-2em\"\n [attr.transform]=\"'rotate(-90, '+ value +',' + height / 2 + ')'\"\n [attr.y]=\"height / 2\">{{ plotLine.label }}\n </svg:text>\n}\n\n@if (axis.orientation === orientation.y) {\n <svg:text\n text-anchor=\"middle\"\n class=\"label font-title-2 fill-text-70\"\n dominant-baseline=\"central\"\n [attr.x]=\"value\"\n [attr.y]=\"width / 2\">{{ plotLine.label }}\n </svg:text>\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 ? 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, ChangeDetectorRef,\n Component,\n ElementRef, HostListener,\n Input, OnDestroy,\n ViewChild,\n} from '@angular/core';\nimport {Annotation} from '../../model/annotation';\nimport * as d3 from 'd3';\nimport {lastValueFrom, map, Observable, take} from 'rxjs';\nimport {ScaleService} from '../../service/scale.service';\nimport {ChartService} from '../../service/chart.service';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\n\n@Component({\n selector: '[teta-annotation]',\n templateUrl: './annotation.component.html',\n styleUrls: ['./annotation.component.scss'],\n standalone: true,\n imports: [\n NgTemplateOutlet,\n AsyncPipe\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AnnotationComponent implements OnDestroy {\n @Input() visibleRect: DOMRect;\n\n @Input() set annotation(annotation: Annotation) {\n this._annotation = annotation;\n }\n\n get annotation(): Annotation {\n return this._annotation;\n }\n\n @ViewChild('annotationNode', {static: false})\n set node(node: ElementRef) {\n this._node = node;\n this.init();\n this.cdr.detectChanges();\n }\n\n get node() {\n return this._node;\n }\n\n x: Observable<any>;\n y: Observable<any>;\n\n private drag: d3.DragBehavior<any, any, any>;\n private _annotation: Annotation;\n private _node: ElementRef;\n\n constructor(\n private scaleService: ScaleService,\n private cdr: ChangeDetectorRef,\n private chartService: ChartService) {\n this.x = this.scaleService.scales.pipe(map((_) => _.x.get(this.annotation.xAxisIndex ?? 0)?.scale));\n this.y = this.scaleService.scales.pipe(map((_) => _.y.get(this.annotation.yAxisIndex ?? 0)?.scale));\n this.drag = d3.drag();\n }\n\n @HostListener('click', ['$event']) click(event: MouseEvent) {\n this.chartService.emitAnnotation({\n event,\n target: this.annotation\n });\n }\n\n @HostListener('contextmenu', ['$event']) contextMenu(event: MouseEvent) {\n this.chartService.emitAnnotation({\n event,\n target: this.annotation\n });\n }\n\n\n ngOnDestroy() {\n this.drag.on('drag end', null);\n }\n\n private init() {\n\n d3.select(this.node.nativeElement).datum(this.annotation);\n\n const offsetPx = 10;\n const nodeRect = this.node.nativeElement.getBoundingClientRect();\n\n if (this.annotation.draggable) {\n this.drag.on('drag end', async (event, d: Annotation) => {\n\n const x = await lastValueFrom(this.x.pipe(take(1)));\n const y = await lastValueFrom(this.y.pipe(take(1)));\n\n d.dx += event.dx;\n d.dy += event.dy;\n\n // x constraint\n if ((d.dx + x(d.point.x) - offsetPx) <= 0) {\n d.dx = -x(d.point.x) + offsetPx;\n }\n\n if (d.dx + x(d.point.x) + nodeRect.width - offsetPx >= this.visibleRect.width) {\n d.dx = this.visibleRect.width - x(d.point.x) - nodeRect.width + offsetPx;\n }\n\n // y constraint\n if ((d.dy + y(d.point.y) - offsetPx) <= 0) {\n d.dy = -y(d.point.y) + offsetPx;\n }\n\n if (d.dy + y(d.point.y) + nodeRect.height - offsetPx >= this.visibleRect.height) {\n d.dy = Math.abs(y(d.point.y) - this.visibleRect.height) - nodeRect.height +offsetPx;\n }\n\n this.cdr.detectChanges();\n this.chartService.emitMoveAnnotation({\n event,\n target: d\n });\n });\n\n d3.select(this.node.nativeElement).call(this.drag);\n }\n }\n}\n","@if ({\n x: x | async,\n y: y | async\n}; as data) {\n @if (data.x && data.y) {\n <svg:circle\n [attr.r]=\"annotation.style?.radius ?? 5\"\n [attr.cx]=\"data.x(annotation.point.x)\"\n [attr.fill]=\"annotation?.style?.fill ?? 'var(--color-text-90)'\"\n [attr.cy]=\"data.y(annotation.point.y)\">\n </svg:circle>\n <svg:line\n [attr.x1]=\"data.x(annotation.point.x)\"\n [attr.y1]=\"data.y(annotation.point.y)\"\n [attr.x2]=\"data.x(annotation.point.x) + (annotation.dx ?? 0)\"\n [attr.y2]=\"data.y(annotation.point.y) + (annotation.dy ?? 0)\"\n [attr.stroke]=\"annotation.style?.stroke ?? 'var(--color-text-90)'\"\n [attr.stroke-width]=\"annotation.style?.strokeWidth ?? 1\"\n [attr.stroke-dasharray]=\"annotation.style?.strokeDasharray ?? null\"\n >\n </svg:line>\n <svg:foreignObject\n class=\"position-absolute\"\n [attr.width]=\"node?.nativeElement.offsetWidth ?? 0\"\n [attr.height]=\"node?.nativeElement.offsetHeight ?? 0\"\n [attr.x]=\"data.x(annotation.point.x) + (annotation.dx ?? 0) - 10\"\n [attr.y]=\"data.y(annotation.point.y) + (annotation.dy ?? 0) - 10\">\n <div\n #annotationNode\n [style.background-color]=\"annotation.style?.fill ?? 'var(--color-global-bgmain)'\"\n [style.cursor]=\"annotation?.draggable ? 'move' : 'default'\"\n [className]=\"'padding-h-2 ' + annotation.className ?? ''\"\n style=\"border-radius: 2px; display: inline-block;\">\n @if (annotation.template) {\n <ng-container *ngTemplateOutlet=\"annotation.template;context: {$implicit: annotation}\"></ng-container>\n } @else {\n {{ annotation.note?.label }}\n }\n </div>\n </svg:foreignObject>\n }\n}\n","import {ChangeDetectorRef, Component, Input, OnInit} from '@angular/core';\nimport {ScaleService} from \"../../service/scale.service\";\nimport {map, Observable, tap} from \"rxjs\";\nimport {ChartService} from \"../../service/chart.service\";\nimport {AsyncPipe} from '@angular/common';\n\n@Component({\n selector: '[teta-crosshair]',\n templateUrl: './crosshair.component.html',\n styleUrls: ['./crosshair.component.scss'],\n standalone: true,\n imports: [\n AsyncPipe,\n ]\n})\nexport class CrosshairComponent implements OnInit {\n\n @Input() size: DOMRect;\n transform: Observable<any>;\n\n constructor(private scaleService: ScaleService, private chartService: ChartService, private cdr: ChangeDetectorRef) {\n }\n\n ngOnInit(): void {\n this.transform = this.chartService.pointerMove.pipe(\n map((event: PointerEvent) => {\n return {\n x: event.type === 'mouseleave' ? -9999 : event.offsetX,\n y: event.type === 'mouseleave' ? -9999 : event.offsetY\n }\n }),\n tap(() => {\n setTimeout(() => {\n this.cdr.detectChanges();\n })\n\n })\n )\n\n }\n\n}\n","@if (transform | async; as t) {\n <svg:line [attr.x1]=\"t.x\" y1=\"0\" [attr.x2]=\"t.x\" [attr.y2]=\"size.height\" stroke=\"var(--color-text-90)\"\n stroke-width=\"0.5\"></svg:line>\n <svg:line x1=\"0\" [attr.y1]=\"t.y\" [attr.x2]=\"size.width\" [attr.y2]=\"t.y\" stroke=\"var(--color-text-90)\"\n stroke-width=\"0.5\"></svg:line>\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n Input, NgZone, OnChanges, OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport {IChartConfig} from '../model/i-chart-config';\nimport {BrushService} from '../service/brush.service';\nimport {ChartService} from '../service/chart.service';\nimport {Axis} from '../core/axis/axis';\nimport {BrushType} from '../model/enum/brush-type';\nimport * as d3 from 'd3';\nimport {BrushMessage} from '../model/i-broadcast-message';\nimport {filter, takeWhile} from 'rxjs';\n\n@Directive({\n selector: '[tetaBrushable]',\n standalone:true\n})\nexport class BrushableDirective implements OnDestroy, OnInit, AfterViewInit, OnChanges {\n @Input() config: IChartConfig;\n @Input() axis: Axis;\n\n private selection: number[];\n private brush: d3.BrushBehavior<any>;\n private brushMap = new Map<BrushType, d3.BrushBehavior<any>>()\n .set(BrushType.x, d3.brushX())\n .set(BrushType.y, d3.brushY());\n private _alive = true;\n private _container;\n\n constructor(\n private brushService: BrushService,\n private chartService: ChartService,\n private element: ElementRef,\n private zone: NgZone\n ) {\n this._container = d3.select(this.element.nativeElement);\n }\n\n ngOnInit() {\n this.brushService.brushDomain.pipe(\n takeWhile(() => this._alive),\n filter((brush) => brush.chartId !== this.config.id)\n ).subscribe((brush) => {\n this._container.call(\n this.brush.move,\n [\n Math.floor(brush.selection[0]),\n Math.floor(brush.selection[1]),\n ].map(this.axis.scale)\n );\n });\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n\n ngAfterViewInit() {\n if(this.config?.brush?.enable) {\n const brushMessage = new BrushMessage({\n chartId: this.config.id,\n selection: [this.config?.brush?.from, this.config?.brush?.to],\n mode: 'init'\n });\n this.brushService.setBrush(brushMessage);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.hasOwnProperty('config')) {\n this.clearPreviousSelection();\n }\n\n if (this.config?.brush?.enable) {\n this.applyBrush(\n this.config,\n this.axis.scale\n );\n }\n }\n\n applyBrush(config: IChartConfig, brushScale: any) {\n this.brush?.on('start brush end', null);\n if (config.brush?.enable) {\n this.brush = this.brushMap.get(config?.brush?.type ?? BrushType.x);\n this.brush.on('start brush end', (_: d3.D3BrushEvent<any>) => {\n if (_.sourceEvent) {\n if (!_.selection) return;\n const [from, to] = _.selection as number[];\n if (to - from === 0) {\n const selection: number[] =\n this.selection?.map(brushScale) ??\n [config.brush?.from, config.brush?.to].map(brushScale);\n const halfBrushHeight = (selection[1] - selection[0]) / 2;\n const invertedSelection: number[] = [\n from - halfBrushHeight,\n to + halfBrushHeight,\n ].map(brushScale.invert);\n\n if (\n invertedSelection[1] - invertedSelection[0] >\n config.brush?.max\n ) {\n this._container.call(\n this.brush.move,\n [\n Math.floor(invertedSelection[0]),\n Math.floor(invertedSelection[0] + config.brush?.max),\n ].map(brushScale)\n );\n return;\n }\n\n if (\n invertedSelection[1] - invertedSelection[0] <\n config.brush?.min\n ) {\n this._container.call(\n this.brush.move,\n [\n Math.floor(invertedSelection[0]),\n Math.ceil(invertedSelection[0] + config.brush?.min),\n ].map(brushScale)\n );\n return;\n }\n\n this._container.call(this.brush.move, [\n from - halfBrushHeight,\n to + halfBrushHeight,\n ]);\n return;\n }\n\n if (\n brushScale.invert(to) - brushScale.invert(from) >\n config.brush?.max\n ) {\n this._container.call(\n this.brush.move,\n this.selection\n ? [\n this.selection[0],\n this.selection[0] + config.brush?.max,\n ].map(brushScale)\n : [config.brush?.from, config.brush?.to].map(brushScale)\n );\n return;\n }\n\n if (\n brushScale.invert(to) - brushScale.invert(from) <\n config.brush?.min\n ) {\n this._container.call(\n this.brush.move,\n this.selection\n ? [\n this.selection[0],\n this.selection[0] + config.brush?.min,\n ].map(brushScale)\n : [config.brush?.from, config.brush?.to].map(brushScale)\n );\n return;\n }\n\n if (_.sourceEvent instanceof MouseEvent) {\n this.selection = _.selection.map(brushScale.invert);\n }\n\n const brushMessage = new BrushMessage({\n chartId: this.config.id,\n selection: [brushScale.invert(from), brushScale.invert(to)],\n mode: _.mode\n });\n this.brushService.setBrush(brushMessage);\n }\n });\n\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n this._container.call(this.brush);\n\n let domain = brushScale.domain();\n\n if (config?.brush?.from) {\n domain[0] = config.brush.from;\n }\n\n if (config?.brush?.to) {\n domain[1] = config.brush.to;\n }\n\n this._container.call(\n this.brush.move,\n this.selection\n ? this.selection.map(brushScale)\n : domain.map(brushScale),\n {}\n );\n }, 0);\n });\n }\n }\n\n clearPreviousSelection() {\n this.selection = null;\n }\n}\n","import {NgZone} from '@angular/core';\nimport {MonoTypeOperatorFunction, Observable, pipe} from 'rxjs';\n\nexport function tetaZoneFull<T>(ngZone: NgZone): MonoTypeOperatorFunction<T> {\n return source =>\n new Observable(subscriber =>\n source.subscribe({\n next: value => ngZone.run(() => subscriber.next(value)),\n error: (error: unknown) => ngZone.run(() => subscriber.error(error)),\n complete: () => ngZone.run(() => subscriber.complete()),\n }),\n );\n}\n\nexport function tetaZoneFree<T>(ngZone: NgZone): MonoTypeOperatorFunction<T> {\n return source =>\n new Observable(subscriber =>\n ngZone.runOutsideAngular(() => source.subscribe(subscriber)),\n );\n}\n\nexport function tetaZoneOptimized<T>(ngZone: NgZone): MonoTypeOperatorFunction<T> {\n return pipe(tetaZoneFree(ngZone), tetaZoneFull(ngZone));\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n NgZone,\n OnDestroy,\n} from '@angular/core';\nimport {\n animationFrameScheduler,\n combineLatest,\n map,\n Observable,\n observeOn,\n shareReplay,\n withLatestFrom,\n} from 'rxjs';\n\nimport { Axis } from '../core/axis/axis';\nimport { BasePoint } from '../model/base-point';\nimport { AxisOrientation } from '../model/enum/axis-orientation';\nimport { BrushType } from '../model/enum/brush-type';\nimport { ZoomType } from '../model/enum/zoom-type';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { IScalesMap } from '../model/i-scales-map';\nimport { PlotBand } from '../model/plot-band';\nimport { Series } from '../model/series';\nimport { ChartService } from '../service/chart.service';\nimport { ScaleService } from '../service/scale.service';\nimport { TooltipComponent } from './tooltip/tooltip.component';\nimport { XAxisComponent } from './x-axis/x-axis.component';\nimport { ZoomableDirective } from '../directives/zoomable.directive';\nimport { YAxisComponent } from './y-axis/y-axis.component';\nimport { AsyncPipe, KeyValuePipe } from '@angular/common';\nimport { PlotBandComponent } from './plotband/plot-band.component';\nimport { GridlinesComponent } from './gridlines/gridlines.component';\nimport { SeriesHostComponent } from './series-host/series-host.component';\nimport { PlotlineComponent } from './plotline/plotline.component';\nimport { AnnotationComponent } from './annotation/annotation.component';\nimport { CrosshairComponent } from './crosshair/crosshair.component';\nimport { BrushableDirective } from '../directives/brushable.directive';\nimport { tetaZoneFull } from '../../observable/zoneObservable';\n\ntype Opposite = boolean;\ntype DisplayPlotBand = {\n axis: Axis;\n plotBand: PlotBand;\n};\n@Component({\n selector: 'teta-chart-container',\n templateUrl: './chart-container.component.html',\n styleUrls: ['./chart-container.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n TooltipComponent,\n ZoomableDirective,\n XAxisComponent,\n YAxisComponent,\n AsyncPipe,\n KeyValuePipe,\n PlotBandComponent,\n GridlinesComponent,\n SeriesHostComponent,\n PlotlineComponent,\n AnnotationComponent,\n CrosshairComponent,\n BrushableDirective,\n ]\n})\nexport class ChartContainerComponent implements AfterViewInit, OnDestroy {\n config: Observable<IChartConfig>;\n scales: Observable<IScalesMap>;\n size: Observable<DOMRect>;\n visibleRect: Observable<any>;\n brushScale: Observable<any>;\n zoomType = ZoomType;\n plotBands: Observable<DisplayPlotBand[]>;\n\n private _observer: ResizeObserver;\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 _scaleService: ScaleService,\n private _elementRef: ElementRef,\n private _zone: NgZone\n ) {\n this.config = this._svc.config;\n this.size = this._svc.size;\n\n this.scales = this._scaleService.scales.pipe(\n observeOn(animationFrameScheduler),\n tetaZoneFull(this._zone),\n shareReplay({\n bufferSize: 1,\n refCount: true,\n })\n );\n\n this.plotBands = combineLatest([this.config, this.scales]).pipe(\n map(([config, scales]) => {\n const bands: DisplayPlotBand[] = [];\n config.xAxis?.forEach((axis, index) => {\n axis.plotBands?.forEach(band => {\n bands.push({\n plotBand: band,\n axis: scales.x.get(index),\n });\n });\n });\n config.yAxis?.forEach((axis, index) => {\n axis.plotBands?.forEach(band => {\n bands.push({\n plotBand: band,\n axis: scales.y.get(index),\n });\n });\n });\n\n return bands.sort((a, b) => a.plotBand.order - b.plotBand.order);\n })\n );\n\n this.brushScale = this._scaleService.scales.pipe(\n withLatestFrom(this.config),\n map((data: [IScalesMap, IChartConfig]) => {\n const [{ x, y }, config] = data;\n\n return config.brush?.type === BrushType.x ||\n config?.zoom?.type === ZoomType.x\n ? x.get(0)?.scale\n : y.get(0)?.scale;\n }),\n shareReplay({\n bufferSize: 1,\n refCount: true,\n })\n );\n\n this.visibleRect = combineLatest([\n this.size,\n this.scales,\n this.config,\n ]).pipe(\n map((data: [DOMRect, IScalesMap, IChartConfig]) => {\n const [size, { x, y }, config] = data;\n const yAxesArray = Array.from(y.values());\n const xAxesArray = Array.from(x.values());\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 return {\n x: left + config.bounds?.left,\n y: top + config.bounds?.top,\n width:\n size.width -\n left -\n right -\n config.bounds?.left -\n config.bounds?.right,\n height:\n size.height -\n top -\n bottom -\n config.bounds?.top -\n config.bounds?.bottom,\n };\n }),\n tetaZoneFull(this._zone),\n shareReplay({\n bufferSize: 1,\n refCount: true,\n })\n );\n }\n\n ngAfterViewInit(): void {\n this._observer = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n requestAnimationFrame(() => {\n if (\n !Array.isArray(entries) ||\n !entries.length ||\n entries[0].contentRect.width <= 0 ||\n entries[0].contentRect.height <= 0\n ) {\n return;\n }\n this._svc.setSize(entries[0].contentRect);\n });\n });\n this._observer.observe(this._elementRef.nativeElement);\n }\n\n ngOnDestroy() {\n this._observer.unobserve(this._elementRef.nativeElement);\n this._observer.disconnect();\n }\n\n private sumSize = (acc, curr) => acc + curr.selfSize;\n\n getTranslate(axis?: Axis, size?: DOMRect): Observable<string> {\n return this.scales.pipe(\n withLatestFrom(this.config),\n map((data: [IScalesMap, IChartConfig]) => {\n const [{ x, y }, config] = data;\n const xAxesArray = Array.from(x.values());\n const yAxesArray = Array.from(y.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 config.bounds?.right\n );\n const nonOppisteTranslateY = nonOppositeOffsetY.reduce(\n (acc, curr) => acc + curr.selfSize,\n config.bounds?.left\n );\n\n const oppositeTranslateX = oppositeOffsetX.reduce(\n (acc, curr) => acc + curr.selfSize,\n config.bounds?.top\n );\n\n const nonOppisteTranslateX = nonOppositeOffsetX.reduce(\n (acc, curr) => acc + curr.selfSize,\n config.bounds?.bottom\n );\n\n const left = yAxesArray\n .filter(_ => _.options.visible && _.options.opposite !== true)\n .reduce((acc, curr) => acc + curr.selfSize, config.bounds?.left);\n\n const top = xAxesArray\n .filter(_ => _.options.visible && _.options.opposite === true)\n .reduce((acc, curr) => acc + curr.selfSize, config.bounds?.top);\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 }\n\n click(\n event: MouseEvent,\n xScales: Map<number, Axis>,\n yScales: Map<number, Axis>\n ) {\n const x = xScales.get(0)?.scale;\n const y = yScales.get(0)?.scale;\n this._svc.emitChartClick({\n event: event,\n target: {\n x: x.invert(event.offsetX),\n y: y.invert(event.offsetY),\n },\n });\n }\n\n contextMenu(\n event: MouseEvent,\n xScales: Map<number, Axis>,\n yScales: Map<number, Axis>\n ) {\n const x = xScales.get(0)?.scale;\n const y = yScales.get(0)?.scale;\n this._svc.emitChartContextMenu({\n event: event,\n target: {\n x: x.invert(event.offsetX),\n y: y.invert(event.offsetY),\n },\n });\n }\n\n mouseMove(event) {\n this._svc.setPointerMove(event);\n }\n\n mouseLeave(event) {\n this._svc.setPointerMove(event);\n }\n\n trackSerie(index, item: Series<BasePoint>) {\n return item.name?.length ? item.name : index;\n }\n}\n","@if ({\n size: size | async,\n config: config | async,\n scales: scales | async,\n plotBands: plotBands | async,\n visibleRect: visibleRect | async\n}; as data) {\n @if (data.config?.tooltip?.enable) {\n <teta-tooltip [size]=\"data.size\"\n [config]=\"data.config\"></teta-tooltip>\n }\n @if (data.size?.height > 0\n && data.size?.width > 0\n && data.visibleRect?.height > 0\n && data.visibleRect?.width > 0\n && data.scales?.x.size === data.config.xAxis.length\n && data.scales?.y.size === data.config.yAxis.length) {\n <svg height=\"100%\" width=\"100%\" class=\"position-absolute\">\n <g class=\"y-axis-container\">\n @for (item of data.scales.y | keyvalue; track item.value.index) {\n @if (item.value.selfSize > 0\n && item.value.options.visible\n && data.scales.x.size > 0\n && data.scales.y.size > 0) {\n <g\n teta-y-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"item.value.options.opposite ? 0 : -item.value.selfSize\"\n [attr.y]=\"0\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.width]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></rect>\n }\n }\n </g>\n <g class=\"x-axis-container\">\n @for (item of data.scales.x | keyvalue; track item.value.index) {\n @if (item.value.options.visible && data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g\n teta-x-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"0\"\n [attr.y]=\"item.value.options.opposite ? -item.value.selfSize : 0\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></rect>\n }\n }\n </g>\n </svg>\n }\n @if (data.size?.height > 0\n && data.size?.width > 0\n && data.visibleRect?.height > 0\n && data.visibleRect?.width > 0\n && data.scales?.x.size === data.config.xAxis.length\n && data.scales?.y.size === data.config.yAxis.length) {\n <svg\n tetaZoomable\n tetaBrushable\n class=\"position-absolute\"\n [size]=\"data.visibleRect\"\n [config]=\"data.config\"\n [axis]=\"data.config?.zoom?.type === zoomType.x ? data.scales.x.get(0) : data.scales.y.get(0)\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.viewBox]=\"'0 0 ' + data.visibleRect.width + ' ' + data.visibleRect.height\"\n [style.transform]=\"'translate('+ data.visibleRect.x +'px, '+ data.visibleRect.y +'px)'\"\n (contextmenu)=\"contextMenu($event, data.scales.x, data.scales.y)\"\n (click)=\"click($event, data.scales.x, data.scales.y)\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousemove)=\"mouseMove($event)\">\n @if (data.config.gridLines?.enable !== false) {\n <g class=\"gridlines\"\n teta-gridlines\n [size]=\"data.size\"></g>\n }\n <g class=\"x-axis-plotband-container\">\n @for (plotBand of data.plotBands; track plotBand) {\n <g teta-plot-band\n [plotBand]=\"plotBand.plotBand\"\n [scale]=\"plotBand.axis.scale\"\n [size]=\"data.visibleRect\"\n [axis]=\"plotBand.axis\"></g>\n }\n </g>\n <g class=\"series-container\">\n @for (series of data.config.series; track series; ) {\n @if (series.visible) {\n <g teta-series-host\n [config]=\"data.config\"\n [series]=\"series\"></g>\n }\n }\n </g>\n <g class=\"x-axis-plotline-container\">\n @for (axis of data.config.xAxis; let i = $index; track axis) {\n @for (plotLine of axis.plotLines; track plotLine) {\n <g teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.x.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.x.get(i)\"></g>\n }\n }\n </g>\n <g class=\"y-axis-plotline-container\">\n @for (axis of data.config.yAxis; let i = $index; track axis; ) {\n @for (plotLine of axis.plotLines; track plotLine) {\n <g teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.y.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.y.get(i)\"></g>\n }\n }\n </g>\n <g class=\"annotations\">\n @for (annotation of data.config.annotations; track annotation) {\n <g teta-annotation\n [visibleRect]=\"data.visibleRect\"\n [annotation]=\"annotation\"></g>\n }\n </g>\n @if (data.config.tooltip?.showCrosshair) {\n <g class=\"crosshair\">\n <g teta-crosshair [size]=\"data.visibleRect\"></g>\n </g>\n }\n </svg>\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n} from '@angular/core';\nimport { Series } from '../model/series';\nimport { BasePoint } from '../model/base-point';\nimport { SeriesType } from '../model/enum/series-type';\nimport {ChartService} from \"../service/chart.service\";\n\n@Component({\n selector: 'teta-legend',\n templateUrl: './legend.component.html',\n styleUrls: ['./legend.component.scss'],\n standalone:true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LegendComponent {\n private sizeMapping = new Map<SeriesType, number>()\n .set(SeriesType.line, 2)\n .set(SeriesType.scatter, 2)\n .set(SeriesType.bar, 12)\n .set(SeriesType.area, 2)\n .set(SeriesType.block, 12)\n .set(SeriesType.blockArea, 2);\n\n @Input() series: Array<Series<BasePoint>>;\n @HostBinding('class.padding-bottom-4') classLegend = true;\n\n constructor(private chartService: ChartService) {}\n\n getHeight(serie: Series<BasePoint>) {\n return this.sizeMapping.get(serie.type ?? SeriesType.line);\n }\n\n click(serie: Series<BasePoint>) {\n this.chartService.toggleVisibilitySeries([serie.id]);\n }\n}\n","@for (serie of series; track serie.id) {\n @if (serie?.showInLegend !== false) {\n <div>\n <div class=\"legend-item cursor-pointer\"\n (click)=\"click(serie)\">\n <div class=\"legend-icon-form\"\n [style.height.px]=\"getHeight(serie)\"\n [style.border-top-color]=\"serie.visible ? serie.color : 'var(--color-text-30)'\"\n [style.border-top-style]=\"serie.style?.strokeDasharray ? 'dashed' : 'solid'\"\n [style.border-width.px]=\"serie.style?.strokeDasharray ? 1 : 2\"></div>\n <div class=\"legend-label\" style=\"user-select: none\"\n [style.text-decoration]=\"serie.visible ? 'none' : 'line-through'\">{{ serie.name }}\n </div>\n </div>\n </div>\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport {map, Observable, takeWhile, withLatestFrom} from 'rxjs';\n\nimport {Annotation} from '../model/annotation';\nimport {BasePoint} from '../model/base-point';\nimport {ScaleType} from '../model/enum/scale-type';\nimport {TooltipTracking} from '../model/enum/tooltip-tracking';\nimport {IChartConfig} from '../model/i-chart-config';\nimport {IChartEvent} from '../model/i-chart-event';\nimport {IPointMove} from '../model/i-point-move';\nimport {IScalesMap} from '../model/i-scales-map';\nimport {PlotBand} from '../model/plot-band';\nimport {PlotLine} from '../model/plot-line';\nimport {BrushService} from '../service/brush.service';\nimport {ChartService} from '../service/chart.service';\nimport {ScaleService} from '../service/scale.service';\nimport {ZoomService} from '../service/zoom.service';\nimport {ChartContainerComponent} from '../chart-container/chart-container.component';\nimport {AsyncPipe} from '@angular/common';\nimport {LegendComponent} from '../legend/legend.component';\n\n@Component({\n selector: 'teta-svg-chart',\n templateUrl: './chart.component.html',\n styleUrls: ['./chart.component.scss'],\n standalone: true,\n providers: [ChartService, ZoomService, ScaleService, BrushService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ChartContainerComponent,\n AsyncPipe,\n LegendComponent,\n ]\n})\nexport class ChartComponent implements OnInit, OnDestroy {\n hasSeriesData: Observable<boolean>;\n svcConfig: Observable<IChartConfig>;\n @Output()\n pointerMove: EventEmitter<IChartEvent<Map<number, number>>> =\n new EventEmitter<IChartEvent<Map<number, number>>>();\n\n @Output()\n plotBandsMove: EventEmitter<IChartEvent<PlotBand>> = new EventEmitter<\n IChartEvent<PlotBand>\n >();\n\n @Output()\n plotBandClick: EventEmitter<IChartEvent<PlotBand>> = new EventEmitter<\n IChartEvent<PlotBand>\n >();\n\n @Output()\n plotBandContextMenu: 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 @Output()\n chartClick: EventEmitter<IChartEvent<BasePoint>> = new EventEmitter<\n IChartEvent<BasePoint>\n >();\n\n @Output()\n chartContextMenu: EventEmitter<IChartEvent<BasePoint>> = new EventEmitter<\n IChartEvent<BasePoint>\n >();\n\n @Output()\n annotationContextMenu: EventEmitter<IChartEvent<Annotation>> =\n new EventEmitter<IChartEvent<Annotation>>();\n\n @Output()\n annotationClick: EventEmitter<IChartEvent<Annotation>> = new EventEmitter<\n IChartEvent<Annotation>\n >();\n\n @Output()\n annotationMove: EventEmitter<IChartEvent<Annotation>> = new EventEmitter<\n IChartEvent<Annotation>\n >();\n\n @Output()\n zoomServiceInstance: EventEmitter<ZoomService> =\n new EventEmitter<ZoomService>();\n\n @Output()\n brushServiceInstance: EventEmitter<BrushService> =\n new EventEmitter<BrushService>();\n\n @Input() set config(config: IChartConfig) {\n this.chartService.setConfig(config);\n this.zoomService.setBroadcastChannel(config?.zoom?.syncChannel);\n }\n\n private _alive = true;\n\n constructor(\n public chartService: ChartService,\n public zoomService: ZoomService,\n public brushService: BrushService,\n public scaleService: ScaleService\n ) {\n this.svcConfig = this.chartService.config;\n this.hasSeriesData = this.svcConfig.pipe(\n map(_ => _.series?.length > 0 && _.series?.some(_ => _.data?.length > 0))\n );\n }\n\n resetZoom() {\n this.scaleService.resetZoom();\n }\n\n ngOnInit(): void {\n this.zoomServiceInstance.emit(this.zoomService);\n this.brushServiceInstance.emit(this.brushService);\n\n this.chartService.pointerMove\n .pipe(\n takeWhile(() => this._alive),\n withLatestFrom(this.scaleService.scales, this.chartService.config)\n )\n .subscribe((data: [PointerEvent, IScalesMap, IChartConfig]) => {\n const [event, {x, y}, config] = data;\n const tooltipTracking = config?.tooltip?.tracking;\n if (tooltipTracking === TooltipTracking.y) {\n const result = new Map<number, number>();\n y.forEach((value, key) => {\n if (value.options.scaleType.type === ScaleType.band) {\n return;\n }\n result.set(key, value.scale.invert(event.offsetY));\n });\n this.pointerMove.emit({\n event: event,\n target: result,\n });\n } else {\n const result = new Map<number, number>();\n x.forEach((value, key) => {\n if (value.options.scaleType.type === ScaleType.band) {\n return;\n }\n result.set(key, value.scale.invert(event.offsetX));\n });\n this.pointerMove.emit({\n event: event,\n target: result,\n });\n }\n });\n\n this.chartService.plotBandEvent\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.plotBandsMove.emit(_);\n });\n\n this.chartService.plotLineMove\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.plotLinesMove.emit(_);\n });\n\n this.chartService.pointMove\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.pointMove.emit(_);\n });\n\n this.chartService.chartClick\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.chartClick.emit(_);\n });\n\n this.chartService.chartContextMenu\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.chartContextMenu.emit(_);\n });\n\n this.chartService.plotBandClick\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.plotBandClick.emit(_);\n });\n\n this.chartService.plotBandContextMenu\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.plotBandContextMenu.emit(_);\n });\n\n this.chartService.annotationContextMenu\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.annotationContextMenu.emit(_);\n });\n\n this.chartService.annotationClick\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.annotationClick.emit(_);\n });\n\n this.chartService.annotationMove\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.annotationMove.emit(_);\n });\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n}\n","@if ({\n hasSeriesData: hasSeriesData | async,\n svcConfig: svcConfig | async\n}; as data) {\n @if (data.hasSeriesData === true) {\n <div class=\"column column_auto\">\n <teta-chart-container class=\"chart-container position-relative\"></teta-chart-container>\n </div>\n @if (data.svcConfig.legend?.enable === true) {\n <teta-legend [series]=\"data.svcConfig.series\"></teta-legend>\n }\n } @else {\n <div class=\"column column_auto justify-content-center\">\n <span class=\"font-body-3 color-text-40 overflow-hidden text-overflow-ellipsis nowrap text-align-center\">\n <div #ref><ng-content></ng-content></div>\n @if (!ref.hasChildNodes()) {\n <span>\n No data\n </span>\n }\n </span>\n </div>\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnInit,\n} from '@angular/core';\nimport { filter, map, Observable } from 'rxjs';\n\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { BasePoint } from '../../../model/base-point';\nimport { FillType } from '../../../model/enum/fill-type';\nimport { ChartService } from '../../../service/chart.service';\nimport { ScaleService } from '../../../service/scale.service';\nimport { ZoomService } from '../../../service/zoom.service';\nimport { AsyncPipe, NgStyle } from '@angular/common';\n\n@Component({\n selector: 'svg:svg[teta-block-horizontal-series]',\n templateUrl: './block-horizontal-series.component.html',\n styleUrls: ['./block-horizontal-series.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n NgStyle,\n ]\n})\nexport class BlockHorizontalSeriesComponent<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit\n{\n x: Observable<any>;\n y: Observable<any>;\n displayPoints: Observable<BasePoint[]>;\n fillType = FillType;\n id: string;\n Math = Math;\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 this.id = (Date.now() + Math.random()).toString(36);\n }\n\n override ngOnInit(): void {\n this.x = this.scaleService.scales.pipe(\n map(_ => _.x.get(this.series.xAxisIndex)?.scale)\n );\n this.y = this.scaleService.scales.pipe(\n map(_ => _.y.get(this.series.yAxisIndex)?.scale)\n );\n\n this.displayPoints = this.x.pipe(\n filter(y => y),\n map(y => {\n return this.series.data.filter((point, index, arr) => {\n const [min, max] = y.domain();\n return (\n (point.x >= min ||\n point.x1 >= min ||\n arr[index + 1]?.x >= min ||\n arr[index + 1]?.x1 >= min) &&\n (point.x <= max ||\n point.x1 <= max ||\n arr[index - 1]?.x <= max ||\n arr[index - 1]?.x1 <= max)\n );\n });\n })\n );\n }\n\n mouseenter(point: BasePoint) {\n this.svc.setTooltip({\n point: point,\n series: this.series,\n });\n }\n\n mouseleave(point: BasePoint) {\n this.svc.setTooltip({\n point: null,\n series: this.series,\n });\n }\n}\n","@if ({\n y: y | async,\n x: x | async,\n points: displayPoints | async\n}; as data) {\n @if (series?.fillType === fillType.gradient) {\n <svg:defs>\n <svg:linearGradient [id]=\"'gradient-fill-' + id\" gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n </svg:defs>\n }\n @if (data.x && data.y) {\n @for (point of data.points; track point) {\n <svg:g (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\">\n <svg:rect\n x=\"0\"\n [attr.x]=\"data.x(point.x)\"\n [attr.width]=\"Math.abs(data.x(point.x1) - data.x(point.x))\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : point.iconId ? 'url(#pattern'+point.iconId+')' : point.color ?? series.style?.fill ?? series.color\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n height=\"100%\">\n </svg:rect>\n @if (point.text && data.x(point.x1) - data.x(point.x) > 8) {\n <svg:text [attr.transform]=\"'rotate(270)'\"\n [ngStyle]='{\"transform-origin\": (data.x(point.x1) + data.x(point.x)) / 2+\"px 50%\"}'\n y=\"50%\"\n [attr.x]=\"(data.x(point.x1) + data.x(point.x)) / 2\"\n text-anchor=\"middle\" alignment-baseline=\"middle\"\n text-anchor=\"middle\">{{ point.text }}\n </svg:text>\n }\n <svg:line y1=\"0\" y2=\"100%\" [attr.x1]=\"data.x(point.x)\" [attr.x2]=\"data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"></svg:line>\n <svg:line y1=\"0\" y2=\"100%\" [attr.x1]=\"data.x(point.x1)\" [attr.x2]=\"data.x(point.x1)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"></svg:line>\n </svg:g>\n }\n }\n}\n","/*\n * Public API Surface of chart\n */\n\nexport * from './chart/service/public-api';\nexport * from './chart/base/series-base.component';\nexport * from './chart/chart/chart.component';\nexport * from './chart/legend/legend.component';\nexport * from './chart/model/public-api';\nexport * from './chart/chart-container/series/public-api';\nexport * from './chart/core/axis/axis';\nexport * from './chart/core/utils/public-api'\nexport * from './observable/public-api'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.BroadcastService","i2.ChartService","i1.ChartService","i2.ZoomService","i2.ScaleService","i3.ZoomService","i1.ScaleService","i1.ZoomService","i3.ChartService","i1.BrushService","i3.BrushService","i4.ScaleService"],"mappings":"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"}
1
+ {"version":3,"file":"tetacom-svg-charts.mjs","sources":["../../src/chart/service/broadcast.service.ts","../../src/chart/service/brush.service.ts","../../src/chart/model/enum/scale-type.ts","../../src/chart/default/default-axis-config.ts","../../src/chart/model/enum/zoom-type.ts","../../src/chart/model/chart-bounds.ts","../../src/chart/model/enum/tooltip-tracking.ts","../../src/chart/model/enum/zoom-behavior-type.ts","../../src/chart/default/default-chart-config.ts","../../src/chart/model/enum/series-type.ts","../../src/chart/model/enum/fill-type.ts","../../src/chart/model/enum/clip-points-direction.ts","../../src/chart/default/default-series-config.ts","../../src/chart/service/chart.service.ts","../../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/core/axis/axis.ts","../../src/chart/model/i-broadcast-message.ts","../../src/chart/service/zoom.service.ts","../../src/chart/service/scale.service.ts","../../src/chart/base/series-base.component.ts","../../src/chart/model/enum/brush-type.ts","../../src/chart/model/enum/align.enum.ts","../../src/chart/model/enum/vertical-align.enum.ts","../../src/chart/core/utils/position-util.ts","../../src/chart/chart-container/tooltip/tooltip.component.ts","../../src/chart/chart-container/tooltip/tooltip.component.html","../../src/chart/chart-container/x-axis/x-axis.component.ts","../../src/chart/chart-container/x-axis/x-axis.component.html","../../src/chart/directives/zoomable.directive.ts","../../src/chart/chart-container/y-axis/y-axis.component.ts","../../src/chart/chart-container/y-axis/y-axis.component.html","../../src/chart/model/plot-band.ts","../../src/chart/chart-container/plotband/plot-band.component.ts","../../src/chart/chart-container/plotband/plot-band.component.html","../../src/chart/chart-container/gridlines/gridlines.component.ts","../../src/chart/chart-container/gridlines/gridlines.component.html","../../src/chart/chart-container/series/linear-series-base.ts","../../src/chart/model/enum/drag-point-type.ts","../../src/chart/directives/draggable-point.directive.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/chart-container/series/scatter-series/scatter-series.component.ts","../../src/chart/chart-container/series/scatter-series/scatter-series.component.html","../../src/chart/chart-container/series/block-series/block-series.component.ts","../../src/chart/chart-container/series/block-series/block-series.component.html","../../src/chart/chart-container/series/block-area-series/block-area-series.component.ts","../../src/chart/chart-container/series/block-area-series/block-area-series.component.html","../../src/chart/chart-container/series/area-series/area-series.component.ts","../../src/chart/chart-container/series/area-series/area-series.component.html","../../src/chart/default/defaultSeriesTypeMapping.ts","../../src/chart/chart-container/series-host/series-host.component.ts","../../src/chart/model/plot-line.ts","../../src/chart/chart-container/plotline/plotline.component.ts","../../src/chart/chart-container/plotline/plotline.component.html","../../src/chart/chart-container/annotation/annotation.component.ts","../../src/chart/chart-container/annotation/annotation.component.html","../../src/chart/chart-container/crosshair/crosshair.component.ts","../../src/chart/chart-container/crosshair/crosshair.component.html","../../src/chart/directives/brushable.directive.ts","../../src/observable/zoneObservable.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-container/series/block-horizontal-series/block-horizontal-series.component.ts","../../src/chart/chart-container/series/block-horizontal-series/block-horizontal-series.component.html","../../src/index.ts","../../src/tetacom-svg-charts.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {IBroadcastMessage, ZoomMessage} from '../model/i-broadcast-message';\nimport {filter, Observable, ReplaySubject} from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BroadcastService {\n private zoomEmitter: ReplaySubject<IBroadcastMessage<ZoomMessage>>;\n\n constructor() {\n this.zoomEmitter = new ReplaySubject<IBroadcastMessage<ZoomMessage>>(1);\n }\n\n broadcastZoom(value: IBroadcastMessage<ZoomMessage>) {\n this.zoomEmitter.next(value);\n }\n\n subscribeToZoom(channel: string): Observable<IBroadcastMessage<ZoomMessage>> {\n return this.zoomEmitter.asObservable().pipe(\n filter((msg) => channel && msg.channel === channel)\n );\n }\n}\n","import {Injectable} from '@angular/core';\nimport {Observable, ReplaySubject} from 'rxjs';\nimport {BrushMessage} from '../model/i-broadcast-message';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BrushService {\n brushDomain: Observable<BrushMessage>;\n private _brushDomain = new ReplaySubject<BrushMessage>(1);\n\n constructor() {\n this.brushDomain = this._brushDomain.asObservable();\n }\n\n setBrush(brush: BrushMessage) {\n this._brushDomain.next(brush);\n }\n}\n","export enum ScaleType {\n linear,\n log,\n symlog,\n pow,\n sqrt,\n time,\n band\n}\n","import { AxisOptions } from '../model/axis-options';\nimport { ScaleType } from '../model/enum/scale-type';\n\nexport const defaultAxisConfig: AxisOptions = {\n visible: true,\n zoom: true,\n scaleType: {\n type: ScaleType.linear,\n },\n niceTicks: false,\n};\n","export enum ZoomType {\n x,\n y,\n xy,\n}\n","export class ChartBounds {\n top?: number = 0;\n right?: number = 0;\n bottom?: number = 0;\n left?: number = 0;\n\n constructor(options?: {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n }) {\n this.top = options?.top || 0;\n this.right = options?.right || 0;\n this.bottom = options?.bottom || 0;\n this.left = options?.left || 0;\n }\n}\n","export enum TooltipTracking {\n x,\n y,\n}\n","export enum ZoomBehaviorType {\n move,\n wheel\n}\n","import {IChartConfig} from '../model/i-chart-config';\nimport {ZoomType} from '../model/enum/zoom-type';\nimport {ChartBounds} from '../model/chart-bounds';\nimport {TooltipTracking} from '../model/enum/tooltip-tracking';\nimport {ZoomBehaviorType} from \"../model/enum/zoom-behavior-type\";\n\nexport const defaultChartConfig = (): IChartConfig => ({\n name: null,\n zoom: {\n enable: true,\n type: ZoomType.x,\n syncType: ZoomType.xy,\n zoomBehavior: ZoomBehaviorType.move\n },\n bounds: new ChartBounds({\n bottom: 12,\n left: 12,\n top: 12,\n right: 12\n }),\n legend: {\n enable: true,\n },\n tooltip: {\n enable: true,\n showMarkers: true,\n tracking: TooltipTracking.x,\n showCrosshair: false,\n padding: {\n x: 16,\n y: 16\n }\n },\n xAxis: [],\n yAxis: [],\n series: [],\n gridLines: {\n enable: true\n }\n});\n","export enum SeriesType {\n line,\n bar,\n area,\n scatter,\n block,\n blockArea\n}\n","export enum FillType {\n default,\n gradient,\n}\nexport enum FillDirection {\n x,\n y,\n}\n","export enum ClipPointsDirection {\n x,\n y,\n none\n}\n\n","import {Series} from '../model/series';\nimport {BasePoint} from '../model/base-point';\nimport {SeriesType} from '../model/enum/series-type';\nimport {FillType} from '../model/enum/fill-type';\nimport {ClipPointsDirection} from \"../model/enum/clip-points-direction\";\n\nexport const defaultSeriesConfig = (): Series<BasePoint> => ({\n data: [],\n type: SeriesType.line,\n xAxisIndex: 0,\n yAxisIndex: 0,\n fillType: FillType.default,\n color: 'coral',\n visible: true,\n clipPointsDirection: ClipPointsDirection.x\n});\n","import { Injectable } from '@angular/core';\nimport {\n BehaviorSubject,\n filter,\n lastValueFrom,\n map,\n Observable,\n of,\n shareReplay,\n Subject,\n take,\n withLatestFrom,\n} from 'rxjs';\n\nimport { defaultAxisConfig } from '../default/default-axis-config';\nimport { defaultChartConfig } from '../default/default-chart-config';\nimport { defaultSeriesConfig } from '../default/default-series-config';\nimport { Annotation } from '../model/annotation';\nimport { BasePoint } from '../model/base-point';\nimport { ClipPointsDirection } from '../model/enum/clip-points-direction';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { IChartEvent } from '../model/i-chart-event';\nimport { IDisplayTooltip } from '../model/i-display-tooltip';\nimport { IPointMove } from '../model/i-point-move';\nimport { PlotBand } from '../model/plot-band';\nimport { PlotLine } from '../model/plot-line';\nimport { Series } from '../model/series';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ChartService {\n public id: Observable<string>;\n public config: Observable<IChartConfig>;\n public size: Observable<DOMRect>;\n public pointerMove: Observable<PointerEvent>;\n public tooltips: Observable<Map<Series<BasePoint>, IDisplayTooltip>>;\n public plotBandEvent: Observable<IChartEvent<PlotBand>>;\n public plotLineMove: Observable<IChartEvent<PlotLine>>;\n public plotBandClick: Observable<IChartEvent<PlotBand>>;\n public plotBandContextMenu: Observable<IChartEvent<PlotBand>>;\n public pointMove: Observable<IChartEvent<IPointMove>>;\n public annotationMove: Observable<IChartEvent<Annotation>>;\n public annotationClick: Observable<IChartEvent<Annotation>>;\n public annotationContextMenu: Observable<IChartEvent<Annotation>>;\n public chartClick: Observable<IChartEvent<BasePoint>>;\n public chartContextMenu: Observable<IChartEvent<BasePoint>>;\n\n private config$ = new BehaviorSubject<IChartConfig>(defaultChartConfig());\n private size$ = new BehaviorSubject<DOMRect>(null);\n private pointerMove$ = new Subject<PointerEvent>();\n private tooltips$ = new BehaviorSubject<\n Map<Series<BasePoint>, IDisplayTooltip>\n >(new Map());\n private plotBandEvent$ = new Subject<IChartEvent<PlotBand>>();\n private plotLineMove$ = new Subject<IChartEvent<PlotLine>>();\n private pointMove$ = new Subject<IChartEvent<IPointMove>>();\n private chartClick$ = new Subject<IChartEvent<BasePoint>>();\n private chartContextMenu$ = new Subject<IChartEvent<BasePoint>>();\n private annotationEvent$ = new Subject<IChartEvent<Annotation>>();\n private annotationMove$ = new Subject<IChartEvent<Annotation>>();\n\n private static _hiddenSeriesPostfix = 'hidden_series';\n\n constructor() {\n this.id = of((Date.now() + Math.random()).toString(36));\n\n this.config = this.config$.asObservable().pipe(\n withLatestFrom(this.id),\n map(this.setDefaults),\n map(this.setPreparationData),\n map(this.restoreLocalStorage),\n shareReplay({\n bufferSize: 1,\n refCount: true,\n })\n );\n\n this.size = this.size$.asObservable().pipe(filter(size => size != null));\n this.pointerMove = this.pointerMove$.asObservable();\n this.tooltips = this.tooltips$.asObservable();\n this.plotBandEvent = this.plotBandEvent$.asObservable();\n this.plotLineMove = this.plotLineMove$.asObservable();\n this.pointMove = this.pointMove$.asObservable();\n this.chartClick = this.chartClick$.asObservable();\n this.chartContextMenu = this.chartContextMenu$.asObservable();\n this.annotationClick = this.annotationEvent$\n .asObservable()\n .pipe(filter(_ => _?.event?.type === 'click'));\n this.annotationContextMenu = this.annotationEvent$\n .asObservable()\n .pipe(filter(_ => _?.event?.type === 'contextmenu'));\n this.annotationMove = this.annotationMove$.asObservable();\n\n this.plotBandClick = this.plotBandEvent$\n .asObservable()\n .pipe(filter(_ => _?.event?.type === 'click'));\n this.plotBandContextMenu = this.plotBandEvent$\n .asObservable()\n .pipe(filter(_ => _?.event?.type === 'contextmenu'));\n // this.zoomInstance = this.zoomInstance$.asObservable();\n // this.brushInstance = this.brushInstance$.asObservable();\n }\n\n public setConfig(config: IChartConfig) {\n this.clearTooltips();\n this.config$.next(config);\n }\n\n public setSize(size: DOMRect) {\n this.size$.next(size);\n }\n\n public setPointerMove(event: PointerEvent) {\n this.pointerMove$.next(event);\n }\n\n public setTooltip(tooltip: IDisplayTooltip) {\n const currentTooltips = this.tooltips$.value;\n if (!tooltip.point) {\n currentTooltips.delete(tooltip.series);\n } else {\n currentTooltips.set(tooltip.series, tooltip);\n }\n this.tooltips$.next(\n new Map<Series<BasePoint>, IDisplayTooltip>(currentTooltips)\n );\n }\n\n public clearTooltips() {\n this.tooltips$.next(new Map());\n }\n\n public async toggleVisibilitySeries(\n seriesIndex: Array<number | string>,\n visible?: boolean\n ) {\n if (seriesIndex?.length === 0) {\n return;\n }\n\n const currentConfig = await lastValueFrom(this.config.pipe(take(1)));\n\n seriesIndex.forEach(serieIndex => {\n const currentSerieIndex = currentConfig.series.findIndex(\n _ => _.id === serieIndex\n );\n\n if (currentSerieIndex === -1) {\n return;\n }\n currentConfig.series[currentSerieIndex].visible =\n visible !== undefined\n ? visible\n : !currentConfig.series[currentSerieIndex].visible;\n\n const seriesLinkCount = currentConfig.series.filter(\n _ =>\n _.yAxisIndex === currentConfig.series[currentSerieIndex].yAxisIndex &&\n _.visible === true\n ).length;\n currentConfig.yAxis[\n currentConfig.series[currentSerieIndex].yAxisIndex\n ].visible = seriesLinkCount !== 0;\n });\n\n try {\n this.saveCookie(currentConfig);\n } finally {\n this.config$.next(currentConfig);\n }\n }\n\n public emitMoveAnnotation(event: IChartEvent<Annotation>) {\n this.annotationMove$.next(event);\n }\n\n public emitAnnotation(event: IChartEvent<Annotation>) {\n this.annotationEvent$.next(event);\n }\n\n public emitPlotband(event: IChartEvent<PlotBand>) {\n this.plotBandEvent$.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 public emitChartClick(event: IChartEvent<BasePoint>) {\n this.chartClick$.next(event);\n }\n\n public emitChartContextMenu(event: IChartEvent<BasePoint>) {\n this.chartContextMenu$.next(event);\n }\n\n // public emitZoomInstance(event: ZoomService) {\n // this.zoomInstance$.next(event);\n // }\n //\n // public emitZoomInstance(event: ZoomService) {\n // this.zoomInstance$.next(event);\n // }\n\n private saveCookie(config: IChartConfig) {\n if (!config.name) return;\n const hiddenSeries = config.series?.filter(_ => !_.visible).map(_ => _.id);\n localStorage.setItem(\n `${config.name}_${ChartService._hiddenSeriesPostfix}`,\n JSON.stringify(hiddenSeries)\n );\n }\n\n private restoreLocalStorage(config: IChartConfig): IChartConfig {\n if (!config.name) return config;\n\n const hiddenSeries = localStorage.getItem(\n `${config.name}_${ChartService._hiddenSeriesPostfix}`\n );\n if (hiddenSeries) {\n const json = JSON.parse(hiddenSeries) as Array<string | number>;\n config.series = config.series.map((serie, index) => {\n serie.visible = !json.includes(serie.id);\n\n const currentSerieIndex = config.series.findIndex(\n _ => _.id === serie.id\n );\n\n if (currentSerieIndex !== -1) {\n const seriesLinkCount = config.series.filter(\n _ =>\n _.yAxisIndex === config.series[currentSerieIndex].yAxisIndex &&\n _.visible === true\n ).length;\n config.yAxis[config.series[currentSerieIndex].yAxisIndex].visible =\n seriesLinkCount !== 0;\n }\n\n return serie;\n });\n\n return config;\n }\n\n return config;\n }\n\n private setDefaults(data: [IChartConfig, string]): IChartConfig {\n let [config, id] = data;\n\n const defaultConfig = defaultConfig => {\n return source => {\n return Object.assign({}, defaultConfig, source);\n };\n };\n\n config = Object.assign({}, defaultChartConfig(), config);\n config.id = config.id ?? id;\n\n config.xAxis = config.xAxis.map(defaultConfig(defaultAxisConfig));\n config.yAxis = config.yAxis.map(defaultConfig(defaultAxisConfig));\n config.series = config.series.map(defaultConfig(defaultSeriesConfig()));\n\n config.series = config.series.map((_, index) => {\n return {\n ..._,\n data: _.data ?? [],\n id: _.id ?? index,\n };\n });\n\n const oppositeYCount = config.yAxis?.filter(_ => _.opposite);\n const oppositeXCount = config.xAxis?.filter(_ => _.opposite);\n\n const nonOppositeYCount = config.yAxis?.filter(_ => !_.opposite);\n const nonOppositeXCount = config.xAxis?.filter(_ => !_.opposite);\n\n if (nonOppositeXCount?.length > 1) {\n config.bounds.bottom = 0;\n }\n\n if (oppositeXCount?.length > 1) {\n config.bounds.top = 0;\n }\n\n if (nonOppositeYCount?.length > 1) {\n config.bounds.left = 0;\n }\n\n if (oppositeYCount?.length > 1) {\n config.bounds.right = 0;\n }\n\n config.tooltip = Object.assign(\n {},\n defaultChartConfig().tooltip,\n config.tooltip\n );\n\n config.zoom = Object.assign({}, defaultChartConfig().zoom, config.zoom);\n\n config.zoom.syncChannel = config.zoom?.syncChannel ?? id;\n\n return config;\n }\n\n private setPreparationData(config: IChartConfig): IChartConfig {\n if (config.inverted) {\n const xAxes = [...config.xAxis];\n const yAxes = [...config.yAxis];\n\n config.xAxis = yAxes;\n config.yAxis = xAxes;\n\n config.series = config.series?.map(serie => {\n const x = serie.xAxisIndex;\n const y = serie.yAxisIndex;\n serie.xAxisIndex = y;\n serie.yAxisIndex = x;\n return {\n ...serie,\n clipPointsDirection: ClipPointsDirection.y,\n data: serie?.data?.map(point => {\n return {\n ...point,\n x: point?.y,\n y: point?.x,\n x1: point?.y1,\n y1: point?.x1,\n };\n }),\n };\n });\n }\n\n if (config?.brush?.enable) {\n config.yAxis = config.yAxis.map(_ => ({ ..._, zoom: false }));\n config.xAxis = config.xAxis.map(_ => ({ ..._, zoom: false }));\n }\n\n return config;\n }\n}\n","export enum AxisOrientation {\n x,\n y\n}\n","export const getTextWidth = (\n inputText?: string | number | null,\n backupRatio = 0.5,\n fontSize = 10\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[], count = 10) {\n const [min, max] = extremes;\n const tickStep = (max - min) / count;\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';\nimport {ScaleType} from \"../../../model/enum/scale-type\";\n\nexport class AxisSizeBuilder implements IBuilder<Axis, number> {\n private titlePadding = 11;\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.options.tickFormat || settings.defaultFormatter();\n\n finalPadding += settings.options.title ? this.titlePadding : 0;\n\n const scale = settings.defaultScale()();\n scale.domain(settings.extremes)\n\n\n if(settings.options.scaleType.type === ScaleType.band) {\n scale.ticks = (ticks?: number) => {\n return scale.domain()\n }\n }\n const ticks = scale.ticks(20);\n\n const maxElementLengthIndex = maxIndex(\n ticks,\n (_) => formatter(_).length\n );\n\n finalPadding += getTextWidth(\n formatter(ticks[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 * as d3 from 'd3';\n\nimport { BasePoint } from '../../../model/base-point';\nimport { AxisOrientation } from '../../../model/enum/axis-orientation';\nimport { ScaleType } from '../../../model/enum/scale-type';\nimport { IBuilder } from '../../../model/i-builder';\nimport { Axis } from '../axis';\n\nexport class ExtremesBuilder implements IBuilder<Axis, number[] | string[]> {\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[] | string[] = [0, 1];\n\n build(settings: Axis): number[] | string[] {\n const options = settings.options;\n let extremes: number[] | string[] = [];\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 const accessor = this.extentAccessorMap.get(settings.orientation);\n\n if (settings.options.scaleType.type === ScaleType.band) {\n extremes = data.map(accessor);\n } else {\n extremes = data.length > 0 ? d3.extent(data, accessor) : [0, 1];\n }\n }\n\n if (hasMin) {\n extremes[0] = options?.min;\n }\n\n if (hasMax) {\n extremes[1] = options?.max;\n }\n if (\n typeof extremes[0] === 'number' &&\n typeof extremes[1] === 'number' &&\n extremes[0] === extremes[1]\n ) {\n extremes[0] = extremes[0] - 1;\n extremes[1] = extremes[1] + 1;\n }\n this.extremes = extremes;\n return this.extremes;\n }\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 { ScaleType } from '../../model/enum/scale-type';\n\nexport class Axis {\n private chartConfig: IChartConfig;\n private _orientation: AxisOrientation;\n private _index: number;\n private _extremes: number[] | string[] = [0, 0];\n private _selfSize: number;\n private _ticksValues: number[];\n private _options: AxisOptions;\n private _originDomain: [number, number] = [0, 0];\n\n private _scale: any;\n\n private defaultFormatters = new Map<ScaleType, any>()\n .set(ScaleType.linear, d3.format(',.5~r'))\n .set(ScaleType.time, d3.timeFormat('%d.%m.%Y'))\n .set(ScaleType.log, d3.format('~s'))\n .set(ScaleType.symlog, d3.format('~s'))\n .set(ScaleType.pow, d3.format('~s'))\n .set(ScaleType.sqrt, d3.format('~s'))\n .set(ScaleType.band, _ => {\n return _;\n });\n\n private defaultScales = new Map<ScaleType, any>()\n .set(ScaleType.linear, d3.scaleLinear)\n .set(ScaleType.log, d3.scaleLog)\n .set(ScaleType.symlog, d3.scaleSymlog)\n .set(ScaleType.pow, d3.scalePow)\n .set(ScaleType.sqrt, d3.scaleSqrt)\n .set(ScaleType.time, d3.scaleTime)\n .set(ScaleType.band, d3.scaleBand);\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 * 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\n axis.setOptions();\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} index\n * Index axis\n */\n private setIndex(index: number): 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 public setExtremes(): void {\n const builder = new ExtremesBuilder();\n this._extremes = builder.build(this);\n }\n\n public setOriginDomain(domain: [number, number]) {\n this._originDomain = domain;\n }\n\n public setScale(scale: any) {\n this._scale = scale;\n\n if (this.options.scaleType.type === ScaleType.band) {\n this._scale.ticks = () => {\n return this._scale.domain();\n };\n }\n }\n\n private setSelfSize(): void {\n this._selfSize = new AxisSizeBuilder().build(this);\n }\n\n private setTicksValues(): void {\n //this._ticksValues = generateTicks(this._extremes);\n }\n\n private setOptions(): void {\n const options =\n this.orientation === AxisOrientation.x\n ? this.chartConfig.xAxis[this.index]\n : this.chartConfig.yAxis[this.index];\n\n this._options = options;\n }\n\n get scale(): any {\n return this._scale;\n }\n\n get extremes(): Array<number | string> {\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(): number {\n return this._index;\n }\n\n get options(): AxisOptions {\n return this._options;\n }\n\n get originDomain(): [number, number] {\n return this._originDomain;\n }\n\n public defaultFormatter() {\n return this.defaultFormatters.get(this.options.scaleType.type);\n }\n\n public defaultScale() {\n return this.defaultScales.get(this.options.scaleType.type);\n }\n}\n","import {AxisOrientation} from './enum/axis-orientation';\nimport {ElementRef} from '@angular/core';\n\nexport type TransformStyle = {\n transition?: boolean;\n}\n\nexport type TargetAxis = {\n index: number,\n orientation: AxisOrientation\n}\n\nexport class ZoomMessage {\n eventType: 'start' | 'zoom' | 'end' | string;\n element?: ElementRef;\n axis: TargetAxis;\n domain?: [number, number];\n chartId: string;\n style?: TransformStyle;\n\n constructor(options?: {\n eventType: 'start' | 'zoom' | 'end' | string;\n element?: ElementRef;\n axis?: TargetAxis;\n domain?: [number, number]\n chartId: string;\n style?: TransformStyle;\n }) {\n this.eventType = options?.eventType;\n this.element = options?.element;\n this.axis = options?.axis;\n this.domain = options.domain;\n this.chartId = options?.chartId;\n this.style = options?.style;\n }\n}\n\nexport class BrushMessage {\n chartId: string;\n selection: [number, number];\n mode?: 'drag' | 'space' | 'handle' | 'center' | 'init';\n\n constructor(options?: {\n chartId: string;\n selection: [number, number];\n mode?: 'drag' | 'space' | 'handle' | 'center' | 'init';\n }) {\n this.chartId = options?.chartId;\n this.selection = options?.selection;\n this.mode = options?.mode;\n }\n}\n\nexport interface IBroadcastMessage<T> {\n channel: string;\n message: T;\n}\n","import {BehaviorSubject, combineLatest, filter, Observable, shareReplay, Subscription} from 'rxjs';\nimport {AxisOrientation} from '../model/enum/axis-orientation';\nimport {Injectable, OnDestroy} from '@angular/core';\nimport {IBroadcastMessage, ZoomMessage} from '../model/i-broadcast-message';\nimport {zoomIdentity} from 'd3';\nimport {BroadcastService} from './broadcast.service';\nimport {ChartService} from './chart.service';\nimport {IChartConfig} from \"../model/i-chart-config\";\nimport {ZoomType} from \"../model/enum/zoom-type\";\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ZoomService implements OnDestroy {\n zoomed: Observable<ZoomMessage>;\n\n private zoomed$ = new BehaviorSubject<ZoomMessage>(null);\n private broadcastChannel: string;\n private broadcastSub: Subscription;\n\n constructor(private _broadcast: BroadcastService,\n private _chart: ChartService) {\n this.zoomed = this.zoomed$.asObservable().pipe(shareReplay({\n bufferSize: 1,\n refCount: true\n }));\n }\n\n fireZoom(zoom: ZoomMessage) {\n this.zoomed$.next(zoom);\n }\n\n broadcastZoom(zoom: ZoomMessage) {\n if (this.broadcastChannel?.length) {\n this._broadcast.broadcastZoom({\n channel: this.broadcastChannel,\n message: zoom\n });\n }\n }\n\n setBroadcastChannel(channel: string) {\n if (this.broadcastSub) {\n this.broadcastSub?.unsubscribe();\n }\n this.broadcastChannel = channel;\n if (this.broadcastChannel?.length) {\n this.broadcastSub = combineLatest(\n [this._broadcast.subscribeToZoom(this.broadcastChannel), this._chart.config]\n )\n .pipe(filter(([zoom, config]: [IBroadcastMessage<ZoomMessage>, IChartConfig]) => {\n return zoom.message?.chartId !== config.id && (\n config.zoom.syncType === ZoomType.xy ||\n (zoom.message.axis.orientation === AxisOrientation.y && config.zoom.syncType === ZoomType.y) ||\n (zoom.message.axis.orientation === AxisOrientation.x && config.zoom.syncType === ZoomType.x)\n );\n }))\n .subscribe(([zoom, config]) => {\n this.fireZoom(zoom.message);\n });\n }\n }\n\n getD3Transform(targetDomain: [number, number],\n originalDomain: [number, number],\n scale,\n orientation: AxisOrientation,\n inverted: boolean) {\n const zoomScale = Math.abs(scale(originalDomain[1]) - scale(originalDomain[0])) / Math.abs(scale(targetDomain[1]) - scale(targetDomain[0]));\n let transform = zoomIdentity.scale(zoomScale);\n if (orientation === AxisOrientation.x) {\n if (!!inverted) {\n transform = transform.translate(-scale(Math.max(...targetDomain)), 0);\n } else {\n transform = transform.translate(-scale(Math.min(...targetDomain)), 0);\n }\n }\n\n if (orientation === AxisOrientation.y) {\n if (!!inverted) {\n transform = transform.translate(0, -scale(Math.min(...targetDomain)));\n } else {\n transform = transform.translate(0, -scale(Math.max(...targetDomain)));\n }\n }\n return transform;\n }\n\n ngOnDestroy() {\n this.broadcastSub?.unsubscribe();\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as d3 from 'd3';\nimport { ZoomTransform } from 'd3';\nimport {\n combineLatest,\n map,\n Observable,\n shareReplay,\n take,\n withLatestFrom,\n} from 'rxjs';\n\nimport { Axis } from '../core/axis/axis';\nimport { AxisOrientation } from '../model/enum/axis-orientation';\nimport { ScaleType } from '../model/enum/scale-type';\nimport { ZoomType } from '../model/enum/zoom-type';\nimport { ZoomMessage } from '../model/i-broadcast-message';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { IScalesMap } from '../model/i-scales-map';\nimport { ChartService } from './chart.service';\nimport { ZoomService } from './zoom.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ScaleService {\n public scales: Observable<IScalesMap>;\n\n private transformCacheX = new Map<number, ZoomTransform>();\n private transformCacheY = new Map<number, ZoomTransform>();\n\n private scaleMapping = new Map<ScaleType, any>()\n .set(ScaleType.linear, d3.scaleLinear)\n .set(ScaleType.time, d3.scaleTime)\n .set(ScaleType.log, d3.scaleLog)\n .set(ScaleType.symlog, d3.scaleSymlog)\n .set(ScaleType.pow, d3.scalePow)\n .set(ScaleType.sqrt, d3.scaleSqrt)\n .set(ScaleType.band, d3.scaleBand);\n\n constructor(\n private chartService: ChartService,\n private zoomService: ZoomService\n ) {\n this.scales = combineLatest([\n this.chartService.size,\n this.chartService.config,\n this.zoomService.zoomed,\n ]).pipe(\n map((data: [DOMRectReadOnly, IChartConfig, ZoomMessage]) => {\n const [size, config, zoom] = data;\n\n const xAxisMap = new Map<number, Axis>();\n const yAxisMap = new Map<number, Axis>();\n\n config.yAxis.map((_, index) => {\n yAxisMap.set(\n index,\n Axis.createAxis(AxisOrientation.y, config, index)\n );\n });\n\n config.xAxis.map((_, index) => {\n xAxisMap.set(\n index,\n Axis.createAxis(AxisOrientation.x, config, index)\n );\n });\n\n // Generate x scales\n const left = Array.from(yAxisMap.values())\n .filter(_ => _.options?.visible && _.options?.opposite)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const right = Array.from(yAxisMap.values())\n .filter(_ => _.options?.visible && _.options?.opposite !== true)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const finalWidth = (size.width || 0) - left - right;\n\n xAxisMap.forEach(axis => {\n let domain = axis.extremes;\n\n if (axis?.options.inverted) {\n domain = [...axis.extremes].reverse();\n }\n\n const scale = this.scaleMapping\n .get(axis.options.scaleType.type)()\n .domain(domain)\n .range([0, finalWidth - config.bounds.right]);\n\n if (axis.options.niceTicks) {\n scale.nice();\n }\n\n if (axis.options.scaleType.type === ScaleType.log) {\n scale.base(axis.options.scaleType.base);\n }\n\n if (axis.options.scaleType.type === ScaleType.band) {\n scale.paddingInner(0.1);\n scale.paddingOuter(0.1);\n scale.align(0.1);\n }\n\n axis.setScale(scale);\n axis.setOriginDomain(scale.domain());\n\n const hasCache = this.transformCacheX.has(axis.index);\n const shouldRestore =\n zoom?.axis?.orientation !== AxisOrientation.x ||\n zoom.axis?.index !== axis.index;\n\n if (hasCache && shouldRestore) {\n const restoredTransform = this.transformCacheX.get(axis.index);\n axis.setScale(restoredTransform.rescaleX(scale));\n }\n });\n\n if (zoom && zoom.domain) {\n if (zoom.axis?.orientation === AxisOrientation.x) {\n if (xAxisMap.has(zoom.axis.index)) {\n const x = xAxisMap.get(zoom.axis.index);\n const transform = this.zoomService.getD3Transform(\n zoom.domain,\n x.originDomain,\n x.scale,\n AxisOrientation.x,\n x.options.inverted\n );\n const rescaled = transform.rescaleX(x.scale.copy());\n x.setScale(rescaled);\n this.transformCacheX.set(x.index, transform);\n }\n }\n }\n\n // Generate y axis\n\n const top = Array.from(xAxisMap.values())\n .filter(_ => _.options?.visible && _.options?.opposite)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const bottom = Array.from(xAxisMap.values())\n .filter(_ => _.options?.visible && _.options?.opposite !== true)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const finalHeight =\n (size.height || 0) -\n top -\n bottom -\n config?.bounds?.top -\n config.bounds?.bottom;\n\n yAxisMap.forEach(axis => {\n let domain = axis.extremes;\n\n if (axis.orientation === AxisOrientation.y) {\n domain = [...axis.extremes].reverse();\n }\n\n if (axis?.options.inverted) {\n domain = domain.reverse();\n }\n\n const scale = this.scaleMapping\n .get(axis.options.scaleType.type)()\n .domain(domain)\n .range([config.bounds.top, finalHeight]);\n\n if (axis.options.niceTicks) {\n scale.nice();\n }\n\n if (axis.options.scaleType.type === ScaleType.log) {\n scale.base(axis.options.scaleType.base);\n }\n\n if (axis.options.scaleType.type === ScaleType.band) {\n scale.paddingInner(0.1);\n scale.paddingOuter(0.1);\n scale.align(0.1);\n }\n\n axis.setScale(scale);\n axis.setOriginDomain(scale.domain());\n\n const hasCache = this.transformCacheY.has(axis.index);\n\n const shouldRestore =\n zoom?.axis?.orientation !== AxisOrientation.y ||\n zoom.axis?.index !== axis.index;\n\n if (hasCache && shouldRestore) {\n const restoredTransform = this.transformCacheY.get(axis.index);\n axis.setScale(restoredTransform.rescaleY(scale));\n }\n });\n\n if (zoom && zoom.domain) {\n if (zoom.axis?.orientation === AxisOrientation.y) {\n if (yAxisMap.has(zoom.axis.index)) {\n const y = yAxisMap.get(zoom.axis.index);\n const transform = this.zoomService.getD3Transform(\n zoom.domain,\n y.originDomain,\n y.scale,\n AxisOrientation.y,\n y.options.inverted\n );\n const rescaled = transform.rescaleY(y.scale.copy());\n y.setScale(rescaled);\n this.transformCacheY.set(y.index, transform);\n }\n }\n }\n return {\n x: xAxisMap,\n y: yAxisMap,\n };\n }),\n shareReplay({\n bufferSize: 1,\n refCount: true,\n })\n );\n }\n\n resetZoom() {\n this.chartService.config\n .pipe(take(1), withLatestFrom(this.scales))\n .subscribe(([config, scales]: [IChartConfig, IScalesMap]) => {\n config.xAxis.forEach((axis, index) => {\n const scale = scales?.x?.get(index)?.originDomain;\n if (scale) {\n const msg = new ZoomMessage({\n eventType: 'end',\n axis: {\n index,\n orientation: AxisOrientation.x,\n },\n domain: scale,\n chartId: config.id,\n });\n this.zoomService.fireZoom(msg);\n if (\n config.zoom.syncChannel &&\n config.zoom.syncType === ZoomType.x\n ) {\n this.zoomService.broadcastZoom(msg);\n }\n }\n });\n config.yAxis.forEach((axis, index) => {\n const scale = scales?.y?.get(index)?.originDomain;\n if (scale) {\n const msg = new ZoomMessage({\n eventType: 'end',\n axis: {\n index,\n orientation: AxisOrientation.y,\n },\n domain: scale,\n chartId: config.id,\n });\n this.zoomService.fireZoom(msg);\n if (\n config.zoom.syncChannel &&\n config.zoom.syncType === ZoomType.y\n ) {\n this.zoomService.broadcastZoom(msg);\n }\n }\n });\n });\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n NgZone,\n OnInit,\n} from '@angular/core';\n\nimport {BasePoint} from '../model/base-point';\nimport {IChartConfig} from '../model/i-chart-config';\nimport {Series} from '../model/series';\nimport {ChartService} from '../service/chart.service';\nimport {ScaleService} from '../service/scale.service';\nimport {ZoomService} from '../service/zoom.service';\n\n@Component({\n template: '',\n standalone: true,\n\n})\nexport class SeriesBaseComponent<T extends BasePoint> implements OnInit {\n @Input()\n set config(config: IChartConfig) {\n this._config = config;\n }\n\n get config() {\n return this._config;\n }\n\n @Input()\n set series(series: Series<T>) {\n this._series = series;\n }\n\n get series() {\n return this._series;\n }\n\n protected _series: Series<T>;\n protected _config: IChartConfig;\n\n constructor(\n protected svc: ChartService,\n protected cdr: ChangeDetectorRef,\n protected scaleService: ScaleService,\n protected zoomService: ZoomService,\n protected element: ElementRef,\n protected zone?: NgZone\n ) {\n }\n\n ngOnInit(): void {\n }\n}\n","export enum BrushType {\n x,\n y,\n xy,\n}\n","export enum Align {\n left,\n right,\n center,\n auto,\n fitWidth,\n minWidth,\n outerLeft,\n outerRight,\n outerAuto\n}\n","export enum VerticalAlign {\n top,\n bottom,\n center,\n auto,\n innerTop,\n innerBottom,\n innerAuto\n}\n","import { IRect } from '../../model/i-rect';\nimport { Align } from '../../model/enum/align.enum';\nimport { VerticalAlign } from '../../model/enum/vertical-align.enum';\n\nexport class PositionUtil {\n public static getPosition(\n containerPosition: IRect,\n elementPosition: IRect,\n align: Align,\n verticalAlign: VerticalAlign,\n margin = 0,\n verticalMargin = 0,\n transformedParentRect: IRect = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n }\n ): IRect {\n const rect: IRect = {};\n const elementWidth = elementPosition.right - elementPosition.left;\n const elementHeight = elementPosition.bottom - elementPosition.top;\n const containerWidth = containerPosition.right - containerPosition.left;\n const containerHeight = containerPosition.bottom - containerPosition.top;\n if (align === Align.auto) {\n align = Align.left;\n if (window.innerWidth < containerPosition.left + elementWidth) {\n align = Align.right;\n }\n }\n if (align === Align.left) {\n rect.left = containerPosition.left + margin;\n }\n if (align === Align.right) {\n rect.left = containerPosition.right - elementWidth - margin;\n }\n if (align === Align.center) {\n rect.left =\n (containerPosition.left + containerPosition.right) / 2 -\n elementWidth / 2;\n }\n if (align === Align.outerAuto) {\n align = Align.outerRight;\n if (window.innerWidth < containerPosition.right + elementWidth) {\n align = Align.outerLeft;\n }\n }\n if (align === Align.outerLeft) {\n rect.left = containerPosition.left - elementWidth + margin;\n }\n if (align === Align.outerRight) {\n rect.left = containerPosition.right - margin;\n }\n\n if (align === Align.fitWidth) {\n rect.left = containerPosition.left + margin;\n rect.right = window.innerWidth - containerPosition.right + margin;\n }\n\n if (align === Align.minWidth) {\n rect.left = containerPosition.left + margin;\n rect.minWidth = containerWidth;\n }\n\n if (verticalAlign === VerticalAlign.auto) {\n if (\n containerPosition.bottom + elementHeight > window.innerHeight &&\n containerPosition.bottom >= window.innerHeight / 2\n ) {\n verticalAlign = VerticalAlign.top;\n } else {\n verticalAlign = VerticalAlign.bottom;\n }\n }\n if (verticalAlign === VerticalAlign.innerAuto) {\n if (\n containerPosition.bottom + elementHeight > window.innerHeight &&\n containerPosition.bottom >= window.innerHeight / 2\n ) {\n verticalAlign = VerticalAlign.innerTop;\n } else {\n verticalAlign = VerticalAlign.innerBottom;\n }\n }\n if (verticalAlign === VerticalAlign.top) {\n rect.top = containerPosition.top - elementHeight - verticalMargin;\n }\n if (verticalAlign === VerticalAlign.bottom) {\n rect.top = containerPosition.bottom + verticalMargin;\n }\n if (verticalAlign === VerticalAlign.innerTop) {\n rect.top = containerPosition.bottom - elementHeight - verticalMargin;\n }\n if (verticalAlign === VerticalAlign.innerBottom) {\n rect.top = containerPosition.top + verticalMargin;\n }\n if (verticalAlign === VerticalAlign.center) {\n rect.top =\n (containerPosition.top + containerPosition.bottom) / 2 -\n elementHeight / 2;\n }\n\n if (rect.left + elementWidth > window.innerWidth) {\n rect.left = window.innerWidth - elementWidth;\n }\n if (rect.left < 0) {\n rect.left = 0;\n }\n if (rect.top + elementHeight > window.innerHeight || rect.bottom < 0) {\n rect.bottom = 0;\n }\n if (rect.top < 0) {\n rect.top = 0;\n }\n if (\n verticalAlign === VerticalAlign.bottom ||\n verticalAlign === VerticalAlign.center ||\n verticalAlign === VerticalAlign.innerBottom\n ) {\n rect.maxHeight = window.innerHeight - rect.top;\n }\n if (\n verticalAlign === VerticalAlign.top ||\n verticalAlign === VerticalAlign.innerTop\n ) {\n rect.maxHeight = containerPosition.top;\n }\n if (!isNaN(rect.left)) {\n rect.left = rect.left - transformedParentRect.left;\n }\n if (!isNaN(rect.right)) {\n rect.right = rect.right - transformedParentRect.left;\n }\n if (!isNaN(rect.top)) {\n rect.top = rect.top - transformedParentRect.top;\n }\n if (!isNaN(rect.bottom)) {\n rect.bottom = rect.bottom\n ? rect.bottom - transformedParentRect.bottom\n : rect.bottom;\n }\n return rect;\n }\n\n public static setElementPosition(element: HTMLElement, rect: IRect): void {\n element.style.left = rect.left != null ? `${rect.left}px` : '';\n element.style.right = rect.right != null ? `${rect.right}px` : '';\n element.style.top = rect.top != null ? `${rect.top}px` : '';\n element.style.bottom = rect.bottom != null ? `${rect.bottom}px` : '';\n element.style.maxHeight =\n rect.maxHeight != null ? `${rect.maxHeight}px` : '';\n element.style.minWidth = rect.minWidth != null ? `${rect.minWidth}px` : '';\n }\n\n public static getMaxHeight(position: IRect): number | null {\n let maxHeight = null;\n maxHeight = 1;\n return maxHeight;\n }\n\n public static getMaxWidth(position: IRect): number | null {\n let maxWidth = null;\n maxWidth = 1;\n return maxWidth;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n NgZone,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport * as d3 from 'd3';\nimport { filter, map, Observable, tap } from 'rxjs';\n\nimport { IChartConfig } from '../../model/i-chart-config';\nimport { IDisplayTooltip } from '../../model/i-display-tooltip';\nimport { Series } from '../../model/series';\nimport { ChartService } from '../../service/chart.service';\nimport { ZoomService } from '../../service/zoom.service';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { PositionUtil } from '../../core/utils/position-util';\nimport { Align } from '../../model/enum/align.enum';\nimport { VerticalAlign } from '../../model/enum/vertical-align.enum';\n\n@Component({\n selector: 'teta-tooltip',\n templateUrl: './tooltip.component.html',\n standalone: true,\n styleUrls: ['./tooltip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n NgTemplateOutlet\n ]\n})\nexport class TooltipComponent implements OnInit {\n @Input() size: DOMRect;\n @Input() config: IChartConfig;\n\n @ViewChild('tooltip', { static: false, read: ElementRef })\n tooltip: ElementRef;\n\n position: Observable<{\n left?: number;\n top?: number;\n bottom?: number;\n right?: number;\n }>;\n\n displayTooltips: Observable<SafeHtml>;\n display: Observable<number>;\n tooltips: Observable<IDisplayTooltip[]>;\n\n constructor(\n private svc: ChartService,\n private cdr: ChangeDetectorRef,\n private zoomService: ZoomService,\n private sanitizer: DomSanitizer,\n private _zone: NgZone,\n private _elementRef: ElementRef\n ) {\n this.tooltips = this.svc.tooltips.pipe(map(_ => [..._.values()]));\n }\n getImplicit(t){\n return {$implicit: t} as any\n }\n ngOnInit(): void {\n this.display = this.svc.pointerMove.pipe(\n map((event: PointerEvent) => {\n return event.type === 'mousemove' ? 1 : 0;\n }),\n tap(() => {\n setTimeout(() => {\n this.cdr.detectChanges();\n });\n })\n );\n\n this.position = this.svc.pointerMove.pipe(\n filter(event => !!event),\n map(_ => {\n return this.getPosition(_);\n }),\n tap(() => this.cdr.detectChanges())\n );\n\n const transformHtml = (html): SafeHtml => {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n };\n\n const defaultFormatter = (tooltips: IDisplayTooltip[]): SafeHtml => {\n let html = '';\n const format = d3.timeFormat('%d.%m.%Y');\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'>\n x: ${\n (_.point.x as any) instanceof Date\n ? format(_.point.x as any)\n : _.point.x?.toFixed(2)\n }\n y: ${\n (_.point.y as any) instanceof Date\n ? format(_.point.y as any)\n : _.point.y?.toFixed(2)\n }\n </span>\n </span></div>`;\n });\n\n return transformHtml(html);\n };\n\n const formatter = this.config?.tooltip?.format;\n\n this.displayTooltips = this.svc.tooltips.pipe(\n map((tooltips: Map<Series<any>, IDisplayTooltip>) => {\n const tooltipList = [...tooltips.values()];\n if (tooltipList?.length < 1) {\n return '';\n }\n const formatted = formatter\n ? transformHtml(formatter(tooltipList))\n : defaultFormatter(tooltipList);\n return formatted;\n })\n );\n }\n\n private getPosition(event: PointerEvent) {\n if (!this.tooltip) {\n return null;\n }\n return PositionUtil.getPosition(\n {\n top: event.pageY,\n bottom: event.pageY,\n left: event.pageX,\n right: event.pageX,\n },\n this.tooltip?.nativeElement?.getBoundingClientRect(),\n Align.auto,\n VerticalAlign.top,\n 12\n );\n }\n\n format(input: number | Date): string {\n if (input instanceof Date) {\n const format = d3.timeFormat('%d.%m.%Y');\n return format(input);\n }\n\n const format = d3.format(',.5~r');\n return format(input);\n }\n}\n","@if ({p: position | async}; as data) {\n @if ((tooltips | async); as t) {\n @if (t.length > 0) {\n <div class=\"chart-tooltip color-text-90 bg-global-bgcard shadow-2\"\n #tooltip\n [style.position]=\"'fixed'\"\n [style.opacity]=\"display | async\"\n [hidden]=\"!data.p\"\n style=\"pointer-events: none; min-width: 200px;\"\n [style.left.px]=\"data.p?.left\"\n [style.top.px]=\"data.p?.top\"\n [style.bottom.px]=\"data.p?.bottom\"\n [style.right.px]=\"data.p?.right\">\n @if (config.tooltip?.template) {\n <ng-container *ngTemplateOutlet=\"config.tooltip.template; context: getImplicit(t)\"></ng-container>\n }\n @if (config.tooltip?.format) {\n <div [innerHTML]=\"displayTooltips | async\"></div>\n } @else {\n @if (!config.tooltip?.template) {\n <div class=\"padding-2 border-radius-1\">\n @for (tooltip of t; track tooltip) {\n <div class=\"display-flex align-center\">\n <span class=\"display-block margin-right-1\" [style.width.px]=\"10\" [style.height.px]=\"2\"\n [style.background-color]=\"tooltip.series?.color\">\n </span>\n <span class=\"font-title-3\">\n {{ tooltip.series?.name }}\n <span class=\"font-body-3\">\n x: {{ format(tooltip.point?.x) }}\n y: {{ format(tooltip.point?.y) }}\n </span>\n </span>\n </div>\n }\n </div>\n }\n }\n </div>\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input, OnChanges, OnDestroy,\n OnInit, SimpleChange, SimpleChanges,\n} from '@angular/core';\nimport {Axis} from '../../core/axis/axis';\nimport {BehaviorSubject, combineLatest, map, Observable, Subject, withLatestFrom} from 'rxjs';\nimport {ScaleService} from '../../service/scale.service';\nimport {getTextWidth} from '../../core/utils/get-text-width';\nimport * as d3 from 'd3';\nimport {ChartService} from '../../service/chart.service';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: '[teta-x-axis]',\n templateUrl: './x-axis.component.html',\n styleUrls: ['./x-axis.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n ]\n})\nexport class XAxisComponent implements OnInit, OnChanges, OnDestroy {\n x: Observable<any>;\n ticks: Observable<any[]>;\n\n @Input() axis: Axis;\n @Input() size: DOMRect;\n\n private update$ = new BehaviorSubject<void>(null);\n private _alive = true;\n\n constructor(private scaleService: ScaleService, private _svc: ChartService) {\n this.x = this.scaleService.scales.pipe(map((_) => {\n return _.x.get(this.axis.index)?.scale;\n }));\n\n\n this.ticks = combineLatest([this.x, this.update$]).pipe(\n withLatestFrom(this._svc.size),\n map((_: [[any, void], DOMRect]) => {\n const [[x], size] = _;\n\n const tickSize = x.ticks().map((_) => getTextWidth(this.axis.options.tickFormat ? this.axis.options.tickFormat(_) : this.axis.defaultFormatter()(_), 0.45, 11));\n return x.ticks(size.width / parseInt(d3.max(tickSize), 10) / 5);\n })\n );\n }\n\n getLabelTransform() {\n return `translate(${\n this.size.width / 2\n }, ${this.axis.options.opposite ? -32 : 32})`;\n }\n\n ngOnInit(): void {\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.hasOwnProperty('axis')) {\n this.update$.next();\n }\n }\n\n}\n","@if ({x: x | async, ticks: ticks | async}; as data) {\n @for (tick of data.ticks; track tick) {\n <svg:g text-anchor=\"middle\" [attr.transform]=\"'translate('+ data.x(tick) +', 0)'\">\n <text fill=\"var(--color-text-70)\" [attr.dy]=\"axis.options.opposite ? '-0.71em' : '0.71em'\"\n [attr.y]=\"axis.options.opposite ? 0 : 9\">\n {{ this.axis.options.tickFormat ? this.axis.options.tickFormat(tick) : this.axis.defaultFormatter()(tick) }}\n </text>\n <line stroke=\"var(--color-text-30)\" [attr.y2]=\"axis.options.opposite ? -6 : 6\"></line>\n </svg:g>\n }\n <svg:g class=\"label-axis font-caption\" [attr.transform]=\"getLabelTransform()\">\n <text fill=\"var(--color-text-70)\" text-anchor=\"middle\" dominant-baseline=\"middle\">\n {{ axis.options.title }}\n </text>\n </svg:g>\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n NgZone,\n OnDestroy,\n} from '@angular/core';\nimport { ZoomService } from '../service/zoom.service';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { Axis } from '../core/axis/axis';\nimport * as d3 from 'd3';\nimport { D3ZoomEvent, ZoomBehavior, zoomIdentity } from 'd3';\nimport { ZoomType } from '../model/enum/zoom-type';\nimport { AxisOrientation } from '../model/enum/axis-orientation';\nimport { ZoomMessage } from '../model/i-broadcast-message';\nimport { takeWhile } from 'rxjs';\nimport { ChartService } from '../service/chart.service';\nimport { ZoomBehaviorType } from '../model/enum/zoom-behavior-type';\nimport { ScaleType } from '../model/enum/scale-type';\n\n@Directive({\n selector: '[tetaZoomable]',\n standalone:true\n})\nexport class ZoomableDirective implements OnDestroy, AfterViewInit {\n @Input() config: IChartConfig;\n @Input() axis: Axis;\n @Input() size: DOMRect;\n\n @HostBinding('class.zoomable') private zoomable = false;\n @HostBinding('class.crosshair') private crosshair = false;\n\n private _element: d3.Selection<SVGElement, any, any, any>;\n private zoom: ZoomBehavior<any, any>;\n private alive = true;\n\n @HostListener('mouseenter')\n mouseenter() {\n this.zoom?.on('start zoom end', this.zoomed);\n this._element?.call(this.zoom).on('dblclick.zoom', null);\n // Run wheel event listener\n if (this.config?.zoom?.zoomBehavior === ZoomBehaviorType.wheel) {\n this.runWheelTranslate();\n }\n }\n\n @HostListener('mouseleave')\n mouseleave() {\n this.zoom?.on('start zoom end', null);\n this._element?.on('wheel', null);\n }\n\n private currentTransform = zoomIdentity;\n\n constructor(\n private elementRef: ElementRef,\n private zoomService: ZoomService,\n private chartService: ChartService,\n private zone: NgZone\n ) {}\n\n ngOnInit() {\n if (this.axis?.options?.zoom || this.config?.zoom?.enable) {\n this.zoomable =\n this.config?.zoom?.zoomBehavior === ZoomBehaviorType.move &&\n !this.config?.tooltip?.showCrosshair;\n this.crosshair = this.config?.tooltip?.showCrosshair;\n }\n }\n\n ngAfterViewInit() {\n this.initZoomListeners();\n this.initZoomSync();\n }\n\n ngOnDestroy(): void {\n this.zoom?.on('start zoom end', null);\n this._element?.on('wheel', null);\n this.alive = false;\n }\n\n private initZoomSync() {\n this.zoomService.zoomed\n .pipe(takeWhile(() => this.alive))\n .subscribe((zoomed: ZoomMessage) => {\n if (\n this._element &&\n this.elementRef !== zoomed?.element &&\n zoomed?.axis?.index === this.axis.index &&\n zoomed?.axis?.orientation === this.axis.orientation\n ) {\n const scale = this.axis.scale.copy().domain(this.axis.originDomain);\n let transform;\n if (zoomed.domain === null) {\n transform = zoomIdentity;\n } else {\n transform = this.zoomService.getD3Transform(\n zoomed.domain,\n this.axis.originDomain,\n scale,\n this.axis.orientation,\n this.axis.options.inverted\n );\n }\n this._element.call(this.zoom.transform, transform);\n this.currentTransform = transform;\n }\n });\n }\n\n private initZoomListeners() {\n const enable =\n (this.axis?.options?.zoom && this.axis?.options.visible !== false) ||\n this.config?.zoom?.enable;\n\n if (!enable) {\n return;\n }\n\n this._element = d3.select(this.elementRef.nativeElement);\n this.zoom = d3.zoom().extent([\n [0, 0],\n [this.size.width, this.size.height],\n ]);\n\n const min =\n this.config?.zoom?.minTranslate != null\n ? this.axis.scale(this.config?.zoom?.minTranslate)\n : -Infinity;\n const max =\n this.config?.zoom?.maxTranslate != null\n ? this.axis.scale(this.config?.zoom?.maxTranslate)\n : Infinity;\n if (\n this.axis.orientation === AxisOrientation.x &&\n this.config.zoom.type === ZoomType.x\n ) {\n this.zoom.translateExtent([\n [Math.min(min, max), -Infinity],\n [Math.max(min, max), Infinity],\n ]);\n }\n\n if (\n this.axis.orientation === AxisOrientation.y &&\n this.config.zoom.type === ZoomType.y\n ) {\n this.zoom.translateExtent([\n [-Infinity, Math.min(min, max)],\n [Infinity, Math.max(min, max)],\n ]);\n }\n\n if (this.config.zoom?.wheelDelta) {\n this.zoom.wheelDelta(this.config.zoom?.wheelDelta);\n }\n\n if (this.config?.zoom?.wheelFilter) {\n this.zoom.filter(this.config?.zoom?.wheelFilter);\n }\n\n if (this.axis.options.scaleType.type !== ScaleType.band) {\n const extremes = this.axis.extremes as number[];\n const maxZoom = this.config.zoom?.max\n ? (extremes[1] - extremes[0]) / this.config.zoom?.max\n : this.config.zoom?.limitZoomByData\n ? 1\n : 0;\n\n const minZoom = this.config.zoom?.min\n ? (extremes[1] - extremes[0]) / this.config.zoom?.min\n : Infinity;\n\n this.zoom.scaleExtent([maxZoom, minZoom]);\n }\n\n if (this.config?.zoom?.zoomBehavior === ZoomBehaviorType.wheel) {\n this.runWheelTranslate();\n }\n }\n\n zoomed = (event: D3ZoomEvent<any, any>) => {\n if (\n event.sourceEvent &&\n (this.elementRef.nativeElement === event.sourceEvent.target ||\n this.elementRef.nativeElement.contains(event.sourceEvent.target))\n ) {\n if (Object.keys(event.sourceEvent).length !== 0) {\n const origin = this.axis.scale.copy().domain(this.axis.originDomain);\n if (this.axis.options.scaleType.type === ScaleType.band) {\n return;\n }\n\n const domain =\n this.axis.orientation === AxisOrientation.y\n ? event.transform.rescaleY(origin).domain()\n : event.transform.rescaleX(origin).domain();\n if (\n domain[0] === null ||\n domain[0] === undefined ||\n domain[1] === null ||\n domain[1] === undefined ||\n Math.abs(domain[0] - domain[1]) < 0.000001\n ) {\n return;\n }\n const message = new ZoomMessage({\n eventType: event.type,\n axis: {\n index: this.axis.index,\n orientation: this.axis.orientation,\n },\n element: this.elementRef,\n domain,\n chartId: this.config.id,\n });\n this.zoomService.fireZoom(message);\n this.zoomService.broadcastZoom(message);\n }\n this.currentTransform = event.transform;\n }\n };\n\n private runWheelTranslate() {\n let type: 'start' | 'zoom' | 'end' = 'start';\n let wheeling;\n\n // For touch events\n this.zoom.on('start zoom end', this.zoomed);\n this._element?.call(this.zoom);\n\n this.zoom\n .filter(event => {\n return (\n (event.ctrlKey && event.type === 'wheel') ||\n Boolean(window.TouchEvent && event.type !== 'wheel')\n );\n })\n .wheelDelta(event => {\n const delta =\n this.config?.zoom.type === ZoomType.x ? -event.deltaX : -event.deltaY;\n return delta * 0.002;\n });\n\n const emit = (type: string, event: WheelEvent) => {\n const origin = this.axis.scale.copy().domain(this.axis.originDomain);\n let transform = zoomIdentity;\n const delta =\n type === 'end'\n ? 0\n : this.axis.orientation === AxisOrientation.y\n ? event.deltaY\n : event.deltaX;\n\n if (this.axis.orientation === AxisOrientation.y) {\n transform = transform.translate(0, this.currentTransform.y - delta / 2);\n }\n\n if (this.axis.orientation === AxisOrientation.x) {\n transform = transform.translate(this.currentTransform.x - delta / 2, 0);\n }\n\n transform = transform.scale(this.currentTransform.k);\n\n let domain =\n this.axis.orientation === AxisOrientation.y\n ? transform.rescaleY(origin).domain()\n : transform.rescaleX(origin).domain();\n\n const extent = this.axis.options?.inverted\n ? domain\n : [...domain].reverse();\n\n if (extent[0] <= this.config.zoom?.minTranslate) {\n return;\n }\n\n if (extent[1] >= this.config.zoom?.maxTranslate) {\n return;\n }\n\n const message = new ZoomMessage({\n eventType: type,\n element: this.elementRef,\n axis: {\n index: this.axis.index,\n orientation: this.axis.orientation,\n },\n domain,\n chartId: this.config.id,\n });\n\n this._element?.call(this.zoom.transform, transform);\n this.zoomService.fireZoom(message);\n this.zoomService.broadcastZoom(message);\n this.currentTransform = transform;\n };\n\n this._element.on('wheel', (event: WheelEvent) => {\n event.preventDefault();\n\n if (event.ctrlKey) {\n return;\n }\n this.zone.runOutsideAngular(() => {\n clearTimeout(wheeling);\n emit(type, event);\n type = 'zoom';\n wheeling = setTimeout(() => {\n emit('end', event);\n type = 'start';\n }, 50);\n });\n });\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport { Axis } from '../../core/axis/axis';\n\nimport {ScaleService} from \"../../service/scale.service\";\nimport {map, Observable} from \"rxjs\";\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: '[teta-y-axis]',\n templateUrl: './y-axis.component.html',\n standalone: true,\n styleUrls: ['./y-axis.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n ]\n})\nexport class YAxisComponent implements OnInit, AfterViewInit {\n\n y: Observable<any>;\n\n @Input() axis: Axis;\n @Input() size: DOMRect;\n\n private _alive = true;\n\n constructor(private scaleService: ScaleService) {\n this.y = this.scaleService.scales.pipe(map((_) => {\n return _.y.get(this.axis.index)?.scale\n }))\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n ngAfterViewInit() {\n }\n\n getLabelTransform() {\n return `translate(${\n this.axis.options.opposite\n ? this.axis.selfSize\n : -this.axis.selfSize\n }, ${this.size.height / 2}) rotate(-90)`;\n }\n\n}\n","@if (y | async; as scale) {\n @for (tick of scale.ticks(); track tick) {\n <svg:g [attr.text-anchor]=\"axis.options.opposite ? 'start' : 'end'\"\n [attr.transform]=\"'translate(0, '+ scale(tick) +')'\">\n <text fill=\"var(--color-text-70)\" dy=\"0.32em\"\n [attr.x]=\"axis.options.opposite ? 10 : -9\">\n {{ this.axis.options.tickFormat ? this.axis.options.tickFormat(tick) : this.axis.defaultFormatter()(tick) }}\n </text>\n <line stroke=\"var(--color-text-30)\" [attr.x2]=\"axis.options.opposite ? 6 : -6\"></line>\n </svg:g>\n }\n <svg:g class=\"label-axis font-caption\" [attr.transform]=\"getLabelTransform()\">\n <text [attr.dy]=\"axis.options.opposite ? '-4px' : '4px'\" text-anchor=\"middle\"\n [attr.dominant-baseline]=\"axis.options.opposite ? 'auto' : 'hanging'\">\n {{ axis.options.title }}\n </text>\n </svg:g>\n}\n","import { SvgAttributes } from './svg-attributes';\n\nexport class PlotBand {\n id?: number | string;\n name?: 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 order = 0;\n style?: {\n plotBand?: SvgAttributes;\n grabbers?: SvgAttributes;\n };\n\n constructor(options?: {\n id?: number | string;\n name?: 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 order?: number;\n style?: {\n plotBand?: SvgAttributes;\n grabbers?: SvgAttributes;\n };\n }) {\n this.id = options?.id;\n this.name = options?.name;\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.order = options?.order ?? 0;\n this.style = options?.style;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n} from '@angular/core';\nimport * as d3 from 'd3';\n\nimport { Axis } from '../../core/axis/axis';\nimport { AxisOrientation } from '../../model/enum/axis-orientation';\nimport { IChartEvent } from '../../model/i-chart-event';\nimport { PlotBand } from '../../model/plot-band';\nimport { ChartService } from '../../service/chart.service';\n\n@Component({\n selector: '[teta-plot-band]',\n templateUrl: './plot-band.component.html',\n styleUrls: ['./plot-band.component.scss'],\n standalone:true,\n imports:[\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlotBandComponent implements AfterViewInit, OnDestroy {\n @Input() plotBand: PlotBand;\n @Input() axis: Axis;\n @Input() scale: any;\n @Input() size: DOMRect;\n\n @HostListener('click', ['$event']) click(event: MouseEvent) {\n this.emit({\n target: this.plotBand,\n event,\n });\n }\n\n @HostListener('contextmenu', ['$event']) contextMenu(event: MouseEvent) {\n this.emit({\n target: this.plotBand,\n event,\n });\n }\n\n orientation = AxisOrientation;\n resizeElements: any;\n dragElements: any;\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 get bandSize(): number {\n return Math.abs(\n this.scale(this.plotBand.to) - this.scale(this.plotBand.from)\n );\n }\n\n constructor(\n private chartService: ChartService,\n private cdr: ChangeDetectorRef,\n private element: ElementRef\n ) {}\n\n emit(event: IChartEvent<PlotBand>) {\n this.chartService.emitPlotband(event);\n }\n\n ngAfterViewInit(): void {\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 this.dragElements = d3.drag().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 return null\n });\n\n const drag = this.dragElements.on(\n 'start drag end',\n (event: d3.D3DragEvent<any, PlotBand, any>, d: PlotBand) => {\n const bandSize = parseFloat(\n plotbandElement.attr(\n this.axis.orientation === AxisOrientation.x ? 'width' : 'height'\n )\n );\n\n d.from = this.scale.invert(\n event[AxisOrientation[this.axis.orientation]]\n );\n\n d.to = this.scale.invert(\n event[AxisOrientation[this.axis.orientation]] + bandSize\n );\n\n this.emit({\n event,\n target: d,\n });\n\n this.cdr.detectChanges();\n }\n );\n\n let grabberKey;\n this.resizeElements = d3.drag();\n\n const resize = this.resizeElements.on(\n 'start drag end',\n (event: d3.D3DragEvent<any, PlotBand, any>, d: PlotBand) => {\n if (event?.type === 'start') {\n const { grabber } = event?.sourceEvent?.target?.dataset;\n grabberKey = grabber;\n }\n\n const min = Math.min(...this.scale.domain());\n const max = Math.max(...this.scale.domain());\n\n const minValue = d.min ?? min;\n const maxValue = d.max ?? max;\n\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 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 ngOnDestroy() {\n this.dragElements.on('start drag end', null);\n this.resizeElements.on('start drag end', null);\n }\n\n getTextPosition = () => {\n let [min, max] = this.scale.domain();\n min = min instanceof Date ? min.getTime() : min;\n max = max instanceof Date ? max.getTime() : max;\n const from =\n (this.plotBand.from as any) instanceof Date\n ? (this.plotBand.from as any).getTime()\n : this.plotBand.from;\n const to =\n (this.plotBand.to as any) instanceof Date\n ? (this.plotBand.to as any).getTime()\n : this.plotBand.to;\n const position = ((from <= min ? min : from) + (to >= max ? max : to)) / 2;\n return this.scale(position);\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\n class='plotband' xmlns:svg='http://www.w3.org/1999/html'\n [class.draggable]='plotBand?.draggable === true'\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 ? (axis.options.inverted === true ? from : to) : null'\n [attr.x]='axis.orientation === orientation.x ? (axis.options.inverted === true ? to : from) : null'>\n</svg:rect>\n@if (axis.orientation === orientation.x) {\n <svg:text\n text-anchor='middle'\n dominant-baseline='middle'\n class='label font-caption fill-text-90'\n [attr.x]='getTextPosition()'\n [attr.transform]=\"'rotate(-90, '+ getTextPosition() +',' + height / 2 + ')'\"\n [attr.y]='height / 2'>{{ plotBand.label }}\n </svg:text>\n}\n@if (axis.orientation === orientation.y) {\n <svg:text\n text-anchor='middle'\n class='label font-caption fill-text-90'\n dominant-baseline='central'\n [attr.x]='getTextPosition()'\n [attr.y]='width / 2'>{{ plotBand.label }}\n </svg:text>\n}\n@if (plotBand.resizable) {\n @if (plotBand.showGrabbers) {\n <svg:line class='display-grabber'\n [attr.stroke]=\"plotBand.style?.grabbers?.stroke || 'var(--color-text-50)'\"\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 <svg:line class='display-grabber'\n [attr.stroke]=\"plotBand.style?.grabbers?.stroke || 'var(--color-text-50)'\"\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 [class.resizeable]='plotBand?.resizable'\n [attr.stroke]=\"plotBand.style?.grabbers?.stroke || 'var(--color-text-50)'\"\n [attr.stroke-width]='8'\n [style.transform]=\"axis.orientation === orientation.x ? 'translateX(2px)' : 'translateY(2px)'\"\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 <svg:line class='grabber'\n [class.x-grabber]='axis.orientation === orientation.x'\n [class.y-grabber]='axis.orientation === orientation.y'\n [class.resizeable]='plotBand?.resizable'\n [attr.stroke]=\"plotBand.style?.grabbers?.stroke || 'var(--color-text-50)'\"\n [attr.stroke-width]='8'\n [style.transform]=\"axis.orientation === orientation.x ? 'translateX(-2px)' : 'translateY(-2px)'\"\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","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component, Input,\n} from '@angular/core';\n\nimport {ScaleService} from \"../../service/scale.service\";\nimport {map, Observable, withLatestFrom} from \"rxjs\";\nimport {IChartConfig} from \"../../model/i-chart-config\";\nimport {ChartService} from \"../../service/chart.service\";\nimport {generateTicks} from \"../../core/utils/generate-ticks\";\nimport {IScalesMap} from \"../../model/i-scales-map\";\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: '[teta-gridlines]',\n templateUrl: './gridlines.component.html',\n styleUrls: ['./gridlines.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n ]\n})\nexport class GridlinesComponent implements AfterViewInit {\n\n @Input() size: DOMRect;\n\n config: Observable<IChartConfig>;\n tickYValues: Observable<number[]>;\n tickXValues: Observable<number[]>;\n x: Observable<any>;\n y: Observable<any>;\n\n constructor(private svc: ScaleService, private chartService: ChartService) {\n this.config = this.chartService.config;\n\n this.tickYValues = this.svc.scales.pipe(\n withLatestFrom(this.config),\n map((_: [IScalesMap, IChartConfig]) => {\n const [scales, config] = _;\n const ratio = this.size.height / 40;\n return config.gridLines?.y?.ticksCount != null ? generateTicks(scales.y.get(0).scale.domain(), config.gridLines?.y?.ticksCount) : scales.y.get(0)?.scale.ticks(ratio);\n }));\n\n this.tickXValues = this.svc.scales.pipe(\n withLatestFrom(this.config),\n map((_: [IScalesMap, IChartConfig]) => {\n const [scales, config] = _;\n const ratio = this.size.width / 40;\n return config.gridLines?.x?.ticksCount != null ? generateTicks(scales.x.get(0).originDomain, config.gridLines?.x?.ticksCount) : scales.x.get(0)?.scale.ticks(ratio);\n }));\n\n this.y = this.svc.scales.pipe(map((_) => _.y.get(0)?.scale));\n this.x = this.svc.scales.pipe(map((_) => _.x.get(0)?.scale));\n }\n\n ngAfterViewInit() {\n\n }\n}\n","@if ({\n xValues: tickXValues | async,\n yValues: tickYValues | async,\n x: x | async,\n y: y | async,\n config: config | async\n}; as data) {\n @if (data.y && data.config.gridLines?.showY !== false) {\n @for (tick of data.yValues; track tick) {\n <svg:line [attr.x1]=\"0\"\n [attr.y1]=\"data.y(tick) || 1\"\n [attr.x2]=\"size?.width\"\n [attr.y2]=\"data.y(tick) || 1\"></svg:line>\n }\n }\n @if (data.x && data.config.gridLines?.showX !== false) {\n @for (tick of data.xValues; track tick) {\n <svg:line [attr.x1]=\"data.x(tick) || 1\"\n [attr.y1]=\"0\"\n [attr.x2]=\"data.x(tick) || 1\"\n [attr.y2]=\"size?.height\"></svg:line>\n }\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport * as d3 from 'd3';\nimport {\n BehaviorSubject,\n combineLatest,\n map,\n Observable,\n tap,\n withLatestFrom,\n} from 'rxjs';\n\nimport { SeriesBaseComponent } from '../../base/series-base.component';\nimport { BasePoint } from '../../model/base-point';\nimport { ClipPointsDirection } from '../../model/enum/clip-points-direction';\nimport { TooltipTracking } from '../../model/enum/tooltip-tracking';\nimport { IScalesMap } from '../../model/i-scales-map';\nimport { Series } from '../../model/series';\nimport { ChartService } from '../../service/chart.service';\nimport { ScaleService } from '../../service/scale.service';\nimport { ZoomService } from '../../service/zoom.service';\n\n@Component({\n template: '',\n standalone:true,\n})\nexport class LinearSeriesBase<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit, OnDestroy\n{\n public defaultClipPointsMapping: Map<\n ClipPointsDirection,\n (\n min: number,\n max: number\n ) => (point: BasePoint, idx: number, arr: Array<BasePoint>) => {}\n > = new Map();\n\n transform: Observable<Pick<BasePoint, 'x' | 'y'>>;\n display: Observable<number>;\n path: Observable<string>;\n x: any;\n y: any;\n markers: BasePoint[];\n\n private __series: Series<T>;\n protected _update = new BehaviorSubject<void>(null);\n\n @Input()\n override set series(series: Series<T>) {\n this.__series = series;\n\n this.markers = this.__series.data?.filter(\n _ =>\n _?.marker &&\n _?.x !== undefined &&\n _?.y !== undefined &&\n _?.x !== null &&\n _?.y !== null\n );\n }\n\n override get series() {\n return this.__series;\n }\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 filterX =\n (min: number, max: number) =>\n (point: BasePoint, idx: number, arr: Array<BasePoint>) => {\n const bigger = min > max ? min : max;\n const smaller = min > max ? max : min;\n return (\n (point.x <= bigger ||\n point.x1 <= bigger ||\n (arr[idx - 1] && arr[idx - 1].x <= bigger) ||\n (arr[idx - 1] && arr[idx - 1].x1 <= bigger)) &&\n (point.x >= smaller ||\n point.x1 >= smaller ||\n (arr[idx + 1] && arr[idx + 1].x >= smaller) ||\n (arr[idx + 1] && arr[idx + 1].x1 >= smaller))\n );\n };\n\n const filterY =\n (min: number, max: number) =>\n (point: BasePoint, idx: number, arr: Array<BasePoint>) => {\n const bigger = min > max ? min : max;\n const smaller = min > max ? max : min;\n return (\n (point.y <= bigger ||\n point.y1 <= bigger ||\n (arr[idx - 1] && arr[idx - 1].y <= bigger) ||\n (arr[idx - 1] && arr[idx - 1].y1 <= bigger)) &&\n (point.y >= smaller ||\n point.y1 >= smaller ||\n (arr[idx + 1] && arr[idx + 1].y >= smaller) ||\n (arr[idx + 1] && arr[idx + 1].y1 >= smaller))\n );\n };\n\n this.defaultClipPointsMapping.set(ClipPointsDirection.x, filterX);\n this.defaultClipPointsMapping.set(ClipPointsDirection.y, filterY);\n\n this.transform = this.svc.pointerMove.pipe(\n withLatestFrom(this.scaleService.scales),\n map((data: [PointerEvent, IScalesMap]) => {\n const [event, { x, y }] = data;\n\n return this.getTransform(\n event,\n x.get(this.series.xAxisIndex).scale,\n y.get(this.series.yAxisIndex).scale\n );\n }),\n tap(() => setTimeout(() => this.cdr.detectChanges()))\n );\n\n this.path = combineLatest([this.scaleService.scales, this._update]).pipe(\n map(([data]) => {\n const { x, y } = data;\n this.x = x.get(this.series.xAxisIndex)?.scale;\n this.y = y.get(this.series.yAxisIndex)?.scale;\n\n if (!this.x || !this.y) {\n return '';\n }\n\n const filter = this.defaultClipPointsMapping.get(\n this.series.clipPointsDirection\n );\n\n const line = d3\n .line<BasePoint>()\n .defined(\n point =>\n point.x !== null &&\n point.y !== null &&\n point.x !== undefined &&\n point.y !== undefined &&\n !isNaN(point.x) &&\n !isNaN(point.y)\n )\n .x(point => this.x(point.x))\n .y(point => this.y(point.y));\n\n let filteredData = this.series.data;\n\n if (this.series.clipPointsDirection === ClipPointsDirection.x) {\n let [min, max] = this.x.domain();\n\n min = min instanceof Date ? min.getTime() : min;\n max = max instanceof Date ? max.getTime() : max;\n\n filteredData = filteredData?.filter(filter(min, max));\n }\n\n if (this.series.clipPointsDirection === ClipPointsDirection.y) {\n let [min, max] = this.y.domain();\n\n min = min instanceof Date ? min.getTime() : min;\n max = max instanceof Date ? max.getTime() : max;\n\n filteredData = filteredData?.filter(filter(min, max));\n }\n\n return line(filteredData);\n })\n );\n }\n\n ngOnDestroy() {\n this.svc.setTooltip({\n point: null,\n series: this.series,\n });\n }\n\n ngAfterViewInit() {}\n\n getTransform(\n event: any,\n scaleX: any,\n scaleY: any\n ): Pick<BasePoint, 'x' | 'y'> {\n if (event.type === 'mouseleave') {\n return null;\n }\n const mouse = [event?.offsetX, event?.offsetY];\n\n const tooltipTracking = this.config?.tooltip?.tracking;\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 const pointer = mouse[0];\n\n let x0 = scaleX.invert(pointer);\n if (x0 instanceof Date) {\n x0 = x0.getTime();\n }\n const rightId = bisect(this.series.data, x0);\n const range = scaleY.range();\n const intersect = lineIntersection(\n pointer,\n range[0],\n pointer,\n Number.MAX_SAFE_INTEGER,\n scaleX(this.series.data[rightId - 1]?.x),\n scaleY(this.series.data[rightId - 1]?.y),\n scaleX(this.series.data[rightId]?.x),\n scaleY(this.series.data[rightId]?.y)\n );\n const x = scaleX.invert(intersect.x);\n const y = scaleY.invert(intersect.y);\n if (\n x !== null &&\n x !== undefined &&\n !isNaN(x) &&\n y !== null &&\n y !== undefined &&\n !isNaN(y)\n ) {\n this.svc.setTooltip({\n point: {\n x: scaleX.invert(intersect.x),\n y: scaleY.invert(intersect.y),\n },\n series: this.series,\n });\n } else {\n this.svc.setTooltip({\n point: null,\n series: this.series,\n });\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 let y0 = scaleY.invert(mouse[1]);\n if (y0 instanceof Date) {\n y0 = y0.getTime();\n }\n const rightId = bisect(this.series.data, y0);\n const range = scaleX.range();\n\n const intersect = lineIntersection(\n range[0],\n mouse[1],\n Number.MAX_SAFE_INTEGER,\n mouse[1],\n scaleX(this.series.data[rightId - 1]?.x),\n scaleY(this.series.data[rightId - 1]?.y),\n scaleX(this.series.data[rightId]?.x),\n scaleY(this.series.data[rightId]?.y)\n );\n\n const x = scaleX.invert(intersect.x);\n const y = scaleY.invert(intersect.y);\n\n if (\n x !== null &&\n x !== undefined &&\n !isNaN(x) &&\n y !== null &&\n y !== undefined &&\n !isNaN(y)\n ) {\n this.svc.setTooltip({\n point: {\n x: scaleX.invert(intersect.x),\n y: scaleY.invert(intersect.y),\n },\n series: this.series,\n });\n } else {\n this.svc.setTooltip({\n point: null,\n series: this.series,\n });\n }\n\n return {\n x: intersect.x,\n y: intersect.y,\n };\n }\n return null\n }\n}\n","export enum DragPointType {\n x,\n y,\n xy,\n}\n","import {Directive, ElementRef, EventEmitter, HostListener, Input, Output} from '@angular/core';\nimport {DragPointType} from '../model/enum/drag-point-type';\n\n@Directive({\n selector: '[tetaDraggablePoint]',\n exportAs: 'tetaDraggablePoint',\n standalone:true\n})\nexport class DraggablePointDirective {\n @Input() tetaDraggablePoint: boolean;\n @Input() dragDirection: DragPointType;\n @Input() allowDrag: (point: {\n x: number,\n y: number,\n deltaX: number,\n deltaY: number\n }) => boolean;\n\n private startPosition: {\n x: number,\n y: number;\n };\n\n private transformCache: {\n x: number,\n y: number;\n };\n\n constructor(private _elementRef: ElementRef) {\n }\n\n @Output() moveStart = new EventEmitter<{\n x: number,\n y: number\n }>();\n\n @Output() moveProcess = new EventEmitter<{\n x: number,\n y: number,\n deltaX: number,\n deltaY: number\n }>();\n\n @Output() moveEnd = new EventEmitter<{\n x: number,\n y: number,\n deltaX: number,\n deltaY: number\n }>();\n\n @HostListener('mousedown', ['$event'])\n @HostListener('touchstart', ['$event'])\n mouseDown(event: MouseEvent) {\n if (!this.tetaDraggablePoint) {\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n this.startPosition = {\n x: event.x,\n y: event.y\n };\n this.moveStart.emit(this.startPosition);\n }\n\n @HostListener('window:mouseup', ['$event'])\n @HostListener('window:touchend', ['$event'])\n mouseUp(event: MouseEvent) {\n if (this.startPosition !== null && this.startPosition !== undefined) {\n let deltaX = event.x - this.startPosition.x;\n let deltaY = event.y - this.startPosition.y;\n if (this.dragDirection === DragPointType.x) {\n deltaY = 0;\n }\n if (this.dragDirection === DragPointType.y) {\n deltaX = 0;\n }\n if (this.allowDrag && !this.allowDrag({\n x: event.x,\n y: event.y,\n deltaX,\n deltaY\n })) {\n this.startPosition = null;\n return;\n }\n if (this.transformCache) {\n this.transformCache.x = this.transformCache.x + deltaX;\n this.transformCache.y = this.transformCache.y + deltaY;\n } else {\n this.transformCache = {\n x: deltaX,\n y: deltaY\n };\n }\n this.moveEnd.emit({\n x: event.x,\n y: event.y,\n deltaX,\n deltaY\n });\n }\n this.startPosition = null;\n }\n\n @HostListener('window:mousemove', ['$event'])\n @HostListener('window:touchmove', ['$event'])\n mouseMove(event: MouseEvent) {\n if (this.startPosition) {\n let deltaX = event.x - this.startPosition.x;\n let deltaY = event.y - this.startPosition.y;\n if (this.transformCache) {\n deltaX = this.transformCache.x + deltaX;\n deltaY = this.transformCache.y + deltaY;\n }\n if (this.allowDrag && !this.allowDrag({\n x: event.x,\n y: event.y,\n deltaX,\n deltaY\n })) {\n return;\n }\n if (this.dragDirection === DragPointType.x) {\n deltaY = 0;\n }\n if (this.dragDirection === DragPointType.y) {\n deltaX = 0;\n }\n this.setTransform(deltaX, deltaY);\n event.stopPropagation();\n event.preventDefault();\n this.moveProcess.emit({\n x: event.x,\n y: event.y,\n deltaX,\n deltaY\n });\n }\n }\n\n setTransform(x: number, y: number) {\n this._elementRef.nativeElement.style.transform = `translate(${x}px, ${y}px)`;\n }\n\n resetTransform() {\n this.setTransform(0, 0);\n this.transformCache = null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport {ChartService} from '../../../service/chart.service';\nimport {BasePoint} from '../../../model/base-point';\nimport {ScaleService} from '../../../service/scale.service';\nimport {ZoomService} from '../../../service/zoom.service';\nimport {LinearSeriesBase} from '../linear-series-base';\nimport { AsyncPipe } from '@angular/common';\nimport { DraggablePointDirective } from '../../../directives/draggable-point.directive';\n\n@Component({\n selector: 'svg:svg[teta-line-series]',\n templateUrl: './line-series.component.html',\n styleUrls: ['./line-series.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n DraggablePointDirective,\n ]\n})\nexport class LineSeriesComponent<T extends BasePoint>\n extends LinearSeriesBase<T>\n implements OnInit, OnDestroy {\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 private start: { x: number, y: number };\n private labelStart: { dx: number, dy: number };\n\n moveStart(event, point) {\n this.start = {x: point.x, y: point.y};\n }\n\n moveEnd(event, point) {\n point.x = this.x.invert(this.x(this.start.x) + event.deltaX);\n point.y = this.y.invert(this.y(this.start.y) + event.deltaY);\n this._update.next();\n const emitEvent = {\n type: 'end',\n sourceEvent: event\n };\n this.svc.emitPoint({\n target: {\n series: this.series,\n point: point,\n },\n event: emitEvent,\n });\n }\n\n moveProcess(event, point) {\n point.x = this.x.invert(this.x(this.start.x) + event.deltaX);\n point.y = this.y.invert(this.y(this.start.y) + event.deltaY);\n this._update.next();\n const emitEvent = {\n type: 'drag',\n sourceEvent: event\n };\n this.svc.emitPoint({\n target: {\n series: this.series,\n point: point,\n },\n event: emitEvent,\n });\n }\n\n startLabel(event, label) {\n this.labelStart = {dx: label.dx, dy: label.dy};\n }\n\n moveLabel(event, label) {\n label.dx = this.labelStart.dx + event.deltaX;\n label.dy = this.labelStart.dy + event.deltaY;\n }\n\n allowDrag = (point: BasePoint) => {\n return (newPoint) => {\n if (point.marker.minX !== null && point.marker.minX !== undefined) {\n if (this.x.invert(this.x(this.start.x) + newPoint.deltaX) < point.marker.minX) {\n return false;\n }\n }\n if (point.marker.maxX !== null && point.marker.maxX !== undefined) {\n if (this.x.invert(this.x(this.start.x) + newPoint.deltaX) > point.marker.maxX) {\n return false;\n }\n }\n if (point.marker.minY !== null && point.marker.minY !== undefined) {\n if (this.y.invert(this.y(this.start.y) + newPoint.deltaY) < point.marker.minY) {\n return false;\n }\n }\n if (point.marker.maxY !== null && point.marker.maxY !== undefined) {\n if (this.y.invert(this.y(this.start.y) + newPoint.deltaY) > point.marker.maxY) {\n return false;\n }\n }\n return true;\n };\n };\n}\n","<svg:path\n class=\"line\"\n [attr.d]=\"path | async\"\n [attr.stroke]=\"series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n fill=\"none\">\n</svg:path>\n@if (transform | async; as t) {\n @if (t?.x != null && t?.y != null) {\n <svg:circle r=\"3\"\n [attr.fill]=\"series.color\"\n [attr.transform]=\"'translate('+ t.x +', '+ t.y +')'\">\n </svg:circle>\n }\n}\n@if (markers; as draggablePoints) {\n @if (x && y) {\n @for (point of draggablePoints; track point) {\n <svg:g\n [attr.transform]=\"'translate(' + x(point.x) + ',' + y(point.y) + ')'\">\n <svg:g [tetaDraggablePoint]=\"point.marker.draggable\"\n [dragDirection]=\"point.marker.dragType\"\n [allowDrag]=\"allowDrag(point)\"\n #dragPoint=\"tetaDraggablePoint\"\n (moveStart)=\"moveStart($event, point)\"\n (moveEnd)=\"moveEnd($event, point);dragPoint.resetTransform();\"\n (moveProcess)=\"moveProcess($event, point);dragPoint.resetTransform();\"\n [class.draggable-marker]=\"point?.marker?.draggable\">\n <svg:circle\n class=\"marker\"\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]=\"0\"\n [attr.cy]=\"0\">\n </svg:circle>\n @if (point.marker.label?.text) {\n <svg:line\n [attr.x1]=\"0\"\n [attr.y1]=\"0\"\n [attr.x2]=\"point.marker.label?.dx\"\n [attr.y2]=\"point.marker.label?.dy\"\n [attr.stroke]=\"point.marker.label?.style?.stroke ?? 'var(--color-text-90)'\"\n [attr.stroke-width]=\"point.marker.label?.style?.strokeWidth ?? 1\"\n [attr.stroke-dasharray]=\"point.marker.label?.style?.strokeDasharray ?? null\">\n </svg:line>\n <svg:foreignObject\n [tetaDraggablePoint]=\"point.marker.label?.draggable\"\n [dragDirection]=\"point.marker.label.dragType\"\n #labelPoint=\"tetaDraggablePoint\"\n (moveStart)=\"startLabel($event, point.marker.label)\"\n (moveProcess)=\"moveLabel($event, point.marker.label); labelPoint.resetTransform();\"\n (moveEnd)=\"labelPoint.resetTransform();\"\n [attr.width]=\"annotationNode?.offsetWidth ?? 0\"\n [attr.height]=\"annotationNode?.offsetHeight ?? 0\"\n [attr.x]=\"point.marker.label?.dx\"\n [attr.y]=\"point.marker.label?.dy\"\n class=\"position-absolute\">\n <div\n #annotationNode\n class=\"shadow-2 padding-2\"\n [style.color]=\"'var(--color-text-90)'\"\n [style.background-color]=\"'var(--color-global-bgcard)'\"\n [style.cursor]=\"'move'\"\n style=\"border-radius: 2px; display: inline-block;\">\n {{ point.marker.label?.text }}\n </div>\n </svg:foreignObject>\n }\n </svg:g>\n </svg:g>\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnChanges,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\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';\nimport {map, Observable} from 'rxjs';\nimport {SeriesType} from '../../../model/enum/series-type';\nimport * as d3 from 'd3';\nimport {AsyncPipe} from '@angular/common';\n\n@Component({\n selector: 'svg:svg[teta-bar-series]',\n templateUrl: './bar-series.component.html',\n styleUrls: ['./bar-series.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n ]\n})\nexport class BarSeriesComponent<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit, OnChanges {\n\n x: Observable<any>;\n x1: Observable<any>;\n y: Observable<any>;\n\n barSeriesCount: Observable<number>;\n\n Math: any = Math;\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.barSeriesCount = this.svc.config.pipe(\n map((_) => {\n const count = _.series.filter(\n (_) =>\n _.type === SeriesType.bar && _.xAxisIndex === this.series.xAxisIndex\n );\n\n return count.length;\n })\n );\n\n this.x1 = this.scaleService.scales.pipe(\n map((_) => {\n const x = _.x.get(this.series.xAxisIndex)?.scale;\n const range = x.range();\n const domain = this.series.data.map((_) => _.x);\n\n return d3\n .scaleBand<number>()\n .range([0, range[1]])\n .domain(domain)\n .padding(0.1);\n })\n );\n\n this.x = this.scaleService.scales.pipe(\n map((_) => _.x.get(this.series.xAxisIndex)?.scale)\n );\n\n this.y = this.scaleService.scales.pipe(\n map((_) => _.y.get(this.series.yAxisIndex)?.scale)\n );\n }\n\n mouseenter(point: BasePoint) {\n this.svc.setTooltip({\n point: point,\n series: this.series,\n });\n }\n\n mouseleave(point: BasePoint) {\n this.svc.setTooltip({\n point: null,\n series: this.series,\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n }\n\n isNumber(value: any): value is number {\n return typeof value === 'number'\n }\n}\n","@if ({\n x: x | async,\n x1: x1 | async,\n y: y | async,\n barSeriesCount: barSeriesCount | async\n}; as data) {\n @if (data.x && data.y) {\n @if (data.barSeriesCount > 1) {\n @for (point of series.data; track point; ) {\n <svg:rect\n (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\"\n [attr.x]=\"data.x(point.x) + ((isNumber(series.id) ? series.id : 0) * data.x1.bandwidth() / data.barSeriesCount)\"\n [attr.y]=\"point.y > 0 ? data.y(point.y) : data.y(0)\"\n [attr.width]=\"data.x1.bandwidth() / data.barSeriesCount\"\n [attr.height]=\"Math.abs(data.y(point.y) - data.y(0))\"\n [attr.fill]=\"series.color\"\n ></svg:rect>\n }\n }\n @if (data.barSeriesCount === 1) {\n @for (point of series.data; track point; ) {\n <svg:rect\n (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\"\n [attr.x]=\"data.x(point.x)\"\n [attr.y]=\"point.y > 0 ? data.y(point.y) : data.y(0)\"\n [attr.width]=\"data.x1.bandwidth()\"\n [attr.height]=\"Math.abs(data.y(point.y) - data.y(0))\"\n [attr.fill]=\"point.color ?? series.color\"\n ></svg:rect>\n }\n }\n }\n}\n","import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, OnInit} from '@angular/core';\nimport {BasePoint} from '../../../model/base-point';\nimport {SeriesBaseComponent} from '../../../base/series-base.component';\nimport {map, Observable} from 'rxjs';\nimport {ChartService} from '../../../service/chart.service';\nimport {ScaleService} from '../../../service/scale.service';\nimport {ZoomService} from '../../../service/zoom.service';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'svg:svg[teta-scatter-series]',\n templateUrl: './scatter-series.component.html',\n styleUrls: ['./scatter-series.component.scss'],\n standalone: true,\n imports: [\n AsyncPipe\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ScatterSeriesComponent<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit, AfterViewInit {\n transform: Observable<Pick<BasePoint, 'x' | 'y'>>;\n display: Observable<number>;\n path: Observable<string>;\n x: Observable<any>;\n y: Observable<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.x = this.scaleService.scales.pipe(map(_ => _.x.get(this.series.xAxisIndex)?.scale));\n this.y = this.scaleService.scales.pipe(map(_ => _.y.get(this.series.yAxisIndex)?.scale));\n }\n\n ngAfterViewInit() {\n }\n\n mouseenter(point: BasePoint) {\n this.svc.setTooltip({\n point: point,\n series: this.series,\n });\n }\n\n mouseleave(point: BasePoint) {\n this.svc.setTooltip({\n point: null,\n series: this.series,\n });\n }\n}\n","@if ({\n y: y | async,\n x: x | async\n}; as scales) {\n @if (scales.x && scales.y) {\n @for (point of series.data; track point) {\n <svg:circle\n class=\"line\"\n (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\"\n [attr.cx]=\"scales.x(point.x)\"\n [attr.cy]=\"scales.y(point.y)\"\n [attr.r]=\"series.style?.radius ?? 1\"\n [attr.stroke]=\"point.color ?? series.color\"\n [attr.fill]=\"point.color ?? series.color\"\n [attr.stroke-width]=\"series.style?.strokeWidth\">\n </svg:circle>\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnInit,\n} from '@angular/core';\nimport { filter, map, Observable } from 'rxjs';\n\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { BasePoint } from '../../../model/base-point';\nimport { FillType } from '../../../model/enum/fill-type';\nimport { ChartService } from '../../../service/chart.service';\nimport { ScaleService } from '../../../service/scale.service';\nimport { ZoomService } from '../../../service/zoom.service';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'svg:svg[teta-block-series]',\n templateUrl: './block-series.component.html',\n styleUrls: ['./block-series.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n ]\n})\nexport class BlockSeriesComponent<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit\n{\n x: Observable<any>;\n y: Observable<any>;\n displayPoints: Observable<BasePoint[]>;\n fillType = FillType;\n id: string;\n Math = Math;\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 this.id = (Date.now() + Math.random()).toString(36);\n }\n\n override ngOnInit(): void {\n this.x = this.scaleService.scales.pipe(\n map(_ => _.x.get(this.series.xAxisIndex)?.scale)\n );\n this.y = this.scaleService.scales.pipe(\n map(_ => _.y.get(this.series.yAxisIndex)?.scale)\n );\n\n this.displayPoints = this.y.pipe(\n filter(y => y),\n map(y => {\n return this.series.data.filter((point, index, arr) => {\n const [min, max] = y.domain();\n return (\n (point.y >= min ||\n point.y1 >= min ||\n arr[index + 1]?.y >= min ||\n arr[index + 1]?.y1 >= min) &&\n (point.y <= max ||\n point.y1 <= max ||\n arr[index - 1]?.y <= max ||\n arr[index - 1]?.y1 <= max)\n );\n });\n })\n );\n }\n\n mouseenter(point: BasePoint) {\n this.svc.setTooltip({\n point: point,\n series: this.series,\n });\n }\n\n mouseleave(point: BasePoint) {\n this.svc.setTooltip({\n point: null,\n series: this.series,\n });\n }\n}\n","@if ({\n y: y | async,\n x: x | async,\n points: displayPoints | async\n}; as data) {\n @if (series?.fillType === fillType.gradient) {\n <svg:defs>\n <svg:linearGradient [id]=\"'gradient-fill-' + id\" gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n </svg:defs>\n }\n @if (data.x && data.y) {\n @for (point of data.points; track point) {\n <svg:g (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\">\n <svg:rect\n x=\"0\"\n [attr.y]=\"data.y(point.y)\"\n [attr.height]=\"Math.abs(data.y(point.y1) - data.y(point.y))\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : point.iconId ? 'url(#pattern'+point.iconId+')' : point.color ?? series.style?.fill ?? series.color\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n width=\"100%\">\n </svg:rect>\n @if (point.text && data.y(point.y1) - data.y(point.y) > 8) {\n <svg:text x=\"50%\"\n [attr.y]=\"(data.y(point.y1) + data.y(point.y)) / 2\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\">{{ point.text }}\n </svg:text>\n }\n <svg:line x1=\"0\" x2=\"100%\" [attr.y1]=\"data.y(point.y)\" [attr.y2]=\"data.y(point.y)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"></svg:line>\n <svg:line x1=\"0\" x2=\"100%\" [attr.y1]=\"data.y(point.y1)\" [attr.y2]=\"data.y(point.y1)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"></svg:line>\n </svg:g>\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnInit,\n} from '@angular/core';\nimport { filter, map, Observable } from 'rxjs';\n\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { BasePoint } from '../../../model/base-point';\nimport { FillType } from '../../../model/enum/fill-type';\nimport { ChartService } from '../../../service/chart.service';\nimport { ScaleService } from '../../../service/scale.service';\nimport { ZoomService } from '../../../service/zoom.service';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'svg:svg[teta-block-area-series]',\n templateUrl: './block-area-series.component.html',\n styleUrls: ['./block-area-series.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n ]\n})\nexport class BlockAreaSeriesComponent<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit, AfterViewInit\n{\n x: Observable<any>;\n y: Observable<any>;\n displayPoints: Observable<BasePoint[]>;\n fillType = FillType;\n id: string;\n Math = Math;\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 this.id = (Date.now() + Math.random()).toString(36);\n }\n\n override ngOnInit(): void {\n this.x = this.scaleService.scales.pipe(\n map(_ => _.x.get(this.series.xAxisIndex)?.scale)\n );\n this.y = this.scaleService.scales.pipe(\n map(_ => _.y.get(this.series.yAxisIndex)?.scale)\n );\n\n this.displayPoints = this.y.pipe(\n filter(y => y),\n map(y => {\n return this.series.data.filter((point, index, arr) => {\n const [min, max] = y.domain();\n return (\n (point.y >= min ||\n point.y1 >= min ||\n arr[index + 1]?.y >= min ||\n arr[index + 1]?.y1 >= min) &&\n (point.y <= max ||\n point.y1 <= max ||\n arr[index - 1]?.y <= max ||\n arr[index - 1]?.y1 <= max)\n );\n });\n })\n );\n }\n\n ngAfterViewInit() {}\n\n mouseenter(point: BasePoint) {\n this.svc.setTooltip({\n point: point,\n series: this.series,\n });\n }\n\n mouseleave(point: BasePoint) {\n this.svc.setTooltip({\n point: null,\n series: this.series,\n });\n }\n}\n","@if ({\n y: y | async,\n x: x | async,\n points: displayPoints | async\n}; as data) {\n @if (series?.fillType === fillType.gradient) {\n <svg:defs>\n <svg:linearGradient [id]=\"'gradient-fill-' + id\"\n gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n </svg:defs>\n }\n @if (data.x && data.y) {\n @for (point of data.points; track point) {\n <svg:g (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\">\n @if (!!config.inverted) {\n <svg:rect\n [attr.x]=\"data.x(0) < data.x(point.x) ? data.x(0) : data.x(point.x)\"\n [attr.y]=\"data.y(point.y)\"\n [attr.height]=\"Math.abs(data.y(point.y1) - data.y(point.y))\"\n [attr.width]=\"data.x(0) < data.x(point.x) ? data.x(point.x) - data.x(0) : data.x(0) - data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? '' : point.color ?? series.style?.stroke ?? series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : point.iconId ? 'url(#pattern'+point.iconId+')' : point.color ?? series.style?.fill ?? series.color\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\">\n </svg:rect>\n } @else {\n <svg:rect\n [attr.x]=\"data.x(point.x)\"\n [attr.y]=\"data.y(0)\"\n [attr.height]=\"Math.abs(data.y(0) - data.y(point.y))\"\n [attr.width]=\"data.x(point.x1) - data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? '' : point.color ?? series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : point.iconId ? 'url(#pattern'+point.iconId+')' : point.color ?? series.color\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\">\n </svg:rect>\n }\n @if (point.text) {\n <svg:text x=\"50%\"\n fill=\"var(--color-text-50)\"\n [attr.y]=\"(data.y(point.y1) + data.y(point.y)) / 2\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\">{{ point.text }}\n </svg:text>\n }\n </svg:g>\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport * as d3 from 'd3';\nimport { map, Observable } from 'rxjs';\n\nimport { BasePoint } from '../../../model/base-point';\nimport { ClipPointsDirection } from '../../../model/enum/clip-points-direction';\nimport { FillDirection, FillType } from '../../../model/enum/fill-type';\nimport { ChartService } from '../../../service/chart.service';\nimport { ScaleService } from '../../../service/scale.service';\nimport { ZoomService } from '../../../service/zoom.service';\nimport { LinearSeriesBase } from '../linear-series-base';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'svg:svg[teta-area-series]',\n templateUrl: './area-series.component.html',\n styleUrls: ['./area-series.component.scss'],\n standalone:true,\n imports: [AsyncPipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AreaSeriesComponent<T extends BasePoint>\n extends LinearSeriesBase<T>\n implements OnInit, OnDestroy\n{\n areaPath: Observable<string>;\n\n fillDirection = FillDirection;\n fillType = FillType;\n id: string;\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 this.id = (Date.now() + Math.random()).toString(36);\n }\n\n override ngOnInit() {\n super.ngOnInit();\n this.areaPath = this.scaleService.scales.pipe(\n map(data => {\n const { x, y } = data;\n\n this.x = x.get(this.series.xAxisIndex)?.scale;\n this.y = y.get(this.series.yAxisIndex)?.scale;\n\n if (!this.x || !this.y) {\n return '';\n }\n\n const area = d3\n .area<BasePoint>()\n .defined(\n point =>\n point.x !== null &&\n point.y !== null &&\n !isNaN(point.x) &&\n !isNaN(point.y)\n );\n\n area\n .x1(_ =>\n _.x1 !== null && _.x1 !== undefined ? this.x(_.x1) : this.x(0)\n )\n .x0(_ => this.x(_.x))\n\n .y(_ => this.y(_.y));\n\n const filter = this.defaultClipPointsMapping.get(\n this.series.clipPointsDirection\n );\n let filteredData = this.series.data;\n\n if (this.series.clipPointsDirection === ClipPointsDirection.x) {\n let [min, max] = this.x.domain();\n\n min = min instanceof Date ? min.getTime() : min;\n max = max instanceof Date ? max.getTime() : max;\n\n filteredData = filteredData?.filter(filter(min, max));\n }\n\n if (this.series.clipPointsDirection === ClipPointsDirection.y) {\n let [min, max] = this.y.domain();\n\n min = min instanceof Date ? min.getTime() : min;\n max = max instanceof Date ? max.getTime() : max;\n\n filteredData = filteredData?.filter(filter(min, max));\n }\n\n return area(filteredData);\n })\n );\n }\n}\n","@if (series?.fillType === fillType.gradient) {\n <svg:defs>\n <svg:linearGradient [id]=\"'gradient-fill-' + id\" gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted || series?.fillDirection === fillDirection.y ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted || series?.fillDirection === fillDirection.y ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.8\"></svg:stop>\n </svg:linearGradient>\n </svg:defs>\n}\n<svg:path\n class=\"area\"\n [attr.d]=\"areaPath | async\"\n [attr.stroke-width]=\"0\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : series.style?.fill ?? series.color\">\n</svg:path>\n<svg:path\n class=\"area\"\n fill=\"none\"\n [attr.d]=\"path | async\"\n [attr.stroke]=\"series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\">\n</svg:path>\n@if (transform | async; as t) {\n @if (t?.x != null && t?.y != null) {\n <svg:circle\n r=\"3\"\n [attr.fill]=\"series.color\"\n [attr.transform]=\"'translate('+ t.x +', '+ t.y +')'\">\n </svg:circle>\n }\n}\n@if (markers; as draggablePoints) {\n @for (point of draggablePoints; track point; ) {\n <svg:circle\n class=\"marker\"\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 </svg:circle>\n }\n}\n\n\n\n","import {SeriesType} from '../model/enum/series-type';\nimport {SeriesBaseComponent} from '../base/series-base.component';\nimport {LineSeriesComponent} from '../chart-container/series/line/line-series.component';\nimport {BarSeriesComponent} from '../chart-container/series/bar/bar-series.component';\nimport {ScatterSeriesComponent} from '../chart-container/series/scatter-series/scatter-series.component';\nimport {BlockSeriesComponent} from '../chart-container/series/block-series/block-series.component';\nimport {BlockAreaSeriesComponent} from '../chart-container/series/block-area-series/block-area-series.component';\nimport {AreaSeriesComponent} from '../chart-container/series/area-series/area-series.component';\n\nexport const defaultSeriesTypeMapping = new Map<SeriesType,\n typeof SeriesBaseComponent>()\n .set(SeriesType.line, LineSeriesComponent)\n .set(SeriesType.bar, BarSeriesComponent)\n .set(SeriesType.scatter, ScatterSeriesComponent)\n .set(SeriesType.block, BlockSeriesComponent)\n .set(SeriesType.area, AreaSeriesComponent)\n .set(SeriesType.blockArea, BlockAreaSeriesComponent);\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n Input, OnDestroy,\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 {Series} from '../../model/series';\nimport {BasePoint} from '../../model/base-point';\nimport {IChartConfig} from '../../model/i-chart-config';\nimport {defaultSeriesTypeMapping} from '../../default/defaultSeriesTypeMapping';\n\n@Component({\n selector: '[teta-series-host]',\n template: '',\n standalone:true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeriesHostComponent<T extends BasePoint> implements OnInit, OnDestroy {\n @Input() config: IChartConfig;\n @Input() series: Series<T>;\n\n private _init = false;\n private _componentRef: ComponentRef<any>;\n\n constructor(\n private viewContainerRef: ViewContainerRef\n ) {\n }\n\n ngOnInit(): void {\n if (!SeriesBaseComponent.isPrototypeOf(this.series.component)) {\n this.series.component =\n defaultSeriesTypeMapping.get(this.series.type) || LineSeriesComponent;\n }\n\n this._componentRef = this.viewContainerRef.createComponent(\n this.series.component\n );\n this._componentRef.instance.config = this.config;\n this._componentRef.instance.series = this.series;\n this._init = true;\n }\n\n ngOnDestroy(): void {\n this._componentRef.destroy();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this._init && (changes.hasOwnProperty('series') || changes.hasOwnProperty('config'))) {\n this._componentRef.instance.config = this.config;\n this._componentRef.instance.series = this.series;\n this._componentRef.injector.get(ChangeDetectorRef).detectChanges();\n }\n }\n}\n","import {SvgAttributes} from './svg-attributes';\n\nexport class PlotLine {\n id?: number | string;\n name?: 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 | string;\n name?: string;\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.name = options?.name;\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","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input, OnDestroy,\n OnInit,\n} from '@angular/core';\nimport {PlotLine} from '../../model/plot-line';\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 {ChartService} from '../../service/chart.service';\n\n@Component({\n selector: '[teta-plot-line]',\n templateUrl: './plotline.component.html',\n styleUrls: ['./plotline.component.scss'],\n standalone:true,\n imports:[],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlotlineComponent implements OnInit, OnDestroy {\n @Input() plotLine: PlotLine;\n @Input() size: DOMRect;\n @Input() axis: Axis;\n @Input() scale: any;\n orientation = AxisOrientation;\n dragElements: any;\n\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 }\n\n ngOnInit(): void {\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 this.dragElements = 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 return null\n });\n const drag = this.dragElements\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 if (d.max !== null && d.max !== undefined && d.value >= d.max) {\n d.value = d.max;\n }\n if (d.min !== null && d.min !== undefined && d.value <= d.min) {\n d.value = d.min;\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 ngOnDestroy() {\n this.dragElements.on('start drag end', null);\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\n@if (axis.orientation === orientation.x) {\n <svg:text\n text-anchor=\"middle\"\n dominant-baseline=\"central\"\n class=\"label font-title-2 fill-text-70\"\n [attr.x]=\"value\"\n dy=\"-2em\"\n [attr.transform]=\"'rotate(-90, '+ value +',' + height / 2 + ')'\"\n [attr.y]=\"height / 2\">{{ plotLine.label }}\n </svg:text>\n}\n\n@if (axis.orientation === orientation.y) {\n <svg:text\n text-anchor=\"middle\"\n class=\"label font-title-2 fill-text-70\"\n dominant-baseline=\"central\"\n [attr.x]=\"value\"\n [attr.y]=\"width / 2\">{{ plotLine.label }}\n </svg:text>\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 ? 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, ChangeDetectorRef,\n Component,\n ElementRef, HostListener,\n Input, OnDestroy,\n ViewChild,\n} from '@angular/core';\nimport {Annotation} from '../../model/annotation';\nimport * as d3 from 'd3';\nimport {lastValueFrom, map, Observable, take} from 'rxjs';\nimport {ScaleService} from '../../service/scale.service';\nimport {ChartService} from '../../service/chart.service';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\n\n@Component({\n selector: '[teta-annotation]',\n templateUrl: './annotation.component.html',\n styleUrls: ['./annotation.component.scss'],\n standalone: true,\n imports: [\n NgTemplateOutlet,\n AsyncPipe\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AnnotationComponent implements OnDestroy {\n @Input() visibleRect: DOMRect;\n\n @Input() set annotation(annotation: Annotation) {\n this._annotation = annotation;\n }\n\n get annotation(): Annotation {\n return this._annotation;\n }\n\n @ViewChild('annotationNode', {static: false})\n set node(node: ElementRef) {\n this._node = node;\n this.init();\n this.cdr.detectChanges();\n }\n\n get node() {\n return this._node;\n }\n\n x: Observable<any>;\n y: Observable<any>;\n\n private drag: d3.DragBehavior<any, any, any>;\n private _annotation: Annotation;\n private _node: ElementRef;\n\n constructor(\n private scaleService: ScaleService,\n private cdr: ChangeDetectorRef,\n private chartService: ChartService) {\n this.x = this.scaleService.scales.pipe(map((_) => _.x.get(this.annotation.xAxisIndex ?? 0)?.scale));\n this.y = this.scaleService.scales.pipe(map((_) => _.y.get(this.annotation.yAxisIndex ?? 0)?.scale));\n this.drag = d3.drag();\n }\n\n @HostListener('click', ['$event']) click(event: MouseEvent) {\n this.chartService.emitAnnotation({\n event,\n target: this.annotation\n });\n }\n\n @HostListener('contextmenu', ['$event']) contextMenu(event: MouseEvent) {\n this.chartService.emitAnnotation({\n event,\n target: this.annotation\n });\n }\n\n\n ngOnDestroy() {\n this.drag.on('drag end', null);\n }\n\n private init() {\n\n d3.select(this.node.nativeElement).datum(this.annotation);\n\n const offsetPx = 10;\n const nodeRect = this.node.nativeElement.getBoundingClientRect();\n\n if (this.annotation.draggable) {\n this.drag.on('drag end', async (event, d: Annotation) => {\n\n const x = await lastValueFrom(this.x.pipe(take(1)));\n const y = await lastValueFrom(this.y.pipe(take(1)));\n\n d.dx += event.dx;\n d.dy += event.dy;\n\n // x constraint\n if ((d.dx + x(d.point.x) - offsetPx) <= 0) {\n d.dx = -x(d.point.x) + offsetPx;\n }\n\n if (d.dx + x(d.point.x) + nodeRect.width - offsetPx >= this.visibleRect.width) {\n d.dx = this.visibleRect.width - x(d.point.x) - nodeRect.width + offsetPx;\n }\n\n // y constraint\n if ((d.dy + y(d.point.y) - offsetPx) <= 0) {\n d.dy = -y(d.point.y) + offsetPx;\n }\n\n if (d.dy + y(d.point.y) + nodeRect.height - offsetPx >= this.visibleRect.height) {\n d.dy = Math.abs(y(d.point.y) - this.visibleRect.height) - nodeRect.height +offsetPx;\n }\n\n this.cdr.detectChanges();\n this.chartService.emitMoveAnnotation({\n event,\n target: d\n });\n });\n\n d3.select(this.node.nativeElement).call(this.drag);\n }\n }\n}\n","@if ({\n x: x | async,\n y: y | async\n}; as data) {\n @if (data.x && data.y) {\n <svg:circle\n [attr.r]=\"annotation.style?.radius ?? 5\"\n [attr.cx]=\"data.x(annotation.point.x)\"\n [attr.fill]=\"annotation?.style?.fill ?? 'var(--color-text-90)'\"\n [attr.cy]=\"data.y(annotation.point.y)\">\n </svg:circle>\n <svg:line\n [attr.x1]=\"data.x(annotation.point.x)\"\n [attr.y1]=\"data.y(annotation.point.y)\"\n [attr.x2]=\"data.x(annotation.point.x) + (annotation.dx ?? 0)\"\n [attr.y2]=\"data.y(annotation.point.y) + (annotation.dy ?? 0)\"\n [attr.stroke]=\"annotation.style?.stroke ?? 'var(--color-text-90)'\"\n [attr.stroke-width]=\"annotation.style?.strokeWidth ?? 1\"\n [attr.stroke-dasharray]=\"annotation.style?.strokeDasharray ?? null\"\n >\n </svg:line>\n <svg:foreignObject\n class=\"position-absolute\"\n [attr.width]=\"node?.nativeElement.offsetWidth ?? 0\"\n [attr.height]=\"node?.nativeElement.offsetHeight ?? 0\"\n [attr.x]=\"data.x(annotation.point.x) + (annotation.dx ?? 0) - 10\"\n [attr.y]=\"data.y(annotation.point.y) + (annotation.dy ?? 0) - 10\">\n <div\n #annotationNode\n [style.background-color]=\"annotation.style?.fill ?? 'var(--color-global-bgmain)'\"\n [style.cursor]=\"annotation?.draggable ? 'move' : 'default'\"\n [className]=\"'padding-h-2 ' + annotation.className ?? ''\"\n style=\"border-radius: 2px; display: inline-block;\">\n @if (annotation.template) {\n <ng-container *ngTemplateOutlet=\"annotation.template;context: {$implicit: annotation}\"></ng-container>\n } @else {\n {{ annotation.note?.label }}\n }\n </div>\n </svg:foreignObject>\n }\n}\n","import {ChangeDetectorRef, Component, Input, OnInit} from '@angular/core';\nimport {ScaleService} from \"../../service/scale.service\";\nimport {map, Observable, tap} from \"rxjs\";\nimport {ChartService} from \"../../service/chart.service\";\nimport {AsyncPipe} from '@angular/common';\n\n@Component({\n selector: '[teta-crosshair]',\n templateUrl: './crosshair.component.html',\n styleUrls: ['./crosshair.component.scss'],\n standalone: true,\n imports: [\n AsyncPipe,\n ]\n})\nexport class CrosshairComponent implements OnInit {\n\n @Input() size: DOMRect;\n transform: Observable<any>;\n\n constructor(private scaleService: ScaleService, private chartService: ChartService, private cdr: ChangeDetectorRef) {\n }\n\n ngOnInit(): void {\n this.transform = this.chartService.pointerMove.pipe(\n map((event: PointerEvent) => {\n return {\n x: event.type === 'mouseleave' ? -9999 : event.offsetX,\n y: event.type === 'mouseleave' ? -9999 : event.offsetY\n }\n }),\n tap(() => {\n setTimeout(() => {\n this.cdr.detectChanges();\n })\n\n })\n )\n\n }\n\n}\n","@if (transform | async; as t) {\n <svg:line [attr.x1]=\"t.x\" y1=\"0\" [attr.x2]=\"t.x\" [attr.y2]=\"size.height\" stroke=\"var(--color-text-90)\"\n stroke-width=\"0.5\"></svg:line>\n <svg:line x1=\"0\" [attr.y1]=\"t.y\" [attr.x2]=\"size.width\" [attr.y2]=\"t.y\" stroke=\"var(--color-text-90)\"\n stroke-width=\"0.5\"></svg:line>\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n Input, NgZone, OnChanges, OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport {IChartConfig} from '../model/i-chart-config';\nimport {BrushService} from '../service/brush.service';\nimport {ChartService} from '../service/chart.service';\nimport {Axis} from '../core/axis/axis';\nimport {BrushType} from '../model/enum/brush-type';\nimport * as d3 from 'd3';\nimport {BrushMessage} from '../model/i-broadcast-message';\nimport {filter, takeWhile} from 'rxjs';\n\n@Directive({\n selector: '[tetaBrushable]',\n standalone:true\n})\nexport class BrushableDirective implements OnDestroy, OnInit, AfterViewInit, OnChanges {\n @Input() config: IChartConfig;\n @Input() axis: Axis;\n\n private selection: number[];\n private brush: d3.BrushBehavior<any>;\n private brushMap = new Map<BrushType, d3.BrushBehavior<any>>()\n .set(BrushType.x, d3.brushX())\n .set(BrushType.y, d3.brushY());\n private _alive = true;\n private _container;\n\n constructor(\n private brushService: BrushService,\n private chartService: ChartService,\n private element: ElementRef,\n private zone: NgZone\n ) {\n this._container = d3.select(this.element.nativeElement);\n }\n\n ngOnInit() {\n this.brushService.brushDomain.pipe(\n takeWhile(() => this._alive),\n filter((brush) => brush.chartId !== this.config.id)\n ).subscribe((brush) => {\n this._container.call(\n this.brush.move,\n [\n Math.floor(brush.selection[0]),\n Math.floor(brush.selection[1]),\n ].map(this.axis.scale)\n );\n });\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n\n ngAfterViewInit() {\n if(this.config?.brush?.enable) {\n const brushMessage = new BrushMessage({\n chartId: this.config.id,\n selection: [this.config?.brush?.from, this.config?.brush?.to],\n mode: 'init'\n });\n this.brushService.setBrush(brushMessage);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.hasOwnProperty('config')) {\n this.clearPreviousSelection();\n }\n\n if (this.config?.brush?.enable) {\n this.applyBrush(\n this.config,\n this.axis.scale\n );\n }\n }\n\n applyBrush(config: IChartConfig, brushScale: any) {\n this.brush?.on('start brush end', null);\n if (config.brush?.enable) {\n this.brush = this.brushMap.get(config?.brush?.type ?? BrushType.x);\n this.brush.on('start brush end', (_: d3.D3BrushEvent<any>) => {\n if (_.sourceEvent) {\n if (!_.selection) return;\n const [from, to] = _.selection as number[];\n if (to - from === 0) {\n const selection: number[] =\n this.selection?.map(brushScale) ??\n [config.brush?.from, config.brush?.to].map(brushScale);\n const halfBrushHeight = (selection[1] - selection[0]) / 2;\n const invertedSelection: number[] = [\n from - halfBrushHeight,\n to + halfBrushHeight,\n ].map(brushScale.invert);\n\n if (\n invertedSelection[1] - invertedSelection[0] >\n config.brush?.max\n ) {\n this._container.call(\n this.brush.move,\n [\n Math.floor(invertedSelection[0]),\n Math.floor(invertedSelection[0] + config.brush?.max),\n ].map(brushScale)\n );\n return;\n }\n\n if (\n invertedSelection[1] - invertedSelection[0] <\n config.brush?.min\n ) {\n this._container.call(\n this.brush.move,\n [\n Math.floor(invertedSelection[0]),\n Math.ceil(invertedSelection[0] + config.brush?.min),\n ].map(brushScale)\n );\n return;\n }\n\n this._container.call(this.brush.move, [\n from - halfBrushHeight,\n to + halfBrushHeight,\n ]);\n return;\n }\n\n if (\n brushScale.invert(to) - brushScale.invert(from) >\n config.brush?.max\n ) {\n this._container.call(\n this.brush.move,\n this.selection\n ? [\n this.selection[0],\n this.selection[0] + config.brush?.max,\n ].map(brushScale)\n : [config.brush?.from, config.brush?.to].map(brushScale)\n );\n return;\n }\n\n if (\n brushScale.invert(to) - brushScale.invert(from) <\n config.brush?.min\n ) {\n this._container.call(\n this.brush.move,\n this.selection\n ? [\n this.selection[0],\n this.selection[0] + config.brush?.min,\n ].map(brushScale)\n : [config.brush?.from, config.brush?.to].map(brushScale)\n );\n return;\n }\n\n if (_.sourceEvent instanceof MouseEvent) {\n this.selection = _.selection.map(brushScale.invert);\n }\n\n const brushMessage = new BrushMessage({\n chartId: this.config.id,\n selection: [brushScale.invert(from), brushScale.invert(to)],\n mode: _.mode\n });\n this.brushService.setBrush(brushMessage);\n }\n });\n\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n this._container.call(this.brush);\n\n let domain = brushScale.domain();\n\n if (config?.brush?.from) {\n domain[0] = config.brush.from;\n }\n\n if (config?.brush?.to) {\n domain[1] = config.brush.to;\n }\n\n this._container.call(\n this.brush.move,\n this.selection\n ? this.selection.map(brushScale)\n : domain.map(brushScale),\n {}\n );\n }, 0);\n });\n }\n }\n\n clearPreviousSelection() {\n this.selection = null;\n }\n}\n","import {NgZone} from '@angular/core';\nimport {MonoTypeOperatorFunction, Observable, pipe} from 'rxjs';\n\nexport function tetaZoneFull<T>(ngZone: NgZone): MonoTypeOperatorFunction<T> {\n return source =>\n new Observable(subscriber =>\n source.subscribe({\n next: value => ngZone.run(() => subscriber.next(value)),\n error: (error: unknown) => ngZone.run(() => subscriber.error(error)),\n complete: () => ngZone.run(() => subscriber.complete()),\n }),\n );\n}\n\nexport function tetaZoneFree<T>(ngZone: NgZone): MonoTypeOperatorFunction<T> {\n return source =>\n new Observable(subscriber =>\n ngZone.runOutsideAngular(() => source.subscribe(subscriber)),\n );\n}\n\nexport function tetaZoneOptimized<T>(ngZone: NgZone): MonoTypeOperatorFunction<T> {\n return pipe(tetaZoneFree(ngZone), tetaZoneFull(ngZone));\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n NgZone,\n OnDestroy,\n} from '@angular/core';\nimport {\n animationFrameScheduler,\n combineLatest,\n map,\n Observable,\n observeOn,\n shareReplay,\n withLatestFrom,\n} from 'rxjs';\n\nimport { Axis } from '../core/axis/axis';\nimport { BasePoint } from '../model/base-point';\nimport { AxisOrientation } from '../model/enum/axis-orientation';\nimport { BrushType } from '../model/enum/brush-type';\nimport { ZoomType } from '../model/enum/zoom-type';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { IScalesMap } from '../model/i-scales-map';\nimport { PlotBand } from '../model/plot-band';\nimport { Series } from '../model/series';\nimport { ChartService } from '../service/chart.service';\nimport { ScaleService } from '../service/scale.service';\nimport { TooltipComponent } from './tooltip/tooltip.component';\nimport { XAxisComponent } from './x-axis/x-axis.component';\nimport { ZoomableDirective } from '../directives/zoomable.directive';\nimport { YAxisComponent } from './y-axis/y-axis.component';\nimport { AsyncPipe, KeyValuePipe } from '@angular/common';\nimport { PlotBandComponent } from './plotband/plot-band.component';\nimport { GridlinesComponent } from './gridlines/gridlines.component';\nimport { SeriesHostComponent } from './series-host/series-host.component';\nimport { PlotlineComponent } from './plotline/plotline.component';\nimport { AnnotationComponent } from './annotation/annotation.component';\nimport { CrosshairComponent } from './crosshair/crosshair.component';\nimport { BrushableDirective } from '../directives/brushable.directive';\nimport { tetaZoneFull } from '../../observable/zoneObservable';\n\ntype Opposite = boolean;\ntype DisplayPlotBand = {\n axis: Axis;\n plotBand: PlotBand;\n};\n@Component({\n selector: 'teta-chart-container',\n templateUrl: './chart-container.component.html',\n styleUrls: ['./chart-container.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n TooltipComponent,\n ZoomableDirective,\n XAxisComponent,\n YAxisComponent,\n AsyncPipe,\n KeyValuePipe,\n PlotBandComponent,\n GridlinesComponent,\n SeriesHostComponent,\n PlotlineComponent,\n AnnotationComponent,\n CrosshairComponent,\n BrushableDirective,\n ]\n})\nexport class ChartContainerComponent implements AfterViewInit, OnDestroy {\n config: Observable<IChartConfig>;\n scales: Observable<IScalesMap>;\n size: Observable<DOMRect>;\n visibleRect: Observable<any>;\n brushScale: Observable<any>;\n zoomType = ZoomType;\n plotBands: Observable<DisplayPlotBand[]>;\n\n private _observer: ResizeObserver;\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 _scaleService: ScaleService,\n private _elementRef: ElementRef,\n private _zone: NgZone\n ) {\n this.config = this._svc.config;\n this.size = this._svc.size;\n\n this.scales = this._scaleService.scales.pipe(\n observeOn(animationFrameScheduler),\n tetaZoneFull(this._zone),\n shareReplay({\n bufferSize: 1,\n refCount: true,\n })\n );\n\n this.plotBands = combineLatest([this.config, this.scales]).pipe(\n map(([config, scales]) => {\n const bands: DisplayPlotBand[] = [];\n config.xAxis?.forEach((axis, index) => {\n axis.plotBands?.forEach(band => {\n bands.push({\n plotBand: band,\n axis: scales.x.get(index),\n });\n });\n });\n config.yAxis?.forEach((axis, index) => {\n axis.plotBands?.forEach(band => {\n bands.push({\n plotBand: band,\n axis: scales.y.get(index),\n });\n });\n });\n\n return bands.sort((a, b) => a.plotBand.order - b.plotBand.order);\n })\n );\n\n this.brushScale = this._scaleService.scales.pipe(\n withLatestFrom(this.config),\n map((data: [IScalesMap, IChartConfig]) => {\n const [{ x, y }, config] = data;\n\n return config.brush?.type === BrushType.x ||\n config?.zoom?.type === ZoomType.x\n ? x.get(0)?.scale\n : y.get(0)?.scale;\n }),\n shareReplay({\n bufferSize: 1,\n refCount: true,\n })\n );\n\n this.visibleRect = combineLatest([\n this.size,\n this.scales,\n this.config,\n ]).pipe(\n map((data: [DOMRect, IScalesMap, IChartConfig]) => {\n const [size, { x, y }, config] = data;\n const yAxesArray = Array.from(y.values());\n const xAxesArray = Array.from(x.values());\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 return {\n x: left + config.bounds?.left,\n y: top + config.bounds?.top,\n width:\n size.width -\n left -\n right -\n config.bounds?.left -\n config.bounds?.right,\n height:\n size.height -\n top -\n bottom -\n config.bounds?.top -\n config.bounds?.bottom,\n };\n }),\n tetaZoneFull(this._zone),\n shareReplay({\n bufferSize: 1,\n refCount: true,\n })\n );\n }\n\n ngAfterViewInit(): void {\n this._observer = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n requestAnimationFrame(() => {\n if (\n !Array.isArray(entries) ||\n !entries.length ||\n entries[0].contentRect.width <= 0 ||\n entries[0].contentRect.height <= 0\n ) {\n return;\n }\n this._svc.setSize(entries[0].contentRect);\n });\n });\n this._observer.observe(this._elementRef.nativeElement);\n }\n\n ngOnDestroy() {\n this._observer.unobserve(this._elementRef.nativeElement);\n this._observer.disconnect();\n }\n\n private sumSize = (acc, curr) => acc + curr.selfSize;\n\n getTranslate(axis?: Axis, size?: DOMRect): Observable<string> {\n return this.scales.pipe(\n withLatestFrom(this.config),\n map((data: [IScalesMap, IChartConfig]) => {\n const [{ x, y }, config] = data;\n const xAxesArray = Array.from(x.values());\n const yAxesArray = Array.from(y.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 config.bounds?.right\n );\n const nonOppisteTranslateY = nonOppositeOffsetY.reduce(\n (acc, curr) => acc + curr.selfSize,\n config.bounds?.left\n );\n\n const oppositeTranslateX = oppositeOffsetX.reduce(\n (acc, curr) => acc + curr.selfSize,\n config.bounds?.top\n );\n\n const nonOppisteTranslateX = nonOppositeOffsetX.reduce(\n (acc, curr) => acc + curr.selfSize,\n config.bounds?.bottom\n );\n\n const left = yAxesArray\n .filter(_ => _.options.visible && _.options.opposite !== true)\n .reduce((acc, curr) => acc + curr.selfSize, config.bounds?.left);\n\n const top = xAxesArray\n .filter(_ => _.options.visible && _.options.opposite === true)\n .reduce((acc, curr) => acc + curr.selfSize, config.bounds?.top);\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 }\n\n click(\n event: MouseEvent,\n xScales: Map<number, Axis>,\n yScales: Map<number, Axis>\n ) {\n const x = xScales.get(0)?.scale;\n const y = yScales.get(0)?.scale;\n this._svc.emitChartClick({\n event: event,\n target: {\n x: x.invert(event.offsetX),\n y: y.invert(event.offsetY),\n },\n });\n }\n\n contextMenu(\n event: MouseEvent,\n xScales: Map<number, Axis>,\n yScales: Map<number, Axis>\n ) {\n const x = xScales.get(0)?.scale;\n const y = yScales.get(0)?.scale;\n this._svc.emitChartContextMenu({\n event: event,\n target: {\n x: x.invert(event.offsetX),\n y: y.invert(event.offsetY),\n },\n });\n }\n\n mouseMove(event) {\n this._svc.setPointerMove(event);\n }\n\n mouseLeave(event) {\n this._svc.setPointerMove(event);\n }\n\n trackSerie(index, item: Series<BasePoint>) {\n return item.name?.length ? item.name : index;\n }\n}\n","@if ({\n size: size | async,\n config: config | async,\n scales: scales | async,\n plotBands: plotBands | async,\n visibleRect: visibleRect | async\n}; as data) {\n @if (data.config?.tooltip?.enable) {\n <teta-tooltip [size]=\"data.size\"\n [config]=\"data.config\"></teta-tooltip>\n }\n @if (data.size?.height > 0\n && data.size?.width > 0\n && data.visibleRect?.height > 0\n && data.visibleRect?.width > 0\n && data.scales?.x.size === data.config.xAxis.length\n && data.scales?.y.size === data.config.yAxis.length) {\n <svg height=\"100%\" width=\"100%\" class=\"position-absolute\">\n <g class=\"y-axis-container\">\n @for (item of data.scales.y | keyvalue; track item.value.index) {\n @if (item.value.selfSize > 0\n && item.value.options.visible\n && data.scales.x.size > 0\n && data.scales.y.size > 0) {\n <g\n teta-y-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"item.value.options.opposite ? 0 : -item.value.selfSize\"\n [attr.y]=\"0\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.width]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></rect>\n }\n }\n </g>\n <g class=\"x-axis-container\">\n @for (item of data.scales.x | keyvalue; track item.value.index) {\n @if (item.value.options.visible && data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g\n teta-x-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"0\"\n [attr.y]=\"item.value.options.opposite ? -item.value.selfSize : 0\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></rect>\n }\n }\n </g>\n </svg>\n }\n @if (data.size?.height > 0\n && data.size?.width > 0\n && data.visibleRect?.height > 0\n && data.visibleRect?.width > 0\n && data.scales?.x.size === data.config.xAxis.length\n && data.scales?.y.size === data.config.yAxis.length) {\n <svg\n tetaZoomable\n tetaBrushable\n class=\"position-absolute\"\n [size]=\"data.visibleRect\"\n [config]=\"data.config\"\n [axis]=\"data.config?.zoom?.type === zoomType.x ? data.scales.x.get(0) : data.scales.y.get(0)\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.viewBox]=\"'0 0 ' + data.visibleRect.width + ' ' + data.visibleRect.height\"\n [style.transform]=\"'translate('+ data.visibleRect.x +'px, '+ data.visibleRect.y +'px)'\"\n (contextmenu)=\"contextMenu($event, data.scales.x, data.scales.y)\"\n (click)=\"click($event, data.scales.x, data.scales.y)\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousemove)=\"mouseMove($event)\">\n @if (data.config.gridLines?.enable !== false) {\n <g class=\"gridlines\"\n teta-gridlines\n [size]=\"data.size\"></g>\n }\n <g class=\"x-axis-plotband-container\">\n @for (plotBand of data.plotBands; track plotBand) {\n <g teta-plot-band\n [plotBand]=\"plotBand.plotBand\"\n [scale]=\"plotBand.axis.scale\"\n [size]=\"data.visibleRect\"\n [axis]=\"plotBand.axis\"></g>\n }\n </g>\n <g class=\"series-container\">\n @for (series of data.config.series; track series; ) {\n @if (series.visible) {\n <g teta-series-host\n [config]=\"data.config\"\n [series]=\"series\"></g>\n }\n }\n </g>\n <g class=\"x-axis-plotline-container\">\n @for (axis of data.config.xAxis; let i = $index; track axis) {\n @for (plotLine of axis.plotLines; track plotLine) {\n <g teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.x.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.x.get(i)\"></g>\n }\n }\n </g>\n <g class=\"y-axis-plotline-container\">\n @for (axis of data.config.yAxis; let i = $index; track axis; ) {\n @for (plotLine of axis.plotLines; track plotLine) {\n <g teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.y.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.y.get(i)\"></g>\n }\n }\n </g>\n <g class=\"annotations\">\n @for (annotation of data.config.annotations; track annotation) {\n <g teta-annotation\n [visibleRect]=\"data.visibleRect\"\n [annotation]=\"annotation\"></g>\n }\n </g>\n @if (data.config.tooltip?.showCrosshair) {\n <g class=\"crosshair\">\n <g teta-crosshair [size]=\"data.visibleRect\"></g>\n </g>\n }\n </svg>\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n} from '@angular/core';\nimport { Series } from '../model/series';\nimport { BasePoint } from '../model/base-point';\nimport { SeriesType } from '../model/enum/series-type';\nimport {ChartService} from \"../service/chart.service\";\n\n@Component({\n selector: 'teta-legend',\n templateUrl: './legend.component.html',\n styleUrls: ['./legend.component.scss'],\n standalone:true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LegendComponent {\n private sizeMapping = new Map<SeriesType, number>()\n .set(SeriesType.line, 2)\n .set(SeriesType.scatter, 2)\n .set(SeriesType.bar, 12)\n .set(SeriesType.area, 2)\n .set(SeriesType.block, 12)\n .set(SeriesType.blockArea, 2);\n\n @Input() series: Array<Series<BasePoint>>;\n @HostBinding('class.padding-bottom-4') classLegend = true;\n\n constructor(private chartService: ChartService) {}\n\n getHeight(serie: Series<BasePoint>) {\n return this.sizeMapping.get(serie.type ?? SeriesType.line);\n }\n\n click(serie: Series<BasePoint>) {\n this.chartService.toggleVisibilitySeries([serie.id]);\n }\n}\n","@for (serie of series; track serie.id) {\n @if (serie?.showInLegend !== false) {\n <div>\n <div class=\"legend-item cursor-pointer\"\n (click)=\"click(serie)\">\n <div class=\"legend-icon-form\"\n [style.height.px]=\"getHeight(serie)\"\n [style.border-top-color]=\"serie.visible ? serie.color : 'var(--color-text-30)'\"\n [style.border-top-style]=\"serie.style?.strokeDasharray ? 'dashed' : 'solid'\"\n [style.border-width.px]=\"serie.style?.strokeDasharray ? 1 : 2\"></div>\n <div class=\"legend-label\" style=\"user-select: none\"\n [style.text-decoration]=\"serie.visible ? 'none' : 'line-through'\">{{ serie.name }}\n </div>\n </div>\n </div>\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport {map, Observable, takeWhile, withLatestFrom} from 'rxjs';\n\nimport {Annotation} from '../model/annotation';\nimport {BasePoint} from '../model/base-point';\nimport {ScaleType} from '../model/enum/scale-type';\nimport {TooltipTracking} from '../model/enum/tooltip-tracking';\nimport {IChartConfig} from '../model/i-chart-config';\nimport {IChartEvent} from '../model/i-chart-event';\nimport {IPointMove} from '../model/i-point-move';\nimport {IScalesMap} from '../model/i-scales-map';\nimport {PlotBand} from '../model/plot-band';\nimport {PlotLine} from '../model/plot-line';\nimport {BrushService} from '../service/brush.service';\nimport {ChartService} from '../service/chart.service';\nimport {ScaleService} from '../service/scale.service';\nimport {ZoomService} from '../service/zoom.service';\nimport {ChartContainerComponent} from '../chart-container/chart-container.component';\nimport {AsyncPipe} from '@angular/common';\nimport {LegendComponent} from '../legend/legend.component';\n\n@Component({\n selector: 'teta-svg-chart',\n templateUrl: './chart.component.html',\n styleUrls: ['./chart.component.scss'],\n standalone: true,\n providers: [ChartService, ZoomService, ScaleService, BrushService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ChartContainerComponent,\n AsyncPipe,\n LegendComponent,\n ]\n})\nexport class ChartComponent implements OnInit, OnDestroy {\n hasSeriesData: Observable<boolean>;\n svcConfig: Observable<IChartConfig>;\n @Output()\n pointerMove: EventEmitter<IChartEvent<Map<number, number>>> =\n new EventEmitter<IChartEvent<Map<number, number>>>();\n\n @Output()\n plotBandsMove: EventEmitter<IChartEvent<PlotBand>> = new EventEmitter<\n IChartEvent<PlotBand>\n >();\n\n @Output()\n plotBandClick: EventEmitter<IChartEvent<PlotBand>> = new EventEmitter<\n IChartEvent<PlotBand>\n >();\n\n @Output()\n plotBandContextMenu: 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 @Output()\n chartClick: EventEmitter<IChartEvent<BasePoint>> = new EventEmitter<\n IChartEvent<BasePoint>\n >();\n\n @Output()\n chartContextMenu: EventEmitter<IChartEvent<BasePoint>> = new EventEmitter<\n IChartEvent<BasePoint>\n >();\n\n @Output()\n annotationContextMenu: EventEmitter<IChartEvent<Annotation>> =\n new EventEmitter<IChartEvent<Annotation>>();\n\n @Output()\n annotationClick: EventEmitter<IChartEvent<Annotation>> = new EventEmitter<\n IChartEvent<Annotation>\n >();\n\n @Output()\n annotationMove: EventEmitter<IChartEvent<Annotation>> = new EventEmitter<\n IChartEvent<Annotation>\n >();\n\n @Output()\n zoomServiceInstance: EventEmitter<ZoomService> =\n new EventEmitter<ZoomService>();\n\n @Output()\n brushServiceInstance: EventEmitter<BrushService> =\n new EventEmitter<BrushService>();\n\n @Input() set config(config: IChartConfig) {\n this.chartService.setConfig(config);\n this.zoomService.setBroadcastChannel(config?.zoom?.syncChannel);\n }\n\n private _alive = true;\n\n constructor(\n public chartService: ChartService,\n public zoomService: ZoomService,\n public brushService: BrushService,\n public scaleService: ScaleService\n ) {\n this.svcConfig = this.chartService.config;\n this.hasSeriesData = this.svcConfig.pipe(\n map(_ => _.series?.length > 0 && _.series?.some(_ => _.data?.length > 0))\n );\n }\n\n resetZoom() {\n this.scaleService.resetZoom();\n }\n\n ngOnInit(): void {\n this.zoomServiceInstance.emit(this.zoomService);\n this.brushServiceInstance.emit(this.brushService);\n\n this.chartService.pointerMove\n .pipe(\n takeWhile(() => this._alive),\n withLatestFrom(this.scaleService.scales, this.chartService.config)\n )\n .subscribe((data: [PointerEvent, IScalesMap, IChartConfig]) => {\n const [event, {x, y}, config] = data;\n const tooltipTracking = config?.tooltip?.tracking;\n if (tooltipTracking === TooltipTracking.y) {\n const result = new Map<number, number>();\n y.forEach((value, key) => {\n if (value.options.scaleType.type === ScaleType.band) {\n return;\n }\n result.set(key, value.scale.invert(event.offsetY));\n });\n this.pointerMove.emit({\n event: event,\n target: result,\n });\n } else {\n const result = new Map<number, number>();\n x.forEach((value, key) => {\n if (value.options.scaleType.type === ScaleType.band) {\n return;\n }\n result.set(key, value.scale.invert(event.offsetX));\n });\n this.pointerMove.emit({\n event: event,\n target: result,\n });\n }\n });\n\n this.chartService.plotBandEvent\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.plotBandsMove.emit(_);\n });\n\n this.chartService.plotLineMove\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.plotLinesMove.emit(_);\n });\n\n this.chartService.pointMove\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.pointMove.emit(_);\n });\n\n this.chartService.chartClick\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.chartClick.emit(_);\n });\n\n this.chartService.chartContextMenu\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.chartContextMenu.emit(_);\n });\n\n this.chartService.plotBandClick\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.plotBandClick.emit(_);\n });\n\n this.chartService.plotBandContextMenu\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.plotBandContextMenu.emit(_);\n });\n\n this.chartService.annotationContextMenu\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.annotationContextMenu.emit(_);\n });\n\n this.chartService.annotationClick\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.annotationClick.emit(_);\n });\n\n this.chartService.annotationMove\n .pipe(takeWhile(() => this._alive))\n .subscribe(_ => {\n this.annotationMove.emit(_);\n });\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n}\n","@if ({\n hasSeriesData: hasSeriesData | async,\n svcConfig: svcConfig | async\n}; as data) {\n @if (data.hasSeriesData === true) {\n <div class=\"column column_auto\">\n <teta-chart-container class=\"chart-container position-relative\"></teta-chart-container>\n </div>\n @if (data.svcConfig.legend?.enable === true) {\n <teta-legend [series]=\"data.svcConfig.series\"></teta-legend>\n }\n } @else {\n <div class=\"column column_auto justify-content-center\">\n <span class=\"font-body-3 color-text-40 overflow-hidden text-overflow-ellipsis nowrap text-align-center\">\n <div #ref><ng-content></ng-content></div>\n @if (!ref.hasChildNodes()) {\n <span>\n No data\n </span>\n }\n </span>\n </div>\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnInit,\n} from '@angular/core';\nimport { filter, map, Observable } from 'rxjs';\n\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { BasePoint } from '../../../model/base-point';\nimport { FillType } from '../../../model/enum/fill-type';\nimport { ChartService } from '../../../service/chart.service';\nimport { ScaleService } from '../../../service/scale.service';\nimport { ZoomService } from '../../../service/zoom.service';\nimport { AsyncPipe, NgStyle } from '@angular/common';\n\n@Component({\n selector: 'svg:svg[teta-block-horizontal-series]',\n templateUrl: './block-horizontal-series.component.html',\n styleUrls: ['./block-horizontal-series.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n NgStyle,\n ]\n})\nexport class BlockHorizontalSeriesComponent<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit\n{\n x: Observable<any>;\n y: Observable<any>;\n displayPoints: Observable<BasePoint[]>;\n fillType = FillType;\n id: string;\n Math = Math;\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 this.id = (Date.now() + Math.random()).toString(36);\n }\n\n override ngOnInit(): void {\n this.x = this.scaleService.scales.pipe(\n map(_ => _.x.get(this.series.xAxisIndex)?.scale)\n );\n this.y = this.scaleService.scales.pipe(\n map(_ => _.y.get(this.series.yAxisIndex)?.scale)\n );\n\n this.displayPoints = this.x.pipe(\n filter(y => y),\n map(y => {\n return this.series.data.filter((point, index, arr) => {\n const [min, max] = y.domain();\n return (\n (point.x >= min ||\n point.x1 >= min ||\n arr[index + 1]?.x >= min ||\n arr[index + 1]?.x1 >= min) &&\n (point.x <= max ||\n point.x1 <= max ||\n arr[index - 1]?.x <= max ||\n arr[index - 1]?.x1 <= max)\n );\n });\n })\n );\n }\n\n mouseenter(point: BasePoint) {\n this.svc.setTooltip({\n point: point,\n series: this.series,\n });\n }\n\n mouseleave(point: BasePoint) {\n this.svc.setTooltip({\n point: null,\n series: this.series,\n });\n }\n}\n","@if ({\n y: y | async,\n x: x | async,\n points: displayPoints | async\n}; as data) {\n @if (series?.fillType === fillType.gradient) {\n <svg:defs>\n <svg:linearGradient [id]=\"'gradient-fill-' + id\" gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n </svg:defs>\n }\n @if (data.x && data.y) {\n @for (point of data.points; track point) {\n <svg:g (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\">\n <svg:rect\n x=\"0\"\n [attr.x]=\"data.x(point.x)\"\n [attr.width]=\"Math.abs(data.x(point.x1) - data.x(point.x))\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : point.iconId ? 'url(#pattern'+point.iconId+')' : point.color ?? series.style?.fill ?? series.color\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n height=\"100%\">\n </svg:rect>\n @if (point.text && data.x(point.x1) - data.x(point.x) > 8) {\n <svg:text [attr.transform]=\"'rotate(270)'\"\n [ngStyle]='{\"transform-origin\": (data.x(point.x1) + data.x(point.x)) / 2+\"px 50%\"}'\n y=\"50%\"\n [attr.x]=\"(data.x(point.x1) + data.x(point.x)) / 2\"\n text-anchor=\"middle\" alignment-baseline=\"middle\"\n text-anchor=\"middle\">{{ point.text }}\n </svg:text>\n }\n <svg:line y1=\"0\" y2=\"100%\" [attr.x1]=\"data.x(point.x)\" [attr.x2]=\"data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"></svg:line>\n <svg:line y1=\"0\" y2=\"100%\" [attr.x1]=\"data.x(point.x1)\" [attr.x2]=\"data.x(point.x1)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"></svg:line>\n </svg:g>\n }\n }\n}\n","/*\n * Public API Surface of chart\n */\n\nexport * from './chart/service/public-api';\nexport * from './chart/base/series-base.component';\nexport * from './chart/chart/chart.component';\nexport * from './chart/legend/legend.component';\nexport * from './chart/model/public-api';\nexport * from './chart/chart-container/series/public-api';\nexport * from './chart/core/axis/axis';\nexport * from './chart/core/utils/public-api'\nexport * from './observable/public-api'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.BroadcastService","i2.ChartService","i1.ChartService","i2.ZoomService","i2.ScaleService","i3.ZoomService","i1.ScaleService","i1.ZoomService","i3.ChartService","i1.BrushService","i3.BrushService","i4.ScaleService"],"mappings":"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"}