{"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/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/gettext';\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\n                    // use -- as fallback in case date is not set (e.g. no measurement yet available for datapoint)\n                    let formattedDate = '--';\n                    if (measurement?.date) {\n                      const date = new Date(measurement.date);\n                      formattedDate = this.c8yDatePipe.transform(date);\n                    }\n\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, 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    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 (\n      this.config &&\n      typeof this.config.fractionSize === 'number' &&\n      !Number.isNaN(this.config.fractionSize)\n    ) {\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","@if (isInfoGauge) {\n  <div class=\"label-value-unit-gauge new-radial\">\n    @if (activeDatapointLabels?.length && isInfoGauge) {\n      <div class=\"gauge-legend\">\n        @for (dp of activeDatapointLabels; track dp) {\n          @if (dp | infoGaugeCurrentMeasurement | async; as measurement) {\n            <label\n              class=\"text-truncate\"\n              title=\"{{ dp.label }}\"\n            >\n              {{ dp.label }}\n            </label>\n            @if (!measurement.notFound) {\n              <h3\n                class=\"text-truncate\"\n                title=\"{{ measurement.value | number: fractionSize }} {{\n                  dp.unit || measurement.unit\n                }}\"\n              >\n                {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n              </h3>\n            } @else {\n              <h3>--</h3>\n            }\n            <p class=\"text-muted m-b-8\">\n              <small>\n                <div>{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n                <div>{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n              </small>\n            </p>\n          }\n        }\n      </div>\n    }\n    @if (activeDatapointGauge && isInfoGauge) {\n      @if (activeDatapointGauge | infoGaugeCurrentMeasurement: true | async; as measurement) {\n        <div class=\"gauge-svg\">\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                @if (!measurement.notFound) {\n                  <p\n                    class=\"center-value text-truncate\"\n                    title=\"{{ measurement.value | number: fractionSize }}\"\n                  >\n                    {{ measurement.value | number: fractionSize }}\n                  </p>\n                } @else {\n                  <p class=\"center-value\">--</p>\n                }\n                <p class=\"center-unit strong\">\n                  {{ activeDatapointGauge.unit || measurement.unit }}\n                </p>\n                <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n                <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n              </div>\n            </foreignObject>\n          </svg>\n        </div>\n      }\n    }\n    <div class=\"clearfix\"></div>\n  </div>\n}\n@if (!isInfoGauge) {\n  @if (activeDatapointGauge | infoGaugeCurrentMeasurement | async; as measurement) {\n    <c8y-radial-gauge\n      [activeDatapointGauge]=\"activeDatapointGauge\"\n      [measurement]=\"measurement\"\n      [fractionSize]=\"config.fractionSize\"\n      [gaugeOptions]=\"config.gaugeOptions\"\n      [selectedPresetId]=\"config.selectedPresetId\"\n    ></c8y-radial-gauge>\n  }\n}\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 {\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  Optional,\n  TemplateRef,\n  ViewChild\n} from '@angular/core';\nimport {\n  ControlContainer,\n  FormBuilder,\n  NgForm,\n  ReactiveFormsModule,\n  Validators\n} from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  CommonModule,\n  DynamicComponentComponent,\n  FormGroupComponent,\n  FormsModule,\n  GuideDocsComponent,\n  MeasurementRealtimeService,\n  MessagesComponent,\n  OnBeforeSave\n} from '@c8y/ngx-components';\nimport { WidgetConfigComponent, WidgetConfigService } from '@c8y/ngx-components/context-dashboard';\nimport {\n  DatapointSelectorModule,\n  type DatapointSelectorModalOptions,\n  type KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport { EditorComponent, MonacoEditorMarkerValidatorDirective } from '@c8y/ngx-components/editor';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { debounceTime, Observable, Subject, takeUntil } from 'rxjs';\nimport { InfoGaugeWidgetViewComponent } from '../info-gauge-widget-view/info-gauge-widget-view.component';\nimport {\n  GAUGE_PRESET_NAMES,\n  GAUGE_PRESETS,\n  GaugeOptions,\n  InfoGaugeWidgetConfig\n} from './gauge.model';\nimport { PresetPreviewComponent } from './preset-preview/preset-preview.component';\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    PresetPreviewComponent,\n    InfoGaugeWidgetViewComponent,\n    GuideDocsComponent\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  isInfoGauge: boolean;\n  activeDatapointGauge: KPIDetails;\n  activeDatapointLabel: 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  previewConfig: InfoGaugeWidgetConfig;\n  datapointsLabels: KPIDetails[];\n  datapointsGauge: KPIDetails[];\n\n  @ViewChild('gaugePreview')\n  set previewMapSet(template: TemplateRef<any>) {\n    if (template) {\n      this.widgetConfigService.setPreview(template);\n      return;\n    }\n    this.widgetConfigService.setPreview(null);\n  }\n\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  private jsonChange$ = new Subject<string>();\n\n  constructor(\n    private formBuilder: FormBuilder,\n    private form: NgForm,\n    private widgetConfig: WidgetConfigComponent,\n    private widgetConfigService: WidgetConfigService,\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 (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    this.previewConfig = {\n      ...this.config,\n      fractionSize: this.config?.fractionSize ?? 2,\n      datapointsGauge: this.config?.datapointsGauge ?? [],\n      datapointsLabels: this.config?.datapointsLabels ?? []\n    };\n\n    const isRadialGauge = !this.isInfoGauge;\n\n    if (isRadialGauge) {\n      this.setupRadialGauge();\n    }\n\n    this.widgetConfigService.currentConfig$\n      .pipe(takeUntil(this.destroy$))\n      .subscribe((config: InfoGaugeWidgetConfig) => {\n        const { datapointsGauge, datapointsLabels } = config;\n        if (datapointsGauge) {\n          this.activeDatapointGauge = datapointsGauge.find(dp => dp.__active);\n        }\n        if (datapointsLabels) {\n          this.activeDatapointLabel = datapointsLabels.find(dp => dp.__active);\n        }\n        this.datapointsLabels = datapointsLabels;\n        this.datapointsGauge = datapointsGauge;\n\n        this.previewConfig = {\n          ...this.previewConfig,\n          datapointsGauge,\n          datapointsLabels\n        };\n      });\n\n    this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {\n      this.previewConfig = {\n        ...this.previewConfig,\n        ...value,\n        selectedPresetId: value.gaugePresetId,\n        gaugeOptions: this.gaugeOptions\n      };\n    });\n\n    this.jsonChange$\n      .pipe(takeUntil(this.destroy$), debounceTime(500))\n      .subscribe(value => this.processJSONChange(value));\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n    this.jsonChange$.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      this.previewConfig = {\n        ...this.previewConfig,\n        selectedPresetId: selectedPreset.id,\n        gaugeOptions: this.gaugeOptions\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    this.jsonChange$.next(value);\n  }\n\n  trackByFn(_index: number, item: GaugeOptions): string {\n    return item.id;\n  }\n\n  private processJSONChange(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        this.previewConfig = {\n          ...this.previewConfig,\n          selectedPresetId: 'custom',\n          gaugeOptions: this.gaugeOptions\n        };\n      }\n    } catch (error) {\n      console.error('Invalid JSON:', error);\n    }\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.previewConfig = {\n        ...this.previewConfig,\n        selectedPresetId: 'custom',\n        gaugeOptions: this.gaugeOptions\n      };\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      fractionSize: [\n        2,\n        [\n          Validators.required,\n          Validators.min(this.limits.numberOfDecimalPlacesMin),\n          Validators.max(this.limits.numberOfDecimalPlacesMax)\n        ]\n      ],\n      gaugePresetId: [this.config.selectedPresetId || 'default']\n    });\n  }\n}\n","<form\n  class=\"fit-h\"\n  [formGroup]=\"formGroup\"\n>\n  @if (isInfoGauge) {\n    <div class=\"m-l-16 m-r-16\">\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      @if (formGroup.errors?.noActiveDatapoint) {\n        <div\n          class=\"alert alert-info\"\n          role=\"alert\"\n          translate\n        >\n          At least one data point for the labels or the gauge needs to be selected.\n        </div>\n      }\n    </div>\n  } @else {\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  }\n</form>\n\n<ng-template #gaugePreview>\n  @if (\n    (datapointsGauge?.length > 0 && activeDatapointGauge) ||\n    (datapointsLabels?.length > 0 && activeDatapointLabel)\n  ) {\n    <div>\n      <c8y-info-gauge-widget-view [config]=\"previewConfig\"></c8y-info-gauge-widget-view>\n    </div>\n  } @else {\n    <div class=\"d-col a-i-start j-c-center\">\n      <c8y-ui-empty-state\n        [icon]=\"'c8y-data-points'\"\n        [title]=\"'No data points selected' | translate\"\n        [subtitle]=\"'Select data point to render content' | translate\"\n        [horizontal]=\"false\"\n        data-cy=\"info-gauge--empty-state-no-data-point-selected\"\n      >\n        <p c8y-guide-docs>\n          <small\n            translate\n            ngNonBindable\n          >\n            Find out more in the\n            <a c8y-guide-href=\"/docs/cockpit/widgets-collection/#info-gauge\">user documentation</a>.\n          </small>\n        </p>\n      </c8y-ui-empty-state>\n    </div>\n  }\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3"],"mappings":"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"}