{"version":3,"file":"c8y-ngx-components-widgets-implementations-info-gauge.mjs","sources":["../../widgets/implementations/info-gauge/current-measurement.pipe.ts","../../widgets/implementations/info-gauge/info-gauge-widget-config/gauge.model.ts","../../widgets/implementations/info-gauge/radial-gauge/radial-gauge.service.ts","../../widgets/implementations/info-gauge/radial-gauge/radial-gauge.component.ts","../../widgets/implementations/info-gauge/radial-gauge/radial-gauge.component.html","../../widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.ts","../../widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.html","../../widgets/implementations/info-gauge/info-gauge-widget-config/preset-preview/preset-preview.component.ts","../../widgets/implementations/info-gauge/info-gauge-widget-config/preset-preview/preset-preview.component.html","../../widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.ts","../../widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.html","../../widgets/implementations/info-gauge/info-gauge-widget.module.ts","../../widgets/implementations/info-gauge/c8y-ngx-components-widgets-implementations-info-gauge.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { AlertService, MeasurementRealtimeService } from '@c8y/ngx-components';\nimport { IMeasurementValue } from '@c8y/client';\nimport { Observable, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\nconst INFO_GAUGE_COLORS = {\n  GREEN: 'var(--c8y-brand-50)',\n  YELLOW: 'var(--c8y-palette-status-warning)',\n  RED: 'var(--c8y-palette-status-danger)'\n} as const;\n\n@Pipe({\n  name: 'infoGaugeCurrentMeasurement',\n  pure: true,\n  standalone: true\n})\nexport class InfoGaugeCurrentMeasurementPipe implements PipeTransform {\n  constructor(\n    private measurementRealtime: MeasurementRealtimeService,\n    private alert: AlertService\n  ) {}\n  transform(\n    datapoint: KPIDetails,\n    calculateGauge?: false\n  ): Observable<{ date: string; value: number; unit: string; notFound?: boolean }>;\n  transform(\n    datapoint: KPIDetails,\n    calculateGauge?: true\n  ): Observable<{\n    date: string;\n    value: number;\n    unit: string;\n    color: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS];\n    strokeDashOffset: number;\n    notFound?: boolean;\n  }>;\n  transform(\n    datapoint: KPIDetails,\n    calculateGauge?: boolean\n  ): Observable<{\n    date: string;\n    value: number;\n    unit: string;\n    color?: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS];\n    strokeDashOffset?: number;\n    notFound?: boolean;\n  }> {\n    return this.measurementRealtime\n      .latestValueOfSpecificMeasurement$(\n        datapoint.fragment,\n        datapoint.series,\n        datapoint.__target,\n        1,\n        true\n      )\n      .pipe(\n        map(m => {\n          // in case measurement is not stored in DB when initially requested.\n          if (!m) {\n            return { value: Number.NaN, date: '', unit: datapoint.unit || '', notFound: true };\n          }\n          const measurementValue: IMeasurementValue = m[datapoint.fragment][datapoint.series];\n          const data = {\n            value: measurementValue.value,\n            unit: measurementValue.unit || datapoint.unit,\n            date: m.time\n          };\n          if (!calculateGauge) {\n            return data;\n          }\n          const gauge = this.calculateGauge(datapoint, measurementValue.value);\n          return { ...data, ...gauge };\n        }),\n        catchError(e => {\n          this.alert.addServerFailure(e);\n\n          return of({ value: Number.NaN, date: '', unit: '' });\n        })\n      );\n  }\n\n  private calculateGauge(datapoint: KPIDetails, value: number) {\n    const val = value;\n    const min = Number(datapoint.min || 0);\n    const max = Number(datapoint.max || 0);\n    const yMin = Number(datapoint.yellowRangeMin);\n    const yMax = Number(datapoint.yellowRangeMax);\n    const rMin = Number(datapoint.redRangeMin);\n    const rMax = Number(datapoint.redRangeMax);\n\n    // Previously d3 was used for linear scale: d3.scale.linear().domain([min, max]).range([0, 100]);\n    // wanted to avoid importing d3 just for this.\n    const scale = (value1: number) => (value1 - min) / ((max - min) / 100);\n\n    const strokeDashOffset = 125.75 + (377.25 - (scale(val) / 100) * 377.25);\n    let color: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS] = INFO_GAUGE_COLORS.GREEN;\n\n    if (Number.isFinite(yMin) && Number.isFinite(yMax)) {\n      if (val >= yMin && val <= yMax) {\n        color = INFO_GAUGE_COLORS.YELLOW;\n      }\n    }\n\n    if (Number.isFinite(rMin) && Number.isFinite(rMax)) {\n      if (val >= rMin && val <= rMax) {\n        color = INFO_GAUGE_COLORS.RED;\n      }\n    }\n\n    return { color, strokeDashOffset };\n  }\n}\n","import { gettext } from '@c8y/ngx-components';\nimport { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\n\n/* General properties for the gauge */\nexport interface GeneralGaugeOptions {\n  /**\n   * Name of the gauge preset\n   */\n  name?: string;\n\n  /**\n   * Radius of the gauge (e.g., '90%')\n   */\n  radius?: string;\n\n  /**\n   * Center of the gauge (e.g., ['50%', '50%'])\n   */\n  center?: string[];\n\n  /**\n   * Starting angle of the gauge\n   */\n  startAngle?: number;\n\n  /**\n   * Ending angle of the gauge\n   */\n  endAngle?: number;\n}\n\n/**\n * Properties related to the split lines of the gauge\n */\nexport interface SplitPropertiesGaugeOptions {\n  /**\n   * Number of segments in the gauge\n   */\n  splitNumber?: number;\n\n  /**\n   * Length of the split line, can be a percentage value relative to radius\n   */\n  splitLineLength?: number | string;\n\n  /**\n   * Length of the split line as a ratio relative to the axisLineWidth (overrides splitLineLength)\n   */\n  splitLineLengthRatio?: number;\n\n  /**\n   * Distance between the split line and axis line\n   */\n  splitLineDistance?: number;\n\n  /**\n   * Distance between the split line and axis line as a ratio relative to the axisLineWidth (overrides splitLineDistance)\n   */\n  splitLineDistanceRatio?: number;\n\n  /**\n   * Color of the split lines (used only in the custom preset)\n   */\n  splitLineColor?: string;\n\n  /**\n   * Width of the split lines\n   */\n  splitLineWidth?: number;\n}\n\n/**\n * Properties related to the ticks of the gauge\n */\nexport interface TickPropertiesGaugeOptions {\n  /**\n   * Whether to show ticks\n   */\n  tickShow?: boolean;\n\n  /**\n   * Width of the ticks\n   */\n  tickWidth?: number;\n\n  /**\n   * Color of the ticks (used only in the custom preset)\n   */\n  tickColor?: string;\n\n  /**\n   * Distance of the ticks from the center\n   */\n  tickDistance?: number;\n\n  /**\n   * Distance of the ticks from the center as a ratio relative to the axisLineWidth (overrides tickDistance)\n   */\n  tickDistanceRatio?: number;\n\n  /**\n   * Length of the ticks\n   */\n  tickLength?: number;\n\n  /**\n   * Length of the ticks as a ratio relative to the axisLineWidth (overrides tickLength)\n   */\n  tickLengthRatio?: number;\n}\n\n/**\n * Properties related to the axis of the gauge\n */\nexport interface AxisPropertiesGaugeOptions {\n  /**\n   * Distance of the axis labels from the center\n   */\n  axisLabelDistance?: number;\n\n  /**\n   * Distance of the axis labels from the center as a ratio relative to the axisLineWidth (overrides axisLabelDistance)\n   */\n  axisLabelDistanceRatio?: number;\n\n  /**\n   * Color of the axis labels (used only in the custom preset)\n   */\n  axisLabelColor?: string;\n\n  /**\n   * Font size of the axis labels\n   */\n  axisLabelFontSize?: number;\n\n  /**\n   * Font size of the axis labels as a ratio relative to the container size (overrides axisLabelFontSize)\n   */\n  axisLabelFontSizeRatio?: number;\n\n  /**\n   * Minimum font size of the axis labels (used for clamping)\n   */\n  axisLabelFontSizeMin?: number;\n\n  /**\n   * Maximum font size of the axis labels (used for clamping)\n   */\n  axisLabelFontSizeMax?: number;\n\n  /**\n   * Width of the axis line\n   */\n  axisLineWidth?: number;\n\n  /**\n   * Width of the axis line as a ratio relative to the container size (overrides axisLineWidth)\n   */\n  axisLineWidthRatio?: number;\n}\n\n/**\n * Properties related to the pointer of the gauge\n */\nexport interface PointerPropertiesGaugeOptions {\n  /**\n   * Whether to show the pointer\n   */\n  showPointer?: boolean;\n\n  /**\n   * Style of the pointer (e.g., custom path)\n   */\n  pointerStyle?: string;\n\n  /**\n   * Color of the pointer (used only in the custom preset)\n   */\n  pointerColor?: string;\n\n  /**\n   * Width of the pointer\n   */\n  pointerWidth?: string | number;\n\n  /**\n   * Width of the pointer as a ratio relative to the container size (overrides pointerWidth)\n   */\n  pointerWidthRatio?: number;\n\n  /**\n   * Length of the pointer\n   */\n  pointerLength?: string | number;\n\n  /**\n   * Length of the pointer as a ratio relative to the container size (overrides pointerLength)\n   */\n  pointerLenghtRatio?: number;\n\n  /**\n   * Offset of the pointer from the center\n   */\n  pointerOffset?: string | number;\n}\n\n/**\n * Properties related to the progress bar of the gauge\n */\nexport interface ProgressBarGaugeOptions {\n  /**\n   * Whether to show a progress bar\n   */\n  progressBar?: boolean;\n\n  /**\n   * Width of the progress bar\n   */\n  progressBarWidth?: number;\n\n  /**\n   * Whether the progress bar has rounded caps\n   */\n  progressBarRoundCap?: boolean;\n\n  /**\n   * Color of the progress bar\n   */\n  progressBarColor?: string;\n\n  /**\n   * Additional colors for the gauge\n   */\n  additionalGaugeColors?: string[];\n}\n\n/**\n * Typography-related properties for the gauge\n */\nexport interface TypographyGaugeOptions {\n  /**\n   * Font size of the measurement value\n   */\n  measurementValueFontRatio?: number;\n\n  /**\n   * Minimum font size of the measurement value\n   */\n  measurementValueFontMin?: number;\n\n  /**\n   * Maximum font size of the measurement value\n   */\n  measurementValueFontMax?: number;\n\n  /**\n   * Color of the measurement value\n   */\n  measurementValueColor?: string;\n\n  /**\n   * Font size of the unit\n   */\n  unitFontSize?: number;\n\n  /**\n   * Font size of the unit as a ratio relative to the container size (overrides unitFontSize)\n   */\n  unitFontRatio?: number;\n\n  /**\n   * Minimum font size of the unit\n   */\n  unitFontMin?: number;\n\n  /**\n   * Maximum font size of the unit\n   */\n  unitFontMax?: number;\n\n  /**\n   * Color of the unit\n   */\n  unitColor?: string;\n\n  /**\n   * Font size of the date\n   */\n  dateFontSize?: number;\n\n  /**\n   * Font size of the date as a ratio relative to the container size (overrides dateFontSize)\n   */\n  dateFontRatio?: number;\n\n  /**\n   * Minimum font size of the date\n   */\n  dateFontMin?: number;\n\n  /**\n   * Maximum font size of the date\n   */\n  dateFontMax?: number;\n\n  /**\n   * Color of the date\n   */\n  dateColor?: string;\n}\n\n/**\n * Properties related to detailed information display\n */\nexport interface DetailPropertiesGaugeOptions {\n  /**\n   * Whether to show detailed information\n   */\n  showDetail?: boolean;\n\n  /**\n   * Font size of the value displayed\n   */\n  valueFontSize?: number;\n\n  /**\n   * Offset of the detail from the center\n   */\n  detailOffsetCenter?: number[] | string[];\n\n  /**\n   * Whether to show mark points\n   */\n  showMarkPoint?: boolean;\n}\n\n/**\n * Main interface combining all the smaller interfaces\n */\nexport interface GaugeOptions\n  extends GeneralGaugeOptions,\n    SplitPropertiesGaugeOptions,\n    TickPropertiesGaugeOptions,\n    AxisPropertiesGaugeOptions,\n    PointerPropertiesGaugeOptions,\n    ProgressBarGaugeOptions,\n    TypographyGaugeOptions,\n    DetailPropertiesGaugeOptions {\n  /**\n   * Miscellaneous properties for flexibility\n   */\n  [key: string]: any;\n}\n\nexport interface GaugeOptionsColors {\n  splitLineColor: string;\n  tickColor: string;\n  axisLabelColor: string;\n  pointerColor: string;\n  knobColor: string;\n  knobFontColor: string;\n  measurementValueColor: string;\n  unitColor: string;\n  dateColor: string;\n  progressBarColor: string;\n  fontFamily: string;\n}\n\nexport interface GaugeAnchor {\n  /**\n   * Indicates whether to show the anchor.\n   */\n  show?: boolean;\n\n  /**\n   * Indicates whether to show the anchor above the gauge.\n   */\n  showAbove?: boolean;\n\n  /**\n   * The size of the anchor.\n   */\n  size?: number;\n\n  /**\n   * The size of the anchor as a ratio relative to the container size.\n   * Overrides the `size` property when set.\n   */\n  sizeRatio?: number;\n\n  /**\n   * The style of the anchor, represented as a key-value pair object.\n   */\n  itemStyle?: { [key: string]: any };\n}\n\nexport const GAUGE_PRESET_NAMES = {\n  DEFAULT: gettext('Default'),\n  CUSTOM: gettext('Custom preset'),\n  POINTER: gettext('Pointer'),\n  PROGRESS_BAR: gettext('Progress bar'),\n  PROGRESS_INDICATOR: gettext('Progress indicator'),\n  GRADE_RATING: gettext('Grade rating')\n} as const;\n\nexport interface InfoGaugeWidgetConfig {\n  datapoints?: KPIDetails[];\n  datapointsLabels?: KPIDetails[];\n  datapointsGauge?: KPIDetails[];\n  selectedPresetId?: string;\n  gaugeOptions?: GaugeOptions;\n  fractionSize: number;\n}\n\nexport const GAUGE_PRESETS: GaugeOptions[] = [\n  {\n    // General properties\n    name: GAUGE_PRESET_NAMES.DEFAULT,\n    id: 'default',\n    radius: '90%',\n    startAngle: 240,\n    endAngle: 300,\n\n    // Split properties\n    splitNumber: 10,\n    splitLineLengthRatio: 0.3,\n    splitLineColor: '#fff',\n    splitLineWidth: 4,\n    splitLineDistanceRatio: -0.3,\n\n    // Tick properties\n    tickShow: true,\n    tickDistanceRatio: -0.16,\n    tickWidth: 2,\n    tickColor: '#fff',\n    tickLengthRatio: 0.16,\n\n    // Axis properties\n    axisLabelDistanceRatio: 0.25,\n    axisLabelColor: 'black',\n    axisLabelFontSizeMin: 8,\n    axisLabelFontSizeRatio: 0.04,\n    axisLabelFontSizeMax: 32,\n    axisLineWidthRatio: 0.125,\n\n    // Pointer properties\n    showPointer: true,\n    pointerColor: '#222',\n    pointerStyle: 'triangle',\n    pointerWidthRatio: 2,\n    pointerLength: '55%',\n    pointerOffset: 0,\n\n    // Progress bar properties\n    progressBar: false,\n    progressBarColor: '#119d11',\n\n    // Detail properties\n    showDetail: false,\n    showMarkPoint: true,\n\n    // Typography & Anchor\n    measurementValueFontRatio: 0.08,\n    measurementValueFontMin: 16,\n    measurementValueFontMax: 56,\n    measurementValueColor: 'white',\n    unitFontSize: 18,\n    unitFontRatio: 0.045,\n    unitFontMin: 14,\n    unitFontMax: 40,\n    unitColor: 'white',\n    dateFontSize: 0.001,\n    dateFontRatio: 0.03,\n    dateFontMin: 10,\n    dateFontMax: 16,\n    dateColor: 'gray',\n    anchor: {\n      show: true,\n      sizeRatio: 0.5,\n      itemStyle: {\n        color: '#222' // Color of the anchor\n      }\n    }\n  },\n  {\n    // General properties\n    name: GAUGE_PRESET_NAMES.POINTER,\n    id: 'pointer',\n    radius: '90%',\n    startAngle: 240,\n    endAngle: 300,\n\n    // Split properties\n    splitNumber: 10,\n    splitLineLengthRatio: 1,\n    splitLineColor: '#fff',\n    splitLineWidth: 4,\n    splitLineDistanceRatio: -1,\n\n    // Tick properties\n    tickShow: true,\n    tickDistanceRatio: -1,\n    tickWidth: 2,\n    tickColor: '#fff',\n    tickLengthRatio: 0.2666666667,\n\n    // Axis properties\n    axisLabelColor: '#212121',\n    axisLabelFontSizeMin: 8,\n    axisLabelFontSizeRatio: 0.04,\n    axisLabelFontSizeMax: 32,\n    axisLineWidthRatio: 0.075,\n    axisLabelDistanceRatio: 1.1666666667,\n\n    // Pointer properties\n    showPointer: true,\n    pointerStyle: 'default',\n    pointerColor: 'black',\n    pointerWidthRatio: 0.2666666667,\n    pointerLength: '70%',\n    pointerOffset: 5,\n\n    // Progress bar properties\n    progressBar: false,\n    progressBarColor: '#119d11',\n\n    // Detail properties\n    showDetail: true,\n    detailOffsetCenter: ['0%', '35%'],\n    showMarkPoint: false,\n\n    // Typography specs\n    measurementValueFontRatio: 0.08,\n    measurementValueFontMin: 16,\n    measurementValueFontMax: 56,\n    measurementValueColor: 'black',\n    unitFontSize: 18,\n    unitFontRatio: 0.045,\n    unitFontMin: 8,\n    unitFontMax: 40,\n    unitColor: 'black',\n    dateFontRatio: 0.03,\n    dateFontMin: 10,\n    dateFontMax: 16,\n    dateColor: 'black'\n  },\n  {\n    // General properties\n    name: GAUGE_PRESET_NAMES.PROGRESS_BAR,\n    id: 'progress-bar',\n    radius: '85%',\n    center: ['50%', '57%'],\n    startAngle: 200,\n    endAngle: -20,\n\n    // Split properties\n    splitNumber: 10,\n    splitLineLengthRatio: 1,\n    splitLineColor: '#fff',\n    splitLineWidth: 3,\n    splitLineDistanceRatio: -1,\n\n    // Tick properties\n    tickShow: false,\n\n    // Axis properties\n    axisLabelColor: '#212121',\n    axisLabelFontSizeMin: 8,\n    axisLabelFontSizeRatio: 0.04,\n    axisLabelFontSizeMax: 32,\n    axisLineWidthRatio: 0.075,\n    axisLabelDistanceRatio: -0.8,\n\n    // Pointer properties\n    showPointer: false,\n\n    // Progress bar properties\n    progressBar: true,\n    progressBarWidthRatio: 0.3333,\n    progressBarRoundCap: false,\n    progressBarColor: '#119d11',\n    additionalGaugeColors: ['#FFAB91', '#FD7347'],\n\n    // Detail properties\n    showDetail: true,\n    detailOffsetCenter: ['0%', '0%'],\n    showMarkPoint: false,\n\n    // Typography specs\n    measurementValueFontRatio: 0.12,\n    measurementValueFontMin: 16,\n    measurementValueFontMax: 72,\n    measurementValueColor: 'black',\n    unitFontSize: 18,\n    unitFontRatio: 0.085,\n    unitFontMin: 10,\n    unitFontMax: 40,\n    unitColor: 'black',\n    dateFontRatio: 0.03,\n    dateFontMin: 10,\n    dateFontMax: 16,\n    dateColor: 'black'\n  },\n  {\n    // General properties\n    name: GAUGE_PRESET_NAMES.PROGRESS_INDICATOR,\n    id: 'progress-indicator',\n    radius: '85%',\n    startAngle: 240,\n    endAngle: 300,\n\n    // Split line properties\n    splitNumber: 4,\n    splitLineLengthRatio: 1,\n    splitLineColor: '#fff',\n    splitLineWidth: 2,\n    splitLineDistanceRatio: -1,\n\n    // Tick properties\n    tickShow: false,\n\n    // Axis properties\n    axisLabelColor: '#212121',\n    axisLabelFontSizeMin: 7,\n    axisLabelFontSizeRatio: 0.04,\n    axisLabelFontSizeMax: 32,\n    axisLineWidthRatio: 0.075,\n    axisLabelDistanceRatio: -1,\n\n    // Pointer properties\n    showPointer: true,\n    pointerStyle: 'default',\n    pointerColor: 'black',\n    pointerWidthRatio: 0.2,\n    pointerLength: '100%',\n    pointerOffset: 5,\n\n    // Progress bar properties\n    progressBar: true,\n    progressBarWidthRatio: 0.3333,\n    progressBarRoundCap: false,\n    progressBarColor: '#119d11',\n\n    // Detail properties\n    showDetail: true,\n    detailOffsetCenter: ['0%', '35%'],\n    showMarkPoint: false,\n\n    // Typography  & Anchor\n    measurementValueFontRatio: 0.08,\n    measurementValueFontMin: 12,\n    measurementValueFontMax: 56,\n    measurementValueColor: 'black',\n    unitFontSize: 18,\n    unitFontRatio: 0.045,\n    unitFontMin: 10,\n    unitFontMax: 40,\n    unitColor: 'black',\n    dateFontRatio: 0.03,\n    dateFontMin: 10,\n    dateFontMax: 16,\n    dateColor: 'black',\n\n    anchor: {\n      show: true,\n      showAbove: true,\n      sizeRatio: 0.1,\n      itemStyle: {\n        borderWidth: 10\n      }\n    }\n  },\n  {\n    // General properties\n    name: GAUGE_PRESET_NAMES.GRADE_RATING,\n    id: 'grade-rating',\n    radius: '75%',\n    startAngle: 180,\n    endAngle: 360,\n    center: ['50%', '65%'],\n\n    // Split line properties\n    splitNumber: 4,\n    splitLineLengthRatio: 3,\n    splitLineColor: 'auto',\n    splitLineWidth: 6,\n    splitLineDistanceRatio: -3,\n\n    // Tick properties\n    tickShow: true,\n    tickDistanceRatio: -2,\n    tickWidth: 2,\n    tickColor: 'auto',\n    tickLengthRatio: 2,\n\n    // Axis properties\n    axisLabelDistanceRatio: -6,\n    axisLabelColor: 'auto',\n    axisLabelFontSizeMin: 6,\n    axisLabelFontSizeRatio: 0.04,\n    axisLabelFontSizeMax: 32,\n    axisLineWidthRatio: 0.02,\n\n    // Pointer properties\n    showPointer: true,\n    pointerColor: 'black',\n    pointerStyle: 'triangle',\n    pointerWidthRatio: 2,\n    pointerLength: '12%',\n    pointerOffset: '-50%',\n\n    // Progress bar properties\n    progressBar: false,\n    progressBarColor: '#119d11',\n\n    // Detail properties\n    showDetail: true,\n    detailOffsetCenter: ['0%', '0%'],\n    showMarkPoint: false,\n\n    // Typography\n    measurementValueFontRatio: 0.08,\n    measurementValueFontMin: 16,\n    measurementValueFontMax: 56,\n    measurementValueColor: 'black',\n    unitFontRatio: 0.045,\n    unitFontMin: 8,\n    unitFontMax: 40,\n    unitColor: 'black',\n    dateFontRatio: 0.03,\n    dateFontMin: 10,\n    dateFontMax: 16,\n    dateColor: 'black'\n  }\n];\n","import { ElementRef, Injectable } from '@angular/core';\nimport { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { GaugeOptions, GaugeOptionsColors } from '../info-gauge-widget-config/gauge.model';\nimport { IMeasurementValue } from '@c8y/client';\nimport { DatePipe } from '@c8y/ngx-components';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class RadialGaugeService {\n  private chart: ElementRef;\n  containerSize = 400;\n\n  constructor(private c8yDatePipe: DatePipe) {}\n\n  setChart(chart: ElementRef): void {\n    this.chart = chart;\n  }\n\n  getChartOptions(\n    gaugeOptions: GaugeOptions,\n    activeDatapointGauge: KPIDetails,\n    selectedPresetId: string,\n    gaugeOptionsColors: GaugeOptionsColors,\n    rangeColors: { default: string; yellow: string; red: string },\n    measurement: IMeasurementValue,\n    fractionSize: number\n  ) {\n    const colorArray = this.getColorArray(activeDatapointGauge, rangeColors);\n\n    return {\n      series: [\n        {\n          type: 'gauge',\n          radius: gaugeOptions?.radius || '90%',\n          center: gaugeOptions?.center || ['50%', '50%'],\n          startAngle: gaugeOptions?.startAngle || 240,\n          endAngle: gaugeOptions?.endAngle || 300,\n          min: activeDatapointGauge?.min || 0,\n          max:\n            activeDatapointGauge?.max !== undefined && activeDatapointGauge?.max !== null\n              ? activeDatapointGauge.max\n              : 100,\n\n          // Split properties\n          splitNumber: gaugeOptions?.splitNumber || 10,\n          splitLine: {\n            distance: gaugeOptions?.splitLineDistanceRatio\n              ? this.containerSize *\n                gaugeOptions?.axisLineWidthRatio *\n                gaugeOptions?.splitLineDistanceRatio\n              : gaugeOptions?.splitLineDistance || -30,\n\n            length: gaugeOptions?.splitLineLengthRatio\n              ? this.containerSize *\n                gaugeOptions?.axisLineWidthRatio *\n                gaugeOptions?.splitLineLengthRatio\n              : gaugeOptions?.splitLineLength || 30,\n\n            lineStyle: {\n              color:\n                selectedPresetId === 'custom' || selectedPresetId === 'grade-rating'\n                  ? gaugeOptions?.splitLineColor\n                  : gaugeOptionsColors?.splitLineColor || '#fff',\n              width: gaugeOptions?.splitLineWidth || 4\n            }\n          },\n\n          // Tick properties\n          axisTick: {\n            show: gaugeOptions?.tickShow || false,\n            distance: gaugeOptions?.tickDistanceRatio\n              ? this.containerSize *\n                gaugeOptions?.axisLineWidthRatio *\n                gaugeOptions?.tickDistanceRatio\n              : gaugeOptions?.tickDistance || -30,\n            length: gaugeOptions?.tickLengthRatio\n              ? this.containerSize *\n                gaugeOptions?.axisLineWidthRatio *\n                gaugeOptions?.tickLengthRatio\n              : gaugeOptions?.tickLength || 8,\n            lineStyle: {\n              color:\n                selectedPresetId === 'custom' || selectedPresetId === 'grade-rating'\n                  ? gaugeOptions.tickColor\n                  : gaugeOptionsColors?.tickColor || '#fff',\n              width: gaugeOptions?.tickWidth || 2\n            }\n          },\n\n          // Axis properties\n          axisLine: {\n            lineStyle: {\n              width: gaugeOptions?.axisLineWidthRatio\n                ? this.containerSize * gaugeOptions?.axisLineWidthRatio\n                : gaugeOptions?.axisLineWidth || 30,\n              color: colorArray\n            }\n          },\n\n          axisLabel: {\n            color:\n              selectedPresetId === 'custom' || selectedPresetId === 'grade-rating'\n                ? gaugeOptions.axisLabelColor\n                : gaugeOptionsColors?.axisLabelColor || 'inherit',\n            distance: gaugeOptions?.axisLabelDistanceRatio\n              ? this.containerSize *\n                gaugeOptions?.axisLineWidthRatio *\n                gaugeOptions?.axisLabelDistanceRatio\n              : gaugeOptions?.axisLabelDistance || 40,\n            fontSize: gaugeOptions?.axisLabelFontSizeRatio\n              ? this.clampRelative(\n                  gaugeOptions?.axisLabelFontSizeRatio,\n                  gaugeOptions?.axisLabelFontSizeMin,\n                  gaugeOptions?.axisLabelFontSizeMax\n                )\n              : gaugeOptions?.axisLabelFontSize || 16,\n            fontWeight: 'bold',\n            fontFamily: gaugeOptionsColors?.fontFamily\n          },\n\n          // pointer properties\n          pointer: {\n            ...(gaugeOptions?.pointerStyle !== 'default' && {\n              icon: gaugeOptions?.pointerStyle\n            }),\n            show: gaugeOptions?.showPointer || false,\n            length: gaugeOptions?.pointerLengthRatio\n              ? gaugeOptions?.pointerLengthRatio *\n                (this.containerSize * gaugeOptions?.axisLineWidthRatio)\n              : gaugeOptions?.pointerLength || '65%',\n            width: gaugeOptions?.pointerWidthRatio\n              ? this.containerSize *\n                gaugeOptions?.axisLineWidthRatio *\n                gaugeOptions?.pointerWidthRatio\n              : gaugeOptions?.pointerWidth || 40,\n            offsetCenter:\n              selectedPresetId === 'default'\n                ? [0, this.containerSize * gaugeOptions?.axisLineWidthRatio * -1]\n                : [0, gaugeOptions?.pointerOffset || -30],\n            itemStyle: {\n              color:\n                selectedPresetId === 'custom'\n                  ? gaugeOptions.pointerColor\n                  : gaugeOptionsColors?.pointerColor || 'inherit'\n            }\n          },\n\n          // Progress bar properties\n          progress: {\n            show: gaugeOptions?.progressBar || false,\n            roundCap: gaugeOptions?.progressBarRoundCap || false,\n            width: gaugeOptions?.progressBarWidthRatio\n              ? this.containerSize *\n                gaugeOptions?.axisLineWidthRatio *\n                gaugeOptions?.progressBarWidthRatio\n              : gaugeOptions?.progressBarWidth || 18,\n            itemStyle: {\n              color:\n                selectedPresetId === 'custom'\n                  ? gaugeOptions.progressBarColor\n                  : gaugeOptionsColors?.progressBarColor || 'inherit'\n            }\n          },\n\n          // Anchor properties\n          anchor: gaugeOptions?.anchor\n            ? {\n                ...gaugeOptions.anchor,\n                size: gaugeOptions?.anchor?.sizeRatio\n                  ? this.containerSize * gaugeOptions?.anchor?.sizeRatio\n                  : gaugeOptions?.anchor?.size || 45,\n                itemStyle: {\n                  color:\n                    selectedPresetId === 'custom'\n                      ? gaugeOptions.pointerColor\n                      : gaugeOptionsColors?.pointerColor\n                }\n              }\n            : undefined,\n\n          // Detail properties\n          detail: {\n            show: gaugeOptions?.showDetail || false,\n            valueAnimation: true,\n            offsetCenter: gaugeOptions?.detailOffsetCenterYRatio\n              ? [0, gaugeOptions?.detailOffsetCenterYRatio * this.containerSize]\n              : gaugeOptions?.detailOffsetCenter || [0, 0],\n\n            formatter: () => {\n              const value = measurement?.value.toFixed(fractionSize) || 0;\n              const unit = activeDatapointGauge?.unit || measurement?.unit || '';\n              const date = new Date(measurement?.date);\n              const formattedDate = this.c8yDatePipe.transform(date);\n              return `{value|${value}}{unit|${unit}} \\n {date|${formattedDate}} `;\n            },\n            color: 'inherit',\n            lineHeight: gaugeOptions?.measurementValueFontRatio\n              ? this.clampRelative(\n                  gaugeOptions?.measurementValueFontRatio * 0.9,\n                  gaugeOptions?.measurementValueFontSizeMin,\n                  gaugeOptions?.measurementValueFontSizeMax\n                )\n              : gaugeOptions?.measurementValueFontSize || 32,\n            rich: {\n              value: {\n                fontSize: gaugeOptions?.measurementValueFontRatio\n                  ? this.clampRelative(\n                      fractionSize > 5 || measurement?.value > 9999\n                        ? gaugeOptions?.measurementValueFontRatio * 0.5\n                        : gaugeOptions?.measurementValueFontRatio,\n                      gaugeOptions?.measurementValueFontSizeMin,\n                      gaugeOptions?.measurementValueFontSizeMax\n                    )\n                  : gaugeOptions?.measurementValueFontSize || 32,\n                fontWeight: 'bolder',\n                fontFamily: gaugeOptionsColors?.fontFamily,\n                color:\n                  selectedPresetId === 'custom'\n                    ? gaugeOptions.measurementValueColor\n                    : gaugeOptionsColors?.measurementValueColor || '#777'\n              },\n              unit: {\n                fontSize: gaugeOptions?.unitFontRatio\n                  ? this.clampRelative(\n                      gaugeOptions?.unitFontRatio,\n                      gaugeOptions?.unitFontMin,\n                      gaugeOptions?.unitFontMax\n                    )\n                  : gaugeOptions?.unitFontSize || 20,\n                fontFamily: gaugeOptionsColors?.fontFamily,\n                color:\n                  selectedPresetId === 'custom'\n                    ? gaugeOptions?.unitColor\n                    : gaugeOptionsColors?.unitColor || '#999'\n              },\n              date: {\n                fontSize: gaugeOptions?.dateFontRatio\n                  ? this.clampRelative(\n                      gaugeOptions?.dateFontRatio,\n                      gaugeOptions?.dateFontSizeMin,\n                      gaugeOptions?.dateFontSizeMax\n                    )\n                  : gaugeOptions?.dateFontSize || 12,\n                fontFamily: gaugeOptionsColors?.fontFamily,\n                color:\n                  selectedPresetId === 'custom'\n                    ? gaugeOptions?.dateColor\n                    : gaugeOptionsColors?.dateColor || '#555'\n              }\n            }\n          },\n          markPoint: {\n            symbolSize: 0,\n            offsetCenter: gaugeOptions?.detailOffsetCenter || [0, 0],\n            data: [\n              {\n                x: '50%',\n                y: '50%',\n                label: {\n                  show: gaugeOptions?.showMarkPoint,\n                  formatter: () => {\n                    const value = measurement?.value.toFixed(fractionSize) || 0;\n                    const unit = activeDatapointGauge?.unit || measurement?.unit || '';\n                    const date = new Date(measurement?.date);\n                    const formattedDate = this.c8yDatePipe.transform(date);\n                    return `{value|${value}}{unit|${unit}} \\n {date|${formattedDate}} `;\n                  },\n                  color: '#fff',\n                  align: 'center',\n                  rich: {\n                    value: {\n                      fontSize: gaugeOptions?.measurementValueFontRatio\n                        ? this.clampRelative(\n                            fractionSize > 5\n                              ? gaugeOptions?.measurementValueFontRatio * 0.5\n                              : gaugeOptions?.measurementValueFontRatio,\n                            fractionSize > 5\n                              ? gaugeOptions.measurementValueFontMin * 0.5\n                              : gaugeOptions?.measurementValueFontSizeMin,\n                            gaugeOptions?.measurementValueFontSizeMax\n                          )\n                        : gaugeOptions?.measurementValueFontSize || 32,\n                      fontFamily: gaugeOptionsColors?.fontFamily,\n                      fontWeight: 'bolder',\n                      color: gaugeOptionsColors?.knobFontColor || '#777'\n                    },\n                    unit: {\n                      fontSize: gaugeOptions?.unitFontRatio\n                        ? this.clampRelative(\n                            gaugeOptions?.unitFontRatio,\n                            gaugeOptions?.unitFontSizeMin,\n                            gaugeOptions?.unitFontSizeMax\n                          )\n                        : gaugeOptions?.unitFontSize || 20,\n                      fontFamily: gaugeOptionsColors?.fontFamily,\n                      color: gaugeOptionsColors?.knobFontColor || '#999'\n                    },\n                    date: {\n                      fontSize: gaugeOptions?.dateFontRatio\n                        ? this.clampRelative(\n                            gaugeOptions?.dateFontRatio,\n                            gaugeOptions?.dateFontSizeMin,\n                            gaugeOptions?.dateFontSizeMax\n                          )\n                        : gaugeOptions?.dateFontSize || 12,\n                      fontFamily: gaugeOptionsColors?.fontFamily,\n                      color: gaugeOptionsColors?.knobFontColor || '#555'\n                    }\n                  }\n                }\n              }\n            ]\n          },\n          data: [\n            {\n              value: 0 || measurement?.value\n            }\n          ]\n        }\n      ]\n    };\n  }\n\n  updateRangeColors(): any {\n    if (!this.chart) {\n      return;\n    }\n\n    return {\n      default: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n        '--c8y-form-control-border-color-default'\n      ),\n      yellow: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n        '--c8y-palette-status-warning'\n      ),\n      red: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n        '--c8y-palette-status-danger'\n      )\n    };\n  }\n\n  updateGaugeOptionsColors(): any {\n    if (!this.chart) {\n      return;\n    }\n\n    return {\n      splitLineColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n        '--c8y-root-component-background-default'\n      ),\n      tickColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n        '--c8y-root-component-background-default'\n      ),\n      axisLabelColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n        '--c8y-root-component-color-default'\n      ),\n      pointerColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n        '--c8y-root-component-color-default'\n      ),\n      knobColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n        '--c8y-root-component-color-default'\n      ),\n      knobFontColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n        '--c8y-root-component-background-default'\n      ),\n      measurementValueColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n        '--c8y-root-component-color-default'\n      ),\n      unitColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n        '--c8y-root-component-color-default'\n      ),\n      dateColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n        '--c8y-root-component-text-muted'\n      ),\n      progressBarColor: getComputedStyle(this.chart.nativeElement).getPropertyValue(\n        '--c8y-root-component-brand-primary'\n      ),\n      fontFamily: getComputedStyle(document.body).getPropertyValue('font-family')\n    };\n  }\n\n  private getColorArray(\n    activeDatapointGauge: KPIDetails,\n    rangeColors: { default: string; yellow: string; red: string }\n  ): [number, string][] {\n    const min = activeDatapointGauge?.min ?? 0;\n    const max = activeDatapointGauge?.max ?? 100;\n    const range = max - min;\n\n    const yellowMin = activeDatapointGauge?.yellowRangeMin;\n    const yellowMax = activeDatapointGauge?.yellowRangeMax;\n    const redMin = activeDatapointGauge?.redRangeMin;\n    const redMax = activeDatapointGauge?.redRangeMax;\n\n    type Range = { start: number; end: number; color: string };\n\n    const ranges: Range[] = [];\n\n    // First add red range\n    if (redMin != null && redMax != null && redMin < redMax) {\n      ranges.push({ start: redMin, end: redMax, color: rangeColors.red });\n    }\n\n    // Then add yellow, but clip out any overlap with red\n    if (yellowMin != null && yellowMax != null && yellowMin < yellowMax) {\n      const redRange = ranges.find(r => r.color === rangeColors.red);\n\n      if (\n        !redRange ||\n        yellowMax <= redRange.start || // yellow ends before red\n        yellowMin >= redRange.end // yellow starts after red\n      ) {\n        // no overlap\n        ranges.push({ start: yellowMin, end: yellowMax, color: rangeColors.yellow });\n      } else {\n        // partial overlap – split yellow into non-overlapping parts\n        if (yellowMin < redRange.start) {\n          ranges.push({\n            start: yellowMin,\n            end: Math.min(yellowMax, redRange.start),\n            color: rangeColors.yellow\n          });\n        }\n        if (yellowMax > redRange.end) {\n          ranges.push({\n            start: Math.max(yellowMin, redRange.end),\n            end: yellowMax,\n            color: rangeColors.yellow\n          });\n        }\n      }\n    }\n\n    // Sort by start position\n    ranges.sort((a, b) => a.start - b.start);\n\n    // Build segments\n    const segments: [number, string][] = [];\n    let current = min;\n\n    for (const { start, end, color } of ranges) {\n      if (start > current) {\n        // Default fill before this range\n        segments.push([(start - min) / range, rangeColors.default]);\n      }\n      // Start color\n      segments.push([(start - min) / range, color]);\n      // End color\n      segments.push([(end - min) / range, color]);\n\n      current = Math.max(current, end);\n    }\n\n    // Fill remaining with default\n    if (current < max) {\n      segments.push([(current - min) / range, rangeColors.default]);\n    }\n\n    if (segments.length === 0 || segments[segments.length - 1][0] < 1) {\n      segments.push([1, rangeColors.default]);\n    }\n\n    return segments;\n  }\n\n  private clampRelative(ratio: number, min: number, max: number): number {\n    const clampedValue = this.containerSize * ratio;\n    if (clampedValue < min) {\n      return min;\n    } else if (clampedValue > max) {\n      return max;\n    } else {\n      return clampedValue;\n    }\n  }\n}\n","import {\n  Component,\n  OnChanges,\n  Input,\n  SimpleChanges,\n  ElementRef,\n  ViewChild,\n  AfterViewInit,\n  OnDestroy,\n  inject\n} from '@angular/core';\nimport type { ECharts } from 'echarts';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { MeasurementRealtimeService, ThemeSwitcherService } from '@c8y/ngx-components';\nimport { AsyncPipe } from '@angular/common';\nimport { IMeasurementValue } from '@c8y/client';\nimport { BehaviorSubject, Observable, of, Subscription, switchMap, tap } from 'rxjs';\nimport { NGX_ECHARTS_CONFIG, NgxEchartsModule } from 'ngx-echarts';\nimport {\n  GAUGE_PRESETS,\n  GaugeOptions,\n  GaugeOptionsColors\n} from '../info-gauge-widget-config/gauge.model';\nimport { RadialGaugeService } from './radial-gauge.service';\n\n@Component({\n  selector: 'c8y-radial-gauge',\n  templateUrl: './radial-gauge.component.html',\n  host: { class: 'c8y-radial-gauge' },\n  providers: [\n    MeasurementRealtimeService,\n    RadialGaugeService,\n    { provide: NGX_ECHARTS_CONFIG, useFactory: () => ({ echarts: () => import('echarts') }) }\n  ],\n  standalone: true,\n  imports: [AsyncPipe, NgxEchartsModule]\n})\nexport class RadialGaugeViewComponent implements OnChanges, OnDestroy, AfterViewInit {\n  @Input() activeDatapointGauge: KPIDetails;\n  @Input() measurement: IMeasurementValue;\n  @Input() fractionSize = 2;\n  @Input() gaugeOptions: GaugeOptions;\n  @Input() selectedPresetId = '';\n  @ViewChild('chart', { static: false }) chart!: ElementRef;\n  private resizeObserver!: ResizeObserver;\n\n  chartOptions$: Observable<GaugeOptions>;\n  echartsInstance!: ECharts;\n  rangeColors = { default: '#E8EBED', yellow: '#ff8800', red: '#d70f0f' };\n  gaugeOptionsColors: GaugeOptionsColors;\n  private configChangedSubject = new BehaviorSubject<void | null>(null);\n  private themeSubscription: Subscription;\n\n  private readonly themeSwitcherService = inject(ThemeSwitcherService);\n  private readonly radialGaugeService = inject(RadialGaugeService);\n\n  constructor() {\n    this.chartOptions$ = this.configChangedSubject.pipe(\n      switchMap(() =>\n        of(\n          this.radialGaugeService.getChartOptions(\n            this.gaugeOptions,\n            this.activeDatapointGauge,\n            this.selectedPresetId,\n            this.gaugeOptionsColors,\n            this.rangeColors,\n            this.measurement,\n            this.fractionSize\n          )\n        )\n      ),\n      tap(options => {\n        if (this.echartsInstance) {\n          this.echartsInstance.setOption(options, false, true);\n        }\n      })\n    );\n  }\n\n  ngOnInit() {\n    if (!this.gaugeOptions) {\n      this.gaugeOptions = GAUGE_PRESETS[0];\n    }\n\n    this.themeSubscription = this.themeSwitcherService.currentlyAppliedTheme$.subscribe(() => {\n      queueMicrotask(() => {\n        this.radialGaugeService.setChart(this.chart);\n        this.rangeColors = this.radialGaugeService.updateRangeColors();\n        this.gaugeOptionsColors = this.radialGaugeService.updateGaugeOptionsColors();\n        requestAnimationFrame(() => {\n          this.configChangedSubject.next();\n        });\n      });\n    });\n  }\n\n  ngAfterViewInit() {\n    this.resizeObserver = new ResizeObserver(entries => {\n      for (const entry of entries) {\n        if (entry.contentRect.width > 0 && entry.contentRect.height > 0) {\n          this.radialGaugeService.containerSize =\n            entry.contentRect.width >= entry.contentRect.height\n              ? entry.contentRect.height\n              : entry.contentRect.width;\n          this.configChangedSubject.next();\n        }\n      }\n    });\n\n    this.resizeObserver.observe(this.chart.nativeElement);\n  }\n\n  ngOnDestroy() {\n    if (this.themeSubscription) {\n      this.themeSubscription.unsubscribe();\n    }\n\n    if (this.resizeObserver) {\n      this.resizeObserver.disconnect();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.gaugeOptions || changes.measurement || changes.activeDatapointGauge) {\n      this.configChangedSubject.next();\n    }\n  }\n\n  onChartInit(ec: ECharts) {\n    this.echartsInstance = ec;\n  }\n}\n","<div\n  class=\"p-absolute fit-w fit-h\"\n  data-cy=\"c8y-radial-gauge--chart\"\n  #chart\n  echarts\n  [options]=\"chartOptions$ | async\"\n  (chartInit)=\"onChartInit($event)\"\n></div>\n","import { Component, OnChanges, Input, Optional } from '@angular/core';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport {\n  DatePipe,\n  DynamicComponentComponent,\n  MeasurementRealtimeService\n} from '@c8y/ngx-components';\nimport { AsyncPipe, DecimalPipe, NgFor, NgIf, NgStyle } from '@angular/common';\nimport { InfoGaugeCurrentMeasurementPipe } from '../current-measurement.pipe';\nimport { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport { RadialGaugeViewComponent } from '../radial-gauge/radial-gauge.component';\nimport { InfoGaugeWidgetConfig } from '../info-gauge-widget-config/gauge.model';\n\n@Component({\n  selector: 'c8y-info-gauge-widget-view',\n  templateUrl: './info-gauge-widget-view.component.html',\n  host: { class: 'd-contents' },\n  providers: [MeasurementRealtimeService],\n  standalone: true,\n  imports: [\n    NgIf,\n    NgFor,\n    NgStyle,\n    InfoGaugeCurrentMeasurementPipe,\n    AsyncPipe,\n    DecimalPipe,\n    DatePipe,\n    RadialGaugeViewComponent\n  ]\n})\nexport class InfoGaugeWidgetViewComponent implements OnChanges {\n  @Input() config: InfoGaugeWidgetConfig;\n  activeDatapointLabels = [];\n  activeDatapointGauge: KPIDetails;\n  fractionSize = '1.1-1';\n  isInfoGauge: boolean;\n\n  constructor(\n    @Optional() private dashboard: ContextDashboardComponent,\n    @Optional() private dynamicComponent?: DynamicComponentComponent\n  ) {}\n\n  ngOnInit() {\n    if (this.config?.datapoints && !this.config.datapointsGauge) {\n      this.config.datapointsGauge = this.config.datapoints;\n    }\n  }\n\n  ngOnChanges(): void {\n    if (this.config?.datapointsLabels && Array.isArray(this.config?.datapointsLabels)) {\n      this.config.datapointsLabels.forEach(dp => this.assignContextFromContextDashboard(dp));\n      this.activeDatapointLabels = this.config?.datapointsLabels.filter(dp => dp.__active);\n    }\n\n    if (this.config?.datapointsGauge && Array.isArray(this.config?.datapointsGauge)) {\n      this.config.datapointsGauge.forEach(dp => this.assignContextFromContextDashboard(dp));\n      this.activeDatapointGauge = this.config?.datapointsGauge.find(dp => dp.__active);\n    }\n\n    if (\n      this.config?.datapoints &&\n      Array.isArray(this.config?.datapoints) &&\n      this.config?.datapoints.length > 0 &&\n      !this.config?.datapointsGauge\n    ) {\n      this.config.datapoints.forEach(dp => this.assignContextFromContextDashboard(dp));\n      this.activeDatapointGauge = this.config?.datapoints.find(dp => dp.__active);\n    }\n\n    if (typeof this.config.fractionSize === 'number' && !Number.isNaN(this.config.fractionSize)) {\n      this.fractionSize = `1.${this.config.fractionSize}-${this.config.fractionSize}`;\n    }\n    this.isInfoGauge = this.dynamicComponent?.componentId === defaultWidgetIds.INFO_GAUGE;\n  }\n\n  private assignContextFromContextDashboard(datapoint: KPIDetails) {\n    if (!this.dashboard?.isDeviceTypeDashboard) {\n      return;\n    }\n    const context = this.dashboard?.context;\n    if (context?.id) {\n      const { name, id } = context;\n      datapoint.__target = { name, id };\n    }\n  }\n}\n","<div\n  class=\"label-value-unit-gauge new-radial\"\n  *ngIf=\"isInfoGauge\"\n>\n  <div\n    class=\"gauge-legend\"\n    *ngIf=\"activeDatapointLabels?.length && isInfoGauge\"\n  >\n    <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n      <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n        <label\n          class=\"text-truncate\"\n          title=\"{{ dp.label }}\"\n        >\n          {{ dp.label }}\n        </label>\n        <h3\n          class=\"text-truncate\"\n          title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n          *ngIf=\"!measurement.notFound; else notFound\"\n        >\n          {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n        </h3>\n        <ng-template #notFound>\n          <h3>--</h3>\n        </ng-template>\n        <p class=\"text-muted m-b-8\">\n          <small>\n            <em>{{ measurement.date | c8yDate: 'short' }}</em>\n          </small>\n        </p>\n      </ng-container>\n    </ng-container>\n  </div>\n\n  <ng-container *ngIf=\"activeDatapointGauge && isInfoGauge\">\n    <div\n      class=\"gauge-svg\"\n      *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement: true | async as measurement\"\n    >\n      <svg\n        height=\"214px\"\n        width=\"214px\"\n        viewBox=\"0 0 214 214\"\n        version=\"1.1\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n      >\n        <desc>radial gauge</desc>\n        <g\n          id=\"scale\"\n          stroke=\"none\"\n          stroke-width=\"1\"\n          fill=\"none\"\n          fill-rule=\"evenodd\"\n          stroke-dasharray=\"1,5\"\n        >\n          <circle\n            id=\"Oval\"\n            stroke=\"#CACECE\"\n            stroke-width=\"7\"\n            cx=\"107\"\n            cy=\"107\"\n            r=\"103\"\n          ></circle>\n          <rect\n            id=\"mask\"\n            height=\"214\"\n            stroke=\"none\"\n            fill-rule=\"evenodd\"\n            x=\"0\"\n            y=\"0\"\n            width=\"214\"\n            transform=\"rotate(-45 290 182)\"\n          ></rect>\n        </g>\n        <path\n          class=\"track\"\n          d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n          transform=\"rotate(-135 107 107)\"\n        ></path>\n        <path\n          class=\"track-value\"\n          [ngStyle]=\"{\n            stroke: measurement.color,\n            'stroke-dashoffset': -measurement.strokeDashOffset\n          }\"\n          d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n          transform=\"rotate(-135 107 107)\"\n        ></path>\n        <foreignObject\n          class=\"d-flex a-i-center j-c-center\"\n          height=\"100%\"\n          width=\"100%\"\n          requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"\n        >\n          <div\n            class=\"d-flex d-col fit-h a-i-center j-c-center\"\n            style=\"padding: 3rem\"\n            xmlns=\"http://www.w3.org/1999/xhtml\"\n          >\n            <p\n              class=\"text-truncate text-center\"\n              title=\"{{ activeDatapointGauge.label }}\"\n            >\n              {{ activeDatapointGauge.label }}\n            </p>\n            <p\n              class=\"center-value text-truncate\"\n              title=\"{{ measurement.value | number: fractionSize }}\"\n              *ngIf=\"!measurement.notFound; else notFoundSVG\"\n            >\n              {{ measurement.value | number: fractionSize }}\n            </p>\n            <ng-template #notFoundSVG>\n              <p class=\"center-value\">--</p>\n            </ng-template>\n            <p class=\"center-unit strong\">{{ activeDatapointGauge.unit || measurement.unit }}</p>\n            <p class=\"center-date-time\">{{ measurement.date | c8yDate: 'short' }}</p>\n          </div>\n        </foreignObject>\n      </svg>\n    </div>\n  </ng-container>\n\n  <div class=\"clearfix\"></div>\n</div>\n<ng-container *ngIf=\"!isInfoGauge\">\n  <c8y-radial-gauge\n    *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement | async as measurement\"\n    [activeDatapointGauge]=\"activeDatapointGauge\"\n    [measurement]=\"measurement\"\n    [fractionSize]=\"config.fractionSize\"\n    [gaugeOptions]=\"config.gaugeOptions\"\n    [selectedPresetId]=\"config.selectedPresetId\"\n  ></c8y-radial-gauge>\n</ng-container>\n","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\nimport { RadialGaugeViewComponent } from '../../radial-gauge/radial-gauge.component';\nimport { CommonModule } from '@c8y/ngx-components';\nimport { GaugeOptions } from '../gauge.model';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n  selector: 'c8y-preset-preview',\n  templateUrl: './preset-preview.component.html',\n  standalone: true,\n  imports: [CommonModule, RadialGaugeViewComponent],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => PresetPreviewComponent),\n      multi: true\n    }\n  ]\n})\nexport class PresetPreviewComponent {\n  @Input() ALL_GAUGE_PRESETS: GaugeOptions[];\n  @Output() onPresetChange = new EventEmitter<string>();\n\n  measurement = {\n    value: Math.floor(Math.random() * 9) + 1,\n    unit: 'ºC',\n    date: '2025-04-22T20:07:49.354Z'\n  };\n  activeDatapointGauge = {\n    fragment: 'c8y_Kpi',\n    series: 'preview',\n    unit: 'ºC',\n    min: 0,\n    max: 10,\n    yellowRangeMax: 8,\n    yellowRangeMin: 5,\n    redRangeMin: 8,\n    redRangeMax: 10\n  };\n  selectedPresetId: string | null = null;\n\n  private onChange: (value: string) => void;\n  private onTouched: () => void;\n\n  writeValue(value: string): void {\n    this.selectedPresetId = value;\n  }\n\n  registerOnChange(fn: (value: string) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  emitPresetChange(presetId: string): void {\n    this.selectedPresetId = presetId;\n    this.onChange(presetId);\n    this.onTouched();\n    this.onPresetChange.emit(presetId);\n  }\n}\n","<div class=\"d-grid grid__col--4-4-4 gap-4\">\n  <button\n    class=\"c8y-radial-gauge__preset preset-{{ preset.id }}\"\n    [class.selected]=\"preset.id === selectedPresetId\"\n    [attr.aria-label]=\"preset.name | translate\"\n    type=\"button\"\n    *ngFor=\"let preset of ALL_GAUGE_PRESETS\"\n    (click)=\"emitPresetChange(preset.id)\"\n  >\n    <c8y-radial-gauge\n      class=\"c8y-radial-gauge--square\"\n      *ngIf=\"preset.id !== 'custom'\"\n      [activeDatapointGauge]=\"activeDatapointGauge\"\n      [measurement]=\"measurement\"\n      [fractionSize]=\"2\"\n      [selectedPresetId]=\"preset.id\"\n      [gaugeOptions]=\"preset\"\n    ></c8y-radial-gauge>\n    <span>{{ preset.name | translate }}</span>\n  </button>\n</div>\n","import { Component, OnInit, Input, Optional, ViewChild, OnDestroy } from '@angular/core';\nimport {\n  AbstractControl,\n  ControlContainer,\n  FormBuilder,\n  NgForm,\n  ReactiveFormsModule,\n  ValidatorFn,\n  Validators\n} from '@angular/forms';\nimport {\n  DatapointSelectorModule,\n  type DatapointAttributesFormConfig,\n  type DatapointSelectorModalOptions,\n  type KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport { WidgetConfigComponent } from '@c8y/ngx-components/context-dashboard';\nimport {\n  CommonModule,\n  DynamicComponentComponent,\n  FormGroupComponent,\n  FormsModule,\n  gettext,\n  MeasurementRealtimeService,\n  MessagesComponent,\n  OnBeforeSave\n} from '@c8y/ngx-components';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport { RadialGaugeViewComponent } from '../radial-gauge/radial-gauge.component';\nimport { InfoGaugeCurrentMeasurementPipe } from '../current-measurement.pipe';\nimport {\n  GAUGE_PRESET_NAMES,\n  GAUGE_PRESETS,\n  GaugeOptions,\n  InfoGaugeWidgetConfig\n} from './gauge.model';\nimport { EditorComponent, MonacoEditorMarkerValidatorDirective } from '@c8y/ngx-components/editor';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { PresetPreviewComponent } from './preset-preview/preset-preview.component';\n\nfunction ensureAtLeastOneDatapointSelectedAndActive(\n  datapointListAttributes: string[]\n): ValidatorFn {\n  return (control: AbstractControl) => {\n    const formValue = control.value;\n    for (const listAttributeName of datapointListAttributes) {\n      const valueForList: KPIDetails[] = formValue[listAttributeName];\n      if (!valueForList || !Array.isArray(valueForList)) {\n        continue;\n      }\n\n      if (valueForList.find(dp => dp.__active)) {\n        return null;\n      }\n    }\n    return { noActiveDatapoint: true };\n  };\n}\n\n@Component({\n  selector: 'c8y-info-gauge-widget-config',\n  templateUrl: './info-gauge-widget-config.component.html',\n  viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n  providers: [MeasurementRealtimeService],\n  standalone: true,\n  imports: [\n    FormGroupComponent,\n    MessagesComponent,\n    CommonModule,\n    FormsModule,\n    CollapseModule,\n    ReactiveFormsModule,\n    EditorComponent,\n    MonacoEditorMarkerValidatorDirective,\n    DatapointSelectorModule,\n    RadialGaugeViewComponent,\n    InfoGaugeCurrentMeasurementPipe,\n    PresetPreviewComponent\n  ]\n})\nexport class InfoGaugeWidgetConfigComponent implements OnInit, OnBeforeSave, OnDestroy {\n  @Input() config: InfoGaugeWidgetConfig;\n  @ViewChild(EditorComponent) editorComponent!: EditorComponent;\n  formGroup: ReturnType<InfoGaugeWidgetConfigComponent['createForm']>;\n  datapointSelectionConfig: Partial<DatapointSelectorModalOptions> = {};\n  defaultFormOptions: Partial<DatapointAttributesFormConfig> = {\n    showRedRange: true,\n    showYellowRange: true,\n    showRange: true,\n    selectableChartRenderTypes: []\n  };\n  isInfoGauge: boolean;\n  activeDatapointGauge: KPIDetails;\n  showAdvancedOptions = false;\n  gaugeOptionsString = '';\n  gaugeOptions: GaugeOptions;\n  showAdvancedOptionsLabel = gettext('Show advanced options');\n  hideAdvancedOptionsLabel = gettext('Hide advanced options');\n  ALL_GAUGE_PRESETS = [...GAUGE_PRESETS];\n  private limits = {\n    numberOfDecimalPlacesMax: 10,\n    numberOfDecimalPlacesMin: 0\n  } as const;\n\n  readonly GAUGE_PRESETS = GAUGE_PRESETS;\n  private destroy$ = new Subject<void>();\n\n  constructor(\n    private formBuilder: FormBuilder,\n    private form: NgForm,\n    private widgetConfig: WidgetConfigComponent,\n    @Optional() private dynamicComponent?: DynamicComponentComponent\n  ) {}\n\n  onBeforeSave(\n    config?: InfoGaugeWidgetConfigComponent['config']\n  ): boolean | Promise<boolean> | Observable<boolean> {\n    if (this.formGroup.valid) {\n      Object.assign(config, this.formGroup.value);\n      Object.assign(config, {\n        gaugeOptions: this.gaugeOptions,\n        selectedPresetId: this.isInfoGauge ? null : this.getPresetId(this.gaugeOptions)\n      });\n      return true;\n    }\n    return false;\n  }\n\n  ngOnInit(): void {\n    if (this.widgetConfig.context?.id) {\n      this.datapointSelectionConfig.contextAsset = this.widgetConfig?.context;\n    }\n    this.initForm();\n    if (this.config?.datapointsLabels) {\n      this.formGroup.patchValue({ datapointsLabels: this.config.datapointsLabels });\n    }\n    if (this.config?.datapointsGauge) {\n      this.formGroup.patchValue({ datapointsGauge: this.config.datapointsGauge });\n    }\n    if (typeof this.config?.fractionSize === 'number' && !Number.isNaN(this.config?.fractionSize)) {\n      this.formGroup.patchValue({ fractionSize: this.config.fractionSize });\n    }\n    this.isInfoGauge = this.dynamicComponent?.componentId === defaultWidgetIds.INFO_GAUGE;\n\n    const isRadialGauge = !this.isInfoGauge;\n\n    if (isRadialGauge) {\n      this.setupRadialGauge();\n    }\n\n    this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {\n      if (value.datapointsGauge) {\n        this.activeDatapointGauge = value.datapointsGauge.find(dp => dp.__active);\n      }\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  onRadioPresetChange(presetId: string): void {\n    // Find the selected preset\n    const selectedPreset = this.ALL_GAUGE_PRESETS.find(preset => preset.id === presetId);\n\n    if (selectedPreset) {\n      this.gaugeOptions = { ...selectedPreset }; // Update gaugeOptions with the selected preset\n      this.gaugeOptionsString = JSON.stringify(this.gaugeOptions, null, 2);\n\n      // If the selected preset is not custom, hide advanced options\n      if (selectedPreset.id !== 'custom') {\n        this.showAdvancedOptions = false;\n      }\n\n      // Update the form control value\n      this.formGroup.patchValue({ gaugePresetId: selectedPreset.id });\n    }\n  }\n\n  async assignSchema(): Promise<void> {\n    const { schema } = await import(\n      'c8y-schema-loader?interfaceName=GaugeOptions!@c8y/ngx-components/widgets/implementations/info-gauge'\n    );\n    this.editorComponent.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({\n      validate: true,\n      schemas: [\n        {\n          uri: 'gauge-schema.json',\n          schema: schema,\n          fileMatch: ['*']\n        }\n      ],\n      enableSchemaRequest: false,\n      allowComments: false\n    });\n  }\n\n  gaugeJSONChange(value: string): void {\n    try {\n      const parsedOptions = JSON.parse(value);\n\n      // Check if the parsed options match any existing preset\n      const matchingPreset = this.GAUGE_PRESETS.find(\n        preset => JSON.stringify(preset) === JSON.stringify(parsedOptions)\n      );\n\n      if (matchingPreset) {\n        this.formGroup.patchValue({ gaugePresetId: matchingPreset.id });\n      } else {\n        this.gaugeOptions = parsedOptions;\n        this.gaugeOptions.name = GAUGE_PRESET_NAMES.CUSTOM;\n        this.gaugeOptions.id = 'custom';\n\n        const customPresetExists = this.ALL_GAUGE_PRESETS.some(preset => preset.id === 'custom');\n\n        if (!customPresetExists) {\n          this.ALL_GAUGE_PRESETS = [...this.ALL_GAUGE_PRESETS, this.gaugeOptions];\n        } else {\n          this.ALL_GAUGE_PRESETS = this.ALL_GAUGE_PRESETS.map(preset =>\n            preset.id === 'custom' ? this.gaugeOptions : preset\n          );\n        }\n\n        this.formGroup.patchValue({ gaugePresetId: 'custom' });\n      }\n    } catch (error) {\n      console.error('Invalid JSON:', error);\n    }\n  }\n\n  trackByFn(_index: number, item: GaugeOptions): string {\n    return item.id;\n  }\n\n  private getPresetId(gaugeOptions: GaugeOptions): string {\n    const matchingPreset = this.GAUGE_PRESETS.find(preset => preset.id === gaugeOptions.id);\n\n    return matchingPreset ? matchingPreset.id : 'custom';\n  }\n\n  private setupRadialGauge() {\n    if (this.config.datapoints && !this.config.datapointsGauge) {\n      this.config.datapointsGauge = this.config.datapoints;\n    }\n\n    this.gaugeOptions = this.config.gaugeOptions || { ...this.GAUGE_PRESETS[0] };\n\n    if (this.config.selectedPresetId === 'custom') {\n      this.gaugeOptions.name = GAUGE_PRESET_NAMES.CUSTOM;\n      this.gaugeOptions.id = 'custom';\n      this.ALL_GAUGE_PRESETS = [...this.GAUGE_PRESETS, this.config.gaugeOptions];\n      this.formGroup.patchValue({ gaugePresetId: 'custom' });\n    }\n\n    this.gaugeOptionsString = JSON.stringify(this.gaugeOptions, null, 2);\n  }\n\n  private initForm(): void {\n    this.formGroup = this.createForm();\n    this.form.form.addControl('config', this.formGroup);\n    this.formGroup.patchValue(this.config);\n  }\n\n  private createForm() {\n    return this.formBuilder.group(\n      {\n        fractionSize: [\n          2,\n          [\n            Validators.required,\n            Validators.min(this.limits.numberOfDecimalPlacesMin),\n            Validators.max(this.limits.numberOfDecimalPlacesMax)\n          ]\n        ],\n        datapointsLabels: this.formBuilder.control(new Array<KPIDetails>(), []),\n        datapointsGauge: this.formBuilder.control(new Array<KPIDetails>(), []),\n        gaugePresetId: [this.config.selectedPresetId || 'default']\n      },\n      {\n        validators: [\n          ensureAtLeastOneDatapointSelectedAndActive(['datapointsLabels', 'datapointsGauge'])\n        ]\n      }\n    );\n  }\n}\n","<form\n  class=\"fit-h\"\n  [formGroup]=\"formGroup\"\n>\n  <div\n    class=\"m-l-16 m-r-16\"\n    *ngIf=\"isInfoGauge; else radialGauge\"\n  >\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <c8y-form-group class=\"p-t-8\">\n          <label translate>Decimal places</label>\n          <input\n            class=\"form-control\"\n            name=\"fractionSize\"\n            type=\"number\"\n            formControlName=\"fractionSize\"\n            step=\"1\"\n          />\n          <c8y-messages [show]=\"formGroup.controls.fractionSize.errors\"></c8y-messages>\n        </c8y-form-group>\n      </div>\n      <div class=\"col-md-6 p-t-8\">\n        <div\n          class=\"alert alert-info\"\n          role=\"alert\"\n          *ngIf=\"formGroup.errors?.noActiveDatapoint\"\n          translate\n        >\n          At least one data point for the labels or the gauge needs to be selected.\n        </div>\n      </div>\n    </div>\n\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <c8y-datapoint-selection-list\n          class=\"bg-inherit separator-top p-t-16 d-block\"\n          listTitle=\"{{ 'Multiple label and value pairs' | translate }}\"\n          name=\"datapoints\"\n          [defaultFormOptions]=\"defaultFormOptions\"\n          [config]=\"datapointSelectionConfig\"\n          [minActiveCount]=\"0\"\n          formControlName=\"datapointsLabels\"\n        ></c8y-datapoint-selection-list>\n      </div>\n      <div class=\"col-md-6\">\n        <c8y-datapoint-selection-list\n          class=\"bg-inherit separator-top p-t-16 d-block\"\n          listTitle=\"{{ 'Gauge`display`' | translate }}\"\n          name=\"datapoints\"\n          [defaultFormOptions]=\"defaultFormOptions\"\n          [config]=\"datapointSelectionConfig\"\n          [minActiveCount]=\"0\"\n          [maxActiveCount]=\"1\"\n          formControlName=\"datapointsGauge\"\n        ></c8y-datapoint-selection-list>\n      </div>\n    </div>\n  </div>\n\n  <ng-template #radialGauge>\n    <div class=\"d-flex-md fit-h\">\n      <div class=\"col-md-6 inner-scroll p-0 bg-component\">\n        <c8y-datapoint-selection-list\n          class=\"bg-inherit d-block\"\n          listTitle=\"{{ 'Data points`display`' | translate }}\"\n          name=\"datapoints\"\n          [defaultFormOptions]=\"defaultFormOptions\"\n          [config]=\"datapointSelectionConfig\"\n          [minActiveCount]=\"0\"\n          [maxActiveCount]=\"1\"\n          formControlName=\"datapointsGauge\"\n        ></c8y-datapoint-selection-list>\n\n        <c8y-form-group class=\"p-t-8 p-r-16 p-l-16\">\n          <label translate>Decimal places</label>\n          <input\n            class=\"form-control\"\n            name=\"fractionSize\"\n            type=\"number\"\n            formControlName=\"fractionSize\"\n            step=\"1\"\n          />\n          <c8y-messages [show]=\"formGroup.controls.fractionSize.errors\"></c8y-messages>\n        </c8y-form-group>\n\n        <div class=\"form-group p-r-16 p-l-16 m-b-0\">\n          <legend>\n            {{ 'Presets' | translate }}\n          </legend>\n          <c8y-preset-preview\n            formControlName=\"gaugePresetId\"\n            [ALL_GAUGE_PRESETS]=\"ALL_GAUGE_PRESETS\"\n            (onPresetChange)=\"onRadioPresetChange($event)\"\n          ></c8y-preset-preview>\n        </div>\n\n        <div class=\"p-16\">\n          <button\n            class=\"btn btn-default\"\n            aria-controls=\"advancedCollapse\"\n            [attr.aria-expanded]=\"showAdvancedOptions\"\n            type=\"button\"\n            (click)=\"showAdvancedOptions = !showAdvancedOptions\"\n          >\n            {{ showAdvancedOptions ? hideAdvancedOptionsLabel : showAdvancedOptionsLabel }}\n          </button>\n        </div>\n\n        <div\n          class=\"collapse\"\n          id=\"advancedCollapse\"\n          [collapse]=\"!showAdvancedOptions\"\n          [isAnimated]=\"true\"\n        >\n          <div\n            class=\"fit-h\"\n            style=\"min-height: 400px\"\n          >\n            <c8y-editor\n              [ngModel]=\"gaugeOptionsString\"\n              (ngModelChange)=\"gaugeJSONChange($event)\"\n              (editorInit)=\"assignSchema()\"\n              [ngModelOptions]=\"{ standalone: true }\"\n              monacoEditorMarkerValidator\n            ></c8y-editor>\n          </div>\n        </div>\n      </div>\n      <div\n        class=\"col-md-6\"\n        *ngIf=\"\n          this.formGroup.value.datapointsGauge.length > 0 && activeDatapointGauge;\n          else emptyState\n        \"\n      >\n        <!-- Radial Gauge -->\n        <c8y-radial-gauge\n          class=\"c8y-radial-gauge--square\"\n          *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement | async as measurement\"\n          [activeDatapointGauge]=\"activeDatapointGauge\"\n          [measurement]=\"measurement\"\n          [fractionSize]=\"formGroup.value.fractionSize\"\n          [gaugeOptions]=\"gaugeOptions\"\n          [selectedPresetId]=\"formGroup.value.gaugePresetId\"\n        ></c8y-radial-gauge>\n      </div>\n    </div>\n  </ng-template>\n</form>\n\n<ng-template #emptyState>\n  <div class=\"col-md-6 d-col a-i-start j-c-center\">\n    <c8y-ui-empty-state\n      [icon]=\"'c8y-data-points'\"\n      [title]=\"'Please select a data point first.' | translate\"\n      [horizontal]=\"false\"\n    ></c8y-ui-empty-state>\n  </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { InfoGaugeWidgetViewComponent } from './info-gauge-widget-view/info-gauge-widget-view.component';\nimport { InfoGaugeWidgetConfigComponent } from './info-gauge-widget-config/info-gauge-widget-config.component';\nimport { InfoGaugeCurrentMeasurementPipe } from './current-measurement.pipe';\nimport { RadialGaugeViewComponent } from './radial-gauge/radial-gauge.component';\n\n/**\n * @deprecated\n */\n@NgModule({\n  imports: [\n    InfoGaugeWidgetViewComponent,\n    InfoGaugeWidgetConfigComponent,\n    InfoGaugeCurrentMeasurementPipe,\n    RadialGaugeViewComponent\n  ]\n})\nexport class InfoGaugeWidgetModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4"],"mappings":"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"}