cats-charts 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/cats-charts.mjs +546 -2
- package/fesm2022/cats-charts.mjs.map +1 -1
- package/index.d.ts +111 -2
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cats-charts.mjs","sources":["../../../projects/charts-lib/src/lib/components/right-click-card/right-click-card.ts","../../../projects/charts-lib/src/lib/components/right-click-card/right-click-card.html","../../../projects/charts-lib/src/lib/components/chart-legend/chart-legend.adapter.ts","../../../projects/charts-lib/src/lib/components/chart-legend/chart-legend.ts","../../../projects/charts-lib/src/lib/components/chart-legend/chart-legend.html","../../../projects/charts-lib/src/lib/service/charts.ts","../../../projects/charts-lib/src/lib/components/line-chart/line-chart.ts","../../../projects/charts-lib/src/lib/components/line-chart/line-chart.html","../../../projects/charts-lib/src/lib/components/bar-chart/bar-chart.ts","../../../projects/charts-lib/src/lib/components/bar-chart/bar-chart.html","../../../projects/charts-lib/src/lib/components/pie-chart/pie-chart.ts","../../../projects/charts-lib/src/lib/components/pie-chart/pie-chart.html","../../../projects/charts-lib/src/lib/components/doughnut-chart/doughnut-chart.ts","../../../projects/charts-lib/src/lib/components/doughnut-chart/doughnut-chart.html","../../../projects/charts-lib/src/lib/components/stacked-area-chart/stacked-area-chart.ts","../../../projects/charts-lib/src/lib/components/stacked-area-chart/stacked-area-chart.html","../../../projects/charts-lib/src/lib/components/custom-chart/custom-chart.ts","../../../projects/charts-lib/src/lib/components/custom-chart/custom-chart.html","../../../projects/charts-lib/src/lib/components/sankey-chart/sankey-chart.ts","../../../projects/charts-lib/src/lib/components/sankey-chart/sankey-chart.html","../../../projects/charts-lib/src/lib/components/heatmap/heatmap.ts","../../../projects/charts-lib/src/lib/components/heatmap/heatmap.html","../../../projects/charts-lib/src/lib/components/heatmap-pivot/heatmap-pivot.ts","../../../projects/charts-lib/src/lib/components/heatmap-pivot/heatmap-pivot.html","../../../projects/charts-lib/src/lib/components/scatter-chart/scatter-chart.ts","../../../projects/charts-lib/src/lib/components/scatter-chart/scatter-chart.html","../../../projects/charts-lib/src/lib/components/status-timeline/status-timeline.ts","../../../projects/charts-lib/src/lib/components/status-timeline/status-timeline.html","../../../projects/charts-lib/src/lib/components/gauge-chart/gauge-chart.ts","../../../projects/charts-lib/src/lib/components/gauge-chart/gauge-chart.html","../../../projects/charts-lib/src/lib/components/gantt-chart/gantt-chart.ts","../../../projects/charts-lib/src/lib/components/gantt-chart/gantt-chart.html","../../../projects/charts-lib/src/cats-charts.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'lib-right-click-card',\n imports: [],\n templateUrl: './right-click-card.html',\n styleUrl: './right-click-card.scss',\n})\nexport class RightClickCard {\n @Input() cardPosition: any;\n @Input() cardOptions: any;\n @Output() contextMenuClick = new EventEmitter<any>();\n \n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n\n // this.closeMenu();\n }\n}\n","<div\n class=\"context-card\"\n [style.left.px]=\"cardPosition.x\"\n [style.top.px]=\"cardPosition.y\"\n (click)=\"$event.stopPropagation()\"\n>\n @for (item of cardOptions; track item.value) {\n <div class=\"context-item\" (click)=\"onMenuClick(item)\">\n @if (item.icon) {\n <img [src]=\"item.icon\" alt=\"icon\" />\n }\n\n <span>{{ item.label }}</span>\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\nimport { ECharts } from 'echarts/core';\nimport {\n ChartLegendConfig,\n ChartLegendIcon,\n ChartLegendItem,\n ChartLegendSelectionMode,\n} from './chart-legend.types';\n\ntype DispatchPayload = Record<string, unknown> & { type: string };\n\n@Injectable({ providedIn: 'root' })\nexport class ChartLegendAdapter {\n buildItems<\n TSeries extends {\n name?: string;\n type?: string;\n symbol?: string;\n icon?: ChartLegendIcon;\n legendIcon?: ChartLegendIcon;\n legendType?: 'default' | 'marker' | 'line' | 'lineMarker';\n itemStyle?: { color?: string };\n lineStyle?: { color?: string };\n area?: boolean;\n color?: string;\n },\n >(\n series: readonly TSeries[],\n colors: readonly string[],\n selected: Record<string, boolean>,\n config: ChartLegendConfig<TSeries>,\n ): ChartLegendItem[] {\n return series\n .map((seriesItem, index) => {\n const name = String(seriesItem.name ?? `Series ${index + 1}`);\n const color =\n seriesItem?.color ??\n seriesItem.itemStyle?.color ??\n seriesItem.lineStyle?.color ??\n colors[index % Math.max(colors.length, 1)] ??\n '#64748b';\n const icon = this.resolveIcon(seriesItem, index, name, config);\n const disabled = !!config.disabled || !!config.disabledNames?.includes(name);\n const item: ChartLegendItem = {\n id: `${index}:${name}`,\n name,\n label: name,\n color,\n icon,\n disabled,\n selected: selected[name] !== false,\n seriesIndex: index,\n raw: seriesItem,\n legendType: seriesItem?.legendType,\n };\n\n item.label = config.formatter ? config.formatter(name, item) : name;\n item.group = config.groupBy ? config.groupBy(item) : undefined;\n\n return item;\n })\n .filter((item) => !!item.name);\n }\n\n readSelected(chart: ECharts | null | undefined): Record<string, boolean> {\n const option = chart?.getOption?.() as {\n legend?: Array<{ selected?: Record<string, boolean> }>;\n };\n return { ...(option?.legend?.[0]?.selected ?? {}) };\n }\n\n applySelection(\n chart: ECharts,\n item: ChartLegendItem,\n mode: ChartLegendSelectionMode,\n items: readonly ChartLegendItem[],\n ): void {\n if (item.disabled) return;\n\n if (mode === 'exclusive') {\n for (const other of items) {\n if (other.name !== item.name) {\n chart.dispatchAction({ type: 'legendUnSelect', name: other.name } as DispatchPayload);\n }\n }\n chart.dispatchAction({ type: 'legendSelect', name: item.name } as DispatchPayload);\n return;\n }\n\n chart.dispatchAction({ type: 'legendToggleSelect', name: item.name } as DispatchPayload);\n }\n\n highlight(chart: ECharts, item: ChartLegendItem): void {\n if (item.disabled || item.seriesIndex === undefined) return;\n chart.dispatchAction({ type: 'highlight', seriesIndex: item.seriesIndex } as DispatchPayload);\n }\n\n downplay(chart: ECharts, item: ChartLegendItem): void {\n if (item.seriesIndex === undefined) return;\n chart.dispatchAction({ type: 'downplay', seriesIndex: item.seriesIndex } as DispatchPayload);\n }\n\n private resolveIcon<\n TSeries extends {\n type?: string;\n symbol?: string;\n icon?: ChartLegendIcon;\n legendIcon?: ChartLegendIcon;\n area?: boolean;\n },\n >(\n seriesItem: TSeries,\n index: number,\n name: string,\n config: ChartLegendConfig<TSeries>,\n ): ChartLegendIcon {\n if (typeof config.icon === 'function') return config.icon(seriesItem, index);\n if (config.icons?.[name]) return config.icons[name];\n if (config.icon) return config.icon;\n if (seriesItem.legendIcon) return seriesItem.legendIcon;\n if (seriesItem.icon) return seriesItem.icon;\n if (seriesItem.symbol && seriesItem.symbol !== 'none') return seriesItem.symbol;\n if (seriesItem.area) return 'area';\n\n switch (seriesItem.type) {\n case 'bar':\n return 'rect';\n case 'pie':\n case 'scatter':\n case 'effectScatter':\n return 'circle';\n default:\n return 'line';\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n PLATFORM_ID,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { ECharts } from 'echarts/core';\nimport { ChartLegendAdapter } from './chart-legend.adapter';\nimport {\n ChartLegendConfig,\n ChartLegendIcon,\n ChartLegendEvent,\n ChartLegendItem,\n ChartLegendSelectionMode,\n ChartLegendState,\n ChartLegendTemplateContext,\n} from './chart-legend.types';\n\ntype LegendSelectChanged = { selected?: unknown; name?: string };\ntype IconRenderType = 'none' | 'image' | 'path' | 'shape';\nconst SUPPORTED_ICON_SHAPES = new Set([\n 'line',\n 'emptyLine',\n 'area',\n 'circle',\n 'emptyCircle',\n 'rect',\n 'emptyRect',\n 'roundRect',\n 'emptyRoundRect',\n 'square',\n 'emptySquare',\n 'triangle',\n 'emptyTriangle',\n 'diamond',\n 'emptyDiamond',\n 'pin',\n 'emptyPin',\n 'arrow',\n 'emptyArrow',\n 'x',\n 'plus',\n 'thickLine',\n]);\n\nfunction getLegendSelected(event: unknown): Record<string, boolean> | undefined {\n if (typeof event !== 'object' || event === null || !('selected' in event)) return undefined;\n\n const selected = (event as LegendSelectChanged).selected;\n return typeof selected === 'object' && selected !== null\n ? (selected as Record<string, boolean>)\n : undefined;\n}\n\n@Component({\n selector: 'lib-chart-legend',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './chart-legend.html',\n styleUrl: './chart-legend.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartLegendComponent implements AfterViewInit, OnChanges, OnDestroy {\n @Input() chart: ECharts | null = null;\n @Input() series: readonly any[] = [];\n @Input() colors: readonly string[] = [];\n @Input() config: ChartLegendConfig<any> = {};\n @Input() itemTemplate?: TemplateRef<ChartLegendTemplateContext>;\n\n @Output() legendEvent = new EventEmitter<ChartLegendEvent>();\n @ViewChild('itemsScroller') private itemsScroller?: ElementRef<HTMLElement>;\n\n state: ChartLegendState = {\n items: [],\n selected: {},\n hoveredName: null,\n pageIndex: 0,\n };\n canScrollLegend = false;\n canScrollStart = false;\n canScrollEnd = false;\n\n private readonly isBrowser: boolean;\n private readonly onLegendSelectChanged = (event: unknown) => {\n this.syncFromChart(getLegendSelected(event));\n };\n private resizeObserver?: ResizeObserver;\n private scrollStateFrame = 0;\n\n constructor(\n private readonly adapter: ChartLegendAdapter,\n private readonly cdr: ChangeDetectorRef,\n @Inject(PLATFORM_ID) platformId: object,\n ) {\n this.isBrowser = isPlatformBrowser(platformId);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['chart']) this.rebindChart(changes['chart'].previousValue as ECharts | null);\n this.rebuildItems();\n this.scheduleScrollStateUpdate();\n }\n\n ngAfterViewInit(): void {\n if (!this.isBrowser) return;\n if (typeof ResizeObserver !== 'undefined' && this.itemsScroller?.nativeElement) {\n this.resizeObserver = new ResizeObserver(() => this.scheduleScrollStateUpdate());\n this.resizeObserver.observe(this.itemsScroller.nativeElement);\n }\n this.scheduleScrollStateUpdate();\n }\n\n ngOnDestroy(): void {\n this.detachChart(this.chart);\n this.resizeObserver?.disconnect();\n if (this.scrollStateFrame) cancelAnimationFrame(this.scrollStateFrame);\n }\n\n get visibleItems(): ChartLegendItem[] {\n const pageSize = this.config.pageSize;\n if (!this.config.showPagination || !pageSize || pageSize <= 0) return this.state.items;\n\n const start = this.state.pageIndex * pageSize;\n return this.state.items.slice(start, start + pageSize);\n }\n\n get groupedItems(): Array<{ group: string | null; items: ChartLegendItem[] }> {\n const groups = new Map<string | null, ChartLegendItem[]>();\n for (const item of this.visibleItems) {\n const key = item.group ?? null;\n groups.set(key, [...(groups.get(key) ?? []), item]);\n }\n return [...groups.entries()].map(([group, items]) => ({ group, items }));\n }\n\n get pageCount(): number {\n const pageSize = this.config.pageSize;\n if (!this.config.showPagination || !pageSize || pageSize <= 0) return 1;\n return Math.max(Math.ceil(this.state.items.length / pageSize), 1);\n }\n\n get isVerticalLegend(): boolean {\n return (\n this.config.layout === 'vertical' ||\n this.config.position === 'left' ||\n this.config.position === 'right'\n );\n }\n\n get isScrollableLegend(): boolean {\n return this.config.scrollable === true;\n }\n\n get isLimitedWrapLegend(): boolean {\n return this.config.scrollable === false && !this.hasConfiguredMaxWidth;\n }\n\n get usesInternalLegendScroll(): boolean {\n return this.isScrollableLegend || this.isLimitedWrapLegend;\n }\n\n get scrollsVertically(): boolean {\n return this.isLimitedWrapLegend ? !this.isVerticalLegend : this.isVerticalLegend;\n }\n\n get isLegendAlignedCenter(): boolean {\n return (\n this.config.align === 'center' || (this.isVerticalLegend && this.config.align === 'middle')\n );\n }\n\n get isLegendAlignedEnd(): boolean {\n return (\n this.config.align === 'end' ||\n (!this.isVerticalLegend && this.config.align === 'right') ||\n (this.isVerticalLegend && this.config.align === 'bottom')\n );\n }\n\n get scrollStartAriaLabel(): string {\n return this.scrollsVertically ? 'Scroll legend up' : 'Scroll legend left';\n }\n\n get scrollEndAriaLabel(): string {\n return this.scrollsVertically ? 'Scroll legend down' : 'Scroll legend right';\n }\n\n trackByItem(_: number, item: ChartLegendItem): string {\n return item.id;\n }\n\n trackByGroup(_: number, group: { group: string | null }): string {\n return group.group ?? '__default__';\n }\n\n templateFor(item: ChartLegendItem): TemplateRef<ChartLegendTemplateContext> | null {\n return this.itemTemplate ?? this.config.itemTemplate ?? null;\n }\n\n templateContext(item: ChartLegendItem): ChartLegendTemplateContext {\n return {\n $implicit: item,\n item,\n selected: item.selected,\n disabled: item.disabled,\n };\n }\n\n private legendType(item: ChartLegendItem): 'default' | 'marker' | 'line' | 'lineMarker' {\n return item.legendType ?? this.config.legendType ?? 'default';\n }\n\n iconForRender(item: ChartLegendItem): string {\n return this.legendType(item) === 'line' ? 'line' : item.icon;\n }\n\n iconRenderType(item: ChartLegendItem): IconRenderType {\n const icon = this.iconForRender(item).trim();\n if (!icon || icon === 'none') return 'none';\n if (icon.startsWith('image://')) return 'image';\n if (icon.startsWith('path://') || /^[Mm]\\s*-?\\d/.test(icon)) return 'path';\n return 'shape';\n }\n\n iconImageSrc(item: ChartLegendItem): string {\n return item.icon.replace(/^image:\\/\\//, '');\n }\n\n iconPathData(item: ChartLegendItem): string {\n return item.icon.replace(/^path:\\/\\//, '');\n }\n\n iconShapeClass(icon: ChartLegendIcon): string {\n const shape = SUPPORTED_ICON_SHAPES.has(icon) ? icon : 'rect';\n return `chart-legend__icon--${shape}`;\n }\n\n isLineMarker(item: ChartLegendItem): boolean {\n return this.legendType(item) === 'lineMarker';\n }\n\n isLineOnly(item: ChartLegendItem): boolean {\n return this.legendType(item) === 'line';\n }\n\n toggle(item: ChartLegendItem, event?: Event): void {\n event?.preventDefault();\n if (!this.chart || item.disabled) return;\n\n if (this.config?.preventLegendClickDefault) {\n this?.emit?.('toggle', item);\n return;\n }\n\n const mode = this.selectionMode();\n const wasSelected = item.selected;\n this.adapter.applySelection(this.chart, item, mode, this.state.items);\n this.syncFromChart();\n // this.emit(mode === 'exclusive' ? 'exclusive' : wasSelected ? 'unselect' : 'select', item);\n }\n\n hover(item: ChartLegendItem): void {\n if (!this.chart || item.disabled || this.config.hoverLink === false) return;\n this.state = { ...this.state, hoveredName: item.name };\n this.adapter.highlight(this.chart, item);\n // this.emit('highlight', item);\n this.cdr.markForCheck();\n }\n\n leave(item: ChartLegendItem): void {\n if (!this.chart || this.config.hoverLink === false) return;\n this.state = { ...this.state, hoveredName: null };\n this.adapter.downplay(this.chart, item);\n // this.emit('downplay', item);\n this.cdr.markForCheck();\n }\n\n page(step: number): void {\n const next = Math.min(Math.max(this.state.pageIndex + step, 0), this.pageCount - 1);\n if (next === this.state.pageIndex) return;\n this.state = { ...this.state, pageIndex: next };\n this.emit('page');\n this.scheduleScrollStateUpdate();\n }\n\n scrollLegend(direction: -1 | 1, event?: Event): void {\n event?.preventDefault();\n if (!this.usesInternalLegendScroll) return;\n const element = this.itemsScroller?.nativeElement;\n if (!element) return;\n\n const distance = this.scrollsVertically\n ? Math.max(element.clientHeight * 0.8, 120)\n : Math.max(element.clientWidth * 0.8, 120);\n\n element.scrollBy({\n left: this.scrollsVertically ? 0 : direction * distance,\n top: this.scrollsVertically ? direction * distance : 0,\n behavior: 'smooth',\n });\n this.scheduleScrollStateUpdate();\n }\n\n updateScrollState(): void {\n this.scheduleScrollStateUpdate();\n }\n\n itemTitle(item: ChartLegendItem): string | null {\n return this.config.tooltipFormatter ? this.config.tooltipFormatter(item) : item.label;\n }\n\n private rebuildItems(selectedFromChart?: Record<string, boolean>): void {\n const selected = selectedFromChart ?? this.adapter.readSelected(this.chart);\n const items = this.adapter.buildItems(this.series, this.colors, selected, this.config);\n const maxPage = Math.max(\n Math.ceil(items.length / (this.config.pageSize || items.length || 1)) - 1,\n 0,\n );\n this.state = {\n ...this.state,\n selected,\n items,\n pageIndex: Math.min(this.state.pageIndex, maxPage),\n };\n this.cdr.markForCheck();\n this.scheduleScrollStateUpdate();\n }\n\n private syncFromChart(selected?: Record<string, boolean>): void {\n this.rebuildItems(selected ?? this.adapter.readSelected(this.chart));\n this.emit('sync');\n }\n\n private rebindChart(previous: ECharts | null): void {\n this.detachChart(previous);\n if (!this.isBrowser || !this.chart) return;\n this.chart.on('legendselectchanged', this.onLegendSelectChanged);\n this.chart.on('legendselected', this.onLegendSelectChanged);\n this.chart.on('legendunselected', this.onLegendSelectChanged);\n }\n\n private detachChart(chart: ECharts | null | undefined): void {\n if (!chart) return;\n chart.off('legendselectchanged', this.onLegendSelectChanged);\n chart.off('legendselected', this.onLegendSelectChanged);\n chart.off('legendunselected', this.onLegendSelectChanged);\n }\n\n private selectionMode(): ChartLegendSelectionMode {\n return this.config.selectionMode ?? 'multiple';\n }\n\n private emit(type: ChartLegendEvent['type'], item?: ChartLegendItem): void {\n this.legendEvent.emit({ type, item, state: this.state });\n }\n\n private scheduleScrollStateUpdate(): void {\n if (!this.isBrowser || this.scrollStateFrame) return;\n if (!this.usesInternalLegendScroll) {\n this.setScrollState(false, false, false);\n return;\n }\n this.scrollStateFrame = requestAnimationFrame(() => {\n this.scrollStateFrame = 0;\n this.updateScrollStateNow();\n });\n }\n\n private updateScrollStateNow(): void {\n const element = this.itemsScroller?.nativeElement;\n if (!element) {\n this.setScrollState(false, false, false);\n return;\n }\n\n const hasOverflow = this.scrollsVertically\n ? element.scrollHeight > element.clientHeight + 1\n : element.scrollWidth > element.clientWidth + 1;\n const scrollPosition = this.scrollsVertically ? element.scrollTop : element.scrollLeft;\n const viewportSize = this.scrollsVertically ? element.clientHeight : element.clientWidth;\n const scrollSize = this.scrollsVertically ? element.scrollHeight : element.scrollWidth;\n\n this.setScrollState(\n hasOverflow,\n hasOverflow && scrollPosition > 1,\n hasOverflow && scrollPosition + viewportSize < scrollSize - 1,\n );\n }\n\n private setScrollState(\n canScrollLegend: boolean,\n canScrollStart: boolean,\n canScrollEnd: boolean,\n ): void {\n if (\n this.canScrollLegend === canScrollLegend &&\n this.canScrollStart === canScrollStart &&\n this.canScrollEnd === canScrollEnd\n ) {\n return;\n }\n this.canScrollLegend = canScrollLegend;\n this.canScrollStart = canScrollStart;\n this.canScrollEnd = canScrollEnd;\n this.cdr.markForCheck();\n }\n\n private get hasConfiguredMaxWidth(): boolean {\n return typeof this.config.maxWidth === 'string' && this.config.maxWidth.trim().length > 0;\n }\n}\n","@if (config.enabled !== false) {\n <nav\n class=\"chart-legend\"\n [class.chart-legend--vertical]=\"isVerticalLegend\"\n [class.chart-legend--scrollable]=\"isScrollableLegend\"\n [class.chart-legend--wrap]=\"!isScrollableLegend\"\n [class.chart-legend--limited-wrap]=\"isLimitedWrapLegend\"\n [ngClass]=\"config.className || null\"\n [style.max-height]=\"config.maxHeight || null\"\n [style.padding]=\"config.padding || '1rem'\"\n [attr.aria-label]=\"config.ariaLabel || 'Chart legend'\"\n >\n <div class=\"chart-legend__viewport\">\n @if (config.title) {\n <p\n class=\"chart-legend-title\"\n [class.chart-legend-title--uppercase]=\"config.legendTitleTransform === 'uppercase'\"\n [class.chart-legend-title--lowercase]=\"config.legendTitleTransform === 'lowercase'\"\n [class.chart-legend-title--capitalize]=\"config.legendTitleTransform === 'capitalize'\"\n [style.--legend-title-color]=\"config.legendTitleTextColor || null\"\n [style.--legend-title-font-size]=\"\n config.legendTitleFontSize ? config.legendTitleFontSize + 'px' : null\n \"\n [style.--legend-title-font-style]=\"config.legendTitleFontStyle || null\"\n [style.--legend-title-font-weight]=\"config.legendTitleFontWeight || null\"\n [style.--legend-title-text-decoration]=\"config.legendTitleTextDecoration || null\"\n [style.--legend-title-font-family]=\"config.legendTitleFontFamily || 'initial'\"\n >\n {{ config.title }}\n </p>\n }\n @if (usesInternalLegendScroll && canScrollLegend) {\n <button\n type=\"button\"\n class=\"chart-legend__scroll-button chart-legend__scroll-button--start\"\n [disabled]=\"!canScrollStart\"\n (click)=\"scrollLegend(-1, $event)\"\n [attr.aria-label]=\"scrollStartAriaLabel\"\n >\n <img\n src=\"images/legend_left.svg\"\n [class.chart-legend__scroll-icon--up]=\"scrollsVertically\"\n alt=\"left\"\n />\n </button>\n }\n\n <div #itemsScroller class=\"chart-legend__scroller\" (scroll)=\"updateScrollState()\">\n <div\n class=\"chart-legend__items\"\n role=\"list\"\n [class.chart-legend__items--center]=\"\n isLegendAlignedCenter && (!usesInternalLegendScroll || !canScrollLegend)\n \"\n [class.chart-legend__items--end]=\"isLegendAlignedEnd\"\n [style.--legend-text-color]=\"config.legendTextColor || null\"\n [style.--legend-font-size]=\"config.legendFontSize ? config.legendFontSize + 'px' : null\"\n [style.--legend-font-style]=\"config.legendFontStyle || null\"\n [style.--legend-font-weight]=\"config.legendFontWeight || null\"\n [style.--legend-text-decoration]=\"config.legendTextDecoration || null\"\n [style.--legend-font-family]=\"config.legendFontFamily || 'initial'\"\n >\n @for (group of groupedItems; track trackByGroup($index, group)) {\n @if (group.group) {\n <div class=\"chart-legend__group-label\">{{ group.group }}</div>\n }\n\n @for (item of group.items; track trackByItem($index, item)) {\n <button\n type=\"button\"\n class=\"chart-legend__item\"\n role=\"switch\"\n [class.chart-legend__item--off]=\"!item.selected\"\n [class.chart-legend__item--disabled]=\"item.disabled\"\n [class.chart-legend__item--hovered]=\"state.hoveredName === item.name\"\n [disabled]=\"item.disabled\"\n [attr.aria-checked]=\"item.selected\"\n [attr.aria-label]=\"item.label\"\n [style.--legend-item-color]=\"item.color\"\n [title]=\"itemTitle(item)\"\n (click)=\"toggle(item, $event)\"\n (keydown.enter)=\"toggle(item, $event)\"\n (keydown.space)=\"toggle(item, $event)\"\n (mouseenter)=\"hover(item)\"\n (focus)=\"hover(item)\"\n (mouseleave)=\"leave(item)\"\n (blur)=\"leave(item)\"\n >\n @if (templateFor(item); as template) {\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"templateContext(item)\"\n ></ng-container>\n } @else {\n @switch (iconRenderType(item)) {\n @case ('image') {\n @if (isLineMarker(item)) {\n <span\n class=\"chart-legend__icon chart-legend__icon--line-marker\"\n aria-hidden=\"true\"\n >\n <span class=\"chart-legend__icon-line\"></span>\n <img class=\"chart-legend__icon-image\" [src]=\"iconImageSrc(item)\" alt=\"\" />\n <span class=\"chart-legend__icon-line\"></span>\n </span>\n } @else {\n <img class=\"chart-legend__icon-image\" [src]=\"iconImageSrc(item)\" alt=\"\" />\n }\n }\n @case ('path') {\n @if (isLineMarker(item)) {\n <span\n class=\"chart-legend__icon chart-legend__icon--line-marker\"\n aria-hidden=\"true\"\n >\n <span class=\"chart-legend__icon-line\"></span>\n <svg\n class=\"chart-legend__icon-path\"\n viewBox=\"-512 -512 1024 1024\"\n aria-hidden=\"true\"\n >\n <path [attr.d]=\"iconPathData(item)\"></path>\n </svg>\n <span class=\"chart-legend__icon-line\"></span>\n </span>\n } @else {\n <svg\n class=\"chart-legend__icon-path\"\n viewBox=\"-512 -512 1024 1024\"\n aria-hidden=\"true\"\n >\n <path [attr.d]=\"iconPathData(item)\"></path>\n </svg>\n }\n }\n @case ('shape') {\n @if (isLineMarker(item)) {\n <span\n class=\"chart-legend__icon chart-legend__icon--line-marker\"\n aria-hidden=\"true\"\n >\n <span class=\"chart-legend__icon-line\"></span>\n <span\n class=\"chart-legend__icon chart-legend__icon--marker\"\n [ngClass]=\"iconShapeClass(item.icon)\"\n ></span>\n <span class=\"chart-legend__icon-line\"></span>\n </span>\n } @else {\n <span\n class=\"chart-legend__icon\"\n [ngClass]=\"iconShapeClass(iconForRender(item))\"\n aria-hidden=\"true\"\n ></span>\n }\n }\n }\n <span class=\"chart-legend__label\">\n {{ item.label }}@if (this.config.showValue && this.config.valueFormatter) {\n :\n }\n </span>\n @if (this.config.showValue && this.config.valueFormatter) {\n <span class=\"chart-legend__value\">{{ this.config.valueFormatter(item) }}</span>\n }\n @if (this.config.showActionArrow) {\n @if (this.config.actionArrowTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"this.config.actionArrowTemplate\"\n [ngTemplateOutletContext]=\"templateContext(item)\"\n ></ng-container>\n } @else {\n <svg\n class=\"chart-legend__action-arrow\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n }\n }\n }\n </button>\n }\n }\n </div>\n </div>\n\n @if (usesInternalLegendScroll && canScrollLegend) {\n <button\n type=\"button\"\n class=\"chart-legend__scroll-button chart-legend__scroll-button--end\"\n [disabled]=\"!canScrollEnd\"\n (click)=\"scrollLegend(1, $event)\"\n [attr.aria-label]=\"scrollEndAriaLabel\"\n >\n <img\n src=\"images/legend_right.svg\"\n [class.chart-legend__scroll-icon--down]=\"scrollsVertically\"\n alt=\"right\"\n />\n </button>\n }\n </div>\n\n @if (config.showPagination && pageCount > 1) {\n <div class=\"chart-legend__pagination\" aria-label=\"Legend pages\">\n <button\n type=\"button\"\n class=\"chart-legend__page\"\n [disabled]=\"state.pageIndex === 0\"\n (click)=\"page(-1)\"\n aria-label=\"Previous legend page\"\n >\n <\n </button>\n <span class=\"chart-legend__page-count\">{{ state.pageIndex + 1 }} / {{ pageCount }}</span>\n <button\n type=\"button\"\n class=\"chart-legend__page\"\n [disabled]=\"state.pageIndex + 1 === pageCount\"\n (click)=\"page(1)\"\n aria-label=\"Next legend page\"\n >\n >\n </button>\n </div>\n }\n </nav>\n}\n","import { Injectable } from '@angular/core';\nimport * as echarts from 'echarts/core';\nimport {\n BarChartConfig,\n DoughnutChartConfig,\n GanttChartConfig,\n HeatmapChartConfig,\n HeatmapPivotAggregation,\n LineChartConfig,\n PieChartConfig,\n SankeyChartConfig,\n SankeyLink,\n SankeyNode,\n} from '../modal/charts-modal';\n@Injectable({\n providedIn: 'root',\n})\nexport class Charts {\n legendSelected: Record<string, boolean> = {};\n defaultColors: string[] = ['#22c55e', '#3b82f6', '#ef4444', '#6b7280'];\n defaultLegendColors: string[] = ['#3b82f6', '#FFC107', '#22c55e', '#ef4444'];\n heatmapPivotColors: string[] = ['#dbeafe', '#93c5fd', '#3b82f6', '#1d4ed8', '#1e3a8a'];\n\n // buildGraphicLegend(total: number | null, config: any, chartInstance: any, chartType?: string) {\n // const pillHeight = 28;\n // const spacing = 14;\n // const indicatorWidth = 12;\n // const padding = 8;\n // const font = '14px sans-serif';\n\n // const containerWidth = chartInstance?.getWidth?.() ?? 800;\n // const maxWidth = containerWidth * (config?.legendContainerWidth ?? 0.7);\n\n // const selectedMap = chartInstance?.getOption()?.legend?.[0]?.selected || {};\n // let colorIndex = 0;\n // const pills = (\n // chartType === 'line' || chartType === 'bar' || chartType === 'scatter'\n // ? config?.series\n // : config?.data\n // )?.map((item: any) => {\n // const hasCustomColors = Array.isArray(config?.colors) && config?.colors?.length > 0;\n // const color =\n // total === 0\n // ? '#E6E7E8'\n // : (item?.itemStyle?.color ??\n // (hasCustomColors\n // ? config?.colors[colorIndex % config?.colors?.length]\n // : this.defaultColors[colorIndex % this.defaultColors.length]));\n // if (\n // !item?.itemStyle?.color ||\n // (item?.itemStyle?.color && Object.keys(selectedMap).length && !selectedMap[item.name])\n // ) {\n // colorIndex += 1;\n // }\n // const nameRect = echarts.format.getTextRect(item.name, font);\n // const valueRect =\n // chartType === 'line' || chartType === 'bar' || chartType === 'scatter'\n // ? { width: 0 }\n // : echarts.format.getTextRect(\n // String(config?.valueFormatter ? config.valueFormatter(item.value) : item.value),\n // font,\n // );\n\n // const pillWidth =\n // padding +\n // indicatorWidth +\n // 6 +\n // nameRect.width +\n // (chartType === 'line' || chartType === 'bar' || chartType === 'scatter'\n // ? 0\n // : 8 + valueRect.width) +\n // padding;\n\n // return { item, color, pillWidth };\n // });\n\n // // 🔹 Build rows dynamically\n // const rows: any[] = [];\n // let currentRow: any[] = [];\n // let rowWidth = 0;\n\n // pills?.forEach((pill: any) => {\n // if (rowWidth + pill.pillWidth > maxWidth && currentRow.length) {\n // rows.push({ pills: currentRow, width: rowWidth });\n // currentRow = [];\n // rowWidth = 0;\n // }\n\n // currentRow.push(pill);\n // rowWidth += pill.pillWidth + spacing;\n // });\n\n // if (currentRow.length) rows.push({ pills: currentRow, width: rowWidth });\n\n // // 🔹 Build graphic children\n // let yOffset = 0;\n // const children: any[] = [];\n\n // rows?.forEach((row) => {\n // let xOffset =\n // config?.legendAlign === 'center' && config?.legendDirection !== 'vertical'\n // ? (maxWidth - row.width) / 2\n // : maxWidth;\n\n // row?.pills?.forEach((pill: any) => {\n // const isSelected = selectedMap[pill.item.name] !== false;\n // const isDisabled = pill.item.value === 0;\n // children.push({\n // type: 'group',\n // left: xOffset,\n // top: yOffset,\n // width: pill.pillWidth,\n // height: pillHeight,\n // cursor: isDisabled ? 'default' : 'pointer',\n\n // onclick: () => {\n // if (isDisabled) return;\n // chartInstance.dispatchAction({\n // type: 'legendToggleSelect',\n // name: pill.item.name,\n // });\n\n // chartInstance.setOption({\n // graphic: this.buildGraphicLegend(total, config, chartInstance, chartType),\n // });\n // },\n\n // children: [\n // {\n // type: 'rect',\n // shape: {\n // width: pill.pillWidth,\n // height: pillHeight,\n // r: 4,\n // },\n // style: {\n // fill:\n // isSelected && !isDisabled\n // ? this.hexToRgba(pill.color, total === 0 ? 0.3 : 0.03)\n // : '#F2F2F7',\n // stroke: isSelected && !isDisabled ? this.hexToRgba(pill.color, 0.3) : '#D1D1D6',\n // lineWidth: 1,\n // },\n // },\n\n // {\n // type: 'rect',\n // shape: { width: 12, height: config?.legendIndicatorHeight ?? 12, r: 2 },\n // left: padding,\n // top: (pillHeight - (config?.legendIndicatorHeight ?? 12)) / 2,\n // style: {\n // fill: isSelected && !isDisabled ? pill.color : '#C7C7CC',\n // },\n // },\n\n // {\n // type: 'text',\n // left: padding + indicatorWidth + 6,\n // top: (pillHeight - indicatorWidth) / 2,\n // style: {\n // text: `${pill.item.name}${chartType === 'line' || chartType === 'bar' || chartType === 'scatter' ? '' : ':'}`,\n // fontSize: 14,\n // fontWeight: 400,\n // fill: isSelected && !isDisabled && total !== 0 ? '#1C1C1E' : '#81858A',\n // textVerticalAlign: 'middle',\n // },\n // },\n\n // ...(chartType === 'line' || chartType === 'bar' || chartType === 'scatter'\n // ? []\n // : [\n // {\n // type: 'text',\n // right: padding,\n // top: (pillHeight - indicatorWidth) / 2,\n // style: {\n // text:\n // total === 0\n // ? '-'\n // : config?.valueFormatter\n // ? config.valueFormatter(pill.item.value)\n // : pill.item.value,\n // fontSize: 14,\n // fontWeight: 500,\n // fill: isSelected && !isDisabled ? '#1C1C1E' : '#81858A',\n // textAlign: 'right',\n // textVerticalAlign: 'middle',\n // },\n // },\n // ]),\n // ],\n // });\n\n // xOffset += pill.pillWidth + spacing;\n // });\n\n // yOffset += pillHeight + spacing;\n // });\n\n // // 🔹 Position logic\n // const positionConfig: any = {};\n // switch (config?.legendPosition) {\n // case 'top':\n // positionConfig.top = config?.legendEdgeGap?.top ?? 20;\n // break;\n // case 'bottom':\n // positionConfig.bottom = config?.legendEdgeGap?.bottom ?? 20;\n // break;\n // case 'left':\n // positionConfig.left = config?.legendEdgeGap?.left ?? 20;\n // break;\n // case 'right':\n // positionConfig.right = config?.legendEdgeGap?.right ?? 20;\n // break;\n // }\n\n // // ALIGNMENT (Cross-Axis)\n // if (config?.legendPosition === 'top' || config?.legendPosition === 'bottom') {\n // // Horizontal area → align horizontally\n // if (config?.legendAlign === 'center') {\n // positionConfig.left = 'center';\n // } else if (config?.legendAlign === 'right') {\n // positionConfig.right = config?.legendEdgeGap?.right ?? 20;\n // } else {\n // positionConfig.left = config?.legendEdgeGap?.left ?? 20;\n // }\n // } else {\n // // Vertical area → align vertically\n // if (config?.legendAlign === 'center') {\n // positionConfig.top = 'middle';\n // } else if (config?.legendAlign === 'right') {\n // positionConfig.bottom = config?.legendEdgeGap?.bottom ?? 20;\n // } else {\n // positionConfig.top = config?.legendEdgeGap?.top ?? 20;\n // }\n // }\n // return [\n // {\n // id: 'customLegend',\n // type: 'group',\n // ...positionConfig,\n // width: maxWidth,\n // height: yOffset,\n // children,\n // },\n // ];\n // }\n buildGraphicLegend(total: number | null, config: any, chartInstance: any, chartType?: string) {\n const pillHeight = 28;\n const spacing = 14;\n const indicatorWidth = 12;\n const padding = 8;\n const font = '14px sans-serif';\n\n // =========================================\n // CONTAINER + AVAILABLE WIDTH\n // =========================================\n\n const containerWidth = chartInstance?.getWidth?.() ?? 800;\n\n const leftGap = config?.legendEdgeGap?.left ?? 0;\n const rightGap = config?.legendEdgeGap?.right ?? 0;\n\n // actual usable width after gaps\n const usableWidth = containerWidth - leftGap - rightGap;\n\n const maxWidth = usableWidth * (config?.legendContainerWidth ?? 0.7);\n\n // =========================================\n // SELECTED LEGEND MAP\n // =========================================\n\n const selectedMap = chartInstance?.getOption()?.legend?.[0]?.selected || {};\n\n let colorIndex = 0;\n\n // =========================================\n // BUILD PILLS\n // =========================================\n\n const pills = (\n chartType === 'line' || chartType === 'bar' || chartType === 'scatter'\n ? config?.series\n : config?.data\n )?.map((item: any) => {\n const hasCustomColors = Array.isArray(config?.colors) && config?.colors?.length > 0;\n\n const color =\n total === 0\n ? '#E6E7E8'\n : (item?.itemStyle?.color ??\n (hasCustomColors\n ? config?.colors[colorIndex % config?.colors?.length]\n : this.defaultColors[colorIndex % this.defaultColors.length]));\n\n if (\n !item?.itemStyle?.color ||\n (item?.itemStyle?.color && Object.keys(selectedMap).length && !selectedMap[item.name])\n ) {\n colorIndex += 1;\n }\n\n const nameRect = echarts.format.getTextRect(item.name, font);\n\n const valueRect =\n chartType === 'line' || chartType === 'bar' || chartType === 'scatter'\n ? { width: 0 }\n : echarts.format.getTextRect(\n String(config?.valueFormatter ? config.valueFormatter(item.value) : item.value),\n font,\n );\n\n const pillWidth =\n padding +\n indicatorWidth +\n 6 +\n nameRect.width +\n (chartType === 'line' || chartType === 'bar' || chartType === 'scatter'\n ? 0\n : 8 + valueRect.width) +\n padding;\n\n return {\n item,\n color,\n pillWidth,\n };\n });\n\n // =========================================\n // BUILD ROWS PERFECTLY\n // =========================================\n\n const rows: any[] = [];\n\n let currentRow: any[] = [];\n let rowWidth = 0;\n\n pills?.forEach((pill: any) => {\n const additionalWidth = currentRow.length > 0 ? spacing : 0;\n\n // break row if width exceeded\n if (currentRow.length && rowWidth + additionalWidth + pill.pillWidth > maxWidth) {\n rows.push({\n pills: currentRow,\n width: rowWidth,\n });\n\n currentRow = [pill];\n rowWidth = pill.pillWidth;\n } else {\n rowWidth += additionalWidth + pill.pillWidth;\n currentRow.push(pill);\n }\n });\n\n if (currentRow.length) {\n rows.push({\n pills: currentRow,\n width: rowWidth,\n });\n }\n\n // =========================================\n // BUILD GRAPHIC CHILDREN\n // =========================================\n\n let yOffset = 0;\n\n const children: any[] = [];\n\n rows?.forEach((row) => {\n let xOffset = 0;\n\n // =====================================\n // HORIZONTAL ALIGNMENTS\n // =====================================\n\n if (config?.legendDirection !== 'vertical') {\n if (config?.legendAlign === 'center') {\n xOffset = Math.max((maxWidth - row.width) / 2, 0);\n } else if (config?.legendAlign === 'right') {\n xOffset = Math.max(maxWidth - row.width, 0);\n }\n }\n\n row?.pills?.forEach((pill: any) => {\n const isSelected = selectedMap[pill.item.name] !== false;\n\n const isDisabled = pill.item.value === 0;\n\n children.push({\n type: 'group',\n\n left: xOffset,\n top: yOffset,\n\n width: pill.pillWidth,\n height: pillHeight,\n\n cursor: isDisabled ? 'default' : 'pointer',\n\n onclick: () => {\n if (isDisabled) return;\n\n chartInstance.dispatchAction({\n type: 'legendToggleSelect',\n name: pill.item.name,\n });\n\n chartInstance.setOption({\n graphic: this.buildGraphicLegend(total, config, chartInstance, chartType),\n });\n },\n\n children: [\n // =================================\n // BACKGROUND\n // =================================\n\n {\n type: 'rect',\n\n shape: {\n width: pill.pillWidth,\n height: pillHeight,\n r: 4,\n },\n\n style: {\n fill:\n isSelected && !isDisabled\n ? this.hexToRgba(pill.color, total === 0 ? 0.3 : 0.03)\n : '#F2F2F7',\n\n stroke: isSelected && !isDisabled ? this.hexToRgba(pill.color, 0.3) : '#D1D1D6',\n\n lineWidth: 1,\n },\n },\n\n // =================================\n // INDICATOR\n // =================================\n\n {\n type: 'rect',\n\n shape: {\n width: 12,\n height: config?.legendIndicatorHeight ?? 12,\n r: 2,\n },\n\n left: padding,\n\n top: (pillHeight - (config?.legendIndicatorHeight ?? 12)) / 2,\n\n style: {\n fill: isSelected && !isDisabled ? pill.color : '#C7C7CC',\n },\n },\n\n // =================================\n // LABEL\n // =================================\n\n {\n type: 'text',\n\n left: padding + indicatorWidth + 6,\n\n top: (pillHeight - indicatorWidth) / 2,\n\n style: {\n text: `${pill.item.name}${\n chartType === 'line' || chartType === 'bar' || chartType === 'scatter' ? '' : ':'\n }`,\n\n fontSize: 14,\n fontWeight: 400,\n\n fill: isSelected && !isDisabled && total !== 0 ? '#1C1C1E' : '#81858A',\n\n textVerticalAlign: 'middle',\n },\n },\n\n // =================================\n // VALUE\n // =================================\n\n ...(chartType === 'line' || chartType === 'bar' || chartType === 'scatter'\n ? []\n : [\n {\n type: 'text',\n\n right: padding,\n\n top: (pillHeight - indicatorWidth) / 2,\n\n style: {\n text:\n total === 0\n ? '-'\n : config?.valueFormatter\n ? config.valueFormatter(pill.item.value)\n : pill.item.value,\n\n fontSize: 14,\n fontWeight: 500,\n\n fill: isSelected && !isDisabled ? '#1C1C1E' : '#81858A',\n\n textAlign: 'right',\n textVerticalAlign: 'middle',\n },\n },\n ]),\n ],\n });\n\n xOffset += pill.pillWidth + spacing;\n });\n\n yOffset += pillHeight + spacing;\n });\n\n // =========================================\n // POSITION CONFIG\n // =========================================\n\n const positionConfig: any = {};\n\n switch (config?.legendPosition) {\n case 'top':\n positionConfig.top = config?.legendEdgeGap?.top ?? 20;\n break;\n\n case 'bottom':\n positionConfig.bottom = config?.legendEdgeGap?.bottom ?? 20;\n break;\n\n case 'left':\n positionConfig.left = config?.legendEdgeGap?.left ?? 20;\n break;\n\n case 'right':\n positionConfig.right = config?.legendEdgeGap?.right ?? 20;\n break;\n }\n\n // =========================================\n // CROSS AXIS ALIGNMENT\n // =========================================\n\n if (config?.legendPosition === 'top' || config?.legendPosition === 'bottom') {\n // horizontal placement\n if (config?.legendAlign === 'center') {\n positionConfig.left = 'center';\n } else if (config?.legendAlign === 'right') {\n positionConfig.right = config?.legendEdgeGap?.right ?? 20;\n } else {\n positionConfig.left = config?.legendEdgeGap?.left ?? 20;\n }\n } else {\n // vertical placement\n if (config?.legendAlign === 'center') {\n positionConfig.top = 'middle';\n } else if (config?.legendAlign === 'right') {\n positionConfig.bottom = config?.legendEdgeGap?.bottom ?? 20;\n } else {\n positionConfig.top = config?.legendEdgeGap?.top ?? 20;\n }\n }\n\n // =========================================\n // RETURN GRAPHIC\n // =========================================\n\n return [\n {\n id: 'customLegend',\n\n type: 'group',\n\n ...positionConfig,\n\n width: maxWidth,\n height: yOffset,\n\n children,\n },\n ];\n }\n buildCenterGraphic(config: any, total: number) {\n if (!config?.centerLabel?.show) return [];\n\n const centerConfig = config.centerLabel;\n const titleFont = centerConfig.fontSizeTitle ?? 14;\n const valueFont = centerConfig.fontSizeValue ?? 22;\n\n // Use external top if provided, default to 'center'\n // config.bottom\n const groupTop = centerConfig.top ?? 'center';\n const groupLeft = centerConfig.left ?? 'center';\n\n // Offsets relative to groupTop\n const titleOffset = -valueFont / 2;\n const valueOffset = titleFont / 2;\n\n return [\n {\n id: 'centerLabel',\n type: 'group',\n left: groupLeft,\n top: groupTop,\n silent: true,\n children: [\n ...(centerConfig.title\n ? [\n {\n type: 'text',\n style: {\n text: centerConfig.title ?? '',\n fontSize: titleFont,\n fill: centerConfig.titleColor ?? '#666',\n textAlign: 'center',\n textBaseline: 'middle',\n },\n top: titleOffset, // relative to groupTop\n },\n ]\n : []),\n {\n type: 'text',\n style: {\n text:\n centerConfig.type === 'custom' && centerConfig.formatter\n ? centerConfig.formatter(total, config.data)\n : (centerConfig.value ?? ''),\n fontSize: valueFont,\n fontWeight: 'bold',\n fill: centerConfig.valueColor ?? '#000',\n textAlign: 'center',\n textBaseline: 'middle',\n },\n top: valueOffset + (centerConfig?.valueTopSpace || 0), // relative to groupTop\n },\n ],\n },\n ];\n }\n\n hexToRgba(hex: string, alpha: number) {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n\n formatPercentage(value: string | number | null | undefined) {\n if (value === null || value === undefined || value === '') return 'NA';\n\n // already percentage string\n if (typeof value === 'string' && value.includes('%')) return value;\n\n // numeric/string number\n const num = Number(value);\n if (isNaN(num)) return 'NA';\n\n return `${num}%`;\n }\n\n getNumericValue(value: string | number | null | undefined): number | null {\n if (value === null || value === undefined || value === '') return null;\n\n // remove %\n const cleaned = typeof value === 'string' ? value.replace('%', '').trim() : value;\n const num = Number(cleaned);\n\n return isNaN(num) ? null : num;\n }\n\n getStatusColor(value: string | number | null | undefined) {\n const num = this.getNumericValue(value);\n if (num === null) return '#C0C2C5'; // grey\n if (num < 30) return '#EF4343'; // red\n if (num <= 60) return '#FFC107'; // yellow\n return '#29A277'; // green\n }\n\n pieTooltipFormatter(params: any, config: DoughnutChartConfig | PieChartConfig) {\n const color = params.color;\n const name = params.name;\n const value = params.value;\n const percent = params.percent;\n\n let extraTooltipData: any[] = [];\n if (typeof params?.data === 'object') {\n extraTooltipData = Object.entries(params.data?.[config?.extraTooltipKey || 'tooltip'] || {});\n }\n\n let extraTooltipDataTemplate = '';\n if (extraTooltipData.length) {\n extraTooltipData.forEach((data) => {\n extraTooltipDataTemplate += `<div style=\"\n font-size:13px;\n color:#434A51;\n padding-top: 0.5rem;\n \">\n ${data[0]}: <b style=\"color:#111;font-weight:600;\">${this.formatTooltipValue(data[1], config?.tooltipCompactValue)}</b>\n </div>`;\n });\n }\n\n return `<div style=\"\n position: relative;\n background-color: #fff;\n padding: 8px 16px;\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0,0,0,0.08);\n \">\n <div style=\"\n display: flex;\n align-items: center;\n gap: 10px;\n \">\n <div style=\"\n position: absolute;\n left: -10px;\n top: 10px;\n width: 0;\n height: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n border-right: 10px solid #ffffff;\n \"></div>\n\n <span style=\"\n width: 14px;\n height: 14px;\n background: ${color};\n border-radius: 3px;\n display: inline-block;\n \"></span>\n\n <span style=\"\n font-size: 12px;\n color: #434A51;\n \">\n ${name}: <b style=\"color:#111; font-weight:600;\">${config.valueFormatter ? config.valueFormatter(value) : this.formatTooltipValue(value, config?.tooltipCompactValue)}</b> ${config.showTooltipPercent ? '(' + percent + '%)' : ''}\n </span>\n </div>\n ${extraTooltipDataTemplate}\n </div>\n `;\n }\n barLineTooltipFormatter(\n params: any,\n chartType?: 'bar' | 'line',\n config?: LineChartConfig | BarChartConfig,\n ) {\n if (!params || !params.length) return '';\n\n const date = params[0].axisValueLabel || params[0].name;\n\n let total = 0;\n let rows = '';\n\n let extraTooltipData: any[] = [];\n if (typeof params?.[0]?.data === 'object') {\n extraTooltipData = Object.entries(\n params[0].data?.[config?.extraTooltipKey || 'tooltip'] || {},\n );\n }\n\n let extraTooltipDataTemplate = '';\n if (extraTooltipData.length) {\n extraTooltipData.forEach((data) => {\n extraTooltipDataTemplate += `<div style=\"\n font-size:13px;\n color:#434A51;\n padding-top: 0.5rem;\n \">\n ${data[0]}: <b style=\"color:#111;font-weight:600;\">${this.formatTooltipValue(data[1], config?.tooltipCompactValue)}</b>\n </div>`;\n });\n }\n\n params?.forEach((item: any) => {\n const color = item.color;\n const name = item.seriesName;\n const value = item.value ?? 0;\n\n total += Number(value);\n\n rows += `\n <div style=\"\n display:flex;\n align-items:center;\n gap:8px;\n font-size:13px;\n color:#434A51;\n \">\n <span style=\"\n width:14px;\n height: ${chartType === 'line' ? '3px' : '14px'};\n background:${color};\n border-radius:3px;\n display:inline-block;\n \"></span>\n\n <span>${name}: <b style=\"color:#111;font-weight:600;\">${this.formatTooltipValue(value, config?.tooltipCompactValue)}</b></span>\n </div>\n `;\n });\n\n return `\n <div style=\"\n border-radius: 8px;\n background-color: #ffffff;\n border: 1px solid #f0f0f0;\n box-shadow: 0px 10.55px 23.39px -3.52px #0a0d1214;\n min-width:190px;\n \">\n <div style=\"\n font-size:15px;\n font-weight:600;\n color:#111;\n padding: 0.5rem 1rem;\n border-bottom: 1px solid #F0F0F0 ;\n \">\n ${date}\n </div>\n <div style=\"padding: 1rem; display: flex; flex-direction: column; gap: 6px\">\n ${rows}\n <div>\n <div style=\"\n font-size:13px;\n color:#434A51;\n padding-top: 0.5rem;\n \">\n Total: <b style=\"color:#111;font-weight:600;\">${this.formatTooltipValue(total, config?.tooltipCompactValue)}</b>\n ${extraTooltipDataTemplate}\n </div>\n\n </div>\n `;\n }\n\n compactValueFormat(value: number): string {\n if (!Number.isFinite(value)) return String(value);\n if (Object.is(value, -0) || value === 0) return '0';\n\n const units = [\n { divisor: 1_000_000_000_000_000, suffix: 'Q' },\n { divisor: 1_000_000_000_000, suffix: 'T' },\n { divisor: 1_000_000_000, suffix: 'B' },\n { divisor: 1_000_000, suffix: 'M' },\n { divisor: 1_000, suffix: 'K' },\n ];\n const absoluteValue = Math.abs(value);\n let unitIndex = units.findIndex(({ divisor }) => absoluteValue >= divisor);\n\n // Keep values below one thousand unchanged, including decimal values.\n if (unitIndex === -1) return String(value);\n\n let scaled = Math.round((value / units[unitIndex].divisor) * 10) / 10;\n\n // For example, 999_950 should display as 1M rather than 1000K after\n // rounding to one decimal place.\n if (Math.abs(scaled) >= 1_000 && unitIndex > 0) {\n unitIndex -= 1;\n scaled = Math.round((value / units[unitIndex].divisor) * 10) / 10;\n }\n\n return `${scaled}${units[unitIndex].suffix}`;\n }\n\n formatTooltipValue(value: any, compact = false): any {\n if (typeof Number(value) !== 'number') return value;\n\n const roundedValue = this.toMaxDecimals(value);\n return compact ? this.compactValueFormat(roundedValue) : roundedValue;\n }\n\n formatGanttDate(value: string | number | Date, config?: GanttChartConfig): string {\n const date = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(date.getTime())) return String(value);\n\n switch (config?.XAxisAggregation) {\n case 'year':\n return String(date.getFullYear());\n case 'quarter':\n return `Q${Math.floor(date.getMonth() / 3) + 1} ${date.getFullYear()}`;\n case 'month':\n return date.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });\n case 'week': {\n const { week, year } = this.getIsoWeek(date);\n return `W${week} ${year}`;\n }\n case 'hour':\n return date.toLocaleDateString('en-US', {\n day: '2-digit',\n month: 'short',\n hour: '2-digit',\n hour12: false,\n });\n case 'minute':\n return date.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n });\n case 'day':\n default:\n return date.toLocaleDateString('en-US', { day: '2-digit', month: 'short' });\n }\n }\n\n formatHeatmapPivotDate(\n value: string | number | Date,\n aggregation: HeatmapPivotAggregation = 'day',\n ): string {\n const date = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(date.getTime())) return String(value);\n\n switch (aggregation) {\n case 'year':\n return String(date.getFullYear());\n case 'quarter':\n return `Q${Math.floor(date.getMonth() / 3) + 1} ${date.getFullYear()}`;\n case 'month':\n return date.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });\n case 'week': {\n const utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n const dayOfWeek = utcDate.getUTCDay() || 7;\n utcDate.setUTCDate(utcDate.getUTCDate() + 4 - dayOfWeek);\n const year = utcDate.getUTCFullYear();\n const yearStart = new Date(Date.UTC(year, 0, 1));\n const week = Math.ceil(((utcDate.getTime() - yearStart.getTime()) / 86_400_000 + 1) / 7);\n return `W${week} ${year}`;\n }\n case 'hour':\n return date.toLocaleDateString('en-US', {\n day: '2-digit',\n month: 'short',\n hour: '2-digit',\n hour12: false,\n });\n case 'minute':\n return date.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n });\n case 'day':\n default:\n return date.toLocaleDateString('en-US', { day: '2-digit', month: 'short' });\n }\n }\n\n private getIsoWeek(date: Date): { week: number; year: number } {\n const utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n const dayOfWeek = utcDate.getUTCDay() || 7;\n\n utcDate.setUTCDate(utcDate.getUTCDate() + 4 - dayOfWeek);\n\n const year = utcDate.getUTCFullYear();\n const yearStart = new Date(Date.UTC(year, 0, 1));\n const week = Math.ceil(((utcDate.getTime() - yearStart.getTime()) / 86_400_000 + 1) / 7);\n\n return { week, year };\n }\n\n ganttTooltipFormatter(params: any, config?: GanttChartConfig) {\n const data = params.data;\n let extraTooltipData: any[] = [];\n if (typeof data === 'object') {\n extraTooltipData = Object.entries(data?.[config?.extraTooltipKey || 'tooltip'] || {});\n }\n let extraTooltipDataTemplate = '';\n if (extraTooltipData.length) {\n extraTooltipData.forEach((data) => {\n extraTooltipDataTemplate += `<div style=\"\n color:#434A51;\n \">\n ${data[0]}: <b style=\"color:#111;font-weight:600;\">${typeof data[1] === 'number' ? this.formatTooltipValue(data[1], config?.tooltipCompactValue) : data[1]}</b>\n </div>`;\n });\n }\n\n return `\n <div style=\"\n border-radius: 8px;\n background-color: #ffffff;\n border: 1px solid #f0f0f0;\n box-shadow: 0px 10.55px 23.39px -3.52px #0a0d1214;\n min-width:190px;\n \">\n <div style=\"\n font-size:15px;\n font-weight:600;\n color:#111;\n padding: 0.5rem 1rem;\n border-bottom: 1px solid #F0F0F0 ;\n \">\n ${data.name}\n </div>\n <div style=\"padding: 0.5rem 1rem; display: flex; flex-direction: column; gap: 6px\">\n Start: ${this.formatGanttDate(data.start, config)}<br/>\n End: ${this.formatGanttDate(data.end, config)}\n ${data.duration ? `<br/>Duration: ${typeof data.duration === 'number' ? this.formatTooltipValue(data.duration, config?.tooltipCompactValue) : data.duration}` : ''}\n\n <div>\n ${\n extraTooltipDataTemplate\n ? `<div style=\"\n font-size:14px;\n color:#434A51;\n \">\n ${extraTooltipDataTemplate}\n </div>`\n : ''\n }\n </div>`;\n }\n\n heatmapTooltipFormatter(params: any, config: HeatmapChartConfig) {\n const value = params.value ?? [];\n const xAxisLabel = config.xAxisData?.[value[0]] ?? value[0] ?? '-';\n const yAxisLabel = config.yAxisData?.[value[1]] ?? value[1] ?? '-';\n const heatValue = value[2] ?? '-';\n const color = params.color ?? '#38bdf8';\n\n return `\n <div style=\"\n background:#ffffff;\n padding:12px 14px;\n border-radius:8px;\n border:1px solid #f0f0f0;\n box-shadow:0px 10.55px 23.39px -3.52px #0a0d1214;\n min-width:160px;\n font-family: Inter, sans-serif;\n \">\n <div style=\"\n display:flex;\n align-items:center;\n gap:8px;\n color:#111;\n font-size:14px;\n font-weight:600;\n margin-bottom:8px;\n \">\n <span style=\"\n width:12px;\n height:12px;\n background:${color};\n border-radius:3px;\n display:inline-block;\n \"></span>\n <span>${config.seriesName ?? config.title ?? 'Heatmap'}</span>\n </div>\n\n <div style=\"font-size:13px;color:#434A51;margin-top:4px;\">\n ${xAxisLabel} / ${yAxisLabel}: <b style=\"color:#111;font-weight:600;\">${heatValue}</b>\n </div>\n </div>\n `;\n }\n\n timelineChartTooltipFormatter(params: any) {\n const d = params.data;\n\n return `<div style=\"\n position: relative;\n background:#fff;\n border-radius:8px;\n font-size:12px;\n color:#444;\n box-shadow:0 2px 8px rgba(0,0,0,0.15);\n min-width:220px;\n max-width:500px;\n \">\n <div style=\"\n position: absolute;\n left: -10px;\n bottom: 10px;\n width: 0;\n height: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n border-right: 10px solid #ffffff;\n \"></div>\n <div style=\"padding: 8px 16px; border-bottom:1px solid #E6E7E8;\">\n <div style=\"font-weight:400;color:#040D17;font-size: 14px;\">\n ${d.start || '00:00'} - ${d.end || '00:00'}\n </div>\n\n <div style=\"color:#81858A;margin-top:2px;\">\n ${d.date || 'NA'}\n </div>\n </div>\n <div style=\"padding: 8px 16px;\">\n <div>\n Work Mode: <b>${d.workMode || '-'}</b>\n </div>\n\n <div style=\"margin-top:6px;\">\n Productivity:\n <span style=\"color:${this.getStatusColor(d.productivity)};font-weight:600;\">\n ${this.formatPercentage(d.productivity)}\n </span>\n\n <span style=\"margin-left:12px;\">Activity:</span>\n <span style=\"color:${this.getStatusColor(d.activity)};font-weight:600;\">\n ${this.formatPercentage(d.activity)}\n </span>\n </div>\n\n <div style=\"margin-top:6px;\">\n System Presence: <b>${d.systemPresence || '-'}</b>\n </div>\n\n <div style=\"margin-top:6px;\">\n POW Source: <b>${d.powSource || '-'}</b>\n </div>\n\n <div style=\"margin-top:6px;\">\n Location: <b style=\"white-space: break-spaces;\">${d.location || '-'}</b>\n </div>\n\n <div style=\"\n display:flex;\n gap:10px;\n align-items:center;\n margin-top:6px;\n \">\n Apps Used:\n <span style=\"color:#2563eb;font-weight:600;\">\n ${d.appsUsed || 0}\n </span>\n\n <span style=\"color:#ccc;\">|</span>\n\n Screenshots:\n <span style=\"color:#2563eb;font-weight:600;\">\n ${d.screenShots || 0}\n </span>\n </div>\n </div>\n </div>`;\n }\n getSankeyLevels(nodes: SankeyNode[] = [], links: SankeyLink[] = []) {\n const graph = new Map();\n const indegree = new Map();\n\n nodes.forEach((n) => {\n graph.set(n.name, []);\n indegree.set(n.name, 0);\n });\n\n links.forEach((link) => {\n graph.get(link.source).push(link.target);\n indegree.set(link.target, indegree.get(link.target) + 1);\n });\n\n const queue: any[] = [];\n const levelMap = new Map();\n\n indegree.forEach((deg, node) => {\n if (deg === 0) {\n queue.push(node);\n levelMap.set(node, 0);\n }\n });\n\n while (queue.length) {\n const current = queue.shift();\n const currentLevel = levelMap.get(current);\n\n graph.get(current).forEach((neighbor: any) => {\n const newLevel = currentLevel + 1;\n\n if (!levelMap.has(neighbor) || levelMap.get(neighbor) < newLevel) {\n levelMap.set(neighbor, newLevel);\n queue.push(neighbor);\n }\n });\n }\n\n return Math.max(...levelMap.values());\n }\n\n sankeyTooltipFormatter(params: any, config: SankeyChartConfig & { activeMetric?: string }) {\n const showPercentage = config.styling?.labels?.showPercentage === true;\n const targetNames = new Set((config.links ?? []).map((link) => link.target));\n const sourceTotal = (config.links ?? [])\n .filter((link) => !targetNames.has(link.source))\n .reduce((sum, link) => sum + Number(link.value || 0), 0);\n const totalValue =\n sourceTotal || (config.links ?? []).reduce((sum, link) => sum + Number(link.value || 0), 0);\n const percentageRow = (item: unknown) => {\n const value = Number(item);\n if (!showPercentage || !Number.isFinite(value)) return '';\n const percentage = totalValue ? ((value / totalValue) * 100).toFixed(1) : '0.0';\n return `${percentage}%`;\n };\n if (params.dataType === 'edge') {\n const { source, target, value, tooltip } = params.data;\n const escape = (item: unknown) =>\n String(item ?? '').replace(\n /[&<>\"']/g,\n (char) =>\n ({\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n })[char] ?? char,\n );\n const formatKey = (key: string) => (key ? key.charAt(0).toUpperCase() + key.slice(1) : key);\n const tooltipRows =\n tooltip && typeof tooltip === 'object'\n ? Object.entries(tooltip)\n .map(([key, item]) => {\n const displayValue =\n typeof item === 'number'\n ? this.formatTooltipValue(item, config.tooltipCompactValue)\n : item;\n const value = Array.isArray(displayValue)\n ? displayValue.map(escape).join(', ')\n : escape(displayValue);\n return `<div style=\"font-size:12px;font-weight:600\">${escape(formatKey(key))}: <span style=\"font-size:12px;font-weight:400\">${value}</span></div>`;\n })\n .join('')\n : '';\n return `\n <div style=\"background:#FFFFFF;padding:12px;border:1px solid #d9e1ea;border-radius:8px;min-width:150px;\">\n <div style=\"display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;\">\n <span>${escape(source)}</span>\n <img\n src=\"images/arrow-right.svg\"\n alt=\"\"\n style=\"width:14px;height:14px;display:block;\"\n />\n <span>${escape(target)}</span>\n</div>\n <div style=\"font-size:12px;font-weight:600\">${formatKey(config?.activeMetric ?? '') || 'Value'}: <span style=\"font-size:12px;font-weight:400\">${showPercentage ? '(' : ''}${escape(typeof value === 'number' ? this.formatTooltipValue(value, config.tooltipCompactValue) : value)}${showPercentage ? ')' : ''} ${showPercentage ? percentageRow(value) : ''}</span></div>\n ${tooltipRows}\n </div>\n `;\n }\n return `\n <div style=\"\n background: #fff;\n padding: 10px;\n border-radius: 8px;\n box-shadow: 0 4px 10px rgba(0,0,0,0.15);\n \">\n ${params.name}: <b>${showPercentage ? '(' : ''}${typeof params.value === 'number' ? this.formatTooltipValue(params.value, config.tooltipCompactValue) : params.value}${showPercentage ? ')' : ''}</b>\n ${percentageRow(params.value)}\n </div>\n `;\n }\n scatterTooltipFormatter(params: any, xName: string | undefined, yName: string | undefined) {\n return `\n <div style=\"\n background: #fff;\n padding: 10px;\n border-radius: 8px;\n box-shadow: 0 4px 10px rgba(0,0,0,0.15);\n \">\n <div><b>${params.seriesName}</b></div>\n <div>${xName ? xName + ':' : ''} ${params.value[0]}</div>\n <div>${yName ? xName + ':' : ''} ${params.value[1]}</div>\n </div>\n `;\n }\n calculateGridTopLineBar(config: LineChartConfig | BarChartConfig): number {\n let maxHeight = 0;\n\n const label = config?.series?.[0]?.['label'];\n\n if (\n (config?.showLabel !== true && label?.show !== true) ||\n (config?.labelPosition !== 'top' && label?.position !== 'top')\n ) {\n return 0;\n }\n\n const font = [\n label.fontStyle,\n label.fontWeight,\n `${label.fontSize ?? 12}px`,\n label.fontFamily ?? 'sans-serif',\n ]\n .filter(Boolean)\n .join(' ');\n\n const text = typeof label.formatter === 'string' ? label.formatter : '0';\n\n const rect = echarts.format.getTextRect(text, font);\n\n const padding = label.padding ?? 0;\n\n const verticalPadding = Array.isArray(padding)\n ? padding.length === 1\n ? padding[0] * 2\n : padding.length === 2\n ? padding[0] * 2\n : padding[0] + padding[2]\n : padding * 2;\n\n maxHeight = Math.max(maxHeight, rect.height + verticalPadding);\n\n return maxHeight + 6;\n }\n\n toMaxDecimals(value: number, maxDecimal: number = 2): number {\n if (!Number.isFinite(value)) {\n return value;\n }\n\n return Number(value.toFixed(maxDecimal));\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n SimpleChanges,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n ElementRef,\n HostListener,\n ViewChild,\n} from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\n\nimport { LineChart } from 'echarts/charts';\nimport {\n GridComponent,\n TooltipComponent,\n LegendComponent,\n TitleComponent,\n ToolboxComponent,\n DataZoomInsideComponent,\n DataZoomComponent,\n MarkAreaComponent,\n MarkLineComponent,\n} from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { LineChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\nimport { RightClickCard } from '../right-click-card';\nimport { ChartLegendComponent, ChartLegendEvent } from '../chart-legend';\n\necharts.use([\n LineChart,\n GridComponent,\n TooltipComponent,\n LegendComponent,\n CanvasRenderer,\n TitleComponent,\n ToolboxComponent,\n DataZoomInsideComponent,\n DataZoomComponent,\n MarkAreaComponent,\n MarkLineComponent,\n]);\n\n@Component({\n selector: 'lib-line-chart',\n standalone: true,\n imports: [NgxEchartsDirective, RightClickCard, ChartLegendComponent],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './line-chart.html',\n styleUrls: ['./line-chart.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LinesChart {\n @Input() config: LineChartConfig = { xAxisData: [], series: [] };\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() contextMenuOptions: any[] = [];\n @Input() showContextMenu: boolean = false;\n\n @Output() contextMenuClick = new EventEmitter<any>();\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n @Output() legendEvent = new EventEmitter<ChartLegendEvent>();\n @ViewChild('chartContainer') chartContainer?: ElementRef<HTMLElement>;\n chartOption: EChartsCoreOption = {};\n chartInstance!: ECharts;\n cardPosition = { x: 0, y: 0 };\n openCard = false;\n\n get deafultColors() {\n return this.chartService.defaultColors;\n }\n\n get hasSideLegendWidth(): boolean {\n return this.isSideLegend && !!this.config.customLegend?.maxWidth;\n }\n\n get legendShellMaxWidth(): string | null {\n return this.isSideLegend ? (this.config.customLegend?.maxWidth ?? null) : null;\n }\n\n private get isSideLegend(): boolean {\n return (\n this.config.customLegend?.position === 'left' ||\n this.config.customLegend?.position === 'right'\n );\n }\n constructor(\n private chartService: Charts,\n private cdr: ChangeDetectorRef,\n ) {}\n\n /* ------------------ CHANGE HANDLING ------------------ */\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n // this.chartInstance = null;\n }\n\n this.buildOption();\n }\n private previousConfig: any = {\n xAxisName: '',\n yAxisName: '',\n secondaryYAxisName: '',\n axisNameStyleSignature: '',\n };\n ngDoCheck(): void {\n if (!this.chartInstance || !this.config) return;\n\n const updateOption: any = {};\n const axisNameStyleSignature = this.resolveAxisNameStyleSignature();\n\n if (this.previousConfig.xAxisName !== this.config.xAxisName) {\n this.previousConfig.xAxisName = this.config.xAxisName;\n\n updateOption.xAxis = {\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n nameTextStyle: this.resolveAxisNameTextStyle('x'),\n };\n }\n\n if (this.previousConfig.yAxisName !== this.config.yAxisName) {\n this.previousConfig.yAxisName = this.config.yAxisName;\n\n updateOption.yAxis = [\n {\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameTextStyle: this.resolveAxisNameTextStyle('y'),\n },\n ];\n }\n\n if (this.previousConfig.secondaryYAxisName !== this.config.secondaryYAxisName) {\n this.previousConfig.secondaryYAxisName = this.config.secondaryYAxisName;\n\n updateOption.yAxis = [\n {\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameTextStyle: this.resolveAxisNameTextStyle('y'),\n },\n {\n name: this.resolveAxisName(this.config?.secondaryYAxisName, 'secondaryY'),\n nameTextStyle: this.resolveAxisNameTextStyle('secondaryY'),\n },\n ];\n }\n\n if (Object.keys(updateOption).length) {\n this.chartInstance.setOption(updateOption);\n }\n\n if (this.previousConfig.axisNameStyleSignature !== axisNameStyleSignature) {\n this.previousConfig.axisNameStyleSignature = axisNameStyleSignature;\n this.refreshAxisNameSpace();\n }\n }\n\n /* ------------------ OPTION BUILDER ------------------ */\n private buildOption() {\n const selected = this.readLegendSelected();\n const selectedMode = this.config?.customLegend?.selectionMode === 'exclusive' ? 'single' : true;\n\n this.chartOption = {\n backgroundColor: 'transparent',\n color: this.config?.colors || this.chartService.defaultColors,\n title: {\n show: this.config?.showTitle ?? !!this.config?.title,\n text: this.config?.title,\n left: this.config?.titlePosition || 'center',\n },\n\n tooltip: {\n show: this.config?.showTooltip,\n trigger: 'axis',\n backgroundColor: 'transparent', // remove default box\n borderWidth: 0,\n padding: 0,\n confine: true,\n formatter: (params: any) =>\n this.config?.tooltipFormatter\n ? this.config?.tooltipFormatter(params)\n : this.chartService.barLineTooltipFormatter(params, 'line', this.config),\n },\n legend: {\n show: false,\n data: (this.config?.series ?? []).map((series) => series.name),\n selected,\n selectedMode,\n },\n\n grid: this.config?.isTrendChart\n ? { left: 0, right: 0, top: 0, bottom: 0 }\n : {\n left: this.config?.gridLeft ?? 0,\n right: this.config?.gridRight ?? 0,\n bottom: this.config?.gridBottom ?? 0,\n top:\n this.config?.gridTop ?? this.chartService.calculateGridTopLineBar(this.config) ?? 0,\n },\n\n xAxis: {\n show: !this.config?.isTrendChart,\n type: 'category',\n // boundaryGap: false,\n data: this.config?.xAxisData,\n nameLocation: 'center',\n\n ...(this.config?.xAxis || {}),\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n\n axisLine: {\n show: this.config?.showXAxisLine ?? true,\n ...(this.config?.xAxis?.axisLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.xAxis?.axisLine?.lineStyle || {}),\n },\n },\n axisTick: {\n show: false,\n ...(this.config?.xAxis?.axisTick || {}),\n },\n axisLabel: {\n show: this.config?.showXAxisLabel ?? true,\n color: '#434A51',\n fontSize: 12,\n ...(!this.config?.xAxis?.axisLabel?.rotate && {\n alignMinLabel: 'left',\n alignMaxLabel: 'right',\n }),\n ...(this.config?.xAxis?.axisLabel || {}),\n },\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n overflow: 'truncate',\n width: this.resolveAxisNameWidth('x'),\n ...(this.config?.xAxis?.nameTextStyle || {}),\n },\n splitLine: {\n show: this.config?.showXAxisSplitLine ?? true,\n ...(this.config?.xAxis?.splitLine || {}),\n lineStyle: {\n type: 'dashed',\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.xAxis?.splitLine?.lineStyle || {}),\n },\n },\n },\n\n yAxis: [\n {\n show: !this.config?.isTrendChart,\n type: 'value',\n boundaryGap: this.config?.isTrendChart ? [0.2] : undefined,\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameLocation: 'center',\n\n ...(this.config?.yAxis || {}),\n axisLine: {\n show: this.config?.showYAxisLine ?? true,\n ...(this.config?.yAxis?.axisLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.yAxis?.axisLine?.lineStyle || {}),\n },\n },\n axisTick: {\n show: false,\n ...(this.config?.yAxis?.axisTick || {}),\n },\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n overflow: 'truncate',\n width: this.resolveAxisNameWidth('y'),\n ...(this.config?.yAxis?.nameTextStyle || {}),\n },\n splitLine: {\n show: this.config?.showYAxisSplitLine ?? true,\n ...(this.config?.yAxis?.splitLine || {}),\n lineStyle: {\n type: 'dashed',\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.yAxis?.splitLine?.lineStyle || {}),\n },\n },\n axisLabel: {\n show: this.config?.showYAxisLabel ?? true,\n color: '#434A51',\n fontSize: 12,\n formatter: (value: number) => {\n if (value === 0) {\n return '0';\n }\n\n const absValue = Math.abs(value);\n\n // Quadrillions\n if (absValue >= 1_000_000_000_000_000) {\n return `${+(value / 1_000_000_000_000_000).toFixed(1)}Q`;\n }\n\n // Trillions\n if (absValue >= 1_000_000_000_000) {\n return `${+(value / 1_000_000_000_000).toFixed(1)}T`;\n }\n\n // Billions\n if (absValue >= 1_000_000_000) {\n return `${+(value / 1_000_000_000).toFixed(1)}B`;\n }\n\n // Millions\n if (absValue >= 1_000_000) {\n return `${+(value / 1_000_000).toFixed(1)}M`;\n }\n\n // Thousands\n if (absValue >= 1_000) {\n return `${+(value / 1_000).toFixed(1)}K`;\n }\n\n // Decimal handling\n if (Number.isInteger(value)) {\n return value.toString();\n }\n\n return value;\n },\n ...(this.config?.yAxis?.axisLabel || {}),\n },\n },\n\n ...(this.config?.secondaryYAxis\n ? [\n {\n show: !this.config?.isTrendChart,\n type: 'value',\n boundaryGap: this.config?.isTrendChart ? [0.2] : undefined,\n name: this.resolveAxisName(this.config?.secondaryYAxisName, 'secondaryY'),\n nameLocation: 'center',\n\n ...(this.config?.secondaryYAxisConfig || {}),\n\n axisLine: {\n show: this.config?.showYAxisLine ?? true,\n ...(this.config?.secondaryYAxisConfig?.axisLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.secondaryYAxisConfig?.axisLine?.lineStyle || {}),\n },\n },\n axisTick: {\n show: false,\n ...(this.config?.secondaryYAxisConfig?.axisTick || {}),\n },\n axisLabel: {\n show: this.config?.showSecondaryYAxisLabel ?? true,\n color: '#434A51',\n fontSize: 12,\n formatter: (value: number) => {\n if (value === 0) {\n return '0';\n }\n\n const absValue = Math.abs(value);\n\n // Quadrillions\n if (absValue >= 1_000_000_000_000_000) {\n return `${+(value / 1_000_000_000_000_000).toFixed(1)}Q`;\n }\n\n // Trillions\n if (absValue >= 1_000_000_000_000) {\n return `${+(value / 1_000_000_000_000).toFixed(1)}T`;\n }\n\n // Billions\n if (absValue >= 1_000_000_000) {\n return `${+(value / 1_000_000_000).toFixed(1)}B`;\n }\n\n // Millions\n if (absValue >= 1_000_000) {\n return `${+(value / 1_000_000).toFixed(1)}M`;\n }\n\n // Thousands\n if (absValue >= 1_000) {\n return `${+(value / 1_000).toFixed(1)}K`;\n }\n\n // Decimal handling\n if (Number.isInteger(value)) {\n return value.toString();\n }\n\n return value;\n },\n ...(this.config?.secondaryYAxisConfig?.axisLabel || {}),\n },\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n overflow: 'truncate',\n width: this.resolveAxisNameWidth('secondaryY'),\n ...(this.config?.secondaryYAxisConfig?.nameTextStyle || {}),\n },\n splitLine: {\n show: this.config?.showSecondaryYAxisSplitLine ?? true,\n ...(this.config?.secondaryYAxisConfig?.splitLine || {}),\n lineStyle: {\n type: 'dashed',\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.secondaryYAxisConfig?.splitLine?.lineStyle || {}),\n },\n },\n },\n ]\n : []),\n ],\n\n series: (this.config?.series || [])?.map((s, i) => {\n const lineColor =\n s['color'] ||\n s['itemStyle']?.color ||\n s['lineStyle']?.color ||\n s.areaColor ||\n this.config.colors?.[i % (this.config.colors || []).length] ||\n '#3b82f6';\n\n return {\n type: 'line',\n smooth: s.smooth ?? true,\n areaStyle: s.area\n ? {\n color: {\n type: 'linear',\n x: 0,\n y: 0,\n x2: 0,\n y2: 1,\n colorStops: [\n {\n offset: 0,\n color: lineColor,\n },\n {\n offset: 1,\n color: this.chartService.hexToRgba(lineColor, 0),\n },\n ],\n },\n opacity: s.areaOpacity ?? 0.4,\n }\n : undefined,\n ...s,\n symbol: this.resolveSeriesSymbol(s['symbol']),\n label: {\n show: this.config?.showLabel ?? false,\n position: this.config?.labelPosition ?? 'top',\n ...(s['label'] ? s['label'] : {}),\n },\n itemStyle: {\n borderRadius: this.config?.borderRadius ?? 0,\n ...(s['itemStyle'] ? s['itemStyle'] : {}),\n },\n };\n }),\n toolbox: {\n right: -1000,\n feature: {\n dataZoom: {},\n },\n },\n dataZoom: [\n {\n type: 'inside',\n disabled: true,\n },\n ],\n };\n }\n\n private resolveSeriesSymbol(symbol?: string): string | undefined {\n switch (symbol) {\n case 'plus':\n return 'path://M-2,-8 L2,-8 L2,-2 L8,-2 L8,2 L2,2 L2,8 L-2,8 L-2,2 L-8,2 L-8,-2 L-2,-2 Z';\n case 'x':\n return 'path://M-6,-4 L-4,-6 L0,-2 L4,-6 L6,-4 L2,0 L6,4 L4,6 L0,2 L-4,6 L-6,4 L-2,0 Z';\n case 'thickLine':\n return 'path://M -8 -2 L 8 -2 L 8 2 L -8 2 Z';\n default:\n return symbol;\n }\n }\n\n private resolveAxisNameTextStyle(axis: 'x' | 'y' | 'secondaryY'): Record<string, any> {\n const customStyle =\n axis === 'x'\n ? this.config?.xAxis?.nameTextStyle\n : axis === 'secondaryY'\n ? this.config?.secondaryYAxisConfig?.nameTextStyle\n : this.config?.yAxis?.nameTextStyle;\n\n return {\n width: this.resolveAxisNameWidth(axis),\n ...(customStyle || {}),\n };\n }\n\n private resolveAxisName(name: string | undefined, axis: 'x' | 'y' | 'secondaryY'): string {\n if (!name) return '';\n\n const maxWidth = this.resolveAxisNameWidth(axis);\n const font = this.resolveAxisNameFont(axis);\n if (echarts.format.getTextRect(name, font).width <= maxWidth) return name;\n\n const ellipsis = '...';\n let low = 0;\n let high = name.length;\n let truncated = ellipsis;\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const nextText = `${name.slice(0, mid)}${ellipsis}`;\n const nextWidth = echarts.format.getTextRect(nextText, font).width;\n\n if (nextWidth <= maxWidth) {\n truncated = nextText;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n return truncated;\n }\n\n private resolveAxisNameFont(axis: 'x' | 'y' | 'secondaryY'): string {\n const style =\n axis === 'x'\n ? this.config?.xAxis?.nameTextStyle\n : axis === 'secondaryY'\n ? this.config?.secondaryYAxisConfig?.nameTextStyle\n : this.config?.yAxis?.nameTextStyle;\n const fontSize = style?.fontSize ?? 14;\n const fontWeight = style?.fontWeight ?? 400;\n const fontFamily = style?.fontFamily ?? 'sans-serif';\n\n return `${fontWeight} ${fontSize}px ${fontFamily}`;\n }\n\n private resolveAxisNameWidth(axis: 'x' | 'y' | 'secondaryY'): number {\n const chartRect = this.chartContainer?.nativeElement.getBoundingClientRect();\n const chartWidth = chartRect?.width || this.chartInstance?.getWidth?.() || 360;\n const chartHeight = chartRect?.height || this.chartInstance?.getHeight?.() || 240;\n\n if (axis === 'x') {\n return Math.max(chartWidth - 240, 80);\n }\n\n return Math.max(chartHeight - 72, 80);\n }\n\n private resolveAxisNameStyleSignature(): string {\n return JSON.stringify({\n xAxisName: this.config?.xAxisName,\n yAxisName: this.config?.yAxisName,\n secondaryYAxisName: this.config?.secondaryYAxisName,\n xAxisNameTextStyle: this.config?.xAxis?.nameTextStyle,\n yAxisNameTextStyle: this.config?.yAxis?.nameTextStyle,\n secondaryYAxisNameTextStyle: this.config?.secondaryYAxisConfig?.nameTextStyle,\n });\n }\n\n enableDataZoom(active: boolean) {\n if (!this.chartInstance) return;\n\n this.chartInstance.dispatchAction({\n type: 'takeGlobalCursor',\n key: 'dataZoomSelect',\n dataZoomSelectActive: active,\n });\n }\n\n resetZoom() {\n if (!this.chartInstance) return;\n this.enableDataZoom(false);\n this.chartInstance.dispatchAction({\n type: 'dataZoom',\n start: 0,\n end: 100,\n });\n }\n\n /* ------------------ INIT ------------------ */\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n queueMicrotask(() => this.refreshAxisNameSpace());\n this.bindEvents();\n }\n\n @HostListener('window:resize')\n refreshAxisNameSpace(): void {\n if (!this.chartInstance) return;\n\n this.chartInstance.setOption({\n xAxis: {\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n nameTextStyle: this.resolveAxisNameTextStyle('x'),\n },\n yAxis: [\n {\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameTextStyle: this.resolveAxisNameTextStyle('y'),\n },\n ...(this.config?.secondaryYAxis\n ? [\n {\n name: this.resolveAxisName(this.config?.secondaryYAxisName, 'secondaryY'),\n nameTextStyle: this.resolveAxisNameTextStyle('secondaryY'),\n },\n ]\n : []),\n ],\n });\n }\n\n /* ------------------ EVENTS ------------------ */\n private bindEvents() {\n if (!this.chartInstance) return;\n this.chartInstance.off();\n\n // Existing chart events\n this.events.forEach((eventName) => {\n if (eventName === 'contextmenu') {\n this.chartInstance.on('contextmenu', (params: any) => {\n const event = params?.event?.event;\n if (event) {\n event.preventDefault();\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n };\n\n this.openCard = true;\n\n this.cdr.markForCheck();\n }\n this.chartEvent.emit({\n type: 'contextmenu',\n data: params,\n });\n });\n const zr = this.chartInstance.getZr();\n zr.on('contextmenu', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n\n nativeEvent.preventDefault();\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: nativeEvent.clientX - rect.left,\n y: nativeEvent.clientY - rect.top,\n };\n\n this.openCard = true;\n this.cdr.markForCheck();\n\n this.chartEvent.emit({\n type: 'contextmenu',\n data: { ...zrEvent, isZrEvent: true },\n });\n }\n });\n } else if (eventName === 'click') {\n this.chartInstance.on('click', (params: any) => {\n this.chartEvent.emit({\n type: 'click',\n data: params,\n });\n });\n const zr = this.chartInstance.getZr();\n zr.on('click', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n nativeEvent.preventDefault();\n this.chartEvent.emit({\n type: 'blur',\n data: { ...zrEvent, type: 'blur' },\n });\n }\n });\n } else {\n this.chartInstance.on(eventName, (params: any) => {\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n }\n });\n }\n\n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n this.closeCard();\n }\n\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n\n /* ------------------ DESTROY ------------------ */\n\n ngOnDestroy(): void {\n if (this.chartInstance) {\n this.chartInstance.off();\n this.chartInstance.dispose();\n }\n }\n\n onLegendEvent(event: ChartLegendEvent): void {\n this.legendEvent.emit(event);\n this.chartEvent.emit({\n type: `legend:${event.type}`,\n data: event,\n });\n }\n\n private readLegendSelected(): Record<string, boolean> {\n const option = this.chartInstance?.getOption?.() as\n | { legend?: Array<{ selected?: Record<string, boolean> }> }\n | undefined;\n\n return { ...(option?.legend?.[0]?.selected ?? {}) };\n }\n}\n","<div\n class=\"line-chart-shell\"\n [class.line-chart-shell--legend-left]=\"config.customLegend?.position === 'left'\"\n [class.line-chart-shell--legend-right]=\"config.customLegend?.position === 'right'\"\n [class.line-chart-shell--legend-bottom]=\"config.customLegend?.position === 'bottom'\"\n>\n @if (\n !config.hideLegend &&\n config.customLegend?.position !== 'bottom' &&\n config.customLegend?.position !== 'right'\n ) {\n <lib-chart-legend\n class=\"line-chart-shell__legend\"\n [class.line-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--line-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n\n <div\n #chartContainer\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n (chartInit)=\"onChartInit($event)\"\n class=\"chart-container\"\n ></div>\n\n @if (\n !config.hideLegend &&\n (config.customLegend?.position === 'bottom' || config.customLegend?.position === 'right')\n ) {\n <lib-chart-legend\n class=\"line-chart-shell__legend\"\n [class.line-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--line-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n</div>\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"contextMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n SimpleChanges,\n HostListener,\n ChangeDetectorRef,\n ChangeDetectionStrategy,\n ElementRef,\n ViewChild,\n} from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\n\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport { BarChart as EBarChart } from 'echarts/charts';\n\nimport {\n TitleComponent,\n TooltipComponent,\n GridComponent,\n LegendComponent,\n DatasetComponent,\n DataZoomComponent,\n ToolboxComponent,\n DataZoomInsideComponent,\n MarkAreaComponent,\n MarkLineComponent,\n} from 'echarts/components';\n\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { RightClickCard } from '../right-click-card';\nimport { ChartLegendComponent } from '../chart-legend';\nimport type {\n ChartLegendAlign,\n ChartLegendConfig,\n ChartLegendEvent,\n ChartLegendPosition,\n} from '../chart-legend';\nimport { BarChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\n\necharts.use([\n EBarChart,\n TitleComponent,\n TooltipComponent,\n GridComponent,\n LegendComponent,\n DatasetComponent,\n CanvasRenderer,\n DataZoomComponent,\n ToolboxComponent,\n DataZoomInsideComponent,\n DataZoomComponent,\n MarkAreaComponent,\n MarkLineComponent,\n]);\n\n@Component({\n selector: 'lib-bar-chart',\n imports: [NgxEchartsDirective, RightClickCard, ChartLegendComponent],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './bar-chart.html',\n styleUrl: './bar-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BarChart {\n @Input() config: BarChartConfig = { xAxisData: [], series: [] };\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() contextMenuOptions: any[] = [];\n @Input() showContextMenu: boolean = false;\n\n @Output() contextMenuClick = new EventEmitter<any>();\n\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n @Output() legendEvent = new EventEmitter<ChartLegendEvent>();\n @ViewChild('chartContainer') chartContainer?: ElementRef<HTMLElement>;\n chartOption!: EChartsCoreOption;\n chartInstance!: ECharts;\n cardPosition = { x: 0, y: 0 };\n openCard = false;\n\n constructor(\n private chartService: Charts,\n private cdr: ChangeDetectorRef,\n ) {}\n get deafultColors() {\n return this.chartService.defaultColors;\n }\n /* ------------------ CONFIG CHANGE ------------------ */\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n\n this.buildOption();\n }\n\n private previousConfig: any = {\n xAxisName: '',\n yAxisName: '',\n secondaryYAxisName: '',\n axisNameStyleSignature: '',\n };\n ngDoCheck(): void {\n if (!this.chartInstance || !this.config) return;\n\n const updateOption: any = {};\n const axisNameStyleSignature = this.resolveAxisNameStyleSignature();\n\n if (this.previousConfig.xAxisName !== this.config.xAxisName) {\n this.previousConfig.xAxisName = this.config.xAxisName;\n\n updateOption.xAxis = {\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n nameTextStyle: this.resolveAxisNameTextStyle('x'),\n };\n }\n\n if (this.previousConfig.yAxisName !== this.config.yAxisName) {\n this.previousConfig.yAxisName = this.config.yAxisName;\n\n updateOption.yAxis = [\n {\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameTextStyle: this.resolveAxisNameTextStyle('y'),\n },\n ];\n }\n\n if (this.previousConfig.secondaryYAxisName !== this.config.secondaryYAxisName) {\n this.previousConfig.secondaryYAxisName = this.config.secondaryYAxisName;\n\n updateOption.yAxis = [\n {\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameTextStyle: this.resolveAxisNameTextStyle('y'),\n },\n {\n name: this.resolveAxisName(this.config?.secondaryYAxisName, 'secondaryY'),\n nameTextStyle: this.resolveAxisNameTextStyle('secondaryY'),\n },\n ];\n }\n\n if (Object.keys(updateOption).length) {\n this.chartInstance.setOption(updateOption);\n }\n\n if (this.previousConfig.axisNameStyleSignature !== axisNameStyleSignature) {\n this.previousConfig.axisNameStyleSignature = axisNameStyleSignature;\n this.refreshAxisNameSpace();\n }\n }\n\n moveLeft() {\n this.moveZoom(-10);\n }\n\n moveRight() {\n this.moveZoom(10);\n }\n\n moveZoom(step: number) {\n const option: any = this.chartInstance.getOption();\n const zoom = option.dataZoom?.[0];\n if (!zoom) return;\n let start = zoom.start ?? 0;\n let end = zoom.end ?? 100;\n\n const windowSize = end - start;\n if ((step < 0 && start <= 0) || (step > 0 && end >= 100)) {\n return;\n }\n\n let newStart = start + step;\n let newEnd = end + step;\n\n if (newStart < 0) {\n newStart = 0;\n newEnd = windowSize;\n }\n\n if (newEnd > 100) {\n newEnd = 100;\n newStart = 100 - windowSize;\n }\n\n this.chartInstance.dispatchAction({\n type: 'dataZoom',\n start: newStart,\n end: newEnd,\n });\n }\n\n /* ------------------ OPTION BUILDER ------------------ */\n\n private buildOption() {\n const selected = this.readLegendSelected();\n const selectedMode = this.config?.customLegend?.selectionMode === 'exclusive' ? 'single' : true;\n\n // Common chart option\n this.chartOption = {\n backgroundColor: 'transparent',\n color: this.config?.colors || this.chartService.defaultColors,\n title: {\n show: this.config?.showTitle ?? !!this.config?.title,\n text: this.config?.title,\n left: this.config?.titlePosition || 'center',\n },\n\n tooltip: {\n show: this.config?.showTooltip,\n trigger: 'axis',\n backgroundColor: 'transparent', // remove default box\n borderWidth: 0,\n padding: 0,\n confine: true,\n formatter: (params: any) =>\n this.config.tooltipFormatter\n ? this.config.tooltipFormatter(params)\n : this.chartService.barLineTooltipFormatter(params, 'bar', this.config),\n },\n legend: {\n show: false,\n data: (this.config?.series ?? []).map((series) => series.name),\n selected,\n selectedMode,\n },\n grid: {\n left: this.config.gridLeft ?? 0,\n right: this.config.gridRight ?? 0,\n bottom: this.config.gridBottom ?? 0,\n top: this.config.gridTop ?? this.chartService.calculateGridTopLineBar(this.config) ?? 0,\n },\n\n xAxis: {\n type: 'category',\n data: this.config?.xAxisData,\n nameLocation: 'center',\n\n ...(this.config?.xAxis || {}),\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n axisLine: {\n show: this.config?.showXAxisLine ?? true,\n ...(this.config?.xAxis?.axisLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.xAxis?.axisLine?.lineStyle || {}),\n },\n },\n axisTick: {\n show: false,\n ...(this.config?.xAxis?.axisTick || {}),\n },\n axisLabel: {\n show: this.config?.showXAxisLabel ?? true,\n color: '#434A51',\n fontSize: 12,\n alignMinLabel: 'left',\n alignMaxLabel: 'right',\n ...(this.config?.xAxis?.axisLabel || {}),\n },\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n overflow: 'truncate',\n width: this.resolveAxisNameWidth('x'),\n ...(this.config?.xAxis?.nameTextStyle || {}),\n },\n splitLine: {\n show: this.config?.showXAxisSplitLine ?? true,\n ...(this.config?.xAxis?.splitLine || {}),\n lineStyle: {\n type: 'dashed',\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.xAxis?.splitLine?.lineStyle || {}),\n },\n },\n },\n\n yAxis: [\n {\n type: 'value',\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameLocation: 'center',\n\n ...(this.config?.yAxis || {}),\n axisLine: {\n show: this.config?.showYAxisLine ?? true,\n ...(this.config?.yAxis?.axisLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.yAxis?.lineStyle || {}),\n },\n },\n axisTick: {\n show: false,\n ...(this.config?.yAxis?.axisTick || {}),\n },\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n overflow: 'truncate',\n width: this.resolveAxisNameWidth('y'),\n ...(this.config?.yAxis?.nameTextStyle || {}),\n },\n axisLabel: {\n show: this.config?.showYAxisLabel ?? true,\n color: '#434A51',\n fontSize: 12,\n formatter: (value: number) => {\n if (value === 0) {\n return '0';\n }\n\n const absValue = Math.abs(value);\n\n // Quadrillions\n if (absValue >= 1_000_000_000_000_000) {\n return `${+(value / 1_000_000_000_000_000).toFixed(1)}Q`;\n }\n\n // Trillions\n if (absValue >= 1_000_000_000_000) {\n return `${+(value / 1_000_000_000_000).toFixed(1)}T`;\n }\n\n // Billions\n if (absValue >= 1_000_000_000) {\n return `${+(value / 1_000_000_000).toFixed(1)}B`;\n }\n\n // Millions\n if (absValue >= 1_000_000) {\n return `${+(value / 1_000_000).toFixed(1)}M`;\n }\n\n // Thousands\n if (absValue >= 1_000) {\n return `${+(value / 1_000).toFixed(1)}K`;\n }\n\n // Decimal handling\n if (Number.isInteger(value)) {\n return value.toString();\n }\n\n return value;\n },\n ...(this.config?.yAxis?.axisLabel || {}),\n },\n splitLine: {\n show: this.config?.showYAxisSplitLine ?? true,\n ...(this.config?.yAxis?.splitLine || {}),\n lineStyle: {\n type: 'dashed',\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.yAxis?.splitLine?.lineStyle || {}),\n },\n },\n },\n ...(this.config?.secondaryYAxis\n ? [\n {\n type: 'value',\n name: this.resolveAxisName(this.config?.secondaryYAxisName, 'secondaryY'),\n nameLocation: 'center',\n\n ...(this.config?.secondaryYAxisConfig || {}),\n\n axisLine: {\n show: this.config?.showYAxisLine ?? true,\n ...(this.config?.secondaryYAxisConfig?.axisLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.secondaryYAxisConfig?.axisLine?.lineStyle || {}),\n },\n },\n axisTick: {\n show: false,\n ...(this.config?.secondaryYAxisConfig?.axisTick || {}),\n },\n axisLabel: {\n show: this.config?.showSecondaryYAxisLabel ?? true,\n color: '#434A51',\n fontSize: 12,\n formatter: (value: number) => {\n if (value === 0) {\n return '0';\n }\n\n const absValue = Math.abs(value);\n\n // Quadrillions\n if (absValue >= 1_000_000_000_000_000) {\n return `${+(value / 1_000_000_000_000_000).toFixed(1)}Q`;\n }\n\n // Trillions\n if (absValue >= 1_000_000_000_000) {\n return `${+(value / 1_000_000_000_000).toFixed(1)}T`;\n }\n\n // Billions\n if (absValue >= 1_000_000_000) {\n return `${+(value / 1_000_000_000).toFixed(1)}B`;\n }\n\n // Millions\n if (absValue >= 1_000_000) {\n return `${+(value / 1_000_000).toFixed(1)}M`;\n }\n\n // Thousands\n if (absValue >= 1_000) {\n return `${+(value / 1_000).toFixed(1)}K`;\n }\n\n // Decimal handling\n if (Number.isInteger(value)) {\n return value.toString();\n }\n\n return value;\n },\n ...(this.config?.secondaryYAxisConfig?.axisLabel || {}),\n },\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n overflow: 'truncate',\n width: this.resolveAxisNameWidth('secondaryY'),\n ...(this.config?.secondaryYAxisConfig?.nameTextStyle || {}),\n },\n splitLine: {\n show: this.config?.showSecondaryYAxisSplitLine ?? true,\n ...(this.config?.secondaryYAxisConfig?.splitLine || {}),\n lineStyle: {\n type: 'dashed',\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.secondaryYAxisConfig?.splitLine?.lineStyle || {}),\n },\n },\n },\n ]\n : []),\n ],\n\n series: (this.config?.series || [])?.map((s) => {\n return {\n type: 'bar',\n stack: this.config?.stacked ? 'total' : undefined,\n emphasis: {\n scale: false,\n },\n ...(this.config?.barWidth && { barWidth: this.config?.barWidth }),\n ...(this.config?.barMaxWidth && { barMaxWidth: this.config?.barMaxWidth }),\n ...s,\n label: {\n show: this.config?.showLabel ?? false,\n position: this.config?.labelPosition ?? 'top',\n ...(s['label'] ? s['label'] : {}),\n },\n itemStyle: {\n borderRadius: this.config?.borderRadius ?? 0,\n ...(s['itemStyle'] ? s['itemStyle'] : {}),\n },\n };\n }),\n\n ...(this.config?.showZoomSlider\n ? {\n dataZoom: [\n {\n type: 'slider',\n show: true,\n xAxisIndex: 0,\n bottom: 0,\n height: 8,\n ...(this.config.zoomStart && { start: this.config.zoomStart }),\n ...(this.config.zoomEnd && { end: this.config.zoomEnd }),\n // UI styling\n backgroundColor: '#F0F0F0',\n fillerColor: '#81858A',\n borderColor: 'transparent',\n borderRadius: 100,\n handleSize: 0,\n brushSelect: false,\n handleStyle: {\n color: '#F0F0F0',\n },\n textStyle: {\n color: 'transparent',\n },\n dataBackground: {\n lineStyle: {\n color: 'transparent',\n },\n areaStyle: {\n color: 'transparent',\n },\n },\n selectedDataBackground: {\n lineStyle: {\n color: 'transparent',\n },\n areaStyle: {\n color: 'transparent',\n },\n },\n\n moveHandleSize: 0,\n },\n {\n type: 'inside',\n xAxisIndex: 0,\n },\n ],\n }\n : {\n toolbox: {\n right: -1000,\n feature: {\n dataZoom: {},\n },\n },\n dataZoom: [\n {\n type: 'inside',\n disabled: true,\n },\n ],\n }),\n };\n }\n\n enableDataZoom(active: boolean) {\n if (!this.chartInstance) return;\n\n this.chartInstance.dispatchAction({\n type: 'takeGlobalCursor',\n key: 'dataZoomSelect',\n dataZoomSelectActive: active,\n });\n }\n\n resetZoom() {\n if (!this.chartInstance) return;\n this.enableDataZoom(false);\n this.chartInstance.dispatchAction({\n type: 'dataZoom',\n start: 0,\n end: 100,\n });\n }\n\n private resolveAxisNameTextStyle(axis: 'x' | 'y' | 'secondaryY'): Record<string, any> {\n const customStyle =\n axis === 'x'\n ? this.config?.xAxis?.nameTextStyle\n : axis === 'secondaryY'\n ? this.config?.secondaryYAxisConfig?.nameTextStyle\n : this.config?.yAxis?.nameTextStyle;\n\n return {\n width: this.resolveAxisNameWidth(axis),\n ...(customStyle || {}),\n };\n }\n\n private resolveAxisName(name: string | undefined, axis: 'x' | 'y' | 'secondaryY'): string {\n if (!name) return '';\n\n const maxWidth = this.resolveAxisNameWidth(axis);\n const font = this.resolveAxisNameFont(axis);\n if (echarts.format.getTextRect(name, font).width <= maxWidth) return name;\n\n const ellipsis = '...';\n let low = 0;\n let high = name.length;\n let truncated = ellipsis;\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const nextText = `${name.slice(0, mid)}${ellipsis}`;\n const nextWidth = echarts.format.getTextRect(nextText, font).width;\n\n if (nextWidth <= maxWidth) {\n truncated = nextText;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n return truncated;\n }\n\n private resolveAxisNameFont(axis: 'x' | 'y' | 'secondaryY'): string {\n const style =\n axis === 'x'\n ? this.config?.xAxis?.nameTextStyle\n : axis === 'secondaryY'\n ? this.config?.secondaryYAxisConfig?.nameTextStyle\n : this.config?.yAxis?.nameTextStyle;\n const fontSize = style?.fontSize ?? 14;\n const fontWeight = style?.fontWeight ?? 400;\n const fontFamily = style?.fontFamily ?? 'sans-serif';\n\n return `${fontWeight} ${fontSize}px ${fontFamily}`;\n }\n\n private resolveAxisNameWidth(axis: 'x' | 'y' | 'secondaryY'): number {\n const chartRect = this.chartContainer?.nativeElement.getBoundingClientRect();\n const chartWidth = chartRect?.width || this.chartInstance?.getWidth?.() || 360;\n const chartHeight = chartRect?.height || this.chartInstance?.getHeight?.() || 240;\n\n if (axis === 'x') {\n return Math.max(chartWidth - 240, 80);\n }\n\n return Math.max(chartHeight - 72, 80);\n }\n\n private resolveAxisNameStyleSignature(): string {\n return JSON.stringify({\n xAxisName: this.config?.xAxisName,\n yAxisName: this.config?.yAxisName,\n secondaryYAxisName: this.config?.secondaryYAxisName,\n xAxisNameTextStyle: this.config?.xAxis?.nameTextStyle,\n yAxisNameTextStyle: this.config?.yAxis?.nameTextStyle,\n secondaryYAxisNameTextStyle: this.config?.secondaryYAxisConfig?.nameTextStyle,\n });\n }\n\n get hasSideLegendWidth(): boolean {\n return this.isSideLegend && !!this.config.customLegend?.maxWidth;\n }\n\n get legendShellMaxWidth(): string | null {\n return this.isSideLegend ? (this.config.customLegend?.maxWidth ?? null) : null;\n }\n\n private get isSideLegend(): boolean {\n return (\n this.config.customLegend?.position === 'left' ||\n this.config.customLegend?.position === 'right'\n );\n }\n\n onLegendEvent(event: ChartLegendEvent): void {\n this.legendEvent.emit(event);\n this.chartEvent.emit({\n type: `legend:${event.type}`,\n data: event,\n });\n }\n\n private readLegendSelected(): Record<string, boolean> {\n const option = this.chartInstance?.getOption?.() as\n | { legend?: Array<{ selected?: Record<string, boolean> }> }\n | undefined;\n\n return { ...(option?.legend?.[0]?.selected ?? {}) };\n }\n\n /* ------------------ INIT ------------------ */\n\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n queueMicrotask(() => this.refreshAxisNameSpace());\n this.bindEvents();\n }\n\n @HostListener('window:resize')\n refreshAxisNameSpace(): void {\n if (!this.chartInstance) return;\n\n this.chartInstance.setOption({\n xAxis: {\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n nameTextStyle: this.resolveAxisNameTextStyle('x'),\n },\n yAxis: [\n {\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameTextStyle: this.resolveAxisNameTextStyle('y'),\n },\n ...(this.config?.secondaryYAxis\n ? [\n {\n name: this.resolveAxisName(this.config?.secondaryYAxisName, 'secondaryY'),\n nameTextStyle: this.resolveAxisNameTextStyle('secondaryY'),\n },\n ]\n : []),\n ],\n });\n }\n\n /* ------------------ EVENTS ------------------ */\n private bindEvents() {\n if (!this.chartInstance) return;\n this.chartInstance.off();\n\n // Existing chart events\n this.events.forEach((eventName) => {\n if (eventName === 'contextmenu') {\n this.chartInstance.on('contextmenu', (params: any) => {\n const event = params?.event?.event;\n if (event) {\n event.preventDefault();\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n };\n\n this.openCard = true;\n\n this.cdr.markForCheck();\n }\n this.chartEvent.emit({\n type: 'contextmenu',\n data: params,\n });\n });\n const zr = this.chartInstance.getZr();\n zr.on('contextmenu', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n\n nativeEvent.preventDefault();\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: nativeEvent.clientX - rect.left,\n y: nativeEvent.clientY - rect.top,\n };\n\n this.openCard = true;\n this.cdr.markForCheck();\n\n this.chartEvent.emit({\n type: 'contextmenu',\n data: { ...zrEvent, isZrEvent: true },\n });\n }\n });\n } else if (eventName === 'click') {\n this.chartInstance.on('click', (params: any) => {\n this.chartEvent.emit({\n type: 'click',\n data: params,\n });\n });\n const zr = this.chartInstance.getZr();\n zr.on('click', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n nativeEvent.preventDefault();\n this.chartEvent.emit({\n type: 'blur',\n data: { ...zrEvent, type: 'blur' },\n });\n }\n });\n } else {\n this.chartInstance.on(eventName, (params: any) => {\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n }\n });\n }\n\n /* ------------------ CONTEXT MENU ------------------ */\n\n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n this.closeCard();\n }\n\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n\n /* ------------------ DESTROY ------------------ */\n\n ngOnDestroy(): void {\n if (this.chartInstance) {\n this.chartInstance.off();\n this.chartInstance.dispose();\n }\n }\n}\n","<div\n class=\"bar-chart-shell\"\n [class.bar-chart-shell--legend-left]=\"config.customLegend?.position === 'left'\"\n [class.bar-chart-shell--legend-right]=\"config.customLegend?.position === 'right'\"\n [class.bar-chart-shell--legend-bottom]=\"config.customLegend?.position === 'bottom'\"\n>\n @if (\n !config.hideLegend &&\n config.customLegend?.position !== 'bottom' &&\n config.customLegend?.position !== 'right'\n ) {\n <lib-chart-legend\n class=\"bar-chart-shell__legend\"\n [class.line-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--line-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n\n <div\n #chartContainer\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n (chartInit)=\"onChartInit($event)\"\n class=\"chart-container\"\n ></div>\n\n @if (\n !config.hideLegend &&\n (config.customLegend?.position === 'bottom' || config.customLegend?.position === 'right')\n ) {\n <lib-chart-legend\n class=\"bar-chart-shell__legend\"\n [class.line-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--line-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n</div>\n@if (config.showZoomSlider) {\n <div class=\"zoom-controls\" [style]=\"config.zoomControlButtonStyle\">\n <button (click)=\"moveLeft()\"><img src=\"images/leftArrow.svg\" alt=\">\" /></button>\n <button (click)=\"moveRight()\"><img src=\"images/rightArrow.svg\" alt=\"<\" /></button>\n </div>\n}\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"contextMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n SimpleChanges,\n HostListener,\n ChangeDetectorRef,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport { PieChart as EPieChart } from 'echarts/charts';\nimport { TitleComponent, TooltipComponent, LegendComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { RightClickCard } from '../right-click-card';\nimport { PieChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\n\necharts.use([EPieChart, TitleComponent, TooltipComponent, LegendComponent, CanvasRenderer]);\n@Component({\n selector: 'lib-pie-chart',\n imports: [NgxEchartsDirective, RightClickCard],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './pie-chart.html',\n styleUrl: './pie-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PieChart {\n /* -------------------- Inputs -------------------- */\n\n @Input() config!: PieChartConfig;\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() cardOptions: any[] = [];\n\n /* -------------------- Outputs -------------------- */\n\n @Output() chartEvent = new EventEmitter<{ type: string; data: any }>();\n @Output() cardOptionClick = new EventEmitter<any>();\n\n /* -------------------- Local State -------------------- */\n\n chartOption!: EChartsCoreOption;\n private chartInstance!: ECharts;\n\n openCard = false;\n cardPosition = { x: 0, y: 0 };\n\n constructor(\n private chartService: Charts,\n private cdr: ChangeDetectorRef,\n ) {}\n\n /* -------------------- Lifecycle -------------------- */\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n // If theme changes → dispose instance\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n\n this.buildOption();\n }\n\n ngOnDestroy(): void {\n if (this.chartInstance) {\n this.chartInstance.off();\n this.chartInstance?.dispose();\n }\n }\n\n /* -------------------- Chart Init -------------------- */\n\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n this.bindEvents();\n }\n\n /* -------------------- Build Option -------------------- */\n\n private buildOption(): void {\n const total = this.config.data?.reduce((sum, item) => sum + item.value, 0);\n\n this.chartOption = {\n backgroundColor: this.config?.backgroundColor ?? 'transparent',\n\n title: {\n show: this.config.showTitle ?? !!this.config.title,\n text: this.config.title,\n left: this.config.titlePosition ?? 'center',\n },\n\n tooltip: {\n show: this.config.showTooltip ?? true,\n trigger: 'item',\n backgroundColor: 'transparent', // remove default box\n borderWidth: 0,\n padding: 0,\n confine: true,\n formatter: (params: any) =>\n this.config.tooltipFormatter\n ? this.config.tooltipFormatter(params, this.config)\n : this.chartService.pieTooltipFormatter(params, this.config),\n },\n\n legend: { show: false },\n\n graphic:\n this.chartInstance && !this.config.hideLegend\n ? this.chartService.buildGraphicLegend(total, this.config, this.chartInstance)\n : undefined,\n\n series: [\n {\n type: 'pie',\n top: this.config.top ?? 0,\n bottom: this.config.bottom ?? 0,\n radius: this.config.radius ?? '60%',\n center: this.config.center ?? ['50%', '50%'],\n data: this.config?.data || [],\n color: this.config.colors,\n\n label: {\n show: this.config.showLabel ?? false,\n position: this.config.labelPosition ?? 'outside',\n formatter: (params: any) => {\n const percent = ((params.value / total) * 100).toFixed(1);\n\n let text = params.name;\n if (this.config.showLabelValue) text += `\\n${params.value}`;\n if (this.config.showLabelPercentage) text += `\\n${percent}%`;\n\n return text;\n },\n },\n\n itemStyle: {\n borderRadius: this.config.borderRadius ?? 0,\n borderColor: this.config.borderColor ?? '#fff',\n borderWidth: this.config.borderWidth ?? 0,\n },\n\n emphasis:\n (this.config.enableHoverEffect ?? true)\n ? {\n itemStyle: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n },\n }\n : undefined,\n },\n ],\n };\n }\n\n /* -------------------- Events -------------------- */\n\n private bindEvents(): void {\n if (!this.chartInstance) return;\n\n this.chartInstance.off();\n\n this.events.forEach((eventName) => {\n this.chartInstance.on(eventName, (params: any) => {\n if (eventName === 'contextmenu') {\n params.event?.event?.preventDefault();\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: params.event.event.clientX - rect.left,\n y: params.event.event.clientY - rect.top,\n };\n\n this.openCard = true;\n this.cdr.markForCheck();\n }\n\n this.chartEvent.emit({ type: eventName, data: params });\n });\n });\n }\n\n onMenuClick(item: any) {\n this.cardOptionClick.emit(item);\n this.closeCard();\n }\n\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n}\n","<div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\"\n></div>\n\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"cardOptions\"\n [cardPosition]=\"cardPosition\"\n (contextMenuClick)=\"onMenuClick($event)\"\n >\n </lib-right-click-card>\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n SimpleChanges,\n HostListener,\n ChangeDetectorRef,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport { PieChart as EPieChart } from 'echarts/charts';\nimport { TitleComponent, TooltipComponent, LegendComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { RightClickCard } from '../right-click-card';\nimport { ChartLegendComponent } from '../chart-legend';\nimport type { ChartLegendEvent } from '../chart-legend';\nimport { DoughnutChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\n\necharts.use([EPieChart, TitleComponent, TooltipComponent, LegendComponent, CanvasRenderer]);\n\n@Component({\n selector: 'lib-doughnut-chart',\n imports: [NgxEchartsDirective, RightClickCard, ChartLegendComponent],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './doughnut-chart.html',\n styleUrl: './doughnut-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DoughnutChart {\n @Input() config!: DoughnutChartConfig;\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() contextMenuOptions: any[] = [];\n @Input() showContextMenu: boolean = false;\n\n @Output() contextMenuClick = new EventEmitter<any>();\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n @Output() legendEvent = new EventEmitter<ChartLegendEvent>();\n cardPosition = { x: 0, y: 0 };\n openCard: boolean = false;\n chartOption!: EChartsCoreOption;\n chartInstance!: ECharts;\n constructor(\n private chartService: Charts,\n private cdr: ChangeDetectorRef,\n ) {}\n\n get deafultColors() {\n return this.chartService.defaultColors;\n }\n /* ------------------ CONFIG CHANGE ------------------ */\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n // If theme changes → dispose instance\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n // Rebuild option when config changes\n this.buildOption();\n }\n // card open on right click\n /**\n * @description Determines whether menu click on\n * @author Shiva Kant\n * @param item\n */\n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n\n this.closeCard();\n }\n\n /**\n * @description Hosts listener\n * @author Shiva Kant\n */\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n /* ------------------ OPTION BUILDER ------------------ */\n /**\n * @description Builds option\n * @author Shiva Kant\n * @param config\n * @returns option\n */\n buildOption() {\n const selected = this.readLegendSelected();\n const selectedMode = this.config?.customLegend?.selectionMode === 'exclusive' ? 'single' : true;\n\n const total = this.config?.data?.reduce((sum, item) => sum + item.value, 0);\n const seriesData = (this.config?.data || [])?.map((d) => ({\n ...d,\n ...(!d.value && {\n itemStyle: {\n color: total === 0 ? '#d3d3d3' : undefined,\n borderWidth: total == 0 ? (this.config.borderWidth ?? 2) : 0,\n },\n }), // grey\n }));\n\n const innerRadius = this.config.innerRadius ?? '70%';\n const outerRadius = this.config.outerRadius ?? '90%';\n\n this.chartOption = {\n backgroundColor: this.config?.backgroundColor || 'transparent',\n color: this.config.colors ?? this.chartService.defaultColors,\n title: {\n show: this.config.showTitle ?? !!this.config.title,\n text: this.config.title,\n left: this.config.titlePosition || 'center',\n },\n tooltip: {\n show: this.config.showTooltip ?? true,\n trigger: 'item',\n backgroundColor: 'transparent', // remove default box\n borderWidth: 0,\n padding: 0,\n confine: true,\n formatter: (params: any) =>\n this.config.tooltipFormatter\n ? this.config.tooltipFormatter(params, this.config)\n : this.chartService.pieTooltipFormatter(params, this.config),\n ...this.config.tooltip,\n },\n\n legend: {\n show: false,\n data: (this.config?.data ?? []).map((series) => series.name),\n selected,\n selectedMode,\n },\n\n series: this.config.series?.length\n ? this.config.series.map((s) => {\n return { type: 'pie', ...s };\n })\n : [\n {\n type: 'pie',\n top: this.config.top ?? 0,\n bottom: this.config.bottom ?? 0,\n radius: [innerRadius, outerRadius],\n center: this.config.center ?? ['50%', '50%'],\n data: seriesData,\n\n // label: {\n // show: this.config.showLabel ?? false,\n // position: this.config.labelPosition ?? 'outside',\n // },\n\n label: {\n show: this.config?.centerLabel?.show ?? false,\n position: 'center',\n formatter: (value: any) => {\n if (this.config?.centerLabel?.formatter) {\n return this.config.centerLabel.formatter(value, total, this.config.data);\n }\n const title = this.config?.centerLabel?.title || '';\n const centerValue = this.config?.centerLabel?.value;\n return `{title|${title}}${\n centerValue !== undefined && centerValue !== null && centerValue !== ''\n ? `\\n{desc|${centerValue}}`\n : ''\n }`;\n },\n rich: {\n title: {\n fontSize: this.config?.centerLabel?.fontSizeTitle || 12,\n fontWeight: this.config?.centerLabel?.fontWeightTitle || 400,\n color: this.config?.centerLabel?.titleColor || '#111827',\n lineHeight: this.config?.centerLabel?.titleLineheight || 20,\n },\n\n desc: {\n fontSize: this.config?.centerLabel?.fontSizeValue || 12,\n fontWeight: this.config?.centerLabel?.fontWeightValue || 600,\n color: this.config?.centerLabel?.valueColor || '#6B7280',\n lineHeight: this.config?.centerLabel?.valueLineheight || 20,\n },\n },\n ...(this.config?.label || {}),\n },\n\n itemStyle: {\n borderRadius: this.config.borderRadius ?? 8,\n borderColor: this.config.borderColor || '#fff',\n borderWidth: this.config.borderWidth ?? 2,\n },\n emphasis: {\n scale: this.config.emphasisScale,\n },\n },\n ],\n };\n }\n\n get hasSideLegendWidth(): boolean {\n return this.isSideLegend && !!this.config.customLegend?.maxWidth;\n }\n\n get legendShellMaxWidth(): string | null {\n return this.isSideLegend ? (this.config.customLegend?.maxWidth ?? null) : null;\n }\n\n private get isSideLegend(): boolean {\n return (\n this.config.customLegend?.position === 'left' ||\n this.config.customLegend?.position === 'right'\n );\n }\n\n onLegendEvent(event: ChartLegendEvent): void {\n this.legendEvent.emit(event);\n this.chartEvent.emit({\n type: `legend:${event.type}`,\n data: event,\n });\n }\n\n private readLegendSelected(): Record<string, boolean> {\n const option = this.chartInstance?.getOption?.() as\n | { legend?: Array<{ selected?: Record<string, boolean> }> }\n | undefined;\n\n return { ...(option?.legend?.[0]?.selected ?? {}) };\n }\n\n /* ------------------ INIT ------------------ */\n /**\n * @description Determines whether chart init on\n * @author Shiva Kant\n * @param ec\n * @param [container]\n */\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n this.bindEvents();\n }\n @HostListener('window:resize')\n onResize() {\n this.chartInstance?.resize();\n }\n /* ------------------ EVENTS ------------------ */\n /**\n * @description Binds events\n * @author Shiva Kant\n * @returns\n */\n private bindEvents() {\n if (!this.chartInstance) return;\n this.chartInstance.off();\n\n // Existing chart events\n this.events.forEach((eventName) => {\n if (eventName === 'contextmenu') {\n this.chartInstance.on('contextmenu', (params: any) => {\n const event = params?.event?.event;\n if (event) {\n event.preventDefault();\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n };\n\n this.openCard = true;\n\n this.cdr.markForCheck();\n }\n this.chartEvent.emit({\n type: 'contextmenu',\n data: params,\n });\n });\n const zr = this.chartInstance.getZr();\n zr.on('contextmenu', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n\n nativeEvent.preventDefault();\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: nativeEvent.clientX - rect.left,\n y: nativeEvent.clientY - rect.top,\n };\n\n this.openCard = true;\n this.cdr.markForCheck();\n\n this.chartEvent.emit({\n type: 'contextmenu',\n data: { ...zrEvent, isZrEvent: true },\n });\n }\n });\n } else if (eventName === 'click') {\n this.chartInstance.on('click', (params: any) => {\n this.chartEvent.emit({\n type: 'click',\n data: params,\n });\n });\n const zr = this.chartInstance.getZr();\n zr.on('click', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n nativeEvent.preventDefault();\n this.chartEvent.emit({\n type: 'blur',\n data: { ...zrEvent, type: 'blur' },\n });\n }\n });\n } else {\n this.chartInstance.on(eventName, (params: any) => {\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n }\n });\n }\n\n /* ------------------ DESTROY ------------------ */\n ngOnDestroy(): void {\n if (this.chartInstance) {\n this.chartInstance.off();\n this.chartInstance?.dispose();\n }\n }\n}\n","<div\n class=\"doughnut-chart-shell\"\n [class.doughnut-chart-shell--legend-left]=\"config.customLegend?.position === 'left'\"\n [class.doughnut-chart-shell--legend-right]=\"config.customLegend?.position === 'right'\"\n [class.doughnut-chart-shell--legend-bottom]=\"config.customLegend?.position === 'bottom'\"\n>\n @if (\n !config.hideLegend &&\n config.customLegend?.position !== 'bottom' &&\n config.customLegend?.position !== 'right'\n ) {\n <lib-chart-legend\n class=\"doughnut-chart-shell__legend\"\n [class.doughnut-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--doughnut-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.data || []\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n\n <div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\"\n ></div>\n\n @if (\n !config.hideLegend &&\n (config.customLegend?.position === 'bottom' || config.customLegend?.position === 'right')\n ) {\n <lib-chart-legend\n class=\"doughnut-chart-shell__legend\"\n [class.doughnut-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--doughnut-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.data\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n</div>\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"contextMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n","import { Component, Input } from '@angular/core';\nimport * as echarts from 'echarts/core';\nimport { LineChart } from 'echarts/charts';\nimport { GridComponent, TooltipComponent, LegendComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { EChartsCoreOption } from 'echarts/core';\nimport { SimpleChanges } from '@angular/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\necharts.use([LineChart, GridComponent, TooltipComponent, LegendComponent, CanvasRenderer]);\n@Component({\n selector: 'lib-stacked-area-chart',\n imports: [NgxEchartsDirective],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './stacked-area-chart.html',\n styleUrl: './stacked-area-chart.scss',\n})\nexport class StackedAreaChart {\n @Input() data: any;\n @Input() title: string = 'Protocol Traffic Overview';\n\n chartOption!: EChartsCoreOption;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['data']) {\n this.buildChart();\n }\n }\n\n buildChart() {\n this.chartOption = {\n tooltip: {\n trigger: 'axis',\n },\n legend: {\n data: this.data.series.map((s: any) => s.name),\n top: 10,\n },\n grid: {\n left: '3%',\n right: '4%',\n bottom: '3%',\n containLabel: true,\n },\n xAxis: {\n type: 'category',\n boundaryGap: false,\n data: this.data.time,\n },\n yAxis: {\n type: 'value',\n },\n series: this.data.series.map((s: any) => ({\n name: s.name,\n type: s.type??'line',\n smooth: true,\n data: s.values,\n areaStyle: {\n opacity: 0.15,\n },\n })),\n };\n }\n}\n","<div\n echarts\n class=\"chart-container\"\n [options]=\"chartOption\"\n ></div>","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n} from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\n\nimport { CustomChart } from 'echarts/charts';\nimport { GridComponent, TooltipComponent, LegendComponent } from 'echarts/components';\n\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { CustomChartConfig, TimelineTrack, ShiftItem } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\nimport { RightClickCard } from '../right-click-card';\n\necharts.use([CustomChart, GridComponent, TooltipComponent, LegendComponent, CanvasRenderer]);\n@Component({\n selector: 'lib-custom-chart',\n imports: [NgxEchartsDirective, RightClickCard],\n templateUrl: './custom-chart.html',\n styleUrl: './custom-chart.scss',\n providers: [provideEchartsCore({ echarts })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CustomChartComponent implements OnChanges, OnDestroy {\n @Input() config!: CustomChartConfig;\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() contextMenuOptions: any[] = [];\n\n @Output() contextMenuClick = new EventEmitter<any>();\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n cardPosition = { x: 0, y: 0 };\n openCard: boolean = false;\n\n chartOption!: EChartsCoreOption;\n filteredConetxtMenuOptions: any[] = [];\n\n private chartInstance!: ECharts;\n constructor(\n private chartService: Charts,\n private cdr: ChangeDetectorRef,\n ) {}\n\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n this.bindEvents();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n\n this.buildOption();\n }\n\n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n\n this.closeCard();\n }\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n\n private bindEvents() {\n if (!this.chartInstance) return;\n\n this.chartInstance.off();\n\n /* ---- existing chart events ---- */\n this.events.forEach((eventName) => {\n if (eventName === 'contextmenu') {\n /* ---- RIGHT CLICK ANYWHERE IN GRID ---- */\n\n const zr = this.chartInstance.getZr();\n\n zr.off('contextmenu');\n\n zr.on('contextmenu', (event: any) => {\n event.event.preventDefault();\n\n this.filteredConetxtMenuOptions = this.contextMenuOptions.filter(\n (opt) => (opt.showOnTarget && event.target?.type === 'rect') || !opt.showOnTarget,\n );\n\n const point = [event.offsetX, event.offsetY];\n\n // check if click is inside grid\n if (!this.chartInstance.containPixel({ gridIndex: 0 }, point)) return;\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: event.event.clientX - rect.left,\n y: event.event.clientY - rect.top,\n };\n\n this.openCard = true;\n\n this.cdr.markForCheck();\n\n this.chartEvent.emit({\n type: 'contextmenu',\n data: event,\n });\n });\n } else {\n this.chartInstance.on(eventName, (params: any) => {\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n }\n });\n }\n\n // private convertTimeToNumber(time: string): number {\n // const [h, m] = time.split(':').map(Number);\n // return h + m / 60;\n // }\n\n private convertTimeToNumber(time: string): number {\n if (!time) return 0;\n const trimmed = time.trim().toLowerCase();\n const ampmMatch = trimmed.match(/^(\\d{1,2}):(\\d{2})\\s?(am|pm)$/);\n if (ampmMatch) {\n let hours = Number(ampmMatch[1]);\n const minutes = Number(ampmMatch[2]);\n const period = ampmMatch[3];\n\n if (period === 'pm' && hours !== 12) {\n hours += 12;\n }\n if (period === 'am' && hours === 12) {\n hours = 0;\n }\n return hours + minutes / 60;\n }\n\n const match24 = trimmed.match(/^(\\d{1,2}):(\\d{2})$/);\n\n if (match24) {\n const hours = Number(match24[1]);\n const minutes = Number(match24[2]);\n\n return hours + minutes / 60;\n }\n\n return 0;\n }\n\n private is12HourFormat(time?: string): boolean {\n if (!time) return false;\n return /am|pm/i.test(time);\n }\n\n private formatHourLabel(val: number, is12Hour: boolean): string {\n const hour = Math.floor(val);\n if (!is12Hour) {\n return `${hour.toString().padStart(2, '0')}:00`;\n }\n let h = hour;\n const suffix = h >= 12 ? 'PM' : 'AM';\n if (h === 0) h = 12;\n else if (h > 12) h -= 12;\n return `${h}:00 ${suffix}`;\n }\n\n private renderBlock =\n (catIndex: number, isShift = false) =>\n (params: any, api: any) => {\n const categoryIndex = this.config.chartMode === 'weekly' ? catIndex : api.value(0);\n\n const start = api.coord([api.value(1), categoryIndex]);\n const end = api.coord([api.value(2), categoryIndex]);\n const baseHeight = api.size([0, 1])[1];\n\n const height =\n baseHeight * (isShift ? (this.config.shiftHeight ?? 1) : (this.config.barHeight ?? 0.6));\n\n return {\n type: 'rect',\n shape: {\n x: start[0],\n y: start[1] - height / 2,\n width: end[0] - start[0],\n height: height,\n },\n style: api.style(),\n emphasis: {\n style: {\n stroke: '#434A51',\n lineWidth: 1,\n\n shadowBlur: 12,\n shadowColor: '#0A0D124D',\n shadowOffsetX: 4,\n shadowOffsetY: 4,\n },\n },\n };\n };\n\n private buildLegend() {\n const groups = Object.keys(this.config.legends);\n\n const legends: any[] = [];\n let topOffset = 0;\n\n groups.forEach((group) => {\n const items = this.config.legends[group];\n\n if (!items || !items.length) return;\n const names = [\n ...(this.config.hideLegendCategory\n ? []\n : [{ name: group, icon: 'none', itemStyle: { opacity: 0 } }]),\n ...items.map((i: any) => ({\n name: i.name,\n itemStyle: { color: i.color },\n })),\n ];\n\n legends.push({\n top: topOffset,\n left: 0,\n orient: 'horizontal',\n icon: 'roundRect',\n itemGap: 16,\n itemWidth: 12,\n itemHeight: 12,\n data: names,\n\n formatter: (name: string) => {\n if (name === group) {\n return `{title|${name}:}`;\n }\n return name;\n },\n\n textStyle: {\n fontSize: 14,\n rich: {\n title: {\n fontWeight: 'bold',\n padding: [0, 6, 0, -12],\n },\n },\n },\n });\n\n topOffset += 30;\n });\n return legends;\n }\n\n private buildMarkLines(): any {\n const logs = this.config.data?.[0]?.office_entry_logs;\n if (!logs?.length) return undefined;\n\n return {\n silent: true,\n symbol: 'none',\n data: logs.map((log) => ({\n xAxis: this.convertTimeToNumber(log.time),\n label: { formatter: '' },\n lineStyle: {\n color: '#5A5F66',\n type: log.type === 'OUT' ? ([8, 6] as any) : 'solid',\n width: 1,\n },\n })),\n };\n }\n\n private buildOption() {\n if (!this.config?.categories || !this.config?.data) return;\n\n const series: any[] = [];\n\n const categories = this.config.categories;\n\n /* ---------------- SHIFT DATA ---------------- */\n\n if (\n this.config.chartMode === 'daily' &&\n this.config.data?.length &&\n this.config.data[0]?.shifts?.items?.length\n ) {\n this.config.categories.forEach((cat, index) => {\n const shiftData: any[] = [];\n (this.config.data[0]?.shifts?.items || []).forEach((s: ShiftItem) => {\n shiftData.push({\n value: [index, this.convertTimeToNumber(s.start), this.convertTimeToNumber(s.end)],\n itemStyle: {\n color: this.config.shiftColor ?? '#F0F0F0',\n },\n });\n });\n if (shiftData.length) {\n series.push({\n name: this.config.data[0]?.shifts?.name || 'Shift',\n type: 'custom',\n renderItem: this.renderBlock(index, true),\n silent: true,\n z: 0,\n encode: { x: [1, 2], y: 0 },\n data: shiftData,\n });\n }\n });\n }\n\n /* -------- ACTIVITY LINE -------- */\n\n if (\n this.config.chartMode === 'daily' &&\n this.config.data?.length &&\n this.config.data[0]?.activity?.length\n ) {\n this.config.data[0].activity.forEach((act, index) => {\n const activityData: any[] = [];\n const categoryIndex = this.config.categories.indexOf(act.category);\n\n const activityTrack = this.config.legends[act.category]?.find(\n (leg) => leg.name === act.name,\n );\n let trackColor = '#C8DFF9';\n if (activityTrack) {\n trackColor = activityTrack?.color || '#C8DFF9';\n }\n if (categoryIndex === -1) return;\n\n act.items.forEach((p: any, i: number) => {\n const y =\n categoryIndex +\n p.value * (this.config.barHeight ?? 0.6) +\n (1 - (this.config.barHeight ?? 0.6)) / 2;\n\n activityData.push([this.convertTimeToNumber(p.time), y]);\n });\n if (activityData.length) {\n series.push({\n name: act.name,\n type: 'line',\n symbol: 'none',\n yAxisIndex: 1,\n z: 3,\n lineStyle: {\n width: 1,\n color: trackColor,\n },\n\n data: activityData,\n });\n }\n });\n }\n\n /* ---------------- TRACK SERIES ---------------- */\n this.config.data.forEach((data, index) => {\n if (this.config.chartMode === 'weekly' && data.shifts && data.shifts.items.length) {\n const shiftData: any[] = [];\n\n (data.shifts.items || []).forEach((s: ShiftItem) => {\n shiftData.push({\n value: [index, this.convertTimeToNumber(s.start), this.convertTimeToNumber(s.end)],\n itemStyle: {\n color: this.config.shiftColor ?? '#F0F0F0',\n },\n });\n });\n if (shiftData.length) {\n series.push({\n name: 'Shift',\n type: 'custom',\n renderItem: this.renderBlock(index, true),\n silent: true,\n z: 0,\n encode: { x: [1, 2], y: 0 },\n data: shiftData,\n });\n }\n }\n\n const activityData: any[] = [];\n if (this.config.chartMode === 'weekly' && data.activity && data.activity[0]?.items?.length) {\n const act = data.activity[0];\n const activityTrack = this.config.legends[act.category]?.find(\n (leg) => leg.name === act.name,\n );\n let trackColor = '#C8DFF9';\n if (activityTrack) {\n trackColor = activityTrack?.color || '#C8DFF9';\n }\n\n act.items.forEach((p: any, i: number) => {\n const y =\n index +\n p.value * (this.config.barHeight ?? 0.6) +\n (1 - (this.config.barHeight ?? 0.6)) / 2;\n\n activityData.push([this.convertTimeToNumber(p.time), y]);\n });\n if (activityData.length) {\n series.push({\n name: act.name,\n type: 'line',\n symbol: 'none',\n yAxisIndex: 1,\n z: 3,\n lineStyle: {\n width: 1,\n color: trackColor,\n },\n\n data: activityData,\n });\n }\n }\n\n data.tracks.forEach((track: TimelineTrack) => {\n if (!this.config.hideLegendCategory) {\n series.push({ name: track.category, type: 'custom', renderItem: () => {}, data: [] });\n }\n track.items.forEach((item) => {\n series.push({\n name: item.type,\n type: 'custom',\n renderItem: this.renderBlock(index, false),\n encode: { x: [1, 2], y: 0 },\n z: 2,\n data: [\n {\n ...item,\n category: track.category,\n value: [\n categories.indexOf(track.category),\n this.convertTimeToNumber(item.start),\n this.convertTimeToNumber(item.end),\n ],\n itemStyle: {\n color: this.config.legends[track.category]?.find((leg) => leg.name === item.type)\n ?.color,\n },\n type: item.type,\n },\n ],\n });\n });\n });\n });\n\n /* ---------------- CHART OPTION ---------------- */\n const is12Hour =\n this.is12HourFormat(this.config.startHour) || this.is12HourFormat(this.config.endHour);\n this.chartOption = {\n tooltip: {\n trigger: 'item',\n backgroundColor: 'transparent',\n borderWidth: 0,\n padding: 0,\n extraCssText: 'box-shadow:none;',\n formatter: (params: any) => {\n const tooltipCategories = this.config.tooltipCategories;\n\n if (tooltipCategories?.length && !tooltipCategories.includes(params.data?.category))\n return '';\n\n if (this.config.tooltipFormatter) {\n const formattedString = this.config.tooltipFormatter(params, this.config);\n if (this.config.darkTooltip)\n return `<div style=\"background-color: #111827; color: #fff; padding: 6px 12px; border-radius: 6px; font-size: 13px; font-family: inherit; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); white-space: nowrap;\">${formattedString}</div>`;\n return formattedString;\n }\n\n return this.chartService.timelineChartTooltipFormatter(params);\n },\n ...this.config.tooltip,\n },\n legend: this.buildLegend(),\n\n grid: {\n left: 0,\n right: 0,\n bottom: 0,\n top: Object.keys(this.config.legends).length * 30,\n },\n\n xAxis: {\n type: 'value',\n min: this.config.startHour\n ? Math.floor(this.convertTimeToNumber(this.config.startHour))\n : 0,\n max: this.config.endHour ? Math.ceil(this.convertTimeToNumber(this.config.endHour)) : 24,\n axisLine: {\n show: false,\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n lineStyle: {\n width: 0.5,\n color: '#C0C2C5',\n },\n },\n minorSplitLine: {\n show: true,\n lineStyle: {\n width: 0.2,\n color: '#DADBDC',\n },\n },\n minorTick: { splitNumber: 4 },\n interval: 1,\n // axisLabel: {\n // formatter: (val: number) => `${val}:00`,\n // },\n axisLabel: {\n hideOverlap: true,\n formatter: (val: number) => this.formatHourLabel(val, is12Hour),\n },\n },\n\n yAxis: [\n {\n type: 'category',\n data: this.config.yAxisData,\n axisLine: {\n show: false,\n },\n },\n {\n type: 'value',\n min: 0,\n max: this.config.yAxisData.length,\n show: false,\n },\n ],\n\n series,\n };\n\n const markLines = this.buildMarkLines();\n if (markLines) {\n series.push({\n type: 'custom',\n silent: true,\n z: 10,\n data: [],\n markLine: markLines,\n });\n }\n }\n\n ngOnDestroy(): void {\n this.chartInstance?.dispose();\n }\n}\n","<div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\"\n></div>\n@if (openCard && filteredConetxtMenuOptions.length > 0) {\n <lib-right-click-card\n [cardOptions]=\"filteredConetxtMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n AfterViewInit,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n HostListener,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport * as echarts from 'echarts/core';\nimport { EChartsCoreOption } from 'echarts';\nimport {\n SankeyChartConfig,\n SankeyLegendAggregation,\n SankeyLegendItem,\n SankeyLink,\n SankeyNode,\n SankeyTextCase,\n} from '../../modal/charts-modal';\nimport { ChartLegendComponent, ChartLegendConfig, ChartLegendEvent } from '../chart-legend';\nimport { LegendComponent, TooltipComponent, TitleComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { SankeyChart as SankeyChartEchart } from 'echarts/charts';\nimport { Charts } from '../../service/charts';\nimport { RightClickCard } from '../right-click-card';\necharts.use([SankeyChartEchart, TooltipComponent, TitleComponent, LegendComponent, CanvasRenderer]);\n\ntype SankeyNodeRole = 'source' | 'middle' | 'destination';\n\ninterface SankeyNodeMeta {\n name: string;\n depth: number;\n role: SankeyNodeRole;\n value: number;\n}\n\n@Component({\n selector: 'lib-sankey-chart',\n imports: [CommonModule, NgxEchartsDirective, ChartLegendComponent, RightClickCard],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './sankey-chart.html',\n styleUrl: './sankey-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SankeyChart implements AfterViewInit, OnChanges, OnDestroy {\n @Input() config!: SankeyChartConfig;\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() contextMenuOptions: any[] = [];\n\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n @Output() legendEvent = new EventEmitter<ChartLegendEvent>();\n @Output() contextMenuClick = new EventEmitter<any>();\n cardPosition = { x: 0, y: 0 };\n openCard = false;\n\n constructor(\n private chartService: Charts,\n private cdr: ChangeDetectorRef,\n private hostElement: ElementRef<HTMLElement>,\n ) {}\n\n chartOption: EChartsCoreOption = {};\n chartInstance!: echarts.ECharts;\n sourceToggleItems: Array<{ name: string; hidden: boolean }> = [];\n legendSeries: Array<{ name: string; type: string; color: string; data: number[] }> = [];\n\n private previousReactiveSignature = '';\n private resizeObserver?: ResizeObserver;\n private readonly stopNodeDragPropagation = (event: any): void => {\n // Labels can forward interaction to their node through __hostTarget.\n const node = event.target?.__hostTarget ?? event.target;\n if (!node?.draggable) return;\n\n // ZRender maps mouse, pointer, and touch starts to mousedown. Keep its\n // node dragging active while blocking ancestor drag handlers and the\n // browser's native drag of a draggable parent element.\n event.event?.stopPropagation();\n event.event?.preventDefault();\n };\n\n /* ------------------ CHANGE HANDLING ------------------ */\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n\n this.buildOption();\n }\n\n ngDoCheck(): void {\n if (!this.config) return;\n\n const signature = JSON.stringify({\n styling: this.config.styling,\n seriesOption: this.config.seriesOption,\n legend: this.config.legend,\n colors: this.config.colors,\n lineCurveness: this.config.lineCurveness,\n });\n\n if (signature !== this.previousReactiveSignature) {\n this.previousReactiveSignature = signature;\n this.buildOption();\n }\n }\n\n /* ------------------ OPTION BUILDER ------------------ */\n\n private buildOption() {\n const styling = this.config.styling;\n const palette = this.config.colors ?? this.chartService.defaultColors;\n const allNodeMeta = this.buildNodeMeta(this.config.nodes ?? [], this.config.links ?? []);\n this.sourceToggleItems = this.buildSourceToggleItems(allNodeMeta);\n const hiddenSources = this.hiddenSourceSet();\n const visibleLinks = this.visibleLinks(this.config.links ?? [], hiddenSources);\n const visibleNodes = this.visibleNodes(this.config.nodes ?? [], visibleLinks, hiddenSources);\n const visibleNodeMeta = this.buildNodeMeta(visibleNodes, visibleLinks);\n const totalValue = this.totalSourceValue(visibleLinks, visibleNodeMeta);\n this.legendSeries = this.buildLegendSeries(visibleNodeMeta, visibleLinks, palette);\n const selected = this.readLegendSelected();\n const nodeOpacity = this.percentToRatio(styling?.node?.opacity, 100);\n const labelTypography = styling?.labels?.typography;\n const fontColor = this.withOpacity(\n labelTypography?.reset ? undefined : labelTypography?.color,\n this.percentToRatio(labelTypography?.reset ? undefined : labelTypography?.opacity, 100),\n '#333',\n );\n\n const label = {\n show: styling?.labels?.showLabels ?? true,\n // Keep labels within the space between Sankey columns. ECharts then\n // adds an ellipsis whenever a larger font, wider node, or long name\n // does not fit.\n width: this.resolveSankeyLabelWidth(visibleNodeMeta),\n overflow: 'truncate',\n ellipsis: '...',\n color: fontColor,\n fontFamily: labelTypography?.reset ? undefined : labelTypography?.fontFamily,\n fontSize: this.clamp(\n labelTypography?.reset ? undefined : labelTypography?.fontSize,\n 8,\n 40,\n ),\n fontWeight: labelTypography?.reset\n ? undefined\n : labelTypography?.bold\n ? 'bold'\n : undefined,\n fontStyle: labelTypography?.reset\n ? undefined\n : labelTypography?.italic\n ? 'italic'\n : undefined,\n textDecoration: labelTypography?.reset\n ? undefined\n : labelTypography?.underline\n ? 'underline'\n : undefined,\n position: this.resolveLabelPosition(),\n formatter: (params: any) =>\n this.formatNodeLabel(\n String(params.name ?? ''),\n visibleNodeMeta.get(String(params.name ?? '')),\n totalValue,\n ),\n };\n const labelMargins = this.resolveSankeyLabelMargins(visibleNodes, label, visibleNodeMeta);\n\n this.chartOption = {\n backgroundColor: this.config?.backgroundColor || 'transparent',\n color: palette,\n title: {\n show: this.config.showTitle ?? !!this.config.title,\n text: this.config.title,\n left: 'center',\n },\n legend: {\n show: false,\n data: this.legendSeries.map((item) => item.name),\n selected,\n selectedMode: true,\n },\n\n tooltip: {\n show: this.config.showTooltip,\n trigger: 'item',\n triggerOn: 'mousemove',\n backgroundColor: 'transparent', // important for custom card\n borderWidth: 0,\n extraCssText: 'box-shadow:none;', // remove default shadow\n formatter: (params: any) =>\n this.config.tooltipFormatter\n ? this.config.tooltipFormatter(params)\n : this.chartService.sankeyTooltipFormatter(params, this.config),\n },\n series: [\n {\n ...this.config.seriesOption,\n ...labelMargins,\n type: 'sankey',\n ...((styling?.node?.thickness ?? this.config.seriesOption?.nodeWidth)\n ? {\n nodeWidth: this.clamp(\n styling?.node?.thickness ?? this.config.seriesOption?.nodeWidth,\n 1,\n 50,\n ),\n }\n : {}),\n\n ...((styling?.node?.padding ?? this.config.seriesOption?.nodeGap)\n ? {\n nodeGap: this.clamp(\n styling?.node?.padding ?? this.config.seriesOption?.nodeGap,\n 0,\n 100,\n ),\n }\n : {}),\n data: visibleNodes.map((n, index) => {\n const nodeStyle = this.resolveSingleNodeStyle(n.name);\n return {\n ...n,\n name: n.name,\n label: this.mergeSingleNodeLabel(n, nodeStyle?.label, visibleNodeMeta.get(n.name)),\n itemStyle: {\n color: this.resolveNodeColor(n, visibleNodeMeta.get(n.name), index, palette),\n opacity: nodeOpacity,\n ...(this.config.seriesOption?.itemStyle || {}),\n ...(styling?.itemStyle || {}),\n ...(nodeStyle?.itemStyle || {}),\n ...(n.itemStyle || {}),\n },\n };\n }),\n\n links: visibleLinks.map((link) => {\n const dynamicLinkColor = this.resolveLinkColor(link, visibleNodeMeta);\n return {\n ...link,\n lineStyle: {\n color: dynamicLinkColor,\n curveness: this.config.lineCurveness ?? 0.5,\n opacity: dynamicLinkColor === 'gradient' ? 0.35 : 0.45,\n ...(this.config.seriesOption?.lineStyle || {}),\n ...(styling?.lineStyle || {}),\n ...(link.lineStyle || {}),\n },\n };\n }),\n levels: [\n {\n depth: this.chartService.getSankeyLevels(visibleNodes, visibleLinks),\n label: { position: this.resolveLabelPosition() },\n },\n ],\n lineStyle: {\n curveness: this.config.lineCurveness ?? 0.5,\n opacity: 0.3,\n ...(this.config.seriesOption?.lineStyle || {}),\n ...(styling?.lineStyle || {}),\n },\n\n label,\n },\n ],\n };\n\n if (this.chartInstance) {\n this.chartInstance.setOption(this.chartOption, true);\n }\n this.cdr.markForCheck();\n }\n\n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n this.closeCard();\n }\n\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n\n get showNodeToggles(): boolean {\n return this.config?.styling?.nodesOff?.showControls === true;\n }\n\n get showLegend(): boolean {\n return this.isLegendEnabled();\n }\n\n get legendPosition(): 'top' | 'bottom' | 'left' | 'right' {\n return this.config?.styling?.legend?.position ?? 'bottom';\n }\n\n get isSideLegend(): boolean {\n return this.legendPosition === 'left' || this.legendPosition === 'right';\n }\n\n get legendConfig(): ChartLegendConfig<any> {\n const config = this.config?.styling?.legend;\n const text = config?.text;\n const titleStyle = config?.titleStyle;\n const showValueLabels = config?.showValueLabels === true;\n\n return {\n enabled: this.showLegend,\n position: config?.position ?? 'bottom',\n align: config?.align ?? 'center',\n layout: this.isSideLegend ? 'vertical' : 'horizontal',\n scrollable: true,\n title: config?.title,\n legendTitleTextColor: titleStyle?.color,\n legendTitleFontSize: this.clamp(titleStyle?.fontSize, 8, 40),\n legendTitleFontFamily: titleStyle?.fontFamily,\n legendTitleFontWeight: titleStyle?.bold ? 'bold' : undefined,\n legendTitleFontStyle: titleStyle?.italic ? 'italic' : undefined,\n legendTitleTextDecoration: titleStyle?.underline ? 'underline' : undefined,\n legendTitleTransform: titleStyle?.case === 'none' ? undefined : titleStyle?.case,\n // Sankey legends are informational: selecting an item must not hide a flow.\n preventLegendClickDefault: true,\n hoverLink: false,\n legendType: config?.legendType ?? config?.style ?? 'marker',\n icon: config?.icon ?? 'circle',\n // Use a strict boolean check because configuration values can arrive as the\n // string \"false\" from form controls; that must not be rendered as a value.\n showValue: showValueLabels,\n legendTextColor: text?.color,\n legendFontSize: this.clamp(text?.fontSize, 8, 40),\n legendFontFamily: text?.fontFamily,\n legendFontWeight: text?.bold ? 'bold' : undefined,\n legendFontStyle: text?.italic ? 'italic' : undefined,\n legendTextDecoration: text?.underline ? 'underline' : undefined,\n ...(showValueLabels\n ? {\n valueFormatter: (item: any) =>\n this.aggregateLegendValue(item?.raw?.data ?? [], config?.aggregation),\n }\n : {}),\n };\n }\n\n toggleSourceNode(name: string, visible: boolean): void {\n const current = this.config.styling?.nodesOff?.hiddenSources ?? {};\n const hiddenSources = { ...current, [name]: !visible };\n\n if (!this.config.styling) {\n this.config.styling = {};\n }\n this.config.styling = {\n ...this.config.styling,\n nodesOff: {\n ...this.config.styling.nodesOff,\n enabled: true,\n hiddenSources,\n },\n };\n this.buildOption();\n }\n\n onLegendEvent(event: ChartLegendEvent): void {\n this.legendEvent.emit(event);\n this.chartEvent.emit({\n type: `legend:${event.type}`,\n data: event,\n });\n }\n\n private buildNodeMeta(nodes: SankeyNode[], links: SankeyLink[]): Map<string, SankeyNodeMeta> {\n const names = new Set(nodes.map((node) => node.name));\n links.forEach((link) => {\n names.add(link.source);\n names.add(link.target);\n });\n\n const incoming = new Map<string, SankeyLink[]>();\n const outgoing = new Map<string, SankeyLink[]>();\n links.forEach((link) => {\n incoming.set(link.target, [...(incoming.get(link.target) ?? []), link]);\n outgoing.set(link.source, [...(outgoing.get(link.source) ?? []), link]);\n });\n\n const depth = new Map<string, number>();\n [...names].forEach((name) => {\n if (!incoming.has(name)) depth.set(name, 0);\n });\n\n let changed = true;\n while (changed) {\n changed = false;\n links.forEach((link) => {\n const sourceDepth = depth.get(link.source);\n if (sourceDepth === undefined) return;\n const targetDepth = Math.max(depth.get(link.target) ?? 0, sourceDepth + 1);\n if (targetDepth !== depth.get(link.target)) {\n depth.set(link.target, targetDepth);\n changed = true;\n }\n });\n }\n\n const maxDepth = Math.max(...[...names].map((name) => depth.get(name) ?? 0), 0);\n const meta = new Map<string, SankeyNodeMeta>();\n [...names].forEach((name) => {\n const inValue = (incoming.get(name) ?? []).reduce(\n (sum, link) => sum + Number(link.value || 0),\n 0,\n );\n const outValue = (outgoing.get(name) ?? []).reduce(\n (sum, link) => sum + Number(link.value || 0),\n 0,\n );\n const nodeDepth = depth.get(name) ?? 0;\n const isSource = !incoming.has(name) || nodeDepth === 0;\n const isDestination = !outgoing.has(name) || nodeDepth === maxDepth;\n meta.set(name, {\n name,\n depth: nodeDepth,\n role: isSource ? 'source' : isDestination ? 'destination' : 'middle',\n value: Math.max(inValue, outValue),\n });\n });\n\n return meta;\n }\n\n private buildSourceToggleItems(meta: Map<string, SankeyNodeMeta>) {\n const hiddenSources = this.hiddenSourceSet();\n return [...meta.values()]\n .filter((node) => node.role === 'source')\n .map((node) => ({ name: node.name, hidden: hiddenSources.has(node.name) }));\n }\n\n private hiddenSourceSet(): Set<string> {\n const nodesOff = this.config?.styling?.nodesOff;\n if (nodesOff?.enabled === false) return new Set();\n\n return new Set(\n Object.entries(nodesOff?.hiddenSources ?? {})\n .filter(([, hidden]) => hidden)\n .map(([name]) => name),\n );\n }\n\n private visibleLinks(links: SankeyLink[], hiddenSources: Set<string>): SankeyLink[] {\n if (!hiddenSources.size) return links;\n return links.filter(\n (link) => !hiddenSources.has(link.source) && !hiddenSources.has(link.target),\n );\n }\n\n private visibleNodes(\n nodes: SankeyNode[],\n links: SankeyLink[],\n hiddenSources: Set<string>,\n ): SankeyNode[] {\n const linkedNames = new Set<string>();\n links.forEach((link) => {\n linkedNames.add(link.source);\n linkedNames.add(link.target);\n });\n\n return nodes.filter((node) => !hiddenSources.has(node.name) && linkedNames.has(node.name));\n }\n\n private resolveNodeColor(\n node: SankeyNode,\n meta: SankeyNodeMeta | undefined,\n index: number,\n palette: string[],\n ): string {\n const styling = this.config.styling;\n const nodeStyle = this.config.styling?.nodeStyles?.[node.name];\n if (nodeStyle?.color) {\n return this.withOpacity(nodeStyle.color, this.percentToRatio(nodeStyle.opacity, 100));\n }\n\n if (styling?.colorBy === 'single') {\n return this.withOpacity(\n styling.singleColor?.color,\n this.percentToRatio(styling.singleColor?.opacity, 100),\n );\n }\n\n if (styling?.colorBy === 'individual' && meta) {\n const colorStop =\n meta.role === 'source'\n ? styling.individualColors?.source\n : meta.role === 'destination'\n ? styling.individualColors?.destination\n : (styling.individualColors?.middle?.[meta.depth] ??\n styling.individualColors?.middle?.[String(meta.depth)]);\n\n if (colorStop?.color) {\n return this.withOpacity(colorStop.color, this.percentToRatio(colorStop.opacity, 100));\n }\n }\n\n return node.color ?? palette[index % Math.max(palette.length, 1)] ?? '#64748b';\n }\n\n private resolveSingleNodeStyle(name: string) {\n const nodeStyle = this.config.styling?.nodeStyles?.[name];\n if (!nodeStyle) return undefined;\n\n return {\n itemStyle: {\n ...(nodeStyle.color\n ? {\n color: this.withOpacity(nodeStyle.color, this.percentToRatio(nodeStyle.opacity, 100)),\n }\n : {}),\n ...(nodeStyle.opacity !== undefined\n ? { opacity: this.percentToRatio(nodeStyle.opacity, 100) }\n : {}),\n ...(nodeStyle.itemStyle || {}),\n },\n label: nodeStyle.label,\n };\n }\n\n private mergeSingleNodeLabel(\n node: SankeyNode,\n label: SankeyNode['label'] | undefined,\n meta?: SankeyNodeMeta,\n ) {\n const alignment = this.config.styling?.labels?.alignment;\n const defaultSourcePosition = meta?.role === 'source' &&\n (!alignment || alignment === 'default');\n if (!label && !node.label && !defaultSourcePosition) return undefined;\n return {\n ...(defaultSourcePosition ? { position: 'right' as const } : {}),\n ...(label || {}),\n ...(node.label || {}),\n };\n }\n\n private resolveLinkColor(link: SankeyLink, meta: Map<string, SankeyNodeMeta>): string {\n const mode = this.config.styling?.linkColor ?? 'gradient';\n if (mode === 'gradient') return 'gradient';\n if (mode === 'default') return '#C0C2C5';\n\n const sourceMeta = meta.get(link.source);\n const targetMeta = meta.get(link.target);\n if (mode === 'source') return this.resolveMetaColor(sourceMeta);\n if (mode === 'destination') return this.resolveMetaColor(targetMeta);\n\n if (sourceMeta?.role === 'middle') return this.resolveMetaColor(sourceMeta);\n if (targetMeta?.role === 'middle') return this.resolveMetaColor(targetMeta);\n return '#C0C2C5';\n }\n\n private resolveMetaColor(meta: SankeyNodeMeta | undefined): string {\n const nodes = this.config.nodes ?? [];\n const palette = this.config.colors ?? this.chartService.defaultColors;\n const index = Math.max(\n nodes.findIndex((node) => node.name === meta?.name),\n 0,\n );\n const node = nodes[index];\n return node?.color ?? palette[index % Math.max(palette.length, 1)] ?? '#64748b';\n }\n\n private formatNodeLabel(\n name: string,\n meta: SankeyNodeMeta | undefined,\n totalValue: number,\n ): string {\n const labels = this.config.styling?.labels;\n const text = this.applyCase(\n name,\n labels?.typography?.reset ? 'none' : labels?.typography?.case,\n );\n const stats: string[] = [];\n\n if (labels?.showNumbers)\n stats.push(\n String(`${labels?.showPercentage ? `(${meta?.value ?? 0})` : (meta?.value ?? 0)}`),\n );\n if (labels?.showPercentage) {\n const percentage = totalValue ? (((meta?.value ?? 0) / totalValue) * 100).toFixed(1) : '0.0';\n stats.push(`${percentage}%`);\n }\n\n if (!stats.length) return text;\n return labels?.splitLabelsAndStats\n ? `${text}\\n${stats.join(' ')}`\n : `${text} ${stats.join(' ')}`;\n }\n\n private resolveLabelPosition(): 'left' | 'right' {\n const alignment = this.config.styling?.labels?.alignment;\n if (alignment === 'left' || alignment === 'right') return alignment;\n return 'left';\n }\n\n private resolveSankeyLabelWidth(meta: Map<string, SankeyNodeMeta>): number {\n const chartWidth = this.chartInstance?.getWidth?.() ?? 0;\n const levelCount = Math.max(...[...meta.values()].map((node) => node.depth), 0) + 1;\n const nodeWidth =\n this.clamp(\n this.config.styling?.node?.thickness ?? this.config.seriesOption?.nodeWidth,\n 1,\n 50,\n ) ?? 20;\n const horizontalPadding = 32;\n const availableWidth = Math.max(chartWidth - horizontalPadding - levelCount * nodeWidth, 0);\n\n // Reserve room for labels at both outer edges as well as between columns.\n return Math.max(0, Math.min(180, Math.floor(availableWidth / Math.max(levelCount * 2 + 2, 1))));\n }\n\n private resolveSankeyLabelMargins(\n nodes: SankeyNode[],\n label: any,\n meta: Map<string, SankeyNodeMeta>,\n ) {\n const width = this.chartInstance?.getWidth() ?? 0;\n const height = this.chartInstance?.getHeight() ?? 0;\n const legend = this.config.styling?.legend;\n const margin = (value: unknown, size: number, fallback: number): number => {\n if (typeof value === 'number') return value;\n if (typeof value === 'string' && value.endsWith('%')) {\n const percent = Number.parseFloat(value);\n if (Number.isFinite(percent)) return (size * percent) / 100;\n }\n return fallback;\n };\n const series = this.config.seriesOption;\n const margins = {\n left: margin(series?.left, width, 16),\n right: margin(series?.right, width, 16),\n top: margin(\n series?.top, height, this.isLegendEnabled() && legend?.position === 'top' ? 32 : 16,\n ),\n bottom: margin(\n series?.bottom, height, this.isLegendEnabled() && legend?.position === 'bottom' ? 32 : 16,\n ),\n };\n\n const measured = nodes.map((node) => {\n const override = this.mergeSingleNodeLabel(\n node, this.resolveSingleNodeStyle(node.name)?.label, meta.get(node.name),\n );\n const effective = {\n ...label,\n ...override,\n };\n const font = `${effective.fontStyle ?? 'normal'} ${effective.fontWeight ?? 'normal'} ${effective.fontSize ?? 12}px ${effective.fontFamily ?? 'sans-serif'}`;\n const text = typeof effective.formatter === 'function'\n ? effective.formatter({ name: node.name, data: node })\n : typeof effective.formatter === 'string'\n ? effective.formatter.replace(/\\{b\\}/g, node.name)\n : node.name;\n const bounds = echarts.format.getTextRect(\n String(text), font, undefined, undefined, effective.padding,\n effective.rich, false, effective.lineHeight,\n );\n return { effective, bounds, customWidth: override?.width };\n });\n\n // Size the shared label box to the text, within the existing truncation cap.\n // This makes outer node positions respond to font and formatted text changes.\n const textWidths = measured\n .filter(({ effective }) => effective.show !== false)\n .map(({ bounds }) => bounds.width);\n label.width = Math.min(label.width, Math.ceil(Math.max(0, ...textWidths)));\n const alignment = this.config.styling?.labels?.alignment;\n const useLabelMargins = alignment === 'left' || alignment === 'right';\n for (const { effective, bounds, customWidth } of measured) {\n if (effective.show === false) continue;\n const labelWidth = typeof customWidth === 'number' ? customWidth : label.width;\n const distance = Number(effective.distance ?? 5);\n if (effective.position === 'left' || effective.position === 'right') {\n // Default labels face into the chart; keep the outer margins at 16px.\n if (useLabelMargins) {\n const side = effective.position as 'left' | 'right';\n margins[side] = Math.max(margins[side], Math.ceil(labelWidth + distance + 8));\n }\n // Split labels and large fonts also need room above and below nodes.\n margins.top = Math.max(margins.top, Math.ceil(bounds.height / 2 + 8));\n margins.bottom = Math.max(margins.bottom, Math.ceil(bounds.height / 2 + 8));\n }\n }\n return margins;\n }\n\n private totalSourceValue(links: SankeyLink[], meta: Map<string, SankeyNodeMeta>): number {\n const sourceNames = new Set(\n [...meta.values()].filter((node) => node.role === 'source').map((node) => node.name),\n );\n const total = links\n .filter((link) => sourceNames.has(link.source))\n .reduce((sum, link) => sum + Number(link.value || 0), 0);\n return total || links.reduce((sum, link) => sum + Number(link.value || 0), 0);\n }\n\n private buildLegendSeries(\n meta: Map<string, SankeyNodeMeta>,\n links: SankeyLink[],\n palette: string[],\n ): Array<{ name: string; type: string; color: string; data: number[] }> {\n const configuredLegend = this.config.legend;\n const items: SankeyLegendItem[] = configuredLegend?.length\n ? configuredLegend\n : [...meta.values()].map((node, index) => ({\n name: node.name,\n color: this.resolveMetaColor(node) ?? palette[index % Math.max(palette.length, 1)],\n value: node.value,\n }));\n\n const linkValuesByName = new Map<string, number[]>();\n links.forEach((link) => {\n linkValuesByName.set(link.source, [...(linkValuesByName.get(link.source) ?? []), link.value]);\n linkValuesByName.set(link.target, [...(linkValuesByName.get(link.target) ?? []), link.value]);\n });\n\n return items.map((item, index) => ({\n name: item.name,\n type: 'sankey-legend',\n color: item.color ?? palette[index % Math.max(palette.length, 1)] ?? '#64748b',\n data: item.value !== undefined ? [item.value] : (linkValuesByName.get(item.name) ?? []),\n }));\n }\n\n private isLegendEnabled(): boolean {\n const legend = this.config?.styling?.legend;\n if (legend?.show === false) return false;\n if (legend?.show !== true) return false;\n return this.legendSeries.length > 1;\n }\n\n private aggregateLegendValue(values: number[], type: SankeyLegendAggregation = 'sum'): string {\n const numericValues = values.map(Number).filter((value) => Number.isFinite(value));\n if (!numericValues.length) return '0';\n\n let result = 0;\n switch (type) {\n case 'average':\n result = numericValues.reduce((sum, value) => sum + value, 0) / numericValues.length;\n break;\n case 'minimum':\n result = Math.min(...numericValues);\n break;\n case 'maximum':\n result = Math.max(...numericValues);\n break;\n case 'count':\n result = numericValues.length;\n break;\n case 'countDistinct':\n result = new Set(numericValues).size;\n break;\n case 'variance': {\n const mean = numericValues.reduce((sum, value) => sum + value, 0) / numericValues.length;\n result =\n numericValues.reduce((sum, value) => sum + (value - mean) * (value - mean), 0) /\n numericValues.length;\n break;\n }\n case 'standardDeviation': {\n const mean = numericValues.reduce((sum, value) => sum + value, 0) / numericValues.length;\n const variance =\n numericValues.reduce((sum, value) => sum + (value - mean) * (value - mean), 0) /\n numericValues.length;\n result = Math.sqrt(variance);\n break;\n }\n case 'sum':\n default:\n result = numericValues.reduce((sum, value) => sum + value, 0);\n break;\n }\n\n return Number.isInteger(result) ? String(result) : result.toFixed(2);\n }\n\n private applyCase(value: string, textCase: SankeyTextCase = 'none'): string {\n switch (textCase) {\n case 'uppercase':\n return value.toUpperCase();\n case 'lowercase':\n return value.toLowerCase();\n case 'capitalize':\n return value.replace(/\\b\\w/g, (char) => char.toUpperCase());\n case 'none':\n default:\n return value;\n }\n }\n\n private withOpacity(color = '#64748b', opacity = 1, fallback = '#64748b'): string {\n const normalized = color || fallback;\n if (opacity >= 1) return normalized;\n\n const hex = normalized.replace('#', '');\n if (![3, 6].includes(hex.length)) return normalized;\n const fullHex =\n hex.length === 3\n ? hex\n .split('')\n .map((part) => `${part}${part}`)\n .join('')\n : hex;\n const value = Number.parseInt(fullHex, 16);\n const red = (value >> 16) & 255;\n const green = (value >> 8) & 255;\n const blue = value & 255;\n return `rgba(${red}, ${green}, ${blue}, ${opacity})`;\n }\n\n private percentToRatio(value: number | undefined, fallback: number): number {\n return Math.min(Math.max(value ?? fallback, 0), 100) / 100;\n }\n\n private clamp(value: number | undefined, min: number, max: number): number | undefined {\n if (value === undefined || value === null || Number.isNaN(value)) return undefined;\n return Math.min(Math.max(value, min), max);\n }\n\n private readLegendSelected(): Record<string, boolean> {\n const option = this.chartInstance?.getOption?.() as\n | { legend?: Array<{ selected?: Record<string, boolean> }> }\n | undefined;\n\n return { ...(option?.legend?.[0]?.selected ?? {}) };\n }\n\n /* ------------------ INIT ------------------ */\n\n onChartInit(ec: echarts.ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n this.bindEvents();\n }\n\n ngAfterViewInit(): void {\n if (typeof ResizeObserver === 'undefined') return;\n\n this.resizeObserver = new ResizeObserver(() => {\n if (!this.chartInstance) return;\n this.chartInstance.resize();\n this.buildOption();\n });\n this.resizeObserver.observe(this.hostElement.nativeElement);\n }\n\n /* ------------------ EVENTS ------------------ */\n\n private bindEvents() {\n if (!this.chartInstance) return;\n\n this.chartInstance.off();\n const zr = this.chartInstance.getZr();\n zr.off('mousedown', this.stopNodeDragPropagation);\n zr.on('mousedown', this.stopNodeDragPropagation);\n this.bindSankeyDragBounds();\n\n this.events.forEach((eventName) => {\n if (eventName === 'contextmenu') {\n this.chartInstance.on(eventName, (params: any) => {\n const event = params?.event?.event;\n if (event) {\n params.event.event.preventDefault();\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n };\n\n this.openCard = true;\n\n this.cdr.markForCheck();\n }\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n } else if (eventName === 'click') {\n this.chartInstance.on('click', (params: any) => {\n this.chartEvent.emit({\n type: 'click',\n data: params,\n });\n });\n const zr = this.chartInstance.getZr();\n zr.on('click', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n nativeEvent.preventDefault();\n this.chartEvent.emit({\n type: 'blur',\n data: { ...zrEvent, type: 'blur' },\n });\n }\n });\n } else {\n this.chartInstance.on(eventName, (params: any) => {\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n }\n });\n }\n\n /**\n * ECharts' Sankey drag action stores the node position without applying the\n * series bounds. Clamp it after every drag so the complete node remains in\n * the drawable Sankey area (including custom series left/right/top/bottom).\n */\n private bindSankeyDragBounds(): void {\n this.chartInstance.on('dragnode', (params: any) => {\n const chartModel = (this.chartInstance as any).getModel?.();\n const series = chartModel?.getSeriesByIndex(params.seriesIndex ?? 0);\n const node = series?.getData?.().getItemGraphicEl(params.dataIndex);\n const bounds = series?.layoutInfo;\n\n if (!node || !bounds) return;\n\n // Node shapes are local to ECharts' Sankey group. `layoutInfo.x/y` are\n // applied to that parent group, so the node itself must be constrained\n // against (0, 0), not against the page-relative layoutInfo coordinates.\n const maxX = Math.max(0, bounds.width - node.shape.width);\n const maxY = Math.max(0, bounds.height - node.shape.height);\n const x = Math.min(Math.max(node.shape.x, 0), maxX);\n const y = Math.min(Math.max(node.shape.y, 0), maxY);\n\n if (x === node.shape.x && y === node.shape.y) return;\n\n this.chartInstance.dispatchAction({\n type: 'dragNode',\n seriesId: series.id,\n dataIndex: params.dataIndex,\n // ECharts normalizes Sankey node positions against the plot area, not\n // the whole canvas. Using the canvas size here causes an offset when\n // the series has left/right/top/bottom margins.\n localX: x / bounds.width,\n localY: y / bounds.height,\n });\n });\n }\n\n /* ------------------ DESTROY ------------------ */\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n if (this.chartInstance && !this.chartInstance.isDisposed()) {\n this.chartInstance.getZr()?.off('mousedown', this.stopNodeDragPropagation);\n this.chartInstance.off();\n this.chartInstance.dispose();\n }\n }\n}\n","<div\n class=\"sankey-chart-shell\"\n [class.sankey-chart-shell--legend-left]=\"legendPosition === 'left'\"\n [class.sankey-chart-shell--legend-right]=\"legendPosition === 'right'\"\n [class.sankey-chart-shell--legend-bottom]=\"legendPosition === 'bottom'\"\n [class.sankey-chart-shell--with-toggles]=\"showNodeToggles\"\n>\n @if (showNodeToggles && sourceToggleItems.length) {\n <div class=\"sankey-node-toggles\" aria-label=\"Sankey source visibility\">\n @for (item of sourceToggleItems; track item.name) {\n <label class=\"sankey-node-toggle\">\n <input\n type=\"checkbox\"\n [checked]=\"!item.hidden\"\n (change)=\"toggleSourceNode(item.name, $any($event.target).checked)\"\n />\n <span>{{ item.name }}</span>\n </label>\n }\n </div>\n }\n\n @if (showLegend && legendPosition !== 'bottom' && legendPosition !== 'right') {\n <lib-chart-legend\n class=\"sankey-chart-shell__legend\"\n [chart]=\"chartInstance\"\n [series]=\"legendSeries\"\n [colors]=\"config.colors || []\"\n [config]=\"legendConfig\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n\n <div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\"\n ></div>\n\n @if (showLegend && (legendPosition === 'bottom' || legendPosition === 'right')) {\n <lib-chart-legend\n class=\"sankey-chart-shell__legend\"\n [chart]=\"chartInstance\"\n [series]=\"legendSeries\"\n [colors]=\"config.colors || []\"\n [config]=\"legendConfig\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n</div>\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"contextMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { HeatmapChart } from 'echarts/charts';\nimport {\n GridComponent,\n TooltipComponent,\n TitleComponent,\n VisualMapComponent,\n} from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport { HeatmapChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\n\necharts.use([\n HeatmapChart,\n GridComponent,\n TooltipComponent,\n TitleComponent,\n VisualMapComponent,\n CanvasRenderer,\n]);\n\n@Component({\n selector: 'lib-heatmap',\n standalone: true,\n imports: [NgxEchartsDirective],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './heatmap.html',\n styleUrl: './heatmap.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Heatmap implements OnChanges, OnDestroy {\n @Input() config!: HeatmapChartConfig;\n @Input() theme: any;\n @Input() events: string[] = [];\n\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n\n chartOption: EChartsCoreOption = {};\n legendItems: { label: string; color: string }[] = [];\n private chartInstance?: ECharts;\n\n constructor(private chartService: Charts) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n this.chartInstance = undefined;\n }\n\n this.chartOption = this.buildOption(this.config);\n this.legendItems = this.buildLegendItems(this.config);\n\n if (this.chartInstance) {\n this.chartInstance.setOption(this.chartOption, true);\n this.bindEvents();\n }\n }\n\n private buildOption(config: HeatmapChartConfig): EChartsCoreOption {\n const data = config.data ?? [];\n const values = data.map((item) => item[2]).filter((value) => Number.isFinite(value));\n const min = config.min ?? (values.length ? Math.min(...values) : 0);\n const max = config.max ?? (values.length ? Math.max(...values) : 100);\n\n const baseSeries = {\n name: config.seriesName ?? config.title ?? 'Heatmap',\n type: 'heatmap',\n data,\n label: {\n show: config.showLabel ?? false,\n color: config.labelColor ?? '#111827',\n formatter: config.labelFormatter,\n },\n emphasis: {\n itemStyle: {\n shadowBlur: 10,\n shadowColor: 'rgba(0, 0, 0, 0.25)',\n },\n },\n };\n\n return {\n backgroundColor: config.backgroundColor || 'transparent',\n\n title: {\n show: config.showTitle ?? !!config.title,\n text: config.title,\n left: config.titlePosition || 'center',\n },\n\n tooltip: {\n show: config.showTooltip ?? true,\n trigger: 'item',\n backgroundColor: 'transparent',\n borderWidth: 0,\n padding: 0,\n confine: true,\n ...config.tooltip,\n formatter:\n config.tooltipFormatter ||\n ((params: any) => this.chartService.heatmapTooltipFormatter(params, config)),\n },\n\n grid: {\n left: config.grid?.left ?? '3%',\n right: config.grid?.right ?? '4%',\n top: config.grid?.top ?? '10%',\n bottom: config.grid?.bottom ?? '8%',\n height: config.grid?.height,\n containLabel: config.grid?.containLabel ?? true,\n },\n\n xAxis: {\n type: 'category',\n data: config.xAxisData ?? [],\n splitArea: { show: true },\n ...config.xAxis,\n },\n\n yAxis: {\n type: 'category',\n data: config.yAxisData ?? [],\n splitArea: { show: true },\n ...config.yAxis,\n },\n\n visualMap: {\n show: config.visualMap?.show ?? false,\n min,\n max,\n calculable: true,\n orient: 'horizontal',\n left: 'center',\n bottom: 0,\n inRange: {\n color: config.colors ?? ['#e0f2fe', '#38bdf8', '#0369a1'],\n },\n ...config.visualMap,\n },\n\n series: this.buildSeries(config.series, baseSeries),\n };\n }\n\n private buildLegendItems(config: HeatmapChartConfig) {\n const pieces = config.visualMap?.pieces;\n\n if (Array.isArray(pieces) && pieces.length) {\n return pieces.map((piece: any) => ({\n label: piece.label ?? `${piece.max ?? piece.value ?? piece.min}%`,\n color: piece.color ?? piece.itemStyle?.color ?? '#e5e7eb',\n }));\n }\n\n const colors = config.colors ?? ['#e0f2fe', '#38bdf8', '#0369a1'];\n const step = colors.length ? 100 / colors.length : 100;\n\n return colors.map((color, index) => ({\n label: `${Math.round(step * (index + 1))}%`,\n color,\n }));\n }\n\n private buildSeries(seriesConfig: HeatmapChartConfig['series'], baseSeries: any) {\n if (Array.isArray(seriesConfig)) {\n return seriesConfig.map((series) => ({\n ...baseSeries,\n ...series,\n }));\n }\n\n if (seriesConfig) {\n return [\n {\n ...baseSeries,\n ...seriesConfig,\n },\n ];\n }\n\n return [baseSeries];\n }\n\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.bindEvents();\n }\n\n private bindEvents() {\n if (!this.chartInstance) return;\n\n const chartInstance = this.chartInstance;\n\n chartInstance.off();\n\n this.events.forEach((eventName) => {\n chartInstance.on(eventName, (params: any) => {\n if (eventName === 'contextmenu' && params.event?.event) {\n params.event.event.preventDefault();\n }\n\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n });\n }\n\n ngOnDestroy(): void {\n if (this.chartInstance) {\n this.chartInstance.off();\n this.chartInstance.dispose();\n }\n }\n}\n","<div class=\"heatmap-wrapper\">\n <div class=\"heatmap-legend\">\n @for (item of legendItems; track item.label) {\n <div class=\"heatmap-legend-item\">\n <span class=\"heatmap-legend-swatch\" [style.background]=\"item.color\"></span>\n <span>{{ item.label }}</span>\n </div>\n }\n </div>\n\n <div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n (chartInit)=\"onChartInit($event)\"\n class=\"chart-container\"\n ></div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n ElementRef,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { HeatmapChart } from 'echarts/charts';\nimport {\n GridComponent,\n LegendComponent,\n TitleComponent,\n TooltipComponent,\n VisualMapComponent,\n} from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport {\n HeatmapPivotAxisState,\n HeatmapPivotAxisValue,\n HeatmapPivotConfig,\n HeatmapPivotDataPoint,\n HeatmapPivotSeriesData,\n HeatmapPivotVisualMapPiece,\n} from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\nimport { ChartLegendComponent, ChartLegendEvent } from '../chart-legend';\nimport { RightClickCard } from '../right-click-card';\n\necharts.use([\n HeatmapChart,\n GridComponent,\n LegendComponent,\n TitleComponent,\n TooltipComponent,\n VisualMapComponent,\n CanvasRenderer,\n]);\n\n@Component({\n selector: 'lib-heatmap-pivot',\n standalone: true,\n imports: [NgxEchartsDirective, ChartLegendComponent, RightClickCard],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './heatmap-pivot.html',\n styleUrl: './heatmap-pivot.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeatmapPivot implements OnInit, OnChanges, OnDestroy {\n @ViewChild('chartContainer') chartContainer?: ElementRef<HTMLElement>;\n @Input() config: HeatmapPivotConfig = { xAxisData: [], yAxisData: [], series: [] };\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() contextMenuOptions: any[] = [];\n @Input() showContextMenu = false;\n\n @Output() contextMenuClick = new EventEmitter<any>();\n @Output() chartEvent = new EventEmitter<{ type: string; data: any }>();\n @Output() legendEvent = new EventEmitter<ChartLegendEvent>();\n\n chartOption: EChartsCoreOption = {};\n chartInstance!: ECharts;\n cardPosition = { x: 0, y: 0 };\n openCard = false;\n columnTotals: number[] = [];\n\n private xAxisState!: HeatmapPivotAxisState;\n private yAxisState!: HeatmapPivotAxisState;\n private yAxisLabelWidth?: number;\n private totalLabelWidth?: number;\n private normalizedSeriesData: HeatmapPivotSeriesData[][] = [];\n\n private eventCleanup: (() => void)[] = [];\n\n constructor(\n private chartService: Charts,\n private cdr: ChangeDetectorRef,\n ) {}\n\n get deafultColors(): string[] {\n return this.chartService.heatmapPivotColors;\n }\n\n get hasSideLegendWidth(): boolean {\n return this.isSideLegend && !!this.config.customLegend?.maxWidth;\n }\n\n get legendShellMaxWidth(): string | null {\n return this.isSideLegend ? (this.config.customLegend?.maxWidth ?? null) : null;\n }\n\n private get isSideLegend(): boolean {\n return (\n this.config.customLegend?.position === 'left' ||\n this.config.customLegend?.position === 'right'\n );\n }\n\n ngOnInit(): void {\n this.buildOption();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n this.buildOption();\n if (changes['events'] || changes['showContextMenu']) {\n this.bindEvents();\n }\n // NgxEchartsDirective recreates the chart when its theme input changes.\n }\n\n private buildOption(): void {\n const config = this.config;\n this.xAxisState = this.buildAxisState('x');\n this.yAxisState = this.buildAxisState('y');\n const yAxisLabelWidth = this.resolveYAxisLabelWidth();\n this.yAxisLabelWidth = yAxisLabelWidth;\n this.totalLabelWidth = this.resolveTotalLabelWidth(yAxisLabelWidth);\n this.columnTotals = this.xAxisState.values.map(() => 0);\n const series = (config.series ?? []).map((item) => ({\n ...item,\n type: 'heatmap',\n coordinateSystem: 'cartesian2d',\n encode: { x: 0, y: 1, tooltip: [2] },\n data: this.normalizeData(item.data ?? []),\n itemStyle: {\n borderColor: '#ffffff',\n borderWidth: Math.max(config.cellGap ?? 6, 0),\n borderRadius: Math.max(config.cellBorderRadius ?? 3, 0),\n ...item['itemStyle'],\n },\n label: {\n show: config.showLabel ?? true,\n position: 'inside',\n color: config.labelColor ?? '#252a31',\n fontSize: 14,\n formatter:\n config.labelFormatter ??\n ((params: any) => {\n const value = params.value?.[2];\n return typeof value === 'number' ? this.chartService.compactValueFormat(value) : '-';\n }),\n ...item['label'],\n },\n emphasis: { disabled: true, ...item['emphasis'] },\n }));\n this.normalizedSeriesData = series.map((item) => item.data);\n let min = Infinity;\n let max = -Infinity;\n for (const item of series) {\n for (const dataItem of item.data) {\n const point = this.pointValue(dataItem);\n const value = point[2];\n if (!Number.isFinite(value)) continue;\n min = Math.min(min, value);\n max = Math.max(max, value);\n const column = Number(point[0]);\n if (this.columnTotals[column] !== undefined) this.columnTotals[column] += value;\n }\n }\n\n this.chartOption = {\n backgroundColor: config.backgroundColor ?? 'transparent',\n color: config.colors ?? this.deafultColors,\n title: [\n {\n show: config.showTitle ?? !!config.title,\n text: config.title,\n left: config.titlePosition ?? 'center',\n },\n ...(config.showTotals !== false\n ? [\n {\n id: 'heatmap-pivot-total-label',\n text: config.totalLabel ?? 'Total',\n left: 8,\n bottom: 12,\n padding: 0,\n textStyle: {\n color: '#182230',\n fontFamily: 'Arial, sans-serif',\n fontSize: 14,\n fontWeight: 600,\n width: this.totalLabelWidth,\n overflow: 'truncate',\n ellipsis: '...',\n },\n },\n ]\n : []),\n ],\n tooltip: {\n show: config.showTooltip ?? true,\n trigger: 'item',\n backgroundColor: '#ffffff',\n borderWidth: 0,\n padding: [10, 12],\n confine: true,\n textStyle: { color: '#434a51', fontFamily: 'Arial, sans-serif', fontSize: 12 },\n borderRadius: 6,\n shadowBlur: 16,\n shadowColor: 'rgba(16,24,40,0.12)',\n shadowOffsetY: 5,\n formatter: (params: any) =>\n config.tooltipFormatter\n ? config.tooltipFormatter(params, config)\n : this.formatTooltip(params),\n ...config.tooltip,\n },\n legend: {\n show: !config.hideLegend && !config.customLegend,\n type: 'scroll',\n top: (config.showTitle ?? !!config.title) ? 30 : 0,\n icon: 'roundRect',\n textStyle: { color: '#434a51', fontSize: 14 },\n ...config.legend,\n data: config.legend?.data ?? series.map((item) => item.name),\n selected: { ...this.readLegendSelected(), ...config.legend?.selected },\n selectedMode:\n config.legend?.selectedMode ??\n (config.customLegend?.selectionMode === 'exclusive' ? 'single' : true),\n },\n grid: [\n {\n left: this.labelGridLeft(yAxisLabelWidth),\n right: 0,\n top: 0,\n bottom: config.showTotals !== false ? 41 : 0,\n ...config.grid,\n },\n ...(config.showTotals !== false\n ? [\n {\n left: 0,\n right: 0,\n bottom: 1,\n height: 40,\n containLabel: false,\n },\n ]\n : []),\n ],\n xAxis: [\n {\n position: 'top',\n axisLine: { show: false },\n axisTick: { show: false },\n splitLine: { show: false },\n ...this.axisOptions('x'),\n axisLabel: {\n interval: 'auto',\n hideOverlap: true,\n margin: 14,\n color: '#434a51',\n fontFamily: 'Arial, sans-serif',\n fontSize: 14,\n formatter:\n this.xAxisState.type === 'time'\n ? (value: string | number) => this.formatAxisValue('x', value)\n : undefined,\n ...config.xAxis?.axisLabel,\n },\n },\n ...this.totalsAxisOptions(),\n ],\n yAxis: [\n {\n inverse: true,\n axisLine: { show: false },\n axisTick: { show: false },\n splitLine: { show: false },\n ...this.axisOptions('y'),\n axisLabel: {\n interval: 0,\n margin: yAxisLabelWidth + 16,\n align: 'left',\n color: '#434a51',\n fontFamily: 'Arial, sans-serif',\n fontSize: 14,\n formatter:\n this.yAxisState.type === 'time'\n ? (value: string | number) => this.formatAxisValue('y', value)\n : undefined,\n ...config.yAxis?.axisLabel,\n width: yAxisLabelWidth,\n overflow: config.yAxis?.axisLabel?.overflow ?? 'truncate',\n ellipsis: config.yAxis?.axisLabel?.ellipsis ?? '...',\n },\n },\n ...(config.showTotals !== false\n ? [\n {\n gridIndex: 1,\n type: 'value',\n min: 0,\n max: 1,\n show: false,\n },\n ]\n : []),\n ],\n visualMap: this.buildVisualMaps(min, max),\n series,\n };\n }\n\n private resolveYAxisLabelWidth(): number {\n const style = this.config.yAxis?.axisLabel;\n const chartWidth = this.chartContainer?.nativeElement.getBoundingClientRect().width\n || (this.chartInstance && !this.chartInstance.isDisposed() ? this.chartInstance.getWidth() : 0)\n || 360;\n const defaultMaxWidth = Math.max(100, Math.min(240, Math.round(chartWidth * 0.22)));\n const minWidth = Math.max(0, this.config.yAxisLabelMinWidth\n ?? Math.min(50, this.config.yAxisLabelMaxWidth ?? defaultMaxWidth));\n const maxWidth = Math.max(minWidth, this.config.yAxisLabelMaxWidth ?? defaultMaxWidth);\n if (typeof style?.width === 'number' && Number.isFinite(style.width)) {\n return Math.min(maxWidth, Math.max(minWidth, style.width));\n }\n const font = `${style?.fontWeight ?? 400} ${style?.fontSize ?? 14}px ${style?.fontFamily ?? 'Arial, sans-serif'}`;\n let width = minWidth;\n this.yAxisState.values.forEach((_value, index) => {\n width = Math.max(width, echarts.format.getTextRect(this.formatAxisValue('y', index), font).width);\n });\n if (this.config.showTotals !== false) {\n width = Math.max(width, echarts.format.getTextRect(\n this.config.totalLabel ?? 'Total', '600 14px Arial, sans-serif',\n ).width);\n }\n return Math.min(maxWidth, width);\n }\n\n private labelGridLeft(width: number): number {\n const yAxisHidden = this.config.yAxis?.['show'] === false || this.config.yAxis?.axisLabel?.show === false;\n return yAxisHidden && this.config.showTotals === false ? 0 : width + 16;\n }\n\n private resolveTotalLabelWidth(labelWidth: number): number {\n const configuredLeft = this.config.grid?.left;\n const chartWidth = this.chartContainer?.nativeElement.getBoundingClientRect().width\n || (this.chartInstance && !this.chartInstance.isDisposed() ? this.chartInstance.getWidth() : 0)\n || 360;\n const defaultLeft = this.labelGridLeft(labelWidth);\n const left = configuredLeft === undefined ? defaultLeft\n : typeof configuredLeft === 'number' ? configuredLeft\n : configuredLeft.endsWith('%') ? parseFloat(configuredLeft) / 100 * chartWidth\n : parseFloat(configuredLeft);\n // Reserve eight pixels on each side of the heading before the total values.\n return Math.max(0, Math.min(labelWidth, (Number.isFinite(left) ? left : defaultLeft) - 16));\n }\n\n private buildVisualMaps(min: number, max: number): EChartsCoreOption | EChartsCoreOption[] {\n const config = this.config;\n const base = {\n show: false,\n min: config.min ?? (Number.isFinite(min) ? min : 0),\n max: config.max ?? (Number.isFinite(max) ? max : 100),\n dimension: 2,\n calculable: true,\n orient: 'horizontal',\n left: 'center',\n bottom: 0,\n inRange: { color: config.colors ?? this.deafultColors },\n };\n const rules = this.visualMapOptions();\n if (rules['type'] !== 'piecewise' && !rules['pieces'] && !rules['categories']) {\n return { ...base, ...rules };\n }\n return [\n { ...base, type: 'continuous', show: false },\n {\n ...base,\n ...rules,\n type: 'piecewise',\n inRange: {\n colorAlpha: 1,\n ...base.inRange,\n ...(rules['inRange'] && typeof rules['inRange'] === 'object' ? rules['inRange'] : {}),\n },\n // An empty mapping preserves the color assigned by the continuous map.\n outOfRange: rules['outOfRange'] ?? {},\n },\n ];\n }\n\n private visualMapOptions(): EChartsCoreOption {\n const config = this.config.visualMap;\n if (!config?.pieces) return config ?? {};\n return {\n ...config,\n type: config.type ?? 'piecewise',\n pieces: config.pieces.flatMap((piece): HeatmapPivotVisualMapPiece[] => {\n const { eq, neq, ne, opacity, ...options } = piece;\n const native: HeatmapPivotVisualMapPiece = {\n ...options,\n ...(opacity !== undefined ? {\n colorAlpha: Math.min(100, Math.max(0, Number.isFinite(opacity) ? opacity : 100)) / 100,\n } : {}),\n };\n if (eq !== undefined) return [{ ...native, value: eq }];\n const excluded = neq ?? ne;\n if (excluded === undefined) return [native];\n if (native.value !== undefined) return native.value === excluded ? [] : [native];\n const { gt, gte, min, lt, lte, max, ...style } = native;\n const lower = Math.max(gt ?? -Infinity, gte ?? -Infinity, min ?? -Infinity);\n const upper = Math.min(lt ?? Infinity, lte ?? Infinity, max ?? Infinity);\n const lowerOpen = gt === lower;\n const upperOpen = lt === upper;\n const range = (\n start: number,\n end: number,\n startOpen: boolean,\n endOpen: boolean,\n ): HeatmapPivotVisualMapPiece[] => {\n if (start > end || (start === end && (startOpen || endOpen))) return [];\n return [\n {\n ...style,\n ...(Number.isFinite(start)\n ? startOpen && start === excluded\n ? // ECharts joins touching pieces; use the next representable number\n // so the excluded value cannot be reintroduced at their boundary.\n { gte: this.nextNumericValue(start) }\n : { [startOpen ? 'gt' : 'gte']: start }\n : {}),\n ...(Number.isFinite(end) ? { [endOpen ? 'lt' : 'lte']: end } : {}),\n },\n ];\n };\n return [\n ...range(lower, Math.min(upper, excluded), lowerOpen, excluded <= upper || upperOpen),\n ...range(Math.max(lower, excluded), upper, excluded >= lower || lowerOpen, upperOpen),\n ];\n }),\n };\n }\n\n private nextNumericValue(value: number): number {\n if (value === 0) return Number.MIN_VALUE;\n const buffer = new DataView(new ArrayBuffer(8));\n buffer.setFloat64(0, value);\n buffer.setBigUint64(0, buffer.getBigUint64(0) + (value > 0 ? 1n : -1n));\n return buffer.getFloat64(0);\n }\n\n private totalsAxisOptions(): EChartsCoreOption[] {\n if (this.config.showTotals === false) return [];\n const options = this.axisOptions('x');\n const axisLine = { show: true, onZero: false, lineStyle: { color: '#e4e7ec', width: 1 } };\n const borderAxis = {\n gridIndex: 1,\n z: 10,\n type: 'category',\n data: [''],\n boundaryGap: true,\n axisLine,\n axisLabel: { show: false },\n axisTick: { show: false },\n splitLine: { show: false },\n axisPointer: { show: false },\n };\n const base = {\n ...options,\n show: true,\n position: 'bottom',\n axisLine: { show: false },\n axisTick: { show: false },\n splitLine: { show: false },\n axisPointer: { show: false },\n };\n return [\n {\n ...base,\n axisLabel: {\n show: true,\n interval: 0,\n margin: 13,\n color: '#182230',\n fontFamily: 'Arial, sans-serif',\n fontSize: 14,\n fontWeight: 600,\n formatter: (value: string) => {\n const index = this.xAxisState.values.findIndex((bucket) => String(bucket) === value);\n const total = this.columnTotals[index] ?? 0;\n return this.config.totalFormatter ? this.config.totalFormatter(total) : String(total);\n },\n },\n },\n { ...borderAxis, position: 'top' },\n { ...borderAxis, position: 'bottom' },\n ];\n }\n\n private pointValue(point: HeatmapPivotSeriesData): HeatmapPivotDataPoint {\n return Array.isArray(point) ? point : point.value;\n }\n\n private normalizeData(data: HeatmapPivotSeriesData[]): HeatmapPivotSeriesData[] {\n return data.flatMap((point): HeatmapPivotSeriesData[] => {\n const [x, y, value] = this.pointValue(point);\n const normalized: [number, number, number] = [\n this.normalizeCoordinate('x', x),\n this.normalizeCoordinate('y', y),\n value,\n ];\n if (!normalized.every(Number.isFinite) || normalized[0] < 0 || normalized[1] < 0) return [];\n return [Array.isArray(point) ? normalized : { ...point, value: normalized }];\n });\n }\n\n private buildAxisState(axis: 'x' | 'y'): HeatmapPivotAxisState {\n const options = axis === 'x' ? this.config.xAxis : this.config.yAxis;\n const axisData = axis === 'x' ? this.config.xAxisData : this.config.yAxisData;\n const type = options?.type ?? 'category';\n const coordinates = (this.config.series ?? []).flatMap((series) =>\n (series.data ?? []).map((point) => this.pointValue(point)[axis === 'x' ? 0 : 1]),\n );\n const resolvedCoordinates = coordinates.map((value) =>\n typeof value === 'number' &&\n Number.isInteger(value) &&\n value >= 0 &&\n value < (axisData?.length ?? 0)\n ? axisData![value]\n : value,\n );\n const axisValues =\n type === 'time'\n ? [...(axisData ?? []), ...resolvedCoordinates]\n : axisData?.length\n ? axisData\n : coordinates;\n const values = [\n ...new Set(\n axisValues.map((value) => (type === 'time' ? this.timestamp(value) : String(value))),\n ),\n ].filter((value) => type !== 'time' || Number.isFinite(value));\n if (type === 'time') (values as number[]).sort((a, b) => a - b);\n return { type, values };\n }\n\n private timestamp(value: HeatmapPivotAxisValue): number {\n return value instanceof Date ? value.getTime() : new Date(value).getTime();\n }\n\n private normalizeCoordinate(axis: 'x' | 'y', value: HeatmapPivotAxisValue): number {\n const state = axis === 'x' ? this.xAxisState : this.yAxisState;\n const axisData = axis === 'x' ? this.config.xAxisData : this.config.yAxisData;\n const indexed =\n typeof value === 'number' &&\n Number.isInteger(value) &&\n value >= 0 &&\n value < (axisData?.length ?? 0);\n const resolved = indexed ? axisData![value as number] : value;\n return state.values.indexOf(\n state.type === 'time' ? this.timestamp(resolved) : String(resolved),\n );\n }\n\n private axisOptions(axis: 'x' | 'y'): EChartsCoreOption {\n const state = axis === 'x' ? this.xAxisState : this.yAxisState;\n const options = (axis === 'x' ? this.config.xAxis : this.config.yAxis) ?? {};\n const { type, minInterval, min, max, ...styles } = options;\n let bucketMin: HeatmapPivotAxisValue | undefined = min;\n let bucketMax: HeatmapPivotAxisValue | undefined = max;\n if (state.type === 'time') {\n if (min !== undefined) {\n const timestamp = this.timestamp(min);\n bucketMin =\n min === 'dataMin' ? 0 : state.values.findIndex((value) => Number(value) >= timestamp);\n if (bucketMin === -1) bucketMin = state.values.length;\n }\n if (max !== undefined) {\n const timestamp = this.timestamp(max);\n bucketMax =\n max === 'dataMax'\n ? state.values.length - 1\n : state.values.reduce<number>(\n (last, value, index) => (Number(value) <= timestamp ? index : last),\n -1,\n );\n }\n }\n // Native Cartesian heatmaps require category axes. Time values remain sorted\n // buckets and use the pivot date formatter for their displayed labels.\n return {\n ...styles,\n type: 'category',\n boundaryGap: true,\n data: state.values.map(String),\n min: bucketMin,\n max: bucketMax,\n };\n }\n\n private formatAxisValue(axis: 'x' | 'y', value: string | number): string {\n const state = axis === 'x' ? this.xAxisState : this.yAxisState;\n const index =\n typeof value === 'number'\n ? value\n : state.values.findIndex((bucket) => String(bucket) === value);\n const resolved = state.values[index] ?? value;\n if (state.type === 'time') {\n return this.chartService.formatHeatmapPivotDate(\n resolved,\n axis === 'x' ? this.config.XAxisAggregation : this.config.YAxisAggregation,\n );\n }\n return String(resolved);\n }\n\n private formatTooltip(params: any): string {\n const [x, y] = params.value ?? [];\n const rows = [\n ['Row Dimension', this.formatAxisValue('x', x)],\n ['Column Dimension', this.formatAxisValue('y', y)],\n ];\n const selected = this.readLegendSelected();\n this.normalizedSeriesData.forEach((data, index) => {\n const series = this.config.series[index];\n if (selected[series.name] === false) return;\n const match = data.find((point) => {\n const value = this.pointValue(point);\n return value[0] === x && value[1] === y;\n });\n if (match) {\n rows.push([\n series.name,\n String(\n this.chartService.formatTooltipValue(\n this.pointValue(match)[2],\n this.config.tooltipCompactValue,\n ),\n ),\n ]);\n }\n });\n\n const extra = params.data?.[this.config.extraTooltipKey ?? 'tooltip'];\n if (extra && typeof extra === 'object' && !Array.isArray(extra)) {\n for (const [key, value] of Object.entries(extra)) {\n rows.push([\n key,\n typeof value === 'number'\n ? String(this.chartService.formatTooltipValue(value, this.config.tooltipCompactValue))\n : String(value ?? '-'),\n ]);\n }\n }\n return `<div style=\"display:grid;grid-template-columns:112px 8px minmax(170px,1fr);row-gap:5px;line-height:16px\">${rows\n .map(\n ([label, content]) =>\n `<span style=\"font-weight:600\">${echarts.format.encodeHTML(String(label))}</span><span>:</span><span>${echarts.format.encodeHTML(String(content ?? '-'))}</span>`,\n )\n .join('')}</div>`;\n }\n\n onChartInit(chart: ECharts): void {\n this.unbindEvents();\n this.chartInstance = chart;\n // Apply the width after ngx-echarts has installed the initial chart options.\n queueMicrotask(() => {\n if (this.chartInstance === chart) this.refreshLabelWidth();\n });\n this.bindEvents();\n this.cdr.markForCheck();\n }\n\n @HostListener('window:resize')\n refreshLabelWidth(): void {\n const chart = this.chartInstance;\n if (!chart || chart.isDisposed() || !this.yAxisState) return;\n const width = this.resolveYAxisLabelWidth();\n const totalWidth = this.resolveTotalLabelWidth(width);\n if (width === this.yAxisLabelWidth && totalWidth === this.totalLabelWidth) return;\n\n const update: EChartsCoreOption = {\n yAxis: [{ axisLabel: {\n width,\n margin: this.config.yAxis?.axisLabel?.margin ?? width + 16,\n } }],\n };\n if (this.config.showTotals !== false) {\n update['title'] = [{ id: 'heatmap-pivot-total-label', textStyle: { width: totalWidth } }];\n }\n if (this.config.grid?.left === undefined) {\n update['grid'] = [{\n left: this.labelGridLeft(width),\n }];\n }\n chart.setOption(update, { lazyUpdate: true, silent: true });\n this.yAxisLabelWidth = width;\n this.totalLabelWidth = totalWidth;\n }\n\n private bindEvents(): void {\n this.unbindEvents();\n const chart = this.chartInstance;\n if (!chart || chart.isDisposed()) return;\n\n const eventNames = new Set(this.events);\n if (this.showContextMenu) eventNames.add('contextmenu');\n\n for (const eventName of eventNames) {\n const handler = (params: any) => {\n if (eventName === 'contextmenu') {\n this.openContextMenu(params?.event?.event);\n }\n this.chartEvent.emit({ type: eventName, data: params });\n };\n chart.on(eventName, handler);\n this.eventCleanup.push(() => {\n if (!chart.isDisposed()) chart.off(eventName, handler);\n });\n\n if (eventName === 'click' || eventName === 'contextmenu') {\n const zr = chart.getZr();\n const backgroundHandler = (event: any) => {\n if (event.target) return;\n if (eventName === 'contextmenu') {\n this.openContextMenu(event.event);\n this.chartEvent.emit({\n type: 'contextmenu',\n data: { ...event, isZrEvent: true },\n });\n } else {\n this.chartEvent.emit({ type: 'blur', data: { ...event, type: 'blur' } });\n }\n };\n zr.on(eventName, backgroundHandler);\n this.eventCleanup.push(() => {\n if (!chart.isDisposed()) zr.off(eventName, backgroundHandler);\n });\n }\n }\n }\n\n private openContextMenu(event?: MouseEvent): void {\n if (!event || !this.chartInstance || this.chartInstance.isDisposed()) return;\n event.preventDefault();\n const rect = this.chartInstance.getDom().getBoundingClientRect();\n this.cardPosition = { x: event.clientX - rect.left, y: event.clientY - rect.top };\n this.openCard = this.showContextMenu || this.contextMenuOptions.length > 0;\n this.cdr.markForCheck();\n }\n\n onMenuClick(item: any): void {\n this.contextMenuClick.emit(item);\n this.closeCard();\n }\n\n @HostListener('document:click')\n closeCard(): void {\n this.openCard = false;\n }\n\n onLegendEvent(event: ChartLegendEvent): void {\n this.legendEvent.emit(event);\n this.chartEvent.emit({ type: `legend:${event.type}`, data: event });\n }\n\n private readLegendSelected(): Record<string, boolean> {\n if (!this.chartInstance || this.chartInstance.isDisposed()) return {};\n const option = this.chartInstance.getOption() as {\n legend?: Array<{ selected?: Record<string, boolean> }>;\n };\n return { ...option.legend?.[0]?.selected };\n }\n\n private unbindEvents(): void {\n this.eventCleanup.forEach((cleanup) => cleanup());\n this.eventCleanup = [];\n }\n\n ngOnDestroy(): void {\n this.unbindEvents();\n if (this.chartInstance && !this.chartInstance.isDisposed()) {\n this.chartInstance.dispose();\n }\n }\n}\n","<div\n class=\"heatmap-pivot-chart-shell\"\n [class.heatmap-pivot-chart-shell--legend-left]=\"config.customLegend?.position === 'left'\"\n [class.heatmap-pivot-chart-shell--legend-right]=\"config.customLegend?.position === 'right'\"\n [class.heatmap-pivot-chart-shell--legend-bottom]=\"config.customLegend?.position === 'bottom'\"\n>\n @if (\n config.customLegend && !config.hideLegend &&\n config.customLegend.position !== 'bottom' &&\n config.customLegend.position !== 'right'\n ) {\n <lib-chart-legend\n class=\"heatmap-pivot-chart-shell__legend\"\n [class.heatmap-pivot-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--heatmap-pivot-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n\n <div\n #chartContainer\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n (chartInit)=\"onChartInit($event)\"\n class=\"chart-container\"\n ></div>\n\n @if (\n config.customLegend && !config.hideLegend &&\n (config.customLegend.position === 'bottom' || config.customLegend.position === 'right')\n ) {\n <lib-chart-legend\n class=\"heatmap-pivot-chart-shell__legend\"\n [class.heatmap-pivot-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--heatmap-pivot-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n</div>\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"contextMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n","import {\n Component,\n Input,\n SimpleChanges,\n ChangeDetectionStrategy,\n Output,\n EventEmitter,\n ElementRef,\n HostListener,\n ViewChild,\n} from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\n\nimport {\n GridComponent,\n TooltipComponent,\n LegendComponent,\n TitleComponent,\n} from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { Charts } from '../../service/charts';\nimport { ScatterChart } from 'echarts/charts';\nimport { ScatterChartConfig } from '../../modal/charts-modal';\nimport { ChartLegendComponent } from '../chart-legend';\nimport type { ChartLegendEvent } from '../chart-legend';\n\necharts.use([\n ScatterChart,\n GridComponent,\n TooltipComponent,\n LegendComponent,\n CanvasRenderer,\n TitleComponent,\n]);\n\n@Component({\n selector: 'lib-scatter-chart',\n imports: [NgxEchartsDirective, ChartLegendComponent],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './scatter-chart.html',\n styleUrl: './scatter-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScatterChartComp {\n @Input() config!: ScatterChartConfig;\n @Input() theme: any;\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n @Output() legendEvent = new EventEmitter<ChartLegendEvent>();\n @ViewChild('chartContainer') chartContainer?: ElementRef<HTMLElement>;\n chartOption: EChartsCoreOption = {};\n chartInstance!: ECharts;\n\n constructor(private chartService: Charts) {}\n get deafultColors() {\n return this.chartService.defaultColors;\n }\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n\n this.buildOption();\n }\n\n private previousAxisNameStyleSignature = '';\n\n ngDoCheck(): void {\n if (!this.chartInstance || !this.config) return;\n\n const axisNameStyleSignature = this.resolveAxisNameStyleSignature();\n if (this.previousAxisNameStyleSignature === axisNameStyleSignature) return;\n\n this.previousAxisNameStyleSignature = axisNameStyleSignature;\n this.refreshAxisNameSpace();\n }\n\n private buildOption() {\n const selected = this.readLegendSelected();\n const selectedMode = this.config?.customLegend?.selectionMode === 'exclusive' ? 'single' : true;\n\n this.chartOption = {\n backgroundColor: this.config?.backgroundColor || 'transparent',\n color: this.config?.colors || this.chartService.defaultColors,\n title: {\n show: this.config?.showTitle ?? !!this.config?.title,\n text: this.config?.title,\n left: this.config?.titlePosition || 'center',\n },\n tooltip: {\n show: this.config?.showTooltip,\n trigger: 'item',\n backgroundColor: 'transparent',\n borderWidth: 0,\n padding: 0,\n confine: true,\n formatter: (params: any) =>\n this.config?.tooltipFormatter\n ? this.config?.tooltipFormatter(params)\n : this.chartService.scatterTooltipFormatter(\n params,\n this.config?.xAxisName,\n this.config?.yAxisName,\n ),\n },\n legend: {\n show: false,\n data: (this.config?.series ?? []).map((series) => series.name),\n selected,\n selectedMode,\n },\n\n grid: {\n left: this.config?.gridLeft ?? 0,\n right: this.config?.gridRight ?? 0,\n bottom: this.config?.gridBottom ?? 0,\n top: this.config?.gridTop ?? 0,\n },\n\n xAxis: {\n type: 'value',\n axisLine: {\n show: this.config?.showXAxisLine ?? true,\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n },\n },\n axisTick: {\n show: false,\n },\n axisLabel: {\n color: '#434A51',\n fontSize: 12,\n },\n nameLocation: 'center',\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n width: this.resolveAxisNameWidth('x'),\n ...(this.config?.xAxis?.nameTextStyle || {}),\n },\n\n splitLine: {\n show: true,\n lineStyle: {\n type: 'dashed',\n color: '#C0C2C5',\n width: 1,\n },\n },\n ...this.config?.xAxis,\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n },\n\n yAxis: [\n {\n type: 'value',\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameLocation: 'center',\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n width: this.resolveAxisNameWidth('y'),\n ...(this.config?.yAxis?.nameTextStyle || {}),\n },\n axisLine: {\n show: this.config?.showYAxisLine ?? true,\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n },\n },\n\n axisTick: {\n show: false,\n },\n axisLabel: {\n color: '#434A51',\n fontSize: 12,\n formatter: (value: number) => {\n if (value === 0) {\n return '0';\n }\n\n const absValue = Math.abs(value);\n\n // Quadrillions\n if (absValue >= 1_000_000_000_000_000) {\n return `${+(value / 1_000_000_000_000_000).toFixed(1)}Q`;\n }\n\n // Trillions\n if (absValue >= 1_000_000_000_000) {\n return `${+(value / 1_000_000_000_000).toFixed(1)}T`;\n }\n\n // Billions\n if (absValue >= 1_000_000_000) {\n return `${+(value / 1_000_000_000).toFixed(1)}B`;\n }\n\n // Millions\n if (absValue >= 1_000_000) {\n return `${+(value / 1_000_000).toFixed(1)}M`;\n }\n\n // Thousands\n if (absValue >= 1_000) {\n return `${+(value / 1_000).toFixed(1)}K`;\n }\n\n // Decimal handling\n if (Number.isInteger(value)) {\n return value.toString();\n }\n\n return value;\n },\n },\n splitLine: {\n show: true,\n lineStyle: {\n type: 'dashed',\n color: '#C0C2C5',\n width: 1,\n },\n },\n ...this.config?.yAxis,\n },\n ],\n\n series: (this.config?.series || []).map((s) => {\n return { symbolSize: 14, ...s, type: 'scatter' };\n }),\n };\n }\n get hasSideLegendWidth(): boolean {\n return this.isSideLegend && !!this.config.customLegend?.maxWidth;\n }\n\n get legendShellMaxWidth(): string | null {\n return this.isSideLegend ? (this.config.customLegend?.maxWidth ?? null) : null;\n }\n\n private get isSideLegend(): boolean {\n return (\n this.config.customLegend?.position === 'left' ||\n this.config.customLegend?.position === 'right'\n );\n }\n\n private resolveAxisName(name: string | undefined, axis: 'x' | 'y'): string {\n if (!name) return '';\n\n const maxWidth = this.resolveAxisNameWidth(axis);\n const font = this.resolveAxisNameFont(axis);\n if (echarts.format.getTextRect(name, font).width <= maxWidth) return name;\n\n const ellipsis = '...';\n let low = 0;\n let high = name.length;\n let truncated = ellipsis;\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const nextText = `${name.slice(0, mid)}${ellipsis}`;\n const nextWidth = echarts.format.getTextRect(nextText, font).width;\n\n if (nextWidth <= maxWidth) {\n truncated = nextText;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n return truncated;\n }\n\n private resolveAxisNameFont(axis: 'x' | 'y'): string {\n const style = axis === 'x' ? this.config?.xAxis?.nameTextStyle : this.config?.yAxis?.nameTextStyle;\n const fontSize = style?.fontSize ?? 14;\n const fontWeight = style?.fontWeight ?? 400;\n const fontFamily = style?.fontFamily ?? 'sans-serif';\n\n return `${fontWeight} ${fontSize}px ${fontFamily}`;\n }\n\n private resolveAxisNameWidth(axis: 'x' | 'y'): number {\n const chartRect = this.chartContainer?.nativeElement.getBoundingClientRect();\n const chartWidth = chartRect?.width || this.chartInstance?.getWidth?.() || 360;\n const chartHeight = chartRect?.height || this.chartInstance?.getHeight?.() || 240;\n\n if (axis === 'x') {\n return Math.max(chartWidth - 240, 80);\n }\n\n return Math.max(chartHeight - 72, 80);\n }\n\n private resolveAxisNameStyleSignature(): string {\n return JSON.stringify({\n xAxisName: this.config?.xAxisName,\n yAxisName: this.config?.yAxisName,\n xAxisNameTextStyle: this.config?.xAxis?.nameTextStyle,\n yAxisNameTextStyle: this.config?.yAxis?.nameTextStyle,\n });\n }\n\n onLegendEvent(event: ChartLegendEvent): void {\n this.legendEvent.emit(event);\n this.chartEvent.emit({\n type: `legend:${event.type}`,\n data: event,\n });\n }\n\n private readLegendSelected(): Record<string, boolean> {\n const option = this.chartInstance?.getOption?.() as\n | { legend?: Array<{ selected?: Record<string, boolean> }> }\n | undefined;\n\n return { ...(option?.legend?.[0]?.selected ?? {}) };\n }\n\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n queueMicrotask(() => this.refreshAxisNameSpace());\n }\n\n @HostListener('window:resize')\n refreshAxisNameSpace(): void {\n if (!this.chartInstance) return;\n\n this.chartInstance.setOption({\n xAxis: {\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n nameTextStyle: {\n width: this.resolveAxisNameWidth('x'),\n ...(this.config?.xAxis?.nameTextStyle || {}),\n },\n },\n yAxis: [\n {\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameTextStyle: {\n width: this.resolveAxisNameWidth('y'),\n ...(this.config?.yAxis?.nameTextStyle || {}),\n },\n },\n ],\n });\n }\n\n ngOnDestroy(): void {\n if (this.chartInstance) {\n this.chartInstance.off();\n this.chartInstance.dispose();\n }\n }\n}\n","<div\n class=\"scatter-chart-shell\"\n [class.scatter-chart-shell--legend-left]=\"config.customLegend?.position === 'left'\"\n [class.scatter-chart-shell--legend-right]=\"config.customLegend?.position === 'right'\"\n [class.scatter-chart-shell--legend-bottom]=\"config.customLegend?.position === 'bottom'\"\n>\n @if (\n !config.hideLegend &&\n config.customLegend?.position !== 'bottom' &&\n config.customLegend?.position !== 'right'\n ) {\n <lib-chart-legend\n class=\"scatter-chart-shell__legend\"\n [class.scatter-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--scatter-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n\n <div\n #chartContainer\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n (chartInit)=\"onChartInit($event)\"\n class=\"chart-container\"\n ></div>\n\n @if (\n !config.hideLegend &&\n (config.customLegend?.position === 'bottom' || config.customLegend?.position === 'right')\n ) {\n <lib-chart-legend\n class=\"scatter-chart-shell__legend\"\n [class.scatter-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--scatter-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n</div>\n","import {\n APP_ID,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n StatusTimelineConfig,\n StatusTimelineEvent,\n StatusTimelineItem,\n StatusTimelineStatus,\n StatusTimelineTooltipContext,\n} from './status-timeline.types';\n\ninterface RenderedTimelineItem {\n source: StatusTimelineItem;\n originalIndex: number;\n start: Date;\n end: Date;\n durationMs: number;\n status: StatusTimelineStatus;\n accessibleLabel: string;\n tooltip: string;\n tooltipLines: string[];\n}\n\nconst DEFAULT_COLORS = ['#2f8f3a', '#d0a020', '#dc8a1f', '#a43b35', '#d9dde1'];\nconst DEFAULT_UNKNOWN_STATUS: StatusTimelineStatus = {\n value: '__unknown__',\n label: 'Unknown status',\n color: '#7b8491',\n};\nlet statusTimelineInstanceSequence = 0;\n\n@Component({\n selector: 'lib-status-timeline',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './status-timeline.html',\n styleUrl: './status-timeline.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StatusTimelineComponent implements OnChanges {\n @Input({ required: true }) config!: StatusTimelineConfig;\n\n @Output() chartEvent = new EventEmitter<StatusTimelineEvent>();\n\n renderedItems: readonly RenderedTimelineItem[] = [];\n legendStatuses: readonly StatusTimelineStatus[] = [];\n activeIndex: number | null = null;\n timelineMinWidth = '100%';\n resolvedStartLabel = '';\n resolvedEndLabel = '';\n readonly tooltipIdPrefix = `${inject(APP_ID).replace(/[^a-zA-Z0-9_-]/g, '-')}-status-timeline-${statusTimelineInstanceSequence++}-tooltip`;\n private dimmedStatuses = new Set<string>();\n\n get legendPosition(): 'top' | 'bottom' | 'left' | 'right' {\n return this.config.legendPosition ?? 'bottom';\n }\n\n get legendLayout(): 'horizontal' | 'vertical' {\n return (\n this.config.legendLayout ??\n (this.legendPosition === 'left' || this.legendPosition === 'right' ? 'vertical' : 'horizontal')\n );\n }\n\n get legendScrollable(): boolean {\n return this.config.legendScrollable !== false;\n }\n\n get legendInteractive(): boolean {\n return this.config.legendInteractive !== false;\n }\n\n get legendAlign(): 'start' | 'center' | 'end' | 'space-between' {\n if (this.config.legendAlign === 'left') return 'start';\n if (this.config.legendAlign === 'right') return 'end';\n return this.config.legendAlign ?? 'start';\n }\n\n get legendLabelAlign(): 'left' | 'center' | 'right' {\n return this.config.legendLabelAlign ?? 'left';\n }\n\n get legendLabelJustify(): 'flex-start' | 'center' | 'flex-end' {\n if (this.legendLabelAlign === 'center') return 'center';\n if (this.legendLabelAlign === 'right') return 'flex-end';\n return 'flex-start';\n }\n\n get endpointLabelsAlign(): 'start' | 'center' | 'end' | 'space-between' {\n if (this.config.endpointLabelsAlign === 'left') return 'start';\n if (this.config.endpointLabelsAlign === 'right') return 'end';\n return this.config.endpointLabelsAlign ?? 'space-between';\n }\n\n get legendMaxWidth(): string | null {\n return this.config.legendMaxWidth ?? null;\n }\n\n get legendMaxHeight(): string | null {\n return this.config.legendMaxHeight ?? (this.legendLayout === 'vertical' ? '240px' : null);\n }\n\n ngOnChanges(): void {\n this.rebuild();\n }\n\n activate(index: number): void {\n this.activeIndex = index;\n }\n\n deactivate(index: number): void {\n if (this.activeIndex === index) this.activeIndex = null;\n }\n\n selectItem(item: RenderedTimelineItem): void {\n this.chartEvent.emit({\n type: 'itemClick',\n item: item.source,\n index: item.originalIndex,\n });\n }\n\n isStatusSelected(value: string): boolean {\n return !this.dimmedStatuses.has(value);\n }\n\n toggleStatus(status: StatusTimelineStatus): void {\n if (!this.legendInteractive) return;\n\n if (this.dimmedStatuses.has(status.value)) {\n this.dimmedStatuses.delete(status.value);\n } else {\n this.dimmedStatuses.add(status.value);\n }\n\n this.chartEvent.emit({\n type: 'legendToggle',\n status,\n selected: this.isStatusSelected(status.value),\n });\n }\n\n tooltipId(index: number): string {\n return `${this.tooltipIdPrefix}-${index}`;\n }\n\n trackItem(_: number, item: RenderedTimelineItem): string {\n return `${item.start.getTime()}-${item.end.getTime()}-${item.status.value}-${item.originalIndex}`;\n }\n\n trackStatus(_: number, status: StatusTimelineStatus): string {\n return status.value;\n }\n\n private rebuild(): void {\n const config = this.config;\n if (!config) {\n this.renderedItems = [];\n this.legendStatuses = [];\n return;\n }\n\n const statusMap = new Map<string, StatusTimelineStatus>();\n this.legendStatuses = (config.statuses ?? []).map((status, index) => {\n const resolved = { ...status, color: status.color ?? DEFAULT_COLORS[index % DEFAULT_COLORS.length] };\n statusMap.set(resolved.value, resolved);\n return resolved;\n });\n const configuredStatusValues = new Set(this.legendStatuses.map((status) => status.value));\n this.dimmedStatuses = new Set(\n [...this.dimmedStatuses].filter((value) => configuredStatusValues.has(value)),\n );\n\n const unknownStatus: StatusTimelineStatus = {\n ...DEFAULT_UNKNOWN_STATUS,\n ...config.unknownStatus,\n value: config.unknownStatus?.value ?? DEFAULT_UNKNOWN_STATUS.value,\n label: config.unknownStatus?.label ?? DEFAULT_UNKNOWN_STATUS.label,\n color: config.unknownStatus?.color ?? DEFAULT_UNKNOWN_STATUS.color,\n };\n\n this.renderedItems = (config.data ?? [])\n .map((item, originalIndex) => {\n const start = this.toDate(item.start);\n const end = this.toDate(item.end);\n if (!start || !end || end.getTime() <= start.getTime()) return null;\n\n const status = statusMap.get(item.status) ?? {\n ...unknownStatus,\n value: item.status,\n label: config.unknownStatus?.label ?? `Unknown (${item.status})`,\n };\n const durationMs = end.getTime() - start.getTime();\n const context: StatusTimelineTooltipContext = { item, status, start, end, durationMs };\n const tooltip = config.tooltipFormatter?.(context) ?? this.defaultTooltip(context);\n const accessibleLabel = [item.label, status.label, tooltip].filter(Boolean).join('. ');\n\n const tooltipLines = tooltip\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n\n return {\n source: item,\n originalIndex,\n start,\n end,\n durationMs,\n status,\n tooltip,\n tooltipLines,\n accessibleLabel,\n };\n })\n .filter((item): item is RenderedTimelineItem => item !== null)\n .sort((left, right) => left.start.getTime() - right.start.getTime());\n\n const gap = Math.max(config.segmentGap ?? 2, 0);\n const minimum = Math.max(config.minSegmentWidth ?? 6, 1);\n const requiredWidth = this.renderedItems.length * minimum + Math.max(this.renderedItems.length - 1, 0) * gap;\n this.timelineMinWidth = `max(100%, ${requiredWidth}px)`;\n this.resolvedStartLabel = config.startLabel ?? this.formatDate(this.renderedItems[0]?.start);\n this.resolvedEndLabel = config.endLabel ?? this.formatDate(this.renderedItems.at(-1)?.end);\n this.activeIndex = null;\n }\n\n private toDate(value: Date | string): Date | null {\n const date = value instanceof Date ? new Date(value.getTime()) : new Date(value);\n return Number.isFinite(date.getTime()) ? date : null;\n }\n\n private formatDate(date?: Date): string {\n if (!date) return '';\n return (\n this.config.dateFormatter?.(date) ??\n new Intl.DateTimeFormat(undefined, { dateStyle: 'medium' }).format(date)\n );\n }\n\n private defaultTooltip(context: StatusTimelineTooltipContext): string {\n const duration =\n this.config.durationFormatter?.(context.durationMs) ?? this.formatDuration(context.durationMs);\n return `${context.status.label}. Start: ${this.formatDate(context.start)}. End: ${this.formatDate(context.end)}. Duration: ${duration}`;\n }\n\n private formatDuration(durationMs: number): string {\n const totalMinutes = Math.max(Math.round(durationMs / 60_000), 1);\n const days = Math.floor(totalMinutes / 1_440);\n const hours = Math.floor((totalMinutes % 1_440) / 60);\n const minutes = totalMinutes % 60;\n return [days ? `${days}d` : '', hours ? `${hours}h` : '', minutes || (!days && !hours) ? `${minutes}m` : '']\n .filter(Boolean)\n .join(' ');\n }\n}\n","<section\n class=\"status-timeline\"\n [style.--status-timeline-gap]=\"config.segmentGap ?? 2\"\n [style.--status-timeline-min-segment-width]=\"config.minSegmentWidth ?? 6\"\n [style.--status-timeline-dimmed-opacity]=\"config.legendDimmedOpacity ?? 0.3\"\n [class.status-timeline--legend-top]=\"legendPosition === 'top'\"\n [class.status-timeline--legend-bottom]=\"legendPosition === 'bottom'\"\n [class.status-timeline--legend-left]=\"legendPosition === 'left'\"\n [class.status-timeline--legend-right]=\"legendPosition === 'right'\"\n [attr.aria-label]=\"config.ariaLabel || 'Status timeline'\"\n>\n @if (config.loading) {\n <div class=\"status-timeline__state\" role=\"status\" aria-live=\"polite\">\n <span class=\"status-timeline__skeleton\" aria-hidden=\"true\"></span>\n <span>{{ config.loadingLabel || 'Loading timeline' }}</span>\n </div>\n } @else if (config.error) {\n <div class=\"status-timeline__state status-timeline__state--error\" role=\"alert\">\n {{ config.error }}\n </div>\n } @else if (!renderedItems.length) {\n <div class=\"status-timeline__state\" role=\"status\">\n {{ config.emptyLabel || 'No timeline data available' }}\n </div>\n } @else {\n <div class=\"status-timeline__visual\">\n <div class=\"status-timeline__scroll\" tabindex=\"0\" aria-label=\"Scrollable status intervals\">\n <div class=\"status-timeline__content\" [style.min-width]=\"timelineMinWidth\">\n <div class=\"status-timeline__segments\" role=\"list\">\n @for (item of renderedItems; track trackItem($index, item); let index = $index) {\n <button\n type=\"button\"\n role=\"listitem\"\n class=\"status-timeline__segment\"\n [class.status-timeline__segment--dimmed]=\"!isStatusSelected(item.status.value)\"\n [style.background-color]=\"item.status.color\"\n [style.flex-grow]=\"item.durationMs\"\n [attr.aria-label]=\"item.accessibleLabel\"\n [attr.aria-describedby]=\"config.showTooltip !== false ? tooltipId(index) : null\"\n (mouseenter)=\"activate(index)\"\n (mouseleave)=\"deactivate(index)\"\n (focus)=\"activate(index)\"\n (blur)=\"deactivate(index)\"\n (click)=\"selectItem(item)\"\n >\n <span class=\"status-timeline__sr-only\">{{ item.status.label }}</span>\n @if (config.showTooltip !== false && activeIndex === index) {\n <span\n class=\"status-timeline__tooltip\"\n [class.status-timeline__tooltip--start]=\"index === 0\"\n [class.status-timeline__tooltip--end]=\"index === renderedItems.length - 1\"\n [id]=\"tooltipId(index)\"\n role=\"tooltip\"\n >\n @for (line of item.tooltipLines; track $index) {\n <span\n class=\"status-timeline__tooltip-line\"\n [class.status-timeline__tooltip-title]=\"$index === 0\"\n >{{ line }}</span\n >\n }\n </span>\n }\n </button>\n }\n </div>\n\n @if (config.showEndpointLabels !== false) {\n <div\n class=\"status-timeline__labels\"\n [class.status-timeline__labels--start]=\"endpointLabelsAlign === 'start'\"\n [class.status-timeline__labels--center]=\"endpointLabelsAlign === 'center'\"\n [class.status-timeline__labels--end]=\"endpointLabelsAlign === 'end'\"\n aria-hidden=\"true\"\n >\n <span>{{ resolvedStartLabel }}</span>\n <span>{{ resolvedEndLabel }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n\n @if (config.showLegend !== false && legendStatuses.length) {\n <div\n class=\"status-timeline__legend-row\"\n [class.status-timeline__legend-row--vertical]=\"legendLayout === 'vertical'\"\n >\n <ul\n class=\"status-timeline__legend\"\n [class.status-timeline__legend--vertical]=\"legendLayout === 'vertical'\"\n [class.status-timeline__legend--scrollable]=\"legendScrollable\"\n [class.status-timeline__legend--align-center]=\"legendAlign === 'center'\"\n [class.status-timeline__legend--align-end]=\"legendAlign === 'end'\"\n [class.status-timeline__legend--align-space-between]=\"legendAlign === 'space-between'\"\n [style.max-width]=\"legendMaxWidth\"\n [style.max-height]=\"legendMaxHeight\"\n aria-label=\"Status legend\"\n tabindex=\"0\"\n >\n @for (status of legendStatuses; track trackStatus($index, status)) {\n <li\n class=\"status-timeline__legend-item\"\n [class.status-timeline__legend-item--dimmed]=\"!isStatusSelected(status.value)\"\n [style.justify-content]=\"legendLabelJustify\"\n [style.text-align]=\"legendLabelAlign\"\n >\n <button\n type=\"button\"\n class=\"status-timeline__legend-button\"\n role=\"switch\"\n [attr.aria-checked]=\"isStatusSelected(status.value)\"\n [attr.aria-label]=\"\n (isStatusSelected(status.value) ? 'Hide ' : 'Show ') + status.label + ' intervals'\n \"\n [disabled]=\"!legendInteractive\"\n (click)=\"toggleStatus(status)\"\n >\n <span\n class=\"status-timeline__legend-swatch\"\n [style.background-color]=\"status.color\"\n aria-hidden=\"true\"\n ></span>\n <span>{{ status.label }}</span>\n </button>\n </li>\n }\n </ul>\n @if (config.legendNote) {\n <p class=\"status-timeline__legend-note\">{{ config.legendNote }}</p>\n }\n </div>\n }\n }\n</section>\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport * as echarts from 'echarts/core';\nimport { EChartsCoreOption } from 'echarts';\nimport { GaugeChart as GaugeChartEchart } from 'echarts/charts';\nimport {\n GaugeChartConfig,\n GaugeConditionalRule,\n GaugeRuleUnit,\n GaugeStyleConfig,\n GaugeTextCase,\n GaugeTypographyConfig,\n} from '../../modal/charts-modal';\nimport { GraphicComponent, TooltipComponent, TitleComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { Charts } from '../../service/charts';\n\necharts.use([GaugeChartEchart, GraphicComponent, TooltipComponent, TitleComponent, CanvasRenderer]);\n\ninterface GaugeRule {\n operator: '<=' | '<' | 'between' | '>=' | '>';\n value: number;\n valueTo?: number;\n unit: 'number' | 'percentage';\n color: string;\n opacity?: number;\n}\n\ntype GaugeColorStop = [number, string];\n\ninterface GaugeSegment {\n start: number;\n end: number;\n color: string;\n}\nconst DEFAULT_GAUGE_CENTER: [string, string] = ['50%', '84%'];\nconst DEFAULT_GAUGE_RADIUS = '140%';\n\n@Component({\n selector: 'lib-gauge-chart',\n imports: [NgxEchartsDirective],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './gauge-chart.html',\n styleUrl: './gauge-chart.scss',\n})\nexport class GaugeChart implements OnChanges, OnDestroy {\n @Input() config: GaugeChartConfig = {};\n @Input() theme: any;\n @Input() events: string[] = [];\n\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n\n chartOption: EChartsCoreOption = {};\n chartInstance!: echarts.ECharts;\n private chartResizeObserver?: ResizeObserver;\n private previousReactiveSignature = '';\n\n // Keep direct construction backwards compatible for consumers that build chart\n // options outside Angular's DI context. Angular still injects the root service\n // when this class is created as a component.\n constructor(private chartService: Charts = new Charts()) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n\n this.buildOption();\n }\n\n ngDoCheck(): void {\n const signature = JSON.stringify({\n config: this.config,\n events: this.events,\n });\n\n if (signature !== this.previousReactiveSignature) {\n this.previousReactiveSignature = signature;\n this.buildOption();\n }\n }\n\n private buildOption(): void {\n if (this.config.option) {\n this.chartOption = this.applyTargetPointerSizing(this.config.option);\n\n if (this.chartInstance) {\n this.chartInstance.setOption(this.chartOption, true);\n }\n\n return;\n }\n\n const style = this.config.style;\n const optionSeries = this.resolveOptionSeriesOption(this.config.option);\n const echartStyleOption = this.mergeGaugeSeriesOptions(\n this.resolveStyleSeriesOption(style),\n optionSeries,\n this.config.seriesOption,\n );\n const rawValue = this.resolveMetricValue();\n const numericValues = this.resolveMetricValues();\n const autoMin = this.calculateAutoMin(numericValues);\n const autoMax = this.niceNumberUp(Math.abs(rawValue || 1) * 1.5);\n const configuredMin = this.toFiniteNumber(this.config.min);\n const configuredMax = this.toFiniteNumber(this.config.max);\n const min = configuredMin ?? autoMin;\n const max = configuredMax !== undefined && configuredMax > min ? configuredMax : autoMax;\n const isPercentage = this.config.midValueType === 'percentage';\n const range = max - min || 1;\n const displayMin = isPercentage ? 0 : min;\n const displayMax = isPercentage ? 100 : max;\n const displayValue = isPercentage\n ? this.clamp(((rawValue - min) / range) * 100, 0, 100)\n : rawValue;\n const targetValue = this.toFiniteNumber(this.config.targetValue);\n const displayTarget =\n targetValue === undefined\n ? undefined\n : isPercentage\n ? this.clamp(((targetValue - min) / range) * 100, 0, 100)\n : targetValue;\n const colorStops = this.resolveColorStops(min, max);\n const activeColor = this.resolveActiveColor(rawValue, min, max);\n const conditionalFormatting = style?.conditionalFormatting;\n const borderThickness = this.clamp(style?.borderThickness ?? 0, 0, 20);\n const barWidth = this.resolveGaugeWidth(echartStyleOption, style?.barWidth ?? 38);\n const compactNumber = style?.compactNumber !== false;\n const precision = Math.floor(this.clamp(style?.decimalPrecision ?? 1, 0, 6));\n const showMidValue = this.config.showMidValue === true;\n const midValueCount = Math.max(Math.floor(this.config.midValueCount ?? 0), 0);\n const splitNumber = showMidValue && midValueCount > 0 ? midValueCount + 1 : 1;\n const metricNameWidth = this.resolveMetricNameWidth();\n const metricNameFontSize = this.clamp(style?.metricNameTypography?.fontSize ?? 10, 8, 40);\n const metricValueFontSize = this.clamp(style?.metricValueTypography?.fontSize ?? 14, 8, 40);\n const metricName = this.truncateMetricName(\n this.applyTextCase(this.config.name ?? 'Value', style?.metricNameTypography?.case),\n metricNameWidth,\n metricNameFontSize,\n );\n const metricValue = this.applyTextCase(\n this.formatNumber(rawValue, compactNumber, precision),\n style?.metricValueTypography?.case,\n );\n\n const generatedGaugeSeries = {\n type: 'gauge',\n min: displayMin,\n max: displayMax,\n startAngle: 180,\n endAngle: 0,\n center: [...DEFAULT_GAUGE_CENTER],\n radius: DEFAULT_GAUGE_RADIUS,\n splitNumber,\n progress: {\n show: conditionalFormatting?.type !== 'rule',\n roundCap: false,\n width: barWidth,\n itemStyle: {\n color: conditionalFormatting?.enabled\n ? {\n type: 'linear',\n x: 0,\n y: 0,\n x2: 1,\n y2: 0,\n colorStops: colorStops.map((c: any) => {\n return { offset: c?.[0], color: c?.[1] };\n }),\n }\n : activeColor,\n borderWidth: borderThickness,\n borderColor: borderThickness ? activeColor : undefined,\n },\n },\n axisLine: {\n roundCap: false,\n lineStyle: {\n width: barWidth,\n ...(conditionalFormatting?.enabled &&\n conditionalFormatting?.type === 'rule' && {\n color: this.getGaugeAxisColors(\n conditionalFormatting?.rules || [],\n displayMin,\n displayMax,\n displayValue,\n style?.barColor?.color || '#4378ea', // progress color\n style?.rangeColor?.color || '#f2f3f5', // axis color\n ),\n }),\n opacity: 1,\n },\n },\n pointer: {\n show: false,\n },\n title: {\n show: false,\n },\n anchor: {\n show: false,\n },\n axisTick: {\n show: showMidValue,\n distance: this.config.midValuePosition === 'inside' ? -22 : 0,\n length: 4,\n lineStyle: {\n color: '#6b7280',\n width: 1,\n },\n },\n splitLine: {\n show: showMidValue,\n distance: this.config.midValuePosition === 'inside' ? -24 : 0,\n length: 8,\n lineStyle: {\n color: '#6b7280',\n width: 1,\n },\n },\n axisLabel: {\n show: this.config.showAxis !== false || showMidValue,\n distance: this.config.midValuePosition === 'inside' ? -36 : 10,\n color: '#111827',\n fontSize: 10,\n align: 'center',\n verticalAlign: 'middle',\n formatter: (value: number) =>\n this.axisLabelFormatter(value, displayMin, displayMax, showMidValue),\n rich: {\n gaugeLabel: {\n padding: showMidValue ? [0, 0, 0, 0] : [16, 0, 0, 0],\n color: '#434a51',\n fontWeight: 600,\n align: 'center',\n verticalAlign: 'middle',\n },\n },\n },\n detail: {\n offsetCenter: [0, '-10%'],\n color: '#252a31',\n fontSize: 14,\n formatter: () => `{label|${metricName}}\\n{value|${metricValue}}`,\n rich: {\n label: {\n ...this.resolveTypography(style?.metricNameTypography, {\n color: '#6b7280',\n fontSize: 10,\n }),\n // A metric can be a single, very long word. Give the rich-text\n // token a responsive width so ECharts truncates it instead of\n // drawing it beyond the gauge's bounds.\n width: metricNameWidth,\n overflow: 'truncate',\n ellipsis: '...',\n align: 'center',\n // Keep each rich-text line tall enough for its current font size.\n // Fixed line heights make the name and value overlap at large sizes.\n lineHeight: this.resolveTypographyLineHeight(metricNameFontSize),\n },\n value: {\n ...this.resolveTypography(style?.metricValueTypography, {\n color: '#252a31',\n fontSize: 14,\n }),\n lineHeight: this.resolveTypographyLineHeight(metricValueFontSize),\n },\n },\n },\n data: [{ value: displayValue, name: this.config.name ?? 'Value' }],\n };\n const gaugeSeries = this.mergeGaugeSeriesOptions(generatedGaugeSeries, echartStyleOption);\n gaugeSeries['type'] = 'gauge';\n gaugeSeries['min'] = displayMin;\n gaugeSeries['max'] = displayMax;\n gaugeSeries['data'] = [{ value: displayValue, name: this.config.name ?? 'Value' }];\n // Typography set through `style` is the public, dynamic API. Preserve any\n // other detail options from `seriesOption`, but do not let its rich-text\n // defaults override the metric name/value styles.\n gaugeSeries['detail'] = this.deepMerge(\n gaugeSeries['detail'] ?? {},\n generatedGaugeSeries.detail,\n );\n const targetPointer = this.calculateTargetPointerGeometry(gaugeSeries);\n\n const generatedChartOption = {\n backgroundColor: this.config.backgroundColor ?? 'transparent',\n title: {\n show: this.config.showTitle ?? !!this.config.title,\n text: this.config.title,\n left: 'center',\n },\n tooltip: {\n show: this.config.showTooltip ?? true,\n trigger: 'item',\n formatter: (params: any) =>\n this.config.tooltipFormatter\n ? this.config.tooltipFormatter(params, this.config)\n : this.defaultTooltipFormatter(rawValue),\n },\n series: [\n gaugeSeries,\n ...(this.config.showTarget && displayTarget !== undefined\n ? [\n {\n type: 'gauge',\n min: displayMin,\n max: displayMax,\n startAngle: 180,\n endAngle: 0,\n center: gaugeSeries['center'] ?? [...DEFAULT_GAUGE_CENTER],\n radius: gaugeSeries['radius'] ?? DEFAULT_GAUGE_RADIUS,\n axisLine: {\n lineStyle: {\n width: 0,\n color: [[1, 'transparent']],\n },\n },\n pointer: {\n show: true,\n icon: 'rect',\n ...targetPointer,\n itemStyle: {\n color: '#374151',\n },\n },\n progress: { show: false },\n axisTick: { show: false },\n splitLine: { show: false },\n axisLabel: { show: false },\n title: { show: false },\n detail: { show: false },\n data: [{ value: displayTarget, name: 'Target' }],\n },\n ]\n : []),\n ],\n };\n this.chartOption = this.mergeChartOptions(generatedChartOption, this.config.option);\n\n if (this.chartInstance) {\n this.chartInstance.setOption(this.chartOption, true);\n }\n }\n\n private getRuleColor(rule: GaugeRule): string {\n return this.applyOpacity(rule.color, rule.opacity ?? 100);\n }\n private clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n }\n private segmentsToColorStops(\n segments: GaugeSegment[],\n min: number,\n max: number,\n ): GaugeColorStop[] {\n return segments\n .filter((segment) => segment.end > segment.start)\n .map((segment) => [this.clamp((segment.end - min) / (max - min), 0, 1), segment.color]);\n }\n private convertToGaugeValue(\n value: number,\n unit: GaugeRule['unit'],\n min: number,\n max: number,\n actualValue: number,\n ): number {\n if (unit === 'percentage') {\n const percentage = this.clamp(value, 0, 100);\n\n return min + ((actualValue - min) * percentage) / 100;\n }\n\n return value;\n }\n private convertRuleToSegment(\n rule: GaugeRule,\n min: number,\n max: number,\n actualValue: number,\n ): GaugeSegment | null {\n const value = this.convertToGaugeValue(rule.value, rule.unit, min, max, actualValue);\n\n const valueTo =\n rule.valueTo !== undefined\n ? this.convertToGaugeValue(rule.valueTo, rule.unit, min, max, actualValue)\n : undefined;\n\n switch (rule.operator) {\n case '<=':\n case '<':\n return {\n start: min,\n end: value,\n color: this.getRuleColor(rule),\n };\n\n case 'between':\n if (valueTo === undefined) {\n return null;\n }\n\n return {\n start: Math.min(value, valueTo),\n end: Math.max(value, valueTo),\n color: this.getRuleColor(rule),\n };\n\n case '>=':\n case '>':\n return {\n start: value,\n end: max,\n color: this.getRuleColor(rule),\n };\n\n default:\n return null;\n }\n }\n private getGaugeAxisColors(\n rules: any[],\n min: number,\n max: number,\n actualValue: number,\n progressColor: string,\n axisColor: string,\n ): GaugeColorStop[] {\n if (max <= min) {\n return [[1, axisColor]];\n }\n\n const actual = this.clamp(actualValue, min, max);\n\n // No progress\n if (actual <= min) {\n return [[1, axisColor]];\n }\n\n const ruleSegments = rules\n .map((rule) => this.convertRuleToSegment(rule, min, max, actual))\n .filter((segment): segment is GaugeSegment => segment !== null);\n\n /*\n * Rules are allowed ONLY inside actual progress.\n */\n const clippedRules = ruleSegments\n .map((rule) => ({\n ...rule,\n start: Math.max(rule.start, min),\n end: Math.min(rule.end, actual),\n }))\n .filter((rule) => rule.end > rule.start);\n\n /*\n * Build the complete gauge from min → max.\n */\n const segments: GaugeSegment[] = [];\n\n let cursor = min;\n\n /*\n * Sort rules by start position.\n */\n clippedRules.sort((a, b) => a.start - b.start);\n\n for (const rule of clippedRules) {\n /*\n * Gap before rule:\n * use progress color.\n */\n if (rule.start > cursor) {\n segments.push({\n start: cursor,\n end: rule.start,\n color: progressColor,\n });\n }\n\n /*\n * Rule area.\n */\n const start = Math.max(cursor, rule.start);\n\n if (rule.end > start) {\n segments.push({\n start,\n end: rule.end,\n color: rule.color,\n });\n\n cursor = Math.max(cursor, rule.end);\n }\n }\n\n /*\n * Remaining area inside actual progress.\n * Use progress color.\n */\n if (cursor < actual) {\n segments.push({\n start: cursor,\n end: actual,\n color: progressColor,\n });\n }\n\n /*\n * Everything after actual progress:\n * use axis color.\n */\n if (actual < max) {\n segments.push({\n start: actual,\n end: max,\n color: axisColor,\n });\n }\n\n return this.segmentsToColorStops(segments, min, max);\n }\n\n private applyOpacity(color: string, opacity: number): string {\n const alpha = this.clamp(opacity, 0, 100) / 100;\n\n if (color.startsWith('#')) {\n let hex = color.slice(1);\n\n if (hex.length === 3) {\n hex = hex\n .split('')\n .map((char) => char + char)\n .join('');\n }\n\n if (hex.length === 6) {\n const number = parseInt(hex, 16);\n\n const r = (number >> 16) & 255;\n const g = (number >> 8) & 255;\n const b = number & 255;\n\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n }\n\n return color;\n }\n\n onChartInit(ec: echarts.ECharts): void {\n this.chartInstance = ec;\n this.buildOption();\n this.bindEvents();\n this.observeChartResize();\n }\n\n /**\n * Calculates all target-marker geometry in one place. A gauge pointer icon\n * is drawn from `offsetCenter - length` through `offsetCenter`, so the\n * offset must account for the inner edge while length covers the band and\n * both edge overflows. Use the widest band because progress and axisLine\n * may be configured independently.\n */\n private calculateTargetPointerGeometry(\n bandSeries: Record<string, any>,\n ): Record<string, number | string | [number, number | string]> {\n const barWidth = this.resolveGaugeWidth(bandSeries, 38, true);\n const edgeOverflow = Math.max(6, Math.round(barWidth * 0.25));\n const pointerLength = barWidth + edgeOverflow * 2;\n const radius = this.resolveGaugeRadius(bandSeries['radius']);\n\n if (radius === undefined) {\n return {\n width: 10,\n length: pointerLength,\n offsetCenter: [0, '-91%'],\n };\n }\n\n return {\n width: 10,\n length: pointerLength,\n offsetCenter: [0, -(radius - barWidth - edgeOverflow)],\n };\n }\n\n private resolveGaugeRadius(radiusOption: unknown): number | undefined {\n if (!this.chartInstance) return undefined;\n\n const radius = this.toFiniteNumber(radiusOption);\n if (radius !== undefined) return radius;\n if (typeof radiusOption !== 'string' || !radiusOption.endsWith('%')) return undefined;\n\n const percentage = this.toFiniteNumber(radiusOption.slice(0, -1));\n if (percentage === undefined) return undefined;\n return (\n (Math.min(this.chartInstance.getWidth(), this.chartInstance.getHeight()) / 2) *\n (percentage / 100)\n );\n }\n\n private observeChartResize(): void {\n if (typeof ResizeObserver === 'undefined' || !this.chartInstance) return;\n\n this.chartResizeObserver?.disconnect();\n this.chartResizeObserver = new ResizeObserver(() => {\n if (this.chartInstance.isDisposed()) return;\n this.chartInstance.resize();\n this.buildOption();\n });\n this.chartResizeObserver.observe(this.chartInstance.getDom());\n }\n\n private bindEvents(): void {\n if (!this.chartInstance) return;\n this.chartInstance.off();\n\n this.events.forEach((eventName) => {\n this.chartInstance.on(eventName, (params: any) => {\n if (eventName === 'contextmenu' && params.event?.event) {\n params.event.event.preventDefault();\n }\n\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n });\n }\n\n private resolveOptionSeriesOption(\n option: Record<string, any> | undefined,\n ): Record<string, any> | undefined {\n const series = option?.['series'];\n if (!Array.isArray(series)) return undefined;\n return series.find((seriesOption) => seriesOption?.type === 'gauge') ?? series[0];\n }\n\n /**\n * Custom ECharts options can provide a second, transparent gauge series for\n * the target marker. Apply the same automatic marker sizing used by the\n * generated option without changing any of the caller's other settings.\n */\n private applyTargetPointerSizing(option: Record<string, any>): Record<string, any> {\n if (!Array.isArray(option['series'])) return option;\n\n const bandSeries = option['series'].find(\n (seriesOption: Record<string, any>) =>\n seriesOption?.['type'] === 'gauge' && !this.isTargetPointerSeries(seriesOption),\n );\n if (!bandSeries) return option;\n\n const targetPointer = this.calculateTargetPointerGeometry(bandSeries);\n let changed = false;\n const series = option['series'].map((seriesOption: Record<string, any>) => {\n if (!this.isTargetPointerSeries(seriesOption)) return seriesOption;\n\n changed = true;\n return {\n ...seriesOption,\n center: bandSeries['center'] ?? seriesOption['center'] ?? [...DEFAULT_GAUGE_CENTER],\n radius: bandSeries['radius'] ?? seriesOption['radius'] ?? DEFAULT_GAUGE_RADIUS,\n pointer: {\n ...seriesOption['pointer'],\n ...targetPointer,\n },\n };\n });\n\n return changed ? { ...option, series } : option;\n }\n\n private isTargetPointerSeries(seriesOption: Record<string, any>): boolean {\n const axisLineWidth = this.toFiniteNumber(seriesOption?.['axisLine']?.['lineStyle']?.['width']);\n return (\n seriesOption?.['type'] === 'gauge' &&\n seriesOption?.['pointer']?.['show'] === true &&\n seriesOption?.['progress']?.['show'] !== true &&\n (seriesOption?.['axisLine']?.['show'] === false || axisLineWidth === 0)\n );\n }\n\n private resolveStyleSeriesOption(style: GaugeStyleConfig | undefined): Record<string, any> {\n if (!style) return {};\n\n return {\n ...(style.axisLine ? { axisLine: style.axisLine } : {}),\n ...(style.progress ? { progress: style.progress } : {}),\n ...(style.detail ? { detail: style.detail } : {}),\n ...(style.axisLabel ? { axisLabel: style.axisLabel } : {}),\n ...(style.pointer ? { pointer: style.pointer } : {}),\n ...(style.axisTick ? { axisTick: style.axisTick } : {}),\n ...(style.splitLine ? { splitLine: style.splitLine } : {}),\n ...(style.anchor ? { anchor: style.anchor } : {}),\n };\n }\n\n private resolveGaugeWidth(\n seriesOption: Record<string, any>,\n fallback: number,\n visibleOnly = false,\n ): number {\n const axisLineWidth = this.toFiniteNumber(seriesOption?.['axisLine']?.['lineStyle']?.['width']);\n const progressWidth = this.toFiniteNumber(seriesOption?.['progress']?.['width']);\n const configuredWidths = [\n ...(!visibleOnly || seriesOption?.['axisLine']?.['show'] !== false ? [axisLineWidth] : []),\n ...(!visibleOnly || seriesOption?.['progress']?.['show'] === true ? [progressWidth] : []),\n ].filter((width): width is number => width !== undefined);\n // Cover whichever configured band is thicker. Fall back only when neither\n // width is supplied, so a deliberately thin gauge is not enlarged.\n return this.clamp(configuredWidths.length ? Math.max(...configuredWidths) : fallback, 1, 80);\n }\n\n private mergeChartOptions(\n generatedOption: Record<string, any>,\n customOption: Record<string, any> | undefined,\n ): Record<string, any> {\n if (!customOption) return generatedOption;\n\n const { series, ...customTopLevelOption } = customOption;\n const mergedOption = this.deepMerge({ ...generatedOption }, customTopLevelOption);\n\n if (Array.isArray(series)) {\n const generatedSeries = Array.isArray(generatedOption['series'])\n ? generatedOption['series']\n : [];\n mergedOption['series'] = series.map((seriesOption, index) =>\n this.deepMerge({ ...(generatedSeries[index] ?? {}) }, seriesOption),\n );\n\n if (generatedSeries.length > series.length) {\n mergedOption['series'].push(...generatedSeries.slice(series.length));\n }\n }\n\n return mergedOption;\n }\n\n private mergeGaugeSeriesOptions(\n ...options: Array<Record<string, any> | undefined>\n ): Record<string, any> {\n return options.reduce<Record<string, any>>(\n (merged, option) => this.deepMerge(merged, option),\n {},\n );\n }\n\n private deepMerge(\n target: Record<string, any>,\n source: Record<string, any> | undefined,\n ): Record<string, any> {\n if (!source) return target;\n\n Object.entries(source).forEach(([key, value]) => {\n if (this.isPlainObject(value) && this.isPlainObject(target[key])) {\n target[key] = this.deepMerge({ ...target[key] }, value);\n return;\n }\n\n target[key] = value;\n });\n\n return target;\n }\n\n private isPlainObject(value: unknown): value is Record<string, any> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n }\n\n private axisLabelFormatter(\n value: number,\n min: number,\n max: number,\n showMidValue: boolean,\n ): string {\n if (this.config.showAxis === false && !showMidValue) return '';\n\n const rounded =\n this.config.midValueType === 'percentage' ? Math.round(value) : this.niceNumber(value);\n if (!showMidValue && value !== min && value !== max) return '';\n const label =\n this.config.midValueType === 'percentage'\n ? `${rounded}%`\n : this.formatNumber(rounded, this.config.style?.compactNumber !== false, 0);\n const endpointOffset = showMidValue ? '' : '\\n';\n return `{gaugeLabel|${endpointOffset}${label}}`;\n }\n\n private resolveMetricValue(): number {\n const configured = this.toFiniteNumber(this.config.value);\n if (configured !== undefined) return configured;\n\n const values = this.resolveMetricValues();\n if (!values.length) return 0;\n return values.reduce((sum, value) => sum + value, 0);\n }\n\n private resolveMetricNameWidth(): number {\n // `buildOption` also runs before chart initialisation. Use a conservative\n // fallback then recalculate from the actual chart dimensions on init and\n // resize.\n const chartWidth = this.chartInstance?.getWidth();\n if (!chartWidth) return 200;\n\n return this.clamp(Math.floor(chartWidth * 0.7), 80, 400);\n }\n\n private truncateMetricName(name: string, availableWidth: number, fontSize: number): string {\n // Rich-text overflow is not reliably applied to gauge detail text in all\n // ECharts renderers. Trim the string before it reaches the formatter so a\n // long word cannot escape the gauge even when it contains no spaces.\n const averageCharacterWidth = Math.max(fontSize, 8) * 0.62;\n const maximumCharacters = Math.max(Math.floor(availableWidth / averageCharacterWidth), 1);\n\n return name.length > maximumCharacters\n ? `${name.slice(0, Math.max(maximumCharacters - 3, 1))}...`\n : name;\n }\n\n private resolveTypographyLineHeight(fontSize: number): number {\n return Math.ceil(fontSize * 1.3);\n }\n\n private resolveMetricValues(): number[] {\n return (this.config.data ?? [])\n .map((value) => this.toFiniteNumber(value))\n .filter((value): value is number => value !== undefined);\n }\n\n private calculateAutoMin(values: number[]): number {\n const minValue = values.length ? Math.min(...values) : this.resolveMetricValue();\n if (minValue >= 0) return 0;\n return this.niceNumberDown(minValue);\n }\n\n private resolveColorStops(min: number, max: number): Array<[number, string]> {\n const conditional = this.config.style?.conditionalFormatting;\n if (conditional?.enabled) {\n return conditional.type === 'gradient'\n ? this.resolveGradientStops(min, max)\n : this.resolveRuleStops(min, max, conditional.rules ?? []);\n }\n\n const barColor = this.config.style?.barColor;\n const rangeColor = this.config.style?.rangeColor;\n if (barColor?.color || rangeColor?.color) {\n const rawValue = this.resolveMetricValue();\n const valueRatio = this.clamp((rawValue - min) / (max - min || 1), 0, 1);\n const active = this.withOpacity(\n barColor?.color ?? this.config.colors?.[0] ?? '#4378ea',\n barColor?.opacity ?? 100,\n );\n const inactive = this.withOpacity(\n rangeColor?.color ?? this.config.colors?.[1] ?? '#f2f3f5',\n rangeColor?.opacity ?? 100,\n );\n return [\n [valueRatio, active],\n [1, inactive],\n ];\n }\n\n const colors = this.config.colors ?? ['#4378ea'];\n if (colors.length === 1) return [[1, colors[0]]];\n\n return colors.map((color, index) => {\n const stop = colors.length === 1 ? 1 : (index + 1) / colors.length;\n return [this.clamp(stop, 0, 1), color];\n });\n }\n\n private defaultTooltipFormatter(value: number): string {\n const rows = Object.entries(this.config.tooltipFields ?? {})\n .map(\n ([key, fieldValue]) =>\n `${key}: ${\n typeof fieldValue === 'number' && this.config.tooltipCompactValue\n ? this.chartService.compactValueFormat(fieldValue)\n : (fieldValue ?? '-')\n }`,\n )\n .join('<br/>');\n const formattedValue = this.config.tooltipCompactValue\n ? this.chartService.compactValueFormat(\n Number(this.formatNumber(value, false, this.config.style?.decimalPrecision ?? 1)),\n )\n : this.formatNumber(value, false, this.config.style?.decimalPrecision ?? 1);\n const tooltipValueRow = `${this.config.name ?? 'Value'}: ${formattedValue}`;\n return rows ? `${tooltipValueRow}<br/>${rows}` : tooltipValueRow;\n }\n\n private resolveActiveColor(value: number, min: number, max: number): string {\n const conditional = this.config.style?.conditionalFormatting;\n if (conditional?.enabled && conditional.type === 'rule') {\n const matchedRule = (conditional.rules ?? []).find((rule) =>\n this.matchesRule(value, min, max, rule),\n );\n if (matchedRule?.color)\n return this.withOpacity(matchedRule.color, matchedRule.opacity ?? 100);\n }\n\n if (conditional?.enabled && conditional.type === 'gradient') {\n const stops = this.resolveGradientStops(min, max);\n const ratio = this.clamp((value - min) / (max - min || 1), 0, 1);\n const stop = stops.find(([position]) => ratio <= position) ?? stops[stops.length - 1];\n if (stop) return stop[1];\n }\n\n return this.withOpacity(\n this.config.style?.barColor?.color ?? this.config.colors?.[0] ?? '#4378ea',\n this.config.style?.barColor?.opacity ?? 100,\n );\n }\n\n private resolveRuleStops(\n min: number,\n max: number,\n rules: GaugeConditionalRule[],\n ): Array<[number, string]> {\n const fallback = this.withOpacity(\n this.config.style?.rangeColor?.color ?? this.config.colors?.[1] ?? '#f2f3f5',\n this.config.style?.rangeColor?.opacity ?? 100,\n );\n const segments = rules\n .map((rule) => this.ruleToSegment(rule, min, max))\n .filter((segment): segment is { start: number; end: number; color: string } => !!segment)\n .sort((a, b) => a.start - b.start);\n\n if (!segments.length) return [[1, fallback]];\n\n const stops: Array<[number, string]> = [];\n let cursor = 0;\n segments.forEach((segment) => {\n if (segment.start > cursor) stops.push([segment.start, fallback]);\n stops.push([segment.end, segment.color]);\n cursor = Math.max(cursor, segment.end);\n });\n if (cursor < 1) stops.push([1, fallback]);\n\n return stops;\n }\n\n private ruleToSegment(\n rule: GaugeConditionalRule,\n min: number,\n max: number,\n ): { start: number; end: number; color: string } | undefined {\n const firstValue = this.ruleValueToNumber(rule.value, rule.unit, min, max);\n const secondValue = this.ruleValueToNumber(rule.valueTo, rule.unit, min, max);\n if (firstValue === undefined) return undefined;\n\n const ratio = this.clamp((firstValue - min) / (max - min || 1), 0, 1);\n const secondRatio =\n secondValue === undefined ? ratio : this.clamp((secondValue - min) / (max - min || 1), 0, 1);\n const color = this.withOpacity(rule.color ?? '#23964a', rule.opacity ?? 100);\n\n switch (rule.operator) {\n case '>=':\n case '>':\n return { start: ratio, end: 1, color };\n case '<=':\n case '<':\n return { start: 0, end: ratio, color };\n case '=':\n return { start: Math.max(ratio - 0.01, 0), end: Math.min(ratio + 0.01, 1), color };\n case 'between':\n return { start: Math.min(ratio, secondRatio), end: Math.max(ratio, secondRatio), color };\n default:\n return undefined;\n }\n }\n\n private matchesRule(\n value: number,\n min: number,\n max: number,\n rule: GaugeConditionalRule,\n ): boolean {\n const firstValue = this.ruleValueToNumber(rule.value, rule.unit, min, max);\n const secondValue = this.ruleValueToNumber(rule.valueTo, rule.unit, min, max);\n if (firstValue === undefined) return false;\n\n const firstMatches = this.matchesRuleCondition(value, firstValue, rule.operator, secondValue);\n if (!firstMatches) return false;\n if (rule.secondCondition) {\n const second = this.ruleValueToNumber(\n rule.secondCondition.value,\n rule.secondCondition.unit,\n min,\n max,\n );\n return (\n second !== undefined &&\n this.matchesRuleCondition(value, second, rule.secondCondition.operator)\n );\n }\n return true;\n }\n\n private matchesRuleCondition(\n value: number,\n firstValue: number,\n operator: GaugeConditionalRule['operator'],\n secondValue?: number,\n ): boolean {\n switch (operator) {\n case '>=':\n return value >= firstValue;\n case '>':\n return value > firstValue;\n case '<=':\n return value <= firstValue;\n case '<':\n return value < firstValue;\n case '=':\n return value === firstValue;\n case 'between':\n return (\n secondValue !== undefined &&\n value >= Math.min(firstValue, secondValue) &&\n value <= Math.max(firstValue, secondValue)\n );\n default:\n return false;\n }\n }\n\n private resolveGradientStops(min?: number, max?: number): Array<[number, string]> {\n const points = [...(this.config.style?.conditionalFormatting?.gradientPoints ?? [])].sort(\n (a, b) => a.position - b.position,\n );\n const normalized = points.length\n ? points\n : [\n { position: 0, color: '#ff1010', opacity: 100 },\n { position: 50, color: '#f8c232', opacity: 100 },\n { position: 100, color: '#23964a', opacity: 100 },\n ];\n const stylePoints = this.config.style?.conditionalFormatting?.reverseGradient\n ? [...normalized].reverse()\n : normalized;\n\n const stops = normalized.map((point, index) => {\n const from = this.gradientValueToRatio(point.valueFrom, point.unit, min ?? 0, max ?? 1);\n const position = from ?? this.clamp(point.position / 100, 0, 1);\n return [\n position,\n this.withOpacity(\n stylePoints[index]?.color ?? this.config.colors?.[index] ?? '#4378ea',\n stylePoints[index]?.opacity ?? 100,\n ),\n ] as [number, string];\n });\n\n normalized.forEach((point, index) => {\n const to = this.gradientValueToRatio(point.valueTo, point.unit, min ?? 0, max ?? 1);\n if (to !== undefined && stops[index]) stops[index][0] = Math.max(stops[index][0], to);\n });\n\n return stops.sort((a, b) => a[0] - b[0]);\n }\n\n private gradientValueToRatio(\n value: number | null | undefined,\n unit: GaugeRuleUnit | undefined,\n min: number,\n max: number,\n ): number | undefined {\n const numeric = this.toFiniteNumber(value);\n if (numeric === undefined) return undefined;\n const actual =\n unit === 'percentage' ? min + (this.clamp(numeric, 0, 100) / 100) * (max - min) : numeric;\n return this.clamp((actual - min) / (max - min || 1), 0, 1);\n }\n\n private ruleValueToNumber(\n value: number | null | undefined,\n unit: GaugeConditionalRule['unit'],\n min: number,\n max: number,\n ): number | undefined {\n const numericValue = this.toFiniteNumber(value);\n if (numericValue === undefined) return undefined;\n if (unit !== 'percentage') return numericValue;\n return min + (this.clamp(numericValue, 0, 100) / 100) * (max - min);\n }\n\n private resolveTypography(\n typography: GaugeTypographyConfig | undefined,\n fallback: { color: string; fontSize: number },\n ): Record<string, string | number | undefined> {\n return {\n color: this.withOpacity(typography?.color ?? fallback.color, typography?.opacity ?? 100),\n fontSize: this.clamp(typography?.fontSize ?? fallback.fontSize, 8, 40),\n fontFamily: typography?.fontFamily,\n fontWeight: typography?.bold ? 'bold' : undefined,\n fontStyle: typography?.italic ? 'italic' : undefined,\n textDecoration: typography?.underline ? 'underline' : undefined,\n };\n }\n\n private niceNumber(value: number): number {\n if (value === 0) return 0;\n const sign = value < 0 ? -1 : 1;\n const absolute = Math.abs(value);\n const exponent = Math.floor(Math.log10(absolute));\n const fraction = absolute / Math.pow(10, exponent);\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return sign * niceFraction * Math.pow(10, exponent);\n }\n\n private niceNumberUp(value: number): number {\n if (value === 0) return 0;\n const sign = value < 0 ? -1 : 1;\n const absolute = Math.abs(value);\n const exponent = Math.floor(Math.log10(absolute));\n const fraction = absolute / Math.pow(10, exponent);\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return sign * niceFraction * Math.pow(10, exponent);\n }\n\n private niceNumberDown(value: number): number {\n if (value === 0) return 0;\n const sign = value < 0 ? -1 : 1;\n const absolute = Math.abs(value);\n const exponent = Math.floor(Math.log10(absolute));\n const fraction = absolute / Math.pow(10, exponent);\n const niceFraction = fraction < 2 ? 1 : fraction < 5 ? 2 : 5;\n return sign * niceFraction * Math.pow(10, exponent);\n }\n\n private formatNumber(value: number, compact = true, precision = 1): string {\n if (!compact) {\n return new Intl.NumberFormat('en-US', {\n maximumFractionDigits: Math.max(Math.floor(precision), 0),\n }).format(value);\n }\n\n const absolute = Math.abs(value);\n const units = [\n { value: 1e9, suffix: 'B' },\n { value: 1e6, suffix: 'M' },\n { value: 1e3, suffix: 'k' },\n ];\n const unit = units.find((item) => absolute >= item.value);\n if (!unit) return Number.isInteger(value) ? String(value) : value.toFixed(2);\n\n const scaled = value / unit.value;\n const formatted = scaled.toFixed(precision);\n return `${formatted}${unit.suffix}`;\n }\n\n private applyTextCase(value: string, textCase: GaugeTextCase = 'none'): string {\n switch (textCase) {\n case 'uppercase':\n return value.toUpperCase();\n case 'lowercase':\n return value.toLowerCase();\n case 'capitalize':\n return value.replace(/\\b\\w/g, (char) => char.toUpperCase());\n case 'none':\n default:\n return value;\n }\n }\n\n private withOpacity(color: string, opacity: number): string {\n const alpha = this.clamp(opacity, 0, 100) / 100;\n if (alpha >= 1) return color;\n\n const hex = color.replace('#', '');\n if (![3, 6].includes(hex.length)) return color;\n const fullHex =\n hex.length === 3\n ? hex\n .split('')\n .map((part) => `${part}${part}`)\n .join('')\n : hex;\n const value = Number.parseInt(fullHex, 16);\n const red = (value >> 16) & 255;\n const green = (value >> 8) & 255;\n const blue = value & 255;\n return `rgba(${red}, ${green}, ${blue}, ${alpha})`;\n }\n\n private toFiniteNumber(value: unknown): number | undefined {\n if (typeof value === 'number') return Number.isFinite(value) ? value : undefined;\n if (typeof value === 'string' && value.trim()) {\n const numericValue = Number(value);\n return Number.isFinite(numericValue) ? numericValue : undefined;\n }\n return undefined;\n }\n\n ngOnDestroy(): void {\n this.chartResizeObserver?.disconnect();\n if (this.chartInstance) {\n this.chartInstance.off();\n this.chartInstance.dispose();\n }\n }\n}\n","<div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\"\n></div>\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Inject,\n Input,\n Output,\n PLATFORM_ID,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\n\nimport { CustomChart } from 'echarts/charts';\nimport {\n GridComponent,\n TooltipComponent,\n LegendComponent,\n TitleComponent,\n ToolboxComponent,\n DataZoomInsideComponent,\n DataZoomComponent,\n} from 'echarts/components';\n\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { GanttChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\nimport { RightClickCard } from '../right-click-card';\nimport { ChartLegendComponent } from '../chart-legend';\nimport type { ChartLegendEvent } from '../chart-legend';\n\necharts.use([\n CustomChart,\n GridComponent,\n TooltipComponent,\n LegendComponent,\n CanvasRenderer,\n TitleComponent,\n ToolboxComponent,\n DataZoomInsideComponent,\n DataZoomComponent,\n]);\nconst DEFAULT_ROW_HEIGHT = 40;\nconst VERTICAL_ZOOM_RIGHT = 30;\nconst EXPANDED_GROUP_ICON =\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='m2.5 4 3.5 3.5L9.5 4' fill='none' stroke='%23374151' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E\";\nconst COLLAPSED_GROUP_ICON =\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='m4 2.5 3.5 3.5L4 9.5' fill='none' stroke='%23374151' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E\";\n\n@Component({\n selector: 'lib-gantt-chart',\n imports: [NgxEchartsDirective, RightClickCard, ChartLegendComponent],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './gantt-chart.html',\n styleUrl: './gantt-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GanttChart {\n @Input() config: GanttChartConfig = { series: [], groups: [] };\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() contextMenuOptions: any[] = [];\n @Input() showContextMenu: boolean = false;\n\n @Output() contextMenuClick = new EventEmitter<any>();\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n @Output() legendEvent = new EventEmitter<ChartLegendEvent>();\n @ViewChild('chartContainer') chartContainer?: ElementRef<HTMLElement>;\n chartOption: EChartsCoreOption = {};\n chartInstance!: ECharts;\n cardPosition = { x: 0, y: 0 };\n openCard = false;\n private verticalZoomLayoutFrame?: number;\n private isApplyingVerticalZoomLayout = false;\n private horizontalZoomLayoutFrame?: number;\n private isApplyingHorizontalZoomLayout = false;\n private zoomWheelHandler?: (event: any) => void;\n private dataZoomPointerDownHandler?: (event: any) => void;\n private nativeDragStartHandler?: (event: DragEvent) => void;\n private nativePointerEndHandler?: () => void;\n private dataZoomGestureActive = false;\n private readonly isBrowser: boolean;\n\n visibleRows: any[] = [];\n rowIndexMap: Map<any, number> = new Map();\n\n constructor(\n private chartService: Charts,\n private cdr: ChangeDetectorRef,\n @Inject(DOCUMENT) private readonly document: Document,\n @Inject(PLATFORM_ID) platformId: object,\n ) {\n this.isBrowser = isPlatformBrowser(platformId);\n }\n\n get deafultColors(): string[] {\n return this.chartService.defaultLegendColors;\n }\n\n get rowHeight(): number {\n const configuredHeight = Number(this.config?.rowHeight ?? DEFAULT_ROW_HEIGHT);\n return Number.isFinite(configuredHeight) ? Math.max(1, configuredHeight) : DEFAULT_ROW_HEIGHT;\n }\n\n private get xAxisMinLabelGap(): number {\n const configuredGap = Number(this.config?.xAxisMinLabelGap ?? 100);\n return Number.isFinite(configuredGap) ? Math.max(1, configuredGap) : 100;\n }\n\n private get yAxisLabelWidth(): number {\n const chartWidth =\n this.chartContainer?.nativeElement.getBoundingClientRect().width ||\n this.chartInstance?.getWidth?.() ||\n 360;\n\n return Math.max(100, Math.min(240, Math.round(chartWidth * 0.22)));\n }\n\n private getAggregationLabelCount(): number {\n const values: number[] = [];\n const addTimestamp = (value: unknown) => {\n const timestamp = value instanceof Date ? value.getTime() : new Date(value as any).getTime();\n if (Number.isFinite(timestamp)) values.push(timestamp);\n };\n\n for (const series of this.config?.series ?? []) {\n for (const item of series.data ?? []) {\n addTimestamp(item.start);\n addTimestamp(item.end);\n }\n }\n\n addTimestamp(this.config?.xAxis?.min);\n addTimestamp(this.config?.xAxis?.max);\n\n if (!values.length) return 1;\n\n const min = Math.min(...values);\n const max = Math.max(...values);\n if (max <= min) return 1;\n\n const start = new Date(min);\n const end = new Date(max);\n switch (this.config?.XAxisAggregation ?? 'day') {\n case 'year':\n return end.getFullYear() - start.getFullYear() + 1;\n case 'quarter':\n return (\n (end.getFullYear() - start.getFullYear()) * 4 +\n Math.floor(end.getMonth() / 3) -\n Math.floor(start.getMonth() / 3) +\n 1\n );\n case 'month':\n return (\n (end.getFullYear() - start.getFullYear()) * 12 + end.getMonth() - start.getMonth() + 1\n );\n case 'week':\n return (\n Math.floor((this.getIsoWeekStart(end) - this.getIsoWeekStart(start)) / 604_800_000) + 1\n );\n case 'hour':\n return Math.floor((max - min) / 3_600_000) + 1;\n case 'minute':\n return Math.floor((max - min) / 60_000) + 1;\n case 'day':\n default:\n return Math.floor((this.getUtcDayStart(end) - this.getUtcDayStart(start)) / 86_400_000) + 1;\n }\n }\n\n private getUtcDayStart(date: Date): number {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate());\n }\n\n private getAggregationMinInterval(): number {\n switch (this.config?.XAxisAggregation ?? 'day') {\n case 'year':\n return 365 * 86_400_000;\n case 'quarter':\n return 90 * 86_400_000;\n case 'month':\n return 28 * 86_400_000;\n case 'week':\n return 7 * 86_400_000;\n case 'hour':\n return 3_600_000;\n case 'minute':\n return 60_000;\n case 'day':\n default:\n return 86_400_000;\n }\n }\n\n private getIsoWeekStart(date: Date): number {\n const weekStart = new Date(this.getUtcDayStart(date));\n const dayOfWeek = weekStart.getUTCDay() || 7;\n weekStart.setUTCDate(weekStart.getUTCDate() - dayOfWeek + 1);\n return weekStart.getTime();\n }\n\n private resolveSeriesColor(series: any, index: number): string {\n const colors = this.config?.colors || this.chartService.defaultLegendColors;\n return series?.itemStyle?.color ?? colors[index % Math.max(colors.length, 1)] ?? '#64748b';\n }\n\n private createBarLabel(\n label: string | number,\n rect: { x: number; y: number; width: number; height: number },\n ): any {\n const position = this.config?.barLabelConfig?.position ?? 'inside';\n const margin = 4;\n let x = rect.x + rect.width / 2;\n let y = rect.y + rect.height / 2;\n let align: 'left' | 'center' | 'right' = 'center';\n let verticalAlign: 'top' | 'middle' | 'bottom' = 'middle';\n\n switch (position) {\n case 'top':\n y = rect.y - margin;\n verticalAlign = 'bottom';\n break;\n case 'bottom':\n y = rect.y + rect.height + margin;\n verticalAlign = 'top';\n break;\n case 'left':\n x = rect.x - margin;\n align = 'right';\n break;\n case 'right':\n x = rect.x + rect.width + margin;\n align = 'left';\n break;\n case 'insideLeft':\n x = rect.x + margin;\n align = 'left';\n break;\n case 'insideRight':\n x = rect.x + rect.width - margin;\n align = 'right';\n break;\n case 'insideTop':\n y = rect.y + margin;\n verticalAlign = 'top';\n break;\n case 'insideBottom':\n y = rect.y + rect.height - margin;\n verticalAlign = 'bottom';\n break;\n case 'insideTopLeft':\n x = rect.x + margin;\n y = rect.y + margin;\n align = 'left';\n verticalAlign = 'top';\n break;\n case 'insideTopRight':\n x = rect.x + rect.width - margin;\n y = rect.y + margin;\n align = 'right';\n verticalAlign = 'top';\n break;\n case 'insideBottomLeft':\n x = rect.x + margin;\n y = rect.y + rect.height - margin;\n align = 'left';\n verticalAlign = 'bottom';\n break;\n case 'insideBottomRight':\n x = rect.x + rect.width - margin;\n y = rect.y + rect.height - margin;\n align = 'right';\n verticalAlign = 'bottom';\n break;\n }\n\n const isInside = position.startsWith('inside');\n return {\n type: 'text',\n silent: true,\n style: {\n text: String(label),\n x,\n y,\n align,\n verticalAlign,\n fill: isInside ? '#ffffff' : '#333333',\n fontSize: 12,\n width: isInside ? Math.max(rect.width - margin * 2, 0) : undefined,\n overflow: isInside ? 'truncate' : undefined,\n },\n };\n }\n get hasSideLegendWidth(): boolean {\n return this.isSideLegend && !!this.config?.customLegend?.maxWidth;\n }\n\n get legendShellMaxWidth(): string | null {\n return this.isSideLegend ? (this.config?.customLegend?.maxWidth ?? null) : null;\n }\n\n private get isSideLegend(): boolean {\n return (\n this.config?.customLegend?.position === 'left' ||\n this.config?.customLegend?.position === 'right'\n );\n }\n\n /* ------------------ CHANGE HANDLING ------------------ */\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n\n this.buildOption(!!this.chartInstance && !this.chartInstance.isDisposed() && !changes['theme']);\n }\n\n /* ------------------ DESTROY ------------------ */\n\n ngOnDestroy(): void {\n if (this.verticalZoomLayoutFrame) {\n cancelAnimationFrame(this.verticalZoomLayoutFrame);\n }\n if (this.horizontalZoomLayoutFrame) {\n cancelAnimationFrame(this.horizontalZoomLayoutFrame);\n }\n this.unbindDataZoomDragIsolation();\n\n // ngx-echarts can dispose the ECharts instance before this component's\n // destroy hook runs. A disposed instance no longer has a ZRender surface,\n // so do not try to remove the wheel listener from it.\n if (this.chartInstance && !this.chartInstance.isDisposed()) {\n if (this.zoomWheelHandler) {\n this.chartInstance.getZr()?.off('mousewheel', this.zoomWheelHandler);\n }\n this.chartInstance.off();\n this.chartInstance.dispose();\n }\n }\n\n /* ------------------ OPTION BUILDER ------------------ */\n private buildOption(preserveDataZoom = false) {\n this.visibleRows = this.getVisibleCategories();\n this.rowIndexMap = new Map(this.visibleRows.map((row, index) => [row.name, index]));\n const selected = this.readLegendSelected();\n const selectedMode = this.config?.customLegend?.selectionMode === 'exclusive' ? 'single' : true;\n const yAxisLabelWidth = this.yAxisLabelWidth;\n\n const option: EChartsCoreOption = {\n animation: false,\n backgroundColor: 'transparent',\n color: this.config?.colors || this.chartService.defaultLegendColors,\n title: {\n show: this.config?.showTitle ?? !!this.config?.title,\n text: this.config?.title,\n left: this.config?.titlePosition || 'center',\n },\n\n tooltip: {\n show: this.config?.showTooltip ?? true,\n trigger: 'item',\n backgroundColor: 'transparent', // remove default box\n borderWidth: 0,\n padding: 0,\n confine: true,\n formatter: (params: any) =>\n this.config?.tooltipFormatter\n ? this.config?.tooltipFormatter(params)\n : this.chartService.ganttTooltipFormatter(params, this.config),\n },\n legend: {\n show: false,\n data: (this.config?.series ?? []).map((series) => series.name),\n selected,\n selectedMode,\n },\n\n grid: {\n left: this.config?.gridLeft ?? 0,\n right: this.config?.gridRight ?? 30,\n bottom: this.config?.gridBottom ?? 30,\n top: this.config?.gridTop ?? 0,\n },\n\n xAxis: {\n type: 'time',\n position: 'top',\n nameLocation: 'center',\n\n ...(this.config?.xAxis || {}),\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n\n axisLine: {\n show: this.config?.showXAxisLine ?? true,\n ...(this.config?.xAxis?.axisLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.xAxis?.axisLine?.lineStyle || {}),\n },\n },\n axisTick: {\n show: false,\n ...(this.config?.xAxis?.axisTick || {}),\n },\n axisLabel: {\n show: this.config?.showXAxisLabel ?? true,\n color: '#434A51',\n fontSize: 12,\n hideOverlap: false,\n formatter: (value: number) => this.chartService.formatGanttDate(value, this.config),\n ...(!this.config?.xAxis?.axisLabel?.rotate && {\n alignMinLabel: 'left',\n alignMaxLabel: 'right',\n }),\n ...(this.config?.xAxis?.axisLabel || {}),\n },\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n overflow: 'truncate',\n width: this.resolveAxisNameWidth('x'),\n ...(this.config?.xAxis?.nameTextStyle || {}),\n },\n splitLine: {\n show: this.config?.showXAxisSplitLine ?? true,\n ...(this.config?.xAxis?.splitLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.xAxis?.splitLine?.lineStyle || {}),\n },\n },\n },\n\n yAxis: [\n {\n show: true,\n type: 'category',\n triggerEvent: true,\n inverse: true,\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n data: this.visibleRows.map((row) => row.name),\n ...(this.config?.yAxis || {}),\n axisLine: {\n show: this.config?.showYAxisLine ?? true,\n ...(this.config?.yAxis?.axisLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.yAxis?.axisLine?.lineStyle || {}),\n },\n },\n axisTick: {\n show: false,\n ...(this.config?.yAxis?.axisTick || {}),\n },\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n overflow: 'truncate',\n width: this.resolveAxisNameWidth('y'),\n ...(this.config?.yAxis?.nameTextStyle || {}),\n },\n splitLine: {\n show: this.config?.showYAxisSplitLine ?? true,\n ...(this.config?.yAxis?.splitLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.yAxis?.splitLine?.lineStyle || {}),\n },\n },\n splitArea: {\n ...(this.config?.yAxis?.splitArea || {}),\n show: this.config?.zebraStripping?.show ?? false,\n areaStyle: {\n ...(this.config?.yAxis?.splitArea?.areaStyle || {}),\n color: [this.config?.zebraStripping?.color ?? '#F1F5F9', 'transparent'],\n },\n },\n axisLabel: {\n show: this.config?.showYAxisLabel ?? true,\n color: '#434A51',\n width: yAxisLabelWidth,\n overflow: 'truncate',\n align: 'right',\n fontSize: 12,\n formatter: (value: number) => {\n const row = this.visibleRows.find((item) => item.name === value);\n\n if (row?.type === 'group') {\n const iconStyle = row.expanded ? 'expandedIcon' : 'collapsedIcon';\n return `{${iconStyle}| } {group|${row.name}}`;\n }\n return `{category|${row?.name}}`;\n },\n rich: {\n expandedIcon: {\n width: 12,\n height: 12,\n verticalAlign: 'middle',\n backgroundColor: { image: EXPANDED_GROUP_ICON },\n },\n collapsedIcon: {\n width: 12,\n height: 12,\n verticalAlign: 'middle',\n backgroundColor: { image: COLLAPSED_GROUP_ICON },\n },\n group: {\n fontWeight: 'bold',\n color: '#1f2937',\n },\n category: {\n color: '#333',\n },\n },\n ...(this.config?.yAxis?.axisLabel || {}),\n },\n },\n ],\n\n series: [\n // Tasks\n ...(this.config?.series || []).map((s, seriesIndex) => ({\n type: 'custom',\n z: 2,\n clip: false,\n renderItem: (params: any, api: any) => {\n const categoryIndex = api.value(0);\n const start = api.value(1);\n const end = api.value(2);\n\n const startPoint = api.coord([start, categoryIndex]);\n const endPoint = api.coord([end, categoryIndex]);\n\n // BAR_HEIGHT_PERCENT is always limited to 1–100\n const barHeightPercent = Math.max(0, Math.min(this.config?.barHeight || 50, 100));\n\n // Calculate bar height relative to the row height\n const barHeight = (this.rowHeight * barHeightPercent) / 100;\n\n const clipped = echarts.graphic.clipRectByRect(\n {\n x: startPoint[0],\n y: startPoint[1] - barHeight / 2,\n width: endPoint[0] - startPoint[0],\n height: barHeight,\n },\n {\n x: params.coordSys.x,\n y: params.coordSys.y,\n width: params.coordSys.width,\n height: params.coordSys.height,\n },\n );\n\n if (!clipped) {\n return null;\n }\n\n // Custom series do not apply data-item itemStyle automatically. Resolve it\n // through the render API so a task's itemStyle takes precedence over its series.\n const itemStyle = api.style();\n const bar = {\n type: 'rect',\n shape: {\n x: clipped.x,\n y: clipped.y,\n width: clipped.width,\n height: clipped.height,\n r: this.config?.borderRadius ?? 4,\n },\n style: {\n ...itemStyle,\n fill: itemStyle.fill ?? this.resolveSeriesColor(s, seriesIndex),\n },\n };\n const label = api.value(3);\n\n if (!this.config?.barLabelConfig?.show || label === undefined || label === null) {\n return bar;\n }\n\n return {\n type: 'group',\n children: [bar, this.createBarLabel(label, clipped)],\n };\n },\n\n encode: {\n x: [1, 2],\n y: 0,\n },\n ...s,\n data: this.buildVisibleData(this.visibleRows, s.data),\n })),\n ],\n toolbox: {\n right: -1000,\n feature: {\n dataZoom: {},\n },\n },\n dataZoom: [\n {\n type: 'slider',\n id: 'horizontalSlider',\n xAxisIndex: 0,\n height: 8,\n bottom: 10,\n start: 0,\n end: 100,\n show: false,\n handleSize: 0,\n showDetail: false,\n brushSelect: false,\n backgroundColor: '#F0F0F0',\n fillerColor: '#81858A',\n borderColor: 'transparent',\n borderRadius: 100,\n moveHandleSize: 0,\n zoomLock: true,\n // Keep tasks that intersect the viewport so renderItem can clip their hidden portion.\n filterMode: 'weakFilter',\n },\n {\n type: 'inside',\n id: 'insideX',\n xAxisIndex: 0,\n zoomOnMouseWheel: false,\n moveOnMouseMove: true,\n moveOnMouseWheel: false,\n zoomLock: true,\n filterMode: 'weakFilter',\n },\n {\n type: 'slider',\n yAxisIndex: 0,\n id: 'verticalSlider',\n width: 8,\n right: 10,\n top: 20,\n bottom: 30,\n start: 0,\n end: 100,\n handleSize: 0,\n showDetail: false,\n brushSelect: false,\n backgroundColor: '#F0F0F0',\n fillerColor: '#81858A',\n borderColor: 'transparent',\n borderRadius: 100,\n moveHandleSize: 0,\n zoomLock: true,\n },\n {\n type: 'inside',\n id: 'insideY',\n yAxisIndex: 0,\n zoomOnMouseWheel: false,\n moveOnMouseMove: true,\n moveOnMouseWheel: false,\n zoomLock: true,\n },\n ],\n };\n\n if (preserveDataZoom) {\n // Updating [options] makes ngx-echarts replace the complete option. That\n // recreates dataZoom and causes the slider to flash during parent config\n // changes. Merge every other option directly and leave dataZoom under\n // ECharts' control, including its current slider position and handlers.\n const { dataZoom: _dataZoom, ...optionWithoutDataZoom } = option as any;\n this.chartInstance.setOption(optionWithoutDataZoom);\n return;\n }\n\n this.chartOption = option;\n }\n\n onLegendEvent(event: ChartLegendEvent): void {\n this.legendEvent.emit(event);\n this.chartEvent.emit({\n type: `legend:${event.type}`,\n data: event,\n });\n }\n\n /* ------------------ EVENTS ------------------ */\n private bindEvents() {\n if (!this.chartInstance) return;\n this.chartInstance.off();\n\n // Existing chart events\n this.events.forEach((eventName) => {\n if (eventName === 'contextmenu') {\n this.chartInstance.on('contextmenu', (params: any) => {\n const event = params?.event?.event;\n if (event) {\n event.preventDefault();\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n };\n\n this.openCard = true;\n\n this.cdr.markForCheck();\n }\n this.chartEvent.emit({\n type: 'contextmenu',\n data: params,\n });\n });\n const zr = this.chartInstance.getZr();\n zr.on('contextmenu', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n\n nativeEvent.preventDefault();\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: nativeEvent.clientX - rect.left,\n y: nativeEvent.clientY - rect.top,\n };\n\n this.openCard = true;\n this.cdr.markForCheck();\n\n this.chartEvent.emit({\n type: 'contextmenu',\n data: { ...zrEvent, isZrEvent: true },\n });\n }\n });\n } else if (eventName === 'click') {\n this.chartInstance.on('click', (params: any) => {\n if (\n params.componentType === 'yAxis' &&\n params.type === 'click' &&\n params.targetType === 'axisLabel'\n ) {\n const groupName = params.value;\n const group = (this.config?.groups || []).find((group) => group.name === groupName);\n if (!group) {\n return;\n }\n\n group.expanded = !(group.expanded ?? true);\n\n this.updateChart();\n } else {\n this.chartEvent.emit({\n type: 'click',\n data: params,\n });\n }\n });\n const zr = this.chartInstance.getZr();\n zr.on('click', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n nativeEvent.preventDefault();\n this.chartEvent.emit({\n type: 'blur',\n data: { ...zrEvent, type: 'blur' },\n });\n }\n });\n } else {\n this.chartInstance.on(eventName, (params: any) => {\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n }\n });\n }\n\n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n this.closeCard();\n }\n\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n\n /* ------------------ INIT ------------------ */\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n this.bindEvents();\n this.bindZoomWheel();\n this.bindDataZoomDragIsolation();\n this.chartInstance.on('finished', () => {\n this.scheduleVerticalZoomLayout();\n this.scheduleHorizontalZoomLayout();\n });\n this.chartInstance.on('datazoom', () => {\n this.scheduleVerticalZoomLayout();\n this.scheduleHorizontalZoomLayout();\n });\n queueMicrotask(() => {\n this.refreshAxisNameSpace();\n this.scheduleVerticalZoomLayout();\n this.scheduleHorizontalZoomLayout();\n });\n }\n\n private bindZoomWheel(): void {\n const zr = this.chartInstance.getZr();\n if (this.zoomWheelHandler) {\n zr.off('mousewheel', this.zoomWheelHandler);\n }\n\n this.zoomWheelHandler = (event: any) => {\n const nativeEvent = event?.event as WheelEvent | undefined;\n const deltaX = Number(nativeEvent?.deltaX ?? 0);\n const deltaY = Number(nativeEvent?.deltaY ?? -(event?.wheelDelta ?? 0));\n const isHorizontalGesture = !!nativeEvent?.shiftKey || Math.abs(deltaX) > Math.abs(deltaY);\n const delta = isHorizontalGesture ? deltaX || deltaY : deltaY;\n if (!Number.isFinite(delta) || delta === 0) return;\n\n const moved = isHorizontalGesture\n ? this.moveDataZoomWindow('horizontalSlider', 'insideX', delta)\n : this.moveDataZoomWindow('verticalSlider', 'insideY', delta) ||\n this.moveDataZoomWindow('horizontalSlider', 'insideX', delta);\n\n if (moved) {\n nativeEvent?.preventDefault();\n nativeEvent?.stopPropagation();\n }\n };\n zr.on('mousewheel', this.zoomWheelHandler);\n }\n\n /**\n * A native draggable ancestor starts its drag after the slider's mousedown\n * event. Since the native `dragstart` targets that ancestor rather than the\n * canvas, suppress it at document capture phase while a data-zoom gesture is\n * active. This keeps the fix inside the chart library and leaves parent drag\n * behaviour unchanged everywhere else.\n */\n private bindDataZoomDragIsolation(): void {\n if (!this.chartInstance || !this.isBrowser) return;\n\n const zr = this.chartInstance.getZr();\n if (this.dataZoomPointerDownHandler) {\n zr.off('mousedown', this.dataZoomPointerDownHandler);\n }\n\n this.dataZoomPointerDownHandler = (event: any) => {\n this.dataZoomGestureActive = this.isDataZoomTarget(event?.target);\n };\n zr.on('mousedown', this.dataZoomPointerDownHandler);\n\n if (!this.nativeDragStartHandler) {\n this.nativeDragStartHandler = (event: DragEvent) => {\n if (!this.dataZoomGestureActive) return;\n\n event.preventDefault();\n event.stopPropagation();\n this.dataZoomGestureActive = false;\n };\n this.document.addEventListener('dragstart', this.nativeDragStartHandler, true);\n }\n\n if (!this.nativePointerEndHandler) {\n this.nativePointerEndHandler = () => {\n this.dataZoomGestureActive = false;\n };\n this.document.addEventListener('pointerup', this.nativePointerEndHandler, true);\n this.document.addEventListener('pointercancel', this.nativePointerEndHandler, true);\n }\n }\n\n private unbindDataZoomDragIsolation(): void {\n if (this.chartInstance && !this.chartInstance.isDisposed() && this.dataZoomPointerDownHandler) {\n this.chartInstance.getZr()?.off('mousedown', this.dataZoomPointerDownHandler);\n }\n if (this.nativeDragStartHandler) {\n this.document.removeEventListener('dragstart', this.nativeDragStartHandler, true);\n }\n if (this.nativePointerEndHandler) {\n this.document.removeEventListener('pointerup', this.nativePointerEndHandler, true);\n this.document.removeEventListener('pointercancel', this.nativePointerEndHandler, true);\n }\n this.dataZoomPointerDownHandler = undefined;\n this.nativeDragStartHandler = undefined;\n this.nativePointerEndHandler = undefined;\n this.dataZoomGestureActive = false;\n }\n\n private isDataZoomTarget(target: any): boolean {\n for (let element = target; element; element = element.parent) {\n if (element.__ecComponentInfo?.mainType === 'dataZoom') return true;\n }\n return false;\n }\n\n private moveDataZoomWindow(sliderId: string, insideId: string, delta: number): boolean {\n const option = this.chartInstance.getOption() as {\n dataZoom?: Array<Record<string, any>>;\n };\n const slider = option.dataZoom?.find((zoom) => zoom['id'] === sliderId);\n if (!slider?.['show'] || slider['disabled']) return false;\n\n const start = Number(slider['start'] ?? 0);\n const end = Number(slider['end'] ?? 100);\n const windowSize = end - start;\n if (!Number.isFinite(windowSize) || windowSize >= 100) return false;\n\n const step = Math.min(10, Math.max(1, Math.abs(delta) / 30));\n const nextStart = Math.min(100 - windowSize, Math.max(0, start + Math.sign(delta) * step));\n if (Math.abs(nextStart - start) < 0.01) return false;\n\n this.chartInstance.setOption({\n dataZoom: [\n { id: sliderId, start: nextStart, end: nextStart + windowSize, zoomLock: true },\n { id: insideId, start: nextStart, end: nextStart + windowSize, zoomLock: true },\n ],\n });\n return true;\n }\n\n private scheduleHorizontalZoomLayout(): void {\n if (this.isApplyingHorizontalZoomLayout) return;\n if (this.horizontalZoomLayoutFrame) {\n cancelAnimationFrame(this.horizontalZoomLayoutFrame);\n }\n\n this.horizontalZoomLayoutFrame = requestAnimationFrame(() => {\n this.horizontalZoomLayoutFrame = undefined;\n this.applyHorizontalZoomLayout();\n });\n }\n\n private applyHorizontalZoomLayout(): void {\n if (!this.chartInstance) return;\n\n const model = (this.chartInstance as any).getModel?.();\n const gridWidth = model?.getComponent?.('grid', 0)?.coordinateSystem?.getRect?.().width;\n if (!Number.isFinite(gridWidth) || gridWidth <= 0) return;\n\n const totalLabelCount = this.getAggregationLabelCount();\n const visibleLabelCount = Math.max(2, Math.floor(gridWidth / this.xAxisMinLabelGap) + 1);\n const windowSize = Math.min(100, (visibleLabelCount / totalLabelCount) * 100);\n const showHorizontalZoom = windowSize < 100;\n const option = this.chartInstance.getOption() as {\n dataZoom?: Array<Record<string, any>>;\n xAxis?: Array<Record<string, any>>;\n };\n const horizontalZoom = option.dataZoom?.find((zoom) => zoom['id'] === 'horizontalSlider');\n const xAxis = option.xAxis?.[0];\n const currentStart = Number(horizontalZoom?.['start'] ?? 0);\n const start = showHorizontalZoom ? Math.min(Math.max(0, currentStart), 100 - windowSize) : 0;\n const end = showHorizontalZoom ? start + windowSize : 100;\n const splitNumber = Math.max(1, Math.min(totalLabelCount - 1, visibleLabelCount - 1));\n const minInterval = this.config?.xAxis?.minInterval ?? this.getAggregationMinInterval();\n\n const hasChanged =\n horizontalZoom?.['show'] !== showHorizontalZoom ||\n Math.abs(Number(horizontalZoom?.['start'] ?? 0) - start) > 0.01 ||\n Math.abs(Number(horizontalZoom?.['end'] ?? 100) - end) > 0.01 ||\n Number(xAxis?.['splitNumber'] ?? 0) !== splitNumber ||\n Number(xAxis?.['minInterval'] ?? 0) !== minInterval ||\n xAxis?.['axisLabel']?.['hideOverlap'] !== false;\n if (!hasChanged) return;\n\n this.isApplyingHorizontalZoomLayout = true;\n this.chartInstance.setOption({\n xAxis: {\n splitNumber,\n minInterval,\n axisLabel: { hideOverlap: false },\n },\n dataZoom: [\n {\n id: 'horizontalSlider',\n show: showHorizontalZoom,\n start,\n end,\n zoomLock: true,\n filterMode: 'weakFilter',\n },\n {\n id: 'insideX',\n disabled: !showHorizontalZoom,\n start,\n end,\n zoomLock: true,\n filterMode: 'weakFilter',\n },\n ],\n });\n this.isApplyingHorizontalZoomLayout = false;\n }\n\n private scheduleVerticalZoomLayout(): void {\n if (this.isApplyingVerticalZoomLayout) return;\n if (this.verticalZoomLayoutFrame) {\n cancelAnimationFrame(this.verticalZoomLayoutFrame);\n }\n\n this.verticalZoomLayoutFrame = requestAnimationFrame(() => {\n this.verticalZoomLayoutFrame = undefined;\n this.applyVerticalZoomLayout();\n });\n }\n\n private applyVerticalZoomLayout(): void {\n if (!this.chartInstance || !this.visibleRows.length) return;\n\n const model = (this.chartInstance as any).getModel?.();\n const gridHeight = model?.getComponent?.('grid', 0)?.coordinateSystem?.getRect?.().height;\n if (!Number.isFinite(gridHeight) || gridHeight <= 0) return;\n\n const totalRows = this.visibleRows.length;\n const visibleRowCount = Math.min(\n totalRows,\n Math.max(1, Math.floor(gridHeight / this.rowHeight)),\n );\n const windowSize = (visibleRowCount / totalRows) * 100;\n const showVerticalZoom = windowSize < 100;\n const option = this.chartInstance.getOption() as {\n dataZoom?: Array<Record<string, any>>;\n grid?: Array<Record<string, any>>;\n };\n const verticalZoom = option.dataZoom?.find((zoom) => zoom['id'] === 'verticalSlider');\n const currentStart = Number(verticalZoom?.['start'] ?? 0);\n const start = showVerticalZoom ? Math.min(Math.max(0, currentStart), 100 - windowSize) : 0;\n const end = showVerticalZoom ? start + windowSize : 100;\n const right = showVerticalZoom ? (this.config?.gridRight ?? VERTICAL_ZOOM_RIGHT) : 0;\n\n const hasChanged =\n verticalZoom?.['show'] !== showVerticalZoom ||\n Math.abs(Number(verticalZoom?.['start'] ?? 0) - start) > 0.01 ||\n Math.abs(Number(verticalZoom?.['end'] ?? 100) - end) > 0.01 ||\n option.grid?.[0]?.['right'] !== right;\n if (!hasChanged) return;\n\n this.isApplyingVerticalZoomLayout = true;\n this.chartInstance.setOption({\n grid: { right },\n dataZoom: [\n { id: 'verticalSlider', show: showVerticalZoom, start, end, zoomLock: true },\n { id: 'insideY', disabled: !showVerticalZoom, start, end, zoomLock: true },\n ],\n });\n this.isApplyingVerticalZoomLayout = false;\n }\n\n @HostListener('window:resize')\n refreshAxisNameSpace(): void {\n if (!this.chartInstance) return;\n\n const yAxisLabelWidth = this.yAxisLabelWidth;\n const option: any = {\n xAxis: {\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n nameTextStyle: this.resolveAxisNameTextStyle('x'),\n },\n yAxis: [\n {\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameTextStyle: this.resolveAxisNameTextStyle('y'),\n },\n ],\n };\n\n if (this.config?.yAxis?.axisLabel?.width == null) {\n option.yAxis[0].axisLabel = { width: yAxisLabelWidth };\n }\n\n this.chartInstance.setOption(option);\n this.scheduleVerticalZoomLayout();\n this.scheduleHorizontalZoomLayout();\n }\n\n getVisibleCategories() {\n const groups = this.config?.groups ?? [];\n\n if (groups.length) {\n const rows: any[] = [];\n\n for (const group of groups) {\n rows.push({\n type: 'group',\n name: group.name,\n expanded: group.expanded ?? true,\n });\n\n if (group.expanded ?? true) {\n for (const category of this.sortCategories(group.categories ?? [])) {\n rows.push({\n type: 'category',\n name: category,\n groupName: group.name,\n });\n }\n }\n }\n\n return rows;\n }\n\n const taskNames = new Set<string>();\n for (const series of this.config?.series ?? []) {\n for (const item of series.data ?? []) {\n if (typeof item['name'] === 'string' && item['name'].trim()) {\n taskNames.add(item['name']);\n }\n }\n }\n\n return this.sortCategories(Array.from(taskNames)).map((name) => ({\n type: 'category',\n name,\n }));\n }\n\n private sortCategories(categories: string[]): string[] {\n // Preserve the current order unless sorting has explicitly been requested.\n // This keeps existing grouped/collapsible chart behaviour unchanged.\n if (this.config?.sortBy === undefined && this.config?.sortType === undefined) {\n return categories;\n }\n\n const sortBy = this.config?.sortBy ?? 'value';\n const direction = this.config?.sortType === 'desc' ? -1 : 1;\n const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\n\n return categories\n .map((name, index) => ({ name, index, value: this.getCategorySortValue(name) }))\n .sort((left, right) => {\n let comparison: number;\n\n if (sortBy === 'name') {\n comparison = collator.compare(left.name, right.name);\n } else if (left.value === undefined || right.value === undefined) {\n // Rows without a numeric value remain after valued rows and retain\n // their input order relative to each other.\n return left.value === right.value\n ? left.index - right.index\n : left.value === undefined\n ? 1\n : -1;\n } else {\n comparison = left.value - right.value;\n }\n\n return comparison === 0 ? left.index - right.index : comparison * direction;\n })\n .map((item) => item.name);\n }\n\n private getCategorySortValue(categoryName: string): number | undefined {\n let maximumDuration: number | undefined;\n\n for (const series of this.config?.series ?? []) {\n for (const item of series.data ?? []) {\n if (item.name !== categoryName) continue;\n\n // A category can contain multiple bars across one or more series.\n // Its sortable value is the longest task duration, independent of the\n // label displayed on the bar.\n const start = new Date(item.start).getTime();\n const end = new Date(item.end).getTime();\n if (Number.isFinite(start) && Number.isFinite(end)) {\n const duration = Math.max(0, end - start);\n maximumDuration = Math.max(maximumDuration ?? duration, duration);\n }\n }\n }\n\n return maximumDuration;\n }\n\n private buildVisibleData(visibleRows: any, data: any[]) {\n return data\n .map((item) => {\n const rowIndex = visibleRows.findIndex((row: any) => row.name === item.name);\n\n // Category is currently hidden\n if (rowIndex === -1) {\n return null;\n }\n\n const start = new Date(item.start).getTime();\n const end = new Date(item.end).getTime();\n\n return {\n ...item,\n value: [rowIndex, start, end, item.label],\n name: item.name,\n label: item.label,\n start,\n end,\n };\n })\n .filter(Boolean);\n }\n\n private updateChart() {\n this.visibleRows = this.getVisibleCategories();\n\n this.rowIndexMap = new Map(this.visibleRows.map((row, index) => [row.name, index]));\n\n this.chartInstance.setOption({\n yAxis: {\n data: this.visibleRows.map((row) => row.name),\n },\n\n series: [\n // Tasks\n ...(this.config?.series || []).map((s, seriesIndex) => ({\n ...s,\n name: s.name,\n data: this.buildVisibleData(this.visibleRows, s.data),\n })),\n ],\n });\n this.scheduleVerticalZoomLayout();\n this.scheduleHorizontalZoomLayout();\n }\n\n private resolveAxisName(name: string | undefined, axis: 'x' | 'y' | 'secondaryY'): string {\n if (!name) return '';\n\n const maxWidth = this.resolveAxisNameWidth(axis);\n const font = this.resolveAxisNameFont(axis);\n if (echarts.format.getTextRect(name, font).width <= maxWidth) return name;\n\n const ellipsis = '...';\n let low = 0;\n let high = name.length;\n let truncated = ellipsis;\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const nextText = `${name.slice(0, mid)}${ellipsis}`;\n const nextWidth = echarts.format.getTextRect(nextText, font).width;\n\n if (nextWidth <= maxWidth) {\n truncated = nextText;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n return truncated;\n }\n\n private resolveAxisNameFont(axis: 'x' | 'y' | 'secondaryY'): string {\n const style =\n axis === 'x' ? this.config?.xAxis?.nameTextStyle : this.config?.yAxis?.nameTextStyle;\n const fontSize = style?.fontSize ?? 14;\n const fontWeight = style?.fontWeight ?? 400;\n const fontFamily = style?.fontFamily ?? 'sans-serif';\n\n return `${fontWeight} ${fontSize}px ${fontFamily}`;\n }\n\n private resolveAxisNameWidth(axis: 'x' | 'y' | 'secondaryY'): number {\n const chartRect = this.chartContainer?.nativeElement.getBoundingClientRect();\n const chartWidth = chartRect?.width || this.chartInstance?.getWidth?.() || 360;\n const chartHeight = chartRect?.height || this.chartInstance?.getHeight?.() || 240;\n\n if (axis === 'x') {\n return Math.max(chartWidth - 240, 80);\n }\n\n return Math.max(chartHeight - 72, 80);\n }\n\n private readLegendSelected(): Record<string, boolean> {\n const option = this.chartInstance?.getOption?.() as\n | { legend?: Array<{ selected?: Record<string, boolean> }> }\n | undefined;\n\n return { ...(option?.legend?.[0]?.selected ?? {}) };\n }\n\n private resolveAxisNameTextStyle(axis: 'x' | 'y' | 'secondaryY'): Record<string, any> {\n const customStyle =\n axis === 'x' ? this.config?.xAxis?.nameTextStyle : this.config?.yAxis?.nameTextStyle;\n\n return {\n width: this.resolveAxisNameWidth(axis),\n ...(customStyle || {}),\n };\n }\n}\n","<div\n class=\"gantt-chart-shell\"\n [class.gantt-chart-shell--legend-left]=\"config.customLegend?.position === 'left'\"\n [class.gantt-chart-shell--legend-right]=\"config.customLegend?.position === 'right'\"\n [class.gantt-chart-shell--legend-bottom]=\"config.customLegend?.position === 'bottom'\"\n>\n @if (\n !config.hideLegend &&\n config.customLegend?.position !== 'bottom' &&\n config.customLegend?.position !== 'right'\n ) {\n <lib-chart-legend\n class=\"gantt-chart-shell__legend\"\n [class.gantt-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--gantt-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n\n <div\n #chartContainer\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n (chartInit)=\"onChartInit($event)\"\n class=\"chart-container\"\n ></div>\n\n @if (\n !config.hideLegend &&\n (config.customLegend?.position === 'bottom' || config.customLegend?.position === 'right')\n ) {\n <lib-chart-legend\n class=\"gantt-chart-shell__legend\"\n [class.gantt-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--gantt-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n</div>\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"contextMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.Charts","EBarChart","EPieChart","SankeyChartEchart","GaugeChartEchart"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cats-charts.mjs","sources":["../../../projects/charts-lib/src/lib/components/right-click-card/right-click-card.ts","../../../projects/charts-lib/src/lib/components/right-click-card/right-click-card.html","../../../projects/charts-lib/src/lib/components/chart-legend/chart-legend.adapter.ts","../../../projects/charts-lib/src/lib/components/chart-legend/chart-legend.ts","../../../projects/charts-lib/src/lib/components/chart-legend/chart-legend.html","../../../projects/charts-lib/src/lib/service/charts.ts","../../../projects/charts-lib/src/lib/components/line-chart/line-chart.ts","../../../projects/charts-lib/src/lib/components/line-chart/line-chart.html","../../../projects/charts-lib/src/lib/components/bar-chart/bar-chart.ts","../../../projects/charts-lib/src/lib/components/bar-chart/bar-chart.html","../../../projects/charts-lib/src/lib/components/pie-chart/pie-chart.ts","../../../projects/charts-lib/src/lib/components/pie-chart/pie-chart.html","../../../projects/charts-lib/src/lib/components/doughnut-chart/doughnut-chart.ts","../../../projects/charts-lib/src/lib/components/doughnut-chart/doughnut-chart.html","../../../projects/charts-lib/src/lib/components/stacked-area-chart/stacked-area-chart.ts","../../../projects/charts-lib/src/lib/components/stacked-area-chart/stacked-area-chart.html","../../../projects/charts-lib/src/lib/components/custom-chart/custom-chart.ts","../../../projects/charts-lib/src/lib/components/custom-chart/custom-chart.html","../../../projects/charts-lib/src/lib/components/sankey-chart/sankey-chart.ts","../../../projects/charts-lib/src/lib/components/sankey-chart/sankey-chart.html","../../../projects/charts-lib/src/lib/components/heatmap/heatmap.ts","../../../projects/charts-lib/src/lib/components/heatmap/heatmap.html","../../../projects/charts-lib/src/lib/components/heatmap-pivot/heatmap-pivot.ts","../../../projects/charts-lib/src/lib/components/heatmap-pivot/heatmap-pivot.html","../../../projects/charts-lib/src/lib/components/scatter-chart/scatter-chart.ts","../../../projects/charts-lib/src/lib/components/scatter-chart/scatter-chart.html","../../../projects/charts-lib/src/lib/components/status-timeline/status-timeline.ts","../../../projects/charts-lib/src/lib/components/status-timeline/status-timeline.html","../../../projects/charts-lib/src/lib/components/gauge-chart/gauge-chart.ts","../../../projects/charts-lib/src/lib/components/gauge-chart/gauge-chart.html","../../../projects/charts-lib/src/lib/components/gantt-chart/gantt-chart.ts","../../../projects/charts-lib/src/lib/components/gantt-chart/gantt-chart.html","../../../projects/charts-lib/src/lib/components/mapbox/mapbox-style.ts","../../../projects/charts-lib/src/lib/components/mapbox/mapbox-geocoding.ts","../../../projects/charts-lib/src/lib/components/mapbox/mapbox-bubble-format.ts","../../../projects/charts-lib/src/lib/components/mapbox/mapbox-bubble-size.ts","../../../projects/charts-lib/src/lib/components/mapbox/mapbox.ts","../../../projects/charts-lib/src/lib/components/mapbox/mapbox.html","../../../projects/charts-lib/src/cats-charts.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'lib-right-click-card',\n imports: [],\n templateUrl: './right-click-card.html',\n styleUrl: './right-click-card.scss',\n})\nexport class RightClickCard {\n @Input() cardPosition: any;\n @Input() cardOptions: any;\n @Output() contextMenuClick = new EventEmitter<any>();\n \n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n\n // this.closeMenu();\n }\n}\n","<div\n class=\"context-card\"\n [style.left.px]=\"cardPosition.x\"\n [style.top.px]=\"cardPosition.y\"\n (click)=\"$event.stopPropagation()\"\n>\n @for (item of cardOptions; track item.value) {\n <div class=\"context-item\" (click)=\"onMenuClick(item)\">\n @if (item.icon) {\n <img [src]=\"item.icon\" alt=\"icon\" />\n }\n\n <span>{{ item.label }}</span>\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\nimport { ECharts } from 'echarts/core';\nimport {\n ChartLegendConfig,\n ChartLegendIcon,\n ChartLegendItem,\n ChartLegendSelectionMode,\n} from './chart-legend.types';\n\ntype DispatchPayload = Record<string, unknown> & { type: string };\n\n@Injectable({ providedIn: 'root' })\nexport class ChartLegendAdapter {\n buildItems<\n TSeries extends {\n name?: string;\n type?: string;\n symbol?: string;\n icon?: ChartLegendIcon;\n legendIcon?: ChartLegendIcon;\n legendType?: 'default' | 'marker' | 'line' | 'lineMarker';\n itemStyle?: { color?: string };\n lineStyle?: { color?: string };\n area?: boolean;\n color?: string;\n },\n >(\n series: readonly TSeries[],\n colors: readonly string[],\n selected: Record<string, boolean>,\n config: ChartLegendConfig<TSeries>,\n ): ChartLegendItem[] {\n return series\n .map((seriesItem, index) => {\n const name = String(seriesItem.name ?? `Series ${index + 1}`);\n const color =\n seriesItem?.color ??\n seriesItem.itemStyle?.color ??\n seriesItem.lineStyle?.color ??\n colors[index % Math.max(colors.length, 1)] ??\n '#64748b';\n const icon = this.resolveIcon(seriesItem, index, name, config);\n const disabled = !!config.disabled || !!config.disabledNames?.includes(name);\n const item: ChartLegendItem = {\n id: `${index}:${name}`,\n name,\n label: name,\n color,\n icon,\n disabled,\n selected: selected[name] !== false,\n seriesIndex: index,\n raw: seriesItem,\n legendType: seriesItem?.legendType,\n };\n\n item.label = config.formatter ? config.formatter(name, item) : name;\n item.group = config.groupBy ? config.groupBy(item) : undefined;\n\n return item;\n })\n .filter((item) => !!item.name);\n }\n\n readSelected(chart: ECharts | null | undefined): Record<string, boolean> {\n const option = chart?.getOption?.() as {\n legend?: Array<{ selected?: Record<string, boolean> }>;\n };\n return { ...(option?.legend?.[0]?.selected ?? {}) };\n }\n\n applySelection(\n chart: ECharts,\n item: ChartLegendItem,\n mode: ChartLegendSelectionMode,\n items: readonly ChartLegendItem[],\n ): void {\n if (item.disabled) return;\n\n if (mode === 'exclusive') {\n for (const other of items) {\n if (other.name !== item.name) {\n chart.dispatchAction({ type: 'legendUnSelect', name: other.name } as DispatchPayload);\n }\n }\n chart.dispatchAction({ type: 'legendSelect', name: item.name } as DispatchPayload);\n return;\n }\n\n chart.dispatchAction({ type: 'legendToggleSelect', name: item.name } as DispatchPayload);\n }\n\n highlight(chart: ECharts, item: ChartLegendItem): void {\n if (item.disabled || item.seriesIndex === undefined) return;\n chart.dispatchAction({ type: 'highlight', seriesIndex: item.seriesIndex } as DispatchPayload);\n }\n\n downplay(chart: ECharts, item: ChartLegendItem): void {\n if (item.seriesIndex === undefined) return;\n chart.dispatchAction({ type: 'downplay', seriesIndex: item.seriesIndex } as DispatchPayload);\n }\n\n private resolveIcon<\n TSeries extends {\n type?: string;\n symbol?: string;\n icon?: ChartLegendIcon;\n legendIcon?: ChartLegendIcon;\n area?: boolean;\n },\n >(\n seriesItem: TSeries,\n index: number,\n name: string,\n config: ChartLegendConfig<TSeries>,\n ): ChartLegendIcon {\n if (typeof config.icon === 'function') return config.icon(seriesItem, index);\n if (config.icons?.[name]) return config.icons[name];\n if (config.icon) return config.icon;\n if (seriesItem.legendIcon) return seriesItem.legendIcon;\n if (seriesItem.icon) return seriesItem.icon;\n if (seriesItem.symbol && seriesItem.symbol !== 'none') return seriesItem.symbol;\n if (seriesItem.area) return 'area';\n\n switch (seriesItem.type) {\n case 'bar':\n return 'rect';\n case 'pie':\n case 'scatter':\n case 'effectScatter':\n return 'circle';\n default:\n return 'line';\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n PLATFORM_ID,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { ECharts } from 'echarts/core';\nimport { ChartLegendAdapter } from './chart-legend.adapter';\nimport {\n ChartLegendConfig,\n ChartLegendIcon,\n ChartLegendEvent,\n ChartLegendItem,\n ChartLegendSelectionMode,\n ChartLegendState,\n ChartLegendTemplateContext,\n} from './chart-legend.types';\n\ntype LegendSelectChanged = { selected?: unknown; name?: string };\ntype IconRenderType = 'none' | 'image' | 'path' | 'shape';\nconst SUPPORTED_ICON_SHAPES = new Set([\n 'line',\n 'emptyLine',\n 'area',\n 'circle',\n 'emptyCircle',\n 'rect',\n 'emptyRect',\n 'roundRect',\n 'emptyRoundRect',\n 'square',\n 'emptySquare',\n 'triangle',\n 'emptyTriangle',\n 'diamond',\n 'emptyDiamond',\n 'pin',\n 'emptyPin',\n 'arrow',\n 'emptyArrow',\n 'x',\n 'plus',\n 'thickLine',\n]);\n\nfunction getLegendSelected(event: unknown): Record<string, boolean> | undefined {\n if (typeof event !== 'object' || event === null || !('selected' in event)) return undefined;\n\n const selected = (event as LegendSelectChanged).selected;\n return typeof selected === 'object' && selected !== null\n ? (selected as Record<string, boolean>)\n : undefined;\n}\n\n@Component({\n selector: 'lib-chart-legend',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './chart-legend.html',\n styleUrl: './chart-legend.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartLegendComponent implements AfterViewInit, OnChanges, OnDestroy {\n @Input() chart: ECharts | null = null;\n @Input() series: readonly any[] = [];\n @Input() colors: readonly string[] = [];\n @Input() config: ChartLegendConfig<any> = {};\n @Input() itemTemplate?: TemplateRef<ChartLegendTemplateContext>;\n\n @Output() legendEvent = new EventEmitter<ChartLegendEvent>();\n @ViewChild('itemsScroller') private itemsScroller?: ElementRef<HTMLElement>;\n\n state: ChartLegendState = {\n items: [],\n selected: {},\n hoveredName: null,\n pageIndex: 0,\n };\n canScrollLegend = false;\n canScrollStart = false;\n canScrollEnd = false;\n\n private readonly isBrowser: boolean;\n private readonly onLegendSelectChanged = (event: unknown) => {\n this.syncFromChart(getLegendSelected(event));\n };\n private resizeObserver?: ResizeObserver;\n private scrollStateFrame = 0;\n\n constructor(\n private readonly adapter: ChartLegendAdapter,\n private readonly cdr: ChangeDetectorRef,\n @Inject(PLATFORM_ID) platformId: object,\n ) {\n this.isBrowser = isPlatformBrowser(platformId);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['chart']) this.rebindChart(changes['chart'].previousValue as ECharts | null);\n this.rebuildItems();\n this.scheduleScrollStateUpdate();\n }\n\n ngAfterViewInit(): void {\n if (!this.isBrowser) return;\n if (typeof ResizeObserver !== 'undefined' && this.itemsScroller?.nativeElement) {\n this.resizeObserver = new ResizeObserver(() => this.scheduleScrollStateUpdate());\n this.resizeObserver.observe(this.itemsScroller.nativeElement);\n }\n this.scheduleScrollStateUpdate();\n }\n\n ngOnDestroy(): void {\n this.detachChart(this.chart);\n this.resizeObserver?.disconnect();\n if (this.scrollStateFrame) cancelAnimationFrame(this.scrollStateFrame);\n }\n\n get visibleItems(): ChartLegendItem[] {\n const pageSize = this.config.pageSize;\n if (!this.config.showPagination || !pageSize || pageSize <= 0) return this.state.items;\n\n const start = this.state.pageIndex * pageSize;\n return this.state.items.slice(start, start + pageSize);\n }\n\n get groupedItems(): Array<{ group: string | null; items: ChartLegendItem[] }> {\n const groups = new Map<string | null, ChartLegendItem[]>();\n for (const item of this.visibleItems) {\n const key = item.group ?? null;\n groups.set(key, [...(groups.get(key) ?? []), item]);\n }\n return [...groups.entries()].map(([group, items]) => ({ group, items }));\n }\n\n get pageCount(): number {\n const pageSize = this.config.pageSize;\n if (!this.config.showPagination || !pageSize || pageSize <= 0) return 1;\n return Math.max(Math.ceil(this.state.items.length / pageSize), 1);\n }\n\n get isVerticalLegend(): boolean {\n return (\n this.config.layout === 'vertical' ||\n this.config.position === 'left' ||\n this.config.position === 'right'\n );\n }\n\n get isScrollableLegend(): boolean {\n return this.config.scrollable === true;\n }\n\n get isLimitedWrapLegend(): boolean {\n return this.config.scrollable === false && !this.hasConfiguredMaxWidth;\n }\n\n get usesInternalLegendScroll(): boolean {\n return this.isScrollableLegend || this.isLimitedWrapLegend;\n }\n\n get scrollsVertically(): boolean {\n return this.isLimitedWrapLegend ? !this.isVerticalLegend : this.isVerticalLegend;\n }\n\n get isLegendAlignedCenter(): boolean {\n return (\n this.config.align === 'center' || (this.isVerticalLegend && this.config.align === 'middle')\n );\n }\n\n get isLegendAlignedEnd(): boolean {\n return (\n this.config.align === 'end' ||\n (!this.isVerticalLegend && this.config.align === 'right') ||\n (this.isVerticalLegend && this.config.align === 'bottom')\n );\n }\n\n get scrollStartAriaLabel(): string {\n return this.scrollsVertically ? 'Scroll legend up' : 'Scroll legend left';\n }\n\n get scrollEndAriaLabel(): string {\n return this.scrollsVertically ? 'Scroll legend down' : 'Scroll legend right';\n }\n\n trackByItem(_: number, item: ChartLegendItem): string {\n return item.id;\n }\n\n trackByGroup(_: number, group: { group: string | null }): string {\n return group.group ?? '__default__';\n }\n\n templateFor(item: ChartLegendItem): TemplateRef<ChartLegendTemplateContext> | null {\n return this.itemTemplate ?? this.config.itemTemplate ?? null;\n }\n\n templateContext(item: ChartLegendItem): ChartLegendTemplateContext {\n return {\n $implicit: item,\n item,\n selected: item.selected,\n disabled: item.disabled,\n };\n }\n\n private legendType(item: ChartLegendItem): 'default' | 'marker' | 'line' | 'lineMarker' {\n return item.legendType ?? this.config.legendType ?? 'default';\n }\n\n iconForRender(item: ChartLegendItem): string {\n return this.legendType(item) === 'line' ? 'line' : item.icon;\n }\n\n iconRenderType(item: ChartLegendItem): IconRenderType {\n const icon = this.iconForRender(item).trim();\n if (!icon || icon === 'none') return 'none';\n if (icon.startsWith('image://')) return 'image';\n if (icon.startsWith('path://') || /^[Mm]\\s*-?\\d/.test(icon)) return 'path';\n return 'shape';\n }\n\n iconImageSrc(item: ChartLegendItem): string {\n return item.icon.replace(/^image:\\/\\//, '');\n }\n\n iconPathData(item: ChartLegendItem): string {\n return item.icon.replace(/^path:\\/\\//, '');\n }\n\n iconShapeClass(icon: ChartLegendIcon): string {\n const shape = SUPPORTED_ICON_SHAPES.has(icon) ? icon : 'rect';\n return `chart-legend__icon--${shape}`;\n }\n\n isLineMarker(item: ChartLegendItem): boolean {\n return this.legendType(item) === 'lineMarker';\n }\n\n isLineOnly(item: ChartLegendItem): boolean {\n return this.legendType(item) === 'line';\n }\n\n toggle(item: ChartLegendItem, event?: Event): void {\n event?.preventDefault();\n if (!this.chart || item.disabled) return;\n\n if (this.config?.preventLegendClickDefault) {\n this?.emit?.('toggle', item);\n return;\n }\n\n const mode = this.selectionMode();\n const wasSelected = item.selected;\n this.adapter.applySelection(this.chart, item, mode, this.state.items);\n this.syncFromChart();\n // this.emit(mode === 'exclusive' ? 'exclusive' : wasSelected ? 'unselect' : 'select', item);\n }\n\n hover(item: ChartLegendItem): void {\n if (!this.chart || item.disabled || this.config.hoverLink === false) return;\n this.state = { ...this.state, hoveredName: item.name };\n this.adapter.highlight(this.chart, item);\n // this.emit('highlight', item);\n this.cdr.markForCheck();\n }\n\n leave(item: ChartLegendItem): void {\n if (!this.chart || this.config.hoverLink === false) return;\n this.state = { ...this.state, hoveredName: null };\n this.adapter.downplay(this.chart, item);\n // this.emit('downplay', item);\n this.cdr.markForCheck();\n }\n\n page(step: number): void {\n const next = Math.min(Math.max(this.state.pageIndex + step, 0), this.pageCount - 1);\n if (next === this.state.pageIndex) return;\n this.state = { ...this.state, pageIndex: next };\n this.emit('page');\n this.scheduleScrollStateUpdate();\n }\n\n scrollLegend(direction: -1 | 1, event?: Event): void {\n event?.preventDefault();\n if (!this.usesInternalLegendScroll) return;\n const element = this.itemsScroller?.nativeElement;\n if (!element) return;\n\n const distance = this.scrollsVertically\n ? Math.max(element.clientHeight * 0.8, 120)\n : Math.max(element.clientWidth * 0.8, 120);\n\n element.scrollBy({\n left: this.scrollsVertically ? 0 : direction * distance,\n top: this.scrollsVertically ? direction * distance : 0,\n behavior: 'smooth',\n });\n this.scheduleScrollStateUpdate();\n }\n\n updateScrollState(): void {\n this.scheduleScrollStateUpdate();\n }\n\n itemTitle(item: ChartLegendItem): string | null {\n return this.config.tooltipFormatter ? this.config.tooltipFormatter(item) : item.label;\n }\n\n private rebuildItems(selectedFromChart?: Record<string, boolean>): void {\n const selected = selectedFromChart ?? this.adapter.readSelected(this.chart);\n const items = this.adapter.buildItems(this.series, this.colors, selected, this.config);\n const maxPage = Math.max(\n Math.ceil(items.length / (this.config.pageSize || items.length || 1)) - 1,\n 0,\n );\n this.state = {\n ...this.state,\n selected,\n items,\n pageIndex: Math.min(this.state.pageIndex, maxPage),\n };\n this.cdr.markForCheck();\n this.scheduleScrollStateUpdate();\n }\n\n private syncFromChart(selected?: Record<string, boolean>): void {\n this.rebuildItems(selected ?? this.adapter.readSelected(this.chart));\n this.emit('sync');\n }\n\n private rebindChart(previous: ECharts | null): void {\n this.detachChart(previous);\n if (!this.isBrowser || !this.chart) return;\n this.chart.on('legendselectchanged', this.onLegendSelectChanged);\n this.chart.on('legendselected', this.onLegendSelectChanged);\n this.chart.on('legendunselected', this.onLegendSelectChanged);\n }\n\n private detachChart(chart: ECharts | null | undefined): void {\n if (!chart) return;\n chart.off('legendselectchanged', this.onLegendSelectChanged);\n chart.off('legendselected', this.onLegendSelectChanged);\n chart.off('legendunselected', this.onLegendSelectChanged);\n }\n\n private selectionMode(): ChartLegendSelectionMode {\n return this.config.selectionMode ?? 'multiple';\n }\n\n private emit(type: ChartLegendEvent['type'], item?: ChartLegendItem): void {\n this.legendEvent.emit({ type, item, state: this.state });\n }\n\n private scheduleScrollStateUpdate(): void {\n if (!this.isBrowser || this.scrollStateFrame) return;\n if (!this.usesInternalLegendScroll) {\n this.setScrollState(false, false, false);\n return;\n }\n this.scrollStateFrame = requestAnimationFrame(() => {\n this.scrollStateFrame = 0;\n this.updateScrollStateNow();\n });\n }\n\n private updateScrollStateNow(): void {\n const element = this.itemsScroller?.nativeElement;\n if (!element) {\n this.setScrollState(false, false, false);\n return;\n }\n\n const hasOverflow = this.scrollsVertically\n ? element.scrollHeight > element.clientHeight + 1\n : element.scrollWidth > element.clientWidth + 1;\n const scrollPosition = this.scrollsVertically ? element.scrollTop : element.scrollLeft;\n const viewportSize = this.scrollsVertically ? element.clientHeight : element.clientWidth;\n const scrollSize = this.scrollsVertically ? element.scrollHeight : element.scrollWidth;\n\n this.setScrollState(\n hasOverflow,\n hasOverflow && scrollPosition > 1,\n hasOverflow && scrollPosition + viewportSize < scrollSize - 1,\n );\n }\n\n private setScrollState(\n canScrollLegend: boolean,\n canScrollStart: boolean,\n canScrollEnd: boolean,\n ): void {\n if (\n this.canScrollLegend === canScrollLegend &&\n this.canScrollStart === canScrollStart &&\n this.canScrollEnd === canScrollEnd\n ) {\n return;\n }\n this.canScrollLegend = canScrollLegend;\n this.canScrollStart = canScrollStart;\n this.canScrollEnd = canScrollEnd;\n this.cdr.markForCheck();\n }\n\n private get hasConfiguredMaxWidth(): boolean {\n return typeof this.config.maxWidth === 'string' && this.config.maxWidth.trim().length > 0;\n }\n}\n","@if (config.enabled !== false) {\n <nav\n class=\"chart-legend\"\n [class.chart-legend--vertical]=\"isVerticalLegend\"\n [class.chart-legend--scrollable]=\"isScrollableLegend\"\n [class.chart-legend--wrap]=\"!isScrollableLegend\"\n [class.chart-legend--limited-wrap]=\"isLimitedWrapLegend\"\n [ngClass]=\"config.className || null\"\n [style.max-height]=\"config.maxHeight || null\"\n [style.padding]=\"config.padding || '1rem'\"\n [attr.aria-label]=\"config.ariaLabel || 'Chart legend'\"\n >\n <div class=\"chart-legend__viewport\">\n @if (config.title) {\n <p\n class=\"chart-legend-title\"\n [class.chart-legend-title--uppercase]=\"config.legendTitleTransform === 'uppercase'\"\n [class.chart-legend-title--lowercase]=\"config.legendTitleTransform === 'lowercase'\"\n [class.chart-legend-title--capitalize]=\"config.legendTitleTransform === 'capitalize'\"\n [style.--legend-title-color]=\"config.legendTitleTextColor || null\"\n [style.--legend-title-font-size]=\"\n config.legendTitleFontSize ? config.legendTitleFontSize + 'px' : null\n \"\n [style.--legend-title-font-style]=\"config.legendTitleFontStyle || null\"\n [style.--legend-title-font-weight]=\"config.legendTitleFontWeight || null\"\n [style.--legend-title-text-decoration]=\"config.legendTitleTextDecoration || null\"\n [style.--legend-title-font-family]=\"config.legendTitleFontFamily || 'initial'\"\n >\n {{ config.title }}\n </p>\n }\n @if (usesInternalLegendScroll && canScrollLegend) {\n <button\n type=\"button\"\n class=\"chart-legend__scroll-button chart-legend__scroll-button--start\"\n [disabled]=\"!canScrollStart\"\n (click)=\"scrollLegend(-1, $event)\"\n [attr.aria-label]=\"scrollStartAriaLabel\"\n >\n <img\n src=\"images/legend_left.svg\"\n [class.chart-legend__scroll-icon--up]=\"scrollsVertically\"\n alt=\"left\"\n />\n </button>\n }\n\n <div #itemsScroller class=\"chart-legend__scroller\" (scroll)=\"updateScrollState()\">\n <div\n class=\"chart-legend__items\"\n role=\"list\"\n [class.chart-legend__items--center]=\"\n isLegendAlignedCenter && (!usesInternalLegendScroll || !canScrollLegend)\n \"\n [class.chart-legend__items--end]=\"isLegendAlignedEnd\"\n [style.--legend-text-color]=\"config.legendTextColor || null\"\n [style.--legend-font-size]=\"config.legendFontSize ? config.legendFontSize + 'px' : null\"\n [style.--legend-font-style]=\"config.legendFontStyle || null\"\n [style.--legend-font-weight]=\"config.legendFontWeight || null\"\n [style.--legend-text-decoration]=\"config.legendTextDecoration || null\"\n [style.--legend-font-family]=\"config.legendFontFamily || 'initial'\"\n >\n @for (group of groupedItems; track trackByGroup($index, group)) {\n @if (group.group) {\n <div class=\"chart-legend__group-label\">{{ group.group }}</div>\n }\n\n @for (item of group.items; track trackByItem($index, item)) {\n <button\n type=\"button\"\n class=\"chart-legend__item\"\n role=\"switch\"\n [class.chart-legend__item--off]=\"!item.selected\"\n [class.chart-legend__item--disabled]=\"item.disabled\"\n [class.chart-legend__item--hovered]=\"state.hoveredName === item.name\"\n [disabled]=\"item.disabled\"\n [attr.aria-checked]=\"item.selected\"\n [attr.aria-label]=\"item.label\"\n [style.--legend-item-color]=\"item.color\"\n [title]=\"itemTitle(item)\"\n (click)=\"toggle(item, $event)\"\n (keydown.enter)=\"toggle(item, $event)\"\n (keydown.space)=\"toggle(item, $event)\"\n (mouseenter)=\"hover(item)\"\n (focus)=\"hover(item)\"\n (mouseleave)=\"leave(item)\"\n (blur)=\"leave(item)\"\n >\n @if (templateFor(item); as template) {\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"templateContext(item)\"\n ></ng-container>\n } @else {\n @switch (iconRenderType(item)) {\n @case ('image') {\n @if (isLineMarker(item)) {\n <span\n class=\"chart-legend__icon chart-legend__icon--line-marker\"\n aria-hidden=\"true\"\n >\n <span class=\"chart-legend__icon-line\"></span>\n <img class=\"chart-legend__icon-image\" [src]=\"iconImageSrc(item)\" alt=\"\" />\n <span class=\"chart-legend__icon-line\"></span>\n </span>\n } @else {\n <img class=\"chart-legend__icon-image\" [src]=\"iconImageSrc(item)\" alt=\"\" />\n }\n }\n @case ('path') {\n @if (isLineMarker(item)) {\n <span\n class=\"chart-legend__icon chart-legend__icon--line-marker\"\n aria-hidden=\"true\"\n >\n <span class=\"chart-legend__icon-line\"></span>\n <svg\n class=\"chart-legend__icon-path\"\n viewBox=\"-512 -512 1024 1024\"\n aria-hidden=\"true\"\n >\n <path [attr.d]=\"iconPathData(item)\"></path>\n </svg>\n <span class=\"chart-legend__icon-line\"></span>\n </span>\n } @else {\n <svg\n class=\"chart-legend__icon-path\"\n viewBox=\"-512 -512 1024 1024\"\n aria-hidden=\"true\"\n >\n <path [attr.d]=\"iconPathData(item)\"></path>\n </svg>\n }\n }\n @case ('shape') {\n @if (isLineMarker(item)) {\n <span\n class=\"chart-legend__icon chart-legend__icon--line-marker\"\n aria-hidden=\"true\"\n >\n <span class=\"chart-legend__icon-line\"></span>\n <span\n class=\"chart-legend__icon chart-legend__icon--marker\"\n [ngClass]=\"iconShapeClass(item.icon)\"\n ></span>\n <span class=\"chart-legend__icon-line\"></span>\n </span>\n } @else {\n <span\n class=\"chart-legend__icon\"\n [ngClass]=\"iconShapeClass(iconForRender(item))\"\n aria-hidden=\"true\"\n ></span>\n }\n }\n }\n <span class=\"chart-legend__label\">\n {{ item.label }}@if (this.config.showValue && this.config.valueFormatter) {\n :\n }\n </span>\n @if (this.config.showValue && this.config.valueFormatter) {\n <span class=\"chart-legend__value\">{{ this.config.valueFormatter(item) }}</span>\n }\n @if (this.config.showActionArrow) {\n @if (this.config.actionArrowTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"this.config.actionArrowTemplate\"\n [ngTemplateOutletContext]=\"templateContext(item)\"\n ></ng-container>\n } @else {\n <svg\n class=\"chart-legend__action-arrow\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n }\n }\n }\n </button>\n }\n }\n </div>\n </div>\n\n @if (usesInternalLegendScroll && canScrollLegend) {\n <button\n type=\"button\"\n class=\"chart-legend__scroll-button chart-legend__scroll-button--end\"\n [disabled]=\"!canScrollEnd\"\n (click)=\"scrollLegend(1, $event)\"\n [attr.aria-label]=\"scrollEndAriaLabel\"\n >\n <img\n src=\"images/legend_right.svg\"\n [class.chart-legend__scroll-icon--down]=\"scrollsVertically\"\n alt=\"right\"\n />\n </button>\n }\n </div>\n\n @if (config.showPagination && pageCount > 1) {\n <div class=\"chart-legend__pagination\" aria-label=\"Legend pages\">\n <button\n type=\"button\"\n class=\"chart-legend__page\"\n [disabled]=\"state.pageIndex === 0\"\n (click)=\"page(-1)\"\n aria-label=\"Previous legend page\"\n >\n <\n </button>\n <span class=\"chart-legend__page-count\">{{ state.pageIndex + 1 }} / {{ pageCount }}</span>\n <button\n type=\"button\"\n class=\"chart-legend__page\"\n [disabled]=\"state.pageIndex + 1 === pageCount\"\n (click)=\"page(1)\"\n aria-label=\"Next legend page\"\n >\n >\n </button>\n </div>\n }\n </nav>\n}\n","import { Injectable } from '@angular/core';\nimport * as echarts from 'echarts/core';\nimport {\n BarChartConfig,\n DoughnutChartConfig,\n GanttChartConfig,\n HeatmapChartConfig,\n HeatmapPivotAggregation,\n LineChartConfig,\n PieChartConfig,\n SankeyChartConfig,\n SankeyLink,\n SankeyNode,\n} from '../modal/charts-modal';\n@Injectable({\n providedIn: 'root',\n})\nexport class Charts {\n legendSelected: Record<string, boolean> = {};\n defaultColors: string[] = ['#22c55e', '#3b82f6', '#ef4444', '#6b7280'];\n defaultLegendColors: string[] = ['#3b82f6', '#FFC107', '#22c55e', '#ef4444'];\n heatmapPivotColors: string[] = ['#dbeafe', '#93c5fd', '#3b82f6', '#1d4ed8', '#1e3a8a'];\n\n // buildGraphicLegend(total: number | null, config: any, chartInstance: any, chartType?: string) {\n // const pillHeight = 28;\n // const spacing = 14;\n // const indicatorWidth = 12;\n // const padding = 8;\n // const font = '14px sans-serif';\n\n // const containerWidth = chartInstance?.getWidth?.() ?? 800;\n // const maxWidth = containerWidth * (config?.legendContainerWidth ?? 0.7);\n\n // const selectedMap = chartInstance?.getOption()?.legend?.[0]?.selected || {};\n // let colorIndex = 0;\n // const pills = (\n // chartType === 'line' || chartType === 'bar' || chartType === 'scatter'\n // ? config?.series\n // : config?.data\n // )?.map((item: any) => {\n // const hasCustomColors = Array.isArray(config?.colors) && config?.colors?.length > 0;\n // const color =\n // total === 0\n // ? '#E6E7E8'\n // : (item?.itemStyle?.color ??\n // (hasCustomColors\n // ? config?.colors[colorIndex % config?.colors?.length]\n // : this.defaultColors[colorIndex % this.defaultColors.length]));\n // if (\n // !item?.itemStyle?.color ||\n // (item?.itemStyle?.color && Object.keys(selectedMap).length && !selectedMap[item.name])\n // ) {\n // colorIndex += 1;\n // }\n // const nameRect = echarts.format.getTextRect(item.name, font);\n // const valueRect =\n // chartType === 'line' || chartType === 'bar' || chartType === 'scatter'\n // ? { width: 0 }\n // : echarts.format.getTextRect(\n // String(config?.valueFormatter ? config.valueFormatter(item.value) : item.value),\n // font,\n // );\n\n // const pillWidth =\n // padding +\n // indicatorWidth +\n // 6 +\n // nameRect.width +\n // (chartType === 'line' || chartType === 'bar' || chartType === 'scatter'\n // ? 0\n // : 8 + valueRect.width) +\n // padding;\n\n // return { item, color, pillWidth };\n // });\n\n // // 🔹 Build rows dynamically\n // const rows: any[] = [];\n // let currentRow: any[] = [];\n // let rowWidth = 0;\n\n // pills?.forEach((pill: any) => {\n // if (rowWidth + pill.pillWidth > maxWidth && currentRow.length) {\n // rows.push({ pills: currentRow, width: rowWidth });\n // currentRow = [];\n // rowWidth = 0;\n // }\n\n // currentRow.push(pill);\n // rowWidth += pill.pillWidth + spacing;\n // });\n\n // if (currentRow.length) rows.push({ pills: currentRow, width: rowWidth });\n\n // // 🔹 Build graphic children\n // let yOffset = 0;\n // const children: any[] = [];\n\n // rows?.forEach((row) => {\n // let xOffset =\n // config?.legendAlign === 'center' && config?.legendDirection !== 'vertical'\n // ? (maxWidth - row.width) / 2\n // : maxWidth;\n\n // row?.pills?.forEach((pill: any) => {\n // const isSelected = selectedMap[pill.item.name] !== false;\n // const isDisabled = pill.item.value === 0;\n // children.push({\n // type: 'group',\n // left: xOffset,\n // top: yOffset,\n // width: pill.pillWidth,\n // height: pillHeight,\n // cursor: isDisabled ? 'default' : 'pointer',\n\n // onclick: () => {\n // if (isDisabled) return;\n // chartInstance.dispatchAction({\n // type: 'legendToggleSelect',\n // name: pill.item.name,\n // });\n\n // chartInstance.setOption({\n // graphic: this.buildGraphicLegend(total, config, chartInstance, chartType),\n // });\n // },\n\n // children: [\n // {\n // type: 'rect',\n // shape: {\n // width: pill.pillWidth,\n // height: pillHeight,\n // r: 4,\n // },\n // style: {\n // fill:\n // isSelected && !isDisabled\n // ? this.hexToRgba(pill.color, total === 0 ? 0.3 : 0.03)\n // : '#F2F2F7',\n // stroke: isSelected && !isDisabled ? this.hexToRgba(pill.color, 0.3) : '#D1D1D6',\n // lineWidth: 1,\n // },\n // },\n\n // {\n // type: 'rect',\n // shape: { width: 12, height: config?.legendIndicatorHeight ?? 12, r: 2 },\n // left: padding,\n // top: (pillHeight - (config?.legendIndicatorHeight ?? 12)) / 2,\n // style: {\n // fill: isSelected && !isDisabled ? pill.color : '#C7C7CC',\n // },\n // },\n\n // {\n // type: 'text',\n // left: padding + indicatorWidth + 6,\n // top: (pillHeight - indicatorWidth) / 2,\n // style: {\n // text: `${pill.item.name}${chartType === 'line' || chartType === 'bar' || chartType === 'scatter' ? '' : ':'}`,\n // fontSize: 14,\n // fontWeight: 400,\n // fill: isSelected && !isDisabled && total !== 0 ? '#1C1C1E' : '#81858A',\n // textVerticalAlign: 'middle',\n // },\n // },\n\n // ...(chartType === 'line' || chartType === 'bar' || chartType === 'scatter'\n // ? []\n // : [\n // {\n // type: 'text',\n // right: padding,\n // top: (pillHeight - indicatorWidth) / 2,\n // style: {\n // text:\n // total === 0\n // ? '-'\n // : config?.valueFormatter\n // ? config.valueFormatter(pill.item.value)\n // : pill.item.value,\n // fontSize: 14,\n // fontWeight: 500,\n // fill: isSelected && !isDisabled ? '#1C1C1E' : '#81858A',\n // textAlign: 'right',\n // textVerticalAlign: 'middle',\n // },\n // },\n // ]),\n // ],\n // });\n\n // xOffset += pill.pillWidth + spacing;\n // });\n\n // yOffset += pillHeight + spacing;\n // });\n\n // // 🔹 Position logic\n // const positionConfig: any = {};\n // switch (config?.legendPosition) {\n // case 'top':\n // positionConfig.top = config?.legendEdgeGap?.top ?? 20;\n // break;\n // case 'bottom':\n // positionConfig.bottom = config?.legendEdgeGap?.bottom ?? 20;\n // break;\n // case 'left':\n // positionConfig.left = config?.legendEdgeGap?.left ?? 20;\n // break;\n // case 'right':\n // positionConfig.right = config?.legendEdgeGap?.right ?? 20;\n // break;\n // }\n\n // // ALIGNMENT (Cross-Axis)\n // if (config?.legendPosition === 'top' || config?.legendPosition === 'bottom') {\n // // Horizontal area → align horizontally\n // if (config?.legendAlign === 'center') {\n // positionConfig.left = 'center';\n // } else if (config?.legendAlign === 'right') {\n // positionConfig.right = config?.legendEdgeGap?.right ?? 20;\n // } else {\n // positionConfig.left = config?.legendEdgeGap?.left ?? 20;\n // }\n // } else {\n // // Vertical area → align vertically\n // if (config?.legendAlign === 'center') {\n // positionConfig.top = 'middle';\n // } else if (config?.legendAlign === 'right') {\n // positionConfig.bottom = config?.legendEdgeGap?.bottom ?? 20;\n // } else {\n // positionConfig.top = config?.legendEdgeGap?.top ?? 20;\n // }\n // }\n // return [\n // {\n // id: 'customLegend',\n // type: 'group',\n // ...positionConfig,\n // width: maxWidth,\n // height: yOffset,\n // children,\n // },\n // ];\n // }\n buildGraphicLegend(total: number | null, config: any, chartInstance: any, chartType?: string) {\n const pillHeight = 28;\n const spacing = 14;\n const indicatorWidth = 12;\n const padding = 8;\n const font = '14px sans-serif';\n\n // =========================================\n // CONTAINER + AVAILABLE WIDTH\n // =========================================\n\n const containerWidth = chartInstance?.getWidth?.() ?? 800;\n\n const leftGap = config?.legendEdgeGap?.left ?? 0;\n const rightGap = config?.legendEdgeGap?.right ?? 0;\n\n // actual usable width after gaps\n const usableWidth = containerWidth - leftGap - rightGap;\n\n const maxWidth = usableWidth * (config?.legendContainerWidth ?? 0.7);\n\n // =========================================\n // SELECTED LEGEND MAP\n // =========================================\n\n const selectedMap = chartInstance?.getOption()?.legend?.[0]?.selected || {};\n\n let colorIndex = 0;\n\n // =========================================\n // BUILD PILLS\n // =========================================\n\n const pills = (\n chartType === 'line' || chartType === 'bar' || chartType === 'scatter'\n ? config?.series\n : config?.data\n )?.map((item: any) => {\n const hasCustomColors = Array.isArray(config?.colors) && config?.colors?.length > 0;\n\n const color =\n total === 0\n ? '#E6E7E8'\n : (item?.itemStyle?.color ??\n (hasCustomColors\n ? config?.colors[colorIndex % config?.colors?.length]\n : this.defaultColors[colorIndex % this.defaultColors.length]));\n\n if (\n !item?.itemStyle?.color ||\n (item?.itemStyle?.color && Object.keys(selectedMap).length && !selectedMap[item.name])\n ) {\n colorIndex += 1;\n }\n\n const nameRect = echarts.format.getTextRect(item.name, font);\n\n const valueRect =\n chartType === 'line' || chartType === 'bar' || chartType === 'scatter'\n ? { width: 0 }\n : echarts.format.getTextRect(\n String(config?.valueFormatter ? config.valueFormatter(item.value) : item.value),\n font,\n );\n\n const pillWidth =\n padding +\n indicatorWidth +\n 6 +\n nameRect.width +\n (chartType === 'line' || chartType === 'bar' || chartType === 'scatter'\n ? 0\n : 8 + valueRect.width) +\n padding;\n\n return {\n item,\n color,\n pillWidth,\n };\n });\n\n // =========================================\n // BUILD ROWS PERFECTLY\n // =========================================\n\n const rows: any[] = [];\n\n let currentRow: any[] = [];\n let rowWidth = 0;\n\n pills?.forEach((pill: any) => {\n const additionalWidth = currentRow.length > 0 ? spacing : 0;\n\n // break row if width exceeded\n if (currentRow.length && rowWidth + additionalWidth + pill.pillWidth > maxWidth) {\n rows.push({\n pills: currentRow,\n width: rowWidth,\n });\n\n currentRow = [pill];\n rowWidth = pill.pillWidth;\n } else {\n rowWidth += additionalWidth + pill.pillWidth;\n currentRow.push(pill);\n }\n });\n\n if (currentRow.length) {\n rows.push({\n pills: currentRow,\n width: rowWidth,\n });\n }\n\n // =========================================\n // BUILD GRAPHIC CHILDREN\n // =========================================\n\n let yOffset = 0;\n\n const children: any[] = [];\n\n rows?.forEach((row) => {\n let xOffset = 0;\n\n // =====================================\n // HORIZONTAL ALIGNMENTS\n // =====================================\n\n if (config?.legendDirection !== 'vertical') {\n if (config?.legendAlign === 'center') {\n xOffset = Math.max((maxWidth - row.width) / 2, 0);\n } else if (config?.legendAlign === 'right') {\n xOffset = Math.max(maxWidth - row.width, 0);\n }\n }\n\n row?.pills?.forEach((pill: any) => {\n const isSelected = selectedMap[pill.item.name] !== false;\n\n const isDisabled = pill.item.value === 0;\n\n children.push({\n type: 'group',\n\n left: xOffset,\n top: yOffset,\n\n width: pill.pillWidth,\n height: pillHeight,\n\n cursor: isDisabled ? 'default' : 'pointer',\n\n onclick: () => {\n if (isDisabled) return;\n\n chartInstance.dispatchAction({\n type: 'legendToggleSelect',\n name: pill.item.name,\n });\n\n chartInstance.setOption({\n graphic: this.buildGraphicLegend(total, config, chartInstance, chartType),\n });\n },\n\n children: [\n // =================================\n // BACKGROUND\n // =================================\n\n {\n type: 'rect',\n\n shape: {\n width: pill.pillWidth,\n height: pillHeight,\n r: 4,\n },\n\n style: {\n fill:\n isSelected && !isDisabled\n ? this.hexToRgba(pill.color, total === 0 ? 0.3 : 0.03)\n : '#F2F2F7',\n\n stroke: isSelected && !isDisabled ? this.hexToRgba(pill.color, 0.3) : '#D1D1D6',\n\n lineWidth: 1,\n },\n },\n\n // =================================\n // INDICATOR\n // =================================\n\n {\n type: 'rect',\n\n shape: {\n width: 12,\n height: config?.legendIndicatorHeight ?? 12,\n r: 2,\n },\n\n left: padding,\n\n top: (pillHeight - (config?.legendIndicatorHeight ?? 12)) / 2,\n\n style: {\n fill: isSelected && !isDisabled ? pill.color : '#C7C7CC',\n },\n },\n\n // =================================\n // LABEL\n // =================================\n\n {\n type: 'text',\n\n left: padding + indicatorWidth + 6,\n\n top: (pillHeight - indicatorWidth) / 2,\n\n style: {\n text: `${pill.item.name}${\n chartType === 'line' || chartType === 'bar' || chartType === 'scatter' ? '' : ':'\n }`,\n\n fontSize: 14,\n fontWeight: 400,\n\n fill: isSelected && !isDisabled && total !== 0 ? '#1C1C1E' : '#81858A',\n\n textVerticalAlign: 'middle',\n },\n },\n\n // =================================\n // VALUE\n // =================================\n\n ...(chartType === 'line' || chartType === 'bar' || chartType === 'scatter'\n ? []\n : [\n {\n type: 'text',\n\n right: padding,\n\n top: (pillHeight - indicatorWidth) / 2,\n\n style: {\n text:\n total === 0\n ? '-'\n : config?.valueFormatter\n ? config.valueFormatter(pill.item.value)\n : pill.item.value,\n\n fontSize: 14,\n fontWeight: 500,\n\n fill: isSelected && !isDisabled ? '#1C1C1E' : '#81858A',\n\n textAlign: 'right',\n textVerticalAlign: 'middle',\n },\n },\n ]),\n ],\n });\n\n xOffset += pill.pillWidth + spacing;\n });\n\n yOffset += pillHeight + spacing;\n });\n\n // =========================================\n // POSITION CONFIG\n // =========================================\n\n const positionConfig: any = {};\n\n switch (config?.legendPosition) {\n case 'top':\n positionConfig.top = config?.legendEdgeGap?.top ?? 20;\n break;\n\n case 'bottom':\n positionConfig.bottom = config?.legendEdgeGap?.bottom ?? 20;\n break;\n\n case 'left':\n positionConfig.left = config?.legendEdgeGap?.left ?? 20;\n break;\n\n case 'right':\n positionConfig.right = config?.legendEdgeGap?.right ?? 20;\n break;\n }\n\n // =========================================\n // CROSS AXIS ALIGNMENT\n // =========================================\n\n if (config?.legendPosition === 'top' || config?.legendPosition === 'bottom') {\n // horizontal placement\n if (config?.legendAlign === 'center') {\n positionConfig.left = 'center';\n } else if (config?.legendAlign === 'right') {\n positionConfig.right = config?.legendEdgeGap?.right ?? 20;\n } else {\n positionConfig.left = config?.legendEdgeGap?.left ?? 20;\n }\n } else {\n // vertical placement\n if (config?.legendAlign === 'center') {\n positionConfig.top = 'middle';\n } else if (config?.legendAlign === 'right') {\n positionConfig.bottom = config?.legendEdgeGap?.bottom ?? 20;\n } else {\n positionConfig.top = config?.legendEdgeGap?.top ?? 20;\n }\n }\n\n // =========================================\n // RETURN GRAPHIC\n // =========================================\n\n return [\n {\n id: 'customLegend',\n\n type: 'group',\n\n ...positionConfig,\n\n width: maxWidth,\n height: yOffset,\n\n children,\n },\n ];\n }\n buildCenterGraphic(config: any, total: number) {\n if (!config?.centerLabel?.show) return [];\n\n const centerConfig = config.centerLabel;\n const titleFont = centerConfig.fontSizeTitle ?? 14;\n const valueFont = centerConfig.fontSizeValue ?? 22;\n\n // Use external top if provided, default to 'center'\n // config.bottom\n const groupTop = centerConfig.top ?? 'center';\n const groupLeft = centerConfig.left ?? 'center';\n\n // Offsets relative to groupTop\n const titleOffset = -valueFont / 2;\n const valueOffset = titleFont / 2;\n\n return [\n {\n id: 'centerLabel',\n type: 'group',\n left: groupLeft,\n top: groupTop,\n silent: true,\n children: [\n ...(centerConfig.title\n ? [\n {\n type: 'text',\n style: {\n text: centerConfig.title ?? '',\n fontSize: titleFont,\n fill: centerConfig.titleColor ?? '#666',\n textAlign: 'center',\n textBaseline: 'middle',\n },\n top: titleOffset, // relative to groupTop\n },\n ]\n : []),\n {\n type: 'text',\n style: {\n text:\n centerConfig.type === 'custom' && centerConfig.formatter\n ? centerConfig.formatter(total, config.data)\n : (centerConfig.value ?? ''),\n fontSize: valueFont,\n fontWeight: 'bold',\n fill: centerConfig.valueColor ?? '#000',\n textAlign: 'center',\n textBaseline: 'middle',\n },\n top: valueOffset + (centerConfig?.valueTopSpace || 0), // relative to groupTop\n },\n ],\n },\n ];\n }\n\n hexToRgba(hex: string, alpha: number) {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n\n formatPercentage(value: string | number | null | undefined) {\n if (value === null || value === undefined || value === '') return 'NA';\n\n // already percentage string\n if (typeof value === 'string' && value.includes('%')) return value;\n\n // numeric/string number\n const num = Number(value);\n if (isNaN(num)) return 'NA';\n\n return `${num}%`;\n }\n\n getNumericValue(value: string | number | null | undefined): number | null {\n if (value === null || value === undefined || value === '') return null;\n\n // remove %\n const cleaned = typeof value === 'string' ? value.replace('%', '').trim() : value;\n const num = Number(cleaned);\n\n return isNaN(num) ? null : num;\n }\n\n getStatusColor(value: string | number | null | undefined) {\n const num = this.getNumericValue(value);\n if (num === null) return '#C0C2C5'; // grey\n if (num < 30) return '#EF4343'; // red\n if (num <= 60) return '#FFC107'; // yellow\n return '#29A277'; // green\n }\n\n pieTooltipFormatter(params: any, config: DoughnutChartConfig | PieChartConfig) {\n const color = params.color;\n const name = params.name;\n const value = params.value;\n const percent = params.percent;\n\n let extraTooltipData: any[] = [];\n if (typeof params?.data === 'object') {\n extraTooltipData = Object.entries(params.data?.[config?.extraTooltipKey || 'tooltip'] || {});\n }\n\n let extraTooltipDataTemplate = '';\n if (extraTooltipData.length) {\n extraTooltipData.forEach((data) => {\n extraTooltipDataTemplate += `<div style=\"\n font-size:13px;\n color:#434A51;\n padding-top: 0.5rem;\n \">\n ${data[0]}: <b style=\"color:#111;font-weight:600;\">${this.formatTooltipValue(data[1], config?.tooltipCompactValue)}</b>\n </div>`;\n });\n }\n\n return `<div style=\"\n position: relative;\n background-color: #fff;\n padding: 8px 16px;\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0,0,0,0.08);\n \">\n <div style=\"\n display: flex;\n align-items: center;\n gap: 10px;\n \">\n <div style=\"\n position: absolute;\n left: -10px;\n top: 10px;\n width: 0;\n height: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n border-right: 10px solid #ffffff;\n \"></div>\n\n <span style=\"\n width: 14px;\n height: 14px;\n background: ${color};\n border-radius: 3px;\n display: inline-block;\n \"></span>\n\n <span style=\"\n font-size: 12px;\n color: #434A51;\n \">\n ${name}: <b style=\"color:#111; font-weight:600;\">${config.valueFormatter ? config.valueFormatter(value) : this.formatTooltipValue(value, config?.tooltipCompactValue)}</b> ${config.showTooltipPercent ? '(' + percent + '%)' : ''}\n </span>\n </div>\n ${extraTooltipDataTemplate}\n </div>\n `;\n }\n barLineTooltipFormatter(\n params: any,\n chartType?: 'bar' | 'line',\n config?: LineChartConfig | BarChartConfig,\n ) {\n if (!params || !params.length) return '';\n\n const date = params[0].axisValueLabel || params[0].name;\n\n let total = 0;\n let rows = '';\n\n let extraTooltipData: any[] = [];\n if (typeof params?.[0]?.data === 'object') {\n extraTooltipData = Object.entries(\n params[0].data?.[config?.extraTooltipKey || 'tooltip'] || {},\n );\n }\n\n let extraTooltipDataTemplate = '';\n if (extraTooltipData.length) {\n extraTooltipData.forEach((data) => {\n extraTooltipDataTemplate += `<div style=\"\n font-size:13px;\n color:#434A51;\n padding-top: 0.5rem;\n \">\n ${data[0]}: <b style=\"color:#111;font-weight:600;\">${this.formatTooltipValue(data[1], config?.tooltipCompactValue)}</b>\n </div>`;\n });\n }\n\n params?.forEach((item: any) => {\n const color = item.color;\n const name = item.seriesName;\n const value = item.value ?? 0;\n\n total += Number(value);\n\n rows += `\n <div style=\"\n display:flex;\n align-items:center;\n gap:8px;\n font-size:13px;\n color:#434A51;\n \">\n <span style=\"\n width:14px;\n height: ${chartType === 'line' ? '3px' : '14px'};\n background:${color};\n border-radius:3px;\n display:inline-block;\n \"></span>\n\n <span>${name}: <b style=\"color:#111;font-weight:600;\">${this.formatTooltipValue(value, config?.tooltipCompactValue)}</b></span>\n </div>\n `;\n });\n\n return `\n <div style=\"\n border-radius: 8px;\n background-color: #ffffff;\n border: 1px solid #f0f0f0;\n box-shadow: 0px 10.55px 23.39px -3.52px #0a0d1214;\n min-width:190px;\n \">\n <div style=\"\n font-size:15px;\n font-weight:600;\n color:#111;\n padding: 0.5rem 1rem;\n border-bottom: 1px solid #F0F0F0 ;\n \">\n ${date}\n </div>\n <div style=\"padding: 1rem; display: flex; flex-direction: column; gap: 6px\">\n ${rows}\n <div>\n <div style=\"\n font-size:13px;\n color:#434A51;\n padding-top: 0.5rem;\n \">\n Total: <b style=\"color:#111;font-weight:600;\">${this.formatTooltipValue(total, config?.tooltipCompactValue)}</b>\n ${extraTooltipDataTemplate}\n </div>\n\n </div>\n `;\n }\n\n compactValueFormat(value: number): string {\n if (!Number.isFinite(value)) return String(value);\n if (Object.is(value, -0) || value === 0) return '0';\n\n const units = [\n { divisor: 1_000_000_000_000_000, suffix: 'Q' },\n { divisor: 1_000_000_000_000, suffix: 'T' },\n { divisor: 1_000_000_000, suffix: 'B' },\n { divisor: 1_000_000, suffix: 'M' },\n { divisor: 1_000, suffix: 'K' },\n ];\n const absoluteValue = Math.abs(value);\n let unitIndex = units.findIndex(({ divisor }) => absoluteValue >= divisor);\n\n // Keep values below one thousand unchanged, including decimal values.\n if (unitIndex === -1) return String(value);\n\n let scaled = Math.round((value / units[unitIndex].divisor) * 10) / 10;\n\n // For example, 999_950 should display as 1M rather than 1000K after\n // rounding to one decimal place.\n if (Math.abs(scaled) >= 1_000 && unitIndex > 0) {\n unitIndex -= 1;\n scaled = Math.round((value / units[unitIndex].divisor) * 10) / 10;\n }\n\n return `${scaled}${units[unitIndex].suffix}`;\n }\n\n formatTooltipValue(value: any, compact = false): any {\n if (typeof Number(value) !== 'number') return value;\n\n const roundedValue = this.toMaxDecimals(value);\n return compact ? this.compactValueFormat(roundedValue) : roundedValue;\n }\n\n formatGanttDate(value: string | number | Date, config?: GanttChartConfig): string {\n const date = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(date.getTime())) return String(value);\n\n switch (config?.XAxisAggregation) {\n case 'year':\n return String(date.getFullYear());\n case 'quarter':\n return `Q${Math.floor(date.getMonth() / 3) + 1} ${date.getFullYear()}`;\n case 'month':\n return date.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });\n case 'week': {\n const { week, year } = this.getIsoWeek(date);\n return `W${week} ${year}`;\n }\n case 'hour':\n return date.toLocaleDateString('en-US', {\n day: '2-digit',\n month: 'short',\n hour: '2-digit',\n hour12: false,\n });\n case 'minute':\n return date.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n });\n case 'day':\n default:\n return date.toLocaleDateString('en-US', { day: '2-digit', month: 'short' });\n }\n }\n\n formatHeatmapPivotDate(\n value: string | number | Date,\n aggregation: HeatmapPivotAggregation = 'day',\n ): string {\n const date = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(date.getTime())) return String(value);\n\n switch (aggregation) {\n case 'year':\n return String(date.getFullYear());\n case 'quarter':\n return `Q${Math.floor(date.getMonth() / 3) + 1} ${date.getFullYear()}`;\n case 'month':\n return date.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });\n case 'week': {\n const utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n const dayOfWeek = utcDate.getUTCDay() || 7;\n utcDate.setUTCDate(utcDate.getUTCDate() + 4 - dayOfWeek);\n const year = utcDate.getUTCFullYear();\n const yearStart = new Date(Date.UTC(year, 0, 1));\n const week = Math.ceil(((utcDate.getTime() - yearStart.getTime()) / 86_400_000 + 1) / 7);\n return `W${week} ${year}`;\n }\n case 'hour':\n return date.toLocaleDateString('en-US', {\n day: '2-digit',\n month: 'short',\n hour: '2-digit',\n hour12: false,\n });\n case 'minute':\n return date.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n });\n case 'day':\n default:\n return date.toLocaleDateString('en-US', { day: '2-digit', month: 'short' });\n }\n }\n\n private getIsoWeek(date: Date): { week: number; year: number } {\n const utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n const dayOfWeek = utcDate.getUTCDay() || 7;\n\n utcDate.setUTCDate(utcDate.getUTCDate() + 4 - dayOfWeek);\n\n const year = utcDate.getUTCFullYear();\n const yearStart = new Date(Date.UTC(year, 0, 1));\n const week = Math.ceil(((utcDate.getTime() - yearStart.getTime()) / 86_400_000 + 1) / 7);\n\n return { week, year };\n }\n\n ganttTooltipFormatter(params: any, config?: GanttChartConfig) {\n const data = params.data;\n let extraTooltipData: any[] = [];\n if (typeof data === 'object') {\n extraTooltipData = Object.entries(data?.[config?.extraTooltipKey || 'tooltip'] || {});\n }\n let extraTooltipDataTemplate = '';\n if (extraTooltipData.length) {\n extraTooltipData.forEach((data) => {\n extraTooltipDataTemplate += `<div style=\"\n color:#434A51;\n \">\n ${data[0]}: <b style=\"color:#111;font-weight:600;\">${typeof data[1] === 'number' ? this.formatTooltipValue(data[1], config?.tooltipCompactValue) : data[1]}</b>\n </div>`;\n });\n }\n\n return `\n <div style=\"\n border-radius: 8px;\n background-color: #ffffff;\n border: 1px solid #f0f0f0;\n box-shadow: 0px 10.55px 23.39px -3.52px #0a0d1214;\n min-width:190px;\n \">\n <div style=\"\n font-size:15px;\n font-weight:600;\n color:#111;\n padding: 0.5rem 1rem;\n border-bottom: 1px solid #F0F0F0 ;\n \">\n ${data.name}\n </div>\n <div style=\"padding: 0.5rem 1rem; display: flex; flex-direction: column; gap: 6px\">\n Start: ${this.formatGanttDate(data.start, config)}<br/>\n End: ${this.formatGanttDate(data.end, config)}\n ${data.duration ? `<br/>Duration: ${typeof data.duration === 'number' ? this.formatTooltipValue(data.duration, config?.tooltipCompactValue) : data.duration}` : ''}\n\n <div>\n ${\n extraTooltipDataTemplate\n ? `<div style=\"\n font-size:14px;\n color:#434A51;\n \">\n ${extraTooltipDataTemplate}\n </div>`\n : ''\n }\n </div>`;\n }\n\n heatmapTooltipFormatter(params: any, config: HeatmapChartConfig) {\n const value = params.value ?? [];\n const xAxisLabel = config.xAxisData?.[value[0]] ?? value[0] ?? '-';\n const yAxisLabel = config.yAxisData?.[value[1]] ?? value[1] ?? '-';\n const heatValue = value[2] ?? '-';\n const color = params.color ?? '#38bdf8';\n\n return `\n <div style=\"\n background:#ffffff;\n padding:12px 14px;\n border-radius:8px;\n border:1px solid #f0f0f0;\n box-shadow:0px 10.55px 23.39px -3.52px #0a0d1214;\n min-width:160px;\n font-family: Inter, sans-serif;\n \">\n <div style=\"\n display:flex;\n align-items:center;\n gap:8px;\n color:#111;\n font-size:14px;\n font-weight:600;\n margin-bottom:8px;\n \">\n <span style=\"\n width:12px;\n height:12px;\n background:${color};\n border-radius:3px;\n display:inline-block;\n \"></span>\n <span>${config.seriesName ?? config.title ?? 'Heatmap'}</span>\n </div>\n\n <div style=\"font-size:13px;color:#434A51;margin-top:4px;\">\n ${xAxisLabel} / ${yAxisLabel}: <b style=\"color:#111;font-weight:600;\">${heatValue}</b>\n </div>\n </div>\n `;\n }\n\n timelineChartTooltipFormatter(params: any) {\n const d = params.data;\n\n return `<div style=\"\n position: relative;\n background:#fff;\n border-radius:8px;\n font-size:12px;\n color:#444;\n box-shadow:0 2px 8px rgba(0,0,0,0.15);\n min-width:220px;\n max-width:500px;\n \">\n <div style=\"\n position: absolute;\n left: -10px;\n bottom: 10px;\n width: 0;\n height: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n border-right: 10px solid #ffffff;\n \"></div>\n <div style=\"padding: 8px 16px; border-bottom:1px solid #E6E7E8;\">\n <div style=\"font-weight:400;color:#040D17;font-size: 14px;\">\n ${d.start || '00:00'} - ${d.end || '00:00'}\n </div>\n\n <div style=\"color:#81858A;margin-top:2px;\">\n ${d.date || 'NA'}\n </div>\n </div>\n <div style=\"padding: 8px 16px;\">\n <div>\n Work Mode: <b>${d.workMode || '-'}</b>\n </div>\n\n <div style=\"margin-top:6px;\">\n Productivity:\n <span style=\"color:${this.getStatusColor(d.productivity)};font-weight:600;\">\n ${this.formatPercentage(d.productivity)}\n </span>\n\n <span style=\"margin-left:12px;\">Activity:</span>\n <span style=\"color:${this.getStatusColor(d.activity)};font-weight:600;\">\n ${this.formatPercentage(d.activity)}\n </span>\n </div>\n\n <div style=\"margin-top:6px;\">\n System Presence: <b>${d.systemPresence || '-'}</b>\n </div>\n\n <div style=\"margin-top:6px;\">\n POW Source: <b>${d.powSource || '-'}</b>\n </div>\n\n <div style=\"margin-top:6px;\">\n Location: <b style=\"white-space: break-spaces;\">${d.location || '-'}</b>\n </div>\n\n <div style=\"\n display:flex;\n gap:10px;\n align-items:center;\n margin-top:6px;\n \">\n Apps Used:\n <span style=\"color:#2563eb;font-weight:600;\">\n ${d.appsUsed || 0}\n </span>\n\n <span style=\"color:#ccc;\">|</span>\n\n Screenshots:\n <span style=\"color:#2563eb;font-weight:600;\">\n ${d.screenShots || 0}\n </span>\n </div>\n </div>\n </div>`;\n }\n getSankeyLevels(nodes: SankeyNode[] = [], links: SankeyLink[] = []) {\n const graph = new Map();\n const indegree = new Map();\n\n nodes.forEach((n) => {\n graph.set(n.name, []);\n indegree.set(n.name, 0);\n });\n\n links.forEach((link) => {\n graph.get(link.source).push(link.target);\n indegree.set(link.target, indegree.get(link.target) + 1);\n });\n\n const queue: any[] = [];\n const levelMap = new Map();\n\n indegree.forEach((deg, node) => {\n if (deg === 0) {\n queue.push(node);\n levelMap.set(node, 0);\n }\n });\n\n while (queue.length) {\n const current = queue.shift();\n const currentLevel = levelMap.get(current);\n\n graph.get(current).forEach((neighbor: any) => {\n const newLevel = currentLevel + 1;\n\n if (!levelMap.has(neighbor) || levelMap.get(neighbor) < newLevel) {\n levelMap.set(neighbor, newLevel);\n queue.push(neighbor);\n }\n });\n }\n\n return Math.max(...levelMap.values());\n }\n\n sankeyTooltipFormatter(params: any, config: SankeyChartConfig & { activeMetric?: string }) {\n const showPercentage = config.styling?.labels?.showPercentage === true;\n const targetNames = new Set((config.links ?? []).map((link) => link.target));\n const sourceTotal = (config.links ?? [])\n .filter((link) => !targetNames.has(link.source))\n .reduce((sum, link) => sum + Number(link.value || 0), 0);\n const totalValue =\n sourceTotal || (config.links ?? []).reduce((sum, link) => sum + Number(link.value || 0), 0);\n const percentageRow = (item: unknown) => {\n const value = Number(item);\n if (!showPercentage || !Number.isFinite(value)) return '';\n const percentage = totalValue ? ((value / totalValue) * 100).toFixed(1) : '0.0';\n return `${percentage}%`;\n };\n if (params.dataType === 'edge') {\n const { source, target, value, tooltip } = params.data;\n const escape = (item: unknown) =>\n String(item ?? '').replace(\n /[&<>\"']/g,\n (char) =>\n ({\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n })[char] ?? char,\n );\n const formatKey = (key: string) => (key ? key.charAt(0).toUpperCase() + key.slice(1) : key);\n const tooltipRows =\n tooltip && typeof tooltip === 'object'\n ? Object.entries(tooltip)\n .map(([key, item]) => {\n const displayValue =\n typeof item === 'number'\n ? this.formatTooltipValue(item, config.tooltipCompactValue)\n : item;\n const value = Array.isArray(displayValue)\n ? displayValue.map(escape).join(', ')\n : escape(displayValue);\n return `<div style=\"font-size:12px;font-weight:600\">${escape(formatKey(key))}: <span style=\"font-size:12px;font-weight:400\">${value}</span></div>`;\n })\n .join('')\n : '';\n return `\n <div style=\"background:#FFFFFF;padding:12px;border:1px solid #d9e1ea;border-radius:8px;min-width:150px;\">\n <div style=\"display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;\">\n <span>${escape(source)}</span>\n <img\n src=\"images/arrow-right.svg\"\n alt=\"\"\n style=\"width:14px;height:14px;display:block;\"\n />\n <span>${escape(target)}</span>\n</div>\n <div style=\"font-size:12px;font-weight:600\">${formatKey(config?.activeMetric ?? '') || 'Value'}: <span style=\"font-size:12px;font-weight:400\">${showPercentage ? '(' : ''}${escape(typeof value === 'number' ? this.formatTooltipValue(value, config.tooltipCompactValue) : value)}${showPercentage ? ')' : ''} ${showPercentage ? percentageRow(value) : ''}</span></div>\n ${tooltipRows}\n </div>\n `;\n }\n return `\n <div style=\"\n background: #fff;\n padding: 10px;\n border-radius: 8px;\n box-shadow: 0 4px 10px rgba(0,0,0,0.15);\n \">\n ${params.name}: <b>${showPercentage ? '(' : ''}${typeof params.value === 'number' ? this.formatTooltipValue(params.value, config.tooltipCompactValue) : params.value}${showPercentage ? ')' : ''}</b>\n ${percentageRow(params.value)}\n </div>\n `;\n }\n scatterTooltipFormatter(params: any, xName: string | undefined, yName: string | undefined) {\n return `\n <div style=\"\n background: #fff;\n padding: 10px;\n border-radius: 8px;\n box-shadow: 0 4px 10px rgba(0,0,0,0.15);\n \">\n <div><b>${params.seriesName}</b></div>\n <div>${xName ? xName + ':' : ''} ${params.value[0]}</div>\n <div>${yName ? xName + ':' : ''} ${params.value[1]}</div>\n </div>\n `;\n }\n calculateGridTopLineBar(config: LineChartConfig | BarChartConfig): number {\n let maxHeight = 0;\n\n const label = config?.series?.[0]?.['label'];\n\n if (\n (config?.showLabel !== true && label?.show !== true) ||\n (config?.labelPosition !== 'top' && label?.position !== 'top')\n ) {\n return 0;\n }\n\n const font = [\n label.fontStyle,\n label.fontWeight,\n `${label.fontSize ?? 12}px`,\n label.fontFamily ?? 'sans-serif',\n ]\n .filter(Boolean)\n .join(' ');\n\n const text = typeof label.formatter === 'string' ? label.formatter : '0';\n\n const rect = echarts.format.getTextRect(text, font);\n\n const padding = label.padding ?? 0;\n\n const verticalPadding = Array.isArray(padding)\n ? padding.length === 1\n ? padding[0] * 2\n : padding.length === 2\n ? padding[0] * 2\n : padding[0] + padding[2]\n : padding * 2;\n\n maxHeight = Math.max(maxHeight, rect.height + verticalPadding);\n\n return maxHeight + 6;\n }\n\n toMaxDecimals(value: number, maxDecimal: number = 2): number {\n if (!Number.isFinite(value)) {\n return value;\n }\n\n return Number(value.toFixed(maxDecimal));\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n SimpleChanges,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n ElementRef,\n HostListener,\n ViewChild,\n} from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\n\nimport { LineChart } from 'echarts/charts';\nimport {\n GridComponent,\n TooltipComponent,\n LegendComponent,\n TitleComponent,\n ToolboxComponent,\n DataZoomInsideComponent,\n DataZoomComponent,\n MarkAreaComponent,\n MarkLineComponent,\n} from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { LineChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\nimport { RightClickCard } from '../right-click-card';\nimport { ChartLegendComponent, ChartLegendEvent } from '../chart-legend';\n\necharts.use([\n LineChart,\n GridComponent,\n TooltipComponent,\n LegendComponent,\n CanvasRenderer,\n TitleComponent,\n ToolboxComponent,\n DataZoomInsideComponent,\n DataZoomComponent,\n MarkAreaComponent,\n MarkLineComponent,\n]);\n\n@Component({\n selector: 'lib-line-chart',\n standalone: true,\n imports: [NgxEchartsDirective, RightClickCard, ChartLegendComponent],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './line-chart.html',\n styleUrls: ['./line-chart.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LinesChart {\n @Input() config: LineChartConfig = { xAxisData: [], series: [] };\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() contextMenuOptions: any[] = [];\n @Input() showContextMenu: boolean = false;\n\n @Output() contextMenuClick = new EventEmitter<any>();\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n @Output() legendEvent = new EventEmitter<ChartLegendEvent>();\n @ViewChild('chartContainer') chartContainer?: ElementRef<HTMLElement>;\n chartOption: EChartsCoreOption = {};\n chartInstance!: ECharts;\n cardPosition = { x: 0, y: 0 };\n openCard = false;\n\n get deafultColors() {\n return this.chartService.defaultColors;\n }\n\n get hasSideLegendWidth(): boolean {\n return this.isSideLegend && !!this.config.customLegend?.maxWidth;\n }\n\n get legendShellMaxWidth(): string | null {\n return this.isSideLegend ? (this.config.customLegend?.maxWidth ?? null) : null;\n }\n\n private get isSideLegend(): boolean {\n return (\n this.config.customLegend?.position === 'left' ||\n this.config.customLegend?.position === 'right'\n );\n }\n constructor(\n private chartService: Charts,\n private cdr: ChangeDetectorRef,\n ) {}\n\n /* ------------------ CHANGE HANDLING ------------------ */\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n // this.chartInstance = null;\n }\n\n this.buildOption();\n }\n private previousConfig: any = {\n xAxisName: '',\n yAxisName: '',\n secondaryYAxisName: '',\n axisNameStyleSignature: '',\n };\n ngDoCheck(): void {\n if (!this.chartInstance || !this.config) return;\n\n const updateOption: any = {};\n const axisNameStyleSignature = this.resolveAxisNameStyleSignature();\n\n if (this.previousConfig.xAxisName !== this.config.xAxisName) {\n this.previousConfig.xAxisName = this.config.xAxisName;\n\n updateOption.xAxis = {\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n nameTextStyle: this.resolveAxisNameTextStyle('x'),\n };\n }\n\n if (this.previousConfig.yAxisName !== this.config.yAxisName) {\n this.previousConfig.yAxisName = this.config.yAxisName;\n\n updateOption.yAxis = [\n {\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameTextStyle: this.resolveAxisNameTextStyle('y'),\n },\n ];\n }\n\n if (this.previousConfig.secondaryYAxisName !== this.config.secondaryYAxisName) {\n this.previousConfig.secondaryYAxisName = this.config.secondaryYAxisName;\n\n updateOption.yAxis = [\n {\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameTextStyle: this.resolveAxisNameTextStyle('y'),\n },\n {\n name: this.resolveAxisName(this.config?.secondaryYAxisName, 'secondaryY'),\n nameTextStyle: this.resolveAxisNameTextStyle('secondaryY'),\n },\n ];\n }\n\n if (Object.keys(updateOption).length) {\n this.chartInstance.setOption(updateOption);\n }\n\n if (this.previousConfig.axisNameStyleSignature !== axisNameStyleSignature) {\n this.previousConfig.axisNameStyleSignature = axisNameStyleSignature;\n this.refreshAxisNameSpace();\n }\n }\n\n /* ------------------ OPTION BUILDER ------------------ */\n private buildOption() {\n const selected = this.readLegendSelected();\n const selectedMode = this.config?.customLegend?.selectionMode === 'exclusive' ? 'single' : true;\n\n this.chartOption = {\n backgroundColor: 'transparent',\n color: this.config?.colors || this.chartService.defaultColors,\n title: {\n show: this.config?.showTitle ?? !!this.config?.title,\n text: this.config?.title,\n left: this.config?.titlePosition || 'center',\n },\n\n tooltip: {\n show: this.config?.showTooltip,\n trigger: 'axis',\n backgroundColor: 'transparent', // remove default box\n borderWidth: 0,\n padding: 0,\n confine: true,\n formatter: (params: any) =>\n this.config?.tooltipFormatter\n ? this.config?.tooltipFormatter(params)\n : this.chartService.barLineTooltipFormatter(params, 'line', this.config),\n },\n legend: {\n show: false,\n data: (this.config?.series ?? []).map((series) => series.name),\n selected,\n selectedMode,\n },\n\n grid: this.config?.isTrendChart\n ? { left: 0, right: 0, top: 0, bottom: 0 }\n : {\n left: this.config?.gridLeft ?? 0,\n right: this.config?.gridRight ?? 0,\n bottom: this.config?.gridBottom ?? 0,\n top:\n this.config?.gridTop ?? this.chartService.calculateGridTopLineBar(this.config) ?? 0,\n },\n\n xAxis: {\n show: !this.config?.isTrendChart,\n type: 'category',\n // boundaryGap: false,\n data: this.config?.xAxisData,\n nameLocation: 'center',\n\n ...(this.config?.xAxis || {}),\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n\n axisLine: {\n show: this.config?.showXAxisLine ?? true,\n ...(this.config?.xAxis?.axisLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.xAxis?.axisLine?.lineStyle || {}),\n },\n },\n axisTick: {\n show: false,\n ...(this.config?.xAxis?.axisTick || {}),\n },\n axisLabel: {\n show: this.config?.showXAxisLabel ?? true,\n color: '#434A51',\n fontSize: 12,\n ...(!this.config?.xAxis?.axisLabel?.rotate && {\n alignMinLabel: 'left',\n alignMaxLabel: 'right',\n }),\n ...(this.config?.xAxis?.axisLabel || {}),\n },\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n overflow: 'truncate',\n width: this.resolveAxisNameWidth('x'),\n ...(this.config?.xAxis?.nameTextStyle || {}),\n },\n splitLine: {\n show: this.config?.showXAxisSplitLine ?? true,\n ...(this.config?.xAxis?.splitLine || {}),\n lineStyle: {\n type: 'dashed',\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.xAxis?.splitLine?.lineStyle || {}),\n },\n },\n },\n\n yAxis: [\n {\n show: !this.config?.isTrendChart,\n type: 'value',\n boundaryGap: this.config?.isTrendChart ? [0.2] : undefined,\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameLocation: 'center',\n\n ...(this.config?.yAxis || {}),\n axisLine: {\n show: this.config?.showYAxisLine ?? true,\n ...(this.config?.yAxis?.axisLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.yAxis?.axisLine?.lineStyle || {}),\n },\n },\n axisTick: {\n show: false,\n ...(this.config?.yAxis?.axisTick || {}),\n },\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n overflow: 'truncate',\n width: this.resolveAxisNameWidth('y'),\n ...(this.config?.yAxis?.nameTextStyle || {}),\n },\n splitLine: {\n show: this.config?.showYAxisSplitLine ?? true,\n ...(this.config?.yAxis?.splitLine || {}),\n lineStyle: {\n type: 'dashed',\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.yAxis?.splitLine?.lineStyle || {}),\n },\n },\n axisLabel: {\n show: this.config?.showYAxisLabel ?? true,\n color: '#434A51',\n fontSize: 12,\n formatter: (value: number) => {\n if (value === 0) {\n return '0';\n }\n\n const absValue = Math.abs(value);\n\n // Quadrillions\n if (absValue >= 1_000_000_000_000_000) {\n return `${+(value / 1_000_000_000_000_000).toFixed(1)}Q`;\n }\n\n // Trillions\n if (absValue >= 1_000_000_000_000) {\n return `${+(value / 1_000_000_000_000).toFixed(1)}T`;\n }\n\n // Billions\n if (absValue >= 1_000_000_000) {\n return `${+(value / 1_000_000_000).toFixed(1)}B`;\n }\n\n // Millions\n if (absValue >= 1_000_000) {\n return `${+(value / 1_000_000).toFixed(1)}M`;\n }\n\n // Thousands\n if (absValue >= 1_000) {\n return `${+(value / 1_000).toFixed(1)}K`;\n }\n\n // Decimal handling\n if (Number.isInteger(value)) {\n return value.toString();\n }\n\n return value;\n },\n ...(this.config?.yAxis?.axisLabel || {}),\n },\n },\n\n ...(this.config?.secondaryYAxis\n ? [\n {\n show: !this.config?.isTrendChart,\n type: 'value',\n boundaryGap: this.config?.isTrendChart ? [0.2] : undefined,\n name: this.resolveAxisName(this.config?.secondaryYAxisName, 'secondaryY'),\n nameLocation: 'center',\n\n ...(this.config?.secondaryYAxisConfig || {}),\n\n axisLine: {\n show: this.config?.showYAxisLine ?? true,\n ...(this.config?.secondaryYAxisConfig?.axisLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.secondaryYAxisConfig?.axisLine?.lineStyle || {}),\n },\n },\n axisTick: {\n show: false,\n ...(this.config?.secondaryYAxisConfig?.axisTick || {}),\n },\n axisLabel: {\n show: this.config?.showSecondaryYAxisLabel ?? true,\n color: '#434A51',\n fontSize: 12,\n formatter: (value: number) => {\n if (value === 0) {\n return '0';\n }\n\n const absValue = Math.abs(value);\n\n // Quadrillions\n if (absValue >= 1_000_000_000_000_000) {\n return `${+(value / 1_000_000_000_000_000).toFixed(1)}Q`;\n }\n\n // Trillions\n if (absValue >= 1_000_000_000_000) {\n return `${+(value / 1_000_000_000_000).toFixed(1)}T`;\n }\n\n // Billions\n if (absValue >= 1_000_000_000) {\n return `${+(value / 1_000_000_000).toFixed(1)}B`;\n }\n\n // Millions\n if (absValue >= 1_000_000) {\n return `${+(value / 1_000_000).toFixed(1)}M`;\n }\n\n // Thousands\n if (absValue >= 1_000) {\n return `${+(value / 1_000).toFixed(1)}K`;\n }\n\n // Decimal handling\n if (Number.isInteger(value)) {\n return value.toString();\n }\n\n return value;\n },\n ...(this.config?.secondaryYAxisConfig?.axisLabel || {}),\n },\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n overflow: 'truncate',\n width: this.resolveAxisNameWidth('secondaryY'),\n ...(this.config?.secondaryYAxisConfig?.nameTextStyle || {}),\n },\n splitLine: {\n show: this.config?.showSecondaryYAxisSplitLine ?? true,\n ...(this.config?.secondaryYAxisConfig?.splitLine || {}),\n lineStyle: {\n type: 'dashed',\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.secondaryYAxisConfig?.splitLine?.lineStyle || {}),\n },\n },\n },\n ]\n : []),\n ],\n\n series: (this.config?.series || [])?.map((s, i) => {\n const lineColor =\n s['color'] ||\n s['itemStyle']?.color ||\n s['lineStyle']?.color ||\n s.areaColor ||\n this.config.colors?.[i % (this.config.colors || []).length] ||\n '#3b82f6';\n\n return {\n type: 'line',\n smooth: s.smooth ?? true,\n areaStyle: s.area\n ? {\n color: {\n type: 'linear',\n x: 0,\n y: 0,\n x2: 0,\n y2: 1,\n colorStops: [\n {\n offset: 0,\n color: lineColor,\n },\n {\n offset: 1,\n color: this.chartService.hexToRgba(lineColor, 0),\n },\n ],\n },\n opacity: s.areaOpacity ?? 0.4,\n }\n : undefined,\n ...s,\n symbol: this.resolveSeriesSymbol(s['symbol']),\n label: {\n show: this.config?.showLabel ?? false,\n position: this.config?.labelPosition ?? 'top',\n ...(s['label'] ? s['label'] : {}),\n },\n itemStyle: {\n borderRadius: this.config?.borderRadius ?? 0,\n ...(s['itemStyle'] ? s['itemStyle'] : {}),\n },\n };\n }),\n toolbox: {\n right: -1000,\n feature: {\n dataZoom: {},\n },\n },\n dataZoom: [\n {\n type: 'inside',\n disabled: true,\n },\n ],\n };\n }\n\n private resolveSeriesSymbol(symbol?: string): string | undefined {\n switch (symbol) {\n case 'plus':\n return 'path://M-2,-8 L2,-8 L2,-2 L8,-2 L8,2 L2,2 L2,8 L-2,8 L-2,2 L-8,2 L-8,-2 L-2,-2 Z';\n case 'x':\n return 'path://M-6,-4 L-4,-6 L0,-2 L4,-6 L6,-4 L2,0 L6,4 L4,6 L0,2 L-4,6 L-6,4 L-2,0 Z';\n case 'thickLine':\n return 'path://M -8 -2 L 8 -2 L 8 2 L -8 2 Z';\n default:\n return symbol;\n }\n }\n\n private resolveAxisNameTextStyle(axis: 'x' | 'y' | 'secondaryY'): Record<string, any> {\n const customStyle =\n axis === 'x'\n ? this.config?.xAxis?.nameTextStyle\n : axis === 'secondaryY'\n ? this.config?.secondaryYAxisConfig?.nameTextStyle\n : this.config?.yAxis?.nameTextStyle;\n\n return {\n width: this.resolveAxisNameWidth(axis),\n ...(customStyle || {}),\n };\n }\n\n private resolveAxisName(name: string | undefined, axis: 'x' | 'y' | 'secondaryY'): string {\n if (!name) return '';\n\n const maxWidth = this.resolveAxisNameWidth(axis);\n const font = this.resolveAxisNameFont(axis);\n if (echarts.format.getTextRect(name, font).width <= maxWidth) return name;\n\n const ellipsis = '...';\n let low = 0;\n let high = name.length;\n let truncated = ellipsis;\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const nextText = `${name.slice(0, mid)}${ellipsis}`;\n const nextWidth = echarts.format.getTextRect(nextText, font).width;\n\n if (nextWidth <= maxWidth) {\n truncated = nextText;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n return truncated;\n }\n\n private resolveAxisNameFont(axis: 'x' | 'y' | 'secondaryY'): string {\n const style =\n axis === 'x'\n ? this.config?.xAxis?.nameTextStyle\n : axis === 'secondaryY'\n ? this.config?.secondaryYAxisConfig?.nameTextStyle\n : this.config?.yAxis?.nameTextStyle;\n const fontSize = style?.fontSize ?? 14;\n const fontWeight = style?.fontWeight ?? 400;\n const fontFamily = style?.fontFamily ?? 'sans-serif';\n\n return `${fontWeight} ${fontSize}px ${fontFamily}`;\n }\n\n private resolveAxisNameWidth(axis: 'x' | 'y' | 'secondaryY'): number {\n const chartRect = this.chartContainer?.nativeElement.getBoundingClientRect();\n const chartWidth = chartRect?.width || this.chartInstance?.getWidth?.() || 360;\n const chartHeight = chartRect?.height || this.chartInstance?.getHeight?.() || 240;\n\n if (axis === 'x') {\n return Math.max(chartWidth - 240, 80);\n }\n\n return Math.max(chartHeight - 72, 80);\n }\n\n private resolveAxisNameStyleSignature(): string {\n return JSON.stringify({\n xAxisName: this.config?.xAxisName,\n yAxisName: this.config?.yAxisName,\n secondaryYAxisName: this.config?.secondaryYAxisName,\n xAxisNameTextStyle: this.config?.xAxis?.nameTextStyle,\n yAxisNameTextStyle: this.config?.yAxis?.nameTextStyle,\n secondaryYAxisNameTextStyle: this.config?.secondaryYAxisConfig?.nameTextStyle,\n });\n }\n\n enableDataZoom(active: boolean) {\n if (!this.chartInstance) return;\n\n this.chartInstance.dispatchAction({\n type: 'takeGlobalCursor',\n key: 'dataZoomSelect',\n dataZoomSelectActive: active,\n });\n }\n\n resetZoom() {\n if (!this.chartInstance) return;\n this.enableDataZoom(false);\n this.chartInstance.dispatchAction({\n type: 'dataZoom',\n start: 0,\n end: 100,\n });\n }\n\n /* ------------------ INIT ------------------ */\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n queueMicrotask(() => this.refreshAxisNameSpace());\n this.bindEvents();\n }\n\n @HostListener('window:resize')\n refreshAxisNameSpace(): void {\n if (!this.chartInstance) return;\n\n this.chartInstance.setOption({\n xAxis: {\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n nameTextStyle: this.resolveAxisNameTextStyle('x'),\n },\n yAxis: [\n {\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameTextStyle: this.resolveAxisNameTextStyle('y'),\n },\n ...(this.config?.secondaryYAxis\n ? [\n {\n name: this.resolveAxisName(this.config?.secondaryYAxisName, 'secondaryY'),\n nameTextStyle: this.resolveAxisNameTextStyle('secondaryY'),\n },\n ]\n : []),\n ],\n });\n }\n\n /* ------------------ EVENTS ------------------ */\n private bindEvents() {\n if (!this.chartInstance) return;\n this.chartInstance.off();\n\n // Existing chart events\n this.events.forEach((eventName) => {\n if (eventName === 'contextmenu') {\n this.chartInstance.on('contextmenu', (params: any) => {\n const event = params?.event?.event;\n if (event) {\n event.preventDefault();\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n };\n\n this.openCard = true;\n\n this.cdr.markForCheck();\n }\n this.chartEvent.emit({\n type: 'contextmenu',\n data: params,\n });\n });\n const zr = this.chartInstance.getZr();\n zr.on('contextmenu', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n\n nativeEvent.preventDefault();\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: nativeEvent.clientX - rect.left,\n y: nativeEvent.clientY - rect.top,\n };\n\n this.openCard = true;\n this.cdr.markForCheck();\n\n this.chartEvent.emit({\n type: 'contextmenu',\n data: { ...zrEvent, isZrEvent: true },\n });\n }\n });\n } else if (eventName === 'click') {\n this.chartInstance.on('click', (params: any) => {\n this.chartEvent.emit({\n type: 'click',\n data: params,\n });\n });\n const zr = this.chartInstance.getZr();\n zr.on('click', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n nativeEvent.preventDefault();\n this.chartEvent.emit({\n type: 'blur',\n data: { ...zrEvent, type: 'blur' },\n });\n }\n });\n } else {\n this.chartInstance.on(eventName, (params: any) => {\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n }\n });\n }\n\n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n this.closeCard();\n }\n\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n\n /* ------------------ DESTROY ------------------ */\n\n ngOnDestroy(): void {\n if (this.chartInstance) {\n this.chartInstance.off();\n this.chartInstance.dispose();\n }\n }\n\n onLegendEvent(event: ChartLegendEvent): void {\n this.legendEvent.emit(event);\n this.chartEvent.emit({\n type: `legend:${event.type}`,\n data: event,\n });\n }\n\n private readLegendSelected(): Record<string, boolean> {\n const option = this.chartInstance?.getOption?.() as\n | { legend?: Array<{ selected?: Record<string, boolean> }> }\n | undefined;\n\n return { ...(option?.legend?.[0]?.selected ?? {}) };\n }\n}\n","<div\n class=\"line-chart-shell\"\n [class.line-chart-shell--legend-left]=\"config.customLegend?.position === 'left'\"\n [class.line-chart-shell--legend-right]=\"config.customLegend?.position === 'right'\"\n [class.line-chart-shell--legend-bottom]=\"config.customLegend?.position === 'bottom'\"\n>\n @if (\n !config.hideLegend &&\n config.customLegend?.position !== 'bottom' &&\n config.customLegend?.position !== 'right'\n ) {\n <lib-chart-legend\n class=\"line-chart-shell__legend\"\n [class.line-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--line-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n\n <div\n #chartContainer\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n (chartInit)=\"onChartInit($event)\"\n class=\"chart-container\"\n ></div>\n\n @if (\n !config.hideLegend &&\n (config.customLegend?.position === 'bottom' || config.customLegend?.position === 'right')\n ) {\n <lib-chart-legend\n class=\"line-chart-shell__legend\"\n [class.line-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--line-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n</div>\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"contextMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n SimpleChanges,\n HostListener,\n ChangeDetectorRef,\n ChangeDetectionStrategy,\n ElementRef,\n ViewChild,\n} from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\n\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport { BarChart as EBarChart } from 'echarts/charts';\n\nimport {\n TitleComponent,\n TooltipComponent,\n GridComponent,\n LegendComponent,\n DatasetComponent,\n DataZoomComponent,\n ToolboxComponent,\n DataZoomInsideComponent,\n MarkAreaComponent,\n MarkLineComponent,\n} from 'echarts/components';\n\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { RightClickCard } from '../right-click-card';\nimport { ChartLegendComponent } from '../chart-legend';\nimport type {\n ChartLegendAlign,\n ChartLegendConfig,\n ChartLegendEvent,\n ChartLegendPosition,\n} from '../chart-legend';\nimport { BarChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\n\necharts.use([\n EBarChart,\n TitleComponent,\n TooltipComponent,\n GridComponent,\n LegendComponent,\n DatasetComponent,\n CanvasRenderer,\n DataZoomComponent,\n ToolboxComponent,\n DataZoomInsideComponent,\n DataZoomComponent,\n MarkAreaComponent,\n MarkLineComponent,\n]);\n\n@Component({\n selector: 'lib-bar-chart',\n imports: [NgxEchartsDirective, RightClickCard, ChartLegendComponent],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './bar-chart.html',\n styleUrl: './bar-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BarChart {\n @Input() config: BarChartConfig = { xAxisData: [], series: [] };\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() contextMenuOptions: any[] = [];\n @Input() showContextMenu: boolean = false;\n\n @Output() contextMenuClick = new EventEmitter<any>();\n\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n @Output() legendEvent = new EventEmitter<ChartLegendEvent>();\n @ViewChild('chartContainer') chartContainer?: ElementRef<HTMLElement>;\n chartOption!: EChartsCoreOption;\n chartInstance!: ECharts;\n cardPosition = { x: 0, y: 0 };\n openCard = false;\n\n constructor(\n private chartService: Charts,\n private cdr: ChangeDetectorRef,\n ) {}\n get deafultColors() {\n return this.chartService.defaultColors;\n }\n /* ------------------ CONFIG CHANGE ------------------ */\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n\n this.buildOption();\n }\n\n private previousConfig: any = {\n xAxisName: '',\n yAxisName: '',\n secondaryYAxisName: '',\n axisNameStyleSignature: '',\n };\n ngDoCheck(): void {\n if (!this.chartInstance || !this.config) return;\n\n const updateOption: any = {};\n const axisNameStyleSignature = this.resolveAxisNameStyleSignature();\n\n if (this.previousConfig.xAxisName !== this.config.xAxisName) {\n this.previousConfig.xAxisName = this.config.xAxisName;\n\n updateOption.xAxis = {\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n nameTextStyle: this.resolveAxisNameTextStyle('x'),\n };\n }\n\n if (this.previousConfig.yAxisName !== this.config.yAxisName) {\n this.previousConfig.yAxisName = this.config.yAxisName;\n\n updateOption.yAxis = [\n {\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameTextStyle: this.resolveAxisNameTextStyle('y'),\n },\n ];\n }\n\n if (this.previousConfig.secondaryYAxisName !== this.config.secondaryYAxisName) {\n this.previousConfig.secondaryYAxisName = this.config.secondaryYAxisName;\n\n updateOption.yAxis = [\n {\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameTextStyle: this.resolveAxisNameTextStyle('y'),\n },\n {\n name: this.resolveAxisName(this.config?.secondaryYAxisName, 'secondaryY'),\n nameTextStyle: this.resolveAxisNameTextStyle('secondaryY'),\n },\n ];\n }\n\n if (Object.keys(updateOption).length) {\n this.chartInstance.setOption(updateOption);\n }\n\n if (this.previousConfig.axisNameStyleSignature !== axisNameStyleSignature) {\n this.previousConfig.axisNameStyleSignature = axisNameStyleSignature;\n this.refreshAxisNameSpace();\n }\n }\n\n moveLeft() {\n this.moveZoom(-10);\n }\n\n moveRight() {\n this.moveZoom(10);\n }\n\n moveZoom(step: number) {\n const option: any = this.chartInstance.getOption();\n const zoom = option.dataZoom?.[0];\n if (!zoom) return;\n let start = zoom.start ?? 0;\n let end = zoom.end ?? 100;\n\n const windowSize = end - start;\n if ((step < 0 && start <= 0) || (step > 0 && end >= 100)) {\n return;\n }\n\n let newStart = start + step;\n let newEnd = end + step;\n\n if (newStart < 0) {\n newStart = 0;\n newEnd = windowSize;\n }\n\n if (newEnd > 100) {\n newEnd = 100;\n newStart = 100 - windowSize;\n }\n\n this.chartInstance.dispatchAction({\n type: 'dataZoom',\n start: newStart,\n end: newEnd,\n });\n }\n\n /* ------------------ OPTION BUILDER ------------------ */\n\n private buildOption() {\n const selected = this.readLegendSelected();\n const selectedMode = this.config?.customLegend?.selectionMode === 'exclusive' ? 'single' : true;\n\n // Common chart option\n this.chartOption = {\n backgroundColor: 'transparent',\n color: this.config?.colors || this.chartService.defaultColors,\n title: {\n show: this.config?.showTitle ?? !!this.config?.title,\n text: this.config?.title,\n left: this.config?.titlePosition || 'center',\n },\n\n tooltip: {\n show: this.config?.showTooltip,\n trigger: 'axis',\n backgroundColor: 'transparent', // remove default box\n borderWidth: 0,\n padding: 0,\n confine: true,\n formatter: (params: any) =>\n this.config.tooltipFormatter\n ? this.config.tooltipFormatter(params)\n : this.chartService.barLineTooltipFormatter(params, 'bar', this.config),\n },\n legend: {\n show: false,\n data: (this.config?.series ?? []).map((series) => series.name),\n selected,\n selectedMode,\n },\n grid: {\n left: this.config.gridLeft ?? 0,\n right: this.config.gridRight ?? 0,\n bottom: this.config.gridBottom ?? 0,\n top: this.config.gridTop ?? this.chartService.calculateGridTopLineBar(this.config) ?? 0,\n },\n\n xAxis: {\n type: 'category',\n data: this.config?.xAxisData,\n nameLocation: 'center',\n\n ...(this.config?.xAxis || {}),\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n axisLine: {\n show: this.config?.showXAxisLine ?? true,\n ...(this.config?.xAxis?.axisLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.xAxis?.axisLine?.lineStyle || {}),\n },\n },\n axisTick: {\n show: false,\n ...(this.config?.xAxis?.axisTick || {}),\n },\n axisLabel: {\n show: this.config?.showXAxisLabel ?? true,\n color: '#434A51',\n fontSize: 12,\n alignMinLabel: 'left',\n alignMaxLabel: 'right',\n ...(this.config?.xAxis?.axisLabel || {}),\n },\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n overflow: 'truncate',\n width: this.resolveAxisNameWidth('x'),\n ...(this.config?.xAxis?.nameTextStyle || {}),\n },\n splitLine: {\n show: this.config?.showXAxisSplitLine ?? true,\n ...(this.config?.xAxis?.splitLine || {}),\n lineStyle: {\n type: 'dashed',\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.xAxis?.splitLine?.lineStyle || {}),\n },\n },\n },\n\n yAxis: [\n {\n type: 'value',\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameLocation: 'center',\n\n ...(this.config?.yAxis || {}),\n axisLine: {\n show: this.config?.showYAxisLine ?? true,\n ...(this.config?.yAxis?.axisLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.yAxis?.lineStyle || {}),\n },\n },\n axisTick: {\n show: false,\n ...(this.config?.yAxis?.axisTick || {}),\n },\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n overflow: 'truncate',\n width: this.resolveAxisNameWidth('y'),\n ...(this.config?.yAxis?.nameTextStyle || {}),\n },\n axisLabel: {\n show: this.config?.showYAxisLabel ?? true,\n color: '#434A51',\n fontSize: 12,\n formatter: (value: number) => {\n if (value === 0) {\n return '0';\n }\n\n const absValue = Math.abs(value);\n\n // Quadrillions\n if (absValue >= 1_000_000_000_000_000) {\n return `${+(value / 1_000_000_000_000_000).toFixed(1)}Q`;\n }\n\n // Trillions\n if (absValue >= 1_000_000_000_000) {\n return `${+(value / 1_000_000_000_000).toFixed(1)}T`;\n }\n\n // Billions\n if (absValue >= 1_000_000_000) {\n return `${+(value / 1_000_000_000).toFixed(1)}B`;\n }\n\n // Millions\n if (absValue >= 1_000_000) {\n return `${+(value / 1_000_000).toFixed(1)}M`;\n }\n\n // Thousands\n if (absValue >= 1_000) {\n return `${+(value / 1_000).toFixed(1)}K`;\n }\n\n // Decimal handling\n if (Number.isInteger(value)) {\n return value.toString();\n }\n\n return value;\n },\n ...(this.config?.yAxis?.axisLabel || {}),\n },\n splitLine: {\n show: this.config?.showYAxisSplitLine ?? true,\n ...(this.config?.yAxis?.splitLine || {}),\n lineStyle: {\n type: 'dashed',\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.yAxis?.splitLine?.lineStyle || {}),\n },\n },\n },\n ...(this.config?.secondaryYAxis\n ? [\n {\n type: 'value',\n name: this.resolveAxisName(this.config?.secondaryYAxisName, 'secondaryY'),\n nameLocation: 'center',\n\n ...(this.config?.secondaryYAxisConfig || {}),\n\n axisLine: {\n show: this.config?.showYAxisLine ?? true,\n ...(this.config?.secondaryYAxisConfig?.axisLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.secondaryYAxisConfig?.axisLine?.lineStyle || {}),\n },\n },\n axisTick: {\n show: false,\n ...(this.config?.secondaryYAxisConfig?.axisTick || {}),\n },\n axisLabel: {\n show: this.config?.showSecondaryYAxisLabel ?? true,\n color: '#434A51',\n fontSize: 12,\n formatter: (value: number) => {\n if (value === 0) {\n return '0';\n }\n\n const absValue = Math.abs(value);\n\n // Quadrillions\n if (absValue >= 1_000_000_000_000_000) {\n return `${+(value / 1_000_000_000_000_000).toFixed(1)}Q`;\n }\n\n // Trillions\n if (absValue >= 1_000_000_000_000) {\n return `${+(value / 1_000_000_000_000).toFixed(1)}T`;\n }\n\n // Billions\n if (absValue >= 1_000_000_000) {\n return `${+(value / 1_000_000_000).toFixed(1)}B`;\n }\n\n // Millions\n if (absValue >= 1_000_000) {\n return `${+(value / 1_000_000).toFixed(1)}M`;\n }\n\n // Thousands\n if (absValue >= 1_000) {\n return `${+(value / 1_000).toFixed(1)}K`;\n }\n\n // Decimal handling\n if (Number.isInteger(value)) {\n return value.toString();\n }\n\n return value;\n },\n ...(this.config?.secondaryYAxisConfig?.axisLabel || {}),\n },\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n overflow: 'truncate',\n width: this.resolveAxisNameWidth('secondaryY'),\n ...(this.config?.secondaryYAxisConfig?.nameTextStyle || {}),\n },\n splitLine: {\n show: this.config?.showSecondaryYAxisSplitLine ?? true,\n ...(this.config?.secondaryYAxisConfig?.splitLine || {}),\n lineStyle: {\n type: 'dashed',\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.secondaryYAxisConfig?.splitLine?.lineStyle || {}),\n },\n },\n },\n ]\n : []),\n ],\n\n series: (this.config?.series || [])?.map((s) => {\n return {\n type: 'bar',\n stack: this.config?.stacked ? 'total' : undefined,\n emphasis: {\n scale: false,\n },\n ...(this.config?.barWidth && { barWidth: this.config?.barWidth }),\n ...(this.config?.barMaxWidth && { barMaxWidth: this.config?.barMaxWidth }),\n ...s,\n label: {\n show: this.config?.showLabel ?? false,\n position: this.config?.labelPosition ?? 'top',\n ...(s['label'] ? s['label'] : {}),\n },\n itemStyle: {\n borderRadius: this.config?.borderRadius ?? 0,\n ...(s['itemStyle'] ? s['itemStyle'] : {}),\n },\n };\n }),\n\n ...(this.config?.showZoomSlider\n ? {\n dataZoom: [\n {\n type: 'slider',\n show: true,\n xAxisIndex: 0,\n bottom: 0,\n height: 8,\n ...(this.config.zoomStart && { start: this.config.zoomStart }),\n ...(this.config.zoomEnd && { end: this.config.zoomEnd }),\n // UI styling\n backgroundColor: '#F0F0F0',\n fillerColor: '#81858A',\n borderColor: 'transparent',\n borderRadius: 100,\n handleSize: 0,\n brushSelect: false,\n handleStyle: {\n color: '#F0F0F0',\n },\n textStyle: {\n color: 'transparent',\n },\n dataBackground: {\n lineStyle: {\n color: 'transparent',\n },\n areaStyle: {\n color: 'transparent',\n },\n },\n selectedDataBackground: {\n lineStyle: {\n color: 'transparent',\n },\n areaStyle: {\n color: 'transparent',\n },\n },\n\n moveHandleSize: 0,\n },\n {\n type: 'inside',\n xAxisIndex: 0,\n },\n ],\n }\n : {\n toolbox: {\n right: -1000,\n feature: {\n dataZoom: {},\n },\n },\n dataZoom: [\n {\n type: 'inside',\n disabled: true,\n },\n ],\n }),\n };\n }\n\n enableDataZoom(active: boolean) {\n if (!this.chartInstance) return;\n\n this.chartInstance.dispatchAction({\n type: 'takeGlobalCursor',\n key: 'dataZoomSelect',\n dataZoomSelectActive: active,\n });\n }\n\n resetZoom() {\n if (!this.chartInstance) return;\n this.enableDataZoom(false);\n this.chartInstance.dispatchAction({\n type: 'dataZoom',\n start: 0,\n end: 100,\n });\n }\n\n private resolveAxisNameTextStyle(axis: 'x' | 'y' | 'secondaryY'): Record<string, any> {\n const customStyle =\n axis === 'x'\n ? this.config?.xAxis?.nameTextStyle\n : axis === 'secondaryY'\n ? this.config?.secondaryYAxisConfig?.nameTextStyle\n : this.config?.yAxis?.nameTextStyle;\n\n return {\n width: this.resolveAxisNameWidth(axis),\n ...(customStyle || {}),\n };\n }\n\n private resolveAxisName(name: string | undefined, axis: 'x' | 'y' | 'secondaryY'): string {\n if (!name) return '';\n\n const maxWidth = this.resolveAxisNameWidth(axis);\n const font = this.resolveAxisNameFont(axis);\n if (echarts.format.getTextRect(name, font).width <= maxWidth) return name;\n\n const ellipsis = '...';\n let low = 0;\n let high = name.length;\n let truncated = ellipsis;\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const nextText = `${name.slice(0, mid)}${ellipsis}`;\n const nextWidth = echarts.format.getTextRect(nextText, font).width;\n\n if (nextWidth <= maxWidth) {\n truncated = nextText;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n return truncated;\n }\n\n private resolveAxisNameFont(axis: 'x' | 'y' | 'secondaryY'): string {\n const style =\n axis === 'x'\n ? this.config?.xAxis?.nameTextStyle\n : axis === 'secondaryY'\n ? this.config?.secondaryYAxisConfig?.nameTextStyle\n : this.config?.yAxis?.nameTextStyle;\n const fontSize = style?.fontSize ?? 14;\n const fontWeight = style?.fontWeight ?? 400;\n const fontFamily = style?.fontFamily ?? 'sans-serif';\n\n return `${fontWeight} ${fontSize}px ${fontFamily}`;\n }\n\n private resolveAxisNameWidth(axis: 'x' | 'y' | 'secondaryY'): number {\n const chartRect = this.chartContainer?.nativeElement.getBoundingClientRect();\n const chartWidth = chartRect?.width || this.chartInstance?.getWidth?.() || 360;\n const chartHeight = chartRect?.height || this.chartInstance?.getHeight?.() || 240;\n\n if (axis === 'x') {\n return Math.max(chartWidth - 240, 80);\n }\n\n return Math.max(chartHeight - 72, 80);\n }\n\n private resolveAxisNameStyleSignature(): string {\n return JSON.stringify({\n xAxisName: this.config?.xAxisName,\n yAxisName: this.config?.yAxisName,\n secondaryYAxisName: this.config?.secondaryYAxisName,\n xAxisNameTextStyle: this.config?.xAxis?.nameTextStyle,\n yAxisNameTextStyle: this.config?.yAxis?.nameTextStyle,\n secondaryYAxisNameTextStyle: this.config?.secondaryYAxisConfig?.nameTextStyle,\n });\n }\n\n get hasSideLegendWidth(): boolean {\n return this.isSideLegend && !!this.config.customLegend?.maxWidth;\n }\n\n get legendShellMaxWidth(): string | null {\n return this.isSideLegend ? (this.config.customLegend?.maxWidth ?? null) : null;\n }\n\n private get isSideLegend(): boolean {\n return (\n this.config.customLegend?.position === 'left' ||\n this.config.customLegend?.position === 'right'\n );\n }\n\n onLegendEvent(event: ChartLegendEvent): void {\n this.legendEvent.emit(event);\n this.chartEvent.emit({\n type: `legend:${event.type}`,\n data: event,\n });\n }\n\n private readLegendSelected(): Record<string, boolean> {\n const option = this.chartInstance?.getOption?.() as\n | { legend?: Array<{ selected?: Record<string, boolean> }> }\n | undefined;\n\n return { ...(option?.legend?.[0]?.selected ?? {}) };\n }\n\n /* ------------------ INIT ------------------ */\n\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n queueMicrotask(() => this.refreshAxisNameSpace());\n this.bindEvents();\n }\n\n @HostListener('window:resize')\n refreshAxisNameSpace(): void {\n if (!this.chartInstance) return;\n\n this.chartInstance.setOption({\n xAxis: {\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n nameTextStyle: this.resolveAxisNameTextStyle('x'),\n },\n yAxis: [\n {\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameTextStyle: this.resolveAxisNameTextStyle('y'),\n },\n ...(this.config?.secondaryYAxis\n ? [\n {\n name: this.resolveAxisName(this.config?.secondaryYAxisName, 'secondaryY'),\n nameTextStyle: this.resolveAxisNameTextStyle('secondaryY'),\n },\n ]\n : []),\n ],\n });\n }\n\n /* ------------------ EVENTS ------------------ */\n private bindEvents() {\n if (!this.chartInstance) return;\n this.chartInstance.off();\n\n // Existing chart events\n this.events.forEach((eventName) => {\n if (eventName === 'contextmenu') {\n this.chartInstance.on('contextmenu', (params: any) => {\n const event = params?.event?.event;\n if (event) {\n event.preventDefault();\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n };\n\n this.openCard = true;\n\n this.cdr.markForCheck();\n }\n this.chartEvent.emit({\n type: 'contextmenu',\n data: params,\n });\n });\n const zr = this.chartInstance.getZr();\n zr.on('contextmenu', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n\n nativeEvent.preventDefault();\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: nativeEvent.clientX - rect.left,\n y: nativeEvent.clientY - rect.top,\n };\n\n this.openCard = true;\n this.cdr.markForCheck();\n\n this.chartEvent.emit({\n type: 'contextmenu',\n data: { ...zrEvent, isZrEvent: true },\n });\n }\n });\n } else if (eventName === 'click') {\n this.chartInstance.on('click', (params: any) => {\n this.chartEvent.emit({\n type: 'click',\n data: params,\n });\n });\n const zr = this.chartInstance.getZr();\n zr.on('click', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n nativeEvent.preventDefault();\n this.chartEvent.emit({\n type: 'blur',\n data: { ...zrEvent, type: 'blur' },\n });\n }\n });\n } else {\n this.chartInstance.on(eventName, (params: any) => {\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n }\n });\n }\n\n /* ------------------ CONTEXT MENU ------------------ */\n\n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n this.closeCard();\n }\n\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n\n /* ------------------ DESTROY ------------------ */\n\n ngOnDestroy(): void {\n if (this.chartInstance) {\n this.chartInstance.off();\n this.chartInstance.dispose();\n }\n }\n}\n","<div\n class=\"bar-chart-shell\"\n [class.bar-chart-shell--legend-left]=\"config.customLegend?.position === 'left'\"\n [class.bar-chart-shell--legend-right]=\"config.customLegend?.position === 'right'\"\n [class.bar-chart-shell--legend-bottom]=\"config.customLegend?.position === 'bottom'\"\n>\n @if (\n !config.hideLegend &&\n config.customLegend?.position !== 'bottom' &&\n config.customLegend?.position !== 'right'\n ) {\n <lib-chart-legend\n class=\"bar-chart-shell__legend\"\n [class.line-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--line-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n\n <div\n #chartContainer\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n (chartInit)=\"onChartInit($event)\"\n class=\"chart-container\"\n ></div>\n\n @if (\n !config.hideLegend &&\n (config.customLegend?.position === 'bottom' || config.customLegend?.position === 'right')\n ) {\n <lib-chart-legend\n class=\"bar-chart-shell__legend\"\n [class.line-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--line-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n</div>\n@if (config.showZoomSlider) {\n <div class=\"zoom-controls\" [style]=\"config.zoomControlButtonStyle\">\n <button (click)=\"moveLeft()\"><img src=\"images/leftArrow.svg\" alt=\">\" /></button>\n <button (click)=\"moveRight()\"><img src=\"images/rightArrow.svg\" alt=\"<\" /></button>\n </div>\n}\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"contextMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n SimpleChanges,\n HostListener,\n ChangeDetectorRef,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport { PieChart as EPieChart } from 'echarts/charts';\nimport { TitleComponent, TooltipComponent, LegendComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { RightClickCard } from '../right-click-card';\nimport { PieChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\n\necharts.use([EPieChart, TitleComponent, TooltipComponent, LegendComponent, CanvasRenderer]);\n@Component({\n selector: 'lib-pie-chart',\n imports: [NgxEchartsDirective, RightClickCard],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './pie-chart.html',\n styleUrl: './pie-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PieChart {\n /* -------------------- Inputs -------------------- */\n\n @Input() config!: PieChartConfig;\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() cardOptions: any[] = [];\n\n /* -------------------- Outputs -------------------- */\n\n @Output() chartEvent = new EventEmitter<{ type: string; data: any }>();\n @Output() cardOptionClick = new EventEmitter<any>();\n\n /* -------------------- Local State -------------------- */\n\n chartOption!: EChartsCoreOption;\n private chartInstance!: ECharts;\n\n openCard = false;\n cardPosition = { x: 0, y: 0 };\n\n constructor(\n private chartService: Charts,\n private cdr: ChangeDetectorRef,\n ) {}\n\n /* -------------------- Lifecycle -------------------- */\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n // If theme changes → dispose instance\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n\n this.buildOption();\n }\n\n ngOnDestroy(): void {\n if (this.chartInstance) {\n this.chartInstance.off();\n this.chartInstance?.dispose();\n }\n }\n\n /* -------------------- Chart Init -------------------- */\n\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n this.bindEvents();\n }\n\n /* -------------------- Build Option -------------------- */\n\n private buildOption(): void {\n const total = this.config.data?.reduce((sum, item) => sum + item.value, 0);\n\n this.chartOption = {\n backgroundColor: this.config?.backgroundColor ?? 'transparent',\n\n title: {\n show: this.config.showTitle ?? !!this.config.title,\n text: this.config.title,\n left: this.config.titlePosition ?? 'center',\n },\n\n tooltip: {\n show: this.config.showTooltip ?? true,\n trigger: 'item',\n backgroundColor: 'transparent', // remove default box\n borderWidth: 0,\n padding: 0,\n confine: true,\n formatter: (params: any) =>\n this.config.tooltipFormatter\n ? this.config.tooltipFormatter(params, this.config)\n : this.chartService.pieTooltipFormatter(params, this.config),\n },\n\n legend: { show: false },\n\n graphic:\n this.chartInstance && !this.config.hideLegend\n ? this.chartService.buildGraphicLegend(total, this.config, this.chartInstance)\n : undefined,\n\n series: [\n {\n type: 'pie',\n top: this.config.top ?? 0,\n bottom: this.config.bottom ?? 0,\n radius: this.config.radius ?? '60%',\n center: this.config.center ?? ['50%', '50%'],\n data: this.config?.data || [],\n color: this.config.colors,\n\n label: {\n show: this.config.showLabel ?? false,\n position: this.config.labelPosition ?? 'outside',\n formatter: (params: any) => {\n const percent = ((params.value / total) * 100).toFixed(1);\n\n let text = params.name;\n if (this.config.showLabelValue) text += `\\n${params.value}`;\n if (this.config.showLabelPercentage) text += `\\n${percent}%`;\n\n return text;\n },\n },\n\n itemStyle: {\n borderRadius: this.config.borderRadius ?? 0,\n borderColor: this.config.borderColor ?? '#fff',\n borderWidth: this.config.borderWidth ?? 0,\n },\n\n emphasis:\n (this.config.enableHoverEffect ?? true)\n ? {\n itemStyle: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n },\n }\n : undefined,\n },\n ],\n };\n }\n\n /* -------------------- Events -------------------- */\n\n private bindEvents(): void {\n if (!this.chartInstance) return;\n\n this.chartInstance.off();\n\n this.events.forEach((eventName) => {\n this.chartInstance.on(eventName, (params: any) => {\n if (eventName === 'contextmenu') {\n params.event?.event?.preventDefault();\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: params.event.event.clientX - rect.left,\n y: params.event.event.clientY - rect.top,\n };\n\n this.openCard = true;\n this.cdr.markForCheck();\n }\n\n this.chartEvent.emit({ type: eventName, data: params });\n });\n });\n }\n\n onMenuClick(item: any) {\n this.cardOptionClick.emit(item);\n this.closeCard();\n }\n\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n}\n","<div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\"\n></div>\n\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"cardOptions\"\n [cardPosition]=\"cardPosition\"\n (contextMenuClick)=\"onMenuClick($event)\"\n >\n </lib-right-click-card>\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n SimpleChanges,\n HostListener,\n ChangeDetectorRef,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport { PieChart as EPieChart } from 'echarts/charts';\nimport { TitleComponent, TooltipComponent, LegendComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { RightClickCard } from '../right-click-card';\nimport { ChartLegendComponent } from '../chart-legend';\nimport type { ChartLegendEvent } from '../chart-legend';\nimport { DoughnutChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\n\necharts.use([EPieChart, TitleComponent, TooltipComponent, LegendComponent, CanvasRenderer]);\n\n@Component({\n selector: 'lib-doughnut-chart',\n imports: [NgxEchartsDirective, RightClickCard, ChartLegendComponent],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './doughnut-chart.html',\n styleUrl: './doughnut-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DoughnutChart {\n @Input() config!: DoughnutChartConfig;\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() contextMenuOptions: any[] = [];\n @Input() showContextMenu: boolean = false;\n\n @Output() contextMenuClick = new EventEmitter<any>();\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n @Output() legendEvent = new EventEmitter<ChartLegendEvent>();\n cardPosition = { x: 0, y: 0 };\n openCard: boolean = false;\n chartOption!: EChartsCoreOption;\n chartInstance!: ECharts;\n constructor(\n private chartService: Charts,\n private cdr: ChangeDetectorRef,\n ) {}\n\n get deafultColors() {\n return this.chartService.defaultColors;\n }\n /* ------------------ CONFIG CHANGE ------------------ */\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n // If theme changes → dispose instance\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n // Rebuild option when config changes\n this.buildOption();\n }\n // card open on right click\n /**\n * @description Determines whether menu click on\n * @author Shiva Kant\n * @param item\n */\n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n\n this.closeCard();\n }\n\n /**\n * @description Hosts listener\n * @author Shiva Kant\n */\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n /* ------------------ OPTION BUILDER ------------------ */\n /**\n * @description Builds option\n * @author Shiva Kant\n * @param config\n * @returns option\n */\n buildOption() {\n const selected = this.readLegendSelected();\n const selectedMode = this.config?.customLegend?.selectionMode === 'exclusive' ? 'single' : true;\n\n const total = this.config?.data?.reduce((sum, item) => sum + item.value, 0);\n const seriesData = (this.config?.data || [])?.map((d) => ({\n ...d,\n ...(!d.value && {\n itemStyle: {\n color: total === 0 ? '#d3d3d3' : undefined,\n borderWidth: total == 0 ? (this.config.borderWidth ?? 2) : 0,\n },\n }), // grey\n }));\n\n const innerRadius = this.config.innerRadius ?? '70%';\n const outerRadius = this.config.outerRadius ?? '90%';\n\n this.chartOption = {\n backgroundColor: this.config?.backgroundColor || 'transparent',\n color: this.config.colors ?? this.chartService.defaultColors,\n title: {\n show: this.config.showTitle ?? !!this.config.title,\n text: this.config.title,\n left: this.config.titlePosition || 'center',\n },\n tooltip: {\n show: this.config.showTooltip ?? true,\n trigger: 'item',\n backgroundColor: 'transparent', // remove default box\n borderWidth: 0,\n padding: 0,\n confine: true,\n formatter: (params: any) =>\n this.config.tooltipFormatter\n ? this.config.tooltipFormatter(params, this.config)\n : this.chartService.pieTooltipFormatter(params, this.config),\n ...this.config.tooltip,\n },\n\n legend: {\n show: false,\n data: (this.config?.data ?? []).map((series) => series.name),\n selected,\n selectedMode,\n },\n\n series: this.config.series?.length\n ? this.config.series.map((s) => {\n return { type: 'pie', ...s };\n })\n : [\n {\n type: 'pie',\n top: this.config.top ?? 0,\n bottom: this.config.bottom ?? 0,\n radius: [innerRadius, outerRadius],\n center: this.config.center ?? ['50%', '50%'],\n data: seriesData,\n\n // label: {\n // show: this.config.showLabel ?? false,\n // position: this.config.labelPosition ?? 'outside',\n // },\n\n label: {\n show: this.config?.centerLabel?.show ?? false,\n position: 'center',\n formatter: (value: any) => {\n if (this.config?.centerLabel?.formatter) {\n return this.config.centerLabel.formatter(value, total, this.config.data);\n }\n const title = this.config?.centerLabel?.title || '';\n const centerValue = this.config?.centerLabel?.value;\n return `{title|${title}}${\n centerValue !== undefined && centerValue !== null && centerValue !== ''\n ? `\\n{desc|${centerValue}}`\n : ''\n }`;\n },\n rich: {\n title: {\n fontSize: this.config?.centerLabel?.fontSizeTitle || 12,\n fontWeight: this.config?.centerLabel?.fontWeightTitle || 400,\n color: this.config?.centerLabel?.titleColor || '#111827',\n lineHeight: this.config?.centerLabel?.titleLineheight || 20,\n },\n\n desc: {\n fontSize: this.config?.centerLabel?.fontSizeValue || 12,\n fontWeight: this.config?.centerLabel?.fontWeightValue || 600,\n color: this.config?.centerLabel?.valueColor || '#6B7280',\n lineHeight: this.config?.centerLabel?.valueLineheight || 20,\n },\n },\n ...(this.config?.label || {}),\n },\n\n itemStyle: {\n borderRadius: this.config.borderRadius ?? 8,\n borderColor: this.config.borderColor || '#fff',\n borderWidth: this.config.borderWidth ?? 2,\n },\n emphasis: {\n scale: this.config.emphasisScale,\n },\n },\n ],\n };\n }\n\n get hasSideLegendWidth(): boolean {\n return this.isSideLegend && !!this.config.customLegend?.maxWidth;\n }\n\n get legendShellMaxWidth(): string | null {\n return this.isSideLegend ? (this.config.customLegend?.maxWidth ?? null) : null;\n }\n\n private get isSideLegend(): boolean {\n return (\n this.config.customLegend?.position === 'left' ||\n this.config.customLegend?.position === 'right'\n );\n }\n\n onLegendEvent(event: ChartLegendEvent): void {\n this.legendEvent.emit(event);\n this.chartEvent.emit({\n type: `legend:${event.type}`,\n data: event,\n });\n }\n\n private readLegendSelected(): Record<string, boolean> {\n const option = this.chartInstance?.getOption?.() as\n | { legend?: Array<{ selected?: Record<string, boolean> }> }\n | undefined;\n\n return { ...(option?.legend?.[0]?.selected ?? {}) };\n }\n\n /* ------------------ INIT ------------------ */\n /**\n * @description Determines whether chart init on\n * @author Shiva Kant\n * @param ec\n * @param [container]\n */\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n this.bindEvents();\n }\n @HostListener('window:resize')\n onResize() {\n this.chartInstance?.resize();\n }\n /* ------------------ EVENTS ------------------ */\n /**\n * @description Binds events\n * @author Shiva Kant\n * @returns\n */\n private bindEvents() {\n if (!this.chartInstance) return;\n this.chartInstance.off();\n\n // Existing chart events\n this.events.forEach((eventName) => {\n if (eventName === 'contextmenu') {\n this.chartInstance.on('contextmenu', (params: any) => {\n const event = params?.event?.event;\n if (event) {\n event.preventDefault();\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n };\n\n this.openCard = true;\n\n this.cdr.markForCheck();\n }\n this.chartEvent.emit({\n type: 'contextmenu',\n data: params,\n });\n });\n const zr = this.chartInstance.getZr();\n zr.on('contextmenu', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n\n nativeEvent.preventDefault();\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: nativeEvent.clientX - rect.left,\n y: nativeEvent.clientY - rect.top,\n };\n\n this.openCard = true;\n this.cdr.markForCheck();\n\n this.chartEvent.emit({\n type: 'contextmenu',\n data: { ...zrEvent, isZrEvent: true },\n });\n }\n });\n } else if (eventName === 'click') {\n this.chartInstance.on('click', (params: any) => {\n this.chartEvent.emit({\n type: 'click',\n data: params,\n });\n });\n const zr = this.chartInstance.getZr();\n zr.on('click', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n nativeEvent.preventDefault();\n this.chartEvent.emit({\n type: 'blur',\n data: { ...zrEvent, type: 'blur' },\n });\n }\n });\n } else {\n this.chartInstance.on(eventName, (params: any) => {\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n }\n });\n }\n\n /* ------------------ DESTROY ------------------ */\n ngOnDestroy(): void {\n if (this.chartInstance) {\n this.chartInstance.off();\n this.chartInstance?.dispose();\n }\n }\n}\n","<div\n class=\"doughnut-chart-shell\"\n [class.doughnut-chart-shell--legend-left]=\"config.customLegend?.position === 'left'\"\n [class.doughnut-chart-shell--legend-right]=\"config.customLegend?.position === 'right'\"\n [class.doughnut-chart-shell--legend-bottom]=\"config.customLegend?.position === 'bottom'\"\n>\n @if (\n !config.hideLegend &&\n config.customLegend?.position !== 'bottom' &&\n config.customLegend?.position !== 'right'\n ) {\n <lib-chart-legend\n class=\"doughnut-chart-shell__legend\"\n [class.doughnut-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--doughnut-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.data || []\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n\n <div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\"\n ></div>\n\n @if (\n !config.hideLegend &&\n (config.customLegend?.position === 'bottom' || config.customLegend?.position === 'right')\n ) {\n <lib-chart-legend\n class=\"doughnut-chart-shell__legend\"\n [class.doughnut-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--doughnut-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.data\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n</div>\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"contextMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n","import { Component, Input } from '@angular/core';\nimport * as echarts from 'echarts/core';\nimport { LineChart } from 'echarts/charts';\nimport { GridComponent, TooltipComponent, LegendComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { EChartsCoreOption } from 'echarts/core';\nimport { SimpleChanges } from '@angular/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\necharts.use([LineChart, GridComponent, TooltipComponent, LegendComponent, CanvasRenderer]);\n@Component({\n selector: 'lib-stacked-area-chart',\n imports: [NgxEchartsDirective],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './stacked-area-chart.html',\n styleUrl: './stacked-area-chart.scss',\n})\nexport class StackedAreaChart {\n @Input() data: any;\n @Input() title: string = 'Protocol Traffic Overview';\n\n chartOption!: EChartsCoreOption;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['data']) {\n this.buildChart();\n }\n }\n\n buildChart() {\n this.chartOption = {\n tooltip: {\n trigger: 'axis',\n },\n legend: {\n data: this.data.series.map((s: any) => s.name),\n top: 10,\n },\n grid: {\n left: '3%',\n right: '4%',\n bottom: '3%',\n containLabel: true,\n },\n xAxis: {\n type: 'category',\n boundaryGap: false,\n data: this.data.time,\n },\n yAxis: {\n type: 'value',\n },\n series: this.data.series.map((s: any) => ({\n name: s.name,\n type: s.type??'line',\n smooth: true,\n data: s.values,\n areaStyle: {\n opacity: 0.15,\n },\n })),\n };\n }\n}\n","<div\n echarts\n class=\"chart-container\"\n [options]=\"chartOption\"\n ></div>","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n} from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\n\nimport { CustomChart } from 'echarts/charts';\nimport { GridComponent, TooltipComponent, LegendComponent } from 'echarts/components';\n\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { CustomChartConfig, TimelineTrack, ShiftItem } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\nimport { RightClickCard } from '../right-click-card';\n\necharts.use([CustomChart, GridComponent, TooltipComponent, LegendComponent, CanvasRenderer]);\n@Component({\n selector: 'lib-custom-chart',\n imports: [NgxEchartsDirective, RightClickCard],\n templateUrl: './custom-chart.html',\n styleUrl: './custom-chart.scss',\n providers: [provideEchartsCore({ echarts })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CustomChartComponent implements OnChanges, OnDestroy {\n @Input() config!: CustomChartConfig;\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() contextMenuOptions: any[] = [];\n\n @Output() contextMenuClick = new EventEmitter<any>();\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n cardPosition = { x: 0, y: 0 };\n openCard: boolean = false;\n\n chartOption!: EChartsCoreOption;\n filteredConetxtMenuOptions: any[] = [];\n\n private chartInstance!: ECharts;\n constructor(\n private chartService: Charts,\n private cdr: ChangeDetectorRef,\n ) {}\n\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n this.bindEvents();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n\n this.buildOption();\n }\n\n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n\n this.closeCard();\n }\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n\n private bindEvents() {\n if (!this.chartInstance) return;\n\n this.chartInstance.off();\n\n /* ---- existing chart events ---- */\n this.events.forEach((eventName) => {\n if (eventName === 'contextmenu') {\n /* ---- RIGHT CLICK ANYWHERE IN GRID ---- */\n\n const zr = this.chartInstance.getZr();\n\n zr.off('contextmenu');\n\n zr.on('contextmenu', (event: any) => {\n event.event.preventDefault();\n\n this.filteredConetxtMenuOptions = this.contextMenuOptions.filter(\n (opt) => (opt.showOnTarget && event.target?.type === 'rect') || !opt.showOnTarget,\n );\n\n const point = [event.offsetX, event.offsetY];\n\n // check if click is inside grid\n if (!this.chartInstance.containPixel({ gridIndex: 0 }, point)) return;\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: event.event.clientX - rect.left,\n y: event.event.clientY - rect.top,\n };\n\n this.openCard = true;\n\n this.cdr.markForCheck();\n\n this.chartEvent.emit({\n type: 'contextmenu',\n data: event,\n });\n });\n } else {\n this.chartInstance.on(eventName, (params: any) => {\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n }\n });\n }\n\n // private convertTimeToNumber(time: string): number {\n // const [h, m] = time.split(':').map(Number);\n // return h + m / 60;\n // }\n\n private convertTimeToNumber(time: string): number {\n if (!time) return 0;\n const trimmed = time.trim().toLowerCase();\n const ampmMatch = trimmed.match(/^(\\d{1,2}):(\\d{2})\\s?(am|pm)$/);\n if (ampmMatch) {\n let hours = Number(ampmMatch[1]);\n const minutes = Number(ampmMatch[2]);\n const period = ampmMatch[3];\n\n if (period === 'pm' && hours !== 12) {\n hours += 12;\n }\n if (period === 'am' && hours === 12) {\n hours = 0;\n }\n return hours + minutes / 60;\n }\n\n const match24 = trimmed.match(/^(\\d{1,2}):(\\d{2})$/);\n\n if (match24) {\n const hours = Number(match24[1]);\n const minutes = Number(match24[2]);\n\n return hours + minutes / 60;\n }\n\n return 0;\n }\n\n private is12HourFormat(time?: string): boolean {\n if (!time) return false;\n return /am|pm/i.test(time);\n }\n\n private formatHourLabel(val: number, is12Hour: boolean): string {\n const hour = Math.floor(val);\n if (!is12Hour) {\n return `${hour.toString().padStart(2, '0')}:00`;\n }\n let h = hour;\n const suffix = h >= 12 ? 'PM' : 'AM';\n if (h === 0) h = 12;\n else if (h > 12) h -= 12;\n return `${h}:00 ${suffix}`;\n }\n\n private renderBlock =\n (catIndex: number, isShift = false) =>\n (params: any, api: any) => {\n const categoryIndex = this.config.chartMode === 'weekly' ? catIndex : api.value(0);\n\n const start = api.coord([api.value(1), categoryIndex]);\n const end = api.coord([api.value(2), categoryIndex]);\n const baseHeight = api.size([0, 1])[1];\n\n const height =\n baseHeight * (isShift ? (this.config.shiftHeight ?? 1) : (this.config.barHeight ?? 0.6));\n\n return {\n type: 'rect',\n shape: {\n x: start[0],\n y: start[1] - height / 2,\n width: end[0] - start[0],\n height: height,\n },\n style: api.style(),\n emphasis: {\n style: {\n stroke: '#434A51',\n lineWidth: 1,\n\n shadowBlur: 12,\n shadowColor: '#0A0D124D',\n shadowOffsetX: 4,\n shadowOffsetY: 4,\n },\n },\n };\n };\n\n private buildLegend() {\n const groups = Object.keys(this.config.legends);\n\n const legends: any[] = [];\n let topOffset = 0;\n\n groups.forEach((group) => {\n const items = this.config.legends[group];\n\n if (!items || !items.length) return;\n const names = [\n ...(this.config.hideLegendCategory\n ? []\n : [{ name: group, icon: 'none', itemStyle: { opacity: 0 } }]),\n ...items.map((i: any) => ({\n name: i.name,\n itemStyle: { color: i.color },\n })),\n ];\n\n legends.push({\n top: topOffset,\n left: 0,\n orient: 'horizontal',\n icon: 'roundRect',\n itemGap: 16,\n itemWidth: 12,\n itemHeight: 12,\n data: names,\n\n formatter: (name: string) => {\n if (name === group) {\n return `{title|${name}:}`;\n }\n return name;\n },\n\n textStyle: {\n fontSize: 14,\n rich: {\n title: {\n fontWeight: 'bold',\n padding: [0, 6, 0, -12],\n },\n },\n },\n });\n\n topOffset += 30;\n });\n return legends;\n }\n\n private buildMarkLines(): any {\n const logs = this.config.data?.[0]?.office_entry_logs;\n if (!logs?.length) return undefined;\n\n return {\n silent: true,\n symbol: 'none',\n data: logs.map((log) => ({\n xAxis: this.convertTimeToNumber(log.time),\n label: { formatter: '' },\n lineStyle: {\n color: '#5A5F66',\n type: log.type === 'OUT' ? ([8, 6] as any) : 'solid',\n width: 1,\n },\n })),\n };\n }\n\n private buildOption() {\n if (!this.config?.categories || !this.config?.data) return;\n\n const series: any[] = [];\n\n const categories = this.config.categories;\n\n /* ---------------- SHIFT DATA ---------------- */\n\n if (\n this.config.chartMode === 'daily' &&\n this.config.data?.length &&\n this.config.data[0]?.shifts?.items?.length\n ) {\n this.config.categories.forEach((cat, index) => {\n const shiftData: any[] = [];\n (this.config.data[0]?.shifts?.items || []).forEach((s: ShiftItem) => {\n shiftData.push({\n value: [index, this.convertTimeToNumber(s.start), this.convertTimeToNumber(s.end)],\n itemStyle: {\n color: this.config.shiftColor ?? '#F0F0F0',\n },\n });\n });\n if (shiftData.length) {\n series.push({\n name: this.config.data[0]?.shifts?.name || 'Shift',\n type: 'custom',\n renderItem: this.renderBlock(index, true),\n silent: true,\n z: 0,\n encode: { x: [1, 2], y: 0 },\n data: shiftData,\n });\n }\n });\n }\n\n /* -------- ACTIVITY LINE -------- */\n\n if (\n this.config.chartMode === 'daily' &&\n this.config.data?.length &&\n this.config.data[0]?.activity?.length\n ) {\n this.config.data[0].activity.forEach((act, index) => {\n const activityData: any[] = [];\n const categoryIndex = this.config.categories.indexOf(act.category);\n\n const activityTrack = this.config.legends[act.category]?.find(\n (leg) => leg.name === act.name,\n );\n let trackColor = '#C8DFF9';\n if (activityTrack) {\n trackColor = activityTrack?.color || '#C8DFF9';\n }\n if (categoryIndex === -1) return;\n\n act.items.forEach((p: any, i: number) => {\n const y =\n categoryIndex +\n p.value * (this.config.barHeight ?? 0.6) +\n (1 - (this.config.barHeight ?? 0.6)) / 2;\n\n activityData.push([this.convertTimeToNumber(p.time), y]);\n });\n if (activityData.length) {\n series.push({\n name: act.name,\n type: 'line',\n symbol: 'none',\n yAxisIndex: 1,\n z: 3,\n lineStyle: {\n width: 1,\n color: trackColor,\n },\n\n data: activityData,\n });\n }\n });\n }\n\n /* ---------------- TRACK SERIES ---------------- */\n this.config.data.forEach((data, index) => {\n if (this.config.chartMode === 'weekly' && data.shifts && data.shifts.items.length) {\n const shiftData: any[] = [];\n\n (data.shifts.items || []).forEach((s: ShiftItem) => {\n shiftData.push({\n value: [index, this.convertTimeToNumber(s.start), this.convertTimeToNumber(s.end)],\n itemStyle: {\n color: this.config.shiftColor ?? '#F0F0F0',\n },\n });\n });\n if (shiftData.length) {\n series.push({\n name: 'Shift',\n type: 'custom',\n renderItem: this.renderBlock(index, true),\n silent: true,\n z: 0,\n encode: { x: [1, 2], y: 0 },\n data: shiftData,\n });\n }\n }\n\n const activityData: any[] = [];\n if (this.config.chartMode === 'weekly' && data.activity && data.activity[0]?.items?.length) {\n const act = data.activity[0];\n const activityTrack = this.config.legends[act.category]?.find(\n (leg) => leg.name === act.name,\n );\n let trackColor = '#C8DFF9';\n if (activityTrack) {\n trackColor = activityTrack?.color || '#C8DFF9';\n }\n\n act.items.forEach((p: any, i: number) => {\n const y =\n index +\n p.value * (this.config.barHeight ?? 0.6) +\n (1 - (this.config.barHeight ?? 0.6)) / 2;\n\n activityData.push([this.convertTimeToNumber(p.time), y]);\n });\n if (activityData.length) {\n series.push({\n name: act.name,\n type: 'line',\n symbol: 'none',\n yAxisIndex: 1,\n z: 3,\n lineStyle: {\n width: 1,\n color: trackColor,\n },\n\n data: activityData,\n });\n }\n }\n\n data.tracks.forEach((track: TimelineTrack) => {\n if (!this.config.hideLegendCategory) {\n series.push({ name: track.category, type: 'custom', renderItem: () => {}, data: [] });\n }\n track.items.forEach((item) => {\n series.push({\n name: item.type,\n type: 'custom',\n renderItem: this.renderBlock(index, false),\n encode: { x: [1, 2], y: 0 },\n z: 2,\n data: [\n {\n ...item,\n category: track.category,\n value: [\n categories.indexOf(track.category),\n this.convertTimeToNumber(item.start),\n this.convertTimeToNumber(item.end),\n ],\n itemStyle: {\n color: this.config.legends[track.category]?.find((leg) => leg.name === item.type)\n ?.color,\n },\n type: item.type,\n },\n ],\n });\n });\n });\n });\n\n /* ---------------- CHART OPTION ---------------- */\n const is12Hour =\n this.is12HourFormat(this.config.startHour) || this.is12HourFormat(this.config.endHour);\n this.chartOption = {\n tooltip: {\n trigger: 'item',\n backgroundColor: 'transparent',\n borderWidth: 0,\n padding: 0,\n extraCssText: 'box-shadow:none;',\n formatter: (params: any) => {\n const tooltipCategories = this.config.tooltipCategories;\n\n if (tooltipCategories?.length && !tooltipCategories.includes(params.data?.category))\n return '';\n\n if (this.config.tooltipFormatter) {\n const formattedString = this.config.tooltipFormatter(params, this.config);\n if (this.config.darkTooltip)\n return `<div style=\"background-color: #111827; color: #fff; padding: 6px 12px; border-radius: 6px; font-size: 13px; font-family: inherit; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); white-space: nowrap;\">${formattedString}</div>`;\n return formattedString;\n }\n\n return this.chartService.timelineChartTooltipFormatter(params);\n },\n ...this.config.tooltip,\n },\n legend: this.buildLegend(),\n\n grid: {\n left: 0,\n right: 0,\n bottom: 0,\n top: Object.keys(this.config.legends).length * 30,\n },\n\n xAxis: {\n type: 'value',\n min: this.config.startHour\n ? Math.floor(this.convertTimeToNumber(this.config.startHour))\n : 0,\n max: this.config.endHour ? Math.ceil(this.convertTimeToNumber(this.config.endHour)) : 24,\n axisLine: {\n show: false,\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n lineStyle: {\n width: 0.5,\n color: '#C0C2C5',\n },\n },\n minorSplitLine: {\n show: true,\n lineStyle: {\n width: 0.2,\n color: '#DADBDC',\n },\n },\n minorTick: { splitNumber: 4 },\n interval: 1,\n // axisLabel: {\n // formatter: (val: number) => `${val}:00`,\n // },\n axisLabel: {\n hideOverlap: true,\n formatter: (val: number) => this.formatHourLabel(val, is12Hour),\n },\n },\n\n yAxis: [\n {\n type: 'category',\n data: this.config.yAxisData,\n axisLine: {\n show: false,\n },\n },\n {\n type: 'value',\n min: 0,\n max: this.config.yAxisData.length,\n show: false,\n },\n ],\n\n series,\n };\n\n const markLines = this.buildMarkLines();\n if (markLines) {\n series.push({\n type: 'custom',\n silent: true,\n z: 10,\n data: [],\n markLine: markLines,\n });\n }\n }\n\n ngOnDestroy(): void {\n this.chartInstance?.dispose();\n }\n}\n","<div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\"\n></div>\n@if (openCard && filteredConetxtMenuOptions.length > 0) {\n <lib-right-click-card\n [cardOptions]=\"filteredConetxtMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n AfterViewInit,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n HostListener,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport * as echarts from 'echarts/core';\nimport { EChartsCoreOption } from 'echarts';\nimport {\n SankeyChartConfig,\n SankeyLegendAggregation,\n SankeyLegendItem,\n SankeyLink,\n SankeyNode,\n SankeyTextCase,\n} from '../../modal/charts-modal';\nimport { ChartLegendComponent, ChartLegendConfig, ChartLegendEvent } from '../chart-legend';\nimport { LegendComponent, TooltipComponent, TitleComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { SankeyChart as SankeyChartEchart } from 'echarts/charts';\nimport { Charts } from '../../service/charts';\nimport { RightClickCard } from '../right-click-card';\necharts.use([SankeyChartEchart, TooltipComponent, TitleComponent, LegendComponent, CanvasRenderer]);\n\ntype SankeyNodeRole = 'source' | 'middle' | 'destination';\n\ninterface SankeyNodeMeta {\n name: string;\n depth: number;\n role: SankeyNodeRole;\n value: number;\n}\n\n@Component({\n selector: 'lib-sankey-chart',\n imports: [CommonModule, NgxEchartsDirective, ChartLegendComponent, RightClickCard],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './sankey-chart.html',\n styleUrl: './sankey-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SankeyChart implements AfterViewInit, OnChanges, OnDestroy {\n @Input() config!: SankeyChartConfig;\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() contextMenuOptions: any[] = [];\n\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n @Output() legendEvent = new EventEmitter<ChartLegendEvent>();\n @Output() contextMenuClick = new EventEmitter<any>();\n cardPosition = { x: 0, y: 0 };\n openCard = false;\n\n constructor(\n private chartService: Charts,\n private cdr: ChangeDetectorRef,\n private hostElement: ElementRef<HTMLElement>,\n ) {}\n\n chartOption: EChartsCoreOption = {};\n chartInstance!: echarts.ECharts;\n sourceToggleItems: Array<{ name: string; hidden: boolean }> = [];\n legendSeries: Array<{ name: string; type: string; color: string; data: number[] }> = [];\n\n private previousReactiveSignature = '';\n private resizeObserver?: ResizeObserver;\n private readonly stopNodeDragPropagation = (event: any): void => {\n // Labels can forward interaction to their node through __hostTarget.\n const node = event.target?.__hostTarget ?? event.target;\n if (!node?.draggable) return;\n\n // ZRender maps mouse, pointer, and touch starts to mousedown. Keep its\n // node dragging active while blocking ancestor drag handlers and the\n // browser's native drag of a draggable parent element.\n event.event?.stopPropagation();\n event.event?.preventDefault();\n };\n\n /* ------------------ CHANGE HANDLING ------------------ */\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n\n this.buildOption();\n }\n\n ngDoCheck(): void {\n if (!this.config) return;\n\n const signature = JSON.stringify({\n styling: this.config.styling,\n seriesOption: this.config.seriesOption,\n legend: this.config.legend,\n colors: this.config.colors,\n lineCurveness: this.config.lineCurveness,\n });\n\n if (signature !== this.previousReactiveSignature) {\n this.previousReactiveSignature = signature;\n this.buildOption();\n }\n }\n\n /* ------------------ OPTION BUILDER ------------------ */\n\n private buildOption() {\n const styling = this.config.styling;\n const palette = this.config.colors ?? this.chartService.defaultColors;\n const allNodeMeta = this.buildNodeMeta(this.config.nodes ?? [], this.config.links ?? []);\n this.sourceToggleItems = this.buildSourceToggleItems(allNodeMeta);\n const hiddenSources = this.hiddenSourceSet();\n const visibleLinks = this.visibleLinks(this.config.links ?? [], hiddenSources);\n const visibleNodes = this.visibleNodes(this.config.nodes ?? [], visibleLinks, hiddenSources);\n const visibleNodeMeta = this.buildNodeMeta(visibleNodes, visibleLinks);\n const totalValue = this.totalSourceValue(visibleLinks, visibleNodeMeta);\n this.legendSeries = this.buildLegendSeries(visibleNodeMeta, visibleLinks, palette);\n const selected = this.readLegendSelected();\n const nodeOpacity = this.percentToRatio(styling?.node?.opacity, 100);\n const labelTypography = styling?.labels?.typography;\n const fontColor = this.withOpacity(\n labelTypography?.reset ? undefined : labelTypography?.color,\n this.percentToRatio(labelTypography?.reset ? undefined : labelTypography?.opacity, 100),\n '#333',\n );\n\n const label = {\n show: styling?.labels?.showLabels ?? true,\n // Keep labels within the space between Sankey columns. ECharts then\n // adds an ellipsis whenever a larger font, wider node, or long name\n // does not fit.\n width: this.resolveSankeyLabelWidth(visibleNodeMeta),\n overflow: 'truncate',\n ellipsis: '...',\n color: fontColor,\n fontFamily: labelTypography?.reset ? undefined : labelTypography?.fontFamily,\n fontSize: this.clamp(\n labelTypography?.reset ? undefined : labelTypography?.fontSize,\n 8,\n 40,\n ),\n fontWeight: labelTypography?.reset\n ? undefined\n : labelTypography?.bold\n ? 'bold'\n : undefined,\n fontStyle: labelTypography?.reset\n ? undefined\n : labelTypography?.italic\n ? 'italic'\n : undefined,\n textDecoration: labelTypography?.reset\n ? undefined\n : labelTypography?.underline\n ? 'underline'\n : undefined,\n position: this.resolveLabelPosition(),\n formatter: (params: any) =>\n this.formatNodeLabel(\n String(params.name ?? ''),\n visibleNodeMeta.get(String(params.name ?? '')),\n totalValue,\n ),\n };\n const labelMargins = this.resolveSankeyLabelMargins(visibleNodes, label, visibleNodeMeta);\n\n this.chartOption = {\n backgroundColor: this.config?.backgroundColor || 'transparent',\n color: palette,\n title: {\n show: this.config.showTitle ?? !!this.config.title,\n text: this.config.title,\n left: 'center',\n },\n legend: {\n show: false,\n data: this.legendSeries.map((item) => item.name),\n selected,\n selectedMode: true,\n },\n\n tooltip: {\n show: this.config.showTooltip,\n trigger: 'item',\n triggerOn: 'mousemove',\n backgroundColor: 'transparent', // important for custom card\n borderWidth: 0,\n extraCssText: 'box-shadow:none;', // remove default shadow\n formatter: (params: any) =>\n this.config.tooltipFormatter\n ? this.config.tooltipFormatter(params)\n : this.chartService.sankeyTooltipFormatter(params, this.config),\n },\n series: [\n {\n ...this.config.seriesOption,\n ...labelMargins,\n type: 'sankey',\n ...((styling?.node?.thickness ?? this.config.seriesOption?.nodeWidth)\n ? {\n nodeWidth: this.clamp(\n styling?.node?.thickness ?? this.config.seriesOption?.nodeWidth,\n 1,\n 50,\n ),\n }\n : {}),\n\n ...((styling?.node?.padding ?? this.config.seriesOption?.nodeGap)\n ? {\n nodeGap: this.clamp(\n styling?.node?.padding ?? this.config.seriesOption?.nodeGap,\n 0,\n 100,\n ),\n }\n : {}),\n data: visibleNodes.map((n, index) => {\n const nodeStyle = this.resolveSingleNodeStyle(n.name);\n return {\n ...n,\n name: n.name,\n label: this.mergeSingleNodeLabel(n, nodeStyle?.label, visibleNodeMeta.get(n.name)),\n itemStyle: {\n color: this.resolveNodeColor(n, visibleNodeMeta.get(n.name), index, palette),\n opacity: nodeOpacity,\n ...(this.config.seriesOption?.itemStyle || {}),\n ...(styling?.itemStyle || {}),\n ...(nodeStyle?.itemStyle || {}),\n ...(n.itemStyle || {}),\n },\n };\n }),\n\n links: visibleLinks.map((link) => {\n const dynamicLinkColor = this.resolveLinkColor(link, visibleNodeMeta);\n return {\n ...link,\n lineStyle: {\n color: dynamicLinkColor,\n curveness: this.config.lineCurveness ?? 0.5,\n opacity: dynamicLinkColor === 'gradient' ? 0.35 : 0.45,\n ...(this.config.seriesOption?.lineStyle || {}),\n ...(styling?.lineStyle || {}),\n ...(link.lineStyle || {}),\n },\n };\n }),\n levels: [\n {\n depth: this.chartService.getSankeyLevels(visibleNodes, visibleLinks),\n label: { position: this.resolveLabelPosition() },\n },\n ],\n lineStyle: {\n curveness: this.config.lineCurveness ?? 0.5,\n opacity: 0.3,\n ...(this.config.seriesOption?.lineStyle || {}),\n ...(styling?.lineStyle || {}),\n },\n\n label,\n },\n ],\n };\n\n if (this.chartInstance) {\n this.chartInstance.setOption(this.chartOption, true);\n }\n this.cdr.markForCheck();\n }\n\n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n this.closeCard();\n }\n\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n\n get showNodeToggles(): boolean {\n return this.config?.styling?.nodesOff?.showControls === true;\n }\n\n get showLegend(): boolean {\n return this.isLegendEnabled();\n }\n\n get legendPosition(): 'top' | 'bottom' | 'left' | 'right' {\n return this.config?.styling?.legend?.position ?? 'bottom';\n }\n\n get isSideLegend(): boolean {\n return this.legendPosition === 'left' || this.legendPosition === 'right';\n }\n\n get legendConfig(): ChartLegendConfig<any> {\n const config = this.config?.styling?.legend;\n const text = config?.text;\n const titleStyle = config?.titleStyle;\n const showValueLabels = config?.showValueLabels === true;\n\n return {\n enabled: this.showLegend,\n position: config?.position ?? 'bottom',\n align: config?.align ?? 'center',\n layout: this.isSideLegend ? 'vertical' : 'horizontal',\n scrollable: true,\n title: config?.title,\n legendTitleTextColor: titleStyle?.color,\n legendTitleFontSize: this.clamp(titleStyle?.fontSize, 8, 40),\n legendTitleFontFamily: titleStyle?.fontFamily,\n legendTitleFontWeight: titleStyle?.bold ? 'bold' : undefined,\n legendTitleFontStyle: titleStyle?.italic ? 'italic' : undefined,\n legendTitleTextDecoration: titleStyle?.underline ? 'underline' : undefined,\n legendTitleTransform: titleStyle?.case === 'none' ? undefined : titleStyle?.case,\n // Sankey legends are informational: selecting an item must not hide a flow.\n preventLegendClickDefault: true,\n hoverLink: false,\n legendType: config?.legendType ?? config?.style ?? 'marker',\n icon: config?.icon ?? 'circle',\n // Use a strict boolean check because configuration values can arrive as the\n // string \"false\" from form controls; that must not be rendered as a value.\n showValue: showValueLabels,\n legendTextColor: text?.color,\n legendFontSize: this.clamp(text?.fontSize, 8, 40),\n legendFontFamily: text?.fontFamily,\n legendFontWeight: text?.bold ? 'bold' : undefined,\n legendFontStyle: text?.italic ? 'italic' : undefined,\n legendTextDecoration: text?.underline ? 'underline' : undefined,\n ...(showValueLabels\n ? {\n valueFormatter: (item: any) =>\n this.aggregateLegendValue(item?.raw?.data ?? [], config?.aggregation),\n }\n : {}),\n };\n }\n\n toggleSourceNode(name: string, visible: boolean): void {\n const current = this.config.styling?.nodesOff?.hiddenSources ?? {};\n const hiddenSources = { ...current, [name]: !visible };\n\n if (!this.config.styling) {\n this.config.styling = {};\n }\n this.config.styling = {\n ...this.config.styling,\n nodesOff: {\n ...this.config.styling.nodesOff,\n enabled: true,\n hiddenSources,\n },\n };\n this.buildOption();\n }\n\n onLegendEvent(event: ChartLegendEvent): void {\n this.legendEvent.emit(event);\n this.chartEvent.emit({\n type: `legend:${event.type}`,\n data: event,\n });\n }\n\n private buildNodeMeta(nodes: SankeyNode[], links: SankeyLink[]): Map<string, SankeyNodeMeta> {\n const names = new Set(nodes.map((node) => node.name));\n links.forEach((link) => {\n names.add(link.source);\n names.add(link.target);\n });\n\n const incoming = new Map<string, SankeyLink[]>();\n const outgoing = new Map<string, SankeyLink[]>();\n links.forEach((link) => {\n incoming.set(link.target, [...(incoming.get(link.target) ?? []), link]);\n outgoing.set(link.source, [...(outgoing.get(link.source) ?? []), link]);\n });\n\n const depth = new Map<string, number>();\n [...names].forEach((name) => {\n if (!incoming.has(name)) depth.set(name, 0);\n });\n\n let changed = true;\n while (changed) {\n changed = false;\n links.forEach((link) => {\n const sourceDepth = depth.get(link.source);\n if (sourceDepth === undefined) return;\n const targetDepth = Math.max(depth.get(link.target) ?? 0, sourceDepth + 1);\n if (targetDepth !== depth.get(link.target)) {\n depth.set(link.target, targetDepth);\n changed = true;\n }\n });\n }\n\n const maxDepth = Math.max(...[...names].map((name) => depth.get(name) ?? 0), 0);\n const meta = new Map<string, SankeyNodeMeta>();\n [...names].forEach((name) => {\n const inValue = (incoming.get(name) ?? []).reduce(\n (sum, link) => sum + Number(link.value || 0),\n 0,\n );\n const outValue = (outgoing.get(name) ?? []).reduce(\n (sum, link) => sum + Number(link.value || 0),\n 0,\n );\n const nodeDepth = depth.get(name) ?? 0;\n const isSource = !incoming.has(name) || nodeDepth === 0;\n const isDestination = !outgoing.has(name) || nodeDepth === maxDepth;\n meta.set(name, {\n name,\n depth: nodeDepth,\n role: isSource ? 'source' : isDestination ? 'destination' : 'middle',\n value: Math.max(inValue, outValue),\n });\n });\n\n return meta;\n }\n\n private buildSourceToggleItems(meta: Map<string, SankeyNodeMeta>) {\n const hiddenSources = this.hiddenSourceSet();\n return [...meta.values()]\n .filter((node) => node.role === 'source')\n .map((node) => ({ name: node.name, hidden: hiddenSources.has(node.name) }));\n }\n\n private hiddenSourceSet(): Set<string> {\n const nodesOff = this.config?.styling?.nodesOff;\n if (nodesOff?.enabled === false) return new Set();\n\n return new Set(\n Object.entries(nodesOff?.hiddenSources ?? {})\n .filter(([, hidden]) => hidden)\n .map(([name]) => name),\n );\n }\n\n private visibleLinks(links: SankeyLink[], hiddenSources: Set<string>): SankeyLink[] {\n if (!hiddenSources.size) return links;\n return links.filter(\n (link) => !hiddenSources.has(link.source) && !hiddenSources.has(link.target),\n );\n }\n\n private visibleNodes(\n nodes: SankeyNode[],\n links: SankeyLink[],\n hiddenSources: Set<string>,\n ): SankeyNode[] {\n const linkedNames = new Set<string>();\n links.forEach((link) => {\n linkedNames.add(link.source);\n linkedNames.add(link.target);\n });\n\n return nodes.filter((node) => !hiddenSources.has(node.name) && linkedNames.has(node.name));\n }\n\n private resolveNodeColor(\n node: SankeyNode,\n meta: SankeyNodeMeta | undefined,\n index: number,\n palette: string[],\n ): string {\n const styling = this.config.styling;\n const nodeStyle = this.config.styling?.nodeStyles?.[node.name];\n if (nodeStyle?.color) {\n return this.withOpacity(nodeStyle.color, this.percentToRatio(nodeStyle.opacity, 100));\n }\n\n if (styling?.colorBy === 'single') {\n return this.withOpacity(\n styling.singleColor?.color,\n this.percentToRatio(styling.singleColor?.opacity, 100),\n );\n }\n\n if (styling?.colorBy === 'individual' && meta) {\n const colorStop =\n meta.role === 'source'\n ? styling.individualColors?.source\n : meta.role === 'destination'\n ? styling.individualColors?.destination\n : (styling.individualColors?.middle?.[meta.depth] ??\n styling.individualColors?.middle?.[String(meta.depth)]);\n\n if (colorStop?.color) {\n return this.withOpacity(colorStop.color, this.percentToRatio(colorStop.opacity, 100));\n }\n }\n\n return node.color ?? palette[index % Math.max(palette.length, 1)] ?? '#64748b';\n }\n\n private resolveSingleNodeStyle(name: string) {\n const nodeStyle = this.config.styling?.nodeStyles?.[name];\n if (!nodeStyle) return undefined;\n\n return {\n itemStyle: {\n ...(nodeStyle.color\n ? {\n color: this.withOpacity(nodeStyle.color, this.percentToRatio(nodeStyle.opacity, 100)),\n }\n : {}),\n ...(nodeStyle.opacity !== undefined\n ? { opacity: this.percentToRatio(nodeStyle.opacity, 100) }\n : {}),\n ...(nodeStyle.itemStyle || {}),\n },\n label: nodeStyle.label,\n };\n }\n\n private mergeSingleNodeLabel(\n node: SankeyNode,\n label: SankeyNode['label'] | undefined,\n meta?: SankeyNodeMeta,\n ) {\n const alignment = this.config.styling?.labels?.alignment;\n const defaultSourcePosition = meta?.role === 'source' &&\n (!alignment || alignment === 'default');\n if (!label && !node.label && !defaultSourcePosition) return undefined;\n return {\n ...(defaultSourcePosition ? { position: 'right' as const } : {}),\n ...(label || {}),\n ...(node.label || {}),\n };\n }\n\n private resolveLinkColor(link: SankeyLink, meta: Map<string, SankeyNodeMeta>): string {\n const mode = this.config.styling?.linkColor ?? 'gradient';\n if (mode === 'gradient') return 'gradient';\n if (mode === 'default') return '#C0C2C5';\n\n const sourceMeta = meta.get(link.source);\n const targetMeta = meta.get(link.target);\n if (mode === 'source') return this.resolveMetaColor(sourceMeta);\n if (mode === 'destination') return this.resolveMetaColor(targetMeta);\n\n if (sourceMeta?.role === 'middle') return this.resolveMetaColor(sourceMeta);\n if (targetMeta?.role === 'middle') return this.resolveMetaColor(targetMeta);\n return '#C0C2C5';\n }\n\n private resolveMetaColor(meta: SankeyNodeMeta | undefined): string {\n const nodes = this.config.nodes ?? [];\n const palette = this.config.colors ?? this.chartService.defaultColors;\n const index = Math.max(\n nodes.findIndex((node) => node.name === meta?.name),\n 0,\n );\n const node = nodes[index];\n return node?.color ?? palette[index % Math.max(palette.length, 1)] ?? '#64748b';\n }\n\n private formatNodeLabel(\n name: string,\n meta: SankeyNodeMeta | undefined,\n totalValue: number,\n ): string {\n const labels = this.config.styling?.labels;\n const text = this.applyCase(\n name,\n labels?.typography?.reset ? 'none' : labels?.typography?.case,\n );\n const stats: string[] = [];\n\n if (labels?.showNumbers)\n stats.push(\n String(`${labels?.showPercentage ? `(${meta?.value ?? 0})` : (meta?.value ?? 0)}`),\n );\n if (labels?.showPercentage) {\n const percentage = totalValue ? (((meta?.value ?? 0) / totalValue) * 100).toFixed(1) : '0.0';\n stats.push(`${percentage}%`);\n }\n\n if (!stats.length) return text;\n return labels?.splitLabelsAndStats\n ? `${text}\\n${stats.join(' ')}`\n : `${text} ${stats.join(' ')}`;\n }\n\n private resolveLabelPosition(): 'left' | 'right' {\n const alignment = this.config.styling?.labels?.alignment;\n if (alignment === 'left' || alignment === 'right') return alignment;\n return 'left';\n }\n\n private resolveSankeyLabelWidth(meta: Map<string, SankeyNodeMeta>): number {\n const chartWidth = this.chartInstance?.getWidth?.() ?? 0;\n const levelCount = Math.max(...[...meta.values()].map((node) => node.depth), 0) + 1;\n const nodeWidth =\n this.clamp(\n this.config.styling?.node?.thickness ?? this.config.seriesOption?.nodeWidth,\n 1,\n 50,\n ) ?? 20;\n const horizontalPadding = 32;\n const availableWidth = Math.max(chartWidth - horizontalPadding - levelCount * nodeWidth, 0);\n\n // Reserve room for labels at both outer edges as well as between columns.\n return Math.max(0, Math.min(180, Math.floor(availableWidth / Math.max(levelCount * 2 + 2, 1))));\n }\n\n private resolveSankeyLabelMargins(\n nodes: SankeyNode[],\n label: any,\n meta: Map<string, SankeyNodeMeta>,\n ) {\n const width = this.chartInstance?.getWidth() ?? 0;\n const height = this.chartInstance?.getHeight() ?? 0;\n const legend = this.config.styling?.legend;\n const margin = (value: unknown, size: number, fallback: number): number => {\n if (typeof value === 'number') return value;\n if (typeof value === 'string' && value.endsWith('%')) {\n const percent = Number.parseFloat(value);\n if (Number.isFinite(percent)) return (size * percent) / 100;\n }\n return fallback;\n };\n const series = this.config.seriesOption;\n const margins = {\n left: margin(series?.left, width, 16),\n right: margin(series?.right, width, 16),\n top: margin(\n series?.top, height, this.isLegendEnabled() && legend?.position === 'top' ? 32 : 16,\n ),\n bottom: margin(\n series?.bottom, height, this.isLegendEnabled() && legend?.position === 'bottom' ? 32 : 16,\n ),\n };\n\n const measured = nodes.map((node) => {\n const override = this.mergeSingleNodeLabel(\n node, this.resolveSingleNodeStyle(node.name)?.label, meta.get(node.name),\n );\n const effective = {\n ...label,\n ...override,\n };\n const font = `${effective.fontStyle ?? 'normal'} ${effective.fontWeight ?? 'normal'} ${effective.fontSize ?? 12}px ${effective.fontFamily ?? 'sans-serif'}`;\n const text = typeof effective.formatter === 'function'\n ? effective.formatter({ name: node.name, data: node })\n : typeof effective.formatter === 'string'\n ? effective.formatter.replace(/\\{b\\}/g, node.name)\n : node.name;\n const bounds = echarts.format.getTextRect(\n String(text), font, undefined, undefined, effective.padding,\n effective.rich, false, effective.lineHeight,\n );\n return { effective, bounds, customWidth: override?.width };\n });\n\n // Size the shared label box to the text, within the existing truncation cap.\n // This makes outer node positions respond to font and formatted text changes.\n const textWidths = measured\n .filter(({ effective }) => effective.show !== false)\n .map(({ bounds }) => bounds.width);\n label.width = Math.min(label.width, Math.ceil(Math.max(0, ...textWidths)));\n const alignment = this.config.styling?.labels?.alignment;\n const useLabelMargins = alignment === 'left' || alignment === 'right';\n for (const { effective, bounds, customWidth } of measured) {\n if (effective.show === false) continue;\n const labelWidth = typeof customWidth === 'number' ? customWidth : label.width;\n const distance = Number(effective.distance ?? 5);\n if (effective.position === 'left' || effective.position === 'right') {\n // Default labels face into the chart; keep the outer margins at 16px.\n if (useLabelMargins) {\n const side = effective.position as 'left' | 'right';\n margins[side] = Math.max(margins[side], Math.ceil(labelWidth + distance + 8));\n }\n // Split labels and large fonts also need room above and below nodes.\n margins.top = Math.max(margins.top, Math.ceil(bounds.height / 2 + 8));\n margins.bottom = Math.max(margins.bottom, Math.ceil(bounds.height / 2 + 8));\n }\n }\n return margins;\n }\n\n private totalSourceValue(links: SankeyLink[], meta: Map<string, SankeyNodeMeta>): number {\n const sourceNames = new Set(\n [...meta.values()].filter((node) => node.role === 'source').map((node) => node.name),\n );\n const total = links\n .filter((link) => sourceNames.has(link.source))\n .reduce((sum, link) => sum + Number(link.value || 0), 0);\n return total || links.reduce((sum, link) => sum + Number(link.value || 0), 0);\n }\n\n private buildLegendSeries(\n meta: Map<string, SankeyNodeMeta>,\n links: SankeyLink[],\n palette: string[],\n ): Array<{ name: string; type: string; color: string; data: number[] }> {\n const configuredLegend = this.config.legend;\n const items: SankeyLegendItem[] = configuredLegend?.length\n ? configuredLegend\n : [...meta.values()].map((node, index) => ({\n name: node.name,\n color: this.resolveMetaColor(node) ?? palette[index % Math.max(palette.length, 1)],\n value: node.value,\n }));\n\n const linkValuesByName = new Map<string, number[]>();\n links.forEach((link) => {\n linkValuesByName.set(link.source, [...(linkValuesByName.get(link.source) ?? []), link.value]);\n linkValuesByName.set(link.target, [...(linkValuesByName.get(link.target) ?? []), link.value]);\n });\n\n return items.map((item, index) => ({\n name: item.name,\n type: 'sankey-legend',\n color: item.color ?? palette[index % Math.max(palette.length, 1)] ?? '#64748b',\n data: item.value !== undefined ? [item.value] : (linkValuesByName.get(item.name) ?? []),\n }));\n }\n\n private isLegendEnabled(): boolean {\n const legend = this.config?.styling?.legend;\n if (legend?.show === false) return false;\n if (legend?.show !== true) return false;\n return this.legendSeries.length > 1;\n }\n\n private aggregateLegendValue(values: number[], type: SankeyLegendAggregation = 'sum'): string {\n const numericValues = values.map(Number).filter((value) => Number.isFinite(value));\n if (!numericValues.length) return '0';\n\n let result = 0;\n switch (type) {\n case 'average':\n result = numericValues.reduce((sum, value) => sum + value, 0) / numericValues.length;\n break;\n case 'minimum':\n result = Math.min(...numericValues);\n break;\n case 'maximum':\n result = Math.max(...numericValues);\n break;\n case 'count':\n result = numericValues.length;\n break;\n case 'countDistinct':\n result = new Set(numericValues).size;\n break;\n case 'variance': {\n const mean = numericValues.reduce((sum, value) => sum + value, 0) / numericValues.length;\n result =\n numericValues.reduce((sum, value) => sum + (value - mean) * (value - mean), 0) /\n numericValues.length;\n break;\n }\n case 'standardDeviation': {\n const mean = numericValues.reduce((sum, value) => sum + value, 0) / numericValues.length;\n const variance =\n numericValues.reduce((sum, value) => sum + (value - mean) * (value - mean), 0) /\n numericValues.length;\n result = Math.sqrt(variance);\n break;\n }\n case 'sum':\n default:\n result = numericValues.reduce((sum, value) => sum + value, 0);\n break;\n }\n\n return Number.isInteger(result) ? String(result) : result.toFixed(2);\n }\n\n private applyCase(value: string, textCase: SankeyTextCase = 'none'): string {\n switch (textCase) {\n case 'uppercase':\n return value.toUpperCase();\n case 'lowercase':\n return value.toLowerCase();\n case 'capitalize':\n return value.replace(/\\b\\w/g, (char) => char.toUpperCase());\n case 'none':\n default:\n return value;\n }\n }\n\n private withOpacity(color = '#64748b', opacity = 1, fallback = '#64748b'): string {\n const normalized = color || fallback;\n if (opacity >= 1) return normalized;\n\n const hex = normalized.replace('#', '');\n if (![3, 6].includes(hex.length)) return normalized;\n const fullHex =\n hex.length === 3\n ? hex\n .split('')\n .map((part) => `${part}${part}`)\n .join('')\n : hex;\n const value = Number.parseInt(fullHex, 16);\n const red = (value >> 16) & 255;\n const green = (value >> 8) & 255;\n const blue = value & 255;\n return `rgba(${red}, ${green}, ${blue}, ${opacity})`;\n }\n\n private percentToRatio(value: number | undefined, fallback: number): number {\n return Math.min(Math.max(value ?? fallback, 0), 100) / 100;\n }\n\n private clamp(value: number | undefined, min: number, max: number): number | undefined {\n if (value === undefined || value === null || Number.isNaN(value)) return undefined;\n return Math.min(Math.max(value, min), max);\n }\n\n private readLegendSelected(): Record<string, boolean> {\n const option = this.chartInstance?.getOption?.() as\n | { legend?: Array<{ selected?: Record<string, boolean> }> }\n | undefined;\n\n return { ...(option?.legend?.[0]?.selected ?? {}) };\n }\n\n /* ------------------ INIT ------------------ */\n\n onChartInit(ec: echarts.ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n this.bindEvents();\n }\n\n ngAfterViewInit(): void {\n if (typeof ResizeObserver === 'undefined') return;\n\n this.resizeObserver = new ResizeObserver(() => {\n if (!this.chartInstance) return;\n this.chartInstance.resize();\n this.buildOption();\n });\n this.resizeObserver.observe(this.hostElement.nativeElement);\n }\n\n /* ------------------ EVENTS ------------------ */\n\n private bindEvents() {\n if (!this.chartInstance) return;\n\n this.chartInstance.off();\n const zr = this.chartInstance.getZr();\n zr.off('mousedown', this.stopNodeDragPropagation);\n zr.on('mousedown', this.stopNodeDragPropagation);\n this.bindSankeyDragBounds();\n\n this.events.forEach((eventName) => {\n if (eventName === 'contextmenu') {\n this.chartInstance.on(eventName, (params: any) => {\n const event = params?.event?.event;\n if (event) {\n params.event.event.preventDefault();\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n };\n\n this.openCard = true;\n\n this.cdr.markForCheck();\n }\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n } else if (eventName === 'click') {\n this.chartInstance.on('click', (params: any) => {\n this.chartEvent.emit({\n type: 'click',\n data: params,\n });\n });\n const zr = this.chartInstance.getZr();\n zr.on('click', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n nativeEvent.preventDefault();\n this.chartEvent.emit({\n type: 'blur',\n data: { ...zrEvent, type: 'blur' },\n });\n }\n });\n } else {\n this.chartInstance.on(eventName, (params: any) => {\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n }\n });\n }\n\n /**\n * ECharts' Sankey drag action stores the node position without applying the\n * series bounds. Clamp it after every drag so the complete node remains in\n * the drawable Sankey area (including custom series left/right/top/bottom).\n */\n private bindSankeyDragBounds(): void {\n this.chartInstance.on('dragnode', (params: any) => {\n const chartModel = (this.chartInstance as any).getModel?.();\n const series = chartModel?.getSeriesByIndex(params.seriesIndex ?? 0);\n const node = series?.getData?.().getItemGraphicEl(params.dataIndex);\n const bounds = series?.layoutInfo;\n\n if (!node || !bounds) return;\n\n // Node shapes are local to ECharts' Sankey group. `layoutInfo.x/y` are\n // applied to that parent group, so the node itself must be constrained\n // against (0, 0), not against the page-relative layoutInfo coordinates.\n const maxX = Math.max(0, bounds.width - node.shape.width);\n const maxY = Math.max(0, bounds.height - node.shape.height);\n const x = Math.min(Math.max(node.shape.x, 0), maxX);\n const y = Math.min(Math.max(node.shape.y, 0), maxY);\n\n if (x === node.shape.x && y === node.shape.y) return;\n\n this.chartInstance.dispatchAction({\n type: 'dragNode',\n seriesId: series.id,\n dataIndex: params.dataIndex,\n // ECharts normalizes Sankey node positions against the plot area, not\n // the whole canvas. Using the canvas size here causes an offset when\n // the series has left/right/top/bottom margins.\n localX: x / bounds.width,\n localY: y / bounds.height,\n });\n });\n }\n\n /* ------------------ DESTROY ------------------ */\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n if (this.chartInstance && !this.chartInstance.isDisposed()) {\n this.chartInstance.getZr()?.off('mousedown', this.stopNodeDragPropagation);\n this.chartInstance.off();\n this.chartInstance.dispose();\n }\n }\n}\n","<div\n class=\"sankey-chart-shell\"\n [class.sankey-chart-shell--legend-left]=\"legendPosition === 'left'\"\n [class.sankey-chart-shell--legend-right]=\"legendPosition === 'right'\"\n [class.sankey-chart-shell--legend-bottom]=\"legendPosition === 'bottom'\"\n [class.sankey-chart-shell--with-toggles]=\"showNodeToggles\"\n>\n @if (showNodeToggles && sourceToggleItems.length) {\n <div class=\"sankey-node-toggles\" aria-label=\"Sankey source visibility\">\n @for (item of sourceToggleItems; track item.name) {\n <label class=\"sankey-node-toggle\">\n <input\n type=\"checkbox\"\n [checked]=\"!item.hidden\"\n (change)=\"toggleSourceNode(item.name, $any($event.target).checked)\"\n />\n <span>{{ item.name }}</span>\n </label>\n }\n </div>\n }\n\n @if (showLegend && legendPosition !== 'bottom' && legendPosition !== 'right') {\n <lib-chart-legend\n class=\"sankey-chart-shell__legend\"\n [chart]=\"chartInstance\"\n [series]=\"legendSeries\"\n [colors]=\"config.colors || []\"\n [config]=\"legendConfig\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n\n <div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\"\n ></div>\n\n @if (showLegend && (legendPosition === 'bottom' || legendPosition === 'right')) {\n <lib-chart-legend\n class=\"sankey-chart-shell__legend\"\n [chart]=\"chartInstance\"\n [series]=\"legendSeries\"\n [colors]=\"config.colors || []\"\n [config]=\"legendConfig\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n</div>\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"contextMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { HeatmapChart } from 'echarts/charts';\nimport {\n GridComponent,\n TooltipComponent,\n TitleComponent,\n VisualMapComponent,\n} from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport { HeatmapChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\n\necharts.use([\n HeatmapChart,\n GridComponent,\n TooltipComponent,\n TitleComponent,\n VisualMapComponent,\n CanvasRenderer,\n]);\n\n@Component({\n selector: 'lib-heatmap',\n standalone: true,\n imports: [NgxEchartsDirective],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './heatmap.html',\n styleUrl: './heatmap.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Heatmap implements OnChanges, OnDestroy {\n @Input() config!: HeatmapChartConfig;\n @Input() theme: any;\n @Input() events: string[] = [];\n\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n\n chartOption: EChartsCoreOption = {};\n legendItems: { label: string; color: string }[] = [];\n private chartInstance?: ECharts;\n\n constructor(private chartService: Charts) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n this.chartInstance = undefined;\n }\n\n this.chartOption = this.buildOption(this.config);\n this.legendItems = this.buildLegendItems(this.config);\n\n if (this.chartInstance) {\n this.chartInstance.setOption(this.chartOption, true);\n this.bindEvents();\n }\n }\n\n private buildOption(config: HeatmapChartConfig): EChartsCoreOption {\n const data = config.data ?? [];\n const values = data.map((item) => item[2]).filter((value) => Number.isFinite(value));\n const min = config.min ?? (values.length ? Math.min(...values) : 0);\n const max = config.max ?? (values.length ? Math.max(...values) : 100);\n\n const baseSeries = {\n name: config.seriesName ?? config.title ?? 'Heatmap',\n type: 'heatmap',\n data,\n label: {\n show: config.showLabel ?? false,\n color: config.labelColor ?? '#111827',\n formatter: config.labelFormatter,\n },\n emphasis: {\n itemStyle: {\n shadowBlur: 10,\n shadowColor: 'rgba(0, 0, 0, 0.25)',\n },\n },\n };\n\n return {\n backgroundColor: config.backgroundColor || 'transparent',\n\n title: {\n show: config.showTitle ?? !!config.title,\n text: config.title,\n left: config.titlePosition || 'center',\n },\n\n tooltip: {\n show: config.showTooltip ?? true,\n trigger: 'item',\n backgroundColor: 'transparent',\n borderWidth: 0,\n padding: 0,\n confine: true,\n ...config.tooltip,\n formatter:\n config.tooltipFormatter ||\n ((params: any) => this.chartService.heatmapTooltipFormatter(params, config)),\n },\n\n grid: {\n left: config.grid?.left ?? '3%',\n right: config.grid?.right ?? '4%',\n top: config.grid?.top ?? '10%',\n bottom: config.grid?.bottom ?? '8%',\n height: config.grid?.height,\n containLabel: config.grid?.containLabel ?? true,\n },\n\n xAxis: {\n type: 'category',\n data: config.xAxisData ?? [],\n splitArea: { show: true },\n ...config.xAxis,\n },\n\n yAxis: {\n type: 'category',\n data: config.yAxisData ?? [],\n splitArea: { show: true },\n ...config.yAxis,\n },\n\n visualMap: {\n show: config.visualMap?.show ?? false,\n min,\n max,\n calculable: true,\n orient: 'horizontal',\n left: 'center',\n bottom: 0,\n inRange: {\n color: config.colors ?? ['#e0f2fe', '#38bdf8', '#0369a1'],\n },\n ...config.visualMap,\n },\n\n series: this.buildSeries(config.series, baseSeries),\n };\n }\n\n private buildLegendItems(config: HeatmapChartConfig) {\n const pieces = config.visualMap?.pieces;\n\n if (Array.isArray(pieces) && pieces.length) {\n return pieces.map((piece: any) => ({\n label: piece.label ?? `${piece.max ?? piece.value ?? piece.min}%`,\n color: piece.color ?? piece.itemStyle?.color ?? '#e5e7eb',\n }));\n }\n\n const colors = config.colors ?? ['#e0f2fe', '#38bdf8', '#0369a1'];\n const step = colors.length ? 100 / colors.length : 100;\n\n return colors.map((color, index) => ({\n label: `${Math.round(step * (index + 1))}%`,\n color,\n }));\n }\n\n private buildSeries(seriesConfig: HeatmapChartConfig['series'], baseSeries: any) {\n if (Array.isArray(seriesConfig)) {\n return seriesConfig.map((series) => ({\n ...baseSeries,\n ...series,\n }));\n }\n\n if (seriesConfig) {\n return [\n {\n ...baseSeries,\n ...seriesConfig,\n },\n ];\n }\n\n return [baseSeries];\n }\n\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.bindEvents();\n }\n\n private bindEvents() {\n if (!this.chartInstance) return;\n\n const chartInstance = this.chartInstance;\n\n chartInstance.off();\n\n this.events.forEach((eventName) => {\n chartInstance.on(eventName, (params: any) => {\n if (eventName === 'contextmenu' && params.event?.event) {\n params.event.event.preventDefault();\n }\n\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n });\n }\n\n ngOnDestroy(): void {\n if (this.chartInstance) {\n this.chartInstance.off();\n this.chartInstance.dispose();\n }\n }\n}\n","<div class=\"heatmap-wrapper\">\n <div class=\"heatmap-legend\">\n @for (item of legendItems; track item.label) {\n <div class=\"heatmap-legend-item\">\n <span class=\"heatmap-legend-swatch\" [style.background]=\"item.color\"></span>\n <span>{{ item.label }}</span>\n </div>\n }\n </div>\n\n <div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n (chartInit)=\"onChartInit($event)\"\n class=\"chart-container\"\n ></div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n ElementRef,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { HeatmapChart } from 'echarts/charts';\nimport {\n GridComponent,\n LegendComponent,\n TitleComponent,\n TooltipComponent,\n VisualMapComponent,\n} from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport {\n HeatmapPivotAxisState,\n HeatmapPivotAxisValue,\n HeatmapPivotConfig,\n HeatmapPivotDataPoint,\n HeatmapPivotSeriesData,\n HeatmapPivotVisualMapPiece,\n} from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\nimport { ChartLegendComponent, ChartLegendEvent } from '../chart-legend';\nimport { RightClickCard } from '../right-click-card';\n\necharts.use([\n HeatmapChart,\n GridComponent,\n LegendComponent,\n TitleComponent,\n TooltipComponent,\n VisualMapComponent,\n CanvasRenderer,\n]);\n\n@Component({\n selector: 'lib-heatmap-pivot',\n standalone: true,\n imports: [NgxEchartsDirective, ChartLegendComponent, RightClickCard],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './heatmap-pivot.html',\n styleUrl: './heatmap-pivot.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeatmapPivot implements OnInit, OnChanges, OnDestroy {\n @ViewChild('chartContainer') chartContainer?: ElementRef<HTMLElement>;\n @Input() config: HeatmapPivotConfig = { xAxisData: [], yAxisData: [], series: [] };\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() contextMenuOptions: any[] = [];\n @Input() showContextMenu = false;\n\n @Output() contextMenuClick = new EventEmitter<any>();\n @Output() chartEvent = new EventEmitter<{ type: string; data: any }>();\n @Output() legendEvent = new EventEmitter<ChartLegendEvent>();\n\n chartOption: EChartsCoreOption = {};\n chartInstance!: ECharts;\n cardPosition = { x: 0, y: 0 };\n openCard = false;\n columnTotals: number[] = [];\n\n private xAxisState!: HeatmapPivotAxisState;\n private yAxisState!: HeatmapPivotAxisState;\n private yAxisLabelWidth?: number;\n private totalLabelWidth?: number;\n private normalizedSeriesData: HeatmapPivotSeriesData[][] = [];\n\n private eventCleanup: (() => void)[] = [];\n\n constructor(\n private chartService: Charts,\n private cdr: ChangeDetectorRef,\n ) {}\n\n get deafultColors(): string[] {\n return this.chartService.heatmapPivotColors;\n }\n\n get hasSideLegendWidth(): boolean {\n return this.isSideLegend && !!this.config.customLegend?.maxWidth;\n }\n\n get legendShellMaxWidth(): string | null {\n return this.isSideLegend ? (this.config.customLegend?.maxWidth ?? null) : null;\n }\n\n private get isSideLegend(): boolean {\n return (\n this.config.customLegend?.position === 'left' ||\n this.config.customLegend?.position === 'right'\n );\n }\n\n ngOnInit(): void {\n this.buildOption();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n this.buildOption();\n if (changes['events'] || changes['showContextMenu']) {\n this.bindEvents();\n }\n // NgxEchartsDirective recreates the chart when its theme input changes.\n }\n\n private buildOption(): void {\n const config = this.config;\n this.xAxisState = this.buildAxisState('x');\n this.yAxisState = this.buildAxisState('y');\n const yAxisLabelWidth = this.resolveYAxisLabelWidth();\n this.yAxisLabelWidth = yAxisLabelWidth;\n this.totalLabelWidth = this.resolveTotalLabelWidth(yAxisLabelWidth);\n this.columnTotals = this.xAxisState.values.map(() => 0);\n const series = (config.series ?? []).map((item) => ({\n ...item,\n type: 'heatmap',\n coordinateSystem: 'cartesian2d',\n encode: { x: 0, y: 1, tooltip: [2] },\n data: this.normalizeData(item.data ?? []),\n itemStyle: {\n borderColor: '#ffffff',\n borderWidth: Math.max(config.cellGap ?? 6, 0),\n borderRadius: Math.max(config.cellBorderRadius ?? 3, 0),\n ...item['itemStyle'],\n },\n label: {\n show: config.showLabel ?? true,\n position: 'inside',\n color: config.labelColor ?? '#252a31',\n fontSize: 14,\n formatter:\n config.labelFormatter ??\n ((params: any) => {\n const value = params.value?.[2];\n return typeof value === 'number' ? this.chartService.compactValueFormat(value) : '-';\n }),\n ...item['label'],\n },\n emphasis: { disabled: true, ...item['emphasis'] },\n }));\n this.normalizedSeriesData = series.map((item) => item.data);\n let min = Infinity;\n let max = -Infinity;\n for (const item of series) {\n for (const dataItem of item.data) {\n const point = this.pointValue(dataItem);\n const value = point[2];\n if (!Number.isFinite(value)) continue;\n min = Math.min(min, value);\n max = Math.max(max, value);\n const column = Number(point[0]);\n if (this.columnTotals[column] !== undefined) this.columnTotals[column] += value;\n }\n }\n\n this.chartOption = {\n backgroundColor: config.backgroundColor ?? 'transparent',\n color: config.colors ?? this.deafultColors,\n title: [\n {\n show: config.showTitle ?? !!config.title,\n text: config.title,\n left: config.titlePosition ?? 'center',\n },\n ...(config.showTotals !== false\n ? [\n {\n id: 'heatmap-pivot-total-label',\n text: config.totalLabel ?? 'Total',\n left: 8,\n bottom: 12,\n padding: 0,\n textStyle: {\n color: '#182230',\n fontFamily: 'Arial, sans-serif',\n fontSize: 14,\n fontWeight: 600,\n width: this.totalLabelWidth,\n overflow: 'truncate',\n ellipsis: '...',\n },\n },\n ]\n : []),\n ],\n tooltip: {\n show: config.showTooltip ?? true,\n trigger: 'item',\n backgroundColor: '#ffffff',\n borderWidth: 0,\n padding: [10, 12],\n confine: true,\n textStyle: { color: '#434a51', fontFamily: 'Arial, sans-serif', fontSize: 12 },\n borderRadius: 6,\n shadowBlur: 16,\n shadowColor: 'rgba(16,24,40,0.12)',\n shadowOffsetY: 5,\n formatter: (params: any) =>\n config.tooltipFormatter\n ? config.tooltipFormatter(params, config)\n : this.formatTooltip(params),\n ...config.tooltip,\n },\n legend: {\n show: !config.hideLegend && !config.customLegend,\n type: 'scroll',\n top: (config.showTitle ?? !!config.title) ? 30 : 0,\n icon: 'roundRect',\n textStyle: { color: '#434a51', fontSize: 14 },\n ...config.legend,\n data: config.legend?.data ?? series.map((item) => item.name),\n selected: { ...this.readLegendSelected(), ...config.legend?.selected },\n selectedMode:\n config.legend?.selectedMode ??\n (config.customLegend?.selectionMode === 'exclusive' ? 'single' : true),\n },\n grid: [\n {\n left: this.labelGridLeft(yAxisLabelWidth),\n right: 0,\n top: 0,\n bottom: config.showTotals !== false ? 41 : 0,\n ...config.grid,\n },\n ...(config.showTotals !== false\n ? [\n {\n left: 0,\n right: 0,\n bottom: 1,\n height: 40,\n containLabel: false,\n },\n ]\n : []),\n ],\n xAxis: [\n {\n position: 'top',\n axisLine: { show: false },\n axisTick: { show: false },\n splitLine: { show: false },\n ...this.axisOptions('x'),\n axisLabel: {\n interval: 'auto',\n hideOverlap: true,\n margin: 14,\n color: '#434a51',\n fontFamily: 'Arial, sans-serif',\n fontSize: 14,\n formatter:\n this.xAxisState.type === 'time'\n ? (value: string | number) => this.formatAxisValue('x', value)\n : undefined,\n ...config.xAxis?.axisLabel,\n },\n },\n ...this.totalsAxisOptions(),\n ],\n yAxis: [\n {\n inverse: true,\n axisLine: { show: false },\n axisTick: { show: false },\n splitLine: { show: false },\n ...this.axisOptions('y'),\n axisLabel: {\n interval: 0,\n margin: yAxisLabelWidth + 16,\n align: 'left',\n color: '#434a51',\n fontFamily: 'Arial, sans-serif',\n fontSize: 14,\n formatter:\n this.yAxisState.type === 'time'\n ? (value: string | number) => this.formatAxisValue('y', value)\n : undefined,\n ...config.yAxis?.axisLabel,\n width: yAxisLabelWidth,\n overflow: config.yAxis?.axisLabel?.overflow ?? 'truncate',\n ellipsis: config.yAxis?.axisLabel?.ellipsis ?? '...',\n },\n },\n ...(config.showTotals !== false\n ? [\n {\n gridIndex: 1,\n type: 'value',\n min: 0,\n max: 1,\n show: false,\n },\n ]\n : []),\n ],\n visualMap: this.buildVisualMaps(min, max),\n series,\n };\n }\n\n private resolveYAxisLabelWidth(): number {\n const style = this.config.yAxis?.axisLabel;\n const chartWidth = this.chartContainer?.nativeElement.getBoundingClientRect().width\n || (this.chartInstance && !this.chartInstance.isDisposed() ? this.chartInstance.getWidth() : 0)\n || 360;\n const defaultMaxWidth = Math.max(100, Math.min(240, Math.round(chartWidth * 0.22)));\n const minWidth = Math.max(0, this.config.yAxisLabelMinWidth\n ?? Math.min(50, this.config.yAxisLabelMaxWidth ?? defaultMaxWidth));\n const maxWidth = Math.max(minWidth, this.config.yAxisLabelMaxWidth ?? defaultMaxWidth);\n if (typeof style?.width === 'number' && Number.isFinite(style.width)) {\n return Math.min(maxWidth, Math.max(minWidth, style.width));\n }\n const font = `${style?.fontWeight ?? 400} ${style?.fontSize ?? 14}px ${style?.fontFamily ?? 'Arial, sans-serif'}`;\n let width = minWidth;\n this.yAxisState.values.forEach((_value, index) => {\n width = Math.max(width, echarts.format.getTextRect(this.formatAxisValue('y', index), font).width);\n });\n if (this.config.showTotals !== false) {\n width = Math.max(width, echarts.format.getTextRect(\n this.config.totalLabel ?? 'Total', '600 14px Arial, sans-serif',\n ).width);\n }\n return Math.min(maxWidth, width);\n }\n\n private labelGridLeft(width: number): number {\n const yAxisHidden = this.config.yAxis?.['show'] === false || this.config.yAxis?.axisLabel?.show === false;\n return yAxisHidden && this.config.showTotals === false ? 0 : width + 16;\n }\n\n private resolveTotalLabelWidth(labelWidth: number): number {\n const configuredLeft = this.config.grid?.left;\n const chartWidth = this.chartContainer?.nativeElement.getBoundingClientRect().width\n || (this.chartInstance && !this.chartInstance.isDisposed() ? this.chartInstance.getWidth() : 0)\n || 360;\n const defaultLeft = this.labelGridLeft(labelWidth);\n const left = configuredLeft === undefined ? defaultLeft\n : typeof configuredLeft === 'number' ? configuredLeft\n : configuredLeft.endsWith('%') ? parseFloat(configuredLeft) / 100 * chartWidth\n : parseFloat(configuredLeft);\n // Reserve eight pixels on each side of the heading before the total values.\n return Math.max(0, Math.min(labelWidth, (Number.isFinite(left) ? left : defaultLeft) - 16));\n }\n\n private buildVisualMaps(min: number, max: number): EChartsCoreOption | EChartsCoreOption[] {\n const config = this.config;\n const base = {\n show: false,\n min: config.min ?? (Number.isFinite(min) ? min : 0),\n max: config.max ?? (Number.isFinite(max) ? max : 100),\n dimension: 2,\n calculable: true,\n orient: 'horizontal',\n left: 'center',\n bottom: 0,\n inRange: { color: config.colors ?? this.deafultColors },\n };\n const rules = this.visualMapOptions();\n if (rules['type'] !== 'piecewise' && !rules['pieces'] && !rules['categories']) {\n return { ...base, ...rules };\n }\n return [\n { ...base, type: 'continuous', show: false },\n {\n ...base,\n ...rules,\n type: 'piecewise',\n inRange: {\n colorAlpha: 1,\n ...base.inRange,\n ...(rules['inRange'] && typeof rules['inRange'] === 'object' ? rules['inRange'] : {}),\n },\n // An empty mapping preserves the color assigned by the continuous map.\n outOfRange: rules['outOfRange'] ?? {},\n },\n ];\n }\n\n private visualMapOptions(): EChartsCoreOption {\n const config = this.config.visualMap;\n if (!config?.pieces) return config ?? {};\n return {\n ...config,\n type: config.type ?? 'piecewise',\n pieces: config.pieces.flatMap((piece): HeatmapPivotVisualMapPiece[] => {\n const { eq, neq, ne, opacity, ...options } = piece;\n const native: HeatmapPivotVisualMapPiece = {\n ...options,\n ...(opacity !== undefined ? {\n colorAlpha: Math.min(100, Math.max(0, Number.isFinite(opacity) ? opacity : 100)) / 100,\n } : {}),\n };\n if (eq !== undefined) return [{ ...native, value: eq }];\n const excluded = neq ?? ne;\n if (excluded === undefined) return [native];\n if (native.value !== undefined) return native.value === excluded ? [] : [native];\n const { gt, gte, min, lt, lte, max, ...style } = native;\n const lower = Math.max(gt ?? -Infinity, gte ?? -Infinity, min ?? -Infinity);\n const upper = Math.min(lt ?? Infinity, lte ?? Infinity, max ?? Infinity);\n const lowerOpen = gt === lower;\n const upperOpen = lt === upper;\n const range = (\n start: number,\n end: number,\n startOpen: boolean,\n endOpen: boolean,\n ): HeatmapPivotVisualMapPiece[] => {\n if (start > end || (start === end && (startOpen || endOpen))) return [];\n return [\n {\n ...style,\n ...(Number.isFinite(start)\n ? startOpen && start === excluded\n ? // ECharts joins touching pieces; use the next representable number\n // so the excluded value cannot be reintroduced at their boundary.\n { gte: this.nextNumericValue(start) }\n : { [startOpen ? 'gt' : 'gte']: start }\n : {}),\n ...(Number.isFinite(end) ? { [endOpen ? 'lt' : 'lte']: end } : {}),\n },\n ];\n };\n return [\n ...range(lower, Math.min(upper, excluded), lowerOpen, excluded <= upper || upperOpen),\n ...range(Math.max(lower, excluded), upper, excluded >= lower || lowerOpen, upperOpen),\n ];\n }),\n };\n }\n\n private nextNumericValue(value: number): number {\n if (value === 0) return Number.MIN_VALUE;\n const buffer = new DataView(new ArrayBuffer(8));\n buffer.setFloat64(0, value);\n buffer.setBigUint64(0, buffer.getBigUint64(0) + (value > 0 ? 1n : -1n));\n return buffer.getFloat64(0);\n }\n\n private totalsAxisOptions(): EChartsCoreOption[] {\n if (this.config.showTotals === false) return [];\n const options = this.axisOptions('x');\n const axisLine = { show: true, onZero: false, lineStyle: { color: '#e4e7ec', width: 1 } };\n const borderAxis = {\n gridIndex: 1,\n z: 10,\n type: 'category',\n data: [''],\n boundaryGap: true,\n axisLine,\n axisLabel: { show: false },\n axisTick: { show: false },\n splitLine: { show: false },\n axisPointer: { show: false },\n };\n const base = {\n ...options,\n show: true,\n position: 'bottom',\n axisLine: { show: false },\n axisTick: { show: false },\n splitLine: { show: false },\n axisPointer: { show: false },\n };\n return [\n {\n ...base,\n axisLabel: {\n show: true,\n interval: 0,\n margin: 13,\n color: '#182230',\n fontFamily: 'Arial, sans-serif',\n fontSize: 14,\n fontWeight: 600,\n formatter: (value: string) => {\n const index = this.xAxisState.values.findIndex((bucket) => String(bucket) === value);\n const total = this.columnTotals[index] ?? 0;\n return this.config.totalFormatter ? this.config.totalFormatter(total) : String(total);\n },\n },\n },\n { ...borderAxis, position: 'top' },\n { ...borderAxis, position: 'bottom' },\n ];\n }\n\n private pointValue(point: HeatmapPivotSeriesData): HeatmapPivotDataPoint {\n return Array.isArray(point) ? point : point.value;\n }\n\n private normalizeData(data: HeatmapPivotSeriesData[]): HeatmapPivotSeriesData[] {\n return data.flatMap((point): HeatmapPivotSeriesData[] => {\n const [x, y, value] = this.pointValue(point);\n const normalized: [number, number, number] = [\n this.normalizeCoordinate('x', x),\n this.normalizeCoordinate('y', y),\n value,\n ];\n if (!normalized.every(Number.isFinite) || normalized[0] < 0 || normalized[1] < 0) return [];\n return [Array.isArray(point) ? normalized : { ...point, value: normalized }];\n });\n }\n\n private buildAxisState(axis: 'x' | 'y'): HeatmapPivotAxisState {\n const options = axis === 'x' ? this.config.xAxis : this.config.yAxis;\n const axisData = axis === 'x' ? this.config.xAxisData : this.config.yAxisData;\n const type = options?.type ?? 'category';\n const coordinates = (this.config.series ?? []).flatMap((series) =>\n (series.data ?? []).map((point) => this.pointValue(point)[axis === 'x' ? 0 : 1]),\n );\n const resolvedCoordinates = coordinates.map((value) =>\n typeof value === 'number' &&\n Number.isInteger(value) &&\n value >= 0 &&\n value < (axisData?.length ?? 0)\n ? axisData![value]\n : value,\n );\n const axisValues =\n type === 'time'\n ? [...(axisData ?? []), ...resolvedCoordinates]\n : axisData?.length\n ? axisData\n : coordinates;\n const values = [\n ...new Set(\n axisValues.map((value) => (type === 'time' ? this.timestamp(value) : String(value))),\n ),\n ].filter((value) => type !== 'time' || Number.isFinite(value));\n if (type === 'time') (values as number[]).sort((a, b) => a - b);\n return { type, values };\n }\n\n private timestamp(value: HeatmapPivotAxisValue): number {\n return value instanceof Date ? value.getTime() : new Date(value).getTime();\n }\n\n private normalizeCoordinate(axis: 'x' | 'y', value: HeatmapPivotAxisValue): number {\n const state = axis === 'x' ? this.xAxisState : this.yAxisState;\n const axisData = axis === 'x' ? this.config.xAxisData : this.config.yAxisData;\n const indexed =\n typeof value === 'number' &&\n Number.isInteger(value) &&\n value >= 0 &&\n value < (axisData?.length ?? 0);\n const resolved = indexed ? axisData![value as number] : value;\n return state.values.indexOf(\n state.type === 'time' ? this.timestamp(resolved) : String(resolved),\n );\n }\n\n private axisOptions(axis: 'x' | 'y'): EChartsCoreOption {\n const state = axis === 'x' ? this.xAxisState : this.yAxisState;\n const options = (axis === 'x' ? this.config.xAxis : this.config.yAxis) ?? {};\n const { type, minInterval, min, max, ...styles } = options;\n let bucketMin: HeatmapPivotAxisValue | undefined = min;\n let bucketMax: HeatmapPivotAxisValue | undefined = max;\n if (state.type === 'time') {\n if (min !== undefined) {\n const timestamp = this.timestamp(min);\n bucketMin =\n min === 'dataMin' ? 0 : state.values.findIndex((value) => Number(value) >= timestamp);\n if (bucketMin === -1) bucketMin = state.values.length;\n }\n if (max !== undefined) {\n const timestamp = this.timestamp(max);\n bucketMax =\n max === 'dataMax'\n ? state.values.length - 1\n : state.values.reduce<number>(\n (last, value, index) => (Number(value) <= timestamp ? index : last),\n -1,\n );\n }\n }\n // Native Cartesian heatmaps require category axes. Time values remain sorted\n // buckets and use the pivot date formatter for their displayed labels.\n return {\n ...styles,\n type: 'category',\n boundaryGap: true,\n data: state.values.map(String),\n min: bucketMin,\n max: bucketMax,\n };\n }\n\n private formatAxisValue(axis: 'x' | 'y', value: string | number): string {\n const state = axis === 'x' ? this.xAxisState : this.yAxisState;\n const index =\n typeof value === 'number'\n ? value\n : state.values.findIndex((bucket) => String(bucket) === value);\n const resolved = state.values[index] ?? value;\n if (state.type === 'time') {\n return this.chartService.formatHeatmapPivotDate(\n resolved,\n axis === 'x' ? this.config.XAxisAggregation : this.config.YAxisAggregation,\n );\n }\n return String(resolved);\n }\n\n private formatTooltip(params: any): string {\n const [x, y] = params.value ?? [];\n const rows = [\n ['Row Dimension', this.formatAxisValue('x', x)],\n ['Column Dimension', this.formatAxisValue('y', y)],\n ];\n const selected = this.readLegendSelected();\n this.normalizedSeriesData.forEach((data, index) => {\n const series = this.config.series[index];\n if (selected[series.name] === false) return;\n const match = data.find((point) => {\n const value = this.pointValue(point);\n return value[0] === x && value[1] === y;\n });\n if (match) {\n rows.push([\n series.name,\n String(\n this.chartService.formatTooltipValue(\n this.pointValue(match)[2],\n this.config.tooltipCompactValue,\n ),\n ),\n ]);\n }\n });\n\n const extra = params.data?.[this.config.extraTooltipKey ?? 'tooltip'];\n if (extra && typeof extra === 'object' && !Array.isArray(extra)) {\n for (const [key, value] of Object.entries(extra)) {\n rows.push([\n key,\n typeof value === 'number'\n ? String(this.chartService.formatTooltipValue(value, this.config.tooltipCompactValue))\n : String(value ?? '-'),\n ]);\n }\n }\n return `<div style=\"display:grid;grid-template-columns:112px 8px minmax(170px,1fr);row-gap:5px;line-height:16px\">${rows\n .map(\n ([label, content]) =>\n `<span style=\"font-weight:600\">${echarts.format.encodeHTML(String(label))}</span><span>:</span><span>${echarts.format.encodeHTML(String(content ?? '-'))}</span>`,\n )\n .join('')}</div>`;\n }\n\n onChartInit(chart: ECharts): void {\n this.unbindEvents();\n this.chartInstance = chart;\n // Apply the width after ngx-echarts has installed the initial chart options.\n queueMicrotask(() => {\n if (this.chartInstance === chart) this.refreshLabelWidth();\n });\n this.bindEvents();\n this.cdr.markForCheck();\n }\n\n @HostListener('window:resize')\n refreshLabelWidth(): void {\n const chart = this.chartInstance;\n if (!chart || chart.isDisposed() || !this.yAxisState) return;\n const width = this.resolveYAxisLabelWidth();\n const totalWidth = this.resolveTotalLabelWidth(width);\n if (width === this.yAxisLabelWidth && totalWidth === this.totalLabelWidth) return;\n\n const update: EChartsCoreOption = {\n yAxis: [{ axisLabel: {\n width,\n margin: this.config.yAxis?.axisLabel?.margin ?? width + 16,\n } }],\n };\n if (this.config.showTotals !== false) {\n update['title'] = [{ id: 'heatmap-pivot-total-label', textStyle: { width: totalWidth } }];\n }\n if (this.config.grid?.left === undefined) {\n update['grid'] = [{\n left: this.labelGridLeft(width),\n }];\n }\n chart.setOption(update, { lazyUpdate: true, silent: true });\n this.yAxisLabelWidth = width;\n this.totalLabelWidth = totalWidth;\n }\n\n private bindEvents(): void {\n this.unbindEvents();\n const chart = this.chartInstance;\n if (!chart || chart.isDisposed()) return;\n\n const eventNames = new Set(this.events);\n if (this.showContextMenu) eventNames.add('contextmenu');\n\n for (const eventName of eventNames) {\n const handler = (params: any) => {\n if (eventName === 'contextmenu') {\n this.openContextMenu(params?.event?.event);\n }\n this.chartEvent.emit({ type: eventName, data: params });\n };\n chart.on(eventName, handler);\n this.eventCleanup.push(() => {\n if (!chart.isDisposed()) chart.off(eventName, handler);\n });\n\n if (eventName === 'click' || eventName === 'contextmenu') {\n const zr = chart.getZr();\n const backgroundHandler = (event: any) => {\n if (event.target) return;\n if (eventName === 'contextmenu') {\n this.openContextMenu(event.event);\n this.chartEvent.emit({\n type: 'contextmenu',\n data: { ...event, isZrEvent: true },\n });\n } else {\n this.chartEvent.emit({ type: 'blur', data: { ...event, type: 'blur' } });\n }\n };\n zr.on(eventName, backgroundHandler);\n this.eventCleanup.push(() => {\n if (!chart.isDisposed()) zr.off(eventName, backgroundHandler);\n });\n }\n }\n }\n\n private openContextMenu(event?: MouseEvent): void {\n if (!event || !this.chartInstance || this.chartInstance.isDisposed()) return;\n event.preventDefault();\n const rect = this.chartInstance.getDom().getBoundingClientRect();\n this.cardPosition = { x: event.clientX - rect.left, y: event.clientY - rect.top };\n this.openCard = this.showContextMenu || this.contextMenuOptions.length > 0;\n this.cdr.markForCheck();\n }\n\n onMenuClick(item: any): void {\n this.contextMenuClick.emit(item);\n this.closeCard();\n }\n\n @HostListener('document:click')\n closeCard(): void {\n this.openCard = false;\n }\n\n onLegendEvent(event: ChartLegendEvent): void {\n this.legendEvent.emit(event);\n this.chartEvent.emit({ type: `legend:${event.type}`, data: event });\n }\n\n private readLegendSelected(): Record<string, boolean> {\n if (!this.chartInstance || this.chartInstance.isDisposed()) return {};\n const option = this.chartInstance.getOption() as {\n legend?: Array<{ selected?: Record<string, boolean> }>;\n };\n return { ...option.legend?.[0]?.selected };\n }\n\n private unbindEvents(): void {\n this.eventCleanup.forEach((cleanup) => cleanup());\n this.eventCleanup = [];\n }\n\n ngOnDestroy(): void {\n this.unbindEvents();\n if (this.chartInstance && !this.chartInstance.isDisposed()) {\n this.chartInstance.dispose();\n }\n }\n}\n","<div\n class=\"heatmap-pivot-chart-shell\"\n [class.heatmap-pivot-chart-shell--legend-left]=\"config.customLegend?.position === 'left'\"\n [class.heatmap-pivot-chart-shell--legend-right]=\"config.customLegend?.position === 'right'\"\n [class.heatmap-pivot-chart-shell--legend-bottom]=\"config.customLegend?.position === 'bottom'\"\n>\n @if (\n config.customLegend && !config.hideLegend &&\n config.customLegend.position !== 'bottom' &&\n config.customLegend.position !== 'right'\n ) {\n <lib-chart-legend\n class=\"heatmap-pivot-chart-shell__legend\"\n [class.heatmap-pivot-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--heatmap-pivot-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n\n <div\n #chartContainer\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n (chartInit)=\"onChartInit($event)\"\n class=\"chart-container\"\n ></div>\n\n @if (\n config.customLegend && !config.hideLegend &&\n (config.customLegend.position === 'bottom' || config.customLegend.position === 'right')\n ) {\n <lib-chart-legend\n class=\"heatmap-pivot-chart-shell__legend\"\n [class.heatmap-pivot-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--heatmap-pivot-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n</div>\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"contextMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n","import {\n Component,\n Input,\n SimpleChanges,\n ChangeDetectionStrategy,\n Output,\n EventEmitter,\n ElementRef,\n HostListener,\n ViewChild,\n} from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\n\nimport {\n GridComponent,\n TooltipComponent,\n LegendComponent,\n TitleComponent,\n} from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { Charts } from '../../service/charts';\nimport { ScatterChart } from 'echarts/charts';\nimport { ScatterChartConfig } from '../../modal/charts-modal';\nimport { ChartLegendComponent } from '../chart-legend';\nimport type { ChartLegendEvent } from '../chart-legend';\n\necharts.use([\n ScatterChart,\n GridComponent,\n TooltipComponent,\n LegendComponent,\n CanvasRenderer,\n TitleComponent,\n]);\n\n@Component({\n selector: 'lib-scatter-chart',\n imports: [NgxEchartsDirective, ChartLegendComponent],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './scatter-chart.html',\n styleUrl: './scatter-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScatterChartComp {\n @Input() config!: ScatterChartConfig;\n @Input() theme: any;\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n @Output() legendEvent = new EventEmitter<ChartLegendEvent>();\n @ViewChild('chartContainer') chartContainer?: ElementRef<HTMLElement>;\n chartOption: EChartsCoreOption = {};\n chartInstance!: ECharts;\n\n constructor(private chartService: Charts) {}\n get deafultColors() {\n return this.chartService.defaultColors;\n }\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n\n this.buildOption();\n }\n\n private previousAxisNameStyleSignature = '';\n\n ngDoCheck(): void {\n if (!this.chartInstance || !this.config) return;\n\n const axisNameStyleSignature = this.resolveAxisNameStyleSignature();\n if (this.previousAxisNameStyleSignature === axisNameStyleSignature) return;\n\n this.previousAxisNameStyleSignature = axisNameStyleSignature;\n this.refreshAxisNameSpace();\n }\n\n private buildOption() {\n const selected = this.readLegendSelected();\n const selectedMode = this.config?.customLegend?.selectionMode === 'exclusive' ? 'single' : true;\n\n this.chartOption = {\n backgroundColor: this.config?.backgroundColor || 'transparent',\n color: this.config?.colors || this.chartService.defaultColors,\n title: {\n show: this.config?.showTitle ?? !!this.config?.title,\n text: this.config?.title,\n left: this.config?.titlePosition || 'center',\n },\n tooltip: {\n show: this.config?.showTooltip,\n trigger: 'item',\n backgroundColor: 'transparent',\n borderWidth: 0,\n padding: 0,\n confine: true,\n formatter: (params: any) =>\n this.config?.tooltipFormatter\n ? this.config?.tooltipFormatter(params)\n : this.chartService.scatterTooltipFormatter(\n params,\n this.config?.xAxisName,\n this.config?.yAxisName,\n ),\n },\n legend: {\n show: false,\n data: (this.config?.series ?? []).map((series) => series.name),\n selected,\n selectedMode,\n },\n\n grid: {\n left: this.config?.gridLeft ?? 0,\n right: this.config?.gridRight ?? 0,\n bottom: this.config?.gridBottom ?? 0,\n top: this.config?.gridTop ?? 0,\n },\n\n xAxis: {\n type: 'value',\n axisLine: {\n show: this.config?.showXAxisLine ?? true,\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n },\n },\n axisTick: {\n show: false,\n },\n axisLabel: {\n color: '#434A51',\n fontSize: 12,\n },\n nameLocation: 'center',\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n width: this.resolveAxisNameWidth('x'),\n ...(this.config?.xAxis?.nameTextStyle || {}),\n },\n\n splitLine: {\n show: true,\n lineStyle: {\n type: 'dashed',\n color: '#C0C2C5',\n width: 1,\n },\n },\n ...this.config?.xAxis,\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n },\n\n yAxis: [\n {\n type: 'value',\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameLocation: 'center',\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n width: this.resolveAxisNameWidth('y'),\n ...(this.config?.yAxis?.nameTextStyle || {}),\n },\n axisLine: {\n show: this.config?.showYAxisLine ?? true,\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n },\n },\n\n axisTick: {\n show: false,\n },\n axisLabel: {\n color: '#434A51',\n fontSize: 12,\n formatter: (value: number) => {\n if (value === 0) {\n return '0';\n }\n\n const absValue = Math.abs(value);\n\n // Quadrillions\n if (absValue >= 1_000_000_000_000_000) {\n return `${+(value / 1_000_000_000_000_000).toFixed(1)}Q`;\n }\n\n // Trillions\n if (absValue >= 1_000_000_000_000) {\n return `${+(value / 1_000_000_000_000).toFixed(1)}T`;\n }\n\n // Billions\n if (absValue >= 1_000_000_000) {\n return `${+(value / 1_000_000_000).toFixed(1)}B`;\n }\n\n // Millions\n if (absValue >= 1_000_000) {\n return `${+(value / 1_000_000).toFixed(1)}M`;\n }\n\n // Thousands\n if (absValue >= 1_000) {\n return `${+(value / 1_000).toFixed(1)}K`;\n }\n\n // Decimal handling\n if (Number.isInteger(value)) {\n return value.toString();\n }\n\n return value;\n },\n },\n splitLine: {\n show: true,\n lineStyle: {\n type: 'dashed',\n color: '#C0C2C5',\n width: 1,\n },\n },\n ...this.config?.yAxis,\n },\n ],\n\n series: (this.config?.series || []).map((s) => {\n return { symbolSize: 14, ...s, type: 'scatter' };\n }),\n };\n }\n get hasSideLegendWidth(): boolean {\n return this.isSideLegend && !!this.config.customLegend?.maxWidth;\n }\n\n get legendShellMaxWidth(): string | null {\n return this.isSideLegend ? (this.config.customLegend?.maxWidth ?? null) : null;\n }\n\n private get isSideLegend(): boolean {\n return (\n this.config.customLegend?.position === 'left' ||\n this.config.customLegend?.position === 'right'\n );\n }\n\n private resolveAxisName(name: string | undefined, axis: 'x' | 'y'): string {\n if (!name) return '';\n\n const maxWidth = this.resolveAxisNameWidth(axis);\n const font = this.resolveAxisNameFont(axis);\n if (echarts.format.getTextRect(name, font).width <= maxWidth) return name;\n\n const ellipsis = '...';\n let low = 0;\n let high = name.length;\n let truncated = ellipsis;\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const nextText = `${name.slice(0, mid)}${ellipsis}`;\n const nextWidth = echarts.format.getTextRect(nextText, font).width;\n\n if (nextWidth <= maxWidth) {\n truncated = nextText;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n return truncated;\n }\n\n private resolveAxisNameFont(axis: 'x' | 'y'): string {\n const style = axis === 'x' ? this.config?.xAxis?.nameTextStyle : this.config?.yAxis?.nameTextStyle;\n const fontSize = style?.fontSize ?? 14;\n const fontWeight = style?.fontWeight ?? 400;\n const fontFamily = style?.fontFamily ?? 'sans-serif';\n\n return `${fontWeight} ${fontSize}px ${fontFamily}`;\n }\n\n private resolveAxisNameWidth(axis: 'x' | 'y'): number {\n const chartRect = this.chartContainer?.nativeElement.getBoundingClientRect();\n const chartWidth = chartRect?.width || this.chartInstance?.getWidth?.() || 360;\n const chartHeight = chartRect?.height || this.chartInstance?.getHeight?.() || 240;\n\n if (axis === 'x') {\n return Math.max(chartWidth - 240, 80);\n }\n\n return Math.max(chartHeight - 72, 80);\n }\n\n private resolveAxisNameStyleSignature(): string {\n return JSON.stringify({\n xAxisName: this.config?.xAxisName,\n yAxisName: this.config?.yAxisName,\n xAxisNameTextStyle: this.config?.xAxis?.nameTextStyle,\n yAxisNameTextStyle: this.config?.yAxis?.nameTextStyle,\n });\n }\n\n onLegendEvent(event: ChartLegendEvent): void {\n this.legendEvent.emit(event);\n this.chartEvent.emit({\n type: `legend:${event.type}`,\n data: event,\n });\n }\n\n private readLegendSelected(): Record<string, boolean> {\n const option = this.chartInstance?.getOption?.() as\n | { legend?: Array<{ selected?: Record<string, boolean> }> }\n | undefined;\n\n return { ...(option?.legend?.[0]?.selected ?? {}) };\n }\n\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n queueMicrotask(() => this.refreshAxisNameSpace());\n }\n\n @HostListener('window:resize')\n refreshAxisNameSpace(): void {\n if (!this.chartInstance) return;\n\n this.chartInstance.setOption({\n xAxis: {\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n nameTextStyle: {\n width: this.resolveAxisNameWidth('x'),\n ...(this.config?.xAxis?.nameTextStyle || {}),\n },\n },\n yAxis: [\n {\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameTextStyle: {\n width: this.resolveAxisNameWidth('y'),\n ...(this.config?.yAxis?.nameTextStyle || {}),\n },\n },\n ],\n });\n }\n\n ngOnDestroy(): void {\n if (this.chartInstance) {\n this.chartInstance.off();\n this.chartInstance.dispose();\n }\n }\n}\n","<div\n class=\"scatter-chart-shell\"\n [class.scatter-chart-shell--legend-left]=\"config.customLegend?.position === 'left'\"\n [class.scatter-chart-shell--legend-right]=\"config.customLegend?.position === 'right'\"\n [class.scatter-chart-shell--legend-bottom]=\"config.customLegend?.position === 'bottom'\"\n>\n @if (\n !config.hideLegend &&\n config.customLegend?.position !== 'bottom' &&\n config.customLegend?.position !== 'right'\n ) {\n <lib-chart-legend\n class=\"scatter-chart-shell__legend\"\n [class.scatter-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--scatter-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n\n <div\n #chartContainer\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n (chartInit)=\"onChartInit($event)\"\n class=\"chart-container\"\n ></div>\n\n @if (\n !config.hideLegend &&\n (config.customLegend?.position === 'bottom' || config.customLegend?.position === 'right')\n ) {\n <lib-chart-legend\n class=\"scatter-chart-shell__legend\"\n [class.scatter-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--scatter-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n</div>\n","import {\n APP_ID,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n StatusTimelineConfig,\n StatusTimelineEvent,\n StatusTimelineItem,\n StatusTimelineStatus,\n StatusTimelineTooltipContext,\n} from './status-timeline.types';\n\ninterface RenderedTimelineItem {\n source: StatusTimelineItem;\n originalIndex: number;\n start: Date;\n end: Date;\n durationMs: number;\n status: StatusTimelineStatus;\n accessibleLabel: string;\n tooltip: string;\n tooltipLines: string[];\n}\n\nconst DEFAULT_COLORS = ['#2f8f3a', '#d0a020', '#dc8a1f', '#a43b35', '#d9dde1'];\nconst DEFAULT_UNKNOWN_STATUS: StatusTimelineStatus = {\n value: '__unknown__',\n label: 'Unknown status',\n color: '#7b8491',\n};\nlet statusTimelineInstanceSequence = 0;\n\n@Component({\n selector: 'lib-status-timeline',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './status-timeline.html',\n styleUrl: './status-timeline.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StatusTimelineComponent implements OnChanges {\n @Input({ required: true }) config!: StatusTimelineConfig;\n\n @Output() chartEvent = new EventEmitter<StatusTimelineEvent>();\n\n renderedItems: readonly RenderedTimelineItem[] = [];\n legendStatuses: readonly StatusTimelineStatus[] = [];\n activeIndex: number | null = null;\n timelineMinWidth = '100%';\n resolvedStartLabel = '';\n resolvedEndLabel = '';\n readonly tooltipIdPrefix = `${inject(APP_ID).replace(/[^a-zA-Z0-9_-]/g, '-')}-status-timeline-${statusTimelineInstanceSequence++}-tooltip`;\n private dimmedStatuses = new Set<string>();\n\n get legendPosition(): 'top' | 'bottom' | 'left' | 'right' {\n return this.config.legendPosition ?? 'bottom';\n }\n\n get legendLayout(): 'horizontal' | 'vertical' {\n return (\n this.config.legendLayout ??\n (this.legendPosition === 'left' || this.legendPosition === 'right' ? 'vertical' : 'horizontal')\n );\n }\n\n get legendScrollable(): boolean {\n return this.config.legendScrollable !== false;\n }\n\n get legendInteractive(): boolean {\n return this.config.legendInteractive !== false;\n }\n\n get legendAlign(): 'start' | 'center' | 'end' | 'space-between' {\n if (this.config.legendAlign === 'left') return 'start';\n if (this.config.legendAlign === 'right') return 'end';\n return this.config.legendAlign ?? 'start';\n }\n\n get legendLabelAlign(): 'left' | 'center' | 'right' {\n return this.config.legendLabelAlign ?? 'left';\n }\n\n get legendLabelJustify(): 'flex-start' | 'center' | 'flex-end' {\n if (this.legendLabelAlign === 'center') return 'center';\n if (this.legendLabelAlign === 'right') return 'flex-end';\n return 'flex-start';\n }\n\n get endpointLabelsAlign(): 'start' | 'center' | 'end' | 'space-between' {\n if (this.config.endpointLabelsAlign === 'left') return 'start';\n if (this.config.endpointLabelsAlign === 'right') return 'end';\n return this.config.endpointLabelsAlign ?? 'space-between';\n }\n\n get legendMaxWidth(): string | null {\n return this.config.legendMaxWidth ?? null;\n }\n\n get legendMaxHeight(): string | null {\n return this.config.legendMaxHeight ?? (this.legendLayout === 'vertical' ? '240px' : null);\n }\n\n ngOnChanges(): void {\n this.rebuild();\n }\n\n activate(index: number): void {\n this.activeIndex = index;\n }\n\n deactivate(index: number): void {\n if (this.activeIndex === index) this.activeIndex = null;\n }\n\n selectItem(item: RenderedTimelineItem): void {\n this.chartEvent.emit({\n type: 'itemClick',\n item: item.source,\n index: item.originalIndex,\n });\n }\n\n isStatusSelected(value: string): boolean {\n return !this.dimmedStatuses.has(value);\n }\n\n toggleStatus(status: StatusTimelineStatus): void {\n if (!this.legendInteractive) return;\n\n if (this.dimmedStatuses.has(status.value)) {\n this.dimmedStatuses.delete(status.value);\n } else {\n this.dimmedStatuses.add(status.value);\n }\n\n this.chartEvent.emit({\n type: 'legendToggle',\n status,\n selected: this.isStatusSelected(status.value),\n });\n }\n\n tooltipId(index: number): string {\n return `${this.tooltipIdPrefix}-${index}`;\n }\n\n trackItem(_: number, item: RenderedTimelineItem): string {\n return `${item.start.getTime()}-${item.end.getTime()}-${item.status.value}-${item.originalIndex}`;\n }\n\n trackStatus(_: number, status: StatusTimelineStatus): string {\n return status.value;\n }\n\n private rebuild(): void {\n const config = this.config;\n if (!config) {\n this.renderedItems = [];\n this.legendStatuses = [];\n return;\n }\n\n const statusMap = new Map<string, StatusTimelineStatus>();\n this.legendStatuses = (config.statuses ?? []).map((status, index) => {\n const resolved = { ...status, color: status.color ?? DEFAULT_COLORS[index % DEFAULT_COLORS.length] };\n statusMap.set(resolved.value, resolved);\n return resolved;\n });\n const configuredStatusValues = new Set(this.legendStatuses.map((status) => status.value));\n this.dimmedStatuses = new Set(\n [...this.dimmedStatuses].filter((value) => configuredStatusValues.has(value)),\n );\n\n const unknownStatus: StatusTimelineStatus = {\n ...DEFAULT_UNKNOWN_STATUS,\n ...config.unknownStatus,\n value: config.unknownStatus?.value ?? DEFAULT_UNKNOWN_STATUS.value,\n label: config.unknownStatus?.label ?? DEFAULT_UNKNOWN_STATUS.label,\n color: config.unknownStatus?.color ?? DEFAULT_UNKNOWN_STATUS.color,\n };\n\n this.renderedItems = (config.data ?? [])\n .map((item, originalIndex) => {\n const start = this.toDate(item.start);\n const end = this.toDate(item.end);\n if (!start || !end || end.getTime() <= start.getTime()) return null;\n\n const status = statusMap.get(item.status) ?? {\n ...unknownStatus,\n value: item.status,\n label: config.unknownStatus?.label ?? `Unknown (${item.status})`,\n };\n const durationMs = end.getTime() - start.getTime();\n const context: StatusTimelineTooltipContext = { item, status, start, end, durationMs };\n const tooltip = config.tooltipFormatter?.(context) ?? this.defaultTooltip(context);\n const accessibleLabel = [item.label, status.label, tooltip].filter(Boolean).join('. ');\n\n const tooltipLines = tooltip\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n\n return {\n source: item,\n originalIndex,\n start,\n end,\n durationMs,\n status,\n tooltip,\n tooltipLines,\n accessibleLabel,\n };\n })\n .filter((item): item is RenderedTimelineItem => item !== null)\n .sort((left, right) => left.start.getTime() - right.start.getTime());\n\n const gap = Math.max(config.segmentGap ?? 2, 0);\n const minimum = Math.max(config.minSegmentWidth ?? 6, 1);\n const requiredWidth = this.renderedItems.length * minimum + Math.max(this.renderedItems.length - 1, 0) * gap;\n this.timelineMinWidth = `max(100%, ${requiredWidth}px)`;\n this.resolvedStartLabel = config.startLabel ?? this.formatDate(this.renderedItems[0]?.start);\n this.resolvedEndLabel = config.endLabel ?? this.formatDate(this.renderedItems.at(-1)?.end);\n this.activeIndex = null;\n }\n\n private toDate(value: Date | string): Date | null {\n const date = value instanceof Date ? new Date(value.getTime()) : new Date(value);\n return Number.isFinite(date.getTime()) ? date : null;\n }\n\n private formatDate(date?: Date): string {\n if (!date) return '';\n return (\n this.config.dateFormatter?.(date) ??\n new Intl.DateTimeFormat(undefined, { dateStyle: 'medium' }).format(date)\n );\n }\n\n private defaultTooltip(context: StatusTimelineTooltipContext): string {\n const duration =\n this.config.durationFormatter?.(context.durationMs) ?? this.formatDuration(context.durationMs);\n return `${context.status.label}. Start: ${this.formatDate(context.start)}. End: ${this.formatDate(context.end)}. Duration: ${duration}`;\n }\n\n private formatDuration(durationMs: number): string {\n const totalMinutes = Math.max(Math.round(durationMs / 60_000), 1);\n const days = Math.floor(totalMinutes / 1_440);\n const hours = Math.floor((totalMinutes % 1_440) / 60);\n const minutes = totalMinutes % 60;\n return [days ? `${days}d` : '', hours ? `${hours}h` : '', minutes || (!days && !hours) ? `${minutes}m` : '']\n .filter(Boolean)\n .join(' ');\n }\n}\n","<section\n class=\"status-timeline\"\n [style.--status-timeline-gap]=\"config.segmentGap ?? 2\"\n [style.--status-timeline-min-segment-width]=\"config.minSegmentWidth ?? 6\"\n [style.--status-timeline-dimmed-opacity]=\"config.legendDimmedOpacity ?? 0.3\"\n [class.status-timeline--legend-top]=\"legendPosition === 'top'\"\n [class.status-timeline--legend-bottom]=\"legendPosition === 'bottom'\"\n [class.status-timeline--legend-left]=\"legendPosition === 'left'\"\n [class.status-timeline--legend-right]=\"legendPosition === 'right'\"\n [attr.aria-label]=\"config.ariaLabel || 'Status timeline'\"\n>\n @if (config.loading) {\n <div class=\"status-timeline__state\" role=\"status\" aria-live=\"polite\">\n <span class=\"status-timeline__skeleton\" aria-hidden=\"true\"></span>\n <span>{{ config.loadingLabel || 'Loading timeline' }}</span>\n </div>\n } @else if (config.error) {\n <div class=\"status-timeline__state status-timeline__state--error\" role=\"alert\">\n {{ config.error }}\n </div>\n } @else if (!renderedItems.length) {\n <div class=\"status-timeline__state\" role=\"status\">\n {{ config.emptyLabel || 'No timeline data available' }}\n </div>\n } @else {\n <div class=\"status-timeline__visual\">\n <div class=\"status-timeline__scroll\" tabindex=\"0\" aria-label=\"Scrollable status intervals\">\n <div class=\"status-timeline__content\" [style.min-width]=\"timelineMinWidth\">\n <div class=\"status-timeline__segments\" role=\"list\">\n @for (item of renderedItems; track trackItem($index, item); let index = $index) {\n <button\n type=\"button\"\n role=\"listitem\"\n class=\"status-timeline__segment\"\n [class.status-timeline__segment--dimmed]=\"!isStatusSelected(item.status.value)\"\n [style.background-color]=\"item.status.color\"\n [style.flex-grow]=\"item.durationMs\"\n [attr.aria-label]=\"item.accessibleLabel\"\n [attr.aria-describedby]=\"config.showTooltip !== false ? tooltipId(index) : null\"\n (mouseenter)=\"activate(index)\"\n (mouseleave)=\"deactivate(index)\"\n (focus)=\"activate(index)\"\n (blur)=\"deactivate(index)\"\n (click)=\"selectItem(item)\"\n >\n <span class=\"status-timeline__sr-only\">{{ item.status.label }}</span>\n @if (config.showTooltip !== false && activeIndex === index) {\n <span\n class=\"status-timeline__tooltip\"\n [class.status-timeline__tooltip--start]=\"index === 0\"\n [class.status-timeline__tooltip--end]=\"index === renderedItems.length - 1\"\n [id]=\"tooltipId(index)\"\n role=\"tooltip\"\n >\n @for (line of item.tooltipLines; track $index) {\n <span\n class=\"status-timeline__tooltip-line\"\n [class.status-timeline__tooltip-title]=\"$index === 0\"\n >{{ line }}</span\n >\n }\n </span>\n }\n </button>\n }\n </div>\n\n @if (config.showEndpointLabels !== false) {\n <div\n class=\"status-timeline__labels\"\n [class.status-timeline__labels--start]=\"endpointLabelsAlign === 'start'\"\n [class.status-timeline__labels--center]=\"endpointLabelsAlign === 'center'\"\n [class.status-timeline__labels--end]=\"endpointLabelsAlign === 'end'\"\n aria-hidden=\"true\"\n >\n <span>{{ resolvedStartLabel }}</span>\n <span>{{ resolvedEndLabel }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n\n @if (config.showLegend !== false && legendStatuses.length) {\n <div\n class=\"status-timeline__legend-row\"\n [class.status-timeline__legend-row--vertical]=\"legendLayout === 'vertical'\"\n >\n <ul\n class=\"status-timeline__legend\"\n [class.status-timeline__legend--vertical]=\"legendLayout === 'vertical'\"\n [class.status-timeline__legend--scrollable]=\"legendScrollable\"\n [class.status-timeline__legend--align-center]=\"legendAlign === 'center'\"\n [class.status-timeline__legend--align-end]=\"legendAlign === 'end'\"\n [class.status-timeline__legend--align-space-between]=\"legendAlign === 'space-between'\"\n [style.max-width]=\"legendMaxWidth\"\n [style.max-height]=\"legendMaxHeight\"\n aria-label=\"Status legend\"\n tabindex=\"0\"\n >\n @for (status of legendStatuses; track trackStatus($index, status)) {\n <li\n class=\"status-timeline__legend-item\"\n [class.status-timeline__legend-item--dimmed]=\"!isStatusSelected(status.value)\"\n [style.justify-content]=\"legendLabelJustify\"\n [style.text-align]=\"legendLabelAlign\"\n >\n <button\n type=\"button\"\n class=\"status-timeline__legend-button\"\n role=\"switch\"\n [attr.aria-checked]=\"isStatusSelected(status.value)\"\n [attr.aria-label]=\"\n (isStatusSelected(status.value) ? 'Hide ' : 'Show ') + status.label + ' intervals'\n \"\n [disabled]=\"!legendInteractive\"\n (click)=\"toggleStatus(status)\"\n >\n <span\n class=\"status-timeline__legend-swatch\"\n [style.background-color]=\"status.color\"\n aria-hidden=\"true\"\n ></span>\n <span>{{ status.label }}</span>\n </button>\n </li>\n }\n </ul>\n @if (config.legendNote) {\n <p class=\"status-timeline__legend-note\">{{ config.legendNote }}</p>\n }\n </div>\n }\n }\n</section>\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport * as echarts from 'echarts/core';\nimport { EChartsCoreOption } from 'echarts';\nimport { GaugeChart as GaugeChartEchart } from 'echarts/charts';\nimport {\n GaugeChartConfig,\n GaugeConditionalRule,\n GaugeRuleUnit,\n GaugeStyleConfig,\n GaugeTextCase,\n GaugeTypographyConfig,\n} from '../../modal/charts-modal';\nimport { GraphicComponent, TooltipComponent, TitleComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { Charts } from '../../service/charts';\n\necharts.use([GaugeChartEchart, GraphicComponent, TooltipComponent, TitleComponent, CanvasRenderer]);\n\ninterface GaugeRule {\n operator: '<=' | '<' | 'between' | '>=' | '>';\n value: number;\n valueTo?: number;\n unit: 'number' | 'percentage';\n color: string;\n opacity?: number;\n}\n\ntype GaugeColorStop = [number, string];\n\ninterface GaugeSegment {\n start: number;\n end: number;\n color: string;\n}\nconst DEFAULT_GAUGE_CENTER: [string, string] = ['50%', '84%'];\nconst DEFAULT_GAUGE_RADIUS = '140%';\n\n@Component({\n selector: 'lib-gauge-chart',\n imports: [NgxEchartsDirective],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './gauge-chart.html',\n styleUrl: './gauge-chart.scss',\n})\nexport class GaugeChart implements OnChanges, OnDestroy {\n @Input() config: GaugeChartConfig = {};\n @Input() theme: any;\n @Input() events: string[] = [];\n\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n\n chartOption: EChartsCoreOption = {};\n chartInstance!: echarts.ECharts;\n private chartResizeObserver?: ResizeObserver;\n private previousReactiveSignature = '';\n\n // Keep direct construction backwards compatible for consumers that build chart\n // options outside Angular's DI context. Angular still injects the root service\n // when this class is created as a component.\n constructor(private chartService: Charts = new Charts()) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n\n this.buildOption();\n }\n\n ngDoCheck(): void {\n const signature = JSON.stringify({\n config: this.config,\n events: this.events,\n });\n\n if (signature !== this.previousReactiveSignature) {\n this.previousReactiveSignature = signature;\n this.buildOption();\n }\n }\n\n private buildOption(): void {\n if (this.config.option) {\n this.chartOption = this.applyTargetPointerSizing(this.config.option);\n\n if (this.chartInstance) {\n this.chartInstance.setOption(this.chartOption, true);\n }\n\n return;\n }\n\n const style = this.config.style;\n const optionSeries = this.resolveOptionSeriesOption(this.config.option);\n const echartStyleOption = this.mergeGaugeSeriesOptions(\n this.resolveStyleSeriesOption(style),\n optionSeries,\n this.config.seriesOption,\n );\n const rawValue = this.resolveMetricValue();\n const numericValues = this.resolveMetricValues();\n const autoMin = this.calculateAutoMin(numericValues);\n const autoMax = this.niceNumberUp(Math.abs(rawValue || 1) * 1.5);\n const configuredMin = this.toFiniteNumber(this.config.min);\n const configuredMax = this.toFiniteNumber(this.config.max);\n const min = configuredMin ?? autoMin;\n const max = configuredMax !== undefined && configuredMax > min ? configuredMax : autoMax;\n const isPercentage = this.config.midValueType === 'percentage';\n const range = max - min || 1;\n const displayMin = isPercentage ? 0 : min;\n const displayMax = isPercentage ? 100 : max;\n const displayValue = isPercentage\n ? this.clamp(((rawValue - min) / range) * 100, 0, 100)\n : rawValue;\n const targetValue = this.toFiniteNumber(this.config.targetValue);\n const displayTarget =\n targetValue === undefined\n ? undefined\n : isPercentage\n ? this.clamp(((targetValue - min) / range) * 100, 0, 100)\n : targetValue;\n const colorStops = this.resolveColorStops(min, max);\n const activeColor = this.resolveActiveColor(rawValue, min, max);\n const conditionalFormatting = style?.conditionalFormatting;\n const borderThickness = this.clamp(style?.borderThickness ?? 0, 0, 20);\n const barWidth = this.resolveGaugeWidth(echartStyleOption, style?.barWidth ?? 38);\n const compactNumber = style?.compactNumber !== false;\n const precision = Math.floor(this.clamp(style?.decimalPrecision ?? 1, 0, 6));\n const showMidValue = this.config.showMidValue === true;\n const midValueCount = Math.max(Math.floor(this.config.midValueCount ?? 0), 0);\n const splitNumber = showMidValue && midValueCount > 0 ? midValueCount + 1 : 1;\n const metricNameWidth = this.resolveMetricNameWidth();\n const metricNameFontSize = this.clamp(style?.metricNameTypography?.fontSize ?? 10, 8, 40);\n const metricValueFontSize = this.clamp(style?.metricValueTypography?.fontSize ?? 14, 8, 40);\n const metricName = this.truncateMetricName(\n this.applyTextCase(this.config.name ?? 'Value', style?.metricNameTypography?.case),\n metricNameWidth,\n metricNameFontSize,\n );\n const metricValue = this.applyTextCase(\n this.formatNumber(rawValue, compactNumber, precision),\n style?.metricValueTypography?.case,\n );\n\n const generatedGaugeSeries = {\n type: 'gauge',\n min: displayMin,\n max: displayMax,\n startAngle: 180,\n endAngle: 0,\n center: [...DEFAULT_GAUGE_CENTER],\n radius: DEFAULT_GAUGE_RADIUS,\n splitNumber,\n progress: {\n show: conditionalFormatting?.type !== 'rule',\n roundCap: false,\n width: barWidth,\n itemStyle: {\n color: conditionalFormatting?.enabled\n ? {\n type: 'linear',\n x: 0,\n y: 0,\n x2: 1,\n y2: 0,\n colorStops: colorStops.map((c: any) => {\n return { offset: c?.[0], color: c?.[1] };\n }),\n }\n : activeColor,\n borderWidth: borderThickness,\n borderColor: borderThickness ? activeColor : undefined,\n },\n },\n axisLine: {\n roundCap: false,\n lineStyle: {\n width: barWidth,\n ...(conditionalFormatting?.enabled &&\n conditionalFormatting?.type === 'rule' && {\n color: this.getGaugeAxisColors(\n conditionalFormatting?.rules || [],\n displayMin,\n displayMax,\n displayValue,\n style?.barColor?.color || '#4378ea', // progress color\n style?.rangeColor?.color || '#f2f3f5', // axis color\n ),\n }),\n opacity: 1,\n },\n },\n pointer: {\n show: false,\n },\n title: {\n show: false,\n },\n anchor: {\n show: false,\n },\n axisTick: {\n show: showMidValue,\n distance: this.config.midValuePosition === 'inside' ? -22 : 0,\n length: 4,\n lineStyle: {\n color: '#6b7280',\n width: 1,\n },\n },\n splitLine: {\n show: showMidValue,\n distance: this.config.midValuePosition === 'inside' ? -24 : 0,\n length: 8,\n lineStyle: {\n color: '#6b7280',\n width: 1,\n },\n },\n axisLabel: {\n show: this.config.showAxis !== false || showMidValue,\n distance: this.config.midValuePosition === 'inside' ? -36 : 10,\n color: '#111827',\n fontSize: 10,\n align: 'center',\n verticalAlign: 'middle',\n formatter: (value: number) =>\n this.axisLabelFormatter(value, displayMin, displayMax, showMidValue),\n rich: {\n gaugeLabel: {\n padding: showMidValue ? [0, 0, 0, 0] : [16, 0, 0, 0],\n color: '#434a51',\n fontWeight: 600,\n align: 'center',\n verticalAlign: 'middle',\n },\n },\n },\n detail: {\n offsetCenter: [0, '-10%'],\n color: '#252a31',\n fontSize: 14,\n formatter: () => `{label|${metricName}}\\n{value|${metricValue}}`,\n rich: {\n label: {\n ...this.resolveTypography(style?.metricNameTypography, {\n color: '#6b7280',\n fontSize: 10,\n }),\n // A metric can be a single, very long word. Give the rich-text\n // token a responsive width so ECharts truncates it instead of\n // drawing it beyond the gauge's bounds.\n width: metricNameWidth,\n overflow: 'truncate',\n ellipsis: '...',\n align: 'center',\n // Keep each rich-text line tall enough for its current font size.\n // Fixed line heights make the name and value overlap at large sizes.\n lineHeight: this.resolveTypographyLineHeight(metricNameFontSize),\n },\n value: {\n ...this.resolveTypography(style?.metricValueTypography, {\n color: '#252a31',\n fontSize: 14,\n }),\n lineHeight: this.resolveTypographyLineHeight(metricValueFontSize),\n },\n },\n },\n data: [{ value: displayValue, name: this.config.name ?? 'Value' }],\n };\n const gaugeSeries = this.mergeGaugeSeriesOptions(generatedGaugeSeries, echartStyleOption);\n gaugeSeries['type'] = 'gauge';\n gaugeSeries['min'] = displayMin;\n gaugeSeries['max'] = displayMax;\n gaugeSeries['data'] = [{ value: displayValue, name: this.config.name ?? 'Value' }];\n // Typography set through `style` is the public, dynamic API. Preserve any\n // other detail options from `seriesOption`, but do not let its rich-text\n // defaults override the metric name/value styles.\n gaugeSeries['detail'] = this.deepMerge(\n gaugeSeries['detail'] ?? {},\n generatedGaugeSeries.detail,\n );\n const targetPointer = this.calculateTargetPointerGeometry(gaugeSeries);\n\n const generatedChartOption = {\n backgroundColor: this.config.backgroundColor ?? 'transparent',\n title: {\n show: this.config.showTitle ?? !!this.config.title,\n text: this.config.title,\n left: 'center',\n },\n tooltip: {\n show: this.config.showTooltip ?? true,\n trigger: 'item',\n formatter: (params: any) =>\n this.config.tooltipFormatter\n ? this.config.tooltipFormatter(params, this.config)\n : this.defaultTooltipFormatter(rawValue),\n },\n series: [\n gaugeSeries,\n ...(this.config.showTarget && displayTarget !== undefined\n ? [\n {\n type: 'gauge',\n min: displayMin,\n max: displayMax,\n startAngle: 180,\n endAngle: 0,\n center: gaugeSeries['center'] ?? [...DEFAULT_GAUGE_CENTER],\n radius: gaugeSeries['radius'] ?? DEFAULT_GAUGE_RADIUS,\n axisLine: {\n lineStyle: {\n width: 0,\n color: [[1, 'transparent']],\n },\n },\n pointer: {\n show: true,\n icon: 'rect',\n ...targetPointer,\n itemStyle: {\n color: '#374151',\n },\n },\n progress: { show: false },\n axisTick: { show: false },\n splitLine: { show: false },\n axisLabel: { show: false },\n title: { show: false },\n detail: { show: false },\n data: [{ value: displayTarget, name: 'Target' }],\n },\n ]\n : []),\n ],\n };\n this.chartOption = this.mergeChartOptions(generatedChartOption, this.config.option);\n\n if (this.chartInstance) {\n this.chartInstance.setOption(this.chartOption, true);\n }\n }\n\n private getRuleColor(rule: GaugeRule): string {\n return this.applyOpacity(rule.color, rule.opacity ?? 100);\n }\n private clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n }\n private segmentsToColorStops(\n segments: GaugeSegment[],\n min: number,\n max: number,\n ): GaugeColorStop[] {\n return segments\n .filter((segment) => segment.end > segment.start)\n .map((segment) => [this.clamp((segment.end - min) / (max - min), 0, 1), segment.color]);\n }\n private convertToGaugeValue(\n value: number,\n unit: GaugeRule['unit'],\n min: number,\n max: number,\n actualValue: number,\n ): number {\n if (unit === 'percentage') {\n const percentage = this.clamp(value, 0, 100);\n\n return min + ((actualValue - min) * percentage) / 100;\n }\n\n return value;\n }\n private convertRuleToSegment(\n rule: GaugeRule,\n min: number,\n max: number,\n actualValue: number,\n ): GaugeSegment | null {\n const value = this.convertToGaugeValue(rule.value, rule.unit, min, max, actualValue);\n\n const valueTo =\n rule.valueTo !== undefined\n ? this.convertToGaugeValue(rule.valueTo, rule.unit, min, max, actualValue)\n : undefined;\n\n switch (rule.operator) {\n case '<=':\n case '<':\n return {\n start: min,\n end: value,\n color: this.getRuleColor(rule),\n };\n\n case 'between':\n if (valueTo === undefined) {\n return null;\n }\n\n return {\n start: Math.min(value, valueTo),\n end: Math.max(value, valueTo),\n color: this.getRuleColor(rule),\n };\n\n case '>=':\n case '>':\n return {\n start: value,\n end: max,\n color: this.getRuleColor(rule),\n };\n\n default:\n return null;\n }\n }\n private getGaugeAxisColors(\n rules: any[],\n min: number,\n max: number,\n actualValue: number,\n progressColor: string,\n axisColor: string,\n ): GaugeColorStop[] {\n if (max <= min) {\n return [[1, axisColor]];\n }\n\n const actual = this.clamp(actualValue, min, max);\n\n // No progress\n if (actual <= min) {\n return [[1, axisColor]];\n }\n\n const ruleSegments = rules\n .map((rule) => this.convertRuleToSegment(rule, min, max, actual))\n .filter((segment): segment is GaugeSegment => segment !== null);\n\n /*\n * Rules are allowed ONLY inside actual progress.\n */\n const clippedRules = ruleSegments\n .map((rule) => ({\n ...rule,\n start: Math.max(rule.start, min),\n end: Math.min(rule.end, actual),\n }))\n .filter((rule) => rule.end > rule.start);\n\n /*\n * Build the complete gauge from min → max.\n */\n const segments: GaugeSegment[] = [];\n\n let cursor = min;\n\n /*\n * Sort rules by start position.\n */\n clippedRules.sort((a, b) => a.start - b.start);\n\n for (const rule of clippedRules) {\n /*\n * Gap before rule:\n * use progress color.\n */\n if (rule.start > cursor) {\n segments.push({\n start: cursor,\n end: rule.start,\n color: progressColor,\n });\n }\n\n /*\n * Rule area.\n */\n const start = Math.max(cursor, rule.start);\n\n if (rule.end > start) {\n segments.push({\n start,\n end: rule.end,\n color: rule.color,\n });\n\n cursor = Math.max(cursor, rule.end);\n }\n }\n\n /*\n * Remaining area inside actual progress.\n * Use progress color.\n */\n if (cursor < actual) {\n segments.push({\n start: cursor,\n end: actual,\n color: progressColor,\n });\n }\n\n /*\n * Everything after actual progress:\n * use axis color.\n */\n if (actual < max) {\n segments.push({\n start: actual,\n end: max,\n color: axisColor,\n });\n }\n\n return this.segmentsToColorStops(segments, min, max);\n }\n\n private applyOpacity(color: string, opacity: number): string {\n const alpha = this.clamp(opacity, 0, 100) / 100;\n\n if (color.startsWith('#')) {\n let hex = color.slice(1);\n\n if (hex.length === 3) {\n hex = hex\n .split('')\n .map((char) => char + char)\n .join('');\n }\n\n if (hex.length === 6) {\n const number = parseInt(hex, 16);\n\n const r = (number >> 16) & 255;\n const g = (number >> 8) & 255;\n const b = number & 255;\n\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n }\n\n return color;\n }\n\n onChartInit(ec: echarts.ECharts): void {\n this.chartInstance = ec;\n this.buildOption();\n this.bindEvents();\n this.observeChartResize();\n }\n\n /**\n * Calculates all target-marker geometry in one place. A gauge pointer icon\n * is drawn from `offsetCenter - length` through `offsetCenter`, so the\n * offset must account for the inner edge while length covers the band and\n * both edge overflows. Use the widest band because progress and axisLine\n * may be configured independently.\n */\n private calculateTargetPointerGeometry(\n bandSeries: Record<string, any>,\n ): Record<string, number | string | [number, number | string]> {\n const barWidth = this.resolveGaugeWidth(bandSeries, 38, true);\n const edgeOverflow = Math.max(6, Math.round(barWidth * 0.25));\n const pointerLength = barWidth + edgeOverflow * 2;\n const radius = this.resolveGaugeRadius(bandSeries['radius']);\n\n if (radius === undefined) {\n return {\n width: 10,\n length: pointerLength,\n offsetCenter: [0, '-91%'],\n };\n }\n\n return {\n width: 10,\n length: pointerLength,\n offsetCenter: [0, -(radius - barWidth - edgeOverflow)],\n };\n }\n\n private resolveGaugeRadius(radiusOption: unknown): number | undefined {\n if (!this.chartInstance) return undefined;\n\n const radius = this.toFiniteNumber(radiusOption);\n if (radius !== undefined) return radius;\n if (typeof radiusOption !== 'string' || !radiusOption.endsWith('%')) return undefined;\n\n const percentage = this.toFiniteNumber(radiusOption.slice(0, -1));\n if (percentage === undefined) return undefined;\n return (\n (Math.min(this.chartInstance.getWidth(), this.chartInstance.getHeight()) / 2) *\n (percentage / 100)\n );\n }\n\n private observeChartResize(): void {\n if (typeof ResizeObserver === 'undefined' || !this.chartInstance) return;\n\n this.chartResizeObserver?.disconnect();\n this.chartResizeObserver = new ResizeObserver(() => {\n if (this.chartInstance.isDisposed()) return;\n this.chartInstance.resize();\n this.buildOption();\n });\n this.chartResizeObserver.observe(this.chartInstance.getDom());\n }\n\n private bindEvents(): void {\n if (!this.chartInstance) return;\n this.chartInstance.off();\n\n this.events.forEach((eventName) => {\n this.chartInstance.on(eventName, (params: any) => {\n if (eventName === 'contextmenu' && params.event?.event) {\n params.event.event.preventDefault();\n }\n\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n });\n }\n\n private resolveOptionSeriesOption(\n option: Record<string, any> | undefined,\n ): Record<string, any> | undefined {\n const series = option?.['series'];\n if (!Array.isArray(series)) return undefined;\n return series.find((seriesOption) => seriesOption?.type === 'gauge') ?? series[0];\n }\n\n /**\n * Custom ECharts options can provide a second, transparent gauge series for\n * the target marker. Apply the same automatic marker sizing used by the\n * generated option without changing any of the caller's other settings.\n */\n private applyTargetPointerSizing(option: Record<string, any>): Record<string, any> {\n if (!Array.isArray(option['series'])) return option;\n\n const bandSeries = option['series'].find(\n (seriesOption: Record<string, any>) =>\n seriesOption?.['type'] === 'gauge' && !this.isTargetPointerSeries(seriesOption),\n );\n if (!bandSeries) return option;\n\n const targetPointer = this.calculateTargetPointerGeometry(bandSeries);\n let changed = false;\n const series = option['series'].map((seriesOption: Record<string, any>) => {\n if (!this.isTargetPointerSeries(seriesOption)) return seriesOption;\n\n changed = true;\n return {\n ...seriesOption,\n center: bandSeries['center'] ?? seriesOption['center'] ?? [...DEFAULT_GAUGE_CENTER],\n radius: bandSeries['radius'] ?? seriesOption['radius'] ?? DEFAULT_GAUGE_RADIUS,\n pointer: {\n ...seriesOption['pointer'],\n ...targetPointer,\n },\n };\n });\n\n return changed ? { ...option, series } : option;\n }\n\n private isTargetPointerSeries(seriesOption: Record<string, any>): boolean {\n const axisLineWidth = this.toFiniteNumber(seriesOption?.['axisLine']?.['lineStyle']?.['width']);\n return (\n seriesOption?.['type'] === 'gauge' &&\n seriesOption?.['pointer']?.['show'] === true &&\n seriesOption?.['progress']?.['show'] !== true &&\n (seriesOption?.['axisLine']?.['show'] === false || axisLineWidth === 0)\n );\n }\n\n private resolveStyleSeriesOption(style: GaugeStyleConfig | undefined): Record<string, any> {\n if (!style) return {};\n\n return {\n ...(style.axisLine ? { axisLine: style.axisLine } : {}),\n ...(style.progress ? { progress: style.progress } : {}),\n ...(style.detail ? { detail: style.detail } : {}),\n ...(style.axisLabel ? { axisLabel: style.axisLabel } : {}),\n ...(style.pointer ? { pointer: style.pointer } : {}),\n ...(style.axisTick ? { axisTick: style.axisTick } : {}),\n ...(style.splitLine ? { splitLine: style.splitLine } : {}),\n ...(style.anchor ? { anchor: style.anchor } : {}),\n };\n }\n\n private resolveGaugeWidth(\n seriesOption: Record<string, any>,\n fallback: number,\n visibleOnly = false,\n ): number {\n const axisLineWidth = this.toFiniteNumber(seriesOption?.['axisLine']?.['lineStyle']?.['width']);\n const progressWidth = this.toFiniteNumber(seriesOption?.['progress']?.['width']);\n const configuredWidths = [\n ...(!visibleOnly || seriesOption?.['axisLine']?.['show'] !== false ? [axisLineWidth] : []),\n ...(!visibleOnly || seriesOption?.['progress']?.['show'] === true ? [progressWidth] : []),\n ].filter((width): width is number => width !== undefined);\n // Cover whichever configured band is thicker. Fall back only when neither\n // width is supplied, so a deliberately thin gauge is not enlarged.\n return this.clamp(configuredWidths.length ? Math.max(...configuredWidths) : fallback, 1, 80);\n }\n\n private mergeChartOptions(\n generatedOption: Record<string, any>,\n customOption: Record<string, any> | undefined,\n ): Record<string, any> {\n if (!customOption) return generatedOption;\n\n const { series, ...customTopLevelOption } = customOption;\n const mergedOption = this.deepMerge({ ...generatedOption }, customTopLevelOption);\n\n if (Array.isArray(series)) {\n const generatedSeries = Array.isArray(generatedOption['series'])\n ? generatedOption['series']\n : [];\n mergedOption['series'] = series.map((seriesOption, index) =>\n this.deepMerge({ ...(generatedSeries[index] ?? {}) }, seriesOption),\n );\n\n if (generatedSeries.length > series.length) {\n mergedOption['series'].push(...generatedSeries.slice(series.length));\n }\n }\n\n return mergedOption;\n }\n\n private mergeGaugeSeriesOptions(\n ...options: Array<Record<string, any> | undefined>\n ): Record<string, any> {\n return options.reduce<Record<string, any>>(\n (merged, option) => this.deepMerge(merged, option),\n {},\n );\n }\n\n private deepMerge(\n target: Record<string, any>,\n source: Record<string, any> | undefined,\n ): Record<string, any> {\n if (!source) return target;\n\n Object.entries(source).forEach(([key, value]) => {\n if (this.isPlainObject(value) && this.isPlainObject(target[key])) {\n target[key] = this.deepMerge({ ...target[key] }, value);\n return;\n }\n\n target[key] = value;\n });\n\n return target;\n }\n\n private isPlainObject(value: unknown): value is Record<string, any> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n }\n\n private axisLabelFormatter(\n value: number,\n min: number,\n max: number,\n showMidValue: boolean,\n ): string {\n if (this.config.showAxis === false && !showMidValue) return '';\n\n const rounded =\n this.config.midValueType === 'percentage' ? Math.round(value) : this.niceNumber(value);\n if (!showMidValue && value !== min && value !== max) return '';\n const label =\n this.config.midValueType === 'percentage'\n ? `${rounded}%`\n : this.formatNumber(rounded, this.config.style?.compactNumber !== false, 0);\n const endpointOffset = showMidValue ? '' : '\\n';\n return `{gaugeLabel|${endpointOffset}${label}}`;\n }\n\n private resolveMetricValue(): number {\n const configured = this.toFiniteNumber(this.config.value);\n if (configured !== undefined) return configured;\n\n const values = this.resolveMetricValues();\n if (!values.length) return 0;\n return values.reduce((sum, value) => sum + value, 0);\n }\n\n private resolveMetricNameWidth(): number {\n // `buildOption` also runs before chart initialisation. Use a conservative\n // fallback then recalculate from the actual chart dimensions on init and\n // resize.\n const chartWidth = this.chartInstance?.getWidth();\n if (!chartWidth) return 200;\n\n return this.clamp(Math.floor(chartWidth * 0.7), 80, 400);\n }\n\n private truncateMetricName(name: string, availableWidth: number, fontSize: number): string {\n // Rich-text overflow is not reliably applied to gauge detail text in all\n // ECharts renderers. Trim the string before it reaches the formatter so a\n // long word cannot escape the gauge even when it contains no spaces.\n const averageCharacterWidth = Math.max(fontSize, 8) * 0.62;\n const maximumCharacters = Math.max(Math.floor(availableWidth / averageCharacterWidth), 1);\n\n return name.length > maximumCharacters\n ? `${name.slice(0, Math.max(maximumCharacters - 3, 1))}...`\n : name;\n }\n\n private resolveTypographyLineHeight(fontSize: number): number {\n return Math.ceil(fontSize * 1.3);\n }\n\n private resolveMetricValues(): number[] {\n return (this.config.data ?? [])\n .map((value) => this.toFiniteNumber(value))\n .filter((value): value is number => value !== undefined);\n }\n\n private calculateAutoMin(values: number[]): number {\n const minValue = values.length ? Math.min(...values) : this.resolveMetricValue();\n if (minValue >= 0) return 0;\n return this.niceNumberDown(minValue);\n }\n\n private resolveColorStops(min: number, max: number): Array<[number, string]> {\n const conditional = this.config.style?.conditionalFormatting;\n if (conditional?.enabled) {\n return conditional.type === 'gradient'\n ? this.resolveGradientStops(min, max)\n : this.resolveRuleStops(min, max, conditional.rules ?? []);\n }\n\n const barColor = this.config.style?.barColor;\n const rangeColor = this.config.style?.rangeColor;\n if (barColor?.color || rangeColor?.color) {\n const rawValue = this.resolveMetricValue();\n const valueRatio = this.clamp((rawValue - min) / (max - min || 1), 0, 1);\n const active = this.withOpacity(\n barColor?.color ?? this.config.colors?.[0] ?? '#4378ea',\n barColor?.opacity ?? 100,\n );\n const inactive = this.withOpacity(\n rangeColor?.color ?? this.config.colors?.[1] ?? '#f2f3f5',\n rangeColor?.opacity ?? 100,\n );\n return [\n [valueRatio, active],\n [1, inactive],\n ];\n }\n\n const colors = this.config.colors ?? ['#4378ea'];\n if (colors.length === 1) return [[1, colors[0]]];\n\n return colors.map((color, index) => {\n const stop = colors.length === 1 ? 1 : (index + 1) / colors.length;\n return [this.clamp(stop, 0, 1), color];\n });\n }\n\n private defaultTooltipFormatter(value: number): string {\n const rows = Object.entries(this.config.tooltipFields ?? {})\n .map(\n ([key, fieldValue]) =>\n `${key}: ${\n typeof fieldValue === 'number' && this.config.tooltipCompactValue\n ? this.chartService.compactValueFormat(fieldValue)\n : (fieldValue ?? '-')\n }`,\n )\n .join('<br/>');\n const formattedValue = this.config.tooltipCompactValue\n ? this.chartService.compactValueFormat(\n Number(this.formatNumber(value, false, this.config.style?.decimalPrecision ?? 1)),\n )\n : this.formatNumber(value, false, this.config.style?.decimalPrecision ?? 1);\n const tooltipValueRow = `${this.config.name ?? 'Value'}: ${formattedValue}`;\n return rows ? `${tooltipValueRow}<br/>${rows}` : tooltipValueRow;\n }\n\n private resolveActiveColor(value: number, min: number, max: number): string {\n const conditional = this.config.style?.conditionalFormatting;\n if (conditional?.enabled && conditional.type === 'rule') {\n const matchedRule = (conditional.rules ?? []).find((rule) =>\n this.matchesRule(value, min, max, rule),\n );\n if (matchedRule?.color)\n return this.withOpacity(matchedRule.color, matchedRule.opacity ?? 100);\n }\n\n if (conditional?.enabled && conditional.type === 'gradient') {\n const stops = this.resolveGradientStops(min, max);\n const ratio = this.clamp((value - min) / (max - min || 1), 0, 1);\n const stop = stops.find(([position]) => ratio <= position) ?? stops[stops.length - 1];\n if (stop) return stop[1];\n }\n\n return this.withOpacity(\n this.config.style?.barColor?.color ?? this.config.colors?.[0] ?? '#4378ea',\n this.config.style?.barColor?.opacity ?? 100,\n );\n }\n\n private resolveRuleStops(\n min: number,\n max: number,\n rules: GaugeConditionalRule[],\n ): Array<[number, string]> {\n const fallback = this.withOpacity(\n this.config.style?.rangeColor?.color ?? this.config.colors?.[1] ?? '#f2f3f5',\n this.config.style?.rangeColor?.opacity ?? 100,\n );\n const segments = rules\n .map((rule) => this.ruleToSegment(rule, min, max))\n .filter((segment): segment is { start: number; end: number; color: string } => !!segment)\n .sort((a, b) => a.start - b.start);\n\n if (!segments.length) return [[1, fallback]];\n\n const stops: Array<[number, string]> = [];\n let cursor = 0;\n segments.forEach((segment) => {\n if (segment.start > cursor) stops.push([segment.start, fallback]);\n stops.push([segment.end, segment.color]);\n cursor = Math.max(cursor, segment.end);\n });\n if (cursor < 1) stops.push([1, fallback]);\n\n return stops;\n }\n\n private ruleToSegment(\n rule: GaugeConditionalRule,\n min: number,\n max: number,\n ): { start: number; end: number; color: string } | undefined {\n const firstValue = this.ruleValueToNumber(rule.value, rule.unit, min, max);\n const secondValue = this.ruleValueToNumber(rule.valueTo, rule.unit, min, max);\n if (firstValue === undefined) return undefined;\n\n const ratio = this.clamp((firstValue - min) / (max - min || 1), 0, 1);\n const secondRatio =\n secondValue === undefined ? ratio : this.clamp((secondValue - min) / (max - min || 1), 0, 1);\n const color = this.withOpacity(rule.color ?? '#23964a', rule.opacity ?? 100);\n\n switch (rule.operator) {\n case '>=':\n case '>':\n return { start: ratio, end: 1, color };\n case '<=':\n case '<':\n return { start: 0, end: ratio, color };\n case '=':\n return { start: Math.max(ratio - 0.01, 0), end: Math.min(ratio + 0.01, 1), color };\n case 'between':\n return { start: Math.min(ratio, secondRatio), end: Math.max(ratio, secondRatio), color };\n default:\n return undefined;\n }\n }\n\n private matchesRule(\n value: number,\n min: number,\n max: number,\n rule: GaugeConditionalRule,\n ): boolean {\n const firstValue = this.ruleValueToNumber(rule.value, rule.unit, min, max);\n const secondValue = this.ruleValueToNumber(rule.valueTo, rule.unit, min, max);\n if (firstValue === undefined) return false;\n\n const firstMatches = this.matchesRuleCondition(value, firstValue, rule.operator, secondValue);\n if (!firstMatches) return false;\n if (rule.secondCondition) {\n const second = this.ruleValueToNumber(\n rule.secondCondition.value,\n rule.secondCondition.unit,\n min,\n max,\n );\n return (\n second !== undefined &&\n this.matchesRuleCondition(value, second, rule.secondCondition.operator)\n );\n }\n return true;\n }\n\n private matchesRuleCondition(\n value: number,\n firstValue: number,\n operator: GaugeConditionalRule['operator'],\n secondValue?: number,\n ): boolean {\n switch (operator) {\n case '>=':\n return value >= firstValue;\n case '>':\n return value > firstValue;\n case '<=':\n return value <= firstValue;\n case '<':\n return value < firstValue;\n case '=':\n return value === firstValue;\n case 'between':\n return (\n secondValue !== undefined &&\n value >= Math.min(firstValue, secondValue) &&\n value <= Math.max(firstValue, secondValue)\n );\n default:\n return false;\n }\n }\n\n private resolveGradientStops(min?: number, max?: number): Array<[number, string]> {\n const points = [...(this.config.style?.conditionalFormatting?.gradientPoints ?? [])].sort(\n (a, b) => a.position - b.position,\n );\n const normalized = points.length\n ? points\n : [\n { position: 0, color: '#ff1010', opacity: 100 },\n { position: 50, color: '#f8c232', opacity: 100 },\n { position: 100, color: '#23964a', opacity: 100 },\n ];\n const stylePoints = this.config.style?.conditionalFormatting?.reverseGradient\n ? [...normalized].reverse()\n : normalized;\n\n const stops = normalized.map((point, index) => {\n const from = this.gradientValueToRatio(point.valueFrom, point.unit, min ?? 0, max ?? 1);\n const position = from ?? this.clamp(point.position / 100, 0, 1);\n return [\n position,\n this.withOpacity(\n stylePoints[index]?.color ?? this.config.colors?.[index] ?? '#4378ea',\n stylePoints[index]?.opacity ?? 100,\n ),\n ] as [number, string];\n });\n\n normalized.forEach((point, index) => {\n const to = this.gradientValueToRatio(point.valueTo, point.unit, min ?? 0, max ?? 1);\n if (to !== undefined && stops[index]) stops[index][0] = Math.max(stops[index][0], to);\n });\n\n return stops.sort((a, b) => a[0] - b[0]);\n }\n\n private gradientValueToRatio(\n value: number | null | undefined,\n unit: GaugeRuleUnit | undefined,\n min: number,\n max: number,\n ): number | undefined {\n const numeric = this.toFiniteNumber(value);\n if (numeric === undefined) return undefined;\n const actual =\n unit === 'percentage' ? min + (this.clamp(numeric, 0, 100) / 100) * (max - min) : numeric;\n return this.clamp((actual - min) / (max - min || 1), 0, 1);\n }\n\n private ruleValueToNumber(\n value: number | null | undefined,\n unit: GaugeConditionalRule['unit'],\n min: number,\n max: number,\n ): number | undefined {\n const numericValue = this.toFiniteNumber(value);\n if (numericValue === undefined) return undefined;\n if (unit !== 'percentage') return numericValue;\n return min + (this.clamp(numericValue, 0, 100) / 100) * (max - min);\n }\n\n private resolveTypography(\n typography: GaugeTypographyConfig | undefined,\n fallback: { color: string; fontSize: number },\n ): Record<string, string | number | undefined> {\n return {\n color: this.withOpacity(typography?.color ?? fallback.color, typography?.opacity ?? 100),\n fontSize: this.clamp(typography?.fontSize ?? fallback.fontSize, 8, 40),\n fontFamily: typography?.fontFamily,\n fontWeight: typography?.bold ? 'bold' : undefined,\n fontStyle: typography?.italic ? 'italic' : undefined,\n textDecoration: typography?.underline ? 'underline' : undefined,\n };\n }\n\n private niceNumber(value: number): number {\n if (value === 0) return 0;\n const sign = value < 0 ? -1 : 1;\n const absolute = Math.abs(value);\n const exponent = Math.floor(Math.log10(absolute));\n const fraction = absolute / Math.pow(10, exponent);\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return sign * niceFraction * Math.pow(10, exponent);\n }\n\n private niceNumberUp(value: number): number {\n if (value === 0) return 0;\n const sign = value < 0 ? -1 : 1;\n const absolute = Math.abs(value);\n const exponent = Math.floor(Math.log10(absolute));\n const fraction = absolute / Math.pow(10, exponent);\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return sign * niceFraction * Math.pow(10, exponent);\n }\n\n private niceNumberDown(value: number): number {\n if (value === 0) return 0;\n const sign = value < 0 ? -1 : 1;\n const absolute = Math.abs(value);\n const exponent = Math.floor(Math.log10(absolute));\n const fraction = absolute / Math.pow(10, exponent);\n const niceFraction = fraction < 2 ? 1 : fraction < 5 ? 2 : 5;\n return sign * niceFraction * Math.pow(10, exponent);\n }\n\n private formatNumber(value: number, compact = true, precision = 1): string {\n if (!compact) {\n return new Intl.NumberFormat('en-US', {\n maximumFractionDigits: Math.max(Math.floor(precision), 0),\n }).format(value);\n }\n\n const absolute = Math.abs(value);\n const units = [\n { value: 1e9, suffix: 'B' },\n { value: 1e6, suffix: 'M' },\n { value: 1e3, suffix: 'k' },\n ];\n const unit = units.find((item) => absolute >= item.value);\n if (!unit) return Number.isInteger(value) ? String(value) : value.toFixed(2);\n\n const scaled = value / unit.value;\n const formatted = scaled.toFixed(precision);\n return `${formatted}${unit.suffix}`;\n }\n\n private applyTextCase(value: string, textCase: GaugeTextCase = 'none'): string {\n switch (textCase) {\n case 'uppercase':\n return value.toUpperCase();\n case 'lowercase':\n return value.toLowerCase();\n case 'capitalize':\n return value.replace(/\\b\\w/g, (char) => char.toUpperCase());\n case 'none':\n default:\n return value;\n }\n }\n\n private withOpacity(color: string, opacity: number): string {\n const alpha = this.clamp(opacity, 0, 100) / 100;\n if (alpha >= 1) return color;\n\n const hex = color.replace('#', '');\n if (![3, 6].includes(hex.length)) return color;\n const fullHex =\n hex.length === 3\n ? hex\n .split('')\n .map((part) => `${part}${part}`)\n .join('')\n : hex;\n const value = Number.parseInt(fullHex, 16);\n const red = (value >> 16) & 255;\n const green = (value >> 8) & 255;\n const blue = value & 255;\n return `rgba(${red}, ${green}, ${blue}, ${alpha})`;\n }\n\n private toFiniteNumber(value: unknown): number | undefined {\n if (typeof value === 'number') return Number.isFinite(value) ? value : undefined;\n if (typeof value === 'string' && value.trim()) {\n const numericValue = Number(value);\n return Number.isFinite(numericValue) ? numericValue : undefined;\n }\n return undefined;\n }\n\n ngOnDestroy(): void {\n this.chartResizeObserver?.disconnect();\n if (this.chartInstance) {\n this.chartInstance.off();\n this.chartInstance.dispose();\n }\n }\n}\n","<div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\"\n></div>\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Inject,\n Input,\n Output,\n PLATFORM_ID,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\n\nimport { CustomChart } from 'echarts/charts';\nimport {\n GridComponent,\n TooltipComponent,\n LegendComponent,\n TitleComponent,\n ToolboxComponent,\n DataZoomInsideComponent,\n DataZoomComponent,\n} from 'echarts/components';\n\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { GanttChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\nimport { RightClickCard } from '../right-click-card';\nimport { ChartLegendComponent } from '../chart-legend';\nimport type { ChartLegendEvent } from '../chart-legend';\n\necharts.use([\n CustomChart,\n GridComponent,\n TooltipComponent,\n LegendComponent,\n CanvasRenderer,\n TitleComponent,\n ToolboxComponent,\n DataZoomInsideComponent,\n DataZoomComponent,\n]);\nconst DEFAULT_ROW_HEIGHT = 40;\nconst VERTICAL_ZOOM_RIGHT = 30;\nconst EXPANDED_GROUP_ICON =\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='m2.5 4 3.5 3.5L9.5 4' fill='none' stroke='%23374151' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E\";\nconst COLLAPSED_GROUP_ICON =\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='m4 2.5 3.5 3.5L4 9.5' fill='none' stroke='%23374151' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E\";\n\n@Component({\n selector: 'lib-gantt-chart',\n imports: [NgxEchartsDirective, RightClickCard, ChartLegendComponent],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './gantt-chart.html',\n styleUrl: './gantt-chart.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GanttChart {\n @Input() config: GanttChartConfig = { series: [], groups: [] };\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() contextMenuOptions: any[] = [];\n @Input() showContextMenu: boolean = false;\n\n @Output() contextMenuClick = new EventEmitter<any>();\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n @Output() legendEvent = new EventEmitter<ChartLegendEvent>();\n @ViewChild('chartContainer') chartContainer?: ElementRef<HTMLElement>;\n chartOption: EChartsCoreOption = {};\n chartInstance!: ECharts;\n cardPosition = { x: 0, y: 0 };\n openCard = false;\n private verticalZoomLayoutFrame?: number;\n private isApplyingVerticalZoomLayout = false;\n private horizontalZoomLayoutFrame?: number;\n private isApplyingHorizontalZoomLayout = false;\n private zoomWheelHandler?: (event: any) => void;\n private dataZoomPointerDownHandler?: (event: any) => void;\n private nativeDragStartHandler?: (event: DragEvent) => void;\n private nativePointerEndHandler?: () => void;\n private dataZoomGestureActive = false;\n private readonly isBrowser: boolean;\n\n visibleRows: any[] = [];\n rowIndexMap: Map<any, number> = new Map();\n\n constructor(\n private chartService: Charts,\n private cdr: ChangeDetectorRef,\n @Inject(DOCUMENT) private readonly document: Document,\n @Inject(PLATFORM_ID) platformId: object,\n ) {\n this.isBrowser = isPlatformBrowser(platformId);\n }\n\n get deafultColors(): string[] {\n return this.chartService.defaultLegendColors;\n }\n\n get rowHeight(): number {\n const configuredHeight = Number(this.config?.rowHeight ?? DEFAULT_ROW_HEIGHT);\n return Number.isFinite(configuredHeight) ? Math.max(1, configuredHeight) : DEFAULT_ROW_HEIGHT;\n }\n\n private get xAxisMinLabelGap(): number {\n const configuredGap = Number(this.config?.xAxisMinLabelGap ?? 100);\n return Number.isFinite(configuredGap) ? Math.max(1, configuredGap) : 100;\n }\n\n private get yAxisLabelWidth(): number {\n const chartWidth =\n this.chartContainer?.nativeElement.getBoundingClientRect().width ||\n this.chartInstance?.getWidth?.() ||\n 360;\n\n return Math.max(100, Math.min(240, Math.round(chartWidth * 0.22)));\n }\n\n private getAggregationLabelCount(): number {\n const values: number[] = [];\n const addTimestamp = (value: unknown) => {\n const timestamp = value instanceof Date ? value.getTime() : new Date(value as any).getTime();\n if (Number.isFinite(timestamp)) values.push(timestamp);\n };\n\n for (const series of this.config?.series ?? []) {\n for (const item of series.data ?? []) {\n addTimestamp(item.start);\n addTimestamp(item.end);\n }\n }\n\n addTimestamp(this.config?.xAxis?.min);\n addTimestamp(this.config?.xAxis?.max);\n\n if (!values.length) return 1;\n\n const min = Math.min(...values);\n const max = Math.max(...values);\n if (max <= min) return 1;\n\n const start = new Date(min);\n const end = new Date(max);\n switch (this.config?.XAxisAggregation ?? 'day') {\n case 'year':\n return end.getFullYear() - start.getFullYear() + 1;\n case 'quarter':\n return (\n (end.getFullYear() - start.getFullYear()) * 4 +\n Math.floor(end.getMonth() / 3) -\n Math.floor(start.getMonth() / 3) +\n 1\n );\n case 'month':\n return (\n (end.getFullYear() - start.getFullYear()) * 12 + end.getMonth() - start.getMonth() + 1\n );\n case 'week':\n return (\n Math.floor((this.getIsoWeekStart(end) - this.getIsoWeekStart(start)) / 604_800_000) + 1\n );\n case 'hour':\n return Math.floor((max - min) / 3_600_000) + 1;\n case 'minute':\n return Math.floor((max - min) / 60_000) + 1;\n case 'day':\n default:\n return Math.floor((this.getUtcDayStart(end) - this.getUtcDayStart(start)) / 86_400_000) + 1;\n }\n }\n\n private getUtcDayStart(date: Date): number {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate());\n }\n\n private getAggregationMinInterval(): number {\n switch (this.config?.XAxisAggregation ?? 'day') {\n case 'year':\n return 365 * 86_400_000;\n case 'quarter':\n return 90 * 86_400_000;\n case 'month':\n return 28 * 86_400_000;\n case 'week':\n return 7 * 86_400_000;\n case 'hour':\n return 3_600_000;\n case 'minute':\n return 60_000;\n case 'day':\n default:\n return 86_400_000;\n }\n }\n\n private getIsoWeekStart(date: Date): number {\n const weekStart = new Date(this.getUtcDayStart(date));\n const dayOfWeek = weekStart.getUTCDay() || 7;\n weekStart.setUTCDate(weekStart.getUTCDate() - dayOfWeek + 1);\n return weekStart.getTime();\n }\n\n private resolveSeriesColor(series: any, index: number): string {\n const colors = this.config?.colors || this.chartService.defaultLegendColors;\n return series?.itemStyle?.color ?? colors[index % Math.max(colors.length, 1)] ?? '#64748b';\n }\n\n private createBarLabel(\n label: string | number,\n rect: { x: number; y: number; width: number; height: number },\n ): any {\n const position = this.config?.barLabelConfig?.position ?? 'inside';\n const margin = 4;\n let x = rect.x + rect.width / 2;\n let y = rect.y + rect.height / 2;\n let align: 'left' | 'center' | 'right' = 'center';\n let verticalAlign: 'top' | 'middle' | 'bottom' = 'middle';\n\n switch (position) {\n case 'top':\n y = rect.y - margin;\n verticalAlign = 'bottom';\n break;\n case 'bottom':\n y = rect.y + rect.height + margin;\n verticalAlign = 'top';\n break;\n case 'left':\n x = rect.x - margin;\n align = 'right';\n break;\n case 'right':\n x = rect.x + rect.width + margin;\n align = 'left';\n break;\n case 'insideLeft':\n x = rect.x + margin;\n align = 'left';\n break;\n case 'insideRight':\n x = rect.x + rect.width - margin;\n align = 'right';\n break;\n case 'insideTop':\n y = rect.y + margin;\n verticalAlign = 'top';\n break;\n case 'insideBottom':\n y = rect.y + rect.height - margin;\n verticalAlign = 'bottom';\n break;\n case 'insideTopLeft':\n x = rect.x + margin;\n y = rect.y + margin;\n align = 'left';\n verticalAlign = 'top';\n break;\n case 'insideTopRight':\n x = rect.x + rect.width - margin;\n y = rect.y + margin;\n align = 'right';\n verticalAlign = 'top';\n break;\n case 'insideBottomLeft':\n x = rect.x + margin;\n y = rect.y + rect.height - margin;\n align = 'left';\n verticalAlign = 'bottom';\n break;\n case 'insideBottomRight':\n x = rect.x + rect.width - margin;\n y = rect.y + rect.height - margin;\n align = 'right';\n verticalAlign = 'bottom';\n break;\n }\n\n const isInside = position.startsWith('inside');\n return {\n type: 'text',\n silent: true,\n style: {\n text: String(label),\n x,\n y,\n align,\n verticalAlign,\n fill: isInside ? '#ffffff' : '#333333',\n fontSize: 12,\n width: isInside ? Math.max(rect.width - margin * 2, 0) : undefined,\n overflow: isInside ? 'truncate' : undefined,\n },\n };\n }\n get hasSideLegendWidth(): boolean {\n return this.isSideLegend && !!this.config?.customLegend?.maxWidth;\n }\n\n get legendShellMaxWidth(): string | null {\n return this.isSideLegend ? (this.config?.customLegend?.maxWidth ?? null) : null;\n }\n\n private get isSideLegend(): boolean {\n return (\n this.config?.customLegend?.position === 'left' ||\n this.config?.customLegend?.position === 'right'\n );\n }\n\n /* ------------------ CHANGE HANDLING ------------------ */\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n\n this.buildOption(!!this.chartInstance && !this.chartInstance.isDisposed() && !changes['theme']);\n }\n\n /* ------------------ DESTROY ------------------ */\n\n ngOnDestroy(): void {\n if (this.verticalZoomLayoutFrame) {\n cancelAnimationFrame(this.verticalZoomLayoutFrame);\n }\n if (this.horizontalZoomLayoutFrame) {\n cancelAnimationFrame(this.horizontalZoomLayoutFrame);\n }\n this.unbindDataZoomDragIsolation();\n\n // ngx-echarts can dispose the ECharts instance before this component's\n // destroy hook runs. A disposed instance no longer has a ZRender surface,\n // so do not try to remove the wheel listener from it.\n if (this.chartInstance && !this.chartInstance.isDisposed()) {\n if (this.zoomWheelHandler) {\n this.chartInstance.getZr()?.off('mousewheel', this.zoomWheelHandler);\n }\n this.chartInstance.off();\n this.chartInstance.dispose();\n }\n }\n\n /* ------------------ OPTION BUILDER ------------------ */\n private buildOption(preserveDataZoom = false) {\n this.visibleRows = this.getVisibleCategories();\n this.rowIndexMap = new Map(this.visibleRows.map((row, index) => [row.name, index]));\n const selected = this.readLegendSelected();\n const selectedMode = this.config?.customLegend?.selectionMode === 'exclusive' ? 'single' : true;\n const yAxisLabelWidth = this.yAxisLabelWidth;\n\n const option: EChartsCoreOption = {\n animation: false,\n backgroundColor: 'transparent',\n color: this.config?.colors || this.chartService.defaultLegendColors,\n title: {\n show: this.config?.showTitle ?? !!this.config?.title,\n text: this.config?.title,\n left: this.config?.titlePosition || 'center',\n },\n\n tooltip: {\n show: this.config?.showTooltip ?? true,\n trigger: 'item',\n backgroundColor: 'transparent', // remove default box\n borderWidth: 0,\n padding: 0,\n confine: true,\n formatter: (params: any) =>\n this.config?.tooltipFormatter\n ? this.config?.tooltipFormatter(params)\n : this.chartService.ganttTooltipFormatter(params, this.config),\n },\n legend: {\n show: false,\n data: (this.config?.series ?? []).map((series) => series.name),\n selected,\n selectedMode,\n },\n\n grid: {\n left: this.config?.gridLeft ?? 0,\n right: this.config?.gridRight ?? 30,\n bottom: this.config?.gridBottom ?? 30,\n top: this.config?.gridTop ?? 0,\n },\n\n xAxis: {\n type: 'time',\n position: 'top',\n nameLocation: 'center',\n\n ...(this.config?.xAxis || {}),\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n\n axisLine: {\n show: this.config?.showXAxisLine ?? true,\n ...(this.config?.xAxis?.axisLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.xAxis?.axisLine?.lineStyle || {}),\n },\n },\n axisTick: {\n show: false,\n ...(this.config?.xAxis?.axisTick || {}),\n },\n axisLabel: {\n show: this.config?.showXAxisLabel ?? true,\n color: '#434A51',\n fontSize: 12,\n hideOverlap: false,\n formatter: (value: number) => this.chartService.formatGanttDate(value, this.config),\n ...(!this.config?.xAxis?.axisLabel?.rotate && {\n alignMinLabel: 'left',\n alignMaxLabel: 'right',\n }),\n ...(this.config?.xAxis?.axisLabel || {}),\n },\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n overflow: 'truncate',\n width: this.resolveAxisNameWidth('x'),\n ...(this.config?.xAxis?.nameTextStyle || {}),\n },\n splitLine: {\n show: this.config?.showXAxisSplitLine ?? true,\n ...(this.config?.xAxis?.splitLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.xAxis?.splitLine?.lineStyle || {}),\n },\n },\n },\n\n yAxis: [\n {\n show: true,\n type: 'category',\n triggerEvent: true,\n inverse: true,\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n data: this.visibleRows.map((row) => row.name),\n ...(this.config?.yAxis || {}),\n axisLine: {\n show: this.config?.showYAxisLine ?? true,\n ...(this.config?.yAxis?.axisLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.yAxis?.axisLine?.lineStyle || {}),\n },\n },\n axisTick: {\n show: false,\n ...(this.config?.yAxis?.axisTick || {}),\n },\n nameTextStyle: {\n color: '#434A51',\n fontSize: 14,\n fontWeight: 400,\n overflow: 'truncate',\n width: this.resolveAxisNameWidth('y'),\n ...(this.config?.yAxis?.nameTextStyle || {}),\n },\n splitLine: {\n show: this.config?.showYAxisSplitLine ?? true,\n ...(this.config?.yAxis?.splitLine || {}),\n lineStyle: {\n color: '#C0C2C5',\n width: 1,\n ...(this.config?.yAxis?.splitLine?.lineStyle || {}),\n },\n },\n splitArea: {\n ...(this.config?.yAxis?.splitArea || {}),\n show: this.config?.zebraStripping?.show ?? false,\n areaStyle: {\n ...(this.config?.yAxis?.splitArea?.areaStyle || {}),\n color: [this.config?.zebraStripping?.color ?? '#F1F5F9', 'transparent'],\n },\n },\n axisLabel: {\n show: this.config?.showYAxisLabel ?? true,\n color: '#434A51',\n width: yAxisLabelWidth,\n overflow: 'truncate',\n align: 'right',\n fontSize: 12,\n formatter: (value: number) => {\n const row = this.visibleRows.find((item) => item.name === value);\n\n if (row?.type === 'group') {\n const iconStyle = row.expanded ? 'expandedIcon' : 'collapsedIcon';\n return `{${iconStyle}| } {group|${row.name}}`;\n }\n return `{category|${row?.name}}`;\n },\n rich: {\n expandedIcon: {\n width: 12,\n height: 12,\n verticalAlign: 'middle',\n backgroundColor: { image: EXPANDED_GROUP_ICON },\n },\n collapsedIcon: {\n width: 12,\n height: 12,\n verticalAlign: 'middle',\n backgroundColor: { image: COLLAPSED_GROUP_ICON },\n },\n group: {\n fontWeight: 'bold',\n color: '#1f2937',\n },\n category: {\n color: '#333',\n },\n },\n ...(this.config?.yAxis?.axisLabel || {}),\n },\n },\n ],\n\n series: [\n // Tasks\n ...(this.config?.series || []).map((s, seriesIndex) => ({\n type: 'custom',\n z: 2,\n clip: false,\n renderItem: (params: any, api: any) => {\n const categoryIndex = api.value(0);\n const start = api.value(1);\n const end = api.value(2);\n\n const startPoint = api.coord([start, categoryIndex]);\n const endPoint = api.coord([end, categoryIndex]);\n\n // BAR_HEIGHT_PERCENT is always limited to 1–100\n const barHeightPercent = Math.max(0, Math.min(this.config?.barHeight || 50, 100));\n\n // Calculate bar height relative to the row height\n const barHeight = (this.rowHeight * barHeightPercent) / 100;\n\n const clipped = echarts.graphic.clipRectByRect(\n {\n x: startPoint[0],\n y: startPoint[1] - barHeight / 2,\n width: endPoint[0] - startPoint[0],\n height: barHeight,\n },\n {\n x: params.coordSys.x,\n y: params.coordSys.y,\n width: params.coordSys.width,\n height: params.coordSys.height,\n },\n );\n\n if (!clipped) {\n return null;\n }\n\n // Custom series do not apply data-item itemStyle automatically. Resolve it\n // through the render API so a task's itemStyle takes precedence over its series.\n const itemStyle = api.style();\n const bar = {\n type: 'rect',\n shape: {\n x: clipped.x,\n y: clipped.y,\n width: clipped.width,\n height: clipped.height,\n r: this.config?.borderRadius ?? 4,\n },\n style: {\n ...itemStyle,\n fill: itemStyle.fill ?? this.resolveSeriesColor(s, seriesIndex),\n },\n };\n const label = api.value(3);\n\n if (!this.config?.barLabelConfig?.show || label === undefined || label === null) {\n return bar;\n }\n\n return {\n type: 'group',\n children: [bar, this.createBarLabel(label, clipped)],\n };\n },\n\n encode: {\n x: [1, 2],\n y: 0,\n },\n ...s,\n data: this.buildVisibleData(this.visibleRows, s.data),\n })),\n ],\n toolbox: {\n right: -1000,\n feature: {\n dataZoom: {},\n },\n },\n dataZoom: [\n {\n type: 'slider',\n id: 'horizontalSlider',\n xAxisIndex: 0,\n height: 8,\n bottom: 10,\n start: 0,\n end: 100,\n show: false,\n handleSize: 0,\n showDetail: false,\n brushSelect: false,\n backgroundColor: '#F0F0F0',\n fillerColor: '#81858A',\n borderColor: 'transparent',\n borderRadius: 100,\n moveHandleSize: 0,\n zoomLock: true,\n // Keep tasks that intersect the viewport so renderItem can clip their hidden portion.\n filterMode: 'weakFilter',\n },\n {\n type: 'inside',\n id: 'insideX',\n xAxisIndex: 0,\n zoomOnMouseWheel: false,\n moveOnMouseMove: true,\n moveOnMouseWheel: false,\n zoomLock: true,\n filterMode: 'weakFilter',\n },\n {\n type: 'slider',\n yAxisIndex: 0,\n id: 'verticalSlider',\n width: 8,\n right: 10,\n top: 20,\n bottom: 30,\n start: 0,\n end: 100,\n handleSize: 0,\n showDetail: false,\n brushSelect: false,\n backgroundColor: '#F0F0F0',\n fillerColor: '#81858A',\n borderColor: 'transparent',\n borderRadius: 100,\n moveHandleSize: 0,\n zoomLock: true,\n },\n {\n type: 'inside',\n id: 'insideY',\n yAxisIndex: 0,\n zoomOnMouseWheel: false,\n moveOnMouseMove: true,\n moveOnMouseWheel: false,\n zoomLock: true,\n },\n ],\n };\n\n if (preserveDataZoom) {\n // Updating [options] makes ngx-echarts replace the complete option. That\n // recreates dataZoom and causes the slider to flash during parent config\n // changes. Merge every other option directly and leave dataZoom under\n // ECharts' control, including its current slider position and handlers.\n const { dataZoom: _dataZoom, ...optionWithoutDataZoom } = option as any;\n this.chartInstance.setOption(optionWithoutDataZoom);\n return;\n }\n\n this.chartOption = option;\n }\n\n onLegendEvent(event: ChartLegendEvent): void {\n this.legendEvent.emit(event);\n this.chartEvent.emit({\n type: `legend:${event.type}`,\n data: event,\n });\n }\n\n /* ------------------ EVENTS ------------------ */\n private bindEvents() {\n if (!this.chartInstance) return;\n this.chartInstance.off();\n\n // Existing chart events\n this.events.forEach((eventName) => {\n if (eventName === 'contextmenu') {\n this.chartInstance.on('contextmenu', (params: any) => {\n const event = params?.event?.event;\n if (event) {\n event.preventDefault();\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n };\n\n this.openCard = true;\n\n this.cdr.markForCheck();\n }\n this.chartEvent.emit({\n type: 'contextmenu',\n data: params,\n });\n });\n const zr = this.chartInstance.getZr();\n zr.on('contextmenu', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n\n nativeEvent.preventDefault();\n\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: nativeEvent.clientX - rect.left,\n y: nativeEvent.clientY - rect.top,\n };\n\n this.openCard = true;\n this.cdr.markForCheck();\n\n this.chartEvent.emit({\n type: 'contextmenu',\n data: { ...zrEvent, isZrEvent: true },\n });\n }\n });\n } else if (eventName === 'click') {\n this.chartInstance.on('click', (params: any) => {\n if (\n params.componentType === 'yAxis' &&\n params.type === 'click' &&\n params.targetType === 'axisLabel'\n ) {\n const groupName = params.value;\n const group = (this.config?.groups || []).find((group) => group.name === groupName);\n if (!group) {\n return;\n }\n\n group.expanded = !(group.expanded ?? true);\n\n this.updateChart();\n } else {\n this.chartEvent.emit({\n type: 'click',\n data: params,\n });\n }\n });\n const zr = this.chartInstance.getZr();\n zr.on('click', (zrEvent: any) => {\n if (!zrEvent.target) {\n const nativeEvent = zrEvent.event;\n nativeEvent.preventDefault();\n this.chartEvent.emit({\n type: 'blur',\n data: { ...zrEvent, type: 'blur' },\n });\n }\n });\n } else {\n this.chartInstance.on(eventName, (params: any) => {\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n }\n });\n }\n\n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n this.closeCard();\n }\n\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n\n /* ------------------ INIT ------------------ */\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n this.bindEvents();\n this.bindZoomWheel();\n this.bindDataZoomDragIsolation();\n this.chartInstance.on('finished', () => {\n this.scheduleVerticalZoomLayout();\n this.scheduleHorizontalZoomLayout();\n });\n this.chartInstance.on('datazoom', () => {\n this.scheduleVerticalZoomLayout();\n this.scheduleHorizontalZoomLayout();\n });\n queueMicrotask(() => {\n this.refreshAxisNameSpace();\n this.scheduleVerticalZoomLayout();\n this.scheduleHorizontalZoomLayout();\n });\n }\n\n private bindZoomWheel(): void {\n const zr = this.chartInstance.getZr();\n if (this.zoomWheelHandler) {\n zr.off('mousewheel', this.zoomWheelHandler);\n }\n\n this.zoomWheelHandler = (event: any) => {\n const nativeEvent = event?.event as WheelEvent | undefined;\n const deltaX = Number(nativeEvent?.deltaX ?? 0);\n const deltaY = Number(nativeEvent?.deltaY ?? -(event?.wheelDelta ?? 0));\n const isHorizontalGesture = !!nativeEvent?.shiftKey || Math.abs(deltaX) > Math.abs(deltaY);\n const delta = isHorizontalGesture ? deltaX || deltaY : deltaY;\n if (!Number.isFinite(delta) || delta === 0) return;\n\n const moved = isHorizontalGesture\n ? this.moveDataZoomWindow('horizontalSlider', 'insideX', delta)\n : this.moveDataZoomWindow('verticalSlider', 'insideY', delta) ||\n this.moveDataZoomWindow('horizontalSlider', 'insideX', delta);\n\n if (moved) {\n nativeEvent?.preventDefault();\n nativeEvent?.stopPropagation();\n }\n };\n zr.on('mousewheel', this.zoomWheelHandler);\n }\n\n /**\n * A native draggable ancestor starts its drag after the slider's mousedown\n * event. Since the native `dragstart` targets that ancestor rather than the\n * canvas, suppress it at document capture phase while a data-zoom gesture is\n * active. This keeps the fix inside the chart library and leaves parent drag\n * behaviour unchanged everywhere else.\n */\n private bindDataZoomDragIsolation(): void {\n if (!this.chartInstance || !this.isBrowser) return;\n\n const zr = this.chartInstance.getZr();\n if (this.dataZoomPointerDownHandler) {\n zr.off('mousedown', this.dataZoomPointerDownHandler);\n }\n\n this.dataZoomPointerDownHandler = (event: any) => {\n this.dataZoomGestureActive = this.isDataZoomTarget(event?.target);\n };\n zr.on('mousedown', this.dataZoomPointerDownHandler);\n\n if (!this.nativeDragStartHandler) {\n this.nativeDragStartHandler = (event: DragEvent) => {\n if (!this.dataZoomGestureActive) return;\n\n event.preventDefault();\n event.stopPropagation();\n this.dataZoomGestureActive = false;\n };\n this.document.addEventListener('dragstart', this.nativeDragStartHandler, true);\n }\n\n if (!this.nativePointerEndHandler) {\n this.nativePointerEndHandler = () => {\n this.dataZoomGestureActive = false;\n };\n this.document.addEventListener('pointerup', this.nativePointerEndHandler, true);\n this.document.addEventListener('pointercancel', this.nativePointerEndHandler, true);\n }\n }\n\n private unbindDataZoomDragIsolation(): void {\n if (this.chartInstance && !this.chartInstance.isDisposed() && this.dataZoomPointerDownHandler) {\n this.chartInstance.getZr()?.off('mousedown', this.dataZoomPointerDownHandler);\n }\n if (this.nativeDragStartHandler) {\n this.document.removeEventListener('dragstart', this.nativeDragStartHandler, true);\n }\n if (this.nativePointerEndHandler) {\n this.document.removeEventListener('pointerup', this.nativePointerEndHandler, true);\n this.document.removeEventListener('pointercancel', this.nativePointerEndHandler, true);\n }\n this.dataZoomPointerDownHandler = undefined;\n this.nativeDragStartHandler = undefined;\n this.nativePointerEndHandler = undefined;\n this.dataZoomGestureActive = false;\n }\n\n private isDataZoomTarget(target: any): boolean {\n for (let element = target; element; element = element.parent) {\n if (element.__ecComponentInfo?.mainType === 'dataZoom') return true;\n }\n return false;\n }\n\n private moveDataZoomWindow(sliderId: string, insideId: string, delta: number): boolean {\n const option = this.chartInstance.getOption() as {\n dataZoom?: Array<Record<string, any>>;\n };\n const slider = option.dataZoom?.find((zoom) => zoom['id'] === sliderId);\n if (!slider?.['show'] || slider['disabled']) return false;\n\n const start = Number(slider['start'] ?? 0);\n const end = Number(slider['end'] ?? 100);\n const windowSize = end - start;\n if (!Number.isFinite(windowSize) || windowSize >= 100) return false;\n\n const step = Math.min(10, Math.max(1, Math.abs(delta) / 30));\n const nextStart = Math.min(100 - windowSize, Math.max(0, start + Math.sign(delta) * step));\n if (Math.abs(nextStart - start) < 0.01) return false;\n\n this.chartInstance.setOption({\n dataZoom: [\n { id: sliderId, start: nextStart, end: nextStart + windowSize, zoomLock: true },\n { id: insideId, start: nextStart, end: nextStart + windowSize, zoomLock: true },\n ],\n });\n return true;\n }\n\n private scheduleHorizontalZoomLayout(): void {\n if (this.isApplyingHorizontalZoomLayout) return;\n if (this.horizontalZoomLayoutFrame) {\n cancelAnimationFrame(this.horizontalZoomLayoutFrame);\n }\n\n this.horizontalZoomLayoutFrame = requestAnimationFrame(() => {\n this.horizontalZoomLayoutFrame = undefined;\n this.applyHorizontalZoomLayout();\n });\n }\n\n private applyHorizontalZoomLayout(): void {\n if (!this.chartInstance) return;\n\n const model = (this.chartInstance as any).getModel?.();\n const gridWidth = model?.getComponent?.('grid', 0)?.coordinateSystem?.getRect?.().width;\n if (!Number.isFinite(gridWidth) || gridWidth <= 0) return;\n\n const totalLabelCount = this.getAggregationLabelCount();\n const visibleLabelCount = Math.max(2, Math.floor(gridWidth / this.xAxisMinLabelGap) + 1);\n const windowSize = Math.min(100, (visibleLabelCount / totalLabelCount) * 100);\n const showHorizontalZoom = windowSize < 100;\n const option = this.chartInstance.getOption() as {\n dataZoom?: Array<Record<string, any>>;\n xAxis?: Array<Record<string, any>>;\n };\n const horizontalZoom = option.dataZoom?.find((zoom) => zoom['id'] === 'horizontalSlider');\n const xAxis = option.xAxis?.[0];\n const currentStart = Number(horizontalZoom?.['start'] ?? 0);\n const start = showHorizontalZoom ? Math.min(Math.max(0, currentStart), 100 - windowSize) : 0;\n const end = showHorizontalZoom ? start + windowSize : 100;\n const splitNumber = Math.max(1, Math.min(totalLabelCount - 1, visibleLabelCount - 1));\n const minInterval = this.config?.xAxis?.minInterval ?? this.getAggregationMinInterval();\n\n const hasChanged =\n horizontalZoom?.['show'] !== showHorizontalZoom ||\n Math.abs(Number(horizontalZoom?.['start'] ?? 0) - start) > 0.01 ||\n Math.abs(Number(horizontalZoom?.['end'] ?? 100) - end) > 0.01 ||\n Number(xAxis?.['splitNumber'] ?? 0) !== splitNumber ||\n Number(xAxis?.['minInterval'] ?? 0) !== minInterval ||\n xAxis?.['axisLabel']?.['hideOverlap'] !== false;\n if (!hasChanged) return;\n\n this.isApplyingHorizontalZoomLayout = true;\n this.chartInstance.setOption({\n xAxis: {\n splitNumber,\n minInterval,\n axisLabel: { hideOverlap: false },\n },\n dataZoom: [\n {\n id: 'horizontalSlider',\n show: showHorizontalZoom,\n start,\n end,\n zoomLock: true,\n filterMode: 'weakFilter',\n },\n {\n id: 'insideX',\n disabled: !showHorizontalZoom,\n start,\n end,\n zoomLock: true,\n filterMode: 'weakFilter',\n },\n ],\n });\n this.isApplyingHorizontalZoomLayout = false;\n }\n\n private scheduleVerticalZoomLayout(): void {\n if (this.isApplyingVerticalZoomLayout) return;\n if (this.verticalZoomLayoutFrame) {\n cancelAnimationFrame(this.verticalZoomLayoutFrame);\n }\n\n this.verticalZoomLayoutFrame = requestAnimationFrame(() => {\n this.verticalZoomLayoutFrame = undefined;\n this.applyVerticalZoomLayout();\n });\n }\n\n private applyVerticalZoomLayout(): void {\n if (!this.chartInstance || !this.visibleRows.length) return;\n\n const model = (this.chartInstance as any).getModel?.();\n const gridHeight = model?.getComponent?.('grid', 0)?.coordinateSystem?.getRect?.().height;\n if (!Number.isFinite(gridHeight) || gridHeight <= 0) return;\n\n const totalRows = this.visibleRows.length;\n const visibleRowCount = Math.min(\n totalRows,\n Math.max(1, Math.floor(gridHeight / this.rowHeight)),\n );\n const windowSize = (visibleRowCount / totalRows) * 100;\n const showVerticalZoom = windowSize < 100;\n const option = this.chartInstance.getOption() as {\n dataZoom?: Array<Record<string, any>>;\n grid?: Array<Record<string, any>>;\n };\n const verticalZoom = option.dataZoom?.find((zoom) => zoom['id'] === 'verticalSlider');\n const currentStart = Number(verticalZoom?.['start'] ?? 0);\n const start = showVerticalZoom ? Math.min(Math.max(0, currentStart), 100 - windowSize) : 0;\n const end = showVerticalZoom ? start + windowSize : 100;\n const right = showVerticalZoom ? (this.config?.gridRight ?? VERTICAL_ZOOM_RIGHT) : 0;\n\n const hasChanged =\n verticalZoom?.['show'] !== showVerticalZoom ||\n Math.abs(Number(verticalZoom?.['start'] ?? 0) - start) > 0.01 ||\n Math.abs(Number(verticalZoom?.['end'] ?? 100) - end) > 0.01 ||\n option.grid?.[0]?.['right'] !== right;\n if (!hasChanged) return;\n\n this.isApplyingVerticalZoomLayout = true;\n this.chartInstance.setOption({\n grid: { right },\n dataZoom: [\n { id: 'verticalSlider', show: showVerticalZoom, start, end, zoomLock: true },\n { id: 'insideY', disabled: !showVerticalZoom, start, end, zoomLock: true },\n ],\n });\n this.isApplyingVerticalZoomLayout = false;\n }\n\n @HostListener('window:resize')\n refreshAxisNameSpace(): void {\n if (!this.chartInstance) return;\n\n const yAxisLabelWidth = this.yAxisLabelWidth;\n const option: any = {\n xAxis: {\n name: this.resolveAxisName(this.config?.xAxisName, 'x'),\n nameTextStyle: this.resolveAxisNameTextStyle('x'),\n },\n yAxis: [\n {\n name: this.resolveAxisName(this.config?.yAxisName, 'y'),\n nameTextStyle: this.resolveAxisNameTextStyle('y'),\n },\n ],\n };\n\n if (this.config?.yAxis?.axisLabel?.width == null) {\n option.yAxis[0].axisLabel = { width: yAxisLabelWidth };\n }\n\n this.chartInstance.setOption(option);\n this.scheduleVerticalZoomLayout();\n this.scheduleHorizontalZoomLayout();\n }\n\n getVisibleCategories() {\n const groups = this.config?.groups ?? [];\n\n if (groups.length) {\n const rows: any[] = [];\n\n for (const group of groups) {\n rows.push({\n type: 'group',\n name: group.name,\n expanded: group.expanded ?? true,\n });\n\n if (group.expanded ?? true) {\n for (const category of this.sortCategories(group.categories ?? [])) {\n rows.push({\n type: 'category',\n name: category,\n groupName: group.name,\n });\n }\n }\n }\n\n return rows;\n }\n\n const taskNames = new Set<string>();\n for (const series of this.config?.series ?? []) {\n for (const item of series.data ?? []) {\n if (typeof item['name'] === 'string' && item['name'].trim()) {\n taskNames.add(item['name']);\n }\n }\n }\n\n return this.sortCategories(Array.from(taskNames)).map((name) => ({\n type: 'category',\n name,\n }));\n }\n\n private sortCategories(categories: string[]): string[] {\n // Preserve the current order unless sorting has explicitly been requested.\n // This keeps existing grouped/collapsible chart behaviour unchanged.\n if (this.config?.sortBy === undefined && this.config?.sortType === undefined) {\n return categories;\n }\n\n const sortBy = this.config?.sortBy ?? 'value';\n const direction = this.config?.sortType === 'desc' ? -1 : 1;\n const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\n\n return categories\n .map((name, index) => ({ name, index, value: this.getCategorySortValue(name) }))\n .sort((left, right) => {\n let comparison: number;\n\n if (sortBy === 'name') {\n comparison = collator.compare(left.name, right.name);\n } else if (left.value === undefined || right.value === undefined) {\n // Rows without a numeric value remain after valued rows and retain\n // their input order relative to each other.\n return left.value === right.value\n ? left.index - right.index\n : left.value === undefined\n ? 1\n : -1;\n } else {\n comparison = left.value - right.value;\n }\n\n return comparison === 0 ? left.index - right.index : comparison * direction;\n })\n .map((item) => item.name);\n }\n\n private getCategorySortValue(categoryName: string): number | undefined {\n let maximumDuration: number | undefined;\n\n for (const series of this.config?.series ?? []) {\n for (const item of series.data ?? []) {\n if (item.name !== categoryName) continue;\n\n // A category can contain multiple bars across one or more series.\n // Its sortable value is the longest task duration, independent of the\n // label displayed on the bar.\n const start = new Date(item.start).getTime();\n const end = new Date(item.end).getTime();\n if (Number.isFinite(start) && Number.isFinite(end)) {\n const duration = Math.max(0, end - start);\n maximumDuration = Math.max(maximumDuration ?? duration, duration);\n }\n }\n }\n\n return maximumDuration;\n }\n\n private buildVisibleData(visibleRows: any, data: any[]) {\n return data\n .map((item) => {\n const rowIndex = visibleRows.findIndex((row: any) => row.name === item.name);\n\n // Category is currently hidden\n if (rowIndex === -1) {\n return null;\n }\n\n const start = new Date(item.start).getTime();\n const end = new Date(item.end).getTime();\n\n return {\n ...item,\n value: [rowIndex, start, end, item.label],\n name: item.name,\n label: item.label,\n start,\n end,\n };\n })\n .filter(Boolean);\n }\n\n private updateChart() {\n this.visibleRows = this.getVisibleCategories();\n\n this.rowIndexMap = new Map(this.visibleRows.map((row, index) => [row.name, index]));\n\n this.chartInstance.setOption({\n yAxis: {\n data: this.visibleRows.map((row) => row.name),\n },\n\n series: [\n // Tasks\n ...(this.config?.series || []).map((s, seriesIndex) => ({\n ...s,\n name: s.name,\n data: this.buildVisibleData(this.visibleRows, s.data),\n })),\n ],\n });\n this.scheduleVerticalZoomLayout();\n this.scheduleHorizontalZoomLayout();\n }\n\n private resolveAxisName(name: string | undefined, axis: 'x' | 'y' | 'secondaryY'): string {\n if (!name) return '';\n\n const maxWidth = this.resolveAxisNameWidth(axis);\n const font = this.resolveAxisNameFont(axis);\n if (echarts.format.getTextRect(name, font).width <= maxWidth) return name;\n\n const ellipsis = '...';\n let low = 0;\n let high = name.length;\n let truncated = ellipsis;\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const nextText = `${name.slice(0, mid)}${ellipsis}`;\n const nextWidth = echarts.format.getTextRect(nextText, font).width;\n\n if (nextWidth <= maxWidth) {\n truncated = nextText;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n return truncated;\n }\n\n private resolveAxisNameFont(axis: 'x' | 'y' | 'secondaryY'): string {\n const style =\n axis === 'x' ? this.config?.xAxis?.nameTextStyle : this.config?.yAxis?.nameTextStyle;\n const fontSize = style?.fontSize ?? 14;\n const fontWeight = style?.fontWeight ?? 400;\n const fontFamily = style?.fontFamily ?? 'sans-serif';\n\n return `${fontWeight} ${fontSize}px ${fontFamily}`;\n }\n\n private resolveAxisNameWidth(axis: 'x' | 'y' | 'secondaryY'): number {\n const chartRect = this.chartContainer?.nativeElement.getBoundingClientRect();\n const chartWidth = chartRect?.width || this.chartInstance?.getWidth?.() || 360;\n const chartHeight = chartRect?.height || this.chartInstance?.getHeight?.() || 240;\n\n if (axis === 'x') {\n return Math.max(chartWidth - 240, 80);\n }\n\n return Math.max(chartHeight - 72, 80);\n }\n\n private readLegendSelected(): Record<string, boolean> {\n const option = this.chartInstance?.getOption?.() as\n | { legend?: Array<{ selected?: Record<string, boolean> }> }\n | undefined;\n\n return { ...(option?.legend?.[0]?.selected ?? {}) };\n }\n\n private resolveAxisNameTextStyle(axis: 'x' | 'y' | 'secondaryY'): Record<string, any> {\n const customStyle =\n axis === 'x' ? this.config?.xAxis?.nameTextStyle : this.config?.yAxis?.nameTextStyle;\n\n return {\n width: this.resolveAxisNameWidth(axis),\n ...(customStyle || {}),\n };\n }\n}\n","<div\n class=\"gantt-chart-shell\"\n [class.gantt-chart-shell--legend-left]=\"config.customLegend?.position === 'left'\"\n [class.gantt-chart-shell--legend-right]=\"config.customLegend?.position === 'right'\"\n [class.gantt-chart-shell--legend-bottom]=\"config.customLegend?.position === 'bottom'\"\n>\n @if (\n !config.hideLegend &&\n config.customLegend?.position !== 'bottom' &&\n config.customLegend?.position !== 'right'\n ) {\n <lib-chart-legend\n class=\"gantt-chart-shell__legend\"\n [class.gantt-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--gantt-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n\n <div\n #chartContainer\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n (chartInit)=\"onChartInit($event)\"\n class=\"chart-container\"\n ></div>\n\n @if (\n !config.hideLegend &&\n (config.customLegend?.position === 'bottom' || config.customLegend?.position === 'right')\n ) {\n <lib-chart-legend\n class=\"gantt-chart-shell__legend\"\n [class.gantt-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--gantt-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n</div>\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"contextMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n","import type { MapboxConfig } from '../../modal/charts-modal';\n\n// Keep one style loaded so mode and theme changes do not rebuild the basemap.\nexport function resolveMapboxStyle({ style }: MapboxConfig): NonNullable<MapboxConfig['style']> {\n return style ?? 'mapbox://styles/mapbox/standard';\n}\n","/** Resolve a place for immediate display on the map; results are not persisted. */\nexport async function geocodePlace(\n placeName: string,\n accessToken: string,\n signal: AbortSignal,\n): Promise<[number, number]> {\n const query = placeName.trim();\n if (!query) throw new Error('A bubble marker requires coordinates or a placeName.');\n const params = new URLSearchParams({ q: query, access_token: accessToken, limit: '1', autocomplete: 'false' });\n const response = await fetch(`https://api.mapbox.com/search/geocode/v6/forward?${params}`, { signal });\n if (!response.ok) throw new Error(`Place lookup failed for \"${query}\" (${response.status}).`);\n const data: { features?: { geometry?: { coordinates?: number[] } }[] } = await response.json();\n const coordinates = data.features?.[0]?.geometry?.coordinates;\n if (!coordinates || coordinates.length < 2 ||\n !Number.isFinite(coordinates[0]) || !Number.isFinite(coordinates[1]) ||\n Math.abs(coordinates[0]) > 180 || Math.abs(coordinates[1]) > 90) {\n throw new Error(`No location found for \"${query}\". Use a more specific placeName or provide coordinates.`);\n }\n return [coordinates[0], coordinates[1]];\n}\n","import type { MapboxBubbleMarker, MapboxBubbleConditionalFormatting, MapboxBubbleValueFormatter, MapboxBubbleLabelStyle } from '../../modal/charts-modal';\n\nfunction numericBubbleValue(label: string | number | undefined): number | undefined {\n if (label === undefined || (typeof label === 'string' && !label.trim())) return undefined;\n const value = Number(label);\n return Number.isFinite(value) ? value : undefined;\n}\n\nexport function formatBubbleLabel(label: string | number | undefined): string {\n const value = numericBubbleValue(label);\n if (value === undefined) return label === undefined ? '' : String(label);\n const suffixes = ['', 'k', 'M', 'B', 'T', 'Q'];\n let scaled = value;\n let index = 0;\n while (Math.abs(scaled) >= 1000 && index < suffixes.length - 1) {\n scaled /= 1000;\n index++;\n }\n // For decimal inputs, keep the original fractional portion after compacting\n // the whole-number portion: 24000.8765 -> 24.88k.\n const fraction = Math.abs(value) - Math.trunc(Math.abs(value));\n if (index > 0 && fraction > 0) {\n scaled = Math.sign(value) * (Math.trunc(Math.abs(scaled)) + fraction);\n }\n let rounded = Number(scaled.toFixed(2));\n // Promote rounded boundary values: 999.999k should display as 1M.\n if (Math.abs(rounded) >= 1000 && index < suffixes.length - 1) {\n rounded = Number((scaled / 1000).toFixed(2));\n index++;\n }\n return `${rounded}${suffixes[index]}`;\n}\n\nexport function formatBubbleTooltipValue(\n value: string | number | boolean | null,\n compact = false,\n): string {\n if (value === null) return '—';\n if (typeof value === 'boolean') return String(value);\n return compact ? formatBubbleLabel(value) : String(value);\n}\n\nexport function resolveBubbleLabel(\n bubble: MapboxBubbleMarker,\n formatter?: MapboxBubbleValueFormatter,\n textTransform?: MapboxBubbleLabelStyle['textTransform'],\n): string {\n const value = numericBubbleValue(bubble.value);\n const text = formatter && value !== undefined\n ? String(formatter(value, bubble))\n : formatBubbleLabel(bubble.value);\n switch (textTransform) {\n case 'uppercase': return text.toUpperCase();\n case 'lowercase': return text.toLowerCase();\n // Include letters after numbers so compact suffixes are capitalized too.\n case 'capitalize': return text.replace(/(^|[^\\p{L}\\p{M}])(\\p{L})/gu,\n (_, prefix: string, letter: string) => prefix + letter.toUpperCase());\n default: return text;\n }\n}\n\nexport function resolveBubbleValue(bubble: MapboxBubbleMarker): number | undefined {\n return numericBubbleValue(bubble.value);\n}\n\nexport function resolveBubbleColor(\n bubble: MapboxBubbleMarker,\n formatting?: MapboxBubbleConditionalFormatting,\n): string {\n const fallback = bubble.color ?? '#3b82f6';\n const value = resolveBubbleValue(bubble);\n if (value === undefined || !formatting || formatting.enabled === false) return fallback;\n for (const rule of formatting.rules) {\n if (!Number.isFinite(rule.value)) continue;\n let matches = false;\n switch (rule.operator) {\n case 'gt': matches = value > rule.value; break;\n case 'gte': matches = value >= rule.value; break;\n case 'lt': matches = value < rule.value; break;\n case 'lte': matches = value <= rule.value; break;\n case 'eq': matches = value === rule.value; break;\n case 'neq': matches = value !== rule.value; break;\n case 'between': matches = Number.isFinite(rule.valueTo) && value >= rule.value && value <= rule.valueTo; break;\n }\n if (matches) return rule.color;\n }\n return fallback;\n}\n","import type { MapboxBubbleMarker } from '../../modal/charts-modal';\nimport { resolveBubbleValue } from './mapbox-bubble-format';\n\n/** Scale diameters across the complete dataset, independent of lookup completion order. */\nexport function resolveBubbleSizes(data: MapboxBubbleMarker[]): number[] {\n const values = data.map(resolveBubbleValue);\n let min = Infinity;\n let max = -Infinity;\n for (const value of values) {\n if (value === undefined) continue;\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n return data.map((bubble, index) => {\n if (bubble.size !== undefined) return bubble.size;\n const value = values[index];\n if (value === undefined || min === max) return 24;\n // Normalize first to avoid overflowing the range for very large values.\n const scale = Math.max(Math.abs(min), Math.abs(max));\n const ratio = (value / scale - min / scale) / (max / scale - min / scale);\n return 24 + ratio * 40;\n });\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n PLATFORM_ID,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport type { Map as MapboxMap, NavigationControl, Marker, Popup } from 'mapbox-gl';\nimport type { MapboxConfig, MapboxBubbleLabelStyle } from '../../modal/charts-modal';\nimport { resolveMapboxStyle } from './mapbox-style';\nimport { geocodePlace } from './mapbox-geocoding';\nimport { resolveBubbleSizes } from './mapbox-bubble-size';\nimport { resolveBubbleColor, resolveBubbleLabel, formatBubbleTooltipValue } from './mapbox-bubble-format';\n\n@Component({\n selector: 'lib-mapbox',\n standalone: true,\n templateUrl: './mapbox.html',\n styleUrl: './mapbox.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n // Mapbox creates its own DOM, which needs the vendor stylesheet without Angular scoping.\n encapsulation: ViewEncapsulation.None,\n})\nexport class Mapbox implements AfterViewInit, OnChanges, OnDestroy {\n @Input({ required: true }) config!: MapboxConfig;\n @Output() mapLoad = new EventEmitter<MapboxMap>();\n @Output() mapError = new EventEmitter<Error>();\n\n @ViewChild('mapContainer', { static: true })\n private mapContainer!: ElementRef<HTMLDivElement>;\n\n private readonly zone = inject(NgZone);\n private readonly platformId = inject(PLATFORM_ID);\n private map?: MapboxMap;\n private resizeObserver?: ResizeObserver;\n private bubbleMarkers = new Map<number, Marker>();\n private bubbleLookup?: AbortController;\n private markerClass?: typeof Marker;\n private popupClass?: typeof Popup;\n private bubblePopup?: Popup;\n private navigationControl?: NavigationControl;\n private navigationControlClass?: typeof NavigationControl;\n private viewReady = false;\n private initializationId = 0;\n\n ngAfterViewInit(): void {\n this.viewReady = true;\n void this.initializeMap();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.viewReady) return;\n const previous: MapboxConfig | undefined = changes['config']?.previousValue;\n const current = this.config;\n const uiKeys = new Set([\n 'viewMode',\n 'viewStyle',\n 'style',\n 'navigationControl',\n 'navigationControlPosition',\n 'bubbleMarkers',\n ]);\n const otherOptionsChanged =\n !previous ||\n !current ||\n [...new Set([...Object.keys(previous), ...Object.keys(current)])].some(\n (key) =>\n !uiKeys.has(key) &&\n previous[key as keyof MapboxConfig] !== current[key as keyof MapboxConfig],\n );\n\n if (!this.map || otherOptionsChanged) {\n void this.initializeMap();\n return;\n }\n\n this.zone.runOutsideAngular(() => {\n try {\n if (resolveMapboxStyle(previous!) !== resolveMapboxStyle(current)) {\n this.map!.setStyle(resolveMapboxStyle(current));\n } else if (\n previous!.viewStyle !== current.viewStyle ||\n previous!.viewMode !== current.viewMode\n ) {\n this.updateAppearance();\n }\n if (\n previous!.navigationControl !== current.navigationControl ||\n previous!.navigationControlPosition !== current.navigationControlPosition\n ) {\n this.updateNavigationControl();\n }\n if (previous!.bubbleMarkers !== current.bubbleMarkers) {\n if (\n previous!.bubbleMarkers?.data === current.bubbleMarkers?.data &&\n previous!.bubbleMarkers?.show === current.bubbleMarkers?.show\n ) {\n this.updateBubblePresentation();\n } else {\n this.updateBubbleMarkers();\n }\n }\n } catch (error) {\n this.zone.run(() =>\n this.mapError.emit(error instanceof Error ? error : new Error(String(error))),\n );\n }\n });\n }\n\n private async initializeMap(): Promise<void> {\n const initializationId = ++this.initializationId;\n this.removeMap();\n if (!isPlatformBrowser(this.platformId)) return;\n\n const config = this.config;\n if (!config?.accessToken?.trim()) {\n this.mapError.emit(new Error('Mapbox requires an accessToken in its config.'));\n return;\n }\n\n try {\n // Load browser-only code on demand so importing charts-lib remains safe for SSR.\n const { default: mapboxgl } = await import('mapbox-gl');\n if (initializationId !== this.initializationId) return;\n\n this.zone.runOutsideAngular(() => {\n const {\n bubbleMarkers,\n viewMode,\n viewStyle,\n style,\n workerUrl = 'assets/mapbox/mapbox-gl-csp-worker.js',\n navigationControl,\n navigationControlPosition,\n ...options\n } = config;\n\n // Serve the worker unchanged: Angular transforms break Mapbox's inline worker.\n mapboxgl.workerUrl = workerUrl;\n const map = new mapboxgl.Map({\n center: [0, 0],\n zoom: 2,\n ...options,\n projection: options.projection ?? 'mercator',\n style: resolveMapboxStyle({ ...options, viewMode, viewStyle, style }),\n container: this.mapContainer.nativeElement,\n });\n this.map = map;\n\n map.on('style.load', () => this.updateAppearance());\n map.on('load', () => this.zone.run(() => this.mapLoad.emit(map)));\n map.on('error', (event) => this.zone.run(() => this.mapError.emit(event.error)));\n\n this.popupClass = mapboxgl.Popup;\n this.markerClass = mapboxgl.Marker;\n this.updateBubbleMarkers();\n this.navigationControlClass = mapboxgl.NavigationControl;\n this.updateNavigationControl();\n\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => map.resize());\n this.resizeObserver.observe(this.mapContainer.nativeElement);\n }\n });\n } catch (error) {\n if (initializationId !== this.initializationId) return;\n this.removeMap();\n this.zone.run(() =>\n this.mapError.emit(error instanceof Error ? error : new Error(String(error))),\n );\n }\n }\n\n private updateAppearance(): void {\n const map = this.map;\n if (\n !map ||\n this.config.style !== undefined ||\n !map.getStyle()?.imports?.some((item) => item.id === 'basemap')\n )\n return;\n const { viewStyle = 'standard', viewMode = 'standard' } = this.config;\n const theme = viewStyle === 'standard' ? 'default' : 'monochrome';\n if (map.getConfigProperty('basemap', 'theme') !== theme) {\n map.setConfigProperty('basemap', 'theme', theme);\n }\n const lightPreset = viewStyle === 'dark' ? 'night' : 'day';\n if (map.getConfigProperty('basemap', 'lightPreset') !== lightPreset) {\n map.setConfigProperty('basemap', 'lightPreset', lightPreset);\n }\n if (map.getConfigProperty('basemap', 'show3dObjects') !== false) {\n map.setConfigProperty('basemap', 'show3dObjects', false);\n }\n\n const satelliteId = 'charts-lib-satellite';\n if (!map.getSource(satelliteId)) {\n map.addSource(satelliteId, {\n type: 'raster',\n url: 'mapbox://mapbox.satellite',\n tileSize: 256,\n });\n }\n if (!map.getLayer(satelliteId)) {\n map.addLayer({\n id: satelliteId,\n type: 'raster',\n source: satelliteId,\n slot: 'bottom',\n paint: { 'raster-opacity': 0, 'raster-opacity-transition': { duration: 0 } },\n });\n }\n const paint = {\n 'raster-brightness-min': viewStyle === 'light' ? 0.2 : 0,\n 'raster-brightness-max': viewStyle === 'dark' ? 0.55 : 1,\n 'raster-opacity': viewMode === 'satelite' ? 1 : 0,\n };\n for (const property of Object.keys(paint) as (keyof typeof paint)[]) {\n const value = paint[property];\n if (map.getPaintProperty(satelliteId, property) !== value) {\n map.setPaintProperty(satelliteId, property, value);\n }\n }\n }\n\n private updateBubbleMarkers(): void {\n this.bubblePopup?.remove();\n this.bubblePopup = undefined;\n this.bubbleLookup?.abort();\n for (const marker of this.bubbleMarkers.values()) marker.remove();\n this.bubbleMarkers.clear();\n const config = this.config.bubbleMarkers;\n if (!this.map || !this.markerClass || !config || config.show === false) return;\n const controller = new AbortController();\n this.bubbleLookup = controller;\n const map = this.map;\n const accessToken = this.config.accessToken;\n const sizes = resolveBubbleSizes(config.data);\n const locations: [number, number][] = [];\n let pending = config.data.length;\n const complete = () => {\n pending--;\n if (\n pending !== 0 ||\n controller.signal.aborted ||\n this.map !== map ||\n this.config.center !== undefined ||\n locations.length === 0\n )\n return;\n // Find the shortest longitude span, including markers across the date line.\n const longitudes = locations.map(([lng]) => ((lng % 360) + 360) % 360).sort((a, b) => a - b);\n let largestGap = -1;\n let west = longitudes[0];\n let east = longitudes[0];\n for (let index = 0; index < longitudes.length; index++) {\n const next = longitudes[(index + 1) % longitudes.length];\n const gap = (index === longitudes.length - 1 ? next + 360 : next) - longitudes[index];\n if (gap > largestGap) {\n largestGap = gap;\n west = next;\n east = longitudes[index] < west ? longitudes[index] + 360 : longitudes[index];\n }\n }\n if (west > 180) {\n west -= 360;\n east -= 360;\n }\n let south = Infinity;\n let north = -Infinity;\n let padding = 48;\n for (const [, lat] of locations) {\n south = Math.min(south, lat);\n north = Math.max(north, lat);\n }\n for (const size of sizes) padding = Math.max(padding, size / 2 + 16);\n map.fitBounds(\n [\n [west, south],\n [east, north],\n ],\n {\n padding,\n maxZoom: this.config.zoom ?? 12,\n duration: 0,\n },\n );\n };\n config.data.forEach((bubble, index) => {\n const addMarker = (coordinates: [number, number]) => {\n if (controller.signal.aborted || this.map !== map) return;\n const element = document.createElement('div');\n element.className = 'lib-mapbox-bubble';\n const size = sizes[index];\n element.style.width = `${size}px`;\n element.style.height = `${size}px`;\n element.style.backgroundColor = resolveBubbleColor(\n bubble,\n this.config.bubbleMarkers?.conditionalFormatting,\n );\n element.textContent =\n this.config.bubbleMarkers?.showLabels === false\n ? ''\n : resolveBubbleLabel(\n bubble,\n this.config.bubbleMarkers?.valueFormatter,\n this.config.bubbleMarkers?.labelStyle?.textTransform,\n );\n this.applyBubbleLabelStyle(element, this.config.bubbleMarkers?.labelStyle);\n if (bubble.value !== undefined) element.setAttribute('aria-label', String(bubble.value));\n const marker = new this.markerClass!({ element, anchor: 'center' })\n .setLngLat(coordinates)\n .addTo(map);\n this.bindBubbleTooltip(element, coordinates, index, size, controller.signal);\n this.bubbleMarkers.set(index, marker);\n locations.push(coordinates);\n };\n if (bubble.coordinates) {\n addMarker(bubble.coordinates);\n complete();\n } else {\n void geocodePlace(bubble.placeName ?? '', accessToken, controller.signal)\n .then(addMarker)\n .catch((error: unknown) => {\n if (!controller.signal.aborted) {\n this.zone.run(() =>\n this.mapError.emit(error instanceof Error ? error : new Error(String(error))),\n );\n }\n })\n .finally(complete);\n }\n });\n }\n\n private updateBubblePresentation(): void {\n this.bubblePopup?.remove();\n this.bubblePopup = undefined;\n const config = this.config.bubbleMarkers;\n this.bubbleMarkers.forEach((marker, index) => {\n this.applyBubbleLabelStyle(marker.getElement(), config?.labelStyle);\n marker.getElement().textContent =\n config?.showLabels === false\n ? ''\n : resolveBubbleLabel(\n config?.data[index] ?? {},\n config?.valueFormatter,\n config?.labelStyle?.textTransform,\n );\n const bubble = config?.data[index];\n if (bubble)\n marker.getElement().style.backgroundColor = resolveBubbleColor(\n bubble,\n config?.conditionalFormatting,\n );\n });\n }\n\n private bindBubbleTooltip(\n element: HTMLElement,\n coordinates: [number, number],\n index: number,\n size: number,\n signal: AbortSignal,\n ): void {\n if (!this.popupClass) return;\n element.tabIndex = 0;\n const close = () => {\n this.bubblePopup?.remove();\n this.bubblePopup = undefined;\n };\n const open = () => {\n close();\n const config = this.config.bubbleMarkers;\n const bubble = config?.data[index];\n if (!this.map || !bubble || config?.showTooltip === false || signal.aborted) return;\n const content = document.createElement('div');\n content.className = 'lib-mapbox-bubble-details';\n const fields: [string, string | number | boolean | null | undefined][] = [\n ['Location', bubble.placeName || coordinates.join(', ')],\n ['Value', bubble.value],\n ...Object.entries(bubble.tooltip ?? {}),\n ];\n for (const [name, value] of fields) {\n if (value === undefined) continue;\n const row = document.createElement('div');\n const title = document.createElement('strong');\n title.textContent = `${name}: `;\n row.append(title, document.createTextNode(formatBubbleTooltipValue(value, name !== 'Location' && config?.tooltipCompactValue === true)));\n content.appendChild(row);\n }\n this.bubblePopup = new this.popupClass!({\n closeButton: false,\n closeOnClick: false,\n // Leave anchor unset so Mapbox keeps the popup inside the viewport.\n offset: size / 2 + 8,\n maxWidth: '320px',\n className: 'lib-mapbox-bubble-tooltip',\n }).setLngLat(coordinates).setDOMContent(content).addTo(this.map);\n };\n element.addEventListener('mouseenter', open, { signal });\n element.addEventListener('mouseleave', () => {\n if (document.activeElement !== element) close();\n }, { signal });\n element.addEventListener('focus', open, { signal });\n element.addEventListener('blur', close, { signal });\n element.addEventListener('keydown', (event) => {\n if (event.key === 'Escape') close();\n }, { signal });\n }\n\n private applyBubbleLabelStyle(element: HTMLElement, style?: MapboxBubbleLabelStyle): void {\n const decoration = style?.textDecoration ?? '';\n const textDecoration =\n style?.fontStyle === 'underline'\n ? [\n 'underline',\n ...decoration\n .split(/\\s+/)\n .filter((part) => part && part !== 'none' && part !== 'underline'),\n ].join(' ')\n : decoration;\n // Clear removed overrides so the component stylesheet supplies the defaults.\n Object.assign(element.style, {\n fontWeight: style?.fontWeight === undefined ? '' : String(style.fontWeight),\n fontStyle: style?.fontStyle === 'underline' ? 'normal' : (style?.fontStyle ?? ''),\n textDecoration,\n color: style?.color ?? '',\n fontFamily: style?.fontFamily ?? '',\n fontSize: style?.fontSize === undefined ? '' : `${style.fontSize}px`,\n textTransform: style?.textTransform ?? '',\n });\n }\n\n private updateNavigationControl(): void {\n if (!this.map || !this.navigationControlClass) return;\n if (this.navigationControl) {\n this.map.removeControl(this.navigationControl);\n this.navigationControl = undefined;\n }\n const { navigationControl = true, navigationControlPosition = 'top-right' } = this.config;\n if (navigationControl) {\n this.navigationControl = new this.navigationControlClass(\n typeof navigationControl === 'boolean' ? {} : navigationControl,\n );\n this.map.addControl(this.navigationControl, navigationControlPosition);\n }\n }\n\n private removeMap(): void {\n this.bubblePopup?.remove();\n this.bubblePopup = undefined;\n this.bubbleLookup?.abort();\n for (const marker of this.bubbleMarkers.values()) marker.remove();\n this.bubbleMarkers.clear();\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n this.map?.remove();\n this.map = undefined;\n this.navigationControl = undefined;\n }\n\n ngOnDestroy(): void {\n this.initializationId++;\n this.viewReady = false;\n this.removeMap();\n }\n}\n","<div #mapContainer class=\"lib-mapbox-container\"></div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.Charts","EBarChart","EPieChart","SankeyChartEchart","GaugeChartEchart"],"mappings":"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"}
|