{"version":3,"file":"siemens-charts-ng-progress-bar.mjs","sources":["../../../../projects/charts-ng/progress-bar/si-chart-progress-bar.component.ts","../../../../projects/charts-ng/common/si-chart-base.component.html","../../../../projects/charts-ng/progress-bar/index.ts","../../../../projects/charts-ng/progress-bar/siemens-charts-ng-progress-bar.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport {\n  SiChartBaseComponent,\n  echarts,\n  BarSeriesOption,\n  ChartXAxis,\n  ChartYAxis\n} from '@siemens/charts-ng/common';\nimport { SiCustomLegendComponent } from '@siemens/charts-ng/custom-legend';\nimport { SiChartLoadingSpinnerComponent } from '@siemens/charts-ng/loading-spinner';\nimport { BarChart } from 'echarts/charts';\nimport { GridComponent } from 'echarts/components';\nimport { LegacyGridContainLabel } from 'echarts/features';\n\nimport { ProgressBarChartSeries, ProgressBarValueUpdate } from './si-chart-progress-bar.interface';\n\necharts.use([BarChart, GridComponent, LegacyGridContainLabel]);\n\n@Component({\n  selector: 'si-chart-progress-bar',\n  imports: [SiCustomLegendComponent, SiChartLoadingSpinnerComponent],\n  templateUrl: '../common/si-chart-base.component.html',\n  styleUrl: '../common/si-chart-base.component.scss',\n  changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class SiChartProgressBarComponent extends SiChartBaseComponent {\n  /** The series for the chart. */\n  readonly series = input<ProgressBarChartSeries[]>();\n  /** Used to display the label in inline or above the progress-bar. */\n  readonly labelPosition = input<string>();\n\n  private maxValue = 100;\n  private xAxisConfig: ChartXAxis = { type: 'value', max: this.maxValue };\n  private yAxis: ChartYAxis = {\n    type: 'category',\n    data: [],\n    axisLabel: {\n      show: true,\n      fontSize: 14\n    }\n  };\n\n  private readonly formatter = new Intl.NumberFormat(undefined, { maximumFractionDigits: 1 });\n  private labelPositionOption: BarSeriesOption['label'];\n  private labelPositionOptionForValue: BarSeriesOption['label'];\n\n  private labelFormatter(p: any): string {\n    return this.formatter.format(this.maxValue - p.value) + ' %';\n  }\n\n  protected override themeChanged(): void {\n    this.applyOptions();\n  }\n\n  protected override applyOptions(): void {\n    this.showLegend.set(false);\n    const grey = this.getThemeCustomValue(['progress', 'grey'], '#E6E6E6');\n    const labelColor = this.getThemeCustomValue(['progressBar', 'labelColor'], '#000');\n    const itemWidth = this.getThemeCustomValue(['progressBar', 'itemWidth'], 20);\n\n    if (this.labelPosition() === 'top') {\n      this.yAxis.axisLabel = false;\n      this.labelPositionOption = {\n        position: [0, -16],\n        formatter: '{b}',\n        fontSize: 14,\n        color: labelColor,\n        show: true\n      };\n      this.labelPositionOptionForValue = {\n        position: ['100%', '-80%'],\n        align: 'right',\n        show: true,\n        formatter: p => this.labelFormatter(p),\n        color: labelColor,\n        fontWeight: 700\n      };\n    } else {\n      this.yAxis.axisLabel.show = true;\n      this.labelPositionOption = {\n        show: false\n      };\n      this.labelPositionOptionForValue = {\n        position: 'right',\n        show: true,\n        formatter: p => this.labelFormatter(p),\n        color: labelColor,\n        fontWeight: 700\n      };\n    }\n\n    this.actualOptions = {\n      series: [],\n      xAxis: this.xAxisConfig,\n      yAxis: this.yAxis,\n      grid: {},\n      tooltip: {}\n    };\n    const categoryAxisOpts = {\n      axisLine: { show: false },\n      axisTick: { show: false },\n      splitLine: { show: false },\n      axisLabel: { show: this.yAxis.axisLabel },\n      inverse: true\n    };\n\n    const valueAxisOpts = {\n      axisLabel: { show: false },\n      axisLine: { show: false },\n      axisTick: { show: false },\n      splitLine: { show: false }\n    };\n\n    echarts.util.merge(this.actualOptions.yAxis, categoryAxisOpts, true);\n    echarts.util.merge(this.actualOptions.xAxis, valueAxisOpts, true);\n\n    this.actualOptions.grid = this.getThemeCustomValue(['progressBar', 'grid'], {});\n\n    const series = this.series();\n    if (series) {\n      const optionSeries = this.actualOptions.series as BarSeriesOption[];\n      (this.actualOptions.yAxis as any).data = series.map(item => item.name);\n\n      const dataItem: BarSeriesOption = {\n        type: 'bar',\n        stack: 'chart',\n        z: 3,\n        barWidth: itemWidth,\n        label: this.labelPositionOption,\n        data: series.map(item => item.percent)\n      };\n\n      const fillerItem: BarSeriesOption = {\n        type: 'bar',\n        stack: 'chart',\n        silent: true,\n        label: this.labelPositionOptionForValue,\n        itemStyle: {\n          color: grey\n        },\n        data: series.map(item => this.maxValue - item.percent)\n      };\n\n      optionSeries.push(dataItem);\n      optionSeries.push(fillerItem);\n    }\n\n    this.applyTitles();\n  }\n\n  protected override applyDataZoom(): void {}\n\n  /**\n   * Updates single value of a single progress bar.\n   */\n  changeSingleValue(valueIndex: number, value: number): void {\n    const optionSeries = this.actualOptions.series as BarSeriesOption[];\n    optionSeries[0].data![valueIndex] = value;\n    optionSeries[1].data![valueIndex] = this.maxValue - value;\n    this.updateEChart();\n  }\n\n  /**\n   * Updates multiple values of a single progress bar.\n   */\n  changeMultiValues(updateValues: ProgressBarValueUpdate[]): void {\n    const optionSeries = this.actualOptions.series as BarSeriesOption[];\n    updateValues.forEach(update => {\n      const currentDataItem = optionSeries[0].data![update.valueIndex];\n      if (!currentDataItem) {\n        return;\n      }\n      optionSeries[0].data![update.valueIndex] = update.value;\n      optionSeries[1].data![update.valueIndex] = this.maxValue - update.value;\n    });\n\n    this.updateEChart();\n  }\n}\n","@if (showCustomLegend() && (title() || subTitle())) {\n  <div class=\"si-h5 chart-title chart-title-width\" [style.background-color]=\"backgroundColor()\">\n    <div class=\"chart-title-text\" [style.color]=\"titleColor()\">{{ title() }}</div>\n    @if (subTitle()) {\n      <div class=\"si-body\" [style.color]=\"subTitleColor()\">{{ subTitle() }}</div>\n    }\n  </div>\n}\n\n<div\n  #chartContainerWrapper\n  class=\"chart-container-wrapper\"\n  [class.chart-scroll]=\"containerHeight()\"\n  [attr.tabindex]=\"containerHeight() ? '0' : null\"\n>\n  <div class=\"chart-container\" [style.height.px]=\"containerHeight()\">\n    @if (showCustomLegend()) {\n      @for (cl of customLegend; track $index) {\n        <si-custom-legend\n          #siCustomLegend\n          class=\"custom-legend\"\n          [style.top.px]=\"cl.top\"\n          [title]=\"title()\"\n          [subTitle]=\"subTitle()\"\n          [customLegend]=\"cl\"\n          [style.background-color]=\"backgroundColor()\"\n          [titleColor]=\"titleColor()\"\n          [subTitleColor]=\"subTitleColor()\"\n          [textColor]=\"textColor()\"\n          (legendIconClickEvent)=\"handleLegendClick($event)\"\n          (legendClickEvent)=\"handleLegendClick($event)\"\n          (legendHoverStartEvent)=\"handleLegendHover($event, true)\"\n          (legendHoverEndEvent)=\"handleLegendHover($event, false)\"\n        />\n      }\n    }\n    <div #chart class=\"echart-container\" [style.height.px]=\"containerHeight()\"></div>\n  </div>\n</div>\n@if (externalZoomSlider()) {\n  <div\n    #externalZoomSlider\n    class=\"external-zoom-container\"\n    [class.has-time-range-bar]=\"showTimeRangeBar()\"\n    [style.--time-bar-height.px]=\"timeBarHeight()\"\n  ></div>\n}\n\n@if (showTimeRangeBar() && zoomSlider()) {\n  <div\n    class=\"time-range-bar\"\n    [style.bottom.px]=\"timeBarBottom()\"\n    [style.padding-left.px]=\"timeBarLeft()\"\n    [style.padding-right.px]=\"timeBarRight()\"\n  >\n    <ng-content select=\"[slot=timeRangeBar]\" />\n  </div>\n}\n\n@if (inProgress()) {\n  <div class=\"progress-container\">\n    <si-chart-loading-spinner />\n  </div>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-chart-progress-bar.component';\nexport * from './si-chart-progress-bar.interface';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}