@tetacom/svg-charts 1.7.35 → 1.7.36

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/const/chart-config-postfix.ts","../../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/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.component.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/chart/chart-container/series-controls/series-controls.component.ts","../../src/chart/chart-container/series-controls/series-controls.component.html","../../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/model/plot-band.ts","../../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":["export const chartConfigPostfix = 'series_config';\n","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(filter((msg) => channel && msg.channel === channel));\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?: { top?: number; right?: number; bottom?: number; left?: number }) {\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 controls: {\n enable: false,\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 custom,\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","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: '#FF7F50',\n visible: true,\n enabled: true,\n clipPointsDirection: ClipPointsDirection.x,\n});\n","import { Injectable } from '@angular/core';\nimport {\n BehaviorSubject,\n filter,\n lastValueFrom,\n map,\n merge,\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';\nimport { chartConfigPostfix } from '../const/chart-config-postfix';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ChartService {\n public id: Observable<string>;\n public config: Observable<IChartConfig>;\n public initialConfig: 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 public configUpdated: Observable<string>;\n\n private config$ = new BehaviorSubject<IChartConfig>(defaultChartConfig());\n private configUpdates$ = new Subject<IChartConfig>();\n private size$ = new BehaviorSubject<DOMRect>(null);\n private pointerMove$ = new Subject<PointerEvent>();\n private tooltips$ = new BehaviorSubject<Map<Series<BasePoint>, IDisplayTooltip>>(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 constructor() {\n this.id = of((Date.now() + Math.random()).toString(36));\n\n this.initialConfig = this.config$.asObservable().pipe(\n shareReplay({\n bufferSize: 1,\n refCount: true,\n }),\n );\n\n const initialConfig = this.initialConfig.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.config = merge(initialConfig, this.configUpdates$).pipe(\n filter((_) => _ !== null),\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$.asObservable().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$.asObservable().pipe(filter((_) => _?.event?.type === 'click'));\n this.plotBandContextMenu = this.plotBandEvent$.asObservable().pipe(filter((_) => _?.event?.type === 'contextmenu'));\n this.configUpdated = this.configUpdates$.asObservable().pipe(\n map((config) => {\n return this.getConfigString(config);\n }),\n );\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 const key = [...currentTooltips.keys()].find((_) => _.id === tooltip.series.id);\n currentTooltips.delete(key);\n if (!tooltip.point) {\n currentTooltips.delete(tooltip.series);\n } else {\n currentTooltips.set(tooltip.series, tooltip);\n }\n this.tooltips$.next(new Map<Series<BasePoint>, IDisplayTooltip>(currentTooltips));\n }\n\n public clearTooltips() {\n this.tooltips$.next(new Map());\n }\n\n public async updateSeries(series: Series<BasePoint>, visible?: boolean) {\n const currentConfig = await lastValueFrom(this.config.pipe(take(1)));\n const currentSeriesIndex = currentConfig.series.findIndex((_) => _.id === series.id);\n\n if (currentSeriesIndex === -1) {\n return;\n }\n currentConfig.series = currentConfig.series.map((seriesItem) => {\n return { ...seriesItem };\n });\n\n try {\n this.saveCookie(currentConfig);\n } finally {\n this.configUpdates$.next({ ...currentConfig });\n }\n }\n\n public async clearSeriesSettings() {\n const config = await lastValueFrom(this.initialConfig.pipe(take(1)));\n if (!config.name) return;\n localStorage.removeItem(`${config.name}_${chartConfigPostfix}`);\n this.configUpdates$.next(null);\n this.config$.next({ ...config });\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 private saveCookie(config: IChartConfig) {\n if (!config.name) return;\n const seriesConfig = this.getConfigString(config);\n localStorage.setItem(`${config.name}_${chartConfigPostfix}`, seriesConfig);\n }\n\n private getConfigString(config: IChartConfig) {\n const series = config?.series?.map((_: Series<BasePoint>) => {\n return {\n id: _.id,\n visible: _.visible,\n enabled: _.enabled,\n color: _.color,\n type: _.type,\n fillType: _.fillType,\n strokeDasharray: _.style?.strokeDasharray,\n strokeWidth: _.style?.strokeWidth,\n };\n });\n return JSON.stringify(series ?? null);\n }\n\n private restoreLocalStorage(config: IChartConfig): IChartConfig {\n if (!config.name) return config;\n\n const seriesConfig = localStorage.getItem(`${config.name}_${chartConfigPostfix}`);\n if (seriesConfig) {\n const json: any[] = JSON.parse(seriesConfig);\n config.series = config.series.map((serie, index) => {\n const found = json.find((_) => _.id === serie.id);\n if (found) {\n serie.visible = found.visible ?? serie.visible;\n serie.enabled = found.enabled ?? serie.enabled;\n serie.color = found.color ?? serie.color;\n const type = parseInt(found.type, 10);\n if (type !== null && type !== undefined && !isNaN(type)) {\n serie.type = type;\n }\n const fillType = parseInt(found.fillType, 10);\n if (fillType !== null && fillType !== undefined && !isNaN(fillType)) {\n serie.fillType = fillType;\n }\n if (!serie.style) {\n serie.style = {};\n }\n serie.style.strokeWidth = found.strokeWidth ?? serie.style.strokeWidth;\n serie.style.strokeDasharray = found.strokeDasharray ?? serie.style.strokeDasharray;\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({}, defaultChartConfig().tooltip, config.tooltip);\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 = (inputText?: string | number | null, backupRatio = 0.5, fontSize = 10): 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.range(min, max + tickStep, tickStep).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 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(ticks, (_) => formatter(_).length);\n\n finalPadding += getTextWidth(formatter(ticks[maxElementLengthIndex]), this.backupRatio);\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<AxisOrientation, (point: BasePoint) => number>()\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 if (current.visible && current.enabled) {\n return acc.concat(current.data);\n }\n return acc;\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 (typeof extremes[0] === 'number' && typeof extremes[1] === 'number' && extremes[0] === extremes[1]) {\n if (extremes[1] > 0) {\n extremes[0] = 0;\n extremes[1] = extremes[1] * 2;\n } else {\n extremes[1] = extremes[1] + 1;\n }\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(orientation: AxisOrientation, config: IChartConfig, index: number): 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[this._orientation === AxisOrientation.y ? 'yAxisIndex' : 'xAxisIndex'] === 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 ? this.chartConfig.xAxis[this.index] : 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] | null;\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(\n private _broadcast: BroadcastService,\n private _chart: ChartService,\n ) {\n this.zoomed = this.zoomed$.asObservable().pipe(\n shareReplay({\n bufferSize: 1,\n refCount: true,\n }),\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([this._broadcast.subscribeToZoom(this.broadcastChannel), this._chart.config])\n .pipe(\n filter(([zoom, config]: [IBroadcastMessage<ZoomMessage>, IChartConfig]) => {\n return (\n 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 )\n .subscribe(([zoom, config]) => {\n this.fireZoom(zoom.message);\n });\n }\n }\n\n getD3Transform(\n targetDomain: [number, number],\n originalDomain: [number, number],\n scale,\n orientation: AxisOrientation,\n inverted: boolean,\n ) {\n const zoomScale =\n Math.abs(scale(originalDomain[1]) - scale(originalDomain[0])) /\n 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 { combineLatest, map, Observable, shareReplay, take, withLatestFrom } 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([this.chartService.size, this.chartService.config, this.zoomService.zoomed]).pipe(\n map(([size, config, zoom]) => {\n config = { ...config };\n config.xAxis = config.xAxis.map((_) => ({ ..._ }));\n config.yAxis = config.yAxis.map((_) => ({ ..._ }));\n const xAxisMap = new Map<number, Axis>();\n const yAxisMap = new Map<number, Axis>();\n\n config.yAxis.forEach((axis, index) => {\n const newAxis = Axis.createAxis(AxisOrientation.y, config, index);\n if (\n newAxis.options.visible &&\n config.series.some(\n (serie) => serie.yAxisIndex === index && serie.visible && serie.enabled && serie.data?.length > 0,\n )\n ) {\n newAxis.options.visible = true;\n } else {\n newAxis.options.visible = false;\n }\n yAxisMap.set(index, newAxis);\n });\n\n config.xAxis.forEach((axis, index) => {\n const newAxis = Axis.createAxis(AxisOrientation.x, config, index);\n if (\n newAxis.options.visible &&\n config.series.some((serie) => serie.xAxisIndex === index && serie.enabled && serie.data?.length > 0)\n ) {\n newAxis.options.visible = true;\n } else {\n newAxis.options.visible = false;\n }\n xAxisMap.set(index, newAxis);\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 = zoom?.axis?.orientation !== AxisOrientation.x || 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 = (size.height || 0) - top - bottom - config?.bounds?.top - 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 = zoom?.axis?.orientation !== AxisOrientation.y || 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 (config.zoom.syncChannel && config.zoom.syncType === ZoomType.x) {\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 (config.zoom.syncChannel && config.zoom.syncType === ZoomType.y) {\n this.zoomService.broadcastZoom(msg);\n }\n }\n });\n });\n }\n}\n","import { ChangeDetectorRef, Component, computed, ElementRef, inject, input } 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';\nimport { map } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n@Component({\n template: '',\n standalone: true,\n})\nexport class SeriesBaseComponent<T extends BasePoint> {\n config = input<IChartConfig>();\n series = input<Series<T>>();\n\n protected svc = inject(ChartService);\n protected cdr = inject(ChangeDetectorRef);\n protected scaleService = inject(ScaleService);\n protected zoomService = inject(ZoomService);\n protected element = inject(ElementRef);\n\n id = (Date.now() + Math.random()).toString(36);\n\n xScales = toSignal(this.scaleService.scales.pipe(map((_) => _.x)));\n yScales = toSignal(this.scaleService.scales.pipe(map((_) => _.y)));\n\n x = computed(() => {\n return this.xScales().get(this.series().xAxisIndex)?.scale;\n });\n y = computed(() => {\n return this.yScales().get(this.series().yAxisIndex)?.scale;\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","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 = (containerPosition.left + containerPosition.right) / 2 - 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 = (containerPosition.top + containerPosition.bottom) / 2 - 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 (verticalAlign === VerticalAlign.top || verticalAlign === VerticalAlign.innerTop) {\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 ? rect.bottom - transformedParentRect.bottom : 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 = 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 styleUrls: ['./tooltip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, NgTemplateOutlet]\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: ${(_.point.x as any) instanceof Date ? format(_.point.x as any) : _.point.x?.toFixed(2)}\n y: ${(_.point.y as any) instanceof Date ? format(_.point.y as any) : _.point.y?.toFixed(2)}\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 ? transformHtml(formatter(tooltipList)) : 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\n 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 >\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 $index) {\n <div class=\"display-flex align-center\">\n <span\n class=\"display-block margin-right-1\"\n [style.width.px]=\"10\"\n [style.height.px]=\"2\"\n [style.background-color]=\"tooltip.series?.color\"\n >\n </span>\n <span class=\"font-title-3\">\n {{ tooltip.series?.name }}\n <span class=\"font-body-3\">\n x: {{ format(tooltip.point?.x) }} y: {{ format(tooltip.point?.y) }}\n </span>\n </span>\n </div>\n }\n </div>\n }\n }\n </div>\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { Axis } from '../../core/axis/axis';\nimport { BehaviorSubject, map } from 'rxjs';\nimport { ScaleService } from '../../service/scale.service';\nimport { getTextWidth } from '../../core/utils/get-text-width';\nimport * as d3 from 'd3';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: '[teta-x-axis]',\n templateUrl: './x-axis.component.html',\n styleUrls: ['./x-axis.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class XAxisComponent {\n private scaleService = inject(ScaleService);\n\n xScales = toSignal(this.scaleService.scales.pipe(map((_) => _.x)));\n axis = input<Axis>();\n size = input<DOMRect>();\n\n x = computed(() => {\n return this.xScales().get(this.axis().index)?.scale;\n });\n ticks = computed(() => {\n const tickSize = this.x()\n .ticks()\n .map((_) =>\n getTextWidth(\n this.axis().options.tickFormat ? this.axis().options.tickFormat(_) : this.axis().defaultFormatter()(_),\n 0.45,\n 11,\n ),\n );\n return this.x().ticks(this.size().width / parseInt(d3.max(tickSize), 10) / 5);\n });\n\n getLabelTransform = computed(() => {\n return `translate(${this.size().width / 2}, ${this.axis().options.opposite ? -32 : 32})`;\n });\n}\n","@if (\n {\n x: x(),\n ticks: ticks(),\n axis: axis(),\n };\n as data\n) {\n @for (tick of data.ticks; track $index) {\n <svg:g text-anchor=\"middle\" [attr.transform]=\"'translate(' + data.x(tick) + ', 0)'\">\n <text\n fill=\"var(--color-text-70)\"\n [attr.dy]=\"data.axis.options.opposite ? '-0.71em' : '0.71em'\"\n [attr.y]=\"data.axis.options.opposite ? 0 : 9\"\n >\n {{ data.axis.options.tickFormat ? data.axis.options.tickFormat(tick) : data.axis.defaultFormatter()(tick) }}\n </text>\n <line stroke=\"var(--color-text-30)\" [attr.y2]=\"data.axis.options.opposite ? -6 : 6\"></line>\n </svg:g>\n }\n <svg:g class=\"font-caption\" style=\"fill: var(--color-text-70)\" [attr.transform]=\"getLabelTransform()\">\n <text fill=\"var(--color-text-70)\" text-anchor=\"middle\" dominant-baseline=\"middle\">\n {{ data.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 OnInit,\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 { combineLatest, takeWhile } from 'rxjs';\nimport { ZoomBehaviorType } from '../model/enum/zoom-behavior-type';\nimport { ScaleType } from '../model/enum/scale-type';\nimport { ScaleService } from '../service/scale.service';\n\n@Directive({\n selector: '[tetaZoomable]',\n standalone: true,\n})\nexport class ZoomableDirective implements OnDestroy, AfterViewInit, OnInit {\n @Input() config: IChartConfig;\n @Input() axis: Axis;\n @Input() size: DOMRect;\n\n @HostBinding('class.zoomable') zoomable = false;\n @HostBinding('class.crosshair') 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 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 scaleService: ScaleService,\n private zone: NgZone,\n ) {}\n\n ngOnInit() {\n if (this.axis?.options?.zoom || this.config?.zoom?.enable) {\n this.zoomable = this.config?.zoom?.zoomBehavior === ZoomBehaviorType.move && !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 combineLatest([this.scaleService.scales, this.zoomService.zoomed])\n .pipe(takeWhile(() => this.alive))\n .subscribe((data) => {\n const [scales, zoomed] = data;\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 axis =\n this.axis.orientation === AxisOrientation.x ? scales.x.get(this.axis.index) : scales.y.get(this.axis.index);\n const scale = axis.scale.copy().domain(this.axis.originDomain);\n let transform;\n if (zoomed.domain === null || zoomed.domain === undefined) {\n transform = zoomIdentity;\n } else {\n transform = this.zoomService.getD3Transform(\n zoomed.domain,\n axis.originDomain,\n scale,\n axis.orientation,\n axis.options.inverted,\n );\n }\n\n this.elementRef.nativeElement.__zoom = transform;\n this.currentTransform = transform;\n }\n });\n }\n\n private initZoomListeners() {\n const enable = (this.axis?.options?.zoom && this.axis?.options.visible !== false) || 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 = this.config?.zoom?.minTranslate != null ? this.axis.scale(this.config?.zoom?.minTranslate) : -Infinity;\n const max = this.config?.zoom?.maxTranslate != null ? this.axis.scale(this.config?.zoom?.maxTranslate) : Infinity;\n if (this.axis.orientation === AxisOrientation.x && this.config.zoom.type === ZoomType.x) {\n this.zoom.translateExtent([\n [Math.min(min, max), -Infinity],\n [Math.max(min, max), Infinity],\n ]);\n }\n\n if (this.axis.orientation === AxisOrientation.y && this.config.zoom.type === ZoomType.y) {\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 ? (extremes[1] - extremes[0]) / this.config.zoom?.min : 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\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 (event.ctrlKey && event.type === 'wheel') || Boolean(window.TouchEvent && event.type !== 'wheel');\n })\n .wheelDelta((event) => {\n const delta = 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 = type === 'end' ? 0 : this.axis.orientation === AxisOrientation.y ? event.deltaY : 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 const 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 ? domain : [...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.elementRef.nativeElement.__zoom = 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 { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { Axis } from '../../core/axis/axis';\n\nimport { ScaleService } from '../../service/scale.service';\nimport { map } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: '[teta-y-axis]',\n templateUrl: './y-axis.component.html',\n styleUrls: ['./y-axis.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class YAxisComponent {\n private scaleService = inject(ScaleService);\n yScales = toSignal(this.scaleService.scales.pipe(map((_) => _.y)));\n axis = input<Axis>();\n size = input<DOMRect>();\n\n y = computed(() => {\n return this.yScales().get(this.axis().index)?.scale;\n });\n\n getLabelTransform = computed(() => {\n return `translate(${this.axis().options.opposite ? this.axis().selfSize : -this.axis().selfSize}, ${\n this.size().height / 2\n }) rotate(-90)`;\n });\n}\n","@if (\n {\n y: y(),\n axis: axis(),\n };\n as data\n) {\n @for (tick of data.y.ticks(); track $index) {\n <svg:g\n [attr.text-anchor]=\"data.axis.options.opposite ? 'start' : 'end'\"\n [attr.transform]=\"'translate(0, ' + data.y(tick) + ')'\"\n >\n <text fill=\"var(--color-text-70)\" dy=\"0.32em\" [attr.x]=\"data.axis.options.opposite ? 10 : -9\">\n {{ data.axis.options.tickFormat ? data.axis.options.tickFormat(tick) : data.axis.defaultFormatter()(tick) }}\n </text>\n <line stroke=\"var(--color-text-30)\" [attr.x2]=\"data.axis.options.opposite ? 6 : -6\"></line>\n </svg:g>\n }\n <svg:g class=\"font-caption\" style=\"fill: var(--color-text-70)\" [attr.transform]=\"getLabelTransform()\">\n <text\n [attr.dy]=\"data.axis.options.opposite ? '-4px' : '4px'\"\n text-anchor=\"middle\"\n [attr.dominant-baseline]=\"data.axis.options.opposite ? 'auto' : 'hanging'\"\n >\n {{ data.axis.options.title }}\n </text>\n </svg:g>\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n HostListener,\n input,\n OnDestroy,\n signal,\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 imports: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlotBandComponent implements AfterViewInit, OnDestroy {\n plotBand = input<PlotBand>();\n axis = input<Axis>();\n scale = input<any>();\n size = input<DOMRect>();\n\n fromTo = signal<{\n from: number;\n to: number;\n } | null>({\n from: 0,\n to: 0,\n });\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 height = computed(() => {\n return this.size().height;\n });\n\n width = computed(() => {\n return this.size().width;\n });\n\n from = computed(() => {\n if (this.scale() && this.fromTo()) {\n return this.scale()(this.fromTo().from);\n }\n return 0;\n });\n\n to = computed(() => {\n if (this.scale() && this.fromTo()) {\n return this.scale()(this.fromTo().to);\n }\n return 0;\n });\n\n bandSize = computed(() => {\n if (this.scale() && this.fromTo()) {\n return Math.abs(this.scale()(this.fromTo().to) - this.scale()(this.fromTo().from));\n }\n return 0;\n });\n\n textPosition = computed(() => {\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.fromTo().from as any) instanceof Date ? (this.fromTo().from as any).getTime() : this.fromTo().from;\n const to = (this.fromTo().to as any) instanceof Date ? (this.fromTo().to as any).getTime() : this.fromTo().to;\n const position = ((from <= min ? min : from) + (to >= max ? max : to)) / 2;\n return this.scale()(position);\n });\n\n fill = computed(() => {\n if (this.plotBand().style?.plotBand?.patternImage) {\n return `url(#${this.plotBand().style.plotBand?.patternImage})`;\n }\n return this.plotBand().style.plotBand?.fill;\n });\n\n constructor(\n private chartService: ChartService,\n private element: ElementRef,\n ) {\n effect(() => {\n if (this.plotBand()) {\n this.fromTo.set({\n from: this.plotBand().from,\n to: this.plotBand().to,\n });\n }\n });\n }\n\n emit(event: IChartEvent<PlotBand>) {\n this.chartService.emitPlotBand(event);\n }\n\n ngAfterViewInit(): void {\n const plotbandElement = d3.select(this.element.nativeElement).select('.plotband');\n\n const grabElements = d3.select(this.element.nativeElement).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('start drag end', (event: d3.D3DragEvent<any, PlotBand, any>, d: PlotBand) => {\n const bandSize = parseFloat(\n plotbandElement.attr(this.axis().orientation === AxisOrientation.x ? 'width' : 'height'),\n );\n\n const from = this.scale().invert(event[AxisOrientation[this.axis().orientation]]);\n const to = this.scale().invert(event[AxisOrientation[this.axis().orientation]] + bandSize);\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.from = from;\n // d.to = to;\n // if (d.from < minValue) {\n // d.from = minValue;\n // }\n // if (d.to > maxValue) {\n // d.to = maxValue;\n // }\n\n d.from = from;\n d.to = to;\n\n this.fromTo.set({\n from: d.from,\n to: d.to,\n });\n this.emit({\n event,\n target: d,\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(event[AxisOrientation[this.axis().orientation]]);\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 this.fromTo.set({\n from: d.from,\n to: d.to,\n });\n this.emit({\n event,\n target: d,\n });\n },\n );\n\n plotbandElement.datum<PlotBand>(this.plotBand());\n grabElements.datum<PlotBand>(this.plotBand());\n\n if (this.plotBand().draggable) {\n plotbandElement.call(drag);\n }\n\n if (this.plotBand().resizable) {\n grabElements.call(resize);\n }\n }\n\n ngOnDestroy() {\n this.dragElements.on('start drag end', null);\n this.resizeElements.on('start drag end', null);\n }\n}\n","<svg:rect\n class=\"plotband\"\n xmlns:svg=\"http://www.w3.org/1999/html\"\n [class.draggable]=\"plotBand()?.draggable === true\"\n [attr.fill]=\"fill()\"\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]=\"textPosition()\"\n [attr.transform]=\"'rotate(-90, ' + textPosition() + ',' + height() / 2 + ')'\"\n [attr.y]=\"height() / 2\"\n >\n {{ 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]=\"textPosition()\"\n [attr.y]=\"width() / 2\"\n >\n {{ plotBand().label }}\n </svg:text>\n}\n@if (plotBand().resizable) {\n @if (plotBand().showGrabbers) {\n <svg:line\n 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\n 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\n 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\n 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 { AfterViewInit, ChangeDetectionStrategy, Component, Input } 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 changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe]\n})\nexport class GridlinesComponent implements AfterViewInit {\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(\n private svc: ScaleService,\n private chartService: ChartService,\n ) {\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\n ? generateTicks(scales.y.get(0).scale.domain(), config.gridLines?.y?.ticksCount)\n : scales.y.get(0)?.scale.ticks(ratio);\n }),\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\n ? generateTicks(scales.x.get(0).originDomain, config.gridLines?.x?.ticksCount)\n : scales.x.get(0)?.scale.ticks(ratio);\n }),\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","@if (\n { xValues: tickXValues | async, yValues: tickYValues | async, x: x | async, y: y | async, config: config | async };\n as data\n) {\n @if (data.y && data.config.gridLines?.showY !== false) {\n @for (tick of data.yValues; track $index) {\n <svg:line\n [attr.x1]=\"0\"\n [attr.y1]=\"data.y(tick) || 1\"\n [attr.x2]=\"size?.width\"\n [attr.y2]=\"data.y(tick) || 1\"\n ></svg:line>\n }\n }\n @if (data.x && data.config.gridLines?.showX !== false) {\n @for (tick of data.xValues; track $index) {\n <svg:line\n [attr.x1]=\"data.x(tick) || 1\"\n [attr.y1]=\"0\"\n [attr.x2]=\"data.x(tick) || 1\"\n [attr.y2]=\"size?.height\"\n ></svg:line>\n }\n }\n}\n","import { Component, computed, OnDestroy, signal } from '@angular/core';\nimport * as d3 from 'd3';\nimport { Observable } 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 { toSignal } from '@angular/core/rxjs-interop';\n\n@Component({\n template: '',\n standalone: true,\n})\nexport class LinearSeriesBaseComponent<T extends BasePoint> extends SeriesBaseComponent<T> implements OnDestroy {\n pointerMove = toSignal(this.svc.pointerMove);\n transform = computed(() => {\n const event = this.pointerMove();\n return this.getTransform(event, this.x(), this.y());\n });\n\n public defaultClipPointsMapping = new Map<\n ClipPointsDirection,\n (min: number, max: number) => (point: BasePoint, idx: number, arr: Array<BasePoint>) => boolean\n >();\n\n display: Observable<number>;\n\n markers = computed(() => {\n return this.series().data?.filter(\n (_) => _?.marker && _?.x !== undefined && _?.y !== undefined && _?.x !== null && _?.y !== null,\n );\n });\n\n path = computed(() => {\n this.update();\n if (!this.x() || !this.y()) {\n return '';\n }\n\n const filter = this.defaultClipPointsMapping.get(this.series().clipPointsDirection);\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 protected update = signal<unknown>(null);\n\n constructor() {\n super();\n const filterX = (min: number, max: number) => (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 = (min: number, max: number) => (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\n ngOnDestroy() {\n this.svc.setTooltip({\n point: null,\n series: this.series(),\n });\n }\n\n getTransform(event: any, scaleX: any, scaleY: any): Pick<BasePoint, 'x' | 'y'> {\n if (!scaleX || !scaleY) {\n return null;\n }\n if (event && event.type === 'mouseleave') {\n return null;\n }\n const mouse = [event?.offsetX, event?.offsetY];\n\n const tooltipTracking = this.config()?.tooltip?.tracking;\n\n const lineIntersection = (\n p0_x: number,\n p0_y: number,\n p1_x: number,\n p1_y: number,\n p2_x: number,\n p2_y: number,\n p3_x: number,\n p3_y: number,\n ) => {\n const rV = {} as any;\n const s1_x = p1_x - p0_x;\n const s1_y = p1_y - p0_y;\n const s2_x = p3_x - p2_x;\n const s2_y = p3_y - p2_y;\n\n const s = (-s1_y * (p0_x - p2_x) + s1_x * (p0_y - p2_y)) / (-s2_x * s1_y + s1_x * s2_y);\n const t = (s2_x * (p0_y - p2_y) - s2_y * (p0_x - p2_x)) / (-s2_x * s1_y + s1_x * s2_y);\n\n if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\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 sortedData = [...this.series().data].sort((a, b) => a.x - b.x);\n\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(\n [...this.series().data].sort((a, b) => a.x - b.x),\n x0,\n );\n\n const range = scaleY.range();\n\n const intersect = lineIntersection(\n pointer,\n range[0],\n pointer,\n Number.MAX_SAFE_INTEGER,\n scaleX(sortedData[rightId - 1]?.x),\n scaleY(sortedData[rightId - 1]?.y),\n scaleX(sortedData[rightId]?.x),\n scaleY(sortedData[rightId]?.y),\n );\n const x = scaleX.invert(intersect.x);\n const y = scaleY.invert(intersect.y);\n if (x !== null && x !== undefined && !isNaN(x) && y !== null && y !== undefined && !isNaN(y)) {\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 sortedData = [...this.series().data].sort((a, b) => a.y - b.y);\n\n const bisect = d3.bisector((_: BasePoint) => _.y).right;\n\n let y0 = scaleY.invert(mouse[1]);\n\n if (y0 instanceof Date) {\n y0 = y0.getTime();\n }\n const rightId = bisect(sortedData, y0);\n\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(sortedData[rightId - 1]?.x),\n scaleY(sortedData[rightId - 1]?.y),\n scaleX(sortedData[rightId]?.x),\n scaleY(sortedData[rightId]?.y),\n );\n\n const x = scaleX.invert(intersect.x);\n const y = scaleY.invert(intersect.y);\n\n if (x !== null && x !== undefined && !isNaN(x) && y !== null && y !== undefined && !isNaN(y)) {\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, inject, 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 private _elementRef = inject(ElementRef);\n\n @Input() tetaDraggablePoint: boolean;\n @Input() dragDirection: DragPointType;\n @Input() allowDrag: (point: { x: number; y: number; deltaX: number; deltaY: number }) => 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 @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 | TouchEvent) {\n event = event as 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 | TouchEvent) {\n event = event as 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 (\n this.allowDrag &&\n !this.allowDrag({\n x: event.x,\n y: event.y,\n deltaX,\n deltaY,\n })\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 | TouchEvent) {\n event = event as 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 (\n this.allowDrag &&\n !this.allowDrag({\n x: event.x,\n y: event.y,\n deltaX,\n deltaY,\n })\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 { ChangeDetectionStrategy, Component, OnDestroy } from '@angular/core';\nimport { BasePoint } from '../../../model/base-point';\nimport { LinearSeriesBaseComponent } from '../linear-series-base.component';\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 changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, DraggablePointDirective],\n})\nexport class LineSeriesComponent<T extends BasePoint> extends LinearSeriesBaseComponent<T> implements OnDestroy {\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.set({});\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.set({});\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","@if (series(); as series) {\n <svg:path\n class=\"line\"\n [attr.d]=\"path()\"\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(); as t) {\n @if (t?.x !== null && t?.x !== undefined && t?.y !== null && t?.y !== undefined) {\n <svg:circle r=\"3\"\n [attr.fill]=\"series.color\"\n [attr.transform]=\"'translate(' + t.x + ', ' + t.y + ')'\"></svg:circle>\n }\n }\n @if (markers(); as draggablePoints) {\n @if (x() && y()) {\n @for (point of draggablePoints; track point) {\n <svg:g [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 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\"></svg:circle>\n @if (point.marker.label?.text) {\n <svg:line [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\"></svg:line>\n <svg:foreignObject [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 #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}\n","import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { BasePoint } from '../../../model/base-point';\nimport { SeriesType } from '../../../model/enum/series-type';\nimport * as d3 from 'd3';\n\n@Component({\n selector: 'svg:svg[teta-bar-series]',\n templateUrl: './bar-series.component.html',\n styleUrls: ['./bar-series.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BarSeriesComponent<T extends BasePoint> extends SeriesBaseComponent<T> {\n x1 = computed(() => {\n const x = this.xScales().get(this.series().xAxisIndex)?.scale;\n const range = x.range();\n const domain = this.series().data.map((_) => _.x);\n\n return d3.scaleBand<number>().range([0, range[1]]).domain(domain).padding(0.1);\n });\n\n barSeriesCount = computed(() => {\n const count = this.config().series.filter(\n (_) => _.type === SeriesType.bar && _.xAxisIndex === this.series().xAxisIndex,\n );\n return count.length;\n });\n\n isNumber(value: any): value is number {\n return typeof value === 'number';\n }\n\n protected readonly Math = Math;\n protected readonly Number = Number;\n}\n","@if ({ x: x(), x1: x1(), y: y(), barSeriesCount: barSeriesCount() }; 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]=\"\n data.x(point.x) + ((isNumber(series().id) ? Number(series().id) : 0) * data.x1.bandwidth()) / data.barSeriesCount\n \"\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 { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { BasePoint } from '../../../model/base-point';\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\n\n@Component({\n selector: 'svg:svg[teta-scatter-series]',\n templateUrl: './scatter-series.component.html',\n styleUrls: ['./scatter-series.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScatterSeriesComponent<T extends BasePoint> extends SeriesBaseComponent<T> {}\n","@if ({ y: y(), x: x() }; 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 { ChangeDetectionStrategy, Component, computed, effect } from '@angular/core';\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { BasePoint } from '../../../model/base-point';\nimport { FillType } from '../../../model/enum/fill-type';\n\n@Component({\n selector: 'svg:svg[teta-block-series]',\n templateUrl: './block-series.component.html',\n styleUrls: ['./block-series.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BlockSeriesComponent<T extends BasePoint> extends SeriesBaseComponent<T> {\n displayPoints = computed(() => {\n const domain = this.config().inverted ? this.y().domain() : this.x().domain();\n const [min, max] = domain;\n return this.series().data.filter((point, index, arr) => {\n const next = arr[index + 1];\n const secondNext = arr[index + 2];\n\n if (this.config().inverted) {\n if (point.y1 === null || point.y1 === undefined) {\n point.y1 = next?.y ?? point.y;\n }\n if (next && (next.y1 === null || next.y1 === undefined)) {\n next.y1 = secondNext?.y ?? next.y;\n }\n return (\n (point.y >= min || point.y1 >= min || arr[index + 1]?.y >= min || arr[index + 1]?.y1 >= min) &&\n (point.y <= max || point.y1 <= max || arr[index - 1]?.y <= max || arr[index - 1]?.y1 <= max)\n );\n } else {\n if (point.x1 === null || point.x1 === undefined) {\n point.x1 = next?.x ?? point.x;\n }\n if (next && (next.x1 === null || next.x1 === undefined)) {\n next.x1 = secondNext?.x ?? next.x;\n }\n return (\n (point.x >= min || point.x1 >= min || arr[index + 1]?.x >= min || arr[index + 1]?.x1 >= min) &&\n (point.x <= max || point.x1 <= max || arr[index - 1]?.x <= max || arr[index - 1]?.x1 <= max)\n );\n }\n });\n });\n\n protected readonly Math = Math;\n protected readonly FillType = FillType;\n}\n","@if ({ y: y(), x: x(), points: displayPoints() }; as data) {\n @if (series()?.fillType === FillType.gradient) {\n <svg:defs>\n <svg:linearGradient\n [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\"\n stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n </svg:defs>\n }\n @if (data.x && data.y) {\n @if (config()?.inverted) {\n @for (point of data.points; track index; let index = $index) {\n <svg:g (mouseenter)=\"mouseenter(point)\" (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]=\"\n series().fillType === FillType.gradient\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : (point.color ?? series().style?.fill ?? series().color)\n \"\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\n x=\"50%\"\n [attr.y]=\"(data.y(point.y1) + data.y(point.y)) / 2\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\"\n >\n {{ point.text }}\n </svg:text>\n }\n <svg:line\n x1=\"0\"\n x2=\"100%\"\n [attr.y1]=\"data.y(point.y)\"\n [attr.y2]=\"data.y(point.y)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : (point.color ?? series().style?.stroke ?? series().color)\"\n ></svg:line>\n <svg:line\n x1=\"0\"\n x2=\"100%\"\n [attr.y1]=\"data.y(point.y1)\"\n [attr.y2]=\"data.y(point.y1)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : (point.color ?? series().style?.stroke ?? series().color)\"\n ></svg:line>\n </svg:g>\n }\n } @else {\n @for (point of data.points; track index; let index = $index) {\n <svg:g (mouseenter)=\"mouseenter(point)\" (mouseleave)=\"mouseleave(point)\">\n <svg:rect\n y=\"0\"\n height=\"100%\"\n [attr.x]=\"data.x(point.x)\"\n [attr.width]=\"Math.abs(data.x(point.x1) - data.x(point.x))\"\n [attr.fill]=\"\n series().fillType === FillType.gradient\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : (point.color ?? series().style?.fill ?? series().color)\n \"\n [attr.fill-opacity]=\"series().style?.fillOpacity\"\n\n ></svg:rect>\n @if (point.text && data.x(point.x1) - data.x(point.x) > 8) {\n <svg:text\n x=\"50%\"\n [attr.x]=\"(data.x(point.x1) + data.x(point.x)) / 2\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\"\n >\n {{ point.text }}\n </svg:text>\n }\n <svg:line\n y1=\"0\"\n y2=\"100%\"\n [attr.x1]=\"data.x(point.x)\"\n [attr.x2]=\"data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : (point.color ?? series().style?.stroke ?? series().color)\"\n ></svg:line>\n <svg:line\n y1=\"0\"\n y2=\"100%\"\n [attr.x1]=\"data.x(point.x1)\"\n [attr.x2]=\"data.x(point.x1)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : (point.color ?? series().style?.stroke ?? series().color)\"\n ></svg:line>\n </svg:g>\n }\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { BasePoint } from '../../../model/base-point';\nimport { FillType } from '../../../model/enum/fill-type';\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 changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BlockAreaSeriesComponent<T extends BasePoint> extends SeriesBaseComponent<T> {\n displayPoints = computed(() => {\n const domain = this.config().inverted ? this.y().domain() : this.x().domain();\n const [min, max] = domain;\n return this.series().data.filter((point, index, arr) => {\n const next = arr[index + 1];\n const secondNext = arr[index + 2];\n\n if (this.config().inverted) {\n if (point.y1 === null || point.y1 === undefined) {\n point.y1 = next?.y ?? point.y;\n }\n if (next && (next.y1 === null || next.y1 === undefined)) {\n next.y1 = secondNext?.y ?? next.y;\n }\n return (\n (point.y >= min || point.y1 >= min || arr[index + 1]?.y >= min || arr[index + 1]?.y1 >= min) &&\n (point.y <= max || point.y1 <= max || arr[index - 1]?.y <= max || arr[index - 1]?.y1 <= max)\n );\n } else {\n if (point.x1 === null || point.x1 === undefined) {\n point.x1 = next?.x ?? point.x;\n }\n if (next && (next.x1 === null || next.x1 === undefined)) {\n next.x1 = secondNext?.x ?? next.x;\n }\n return (\n (point.x >= min || point.x1 >= min || arr[index + 1]?.x >= min || arr[index + 1]?.x1 >= min) &&\n (point.x <= max || point.x1 <= max || arr[index - 1]?.x <= max || arr[index - 1]?.x1 <= max)\n );\n }\n });\n });\n\n fillType = FillType;\n\n protected readonly Math = Math;\n}\n","@if ({ y: y(), x: x(), points: displayPoints() }; 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\"\n 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 $index) {\n <svg:g (mouseenter)=\"mouseenter(point)\" (mouseleave)=\"mouseleave(point)\">\n @if (!!config().inverted) {\n <svg:rect [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]=\"\n series().fillType === fillType.gradient\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : (point.color ?? series().style?.fill ?? series().color)\n \"\n [attr.fill-opacity]=\"series().style?.fillOpacity\"></svg:rect>\n } @else {\n <svg:rect [attr.x]=\"data.x(point.x)\"\n [attr.y]=\"point.y > 0 ? data.y(point.y) : data.y(0)\"\n [attr.height]=\"Math.abs(data.y(0) - data.y(point.y))\"\n [attr.width]=\"Math.abs(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]=\"\n series().fillType === fillType.gradient\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : (point.color ?? series().color)\n \"\n [attr.fill-opacity]=\"series().style?.fillOpacity\"></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\">\n {{ point.text }}\n </svg:text>\n }\n </svg:g>\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, OnDestroy } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport { BasePoint } from '../../../model/base-point';\nimport { ClipPointsDirection } from '../../../model/enum/clip-points-direction';\nimport { LinearSeriesBaseComponent } from '../linear-series-base.component';\nimport { FillDirection, FillType } from '../../../model/enum/fill-type';\n\n@Component({\n selector: 'svg:svg[teta-area-series]',\n templateUrl: './area-series.component.html',\n styleUrls: ['./area-series.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AreaSeriesComponent<T extends BasePoint> extends LinearSeriesBaseComponent<T> implements OnDestroy {\n areaPath = computed(() => {\n if (!this.x() || !this.y()) {\n return '';\n }\n\n const area = d3\n .area<BasePoint>()\n .defined((point) => point.x !== null && point.y !== null && !isNaN(point.x) && !isNaN(point.y));\n\n if (this.config().inverted) {\n area\n .x1((_) => (_.x1 !== null && _.x1 !== undefined ? this.x()(_.x1) : this.x()(0)))\n .x0((_) => this.x()(_.x))\n .y((_) => this.y()(_.y));\n } else {\n area\n .y1((_) => (_.y1 !== null && _.y1 !== undefined ? this.y()(_.y1) : this.y()(0)))\n .y0((_) => this.y()(_.y))\n .x((_) => this.x()(_.x));\n }\n\n const filter = this.defaultClipPointsMapping.get(this.series().clipPointsDirection);\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 return area(filteredData);\n });\n protected readonly FillType = FillType;\n protected readonly FillDirection = FillDirection;\n}\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 || 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 class=\"area\"\n [attr.d]=\"areaPath()\"\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)\"></svg:path>\n<svg:path class=\"area\"\n fill=\"none\"\n [attr.d]=\"path()\"\n [attr.stroke]=\"series().color\"\n [attr.stroke-dasharray]=\"series().style?.strokeDasharray\"\n [attr.stroke-width]=\"series().style?.strokeWidth\"></svg:path>\n@if (transform(); as t) {\n @if (t?.x !== null && t?.x !== undefined && t?.y !== null && t?.y !== undefined) {\n <svg:circle r=\"3\"\n [attr.fill]=\"series().color\"\n [attr.transform]=\"'translate(' + t.x + ', ' + t.y + ')'\"></svg:circle>\n }\n}\n@if (markers(); as draggablePoints) {\n @for (point of draggablePoints; track point) {\n <svg:circle 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","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, 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 Component,\n ComponentRef,\n input,\n OnDestroy,\n ViewContainerRef,\n inject,\n effect,\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 OnDestroy {\n private viewContainerRef = inject(ViewContainerRef);\n config = input<IChartConfig>();\n series = input<Series<T>>();\n\n private _componentRef: ComponentRef<any>;\n\n private count = 0;\n private seriesComponent: any;\n\n constructor() {\n effect(() => {\n if (this.series()) {\n\n if (!Object.prototype.isPrototypeOf.call(SeriesBaseComponent, this.series().component)) {\n this.series().component = defaultSeriesTypeMapping.get(this.series().type) || LineSeriesComponent;\n }\n\n if(this.series().component !== this.seriesComponent) {\n this.viewContainerRef.clear();\n this._componentRef?.destroy();\n this._componentRef = this.viewContainerRef.createComponent(this.series().component);\n this.seriesComponent = this.series().component;\n }\n\n this._componentRef?.setInput('config', this.config());\n this._componentRef?.setInput('series', this.series());\n }\n });\n }\n\n ngOnDestroy(): void {\n this._componentRef?.destroy();\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,\n 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 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 ngOnInit(): void {\n this._domain = this.scale.domain();\n\n const plotlineElement = d3.select(this.element.nativeElement).select('.plotline');\n\n const grabElement = d3.select(this.element.nativeElement).selectAll('.grabber');\n\n this.dragElements = d3.drag().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.on('start drag end', (event: d3.D3DragEvent<any, PlotLine, any>, d: PlotLine) => {\n d.value = this.scale.invert(event[AxisOrientation[this.axis.orientation]]);\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 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\n 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@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\"\n >\n {{ plotLine.label }}\n </svg:text>\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\"\n >\n {{ plotLine.label }}\n </svg:text>\n}\n<svg:line\n 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,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n Input,\n 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 imports: [NgTemplateOutlet, AsyncPipe],\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 ) {\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 ngOnDestroy() {\n this.drag.on('drag end', null);\n }\n\n private init() {\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 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 ({ x: x | async, y: y | async }; 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 ></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 >\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 >\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 imports: [AsyncPipe]\n})\nexport class CrosshairComponent implements OnInit {\n @Input() size: DOMRect;\n transform: Observable<any>;\n\n constructor(\n private scaleService: ScaleService,\n private chartService: ChartService,\n 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","@if (transform | async; as t) {\n <svg:line\n [attr.x1]=\"t.x\"\n y1=\"0\"\n [attr.x2]=\"t.x\"\n [attr.y2]=\"size.height\"\n stroke=\"var(--color-text-90)\"\n stroke-width=\"0.5\"\n ></svg:line>\n <svg:line\n x1=\"0\"\n [attr.y1]=\"t.y\"\n [attr.x2]=\"size.width\"\n [attr.y2]=\"t.y\"\n stroke=\"var(--color-text-90)\"\n stroke-width=\"0.5\"\n ></svg:line>\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n Input,\n NgZone,\n OnChanges,\n 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\n .pipe(\n takeWhile(() => this._alive),\n filter((brush) => brush.chartId !== this.config.id),\n )\n .subscribe((brush) => {\n this._container.call(\n this.brush.move,\n [Math.floor(brush.selection[0]), Math.floor(brush.selection[1])].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(this.config, this.axis.scale);\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) ?? [config.brush?.from, config.brush?.to].map(brushScale);\n const halfBrushHeight = (selection[1] - selection[0]) / 2;\n const invertedSelection: number[] = [from - halfBrushHeight, to + halfBrushHeight].map(brushScale.invert);\n\n if (invertedSelection[1] - invertedSelection[0] > config.brush?.max) {\n this._container.call(\n this.brush.move,\n [Math.floor(invertedSelection[0]), Math.floor(invertedSelection[0] + config.brush?.max)].map(\n brushScale,\n ),\n );\n return;\n }\n\n if (invertedSelection[1] - invertedSelection[0] < config.brush?.min) {\n this._container.call(\n this.brush.move,\n [Math.floor(invertedSelection[0]), Math.ceil(invertedSelection[0] + config.brush?.min)].map(brushScale),\n );\n return;\n }\n\n this._container.call(this.brush.move, [from - halfBrushHeight, to + halfBrushHeight]);\n return;\n }\n\n if (brushScale.invert(to) - brushScale.invert(from) > config.brush?.max) {\n this._container.call(\n this.brush.move,\n this.selection\n ? [this.selection[0], this.selection[0] + config.brush?.max].map(brushScale)\n : [config.brush?.from, config.brush?.to].map(brushScale),\n );\n return;\n }\n\n if (brushScale.invert(to) - brushScale.invert(from) < config.brush?.min) {\n this._container.call(\n this.brush.move,\n this.selection\n ? [this.selection[0], this.selection[0] + config.brush?.min].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 ? this.selection.map(brushScale) : domain.map(brushScale),\n {},\n );\n }, 0);\n });\n }\n }\n\n clearPreviousSelection() {\n this.selection = null;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport {\n AccordionComponent,\n AccordionContentDirective,\n AccordionHeadComponent,\n AccordionItemComponent,\n Align,\n ButtonComponent,\n ColorInputComponent,\n DialogService,\n DropdownComponent,\n DropdownContentDirective,\n DropdownHeadDirective,\n IconComponent,\n InputComponent,\n ScrollableComponent,\n SelectComponent,\n SelectOptionDirective,\n SelectValueDirective,\n TetaSize,\n} from '@tetacom/ng-components';\nimport { Series } from '../../model/series';\nimport { BasePoint } from '../../model/base-point';\nimport { FormsModule } from '@angular/forms';\nimport { ChartService } from '../../service/chart.service';\nimport { LineSeriesComponent } from '../series/line/line-series.component';\nimport { SeriesType } from '../../model/enum/series-type';\nimport { defaultSeriesTypeMapping } from '../../default/defaultSeriesTypeMapping';\nimport { TranslocoPipe, TranslocoService } from '@jsverse/transloco';\nimport { FillType } from '../../model/enum/fill-type';\n\n@Component({\n selector: 'teta-series-controls',\n imports: [\n ButtonComponent,\n DropdownComponent,\n DropdownContentDirective,\n DropdownHeadDirective,\n IconComponent,\n AccordionComponent,\n AccordionHeadComponent,\n AccordionItemComponent,\n AccordionContentDirective,\n ColorInputComponent,\n FormsModule,\n SelectComponent,\n SelectOptionDirective,\n SelectValueDirective,\n ScrollableComponent,\n TranslocoPipe,\n InputComponent,\n ],\n templateUrl: './series-controls.component.html',\n styleUrl: './series-controls.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeriesControlsComponent {\n private chartService = inject(ChartService);\n private dialogService = inject(DialogService);\n private translocoService = inject(TranslocoService);\n protected readonly Align = Align;\n\n series = input<Series<BasePoint>[]>();\n\n availableSeries = computed(() => {\n return this.series()?.filter((item) => item.showInControls !== false && item.type !== SeriesType.custom) ?? [];\n });\n\n enabledSeries = computed(() => {\n return this.availableSeries()?.filter((item) => item.enabled) ?? [];\n });\n\n disabledSeries = computed(() => {\n return this.availableSeries()?.filter((item) => !item.enabled) ?? [];\n });\n\n strokeWidth = [\n { id: 1, value: 1 },\n { id: 1.5, value: 1.5 },\n { id: 2, value: 2 },\n { id: 3, value: 3 },\n { id: 4, value: 4 },\n { id: 5, value: 6 },\n ];\n\n strokeArray = [\n { id: '', value: 'solid' },\n { id: '4, 4', value: 'dashed' },\n { id: '2, 2', value: 'dotted' },\n ];\n\n seriesType = [\n { id: SeriesType.line, value: 'Line' },\n { id: SeriesType.area, value: 'Area' },\n { id: SeriesType.scatter, value: 'Scatter' },\n { id: SeriesType.block, value: 'Block' },\n { id: SeriesType.blockArea, value: 'BlockArea' },\n { id: SeriesType.bar, value: 'Bar' },\n ];\n\n fillType = [\n { id: FillType.default, value: 'Default' },\n { id: FillType.gradient, value: 'Gradient' },\n ];\n\n setSeriesEnabled(series: Series<BasePoint>, value: boolean) {\n series.enabled = value;\n this.chartService.updateSeries(series);\n }\n\n setSeriesColor(series: Series<BasePoint>, value: string) {\n series.color = value;\n this.chartService.updateSeries(series);\n }\n\n setSeriesStrokeWidth(series: Series<BasePoint>, value: number) {\n if (!series.style) {\n series.style = {};\n }\n series.style.strokeWidth = value;\n this.chartService.updateSeries(series);\n }\n\n setSeriesStrokeDasharray(series: Series<BasePoint>, value: string) {\n if (!series.style) {\n series.style = {};\n }\n series.style.strokeDasharray = value;\n this.chartService.updateSeries(series);\n }\n\n setSeriesType(series: Series<BasePoint>, value: SeriesType) {\n series.type = value;\n series.component = defaultSeriesTypeMapping.get(series.type) || LineSeriesComponent;\n if (value === SeriesType.area || value === SeriesType.blockArea || value === SeriesType.block) {\n series.fillType = FillType.gradient;\n }\n this.chartService.updateSeries(series);\n }\n\n setSeriesFillType(series: Series<BasePoint>, value: FillType) {\n series.fillType = value;\n this.chartService.updateSeries(series);\n }\n\n clear() {\n this.dialogService\n .confirm({\n title: this.translocoService.translate('charts.confirm_settings_reset'),\n })\n .subscribe((result) => {\n if (result) {\n this.chartService.clearSeriesSettings();\n }\n });\n }\n\n protected readonly TetaSize = TetaSize;\n protected readonly SeriesType = SeriesType;\n protected readonly FillType = FillType;\n}\n","<teta-dropdown [align]=\"Align.right\"\n #dropdown=\"dropdown\"\n [appendToBody]=\"true\">\n <button teta-button\n tetaDropdownHead\n [class.active]=\"dropdown.open\"\n [palette]=\"'text'\"\n [square]=\"true\"\n [view]=\"'ghost'\">\n <teta-icon [name]=\"'gear'\"></teta-icon>\n </button>\n <div tetaDropdownContent class=\"column shadow-2\" style=\"min-width: 200px;\">\n @if (disabledSeries().length > 0) {\n <div class=\"row padding-h-3 padding-top-3\">\n <teta-dropdown [align]=\"Align.left\" [appendToBody]=\"true\">\n <button teta-button\n tetaDropdownHead\n [palette]=\"'primary'\">\n <teta-icon [name]=\"'add'\"></teta-icon>\n {{ 'charts.add_curve' | transloco }}\n </button>\n <div tetaDropdownContent class=\"column list shadow-2\" style=\"min-width: 200px;\"\n (click)=\"$event.stopPropagation();\">\n @for (seriesItem of disabledSeries(); track seriesItem.id) {\n <div class=\"list-item list-item_interactive\"\n (click)=\"$event.stopPropagation();setSeriesEnabled(seriesItem, true)\">\n {{ seriesItem.name }}\n </div>\n }\n </div>\n </teta-dropdown>\n </div>\n }\n <teta-scrollable class=\"column column_auto\" [contentClass]=\"'column'\">\n <teta-accordion>\n @for (seriesItem of enabledSeries(); track seriesItem.id) {\n <teta-accordion-item [viewType]=\"'rounded'\" [divider]=\"true\">\n <teta-accordion-head style=\"padding: 2px 8px\">\n <div class=\"row align-center gap-12\">\n <div class=\"row align-center gap-8\" (click)=\"$event.stopPropagation()\">\n <teta-button (click)=\"setSeriesEnabled(seriesItem, false)\"\n [palette]=\"'text'\"\n [view]=\"'ghost'\"\n [square]=\"true\">\n <teta-icon [name]=\"'delete'\" [palette]=\"'red'\"></teta-icon>\n </teta-button>\n <teta-color-input [ngModel]=\"seriesItem.color\"\n (ngModelChange)=\"setSeriesColor(seriesItem, $event)\"></teta-color-input>\n </div>\n {{ seriesItem.name }}\n </div>\n </teta-accordion-head>\n <ng-template tetaAccordionContent>\n <div class=\"column gap-8\">\n <teta-input [label]=\"'charts.line_width' | transloco\">\n <teta-select [options]=\"strokeWidth\"\n [ngModel]=\"seriesItem.style?.strokeWidth ?? 1\"\n [valueRef]=\"'id'\"\n (ngModelChange)=\"setSeriesStrokeWidth(seriesItem, $event)\"\n [allowNull]=\"false\">\n <ng-template tetaSelectOption let-option>\n <div style=\"width: 50px;\"\n [style.height.px]=\"option.id\"\n [style.background-color]=\"seriesItem.color\"></div>\n </ng-template>\n <ng-template tetaSelectValue let-value>\n <div style=\"width: 50px;\"\n [style.height.px]=\"value?.id\"\n [style.background-color]=\"seriesItem.color\"></div>\n </ng-template>\n </teta-select>\n </teta-input>\n <teta-input [label]=\"'charts.line_style' | transloco\">\n <teta-select [options]=\"strokeArray\"\n [ngModel]=\"seriesItem.style?.strokeDasharray ?? ''\"\n [valueRef]=\"'id'\"\n (ngModelChange)=\"setSeriesStrokeDasharray(seriesItem, $event)\"\n [allowNull]=\"false\">\n <ng-template tetaSelectOption let-option>\n <div style=\"width: 50px;border:0;border-top: 2px;\"\n [style.border-style]=\"option.value\"\n [style.border-color]=\"seriesItem.color\"></div>\n </ng-template>\n <ng-template tetaSelectValue let-value>\n <div style=\"width: 50px;border:0;border-top: 2px;\"\n [style.border-style]=\"value?.value\"\n [style.border-color]=\"seriesItem.color\"></div>\n </ng-template>\n </teta-select>\n </teta-input>\n <teta-input [label]=\"'charts.chart_type' | transloco\">\n <teta-select [options]=\"seriesType\"\n [ngModel]=\"seriesItem.type ?? SeriesType.line\"\n [valueRef]=\"'id'\"\n [textRef]=\"'value'\"\n (ngModelChange)=\"setSeriesType(seriesItem, $event)\"\n [allowNull]=\"false\">\n </teta-select>\n </teta-input>\n @if (seriesItem.type === SeriesType.area || seriesItem.type === SeriesType.blockArea || seriesItem.type === SeriesType.block) {\n <teta-input [label]=\"'charts.fill_type' | transloco\">\n <teta-select [options]=\"fillType\"\n [ngModel]=\"seriesItem.fillType ?? FillType.default\"\n [valueRef]=\"'id'\"\n [textRef]=\"'value'\"\n (ngModelChange)=\"setSeriesFillType(seriesItem, $event)\"\n [allowNull]=\"false\">\n </teta-select>\n </teta-input>\n }\n </div>\n </ng-template>\n </teta-accordion-item>\n }\n </teta-accordion>\n </teta-scrollable>\n <div class=\"row padding-3\">\n <button teta-button\n [palette]=\"'red'\"\n [view]=\"'ghost'\"\n (click)=\"clear()\">\n <teta-icon [name]=\"'erase'\"></teta-icon>\n {{ 'charts.reset' | transloco }}\n </button>\n </div>\n </div>\n</teta-dropdown>\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, OnDestroy } from '@angular/core';\nimport {\n animationFrameScheduler,\n combineLatest,\n map,\n Observable,\n observeOn,\n shareReplay,\n tap,\n withLatestFrom,\n} from 'rxjs';\n\nimport { Axis } from '../core/axis/axis';\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 { 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 { SeriesControlsComponent } from './series-controls/series-controls.component';\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 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 SeriesControlsComponent,\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<Opposite, (axis: Axis) => (_: Axis) => boolean>()\n .set(true, (axis) => (_: Axis) => _.options.opposite && _.options.visible && axis.index <= _.index)\n .set(false, (axis) => (_: Axis) => _.options.opposite !== true && _.options.visible && _.index <= axis.index);\n\n constructor(\n private _svc: ChartService,\n private _scaleService: ScaleService,\n private _elementRef: ElementRef,\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 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 || 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([this.size, this.scales, this.config]).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.filter((_) => _.options.opposite !== true && _.options.visible).reduce(this.sumSize, 0);\n\n const right = yAxesArray.filter((_) => _.options.opposite && _.options.visible).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.filter((_) => _.options.opposite && _.options.visible).reduce(this.sumSize, 0);\n return {\n x: left + config.bounds?.left,\n y: top + config.bounds?.top,\n width: size.width - left - right - config.bounds?.left - config.bounds?.right,\n height: size.height - top - bottom - config.bounds?.top - config.bounds?.bottom,\n };\n }),\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((acc, curr) => acc + curr.selfSize, config.bounds?.right);\n const nonOppisteTranslateY = nonOppositeOffsetY.reduce((acc, curr) => acc + curr.selfSize, config.bounds?.left);\n\n const oppositeTranslateX = oppositeOffsetX.reduce((acc, curr) => acc + curr.selfSize, config.bounds?.top);\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 ? oppositeTranslateX : size.height - nonOppisteTranslateX\n })`;\n }\n\n if (axis.orientation === AxisOrientation.y) {\n return `translate(${axis.options.opposite ? size.width - oppositeTranslateY : nonOppisteTranslateY}, ${top})`;\n }\n\n return 'translate(0, 0)';\n }),\n );\n }\n\n click(event: MouseEvent, xScales: Map<number, Axis>, yScales: Map<number, Axis>) {\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(event: MouseEvent, xScales: Map<number, Axis>, yScales: Map<number, Axis>) {\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","@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\" [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 && item.value.options.visible && data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g teta-y-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect 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 teta-x-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect 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\" teta-gridlines [size]=\"data.size\"></g>\n }\n <g class=\"x-axis-plotband-container\">\n @for (plotBand of data.plotBands; track $index) {\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 $index) {\n @if (series.visible && series.enabled) {\n <g teta-series-host [config]=\"data.config\" [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 i) {\n @for (plotLine of axis.plotLines; track $index) {\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 i) {\n @for (plotLine of axis.plotLines; track $index) {\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 $index) {\n <g teta-annotation [visibleRect]=\"data.visibleRect\" [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 @if (data.config.controls?.enable) {\n <teta-series-controls [series]=\"data.config.series\"\n class=\"position-absolute\"\n style=\"transform: translateX(-100%)\"\n [style.top.px]=\"4\"\n [style.right.px]=\"4\">\n </teta-series-controls>\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, input } 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 series = input<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(series: Series<BasePoint>, visible?: boolean) {\n series.visible = visible;\n this.chartService.updateSeries(series);\n }\n}\n","@for (seriesItem of series(); track seriesItem.id) {\n @if (seriesItem?.showInLegend !== false && seriesItem.enabled) {\n <div>\n <div class=\"legend-item cursor-pointer\" (click)=\"click(seriesItem, !seriesItem.visible)\">\n <div class=\"legend-icon-form\"\n [style.height.px]=\"getHeight(seriesItem)\"\n [style.border-top-color]=\"seriesItem.visible ? seriesItem.color : 'var(--color-text-30)'\"\n [style.border-top-style]=\"seriesItem.style?.strokeDasharray ? 'dashed' : 'solid'\"\n [style.border-width.px]=\"seriesItem.style?.strokeDasharray ? 1 : 2\"></div>\n <div class=\"legend-label font-caption\"\n style=\"user-select: none\"\n [style.text-decoration]=\"seriesItem.visible ? 'none' : 'line-through'\">\n {{ seriesItem.name }}\n </div>\n </div>\n </div>\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnDestroy, OnInit, Output } 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 providers: [ChartService, ZoomService, ScaleService, BrushService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ChartContainerComponent, AsyncPipe, LegendComponent],\n})\nexport class ChartComponent implements OnInit, OnDestroy {\n hasSeriesData: Observable<boolean>;\n svcConfig: Observable<IChartConfig>;\n @Output()\n pointerMove: EventEmitter<IChartEvent<Map<number, number>>> = new EventEmitter<IChartEvent<Map<number, number>>>();\n\n @Output()\n plotBandsMove: EventEmitter<IChartEvent<PlotBand>> = new EventEmitter<IChartEvent<PlotBand>>();\n\n @Output()\n plotBandClick: EventEmitter<IChartEvent<PlotBand>> = new EventEmitter<IChartEvent<PlotBand>>();\n\n @Output()\n plotBandContextMenu: EventEmitter<IChartEvent<PlotBand>> = new EventEmitter<IChartEvent<PlotBand>>();\n\n @Output()\n plotLinesMove: EventEmitter<IChartEvent<PlotLine>> = new EventEmitter<IChartEvent<PlotLine>>();\n\n @Output()\n pointMove: EventEmitter<IChartEvent<IPointMove>> = new EventEmitter<IChartEvent<IPointMove>>();\n\n @Output()\n chartClick: EventEmitter<IChartEvent<BasePoint>> = new EventEmitter<IChartEvent<BasePoint>>();\n\n @Output()\n chartContextMenu: EventEmitter<IChartEvent<BasePoint>> = new EventEmitter<IChartEvent<BasePoint>>();\n\n @Output()\n annotationContextMenu: EventEmitter<IChartEvent<Annotation>> = new EventEmitter<IChartEvent<Annotation>>();\n\n @Output()\n annotationClick: EventEmitter<IChartEvent<Annotation>> = new EventEmitter<IChartEvent<Annotation>>();\n\n @Output()\n annotationMove: EventEmitter<IChartEvent<Annotation>> = new EventEmitter<IChartEvent<Annotation>>();\n\n @Output()\n zoomServiceInstance: EventEmitter<ZoomService> = new EventEmitter<ZoomService>();\n\n @Output()\n brushServiceInstance: EventEmitter<BrushService> = new EventEmitter<BrushService>();\n\n @Output()\n configUpdated: EventEmitter<string> = new EventEmitter<string>();\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.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.plotBandsMove.emit(_);\n });\n\n this.chartService.plotLineMove.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.plotLinesMove.emit(_);\n });\n\n this.chartService.pointMove.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.pointMove.emit(_);\n });\n\n this.chartService.chartClick.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.chartClick.emit(_);\n });\n\n this.chartService.chartContextMenu.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.chartContextMenu.emit(_);\n });\n\n this.chartService.plotBandClick.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.plotBandClick.emit(_);\n });\n\n this.chartService.plotBandContextMenu.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.plotBandContextMenu.emit(_);\n });\n\n this.chartService.annotationContextMenu.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.annotationContextMenu.emit(_);\n });\n\n this.chartService.annotationClick.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.annotationClick.emit(_);\n });\n\n this.chartService.annotationMove.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.annotationMove.emit(_);\n });\n\n this.chartService.configUpdated.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.configUpdated.emit(_);\n });\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n}\n","@if ({ hasSeriesData: hasSeriesData | async, svcConfig: svcConfig | async }; 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> No data </span>\n }\n </span>\n </div>\n }\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 = 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 { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { BasePoint } from '../../../model/base-point';\nimport { FillType } from '../../../model/enum/fill-type';\nimport { 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 changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgStyle],\n})\nexport class BlockHorizontalSeriesComponent<T extends BasePoint> extends SeriesBaseComponent<T> {\n displayPoints = computed(() => {\n return this.series().data.filter((point, index, arr) => {\n const [min, max] = this.x().domain();\n return (\n (point.x >= min || point.x1 >= min || arr[index + 1]?.x >= min || arr[index + 1]?.x1 >= min) &&\n (point.x <= max || point.x1 <= max || arr[index - 1]?.x <= max || arr[index - 1]?.x1 <= max)\n );\n });\n });\n\n protected readonly Math = Math;\n protected readonly FillType = FillType;\n}\n","@if ({ y: y(), x: x(), points: displayPoints() }; 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\"\n 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)\" (mouseleave)=\"mouseleave(point)\">\n <svg:rect 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\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : (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\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\">\n {{ point.text }}\n </svg:text>\n }\n <svg:line y1=\"0\"\n y2=\"100%\"\n [attr.x1]=\"data.x(point.x)\"\n [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\"\n y2=\"100%\"\n [attr.x1]=\"data.x(point.x1)\"\n [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/const/chart-config-postfix';\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';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.BroadcastService","i2.ChartService","i1.ChartService","i2.ZoomService","i1.ZoomService","i2.ScaleService","i1.ScaleService","i3.ChartService","i1.BrushService","Align","i3.BrushService","i4.ScaleService"],"mappings":";;;;;;;;;;;;;;AAAO,MAAM,kBAAkB,GAAG;;MCOrB,gBAAgB,CAAA;AAG3B,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,WAAW,GAAG,IAAI,aAAa,CAAiC,CAAC,CAAC;IACzE;AAEA,IAAA,aAAa,CAAC,KAAqC,EAAA;AACjD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;AAEA,IAAA,eAAe,CAAC,OAAe,EAAA;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IAClG;8GAbW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;;2FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCCY,YAAY,CAAA;AAIvB,IAAA,WAAA,GAAA;AAFQ,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,aAAa,CAAe,CAAC,CAAC;QAGvD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;IACrD;AAEA,IAAA,QAAQ,CAAC,KAAmB,EAAA;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;8GAVW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA;;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ICNW;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,SAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,SAAA,CAAA,SAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG;AACH,IAAA,SAAA,CAAA,SAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,SAAA,CAAA,SAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG;AACH,IAAA,SAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,SAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,SAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACN,CAAC,EARW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;;ACGd,MAAM,iBAAiB,GAAgB;AAC5C,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,SAAS,CAAC,MAAM;AACvB,KAAA;AACD,IAAA,SAAS,EAAE,KAAK;CACjB;;ICVW;AAAZ,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,QAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAC;AACD,IAAA,QAAA,CAAA,QAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAC;AACD,IAAA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAE;AACJ,CAAC,EAJW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;;MCAP,WAAW,CAAA;AAMtB,IAAA,WAAA,CAAY,OAA0E,EAAA;QALtF,IAAA,CAAA,GAAG,GAAY,CAAC;QAChB,IAAA,CAAA,KAAK,GAAY,CAAC;QAClB,IAAA,CAAA,MAAM,GAAY,CAAC;QACnB,IAAA,CAAA,IAAI,GAAY,CAAC;QAGf,IAAI,CAAC,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,CAAC;IAChC;AACD;;ICZW;AAAZ,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,eAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAC;AACD,IAAA,eAAA,CAAA,eAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAC;AACH,CAAC,EAHW,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;;ICAf;AAAZ,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,gBAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACP,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,GAAA,EAAA,CAAA,CAAA;;ACMrB,MAAM,kBAAkB,GAAG,OAAqB;AACrD,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,IAAI,EAAE;AACJ,QAAA,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChB,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,YAAY,EAAE,gBAAgB,CAAC,IAAI;AACpC,KAAA;IACD,MAAM,EAAE,IAAI,WAAW,CAAC;AACtB,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,GAAG,EAAE,EAAE;AACP,QAAA,KAAK,EAAE,EAAE;KACV,CAAC;AACF,IAAA,MAAM,EAAE;AACN,QAAA,MAAM,EAAE,IAAI;AACb,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,MAAM,EAAE,KAAK;AACd,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,eAAe,CAAC,CAAC;AAC3B,QAAA,aAAa,EAAE,KAAK;AACpB,QAAA,OAAO,EAAE;AACP,YAAA,CAAC,EAAE,EAAE;AACL,YAAA,CAAC,EAAE,EAAE;AACN,SAAA;AACF,KAAA;AACD,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,SAAS,EAAE;AACT,QAAA,MAAM,EAAE,IAAI;AACb,KAAA;AACF,CAAA,CAAC;;IC1CU;AAAZ,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,UAAA,CAAA,UAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG;AACH,IAAA,UAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,UAAA,CAAA,UAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,UAAA,CAAA,UAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACL,IAAA,UAAA,CAAA,UAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACT,IAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACR,CAAC,EARW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;;ICAV;AAAZ,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,QAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,QAAA,CAAA,QAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACV,CAAC,EAHW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;IAIR;AAAZ,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAC;AACD,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAC;AACH,CAAC,EAHW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;;ICJb;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAC;AACD,IAAA,mBAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAC;AACD,IAAA,mBAAA,CAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACN,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,GAAA,EAAA,CAAA,CAAA;;ACMxB,MAAM,mBAAmB,GAAG,OAA0B;AAC3D,IAAA,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,UAAU,CAAC,IAAI;AACrB,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,UAAU,EAAE,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC,OAAO;AAC1B,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,OAAO,EAAE,IAAI;IACb,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;AAC3C,CAAA,CAAC;;MCiBW,YAAY,CAAA;AAgCvB,IAAA,WAAA,GAAA;AAbQ,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAe,kBAAkB,EAAE,CAAC;AACjE,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAgB;AAC5C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC;AAC1C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAgB;QAC1C,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAA0C,IAAI,GAAG,EAAE,CAAC;AACnF,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAyB;AACrD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAyB;AACpD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAA2B;AACnD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAA0B;AACnD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAA0B;AACzD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAA2B;AACzD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAA2B;QAG9D,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;AAEvD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,IAAI,CACnD,WAAW,CAAC;AACV,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CACH;AAED,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAC3C,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,EACvB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EACrB,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAC5B,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAC7B,WAAW,CAAC;AACV,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CACH;QAED,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAC1D,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,EACzB,WAAW,CAAC;AACV,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CACH;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC;QAC1E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;QACnD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;QAC7C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;QACvD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;QACrD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;QAC/C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;QACjD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AAC7D,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC;AAC3G,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;AAC/B,aAAA,YAAY;AACZ,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AAEzD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC;AACvG,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC;AACnH,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,IAAI,CAC1D,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QACrC,CAAC,CAAC,CACH;IACH;AAEO,IAAA,SAAS,CAAC,MAAoB,EAAA;QACnC,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC3B;AAEO,IAAA,OAAO,CAAC,IAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IACvB;AAEO,IAAA,cAAc,CAAC,KAAmB,EAAA;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;AAEO,IAAA,UAAU,CAAC,OAAwB,EAAA;AACxC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK;QAC5C,MAAM,GAAG,GAAG,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AAC/E,QAAA,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAClB,YAAA,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QACxC;aAAO;YACL,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;QAC9C;QACA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,GAAG,CAAqC,eAAe,CAAC,CAAC;IACnF;IAEO,aAAa,GAAA;QAClB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IAChC;AAEO,IAAA,MAAM,YAAY,CAAC,MAAyB,EAAE,OAAiB,EAAA;AACpE,QAAA,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,kBAAkB,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;AAEpF,QAAA,IAAI,kBAAkB,KAAK,CAAC,CAAC,EAAE;YAC7B;QACF;AACA,QAAA,aAAa,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,KAAI;AAC7D,YAAA,OAAO,EAAE,GAAG,UAAU,EAAE;AAC1B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAChC;gBAAU;YACR,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,aAAa,EAAE,CAAC;QAChD;IACF;AAEO,IAAA,MAAM,mBAAmB,GAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE;QAClB,YAAY,CAAC,UAAU,CAAC,CAAA,EAAG,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,kBAAkB,CAAA,CAAE,CAAC;AAC/D,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;IAClC;AAEO,IAAA,kBAAkB,CAAC,KAA8B,EAAA;AACtD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;AAEO,IAAA,cAAc,CAAC,KAA8B,EAAA;AAClD,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;AAEO,IAAA,YAAY,CAAC,KAA4B,EAAA;AAC9C,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;AAEO,IAAA,YAAY,CAAC,KAA4B,EAAA;AAC9C,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC;AAEO,IAAA,SAAS,CAAC,KAA8B,EAAA;AAC7C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B;AAEO,IAAA,cAAc,CAAC,KAA6B,EAAA;AACjD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;AAEO,IAAA,oBAAoB,CAAC,KAA6B,EAAA;AACvD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC;AAEQ,IAAA,UAAU,CAAC,MAAoB,EAAA;QACrC,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;AACjD,QAAA,YAAY,CAAC,OAAO,CAAC,CAAA,EAAG,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,kBAAkB,CAAA,CAAE,EAAE,YAAY,CAAC;IAC5E;AAEQ,IAAA,eAAe,CAAC,MAAoB,EAAA;QAC1C,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAoB,KAAI;YAC1D,OAAO;gBACL,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;AACpB,gBAAA,eAAe,EAAE,CAAC,CAAC,KAAK,EAAE,eAAe;AACzC,gBAAA,WAAW,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW;aAClC;AACH,QAAA,CAAC,CAAC;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC;IACvC;AAEQ,IAAA,mBAAmB,CAAC,MAAoB,EAAA;QAC9C,IAAI,CAAC,MAAM,CAAC,IAAI;AAAE,YAAA,OAAO,MAAM;AAE/B,QAAA,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA,EAAG,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,kBAAkB,CAAA,CAAE,CAAC;QACjF,IAAI,YAAY,EAAE;YAChB,MAAM,IAAI,GAAU,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;AAC5C,YAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AACjD,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;gBACjD,IAAI,KAAK,EAAE;oBACT,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;oBAC9C,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;oBAC9C,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK;oBACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;AACrC,oBAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACvD,wBAAA,KAAK,CAAC,IAAI,GAAG,IAAI;oBACnB;oBACA,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC7C,oBAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AACnE,wBAAA,KAAK,CAAC,QAAQ,GAAG,QAAQ;oBAC3B;AACA,oBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAChB,wBAAA,KAAK,CAAC,KAAK,GAAG,EAAE;oBAClB;AACA,oBAAA,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW;AACtE,oBAAA,KAAK,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,KAAK,CAAC,eAAe;gBACpF;AACA,gBAAA,OAAO,KAAK;AACd,YAAA,CAAC,CAAC;AAEF,YAAA,OAAO,MAAM;QACf;AAEA,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,WAAW,CAAC,IAA4B,EAAA;AAC9C,QAAA,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI;AAEvB,QAAA,MAAM,aAAa,GAAG,CAAC,aAAa,KAAI;YACtC,OAAO,CAAC,MAAM,KAAI;gBAChB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC;AACjD,YAAA,CAAC;AACH,QAAA,CAAC;AAED,QAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,MAAM,CAAC;QACxD,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE;AAE3B,QAAA,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;AACjE,QAAA,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;AACjE,QAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAEvE,QAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAI;YAC7C,OAAO;AACL,gBAAA,GAAG,CAAC;AACJ,gBAAA,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;AAClB,gBAAA,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK;aAClB;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;AAC9D,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;AAE9D,QAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClE,QAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAElE,QAAA,IAAI,iBAAiB,EAAE,MAAM,GAAG,CAAC,EAAE;AACjC,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAC1B;AAEA,QAAA,IAAI,cAAc,EAAE,MAAM,GAAG,CAAC,EAAE;AAC9B,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;QACvB;AAEA,QAAA,IAAI,iBAAiB,EAAE,MAAM,GAAG,CAAC,EAAE;AACjC,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;QACxB;AAEA,QAAA,IAAI,cAAc,EAAE,MAAM,GAAG,CAAC,EAAE;AAC9B,YAAA,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC;QACzB;AAEA,QAAA,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;AAEhF,QAAA,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;AAEvE,QAAA,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE;AAExD,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,kBAAkB,CAAC,MAAoB,EAAA;AAC7C,QAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;YACnB,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YAC/B,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;AAE/B,YAAA,MAAM,CAAC,KAAK,GAAG,KAAK;AACpB,YAAA,MAAM,CAAC,KAAK,GAAG,KAAK;AAEpB,YAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,KAAI;AAC3C,gBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU;AAC1B,gBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU;AAC1B,gBAAA,KAAK,CAAC,UAAU,GAAG,CAAC;AACpB,gBAAA,KAAK,CAAC,UAAU,GAAG,CAAC;gBACpB,OAAO;AACL,oBAAA,GAAG,KAAK;oBACR,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;oBAC1C,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,KAAI;wBAC/B,OAAO;AACL,4BAAA,GAAG,KAAK;4BACR,CAAC,EAAE,KAAK,EAAE,CAAC;4BACX,CAAC,EAAE,KAAK,EAAE,CAAC;4BACX,EAAE,EAAE,KAAK,EAAE,EAAE;4BACb,EAAE,EAAE,KAAK,EAAE,EAAE;yBACd;AACH,oBAAA,CAAC,CAAC;iBACH;AACH,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,IAAI,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;YACzB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/D,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE;AAEA,QAAA,OAAO,MAAM;IACf;8GA1TW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA;;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;IChCW;AAAZ,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,eAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAC;AACD,IAAA,eAAA,CAAA,eAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAC;AACH,CAAC,EAHW,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;;ACApB,MAAM,YAAY,GAAG,CAAC,SAAkC,EAAE,WAAW,GAAG,GAAG,EAAE,QAAQ,GAAG,EAAE,KAAY;AAC3G,IAAA,IAAI,IAAI,GAAG,SAAS,IAAI,EAAE;AAC1B,IAAA,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAEtB,IAAA,OAAO,QAAQ,GAAG,WAAW,GAAG,IAAI,CAAC,MAAM;AAC7C;;SCHgB,aAAa,CAAC,QAAkB,EAAE,KAAK,GAAG,EAAE,EAAA;AAC1D,IAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,QAAQ;IAC3B,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,KAAK;IAEpC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,QAAQ,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC;AAEnF,IAAA,OAAO,KAAK;AACd;;MCFa,eAAe,CAAA;AAA5B,IAAA,WAAA,GAAA;QACU,IAAA,CAAA,YAAY,GAAG,EAAE;QACjB,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,WAAW,GAAG,IAAI;IA+B5B;AA7BE,IAAA,KAAK,CAAC,QAAc,EAAA;AAClB,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,WAAW;QAEnC,IAAI,QAAQ,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,EAAE;AAC9C,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,IAAI,QAAQ,CAAC,gBAAgB,EAAE;AAE5E,YAAA,YAAY,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC;AAE9D,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,EAAE,EAAE;AACvC,YAAA,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAE/B,YAAA,IAAI,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE;AACtD,gBAAA,KAAK,CAAC,KAAK,GAAG,CAAC,KAAc,KAAI;AAC/B,oBAAA,OAAO,KAAK,CAAC,MAAM,EAAE;AACvB,gBAAA,CAAC;YACH;YACA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAE7B,YAAA,MAAM,qBAAqB,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAEzE,YAAA,YAAY,IAAI,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC;QACzF;QAEA,IAAI,QAAQ,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,EAAE;AAC9C,YAAA,YAAY,IAAI,YAAY,GAAG,EAAE;QACnC;AAEA,QAAA,OAAO,YAAY;IACrB;AACD;;MCjCY,eAAe,CAAA;AAA5B,IAAA,WAAA,GAAA;QACU,IAAA,CAAA,iBAAiB,GAAG,IAAI,GAAG;AAChC,aAAA,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACjC,aAAA,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE7B,QAAA,IAAA,CAAA,QAAQ,GAAwB,CAAC,CAAC,EAAE,CAAC,CAAC;IA2ChD;AAzCE,IAAA,KAAK,CAAC,QAAc,EAAA;AAClB,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO;QAChC,IAAI,QAAQ,GAAwB,EAAE;AACtC,QAAA,MAAM,MAAM,GAAG,OAAO,EAAE,GAAG,IAAI,IAAI;AACnC,QAAA,MAAM,MAAM,GAAG,OAAO,EAAE,GAAG,IAAI,IAAI;AAEnC,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;AACtB,YAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,EAAE;YAC5C,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAgB,EAAE,OAAO,KAAI;gBAC7D,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;oBACtC,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;gBACjC;AACA,gBAAA,OAAO,GAAG;YACZ,CAAC,EAAE,EAAE,CAAC;AACN,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;AAEjE,YAAA,IAAI,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE;AACtD,gBAAA,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC/B;iBAAO;gBACL,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YACjE;QACF;QAEA,IAAI,MAAM,EAAE;AACV,YAAA,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG;QAC5B;QAEA,IAAI,MAAM,EAAE;AACV,YAAA,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG;QAC5B;QACA,IAAI,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE;AACrG,YAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AACnB,gBAAA,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;gBACf,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;YAC/B;iBAAO;gBACL,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;YAC/B;QACF;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,OAAO,IAAI,CAAC,QAAQ;IACtB;AACD;;MC/CY,IAAI,CAAA;AAgCf,IAAA,WAAA,CAAY,MAAoB,EAAA;AA5BxB,QAAA,IAAA,CAAA,SAAS,GAAwB,CAAC,CAAC,EAAE,CAAC,CAAC;AAIvC,QAAA,IAAA,CAAA,aAAa,GAAqB,CAAC,CAAC,EAAE,CAAC,CAAC;QAIxC,IAAA,CAAA,iBAAiB,GAAG,IAAI,GAAG;aAChC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;aACxC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;aAC7C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;aAClC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;aACrC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;aAClC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;aACnC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,KAAI;AACzB,YAAA,OAAO,CAAC;AACV,QAAA,CAAC,CAAC;QAEI,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG;aAC5B,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW;aACpC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ;aAC9B,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW;aACpC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ;aAC9B,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS;aAChC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS;aAChC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC;AAGlC,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM;IAC3B;AAEA;;;;;;;;AAQG;AACI,IAAA,OAAO,UAAU,CAAC,WAA4B,EAAE,MAAoB,EAAE,KAAa,EAAA;AACxF,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAEpB,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,WAAW,EAAE;AAElB,QAAA,OAAO,IAAI;IACb;AAEA;;;;AAIG;AACK,IAAA,SAAS,CAAC,WAA4B,EAAA;AAC5C,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW;IACjC;AAEA;;;;AAIG;AACK,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACrB;AAEA;;;AAGG;IACI,YAAY,GAAA;AACjB,QAAA,MAAM,YAAY,GAAG,CAAC,KAAwB,KAC5C,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,eAAe,CAAC,CAAC,GAAG,YAAY,GAAG,YAAY,CAAC,KAAK,IAAI,CAAC,MAAM;QAE9F,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;IACtD;IAEO,WAAW,GAAA;AAChB,QAAA,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE;QACrC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;IACtC;AAEO,IAAA,eAAe,CAAC,MAAwB,EAAA;AAC7C,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM;IAC7B;AAEO,IAAA,QAAQ,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AAEnB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE;AAClD,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAK;AACvB,gBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAC7B,YAAA,CAAC;QACH;IACF;IAEQ,WAAW,GAAA;QACjB,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;IACpD;IAEQ,cAAc,GAAA;;IAEtB;IAEQ,UAAU,GAAA;AAChB,QAAA,MAAM,OAAO,GACX,IAAI,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAElH,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;IACzB;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,aAAa;IAC3B;IAEO,gBAAgB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;IAChE;IAEO,YAAY,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;IAC5D;AACD;;MC7JY,WAAW,CAAA;AAQtB,IAAA,WAAA,CAAY,OAOX,EAAA;AACC,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS;AACnC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO;AAC/B,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI;AACzB,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO;AAC/B,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK;IAC7B;AACD;MAEY,YAAY,CAAA;AAKvB,IAAA,WAAA,CAAY,OAIX,EAAA;AACC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO;AAC/B,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS;AACnC,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI;IAC3B;AACD;;MCtCY,WAAW,CAAA;IAOtB,WAAA,CACU,UAA4B,EAC5B,MAAoB,EAAA;QADpB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,MAAM,GAAN,MAAM;AANR,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAc,IAAI,CAAC;AAQtD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,IAAI,CAC5C,WAAW,CAAC;AACV,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CACH;IACH;AAEA,IAAA,QAAQ,CAAC,IAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;IACzB;AAEA,IAAA,aAAa,CAAC,IAAiB,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;gBAC5B,OAAO,EAAE,IAAI,CAAC,gBAAgB;AAC9B,gBAAA,OAAO,EAAE,IAAI;AACd,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,mBAAmB,CAAC,OAAe,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;QAClC;AACA,QAAA,IAAI,CAAC,gBAAgB,GAAG,OAAO;AAC/B,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE;YACjC,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;iBAC3G,IAAI,CACH,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAiD,KAAI;gBACxE,QACE,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,EAAE;qBAClC,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE;yBAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC;yBAC3F,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEnG,YAAA,CAAC,CAAC;iBAEH,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAI;AAC5B,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7B,YAAA,CAAC,CAAC;QACN;IACF;IAEA,cAAc,CACZ,YAA8B,EAC9B,cAAgC,EAChC,KAAK,EACL,WAA4B,EAC5B,QAAiB,EAAA;QAEjB,MAAM,SAAS,GACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;AAC7C,QAAA,IAAI,WAAW,KAAK,eAAe,CAAC,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;AACd,gBAAA,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;YACvE;iBAAO;AACL,gBAAA,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;YACvE;QACF;AAEA,QAAA,IAAI,WAAW,KAAK,eAAe,CAAC,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;AACd,gBAAA,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;YACvE;iBAAO;AACL,gBAAA,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;YACvE;QACF;AACA,QAAA,OAAO,SAAS;IAClB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;IAClC;8GAtFW,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA;;2FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCMY,YAAY,CAAA;IAevB,WAAA,CACU,YAA0B,EAC1B,WAAwB,EAAA;QADxB,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,WAAW,GAAX,WAAW;AAdb,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,GAAG,EAAyB;AAClD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,GAAG,EAAyB;QAElD,IAAA,CAAA,YAAY,GAAG,IAAI,GAAG;aAC3B,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW;aACpC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS;aAChC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ;aAC9B,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW;aACpC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ;aAC9B,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS;aAChC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC;AAMlC,QAAA,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAC3G,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAI;AAC3B,YAAA,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE;YACtB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAClD,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAClD,YAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgB;AACxC,YAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgB;YAExC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACnC,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;AACjE,gBAAA,IACE,OAAO,CAAC,OAAO,CAAC,OAAO;AACvB,oBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAClG,EACD;AACA,oBAAA,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI;gBAChC;qBAAO;AACL,oBAAA,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK;gBACjC;AACA,gBAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;AAC9B,YAAA,CAAC,CAAC;YAEF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACnC,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;AACjE,gBAAA,IACE,OAAO,CAAC,OAAO,CAAC,OAAO;AACvB,oBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,EACpG;AACA,oBAAA,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI;gBAChC;qBAAO;AACL,oBAAA,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK;gBACjC;AACA,gBAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;AAC9B,YAAA,CAAC,CAAC;;YAGF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACtC,iBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ;AACvD,iBAAA,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE9C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACvC,iBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI;AAChE,iBAAA,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AAE9C,YAAA,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,GAAG,KAAK;AAEnD,YAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACxB,gBAAA,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ;AAE1B,gBAAA,IAAI,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE;oBAC1B,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;gBACvC;AAEA,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC;qBAChB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;qBAChC,MAAM,CAAC,MAAM;AACb,qBAAA,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAE/C,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;oBAC1B,KAAK,CAAC,IAAI,EAAE;gBACd;AAEA,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,GAAG,EAAE;oBACjD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;gBACzC;AAEA,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE;AAClD,oBAAA,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC;AACvB,oBAAA,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC;AACvB,oBAAA,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;gBAClB;AAEA,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACpB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AAEpC,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;gBACrD,MAAM,aAAa,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,KAAK,eAAe,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,KAAK;AAEtG,gBAAA,IAAI,QAAQ,IAAI,aAAa,EAAE;AAC7B,oBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC9D,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAClD;AACF,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;gBACvB,IAAI,IAAI,CAAC,IAAI,EAAE,WAAW,KAAK,eAAe,CAAC,CAAC,EAAE;oBAChD,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACjC,wBAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACvC,wBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAC/C,IAAI,CAAC,MAAM,EACX,CAAC,CAAC,YAAY,EACd,CAAC,CAAC,KAAK,EACP,eAAe,CAAC,CAAC,EACjB,CAAC,CAAC,OAAO,CAAC,QAAQ,CACnB;AACD,wBAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACnD,wBAAA,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBACpB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC;oBAC9C;gBACF;YACF;;YAIA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACrC,iBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ;AACvD,iBAAA,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE9C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACxC,iBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI;AAChE,iBAAA,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE9C,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,GAAG,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM;AAEnG,YAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACxB,gBAAA,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ;gBAE1B,IAAI,IAAI,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,EAAE;oBAC1C,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;gBACvC;AAEA,gBAAA,IAAI,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE;AAC1B,oBAAA,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE;gBAC3B;AAEA,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC;qBAChB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;qBAChC,MAAM,CAAC,MAAM;qBACb,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AAE1C,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;oBAC1B,KAAK,CAAC,IAAI,EAAE;gBACd;AAEA,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,GAAG,EAAE;oBACjD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;gBACzC;AAEA,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE;AAClD,oBAAA,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC;AACvB,oBAAA,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC;AACvB,oBAAA,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;gBAClB;AAEA,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACpB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AAEpC,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;gBAErD,MAAM,aAAa,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,KAAK,eAAe,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,KAAK;AAEtG,gBAAA,IAAI,QAAQ,IAAI,aAAa,EAAE;AAC7B,oBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC9D,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAClD;AACF,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;gBACvB,IAAI,IAAI,CAAC,IAAI,EAAE,WAAW,KAAK,eAAe,CAAC,CAAC,EAAE;oBAChD,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACjC,wBAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACvC,wBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAC/C,IAAI,CAAC,MAAM,EACX,CAAC,CAAC,YAAY,EACd,CAAC,CAAC,KAAK,EACP,eAAe,CAAC,CAAC,EACjB,CAAC,CAAC,OAAO,CAAC,QAAQ,CACnB;AACD,wBAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACnD,wBAAA,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBACpB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC;oBAC9C;gBACF;YACF;YACA,OAAO;AACL,gBAAA,CAAC,EAAE,QAAQ;AACX,gBAAA,CAAC,EAAE,QAAQ;aACZ;QACH,CAAC,CAAC,EACF,WAAW,CAAC;AACV,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CACH;IACH;IAEA,SAAS,GAAA;QACP,IAAI,CAAC,YAAY,CAAC;AACf,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;aACzC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAA6B,KAAI;YAC1D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACnC,gBAAA,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,YAAY;gBACjD,IAAI,KAAK,EAAE;AACT,oBAAA,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC;AAC1B,wBAAA,SAAS,EAAE,KAAK;AAChB,wBAAA,IAAI,EAAE;4BACJ,KAAK;4BACL,WAAW,EAAE,eAAe,CAAC,CAAC;AAC/B,yBAAA;AACD,wBAAA,MAAM,EAAE,KAAK;wBACb,OAAO,EAAE,MAAM,CAAC,EAAE;AACnB,qBAAA,CAAC;AACF,oBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC9B,oBAAA,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,EAAE;AAClE,wBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC;oBACrC;gBACF;AACF,YAAA,CAAC,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACnC,gBAAA,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,YAAY;gBACjD,IAAI,KAAK,EAAE;AACT,oBAAA,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC;AAC1B,wBAAA,SAAS,EAAE,KAAK;AAChB,wBAAA,IAAI,EAAE;4BACJ,KAAK;4BACL,WAAW,EAAE,eAAe,CAAC,CAAC;AAC/B,yBAAA;AACD,wBAAA,MAAM,EAAE,KAAK;wBACb,OAAO,EAAE,MAAM,CAAC,EAAE;AACnB,qBAAA,CAAC;AACF,oBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC9B,oBAAA,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,EAAE;AAClE,wBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC;oBACrC;gBACF;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACN;8GAvPW,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA;;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCFY,mBAAmB,CAAA;AAJhC,IAAA,WAAA,GAAA;QAKE,IAAA,CAAA,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAgB;QAC9B,IAAA,CAAA,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAa;AAEjB,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC;AAC1B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;AAEtC,QAAA,IAAA,CAAA,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC;QAE9C,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAElE,QAAA,IAAA,CAAA,CAAC,GAAG,QAAQ,CAAC,MAAK;AAChB,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK;AAC5D,QAAA,CAAC,wEAAC;AACF,QAAA,IAAA,CAAA,CAAC,GAAG,QAAQ,CAAC,MAAK;AAChB,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK;AAC5D,QAAA,CAAC,wEAAC;AAeH,IAAA;AAbC,IAAA,UAAU,CAAC,KAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AAClB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACtB,SAAA,CAAC;IACJ;AAEA,IAAA,UAAU,CAAC,KAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AAClB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACtB,SAAA,CAAC;IACJ;8GAlCW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,0UAHpB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;2FAGD,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ICdW;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAC;AACD,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAC;AACD,IAAA,SAAA,CAAA,SAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAE;AACJ,CAAC,EAJW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;;ACArB,IAAY,KAUX;AAVD,CAAA,UAAY,KAAK,EAAA;AACf,IAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,KAAA,CAAA,KAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACL,IAAA,KAAA,CAAA,KAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,KAAA,CAAA,KAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACR,IAAA,KAAA,CAAA,KAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACR,IAAA,KAAA,CAAA,KAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACT,IAAA,KAAA,CAAA,KAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;AACV,IAAA,KAAA,CAAA,KAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACX,CAAC,EAVW,KAAK,KAAL,KAAK,GAAA,EAAA,CAAA,CAAA;;ACAjB,IAAY,aAQX;AARD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG;AACH,IAAA,aAAA,CAAA,aAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,aAAA,CAAA,aAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,aAAA,CAAA,aAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACR,IAAA,aAAA,CAAA,aAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAW;AACX,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACX,CAAC,EARW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;;MCIZ,YAAY,CAAA;AAChB,IAAA,OAAO,WAAW,CACvB,iBAAwB,EACxB,eAAsB,EACtB,KAAY,EACZ,aAA4B,EAC5B,MAAM,GAAG,CAAC,EACV,cAAc,GAAG,CAAC,EAClB,qBAAA,GAA+B;AAC7B,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,MAAM,EAAE,CAAC;AACV,KAAA,EAAA;QAED,MAAM,IAAI,GAAU,EAAE;QACtB,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI;QACjE,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,GAAG,eAAe,CAAC,GAAG;QAClE,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,GAAG,iBAAiB,CAAC,IAAI;QACvE,MAAM,eAAe,GAAG,iBAAiB,CAAC,MAAM,GAAG,iBAAiB,CAAC,GAAG;AACxE,QAAA,IAAI,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE;AACxB,YAAA,KAAK,GAAG,KAAK,CAAC,IAAI;YAClB,IAAI,MAAM,CAAC,UAAU,GAAG,iBAAiB,CAAC,IAAI,GAAG,YAAY,EAAE;AAC7D,gBAAA,KAAK,GAAG,KAAK,CAAC,KAAK;YACrB;QACF;AACA,QAAA,IAAI,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE;YACxB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC,IAAI,GAAG,MAAM;QAC7C;AACA,QAAA,IAAI,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE;YACzB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC,KAAK,GAAG,YAAY,GAAG,MAAM;QAC7D;AACA,QAAA,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE;AAC1B,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,iBAAiB,CAAC,IAAI,GAAG,iBAAiB,CAAC,KAAK,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC;QACvF;AACA,QAAA,IAAI,KAAK,KAAK,KAAK,CAAC,SAAS,EAAE;AAC7B,YAAA,KAAK,GAAG,KAAK,CAAC,UAAU;YACxB,IAAI,MAAM,CAAC,UAAU,GAAG,iBAAiB,CAAC,KAAK,GAAG,YAAY,EAAE;AAC9D,gBAAA,KAAK,GAAG,KAAK,CAAC,SAAS;YACzB;QACF;AACA,QAAA,IAAI,KAAK,KAAK,KAAK,CAAC,SAAS,EAAE;YAC7B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC,IAAI,GAAG,YAAY,GAAG,MAAM;QAC5D;AACA,QAAA,IAAI,KAAK,KAAK,KAAK,CAAC,UAAU,EAAE;YAC9B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC,KAAK,GAAG,MAAM;QAC9C;AAEA,QAAA,IAAI,KAAK,KAAK,KAAK,CAAC,QAAQ,EAAE;YAC5B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC,IAAI,GAAG,MAAM;AAC3C,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,GAAG,iBAAiB,CAAC,KAAK,GAAG,MAAM;QACnE;AAEA,QAAA,IAAI,KAAK,KAAK,KAAK,CAAC,QAAQ,EAAE;YAC5B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC,IAAI,GAAG,MAAM;AAC3C,YAAA,IAAI,CAAC,QAAQ,GAAG,cAAc;QAChC;AAEA,QAAA,IAAI,aAAa,KAAK,aAAa,CAAC,IAAI,EAAE;YACxC,IACE,iBAAiB,CAAC,MAAM,GAAG,aAAa,GAAG,MAAM,CAAC,WAAW;gBAC7D,iBAAiB,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,EAClD;AACA,gBAAA,aAAa,GAAG,aAAa,CAAC,GAAG;YACnC;iBAAO;AACL,gBAAA,aAAa,GAAG,aAAa,CAAC,MAAM;YACtC;QACF;AACA,QAAA,IAAI,aAAa,KAAK,aAAa,CAAC,SAAS,EAAE;YAC7C,IACE,iBAAiB,CAAC,MAAM,GAAG,aAAa,GAAG,MAAM,CAAC,WAAW;gBAC7D,iBAAiB,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,EAClD;AACA,gBAAA,aAAa,GAAG,aAAa,CAAC,QAAQ;YACxC;iBAAO;AACL,gBAAA,aAAa,GAAG,aAAa,CAAC,WAAW;YAC3C;QACF;AACA,QAAA,IAAI,aAAa,KAAK,aAAa,CAAC,GAAG,EAAE;YACvC,IAAI,CAAC,GAAG,GAAG,iBAAiB,CAAC,GAAG,GAAG,aAAa,GAAG,cAAc;QACnE;AACA,QAAA,IAAI,aAAa,KAAK,aAAa,CAAC,MAAM,EAAE;YAC1C,IAAI,CAAC,GAAG,GAAG,iBAAiB,CAAC,MAAM,GAAG,cAAc;QACtD;AACA,QAAA,IAAI,aAAa,KAAK,aAAa,CAAC,QAAQ,EAAE;YAC5C,IAAI,CAAC,GAAG,GAAG,iBAAiB,CAAC,MAAM,GAAG,aAAa,GAAG,cAAc;QACtE;AACA,QAAA,IAAI,aAAa,KAAK,aAAa,CAAC,WAAW,EAAE;YAC/C,IAAI,CAAC,GAAG,GAAG,iBAAiB,CAAC,GAAG,GAAG,cAAc;QACnD;AACA,QAAA,IAAI,aAAa,KAAK,aAAa,CAAC,MAAM,EAAE;AAC1C,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC,iBAAiB,CAAC,GAAG,GAAG,iBAAiB,CAAC,MAAM,IAAI,CAAC,GAAG,aAAa,GAAG,CAAC;QACvF;QAEA,IAAI,IAAI,CAAC,IAAI,GAAG,YAAY,GAAG,MAAM,CAAC,UAAU,EAAE;YAChD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,GAAG,YAAY;QAC9C;AACA,QAAA,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;AACjB,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACf;AACA,QAAA,IAAI,IAAI,CAAC,GAAG,GAAG,aAAa,GAAG,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACpE,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC;QACjB;AACA,QAAA,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE;AAChB,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC;QACd;AACA,QAAA,IACE,aAAa,KAAK,aAAa,CAAC,MAAM;YACtC,aAAa,KAAK,aAAa,CAAC,MAAM;AACtC,YAAA,aAAa,KAAK,aAAa,CAAC,WAAW,EAC3C;YACA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG;QAChD;AACA,QAAA,IAAI,aAAa,KAAK,aAAa,CAAC,GAAG,IAAI,aAAa,KAAK,aAAa,CAAC,QAAQ,EAAE;AACnF,YAAA,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC,GAAG;QACxC;QACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC,IAAI;QACpD;QACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,IAAI;QACtD;QACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACpB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,qBAAqB,CAAC,GAAG;QACjD;QACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QACtF;AACA,QAAA,OAAO,IAAI;IACb;AAEO,IAAA,OAAO,kBAAkB,CAAC,OAAoB,EAAE,IAAW,EAAA;QAChE,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE;QAC9D,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,IAAI,GAAG,EAAE;QACjE,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE;QAC3D,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE;QACpE,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,SAAS,IAAI,GAAG,EAAE;QAC7E,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,IAAI,GAAG,EAAE;IAC5E;IAEO,OAAO,YAAY,CAAC,QAAe,EAAA;QACxC,IAAI,SAAS,GAAG,IAAI;QACpB,SAAS,GAAG,CAAC;AACb,QAAA,OAAO,SAAS;IAClB;IAEO,OAAO,WAAW,CAAC,QAAe,EAAA;QACvC,IAAI,QAAQ,GAAG,IAAI;QACnB,QAAQ,GAAG,CAAC;AACZ,QAAA,OAAO,QAAQ;IACjB;AACD;;MC5HY,gBAAgB,CAAA;IAkB3B,WAAA,CACU,GAAiB,EACjB,GAAsB,EACtB,WAAwB,EACxB,SAAuB,EACvB,KAAa,EACb,WAAuB,EAAA;QALvB,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,WAAW,GAAX,WAAW;QAEnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrE;AACA,IAAA,WAAW,CAAC,CAAC,EAAA;AACX,QAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAS;IAChC;IACA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CACtC,GAAG,CAAC,CAAC,KAAmB,KAAI;AAC1B,YAAA,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW,GAAG,CAAC,GAAG,CAAC;AAC3C,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,MAAK;YACP,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAC1B,YAAA,CAAC,CAAC;QACJ,CAAC,CAAC,CACH;AAED,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CACvC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,EAC1B,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC5B,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CACpC;AAED,QAAA,MAAM,aAAa,GAAG,CAAC,IAAI,KAAc;YACvC,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC;AACrD,QAAA,CAAC;AAED,QAAA,MAAM,gBAAgB,GAAG,CAAC,QAA2B,KAAc;YACjE,IAAI,IAAI,GAAG,EAAE;YACb,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;AACxC,YAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;gBACrB,MAAM,cAAc,GAAG,CAAA,2DAAA,EAA8D,CAAC,EAAE,MAAM,EAAE,KAAK,CAAA,CAAE;gBAEvG,IAAI,IAAI,8EAA8E,cAAc,CAAA;uCACrE,CAAC,CAAC,MAAM,CAAC,IAAI;;AAEhC,iBAAA,EAAA,CAAC,CAAC,KAAK,CAAC,CAAS,YAAY,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACpF,iBAAA,EAAA,CAAC,CAAC,KAAK,CAAC,CAAS,YAAY,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;;wBAEhF;AAClB,YAAA,CAAC,CAAC;AAEF,YAAA,OAAO,aAAa,CAAC,IAAI,CAAC;AAC5B,QAAA,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM;AAE9C,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAC3C,GAAG,CAAC,CAAC,QAA2C,KAAI;YAClD,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC1C,YAAA,IAAI,WAAW,EAAE,MAAM,GAAG,CAAC,EAAE;AAC3B,gBAAA,OAAO,EAAE;YACX;YACA,MAAM,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,gBAAgB,CAAC,WAAW,CAAC;AACnG,YAAA,OAAO,SAAS;QAClB,CAAC,CAAC,CACH;IACH;AAEQ,IAAA,WAAW,CAAC,KAAmB,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,IAAI;QACb;QACA,OAAO,YAAY,CAAC,WAAW,CAC7B;YACE,GAAG,EAAE,KAAK,CAAC,KAAK;YAChB,MAAM,EAAE,KAAK,CAAC,KAAK;YACnB,IAAI,EAAE,KAAK,CAAC,KAAK;YACjB,KAAK,EAAE,KAAK,CAAC,KAAK;AACnB,SAAA,EACD,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,EACpD,KAAK,CAAC,IAAI,EACV,aAAa,CAAC,GAAG,EACjB,EAAE,CACH;IACH;AAEA,IAAA,MAAM,CAAC,KAAoB,EAAA;AACzB,QAAA,IAAI,KAAK,YAAY,IAAI,EAAE;YACzB,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;AACxC,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB;QAEA,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;AACjC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;8GAjHW,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,mMAIkB,UAAU,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnCzD,+tDA+CA,EAAA,MAAA,EAAA,CAAA,sCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDlByB,gBAAgB,+IAA3B,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEV,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;+BACI,cAAc,EAAA,eAAA,EAGP,uBAAuB,CAAC,MAAM,WACtC,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,+tDAAA,EAAA,MAAA,EAAA,CAAA,sCAAA,CAAA,EAAA;;sBAGvC;;sBACA;;sBAEA,SAAS;uBAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE;;;MErB9C,cAAc,CAAA;AAN3B,IAAA,WAAA,GAAA;AAOU,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QAE3C,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,IAAA,CAAA,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAQ;QACpB,IAAA,CAAA,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAW;AAEvB,QAAA,IAAA,CAAA,CAAC,GAAG,QAAQ,CAAC,MAAK;AAChB,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK;AACrD,QAAA,CAAC,wEAAC;AACF,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AACpB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC;AACpB,iBAAA,KAAK;iBACL,GAAG,CAAC,CAAC,CAAC,KACL,YAAY,CACV,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EACtG,IAAI,EACJ,EAAE,CACH,CACF;AACH,YAAA,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAC/E,QAAA,CAAC,4EAAC;AAEF,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AAChC,YAAA,OAAO,CAAA,UAAA,EAAa,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,GAAG,EAAE,CAAA,CAAA,CAAG;AAC1F,QAAA,CAAC,wFAAC;AACH,IAAA;8GA1BY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,+TCd3B,i7BA0BA,EAAA,MAAA,EAAA,CAAA,4CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDZa,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;+BACE,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,i7BAAA,EAAA,MAAA,EAAA,CAAA,4CAAA,CAAA,EAAA;;;MEgBpC,iBAAiB,CAAA;IAa5B,UAAU,GAAA;QACR,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC;AAC5C,QAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC;AACxD,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,gBAAgB,CAAC,KAAK,EAAE;YAC9D,IAAI,CAAC,iBAAiB,EAAE;QAC1B;IACF;IAGA,UAAU,GAAA;QACR,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC;QACrC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;IAClC;AAIA,IAAA,WAAA,CACU,UAAsB,EACtB,WAAwB,EACxB,YAA0B,EAC1B,IAAY,EAAA;QAHZ,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,IAAI,GAAJ,IAAI;QA5BiB,IAAA,CAAA,QAAQ,GAAG,KAAK;QACf,IAAA,CAAA,SAAS,GAAG,KAAK;QAIzC,IAAA,CAAA,KAAK,GAAG,IAAI;QAiBZ,IAAA,CAAA,gBAAgB,GAAG,YAAY;AAmHvC,QAAA,IAAA,CAAA,MAAM,GAAG,CAAC,KAA4B,KAAI;YACxC,IACE,KAAK,CAAC,WAAW;iBAChB,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,KAAK,CAAC,WAAW,CAAC,MAAM;AACzD,oBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EACnE;AACA,gBAAA,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/C,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AACpE,oBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE;wBACvD;oBACF;oBAEA,MAAM,MAAM,GACV,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,eAAe,CAAC;0BACtC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM;AACzC,0BAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;AAC/C,oBAAA,IACE,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI;AAClB,wBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS;AACvB,wBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI;AAClB,wBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS;AACvB,wBAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,EAC1C;wBACA;oBACF;AACA,oBAAA,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;wBAC9B,SAAS,EAAE,KAAK,CAAC,IAAI;AACrB,wBAAA,IAAI,EAAE;AACJ,4BAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;AACtB,4BAAA,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;AACnC,yBAAA;wBACD,OAAO,EAAE,IAAI,CAAC,UAAU;wBACxB,MAAM;AACN,wBAAA,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;AACxB,qBAAA,CAAC;AAEF,oBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;AAClC,oBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC;gBACzC;AACA,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,SAAS;YACzC;AACF,QAAA,CAAC;IArJE;IAEH,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;YACzD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,gBAAgB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa;YACjH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa;QACtD;IACF;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,YAAY,EAAE;IACrB;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC;QACrC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;IAEQ,YAAY,GAAA;AAClB,QAAA,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;aAC9D,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC;AAChC,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AAClB,YAAA,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;YAC7B,IACE,IAAI,CAAC,QAAQ;AACb,gBAAA,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,OAAO;gBACnC,MAAM,EAAE,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK;gBACvC,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EACnD;AACA,gBAAA,MAAM,IAAI,GACR,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7G,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AAC9D,gBAAA,IAAI,SAAS;AACb,gBAAA,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;oBACzD,SAAS,GAAG,YAAY;gBAC1B;qBAAO;oBACL,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CACzC,MAAM,CAAC,MAAM,EACb,IAAI,CAAC,YAAY,EACjB,KAAK,EACL,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,OAAO,CAAC,QAAQ,CACtB;gBACH;gBAEA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,GAAG,SAAS;AAChD,gBAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;YACnC;AACF,QAAA,CAAC,CAAC;IACN;IAEQ,iBAAiB,GAAA;AACvB,QAAA,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,KAAK,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM;QAE9G,IAAI,CAAC,MAAM,EAAE;YACX;QACF;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;YAC3B,CAAC,CAAC,EAAE,CAAC,CAAC;YACN,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACpC,SAAA,CAAC;AAEF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,QAAQ;AAClH,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,GAAG,QAAQ;QACjH,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,EAAE;AACvF,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;gBACxB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC;gBAC/B,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC;AAC/B,aAAA,CAAC;QACJ;QAEA,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,EAAE;AACvF,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;gBACxB,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC/B,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC/B,aAAA,CAAC;QACJ;QAEA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE;AAChC,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC;QACpD;QAEA,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE;AAClC,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC;QAClD;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE;AACvD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAoB;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAChC,kBAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAClD,kBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAClB,sBAAE;sBACA,CAAC;AAEP,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,QAAQ;YAEtG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C;AAEA,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,gBAAgB,CAAC,KAAK,EAAE;YAC9D,IAAI,CAAC,iBAAiB,EAAE;QAC1B;IACF;IA6CQ,iBAAiB,GAAA;QACvB,IAAI,IAAI,GAA6B,OAAO;AAC5C,QAAA,IAAI,QAAQ;;QAGZ,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC;QAC3C,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAE9B,QAAA,IAAI,CAAC;AACF,aAAA,MAAM,CAAC,CAAC,KAAK,KAAI;YAChB,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;AAC1G,QAAA,CAAC;AACA,aAAA,UAAU,CAAC,CAAC,KAAK,KAAI;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM;YACnF,OAAO,KAAK,GAAG,KAAK;AACtB,QAAA,CAAC,CAAC;AAEJ,QAAA,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,KAAiB,KAAI;AAC/C,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;YACpE,IAAI,SAAS,GAAG,YAAY;AAC5B,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;YAE5G,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,EAAE;AAC/C,gBAAA,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YACzE;YAEA,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,EAAE;AAC/C,gBAAA,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;YACzE;YAEA,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAEpD,MAAM,MAAM,GACV,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,eAAe,CAAC;kBACtC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM;kBACjC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;YAEzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE;AAE3E,YAAA,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE;gBAC/C;YACF;AAEA,YAAA,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE;gBAC/C;YACF;AAEA,YAAA,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;AAC9B,gBAAA,SAAS,EAAE,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,UAAU;AACxB,gBAAA,IAAI,EAAE;AACJ,oBAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;AACtB,oBAAA,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;AACnC,iBAAA;gBACD,MAAM;AACN,gBAAA,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;AACxB,aAAA,CAAC;YAEF,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,GAAG,SAAS;AAChD,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;AAClC,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC;AACvC,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;AACnC,QAAA,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAiB,KAAI;YAC9C,KAAK,CAAC,cAAc,EAAE;AAEtB,YAAA,IAAI,KAAK,CAAC,OAAO,EAAE;gBACjB;YACF;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;gBAC/B,YAAY,CAAC,QAAQ,CAAC;AACtB,gBAAA,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;gBACjB,IAAI,GAAG,MAAM;AACb,gBAAA,QAAQ,GAAG,UAAU,CAAC,MAAK;AACzB,oBAAA,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;oBAClB,IAAI,GAAG,OAAO;gBAChB,CAAC,EAAE,EAAE,CAAC;AACR,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;8GAzQW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAEE;;sBACA;;sBACA;;sBAEA,WAAW;uBAAC,gBAAgB;;sBAC5B,WAAW;uBAAC,iBAAiB;;sBAM7B,YAAY;uBAAC,YAAY;;sBASzB,YAAY;uBAAC,YAAY;;;MCpCf,cAAc,CAAA;AAN3B,IAAA,WAAA,GAAA;AAOU,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QAC3C,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,IAAA,CAAA,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAQ;QACpB,IAAA,CAAA,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAW;AAEvB,QAAA,IAAA,CAAA,CAAC,GAAG,QAAQ,CAAC,MAAK;AAChB,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK;AACrD,QAAA,CAAC,wEAAC;AAEF,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AAChC,YAAA,OAAO,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAA,EAAA,EAC7F,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CACvB,eAAe;AACjB,QAAA,CAAC,wFAAC;AACH,IAAA;8GAfY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,+TCb3B,q/BA4BA,EAAA,MAAA,EAAA,CAAA,qCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDfa,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;+BACE,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,q/BAAA,EAAA,MAAA,EAAA,CAAA,qCAAA,CAAA,EAAA;;;MEgBpC,iBAAiB,CAAA;AAcO,IAAA,KAAK,CAAC,KAAiB,EAAA;QACxD,IAAI,CAAC,IAAI,CAAC;AACR,YAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE;YACvB,KAAK;AACN,SAAA,CAAC;IACJ;AAEyC,IAAA,WAAW,CAAC,KAAiB,EAAA;QACpE,IAAI,CAAC,IAAI,CAAC;AACR,YAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE;YACvB,KAAK;AACN,SAAA,CAAC;IACJ;IAqDA,WAAA,CACU,YAA0B,EAC1B,OAAmB,EAAA;QADnB,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,OAAO,GAAP,OAAO;QAhFjB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAY;QAC5B,IAAA,CAAA,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAQ;QACpB,IAAA,CAAA,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAO;QACpB,IAAA,CAAA,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAW;QAEvB,IAAA,CAAA,MAAM,GAAG,MAAM,CAGL;AACR,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,EAAE,EAAE,CAAC;AACN,SAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;QAgBF,IAAA,CAAA,WAAW,GAAG,eAAe;AAI7B,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACrB,YAAA,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM;AAC3B,QAAA,CAAC,6EAAC;AAEF,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AACpB,YAAA,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK;AAC1B,QAAA,CAAC,4EAAC;AAEF,QAAA,IAAA,CAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;YACnB,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjC,gBAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;YACzC;AACA,YAAA,OAAO,CAAC;AACV,QAAA,CAAC,2EAAC;AAEF,QAAA,IAAA,CAAA,EAAE,GAAG,QAAQ,CAAC,MAAK;YACjB,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjC,gBAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YACvC;AACA,YAAA,OAAO,CAAC;AACV,QAAA,CAAC,yEAAC;AAEF,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;YACvB,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjC,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;YACpF;AACA,YAAA,OAAO,CAAC;AACV,QAAA,CAAC,+EAAC;AAEF,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,YAAA,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,GAAG,GAAG,YAAY,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG;AAC/C,YAAA,GAAG,GAAG,GAAG,YAAY,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG;AAC/C,YAAA,MAAM,IAAI,GACP,IAAI,CAAC,MAAM,EAAE,CAAC,IAAY,YAAY,IAAI,GAAI,IAAI,CAAC,MAAM,EAAE,CAAC,IAAY,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI;AAC1G,YAAA,MAAM,EAAE,GAAI,IAAI,CAAC,MAAM,EAAE,CAAC,EAAU,YAAY,IAAI,GAAI,IAAI,CAAC,MAAM,EAAE,CAAC,EAAU,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;AAC7G,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;AAC1E,YAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC;AAC/B,QAAA,CAAC,mFAAC;AAEF,QAAA,IAAA,CAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;YACnB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE;AACjD,gBAAA,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAA,CAAA,CAAG;YAChE;YACA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI;AAC7C,QAAA,CAAC,2EAAC;QAMA,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACd,oBAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI;AAC1B,oBAAA,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;AACvB,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,CAAC,KAA4B,EAAA;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC;IACvC;IAEA,eAAe,GAAA;AACb,QAAA,MAAM,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;AAEjF,QAAA,MAAM,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC;QAEhF,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAK;YACzC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,EAAE;gBACjD,OAAO,EAAE,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACzC;YAEA,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,EAAE;gBACjD,OAAO,EAAE,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACzC;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,KAAyC,EAAE,CAAW,KAAI;AAC7G,YAAA,MAAM,QAAQ,GAAG,UAAU,CACzB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,GAAG,OAAO,GAAG,QAAQ,CAAC,CACzF;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YACjF,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,GAAG,QAAQ,CAAC;;;;;;;;;;;;;;;AAiB1F,YAAA,CAAC,CAAC,IAAI,GAAG,IAAI;AACb,YAAA,CAAC,CAAC,EAAE,GAAG,EAAE;AAET,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,EAAE,EAAE,CAAC,CAAC,EAAE;AACT,aAAA,CAAC;YACF,IAAI,CAAC,IAAI,CAAC;gBACR,KAAK;AACL,gBAAA,MAAM,EAAE,CAAC;AACV,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,UAAU;AACd,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,IAAI,EAAE;AAE/B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CACnC,gBAAgB,EAChB,CAAC,KAAyC,EAAE,CAAW,KAAI;AACzD,YAAA,IAAI,KAAK,EAAE,IAAI,KAAK,OAAO,EAAE;gBAC3B,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO;gBACvD,UAAU,GAAG,OAAO;YACtB;AAEA,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC;AAC9C,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC;AAE9C,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG;AAC7B,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG;YAE7B,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;AAEpF,YAAA,IAAI,UAAU,KAAK,MAAM,EAAE;AACzB,gBAAA,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,IAAI,QAAQ;gBAEpC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE;AAClB,oBAAA,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE;gBACf;gBAEA,IAAI,SAAS,EAAE;AACb,oBAAA,CAAC,CAAC,IAAI,GAAG,QAAQ;gBACnB;YACF;AAEA,YAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACvB,gBAAA,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,IAAI,QAAQ;gBAElC,IAAI,SAAS,EAAE;AACb,oBAAA,CAAC,CAAC,EAAE,GAAG,QAAQ;gBACjB;gBAEA,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE;AAClB,oBAAA,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI;gBACf;YACF;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,EAAE,EAAE,CAAC,CAAC,EAAE;AACT,aAAA,CAAC;YACF,IAAI,CAAC,IAAI,CAAC;gBACR,KAAK;AACL,gBAAA,MAAM,EAAE,CAAC;AACV,aAAA,CAAC;AACJ,QAAA,CAAC,CACF;QAED,eAAe,CAAC,KAAK,CAAW,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChD,YAAY,CAAC,KAAK,CAAW,IAAI,CAAC,QAAQ,EAAE,CAAC;AAE7C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE;AAC7B,YAAA,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE;AAC7B,YAAA,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3B;IACF;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC;QAC5C,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC;IAChD;8GAzNW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,opBC3B9B,gkIAwFA,EAAA,MAAA,EAAA,CAAA,wOAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FD7Da,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,OAAA,EAGnB,EAAE,EAAA,eAAA,EACM,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,gkIAAA,EAAA,MAAA,EAAA,CAAA,wOAAA,CAAA,EAAA;;sBAgB9C,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;sBAOhC,YAAY;uBAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;;;ME/B5B,kBAAkB,CAAA;IAS7B,WAAA,CACU,GAAiB,EACjB,YAA0B,EAAA;QAD1B,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,YAAY,GAAZ,YAAY;QAEpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;QAEtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CACrC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAC3B,GAAG,CAAC,CAAC,CAA6B,KAAI;AACpC,YAAA,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE;YACnC,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,UAAU,IAAI;kBACtC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,UAAU;AAC/E,kBAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;QACzC,CAAC,CAAC,CACH;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CACrC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAC3B,GAAG,CAAC,CAAC,CAA6B,KAAI;AACpC,YAAA,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE;YAClC,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,UAAU,IAAI;kBACtC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,UAAU;AAC7E,kBAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;QACzC,CAAC,CAAC,CACH;AAED,QAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC9D;AAEA,IAAA,eAAe,KAAI;8GAzCR,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAI,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjB/B,4uBAyBA,EAAA,MAAA,EAAA,CAAA,2EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EDVc,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEV,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,mBAGX,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,SAAS,CAAC,EAAA,QAAA,EAAA,4uBAAA,EAAA,MAAA,EAAA,CAAA,2EAAA,CAAA,EAAA;;sBAGrB;;;AEJG,MAAO,yBAA+C,SAAQ,mBAAsB,CAAA;AAmExF,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QAnET,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;AAC5C,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACxB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AACrD,QAAA,CAAC,gFAAC;AAEK,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,GAAG,EAGtC;AAIH,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACtB,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAC/B,CAAC,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAC/F;AACH,QAAA,CAAC,8EAAC;AAEF,QAAA,IAAA,CAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;YACnB,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE;AAC1B,gBAAA,OAAO,EAAE;YACX;AAEA,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,mBAAmB,CAAC;YAEnF,MAAM,IAAI,GAAG;AACV,iBAAA,IAAI;iBACJ,OAAO,CACN,CAAC,KAAK,KACJ,KAAK,CAAC,CAAC,KAAK,IAAI;gBAChB,KAAK,CAAC,CAAC,KAAK,IAAI;gBAChB,KAAK,CAAC,CAAC,KAAK,SAAS;gBACrB,KAAK,CAAC,CAAC,KAAK,SAAS;AACrB,gBAAA,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACf,gBAAA,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAElB,iBAAA,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9B,iBAAA,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAElC,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI;YAErC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,mBAAmB,KAAK,mBAAmB,CAAC,CAAC,EAAE;AAC/D,gBAAA,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE;AAElC,gBAAA,GAAG,GAAG,GAAG,YAAY,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG;AAC/C,gBAAA,GAAG,GAAG,GAAG,YAAY,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG;AAE/C,gBAAA,YAAY,GAAG,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACvD;YAEA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,mBAAmB,KAAK,mBAAmB,CAAC,CAAC,EAAE;AAC/D,gBAAA,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE;AAElC,gBAAA,GAAG,GAAG,GAAG,YAAY,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG;AAC/C,gBAAA,GAAG,GAAG,GAAG,YAAY,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG;AAE/C,gBAAA,YAAY,GAAG,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACvD;AAEA,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC;AAC3B,QAAA,CAAC,2EAAC;AAEQ,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAU,IAAI,6EAAC;AAItC,QAAA,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,GAAW,KAAK,CAAC,KAAgB,EAAE,GAAW,EAAE,GAAqB,KAAI;AACrG,YAAA,MAAM,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AACpC,YAAA,MAAM,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AACrC,YAAA,QACE,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM;gBAChB,KAAK,CAAC,EAAE,IAAI,MAAM;AAClB,iBAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;AAC1C,iBAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC;AAC7C,iBAAC,KAAK,CAAC,CAAC,IAAI,OAAO;oBACjB,KAAK,CAAC,EAAE,IAAI,OAAO;AACnB,qBAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;qBAC1C,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC;AAEnD,QAAA,CAAC;AAED,QAAA,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,GAAW,KAAK,CAAC,KAAgB,EAAE,GAAW,EAAE,GAAqB,KAAI;AACrG,YAAA,MAAM,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AACpC,YAAA,MAAM,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AACrC,YAAA,QACE,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM;gBAChB,KAAK,CAAC,EAAE,IAAI,MAAM;AAClB,iBAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;AAC1C,iBAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC;AAC7C,iBAAC,KAAK,CAAC,CAAC,IAAI,OAAO;oBACjB,KAAK,CAAC,EAAE,IAAI,OAAO;AACnB,qBAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;qBAC1C,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC;AAEnD,QAAA,CAAC;QAED,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,EAAE,OAAO,CAAC;QACjE,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,EAAE,OAAO,CAAC;IACnE;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AAClB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACtB,SAAA,CAAC;IACJ;AAEA,IAAA,YAAY,CAAC,KAAU,EAAE,MAAW,EAAE,MAAW,EAAA;AAC/C,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;AACtB,YAAA,OAAO,IAAI;QACb;QACA,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;AACxC,YAAA,OAAO,IAAI;QACb;QACA,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC;QAE9C,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ;AAExD,QAAA,MAAM,gBAAgB,GAAG,CACvB,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY,KACV;YACF,MAAM,EAAE,GAAG,EAAS;AACpB,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI;AACxB,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI;AACxB,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI;AACxB,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI;AAExB,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACvF,YAAA,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEtF,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACxC,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI;gBACtB,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI;YACxB;AAEA,YAAA,OAAO,EAAE;AACX,QAAA,CAAC;AAED,QAAA,IAAI,eAAe,KAAK,eAAe,CAAC,CAAC,EAAE;AACzC,YAAA,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEpE,YAAA,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;AACvD,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;YAExB,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;AAC/B,YAAA,IAAI,EAAE,YAAY,IAAI,EAAE;AACtB,gBAAA,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE;YACnB;AACA,YAAA,MAAM,OAAO,GAAG,MAAM,CACpB,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACjD,EAAE,CACH;AAED,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE;AAE5B,YAAA,MAAM,SAAS,GAAG,gBAAgB,CAChC,OAAO,EACP,KAAK,CAAC,CAAC,CAAC,EACR,OAAO,EACP,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAClC,MAAM,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAClC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAC9B,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAC/B;YACD,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AAC5F,gBAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AAClB,oBAAA,KAAK,EAAE;wBACL,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;wBAC7B,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9B,qBAAA;AACD,oBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACtB,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AAClB,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACtB,iBAAA,CAAC;YACJ;YAEA,OAAO;gBACL,CAAC,EAAE,SAAS,CAAC,CAAC;gBACd,CAAC,EAAE,SAAS,CAAC,CAAC;aACf;QACH;AAEA,QAAA,IAAI,eAAe,KAAK,eAAe,CAAC,CAAC,EAAE;AACzC,YAAA,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEpE,YAAA,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;YAEvD,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEhC,YAAA,IAAI,EAAE,YAAY,IAAI,EAAE;AACtB,gBAAA,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE;YACnB;YACA,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;AAEtC,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE;AAE5B,YAAA,MAAM,SAAS,GAAG,gBAAgB,CAChC,KAAK,CAAC,CAAC,CAAC,EACR,KAAK,CAAC,CAAC,CAAC,EACR,MAAM,CAAC,gBAAgB,EACvB,KAAK,CAAC,CAAC,CAAC,EACR,MAAM,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAClC,MAAM,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAClC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAC9B,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAC/B;YAED,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AAEpC,YAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AAC5F,gBAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AAClB,oBAAA,KAAK,EAAE;wBACL,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;wBAC7B,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9B,qBAAA;AACD,oBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACtB,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AAClB,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACtB,iBAAA,CAAC;YACJ;YAEA,OAAO;gBACL,CAAC,EAAE,SAAS,CAAC,CAAC;gBACd,CAAC,EAAE,SAAS,CAAC,CAAC;aACf;QACH;AACA,QAAA,OAAO,IAAI;IACb;8GAvPW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,+FAH1B,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;2FAGD,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ICbW;AAAZ,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAC;AACD,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAC;AACD,IAAA,aAAA,CAAA,aAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAE;AACJ,CAAC,EAJW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;;MCQZ,uBAAuB,CAAA;AALpC,IAAA,WAAA,GAAA;AAMU,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAgB9B,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAGlC;AAEM,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAKpC;AAEM,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAKhC;AA8GL,IAAA;AA1GC,IAAA,SAAS,CAAC,KAA8B,EAAA;QACtC,KAAK,GAAG,KAAmB;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC5B;QACF;QACA,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,aAAa,GAAG;YACnB,CAAC,EAAE,KAAK,CAAC,CAAC;YACV,CAAC,EAAE,KAAK,CAAC,CAAC;SACX;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;IACzC;AAIA,IAAA,OAAO,CAAC,KAA8B,EAAA;QACpC,KAAK,GAAG,KAAmB;AAC3B,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;YACnE,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3C,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3C,IAAI,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,CAAC,EAAE;gBAC1C,MAAM,GAAG,CAAC;YACZ;YACA,IAAI,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,CAAC,EAAE;gBAC1C,MAAM,GAAG,CAAC;YACZ;YACA,IACE,IAAI,CAAC,SAAS;gBACd,CAAC,IAAI,CAAC,SAAS,CAAC;oBACd,CAAC,EAAE,KAAK,CAAC,CAAC;oBACV,CAAC,EAAE,KAAK,CAAC,CAAC;oBACV,MAAM;oBACN,MAAM;AACP,iBAAA,CAAC,EACF;AACA,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;gBACzB;YACF;AACA,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,gBAAA,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,MAAM;AACtD,gBAAA,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,MAAM;YACxD;iBAAO;gBACL,IAAI,CAAC,cAAc,GAAG;AACpB,oBAAA,CAAC,EAAE,MAAM;AACT,oBAAA,CAAC,EAAE,MAAM;iBACV;YACH;AACA,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChB,CAAC,EAAE,KAAK,CAAC,CAAC;gBACV,CAAC,EAAE,KAAK,CAAC,CAAC;gBACV,MAAM;gBACN,MAAM;AACP,aAAA,CAAC;QACJ;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC3B;AAIA,IAAA,SAAS,CAAC,KAA8B,EAAA;QACtC,KAAK,GAAG,KAAmB;AAC3B,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3C,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;AAC3C,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,MAAM;gBACvC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,MAAM;YACzC;YACA,IACE,IAAI,CAAC,SAAS;gBACd,CAAC,IAAI,CAAC,SAAS,CAAC;oBACd,CAAC,EAAE,KAAK,CAAC,CAAC;oBACV,CAAC,EAAE,KAAK,CAAC,CAAC;oBACV,MAAM;oBACN,MAAM;AACP,iBAAA,CAAC,EACF;gBACA;YACF;YACA,IAAI,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,CAAC,EAAE;gBAC1C,MAAM,GAAG,CAAC;YACZ;YACA,IAAI,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,CAAC,EAAE;gBAC1C,MAAM,GAAG,CAAC;YACZ;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;YACjC,KAAK,CAAC,eAAe,EAAE;YACvB,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBACpB,CAAC,EAAE,KAAK,CAAC,CAAC;gBACV,CAAC,EAAE,KAAK,CAAC,CAAC;gBACV,MAAM;gBACN,MAAM;AACP,aAAA,CAAC;QACJ;IACF;IAEA,YAAY,CAAC,CAAS,EAAE,CAAS,EAAA;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,UAAA,EAAa,CAAC,CAAA,IAAA,EAAO,CAAC,KAAK;IAC9E;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;IAC5B;8GA/IW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAIE;;sBACA;;sBACA;;sBAYA;;sBAKA;;sBAOA;;sBAOA,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;sBACpC,YAAY;uBAAC,YAAY,EAAE,CAAC,QAAQ,CAAC;;sBAerC,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;sBACzC,YAAY;uBAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;;sBA2C1C,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;sBAC3C,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;;AC5FxC,MAAO,mBAAyC,SAAQ,yBAA4B,CAAA;AAP1F,IAAA,WAAA,GAAA;;AA0DE,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,KAAgB,KAAI;YAC/B,OAAO,CAAC,QAAQ,KAAI;AAClB,gBAAA,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;AACjE,oBAAA,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;AACjF,wBAAA,OAAO,KAAK;oBACd;gBACF;AACA,gBAAA,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;AACjE,oBAAA,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;AACjF,wBAAA,OAAO,KAAK;oBACd;gBACF;AACA,gBAAA,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;AACjE,oBAAA,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;AACjF,wBAAA,OAAO,KAAK;oBACd;gBACF;AACA,gBAAA,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;AACjE,oBAAA,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;AACjF,wBAAA,OAAO,KAAK;oBACd;gBACF;AACA,gBAAA,OAAO,IAAI;AACb,YAAA,CAAC;AACH,QAAA,CAAC;AACF,IAAA;IAxEC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAA;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;IACzC;IAEA,OAAO,CAAC,KAAK,EAAE,KAAK,EAAA;QAClB,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QAChE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;AAChE,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACnB,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,WAAW,EAAE,KAAK;SACnB;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;AACjB,YAAA,MAAM,EAAE;AACN,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,gBAAA,KAAK,EAAE,KAAK;AACb,aAAA;AACD,YAAA,KAAK,EAAE,SAAS;AACjB,SAAA,CAAC;IACJ;IAEA,WAAW,CAAC,KAAK,EAAE,KAAK,EAAA;QACtB,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QAChE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;AAChE,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACnB,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,WAAW,EAAE,KAAK;SACnB;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;AACjB,YAAA,MAAM,EAAE;AACN,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,gBAAA,KAAK,EAAE,KAAK;AACb,aAAA;AACD,YAAA,KAAK,EAAE,SAAS;AACjB,SAAA,CAAC;IACJ;IAEA,UAAU,CAAC,KAAK,EAAE,KAAK,EAAA;AACrB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;IAClD;IAEA,SAAS,CAAC,KAAK,EAAE,KAAK,EAAA;AACpB,QAAA,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM;AAC5C,QAAA,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM;IAC9C;8GAjDW,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECbhC,yxHAuEA,EAAA,MAAA,EAAA,CAAA,mFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED5DuB,uBAAuB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,eAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,aAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEjC,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;+BACE,2BAA2B,EAAA,eAAA,EAGpB,uBAAuB,CAAC,MAAM,WACtC,CAAC,SAAS,EAAE,uBAAuB,CAAC,EAAA,QAAA,EAAA,yxHAAA,EAAA,MAAA,EAAA,CAAA,mFAAA,CAAA,EAAA;;;AECzC,MAAO,kBAAwC,SAAQ,mBAAsB,CAAA;AANnF,IAAA,WAAA,GAAA;;AAOE,QAAA,IAAA,CAAA,EAAE,GAAG,QAAQ,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK;AAC7D,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE;YACvB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEjD,OAAO,EAAE,CAAC,SAAS,EAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAChF,QAAA,CAAC,yEAAC;AAEF,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CACvC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAC9E;YACD,OAAO,KAAK,CAAC,MAAM;AACrB,QAAA,CAAC,qFAAC;QAMiB,IAAA,CAAA,IAAI,GAAG,IAAI;QACX,IAAA,CAAA,MAAM,GAAG,MAAM;AACnC,IAAA;AANC,IAAA,QAAQ,CAAC,KAAU,EAAA;AACjB,QAAA,OAAO,OAAO,KAAK,KAAK,QAAQ;IAClC;8GAlBW,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,2GCZ/B,owCAgCA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDpBa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;+BACE,0BAA0B,EAAA,eAAA,EAGnB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,owCAAA,EAAA;;;AEA3C,MAAO,sBAA4C,SAAQ,mBAAsB,CAAA;8GAA1E,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,+GCVnC,olBAiBA,EAAA,MAAA,EAAA,CAAA,mFAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDPa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;+BACE,8BAA8B,EAAA,eAAA,EAGvB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,olBAAA,EAAA,MAAA,EAAA,CAAA,mFAAA,CAAA,EAAA;;;AEG3C,MAAO,oBAA0C,SAAQ,mBAAsB,CAAA;AANrF,IAAA,WAAA,GAAA;;AAOE,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE;AAC7E,YAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM;AACzB,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,KAAI;gBACrD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC3B,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;AAEjC,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC1B,oBAAA,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,EAAE;wBAC/C,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC;oBAC/B;AACA,oBAAA,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE;wBACvD,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;oBACnC;AACA,oBAAA,QACE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,GAAG;AAC3F,yBAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,GAAG,CAAC;gBAEhG;qBAAO;AACL,oBAAA,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,EAAE;wBAC/C,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC;oBAC/B;AACA,oBAAA,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE;wBACvD,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;oBACnC;AACA,oBAAA,QACE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,GAAG;AAC3F,yBAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,GAAG,CAAC;gBAEhG;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,oFAAC;QAEiB,IAAA,CAAA,IAAI,GAAG,IAAI;QACX,IAAA,CAAA,QAAQ,GAAG,QAAQ;AACvC,IAAA;8GApCY,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,6GCXjC,ikJA8GA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDnGa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;+BACE,4BAA4B,EAAA,eAAA,EAGrB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,ikJAAA,EAAA;;;AEG3C,MAAO,wBAA8C,SAAQ,mBAAsB,CAAA;AANzF,IAAA,WAAA,GAAA;;AAOE,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE;AAC7E,YAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM;AACzB,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,KAAI;gBACrD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC3B,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;AAEjC,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC1B,oBAAA,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,EAAE;wBAC/C,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC;oBAC/B;AACA,oBAAA,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE;wBACvD,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;oBACnC;AACA,oBAAA,QACE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,GAAG;AAC3F,yBAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,GAAG,CAAC;gBAEhG;qBAAO;AACL,oBAAA,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,EAAE;wBAC/C,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC;oBAC/B;AACA,oBAAA,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE;wBACvD,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;oBACnC;AACA,oBAAA,QACE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,GAAG;AAC3F,yBAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,GAAG,CAAC;gBAEhG;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,oFAAC;QAEF,IAAA,CAAA,QAAQ,GAAG,QAAQ;QAEA,IAAA,CAAA,IAAI,GAAG,IAAI;AAC/B,IAAA;8GArCY,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,kHCZrC,2pHAmEA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDvDa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;+BACE,iCAAiC,EAAA,eAAA,EAG1B,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,2pHAAA,EAAA;;;AEI3C,MAAO,mBAAyC,SAAQ,yBAA4B,CAAA;AAN1F,IAAA,WAAA,GAAA;;AAOE,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE;AAC1B,gBAAA,OAAO,EAAE;YACX;YAEA,MAAM,IAAI,GAAG;AACV,iBAAA,IAAI;AACJ,iBAAA,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEjG,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC1B;AACG,qBAAA,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9E,qBAAA,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,qBAAA,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B;iBAAO;gBACL;AACG,qBAAA,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9E,qBAAA,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,qBAAA,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B;AAEA,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,mBAAmB,CAAC;YACnF,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI;YAErC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,mBAAmB,KAAK,mBAAmB,CAAC,CAAC,EAAE;AAC/D,gBAAA,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE;AAElC,gBAAA,GAAG,GAAG,GAAG,YAAY,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG;AAC/C,gBAAA,GAAG,GAAG,GAAG,YAAY,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG;AAE/C,gBAAA,YAAY,GAAG,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACvD;YAEA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,mBAAmB,KAAK,mBAAmB,CAAC,CAAC,EAAE;AAC/D,gBAAA,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE;AAElC,gBAAA,GAAG,GAAG,GAAG,YAAY,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG;AAC/C,gBAAA,GAAG,GAAG,GAAG,YAAY,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG;AAE/C,gBAAA,YAAY,GAAG,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACvD;AACA,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC;AAC3B,QAAA,CAAC,+EAAC;QACiB,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,aAAa,GAAG,aAAa;AACjD,IAAA;8GA9CY,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,4GCdhC,giFAgDA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDlCa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;+BACE,2BAA2B,EAAA,eAAA,EAGpB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,giFAAA,EAAA;;;AEH1C,MAAM,wBAAwB,GAAG,IAAI,GAAG;AAC5C,KAAA,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,mBAAmB;AACxC,KAAA,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,kBAAkB;AACtC,KAAA,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,sBAAsB;AAC9C,KAAA,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,oBAAoB;AAC1C,KAAA,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,mBAAmB;AACxC,KAAA,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,wBAAwB,CAAC;;MCQzC,mBAAmB,CAAA;AAU9B,IAAA,WAAA,GAAA;AATQ,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACnD,IAAA,CAAA,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAgB;QAC9B,IAAA,CAAA,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAa;QAInB,IAAA,CAAA,KAAK,GAAG,CAAC;QAIf,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AAEjB,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;AACtF,oBAAA,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,GAAG,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,mBAAmB;gBACnG;gBAEA,IAAG,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,eAAe,EAAE;AACnD,oBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC7B,oBAAA,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE;AAC7B,oBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC;oBACnF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS;gBAChD;AAEA,gBAAA,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACrD,gBAAA,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YACvD;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE;IAC/B;8GAjCW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,gVAJpB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAID,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;MCpBY,QAAQ,CAAA;AAUnB,IAAA,WAAA,CAAY,OASX,EAAA;AACC,QAAA,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK;AAC3B,QAAA,IAAI,CAAC,GAAG,GAAG,OAAO,EAAE,GAAG;AACvB,QAAA,IAAI,CAAC,GAAG,GAAG,OAAO,EAAE,GAAG;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK;IAC7B;AACD;;MCNY,iBAAiB,CAAA;IAU5B,WAAA,CACU,GAAsB,EACtB,WAAwB,EACxB,YAA0B,EAC1B,YAA0B,EAC1B,OAAmB,EAAA;QAJnB,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,OAAO,GAAP,OAAO;QAVjB,IAAA,CAAA,WAAW,GAAG,eAAe;IAW1B;IAEH,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAElC,QAAA,MAAM,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;AAEjF,QAAA,MAAM,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC;QAE/E,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAK;YACzC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,EAAE;gBAC/C,OAAO,EAAE,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC1C;YACA,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,EAAE;gBAC/C,OAAO,EAAE,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC1C;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,KAAyC,EAAE,CAAW,KAAI;YAC7G,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAC1E,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE;AAC7D,gBAAA,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG;YACjB;YACA,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE;AAC7D,gBAAA,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG;YACjB;YACA,IAAI,CAAC,IAAI,CAAC;gBACR,KAAK;AACL,gBAAA,MAAM,EAAE,CAAC;AACV,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAC1B,QAAA,CAAC,CAAC;AAEF,QAAA,eAAe,CAAC,KAAK,CAAW,IAAI,CAAC,QAAQ,CAAC;AAC9C,QAAA,WAAW,CAAC,KAAK,CAAW,IAAI,CAAC,QAAQ,CAAC;AAE1C,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;AAC3B,YAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QACxB;IACF;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC;IAC9C;AAEA,IAAA,IAAI,CAAC,KAA4B,EAAA;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC;IACvC;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACxC;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;IACzB;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;IACxB;8GA5EW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,0JCzB9B,wlDA+CA,EAAA,MAAA,EAAA,CAAA,0EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDtBa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,OAAA,EAGnB,EAAE,EAAA,eAAA,EACM,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,wlDAAA,EAAA,MAAA,EAAA,CAAA,0EAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBACA;;;MELU,mBAAmB,CAAA;IAG9B,IAAa,UAAU,CAAC,UAAsB,EAAA;AAC5C,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;IAC/B;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;IACzB;IAEA,IACI,IAAI,CAAC,IAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;AASA,IAAA,WAAA,CACU,YAA0B,EAC1B,GAAsB,EACtB,YAA0B,EAAA;QAF1B,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,YAAY,GAAZ,YAAY;AAEpB,QAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACnG,QAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACnG,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE;IACvB;AAEmC,IAAA,KAAK,CAAC,KAAiB,EAAA;AACxD,QAAA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;YAC/B,KAAK;YACL,MAAM,EAAE,IAAI,CAAC,UAAU;AACxB,SAAA,CAAC;IACJ;AAEyC,IAAA,WAAW,CAAC,KAAiB,EAAA;AACpE,QAAA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;YAC/B,KAAK;YACL,MAAM,EAAE,IAAI,CAAC,UAAU;AACxB,SAAA,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC;IAChC;IAEQ,IAAI,GAAA;AACV,QAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;QAEzD,MAAM,QAAQ,GAAG,EAAE;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAEhE,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,EAAE,CAAa,KAAI;AACtD,gBAAA,MAAM,CAAC,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,gBAAA,MAAM,CAAC,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnD,gBAAA,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE;AAChB,gBAAA,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE;;AAGhB,gBAAA,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC,EAAE;AACvC,oBAAA,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ;gBACjC;gBAEA,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;oBAC7E,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ;gBAC1E;;AAGA,gBAAA,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC,EAAE;AACvC,oBAAA,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ;gBACjC;gBAEA,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AAC/E,oBAAA,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ;gBACtF;AAEA,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,gBAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;oBACnC,KAAK;AACL,oBAAA,MAAM,EAAE,CAAC;AACV,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;AAEF,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACpD;IACF;8GAlGW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxBhC,qvDAwCA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnBc,gBAAgB,+IAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAG5B,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;+BACI,mBAAmB,EAAA,OAAA,EAGpB,CAAC,gBAAgB,EAAE,SAAS,CAAC,EAAA,eAAA,EACrB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qvDAAA,EAAA;;sBAGhD;;sBAEA;;sBAQA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;sBA4B7C,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;sBAOhC,YAAY;uBAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;;;ME1D5B,kBAAkB,CAAA;AAI7B,IAAA,WAAA,CACU,YAA0B,EAC1B,YAA0B,EAC1B,GAAsB,EAAA;QAFtB,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,GAAG,GAAH,GAAG;IACV;IAEH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CACjD,GAAG,CAAC,CAAC,KAAmB,KAAI;YAC1B,OAAO;AACL,gBAAA,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,YAAY,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO;AACtD,gBAAA,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,YAAY,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO;aACvD;AACH,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,MAAK;YACP,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAC1B,YAAA,CAAC,CAAC;QACJ,CAAC,CAAC,CACH;IACH;8GAxBW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAK,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ/B,mZAkBA,EAAA,MAAA,EAAA,CAAA,yDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EDRc,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAEV,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;+BACI,kBAAkB,EAAA,OAAA,EAGnB,CAAC,SAAS,CAAC,EAAA,QAAA,EAAA,mZAAA,EAAA,MAAA,EAAA,CAAA,yDAAA,CAAA,EAAA;;sBAGrB;;;MEWU,kBAAkB,CAAA;AAY7B,IAAA,WAAA,CACU,YAA0B,EAC1B,YAA0B,EAC1B,OAAmB,EACnB,IAAY,EAAA;QAHZ,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,IAAI,GAAJ,IAAI;QAVN,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG;aACvB,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE;aAC5B,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC;QACxB,IAAA,CAAA,MAAM,GAAG,IAAI;AASnB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IACzD;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,YAAY,CAAC;AACf,aAAA,IAAI,CACH,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAC5B,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAEpD,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;YACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,IAAI,CAAC,KAAK,CAAC,IAAI,EACf,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CACtF;AACH,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACrB;IAEA,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAC9B,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC;AACpC,gBAAA,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;AACvB,gBAAA,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;AAC7D,gBAAA,IAAI,EAAE,MAAM;AACb,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC1C;IACF;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;YACpC,IAAI,CAAC,sBAAsB,EAAE;QAC/B;QAEA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAC9B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/C;IACF;IAEA,UAAU,CAAC,MAAoB,EAAE,UAAe,EAAA;QAC9C,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC;AACvC,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAuB,KAAI;AAC3D,gBAAA,IAAI,CAAC,CAAC,WAAW,EAAE;oBACjB,IAAI,CAAC,CAAC,CAAC,SAAS;wBAAE;oBAClB,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,SAAqB;AAC1C,oBAAA,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE;AACnB,wBAAA,MAAM,SAAS,GACb,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;AAC3F,wBAAA,MAAM,eAAe,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACzD,wBAAA,MAAM,iBAAiB,GAAa,CAAC,IAAI,GAAG,eAAe,EAAE,EAAE,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;AAEzG,wBAAA,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE;4BACnE,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,IAAI,CAAC,KAAK,CAAC,IAAI,EACf,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAC1F,UAAU,CACX,CACF;4BACD;wBACF;AAEA,wBAAA,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE;4BACnE,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,IAAI,CAAC,KAAK,CAAC,IAAI,EACf,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CACxG;4BACD;wBACF;wBAEA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,eAAe,EAAE,EAAE,GAAG,eAAe,CAAC,CAAC;wBACrF;oBACF;oBAEA,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE;AACvE,wBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,IAAI,CAAC,KAAK,CAAC,IAAI,EACf,IAAI,CAAC;8BACD,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU;8BACzE,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAC3D;wBACD;oBACF;oBAEA,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE;AACvE,wBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,IAAI,CAAC,KAAK,CAAC,IAAI,EACf,IAAI,CAAC;8BACD,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU;8BACzE,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAC3D;wBACD;oBACF;AAEA,oBAAA,IAAI,CAAC,CAAC,WAAW,YAAY,UAAU,EAAE;AACvC,wBAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;oBACrD;AAEA,oBAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC;AACpC,wBAAA,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;AACvB,wBAAA,SAAS,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBAC3D,IAAI,EAAE,CAAC,CAAC,IAAI;AACb,qBAAA,CAAC;AACF,oBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAC1C;AACF,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;gBAC/B,UAAU,CAAC,MAAK;oBACd,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAEhC,oBAAA,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE;AAEhC,oBAAA,IAAI,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;wBACvB,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI;oBAC/B;AAEA,oBAAA,IAAI,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;wBACrB,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE;oBAC7B;AAEA,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,IAAI,CAAC,KAAK,CAAC,IAAI,EACf,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EACxE,EAAE,CACH;gBACH,CAAC,EAAE,CAAC,CAAC;AACP,YAAA,CAAC,CAAC;QACJ;IACF;IAEA,sBAAsB,GAAA;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;IACvB;8GA3JW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAO,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAP,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAEE;;sBACA;;;MC8BU,uBAAuB,CAAA;AAzBpC,IAAA,WAAA,GAAA;AA0BU,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAChC,IAAA,CAAA,KAAK,GAAGQ,OAAK;QAEhC,IAAA,CAAA,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAuB;AAErC,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE;AAChH,QAAA,CAAC,sFAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACrE,QAAA,CAAC,oFAAC;AAEF,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACtE,QAAA,CAAC,qFAAC;AAEF,QAAA,IAAA,CAAA,WAAW,GAAG;AACZ,YAAA,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACnB,YAAA,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;AACvB,YAAA,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACnB,YAAA,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACnB,YAAA,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACnB,YAAA,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACpB;AAED,QAAA,IAAA,CAAA,WAAW,GAAG;AACZ,YAAA,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;AAC1B,YAAA,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC/B,YAAA,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE;SAChC;AAED,QAAA,IAAA,CAAA,UAAU,GAAG;YACX,EAAE,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;YACtC,EAAE,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;YACtC,EAAE,EAAE,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;YAC5C,EAAE,EAAE,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;YACxC,EAAE,EAAE,EAAE,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE;YAChD,EAAE,EAAE,EAAE,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;SACrC;AAED,QAAA,IAAA,CAAA,QAAQ,GAAG;YACT,EAAE,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;YAC1C,EAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE;SAC7C;QAsDkB,IAAA,CAAA,QAAQ,GAAG,QAAQ;QACnB,IAAA,CAAA,UAAU,GAAG,UAAU;QACvB,IAAA,CAAA,QAAQ,GAAG,QAAQ;AACvC,IAAA;IAvDC,gBAAgB,CAAC,MAAyB,EAAE,KAAc,EAAA;AACxD,QAAA,MAAM,CAAC,OAAO,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC;IACxC;IAEA,cAAc,CAAC,MAAyB,EAAE,KAAa,EAAA;AACrD,QAAA,MAAM,CAAC,KAAK,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC;IACxC;IAEA,oBAAoB,CAAC,MAAyB,EAAE,KAAa,EAAA;AAC3D,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACjB,YAAA,MAAM,CAAC,KAAK,GAAG,EAAE;QACnB;AACA,QAAA,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC;IACxC;IAEA,wBAAwB,CAAC,MAAyB,EAAE,KAAa,EAAA;AAC/D,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACjB,YAAA,MAAM,CAAC,KAAK,GAAG,EAAE;QACnB;AACA,QAAA,MAAM,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC;IACxC;IAEA,aAAa,CAAC,MAAyB,EAAE,KAAiB,EAAA;AACxD,QAAA,MAAM,CAAC,IAAI,GAAG,KAAK;AACnB,QAAA,MAAM,CAAC,SAAS,GAAG,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,mBAAmB;AACnF,QAAA,IAAI,KAAK,KAAK,UAAU,CAAC,IAAI,IAAI,KAAK,KAAK,UAAU,CAAC,SAAS,IAAI,KAAK,KAAK,UAAU,CAAC,KAAK,EAAE;AAC7F,YAAA,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ;QACrC;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC;IACxC;IAEA,iBAAiB,CAAC,MAAyB,EAAE,KAAe,EAAA;AAC1D,QAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC;IACxC;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC;AACF,aAAA,OAAO,CAAC;YACP,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,+BAA+B,CAAC;SACxE;AACA,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;YACpB,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE;YACzC;AACF,QAAA,CAAC,CAAC;IACN;8GAnGW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxDpC,0zMA+HA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED7FI,eAAe,iJACf,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,wBAAwB,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,qBAAqB,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,aAAa,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,kBAAkB,2DAClB,sBAAsB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,sBAAsB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,yBAAyB,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,mBAAmB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,+VACX,eAAe,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,OAAA,EAAA,eAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,UAAA,EAAA,cAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,qBAAqB,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,oBAAoB,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEnB,cAAc,mHADd,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAOJ,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAzBnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,OAAA,EACvB;wBACP,eAAe;wBACf,iBAAiB;wBACjB,wBAAwB;wBACxB,qBAAqB;wBACrB,aAAa;wBACb,kBAAkB;wBAClB,sBAAsB;wBACtB,sBAAsB;wBACtB,yBAAyB;wBACzB,mBAAmB;wBACnB,WAAW;wBACX,eAAe;wBACf,qBAAqB;wBACrB,oBAAoB;wBACpB,mBAAmB;wBACnB,aAAa;wBACb,cAAc;qBACf,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,0zMAAA,EAAA;;;MEQpC,uBAAuB,CAAA;AAclC,IAAA,WAAA,CACU,IAAkB,EAClB,aAA2B,EAC3B,WAAuB,EAAA;QAFvB,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,WAAW,GAAX,WAAW;QAXrB,IAAA,CAAA,QAAQ,GAAG,QAAQ;QAIX,IAAA,CAAA,iBAAiB,GAAG,IAAI,GAAG;AAChC,aAAA,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,CAAO,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK;AACjG,aAAA,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,KAAK,CAAC,CAAO,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;AA2GvG,QAAA,IAAA,CAAA,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,QAAQ;QApGlD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;AAE1B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAC1C,SAAS,CAAC,uBAAuB,CAAC,EAClC,WAAW,CAAC;AACV,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CACH;QAED,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAC7D,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,KAAI;YACvB,MAAM,KAAK,GAAsB,EAAE;YACnC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;gBACpC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,KAAI;oBAC/B,KAAK,CAAC,IAAI,CAAC;AACT,wBAAA,QAAQ,EAAE,IAAI;wBACd,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;YACF,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;gBACpC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,KAAI;oBAC/B,KAAK,CAAC,IAAI,CAAC;AACT,wBAAA,QAAQ,EAAE,IAAI;wBACd,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;YAEF,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClE,CAAC,CAAC,CACH;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAC9C,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAC3B,GAAG,CAAC,CAAC,IAAgC,KAAI;YACvC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,IAAI;AAE/B,YAAA,OAAO,MAAM,CAAC,KAAK,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,IAAI,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC;kBACzE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;kBACV,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK;QACrB,CAAC,CAAC,EACF,WAAW,CAAC;AACV,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CACH;QAED,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAC1E,GAAG,CAAC,CAAC,IAAyC,KAAI;AAChD,YAAA,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,IAAI;YACrC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACzC,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAE/G,YAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAEvG,MAAM,MAAM,GAAG;AACZ,iBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO;AAC9D,iBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAE1B,YAAA,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACrG,OAAO;AACL,gBAAA,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI;AAC7B,gBAAA,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG;AAC3B,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK;AAC7E,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM;aAChF;QACH,CAAC,CAAC,EACF,WAAW,CAAC;AACV,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CACH;IACH;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC,CAAC,OAA8B,KAAI;YACrE,qBAAqB,CAAC,MAAK;AACzB,gBAAA,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;oBACvB,CAAC,OAAO,CAAC,MAAM;oBACf,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;oBACjC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,EAClC;oBACA;gBACF;AACA,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;AAC3C,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;IACxD;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;AACxD,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;IAC7B;IAIA,YAAY,CAAC,IAAW,EAAE,IAAc,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACrB,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAC3B,GAAG,CAAC,CAAC,IAAgC,KAAI;YACvC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,IAAI;YAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAEzC,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;YACvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;YAE3D,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC/D,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAErE,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC/D,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAErE,MAAM,kBAAkB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;YAC3G,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;YAE/G,MAAM,kBAAkB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;YAEzG,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,MAAM,CACpD,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,QAAQ,EAClC,MAAM,CAAC,MAAM,EAAE,MAAM,CACtB;YAED,MAAM,IAAI,GAAG;AACV,iBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI;iBAC9D,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;YAElE,MAAM,GAAG,GAAG;AACT,iBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI;iBAC9D,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;YAEjE,IAAI,IAAI,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,EAAE;gBAC1C,OAAO,CAAA,UAAA,EAAa,IAAI,CAAA,EAAA,EACtB,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,kBAAkB,GAAG,IAAI,CAAC,MAAM,GAAG,oBAC7D,CAAA,CAAA,CAAG;YACL;YAEA,IAAI,IAAI,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,EAAE;gBAC1C,OAAO,CAAA,UAAA,EAAa,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,kBAAkB,GAAG,oBAAoB,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG;YAC/G;AAEA,YAAA,OAAO,iBAAiB;QAC1B,CAAC,CAAC,CACH;IACH;AAEA,IAAA,KAAK,CAAC,KAAiB,EAAE,OAA0B,EAAE,OAA0B,EAAA;QAC7E,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK;QAC/B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;AACvB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE;gBACN,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC1B,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;AAC3B,aAAA;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAE,OAA0B,EAAE,OAA0B,EAAA;QACnF,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK;QAC/B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAC7B,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE;gBACN,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC1B,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;AAC3B,aAAA;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,SAAS,CAAC,KAAK,EAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IACjC;AAEA,IAAA,UAAU,CAAC,KAAK,EAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IACjC;8GAzMW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAP,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9DpC,o2LA8IA,EAAA,MAAA,EAAA,CAAA,6LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDhGI,gBAAgB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,iBAAiB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,cAAc,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,cAAc,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGd,iBAAiB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,kBAAkB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,mBAAmB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,iBAAiB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,mBAAmB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,kBAAkB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,kBAAkB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,uBAAuB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EATvB,SAAS,yCACT,YAAY,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAWH,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAtBnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,eAAA,EAGf,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,gBAAgB;wBAChB,iBAAiB;wBACjB,cAAc;wBACd,cAAc;wBACd,SAAS;wBACT,YAAY;wBACZ,iBAAiB;wBACjB,kBAAkB;wBAClB,mBAAmB;wBACnB,iBAAiB;wBACjB,mBAAmB;wBACnB,kBAAkB;wBAClB,kBAAkB;wBAClB,uBAAuB;AACxB,qBAAA,EAAA,QAAA,EAAA,o2LAAA,EAAA,MAAA,EAAA,CAAA,6LAAA,CAAA,EAAA;;;ME/CU,eAAe,CAAA;AAY1B,IAAA,WAAA,CAAoB,YAA0B,EAAA;QAA1B,IAAA,CAAA,YAAY,GAAZ,YAAY;QAXxB,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG;AAC1B,aAAA,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACtB,aAAA,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AACzB,aAAA,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE;AACtB,aAAA,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACtB,aAAA,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE;AACxB,aAAA,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;QAE/B,IAAA,CAAA,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA4B;QACH,IAAA,CAAA,WAAW,GAAG,IAAI;IAER;AAEjD,IAAA,SAAS,CAAC,KAAwB,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC;IAC5D;IAEA,KAAK,CAAC,MAAyB,EAAE,OAAiB,EAAA;AAChD,QAAA,MAAM,CAAC,OAAO,GAAG,OAAO;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC;IACxC;8GArBW,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,sRCb5B,63BAkBA,EAAA,MAAA,EAAA,CAAA,6NAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDLa,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,UAAA,EAGX,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,63BAAA,EAAA,MAAA,EAAA,CAAA,6NAAA,CAAA,EAAA;;sBAY9C,WAAW;uBAAC,wBAAwB;;;MEM1B,cAAc,CAAA;IA6CzB,IAAa,MAAM,CAAC,MAAoB,EAAA;AACtC,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC;IACjE;AAIA,IAAA,WAAA,CACS,YAA0B,EAC1B,WAAwB,EACxB,YAA0B,EAC1B,YAA0B,EAAA;QAH1B,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,YAAY,GAAZ,YAAY;AApDrB,QAAA,IAAA,CAAA,WAAW,GAAmD,IAAI,YAAY,EAAoC;AAGlH,QAAA,IAAA,CAAA,aAAa,GAAwC,IAAI,YAAY,EAAyB;AAG9F,QAAA,IAAA,CAAA,aAAa,GAAwC,IAAI,YAAY,EAAyB;AAG9F,QAAA,IAAA,CAAA,mBAAmB,GAAwC,IAAI,YAAY,EAAyB;AAGpG,QAAA,IAAA,CAAA,aAAa,GAAwC,IAAI,YAAY,EAAyB;AAG9F,QAAA,IAAA,CAAA,SAAS,GAA0C,IAAI,YAAY,EAA2B;AAG9F,QAAA,IAAA,CAAA,UAAU,GAAyC,IAAI,YAAY,EAA0B;AAG7F,QAAA,IAAA,CAAA,gBAAgB,GAAyC,IAAI,YAAY,EAA0B;AAGnG,QAAA,IAAA,CAAA,qBAAqB,GAA0C,IAAI,YAAY,EAA2B;AAG1G,QAAA,IAAA,CAAA,eAAe,GAA0C,IAAI,YAAY,EAA2B;AAGpG,QAAA,IAAA,CAAA,cAAc,GAA0C,IAAI,YAAY,EAA2B;AAGnG,QAAA,IAAA,CAAA,mBAAmB,GAA8B,IAAI,YAAY,EAAe;AAGhF,QAAA,IAAA,CAAA,oBAAoB,GAA+B,IAAI,YAAY,EAAgB;AAGnF,QAAA,IAAA,CAAA,aAAa,GAAyB,IAAI,YAAY,EAAU;QAOxD,IAAA,CAAA,MAAM,GAAG,IAAI;QAQnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;QACzC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACtC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAC9E;IACH;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;IAC/B;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QAC/C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QAEjD,IAAI,CAAC,YAAY,CAAC;aACf,IAAI,CACH,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAC5B,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AAEnE,aAAA,SAAS,CAAC,CAAC,IAA8C,KAAI;AAC5D,YAAA,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,IAAI;AACtC,YAAA,MAAM,eAAe,GAAG,MAAM,EAAE,OAAO,EAAE,QAAQ;AACjD,YAAA,IAAI,eAAe,KAAK,eAAe,CAAC,CAAC,EAAE;AACzC,gBAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB;gBACxC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;AACvB,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE;wBACnD;oBACF;AACA,oBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACpD,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,MAAM,EAAE,MAAM;AACf,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB;gBACxC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;AACvB,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE;wBACnD;oBACF;AACA,oBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACpD,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,MAAM,EAAE,MAAM;AACf,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;QAEJ,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACjF,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAChF,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC7E,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC9E,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACpF,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/B,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACjF,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACvF,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACzF,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACnF,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9B,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAClF,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7B,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACjF,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACrB;8GA1JW,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAO,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,wlBAJd,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,0BCzBpE,+vBAmBA,EAAA,MAAA,EAAA,CAAA,sFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDQY,uBAAuB,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAa,eAAe,uEAA1B,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEjC,cAAc,EAAA,UAAA,EAAA,CAAA;kBAR1B,SAAS;+BACE,gBAAgB,EAAA,SAAA,EAGf,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,mBACjD,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,uBAAuB,EAAE,SAAS,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,+vBAAA,EAAA,MAAA,EAAA,CAAA,sFAAA,CAAA,EAAA;;sBAK7D;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;;MExEU,QAAQ,CAAA;AAiBnB,IAAA,WAAA,CAAY,OAgBX,EAAA;QAtBD,IAAA,CAAA,KAAK,GAAG,CAAC;AAuBP,QAAA,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI;AACzB,QAAA,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK;AAC3B,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI;AAC/E,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,GAAG,OAAO,EAAE,SAAS,GAAG,KAAK;AACxE,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,GAAG,OAAO,EAAE,SAAS,GAAG,IAAI;AACvE,QAAA,IAAI,CAAC,GAAG,GAAG,OAAO,EAAE,GAAG;AACvB,QAAA,IAAI,CAAC,GAAG,GAAG,OAAO,EAAE,GAAG;QACvB,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK;IAC7B;AACD;;ACnCK,MAAO,8BAAoD,SAAQ,mBAAsB,CAAA;AAP/F,IAAA,WAAA,GAAA;;AAQE,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,KAAI;AACrD,gBAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE;AACpC,gBAAA,QACE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,GAAG;AAC3F,qBAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,GAAG,CAAC;AAEhG,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,oFAAC;QAEiB,IAAA,CAAA,IAAI,GAAG,IAAI;QACX,IAAA,CAAA,QAAQ,GAAG,QAAQ;AACvC,IAAA;8GAbY,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECd3C,smGAyDA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED7CY,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEN,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAP1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uCAAuC,mBAGhC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,OAAO,CAAC,EAAA,QAAA,EAAA,smGAAA,EAAA;;;AEZpB;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"tetacom-svg-charts.mjs","sources":["../../src/chart/const/chart-config-postfix.ts","../../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/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.component.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/chart/chart-container/series-controls/series-controls.component.ts","../../src/chart/chart-container/series-controls/series-controls.component.html","../../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/model/plot-band.ts","../../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":["export const chartConfigPostfix = 'series_config';\n","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(filter((msg) => channel && msg.channel === channel));\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?: { top?: number; right?: number; bottom?: number; left?: number }) {\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 controls: {\n enable: false,\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 custom,\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","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: '#FF7F50',\n visible: true,\n enabled: true,\n clipPointsDirection: ClipPointsDirection.x,\n});\n","import { Injectable } from '@angular/core';\nimport {\n BehaviorSubject,\n filter,\n lastValueFrom,\n map,\n merge,\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';\nimport { chartConfigPostfix } from '../const/chart-config-postfix';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ChartService {\n public id: Observable<string>;\n public config: Observable<IChartConfig>;\n public initialConfig: 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 public configUpdated: Observable<string>;\n\n private config$ = new BehaviorSubject<IChartConfig>(defaultChartConfig());\n private configUpdates$ = new Subject<IChartConfig>();\n private size$ = new BehaviorSubject<DOMRect>(null);\n private pointerMove$ = new Subject<PointerEvent>();\n private tooltips$ = new BehaviorSubject<Map<Series<BasePoint>, IDisplayTooltip>>(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 constructor() {\n this.id = of((Date.now() + Math.random()).toString(36));\n\n this.initialConfig = this.config$.asObservable().pipe(\n shareReplay({\n bufferSize: 1,\n refCount: true,\n }),\n );\n\n const initialConfig = this.initialConfig.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.config = merge(initialConfig, this.configUpdates$).pipe(\n filter((_) => _ !== null),\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$.asObservable().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$.asObservable().pipe(filter((_) => _?.event?.type === 'click'));\n this.plotBandContextMenu = this.plotBandEvent$.asObservable().pipe(filter((_) => _?.event?.type === 'contextmenu'));\n this.configUpdated = this.configUpdates$.asObservable().pipe(\n map((config) => {\n return this.getConfigString(config);\n }),\n );\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 const key = [...currentTooltips.keys()].find((_) => _.id === tooltip.series.id);\n currentTooltips.delete(key);\n if (!tooltip.point) {\n currentTooltips.delete(tooltip.series);\n } else {\n currentTooltips.set(tooltip.series, tooltip);\n }\n this.tooltips$.next(new Map<Series<BasePoint>, IDisplayTooltip>(currentTooltips));\n }\n\n public clearTooltips() {\n this.tooltips$.next(new Map());\n }\n\n public async updateSeries(series: Series<BasePoint>, visible?: boolean) {\n const currentConfig = await lastValueFrom(this.config.pipe(take(1)));\n const currentSeriesIndex = currentConfig.series.findIndex((_) => _.id === series.id);\n\n if (currentSeriesIndex === -1) {\n return;\n }\n currentConfig.series = currentConfig.series.map((seriesItem) => {\n return { ...seriesItem };\n });\n\n try {\n this.saveCookie(currentConfig);\n } finally {\n this.configUpdates$.next({ ...currentConfig });\n }\n }\n\n public async clearSeriesSettings() {\n const config = await lastValueFrom(this.initialConfig.pipe(take(1)));\n if (!config.name) return;\n localStorage.removeItem(`${config.name}_${chartConfigPostfix}`);\n this.configUpdates$.next(null);\n this.config$.next({ ...config });\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 private saveCookie(config: IChartConfig) {\n if (!config.name) return;\n const seriesConfig = this.getConfigString(config);\n localStorage.setItem(`${config.name}_${chartConfigPostfix}`, seriesConfig);\n }\n\n private getConfigString(config: IChartConfig) {\n const series = config?.series?.map((_: Series<BasePoint>) => {\n return {\n id: _.id,\n visible: _.visible,\n enabled: _.enabled,\n color: _.color,\n type: _.type,\n fillType: _.fillType,\n strokeDasharray: _.style?.strokeDasharray,\n strokeWidth: _.style?.strokeWidth,\n };\n });\n return JSON.stringify(series ?? null);\n }\n\n private restoreLocalStorage(config: IChartConfig): IChartConfig {\n if (!config.name) return config;\n\n const seriesConfig = localStorage.getItem(`${config.name}_${chartConfigPostfix}`);\n if (seriesConfig) {\n const json: any[] = JSON.parse(seriesConfig);\n config.series = config.series.map((serie, index) => {\n const found = json.find((_) => _.id === serie.id);\n if (found) {\n serie.visible = found.visible ?? serie.visible;\n serie.enabled = found.enabled ?? serie.enabled;\n serie.color = found.color ?? serie.color;\n const type = parseInt(found.type, 10);\n if (type !== null && type !== undefined && !isNaN(type)) {\n serie.type = type;\n }\n const fillType = parseInt(found.fillType, 10);\n if (fillType !== null && fillType !== undefined && !isNaN(fillType)) {\n serie.fillType = fillType;\n }\n if (!serie.style) {\n serie.style = {};\n }\n serie.style.strokeWidth = found.strokeWidth ?? serie.style.strokeWidth;\n serie.style.strokeDasharray = found.strokeDasharray ?? serie.style.strokeDasharray;\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({}, defaultChartConfig().tooltip, config.tooltip);\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 = (inputText?: string | number | null, backupRatio = 0.5, fontSize = 10): 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.range(min, max + tickStep, tickStep).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 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(ticks, (_) => formatter(_).length);\n\n finalPadding += getTextWidth(formatter(ticks[maxElementLengthIndex]), this.backupRatio);\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<AxisOrientation, (point: BasePoint) => number>()\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 if (current.visible && current.enabled) {\n return acc.concat(current.data);\n }\n return acc;\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 (typeof extremes[0] === 'number' && typeof extremes[1] === 'number' && extremes[0] === extremes[1]) {\n if (extremes[1] > 0) {\n extremes[0] = 0;\n extremes[1] = extremes[1] * 2;\n } else {\n extremes[1] = extremes[1] + 1;\n }\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(orientation: AxisOrientation, config: IChartConfig, index: number): 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[this._orientation === AxisOrientation.y ? 'yAxisIndex' : 'xAxisIndex'] === 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 ? this.chartConfig.xAxis[this.index] : 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] | null;\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] | null;\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(\n private _broadcast: BroadcastService,\n private _chart: ChartService,\n ) {\n this.zoomed = this.zoomed$.asObservable().pipe(\n shareReplay({\n bufferSize: 1,\n refCount: true,\n }),\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([this._broadcast.subscribeToZoom(this.broadcastChannel), this._chart.config])\n .pipe(\n filter(([zoom, config]: [IBroadcastMessage<ZoomMessage>, IChartConfig]) => {\n return (\n 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 )\n .subscribe(([zoom, config]) => {\n this.fireZoom(zoom.message);\n });\n }\n }\n\n getD3Transform(\n targetDomain: [number, number],\n originalDomain: [number, number],\n scale,\n orientation: AxisOrientation,\n inverted: boolean,\n ) {\n const zoomScale =\n Math.abs(scale(originalDomain[1]) - scale(originalDomain[0])) /\n 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 { combineLatest, map, Observable, shareReplay, take, withLatestFrom } 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([this.chartService.size, this.chartService.config, this.zoomService.zoomed]).pipe(\n map(([size, config, zoom]) => {\n config = { ...config };\n config.xAxis = config.xAxis.map((_) => ({ ..._ }));\n config.yAxis = config.yAxis.map((_) => ({ ..._ }));\n const xAxisMap = new Map<number, Axis>();\n const yAxisMap = new Map<number, Axis>();\n\n config.yAxis.forEach((axis, index) => {\n const newAxis = Axis.createAxis(AxisOrientation.y, config, index);\n if (\n newAxis.options.visible &&\n config.series.some(\n (serie) => serie.yAxisIndex === index && serie.visible && serie.enabled && serie.data?.length > 0,\n )\n ) {\n newAxis.options.visible = true;\n } else {\n newAxis.options.visible = false;\n }\n yAxisMap.set(index, newAxis);\n });\n\n config.xAxis.forEach((axis, index) => {\n const newAxis = Axis.createAxis(AxisOrientation.x, config, index);\n if (\n newAxis.options.visible &&\n config.series.some((serie) => serie.xAxisIndex === index && serie.enabled && serie.data?.length > 0)\n ) {\n newAxis.options.visible = true;\n } else {\n newAxis.options.visible = false;\n }\n xAxisMap.set(index, newAxis);\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 = zoom?.axis?.orientation !== AxisOrientation.x || 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 = (size.height || 0) - top - bottom - config?.bounds?.top - 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 = zoom?.axis?.orientation !== AxisOrientation.y || 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 (config.zoom.syncChannel && config.zoom.syncType === ZoomType.x) {\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 (config.zoom.syncChannel && config.zoom.syncType === ZoomType.y) {\n this.zoomService.broadcastZoom(msg);\n }\n }\n });\n });\n }\n}\n","import { ChangeDetectorRef, Component, computed, ElementRef, inject, input } 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';\nimport { map } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n@Component({\n template: '',\n standalone: true,\n})\nexport class SeriesBaseComponent<T extends BasePoint> {\n config = input<IChartConfig>();\n series = input<Series<T>>();\n\n protected svc = inject(ChartService);\n protected cdr = inject(ChangeDetectorRef);\n protected scaleService = inject(ScaleService);\n protected zoomService = inject(ZoomService);\n protected element = inject(ElementRef);\n\n id = (Date.now() + Math.random()).toString(36);\n\n xScales = toSignal(this.scaleService.scales.pipe(map((_) => _.x)));\n yScales = toSignal(this.scaleService.scales.pipe(map((_) => _.y)));\n\n x = computed(() => {\n return this.xScales().get(this.series().xAxisIndex)?.scale;\n });\n y = computed(() => {\n return this.yScales().get(this.series().yAxisIndex)?.scale;\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","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 = (containerPosition.left + containerPosition.right) / 2 - 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 = (containerPosition.top + containerPosition.bottom) / 2 - 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 (verticalAlign === VerticalAlign.top || verticalAlign === VerticalAlign.innerTop) {\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 ? rect.bottom - transformedParentRect.bottom : 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 = 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 styleUrls: ['./tooltip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, NgTemplateOutlet]\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: ${(_.point.x as any) instanceof Date ? format(_.point.x as any) : _.point.x?.toFixed(2)}\n y: ${(_.point.y as any) instanceof Date ? format(_.point.y as any) : _.point.y?.toFixed(2)}\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 ? transformHtml(formatter(tooltipList)) : 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\n 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 >\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 $index) {\n <div class=\"display-flex align-center\">\n <span\n class=\"display-block margin-right-1\"\n [style.width.px]=\"10\"\n [style.height.px]=\"2\"\n [style.background-color]=\"tooltip.series?.color\"\n >\n </span>\n <span class=\"font-title-3\">\n {{ tooltip.series?.name }}\n <span class=\"font-body-3\">\n x: {{ format(tooltip.point?.x) }} y: {{ format(tooltip.point?.y) }}\n </span>\n </span>\n </div>\n }\n </div>\n }\n }\n </div>\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { Axis } from '../../core/axis/axis';\nimport { BehaviorSubject, map } from 'rxjs';\nimport { ScaleService } from '../../service/scale.service';\nimport { getTextWidth } from '../../core/utils/get-text-width';\nimport * as d3 from 'd3';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: '[teta-x-axis]',\n templateUrl: './x-axis.component.html',\n styleUrls: ['./x-axis.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class XAxisComponent {\n private scaleService = inject(ScaleService);\n\n xScales = toSignal(this.scaleService.scales.pipe(map((_) => _.x)));\n axis = input<Axis>();\n size = input<DOMRect>();\n\n x = computed(() => {\n return this.xScales().get(this.axis().index)?.scale;\n });\n ticks = computed(() => {\n const tickSize = this.x()\n .ticks()\n .map((_) =>\n getTextWidth(\n this.axis().options.tickFormat ? this.axis().options.tickFormat(_) : this.axis().defaultFormatter()(_),\n 0.45,\n 11,\n ),\n );\n return this.x().ticks(this.size().width / parseInt(d3.max(tickSize), 10) / 5);\n });\n\n getLabelTransform = computed(() => {\n return `translate(${this.size().width / 2}, ${this.axis().options.opposite ? -32 : 32})`;\n });\n}\n","@if (\n {\n x: x(),\n ticks: ticks(),\n axis: axis(),\n };\n as data\n) {\n @for (tick of data.ticks; track $index) {\n <svg:g text-anchor=\"middle\" [attr.transform]=\"'translate(' + data.x(tick) + ', 0)'\">\n <text\n fill=\"var(--color-text-70)\"\n [attr.dy]=\"data.axis.options.opposite ? '-0.71em' : '0.71em'\"\n [attr.y]=\"data.axis.options.opposite ? 0 : 9\"\n >\n {{ data.axis.options.tickFormat ? data.axis.options.tickFormat(tick) : data.axis.defaultFormatter()(tick) }}\n </text>\n <line stroke=\"var(--color-text-30)\" [attr.y2]=\"data.axis.options.opposite ? -6 : 6\"></line>\n </svg:g>\n }\n <svg:g class=\"font-caption\" style=\"fill: var(--color-text-70)\" [attr.transform]=\"getLabelTransform()\">\n <text fill=\"var(--color-text-70)\" text-anchor=\"middle\" dominant-baseline=\"middle\">\n {{ data.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 OnInit,\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 { combineLatest, takeWhile } from 'rxjs';\nimport { ZoomBehaviorType } from '../model/enum/zoom-behavior-type';\nimport { ScaleType } from '../model/enum/scale-type';\nimport { ScaleService } from '../service/scale.service';\n\n@Directive({\n selector: '[tetaZoomable]',\n standalone: true,\n})\nexport class ZoomableDirective implements OnDestroy, AfterViewInit, OnInit {\n @Input() config: IChartConfig;\n @Input() axis: Axis;\n @Input() size: DOMRect;\n\n @HostBinding('class.zoomable') zoomable = false;\n @HostBinding('class.crosshair') 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 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 scaleService: ScaleService,\n private zone: NgZone,\n ) {}\n\n ngOnInit() {\n if (this.axis?.options?.zoom || this.config?.zoom?.enable) {\n this.zoomable = this.config?.zoom?.zoomBehavior === ZoomBehaviorType.move && !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 combineLatest([this.scaleService.scales, this.zoomService.zoomed])\n .pipe(takeWhile(() => this.alive))\n .subscribe((data) => {\n const [scales, zoomed] = data;\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 axis =\n this.axis.orientation === AxisOrientation.x ? scales.x.get(this.axis.index) : scales.y.get(this.axis.index);\n const scale = axis.scale.copy().domain(this.axis.originDomain);\n let transform;\n if (zoomed.domain === null || zoomed.domain === undefined) {\n transform = zoomIdentity;\n } else {\n transform = this.zoomService.getD3Transform(\n zoomed.domain,\n axis.originDomain,\n scale,\n axis.orientation,\n axis.options.inverted,\n );\n }\n\n this.elementRef.nativeElement.__zoom = transform;\n this.currentTransform = transform;\n }\n });\n }\n\n private initZoomListeners() {\n const enable = (this.axis?.options?.zoom && this.axis?.options.visible !== false) || 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 = this.config?.zoom?.minTranslate != null ? this.axis.scale(this.config?.zoom?.minTranslate) : -Infinity;\n const max = this.config?.zoom?.maxTranslate != null ? this.axis.scale(this.config?.zoom?.maxTranslate) : Infinity;\n if (this.axis.orientation === AxisOrientation.x && this.config.zoom.type === ZoomType.x) {\n this.zoom.translateExtent([\n [Math.min(min, max), -Infinity],\n [Math.max(min, max), Infinity],\n ]);\n }\n\n if (this.axis.orientation === AxisOrientation.y && this.config.zoom.type === ZoomType.y) {\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 ? (extremes[1] - extremes[0]) / this.config.zoom?.min : 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\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 (event.ctrlKey && event.type === 'wheel') || Boolean(window.TouchEvent && event.type !== 'wheel');\n })\n .wheelDelta((event) => {\n const delta = 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 = type === 'end' ? 0 : this.axis.orientation === AxisOrientation.y ? event.deltaY : 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 const 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 ? domain : [...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.elementRef.nativeElement.__zoom = 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 { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { Axis } from '../../core/axis/axis';\n\nimport { ScaleService } from '../../service/scale.service';\nimport { map } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: '[teta-y-axis]',\n templateUrl: './y-axis.component.html',\n styleUrls: ['./y-axis.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class YAxisComponent {\n private scaleService = inject(ScaleService);\n yScales = toSignal(this.scaleService.scales.pipe(map((_) => _.y)));\n axis = input<Axis>();\n size = input<DOMRect>();\n\n y = computed(() => {\n return this.yScales().get(this.axis().index)?.scale;\n });\n\n getLabelTransform = computed(() => {\n return `translate(${this.axis().options.opposite ? this.axis().selfSize : -this.axis().selfSize}, ${\n this.size().height / 2\n }) rotate(-90)`;\n });\n}\n","@if (\n {\n y: y(),\n axis: axis(),\n };\n as data\n) {\n @for (tick of data.y.ticks(); track $index) {\n <svg:g\n [attr.text-anchor]=\"data.axis.options.opposite ? 'start' : 'end'\"\n [attr.transform]=\"'translate(0, ' + data.y(tick) + ')'\"\n >\n <text fill=\"var(--color-text-70)\" dy=\"0.32em\" [attr.x]=\"data.axis.options.opposite ? 10 : -9\">\n {{ data.axis.options.tickFormat ? data.axis.options.tickFormat(tick) : data.axis.defaultFormatter()(tick) }}\n </text>\n <line stroke=\"var(--color-text-30)\" [attr.x2]=\"data.axis.options.opposite ? 6 : -6\"></line>\n </svg:g>\n }\n <svg:g class=\"font-caption\" style=\"fill: var(--color-text-70)\" [attr.transform]=\"getLabelTransform()\">\n <text\n [attr.dy]=\"data.axis.options.opposite ? '-4px' : '4px'\"\n text-anchor=\"middle\"\n [attr.dominant-baseline]=\"data.axis.options.opposite ? 'auto' : 'hanging'\"\n >\n {{ data.axis.options.title }}\n </text>\n </svg:g>\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n HostListener,\n input,\n OnDestroy,\n signal,\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 imports: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlotBandComponent implements AfterViewInit, OnDestroy {\n plotBand = input<PlotBand>();\n axis = input<Axis>();\n scale = input<any>();\n size = input<DOMRect>();\n\n fromTo = signal<{\n from: number;\n to: number;\n } | null>({\n from: 0,\n to: 0,\n });\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 height = computed(() => {\n return this.size().height;\n });\n\n width = computed(() => {\n return this.size().width;\n });\n\n from = computed(() => {\n if (this.scale() && this.fromTo()) {\n return this.scale()(this.fromTo().from);\n }\n return 0;\n });\n\n to = computed(() => {\n if (this.scale() && this.fromTo()) {\n return this.scale()(this.fromTo().to);\n }\n return 0;\n });\n\n bandSize = computed(() => {\n if (this.scale() && this.fromTo()) {\n return Math.abs(this.scale()(this.fromTo().to) - this.scale()(this.fromTo().from));\n }\n return 0;\n });\n\n textPosition = computed(() => {\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.fromTo().from as any) instanceof Date ? (this.fromTo().from as any).getTime() : this.fromTo().from;\n const to = (this.fromTo().to as any) instanceof Date ? (this.fromTo().to as any).getTime() : this.fromTo().to;\n const position = ((from <= min ? min : from) + (to >= max ? max : to)) / 2;\n return this.scale()(position);\n });\n\n fill = computed(() => {\n if (this.plotBand().style?.plotBand?.patternImage) {\n return `url(#${this.plotBand().style.plotBand?.patternImage})`;\n }\n return this.plotBand().style.plotBand?.fill;\n });\n\n constructor(\n private chartService: ChartService,\n private element: ElementRef,\n ) {\n effect(() => {\n if (this.plotBand()) {\n this.fromTo.set({\n from: this.plotBand().from,\n to: this.plotBand().to,\n });\n }\n });\n }\n\n emit(event: IChartEvent<PlotBand>) {\n this.chartService.emitPlotBand(event);\n }\n\n ngAfterViewInit(): void {\n const plotbandElement = d3.select(this.element.nativeElement).select('.plotband');\n\n const grabElements = d3.select(this.element.nativeElement).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('start drag end', (event: d3.D3DragEvent<any, PlotBand, any>, d: PlotBand) => {\n const bandSize = parseFloat(\n plotbandElement.attr(this.axis().orientation === AxisOrientation.x ? 'width' : 'height'),\n );\n\n const from = this.scale().invert(event[AxisOrientation[this.axis().orientation]]);\n const to = this.scale().invert(event[AxisOrientation[this.axis().orientation]] + bandSize);\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.from = from;\n // d.to = to;\n // if (d.from < minValue) {\n // d.from = minValue;\n // }\n // if (d.to > maxValue) {\n // d.to = maxValue;\n // }\n\n d.from = from;\n d.to = to;\n\n this.fromTo.set({\n from: d.from,\n to: d.to,\n });\n this.emit({\n event,\n target: d,\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(event[AxisOrientation[this.axis().orientation]]);\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 this.fromTo.set({\n from: d.from,\n to: d.to,\n });\n this.emit({\n event,\n target: d,\n });\n },\n );\n\n plotbandElement.datum<PlotBand>(this.plotBand());\n grabElements.datum<PlotBand>(this.plotBand());\n\n if (this.plotBand().draggable) {\n plotbandElement.call(drag);\n }\n\n if (this.plotBand().resizable) {\n grabElements.call(resize);\n }\n }\n\n ngOnDestroy() {\n this.dragElements.on('start drag end', null);\n this.resizeElements.on('start drag end', null);\n }\n}\n","<svg:rect\n class=\"plotband\"\n xmlns:svg=\"http://www.w3.org/1999/html\"\n [class.draggable]=\"plotBand()?.draggable === true\"\n [attr.fill]=\"fill()\"\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]=\"textPosition()\"\n [attr.transform]=\"'rotate(-90, ' + textPosition() + ',' + height() / 2 + ')'\"\n [attr.y]=\"height() / 2\"\n >\n {{ 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]=\"textPosition()\"\n [attr.y]=\"width() / 2\"\n >\n {{ plotBand().label }}\n </svg:text>\n}\n@if (plotBand().resizable) {\n @if (plotBand().showGrabbers) {\n <svg:line\n 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\n 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\n 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\n 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 { AfterViewInit, ChangeDetectionStrategy, Component, Input } 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 changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe]\n})\nexport class GridlinesComponent implements AfterViewInit {\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(\n private svc: ScaleService,\n private chartService: ChartService,\n ) {\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\n ? generateTicks(scales.y.get(0).scale.domain(), config.gridLines?.y?.ticksCount)\n : scales.y.get(0)?.scale.ticks(ratio);\n }),\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\n ? generateTicks(scales.x.get(0).originDomain, config.gridLines?.x?.ticksCount)\n : scales.x.get(0)?.scale.ticks(ratio);\n }),\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","@if (\n { xValues: tickXValues | async, yValues: tickYValues | async, x: x | async, y: y | async, config: config | async };\n as data\n) {\n @if (data.y && data.config.gridLines?.showY !== false) {\n @for (tick of data.yValues; track $index) {\n <svg:line\n [attr.x1]=\"0\"\n [attr.y1]=\"data.y(tick) || 1\"\n [attr.x2]=\"size?.width\"\n [attr.y2]=\"data.y(tick) || 1\"\n ></svg:line>\n }\n }\n @if (data.x && data.config.gridLines?.showX !== false) {\n @for (tick of data.xValues; track $index) {\n <svg:line\n [attr.x1]=\"data.x(tick) || 1\"\n [attr.y1]=\"0\"\n [attr.x2]=\"data.x(tick) || 1\"\n [attr.y2]=\"size?.height\"\n ></svg:line>\n }\n }\n}\n","import { Component, computed, OnDestroy, signal } from '@angular/core';\nimport * as d3 from 'd3';\nimport { Observable } 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 { toSignal } from '@angular/core/rxjs-interop';\n\n@Component({\n template: '',\n standalone: true,\n})\nexport class LinearSeriesBaseComponent<T extends BasePoint> extends SeriesBaseComponent<T> implements OnDestroy {\n pointerMove = toSignal(this.svc.pointerMove);\n transform = computed(() => {\n const event = this.pointerMove();\n return this.getTransform(event, this.x(), this.y());\n });\n\n public defaultClipPointsMapping = new Map<\n ClipPointsDirection,\n (min: number, max: number) => (point: BasePoint, idx: number, arr: Array<BasePoint>) => boolean\n >();\n\n display: Observable<number>;\n\n markers = computed(() => {\n return this.series().data?.filter(\n (_) => _?.marker && _?.x !== undefined && _?.y !== undefined && _?.x !== null && _?.y !== null,\n );\n });\n\n path = computed(() => {\n this.update();\n if (!this.x() || !this.y()) {\n return '';\n }\n\n const filter = this.defaultClipPointsMapping.get(this.series().clipPointsDirection);\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 protected update = signal<unknown>(null);\n\n constructor() {\n super();\n const filterX = (min: number, max: number) => (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 = (min: number, max: number) => (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\n ngOnDestroy() {\n this.svc.setTooltip({\n point: null,\n series: this.series(),\n });\n }\n\n getTransform(event: any, scaleX: any, scaleY: any): Pick<BasePoint, 'x' | 'y'> {\n if (!scaleX || !scaleY) {\n return null;\n }\n if (event && event.type === 'mouseleave') {\n return null;\n }\n const mouse = [event?.offsetX, event?.offsetY];\n\n const tooltipTracking = this.config()?.tooltip?.tracking;\n\n const lineIntersection = (\n p0_x: number,\n p0_y: number,\n p1_x: number,\n p1_y: number,\n p2_x: number,\n p2_y: number,\n p3_x: number,\n p3_y: number,\n ) => {\n const rV = {} as any;\n const s1_x = p1_x - p0_x;\n const s1_y = p1_y - p0_y;\n const s2_x = p3_x - p2_x;\n const s2_y = p3_y - p2_y;\n\n const s = (-s1_y * (p0_x - p2_x) + s1_x * (p0_y - p2_y)) / (-s2_x * s1_y + s1_x * s2_y);\n const t = (s2_x * (p0_y - p2_y) - s2_y * (p0_x - p2_x)) / (-s2_x * s1_y + s1_x * s2_y);\n\n if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\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 sortedData = [...this.series().data].sort((a, b) => a.x - b.x);\n\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(\n [...this.series().data].sort((a, b) => a.x - b.x),\n x0,\n );\n\n const range = scaleY.range();\n\n const intersect = lineIntersection(\n pointer,\n range[0],\n pointer,\n Number.MAX_SAFE_INTEGER,\n scaleX(sortedData[rightId - 1]?.x),\n scaleY(sortedData[rightId - 1]?.y),\n scaleX(sortedData[rightId]?.x),\n scaleY(sortedData[rightId]?.y),\n );\n const x = scaleX.invert(intersect.x);\n const y = scaleY.invert(intersect.y);\n if (x !== null && x !== undefined && !isNaN(x) && y !== null && y !== undefined && !isNaN(y)) {\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 sortedData = [...this.series().data].sort((a, b) => a.y - b.y);\n\n const bisect = d3.bisector((_: BasePoint) => _.y).right;\n\n let y0 = scaleY.invert(mouse[1]);\n\n if (y0 instanceof Date) {\n y0 = y0.getTime();\n }\n const rightId = bisect(sortedData, y0);\n\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(sortedData[rightId - 1]?.x),\n scaleY(sortedData[rightId - 1]?.y),\n scaleX(sortedData[rightId]?.x),\n scaleY(sortedData[rightId]?.y),\n );\n\n const x = scaleX.invert(intersect.x);\n const y = scaleY.invert(intersect.y);\n\n if (x !== null && x !== undefined && !isNaN(x) && y !== null && y !== undefined && !isNaN(y)) {\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, inject, 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 private _elementRef = inject(ElementRef);\n\n @Input() tetaDraggablePoint: boolean;\n @Input() dragDirection: DragPointType;\n @Input() allowDrag: (point: { x: number; y: number; deltaX: number; deltaY: number }) => 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 @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 | TouchEvent) {\n event = event as 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 | TouchEvent) {\n event = event as 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 (\n this.allowDrag &&\n !this.allowDrag({\n x: event.x,\n y: event.y,\n deltaX,\n deltaY,\n })\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 | TouchEvent) {\n event = event as 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 (\n this.allowDrag &&\n !this.allowDrag({\n x: event.x,\n y: event.y,\n deltaX,\n deltaY,\n })\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 { ChangeDetectionStrategy, Component, OnDestroy } from '@angular/core';\nimport { BasePoint } from '../../../model/base-point';\nimport { LinearSeriesBaseComponent } from '../linear-series-base.component';\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 changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, DraggablePointDirective],\n})\nexport class LineSeriesComponent<T extends BasePoint> extends LinearSeriesBaseComponent<T> implements OnDestroy {\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.set({});\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.set({});\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","@if (series(); as series) {\n <svg:path\n class=\"line\"\n [attr.d]=\"path()\"\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(); as t) {\n @if (t?.x !== null && t?.x !== undefined && t?.y !== null && t?.y !== undefined) {\n <svg:circle r=\"3\"\n [attr.fill]=\"series.color\"\n [attr.transform]=\"'translate(' + t.x + ', ' + t.y + ')'\"></svg:circle>\n }\n }\n @if (markers(); as draggablePoints) {\n @if (x() && y()) {\n @for (point of draggablePoints; track point) {\n <svg:g [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 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\"></svg:circle>\n @if (point.marker.label?.text) {\n <svg:line [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\"></svg:line>\n <svg:foreignObject [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 #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}\n","import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { BasePoint } from '../../../model/base-point';\nimport { SeriesType } from '../../../model/enum/series-type';\nimport * as d3 from 'd3';\n\n@Component({\n selector: 'svg:svg[teta-bar-series]',\n templateUrl: './bar-series.component.html',\n styleUrls: ['./bar-series.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BarSeriesComponent<T extends BasePoint> extends SeriesBaseComponent<T> {\n x1 = computed(() => {\n const x = this.xScales().get(this.series().xAxisIndex)?.scale;\n const range = x.range();\n const domain = this.series().data.map((_) => _.x);\n\n return d3.scaleBand<number>().range([0, range[1]]).domain(domain).padding(0.1);\n });\n\n barSeriesCount = computed(() => {\n const count = this.config().series.filter(\n (_) => _.type === SeriesType.bar && _.xAxisIndex === this.series().xAxisIndex,\n );\n return count.length;\n });\n\n isNumber(value: any): value is number {\n return typeof value === 'number';\n }\n\n protected readonly Math = Math;\n protected readonly Number = Number;\n}\n","@if ({ x: x(), x1: x1(), y: y(), barSeriesCount: barSeriesCount() }; 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]=\"\n data.x(point.x) + ((isNumber(series().id) ? Number(series().id) : 0) * data.x1.bandwidth()) / data.barSeriesCount\n \"\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 { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { BasePoint } from '../../../model/base-point';\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\n\n@Component({\n selector: 'svg:svg[teta-scatter-series]',\n templateUrl: './scatter-series.component.html',\n styleUrls: ['./scatter-series.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScatterSeriesComponent<T extends BasePoint> extends SeriesBaseComponent<T> {}\n","@if ({ y: y(), x: x() }; 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 { ChangeDetectionStrategy, Component, computed, effect } from '@angular/core';\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { BasePoint } from '../../../model/base-point';\nimport { FillType } from '../../../model/enum/fill-type';\n\n@Component({\n selector: 'svg:svg[teta-block-series]',\n templateUrl: './block-series.component.html',\n styleUrls: ['./block-series.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BlockSeriesComponent<T extends BasePoint> extends SeriesBaseComponent<T> {\n displayPoints = computed(() => {\n const domain = this.config().inverted ? this.y().domain() : this.x().domain();\n const [min, max] = domain;\n return this.series().data.filter((point, index, arr) => {\n const next = arr[index + 1];\n const secondNext = arr[index + 2];\n\n if (this.config().inverted) {\n if (point.y1 === null || point.y1 === undefined) {\n point.y1 = next?.y ?? point.y;\n }\n if (next && (next.y1 === null || next.y1 === undefined)) {\n next.y1 = secondNext?.y ?? next.y;\n }\n return (\n (point.y >= min || point.y1 >= min || arr[index + 1]?.y >= min || arr[index + 1]?.y1 >= min) &&\n (point.y <= max || point.y1 <= max || arr[index - 1]?.y <= max || arr[index - 1]?.y1 <= max)\n );\n } else {\n if (point.x1 === null || point.x1 === undefined) {\n point.x1 = next?.x ?? point.x;\n }\n if (next && (next.x1 === null || next.x1 === undefined)) {\n next.x1 = secondNext?.x ?? next.x;\n }\n return (\n (point.x >= min || point.x1 >= min || arr[index + 1]?.x >= min || arr[index + 1]?.x1 >= min) &&\n (point.x <= max || point.x1 <= max || arr[index - 1]?.x <= max || arr[index - 1]?.x1 <= max)\n );\n }\n });\n });\n\n protected readonly Math = Math;\n protected readonly FillType = FillType;\n}\n","@if ({ y: y(), x: x(), points: displayPoints() }; as data) {\n @if (series()?.fillType === FillType.gradient) {\n <svg:defs>\n <svg:linearGradient\n [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\"\n stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n </svg:defs>\n }\n @if (data.x && data.y) {\n @if (config()?.inverted) {\n @for (point of data.points; track index; let index = $index) {\n <svg:g (mouseenter)=\"mouseenter(point)\" (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]=\"\n series().fillType === FillType.gradient\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : (point.color ?? series().style?.fill ?? series().color)\n \"\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\n x=\"50%\"\n [attr.y]=\"(data.y(point.y1) + data.y(point.y)) / 2\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\"\n >\n {{ point.text }}\n </svg:text>\n }\n <svg:line\n x1=\"0\"\n x2=\"100%\"\n [attr.y1]=\"data.y(point.y)\"\n [attr.y2]=\"data.y(point.y)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : (point.color ?? series().style?.stroke ?? series().color)\"\n ></svg:line>\n <svg:line\n x1=\"0\"\n x2=\"100%\"\n [attr.y1]=\"data.y(point.y1)\"\n [attr.y2]=\"data.y(point.y1)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : (point.color ?? series().style?.stroke ?? series().color)\"\n ></svg:line>\n </svg:g>\n }\n } @else {\n @for (point of data.points; track index; let index = $index) {\n <svg:g (mouseenter)=\"mouseenter(point)\" (mouseleave)=\"mouseleave(point)\">\n <svg:rect\n y=\"0\"\n height=\"100%\"\n [attr.x]=\"data.x(point.x)\"\n [attr.width]=\"Math.abs(data.x(point.x1) - data.x(point.x))\"\n [attr.fill]=\"\n series().fillType === FillType.gradient\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : (point.color ?? series().style?.fill ?? series().color)\n \"\n [attr.fill-opacity]=\"series().style?.fillOpacity\"\n\n ></svg:rect>\n @if (point.text && data.x(point.x1) - data.x(point.x) > 8) {\n <svg:text\n x=\"50%\"\n [attr.x]=\"(data.x(point.x1) + data.x(point.x)) / 2\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\"\n >\n {{ point.text }}\n </svg:text>\n }\n <svg:line\n y1=\"0\"\n y2=\"100%\"\n [attr.x1]=\"data.x(point.x)\"\n [attr.x2]=\"data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : (point.color ?? series().style?.stroke ?? series().color)\"\n ></svg:line>\n <svg:line\n y1=\"0\"\n y2=\"100%\"\n [attr.x1]=\"data.x(point.x1)\"\n [attr.x2]=\"data.x(point.x1)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : (point.color ?? series().style?.stroke ?? series().color)\"\n ></svg:line>\n </svg:g>\n }\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { BasePoint } from '../../../model/base-point';\nimport { FillType } from '../../../model/enum/fill-type';\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 changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BlockAreaSeriesComponent<T extends BasePoint> extends SeriesBaseComponent<T> {\n displayPoints = computed(() => {\n const domain = this.config().inverted ? this.y().domain() : this.x().domain();\n const [min, max] = domain;\n return this.series().data.filter((point, index, arr) => {\n const next = arr[index + 1];\n const secondNext = arr[index + 2];\n\n if (this.config().inverted) {\n if (point.y1 === null || point.y1 === undefined) {\n point.y1 = next?.y ?? point.y;\n }\n if (next && (next.y1 === null || next.y1 === undefined)) {\n next.y1 = secondNext?.y ?? next.y;\n }\n return (\n (point.y >= min || point.y1 >= min || arr[index + 1]?.y >= min || arr[index + 1]?.y1 >= min) &&\n (point.y <= max || point.y1 <= max || arr[index - 1]?.y <= max || arr[index - 1]?.y1 <= max)\n );\n } else {\n if (point.x1 === null || point.x1 === undefined) {\n point.x1 = next?.x ?? point.x;\n }\n if (next && (next.x1 === null || next.x1 === undefined)) {\n next.x1 = secondNext?.x ?? next.x;\n }\n return (\n (point.x >= min || point.x1 >= min || arr[index + 1]?.x >= min || arr[index + 1]?.x1 >= min) &&\n (point.x <= max || point.x1 <= max || arr[index - 1]?.x <= max || arr[index - 1]?.x1 <= max)\n );\n }\n });\n });\n\n fillType = FillType;\n\n protected readonly Math = Math;\n}\n","@if ({ y: y(), x: x(), points: displayPoints() }; 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\"\n 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 $index) {\n <svg:g (mouseenter)=\"mouseenter(point)\" (mouseleave)=\"mouseleave(point)\">\n @if (!!config().inverted) {\n <svg:rect [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]=\"\n series().fillType === fillType.gradient\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : (point.color ?? series().style?.fill ?? series().color)\n \"\n [attr.fill-opacity]=\"series().style?.fillOpacity\"></svg:rect>\n } @else {\n <svg:rect [attr.x]=\"data.x(point.x)\"\n [attr.y]=\"point.y > 0 ? data.y(point.y) : data.y(0)\"\n [attr.height]=\"Math.abs(data.y(0) - data.y(point.y))\"\n [attr.width]=\"Math.abs(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]=\"\n series().fillType === fillType.gradient\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : (point.color ?? series().color)\n \"\n [attr.fill-opacity]=\"series().style?.fillOpacity\"></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\">\n {{ point.text }}\n </svg:text>\n }\n </svg:g>\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, OnDestroy } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport { BasePoint } from '../../../model/base-point';\nimport { ClipPointsDirection } from '../../../model/enum/clip-points-direction';\nimport { LinearSeriesBaseComponent } from '../linear-series-base.component';\nimport { FillDirection, FillType } from '../../../model/enum/fill-type';\n\n@Component({\n selector: 'svg:svg[teta-area-series]',\n templateUrl: './area-series.component.html',\n styleUrls: ['./area-series.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AreaSeriesComponent<T extends BasePoint> extends LinearSeriesBaseComponent<T> implements OnDestroy {\n areaPath = computed(() => {\n if (!this.x() || !this.y()) {\n return '';\n }\n\n const area = d3\n .area<BasePoint>()\n .defined((point) => point.x !== null && point.y !== null && !isNaN(point.x) && !isNaN(point.y));\n\n if (this.config().inverted) {\n area\n .x1((_) => (_.x1 !== null && _.x1 !== undefined ? this.x()(_.x1) : this.x()(0)))\n .x0((_) => this.x()(_.x))\n .y((_) => this.y()(_.y));\n } else {\n area\n .y1((_) => (_.y1 !== null && _.y1 !== undefined ? this.y()(_.y1) : this.y()(0)))\n .y0((_) => this.y()(_.y))\n .x((_) => this.x()(_.x));\n }\n\n const filter = this.defaultClipPointsMapping.get(this.series().clipPointsDirection);\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 return area(filteredData);\n });\n protected readonly FillType = FillType;\n protected readonly FillDirection = FillDirection;\n}\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 || 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 class=\"area\"\n [attr.d]=\"areaPath()\"\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)\"></svg:path>\n<svg:path class=\"area\"\n fill=\"none\"\n [attr.d]=\"path()\"\n [attr.stroke]=\"series().color\"\n [attr.stroke-dasharray]=\"series().style?.strokeDasharray\"\n [attr.stroke-width]=\"series().style?.strokeWidth\"></svg:path>\n@if (transform(); as t) {\n @if (t?.x !== null && t?.x !== undefined && t?.y !== null && t?.y !== undefined) {\n <svg:circle r=\"3\"\n [attr.fill]=\"series().color\"\n [attr.transform]=\"'translate(' + t.x + ', ' + t.y + ')'\"></svg:circle>\n }\n}\n@if (markers(); as draggablePoints) {\n @for (point of draggablePoints; track point) {\n <svg:circle 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","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, 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 Component,\n ComponentRef,\n input,\n OnDestroy,\n ViewContainerRef,\n inject,\n effect,\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 OnDestroy {\n private viewContainerRef = inject(ViewContainerRef);\n config = input<IChartConfig>();\n series = input<Series<T>>();\n\n private _componentRef: ComponentRef<any>;\n\n private count = 0;\n private seriesComponent: any;\n\n constructor() {\n effect(() => {\n if (this.series()) {\n\n if (!Object.prototype.isPrototypeOf.call(SeriesBaseComponent, this.series().component)) {\n this.series().component = defaultSeriesTypeMapping.get(this.series().type) || LineSeriesComponent;\n }\n\n if(this.series().component !== this.seriesComponent) {\n this.viewContainerRef.clear();\n this._componentRef?.destroy();\n this._componentRef = this.viewContainerRef.createComponent(this.series().component);\n this.seriesComponent = this.series().component;\n }\n\n this._componentRef?.setInput('config', this.config());\n this._componentRef?.setInput('series', this.series());\n }\n });\n }\n\n ngOnDestroy(): void {\n this._componentRef?.destroy();\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,\n 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 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 ngOnInit(): void {\n this._domain = this.scale.domain();\n\n const plotlineElement = d3.select(this.element.nativeElement).select('.plotline');\n\n const grabElement = d3.select(this.element.nativeElement).selectAll('.grabber');\n\n this.dragElements = d3.drag().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.on('start drag end', (event: d3.D3DragEvent<any, PlotLine, any>, d: PlotLine) => {\n d.value = this.scale.invert(event[AxisOrientation[this.axis.orientation]]);\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 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\n 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@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\"\n >\n {{ plotLine.label }}\n </svg:text>\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\"\n >\n {{ plotLine.label }}\n </svg:text>\n}\n<svg:line\n 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,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n Input,\n 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 imports: [NgTemplateOutlet, AsyncPipe],\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 ) {\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 ngOnDestroy() {\n this.drag.on('drag end', null);\n }\n\n private init() {\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 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 ({ x: x | async, y: y | async }; 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 ></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 >\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 >\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 imports: [AsyncPipe]\n})\nexport class CrosshairComponent implements OnInit {\n @Input() size: DOMRect;\n transform: Observable<any>;\n\n constructor(\n private scaleService: ScaleService,\n private chartService: ChartService,\n 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","@if (transform | async; as t) {\n <svg:line\n [attr.x1]=\"t.x\"\n y1=\"0\"\n [attr.x2]=\"t.x\"\n [attr.y2]=\"size.height\"\n stroke=\"var(--color-text-90)\"\n stroke-width=\"0.5\"\n ></svg:line>\n <svg:line\n x1=\"0\"\n [attr.y1]=\"t.y\"\n [attr.x2]=\"size.width\"\n [attr.y2]=\"t.y\"\n stroke=\"var(--color-text-90)\"\n stroke-width=\"0.5\"\n ></svg:line>\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n Input,\n NgZone,\n OnChanges,\n 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\n .pipe(\n takeWhile(() => this._alive),\n filter((brush) => brush.chartId !== this.config.id),\n )\n .subscribe((brush) => {\n this._container.call(\n this.brush.move,\n [Math.floor(brush.selection[0]), Math.floor(brush.selection[1])].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(this.config, this.axis.scale);\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) ?? [config.brush?.from, config.brush?.to].map(brushScale);\n const halfBrushHeight = (selection[1] - selection[0]) / 2;\n const invertedSelection: number[] = [from - halfBrushHeight, to + halfBrushHeight].map(brushScale.invert);\n\n if (invertedSelection[1] - invertedSelection[0] > config.brush?.max) {\n this._container.call(\n this.brush.move,\n [Math.floor(invertedSelection[0]), Math.floor(invertedSelection[0] + config.brush?.max)].map(\n brushScale,\n ),\n );\n return;\n }\n\n if (invertedSelection[1] - invertedSelection[0] < config.brush?.min) {\n this._container.call(\n this.brush.move,\n [Math.floor(invertedSelection[0]), Math.ceil(invertedSelection[0] + config.brush?.min)].map(brushScale),\n );\n return;\n }\n\n this._container.call(this.brush.move, [from - halfBrushHeight, to + halfBrushHeight]);\n return;\n }\n\n if (brushScale.invert(to) - brushScale.invert(from) > config.brush?.max) {\n this._container.call(\n this.brush.move,\n this.selection\n ? [this.selection[0], this.selection[0] + config.brush?.max].map(brushScale)\n : [config.brush?.from, config.brush?.to].map(brushScale),\n );\n return;\n }\n\n if (brushScale.invert(to) - brushScale.invert(from) < config.brush?.min) {\n this._container.call(\n this.brush.move,\n this.selection\n ? [this.selection[0], this.selection[0] + config.brush?.min].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 ? this.selection.map(brushScale) : domain.map(brushScale),\n {},\n );\n }, 0);\n });\n }\n }\n\n clearPreviousSelection() {\n this.selection = null;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport {\n AccordionComponent,\n AccordionContentDirective,\n AccordionHeadComponent,\n AccordionItemComponent,\n Align,\n ButtonComponent,\n ColorInputComponent,\n DialogService,\n DropdownComponent,\n DropdownContentDirective,\n DropdownHeadDirective,\n IconComponent,\n InputComponent,\n ScrollableComponent,\n SelectComponent,\n SelectOptionDirective,\n SelectValueDirective,\n TetaSize,\n} from '@tetacom/ng-components';\nimport { Series } from '../../model/series';\nimport { BasePoint } from '../../model/base-point';\nimport { FormsModule } from '@angular/forms';\nimport { ChartService } from '../../service/chart.service';\nimport { LineSeriesComponent } from '../series/line/line-series.component';\nimport { SeriesType } from '../../model/enum/series-type';\nimport { defaultSeriesTypeMapping } from '../../default/defaultSeriesTypeMapping';\nimport { TranslocoPipe, TranslocoService } from '@jsverse/transloco';\nimport { FillType } from '../../model/enum/fill-type';\n\n@Component({\n selector: 'teta-series-controls',\n imports: [\n ButtonComponent,\n DropdownComponent,\n DropdownContentDirective,\n DropdownHeadDirective,\n IconComponent,\n AccordionComponent,\n AccordionHeadComponent,\n AccordionItemComponent,\n AccordionContentDirective,\n ColorInputComponent,\n FormsModule,\n SelectComponent,\n SelectOptionDirective,\n SelectValueDirective,\n ScrollableComponent,\n TranslocoPipe,\n InputComponent,\n ],\n templateUrl: './series-controls.component.html',\n styleUrl: './series-controls.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeriesControlsComponent {\n private chartService = inject(ChartService);\n private dialogService = inject(DialogService);\n private translocoService = inject(TranslocoService);\n protected readonly Align = Align;\n\n series = input<Series<BasePoint>[]>();\n\n availableSeries = computed(() => {\n return this.series()?.filter((item) => item.showInControls !== false && item.type !== SeriesType.custom) ?? [];\n });\n\n enabledSeries = computed(() => {\n return this.availableSeries()?.filter((item) => item.enabled) ?? [];\n });\n\n disabledSeries = computed(() => {\n return this.availableSeries()?.filter((item) => !item.enabled) ?? [];\n });\n\n strokeWidth = [\n { id: 1, value: 1 },\n { id: 1.5, value: 1.5 },\n { id: 2, value: 2 },\n { id: 3, value: 3 },\n { id: 4, value: 4 },\n { id: 5, value: 6 },\n ];\n\n strokeArray = [\n { id: '', value: 'solid' },\n { id: '4, 4', value: 'dashed' },\n { id: '2, 2', value: 'dotted' },\n ];\n\n seriesType = [\n { id: SeriesType.line, value: 'Line' },\n { id: SeriesType.area, value: 'Area' },\n { id: SeriesType.scatter, value: 'Scatter' },\n { id: SeriesType.block, value: 'Block' },\n { id: SeriesType.blockArea, value: 'BlockArea' },\n { id: SeriesType.bar, value: 'Bar' },\n ];\n\n fillType = [\n { id: FillType.default, value: 'Default' },\n { id: FillType.gradient, value: 'Gradient' },\n ];\n\n setSeriesEnabled(series: Series<BasePoint>, value: boolean) {\n series.enabled = value;\n this.chartService.updateSeries(series);\n }\n\n setSeriesColor(series: Series<BasePoint>, value: string) {\n series.color = value;\n this.chartService.updateSeries(series);\n }\n\n setSeriesStrokeWidth(series: Series<BasePoint>, value: number) {\n if (!series.style) {\n series.style = {};\n }\n series.style.strokeWidth = value;\n this.chartService.updateSeries(series);\n }\n\n setSeriesStrokeDasharray(series: Series<BasePoint>, value: string) {\n if (!series.style) {\n series.style = {};\n }\n series.style.strokeDasharray = value;\n this.chartService.updateSeries(series);\n }\n\n setSeriesType(series: Series<BasePoint>, value: SeriesType) {\n series.type = value;\n series.component = defaultSeriesTypeMapping.get(series.type) || LineSeriesComponent;\n if (value === SeriesType.area || value === SeriesType.blockArea || value === SeriesType.block) {\n series.fillType = FillType.gradient;\n }\n this.chartService.updateSeries(series);\n }\n\n setSeriesFillType(series: Series<BasePoint>, value: FillType) {\n series.fillType = value;\n this.chartService.updateSeries(series);\n }\n\n clear() {\n this.dialogService\n .confirm({\n title: this.translocoService.translate('charts.confirm_settings_reset'),\n })\n .subscribe((result) => {\n if (result) {\n this.chartService.clearSeriesSettings();\n }\n });\n }\n\n protected readonly TetaSize = TetaSize;\n protected readonly SeriesType = SeriesType;\n protected readonly FillType = FillType;\n}\n","<teta-dropdown [align]=\"Align.right\"\n #dropdown=\"dropdown\"\n [appendToBody]=\"true\">\n <button teta-button\n tetaDropdownHead\n [class.active]=\"dropdown.open\"\n [palette]=\"'text'\"\n [square]=\"true\"\n [view]=\"'ghost'\">\n <teta-icon [name]=\"'gear'\"></teta-icon>\n </button>\n <div tetaDropdownContent class=\"column shadow-2\" style=\"min-width: 200px;\">\n @if (disabledSeries().length > 0) {\n <div class=\"row padding-h-3 padding-top-3\">\n <teta-dropdown [align]=\"Align.left\" [appendToBody]=\"true\">\n <button teta-button\n tetaDropdownHead\n [palette]=\"'primary'\">\n <teta-icon [name]=\"'add'\"></teta-icon>\n {{ 'charts.add_curve' | transloco }}\n </button>\n <div tetaDropdownContent class=\"column list shadow-2\" style=\"min-width: 200px;\"\n (click)=\"$event.stopPropagation();\">\n @for (seriesItem of disabledSeries(); track seriesItem.id) {\n <div class=\"list-item list-item_interactive\"\n (click)=\"$event.stopPropagation();setSeriesEnabled(seriesItem, true)\">\n {{ seriesItem.name }}\n </div>\n }\n </div>\n </teta-dropdown>\n </div>\n }\n <teta-scrollable class=\"column column_auto\" [contentClass]=\"'column'\">\n <teta-accordion>\n @for (seriesItem of enabledSeries(); track seriesItem.id) {\n <teta-accordion-item [viewType]=\"'rounded'\" [divider]=\"true\">\n <teta-accordion-head style=\"padding: 2px 8px\">\n <div class=\"row align-center gap-12\">\n <div class=\"row align-center gap-8\" (click)=\"$event.stopPropagation()\">\n <teta-button (click)=\"setSeriesEnabled(seriesItem, false)\"\n [palette]=\"'text'\"\n [view]=\"'ghost'\"\n [square]=\"true\">\n <teta-icon [name]=\"'delete'\" [palette]=\"'red'\"></teta-icon>\n </teta-button>\n <teta-color-input [ngModel]=\"seriesItem.color\"\n (ngModelChange)=\"setSeriesColor(seriesItem, $event)\"></teta-color-input>\n </div>\n {{ seriesItem.name }}\n </div>\n </teta-accordion-head>\n <ng-template tetaAccordionContent>\n <div class=\"column gap-8\">\n <teta-input [label]=\"'charts.line_width' | transloco\">\n <teta-select [options]=\"strokeWidth\"\n [ngModel]=\"seriesItem.style?.strokeWidth ?? 1\"\n [valueRef]=\"'id'\"\n (ngModelChange)=\"setSeriesStrokeWidth(seriesItem, $event)\"\n [allowNull]=\"false\">\n <ng-template tetaSelectOption let-option>\n <div style=\"width: 50px;\"\n [style.height.px]=\"option.id\"\n [style.background-color]=\"seriesItem.color\"></div>\n </ng-template>\n <ng-template tetaSelectValue let-value>\n <div style=\"width: 50px;\"\n [style.height.px]=\"value?.id\"\n [style.background-color]=\"seriesItem.color\"></div>\n </ng-template>\n </teta-select>\n </teta-input>\n <teta-input [label]=\"'charts.line_style' | transloco\">\n <teta-select [options]=\"strokeArray\"\n [ngModel]=\"seriesItem.style?.strokeDasharray ?? ''\"\n [valueRef]=\"'id'\"\n (ngModelChange)=\"setSeriesStrokeDasharray(seriesItem, $event)\"\n [allowNull]=\"false\">\n <ng-template tetaSelectOption let-option>\n <div style=\"width: 50px;border:0;border-top: 2px;\"\n [style.border-style]=\"option.value\"\n [style.border-color]=\"seriesItem.color\"></div>\n </ng-template>\n <ng-template tetaSelectValue let-value>\n <div style=\"width: 50px;border:0;border-top: 2px;\"\n [style.border-style]=\"value?.value\"\n [style.border-color]=\"seriesItem.color\"></div>\n </ng-template>\n </teta-select>\n </teta-input>\n <teta-input [label]=\"'charts.chart_type' | transloco\">\n <teta-select [options]=\"seriesType\"\n [ngModel]=\"seriesItem.type ?? SeriesType.line\"\n [valueRef]=\"'id'\"\n [textRef]=\"'value'\"\n (ngModelChange)=\"setSeriesType(seriesItem, $event)\"\n [allowNull]=\"false\">\n </teta-select>\n </teta-input>\n @if (seriesItem.type === SeriesType.area || seriesItem.type === SeriesType.blockArea || seriesItem.type === SeriesType.block) {\n <teta-input [label]=\"'charts.fill_type' | transloco\">\n <teta-select [options]=\"fillType\"\n [ngModel]=\"seriesItem.fillType ?? FillType.default\"\n [valueRef]=\"'id'\"\n [textRef]=\"'value'\"\n (ngModelChange)=\"setSeriesFillType(seriesItem, $event)\"\n [allowNull]=\"false\">\n </teta-select>\n </teta-input>\n }\n </div>\n </ng-template>\n </teta-accordion-item>\n }\n </teta-accordion>\n </teta-scrollable>\n <div class=\"row padding-3\">\n <button teta-button\n [palette]=\"'red'\"\n [view]=\"'ghost'\"\n (click)=\"clear()\">\n <teta-icon [name]=\"'erase'\"></teta-icon>\n {{ 'charts.reset' | transloco }}\n </button>\n </div>\n </div>\n</teta-dropdown>\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, OnDestroy } from '@angular/core';\nimport {\n animationFrameScheduler,\n combineLatest,\n map,\n Observable,\n observeOn,\n shareReplay,\n tap,\n withLatestFrom,\n} from 'rxjs';\n\nimport { Axis } from '../core/axis/axis';\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 { 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 { SeriesControlsComponent } from './series-controls/series-controls.component';\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 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 SeriesControlsComponent,\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<Opposite, (axis: Axis) => (_: Axis) => boolean>()\n .set(true, (axis) => (_: Axis) => _.options.opposite && _.options.visible && axis.index <= _.index)\n .set(false, (axis) => (_: Axis) => _.options.opposite !== true && _.options.visible && _.index <= axis.index);\n\n constructor(\n private _svc: ChartService,\n private _scaleService: ScaleService,\n private _elementRef: ElementRef,\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 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 || 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([this.size, this.scales, this.config]).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.filter((_) => _.options.opposite !== true && _.options.visible).reduce(this.sumSize, 0);\n\n const right = yAxesArray.filter((_) => _.options.opposite && _.options.visible).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.filter((_) => _.options.opposite && _.options.visible).reduce(this.sumSize, 0);\n return {\n x: left + config.bounds?.left,\n y: top + config.bounds?.top,\n width: size.width - left - right - config.bounds?.left - config.bounds?.right,\n height: size.height - top - bottom - config.bounds?.top - config.bounds?.bottom,\n };\n }),\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((acc, curr) => acc + curr.selfSize, config.bounds?.right);\n const nonOppisteTranslateY = nonOppositeOffsetY.reduce((acc, curr) => acc + curr.selfSize, config.bounds?.left);\n\n const oppositeTranslateX = oppositeOffsetX.reduce((acc, curr) => acc + curr.selfSize, config.bounds?.top);\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 ? oppositeTranslateX : size.height - nonOppisteTranslateX\n })`;\n }\n\n if (axis.orientation === AxisOrientation.y) {\n return `translate(${axis.options.opposite ? size.width - oppositeTranslateY : nonOppisteTranslateY}, ${top})`;\n }\n\n return 'translate(0, 0)';\n }),\n );\n }\n\n click(event: MouseEvent, xScales: Map<number, Axis>, yScales: Map<number, Axis>) {\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(event: MouseEvent, xScales: Map<number, Axis>, yScales: Map<number, Axis>) {\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","@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\" [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 && item.value.options.visible && data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g teta-y-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect 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 teta-x-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect 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\" teta-gridlines [size]=\"data.size\"></g>\n }\n <g class=\"x-axis-plotband-container\">\n @for (plotBand of data.plotBands; track $index) {\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 $index) {\n @if (series.visible && series.enabled) {\n <g teta-series-host [config]=\"data.config\" [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 i) {\n @for (plotLine of axis.plotLines; track $index) {\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 i) {\n @for (plotLine of axis.plotLines; track $index) {\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 $index) {\n <g teta-annotation [visibleRect]=\"data.visibleRect\" [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 @if (data.config.controls?.enable) {\n <teta-series-controls [series]=\"data.config.series\"\n class=\"position-absolute\"\n style=\"transform: translateX(-100%)\"\n [style.top.px]=\"4\"\n [style.right.px]=\"4\">\n </teta-series-controls>\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, input } 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 series = input<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(series: Series<BasePoint>, visible?: boolean) {\n series.visible = visible;\n this.chartService.updateSeries(series);\n }\n}\n","@for (seriesItem of series(); track seriesItem.id) {\n @if (seriesItem?.showInLegend !== false && seriesItem.enabled) {\n <div>\n <div class=\"legend-item cursor-pointer\" (click)=\"click(seriesItem, !seriesItem.visible)\">\n <div class=\"legend-icon-form\"\n [style.height.px]=\"getHeight(seriesItem)\"\n [style.border-top-color]=\"seriesItem.visible ? seriesItem.color : 'var(--color-text-30)'\"\n [style.border-top-style]=\"seriesItem.style?.strokeDasharray ? 'dashed' : 'solid'\"\n [style.border-width.px]=\"seriesItem.style?.strokeDasharray ? 1 : 2\"></div>\n <div class=\"legend-label font-caption\"\n style=\"user-select: none\"\n [style.text-decoration]=\"seriesItem.visible ? 'none' : 'line-through'\">\n {{ seriesItem.name }}\n </div>\n </div>\n </div>\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnDestroy, OnInit, Output } 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 providers: [ChartService, ZoomService, ScaleService, BrushService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ChartContainerComponent, AsyncPipe, LegendComponent],\n})\nexport class ChartComponent implements OnInit, OnDestroy {\n hasSeriesData: Observable<boolean>;\n svcConfig: Observable<IChartConfig>;\n @Output()\n pointerMove: EventEmitter<IChartEvent<Map<number, number>>> = new EventEmitter<IChartEvent<Map<number, number>>>();\n\n @Output()\n plotBandsMove: EventEmitter<IChartEvent<PlotBand>> = new EventEmitter<IChartEvent<PlotBand>>();\n\n @Output()\n plotBandClick: EventEmitter<IChartEvent<PlotBand>> = new EventEmitter<IChartEvent<PlotBand>>();\n\n @Output()\n plotBandContextMenu: EventEmitter<IChartEvent<PlotBand>> = new EventEmitter<IChartEvent<PlotBand>>();\n\n @Output()\n plotLinesMove: EventEmitter<IChartEvent<PlotLine>> = new EventEmitter<IChartEvent<PlotLine>>();\n\n @Output()\n pointMove: EventEmitter<IChartEvent<IPointMove>> = new EventEmitter<IChartEvent<IPointMove>>();\n\n @Output()\n chartClick: EventEmitter<IChartEvent<BasePoint>> = new EventEmitter<IChartEvent<BasePoint>>();\n\n @Output()\n chartContextMenu: EventEmitter<IChartEvent<BasePoint>> = new EventEmitter<IChartEvent<BasePoint>>();\n\n @Output()\n annotationContextMenu: EventEmitter<IChartEvent<Annotation>> = new EventEmitter<IChartEvent<Annotation>>();\n\n @Output()\n annotationClick: EventEmitter<IChartEvent<Annotation>> = new EventEmitter<IChartEvent<Annotation>>();\n\n @Output()\n annotationMove: EventEmitter<IChartEvent<Annotation>> = new EventEmitter<IChartEvent<Annotation>>();\n\n @Output()\n zoomServiceInstance: EventEmitter<ZoomService> = new EventEmitter<ZoomService>();\n\n @Output()\n brushServiceInstance: EventEmitter<BrushService> = new EventEmitter<BrushService>();\n\n @Output()\n configUpdated: EventEmitter<string> = new EventEmitter<string>();\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.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.plotBandsMove.emit(_);\n });\n\n this.chartService.plotLineMove.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.plotLinesMove.emit(_);\n });\n\n this.chartService.pointMove.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.pointMove.emit(_);\n });\n\n this.chartService.chartClick.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.chartClick.emit(_);\n });\n\n this.chartService.chartContextMenu.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.chartContextMenu.emit(_);\n });\n\n this.chartService.plotBandClick.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.plotBandClick.emit(_);\n });\n\n this.chartService.plotBandContextMenu.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.plotBandContextMenu.emit(_);\n });\n\n this.chartService.annotationContextMenu.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.annotationContextMenu.emit(_);\n });\n\n this.chartService.annotationClick.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.annotationClick.emit(_);\n });\n\n this.chartService.annotationMove.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.annotationMove.emit(_);\n });\n\n this.chartService.configUpdated.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.configUpdated.emit(_);\n });\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n}\n","@if ({ hasSeriesData: hasSeriesData | async, svcConfig: svcConfig | async }; 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> No data </span>\n }\n </span>\n </div>\n }\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 = 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 { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { BasePoint } from '../../../model/base-point';\nimport { FillType } from '../../../model/enum/fill-type';\nimport { 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 changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgStyle],\n})\nexport class BlockHorizontalSeriesComponent<T extends BasePoint> extends SeriesBaseComponent<T> {\n displayPoints = computed(() => {\n return this.series().data.filter((point, index, arr) => {\n const [min, max] = this.x().domain();\n return (\n (point.x >= min || point.x1 >= min || arr[index + 1]?.x >= min || arr[index + 1]?.x1 >= min) &&\n (point.x <= max || point.x1 <= max || arr[index - 1]?.x <= max || arr[index - 1]?.x1 <= max)\n );\n });\n });\n\n protected readonly Math = Math;\n protected readonly FillType = FillType;\n}\n","@if ({ y: y(), x: x(), points: displayPoints() }; 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\"\n 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)\" (mouseleave)=\"mouseleave(point)\">\n <svg:rect 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\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : (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\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\">\n {{ point.text }}\n </svg:text>\n }\n <svg:line y1=\"0\"\n y2=\"100%\"\n [attr.x1]=\"data.x(point.x)\"\n [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\"\n y2=\"100%\"\n [attr.x1]=\"data.x(point.x1)\"\n [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/const/chart-config-postfix';\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';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.BroadcastService","i2.ChartService","i1.ChartService","i2.ZoomService","i1.ZoomService","i2.ScaleService","i1.ScaleService","i3.ChartService","i1.BrushService","Align","i3.BrushService","i4.ScaleService"],"mappings":"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"}