@c8y/ngx-components 1023.17.20 → 1023.22.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/auth-configuration/index.d.ts +4 -2
  2. package/auth-configuration/index.d.ts.map +1 -1
  3. package/datapoint-explorer/view/index.d.ts.map +1 -1
  4. package/echart/index.d.ts +3 -0
  5. package/echart/index.d.ts.map +1 -1
  6. package/echart/models/index.d.ts +3 -0
  7. package/echart/models/index.d.ts.map +1 -1
  8. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +25 -17
  9. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  10. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +4 -2
  11. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  12. package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
  13. package/fesm2022/c8y-ngx-components-echart.mjs +98 -59
  14. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  15. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +2 -3
  16. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
  17. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +7 -9
  18. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +6 -8
  20. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  21. package/fesm2022/c8y-ngx-components-repository-software.mjs +6 -8
  22. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  23. package/fesm2022/c8y-ngx-components-tenants.mjs +2 -2
  24. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  25. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +9 -4
  26. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  27. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +4 -2
  28. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  29. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +6 -6
  30. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  31. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +5 -4
  32. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
  33. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +5 -5
  34. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
  35. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +2 -3
  36. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs.map +1 -1
  37. package/fesm2022/c8y-ngx-components.mjs +13 -10
  38. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  39. package/index.d.ts.map +1 -1
  40. package/locales/de.po +42 -31
  41. package/locales/es.po +45 -28
  42. package/locales/fr.po +45 -31
  43. package/locales/ja_JP.po +38 -31
  44. package/locales/ko.po +42 -31
  45. package/locales/locales.pot +36 -24
  46. package/locales/nl.po +45 -27
  47. package/locales/pl.po +44 -28
  48. package/locales/pt_BR.po +45 -28
  49. package/locales/zh_CN.po +46 -31
  50. package/locales/zh_TW.po +46 -31
  51. package/operations/stepper-bulk-type-firmware/index.d.ts.map +1 -1
  52. package/operations/stepper-bulk-type-software/index.d.ts.map +1 -1
  53. package/package.json +1 -1
  54. package/repository/firmware/index.d.ts.map +1 -1
  55. package/repository/software/index.d.ts.map +1 -1
  56. package/trusted-certificates/index.d.ts.map +1 -1
  57. package/widgets/implementations/datapoints-graph/index.d.ts.map +1 -1
  58. package/widgets/implementations/datapoints-table/index.d.ts +1 -1
  59. package/widgets/implementations/info-gauge/index.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"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, 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 (\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","<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 {\n Component,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlContainer,\n FormBuilder,\n NgForm,\n ReactiveFormsModule,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n CommonModule,\n DynamicComponentComponent,\n FormGroupComponent,\n FormsModule,\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 DatapointAttributesFormConfig,\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\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 PresetPreviewComponent,\n InfoGaugeWidgetViewComponent\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 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\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 (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 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.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {\n if (value.datapointsGauge) {\n this.activeDatapointGauge = value.datapointsGauge.find(dp => dp.__active);\n }\n if (value.datapointsLabels) {\n this.activeDatapointLabel = value.datapointsLabels.find(dp => dp.__active);\n }\n // this.previewConfig = { ...this.previewConfig, gaugeOptions: this.gaugeOptions };\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 {\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 @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 <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\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 } @else {\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 }\n</form>\n\n<ng-template #gaugePreview>\n @if (\n (this.formGroup.value.datapointsGauge?.length > 0 && activeDatapointGauge) ||\n (this.formGroup.value.datapointsLabels?.length > 0 && activeDatapointLabel)\n ) {\n <div style=\"height: 300px\">\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 translate>\n Find out more in the\n <a c8y-guide-href=\"/docs/cockpit/widgets-collection/#info-gauge\">user documentation</a>\n .\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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"}
1
+ {"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, 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 (\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","<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 {\n Component,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlContainer,\n FormBuilder,\n NgForm,\n ReactiveFormsModule,\n ValidatorFn,\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 DatapointAttributesFormConfig,\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\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 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 defaultFormOptions: Partial<DatapointAttributesFormConfig> = {\n showRedRange: true,\n showYellowRange: true,\n showRange: true,\n selectableChartRenderTypes: []\n };\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\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 (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 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.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {\n if (value.datapointsGauge) {\n this.activeDatapointGauge = value.datapointsGauge.find(dp => dp.__active);\n }\n if (value.datapointsLabels) {\n this.activeDatapointLabel = value.datapointsLabels.find(dp => dp.__active);\n }\n // this.previewConfig = { ...this.previewConfig, gaugeOptions: this.gaugeOptions };\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 {\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 @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 <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\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 } @else {\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 }\n</form>\n\n<ng-template #gaugePreview>\n @if (\n (this.formGroup.value.datapointsGauge?.length > 0 && activeDatapointGauge) ||\n (this.formGroup.value.datapointsLabels?.length > 0 && activeDatapointLabel)\n ) {\n <div style=\"height: 300px\">\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 .\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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"}